commit 3439c0d90d9a3e2753ee3f728446ec78dbd9de65 Author: Jean Date: Thu Jun 4 17:02:35 2026 +0200 Initial commit: Linux Transcriber app with multi-language and auto-detection support diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9c5c297 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +PyQt5>=5.15.0 +SpeechRecognition>=3.10.0 +python-docx>=0.8.11 +langdetect>=1.0.9 diff --git a/src/__pycache__/worker.cpython-312.pyc b/src/__pycache__/worker.cpython-312.pyc new file mode 100644 index 0000000..6811c15 Binary files /dev/null and b/src/__pycache__/worker.cpython-312.pyc differ diff --git a/src/audio/.gitkeep b/src/audio/.gitkeep new file mode 100644 index 0000000..80b0f56 --- /dev/null +++ b/src/audio/.gitkeep @@ -0,0 +1 @@ +# Audio files storage directory diff --git a/src/export/.gitkeep b/src/export/.gitkeep new file mode 100644 index 0000000..61bd917 --- /dev/null +++ b/src/export/.gitkeep @@ -0,0 +1 @@ +# Exported documents directory diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..2a23aeb --- /dev/null +++ b/src/main.py @@ -0,0 +1,10 @@ +import sys +from PyQt5.QtWidgets import QApplication +from ui.main_window import MainWindow + +app = QApplication(sys.argv) + +window = MainWindow() +window.show() + +sys.exit(app.exec_()) diff --git a/src/transcription/__init__.py b/src/transcription/__init__.py new file mode 100644 index 0000000..31c46fb --- /dev/null +++ b/src/transcription/__init__.py @@ -0,0 +1,3 @@ +from .transcriber import Transcriber + +__all__ = ['Transcriber'] diff --git a/src/transcription/__pycache__/__init__.cpython-312.pyc b/src/transcription/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..5748452 Binary files /dev/null and b/src/transcription/__pycache__/__init__.cpython-312.pyc differ diff --git a/src/transcription/__pycache__/transcriber.cpython-312.pyc b/src/transcription/__pycache__/transcriber.cpython-312.pyc new file mode 100644 index 0000000..5aa3c62 Binary files /dev/null and b/src/transcription/__pycache__/transcriber.cpython-312.pyc differ diff --git a/src/transcription/transcriber.py b/src/transcription/transcriber.py new file mode 100644 index 0000000..9e94aa8 --- /dev/null +++ b/src/transcription/transcriber.py @@ -0,0 +1,155 @@ +import speech_recognition as sr +import os +from pathlib import Path + + +class Transcriber: + """Handles audio transcription using various backends.""" + + SUPPORTED_FORMATS = {'.wav', '.mp3', '.flac', '.ogg', '.m4a', '.aac'} + + # Language code mappings for Google Speech-to-Text API + LANGUAGE_CODES = { + "English": "en-US", + "Spanish": "es-ES", + "French": "fr-FR", + "German": "de-DE", + "Italian": "it-IT", + "Portuguese": "pt-BR", + "Russian": "ru-RU", + "Japanese": "ja-JP", + "Chinese (Mandarin)": "zh-CN", + "Korean": "ko-KR", + "Hindi": "hi-IN", + "Dutch": "nl-NL", + "Swedish": "sv-SE", + "Norwegian": "nb-NO", + "Danish": "da-DK", + "Polish": "pl-PL", + "Turkish": "tr-TR", + "Greek": "el-GR", + "Arabic": "ar-SA" + } + + def __init__(self): + self.recognizer = sr.Recognizer() + + def transcribe(self, audio_file, language="English"): + """ + Transcribe an audio file. + + Supports: WAV, MP3, FLAC, OGG, M4A, AAC + Uses Google Speech-to-Text API (free tier). + + Args: + audio_file: Path to the audio file + language: Language name (default: English) + Use "Auto-detect" for automatic language detection + + Returns: + For auto-detect: tuple (text, detected_language) + For specific language: text string + """ + if not os.path.exists(audio_file): + raise FileNotFoundError(f"Audio file not found: {audio_file}") + + file_ext = Path(audio_file).suffix.lower() + if file_ext not in self.SUPPORTED_FORMATS: + raise ValueError(f"Unsupported format: {file_ext}") + + # Convert non-WAV files to WAV for processing + if file_ext != '.wav': + wav_file = self._convert_to_wav(audio_file) + else: + wav_file = audio_file + + try: + with sr.AudioFile(wav_file) as source: + audio = self.recognizer.record(source) + + if language == "Auto-detect": + # Try with English first, then detect the actual language + try: + text = self.recognizer.recognize_google(audio) + except sr.UnknownValueError: + raise ValueError("Could not understand audio") + + # Detect the language of the transcribed text + detected_lang = self._detect_language(text) + return (text, detected_lang) + else: + # Use Google Speech-to-Text with selected language + language_code = self.LANGUAGE_CODES.get(language, "en-US") + text = self.recognizer.recognize_google(audio, language=language_code) + return text + + finally: + # Clean up converted file if it was created + if file_ext != '.wav' and os.path.exists(wav_file): + os.remove(wav_file) + + def _detect_language(self, text): + """ + Detect the language of the given text. + + Returns the language name or None if detection fails. + """ + try: + from langdetect import detect + from langdetect import LangDetectException + + lang_code = detect(text) + + # Map language codes to names + code_to_name = { + 'en': 'English', + 'es': 'Spanish', + 'fr': 'French', + 'de': 'German', + 'it': 'Italian', + 'pt': 'Portuguese', + 'ru': 'Russian', + 'ja': 'Japanese', + 'zh-cn': 'Chinese (Mandarin)', + 'ko': 'Korean', + 'hi': 'Hindi', + 'nl': 'Dutch', + 'sv': 'Swedish', + 'no': 'Norwegian', + 'da': 'Danish', + 'pl': 'Polish', + 'tr': 'Turkish', + 'el': 'Greek', + 'ar': 'Arabic' + } + + return code_to_name.get(lang_code, lang_code.upper()) + + except ImportError: + return None + except Exception: + return None + + def _convert_to_wav(self, audio_file): + """ + Convert audio file to WAV format. + Requires ffmpeg to be installed. + """ + try: + import subprocess + except ImportError: + raise ImportError("subprocess module required for audio conversion") + + output_file = audio_file.replace(Path(audio_file).suffix, '.wav') + + # Use ffmpeg to convert + cmd = ['ffmpeg', '-i', audio_file, '-acodec', 'pcm_s16le', + '-ar', '16000', output_file, '-y'] + + try: + subprocess.run(cmd, check=True, capture_output=True) + return output_file + except subprocess.CalledProcessError as e: + raise RuntimeError(f"FFmpeg conversion failed: {e.stderr.decode()}") + except FileNotFoundError: + raise RuntimeError("FFmpeg not found. Please install ffmpeg: sudo apt-get install ffmpeg") diff --git a/src/ui/__pycache__/main_window.cpython-312.pyc b/src/ui/__pycache__/main_window.cpython-312.pyc new file mode 100644 index 0000000..65466e4 Binary files /dev/null and b/src/ui/__pycache__/main_window.cpython-312.pyc differ diff --git a/src/ui/main_window.py b/src/ui/main_window.py new file mode 100644 index 0000000..2f0340e --- /dev/null +++ b/src/ui/main_window.py @@ -0,0 +1,184 @@ +from PyQt5.QtWidgets import ( + QMainWindow, + QWidget, + QVBoxLayout, + QHBoxLayout, + QPushButton, + QTextEdit, + QLabel, + QFileDialog, + QComboBox +) +from worker import TranscriptionWorker +import os + +class MainWindow(QMainWindow): + + def __init__(self): + super().__init__() + + self.audio_file = None + self.worker = None + + self.setWindowTitle("Linux Transcriber") + self.resize(1000, 700) + + central = QWidget() + self.setCentralWidget(central) + + layout = QVBoxLayout(central) + + buttons = QHBoxLayout() + + self.open_btn = QPushButton("Open Audio") + self.transcribe_btn = QPushButton("Transcribe") + self.save_docx_btn = QPushButton("Save DOCX") + self.save_txt_btn = QPushButton("Save TXT") + + # Language selection dropdown + self.language_label = QLabel("Language:") + self.language_combo = QComboBox() + self.language_combo.addItems([ + "Auto-detect", "English", "Spanish", "French", "German", "Italian", + "Portuguese", "Russian", "Japanese", "Chinese (Mandarin)", + "Korean", "Hindi", "Dutch", "Swedish", "Norwegian", + "Danish", "Polish", "Turkish", "Greek", "Arabic" + ]) + + buttons.addWidget(self.open_btn) + buttons.addWidget(self.transcribe_btn) + buttons.addWidget(self.language_label) + buttons.addWidget(self.language_combo) + buttons.addWidget(self.save_docx_btn) + buttons.addWidget(self.save_txt_btn) + + self.status = QLabel("Ready") + self.editor = QTextEdit() + + layout.addLayout(buttons) + layout.addWidget(self.editor) + layout.addWidget(self.status) + + self.open_btn.clicked.connect(self.open_audio) + self.transcribe_btn.clicked.connect(self.start_transcription) + self.save_docx_btn.clicked.connect(self.save_as_docx) + self.save_txt_btn.clicked.connect(self.save_as_txt) + + def open_audio(self): + + filename, _ = QFileDialog.getOpenFileName( + self, + "Open Audio File", + "", + "Audio Files (*.wav *.mp3 *.flac *.ogg *.m4a *.aac);;" + "WAV Files (*.wav);;" + "MP3 Files (*.mp3);;" + "FLAC Files (*.flac);;" + "OGG Files (*.ogg);;" + "M4A Files (*.m4a);;" + "All Files (*)" + ) + + if filename: + self.audio_file = filename + self.status.setText(f"Loaded: {filename}") + + def start_transcription(self): + """Start transcription in a worker thread.""" + if not self.audio_file: + self.status.setText("Error: No audio file loaded") + return + + # Disable transcribe button to prevent multiple clicks + self.transcribe_btn.setEnabled(False) + + # Get selected language + language = self.language_combo.currentText() + + # Create and configure worker + self.worker = TranscriptionWorker(self.audio_file, language) + self.worker.started.connect(self.on_transcription_started) + self.worker.finished.connect(self.transcription_finished) + self.worker.error.connect(self.transcription_error) + self.worker.progress.connect(self.on_transcription_progress) + + # Start worker thread + self.worker.start() + + def on_transcription_started(self): + """Called when transcription starts.""" + self.status.setText("Transcribing...") + + def on_transcription_progress(self, message): + """Called when transcription emits progress updates.""" + self.status.setText(message) + + def transcription_finished(self, text): + """Handle transcription completion with optional detected language.""" + # text can be a string or tuple (text, detected_language) + if isinstance(text, tuple): + transcribed_text, detected_lang = text + self.editor.setText(transcribed_text) + if detected_lang: + self.status.setText(f"Finished (Detected: {detected_lang})") + else: + self.status.setText("Finished") + else: + self.editor.setText(text) + self.status.setText("Finished") + + self.transcribe_btn.setEnabled(True) + + def transcription_error(self, error): + + self.status.setText( + f"Error: {error}" + ) + self.transcribe_btn.setEnabled(True) + + def save_as_docx(self): + """Save transcription to Word document.""" + if not self.editor.toPlainText(): + self.status.setText("Error: No text to save") + return + + filename, _ = QFileDialog.getSaveFileName( + self, + "Save as Word Document", + "", + "Word Documents (*.docx)" + ) + + if filename: + try: + from docx import Document + doc = Document() + doc.add_paragraph(self.editor.toPlainText()) + doc.save(filename) + self.status.setText(f"Saved: {filename}") + except ImportError: + self.status.setText("Error: python-docx not installed") + except Exception as e: + self.status.setText(f"Error: {str(e)}") + + def save_as_txt(self): + """Save transcription to text file.""" + if not self.editor.toPlainText(): + self.status.setText("Error: No text to save") + return + + filename, _ = QFileDialog.getSaveFileName( + self, + "Save as Text File", + "", + "Text Files (*.txt)" + ) + + if filename: + try: + with open(filename, 'w') as f: + f.write(self.editor.toPlainText()) + self.status.setText(f"Saved: {filename}") + except Exception as e: + self.status.setText(f"Error: {str(e)}") + diff --git a/src/worker.py b/src/worker.py new file mode 100644 index 0000000..819acb2 --- /dev/null +++ b/src/worker.py @@ -0,0 +1,36 @@ +from PyQt5.QtCore import QThread, pyqtSignal +from transcription.transcriber import Transcriber + + +class TranscriptionWorker(QThread): + """Worker thread for running transcription outside the GUI thread.""" + + # Signals + started = pyqtSignal() + finished = pyqtSignal(str) # Emits transcription result + error = pyqtSignal(str) # Emits error message + progress = pyqtSignal(str) # Emits progress updates + + def __init__(self, audio_file, language="English"): + super().__init__() + self.audio_file = audio_file + self.language = language + + def run(self): + """Run the transcription in the worker thread.""" + try: + if self.language == "Auto-detect": + self.progress.emit("Starting transcription with auto-detection...") + else: + self.progress.emit(f"Starting transcription in {self.language}...") + + self.started.emit() + + transcriber = Transcriber() + result = transcriber.transcribe(self.audio_file, self.language) + + self.progress.emit("Transcription complete!") + self.finished.emit(result) + + except Exception as e: + self.error.emit(f"Transcription failed: {str(e)}") diff --git a/venv/bin/Activate.ps1 b/venv/bin/Activate.ps1 new file mode 100644 index 0000000..b49d77b --- /dev/null +++ b/venv/bin/Activate.ps1 @@ -0,0 +1,247 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/venv/bin/activate b/venv/bin/activate new file mode 100644 index 0000000..dbbfbc1 --- /dev/null +++ b/venv/bin/activate @@ -0,0 +1,70 @@ +# This file must be used with "source bin/activate" *from bash* +# You cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # Call hash to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + hash -r 2> /dev/null + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +# on Windows, a path can contain colons and backslashes and has to be converted: +if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then + # transform D:\path\to\venv to /d/path/to/venv on MSYS + # and to /cygdrive/d/path/to/venv on Cygwin + export VIRTUAL_ENV=$(cygpath /home/jean/linux-transcriber/venv) +else + # use the path as-is + export VIRTUAL_ENV=/home/jean/linux-transcriber/venv +fi + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/"bin":$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1='(venv) '"${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT='(venv) ' + export VIRTUAL_ENV_PROMPT +fi + +# Call hash to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +hash -r 2> /dev/null diff --git a/venv/bin/activate.csh b/venv/bin/activate.csh new file mode 100644 index 0000000..3d6f629 --- /dev/null +++ b/venv/bin/activate.csh @@ -0,0 +1,27 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. + +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV /home/jean/linux-transcriber/venv + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/"bin":$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + set prompt = '(venv) '"$prompt" + setenv VIRTUAL_ENV_PROMPT '(venv) ' +endif + +alias pydoc python -m pydoc + +rehash diff --git a/venv/bin/activate.fish b/venv/bin/activate.fish new file mode 100644 index 0000000..f2b0d65 --- /dev/null +++ b/venv/bin/activate.fish @@ -0,0 +1,69 @@ +# This file must be used with "source /bin/activate.fish" *from fish* +# (https://fishshell.com/). You cannot run it directly. + +function deactivate -d "Exit virtual environment and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + set -e _OLD_FISH_PROMPT_OVERRIDE + # prevents error when using nested fish instances (Issue #93858) + if functions -q _old_fish_prompt + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + end + + set -e VIRTUAL_ENV + set -e VIRTUAL_ENV_PROMPT + if test "$argv[1]" != "nondestructive" + # Self-destruct! + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV /home/jean/linux-transcriber/venv + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/"bin $PATH + +# Unset PYTHONHOME if set. +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # Save the current fish_prompt function as the function _old_fish_prompt. + functions -c fish_prompt _old_fish_prompt + + # With the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command. + set -l old_status $status + + # Output the venv prompt; color taken from the blue of the Python logo. + printf "%s%s%s" (set_color 4B8BBE) '(venv) ' (set_color normal) + + # Restore the return status of the previous command. + echo "exit $old_status" | . + # Output the original/"old" prompt. + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" + set -gx VIRTUAL_ENV_PROMPT '(venv) ' +end diff --git a/venv/bin/idna b/venv/bin/idna new file mode 100755 index 0000000..ad7d7db --- /dev/null +++ b/venv/bin/idna @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from idna.cli import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/normalizer b/venv/bin/normalizer new file mode 100755 index 0000000..42fa280 --- /dev/null +++ b/venv/bin/normalizer @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from charset_normalizer.cli import cli_detect +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(cli_detect()) diff --git a/venv/bin/pip b/venv/bin/pip new file mode 100755 index 0000000..871c586 --- /dev/null +++ b/venv/bin/pip @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pip3 b/venv/bin/pip3 new file mode 100755 index 0000000..871c586 --- /dev/null +++ b/venv/bin/pip3 @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pip3.12 b/venv/bin/pip3.12 new file mode 100755 index 0000000..871c586 --- /dev/null +++ b/venv/bin/pip3.12 @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pylupdate5 b/venv/bin/pylupdate5 new file mode 100755 index 0000000..7860554 --- /dev/null +++ b/venv/bin/pylupdate5 @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from PyQt5.pylupdate_main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pyrcc5 b/venv/bin/pyrcc5 new file mode 100755 index 0000000..d607706 --- /dev/null +++ b/venv/bin/pyrcc5 @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from PyQt5.pyrcc_main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/python b/venv/bin/python new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/venv/bin/python3 b/venv/bin/python3 new file mode 120000 index 0000000..ae65fda --- /dev/null +++ b/venv/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/venv/bin/python3.12 b/venv/bin/python3.12 new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/venv/bin/python3.12 @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/venv/bin/pyuic5 b/venv/bin/pyuic5 new file mode 100755 index 0000000..4a49021 --- /dev/null +++ b/venv/bin/pyuic5 @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from PyQt5.uic.pyuic import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/srt b/venv/bin/srt new file mode 100755 index 0000000..b5acba4 --- /dev/null +++ b/venv/bin/srt @@ -0,0 +1,57 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +import os +import sys +import errno + + +SRT_BIN_PREFIX = "srt-" + + +def find_srt_commands_in_path(): + paths = os.environ.get("PATH", "").split(os.pathsep) + + for path in paths: + try: + path_files = os.listdir(path) + except OSError as thrown_exc: + if thrown_exc.errno in (errno.ENOENT, errno.ENOTDIR): + continue + else: + raise + + for path_file in path_files: + if path_file.startswith(SRT_BIN_PREFIX): + yield path_file[len(SRT_BIN_PREFIX) :] + + +def show_help(): + print( + "Available commands " + "(pass --help to a specific command for usage information):\n" + ) + commands = sorted(set(find_srt_commands_in_path())) + for command in commands: + print("- {}".format(command)) + + +def main(): + if len(sys.argv) < 2 or sys.argv[1].startswith("-"): + show_help() + sys.exit(0) + + command = sys.argv[1] + + available_commands = find_srt_commands_in_path() + + if command not in available_commands: + print('Unknown command: "{}"\n'.format(command)) + show_help() + sys.exit(1) + + real_command = SRT_BIN_PREFIX + command + os.execvp(real_command, [real_command] + sys.argv[2:]) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/srt-deduplicate b/venv/bin/srt-deduplicate new file mode 100755 index 0000000..bc09705 --- /dev/null +++ b/venv/bin/srt-deduplicate @@ -0,0 +1,96 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +"""Deduplicate repeated subtitles.""" + +import datetime +import srt_tools.utils +import logging +import operator + +log = logging.getLogger(__name__) + +try: # Python 2 + range = xrange # pytype: disable=name-error +except NameError: + pass + + +def parse_args(): + examples = { + "Remove duplicated subtitles within 5 seconds of each other": "srt deduplicate -i duplicated.srt", + "Remove duplicated subtitles within 500 milliseconds of each other": "srt deduplicate -t 500 -i duplicated.srt", + "Remove duplicated subtitles regardless of temporal proximity": "srt deduplicate -t 0 -i duplicated.srt", + } + parser = srt_tools.utils.basic_parser( + description=__doc__, + examples=examples, + ) + parser.add_argument( + "-t", + "--ms", + metavar="MILLISECONDS", + default=datetime.timedelta(milliseconds=5000), + type=lambda ms: datetime.timedelta(milliseconds=int(ms)), + help="how many milliseconds distance a subtitle start time must be " + "within of another to be considered a duplicate " + "(default: 5000ms)", + ) + + return parser.parse_args() + + +def deduplicate_subs(orig_subs, acceptable_diff): + """Remove subtitles with duplicated content.""" + indices_to_remove = [] + + # If we only store the subtitle itself and compare that, it's possible that + # we'll not only remove the duplicate, but also the _original_ subtitle if + # they have the same sub index/times/etc. + # + # As such, we need to also store the index in the original subs list that + # this entry belongs to for each subtitle prior to sorting. + sorted_subs = sorted( + enumerate(orig_subs), key=lambda sub: (sub[1].content, sub[1].start) + ) + + for subs in srt_tools.utils.sliding_window(sorted_subs, width=2, inclusive=False): + cur_idx, cur_sub = subs[0] + next_idx, next_sub = subs[1] + + if cur_sub.content == next_sub.content and ( + not acceptable_diff or cur_sub.start + acceptable_diff >= next_sub.start + ): + log.debug( + "Marking l%d/s%d for removal, duplicate of l%d/s%d", + next_idx, + next_sub.index, + cur_idx, + cur_sub.index, + ) + indices_to_remove.append(next_idx) + + offset = 0 + for idx in indices_to_remove: + del orig_subs[idx - offset] + offset += 1 + + +def main(): + args = parse_args() + logging.basicConfig(level=args.log_level) + + srt_tools.utils.set_basic_args(args) + + subs = list(args.input) + deduplicate_subs(subs, args.ms) + + output = srt_tools.utils.compose_suggest_on_fail(subs, strict=args.strict) + + try: + args.output.write(output) + except (UnicodeEncodeError, TypeError): # Python 2 fallback + args.output.write(output.encode(args.encoding)) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/srt-fixed-timeshift b/venv/bin/srt-fixed-timeshift new file mode 100755 index 0000000..2195769 --- /dev/null +++ b/venv/bin/srt-fixed-timeshift @@ -0,0 +1,47 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +"""Shifts a subtitle by a fixed number of seconds.""" + +import datetime +import srt_tools.utils +import logging + +log = logging.getLogger(__name__) + + +def parse_args(): + examples = { + "Make all subtitles 5 seconds later": "srt fixed-timeshift --seconds 5", + "Make all subtitles 5 seconds earlier": "srt fixed-timeshift --seconds -5", + } + + parser = srt_tools.utils.basic_parser(description=__doc__, examples=examples) + parser.add_argument( + "--seconds", type=float, required=True, help="how many seconds to shift" + ) + return parser.parse_args() + + +def scalar_correct_subs(subtitles, seconds_to_shift): + td_to_shift = datetime.timedelta(seconds=seconds_to_shift) + for subtitle in subtitles: + subtitle.start += td_to_shift + subtitle.end += td_to_shift + yield subtitle + + +def main(): + args = parse_args() + logging.basicConfig(level=args.log_level) + srt_tools.utils.set_basic_args(args) + corrected_subs = scalar_correct_subs(args.input, args.seconds) + output = srt_tools.utils.compose_suggest_on_fail(corrected_subs, strict=args.strict) + + try: + args.output.write(output) + except (UnicodeEncodeError, TypeError): # Python 2 fallback + args.output.write(output.encode(args.encoding)) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/srt-linear-timeshift b/venv/bin/srt-linear-timeshift new file mode 100755 index 0000000..ba8e2a4 --- /dev/null +++ b/venv/bin/srt-linear-timeshift @@ -0,0 +1,105 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +"""Perform linear time correction on a subtitle.""" + +from __future__ import division + +import srt +import datetime +import srt_tools.utils +import logging + +log = logging.getLogger(__name__) + + +def timedelta_to_milliseconds(delta): + return delta.days * 86400000 + delta.seconds * 1000 + delta.microseconds / 1000 + + +def parse_args(): + def srt_timestamp_to_milliseconds(parser, arg): + try: + delta = srt.srt_timestamp_to_timedelta(arg) + except ValueError: + parser.error("not a valid SRT timestamp: %s" % arg) + else: + return timedelta_to_milliseconds(delta) + + examples = { + "Stretch out a subtitle so that second 1 is 1, 2 is 3, 3 is 5, etc": "srt linear-timeshift --f1 00:00:01,000 --t1 00:00:01,000 --f2 00:00:02,000 --t2 00:00:03,000" + } + + parser = srt_tools.utils.basic_parser(description=__doc__, examples=examples) + parser.add_argument( + "--from-start", + "--f1", + type=lambda arg: srt_timestamp_to_milliseconds(parser, arg), + required=True, + help="the first desynchronised timestamp", + ) + parser.add_argument( + "--to-start", + "--t1", + type=lambda arg: srt_timestamp_to_milliseconds(parser, arg), + required=True, + help="the first synchronised timestamp", + ) + parser.add_argument( + "--from-end", + "--f2", + type=lambda arg: srt_timestamp_to_milliseconds(parser, arg), + required=True, + help="the second desynchronised timestamp", + ) + parser.add_argument( + "--to-end", + "--t2", + type=lambda arg: srt_timestamp_to_milliseconds(parser, arg), + required=True, + help="the second synchronised timestamp", + ) + return parser.parse_args() + + +def calc_correction(to_start, to_end, from_start, from_end): + angular = (to_end - to_start) / (from_end - from_start) + linear = to_end - angular * from_end + return angular, linear + + +def correct_time(current_msecs, angular, linear): + return round(current_msecs * angular + linear) + + +def correct_timedelta(bad_delta, angular, linear): + bad_msecs = timedelta_to_milliseconds(bad_delta) + good_msecs = correct_time(bad_msecs, angular, linear) + good_delta = datetime.timedelta(milliseconds=good_msecs) + return good_delta + + +def linear_correct_subs(subtitles, angular, linear): + for subtitle in subtitles: + subtitle.start = correct_timedelta(subtitle.start, angular, linear) + subtitle.end = correct_timedelta(subtitle.end, angular, linear) + yield subtitle + + +def main(): + args = parse_args() + logging.basicConfig(level=args.log_level) + angular, linear = calc_correction( + args.to_start, args.to_end, args.from_start, args.from_end + ) + srt_tools.utils.set_basic_args(args) + corrected_subs = linear_correct_subs(args.input, angular, linear) + output = srt_tools.utils.compose_suggest_on_fail(corrected_subs, strict=args.strict) + + try: + args.output.write(output) + except (UnicodeEncodeError, TypeError): # Python 2 fallback + args.output.write(output.encode(args.encoding)) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/srt-lines-matching b/venv/bin/srt-lines-matching new file mode 100755 index 0000000..4348ee2 --- /dev/null +++ b/venv/bin/srt-lines-matching @@ -0,0 +1,85 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +"""Filter subtitles that match or don't match a particular pattern.""" + +import importlib +import srt_tools.utils +import logging + +log = logging.getLogger(__name__) + + +def strip_to_matching_lines_only(subtitles, imports, func_str, invert, per_sub): + for import_name in imports: + real_import = importlib.import_module(import_name) + globals()[import_name] = real_import + + raw_func = eval(func_str) # pylint: disable-msg=eval-used + + if invert: + func = lambda line: not raw_func(line) + else: + func = raw_func + + for subtitle in subtitles: + if per_sub: + if not func(subtitle.content): + subtitle.content = "" + else: + subtitle.content = "\n".join( + line for line in subtitle.content.splitlines() if func(line) + ) + + yield subtitle + + +def parse_args(): + examples = { + "Only include Chinese lines": "srt lines-matching -m hanzidentifier -f hanzidentifier.has_chinese", + "Exclude all lines which only contain numbers": "srt lines-matching -v -f 'lambda x: x.isdigit()'", + } + parser = srt_tools.utils.basic_parser(description=__doc__, examples=examples) + parser.add_argument( + "-f", "--func", help="a function to use to match lines", required=True + ) + parser.add_argument( + "-m", + "--module", + help="modules to import in the function context", + action="append", + default=[], + ) + parser.add_argument( + "-s", + "--per-subtitle", + help="match the content of each subtitle, not each line", + action="store_true", + ) + parser.add_argument( + "-v", + "--invert", + help="invert matching -- only match lines returning False", + action="store_true", + ) + return parser.parse_args() + + +def main(): + args = parse_args() + logging.basicConfig(level=args.log_level) + srt_tools.utils.set_basic_args(args) + matching_subtitles_only = strip_to_matching_lines_only( + args.input, args.module, args.func, args.invert, args.per_subtitle + ) + output = srt_tools.utils.compose_suggest_on_fail( + matching_subtitles_only, strict=args.strict + ) + + try: + args.output.write(output) + except (UnicodeEncodeError, TypeError): # Python 2 fallback + args.output.write(output.encode(args.encoding)) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/srt-mux b/venv/bin/srt-mux new file mode 100755 index 0000000..584eefb --- /dev/null +++ b/venv/bin/srt-mux @@ -0,0 +1,112 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +"""Merge multiple subtitles together into one.""" + +import datetime +import srt_tools.utils +import logging +import operator + +log = logging.getLogger(__name__) + +TOP = r"{\an8}" +BOTTOM = r"{\an2}" + + +def parse_args(): + examples = { + "Merge English and Chinese subtitles": "srt mux -i eng.srt -i chs.srt -o both.srt", + "Merge subtitles, with one on top and one at the bottom": "srt mux -t -i eng.srt -i chs.srt -o both.srt", + } + parser = srt_tools.utils.basic_parser( + description=__doc__, examples=examples, multi_input=True + ) + parser.add_argument( + "--ms", + metavar="MILLISECONDS", + default=datetime.timedelta(milliseconds=600), + type=lambda ms: datetime.timedelta(milliseconds=int(ms)), + help="if subs being muxed are within this number of milliseconds " + "of each other, they will have their times matched (default: 600)", + ) + parser.add_argument( + "-w", + "--width", + default=5, + type=int, + help="how many subs to consider for time matching at once (default: %(default)s)", + ) + parser.add_argument( + "-t", + "--top-and-bottom", + action="store_true", + help="use SSA-style tags to place files at the top and bottom, respectively. Turns off time matching", + ) + parser.add_argument( + "--no-time-matching", + action="store_true", + help="don't try to do time matching for close subtitles (see --ms)", + ) + return parser.parse_args() + + +def merge_subs(subs, acceptable_diff, attr, width): + """ + Merge subs with similar start/end times together. This prevents the + subtitles jumping around the screen. + + The merge is done in-place. + """ + sorted_subs = sorted(subs, key=operator.attrgetter(attr)) + + for subs in srt_tools.utils.sliding_window(sorted_subs, width=width): + current_sub = subs[0] + future_subs = subs[1:] + current_comp = getattr(current_sub, attr) + + for future_sub in future_subs: + future_comp = getattr(future_sub, attr) + if current_comp + acceptable_diff > future_comp: + log.debug( + "Merging %d's %s time into %d", + future_sub.index, + attr, + current_sub.index, + ) + setattr(future_sub, attr, current_comp) + else: + # Since these are sorted, and this one didn't match, we can be + # sure future ones won't match either. + break + + +def main(): + args = parse_args() + logging.basicConfig(level=args.log_level) + + srt_tools.utils.set_basic_args(args) + + muxed_subs = [] + for idx, subs in enumerate(args.input): + for sub in subs: + if args.top_and_bottom: + if idx % 2 == 0: + sub.content = TOP + sub.content + else: + sub.content = BOTTOM + sub.content + muxed_subs.append(sub) + + if args.no_time_matching or not args.top_and_bottom: + merge_subs(muxed_subs, args.ms, "start", args.width) + merge_subs(muxed_subs, args.ms, "end", args.width) + + output = srt_tools.utils.compose_suggest_on_fail(muxed_subs, strict=args.strict) + + try: + args.output.write(output) + except (UnicodeEncodeError, TypeError): # Python 2 fallback + args.output.write(output.encode(args.encoding)) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/srt-normalise b/venv/bin/srt-normalise new file mode 100755 index 0000000..4e821aa --- /dev/null +++ b/venv/bin/srt-normalise @@ -0,0 +1,28 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +"""Takes a badly formatted SRT file and outputs a strictly valid one.""" + +import srt_tools.utils +import logging + +log = logging.getLogger(__name__) + + +def main(): + examples = {"Normalise a subtitle": "srt normalise -i bad.srt -o good.srt"} + + args = srt_tools.utils.basic_parser( + description=__doc__, examples=examples, hide_no_strict=True + ).parse_args() + logging.basicConfig(level=args.log_level) + srt_tools.utils.set_basic_args(args) + output = srt_tools.utils.compose_suggest_on_fail(args.input, strict=args.strict) + + try: + args.output.write(output) + except (UnicodeEncodeError, TypeError): # Python 2 fallback + args.output.write(output.encode(args.encoding)) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/srt-play b/venv/bin/srt-play new file mode 100755 index 0000000..8714131 --- /dev/null +++ b/venv/bin/srt-play @@ -0,0 +1,59 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +"""Play subtitles with correct timing to stdout.""" + +from __future__ import print_function +import logging +from threading import Timer, Lock +import srt_tools.utils +import sys +import time + +log = logging.getLogger(__name__) +output_lock = Lock() + + +def print_sub(sub, encoding): + log.debug("Timer woke up to print %s", sub.content) + + with output_lock: + try: + sys.stdout.write(sub.content + "\n\n") + except UnicodeEncodeError: # Python 2 fallback + sys.stdout.write(sub.content.encode(encoding) + "\n\n") + sys.stdout.flush() + + +def schedule(subs, encoding): + timers = set() + log.debug("Scheduling subtitles") + + for sub in subs: + secs = sub.start.total_seconds() + cur_timer = Timer(secs, print_sub, [sub, encoding]) + cur_timer.name = "%s:%s" % (sub.index, secs) + cur_timer.daemon = True + log.debug('Adding "%s" to schedule queue', cur_timer.name) + timers.add(cur_timer) + + for timer in timers: + log.debug('Starting timer for "%s"', timer.name) + timer.start() + + while any(t.is_alive() for t in timers): + time.sleep(0.5) + + +def main(): + examples = {"Play a subtitle": "srt play -i foo.srt"} + + args = srt_tools.utils.basic_parser( + description=__doc__, examples=examples, no_output=True + ).parse_args() + logging.basicConfig(level=args.log_level) + srt_tools.utils.set_basic_args(args) + schedule(args.input, args.encoding) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/srt-process b/venv/bin/srt-process new file mode 100755 index 0000000..c6854b4 --- /dev/null +++ b/venv/bin/srt-process @@ -0,0 +1,57 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 + +"""Process subtitle text content using arbitrary Python code.""" + +import importlib +import srt_tools.utils +import logging + +log = logging.getLogger(__name__) + + +def strip_to_matching_lines_only(subtitles, imports, func_str): + for import_name in imports: + real_import = importlib.import_module(import_name) + globals()[import_name] = real_import + + func = eval(func_str) # pylint: disable-msg=eval-used + + for subtitle in subtitles: + subtitle.content = func(subtitle.content) + yield subtitle + + +def parse_args(): + examples = { + "Strip HTML-like symbols from a subtitle": """srt process -m re -f 'lambda sub: re.sub("<[^<]+?>", "", sub)'""" + } + + parser = srt_tools.utils.basic_parser(description=__doc__, examples=examples) + parser.add_argument( + "-f", "--func", help="a function to use to process lines", required=True + ) + parser.add_argument( + "-m", + "--module", + help="modules to import in the function context", + action="append", + default=[], + ) + return parser.parse_args() + + +def main(): + args = parse_args() + logging.basicConfig(level=args.log_level) + srt_tools.utils.set_basic_args(args) + processed_subs = strip_to_matching_lines_only(args.input, args.module, args.func) + output = srt_tools.utils.compose_suggest_on_fail(processed_subs, strict=args.strict) + + try: + args.output.write(output) + except (UnicodeEncodeError, TypeError): # Python 2 fallback + args.output.write(output.encode(args.encoding)) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/venv/bin/tqdm b/venv/bin/tqdm new file mode 100755 index 0000000..63db289 --- /dev/null +++ b/venv/bin/tqdm @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from tqdm.cli import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/vosk-transcriber b/venv/bin/vosk-transcriber new file mode 100755 index 0000000..eb2f082 --- /dev/null +++ b/venv/bin/vosk-transcriber @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from vosk.transcriber.cli import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/websockets b/venv/bin/websockets new file mode 100755 index 0000000..97d7be2 --- /dev/null +++ b/venv/bin/websockets @@ -0,0 +1,8 @@ +#!/home/jean/linux-transcriber/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from websockets.cli import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so b/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000..83590cf Binary files /dev/null and b/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/INSTALLER b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/METADATA b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/METADATA new file mode 100644 index 0000000..e1ff600 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/METADATA @@ -0,0 +1,60 @@ +Metadata-Version: 2.1 +Name: PyQt5 +Version: 5.15.11 +Requires-Python: >=3.8 +Summary: Python bindings for the Qt cross platform application toolkit +Description-Content-Type: text/markdown +Project-Url: homepage, https://www.riverbankcomputing.com/software/pyqt/ +Requires-Dist: PyQt5-sip (>=12.15, <13) +Requires-Dist: PyQt5-Qt5 (>=5.15.2, <5.16.0) +License: GPL v3 +Author-Email: Riverbank Computing Limited + +# PyQt5 - Comprehensive Python Bindings for Qt v5 + +Qt is set of cross-platform C++ libraries that implement high-level APIs for +accessing many aspects of modern desktop and mobile systems. These include +location and positioning services, multimedia, NFC and Bluetooth connectivity, +a Chromium based web browser, as well as traditional UI development. + +PyQt5 is a comprehensive set of Python bindings for Qt v5. It is implemented +as more than 35 extension modules and enables Python to be used as an +alternative application development language to C++ on all supported platforms +including iOS and Android. + +PyQt5 may also be embedded in C++ based applications to allow users of those +applications to configure or enhance the functionality of those applications. + + +## Author + +PyQt5 is copyright (c) Riverbank Computing Limited. Its homepage is +https://www.riverbankcomputing.com/software/pyqt/. + +Support may be obtained from the PyQt mailing list at +https://www.riverbankcomputing.com/mailman/listinfo/pyqt/. + + +## License + +PyQt5 is released under the GPL v3 license and under a commercial license that +allows for the development of proprietary applications. + + +## Documentation + +The documentation for the latest release can be found +[here](https://www.riverbankcomputing.com/static/Docs/PyQt5/). + + +## Installation + +The GPL version of PyQt5 can be installed from PyPI: + + pip install PyQt5 + +`pip` will also build and install the bindings from the sdist package but Qt's +`qmake` tool must be on `PATH`. + +The `sip-install` tool will also install the bindings from the sdist package +but will allow you to configure many aspects of the installation. diff --git a/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/RECORD b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/RECORD new file mode 100644 index 0000000..ee6a130 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/RECORD @@ -0,0 +1,974 @@ +../../../bin/pylupdate5,sha256=VIfmZA6f3xGCQnVCBlKAnRrXhzeQdG9rFl14AqrxBNY,248 +../../../bin/pyrcc5,sha256=zBlwAiDmJWpoZi2is3zsegWUoHI-1Hr7qzokjgPUQ9o,244 +../../../bin/pyuic5,sha256=96Ja_0wbODOeZClESfR6eSqzdDCQcaX0YZzBl9tkflM,243 +PyQt5-5.15.11.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyQt5-5.15.11.dist-info/METADATA,sha256=RMxZP7iqdLV5ln5cxZ7h2rvol3DBkD6n7DGj66--xy0,2079 +PyQt5-5.15.11.dist-info/RECORD,, +PyQt5-5.15.11.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +PyQt5-5.15.11.dist-info/WHEEL,sha256=gHHdrRteaVDFNj2O5yTbJpreQgem2c73puGseKahtoM,107 +PyQt5-5.15.11.dist-info/entry_points.txt,sha256=ntRRkFTnzrkEwvniYBrWiZqwftVwWeBDg0PgxXnbmVo,112 +PyQt5/Qt.abi3.so,sha256=OwR9MF_QmtXWTCLyLbr8_JdUOqiUXkZvbWnXnOsGuHw,8560 +PyQt5/Qt5/qsci/api/python/PyQt5.api,sha256=Dj35Z67vcmwCEVPgIPufq4hv5X6jnfx32L_qqUX_iPI,1745439 +PyQt5/QtBluetooth.abi3.so,sha256=M9sWDXf_di-8ycWSce6bLEpGI7DiyXNSSPMiY56Fy5s,585328 +PyQt5/QtBluetooth.pyi,sha256=7OwZaprFz6FInh9q0Ei28HOFTNmEz96_79JCjG_0Lp8,83373 +PyQt5/QtCore.abi3.so,sha256=EAAbKgtW3bpF7zPHE1Fu_eJ10mZOTDxxLU4EUDcvUuE,4139248 +PyQt5/QtCore.pyi,sha256=abcoxRXg3z2PFaSOzgGLHQO9q1PJdoDzD00Z9tk9MkU,482637 +PyQt5/QtDBus.abi3.so,sha256=39xuTJyf5jSV_0heHhg6vGg3fFOsj22nO2v50LgLIe0,292576 +PyQt5/QtDBus.pyi,sha256=ye2dsGjDOuaSgGWjhi1g39ETtvi6nkNAs3o7YKUQPcs,28218 +PyQt5/QtDesigner.abi3.so,sha256=-BpyoQtHZWfuNOGMBiY_21cqe-WnwfcsonFL3mF532A,482936 +PyQt5/QtDesigner.pyi,sha256=Im6hNlmx-P8O56JdE3YTNOoJ3IAoZdnIXH52l_jgfjo,25445 +PyQt5/QtGui.abi3.so,sha256=NxKRh47kqGGJ7yjmQzlzmt0fM-40Eo_Q5mueco6pkzU,4389256 +PyQt5/QtGui.pyi,sha256=EjfuuQjH3FRded8KBQpRgbUkPjyabUhNVw1x_dV_m5k,472001 +PyQt5/QtHelp.abi3.so,sha256=rpGBvFBRi7R3Yy8iLm8c80PaZ5JXYr496qeCVxrUbTI,308232 +PyQt5/QtHelp.pyi,sha256=Nv0GL63w9gSncDQ1bk63wuWDgtYwjTHso_8pLpvqQIU,14364 +PyQt5/QtLocation.abi3.so,sha256=M8EIhXSxeCJmAKnh3MGYP_7C6ukiB03GfG5jbmn0ne0,785112 +PyQt5/QtLocation.pyi,sha256=XBOxh-H4TK0Np1aUKHnHrvIDRzB0nWRtJMbrvrN-uSs,67851 +PyQt5/QtMultimedia.abi3.so,sha256=39JouRQ26SqNN3H-rLPmNuffJEpsB330Os0WSffKWdo,1519408 +PyQt5/QtMultimedia.pyi,sha256=5WeZ8m-jgi10R-UTQu9ep52KgQKw3l7tEwvUkxHRt6c,124987 +PyQt5/QtMultimediaWidgets.abi3.so,sha256=DlhjqgF_jrydP1yG1LML0at2e8E7EmfzSA38sqsADIs,168920 +PyQt5/QtMultimediaWidgets.pyi,sha256=Jm8Hve60ujm3ML71g2ifNYx6sNQDQl5bqB5gd5VG51E,6136 +PyQt5/QtNetwork.abi3.so,sha256=9SGD77dyvEIgOsb9sSlz7d__ZNgZFNkaROKKtv3tefE,1222168 +PyQt5/QtNetwork.pyi,sha256=wkVhl5SeppzoEapXuqAQrVe4zQlHdNv3qa-W6oMImoU,118046 +PyQt5/QtNfc.abi3.so,sha256=HifCK9Au31DjByCPxO36HA1FZbefvLlZ3sRcaGFhQcc,237912 +PyQt5/QtNfc.pyi,sha256=e5DpoA7Y3Nhz6ujy-xHoPKZvB_feZakOQnkRRl7WWnA,22483 +PyQt5/QtOpenGL.abi3.so,sha256=8S2ETcR2gZvMmToRCR6Kyvlj9uxw8kRcDyL0CsN_-0Y,192344 +PyQt5/QtOpenGL.pyi,sha256=pRFLvsIHfEoEksxA-kqPY0m2bnsDZ9hGPGkSE_iHQGU,18612 +PyQt5/QtPositioning.abi3.so,sha256=duombv6mPOIxdW5Epc70ab0YLjncSJ_gcR7KTYWNxyU,323976 +PyQt5/QtPositioning.pyi,sha256=Un6DzL0-Ofp5XSGKmrdxWXg2MzCH31xQXtugAK9NkHY,27860 +PyQt5/QtPrintSupport.abi3.so,sha256=4OmiGDV3FTquPAL_VVbWCRLitzgihvShX3q4Y51Ujs0,331152 +PyQt5/QtPrintSupport.pyi,sha256=513qXG_EUrMHS-A6J6mti1FQDude7Xm4Sp49Z60fjQU,21765 +PyQt5/QtQml.abi3.so,sha256=Xc9dYPbJzeErmPSkyNoEQfTFkC7Kr5RLt5E8kQFJhHs,1172320 +PyQt5/QtQml.pyi,sha256=kMpv10Sr0pd8yz0WD-7qMmefbW0eb1gL8GWIZNI_qE8,33549 +PyQt5/QtQuick.abi3.so,sha256=BzimZuKZh_mSwr4UiZNROr9wbeSCeyYgH4lnHK3njhE,2205752 +PyQt5/QtQuick.pyi,sha256=4OzV1czPZIcEID0LcVaqggsCeIVex30uY5GfSlHi_FU,92630 +PyQt5/QtQuick3D.abi3.so,sha256=3_65xGHcx_9y9OsMikUk8IX4Bgah1jM2FZmGi0YPcLk,58888 +PyQt5/QtQuick3D.pyi,sha256=HLm-bLV-dFcZLxnJFkUBgxFcCcD2LnCMcVQT34ym4hg,5565 +PyQt5/QtQuickWidgets.abi3.so,sha256=lhEd2OP3lOt_jc48qv11k1ogPme77-v_RPziRSTuaII,86864 +PyQt5/QtQuickWidgets.pyi,sha256=_h8UIf-AN3Wx3Dv78gUDK7rc47lb3cgnijxDoiS7Mcs,5101 +PyQt5/QtRemoteObjects.abi3.so,sha256=O_fqST-Co_2sGMOgE_SUTYHG5pNt6zydMqPl6Xq9Y7I,158184 +PyQt5/QtRemoteObjects.pyi,sha256=tQI0CP2ibMrVlcCGyfgW9WyIMXWJqFuko1ChMGnOKao,9516 +PyQt5/QtSensors.abi3.so,sha256=V64MzH1i3Da3JkZxYCihTwRK0SXU3VVlUgYRqT_4uA4,414392 +PyQt5/QtSensors.pyi,sha256=XiXPZqfoAJYMzXIkqAdpCpQmEBbw57xc3yh79su3rj8,21331 +PyQt5/QtSerialPort.abi3.so,sha256=uC4sFP_91z0zIpleVGFwUyxs55SlZnIQvvPQcxWgEK4,115472 +PyQt5/QtSerialPort.pyi,sha256=99Zaf4k1qt2vSAumaUoFrHEAcUfpWB8wC3oD8LxezB0,12538 +PyQt5/QtSql.abi3.so,sha256=ziMY-SaU5TC8fLpbmeJ7rdbqofXdlcTUnwgieWDDtnM,503224 +PyQt5/QtSql.pyi,sha256=ZtYQwZxX5IsJUvH8lsUr_LnazWMdVllbFOu4FHLmOAU,31693 +PyQt5/QtSvg.abi3.so,sha256=MqFrN-nI38jT-YSgpJ1A8Eprvhr9Pa1nPEKD1zF9Zxg,150880 +PyQt5/QtSvg.pyi,sha256=mtARvWhLcDL18pz0YdfoLS-rrfbqJdkdn7Ep4oirHBw,6609 +PyQt5/QtTest.abi3.so,sha256=8ON0Wfj0_5n4gPRyeFtgTB7dxFWAt6U4N51S4a4CdEo,130040 +PyQt5/QtTest.pyi,sha256=EXCEdCPiujdbmd-NWCJ9ZY3RS3a1GxdlBgbMv9I5De8,12101 +PyQt5/QtTextToSpeech.abi3.so,sha256=vG4lXzQVup8sYvxMHokFStNhARwxxM811UxwoIvCFCc,57352 +PyQt5/QtTextToSpeech.pyi,sha256=qnd5X8uommsN-wThSt3KH-JOQ1NEu9ElsDVqUbzSr14,3771 +PyQt5/QtWebChannel.abi3.so,sha256=3ZTRlF9WkzavSdPG8RLMSRDNBCorRJ7j3eeyqyDE_K8,46816 +PyQt5/QtWebChannel.pyi,sha256=E3pdCn4u_mI3Hp7916cVlIjEVCOGvmKySlzeFC4y56o,2530 +PyQt5/QtWebSockets.abi3.so,sha256=bD9rzlZngak_ftpMtMy6nr1pGKBAWD-Zy-D0zgbf4lQ,122992 +PyQt5/QtWebSockets.pyi,sha256=utQnMNugfMuo-N7MMNOrYKOmEo-iEAzmiUOi0D7Hu5M,9998 +PyQt5/QtWidgets.abi3.so,sha256=vwZNT7LFademQ26tPsjkSv-Vxg--BIKfTSL6p0KZu_Q,7271296 +PyQt5/QtWidgets.pyi,sha256=NyJvQb9FgM46pJ1Ehp3kc63LcmdZjGTMObF37n5qZB8,577768 +PyQt5/QtX11Extras.abi3.so,sha256=D709cyH48-5_58tO3SX8NhyAek60T0INTVzzqaqtqA4,23336 +PyQt5/QtX11Extras.pyi,sha256=zyVL4a-u6a6WqsIRNHO1MPZMttDTV7y5NAdX7QBNpto,2320 +PyQt5/QtXml.abi3.so,sha256=jSgf8y1XHNBcrTv0RQQxvhCagrt8ez9KLsBw04ToUaE,425976 +PyQt5/QtXml.pyi,sha256=NrXNdJ2BBjKE0l4xdpmEJu_5mjit14lf2msztvm0UXE,32782 +PyQt5/QtXmlPatterns.abi3.so,sha256=V9I0Y6QH7ZgfkCEyhEOb_gdXuUEOhFivLzEeiimthBw,231080 +PyQt5/QtXmlPatterns.pyi,sha256=Yk1yQ9lZ9fFx_-QGoWRUkKzKs7um8D8NrIEVuMF8kog,16388 +PyQt5/_QOpenGLFunctions_2_0.abi3.so,sha256=nLbZCSL8cQFAxNNfQbvuvwSV4CFLWDb7oT_TNaY2cFE,359032 +PyQt5/_QOpenGLFunctions_2_1.abi3.so,sha256=X88F_E4YzTBs3SQM1oTnO_mwtKL4YPxem7mw3KTmpi4,360208 +PyQt5/_QOpenGLFunctions_4_1_Core.abi3.so,sha256=_I_gukLTqGjr0kn9oGUDNP8awdyGD3adPC_v8kwW6qk,193416 +PyQt5/__init__.py,sha256=oJw-mrUQtrUtl6zn4jXz2glNRkgvb-heDnNxhhN_s7E,960 +PyQt5/__pycache__/__init__.cpython-312.pyc,, +PyQt5/__pycache__/pylupdate_main.cpython-312.pyc,, +PyQt5/__pycache__/pyrcc_main.cpython-312.pyc,, +PyQt5/bindings/QtBluetooth/QtBluetooth.toml,sha256=vXa-OuMqtPWY7ppxEt8YDarBuaOPFJlysrhz3GNicwg,181 +PyQt5/bindings/QtBluetooth/QtBluetoothmod.sip,sha256=clugCkN_-sn34cz4tkuhQHTVMczYNPfzyM67mpQWgGM,2812 +PyQt5/bindings/QtBluetooth/qbluetooth.sip,sha256=h4tOLLswsCoXD6rtFyFYPr0bxJ4GgP99UtUwuGqxxK4,1818 +PyQt5/bindings/QtBluetooth/qbluetoothaddress.sip,sha256=OXvKglG5U1zKSMmhwXHX6FfEQTvSgazqZ6IkcE6CWG8,1565 +PyQt5/bindings/QtBluetooth/qbluetoothdevicediscoveryagent.sip,sha256=ZB1w3cFjgOnEMjPYA2obhdErE5vbO-IulTHWQHYrYW0,3334 +PyQt5/bindings/QtBluetooth/qbluetoothdeviceinfo.sip,sha256=RDeqPwuOjoG5wFA6zrJJYHIiObE29-drrpyCd2-hRYs,7118 +PyQt5/bindings/QtBluetooth/qbluetoothhostinfo.sip,sha256=iGft0I5TmU1jYID_Pu3rt1r_fdwzBikQ_16Q7jVZq3o,1511 +PyQt5/bindings/QtBluetooth/qbluetoothlocaldevice.sip,sha256=k5ILWI4tgjcLNR3Rnj5EP6mtJa1WEcoO3ycFwu4le1Y,2914 +PyQt5/bindings/QtBluetooth/qbluetoothserver.sip,sha256=oY89JJQPM28s1IYm8cBf13rWfF6UeapRq3sFusMlpEg,3620 +PyQt5/bindings/QtBluetooth/qbluetoothservicediscoveryagent.sip,sha256=bFtHmpiIWt8YW0on7IexygfnPK2P9HWlBMKOumcg9Ls,2550 +PyQt5/bindings/QtBluetooth/qbluetoothserviceinfo.sip,sha256=_bP187JrURgnWnojGSqcM-A1iwpomyhd19CcL717ebw,3317 +PyQt5/bindings/QtBluetooth/qbluetoothsocket.sip,sha256=yynXNG6zjeT8U4R_xehlnqFqNV1XCwrKOSf7-wcwZgU,5049 +PyQt5/bindings/QtBluetooth/qbluetoothtransfermanager.sip,sha256=BbGlAKEde8Ntyd-KZHeTdOJ7RC2Yro5QtHQXb5q11I4,1399 +PyQt5/bindings/QtBluetooth/qbluetoothtransferreply.sip,sha256=I28JlF_OAS6Y7-mfdzFL5IAWJP7iIOQTIYf9fFI-oAY,2209 +PyQt5/bindings/QtBluetooth/qbluetoothtransferrequest.sip,sha256=qtbSNeFTGm46EZWqXldR6jQ0jTJFGun6pmWtiri2uSk,1835 +PyQt5/bindings/QtBluetooth/qbluetoothuuid.sip,sha256=POGdl5RsYHahzwmSChqWmLQliVDZvku-QlyYpdnhP38,11701 +PyQt5/bindings/QtBluetooth/qlowenergyadvertisingdata.sip,sha256=mAb098JoYPfyH-VifDbngz999feWH34ImON2kHFCsDU,2334 +PyQt5/bindings/QtBluetooth/qlowenergyadvertisingparameters.sip,sha256=IO9WCMAo1mziLnu73_8U6T2qvde51zwYwp7yHmDhcjA,2846 +PyQt5/bindings/QtBluetooth/qlowenergycharacteristic.sip,sha256=snTajpObGxPQHHc2Pq96y6yK_fS2r8aMHhqwP3dBgic,2160 +PyQt5/bindings/QtBluetooth/qlowenergycharacteristicdata.sip,sha256=C3wmbhYXl6ZH6r6haPpq27eYAMH5uKGYYKwl2FyTpzM,2472 +PyQt5/bindings/QtBluetooth/qlowenergyconnectionparameters.sip,sha256=qL3jCOFlQrWAE3dgwp1_ErxKLtczfSoqsnp2EVp5gYc,1843 +PyQt5/bindings/QtBluetooth/qlowenergycontroller.sip,sha256=wKAsWIw5DdUD21sNBtBrGGcUdDbBJ1h3SxoYkdgHnko,4587 +PyQt5/bindings/QtBluetooth/qlowenergydescriptor.sip,sha256=RLzrMEN5iA9nzBkU7Qk6avIzUJLXjpySCQrU_iNtwFY,1527 +PyQt5/bindings/QtBluetooth/qlowenergydescriptordata.sip,sha256=ckr0m_hKWv-nSWP13LP-Qi8FWchl3Onnw-u3892HfZo,2201 +PyQt5/bindings/QtBluetooth/qlowenergyservice.sip,sha256=IeFYu00NnAhD6uSb91iUR-ObTCh9V9uE8ZSmOl7Knhs,3743 +PyQt5/bindings/QtBluetooth/qlowenergyservicedata.sip,sha256=uFA5rDRyGPMYm8CSF7ELghwrXD1CJi8AbZYwiPtbyvg,2201 +PyQt5/bindings/QtBluetooth/qpybluetooth_qlist.sip,sha256=5n65WHa0eFDrgHv0okg0FHh5xMIYP8r_wQGY_hOCsZA,5371 +PyQt5/bindings/QtBluetooth/qpybluetooth_quint128.sip,sha256=MfQApCGrUoI4VHce3Oku_zaB4PbTwS65bXSYIlctiW0,2926 +PyQt5/bindings/QtCore/QtCore.toml,sha256=-1QMDVt_tMuaJM06EO0v_y0qSNQsOmryv80XjdCs1uQ,176 +PyQt5/bindings/QtCore/QtCoremod.sip,sha256=Zuasl1AvUJ68dG5dsFl5L-SffYyPWaEBXmGzj4p62_w,6932 +PyQt5/bindings/QtCore/pyqt-gpl.sip5,sha256=kw6SOWz5U1xPTVlXnWwF_WwI5FYNXwbRfADm07LMDWU,21 +PyQt5/bindings/QtCore/qabstractanimation.sip,sha256=cwxy4cxABSGFb-DFDs274V0epGYlZMaCIlbIxJ02rRY,2564 +PyQt5/bindings/QtCore/qabstracteventdispatcher.sip,sha256=7KliUecVzvNW976rwjlJvLB2A_3sXz1ou0a7qR0ix-g,2845 +PyQt5/bindings/QtCore/qabstractitemmodel.sip,sha256=zkOnATJtFk5VhXz07410bnSneRhPNactwKVV1qg4z5M,14268 +PyQt5/bindings/QtCore/qabstractnativeeventfilter.sip,sha256=sIKDqrBolo5HwO-NpCMVaVw3GRUhIndB-ow6uy6PCwI,1326 +PyQt5/bindings/QtCore/qabstractproxymodel.sip,sha256=nhJb_Lhhe7Dof8DlFbY3S5WIkZFRUoTrgtqHK2toPR8,3659 +PyQt5/bindings/QtCore/qabstractstate.sip,sha256=Cf2xTd_JUE_aKbGt-N7WsNHajOz7pklTGQA6Cb-pWNw,1500 +PyQt5/bindings/QtCore/qabstracttransition.sip,sha256=3VyiRucGR2fHdvO0ecwo_-sJgRpamUZd4oxR6cylYso,3499 +PyQt5/bindings/QtCore/qanimationgroup.sip,sha256=gXILukCvMgQnjyoPgDsSot0wwA_NNtBQ3ProMcQZ51Q,1656 +PyQt5/bindings/QtCore/qbasictimer.sip,sha256=GKobHia6lTvddvJixJa9szbUZVYwRHXK_eW0xz0KXbQ,1374 +PyQt5/bindings/QtCore/qbitarray.sip,sha256=NulQPcT9CrsWUCuippYRm0_y7OI2TQOqK5X6KE1ZzKI,3012 +PyQt5/bindings/QtCore/qbuffer.sip,sha256=Qbc0NIEzn4TMeaEnslcw2ESp4yG560_1f58l-NbZqnU,3017 +PyQt5/bindings/QtCore/qbytearray.sip,sha256=Ld0Cz58t0XIhBRQIX3DQvnBK0uG-SzfAQtjuHilzM7Q,16871 +PyQt5/bindings/QtCore/qbytearraymatcher.sip,sha256=jz3mmUKXzyxs8vYNizNvCRmxJmDTWk5tZDgNmkKIM8U,1350 +PyQt5/bindings/QtCore/qcalendar.sip,sha256=kk5TJidotFFGQJHugxIljxkJ3oM4oCIz1pmKTijqOxs,3471 +PyQt5/bindings/QtCore/qcborcommon.sip,sha256=jglTQ8Y4yWLGiQvqbp9mm9ZMnmKjAZlXxK16asw-5HE,2382 +PyQt5/bindings/QtCore/qcborstream.sip,sha256=emNg5nlvYo2wf3pYjLWMN5Zo-wc9w3azSDF4E6Hgq5E,6453 +PyQt5/bindings/QtCore/qchar.sip,sha256=diti1T-4oA9-sy3SydkjEQYW4KH4QUtkqqed_Sq1aIw,1582 +PyQt5/bindings/QtCore/qcollator.sip,sha256=o236EaMDU5W-3HS1huIsOMKBVxuNXaN-mqi7rM8ZjtQ,2056 +PyQt5/bindings/QtCore/qcommandlineoption.sip,sha256=3D7-pnpBR3L3D0eoOPUdxMmHAIdaLaK9QBpwmU4pWQE,3000 +PyQt5/bindings/QtCore/qcommandlineparser.sip,sha256=xCdZj0_GO2T1LhPdCU_vDWf6SxB76jB945eEjvHZ3H8,2937 +PyQt5/bindings/QtCore/qconcatenatetablesproxymodel.sip,sha256=tQ0Kx5EfxKqkYQAio2WVN7D4wvXEmhVqm8CxOA6kbcc,4183 +PyQt5/bindings/QtCore/qcoreapplication.sip,sha256=Nu_hiihsStCz6G4uwAY7s_eIqXDQxN7F5gMKGgGnSu8,11391 +PyQt5/bindings/QtCore/qcoreevent.sip,sha256=mLYrs2u8cwkwrfvam1Y40cItOBcOj0HKlFB6ibHoI3E,6547 +PyQt5/bindings/QtCore/qcryptographichash.sip,sha256=vKLNfRP4TK1vV1Od4vkt7GTEcKYZ3uqi5hgyOyC1cl0,2048 +PyQt5/bindings/QtCore/qdatastream.sip,sha256=Bi6sdjfSAoBz70ykCVbWyPPWGaC9ZNSXQysWOov4XMA,9713 +PyQt5/bindings/QtCore/qdatetime.sip,sha256=5ZyDDQA9Agt1IqnbdsvbW_Lp33awPg2x8_JZg6cPEkE,19876 +PyQt5/bindings/QtCore/qdeadlinetimer.sip,sha256=UoutDmAOpy5fBUjBKlpV_xYjJDWfkfyhoeNSd_1aJ5k,3090 +PyQt5/bindings/QtCore/qdir.sip,sha256=tCS9ENbNNpd1KcPaWc1PVUmiTl2B3RWP92CoAGSA_Uo,6238 +PyQt5/bindings/QtCore/qdiriterator.sip,sha256=Qmp98MI5Y55kGMFN_UzQDbrRFd63MGnzeCrYOAIEk2E,2055 +PyQt5/bindings/QtCore/qeasingcurve.sip,sha256=NSr5S7kP82motHh2dozNm-Pxq9q1g1pTCcO-v_f0cRU,6672 +PyQt5/bindings/QtCore/qelapsedtimer.sip,sha256=UTk0u8Nd9ipaleDF6AAJM15ig6sPyGXhL9UaxJKPwVU,1827 +PyQt5/bindings/QtCore/qeventloop.sip,sha256=uLKOTrNyPuCN8PxDH75DRovi-6JLbnTZgD7wPCiReMg,2517 +PyQt5/bindings/QtCore/qeventtransition.sip,sha256=_XlVmyKdU_38F8nHPZkOUxkp9JLxhPbf-mVOBB6XxP0,1593 +PyQt5/bindings/QtCore/qfile.sip,sha256=oTYeeLfNVPv6KpulsitGWyxX-_4s2Ob38gKtogdW1Hg,2973 +PyQt5/bindings/QtCore/qfiledevice.sip,sha256=45P9PEJZcRLTk6pyuUc5x4R8QcBjI1V-kWdLXVy8TVE,5696 +PyQt5/bindings/QtCore/qfileinfo.sip,sha256=IUs2SXkNmLyDNmnoMey1TyRBFJ2IYzlOmAdIMmO0Mv8,3409 +PyQt5/bindings/QtCore/qfileselector.sip,sha256=CwwiwYoNNiJ6Z0gyLtRNuajIY0I2fDlXAZbLLmEGouM,1396 +PyQt5/bindings/QtCore/qfilesystemwatcher.sip,sha256=Bx7bc-e-e0CHfgjgX2Cim3YT-RDRxLVqUY1UfbtG2FI,1604 +PyQt5/bindings/QtCore/qfinalstate.sip,sha256=799P_x-sOiNlR1I8LLq5C5gyow0znGZuu4PWrysLXgE,1260 +PyQt5/bindings/QtCore/qglobal.sip,sha256=d4lpCWRRGnBDjOwOkga1T3mdADYqIVuzoKk4b2I5E_0,7024 +PyQt5/bindings/QtCore/qhistorystate.sip,sha256=sxoT-DuACKVD85DHyy-3mFpDvQdWZ0o0ucGnUxCNino,2029 +PyQt5/bindings/QtCore/qidentityproxymodel.sip,sha256=OqP_kWWtIkF_SwWEs2Gc4LKqbQvlCCJ9Qd7HkMOQxfE,3265 +PyQt5/bindings/QtCore/qiodevice.sip,sha256=fnigTnmCQOx1sZmB93c0N1_JLixXR-78e5j6OBdtMnQ,9692 +PyQt5/bindings/QtCore/qitemselectionmodel.sip,sha256=pSFV5mxt8WVF-vIHhkXDDb_aJErKAn9c-3jYUoRwMjg,9959 +PyQt5/bindings/QtCore/qjsonarray.sip,sha256=4DQjwJyIoiXjAGFfzzKvDpO2pDvMd6TpGxW_wqCzjPw,3353 +PyQt5/bindings/QtCore/qjsondocument.sip,sha256=6KH2iItCMCv0-TLfHMptIPgeeqU5epQLKwWvvtCzCx4,3469 +PyQt5/bindings/QtCore/qjsonobject.sip,sha256=rmXKB4G_bMdWSSYB0Qfbu4fipLEETLYRYqaVtaDdaIk,3500 +PyQt5/bindings/QtCore/qjsonvalue.sip,sha256=yEEsF9a0ymnPmLkCSM6vduButHmzZzY-URiQs3iOItE,3102 +PyQt5/bindings/QtCore/qlibrary.sip,sha256=r3GuXYiS6mLIV9WN6-D7Hojg9tlUKZ2uUInlXYXCCWk,2524 +PyQt5/bindings/QtCore/qlibraryinfo.sip,sha256=lkglBvSIL_OFi5XJhne78pZt21nQNKlY734nchPaOfY,1706 +PyQt5/bindings/QtCore/qline.sip,sha256=xxdork4pZ67fXOPuSDYyNGcPKAccwuZiw10jeWFpYTo,6475 +PyQt5/bindings/QtCore/qlocale.sip,sha256=77uvBVK4UKRllE6DlbIBy4DpbqyIwlV_fzCJfQTHOe4,32892 +PyQt5/bindings/QtCore/qlockfile.sip,sha256=lEqsB7UJLDMXVdl5OXH0mqShjdcj724NoJw6OEQ1oz0,1665 +PyQt5/bindings/QtCore/qlogging.sip,sha256=daP4eQ6aO4hKK4nKISUNnSjff-VYPMwZakZfCJRH2t4,5957 +PyQt5/bindings/QtCore/qloggingcategory.sip,sha256=5TOUKC57Ub8qEdtOxvjysZkHd-BRPHNWJE37dVBJZpM,1676 +PyQt5/bindings/QtCore/qmargins.sip,sha256=Yn8tm6oBjMHaTdq8BUtC81rgXYPfFzUMizAD20E7H4I,5110 +PyQt5/bindings/QtCore/qmessageauthenticationcode.sip,sha256=J47O6rlYiWAPi5dCKRtJT5pK2SebYZPxpT5m0DCStWg,1650 +PyQt5/bindings/QtCore/qmetaobject.sip,sha256=laqsqehn7fjWvKrzE66z_H7cklKV9-qrk-d5djmE9kg,7952 +PyQt5/bindings/QtCore/qmetatype.sip,sha256=7LeSnhZ9HZu0ZYkGn7ACnGhOKJHApvY30PHsbdjDZoc,3833 +PyQt5/bindings/QtCore/qmimedata.sip,sha256=jOSGN6rjIop_ashYSw_UrZW6CPTkzLGJJf7KUq2DzzM,2010 +PyQt5/bindings/QtCore/qmimedatabase.sip,sha256=0tfgYDgsgxRmrjQnMzAf0hj3FaHib9THGCqkSUGCLmA,2082 +PyQt5/bindings/QtCore/qmimetype.sip,sha256=USnD3iZJcvmMpzvhWfIoTpdwQ5NTk01Bpm_YA7Hxedw,1830 +PyQt5/bindings/QtCore/qmutex.sip,sha256=HFBu9lEgX8vdLyo3_Roedhwc-_lVucW-pfFaC-n68rQ,2271 +PyQt5/bindings/QtCore/qnamespace.sip,sha256=LXeujxP3nzWVbpa27RmdJDP02re_pCnEZf0IiBMJ2xw,37483 +PyQt5/bindings/QtCore/qnumeric.sip,sha256=vt7DzRZMcSBEOeA7K97B2LSM8aMobFb0xc5cLWdk9UY,1172 +PyQt5/bindings/QtCore/qobject.sip,sha256=HL-mGhbrRwthNwtJsiTVRoMycq9Y54YxUL2z9DBnpTo,24752 +PyQt5/bindings/QtCore/qobjectcleanuphandler.sip,sha256=RuRTZd6PjLSM7RLuvG6f6OkTKDy9P0FVS9DZPSMpIx8,1255 +PyQt5/bindings/QtCore/qobjectdefs.sip,sha256=YfbNGlYmrKKhI8ciDwGN14Z45e5OuvzgjD7mbz72cao,7726 +PyQt5/bindings/QtCore/qoperatingsystemversion.sip,sha256=vc5uYG5pkf3Tb57tF8apyPb8yojsud_lWzxYtMrvzn8,3590 +PyQt5/bindings/QtCore/qparallelanimationgroup.sip,sha256=2HLmZREwj9Q0MTd3R4QxW9Lm_SCZKCL8-xJ-Lz-yFpw,1509 +PyQt5/bindings/QtCore/qpauseanimation.sip,sha256=XR5dnvAwf2sKhOt770FzMWLnBcp7wSrb9syx-bib80Y,1380 +PyQt5/bindings/QtCore/qpluginloader.sip,sha256=A7RUiRjvXzHYRA7yu42EKdLZa8rfMuv7hlB3MQJgrP0,1562 +PyQt5/bindings/QtCore/qpoint.sip,sha256=-v8U6ZydMbbT1rRXULGhgS23QqhOLf01LFdyoCtAs1g,6440 +PyQt5/bindings/QtCore/qprocess.sip,sha256=spf_jsuUggmbYn0KdaBdiDTLIMZu3VftMs-j8dHroXI,7680 +PyQt5/bindings/QtCore/qpropertyanimation.sip,sha256=fYQctx8heqomCF4sdIz54BEcW64E2TA4IYL8hkRSjhk,1702 +PyQt5/bindings/QtCore/qpycore_qhash.sip,sha256=W-GGAl1uGLtJJyALwAFQhX3FNr_7c-yXDDeUeq7rN_E,11186 +PyQt5/bindings/QtCore/qpycore_qlist.sip,sha256=EOl42O5r-e8Ix5LhMw9IC_gyisSEaLQkABwCpaoN07I,20221 +PyQt5/bindings/QtCore/qpycore_qmap.sip,sha256=E9WsKbhvor2uPj3NyrNIMC2mZssS4FqG07v6dj48LnY,8196 +PyQt5/bindings/QtCore/qpycore_qpair.sip,sha256=WHzYkDBJnspkqJwlXlfW9uOvCBhiW4HvQmXUWl68-2M,8152 +PyQt5/bindings/QtCore/qpycore_qset.sip,sha256=FvMYXaHvKkf0-R86s-xLqxLoMPUMPiGvPDn0Puppw-k,5409 +PyQt5/bindings/QtCore/qpycore_qvariantmap.sip,sha256=Y7Ov9xOM3SVQlbc3rbtljHkpsyqKQpZ5kesVwzi3aTw,1378 +PyQt5/bindings/QtCore/qpycore_qvector.sip,sha256=1EhWY7JkwPy3cYaRDdH1Rokx0rEJkvyLfAGPcIeKHw4,13387 +PyQt5/bindings/QtCore/qpycore_virtual_error_handler.sip,sha256=RI7HYZdFCd5c-yGw1w_O0faNYLT6L3d7Q9af9yq7hnQ,976 +PyQt5/bindings/QtCore/qrandom.sip,sha256=y8LaCXUS6I6EGx3nM-3RrSD7K5BarCjJF6SVZaNx0V8,1943 +PyQt5/bindings/QtCore/qreadwritelock.sip,sha256=TTrgadOKiKGVaoB1r1tebdi2HYBTnvCyuzhV4w8SXXM,2706 +PyQt5/bindings/QtCore/qrect.sip,sha256=wTZFt9HzvK-ufDG4IrnDwvgOBl-bxwdC5HGXdALZZLI,10955 +PyQt5/bindings/QtCore/qregexp.sip,sha256=p-JE7aERwRqQGhSEnLGyUmLKnPcROAOqWtZxGsYeLmI,4879 +PyQt5/bindings/QtCore/qregularexpression.sip,sha256=cmU-v90L95CgkxKQXj-dQ6n-oJivGOYY6yqJa3W9cBY,7173 +PyQt5/bindings/QtCore/qresource.sip,sha256=iIlPXu2UkElPqz1Pt7UqfwMDOB8HTVPqPG0W5kV1HS8,2817 +PyQt5/bindings/QtCore/qrunnable.sip,sha256=88X_HStHR7S8Lv1nO22D1z_iLFKsgWLq7ROTNXvy31g,1692 +PyQt5/bindings/QtCore/qsavefile.sip,sha256=en_q39Y9rY2P-L9yUyxWUGKUpjm9ijYP-HjPNKF32hU,1681 +PyQt5/bindings/QtCore/qsemaphore.sip,sha256=wKMpvpn93M9Dfa2s3z1O5-rVqHJst1oNHheqCW2KBbk,1645 +PyQt5/bindings/QtCore/qsequentialanimationgroup.sip,sha256=Y0swWLaJutPCbIAcEWuwQSu9s51vIdp6rWpJ44AamRw,1728 +PyQt5/bindings/QtCore/qsettings.sip,sha256=MmcFAQxSKF2hfFD_UVj4kHJwC6Jen1Hl4_JUtqlOmNY,4132 +PyQt5/bindings/QtCore/qsharedmemory.sip,sha256=hljSp1zpPyWDnVJ_FZP1ZHlmA20C8B8PvvKEnV1FHIg,2327 +PyQt5/bindings/QtCore/qsignalmapper.sip,sha256=4msLSCH3pAX7m2HwoqdlhjPoNRzzfmSqxfYRBb8EHtw,2121 +PyQt5/bindings/QtCore/qsignaltransition.sip,sha256=CAuTehUKLxBfCOVwadgICsXdOeq4VXz_kczYonn6cd4,2176 +PyQt5/bindings/QtCore/qsize.sip,sha256=bJ9kahc2kxvZCAakzp-kgYsU44KtQIkF7Zx16XAOy-g,6027 +PyQt5/bindings/QtCore/qsocketnotifier.sip,sha256=p77AmoGfToaYIcv4NzbjRFqvIuzcfvfl6FpXUXSWnl4,1487 +PyQt5/bindings/QtCore/qsortfilterproxymodel.sip,sha256=t8xJ5Ts_VdBSgc-ZB56CuVuKiXvkOpT39Avjsmk-emk,6209 +PyQt5/bindings/QtCore/qstandardpaths.sip,sha256=f72NWuNiYgXR29efb1F0nSgshYHOl8EyaQNivq9iLs0,2852 +PyQt5/bindings/QtCore/qstate.sip,sha256=R5SnYxL9RWmnrEKI4n8mF_ock9hj51hcmk0A3E3FBl8,2859 +PyQt5/bindings/QtCore/qstatemachine.sip,sha256=_4f1JLwp-1qg-0pqR5Ie06qO-o_u_AkzCajD0JrZbLw,4620 +PyQt5/bindings/QtCore/qstorageinfo.sip,sha256=FwYV1PYutyxui3Xq_vX_KiR9jYLs0t4YgmbYzQ1T6xI,2077 +PyQt5/bindings/QtCore/qstring.sip,sha256=SrGytwHfsHYSY73K1rX6cAz4ctO7zodGTtthCYWPZuY,2026 +PyQt5/bindings/QtCore/qstringlist.sip,sha256=KujbYlY7q0H6mcQVnK8bh0LaWZkwBswmza6z0tfsAh8,3576 +PyQt5/bindings/QtCore/qstringlistmodel.sip,sha256=OneNKqtp-MVu0p9A5O52xHe_TTYBevSt9A2bsft9Q18,2403 +PyQt5/bindings/QtCore/qsysinfo.sip,sha256=pOOOG74_JGmVkMwD4TJKwS5j-91MEWBwwwqGr7C8bOA,3807 +PyQt5/bindings/QtCore/qsystemsemaphore.sip,sha256=DpKtdcDG2eOISEKuiVbQaJxN9yR6wGowKxr15Y-qhBQ,1790 +PyQt5/bindings/QtCore/qtemporarydir.sip,sha256=LqnTDRcUmL_xdHyC3ljkKMDeC0KrY0XvjiUjQXRMlgM,1448 +PyQt5/bindings/QtCore/qtemporaryfile.sip,sha256=y-6Y30c8hGtOLkvxOujDHKYvVyIF6le80wmGwKu8Oiw,1824 +PyQt5/bindings/QtCore/qtextboundaryfinder.sip,sha256=7DQ4YuvKSEGULupGGH6UpIdiQ28b4UydrK1iWhYw3_U,2102 +PyQt5/bindings/QtCore/qtextcodec.sip,sha256=gMyW-qHBzHYPUhwsFMguZJaEH30Wv8sRtke-258HkoM,4110 +PyQt5/bindings/QtCore/qtextstream.sip,sha256=PbusTNHuCPv8ZT57rKI-yHMh07rjJjatqu526xYvGiE,5870 +PyQt5/bindings/QtCore/qthread.sip,sha256=jfV6NAC5_vW0sK2rqlHO20DnT5lreYZA-r8tlF8LS0U,2896 +PyQt5/bindings/QtCore/qthreadpool.sip,sha256=Df56y-tbZ4FFByJaLKpVB0-aKPy-GQQyDn134ImJO0A,4088 +PyQt5/bindings/QtCore/qtimeline.sip,sha256=WQwyn-PuzXQU0ew-uNrtMBAnVivPDcNUcxx-3xPK8u0,2699 +PyQt5/bindings/QtCore/qtimer.sip,sha256=gm1IM4N15vdBvOy7q4kYSoFzhuO9h52wdrIEwjiiaeI,2592 +PyQt5/bindings/QtCore/qtimezone.sip,sha256=zxRB7nw3_246H3YwuXgy74itF4k-eW2w-3LHYkwF45A,4269 +PyQt5/bindings/QtCore/qtranslator.sip,sha256=00B6_ndxSPyQw-suyaUxqzGV9bYpbKDTJIMeh3z5DrU,1890 +PyQt5/bindings/QtCore/qtransposeproxymodel.sip,sha256=zCpQMqzXbCMeIdzeYnZiW-nSbTnGi5E1YlPY9wnLEYc,3005 +PyQt5/bindings/QtCore/qurl.sip,sha256=LoECUIY8leXb9f_-YTh1Sj1boMdwR8OzSAoEQXJktxY,11891 +PyQt5/bindings/QtCore/qurlquery.sip,sha256=OwV30EsKnHtKJL6_DjhugIXBsCc6n__OGKSILYBIu7c,2621 +PyQt5/bindings/QtCore/quuid.sip,sha256=gZdSohJIH1A4dpAvJxH6xM5dBTqQ-C8l0fhG-lkyzG0,3514 +PyQt5/bindings/QtCore/qvariant.sip,sha256=qTrDwmpLCaaR0vnNAQ5CXXexRefbxsZinZi5l8uyUDo,4550 +PyQt5/bindings/QtCore/qvariantanimation.sip,sha256=zuRLKV2ViLGQdp_jYnm5K83hSw8zrtDtQtxEFp88Ggk,2202 +PyQt5/bindings/QtCore/qversionnumber.sip,sha256=LT9XTWst5MgGn3Zwgsj6feZ4R3JbmAaW3p2_rmQfqtw,2755 +PyQt5/bindings/QtCore/qwaitcondition.sip,sha256=_t6i_HPvKpgSgmPTekTlpHdh5Elj73IZzKX5nimzasw,1554 +PyQt5/bindings/QtCore/qwineventnotifier.sip,sha256=hhIGLHV5Gz-UKc-fjHfofnz160dMeJ1ua6PEOkixCgM,1576 +PyQt5/bindings/QtCore/qxmlstream.sip,sha256=1--agHB9PDYAJ8QeGUFkdDuXSZkdi9eELzCOA-5Eej0,14020 +PyQt5/bindings/QtDBus/QtDBus.toml,sha256=p0JQuYAH_n4eP0nRQsMRlHkHcAlx71a5lJ7RL8LiAwo,176 +PyQt5/bindings/QtDBus/QtDBusmod.sip,sha256=gCZx-YjPkUqf2u-SuN8BK5xgpHf3lDvNEVZ_KLSAJWQ,2334 +PyQt5/bindings/QtDBus/qdbusabstractadaptor.sip,sha256=Rl2yFGprzc3bYHvCrr1d0pAJ6fgfqbltFtzTlZCsU0A,1278 +PyQt5/bindings/QtDBus/qdbusabstractinterface.sip,sha256=-UoxZgxzWzHrsOhkrnA_LCgkp7rChrZyrdwGJUFmfqk,6685 +PyQt5/bindings/QtDBus/qdbusargument.sip,sha256=fU66Jxa1GioNbOLnyMcUW-6Lxxv6aHdH2Enh7pLYmtg,5051 +PyQt5/bindings/QtDBus/qdbusconnection.sip,sha256=MWW3rZJ2A0xu2JMdNy0lgfZ3TvDTr21WaPJV7QvygT8,9903 +PyQt5/bindings/QtDBus/qdbusconnectioninterface.sip,sha256=54C52PZ2Hk6_gPhBegpYx7byeLYGY2kzDd4nKr52bmg,3006 +PyQt5/bindings/QtDBus/qdbuserror.sip,sha256=Y2o9tjLae7eluiIZhFSsYgOLOqlDRCjXtvH6_vYcnTo,1955 +PyQt5/bindings/QtDBus/qdbusextratypes.sip,sha256=TR3siPH2mmUGjIqrut-YQoHbygKlDslI_FPUPLXWhck,2563 +PyQt5/bindings/QtDBus/qdbusinterface.sip,sha256=OYwaiywkta-fyWjqXyhkqh1dVSATtrVJi8V8vOCIfzk,1306 +PyQt5/bindings/QtDBus/qdbusmessage.sip,sha256=ji27Pa46qxKQTr3QnuQ7hKqP0a8jQa0YADmV_TtvyZw,3104 +PyQt5/bindings/QtDBus/qdbuspendingcall.sip,sha256=hDpyjrJBftyKLG9lSl7FDyKCQVbMISGcM_6HxDMan0g,1856 +PyQt5/bindings/QtDBus/qdbusservicewatcher.sip,sha256=YpemmP8yTdF8ywOWeGoeeU2L67dkO8v4S812zYysaPk,2489 +PyQt5/bindings/QtDBus/qdbusunixfiledescriptor.sip,sha256=SnT33SBaDeqYMviEBYf1xXsa-AWfGlPAaR5QYLpm2zo,1450 +PyQt5/bindings/QtDBus/qpydbuspendingreply.sip,sha256=cP99NTh3U0VleAMZfCupILnJkO6lKmrLJpoCGDjUd6Q,1739 +PyQt5/bindings/QtDBus/qpydbusreply.sip,sha256=7Bx5w1pcpvPcnNK0KeTOW3Q4ADLCoJt-uOIt-f-FPNE,5291 +PyQt5/bindings/QtDesigner/QtDesigner.toml,sha256=CJbv-HkZbzPrTfTnOjG1_wEbEUz7jL-evLom6PptDxA,180 +PyQt5/bindings/QtDesigner/QtDesignermod.sip,sha256=t-2Lx8M0vhkaWmAzDCZOEfBgLyjEDlIp0oe5EwvWqOk,2776 +PyQt5/bindings/QtDesigner/abstractactioneditor.sip,sha256=UQDy0z4r1OexgmRm3PSi1X5KHntpU4O1o7rsibcGlgM,1499 +PyQt5/bindings/QtDesigner/abstractformbuilder.sip,sha256=6ux1d_vp65bf6hd_NRszwUyeu82Cbp8IPkqsQZnG1yI,1462 +PyQt5/bindings/QtDesigner/abstractformeditor.sip,sha256=a3xeXlDSyfDUkzTDUU2iRSA9-agebncY16TCVun6dMg,2147 +PyQt5/bindings/QtDesigner/abstractformwindow.sip,sha256=SFZWNTMFQ8Ou-s0-EqDB1643onw_i0v7A39UFMJJpwg,4727 +PyQt5/bindings/QtDesigner/abstractformwindowcursor.sip,sha256=EvZ9BPTokJbeP1pKIuT6JBZB6eZxXbzpoZtlFCzJXx8,2396 +PyQt5/bindings/QtDesigner/abstractformwindowmanager.sip,sha256=fSz7vdkro1iwXlmoy4MvsqhWPMbYgYDBYFhzx2G9vpo,3277 +PyQt5/bindings/QtDesigner/abstractobjectinspector.sip,sha256=A_JD97oo_POhpVseHzywjudRWDjLp-yFVwq4rVWqFCs,1408 +PyQt5/bindings/QtDesigner/abstractpropertyeditor.sip,sha256=UzyBieRMuSg_jlf5RHvIGlNS50awsSFF84zxABMf7bI,1742 +PyQt5/bindings/QtDesigner/abstractwidgetbox.sip,sha256=s51BjBbWzyu2elU2jO7OQthwChxbXUVeynx0Y7up804,1388 +PyQt5/bindings/QtDesigner/container.sip,sha256=kxkQ1CFpzVM78Zg1j0_YrD79s4D2tSl0hmW05DYJOS8,1510 +PyQt5/bindings/QtDesigner/customwidget.sip,sha256=uXSxVYwpGhnlCom8s9cwlDgSS5sxJIgVxJfjvzbSQl4,1884 +PyQt5/bindings/QtDesigner/default_extensionfactory.sip,sha256=zBPpEdLHqANwnEjGnHBjspcGyYGIRxveYfMPvfbKURg,1567 +PyQt5/bindings/QtDesigner/extension.sip,sha256=yN43PSCAJbfkQuieNJmibp_QirhJsaLR3Thw0e3_lAg,1571 +PyQt5/bindings/QtDesigner/formbuilder.sip,sha256=Ck3aD-n5CltKnzQ1C1sEKnnJiv_yS6DsKsEFSbsb1zQ,1352 +PyQt5/bindings/QtDesigner/membersheet.sip,sha256=Bydzw-AWAEpdo0YM21V_YNCdPdg5EEASdiLEJjZp8j4,1872 +PyQt5/bindings/QtDesigner/propertysheet.sip,sha256=Pyh2nq6Y9h4aZalodNJwJk596tPfRZkz9QtN1ux168Y,1953 +PyQt5/bindings/QtDesigner/qextensionmanager.sip,sha256=TQRTOzZxxIxXRjX65b72DcOt-BmDZp_mWu4CbST8LM4,3514 +PyQt5/bindings/QtDesigner/qpydesignercontainerextension.sip,sha256=onxEp-Wy2AQMf8Ho3QTFKFrFagQMHenbfP8mfDw-Q70,1228 +PyQt5/bindings/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip,sha256=Q451bIlj5zFNc0lBJL7w_v9Pfa4M267ekEWtU0Bb4WQ,1308 +PyQt5/bindings/QtDesigner/qpydesignercustomwidgetplugin.sip,sha256=R8U7RYDsBiGuowXYywOWiSPTgZfiIFbrOVMsjnwcfsM,1235 +PyQt5/bindings/QtDesigner/qpydesignermembersheetextension.sip,sha256=4dxSxA9QFN7PzsSrSBSd8m9JL1mVxfmuQPMvcQL6-0I,1242 +PyQt5/bindings/QtDesigner/qpydesignerpropertysheetextension.sip,sha256=IvP4ZFVIEE_-3cnmo02CLjD41Chhj36Vre1ja5yWCMw,1259 +PyQt5/bindings/QtDesigner/qpydesignertaskmenuextension.sip,sha256=eSDt9ihfRlVXuelPSEYzq1a19XqidtNZefdtOuuFlms,1221 +PyQt5/bindings/QtDesigner/taskmenu.sip,sha256=Xbj8ELE5hJ9zF7yIqSIyfJzWJon6mnVtpAZ0qX3BWYE,1188 +PyQt5/bindings/QtGui/QtGui.toml,sha256=qO6zS_3UNnz_0MOwJpZuTb9N_k6kLnP4UJYpDNnvgF8,175 +PyQt5/bindings/QtGui/QtGuimod.sip,sha256=IODelOQXoalGWLIexYsQacarNYCQvXZNeheY1uKZcYk,4494 +PyQt5/bindings/QtGui/opengl_types.sip,sha256=_Br3zn0hKFu_754u_jJYHiJV71yHEQahcfmRZQ9AAV0,1407 +PyQt5/bindings/QtGui/qabstracttextdocumentlayout.sip,sha256=HM0D482gW1aDWJDh-RMcUvbb6VYE_OnSwcHOS83aM5M,3824 +PyQt5/bindings/QtGui/qbackingstore.sip,sha256=piHKyyuCwWwxqyMOHzuz2OOFvYmcY2tstOcOIgoCI2w,1568 +PyQt5/bindings/QtGui/qbitmap.sip,sha256=e6XuEwDgJqLYFJxeXjAhKgkkMzpSaiaLW-x-QvqsVTE,1887 +PyQt5/bindings/QtGui/qbrush.sip,sha256=8TugQqDCBzkhveBVRRZLtoOxQTBRpCawnglqQKfe8AU,10943 +PyQt5/bindings/QtGui/qclipboard.sip,sha256=4cpzxiFvnk1fG2exQF7A0HQAAHH1h0DkBGvFlG_SDnE,3545 +PyQt5/bindings/QtGui/qcolor.sip,sha256=eQYjs2VK3mmfuOjZ1gayzv1-Gt7Q8C0p-3HLX-nevRA,12099 +PyQt5/bindings/QtGui/qcolorspace.sip,sha256=P2Q6LW4yI2y351oJxqSmQwXUYL3IgEO3lTB-s-AIKUI,3151 +PyQt5/bindings/QtGui/qcolortransform.sip,sha256=2dp2DsnP6ya4o89s0EvF7EgKnXZ0GJXodP_wzNMaED0,1337 +PyQt5/bindings/QtGui/qcursor.sip,sha256=O881FTH_VuM_NhSVOLAxNC-cjgi1eWXZh79JOq2AQQs,3075 +PyQt5/bindings/QtGui/qdesktopservices.sip,sha256=Ow2Lww7TpO-FmoadeIX1Sp-OFDQf7ZxGMyNBspPSTpI,2418 +PyQt5/bindings/QtGui/qdrag.sip,sha256=ayj_LQG_f4m8vGEanpqFxFKXJ9S75wEEutLPN-xz8g8,2212 +PyQt5/bindings/QtGui/qevent.sip,sha256=_0ULF0rHR1pxkva4hd0mxPgfsX3sGN0VZHggnkkyNSY,24280 +PyQt5/bindings/QtGui/qfont.sip,sha256=19QZtO3b9kVLOnzVvtIVQJriEPQOtfmGbMSqFQsPdNQ,6107 +PyQt5/bindings/QtGui/qfontdatabase.sip,sha256=STj0nFH8QyGASHjMlGwktgCKlGP-2f1XD44fOSwzvn0,3709 +PyQt5/bindings/QtGui/qfontinfo.sip,sha256=v6iplt6LXJ8kuIL_I-JDBci7cUw32NvGIqdG-Je03sw,1521 +PyQt5/bindings/QtGui/qfontmetrics.sip,sha256=rSTIEmIwnpazcs-uEVJum2VQ5K7H3VKK3d1e8bkA-sg,6357 +PyQt5/bindings/QtGui/qgenericmatrix.sip,sha256=jaBEnn_Y7ZzxsaBn14fgwaVOdq_niVcmp3HmhQ61cJo,31378 +PyQt5/bindings/QtGui/qglyphrun.sip,sha256=5zQK2PEfRmpCT-ZM5oZf7UgV-G3dXpg2NUVtfdhZmJM,2316 +PyQt5/bindings/QtGui/qguiapplication.sip,sha256=ipZVmLl8REeKFW4oZw8rFw4l8R_rkMnHAijy_wyG-as,11534 +PyQt5/bindings/QtGui/qicon.sip,sha256=kD_Soffkll7E673ByIcu6lv6k555bhJcaCZDeD1sVsU,4705 +PyQt5/bindings/QtGui/qiconengine.sip,sha256=Ar2kQg7o8h1tvR5eDJizzZ-NZFGmIx2rePpEQulWYeQ,2741 +PyQt5/bindings/QtGui/qimage.sip,sha256=mcgfflOAUWfXa6IQSt_c8dOwCIQrS8q2VnTnWPDIViw,10425 +PyQt5/bindings/QtGui/qimageiohandler.sip,sha256=ikwL3dPZDjMtj9_BrMH_bKahWHa3P8vw6qls3jucyXA,2919 +PyQt5/bindings/QtGui/qimagereader.sip,sha256=DJWTqIocVo5TromRcr3YrAyQZGJWxR88NskOZF0tuYE,3653 +PyQt5/bindings/QtGui/qimagewriter.sip,sha256=OOLVULPg8Xvy_4lEm-CwE6Hj4u3AsMS9dNPwwuxcy5U,2989 +PyQt5/bindings/QtGui/qinputmethod.sip,sha256=XwbrQg1mUU77uU4A9MupFraCQIj9zsUrUU_jY7wN9HI,2457 +PyQt5/bindings/QtGui/qkeysequence.sip,sha256=IoSvok-vJraUvxktZzAT04LaPjMWP6D46JEshBPk7YU,6851 +PyQt5/bindings/QtGui/qmatrix4x4.sip,sha256=eefc_vpmQOTX7bObGpWIGSrzHo_jHe-EWC7oyg4WCgU,10649 +PyQt5/bindings/QtGui/qmovie.sip,sha256=2lTm_a8tUeDZ_rppLGR1HeHOqLZiunzxK9YgVeP1Lyw,2910 +PyQt5/bindings/QtGui/qoffscreensurface.sip,sha256=9cSV2ovr6XSyDUJMJwopHhulgFzZx_EYL2WDtLW4sW4,1816 +PyQt5/bindings/QtGui/qopenglbuffer.sip,sha256=IbbtbCKtfg-XD3A9_ydEUPhIQf64AytEtUHlFvc8x8s,2831 +PyQt5/bindings/QtGui/qopenglcontext.sip,sha256=hTOzmiDF4kjTTm6t1Rx6VksE_aQtq1-cXzqUga6VxfA,3987 +PyQt5/bindings/QtGui/qopengldebug.sip,sha256=mVITMJwt-_Y_q_qKVjevyS_0zxKv_2SRpra60-xGNws,5374 +PyQt5/bindings/QtGui/qopenglframebufferobject.sip,sha256=ZbUP_Ac9J7U0G8hAHYPgrkVvmJY_dNy42CmrOwDqR1I,5395 +PyQt5/bindings/QtGui/qopenglpaintdevice.sip,sha256=RdE6e-1VjyM57WyHxWOq2QTahlgl6s_4kjavMk-s-Q8,1886 +PyQt5/bindings/QtGui/qopenglpixeltransferoptions.sip,sha256=TeTLEjGJpyKtpuGCINpM6662SMQasvzFlCtpxwWpeX0,1909 +PyQt5/bindings/QtGui/qopenglshaderprogram.sip,sha256=cazt5QRZLe2tRMJ5M_fc7NMeJ37yKF-nu2OD61xMCrI,16484 +PyQt5/bindings/QtGui/qopengltexture.sip,sha256=VH1dKBpMzaWfDXm2PjpGgyFlg6xXuW92mko23Kc8kIc,18240 +PyQt5/bindings/QtGui/qopengltextureblitter.sip,sha256=QkR4C4k0e8K0FtQRnWSMjfvAJ40WkGMkSfPkM8FrjJ0,1990 +PyQt5/bindings/QtGui/qopengltimerquery.sip,sha256=_WEIpyASrmw8D17NQmYV6E-eMJVBxsyRH--uyl7qgt4,2156 +PyQt5/bindings/QtGui/qopenglversionfunctions.sip,sha256=15W-oEE5sbjTQKg_MzHZI2Ct8zIGv535Qf1tIUrQ_oE,1206 +PyQt5/bindings/QtGui/qopenglvertexarrayobject.sip,sha256=M7rHuNrGXnTc5bhimnN7zb_-8LRWLAPlcQOYzqzuZko,1960 +PyQt5/bindings/QtGui/qopenglwindow.sip,sha256=7WLeYMDH6uOe-dkmqezIqgojbGkaQ9DwZgbGBrOZyOs,2290 +PyQt5/bindings/QtGui/qpagedpaintdevice.sip,sha256=eLb78uMkQV3hUixHy11YdxfE5BcecS5rvHRfZkxNwMY,6640 +PyQt5/bindings/QtGui/qpagelayout.sip,sha256=FG5kgO51KKXrvDNqZVaVpGvECsFqtP2EH5LYRkAd1xI,3171 +PyQt5/bindings/QtGui/qpagesize.sip,sha256=QCkoNJmiVlM73kJfTuGbFmKZvPQ2mpmSukfiJpfFU1M,5604 +PyQt5/bindings/QtGui/qpaintdevice.sip,sha256=D1K0oiwzKAumw4MMRp9Ib_up-RyBjwdl3YRfrNmHEZg,2102 +PyQt5/bindings/QtGui/qpaintdevicewindow.sip,sha256=2PEA0GlE4nWVvtbDEk7Q7yy2tLfZrAHgibhdbB91E5U,1453 +PyQt5/bindings/QtGui/qpaintengine.sip,sha256=vJc9HdHUO8eeRcy1tNUbfkJ-dEW66p5k1fj2BlIjKpY,5896 +PyQt5/bindings/QtGui/qpainter.sip,sha256=iQ4ZPmC2HABUC_G0cpx57fET7lbzKNhOAxW8ijDNo7I,21309 +PyQt5/bindings/QtGui/qpainterpath.sip,sha256=q7AdqvTOMHC9ZdzuNHW3VauiJXrXosLnnh_4Smvaxsw,6992 +PyQt5/bindings/QtGui/qpalette.sip,sha256=VO2aWlfUUdXuum324YNFP5_CL2wSo3mI-7zfHmr5GZQ,4666 +PyQt5/bindings/QtGui/qpdfwriter.sip,sha256=bOS6us_IVAAExSfRBJaKXJI59j5g1FiHNBThydBCncg,2335 +PyQt5/bindings/QtGui/qpen.sip,sha256=7eRZR7ntFkELJ_AeR2TZdyPukUlUhYLpisTOwAi2S0I,3415 +PyQt5/bindings/QtGui/qpicture.sip,sha256=HQEjTzHYC3neEGvIt2aUTjQH6-sNzVUid8YKlIm9xxQ,5701 +PyQt5/bindings/QtGui/qpixelformat.sip,sha256=JkwlqYZrDOtZiflLtDdgCc9_jqUTy9_J60Yo3rEInSw,5785 +PyQt5/bindings/QtGui/qpixmap.sip,sha256=P1wFmZtr0lgsBPAWyCqzECPp7xhinvwRLZX5MN_i_2w,4886 +PyQt5/bindings/QtGui/qpixmapcache.sip,sha256=lkZiZtkJTgTdAVcZzPRbwLSVDTxVFS4Wv16oX_LqOp0,2284 +PyQt5/bindings/QtGui/qpolygon.sip,sha256=XXZOoJ0o9CkQ1wMIwYm9FUDlUbOJenvJ-NaZS6EOsRc,13288 +PyQt5/bindings/QtGui/qpygui_qlist.sip,sha256=dN0pL_77niv_9Oe8k0FXeE1K5Ue3FajNk0PiVdOWS28,2784 +PyQt5/bindings/QtGui/qpygui_qpair.sip,sha256=P_6JweWrizzVyiZgJ87BKQ29ZmCA79GKdjOQsFgW7LQ,5258 +PyQt5/bindings/QtGui/qpygui_qvector.sip,sha256=02tUE-aM-8N5PBPoJDFBzg6ci7fgb-KAYR-qW-39Wvo,8706 +PyQt5/bindings/QtGui/qquaternion.sip,sha256=tiIaS_YV8ieOKOWOgVLNkw2kIK4XSIS_vl5YEgQ8grU,6131 +PyQt5/bindings/QtGui/qrasterwindow.sip,sha256=Rv7ukBCHnTb0RjEyWrPcUoO-9MsKJyJJyx0KILWa0uU,1283 +PyQt5/bindings/QtGui/qrawfont.sip,sha256=N9CZSrhzB6ReZr1LHlVhzNj6aPZ0oiHGnBjjhpNQBfI,3836 +PyQt5/bindings/QtGui/qregion.sip,sha256=cVgpwQxSK9pXk6D4nO1_9i6Ny4ocVHGK8hA8K0UFwYc,4493 +PyQt5/bindings/QtGui/qrgb.sip,sha256=ojmKelA_id47e-jTuzAaX21r2e-wzAFom8Ix3ZcGnSs,1339 +PyQt5/bindings/QtGui/qrgba64.sip,sha256=jWa1aJLwesjBfbzeH7CpmsbURNwcm5T9wYXUAnl3OKY,2384 +PyQt5/bindings/QtGui/qscreen.sip,sha256=mugCFUpYD0b7eiOWujLAnB2lSgFJTlEzt7b_Fo3CR2Q,3393 +PyQt5/bindings/QtGui/qsessionmanager.sip,sha256=gE-wh6sxY-3S-a-RtWvWNcLghylblbDHYCooo8N1Q5I,1997 +PyQt5/bindings/QtGui/qstandarditemmodel.sip,sha256=jsdAffOF4tvYhnW3x-sZ09g4dwzSXjphZiHAW8j1Uxg,9950 +PyQt5/bindings/QtGui/qstatictext.sip,sha256=T9S36Yn8VpbQyQ6A6CeF-UUeByiL2YgJv9VNLNZItkM,2037 +PyQt5/bindings/QtGui/qstylehints.sip,sha256=ODqskDV2l_skRQfoMoWmHPO1MwlfCCF8zjMnIAcgWc8,3406 +PyQt5/bindings/QtGui/qsurface.sip,sha256=u7MhTEGCVQhIiooAJaanVJdGiB1d40dQ6v_SQwfkNlk,1721 +PyQt5/bindings/QtGui/qsurfaceformat.sip,sha256=Ko1lnVcSPnVWn3O1aDFdATMqmdxyKupWorXfTpMmE-I,4235 +PyQt5/bindings/QtGui/qsyntaxhighlighter.sip,sha256=ShfghyKeAbR9UoMfnxHv3Z7hGJRTcya4My4VFGAJtG4,3034 +PyQt5/bindings/QtGui/qtextcursor.sip,sha256=zvqJpPY9D_LT0JtWhaPIOADHJ_zLwfcPD85GXtlblCY,5378 +PyQt5/bindings/QtGui/qtextdocument.sip,sha256=fDxTNg30-Q9wsm-M6sfo26lhxGZsDHSBsCOy2kZdl7s,7295 +PyQt5/bindings/QtGui/qtextdocumentfragment.sip,sha256=wjjEBICNEMRWqCKG0euA0ZAOY-vMbISULp7yg7CuHV8,1675 +PyQt5/bindings/QtGui/qtextdocumentwriter.sip,sha256=ODjTXREySM9Eg7tcho67HxomPaoyn_SfdSkZMF0Yxog,1799 +PyQt5/bindings/QtGui/qtextformat.sip,sha256=Z8BDS4fKWq4tqC_kye541WIFlJ2ZzCUWqvR0c2wJ_ks,19690 +PyQt5/bindings/QtGui/qtextlayout.sip,sha256=E7WUr-ZNkwh2MR_OWSfz4ib0HmGQbx2sWBxYqgJcOoI,5662 +PyQt5/bindings/QtGui/qtextlist.sip,sha256=kMEtMVYl-0cp7RqFKhybuoDd8VWxUaphoVFjlVdGW4o,1513 +PyQt5/bindings/QtGui/qtextobject.sip,sha256=ic5Mbz5WNqiVBy2yvcpUELaTWmkpEKEKpn4yxmK9CVY,7822 +PyQt5/bindings/QtGui/qtextoption.sip,sha256=mvqjfB2hOi3MqIjA3qoybb4XNkRGZ2BSmo8dvdYOgF4,2992 +PyQt5/bindings/QtGui/qtexttable.sip,sha256=6uP8cg8pdrIAXsps64_yoUq64rptCjDo-hA9UxKB_nI,2576 +PyQt5/bindings/QtGui/qtouchdevice.sip,sha256=hV91LSZDGLVxnh4EHDgdbjfDI8sM-CN-BmTqFKqkUW0,1975 +PyQt5/bindings/QtGui/qtransform.sip,sha256=2Ye9Z1FGnS9KQDapbLD1Dgkovc47l_PHm_WV3gsCovk,5085 +PyQt5/bindings/QtGui/qvalidator.sip,sha256=dtOggtklZCkxD5RBWF4UgRj8XnNfj06Xfbb4YQuSepc,3810 +PyQt5/bindings/QtGui/qvector2d.sip,sha256=jCBf6WYgXlqc_YekLP2wDXNVQDsj5BVs4tloBxb-mto,4060 +PyQt5/bindings/QtGui/qvector3d.sip,sha256=09C2EsOxta6hO6Rzv6fIFrO3tllPugJKpsrlPeMioo4,5114 +PyQt5/bindings/QtGui/qvector4d.sip,sha256=r17durctCUa-JgotflcdkIoEiyAPLb1tphhUXaIuSOI,4691 +PyQt5/bindings/QtGui/qwindow.sip,sha256=Cf7lSRYSwHL-1wU8ZKI_xB6xcBS_-utqacsBZcj8A-w,7388 +PyQt5/bindings/QtGui/qwindowdefs.sip,sha256=vkZPmEMFV0jSm4nHHsWBsNNON7eZPh4SJHJ0uxv09Os,1009 +PyQt5/bindings/QtHelp/QtHelp.toml,sha256=Bm1bJZAVAT7aOnPR-YixpW7ZRtWtXxZcX00W7zCfL-w,176 +PyQt5/bindings/QtHelp/QtHelpmod.sip,sha256=WuCwOzq0GETp_O3TRSQNQ3u6PkKnvz45RMe5hliokpU,2341 +PyQt5/bindings/QtHelp/qcompressedhelpinfo.sip,sha256=6RV0NkJc6e4zp4M1co6MB7IYyVATT3rLTfLQQHqY7c8,1477 +PyQt5/bindings/QtHelp/qhelpcontentwidget.sip,sha256=QuF-ylLPMdr6-L7gE7EJBy-cB-e0wYTcp456uupTGxk,2362 +PyQt5/bindings/QtHelp/qhelpengine.sip,sha256=A3dBX2dl48S7t2NTfE_kHzd-tOtpSGzDfMRzSMPQf5M,1368 +PyQt5/bindings/QtHelp/qhelpenginecore.sip,sha256=QUyrE5Nilf3GjH8unOQdyUW1j3JCZu984XpbXkwilsY,5332 +PyQt5/bindings/QtHelp/qhelpfilterdata.sip,sha256=grbnpFdeGe-gpGBqwVXL0luLXygi29KeSnSBZbuWIm8,1455 +PyQt5/bindings/QtHelp/qhelpfilterengine.sip,sha256=LnKtd3pzWKv4mmljHMj5vIoy_jjMKzrqxIqTnfKcW0w,1990 +PyQt5/bindings/QtHelp/qhelpfiltersettingswidget.sip,sha256=bMZ02teihPjvGPaf8H9V9QdnEvuVkeVXLmgUeYPY3mo,1489 +PyQt5/bindings/QtHelp/qhelpindexwidget.sip,sha256=CiVdwq9MrE5t8kzAjRF9CM9hIwVm_xIk0AqTIZfHcuY,2149 +PyQt5/bindings/QtHelp/qhelplink.sip,sha256=-yNYfmA5BVrAqK9HfkL3ulC6chf9HA0_1fiUqYKSrnc,1073 +PyQt5/bindings/QtHelp/qhelpsearchengine.sip,sha256=NSYNfYhuiLscM9d57aRfsKSLFlBrsQfwX5-PVQLwSAY,2715 +PyQt5/bindings/QtHelp/qhelpsearchquerywidget.sip,sha256=ZJEHSTAgLIVlW52HTeu3cjgP5lvHDbE4GtmLlS2GfaA,1859 +PyQt5/bindings/QtHelp/qhelpsearchresultwidget.sip,sha256=V8b9Shyaz86qEglwqaTxcjtmJesPzGCLisV4GoXSXlo,1229 +PyQt5/bindings/QtLocation/QtLocation.toml,sha256=jFeYjLVjPcL-geVRaUxqNsnQtkIZvEuDzNpYYPTnOnk,180 +PyQt5/bindings/QtLocation/QtLocationmod.sip,sha256=ZvofcDVwaBXu8XlwvumQqdsDHOeZcxyMATr2hBkC6yY,3112 +PyQt5/bindings/QtLocation/qgeocodereply.sip,sha256=2QTj6MgB5z1B-m2st9Ejr9eT8fgpuDPzJuHkbxvRzm0,2339 +PyQt5/bindings/QtLocation/qgeocodingmanager.sip,sha256=DAGIjokt8Q6o_9ExGNSVOuzm9-jWBmXrgGZeN0rp7k0,1789 +PyQt5/bindings/QtLocation/qgeocodingmanagerengine.sip,sha256=SC4ORqN89ncwivCpHcuiksYPNcsYryoikFinTthz1J0,1860 +PyQt5/bindings/QtLocation/qgeomaneuver.sip,sha256=fGkWy19eZmAXNjlhFjCADCMbL-B9lL5DGp5U6_mtmYo,2395 +PyQt5/bindings/QtLocation/qgeoroute.sip,sha256=-xGqN048QJE-bB2MvnhOFoAdbTIDmGl_NWw66t9eQLg,2576 +PyQt5/bindings/QtLocation/qgeoroutereply.sip,sha256=Qw3IxYOPdGZS1XfCD73y65ObJ3EVzwW7xRjW2szYTV0,2081 +PyQt5/bindings/QtLocation/qgeorouterequest.sip,sha256=rLl6fUsKUqfWqsmhUAVWjt-30H_iTfQ_oxRTGZASuuI,5323 +PyQt5/bindings/QtLocation/qgeoroutesegment.sip,sha256=kR33L0d_okekYXqFi-KRwXW33oC_HWHjAgrmsxe8fdA,1796 +PyQt5/bindings/QtLocation/qgeoroutingmanager.sip,sha256=CeYZu-7-e7pJ7RtHLF2nYpc3F_YW2Gti5w36YKfjGnA,2162 +PyQt5/bindings/QtLocation/qgeoroutingmanagerengine.sip,sha256=wz3uXn_r6BFxOHM6RktG68EP_urMs7KGtg91SYoY3KE,2804 +PyQt5/bindings/QtLocation/qgeoserviceprovider.sip,sha256=B5AwU6Wn6Ya_q4XjjD10fYVOI1i1PNjXyPRnoHH-x7M,7281 +PyQt5/bindings/QtLocation/qlocation.sip,sha256=tzxbrwsrGobfqHNb3i2nnVrp7lWimomN9odWBSMGaI4,1372 +PyQt5/bindings/QtLocation/qplace.sip,sha256=9tPiIDYaNDr36zfrc3LDtyvFIiGsarsl8HdL6R6DzBY,3289 +PyQt5/bindings/QtLocation/qplaceattribute.sip,sha256=anhPMUAla3l_xD8uW2ePZndYqQZhAIkZbHqBHGRNek8,1555 +PyQt5/bindings/QtLocation/qplacecategory.sip,sha256=BT49HqK0UiSZr_MMjXuygqg0Tqc28Qp9ZVUx7ACSGv8,1628 +PyQt5/bindings/QtLocation/qplacecontactdetail.sip,sha256=nZYSq1NxEDY_5OPvbhJ-RLOI5R1T6QYdWNU8Lol2i7k,1606 +PyQt5/bindings/QtLocation/qplacecontent.sip,sha256=tBR1m4Jd70-g3VM-jjspnG1Ya7rJYGPYngZKSyv_ImI,1755 +PyQt5/bindings/QtLocation/qplacecontentreply.sip,sha256=gbPEJ_nlHTKGKPPP3p3uti0oQm9rqRt_ghOQ58XuRyM,1769 +PyQt5/bindings/QtLocation/qplacecontentrequest.sip,sha256=kF_GvQblVF7XJkjqW38s57olJsUITY3TI8Ni3NLX0Pk,1659 +PyQt5/bindings/QtLocation/qplacedetailsreply.sip,sha256=sk5T2scDLHdoZHqFDzj7CnbWWj_kg1dyrQ64wtZuug0,1324 +PyQt5/bindings/QtLocation/qplaceeditorial.sip,sha256=CmILRilQEEkoRIyQ0c1Lwzuf2yo7TixcrarwanXGlxM,1400 +PyQt5/bindings/QtLocation/qplaceicon.sip,sha256=Ul89JmqJgUKNGWQQa9P3UYnhT_qPrX3N247ZBnrT2os,1518 +PyQt5/bindings/QtLocation/qplaceidreply.sip,sha256=_u7BxXH2XbbRpGQK83PF2-9PoJ3kpGdCRfJLfhTZ4wY,1514 +PyQt5/bindings/QtLocation/qplaceimage.sip,sha256=AUKC8OQxkwlEmOwPsF_vz5S9nkaMR2rfyQcWtji-pOc,1377 +PyQt5/bindings/QtLocation/qplacemanager.sip,sha256=Pflce_DTdZYzBllVUdUovCHr4P6Y-uoPNx7qiaWhW34,2920 +PyQt5/bindings/QtLocation/qplacemanagerengine.sip,sha256=7xml7TVyGMSfm9otfyoYjMsbh7O31Zy568pHOzyzrqw,3216 +PyQt5/bindings/QtLocation/qplacematchreply.sip,sha256=WnRANDwEVmApDk0XwpcSifcSHZaYNmiK7gsfcFcHirQ,1428 +PyQt5/bindings/QtLocation/qplacematchrequest.sip,sha256=BUko7A2pWeLB6n1ozM4PzU5UXKKb8q144NIBz9wPxqE,1601 +PyQt5/bindings/QtLocation/qplaceproposedsearchresult.sip,sha256=547uN0mE5d1z7FN_9S8YqPVjbaDcC5YigXETZaTPTNY,1381 +PyQt5/bindings/QtLocation/qplaceratings.sip,sha256=_7OLmphrjWMDmZsgKGfdqR7vrYhua31isx8OpAzRi3c,1463 +PyQt5/bindings/QtLocation/qplacereply.sip,sha256=ygJy0dyImej7d6hBfFTpzFu7U-DPuYFsT3gi3Pt0wCM,2133 +PyQt5/bindings/QtLocation/qplaceresult.sip,sha256=mfwo4HvHo6QRGf8sn_yFVDVSx0KB_WIs1KgoXIYmF94,1388 +PyQt5/bindings/QtLocation/qplacereview.sip,sha256=r213Zy8oVATb9EJy-ClLFlm_g4IR5yO1A9eRTTitlfM,1594 +PyQt5/bindings/QtLocation/qplacesearchreply.sip,sha256=wmu6vAPko8mM3dluz6vgDsDDRFw6E9sTTfjPmGNiSHU,1695 +PyQt5/bindings/QtLocation/qplacesearchrequest.sip,sha256=9i9Bux1Re7EH5TK3QfXVmZ4SoaTZD_7gYcdEDZLor1Y,2273 +PyQt5/bindings/QtLocation/qplacesearchresult.sip,sha256=9bo7uUuon3EWhXT4k0mekBFtOyclBsjCn3PsvRHipCw,1630 +PyQt5/bindings/QtLocation/qplacesearchsuggestionreply.sip,sha256=SXVBimr4CLFy0_5QyIGNpYUYlkjLWVIbA0rhIAXFmn4,1397 +PyQt5/bindings/QtLocation/qplacesupplier.sip,sha256=841h1gP7bocnvcdSGYp-0kb_VJa5Oq7P9XM7XBsZr2w,1573 +PyQt5/bindings/QtLocation/qplaceuser.sip,sha256=magwG6B63XJx579QOcMWOJCxuGZgeTNj2FBSeMVnD80,1375 +PyQt5/bindings/QtMultimedia/QtMultimedia.toml,sha256=cd9_p5MHHmpYttfcCbNb1wPuw6IOU6BTxh39D0W0XkA,182 +PyQt5/bindings/QtMultimedia/QtMultimediamod.sip,sha256=pDKWyaDoxHMSueILquaKCUtQmHVSyUbJZjIFLpguYCQ,4474 +PyQt5/bindings/QtMultimedia/qabstractvideobuffer.sip,sha256=AbEdFO1vqKeXUeP1GzPI3CcB8COfCrfZapVd1lFVCnI,2475 +PyQt5/bindings/QtMultimedia/qabstractvideofilter.sip,sha256=MOSKd5btCmoRctWsQgOJrEWNgyrB9STUsbbkimsiP0Y,1923 +PyQt5/bindings/QtMultimedia/qabstractvideosurface.sip,sha256=LqSNzZ_HgmN9539bHvvFpoQkyJfzAUZz1WVGyLNhAHQ,7743 +PyQt5/bindings/QtMultimedia/qaudio.sip,sha256=6EzwJmTQ-BYi50uvHl8roZfwVrlk6s3bhyW1wstJDyc,1978 +PyQt5/bindings/QtMultimedia/qaudiobuffer.sip,sha256=2PfpHkYfF5FB-3id6CFb1FH5vIQbKDvAUrxHZel9Yoo,1555 +PyQt5/bindings/QtMultimedia/qaudiodecoder.sip,sha256=ZaDGJx9CMvyff2hQDrUdpVuCWEekHKVibjtWaj6pdoU,2578 +PyQt5/bindings/QtMultimedia/qaudiodecodercontrol.sip,sha256=dNDebPg9LQ_b-adSLnojPTkIfb9ZoZDMFOnY2YXfxmA,2191 +PyQt5/bindings/QtMultimedia/qaudiodeviceinfo.sip,sha256=0Mufscnuw1Jvf8NOg54H24Vz_vC4WCatICxu56DwzhM,2022 +PyQt5/bindings/QtMultimedia/qaudioencodersettingscontrol.sip,sha256=JCtdCYdM1V_ohcfdKPTFebxnT6yYG7jTDD16ko7A7n0,1631 +PyQt5/bindings/QtMultimedia/qaudioformat.sip,sha256=wsn-BU7EmoUIeNrda_qA9AERBTeHmnqIGmlIkITFo6U,2268 +PyQt5/bindings/QtMultimedia/qaudioinput.sip,sha256=I-t6RV9OGSAnAgw9aY6mQaH1kjjHx2UsI1N1tkWYF8o,1945 +PyQt5/bindings/QtMultimedia/qaudioinputselectorcontrol.sip,sha256=RlZg4U1EtQfypjmnlKbyL50HAoMuSm28vasbpYazBK8,1618 +PyQt5/bindings/QtMultimedia/qaudiooutput.sip,sha256=K-TkUV_D4MYHbo4zkylhgDkbEr71uS_IOM2VWd2w7YA,2020 +PyQt5/bindings/QtMultimedia/qaudiooutputselectorcontrol.sip,sha256=fZ6Z407vQOp_UMXIP-5wMauMMuxHT-8fkqzZ4DyZgEU,1630 +PyQt5/bindings/QtMultimedia/qaudioprobe.sip,sha256=HPur16pMjosOrZcJM1J_ZXbUg8oNW7MztetyfLYpPfM,1343 +PyQt5/bindings/QtMultimedia/qaudiorecorder.sip,sha256=IOxfMje9QV778pYPxgDcLbZWBWGyRqZGsozwC-ubY2A,1592 +PyQt5/bindings/QtMultimedia/qaudiorolecontrol.sip,sha256=r3vSOml4WGlvSmCNeNhYPNM1teE9gGUNlAwRVD--2sU,1436 +PyQt5/bindings/QtMultimedia/qcamera.sip,sha256=fPgYG1tNOZoVcMrMl9yc53t7EOdWZ90lAUWX74-J7qk,5730 +PyQt5/bindings/QtMultimedia/qcameracapturebufferformatcontrol.sip,sha256=D0l-gZ04nDlvmv6fvVxhay5zDW166XYAmCb1cOT_3w0,1556 +PyQt5/bindings/QtMultimedia/qcameracapturedestinationcontrol.sip,sha256=xVq8lC4I-ID7SX2nrJeJ50-vK9zDUP1p6xDuf2smMeI,1659 +PyQt5/bindings/QtMultimedia/qcameracontrol.sip,sha256=6PLxKvNeSuPx8SJGMu1kpHaCaqCoKGfl0Qve6hnRQVk,2011 +PyQt5/bindings/QtMultimedia/qcameraexposure.sip,sha256=9gPuf9ER29eFjlXRs543sEEyqXxfABWT-XVgDXQGq-Q,4375 +PyQt5/bindings/QtMultimedia/qcameraexposurecontrol.sip,sha256=d3UchepI9emWT-igFsOp3upgjW0O3XzmEy8sE8iPKiA,2197 +PyQt5/bindings/QtMultimedia/qcamerafeedbackcontrol.sip,sha256=1sr4tsyRcJLPoRXwhJxYRmQoQQiT-Kk5j1JyXhAPaL0,1962 +PyQt5/bindings/QtMultimedia/qcameraflashcontrol.sip,sha256=aYjYuuALOAdE-F_WuIIVymPiX0yZU4TB1GyOax2DDRc,1494 +PyQt5/bindings/QtMultimedia/qcamerafocus.sip,sha256=rtQRdz9J7fVg7hFSOR9ZTGojshU1NuhAhzxfoF5OvTw,3207 +PyQt5/bindings/QtMultimedia/qcamerafocuscontrol.sip,sha256=7zOsd4rTyTiyRgLfTCG-feC4J-8bKQXiye8YCth9zkE,2030 +PyQt5/bindings/QtMultimedia/qcameraimagecapture.sip,sha256=B3sUrp4vihsNW5qmjQwvFXVE2p7CM_guaQ-iL69vi1k,3567 +PyQt5/bindings/QtMultimedia/qcameraimagecapturecontrol.sip,sha256=lDkuPPu-qDGD-Zd1Ke5pdU3VMAO-JcmKHeMsu2qVRy8,1942 +PyQt5/bindings/QtMultimedia/qcameraimageprocessing.sip,sha256=eGkUV3-AzxLp0aB65iOFR63KR2HDngxr8KY0R9r-3to,3055 +PyQt5/bindings/QtMultimedia/qcameraimageprocessingcontrol.sip,sha256=_fScxiNhklSGKP1HIZfA1mn6iUUSU9bnKP74JHDLDsI,2103 +PyQt5/bindings/QtMultimedia/qcamerainfo.sip,sha256=SQejsd9gKRXKnZDSNeN1pcsT2RdMxldVkHKGzzKvyYU,1647 +PyQt5/bindings/QtMultimedia/qcamerainfocontrol.sip,sha256=pVx8yJAudTubf_e8xdf0-8mbWHlSWhQVpCJvado7QTk,1349 +PyQt5/bindings/QtMultimedia/qcameralockscontrol.sip,sha256=It7kpJ24R3qK3oISVI4_OIkabuZ6T5U5u7b2lJezTQA,1577 +PyQt5/bindings/QtMultimedia/qcameraviewfindersettings.sip,sha256=txUvsUNoCQVgZ30AXJqef8Vi87wNxBTC69R4vkGYg8Q,2082 +PyQt5/bindings/QtMultimedia/qcameraviewfindersettingscontrol.sip,sha256=QC59fj9wCnOkYkm1DX_LoCr4sbbS3RvbI9VdbqwIJQ4,2357 +PyQt5/bindings/QtMultimedia/qcamerazoomcontrol.sip,sha256=eLhiZQ1Zx-hMlgwPXfP4ijwBRIi8wGY_p1CAI4ypz60,1877 +PyQt5/bindings/QtMultimedia/qcustomaudiorolecontrol.sip,sha256=4kO8W78-h-QNrrkP6ASnlA3aaT9YfjMDdp3kRJguv28,1482 +PyQt5/bindings/QtMultimedia/qimageencodercontrol.sip,sha256=jHyFWEGpqivMBuLwlbG2vQkfAv0ft89qTlFZJICIUk4,1594 +PyQt5/bindings/QtMultimedia/qmediaaudioprobecontrol.sip,sha256=ZKLylOWa0SEDuJiUYU5uZl80YHaPe0Ef6I9s-_gSpPY,1303 +PyQt5/bindings/QtMultimedia/qmediaavailabilitycontrol.sip,sha256=glhP36Qs8MrT_k1j4SYWlMEvHELDgKVOeh5ymIud-ek,1385 +PyQt5/bindings/QtMultimedia/qmediabindableinterface.sip,sha256=7PwvK1P5UlVWeJqEA3Un457lwi3Wg1j3TE9kNJF6FDA,1232 +PyQt5/bindings/QtMultimedia/qmediacontainercontrol.sip,sha256=oG2176elXzwoLrMLI1DrVjl3_Jzy3A8WS7TfiE09UA4,1467 +PyQt5/bindings/QtMultimedia/qmediacontent.sip,sha256=hKNEM69Zm7WKqUtxAUZ-0QCVH5sSVjJBkdIFjXoFpnQ,1821 +PyQt5/bindings/QtMultimedia/qmediacontrol.sip,sha256=PMATeld6apPL79YYLC0NQCS4qZj6qo0xQS7vp0u-_C8,1262 +PyQt5/bindings/QtMultimedia/qmediaencodersettings.sip,sha256=DQP_USsbQQaSxExS0iI_Jy666mAqnNNMM-jQS-UMgZY,4048 +PyQt5/bindings/QtMultimedia/qmediagaplessplaybackcontrol.sip,sha256=OLLDfS_p0mwxmxMXTDg5RudE9E1HTpmjRMxi-RX_YKM,1661 +PyQt5/bindings/QtMultimedia/qmediametadata.sip,sha256=SpAB6dPWyVo542JG1PrbQOaFQok-EkE6cXJjHst_jyo,3873 +PyQt5/bindings/QtMultimedia/qmedianetworkaccesscontrol.sip,sha256=lBLzbYE6ah7NL2u_v4wvJMG1qoygZ1utPPjc0ZQFhPM,1478 +PyQt5/bindings/QtMultimedia/qmediaobject.sip,sha256=5tIcXhl-12du2nVMHN64VUUUhHyEwzallLuvhdE_Pss,2044 +PyQt5/bindings/QtMultimedia/qmediaplayer.sip,sha256=g00Hg7xf__dxzrNOyad4gAnD6QRYz3gXgcAM_HGZsTw,4949 +PyQt5/bindings/QtMultimedia/qmediaplayercontrol.sip,sha256=JmlSNn-KA4Fe3qylaoGyuH63SMjaOnvuRRZ7Cig0wIc,2907 +PyQt5/bindings/QtMultimedia/qmediaplaylist.sip,sha256=EW3BAXmmy_HgfKuvb5GCSDTVFitkemErAMo4jwyCM8U,3469 +PyQt5/bindings/QtMultimedia/qmediarecorder.sip,sha256=Mfq4WJI1yIOskbG1ea_BH8bD38hbG6xjRrzo0agaALU,4458 +PyQt5/bindings/QtMultimedia/qmediarecordercontrol.sip,sha256=VSb265Ne_urB_96wBbd2Wtri4HMtXHAawi6dDedjeKM,2085 +PyQt5/bindings/QtMultimedia/qmediaresource.sip,sha256=H6K37B-J27-_psBRym87hqty92abB3ng6STQ5Sr0XKU,2275 +PyQt5/bindings/QtMultimedia/qmediaservice.sip,sha256=RNWUV-3ZmUpDRkVgrbMrtlYqwYOxbV8g5yN4Dm9yYpA,1276 +PyQt5/bindings/QtMultimedia/qmediastreamscontrol.sip,sha256=O_wxOKr8iJzMY10I6H3giFSY4tSarv6LZcDXpRVRLDw,1717 +PyQt5/bindings/QtMultimedia/qmediatimerange.sip,sha256=uv2Dr_odz4XgOEgMSEHU500fUq0pQu05YKUITb8k3GE,2889 +PyQt5/bindings/QtMultimedia/qmediavideoprobecontrol.sip,sha256=x-x8mkjnjQmFAEQC-d0qu8puOIy3x5yHYp5tIlNY3nU,1300 +PyQt5/bindings/QtMultimedia/qmetadatareadercontrol.sip,sha256=7llysHg4gM3OAU8Wmw9AKSSfYBHx2-3rfVtZ3A1oJNs,1538 +PyQt5/bindings/QtMultimedia/qmetadatawritercontrol.sip,sha256=g-Ra9G8Rz722xUv2Myl-sw3KzCU7zHPloO_AbQR2A-A,1697 +PyQt5/bindings/QtMultimedia/qmultimedia.sip,sha256=5OFNifHsQbIhHqs_BbioI3MJcS7WTypQsQA39kCOjEs,1600 +PyQt5/bindings/QtMultimedia/qpymultimedia_qlist.sip,sha256=Cc3f_YiznLXRd1VQBXFThCqywy4ySmzA06jATOe3ovw,9019 +PyQt5/bindings/QtMultimedia/qradiodata.sip,sha256=4JIG2C5M8rzrVr_vlNF8iEYyXZRqI-hJhLQO03tqToQ,3181 +PyQt5/bindings/QtMultimedia/qradiodatacontrol.sip,sha256=ZN8YW3FIinou6B3I_A0dFg3TE0j4s9-gQ-zdHd4s1qQ,2031 +PyQt5/bindings/QtMultimedia/qradiotuner.sip,sha256=VUvtWOWF2fln9eMjPhQenBeIBRu2-AuXls85v_Objmw,3283 +PyQt5/bindings/QtMultimedia/qradiotunercontrol.sip,sha256=P8swQQY0mnxITi__3rloergdsH9RXSKdBKz4mqTmVUM,2971 +PyQt5/bindings/QtMultimedia/qsound.sip,sha256=qUtTc0qg57_ftZ8yAvBD0Cm2fM4TiyNVfgZGBfY5HX8,1412 +PyQt5/bindings/QtMultimedia/qsoundeffect.sip,sha256=OJUkBr_NKU9wUIdcx-29QvNlV42_cVNR9tlvwsXFMcw,2197 +PyQt5/bindings/QtMultimedia/qvideodeviceselectorcontrol.sip,sha256=t9x7iJXiklXF5YYRHQu3-EfozmiC4L7PNMIpsMlslok,1679 +PyQt5/bindings/QtMultimedia/qvideoencodersettingscontrol.sip,sha256=_s4f6FezdYTP_8SYOK6TkF9fYRlRoLKEcw1edXZ2r6w,1752 +PyQt5/bindings/QtMultimedia/qvideoframe.sip,sha256=gDHZuaggXpzcgAd_KTn-ILrxmizYXJ4O2OjOWvOvkV8,4340 +PyQt5/bindings/QtMultimedia/qvideoprobe.sip,sha256=u4ZwDlZTM5BiHya4UnYhyVxcT-dxMkZn1_jsnWRUEFk,1340 +PyQt5/bindings/QtMultimedia/qvideorenderercontrol.sip,sha256=kNDf1TY2pmE9tbhi-p07OEaWRWNFP49yFki4rkjrrpc,1330 +PyQt5/bindings/QtMultimedia/qvideosurfaceformat.sip,sha256=jkAsO0LSq5dlJsK_DHl7IXI4qyNF8G7VCHYFzjGeF5I,2852 +PyQt5/bindings/QtMultimedia/qvideowindowcontrol.sip,sha256=Lo-Dh03_gUKLHX7-trrsJKVNt9Zew4gSG1sHcJ9eUA4,2254 +PyQt5/bindings/QtMultimediaWidgets/QtMultimediaWidgets.toml,sha256=7XNWye_30ohhFjJGR7SK7o1JPJCQgV-NkYeI6G7-ewc,189 +PyQt5/bindings/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip,sha256=DL02I6fZZNrvB87ak3pECafTnk6JDnw6tNhRT5TULfI,2141 +PyQt5/bindings/QtMultimediaWidgets/qcameraviewfinder.sip,sha256=IA4QwPNZ3SLCie7UAPYzlCJcCZFDVm3OUp5I4tIQVn0,1400 +PyQt5/bindings/QtMultimediaWidgets/qgraphicsvideoitem.sip,sha256=tQe2dNdcQ9b-1sR3HahB9zg7oIszt-SV9V_mSr9riB4,2250 +PyQt5/bindings/QtMultimediaWidgets/qvideowidget.sip,sha256=6w9lGaixdjbtCuClf8sLDtLK7jAYHUDOFlmcxziRR9Q,3170 +PyQt5/bindings/QtMultimediaWidgets/qvideowidgetcontrol.sip,sha256=XDsYX3NmpNQbcz9wdVNuat1hw-9mi6dGgZk6e7p7_24,2024 +PyQt5/bindings/QtNetwork/QtNetwork.toml,sha256=HUAn45V13yRIyBazowEfEyzwEd3zE_Gk68u7dRVjctw,179 +PyQt5/bindings/QtNetwork/QtNetworkmod.sip,sha256=7L7t2YIGqmwrkohX2pP-vvg9oEVM7nQuNKGr25MEP7U,3096 +PyQt5/bindings/QtNetwork/qabstractnetworkcache.sip,sha256=tuK6tkmweWu9I2AwMIS-OxUY7sNiGpwkDu3deJFtVig,2998 +PyQt5/bindings/QtNetwork/qabstractsocket.sip,sha256=GuBs-VIMlnqZFSrySMKaKlVo4zKuLfxRynhUdZBbCus,10490 +PyQt5/bindings/QtNetwork/qauthenticator.sip,sha256=bUjO60lNcMxwKEYC-U5hn7C3iZdtmUD5b3u3Gw1u6BA,1584 +PyQt5/bindings/QtNetwork/qdnslookup.sip,sha256=b0HNYriMtO3hI_kGxrW8AyBDQQLmRW_4wksW1zyo6ng,4690 +PyQt5/bindings/QtNetwork/qhostaddress.sip,sha256=fvpma8DfpVGqzH6QIZ5DXTGEWwlOKms0ES0-K-Byv1c,5961 +PyQt5/bindings/QtNetwork/qhostinfo.sip,sha256=50kRzTxtw3YRoNaBiIgSNMK02FoEVlhB2IAYFEMYTyw,3010 +PyQt5/bindings/QtNetwork/qhstspolicy.sip,sha256=wi5LKFNt-HPsm4cVmp1XOxQLQ9KpeQq68K-kkAUB5CM,2113 +PyQt5/bindings/QtNetwork/qhttp2configuration.sip,sha256=Zg_z_wQgIIWBvxcmXj3uO2ZZnu_qYie_nuiQ3pYM9ZU,1933 +PyQt5/bindings/QtNetwork/qhttpmultipart.sip,sha256=wjr_SkNx39VZZ3xjPVWFH8sGwaNU3-4GDt2VOEaj8lk,2118 +PyQt5/bindings/QtNetwork/qlocalserver.sip,sha256=--ahDhz853iErN7Ae5zgFvQ8ZGz9lv2D7ZKfpIyzun4,2373 +PyQt5/bindings/QtNetwork/qlocalsocket.sip,sha256=uPIqVkSjCaRa3nzs3G_mFS3Itb9SkO4ViWUuWHU0CWA,4518 +PyQt5/bindings/QtNetwork/qnetworkaccessmanager.sip,sha256=P3CC-3-VZ-NssIru9lwUkGQZ3A5pvvMB4A_6GMiI6yk,5893 +PyQt5/bindings/QtNetwork/qnetworkconfigmanager.sip,sha256=iE1LXG8rQcKfij3fzdLOLkEGB5KyNWwV4WY-2W9Vjzw,2531 +PyQt5/bindings/QtNetwork/qnetworkconfiguration.sip,sha256=7omP8ESIQT1CJ4xA9a3s9DuR4B0QhVsvYYKJvdZk_6c,2799 +PyQt5/bindings/QtNetwork/qnetworkcookie.sip,sha256=07XobMAXg9AsI6tCAkSeH1gn0KC2XaylHG4EMd029-s,2244 +PyQt5/bindings/QtNetwork/qnetworkcookiejar.sip,sha256=4HwEcsKdYES7afFwUC20xWmUsHG_x4UovNobBx9F3Us,1726 +PyQt5/bindings/QtNetwork/qnetworkdatagram.sip,sha256=09KPA3qZDoaRMIGGQn9eUeoFvmR00OKH8yXHEC25QXY,1965 +PyQt5/bindings/QtNetwork/qnetworkdiskcache.sip,sha256=_KBzIwJKZ5mvRPcXKjWsUNVk1Vsg4WlV2WmKZBQzgBM,1888 +PyQt5/bindings/QtNetwork/qnetworkinterface.sip,sha256=nV3OPpNMtP4kcyvLZEdgJN0wGtTBjYFDjprW-Nbi50U,4182 +PyQt5/bindings/QtNetwork/qnetworkproxy.sip,sha256=X0w-2n1ZAyrV4aqo9b1r7eLwI5wKjGb016sUEJHdqjY,5912 +PyQt5/bindings/QtNetwork/qnetworkreply.sip,sha256=nwN-FZm8rbKUHAjCTgo80EhaeXmG5Q46vWQioSwKhzM,5147 +PyQt5/bindings/QtNetwork/qnetworkrequest.sip,sha256=KyRH9zRa37Qhq_PwgDVz0f_jHL0ZL9_8gVlI3hi8H1g,5347 +PyQt5/bindings/QtNetwork/qnetworksession.sip,sha256=AxV4Cgx9WPz8fzMeKXOWvnNZxUXALjdzzZ5-7RVskiM,2921 +PyQt5/bindings/QtNetwork/qocspresponse.sip,sha256=FZrVNLyRVzxXr-NdpIsSVl_DFCjnJ8FNpLhbYPiU6YQ,2168 +PyQt5/bindings/QtNetwork/qpassworddigestor.sip,sha256=-KbITE3N8hWc0gjqnL5NQa0hU-Dtd0UDmEHqhyIUuMA,1402 +PyQt5/bindings/QtNetwork/qpynetwork_qhash.sip,sha256=JX48gb1QxtvOM7-CpIVjv2ruxrSkbYDtEu_AOVOPU4E,3458 +PyQt5/bindings/QtNetwork/qpynetwork_qmap.sip,sha256=33IbCYVI76_J2fxnT6-jun_Rv9vmyIsBOYoAMcXJWKU,5018 +PyQt5/bindings/QtNetwork/qssl.sip,sha256=2CYcRmsGIwi7b1SZ9jK-FqtRXWKQA_9CWTXc6Weg1pc,2642 +PyQt5/bindings/QtNetwork/qsslcertificate.sip,sha256=5hfE01I8yJWJw8Vbeooi4CcyE3-Hts11jorNSnWc0Bs,3856 +PyQt5/bindings/QtNetwork/qsslcertificateextension.sip,sha256=tGRObZgfOTBphttqAx8Nc2S6YoICsxYd02vj02osK0o,1426 +PyQt5/bindings/QtNetwork/qsslcipher.sip,sha256=KJynYMc_BNSU2xyL0J-Fujfp6164Npwv0Udhxg-0vOQ,1716 +PyQt5/bindings/QtNetwork/qsslconfiguration.sip,sha256=FhErE60GmMPLkdKXm4zS2eTQi69vuH0hnIwCWj7OGY0,5288 +PyQt5/bindings/QtNetwork/qssldiffiehellmanparameters.sip,sha256=uoJ1z_tvcLw6SvZabPJuBrkAyGAqzSgeC8b4GMBHP4k,2277 +PyQt5/bindings/QtNetwork/qsslellipticcurve.sip,sha256=PYrp_5AJk7YWQI2_B7YqojBxBzJekhQYq41DbvgJL9c,1655 +PyQt5/bindings/QtNetwork/qsslerror.sip,sha256=Bt89RjmVP7dSkjh4gmrywOLeWfBHpaJswc73YGDGFMQ,3088 +PyQt5/bindings/QtNetwork/qsslkey.sip,sha256=FYssxA9LekEWTe0GWcY6nZuQyR-6CQn_VwF7CImm73g,2021 +PyQt5/bindings/QtNetwork/qsslpresharedkeyauthenticator.sip,sha256=JjaoNCP7UTam2TKDPF0J-S1yuIpGsKQrol2DlK76Jnw,1949 +PyQt5/bindings/QtNetwork/qsslsocket.sip,sha256=ZtThKIlaeUw6MFIkuAvI_iVlM2Ni_5MorTjo6uyUqUY,8105 +PyQt5/bindings/QtNetwork/qtcpserver.sip,sha256=_Fc2BAMe66fr-x1vfwubcebd4c2AF3rQfOoDRiRq3B0,2146 +PyQt5/bindings/QtNetwork/qtcpsocket.sip,sha256=3Afqgq-ceiPPNuAGZ4-Ati7-WUAGME5O7rKHfrqrHMk,1141 +PyQt5/bindings/QtNetwork/qudpsocket.sip,sha256=tMKgOPf2hsgyc8hh1cmzv2pNVhWrFw9VSfl-OofxGmc,3030 +PyQt5/bindings/QtNfc/QtNfc.toml,sha256=sPOazy5n9kU3jUNw5Fq_6gGQJ5NcN0-BEBKS0B-zuBc,175 +PyQt5/bindings/QtNfc/QtNfcmod.sip,sha256=H5fcZn2LzTtTrXb4rurKF44sgInsthEry62AIO0GIgk,2239 +PyQt5/bindings/QtNfc/qndeffilter.sip,sha256=8ARJrgnkFLBZ9CMKETWY_F1Dxr1r5x41eLwVFQOOD5w,1709 +PyQt5/bindings/QtNfc/qndefmessage.sip,sha256=LH7Anhkm0ltLSozVxRFE79LIlzZe_TACyF5gEbkDe-8,2178 +PyQt5/bindings/QtNfc/qndefnfcsmartposterrecord.sip,sha256=CugoapxA9IC2LWN1kOn8WYvbLSSwXikiGYqZ9WXN7w4,3359 +PyQt5/bindings/QtNfc/qndefnfctextrecord.sip,sha256=UC7l_kAuTN-dJgZByWg0r2xsWAR8dstx_XM-HrVPhpk,1478 +PyQt5/bindings/QtNfc/qndefnfcurirecord.sip,sha256=3wJYBLdkvHDDdwI1giJRkuEDJvJHKQqXwdXEFBnejGc,1220 +PyQt5/bindings/QtNfc/qndefrecord.sip,sha256=_FQwxbYpTQYMyp-8ElvN2AZi0x0wGdkbMEzbL2JlzTE,2513 +PyQt5/bindings/QtNfc/qnearfieldmanager.sip,sha256=nDXe4L9A8og1aQdB4wtZ6IDTmhfSFHPcnWI5JEmNIF8,5218 +PyQt5/bindings/QtNfc/qnearfieldsharemanager.sip,sha256=gjdSxWkgchjHQcL55MhxvQZ04JbmimwYWKy299-v5Z8,2281 +PyQt5/bindings/QtNfc/qnearfieldsharetarget.sip,sha256=rOSpudG7K8eQdyuFCRiclQoSjbusLsSqezXSIW8gTo8,1512 +PyQt5/bindings/QtNfc/qnearfieldtarget.sip,sha256=fd8MwHBom3pxO1eiqVeX1zfgSAzMPY1JOHBhHgz6VCA,4108 +PyQt5/bindings/QtNfc/qqmlndefrecord.sip,sha256=PaBGIU7Scv02vkyg_9ZS-UYDQFZVwPXruZR9EiL6NoE,1781 +PyQt5/bindings/QtOpenGL/QtOpenGL.toml,sha256=GN7_rYDb9LfHN6TtqO4xHhwMfQQALkEOAVH149t_OZk,178 +PyQt5/bindings/QtOpenGL/QtOpenGLmod.sip,sha256=lpNbqdi3UaAKurlS_KcVcHjLcpzPGBAIoskMrOK4gE0,1989 +PyQt5/bindings/QtOpenGL/qgl.sip,sha256=EVzpLMNeynJskcaU-Yttfs0LTyXzefejpfsDYya4IZo,10718 +PyQt5/bindings/QtPositioning/QtPositioning.toml,sha256=u1U3QFyZD73bkiAbJ-rqgxXgwxvBfRWC4ktzl8JCdgU,183 +PyQt5/bindings/QtPositioning/QtPositioningmod.sip,sha256=Tide0PRt1H92YBk9F_nNlveycbR_AWwQpupLVgjBchU,2327 +PyQt5/bindings/QtPositioning/qgeoaddress.sip,sha256=Mmp01X1obLcUJ-OL1A0-IUfcPoyu-BmLzeKpOhSLBWI,1985 +PyQt5/bindings/QtPositioning/qgeoareamonitorinfo.sip,sha256=9Elh3LsINb7u6YNygv2alf1dYw_WGvHaJsSs1r9rtkU,2031 +PyQt5/bindings/QtPositioning/qgeoareamonitorsource.sip,sha256=5RKBItLGlO3eogbSABEu7ccqzDdWiQ5lalSXwCcGQcM,2905 +PyQt5/bindings/QtPositioning/qgeocircle.sip,sha256=NlxJ5M8G8EIYjPFBtpGHhrCs6dAk0BZLo2tXazyzPjs,1790 +PyQt5/bindings/QtPositioning/qgeocoordinate.sip,sha256=g_cBzWhwL0zVzI6A9lBEVwwhFS0xKHJqecPPqcCLrfA,2682 +PyQt5/bindings/QtPositioning/qgeolocation.sip,sha256=TMGsYY9ZwTGsO3ZLgWp079kCmR-zC9PSGaXJzGXmNdg,1696 +PyQt5/bindings/QtPositioning/qgeopath.sip,sha256=mone7kAzEVNTC7tqreS8Xj1O1zKILu1tcKF3faYu0k0,2267 +PyQt5/bindings/QtPositioning/qgeopolygon.sip,sha256=3_zFOqXM1JjJji-S4KGqqYXJjgG1u-VWEhyNitFIcrg,2694 +PyQt5/bindings/QtPositioning/qgeopositioninfo.sip,sha256=QyZIWMpA47_HrEWfRXe95MYgnRk5owHdCAS4nM52eCQ,2253 +PyQt5/bindings/QtPositioning/qgeopositioninfosource.sip,sha256=6lo4FMs83jrNFaY82mikSOVWLnwzsQYMabFk8Fl8NyE,4382 +PyQt5/bindings/QtPositioning/qgeorectangle.sip,sha256=_D-rPbggu6sO3sGUSVncpNeAmvURwrP6tsbAYI7dzt0,2781 +PyQt5/bindings/QtPositioning/qgeosatelliteinfo.sip,sha256=8XvsVNj5jWsa9r6zGLuTOkjA-YEkqu3eehUO81SrFUA,2253 +PyQt5/bindings/QtPositioning/qgeosatelliteinfosource.sip,sha256=GE6fIBpxYQs3ctBNcl-0fq1-R7ziqz3en8P-KN9iRek,2601 +PyQt5/bindings/QtPositioning/qgeoshape.sip,sha256=3sJ-2mpQP7ULcOaDApRumQD80cenBhq1jrEql2nUuzs,2580 +PyQt5/bindings/QtPositioning/qnmeapositioninfosource.sip,sha256=dAxzdSEBhye4JMTEfY8xBoHtyN60iCN7Sm3AOwLQwtI,2256 +PyQt5/bindings/QtPrintSupport/QtPrintSupport.toml,sha256=Y-xGrLCIEN4W5FWzXahJY6_uefK7ScCX_AsT_25KGL4,184 +PyQt5/bindings/QtPrintSupport/QtPrintSupportmod.sip,sha256=YX561SB7lKTPEnl5bfLOm-rleRAgwIj-mPcVetj2H70,2255 +PyQt5/bindings/QtPrintSupport/qabstractprintdialog.sip,sha256=RDiQghARflHSe2kxWryrfi23nNFfZa9YmYlQkijWjtU,4983 +PyQt5/bindings/QtPrintSupport/qpagesetupdialog.sip,sha256=S8-gWAVAPICXdsSZoycCrDFqM4KKsXutT_6wykCE32s,3280 +PyQt5/bindings/QtPrintSupport/qprintdialog.sip,sha256=6AhMpAjWveoGWjAEaDCuYHgOEUeWKb7BVnLgfNEvZdM,3658 +PyQt5/bindings/QtPrintSupport/qprintengine.sip,sha256=ynn73u-OSx7gCY8MAcc3_9l3Zu-V_8XyiGUixrxaJ6Q,2415 +PyQt5/bindings/QtPrintSupport/qprinter.sip,sha256=C8ldXsgrDncJ7SziVlZVaJzO0RRjmyeErBV3nOqgzfE,5740 +PyQt5/bindings/QtPrintSupport/qprinterinfo.sip,sha256=1p9EmnEdX7J1E5sl4QIf2QsHbjZOnjiNxNhm_XUizrU,2661 +PyQt5/bindings/QtPrintSupport/qprintpreviewdialog.sip,sha256=f1u9o5z8oRPlxx_gv7r2lQObfoAxD6KHsChidTCvVCg,2041 +PyQt5/bindings/QtPrintSupport/qprintpreviewwidget.sip,sha256=Vn86g8BS1tnaZ8W_VXWqg8mZiWo93XNfyKBUzrxBwfo,2610 +PyQt5/bindings/QtPrintSupport/qpyprintsupport_qlist.sip,sha256=wcsRtATKfNcMXicI30XzoovFPNT7fl1k83RbZoHFeS0,7166 +PyQt5/bindings/QtQml/QtQml.toml,sha256=CZEV431pI8uq1Edr9rhfCcK5bB2DXLwg5ao08d4nBAA,175 +PyQt5/bindings/QtQml/QtQmlmod.sip,sha256=HvC7PcmWuPV3fIDd5i423TFNg2MU17itz2-1Wtp_tE4,2642 +PyQt5/bindings/QtQml/qjsengine.sip,sha256=_thNeISDQ4PkdjcNxnLT2_ajPy9n14FCmCmsTptnh-Y,4384 +PyQt5/bindings/QtQml/qjsvalue.sip,sha256=ldFR29NQg_drBeDKJGAyyj2qhvOz3N6gg-zqSurQ_Ss,3171 +PyQt5/bindings/QtQml/qjsvalueiterator.sip,sha256=qxKR3VWZ0qgeL-HKPpo1Kc-wvVvTqaaDBnO5y8ASPMY,1267 +PyQt5/bindings/QtQml/qmlattachedpropertiesobject.sip,sha256=Zja0r-J9SXHSMG-e_zA-0jlOsbY40jfS3Om_7hCscbw,1515 +PyQt5/bindings/QtQml/qmlregistertype.sip,sha256=DvmOJVPRuW5enWAx2W_ZobyXzeC_b7uZOVXX-VXbaII,3561 +PyQt5/bindings/QtQml/qpyqmllistproperty.sip,sha256=nngKVGE3jIZIftLiO79uuUCV8bqWHfefFzfyCfV0px0,1413 +PyQt5/bindings/QtQml/qqml.sip,sha256=dHulzUPoSbq4a-2eIKxS_nMPBvP-yG_0f1_XsQ3WrLI,1124 +PyQt5/bindings/QtQml/qqmlabstracturlinterceptor.sip,sha256=9w0lSqa7zgmX-vCVt9k5G6Y03fh01jPzbWNZqzZAefY,1378 +PyQt5/bindings/QtQml/qqmlapplicationengine.sip,sha256=K2rm3ghBRpa1fCT7vPMnGjYBW2ST2W6b-EzkrZ5z2mo,1896 +PyQt5/bindings/QtQml/qqmlcomponent.sip,sha256=u7AOExHyEc7c4EVPcMnGwnS12hinWk8D9NIO88VOsXg,3014 +PyQt5/bindings/QtQml/qqmlcontext.sip,sha256=e061xKrhZO950Sx9OvU98mIOcJNKGibcFvYFqMa1nzo,1976 +PyQt5/bindings/QtQml/qqmlengine.sip,sha256=lO_FZGOBwpHfrJWjtUbGReu_3O1NFjcQ2uotJ7hNsa4,5823 +PyQt5/bindings/QtQml/qqmlerror.sip,sha256=vry8GS4AcsVF5NXrAQuhjItpqn3lj7wajJ6yhHMUX4I,1599 +PyQt5/bindings/QtQml/qqmlexpression.sip,sha256=qI3HQIj170gdUpuBljDB8TYbyLA4JyeNpWvtSYfkbTw,1932 +PyQt5/bindings/QtQml/qqmlextensionplugin.sip,sha256=W1sM20z5Fw4rQjZZzegVT-PbP_D07C2kPLbiektjC7g,1666 +PyQt5/bindings/QtQml/qqmlfileselector.sip,sha256=PTOtBhR8ByBpqQ4SKJc_XeYFrjhnmp1PcJU236NGxrs,1498 +PyQt5/bindings/QtQml/qqmlincubator.sip,sha256=DOR6bYxqCuzT-b_HkmThZW1qCDxp1op146XuaWoEFA8,2355 +PyQt5/bindings/QtQml/qqmllist.sip,sha256=exTkFBOu4iqM6wNsGTgjTTk08ZgVuJcUSiC7sRC8slI,1809 +PyQt5/bindings/QtQml/qqmlnetworkaccessmanagerfactory.sip,sha256=OSY9pmY2-uTdRbXWBRfThFCaZjbIv6-Ky9-y6OHo2f0,1199 +PyQt5/bindings/QtQml/qqmlparserstatus.sip,sha256=fZ4JgWad4JL4csfKidp299jKJoGMtzXW0luHUdXa7Fo,1235 +PyQt5/bindings/QtQml/qqmlproperty.sip,sha256=XhlLrIaP2dPydNjJuTTvG0E-zpRdJIknJJ9er2Zoric,4006 +PyQt5/bindings/QtQml/qqmlpropertymap.sip,sha256=naFILVOaVE2C9yfsl8EppF2TelW1SURErQbajgAeTTM,1668 +PyQt5/bindings/QtQml/qqmlpropertyvaluesource.sip,sha256=giw6udnE3eI3qeYn-iJqyMQAFbtvE2m47YgTHn469OQ,1254 +PyQt5/bindings/QtQml/qqmlscriptstring.sip,sha256=aegiqWSIZCP9bo_3sU3J8KbBM0dtDC6tmv_heisqa6M,1501 +PyQt5/bindings/QtQuick/QtQuick.toml,sha256=UZOu7CenSOsSxTjOMx2bWHWMf5RRA9LmFxmrBvSYeQQ,177 +PyQt5/bindings/QtQuick/QtQuickmod.sip,sha256=fxZH4cqVEw6M2D16n9jl5mIgzRP7J73di9HTzonoiXM,2736 +PyQt5/bindings/QtQuick/qquickframebufferobject.sip,sha256=GIlvmGz3nnSPCvHeFjkVnNiXOlFOfkQmIJPe0q0OwhI,2552 +PyQt5/bindings/QtQuick/qquickimageprovider.sip,sha256=X0Bu47b6gSujSzvPkqz-mkDPhaGyUawR2af_5A0DAFE,2917 +PyQt5/bindings/QtQuick/qquickitem.sip,sha256=u0e6CvhNvITciDbJrnPMRikm6WmO2MYOpw69Fsm2404,9761 +PyQt5/bindings/QtQuick/qquickitemgrabresult.sip,sha256=3cGZNKnd8fcdyO1r83CDByor0w62_n7C_KOKqmaES8E,1441 +PyQt5/bindings/QtQuick/qquickpainteditem.sip,sha256=48O_NLx6f2udNT7_gA0RJa238QCVjdaYb5qbbpL86ys,3375 +PyQt5/bindings/QtQuick/qquickrendercontrol.sip,sha256=7WemBwv77AIa3GQFy0tmSB52nSSAN8YOWjP1KBzFhZI,1730 +PyQt5/bindings/QtQuick/qquicktextdocument.sip,sha256=-trRUJB6qTnQt89F_t_Ih-WgYTHqYOfD1dXN7gPDIV8,1253 +PyQt5/bindings/QtQuick/qquickview.sip,sha256=T5SYZSZtSxeTWM86bpNOyo16etBkLrh2mpgK8zslx18,2375 +PyQt5/bindings/QtQuick/qquickwindow.sip,sha256=-XTVoXswkwpwviaHkVr6yyGao0k-ABORwUotw9WlW-E,8897 +PyQt5/bindings/QtQuick/qsgabstractrenderer.sip,sha256=GXhW6F16pRdLML34jlC3DfWai18--IhInRRkytQX44A,2489 +PyQt5/bindings/QtQuick/qsgengine.sip,sha256=RQWF9y90BZjr6DgBXh_CfqFR0mXspEQ20yp7Fm_tUsU,2162 +PyQt5/bindings/QtQuick/qsgflatcolormaterial.sip,sha256=uN3EA30e9L1o96N-w0xsD3qWKVm2M-tkKdXzqwIkWXk,1341 +PyQt5/bindings/QtQuick/qsggeometry.sip,sha256=idrmsk0Sd811GLXASpUh8n2qMhFdRUhxnCcImdJZo0E,12417 +PyQt5/bindings/QtQuick/qsgimagenode.sip,sha256=ioaMVPKzD3v5aAoqIH-zTPnAuaSAE5zhNY60wD2sxUU,2827 +PyQt5/bindings/QtQuick/qsgmaterial.sip,sha256=TLaK_tyDDlq_1BkH5495QsEcm2tB8_eiuDk46sHLSK4,7573 +PyQt5/bindings/QtQuick/qsgmaterialrhishader.sip,sha256=xv8_HuhfrZJMQpjbfMV-T7WTub_VKwj46eFgQvHY_ns,3932 +PyQt5/bindings/QtQuick/qsgnode.sip,sha256=D8fCgC_wSOXZOpwX4jUJBKx2-4-tCT8cEead9xZeKZU,8831 +PyQt5/bindings/QtQuick/qsgrectanglenode.sip,sha256=-k9zj6I9CrjUZQH7xkho-0g1hWQK2fHV0bRv8Y0Cl_o,1374 +PyQt5/bindings/QtQuick/qsgrendererinterface.sip,sha256=qZBPOCIkq7Dvy4UR8Wfotkf-gfSV28TLH47rhhHWnIk,3470 +PyQt5/bindings/QtQuick/qsgrendernode.sip,sha256=mX8lJndf2otbYFftF2pCT9c4ECcn24b9IB7V_kXHs28,2703 +PyQt5/bindings/QtQuick/qsgsimplerectnode.sip,sha256=40lefpFttKgDGEQxZHGApU2iW0yRMaGOMsdfvJoPjRY,1361 +PyQt5/bindings/QtQuick/qsgsimpletexturenode.sip,sha256=mvUPyVlAn8kYdKn1y8mdk5N1xv5DndLW1FksE_n9cxc,2528 +PyQt5/bindings/QtQuick/qsgtexture.sip,sha256=7v-wyCtB97lAGaOi0Qz-tO8HdKm60rx0Xlnz7oCgLtI,3005 +PyQt5/bindings/QtQuick/qsgtexturematerial.sip,sha256=1wkILHP681E9UFGdAco4H9PwAFNwbR6IMC_Zot-Fwqw,2179 +PyQt5/bindings/QtQuick/qsgtextureprovider.sip,sha256=3xTZJnX0rz3asvFgL4kwUkDC_X4GIfrsIr2FeXQJZWU,1159 +PyQt5/bindings/QtQuick/qsgvertexcolormaterial.sip,sha256=wxcpDOTdHO0u3BmXEc8mO4V0vW5uX-QlFtuzCZFFdtw,1288 +PyQt5/bindings/QtQuick3D/QtQuick3D.toml,sha256=o7kfCG4w4wAFBf_QUmjeiDOEvtV9GS8gr-QRI3JzjO8,179 +PyQt5/bindings/QtQuick3D/QtQuick3Dmod.sip,sha256=hq-VvRlMEgl-AmPtcnbpvTktg0t3_ZNagcNdufEUDeA,2047 +PyQt5/bindings/QtQuick3D/qquick3d.sip,sha256=OTnJte4Xwwea8Zxfx4SjgyKnNQXkvg4PeyynuLP-p7s,1111 +PyQt5/bindings/QtQuick3D/qquick3dgeometry.sip,sha256=-1371aMeq5ZQEEHq7XOoSSOnMNvu3bnFeEeyrzvBLOc,2895 +PyQt5/bindings/QtQuick3D/qquick3dobject.sip,sha256=h9euxKVQNJZrZK4QpCayVdIrUyAlSMUsjUPryNqyAc8,2122 +PyQt5/bindings/QtQuickWidgets/QtQuickWidgets.toml,sha256=a7yOETrQkhr7uU6JosT5cb2aPMJIMwgxan2kOBQWCGg,184 +PyQt5/bindings/QtQuickWidgets/QtQuickWidgetsmod.sip,sha256=x9nKoMSf6kfrvWXLdHB6VW6zTi-RMij4dJ-BOCMlabQ,2074 +PyQt5/bindings/QtQuickWidgets/qquickwidget.sip,sha256=WtJiBOTeXki3zM1OATS6OxzLBKLGdAXT2ZGDefyiV3s,3619 +PyQt5/bindings/QtRemoteObjects/QtRemoteObjects.toml,sha256=dkab61g76QQfP5sTPgsN1HSwURpv_sWAgsQMl6JoxDw,185 +PyQt5/bindings/QtRemoteObjects/QtRemoteObjectsmod.sip,sha256=1189yMmIR8ohXjBtGIGBZvywtxttoUpYP8Jn5mDLhrs,2157 +PyQt5/bindings/QtRemoteObjects/qremoteobjectabstractitemmodelreplica.sip,sha256=6U2siqmcmhDwsriHLHf3Nto09IlB4VzMAPMuiLfmSjo,2336 +PyQt5/bindings/QtRemoteObjects/qremoteobjectdynamicreplica.sip,sha256=6LdZoZDCPOhZC1UGTW0nK5XHesDOxCGnE05k0TbKImc,1229 +PyQt5/bindings/QtRemoteObjects/qremoteobjectnode.sip,sha256=zcQ0OfI3mGwZH0xkBFFH-SXM1X5vkV0NhamIPtkztIk,6549 +PyQt5/bindings/QtRemoteObjects/qremoteobjectregistry.sip,sha256=-XztCKauovv9ovGbj9041LTGT5VdqXreLHVY0X5O_ZU,1437 +PyQt5/bindings/QtRemoteObjects/qremoteobjectreplica.sip,sha256=E3uUvnzcror_mRBJDpNYaCZTobdZk4C0Wd8h_sKL4Sk,1720 +PyQt5/bindings/QtRemoteObjects/qtremoteobjectglobal.sip,sha256=9wK3tA_T14JRXX9C4ksq-Mipa1KAiCxvZPoetvZZN-8,2089 +PyQt5/bindings/QtSensors/QtSensors.toml,sha256=gDN64ZP2FcZXaYaxWuQbp4NTRiSTYv1VLfCikyNJclA,179 +PyQt5/bindings/QtSensors/QtSensorsmod.sip,sha256=ZRQKEa-Mgf_uJ9ngfcirVmsLjuvabpLOvw7Dnk4hvSs,2468 +PyQt5/bindings/QtSensors/qaccelerometer.sip,sha256=ITP3TOMeEtEut7P55DmiwS44amh_8bP9MrhCIrg5p4A,2058 +PyQt5/bindings/QtSensors/qaltimeter.sip,sha256=4lOnsP_vqdfJ91bAkvHOfkcpyxDPnWU6Vl0Wyj7FkCA,1643 +PyQt5/bindings/QtSensors/qambientlightsensor.sip,sha256=hoDLFgh7VV2LPv0KeKMaFEJY4711n0GrPB89yiYurf8,1863 +PyQt5/bindings/QtSensors/qambienttemperaturesensor.sip,sha256=9qyPG8ie79NVjWR_lP0Ki1dauPvI0sGx8NLnHTyh8t4,1823 +PyQt5/bindings/QtSensors/qcompass.sip,sha256=lvIQB_iBp9OIvUnfx8_Fjk94V-ThHahtivghmZ9LZIk,1704 +PyQt5/bindings/QtSensors/qdistancesensor.sip,sha256=pfv4Z4sqXsGsng_Vt5UvXjGkPiLn-J5vljxK3I5TQ2k,1684 +PyQt5/bindings/QtSensors/qgyroscope.sip,sha256=ZQp3LLghBCIaLx4GS5erNiZrmUfoxVcZvpkD0XwVnJU,1712 +PyQt5/bindings/QtSensors/qholstersensor.sip,sha256=XRj3x13KEjavX0bYnxNlsCWdYQc6gQ__oepIRCZj3JE,1672 +PyQt5/bindings/QtSensors/qhumiditysensor.sip,sha256=jTgS8jQ1ZUAZESdifmPySVRXFXw6iX1Vu1w0uMtpagE,1722 +PyQt5/bindings/QtSensors/qirproximitysensor.sip,sha256=1rziYkfB-JPJfspSlEPvMNnSwFTGZft0eCaeeetaM1U,1732 +PyQt5/bindings/QtSensors/qlidsensor.sip,sha256=NxWwR4meagYMVDBH7wUGagg1Xkqk6d7itKRZsJdOqwo,1740 +PyQt5/bindings/QtSensors/qlightsensor.sip,sha256=i1433TjuQQPhUUy6aR5bQFC0g-_qwKFxpByTP1-kxyE,1763 +PyQt5/bindings/QtSensors/qmagnetometer.sip,sha256=N15yDwkN0iQJ7QTbfC6v-bo5vcXLyyX7RQOIq2eA_yE,1991 +PyQt5/bindings/QtSensors/qorientationsensor.sip,sha256=XbWiAeAEA0MYtX1JnEEqKjoqyhn8i3wU5jpdlgBGMY8,1939 +PyQt5/bindings/QtSensors/qpressuresensor.sip,sha256=79JJzcyamSzv4M0YsBxjlVw9RCyGHETBALGzsb7MSa8,1803 +PyQt5/bindings/QtSensors/qproximitysensor.sip,sha256=P9fZzYtplty74MGxKFXmTPrLHQkDGgE3GFXMK7geQRA,1686 +PyQt5/bindings/QtSensors/qrotationsensor.sip,sha256=Izj0GEh7Rq1zFoY2Zj8FTRQjSk9yQa2uVlzjHwnRfjk,1826 +PyQt5/bindings/QtSensors/qsensor.sip,sha256=4V34om_eFtBlTxMt6o3icmsiL5AdWxulTSMMUh56PE0,8413 +PyQt5/bindings/QtSensors/qtapsensor.sip,sha256=60vcbDaYtfwAo308rR3XiDXOa4-mnX-OOfz0jHttLL0,2146 +PyQt5/bindings/QtSensors/qtiltsensor.sip,sha256=J2lgFPmN8ys7y-b7ceAOslCtYR9jcqSZXPliBi8FGTA,1710 +PyQt5/bindings/QtSerialPort/QtSerialPort.toml,sha256=2ySSNq8FigWU1h8DpR5nz9eHJj67lcJgrfRUcc6Hnz4,182 +PyQt5/bindings/QtSerialPort/QtSerialPortmod.sip,sha256=Yl7AjZ0X-93nWlr0lYh7BT9Geys75YtPnJ-RJ9RjHfw,1976 +PyQt5/bindings/QtSerialPort/qserialport.sip,sha256=8y0j93_jhaGl9Dc8llLfCva3nxLCyRJs-XXZIc9eRWg,9428 +PyQt5/bindings/QtSerialPort/qserialportinfo.sip,sha256=hfmXR7x3v81dSvls7iRPXwtBNhiUQSoAsOVzGMJYUPE,1841 +PyQt5/bindings/QtSql/QtSql.toml,sha256=-cMPu0C0mln5hq7cw_QNiqmZHF2e7zoh2VRL7yEHHP4,175 +PyQt5/bindings/QtSql/QtSqlmod.sip,sha256=7fdlKHSZ5XZjndlIONQU0M7P-xEcE3JSQQyp_HukMRY,2299 +PyQt5/bindings/QtSql/qsql.sip,sha256=aZbwtlKwKMnu6SuFdTSL6el0oeb13O7gosjvayiWlBw,1623 +PyQt5/bindings/QtSql/qsqldatabase.sip,sha256=_pQCI3t9AvAK0OJRuqlkCxM8NLpTwdGY-cFA6RWdiVM,3866 +PyQt5/bindings/QtSql/qsqldriver.sip,sha256=2T-3vywKpRF46J-WDmR7I4NHNbwtYpr0wFSFbSTbJNA,5015 +PyQt5/bindings/QtSql/qsqlerror.sip,sha256=AOl1JOMhVT-icALA2tREsWJWVjJygPUbdBoHlX9GOqE,2337 +PyQt5/bindings/QtSql/qsqlfield.sip,sha256=OPKKoxtheDPPCjz2G0SBGDXa_VAlBwzUw7sFIEa-ioE,2492 +PyQt5/bindings/QtSql/qsqlindex.sip,sha256=6J4VcHOWJC5M3XdNrxOMVnR46sGNxLlfLdRWDop7Ym0,1504 +PyQt5/bindings/QtSql/qsqlquery.sip,sha256=hCp3vlCPHWQUHzAYvrjqnYUzwg5Q3Q8UvzGueUIEcmc,3170 +PyQt5/bindings/QtSql/qsqlquerymodel.sip,sha256=rd8N4DVzYvUxh1lp43xCr5QvC6icr2UGrTa2WvgqHL8,2972 +PyQt5/bindings/QtSql/qsqlrecord.sip,sha256=D4K9simKBfHMwrfcnGd5PUom9y1ipXbPeOe5k9oCY94,2282 +PyQt5/bindings/QtSql/qsqlrelationaldelegate.sip,sha256=4iy__NLt92wGuwPK2VIQzqdViTnjfX2Q3VFs0w_UwG0,1576 +PyQt5/bindings/QtSql/qsqlrelationaltablemodel.sip,sha256=d8_4E7bsH6o3xNxj8FGv5x6NW4HSEqQ7dVqruURtOro,2648 +PyQt5/bindings/QtSql/qsqlresult.sip,sha256=bEs0TtsL5RrXJQV5f7-VkTUeHTMQI7RqsNwFkm0n74s,3239 +PyQt5/bindings/QtSql/qsqltablemodel.sip,sha256=6Edfbngb-GgXJdIUDzgZvvYt1NO_pqE7T1gEtkuFFgA,3781 +PyQt5/bindings/QtSql/qtsqlglobal.sip,sha256=H5uIzOXWkFKyfY7eB5VQ7z8N3rqp6g8yI1QY0LlKA_I,1637 +PyQt5/bindings/QtSvg/QtSvg.toml,sha256=yGPZHorUWNOF4yc86vSdO8qvkG1bQ00tpqGHh1wSru0,175 +PyQt5/bindings/QtSvg/QtSvgmod.sip,sha256=tToS88ACjXh0Pj6lr9I025OLqgIqegA1mYNmuEIiNb4,2070 +PyQt5/bindings/QtSvg/qgraphicssvgitem.sip,sha256=umbhA4c9uDHTrhrCwrF_kO2wsZxwBBKgtzvPCB7MndI,1996 +PyQt5/bindings/QtSvg/qsvggenerator.sip,sha256=1dgeunG3GkL_Ea4xTqRuVYKsqcOxkUTWzbfQx0wd65Y,1826 +PyQt5/bindings/QtSvg/qsvgrenderer.sip,sha256=GnAHg3Mc-ekK2Euc6oWfC3UGvs30IVYUzIpIlfOlktA,3247 +PyQt5/bindings/QtSvg/qsvgwidget.sip,sha256=CrIACS2H4frx9Gjo5_p7WhV7C_iDEOMJX7OrHSmMc7o,1420 +PyQt5/bindings/QtTest/QtTest.toml,sha256=WBPCe3KL0ZYfyGcCLPhP01i2JDVLAPDMcG9tmmz6umU,176 +PyQt5/bindings/QtTest/QtTestmod.sip,sha256=fUJOCklFO3-FnWt48pKv_gn7I1eOV7Ns1woYep_SBp8,2124 +PyQt5/bindings/QtTest/qabstractitemmodeltester.sip,sha256=je8BqcU7VNkTXb3DHHWeViQ9E3TV3Ykaht4SmcjrDjc,1661 +PyQt5/bindings/QtTest/qsignalspy.sip,sha256=gixq6Dn596g5JvLfSo5KqRgPnprMedOMaEzTZWxllzY,3336 +PyQt5/bindings/QtTest/qtestcase.sip,sha256=Ov1NOBEZOSHwuW3uRNE1EKfud3HpQQbUnjF__LXKUpA,1052 +PyQt5/bindings/QtTest/qtestkeyboard.sip,sha256=A8EO_v00V62TR4ohrOe2rxhO-U58jYYFkBkCcVzPiQ8,3371 +PyQt5/bindings/QtTest/qtestmouse.sip,sha256=2oXbhxneIg9DYqR6PSZDpPNZk4QhsHHd0rlAi9cnZMg,2446 +PyQt5/bindings/QtTest/qtestsystem.sip,sha256=BAs8-uCFosEoOz34M3vr3BCvxT-YPyf1oPiuYloi0to,1381 +PyQt5/bindings/QtTest/qtesttouch.sip,sha256=a1Uj10bOK8OEy2birPTc1VyRzaSpo4DbCwtfUDpaOVo,2787 +PyQt5/bindings/QtTextToSpeech/QtTextToSpeech.toml,sha256=9fBBo0yaWyoebjcC6n7RNalf_LEKOCqSjedycHHQkzQ,184 +PyQt5/bindings/QtTextToSpeech/QtTextToSpeechmod.sip,sha256=fpZk0_m4o93mTTCnBFSnOgWN2TUMXS0h2pPuC3GaGDI,1975 +PyQt5/bindings/QtTextToSpeech/qtexttospeech.sip,sha256=LNPo1U5BuTJf_lJp2f4aALIbUpTxMYy1peqF8_NrC3s,2770 +PyQt5/bindings/QtTextToSpeech/qvoice.sip,sha256=6KhNsCgs9txh0meTZnze1lRxduynaTqQxp1tO88gaC0,1564 +PyQt5/bindings/QtWebChannel/QtWebChannel.toml,sha256=nj5ZJhz0bC2Qz7Xcd3xPU8L7y3F25PTEY_wcGOCclro,182 +PyQt5/bindings/QtWebChannel/QtWebChannelmod.sip,sha256=lbuhhWQ2_ivV0WmE3wmCCMS1UbzpFBZj9xKA6gEU7Hs,1989 +PyQt5/bindings/QtWebChannel/qwebchannel.sip,sha256=LJ0KANBs_hik1fEJhDXs_1yf1fqXoO-jw9u9Oss0HUY,2334 +PyQt5/bindings/QtWebChannel/qwebchannelabstracttransport.sip,sha256=uUgSZBoBkjHbc88pYOwXk4xuGJOzRBsR4ptckBaZmeY,1432 +PyQt5/bindings/QtWebSockets/QtWebSockets.toml,sha256=5F8u89hna1xSrShppySEp-nNKtoy4zfZH1AoOoThqRA,182 +PyQt5/bindings/QtWebSockets/QtWebSocketsmod.sip,sha256=wOmunOav3dzOnykYuAXj3xibImzeOLu0JoQpwTD2bGo,2112 +PyQt5/bindings/QtWebSockets/qmaskgenerator.sip,sha256=EBY0Vu6BRSGzOkNdwtMxrWVi0e_p40GJ8xatlPu1mdk,1245 +PyQt5/bindings/QtWebSockets/qwebsocket.sip,sha256=bhHHfTibv3VG5ASef669dQVrv4xFuRvCZ80RUuHXPIA,5437 +PyQt5/bindings/QtWebSockets/qwebsocketcorsauthenticator.sip,sha256=8-spU5mX9dJMqEJXPqVD7aYbGM9_l_C_9qO4nNImKfE,1445 +PyQt5/bindings/QtWebSockets/qwebsocketprotocol.sip,sha256=JZo2_B1iouVPyEMsR0T2-2Ns5a0AfYecCyZ6s9EM2j0,1741 +PyQt5/bindings/QtWebSockets/qwebsocketserver.sip,sha256=j28YuEoeGi1Lp9KvPNuZRqqgfpMlanFnaDG7g_hlcW0,3354 +PyQt5/bindings/QtWidgets/QtWidgets.toml,sha256=4Ut-w3PINFobHAlQO1BscFbDc66bbuIhMC1cr5zNmUU,179 +PyQt5/bindings/QtWidgets/QtWidgetsmod.sip,sha256=-23U4VIpwiM7hOzZkAjER6t2B-TssowazFERIGnnBxM,5207 +PyQt5/bindings/QtWidgets/qabstractbutton.sip,sha256=4HG05Nq6om23xmFX9ncRdeK3-WixV_PnXzKD_gtmn5I,2754 +PyQt5/bindings/QtWidgets/qabstractitemdelegate.sip,sha256=wgBHc_v5AoebDrHVuRZFhDMb_L4xVCMXz92PlqyZBOo,2628 +PyQt5/bindings/QtWidgets/qabstractitemview.sip,sha256=B0xpGcj0j1encw9j7cE_0XvQMCbW4w2YtiFIzU4JDqo,10583 +PyQt5/bindings/QtWidgets/qabstractscrollarea.sip,sha256=qXbmPXzzZGAV-XaLvjDATOri88Xf8SjwsSXpLJUsbY4,3576 +PyQt5/bindings/QtWidgets/qabstractslider.sip,sha256=r_LTtrB3SDQyDvizzZ31lIDpppjw5Rw1DszMjQDRRko,3016 +PyQt5/bindings/QtWidgets/qabstractspinbox.sip,sha256=JHDKPtGMmNY9TVXZ69xPjMZyG348BwmabLtmxPgY7P4,4210 +PyQt5/bindings/QtWidgets/qaction.sip,sha256=66MRA6nzTbbJ_OEXfe1ikBNLRiiGMEo6CNX7uyCoN4E,4313 +PyQt5/bindings/QtWidgets/qactiongroup.sip,sha256=a9N8Ahlq-Xbk0TJUnD2t_hzgMSJiCivbuzEgo9iO1mQ,2115 +PyQt5/bindings/QtWidgets/qapplication.sip,sha256=BujnnWX9xTXuEK20jd_yaLz_p4Rhp8iwtGFXq-RFr4Q,15938 +PyQt5/bindings/QtWidgets/qboxlayout.sip,sha256=tzCgEaABTkOlCM4zJ2yndwhF_yrYsVGoMRtO4I2s4QE,4800 +PyQt5/bindings/QtWidgets/qbuttongroup.sip,sha256=vq2-nUJaTDsumEjDBOTZ0JsFhEwFZgoQQMQ6QpUlJm0,2101 +PyQt5/bindings/QtWidgets/qcalendarwidget.sip,sha256=O3W5-vIZAr9mratpMI9ABd71i_OYQX-0tD23YiiDKWM,4172 +PyQt5/bindings/QtWidgets/qcheckbox.sip,sha256=gv5cg67de-L4wTKH5EGKDMzv0aEXQVBqxPuxQBnluQ0,1798 +PyQt5/bindings/QtWidgets/qcolordialog.sip,sha256=VrWTW-mfIe_QHX0__4H4iiNDWz-NiiPLzCdUJZ8ghKY,3103 +PyQt5/bindings/QtWidgets/qcolumnview.sip,sha256=3FckBn9RVHLWvdbeByiBQTkWEcOZSG-buUzOq0wBtdE,2879 +PyQt5/bindings/QtWidgets/qcombobox.sip,sha256=WKWyDYf0gE4dQN4zobpOs6mJ5x6Rg8oUkLE3VwcMu7U,6252 +PyQt5/bindings/QtWidgets/qcommandlinkbutton.sip,sha256=gdA0EauTT3-gFs_ZK0U-zbCqwDl_2oH62Lmtf9mG0ig,1666 +PyQt5/bindings/QtWidgets/qcommonstyle.sip,sha256=s-2Cm8zEfvszaOqLGWy372goCMzhHj_i6I-JVH8jEA4,3148 +PyQt5/bindings/QtWidgets/qcompleter.sip,sha256=r7JplZu8JIuoLXNcRnAgmsJnWTYRoLd_pRcNpJ0ZU1A,3366 +PyQt5/bindings/QtWidgets/qdatawidgetmapper.sip,sha256=DHtKf2QT_mxWyhbX8emheRUuxu9MMc9hHaXjTXT2HII,2444 +PyQt5/bindings/QtWidgets/qdatetimeedit.sip,sha256=iShQdotMyza8BsrqZLV8vq9zZs_q6aCWMtDVU39Wvm8,5305 +PyQt5/bindings/QtWidgets/qdesktopwidget.sip,sha256=tTFVdTYbZJHUfDdxyTEu8WX2ZK5PNKgMSjqkW59RvYc,1913 +PyQt5/bindings/QtWidgets/qdial.sip,sha256=cTcBlfmQjrLGDnVEf6uRDkv-goo1pHBGuE2bE9LVFTI,1865 +PyQt5/bindings/QtWidgets/qdialog.sip,sha256=-KVKSir8p0qxaHpwouZShLuJEsgo4r72sBlSwL28hSU,3393 +PyQt5/bindings/QtWidgets/qdialogbuttonbox.sip,sha256=hG5YPGWGSea5EMR-zd6dF0qmANJdn0j84Rk9S5MAfe8,3765 +PyQt5/bindings/QtWidgets/qdirmodel.sip,sha256=Mjh0kLcxnn2ZLVC8hMlBjkICPN2y6yeSC6KUYis5ehQ,3662 +PyQt5/bindings/QtWidgets/qdockwidget.sip,sha256=r2Jpr02_p1u3X3FTajZvZDyAs4ck1Do2eUQWXMPW8Zs,2809 +PyQt5/bindings/QtWidgets/qdrawutil.sip,sha256=nWdFIh3gdvedWMSUFpnletmJy4BQjnwjROsuTEfiq4E,2730 +PyQt5/bindings/QtWidgets/qerrormessage.sip,sha256=8o16MIJOrCm2EwgbHIjXQlJbZ1c6zvcYamDGti7CffA,1396 +PyQt5/bindings/QtWidgets/qfiledialog.sip,sha256=9_fszCelRTi6UT0zfW4E68jtdnx0nomwmKmFQUZM0ao,12614 +PyQt5/bindings/QtWidgets/qfileiconprovider.sip,sha256=ZPrsq8X6dT9WYIsxqMB7p5WLk1RgRDzfdfLHnT9PNY8,1940 +PyQt5/bindings/QtWidgets/qfilesystemmodel.sip,sha256=k7H22qP5ycQMB8fOeIuhch6jSCaR7q53TO0GY69PAk8,5096 +PyQt5/bindings/QtWidgets/qfocusframe.sip,sha256=amRM7QA3pO9d3innJVN8YaKxP2I5CnZYcwTQ7ChNjmA,1391 +PyQt5/bindings/QtWidgets/qfontcombobox.sip,sha256=1-GX3YCLezdU7lNtKfOUbLMhxtwwO1aAbdi1zw1GJLk,1927 +PyQt5/bindings/QtWidgets/qfontdialog.sip,sha256=b_2AnmSUoUjeBhQVq1gxYwZ4hxW6b2fgltpQqUfj5Lk,3121 +PyQt5/bindings/QtWidgets/qformlayout.sip,sha256=KVN3WUSptHYrcSKRI2i9ztXzE1opyg_sEKVRJtfIf4A,4722 +PyQt5/bindings/QtWidgets/qframe.sip,sha256=jA7_RKIfx-MlE-I0GQfgOm1FiNIeBLybE2yRIg29_rA,2147 +PyQt5/bindings/QtWidgets/qgesture.sip,sha256=JNVg6cNMeXSrbOFfiYDlk9Pn6YBSz83dBTttJ789sUA,5372 +PyQt5/bindings/QtWidgets/qgesturerecognizer.sip,sha256=siBBk7DUHRvzIgqbHNXFvEqKjlqlg1eGuARtOluHgWM,1857 +PyQt5/bindings/QtWidgets/qgraphicsanchorlayout.sip,sha256=bIy-4qst6jLy2TZFJSTeDVBZeGrMAEwtqbuITvqWXe0,2754 +PyQt5/bindings/QtWidgets/qgraphicseffect.sip,sha256=ppTSK1mp0mob3s_UKnTzEUp18KFyT6SdlPu-1xKfPSc,5264 +PyQt5/bindings/QtWidgets/qgraphicsgridlayout.sip,sha256=1HfpHVQvky8P3_LvVT1jPAkG6b8vnvh4aKY2lHKTj5g,4214 +PyQt5/bindings/QtWidgets/qgraphicsitem.sip,sha256=fqBTKt4gGxiunnhFtq1aY709PbqWcEy15Iewtnb-G9Y,27047 +PyQt5/bindings/QtWidgets/qgraphicslayout.sip,sha256=pHyk0MG9f37Fa750_RZsM1LWxAQ-azTsknMBX3v7b-A,1737 +PyQt5/bindings/QtWidgets/qgraphicslayoutitem.sip,sha256=cYJSvCUnTVUjJCf7Fw499gBKUOMBOO27D0x4ztqnlAk,3088 +PyQt5/bindings/QtWidgets/qgraphicslinearlayout.sip,sha256=Z-jzpSaRQXh45OCR95UhrogAde0Eeys-0ppsKnlHNOs,3157 +PyQt5/bindings/QtWidgets/qgraphicsproxywidget.sip,sha256=tG4jrLr-LxiqHBqI86QVXDnmSmI9CnpsL9r0SD79DpI,3927 +PyQt5/bindings/QtWidgets/qgraphicsscene.sip,sha256=G1pr3R6H_h9H2de99Og7pyozd8e8-0JRHjZTj_EE-18,9136 +PyQt5/bindings/QtWidgets/qgraphicssceneevent.sip,sha256=4Q2GbG9sW3yifyDwAvd0u_M34XtK_d0V7ZDZFKXjna0,6667 +PyQt5/bindings/QtWidgets/qgraphicstransform.sip,sha256=a0xNfFpolQFc2tyJrxPR2SWKJqViLFHNNJwI-lwCLZ4,2462 +PyQt5/bindings/QtWidgets/qgraphicsview.sip,sha256=S3_pe9F33Ap8rkipT4R6lv6MPfpH_RZtSkAmIHHfOFI,8423 +PyQt5/bindings/QtWidgets/qgraphicswidget.sip,sha256=RdBOeFGBxs-H3a1XyLV_azinJ_NEjEY77NBPzcUOxuM,5505 +PyQt5/bindings/QtWidgets/qgridlayout.sip,sha256=8eAjy9lUR7vv2T-bwyDiX8d3BBhg3rjOXoq3JsFHTyo,5543 +PyQt5/bindings/QtWidgets/qgroupbox.sip,sha256=ZS-FA9mHN8s81Sn33-DjipRM26gmD6yEP-e9Tk71bbc,2121 +PyQt5/bindings/QtWidgets/qheaderview.sip,sha256=pzOGrOYZJU8dOiOcc-WowhcXOv-zHuS3X_SLMczDZ8M,7030 +PyQt5/bindings/QtWidgets/qinputdialog.sip,sha256=q5JUYvPw30ZBaZFF2q1cNr0HiwyRonOCD3V5E1yuFxw,5790 +PyQt5/bindings/QtWidgets/qitemdelegate.sip,sha256=4M7OkqaobbDVuuuxtzjID_WuMNZ6mS5xlOi1RVAzQHo,2938 +PyQt5/bindings/QtWidgets/qitemeditorfactory.sip,sha256=nNsYC-2tgVKXuOnPOmJ9zWRe8o6RFm7rJdFlnyo7Rqs,1800 +PyQt5/bindings/QtWidgets/qkeyeventtransition.sip,sha256=LVOfvXGRhS7L2Yb4ObsA1Us5csmzN_r7e5SXPcxlMpY,1566 +PyQt5/bindings/QtWidgets/qkeysequenceedit.sip,sha256=LOzywt4duTTvqn8_LjJOYhN0obyM0w4NyCYbFlIDQWk,1689 +PyQt5/bindings/QtWidgets/qlabel.sip,sha256=jTf4nUa1gi36LCPSBzOEx3Ao6_JZIPbWRQZFShNlCBE,3192 +PyQt5/bindings/QtWidgets/qlayout.sip,sha256=cd1i_BdFj10W8xZ_Ih_G9WL_6aKxApoodvjeXixqARQ,5881 +PyQt5/bindings/QtWidgets/qlayoutitem.sip,sha256=TRojGXtaj-BRxzIUBrOp9ZxdsNa2crL12MNDiwoI7_k,3669 +PyQt5/bindings/QtWidgets/qlcdnumber.sip,sha256=3GAmTnCnW5t7uGz0eefK6UhkFo3yngGdCxhlSwpwE9A,2385 +PyQt5/bindings/QtWidgets/qlineedit.sip,sha256=73Lkts0z5vpj39_VwqOaJ7W8rpca80wOyclToq_gj6o,5438 +PyQt5/bindings/QtWidgets/qlistview.sip,sha256=_4lHA5sj_RMZrZM1PXwEvC60qe3v8cIOp5Me_-qTkA8,5043 +PyQt5/bindings/QtWidgets/qlistwidget.sip,sha256=W7kRR6AtwPYXS2jgpkc66cgFfbteyphmnwkCj40zloI,7267 +PyQt5/bindings/QtWidgets/qmaccocoaviewcontainer.sip,sha256=QX9VkfZplcQ2xkdEYb1wVouaTMWRu7G1-KNU3P_qVDo,1425 +PyQt5/bindings/QtWidgets/qmainwindow.sip,sha256=so0f730kZIUzl9uOanh2LFh9aDXVb8di0aUle0Daj98,4916 +PyQt5/bindings/QtWidgets/qmdiarea.sip,sha256=g2RS0WRGXPYUq_i_AsgRHJBK8jBmG8AnsqJGwmCob8o,4264 +PyQt5/bindings/QtWidgets/qmdisubwindow.sip,sha256=aPMbzeKSXrpTXow11Oe-cMHQRdyReEM5vicyqM3D5Ig,4174 +PyQt5/bindings/QtWidgets/qmenu.sip,sha256=c2wOo3sFgi37ct47ryTDJu4Zp7Pc_1r1JX9wgZiCLdE,6070 +PyQt5/bindings/QtWidgets/qmenubar.sip,sha256=R2AByuGWiTTQ8M19_hHwQZ9_GNt7UXLRtqCErzyM6lM,3540 +PyQt5/bindings/QtWidgets/qmessagebox.sip,sha256=QUb3mo3zMtQVDUkBRDEC_rTaBLU0oo7muBFr39WC95M,6503 +PyQt5/bindings/QtWidgets/qmouseeventtransition.sip,sha256=wwE22P5kBUayLILZ617Nds9BnfILIqUJTmlTC-lLlDM,1715 +PyQt5/bindings/QtWidgets/qopenglwidget.sip,sha256=bQXZULUYhZQqcWq6rjoU2zTUEOzgVUL-ROvotdFyUH4,2385 +PyQt5/bindings/QtWidgets/qplaintextedit.sip,sha256=jU8b0TgeGGe5tu4Tq3IpseZ76r0iIxUT74qWFz7nHqc,7758 +PyQt5/bindings/QtWidgets/qprogressbar.sip,sha256=5I0vHiefJv71FCn1hzMfAEY6kO3cfyHvwhYxLiZqvNY,2247 +PyQt5/bindings/QtWidgets/qprogressdialog.sip,sha256=xa8OhcXLhVT5fvIdEOIDcs0MlloGVFR8kA0lDFKsnqw,2910 +PyQt5/bindings/QtWidgets/qproxystyle.sip,sha256=EYF1f-RBnrLh9CoRcIcJV27io5ndG2ut6UYjgGetTRw,3954 +PyQt5/bindings/QtWidgets/qpushbutton.sip,sha256=NPcPfvIkw1391a6bRlLyyuVlFOmUj-H2uWmQZjT5ASs,2166 +PyQt5/bindings/QtWidgets/qpywidgets_qlist.sip,sha256=UmGy8Apd1LCxdLmBrCdyyPBBsWYGD80EsgygN51L0SQ,2970 +PyQt5/bindings/QtWidgets/qradiobutton.sip,sha256=P2AUfc7mGdKrqYaOTATEA604Roi2QIcsrWPGlMZ3KzQ,1554 +PyQt5/bindings/QtWidgets/qrubberband.sip,sha256=Oet4nV5BBiqebAlS3iF7JB76Q1aytOzpFqWO_HK0t-Y,1793 +PyQt5/bindings/QtWidgets/qscrollarea.sip,sha256=VmIjajvvJ2O0mnaFbLhE7Kpn7MTv57tr5zyRMw1JDcU,1924 +PyQt5/bindings/QtWidgets/qscrollbar.sip,sha256=zggaazTQGgF3JaQAHhOKFj-VTviVQYw4SV5YwWKP6YQ,1772 +PyQt5/bindings/QtWidgets/qscroller.sip,sha256=WLB4jA46_pmOU4lOtj8kO8OWwUGidOzeJKicxuOJko4,2937 +PyQt5/bindings/QtWidgets/qscrollerproperties.sip,sha256=T69bsJheldwxAD6PTuhPqJkAHV3_yvxOMvyS6NNiJDo,2485 +PyQt5/bindings/QtWidgets/qshortcut.sip,sha256=gRTn90ZM1UZ8tC7RwWL2xm5Alk6JFioC8hLtOLLFGW4,3538 +PyQt5/bindings/QtWidgets/qsizegrip.sip,sha256=pifuCKJXjiUFJg2FRq-ILAyfErV7CKm79MYeMaEu0sE,1647 +PyQt5/bindings/QtWidgets/qsizepolicy.sip,sha256=N2QMwywqbidDeiEdNVSiv2AfifPxO54k4ErJ_81l25g,3445 +PyQt5/bindings/QtWidgets/qslider.sip,sha256=01u3WiMYDdBeDU4yyfIE6LaFLIk07_5RS33QbsDTIRI,1920 +PyQt5/bindings/QtWidgets/qspinbox.sip,sha256=eGbG2A7bp4QRvrbz_ps7b2DKeM7xXoWr_W-_CWRDcMY,3577 +PyQt5/bindings/QtWidgets/qsplashscreen.sip,sha256=Ul8K_duJHaIp_vnl1RSXvykVcQ8O-q-VkzU5pv1w9HI,1979 +PyQt5/bindings/QtWidgets/qsplitter.sip,sha256=_e3WA8hIv8YXOQ5CoRIzLh_KUKF56KRmxgHiujN8EdM,3465 +PyQt5/bindings/QtWidgets/qstackedlayout.sip,sha256=Jfd7TsdfDfnraeQK83TQ3ZXMOOQHBiBq0s6Q0yJGKTk,3689 +PyQt5/bindings/QtWidgets/qstackedwidget.sip,sha256=vlPF3PgClpNHRf88Xcn4w0My-enNHcLf_3eRBVDNS2k,1663 +PyQt5/bindings/QtWidgets/qstatusbar.sip,sha256=k0aj2W5T1Oaivt-7qo2k373CQIvtW9S6InFyRvusb-4,1963 +PyQt5/bindings/QtWidgets/qstyle.sip,sha256=RFoeQLuHGR5Cff7UrM3BidkBw9GcAA4krMFtruUWOsQ,23427 +PyQt5/bindings/QtWidgets/qstyleditemdelegate.sip,sha256=BMbNcCliXziNfuHIoG_nDuaIOmegvVorl-u8xtV68gU,2433 +PyQt5/bindings/QtWidgets/qstylefactory.sip,sha256=LTJW1f0gtgizLDCs6M_hhXzHNaWlTjSiQRGDfIsV0vg,1122 +PyQt5/bindings/QtWidgets/qstyleoption.sip,sha256=6HjdxQkc74SKlPSViaTsWL-lG81AC7gVmrlHU0l80Uk,20966 +PyQt5/bindings/QtWidgets/qstylepainter.sip,sha256=xaJ4VYVR_KZbXOuA7eJZ810bqrMKrVPHlyL1Nl8kI6w,1739 +PyQt5/bindings/QtWidgets/qsystemtrayicon.sip,sha256=_-4mZ56p7rYoDmEdpLogSPeEctHGVrGo_uzF5UFVdpA,2346 +PyQt5/bindings/QtWidgets/qtabbar.sip,sha256=mB2mTMv2CzibchPa3X0QYhfxMtGRW2PWIUT_lLtC2Rk,5439 +PyQt5/bindings/QtWidgets/qtableview.sip,sha256=C2rEnKaBpcWV0joR0kklyIKolFa9E2xJiGbQ_KpqJhY,4847 +PyQt5/bindings/QtWidgets/qtablewidget.sip,sha256=piC3s6PCIF63s-A_TsG7fxEscsxoiqfxB4oYvO3a-EY,9066 +PyQt5/bindings/QtWidgets/qtabwidget.sip,sha256=xpgeRlnpwuXljLZ5JLiZpyojvLv6sP19c4-AbCXVox8,4367 +PyQt5/bindings/QtWidgets/qtextbrowser.sip,sha256=cV1bAnafFOiJg_kr95UfC2vFgsbs7_MSlwklQcYIY6I,2875 +PyQt5/bindings/QtWidgets/qtextedit.sip,sha256=Vam2xogmX526a_eOIlk_hJU34yAT7_TbgMJVgDxAJIQ,7980 +PyQt5/bindings/QtWidgets/qtoolbar.sip,sha256=w1yKxDeOPzdkZxMX0a6E2EkGX6CredF3Tn7zyMHg6dQ,4238 +PyQt5/bindings/QtWidgets/qtoolbox.sip,sha256=c32AgWTXLyZlUFwg0hTdXP76VabtqR14Z7KxxcJZ1hI,2422 +PyQt5/bindings/QtWidgets/qtoolbutton.sip,sha256=EsHKxi4C2OLTcRe1-4_TCx483KngsDVEZ7pJI5314gs,2494 +PyQt5/bindings/QtWidgets/qtooltip.sip,sha256=1My_D5YIk3xHfSfA2hxt29VvG8Ju-r5IvK5jaC6qCe4,1586 +PyQt5/bindings/QtWidgets/qtreeview.sip,sha256=-sFaIO456I1nIW8qDpj5X4NFNDdjL5iC0V6jt3p8CSM,6551 +PyQt5/bindings/QtWidgets/qtreewidget.sip,sha256=il_nZYVOkIY5GjK51iR5bB1Px3ULxr5Rr-9Ki53aH7s,10251 +PyQt5/bindings/QtWidgets/qtreewidgetitemiterator.sip,sha256=Qzk40j06NXzNOdzYW5PUAkniKCSoW6XMvJSQ0cgwCuM,2293 +PyQt5/bindings/QtWidgets/qundogroup.sip,sha256=txaiuF8NlhBadFAyBLiNx41H880xhKEQqYj7JkzIeu0,2053 +PyQt5/bindings/QtWidgets/qundostack.sip,sha256=V-ZsGPVIClUrNviaULgeG5wNyIVulbABdznX_Niy33U,3075 +PyQt5/bindings/QtWidgets/qundoview.sip,sha256=9ke0gKMjjkhwvCZr3xdAWu80zSBqPuOCrSuimvkZzLU,1604 +PyQt5/bindings/QtWidgets/qwhatsthis.sip,sha256=Jz2jo5c2bQq7gE4ZlHqHyACE7u5MXefCHCCcJODX1Lg,1353 +PyQt5/bindings/QtWidgets/qwidget.sip,sha256=Ne9QA5ISME5w48WWmvanbq8CXpEHtA-oEWx3xeeHMXk,15425 +PyQt5/bindings/QtWidgets/qwidgetaction.sip,sha256=3UUduF8fn9cdTFiFXYLlkiG-TLqFsb7mF3HXuoJiogg,1558 +PyQt5/bindings/QtWidgets/qwizard.sip,sha256=UtYzGksGsfjD0duDJfV23yLYE564tM0pi0C3few4ci0,7756 +PyQt5/bindings/QtX11Extras/QtX11Extras.toml,sha256=bbkHvuykvYrpR2T35tKRAEVKsGGNi6Sr2qwNUKev6Mw,181 +PyQt5/bindings/QtX11Extras/QtX11Extrasmod.sip,sha256=zc7eIpKJgt_yBzUifzv-fvBESPQYhTbh_QyKg42uRJY,1913 +PyQt5/bindings/QtX11Extras/qx11info_x11.sip,sha256=ezw73Ep8Hq5R5pQ6TTYNEgstP5owA3z8EKqGPLGWC_I,1727 +PyQt5/bindings/QtXml/QtXml.toml,sha256=gY33YFR9YbQzqKYWWQFrHA05LWyx0Vo3yaGhAB2GDTE,175 +PyQt5/bindings/QtXml/QtXmlmod.sip,sha256=ujSOeqvWZJ5FG2v06BQx3CJd3cGBT_-ZoxCgUPNh0oo,1937 +PyQt5/bindings/QtXml/qdom.sip,sha256=xrvvmvg9_XxLuL3bs35XFHUiHfddntFTjVD53f4DC3s,14505 +PyQt5/bindings/QtXml/qxml.sip,sha256=kknm6yCb0WWRdGUVmQDYnhRrAgm1z_hYMWxsMUrJufY,12176 +PyQt5/bindings/QtXmlPatterns/QtXmlPatterns.toml,sha256=sS85tqs2SXQZyKnJSsZPYRwsC6Ii_9KZ44KxSTPjOiA,183 +PyQt5/bindings/QtXmlPatterns/QtXmlPatternsmod.sip,sha256=bhKFlmdQ2qtXA3XmwKaC8ppL1_SzQDBKeM14xNe9g3I,2374 +PyQt5/bindings/QtXmlPatterns/qabstractmessagehandler.sip,sha256=M7IpkWCbf-6etuuZCBYzkZCKINEgZ7JaeZUI1Zy08dE,2138 +PyQt5/bindings/QtXmlPatterns/qabstracturiresolver.sip,sha256=n2KDdfopaoiTpGZl4kP4sIpKvZzlBRHtnZ0OkAfA1sM,1257 +PyQt5/bindings/QtXmlPatterns/qabstractxmlnodemodel.sip,sha256=lWoxmDH-n7ZJ3LW4ur1fiVsvnvnAB_FVr7cIAhZVekQ,4222 +PyQt5/bindings/QtXmlPatterns/qabstractxmlreceiver.sip,sha256=MowHiJWtnngwUJnqsBl2-RRhQMniWhmRbnuKVuMsyH0,1834 +PyQt5/bindings/QtXmlPatterns/qsimplexmlnodemodel.sip,sha256=-JWGt5CPPtFGQkCb-FbP4DNOuaei7Lh7t6kNPqUKhNM,1588 +PyQt5/bindings/QtXmlPatterns/qsourcelocation.sip,sha256=ZN-tQ0qS4uU1WMvaQRZSetxiLBUSOk0SiiB0BBWMSPs,1612 +PyQt5/bindings/QtXmlPatterns/qxmlformatter.sip,sha256=oSuOHcXsLazlCWRf6-KDlfOi0fnGFddaH0BSHmllZQg,1742 +PyQt5/bindings/QtXmlPatterns/qxmlname.sip,sha256=c0CjXkkk6fgXI7GVMzya_I_V8klPf61ng_f3ELSKnHY,1812 +PyQt5/bindings/QtXmlPatterns/qxmlnamepool.sip,sha256=KXzCkbNoDvkvkNVfKdBMD0kfK3pqNKg3QVclVWAJFwM,1124 +PyQt5/bindings/QtXmlPatterns/qxmlquery.sip,sha256=3p8F-r4etNa_wPpxU-_thqJQ6n58Kj2mE1e_JtsRZ7A,4377 +PyQt5/bindings/QtXmlPatterns/qxmlresultitems.sip,sha256=EBsV92kYV_P1rMCqZXKvuAxqQDIoeVhXVr1nYiRQuns,1236 +PyQt5/bindings/QtXmlPatterns/qxmlschema.sip,sha256=4o86WwmmMk11HoGqm2wy9HrJwm-jhFAoGFmtXCk7ws4,1878 +PyQt5/bindings/QtXmlPatterns/qxmlschemavalidator.sip,sha256=yeYwp4oVPWWa0INWUQAnDcTtCpZSEkugvZIQRwiVEWM,2426 +PyQt5/bindings/QtXmlPatterns/qxmlserializer.sip,sha256=lV8FcsB6EvByq7RnNfGwRfGxiYJ7XQly0nRPzjTsCyI,1866 +PyQt5/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +PyQt5/pylupdate.abi3.so,sha256=3zx1NINZkSEUTx0knn2ILEe7PQ2QACnCou6fHf250EY,314264 +PyQt5/pylupdate_main.py,sha256=XJO2VPITDltVzpuxkhSPNyHSVRrcbSj1sdbmUAqx24Y,7373 +PyQt5/pyrcc.abi3.so,sha256=eQpL7CGU7yjXjT_Y743XzhkzYk2feA8rBwvDqh6BirQ,67712 +PyQt5/pyrcc_main.py,sha256=z1GKO35vAFGbHmc7T7SHKYmheGFkrNKnNrgT4f8rDC8,5368 +PyQt5/sip.pyi,sha256=-wjVT4cTC9nrorQqmTIt8baH19vPW9ZgrIpuD6tEa7c,2959 +PyQt5/uic/Compiler/__init__.py,sha256=k1IRWMHuxLvxHVScWEhy3tcPMBV57jYIJ9H2mMpg-eA,1004 +PyQt5/uic/Compiler/__pycache__/__init__.cpython-312.pyc,, +PyQt5/uic/Compiler/__pycache__/compiler.cpython-312.pyc,, +PyQt5/uic/Compiler/__pycache__/indenter.cpython-312.pyc,, +PyQt5/uic/Compiler/__pycache__/misc.cpython-312.pyc,, +PyQt5/uic/Compiler/__pycache__/proxy_metaclass.cpython-312.pyc,, +PyQt5/uic/Compiler/__pycache__/qobjectcreator.cpython-312.pyc,, +PyQt5/uic/Compiler/__pycache__/qtproxies.cpython-312.pyc,, +PyQt5/uic/Compiler/compiler.py,sha256=TudXMmMzadRyBHcWermayd1RfiqZy0WdsMjsOtl4TFo,4645 +PyQt5/uic/Compiler/indenter.py,sha256=Aw-tyaElLlvT5O8Vg6cN7LvihFG3Vwf8gN4sKfR5Yg4,2742 +PyQt5/uic/Compiler/misc.py,sha256=xW2GBcyDPtI8HqvXgJAsU0pJB6Txk5yP6GeQ-VVDsjw,2374 +PyQt5/uic/Compiler/proxy_metaclass.py,sha256=3StGzZQK9xegMZZb5EWslNkrTpj3rebhyYqW_PT4EKE,4324 +PyQt5/uic/Compiler/qobjectcreator.py,sha256=Dg-fWY7r0uEuGXMLcrr-LsWAyW9V-Wn8ilFftesJH7k,5903 +PyQt5/uic/Compiler/qtproxies.py,sha256=CTg51jL1gaPoWDMMJ_udFBVTDzLLIZQ8qafdFnK5GLc,16315 +PyQt5/uic/Loader/__init__.py,sha256=k1IRWMHuxLvxHVScWEhy3tcPMBV57jYIJ9H2mMpg-eA,1004 +PyQt5/uic/Loader/__pycache__/__init__.cpython-312.pyc,, +PyQt5/uic/Loader/__pycache__/loader.cpython-312.pyc,, +PyQt5/uic/Loader/__pycache__/qobjectcreator.cpython-312.pyc,, +PyQt5/uic/Loader/loader.py,sha256=eIGIjimTp6A-UCuP23qT3BaQeQcWxBwqOkVNrwl1KU0,2858 +PyQt5/uic/Loader/qobjectcreator.py,sha256=BNsVluYHxofS_65Ezt_mVGaT0KSNHN8YiKzDjAUvzbE,5022 +PyQt5/uic/__init__.py,sha256=nmrfXoIkkagAqd6WSRYwD-zqeL1Ie65th-P62H9AYhk,9606 +PyQt5/uic/__pycache__/__init__.cpython-312.pyc,, +PyQt5/uic/__pycache__/driver.cpython-312.pyc,, +PyQt5/uic/__pycache__/exceptions.cpython-312.pyc,, +PyQt5/uic/__pycache__/icon_cache.cpython-312.pyc,, +PyQt5/uic/__pycache__/objcreator.cpython-312.pyc,, +PyQt5/uic/__pycache__/properties.cpython-312.pyc,, +PyQt5/uic/__pycache__/pyuic.cpython-312.pyc,, +PyQt5/uic/__pycache__/uiparser.cpython-312.pyc,, +PyQt5/uic/driver.py,sha256=_-VMq9IrVqjthILo8DlIoINA9rfbopc88e3isgR7Wnc,4648 +PyQt5/uic/exceptions.py,sha256=p7I-qA4nmuCho4LCz6Yc0HWy_I5RsX-bMn6ubPpZkJY,2279 +PyQt5/uic/icon_cache.py,sha256=ZNKlxzgUxoy6UvO6DDXxkIyzThO5pBRleQSevIjXXT4,5022 +PyQt5/uic/objcreator.py,sha256=TQG9LoO6N_Ntk7CZeEQSpFWB0o1P83050kHz1Apl-cs,5970 +PyQt5/uic/port_v2/__init__.py,sha256=k1IRWMHuxLvxHVScWEhy3tcPMBV57jYIJ9H2mMpg-eA,1004 +PyQt5/uic/port_v2/__pycache__/__init__.cpython-312.pyc,, +PyQt5/uic/port_v2/__pycache__/as_string.cpython-312.pyc,, +PyQt5/uic/port_v2/__pycache__/ascii_upper.cpython-312.pyc,, +PyQt5/uic/port_v2/__pycache__/proxy_base.cpython-312.pyc,, +PyQt5/uic/port_v2/__pycache__/string_io.cpython-312.pyc,, +PyQt5/uic/port_v2/as_string.py,sha256=uEQ9cCI2X4jxeTSsTBb47gwYTZaF2FlJo24-WtOqiBQ,1435 +PyQt5/uic/port_v2/ascii_upper.py,sha256=LibgwXEJ4bY5yh5IsfEPJNbACZc8QnmWQoYMKZzwjAY,1325 +PyQt5/uic/port_v2/proxy_base.py,sha256=YcW9id6tfH3MecrJoRWPDKU6SiHsldF49_hNCM2_ltw,1219 +PyQt5/uic/port_v2/string_io.py,sha256=AKFit0kouxpKbPhWWTKKKxTBzoC0CchTDh6eoF2xelI,1130 +PyQt5/uic/port_v3/__init__.py,sha256=k1IRWMHuxLvxHVScWEhy3tcPMBV57jYIJ9H2mMpg-eA,1004 +PyQt5/uic/port_v3/__pycache__/__init__.cpython-312.pyc,, +PyQt5/uic/port_v3/__pycache__/as_string.cpython-312.pyc,, +PyQt5/uic/port_v3/__pycache__/ascii_upper.cpython-312.pyc,, +PyQt5/uic/port_v3/__pycache__/proxy_base.cpython-312.pyc,, +PyQt5/uic/port_v3/__pycache__/string_io.cpython-312.pyc,, +PyQt5/uic/port_v3/as_string.py,sha256=husfCd6o0EkjW7K9clbYLQM7m3I7X4HjH3ng9udKAyc,1412 +PyQt5/uic/port_v3/ascii_upper.py,sha256=MPGIpTNXF-7YTthzhF09Ilj2PC-hRi5xwmmjYi54B14,1322 +PyQt5/uic/port_v3/proxy_base.py,sha256=FEkwcx-ENhXnCS4Z8ilCP8KX33LqvYYwwxvuhS8rtv8,1201 +PyQt5/uic/port_v3/string_io.py,sha256=WNBiRUBI0SQ4NAQM3ISdsLdS5M_bReMPcrBLDW7OrYw,1060 +PyQt5/uic/properties.py,sha256=MJbNS78YJn0wf_EXF7sZSPWzzPfK-LrVTu6HaYTjRas,17761 +PyQt5/uic/pyuic.py,sha256=EwD3vwsm-H_S_itMjxRyUW48RX53do9JLcYDDsD-7r8,3550 +PyQt5/uic/uiparser.py,sha256=M0bin-7r-rxE0l8cahMBlIpFvkhrnpofh3_ebLvtaIg,38150 +PyQt5/uic/widget-plugins/__pycache__/qaxcontainer.cpython-312.pyc,, +PyQt5/uic/widget-plugins/__pycache__/qscintilla.cpython-312.pyc,, +PyQt5/uic/widget-plugins/__pycache__/qtcharts.cpython-312.pyc,, +PyQt5/uic/widget-plugins/__pycache__/qtprintsupport.cpython-312.pyc,, +PyQt5/uic/widget-plugins/__pycache__/qtquickwidgets.cpython-312.pyc,, +PyQt5/uic/widget-plugins/__pycache__/qtwebenginewidgets.cpython-312.pyc,, +PyQt5/uic/widget-plugins/__pycache__/qtwebkit.cpython-312.pyc,, +PyQt5/uic/widget-plugins/qaxcontainer.py,sha256=4X7mDOCTCRsFC72AjcnfXWwzKPIIBb3wzovZePQwfiE,1557 +PyQt5/uic/widget-plugins/qscintilla.py,sha256=c2BYrFPyk05_9G4DReScO54HnjpD0wyiiaeUROw1qvA,1553 +PyQt5/uic/widget-plugins/qtcharts.py,sha256=q7wZiYYiV8ro_ivTsJlKIX9n_Ev4NrOxcf3KBYEtfjk,1562 +PyQt5/uic/widget-plugins/qtprintsupport.py,sha256=wANAXtOvUrwMbf1ySC7Er5eON_1Xj2SpIuNJEkPh2MY,1588 +PyQt5/uic/widget-plugins/qtquickwidgets.py,sha256=th5XaLaBM45pN4eAu53yILK4FH8XoiLils0dOMOfc7U,1562 +PyQt5/uic/widget-plugins/qtwebenginewidgets.py,sha256=bjTAie4gq4IHayFl05lVqbnc-yf9uv6fLoAVdgaAaGQ,1568 +PyQt5/uic/widget-plugins/qtwebkit.py,sha256=J5PbQfNEbTEnL03V0TSXrH-d9srutPP9P8h00Sdu7K0,2507 diff --git a/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/REQUESTED b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/WHEEL b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/WHEEL new file mode 100644 index 0000000..73956ce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: pyqtbuild 1.16.4 +Root-Is-Purelib: false +Tag: cp38-abi3-manylinux_2_17_x86_64 diff --git a/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/entry_points.txt b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/entry_points.txt new file mode 100644 index 0000000..8d1e534 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5-5.15.11.dist-info/entry_points.txt @@ -0,0 +1,4 @@ +[console_scripts] +pylupdate5=PyQt5.pylupdate_main:main +pyrcc5=PyQt5.pyrcc_main:main +pyuic5=PyQt5.uic.pyuic:main diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/Qt.abi3.so new file mode 100644 index 0000000..54166ae Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Bluetooth.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Bluetooth.so.5 new file mode 100755 index 0000000..780debf Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Bluetooth.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Concurrent.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Concurrent.so.5 new file mode 100755 index 0000000..4585424 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Concurrent.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 new file mode 100755 index 0000000..d31e08c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Core.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5DBus.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5DBus.so.5 new file mode 100755 index 0000000..0324dfd Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5DBus.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Designer.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Designer.so.5 new file mode 100755 index 0000000..335b740 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Designer.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5EglFSDeviceIntegration.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5EglFSDeviceIntegration.so.5 new file mode 100755 index 0000000..2207bff Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5EglFSDeviceIntegration.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Gui.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Gui.so.5 new file mode 100755 index 0000000..33f06fa Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Gui.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Help.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Help.so.5 new file mode 100755 index 0000000..1f240a0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Help.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Location.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Location.so.5 new file mode 100755 index 0000000..e5e9b42 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Location.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Multimedia.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Multimedia.so.5 new file mode 100755 index 0000000..c6ffdff Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Multimedia.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaGstTools.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaGstTools.so.5 new file mode 100755 index 0000000..ec35188 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaGstTools.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaQuick.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaQuick.so.5 new file mode 100755 index 0000000..7bfe34e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaQuick.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaWidgets.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaWidgets.so.5 new file mode 100755 index 0000000..4b65d57 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5MultimediaWidgets.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Network.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Network.so.5 new file mode 100755 index 0000000..4c56083 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Network.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Nfc.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Nfc.so.5 new file mode 100755 index 0000000..701b4dc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Nfc.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5OpenGL.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5OpenGL.so.5 new file mode 100755 index 0000000..d38996d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5OpenGL.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Positioning.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Positioning.so.5 new file mode 100755 index 0000000..f01b7b1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Positioning.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5PositioningQuick.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5PositioningQuick.so.5 new file mode 100755 index 0000000..b4f8348 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5PositioningQuick.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5PrintSupport.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5PrintSupport.so.5 new file mode 100755 index 0000000..fe44f88 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5PrintSupport.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Qml.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Qml.so.5 new file mode 100755 index 0000000..1b96b47 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Qml.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QmlModels.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QmlModels.so.5 new file mode 100755 index 0000000..66518b5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QmlModels.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QmlWorkerScript.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QmlWorkerScript.so.5 new file mode 100755 index 0000000..626ef0d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QmlWorkerScript.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick.so.5 new file mode 100755 index 0000000..d690a17 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3D.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3D.so.5 new file mode 100755 index 0000000..a03e0a3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3D.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DAssetImport.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DAssetImport.so.5 new file mode 100755 index 0000000..c60cfc7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DAssetImport.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DRender.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DRender.so.5 new file mode 100755 index 0000000..6467868 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DRender.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DRuntimeRender.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DRuntimeRender.so.5 new file mode 100755 index 0000000..ccfd793 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DRuntimeRender.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DUtils.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DUtils.so.5 new file mode 100755 index 0000000..8c2a3c8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Quick3DUtils.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickControls2.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickControls2.so.5 new file mode 100755 index 0000000..8a80c70 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickControls2.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickParticles.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickParticles.so.5 new file mode 100755 index 0000000..862dc49 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickParticles.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickShapes.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickShapes.so.5 new file mode 100755 index 0000000..d9f7f8c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickShapes.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickTemplates2.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickTemplates2.so.5 new file mode 100755 index 0000000..385a489 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickTemplates2.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickTest.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickTest.so.5 new file mode 100755 index 0000000..5f744dd Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickTest.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickWidgets.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickWidgets.so.5 new file mode 100755 index 0000000..f72d812 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5QuickWidgets.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5RemoteObjects.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5RemoteObjects.so.5 new file mode 100755 index 0000000..8030ae0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5RemoteObjects.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Sensors.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Sensors.so.5 new file mode 100755 index 0000000..a6b6747 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Sensors.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5SerialPort.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5SerialPort.so.5 new file mode 100755 index 0000000..c0d6206 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5SerialPort.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Sql.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Sql.so.5 new file mode 100755 index 0000000..25a0dda Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Sql.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Svg.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Svg.so.5 new file mode 100755 index 0000000..66917cd Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Svg.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Test.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Test.so.5 new file mode 100755 index 0000000..1b9976f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Test.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5TextToSpeech.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5TextToSpeech.so.5 new file mode 100755 index 0000000..7c6dc6e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5TextToSpeech.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WaylandClient.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WaylandClient.so.5 new file mode 100755 index 0000000..3d4919f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WaylandClient.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebChannel.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebChannel.so.5 new file mode 100755 index 0000000..bcb1476 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebChannel.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebSockets.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebSockets.so.5 new file mode 100755 index 0000000..f0c87d9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebSockets.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebView.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebView.so.5 new file mode 100755 index 0000000..97fcac7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5WebView.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Widgets.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Widgets.so.5 new file mode 100755 index 0000000..7d7c525 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Widgets.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5X11Extras.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5X11Extras.so.5 new file mode 100755 index 0000000..af0649d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5X11Extras.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5XcbQpa.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5XcbQpa.so.5 new file mode 100755 index 0000000..b57b64f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5XcbQpa.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Xml.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Xml.so.5 new file mode 100755 index 0000000..663b46f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5Xml.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5XmlPatterns.so.5 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5XmlPatterns.so.5 new file mode 100755 index 0000000..27292ac Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libQt5XmlPatterns.so.5 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicudata.so.56 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicudata.so.56 new file mode 100755 index 0000000..ce251d8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicudata.so.56 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicui18n.so.56 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicui18n.so.56 new file mode 100755 index 0000000..801fe9a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicui18n.so.56 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicuuc.so.56 b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicuuc.so.56 new file mode 100755 index 0000000..77fd7a8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/lib/libicuuc.so.56 differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/assetimporters/libassimp.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/assetimporters/libassimp.so new file mode 100755 index 0000000..6514562 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/assetimporters/libassimp.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/assetimporters/libuip.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/assetimporters/libuip.so new file mode 100755 index 0000000..b89cc26 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/assetimporters/libuip.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/audio/libqtaudio_alsa.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/audio/libqtaudio_alsa.so new file mode 100755 index 0000000..7a3290b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/audio/libqtaudio_alsa.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/audio/libqtmedia_pulse.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/audio/libqtmedia_pulse.so new file mode 100755 index 0000000..8000f21 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/audio/libqtmedia_pulse.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqconnmanbearer.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqconnmanbearer.so new file mode 100755 index 0000000..63b9703 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqconnmanbearer.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqgenericbearer.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqgenericbearer.so new file mode 100755 index 0000000..ca5c1e0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqgenericbearer.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqnmbearer.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqnmbearer.so new file mode 100755 index 0000000..ef10a40 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/bearer/libqnmbearer.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevkeyboardplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevkeyboardplugin.so new file mode 100755 index 0000000..d424301 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevkeyboardplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevmouseplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevmouseplugin.so new file mode 100755 index 0000000..3d65e03 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevmouseplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevtabletplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevtabletplugin.so new file mode 100755 index 0000000..0f63463 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevtabletplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevtouchplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevtouchplugin.so new file mode 100755 index 0000000..fc1b637 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqevdevtouchplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqtuiotouchplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqtuiotouchplugin.so new file mode 100755 index 0000000..7b99075 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/generic/libqtuiotouchplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geometryloaders/libdefaultgeometryloader.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geometryloaders/libdefaultgeometryloader.so new file mode 100755 index 0000000..0726dfb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geometryloaders/libdefaultgeometryloader.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geometryloaders/libgltfgeometryloader.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geometryloaders/libgltfgeometryloader.so new file mode 100755 index 0000000..050cedb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geometryloaders/libgltfgeometryloader.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_esri.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_esri.so new file mode 100755 index 0000000..ddadaff Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_esri.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_itemsoverlay.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_itemsoverlay.so new file mode 100755 index 0000000..8c14f82 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_itemsoverlay.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_mapbox.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_mapbox.so new file mode 100755 index 0000000..c89a907 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_mapbox.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_mapboxgl.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_mapboxgl.so new file mode 100755 index 0000000..10cd852 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_mapboxgl.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_nokia.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_nokia.so new file mode 100755 index 0000000..2b36556 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_nokia.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_osm.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_osm.so new file mode 100755 index 0000000..075ca13 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/geoservices/libqtgeoservices_osm.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/iconengines/libqsvgicon.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/iconengines/libqsvgicon.so new file mode 100755 index 0000000..c0d835e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/iconengines/libqsvgicon.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqgif.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqgif.so new file mode 100755 index 0000000..bbda80e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqgif.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqicns.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqicns.so new file mode 100755 index 0000000..ae2e63c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqicns.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqico.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqico.so new file mode 100755 index 0000000..305a8ee Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqico.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqjpeg.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqjpeg.so new file mode 100755 index 0000000..2457987 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqjpeg.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqpdf.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqpdf.so new file mode 100755 index 0000000..5519c6a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqpdf.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqsvg.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqsvg.so new file mode 100755 index 0000000..d6408a9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqsvg.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqtga.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqtga.so new file mode 100755 index 0000000..78ea66c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqtga.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqtiff.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqtiff.so new file mode 100755 index 0000000..88da4ee Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqtiff.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqwbmp.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqwbmp.so new file mode 100755 index 0000000..dc9931e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqwbmp.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqwebp.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqwebp.so new file mode 100755 index 0000000..c9cb564 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/imageformats/libqwebp.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstaudiodecoder.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstaudiodecoder.so new file mode 100755 index 0000000..49d15d9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstaudiodecoder.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstcamerabin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstcamerabin.so new file mode 100755 index 0000000..787a419 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstcamerabin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstmediacapture.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstmediacapture.so new file mode 100755 index 0000000..ffc2b92 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstmediacapture.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstmediaplayer.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstmediaplayer.so new file mode 100755 index 0000000..02ad7e6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/mediaservice/libgstmediaplayer.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so new file mode 100755 index 0000000..68e8b71 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so new file mode 100755 index 0000000..ccabc22 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqeglfs.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqeglfs.so new file mode 100755 index 0000000..8c3813c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqeglfs.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqlinuxfb.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqlinuxfb.so new file mode 100755 index 0000000..d402416 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqlinuxfb.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqminimal.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqminimal.so new file mode 100755 index 0000000..3c3b9f6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqminimal.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqminimalegl.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqminimalegl.so new file mode 100755 index 0000000..27bb7e3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqminimalegl.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqoffscreen.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqoffscreen.so new file mode 100755 index 0000000..6cde77f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqoffscreen.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqvnc.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqvnc.so new file mode 100755 index 0000000..79e262c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqvnc.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-egl.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-egl.so new file mode 100755 index 0000000..a54bc7a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-egl.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-generic.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-generic.so new file mode 100755 index 0000000..ced4194 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-generic.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-xcomposite-egl.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-xcomposite-egl.so new file mode 100755 index 0000000..ae35d88 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-xcomposite-egl.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-xcomposite-glx.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-xcomposite-glx.so new file mode 100755 index 0000000..2449403 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwayland-xcomposite-glx.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwebgl.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwebgl.so new file mode 100755 index 0000000..7f972d4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqwebgl.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so new file mode 100755 index 0000000..fa630df Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platformthemes/libqxdgdesktopportal.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platformthemes/libqxdgdesktopportal.so new file mode 100755 index 0000000..26b2a1e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/platformthemes/libqxdgdesktopportal.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/playlistformats/libqtmultimedia_m3u.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/playlistformats/libqtmultimedia_m3u.so new file mode 100755 index 0000000..b7a2ed9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/playlistformats/libqtmultimedia_m3u.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_geoclue.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_geoclue.so new file mode 100755 index 0000000..7308af9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_geoclue.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_geoclue2.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_geoclue2.so new file mode 100755 index 0000000..59c5a82 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_geoclue2.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_positionpoll.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_positionpoll.so new file mode 100755 index 0000000..dbe9fde Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_positionpoll.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_serialnmea.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_serialnmea.so new file mode 100755 index 0000000..b7914ba Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/position/libqtposition_serialnmea.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/printsupport/libcupsprintersupport.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/printsupport/libcupsprintersupport.so new file mode 100755 index 0000000..c4031ce Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/printsupport/libcupsprintersupport.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/renderers/libopenglrenderer.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/renderers/libopenglrenderer.so new file mode 100755 index 0000000..ad6cce8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/renderers/libopenglrenderer.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/renderplugins/libscene2d.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/renderplugins/libscene2d.so new file mode 100755 index 0000000..c02f4a5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/renderplugins/libscene2d.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libassimpsceneimport.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libassimpsceneimport.so new file mode 100755 index 0000000..b7a0ccc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libassimpsceneimport.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libgltfsceneexport.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libgltfsceneexport.so new file mode 100755 index 0000000..81e32a3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libgltfsceneexport.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libgltfsceneimport.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libgltfsceneimport.so new file mode 100755 index 0000000..a36bcfa Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sceneparsers/libgltfsceneimport.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensorgestures/libqtsensorgestures_plugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensorgestures/libqtsensorgestures_plugin.so new file mode 100755 index 0000000..b42ad5d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensorgestures/libqtsensorgestures_plugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensorgestures/libqtsensorgestures_shakeplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensorgestures/libqtsensorgestures_shakeplugin.so new file mode 100755 index 0000000..969ea07 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensorgestures/libqtsensorgestures_shakeplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_generic.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_generic.so new file mode 100755 index 0000000..6ed3cde Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_generic.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_iio-sensor-proxy.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_iio-sensor-proxy.so new file mode 100755 index 0000000..9446f02 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_iio-sensor-proxy.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_linuxsys.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_linuxsys.so new file mode 100755 index 0000000..64087a8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sensors/libqtsensors_linuxsys.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlite.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlite.so new file mode 100755 index 0000000..049b467 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlite.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlodbc.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlodbc.so new file mode 100755 index 0000000..7a9b229 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlodbc.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlpsql.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlpsql.so new file mode 100755 index 0000000..9fd6ef4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/sqldrivers/libqsqlpsql.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/texttospeech/libqtexttospeech_speechd.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/texttospeech/libqtexttospeech_speechd.so new file mode 100755 index 0000000..e7b2f8d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/texttospeech/libqtexttospeech_speechd.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-decoration-client/libbradient.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-decoration-client/libbradient.so new file mode 100755 index 0000000..06be9e9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-decoration-client/libbradient.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libdmabuf-server.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libdmabuf-server.so new file mode 100755 index 0000000..f28b04a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libdmabuf-server.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libdrm-egl-server.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libdrm-egl-server.so new file mode 100755 index 0000000..bd12e52 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libdrm-egl-server.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so new file mode 100755 index 0000000..70c6d1d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libshm-emulation-server.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libshm-emulation-server.so new file mode 100755 index 0000000..e41b240 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libshm-emulation-server.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libxcomposite-egl.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libxcomposite-egl.so new file mode 100755 index 0000000..0d03808 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libxcomposite-egl.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libxcomposite-glx.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libxcomposite-glx.so new file mode 100755 index 0000000..a5a94ea Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-graphics-integration-client/libxcomposite-glx.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libfullscreen-shell-v1.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libfullscreen-shell-v1.so new file mode 100755 index 0000000..21e144e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libfullscreen-shell-v1.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libivi-shell.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libivi-shell.so new file mode 100755 index 0000000..b2552a4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libivi-shell.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libwl-shell.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libwl-shell.so new file mode 100755 index 0000000..6196355 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libwl-shell.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell-v5.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell-v5.so new file mode 100755 index 0000000..370fe5c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell-v5.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell-v6.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell-v6.so new file mode 100755 index 0000000..457087d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell-v6.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell.so new file mode 100755 index 0000000..174f1cb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/wayland-shell-integration/libxdg-shell.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/webview/libqtwebview_webengine.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/webview/libqtwebview_webengine.so new file mode 100755 index 0000000..62c64ce Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/webview/libqtwebview_webengine.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/xcbglintegrations/libqxcb-egl-integration.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/xcbglintegrations/libqxcb-egl-integration.so new file mode 100755 index 0000000..0bc946a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/xcbglintegrations/libqxcb-egl-integration.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so new file mode 100755 index 0000000..7cf1aed Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/WebSockets/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/WebSockets/qmldir new file mode 100644 index 0000000..a4310d9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/WebSockets/qmldir @@ -0,0 +1,4 @@ +module Qt.WebSockets +plugin declarative_qmlwebsockets ../../QtWebSockets/ +classname QtWebSocketsDeclarativeModule +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/liblabsanimationplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/liblabsanimationplugin.so new file mode 100755 index 0000000..bdccd04 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/liblabsanimationplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/plugins.qmltypes new file mode 100644 index 0000000..18658e9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/plugins.qmltypes @@ -0,0 +1,33 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "qquickboundaryrule_p.h" + name: "QQuickBoundaryRule" + exports: ["Qt.labs.animation/BoundaryRule 1.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "OvershootFilter" + values: ["None", "Peak"] + } + Property { name: "enabled"; type: "bool" } + Property { name: "minimum"; type: "double" } + Property { name: "minimumOvershoot"; type: "double" } + Property { name: "maximum"; type: "double" } + Property { name: "maximumOvershoot"; type: "double" } + Property { name: "overshootScale"; type: "double" } + Property { name: "currentOvershoot"; type: "double"; isReadonly: true } + Property { name: "peakOvershoot"; type: "double"; isReadonly: true } + Property { name: "overshootFilter"; type: "OvershootFilter" } + Property { name: "easing"; type: "QEasingCurve" } + Property { name: "returnDuration"; type: "int" } + Method { name: "componentFinalized" } + Method { name: "returnToBounds"; type: "bool" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/qmldir new file mode 100644 index 0000000..b24fc98 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/animation/qmldir @@ -0,0 +1,3 @@ +module Qt.labs.animation +plugin labsanimationplugin +classname QtLabsAnimationPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/DayOfWeekRow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/DayOfWeekRow.qml new file mode 100644 index 0000000..2fc0d6f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/DayOfWeekRow.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Calendar module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import Qt.labs.calendar 1.0 + +AbstractDayOfWeekRow { + id: control + + implicitWidth: Math.max(background ? background.implicitWidth : 0, + contentItem.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(background ? background.implicitHeight : 0, + contentItem.implicitHeight + topPadding + bottomPadding) + + spacing: 6 + topPadding: 6 + bottomPadding: 6 + font.bold: true + + //! [delegate] + delegate: Text { + text: model.shortName + font: control.font + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + //! [delegate] + + //! [contentItem] + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.source + delegate: control.delegate + } + } + //! [contentItem] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/MonthGrid.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/MonthGrid.qml new file mode 100644 index 0000000..884ce65 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/MonthGrid.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Calendar module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import Qt.labs.calendar 1.0 + +AbstractMonthGrid { + id: control + + implicitWidth: Math.max(background ? background.implicitWidth : 0, + contentItem.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(background ? background.implicitHeight : 0, + contentItem.implicitHeight + topPadding + bottomPadding) + + spacing: 6 + + //! [delegate] + delegate: Text { + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + opacity: model.month === control.month ? 1 : 0 + text: model.day + font: control.font + } + //! [delegate] + + //! [contentItem] + contentItem: Grid { + rows: 6 + columns: 7 + rowSpacing: control.spacing + columnSpacing: control.spacing + + Repeater { + model: control.source + delegate: control.delegate + } + } + //! [contentItem] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/WeekNumberColumn.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/WeekNumberColumn.qml new file mode 100644 index 0000000..e2c9d98 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/WeekNumberColumn.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Calendar module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import Qt.labs.calendar 1.0 + +AbstractWeekNumberColumn { + id: control + + implicitWidth: Math.max(background ? background.implicitWidth : 0, + contentItem.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(background ? background.implicitHeight : 0, + contentItem.implicitHeight + topPadding + bottomPadding) + + spacing: 6 + leftPadding: 6 + rightPadding: 6 + font.bold: true + + //! [delegate] + delegate: Text { + text: model.weekNumber + font: control.font + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + //! [delegate] + + //! [contentItem] + contentItem: Column { + spacing: control.spacing + Repeater { + model: control.source + delegate: control.delegate + } + } + //! [contentItem] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/libqtlabscalendarplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/libqtlabscalendarplugin.so new file mode 100755 index 0000000..f6f3ba0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/libqtlabscalendarplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/plugins.qmltypes new file mode 100644 index 0000000..e004d63 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/plugins.qmltypes @@ -0,0 +1,435 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable Qt.labs.calendar 1.0' + +Module { + dependencies: ["QtQuick 2.12"] + Component { + name: "QAbstractItemModel" + prototype: "QObject" + Enum { + name: "LayoutChangeHint" + values: { + "NoLayoutChangeHint": 0, + "VerticalSortHint": 1, + "HorizontalSortHint": 2 + } + } + Enum { + name: "CheckIndexOption" + values: { + "NoOption": 0, + "IndexIsValid": 1, + "DoNotUseParent": 2, + "ParentIsInvalid": 4 + } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + Parameter { name: "roles"; type: "QVector" } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + } + Signal { + name: "headerDataChanged" + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutChanged" } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutAboutToBeChanged" } + Signal { + name: "rowsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { name: "modelAboutToBeReset" } + Signal { name: "modelReset" } + Signal { + name: "rowsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationRow"; type: "int" } + } + Signal { + name: "rowsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "row"; type: "int" } + } + Signal { + name: "columnsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationColumn"; type: "int" } + } + Signal { + name: "columnsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "column"; type: "int" } + } + Method { name: "submit"; type: "bool" } + Method { name: "revert" } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "parent" + type: "QModelIndex" + Parameter { name: "child"; type: "QModelIndex" } + } + Method { + name: "sibling" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "idx"; type: "QModelIndex" } + } + Method { + name: "rowCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "rowCount"; type: "int" } + Method { + name: "columnCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "columnCount"; type: "int" } + Method { + name: "hasChildren" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "hasChildren"; type: "bool" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + } + Method { + name: "fetchMore" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "canFetchMore" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "flags" + type: "Qt::ItemFlags" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + Parameter { name: "flags"; type: "Qt::MatchFlags" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } + Component { + name: "QQuickCalendar" + prototype: "QObject" + exports: ["Qt.labs.calendar/Calendar 1.0"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Enum { + name: "Month" + values: { + "January": 0, + "February": 1, + "March": 2, + "April": 3, + "May": 4, + "June": 5, + "July": 6, + "August": 7, + "September": 8, + "October": 9, + "November": 10, + "December": 11 + } + } + } + Component { + name: "QQuickCalendarModel" + prototype: "QAbstractListModel" + exports: ["Qt.labs.calendar/CalendarModel 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "from"; type: "QDate" } + Property { name: "to"; type: "QDate" } + Property { name: "count"; type: "int"; isReadonly: true } + Method { + name: "monthAt" + type: "int" + Parameter { name: "index"; type: "int" } + } + Method { + name: "yearAt" + type: "int" + Parameter { name: "index"; type: "int" } + } + Method { + name: "indexOf" + type: "int" + Parameter { name: "date"; type: "QDate" } + } + Method { + name: "indexOf" + type: "int" + Parameter { name: "year"; type: "int" } + Parameter { name: "month"; type: "int" } + } + } + Component { + name: "QQuickControl" + defaultProperty: "data" + prototype: "QQuickItem" + Property { name: "font"; type: "QFont" } + Property { name: "availableWidth"; type: "double"; isReadonly: true } + Property { name: "availableHeight"; type: "double"; isReadonly: true } + Property { name: "padding"; type: "double" } + Property { name: "topPadding"; type: "double" } + Property { name: "leftPadding"; type: "double" } + Property { name: "rightPadding"; type: "double" } + Property { name: "bottomPadding"; type: "double" } + Property { name: "spacing"; type: "double" } + Property { name: "locale"; type: "QLocale" } + Property { name: "mirrored"; type: "bool"; isReadonly: true } + Property { name: "focusPolicy"; type: "Qt::FocusPolicy" } + Property { name: "focusReason"; type: "Qt::FocusReason" } + Property { name: "visualFocus"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "hoverEnabled"; type: "bool" } + Property { name: "wheelEnabled"; type: "bool" } + Property { name: "background"; type: "QQuickItem"; isPointer: true } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "baselineOffset"; type: "double" } + Property { name: "palette"; revision: 3; type: "QPalette" } + Property { name: "horizontalPadding"; revision: 5; type: "double" } + Property { name: "verticalPadding"; revision: 5; type: "double" } + Property { name: "implicitContentWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitContentHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "topInset"; revision: 5; type: "double" } + Property { name: "leftInset"; revision: 5; type: "double" } + Property { name: "rightInset"; revision: 5; type: "double" } + Property { name: "bottomInset"; revision: 5; type: "double" } + Signal { name: "paletteChanged"; revision: 3 } + Signal { name: "horizontalPaddingChanged"; revision: 5 } + Signal { name: "verticalPaddingChanged"; revision: 5 } + Signal { name: "implicitContentWidthChanged"; revision: 5 } + Signal { name: "implicitContentHeightChanged"; revision: 5 } + Signal { name: "implicitBackgroundWidthChanged"; revision: 5 } + Signal { name: "implicitBackgroundHeightChanged"; revision: 5 } + Signal { name: "topInsetChanged"; revision: 5 } + Signal { name: "leftInsetChanged"; revision: 5 } + Signal { name: "rightInsetChanged"; revision: 5 } + Signal { name: "bottomInsetChanged"; revision: 5 } + } + Component { + name: "QQuickDayOfWeekRow" + defaultProperty: "data" + prototype: "QQuickControl" + exports: ["Qt.labs.calendar/AbstractDayOfWeekRow 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "source"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + } + Component { + name: "QQuickMonthGrid" + defaultProperty: "data" + prototype: "QQuickControl" + exports: ["Qt.labs.calendar/AbstractMonthGrid 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "month"; type: "int" } + Property { name: "year"; type: "int" } + Property { name: "source"; type: "QVariant" } + Property { name: "title"; type: "string" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Signal { + name: "pressed" + Parameter { name: "date"; type: "QDate" } + } + Signal { + name: "released" + Parameter { name: "date"; type: "QDate" } + } + Signal { + name: "clicked" + Parameter { name: "date"; type: "QDate" } + } + Signal { + name: "pressAndHold" + Parameter { name: "date"; type: "QDate" } + } + } + Component { + name: "QQuickWeekNumberColumn" + defaultProperty: "data" + prototype: "QQuickControl" + exports: ["Qt.labs.calendar/AbstractWeekNumberColumn 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "month"; type: "int" } + Property { name: "year"; type: "int" } + Property { name: "source"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/qmldir new file mode 100644 index 0000000..9b9e903 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/calendar/qmldir @@ -0,0 +1,6 @@ +module Qt.labs.calendar +plugin qtlabscalendarplugin +classname QtLabsCalendarPlugin +DayOfWeekRow 1.0 DayOfWeekRow.qml +MonthGrid 1.0 MonthGrid.qml +WeekNumberColumn 1.0 WeekNumberColumn.qml diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.so new file mode 100755 index 0000000..4bbb208 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/plugins.qmltypes new file mode 100644 index 0000000..1b79dc6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/plugins.qmltypes @@ -0,0 +1,85 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0"] + Component { + file: "qquickfolderlistmodel.h" + name: "QQuickFolderListModel" + exports: [ + "Qt.labs.folderlistmodel/FolderListModel 2.0", + "Qt.labs.folderlistmodel/FolderListModel 2.1", + "Qt.labs.folderlistmodel/FolderListModel 2.11", + "Qt.labs.folderlistmodel/FolderListModel 2.12", + "Qt.labs.folderlistmodel/FolderListModel 2.2" + ] + exportMetaObjectRevisions: [0, 1, 11, 12, 2] + Enum { + name: "SortField" + values: ["Unsorted", "Name", "Time", "Size", "Type"] + } + Enum { + name: "Status" + values: ["Null", "Ready", "Loading"] + } + Property { name: "folder"; type: "QUrl" } + Property { name: "rootFolder"; type: "QUrl" } + Property { name: "parentFolder"; type: "QUrl"; isReadonly: true } + Property { name: "nameFilters"; type: "QStringList" } + Property { name: "sortField"; type: "SortField" } + Property { name: "sortReversed"; type: "bool" } + Property { name: "showFiles"; revision: 1; type: "bool" } + Property { name: "showDirs"; type: "bool" } + Property { name: "showDirsFirst"; type: "bool" } + Property { name: "showDotAndDotDot"; type: "bool" } + Property { name: "showHidden"; revision: 1; type: "bool" } + Property { name: "showOnlyReadable"; type: "bool" } + Property { name: "caseSensitive"; revision: 2; type: "bool" } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "status"; revision: 11; type: "Status"; isReadonly: true } + Property { name: "sortCaseSensitive"; revision: 12; type: "bool" } + Signal { name: "rowCountChanged" } + Signal { name: "countChanged"; revision: 1 } + Signal { name: "statusChanged"; revision: 11 } + Method { + name: "_q_directoryChanged" + Parameter { name: "directory"; type: "string" } + Parameter { name: "list"; type: "QList" } + } + Method { + name: "_q_directoryUpdated" + Parameter { name: "directory"; type: "string" } + Parameter { name: "list"; type: "QList" } + Parameter { name: "fromIndex"; type: "int" } + Parameter { name: "toIndex"; type: "int" } + } + Method { + name: "_q_sortFinished" + Parameter { name: "list"; type: "QList" } + } + Method { + name: "_q_statusChanged" + Parameter { name: "s"; type: "QQuickFolderListModel::Status" } + } + Method { + name: "isFolder" + type: "bool" + Parameter { name: "index"; type: "int" } + } + Method { + name: "get" + type: "QVariant" + Parameter { name: "idx"; type: "int" } + Parameter { name: "property"; type: "string" } + } + Method { + name: "indexOf" + type: "int" + Parameter { name: "file"; type: "QUrl" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/qmldir new file mode 100644 index 0000000..1865845 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/folderlistmodel/qmldir @@ -0,0 +1,4 @@ +module Qt.labs.folderlistmodel +plugin qmlfolderlistmodelplugin +classname QmlFolderListModelPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/liblottieqtplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/liblottieqtplugin.so new file mode 100755 index 0000000..a7680e0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/liblottieqtplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/plugins.qmltypes new file mode 100644 index 0000000..57d9301 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/plugins.qmltypes @@ -0,0 +1,101 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable Qt.labs.lottieqt 1.0' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "BMLiteral" + prototype: "QObject" + exports: ["Qt.labs.lottieqt/BMPropertyType 1.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "PropertyType" + values: { + "RectPosition": 0, + "RectSize": 1, + "RectRoundness": 2 + } + } + } + Component { + name: "LottieAnimation" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["Qt.labs.lottieqt/LottieAnimation 1.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Status" + values: { + "Null": 0, + "Loading": 1, + "Ready": 2, + "Error": 3 + } + } + Enum { + name: "Quality" + values: { + "LowQuality": 0, + "MediumQuality": 1, + "HighQuality": 2 + } + } + Enum { + name: "Direction" + values: { + "Forward": 1, + "Reverse": -1 + } + } + Enum { + name: "LoopCount" + values: { + "Infinite": -1 + } + } + Property { name: "source"; type: "QUrl" } + Property { name: "frameRate"; type: "int" } + Property { name: "startFrame"; type: "int"; isReadonly: true } + Property { name: "endFrame"; type: "int"; isReadonly: true } + Property { name: "status"; type: "Status" } + Property { name: "quality"; type: "Quality" } + Property { name: "autoPlay"; type: "bool" } + Property { name: "loops"; type: "int" } + Property { name: "direction"; type: "Direction" } + Signal { name: "finished" } + Method { name: "start" } + Method { name: "play" } + Method { name: "pause" } + Method { name: "togglePause" } + Method { name: "stop" } + Method { + name: "gotoAndPlay" + Parameter { name: "frame"; type: "int" } + } + Method { + name: "gotoAndPlay" + type: "bool" + Parameter { name: "frameMarker"; type: "string" } + } + Method { + name: "gotoAndStop" + Parameter { name: "frame"; type: "int" } + } + Method { + name: "gotoAndStop" + type: "bool" + Parameter { name: "frameMarker"; type: "string" } + } + Method { + name: "getDuration" + type: "double" + Parameter { name: "inFrames"; type: "bool" } + } + Method { name: "getDuration"; type: "double" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/qmldir new file mode 100644 index 0000000..a1beae5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/lottieqt/qmldir @@ -0,0 +1,3 @@ +module Qt.labs.lottieqt +plugin lottieqtplugin +classname BodymovinPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/libqtlabsplatformplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/libqtlabsplatformplugin.so new file mode 100755 index 0000000..f46ed93 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/libqtlabsplatformplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/plugins.qmltypes new file mode 100644 index 0000000..e931204 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/plugins.qmltypes @@ -0,0 +1,492 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable Qt.labs.platform 1.1' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QPlatformDialogHelper" + prototype: "QObject" + exports: ["Qt.labs.platform/StandardButton 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "StandardButtons" + values: { + "NoButton": 0, + "Ok": 1024, + "Save": 2048, + "SaveAll": 4096, + "Open": 8192, + "Yes": 16384, + "YesToAll": 32768, + "No": 65536, + "NoToAll": 131072, + "Abort": 262144, + "Retry": 524288, + "Ignore": 1048576, + "Close": 2097152, + "Cancel": 4194304, + "Discard": 8388608, + "Help": 16777216, + "Apply": 33554432, + "Reset": 67108864, + "RestoreDefaults": 134217728, + "FirstButton": 1024, + "LastButton": 134217728, + "LowestBit": 10, + "HighestBit": 27 + } + } + Enum { + name: "ButtonRole" + values: { + "InvalidRole": -1, + "AcceptRole": 0, + "RejectRole": 1, + "DestructiveRole": 2, + "ActionRole": 3, + "HelpRole": 4, + "YesRole": 5, + "NoRole": 6, + "ResetRole": 7, + "ApplyRole": 8, + "NRoles": 9, + "RoleMask": 268435455, + "AlternateRole": 268435456, + "Stretch": 536870912, + "Reverse": 1073741824, + "EOL": -1 + } + } + Enum { + name: "ButtonLayout" + values: { + "UnknownLayout": -1, + "WinLayout": 0, + "MacLayout": 1, + "KdeLayout": 2, + "GnomeLayout": 3, + "MacModelessLayout": 4, + "AndroidLayout": 5 + } + } + Signal { name: "accept" } + Signal { name: "reject" } + } + Component { + name: "QQuickPlatformColorDialog" + defaultProperty: "data" + prototype: "QQuickPlatformDialog" + exports: ["Qt.labs.platform/ColorDialog 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "color"; type: "QColor" } + Property { name: "currentColor"; type: "QColor" } + Property { name: "options"; type: "QColorDialogOptions::ColorDialogOptions" } + } + Component { + name: "QQuickPlatformDialog" + defaultProperty: "data" + prototype: "QObject" + exports: ["Qt.labs.platform/Dialog 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "StandardCode" + values: { + "Rejected": 0, + "Accepted": 1 + } + } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "parentWindow"; type: "QWindow"; isPointer: true } + Property { name: "title"; type: "string" } + Property { name: "flags"; type: "Qt::WindowFlags" } + Property { name: "modality"; type: "Qt::WindowModality" } + Property { name: "visible"; type: "bool" } + Property { name: "result"; type: "int" } + Signal { name: "accepted" } + Signal { name: "rejected" } + Method { name: "open" } + Method { name: "close" } + Method { name: "accept" } + Method { name: "reject" } + Method { + name: "done" + Parameter { name: "result"; type: "int" } + } + } + Component { + name: "QQuickPlatformFileDialog" + defaultProperty: "data" + prototype: "QQuickPlatformDialog" + exports: ["Qt.labs.platform/FileDialog 1.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "FileMode" + values: { + "OpenFile": 0, + "OpenFiles": 1, + "SaveFile": 2 + } + } + Property { name: "fileMode"; type: "FileMode" } + Property { name: "file"; type: "QUrl" } + Property { name: "files"; type: "QList" } + Property { name: "currentFile"; type: "QUrl" } + Property { name: "currentFiles"; type: "QList" } + Property { name: "folder"; type: "QUrl" } + Property { name: "options"; type: "QFileDialogOptions::FileDialogOptions" } + Property { name: "nameFilters"; type: "QStringList" } + Property { + name: "selectedNameFilter" + type: "QQuickPlatformFileNameFilter" + isReadonly: true + isPointer: true + } + Property { name: "defaultSuffix"; type: "string" } + Property { name: "acceptLabel"; type: "string" } + Property { name: "rejectLabel"; type: "string" } + } + Component { + name: "QQuickPlatformFileNameFilter" + prototype: "QObject" + Property { name: "index"; type: "int" } + Property { name: "name"; type: "string"; isReadonly: true } + Property { name: "extensions"; type: "QStringList"; isReadonly: true } + Signal { + name: "indexChanged" + Parameter { name: "index"; type: "int" } + } + Signal { + name: "nameChanged" + Parameter { name: "name"; type: "string" } + } + Signal { + name: "extensionsChanged" + Parameter { name: "extensions"; type: "QStringList" } + } + } + Component { + name: "QQuickPlatformFolderDialog" + defaultProperty: "data" + prototype: "QQuickPlatformDialog" + exports: ["Qt.labs.platform/FolderDialog 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "folder"; type: "QUrl" } + Property { name: "currentFolder"; type: "QUrl" } + Property { name: "options"; type: "QFileDialogOptions::FileDialogOptions" } + Property { name: "acceptLabel"; type: "string" } + Property { name: "rejectLabel"; type: "string" } + } + Component { + name: "QQuickPlatformFontDialog" + defaultProperty: "data" + prototype: "QQuickPlatformDialog" + exports: ["Qt.labs.platform/FontDialog 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "font"; type: "QFont" } + Property { name: "currentFont"; type: "QFont" } + Property { name: "options"; type: "QFontDialogOptions::FontDialogOptions" } + } + Component { + name: "QQuickPlatformIcon" + Property { name: "source"; type: "QUrl" } + Property { name: "name"; type: "string" } + Property { name: "mask"; type: "bool" } + } + Component { + name: "QQuickPlatformMenu" + defaultProperty: "data" + prototype: "QObject" + exports: ["Qt.labs.platform/Menu 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "items"; type: "QQuickPlatformMenuItem"; isList: true; isReadonly: true } + Property { name: "menuBar"; type: "QQuickPlatformMenuBar"; isReadonly: true; isPointer: true } + Property { name: "parentMenu"; type: "QQuickPlatformMenu"; isReadonly: true; isPointer: true } + Property { + name: "systemTrayIcon" + type: "QQuickPlatformSystemTrayIcon" + isReadonly: true + isPointer: true + } + Property { name: "menuItem"; type: "QQuickPlatformMenuItem"; isReadonly: true; isPointer: true } + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "minimumWidth"; type: "int" } + Property { name: "type"; type: "QPlatformMenu::MenuType" } + Property { name: "title"; type: "string" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "font"; type: "QFont" } + Property { name: "icon"; revision: 1; type: "QQuickPlatformIcon" } + Signal { name: "aboutToShow" } + Signal { name: "aboutToHide" } + Signal { name: "iconChanged"; revision: 1 } + Method { + name: "open" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { name: "close" } + Method { + name: "addItem" + Parameter { name: "item"; type: "QQuickPlatformMenuItem"; isPointer: true } + } + Method { + name: "insertItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QQuickPlatformMenuItem"; isPointer: true } + } + Method { + name: "removeItem" + Parameter { name: "item"; type: "QQuickPlatformMenuItem"; isPointer: true } + } + Method { + name: "addMenu" + Parameter { name: "menu"; type: "QQuickPlatformMenu"; isPointer: true } + } + Method { + name: "insertMenu" + Parameter { name: "index"; type: "int" } + Parameter { name: "menu"; type: "QQuickPlatformMenu"; isPointer: true } + } + Method { + name: "removeMenu" + Parameter { name: "menu"; type: "QQuickPlatformMenu"; isPointer: true } + } + Method { name: "clear" } + } + Component { + name: "QQuickPlatformMenuBar" + defaultProperty: "data" + prototype: "QObject" + exports: ["Qt.labs.platform/MenuBar 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "menus"; type: "QQuickPlatformMenu"; isList: true; isReadonly: true } + Property { name: "window"; type: "QWindow"; isPointer: true } + Method { + name: "addMenu" + Parameter { name: "menu"; type: "QQuickPlatformMenu"; isPointer: true } + } + Method { + name: "insertMenu" + Parameter { name: "index"; type: "int" } + Parameter { name: "menu"; type: "QQuickPlatformMenu"; isPointer: true } + } + Method { + name: "removeMenu" + Parameter { name: "menu"; type: "QQuickPlatformMenu"; isPointer: true } + } + Method { name: "clear" } + } + Component { + name: "QQuickPlatformMenuItem" + prototype: "QObject" + exports: [ + "Qt.labs.platform/MenuItem 1.0", + "Qt.labs.platform/MenuItem 1.1" + ] + exportMetaObjectRevisions: [0, 1] + Property { name: "menu"; type: "QQuickPlatformMenu"; isReadonly: true; isPointer: true } + Property { name: "subMenu"; type: "QQuickPlatformMenu"; isReadonly: true; isPointer: true } + Property { name: "group"; type: "QQuickPlatformMenuItemGroup"; isPointer: true } + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "separator"; type: "bool" } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "role"; type: "QPlatformMenuItem::MenuRole" } + Property { name: "text"; type: "string" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "shortcut"; type: "QVariant" } + Property { name: "font"; type: "QFont" } + Property { name: "icon"; revision: 1; type: "QQuickPlatformIcon" } + Signal { name: "triggered" } + Signal { name: "hovered" } + Signal { name: "iconChanged"; revision: 1 } + Method { name: "toggle" } + } + Component { + name: "QQuickPlatformMenuItemGroup" + prototype: "QObject" + exports: ["Qt.labs.platform/MenuItemGroup 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "exclusive"; type: "bool" } + Property { name: "checkedItem"; type: "QQuickPlatformMenuItem"; isPointer: true } + Property { name: "items"; type: "QQuickPlatformMenuItem"; isList: true; isReadonly: true } + Signal { + name: "triggered" + Parameter { name: "item"; type: "QQuickPlatformMenuItem"; isPointer: true } + } + Signal { + name: "hovered" + Parameter { name: "item"; type: "QQuickPlatformMenuItem"; isPointer: true } + } + Method { + name: "addItem" + Parameter { name: "item"; type: "QQuickPlatformMenuItem"; isPointer: true } + } + Method { + name: "removeItem" + Parameter { name: "item"; type: "QQuickPlatformMenuItem"; isPointer: true } + } + Method { name: "clear" } + } + Component { + name: "QQuickPlatformMenuSeparator" + prototype: "QQuickPlatformMenuItem" + exports: ["Qt.labs.platform/MenuSeparator 1.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickPlatformMessageDialog" + defaultProperty: "data" + prototype: "QQuickPlatformDialog" + exports: ["Qt.labs.platform/MessageDialog 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "text"; type: "string" } + Property { name: "informativeText"; type: "string" } + Property { name: "detailedText"; type: "string" } + Property { name: "buttons"; type: "QPlatformDialogHelper::StandardButtons" } + Signal { + name: "clicked" + Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } + } + Signal { name: "okClicked" } + Signal { name: "saveClicked" } + Signal { name: "saveAllClicked" } + Signal { name: "openClicked" } + Signal { name: "yesClicked" } + Signal { name: "yesToAllClicked" } + Signal { name: "noClicked" } + Signal { name: "noToAllClicked" } + Signal { name: "abortClicked" } + Signal { name: "retryClicked" } + Signal { name: "ignoreClicked" } + Signal { name: "closeClicked" } + Signal { name: "cancelClicked" } + Signal { name: "discardClicked" } + Signal { name: "helpClicked" } + Signal { name: "applyClicked" } + Signal { name: "resetClicked" } + Signal { name: "restoreDefaultsClicked" } + } + Component { + name: "QQuickPlatformStandardPaths" + prototype: "QObject" + exports: ["Qt.labs.platform/StandardPaths 1.0"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Method { + name: "displayName" + type: "string" + Parameter { name: "type"; type: "QStandardPaths::StandardLocation" } + } + Method { + name: "findExecutable" + type: "QUrl" + Parameter { name: "executableName"; type: "string" } + Parameter { name: "paths"; type: "QStringList" } + } + Method { + name: "findExecutable" + type: "QUrl" + Parameter { name: "executableName"; type: "string" } + } + Method { + name: "locate" + type: "QUrl" + Parameter { name: "type"; type: "QStandardPaths::StandardLocation" } + Parameter { name: "fileName"; type: "string" } + Parameter { name: "options"; type: "QStandardPaths::LocateOptions" } + } + Method { + name: "locate" + type: "QUrl" + Parameter { name: "type"; type: "QStandardPaths::StandardLocation" } + Parameter { name: "fileName"; type: "string" } + } + Method { + name: "locateAll" + type: "QList" + Parameter { name: "type"; type: "QStandardPaths::StandardLocation" } + Parameter { name: "fileName"; type: "string" } + Parameter { name: "options"; type: "QStandardPaths::LocateOptions" } + } + Method { + name: "locateAll" + type: "QList" + Parameter { name: "type"; type: "QStandardPaths::StandardLocation" } + Parameter { name: "fileName"; type: "string" } + } + Method { + name: "setTestModeEnabled" + Parameter { name: "testMode"; type: "bool" } + } + Method { + name: "standardLocations" + type: "QList" + Parameter { name: "type"; type: "QStandardPaths::StandardLocation" } + } + Method { + name: "writableLocation" + type: "QUrl" + Parameter { name: "type"; type: "QStandardPaths::StandardLocation" } + } + } + Component { + name: "QQuickPlatformSystemTrayIcon" + prototype: "QObject" + exports: [ + "Qt.labs.platform/SystemTrayIcon 1.0", + "Qt.labs.platform/SystemTrayIcon 1.1" + ] + exportMetaObjectRevisions: [0, 1] + Property { name: "available"; type: "bool"; isReadonly: true } + Property { name: "supportsMessages"; type: "bool"; isReadonly: true } + Property { name: "visible"; type: "bool" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "tooltip"; type: "string" } + Property { name: "menu"; type: "QQuickPlatformMenu"; isPointer: true } + Property { name: "geometry"; revision: 1; type: "QRect"; isReadonly: true } + Property { name: "icon"; revision: 1; type: "QQuickPlatformIcon" } + Signal { + name: "activated" + Parameter { name: "reason"; type: "QPlatformSystemTrayIcon::ActivationReason" } + } + Signal { name: "messageClicked" } + Signal { name: "geometryChanged"; revision: 1 } + Signal { name: "iconChanged"; revision: 1 } + Method { name: "show" } + Method { name: "hide" } + Method { + name: "showMessage" + Parameter { name: "title"; type: "string" } + Parameter { name: "message"; type: "string" } + Parameter { name: "iconType"; type: "QPlatformSystemTrayIcon::MessageIcon" } + Parameter { name: "msecs"; type: "int" } + } + Method { + name: "showMessage" + Parameter { name: "title"; type: "string" } + Parameter { name: "message"; type: "string" } + Parameter { name: "iconType"; type: "QPlatformSystemTrayIcon::MessageIcon" } + } + Method { + name: "showMessage" + Parameter { name: "title"; type: "string" } + Parameter { name: "message"; type: "string" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/qmldir new file mode 100644 index 0000000..9653b7d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/platform/qmldir @@ -0,0 +1,3 @@ +module Qt.labs.platform +plugin qtlabsplatformplugin +classname QtLabsPlatformPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/liblabsmodelsplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/liblabsmodelsplugin.so new file mode 100755 index 0000000..55ee609 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/liblabsmodelsplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/plugins.qmltypes new file mode 100644 index 0000000..1dffbca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/plugins.qmltypes @@ -0,0 +1,132 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "qqmldelegatecomponent_p.h" + name: "QQmlDelegateChoice" + defaultProperty: "delegate" + exports: ["Qt.labs.qmlmodels/DelegateChoice 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "roleValue"; type: "QVariant" } + Property { name: "row"; type: "int" } + Property { name: "index"; type: "int" } + Property { name: "column"; type: "int" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Signal { name: "changed" } + } + Component { + file: "qqmldelegatecomponent_p.h" + name: "QQmlDelegateChooser" + defaultProperty: "choices" + prototype: "QQmlAbstractDelegateComponent" + exports: ["Qt.labs.qmlmodels/DelegateChooser 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "role"; type: "string" } + Property { name: "choices"; type: "QQmlDelegateChoice"; isList: true; isReadonly: true } + } + Component { + file: "qqmltablemodel_p.h" + name: "QQmlTableModel" + defaultProperty: "columns" + exports: ["Qt.labs.qmlmodels/TableModel 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "columnCount"; type: "int"; isReadonly: true } + Property { name: "rowCount"; type: "int"; isReadonly: true } + Property { name: "rows"; type: "QVariant" } + Property { name: "columns"; type: "QQmlTableModelColumn"; isList: true; isReadonly: true } + Method { + name: "appendRow" + Parameter { name: "row"; type: "QVariant" } + } + Method { name: "clear" } + Method { + name: "getRow" + type: "QVariant" + Parameter { name: "rowIndex"; type: "int" } + } + Method { + name: "insertRow" + Parameter { name: "rowIndex"; type: "int" } + Parameter { name: "row"; type: "QVariant" } + } + Method { + name: "moveRow" + Parameter { name: "fromRowIndex"; type: "int" } + Parameter { name: "toRowIndex"; type: "int" } + Parameter { name: "rows"; type: "int" } + } + Method { + name: "moveRow" + Parameter { name: "fromRowIndex"; type: "int" } + Parameter { name: "toRowIndex"; type: "int" } + } + Method { + name: "removeRow" + Parameter { name: "rowIndex"; type: "int" } + Parameter { name: "rows"; type: "int" } + } + Method { + name: "removeRow" + Parameter { name: "rowIndex"; type: "int" } + } + Method { + name: "setRow" + Parameter { name: "rowIndex"; type: "int" } + Parameter { name: "row"; type: "QVariant" } + } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "string" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { + file: "qqmltablemodelcolumn_p.h" + name: "QQmlTableModelColumn" + exports: ["Qt.labs.qmlmodels/TableModelColumn 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "display"; type: "QJSValue" } + Property { name: "setDisplay"; type: "QJSValue" } + Property { name: "decoration"; type: "QJSValue" } + Property { name: "setDecoration"; type: "QJSValue" } + Property { name: "edit"; type: "QJSValue" } + Property { name: "setEdit"; type: "QJSValue" } + Property { name: "toolTip"; type: "QJSValue" } + Property { name: "setToolTip"; type: "QJSValue" } + Property { name: "statusTip"; type: "QJSValue" } + Property { name: "setStatusTip"; type: "QJSValue" } + Property { name: "whatsThis"; type: "QJSValue" } + Property { name: "setWhatsThis"; type: "QJSValue" } + Property { name: "font"; type: "QJSValue" } + Property { name: "setFont"; type: "QJSValue" } + Property { name: "textAlignment"; type: "QJSValue" } + Property { name: "setTextAlignment"; type: "QJSValue" } + Property { name: "background"; type: "QJSValue" } + Property { name: "setBackground"; type: "QJSValue" } + Property { name: "foreground"; type: "QJSValue" } + Property { name: "setForeground"; type: "QJSValue" } + Property { name: "checkState"; type: "QJSValue" } + Property { name: "setCheckState"; type: "QJSValue" } + Property { name: "accessibleText"; type: "QJSValue" } + Property { name: "setAccessibleText"; type: "QJSValue" } + Property { name: "accessibleDescription"; type: "QJSValue" } + Property { name: "setAccessibleDescription"; type: "QJSValue" } + Property { name: "sizeHint"; type: "QJSValue" } + Property { name: "setSizeHint"; type: "QJSValue" } + Signal { name: "indexChanged" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/qmldir new file mode 100644 index 0000000..9c73571 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/qmlmodels/qmldir @@ -0,0 +1,3 @@ +module Qt.labs.qmlmodels +plugin labsmodelsplugin +classname QtQmlLabsModelsPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/libqmlsettingsplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/libqmlsettingsplugin.so new file mode 100755 index 0000000..992c866 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/libqmlsettingsplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/plugins.qmltypes new file mode 100644 index 0000000..47d547f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/plugins.qmltypes @@ -0,0 +1,36 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "qqmlsettings_p.h" + name: "QQmlSettings" + exports: ["Qt.labs.settings/Settings 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "category"; type: "string" } + Property { name: "fileName"; type: "string" } + Method { name: "_q_propertyChanged" } + Method { + name: "value" + type: "QVariant" + Parameter { name: "key"; type: "string" } + Parameter { name: "defaultValue"; type: "QVariant" } + } + Method { + name: "value" + type: "QVariant" + Parameter { name: "key"; type: "string" } + } + Method { + name: "setValue" + Parameter { name: "key"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Method { name: "sync" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/qmldir new file mode 100644 index 0000000..93d8e67 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/settings/qmldir @@ -0,0 +1,4 @@ +module Qt.labs.settings +plugin qmlsettingsplugin +classname QmlSettingsPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/libsharedimageplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/libsharedimageplugin.so new file mode 100755 index 0000000..4d257eb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/libsharedimageplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/plugins.qmltypes new file mode 100644 index 0000000..f4710cd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/plugins.qmltypes @@ -0,0 +1,10 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0"] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/qmldir new file mode 100644 index 0000000..079399d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/sharedimage/qmldir @@ -0,0 +1,3 @@ +module Qt.labs.sharedimage +plugin sharedimageplugin +classname QtQuickSharedImagePlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/libqmlwavefrontmeshplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/libqmlwavefrontmeshplugin.so new file mode 100755 index 0000000..83bb6f1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/libqmlwavefrontmeshplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/plugins.qmltypes new file mode 100644 index 0000000..d139ca9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/plugins.qmltypes @@ -0,0 +1,38 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0"] + Component { + file: "qwavefrontmesh.h" + name: "QWavefrontMesh" + prototype: "QQuickShaderEffectMesh" + exports: ["Qt.labs.wavefrontmesh/WavefrontMesh 1.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Error" + values: [ + "NoError", + "InvalidSourceError", + "UnsupportedFaceShapeError", + "UnsupportedIndexSizeError", + "FileNotFoundError", + "NoAttributesError", + "MissingPositionAttributeError", + "MissingTextureCoordinateAttributeError", + "MissingPositionAndTextureCoordinateAttributesError", + "TooManyAttributesError", + "InvalidPlaneDefinitionError" + ] + } + Property { name: "source"; type: "QUrl" } + Property { name: "lastError"; type: "Error"; isReadonly: true } + Property { name: "projectionPlaneV"; type: "QVector3D" } + Property { name: "projectionPlaneW"; type: "QVector3D" } + Method { name: "readData" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/qmldir new file mode 100644 index 0000000..fed15dd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/labs/wavefrontmesh/qmldir @@ -0,0 +1,4 @@ +module Qt.labs.wavefrontmesh +plugin qmlwavefrontmeshplugin +classname QmlWavefrontMeshPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/test/qtestroot/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/test/qtestroot/plugins.qmltypes new file mode 100644 index 0000000..17245df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/test/qtestroot/plugins.qmltypes @@ -0,0 +1,22 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0"] + Component { + file: "private/quicktest_p.h" + name: "QTestRootObject" + exports: ["Qt.test.qtestroot/QTestRootObject 1.0"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Property { name: "windowShown"; type: "bool"; isReadonly: true } + Property { name: "hasTestCase"; type: "bool" } + Property { name: "defined"; type: "QObject"; isReadonly: true; isPointer: true } + Method { name: "quit" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/test/qtestroot/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/test/qtestroot/qmldir new file mode 100644 index 0000000..5e9d5e2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/Qt/test/qtestroot/qmldir @@ -0,0 +1,2 @@ +module Qt.test.qtestroot +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/libdeclarative_bluetooth.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/libdeclarative_bluetooth.so new file mode 100755 index 0000000..1c1d637 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/libdeclarative_bluetooth.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/plugins.qmltypes new file mode 100644 index 0000000..2aac2df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/plugins.qmltypes @@ -0,0 +1,409 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtBluetooth 5.15' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QAbstractItemModel" + prototype: "QObject" + Enum { + name: "LayoutChangeHint" + values: { + "NoLayoutChangeHint": 0, + "VerticalSortHint": 1, + "HorizontalSortHint": 2 + } + } + Enum { + name: "CheckIndexOption" + values: { + "NoOption": 0, + "IndexIsValid": 1, + "DoNotUseParent": 2, + "ParentIsInvalid": 4 + } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + Parameter { name: "roles"; type: "QVector" } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + } + Signal { + name: "headerDataChanged" + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutChanged" } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutAboutToBeChanged" } + Signal { + name: "rowsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { name: "modelAboutToBeReset" } + Signal { name: "modelReset" } + Signal { + name: "rowsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationRow"; type: "int" } + } + Signal { + name: "rowsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "row"; type: "int" } + } + Signal { + name: "columnsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationColumn"; type: "int" } + } + Signal { + name: "columnsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "column"; type: "int" } + } + Method { name: "submit"; type: "bool" } + Method { name: "revert" } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "parent" + type: "QModelIndex" + Parameter { name: "child"; type: "QModelIndex" } + } + Method { + name: "sibling" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "idx"; type: "QModelIndex" } + } + Method { + name: "rowCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "rowCount"; type: "int" } + Method { + name: "columnCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "columnCount"; type: "int" } + Method { + name: "hasChildren" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "hasChildren"; type: "bool" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + } + Method { + name: "fetchMore" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "canFetchMore" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "flags" + type: "Qt::ItemFlags" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + Parameter { name: "flags"; type: "Qt::MatchFlags" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } + Component { + name: "QDeclarativeBluetoothDiscoveryModel" + prototype: "QAbstractListModel" + exports: [ + "QtBluetooth/BluetoothDiscoveryModel 5.0", + "QtBluetooth/BluetoothDiscoveryModel 5.2" + ] + exportMetaObjectRevisions: [0, 0] + Enum { + name: "DiscoveryMode" + values: { + "MinimalServiceDiscovery": 0, + "FullServiceDiscovery": 1, + "DeviceDiscovery": 2 + } + } + Enum { + name: "Error" + values: { + "NoError": 0, + "InputOutputError": 1, + "PoweredOffError": 2, + "UnknownError": 3, + "InvalidBluetoothAdapterError": 4 + } + } + Property { name: "error"; type: "Error"; isReadonly: true } + Property { name: "discoveryMode"; type: "DiscoveryMode" } + Property { name: "running"; type: "bool" } + Property { name: "uuidFilter"; type: "string" } + Property { name: "remoteAddress"; type: "string" } + Signal { + name: "serviceDiscovered" + Parameter { name: "service"; type: "QDeclarativeBluetoothService"; isPointer: true } + } + Signal { + name: "deviceDiscovered" + Parameter { name: "device"; type: "string" } + } + } + Component { + name: "QDeclarativeBluetoothService" + prototype: "QObject" + exports: [ + "QtBluetooth/BluetoothService 5.0", + "QtBluetooth/BluetoothService 5.2" + ] + exportMetaObjectRevisions: [0, 0] + Enum { + name: "Protocol" + values: { + "RfcommProtocol": 2, + "L2CapProtocol": 1, + "UnknownProtocol": 0 + } + } + Property { name: "deviceName"; type: "string"; isReadonly: true } + Property { name: "deviceAddress"; type: "string" } + Property { name: "serviceName"; type: "string" } + Property { name: "serviceDescription"; type: "string" } + Property { name: "serviceUuid"; type: "string" } + Property { name: "serviceProtocol"; type: "Protocol" } + Property { name: "registered"; type: "bool" } + Signal { name: "detailsChanged" } + Signal { name: "newClient" } + Method { name: "nextClient"; type: "QDeclarativeBluetoothSocket*" } + Method { + name: "assignNextClient" + Parameter { name: "dbs"; type: "QDeclarativeBluetoothSocket"; isPointer: true } + } + } + Component { + name: "QDeclarativeBluetoothSocket" + prototype: "QObject" + exports: [ + "QtBluetooth/BluetoothSocket 5.0", + "QtBluetooth/BluetoothSocket 5.2" + ] + exportMetaObjectRevisions: [0, 0] + Enum { + name: "Error" + values: { + "NoError": -2, + "UnknownSocketError": -1, + "RemoteHostClosedError": 1, + "HostNotFoundError": 2, + "ServiceNotFoundError": 9, + "NetworkError": 7, + "UnsupportedProtocolError": 8 + } + } + Enum { + name: "SocketState" + values: { + "Unconnected": 0, + "ServiceLookup": 1, + "Connecting": 2, + "Connected": 3, + "Bound": 4, + "Closing": 6, + "Listening": 5, + "NoServiceSet": 100 + } + } + Property { name: "service"; type: "QDeclarativeBluetoothService"; isPointer: true } + Property { name: "connected"; type: "bool" } + Property { name: "error"; type: "Error"; isReadonly: true } + Property { name: "socketState"; type: "SocketState"; isReadonly: true } + Property { name: "stringData"; type: "string" } + Signal { name: "stateChanged" } + Signal { name: "dataAvailable" } + Method { + name: "setService" + Parameter { name: "service"; type: "QDeclarativeBluetoothService"; isPointer: true } + } + Method { + name: "setConnected" + Parameter { name: "connected"; type: "bool" } + } + Method { + name: "sendStringData" + Parameter { name: "data"; type: "string" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/qmldir new file mode 100644 index 0000000..2f5b2fa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtBluetooth/qmldir @@ -0,0 +1,4 @@ +module QtBluetooth +plugin declarative_bluetooth +classname QBluetoothQmlPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Blend.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Blend.qml new file mode 100644 index 0000000..e5f4816 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Blend.qml @@ -0,0 +1,486 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype Blend + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-blend + \brief Merges two source items by using a blend mode. + + Blend mode can be selected with the \l{Blend::mode}{mode} property. + + \table + \header + \li source + \li foregroundSource + \li Effect applied + \row + \li \image Original_bug.png + \li \image Original_butterfly.png + \li \image Blend_bug_and_butterfly.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet Blend-example.qml example + +*/ + +Item { + id: rootItem + + /*! + This property defines the source item that is going to be the base when + \l{Blend::foregroundSource}{foregroundSource} is blended over it. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the item that is going to be blended over the + \l{Blend::source}{source}. + + \note It is not supported to let the effect include itself, for + instance by setting foregroundSource to the effect's parent. + */ + property variant foregroundSource + + /*! + This property defines the mode which is used when foregroundSource is + blended over source. Values are case insensitive. + + \table + \header + \li mode + \li description + \row + \li normal + \li The pixel component values from foregroundSource are written + over source by using alpha blending. + \row + \li addition + \li The pixel component values from source and foregroundSource are + added together and written. + \row + \li average + \li The pixel component values from source and foregroundSource are + averaged and written. + \row + \li color + \li The lightness value from source is combined with hue and + saturation from foregroundSource and written. + \row + \li colorBurn + \li The darker pixels from source are darkened more, if both source + and foregroundSource pixels are light the result is light. + \row + \li colorDodge + \li The lighter pixels from source are lightened more, if both + source and foregroundSource pixels are dark the result is dark. + \row + \li darken + \li The darker pixel component value from source and + foregroundSource is written. + \row + \li darkerColor + \li The lower luminance pixel rgb-value from source and + foregroundSource is written. + \row + \li difference + \li The absolute pixel component value difference between source and + foregroundSource is written. + \row + \li divide + \li The pixel component values from source is divided by the value + from foregroundSource and written. + \row + \li exclusion + \li The pixel component value difference with reduced contrast + between source and foregroundSource is written. + \row + \li hardLight + \li The pixel component values from source are lightened or darkened + according to foregroundSource values and written. + \row + \li hue + \li The hue value from foregroundSource is combined with saturation + and lightness from source and written. + \row + \li lighten + \li The lightest pixel component value from source and + foregroundSource is written. + \row + \li lighterColor + \li The higher luminance pixel rgb-value from source and + foregroundSource is written. + \row + \li lightness + \li The lightness value from foregroundSource is combined with hue + and saturation from source and written. + \row + \li multiply + \li The pixel component values from source and foregroundSource are + multiplied together and written. + \row + \li negation + \li The inverted absolute pixel component value difference between + source and foregroundSource is written. + \row + \li saturation + \li The saturation value from foregroundSource is combined with hue + and lightness from source and written. + \row + \li screen + \li The pixel values from source and foregroundSource are negated, + then multiplied, negated again, and written. + \row + \li subtract + \li Pixel value from foregroundSource is subracted from source and + written. + \row + \li softLight + \li The pixel component values from source are lightened or darkened + slightly according to foregroundSource values and written. + + \endtable + + \table + \header + \li Example source + \li Example foregroundSource + \row + \li \image Original_bug.png + \li \image Original_butterfly.png + \endtable + + \table + \header + \li Output examples with different mode values + \li + \li + \row + \li \image Blend_mode1.png + \li \image Blend_mode2.png + \li \image Blend_mode3.png + \row + \li \b { mode: normal } + \li \b { mode: addition } + \li \b { mode: average } + \row + \li \image Blend_mode4.png + \li \image Blend_mode5.png + \li \image Blend_mode6.png + \row + \li \b { mode: color } + \li \b { mode: colorBurn } + \li \b { mode: colorDodge } + \row + \li \image Blend_mode7.png + \li \image Blend_mode8.png + \li \image Blend_mode9.png + \row + \li \b { mode: darken } + \li \b { mode: darkerColor } + \li \b { mode: difference } + \row + \li \image Blend_mode10.png + \li \image Blend_mode11.png + \li \image Blend_mode12.png + \row + \li \b { mode: divide } + \li \b { mode: exclusion } + \li \b { mode: hardlight } + \row + \li \image Blend_mode13.png + \li \image Blend_mode14.png + \li \image Blend_mode15.png + \row + \li \b { mode: hue } + \li \b { mode: lighten } + \li \b { mode: lighterColor } + \row + \li \image Blend_mode16.png + \li \image Blend_mode17.png + \li \image Blend_mode18.png + \row + \li \b { mode: lightness } + \li \b { mode: negation } + \li \b { mode: multiply } + \row + \li \image Blend_mode19.png + \li \image Blend_mode20.png + \li \image Blend_mode21.png + \row + \li \b { mode: saturation } + \li \b { mode: screen } + \li \b { mode: subtract } + \row + \li \image Blend_mode22.png + \row + \li \b { mode: softLight } + \endtable + */ + property string mode: "normal" + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in the + cache must be updated. Memory consumption is increased, because an extra + buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to false. + + */ + property bool cached: false + + SourceProxy { + id: backgroundSourceProxy + input: rootItem.source + } + + SourceProxy { + id: foregroundSourceProxy + input: rootItem.foregroundSource + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant backgroundSource: backgroundSourceProxy.output + property variant foregroundSource: foregroundSourceProxy.output + property string mode: rootItem.mode + anchors.fill: parent + + fragmentShader: fragmentShaderBegin + blendModeNormal + fragmentShaderEnd + + function buildFragmentShader() { + var shader = fragmentShaderBegin + + switch (mode.toLowerCase()) { + case "addition" : shader += blendModeAddition; break; + case "average" : shader += blendModeAverage; break; + case "color" : shader += blendModeColor; break; + case "colorburn" : shader += blendModeColorBurn; break; + case "colordodge" : shader += blendModeColorDodge; break; + case "darken" : shader += blendModeDarken; break; + case "darkercolor" : shader += blendModeDarkerColor; break; + case "difference" : shader += blendModeDifference; break; + case "divide" : shader += blendModeDivide; break; + case "exclusion" : shader += blendModeExclusion; break; + case "hardlight" : shader += blendModeHardLight; break; + case "hue" : shader += blendModeHue; break; + case "lighten" : shader += blendModeLighten; break; + case "lightercolor" : shader += blendModeLighterColor; break; + case "lightness" : shader += blendModeLightness; break; + case "negation" : shader += blendModeNegation; break; + case "normal" : shader += blendModeNormal; break; + case "multiply" : shader += blendModeMultiply; break; + case "saturation" : shader += blendModeSaturation; break; + case "screen" : shader += blendModeScreen; break; + case "subtract" : shader += blendModeSubtract; break; + case "softlight" : shader += blendModeSoftLight; break; + default: shader += "gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);"; break; + } + + shader += fragmentShaderEnd + fragmentShader = shader + + // Workaraound for a bug just to make sure display gets updated when the mode changes. + backgroundSourceChanged() + } + + Component.onCompleted: { + buildFragmentShader() + } + + onModeChanged: { + buildFragmentShader() + } + + property string blendModeAddition: "result.rgb = min(rgb1 + rgb2, 1.0);" + property string blendModeAverage: "result.rgb = 0.5 * (rgb1 + rgb2);" + property string blendModeColor: "result.rgb = HSLtoRGB(vec3(RGBtoHSL(rgb2).xy, RGBtoL(rgb1)));" + property string blendModeColorBurn: "result.rgb = clamp(1.0 - ((1.0 - rgb1) / max(vec3(1.0 / 256.0), rgb2)), vec3(0.0), vec3(1.0));" + property string blendModeColorDodge: "result.rgb = clamp(rgb1 / max(vec3(1.0 / 256.0), (1.0 - rgb2)), vec3(0.0), vec3(1.0));" + property string blendModeDarken: "result.rgb = min(rgb1, rgb2);" + property string blendModeDarkerColor: "result.rgb = 0.3 * rgb1.r + 0.59 * rgb1.g + 0.11 * rgb1.b > 0.3 * rgb2.r + 0.59 * rgb2.g + 0.11 * rgb2.b ? rgb2 : rgb1;" + property string blendModeDifference: "result.rgb = abs(rgb1 - rgb2);" + property string blendModeDivide: "result.rgb = clamp(rgb1 / rgb2, 0.0, 1.0);" + property string blendModeExclusion: "result.rgb = rgb1 + rgb2 - 2.0 * rgb1 * rgb2;" + property string blendModeHardLight: "result.rgb = vec3(channelBlendHardLight(rgb1.r, rgb2.r), channelBlendHardLight(rgb1.g, rgb2.g), channelBlendHardLight(rgb1.b, rgb2.b));" + property string blendModeHue: "result.rgb = HSLtoRGB(vec3(RGBtoHSL(rgb2).x, RGBtoHSL(rgb1).yz));" + property string blendModeLighten: "result.rgb = max(rgb1, rgb2);" + property string blendModeLighterColor: "result.rgb = 0.3 * rgb1.r + 0.59 * rgb1.g + 0.11 * rgb1.b > 0.3 * rgb2.r + 0.59 * rgb2.g + 0.11 * rgb2.b ? rgb1 : rgb2;" + property string blendModeLightness: "result.rgb = HSLtoRGB(vec3(RGBtoHSL(rgb1).xy, RGBtoL(rgb2)));" + property string blendModeMultiply: "result.rgb = rgb1 * rgb2;" + property string blendModeNegation: "result.rgb = 1.0 - abs(1.0 - rgb1 - rgb2);" + property string blendModeNormal: "result.rgb = rgb2; a = max(color1.a, color2.a);" + property string blendModeSaturation: "lowp vec3 hsl1 = RGBtoHSL(rgb1); result.rgb = HSLtoRGB(vec3(hsl1.x, RGBtoHSL(rgb2).y, hsl1.z));" + property string blendModeScreen: "result.rgb = 1.0 - (vec3(1.0) - rgb1) * (vec3(1.0) - rgb2);" + property string blendModeSubtract: "result.rgb = max(rgb1 - rgb2, vec3(0.0));" + property string blendModeSoftLight: "result.rgb = rgb1 * ((1.0 - rgb1) * rgb2 + (1.0 - (1.0 - rgb1) * (1.0 - rgb2)));" + + property string fragmentCoreShaderWorkaround: (GraphicsInfo.profile === GraphicsInfo.OpenGLCoreProfile ? "#version 150 core + #define varying in + #define texture2D texture + out vec4 fragColor; + #define gl_FragColor fragColor + " : "") + + property string fragmentShaderBegin: fragmentCoreShaderWorkaround + " + varying mediump vec2 qt_TexCoord0; + uniform highp float qt_Opacity; + uniform lowp sampler2D backgroundSource; + uniform lowp sampler2D foregroundSource; + + highp float RGBtoL(highp vec3 color) { + highp float cmin = min(color.r, min(color.g, color.b)); + highp float cmax = max(color.r, max(color.g, color.b)); + highp float l = (cmin + cmax) / 2.0; + return l; + } + + highp vec3 RGBtoHSL(highp vec3 color) { + highp float cmin = min(color.r, min(color.g, color.b)); + highp float cmax = max(color.r, max(color.g, color.b)); + highp float h = 0.0; + highp float s = 0.0; + highp float l = (cmin + cmax) / 2.0; + highp float diff = cmax - cmin; + + if (diff > 1.0 / 256.0) { + if (l < 0.5) + s = diff / (cmin + cmax); + else + s = diff / (2.0 - (cmin + cmax)); + + if (color.r == cmax) + h = (color.g - color.b) / diff; + else if (color.g == cmax) + h = 2.0 + (color.b - color.r) / diff; + else + h = 4.0 + (color.r - color.g) / diff; + + h /= 6.0; + } + return vec3(h, s, l); + } + + highp float hueToIntensity(highp float v1, highp float v2, highp float h) { + h = fract(h); + if (h < 1.0 / 6.0) + return v1 + (v2 - v1) * 6.0 * h; + else if (h < 1.0 / 2.0) + return v2; + else if (h < 2.0 / 3.0) + return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h); + + return v1; + } + + highp vec3 HSLtoRGB(highp vec3 color) { + highp float h = color.x; + highp float l = color.z; + highp float s = color.y; + + if (s < 1.0 / 256.0) + return vec3(l, l, l); + + highp float v1; + highp float v2; + if (l < 0.5) + v2 = l * (1.0 + s); + else + v2 = (l + s) - (s * l); + + v1 = 2.0 * l - v2; + + highp float d = 1.0 / 3.0; + highp float r = hueToIntensity(v1, v2, h + d); + highp float g = hueToIntensity(v1, v2, h); + highp float b = hueToIntensity(v1, v2, h - d); + return vec3(r, g, b); + } + + lowp float channelBlendHardLight(lowp float c1, lowp float c2) { + return c2 > 0.5 ? (1.0 - (1.0 - 2.0 * (c2 - 0.5)) * (1.0 - c1)) : (2.0 * c1 * c2); + } + + void main() { + lowp vec4 result = vec4(0.0); + lowp vec4 color1 = texture2D(backgroundSource, qt_TexCoord0); + lowp vec4 color2 = texture2D(foregroundSource, qt_TexCoord0); + lowp vec3 rgb1 = color1.rgb / max(1.0/256.0, color1.a); + lowp vec3 rgb2 = color2.rgb / max(1.0/256.0, color2.a); + highp float a = max(color1.a, color1.a * color2.a); + " + + property string fragmentShaderEnd: " + gl_FragColor.rgb = mix(rgb1, result.rgb, color2.a); + gl_FragColor.rbg *= a; + gl_FragColor.a = a; + gl_FragColor *= qt_Opacity; + } + " + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/BrightnessContrast.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/BrightnessContrast.qml new file mode 100644 index 0000000..85b38bb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/BrightnessContrast.qml @@ -0,0 +1,194 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype BrightnessContrast + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-color + \brief Adjusts brightness and contrast. + + This effect adjusts the source item colors. + Brightness adjustment changes the perceived luminance of the source item. + Contrast adjustment increases or decreases the color + and brightness variations. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image BrightnessContrast_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet BrightnessContrast-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that provides the source pixels + for the effect. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines how much the source brightness is increased or + decreased. + + The value ranges from -1.0 to 1.0. By default, the property is set to \c + 0.0 (no change). + + \table + \header + \li Output examples with different brightness values + \li + \li + \row + \li \image BrightnessContrast_brightness1.png + \li \image BrightnessContrast_brightness2.png + \li \image BrightnessContrast_brightness3.png + \row + \li \b { brightness: -0.25 } + \li \b { brightness: 0 } + \li \b { brightness: 0.5 } + \row + \li \l contrast: 0 + \li \l contrast: 0 + \li \l contrast: 0 + \endtable + + */ + property real brightness: 0.0 + + /*! + This property defines how much the source contrast is increased or + decreased. The decrease of the contrast is linear, but the increase is + applied with a non-linear curve to allow very high contrast adjustment at + the high end of the value range. + + \table + \header + \li Contrast adjustment curve + \row + \li \image BrightnessContrast_contrast_graph.png + \endtable + + The value ranges from -1.0 to 1.0. By default, the property is set to \c 0.0 (no change). + + \table + \header + \li Output examples with different contrast values + \li + \li + \row + \li \image BrightnessContrast_contrast1.png + \li \image BrightnessContrast_contrast2.png + \li \image BrightnessContrast_contrast3.png + \row + \li \b { contrast: -0.5 } + \li \b { contrast: 0 } + \li \b { contrast: 0.5 } + \row + \li \l brightness: 0 + \li \l brightness: 0 + \li \l brightness: 0 + \endtable + + */ + property real contrast: 0.0 + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + interpolation: input && input.smooth ? SourceProxy.LinearInterpolation : SourceProxy.NearestInterpolation + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property real brightness: rootItem.brightness + property real contrast: rootItem.contrast + + anchors.fill: parent + blending: !rootItem.cached + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/brightnesscontrast.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ColorOverlay.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ColorOverlay.qml new file mode 100644 index 0000000..f348541 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ColorOverlay.qml @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype ColorOverlay + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-color + \brief Alters the colors of the source item by applying an overlay color. + + The effect is similar to what happens when a colorized glass is put on top + of a grayscale image. The color for the overlay is given in the RGBA format. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_butterfly.png + \li \image ColorOverlay_butterfly.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet ColorOverlay-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that provides the source pixels + for the effect. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the RGBA color value which is used to colorize the + source. + + By default, the property is set to \c "transparent". + + \table + \header + \li Output examples with different color values + \li + \li + \row + \li \image ColorOverlay_color1.png + \li \image ColorOverlay_color2.png + \li \image ColorOverlay_color3.png + \row + \li \b { color: #80ff0000 } + \li \b { color: #8000ff00 } + \li \b { color: #800000ff } + \endtable + + */ + property color color: "transparent" + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + interpolation: input && input.smooth ? SourceProxy.LinearInterpolation : SourceProxy.NearestInterpolation + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property color color: rootItem.color + + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/coloroverlay.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Colorize.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Colorize.qml new file mode 100644 index 0000000..42f1796 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Colorize.qml @@ -0,0 +1,238 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype Colorize + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-color + \brief Sets the color in the HSL color space. + + The effect is similar to what happens when a colorized glass is put on top + of a grayscale image. Colorize uses the hue, saturation, and lightness (HSL) + color space. You can specify a desired value for each property. You can + shift all HSL values with the + \l{QtGraphicalEffects::HueSaturation}{HueSaturation} effect. + + Alternatively, you can use the + \l{QtGraphicalEffects::ColorOverlay}{ColorOverlay} effect to colorize the + source item in the RGBA color space. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image Colorize_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet Colorize-example.qml example +*/ +Item { + id: rootItem + + /*! + This property defines the source item that provides the source pixels + for the effect. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the hue value which is used to colorize the + source. + + The value ranges from 0.0 to 1.0. By default, the property is set to \c + 0.0, which produces a slightly red color. + + \table + \header + \li Allowed hue values + \row + \li \image Colorize_hue_scale.png + \endtable + + \table + \header + \li Output examples with different hue values + \li + \li + \row + \li \image Colorize_hue1.png + \li \image Colorize_hue2.png + \li \image Colorize_hue3.png + \row + \li \b { hue: 0.2 } + \li \b { hue: 0.5 } + \li \b { hue: 0.8 } + \row + \li \l saturation: 1 + \li \l saturation: 1 + \li \l saturation: 1 + \row + \li \l lightness: 0 + \li \l lightness: 0 + \li \l lightness: 0 + \endtable + */ + property real hue: 0.0 + + /*! + This property defines the saturation value which is used to colorize the + source. + + The value ranges from 0.0 (desaturated) to 1.0 (saturated). By default, + the property is set to \c 1.0 (saturated). + + \table + \header + \li Output examples with different saturation values + \li + \li + \row + \li \image Colorize_saturation1.png + \li \image Colorize_saturation2.png + \li \image Colorize_saturation3.png + \row + \li \b { saturation: 0 } + \li \b { saturation: 0.5 } + \li \b { saturation: 1 } + \row + \li \l hue: 0 + \li \l hue: 0 + \li \l hue: 0 + \row + \li \l lightness: 0 + \li \l lightness: 0 + \li \l lightness: 0 + \endtable + */ + property real saturation: 1.0 + + /*! + This property defines how much the source lightness value is increased + or decreased. + + Unlike hue and saturation properties, lightness does not set the used + value, but it shifts the existing source pixel lightness value. + + The value ranges from -1.0 (decreased) to 1.0 (increased). By default, + the property is set to \c 0.0 (no change). + + \table + \header + \li Output examples with different lightness values + \li + \li + \row + \li \image Colorize_lightness1.png + \li \image Colorize_lightness2.png + \li \image Colorize_lightness3.png + \row + \li \b { lightness: -0.75 } + \li \b { lightness: 0 } + \li \b { lightness: 0.75 } + \row + \li \l hue: 0 + \li \l hue: 0 + \li \l hue: 0 + \row + \li \l saturation: 1 + \li \l saturation: 1 + \li \l saturation: 1 + \endtable + */ + property real lightness: 0.0 + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + interpolation: input && input.smooth ? SourceProxy.LinearInterpolation : SourceProxy.NearestInterpolation + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property real hue: rootItem.hue + property real saturation: rootItem.saturation + property real lightness: rootItem.lightness + + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/colorize.frag" + + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ConicalGradient.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ConicalGradient.qml new file mode 100644 index 0000000..c8d68b1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ConicalGradient.qml @@ -0,0 +1,333 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype ConicalGradient + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-gradient + \brief Draws a conical gradient. + + A gradient is defined by two or more colors, which are blended seamlessly. + The colors start from the specified angle and end at 360 degrees larger + angle value. + + \table + \header + \li Effect applied + \row + \li \image ConicalGradient.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet ConicalGradient-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + /*! + This property defines the starting angle where the color at the gradient + position of 0.0 is rendered. Colors at larger position values are + rendered into larger angle values and blended seamlessly. Angle values + increase clockwise. + + \table + \header + \li Output examples with different angle values + \li + \li + \row + \li \image ConicalGradient_angle1.png + \li \image ConicalGradient_angle2.png + \li \image ConicalGradient_angle3.png + \row + \li \b { angle: 0 } + \li \b { angle: 45 } + \li \b { angle: 185 } + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + + */ + property real angle: 0.0 + + /*! + \qmlproperty real QtGraphicalEffects::ConicalGradient::horizontalOffset + \qmlproperty real QtGraphicalEffects::ConicalGradient::verticalOffset + + The horizontalOffset and verticalOffset properties define the offset in + pixels for the center point of the gradient compared to the item center. + + The value ranges from -inf to inf. By default, the properties are set to \c + 0. + + \table + \header + \li Output examples with different horizontalOffset values + \li + \li + \row + \li \image ConicalGradient_horizontalOffset1.png + \li \image ConicalGradient_horizontalOffset2.png + \li \image ConicalGradient_horizontalOffset3.png + \row + \li \b { horizontalOffset: -50 } + \li \b { horizontalOffset: 0 } + \li \b { horizontalOffset: 50 } + \row + \li \l angle: 0 + \li \l angle: 0 + \li \l angle: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + */ + property real horizontalOffset: 0.0 + property real verticalOffset: 0.0 + + /*! + This property defines the item that is going to be filled with gradient. + Source item gets rendered into an intermediate pixel buffer and the + alpha values from the result are used to determine the gradient's pixels + visibility in the display. The default value for source is undefined and + in that case whole effect area is filled with gradient. + + \table + \header + \li Output examples with different source values + \li + \row + \li \image ConicalGradient_maskSource1.png + \li \image ConicalGradient_maskSource2.png + \row + \li \b { source: undefined } + \li \b { source: } + \row + \li \l angle: 0 + \li \l angle: 0 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + +/*! + A gradient is defined by two or more colors, which are blended seamlessly. + The colors are specified as a set of GradientStop child items, each of which + defines a position on the gradient (from 0.0 to 1.0), and a color. + The position of each GradientStop is defined by the position property. + The color is defined by the color property. + + \table + \header + \li Output examples with different gradient values + \li + \li + \row + \li \image ConicalGradient_gradient1.png + \li \image ConicalGradient_gradient2.png + \li \image ConicalGradient_gradient3.png + \row + \li \b {gradient:} \code +Gradient { + GradientStop { + position: 0.000 + color: Qt.rgba(1, 0, 0, 1) + } + GradientStop { + position: 0.167 + color: Qt.rgba(1, 1, 0, 1) + } + GradientStop { + position: 0.333 + color: Qt.rgba(0, 1, 0, 1) + } + GradientStop { + position: 0.500 + color: Qt.rgba(0, 1, 1, 1) + } + GradientStop { + position: 0.667 + color: Qt.rgba(0, 0, 1, 1) + } + GradientStop { + position: 0.833 + color: Qt.rgba(1, 0, 1, 1) + } + GradientStop { + position: 1.000 + color: Qt.rgba(1, 0, 0, 1) + } +} + \endcode + \li \b {gradient:} \code +Gradient { + GradientStop { + position: 0.0 + color: "#F0F0F0" + } + GradientStop { + position: 0.5 + color: "#000000" + } + GradientStop { + position: 1.0 + color: "#F0F0F0" + } +} + \endcode + \li \b {gradient:} \code +Gradient { + GradientStop { + position: 0.0 + color: "#00000000" + } + GradientStop { + position: 1.0 + color: "#FF000000" + } +} + \endcode + \row + \li \l angle: 0 + \li \l angle: 0 + \li \l angle: 0 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + +*/ + property Gradient gradient: Gradient { + GradientStop { position: 0.0; color: "white" } + GradientStop { position: 1.0; color: "black" } + } + + SourceProxy { + id: maskSourceProxy + input: rootItem.source + } + + Rectangle { + id: gradientRect + width: 16 + height: 256 + gradient: rootItem.gradient + smooth: true + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + rotation: shaderItem.rotation + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant gradientSource: ShaderEffectSource { + sourceItem: gradientRect + smooth: true + hideSource: true + visible: false + } + property variant maskSource: maskSourceProxy.output + property real startAngle: (rootItem.angle - 90) * Math.PI/180 + property variant center: Qt.point(0.5 + horizontalOffset / width, 0.5 + verticalOffset / height) + + anchors.fill: parent + + fragmentShader: maskSource == undefined ? noMaskShader : maskShader + + onFragmentShaderChanged: startAngleChanged() + + property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/conicalgradient_nomask.frag" + property string maskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/conicalgradient_mask.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Desaturate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Desaturate.qml new file mode 100644 index 0000000..e56de55 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Desaturate.qml @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype Desaturate + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-color + \brief Reduces the saturation of the colors. + + Desaturated pixel values are calculated as averages of the original RGB + component values of the source item. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image Desaturate_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet Desaturate-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that provides the source pixels to + the effect. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines how much the source colors are desaturated. + + The value ranges from 0.0 (no change) to 1.0 (desaturated). By default, + the property is set to \c 0.0 (no change). + + \table + \header + \li Output examples with different desaturation values + \li + \li + \row + \li \image Desaturate_desaturation1.png + \li \image Desaturate_desaturation2.png + \li \image Desaturate_desaturation3.png + \row + \li \b { desaturation: 0.0 } + \li \b { desaturation: 0.5 } + \li \b { desaturation: 1.0 } + \endtable + */ + property real desaturation: 0.0 + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + interpolation: input && input.smooth ? SourceProxy.LinearInterpolation : SourceProxy.NearestInterpolation + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property real desaturation: rootItem.desaturation + + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/desaturate.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/DirectionalBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/DirectionalBlur.qml new file mode 100644 index 0000000..42ea078 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/DirectionalBlur.qml @@ -0,0 +1,293 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype DirectionalBlur + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-motion-blur + \brief Applies blur effect to the specified direction. + + Effect creates perceived impression that the source item appears to be + moving in the direction of the blur. Blur is applied to both sides of + each pixel, therefore setting the direction to 0 and 180 provides the + same result. + + Other available motionblur effects are \l{QtGraphicalEffects::ZoomBlur}{ZoomBlur} and + \l{QtGraphicalEffects::RadialBlur}{RadialBlur}. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image DirectionalBlur_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet DirectionalBlur-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that is going to be blurred. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the perceived amount of movement for each pixel. + The movement is divided evenly to both sides of each pixel. + + The quality of the blur depends on \l{DirectionalBlur::samples}{samples} + property. If length value is large, more samples are needed to keep the + visual quality at high level. + + The value ranges from 0.0 to inf. + By default the property is set to \c 0.0 (no blur). + + \table + \header + \li Output examples with different length values + \li + \li + \row + \li \image DirectionalBlur_length1.png + \li \image DirectionalBlur_length2.png + \li \image DirectionalBlur_length3.png + \row + \li \b { length: 0.0 } + \li \b { length: 32.0 } + \li \b { length: 48.0 } + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l angle: 0 + \li \l angle: 0 + \li \l angle: 0 + \endtable + + */ + property real length: 0.0 + + /*! + This property defines how many samples are taken per pixel when blur + calculation is done. Larger value produces better quality, but is slower + to render. + + This property is not intended to be animated. Changing this property may + cause the underlying OpenGL shaders to be recompiled. + + Allowed values are between 0 and inf (practical maximum depends on GPU). + By default the property is set to \c 0 (no samples). + + */ + property int samples: 0 + + /*! + This property defines the direction for the blur. Blur is applied to + both sides of each pixel, therefore setting the direction to 0 and 180 + produces the same result. + + The value ranges from -180.0 to 180.0. + By default the property is set to \c 0.0. + + \table + \header + \li Output examples with different angle values + \li + \li + \row + \li \image DirectionalBlur_angle1.png + \li \image DirectionalBlur_angle2.png + \li \image DirectionalBlur_angle3.png + \row + \li \b { angle: 0.0 } + \li \b { angle: 45.0 } + \li \b { angle: 90.0 } + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l length: 32 + \li \l length: 32 + \li \l length: 32 + \endtable + + */ + property real angle: 0.0 + + /*! + This property defines the blur behavior near the edges of the item, + where the pixel blurring is affected by the pixels outside the source + edges. + + If the property is set to \c true, the pixels outside the source are + interpreted to be transparent, which is similar to OpenGL + clamp-to-border extension. The blur is expanded slightly outside the + effect item area. + + If the property is set to \c false, the pixels outside the source are + interpreted to contain the same color as the pixels at the edge of the + item, which is similar to OpenGL clamp-to-edge behavior. The blur does + not expand outside the effect item area. + + By default, the property is set to \c false. + + */ + property bool transparentBorder: false + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + sourceRect: rootItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2.0, parent.height + 2.0) : Qt.rect(0, 0, 0, 0) + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property real len: rootItem.length + property bool transparentBorder: rootItem.transparentBorder + property real samples: rootItem.samples + property real weight: 1.0 / Math.max(1.0, rootItem.samples) + property variant expandPixels: transparentBorder ? Qt.size(rootItem.samples, rootItem.samples) : Qt.size(0,0) + property variant expand: transparentBorder ? Qt.size(expandPixels.width / width, expandPixels.height / height) : Qt.size(0,0) + property variant delta: Qt.size(1.0 / rootItem.width * Math.cos((rootItem.angle + 90) * Math.PI/180), 1.0 / rootItem.height * Math.sin((rootItem.angle + 90) * Math.PI/180)) + + x: transparentBorder ? -expandPixels.width - 1: 0 + y: transparentBorder ? -expandPixels.height - 1 : 0 + width: transparentBorder ? parent.width + 2.0 * expandPixels.width + 2 : parent.width + height: transparentBorder ? parent.height + 2.0 * expandPixels.height + 2 : parent.height + + property string fragmentShaderSkeleton: " + varying highp vec2 qt_TexCoord0; + uniform highp float qt_Opacity; + uniform lowp sampler2D source; + uniform highp float len; + uniform highp float samples; + uniform highp float weight; + uniform highp vec2 expand; + uniform highp vec2 delta; + + void main(void) { + highp vec2 shift = delta * len / max(1.0, samples - 1.0); + mediump vec2 texCoord = qt_TexCoord0; + gl_FragColor = vec4(0.0); + + PLACEHOLDER_EXPAND_STEPS + + texCoord -= shift * max(0.0, samples - 1.0) * 0.5; + + PLACEHOLDER_UNROLLED_LOOP + + gl_FragColor *= weight * qt_Opacity; + } + " + + function buildFragmentShader() { + var shader = "" + if (GraphicsInfo.profile === GraphicsInfo.OpenGLCoreProfile) + shader += "#version 150 core\n#define varying in\n#define texture2D texture\nout vec4 fragColor;\n#define gl_FragColor fragColor\n" + shader += fragmentShaderSkeleton + var expandSteps = "" + + if (transparentBorder) { + expandSteps += "texCoord = (texCoord - expand) / (1.0 - 2.0 * expand);" + } + + var unrolledLoop = "gl_FragColor += texture2D(source, texCoord);\n" + + if (rootItem.samples > 1) { + unrolledLoop = "" + for (var i = 0; i < rootItem.samples; i++) + unrolledLoop += "gl_FragColor += texture2D(source, texCoord); texCoord += shift;\n" + } + + shader = shader.replace("PLACEHOLDER_EXPAND_STEPS", expandSteps) + fragmentShader = shader.replace("PLACEHOLDER_UNROLLED_LOOP", unrolledLoop) + } + + onFragmentShaderChanged: sourceChanged() + onSamplesChanged: buildFragmentShader() + onTransparentBorderChanged: buildFragmentShader() + Component.onCompleted: buildFragmentShader() + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Displace.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Displace.qml new file mode 100644 index 0000000..3400222 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Displace.qml @@ -0,0 +1,190 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype Displace + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-distortion + \brief Moves the pixels of the source item according to the given + displacement map. + + \table + \header + \li Source + \li DisplacementSource + \li Effect applied + \row + \li \image Original_bug.png + \li \image Displace_map.png + \li \image Displace_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet Displace-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item for the pixels that are going to + be displaced according to the data from + \l{Displace::displacementSource}{displacementSource}. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the item that is going to be used as the + displacement map. The displacementSource item gets rendered into the + intermediate pixel buffer. The red and green component values from the + result determine the displacement of the pixels from the source item. + + The format for the displacement map is similar to the tangent space + normal maps, which can be created with most 3D-modeling tools. Many + image processing tools include the support for generating normal maps. + Alternatively, the displacement map for this effect can also be a QML + element which is colored appropriately. Like any QML element, it can be + animated. It is recommended that the size of the diplacement map matches + the size of the \l{Displace::source}{source}. + + The displace data is interpreted in the RGBA format. For every pixel: + the red channel stores the x-axis displacement, and the green channel + stores the y-axis displacement. Blue and alpha channels are ignored for + this effect. + + Assuming that red channel value 1.0 is fully red (0.0 having no red at + all), this effect considers pixel component value 0.5 to cause no + displacement at all. Values above 0.5 shift pixels to the left, values + below 0.5 do the shift to the right. In a similar way, green channel + values above 0.5 displace the pixels upwards, and values below 0.5 shift + the pixels downwards. The actual amount of displacement in pixels + depends on the \l displacement property. + + */ + property variant displacementSource + + /*! + This property defines the scale for the displacement. The bigger scale, + the bigger the displacement of the pixels. The value set to 0.0 causes + no displacement. + + The value ranges from -1.0 (inverted maximum shift, according to + displacementSource) to 1.0 (maximum shift, according to + displacementSource). By default, the property is set to \c 0.0 (no + displacement). + + \table + \header + \li Output examples with different displacement values + \li + \li + \row + \li \image Displace_displacement1.png + \li \image Displace_displacement2.png + \li \image Displace_displacement3.png + \row + \li \b { displacement: -0.2 } + \li \b { displacement: 0.0 } + \li \b { displacement: 0.2 } + \endtable + + */ + property real displacement: 0.0 + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + SourceProxy { + id: displacementSourceProxy + input: rootItem.displacementSource + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property variant displacementSource: displacementSourceProxy.output + property real displacement: rootItem.displacement + property real xPixel: 1.0/width + property real yPixel: 1.0/height + + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/displace.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/DropShadow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/DropShadow.qml new file mode 100644 index 0000000..0f30e5a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/DropShadow.qml @@ -0,0 +1,362 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2017 Jolla Ltd, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype DropShadow + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-drop-shadow + + \brief Generates a soft shadow behind the source item. + + The DropShadow effect blurs the alpha channel of the input, colorizes the + result and places it behind the source object to create a soft shadow. The + shadow's color can be changed using the \l {DropShadow::color}{color} + property. The location of the shadow can be changed with the \l + horizontalOffset and \l verticalOffset properties. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_butterfly.png + \li \image DropShadow_butterfly.png + \endtable + + The soft shadow is created by blurring the image live using a gaussian + blur. Performing blur live is a costly operation. Fullscreen gaussian blur + with even a moderate number of samples will only run at 60 fps on highend + graphics hardware. + + When the source is static, the \l cached property can be set to allocate + another buffer to avoid performing the blur every time it is drawn. + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet DropShadow-example.qml example + +*/ +Item { + id: root + + DropShadowBase { + id: dbs + anchors.fill: parent + } + + /*! + This property defines the source item that is going to be used as the + source for the generated shadow. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property alias source: dbs.source + + /*! + \qmlproperty int DropShadow::radius + + Radius defines the softness of the shadow. A larger radius causes the + edges of the shadow to appear more blurry. + + The ideal blur is achieved by selecting \c samples and \c radius such + that \c {samples = 1 + radius * 2}, such as: + + \table + \header \li Radius \li Samples + \row \li 0 \e{(no blur)} \li 1 + \row \li 1 \li 3 + \row \li 2 \li 5 + \row \li 3 \li 7 + \endtable + + By default, the property is set to \c {floor(samples/2)}. + + \table + \header + \li Output examples with different radius values + \li + \li + \row + \li \image DropShadow_radius1.png + \li \image DropShadow_radius2.png + \li \image DropShadow_radius3.png + \row + \li \b { radius: 0 } + \li \b { radius: 6 } + \li \b { radius: 12 } + \row + \li \l samples: 25 + \li \l samples: 25 + \li \l samples: 25 + \row + \li \l color: #000000 + \li \l color: #000000 + \li \l color: #000000 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 20 + \li \l verticalOffset: 20 + \li \l verticalOffset: 20 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \endtable + */ + property alias radius: dbs.radius; + + /*! + This property defines how many samples are taken per pixel when edge + softening blur calculation is done. Larger value produces better + quality, but is slower to render. + + Ideally, this value should be twice as large as the highest required + radius value plus one, such as: + + \table + \header \li Radius \li Samples + \row \li 0 \e{(no blur)} \li 1 + \row \li 1 \li 3 + \row \li 2 \li 5 + \row \li 3 \li 7 + \endtable + + By default, the property is set to \c 9. + + This property is not intended to be animated. Changing this property will + cause the underlying OpenGL shaders to be recompiled. + */ + property alias samples: dbs.samples + + /*! + This property defines the RGBA color value which is used for the shadow. + + By default, the property is set to \c "black". + + \table + \header + \li Output examples with different color values + \li + \li + \row + \li \image DropShadow_color1.png + \li \image DropShadow_color2.png + \li \image DropShadow_color3.png + \row + \li \b { color: #000000 } + \li \b { color: #0000ff } + \li \b { color: #aa000000 } + \row + \li \l radius: 8 + \li \l radius: 8 + \li \l radius: 8 + \row + \li \l samples: 17 + \li \l samples: 17 + \li \l samples: 17 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 20 + \li \l verticalOffset: 20 + \li \l verticalOffset: 20 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \endtable + */ + property alias color: dbs.color + + /*! + \qmlproperty real QtGraphicalEffects::DropShadow::horizontalOffset + \qmlproperty real QtGraphicalEffects::DropShadow::verticalOffset + + HorizontalOffset and verticalOffset properties define the offset for the + rendered shadow compared to the DropShadow item position. Often, the + DropShadow item is anchored so that it fills the source element. In this + case, if the HorizontalOffset and verticalOffset properties are set to + 0, the shadow is rendered exactly under the source item. By changing the + offset properties, the shadow can be positioned relatively to the source + item. + + The values range from -inf to inf. By default, the properties are set to + \c 0. + + \table + \header + \li Output examples with different horizontalOffset values + \li + \li + \row + \li \image DropShadow_horizontalOffset1.png + \li \image DropShadow_horizontalOffset2.png + \li \image DropShadow_horizontalOffset3.png + \row + \li \b { horizontalOffset: -20 } + \li \b { horizontalOffset: 0 } + \li \b { horizontalOffset: 20 } + \row + \li \l radius: 4 + \li \l radius: 4 + \li \l radius: 4 + \row + \li \l samples: 9 + \li \l samples: 9 + \li \l samples: 9 + \row + \li \l color: #000000 + \li \l color: #000000 + \li \l color: #000000 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \endtable + */ + property alias horizontalOffset: dbs.horizontalOffset + property alias verticalOffset: dbs.verticalOffset + + /*! + This property defines how large part of the shadow color is strengthened + near the source edges. + + The value ranges from 0.0 to 1.0. By default, the property is set to \c + 0.0. + + \table + \header + \li Output examples with different spread values + \li + \li + \row + \li \image DropShadow_spread1.png + \li \image DropShadow_spread2.png + \li \image DropShadow_spread3.png + \row + \li \b { spread: 0.0 } + \li \b { spread: 0.5 } + \li \b { spread: 1.0 } + \row + \li \l radius: 8 + \li \l radius: 8 + \li \l radius: 8 + \row + \li \l samples: 17 + \li \l samples: 17 + \li \l samples: 17 + \row + \li \l color: #000000 + \li \l color: #000000 + \li \l color: #000000 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 20 + \li \l verticalOffset: 20 + \li \l verticalOffset: 20 + \endtable + */ + property alias spread: dbs.spread + + /*! + \internal + + Starting Qt 5.6, this property has no effect. It is left here + for source compatibility only. + + ### Qt 6: remove + */ + property bool fast: false + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. Every time the source or effect + properties are changed, the pixels in the cache must be updated. Memory + consumption is increased, because an extra buffer of memory is required + for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property alias cached: dbs.cached + + /*! + This property determines whether or not the effect has a transparent + border. + + When set to \c true, the exterior of the item is padded with a 1 pixel + wide transparent edge, making sampling outside the source texture use + transparency instead of the edge pixels. Without this property, an + image which has opaque edges will not get a blurred shadow. + + In the image below, the Rectangle on the left has transparent borders + and has blurred edges, whereas the Rectangle on the right does not: + + By default, this property is set to \c true. + + \snippet DropShadow-transparentBorder-example.qml example + + \image DropShadow-transparentBorder.png + */ + property alias transparentBorder: dbs.transparentBorder +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/FastBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/FastBlur.qml new file mode 100644 index 0000000..1d8a547 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/FastBlur.qml @@ -0,0 +1,442 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype FastBlur + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-blur + \brief Applies a fast blur effect to one or more source items. + + FastBlur offers lower blur quality than + \l{QtGraphicalEffects::GaussianBlur}{GaussianBlur}, but it is faster to + render. The FastBlur effect softens the source content by blurring it with + algorithm which uses the source content downscaling and bilinear filtering. + Use this effect in situations where the source content is rapidly changing + and the highest possible blur quality is not + needed. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image FastBlur_bug.png + \endtable + + \note This effect is available when running with OpenGL. + s + \section1 Example + + The following example shows how to apply the effect. + \snippet FastBlur-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that is going to be blurred. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the distance of the neighboring pixels which affect + the blurring of an individual pixel. A larger radius increases the blur + effect. FastBlur algorithm may internally reduce the accuracy of the radius in order to + provide good rendering performance. + + The value ranges from 0.0 (no blur) to inf. Visual quality of the blur is reduced when + radius exceeds value 64. By default, the property is set to \c 0.0 (no blur). + + \table + \header + \li Output examples with different blur values + \li + \li + \row + \li \image FastBlur_radius1.png + \li \image FastBlur_radius2.png + \li \image FastBlur_radius3.png + \row + \li \b { radius: 0 } + \li \b { radius: 32 } + \li \b { radius: 64 } + \endtable + */ + property real radius: 0.0 + + /*! + This property defines the blur behavior near the edges of the item, + where the pixel blurring is affected by the pixels outside the source + edges. + + If the property is set to \c true, the pixels outside the source are + interpreted to be transparent, which is similar to OpenGL + clamp-to-border extension. The blur is expanded slightly outside the + effect item area. + + If the property is set to \c false, the pixels outside the source are + interpreted to contain the same color as the pixels at the edge of the + item, which is similar to OpenGL clamp-to-edge behavior. The blur does + not expand outside the effect item area. + + By default, the property is set to \c false. + + \table + \header + \li Output examples with different transparentBorder values + \li + \li + \row + \li \image FastBlur_transparentBorder1.png + \li \image FastBlur_transparentBorder2.png + \row + \li \b { transparentBorder: false } + \li \b { transparentBorder: true } + \row + \li \l radius: 64 + \li \l radius: 64 + \endtable + */ + property bool transparentBorder: false + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + sourceItem: shaderItem + live: true + hideSource: visible + smooth: rootItem.radius > 0 + } + + /*! \internal */ + property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert" + + /*! \internal */ + property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag" + + ShaderEffect { + id: level0 + property variant source: sourceProxy.output + anchors.fill: parent + visible: false + smooth: true + } + + ShaderEffectSource { + id: level1 + width: Math.ceil(shaderItem.width / 32) * 32 + height: Math.ceil(shaderItem.height / 32) * 32 + sourceItem: level0 + hideSource: rootItem.visible + sourceRect: transparentBorder ? Qt.rect(-64, -64, shaderItem.width, shaderItem.height) : Qt.rect(0, 0, 0, 0) + visible: false + smooth: rootItem.radius > 0 + } + + ShaderEffect { + id: effect1 + property variant source: level1 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level2 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level2 + width: level1.width / 2 + height: level1.height / 2 + sourceItem: effect1 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect2 + property variant source: level2 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level3 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level3 + width: level2.width / 2 + height: level2.height / 2 + sourceItem: effect2 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect3 + property variant source: level3 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level4 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level4 + width: level3.width / 2 + height: level3.height / 2 + sourceItem: effect3 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect4 + property variant source: level4 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level5 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level5 + width: level4.width / 2 + height: level4.height / 2 + sourceItem: effect4 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect5 + property variant source: level5 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level6 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level6 + width: level5.width / 2 + height: level5.height / 2 + sourceItem: effect5 + hideSource: rootItem.visible + visible: false + smooth: true + } + + Item { + id: dummysource + width: 1 + height: 1 + visible: false + } + + ShaderEffectSource { + id: dummy + width: 1 + height: 1 + sourceItem: dummysource + visible: false + smooth: false + live: false + } + + ShaderEffect { + id: shaderItem + + property variant source1: level1 + property variant source2: level2 + property variant source3: level3 + property variant source4: level4 + property variant source5: level5 + property variant source6: level6 + property real lod: Math.sqrt(rootItem.radius / 64.0) * 1.2 - 0.2 + property real weight1 + property real weight2 + property real weight3 + property real weight4 + property real weight5 + property real weight6 + + x: transparentBorder ? -64 : 0 + y: transparentBorder ? -64 : 0 + width: transparentBorder ? parent.width + 128 : parent.width + height: transparentBorder ? parent.height + 128 : parent.height + + function weight(v) { + if (v <= 0.0) + return 1.0 + if (v >= 0.5) + return 0.0 + + return 1.0 - v * 2.0 + } + + function calculateWeights() { + + var w1 = weight(Math.abs(lod - 0.100)) + var w2 = weight(Math.abs(lod - 0.300)) + var w3 = weight(Math.abs(lod - 0.500)) + var w4 = weight(Math.abs(lod - 0.700)) + var w5 = weight(Math.abs(lod - 0.900)) + var w6 = weight(Math.abs(lod - 1.100)) + + var sum = w1 + w2 + w3 + w4 + w5 + w6; + weight1 = w1 / sum; + weight2 = w2 / sum; + weight3 = w3 / sum; + weight4 = w4 / sum; + weight5 = w5 / sum; + weight6 = w6 / sum; + + upateSources() + } + + function upateSources() { + var sources = new Array(); + var weights = new Array(); + + if (weight1 > 0) { + sources.push(level1) + weights.push(weight1) + } + + if (weight2 > 0) { + sources.push(level2) + weights.push(weight2) + } + + if (weight3 > 0) { + sources.push(level3) + weights.push(weight3) + } + + if (weight4 > 0) { + sources.push(level4) + weights.push(weight4) + } + + if (weight5 > 0) { + sources.push(level5) + weights.push(weight5) + } + + if (weight6 > 0) { + sources.push(level6) + weights.push(weight6) + } + + for (var j = sources.length; j < 6; j++) { + sources.push(dummy) + weights.push(0.0) + } + + source1 = sources[0] + source2 = sources[1] + source3 = sources[2] + source4 = sources[3] + source5 = sources[4] + source6 = sources[5] + + weight1 = weights[0] + weight2 = weights[1] + weight3 = weights[2] + weight4 = weights[3] + weight5 = weights[4] + weight6 = weights[5] + } + + Component.onCompleted: calculateWeights() + + onLodChanged: calculateWeights() + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/GammaAdjust.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/GammaAdjust.qml new file mode 100644 index 0000000..2c3edbb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/GammaAdjust.qml @@ -0,0 +1,184 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype GammaAdjust + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-color + \brief Alters the luminance of the source item. + + GammaAdjust is applied to each pixel according to the curve which is + pre-defined as a power-law expression, where the property gamma is used as the + reciprocal scaling exponent. Refer to the property documentation of \l{GammaAdjust::gamma}{gamma} + for more details. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image GammaAdjust_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet GammaAdjust-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item for which the luminance is going to be + adjusted. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the change factor for how the luminance of each pixel + is altered according to the equation: + + \code +luminance = pow(original_luminance, 1.0 / gamma); // The luminance is assumed to be between 0.0 and 1.0 + \endcode + + Setting the gamma values under 1.0 makes the image darker, the values + above 1.0 lighten it. + + The value ranges from 0.0 (darkest) to inf (lightest). By default, the + property is set to \c 1.0 (no change). + + \table + \header + \li Output examples with different gamma values + \li + \li + \row + \li \image GammaAdjust_gamma1.png + \li \image GammaAdjust_gamma2.png + \li \image GammaAdjust_gamma3.png + \row + \li \b { gamma: 0.5 } + \li \b { gamma: 1.0 } + \li \b { gamma: 2.0 } + \endtable + + \table + \header + \li Pixel luminance curves of the above images. + \li + \li + \row + \li \image GammaAdjust_gamma1_graph.png + \li \image GammaAdjust_gamma2_graph.png + \li \image GammaAdjust_gamma3_graph.png + \row + \li Red curve: default gamma (1.0) + \li + \li + \row + \li Yellow curve: effect applied + \li + \li + \row + \li X-axis: pixel original luminance + \li + \li + \row + \li Y-axis: pixel luminance with effect applied + \li + \li + \endtable + + */ + property real gamma: 1.0 + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + interpolation: input && input.smooth ? SourceProxy.LinearInterpolation : SourceProxy.NearestInterpolation + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property real gamma: 1.0 / Math.max(rootItem.gamma, 0.0001) + + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gammaadjust.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/GaussianBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/GaussianBlur.qml new file mode 100644 index 0000000..4af9714 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/GaussianBlur.qml @@ -0,0 +1,372 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2017 Jolla Ltd, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype GaussianBlur + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-blur + \brief Applies a higher quality blur effect. + + GaussianBlur effect softens the image by blurring it with an algorithm that + uses the Gaussian function to calculate the effect. The effect produces + higher quality than \l{QtGraphicalEffects::FastBlur}{FastBlur}, but is + slower to render. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image GaussianBlur_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet GaussianBlur-example.qml example + + Performing blur live is a costly operation. Fullscreen gaussian blur + with even a moderate number of samples will only run at 60 fps on highend + graphics hardware. + +*/ +Item { + id: root + + /*! + This property defines the source item that is going to be blurred. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the distance of the neighboring pixels which + affect the blurring of an individual pixel. A larger radius increases + the blur effect. + + The ideal blur is achieved by selecting \c samples and \c radius such + that \c {samples = 1 + radius * 2}, such as: + + \table + \header \li Radius \li Samples + \row \li 0 \e{(no blur)} \li 1 + \row \li 1 \li 3 + \row \li 2 \li 5 + \row \li 3 \li 7 + \endtable + + The value ranges from 0.0 (no blur) to inf. By default, the property is + set to \c floor(samples / 2.0). + + \table + \header + \li Output examples with different radius values + \li + \li + \row + \li \image GaussianBlur_radius1.png + \li \image GaussianBlur_radius2.png + \li \image GaussianBlur_radius3.png + \row + \li \b { radius: 0 } + \li \b { radius: 4 } + \li \b { radius: 8 } + \row + \li \l samples: 16 + \li \l samples: 16 + \li \l samples: 16 + \row + \li \l deviation: 3 + \li \l deviation: 3 + \li \l deviation: 3 + \endtable + + */ + property real radius: Math.floor(samples / 2); + + /*! + This property defines how many samples are taken per pixel when blur + calculation is done. Larger value produces better quality, but is slower + to render. + + Ideally, this value should be twice as large as the highest required + radius value plus 1, for example, if the radius is animated between 0.0 + and 4.0, samples should be set to 9. + + By default, the property is set to \c 9. + + \note This property is not intended to be animated. Changing this property may + cause the underlying OpenGL shaders to be recompiled. + + */ + property int samples: 9 + + /*! + This property is a parameter to the gaussian function that is used when + calculating neighboring pixel weights for the blurring. A larger + deviation causes image to appear more blurry, but it also reduces the + quality of the blur. A very large deviation value causes the effect to + look a bit similar to what, for exmple, a box blur algorithm produces. A + too small deviation values makes the effect insignificant for the pixels + near the radius. + + \inlineimage GaussianBlur_deviation_graph.png + \caption The image above shows the Gaussian function with two different + deviation values, yellow (1) and cyan (2.7). The y-axis shows the + weights, the x-axis shows the pixel distance. + + The value ranges from 0.0 (no deviation) to inf (maximum deviation). By + default, devaition is binded to radius. When radius increases, deviation + is automatically increased linearly. With the radius value of 8, the + deviation default value becomes approximately 2.7034. This value + produces a compromise between the blur quality and overall blurriness. + + \table + \header + \li Output examples with different deviation values + \li + \li + \row + \li \image GaussianBlur_deviation1.png + \li \image GaussianBlur_deviation2.png + \li \image GaussianBlur_deviation3.png + \row + \li \b { deviation: 1 } + \li \b { deviation: 2 } + \li \b { deviation: 4 } + \row + \li \l radius: 8 + \li \l radius: 8 + \li \l radius: 8 + \row + \li \l samples: 16 + \li \l samples: 16 + \li \l samples: 16 + \endtable + + */ + property real deviation: (radius + 1) / 3.3333 + + /*! + This property defines the blur behavior near the edges of the item, + where the pixel blurring is affected by the pixels outside the source + edges. + + If the property is set to \c true, the pixels outside the source are + interpreted to be transparent, which is similar to OpenGL + clamp-to-border extension. The blur is expanded slightly outside the + effect item area. + + If the property is set to \c false, the pixels outside the source are + interpreted to contain the same color as the pixels at the edge of the + item, which is similar to OpenGL clamp-to-edge behavior. The blur does + not expand outside the effect item area. + + By default, the property is set to \c false. + + \table + \header + \li Output examples with different transparentBorder values + \li + \li + \row + \li \image GaussianBlur_transparentBorder1.png + \li \image GaussianBlur_transparentBorder2.png + \row + \li \b { transparentBorder: false } + \li \b { transparentBorder: true } + \row + \li \l radius: 8 + \li \l radius: 8 + \row + \li \l samples: 16 + \li \l samples: 16 + \row + \li \l deviation: 2.7 + \li \l deviation: 2.7 + \endtable + */ + property bool transparentBorder: false + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + + // private members... + /*! \internal */ + property int _paddedTexWidth: transparentBorder ? width + 2 * radius: width; + /*! \internal */ + property int _paddedTexHeight: transparentBorder ? height + 2 * radius: height; + /*! \internal */ + property int _kernelRadius: Math.max(0, samples / 2); + /*! \internal */ + property int _kernelSize: _kernelRadius * 2 + 1; + /*! \internal */ + property real _dpr: Screen.devicePixelRatio; + /*! \internal */ + property bool _alphaOnly: false; + /*! \internal */ + property var _maskSource: undefined + + /*! \internal */ + property alias _output: sourceProxy.output; + /*! \internal */ + property alias _outputRect: sourceProxy.sourceRect; + /*! \internal */ + property alias _color: verticalBlur.color; + /*! \internal */ + property real _thickness: 0; + + onSamplesChanged: _rebuildShaders(); + on_KernelSizeChanged: _rebuildShaders(); + onDeviationChanged: _rebuildShaders(); + on_DprChanged: _rebuildShaders(); + on_MaskSourceChanged: _rebuildShaders(); + Component.onCompleted: _rebuildShaders(); + + /*! \internal */ + function _rebuildShaders() { + var params = { + radius: _kernelRadius, + // Limit deviation to something very small avoid getting NaN in the shader. + deviation: Math.max(0.00001, deviation), + alphaOnly: root._alphaOnly, + masked: _maskSource != undefined, + fallback: root.radius != _kernelRadius + } + var shaders = ShaderBuilder.gaussianBlur(params); + horizontalBlur.fragmentShader = shaders.fragmentShader; + horizontalBlur.vertexShader = shaders.vertexShader; + } + + SourceProxy { + id: sourceProxy + interpolation: SourceProxy.LinearInterpolation + input: root.source + sourceRect: root.transparentBorder + ? Qt.rect(-root.radius, 0, root._paddedTexWidth, parent.height) + : Qt.rect(0, 0, 0, 0) + } + + ShaderEffect { + id: horizontalBlur + width: root.transparentBorder ? root._paddedTexWidth : root.width + height: root.height; + + // Used by all shaders + property Item source: sourceProxy.output; + property real spread: root.radius / root._kernelRadius; + property var dirstep: Qt.vector2d(1 / (root._paddedTexWidth * root._dpr), 0); + + // Used by fallback shader (sampleCount exceeds number of varyings) + property real deviation: root.deviation + + // Only in use for DropShadow and Glow + property color color: "white" + property real thickness: Math.max(0, Math.min(0.98, 1 - root._thickness * 0.98)); + + // Only in use for MaskedBlur + property var mask: root._maskSource; + + layer.enabled: true + layer.smooth: true + layer.sourceRect: root.transparentBorder + ? Qt.rect(0, -root.radius, width, root._paddedTexHeight) + : Qt.rect(0, 0, 0, 0) + visible: false + blending: false + } + + ShaderEffect { + id: verticalBlur + x: transparentBorder ? -root.radius : 0 + y: x; + width: root.transparentBorder ? root._paddedTexWidth: root.width + height: root.transparentBorder ? root._paddedTexHeight : root.height; + fragmentShader: horizontalBlur.fragmentShader + vertexShader: horizontalBlur.vertexShader + + property Item source: horizontalBlur + property real spread: horizontalBlur.spread + property var dirstep: Qt.vector2d(0, 1 / (root._paddedTexHeight * root._dpr)); + + property real deviation: horizontalBlur.deviation + + property color color: "black" + property real thickness: horizontalBlur.thickness; + + property var mask: horizontalBlur.mask; + + visible: true + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: verticalBlur + visible: root.cached + smooth: true + sourceItem: verticalBlur + hideSource: visible + } + +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Glow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Glow.qml new file mode 100644 index 0000000..39e69a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/Glow.qml @@ -0,0 +1,294 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2017 Jolla Ltd, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype Glow + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-glow + \brief Generates a halo like glow around the source item. + + The Glow effect blurs the alpha channel of the source and colorizes it + with \l {Glow::color}{color} and places it behind the source, resulting in a halo or glow + around the object. The quality of the blurred edge can be controlled using + \l samples and \l radius and the strength of the glow can be changed using + \l spread. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_butterfly_black.png + \li \image Glow_butterfly.png + \endtable + + The glow is created by blurring the image live using a gaussian blur. + Performing blur live is a costly operation. Fullscreen gaussian blur with + even a moderate number of samples will only run at 60 fps on highend + graphics hardware. + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet Glow-example.qml example + +*/ +Item { + id: root + + DropShadowBase { + id: dps + anchors.fill: parent + color: "white" + spread: 0.5 + horizontalOffset: 0 + verticalOffset: 0 + } + + /*! + This property defines the source item that is going to be used as source + for the generated glow. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property alias source: dps.source + + /*! + Radius defines the softness of the glow. A larger radius causes the + edges of the glow to appear more blurry. + + Depending on the radius value, value of the \l{Glow::samples}{samples} + should be set to sufficiently large to ensure the visual quality. + + The ideal blur is achieved by selecting \c samples and \c radius such + that \c {samples = 1 + radius * 2}, such as: + + \table + \header \li Radius \li Samples + \row \li 0 \e{(no blur)} \li 1 + \row \li 1 \li 3 + \row \li 2 \li 5 + \row \li 3 \li 7 + \endtable + + By default, the property is set to \c {floor(samples/2)}. + + \table + \header + \li Output examples with different radius values + \li + \li + \row + \li \image Glow_radius1.png + \li \image Glow_radius2.png + \li \image Glow_radius3.png + \row + \li \b { radius: 0 } + \li \b { radius: 6 } + \li \b { radius: 12 } + \row + \li \l samples: 25 + \li \l samples: 25 + \li \l samples: 25 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \endtable + */ + property alias radius: dps.radius + + /*! + This property defines how many samples are taken per pixel when edge + softening blur calculation is done. Larger value produces better + quality, but is slower to render. + + Ideally, this value should be twice as large as the highest required + radius value plus one, such as: + + \table + \header \li Radius \li Samples + \row \li 0 \e{(no blur)} \li 1 + \row \li 1 \li 3 + \row \li 2 \li 5 + \row \li 3 \li 7 + \endtable + + By default, the property is set to \c 9. + + This property is not intended to be animated. Changing this property will + cause the underlying OpenGL shaders to be recompiled. + */ + property alias samples: dps.samples + + /*! + This property defines how large part of the glow color is strengthened + near the source edges. + + The values range from 0.0 to 1.0. By default, the property is set to \c + 0.5. + + \note The implementation is optimized for medium and low spread values. + Depending on the source, spread values closer to 1.0 may yield visually + asymmetrical results. + + \table + \header + \li Output examples with different spread values + \li + \li + \row + \li \image Glow_spread1.png + \li \image Glow_spread2.png + \li \image Glow_spread3.png + \row + \li \b { spread: 0.0 } + \li \b { spread: 0.5 } + \li \b { spread: 1.0 } + \row + \li \l radius: 8 + \li \l radius: 8 + \li \l radius: 8 + \row + \li \l samples: 17 + \li \l samples: 17 + \li \l samples: 17 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \endtable + */ + property alias spread: dps.spread + + /*! + This property defines the RGBA color value which is used for the glow. + + By default, the property is set to \c "white". + + \table + \header + \li Output examples with different color values + \li + \li + \row + \li \image Glow_color1.png + \li \image Glow_color2.png + \li \image Glow_color3.png + \row + \li \b { color: #ffffff } + \li \b { color: #00ff00 } + \li \b { color: #aa00ff00 } + \row + \li \l radius: 8 + \li \l radius: 8 + \li \l radius: 8 + \row + \li \l samples: 17 + \li \l samples: 17 + \li \l samples: 17 + \row + \li \l spread: 0.5 + \li \l spread: 0.5 + \li \l spread: 0.5 + \endtable + + */ + property alias color: dps.color + + /*! + \internal + + Starting Qt 5.6, this property has no effect. It is left here + for source compatibility only. + + ### Qt 6: remove + */ + property bool fast: false + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property alias cached: dps.cached + + /*! + This property determines whether or not the effect has a transparent + border. + + When set to \c true, the exterior of the item is padded with a + transparent edge, making sampling outside the source texture use + transparency instead of the edge pixels. Without this property, an + image which has opaque edges will not get a blurred edge. + + By default, the property is set to \c true. Set it to false if the source + already has a transparent edge to make the blurring a tiny bit faster. + + In the snippet below, the Rectangle on the left has transparent borders + and has blurred edges, whereas the Rectangle on the right does not. + + \snippet Glow-transparentBorder-example.qml example + + \image Glow-transparentBorder.png + */ + property alias transparentBorder: dps.transparentBorder +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/HueSaturation.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/HueSaturation.qml new file mode 100644 index 0000000..eb13dcb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/HueSaturation.qml @@ -0,0 +1,224 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype HueSaturation + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-color + \brief Alters the source item colors in the HSL color space. + + HueSaturation is similar to the \l{QtGraphicalEffects::Colorize}{Colorize} + effect, but the hue and saturation property values are handled differently. + The HueSaturation effect always shifts the hue, saturation, and lightness + from the original, instead of setting them. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image HueSaturation_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet HueSaturation-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that provides the source pixels + for the effect. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source: 0 + + /*! + This property defines the hue value which is added to the source hue + value. + + The value ranges from -1.0 (decrease) to 1.0 (increase). By default, the + property is set to \c 0.0 (no change). + + \table + \header + \li Output examples with different hue values + \li + \li + \row + \li \image HueSaturation_hue1.png + \li \image HueSaturation_hue2.png + \li \image HueSaturation_hue3.png + \row + \li \b { hue: -0.3 } + \li \b { hue: 0.0 } + \li \b { hue: 0.3 } + \row + \li \l saturation: 0 + \li \l saturation: 0 + \li \l saturation: 0 + \row + \li \l lightness: 0 + \li \l lightness: 0 + \li \l lightness: 0 + \endtable + + */ + property real hue: 0.0 + + /*! + This property defines the saturation value value which is added to the + source saturation value. + + The value ranges from -1.0 (decrease) to 1.0 (increase). By default, the + property is set to \c 0.0 (no change). + + \table + \header + \li Output examples with different saturation values + \li + \li + \row + \li \image HueSaturation_saturation1.png + \li \image HueSaturation_saturation2.png + \li \image HueSaturation_saturation3.png + \row + \li \b { saturation: -0.8 } + \li \b { saturation: 0.0 } + \li \b { saturation: 1.0 } + \row + \li \l hue: 0 + \li \l hue: 0 + \li \l hue: 0 + \row + \li \l lightness: 0 + \li \l lightness: 0 + \li \l lightness: 0 + \endtable + + */ + property real saturation: 0.0 + + /*! + This property defines the lightness value which is added to the source + saturation value. + + The value ranges from -1.0 (decrease) to 1.0 (increase). By default, the + property is set to \c 0.0 (no change). + + \table + \header + \li Output examples with different lightness values + \li + \li + \row + \li \image HueSaturation_lightness1.png + \li \image HueSaturation_lightness2.png + \li \image HueSaturation_lightness3.png + \row + \li \b { lightness: -0.5 } + \li \b { lightness: 0.0 } + \li \b { lightness: 0.5 } + \row + \li \l hue: 0 + \li \l hue: 0 + \li \l hue: 0 + \row + \li \l saturation: 0 + \li \l saturation: 0 + \li \l saturation: 0 + \endtable + + */ + property real lightness: 0.0 + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + interpolation: input && input.smooth ? SourceProxy.LinearInterpolation : SourceProxy.NearestInterpolation + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property variant hsl: Qt.vector3d(rootItem.hue, rootItem.saturation, rootItem.lightness) + + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/huesaturation.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/InnerShadow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/InnerShadow.qml new file mode 100644 index 0000000..7a388e3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/InnerShadow.qml @@ -0,0 +1,386 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype InnerShadow + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-drop-shadow + \brief Generates a colorized and blurred shadow inside the + source. + + By default the effect produces a high quality shadow image, thus the + rendering speed of the shadow might not be the highest possible. The + rendering speed is reduced especially if the shadow edges are heavily + softened. For use cases that require faster rendering speed and for which + the highest possible visual quality is not necessary, property + \l{InnerShadow::fast}{fast} can be set to true. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_butterfly.png + \li \image InnerShadow_butterfly.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet InnerShadow-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that is going to be used as the + source for the generated shadow. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + Radius defines the softness of the shadow. A larger radius causes the + edges of the shadow to appear more blurry. + + Depending on the radius value, value of the + \l{InnerShadow::samples}{samples} should be set to sufficiently large to + ensure the visual quality. + + The value ranges from 0.0 (no blur) to inf. By default, the property is + set to \c 0.0 (no blur). + + \table + \header + \li Output examples with different radius values + \li + \li + \row + \li \image InnerShadow_radius1.png + \li \image InnerShadow_radius2.png + \li \image InnerShadow_radius3.png + \row + \li \b { radius: 0 } + \li \b { radius: 6 } + \li \b { radius: 12 } + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l color: #000000 + \li \l color: #000000 + \li \l color: #000000 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \endtable + + */ + property real radius: 0.0 + + /*! + This property defines how many samples are taken per pixel when edge + softening blur calculation is done. Larger value produces better + quality, but is slower to render. + + Ideally, this value should be twice as large as the highest required + radius value, for example, if the radius is animated between 0.0 and + 4.0, samples should be set to 8. + + The value ranges from 0 to 32. By default, the property is set to \c 0. + + This property is not intended to be animated. Changing this property may + cause the underlying OpenGL shaders to be recompiled. + + When \l{InnerShadow::fast}{fast} property is set to true, this property + has no effect. + + */ + property int samples: 0 + + /*! + This property defines how large part of the shadow color is strengthened + near the source edges. + + The value ranges from 0.0 to 1.0. By default, the property is set to \c + 0.5. + + \table + \header + \li Output examples with different spread values + \li + \li + \row + \li \image InnerShadow_spread1.png + \li \image InnerShadow_spread2.png + \li \image InnerShadow_spread3.png + \row + \li \b { spread: 0.0 } + \li \b { spread: 0.3 } + \li \b { spread: 0.5 } + \row + \li \l radius: 16 + \li \l radius: 16 + \li \l radius: 16 + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l color: #000000 + \li \l color: #000000 + \li \l color: #000000 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + + */ + property real spread: 0.0 + + /*! + This property defines the RGBA color value which is used for the shadow. + + By default, the property is set to \c "black". + + \table + \header + \li Output examples with different color values + \li + \li + \row + \li \image InnerShadow_color1.png + \li \image InnerShadow_color2.png + \li \image InnerShadow_color3.png + \row + \li \b { color: #000000 } + \li \b { color: #ffffff } + \li \b { color: #ff0000 } + \row + \li \l radius: 16 + \li \l radius: 16 + \li \l radius: 16 + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l spread: 0.2 + \li \l spread: 0.2 + \li \l spread: 0.2 + \endtable + */ + property color color: "black" + + /*! + \qmlproperty real QtGraphicalEffects::InnerShadow::horizontalOffset + \qmlproperty real QtGraphicalEffects::InnerShadow::verticalOffset + + HorizontalOffset and verticalOffset properties define the offset for the + rendered shadow compared to the InnerShadow item position. Often, the + InnerShadow item is anchored so that it fills the source element. In + this case, if the HorizontalOffset and verticalOffset properties are set + to 0, the shadow is rendered fully inside the source item. By changing + the offset properties, the shadow can be positioned relatively to the + source item. + + The values range from -inf to inf. By default, the properties are set to + \c 0. + + \table + \header + \li Output examples with different horizontalOffset values + \li + \li + \row + \li \image InnerShadow_horizontalOffset1.png + \li \image InnerShadow_horizontalOffset2.png + \li \image InnerShadow_horizontalOffset3.png + \row + \li \b { horizontalOffset: -20 } + \li \b { horizontalOffset: 0 } + \li \b { horizontalOffset: 20 } + \row + \li \l radius: 16 + \li \l radius: 16 + \li \l radius: 16 + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l color: #000000 + \li \l color: #000000 + \li \l color: #000000 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \endtable + + */ + property real horizontalOffset: 0 + property real verticalOffset: 0 + + /*! + This property selects the blurring algorithm that is used to produce the + softness for the effect. Setting this to true enables fast algorithm, + setting value to false produces higher quality result. + + By default, the property is set to \c false. + + \table + \header + \li Output examples with different fast values + \li + \li + \row + \li \image InnerShadow_fast1.png + \li \image InnerShadow_fast2.png + \row + \li \b { fast: false } + \li \b { fast: true } + \row + \li \l radius: 16 + \li \l radius: 16 + \row + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l color: #000000 + \li \l color: #000000 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l spread: 0.2 + \li \l spread: 0.2 + \endtable + */ + property bool fast: false + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. Every time the source or effect + properties are changed, the pixels in the cache must be updated. Memory + consumption is increased, because an extra buffer of memory is required + for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + Loader { + anchors.fill: parent + sourceComponent: rootItem.fast ? innerShadow : gaussianInnerShadow + } + + Component { + id: gaussianInnerShadow + GaussianInnerShadow { + anchors.fill: parent + source: rootItem.source + radius: rootItem.radius + maximumRadius: rootItem.samples * 0.5 + color: rootItem.color + cached: rootItem.cached + spread: rootItem.spread + horizontalOffset: rootItem.horizontalOffset + verticalOffset: rootItem.verticalOffset + } + } + + Component { + id: innerShadow + FastInnerShadow { + anchors.fill: parent + source: rootItem.source + blur: Math.pow(rootItem.radius / 64.0, 0.4) + color: rootItem.color + cached: rootItem.cached + spread: rootItem.spread + horizontalOffset: rootItem.horizontalOffset + verticalOffset: rootItem.verticalOffset + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/LevelAdjust.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/LevelAdjust.qml new file mode 100644 index 0000000..b98faca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/LevelAdjust.qml @@ -0,0 +1,440 @@ +/***************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Add-On Graphical Effects module. +** +** $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$ +** +*****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype LevelAdjust + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-color + \brief Adjusts color levels in the RGBA color space. + + This effect adjusts the source item colors separately for each color + channel. Source item contrast can be adjusted and color balance altered. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_butterfly.png + \li \image LevelAdjust_butterfly.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet LevelAdjust-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that provides the source pixels + for the effect. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the change factor for how the value of each pixel + color channel is altered according to the equation: + + \code + result.rgb = pow(original.rgb, 1.0 / gamma.rgb); + \endcode + + Setting the gamma values under QtVector3d(1.0, 1.0, 1.0) makes the image + darker, the values above QtVector3d(1.0, 1.0, 1.0) lighten it. + + The value ranges from QtVector3d(0.0, 0.0, 0.0) (darkest) to inf + (lightest). By default, the property is set to \c QtVector3d(1.0, 1.0, + 1.0) (no change). + + \table + \header + \li Output examples with different gamma values + \li + \li + \row + \li \image LevelAdjust_gamma1.png + \li \image LevelAdjust_gamma2.png + \li \image LevelAdjust_gamma3.png + \row + \li \b { gamma: Qt.vector3d(1.0, 1.0, 1.0) } + \li \b { gamma: Qt.vector3d(1.0, 0.4, 2.0) } + \li \b { gamma: Qt.vector3d(1.0, 0.1, 4.0) } + \row + \li \l minimumInput: #000000 + \li \l minimumInput: #000000 + \li \l minimumInput: #000000 + \row + \li \l maximumInput: #ffffff + \li \l maximumInput: #ffffff + \li \l maximumInput: #ffffff + \row + \li \l minimumOutput: #000000 + \li \l minimumOutput: #000000 + \li \l minimumOutput: #000000 + \row + \li \l maximumOutput: #ffffff + \li \l maximumOutput: #ffffff + \li \l maximumOutput: #ffffff + \endtable + + \table + \header + \li Pixel color channel luminance curves of the above images. + \li + \li + \row + \li \image LevelAdjust_default_curve.png + \li \image LevelAdjust_gamma2_curve.png + \li \image LevelAdjust_gamma3_curve.png + \row + \li X-axis: pixel original luminance + \li + \li + \row + \li Y-axis: color channel luminance with effect applied + \li + \li + \endtable + */ + property variant gamma: Qt.vector3d(1.0, 1.0, 1.0) + + /*! + This property defines the minimum input level for each color channel. It + sets the black-point, all pixels having lower value than this property + are rendered as black (per color channel). Increasing the value darkens + the dark areas. + + The value ranges from "#00000000" to "#ffffffff". By default, the + property is set to \c "#00000000" (no change). + + \table + \header + \li Output examples with different minimumInput values + \li + \li + \row + \li \image LevelAdjust_minimumInput1.png + \li \image LevelAdjust_minimumInput2.png + \li \image LevelAdjust_minimumInput3.png + \row + \li \b { minimumInput: #00000000 } + \li \b { minimumInput: #00000040 } + \li \b { minimumInput: #00000070 } + \row + \li \l maximumInput: #ffffff + \li \l maximumInput: #ffffff + \li \l maximumInput: #ffffff + \row + \li \l minimumOutput: #000000 + \li \l minimumOutput: #000000 + \li \l minimumOutput: #000000 + \row + \li \l maximumOutput: #ffffff + \li \l maximumOutput: #ffffff + \li \l maximumOutput: #ffffff + \row + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \endtable + + \table + \header + \li Pixel color channel luminance curves of the above images. + \li + \li + \row + \li \image LevelAdjust_default_curve.png + \li \image LevelAdjust_minimumInput2_curve.png + \li \image LevelAdjust_minimumInput3_curve.png + \row + \li X-axis: pixel original luminance + \li + \li + \row + \li Y-axis: color channel luminance with effect applied + \li + \li + \endtable + + */ + property color minimumInput: Qt.rgba(0.0, 0.0, 0.0, 0.0) + + /*! + This property defines the maximum input level for each color channel. + It sets the white-point, all pixels having higher value than this + property are rendered as white (per color channel). + Decreasing the value lightens the light areas. + + The value ranges from "#ffffffff" to "#00000000". By default, the + property is set to \c "#ffffffff" (no change). + + \table + \header + \li Output examples with different maximumInput values + \li + \li + \row + \li \image LevelAdjust_maximumInput1.png + \li \image LevelAdjust_maximumInput2.png + \li \image LevelAdjust_maximumInput3.png + \row + \li \b { maximumInput: #FFFFFFFF } + \li \b { maximumInput: #FFFFFF80 } + \li \b { maximumInput: #FFFFFF30 } + \row + \li \l minimumInput: #000000 + \li \l minimumInput: #000000 + \li \l minimumInput: #000000 + \row + \li \l minimumOutput: #000000 + \li \l minimumOutput: #000000 + \li \l minimumOutput: #000000 + \row + \li \l maximumOutput: #ffffff + \li \l maximumOutput: #ffffff + \li \l maximumOutput: #ffffff + \row + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \endtable + + \table + \header + \li Pixel color channel luminance curves of the above images. + \li + \li + \row + \li \image LevelAdjust_default_curve.png + \li \image LevelAdjust_maximumInput2_curve.png + \li \image LevelAdjust_maximumInput3_curve.png + \row + \li X-axis: pixel original luminance + \li + \li + \row + \li Y-axis: color channel luminance with effect applied + \li + \li + \endtable + + */ + property color maximumInput: Qt.rgba(1.0, 1.0, 1.0, 1.0) + + /*! + This property defines the minimum output level for each color channel. + Increasing the value lightens the dark areas, reducing the contrast. + + The value ranges from "#00000000" to "#ffffffff". By default, the + property is set to \c "#00000000" (no change). + + \table + \header + \li Output examples with different minimumOutput values + \li + \li + \row + \li \image LevelAdjust_minimumOutput1.png + \li \image LevelAdjust_minimumOutput2.png + \li \image LevelAdjust_minimumOutput3.png + \row + \li \b { minimumOutput: #00000000 } + \li \b { minimumOutput: #00000070 } + \li \b { minimumOutput: #000000A0 } + \row + \li \l minimumInput: #000000 + \li \l minimumInput: #000000 + \li \l minimumInput: #000000 + \row + \li \l maximumInput: #ffffff + \li \l maximumInput: #ffffff + \li \l maximumInput: #ffffff + \row + \li \l maximumOutput: #ffffff + \li \l maximumOutput: #ffffff + \li \l maximumOutput: #ffffff + \row + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \endtable + + \table + \header + \li Pixel color channel luminance curves of the above images. + \li + \li + \row + \li \image LevelAdjust_default_curve.png + \li \image LevelAdjust_minimumOutput2_curve.png + \li \image LevelAdjust_minimumOutput3_curve.png + \row + \li X-axis: pixel original luminance + \li + \li + \row + \li Y-axis: color channel luminance with effect applied + \li + \li + \endtable + + */ + property color minimumOutput: Qt.rgba(0.0, 0.0, 0.0, 0.0) + + /*! + This property defines the maximum output level for each color channel. + Decreasing the value darkens the light areas, reducing the contrast. + + The value ranges from "#ffffffff" to "#00000000". By default, the + property is set to \c "#ffffffff" (no change). + + \table + \header + \li Output examples with different maximumOutput values + \li + \li + \row + \li \image LevelAdjust_maximumOutput1.png + \li \image LevelAdjust_maximumOutput2.png + \li \image LevelAdjust_maximumOutput3.png + \row + \li \b { maximumOutput: #FFFFFFFF } + \li \b { maximumOutput: #FFFFFF80 } + \li \b { maximumOutput: #FFFFFF30 } + \row + \li \l minimumInput: #000000 + \li \l minimumInput: #000000 + \li \l minimumInput: #000000 + \row + \li \l maximumInput: #ffffff + \li \l maximumInput: #ffffff + \li \l maximumInput: #ffffff + \row + \li \l minimumOutput: #000000 + \li \l minimumOutput: #000000 + \li \l minimumOutput: #000000 + \row + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \li \l gamma: Qt.vector3d(1.0, 1.0, 1.0) + \endtable + + \table + \header + \li Pixel color channel luminance curves of the above images. + \li + \li + \row + \li \image LevelAdjust_default_curve.png + \li \image LevelAdjust_maximumOutput2_curve.png + \li \image LevelAdjust_maximumOutput3_curve.png + \row + \li X-axis: pixel original luminance + \li + \li + \row + \li Y-axis: color channel luminance with effect applied + \li + \li + \endtable + */ + property color maximumOutput: Qt.rgba(1.0, 1.0, 1.0, 1.0) + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + interpolation: input && input.smooth ? SourceProxy.LinearInterpolation : SourceProxy.NearestInterpolation + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property variant minimumInputRGB: Qt.vector3d(rootItem.minimumInput.r, rootItem.minimumInput.g, rootItem.minimumInput.b) + property variant maximumInputRGB: Qt.vector3d(rootItem.maximumInput.r, rootItem.maximumInput.g, rootItem.maximumInput.b) + property real minimumInputAlpha: rootItem.minimumInput.a + property real maximumInputAlpha: rootItem.maximumInput.a + property variant minimumOutputRGB: Qt.vector3d(rootItem.minimumOutput.r, rootItem.minimumOutput.g, rootItem.minimumOutput.b) + property variant maximumOutputRGB: Qt.vector3d(rootItem.maximumOutput.r, rootItem.maximumOutput.g, rootItem.maximumOutput.b) + property real minimumOutputAlpha: rootItem.minimumOutput.a + property real maximumOutputAlpha: rootItem.maximumOutput.a + property variant gamma: Qt.vector3d(1.0 / Math.max(rootItem.gamma.x, 0.0001), 1.0 / Math.max(rootItem.gamma.y, 0.0001), 1.0 / Math.max(rootItem.gamma.z, 0.0001)) + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/leveladjust.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/LinearGradient.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/LinearGradient.qml new file mode 100644 index 0000000..1f73a21 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/LinearGradient.qml @@ -0,0 +1,323 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype LinearGradient + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-gradient + \brief Draws a linear gradient. + + A gradient is defined by two or more colors, which are blended seamlessly. + The colors start from the given start point and end to the given end point. + + \table + \header + \li Effect applied + \row + \li \image LinearGradient.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet LinearGradient-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the starting point where the color at gradient + position of 0.0 is rendered. Colors at larger position values are + rendered linearly towards the end point. The point is given in pixels + and the default value is Qt.point(0, 0). Setting the default values for + the start and \l{LinearGradient::end}{end} results in a full height + linear gradient on the y-axis. + + \table + \header + \li Output examples with different start values + \li + \li + \row + \li \image LinearGradient_start1.png + \li \image LinearGradient_start2.png + \li \image LinearGradient_start3.png + \row + \li \b { start: QPoint(0, 0) } + \li \b { start: QPoint(150, 150) } + \li \b { start: QPoint(300, 0) } + \row + \li \l end: QPoint(300, 300) + \li \l end: QPoint(300, 300) + \li \l end: QPoint(300, 300) + \endtable + + */ + property variant start: Qt.point(0, 0) + + /*! + This property defines the ending point where the color at gradient + position of 1.0 is rendered. Colors at smaller position values are + rendered linearly towards the start point. The point is given in pixels + and the default value is Qt.point(0, height). Setting the default values + for the \l{LinearGradient::start}{start} and end results in a full + height linear gradient on the y-axis. + + \table + \header + \li Output examples with different end values + \li + \li + \row + \li \image LinearGradient_end1.png + \li \image LinearGradient_end2.png + \li \image LinearGradient_end3.png + \row + \li \b { end: Qt.point(300, 300) } + \li \b { end: Qt.point(150, 150) } + \li \b { end: Qt.point(300, 0) } + \row + \li \l start: Qt.point(0, 0) + \li \l start: Qt.point(0, 0) + \li \l start: Qt.point(0, 0) + \endtable + + */ + property variant end: Qt.point(0, height) + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + /*! + This property defines the item that is going to be filled with gradient. + Source item gets rendered into an intermediate pixel buffer and the + alpha values from the result are used to determine the gradient's pixels + visibility in the display. The default value for source is undefined and + in that case whole effect area is filled with gradient. + + \table + \header + \li Output examples with different source values + \li + \li + \row + \li \image LinearGradient_maskSource1.png + \li \image LinearGradient_maskSource2.png + \row + \li \b { source: undefined } + \li \b { source: Image { source: images/butterfly.png } } + \row + \li \l start: Qt.point(0, 0) + \li \l start: Qt.point(0, 0) + \row + \li \l end: Qt.point(300, 300) + \li \l end: Qt.point(300, 300) + \endtable + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + + /*! + A gradient is defined by two or more colors, which are blended + seamlessly. The colors are specified as a set of GradientStop child + items, each of which defines a position on the gradient from 0.0 to 1.0 + and a color. The position of each GradientStop is defined by the + position property, and the color is definded by the color property. + + \table + \header + \li Output examples with different gradient values + \li + \li + \row + \li \image LinearGradient_gradient1.png + \li \image LinearGradient_gradient2.png + \li \image LinearGradient_gradient3.png + \row + \li \b {gradient:} \code + Gradient { + GradientStop { + position: 0.000 + color: Qt.rgba(1, 0, 0, 1) + } + GradientStop { + position: 0.167 + color: Qt.rgba(1, 1, 0, 1) + } + GradientStop { + position: 0.333 + color: Qt.rgba(0, 1, 0, 1) + } + GradientStop { + position: 0.500 + color: Qt.rgba(0, 1, 1, 1) + } + GradientStop { + position: 0.667 + color: Qt.rgba(0, 0, 1, 1) + } + GradientStop { + position: 0.833 + color: Qt.rgba(1, 0, 1, 1) + } + GradientStop { + position: 1.000 + color: Qt.rgba(1, 0, 0, 1) + } + } + \endcode + \li \b {gradient:} \code + Gradient { + GradientStop { + position: 0.0 + color: "#F0F0F0" + } + GradientStop { + position: 0.5 + color: "#000000" + } + GradientStop { + position: 1.0 + color: "#F0F0F0" + } + } + \endcode + \li \b {gradient:} \code + Gradient { + GradientStop { + position: 0.0 + color: "#00000000" + } + GradientStop { + position: 1.0 + color: "#FF000000" + } + } + \endcode + \row + \li \l start: Qt.point(0, 0) + \li \l start: Qt.point(0, 0) + \li \l start: Qt.point(0, 0) + \row + \li \l end: Qt.point(300, 300) + \li \l end: Qt.point(300, 300) + \li \l end: Qt.point(300, 300) + \endtable + + */ + property Gradient gradient: Gradient { + GradientStop { position: 0.0; color: "white" } + GradientStop { position: 1.0; color: "black" } + } + + SourceProxy { + id: maskSourceProxy + input: rootItem.source + } + + ShaderEffectSource { + id: gradientSource + sourceItem: Rectangle { + width: 16 + height: 256 + gradient: rootItem.gradient + smooth: true + } + smooth: true + hideSource: true + visible: false + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + + anchors.fill: parent + + property variant source: gradientSource + property variant maskSource: maskSourceProxy.output + property variant startPoint: Qt.point(start.x / width, start.y / height) + property real dx: end.x - start.x + property real dy: end.y - start.y + property real l: 1.0 / Math.sqrt(Math.pow(dx / width, 2.0) + Math.pow(dy / height, 2.0)) + property real angle: Math.atan2(dx, dy) + property variant matrixData: Qt.point(Math.sin(angle), Math.cos(angle)) + + vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient.vert" + + fragmentShader: maskSource == undefined ? noMaskShader : maskShader + + onFragmentShaderChanged: lChanged() + + property string maskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient_mask.frag" + property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient_nomask.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/MaskedBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/MaskedBlur.qml new file mode 100644 index 0000000..d777b0a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/MaskedBlur.qml @@ -0,0 +1,218 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2017 Jolla Ltd, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype MaskedBlur + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-blur + \brief Applies a blur effect with a varying intesity. + + MaskedBlur effect softens the image by blurring it. The intensity of the + blur can be controlled for each pixel using maskSource so that some parts of + the source are blurred more than others. + + Performing blur live is a costly operation. Fullscreen gaussian blur + with even a moderate number of samples will only run at 60 fps on highend + graphics hardware. + + \table + \header + \li Source + \li MaskSource + \li Effect applied + \row + \li \image Original_bug.png + \li \image MaskedBlur_mask.png + \li \image MaskedBlur_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet MaskedBlur-example.qml example + +*/ +Item { + id: root + + /*! + This property defines the source item that is going to be blurred. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property alias source: blur.source + + /*! + This property defines the item that is controlling the final intensity + of the blur. The pixel alpha channel value from maskSource defines the + actual blur radius that is going to be used for blurring the + corresponding source pixel. + + Opaque maskSource pixels produce blur with specified + \l{MaskedBlur::radius}{radius}, while transparent pixels suppress the + blur completely. Semitransparent maskSource pixels produce blur with a + radius that is interpolated according to the pixel transparency level. + */ + property alias maskSource: maskProxy.input + + /*! + This property defines the distance of the neighboring pixels which + affect the blurring of an individual pixel. A larger radius increases + the blur effect. + + Depending on the radius value, value of the + \l{MaskedBlur::samples}{samples} should be set to sufficiently large to + ensure the visual quality. + + The value ranges from 0.0 (no blur) to inf. By default, the property is + set to \c 0.0 (no blur). + + \table + \header + \li Output examples with different radius values + \li + \li + \row + \li \image MaskedBlur_radius1.png + \li \image MaskedBlur_radius2.png + \li \image MaskedBlur_radius3.png + \row + \li \b { radius: 0 } + \li \b { radius: 8 } + \li \b { radius: 16 } + \row + \li \l samples: 25 + \li \l samples: 25 + \li \l samples: 25 + \endtable + + */ + property alias radius: blur.radius + + /*! + This property defines how many samples are taken per pixel when blur + calculation is done. Larger value produces better quality, but is slower + to render. + + Ideally, this value should be twice as large as the highest required + radius value plus 1, for example, if the radius is animated between 0.0 + and 4.0, samples should be set to 9. + + By default, the property is set to \c 9. + + This property is not intended to be animated. Changing this property may + cause the underlying OpenGL shaders to be recompiled. + */ + property alias samples: blur.samples + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. Every time the source or effect + properties are changed, the pixels in the cache must be updated. Memory + consumption is increased, because an extra buffer of memory is required + for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property alias cached: cacheItem.visible + + /*! + \internal + + Kept for source compatibility only. Removed in Qt 5.6 + ### Qt6: remove + */ + property bool fast: false + + /*! + \internal + + Kept for source compatibility only. Removed in Qt 5.6 + + Doing transparent border on a masked source doesn't make any sense + as the padded exterior will have a mask alpha value of 0 which means + no blurring and as the padded exterior of the source is a transparent + pixel, the result is no pixels at all. + + In Qt 5.6 and before, this worked based on that the mask source + was scaled up to fit the padded blur target rect, which would lead + to inconsistent and buggy results. + + ### Qt6: remove + */ + property bool transparentBorder; + + GaussianBlur { + id: blur + + source: root.source; + anchors.fill: parent + _maskSource: maskProxy.output; + + SourceProxy { + id: maskProxy + } + } + + ShaderEffectSource { + id: cacheItem + x: -blur._kernelRadius + y: -blur._kernelRadius + width: blur.width + 2 * blur._kernelRadius + height: blur.height + 2 * blur._kernelRadius + visible: false + smooth: true + sourceRect: Qt.rect(-blur._kernelRadius, -blur._kernelRadius, width, height); + sourceItem: blur + hideSource: visible + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/OpacityMask.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/OpacityMask.qml new file mode 100644 index 0000000..7dffb6d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/OpacityMask.qml @@ -0,0 +1,162 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype OpacityMask + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-mask + \brief Masks the source item with another item. + + \table + \header + \li Source + \li MaskSource + \li Effect applied + \row + \li \image Original_bug.png + \li \image OpacityMask_mask.png + \li \image OpacityMask_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet OpacityMask-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that is going to be masked. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the item that is going to be used as the mask. The + mask item gets rendered into an intermediate pixel buffer and the alpha + values from the result are used to determine the source item's pixels + visibility in the display. + + \table + \header + \li Original + \li Mask + \li Effect applied + \row + \li \image Original_bug.png + \li \image OpacityMask_mask.png + \li \image OpacityMask_bug.png + \endtable + */ + property variant maskSource + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + \note It is not supported to let the effect include itself, for + instance by setting maskSource to the effect's parent. + */ + property bool cached: false + + /*! + This property controls how the alpha values of the sourceMask will behave. + + If this property is \c false, the resulting opacity is the source alpha + multiplied with the mask alpha, \c{As * Am}. + + If this property is \c true, the resulting opacity is the source alpha + multiplied with the inverse of the mask alpha, \c{As * (1 - Am)}. + + The default is \c false. + + \since 5.7 + */ + property bool invert: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + SourceProxy { + id: maskSourceProxy + input: rootItem.maskSource + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property variant maskSource: maskSourceProxy.output + + anchors.fill: parent + + fragmentShader: invert ? "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/opacitymask_invert.frag" : "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/opacitymask.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RadialBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RadialBlur.qml new file mode 100644 index 0000000..71d3b64 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RadialBlur.qml @@ -0,0 +1,316 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype RadialBlur + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-motion-blur + \brief Applies directional blur in a circular direction around the items + center point. + + Effect creates perceived impression that the source item appears to be + rotating to the direction of the blur. + + Other available motionblur effects are + \l{QtGraphicalEffects::ZoomBlur}{ZoomBlur} and + \l{QtGraphicalEffects::DirectionalBlur}{DirectionalBlur}. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image RadialBlur_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example Usage + + The following example shows how to apply the effect. + \snippet RadialBlur-example.qml example +*/ +Item { + id: rootItem + + /*! + This property defines the source item that is going to be blurred. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the direction for the blur and at the same time + the level of blurring. The larger the angle, the more the result becomes + blurred. The quality of the blur depends on + \l{RadialBlur::samples}{samples} property. If angle value is large, more + samples are needed to keep the visual quality at high level. + + Allowed values are between 0.0 and 360.0. By default the property is set + to \c 0.0. + + \table + \header + \li Output examples with different angle values + \li + \li + \row + \li \image RadialBlur_angle1.png + \li \image RadialBlur_angle2.png + \li \image RadialBlur_angle3.png + \row + \li \b { angle: 0.0 } + \li \b { angle: 15.0 } + \li \b { angle: 30.0 } + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + */ + property real angle: 0.0 + + /*! + This property defines how many samples are taken per pixel when blur + calculation is done. Larger value produces better quality, but is slower + to render. + + This property is not intended to be animated. Changing this property may + cause the underlying OpenGL shaders to be recompiled. + + Allowed values are between 0 and inf (practical maximum depends on GPU). + By default the property is set to \c 0 (no samples). + + */ + property int samples: 0 + + /*! + \qmlproperty real QtGraphicalEffects::RadialBlur::horizontalOffset + \qmlproperty real QtGraphicalEffects::RadialBlur::verticalOffset + + These properties define the offset in pixels for the perceived center + point of the rotation. + + Allowed values are between -inf and inf. + By default these properties are set to \c 0. + + \table + \header + \li Output examples with different horizontalOffset values + \li + \li + \row + \li \image RadialBlur_horizontalOffset1.png + \li \image RadialBlur_horizontalOffset2.png + \li \image RadialBlur_horizontalOffset3.png + \row + \li \b { horizontalOffset: 75.0 } + \li \b { horizontalOffset: 0.0 } + \li \b { horizontalOffset: -75.0 } + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l angle: 20 + \li \l angle: 20 + \li \l angle: 20 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + */ + property real horizontalOffset: 0.0 + property real verticalOffset: 0.0 + + /*! + This property defines the blur behavior near the edges of the item, + where the pixel blurring is affected by the pixels outside the source + edges. + + If the property is set to \c true, the pixels outside the source are + interpreted to be transparent, which is similar to OpenGL + clamp-to-border extension. The blur is expanded slightly outside the + effect item area. + + If the property is set to \c false, the pixels outside the source are + interpreted to contain the same color as the pixels at the edge of the + item, which is similar to OpenGL clamp-to-edge behavior. The blur does + not expand outside the effect item area. + + By default, the property is set to \c false. + */ + property bool transparentBorder: false + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + sourceRect: shaderItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2.0, parent.height + 2.0) : Qt.rect(0, 0, 0, 0) + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property variant center: Qt.point(0.5 + rootItem.horizontalOffset / parent.width, 0.5 + rootItem.verticalOffset / parent.height) + property bool transparentBorder: rootItem.transparentBorder && rootItem.samples > 1 + property int samples: rootItem.samples + property real weight: 1.0 / Math.max(1.0, rootItem.samples) + property real angleSin: Math.sin(rootItem.angle/2 * Math.PI/180) + property real angleCos: Math.cos(rootItem.angle/2 * Math.PI/180) + property real angleSinStep: Math.sin(-rootItem.angle * Math.PI/180 / Math.max(1.0, rootItem.samples - 1)) + property real angleCosStep: Math.cos(-rootItem.angle * Math.PI/180 / Math.max(1.0, rootItem.samples - 1)) + property variant expandPixels: transparentBorder ? Qt.size(0.5 * parent.height, 0.5 * parent.width) : Qt.size(0,0) + property variant expand: transparentBorder ? Qt.size(expandPixels.width / width, expandPixels.height / height) : Qt.size(0,0) + property variant delta: Qt.size(1.0 / rootItem.width, 1.0 / rootItem.height) + property real w: parent.width + property real h: parent.height + + x: transparentBorder ? -expandPixels.width - 1 : 0 + y: transparentBorder ? -expandPixels.height - 1 : 0 + width: transparentBorder ? parent.width + expandPixels.width * 2.0 + 2 : parent.width + height: transparentBorder ? parent.height + expandPixels.height * 2.0 + 2 : parent.height + + property string fragmentShaderSkeleton: " + varying highp vec2 qt_TexCoord0; + uniform highp float qt_Opacity; + uniform lowp sampler2D source; + uniform highp float angleSin; + uniform highp float angleCos; + uniform highp float angleSinStep; + uniform highp float angleCosStep; + uniform highp float weight; + uniform highp vec2 expand; + uniform highp vec2 center; + uniform highp vec2 delta; + uniform highp float w; + uniform highp float h; + + void main(void) { + highp mat2 m; + gl_FragColor = vec4(0.0); + mediump vec2 texCoord = qt_TexCoord0; + + PLACEHOLDER_EXPAND_STEPS + + highp vec2 dir = vec2(texCoord.s * w - w * center.x, texCoord.t * h - h * center.y); + m[0] = vec2(angleCos, -angleSin); + m[1] = vec2(angleSin, angleCos); + dir *= m; + + m[0] = vec2(angleCosStep, -angleSinStep); + m[1] = vec2(angleSinStep, angleCosStep); + + PLACEHOLDER_UNROLLED_LOOP + + gl_FragColor *= weight * qt_Opacity; + } + " + + function buildFragmentShader() { + var shader = "" + if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile) + shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n" + shader += fragmentShaderSkeleton + var expandSteps = "" + + if (transparentBorder) { + expandSteps += "texCoord = (texCoord - expand) / (1.0 - 2.0 * expand);" + } + + var unrolledLoop = "gl_FragColor += texture2D(source, texCoord);\n" + + if (rootItem.samples > 1) { + unrolledLoop = "" + for (var i = 0; i < rootItem.samples; i++) + unrolledLoop += "gl_FragColor += texture2D(source, center + dir * delta); dir *= m;\n" + } + + shader = shader.replace("PLACEHOLDER_EXPAND_STEPS", expandSteps) + fragmentShader = shader.replace("PLACEHOLDER_UNROLLED_LOOP", unrolledLoop) + } + + onFragmentShaderChanged: sourceChanged() + onSamplesChanged: buildFragmentShader() + onTransparentBorderChanged: buildFragmentShader() + Component.onCompleted: buildFragmentShader() + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RadialGradient.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RadialGradient.qml new file mode 100644 index 0000000..52b3ff3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RadialGradient.qml @@ -0,0 +1,410 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype RadialGradient + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-gradient + \brief Draws a radial gradient. + + A gradient is defined by two or more colors, which are blended seamlessly. + The colors start from the middle of the item and end at the borders. + + \table + \header + \li Effect applied + \row + \li \image RadialGradient.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet RadialGradient-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + /*! + \qmlproperty real RadialGradient::horizontalOffset + \qmlproperty real RadialGradient::verticalOffset + + The horizontalOffset and verticalOffset properties define the offset in + pixels for the center point of the gradient compared to the item center. + + The values range from -inf to inf. By default, these properties are set + to \c 0. + + \table + \header + \li Output examples with different horizontalOffset values + \li + \li + \row + \li \image RadialGradient_horizontalOffset1.png + \li \image RadialGradient_horizontalOffset2.png + \li \image RadialGradient_horizontalOffset3.png + \row + \li \b { horizontalOffset: -150 } + \li \b { horizontalOffset: 0 } + \li \b { horizontalOffset: 150 } + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l horizontalRadius: 300 + \li \l horizontalRadius: 300 + \li \l horizontalRadius: 300 + \row + \li \l verticalRadius: 300 + \li \l verticalRadius: 300 + \li \l verticalRadius: 300 + \row + \li \l angle: 0 + \li \l angle: 0 + \li \l angle: 0 + \endtable + + */ + property real horizontalOffset: 0.0 + property real verticalOffset: 0.0 + + /*! + \qmlproperty real RadialGradient::horizontalRadius + \qmlproperty real RadialGradient::verticalRadius + + The horizontalRadius and verticalRadius properties define the shape and + size of the radial gradient. If the radiuses are equal, the shape of the + gradient is a circle. If the horizontal and vertical radiuses differ, + the shape is elliptical. The radiuses are given in pixels. + + The value ranges from -inf to inf. By default, horizontalRadius is bound + to width and verticalRadius is bound to height. + + \table + \header + \li Output examples with different horizontalRadius values + \li + \li + \row + \li \image RadialGradient_horizontalRadius1.png + \li \image RadialGradient_horizontalRadius2.png + \row + \li \b { horizontalRadius: 300 } + \li \b { horizontalRadius: 100 } + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l verticalRadius: 300 + \li \l verticalRadius: 300 + \row + \li \l angle: 0 + \li \l angle: 0 + \row + \li \l gradient: QQuickGradient(0xa05fb10) + \li \l gradient: QQuickGradient(0xa05fb10) + \endtable + + */ + property real horizontalRadius: width + property real verticalRadius: height + + /*! + This property defines the rotation of the gradient around its center + point. The rotation is only visible when the + \l{RadialGradient::horizontalRadius}{horizontalRadius} and + \l{RadialGradient::verticalRadius}{verticalRadius} properties are not + equal. The angle is given in degrees and the default value is \c 0. + + \table + \header + \li Output examples with different angle values + \li + \li + \row + \li \image RadialGradient_angle1.png + \li \image RadialGradient_angle2.png + \li \image RadialGradient_angle3.png + \row + \li \b { angle: 0 } + \li \b { angle: 45 } + \li \b { angle: 90 } + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l horizontalRadius: 100 + \li \l horizontalRadius: 100 + \li \l horizontalRadius: 100 + \row + \li \l verticalRadius: 300 + \li \l verticalRadius: 300 + \li \l verticalRadius: 300 + \endtable + */ + property real angle: 0.0 + + /*! + This property defines the item that is going to be filled with gradient. + Source item gets rendered into an intermediate pixel buffer and the + alpha values from the result are used to determine the gradient's pixels + visibility in the display. The default value for source is undefined and + in that case whole effect area is filled with gradient. + + \table + \header + \li Output examples with different source values + \li + \li + \row + \li \image RadialGradient_maskSource1.png + \li \image RadialGradient_maskSource2.png + \row + \li \b { source: undefined } + \li \b { source: Image { source: images/butterfly.png } } + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l horizontalRadius: 300 + \li \l horizontalRadius: 300 + \row + \li \l verticalRadius: 300 + \li \l verticalRadius: 300 + \row + \li \l angle: 0 + \li \l angle: 0 + \endtable + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + A gradient is defined by two or more colors, which are blended + seamlessly. The colors are specified as a set of GradientStop child + items, each of which defines a position on the gradient from 0.0 to 1.0 + and a color. The position of each GradientStop is defined by setting the + position property. The color is defined by setting the color property. + + \table + \header + \li Output examples with different gradient values + \li + \li + \row + \li \image RadialGradient_gradient1.png + \li \image RadialGradient_gradient2.png + \li \image RadialGradient_gradient3.png + \row + \li \b {gradient:} \code + Gradient { + GradientStop { + position: 0.000 + color: Qt.rgba(1, 0, 0, 1) + } + GradientStop { + position: 0.167 + color: Qt.rgba(1, 1, 0, 1) + } + GradientStop { + position: 0.333 + color: Qt.rgba(0, 1, 0, 1) + } + GradientStop { + position: 0.500 + color: Qt.rgba(0, 1, 1, 1) + } + GradientStop { + position: 0.667 + color: Qt.rgba(0, 0, 1, 1) + } + GradientStop { + position: 0.833 + color: Qt.rgba(1, 0, 1, 1) + } + GradientStop { + position: 1.000 + color: Qt.rgba(1, 0, 0, 1) + } + } + \endcode + \li \b {gradient:} \code + Gradient { + GradientStop { + position: 0.0 + color: "#F0F0F0" + } + GradientStop { + position: 0.5 + color: "#000000" + } + GradientStop { + position: 1.0 + color: "#F0F0F0" + } + } + \endcode + \li \b {gradient:} + \code + Gradient { + GradientStop { + position: 0.0 + color: "#00000000" + } + GradientStop { + position: 1.0 + color: "#FF000000" + } + } + \endcode + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \row + \li \l horizontalRadius: 300 + \li \l horizontalRadius: 300 + \li \l horizontalRadius: 300 + \row + \li \l verticalRadius: 300 + \li \l verticalRadius: 300 + \li \l verticalRadius: 300 + \row + \li \l angle: 0 + \li \l angle: 0 + \li \l angle: 0 + \endtable + */ + property Gradient gradient: Gradient { + GradientStop { position: 0.0; color: "white" } + GradientStop { position: 1.0; color: "black" } + } + + SourceProxy { + id: maskSourceProxy + input: rootItem.source + } + + ShaderEffectSource { + id: gradientSource + sourceItem: Rectangle { + width: 16 + height: 256 + gradient: rootItem.gradient + smooth: true + } + smooth: true + hideSource: true + visible: false + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant gradientImage: gradientSource + property variant maskSource: maskSourceProxy.output + property variant center: Qt.point(0.5 + rootItem.horizontalOffset / width, 0.5 + rootItem.verticalOffset / height) + property real horizontalRatio: rootItem.horizontalRadius > 0 ? width / (2 * rootItem.horizontalRadius) : width * 16384 + property real verticalRatio: rootItem.verticalRadius > 0 ? height / (2 * rootItem.verticalRadius) : height * 16384 + property real angle: -rootItem.angle / 360 * 2 * Math.PI + property variant matrixData: Qt.point(Math.sin(angle), Math.cos(angle)) + + anchors.fill: parent + + vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient.vert" + + fragmentShader: maskSource == undefined ? noMaskShader : maskShader + + onFragmentShaderChanged: horizontalRatioChanged() + + property string maskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient_mask.frag" + property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient_nomask.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RectangularGlow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RectangularGlow.qml new file mode 100644 index 0000000..62862e3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RectangularGlow.qml @@ -0,0 +1,269 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype RectangularGlow + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-glow + \brief Generates a blurred and colorized rectangle, which gives + the impression that the source is glowing. + + This effect is intended to have good performance. The shape of the glow is + limited to a rectangle with a custom corner radius. For situations where + custom shapes are required, consider \l {QtGraphicalEffects::Glow} {Glow} + effect. + + \table + \header + \li Effect applied + \row + \li \image RectangularGlow_applied.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet RectangularGlow-example.qml example +*/ +Item { + id: rootItem + + /*! + This property defines how many pixels outside the item area are reached + by the glow. + + The value ranges from 0.0 (no glow) to inf (infinite glow). By default, + the property is set to \c 0.0. + + \table + \header + \li Output examples with different glowRadius values + \li + \li + \row + \li \image RectangularGlow_glowRadius1.png + \li \image RectangularGlow_glowRadius2.png + \li \image RectangularGlow_glowRadius3.png + \row + \li \b { glowRadius: 10 } + \li \b { glowRadius: 20 } + \li \b { glowRadius: 40 } + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + + */ + property real glowRadius: 0.0 + + /*! + This property defines how large part of the glow color is strengthened + near the source edges. + + The value ranges from 0.0 (no strength increase) to 1.0 (maximum + strength increase). By default, the property is set to \c 0.0. + + \table + \header + \li Output examples with different spread values + \li + \li + \row + \li \image RectangularGlow_spread1.png + \li \image RectangularGlow_spread2.png + \li \image RectangularGlow_spread3.png + \row + \li \b { spread: 0.0 } + \li \b { spread: 0.5 } + \li \b { spread: 1.0 } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + */ + property real spread: 0.0 + + /*! + This property defines the RGBA color value which is used for the glow. + + By default, the property is set to \c "white". + + \table + \header + \li Output examples with different color values + \li + \li + \row + \li \image RectangularGlow_color1.png + \li \image RectangularGlow_color2.png + \li \image RectangularGlow_color3.png + \row + \li \b { color: #ffffff } + \li \b { color: #55ff55 } + \li \b { color: #5555ff } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + */ + property color color: "white" + + /*! + This property defines the corner radius that is used to draw a glow with + rounded corners. + + The value ranges from 0.0 to half of the effective width or height of + the glow, whichever is smaller. This can be calculated with: \c{ + min(width, height) / 2.0 + glowRadius} + + By default, the property is bound to glowRadius property. The glow + behaves as if the rectangle was blurred when adjusting the glowRadius + property. + + \table + \header + \li Output examples with different cornerRadius values + \li + \li + \row + \li \image RectangularGlow_cornerRadius1.png + \li \image RectangularGlow_cornerRadius2.png + \li \image RectangularGlow_cornerRadius3.png + \row + \li \b { cornerRadius: 0 } + \li \b { cornerRadius: 25 } + \li \b { cornerRadius: 50 } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \endtable + */ + property real cornerRadius: glowRadius + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + + x: (parent.width - width) / 2.0 + y: (parent.height - height) / 2.0 + width: parent.width + rootItem.glowRadius * 2 + cornerRadius * 2 + height: parent.height + rootItem.glowRadius * 2 + cornerRadius * 2 + + function clampedCornerRadius() { + var maxCornerRadius = Math.min(rootItem.width, rootItem.height) / 2 + glowRadius; + return Math.max(0, Math.min(rootItem.cornerRadius, maxCornerRadius)) + } + + property color color: rootItem.color + property real inverseSpread: 1.0 - rootItem.spread + property real relativeSizeX: ((inverseSpread * inverseSpread) * rootItem.glowRadius + cornerRadius * 2.0) / width + property real relativeSizeY: relativeSizeX * (width / height) + property real spread: rootItem.spread / 2.0 + property real cornerRadius: clampedCornerRadius() + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/rectangularglow.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RecursiveBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RecursiveBlur.qml new file mode 100644 index 0000000..7d93802 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/RecursiveBlur.qml @@ -0,0 +1,329 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype RecursiveBlur + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-blur + \brief Blurs repeatedly, providing a strong blur effect. + + The RecursiveBlur effect softens the image by blurring it with an algorithm + that uses a recursive feedback loop to blur the source multiple times. The + effect may give more blurry results than + \l{QtGraphicalEffects::GaussianBlur}{GaussianBlur} or + \l{QtGraphicalEffects::FastBlur}{FastBlur}, but the result is produced + asynchronously and takes more time. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image RecursiveBlur_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet RecursiveBlur-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that is going to be blurred. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the distance of neighboring pixels which influence + the blurring of individual pixels. A larger radius provides better + quality, but is slower to render. + + \b Note: The radius value in this effect is not intended to be changed + or animated frequently. The correct way to use it is to set the correct + value and keep it unchanged for the whole duration of the iterative blur + sequence. + + The value ranges from (no blur) to 16.0 (maximum blur step). By default, + the property is set to \c 0.0 (no blur). + + \table + \header + \li Output examples with different radius values + \li + \li + \row + \li \image RecursiveBlur_radius1.png + \li \image RecursiveBlur_radius2.png + \li \image RecursiveBlur_radius3.png + \row + \li \b { radius: 2.5 } + \li \b { radius: 4.5 } + \li \b { radius: 7.5 } + \row + \li \l loops: 20 + \li \l loops: 20 + \li \l loops: 20 + \endtable + + */ + property real radius: 0.0 + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + + */ + property bool cached: false + + /*! + This property defines the blur behavior near the edges of the item, + where the pixel blurring is affected by the pixels outside the source + edges. + + If the property is set to \c true, the pixels outside the source are + interpreted to be transparent, which is similar to OpenGL + clamp-to-border extension. The blur is expanded slightly outside the + effect item area. + + If the property is set to \c false, the pixels outside the source are + interpreted to contain the same color as the pixels at the edge of the + item, which is similar to OpenGL clamp-to-edge behavior. The blur does + not expand outside the effect item area. + + By default, the property is set to \c false. + + \table + \header + \li Output examples with different transparentBorder values + \li + \li + \row + \li \image RecursiveBlur_transparentBorder1.png + \li \image RecursiveBlur_transparentBorder2.png + \row + \li \b { transparentBorder: false } + \li \b { transparentBorder: true } + \row + \li \l loops: 20 + \li \l loops: 20 + \row + \li \l radius: 7.5 + \li \l radius: 7.5 + \endtable + */ + property bool transparentBorder: false + + /*! + This property defines the amount of blur iterations that are going to be + performed for the source. When the property changes, the iterative + blurring process starts. If the value is decreased or if the value + changes from zero to non-zero, a snapshot is taken from the source. The + snapshot is used as a starting point for the process. + + The iteration loop tries to run as fast as possible. The speed might be + limited by the VSYNC or the time needed for one blur step, or both. + Sometimes it may be desirable to perform the blurring with a slower + pace. In that case, it may be convenient to control the property with + Animation which increases the value. + + The value ranges from 0 to inf. By default, the property is set to \c 0. + + \table + \header + \li Output examples with different loops values + \li + \li + \row + \li \image RecursiveBlur_loops1.png + \li \image RecursiveBlur_loops2.png + \li \image RecursiveBlur_loops3.png + \row + \li \b { loops: 4 } + \li \b { loops: 20 } + \li \b { loops: 70 } + \row + \li \l radius: 7.5 + \li \l radius: 7.5 + \li \l radius: 7.5 + \endtable + + */ + property int loops: 0 + + /*! + This property holds the progress of asynchronous source blurring + process, from 0.0 (nothing blurred) to 1.0 (finished). + */ + property real progress: loops > 0.0 ? Math.min(1.0, recursionTimer.counter / loops) : 0.0 + + onLoopsChanged: recursiveSource.scheduleUpdate() + onSourceChanged: recursionTimer.reset() + onRadiusChanged: recursionTimer.reset() + onTransparentBorderChanged: recursionTimer.reset() + + SourceProxy { + id: sourceProxy + input: rootItem.source + sourceRect: rootItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2, parent.height + 2) : Qt.rect(0, 0, 0, 0) + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: verticalBlur + smooth: true + visible: rootItem.cached + hideSource: visible + live: true + sourceItem: inputItem.visible ? inputItem : verticalBlur + } + + Item { + id: recursionTimer + property int counter: 0 + + function reset() { + counter = 0 + recursiveSource.scheduleUpdate() + } + + function nextFrame() { + if (loops < counter) + recursionTimer.counter = 0 + + if (counter > 0) + recursiveSource.sourceItem = verticalBlur + else + recursiveSource.sourceItem = inputItem + + if (counter < loops) { + recursiveSource.scheduleUpdate() + counter++ + } + } + } + + ShaderEffect { + id: inputItem + property variant source: sourceProxy.output + property real expandX: rootItem.transparentBorder ? (horizontalBlur.maximumRadius) / horizontalBlur.width : 0.0 + property real expandY: rootItem.transparentBorder ? (horizontalBlur.maximumRadius) / horizontalBlur.height : 0.0 + + anchors.fill: verticalBlur + visible: !verticalBlur.visible + + vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/recursiveblur.vert" + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/recursiveblur.frag" + } + + ShaderEffectSource { + id: recursiveSource + visible: false + smooth: true + hideSource: false + live: false + sourceItem: inputItem + recursive: true + onSourceItemChanged: scheduleUpdate() + onScheduledUpdateCompleted: recursionTimer.nextFrame() + } + + GaussianDirectionalBlur { + id: verticalBlur + x: rootItem.transparentBorder ? -horizontalBlur.maximumRadius - 1 : 0 + y: rootItem.transparentBorder ? -horizontalBlur.maximumRadius - 1 : 0 + width: horizontalBlur.width + 2 + height: horizontalBlur.height + 2 + + horizontalStep: 0.0 + verticalStep: 1.0 / parent.height + + source: ShaderEffectSource { + sourceItem: horizontalBlur + hideSource: true + visible: false + smooth: true + } + + deviation: (radius + 1) / 2.3333 + radius: rootItem.radius + maximumRadius: Math.ceil(rootItem.radius) + transparentBorder: false + visible: loops > 0 + } + + GaussianDirectionalBlur { + id: horizontalBlur + width: rootItem.transparentBorder ? parent.width + 2 * maximumRadius + 2 : parent.width + height: rootItem.transparentBorder ? parent.height + 2 * maximumRadius + 2 : parent.height + + horizontalStep: 1.0 / parent.width + verticalStep: 0.0 + + source: recursiveSource + deviation: (radius + 1) / 2.3333 + radius: rootItem.radius + maximumRadius: Math.ceil(rootItem.radius) + transparentBorder: false + visible: false + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ThresholdMask.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ThresholdMask.qml new file mode 100644 index 0000000..204d8c9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ThresholdMask.qml @@ -0,0 +1,215 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype ThresholdMask + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-mask + \brief Masks the source item with another item and applies a threshold + value. + + The masking behavior can be controlled with the \l threshold value for the + mask pixels. + + \table + \header + \li Source + \li MaskSource + \li Effect applied + \row + \li \image Original_bug.png + \li \image ThresholdMask_mask.png + \li \image ThresholdMask_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet ThresholdMask-example.qml example +*/ +Item { + id: rootItem + + /*! + This property defines the source item that is going to be masked. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the item that is going to be used as the mask. + Mask item gets rendered into an intermediate pixel buffer and the alpha + values from the result are used to determine the source item's pixels + visibility in the display. + + \table + \header + \li Original + \li Mask + \li Effect applied + \row + \li \image Original_bug.png + \li \image ThresholdMask_mask.png + \li \image ThresholdMask_bug.png + \endtable + + \note It is not supported to let the effect include itself, for + instance by setting maskSource to the effect's parent. + */ + property variant maskSource + + /*! + This property defines a threshold value for the mask pixels. The mask + pixels that have an alpha value below this property are used to + completely mask away the corresponding pixels from the source item. The + mask pixels that have a higher alpha value are used to alphablend the + source item to the display. + + The value ranges from 0.0 (alpha value 0) to 1.0 (alpha value 255). By + default, the property is set to \c 0.0. + + \table + \header + \li Output examples with different threshold values + \li + \li + \row + \li \image ThresholdMask_threshold1.png + \li \image ThresholdMask_threshold2.png + \li \image ThresholdMask_threshold3.png + \row + \li \b { threshold: 0.0 } + \li \b { threshold: 0.5 } + \li \b { threshold: 0.7 } + \row + \li \l spread: 0.2 + \li \l spread: 0.2 + \li \l spread: 0.2 + \endtable + */ + property real threshold: 0.0 + + /*! + This property defines the smoothness of the mask edges near the + \l{ThresholdMask::threshold}{threshold} alpha value. Setting spread to + 0.0 uses mask normally with the specified threshold. Setting higher + spread values softens the transition from the transparent mask pixels + towards opaque mask pixels by adding interpolated values between them. + + The value ranges from 0.0 (sharp mask edge) to 1.0 (smooth mask edge). + By default, the property is set to \c 0.0. + + \table + \header + \li Output examples with different spread values + \li + \li + \row + \li \image ThresholdMask_spread1.png + \li \image ThresholdMask_spread2.png + \li \image ThresholdMask_spread3.png + \row + \li \b { spread: 0.0 } + \li \b { spread: 0.2 } + \li \b { spread: 0.8 } + \row + \li \l threshold: 0.4 + \li \l threshold: 0.4 + \li \l threshold: 0.4 + \endtable + + */ + property real spread: 0.0 + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + SourceProxy { + id: maskSourceProxy + input: rootItem.maskSource + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property variant maskSource: maskSourceProxy.output + property real threshold: rootItem.threshold + property real spread: rootItem.spread + + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/thresholdmask.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ZoomBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ZoomBlur.qml new file mode 100644 index 0000000..66ba710 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/ZoomBlur.qml @@ -0,0 +1,306 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +/*! + \qmltype ZoomBlur + \inqmlmodule QtGraphicalEffects + \since QtGraphicalEffects 1.0 + \inherits QtQuick2::Item + \ingroup qtgraphicaleffects-motion-blur + \brief Applies directional blur effect towards source items center point. + + Effect creates perceived impression that the source item appears to be + moving towards the center point in Z-direction or that the camera appears + to be zooming rapidly. Other available motion blur effects are + \l{QtGraphicalEffects::DirectionalBlur}{DirectionalBlur} + and \l{QtGraphicalEffects::RadialBlur}{RadialBlur}. + + \table + \header + \li Source + \li Effect applied + \row + \li \image Original_bug.png + \li \image ZoomBlur_bug.png + \endtable + + \note This effect is available when running with OpenGL. + + \section1 Example + + The following example shows how to apply the effect. + \snippet ZoomBlur-example.qml example + +*/ +Item { + id: rootItem + + /*! + This property defines the source item that is going to be blurred. + + \note It is not supported to let the effect include itself, for + instance by setting source to the effect's parent. + */ + property variant source + + /*! + This property defines the maximum perceived amount of movement for each + pixel. The amount is smaller near the center and reaches the specified + value at the edges. + + The quality of the blur depends on \l{ZoomBlur::samples}{samples} + property. If length value is large, more samples are needed to keep the + visual quality at high level. + + The value ranges from 0.0 to inf. By default the property is set to \c + 0.0 (no blur). + + \table + \header + \li Output examples with different length values + \li + \li + \row + \li \image ZoomBlur_length1.png + \li \image ZoomBlur_length2.png + \li \image ZoomBlur_length3.png + \row + \li \b { length: 0.0 } + \li \b { length: 32.0 } + \li \b { length: 48.0 } + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \li \l horizontalOffset: 0 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + + */ + property real length: 0.0 + + /*! + This property defines how many samples are taken per pixel when blur + calculation is done. Larger value produces better quality, but is slower + to render. + + This property is not intended to be animated. Changing this property may + cause the underlying OpenGL shaders to be recompiled. + + Allowed values are between 0 and inf (practical maximum depends on GPU). + By default the property is set to \c 0 (no samples). + + */ + property int samples: 0 + + /*! + \qmlproperty real QtGraphicalEffects::ZoomBlur::horizontalOffset + \qmlproperty real QtGraphicalEffects::ZoomBlur::verticalOffset + + These properties define an offset in pixels for the blur direction + center point. + + The values range from -inf to inf. By default these properties are set + to \c 0. + + \table + \header + \li Output examples with different horizontalOffset values + \li + \li + \row + \li \image ZoomBlur_horizontalOffset1.png + \li \image ZoomBlur_horizontalOffset2.png + \li \image ZoomBlur_horizontalOffset3.png + \row + \li \b { horizontalOffset: 100.0 } + \li \b { horizontalOffset: 0.0 } + \li \b { horizontalOffset: -100.0 } + \row + \li \l samples: 24 + \li \l samples: 24 + \li \l samples: 24 + \row + \li \l length: 32 + \li \l length: 32 + \li \l length: 32 + \row + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \li \l verticalOffset: 0 + \endtable + */ + property real horizontalOffset: 0.0 + property real verticalOffset: 0.0 + + /*! + This property defines the blur behavior near the edges of the item, + where the pixel blurring is affected by the pixels outside the source + edges. + + If the property is set to \c true, the pixels outside the source are + interpreted to be transparent, which is similar to OpenGL + clamp-to-border extension. The blur is expanded slightly outside the + effect item area. + + If the property is set to \c false, the pixels outside the source are + interpreted to contain the same color as the pixels at the edge of the + item, which is similar to OpenGL clamp-to-edge behavior. The blur does + not expand outside the effect item area. + + By default, the property is set to \c false. + + */ + property bool transparentBorder: false + + /*! + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + sourceRect: rootItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2.0, parent.height + 2.0) : Qt.rect(0, 0, 0, 0) + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property variant center: Qt.point(0.5 + rootItem.horizontalOffset / width, 0.5 + rootItem.verticalOffset / height) + property real len: rootItem.length + property bool transparentBorder: rootItem.transparentBorder + property real samples: rootItem.samples + property real weight: 1.0 / Math.max(1.0, rootItem.samples) + property variant expandPixels: transparentBorder ? Qt.size(rootItem.samples, rootItem.samples) : Qt.size(0,0) + property variant expand: transparentBorder ? Qt.size(expandPixels.width / width, expandPixels.height / height) : Qt.size(0,0) + property variant delta: Qt.size(1.0 / rootItem.width, 1.0 / rootItem.height) + + x: transparentBorder ? -expandPixels.width - 1 : 0 + y: transparentBorder ? -expandPixels.height - 1 : 0 + width: transparentBorder ? parent.width + 2.0 * expandPixels.width + 2 : parent.width + height: transparentBorder ? parent.height + 2.0 * expandPixels.height + 2 : parent.height + + property string fragmentShaderSkeleton: " + varying highp vec2 qt_TexCoord0; + uniform highp float qt_Opacity; + uniform lowp sampler2D source; + uniform highp float len; + uniform highp float weight; + uniform highp float samples; + uniform highp vec2 center; + uniform highp vec2 expand; + uniform highp vec2 delta; + + void main(void) { + mediump vec2 texCoord = qt_TexCoord0; + mediump vec2 centerCoord = center; + + PLACEHOLDER_EXPAND_STEPS + + highp vec2 dir = vec2(centerCoord.x - texCoord.s, centerCoord.y - texCoord.t); + dir /= max(1.0, length(dir) * 2.0); + highp vec2 shift = delta * len * dir * 2.0 / max(1.0, samples - 1.0); + gl_FragColor = vec4(0.0); + + PLACEHOLDER_UNROLLED_LOOP + + gl_FragColor *= weight * qt_Opacity; + } + " + + function buildFragmentShader() { + var shader = "" + if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile) + shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n" + shader += fragmentShaderSkeleton + var expandSteps = "" + + if (transparentBorder) { + expandSteps += "centerCoord = (centerCoord - expand) / (1.0 - 2.0 * expand);" + expandSteps += "texCoord = (texCoord - expand) / (1.0 - 2.0 * expand);" + } + + var unrolledLoop = "gl_FragColor += texture2D(source, texCoord);\n" + + if (rootItem.samples > 1) { + unrolledLoop = "" + for (var i = 0; i < rootItem.samples; i++) + unrolledLoop += "gl_FragColor += texture2D(source, texCoord); texCoord += shift;\n" + } + + shader = shader.replace("PLACEHOLDER_EXPAND_STEPS", expandSteps) + fragmentShader = shader.replace("PLACEHOLDER_UNROLLED_LOOP", unrolledLoop) + } + + onFragmentShaderChanged: sourceChanged() + onSamplesChanged: buildFragmentShader() + onTransparentBorderChanged: buildFragmentShader() + Component.onCompleted: buildFragmentShader() + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/libqtgraphicaleffectsplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/libqtgraphicaleffectsplugin.so new file mode 100755 index 0000000..8581fae Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/libqtgraphicaleffectsplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/plugins.qmltypes new file mode 100644 index 0000000..f805843 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/plugins.qmltypes @@ -0,0 +1,11 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtGraphicalEffects 1.15' + +Module { + dependencies: ["QtQuick 2.12", "QtQuick.Window 2.12"] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/DropShadowBase.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/DropShadowBase.qml new file mode 100644 index 0000000..e9927ea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/DropShadowBase.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Jolla Ltd, author: +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.12 +import QtGraphicalEffects.private 1.12 +import QtGraphicalEffects 1.12 + +Item { + id: root + + property variant source + property real radius: Math.floor(samples / 2) + property int samples: 9 + property color color: "black" + property real horizontalOffset: 0 + property real verticalOffset: 0 + property real spread: 0.0 + property bool cached: false + property bool transparentBorder: true + + GaussianBlur { + id: blur + width: parent.width + height: parent.height + x: Math.round(horizontalOffset) + y: Math.round(verticalOffset) + source: root.source + radius: root.radius * Screen.devicePixelRatio + samples: root.samples * Screen.devicePixelRatio + _thickness: root.spread + transparentBorder: root.transparentBorder + + + _color: root.color; + _alphaOnly: true + // ignoreDevicePixelRatio: root.ignoreDevicePixelRatio + + ShaderEffect { + x: blur._outputRect.x - parent.x + y: blur._outputRect.y - parent.y + width: transparentBorder ? blur._outputRect.width : blur.width + height: transparentBorder ? blur._outputRect.height : blur.height + property variant source: blur._output; + } + + } + + ShaderEffectSource { + id: cacheItem + x: -blur._kernelRadius + horizontalOffset + y: -blur._kernelRadius + verticalOffset + width: blur.width + 2 * blur._kernelRadius + height: blur.height + 2 * blur._kernelRadius + visible: root.cached + smooth: true + sourceRect: Qt.rect(-blur._kernelRadius, -blur._kernelRadius, width, height); + sourceItem: blur + hideSource: visible + } + + +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastGlow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastGlow.qml new file mode 100644 index 0000000..5c737f1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastGlow.qml @@ -0,0 +1,331 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +Item { + id: rootItem + property variant source + property real spread: 0.0 + property real blur: 0.0 + property color color: "white" + property bool transparentBorder: false + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert" + + property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag" + + ShaderEffect { + id: level0 + property variant source: sourceProxy.output + anchors.fill: parent + visible: false + smooth: true + } + + ShaderEffectSource { + id: level1 + width: Math.ceil(shaderItem.width / 32) * 32 + height: Math.ceil(shaderItem.height / 32) * 32 + sourceItem: level0 + hideSource: rootItem.visible + sourceRect: transparentBorder ? Qt.rect(-64, -64, shaderItem.width, shaderItem.height) : Qt.rect(0,0,0,0) + smooth: true + visible: false + } + + ShaderEffect { + id: effect1 + property variant source: level1 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level2 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level2 + width: level1.width / 2 + height: level1.height / 2 + sourceItem: effect1 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect2 + property variant source: level2 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level3 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level3 + width: level2.width / 2 + height: level2.height / 2 + sourceItem: effect2 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect3 + property variant source: level3 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level4 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level4 + width: level3.width / 2 + height: level3.height / 2 + sourceItem: effect3 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect4 + property variant source: level4 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level5 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level5 + width: level4.width / 2 + height: level4.height / 2 + sourceItem: effect4 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect5 + property variant source: level5 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level6 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level6 + width: level5.width / 2 + height: level5.height / 2 + sourceItem: effect5 + hideSource: rootItem.visible + visible: false + smooth: true + } + + Item { + id: dummysource + width: 1 + height: 1 + visible: false + } + + ShaderEffectSource { + id: dummy + width: 1 + height: 1 + sourceItem: dummysource + visible: false + smooth: false + live: false + } + + ShaderEffect { + id: shaderItem + x: transparentBorder ? -64 : 0 + y: transparentBorder ? -64 : 0 + width: transparentBorder ? parent.width + 128 : parent.width + height: transparentBorder ? parent.height + 128 : parent.height + + property variant source1: level1 + property variant source2: level2 + property variant source3: level3 + property variant source4: level4 + property variant source5: level5 + property variant source6: level6 + property real lod: rootItem.blur + + property real weight1; + property real weight2; + property real weight3; + property real weight4; + property real weight5; + property real weight6; + + property real spread: 1.0 - (rootItem.spread * 0.98) + property alias color: rootItem.color + + function weight(v) { + if (v <= 0.0) + return 1 + if (v >= 0.5) + return 0 + + return 1.0 - v / 0.5 + } + + function calculateWeights() { + + var w1 = weight(Math.abs(lod - 0.100)) + var w2 = weight(Math.abs(lod - 0.300)) + var w3 = weight(Math.abs(lod - 0.500)) + var w4 = weight(Math.abs(lod - 0.700)) + var w5 = weight(Math.abs(lod - 0.900)) + var w6 = weight(Math.abs(lod - 1.100)) + + var sum = w1 + w2 + w3 + w4 + w5 + w6; + weight1 = w1 / sum; + weight2 = w2 / sum; + weight3 = w3 / sum; + weight4 = w4 / sum; + weight5 = w5 / sum; + weight6 = w6 / sum; + + upateSources() + } + + function upateSources() { + var sources = new Array(); + var weights = new Array(); + + if (weight1 > 0) { + sources.push(level1) + weights.push(weight1) + } + + if (weight2 > 0) { + sources.push(level2) + weights.push(weight2) + } + + if (weight3 > 0) { + sources.push(level3) + weights.push(weight3) + } + + if (weight4 > 0) { + sources.push(level4) + weights.push(weight4) + } + + if (weight5 > 0) { + sources.push(level5) + weights.push(weight5) + } + + if (weight6 > 0) { + sources.push(level6) + weights.push(weight6) + } + + for (var j = sources.length; j < 6; j++) { + sources.push(dummy) + weights.push(0.0) + } + + source1 = sources[0] + source2 = sources[1] + source3 = sources[2] + source4 = sources[3] + source5 = sources[4] + source6 = sources[5] + + weight1 = weights[0] + weight2 = weights[1] + weight3 = weights[2] + weight4 = weights[3] + weight5 = weights[4] + weight6 = weights[5] + } + + Component.onCompleted: calculateWeights() + + onLodChanged: calculateWeights() + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastglow.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastInnerShadow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastInnerShadow.qml new file mode 100644 index 0000000..bd361ca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastInnerShadow.qml @@ -0,0 +1,335 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +Item { + id: rootItem + property variant source + property real blur: 0.0 + property real horizontalOffset: 0 + property real verticalOffset: 0 + property real spread: 0.0 + property color color: "black" + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert" + + property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag" + + ShaderEffect { + id: level0 + property variant source: sourceProxy.output + property real horizontalOffset: rootItem.horizontalOffset / rootItem.width + property real verticalOffset: rootItem.verticalOffset / rootItem.width + property color color: rootItem.color + + anchors.fill: parent + visible: false + smooth: true + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastinnershadow_level0.frag" + } + + ShaderEffectSource { + id: level1 + width: Math.ceil(shaderItem.width / 32) * 32 + height: Math.ceil(shaderItem.height / 32) * 32 + sourceItem: level0 + hideSource: rootItem.visible + smooth: true + visible: false + } + + ShaderEffect { + id: effect1 + property variant source: level1 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level2 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level2 + width: level1.width / 2 + height: level1.height / 2 + sourceItem: effect1 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect2 + property variant source: level2 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level3 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level3 + width: level2.width / 2 + height: level2.height / 2 + sourceItem: effect2 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect3 + property variant source: level3 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level4 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level4 + width: level3.width / 2 + height: level3.height / 2 + sourceItem: effect3 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect4 + property variant source: level4 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level5 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level5 + width: level4.width / 2 + height: level4.height / 2 + sourceItem: effect4 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect5 + property variant source: level5 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level6 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level6 + width: level5.width / 2 + height: level5.height / 2 + sourceItem: effect5 + hideSource: rootItem.visible + visible: false + smooth: true + } + + Item { + id: dummysource + width: 1 + height: 1 + visible: false + } + + ShaderEffectSource { + id: dummy + width: 1 + height: 1 + sourceItem: dummysource + visible: false + smooth: false + live: false + } + + ShaderEffect { + id: shaderItem + width: parent.width + height: parent.height + + property variant original: sourceProxy.output + property variant source1: level1 + property variant source2: level2 + property variant source3: level3 + property variant source4: level4 + property variant source5: level5 + property variant source6: level6 + property real lod: rootItem.blur + + property real weight1; + property real weight2; + property real weight3; + property real weight4; + property real weight5; + property real weight6; + + property real spread: 1.0 - (rootItem.spread * 0.98) + property color color: rootItem.color + + function weight(v) { + if (v <= 0.0) + return 1 + if (v >= 0.5) + return 0 + + return 1.0 - v / 0.5 + } + + function calculateWeights() { + + var w1 = weight(Math.abs(lod - 0.100)) + var w2 = weight(Math.abs(lod - 0.300)) + var w3 = weight(Math.abs(lod - 0.500)) + var w4 = weight(Math.abs(lod - 0.700)) + var w5 = weight(Math.abs(lod - 0.900)) + var w6 = weight(Math.abs(lod - 1.100)) + + var sum = w1 + w2 + w3 + w4 + w5 + w6; + weight1 = w1 / sum; + weight2 = w2 / sum; + weight3 = w3 / sum; + weight4 = w4 / sum; + weight5 = w5 / sum; + weight6 = w6 / sum; + + upateSources() + } + + function upateSources() { + var sources = new Array(); + var weights = new Array(); + + if (weight1 > 0) { + sources.push(level1) + weights.push(weight1) + } + + if (weight2 > 0) { + sources.push(level2) + weights.push(weight2) + } + + if (weight3 > 0) { + sources.push(level3) + weights.push(weight3) + } + + if (weight4 > 0) { + sources.push(level4) + weights.push(weight4) + } + + if (weight5 > 0) { + sources.push(level5) + weights.push(weight5) + } + + if (weight6 > 0) { + sources.push(level6) + weights.push(weight6) + } + + for (var j = sources.length; j < 6; j++) { + sources.push(dummy) + weights.push(0.0) + } + + source1 = sources[0] + source2 = sources[1] + source3 = sources[2] + source4 = sources[3] + source5 = sources[4] + source6 = sources[5] + + weight1 = weights[0] + weight2 = weights[1] + weight3 = weights[2] + weight4 = weights[3] + weight5 = weights[4] + weight6 = weights[5] + } + + Component.onCompleted: calculateWeights() + + onLodChanged: calculateWeights() + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastinnershadow.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastMaskedBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastMaskedBlur.qml new file mode 100644 index 0000000..56800c6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/FastMaskedBlur.qml @@ -0,0 +1,247 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +Item { + id: rootItem + property variant source + property variant maskSource + property real blur: 0.0 + property bool transparentBorder: false + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + SourceProxy { + id: maskSourceProxy + input: rootItem.maskSource + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + sourceItem: shaderItem + live: true + hideSource: visible + smooth: rootItem.blur > 0 + } + + property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert" + + property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag" + + ShaderEffect { + id: mask0 + property variant source: maskSourceProxy.output + anchors.fill: parent + visible: false + smooth: true + } + + ShaderEffectSource { + id: masklevel1 + width: Math.ceil(shaderItem.width / 32) * 32 + height: Math.ceil(shaderItem.height / 32) * 32 + sourceItem: mask0 + hideSource: rootItem.visible + sourceRect: transparentBorder ? Qt.rect(-64, -64, shaderItem.width, shaderItem.height) : Qt.rect(0, 0, 0, 0) + visible: false + smooth: rootItem.blur > 0 + } + + ShaderEffect { + id: level0 + property variant source: sourceProxy.output + anchors.fill: parent + visible: false + smooth: true + } + + ShaderEffectSource { + id: level1 + width: Math.ceil(shaderItem.width / 32) * 32 + height: Math.ceil(shaderItem.height / 32) * 32 + sourceItem: level0 + hideSource: rootItem.visible + sourceRect: transparentBorder ? Qt.rect(-64, -64, shaderItem.width, shaderItem.height) : Qt.rect(0, 0, 0, 0) + visible: false + smooth: rootItem.blur > 0 + } + + ShaderEffect { + id: effect1 + property variant source: level1 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level2 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level2 + width: level1.width / 2 + height: level1.height / 2 + sourceItem: effect1 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect2 + property variant source: level2 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level3 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level3 + width: level2.width / 2 + height: level2.height / 2 + sourceItem: effect2 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect3 + property variant source: level3 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level4 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level4 + width: level3.width / 2 + height: level3.height / 2 + sourceItem: effect3 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect4 + property variant source: level4 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level5 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level5 + width: level4.width / 2 + height: level4.height / 2 + sourceItem: effect4 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect5 + property variant source: level5 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level6 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level6 + width: level5.width / 2 + height: level5.height / 2 + sourceItem: effect5 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: shaderItem + property variant mask: masklevel1 + property variant source1: level1 + property variant source2: level2 + property variant source3: level3 + property variant source4: level4 + property variant source5: level5 + property variant source6: level6 + property real lod: Math.sqrt(rootItem.blur) * 1.2 - 0.2 + property real weight1 + property real weight2 + property real weight3 + property real weight4 + property real weight5 + property real weight6 + + x: transparentBorder ? -64 : 0 + y: transparentBorder ? -64 : 0 + width: transparentBorder ? parent.width + 128 : parent.width + height: transparentBorder ? parent.height + 128 : parent.height + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastmaskedblur.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianDirectionalBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianDirectionalBlur.qml new file mode 100644 index 0000000..4d52b2e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianDirectionalBlur.qml @@ -0,0 +1,289 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +Item { + id: rootItem + property variant source + property real deviation: (radius + 1) / 3.3333 + property real radius: 0.0 + property int maximumRadius: 0 + property real horizontalStep: 0.0 + property real verticalStep: 0.0 + property bool transparentBorder: false + property bool cached: false + + property bool enableColor: false + property color color: "white" + property real spread: 0.0 + + property bool enableMask: false + property variant maskSource + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + SourceProxy { + id: maskSourceProxy + input: rootItem.maskSource + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: rootItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: sourceProxy.output + property real deviation: Math.max(0.1, rootItem.deviation) + property real radius: rootItem.radius + property int maxRadius: rootItem.maximumRadius + property bool transparentBorder: rootItem.transparentBorder + property real gaussianSum: 0.0 + property real startIndex: 0.0 + property real deltaFactor: (2 * radius - 1) / (maxRadius * 2 - 1) + property real expandX: transparentBorder && rootItem.horizontalStep > 0 ? maxRadius / width : 0.0 + property real expandY: transparentBorder && rootItem.verticalStep > 0 ? maxRadius / height : 0.0 + property variant gwts: [] + property variant delta: Qt.vector3d(rootItem.horizontalStep * deltaFactor, rootItem.verticalStep * deltaFactor, startIndex); + property variant factor_0_2: Qt.vector3d(gwts[0], gwts[1], gwts[2]); + property variant factor_3_5: Qt.vector3d(gwts[3], gwts[4], gwts[5]); + property variant factor_6_8: Qt.vector3d(gwts[6], gwts[7], gwts[8]); + property variant factor_9_11: Qt.vector3d(gwts[9], gwts[10], gwts[11]); + property variant factor_12_14: Qt.vector3d(gwts[12], gwts[13], gwts[14]); + property variant factor_15_17: Qt.vector3d(gwts[15], gwts[16], gwts[17]); + property variant factor_18_20: Qt.vector3d(gwts[18], gwts[19], gwts[20]); + property variant factor_21_23: Qt.vector3d(gwts[21], gwts[22], gwts[23]); + property variant factor_24_26: Qt.vector3d(gwts[24], gwts[25], gwts[26]); + property variant factor_27_29: Qt.vector3d(gwts[27], gwts[28], gwts[29]); + property variant factor_30_31: Qt.point(gwts[30], gwts[31]); + + property color color: rootItem.color + property real spread: 1.0 - (rootItem.spread * 0.98) + property variant maskSource: maskSourceProxy.output + + anchors.fill: rootItem + + function gausFunc(x){ + //Gaussian function = h(x):=(1/sqrt(2*3.14159*(D^2))) * %e^(-(x^2)/(2*(D^2))); + return (1.0 / Math.sqrt(2 * Math.PI * (Math.pow(shaderItem.deviation, 2)))) * Math.pow(Math.E, -((Math.pow(x, 2)) / (2 * (Math.pow(shaderItem.deviation, 2))))); + } + + function updateGaussianWeights() { + gaussianSum = 0.0; + startIndex = -maxRadius + 0.5 + + var n = new Array(32); + for (var j = 0; j < 32; j++) + n[j] = 0; + + var max = maxRadius * 2 + var delta = (2 * radius - 1) / (max - 1); + for (var i = 0; i < max; i++) { + n[i] = gausFunc(-radius + 0.5 + i * delta); + gaussianSum += n[i]; + } + + gwts = n; + } + + function buildFragmentShader() { + + var shaderSteps = [ + "gl_FragColor += texture2D(source, texCoord) * factor_0_2.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_0_2.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_0_2.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_3_5.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_3_5.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_3_5.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_6_8.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_6_8.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_6_8.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_9_11.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_9_11.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_9_11.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_12_14.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_12_14.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_12_14.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_15_17.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_15_17.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_15_17.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_18_20.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_18_20.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_18_20.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_21_23.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_21_23.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_21_23.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_24_26.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_24_26.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_24_26.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_27_29.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_27_29.y; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_27_29.z; texCoord += shift;", + + "gl_FragColor += texture2D(source, texCoord) * factor_30_31.x; texCoord += shift;", + "gl_FragColor += texture2D(source, texCoord) * factor_30_31.y; texCoord += shift;" + ] + + var shader = "" + if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile) + shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n" + shader += fragmentShaderBegin + var samples = maxRadius * 2 + if (samples > 32) { + console.log("DirectionalGaussianBlur.qml WARNING: Maximum of blur radius (16) exceeded!") + samples = 32 + } + + for (var i = 0; i < samples; i++) { + shader += shaderSteps[i] + } + + shader += fragmentShaderEnd + + var colorizeSteps = "" + var colorizeUniforms = "" + + var maskSteps = "" + var maskUniforms = "" + + if (enableColor) { + colorizeSteps += "gl_FragColor = mix(vec4(0), color, clamp((gl_FragColor.a - 0.0) / (spread - 0.0), 0.0, 1.0));\n" + colorizeUniforms += "uniform highp vec4 color;\n" + colorizeUniforms += "uniform highp float spread;\n" + } + + if (enableMask) { + maskSteps += "shift *= texture2D(maskSource, qt_TexCoord0).a;\n" + maskUniforms += "uniform sampler2D maskSource;\n" + } + + shader = shader.replace("PLACEHOLDER_COLORIZE_STEPS", colorizeSteps) + shader = shader.replace("PLACEHOLDER_COLORIZE_UNIFORMS", colorizeUniforms) + shader = shader.replace("PLACEHOLDER_MASK_STEPS", maskSteps) + shader = shader.replace("PLACEHOLDER_MASK_UNIFORMS", maskUniforms) + + fragmentShader = shader + } + + onDeviationChanged: updateGaussianWeights() + + onRadiusChanged: updateGaussianWeights() + + onTransparentBorderChanged: { + buildFragmentShader() + updateGaussianWeights() + } + + onMaxRadiusChanged: { + buildFragmentShader() + updateGaussianWeights() + } + + Component.onCompleted: { + buildFragmentShader() + updateGaussianWeights() + } + + property string fragmentShaderBegin: " + varying mediump vec2 qt_TexCoord0; + uniform highp float qt_Opacity; + uniform lowp sampler2D source; + uniform highp vec3 delta; + uniform highp vec3 factor_0_2; + uniform highp vec3 factor_3_5; + uniform highp vec3 factor_6_8; + uniform highp vec3 factor_9_11; + uniform highp vec3 factor_12_14; + uniform highp vec3 factor_15_17; + uniform highp vec3 factor_18_20; + uniform highp vec3 factor_21_23; + uniform highp vec3 factor_24_26; + uniform highp vec3 factor_27_29; + uniform highp vec3 factor_30_31; + uniform highp float gaussianSum; + uniform highp float expandX; + uniform highp float expandY; + PLACEHOLDER_MASK_UNIFORMS + PLACEHOLDER_COLORIZE_UNIFORMS + + void main() { + highp vec2 shift = vec2(delta.x, delta.y); + + PLACEHOLDER_MASK_STEPS + + highp float index = delta.z; + mediump vec2 texCoord = qt_TexCoord0; + texCoord.s = (texCoord.s - expandX) / (1.0 - 2.0 * expandX); + texCoord.t = (texCoord.t - expandY) / (1.0 - 2.0 * expandY); + texCoord += (shift * index); + + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); + " + + property string fragmentShaderEnd: " + + gl_FragColor /= gaussianSum; + + PLACEHOLDER_COLORIZE_STEPS + + gl_FragColor *= qt_Opacity; + } + " + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianGlow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianGlow.qml new file mode 100644 index 0000000..f0d328a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianGlow.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +Item { + id: rootItem + property variant source + property real radius: 0.0 + property int maximumRadius: 0 + property real spread: 0.0 + property color color: "white" + property bool cached: false + property bool transparentBorder: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + sourceRect: rootItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2.0, parent.height + 2.0) : Qt.rect(0, 0, 0, 0) + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + GaussianDirectionalBlur { + id: shaderItem + x: transparentBorder ? -maximumRadius - 1 : 0 + y: transparentBorder ? -maximumRadius - 1 : 0 + width: horizontalBlur.width + height: horizontalBlur.height + horizontalStep: 0.0 + verticalStep: 1.0 / parent.height + source: horizontalBlur + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + transparentBorder: rootItem.transparentBorder + enableColor: true + color: rootItem.color + spread: rootItem.spread + } + + GaussianDirectionalBlur { + id: horizontalBlur + width: transparentBorder ? parent.width + 2 * maximumRadius + 2 : parent.width + height: transparentBorder ? parent.height + 2 * maximumRadius + 2 : parent.height + horizontalStep: 1.0 / parent.width + verticalStep: 0.0 + source: sourceProxy.output + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + transparentBorder: rootItem.transparentBorder + visible: false + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianInnerShadow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianInnerShadow.qml new file mode 100644 index 0000000..a0b39e9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianInnerShadow.qml @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +Item { + id: rootItem + property variant source + property real radius: 0.0 + property int maximumRadius: 0 + property real horizontalOffset: 0 + property real verticalOffset: 0 + property real spread: 0 + property color color: "black" + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect{ + id: shadowItem + anchors.fill: parent + + property variant original: sourceProxy.output + property color color: rootItem.color + property real horizontalOffset: rootItem.horizontalOffset / rootItem.width + property real verticalOffset: rootItem.verticalOffset / rootItem.height + + visible: false + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gaussianinnershadow_shadow.frag" + } + + GaussianDirectionalBlur { + id: blurItem + anchors.fill: parent + horizontalStep: 0.0 + verticalStep: 1.0 / parent.height + source: horizontalBlur + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + visible: false + } + + GaussianDirectionalBlur { + id: horizontalBlur + width: transparentBorder ? parent.width + 2 * maximumRadius : parent.width + height: parent.height + horizontalStep: 1.0 / parent.width + verticalStep: 0.0 + source: shadowItem + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + visible: false + } + + ShaderEffectSource { + id: blurredSource + sourceItem: blurItem + live: true + smooth: true + } + + ShaderEffect { + id: shaderItem + anchors.fill: parent + + property variant original: sourceProxy.output + property variant shadow: blurredSource + property real spread: 1.0 - (rootItem.spread * 0.98) + property color color: rootItem.color + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gaussianinnershadow.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianMaskedBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianMaskedBlur.qml new file mode 100644 index 0000000..8273973 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/GaussianMaskedBlur.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Graphical Effects module. +** +** $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$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtGraphicalEffects.private 1.12 + +Item { + id: rootItem + property variant source + property variant maskSource + property real radius: 0.0 + property int maximumRadius: 0 + property bool cached: false + property bool transparentBorder: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + sourceRect: rootItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2.0, parent.height + 2.0) : Qt.rect(0, 0, 0, 0) + } + + SourceProxy { + id: maskSourceProxy + input: rootItem.maskSource + sourceRect: rootItem.transparentBorder ? Qt.rect(-1, -1, parent.width + 2.0, parent.height + 2.0) : Qt.rect(0, 0, 0, 0) + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: blur + visible: rootItem.cached + smooth: true + sourceItem: blur + live: true + hideSource: visible + } + + GaussianDirectionalBlur { + id: blur + x: transparentBorder ? -maximumRadius - 1: 0 + y: transparentBorder ? -maximumRadius - 1: 0 + width: horizontalBlur.width + height: horizontalBlur.height + horizontalStep: 0.0 + verticalStep: 1.0 / parent.height + source: horizontalBlur + enableMask: true + maskSource: maskSourceProxy.output + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + transparentBorder: rootItem.transparentBorder + } + + GaussianDirectionalBlur { + id: horizontalBlur + width: transparentBorder ? parent.width + 2 * maximumRadius + 2 : parent.width + height: transparentBorder ? parent.height + 2 * maximumRadius + 2 : parent.height + horizontalStep: 1.0 / parent.width + verticalStep: 0.0 + source: sourceProxy.output + enableMask: true + maskSource: maskSourceProxy.output + radius: rootItem.radius + maximumRadius: rootItem.maximumRadius + transparentBorder: rootItem.transparentBorder + visible: false + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/libqtgraphicaleffectsprivate.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/libqtgraphicaleffectsprivate.so new file mode 100755 index 0000000..47190dc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/libqtgraphicaleffectsprivate.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/qmldir new file mode 100644 index 0000000..2d4bdac --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/private/qmldir @@ -0,0 +1,11 @@ +module QtGraphicalEffects.private +plugin qtgraphicaleffectsprivate +classname QtGraphicalEffectsPrivatePlugin +FastGlow 1.0 FastGlow.qml +FastInnerShadow 1.0 FastInnerShadow.qml +FastMaskedBlur 1.0 FastMaskedBlur.qml +GaussianDirectionalBlur 1.0 GaussianDirectionalBlur.qml +GaussianGlow 1.0 GaussianGlow.qml +GaussianInnerShadow 1.0 GaussianInnerShadow.qml +GaussianMaskedBlur 1.0 GaussianMaskedBlur.qml +DropShadowBase 1.0 DropShadowBase.qml diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/qmldir new file mode 100644 index 0000000..72233b5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtGraphicalEffects/qmldir @@ -0,0 +1,31 @@ +module QtGraphicalEffects +plugin qtgraphicaleffectsplugin +classname QtGraphicalEffectsPlugin +Blend 1.0 Blend.qml +BrightnessContrast 1.0 BrightnessContrast.qml +Colorize 1.0 Colorize.qml +ColorOverlay 1.0 ColorOverlay.qml +ConicalGradient 1.0 ConicalGradient.qml +Desaturate 1.0 Desaturate.qml +DirectionalBlur 1.0 DirectionalBlur.qml +Displace 1.0 Displace.qml +DropShadow 1.0 DropShadow.qml +FastBlur 1.0 FastBlur.qml +GammaAdjust 1.0 GammaAdjust.qml +GaussianBlur 1.0 GaussianBlur.qml +Glow 1.0 Glow.qml +HueSaturation 1.0 HueSaturation.qml +InnerShadow 1.0 InnerShadow.qml +LevelAdjust 1.0 LevelAdjust.qml +LinearGradient 1.0 LinearGradient.qml +MaskedBlur 1.0 MaskedBlur.qml +OpacityMask 1.0 OpacityMask.qml +RadialBlur 1.0 RadialBlur.qml +RadialGradient 1.0 RadialGradient.qml +RecursiveBlur 1.0 RecursiveBlur.qml +RectangularGlow 1.0 RectangularGlow.qml +ThresholdMask 1.0 ThresholdMask.qml +ZoomBlur 1.0 ZoomBlur.qml +designersupported +depends QtGraphicalEffects/private 1.0 +depends QtQuick.Window 2.1 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/libdeclarative_location.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/libdeclarative_location.so new file mode 100755 index 0000000..ab6dbe2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/libdeclarative_location.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/plugins.qmltypes new file mode 100644 index 0000000..27d8cbe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/plugins.qmltypes @@ -0,0 +1,1844 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtLocation 5.14' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QAbstractItemModel" + prototype: "QObject" + Enum { + name: "LayoutChangeHint" + values: { + "NoLayoutChangeHint": 0, + "VerticalSortHint": 1, + "HorizontalSortHint": 2 + } + } + Enum { + name: "CheckIndexOption" + values: { + "NoOption": 0, + "IndexIsValid": 1, + "DoNotUseParent": 2, + "ParentIsInvalid": 4 + } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + Parameter { name: "roles"; type: "QVector" } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + } + Signal { + name: "headerDataChanged" + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutChanged" } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutAboutToBeChanged" } + Signal { + name: "rowsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { name: "modelAboutToBeReset" } + Signal { name: "modelReset" } + Signal { + name: "rowsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationRow"; type: "int" } + } + Signal { + name: "rowsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "row"; type: "int" } + } + Signal { + name: "columnsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationColumn"; type: "int" } + } + Signal { + name: "columnsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "column"; type: "int" } + } + Method { name: "submit"; type: "bool" } + Method { name: "revert" } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "parent" + type: "QModelIndex" + Parameter { name: "child"; type: "QModelIndex" } + } + Method { + name: "sibling" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "idx"; type: "QModelIndex" } + } + Method { + name: "rowCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "rowCount"; type: "int" } + Method { + name: "columnCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "columnCount"; type: "int" } + Method { + name: "hasChildren" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "hasChildren"; type: "bool" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + } + Method { + name: "fetchMore" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "canFetchMore" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "flags" + type: "Qt::ItemFlags" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + Parameter { name: "flags"; type: "Qt::MatchFlags" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } + Component { + name: "QDeclarativeCategory" + prototype: "QObject" + exports: ["QtLocation/Category 5.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Visibility" + values: { + "UnspecifiedVisibility": 0, + "DeviceVisibility": 1, + "PrivateVisibility": 2, + "PublicVisibility": 4 + } + } + Enum { + name: "Status" + values: { + "Ready": 0, + "Saving": 1, + "Removing": 2, + "Error": 3 + } + } + Property { name: "category"; type: "QPlaceCategory" } + Property { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Property { name: "categoryId"; type: "string" } + Property { name: "name"; type: "string" } + Property { name: "visibility"; type: "Visibility" } + Property { name: "icon"; type: "QDeclarativePlaceIcon"; isPointer: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Method { name: "errorString"; type: "string" } + Method { + name: "save" + Parameter { name: "parentId"; type: "string" } + } + Method { name: "save" } + Method { name: "remove" } + } + Component { + name: "QDeclarativeCircleMapItem" + defaultProperty: "data" + prototype: "QDeclarativeGeoMapItemBase" + exports: ["QtLocation/MapCircle 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "center"; type: "QGeoCoordinate" } + Property { name: "radius"; type: "double" } + Property { name: "color"; type: "QColor" } + Property { + name: "border" + type: "QDeclarativeMapLineProperties" + isReadonly: true + isPointer: true + } + Signal { + name: "centerChanged" + Parameter { name: "center"; type: "QGeoCoordinate" } + } + Signal { + name: "radiusChanged" + Parameter { name: "radius"; type: "double" } + } + Signal { + name: "colorChanged" + Parameter { name: "color"; type: "QColor" } + } + } + Component { + name: "QDeclarativeContactDetail" + prototype: "QObject" + exports: ["QtLocation/ContactDetail 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "contactDetail"; type: "QPlaceContactDetail" } + Property { name: "label"; type: "string" } + Property { name: "value"; type: "string" } + } + Component { + name: "QDeclarativeContactDetails" + prototype: "QQmlPropertyMap" + exports: ["QtLocation/ContactDetails 5.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + name: "QDeclarativeGeoCameraCapabilities" + prototype: "QObject" + exports: ["QtLocation/CameraCapabilities 5.10"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "minimumZoomLevel"; type: "double"; isReadonly: true } + Property { name: "maximumZoomLevel"; type: "double"; isReadonly: true } + Property { name: "minimumTilt"; type: "double"; isReadonly: true } + Property { name: "maximumTilt"; type: "double"; isReadonly: true } + Property { name: "minimumFieldOfView"; type: "double"; isReadonly: true } + Property { name: "maximumFieldOfView"; type: "double"; isReadonly: true } + } + Component { + name: "QDeclarativeGeoManeuver" + prototype: "QObject" + exports: [ + "QtLocation/RouteManeuver 5.0", + "QtLocation/RouteManeuver 5.11", + "QtLocation/RouteManeuver 5.8" + ] + exportMetaObjectRevisions: [0, 11, 0] + Enum { + name: "Direction" + values: { + "NoDirection": 0, + "DirectionForward": 1, + "DirectionBearRight": 2, + "DirectionLightRight": 3, + "DirectionRight": 4, + "DirectionHardRight": 5, + "DirectionUTurnRight": 6, + "DirectionUTurnLeft": 7, + "DirectionHardLeft": 8, + "DirectionLeft": 9, + "DirectionLightLeft": 10, + "DirectionBearLeft": 11 + } + } + Property { name: "valid"; type: "bool"; isReadonly: true } + Property { name: "position"; type: "QGeoCoordinate"; isReadonly: true } + Property { name: "instructionText"; type: "string"; isReadonly: true } + Property { name: "direction"; type: "Direction"; isReadonly: true } + Property { name: "timeToNextInstruction"; type: "int"; isReadonly: true } + Property { name: "distanceToNextInstruction"; type: "double"; isReadonly: true } + Property { name: "waypoint"; type: "QGeoCoordinate"; isReadonly: true } + Property { name: "waypointValid"; type: "bool"; isReadonly: true } + Property { + name: "extendedAttributes" + revision: 11 + type: "QObject" + isReadonly: true + isPointer: true + } + } + Component { + name: "QDeclarativeGeoMap" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtLocation/Map 5.0", + "QtLocation/Map 5.11", + "QtLocation/Map 5.12", + "QtLocation/Map 5.13", + "QtLocation/Map 5.14" + ] + exportMetaObjectRevisions: [0, 11, 12, 13, 14] + Property { name: "gesture"; type: "QQuickGeoMapGestureArea"; isReadonly: true; isPointer: true } + Property { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Property { name: "minimumZoomLevel"; type: "double" } + Property { name: "maximumZoomLevel"; type: "double" } + Property { name: "zoomLevel"; type: "double" } + Property { name: "tilt"; type: "double" } + Property { name: "minimumTilt"; type: "double" } + Property { name: "maximumTilt"; type: "double" } + Property { name: "bearing"; type: "double" } + Property { name: "fieldOfView"; type: "double" } + Property { name: "minimumFieldOfView"; type: "double" } + Property { name: "maximumFieldOfView"; type: "double" } + Property { name: "activeMapType"; type: "QDeclarativeGeoMapType"; isPointer: true } + Property { + name: "supportedMapTypes" + type: "QDeclarativeGeoMapType" + isList: true + isReadonly: true + } + Property { name: "center"; type: "QGeoCoordinate" } + Property { name: "mapItems"; type: "QList"; isReadonly: true } + Property { name: "mapParameters"; type: "QList"; isReadonly: true } + Property { name: "error"; type: "QGeoServiceProvider::Error"; isReadonly: true } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "visibleRegion"; type: "QGeoShape" } + Property { name: "copyrightsVisible"; type: "bool" } + Property { name: "color"; type: "QColor" } + Property { name: "mapReady"; type: "bool"; isReadonly: true } + Property { name: "visibleArea"; revision: 12; type: "QRectF" } + Signal { + name: "pluginChanged" + Parameter { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + } + Signal { + name: "zoomLevelChanged" + Parameter { name: "zoomLevel"; type: "double" } + } + Signal { + name: "centerChanged" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Signal { + name: "copyrightLinkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "copyrightsVisibleChanged" + Parameter { name: "visible"; type: "bool" } + } + Signal { + name: "colorChanged" + Parameter { name: "color"; type: "QColor" } + } + Signal { + name: "bearingChanged" + Parameter { name: "bearing"; type: "double" } + } + Signal { + name: "tiltChanged" + Parameter { name: "tilt"; type: "double" } + } + Signal { + name: "fieldOfViewChanged" + Parameter { name: "fieldOfView"; type: "double" } + } + Signal { + name: "minimumTiltChanged" + Parameter { name: "minimumTilt"; type: "double" } + } + Signal { + name: "maximumTiltChanged" + Parameter { name: "maximumTilt"; type: "double" } + } + Signal { + name: "minimumFieldOfViewChanged" + Parameter { name: "minimumFieldOfView"; type: "double" } + } + Signal { + name: "maximumFieldOfViewChanged" + Parameter { name: "maximumFieldOfView"; type: "double" } + } + Signal { + name: "copyrightsChanged" + Parameter { name: "copyrightsImage"; type: "QImage" } + } + Signal { + name: "copyrightsChanged" + Parameter { name: "copyrightsHtml"; type: "string" } + } + Signal { + name: "mapReadyChanged" + Parameter { name: "ready"; type: "bool" } + } + Signal { name: "mapObjectsChanged"; revision: 11 } + Signal { name: "visibleRegionChanged"; revision: 14 } + Method { + name: "setBearing" + Parameter { name: "bearing"; type: "double" } + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { + name: "alignCoordinateToPoint" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "removeMapItem" + Parameter { name: "item"; type: "QDeclarativeGeoMapItemBase"; isPointer: true } + } + Method { + name: "addMapItem" + Parameter { name: "item"; type: "QDeclarativeGeoMapItemBase"; isPointer: true } + } + Method { + name: "addMapItemGroup" + Parameter { name: "itemGroup"; type: "QDeclarativeGeoMapItemGroup"; isPointer: true } + } + Method { + name: "removeMapItemGroup" + Parameter { name: "itemGroup"; type: "QDeclarativeGeoMapItemGroup"; isPointer: true } + } + Method { + name: "removeMapItemView" + Parameter { name: "itemView"; type: "QDeclarativeGeoMapItemView"; isPointer: true } + } + Method { + name: "addMapItemView" + Parameter { name: "itemView"; type: "QDeclarativeGeoMapItemView"; isPointer: true } + } + Method { name: "clearMapItems" } + Method { + name: "addMapParameter" + Parameter { name: "parameter"; type: "QDeclarativeGeoMapParameter"; isPointer: true } + } + Method { + name: "removeMapParameter" + Parameter { name: "parameter"; type: "QDeclarativeGeoMapParameter"; isPointer: true } + } + Method { name: "clearMapParameters" } + Method { + name: "toCoordinate" + type: "QGeoCoordinate" + Parameter { name: "position"; type: "QPointF" } + Parameter { name: "clipToViewPort"; type: "bool" } + } + Method { + name: "toCoordinate" + type: "QGeoCoordinate" + Parameter { name: "position"; type: "QPointF" } + } + Method { + name: "fromCoordinate" + type: "QPointF" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + Parameter { name: "clipToViewPort"; type: "bool" } + } + Method { + name: "fromCoordinate" + type: "QPointF" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { name: "fitViewportToMapItems" } + Method { name: "fitViewportToVisibleMapItems" } + Method { + name: "pan" + Parameter { name: "dx"; type: "int" } + Parameter { name: "dy"; type: "int" } + } + Method { name: "prefetchData" } + Method { name: "clearData" } + Method { + name: "fitViewportToGeoShape" + revision: 13 + Parameter { name: "shape"; type: "QGeoShape" } + Parameter { name: "margins"; type: "QVariant" } + } + } + Component { + name: "QDeclarativeGeoMapCopyrightNotice" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtLocation/MapCopyrightNotice 5.9"] + exportMetaObjectRevisions: [0] + Property { name: "mapSource"; type: "QDeclarativeGeoMap"; isPointer: true } + Property { name: "styleSheet"; type: "string" } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "backgroundColorChanged" + Parameter { name: "color"; type: "QColor" } + } + Signal { + name: "styleSheetChanged" + Parameter { name: "styleSheet"; type: "string" } + } + Signal { name: "copyrightsVisibleChanged" } + Method { + name: "copyrightsChanged" + Parameter { name: "copyrightsImage"; type: "QImage" } + } + Method { + name: "copyrightsChanged" + Parameter { name: "copyrightsHtml"; type: "string" } + } + Method { + name: "onCopyrightsStyleSheetChanged" + Parameter { name: "styleSheet"; type: "string" } + } + } + Component { + name: "QDeclarativeGeoMapItemBase" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtLocation/GeoMapItemBase 5.0", + "QtLocation/GeoMapItemBase 5.11", + "QtLocation/GeoMapItemBase 5.14" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 11, 14] + Property { name: "geoShape"; type: "QGeoShape" } + Property { name: "autoFadeIn"; revision: 14; type: "bool" } + Signal { name: "mapItemOpacityChanged" } + Signal { name: "addTransitionFinished"; revision: 12 } + Signal { name: "removeTransitionFinished"; revision: 12 } + } + Component { + name: "QDeclarativeGeoMapItemGroup" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtLocation/MapItemGroup 5.9"] + exportMetaObjectRevisions: [0] + Signal { name: "mapItemOpacityChanged" } + Signal { name: "addTransitionFinished" } + Signal { name: "removeTransitionFinished" } + } + Component { + name: "QDeclarativeGeoMapItemView" + defaultProperty: "data" + prototype: "QDeclarativeGeoMapItemGroup" + exports: ["QtLocation/MapItemView 5.0", "QtLocation/MapItemView 5.12"] + exportMetaObjectRevisions: [0, 12] + Property { name: "model"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "autoFitViewport"; type: "bool" } + Property { name: "add"; revision: 12; type: "QQuickTransition"; isPointer: true } + Property { name: "remove"; revision: 12; type: "QQuickTransition"; isPointer: true } + Property { name: "mapItems"; revision: 12; type: "QList"; isReadonly: true } + Property { name: "incubateDelegates"; revision: 12; type: "bool" } + } + Component { + name: "QDeclarativeGeoMapParameter" + prototype: "QGeoMapParameter" + exports: [ + "QtLocation/DynamicParameter 5.11", + "QtLocation/MapParameter 5.9" + ] + exportMetaObjectRevisions: [0, 0] + Signal { + name: "completed" + Parameter { type: "QDeclarativeGeoMapParameter"; isPointer: true } + } + } + Component { + name: "QDeclarativeGeoMapQuickItem" + defaultProperty: "data" + prototype: "QDeclarativeGeoMapItemBase" + exports: ["QtLocation/MapQuickItem 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "coordinate"; type: "QGeoCoordinate" } + Property { name: "anchorPoint"; type: "QPointF" } + Property { name: "zoomLevel"; type: "double" } + Property { name: "sourceItem"; type: "QQuickItem"; isPointer: true } + } + Component { + name: "QDeclarativeGeoMapType" + prototype: "QObject" + exports: ["QtLocation/MapType 5.0", "QtLocation/MapType 5.5"] + isCreatable: false + exportMetaObjectRevisions: [0, 1] + Enum { + name: "MapStyle" + values: { + "NoMap": 0, + "StreetMap": 1, + "SatelliteMapDay": 2, + "SatelliteMapNight": 3, + "TerrainMap": 4, + "HybridMap": 5, + "TransitMap": 6, + "GrayStreetMap": 7, + "PedestrianMap": 8, + "CarNavigationMap": 9, + "CycleMap": 10, + "CustomMap": 100 + } + } + Property { name: "style"; type: "MapStyle"; isReadonly: true } + Property { name: "name"; type: "string"; isReadonly: true } + Property { name: "description"; type: "string"; isReadonly: true } + Property { name: "mobile"; type: "bool"; isReadonly: true } + Property { name: "night"; revision: 1; type: "bool"; isReadonly: true } + Property { + name: "cameraCapabilities" + type: "QDeclarativeGeoCameraCapabilities" + isReadonly: true + isPointer: true + } + Property { name: "metadata"; type: "QVariantMap"; isReadonly: true } + } + Component { + name: "QDeclarativeGeoRoute" + prototype: "QObject" + exports: [ + "QtLocation/Route 5.0", + "QtLocation/Route 5.11", + "QtLocation/Route 5.12", + "QtLocation/Route 5.13" + ] + exportMetaObjectRevisions: [0, 11, 12, 13] + Property { name: "bounds"; type: "QGeoRectangle"; isReadonly: true } + Property { name: "travelTime"; type: "int"; isReadonly: true } + Property { name: "distance"; type: "double"; isReadonly: true } + Property { name: "path"; type: "QJSValue" } + Property { name: "segments"; type: "QDeclarativeGeoRouteSegment"; isList: true; isReadonly: true } + Property { + name: "routeQuery" + revision: 11 + type: "QDeclarativeGeoRouteQuery" + isReadonly: true + isPointer: true + } + Property { name: "legs"; revision: 12; type: "QList"; isReadonly: true } + Property { + name: "extendedAttributes" + revision: 13 + type: "QObject" + isReadonly: true + isPointer: true + } + Method { + name: "equals" + type: "bool" + Parameter { name: "other"; type: "QDeclarativeGeoRoute"; isPointer: true } + } + } + Component { + name: "QDeclarativeGeoRouteLeg" + prototype: "QDeclarativeGeoRoute" + exports: ["QtLocation/RouteLeg 5.12"] + exportMetaObjectRevisions: [12] + Property { name: "legIndex"; type: "int"; isReadonly: true } + Property { name: "overallRoute"; type: "QObject"; isReadonly: true; isPointer: true } + } + Component { + name: "QDeclarativeGeoRouteModel" + prototype: "QAbstractListModel" + exports: ["QtLocation/RouteModel 5.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Status" + values: { + "Null": 0, + "Ready": 1, + "Loading": 2, + "Error": 3 + } + } + Enum { + name: "RouteError" + values: { + "NoError": 0, + "EngineNotSetError": 1, + "CommunicationError": 2, + "ParseError": 3, + "UnsupportedOptionError": 4, + "UnknownError": 5, + "UnknownParameterError": 100, + "MissingRequiredParameterError": 101 + } + } + Property { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Property { name: "query"; type: "QDeclarativeGeoRouteQuery"; isPointer: true } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "autoUpdate"; type: "bool" } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "error"; type: "RouteError"; isReadonly: true } + Property { name: "measurementSystem"; type: "QLocale::MeasurementSystem" } + Signal { name: "routesChanged" } + Signal { name: "abortRequested" } + Method { name: "update" } + Method { + name: "get" + type: "QDeclarativeGeoRoute*" + Parameter { name: "index"; type: "int" } + } + Method { name: "reset" } + Method { name: "cancel" } + } + Component { + name: "QDeclarativeGeoRouteQuery" + defaultProperty: "quickChildren" + prototype: "QObject" + exports: [ + "QtLocation/RouteQuery 5.0", + "QtLocation/RouteQuery 5.11", + "QtLocation/RouteQuery 5.13" + ] + exportMetaObjectRevisions: [0, 11, 13] + Enum { + name: "TravelMode" + values: { + "CarTravel": 1, + "PedestrianTravel": 2, + "BicycleTravel": 4, + "PublicTransitTravel": 8, + "TruckTravel": 16 + } + } + Enum { + name: "TravelModes" + values: { + "CarTravel": 1, + "PedestrianTravel": 2, + "BicycleTravel": 4, + "PublicTransitTravel": 8, + "TruckTravel": 16 + } + } + Enum { + name: "FeatureType" + values: { + "NoFeature": 0, + "TollFeature": 1, + "HighwayFeature": 2, + "PublicTransitFeature": 4, + "FerryFeature": 8, + "TunnelFeature": 16, + "DirtRoadFeature": 32, + "ParksFeature": 64, + "MotorPoolLaneFeature": 128, + "TrafficFeature": 256 + } + } + Enum { + name: "FeatureWeight" + values: { + "NeutralFeatureWeight": 0, + "PreferFeatureWeight": 1, + "RequireFeatureWeight": 2, + "AvoidFeatureWeight": 4, + "DisallowFeatureWeight": 8 + } + } + Enum { + name: "RouteOptimization" + values: { + "ShortestRoute": 1, + "FastestRoute": 2, + "MostEconomicRoute": 4, + "MostScenicRoute": 8 + } + } + Enum { + name: "RouteOptimizations" + values: { + "ShortestRoute": 1, + "FastestRoute": 2, + "MostEconomicRoute": 4, + "MostScenicRoute": 8 + } + } + Enum { + name: "SegmentDetail" + values: { + "NoSegmentData": 0, + "BasicSegmentData": 1 + } + } + Enum { + name: "SegmentDetails" + values: { + "NoSegmentData": 0, + "BasicSegmentData": 1 + } + } + Enum { + name: "ManeuverDetail" + values: { + "NoManeuvers": 0, + "BasicManeuvers": 1 + } + } + Enum { + name: "ManeuverDetails" + values: { + "NoManeuvers": 0, + "BasicManeuvers": 1 + } + } + Property { name: "numberAlternativeRoutes"; type: "int" } + Property { name: "travelModes"; type: "TravelModes" } + Property { name: "routeOptimizations"; type: "RouteOptimizations" } + Property { name: "segmentDetail"; type: "SegmentDetail" } + Property { name: "maneuverDetail"; type: "ManeuverDetail" } + Property { name: "waypoints"; type: "QVariantList" } + Property { name: "excludedAreas"; type: "QJSValue" } + Property { name: "featureTypes"; type: "QList"; isReadonly: true } + Property { name: "extraParameters"; revision: 11; type: "QVariantMap"; isReadonly: true } + Property { name: "departureTime"; revision: 13; type: "QDateTime" } + Property { name: "quickChildren"; type: "QObject"; isList: true; isReadonly: true } + Signal { name: "queryDetailsChanged" } + Signal { name: "extraParametersChanged"; revision: 11 } + Method { name: "waypointObjects"; type: "QVariantList" } + Method { + name: "addWaypoint" + Parameter { name: "w"; type: "QVariant" } + } + Method { + name: "removeWaypoint" + Parameter { name: "waypoint"; type: "QVariant" } + } + Method { name: "clearWaypoints" } + Method { + name: "addExcludedArea" + Parameter { name: "area"; type: "QGeoRectangle" } + } + Method { + name: "removeExcludedArea" + Parameter { name: "area"; type: "QGeoRectangle" } + } + Method { name: "clearExcludedAreas" } + Method { + name: "setFeatureWeight" + Parameter { name: "featureType"; type: "FeatureType" } + Parameter { name: "featureWeight"; type: "FeatureWeight" } + } + Method { + name: "featureWeight" + type: "int" + Parameter { name: "featureType"; type: "FeatureType" } + } + Method { name: "resetFeatureWeights" } + } + Component { + name: "QDeclarativeGeoRouteSegment" + prototype: "QObject" + exports: ["QtLocation/RouteSegment 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "travelTime"; type: "int"; isReadonly: true } + Property { name: "distance"; type: "double"; isReadonly: true } + Property { name: "path"; type: "QJSValue"; isReadonly: true } + Property { name: "maneuver"; type: "QDeclarativeGeoManeuver"; isReadonly: true; isPointer: true } + } + Component { + name: "QDeclarativeGeoServiceProvider" + defaultProperty: "parameters" + prototype: "QObject" + exports: ["QtLocation/Plugin 5.0", "QtLocation/Plugin 5.11"] + exportMetaObjectRevisions: [0, 11] + Enum { + name: "RoutingFeature" + values: { + "NoRoutingFeatures": 0, + "OnlineRoutingFeature": 1, + "OfflineRoutingFeature": 2, + "LocalizedRoutingFeature": 4, + "RouteUpdatesFeature": 8, + "AlternativeRoutesFeature": 16, + "ExcludeAreasRoutingFeature": 32, + "AnyRoutingFeatures": -1 + } + } + Enum { + name: "RoutingFeatures" + values: { + "NoRoutingFeatures": 0, + "OnlineRoutingFeature": 1, + "OfflineRoutingFeature": 2, + "LocalizedRoutingFeature": 4, + "RouteUpdatesFeature": 8, + "AlternativeRoutesFeature": 16, + "ExcludeAreasRoutingFeature": 32, + "AnyRoutingFeatures": -1 + } + } + Enum { + name: "GeocodingFeature" + values: { + "NoGeocodingFeatures": 0, + "OnlineGeocodingFeature": 1, + "OfflineGeocodingFeature": 2, + "ReverseGeocodingFeature": 4, + "LocalizedGeocodingFeature": 8, + "AnyGeocodingFeatures": -1 + } + } + Enum { + name: "GeocodingFeatures" + values: { + "NoGeocodingFeatures": 0, + "OnlineGeocodingFeature": 1, + "OfflineGeocodingFeature": 2, + "ReverseGeocodingFeature": 4, + "LocalizedGeocodingFeature": 8, + "AnyGeocodingFeatures": -1 + } + } + Enum { + name: "MappingFeature" + values: { + "NoMappingFeatures": 0, + "OnlineMappingFeature": 1, + "OfflineMappingFeature": 2, + "LocalizedMappingFeature": 4, + "AnyMappingFeatures": -1 + } + } + Enum { + name: "MappingFeatures" + values: { + "NoMappingFeatures": 0, + "OnlineMappingFeature": 1, + "OfflineMappingFeature": 2, + "LocalizedMappingFeature": 4, + "AnyMappingFeatures": -1 + } + } + Enum { + name: "PlacesFeature" + values: { + "NoPlacesFeatures": 0, + "OnlinePlacesFeature": 1, + "OfflinePlacesFeature": 2, + "SavePlaceFeature": 4, + "RemovePlaceFeature": 8, + "SaveCategoryFeature": 16, + "RemoveCategoryFeature": 32, + "PlaceRecommendationsFeature": 64, + "SearchSuggestionsFeature": 128, + "LocalizedPlacesFeature": 256, + "NotificationsFeature": 512, + "PlaceMatchingFeature": 1024, + "AnyPlacesFeatures": -1 + } + } + Enum { + name: "PlacesFeatures" + values: { + "NoPlacesFeatures": 0, + "OnlinePlacesFeature": 1, + "OfflinePlacesFeature": 2, + "SavePlaceFeature": 4, + "RemovePlaceFeature": 8, + "SaveCategoryFeature": 16, + "RemoveCategoryFeature": 32, + "PlaceRecommendationsFeature": 64, + "SearchSuggestionsFeature": 128, + "LocalizedPlacesFeature": 256, + "NotificationsFeature": 512, + "PlaceMatchingFeature": 1024, + "AnyPlacesFeatures": -1 + } + } + Enum { + name: "NavigationFeatures" + values: { + "NoNavigationFeatures": 0, + "OnlineNavigationFeature": 1, + "OfflineNavigationFeature": 2, + "AnyNavigationFeatures": -1 + } + } + Property { name: "name"; type: "string" } + Property { name: "availableServiceProviders"; type: "QStringList"; isReadonly: true } + Property { + name: "parameters" + type: "QDeclarativePluginParameter" + isList: true + isReadonly: true + } + Property { + name: "required" + type: "QDeclarativeGeoServiceProviderRequirements" + isPointer: true + } + Property { name: "locales"; type: "QStringList" } + Property { name: "preferred"; type: "QStringList" } + Property { name: "allowExperimental"; type: "bool" } + Property { name: "isAttached"; type: "bool"; isReadonly: true } + Signal { + name: "nameChanged" + Parameter { name: "name"; type: "string" } + } + Signal { name: "attached" } + Signal { + name: "preferredChanged" + Parameter { name: "preferences"; type: "QStringList" } + } + Signal { + name: "allowExperimentalChanged" + Parameter { name: "allow"; type: "bool" } + } + Method { + name: "supportsRouting" + type: "bool" + Parameter { name: "feature"; type: "RoutingFeatures" } + } + Method { name: "supportsRouting"; type: "bool" } + Method { + name: "supportsGeocoding" + type: "bool" + Parameter { name: "feature"; type: "GeocodingFeatures" } + } + Method { name: "supportsGeocoding"; type: "bool" } + Method { + name: "supportsMapping" + type: "bool" + Parameter { name: "feature"; type: "MappingFeatures" } + } + Method { name: "supportsMapping"; type: "bool" } + Method { + name: "supportsPlaces" + type: "bool" + Parameter { name: "feature"; type: "PlacesFeatures" } + } + Method { name: "supportsPlaces"; type: "bool" } + Method { + name: "supportsNavigation" + revision: 11 + type: "bool" + Parameter { name: "feature"; type: "NavigationFeature" } + } + Method { name: "supportsNavigation"; revision: 11; type: "bool" } + } + Component { + name: "QDeclarativeGeoServiceProviderRequirements" + prototype: "QObject" + exports: ["QtLocation/PluginRequirements 5.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "mapping"; type: "QDeclarativeGeoServiceProvider::MappingFeatures" } + Property { name: "routing"; type: "QDeclarativeGeoServiceProvider::RoutingFeatures" } + Property { name: "geocoding"; type: "QDeclarativeGeoServiceProvider::GeocodingFeatures" } + Property { name: "places"; type: "QDeclarativeGeoServiceProvider::PlacesFeatures" } + Property { name: "navigation"; type: "QDeclarativeGeoServiceProvider::NavigationFeatures" } + Signal { + name: "mappingRequirementsChanged" + Parameter { name: "features"; type: "QDeclarativeGeoServiceProvider::MappingFeatures" } + } + Signal { + name: "routingRequirementsChanged" + Parameter { name: "features"; type: "QDeclarativeGeoServiceProvider::RoutingFeatures" } + } + Signal { + name: "geocodingRequirementsChanged" + Parameter { name: "features"; type: "QDeclarativeGeoServiceProvider::GeocodingFeatures" } + } + Signal { + name: "placesRequirementsChanged" + Parameter { name: "features"; type: "QDeclarativeGeoServiceProvider::PlacesFeatures" } + } + Signal { + name: "navigationRequirementsChanged" + Parameter { name: "features"; type: "QDeclarativeGeoServiceProvider::NavigationFeatures" } + } + Signal { name: "requirementsChanged" } + Method { + name: "matches" + type: "bool" + Parameter { name: "provider"; type: "const QGeoServiceProvider"; isPointer: true } + } + } + Component { + name: "QDeclarativeGeoWaypoint" + defaultProperty: "quickChildren" + prototype: "QGeoCoordinateObject" + exports: ["QtLocation/Waypoint 5.11"] + exportMetaObjectRevisions: [0] + Property { name: "latitude"; type: "double" } + Property { name: "longitude"; type: "double" } + Property { name: "altitude"; type: "double" } + Property { name: "isValid"; type: "bool"; isReadonly: true } + Property { name: "bearing"; type: "double" } + Property { name: "metadata"; type: "QVariantMap"; isReadonly: true } + Property { name: "quickChildren"; type: "QObject"; isList: true; isReadonly: true } + Signal { name: "completed" } + Signal { name: "waypointDetailsChanged" } + Signal { name: "extraParametersChanged" } + } + Component { + name: "QDeclarativeGeocodeModel" + prototype: "QAbstractListModel" + exports: ["QtLocation/GeocodeModel 5.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Status" + values: { + "Null": 0, + "Ready": 1, + "Loading": 2, + "Error": 3 + } + } + Enum { + name: "GeocodeError" + values: { + "NoError": 0, + "EngineNotSetError": 1, + "CommunicationError": 2, + "ParseError": 3, + "UnsupportedOptionError": 4, + "CombinationError": 5, + "UnknownError": 6, + "UnknownParameterError": 100, + "MissingRequiredParameterError": 101 + } + } + Property { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Property { name: "autoUpdate"; type: "bool" } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "limit"; type: "int" } + Property { name: "offset"; type: "int" } + Property { name: "query"; type: "QVariant" } + Property { name: "bounds"; type: "QVariant" } + Property { name: "error"; type: "GeocodeError"; isReadonly: true } + Signal { name: "locationsChanged" } + Method { name: "update" } + Method { + name: "get" + type: "QDeclarativeGeoLocation*" + Parameter { name: "index"; type: "int" } + } + Method { name: "reset" } + Method { name: "cancel" } + } + Component { + name: "QDeclarativeMapLineProperties" + prototype: "QObject" + Property { name: "width"; type: "double" } + Property { name: "color"; type: "QColor" } + Signal { + name: "widthChanged" + Parameter { name: "width"; type: "double" } + } + Signal { + name: "colorChanged" + Parameter { name: "color"; type: "QColor" } + } + } + Component { + name: "QDeclarativePlace" + prototype: "QObject" + exports: ["QtLocation/Place 5.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Status" + values: { + "Ready": 0, + "Saving": 1, + "Fetching": 2, + "Removing": 3, + "Error": 4 + } + } + Enum { + name: "Visibility" + values: { + "UnspecifiedVisibility": 0, + "DeviceVisibility": 1, + "PrivateVisibility": 2, + "PublicVisibility": 4 + } + } + Property { name: "place"; type: "QPlace" } + Property { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Property { name: "categories"; type: "QDeclarativeCategory"; isList: true; isReadonly: true } + Property { name: "location"; type: "QDeclarativeGeoLocation"; isPointer: true } + Property { name: "ratings"; type: "QDeclarativeRatings"; isPointer: true } + Property { name: "supplier"; type: "QDeclarativeSupplier"; isPointer: true } + Property { name: "icon"; type: "QDeclarativePlaceIcon"; isPointer: true } + Property { name: "name"; type: "string" } + Property { name: "placeId"; type: "string" } + Property { name: "attribution"; type: "string" } + Property { + name: "reviewModel" + type: "QDeclarativeReviewModel" + isReadonly: true + isPointer: true + } + Property { + name: "imageModel" + type: "QDeclarativePlaceImageModel" + isReadonly: true + isPointer: true + } + Property { + name: "editorialModel" + type: "QDeclarativePlaceEditorialModel" + isReadonly: true + isPointer: true + } + Property { name: "extendedAttributes"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "contactDetails"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "detailsFetched"; type: "bool"; isReadonly: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "primaryPhone"; type: "string"; isReadonly: true } + Property { name: "primaryFax"; type: "string"; isReadonly: true } + Property { name: "primaryEmail"; type: "string"; isReadonly: true } + Property { name: "primaryWebsite"; type: "QUrl"; isReadonly: true } + Property { name: "visibility"; type: "Visibility" } + Property { name: "favorite"; type: "QDeclarativePlace"; isPointer: true } + Method { name: "getDetails" } + Method { name: "save" } + Method { name: "remove" } + Method { name: "errorString"; type: "string" } + Method { + name: "copyFrom" + Parameter { name: "original"; type: "QDeclarativePlace"; isPointer: true } + } + Method { + name: "initializeFavorite" + Parameter { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + } + } + Component { + name: "QDeclarativePlaceAttribute" + prototype: "QObject" + exports: ["QtLocation/PlaceAttribute 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "attribute"; type: "QPlaceAttribute" } + Property { name: "label"; type: "string" } + Property { name: "text"; type: "string" } + } + Component { + name: "QDeclarativePlaceContentModel" + prototype: "QAbstractListModel" + Property { name: "place"; type: "QDeclarativePlace"; isPointer: true } + Property { name: "batchSize"; type: "int" } + Property { name: "totalCount"; type: "int"; isReadonly: true } + } + Component { + name: "QDeclarativePlaceEditorialModel" + prototype: "QDeclarativePlaceContentModel" + exports: ["QtLocation/EditorialModel 5.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QDeclarativePlaceIcon" + prototype: "QObject" + exports: ["QtLocation/Icon 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "icon"; type: "QPlaceIcon" } + Property { name: "parameters"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Method { + name: "url" + type: "QUrl" + Parameter { name: "size"; type: "QSize" } + } + Method { name: "url"; type: "QUrl" } + } + Component { + name: "QDeclarativePlaceImageModel" + prototype: "QDeclarativePlaceContentModel" + exports: ["QtLocation/ImageModel 5.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QDeclarativePlaceUser" + prototype: "QObject" + exports: ["QtLocation/User 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "user"; type: "QPlaceUser" } + Property { name: "userId"; type: "string" } + Property { name: "name"; type: "string" } + } + Component { + name: "QDeclarativePluginParameter" + prototype: "QObject" + exports: ["QtLocation/PluginParameter 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "name"; type: "string" } + Property { name: "value"; type: "QVariant" } + Signal { + name: "nameChanged" + Parameter { name: "name"; type: "string" } + } + Signal { + name: "valueChanged" + Parameter { name: "value"; type: "QVariant" } + } + Signal { name: "initialized" } + } + Component { + name: "QDeclarativePolygonMapItem" + defaultProperty: "data" + prototype: "QDeclarativeGeoMapItemBase" + exports: ["QtLocation/MapPolygon 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "path"; type: "QJSValue" } + Property { name: "color"; type: "QColor" } + Property { + name: "border" + type: "QDeclarativeMapLineProperties" + isReadonly: true + isPointer: true + } + Signal { + name: "colorChanged" + Parameter { name: "color"; type: "QColor" } + } + Method { + name: "addCoordinate" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { + name: "removeCoordinate" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + } + Component { + name: "QDeclarativePolylineMapItem" + defaultProperty: "data" + prototype: "QDeclarativeGeoMapItemBase" + exports: ["QtLocation/MapPolyline 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "path"; type: "QJSValue" } + Property { + name: "line" + type: "QDeclarativeMapLineProperties" + isReadonly: true + isPointer: true + } + Method { name: "pathLength"; type: "int" } + Method { + name: "addCoordinate" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { + name: "insertCoordinate" + Parameter { name: "index"; type: "int" } + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { + name: "replaceCoordinate" + Parameter { name: "index"; type: "int" } + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { + name: "coordinateAt" + type: "QGeoCoordinate" + Parameter { name: "index"; type: "int" } + } + Method { + name: "containsCoordinate" + type: "bool" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { + name: "removeCoordinate" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { + name: "removeCoordinate" + Parameter { name: "index"; type: "int" } + } + Method { + name: "setPath" + Parameter { name: "path"; type: "QGeoPath" } + } + } + Component { + name: "QDeclarativeRatings" + prototype: "QObject" + exports: ["QtLocation/Ratings 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "ratings"; type: "QPlaceRatings" } + Property { name: "average"; type: "double" } + Property { name: "maximum"; type: "double" } + Property { name: "count"; type: "int" } + } + Component { + name: "QDeclarativeRectangleMapItem" + defaultProperty: "data" + prototype: "QDeclarativeGeoMapItemBase" + exports: ["QtLocation/MapRectangle 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "topLeft"; type: "QGeoCoordinate" } + Property { name: "bottomRight"; type: "QGeoCoordinate" } + Property { name: "color"; type: "QColor" } + Property { + name: "border" + type: "QDeclarativeMapLineProperties" + isReadonly: true + isPointer: true + } + Signal { + name: "topLeftChanged" + Parameter { name: "topLeft"; type: "QGeoCoordinate" } + } + Signal { + name: "bottomRightChanged" + Parameter { name: "bottomRight"; type: "QGeoCoordinate" } + } + Signal { + name: "colorChanged" + Parameter { name: "color"; type: "QColor" } + } + } + Component { + name: "QDeclarativeReviewModel" + prototype: "QDeclarativePlaceContentModel" + exports: ["QtLocation/ReviewModel 5.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QDeclarativeRouteMapItem" + defaultProperty: "data" + prototype: "QDeclarativePolylineMapItem" + exports: ["QtLocation/MapRoute 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "route"; type: "QDeclarativeGeoRoute"; isPointer: true } + Signal { + name: "routeChanged" + Parameter { name: "route"; type: "const QDeclarativeGeoRoute"; isPointer: true } + } + } + Component { + name: "QDeclarativeSearchModelBase" + prototype: "QAbstractListModel" + Enum { + name: "Status" + values: { + "Null": 0, + "Ready": 1, + "Loading": 2, + "Error": 3 + } + } + Property { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Property { name: "searchArea"; type: "QVariant" } + Property { name: "limit"; type: "int" } + Property { name: "previousPagesAvailable"; type: "bool"; isReadonly: true } + Property { name: "nextPagesAvailable"; type: "bool"; isReadonly: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Method { name: "update" } + Method { name: "cancel" } + Method { name: "reset" } + Method { name: "errorString"; type: "string" } + Method { name: "previousPage" } + Method { name: "nextPage" } + } + Component { + name: "QDeclarativeSearchResultModel" + prototype: "QDeclarativeSearchModelBase" + exports: [ + "QtLocation/PlaceSearchModel 5.0", + "QtLocation/PlaceSearchModel 5.12" + ] + exportMetaObjectRevisions: [0, 12] + Enum { + name: "SearchResultType" + values: { + "UnknownSearchResult": 0, + "PlaceResult": 1, + "ProposedSearchResult": 2 + } + } + Enum { + name: "RelevanceHint" + values: { + "UnspecifiedHint": 0, + "DistanceHint": 1, + "LexicalPlaceNameHint": 2 + } + } + Property { name: "searchTerm"; type: "string" } + Property { name: "categories"; type: "QDeclarativeCategory"; isList: true; isReadonly: true } + Property { name: "recommendationId"; type: "string" } + Property { name: "relevanceHint"; type: "RelevanceHint" } + Property { name: "visibilityScope"; type: "QDeclarativePlace::Visibility" } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "favoritesPlugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Property { name: "favoritesMatchParameters"; type: "QVariantMap" } + Property { name: "incremental"; revision: 12; type: "bool" } + Signal { name: "rowCountChanged" } + Signal { name: "dataChanged" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "int" } + Parameter { name: "roleName"; type: "string" } + } + Method { + name: "updateWith" + Parameter { name: "proposedSearchIndex"; type: "int" } + } + } + Component { + name: "QDeclarativeSearchSuggestionModel" + prototype: "QDeclarativeSearchModelBase" + exports: ["QtLocation/PlaceSearchSuggestionModel 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "searchTerm"; type: "string" } + Property { name: "suggestions"; type: "QStringList"; isReadonly: true } + } + Component { + name: "QDeclarativeSupplier" + prototype: "QObject" + exports: ["QtLocation/Supplier 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "supplier"; type: "QPlaceSupplier" } + Property { name: "name"; type: "string" } + Property { name: "supplierId"; type: "string" } + Property { name: "url"; type: "QUrl" } + Property { name: "icon"; type: "QDeclarativePlaceIcon"; isPointer: true } + } + Component { + name: "QDeclarativeSupportedCategoriesModel" + prototype: "QAbstractItemModel" + exports: ["QtLocation/CategoryModel 5.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Roles" + values: { + "CategoryRole": 256, + "ParentCategoryRole": 257 + } + } + Enum { + name: "Status" + values: { + "Null": 0, + "Ready": 1, + "Loading": 2, + "Error": 3 + } + } + Property { name: "plugin"; type: "QDeclarativeGeoServiceProvider"; isPointer: true } + Property { name: "hierarchical"; type: "bool" } + Property { name: "status"; type: "Status"; isReadonly: true } + Signal { name: "dataChanged" } + Method { name: "update" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + } + Method { name: "errorString"; type: "string" } + } + Component { + name: "QGeoCoordinateObject" + prototype: "QObject" + Property { name: "coordinate"; type: "QGeoCoordinate" } + } + Component { + name: "QGeoMapObject" + defaultProperty: "quickChildren" + prototype: "QParameterizableObject" + Enum { + name: "Type" + values: { + "InvalidType": 0, + "ViewType": 1, + "RouteType": 2, + "RectangleType": 3, + "CircleType": 4, + "PolylineType": 5, + "PolygonType": 6, + "IconType": 7, + "UserType": 256 + } + } + Property { name: "visible"; type: "bool" } + Property { name: "type"; type: "Type"; isReadonly: true } + Property { name: "geoShape"; type: "QGeoShape" } + Signal { name: "selected" } + Signal { name: "completed" } + } + Component { + name: "QGeoMapParameter" + prototype: "QObject" + Property { name: "type"; type: "string" } + Signal { + name: "propertyUpdated" + Parameter { name: "param"; type: "QGeoMapParameter"; isPointer: true } + Parameter { name: "propertyName"; type: "const char"; isPointer: true } + } + } + Component { + name: "QGeoMapPinchEvent" + prototype: "QObject" + exports: ["QtLocation/MapPinchEvent 5.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "center"; type: "QPointF"; isReadonly: true } + Property { name: "angle"; type: "double"; isReadonly: true } + Property { name: "point1"; type: "QPointF"; isReadonly: true } + Property { name: "point2"; type: "QPointF"; isReadonly: true } + Property { name: "pointCount"; type: "int"; isReadonly: true } + Property { name: "accepted"; type: "bool" } + } + Component { + name: "QParameterizableObject" + defaultProperty: "quickChildren" + prototype: "QObject" + Property { name: "quickChildren"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + name: "QQmlPropertyMap" + prototype: "QObject" + exports: ["QtLocation/ExtendedAttributes 5.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Signal { + name: "valueChanged" + Parameter { name: "key"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Method { name: "keys"; type: "QStringList" } + } + Component { + name: "QQuickGeoMapGestureArea" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtLocation/MapGestureArea 5.0", + "QtLocation/MapGestureArea 5.6" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1] + Enum { + name: "GeoMapGesture" + values: { + "NoGesture": 0, + "PinchGesture": 1, + "PanGesture": 2, + "FlickGesture": 4, + "RotationGesture": 8, + "TiltGesture": 16 + } + } + Enum { + name: "AcceptedGestures" + values: { + "NoGesture": 0, + "PinchGesture": 1, + "PanGesture": 2, + "FlickGesture": 4, + "RotationGesture": 8, + "TiltGesture": 16 + } + } + Property { name: "enabled"; type: "bool" } + Property { name: "pinchActive"; type: "bool"; isReadonly: true } + Property { name: "panActive"; type: "bool"; isReadonly: true } + Property { name: "rotationActive"; type: "bool"; isReadonly: true } + Property { name: "tiltActive"; type: "bool"; isReadonly: true } + Property { name: "acceptedGestures"; type: "AcceptedGestures" } + Property { name: "maximumZoomLevelChange"; type: "double" } + Property { name: "flickDeceleration"; type: "double" } + Property { name: "preventStealing"; revision: 1; type: "bool" } + Signal { + name: "pinchStarted" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + Signal { + name: "pinchUpdated" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + Signal { + name: "pinchFinished" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + Signal { name: "panStarted" } + Signal { name: "panFinished" } + Signal { name: "flickStarted" } + Signal { name: "flickFinished" } + Signal { + name: "rotationStarted" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + Signal { + name: "rotationUpdated" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + Signal { + name: "rotationFinished" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + Signal { + name: "tiltStarted" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + Signal { + name: "tiltUpdated" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + Signal { + name: "tiltFinished" + Parameter { name: "pinch"; type: "QGeoMapPinchEvent"; isPointer: true } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/qmldir new file mode 100644 index 0000000..37ecf66 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtLocation/qmldir @@ -0,0 +1,4 @@ +module QtLocation +plugin declarative_location +classname QtLocationDeclarativeModule +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/Video.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/Video.qml new file mode 100644 index 0000000..24fde22 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/Video.qml @@ -0,0 +1,545 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part 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$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtMultimedia 5.13 + +/*! + \qmltype Video + \inherits Item + \ingroup multimedia_qml + \ingroup multimedia_video_qml + \inqmlmodule QtMultimedia + \brief A convenience type for showing a specified video. + + \c Video is a convenience type combining the functionality + of a \l MediaPlayer and a \l VideoOutput into one. It provides + simple video playback functionality without having to declare multiple + types. + + \qml + Video { + id: video + width : 800 + height : 600 + source: "video.avi" + + MouseArea { + anchors.fill: parent + onClicked: { + video.play() + } + } + + focus: true + Keys.onSpacePressed: video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() + Keys.onLeftPressed: video.seek(video.position - 5000) + Keys.onRightPressed: video.seek(video.position + 5000) + } + \endqml + + \c Video supports untransformed, stretched, and uniformly scaled + video presentation. For a description of stretched uniformly scaled + presentation, see the \l fillMode property description. + + \sa MediaPlayer, VideoOutput + +\omit + \section1 Screen Saver + + If it is likely that an application will be playing video for an extended + period of time without user interaction, it may be necessary to disable + the platform's screen saver. The \l ScreenSaver (from \l QtSystemInfo) + may be used to disable the screensaver in this fashion: + + \qml + import QtSystemInfo 5.0 + + ScreenSaver { screenSaverEnabled: false } + \endqml +\endomit +*/ + +// TODO: Restore Qt System Info docs when the module is released + +Item { + id: video + + /*** Properties of VideoOutput ***/ + /*! + \qmlproperty enumeration Video::fillMode + + Set this property to define how the video is scaled to fit the target + area. + + \list + \li VideoOutput.Stretch - the video is scaled to fit + \li VideoOutput.PreserveAspectFit - the video is scaled uniformly to fit without + cropping + \li VideoOutput.PreserveAspectCrop - the video is scaled uniformly to fill, cropping + if necessary + \endlist + + Because this type is for convenience in QML, it does not + support enumerations directly, so enumerations from \c VideoOutput are + used to access the available fill modes. + + The default fill mode is preserveAspectFit. + */ + property alias fillMode: videoOut.fillMode + + /*! + \qmlproperty enumeration Video::flushMode + + Set this property to define what \c Video should show + when playback is finished or stopped. + + \list + \li VideoOutput.EmptyFrame - clears video output. + \li VideoOutput.FirstFrame - shows the first valid frame. + \li VideoOutput.LastFrame - shows the last valid frame. + \endlist + + The default flush mode is EmptyFrame. + \since 5.15 + */ + property alias flushMode: videoOut.flushMode + + /*! + \qmlproperty int Video::orientation + + The orientation of the \c Video in degrees. Only multiples of 90 + degrees is supported, that is 0, 90, 180, 270, 360, etc. + */ + property alias orientation: videoOut.orientation + + + /*** Properties of MediaPlayer ***/ + + /*! + \qmlproperty enumeration Video::playbackState + + This read only property indicates the playback state of the media. + + \list + \li MediaPlayer.PlayingState - the media is playing + \li MediaPlayer.PausedState - the media is paused + \li MediaPlayer.StoppedState - the media is stopped + \endlist + + The default state is MediaPlayer.StoppedState. + */ + property alias playbackState: player.playbackState + + /*! + \qmlproperty bool Video::autoLoad + + This property indicates if loading of media should begin immediately. + + Defaults to true, if false media will not be loaded until playback is + started. + */ + property alias autoLoad: player.autoLoad + + /*! + \qmlproperty real Video::bufferProgress + + This property holds how much of the data buffer is currently filled, + from 0.0 (empty) to 1.0 + (full). + */ + property alias bufferProgress: player.bufferProgress + + /*! + \qmlproperty int Video::duration + + This property holds the duration of the media in milliseconds. + + If the media doesn't have a fixed duration (a live stream for example) + this will be 0. + */ + property alias duration: player.duration + + /*! + \qmlproperty enumeration Video::error + + This property holds the error state of the video. It can be one of: + + \list + \li MediaPlayer.NoError - there is no current error. + \li MediaPlayer.ResourceError - the video cannot be played due to a problem + allocating resources. + \li MediaPlayer.FormatError - the video format is not supported. + \li MediaPlayer.NetworkError - the video cannot be played due to network issues. + \li MediaPlayer.AccessDenied - the video cannot be played due to insufficient + permissions. + \li MediaPlayer.ServiceMissing - the video cannot be played because the media + service could not be + instantiated. + \endlist + */ + property alias error: player.error + + /*! + \qmlproperty string Video::errorString + + This property holds a string describing the current error condition in more detail. + */ + property alias errorString: player.errorString + + /*! + \qmlproperty enumeration Video::availability + + Returns the availability state of the video instance. + + This is one of: + \table + \header \li Value \li Description + \row \li MediaPlayer.Available + \li The video player is available to use. + \row \li MediaPlayer.Busy + \li The video player is usually available, but some other + process is utilizing the hardware necessary to play media. + \row \li MediaPlayer.Unavailable + \li There are no supported video playback facilities. + \row \li MediaPlayer.ResourceMissing + \li There is one or more resources missing, so the video player cannot + be used. It may be possible to try again at a later time. + \endtable + */ + property alias availability: player.availability + + /*! + \qmlproperty bool Video::hasAudio + + This property holds whether the current media has audio content. + */ + property alias hasAudio: player.hasAudio + + /*! + \qmlproperty bool Video::hasVideo + + This property holds whether the current media has video content. + */ + property alias hasVideo: player.hasVideo + + /*! + \qmlproperty object Video::metaData + + This property holds the meta data for the current media. + + See \l{MediaPlayer::metaData}{MediaPlayer.metaData} for details about each meta data key. + + \sa {QMediaMetaData} + */ + property alias metaData: player.metaData + + /*! + \qmlproperty bool Video::muted + + This property holds whether the audio output is muted. + */ + property alias muted: player.muted + + /*! + \qmlproperty real Video::playbackRate + + This property holds the rate at which video is played at as a multiple + of the normal rate. + */ + property alias playbackRate: player.playbackRate + + /*! + \qmlproperty int Video::position + + This property holds the current playback position in milliseconds. + + To change this position, use the \l seek() method. + + \sa seek() + */ + property alias position: player.position + + /*! + \qmlproperty enumeration Video::audioRole + + This property holds the role of the audio stream. It can be set to specify the type of audio + being played, allowing the system to make appropriate decisions when it comes to volume, + routing or post-processing. + + The audio role must be set before setting the source property. + + Supported values can be retrieved with supportedAudioRoles(). + + The value can be one of: + \list + \li MediaPlayer.UnknownRole - the role is unknown or undefined. + \li MediaPlayer.MusicRole - music. + \li MediaPlayer.VideoRole - soundtrack from a movie or a video. + \li MediaPlayer.VoiceCommunicationRole - voice communications, such as telephony. + \li MediaPlayer.AlarmRole - alarm. + \li MediaPlayer.NotificationRole - notification, such as an incoming e-mail or a chat request. + \li MediaPlayer.RingtoneRole - ringtone. + \li MediaPlayer.AccessibilityRole - for accessibility, such as with a screen reader. + \li MediaPlayer.SonificationRole - sonification, such as with user interface sounds. + \li MediaPlayer.GameRole - game audio. + \li MediaPlayer.CustomRole - The role is specified by customAudioRole. + \endlist + + customAudioRole is cleared when this property is set to anything other than CustomRole. + + \since 5.6 + */ + property alias audioRole: player.audioRole + + /*! + \qmlproperty string Video::customAudioRole + + This property holds the role of the audio stream when the backend supports audio roles + unknown to Qt. It can be set to specify the type of audio being played, allowing the + system to make appropriate decisions when it comes to volume, routing or post-processing. + + The audio role must be set before setting the source property. + + audioRole is set to CustomRole when this property is set. + + \since 5.11 + */ + property alias customAudioRole: player.customAudioRole + + /*! + \qmlproperty bool Video::seekable + + This property holds whether the playback position of the video can be + changed. + + If true, calling the \l seek() method will cause playback to seek to the new position. + */ + property alias seekable: player.seekable + + /*! + \qmlproperty url Video::source + + This property holds the source URL of the media. + + Setting the \l source property clears the current \l playlist, if any. + */ + property alias source: player.source + + /*! + \qmlproperty Playlist Video::playlist + + This property holds the playlist used by the media player. + + Setting the \l playlist property resets the \l source to an empty string. + + \since 5.6 + */ + property alias playlist: player.playlist + + /*! + \qmlproperty enumeration Video::status + + This property holds the status of media loading. It can be one of: + + \list + \li MediaPlayer.NoMedia - no media has been set. + \li MediaPlayer.Loading - the media is currently being loaded. + \li MediaPlayer.Loaded - the media has been loaded. + \li MediaPlayer.Buffering - the media is buffering data. + \li MediaPlayer.Stalled - playback has been interrupted while the media is buffering data. + \li MediaPlayer.Buffered - the media has buffered data. + \li MediaPlayer.EndOfMedia - the media has played to the end. + \li MediaPlayer.InvalidMedia - the media cannot be played. + \li MediaPlayer.UnknownStatus - the status of the media cannot be determined. + \endlist + */ + property alias status: player.status + + /*! + \qmlproperty real Video::volume + + This property holds the audio volume. + + The volume is scaled linearly from \c 0.0 (silence) to \c 1.0 (full volume). Values outside + this range will be clamped. + + The default volume is \c 1.0. + + UI volume controls should usually be scaled nonlinearly. For example, using a logarithmic + scale will produce linear changes in perceived loudness, which is what a user would normally + expect from a volume control. See \l {QtMultimedia::QtMultimedia::convertVolume()}{QtMultimedia.convertVolume()} + for more details. + */ + property alias volume: player.volume + + /*! + \qmlproperty bool Video::autoPlay + + This property determines whether the media should begin playback automatically. + + Setting to \c true also sets \l autoLoad to \c true. The default is \c false. + */ + property alias autoPlay: player.autoPlay + + /*! + \qmlproperty int Video::notifyInterval + + The interval at which notifiable properties will update. + + The notifiable properties are \l position and \l bufferProgress. + + The interval is expressed in milliseconds, the default value is 1000. + + \since 5.9 + */ + property alias notifyInterval: player.notifyInterval + + /*! + \qmlproperty int Video::loops + + This property holds the number of times the media is played. A value of \c 0 or \c 1 means + the media will be played only once; set to \c MediaPlayer.Infinite to enable infinite looping. + + The value can be changed while the media is playing, in which case it will update + the remaining loops to the new value. + + The default is \c 1. + + \since 5.9 + */ + property alias loops: player.loops + + /*! + \qmlsignal Video::paused() + + This signal is emitted when playback is paused. + + The corresponding handler is \c onPaused. + */ + signal paused + + /*! + \qmlsignal Video::stopped() + + This signal is emitted when playback is stopped. + + The corresponding handler is \c onStopped. + */ + signal stopped + + /*! + \qmlsignal Video::playing() + + This signal is emitted when playback is started or continued. + + The corresponding handler is \c onPlaying. + */ + signal playing + + VideoOutput { + id: videoOut + anchors.fill: video + source: player + } + + MediaPlayer { + id: player + onPaused: video.paused() + onStopped: video.stopped() + onPlaying: video.playing() + } + + /*! + \qmlmethod Video::play() + + Starts playback of the media. + */ + function play() { + player.play(); + } + + /*! + \qmlmethod Video::pause() + + Pauses playback of the media. + */ + function pause() { + player.pause(); + } + + /*! + \qmlmethod Video::stop() + + Stops playback of the media. + */ + function stop() { + player.stop(); + } + + /*! + \qmlmethod Video::seek(offset) + + If the \l seekable property is true, seeks the current + playback position to \a offset. + + Seeking may be asynchronous, so the \l position property + may not be updated immediately. + + \sa seekable, position + */ + function seek(offset) { + player.seek(offset); + } + + /*! + \qmlmethod list Video::supportedAudioRoles() + + Returns a list of supported audio roles. + + If setting the audio role is not supported, an empty list is returned. + + \since 5.6 + \sa audioRole + */ + function supportedAudioRoles() { + return player.supportedAudioRoles(); + } + +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/libdeclarative_multimedia.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/libdeclarative_multimedia.so new file mode 100755 index 0000000..f29bcbd Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/libdeclarative_multimedia.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/plugins.qmltypes new file mode 100644 index 0000000..06fb891 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/plugins.qmltypes @@ -0,0 +1,2194 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtMultimedia 5.15' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QAbstractItemModel" + prototype: "QObject" + Enum { + name: "LayoutChangeHint" + values: { + "NoLayoutChangeHint": 0, + "VerticalSortHint": 1, + "HorizontalSortHint": 2 + } + } + Enum { + name: "CheckIndexOption" + values: { + "NoOption": 0, + "IndexIsValid": 1, + "DoNotUseParent": 2, + "ParentIsInvalid": 4 + } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + Parameter { name: "roles"; type: "QVector" } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + } + Signal { + name: "headerDataChanged" + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutChanged" } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutAboutToBeChanged" } + Signal { + name: "rowsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { name: "modelAboutToBeReset" } + Signal { name: "modelReset" } + Signal { + name: "rowsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationRow"; type: "int" } + } + Signal { + name: "rowsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "row"; type: "int" } + } + Signal { + name: "columnsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationColumn"; type: "int" } + } + Signal { + name: "columnsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "column"; type: "int" } + } + Method { name: "submit"; type: "bool" } + Method { name: "revert" } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "parent" + type: "QModelIndex" + Parameter { name: "child"; type: "QModelIndex" } + } + Method { + name: "sibling" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "idx"; type: "QModelIndex" } + } + Method { + name: "rowCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "rowCount"; type: "int" } + Method { + name: "columnCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "columnCount"; type: "int" } + Method { + name: "hasChildren" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "hasChildren"; type: "bool" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + } + Method { + name: "fetchMore" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "canFetchMore" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "flags" + type: "Qt::ItemFlags" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + Parameter { name: "flags"; type: "Qt::MatchFlags" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } + Component { + name: "QAbstractVideoFilter" + prototype: "QObject" + Property { name: "active"; type: "bool" } + } + Component { + name: "QAbstractVideoSurface" + prototype: "QObject" + Property { name: "nativeResolution"; type: "QSize"; isReadonly: true } + Signal { + name: "activeChanged" + Parameter { name: "active"; type: "bool" } + } + Signal { + name: "surfaceFormatChanged" + Parameter { name: "format"; type: "QVideoSurfaceFormat" } + } + Signal { name: "supportedFormatsChanged" } + Signal { + name: "nativeResolutionChanged" + Parameter { name: "resolution"; type: "QSize" } + } + } + Component { + name: "QCamera" + prototype: "QMediaObject" + Enum { + name: "Status" + values: { + "UnavailableStatus": 0, + "UnloadedStatus": 1, + "LoadingStatus": 2, + "UnloadingStatus": 3, + "LoadedStatus": 4, + "StandbyStatus": 5, + "StartingStatus": 6, + "StoppingStatus": 7, + "ActiveStatus": 8 + } + } + Enum { + name: "State" + values: { + "UnloadedState": 0, + "LoadedState": 1, + "ActiveState": 2 + } + } + Enum { + name: "CaptureMode" + values: { + "CaptureViewfinder": 0, + "CaptureStillImage": 1, + "CaptureVideo": 2 + } + } + Enum { + name: "Error" + values: { + "NoError": 0, + "CameraError": 1, + "InvalidRequestError": 2, + "ServiceMissingError": 3, + "NotSupportedFeatureError": 4 + } + } + Enum { + name: "LockStatus" + values: { + "Unlocked": 0, + "Searching": 1, + "Locked": 2 + } + } + Enum { + name: "LockChangeReason" + values: { + "UserRequest": 0, + "LockAcquired": 1, + "LockFailed": 2, + "LockLost": 3, + "LockTemporaryLost": 4 + } + } + Enum { + name: "LockType" + values: { + "NoLock": 0, + "LockExposure": 1, + "LockWhiteBalance": 2, + "LockFocus": 4 + } + } + Enum { + name: "Position" + values: { + "UnspecifiedPosition": 0, + "BackFace": 1, + "FrontFace": 2 + } + } + Property { name: "state"; type: "QCamera::State"; isReadonly: true } + Property { name: "status"; type: "QCamera::Status"; isReadonly: true } + Property { name: "captureMode"; type: "QCamera::CaptureModes" } + Property { name: "lockStatus"; type: "QCamera::LockStatus"; isReadonly: true } + Signal { + name: "stateChanged" + Parameter { name: "state"; type: "QCamera::State" } + } + Signal { + name: "captureModeChanged" + Parameter { type: "QCamera::CaptureModes" } + } + Signal { + name: "statusChanged" + Parameter { name: "status"; type: "QCamera::Status" } + } + Signal { name: "locked" } + Signal { name: "lockFailed" } + Signal { + name: "lockStatusChanged" + Parameter { name: "status"; type: "QCamera::LockStatus" } + Parameter { name: "reason"; type: "QCamera::LockChangeReason" } + } + Signal { + name: "lockStatusChanged" + Parameter { name: "lock"; type: "QCamera::LockType" } + Parameter { name: "status"; type: "QCamera::LockStatus" } + Parameter { name: "reason"; type: "QCamera::LockChangeReason" } + } + Signal { + name: "error" + Parameter { type: "QCamera::Error" } + } + Method { + name: "setCaptureMode" + Parameter { name: "mode"; type: "QCamera::CaptureModes" } + } + Method { name: "load" } + Method { name: "unload" } + Method { name: "start" } + Method { name: "stop" } + Method { name: "searchAndLock" } + Method { name: "unlock" } + Method { + name: "searchAndLock" + Parameter { name: "locks"; type: "QCamera::LockTypes" } + } + Method { + name: "unlock" + Parameter { name: "locks"; type: "QCamera::LockTypes" } + } + } + Component { + name: "QDeclarativeAudio" + prototype: "QObject" + exports: [ + "QtMultimedia/Audio 5.0", + "QtMultimedia/Audio 5.11", + "QtMultimedia/Audio 5.6", + "QtMultimedia/Audio 5.9", + "QtMultimedia/MediaPlayer 5.0", + "QtMultimedia/MediaPlayer 5.11", + "QtMultimedia/MediaPlayer 5.15", + "QtMultimedia/MediaPlayer 5.6", + "QtMultimedia/MediaPlayer 5.9" + ] + exportMetaObjectRevisions: [0, 3, 1, 2, 0, 3, 15, 1, 2] + Enum { + name: "Status" + values: { + "UnknownStatus": 0, + "NoMedia": 1, + "Loading": 2, + "Loaded": 3, + "Stalled": 4, + "Buffering": 5, + "Buffered": 6, + "EndOfMedia": 7, + "InvalidMedia": 8 + } + } + Enum { + name: "Error" + values: { + "NoError": 0, + "ResourceError": 1, + "FormatError": 2, + "NetworkError": 3, + "AccessDenied": 4, + "ServiceMissing": 5 + } + } + Enum { + name: "Loop" + values: { + "Infinite": -1 + } + } + Enum { + name: "PlaybackState" + values: { + "PlayingState": 1, + "PausedState": 2, + "StoppedState": 0 + } + } + Enum { + name: "Availability" + values: { + "Available": 0, + "Busy": 2, + "Unavailable": 1, + "ResourceMissing": 3 + } + } + Enum { + name: "AudioRole" + values: { + "UnknownRole": 0, + "AccessibilityRole": 7, + "AlarmRole": 4, + "CustomRole": 10, + "GameRole": 9, + "MusicRole": 1, + "NotificationRole": 5, + "RingtoneRole": 6, + "SonificationRole": 8, + "VideoRole": 2, + "VoiceCommunicationRole": 3 + } + } + Property { name: "source"; type: "QUrl" } + Property { name: "playlist"; revision: 1; type: "QDeclarativePlaylist"; isPointer: true } + Property { name: "loops"; type: "int" } + Property { name: "playbackState"; type: "PlaybackState"; isReadonly: true } + Property { name: "autoPlay"; type: "bool" } + Property { name: "autoLoad"; type: "bool" } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "duration"; type: "int"; isReadonly: true } + Property { name: "position"; type: "int"; isReadonly: true } + Property { name: "volume"; type: "double" } + Property { name: "muted"; type: "bool" } + Property { name: "hasAudio"; type: "bool"; isReadonly: true } + Property { name: "hasVideo"; type: "bool"; isReadonly: true } + Property { name: "bufferProgress"; type: "double"; isReadonly: true } + Property { name: "seekable"; type: "bool"; isReadonly: true } + Property { name: "playbackRate"; type: "double" } + Property { name: "error"; type: "Error"; isReadonly: true } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { + name: "metaData" + type: "QDeclarativeMediaMetaData" + isReadonly: true + isPointer: true + } + Property { name: "mediaObject"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "availability"; type: "Availability"; isReadonly: true } + Property { name: "audioRole"; revision: 1; type: "AudioRole" } + Property { name: "customAudioRole"; revision: 3; type: "string" } + Property { name: "notifyInterval"; revision: 2; type: "int" } + Property { name: "videoOutput"; revision: 15; type: "QVariant" } + Signal { name: "playlistChanged"; revision: 1 } + Signal { name: "loopCountChanged" } + Signal { name: "paused" } + Signal { name: "stopped" } + Signal { name: "playing" } + Signal { name: "audioRoleChanged"; revision: 1 } + Signal { name: "customAudioRoleChanged"; revision: 3 } + Signal { + name: "availabilityChanged" + Parameter { name: "availability"; type: "Availability" } + } + Signal { + name: "error" + Parameter { name: "error"; type: "QDeclarativeAudio::Error" } + Parameter { name: "errorString"; type: "string" } + } + Signal { name: "notifyIntervalChanged"; revision: 2 } + Signal { name: "videoOutputChanged"; revision: 15 } + Method { name: "play" } + Method { name: "pause" } + Method { name: "stop" } + Method { + name: "seek" + Parameter { name: "position"; type: "int" } + } + Method { name: "supportedAudioRoles"; revision: 1; type: "QJSValue" } + } + Component { + name: "QDeclarativeCamera" + prototype: "QObject" + exports: [ + "QtMultimedia/Camera 5.0", + "QtMultimedia/Camera 5.4", + "QtMultimedia/Camera 5.5" + ] + exportMetaObjectRevisions: [0, 1, 2] + Enum { + name: "Position" + values: { + "UnspecifiedPosition": 0, + "BackFace": 1, + "FrontFace": 2 + } + } + Enum { + name: "CaptureMode" + values: { + "CaptureViewfinder": 0, + "CaptureStillImage": 1, + "CaptureVideo": 2 + } + } + Enum { + name: "State" + values: { + "ActiveState": 2, + "LoadedState": 1, + "UnloadedState": 0 + } + } + Enum { + name: "Status" + values: { + "UnavailableStatus": 0, + "UnloadedStatus": 1, + "LoadingStatus": 2, + "UnloadingStatus": 3, + "LoadedStatus": 4, + "StandbyStatus": 5, + "StartingStatus": 6, + "StoppingStatus": 7, + "ActiveStatus": 8 + } + } + Enum { + name: "LockStatus" + values: { + "Unlocked": 0, + "Searching": 1, + "Locked": 2 + } + } + Enum { + name: "Error" + values: { + "NoError": 0, + "CameraError": 1, + "InvalidRequestError": 2, + "ServiceMissingError": 3, + "NotSupportedFeatureError": 4 + } + } + Enum { + name: "FlashMode" + values: { + "FlashAuto": 1, + "FlashOff": 2, + "FlashOn": 4, + "FlashRedEyeReduction": 8, + "FlashFill": 16, + "FlashTorch": 32, + "FlashVideoLight": 64, + "FlashSlowSyncFrontCurtain": 128, + "FlashSlowSyncRearCurtain": 256, + "FlashManual": 512 + } + } + Enum { + name: "ExposureMode" + values: { + "ExposureAuto": 0, + "ExposureManual": 1, + "ExposurePortrait": 2, + "ExposureNight": 3, + "ExposureBacklight": 4, + "ExposureSpotlight": 5, + "ExposureSports": 6, + "ExposureSnow": 7, + "ExposureBeach": 8, + "ExposureLargeAperture": 9, + "ExposureSmallAperture": 10, + "ExposureAction": 11, + "ExposureLandscape": 12, + "ExposureNightPortrait": 13, + "ExposureTheatre": 14, + "ExposureSunset": 15, + "ExposureSteadyPhoto": 16, + "ExposureFireworks": 17, + "ExposureParty": 18, + "ExposureCandlelight": 19, + "ExposureBarcode": 20, + "ExposureModeVendor": 1000 + } + } + Enum { + name: "MeteringMode" + values: { + "MeteringMatrix": 1, + "MeteringAverage": 2, + "MeteringSpot": 3 + } + } + Enum { + name: "FocusMode" + values: { + "FocusManual": 1, + "FocusHyperfocal": 2, + "FocusInfinity": 4, + "FocusAuto": 8, + "FocusContinuous": 16, + "FocusMacro": 32 + } + } + Enum { + name: "FocusPointMode" + values: { + "FocusPointAuto": 0, + "FocusPointCenter": 1, + "FocusPointFaceDetection": 2, + "FocusPointCustom": 3 + } + } + Enum { + name: "FocusAreaStatus" + values: { + "FocusAreaUnused": 1, + "FocusAreaSelected": 2, + "FocusAreaFocused": 3 + } + } + Enum { + name: "Availability" + values: { + "Available": 0, + "Busy": 2, + "Unavailable": 1, + "ResourceMissing": 3 + } + } + Property { name: "deviceId"; revision: 1; type: "string" } + Property { name: "position"; revision: 1; type: "Position" } + Property { name: "displayName"; revision: 1; type: "string"; isReadonly: true } + Property { name: "orientation"; revision: 1; type: "int"; isReadonly: true } + Property { name: "captureMode"; type: "CaptureMode" } + Property { name: "cameraState"; type: "State" } + Property { name: "cameraStatus"; type: "Status"; isReadonly: true } + Property { name: "lockStatus"; type: "LockStatus"; isReadonly: true } + Property { name: "errorCode"; type: "Error"; isReadonly: true } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "availability"; type: "Availability"; isReadonly: true } + Property { name: "opticalZoom"; type: "double" } + Property { name: "maximumOpticalZoom"; type: "double"; isReadonly: true } + Property { name: "digitalZoom"; type: "double" } + Property { name: "maximumDigitalZoom"; type: "double"; isReadonly: true } + Property { name: "mediaObject"; type: "QObject"; isReadonly: true; isPointer: true } + Property { + name: "imageCapture" + type: "QDeclarativeCameraCapture" + isReadonly: true + isPointer: true + } + Property { + name: "videoRecorder" + type: "QDeclarativeCameraRecorder" + isReadonly: true + isPointer: true + } + Property { + name: "exposure" + type: "QDeclarativeCameraExposure" + isReadonly: true + isPointer: true + } + Property { name: "flash"; type: "QDeclarativeCameraFlash"; isReadonly: true; isPointer: true } + Property { name: "focus"; type: "QDeclarativeCameraFocus"; isReadonly: true; isPointer: true } + Property { + name: "imageProcessing" + type: "QDeclarativeCameraImageProcessing" + isReadonly: true + isPointer: true + } + Property { + name: "metaData" + revision: 1 + type: "QDeclarativeMediaMetaData" + isReadonly: true + isPointer: true + } + Property { + name: "viewfinder" + revision: 1 + type: "QDeclarativeCameraViewfinder" + isReadonly: true + isPointer: true + } + Signal { name: "errorChanged" } + Signal { + name: "error" + Parameter { name: "errorCode"; type: "QDeclarativeCamera::Error" } + Parameter { name: "errorString"; type: "string" } + } + Signal { name: "deviceIdChanged"; revision: 1 } + Signal { name: "positionChanged"; revision: 1 } + Signal { name: "displayNameChanged"; revision: 1 } + Signal { name: "orientationChanged"; revision: 1 } + Signal { + name: "cameraStateChanged" + Parameter { type: "QDeclarativeCamera::State" } + } + Signal { + name: "opticalZoomChanged" + Parameter { type: "double" } + } + Signal { + name: "digitalZoomChanged" + Parameter { type: "double" } + } + Signal { + name: "maximumOpticalZoomChanged" + Parameter { type: "double" } + } + Signal { + name: "maximumDigitalZoomChanged" + Parameter { type: "double" } + } + Signal { + name: "availabilityChanged" + Parameter { name: "availability"; type: "Availability" } + } + Method { + name: "setCaptureMode" + Parameter { name: "mode"; type: "CaptureMode" } + } + Method { name: "start" } + Method { name: "stop" } + Method { + name: "setCameraState" + Parameter { name: "state"; type: "State" } + } + Method { name: "searchAndLock" } + Method { name: "unlock" } + Method { + name: "setOpticalZoom" + Parameter { type: "double" } + } + Method { + name: "setDigitalZoom" + Parameter { type: "double" } + } + Method { + name: "supportedViewfinderResolutions" + revision: 2 + type: "QJSValue" + Parameter { name: "minimumFrameRate"; type: "double" } + Parameter { name: "maximumFrameRate"; type: "double" } + } + Method { + name: "supportedViewfinderResolutions" + revision: 2 + type: "QJSValue" + Parameter { name: "minimumFrameRate"; type: "double" } + } + Method { name: "supportedViewfinderResolutions"; revision: 2; type: "QJSValue" } + Method { + name: "supportedViewfinderFrameRateRanges" + revision: 2 + type: "QJSValue" + Parameter { name: "resolution"; type: "QJSValue" } + } + Method { name: "supportedViewfinderFrameRateRanges"; revision: 2; type: "QJSValue" } + } + Component { + name: "QDeclarativeCameraCapture" + prototype: "QObject" + exports: [ + "QtMultimedia/CameraCapture 5.0", + "QtMultimedia/CameraCapture 5.9" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1] + Property { name: "ready"; type: "bool"; isReadonly: true } + Property { name: "capturedImagePath"; type: "string"; isReadonly: true } + Property { name: "resolution"; type: "QSize" } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "supportedResolutions"; revision: 1; type: "QVariantList"; isReadonly: true } + Signal { + name: "readyForCaptureChanged" + Parameter { type: "bool" } + } + Signal { + name: "imageExposed" + Parameter { name: "requestId"; type: "int" } + } + Signal { + name: "imageCaptured" + Parameter { name: "requestId"; type: "int" } + Parameter { name: "preview"; type: "string" } + } + Signal { + name: "imageMetadataAvailable" + Parameter { name: "requestId"; type: "int" } + Parameter { name: "key"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Signal { + name: "imageSaved" + Parameter { name: "requestId"; type: "int" } + Parameter { name: "path"; type: "string" } + } + Signal { + name: "captureFailed" + Parameter { name: "requestId"; type: "int" } + Parameter { name: "message"; type: "string" } + } + Signal { + name: "resolutionChanged" + Parameter { type: "QSize" } + } + Method { name: "capture"; type: "int" } + Method { + name: "captureToLocation" + type: "int" + Parameter { name: "location"; type: "string" } + } + Method { name: "cancelCapture" } + Method { + name: "setResolution" + Parameter { name: "resolution"; type: "QSize" } + } + Method { + name: "setMetadata" + Parameter { name: "key"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { + name: "QDeclarativeCameraExposure" + prototype: "QObject" + exports: [ + "QtMultimedia/CameraExposure 5.0", + "QtMultimedia/CameraExposure 5.11" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1] + Enum { + name: "ExposureMode" + values: { + "ExposureAuto": 0, + "ExposureManual": 1, + "ExposurePortrait": 2, + "ExposureNight": 3, + "ExposureBacklight": 4, + "ExposureSpotlight": 5, + "ExposureSports": 6, + "ExposureSnow": 7, + "ExposureBeach": 8, + "ExposureLargeAperture": 9, + "ExposureSmallAperture": 10, + "ExposureAction": 11, + "ExposureLandscape": 12, + "ExposureNightPortrait": 13, + "ExposureTheatre": 14, + "ExposureSunset": 15, + "ExposureSteadyPhoto": 16, + "ExposureFireworks": 17, + "ExposureParty": 18, + "ExposureCandlelight": 19, + "ExposureBarcode": 20, + "ExposureModeVendor": 1000 + } + } + Enum { + name: "MeteringMode" + values: { + "MeteringMatrix": 1, + "MeteringAverage": 2, + "MeteringSpot": 3 + } + } + Property { name: "exposureCompensation"; type: "double" } + Property { name: "iso"; type: "int"; isReadonly: true } + Property { name: "shutterSpeed"; type: "double"; isReadonly: true } + Property { name: "aperture"; type: "double"; isReadonly: true } + Property { name: "manualShutterSpeed"; type: "double" } + Property { name: "manualAperture"; type: "double" } + Property { name: "manualIso"; type: "double" } + Property { name: "exposureMode"; type: "ExposureMode" } + Property { name: "supportedExposureModes"; revision: 1; type: "QVariantList"; isReadonly: true } + Property { name: "spotMeteringPoint"; type: "QPointF" } + Property { name: "meteringMode"; type: "MeteringMode" } + Signal { + name: "isoSensitivityChanged" + Parameter { type: "int" } + } + Signal { + name: "apertureChanged" + Parameter { type: "double" } + } + Signal { + name: "shutterSpeedChanged" + Parameter { type: "double" } + } + Signal { + name: "manualIsoSensitivityChanged" + Parameter { type: "int" } + } + Signal { + name: "manualApertureChanged" + Parameter { type: "double" } + } + Signal { + name: "manualShutterSpeedChanged" + Parameter { type: "double" } + } + Signal { + name: "exposureCompensationChanged" + Parameter { type: "double" } + } + Signal { + name: "exposureModeChanged" + Parameter { type: "ExposureMode" } + } + Signal { + name: "meteringModeChanged" + Parameter { type: "MeteringMode" } + } + Signal { + name: "spotMeteringPointChanged" + Parameter { type: "QPointF" } + } + Method { + name: "setExposureMode" + Parameter { type: "ExposureMode" } + } + Method { + name: "setExposureCompensation" + Parameter { name: "ev"; type: "double" } + } + Method { + name: "setManualAperture" + Parameter { type: "double" } + } + Method { + name: "setManualShutterSpeed" + Parameter { type: "double" } + } + Method { + name: "setManualIsoSensitivity" + Parameter { name: "iso"; type: "int" } + } + Method { name: "setAutoAperture" } + Method { name: "setAutoShutterSpeed" } + Method { name: "setAutoIsoSensitivity" } + } + Component { + name: "QDeclarativeCameraFlash" + prototype: "QObject" + exports: [ + "QtMultimedia/CameraFlash 5.0", + "QtMultimedia/CameraFlash 5.9" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1] + Enum { + name: "FlashMode" + values: { + "FlashAuto": 1, + "FlashOff": 2, + "FlashOn": 4, + "FlashRedEyeReduction": 8, + "FlashFill": 16, + "FlashTorch": 32, + "FlashVideoLight": 64, + "FlashSlowSyncFrontCurtain": 128, + "FlashSlowSyncRearCurtain": 256, + "FlashManual": 512 + } + } + Property { name: "ready"; type: "bool"; isReadonly: true } + Property { name: "mode"; type: "FlashMode" } + Property { name: "supportedModes"; revision: 1; type: "QVariantList"; isReadonly: true } + Signal { + name: "flashReady" + Parameter { name: "status"; type: "bool" } + } + Signal { + name: "flashModeChanged" + Parameter { type: "FlashMode" } + } + Method { + name: "setFlashMode" + Parameter { type: "FlashMode" } + } + } + Component { + name: "QDeclarativeCameraFocus" + prototype: "QObject" + exports: [ + "QtMultimedia/CameraFocus 5.0", + "QtMultimedia/CameraFocus 5.11" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1] + Enum { + name: "FocusMode" + values: { + "FocusManual": 1, + "FocusHyperfocal": 2, + "FocusInfinity": 4, + "FocusAuto": 8, + "FocusContinuous": 16, + "FocusMacro": 32 + } + } + Enum { + name: "FocusPointMode" + values: { + "FocusPointAuto": 0, + "FocusPointCenter": 1, + "FocusPointFaceDetection": 2, + "FocusPointCustom": 3 + } + } + Property { name: "focusMode"; type: "FocusMode" } + Property { name: "supportedFocusModes"; revision: 1; type: "QVariantList"; isReadonly: true } + Property { name: "focusPointMode"; type: "FocusPointMode" } + Property { name: "supportedFocusPointModes"; revision: 1; type: "QVariantList"; isReadonly: true } + Property { name: "customFocusPoint"; type: "QPointF" } + Property { name: "focusZones"; type: "QObject"; isReadonly: true; isPointer: true } + Signal { + name: "focusModeChanged" + Parameter { type: "FocusMode" } + } + Signal { + name: "focusPointModeChanged" + Parameter { type: "FocusPointMode" } + } + Signal { + name: "customFocusPointChanged" + Parameter { type: "QPointF" } + } + Method { + name: "setFocusMode" + Parameter { type: "FocusMode" } + } + Method { + name: "setFocusPointMode" + Parameter { name: "mode"; type: "FocusPointMode" } + } + Method { + name: "setCustomFocusPoint" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "isFocusModeSupported" + type: "bool" + Parameter { name: "mode"; type: "FocusMode" } + } + Method { + name: "isFocusPointModeSupported" + type: "bool" + Parameter { name: "mode"; type: "FocusPointMode" } + } + } + Component { + name: "QDeclarativeCameraImageProcessing" + prototype: "QObject" + exports: [ + "QtMultimedia/CameraImageProcessing 5.0", + "QtMultimedia/CameraImageProcessing 5.11", + "QtMultimedia/CameraImageProcessing 5.5", + "QtMultimedia/CameraImageProcessing 5.7" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 3, 1, 2] + Enum { + name: "WhiteBalanceMode" + values: { + "WhiteBalanceAuto": 0, + "WhiteBalanceManual": 1, + "WhiteBalanceSunlight": 2, + "WhiteBalanceCloudy": 3, + "WhiteBalanceShade": 4, + "WhiteBalanceTungsten": 5, + "WhiteBalanceFluorescent": 6, + "WhiteBalanceFlash": 7, + "WhiteBalanceSunset": 8, + "WhiteBalanceVendor": 1000 + } + } + Enum { + name: "ColorFilter" + values: { + "ColorFilterNone": 0, + "ColorFilterGrayscale": 1, + "ColorFilterNegative": 2, + "ColorFilterSolarize": 3, + "ColorFilterSepia": 4, + "ColorFilterPosterize": 5, + "ColorFilterWhiteboard": 6, + "ColorFilterBlackboard": 7, + "ColorFilterAqua": 8, + "ColorFilterVendor": 1000 + } + } + Property { name: "whiteBalanceMode"; type: "WhiteBalanceMode" } + Property { name: "manualWhiteBalance"; type: "double" } + Property { name: "brightness"; revision: 2; type: "double" } + Property { name: "contrast"; type: "double" } + Property { name: "saturation"; type: "double" } + Property { name: "sharpeningLevel"; type: "double" } + Property { name: "denoisingLevel"; type: "double" } + Property { name: "colorFilter"; revision: 1; type: "ColorFilter" } + Property { name: "available"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "supportedColorFilters"; revision: 3; type: "QVariantList"; isReadonly: true } + Property { + name: "supportedWhiteBalanceModes" + revision: 3 + type: "QVariantList" + isReadonly: true + } + Signal { + name: "whiteBalanceModeChanged" + Parameter { type: "QDeclarativeCameraImageProcessing::WhiteBalanceMode" } + } + Signal { + name: "manualWhiteBalanceChanged" + Parameter { type: "double" } + } + Signal { + name: "brightnessChanged" + revision: 2 + Parameter { type: "double" } + } + Signal { + name: "contrastChanged" + Parameter { type: "double" } + } + Signal { + name: "saturationChanged" + Parameter { type: "double" } + } + Signal { + name: "sharpeningLevelChanged" + Parameter { type: "double" } + } + Signal { + name: "denoisingLevelChanged" + Parameter { type: "double" } + } + Method { + name: "setWhiteBalanceMode" + Parameter { name: "mode"; type: "QDeclarativeCameraImageProcessing::WhiteBalanceMode" } + } + Method { + name: "setManualWhiteBalance" + Parameter { name: "colorTemp"; type: "double" } + } + Method { + name: "setBrightness" + revision: 2 + Parameter { name: "value"; type: "double" } + } + Method { + name: "setContrast" + Parameter { name: "value"; type: "double" } + } + Method { + name: "setSaturation" + Parameter { name: "value"; type: "double" } + } + Method { + name: "setSharpeningLevel" + Parameter { name: "value"; type: "double" } + } + Method { + name: "setDenoisingLevel" + Parameter { name: "value"; type: "double" } + } + Method { + name: "setColorFilter" + Parameter { name: "colorFilter"; type: "ColorFilter" } + } + } + Component { + name: "QDeclarativeCameraRecorder" + prototype: "QObject" + exports: ["QtMultimedia/CameraRecorder 5.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "RecorderState" + values: { + "StoppedState": 0, + "RecordingState": 1 + } + } + Enum { + name: "RecorderStatus" + values: { + "UnavailableStatus": 0, + "UnloadedStatus": 1, + "LoadingStatus": 2, + "LoadedStatus": 3, + "StartingStatus": 4, + "RecordingStatus": 5, + "PausedStatus": 6, + "FinalizingStatus": 7 + } + } + Enum { + name: "EncodingMode" + values: { + "ConstantQualityEncoding": 0, + "ConstantBitRateEncoding": 1, + "AverageBitRateEncoding": 2 + } + } + Enum { + name: "Error" + values: { + "NoError": 0, + "ResourceError": 1, + "FormatError": 2, + "OutOfSpaceError": 3 + } + } + Property { name: "recorderState"; type: "RecorderState" } + Property { name: "recorderStatus"; type: "RecorderStatus"; isReadonly: true } + Property { name: "videoCodec"; type: "string" } + Property { name: "resolution"; type: "QSize" } + Property { name: "frameRate"; type: "double" } + Property { name: "videoBitRate"; type: "int" } + Property { name: "videoEncodingMode"; type: "EncodingMode" } + Property { name: "audioCodec"; type: "string" } + Property { name: "audioBitRate"; type: "int" } + Property { name: "audioChannels"; type: "int" } + Property { name: "audioSampleRate"; type: "int" } + Property { name: "audioEncodingMode"; type: "EncodingMode" } + Property { name: "mediaContainer"; type: "string" } + Property { name: "duration"; type: "qlonglong"; isReadonly: true } + Property { name: "outputLocation"; type: "string" } + Property { name: "actualLocation"; type: "string"; isReadonly: true } + Property { name: "muted"; type: "bool" } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "errorCode"; type: "Error"; isReadonly: true } + Signal { + name: "recorderStateChanged" + Parameter { name: "state"; type: "QDeclarativeCameraRecorder::RecorderState" } + } + Signal { + name: "durationChanged" + Parameter { name: "duration"; type: "qlonglong" } + } + Signal { + name: "mutedChanged" + Parameter { name: "muted"; type: "bool" } + } + Signal { + name: "outputLocationChanged" + Parameter { name: "location"; type: "string" } + } + Signal { + name: "actualLocationChanged" + Parameter { name: "location"; type: "string" } + } + Signal { + name: "error" + Parameter { name: "errorCode"; type: "QDeclarativeCameraRecorder::Error" } + Parameter { name: "errorString"; type: "string" } + } + Signal { + name: "metaDataChanged" + Parameter { name: "key"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Signal { + name: "captureResolutionChanged" + Parameter { type: "QSize" } + } + Signal { + name: "audioCodecChanged" + Parameter { name: "codec"; type: "string" } + } + Signal { + name: "videoCodecChanged" + Parameter { name: "codec"; type: "string" } + } + Signal { + name: "mediaContainerChanged" + Parameter { name: "container"; type: "string" } + } + Signal { + name: "frameRateChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "videoBitRateChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "audioBitRateChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "audioChannelsChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "audioSampleRateChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "audioEncodingModeChanged" + Parameter { name: "encodingMode"; type: "EncodingMode" } + } + Signal { + name: "videoEncodingModeChanged" + Parameter { name: "encodingMode"; type: "EncodingMode" } + } + Method { + name: "setOutputLocation" + Parameter { name: "location"; type: "string" } + } + Method { name: "record" } + Method { name: "stop" } + Method { + name: "setRecorderState" + Parameter { name: "state"; type: "QDeclarativeCameraRecorder::RecorderState" } + } + Method { + name: "setMuted" + Parameter { name: "muted"; type: "bool" } + } + Method { + name: "setMetadata" + Parameter { name: "key"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "setCaptureResolution" + Parameter { name: "resolution"; type: "QSize" } + } + Method { + name: "setAudioCodec" + Parameter { name: "codec"; type: "string" } + } + Method { + name: "setVideoCodec" + Parameter { name: "codec"; type: "string" } + } + Method { + name: "setMediaContainer" + Parameter { name: "container"; type: "string" } + } + Method { + name: "setFrameRate" + Parameter { name: "frameRate"; type: "double" } + } + Method { + name: "setVideoBitRate" + Parameter { name: "rate"; type: "int" } + } + Method { + name: "setAudioBitRate" + Parameter { name: "rate"; type: "int" } + } + Method { + name: "setAudioChannels" + Parameter { name: "channels"; type: "int" } + } + Method { + name: "setAudioSampleRate" + Parameter { name: "rate"; type: "int" } + } + Method { + name: "setVideoEncodingMode" + Parameter { name: "encodingMode"; type: "EncodingMode" } + } + Method { + name: "setAudioEncodingMode" + Parameter { name: "encodingMode"; type: "EncodingMode" } + } + } + Component { + name: "QDeclarativeCameraViewfinder" + prototype: "QObject" + exports: ["QtMultimedia/CameraViewfinder 5.4"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "resolution"; type: "QSize" } + Property { name: "minimumFrameRate"; type: "double" } + Property { name: "maximumFrameRate"; type: "double" } + } + Component { + name: "QDeclarativeMediaMetaData" + prototype: "QObject" + Property { name: "title"; type: "QVariant" } + Property { name: "subTitle"; type: "QVariant" } + Property { name: "author"; type: "QVariant" } + Property { name: "comment"; type: "QVariant" } + Property { name: "description"; type: "QVariant" } + Property { name: "category"; type: "QVariant" } + Property { name: "genre"; type: "QVariant" } + Property { name: "year"; type: "QVariant" } + Property { name: "date"; type: "QVariant" } + Property { name: "userRating"; type: "QVariant" } + Property { name: "keywords"; type: "QVariant" } + Property { name: "language"; type: "QVariant" } + Property { name: "publisher"; type: "QVariant" } + Property { name: "copyright"; type: "QVariant" } + Property { name: "parentalRating"; type: "QVariant" } + Property { name: "ratingOrganization"; type: "QVariant" } + Property { name: "size"; type: "QVariant" } + Property { name: "mediaType"; type: "QVariant" } + Property { name: "duration"; type: "QVariant" } + Property { name: "audioBitRate"; type: "QVariant" } + Property { name: "audioCodec"; type: "QVariant" } + Property { name: "averageLevel"; type: "QVariant" } + Property { name: "channelCount"; type: "QVariant" } + Property { name: "peakValue"; type: "QVariant" } + Property { name: "sampleRate"; type: "QVariant" } + Property { name: "albumTitle"; type: "QVariant" } + Property { name: "albumArtist"; type: "QVariant" } + Property { name: "contributingArtist"; type: "QVariant" } + Property { name: "composer"; type: "QVariant" } + Property { name: "conductor"; type: "QVariant" } + Property { name: "lyrics"; type: "QVariant" } + Property { name: "mood"; type: "QVariant" } + Property { name: "trackNumber"; type: "QVariant" } + Property { name: "trackCount"; type: "QVariant" } + Property { name: "coverArtUrlSmall"; type: "QVariant" } + Property { name: "coverArtUrlLarge"; type: "QVariant" } + Property { name: "resolution"; type: "QVariant" } + Property { name: "pixelAspectRatio"; type: "QVariant" } + Property { name: "videoFrameRate"; type: "QVariant" } + Property { name: "videoBitRate"; type: "QVariant" } + Property { name: "videoCodec"; type: "QVariant" } + Property { name: "posterUrl"; type: "QVariant" } + Property { name: "chapterNumber"; type: "QVariant" } + Property { name: "director"; type: "QVariant" } + Property { name: "leadPerformer"; type: "QVariant" } + Property { name: "writer"; type: "QVariant" } + Property { name: "cameraManufacturer"; type: "QVariant" } + Property { name: "cameraModel"; type: "QVariant" } + Property { name: "event"; type: "QVariant" } + Property { name: "subject"; type: "QVariant" } + Property { name: "orientation"; type: "QVariant" } + Property { name: "exposureTime"; type: "QVariant" } + Property { name: "fNumber"; type: "QVariant" } + Property { name: "exposureProgram"; type: "QVariant" } + Property { name: "isoSpeedRatings"; type: "QVariant" } + Property { name: "exposureBiasValue"; type: "QVariant" } + Property { name: "dateTimeOriginal"; type: "QVariant" } + Property { name: "dateTimeDigitized"; type: "QVariant" } + Property { name: "subjectDistance"; type: "QVariant" } + Property { name: "meteringMode"; type: "QVariant" } + Property { name: "lightSource"; type: "QVariant" } + Property { name: "flash"; type: "QVariant" } + Property { name: "focalLength"; type: "QVariant" } + Property { name: "exposureMode"; type: "QVariant" } + Property { name: "whiteBalance"; type: "QVariant" } + Property { name: "digitalZoomRatio"; type: "QVariant" } + Property { name: "focalLengthIn35mmFilm"; type: "QVariant" } + Property { name: "sceneCaptureType"; type: "QVariant" } + Property { name: "gainControl"; type: "QVariant" } + Property { name: "contrast"; type: "QVariant" } + Property { name: "saturation"; type: "QVariant" } + Property { name: "sharpness"; type: "QVariant" } + Property { name: "deviceSettingDescription"; type: "QVariant" } + Property { name: "gpsLatitude"; type: "QVariant" } + Property { name: "gpsLongitude"; type: "QVariant" } + Property { name: "gpsAltitude"; type: "QVariant" } + Property { name: "gpsTimeStamp"; type: "QVariant" } + Property { name: "gpsSatellites"; type: "QVariant" } + Property { name: "gpsStatus"; type: "QVariant" } + Property { name: "gpsDOP"; type: "QVariant" } + Property { name: "gpsSpeed"; type: "QVariant" } + Property { name: "gpsTrack"; type: "QVariant" } + Property { name: "gpsTrackRef"; type: "QVariant" } + Property { name: "gpsImgDirection"; type: "QVariant" } + Property { name: "gpsImgDirectionRef"; type: "QVariant" } + Property { name: "gpsMapDatum"; type: "QVariant" } + Property { name: "gpsProcessingMethod"; type: "QVariant" } + Property { name: "gpsAreaInformation"; type: "QVariant" } + Signal { name: "metaDataChanged" } + } + Component { + name: "QDeclarativeMultimediaGlobal" + prototype: "QObject" + exports: ["QtMultimedia/QtMultimedia 5.4"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Enum { + name: "VolumeScale" + values: { + "LinearVolumeScale": 0, + "CubicVolumeScale": 1, + "LogarithmicVolumeScale": 2, + "DecibelVolumeScale": 3 + } + } + Property { name: "defaultCamera"; type: "QJSValue"; isReadonly: true } + Property { name: "availableCameras"; type: "QJSValue"; isReadonly: true } + Method { + name: "convertVolume" + type: "double" + Parameter { name: "volume"; type: "double" } + Parameter { name: "from"; type: "VolumeScale" } + Parameter { name: "to"; type: "VolumeScale" } + } + } + Component { + name: "QDeclarativePlaylist" + defaultProperty: "items" + prototype: "QAbstractListModel" + exports: ["QtMultimedia/Playlist 5.6", "QtMultimedia/Playlist 5.7"] + exportMetaObjectRevisions: [0, 1] + Enum { + name: "PlaybackMode" + values: { + "CurrentItemOnce": 0, + "CurrentItemInLoop": 1, + "Sequential": 2, + "Loop": 3, + "Random": 4 + } + } + Enum { + name: "Error" + values: { + "NoError": 0, + "FormatError": 1, + "FormatNotSupportedError": 2, + "NetworkError": 3, + "AccessDeniedError": 4 + } + } + Property { name: "playbackMode"; type: "PlaybackMode" } + Property { name: "currentItemSource"; type: "QUrl"; isReadonly: true } + Property { name: "currentIndex"; type: "int" } + Property { name: "itemCount"; type: "int"; isReadonly: true } + Property { name: "readOnly"; type: "bool"; isReadonly: true } + Property { name: "error"; type: "Error"; isReadonly: true } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "items"; type: "QDeclarativePlaylistItem"; isList: true; isReadonly: true } + Signal { + name: "itemAboutToBeInserted" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Signal { + name: "itemInserted" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Signal { + name: "itemAboutToBeRemoved" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Signal { + name: "itemRemoved" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Signal { + name: "itemChanged" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Signal { name: "loaded" } + Signal { name: "loadFailed" } + Signal { + name: "error" + Parameter { name: "error"; type: "QDeclarativePlaylist::Error" } + Parameter { name: "errorString"; type: "string" } + } + Method { + name: "itemSource" + type: "QUrl" + Parameter { name: "index"; type: "int" } + } + Method { + name: "nextIndex" + type: "int" + Parameter { name: "steps"; type: "int" } + } + Method { name: "nextIndex"; type: "int" } + Method { + name: "previousIndex" + type: "int" + Parameter { name: "steps"; type: "int" } + } + Method { name: "previousIndex"; type: "int" } + Method { name: "next" } + Method { name: "previous" } + Method { name: "shuffle" } + Method { + name: "load" + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "format"; type: "string" } + } + Method { + name: "load" + Parameter { name: "location"; type: "QUrl" } + } + Method { + name: "save" + type: "bool" + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "format"; type: "string" } + } + Method { + name: "save" + type: "bool" + Parameter { name: "location"; type: "QUrl" } + } + Method { + name: "addItem" + type: "bool" + Parameter { name: "source"; type: "QUrl" } + } + Method { + name: "addItems" + revision: 1 + type: "bool" + Parameter { name: "sources"; type: "QList" } + } + Method { + name: "insertItem" + type: "bool" + Parameter { name: "index"; type: "int" } + Parameter { name: "source"; type: "QUrl" } + } + Method { + name: "insertItems" + revision: 1 + type: "bool" + Parameter { name: "index"; type: "int" } + Parameter { name: "sources"; type: "QList" } + } + Method { + name: "moveItem" + revision: 1 + type: "bool" + Parameter { name: "from"; type: "int" } + Parameter { name: "to"; type: "int" } + } + Method { + name: "removeItem" + type: "bool" + Parameter { name: "index"; type: "int" } + } + Method { + name: "removeItems" + revision: 1 + type: "bool" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "clear"; type: "bool" } + } + Component { + name: "QDeclarativePlaylistItem" + prototype: "QObject" + exports: ["QtMultimedia/PlaylistItem 5.6"] + exportMetaObjectRevisions: [0] + Property { name: "source"; type: "QUrl" } + } + Component { + name: "QDeclarativeRadio" + prototype: "QObject" + exports: ["QtMultimedia/Radio 5.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "State" + values: { + "ActiveState": 0, + "StoppedState": 1 + } + } + Enum { + name: "Band" + values: { + "AM": 0, + "FM": 1, + "SW": 2, + "LW": 3, + "FM2": 4 + } + } + Enum { + name: "Error" + values: { + "NoError": 0, + "ResourceError": 1, + "OpenError": 2, + "OutOfRangeError": 3 + } + } + Enum { + name: "StereoMode" + values: { + "ForceStereo": 0, + "ForceMono": 1, + "Auto": 2 + } + } + Enum { + name: "SearchMode" + values: { + "SearchFast": 0, + "SearchGetStationId": 1 + } + } + Enum { + name: "Availability" + values: { + "Available": 0, + "Busy": 2, + "Unavailable": 1, + "ResourceMissing": 3 + } + } + Property { name: "state"; type: "State"; isReadonly: true } + Property { name: "band"; type: "Band" } + Property { name: "frequency"; type: "int" } + Property { name: "stereo"; type: "bool"; isReadonly: true } + Property { name: "stereoMode"; type: "StereoMode" } + Property { name: "signalStrength"; type: "int"; isReadonly: true } + Property { name: "volume"; type: "int" } + Property { name: "muted"; type: "bool" } + Property { name: "searching"; type: "bool"; isReadonly: true } + Property { name: "frequencyStep"; type: "int"; isReadonly: true } + Property { name: "minimumFrequency"; type: "int"; isReadonly: true } + Property { name: "maximumFrequency"; type: "int"; isReadonly: true } + Property { name: "antennaConnected"; type: "bool"; isReadonly: true } + Property { name: "availability"; type: "Availability"; isReadonly: true } + Property { name: "radioData"; type: "QDeclarativeRadioData"; isReadonly: true; isPointer: true } + Signal { + name: "stateChanged" + Parameter { name: "state"; type: "QDeclarativeRadio::State" } + } + Signal { + name: "bandChanged" + Parameter { name: "band"; type: "QDeclarativeRadio::Band" } + } + Signal { + name: "frequencyChanged" + Parameter { name: "frequency"; type: "int" } + } + Signal { + name: "stereoStatusChanged" + Parameter { name: "stereo"; type: "bool" } + } + Signal { + name: "searchingChanged" + Parameter { name: "searching"; type: "bool" } + } + Signal { + name: "signalStrengthChanged" + Parameter { name: "signalStrength"; type: "int" } + } + Signal { + name: "volumeChanged" + Parameter { name: "volume"; type: "int" } + } + Signal { + name: "mutedChanged" + Parameter { name: "muted"; type: "bool" } + } + Signal { + name: "stationFound" + Parameter { name: "frequency"; type: "int" } + Parameter { name: "stationId"; type: "string" } + } + Signal { + name: "antennaConnectedChanged" + Parameter { name: "connectionStatus"; type: "bool" } + } + Signal { + name: "availabilityChanged" + Parameter { name: "availability"; type: "Availability" } + } + Signal { name: "errorChanged" } + Signal { + name: "error" + Parameter { name: "errorCode"; type: "QDeclarativeRadio::Error" } + } + Method { + name: "setBand" + Parameter { name: "band"; type: "QDeclarativeRadio::Band" } + } + Method { + name: "setFrequency" + Parameter { name: "frequency"; type: "int" } + } + Method { + name: "setStereoMode" + Parameter { name: "stereoMode"; type: "QDeclarativeRadio::StereoMode" } + } + Method { + name: "setVolume" + Parameter { name: "volume"; type: "int" } + } + Method { + name: "setMuted" + Parameter { name: "muted"; type: "bool" } + } + Method { name: "cancelScan" } + Method { name: "scanDown" } + Method { name: "scanUp" } + Method { name: "tuneUp" } + Method { name: "tuneDown" } + Method { + name: "searchAllStations" + Parameter { name: "searchMode"; type: "QDeclarativeRadio::SearchMode" } + } + Method { name: "searchAllStations" } + Method { name: "start" } + Method { name: "stop" } + Method { name: "isAvailable"; type: "bool" } + } + Component { + name: "QDeclarativeRadioData" + prototype: "QObject" + exports: ["QtMultimedia/RadioData 5.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Error" + values: { + "NoError": 0, + "ResourceError": 1, + "OpenError": 2, + "OutOfRangeError": 3 + } + } + Enum { + name: "ProgramType" + values: { + "Undefined": 0, + "News": 1, + "CurrentAffairs": 2, + "Information": 3, + "Sport": 4, + "Education": 5, + "Drama": 6, + "Culture": 7, + "Science": 8, + "Varied": 9, + "PopMusic": 10, + "RockMusic": 11, + "EasyListening": 12, + "LightClassical": 13, + "SeriousClassical": 14, + "OtherMusic": 15, + "Weather": 16, + "Finance": 17, + "ChildrensProgrammes": 18, + "SocialAffairs": 19, + "Religion": 20, + "PhoneIn": 21, + "Travel": 22, + "Leisure": 23, + "JazzMusic": 24, + "CountryMusic": 25, + "NationalMusic": 26, + "OldiesMusic": 27, + "FolkMusic": 28, + "Documentary": 29, + "AlarmTest": 30, + "Alarm": 31, + "Talk": 32, + "ClassicRock": 33, + "AdultHits": 34, + "SoftRock": 35, + "Top40": 36, + "Soft": 37, + "Nostalgia": 38, + "Classical": 39, + "RhythmAndBlues": 40, + "SoftRhythmAndBlues": 41, + "Language": 42, + "ReligiousMusic": 43, + "ReligiousTalk": 44, + "Personality": 45, + "Public": 46, + "College": 47 + } + } + Enum { + name: "Availability" + values: { + "Available": 0, + "Busy": 2, + "Unavailable": 1, + "ResourceMissing": 3 + } + } + Property { name: "stationId"; type: "string"; isReadonly: true } + Property { name: "programType"; type: "QDeclarativeRadioData::ProgramType"; isReadonly: true } + Property { name: "programTypeName"; type: "string"; isReadonly: true } + Property { name: "stationName"; type: "string"; isReadonly: true } + Property { name: "radioText"; type: "string"; isReadonly: true } + Property { name: "alternativeFrequenciesEnabled"; type: "bool" } + Property { name: "availability"; type: "Availability"; isReadonly: true } + Signal { + name: "stationIdChanged" + Parameter { name: "stationId"; type: "string" } + } + Signal { + name: "programTypeChanged" + Parameter { name: "programType"; type: "QDeclarativeRadioData::ProgramType" } + } + Signal { + name: "programTypeNameChanged" + Parameter { name: "programTypeName"; type: "string" } + } + Signal { + name: "stationNameChanged" + Parameter { name: "stationName"; type: "string" } + } + Signal { + name: "radioTextChanged" + Parameter { name: "radioText"; type: "string" } + } + Signal { + name: "alternativeFrequenciesEnabledChanged" + Parameter { name: "enabled"; type: "bool" } + } + Signal { + name: "availabilityChanged" + Parameter { name: "availability"; type: "Availability" } + } + Signal { name: "errorChanged" } + Signal { + name: "error" + Parameter { name: "errorCode"; type: "QDeclarativeRadioData::Error" } + } + Method { + name: "setAlternativeFrequenciesEnabled" + Parameter { name: "enabled"; type: "bool" } + } + Method { name: "isAvailable"; type: "bool" } + } + Component { + name: "QDeclarativeTorch" + prototype: "QObject" + exports: ["QtMultimedia/Torch 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "enabled"; type: "bool" } + Property { name: "power"; type: "int" } + } + Component { + name: "QDeclarativeVideoOutput" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtMultimedia/VideoOutput 5.0", + "QtMultimedia/VideoOutput 5.13", + "QtMultimedia/VideoOutput 5.15", + "QtMultimedia/VideoOutput 5.2" + ] + exportMetaObjectRevisions: [0, 13, 15, 2] + Enum { + name: "FlushMode" + values: { + "EmptyFrame": 0, + "FirstFrame": 1, + "LastFrame": 2 + } + } + Enum { + name: "FillMode" + values: { + "Stretch": 0, + "PreserveAspectFit": 1, + "PreserveAspectCrop": 2 + } + } + Property { name: "source"; type: "QObject"; isPointer: true } + Property { name: "fillMode"; type: "FillMode" } + Property { name: "orientation"; type: "int" } + Property { name: "autoOrientation"; revision: 2; type: "bool" } + Property { name: "sourceRect"; type: "QRectF"; isReadonly: true } + Property { name: "contentRect"; type: "QRectF"; isReadonly: true } + Property { name: "filters"; type: "QAbstractVideoFilter"; isList: true; isReadonly: true } + Property { name: "flushMode"; revision: 13; type: "FlushMode" } + Property { + name: "videoSurface" + revision: 15 + type: "QAbstractVideoSurface" + isReadonly: true + isPointer: true + } + Signal { + name: "fillModeChanged" + Parameter { type: "QDeclarativeVideoOutput::FillMode" } + } + Method { + name: "mapPointToItem" + type: "QPointF" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapRectToItem" + type: "QRectF" + Parameter { name: "rectangle"; type: "QRectF" } + } + Method { + name: "mapNormalizedPointToItem" + type: "QPointF" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapNormalizedRectToItem" + type: "QRectF" + Parameter { name: "rectangle"; type: "QRectF" } + } + Method { + name: "mapPointToSource" + type: "QPointF" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapRectToSource" + type: "QRectF" + Parameter { name: "rectangle"; type: "QRectF" } + } + Method { + name: "mapPointToSourceNormalized" + type: "QPointF" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapRectToSourceNormalized" + type: "QRectF" + Parameter { name: "rectangle"; type: "QRectF" } + } + } + Component { + name: "QMediaObject" + prototype: "QObject" + Property { name: "notifyInterval"; type: "int" } + Signal { + name: "notifyIntervalChanged" + Parameter { name: "milliSeconds"; type: "int" } + } + Signal { + name: "metaDataAvailableChanged" + Parameter { name: "available"; type: "bool" } + } + Signal { name: "metaDataChanged" } + Signal { + name: "metaDataChanged" + Parameter { name: "key"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Signal { + name: "availabilityChanged" + Parameter { name: "available"; type: "bool" } + } + Signal { + name: "availabilityChanged" + Parameter { name: "availability"; type: "QMultimedia::AvailabilityStatus" } + } + } + Component { name: "QSGVideoItemSurface"; prototype: "QAbstractVideoSurface" } + Component { + name: "QSoundEffect" + prototype: "QObject" + exports: [ + "QtMultimedia/SoundEffect 5.0", + "QtMultimedia/SoundEffect 5.3", + "QtMultimedia/SoundEffect 5.8" + ] + exportMetaObjectRevisions: [0, 0, 0] + Enum { + name: "Loop" + values: { + "Infinite": -2 + } + } + Enum { + name: "Status" + values: { + "Null": 0, + "Loading": 1, + "Ready": 2, + "Error": 3 + } + } + Property { name: "source"; type: "QUrl" } + Property { name: "loops"; type: "int" } + Property { name: "loopsRemaining"; type: "int"; isReadonly: true } + Property { name: "volume"; type: "double" } + Property { name: "muted"; type: "bool" } + Property { name: "playing"; type: "bool"; isReadonly: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "category"; type: "string" } + Signal { name: "loopCountChanged" } + Signal { name: "loadedChanged" } + Method { name: "play" } + Method { name: "stop" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/qmldir new file mode 100644 index 0000000..3d2d7c4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtMultimedia/qmldir @@ -0,0 +1,5 @@ +module QtMultimedia +plugin declarative_multimedia +classname QMultimediaDeclarativeModule +typeinfo plugins.qmltypes +Video 5.0 Video.qml diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/libdeclarative_nfc.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/libdeclarative_nfc.so new file mode 100755 index 0000000..f042fff Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/libdeclarative_nfc.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/plugins.qmltypes new file mode 100644 index 0000000..40cbe2c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/plugins.qmltypes @@ -0,0 +1,91 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtNfc 5.15' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QDeclarativeNdefFilter" + prototype: "QObject" + exports: ["QtNfc/NdefFilter 5.0", "QtNfc/NdefFilter 5.2"] + exportMetaObjectRevisions: [0, 0] + Property { name: "type"; type: "string" } + Property { name: "typeNameFormat"; type: "QQmlNdefRecord::TypeNameFormat" } + Property { name: "minimum"; type: "int" } + Property { name: "maximum"; type: "int" } + } + Component { + name: "QDeclarativeNdefMimeRecord" + prototype: "QQmlNdefRecord" + exports: ["QtNfc/NdefMimeRecord 5.0", "QtNfc/NdefMimeRecord 5.2"] + exportMetaObjectRevisions: [0, 0] + Property { name: "uri"; type: "string"; isReadonly: true } + } + Component { + name: "QDeclarativeNdefTextRecord" + prototype: "QQmlNdefRecord" + exports: ["QtNfc/NdefTextRecord 5.0", "QtNfc/NdefTextRecord 5.2"] + exportMetaObjectRevisions: [0, 0] + Enum { + name: "LocaleMatch" + values: { + "LocaleMatchedNone": 0, + "LocaleMatchedEnglish": 1, + "LocaleMatchedLanguage": 2, + "LocaleMatchedLanguageAndCountry": 3 + } + } + Property { name: "text"; type: "string" } + Property { name: "locale"; type: "string" } + Property { name: "localeMatch"; type: "LocaleMatch"; isReadonly: true } + } + Component { + name: "QDeclarativeNdefUriRecord" + prototype: "QQmlNdefRecord" + exports: ["QtNfc/NdefUriRecord 5.0", "QtNfc/NdefUriRecord 5.2"] + exportMetaObjectRevisions: [0, 0] + Property { name: "uri"; type: "string" } + } + Component { + name: "QDeclarativeNearField" + prototype: "QObject" + exports: [ + "QtNfc/NearField 5.0", + "QtNfc/NearField 5.2", + "QtNfc/NearField 5.4", + "QtNfc/NearField 5.5" + ] + exportMetaObjectRevisions: [0, 0, 0, 1] + Property { name: "messageRecords"; type: "QQmlNdefRecord"; isList: true; isReadonly: true } + Property { name: "filter"; type: "QDeclarativeNdefFilter"; isList: true; isReadonly: true } + Property { name: "orderMatch"; type: "bool" } + Property { name: "polling"; revision: 1; type: "bool" } + Signal { name: "pollingChanged"; revision: 1 } + Signal { name: "tagFound"; revision: 1 } + Signal { name: "tagRemoved"; revision: 1 } + } + Component { + name: "QQmlNdefRecord" + prototype: "QObject" + exports: ["QtNfc/NdefRecord 5.0", "QtNfc/NdefRecord 5.2"] + exportMetaObjectRevisions: [0, 0] + Enum { + name: "TypeNameFormat" + values: { + "Empty": 0, + "NfcRtd": 1, + "Mime": 2, + "Uri": 3, + "ExternalRtd": 4, + "Unknown": 5 + } + } + Property { name: "type"; type: "string" } + Property { name: "typeNameFormat"; type: "TypeNameFormat" } + Property { name: "record"; type: "QNdefRecord" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/qmldir new file mode 100644 index 0000000..0025f3e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtNfc/qmldir @@ -0,0 +1,4 @@ +module QtNfc +plugin declarative_nfc +classname QNfcQmlPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/libdeclarative_positioning.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/libdeclarative_positioning.so new file mode 100755 index 0000000..3d81d79 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/libdeclarative_positioning.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/plugins.qmltypes new file mode 100644 index 0000000..e951961 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/plugins.qmltypes @@ -0,0 +1,316 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtPositioning 5.14' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "LocationSingleton" + prototype: "QObject" + exports: ["QtPositioning/QtPositioning 5.0"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Method { name: "coordinate"; type: "QGeoCoordinate" } + Method { + name: "coordinate" + type: "QGeoCoordinate" + Parameter { name: "latitude"; type: "double" } + Parameter { name: "longitude"; type: "double" } + Parameter { name: "altitude"; type: "double" } + } + Method { + name: "coordinate" + type: "QGeoCoordinate" + Parameter { name: "latitude"; type: "double" } + Parameter { name: "longitude"; type: "double" } + } + Method { name: "shape"; type: "QGeoShape" } + Method { name: "rectangle"; type: "QGeoRectangle" } + Method { + name: "rectangle" + type: "QGeoRectangle" + Parameter { name: "center"; type: "QGeoCoordinate" } + Parameter { name: "width"; type: "double" } + Parameter { name: "height"; type: "double" } + } + Method { + name: "rectangle" + type: "QGeoRectangle" + Parameter { name: "topLeft"; type: "QGeoCoordinate" } + Parameter { name: "bottomRight"; type: "QGeoCoordinate" } + } + Method { + name: "rectangle" + type: "QGeoRectangle" + Parameter { name: "coordinates"; type: "QVariantList" } + } + Method { name: "circle"; type: "QGeoCircle" } + Method { + name: "circle" + type: "QGeoCircle" + Parameter { name: "center"; type: "QGeoCoordinate" } + Parameter { name: "radius"; type: "double" } + } + Method { + name: "circle" + type: "QGeoCircle" + Parameter { name: "center"; type: "QGeoCoordinate" } + } + Method { name: "path"; type: "QGeoPath" } + Method { + name: "path" + type: "QGeoPath" + Parameter { name: "value"; type: "QJSValue" } + Parameter { name: "width"; type: "double" } + } + Method { + name: "path" + type: "QGeoPath" + Parameter { name: "value"; type: "QJSValue" } + } + Method { name: "polygon"; type: "QGeoPolygon" } + Method { + name: "polygon" + type: "QGeoPolygon" + Parameter { name: "value"; type: "QVariantList" } + } + Method { + name: "polygon" + type: "QGeoPolygon" + Parameter { name: "perimeter"; type: "QVariantList" } + Parameter { name: "holes"; type: "QVariantList" } + } + Method { + name: "shapeToCircle" + type: "QGeoCircle" + Parameter { name: "shape"; type: "QGeoShape" } + } + Method { + name: "shapeToRectangle" + type: "QGeoRectangle" + Parameter { name: "shape"; type: "QGeoShape" } + } + Method { + name: "shapeToPath" + type: "QGeoPath" + Parameter { name: "shape"; type: "QGeoShape" } + } + Method { + name: "shapeToPolygon" + type: "QGeoPolygon" + Parameter { name: "shape"; type: "QGeoShape" } + } + Method { + name: "mercatorToCoord" + revision: 12 + type: "QGeoCoordinate" + Parameter { name: "mercator"; type: "QPointF" } + } + Method { + name: "coordToMercator" + revision: 12 + type: "QPointF" + Parameter { name: "coord"; type: "QGeoCoordinate" } + } + } + Component { + name: "QDeclarativeGeoAddress" + prototype: "QObject" + exports: ["QtPositioning/Address 5.0"] + exportMetaObjectRevisions: [0] + Property { name: "address"; type: "QGeoAddress" } + Property { name: "text"; type: "string" } + Property { name: "country"; type: "string" } + Property { name: "countryCode"; type: "string" } + Property { name: "state"; type: "string" } + Property { name: "county"; type: "string" } + Property { name: "city"; type: "string" } + Property { name: "district"; type: "string" } + Property { name: "street"; type: "string" } + Property { name: "postalCode"; type: "string" } + Property { name: "isTextGenerated"; type: "bool"; isReadonly: true } + } + Component { + name: "QDeclarativeGeoLocation" + prototype: "QObject" + exports: ["QtPositioning/Location 5.0", "QtPositioning/Location 5.13"] + exportMetaObjectRevisions: [0, 13] + Property { name: "location"; type: "QGeoLocation" } + Property { name: "address"; type: "QDeclarativeGeoAddress"; isPointer: true } + Property { name: "coordinate"; type: "QGeoCoordinate" } + Property { name: "boundingBox"; type: "QGeoRectangle" } + Property { name: "extendedAttributes"; revision: 13; type: "QVariantMap" } + } + Component { + name: "QDeclarativePluginParameter" + prototype: "QObject" + exports: ["QtPositioning/PluginParameter 5.14"] + exportMetaObjectRevisions: [0] + Property { name: "name"; type: "string" } + Property { name: "value"; type: "QVariant" } + Signal { + name: "nameChanged" + Parameter { name: "name"; type: "string" } + } + Signal { + name: "valueChanged" + Parameter { name: "value"; type: "QVariant" } + } + Signal { name: "initialized" } + } + Component { + name: "QDeclarativePosition" + prototype: "QObject" + exports: [ + "QtPositioning/Position 5.0", + "QtPositioning/Position 5.3", + "QtPositioning/Position 5.4" + ] + exportMetaObjectRevisions: [0, 1, 2] + Property { name: "latitudeValid"; type: "bool"; isReadonly: true } + Property { name: "longitudeValid"; type: "bool"; isReadonly: true } + Property { name: "altitudeValid"; type: "bool"; isReadonly: true } + Property { name: "coordinate"; type: "QGeoCoordinate"; isReadonly: true } + Property { name: "timestamp"; type: "QDateTime"; isReadonly: true } + Property { name: "speed"; type: "double"; isReadonly: true } + Property { name: "speedValid"; type: "bool"; isReadonly: true } + Property { name: "horizontalAccuracy"; type: "double" } + Property { name: "verticalAccuracy"; type: "double" } + Property { name: "horizontalAccuracyValid"; type: "bool"; isReadonly: true } + Property { name: "verticalAccuracyValid"; type: "bool"; isReadonly: true } + Property { name: "directionValid"; revision: 1; type: "bool"; isReadonly: true } + Property { name: "direction"; revision: 1; type: "double"; isReadonly: true } + Property { name: "verticalSpeedValid"; revision: 1; type: "bool"; isReadonly: true } + Property { name: "verticalSpeed"; revision: 1; type: "double"; isReadonly: true } + Property { name: "magneticVariation"; revision: 2; type: "double"; isReadonly: true } + Property { name: "magneticVariationValid"; revision: 2; type: "bool"; isReadonly: true } + Signal { name: "directionValidChanged"; revision: 1 } + Signal { name: "directionChanged"; revision: 1 } + Signal { name: "verticalSpeedValidChanged"; revision: 1 } + Signal { name: "verticalSpeedChanged"; revision: 1 } + Signal { name: "magneticVariationChanged"; revision: 2 } + Signal { name: "magneticVariationValidChanged"; revision: 2 } + } + Component { + name: "QDeclarativePositionSource" + defaultProperty: "parameters" + prototype: "QObject" + exports: ["QtPositioning/PositionSource 5.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "PositioningMethod" + values: { + "NoPositioningMethods": 0, + "SatellitePositioningMethods": 255, + "NonSatellitePositioningMethods": -256, + "AllPositioningMethods": -1 + } + } + Enum { + name: "PositioningMethods" + values: { + "NoPositioningMethods": 0, + "SatellitePositioningMethods": 255, + "NonSatellitePositioningMethods": -256, + "AllPositioningMethods": -1 + } + } + Enum { + name: "SourceError" + values: { + "AccessError": 0, + "ClosedError": 1, + "UnknownSourceError": 2, + "NoError": 3, + "SocketError": 100 + } + } + Property { name: "position"; type: "QDeclarativePosition"; isReadonly: true; isPointer: true } + Property { name: "active"; type: "bool" } + Property { name: "valid"; type: "bool"; isReadonly: true } + Property { name: "nmeaSource"; type: "QUrl" } + Property { name: "updateInterval"; type: "int" } + Property { name: "supportedPositioningMethods"; type: "PositioningMethods"; isReadonly: true } + Property { name: "preferredPositioningMethods"; type: "PositioningMethods" } + Property { name: "sourceError"; type: "SourceError"; isReadonly: true } + Property { name: "name"; type: "string" } + Property { + name: "parameters" + revision: 14 + type: "QDeclarativePluginParameter" + isList: true + isReadonly: true + } + Signal { name: "validityChanged" } + Signal { name: "updateTimeout" } + Method { name: "update" } + Method { name: "start" } + Method { name: "stop" } + Method { + name: "setBackendProperty" + revision: 14 + type: "bool" + Parameter { name: "name"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "backendProperty" + revision: 14 + type: "QVariant" + Parameter { name: "name"; type: "string" } + } + } + Component { + name: "QGeoShape" + exports: ["QtPositioning/GeoShape 5.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "ShapeType" + values: { + "UnknownType": 0, + "RectangleType": 1, + "CircleType": 2, + "PathType": 3, + "PolygonType": 4 + } + } + Property { name: "type"; type: "ShapeType"; isReadonly: true } + Property { name: "isValid"; type: "bool"; isReadonly: true } + Property { name: "isEmpty"; type: "bool"; isReadonly: true } + Method { + name: "contains" + type: "bool" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { name: "boundingGeoRectangle"; type: "QGeoRectangle" } + Method { name: "center"; type: "QGeoCoordinate" } + Method { + name: "extendShape" + Parameter { name: "coordinate"; type: "QGeoCoordinate" } + } + Method { name: "toString"; type: "string" } + } + Component { + name: "QQuickGeoCoordinateAnimation" + prototype: "QQuickPropertyAnimation" + exports: ["QtPositioning/CoordinateAnimation 5.3"] + exportMetaObjectRevisions: [0] + Enum { + name: "Direction" + values: { + "Shortest": 0, + "West": 1, + "East": 2 + } + } + Property { name: "from"; type: "QGeoCoordinate" } + Property { name: "to"; type: "QGeoCoordinate" } + Property { name: "direction"; type: "Direction" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/qmldir new file mode 100644 index 0000000..fc4ebf8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtPositioning/qmldir @@ -0,0 +1,4 @@ +module QtPositioning +plugin declarative_positioning +classname QtPositioningDeclarativeModule +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/libmodelsplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/libmodelsplugin.so new file mode 100755 index 0000000..9d8aefe Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/libmodelsplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/plugins.qmltypes new file mode 100644 index 0000000..00b217f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/plugins.qmltypes @@ -0,0 +1,424 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "private/qqmlmodelsmodule_p.h" + name: "QItemSelectionModelForeign" + exports: ["QtQml.Models/ItemSelectionModel 2.2"] + isCreatable: false + exportMetaObjectRevisions: [2] + } + Component { + file: "private/qqmlabstractdelegatecomponent_p.h" + name: "QQmlAbstractDelegateComponent" + prototype: "QQmlComponent" + exports: ["QtQml.Models/AbstractDelegateComponent 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Signal { name: "delegateChanged" } + } + Component { + file: "private/qqmldelegatemodel_p.h" + name: "QQmlDelegateModel" + defaultProperty: "delegate" + prototype: "QQmlInstanceModel" + exports: [ + "QtQml.Models/DelegateModel 2.1", + "QtQml.Models/DelegateModel 2.15" + ] + exportMetaObjectRevisions: [1, 15] + attachedType: "QQmlDelegateModelAttached" + Property { name: "model"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "filterOnGroup"; type: "string" } + Property { name: "items"; type: "QQmlDelegateModelGroup"; isReadonly: true; isPointer: true } + Property { + name: "persistedItems" + type: "QQmlDelegateModelGroup" + isReadonly: true + isPointer: true + } + Property { name: "groups"; type: "QQmlDelegateModelGroup"; isList: true; isReadonly: true } + Property { name: "parts"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "rootIndex"; type: "QVariant" } + Signal { name: "filterGroupChanged" } + Signal { name: "defaultGroupsChanged" } + Method { + name: "_q_itemsChanged" + Parameter { name: "index"; type: "int" } + Parameter { name: "count"; type: "int" } + Parameter { name: "roles"; type: "QVector" } + } + Method { + name: "_q_itemsInserted" + Parameter { name: "index"; type: "int" } + Parameter { name: "count"; type: "int" } + } + Method { + name: "_q_itemsRemoved" + Parameter { name: "index"; type: "int" } + Parameter { name: "count"; type: "int" } + } + Method { + name: "_q_itemsMoved" + Parameter { name: "from"; type: "int" } + Parameter { name: "to"; type: "int" } + Parameter { name: "count"; type: "int" } + } + Method { name: "_q_modelReset" } + Method { + name: "_q_rowsInserted" + Parameter { type: "QModelIndex" } + Parameter { type: "int" } + Parameter { type: "int" } + } + Method { + name: "_q_rowsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "begin"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "_q_rowsRemoved" + Parameter { type: "QModelIndex" } + Parameter { type: "int" } + Parameter { type: "int" } + } + Method { + name: "_q_rowsMoved" + Parameter { type: "QModelIndex" } + Parameter { type: "int" } + Parameter { type: "int" } + Parameter { type: "QModelIndex" } + Parameter { type: "int" } + } + Method { + name: "_q_dataChanged" + Parameter { type: "QModelIndex" } + Parameter { type: "QModelIndex" } + Parameter { type: "QVector" } + } + Method { + name: "_q_layoutChanged" + Parameter { type: "QList" } + Parameter { type: "QAbstractItemModel::LayoutChangeHint" } + } + Method { + name: "modelIndex" + type: "QVariant" + Parameter { name: "idx"; type: "int" } + } + Method { name: "parentModelIndex"; type: "QVariant" } + } + Component { + name: "QQmlDelegateModelAttached" + Property { name: "model"; type: "QQmlDelegateModel"; isReadonly: true; isPointer: true } + Property { name: "groups"; type: "QStringList" } + Property { name: "isUnresolved"; type: "bool"; isReadonly: true } + Signal { name: "unresolvedChanged" } + } + Component { + file: "private/qqmldelegatemodel_p.h" + name: "QQmlDelegateModelGroup" + exports: ["QtQml.Models/DelegateModelGroup 2.1"] + exportMetaObjectRevisions: [1] + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "name"; type: "string" } + Property { name: "includeByDefault"; type: "bool" } + Signal { name: "defaultIncludeChanged" } + Signal { + name: "changed" + Parameter { name: "removed"; type: "QJSValue" } + Parameter { name: "inserted"; type: "QJSValue" } + } + Method { + name: "insert" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "create" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "resolve" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "remove" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "addGroups" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "removeGroups" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "setGroups" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "move" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "get" + type: "QJSValue" + Parameter { name: "index"; type: "int" } + } + } + Component { + file: "private/qqmlobjectmodel_p.h" + name: "QQmlInstanceModel" + Property { name: "count"; type: "int"; isReadonly: true } + Signal { + name: "modelUpdated" + Parameter { name: "changeSet"; type: "QQmlChangeSet" } + Parameter { name: "reset"; type: "bool" } + } + Signal { + name: "createdItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Signal { + name: "initItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Signal { + name: "destroyingItem" + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Signal { + name: "itemPooled" + revision: 15 + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Signal { + name: "itemReused" + revision: 15 + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + } + Component { + file: "private/qqmlinstantiator_p.h" + name: "QQmlInstantiator" + defaultProperty: "delegate" + exports: ["QtQml.Models/Instantiator 2.14"] + exportMetaObjectRevisions: [14] + Property { name: "active"; type: "bool" } + Property { name: "asynchronous"; type: "bool" } + Property { name: "model"; type: "QVariant" } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "object"; type: "QObject"; isReadonly: true; isPointer: true } + Signal { + name: "objectAdded" + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Signal { + name: "objectRemoved" + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Method { + name: "_q_createdItem" + Parameter { type: "int" } + Parameter { type: "QObject"; isPointer: true } + } + Method { + name: "_q_modelUpdated" + Parameter { type: "QQmlChangeSet" } + Parameter { type: "bool" } + } + Method { + name: "objectAt" + type: "QObject*" + Parameter { name: "index"; type: "int" } + } + } + Component { + file: "private/qqmllistmodel_p.h" + name: "QQmlListElement" + exports: ["QtQml.Models/ListElement 2.1"] + exportMetaObjectRevisions: [1] + } + Component { + file: "private/qqmllistmodel_p.h" + name: "QQmlListModel" + exports: ["QtQml.Models/ListModel 2.1", "QtQml.Models/ListModel 2.14"] + exportMetaObjectRevisions: [1, 14] + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "dynamicRoles"; type: "bool" } + Property { name: "agent"; revision: 14; type: "QObject"; isReadonly: true; isPointer: true } + Method { name: "clear" } + Method { + name: "remove" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "append" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "insert" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "get" + type: "QJSValue" + Parameter { name: "index"; type: "int" } + } + Method { + name: "set" + Parameter { name: "index"; type: "int" } + Parameter { name: "value"; type: "QJSValue" } + } + Method { + name: "setProperty" + Parameter { name: "index"; type: "int" } + Parameter { name: "property"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "move" + Parameter { name: "from"; type: "int" } + Parameter { name: "to"; type: "int" } + Parameter { name: "count"; type: "int" } + } + Method { name: "sync" } + } + Component { + file: "private/qqmllistmodelworkeragent_p.h" + name: "QQmlListModelWorkerAgent" + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "engine"; type: "QV4::ExecutionEngine"; isPointer: true } + Signal { + name: "engineChanged" + Parameter { name: "engine"; type: "QV4::ExecutionEngine"; isPointer: true } + } + Method { name: "addref" } + Method { name: "release" } + Method { name: "clear" } + Method { + name: "remove" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "append" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "insert" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "get" + type: "QJSValue" + Parameter { name: "index"; type: "int" } + } + Method { + name: "set" + Parameter { name: "index"; type: "int" } + Parameter { name: "value"; type: "QJSValue" } + } + Method { + name: "setProperty" + Parameter { name: "index"; type: "int" } + Parameter { name: "property"; type: "string" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "move" + Parameter { name: "from"; type: "int" } + Parameter { name: "to"; type: "int" } + Parameter { name: "count"; type: "int" } + } + Method { name: "sync" } + } + Component { + file: "private/qqmlobjectmodel_p.h" + name: "QQmlObjectModel" + defaultProperty: "children" + prototype: "QQmlInstanceModel" + exports: [ + "QtQml.Models/ObjectModel 2.1", + "QtQml.Models/ObjectModel 2.15", + "QtQml.Models/ObjectModel 2.3" + ] + exportMetaObjectRevisions: [1, 15, 3] + attachedType: "QQmlObjectModelAttached" + Property { name: "children"; type: "QObject"; isList: true; isReadonly: true } + Method { name: "clear"; revision: 3 } + Method { + name: "get" + revision: 3 + type: "QObject*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "append" + revision: 3 + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Method { + name: "insert" + revision: 3 + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Method { + name: "move" + revision: 3 + Parameter { name: "from"; type: "int" } + Parameter { name: "to"; type: "int" } + Parameter { name: "n"; type: "int" } + } + Method { + name: "move" + revision: 3 + Parameter { name: "from"; type: "int" } + Parameter { name: "to"; type: "int" } + } + Method { + name: "remove" + revision: 3 + Parameter { name: "index"; type: "int" } + Parameter { name: "n"; type: "int" } + } + Method { + name: "remove" + revision: 3 + Parameter { name: "index"; type: "int" } + } + } + Component { + name: "QQmlObjectModelAttached" + Property { name: "index"; type: "int"; isReadonly: true } + } + Component { + file: "private/qquickpackage_p.h" + name: "QQuickPackage" + defaultProperty: "data" + exports: ["QtQml.Models/Package 2.14"] + exportMetaObjectRevisions: [14] + attachedType: "QQuickPackageAttached" + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + name: "QQuickPackageAttached" + Property { name: "name"; type: "string" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/qmldir new file mode 100644 index 0000000..2dd20b9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/Models.2/qmldir @@ -0,0 +1,4 @@ +module QtQml.Models +plugin modelsplugin +classname QtQmlModelsPlugin +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/libqtqmlremoteobjects.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/libqtqmlremoteobjects.so new file mode 100755 index 0000000..25ab77a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/libqtqmlremoteobjects.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/plugins.qmltypes new file mode 100644 index 0000000..2439715 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/plugins.qmltypes @@ -0,0 +1,75 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQml.RemoteObjects 1.0' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QRemoteObjectAbstractPersistedStore" + prototype: "QObject" + exports: ["QtQml.RemoteObjects/PersistedStore 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + name: "QRemoteObjectNode" + prototype: "QObject" + exports: ["QtQml.RemoteObjects/Node 1.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "ErrorCode" + values: { + "NoError": 0, + "RegistryNotAcquired": 1, + "RegistryAlreadyHosted": 2, + "NodeIsNoServer": 3, + "ServerAlreadyCreated": 4, + "UnintendedRegistryHosting": 5, + "OperationNotValidOnClientNode": 6, + "SourceNotRegistered": 7, + "MissingObjectName": 8, + "HostUrlInvalid": 9, + "ProtocolMismatch": 10, + "ListenFailed": 11 + } + } + Property { name: "registryUrl"; type: "QUrl" } + Property { + name: "persistedStore" + type: "QRemoteObjectAbstractPersistedStore" + isPointer: true + } + Property { name: "heartbeatInterval"; type: "int" } + Signal { + name: "remoteObjectAdded" + Parameter { type: "QRemoteObjectSourceLocation" } + } + Signal { + name: "remoteObjectRemoved" + Parameter { type: "QRemoteObjectSourceLocation" } + } + Signal { + name: "error" + Parameter { name: "errorCode"; type: "QRemoteObjectNode::ErrorCode" } + } + Signal { + name: "heartbeatIntervalChanged" + Parameter { name: "heartbeatInterval"; type: "int" } + } + Method { + name: "connectToNode" + type: "bool" + Parameter { name: "address"; type: "QUrl" } + } + } + Component { + name: "QRemoteObjectSettingsStore" + prototype: "QRemoteObjectAbstractPersistedStore" + exports: ["QtQml.RemoteObjects/SettingsStore 1.0"] + exportMetaObjectRevisions: [0] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/qmldir new file mode 100644 index 0000000..e6f2c53 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/RemoteObjects/qmldir @@ -0,0 +1,3 @@ +module QtQml.RemoteObjects +plugin qtqmlremoteobjects +classname QtQmlRemoteObjectsPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/libqtqmlstatemachine.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/libqtqmlstatemachine.so new file mode 100755 index 0000000..c227a6b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/libqtqmlstatemachine.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/plugins.qmltypes new file mode 100644 index 0000000..c533d3b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/plugins.qmltypes @@ -0,0 +1,83 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "finalstate.h" + name: "FinalState" + defaultProperty: "children" + exports: ["QtQml.StateMachine/FinalState 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "children"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + file: "statemachineforeign.h" + name: "QAbstractStateForeign" + exports: ["QtQml.StateMachine/QAbstractState 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + file: "statemachineforeign.h" + name: "QHistoryStateForeign" + exports: ["QtQml.StateMachine/HistoryState 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + file: "statemachineforeign.h" + name: "QSignalTransitionForeign" + exports: ["QtQml.StateMachine/QSignalTransition 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + file: "statemachineforeign.h" + name: "QStateForeign" + exports: ["QtQml.StateMachine/QState 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + file: "signaltransition.h" + name: "SignalTransition" + exports: ["QtQml.StateMachine/SignalTransition 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "signal"; type: "QJSValue" } + Property { name: "guard"; type: "QQmlScriptString" } + Signal { name: "invokeYourself" } + Signal { name: "qmlSignalChanged" } + Method { name: "invoke" } + } + Component { + file: "state.h" + name: "State" + defaultProperty: "children" + exports: ["QtQml.StateMachine/State 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "children"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + file: "statemachine.h" + name: "StateMachine" + defaultProperty: "children" + exports: ["QtQml.StateMachine/StateMachine 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "children"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "running"; type: "bool" } + Signal { name: "qmlRunningChanged" } + Method { name: "checkChildMode" } + } + Component { + file: "timeouttransition.h" + name: "TimeoutTransition" + exports: ["QtQml.StateMachine/TimeoutTransition 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "timeout"; type: "int" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/qmldir new file mode 100644 index 0000000..8bc3831 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/StateMachine/qmldir @@ -0,0 +1,4 @@ +module QtQml.StateMachine +plugin qtqmlstatemachine +classname QtQmlStateMachinePlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/libworkerscriptplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/libworkerscriptplugin.so new file mode 100755 index 0000000..220b36b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/libworkerscriptplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/plugins.qmltypes new file mode 100644 index 0000000..7da9b77 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/plugins.qmltypes @@ -0,0 +1,30 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "private/qquickworkerscript_p.h" + name: "QQuickWorkerScript" + exports: [ + "QtQml.WorkerScript/WorkerScript 2.0", + "QtQml.WorkerScript/WorkerScript 2.15" + ] + exportMetaObjectRevisions: [0, 15] + Property { name: "source"; type: "QUrl" } + Property { name: "ready"; revision: 15; type: "bool"; isReadonly: true } + Signal { name: "readyChanged"; revision: 15 } + Signal { + name: "message" + Parameter { name: "messageObject"; type: "QJSValue" } + } + Method { + name: "sendMessage" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/qmldir new file mode 100644 index 0000000..1606400 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/WorkerScript.2/qmldir @@ -0,0 +1,3 @@ +module QtQml.WorkerScript +plugin workerscriptplugin +classname QtQmlWorkerScriptPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/libqmlplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/libqmlplugin.so new file mode 100755 index 0000000..cb9c881 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/libqmlplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/plugins.qmltypes new file mode 100644 index 0000000..a4e052f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/plugins.qmltypes @@ -0,0 +1,264 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "private/qqmlengine_p.h" + name: "QObjectForeign" + exports: ["QML/QtObject 1.0", "QtQml/QtObject 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0, 0] + Method { name: "toString" } + Method { name: "destroy" } + Method { + name: "destroy" + Parameter { name: "delay"; type: "int" } + } + } + Component { + file: "private/qqmlbind_p.h" + name: "QQmlBind" + exports: [ + "QtQml/Binding 2.0", + "QtQml/Binding 2.14", + "QtQml/Binding 2.8" + ] + exportMetaObjectRevisions: [0, 14, 8] + Enum { + name: "RestorationMode" + values: [ + "RestoreNone", + "RestoreBinding", + "RestoreValue", + "RestoreBindingOrValue" + ] + } + Property { name: "target"; type: "QObject"; isPointer: true } + Property { name: "property"; type: "string" } + Property { name: "value"; type: "QJSValue" } + Property { name: "when"; type: "bool" } + Property { name: "delayed"; revision: 8; type: "bool" } + Property { name: "restoreMode"; revision: 14; type: "RestorationMode" } + Method { name: "targetValueChanged" } + } + Component { + file: "qqmlcomponent.h" + name: "QQmlComponent" + exports: ["QML/Component 1.0", "QtQml/Component 2.0"] + exportMetaObjectRevisions: [0, 0] + attachedType: "QQmlComponentAttached" + Enum { + name: "CompilationMode" + values: ["PreferSynchronous", "Asynchronous"] + } + Enum { + name: "Status" + values: ["Null", "Ready", "Loading", "Error"] + } + Property { name: "progress"; type: "double"; isReadonly: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "url"; type: "QUrl"; isReadonly: true } + Signal { + name: "statusChanged" + Parameter { type: "QQmlComponent::Status" } + } + Signal { + name: "progressChanged" + Parameter { type: "double" } + } + Method { + name: "loadUrl" + Parameter { name: "url"; type: "QUrl" } + } + Method { + name: "loadUrl" + Parameter { name: "url"; type: "QUrl" } + Parameter { name: "mode"; type: "CompilationMode" } + } + Method { + name: "setData" + Parameter { type: "QByteArray" } + Parameter { name: "baseUrl"; type: "QUrl" } + } + Method { name: "errorString"; type: "string" } + Method { + name: "createObject" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "incubateObject" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + } + Component { + file: "private/qqmlcomponentattached_p.h" + name: "QQmlComponentAttached" + Signal { name: "completed" } + Signal { name: "destruction" } + } + Component { + file: "private/qqmlconnections_p.h" + name: "QQmlConnections" + exports: ["QtQml/Connections 2.0", "QtQml/Connections 2.3"] + exportMetaObjectRevisions: [0, 3] + Property { name: "target"; type: "QObject"; isPointer: true } + Property { name: "enabled"; revision: 3; type: "bool" } + Property { name: "ignoreUnknownSignals"; type: "bool" } + Signal { name: "enabledChanged"; revision: 3 } + } + Component { + file: "private/qqmlvaluetype_p.h" + name: "QQmlEasingValueType" + exports: ["QtQml/Easing 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "Type" + values: [ + "Linear", + "InQuad", + "OutQuad", + "InOutQuad", + "OutInQuad", + "InCubic", + "OutCubic", + "InOutCubic", + "OutInCubic", + "InQuart", + "OutQuart", + "InOutQuart", + "OutInQuart", + "InQuint", + "OutQuint", + "InOutQuint", + "OutInQuint", + "InSine", + "OutSine", + "InOutSine", + "OutInSine", + "InExpo", + "OutExpo", + "InOutExpo", + "OutInExpo", + "InCirc", + "OutCirc", + "InOutCirc", + "OutInCirc", + "InElastic", + "OutElastic", + "InOutElastic", + "OutInElastic", + "InBack", + "OutBack", + "InOutBack", + "OutInBack", + "InBounce", + "OutBounce", + "InOutBounce", + "OutInBounce", + "InCurve", + "OutCurve", + "SineCurve", + "CosineCurve", + "Bezier" + ] + } + Property { name: "type"; type: "QQmlEasingValueType::Type" } + Property { name: "amplitude"; type: "double" } + Property { name: "overshoot"; type: "double" } + Property { name: "period"; type: "double" } + Property { name: "bezierCurve"; type: "QVariantList" } + } + Component { + file: "private/qqmllocale_p.h" + name: "QQmlLocale" + exports: ["QtQml/Locale 2.2"] + isCreatable: false + exportMetaObjectRevisions: [2] + Enum { + name: "MeasurementSystem" + values: [ + "MetricSystem", + "ImperialSystem", + "ImperialUSSystem", + "ImperialUKSystem" + ] + } + Enum { + name: "FormatType" + values: ["LongFormat", "ShortFormat", "NarrowFormat"] + } + Enum { + name: "CurrencySymbolFormat" + values: [ + "CurrencyIsoCode", + "CurrencySymbol", + "CurrencyDisplayName" + ] + } + Enum { + name: "DayOfWeek" + values: [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ] + } + Enum { + name: "NumberOptions" + values: [ + "DefaultNumberOptions", + "OmitGroupSeparator", + "RejectGroupSeparator", + "OmitLeadingZeroInExponent", + "RejectLeadingZeroInExponent", + "IncludeTrailingZeroesAfterDot", + "RejectTrailingZeroesAfterDot" + ] + } + } + Component { + file: "private/qqmlloggingcategory_p.h" + name: "QQmlLoggingCategory" + exports: ["QtQml/LoggingCategory 2.12", "QtQml/LoggingCategory 2.8"] + exportMetaObjectRevisions: [12, 8] + Enum { + name: "DefaultLogLevel" + values: ["Debug", "Info", "Warning", "Critical", "Fatal"] + } + Property { name: "name"; type: "string" } + Property { name: "defaultLogLevel"; revision: 12; type: "DefaultLogLevel" } + } + Component { + file: "private/qqmltimer_p.h" + name: "QQmlTimer" + exports: ["QtQml/Timer 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "interval"; type: "int" } + Property { name: "running"; type: "bool" } + Property { name: "repeat"; type: "bool" } + Property { name: "triggeredOnStart"; type: "bool" } + Property { name: "parent"; type: "QObject"; isReadonly: true; isPointer: true } + Signal { name: "triggered" } + Method { name: "start" } + Method { name: "stop" } + Method { name: "restart" } + Method { name: "ticked" } + } + Component { + file: "private/qqmltypenotavailable_p.h" + name: "QQmlTypeNotAvailable" + exports: ["QtQml/TypeNotAvailable 2.15"] + isCreatable: false + exportMetaObjectRevisions: [15] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/qmldir new file mode 100644 index 0000000..98555ee --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQml/qmldir @@ -0,0 +1,6 @@ +module QtQml +plugin qmlplugin +classname QtQmlPlugin +depends QtQml.Models 2.15 +depends QtQml.WorkerScript 2.15 +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/libqtquick2plugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/libqtquick2plugin.so new file mode 100755 index 0000000..acb636c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/libqtquick2plugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/plugins.qmltypes new file mode 100644 index 0000000..076af92 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/plugins.qmltypes @@ -0,0 +1,5057 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "private/qquickforeignutils_p.h" + name: "QInputMethodForeign" + exports: ["QtQuick/InputMethod 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + file: "private/qquickforeignutils_p.h" + name: "QKeySequenceForeign" + exports: ["QtQuick/StandardKey 2.2"] + isCreatable: false + exportMetaObjectRevisions: [2] + } + Component { + file: "private/qquickitemsmodule_p.h" + name: "QPointingDeviceUniqueIdForeign" + exports: ["QtQuick/PointingDeviceUniqueId 2.9"] + isCreatable: false + exportMetaObjectRevisions: [9] + } + Component { + name: "QQmlApplication" + Property { name: "arguments"; type: "QStringList"; isReadonly: true } + Property { name: "name"; type: "string" } + Property { name: "version"; type: "string" } + Property { name: "organization"; type: "string" } + Property { name: "domain"; type: "string" } + Signal { name: "aboutToQuit" } + Method { + name: "setName" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setVersion" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setOrganization" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setDomain" + Parameter { name: "arg"; type: "string" } + } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickAbstractAnimation" + exports: ["QtQuick/Animation 2.0", "QtQuick/Animation 2.12"] + isCreatable: false + exportMetaObjectRevisions: [0, 12] + Enum { + name: "Loops" + values: ["Infinite"] + } + Property { name: "running"; type: "bool" } + Property { name: "paused"; type: "bool" } + Property { name: "alwaysRunToEnd"; type: "bool" } + Property { name: "loops"; type: "int" } + Signal { name: "started" } + Signal { name: "stopped" } + Signal { + name: "runningChanged" + Parameter { type: "bool" } + } + Signal { + name: "pausedChanged" + Parameter { type: "bool" } + } + Signal { + name: "alwaysRunToEndChanged" + Parameter { type: "bool" } + } + Signal { + name: "loopCountChanged" + Parameter { type: "int" } + } + Signal { name: "finished"; revision: 12 } + Method { name: "restart" } + Method { name: "start" } + Method { name: "pause" } + Method { name: "resume" } + Method { name: "stop" } + Method { name: "complete" } + Method { name: "componentFinalized" } + } + Component { + file: "private/qquickaccessibleattached_p.h" + name: "QQuickAccessibleAttached" + exports: ["QtQuick/Accessible 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickAccessibleAttached" + Property { name: "role"; type: "QAccessible::Role" } + Property { name: "name"; type: "string" } + Property { name: "description"; type: "string" } + Property { name: "ignored"; type: "bool" } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "editable"; type: "bool" } + Property { name: "focusable"; type: "bool" } + Property { name: "focused"; type: "bool" } + Property { name: "multiLine"; type: "bool" } + Property { name: "readOnly"; type: "bool" } + Property { name: "selected"; type: "bool" } + Property { name: "selectable"; type: "bool" } + Property { name: "pressed"; type: "bool" } + Property { name: "checkStateMixed"; type: "bool" } + Property { name: "defaultButton"; type: "bool" } + Property { name: "passwordEdit"; type: "bool" } + Property { name: "selectableText"; type: "bool" } + Property { name: "searchEdit"; type: "bool" } + Signal { + name: "checkableChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "checkedChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "editableChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "focusableChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "focusedChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "multiLineChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "readOnlyChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "selectedChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "selectableChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "pressedChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "checkStateMixedChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "defaultButtonChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "passwordEditChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "selectableTextChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "searchEditChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { name: "pressAction" } + Signal { name: "toggleAction" } + Signal { name: "increaseAction" } + Signal { name: "decreaseAction" } + Signal { name: "scrollUpAction" } + Signal { name: "scrollDownAction" } + Signal { name: "scrollLeftAction" } + Signal { name: "scrollRightAction" } + Signal { name: "previousPageAction" } + Signal { name: "nextPageAction" } + Method { name: "valueChanged" } + Method { name: "cursorPositionChanged" } + Method { + name: "setIgnored" + Parameter { name: "ignored"; type: "bool" } + } + } + Component { + file: "private/qquickitemanimation_p.h" + name: "QQuickAnchorAnimation" + prototype: "QQuickAbstractAnimation" + exports: [ + "QtQuick/AnchorAnimation 2.0", + "QtQuick/AnchorAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "targets"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "duration"; type: "int" } + Property { name: "easing"; type: "QEasingCurve" } + Signal { + name: "durationChanged" + Parameter { type: "int" } + } + Signal { + name: "easingChanged" + Parameter { type: "QEasingCurve" } + } + } + Component { + file: "private/qquickstateoperations_p.h" + name: "QQuickAnchorChanges" + prototype: "QQuickStateOperation" + exports: ["QtQuick/AnchorChanges 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "target"; type: "QQuickItem"; isPointer: true } + Property { name: "anchors"; type: "QQuickAnchorSet"; isReadonly: true; isPointer: true } + } + Component { + file: "private/qquickstateoperations_p.h" + name: "QQuickAnchorSet" + Property { name: "left"; type: "QQmlScriptString" } + Property { name: "right"; type: "QQmlScriptString" } + Property { name: "horizontalCenter"; type: "QQmlScriptString" } + Property { name: "top"; type: "QQmlScriptString" } + Property { name: "bottom"; type: "QQmlScriptString" } + Property { name: "verticalCenter"; type: "QQmlScriptString" } + Property { name: "baseline"; type: "QQmlScriptString" } + } + Component { + file: "private/qquickanchors_p.h" + name: "QQuickAnchors" + Enum { + name: "Anchors" + alias: "Anchor" + isFlag: true + values: [ + "InvalidAnchor", + "LeftAnchor", + "RightAnchor", + "TopAnchor", + "BottomAnchor", + "HCenterAnchor", + "VCenterAnchor", + "BaselineAnchor", + "Horizontal_Mask", + "Vertical_Mask" + ] + } + Property { name: "left"; type: "QQuickAnchorLine" } + Property { name: "right"; type: "QQuickAnchorLine" } + Property { name: "horizontalCenter"; type: "QQuickAnchorLine" } + Property { name: "top"; type: "QQuickAnchorLine" } + Property { name: "bottom"; type: "QQuickAnchorLine" } + Property { name: "verticalCenter"; type: "QQuickAnchorLine" } + Property { name: "baseline"; type: "QQuickAnchorLine" } + Property { name: "margins"; type: "double" } + Property { name: "leftMargin"; type: "double" } + Property { name: "rightMargin"; type: "double" } + Property { name: "horizontalCenterOffset"; type: "double" } + Property { name: "topMargin"; type: "double" } + Property { name: "bottomMargin"; type: "double" } + Property { name: "verticalCenterOffset"; type: "double" } + Property { name: "baselineOffset"; type: "double" } + Property { name: "fill"; type: "QQuickItem"; isPointer: true } + Property { name: "centerIn"; type: "QQuickItem"; isPointer: true } + Property { name: "alignWhenCentered"; type: "bool" } + Signal { name: "centerAlignedChanged" } + } + Component { + file: "private/qquickanimatedimage_p.h" + name: "QQuickAnimatedImage" + prototype: "QQuickImage" + exports: [ + "QtQuick/AnimatedImage 2.0", + "QtQuick/AnimatedImage 2.1", + "QtQuick/AnimatedImage 2.11", + "QtQuick/AnimatedImage 2.14", + "QtQuick/AnimatedImage 2.15", + "QtQuick/AnimatedImage 2.3", + "QtQuick/AnimatedImage 2.4", + "QtQuick/AnimatedImage 2.5", + "QtQuick/AnimatedImage 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 14, 15, 3, 4, 5, 7] + Property { name: "playing"; type: "bool" } + Property { name: "paused"; type: "bool" } + Property { name: "currentFrame"; type: "int" } + Property { name: "frameCount"; type: "int"; isReadonly: true } + Property { name: "speed"; revision: 11; type: "double" } + Property { name: "sourceSize"; type: "QSize"; isReadonly: true } + Signal { name: "frameChanged" } + Signal { name: "currentFrameChanged" } + Signal { name: "speedChanged"; revision: 11 } + Method { name: "movieUpdate" } + Method { name: "movieRequestFinished" } + Method { name: "playingStatusChanged" } + Method { name: "onCacheChanged" } + } + Component { + file: "private/qquickanimatedsprite_p.h" + name: "QQuickAnimatedSprite" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/AnimatedSprite 2.0", + "QtQuick/AnimatedSprite 2.1", + "QtQuick/AnimatedSprite 2.11", + "QtQuick/AnimatedSprite 2.12", + "QtQuick/AnimatedSprite 2.15", + "QtQuick/AnimatedSprite 2.4", + "QtQuick/AnimatedSprite 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 12, 15, 4, 7] + Enum { + name: "LoopParameters" + values: ["Infinite"] + } + Enum { + name: "FinishBehavior" + values: ["FinishAtInitialFrame", "FinishAtFinalFrame"] + } + Property { name: "running"; type: "bool" } + Property { name: "interpolate"; type: "bool" } + Property { name: "source"; type: "QUrl" } + Property { name: "reverse"; type: "bool" } + Property { name: "frameSync"; type: "bool" } + Property { name: "frameCount"; type: "int" } + Property { name: "frameHeight"; type: "int" } + Property { name: "frameWidth"; type: "int" } + Property { name: "frameX"; type: "int" } + Property { name: "frameY"; type: "int" } + Property { name: "frameRate"; type: "double" } + Property { name: "frameDuration"; type: "int" } + Property { name: "loops"; type: "int" } + Property { name: "paused"; type: "bool" } + Property { name: "currentFrame"; type: "int" } + Property { name: "finishBehavior"; revision: 15; type: "FinishBehavior" } + Signal { + name: "pausedChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "runningChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "interpolateChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "sourceChanged" + Parameter { name: "arg"; type: "QUrl" } + } + Signal { + name: "reverseChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "frameSyncChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "frameCountChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameHeightChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameWidthChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameXChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameYChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameRateChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "frameDurationChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "loopsChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "currentFrameChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "finishBehaviorChanged" + revision: 15 + Parameter { name: "arg"; type: "FinishBehavior" } + } + Signal { name: "finished"; revision: 12 } + Method { name: "start" } + Method { name: "stop" } + Method { name: "restart" } + Method { + name: "advance" + Parameter { name: "frames"; type: "int" } + } + Method { name: "advance" } + Method { name: "pause" } + Method { name: "resume" } + Method { + name: "setRunning" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setPaused" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setInterpolate" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setSource" + Parameter { name: "arg"; type: "QUrl" } + } + Method { + name: "setReverse" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setFrameSync" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setFrameCount" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameHeight" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameWidth" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameX" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameY" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameRate" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setFrameDuration" + Parameter { name: "arg"; type: "int" } + } + Method { name: "resetFrameRate" } + Method { name: "resetFrameDuration" } + Method { + name: "setLoops" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setCurrentFrame" + Parameter { name: "arg"; type: "int" } + } + Method { name: "createEngine" } + Method { name: "reset" } + } + Component { + file: "private/qquickanimationcontroller_p.h" + name: "QQuickAnimationController" + defaultProperty: "animation" + exports: ["QtQuick/AnimationController 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "progress"; type: "double" } + Property { name: "animation"; type: "QQuickAbstractAnimation"; isPointer: true } + Method { name: "reload" } + Method { name: "completeToBeginning" } + Method { name: "completeToEnd" } + Method { name: "componentFinalized" } + Method { name: "updateProgress" } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickAnimationGroup" + defaultProperty: "animations" + prototype: "QQuickAbstractAnimation" + Property { name: "animations"; type: "QQuickAbstractAnimation"; isList: true; isReadonly: true } + } + Component { + file: "private/qquickanimator_p.h" + name: "QQuickAnimator" + prototype: "QQuickAbstractAnimation" + exports: ["QtQuick/Animator 2.12", "QtQuick/Animator 2.2"] + isCreatable: false + exportMetaObjectRevisions: [12, 2] + Property { name: "target"; type: "QQuickItem"; isPointer: true } + Property { name: "easing"; type: "QEasingCurve" } + Property { name: "duration"; type: "int" } + Property { name: "to"; type: "double" } + Property { name: "from"; type: "double" } + Signal { + name: "targetItemChanged" + Parameter { type: "QQuickItem"; isPointer: true } + } + Signal { + name: "durationChanged" + Parameter { name: "duration"; type: "int" } + } + Signal { + name: "easingChanged" + Parameter { name: "curve"; type: "QEasingCurve" } + } + Signal { + name: "toChanged" + Parameter { name: "to"; type: "double" } + } + Signal { + name: "fromChanged" + Parameter { name: "from"; type: "double" } + } + } + Component { + file: "private/qquickapplication_p.h" + name: "QQuickApplication" + prototype: "QQmlApplication" + exports: ["QtQuick/Application 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "active"; type: "bool"; isReadonly: true } + Property { name: "layoutDirection"; type: "Qt::LayoutDirection"; isReadonly: true } + Property { name: "supportsMultipleWindows"; type: "bool"; isReadonly: true } + Property { name: "state"; type: "Qt::ApplicationState"; isReadonly: true } + Property { name: "font"; type: "QFont"; isReadonly: true } + Property { name: "displayName"; type: "string" } + Property { name: "screens"; type: "QQuickScreenInfo"; isList: true; isReadonly: true } + Signal { + name: "stateChanged" + Parameter { name: "state"; type: "Qt::ApplicationState" } + } + Method { name: "updateScreens" } + } + Component { + file: "private/qquickpositioners_p.h" + name: "QQuickBasePositioner" + prototype: "QQuickImplicitSizeItem" + exports: [ + "QtQuick/Positioner 2.0", + "QtQuick/Positioner 2.1", + "QtQuick/Positioner 2.11", + "QtQuick/Positioner 2.4", + "QtQuick/Positioner 2.6", + "QtQuick/Positioner 2.7", + "QtQuick/Positioner 2.9" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1, 11, 4, 6, 7, 9] + attachedType: "QQuickPositionerAttached" + Property { name: "spacing"; type: "double" } + Property { name: "populate"; type: "QQuickTransition"; isPointer: true } + Property { name: "move"; type: "QQuickTransition"; isPointer: true } + Property { name: "add"; type: "QQuickTransition"; isPointer: true } + Property { name: "padding"; revision: 6; type: "double" } + Property { name: "topPadding"; revision: 6; type: "double" } + Property { name: "leftPadding"; revision: 6; type: "double" } + Property { name: "rightPadding"; revision: 6; type: "double" } + Property { name: "bottomPadding"; revision: 6; type: "double" } + Signal { name: "paddingChanged"; revision: 6 } + Signal { name: "topPaddingChanged"; revision: 6 } + Signal { name: "leftPaddingChanged"; revision: 6 } + Signal { name: "rightPaddingChanged"; revision: 6 } + Signal { name: "bottomPaddingChanged"; revision: 6 } + Signal { name: "positioningComplete"; revision: 9 } + Method { name: "prePositioning" } + Method { name: "forceLayout"; revision: 9 } + } + Component { + file: "private/qquickbehavior_p.h" + name: "QQuickBehavior" + defaultProperty: "animation" + exports: [ + "QtQuick/Behavior 2.0", + "QtQuick/Behavior 2.13", + "QtQuick/Behavior 2.15" + ] + exportMetaObjectRevisions: [0, 13, 15] + Property { name: "animation"; type: "QQuickAbstractAnimation"; isPointer: true } + Property { name: "enabled"; type: "bool" } + Property { name: "targetValue"; revision: 13; type: "QVariant"; isReadonly: true } + Property { name: "targetProperty"; revision: 15; type: "QQmlProperty"; isReadonly: true } + Method { name: "componentFinalized" } + } + Component { + file: "private/qquickborderimage_p.h" + name: "QQuickBorderImage" + prototype: "QQuickImageBase" + exports: [ + "QtQuick/BorderImage 2.0", + "QtQuick/BorderImage 2.1", + "QtQuick/BorderImage 2.11", + "QtQuick/BorderImage 2.14", + "QtQuick/BorderImage 2.15", + "QtQuick/BorderImage 2.4", + "QtQuick/BorderImage 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 14, 15, 4, 7] + Enum { + name: "TileMode" + values: ["Stretch", "Repeat", "Round"] + } + Property { name: "border"; type: "QQuickScaleGrid"; isReadonly: true; isPointer: true } + Property { name: "horizontalTileMode"; type: "TileMode" } + Property { name: "verticalTileMode"; type: "TileMode" } + Property { name: "sourceSize"; type: "QSize"; isReadonly: true } + Method { name: "doUpdate" } + Method { name: "requestFinished" } + Method { name: "sciRequestFinished" } + } + Component { + file: "private/qquickshadereffectmesh_p.h" + name: "QQuickBorderImageMesh" + prototype: "QQuickShaderEffectMesh" + exports: ["QtQuick/BorderImageMesh 2.8"] + exportMetaObjectRevisions: [8] + Enum { + name: "TileMode" + values: ["Stretch", "Repeat", "Round"] + } + Property { name: "border"; type: "QQuickScaleGrid"; isReadonly: true; isPointer: true } + Property { name: "size"; type: "QSize" } + Property { name: "horizontalTileMode"; type: "TileMode" } + Property { name: "verticalTileMode"; type: "TileMode" } + } + Component { + file: "private/qquickcanvasitem_p.h" + name: "QQuickCanvasItem" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/Canvas 2.0", + "QtQuick/Canvas 2.1", + "QtQuick/Canvas 2.11", + "QtQuick/Canvas 2.4", + "QtQuick/Canvas 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "RenderTarget" + values: ["Image", "FramebufferObject"] + } + Enum { + name: "RenderStrategy" + values: ["Immediate", "Threaded", "Cooperative"] + } + Property { name: "available"; type: "bool"; isReadonly: true } + Property { name: "contextType"; type: "string" } + Property { name: "context"; type: "QJSValue"; isReadonly: true } + Property { name: "canvasSize"; type: "QSizeF" } + Property { name: "tileSize"; type: "QSize" } + Property { name: "canvasWindow"; type: "QRectF" } + Property { name: "renderTarget"; type: "RenderTarget" } + Property { name: "renderStrategy"; type: "RenderStrategy" } + Signal { + name: "paint" + Parameter { name: "region"; type: "QRect" } + } + Signal { name: "painted" } + Signal { name: "imageLoaded" } + Method { + name: "loadImage" + Parameter { name: "url"; type: "QUrl" } + } + Method { + name: "unloadImage" + Parameter { name: "url"; type: "QUrl" } + } + Method { + name: "isImageLoaded" + type: "bool" + Parameter { name: "url"; type: "QUrl" } + } + Method { + name: "isImageLoading" + type: "bool" + Parameter { name: "url"; type: "QUrl" } + } + Method { + name: "isImageError" + type: "bool" + Parameter { name: "url"; type: "QUrl" } + } + Method { name: "sceneGraphInitialized" } + Method { name: "checkAnimationCallbacks" } + Method { name: "invalidateSceneGraph" } + Method { name: "schedulePolish" } + Method { + name: "getContext" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "requestAnimationFrame" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "cancelRequestAnimationFrame" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { name: "requestPaint" } + Method { + name: "markDirty" + Parameter { name: "dirtyRect"; type: "QRectF" } + } + Method { name: "markDirty" } + Method { + name: "save" + type: "bool" + Parameter { name: "filename"; type: "string" } + } + Method { + name: "toDataURL" + type: "string" + Parameter { name: "type"; type: "string" } + } + Method { name: "toDataURL"; type: "string" } + Method { name: "delayedCreate" } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickCloseEvent" + Property { name: "accepted"; type: "bool" } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickColorAnimation" + prototype: "QQuickPropertyAnimation" + exports: ["QtQuick/ColorAnimation 2.0", "QtQuick/ColorAnimation 2.12"] + exportMetaObjectRevisions: [0, 12] + Property { name: "from"; type: "QColor" } + Property { name: "to"; type: "QColor" } + } + Component { + file: "private/qquickvaluetypes_p.h" + name: "QQuickColorSpaceValueType" + exports: ["QtQuick/ColorSpace 2.15"] + isCreatable: false + exportMetaObjectRevisions: [15] + Enum { + name: "NamedColorSpace" + values: [ + "Unknown", + "SRgb", + "SRgbLinear", + "AdobeRgb", + "DisplayP3", + "ProPhotoRgb" + ] + } + Enum { + name: "Primaries" + values: ["Custom", "SRgb", "AdobeRgb", "DciP3D65", "ProPhotoRgb"] + } + Enum { + name: "TransferFunction" + values: ["Custom", "Linear", "Gamma", "SRgb", "ProPhotoRgb"] + } + Property { name: "namedColorSpace"; type: "NamedColorSpace" } + Property { name: "primaries"; type: "Primaries" } + Property { name: "transferFunction"; type: "TransferFunction" } + Property { name: "gamma"; type: "float" } + } + Component { + file: "private/qquickpositioners_p.h" + name: "QQuickColumn" + prototype: "QQuickBasePositioner" + exports: [ + "QtQuick/Column 2.0", + "QtQuick/Column 2.1", + "QtQuick/Column 2.11", + "QtQuick/Column 2.4", + "QtQuick/Column 2.6", + "QtQuick/Column 2.7", + "QtQuick/Column 2.9" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 6, 7, 9] + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickCurve" + prototype: "QQuickPathElement" + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "relativeX"; type: "double" } + Property { name: "relativeY"; type: "double" } + } + Component { + file: "private/qquickvalidator_p.h" + name: "QQuickDoubleValidator" + exports: ["QtQuick/DoubleValidator 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "locale"; type: "string" } + Signal { name: "localeNameChanged" } + } + Component { + file: "private/qquickdrag_p.h" + name: "QQuickDrag" + exports: ["QtQuick/Drag 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickDragAttached" + Enum { + name: "DragType" + values: ["None", "Automatic", "Internal"] + } + Enum { + name: "Axis" + values: ["XAxis", "YAxis", "XAndYAxis", "XandYAxis"] + } + Property { name: "target"; type: "QQuickItem"; isPointer: true } + Property { name: "axis"; type: "Axis" } + Property { name: "minimumX"; type: "double" } + Property { name: "maximumX"; type: "double" } + Property { name: "minimumY"; type: "double" } + Property { name: "maximumY"; type: "double" } + Property { name: "active"; type: "bool"; isReadonly: true } + Property { name: "filterChildren"; type: "bool" } + Property { name: "smoothed"; type: "bool" } + Property { name: "threshold"; type: "double" } + } + Component { + file: "private/qquickdrag_p.h" + name: "QQuickDragAttached" + Property { name: "active"; type: "bool" } + Property { name: "source"; type: "QObject"; isPointer: true } + Property { name: "target"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "hotSpot"; type: "QPointF" } + Property { name: "imageSource"; type: "QUrl" } + Property { name: "keys"; type: "QStringList" } + Property { name: "mimeData"; type: "QVariantMap" } + Property { name: "supportedActions"; type: "Qt::DropActions" } + Property { name: "proposedAction"; type: "Qt::DropAction" } + Property { name: "dragType"; type: "QQuickDrag::DragType" } + Signal { name: "dragStarted" } + Signal { + name: "dragFinished" + Parameter { name: "dropAction"; type: "Qt::DropAction" } + } + Method { + name: "start" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "startDrag" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { name: "cancel" } + Method { name: "drop"; type: "int" } + } + Component { + file: "private/qquickdragaxis_p.h" + name: "QQuickDragAxis" + exports: ["QtQuick/DragAxis 2.12"] + isCreatable: false + exportMetaObjectRevisions: [12] + Property { name: "minimum"; type: "double" } + Property { name: "maximum"; type: "double" } + Property { name: "enabled"; type: "bool" } + } + Component { + file: "private/qquickdraghandler_p.h" + name: "QQuickDragHandler" + prototype: "QQuickMultiPointHandler" + exports: [ + "QtQuick/DragHandler 2.12", + "QtQuick/DragHandler 2.14", + "QtQuick/DragHandler 2.15" + ] + exportMetaObjectRevisions: [12, 14, 15] + Enum { + name: "SnapMode" + values: [ + "NoSnap", + "SnapAuto", + "SnapIfPressedOutsideTarget", + "SnapAlways" + ] + } + Property { name: "xAxis"; type: "QQuickDragAxis"; isReadonly: true; isPointer: true } + Property { name: "yAxis"; type: "QQuickDragAxis"; isReadonly: true; isPointer: true } + Property { name: "translation"; type: "QVector2D"; isReadonly: true } + Property { name: "snapMode"; revision: 14; type: "SnapMode" } + Signal { name: "snapModeChanged"; revision: 14 } + } + Component { + file: "private/qquickdroparea_p.h" + name: "QQuickDropArea" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/DropArea 2.0", + "QtQuick/DropArea 2.1", + "QtQuick/DropArea 2.11", + "QtQuick/DropArea 2.4", + "QtQuick/DropArea 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "containsDrag"; type: "bool"; isReadonly: true } + Property { name: "keys"; type: "QStringList" } + Property { name: "drag"; type: "QQuickDropAreaDrag"; isReadonly: true; isPointer: true } + Signal { name: "sourceChanged" } + Signal { + name: "entered" + Parameter { name: "drag"; type: "QQuickDropEvent"; isPointer: true } + } + Signal { name: "exited" } + Signal { + name: "positionChanged" + Parameter { name: "drag"; type: "QQuickDropEvent"; isPointer: true } + } + Signal { + name: "dropped" + Parameter { name: "drop"; type: "QQuickDropEvent"; isPointer: true } + } + } + Component { + file: "private/qquickdroparea_p.h" + name: "QQuickDropAreaDrag" + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "source"; type: "QObject"; isReadonly: true; isPointer: true } + Signal { name: "positionChanged" } + } + Component { + file: "private/qquickdroparea_p.h" + name: "QQuickDropEvent" + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "source"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "keys"; type: "QStringList"; isReadonly: true } + Property { name: "supportedActions"; type: "Qt::DropActions"; isReadonly: true } + Property { name: "proposedAction"; type: "Qt::DropActions"; isReadonly: true } + Property { name: "action"; type: "Qt::DropAction" } + Property { name: "accepted"; type: "bool" } + Property { name: "hasColor"; type: "bool"; isReadonly: true } + Property { name: "hasHtml"; type: "bool"; isReadonly: true } + Property { name: "hasText"; type: "bool"; isReadonly: true } + Property { name: "hasUrls"; type: "bool"; isReadonly: true } + Property { name: "colorData"; type: "QVariant"; isReadonly: true } + Property { name: "html"; type: "string"; isReadonly: true } + Property { name: "text"; type: "string"; isReadonly: true } + Property { name: "urls"; type: "QList"; isReadonly: true } + Property { name: "formats"; type: "QStringList"; isReadonly: true } + Method { + name: "getDataAsString" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "getDataAsArrayBuffer" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "acceptProposedAction" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "accept" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + } + Component { + file: "private/qquickitem_p.h" + name: "QQuickEnterKeyAttached" + exports: ["QtQuick/EnterKey 2.6"] + isCreatable: false + exportMetaObjectRevisions: [6] + attachedType: "QQuickEnterKeyAttached" + Property { name: "type"; type: "Qt::EnterKeyType" } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickEventPoint" + exports: ["QtQuick/EventPoint 2.12"] + isCreatable: false + exportMetaObjectRevisions: [12] + Enum { + name: "States" + alias: "State" + isFlag: true + values: ["Pressed", "Updated", "Stationary", "Released"] + } + Enum { + name: "GrabTransition" + values: [ + "GrabPassive", + "UngrabPassive", + "CancelGrabPassive", + "OverrideGrabPassive", + "GrabExclusive", + "UngrabExclusive", + "CancelGrabExclusive" + ] + } + Property { name: "event"; type: "QQuickPointerEvent"; isReadonly: true; isPointer: true } + Property { name: "position"; type: "QPointF"; isReadonly: true } + Property { name: "scenePosition"; type: "QPointF"; isReadonly: true } + Property { name: "scenePressPosition"; type: "QPointF"; isReadonly: true } + Property { name: "sceneGrabPosition"; type: "QPointF"; isReadonly: true } + Property { name: "state"; type: "State"; isReadonly: true } + Property { name: "pointId"; type: "int"; isReadonly: true } + Property { name: "timeHeld"; type: "double"; isReadonly: true } + Property { name: "velocity"; type: "QVector2D"; isReadonly: true } + Property { name: "accepted"; type: "bool" } + Property { name: "exclusiveGrabber"; type: "QObject"; isPointer: true } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickEventTabletPoint" + prototype: "QQuickEventPoint" + exports: ["QtQuick/EventTabletPoint 2.15"] + isCreatable: false + exportMetaObjectRevisions: [15] + Property { name: "rotation"; type: "double"; isReadonly: true } + Property { name: "pressure"; type: "double"; isReadonly: true } + Property { name: "tangentialPressure"; type: "double"; isReadonly: true } + Property { name: "tilt"; type: "QVector2D"; isReadonly: true } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickEventTouchPoint" + prototype: "QQuickEventPoint" + exports: ["QtQuick/EventTouchPoint 2.12"] + isCreatable: false + exportMetaObjectRevisions: [12] + Property { name: "rotation"; type: "double"; isReadonly: true } + Property { name: "pressure"; type: "double"; isReadonly: true } + Property { name: "ellipseDiameters"; type: "QSizeF"; isReadonly: true } + Property { name: "uniqueId"; type: "QPointingDeviceUniqueId"; isReadonly: true } + } + Component { + file: "private/qquickflickable_p.h" + name: "QQuickFlickable" + defaultProperty: "flickableData" + prototype: "QQuickItem" + exports: [ + "QtQuick/Flickable 2.0", + "QtQuick/Flickable 2.1", + "QtQuick/Flickable 2.10", + "QtQuick/Flickable 2.11", + "QtQuick/Flickable 2.12", + "QtQuick/Flickable 2.4", + "QtQuick/Flickable 2.7", + "QtQuick/Flickable 2.9" + ] + exportMetaObjectRevisions: [0, 1, 10, 11, 12, 4, 7, 9] + Enum { + name: "BoundsBehavior" + alias: "BoundsBehaviorFlag" + isFlag: true + values: [ + "StopAtBounds", + "DragOverBounds", + "OvershootBounds", + "DragAndOvershootBounds" + ] + } + Enum { + name: "BoundsMovement" + values: ["FollowBoundsBehavior"] + } + Enum { + name: "FlickableDirection" + values: [ + "AutoFlickDirection", + "HorizontalFlick", + "VerticalFlick", + "HorizontalAndVerticalFlick", + "AutoFlickIfNeeded" + ] + } + Property { name: "contentWidth"; type: "double" } + Property { name: "contentHeight"; type: "double" } + Property { name: "contentX"; type: "double" } + Property { name: "contentY"; type: "double" } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "topMargin"; type: "double" } + Property { name: "bottomMargin"; type: "double" } + Property { name: "originY"; type: "double"; isReadonly: true } + Property { name: "leftMargin"; type: "double" } + Property { name: "rightMargin"; type: "double" } + Property { name: "originX"; type: "double"; isReadonly: true } + Property { name: "horizontalVelocity"; type: "double"; isReadonly: true } + Property { name: "verticalVelocity"; type: "double"; isReadonly: true } + Property { name: "boundsBehavior"; type: "BoundsBehavior" } + Property { name: "boundsMovement"; revision: 10; type: "BoundsMovement" } + Property { name: "rebound"; type: "QQuickTransition"; isPointer: true } + Property { name: "maximumFlickVelocity"; type: "double" } + Property { name: "flickDeceleration"; type: "double" } + Property { name: "moving"; type: "bool"; isReadonly: true } + Property { name: "movingHorizontally"; type: "bool"; isReadonly: true } + Property { name: "movingVertically"; type: "bool"; isReadonly: true } + Property { name: "flicking"; type: "bool"; isReadonly: true } + Property { name: "flickingHorizontally"; type: "bool"; isReadonly: true } + Property { name: "flickingVertically"; type: "bool"; isReadonly: true } + Property { name: "dragging"; type: "bool"; isReadonly: true } + Property { name: "draggingHorizontally"; type: "bool"; isReadonly: true } + Property { name: "draggingVertically"; type: "bool"; isReadonly: true } + Property { name: "flickableDirection"; type: "FlickableDirection" } + Property { name: "interactive"; type: "bool" } + Property { name: "pressDelay"; type: "int" } + Property { name: "atXEnd"; type: "bool"; isReadonly: true } + Property { name: "atYEnd"; type: "bool"; isReadonly: true } + Property { name: "atXBeginning"; type: "bool"; isReadonly: true } + Property { name: "atYBeginning"; type: "bool"; isReadonly: true } + Property { + name: "visibleArea" + type: "QQuickFlickableVisibleArea" + isReadonly: true + isPointer: true + } + Property { name: "pixelAligned"; type: "bool" } + Property { name: "synchronousDrag"; revision: 12; type: "bool" } + Property { name: "horizontalOvershoot"; revision: 9; type: "double"; isReadonly: true } + Property { name: "verticalOvershoot"; revision: 9; type: "double"; isReadonly: true } + Property { name: "flickableData"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "flickableChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Signal { name: "isAtBoundaryChanged" } + Signal { name: "boundsMovementChanged"; revision: 10 } + Signal { name: "movementStarted" } + Signal { name: "movementEnded" } + Signal { name: "flickStarted" } + Signal { name: "flickEnded" } + Signal { name: "dragStarted" } + Signal { name: "dragEnded" } + Signal { name: "synchronousDragChanged"; revision: 12 } + Signal { name: "horizontalOvershootChanged"; revision: 9 } + Signal { name: "verticalOvershootChanged"; revision: 9 } + Method { name: "movementStarting" } + Method { name: "movementEnding" } + Method { + name: "movementEnding" + Parameter { name: "hMovementEnding"; type: "bool" } + Parameter { name: "vMovementEnding"; type: "bool" } + } + Method { name: "velocityTimelineCompleted" } + Method { name: "timelineCompleted" } + Method { + name: "resizeContent" + Parameter { name: "w"; type: "double" } + Parameter { name: "h"; type: "double" } + Parameter { name: "center"; type: "QPointF" } + } + Method { name: "returnToBounds" } + Method { + name: "flick" + Parameter { name: "xVelocity"; type: "double" } + Parameter { name: "yVelocity"; type: "double" } + } + Method { name: "cancelFlick" } + } + Component { + file: "private/qquickflickable_p_p.h" + name: "QQuickFlickableVisibleArea" + Property { name: "xPosition"; type: "double"; isReadonly: true } + Property { name: "yPosition"; type: "double"; isReadonly: true } + Property { name: "widthRatio"; type: "double"; isReadonly: true } + Property { name: "heightRatio"; type: "double"; isReadonly: true } + Signal { + name: "xPositionChanged" + Parameter { name: "xPosition"; type: "double" } + } + Signal { + name: "yPositionChanged" + Parameter { name: "yPosition"; type: "double" } + } + Signal { + name: "widthRatioChanged" + Parameter { name: "widthRatio"; type: "double" } + } + Signal { + name: "heightRatioChanged" + Parameter { name: "heightRatio"; type: "double" } + } + } + Component { + file: "private/qquickflipable_p.h" + name: "QQuickFlipable" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/Flipable 2.0", + "QtQuick/Flipable 2.1", + "QtQuick/Flipable 2.11", + "QtQuick/Flipable 2.4", + "QtQuick/Flipable 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "Side" + values: ["Front", "Back"] + } + Property { name: "front"; type: "QQuickItem"; isPointer: true } + Property { name: "back"; type: "QQuickItem"; isPointer: true } + Property { name: "side"; type: "Side"; isReadonly: true } + Method { name: "retransformBack" } + } + Component { + file: "private/qquickpositioners_p.h" + name: "QQuickFlow" + prototype: "QQuickBasePositioner" + exports: [ + "QtQuick/Flow 2.0", + "QtQuick/Flow 2.1", + "QtQuick/Flow 2.11", + "QtQuick/Flow 2.4", + "QtQuick/Flow 2.6", + "QtQuick/Flow 2.7", + "QtQuick/Flow 2.9" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 6, 7, 9] + Enum { + name: "Flow" + values: ["LeftToRight", "TopToBottom"] + } + Property { name: "flow"; type: "Flow" } + Property { name: "layoutDirection"; type: "Qt::LayoutDirection" } + Property { name: "effectiveLayoutDirection"; type: "Qt::LayoutDirection"; isReadonly: true } + } + Component { + file: "private/qquickfocusscope_p.h" + name: "QQuickFocusScope" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/FocusScope 2.0", + "QtQuick/FocusScope 2.1", + "QtQuick/FocusScope 2.11", + "QtQuick/FocusScope 2.4", + "QtQuick/FocusScope 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + } + Component { + file: "private/qquickfontloader_p.h" + name: "QQuickFontLoader" + exports: ["QtQuick/FontLoader 2.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Status" + values: ["Null", "Ready", "Loading", "Error"] + } + Property { name: "source"; type: "QUrl" } + Property { name: "name"; type: "string" } + Property { name: "status"; type: "Status"; isReadonly: true } + Method { + name: "updateFontInfo" + Parameter { type: "string" } + Parameter { type: "QQuickFontLoader::Status" } + } + } + Component { + file: "private/qquickfontmetrics_p.h" + name: "QQuickFontMetrics" + exports: ["QtQuick/FontMetrics 2.4"] + exportMetaObjectRevisions: [4] + Property { name: "font"; type: "QFont" } + Property { name: "ascent"; type: "double"; isReadonly: true } + Property { name: "descent"; type: "double"; isReadonly: true } + Property { name: "height"; type: "double"; isReadonly: true } + Property { name: "leading"; type: "double"; isReadonly: true } + Property { name: "lineSpacing"; type: "double"; isReadonly: true } + Property { name: "minimumLeftBearing"; type: "double"; isReadonly: true } + Property { name: "minimumRightBearing"; type: "double"; isReadonly: true } + Property { name: "maximumCharacterWidth"; type: "double"; isReadonly: true } + Property { name: "xHeight"; type: "double"; isReadonly: true } + Property { name: "averageCharacterWidth"; type: "double"; isReadonly: true } + Property { name: "underlinePosition"; type: "double"; isReadonly: true } + Property { name: "overlinePosition"; type: "double"; isReadonly: true } + Property { name: "strikeOutPosition"; type: "double"; isReadonly: true } + Property { name: "lineWidth"; type: "double"; isReadonly: true } + Signal { + name: "fontChanged" + Parameter { name: "font"; type: "QFont" } + } + Method { + name: "advanceWidth" + type: "double" + Parameter { name: "text"; type: "string" } + } + Method { + name: "boundingRect" + type: "QRectF" + Parameter { name: "text"; type: "string" } + } + Method { + name: "tightBoundingRect" + type: "QRectF" + Parameter { name: "text"; type: "string" } + } + Method { + name: "elidedText" + type: "string" + Parameter { name: "text"; type: "string" } + Parameter { name: "mode"; type: "Qt::TextElideMode" } + Parameter { name: "width"; type: "double" } + Parameter { name: "flags"; type: "int" } + } + Method { + name: "elidedText" + type: "string" + Parameter { name: "text"; type: "string" } + Parameter { name: "mode"; type: "Qt::TextElideMode" } + Parameter { name: "width"; type: "double" } + } + } + Component { + file: "private/qquickvaluetypes_p.h" + name: "QQuickFontValueType" + exports: ["QtQuick/Font 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "FontWeight" + values: [ + "Thin", + "ExtraLight", + "Light", + "Normal", + "Medium", + "DemiBold", + "Bold", + "ExtraBold", + "Black" + ] + } + Enum { + name: "Capitalization" + values: [ + "MixedCase", + "AllUppercase", + "AllLowercase", + "SmallCaps", + "Capitalize" + ] + } + Enum { + name: "HintingPreference" + values: [ + "PreferDefaultHinting", + "PreferNoHinting", + "PreferVerticalHinting", + "PreferFullHinting" + ] + } + Property { name: "family"; type: "string" } + Property { name: "styleName"; type: "string" } + Property { name: "bold"; type: "bool" } + Property { name: "weight"; type: "FontWeight" } + Property { name: "italic"; type: "bool" } + Property { name: "underline"; type: "bool" } + Property { name: "overline"; type: "bool" } + Property { name: "strikeout"; type: "bool" } + Property { name: "pointSize"; type: "double" } + Property { name: "pixelSize"; type: "int" } + Property { name: "capitalization"; type: "Capitalization" } + Property { name: "letterSpacing"; type: "double" } + Property { name: "wordSpacing"; type: "double" } + Property { name: "hintingPreference"; type: "HintingPreference" } + Property { name: "kerning"; type: "bool" } + Property { name: "preferShaping"; type: "bool" } + Method { name: "toString"; type: "string" } + } + Component { + file: "private/qquickmultipointtoucharea_p.h" + name: "QQuickGrabGestureEvent" + exports: ["QtQuick/GestureEvent 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "touchPoints"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "dragThreshold"; type: "double"; isReadonly: true } + Method { name: "grab" } + } + Component { + file: "private/qquickrectangle_p.h" + name: "QQuickGradient" + defaultProperty: "stops" + exports: ["QtQuick/Gradient 2.0", "QtQuick/Gradient 2.12"] + exportMetaObjectRevisions: [0, 12] + Enum { + name: "Orientation" + values: ["Vertical", "Horizontal"] + } + Property { name: "stops"; type: "QQuickGradientStop"; isList: true; isReadonly: true } + Property { name: "orientation"; revision: 12; type: "Orientation" } + Signal { name: "updated" } + } + Component { + file: "private/qquickrectangle_p.h" + name: "QQuickGradientStop" + exports: ["QtQuick/GradientStop 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "position"; type: "double" } + Property { name: "color"; type: "QColor" } + } + Component { + file: "private/qquickgraphicsinfo_p.h" + name: "QQuickGraphicsInfo" + exports: ["QtQuick/GraphicsInfo 2.8"] + isCreatable: false + exportMetaObjectRevisions: [8] + attachedType: "QQuickGraphicsInfo" + Enum { + name: "GraphicsApi" + values: [ + "Unknown", + "Software", + "OpenGL", + "Direct3D12", + "OpenVG", + "OpenGLRhi", + "Direct3D11Rhi", + "VulkanRhi", + "MetalRhi", + "NullRhi" + ] + } + Enum { + name: "ShaderType" + values: ["UnknownShadingLanguage", "GLSL", "HLSL", "RhiShader"] + } + Enum { + name: "ShaderCompilationType" + values: ["RuntimeCompilation", "OfflineCompilation"] + } + Enum { + name: "ShaderSourceType" + values: [ + "ShaderSourceString", + "ShaderSourceFile", + "ShaderByteCode" + ] + } + Enum { + name: "OpenGLContextProfile" + values: [ + "OpenGLNoProfile", + "OpenGLCoreProfile", + "OpenGLCompatibilityProfile" + ] + } + Enum { + name: "RenderableType" + values: [ + "SurfaceFormatUnspecified", + "SurfaceFormatOpenGL", + "SurfaceFormatOpenGLES" + ] + } + Property { name: "api"; type: "GraphicsApi"; isReadonly: true } + Property { name: "shaderType"; type: "ShaderType"; isReadonly: true } + Property { name: "shaderCompilationType"; type: "ShaderCompilationType"; isReadonly: true } + Property { name: "shaderSourceType"; type: "ShaderSourceType"; isReadonly: true } + Property { name: "majorVersion"; type: "int"; isReadonly: true } + Property { name: "minorVersion"; type: "int"; isReadonly: true } + Property { name: "profile"; type: "OpenGLContextProfile"; isReadonly: true } + Property { name: "renderableType"; type: "RenderableType"; isReadonly: true } + Method { name: "updateInfo" } + Method { + name: "setWindow" + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + } + Component { + file: "private/qquickpositioners_p.h" + name: "QQuickGrid" + prototype: "QQuickBasePositioner" + exports: [ + "QtQuick/Grid 2.0", + "QtQuick/Grid 2.1", + "QtQuick/Grid 2.11", + "QtQuick/Grid 2.4", + "QtQuick/Grid 2.6", + "QtQuick/Grid 2.7", + "QtQuick/Grid 2.9" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 6, 7, 9] + Enum { + name: "Flow" + values: ["LeftToRight", "TopToBottom"] + } + Enum { + name: "HAlignment" + values: ["AlignLeft", "AlignRight", "AlignHCenter"] + } + Enum { + name: "VAlignment" + values: ["AlignTop", "AlignBottom", "AlignVCenter"] + } + Property { name: "rows"; type: "int" } + Property { name: "columns"; type: "int" } + Property { name: "rowSpacing"; type: "double" } + Property { name: "columnSpacing"; type: "double" } + Property { name: "flow"; type: "Flow" } + Property { name: "layoutDirection"; type: "Qt::LayoutDirection" } + Property { name: "effectiveLayoutDirection"; type: "Qt::LayoutDirection"; isReadonly: true } + Property { name: "horizontalItemAlignment"; revision: 1; type: "HAlignment" } + Property { + name: "effectiveHorizontalItemAlignment" + revision: 1 + type: "HAlignment" + isReadonly: true + } + Property { name: "verticalItemAlignment"; revision: 1; type: "VAlignment" } + Signal { + name: "horizontalAlignmentChanged" + revision: 1 + Parameter { name: "alignment"; type: "HAlignment" } + } + Signal { + name: "effectiveHorizontalAlignmentChanged" + revision: 1 + Parameter { name: "alignment"; type: "HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + revision: 1 + Parameter { name: "alignment"; type: "VAlignment" } + } + } + Component { + file: "private/qquickshadereffectmesh_p.h" + name: "QQuickGridMesh" + prototype: "QQuickShaderEffectMesh" + exports: ["QtQuick/GridMesh 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "resolution"; type: "QSize" } + } + Component { + file: "private/qquickgridview_p.h" + name: "QQuickGridView" + defaultProperty: "data" + prototype: "QQuickItemView" + exports: [ + "QtQuick/GridView 2.0", + "QtQuick/GridView 2.1", + "QtQuick/GridView 2.10", + "QtQuick/GridView 2.11", + "QtQuick/GridView 2.12", + "QtQuick/GridView 2.13", + "QtQuick/GridView 2.15", + "QtQuick/GridView 2.3", + "QtQuick/GridView 2.4", + "QtQuick/GridView 2.7", + "QtQuick/GridView 2.9" + ] + exportMetaObjectRevisions: [0, 1, 10, 11, 12, 13, 15, 3, 4, 7, 9] + attachedType: "QQuickGridViewAttached" + Enum { + name: "Flow" + values: ["FlowLeftToRight", "FlowTopToBottom"] + } + Enum { + name: "SnapMode" + values: ["NoSnap", "SnapToRow", "SnapOneRow"] + } + Property { name: "flow"; type: "Flow" } + Property { name: "cellWidth"; type: "double" } + Property { name: "cellHeight"; type: "double" } + Property { name: "snapMode"; type: "SnapMode" } + Signal { name: "highlightMoveDurationChanged" } + Method { name: "moveCurrentIndexUp" } + Method { name: "moveCurrentIndexDown" } + Method { name: "moveCurrentIndexLeft" } + Method { name: "moveCurrentIndexRight" } + } + Component { name: "QQuickGridViewAttached"; prototype: "QQuickItemViewAttached" } + Component { + file: "private/qquickhoverhandler_p.h" + name: "QQuickHoverHandler" + prototype: "QQuickSinglePointHandler" + exports: ["QtQuick/HoverHandler 2.12", "QtQuick/HoverHandler 2.15"] + exportMetaObjectRevisions: [12, 15] + Property { name: "hovered"; type: "bool"; isReadonly: true } + } + Component { + file: "private/qquickimage_p.h" + name: "QQuickImage" + prototype: "QQuickImageBase" + exports: [ + "QtQuick/Image 2.0", + "QtQuick/Image 2.1", + "QtQuick/Image 2.11", + "QtQuick/Image 2.14", + "QtQuick/Image 2.15", + "QtQuick/Image 2.3", + "QtQuick/Image 2.4", + "QtQuick/Image 2.5", + "QtQuick/Image 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 14, 15, 3, 4, 5, 7] + Enum { + name: "HAlignment" + values: ["AlignLeft", "AlignRight", "AlignHCenter"] + } + Enum { + name: "VAlignment" + values: ["AlignTop", "AlignBottom", "AlignVCenter"] + } + Enum { + name: "FillMode" + values: [ + "Stretch", + "PreserveAspectFit", + "PreserveAspectCrop", + "Tile", + "TileVertically", + "TileHorizontally", + "Pad" + ] + } + Property { name: "fillMode"; type: "FillMode" } + Property { name: "paintedWidth"; type: "double"; isReadonly: true } + Property { name: "paintedHeight"; type: "double"; isReadonly: true } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "mipmap"; revision: 3; type: "bool" } + Property { name: "autoTransform"; revision: 5; type: "bool" } + Property { name: "sourceClipRect"; revision: 15; type: "QRectF" } + Signal { name: "paintedGeometryChanged" } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "VAlignment" } + } + Signal { + name: "mipmapChanged" + revision: 3 + Parameter { type: "bool" } + } + Signal { name: "autoTransformChanged"; revision: 5 } + Method { name: "invalidateSceneGraph" } + } + Component { + file: "private/qquickimagebase_p.h" + name: "QQuickImageBase" + prototype: "QQuickImplicitSizeItem" + exports: ["QtQuick/ImageBase 2.14", "QtQuick/ImageBase 2.15"] + isCreatable: false + exportMetaObjectRevisions: [14, 15] + Enum { + name: "LoadPixmapOptions" + alias: "LoadPixmapOption" + isFlag: true + values: ["NoOption", "HandleDPR", "UseProviderOptions"] + } + Enum { + name: "Status" + values: ["Null", "Ready", "Loading", "Error"] + } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "source"; type: "QUrl" } + Property { name: "progress"; type: "double"; isReadonly: true } + Property { name: "asynchronous"; type: "bool" } + Property { name: "cache"; type: "bool" } + Property { name: "sourceSize"; type: "QSize" } + Property { name: "mirror"; type: "bool" } + Property { name: "currentFrame"; revision: 14; type: "int" } + Property { name: "frameCount"; revision: 14; type: "int"; isReadonly: true } + Property { name: "colorSpace"; revision: 15; type: "QColorSpace" } + Signal { + name: "sourceChanged" + Parameter { type: "QUrl" } + } + Signal { + name: "statusChanged" + Parameter { type: "QQuickImageBase::Status" } + } + Signal { + name: "progressChanged" + Parameter { name: "progress"; type: "double" } + } + Signal { name: "currentFrameChanged"; revision: 14 } + Signal { name: "frameCountChanged"; revision: 14 } + Signal { name: "sourceClipRectChanged"; revision: 15 } + Signal { name: "colorSpaceChanged"; revision: 15 } + Method { name: "requestFinished" } + Method { + name: "requestProgress" + Parameter { type: "qlonglong" } + Parameter { type: "qlonglong" } + } + } + Component { + file: "qquickitem.h" + name: "QQuickImplicitSizeItem" + defaultProperty: "data" + prototype: "QQuickItem" + Property { name: "implicitWidth"; type: "double"; isReadonly: true } + Property { name: "implicitHeight"; type: "double"; isReadonly: true } + } + Component { + file: "private/qquickvalidator_p.h" + name: "QQuickIntValidator" + exports: ["QtQuick/IntValidator 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "locale"; type: "string" } + Signal { name: "localeNameChanged" } + } + Component { + file: "qquickitem.h" + name: "QQuickItem" + defaultProperty: "data" + exports: [ + "QtQuick/Item 2.0", + "QtQuick/Item 2.1", + "QtQuick/Item 2.11", + "QtQuick/Item 2.4", + "QtQuick/Item 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "Flags" + alias: "Flag" + isFlag: true + values: [ + "ItemClipsChildrenToShape", + "ItemAcceptsInputMethod", + "ItemIsFocusScope", + "ItemHasContents", + "ItemAcceptsDrops" + ] + } + Enum { + name: "TransformOrigin" + values: [ + "TopLeft", + "Top", + "TopRight", + "Left", + "Center", + "Right", + "BottomLeft", + "Bottom", + "BottomRight" + ] + } + Property { name: "parent"; type: "QQuickItem"; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "resources"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "children"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "z"; type: "double" } + Property { name: "width"; type: "double" } + Property { name: "height"; type: "double" } + Property { name: "opacity"; type: "double" } + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "visibleChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "states"; type: "QQuickState"; isList: true; isReadonly: true } + Property { name: "transitions"; type: "QQuickTransition"; isList: true; isReadonly: true } + Property { name: "state"; type: "string" } + Property { name: "childrenRect"; type: "QRectF"; isReadonly: true } + Property { name: "anchors"; type: "QQuickAnchors"; isReadonly: true; isPointer: true } + Property { name: "left"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "right"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "horizontalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "top"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "bottom"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "verticalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baseline"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baselineOffset"; type: "double" } + Property { name: "clip"; type: "bool" } + Property { name: "focus"; type: "bool" } + Property { name: "activeFocus"; type: "bool"; isReadonly: true } + Property { name: "activeFocusOnTab"; revision: 1; type: "bool" } + Property { name: "rotation"; type: "double" } + Property { name: "scale"; type: "double" } + Property { name: "transformOrigin"; type: "TransformOrigin" } + Property { name: "transformOriginPoint"; type: "QPointF"; isReadonly: true } + Property { name: "transform"; type: "QQuickTransform"; isList: true; isReadonly: true } + Property { name: "smooth"; type: "bool" } + Property { name: "antialiasing"; type: "bool" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "containmentMask"; revision: 11; type: "QObject"; isPointer: true } + Property { name: "layer"; type: "QQuickItemLayer"; isReadonly: true; isPointer: true } + Signal { + name: "childrenRectChanged" + Parameter { type: "QRectF" } + } + Signal { + name: "baselineOffsetChanged" + Parameter { type: "double" } + } + Signal { + name: "stateChanged" + Parameter { type: "string" } + } + Signal { + name: "focusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusOnTabChanged" + revision: 1 + Parameter { type: "bool" } + } + Signal { + name: "parentChanged" + Parameter { type: "QQuickItem"; isPointer: true } + } + Signal { + name: "transformOriginChanged" + Parameter { type: "TransformOrigin" } + } + Signal { + name: "smoothChanged" + Parameter { type: "bool" } + } + Signal { + name: "antialiasingChanged" + Parameter { type: "bool" } + } + Signal { + name: "clipChanged" + Parameter { type: "bool" } + } + Signal { + name: "windowChanged" + revision: 1 + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Signal { name: "containmentMaskChanged"; revision: 11 } + Method { name: "update" } + Method { + name: "_q_resourceObjectDeleted" + Parameter { type: "QObject"; isPointer: true } + } + Method { + name: "_q_createJSWrapper" + type: "qulonglong" + Parameter { type: "QV4::ExecutionEngine"; isPointer: true } + } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + Parameter { name: "targetSize"; type: "QSize" } + } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + } + Method { + name: "contains" + type: "bool" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapFromItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapFromGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { name: "forceActiveFocus" } + Method { + name: "forceActiveFocus" + Parameter { name: "reason"; type: "Qt::FocusReason" } + } + Method { + name: "nextItemInFocusChain" + revision: 1 + type: "QQuickItem*" + Parameter { name: "forward"; type: "bool" } + } + Method { name: "nextItemInFocusChain"; revision: 1; type: "QQuickItem*" } + Method { + name: "childAt" + type: "QQuickItem*" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + file: "qquickitemgrabresult.h" + name: "QQuickItemGrabResult" + Property { name: "image"; type: "QImage"; isReadonly: true } + Property { name: "url"; type: "QUrl"; isReadonly: true } + Signal { name: "ready" } + Method { name: "setup" } + Method { name: "render" } + Method { + name: "saveToFile" + type: "bool" + Parameter { name: "fileName"; type: "string" } + } + Method { + name: "saveToFile" + type: "bool" + Parameter { name: "fileName"; type: "string" } + } + } + Component { + file: "private/qquickitem_p.h" + name: "QQuickItemLayer" + Property { name: "enabled"; type: "bool" } + Property { name: "textureSize"; type: "QSize" } + Property { name: "sourceRect"; type: "QRectF" } + Property { name: "mipmap"; type: "bool" } + Property { name: "smooth"; type: "bool" } + Property { name: "wrapMode"; type: "QQuickShaderEffectSource::WrapMode" } + Property { name: "format"; type: "QQuickShaderEffectSource::Format" } + Property { name: "samplerName"; type: "QByteArray" } + Property { name: "effect"; type: "QQmlComponent"; isPointer: true } + Property { name: "textureMirroring"; type: "QQuickShaderEffectSource::TextureMirroring" } + Property { name: "samples"; type: "int" } + Signal { + name: "enabledChanged" + Parameter { name: "enabled"; type: "bool" } + } + Signal { + name: "sizeChanged" + Parameter { name: "size"; type: "QSize" } + } + Signal { + name: "mipmapChanged" + Parameter { name: "mipmap"; type: "bool" } + } + Signal { + name: "wrapModeChanged" + Parameter { name: "mode"; type: "QQuickShaderEffectSource::WrapMode" } + } + Signal { + name: "nameChanged" + Parameter { name: "name"; type: "QByteArray" } + } + Signal { + name: "effectChanged" + Parameter { name: "component"; type: "QQmlComponent"; isPointer: true } + } + Signal { + name: "smoothChanged" + Parameter { name: "smooth"; type: "bool" } + } + Signal { + name: "formatChanged" + Parameter { name: "format"; type: "QQuickShaderEffectSource::Format" } + } + Signal { + name: "sourceRectChanged" + Parameter { name: "sourceRect"; type: "QRectF" } + } + Signal { + name: "textureMirroringChanged" + Parameter { name: "mirroring"; type: "QQuickShaderEffectSource::TextureMirroring" } + } + Signal { + name: "samplesChanged" + Parameter { name: "count"; type: "int" } + } + } + Component { + file: "private/qquickitemview_p.h" + name: "QQuickItemView" + defaultProperty: "flickableData" + prototype: "QQuickFlickable" + exports: [ + "QtQuick/ItemView 2.1", + "QtQuick/ItemView 2.10", + "QtQuick/ItemView 2.11", + "QtQuick/ItemView 2.12", + "QtQuick/ItemView 2.13", + "QtQuick/ItemView 2.15", + "QtQuick/ItemView 2.3", + "QtQuick/ItemView 2.4", + "QtQuick/ItemView 2.7", + "QtQuick/ItemView 2.9" + ] + isCreatable: false + exportMetaObjectRevisions: [1, 10, 11, 12, 13, 15, 3, 4, 7, 9] + Enum { + name: "LayoutDirection" + values: [ + "LeftToRight", + "RightToLeft", + "VerticalTopToBottom", + "VerticalBottomToTop" + ] + } + Enum { + name: "VerticalLayoutDirection" + values: ["TopToBottom", "BottomToTop"] + } + Enum { + name: "HighlightRangeMode" + values: ["NoHighlightRange", "ApplyRange", "StrictlyEnforceRange"] + } + Enum { + name: "PositionMode" + values: [ + "Beginning", + "Center", + "End", + "Visible", + "Contain", + "SnapPosition" + ] + } + Property { name: "model"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "currentIndex"; type: "int" } + Property { name: "currentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "keyNavigationWraps"; type: "bool" } + Property { name: "keyNavigationEnabled"; revision: 7; type: "bool" } + Property { name: "cacheBuffer"; type: "int" } + Property { name: "displayMarginBeginning"; revision: 3; type: "int" } + Property { name: "displayMarginEnd"; revision: 3; type: "int" } + Property { name: "layoutDirection"; type: "Qt::LayoutDirection" } + Property { name: "effectiveLayoutDirection"; type: "Qt::LayoutDirection"; isReadonly: true } + Property { name: "verticalLayoutDirection"; type: "VerticalLayoutDirection" } + Property { name: "header"; type: "QQmlComponent"; isPointer: true } + Property { name: "headerItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "footer"; type: "QQmlComponent"; isPointer: true } + Property { name: "footerItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "populate"; type: "QQuickTransition"; isPointer: true } + Property { name: "add"; type: "QQuickTransition"; isPointer: true } + Property { name: "addDisplaced"; type: "QQuickTransition"; isPointer: true } + Property { name: "move"; type: "QQuickTransition"; isPointer: true } + Property { name: "moveDisplaced"; type: "QQuickTransition"; isPointer: true } + Property { name: "remove"; type: "QQuickTransition"; isPointer: true } + Property { name: "removeDisplaced"; type: "QQuickTransition"; isPointer: true } + Property { name: "displaced"; type: "QQuickTransition"; isPointer: true } + Property { name: "highlight"; type: "QQmlComponent"; isPointer: true } + Property { name: "highlightItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "highlightFollowsCurrentItem"; type: "bool" } + Property { name: "highlightRangeMode"; type: "HighlightRangeMode" } + Property { name: "preferredHighlightBegin"; type: "double" } + Property { name: "preferredHighlightEnd"; type: "double" } + Property { name: "highlightMoveDuration"; type: "int" } + Property { name: "reuseItems"; revision: 15; type: "bool" } + Signal { name: "keyNavigationEnabledChanged"; revision: 7 } + Signal { name: "populateTransitionChanged" } + Signal { name: "addTransitionChanged" } + Signal { name: "addDisplacedTransitionChanged" } + Signal { name: "moveTransitionChanged" } + Signal { name: "moveDisplacedTransitionChanged" } + Signal { name: "removeTransitionChanged" } + Signal { name: "removeDisplacedTransitionChanged" } + Signal { name: "displacedTransitionChanged" } + Signal { name: "reuseItemsChanged"; revision: 15 } + Method { name: "destroyRemoved" } + Method { + name: "createdItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { + name: "initItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { + name: "modelUpdated" + Parameter { name: "changeSet"; type: "QQmlChangeSet" } + Parameter { name: "reset"; type: "bool" } + } + Method { + name: "destroyingItem" + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { + name: "onItemPooled" + revision: 15 + Parameter { name: "modelIndex"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Method { + name: "onItemReused" + revision: 15 + Parameter { name: "modelIndex"; type: "int" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Method { name: "animStopped" } + Method { name: "trackedPositionChanged" } + Method { + name: "positionViewAtIndex" + Parameter { name: "index"; type: "int" } + Parameter { name: "mode"; type: "int" } + } + Method { + name: "indexAt" + type: "int" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "itemAt" + type: "QQuickItem*" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "itemAtIndex" + revision: 13 + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + Method { name: "positionViewAtBeginning" } + Method { name: "positionViewAtEnd" } + Method { name: "forceLayout"; revision: 1 } + } + Component { + name: "QQuickItemViewAttached" + Property { name: "view"; type: "QQuickItemView"; isReadonly: true; isPointer: true } + Property { name: "isCurrentItem"; type: "bool"; isReadonly: true } + Property { name: "delayRemove"; type: "bool" } + Property { name: "section"; type: "string"; isReadonly: true } + Property { name: "previousSection"; type: "string"; isReadonly: true } + Property { name: "nextSection"; type: "string"; isReadonly: true } + Signal { name: "currentItemChanged" } + Signal { name: "add" } + Signal { name: "remove" } + Signal { name: "prevSectionChanged" } + Signal { name: "pooled" } + Signal { name: "reused" } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickKeyEvent" + Property { name: "key"; type: "int"; isReadonly: true } + Property { name: "text"; type: "string"; isReadonly: true } + Property { name: "modifiers"; type: "int"; isReadonly: true } + Property { name: "isAutoRepeat"; type: "bool"; isReadonly: true } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "nativeScanCode"; type: "uint"; isReadonly: true } + Property { name: "accepted"; type: "bool" } + Method { + name: "matches" + revision: 2 + type: "bool" + Parameter { name: "key"; type: "QKeySequence::StandardKey" } + } + } + Component { + file: "private/qquickitem_p.h" + name: "QQuickKeyNavigationAttached" + exports: ["QtQuick/KeyNavigation 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickKeyNavigationAttached" + Enum { + name: "Priority" + values: ["BeforeItem", "AfterItem"] + } + Property { name: "left"; type: "QQuickItem"; isPointer: true } + Property { name: "right"; type: "QQuickItem"; isPointer: true } + Property { name: "up"; type: "QQuickItem"; isPointer: true } + Property { name: "down"; type: "QQuickItem"; isPointer: true } + Property { name: "tab"; type: "QQuickItem"; isPointer: true } + Property { name: "backtab"; type: "QQuickItem"; isPointer: true } + Property { name: "priority"; type: "Priority" } + } + Component { + file: "private/qquickitem_p.h" + name: "QQuickKeysAttached" + exports: ["QtQuick/Keys 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickKeysAttached" + Enum { + name: "Priority" + values: ["BeforeItem", "AfterItem"] + } + Property { name: "enabled"; type: "bool" } + Property { name: "forwardTo"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "priority"; type: "Priority" } + Signal { + name: "pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "released" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "shortcutOverride" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit0Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit1Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit2Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit3Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit4Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit5Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit6Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit7Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit8Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "digit9Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "leftPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "rightPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "upPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "downPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "tabPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "backtabPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "asteriskPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "numberSignPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "escapePressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "returnPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "enterPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "deletePressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "spacePressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "backPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "cancelPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "selectPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "yesPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "noPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "context1Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "context2Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "context3Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "context4Pressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "callPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "hangupPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "flipPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "menuPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "volumeUpPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + Signal { + name: "volumeDownPressed" + Parameter { name: "event"; type: "QQuickKeyEvent"; isPointer: true } + } + } + Component { + file: "private/qquickitem_p.h" + name: "QQuickLayoutMirroringAttached" + exports: ["QtQuick/LayoutMirroring 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickLayoutMirroringAttached" + Property { name: "enabled"; type: "bool" } + Property { name: "childrenInherit"; type: "bool" } + } + Component { + file: "private/qquicklistview_p.h" + name: "QQuickListView" + defaultProperty: "data" + prototype: "QQuickItemView" + exports: [ + "QtQuick/ListView 2.0", + "QtQuick/ListView 2.1", + "QtQuick/ListView 2.10", + "QtQuick/ListView 2.11", + "QtQuick/ListView 2.12", + "QtQuick/ListView 2.13", + "QtQuick/ListView 2.15", + "QtQuick/ListView 2.3", + "QtQuick/ListView 2.4", + "QtQuick/ListView 2.7", + "QtQuick/ListView 2.9" + ] + exportMetaObjectRevisions: [0, 1, 10, 11, 12, 13, 15, 3, 4, 7, 9] + attachedType: "QQuickListViewAttached" + Enum { + name: "Orientation" + values: ["Horizontal", "Vertical"] + } + Enum { + name: "SnapMode" + values: ["NoSnap", "SnapToItem", "SnapOneItem"] + } + Enum { + name: "HeaderPositioning" + values: ["InlineHeader", "OverlayHeader", "PullBackHeader"] + } + Enum { + name: "FooterPositioning" + values: ["InlineFooter", "OverlayFooter", "PullBackFooter"] + } + Property { name: "highlightMoveVelocity"; type: "double" } + Property { name: "highlightResizeVelocity"; type: "double" } + Property { name: "highlightResizeDuration"; type: "int" } + Property { name: "spacing"; type: "double" } + Property { name: "orientation"; type: "Orientation" } + Property { name: "section"; type: "QQuickViewSection"; isReadonly: true; isPointer: true } + Property { name: "currentSection"; type: "string"; isReadonly: true } + Property { name: "snapMode"; type: "SnapMode" } + Property { name: "headerPositioning"; revision: 4; type: "HeaderPositioning" } + Property { name: "footerPositioning"; revision: 4; type: "FooterPositioning" } + Signal { name: "headerPositioningChanged"; revision: 4 } + Signal { name: "footerPositioningChanged"; revision: 4 } + Method { name: "incrementCurrentIndex" } + Method { name: "decrementCurrentIndex" } + } + Component { name: "QQuickListViewAttached"; prototype: "QQuickItemViewAttached" } + Component { + file: "private/qquickloader_p.h" + name: "QQuickLoader" + prototype: "QQuickImplicitSizeItem" + exports: [ + "QtQuick/Loader 2.0", + "QtQuick/Loader 2.1", + "QtQuick/Loader 2.11", + "QtQuick/Loader 2.4", + "QtQuick/Loader 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "Status" + values: ["Null", "Ready", "Loading", "Error"] + } + Property { name: "active"; type: "bool" } + Property { name: "source"; type: "QUrl" } + Property { name: "sourceComponent"; type: "QQmlComponent"; isPointer: true } + Property { name: "item"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "progress"; type: "double"; isReadonly: true } + Property { name: "asynchronous"; type: "bool" } + Signal { name: "loaded" } + Method { name: "_q_sourceLoaded" } + Method { name: "_q_updateSize" } + Method { + name: "setSource" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + } + Component { + file: "private/qquicktranslate_p.h" + name: "QQuickMatrix4x4" + prototype: "QQuickTransform" + exports: ["QtQuick/Matrix4x4 2.3"] + exportMetaObjectRevisions: [3] + Property { name: "matrix"; type: "QMatrix4x4" } + } + Component { + file: "private/qquickmousearea_p.h" + name: "QQuickMouseArea" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/MouseArea 2.0", + "QtQuick/MouseArea 2.1", + "QtQuick/MouseArea 2.11", + "QtQuick/MouseArea 2.4", + "QtQuick/MouseArea 2.5", + "QtQuick/MouseArea 2.7", + "QtQuick/MouseArea 2.9" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 5, 7, 9] + Property { name: "mouseX"; type: "double"; isReadonly: true } + Property { name: "mouseY"; type: "double"; isReadonly: true } + Property { name: "containsMouse"; type: "bool"; isReadonly: true } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "enabled"; type: "bool" } + Property { name: "scrollGestureEnabled"; revision: 5; type: "bool" } + Property { name: "pressedButtons"; type: "Qt::MouseButtons"; isReadonly: true } + Property { name: "acceptedButtons"; type: "Qt::MouseButtons" } + Property { name: "hoverEnabled"; type: "bool" } + Property { name: "drag"; type: "QQuickDrag"; isReadonly: true; isPointer: true } + Property { name: "preventStealing"; type: "bool" } + Property { name: "propagateComposedEvents"; type: "bool" } + Property { name: "cursorShape"; type: "Qt::CursorShape" } + Property { name: "containsPress"; revision: 4; type: "bool"; isReadonly: true } + Property { name: "pressAndHoldInterval"; revision: 9; type: "int" } + Signal { name: "hoveredChanged" } + Signal { name: "scrollGestureEnabledChanged"; revision: 5 } + Signal { + name: "positionChanged" + Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "mouseXChanged" + Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "mouseYChanged" + Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "pressed" + Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "pressAndHold" + Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "released" + Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "clicked" + Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "doubleClicked" + Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "wheel" + Parameter { name: "wheel"; type: "QQuickWheelEvent"; isPointer: true } + } + Signal { name: "entered" } + Signal { name: "exited" } + Signal { name: "canceled" } + Signal { name: "containsPressChanged"; revision: 4 } + Signal { name: "pressAndHoldIntervalChanged"; revision: 9 } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickMouseEvent" + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "button"; type: "int"; isReadonly: true } + Property { name: "buttons"; type: "int"; isReadonly: true } + Property { name: "modifiers"; type: "int"; isReadonly: true } + Property { name: "source"; revision: 7; type: "int"; isReadonly: true } + Property { name: "wasHeld"; type: "bool"; isReadonly: true } + Property { name: "isClick"; type: "bool"; isReadonly: true } + Property { name: "accepted"; type: "bool" } + Property { name: "flags"; revision: 11; type: "int"; isReadonly: true } + } + Component { + file: "private/qquickpointerhandler_p.h" + name: "QQuickMultiPointHandler" + prototype: "QQuickPointerDeviceHandler" + Property { name: "minimumPointCount"; type: "int" } + Property { name: "maximumPointCount"; type: "int" } + Property { name: "centroid"; type: "QQuickHandlerPoint"; isReadonly: true } + } + Component { + file: "private/qquickmultipointtoucharea_p.h" + name: "QQuickMultiPointTouchArea" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/MultiPointTouchArea 2.0", + "QtQuick/MultiPointTouchArea 2.1", + "QtQuick/MultiPointTouchArea 2.11", + "QtQuick/MultiPointTouchArea 2.4", + "QtQuick/MultiPointTouchArea 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "touchPoints"; type: "QQuickTouchPoint"; isList: true; isReadonly: true } + Property { name: "minimumTouchPoints"; type: "int" } + Property { name: "maximumTouchPoints"; type: "int" } + Property { name: "mouseEnabled"; type: "bool" } + Signal { + name: "pressed" + Parameter { name: "touchPoints"; type: "QList" } + } + Signal { + name: "updated" + Parameter { name: "touchPoints"; type: "QList" } + } + Signal { + name: "released" + Parameter { name: "touchPoints"; type: "QList" } + } + Signal { + name: "canceled" + Parameter { name: "touchPoints"; type: "QList" } + } + Signal { + name: "gestureStarted" + Parameter { name: "gesture"; type: "QQuickGrabGestureEvent"; isPointer: true } + } + Signal { + name: "touchUpdated" + Parameter { name: "touchPoints"; type: "QList" } + } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickNumberAnimation" + prototype: "QQuickPropertyAnimation" + exports: [ + "QtQuick/NumberAnimation 2.0", + "QtQuick/NumberAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "from"; type: "double" } + Property { name: "to"; type: "double" } + } + Component { + file: "private/qquickanimator_p.h" + name: "QQuickOpacityAnimator" + prototype: "QQuickAnimator" + exports: [ + "QtQuick/OpacityAnimator 2.12", + "QtQuick/OpacityAnimator 2.2" + ] + exportMetaObjectRevisions: [12, 2] + } + Component { + file: "private/qquickopenglinfo_p.h" + name: "QQuickOpenGLInfo" + exports: ["QtQuick/OpenGLInfo 2.4"] + isCreatable: false + exportMetaObjectRevisions: [4] + attachedType: "QQuickOpenGLInfo" + Enum { + name: "ContextProfile" + values: ["NoProfile", "CoreProfile", "CompatibilityProfile"] + } + Enum { + name: "RenderableType" + values: ["Unspecified", "OpenGL", "OpenGLES"] + } + Property { name: "majorVersion"; type: "int"; isReadonly: true } + Property { name: "minorVersion"; type: "int"; isReadonly: true } + Property { name: "profile"; type: "ContextProfile"; isReadonly: true } + Property { name: "renderableType"; type: "RenderableType"; isReadonly: true } + Method { name: "updateFormat" } + Method { + name: "setWindow" + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + } + Component { + file: "qquickpainteditem.h" + name: "QQuickPaintedItem" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/PaintedItem 2.0", + "QtQuick/PaintedItem 2.1", + "QtQuick/PaintedItem 2.11", + "QtQuick/PaintedItem 2.4", + "QtQuick/PaintedItem 2.7" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "RenderTarget" + values: [ + "Image", + "FramebufferObject", + "InvertedYFramebufferObject" + ] + } + Enum { + name: "PerformanceHints" + alias: "PerformanceHint" + isFlag: true + values: ["FastFBOResizing"] + } + Property { name: "contentsSize"; type: "QSize" } + Property { name: "fillColor"; type: "QColor" } + Property { name: "contentsScale"; type: "double" } + Property { name: "renderTarget"; type: "RenderTarget" } + Property { name: "textureSize"; type: "QSize" } + Method { name: "invalidateSceneGraph" } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickParallelAnimation" + defaultProperty: "animations" + prototype: "QQuickAnimationGroup" + exports: [ + "QtQuick/ParallelAnimation 2.0", + "QtQuick/ParallelAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + } + Component { + file: "private/qquickitemanimation_p.h" + name: "QQuickParentAnimation" + defaultProperty: "animations" + prototype: "QQuickAnimationGroup" + exports: [ + "QtQuick/ParentAnimation 2.0", + "QtQuick/ParentAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "target"; type: "QQuickItem"; isPointer: true } + Property { name: "newParent"; type: "QQuickItem"; isPointer: true } + Property { name: "via"; type: "QQuickItem"; isPointer: true } + } + Component { + file: "private/qquickstateoperations_p.h" + name: "QQuickParentChange" + prototype: "QQuickStateOperation" + exports: ["QtQuick/ParentChange 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "target"; type: "QQuickItem"; isPointer: true } + Property { name: "parent"; type: "QQuickItem"; isPointer: true } + Property { name: "x"; type: "QQmlScriptString" } + Property { name: "y"; type: "QQmlScriptString" } + Property { name: "width"; type: "QQmlScriptString" } + Property { name: "height"; type: "QQmlScriptString" } + Property { name: "scale"; type: "QQmlScriptString" } + Property { name: "rotation"; type: "QQmlScriptString" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPath" + defaultProperty: "pathElements" + exports: ["QtQuick/Path 2.0", "QtQuick/Path 2.14"] + exportMetaObjectRevisions: [0, 14] + Property { name: "pathElements"; type: "QQuickPathElement"; isList: true; isReadonly: true } + Property { name: "startX"; type: "double" } + Property { name: "startY"; type: "double" } + Property { name: "closed"; type: "bool"; isReadonly: true } + Property { name: "scale"; revision: 14; type: "QSizeF" } + Signal { name: "changed" } + Signal { name: "scaleChanged"; revision: 14 } + Method { name: "processPath" } + Method { + name: "pointAtPercent" + revision: 14 + type: "QPointF" + Parameter { name: "t"; type: "double" } + } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathAngleArc" + prototype: "QQuickCurve" + exports: ["QtQuick/PathAngleArc 2.11"] + exportMetaObjectRevisions: [11] + Property { name: "centerX"; type: "double" } + Property { name: "centerY"; type: "double" } + Property { name: "radiusX"; type: "double" } + Property { name: "radiusY"; type: "double" } + Property { name: "startAngle"; type: "double" } + Property { name: "sweepAngle"; type: "double" } + Property { name: "moveToStart"; type: "bool" } + } + Component { + file: "private/qquickitemanimation_p.h" + name: "QQuickPathAnimation" + prototype: "QQuickAbstractAnimation" + exports: ["QtQuick/PathAnimation 2.0", "QtQuick/PathAnimation 2.12"] + exportMetaObjectRevisions: [0, 12] + Enum { + name: "Orientation" + values: [ + "Fixed", + "RightFirst", + "LeftFirst", + "BottomFirst", + "TopFirst" + ] + } + Property { name: "duration"; type: "int" } + Property { name: "easing"; type: "QEasingCurve" } + Property { name: "path"; type: "QQuickPath"; isPointer: true } + Property { name: "target"; type: "QQuickItem"; isPointer: true } + Property { name: "orientation"; type: "Orientation" } + Property { name: "anchorPoint"; type: "QPointF" } + Property { name: "orientationEntryDuration"; type: "int" } + Property { name: "orientationExitDuration"; type: "int" } + Property { name: "endRotation"; type: "double" } + Signal { + name: "durationChanged" + Parameter { type: "int" } + } + Signal { + name: "easingChanged" + Parameter { type: "QEasingCurve" } + } + Signal { + name: "orientationChanged" + Parameter { type: "Orientation" } + } + Signal { + name: "anchorPointChanged" + Parameter { type: "QPointF" } + } + Signal { + name: "orientationEntryDurationChanged" + Parameter { type: "double" } + } + Signal { + name: "orientationExitDurationChanged" + Parameter { type: "double" } + } + Signal { + name: "endRotationChanged" + Parameter { type: "double" } + } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathArc" + prototype: "QQuickCurve" + exports: ["QtQuick/PathArc 2.0", "QtQuick/PathArc 2.9"] + exportMetaObjectRevisions: [0, 9] + Enum { + name: "ArcDirection" + values: ["Clockwise", "Counterclockwise"] + } + Property { name: "radiusX"; type: "double" } + Property { name: "radiusY"; type: "double" } + Property { name: "useLargeArc"; type: "bool" } + Property { name: "direction"; type: "ArcDirection" } + Property { name: "xAxisRotation"; revision: 9; type: "double" } + Signal { name: "xAxisRotationChanged"; revision: 9 } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathAttribute" + prototype: "QQuickPathElement" + exports: ["QtQuick/PathAttribute 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "name"; type: "string" } + Property { name: "value"; type: "double" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathCatmullRomCurve" + prototype: "QQuickCurve" + exports: ["QtQuick/PathCurve 2.0"] + exportMetaObjectRevisions: [0] + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathCubic" + prototype: "QQuickCurve" + exports: ["QtQuick/PathCubic 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "control1X"; type: "double" } + Property { name: "control1Y"; type: "double" } + Property { name: "control2X"; type: "double" } + Property { name: "control2Y"; type: "double" } + Property { name: "relativeControl1X"; type: "double" } + Property { name: "relativeControl1Y"; type: "double" } + Property { name: "relativeControl2X"; type: "double" } + Property { name: "relativeControl2Y"; type: "double" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathElement" + Signal { name: "changed" } + } + Component { + file: "private/qquickpathinterpolator_p.h" + name: "QQuickPathInterpolator" + exports: ["QtQuick/PathInterpolator 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "path"; type: "QQuickPath"; isPointer: true } + Property { name: "progress"; type: "double" } + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "angle"; type: "double"; isReadonly: true } + Method { name: "_q_pathUpdated" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathLine" + prototype: "QQuickCurve" + exports: ["QtQuick/PathLine 2.0"] + exportMetaObjectRevisions: [0] + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathMove" + prototype: "QQuickCurve" + exports: ["QtQuick/PathMove 2.9"] + exportMetaObjectRevisions: [9] + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathMultiline" + prototype: "QQuickCurve" + exports: ["QtQuick/PathMultiline 2.14"] + exportMetaObjectRevisions: [14] + Property { name: "start"; type: "QPointF"; isReadonly: true } + Property { name: "paths"; type: "QVariant" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathPercent" + prototype: "QQuickPathElement" + exports: ["QtQuick/PathPercent 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "value"; type: "double" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathPolyline" + prototype: "QQuickCurve" + exports: ["QtQuick/PathPolyline 2.14"] + exportMetaObjectRevisions: [14] + Property { name: "start"; type: "QPointF"; isReadonly: true } + Property { name: "path"; type: "QVariant" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathQuad" + prototype: "QQuickCurve" + exports: ["QtQuick/PathQuad 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "controlX"; type: "double" } + Property { name: "controlY"; type: "double" } + Property { name: "relativeControlX"; type: "double" } + Property { name: "relativeControlY"; type: "double" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathSvg" + prototype: "QQuickCurve" + exports: ["QtQuick/PathSvg 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "path"; type: "string" } + } + Component { + file: "private/qquickpath_p.h" + name: "QQuickPathText" + prototype: "QQuickPathElement" + exports: ["QtQuick/PathText 2.15"] + exportMetaObjectRevisions: [15] + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "width"; type: "double"; isReadonly: true } + Property { name: "height"; type: "double"; isReadonly: true } + Property { name: "text"; type: "string" } + Property { name: "font"; type: "QFont" } + Method { name: "invalidate" } + } + Component { + file: "private/qquickpathview_p.h" + name: "QQuickPathView" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/PathView 2.0", + "QtQuick/PathView 2.1", + "QtQuick/PathView 2.11", + "QtQuick/PathView 2.13", + "QtQuick/PathView 2.4", + "QtQuick/PathView 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 13, 4, 7] + attachedType: "QQuickPathViewAttached" + Enum { + name: "HighlightRangeMode" + values: ["NoHighlightRange", "ApplyRange", "StrictlyEnforceRange"] + } + Enum { + name: "SnapMode" + values: ["NoSnap", "SnapToItem", "SnapOneItem"] + } + Enum { + name: "MovementDirection" + values: ["Shortest", "Negative", "Positive"] + } + Enum { + name: "PositionMode" + values: ["Beginning", "Center", "End", "Contain", "SnapPosition"] + } + Property { name: "model"; type: "QVariant" } + Property { name: "path"; type: "QQuickPath"; isPointer: true } + Property { name: "currentIndex"; type: "int" } + Property { name: "currentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "offset"; type: "double" } + Property { name: "highlight"; type: "QQmlComponent"; isPointer: true } + Property { name: "highlightItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "preferredHighlightBegin"; type: "double" } + Property { name: "preferredHighlightEnd"; type: "double" } + Property { name: "highlightRangeMode"; type: "HighlightRangeMode" } + Property { name: "highlightMoveDuration"; type: "int" } + Property { name: "dragMargin"; type: "double" } + Property { name: "maximumFlickVelocity"; type: "double" } + Property { name: "flickDeceleration"; type: "double" } + Property { name: "interactive"; type: "bool" } + Property { name: "moving"; type: "bool"; isReadonly: true } + Property { name: "flicking"; type: "bool"; isReadonly: true } + Property { name: "dragging"; type: "bool"; isReadonly: true } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "pathItemCount"; type: "int" } + Property { name: "snapMode"; type: "SnapMode" } + Property { name: "movementDirection"; revision: 7; type: "MovementDirection" } + Property { name: "cacheItemCount"; type: "int" } + Signal { name: "snapPositionChanged" } + Signal { name: "movementStarted" } + Signal { name: "movementEnded" } + Signal { name: "movementDirectionChanged"; revision: 7 } + Signal { name: "flickStarted" } + Signal { name: "flickEnded" } + Signal { name: "dragStarted" } + Signal { name: "dragEnded" } + Method { name: "incrementCurrentIndex" } + Method { name: "decrementCurrentIndex" } + Method { name: "refill" } + Method { name: "ticked" } + Method { name: "movementEnding" } + Method { + name: "modelUpdated" + Parameter { name: "changeSet"; type: "QQmlChangeSet" } + Parameter { name: "reset"; type: "bool" } + } + Method { + name: "createdItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { + name: "initItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { + name: "destroyingItem" + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { name: "pathUpdated" } + Method { + name: "positionViewAtIndex" + Parameter { name: "index"; type: "int" } + Parameter { name: "mode"; type: "int" } + } + Method { + name: "indexAt" + type: "int" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "itemAt" + type: "QQuickItem*" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "itemAtIndex" + revision: 13 + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + } + Component { + name: "QQuickPathViewAttached" + Property { name: "view"; type: "QQuickPathView"; isReadonly: true; isPointer: true } + Property { name: "isCurrentItem"; type: "bool"; isReadonly: true } + Property { name: "onPath"; type: "bool"; isReadonly: true } + Signal { name: "currentItemChanged" } + Signal { name: "pathChanged" } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickPauseAnimation" + prototype: "QQuickAbstractAnimation" + exports: ["QtQuick/PauseAnimation 2.0", "QtQuick/PauseAnimation 2.12"] + exportMetaObjectRevisions: [0, 12] + Property { name: "duration"; type: "int" } + Signal { + name: "durationChanged" + Parameter { type: "int" } + } + } + Component { + file: "private/qquickrectangle_p.h" + name: "QQuickPen" + Property { name: "width"; type: "double" } + Property { name: "color"; type: "QColor" } + Property { name: "pixelAligned"; type: "bool" } + Signal { name: "penChanged" } + } + Component { + file: "private/qquickpincharea_p.h" + name: "QQuickPinch" + exports: ["QtQuick/Pinch 2.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Axis" + values: ["NoDrag", "XAxis", "YAxis", "XAndYAxis", "XandYAxis"] + } + Property { name: "target"; type: "QQuickItem"; isPointer: true } + Property { name: "minimumScale"; type: "double" } + Property { name: "maximumScale"; type: "double" } + Property { name: "minimumRotation"; type: "double" } + Property { name: "maximumRotation"; type: "double" } + Property { name: "dragAxis"; type: "Axis" } + Property { name: "minimumX"; type: "double" } + Property { name: "maximumX"; type: "double" } + Property { name: "minimumY"; type: "double" } + Property { name: "maximumY"; type: "double" } + Property { name: "active"; type: "bool"; isReadonly: true } + } + Component { + file: "private/qquickpincharea_p.h" + name: "QQuickPinchArea" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/PinchArea 2.0", + "QtQuick/PinchArea 2.1", + "QtQuick/PinchArea 2.11", + "QtQuick/PinchArea 2.4", + "QtQuick/PinchArea 2.5", + "QtQuick/PinchArea 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 5, 7] + Property { name: "enabled"; type: "bool" } + Property { name: "pinch"; type: "QQuickPinch"; isReadonly: true; isPointer: true } + Signal { + name: "pinchStarted" + Parameter { name: "pinch"; type: "QQuickPinchEvent"; isPointer: true } + } + Signal { + name: "pinchUpdated" + Parameter { name: "pinch"; type: "QQuickPinchEvent"; isPointer: true } + } + Signal { + name: "pinchFinished" + Parameter { name: "pinch"; type: "QQuickPinchEvent"; isPointer: true } + } + Signal { + name: "smartZoom" + revision: 5 + Parameter { name: "pinch"; type: "QQuickPinchEvent"; isPointer: true } + } + } + Component { + file: "private/qquickpincharea_p.h" + name: "QQuickPinchEvent" + Property { name: "center"; type: "QPointF"; isReadonly: true } + Property { name: "startCenter"; type: "QPointF"; isReadonly: true } + Property { name: "previousCenter"; type: "QPointF"; isReadonly: true } + Property { name: "scale"; type: "double"; isReadonly: true } + Property { name: "previousScale"; type: "double"; isReadonly: true } + Property { name: "angle"; type: "double"; isReadonly: true } + Property { name: "previousAngle"; type: "double"; isReadonly: true } + Property { name: "rotation"; type: "double"; isReadonly: true } + Property { name: "point1"; type: "QPointF"; isReadonly: true } + Property { name: "startPoint1"; type: "QPointF"; isReadonly: true } + Property { name: "point2"; type: "QPointF"; isReadonly: true } + Property { name: "startPoint2"; type: "QPointF"; isReadonly: true } + Property { name: "pointCount"; type: "int"; isReadonly: true } + Property { name: "accepted"; type: "bool" } + } + Component { + file: "private/qquickpinchhandler_p.h" + name: "QQuickPinchHandler" + prototype: "QQuickMultiPointHandler" + exports: ["QtQuick/PinchHandler 2.12", "QtQuick/PinchHandler 2.15"] + exportMetaObjectRevisions: [12, 15] + Property { name: "minimumScale"; type: "double" } + Property { name: "maximumScale"; type: "double" } + Property { name: "minimumRotation"; type: "double" } + Property { name: "maximumRotation"; type: "double" } + Property { name: "scale"; type: "double"; isReadonly: true } + Property { name: "activeScale"; type: "double"; isReadonly: true } + Property { name: "rotation"; type: "double"; isReadonly: true } + Property { name: "translation"; type: "QVector2D"; isReadonly: true } + Property { name: "minimumX"; type: "double" } + Property { name: "maximumX"; type: "double" } + Property { name: "minimumY"; type: "double" } + Property { name: "maximumY"; type: "double" } + Property { name: "xAxis"; type: "QQuickDragAxis"; isReadonly: true; isPointer: true } + Property { name: "yAxis"; type: "QQuickDragAxis"; isReadonly: true; isPointer: true } + Signal { name: "updated" } + } + Component { + file: "private/qquickpointhandler_p.h" + name: "QQuickPointHandler" + prototype: "QQuickSinglePointHandler" + exports: ["QtQuick/PointHandler 2.12", "QtQuick/PointHandler 2.15"] + exportMetaObjectRevisions: [12, 15] + Property { name: "translation"; type: "QVector2D"; isReadonly: true } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickPointerDevice" + exports: ["QtQuick/PointerDevice 2.12"] + isCreatable: false + exportMetaObjectRevisions: [12] + Enum { + name: "DeviceTypes" + alias: "DeviceType" + isFlag: true + values: [ + "UnknownDevice", + "Mouse", + "TouchScreen", + "TouchPad", + "Puck", + "Stylus", + "Airbrush", + "AllDevices" + ] + } + Enum { + name: "PointerTypes" + alias: "PointerType" + isFlag: true + values: [ + "GenericPointer", + "Finger", + "Pen", + "Eraser", + "Cursor", + "AllPointerTypes" + ] + } + Enum { + name: "Capabilities" + alias: "CapabilityFlag" + isFlag: true + values: [ + "Position", + "Area", + "Pressure", + "Velocity", + "MouseEmulation", + "Scroll", + "Hover", + "Rotation", + "XTilt", + "YTilt" + ] + } + Property { name: "type"; type: "DeviceType"; isReadonly: true } + Property { name: "pointerType"; type: "PointerType"; isReadonly: true } + Property { name: "capabilities"; type: "Capabilities"; isReadonly: true } + Property { name: "maximumTouchPoints"; type: "int"; isReadonly: true } + Property { name: "buttonCount"; type: "int"; isReadonly: true } + Property { name: "name"; type: "string"; isReadonly: true } + Property { name: "uniqueId"; type: "QPointingDeviceUniqueId"; isReadonly: true } + } + Component { + file: "private/qquickpointerhandler_p.h" + name: "QQuickPointerDeviceHandler" + prototype: "QQuickPointerHandler" + Property { name: "acceptedDevices"; type: "QQuickPointerDevice::DeviceTypes" } + Property { name: "acceptedPointerTypes"; type: "QQuickPointerDevice::PointerTypes" } + Property { name: "acceptedButtons"; type: "Qt::MouseButtons" } + Property { name: "acceptedModifiers"; type: "Qt::KeyboardModifiers" } + Method { + name: "setAcceptedDevices" + Parameter { name: "acceptedDevices"; type: "QQuickPointerDevice::DeviceTypes" } + } + Method { + name: "setAcceptedPointerTypes" + Parameter { name: "acceptedPointerTypes"; type: "QQuickPointerDevice::PointerTypes" } + } + Method { + name: "setAcceptedButtons" + Parameter { name: "buttons"; type: "Qt::MouseButtons" } + } + Method { + name: "setAcceptedModifiers" + Parameter { name: "acceptedModifiers"; type: "Qt::KeyboardModifiers" } + } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickPointerEvent" + exports: ["QtQuick/PointerEvent 2.12"] + isCreatable: false + exportMetaObjectRevisions: [12] + Property { name: "device"; type: "QQuickPointerDevice"; isReadonly: true; isPointer: true } + Property { name: "modifiers"; type: "Qt::KeyboardModifiers"; isReadonly: true } + Property { name: "button"; type: "Qt::MouseButtons"; isReadonly: true } + Property { name: "buttons"; type: "Qt::MouseButtons"; isReadonly: true } + } + Component { + file: "private/qquickpointerhandler_p.h" + name: "QQuickPointerHandler" + exports: [ + "QtQuick/PointerHandler 2.12", + "QtQuick/PointerHandler 2.15" + ] + isCreatable: false + exportMetaObjectRevisions: [12, 15] + Enum { + name: "GrabPermissions" + alias: "GrabPermission" + isFlag: true + values: [ + "TakeOverForbidden", + "CanTakeOverFromHandlersOfSameType", + "CanTakeOverFromHandlersOfDifferentType", + "CanTakeOverFromItems", + "CanTakeOverFromAnything", + "ApprovesTakeOverByHandlersOfSameType", + "ApprovesTakeOverByHandlersOfDifferentType", + "ApprovesTakeOverByItems", + "ApprovesCancellation", + "ApprovesTakeOverByAnything" + ] + } + Property { name: "enabled"; type: "bool" } + Property { name: "active"; type: "bool"; isReadonly: true } + Property { name: "target"; type: "QQuickItem"; isPointer: true } + Property { name: "parent"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "grabPermissions"; type: "GrabPermissions" } + Property { name: "margin"; type: "double" } + Property { name: "dragThreshold"; revision: 15; type: "int" } + Property { name: "cursorShape"; revision: 15; type: "Qt::CursorShape" } + Signal { name: "dragThresholdChanged"; revision: 15 } + Signal { + name: "grabChanged" + Parameter { name: "transition"; type: "QQuickEventPoint::GrabTransition" } + Parameter { name: "point"; type: "QQuickEventPoint"; isPointer: true } + } + Signal { name: "grabPermissionChanged" } + Signal { + name: "canceled" + Parameter { name: "point"; type: "QQuickEventPoint"; isPointer: true } + } + Signal { name: "cursorShapeChanged"; revision: 15 } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickPointerMouseEvent" + prototype: "QQuickSinglePointEvent" + exports: ["QtQuick/PointerMouseEvent 2.12"] + isCreatable: false + exportMetaObjectRevisions: [12] + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickPointerScrollEvent" + prototype: "QQuickSinglePointEvent" + exports: ["QtQuick/PointerScrollEvent 2.14"] + isCreatable: false + exportMetaObjectRevisions: [14] + Property { name: "angleDelta"; type: "QVector2D"; isReadonly: true } + Property { name: "pixelDelta"; type: "QVector2D"; isReadonly: true } + Property { name: "hasAngleDelta"; type: "bool"; isReadonly: true } + Property { name: "hasPixelDelta"; type: "bool"; isReadonly: true } + Property { name: "inverted"; type: "bool"; isReadonly: true } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickPointerTouchEvent" + prototype: "QQuickPointerEvent" + exports: ["QtQuick/PointerTouchEvent 2.12"] + isCreatable: false + exportMetaObjectRevisions: [12] + } + Component { + name: "QQuickPositionerAttached" + Property { name: "index"; type: "int"; isReadonly: true } + Property { name: "isFirstItem"; type: "bool"; isReadonly: true } + Property { name: "isLastItem"; type: "bool"; isReadonly: true } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickPropertyAction" + prototype: "QQuickAbstractAnimation" + exports: ["QtQuick/PropertyAction 2.0", "QtQuick/PropertyAction 2.12"] + exportMetaObjectRevisions: [0, 12] + Property { name: "target"; type: "QObject"; isPointer: true } + Property { name: "property"; type: "string" } + Property { name: "properties"; type: "string" } + Property { name: "targets"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "exclude"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "value"; type: "QVariant" } + Signal { + name: "valueChanged" + Parameter { type: "QVariant" } + } + Signal { + name: "propertiesChanged" + Parameter { type: "string" } + } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickPropertyAnimation" + prototype: "QQuickAbstractAnimation" + exports: [ + "QtQuick/PropertyAnimation 2.0", + "QtQuick/PropertyAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "duration"; type: "int" } + Property { name: "from"; type: "QVariant" } + Property { name: "to"; type: "QVariant" } + Property { name: "easing"; type: "QEasingCurve" } + Property { name: "target"; type: "QObject"; isPointer: true } + Property { name: "property"; type: "string" } + Property { name: "properties"; type: "string" } + Property { name: "targets"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "exclude"; type: "QObject"; isList: true; isReadonly: true } + Signal { + name: "durationChanged" + Parameter { type: "int" } + } + Signal { + name: "easingChanged" + Parameter { type: "QEasingCurve" } + } + Signal { + name: "propertiesChanged" + Parameter { type: "string" } + } + } + Component { + file: "private/qquickpropertychanges_p.h" + name: "QQuickPropertyChanges" + prototype: "QQuickStateOperation" + exports: ["QtQuick/PropertyChanges 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "target"; type: "QObject"; isPointer: true } + Property { name: "restoreEntryValues"; type: "bool" } + Property { name: "explicit"; type: "bool" } + } + Component { + file: "private/qquickrectangle_p.h" + name: "QQuickRectangle" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/Rectangle 2.0", + "QtQuick/Rectangle 2.1", + "QtQuick/Rectangle 2.11", + "QtQuick/Rectangle 2.4", + "QtQuick/Rectangle 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "color"; type: "QColor" } + Property { name: "gradient"; type: "QJSValue" } + Property { name: "border"; type: "QQuickPen"; isReadonly: true; isPointer: true } + Property { name: "radius"; type: "double" } + Method { name: "doUpdate" } + } + Component { + file: "private/qquickrepeater_p.h" + name: "QQuickRepeater" + defaultProperty: "delegate" + prototype: "QQuickItem" + exports: [ + "QtQuick/Repeater 2.0", + "QtQuick/Repeater 2.1", + "QtQuick/Repeater 2.11", + "QtQuick/Repeater 2.4", + "QtQuick/Repeater 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "model"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "count"; type: "int"; isReadonly: true } + Signal { + name: "itemAdded" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Signal { + name: "itemRemoved" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "createdItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { + name: "initItem" + Parameter { type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { + name: "modelUpdated" + Parameter { name: "changeSet"; type: "QQmlChangeSet" } + Parameter { name: "reset"; type: "bool" } + } + Method { + name: "itemAt" + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + } + Component { + file: "private/qquicktranslate_p.h" + name: "QQuickRotation" + prototype: "QQuickTransform" + exports: ["QtQuick/Rotation 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "origin"; type: "QVector3D" } + Property { name: "angle"; type: "double" } + Property { name: "axis"; type: "QVector3D" } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickRotationAnimation" + prototype: "QQuickPropertyAnimation" + exports: [ + "QtQuick/RotationAnimation 2.0", + "QtQuick/RotationAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + Enum { + name: "RotationDirection" + values: ["Numerical", "Shortest", "Clockwise", "Counterclockwise"] + } + Property { name: "from"; type: "double" } + Property { name: "to"; type: "double" } + Property { name: "direction"; type: "RotationDirection" } + } + Component { + file: "private/qquickanimator_p.h" + name: "QQuickRotationAnimator" + prototype: "QQuickAnimator" + exports: [ + "QtQuick/RotationAnimator 2.12", + "QtQuick/RotationAnimator 2.2" + ] + exportMetaObjectRevisions: [12, 2] + Enum { + name: "RotationDirection" + values: ["Numerical", "Shortest", "Clockwise", "Counterclockwise"] + } + Property { name: "direction"; type: "RotationDirection" } + Signal { + name: "directionChanged" + Parameter { name: "dir"; type: "RotationDirection" } + } + } + Component { + file: "private/qquickpositioners_p.h" + name: "QQuickRow" + prototype: "QQuickBasePositioner" + exports: [ + "QtQuick/Row 2.0", + "QtQuick/Row 2.1", + "QtQuick/Row 2.11", + "QtQuick/Row 2.4", + "QtQuick/Row 2.6", + "QtQuick/Row 2.7", + "QtQuick/Row 2.9" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 6, 7, 9] + Property { name: "layoutDirection"; type: "Qt::LayoutDirection" } + Property { name: "effectiveLayoutDirection"; type: "Qt::LayoutDirection"; isReadonly: true } + } + Component { + file: "private/qquicktranslate_p.h" + name: "QQuickScale" + prototype: "QQuickTransform" + exports: ["QtQuick/Scale 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "origin"; type: "QVector3D" } + Property { name: "xScale"; type: "double" } + Property { name: "yScale"; type: "double" } + Property { name: "zScale"; type: "double" } + Signal { name: "scaleChanged" } + } + Component { + file: "private/qquickanimator_p.h" + name: "QQuickScaleAnimator" + prototype: "QQuickAnimator" + exports: ["QtQuick/ScaleAnimator 2.12", "QtQuick/ScaleAnimator 2.2"] + exportMetaObjectRevisions: [12, 2] + } + Component { + file: "private/qquickscalegrid_p_p.h" + name: "QQuickScaleGrid" + Property { name: "left"; type: "int" } + Property { name: "top"; type: "int" } + Property { name: "right"; type: "int" } + Property { name: "bottom"; type: "int" } + Signal { name: "borderChanged" } + Signal { name: "leftBorderChanged" } + Signal { name: "topBorderChanged" } + Signal { name: "rightBorderChanged" } + Signal { name: "bottomBorderChanged" } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickScriptAction" + prototype: "QQuickAbstractAnimation" + exports: ["QtQuick/ScriptAction 2.0", "QtQuick/ScriptAction 2.12"] + exportMetaObjectRevisions: [0, 12] + Property { name: "script"; type: "QQmlScriptString" } + Property { name: "scriptName"; type: "string" } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickSequentialAnimation" + defaultProperty: "animations" + prototype: "QQuickAnimationGroup" + exports: [ + "QtQuick/SequentialAnimation 2.0", + "QtQuick/SequentialAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + } + Component { + file: "private/qquickshadereffect_p.h" + name: "QQuickShaderEffect" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/ShaderEffect 2.0", + "QtQuick/ShaderEffect 2.1", + "QtQuick/ShaderEffect 2.11", + "QtQuick/ShaderEffect 2.4", + "QtQuick/ShaderEffect 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "CullMode" + values: ["NoCulling", "BackFaceCulling", "FrontFaceCulling"] + } + Enum { + name: "Status" + values: ["Compiled", "Uncompiled", "Error"] + } + Property { name: "fragmentShader"; type: "QByteArray" } + Property { name: "vertexShader"; type: "QByteArray" } + Property { name: "blending"; type: "bool" } + Property { name: "mesh"; type: "QVariant" } + Property { name: "cullMode"; type: "CullMode" } + Property { name: "log"; type: "string"; isReadonly: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "supportsAtlasTextures"; revision: 4; type: "bool" } + } + Component { + file: "private/qquickshadereffectmesh_p.h" + name: "QQuickShaderEffectMesh" + exports: ["QtQuick/ShaderEffectMesh 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Signal { name: "geometryChanged" } + } + Component { + file: "private/qquickshadereffectsource_p.h" + name: "QQuickShaderEffectSource" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick/ShaderEffectSource 2.0", + "QtQuick/ShaderEffectSource 2.1", + "QtQuick/ShaderEffectSource 2.11", + "QtQuick/ShaderEffectSource 2.4", + "QtQuick/ShaderEffectSource 2.6", + "QtQuick/ShaderEffectSource 2.7", + "QtQuick/ShaderEffectSource 2.9" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 6, 7, 9] + Enum { + name: "WrapMode" + values: [ + "ClampToEdge", + "RepeatHorizontally", + "RepeatVertically", + "Repeat" + ] + } + Enum { + name: "Format" + values: ["Alpha", "RGB", "RGBA"] + } + Enum { + name: "TextureMirroring" + values: ["NoMirroring", "MirrorHorizontally", "MirrorVertically"] + } + Property { name: "wrapMode"; type: "WrapMode" } + Property { name: "sourceItem"; type: "QQuickItem"; isPointer: true } + Property { name: "sourceRect"; type: "QRectF" } + Property { name: "textureSize"; type: "QSize" } + Property { name: "format"; type: "Format" } + Property { name: "live"; type: "bool" } + Property { name: "hideSource"; type: "bool" } + Property { name: "mipmap"; type: "bool" } + Property { name: "recursive"; type: "bool" } + Property { name: "textureMirroring"; revision: 6; type: "TextureMirroring" } + Property { name: "samples"; revision: 9; type: "int" } + Signal { name: "scheduledUpdateCompleted" } + Method { + name: "sourceItemDestroyed" + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { name: "invalidateSceneGraph" } + Method { name: "scheduleUpdate" } + } + Component { + file: "private/qquickshortcut_p.h" + name: "QQuickShortcut" + exports: [ + "QtQuick/Shortcut 2.5", + "QtQuick/Shortcut 2.6", + "QtQuick/Shortcut 2.9" + ] + exportMetaObjectRevisions: [5, 6, 9] + Property { name: "sequence"; type: "QVariant" } + Property { name: "sequences"; revision: 9; type: "QVariantList" } + Property { name: "nativeText"; revision: 6; type: "string"; isReadonly: true } + Property { name: "portableText"; revision: 6; type: "string"; isReadonly: true } + Property { name: "enabled"; type: "bool" } + Property { name: "autoRepeat"; type: "bool" } + Property { name: "context"; type: "Qt::ShortcutContext" } + Signal { name: "sequencesChanged"; revision: 9 } + Signal { name: "activated" } + Signal { name: "activatedAmbiguously" } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickSinglePointEvent" + prototype: "QQuickPointerEvent" + } + Component { + file: "private/qquickpointerhandler_p.h" + name: "QQuickSinglePointHandler" + prototype: "QQuickPointerDeviceHandler" + Property { name: "point"; type: "QQuickHandlerPoint"; isReadonly: true } + } + Component { + file: "private/qquicksmoothedanimation_p.h" + name: "QQuickSmoothedAnimation" + prototype: "QQuickNumberAnimation" + exports: [ + "QtQuick/SmoothedAnimation 2.0", + "QtQuick/SmoothedAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + Enum { + name: "ReversingMode" + values: ["Eased", "Immediate", "Sync"] + } + Property { name: "velocity"; type: "double" } + Property { name: "reversingMode"; type: "ReversingMode" } + Property { name: "maximumEasingTime"; type: "double" } + } + Component { + file: "private/qquickspringanimation_p.h" + name: "QQuickSpringAnimation" + prototype: "QQuickNumberAnimation" + exports: [ + "QtQuick/SpringAnimation 2.0", + "QtQuick/SpringAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "velocity"; type: "double" } + Property { name: "spring"; type: "double" } + Property { name: "damping"; type: "double" } + Property { name: "epsilon"; type: "double" } + Property { name: "modulus"; type: "double" } + Property { name: "mass"; type: "double" } + Signal { name: "syncChanged" } + } + Component { + file: "private/qquicksprite_p.h" + name: "QQuickSprite" + prototype: "QQuickStochasticState" + exports: ["QtQuick/Sprite 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "source"; type: "QUrl" } + Property { name: "reverse"; type: "bool" } + Property { name: "frameSync"; type: "bool" } + Property { name: "frames"; type: "int" } + Property { name: "frameCount"; type: "int" } + Property { name: "frameHeight"; type: "int" } + Property { name: "frameWidth"; type: "int" } + Property { name: "frameX"; type: "int" } + Property { name: "frameY"; type: "int" } + Property { name: "frameRate"; type: "double" } + Property { name: "frameRateVariation"; type: "double" } + Property { name: "frameDuration"; type: "int" } + Property { name: "frameDurationVariation"; type: "int" } + Signal { + name: "sourceChanged" + Parameter { name: "arg"; type: "QUrl" } + } + Signal { + name: "frameHeightChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameWidthChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "reverseChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "frameCountChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameXChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameYChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameRateChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "frameRateVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "frameDurationChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameDurationVariationChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "frameSyncChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setSource" + Parameter { name: "arg"; type: "QUrl" } + } + Method { + name: "setFrameHeight" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameWidth" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setReverse" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setFrames" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameCount" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameX" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameY" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameRate" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setFrameRateVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setFrameDuration" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameDurationVariation" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setFrameSync" + Parameter { name: "arg"; type: "bool" } + } + Method { name: "startImageLoading" } + } + Component { + file: "private/qquickspritesequence_p.h" + name: "QQuickSpriteSequence" + defaultProperty: "sprites" + prototype: "QQuickItem" + exports: [ + "QtQuick/SpriteSequence 2.0", + "QtQuick/SpriteSequence 2.1", + "QtQuick/SpriteSequence 2.11", + "QtQuick/SpriteSequence 2.4", + "QtQuick/SpriteSequence 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "running"; type: "bool" } + Property { name: "interpolate"; type: "bool" } + Property { name: "goalSprite"; type: "string" } + Property { name: "currentSprite"; type: "string"; isReadonly: true } + Property { name: "sprites"; type: "QQuickSprite"; isList: true; isReadonly: true } + Signal { + name: "runningChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "interpolateChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "goalSpriteChanged" + Parameter { name: "arg"; type: "string" } + } + Signal { + name: "currentSpriteChanged" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "jumpTo" + Parameter { name: "sprite"; type: "string" } + } + Method { + name: "setGoalSprite" + Parameter { name: "sprite"; type: "string" } + } + Method { + name: "setRunning" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setInterpolate" + Parameter { name: "arg"; type: "bool" } + } + Method { name: "createEngine" } + } + Component { + file: "private/qquickstate_p.h" + name: "QQuickState" + defaultProperty: "changes" + exports: ["QtQuick/State 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "name"; type: "string" } + Property { name: "when"; type: "bool" } + Property { name: "extend"; type: "string" } + Property { name: "changes"; type: "QQuickStateOperation"; isList: true; isReadonly: true } + Signal { name: "completed" } + } + Component { + file: "private/qquickstatechangescript_p.h" + name: "QQuickStateChangeScript" + prototype: "QQuickStateOperation" + exports: ["QtQuick/StateChangeScript 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "script"; type: "QQmlScriptString" } + Property { name: "name"; type: "string" } + } + Component { + file: "private/qquickstategroup_p.h" + name: "QQuickStateGroup" + exports: ["QtQuick/StateGroup 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "state"; type: "string" } + Property { name: "states"; type: "QQuickState"; isList: true; isReadonly: true } + Property { name: "transitions"; type: "QQuickTransition"; isList: true; isReadonly: true } + Signal { + name: "stateChanged" + Parameter { type: "string" } + } + } + Component { file: "private/qquickstate_p.h"; name: "QQuickStateOperation" } + Component { + name: "QQuickStochasticState" + Property { name: "duration"; type: "int" } + Property { name: "durationVariation"; type: "int" } + Property { name: "randomStart"; type: "bool" } + Property { name: "to"; type: "QVariantMap" } + Property { name: "name"; type: "string" } + Signal { + name: "durationChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "nameChanged" + Parameter { name: "arg"; type: "string" } + } + Signal { + name: "toChanged" + Parameter { name: "arg"; type: "QVariantMap" } + } + Signal { + name: "durationVariationChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { name: "entered" } + Signal { + name: "randomStartChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setDuration" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setName" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setTo" + Parameter { name: "arg"; type: "QVariantMap" } + } + Method { + name: "setDurationVariation" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setRandomStart" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + file: "private/qquicksystempalette_p.h" + name: "QQuickSystemPalette" + exports: ["QtQuick/SystemPalette 2.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "ColorGroup" + values: ["Active", "Inactive", "Disabled"] + } + Property { name: "colorGroup"; type: "QQuickSystemPalette::ColorGroup" } + Property { name: "window"; type: "QColor"; isReadonly: true } + Property { name: "windowText"; type: "QColor"; isReadonly: true } + Property { name: "base"; type: "QColor"; isReadonly: true } + Property { name: "text"; type: "QColor"; isReadonly: true } + Property { name: "alternateBase"; type: "QColor"; isReadonly: true } + Property { name: "button"; type: "QColor"; isReadonly: true } + Property { name: "buttonText"; type: "QColor"; isReadonly: true } + Property { name: "light"; type: "QColor"; isReadonly: true } + Property { name: "midlight"; type: "QColor"; isReadonly: true } + Property { name: "dark"; type: "QColor"; isReadonly: true } + Property { name: "mid"; type: "QColor"; isReadonly: true } + Property { name: "shadow"; type: "QColor"; isReadonly: true } + Property { name: "highlight"; type: "QColor"; isReadonly: true } + Property { name: "highlightedText"; type: "QColor"; isReadonly: true } + Signal { name: "paletteChanged" } + } + Component { + file: "private/qquicktableview_p.h" + name: "QQuickTableView" + defaultProperty: "flickableData" + prototype: "QQuickFlickable" + exports: ["QtQuick/TableView 2.12", "QtQuick/TableView 2.14"] + exportMetaObjectRevisions: [12, 14] + attachedType: "QQuickTableViewAttached" + Property { name: "rows"; type: "int"; isReadonly: true } + Property { name: "columns"; type: "int"; isReadonly: true } + Property { name: "rowSpacing"; type: "double" } + Property { name: "columnSpacing"; type: "double" } + Property { name: "rowHeightProvider"; type: "QJSValue" } + Property { name: "columnWidthProvider"; type: "QJSValue" } + Property { name: "model"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "reuseItems"; type: "bool" } + Property { name: "contentWidth"; type: "double" } + Property { name: "contentHeight"; type: "double" } + Property { name: "syncView"; revision: 14; type: "QQuickTableView"; isPointer: true } + Property { name: "syncDirection"; revision: 14; type: "Qt::Orientations" } + Signal { name: "syncViewChanged"; revision: 14 } + Signal { name: "syncDirectionChanged"; revision: 14 } + Method { name: "_q_componentFinalized" } + Method { name: "forceLayout" } + } + Component { + name: "QQuickTableViewAttached" + Property { name: "view"; type: "QQuickTableView"; isReadonly: true; isPointer: true } + Signal { name: "pooled" } + Signal { name: "reused" } + } + Component { + file: "private/qquicktaphandler_p.h" + name: "QQuickTapHandler" + prototype: "QQuickSinglePointHandler" + exports: ["QtQuick/TapHandler 2.12", "QtQuick/TapHandler 2.15"] + exportMetaObjectRevisions: [12, 15] + Enum { + name: "GesturePolicy" + values: ["DragThreshold", "WithinBounds", "ReleaseWithinBounds"] + } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "tapCount"; type: "int"; isReadonly: true } + Property { name: "timeHeld"; type: "double"; isReadonly: true } + Property { name: "longPressThreshold"; type: "double" } + Property { name: "gesturePolicy"; type: "GesturePolicy" } + Signal { + name: "tapped" + Parameter { name: "eventPoint"; type: "QQuickEventPoint"; isPointer: true } + } + Signal { + name: "singleTapped" + Parameter { name: "eventPoint"; type: "QQuickEventPoint"; isPointer: true } + } + Signal { + name: "doubleTapped" + Parameter { name: "eventPoint"; type: "QQuickEventPoint"; isPointer: true } + } + Signal { name: "longPressed" } + } + Component { + file: "private/qquicktext_p.h" + name: "QQuickText" + prototype: "QQuickImplicitSizeItem" + exports: [ + "QtQuick/Text 2.0", + "QtQuick/Text 2.1", + "QtQuick/Text 2.10", + "QtQuick/Text 2.11", + "QtQuick/Text 2.2", + "QtQuick/Text 2.3", + "QtQuick/Text 2.4", + "QtQuick/Text 2.6", + "QtQuick/Text 2.7", + "QtQuick/Text 2.9" + ] + exportMetaObjectRevisions: [0, 1, 10, 11, 2, 3, 4, 6, 7, 9] + Enum { + name: "HAlignment" + values: [ + "AlignLeft", + "AlignRight", + "AlignHCenter", + "AlignJustify" + ] + } + Enum { + name: "VAlignment" + values: ["AlignTop", "AlignBottom", "AlignVCenter"] + } + Enum { + name: "TextStyle" + values: ["Normal", "Outline", "Raised", "Sunken"] + } + Enum { + name: "TextFormat" + values: [ + "PlainText", + "RichText", + "MarkdownText", + "AutoText", + "StyledText" + ] + } + Enum { + name: "TextElideMode" + values: ["ElideLeft", "ElideRight", "ElideMiddle", "ElideNone"] + } + Enum { + name: "WrapMode" + values: [ + "NoWrap", + "WordWrap", + "WrapAnywhere", + "WrapAtWordBoundaryOrAnywhere", + "Wrap" + ] + } + Enum { + name: "RenderType" + values: ["QtRendering", "NativeRendering"] + } + Enum { + name: "LineHeightMode" + values: ["ProportionalHeight", "FixedHeight"] + } + Enum { + name: "FontSizeMode" + values: ["FixedSize", "HorizontalFit", "VerticalFit", "Fit"] + } + Property { name: "text"; type: "string" } + Property { name: "font"; type: "QFont" } + Property { name: "color"; type: "QColor" } + Property { name: "linkColor"; type: "QColor" } + Property { name: "style"; type: "TextStyle" } + Property { name: "styleColor"; type: "QColor" } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "effectiveHorizontalAlignment"; type: "HAlignment"; isReadonly: true } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "wrapMode"; type: "WrapMode" } + Property { name: "lineCount"; type: "int"; isReadonly: true } + Property { name: "truncated"; type: "bool"; isReadonly: true } + Property { name: "maximumLineCount"; type: "int" } + Property { name: "textFormat"; type: "TextFormat" } + Property { name: "elide"; type: "TextElideMode" } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "paintedWidth"; type: "double"; isReadonly: true } + Property { name: "paintedHeight"; type: "double"; isReadonly: true } + Property { name: "lineHeight"; type: "double" } + Property { name: "lineHeightMode"; type: "LineHeightMode" } + Property { name: "baseUrl"; type: "QUrl" } + Property { name: "minimumPixelSize"; type: "int" } + Property { name: "minimumPointSize"; type: "int" } + Property { name: "fontSizeMode"; type: "FontSizeMode" } + Property { name: "renderType"; type: "RenderType" } + Property { name: "hoveredLink"; revision: 2; type: "string"; isReadonly: true } + Property { name: "padding"; revision: 6; type: "double" } + Property { name: "topPadding"; revision: 6; type: "double" } + Property { name: "leftPadding"; revision: 6; type: "double" } + Property { name: "rightPadding"; revision: 6; type: "double" } + Property { name: "bottomPadding"; revision: 6; type: "double" } + Property { name: "fontInfo"; revision: 9; type: "QJSValue"; isReadonly: true } + Property { name: "advance"; revision: 10; type: "QSizeF"; isReadonly: true } + Signal { + name: "textChanged" + Parameter { name: "text"; type: "string" } + } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "linkHovered" + revision: 2 + Parameter { name: "link"; type: "string" } + } + Signal { + name: "fontChanged" + Parameter { name: "font"; type: "QFont" } + } + Signal { + name: "styleChanged" + Parameter { name: "style"; type: "QQuickText::TextStyle" } + } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickText::HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickText::VAlignment" } + } + Signal { + name: "textFormatChanged" + Parameter { name: "textFormat"; type: "QQuickText::TextFormat" } + } + Signal { + name: "elideModeChanged" + Parameter { name: "mode"; type: "QQuickText::TextElideMode" } + } + Signal { name: "contentSizeChanged" } + Signal { + name: "contentWidthChanged" + Parameter { name: "contentWidth"; type: "double" } + } + Signal { + name: "contentHeightChanged" + Parameter { name: "contentHeight"; type: "double" } + } + Signal { + name: "lineHeightChanged" + Parameter { name: "lineHeight"; type: "double" } + } + Signal { + name: "lineHeightModeChanged" + Parameter { name: "mode"; type: "LineHeightMode" } + } + Signal { + name: "lineLaidOut" + Parameter { name: "line"; type: "QQuickTextLine"; isPointer: true } + } + Signal { name: "paddingChanged"; revision: 6 } + Signal { name: "topPaddingChanged"; revision: 6 } + Signal { name: "leftPaddingChanged"; revision: 6 } + Signal { name: "rightPaddingChanged"; revision: 6 } + Signal { name: "bottomPaddingChanged"; revision: 6 } + Signal { name: "fontInfoChanged"; revision: 9 } + Method { name: "q_updateLayout" } + Method { name: "triggerPreprocess" } + Method { name: "imageDownloadFinished" } + Method { name: "doLayout" } + Method { name: "forceLayout"; revision: 9 } + Method { + name: "linkAt" + revision: 3 + type: "string" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { file: "qquicktextdocument.h"; name: "QQuickTextDocument" } + Component { + file: "private/qquicktextedit_p.h" + name: "QQuickTextEdit" + prototype: "QQuickImplicitSizeItem" + exports: [ + "QtQuick/TextEdit 2.0", + "QtQuick/TextEdit 2.1", + "QtQuick/TextEdit 2.10", + "QtQuick/TextEdit 2.11", + "QtQuick/TextEdit 2.2", + "QtQuick/TextEdit 2.3", + "QtQuick/TextEdit 2.4", + "QtQuick/TextEdit 2.6", + "QtQuick/TextEdit 2.7" + ] + exportMetaObjectRevisions: [0, 1, 10, 11, 2, 3, 4, 6, 7] + Enum { + name: "HAlignment" + values: [ + "AlignLeft", + "AlignRight", + "AlignHCenter", + "AlignJustify" + ] + } + Enum { + name: "VAlignment" + values: ["AlignTop", "AlignBottom", "AlignVCenter"] + } + Enum { + name: "TextFormat" + values: ["PlainText", "RichText", "AutoText", "MarkdownText"] + } + Enum { + name: "WrapMode" + values: [ + "NoWrap", + "WordWrap", + "WrapAnywhere", + "WrapAtWordBoundaryOrAnywhere", + "Wrap" + ] + } + Enum { + name: "SelectionMode" + values: ["SelectCharacters", "SelectWords"] + } + Enum { + name: "RenderType" + values: ["QtRendering", "NativeRendering"] + } + Property { name: "text"; type: "string" } + Property { name: "color"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "selectedTextColor"; type: "QColor" } + Property { name: "font"; type: "QFont" } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "effectiveHorizontalAlignment"; type: "HAlignment"; isReadonly: true } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "wrapMode"; type: "WrapMode" } + Property { name: "lineCount"; type: "int"; isReadonly: true } + Property { name: "length"; type: "int"; isReadonly: true } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "paintedWidth"; type: "double"; isReadonly: true } + Property { name: "paintedHeight"; type: "double"; isReadonly: true } + Property { name: "textFormat"; type: "TextFormat" } + Property { name: "readOnly"; type: "bool" } + Property { name: "cursorVisible"; type: "bool" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "cursorRectangle"; type: "QRectF"; isReadonly: true } + Property { name: "cursorDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "overwriteMode"; type: "bool" } + Property { name: "selectionStart"; type: "int"; isReadonly: true } + Property { name: "selectionEnd"; type: "int"; isReadonly: true } + Property { name: "selectedText"; type: "string"; isReadonly: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "persistentSelection"; type: "bool" } + Property { name: "textMargin"; type: "double" } + Property { name: "inputMethodHints"; type: "Qt::InputMethodHints" } + Property { name: "selectByKeyboard"; revision: 1; type: "bool" } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "mouseSelectionMode"; type: "SelectionMode" } + Property { name: "canPaste"; type: "bool"; isReadonly: true } + Property { name: "canUndo"; type: "bool"; isReadonly: true } + Property { name: "canRedo"; type: "bool"; isReadonly: true } + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "baseUrl"; type: "QUrl" } + Property { name: "renderType"; type: "RenderType" } + Property { + name: "textDocument" + revision: 1 + type: "QQuickTextDocument" + isReadonly: true + isPointer: true + } + Property { name: "hoveredLink"; revision: 2; type: "string"; isReadonly: true } + Property { name: "padding"; revision: 6; type: "double" } + Property { name: "topPadding"; revision: 6; type: "double" } + Property { name: "leftPadding"; revision: 6; type: "double" } + Property { name: "rightPadding"; revision: 6; type: "double" } + Property { name: "bottomPadding"; revision: 6; type: "double" } + Property { name: "preeditText"; revision: 7; type: "string"; isReadonly: true } + Property { name: "tabStopDistance"; revision: 10; type: "double" } + Signal { name: "preeditTextChanged"; revision: 7 } + Signal { name: "contentSizeChanged" } + Signal { + name: "colorChanged" + Parameter { name: "color"; type: "QColor" } + } + Signal { + name: "selectionColorChanged" + Parameter { name: "color"; type: "QColor" } + } + Signal { + name: "selectedTextColorChanged" + Parameter { name: "color"; type: "QColor" } + } + Signal { + name: "fontChanged" + Parameter { name: "font"; type: "QFont" } + } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickTextEdit::HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickTextEdit::VAlignment" } + } + Signal { + name: "textFormatChanged" + Parameter { name: "textFormat"; type: "QQuickTextEdit::TextFormat" } + } + Signal { + name: "readOnlyChanged" + Parameter { name: "isReadOnly"; type: "bool" } + } + Signal { + name: "cursorVisibleChanged" + Parameter { name: "isCursorVisible"; type: "bool" } + } + Signal { + name: "overwriteModeChanged" + Parameter { name: "overwriteMode"; type: "bool" } + } + Signal { + name: "activeFocusOnPressChanged" + Parameter { name: "activeFocusOnPressed"; type: "bool" } + } + Signal { + name: "persistentSelectionChanged" + Parameter { name: "isPersistentSelection"; type: "bool" } + } + Signal { + name: "textMarginChanged" + Parameter { name: "textMargin"; type: "double" } + } + Signal { + name: "selectByKeyboardChanged" + revision: 1 + Parameter { name: "selectByKeyboard"; type: "bool" } + } + Signal { + name: "selectByMouseChanged" + Parameter { name: "selectByMouse"; type: "bool" } + } + Signal { + name: "mouseSelectionModeChanged" + Parameter { name: "mode"; type: "QQuickTextEdit::SelectionMode" } + } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "linkHovered" + revision: 2 + Parameter { name: "link"; type: "string" } + } + Signal { name: "editingFinished"; revision: 6 } + Signal { name: "paddingChanged"; revision: 6 } + Signal { name: "topPaddingChanged"; revision: 6 } + Signal { name: "leftPaddingChanged"; revision: 6 } + Signal { name: "rightPaddingChanged"; revision: 6 } + Signal { name: "bottomPaddingChanged"; revision: 6 } + Signal { + name: "tabStopDistanceChanged" + revision: 10 + Parameter { name: "distance"; type: "double" } + } + Method { name: "selectAll" } + Method { name: "selectWord" } + Method { + name: "select" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "deselect" } + Method { + name: "isRightToLeft" + type: "bool" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "cut" } + Method { name: "copy" } + Method { name: "paste" } + Method { name: "undo" } + Method { name: "redo" } + Method { + name: "insert" + Parameter { name: "position"; type: "int" } + Parameter { name: "text"; type: "string" } + } + Method { + name: "remove" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "append" + revision: 2 + Parameter { name: "text"; type: "string" } + } + Method { name: "clear"; revision: 7 } + Method { name: "q_textChanged" } + Method { + name: "q_contentsChange" + Parameter { type: "int" } + Parameter { type: "int" } + Parameter { type: "int" } + } + Method { name: "updateSelection" } + Method { name: "moveCursorDelegate" } + Method { name: "createCursor" } + Method { name: "q_canPasteChanged" } + Method { name: "updateWholeDocument" } + Method { + name: "invalidateBlock" + Parameter { name: "block"; type: "QTextBlock" } + } + Method { name: "updateCursor" } + Method { + name: "q_linkHovered" + Parameter { name: "link"; type: "string" } + } + Method { + name: "q_markerHovered" + Parameter { name: "hovered"; type: "bool" } + } + Method { name: "q_updateAlignment" } + Method { name: "updateSize" } + Method { name: "triggerPreprocess" } + Method { + name: "inputMethodQuery" + revision: 4 + type: "QVariant" + Parameter { name: "query"; type: "Qt::InputMethodQuery" } + Parameter { name: "argument"; type: "QVariant" } + } + Method { + name: "positionToRectangle" + type: "QRectF" + Parameter { type: "int" } + } + Method { + name: "positionAt" + type: "int" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "moveCursorSelection" + Parameter { name: "pos"; type: "int" } + } + Method { + name: "moveCursorSelection" + Parameter { name: "pos"; type: "int" } + Parameter { name: "mode"; type: "SelectionMode" } + } + Method { + name: "getText" + type: "string" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "getFormattedText" + type: "string" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "linkAt" + revision: 3 + type: "string" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + file: "private/qquicktextinput_p.h" + name: "QQuickTextInput" + prototype: "QQuickImplicitSizeItem" + exports: [ + "QtQuick/TextInput 2.0", + "QtQuick/TextInput 2.1", + "QtQuick/TextInput 2.11", + "QtQuick/TextInput 2.2", + "QtQuick/TextInput 2.4", + "QtQuick/TextInput 2.6", + "QtQuick/TextInput 2.7", + "QtQuick/TextInput 2.9" + ] + exportMetaObjectRevisions: [0, 1, 11, 2, 4, 6, 7, 9] + Enum { + name: "EchoMode" + values: ["Normal", "NoEcho", "Password", "PasswordEchoOnEdit"] + } + Enum { + name: "HAlignment" + values: ["AlignLeft", "AlignRight", "AlignHCenter"] + } + Enum { + name: "VAlignment" + values: ["AlignTop", "AlignBottom", "AlignVCenter"] + } + Enum { + name: "WrapMode" + values: [ + "NoWrap", + "WordWrap", + "WrapAnywhere", + "WrapAtWordBoundaryOrAnywhere", + "Wrap" + ] + } + Enum { + name: "SelectionMode" + values: ["SelectCharacters", "SelectWords"] + } + Enum { + name: "CursorPosition" + values: ["CursorBetweenCharacters", "CursorOnCharacter"] + } + Enum { + name: "RenderType" + values: ["QtRendering", "NativeRendering"] + } + Property { name: "text"; type: "string" } + Property { name: "length"; type: "int"; isReadonly: true } + Property { name: "color"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "selectedTextColor"; type: "QColor" } + Property { name: "font"; type: "QFont" } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "effectiveHorizontalAlignment"; type: "HAlignment"; isReadonly: true } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "wrapMode"; type: "WrapMode" } + Property { name: "readOnly"; type: "bool" } + Property { name: "cursorVisible"; type: "bool" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "cursorRectangle"; type: "QRectF"; isReadonly: true } + Property { name: "cursorDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "overwriteMode"; type: "bool" } + Property { name: "selectionStart"; type: "int"; isReadonly: true } + Property { name: "selectionEnd"; type: "int"; isReadonly: true } + Property { name: "selectedText"; type: "string"; isReadonly: true } + Property { name: "maximumLength"; type: "int" } + Property { name: "validator"; type: "QValidator"; isPointer: true } + Property { name: "inputMask"; type: "string" } + Property { name: "inputMethodHints"; type: "Qt::InputMethodHints" } + Property { name: "acceptableInput"; type: "bool"; isReadonly: true } + Property { name: "echoMode"; type: "EchoMode" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "passwordCharacter"; type: "string" } + Property { name: "passwordMaskDelay"; revision: 4; type: "int" } + Property { name: "displayText"; type: "string"; isReadonly: true } + Property { name: "preeditText"; revision: 7; type: "string"; isReadonly: true } + Property { name: "autoScroll"; type: "bool" } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "mouseSelectionMode"; type: "SelectionMode" } + Property { name: "persistentSelection"; type: "bool" } + Property { name: "canPaste"; type: "bool"; isReadonly: true } + Property { name: "canUndo"; type: "bool"; isReadonly: true } + Property { name: "canRedo"; type: "bool"; isReadonly: true } + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "renderType"; type: "RenderType" } + Property { name: "padding"; revision: 6; type: "double" } + Property { name: "topPadding"; revision: 6; type: "double" } + Property { name: "leftPadding"; revision: 6; type: "double" } + Property { name: "rightPadding"; revision: 6; type: "double" } + Property { name: "bottomPadding"; revision: 6; type: "double" } + Signal { name: "accepted" } + Signal { name: "editingFinished"; revision: 2 } + Signal { name: "textEdited"; revision: 9 } + Signal { + name: "fontChanged" + Parameter { name: "font"; type: "QFont" } + } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickTextInput::HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickTextInput::VAlignment" } + } + Signal { + name: "readOnlyChanged" + Parameter { name: "isReadOnly"; type: "bool" } + } + Signal { + name: "cursorVisibleChanged" + Parameter { name: "isCursorVisible"; type: "bool" } + } + Signal { + name: "overwriteModeChanged" + Parameter { name: "overwriteMode"; type: "bool" } + } + Signal { + name: "maximumLengthChanged" + Parameter { name: "maximumLength"; type: "int" } + } + Signal { + name: "inputMaskChanged" + Parameter { name: "inputMask"; type: "string" } + } + Signal { + name: "echoModeChanged" + Parameter { name: "echoMode"; type: "QQuickTextInput::EchoMode" } + } + Signal { + name: "passwordMaskDelayChanged" + revision: 4 + Parameter { name: "delay"; type: "int" } + } + Signal { name: "preeditTextChanged"; revision: 7 } + Signal { + name: "activeFocusOnPressChanged" + Parameter { name: "activeFocusOnPress"; type: "bool" } + } + Signal { + name: "autoScrollChanged" + Parameter { name: "autoScroll"; type: "bool" } + } + Signal { + name: "selectByMouseChanged" + Parameter { name: "selectByMouse"; type: "bool" } + } + Signal { + name: "mouseSelectionModeChanged" + Parameter { name: "mode"; type: "QQuickTextInput::SelectionMode" } + } + Signal { name: "contentSizeChanged" } + Signal { name: "paddingChanged"; revision: 6 } + Signal { name: "topPaddingChanged"; revision: 6 } + Signal { name: "leftPaddingChanged"; revision: 6 } + Signal { name: "rightPaddingChanged"; revision: 6 } + Signal { name: "bottomPaddingChanged"; revision: 6 } + Method { name: "selectAll" } + Method { name: "selectWord" } + Method { + name: "select" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "deselect" } + Method { + name: "isRightToLeft" + type: "bool" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "cut" } + Method { name: "copy" } + Method { name: "paste" } + Method { name: "undo" } + Method { name: "redo" } + Method { + name: "insert" + Parameter { name: "position"; type: "int" } + Parameter { name: "text"; type: "string" } + } + Method { + name: "remove" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "ensureVisible" + revision: 4 + Parameter { name: "position"; type: "int" } + } + Method { name: "clear"; revision: 7 } + Method { name: "selectionChanged" } + Method { name: "createCursor" } + Method { + name: "updateCursorRectangle" + Parameter { name: "scroll"; type: "bool" } + } + Method { name: "updateCursorRectangle" } + Method { name: "q_canPasteChanged" } + Method { name: "q_updateAlignment" } + Method { name: "triggerPreprocess" } + Method { name: "q_validatorChanged" } + Method { + name: "positionAt" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "positionToRectangle" + type: "QRectF" + Parameter { name: "pos"; type: "int" } + } + Method { + name: "moveCursorSelection" + Parameter { name: "pos"; type: "int" } + } + Method { + name: "moveCursorSelection" + Parameter { name: "pos"; type: "int" } + Parameter { name: "mode"; type: "SelectionMode" } + } + Method { + name: "inputMethodQuery" + revision: 4 + type: "QVariant" + Parameter { name: "query"; type: "Qt::InputMethodQuery" } + Parameter { name: "argument"; type: "QVariant" } + } + Method { + name: "getText" + type: "string" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + } + Component { + file: "private/qquicktext_p.h" + name: "QQuickTextLine" + Property { name: "number"; type: "int"; isReadonly: true } + Property { name: "width"; type: "double" } + Property { name: "height"; type: "double" } + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "implicitWidth"; revision: 15; type: "double"; isReadonly: true } + Property { name: "isLast"; revision: 15; type: "bool"; isReadonly: true } + } + Component { + file: "private/qquicktextmetrics_p.h" + name: "QQuickTextMetrics" + exports: ["QtQuick/TextMetrics 2.4"] + exportMetaObjectRevisions: [4] + Property { name: "font"; type: "QFont" } + Property { name: "text"; type: "string" } + Property { name: "advanceWidth"; type: "double"; isReadonly: true } + Property { name: "boundingRect"; type: "QRectF"; isReadonly: true } + Property { name: "width"; type: "double"; isReadonly: true } + Property { name: "height"; type: "double"; isReadonly: true } + Property { name: "tightBoundingRect"; type: "QRectF"; isReadonly: true } + Property { name: "elidedText"; type: "string"; isReadonly: true } + Property { name: "elide"; type: "Qt::TextElideMode" } + Property { name: "elideWidth"; type: "double" } + Signal { name: "metricsChanged" } + } + Component { + file: "private/qquickmultipointtoucharea_p.h" + name: "QQuickTouchPoint" + exports: ["QtQuick/TouchPoint 2.0", "QtQuick/TouchPoint 2.9"] + exportMetaObjectRevisions: [0, 9] + Property { name: "pointId"; type: "int"; isReadonly: true } + Property { name: "uniqueId"; revision: 9; type: "QPointingDeviceUniqueId"; isReadonly: true } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "ellipseDiameters"; revision: 9; type: "QSizeF"; isReadonly: true } + Property { name: "pressure"; type: "double"; isReadonly: true } + Property { name: "rotation"; revision: 9; type: "double"; isReadonly: true } + Property { name: "velocity"; type: "QVector2D"; isReadonly: true } + Property { name: "area"; type: "QRectF"; isReadonly: true } + Property { name: "startX"; type: "double"; isReadonly: true } + Property { name: "startY"; type: "double"; isReadonly: true } + Property { name: "previousX"; type: "double"; isReadonly: true } + Property { name: "previousY"; type: "double"; isReadonly: true } + Property { name: "sceneX"; type: "double"; isReadonly: true } + Property { name: "sceneY"; type: "double"; isReadonly: true } + Signal { name: "uniqueIdChanged"; revision: 9 } + Signal { name: "ellipseDiametersChanged"; revision: 9 } + Signal { name: "rotationChanged"; revision: 9 } + } + Component { + file: "qquickitem.h" + name: "QQuickTransform" + Method { name: "update" } + } + Component { + file: "private/qquicktransition_p.h" + name: "QQuickTransition" + defaultProperty: "animations" + exports: ["QtQuick/Transition 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "from"; type: "string" } + Property { name: "to"; type: "string" } + Property { name: "reversible"; type: "bool" } + Property { name: "running"; type: "bool"; isReadonly: true } + Property { name: "animations"; type: "QQuickAbstractAnimation"; isList: true; isReadonly: true } + Property { name: "enabled"; type: "bool" } + } + Component { + file: "private/qquicktranslate_p.h" + name: "QQuickTranslate" + prototype: "QQuickTransform" + exports: ["QtQuick/Translate 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + } + Component { + file: "private/qquickanimator_p.h" + name: "QQuickUniformAnimator" + prototype: "QQuickAnimator" + exports: [ + "QtQuick/UniformAnimator 2.12", + "QtQuick/UniformAnimator 2.2" + ] + exportMetaObjectRevisions: [12, 2] + Property { name: "uniform"; type: "string" } + Signal { + name: "uniformChanged" + Parameter { type: "string" } + } + } + Component { + file: "private/qquickanimation_p.h" + name: "QQuickVector3dAnimation" + prototype: "QQuickPropertyAnimation" + exports: [ + "QtQuick/Vector3dAnimation 2.0", + "QtQuick/Vector3dAnimation 2.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "from"; type: "QVector3D" } + Property { name: "to"; type: "QVector3D" } + } + Component { + file: "private/qquicklistview_p.h" + name: "QQuickViewSection" + exports: ["QtQuick/ViewSection 2.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "SectionCriteria" + values: ["FullString", "FirstCharacter"] + } + Enum { + name: "LabelPositioning" + values: ["InlineLabels", "CurrentLabelAtStart", "NextLabelAtEnd"] + } + Property { name: "property"; type: "string" } + Property { name: "criteria"; type: "SectionCriteria" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "labelPositioning"; type: "int" } + Signal { name: "sectionsChanged" } + } + Component { + file: "private/qquickitemviewtransition_p.h" + name: "QQuickViewTransitionAttached" + exports: ["QtQuick/ViewTransition 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickViewTransitionAttached" + Property { name: "index"; type: "int"; isReadonly: true } + Property { name: "item"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "destination"; type: "QPointF"; isReadonly: true } + Property { name: "targetIndexes"; type: "QList"; isReadonly: true } + Property { name: "targetItems"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + file: "private/qquickevents_p_p.h" + name: "QQuickWheelEvent" + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "angleDelta"; type: "QPoint"; isReadonly: true } + Property { name: "pixelDelta"; type: "QPoint"; isReadonly: true } + Property { name: "buttons"; type: "int"; isReadonly: true } + Property { name: "modifiers"; type: "int"; isReadonly: true } + Property { name: "inverted"; type: "bool"; isReadonly: true } + Property { name: "accepted"; type: "bool" } + } + Component { + file: "private/qquickwheelhandler_p.h" + name: "QQuickWheelHandler" + prototype: "QQuickSinglePointHandler" + exports: ["QtQuick/WheelHandler 2.14", "QtQuick/WheelHandler 2.15"] + exportMetaObjectRevisions: [14, 15] + Property { name: "orientation"; type: "Qt::Orientation" } + Property { name: "invertible"; type: "bool" } + Property { name: "activeTimeout"; type: "double" } + Property { name: "rotation"; type: "double" } + Property { name: "rotationScale"; type: "double" } + Property { name: "property"; type: "string" } + Property { name: "targetScaleMultiplier"; type: "double" } + Property { name: "targetTransformAroundCursor"; type: "bool" } + Signal { + name: "wheel" + Parameter { name: "event"; type: "QQuickPointerScrollEvent"; isPointer: true } + } + } + Component { + file: "private/qquickanimator_p.h" + name: "QQuickXAnimator" + prototype: "QQuickAnimator" + exports: ["QtQuick/XAnimator 2.12", "QtQuick/XAnimator 2.2"] + exportMetaObjectRevisions: [12, 2] + } + Component { + file: "private/qquickanimator_p.h" + name: "QQuickYAnimator" + prototype: "QQuickAnimator" + exports: ["QtQuick/YAnimator 2.12", "QtQuick/YAnimator 2.2"] + exportMetaObjectRevisions: [12, 2] + } + Component { + file: "private/qquickforeignutils_p.h" + name: "QRegExpValidatorForeign" + exports: ["QtQuick/RegExpValidator 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + file: "private/qquickforeignutils_p.h" + name: "QRegularExpressionValidatorForeign" + exports: ["QtQuick/RegularExpressionValidator 2.14"] + isCreatable: false + exportMetaObjectRevisions: [14] + } + Component { file: "private/qquickforeignutils_p.h"; name: "QValidatorForeign" } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/qmldir new file mode 100644 index 0000000..e4e7f5d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick.2/qmldir @@ -0,0 +1,6 @@ +module QtQuick +plugin qtquick2plugin +classname QtQuick2Plugin +typeinfo plugins.qmltypes +depends QtQml 2.15 +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/AbstractButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/AbstractButton.qml new file mode 100644 index 0000000..50ddb93 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/AbstractButton.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T + +T.AbstractButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Action.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Action.qml new file mode 100644 index 0000000..996e908 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Action.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T + +T.Action { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ActionGroup.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ActionGroup.qml new file mode 100644 index 0000000..89e72c8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ActionGroup.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T + +T.ActionGroup { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ApplicationWindow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ApplicationWindow.qml new file mode 100644 index 0000000..4686a29 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ApplicationWindow.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ApplicationWindow { + id: window + + color: palette.window + + overlay.modal: Rectangle { + color: Color.transparent(window.palette.shadow, 0.5) + } + + overlay.modeless: Rectangle { + color: Color.transparent(window.palette.shadow, 0.12) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/BusyIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/BusyIndicator.qml new file mode 100644 index 0000000..ff5c191 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/BusyIndicator.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + + contentItem: BusyIndicatorImpl { + implicitWidth: 48 + implicitHeight: 48 + + pen: control.palette.dark + fill: control.palette.dark + + running: control.running + opacity: control.running ? 1 : 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Button.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Button.qml new file mode 100644 index 0000000..a9e7fce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Button.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + horizontalPadding: padding + 2 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: !control.flat || control.down || control.checked || control.highlighted + color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, + control.palette.mid, control.down ? 0.5 : 0.0) + border.color: control.palette.highlight + border.width: control.visualFocus ? 2 : 0 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ButtonGroup.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ButtonGroup.qml new file mode 100644 index 0000000..cf0355b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ButtonGroup.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T + +T.ButtonGroup { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/CheckBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/CheckBox.qml new file mode 100644 index 0000000..b1f50ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/CheckBox.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + // keep in sync with CheckDelegate.qml (shared CheckIndicator.qml was removed for performance reasons) + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + color: control.down ? control.palette.light : control.palette.base + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.palette.mid + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + defaultColor: "#353637" + color: control.palette.text + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/check.png" + visible: control.checkState === Qt.Checked + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 16 + height: 3 + color: control.palette.text + visible: control.checkState === Qt.PartiallyChecked + } + } + + contentItem: CheckLabel { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/CheckDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/CheckDelegate.qml new file mode 100644 index 0000000..71b390a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/CheckDelegate.qml @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 12 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + // keep in sync with CheckBox.qml (shared CheckIndicator.qml was removed for performance reasons) + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + color: control.down ? control.palette.light : control.palette.base + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.palette.mid + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + defaultColor: "#353637" + color: control.palette.text + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/check.png" + visible: control.checkState === Qt.Checked + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 16 + height: 3 + color: control.palette.text + visible: control.checkState === Qt.PartiallyChecked + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? control.palette.midlight : control.palette.light + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ComboBox.qml new file mode 100644 index 0000000..e9f93d6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ComboBox.qml @@ -0,0 +1,142 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Controls.impl 2.15 +import QtQuick.Templates 2.15 as T + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + delegate: ItemDelegate { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + palette.text: control.palette.text + palette.highlightedText: control.palette.highlightedText + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + color: control.palette.dark + defaultColor: "#353637" + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/double-arrow.png" + opacity: enabled ? 1 : 0.3 + } + + contentItem: T.TextField { + leftPadding: !control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1 + rightPadding: control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1 + topPadding: 6 - control.padding + bottomPadding: 6 - control.padding + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + + background: Rectangle { + visible: control.enabled && control.editable && !control.flat + border.width: parent && parent.activeFocus ? 2 : 1 + border.color: parent && parent.activeFocus ? control.palette.highlight : control.palette.button + color: control.palette.base + } + } + + background: Rectangle { + implicitWidth: 140 + implicitHeight: 40 + + color: control.down ? control.palette.mid : control.palette.button + border.color: control.palette.highlight + border.width: !control.editable && control.visualFocus ? 2 : 0 + visible: !control.flat || control.down + } + + popup: T.Popup { + y: control.height + width: control.width + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) + topMargin: 6 + bottomMargin: 6 + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + Rectangle { + z: 10 + width: parent.width + height: parent.height + color: "transparent" + border.color: control.palette.mid + } + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + color: control.palette.window + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Container.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Container.qml new file mode 100644 index 0000000..83ab957 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Container.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T + +T.Container { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Control.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Control.qml new file mode 100644 index 0000000..a963a56 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Control.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T + +T.Control { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/DelayButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/DelayButton.qml new file mode 100644 index 0000000..1c545a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/DelayButton.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + horizontalPadding: padding + 2 + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: ItemGroup { + ClippedText { + clip: control.progress > 0 + clipX: -control.leftPadding + control.progress * control.width + clipWidth: (1.0 - control.progress) * control.width + visible: control.progress < 1 + + text: control.text + font: control.font + opacity: enabled ? 1 : 0.3 + color: control.palette.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + ClippedText { + clip: control.progress > 0 + clipX: -control.leftPadding + clipWidth: control.progress * control.width + visible: control.progress > 0 + + text: control.text + font: control.font + opacity: enabled ? 1 : 0.3 + color: control.palette.brightText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + color: Color.blend(control.palette.button, control.palette.mid, control.down ? 0.5 : 0.0) + border.color: control.palette.highlight + border.width: control.visualFocus ? 2 : 0 + + PaddedRectangle { + padding: control.visualFocus ? 2 : 0 + width: control.progress * parent.width + height: parent.height + color: Color.blend(control.palette.dark, control.palette.mid, control.down ? 0.5 : 0.0) + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Dial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Dial.qml new file mode 100644 index 0000000..cc4618a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Dial.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 184 // ### remove 184 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 184 // ### remove 184 in Qt 6 + + background: DialImpl { + implicitWidth: 184 + implicitHeight: 184 + color: control.visualFocus ? control.palette.highlight : control.palette.dark + progress: control.position + opacity: control.enabled ? 1 : 0.3 + } + + handle: ColorImage { + x: control.background.x + control.background.width / 2 - control.handle.width / 2 + y: control.background.y + control.background.height / 2 - control.handle.height / 2 + width: 14 + height: 10 + defaultColor: "#353637" + color: control.visualFocus ? control.palette.highlight : control.palette.dark + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/dial-indicator.png" + antialiasing: true + opacity: control.enabled ? 1 : 0.3 + transform: [ + Translate { + y: -Math.min(control.background.width, control.background.height) * 0.4 + control.handle.height / 2 + }, + Rotation { + angle: control.angle + origin.x: control.handle.width / 2 + origin.y: control.handle.height / 2 + } + ] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Dialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Dialog.qml new file mode 100644 index 0000000..6c2e4b1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Dialog.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + padding: 12 + + background: Rectangle { + color: control.palette.window + border.color: control.palette.dark + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + font.bold: true + padding: 12 + background: Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 1 + color: control.palette.window + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.shadow, 0.5) + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent(control.palette.shadow, 0.12) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/DialogButtonBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/DialogButtonBox.qml new file mode 100644 index 0000000..cc148ac --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/DialogButtonBox.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + contentWidth: contentItem.contentWidth + + spacing: 1 + padding: 12 + alignment: count === 1 ? Qt.AlignRight : undefined + + delegate: Button { + width: control.count === 1 ? control.availableWidth / 2 : undefined + } + + contentItem: ListView { + implicitWidth: contentWidth + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: Rectangle { + implicitHeight: 40 + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + color: control.palette.window + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Drawer.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Drawer.qml new file mode 100644 index 0000000..17465fd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Drawer.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: control.edge === Qt.BottomEdge + leftPadding: control.edge === Qt.RightEdge + rightPadding: control.edge === Qt.LeftEdge + bottomPadding: control.edge === Qt.TopEdge + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: Rectangle { + color: control.palette.window + Rectangle { + readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + width: horizontal ? 1 : parent.width + height: horizontal ? parent.height : 1 + color: control.palette.dark + x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 + y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 + } + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.shadow, 0.5) + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent(control.palette.shadow, 0.12) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Frame.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Frame.qml new file mode 100644 index 0000000..2fe4610 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Frame.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: "transparent" + border.color: control.palette.mid + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ApplicationWindow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ApplicationWindow.qml new file mode 100644 index 0000000..9079403 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ApplicationWindow.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.2 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ApplicationWindow { + id: window + + color: palette.window + + overlay.modal: Rectangle { + color: Fusion.topShadow + } + + overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/BusyIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/BusyIndicator.qml new file mode 100644 index 0000000..554c336 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/BusyIndicator.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + + contentItem: BusyIndicatorImpl { + implicitWidth: 28 + implicitHeight: 28 + color: control.palette.text + + running: control.running + opacity: control.running ? 1 : 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + + RotationAnimator on rotation { + running: control.running || contentItem.visible + from: 0 + to: 360 + duration: 1000 + loops: Animation.Infinite + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Button.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Button.qml new file mode 100644 index 0000000..7822634 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Button.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 4 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: ButtonPanel { + implicitWidth: 80 + implicitHeight: 24 + + control: control + visible: !control.flat || control.down || control.checked || control.highlighted || control.visualFocus || control.hovered + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ButtonPanel.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ButtonPanel.qml new file mode 100644 index 0000000..125aa2f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ButtonPanel.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +Rectangle { + id: panel + + property Item control + property bool highlighted: control.highlighted + + visible: !control.flat || control.down || control.checked + + color: Fusion.buttonColor(control.palette, panel.highlighted, control.down || control.checked, control.hovered) + gradient: control.down || control.checked ? null : buttonGradient + + Gradient { + id: buttonGradient + GradientStop { + position: 0 + color: Fusion.gradientStart(Fusion.buttonColor(panel.control.palette, panel.highlighted, panel.control.down, panel.control.hovered)) + } + GradientStop { + position: 1 + color: Fusion.gradientStop(Fusion.buttonColor(panel.control.palette, panel.highlighted, panel.control.down, panel.control.hovered)) + } + } + + radius: 2 + border.color: Fusion.buttonOutline(control.palette, panel.highlighted || control.visualFocus, control.enabled) + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + border.color: Fusion.innerContrastLine + color: "transparent" + radius: 2 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckBox.qml new file mode 100644 index 0000000..edb4c77 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckBox.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckDelegate.qml new file mode 100644 index 0000000..1b97b1f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckDelegate.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + indicator: CheckIndicator { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + control: control + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckIndicator.qml new file mode 100644 index 0000000..7dcfee3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/CheckIndicator.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +Rectangle { + id: indicator + + property Item control + readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) + readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) + + implicitWidth: 14 + implicitHeight: 14 + + color: control.down ? indicator.pressedColor : control.palette.base + border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette) + : Qt.lighter(Fusion.outline(control.palette), 1.1) + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: 1 + color: Fusion.topShadow + visible: indicator.control.enabled && !indicator.control.down + } + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + color: Color.transparent(indicator.checkMarkColor, 210 / 255) + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Fusion/images/checkmark.png" + visible: indicator.control.checkState === Qt.Checked || (indicator.control.checked && indicator.control.checkState === undefined) + } + + Rectangle { + x: 3; y: 3 + width: parent.width - 6 + height: parent.width - 6 + + visible: indicator.control.checkState === Qt.PartiallyChecked + + gradient: Gradient { + GradientStop { + position: 0 + color: Color.transparent(indicator.checkMarkColor, 80 / 255) + } + GradientStop { + position: 1 + color: Color.transparent(indicator.checkMarkColor, 140 / 255) + } + } + border.color: Color.transparent(indicator.checkMarkColor, 180 / 255) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ComboBox.qml new file mode 100644 index 0000000..5e26f90 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ComboBox.qml @@ -0,0 +1,176 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Templates 2.15 as T +import QtQuick.Controls 2.15 +import QtQuick.Controls.impl 2.15 +import QtQuick.Controls.Fusion 2.15 +import QtQuick.Controls.Fusion.impl 2.15 + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + delegate: MenuItem { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + color: control.editable ? control.palette.text : control.palette.buttonText + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Fusion/images/arrow.png" + width: 20 + fillMode: Image.Pad + } + + contentItem: T.TextField { + topPadding: 4 + leftPadding: 4 - control.padding + rightPadding: 4 - control.padding + bottomPadding: 4 + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + + background: PaddedRectangle { + clip: true + radius: 2 + padding: 1 + leftPadding: control.mirrored ? -2 : padding + rightPadding: !control.mirrored ? -2 : padding + color: control.palette.base + visible: control.editable && !control.flat + + Rectangle { + x: parent.width - width + y: 1 + width: 1 + height: parent.height - 2 + color: Fusion.buttonOutline(control.palette, control.activeFocus, control.enabled) + } + + Rectangle { + x: 1 + y: 1 + width: parent.width - 3 + height: 1 + color: Fusion.topShadow + } + } + + Rectangle { + x: 1 - control.leftPadding + y: 1 + width: control.width - 2 + height: control.height - 2 + color: "transparent" + border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) + visible: control.activeFocus + radius: 1.7 + } + } + + background: ButtonPanel { + implicitWidth: 120 + implicitHeight: 24 + + control: control + visible: !control.flat || control.down + // ### TODO: fix control.contentItem.activeFocus + highlighted: control.visualFocus || control.contentItem.activeFocus + } + + popup: T.Popup { + width: control.width + height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin) + topMargin: 6 + bottomMargin: 6 + palette: control.palette + padding: 1 + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightRangeMode: ListView.ApplyRange + highlightMoveDuration: 0 + + T.ScrollBar.vertical: ScrollBar { } + } + + background: Rectangle { + color: control.popup.palette.window + border.color: Fusion.outline(control.palette) + + Rectangle { + z: -1 + x: 1; y: 1 + width: parent.width + height: parent.height + color: control.palette.shadow + opacity: 0.2 + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/DelayButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/DelayButton.qml new file mode 100644 index 0000000..622de11 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/DelayButton.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: ItemGroup { + ClippedText { + clip: control.progress > 0 + clipX: -control.leftPadding + (control.mirrored ? 0 : control.progress * control.width) + clipWidth: control.width + visible: control.mirrored ? control.progress > 0 : control.progress < 1 + + text: control.text + font: control.font + color: control.mirrored ? control.palette.brightText : control.palette.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + ClippedText { + clip: control.progress > 0 + clipX: -control.leftPadding + clipWidth: (control.mirrored ? 1.0 - control.progress : control.progress) * control.width + visible: control.mirrored ? control.progress < 1 : control.progress > 0 + + text: control.text + font: control.font + color: control.mirrored ? control.palette.buttonText : control.palette.brightText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + } + + background: ButtonPanel { + implicitWidth: 80 + implicitHeight: 24 + + control: control + highlighted: false + scale: control.mirrored ? -1 : 1 + + Rectangle { + width: control.progress * parent.width + height: parent.height + + radius: 2 + border.color: Qt.darker(Fusion.highlight(control.palette), 1.4) + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.lighter(Fusion.highlight(control.palette), 1.2) + } + GradientStop { + position: 1 + color: Fusion.highlight(control.palette) + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Dial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Dial.qml new file mode 100644 index 0000000..a133724 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Dial.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 100 // ### remove 100 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 100 // ### remove 100 in Qt 6 + + background: DialImpl { + implicitWidth: 100 + implicitHeight: 100 + palette: control.palette + highlight: control.visualFocus + } + + handle: KnobImpl { + x: control.background.x + control.background.width / 2 - control.handle.width / 2 + y: control.background.y + control.background.height / 2 - control.handle.height / 2 + width: control.width / 7 + height: control.height / 7 + palette: control.palette + transform: [ + Translate { + y: -Math.min(control.background.width, control.background.height) * 0.42 + control.handle.height + }, + Rotation { + angle: control.angle + origin.x: control.handle.width / 2 + origin.y: control.handle.height / 2 + } + ] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Dialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Dialog.qml new file mode 100644 index 0000000..79e179d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Dialog.qml @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + padding: 6 + + background: Rectangle { + color: control.palette.window + border.color: control.palette.mid + radius: 2 + + Rectangle { + z: -1 + x: 1; y: 1 + width: parent.width + height: parent.height + color: control.palette.shadow + opacity: 0.2 + radius: 2 + } + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + font.bold: true + padding: 6 + background: Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 1 + color: control.palette.window + radius: 2 + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: Fusion.topShadow + } + + T.Overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/DialogButtonBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/DialogButtonBox.qml new file mode 100644 index 0000000..4673e42 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/DialogButtonBox.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 6 + alignment: Qt.AlignRight + + delegate: Button { } + + contentItem: ListView { + implicitWidth: contentWidth + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: Rectangle { + implicitHeight: 32 + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + color: control.palette.window + radius: 2 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Drawer.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Drawer.qml new file mode 100644 index 0000000..5a23dde --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Drawer.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: control.edge === Qt.BottomEdge + leftPadding: control.edge === Qt.RightEdge + rightPadding: control.edge === Qt.LeftEdge + bottomPadding: control.edge === Qt.TopEdge + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: Rectangle { + color: control.palette.window + readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + Rectangle { + width: parent.horizontal ? 1 : parent.width + height: parent.horizontal ? parent.height : 1 + color: control.palette.mid + x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 + y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 + } + Rectangle { + width: parent.horizontal ? 1 : parent.width + height: parent.horizontal ? parent.height : 1 + color: control.palette.shadow + opacity: 0.2 + x: control.edge === Qt.LeftEdge ? parent.width : 0 + y: control.edge === Qt.TopEdge ? parent.height : 0 + } + } + + T.Overlay.modal: Rectangle { + color: Fusion.topShadow + } + + T.Overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Frame.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Frame.qml new file mode 100644 index 0000000..c2df635 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Frame.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 9 + + background: Rectangle { + color: "transparent" + border.color: Qt.lighter(Fusion.outline(control.palette), 1.08) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/GroupBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/GroupBox.qml new file mode 100644 index 0000000..3df3e1e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/GroupBox.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 9 + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + + radius: 2 + color: Color.transparent("black", 3 / 255) + border.color: Qt.lighter(Fusion.outline(control.palette), 1.08) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/HorizontalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/HorizontalHeaderView.qml new file mode 100644 index 0000000..bbd9dc3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/HorizontalHeaderView.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Templates 2.15 as T + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + border.color: "#cacaca" + + gradient: Gradient { + GradientStop { + position: 0 + color: "#fbfbfb" + } + GradientStop { + position: 1 + color: "#e0dfe0" + } + } + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ItemDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ItemDelegate.qml new file mode 100644 index 0000000..4c15ae6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ItemDelegate.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Label.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Label.qml new file mode 100644 index 0000000..9821f71 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Label.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Label { + id: control + + color: control.palette.windowText + linkColor: control.palette.link +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Menu.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Menu.qml new file mode 100644 index 0000000..8bace6b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Menu.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 +import QtQuick.Window 2.12 + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 0 + padding: 1 + overlap: 2 + + delegate: MenuItem { } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + ScrollIndicator.vertical: ScrollIndicator {} + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 20 + + color: control.palette.base + border.color: Fusion.outline(control.palette) + + Rectangle { + z: -1 + x: 1; y: 1 + width: parent.width + height: parent.height + color: control.palette.shadow + opacity: 0.2 + } + } + + T.Overlay.modal: Rectangle { + color: Fusion.topShadow + } + + T.Overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuBar.qml new file mode 100644 index 0000000..4ba71fe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuBar.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + implicitHeight: 20 + + color: control.palette.window + + Rectangle { + y: parent.height - height + width: parent.width + height: 1 + color: Fusion.mergedColors(Qt.darker(control.palette.window, 1.2), + Qt.lighter(Fusion.outline(control.palette), 1.4), 60) + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuBarItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuBarItem.qml new file mode 100644 index 0000000..9fa685d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuBarItem.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + background: Rectangle { + implicitWidth: 20 + implicitHeight: 20 + + color: Fusion.highlight(control.palette) + visible: control.down || control.highlighted + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuItem.qml new file mode 100644 index 0000000..a428fbc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuItem.qml @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + arrow: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + width: 20 + + visible: control.subMenu + rotation: control.mirrored ? 90 : -90 + color: control.down || control.hovered || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Fusion/images/arrow.png" + fillMode: Image.Pad + } + + indicator: CheckIndicator { + x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + control: control + visible: control.checkable + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 20 + + color: Fusion.highlight(control.palette) + visible: control.down || control.highlighted + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuSeparator.qml new file mode 100644 index 0000000..522ada1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/MenuSeparator.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 5 + verticalPadding: 1 + + contentItem: Rectangle { + implicitWidth: 188 + implicitHeight: 1 + color: Qt.lighter(Fusion.darkShade, 1.06) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Page.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Page.qml new file mode 100644 index 0000000..ce4b1d5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Page.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + background: Rectangle { + color: control.palette.window + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/PageIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/PageIndicator.qml new file mode 100644 index 0000000..5679b14 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/PageIndicator.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 4 + spacing: 4 + + delegate: Rectangle { + implicitWidth: 6 + implicitHeight: 6 + + radius: width / 2 + color: control.palette.shadow + + opacity: index === currentIndex ? 0.95 : pressed ? 0.75 : 0.45 + Behavior on opacity { OpacityAnimator { duration: 100 } } + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Pane.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Pane.qml new file mode 100644 index 0000000..28be3b4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Pane.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 9 + + background: Rectangle { + color: control.palette.window + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Popup.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Popup.qml new file mode 100644 index 0000000..25a8c5a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Popup.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 6 + + background: Rectangle { + color: control.palette.window + border.color: control.palette.mid + radius: 2 + } + + T.Overlay.modal: Rectangle { + color: Fusion.topShadow + } + + T.Overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ProgressBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ProgressBar.qml new file mode 100644 index 0000000..5deade5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ProgressBar.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: Item { + implicitWidth: 120 + implicitHeight: 24 + scale: control.mirrored ? -1 : 1 + + Rectangle { + height: parent.height + width: (control.indeterminate ? 1.0 : control.position) * parent.width + + radius: 2 + border.color: Qt.darker(Fusion.highlight(control.palette), 1.4) + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.lighter(Fusion.highlight(control.palette), 1.2) + } + GradientStop { + position: 1 + color: Fusion.highlight(control.palette) + } + } + } + + Item { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + visible: control.indeterminate + clip: true + + ColorImage { + width: Math.ceil(parent.width / implicitWidth + 1) * implicitWidth + height: parent.height + + mirror: control.mirrored + fillMode: Image.TileHorizontally + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Fusion/images/progressmask.png" + color: Color.transparent(Qt.lighter(Fusion.highlight(control.palette), 1.2), 160 / 255) + + visible: control.indeterminate + NumberAnimation on x { + running: control.indeterminate && control.visible + from: -31 // progressmask.png width + to: 0 + loops: Animation.Infinite + duration: 750 + } + } + } + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 24 + + radius: 2 + color: control.palette.base + border.color: Fusion.outline(control.palette) + + Rectangle { + x: 1; y: 1; height: 1 + width: parent.width - 2 + color: Fusion.topShadow + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioButton.qml new file mode 100644 index 0000000..a940aff --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioButton.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioDelegate.qml new file mode 100644 index 0000000..e8555a1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioDelegate.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + indicator: RadioIndicator { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + control: control + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioIndicator.qml new file mode 100644 index 0000000..c73cd49 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RadioIndicator.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +Rectangle { + id: indicator + + property Item control + readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) + readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) + + implicitWidth: 14 + implicitHeight: 14 + + radius: width / 2 + color: control.down ? indicator.pressedColor : control.palette.base + border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette) + : Qt.darker(control.palette.window, 1.5) + + Rectangle { + y: 1 + width: parent.width + height: parent.height - 1 + radius: width / 2 + color: "transparent" + border.color: Fusion.topShadow + visible: indicator.control.enabled && !indicator.control.down + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 2.32 + height: parent.height / 2.32 + radius: width / 2 + color: Color.transparent(indicator.checkMarkColor, 180 / 255) + border.color: Color.transparent(indicator.checkMarkColor, 200 / 255) + visible: indicator.control.checked + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RangeSlider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RangeSlider.qml new file mode 100644 index 0000000..7edbed5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RangeSlider.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + Math.max(first.implicitHandleWidth, + second.implicitHandleWidth) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + Math.max(first.implicitHandleHeight, + second.implicitHandleHeight) + topPadding + bottomPadding) + + first.handle: SliderHandle { + x: control.leftPadding + Math.round(control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + + palette: control.palette + pressed: control.first.pressed + hovered: control.first.hovered + vertical: control.vertical + visualFocus: activeFocus + } + + second.handle: SliderHandle { + x: control.leftPadding + Math.round(control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + + palette: control.palette + pressed: control.second.pressed + hovered: control.second.hovered + vertical: control.vertical + visualFocus: activeFocus + } + + background: SliderGroove { + control: control + offset: control.first.position + progress: control.second.position + visualProgress: control.second.visualPosition + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RoundButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RoundButton.qml new file mode 100644 index 0000000..59bf4c1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/RoundButton.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 32 + implicitHeight: 32 + visible: !control.flat || control.down || control.checked + + gradient: Gradient { + GradientStop { + position: 0 + color: control.down || control.checked ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.hovered) + : Fusion.gradientStart(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.hovered)) + } + GradientStop { + position: 1 + color: control.down || control.checked ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.hovered) + : Fusion.gradientStop(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.hovered)) + } + } + + radius: control.radius + border.color: Fusion.buttonOutline(control.palette, control.highlighted || control.visualFocus, control.enabled) + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + border.color: Fusion.innerContrastLine + color: "transparent" + radius: control.radius + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ScrollBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ScrollBar.qml new file mode 100644 index 0000000..93b58f0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ScrollBar.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + contentItem: Rectangle { + implicitWidth: control.interactive ? 6 : 2 + implicitHeight: control.interactive ? 6 : 2 + + radius: width / 2 + color: control.pressed ? control.palette.dark : control.palette.mid + opacity: 0.0 + + states: State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + PropertyChanges { target: control.contentItem; opacity: 0.75 } + } + + transitions: Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 450 } + NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ScrollIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ScrollIndicator.qml new file mode 100644 index 0000000..efe0b2f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ScrollIndicator.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + + contentItem: Rectangle { + implicitWidth: 2 + implicitHeight: 2 + + color: control.palette.mid + visible: control.size < 1.0 + opacity: 0.0 + + states: State { + name: "active" + when: control.active + PropertyChanges { target: control.contentItem; opacity: 0.75 } + } + + transitions: [ + Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 450 } + NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } + } + } + ] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Slider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Slider.qml new file mode 100644 index 0000000..d212a23 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Slider.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + handle: SliderHandle { + x: control.leftPadding + Math.round(control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + + palette: control.palette + pressed: control.pressed + hovered: control.hovered + vertical: control.vertical + visualFocus: control.visualFocus + } + + background: SliderGroove { + control: control + progress: control.position + visualProgress: control.visualPosition + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SliderGroove.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SliderGroove.qml new file mode 100644 index 0000000..381a02b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SliderGroove.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +Rectangle { + id: groove + + property Item control + property real offset + property real progress + property real visualProgress + + x: control.horizontal ? 0 : (control.availableWidth - width) / 2 + y: control.horizontal ? (control.availableHeight - height) / 2 : 0 + + implicitWidth: control.horizontal ? 160 : 5 + implicitHeight: control.horizontal ? 5 : 160 + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + + radius: 2 + border.color: Fusion.outline(control.palette) + scale: control.horizontal && control.mirrored ? -1 : 1 + + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.darker(Fusion.grooveColor(groove.control.palette), 1.1) + } + GradientStop { + position: 1 + color: Qt.lighter(Fusion.grooveColor(groove.control.palette), 1.1) + } + } + + Rectangle { + x: groove.control.horizontal ? groove.offset * parent.width : 0 + y: groove.control.horizontal ? 0 : groove.visualProgress * parent.height + width: groove.control.horizontal ? groove.progress * parent.width - groove.offset * parent.width : 5 + height: groove.control.horizontal ? 5 : groove.progress * parent.height - groove.offset * parent.height + + radius: 2 + border.color: Qt.darker(Fusion.highlightedOutline(groove.control.palette), 1.1) + + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.highlight(groove.control.palette) + } + GradientStop { + position: 1 + color: Qt.lighter(Fusion.highlight(groove.control.palette), 1.2) + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SliderHandle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SliderHandle.qml new file mode 100644 index 0000000..c53af57 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SliderHandle.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +Rectangle { + id: handle + + property var palette + property bool pressed + property bool hovered + property bool vertical + property bool visualFocus + + implicitWidth: 13 + implicitHeight: 13 + + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.gradientStart(Fusion.buttonColor(handle.palette, handle.visualFocus, handle.pressed, handle.hovered)) + } + GradientStop { + position: 1 + color: Fusion.gradientStop(Fusion.buttonColor(handle.palette, handle.visualFocus, handle.pressed, handle.hovered)) + } + } + rotation: handle.vertical ? -90 : 0 + border.width: 1 + border.color: "transparent" + radius: 2 + + Rectangle { + width: parent.width + height: parent.height + border.color: handle.visualFocus ? Fusion.highlightedOutline(handle.palette) : Fusion.outline(handle.palette) + color: "transparent" + radius: 2 + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + border.color: Fusion.innerContrastLine + color: "transparent" + radius: 2 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SpinBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SpinBox.qml new file mode 100644 index 0000000..41754f6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SpinBox.qml @@ -0,0 +1,182 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 2 * padding + + Math.max(up.implicitIndicatorWidth, + down.implicitIndicatorWidth)) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight + + down.implicitIndicatorHeight) + + padding: 4 + leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + z: 2 + text: control.displayText + + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + } + + up.indicator: PaddedRectangle { + x: control.mirrored ? 1 : parent.width - width - 1 + y: 1 + height: parent.height / 2 - 1 + implicitWidth: 16 + implicitHeight: 10 + + radius: 1.7 + clip: true + topPadding: -2 + leftPadding: -2 + color: control.up.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent" + + ColorImage { + scale: -1 + width: parent.width + height: parent.height + opacity: enabled ? 1.0 : 0.5 + color: control.palette.buttonText + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Fusion/images/arrow.png" + fillMode: Image.Pad + } + } + + down.indicator: PaddedRectangle { + x: control.mirrored ? 1 : parent.width - width - 1 + y: parent.height - height - 1 + height: parent.height / 2 - 1 + implicitWidth: 16 + implicitHeight: 10 + + radius: 1.7 + clip: true + topPadding: -2 + leftPadding: -2 + color: control.down.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent" + + ColorImage { + width: parent.width + height: parent.height + opacity: enabled ? 1.0 : 0.5 + color: control.palette.buttonText + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Fusion/images/arrow.png" + fillMode: Image.Pad + } + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 24 + + radius: 2 + color: control.palette.base + border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette) + + Rectangle { + x: 2 + y: 1 + width: parent.width - 4 + height: 1 + color: Fusion.topShadow + } + + Rectangle { + x: control.mirrored ? 1 : parent.width - width - 1 + y: 1 + width: Math.max(control.up.indicator ? control.up.indicator.width : 0, + control.down.indicator ? control.down.indicator.width : 0) + 1 + height: parent.height - 2 + + radius: 2 + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.gradientStart(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered)) + } + GradientStop { + position: 1 + color: Fusion.gradientStop(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered)) + } + } + + Rectangle { + x: control.mirrored ? parent.width - 1 : 0 + height: parent.height + width: 1 + color: Fusion.outline(control.palette) + } + } + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + color: "transparent" + border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) + visible: control.activeFocus + radius: 1.7 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SplitView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SplitView.qml new file mode 100644 index 0000000..6a04b4d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SplitView.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.13 +import QtQuick.Templates 2.13 as T +import QtQuick.Controls 2.13 +import QtQuick.Controls.impl 2.13 +import QtQuick.Controls.Fusion 2.13 + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 2 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 2 + color: T.SplitHandle.pressed ? palette.dark + : (T.SplitHandle.hovered ? control.palette.midlight : control.palette.mid) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwipeDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwipeDelegate.qml new file mode 100644 index 0000000..48c531e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwipeDelegate.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Switch.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Switch.qml new file mode 100644 index 0000000..bf18003 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Switch.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.text + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwitchDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwitchDelegate.qml new file mode 100644 index 0000000..67c4192 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwitchDelegate.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwitchIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwitchIndicator.qml new file mode 100644 index 0000000..ae7c89a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/SwitchIndicator.qml @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +Rectangle { + id: indicator + + property Item control + readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) + readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) + + implicitWidth: 40 + implicitHeight: 16 + + radius: 2 + border.color: Fusion.outline(control.palette) + + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.darker(Fusion.grooveColor(indicator.control.palette), 1.1) + } + GradientStop { + position: 1 + color: Qt.lighter(Fusion.grooveColor(indicator.control.palette), 1.1) + } + } + + Rectangle { + x: indicator.control.mirrored ? handle.x : 0 + width: indicator.control.mirrored ? parent.width - handle.x : handle.x + handle.width + height: parent.height + + opacity: indicator.control.checked ? 1 : 0 + Behavior on opacity { + enabled: !indicator.control.down + NumberAnimation { duration: 80 } + } + + radius: 2 + border.color: Qt.darker(Fusion.highlightedOutline(indicator.control.palette), 1.1) + border.width: indicator.control.enabled ? 1 : 0 + + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.highlight(indicator.control.palette) + } + GradientStop { + position: 1 + color: Qt.lighter(Fusion.highlight(indicator.control.palette), 1.2) + } + } + } + + Rectangle { + id: handle + x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + width: 20 + height: 16 + radius: 2 + + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.gradientStart(Fusion.buttonColor(indicator.control.palette, indicator.control.visualFocus, indicator.control.pressed, indicator.control.hovered)) + } + GradientStop { + position: 1 + color: Fusion.gradientStop(Fusion.buttonColor(indicator.control.palette, indicator.control.visualFocus, indicator.control.pressed, indicator.control.hovered)) + } + } + border.width: 1 + border.color: "transparent" + + Rectangle { + width: parent.width + height: parent.height + border.color: indicator.control.visualFocus ? Fusion.highlightedOutline(indicator.control.palette) : Fusion.outline(indicator.control.palette) + color: "transparent" + radius: 2 + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + border.color: Fusion.innerContrastLine + color: "transparent" + radius: 2 + } + } + + Behavior on x { + enabled: !indicator.control.down + SmoothedAnimation { velocity: 200 } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TabBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TabBar.qml new file mode 100644 index 0000000..233a2ac --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TabBar.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: -1 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 0 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 40 + preferredHighlightEnd: width - 40 + } + + background: Item { + implicitHeight: 21 + + Rectangle { + width: parent.width + height: 1 + y: control.position === T.TabBar.Header ? parent.height - 1 : 0 + color: Fusion.outline(control.palette) + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TabButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TabButton.qml new file mode 100644 index 0000000..136503b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TabButton.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + horizontalPadding: 4 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + z: checked + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: Rectangle { + y: control.checked || control.TabBar.position !== T.TabBar.Header ? 0 : 2 + implicitHeight: 21 + height: control.height - (control.checked ? 0 : 2) + + border.color: Qt.lighter(Fusion.outline(control.palette), 1.1) + + gradient: Gradient { + GradientStop { + position: 0 + color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04) + : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08) + } + GradientStop { + position: control.checked ? 0 : 0.85 + color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04) + : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08) + } + GradientStop { + position: 1 + color: control.checked ? Fusion.tabFrameColor(control.palette) + : Qt.darker(Fusion.tabFrameColor(control.palette), 1.16) + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TextArea.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TextArea.qml new file mode 100644 index 0000000..c7107ac --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TextArea.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 6 + leftPadding: padding + 4 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TextField.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TextField.qml new file mode 100644 index 0000000..d5b5788 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/TextField.qml @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 4 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + verticalAlignment: TextInput.AlignVCenter + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 24 + + radius: 2 + color: control.palette.base + border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette) + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + color: "transparent" + border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) + visible: control.activeFocus + radius: 1.7 + } + + Rectangle { + x: 2 + y: 1 + width: parent.width - 4 + height: 1 + color: Fusion.topShadow + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolBar.qml new file mode 100644 index 0000000..fa069c0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolBar.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + horizontalPadding: 6 + topPadding: control.position === T.ToolBar.Footer ? 1 : 0 + bottomPadding: control.position === T.ToolBar.Header ? 1 : 0 + + background: Rectangle { + implicitHeight: 26 + + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.lighter(control.palette.window, 1.04) + } + GradientStop { + position: 1 + color: control.palette.window + } + } + + Rectangle { + width: parent.width + height: 1 + color: control.position === T.ToolBar.Header ? Fusion.lightShade : Fusion.darkShade + } + + Rectangle { + y: parent.height - height + width: parent.width + height: 1 + color: control.position === T.ToolBar.Header ? Fusion.darkShade : Fusion.lightShade + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolButton.qml new file mode 100644 index 0000000..4c00b40 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolButton.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: ButtonPanel { + implicitWidth: 20 + implicitHeight: 20 + + control: control + visible: control.down || control.checked || control.highlighted || control.visualFocus || control.hovered + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolSeparator.qml new file mode 100644 index 0000000..5d36665 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolSeparator.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: vertical ? 6 : 2 + verticalPadding: vertical ? 2 : 6 + + contentItem: Rectangle { + implicitWidth: vertical ? 2 : 8 + implicitHeight: vertical ? 8 : 2 + color: Qt.darker(control.palette.window, 1.1) + + Rectangle { + x: 1 + width: 1 + height: parent.height + color: Qt.lighter(control.palette.window, 1.1) + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolTip.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolTip.qml new file mode 100644 index 0000000..b505e2c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/ToolTip.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 3 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 6 + padding: 6 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + color: control.palette.toolTipText + } + + background: Rectangle { + color: control.palette.toolTipBase + border.color: control.palette.toolTipText + + Rectangle { + z: -1 + x: 1; y: 1 + width: parent.width + height: parent.height + color: control.palette.shadow + opacity: 0.5 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Tumbler.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Tumbler.qml new file mode 100644 index 0000000..0129f06 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/Tumbler.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Fusion 2.12 +import QtQuick.Controls.Fusion.impl 2.12 + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 60 // ### remove 60 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 200 // ### remove 200 in Qt 6 + + delegate: Text { + text: modelData + color: control.palette.windowText + font: control.font + opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/VerticalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/VerticalHeaderView.qml new file mode 100644 index 0000000..b220cdf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/VerticalHeaderView.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Templates 2.15 as T + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + border.color: "#cacaca" + + gradient: Gradient { + GradientStop { + position: 0 + color: "#fbfbfb" + } + GradientStop { + position: 1 + color: "#e0dfe0" + } + } + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/libqtquickcontrols2fusionstyleplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/libqtquickcontrols2fusionstyleplugin.so new file mode 100755 index 0000000..a4ca935 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/libqtquickcontrols2fusionstyleplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/plugins.qmltypes new file mode 100644 index 0000000..681b8b9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/plugins.qmltypes @@ -0,0 +1,414 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Controls.Fusion 2.15' + +Module { + dependencies: ["QtQuick.Controls 2.0"] + Component { + name: "QQuickFusionBusyIndicator" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtQuick.Controls.Fusion.impl/BusyIndicatorImpl 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "color"; type: "QColor" } + Property { name: "running"; type: "bool" } + } + Component { + name: "QQuickFusionDial" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtQuick.Controls.Fusion.impl/DialImpl 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "highlight"; type: "bool" } + Property { name: "palette"; type: "QPalette" } + } + Component { + name: "QQuickFusionKnob" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtQuick.Controls.Fusion.impl/KnobImpl 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "palette"; type: "QPalette" } + } + Component { + name: "QQuickFusionStyle" + prototype: "QObject" + exports: ["QtQuick.Controls.Fusion.impl/Fusion 2.3"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Property { name: "lightShade"; type: "QColor"; isReadonly: true } + Property { name: "darkShade"; type: "QColor"; isReadonly: true } + Property { name: "topShadow"; type: "QColor"; isReadonly: true } + Property { name: "innerContrastLine"; type: "QColor"; isReadonly: true } + Method { + name: "highlight" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + } + Method { + name: "highlightedText" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + } + Method { + name: "outline" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + } + Method { + name: "highlightedOutline" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + } + Method { + name: "tabFrameColor" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + } + Method { + name: "buttonColor" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + Parameter { name: "highlighted"; type: "bool" } + Parameter { name: "down"; type: "bool" } + Parameter { name: "hovered"; type: "bool" } + } + Method { + name: "buttonColor" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + Parameter { name: "highlighted"; type: "bool" } + Parameter { name: "down"; type: "bool" } + } + Method { + name: "buttonColor" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + Parameter { name: "highlighted"; type: "bool" } + } + Method { + name: "buttonColor" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + } + Method { + name: "buttonOutline" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + Parameter { name: "highlighted"; type: "bool" } + Parameter { name: "enabled"; type: "bool" } + } + Method { + name: "buttonOutline" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + Parameter { name: "highlighted"; type: "bool" } + } + Method { + name: "buttonOutline" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + } + Method { + name: "gradientStart" + type: "QColor" + Parameter { name: "baseColor"; type: "QColor" } + } + Method { + name: "gradientStop" + type: "QColor" + Parameter { name: "baseColor"; type: "QColor" } + } + Method { + name: "mergedColors" + type: "QColor" + Parameter { name: "colorA"; type: "QColor" } + Parameter { name: "colorB"; type: "QColor" } + Parameter { name: "factor"; type: "int" } + } + Method { + name: "mergedColors" + type: "QColor" + Parameter { name: "colorA"; type: "QColor" } + Parameter { name: "colorB"; type: "QColor" } + } + Method { + name: "grooveColor" + type: "QColor" + Parameter { name: "palette"; type: "QPalette" } + } + } + Component { + name: "QQuickItem" + defaultProperty: "data" + prototype: "QObject" + Enum { + name: "Flags" + values: { + "ItemClipsChildrenToShape": 1, + "ItemAcceptsInputMethod": 2, + "ItemIsFocusScope": 4, + "ItemHasContents": 8, + "ItemAcceptsDrops": 16 + } + } + Enum { + name: "TransformOrigin" + values: { + "TopLeft": 0, + "Top": 1, + "TopRight": 2, + "Left": 3, + "Center": 4, + "Right": 5, + "BottomLeft": 6, + "Bottom": 7, + "BottomRight": 8 + } + } + Property { name: "parent"; type: "QQuickItem"; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "resources"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "children"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "z"; type: "double" } + Property { name: "width"; type: "double" } + Property { name: "height"; type: "double" } + Property { name: "opacity"; type: "double" } + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "visibleChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "states"; type: "QQuickState"; isList: true; isReadonly: true } + Property { name: "transitions"; type: "QQuickTransition"; isList: true; isReadonly: true } + Property { name: "state"; type: "string" } + Property { name: "childrenRect"; type: "QRectF"; isReadonly: true } + Property { name: "anchors"; type: "QQuickAnchors"; isReadonly: true; isPointer: true } + Property { name: "left"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "right"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "horizontalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "top"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "bottom"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "verticalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baseline"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baselineOffset"; type: "double" } + Property { name: "clip"; type: "bool" } + Property { name: "focus"; type: "bool" } + Property { name: "activeFocus"; type: "bool"; isReadonly: true } + Property { name: "activeFocusOnTab"; revision: 1; type: "bool" } + Property { name: "rotation"; type: "double" } + Property { name: "scale"; type: "double" } + Property { name: "transformOrigin"; type: "TransformOrigin" } + Property { name: "transformOriginPoint"; type: "QPointF"; isReadonly: true } + Property { name: "transform"; type: "QQuickTransform"; isList: true; isReadonly: true } + Property { name: "smooth"; type: "bool" } + Property { name: "antialiasing"; type: "bool" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "containmentMask"; revision: 11; type: "QObject"; isPointer: true } + Property { name: "layer"; type: "QQuickItemLayer"; isReadonly: true; isPointer: true } + Signal { + name: "childrenRectChanged" + Parameter { type: "QRectF" } + } + Signal { + name: "baselineOffsetChanged" + Parameter { type: "double" } + } + Signal { + name: "stateChanged" + Parameter { type: "string" } + } + Signal { + name: "focusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusOnTabChanged" + revision: 1 + Parameter { type: "bool" } + } + Signal { + name: "parentChanged" + Parameter { type: "QQuickItem"; isPointer: true } + } + Signal { + name: "transformOriginChanged" + Parameter { type: "TransformOrigin" } + } + Signal { + name: "smoothChanged" + Parameter { type: "bool" } + } + Signal { + name: "antialiasingChanged" + Parameter { type: "bool" } + } + Signal { + name: "clipChanged" + Parameter { type: "bool" } + } + Signal { + name: "windowChanged" + revision: 1 + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Signal { name: "containmentMaskChanged"; revision: 11 } + Method { name: "update" } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + Parameter { name: "targetSize"; type: "QSize" } + } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + } + Method { + name: "contains" + type: "bool" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapFromItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapFromGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { name: "forceActiveFocus" } + Method { + name: "forceActiveFocus" + Parameter { name: "reason"; type: "Qt::FocusReason" } + } + Method { + name: "nextItemInFocusChain" + revision: 1 + type: "QQuickItem*" + Parameter { name: "forward"; type: "bool" } + } + Method { name: "nextItemInFocusChain"; revision: 1; type: "QQuickItem*" } + Method { + name: "childAt" + type: "QQuickItem*" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + name: "QQuickPaintedItem" + defaultProperty: "data" + prototype: "QQuickItem" + Enum { + name: "RenderTarget" + values: { + "Image": 0, + "FramebufferObject": 1, + "InvertedYFramebufferObject": 2 + } + } + Enum { + name: "PerformanceHints" + values: { + "FastFBOResizing": 1 + } + } + Property { name: "contentsSize"; type: "QSize" } + Property { name: "fillColor"; type: "QColor" } + Property { name: "contentsScale"; type: "double" } + Property { name: "renderTarget"; type: "RenderTarget" } + Property { name: "textureSize"; type: "QSize" } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Fusion.impl/ButtonPanel 2.3" + exports: ["QtQuick.Controls.Fusion.impl/ButtonPanel 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "highlighted"; type: "bool" } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Fusion.impl/CheckIndicator 2.3" + exports: ["QtQuick.Controls.Fusion.impl/CheckIndicator 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "pressedColor"; type: "QColor"; isReadonly: true } + Property { name: "checkMarkColor"; type: "QColor"; isReadonly: true } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Fusion.impl/RadioIndicator 2.3" + exports: ["QtQuick.Controls.Fusion.impl/RadioIndicator 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "pressedColor"; type: "QColor"; isReadonly: true } + Property { name: "checkMarkColor"; type: "QColor"; isReadonly: true } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Fusion.impl/SliderGroove 2.3" + exports: ["QtQuick.Controls.Fusion.impl/SliderGroove 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "offset"; type: "double" } + Property { name: "progress"; type: "double" } + Property { name: "visualProgress"; type: "double" } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Fusion.impl/SliderHandle 2.3" + exports: ["QtQuick.Controls.Fusion.impl/SliderHandle 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "palette"; type: "QVariant" } + Property { name: "pressed"; type: "bool" } + Property { name: "hovered"; type: "bool" } + Property { name: "vertical"; type: "bool" } + Property { name: "visualFocus"; type: "bool" } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Fusion.impl/SwitchIndicator 2.3" + exports: ["QtQuick.Controls.Fusion.impl/SwitchIndicator 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "pressedColor"; type: "QColor"; isReadonly: true } + Property { name: "checkMarkColor"; type: "QColor"; isReadonly: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/qmldir new file mode 100644 index 0000000..b584adc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Fusion/qmldir @@ -0,0 +1,4 @@ +module QtQuick.Controls.Fusion +plugin qtquickcontrols2fusionstyleplugin +classname QtQuickControls2FusionStylePlugin +depends QtQuick.Controls 2.5 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/GroupBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/GroupBox.qml new file mode 100644 index 0000000..96f776f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/GroupBox.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 12 + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + + color: "transparent" + border.color: control.palette.mid + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/HorizontalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/HorizontalHeaderView.qml new file mode 100644 index 0000000..ec91af2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/HorizontalHeaderView.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Templates 2.15 as T + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + color: "#f6f6f6" + border.color: "#e4e4e4" + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ApplicationWindow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ApplicationWindow.qml new file mode 100644 index 0000000..7bfcc3f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ApplicationWindow.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.2 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.ApplicationWindow { + id: window + + // ### remove? + overlay.modal: NinePatchImage { + source: Imagine.url + "applicationwindow-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + // ### remove? + overlay.modeless: NinePatchImage { + source: Imagine.url + "applicationwindow-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } + + background: NinePatchImage { + width: window.width + height: window.height + + source: Imagine.url + "applicationwindow-background" + NinePatchImageSelector on source { + states: [ + {"active": window.active} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/BusyIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/BusyIndicator.qml new file mode 100644 index 0000000..652365b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/BusyIndicator.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: AnimatedImage { + opacity: control.running ? 1 : 0 + playing: control.running || opacity > 0 + visible: control.running || opacity > 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + + source: Imagine.url + "busyindicator-animation" + AnimatedImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"running": control.running}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "busyindicator-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"running": control.running}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Button.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Button.qml new file mode 100644 index 0000000..e7171eb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Button.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight + : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat + ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.enabled && control.flat && control.highlighted ? control.palette.highlight + : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat + ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText + } + + background: NinePatchImage { + source: Imagine.url + "button-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"checkable": control.checkable}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"flat": control.flat}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/CheckBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/CheckBox.qml new file mode 100644 index 0000000..b91ceb4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/CheckBox.qml @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + indicator: Image { + x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "checkbox-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: NinePatchImage { + source: Imagine.url + "checkbox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/CheckDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/CheckDelegate.qml new file mode 100644 index 0000000..1997515 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/CheckDelegate.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + indicator: Image { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "checkdelegate-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "checkdelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ComboBox.qml new file mode 100644 index 0000000..d657e73 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ComboBox.qml @@ -0,0 +1,174 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Templates 2.15 as T +import QtQuick.Controls 2.15 +import QtQuick.Controls.Imagine 2.15 +import QtQuick.Controls.Imagine.impl 2.15 + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + background ? (background.leftPadding + background.rightPadding) : 0) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + Math.max(implicitContentHeight, + implicitIndicatorHeight) + background ? (background.topPadding + background.bottomPadding) : 0) + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + delegate: ItemDelegate { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: Image { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "combobox-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"editable": control.editable}, + {"open": control.down}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered}, + {"flat": control.flat} + ] + } + } + + contentItem: T.TextField { + topPadding: control.background ? control.background.topPadding : 0 + leftPadding: control.background ? control.background.leftPadding : 0 + rightPadding: control.background ? control.background.rightPadding : 0 + bottomPadding: control.background ? control.background.bottomPadding : 0 + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.flat ? control.palette.windowText : control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + } + + background: NinePatchImage { + source: Imagine.url + "combobox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"editable": control.editable}, + {"open": control.down}, + {"focused": control.visualFocus || (control.editable && control.activeFocus)}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered}, + {"flat": control.flat} + ] + } + } + + popup: T.Popup { + width: control.width + height: Math.min(contentItem.implicitHeight + topPadding + bottomPadding, control.Window.height - topMargin - bottomMargin) + + topMargin: background.topInset + bottomMargin: background.bottomInset + + topPadding: background.topPadding + leftPadding: background.leftPadding + rightPadding: background.rightPadding + bottomPadding: background.bottomPadding + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + palette.text: control.palette.text + palette.highlight: control.palette.highlight + palette.highlightedText: control.palette.highlightedText + palette.windowText: control.palette.windowText + palette.buttonText: control.palette.buttonText + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: NinePatchImage { + source: Imagine.url + "combobox-popup" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"editable": control.editable}, + {"focused": control.visualFocus || (control.editable && control.activeFocus)}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered}, + {"flat": control.flat} + ] + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/DelayButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/DelayButton.qml new file mode 100644 index 0000000..f60b5ea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/DelayButton.qml @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 +import QtGraphicalEffects 1.12 + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: Text { + text: control.text + font: control.font + color: control.palette.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: NinePatchImage { + source: Imagine.url + "delaybutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + readonly property NinePatchImage progress: NinePatchImage { + parent: control.background + width: control.progress * parent.width + height: parent.height + visible: false + + source: Imagine.url + "delaybutton-progress" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property NinePatchImage mask: NinePatchImage { + width: control.background.width + height: control.background.height + visible: false + + source: Imagine.url + "delaybutton-mask" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property OpacityMask effect: OpacityMask { + parent: control.background + width: source.width + height: source.height + source: control.background.progress + + maskSource: ShaderEffectSource { + sourceItem: control.background.mask + sourceRect: Qt.rect(0, 0, control.background.effect.width, control.background.effect.height) + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Dial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Dial.qml new file mode 100644 index 0000000..f8c394f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Dial.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + (handle ? handle.implicitWidth : 0) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + (handle ? handle.implicitHeight : 0) + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + handle: Image { + x: background.x + background.width / 2 - handle.width / 2 + y: background.y + background.height / 2 - handle.height / 2 + + source: Imagine.url + "dial-handle" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + transform: [ + Translate { + y: -Math.min(control.background.width, control.background.height) * 0.4 + control.handle.height / 2 + }, + Rotation { + angle: control.angle + origin.x: handle.width / 2 + origin.y: handle.height / 2 + } + ] + } + + background: NinePatchImage { + x: control.width / 2 - width / 2 + y: control.height / 2 - height / 2 + width: Math.max(64, Math.min(control.width, control.height)) + height: width + fillMode: Image.PreserveAspectFit + + source: Imagine.url + "dial-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Dialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Dialog.qml new file mode 100644 index 0000000..730b7f5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Dialog.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "dialog-background" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim} + ] + } + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + font.bold: true + padding: 12 + + background: NinePatchImage { + width: parent.width + height: parent.height + + source: Imagine.url + "dialog-title" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim} + ] + } + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: NinePatchImage { + source: Imagine.url + "dialog-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + T.Overlay.modeless: NinePatchImage { + source: Imagine.url + "dialog-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/DialogButtonBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/DialogButtonBox.qml new file mode 100644 index 0000000..fd27a87 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/DialogButtonBox.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + (control.count === 1 ? contentWidth * 2 : contentWidth) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + spacing: 6 + + delegate: Button { + width: control.count === 1 ? control.availableWidth / 2 : undefined + flat: true + } + + contentItem: ListView { + implicitWidth: contentWidth + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: NinePatchImage { + source: Imagine.url + "dialogbuttonbox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Drawer.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Drawer.qml new file mode 100644 index 0000000..2c93ba7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Drawer.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Drawer { + id: control + + parent: T.ApplicationWindow.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: NinePatchImage { + source: Imagine.url + "drawer-background" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim}, + {"top": control.edge === Qt.TopEdge}, + {"left": control.edge === Qt.LeftEdge}, + {"right": control.edge === Qt.RightEdge}, + {"bottom": control.edge === Qt.BottomEdge} + ] + } + } + + T.Overlay.modal: NinePatchImage { + source: Imagine.url + "drawer-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + T.Overlay.modeless: NinePatchImage { + source: Imagine.url + "drawer-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Frame.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Frame.qml new file mode 100644 index 0000000..2bef3c8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Frame.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "frame-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/GroupBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/GroupBox.qml new file mode 100644 index 0000000..46f9c98 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/GroupBox.qml @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: (background ? background.topPadding : 0) + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + label: Label { + width: control.width + + topPadding: background.topPadding + leftPadding: background.leftPadding + rightPadding: background.rightPadding + bottomPadding: background.bottomPadding + + text: control.title + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + color: control.palette.windowText + + background: NinePatchImage { + width: parent.width + height: parent.height + + source: Imagine.url + "groupbox-title" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } + } + + background: NinePatchImage { + x: -leftInset + y: control.topPadding - control.bottomPadding - topInset + width: control.width + leftInset + rightInset + height: control.height + topInset + bottomInset - control.topPadding + control.bottomPadding + + source: Imagine.url + "groupbox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/HorizontalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/HorizontalHeaderView.qml new file mode 100644 index 0000000..ec91af2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/HorizontalHeaderView.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Templates 2.15 as T + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + color: "#f6f6f6" + border.color: "#e4e4e4" + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ItemDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ItemDelegate.qml new file mode 100644 index 0000000..0b3edea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ItemDelegate.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "itemdelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Label.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Label.qml new file mode 100644 index 0000000..82c0ef4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Label.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Label { + id: control + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + color: control.palette.windowText + linkColor: control.palette.link + + background: NinePatchImage { + source: Imagine.url + "label-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Menu.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Menu.qml new file mode 100644 index 0000000..832565e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Menu.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 +import QtQuick.Window 2.12 + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topMargin: background ? background.topInset : 0 + leftMargin: background ? background.leftInset : 0 + rightMargin: background ? background.rightInset : 0 + bottomMargin: background ? background.bottomInset : 0 + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + delegate: MenuItem { } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: NinePatchImage { + source: Imagine.url + "menu-background" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim} + ] + } + } + + T.Overlay.modal: NinePatchImage { + source: Imagine.url + "menu-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + T.Overlay.modeless: NinePatchImage { + source: Imagine.url + "menu-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/MenuItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/MenuItem.qml new file mode 100644 index 0000000..f85fc65 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/MenuItem.qml @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.windowText + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.windowText + } + + arrow: Image { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.subMenu + source: Imagine.url + "menuitem-arrow" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + indicator: Image { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.checkable + source: Imagine.url + "menuitem-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "menuitem-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/MenuSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/MenuSeparator.qml new file mode 100644 index 0000000..9ed3908 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/MenuSeparator.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: NinePatchImage { + source: Imagine.url + "menuseparator-separator" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "menuseparator-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Page.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Page.qml new file mode 100644 index 0000000..07ec0a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Page.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "page-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/PageIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/PageIndicator.qml new file mode 100644 index 0000000..8da89f5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/PageIndicator.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + delegate: Image { + source: Imagine.url + "pageindicator-delegate" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": pressed}, + {"current": index === control.currentIndex}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} // ### TODO: context property + ] + } + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } + + background: NinePatchImage { + source: Imagine.url + "pageindicator-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Pane.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Pane.qml new file mode 100644 index 0000000..970b22b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Pane.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "pane-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Popup.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Popup.qml new file mode 100644 index 0000000..8f69bef --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Popup.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : undefined + leftPadding: background ? background.leftPadding : undefined + rightPadding: background ? background.rightPadding : undefined + bottomPadding: background ? background.bottomPadding : undefined + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "popup-background" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim} + ] + } + } + + T.Overlay.modal: NinePatchImage { + source: Imagine.url + "popup-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + T.Overlay.modeless: NinePatchImage { + source: Imagine.url + "popup-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ProgressBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ProgressBar.qml new file mode 100644 index 0000000..2f78004 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ProgressBar.qml @@ -0,0 +1,142 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 +import QtGraphicalEffects 1.12 + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: Item { + implicitWidth: control.indeterminate ? animation.implicitWidth || progress.implicitWidth : progress.implicitWidth + implicitHeight: control.indeterminate ? animation.implicitHeight || progress.implicitHeight : progress.implicitHeight + scale: control.mirrored ? -1 : 1 + + readonly property bool hasMask: mask.status !== Image.Null + + readonly property NinePatchImage progress: NinePatchImage { + parent: control.contentItem + width: control.position * parent.width + height: parent.height + visible: !control.indeterminate && !control.contentItem.hasMask + + source: Imagine.url + "progressbar-progress" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"indeterminate": control.indeterminate}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property AnimatedImage animation: AnimatedImage { + parent: control.contentItem + width: parent.width + height: parent.height + playing: control.indeterminate + visible: control.indeterminate && !control.contentItem.hasMask + + source: Imagine.url + "progressbar-animation" + AnimatedImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property NinePatchImage mask: NinePatchImage { + width: control.availableWidth + height: control.availableHeight + visible: false + + source: Imagine.url + "progressbar-mask" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"indeterminate": control.indeterminate}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property OpacityMask effect: OpacityMask { + parent: control.contentItem + width: source.width + height: source.height + source: control.indeterminate ? control.contentItem.animation : control.contentItem.progress + + maskSource: ShaderEffectSource { + sourceItem: control.contentItem.mask + sourceRect: Qt.rect(0, 0, control.contentItem.effect.width, control.contentItem.effect.height) + } + } + } + + background: NinePatchImage { + source: Imagine.url + "progressbar-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"indeterminate": control.indeterminate}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RadioButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RadioButton.qml new file mode 100644 index 0000000..a50bc12 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RadioButton.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + indicator: Image { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "radiobutton-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: NinePatchImage { + source: Imagine.url + "radiobutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RadioDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RadioDelegate.qml new file mode 100644 index 0000000..5a8356f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RadioDelegate.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + indicator: Image { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "radiodelegate-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "radiodelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RangeSlider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RangeSlider.qml new file mode 100644 index 0000000..47d90cf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RangeSlider.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + first.handle: Image { + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + + source: Imagine.url + "rangeslider-handle" + ImageSelector on source { + states: [ + {"first": true}, + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.first.pressed}, + {"focused": control.first.handle.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.first.hovered} + ] + } + } + + second.handle: Image { + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + + source: Imagine.url + "rangeslider-handle" + ImageSelector on source { + states: [ + {"second": true}, + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.second.pressed}, + {"focused": control.second.handle.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.second.hovered} + ] + } + } + + background: NinePatchImage { + scale: control.horizontal && control.mirrored ? -1 : 1 + + source: Imagine.url + "rangeslider-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + NinePatchImage { + x: control.horizontal ? control.first.handle.width / 2 + control.first.position * (parent.width - control.first.handle.width) : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : control.first.handle.height / 2 + control.second.visualPosition * (parent.height - control.first.handle.height) + width: control.horizontal ? control.second.position * (parent.width - control.first.handle.width) - control.first.position * (parent.width - control.first.handle.width) : parent.width + height: control.vertical ? control.second.position * (parent.height - control.first.handle.height) - control.first.position * (parent.height - control.first.handle.height): parent.height + + source: Imagine.url + "rangeslider-progress" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RoundButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RoundButton.qml new file mode 100644 index 0000000..fe4cbb3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/RoundButton.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight + : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat + ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.enabled && control.flat && control.highlighted ? control.palette.highlight + : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat + ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText + } + + background: NinePatchImage { + // ### TODO: radius? + source: Imagine.url + "roundbutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"checkable": control.checkable}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"flat": control.flat}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ScrollBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ScrollBar.qml new file mode 100644 index 0000000..68772e1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ScrollBar.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: NinePatchImage { + width: control.availableWidth + height: control.availableHeight + + source: Imagine.url + "scrollbar-handle" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"interactive": control.interactive}, + {"pressed": control.pressed}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + opacity: 0.0 + } + + background: NinePatchImage { + source: Imagine.url + "scrollbar-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"interactive": control.interactive}, + {"pressed": control.pressed}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + opacity: 0.0 + } + + states: [ + State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + } + ] + + transitions: [ + Transition { + to: "active" + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } + PauseAnimation { duration: 3000 } + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } + } + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ScrollIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ScrollIndicator.qml new file mode 100644 index 0000000..896cd87 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ScrollIndicator.qml @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: NinePatchImage { + width: control.availableWidth + height: control.availableHeight + + source: Imagine.url + "scrollindicator-handle" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + opacity: 0.0 + } + + background: NinePatchImage { + source: Imagine.url + "scrollindicator-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + opacity: 0.0 + } + + states: [ + State { + name: "active" + when: (control.active && control.size < 1.0) + } + ] + + transitions: [ + Transition { + to: "active" + NumberAnimation { targets: [contentItem, control.background]; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 5000 } + NumberAnimation { targets: [contentItem, control.background]; property: "opacity"; to: 0.0 } + } + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Slider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Slider.qml new file mode 100644 index 0000000..fe9c338 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Slider.qml @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + handle: Image { + x: Math.round(control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)) + y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))) + + source: Imagine.url + "slider-handle" + ImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + background: NinePatchImage { + scale: control.horizontal && control.mirrored ? -1 : 1 + + source: Imagine.url + "slider-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + NinePatchImage { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal + ? (parent.height - height) / 2 + : control.handle.height / 2 + control.visualPosition * (parent.height - control.handle.height) + width: control.horizontal + ? control.handle.width / 2 + control.position * (parent.width - control.handle.width) + : parent.width + height: control.vertical + ? control.handle.height / 2 + control.position * (parent.height - control.handle.height) + : parent.height + + source: Imagine.url + "slider-progress" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SpinBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SpinBox.qml new file mode 100644 index 0000000..6113580 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SpinBox.qml @@ -0,0 +1,152 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 2 * padding + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + topPadding: background ? background.topPadding : 0 + leftPadding: (background ? background.leftPadding : 0) + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: (background ? background.rightPadding : 0) + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + z: 2 + text: control.displayText + opacity: control.enabled ? 1 : 0.3 + + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + + NinePatchImage { + z: -1 + width: control.width + height: control.height + visible: control.editable + + source: Imagine.url + "spinbox-editor" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + } + + up.indicator: NinePatchImage { + x: control.mirrored ? 0 : parent.width - width + height: parent.height + + source: Imagine.url + "spinbox-indicator" + NinePatchImageSelector on source { + states: [ + {"up": true}, + {"disabled": !control.up.indicator.enabled}, + {"editable": control.editable}, + {"pressed": control.up.pressed}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.up.hovered} + ] + } + } + + down.indicator: NinePatchImage { + x: control.mirrored ? parent.width - width : 0 + height: parent.height + + source: Imagine.url + "spinbox-indicator" + NinePatchImageSelector on source { + states: [ + {"down": true}, + {"disabled": !control.down.indicator.enabled}, + {"editable": control.editable}, + {"pressed": control.down.pressed}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.down.hovered} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "spinbox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"editable": control.editable}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SplitView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SplitView.qml new file mode 100644 index 0000000..a4a858f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SplitView.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.13 +import QtQuick.Templates 2.13 as T +import QtQuick.Controls.Imagine 2.13 +import QtQuick.Controls.Imagine.impl 2.13 + +T.SplitView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: NinePatchImage { + source: Imagine.url + "splitview-handle" + NinePatchImageSelector on source { + states: [ + {"vertical": control.orientation === Qt.Vertical}, + {"horizontal":control.orientation === Qt.Horizontal}, + {"disabled": !control.enabled}, + {"pressed": T.SplitHandle.pressed}, + {"mirrored": control.mirrored}, + {"hovered": T.SplitHandle.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/StackView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/StackView.qml new file mode 100644 index 0000000..407b1d1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/StackView.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.StackView { + id: control + + implicitWidth: implicitBackgroundWidth + implicitHeight: implicitBackgroundHeight + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + popEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + popExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic } + } + + pushEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + pushExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } + } + + replaceEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + replaceExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } + } + + background: NinePatchImage { + source: Imagine.url + "stackview-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwipeDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwipeDelegate.qml new file mode 100644 index 0000000..3850253 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwipeDelegate.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "swipedelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwipeView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwipeView.qml new file mode 100644 index 0000000..70d65fe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwipeView.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.SwipeView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: ListView { + model: control.contentModel + interactive: control.interactive + currentIndex: control.currentIndex + focus: control.focus + + spacing: control.spacing + orientation: control.orientation + snapMode: ListView.SnapOneItem + boundsBehavior: Flickable.StopAtBounds + + highlightRangeMode: ListView.StrictlyEnforceRange + preferredHighlightBegin: 0 + preferredHighlightEnd: 0 + highlightMoveDuration: 250 + } + + background: NinePatchImage { + source: Imagine.url + "swipeview-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"interactive": control.interactive}, + {"focused": control.contentItem.activeFocus}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Switch.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Switch.qml new file mode 100644 index 0000000..50b407a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Switch.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + indicator: NinePatchImage { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth) + height: Math.max(implicitHeight, handle.implicitHeight) + + source: Imagine.url + "switch-indicator" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + property NinePatchImage handle: NinePatchImage { + readonly property real minPos: parent.leftPadding - leftPadding + readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding + readonly property real dragPos: control.visualPosition * parent.width - (width / 2) + + parent: control.indicator + + x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + + source: Imagine.url + "switch-handle" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 200 } + } + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: NinePatchImage { + source: Imagine.url + "switch-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwitchDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwitchDelegate.qml new file mode 100644 index 0000000..73e5aac --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/SwitchDelegate.qml @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + indicator: NinePatchImage { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth) + height: Math.max(implicitHeight, handle.implicitHeight) + + source: Imagine.url + "switchdelegate-indicator" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + property NinePatchImage handle: NinePatchImage { + readonly property real minPos: parent.leftPadding - leftPadding + readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding + readonly property real dragPos: control.visualPosition * parent.width - (width / 2) + + parent: control.indicator + + x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + + source: Imagine.url + "switchdelegate-handle" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 200 } + } + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "switchdelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TabBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TabBar.qml new file mode 100644 index 0000000..69516e0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TabBar.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 0 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 48 + preferredHighlightEnd: width - 48 + } + + background: NinePatchImage { + source: Imagine.url + "tabbar-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"header": control.position === T.TabBar.Header }, + {"footer": control.position === T.TabBar.Footer }, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TabButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TabButton.qml new file mode 100644 index 0000000..1cdcfc4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TabButton.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: NinePatchImage { + source: Imagine.url + "tabbutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TextArea.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TextArea.qml new file mode 100644 index 0000000..c7505b5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TextArea.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Qt.AlignVCenter + placeholderTextColor: Color.transparent(control.color, 0.5) + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: NinePatchImage { + source: Imagine.url + "textarea-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TextField.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TextField.qml new file mode 100644 index 0000000..3ff0ad4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/TextField.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + verticalAlignment: Qt.AlignVCenter + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: NinePatchImage { + source: Imagine.url + "textfield-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolBar.qml new file mode 100644 index 0000000..99bcd3b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolBar.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "toolbar-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"header": control.position === T.ToolBar.Header }, + {"footer": control.position === T.ToolBar.Footer }, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolButton.qml new file mode 100644 index 0000000..cc22f88 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolButton.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: NinePatchImage { + source: Imagine.url + "toolbutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"checkable": control.checkable}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"flat": control.flat}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolSeparator.qml new file mode 100644 index 0000000..c0887e4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolSeparator.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: NinePatchImage { + source: Imagine.url + "toolseparator-separator" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "toolseparator-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolTip.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolTip.qml new file mode 100644 index 0000000..21d75eb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/ToolTip.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 - (background ? background.leftInset : 0) + y: -implicitHeight - (background ? background.topInset : 0) + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topMargin: background ? background.topInset : 0 + leftMargin: background ? background.leftInset : 0 + rightMargin: background ? background.rightInset : 0 + bottomMargin: background ? background.bottomInset : 0 + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + color: control.palette.toolTipText + } + + background: NinePatchImage { + source: Imagine.url + "tooltip-background" + NinePatchImageSelector on source { + states: [ + // ### + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Tumbler.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Tumbler.qml new file mode 100644 index 0000000..12025cc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/Tumbler.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Imagine 2.12 +import QtQuick.Controls.Imagine.impl 2.12 + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 60 // ### remove 60 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 200 // ### remove 200 in Qt 6 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + delegate: Text { + text: modelData + font: control.font + color: control.palette.text + opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } + + background: NinePatchImage { + source: Imagine.url + "tumbler-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/VerticalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/VerticalHeaderView.qml new file mode 100644 index 0000000..3fc9ca5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/VerticalHeaderView.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Templates 2.15 as T + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + color: "#f6f6f6" + border.color: "#e4e4e4" + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/libqtquickcontrols2imaginestyleplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/libqtquickcontrols2imaginestyleplugin.so new file mode 100755 index 0000000..d576d7f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/libqtquickcontrols2imaginestyleplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/plugins.qmltypes new file mode 100644 index 0000000..785b6db --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/plugins.qmltypes @@ -0,0 +1,347 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Controls.Imagine 2.15' + +Module { + dependencies: ["QtQuick.Controls 2.0"] + Component { + name: "QQuickAnimatedImageSelector" + prototype: "QQuickImageSelector" + exports: ["QtQuick.Controls.Imagine.impl/AnimatedImageSelector 2.3"] + exportMetaObjectRevisions: [0] + } + Component { name: "QQuickAttachedObject"; prototype: "QObject" } + Component { + name: "QQuickImage" + defaultProperty: "data" + prototype: "QQuickImageBase" + Enum { + name: "HAlignment" + values: { + "AlignLeft": 1, + "AlignRight": 2, + "AlignHCenter": 4 + } + } + Enum { + name: "VAlignment" + values: { + "AlignTop": 32, + "AlignBottom": 64, + "AlignVCenter": 128 + } + } + Enum { + name: "FillMode" + values: { + "Stretch": 0, + "PreserveAspectFit": 1, + "PreserveAspectCrop": 2, + "Tile": 3, + "TileVertically": 4, + "TileHorizontally": 5, + "Pad": 6 + } + } + Property { name: "fillMode"; type: "FillMode" } + Property { name: "paintedWidth"; type: "double"; isReadonly: true } + Property { name: "paintedHeight"; type: "double"; isReadonly: true } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "mipmap"; revision: 3; type: "bool" } + Property { name: "autoTransform"; revision: 5; type: "bool" } + Property { name: "sourceClipRect"; revision: 15; type: "QRectF" } + Signal { name: "paintedGeometryChanged" } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "VAlignment" } + } + Signal { + name: "mipmapChanged" + revision: 3 + Parameter { type: "bool" } + } + Signal { name: "autoTransformChanged"; revision: 5 } + } + Component { + name: "QQuickImageBase" + defaultProperty: "data" + prototype: "QQuickImplicitSizeItem" + Enum { + name: "LoadPixmapOptions" + values: { + "NoOption": 0, + "HandleDPR": 1, + "UseProviderOptions": 2 + } + } + Enum { + name: "Status" + values: { + "Null": 0, + "Ready": 1, + "Loading": 2, + "Error": 3 + } + } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "source"; type: "QUrl" } + Property { name: "progress"; type: "double"; isReadonly: true } + Property { name: "asynchronous"; type: "bool" } + Property { name: "cache"; type: "bool" } + Property { name: "sourceSize"; type: "QSize" } + Property { name: "mirror"; type: "bool" } + Property { name: "currentFrame"; revision: 14; type: "int" } + Property { name: "frameCount"; revision: 14; type: "int"; isReadonly: true } + Property { name: "colorSpace"; revision: 15; type: "QColorSpace" } + Signal { + name: "sourceChanged" + Parameter { type: "QUrl" } + } + Signal { + name: "statusChanged" + Parameter { type: "QQuickImageBase::Status" } + } + Signal { + name: "progressChanged" + Parameter { name: "progress"; type: "double" } + } + Signal { name: "currentFrameChanged"; revision: 14 } + Signal { name: "frameCountChanged"; revision: 14 } + Signal { name: "sourceClipRectChanged"; revision: 15 } + Signal { name: "colorSpaceChanged"; revision: 15 } + } + Component { + name: "QQuickImageSelector" + prototype: "QObject" + exports: ["QtQuick.Controls.Imagine.impl/ImageSelector 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "source"; type: "QUrl"; isReadonly: true } + Property { name: "name"; type: "string" } + Property { name: "path"; type: "string" } + Property { name: "states"; type: "QVariantList" } + Property { name: "separator"; type: "string" } + Property { name: "cache"; type: "bool" } + } + Component { + name: "QQuickImagineStyle" + prototype: "QQuickAttachedObject" + exports: ["QtQuick.Controls.Imagine/Imagine 2.3"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "path"; type: "string" } + Property { name: "url"; type: "QUrl"; isReadonly: true } + } + Component { + name: "QQuickImplicitSizeItem" + defaultProperty: "data" + prototype: "QQuickItem" + Property { name: "implicitWidth"; type: "double"; isReadonly: true } + Property { name: "implicitHeight"; type: "double"; isReadonly: true } + } + Component { + name: "QQuickItem" + defaultProperty: "data" + prototype: "QObject" + Enum { + name: "Flags" + values: { + "ItemClipsChildrenToShape": 1, + "ItemAcceptsInputMethod": 2, + "ItemIsFocusScope": 4, + "ItemHasContents": 8, + "ItemAcceptsDrops": 16 + } + } + Enum { + name: "TransformOrigin" + values: { + "TopLeft": 0, + "Top": 1, + "TopRight": 2, + "Left": 3, + "Center": 4, + "Right": 5, + "BottomLeft": 6, + "Bottom": 7, + "BottomRight": 8 + } + } + Property { name: "parent"; type: "QQuickItem"; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "resources"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "children"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "z"; type: "double" } + Property { name: "width"; type: "double" } + Property { name: "height"; type: "double" } + Property { name: "opacity"; type: "double" } + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "visibleChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "states"; type: "QQuickState"; isList: true; isReadonly: true } + Property { name: "transitions"; type: "QQuickTransition"; isList: true; isReadonly: true } + Property { name: "state"; type: "string" } + Property { name: "childrenRect"; type: "QRectF"; isReadonly: true } + Property { name: "anchors"; type: "QQuickAnchors"; isReadonly: true; isPointer: true } + Property { name: "left"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "right"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "horizontalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "top"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "bottom"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "verticalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baseline"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baselineOffset"; type: "double" } + Property { name: "clip"; type: "bool" } + Property { name: "focus"; type: "bool" } + Property { name: "activeFocus"; type: "bool"; isReadonly: true } + Property { name: "activeFocusOnTab"; revision: 1; type: "bool" } + Property { name: "rotation"; type: "double" } + Property { name: "scale"; type: "double" } + Property { name: "transformOrigin"; type: "TransformOrigin" } + Property { name: "transformOriginPoint"; type: "QPointF"; isReadonly: true } + Property { name: "transform"; type: "QQuickTransform"; isList: true; isReadonly: true } + Property { name: "smooth"; type: "bool" } + Property { name: "antialiasing"; type: "bool" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "containmentMask"; revision: 11; type: "QObject"; isPointer: true } + Property { name: "layer"; type: "QQuickItemLayer"; isReadonly: true; isPointer: true } + Signal { + name: "childrenRectChanged" + Parameter { type: "QRectF" } + } + Signal { + name: "baselineOffsetChanged" + Parameter { type: "double" } + } + Signal { + name: "stateChanged" + Parameter { type: "string" } + } + Signal { + name: "focusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusOnTabChanged" + revision: 1 + Parameter { type: "bool" } + } + Signal { + name: "parentChanged" + Parameter { type: "QQuickItem"; isPointer: true } + } + Signal { + name: "transformOriginChanged" + Parameter { type: "TransformOrigin" } + } + Signal { + name: "smoothChanged" + Parameter { type: "bool" } + } + Signal { + name: "antialiasingChanged" + Parameter { type: "bool" } + } + Signal { + name: "clipChanged" + Parameter { type: "bool" } + } + Signal { + name: "windowChanged" + revision: 1 + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Signal { name: "containmentMaskChanged"; revision: 11 } + Method { name: "update" } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + Parameter { name: "targetSize"; type: "QSize" } + } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + } + Method { + name: "contains" + type: "bool" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapFromItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapFromGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { name: "forceActiveFocus" } + Method { + name: "forceActiveFocus" + Parameter { name: "reason"; type: "Qt::FocusReason" } + } + Method { + name: "nextItemInFocusChain" + revision: 1 + type: "QQuickItem*" + Parameter { name: "forward"; type: "bool" } + } + Method { name: "nextItemInFocusChain"; revision: 1; type: "QQuickItem*" } + Method { + name: "childAt" + type: "QQuickItem*" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + name: "QQuickNinePatchImage" + defaultProperty: "data" + prototype: "QQuickImage" + exports: ["QtQuick.Controls.Imagine.impl/NinePatchImage 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "topPadding"; type: "double"; isReadonly: true } + Property { name: "leftPadding"; type: "double"; isReadonly: true } + Property { name: "rightPadding"; type: "double"; isReadonly: true } + Property { name: "bottomPadding"; type: "double"; isReadonly: true } + Property { name: "topInset"; type: "double"; isReadonly: true } + Property { name: "leftInset"; type: "double"; isReadonly: true } + Property { name: "rightInset"; type: "double"; isReadonly: true } + Property { name: "bottomInset"; type: "double"; isReadonly: true } + } + Component { + name: "QQuickNinePatchImageSelector" + prototype: "QQuickImageSelector" + exports: ["QtQuick.Controls.Imagine.impl/NinePatchImageSelector 2.3"] + exportMetaObjectRevisions: [0] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/qmldir new file mode 100644 index 0000000..7b4b3ea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Imagine/qmldir @@ -0,0 +1,5 @@ +module QtQuick.Controls.Imagine +plugin qtquickcontrols2imaginestyleplugin +classname QtQuickControls2ImagineStylePlugin +depends QtQuick.Controls 2.5 +depends QtGraphicalEffects 1.0 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ItemDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ItemDelegate.qml new file mode 100644 index 0000000..6229e2b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ItemDelegate.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 8 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? control.palette.highlightedText : control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted || control.visualFocus + color: Color.blend(control.down ? control.palette.midlight : control.palette.light, + control.palette.highlight, control.visualFocus ? 0.15 : 0.0) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Label.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Label.qml new file mode 100644 index 0000000..9a42635 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Label.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Label { + id: control + + color: control.palette.windowText + linkColor: control.palette.link +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ApplicationWindow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ApplicationWindow.qml new file mode 100644 index 0000000..6a10ed7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ApplicationWindow.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.ApplicationWindow { + id: window + + color: Material.backgroundColor + + overlay.modal: Rectangle { + color: window.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + overlay.modeless: Rectangle { + color: window.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/BoxShadow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/BoxShadow.qml new file mode 100644 index 0000000..5a746c0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/BoxShadow.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +/* + A implementation of CSS's box-shadow, used by ElevationEffect for a Material Design + elevation shadow effect. + */ +RectangularGlow { + // The 4 properties from CSS box-shadow, plus the inherited color property + property int offsetX + property int offsetY + property int blurRadius + property int spreadRadius + + // The source item the shadow is being applied to, used for correctly + // calculating the corner radious + property Item source + + property bool fullWidth + property bool fullHeight + + x: (parent.width - width)/2 + offsetX + y: (parent.height - height)/2 + offsetY + + implicitWidth: source ? source.width : parent.width + implicitHeight: source ? source.height : parent.height + + width: implicitWidth + 2 * spreadRadius + (fullWidth ? 2 * cornerRadius : 0) + height: implicitHeight + 2 * spreadRadius + (fullHeight ? 2 * cornerRadius : 0) + glowRadius: blurRadius/2 + spread: 0.05 + cornerRadius: blurRadius + (source && source.radius || 0) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/BusyIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/BusyIndicator.qml new file mode 100644 index 0000000..8173248 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/BusyIndicator.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + + contentItem: BusyIndicatorImpl { + implicitWidth: control.Material.touchTarget + implicitHeight: control.Material.touchTarget + color: control.Material.accentColor + + running: control.running + opacity: control.running ? 1 : 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Button.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Button.qml new file mode 100644 index 0000000..04c6664 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Button.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topInset: 6 + bottomInset: 6 + padding: 12 + horizontalPadding: padding - 4 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: !enabled ? Material.hintTextColor : + flat && highlighted ? Material.accentColor : + highlighted ? Material.primaryHighlightedTextColor : Material.foreground + + Material.elevation: flat ? control.down || control.hovered ? 2 : 0 + : control.down ? 8 : 2 + Material.background: flat ? "transparent" : undefined + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : + control.flat && control.highlighted ? control.Material.accentColor : + control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground + } + + background: Rectangle { + implicitWidth: 64 + implicitHeight: control.Material.buttonHeight + + radius: 2 + color: !control.enabled ? control.Material.buttonDisabledColor : + control.highlighted ? control.Material.highlightedButtonColor : control.Material.buttonColor + + PaddedRectangle { + y: parent.height - 4 + width: parent.width + height: 4 + radius: 2 + topPadding: -2 + clip: true + visible: control.checkable && (!control.highlighted || control.flat) + color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor + } + + // The layer is disabled when the button color is transparent so you can do + // Material.background: "transparent" and get a proper flat button without needing + // to set Material.elevation as well + layer.enabled: control.enabled && control.Material.buttonColor.a > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + + Ripple { + clipRadius: 2 + width: parent.width + height: parent.height + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.flat && control.highlighted ? control.Material.highlightedRippleColor : control.Material.rippleColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckBox.qml new file mode 100644 index 0000000..159e2f1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckBox.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 8 + padding: 8 + verticalPadding: padding + 7 + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + + Ripple { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 28; height: 28 + + z: -1 + anchor: control + pressed: control.pressed + active: control.down || control.visualFocus || control.hovered + color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckDelegate.qml new file mode 100644 index 0000000..c7d7575 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckDelegate.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 8 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckIndicator.qml new file mode 100644 index 0000000..7caf855 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CheckIndicator.qml @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +Rectangle { + id: indicatorItem + implicitWidth: 18 + implicitHeight: 18 + color: "transparent" + border.color: !control.enabled ? control.Material.hintTextColor + : checkState !== Qt.Unchecked ? control.Material.accentColor : control.Material.secondaryTextColor + border.width: checkState !== Qt.Unchecked ? width / 2 : 2 + radius: 2 + + property Item control + property int checkState: control.checkState + + Behavior on border.width { + NumberAnimation { + duration: 100 + easing.type: Easing.OutCubic + } + } + + Behavior on border.color { + ColorAnimation { + duration: 100 + easing.type: Easing.OutCubic + } + } + + // TODO: This needs to be transparent + Image { + id: checkImage + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 14 + height: 14 + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Material/images/check.png" + fillMode: Image.PreserveAspectFit + + scale: indicatorItem.checkState === Qt.Checked ? 1 : 0 + Behavior on scale { NumberAnimation { duration: 100 } } + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 12 + height: 3 + + scale: indicatorItem.checkState === Qt.PartiallyChecked ? 1 : 0 + Behavior on scale { NumberAnimation { duration: 100 } } + } + + states: [ + State { + name: "checked" + when: indicatorItem.checkState === Qt.Checked + }, + State { + name: "partiallychecked" + when: indicatorItem.checkState === Qt.PartiallyChecked + } + ] + + transitions: Transition { + SequentialAnimation { + NumberAnimation { + target: indicatorItem + property: "scale" + // Go down 2 pixels in size. + to: 1 - 2 / indicatorItem.width + duration: 120 + } + NumberAnimation { + target: indicatorItem + property: "scale" + to: 1 + duration: 120 + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ComboBox.qml new file mode 100644 index 0000000..6aada8c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ComboBox.qml @@ -0,0 +1,180 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Controls.impl 2.15 +import QtQuick.Templates 2.15 as T +import QtQuick.Controls.Material 2.15 +import QtQuick.Controls.Material.impl 2.15 + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + topInset: 6 + bottomInset: 6 + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + Material.elevation: flat ? control.pressed || control.hovered ? 2 : 0 + : control.pressed ? 8 : 2 + Material.background: flat ? "transparent" : undefined + Material.foreground: flat ? undefined : Material.primaryTextColor + + delegate: MenuItem { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + Material.foreground: control.currentIndex === index ? ListView.view.contentItem.Material.accent : ListView.view.contentItem.Material.foreground + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Material/images/drop-indicator.png" + } + + contentItem: T.TextField { + padding: 6 + leftPadding: control.editable ? 2 : control.mirrored ? 0 : 12 + rightPadding: control.editable ? 2 : control.mirrored ? 12 : 0 + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + selectionColor: control.Material.accentColor + selectedTextColor: control.Material.primaryHighlightedTextColor + verticalAlignment: Text.AlignVCenter + + cursorDelegate: CursorDelegate { } + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: control.Material.buttonHeight + + radius: control.flat ? 0 : 2 + color: !control.editable ? control.Material.dialogColor : "transparent" + + layer.enabled: control.enabled && !control.editable && control.Material.background.a > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + + Rectangle { + visible: control.editable + y: parent.y + control.baselineOffset + width: parent.width + height: control.activeFocus ? 2 : 1 + color: control.editable && control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor + } + + Ripple { + clip: control.flat + clipRadius: control.flat ? 0 : 2 + x: control.editable && control.indicator ? control.indicator.x : 0 + width: control.editable && control.indicator ? control.indicator.width : parent.width + height: parent.height + pressed: control.pressed + anchor: control.editable && control.indicator ? control.indicator : control + active: control.pressed || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } + + popup: T.Popup { + y: control.editable ? control.height - 5 : 0 + width: control.width + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) + transformOrigin: Item.Top + topMargin: 12 + bottomMargin: 12 + + Material.theme: control.Material.theme + Material.accent: control.Material.accent + Material.primary: control.Material.primary + + enter: Transition { + // grow_fade_in + NumberAnimation { property: "scale"; from: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + // shrink_fade_out + NumberAnimation { property: "scale"; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + radius: 2 + color: parent.Material.dialogColor + + layer.enabled: control.enabled + layer.effect: ElevationEffect { + elevation: 8 + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CursorDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CursorDelegate.qml new file mode 100644 index 0000000..fe2d25c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/CursorDelegate.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Material 2.12 + +Rectangle { + id: cursor + + color: parent.Material.accentColor + width: 2 + visible: parent.activeFocus && !parent.readOnly && parent.selectionStart === parent.selectionEnd + + Connections { + target: cursor.parent + function onCursorPositionChanged() { + // keep a moving cursor visible + cursor.opacity = 1 + timer.restart() + } + } + + Timer { + id: timer + running: cursor.parent.activeFocus && !cursor.parent.readOnly && interval != 0 + repeat: true + interval: Qt.styleHints.cursorFlashTime / 2 + onTriggered: cursor.opacity = !cursor.opacity ? 1 : 0 + // force the cursor visible when gaining focus + onRunningChanged: cursor.opacity = 1 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/DelayButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/DelayButton.qml new file mode 100644 index 0000000..6b5ef3a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/DelayButton.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topInset: 6 + bottomInset: 6 + padding: 12 + horizontalPadding: padding - 4 + + Material.elevation: control.down ? 8 : 2 + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: Text { + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : control.Material.foreground + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state + background: Rectangle { + implicitWidth: 64 + implicitHeight: control.Material.buttonHeight + + radius: 2 + color: !control.enabled ? control.Material.buttonDisabledColor : control.Material.buttonColor + + PaddedRectangle { + y: parent.height - 4 + width: parent.width + height: 4 + radius: 2 + topPadding: -2 + clip: true + color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor + + PaddedRectangle { + width: parent.width * control.progress + height: 4 + radius: 2 + topPadding: -2 + rightPadding: Math.max(-2, width - parent.width) + clip: true + color: control.Material.accentColor + } + } + + layer.enabled: control.enabled && control.Material.buttonColor.a > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + + Ripple { + clipRadius: 2 + width: parent.width + height: parent.height + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Dial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Dial.qml new file mode 100644 index 0000000..1f80a7f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Dial.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 100 // ### remove 100 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 100 // ### remove 100 in Qt 6 + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 100 + + x: control.width / 2 - width / 2 + y: control.height / 2 - height / 2 + width: Math.max(64, Math.min(control.width, control.height)) + height: width + color: "transparent" + radius: width / 2 + + border.color: control.enabled ? control.Material.accentColor : control.Material.hintTextColor + } + + handle: SliderHandle { + x: control.background.x + control.background.width / 2 - control.handle.width / 2 + y: control.background.y + control.background.height / 2 - control.handle.height / 2 + transform: [ + Translate { + y: -control.background.height * 0.4 + control.handle.height / 2 + }, + Rotation { + angle: control.angle + origin.x: control.handle.width / 2 + origin.y: control.handle.height / 2 + } + ] + implicitWidth: 10 + implicitHeight: 10 + + value: control.value + handleHasFocus: control.visualFocus + handlePressed: control.pressed + handleHovered: control.hovered + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Dialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Dialog.qml new file mode 100644 index 0000000..364c0e5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Dialog.qml @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + padding: 24 + topPadding: 20 + + Material.elevation: 24 + + enter: Transition { + // grow_fade_in + NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + // shrink_fade_out + NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + background: Rectangle { + radius: 2 + color: control.Material.dialogColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + padding: 24 + bottomPadding: 0 + // TODO: QPlatformTheme::TitleBarFont + font.bold: true + font.pixelSize: 16 + background: PaddedRectangle { + radius: 2 + color: control.Material.dialogColor + bottomPadding: -2 + clip: true + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/DialogButtonBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/DialogButtonBox.qml new file mode 100644 index 0000000..d148fb2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/DialogButtonBox.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 8 + padding: 8 + verticalPadding: 2 + alignment: Qt.AlignRight + buttonLayout: T.DialogButtonBox.AndroidLayout + + Material.foreground: Material.accent + + delegate: Button { flat: true } + + contentItem: ListView { + implicitWidth: contentWidth + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: PaddedRectangle { + implicitHeight: control.Material.dialogButtonBoxHeight + radius: 2 + color: control.Material.dialogColor + // Rounded corners should be only at the top or at the bottom + topPadding: control.position === T.DialogButtonBox.Footer ? -2 : 0 + bottomPadding: control.position === T.DialogButtonBox.Header ? -2 : 0 + clip: true + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Drawer.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Drawer.qml new file mode 100644 index 0000000..3d64cde --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Drawer.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: !dim && edge === Qt.BottomEdge && Material.elevation === 0 + leftPadding: !dim && edge === Qt.RightEdge && Material.elevation === 0 + rightPadding: !dim && edge === Qt.LeftEdge && Material.elevation === 0 + bottomPadding: !dim && edge === Qt.TopEdge && Material.elevation === 0 + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + Material.elevation: !interactive && !dim ? 0 : 16 + + background: Rectangle { + color: control.Material.dialogColor + + Rectangle { + readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + width: horizontal ? 1 : parent.width + height: horizontal ? parent.height : 1 + color: control.Material.dividerColor + x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 + y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 + visible: !control.dim && control.Material.elevation === 0 + } + + layer.enabled: control.position > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + fullHeight: true + } + } + + T.Overlay.modal: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ElevationEffect.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ElevationEffect.qml new file mode 100644 index 0000000..73a2a23 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ElevationEffect.qml @@ -0,0 +1,279 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +/* + An effect for standard Material Design elevation shadows. Useful for using as \c layer.effect. + */ +Item { + id: effect + + /* + The source the effect is applied to. + */ + property var source + + /* + The elevation of the \l source Item. + */ + property int elevation: 0 + + /* + Set to \c true if the \l source Item is the same width as its parent and the shadow + should be full width instead of rounding around the corner of the Item. + + \sa fullHeight + */ + property bool fullWidth: false + + /* + Set to \c true if the \l source Item is the same height as its parent and the shadow + should be full height instead of rounding around the corner of the Item. + + \sa fullWidth + */ + property bool fullHeight: false + + /* + \internal + + The actual source Item the effect is applied to. + */ + readonly property Item sourceItem: source.sourceItem + + /* + * The following shadow values are taken from Angular Material + * + * The MIT License (MIT) + * + * Copyright (c) 2014-2016 Google, Inc. http://angularjs.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + /* + \internal + + The shadows to use for each possible elevation. There are three shadows that when combined + make up the elevation. + */ + readonly property var _shadows: [ + [{offset: 0, blur: 0, spread: 0}, + {offset: 0, blur: 0, spread: 0}, + {offset: 0, blur: 0, spread: 0}], + + [{offset: 1, blur: 3, spread: 0}, + {offset: 1, blur: 1, spread: 0}, + {offset: 2, blur: 1, spread: -1}], + + [{offset: 1, blur: 5, spread: 0}, + {offset: 2, blur: 2, spread: 0}, + {offset: 3, blur: 1, spread: -2}], + + [{offset: 1, blur: 8, spread: 0}, + {offset: 3, blur: 4, spread: 0}, + {offset: 3, blur: 3, spread: -2}], + + [{offset: 2, blur: 4, spread: -1}, + {offset: 4, blur: 5, spread: 0}, + {offset: 1, blur: 10, spread: 0}], + + [{offset: 3, blur: 5, spread: -1}, + {offset: 5, blur: 8, spread: 0}, + {offset: 1, blur: 14, spread: 0}], + + [{offset: 3, blur: 5, spread: -1}, + {offset: 6, blur: 10, spread: 0}, + {offset: 1, blur: 18, spread: 0}], + + [{offset: 4, blur: 5, spread: -2}, + {offset: 7, blur: 10, spread: 1}, + {offset: 2, blur: 16, spread: 1}], + + [{offset: 5, blur: 5, spread: -3}, + {offset: 8, blur: 10, spread: 1}, + {offset: 3, blur: 14, spread: 2}], + + [{offset: 5, blur: 6, spread: -3}, + {offset: 9, blur: 12, spread: 1}, + {offset: 3, blur: 16, spread: 2}], + + [{offset: 6, blur: 6, spread: -3}, + {offset: 10, blur: 14, spread: 1}, + {offset: 4, blur: 18, spread: 3}], + + [{offset: 6, blur: 7, spread: -4}, + {offset: 11, blur: 15, spread: 1}, + {offset: 4, blur: 20, spread: 3}], + + [{offset: 7, blur: 8, spread: -4}, + {offset: 12, blur: 17, spread: 2}, + {offset: 5, blur: 22, spread: 4}], + + [{offset: 7, blur: 8, spread: -4}, + {offset: 13, blur: 19, spread: 2}, + {offset: 5, blur: 24, spread: 4}], + + [{offset: 7, blur: 9, spread: -4}, + {offset: 14, blur: 21, spread: 2}, + {offset: 5, blur: 26, spread: 4}], + + [{offset: 8, blur: 9, spread: -5}, + {offset: 15, blur: 22, spread: 2}, + {offset: 6, blur: 28, spread: 5}], + + [{offset: 8, blur: 10, spread: -5}, + {offset: 16, blur: 24, spread: 2}, + {offset: 6, blur: 30, spread: 5}], + + [{offset: 8, blur: 11, spread: -5}, + {offset: 17, blur: 26, spread: 2}, + {offset: 6, blur: 32, spread: 5}], + + [{offset: 9, blur: 11, spread: -5}, + {offset: 18, blur: 28, spread: 2}, + {offset: 7, blur: 34, spread: 6}], + + [{offset: 9, blur: 12, spread: -6}, + {offset: 19, blur: 29, spread: 2}, + {offset: 7, blur: 36, spread: 6}], + + [{offset: 10, blur: 13, spread: -6}, + {offset: 20, blur: 31, spread: 3}, + {offset: 8, blur: 38, spread: 7}], + + [{offset: 10, blur: 13, spread: -6}, + {offset: 21, blur: 33, spread: 3}, + {offset: 8, blur: 40, spread: 7}], + + [{offset: 10, blur: 14, spread: -6}, + {offset: 22, blur: 35, spread: 3}, + {offset: 8, blur: 42, spread: 7}], + + [{offset: 11, blur: 14, spread: -7}, + {offset: 23, blur: 36, spread: 3}, + {offset: 9, blur: 44, spread: 8}], + + [{offset: 11, blur: 15, spread: -7}, + {offset: 24, blur: 38, spread: 3}, + {offset: 9, blur: 46, spread: 8}] + ] + + /* + \internal + + The current shadow based on the elevation. + */ + readonly property var _shadow: _shadows[Math.max(0, Math.min(elevation, _shadows.length - 1))] + + // Nest the shadows and source view in two items rendered as a layer + // so the shadow is not clipped by the bounds of the source view + Item { + property int margin: -100 + + x: margin + y: margin + width: parent.width - 2 * margin + height: parent.height - 2 * margin + + // By rendering as a layer, the shadow will never show through the source item, + // even when the source item's opacity is less than 1 + layer.enabled: true + + // The box shadows automatically pick up the size of the source Item and not + // the size of the parent, so we don't need to worry about the extra padding + // in the parent Item + BoxShadow { + offsetY: effect._shadow[0].offset + blurRadius: effect._shadow[0].blur + spreadRadius: effect._shadow[0].spread + color: Qt.rgba(0,0,0, 0.2) + + fullWidth: effect.fullWidth + fullHeight: effect.fullHeight + source: effect.sourceItem + } + + BoxShadow { + offsetY: effect._shadow[1].offset + blurRadius: effect._shadow[1].blur + spreadRadius: effect._shadow[1].spread + color: Qt.rgba(0,0,0, 0.14) + + fullWidth: effect.fullWidth + fullHeight: effect.fullHeight + source: effect.sourceItem + } + + BoxShadow { + offsetY: effect._shadow[2].offset + blurRadius: effect._shadow[2].blur + spreadRadius: effect._shadow[2].spread + color: Qt.rgba(0,0,0, 0.12) + + fullWidth: effect.fullWidth + fullHeight: effect.fullHeight + source: effect.sourceItem + } + + ShaderEffect { + property alias source: effect.source + + x: (parent.width - width)/2 + y: (parent.height - height)/2 + width: effect.sourceItem.width + height: effect.sourceItem.height + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Frame.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Frame.qml new file mode 100644 index 0000000..0001825 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Frame.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + verticalPadding: Material.frameVerticalPadding + + background: Rectangle { + radius: 2 + color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent" + border.color: control.Material.frameColor + + layer.enabled: control.enabled && control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/GroupBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/GroupBox.qml new file mode 100644 index 0000000..e18a594 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/GroupBox.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 12 + topPadding: Material.frameVerticalPadding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + bottomPadding: Material.frameVerticalPadding + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + + radius: 2 + color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent" + border.color: control.Material.frameColor + + layer.enabled: control.enabled && control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/HorizontalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/HorizontalHeaderView.qml new file mode 100644 index 0000000..fd672f3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/HorizontalHeaderView.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Templates 2.15 as T +import QtQuick.Controls.Material 2.15 +import QtQuick.Controls.Material.impl 2.15 + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + color: control.Material.backgroundColor + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: enabled ? control.Material.foreground : control.Material.hintTextColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ItemDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ItemDelegate.qml new file mode 100644 index 0000000..2078ce6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ItemDelegate.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 8 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Label.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Label.qml new file mode 100644 index 0000000..ad923a2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Label.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.Label { + id: control + + color: enabled ? Material.foreground : Material.hintTextColor + linkColor: Material.accentColor +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Menu.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Menu.qml new file mode 100644 index 0000000..94bcc15 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Menu.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 +import QtQuick.Window 2.12 + +T.Menu { + id: control + + Material.elevation: 8 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 0 + verticalPadding: 8 + + transformOrigin: !cascade ? Item.Top : (mirrored ? Item.TopRight : Item.TopLeft) + + delegate: MenuItem { } + + enter: Transition { + // grow_fade_in + NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + // shrink_fade_out + NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + contentItem: ListView { + implicitHeight: contentHeight + + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + ScrollIndicator.vertical: ScrollIndicator {} + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: control.Material.menuItemHeight + + radius: 3 + color: control.Material.dialogColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } + + T.Overlay.modal: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuBar.qml new file mode 100644 index 0000000..66252d6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuBar.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + implicitHeight: 40 + color: control.Material.dialogColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuBarItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuBarItem.qml new file mode 100644 index 0000000..588d6fb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuBarItem.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 12 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.highlighted + color: control.Material.rippleColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuItem.qml new file mode 100644 index 0000000..a5d2f8a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuItem.qml @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: Material.menuItemVerticalPadding + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + visible: control.checkable + control: control + checkState: control.checked ? Qt.Checked : Qt.Unchecked + } + + arrow: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.subMenu + mirror: control.mirrored + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Material/images/arrow-indicator.png" + } + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: control.Material.menuItemHeight + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.highlighted + color: control.Material.rippleColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuSeparator.qml new file mode 100644 index 0000000..6d80c04 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/MenuSeparator.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + verticalPadding: 8 + + contentItem: Rectangle { + implicitWidth: 200 + implicitHeight: 1 + color: control.Material.dividerColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Page.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Page.qml new file mode 100644 index 0000000..4da0ecc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Page.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + background: Rectangle { + color: control.Material.backgroundColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/PageIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/PageIndicator.qml new file mode 100644 index 0000000..5e6ca24 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/PageIndicator.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + delegate: Rectangle { + implicitWidth: 8 + implicitHeight: 8 + + radius: width / 2 + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + + opacity: index === currentIndex ? 0.95 : pressed ? 0.7 : 0.45 + Behavior on opacity { OpacityAnimator { duration: 100 } } + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Pane.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Pane.qml new file mode 100644 index 0000000..988e225 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Pane.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.Material.backgroundColor + radius: control.Material.elevation > 0 ? 2 : 0 + + layer.enabled: control.enabled && control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Popup.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Popup.qml new file mode 100644 index 0000000..1b57638 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Popup.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.Popup { + id: control + + Material.elevation: 24 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + enter: Transition { + // grow_fade_in + NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + // shrink_fade_out + NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + background: Rectangle { + radius: 2 + color: control.Material.dialogColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } + + T.Overlay.modal: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ProgressBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ProgressBar.qml new file mode 100644 index 0000000..2848f03 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ProgressBar.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: ProgressBarImpl { + implicitHeight: 4 + + scale: control.mirrored ? -1 : 1 + color: control.Material.accentColor + progress: control.position + indeterminate: control.visible && control.indeterminate + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 4 + y: (control.height - height) / 2 + height: 4 + + color: Qt.rgba(control.Material.accentColor.r, control.Material.accentColor.g, control.Material.accentColor.b, 0.25) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioButton.qml new file mode 100644 index 0000000..dadcc84 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioButton.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 8 + padding: 8 + verticalPadding: padding + 6 + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + + Ripple { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 28; height: 28 + + z: -1 + anchor: control + pressed: control.pressed + active: control.down || control.visualFocus || control.hovered + color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioDelegate.qml new file mode 100644 index 0000000..c977d33 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioDelegate.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 8 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioIndicator.qml new file mode 100644 index 0000000..e2c5518 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RadioIndicator.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +Rectangle { + id: indicator + implicitWidth: 20 + implicitHeight: 20 + radius: width / 2 + border.width: 2 + border.color: !control.enabled ? control.Material.hintTextColor + : control.checked || control.down ? control.Material.accentColor : control.Material.secondaryTextColor + color: "transparent" + + property Item control + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 10 + height: 10 + radius: width / 2 + color: parent.border.color + visible: indicator.control.checked || indicator.control.down + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RangeSlider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RangeSlider.qml new file mode 100644 index 0000000..f05601a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RangeSlider.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + first.handle: SliderHandle { + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + value: first.value + handleHasFocus: activeFocus + handlePressed: first.pressed + handleHovered: first.hovered + } + + second.handle: SliderHandle { + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + value: second.value + handleHasFocus: activeFocus + handlePressed: second.pressed + handleHovered: second.hovered + } + + background: Rectangle { + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + implicitWidth: control.horizontal ? 200 : 48 + implicitHeight: control.horizontal ? 48 : 200 + width: control.horizontal ? control.availableWidth : 4 + height: control.horizontal ? 4 : control.availableHeight + scale: control.horizontal && control.mirrored ? -1 : 1 + color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor + + Rectangle { + x: control.horizontal ? control.first.position * parent.width : 0 + y: control.horizontal ? 0 : control.second.visualPosition * parent.height + width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 4 + height: control.horizontal ? 4 : control.second.position * parent.height - control.first.position * parent.height + + color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RectangularGlow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RectangularGlow.qml new file mode 100644 index 0000000..c01e536 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RectangularGlow.qml @@ -0,0 +1,240 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 + +/* + A cross-graphics API implementation of QtGraphicalEffects' RectangularGlow. + */ +Item { + id: rootItem + + /* + This property defines how many pixels outside the item area are reached + by the glow. + + The value ranges from 0.0 (no glow) to inf (infinite glow). By default, + the property is set to \c 0.0. + + \table + \header + \li Output examples with different glowRadius values + \li + \li + \row + \li \image RectangularGlow_glowRadius1.png + \li \image RectangularGlow_glowRadius2.png + \li \image RectangularGlow_glowRadius3.png + \row + \li \b { glowRadius: 10 } + \li \b { glowRadius: 20 } + \li \b { glowRadius: 40 } + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + + */ + property real glowRadius: 0.0 + + /* + This property defines how large part of the glow color is strenghtened + near the source edges. + + The value ranges from 0.0 (no strenght increase) to 1.0 (maximum + strenght increase). By default, the property is set to \c 0.0. + + \table + \header + \li Output examples with different spread values + \li + \li + \row + \li \image RectangularGlow_spread1.png + \li \image RectangularGlow_spread2.png + \li \image RectangularGlow_spread3.png + \row + \li \b { spread: 0.0 } + \li \b { spread: 0.5 } + \li \b { spread: 1.0 } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + */ + property real spread: 0.0 + + /* + This property defines the RGBA color value which is used for the glow. + + By default, the property is set to \c "white". + + \table + \header + \li Output examples with different color values + \li + \li + \row + \li \image RectangularGlow_color1.png + \li \image RectangularGlow_color2.png + \li \image RectangularGlow_color3.png + \row + \li \b { color: #ffffff } + \li \b { color: #55ff55 } + \li \b { color: #5555ff } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + */ + property color color: "white" + + /* + This property defines the corner radius that is used to draw a glow with + rounded corners. + + The value ranges from 0.0 to half of the effective width or height of + the glow, whichever is smaller. This can be calculated with: \c{ + min(width, height) / 2.0 + glowRadius} + + By default, the property is bound to glowRadius property. The glow + behaves as if the rectangle was blurred when adjusting the glowRadius + property. + + \table + \header + \li Output examples with different cornerRadius values + \li + \li + \row + \li \image RectangularGlow_cornerRadius1.png + \li \image RectangularGlow_cornerRadius2.png + \li \image RectangularGlow_cornerRadius3.png + \row + \li \b { cornerRadius: 0 } + \li \b { cornerRadius: 25 } + \li \b { cornerRadius: 50 } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \endtable + */ + property real cornerRadius: glowRadius + + /* + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + + x: (parent.width - width) / 2.0 + y: (parent.height - height) / 2.0 + width: parent.width + rootItem.glowRadius * 2 + cornerRadius * 2 + height: parent.height + rootItem.glowRadius * 2 + cornerRadius * 2 + + function clampedCornerRadius() { + var maxCornerRadius = Math.min(rootItem.width, rootItem.height) / 2 + rootItem.glowRadius; + return Math.max(0, Math.min(rootItem.cornerRadius, maxCornerRadius)) + } + + property color color: rootItem.color + property real inverseSpread: 1.0 - rootItem.spread + property real relativeSizeX: ((inverseSpread * inverseSpread) * rootItem.glowRadius + cornerRadius * 2.0) / width + property real relativeSizeY: relativeSizeX * (width / height) + property real spread: rootItem.spread / 2.0 + property real cornerRadius: clampedCornerRadius() + + fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Material/shaders/RectangularGlow.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RoundButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RoundButton.qml new file mode 100644 index 0000000..13d0f9d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/RoundButton.qml @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topInset: 6 + leftInset: 6 + rightInset: 6 + bottomInset: 6 + padding: 12 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: !enabled ? Material.hintTextColor : + flat && highlighted ? Material.accentColor : + highlighted ? Material.primaryHighlightedTextColor : Material.foreground + + Material.elevation: flat ? control.down || control.hovered ? 2 : 0 + : control.down ? 12 : 6 + Material.background: flat ? "transparent" : undefined + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : + control.flat && control.highlighted ? control.Material.accentColor : + control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground + } + + // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state + background: Rectangle { + implicitWidth: control.Material.buttonHeight + implicitHeight: control.Material.buttonHeight + + radius: control.radius + color: !control.enabled ? control.Material.buttonDisabledColor + : control.checked || control.highlighted ? control.Material.highlightedButtonColor : control.Material.buttonColor + + Rectangle { + width: parent.width + height: parent.height + radius: control.radius + visible: control.hovered || control.visualFocus + color: control.Material.rippleColor + } + + Rectangle { + width: parent.width + height: parent.height + radius: control.radius + visible: control.down + color: control.Material.rippleColor + } + + // The layer is disabled when the button color is transparent so that you can do + // Material.background: "transparent" and get a proper flat button without needing + // to set Material.elevation as well + layer.enabled: control.enabled && control.Material.buttonColor.a > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ScrollBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ScrollBar.qml new file mode 100644 index 0000000..fda6434 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ScrollBar.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: control.interactive ? 1 : 2 + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + contentItem: Rectangle { + implicitWidth: control.interactive ? 13 : 4 + implicitHeight: control.interactive ? 13 : 4 + + color: control.pressed ? control.Material.scrollBarPressedColor : + control.interactive && control.hovered ? control.Material.scrollBarHoveredColor : control.Material.scrollBarColor + opacity: 0.0 + } + + background: Rectangle { + implicitWidth: control.interactive ? 16 : 4 + implicitHeight: control.interactive ? 16 : 4 + color: "#0e000000" + opacity: 0.0 + visible: control.interactive + } + + states: State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + } + + transitions: [ + Transition { + to: "active" + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } + PauseAnimation { duration: 2450 } + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } + } + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ScrollIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ScrollIndicator.qml new file mode 100644 index 0000000..19f23ad --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ScrollIndicator.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + + contentItem: Rectangle { + implicitWidth: 4 + implicitHeight: 4 + + color: control.Material.scrollBarColor + visible: control.size < 1.0 + opacity: 0.0 + + states: State { + name: "active" + when: control.active + PropertyChanges { target: control.contentItem; opacity: 0.75 } + } + + transitions: [ + Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 450 } + NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } + } + } + ] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Slider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Slider.qml new file mode 100644 index 0000000..ac7a0c4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Slider.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + handle: SliderHandle { + x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + value: control.value + handleHasFocus: control.visualFocus + handlePressed: control.pressed + handleHovered: control.hovered + } + + background: Rectangle { + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + implicitWidth: control.horizontal ? 200 : 48 + implicitHeight: control.horizontal ? 48 : 200 + width: control.horizontal ? control.availableWidth : 4 + height: control.horizontal ? 4 : control.availableHeight + scale: control.horizontal && control.mirrored ? -1 : 1 + color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor + + Rectangle { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height + width: control.horizontal ? control.position * parent.width : 4 + height: control.horizontal ? 4 : control.position * parent.height + + color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SliderHandle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SliderHandle.qml new file mode 100644 index 0000000..c9078bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SliderHandle.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +Item { + id: root + implicitWidth: initialSize + implicitHeight: initialSize + + property real value: 0 + property bool handleHasFocus: false + property bool handlePressed: false + property bool handleHovered: false + readonly property int initialSize: 13 + readonly property var control: parent + + Rectangle { + id: handleRect + width: parent.width + height: parent.height + radius: width / 2 + scale: root.handlePressed ? 1.5 : 1 + color: control.enabled ? root.control.Material.accentColor : root.control.Material.sliderDisabledColor + + Behavior on scale { + NumberAnimation { + duration: 250 + } + } + } + + Ripple { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 22; height: 22 + pressed: root.handlePressed + active: root.handlePressed || root.handleHasFocus || root.handleHovered + color: root.control.Material.highlightedRippleColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SpinBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SpinBox.qml new file mode 100644 index 0000000..23c86bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SpinBox.qml @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + spacing: 6 + topPadding: 8 + bottomPadding: 16 + leftPadding: (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + text: control.displayText + + font: control.font + color: enabled ? control.Material.foreground : control.Material.hintTextColor + selectionColor: control.Material.textSelectionColor + selectedTextColor: control.Material.foreground + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + cursorDelegate: CursorDelegate { } + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + } + + up.indicator: Item { + x: control.mirrored ? 0 : parent.width - width + implicitWidth: control.Material.touchTarget + implicitHeight: control.Material.touchTarget + height: parent.height + width: height + + Ripple { + clipRadius: 2 + x: control.spacing + y: control.spacing + width: parent.width - 2 * control.spacing + height: parent.height - 2 * control.spacing + pressed: control.up.pressed + active: control.up.pressed || control.up.hovered || control.visualFocus + color: control.Material.rippleColor + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: Math.min(parent.width / 3, parent.height / 3) + height: 2 + color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor + } + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 2 + height: Math.min(parent.width / 3, parent.height / 3) + color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor + } + } + + down.indicator: Item { + x: control.mirrored ? parent.width - width : 0 + implicitWidth: control.Material.touchTarget + implicitHeight: control.Material.touchTarget + height: parent.height + width: height + + Ripple { + clipRadius: 2 + x: control.spacing + y: control.spacing + width: parent.width - 2 * control.spacing + height: parent.height - 2 * control.spacing + pressed: control.down.pressed + active: control.down.pressed || control.down.hovered || control.visualFocus + color: control.Material.rippleColor + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 3 + height: 2 + color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor + } + } + + background: Item { + implicitWidth: 192 + implicitHeight: control.Material.touchTarget + + Rectangle { + x: parent.width / 2 - width / 2 + y: parent.y + parent.height - height - control.bottomPadding / 2 + width: control.availableWidth + height: control.activeFocus ? 2 : 1 + color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SplitView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SplitView.qml new file mode 100644 index 0000000..5544e83 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SplitView.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.13 +import QtQuick.Templates 2.13 as T +import QtQuick.Controls 2.13 +import QtQuick.Controls.impl 2.13 +import QtQuick.Controls.Material 2.13 + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 + color: T.SplitHandle.pressed ? control.Material.background + : Qt.lighter(control.Material.background, T.SplitHandle.hovered ? 1.2 : 1.1) + + Rectangle { + color: control.Material.secondaryTextColor + width: control.orientation === Qt.Horizontal ? thickness : length + height: control.orientation === Qt.Horizontal ? length : thickness + radius: thickness + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + property int length: parent.T.SplitHandle.pressed ? 3 : 8 + readonly property int thickness: parent.T.SplitHandle.pressed ? 3 : 1 + + Behavior on length { + NumberAnimation { + duration: 100 + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/StackView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/StackView.qml new file mode 100644 index 0000000..dd5d6ce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/StackView.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.StackView { + id: control + + popEnter: Transition { + // slide_in_left + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * -control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + popExit: Transition { + // slide_out_right + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } + + pushEnter: Transition { + // slide_in_right + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + pushExit: Transition { + // slide_out_left + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } + + replaceEnter: Transition { + // slide_in_right + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + replaceExit: Transition { + // slide_out_left + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwipeDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwipeDelegate.qml new file mode 100644 index 0000000..d06799b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwipeDelegate.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 8 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.Material.backgroundColor + + Rectangle { + width: parent.width + height: parent.height + visible: control.highlighted + color: control.Material.listHighlightColor + } + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + enabled: control.swipe.position === 0 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwipeView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwipeView.qml new file mode 100644 index 0000000..a84f16c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwipeView.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.SwipeView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + contentItem: ListView { + model: control.contentModel + interactive: control.interactive + currentIndex: control.currentIndex + focus: control.focus + + spacing: control.spacing + orientation: control.orientation + snapMode: ListView.SnapOneItem + boundsBehavior: Flickable.StopAtBounds + + highlightRangeMode: ListView.StrictlyEnforceRange + preferredHighlightBegin: 0 + preferredHighlightEnd: 0 + highlightMoveDuration: 250 + maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Switch.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Switch.qml new file mode 100644 index 0000000..fd0db92 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Switch.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 8 + spacing: 8 + + indicator: SwitchIndicator { + x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + + Ripple { + x: parent.handle.x + parent.handle.width / 2 - width / 2 + y: parent.handle.y + parent.handle.height / 2 - height / 2 + width: 28; height: 28 + pressed: control.pressed + active: control.down || control.visualFocus || control.hovered + color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwitchDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwitchDelegate.qml new file mode 100644 index 0000000..834a3df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwitchDelegate.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: Material.switchDelegateVerticalPadding + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwitchIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwitchIndicator.qml new file mode 100644 index 0000000..3034e77 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/SwitchIndicator.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +Item { + id: indicator + implicitWidth: 38 + implicitHeight: 32 + + property Item control + property alias handle: handle + + Material.elevation: 1 + + Rectangle { + width: parent.width + height: 14 + radius: height / 2 + y: parent.height / 2 - height / 2 + color: indicator.control.enabled ? (indicator.control.checked ? indicator.control.Material.switchCheckedTrackColor : indicator.control.Material.switchUncheckedTrackColor) + : indicator.control.Material.switchDisabledTrackColor + } + + Rectangle { + id: handle + x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: width / 2 + color: indicator.control.enabled ? (indicator.control.checked ? indicator.control.Material.switchCheckedHandleColor : indicator.control.Material.switchUncheckedHandleColor) + : indicator.control.Material.switchDisabledHandleColor + + Behavior on x { + enabled: !indicator.control.pressed + SmoothedAnimation { + duration: 300 + } + } + layer.enabled: indicator.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: indicator.Material.elevation + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TabBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TabBar.qml new file mode 100644 index 0000000..98c9132 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TabBar.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 1 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 250 + highlightResizeDuration: 0 + highlightFollowsCurrentItem: true + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 48 + preferredHighlightEnd: width - 48 + + highlight: Item { + z: 2 + Rectangle { + height: 2 + width: parent.width + y: control.position === T.TabBar.Footer ? 0 : parent.height - height + color: control.Material.accentColor + } + } + } + + background: Rectangle { + color: control.Material.backgroundColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + fullWidth: true + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TabButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TabButton.qml new file mode 100644 index 0000000..5245652 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TabButton.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: !enabled ? Material.hintTextColor : down || checked ? Material.accentColor : Material.foreground + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : control.down || control.checked ? control.Material.accentColor : control.Material.foreground + } + + background: Ripple { + implicitHeight: control.Material.touchTarget + + clip: true + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TextArea.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TextArea.qml new file mode 100644 index 0000000..249b640 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TextArea.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + 1 + topPadding + bottomPadding) + + topPadding: 8 + bottomPadding: 16 + + color: enabled ? Material.foreground : Material.hintTextColor + selectionColor: Material.accentColor + selectedTextColor: Material.primaryHighlightedTextColor + placeholderTextColor: Material.hintTextColor + cursorDelegate: CursorDelegate { } + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + elide: Text.ElideRight + renderType: control.renderType + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + } + + background: Rectangle { + y: parent.height - height - control.bottomPadding / 2 + implicitWidth: 120 + height: control.activeFocus ? 2 : 1 + color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TextField.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TextField.qml new file mode 100644 index 0000000..ed42b29 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/TextField.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + topPadding: 8 + bottomPadding: 16 + + color: enabled ? Material.foreground : Material.hintTextColor + selectionColor: Material.accentColor + selectedTextColor: Material.primaryHighlightedTextColor + placeholderTextColor: Material.hintTextColor + verticalAlignment: TextInput.AlignVCenter + + cursorDelegate: CursorDelegate { } + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + elide: Text.ElideRight + renderType: control.renderType + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + } + + background: Rectangle { + y: control.height - height - control.bottomPadding + 8 + implicitWidth: 120 + height: control.activeFocus || control.hovered ? 2 : 1 + color: control.activeFocus ? control.Material.accentColor + : (control.hovered ? control.Material.primaryTextColor : control.Material.hintTextColor) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolBar.qml new file mode 100644 index 0000000..5b88759 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolBar.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.ToolBar { + id: control + + Material.elevation: 4 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + Material.foreground: Material.toolTextColor + + spacing: 16 + + background: Rectangle { + implicitHeight: 48 + color: control.Material.toolBarColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + fullWidth: true + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolButton.qml new file mode 100644 index 0000000..69c4244 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolButton.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Controls.Material.impl 2.12 + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: !enabled ? Material.hintTextColor : checked || highlighted ? Material.accent : Material.foreground + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : + control.checked || control.highlighted ? control.Material.accent : control.Material.foreground + } + + background: Ripple { + implicitWidth: control.Material.touchTarget + implicitHeight: control.Material.touchTarget + + readonly property bool square: control.contentItem.width <= control.contentItem.height + + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + clip: !square + width: square ? parent.height / 2 : parent.width + height: square ? parent.height / 2 : parent.height + pressed: control.pressed + anchor: control + active: control.enabled && (control.down || control.visualFocus || control.hovered) + color: control.Material.rippleColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolSeparator.qml new file mode 100644 index 0000000..9436765 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolSeparator.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + horizontalPadding: vertical ? 12 : 5 + verticalPadding: vertical ? 5 : 12 + + contentItem: Rectangle { + implicitWidth: vertical ? 1 : 38 + implicitHeight: vertical ? 38 : 1 + color: control.Material.hintTextColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolTip.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolTip.qml new file mode 100644 index 0000000..83afe4b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/ToolTip.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 24 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 12 + padding: 8 + horizontalPadding: padding + 8 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + Material.theme: Material.Dark + + enter: Transition { + // toast_enter + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutQuad; duration: 500 } + } + + exit: Transition { + // toast_exit + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.InQuad; duration: 500 } + } + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + color: control.Material.foreground + } + + background: Rectangle { + implicitHeight: control.Material.tooltipHeight + color: control.Material.tooltipColor + opacity: 0.9 + radius: 2 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Tumbler.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Tumbler.qml new file mode 100644 index 0000000..30d66c5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/Tumbler.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Material 2.12 + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 60 // ### remove 60 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 200 // ### remove 200 in Qt 6 + + delegate: Text { + text: modelData + color: control.Material.foreground + font: control.font + opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/VerticalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/VerticalHeaderView.qml new file mode 100644 index 0000000..5fc5aeb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/VerticalHeaderView.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Templates 2.15 as T +import QtQuick.Controls.Material 2.15 +import QtQuick.Controls.Material.impl 2.15 + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + color: control.Material.backgroundColor + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: enabled ? control.Material.foreground : control.Material.hintTextColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/libqqc2materialstyleplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/libqqc2materialstyleplugin.so new file mode 100755 index 0000000..69881e2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/libqqc2materialstyleplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/plugins.qmltypes new file mode 100644 index 0000000..e290e0e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/plugins.qmltypes @@ -0,0 +1,459 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Controls.Material 2.15' + +Module { + dependencies: ["QtQuick.Controls 2.0"] + Component { name: "QQuickAttachedObject"; prototype: "QObject" } + Component { + name: "QQuickItem" + defaultProperty: "data" + prototype: "QObject" + Enum { + name: "Flags" + values: { + "ItemClipsChildrenToShape": 1, + "ItemAcceptsInputMethod": 2, + "ItemIsFocusScope": 4, + "ItemHasContents": 8, + "ItemAcceptsDrops": 16 + } + } + Enum { + name: "TransformOrigin" + values: { + "TopLeft": 0, + "Top": 1, + "TopRight": 2, + "Left": 3, + "Center": 4, + "Right": 5, + "BottomLeft": 6, + "Bottom": 7, + "BottomRight": 8 + } + } + Property { name: "parent"; type: "QQuickItem"; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "resources"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "children"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "z"; type: "double" } + Property { name: "width"; type: "double" } + Property { name: "height"; type: "double" } + Property { name: "opacity"; type: "double" } + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "visibleChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "states"; type: "QQuickState"; isList: true; isReadonly: true } + Property { name: "transitions"; type: "QQuickTransition"; isList: true; isReadonly: true } + Property { name: "state"; type: "string" } + Property { name: "childrenRect"; type: "QRectF"; isReadonly: true } + Property { name: "anchors"; type: "QQuickAnchors"; isReadonly: true; isPointer: true } + Property { name: "left"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "right"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "horizontalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "top"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "bottom"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "verticalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baseline"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baselineOffset"; type: "double" } + Property { name: "clip"; type: "bool" } + Property { name: "focus"; type: "bool" } + Property { name: "activeFocus"; type: "bool"; isReadonly: true } + Property { name: "activeFocusOnTab"; revision: 1; type: "bool" } + Property { name: "rotation"; type: "double" } + Property { name: "scale"; type: "double" } + Property { name: "transformOrigin"; type: "TransformOrigin" } + Property { name: "transformOriginPoint"; type: "QPointF"; isReadonly: true } + Property { name: "transform"; type: "QQuickTransform"; isList: true; isReadonly: true } + Property { name: "smooth"; type: "bool" } + Property { name: "antialiasing"; type: "bool" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "containmentMask"; revision: 11; type: "QObject"; isPointer: true } + Property { name: "layer"; type: "QQuickItemLayer"; isReadonly: true; isPointer: true } + Signal { + name: "childrenRectChanged" + Parameter { type: "QRectF" } + } + Signal { + name: "baselineOffsetChanged" + Parameter { type: "double" } + } + Signal { + name: "stateChanged" + Parameter { type: "string" } + } + Signal { + name: "focusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusOnTabChanged" + revision: 1 + Parameter { type: "bool" } + } + Signal { + name: "parentChanged" + Parameter { type: "QQuickItem"; isPointer: true } + } + Signal { + name: "transformOriginChanged" + Parameter { type: "TransformOrigin" } + } + Signal { + name: "smoothChanged" + Parameter { type: "bool" } + } + Signal { + name: "antialiasingChanged" + Parameter { type: "bool" } + } + Signal { + name: "clipChanged" + Parameter { type: "bool" } + } + Signal { + name: "windowChanged" + revision: 1 + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Signal { name: "containmentMaskChanged"; revision: 11 } + Method { name: "update" } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + Parameter { name: "targetSize"; type: "QSize" } + } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + } + Method { + name: "contains" + type: "bool" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapFromItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapFromGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { name: "forceActiveFocus" } + Method { + name: "forceActiveFocus" + Parameter { name: "reason"; type: "Qt::FocusReason" } + } + Method { + name: "nextItemInFocusChain" + revision: 1 + type: "QQuickItem*" + Parameter { name: "forward"; type: "bool" } + } + Method { name: "nextItemInFocusChain"; revision: 1; type: "QQuickItem*" } + Method { + name: "childAt" + type: "QQuickItem*" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + name: "QQuickMaterialBusyIndicator" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.Material.impl/BusyIndicatorImpl 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "color"; type: "QColor" } + Property { name: "running"; type: "bool" } + } + Component { + name: "QQuickMaterialProgressBar" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.Material.impl/ProgressBarImpl 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "color"; type: "QColor" } + Property { name: "progress"; type: "double" } + Property { name: "indeterminate"; type: "bool" } + } + Component { + name: "QQuickMaterialRipple" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.Material.impl/Ripple 2.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Trigger" + values: { + "Press": 0, + "Release": 1 + } + } + Property { name: "color"; type: "QColor" } + Property { name: "clipRadius"; type: "double" } + Property { name: "pressed"; type: "bool" } + Property { name: "active"; type: "bool" } + Property { name: "anchor"; type: "QQuickItem"; isPointer: true } + Property { name: "trigger"; type: "Trigger" } + } + Component { + name: "QQuickMaterialStyle" + prototype: "QQuickAttachedObject" + exports: ["QtQuick.Controls.Material/Material 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "Theme" + values: { + "Light": 0, + "Dark": 1, + "System": 2 + } + } + Enum { + name: "Variant" + values: { + "Normal": 0, + "Dense": 1 + } + } + Enum { + name: "Color" + values: { + "Red": 0, + "Pink": 1, + "Purple": 2, + "DeepPurple": 3, + "Indigo": 4, + "Blue": 5, + "LightBlue": 6, + "Cyan": 7, + "Teal": 8, + "Green": 9, + "LightGreen": 10, + "Lime": 11, + "Yellow": 12, + "Amber": 13, + "Orange": 14, + "DeepOrange": 15, + "Brown": 16, + "Grey": 17, + "BlueGrey": 18 + } + } + Enum { + name: "Shade" + values: { + "Shade50": 0, + "Shade100": 1, + "Shade200": 2, + "Shade300": 3, + "Shade400": 4, + "Shade500": 5, + "Shade600": 6, + "Shade700": 7, + "Shade800": 8, + "Shade900": 9, + "ShadeA100": 10, + "ShadeA200": 11, + "ShadeA400": 12, + "ShadeA700": 13 + } + } + Property { name: "theme"; type: "Theme" } + Property { name: "primary"; type: "QVariant" } + Property { name: "accent"; type: "QVariant" } + Property { name: "foreground"; type: "QVariant" } + Property { name: "background"; type: "QVariant" } + Property { name: "elevation"; type: "int" } + Property { name: "primaryColor"; type: "QColor"; isReadonly: true } + Property { name: "accentColor"; type: "QColor"; isReadonly: true } + Property { name: "backgroundColor"; type: "QColor"; isReadonly: true } + Property { name: "primaryTextColor"; type: "QColor"; isReadonly: true } + Property { name: "primaryHighlightedTextColor"; type: "QColor"; isReadonly: true } + Property { name: "secondaryTextColor"; type: "QColor"; isReadonly: true } + Property { name: "hintTextColor"; type: "QColor"; isReadonly: true } + Property { name: "textSelectionColor"; type: "QColor"; isReadonly: true } + Property { name: "dropShadowColor"; type: "QColor"; isReadonly: true } + Property { name: "dividerColor"; type: "QColor"; isReadonly: true } + Property { name: "iconColor"; type: "QColor"; isReadonly: true } + Property { name: "iconDisabledColor"; type: "QColor"; isReadonly: true } + Property { name: "buttonColor"; type: "QColor"; isReadonly: true } + Property { name: "buttonDisabledColor"; type: "QColor"; isReadonly: true } + Property { name: "highlightedButtonColor"; type: "QColor"; isReadonly: true } + Property { name: "frameColor"; type: "QColor"; isReadonly: true } + Property { name: "rippleColor"; type: "QColor"; isReadonly: true } + Property { name: "highlightedRippleColor"; type: "QColor"; isReadonly: true } + Property { name: "switchUncheckedTrackColor"; type: "QColor"; isReadonly: true } + Property { name: "switchCheckedTrackColor"; type: "QColor"; isReadonly: true } + Property { name: "switchUncheckedHandleColor"; type: "QColor"; isReadonly: true } + Property { name: "switchCheckedHandleColor"; type: "QColor"; isReadonly: true } + Property { name: "switchDisabledTrackColor"; type: "QColor"; isReadonly: true } + Property { name: "switchDisabledHandleColor"; type: "QColor"; isReadonly: true } + Property { name: "scrollBarColor"; type: "QColor"; isReadonly: true } + Property { name: "scrollBarHoveredColor"; type: "QColor"; isReadonly: true } + Property { name: "scrollBarPressedColor"; type: "QColor"; isReadonly: true } + Property { name: "dialogColor"; type: "QColor"; isReadonly: true } + Property { name: "backgroundDimColor"; type: "QColor"; isReadonly: true } + Property { name: "listHighlightColor"; type: "QColor"; isReadonly: true } + Property { name: "tooltipColor"; type: "QColor"; isReadonly: true } + Property { name: "toolBarColor"; type: "QColor"; isReadonly: true } + Property { name: "toolTextColor"; type: "QColor"; isReadonly: true } + Property { name: "spinBoxDisabledIconColor"; type: "QColor"; isReadonly: true } + Property { name: "sliderDisabledColor"; revision: 15; type: "QColor"; isReadonly: true } + Property { name: "touchTarget"; type: "int"; isReadonly: true } + Property { name: "buttonHeight"; type: "int"; isReadonly: true } + Property { name: "delegateHeight"; type: "int"; isReadonly: true } + Property { name: "dialogButtonBoxHeight"; type: "int"; isReadonly: true } + Property { name: "frameVerticalPadding"; type: "int"; isReadonly: true } + Property { name: "menuItemHeight"; type: "int"; isReadonly: true } + Property { name: "menuItemVerticalPadding"; type: "int"; isReadonly: true } + Property { name: "switchDelegateVerticalPadding"; type: "int"; isReadonly: true } + Property { name: "tooltipHeight"; type: "int"; isReadonly: true } + Signal { name: "paletteChanged" } + Method { + name: "color" + type: "QColor" + Parameter { name: "color"; type: "Color" } + Parameter { name: "shade"; type: "Shade" } + } + Method { + name: "color" + type: "QColor" + Parameter { name: "color"; type: "Color" } + } + Method { + name: "shade" + type: "QColor" + Parameter { name: "color"; type: "QColor" } + Parameter { name: "shade"; type: "Shade" } + } + } + Component { + prototype: "QQuickItem" + name: "QtQuick.Controls.Material.impl/BoxShadow 2.0" + exports: ["QtQuick.Controls.Material.impl/BoxShadow 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "offsetX"; type: "int" } + Property { name: "offsetY"; type: "int" } + Property { name: "blurRadius"; type: "int" } + Property { name: "spreadRadius"; type: "int" } + Property { name: "source"; type: "QQuickItem"; isPointer: true } + Property { name: "fullWidth"; type: "bool" } + Property { name: "fullHeight"; type: "bool" } + Property { name: "glowRadius"; type: "double" } + Property { name: "spread"; type: "double" } + Property { name: "color"; type: "QColor" } + Property { name: "cornerRadius"; type: "double" } + Property { name: "cached"; type: "bool" } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Material.impl/CheckIndicator 2.0" + exports: ["QtQuick.Controls.Material.impl/CheckIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "checkState"; type: "int" } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Material.impl/CursorDelegate 2.0" + exports: ["QtQuick.Controls.Material.impl/CursorDelegate 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickItem" + name: "QtQuick.Controls.Material.impl/ElevationEffect 2.0" + exports: ["QtQuick.Controls.Material.impl/ElevationEffect 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "source"; type: "QVariant" } + Property { name: "elevation"; type: "int" } + Property { name: "fullWidth"; type: "bool" } + Property { name: "fullHeight"; type: "bool" } + Property { name: "sourceItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "_shadows"; type: "QVariant"; isReadonly: true } + Property { name: "_shadow"; type: "QVariant"; isReadonly: true } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Material.impl/RadioIndicator 2.0" + exports: ["QtQuick.Controls.Material.impl/RadioIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + } + Component { + prototype: "QQuickItem" + name: "QtQuick.Controls.Material.impl/RectangularGlow 2.0" + exports: ["QtQuick.Controls.Material.impl/RectangularGlow 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "glowRadius"; type: "double" } + Property { name: "spread"; type: "double" } + Property { name: "color"; type: "QColor" } + Property { name: "cornerRadius"; type: "double" } + Property { name: "cached"; type: "bool" } + } + Component { + prototype: "QQuickItem" + name: "QtQuick.Controls.Material.impl/SliderHandle 2.0" + exports: ["QtQuick.Controls.Material.impl/SliderHandle 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "value"; type: "double" } + Property { name: "handleHasFocus"; type: "bool" } + Property { name: "handlePressed"; type: "bool" } + Property { name: "handleHovered"; type: "bool" } + Property { name: "initialSize"; type: "int"; isReadonly: true } + Property { name: "control"; type: "QVariant"; isReadonly: true } + } + Component { + prototype: "QQuickItem" + name: "QtQuick.Controls.Material.impl/SwitchIndicator 2.0" + exports: ["QtQuick.Controls.Material.impl/SwitchIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "handle"; type: "QQuickRectangle"; isReadonly: true; isPointer: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/qmldir new file mode 100644 index 0000000..d48b7b1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Material/qmldir @@ -0,0 +1,4 @@ +module QtQuick.Controls.Material +plugin qqc2materialstyleplugin +classname QtQuickControls2MaterialStylePlugin +depends QtQuick.Controls 2.5 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Menu.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Menu.qml new file mode 100644 index 0000000..cf3a52f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Menu.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Window 2.12 + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 0 + overlap: 1 + + delegate: MenuItem { } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + ScrollIndicator.vertical: ScrollIndicator {} + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + color: control.palette.window + border.color: control.palette.dark + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.shadow, 0.5) + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent(control.palette.shadow, 0.12) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuBar.qml new file mode 100644 index 0000000..122cdc5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuBar.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + implicitHeight: 40 + color: control.palette.button + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuBarItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuBarItem.qml new file mode 100644 index 0000000..f683541 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuBarItem.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 6 + leftPadding: 12 + rightPadding: 16 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + color: control.down || control.highlighted ? control.palette.mid : "transparent" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuItem.qml new file mode 100644 index 0000000..22cdf3e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuItem.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.windowText + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.windowText + } + + indicator: ColorImage { + x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.checked + source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/check.png" : "" + color: control.palette.windowText + defaultColor: "#353637" + } + + arrow: ColorImage { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.subMenu + mirror: control.mirrored + source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/arrow-indicator.png" : "" + color: control.palette.windowText + defaultColor: "#353637" + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + x: 1 + y: 1 + width: control.width - 2 + height: control.height - 2 + color: control.down ? control.palette.midlight : control.highlighted ? control.palette.light : "transparent" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuSeparator.qml new file mode 100644 index 0000000..cc5c2b6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/MenuSeparator.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + verticalPadding: padding + 4 + + contentItem: Rectangle { + implicitWidth: 188 + implicitHeight: 1 + color: control.palette.mid + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Page.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Page.qml new file mode 100644 index 0000000..4b3cf3d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Page.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + background: Rectangle { + color: control.palette.window + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/PageIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/PageIndicator.qml new file mode 100644 index 0000000..78f9e3c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/PageIndicator.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + delegate: Rectangle { + implicitWidth: 8 + implicitHeight: 8 + + radius: width / 2 + color: control.palette.dark + + opacity: index === currentIndex ? 0.95 : pressed ? 0.7 : 0.45 + Behavior on opacity { OpacityAnimator { duration: 100 } } + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Pane.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Pane.qml new file mode 100644 index 0000000..47b916e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Pane.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.palette.window + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Popup.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Popup.qml new file mode 100644 index 0000000..ee243c1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Popup.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.palette.window + border.color: control.palette.dark + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.shadow, 0.5) + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent(control.palette.shadow, 0.12) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ProgressBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ProgressBar.qml new file mode 100644 index 0000000..61cdea4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ProgressBar.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: ProgressBarImpl { + implicitHeight: 6 + implicitWidth: 116 + scale: control.mirrored ? -1 : 1 + progress: control.position + indeterminate: control.visible && control.indeterminate + color: control.palette.dark + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 6 + y: (control.height - height) / 2 + height: 6 + + color: control.palette.midlight + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RadioButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RadioButton.qml new file mode 100644 index 0000000..cdf0c30 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RadioButton.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + // keep in sync with RadioDelegate.qml (shared RadioIndicator.qml was removed for performance reasons) + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + radius: width / 2 + color: control.down ? control.palette.light : control.palette.base + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.palette.mid + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: width / 2 + color: control.palette.text + visible: control.checked + } + } + + contentItem: CheckLabel { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RadioDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RadioDelegate.qml new file mode 100644 index 0000000..a7e7dec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RadioDelegate.qml @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 12 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + // keep in sync with RadioButton.qml (shared RadioIndicator.qml was removed for performance reasons) + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + radius: width / 2 + color: control.down ? control.palette.light : control.palette.base + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.palette.mid + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: width / 2 + color: control.palette.text + visible: control.checked + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? control.palette.midlight : control.palette.light + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RangeSlider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RangeSlider.qml new file mode 100644 index 0000000..c3e7c96 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RangeSlider.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + first.handle: Rectangle { + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + implicitWidth: 28 + implicitHeight: 28 + radius: width / 2 + border.width: activeFocus ? 2 : 1 + border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + color: control.first.pressed ? control.palette.light : control.palette.window + } + + second.handle: Rectangle { + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + implicitWidth: 28 + implicitHeight: 28 + radius: width / 2 + border.width: activeFocus ? 2 : 1 + border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + color: control.second.pressed ? control.palette.light : control.palette.window + } + + background: Rectangle { + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + implicitWidth: control.horizontal ? 200 : 6 + implicitHeight: control.horizontal ? 6 : 200 + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + radius: 3 + color: control.palette.midlight + scale: control.horizontal && control.mirrored ? -1 : 1 + + Rectangle { + x: control.horizontal ? control.first.position * parent.width + 3 : 0 + y: control.horizontal ? 0 : control.second.visualPosition * parent.height + 3 + width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width - 6 : 6 + height: control.horizontal ? 6 : control.second.position * parent.height - control.first.position * parent.height - 6 + + color: control.palette.dark + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RoundButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RoundButton.qml new file mode 100644 index 0000000..825d525 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/RoundButton.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + radius: control.radius + opacity: enabled ? 1 : 0.3 + visible: !control.flat || control.down || control.checked || control.highlighted + color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, + control.palette.mid, control.down ? 0.5 : 0.0) + border.color: control.palette.highlight + border.width: control.visualFocus ? 2 : 0 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollBar.qml new file mode 100644 index 0000000..0948fb1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollBar.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + contentItem: Rectangle { + implicitWidth: control.interactive ? 6 : 2 + implicitHeight: control.interactive ? 6 : 2 + + radius: width / 2 + color: control.pressed ? control.palette.dark : control.palette.mid + opacity: 0.0 + + states: State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + PropertyChanges { target: control.contentItem; opacity: 0.75 } + } + + transitions: Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 450 } + NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollIndicator.qml new file mode 100644 index 0000000..795c20e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollIndicator.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + + contentItem: Rectangle { + implicitWidth: 2 + implicitHeight: 2 + + color: control.palette.mid + visible: control.size < 1.0 + opacity: 0.0 + + states: State { + name: "active" + when: control.active + PropertyChanges { target: control.contentItem; opacity: 0.75 } + } + + transitions: [ + Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 450 } + NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } + } + } + ] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollView.qml new file mode 100644 index 0000000..f775d62 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ScrollView.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ScrollView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: control.topPadding + height: control.availableHeight + active: control.ScrollBar.horizontal.active + } + + ScrollBar.horizontal: ScrollBar { + parent: control + x: control.leftPadding + y: control.height - height + width: control.availableWidth + active: control.ScrollBar.vertical.active + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Slider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Slider.qml new file mode 100644 index 0000000..6d53238 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Slider.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + handle: Rectangle { + x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + implicitWidth: 28 + implicitHeight: 28 + radius: width / 2 + color: control.pressed ? control.palette.light : control.palette.window + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + } + + background: Rectangle { + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + implicitWidth: control.horizontal ? 200 : 6 + implicitHeight: control.horizontal ? 6 : 200 + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + radius: 3 + color: control.palette.midlight + scale: control.horizontal && control.mirrored ? -1 : 1 + + Rectangle { + y: control.horizontal ? 0 : control.visualPosition * parent.height + width: control.horizontal ? control.position * parent.width : 6 + height: control.horizontal ? 6 : control.position * parent.height + + radius: 3 + color: control.palette.dark + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SpinBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SpinBox.qml new file mode 100644 index 0000000..d1c2ea5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SpinBox.qml @@ -0,0 +1,135 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 2 * padding + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + padding: 6 + leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + z: 2 + text: control.displayText + + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + + Rectangle { + x: -6 - (control.down.indicator ? 1 : 0) + y: -6 + width: control.width - (control.up.indicator ? control.up.indicator.width - 1 : 0) - (control.down.indicator ? control.down.indicator.width - 1 : 0) + height: control.height + visible: control.activeFocus + color: "transparent" + border.color: control.palette.highlight + border.width: 2 + } + } + + up.indicator: Rectangle { + x: control.mirrored ? 0 : parent.width - width + height: parent.height + implicitWidth: 40 + implicitHeight: 40 + color: control.up.pressed ? control.palette.mid : control.palette.button + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 3 + height: 2 + color: enabled ? control.palette.buttonText : control.palette.mid + } + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 2 + height: parent.width / 3 + color: enabled ? control.palette.buttonText : control.palette.mid + } + } + + down.indicator: Rectangle { + x: control.mirrored ? parent.width - width : 0 + height: parent.height + implicitWidth: 40 + implicitHeight: 40 + color: control.down.pressed ? control.palette.mid : control.palette.button + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 3 + height: 2 + color: enabled ? control.palette.buttonText : control.palette.mid + } + } + + background: Rectangle { + implicitWidth: 140 + color: enabled ? control.palette.base : control.palette.button + border.color: control.palette.button + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SplitView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SplitView.qml new file mode 100644 index 0000000..9d37a83 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SplitView.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.13 +import QtQuick.Templates 2.13 as T +import QtQuick.Controls 2.13 +import QtQuick.Controls.impl 2.13 + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 + color: T.SplitHandle.pressed ? control.palette.mid + : (T.SplitHandle.hovered ? control.palette.midlight : control.palette.button) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/StackView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/StackView.qml new file mode 100644 index 0000000..3e416b8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/StackView.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Templates 2.12 as T + +T.StackView { + id: control + + popEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + popExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic } + } + + pushEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + pushExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } + } + + replaceEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + replaceExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwipeDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwipeDelegate.qml new file mode 100644 index 0000000..37d66bb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwipeDelegate.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 12 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + color: Color.blend(control.down ? control.palette.midlight : control.palette.light, + control.palette.highlight, control.visualFocus ? 0.15 : 0.0) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwipeView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwipeView.qml new file mode 100644 index 0000000..7722d25 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwipeView.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Templates 2.12 as T + +T.SwipeView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + contentItem: ListView { + model: control.contentModel + interactive: control.interactive + currentIndex: control.currentIndex + focus: control.focus + + spacing: control.spacing + orientation: control.orientation + snapMode: ListView.SnapOneItem + boundsBehavior: Flickable.StopAtBounds + + highlightRangeMode: ListView.StrictlyEnforceRange + preferredHighlightBegin: 0 + preferredHighlightEnd: 0 + highlightMoveDuration: 250 + maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Switch.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Switch.qml new file mode 100644 index 0000000..f62e250 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Switch.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + indicator: PaddedRectangle { + implicitWidth: 56 + implicitHeight: 28 + + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + radius: 8 + leftPadding: 0 + rightPadding: 0 + padding: (height - 16) / 2 + color: control.checked ? control.palette.dark : control.palette.midlight + + Rectangle { + x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + width: 28 + height: 28 + radius: 16 + color: control.down ? control.palette.light : control.palette.window + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 200 } + } + } + } + + contentItem: CheckLabel { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwitchDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwitchDelegate.qml new file mode 100644 index 0000000..d6447e7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/SwitchDelegate.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 12 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + indicator: PaddedRectangle { + implicitWidth: 56 + implicitHeight: 28 + + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + radius: 8 + leftPadding: 0 + rightPadding: 0 + padding: (height - 16) / 2 + color: control.checked ? control.palette.dark : control.palette.midlight + + Rectangle { + x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + width: 28 + height: 28 + radius: 16 + color: control.down ? control.palette.light : control.palette.window + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 200 } + } + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? control.palette.midlight : control.palette.light + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TabBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TabBar.qml new file mode 100644 index 0000000..83f6b3b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TabBar.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 1 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 0 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 40 + preferredHighlightEnd: width - 40 + } + + background: Rectangle { + color: control.palette.window + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TabButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TabButton.qml new file mode 100644 index 0000000..f8b303e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TabButton.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: checked ? control.palette.windowText : control.palette.brightText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.checked ? control.palette.windowText : control.palette.brightText + } + + background: Rectangle { + implicitHeight: 40 + color: Color.blend(control.checked ? control.palette.window : control.palette.dark, + control.palette.mid, control.down ? 0.5 : 0.0) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TextArea.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TextArea.qml new file mode 100644 index 0000000..45790e6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TextArea.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 6 + leftPadding: padding + 4 + + color: control.palette.text + placeholderTextColor: Color.transparent(control.color, 0.5) + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TextField.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TextField.qml new file mode 100644 index 0000000..4d9cb69 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/TextField.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 6 + leftPadding: padding + 4 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + verticalAlignment: TextInput.AlignVCenter + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + border.width: control.activeFocus ? 2 : 1 + color: control.palette.base + border.color: control.activeFocus ? control.palette.highlight : control.palette.mid + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolBar.qml new file mode 100644 index 0000000..1e07b6b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolBar.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + background: Rectangle { + implicitHeight: 40 + color: control.palette.button + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolButton.qml new file mode 100644 index 0000000..63aaf89 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolButton.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: visualFocus ? control.palette.highlight : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.visualFocus ? control.palette.highlight : control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + + opacity: control.down ? 1.0 : 0.5 + color: control.down || control.checked || control.highlighted ? control.palette.mid : control.palette.button + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolSeparator.qml new file mode 100644 index 0000000..188d075 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolSeparator.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: vertical ? 6 : 2 + verticalPadding: vertical ? 2 : 6 + + contentItem: Rectangle { + implicitWidth: vertical ? 1 : 30 + implicitHeight: vertical ? 30 : 1 + color: control.palette.mid + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolTip.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolTip.qml new file mode 100644 index 0000000..e038990 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/ToolTip.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 3 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 6 + padding: 6 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + color: control.palette.toolTipText + } + + background: Rectangle { + border.color: control.palette.dark + color: control.palette.toolTipBase + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Tumbler.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Tumbler.qml new file mode 100644 index 0000000..cd10263 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Tumbler.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Templates 2.12 as T + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 60 // ### remove 60 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 200 // ### remove 200 in Qt 6 + + delegate: Text { + text: modelData + color: control.visualFocus ? control.palette.highlight : control.palette.text + font: control.font + opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ApplicationWindow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ApplicationWindow.qml new file mode 100644 index 0000000..153b9e8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ApplicationWindow.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.ApplicationWindow { + id: window + + color: Universal.background + + overlay.modal: Rectangle { + color: window.Universal.baseLowColor + } + + overlay.modeless: Rectangle { + color: window.Universal.baseLowColor + } + + FocusRectangle { + parent: window.activeFocusControl + width: parent ? parent.width : 0 + height: parent ? parent.height : 0 + visible: parent && !!parent.useSystemFocusVisuals && !!parent.visualFocus + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/BusyIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/BusyIndicator.qml new file mode 100644 index 0000000..2ad21b4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/BusyIndicator.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: BusyIndicatorImpl { + implicitWidth: 20 + implicitHeight: 20 + + readonly property real size: Math.min(control.availableWidth, control.availableHeight) + + count: size < 60 ? 5 : 6 // "Small" vs. "Large" + color: control.Universal.accent + visible: control.running + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Button.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Button.qml new file mode 100644 index 0000000..657b283 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Button.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 8 + verticalPadding: padding - 4 + spacing: 8 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + property bool useSystemFocusVisuals: true + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + implicitWidth: 32 + implicitHeight: 32 + + visible: !control.flat || control.down || control.checked || control.highlighted + color: control.down ? control.Universal.baseMediumLowColor : + control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : + control.Universal.baseLowColor + + Rectangle { + width: parent.width + height: parent.height + color: "transparent" + visible: control.hovered + border.width: 2 // ButtonBorderThemeThickness + border.color: control.Universal.baseMediumLowColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckBox.qml new file mode 100644 index 0000000..9494f4d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckBox.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 8 + + property bool useSystemFocusVisuals: true + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckDelegate.qml new file mode 100644 index 0000000..b544c42 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckDelegate.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + visible: control.down || control.highlighted || control.visualFocus || control.hovered + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckIndicator.qml new file mode 100644 index 0000000..8f41617 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/CheckIndicator.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +Rectangle { + id: indicator + implicitWidth: 20 + implicitHeight: 20 + + color: !control.enabled ? "transparent" : + control.down && !partiallyChecked ? control.Universal.baseMediumColor : + control.checkState === Qt.Checked ? control.Universal.accent : "transparent" + border.color: !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.baseMediumColor : + control.checked ? control.Universal.accent : control.Universal.baseMediumHighColor + border.width: 2 // CheckBoxBorderThemeThickness + + property Item control + readonly property bool partiallyChecked: control.checkState === Qt.PartiallyChecked + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + visible: indicator.control.checkState === Qt.Checked + color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : indicator.control.Universal.chromeWhiteColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Universal/images/checkmark.png" + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: indicator.partiallyChecked ? parent.width / 2 : parent.width + height: indicator.partiallyChecked ? parent.height / 2 : parent.height + + visible: !indicator.control.pressed && indicator.control.hovered || indicator.partiallyChecked + color: !indicator.partiallyChecked ? "transparent" : + !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.down ? indicator.control.Universal.baseMediumColor : + indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor + border.width: indicator.partiallyChecked ? 0 : 2 // CheckBoxBorderThemeThickness + border.color: indicator.control.Universal.baseMediumLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ComboBox.qml new file mode 100644 index 0000000..9b88ccf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ComboBox.qml @@ -0,0 +1,159 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Controls.impl 2.15 +import QtQuick.Templates 2.15 as T +import QtQuick.Controls.Universal 2.15 + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + Universal.theme: editable && activeFocus ? Universal.Light : undefined + + delegate: ItemDelegate { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumHighColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Universal/images/downarrow.png" + + Rectangle { + z: -1 + width: parent.width + height: parent.height + color: control.activeFocus ? control.Universal.accent : + control.pressed ? control.Universal.baseMediumLowColor : + control.hovered ? control.Universal.baseLowColor : "transparent" + visible: control.editable && !contentItem.hovered && (control.pressed || control.hovered) + opacity: control.activeFocus && !control.pressed ? 0.4 : 1.0 + } + } + + contentItem: T.TextField { + leftPadding: control.mirrored ? 1 : 12 + rightPadding: control.mirrored ? 10 : 1 + topPadding: 5 - control.topPadding + bottomPadding: 7 - control.bottomPadding + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: !control.enabled ? control.Universal.chromeDisabledLowColor : + control.editable && control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground + selectionColor: control.Universal.accent + selectedTextColor: control.Universal.chromeWhiteColor + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 32 + + border.width: control.flat ? 0 : 2 // ComboBoxBorderThemeThickness + border.color: !control.enabled ? control.Universal.baseLowColor : + control.editable && control.activeFocus ? control.Universal.accent : + control.down ? control.Universal.baseMediumLowColor : + control.hovered ? control.Universal.baseMediumColor : control.Universal.baseMediumLowColor + color: !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.listMediumColor : + control.flat && control.hovered ? control.Universal.listLowColor : + control.editable && control.activeFocus ? control.Universal.background : control.Universal.altMediumLowColor + visible: !control.flat || control.pressed || control.hovered || control.visualFocus + + Rectangle { + x: 2 + y: 2 + width: parent.width - 4 + height: parent.height - 4 + + visible: control.visualFocus && !control.editable + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + } + + popup: T.Popup { + width: control.width + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) + topMargin: 8 + bottomMargin: 8 + + Universal.theme: control.Universal.theme + Universal.accent: control.Universal.accent + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // FlyoutBorderThemeThickness + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/DelayButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/DelayButton.qml new file mode 100644 index 0000000..2a3a3b3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/DelayButton.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 8 + verticalPadding: padding - 4 + + property bool useSystemFocusVisuals: true + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: Text { + text: control.text + font: control.font + elide: Text.ElideRight + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } + + background: Rectangle { + implicitWidth: 32 + implicitHeight: 32 + + color: control.down ? control.Universal.baseMediumLowColor : + control.enabled && control.checked ? control.Universal.accent : control.Universal.baseLowColor + + Rectangle { + visible: !control.checked + width: parent.width * control.progress + height: parent.height + color: control.Universal.accent + } + + Rectangle { + width: parent.width + height: parent.height + color: "transparent" + visible: control.hovered + border.width: 2 // ButtonBorderThemeThickness + border.color: control.Universal.baseMediumLowColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Dial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Dial.qml new file mode 100644 index 0000000..f45d912 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Dial.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 100 // ### remove 100 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 100 // ### remove 100 in Qt 6 + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 100 + + x: control.width / 2 - width / 2 + y: control.height / 2 - height / 2 + width: Math.max(64, Math.min(control.width, control.height)) + height: width + radius: width / 2 + color: "transparent" + border.color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumColor + border.width: 2 + } + + handle: Rectangle { + implicitWidth: 14 + implicitHeight: 14 + + x: control.background.x + control.background.width / 2 - control.handle.width / 2 + y: control.background.y + control.background.height / 2 - control.handle.height / 2 + + radius: width / 2 + color: !control.enabled ? control.Universal.baseLowColor : + control.pressed ? control.Universal.baseMediumColor : + control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor + + transform: [ + Translate { + y: -control.background.height * 0.4 + control.handle.height / 2 + }, + Rotation { + angle: control.angle + origin.x: control.handle.width / 2 + origin.y: control.handle.height / 2 + } + ] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Dialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Dialog.qml new file mode 100644 index 0000000..6151d09 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Dialog.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.Universal 2.12 + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + padding: 24 + verticalPadding: 18 + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // FlyoutBorderThemeThickness + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + topPadding: 18 + leftPadding: 24 + rightPadding: 24 + // TODO: QPlatformTheme::TitleBarFont + font.pixelSize: 20 + background: Rectangle { + x: 1; y: 1 // // FlyoutBorderThemeThickness + color: control.Universal.chromeMediumLowColor + width: parent.width - 2 + height: parent.height - 1 + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: control.Universal.baseLowColor + } + + T.Overlay.modeless: Rectangle { + color: control.Universal.baseLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/DialogButtonBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/DialogButtonBox.qml new file mode 100644 index 0000000..103b46c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/DialogButtonBox.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.Universal 2.12 + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + contentWidth: contentItem.contentWidth + + spacing: 4 + padding: 24 + topPadding: position === T.DialogButtonBox.Footer ? 6 : 24 + bottomPadding: position === T.DialogButtonBox.Header ? 6 : 24 + alignment: count === 1 ? Qt.AlignRight : undefined + + delegate: Button { + width: control.count === 1 ? control.availableWidth / 2 : undefined + } + + contentItem: ListView { + implicitWidth: contentWidth + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: Rectangle { + implicitHeight: 32 + color: control.Universal.chromeMediumLowColor + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Drawer.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Drawer.qml new file mode 100644 index 0000000..7ec1d7f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Drawer.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: control.edge === Qt.BottomEdge + leftPadding: control.edge === Qt.RightEdge + rightPadding: control.edge === Qt.LeftEdge + bottomPadding: control.edge === Qt.TopEdge + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + Rectangle { + readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + width: horizontal ? 1 : parent.width + height: horizontal ? parent.height : 1 + color: control.Universal.chromeHighColor + x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 + y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 + } + } + + T.Overlay.modal: Rectangle { + color: control.Universal.baseLowColor + } + + T.Overlay.modeless: Rectangle { + color: control.Universal.baseLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Frame.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Frame.qml new file mode 100644 index 0000000..8bb4484 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Frame.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: "transparent" + border.color: control.Universal.chromeDisabledLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/GroupBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/GroupBox.qml new file mode 100644 index 0000000..dc156dd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/GroupBox.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 12 + padding: 12 + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + + color: "transparent" + border.color: control.Universal.chromeDisabledLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/HorizontalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/HorizontalHeaderView.qml new file mode 100644 index 0000000..47daa8c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/HorizontalHeaderView.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Controls.impl 2.15 +import QtQuick.Templates 2.15 as T +import QtQuick.Controls.Universal 2.15 +import QtQuick.Controls.Universal.impl 2.15 + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + color: control.Universal.background + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ItemDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ItemDelegate.qml new file mode 100644 index 0000000..ed98540 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ItemDelegate.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + visible: control.down || control.highlighted || control.visualFocus || control.hovered + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Label.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Label.qml new file mode 100644 index 0000000..c66435c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Label.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.Label { + id: control + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + linkColor: Universal.accent +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Menu.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Menu.qml new file mode 100644 index 0000000..4814d00 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Menu.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 +import QtQuick.Window 2.12 + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 0 + overlap: 1 + + delegate: MenuItem { } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + ScrollIndicator.vertical: ScrollIndicator {} + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // FlyoutBorderThemeThickness + } + + T.Overlay.modal: Rectangle { + color: control.Universal.baseLowColor + } + + T.Overlay.modeless: Rectangle { + color: control.Universal.baseLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuBar.qml new file mode 100644 index 0000000..2317f50 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuBar.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + implicitHeight: 40 + color: control.Universal.chromeMediumColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuBarItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuBarItem.qml new file mode 100644 index 0000000..30f1fc5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuBarItem.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + spacing: 12 + + icon.width: 20 + icon.height: 20 + icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + + color: !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.listMediumColor : + control.highlighted ? control.Universal.listLowColor : "transparent" + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + + visible: control.visualFocus + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuItem.qml new file mode 100644 index 0000000..23d0ee3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuItem.qml @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + spacing: 12 + + icon.width: 20 + icon.height: 20 + icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + } + + arrow: ColorImage { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.subMenu + mirror: control.mirrored + color: !enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Universal/images/rightarrow.png" + } + + indicator: ColorImage { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.checked + color: !control.enabled ? control.Universal.baseLowColor : control.down ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor + source: !control.checkable ? "" : "qrc:/qt-project.org/imports/QtQuick/Controls.2/Universal/images/checkmark.png" + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + + color: !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.listMediumColor : + control.highlighted ? control.Universal.listLowColor : control.Universal.altMediumLowColor + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + + visible: control.visualFocus + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuSeparator.qml new file mode 100644 index 0000000..72f9f6f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/MenuSeparator.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 12 + topPadding: 9 + bottomPadding: 10 + + contentItem: Rectangle { + implicitWidth: 188 + implicitHeight: 1 + color: control.Universal.baseMediumLowColor + } + + background: Rectangle { + color: control.Universal.altMediumLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Page.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Page.qml new file mode 100644 index 0000000..347d6d9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Page.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + background: Rectangle { + color: control.Universal.background + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/PageIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/PageIndicator.qml new file mode 100644 index 0000000..3dcc84a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/PageIndicator.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 7 + + delegate: Rectangle { + implicitWidth: 5 + implicitHeight: 5 + + radius: width / 2 + color: index === control.currentIndex ? control.Universal.baseMediumHighColor : + pressed ? control.Universal.baseMediumLowColor : control.Universal.baseLowColor + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Pane.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Pane.qml new file mode 100644 index 0000000..63a5ece --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Pane.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.Universal.background + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Popup.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Popup.qml new file mode 100644 index 0000000..e39134e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Popup.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // FlyoutBorderThemeThickness + } + + T.Overlay.modal: Rectangle { + color: control.Universal.baseLowColor + } + + T.Overlay.modeless: Rectangle { + color: control.Universal.baseLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ProgressBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ProgressBar.qml new file mode 100644 index 0000000..ce79bd5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ProgressBar.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: ProgressBarImpl { + implicitHeight: 10 + + scale: control.mirrored ? -1 : 1 + color: control.Universal.accent + progress: control.position + indeterminate: control.visible && control.indeterminate + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 10 + y: (control.height - height) / 2 + height: 10 + + visible: !control.indeterminate + color: control.Universal.baseLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioButton.qml new file mode 100644 index 0000000..a50cdf9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioButton.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 8 + + property bool useSystemFocusVisuals: true + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioDelegate.qml new file mode 100644 index 0000000..9fc910f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioDelegate.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + visible: control.down || control.highlighted || control.visualFocus || control.hovered + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioIndicator.qml new file mode 100644 index 0000000..1a32dec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RadioIndicator.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Controls.Universal 2.12 + +Rectangle { + id: indicator + implicitWidth: 20 + implicitHeight: 20 + radius: width / 2 + color: "transparent" + border.width: 2 // RadioButtonBorderThemeThickness + border.color: control.checked ? "transparent" : + !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.baseMediumColor : + control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor + + property var control + + Rectangle { + id: checkOuterEllipse + width: parent.width + height: parent.height + + radius: width / 2 + opacity: indicator.control.checked ? 1 : 0 + color: "transparent" + border.width: 2 // RadioButtonBorderThemeThickness + border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.down ? indicator.control.Universal.baseMediumColor : indicator.control.Universal.accent + } + + Rectangle { + id: checkGlyph + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 2 + height: parent.height / 2 + + radius: width / 2 + opacity: indicator.control.checked ? 1 : 0 + color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.down ? indicator.control.Universal.baseMediumColor : + indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RangeSlider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RangeSlider.qml new file mode 100644 index 0000000..f2e4d71 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RangeSlider.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + first.handle: Rectangle { + implicitWidth: control.horizontal ? 8 : 24 + implicitHeight: control.horizontal ? 24 : 8 + + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + + radius: 4 + color: control.first.pressed ? control.Universal.chromeHighColor : + control.first.hovered ? control.Universal.chromeAltLowColor : + control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + + second.handle: Rectangle { + implicitWidth: control.horizontal ? 8 : 24 + implicitHeight: control.horizontal ? 24 : 8 + + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + + radius: 4 + color: control.second.pressed ? control.Universal.chromeHighColor : + control.second.hovered ? control.Universal.chromeAltLowColor : + control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + + background: Item { + implicitWidth: control.horizontal ? 200 : 18 + implicitHeight: control.horizontal ? 18 : 200 + + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + + scale: control.horizontal && control.mirrored ? -1 : 1 + + Rectangle { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : 0 + width: control.horizontal ? parent.width : 2 // SliderBackgroundThemeHeight + height: control.vertical ? parent.height : 2 // SliderBackgroundThemeHeight + + color: control.hovered && !control.pressed ? control.Universal.baseMediumColor : + control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor + } + + Rectangle { + x: control.horizontal ? control.first.position * parent.width : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : control.second.visualPosition * parent.height + width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 2 // SliderBackgroundThemeHeight + height: control.vertical ? control.second.position * parent.height - control.first.position * parent.height : 2 // SliderBackgroundThemeHeight + + color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RoundButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RoundButton.qml new file mode 100644 index 0000000..2eedf96 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/RoundButton.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 8 + spacing: 8 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + property bool useSystemFocusVisuals: true + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + implicitWidth: 32 + implicitHeight: 32 + + radius: control.radius + visible: !control.flat || control.down || control.checked || control.highlighted + color: control.down ? control.Universal.baseMediumLowColor : + control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : + control.Universal.baseLowColor + + Rectangle { + width: parent.width + height: parent.height + radius: control.radius + color: "transparent" + visible: control.hovered + border.width: 2 // ButtonBorderThemeThickness + border.color: control.Universal.baseMediumLowColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ScrollBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ScrollBar.qml new file mode 100644 index 0000000..8b8e325 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ScrollBar.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + // TODO: arrows + + contentItem: Rectangle { + implicitWidth: control.interactive ? 12 : 6 + implicitHeight: control.interactive ? 12: 6 + + color: control.pressed ? control.Universal.baseMediumColor : + control.interactive && control.hovered ? control.Universal.baseMediumLowColor : control.Universal.chromeHighColor + opacity: 0.0 + } + + background: Rectangle { + implicitWidth: control.interactive ? 12 : 6 + implicitHeight: control.interactive ? 12: 6 + + color: control.Universal.chromeLowColor + visible: control.size < 1.0 + opacity: 0.0 + } + + states: [ + State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + } + ] + + transitions: [ + Transition { + to: "active" + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } + PauseAnimation { duration: 3000 } + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } + } + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ScrollIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ScrollIndicator.qml new file mode 100644 index 0000000..ab66ee7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ScrollIndicator.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: Rectangle { + implicitWidth: 6 + implicitHeight: 6 + + color: control.Universal.baseMediumLowColor + visible: control.size < 1.0 + opacity: 0.0 + + states: [ + State { + name: "active" + when: control.active + } + ] + + transitions: [ + Transition { + to: "active" + NumberAnimation { target: control.contentItem; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 5000 } + NumberAnimation { target: control.contentItem; property: "opacity"; to: 0.0 } + } + } + ] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Slider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Slider.qml new file mode 100644 index 0000000..8f427b1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Slider.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + property bool useSystemFocusVisuals: true + + handle: Rectangle { + implicitWidth: control.horizontal ? 8 : 24 + implicitHeight: control.horizontal ? 24 : 8 + + x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + + radius: 4 + color: control.pressed ? control.Universal.chromeHighColor : + control.hovered ? control.Universal.chromeAltLowColor : + control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + + background: Item { + implicitWidth: control.horizontal ? 200 : 18 + implicitHeight: control.horizontal ? 18 : 200 + + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + + scale: control.horizontal && control.mirrored ? -1 : 1 + + Rectangle { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : 0 + width: control.horizontal ? parent.width : 2 // SliderTrackThemeHeight + height: !control.horizontal ? parent.height : 2 // SliderTrackThemeHeight + + color: control.hovered && !control.pressed ? control.Universal.baseMediumColor : + control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor + } + + Rectangle { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height + width: control.horizontal ? control.position * parent.width : 2 // SliderTrackThemeHeight + height: !control.horizontal ? control.position * parent.height : 2 // SliderTrackThemeHeight + + color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SpinBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SpinBox.qml new file mode 100644 index 0000000..dfe927f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SpinBox.qml @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 16 + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + // TextControlThemePadding + 2 (border) + padding: 12 + topPadding: padding - 7 + leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: padding - 4 + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + bottomPadding: padding - 5 + + Universal.theme: activeFocus ? Universal.Light : undefined + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + text: control.displayText + + font: control.font + color: !enabled ? control.Universal.chromeDisabledLowColor : + activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground + selectionColor: control.Universal.accent + selectedTextColor: control.Universal.chromeWhiteColor + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: TextInput.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + } + + up.indicator: Item { + implicitWidth: 28 + height: parent.height + 4 + y: -2 + x: control.mirrored ? 0 : parent.width - width + + Rectangle { + x: 2; y: 4 + width: parent.width - 4 + height: parent.height - 8 + color: control.activeFocus ? control.Universal.accent : + control.up.pressed ? control.Universal.baseMediumLowColor : + control.up.hovered ? control.Universal.baseLowColor : "transparent" + visible: control.up.pressed || control.up.hovered + opacity: control.activeFocus && !control.up.pressed ? 0.4 : 1.0 + } + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + color: !enabled ? control.Universal.chromeDisabledLowColor : + control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Universal/images/" + (control.mirrored ? "left" : "right") + "arrow.png" + } + } + + down.indicator: Item { + implicitWidth: 28 + height: parent.height + 4 + y: -2 + x: control.mirrored ? parent.width - width : 0 + + Rectangle { + x: 2; y: 4 + width: parent.width - 4 + height: parent.height - 8 + color: control.activeFocus ? control.Universal.accent : + control.down.pressed ? control.Universal.baseMediumLowColor : + control.down.hovered ? control.Universal.baseLowColor : "transparent" + visible: control.down.pressed || control.down.hovered + opacity: control.activeFocus && !control.down.pressed ? 0.4 : 1.0 + } + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + color: !enabled ? control.Universal.chromeDisabledLowColor : + control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls.2/Universal/images/" + (control.mirrored ? "right" : "left") + "arrow.png" + } + } + + background: Rectangle { + implicitWidth: 60 + 28 // TextControlThemeMinWidth - 4 (border) + implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) + + border.width: 2 // TextControlBorderThemeThickness + border.color: !control.enabled ? control.Universal.baseLowColor : + control.activeFocus ? control.Universal.accent : + control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SplitView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SplitView.qml new file mode 100644 index 0000000..a4ed22d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SplitView.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.13 +import QtQuick.Templates 2.13 as T +import QtQuick.Controls 2.13 +import QtQuick.Controls.impl 2.13 +import QtQuick.Controls.Universal 2.13 + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 + color: T.SplitHandle.pressed ? control.Universal.baseMediumColor + : (T.SplitHandle.hovered ? control.Universal.baseMediumLowColor : control.Universal.chromeHighColor) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/StackView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/StackView.qml new file mode 100644 index 0000000..5a3f775 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/StackView.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.StackView { + id: control + + popEnter: Transition { + ParallelAnimation { + NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } + NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + } + + popExit: Transition { + NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } + } + + pushEnter: Transition { + ParallelAnimation { + NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } + NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + } + + pushExit: Transition { + NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } + } + + replaceEnter: Transition { + ParallelAnimation { + NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } + NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + } + + replaceExit: Transition { + NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwipeDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwipeDelegate.qml new file mode 100644 index 0000000..066049a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwipeDelegate.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + color: control.Universal.background + + Rectangle { + width: parent.width + height: parent.height + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Switch.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Switch.qml new file mode 100644 index 0000000..284b122 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Switch.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 5 + spacing: 8 + + property bool useSystemFocusVisuals: true + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwitchDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwitchDelegate.qml new file mode 100644 index 0000000..56ba849 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwitchDelegate.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls.Universal.impl 2.12 + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + visible: control.down || control.highlighted || control.visualFocus || control.hovered + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwitchIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwitchIndicator.qml new file mode 100644 index 0000000..10f3951 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/SwitchIndicator.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +Item { + id: indicator + implicitWidth: 44 + implicitHeight: 20 + + Rectangle { + width: parent.width + height: parent.height + + radius: 10 + color: !indicator.control.enabled ? "transparent" : + indicator.control.pressed ? indicator.control.Universal.baseMediumColor : + indicator.control.checked ? indicator.control.Universal.accent : "transparent" + border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.accent : + indicator.control.hovered && !indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumColor + opacity: indicator.control.hovered && indicator.control.checked && !indicator.control.pressed ? (indicator.control.Universal.theme === Universal.Light ? 0.7 : 0.9) : 1.0 + border.width: 2 + } + + property Item control + + Rectangle { + width: 10 + height: 10 + radius: 5 + + color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.pressed || indicator.control.checked ? indicator.control.Universal.chromeWhiteColor : + indicator.control.hovered && !indicator.control.checked ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor + + x: Math.max(5, Math.min(parent.width - width - 5, + indicator.control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + + Behavior on x { + enabled: !indicator.control.pressed + SmoothedAnimation { velocity: 200 } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TabBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TabBar.qml new file mode 100644 index 0000000..c7d27cb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TabBar.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 100 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 48 + preferredHighlightEnd: width - 48 + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 48 + color: control.Universal.background + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TabButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TabButton.qml new file mode 100644 index 0000000..66e3d72 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TabButton.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 12 // PivotItemMargin + spacing: 8 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground, + control.checked || control.down || control.hovered ? 1.0 : 0.2) + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground, + control.checked || control.down || control.hovered ? 1.0 : 0.2) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TextArea.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TextArea.qml new file mode 100644 index 0000000..03ad4a8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TextArea.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + // TextControlThemePadding + 2 (border) + padding: 12 + topPadding: padding - 7 + rightPadding: padding - 4 + bottomPadding: padding - 5 + + Universal.theme: activeFocus ? Universal.Light : undefined + + color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground + selectionColor: Universal.accent + selectedTextColor: Universal.chromeWhiteColor + placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor : + activeFocus ? Universal.chromeBlackMediumLowColor : + Universal.baseMediumColor + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + verticalAlignment: control.verticalAlignment + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) + implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) + + border.width: 2 // TextControlBorderThemeThickness + border.color: !control.enabled ? control.Universal.baseLowColor : + control.activeFocus ? control.Universal.accent : + control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TextField.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TextField.qml new file mode 100644 index 0000000..ba5bf68 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/TextField.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + // TextControlThemePadding + 2 (border) + padding: 12 + topPadding: padding - 7 + rightPadding: padding - 4 + bottomPadding: padding - 5 + + Universal.theme: activeFocus ? Universal.Light : undefined + + color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground + selectionColor: Universal.accent + selectedTextColor: Universal.chromeWhiteColor + placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor : + activeFocus ? Universal.chromeBlackMediumLowColor : + Universal.baseMediumColor + verticalAlignment: TextInput.AlignVCenter + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + verticalAlignment: control.verticalAlignment + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) + implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) + + border.width: 2 // TextControlBorderThemeThickness + border.color: !control.enabled ? control.Universal.baseLowColor : + control.activeFocus ? control.Universal.accent : + control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolBar.qml new file mode 100644 index 0000000..5a385e8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolBar.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + background: Rectangle { + implicitHeight: 48 // AppBarThemeCompactHeight + color: control.Universal.chromeMediumColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolButton.qml new file mode 100644 index 0000000..f36dac2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolButton.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 +import QtQuick.Controls.Universal 2.12 + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 8 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + property bool useSystemFocusVisuals: true + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + implicitWidth: 68 + implicitHeight: 48 // AppBarThemeCompactHeight + + color: control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : "transparent" + + Rectangle { + width: parent.width + height: parent.height + visible: control.down || control.hovered + color: control.down ? control.Universal.listMediumColor : control.Universal.listLowColor + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolSeparator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolSeparator.qml new file mode 100644 index 0000000..ee8e6e1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolSeparator.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + leftPadding: vertical ? 16 : 12 + rightPadding: vertical ? 15 : 12 + topPadding: vertical ? 12 : 16 + bottomPadding: vertical ? 12 : 15 + + contentItem: Rectangle { + implicitWidth: vertical ? 1 : 20 + implicitHeight: vertical ? 20 : 1 + color: control.Universal.baseMediumLowColor + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolTip.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolTip.qml new file mode 100644 index 0000000..431cdf7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/ToolTip.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 16 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 8 + padding: 8 + topPadding: padding - 3 + bottomPadding: padding - 1 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // ToolTipBorderThemeThickness + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Tumbler.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Tumbler.qml new file mode 100644 index 0000000..d0e7b12 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/Tumbler.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Templates 2.12 as T +import QtQuick.Controls.Universal 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.impl 2.12 + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) || 60 // ### remove 60 in Qt 6 + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) || 200 // ### remove 200 in Qt 6 + + delegate: Text { + text: modelData + font: control.font + color: control.Universal.foreground + opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/VerticalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/VerticalHeaderView.qml new file mode 100644 index 0000000..04408d6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/VerticalHeaderView.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Controls.impl 2.15 +import QtQuick.Templates 2.15 as T +import QtQuick.Controls.Universal 2.15 +import QtQuick.Controls.Universal.impl 2.15 + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + color: control.Universal.background + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/libqtquickcontrols2universalstyleplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/libqtquickcontrols2universalstyleplugin.so new file mode 100755 index 0000000..4c4c843 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/libqtquickcontrols2universalstyleplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/plugins.qmltypes new file mode 100644 index 0000000..c38e39e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/plugins.qmltypes @@ -0,0 +1,340 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Controls.Universal 2.15' + +Module { + dependencies: ["QtQuick.Controls 2.0"] + Component { name: "QQuickAttachedObject"; prototype: "QObject" } + Component { + name: "QQuickItem" + defaultProperty: "data" + prototype: "QObject" + Enum { + name: "Flags" + values: { + "ItemClipsChildrenToShape": 1, + "ItemAcceptsInputMethod": 2, + "ItemIsFocusScope": 4, + "ItemHasContents": 8, + "ItemAcceptsDrops": 16 + } + } + Enum { + name: "TransformOrigin" + values: { + "TopLeft": 0, + "Top": 1, + "TopRight": 2, + "Left": 3, + "Center": 4, + "Right": 5, + "BottomLeft": 6, + "Bottom": 7, + "BottomRight": 8 + } + } + Property { name: "parent"; type: "QQuickItem"; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "resources"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "children"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "z"; type: "double" } + Property { name: "width"; type: "double" } + Property { name: "height"; type: "double" } + Property { name: "opacity"; type: "double" } + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "visibleChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "states"; type: "QQuickState"; isList: true; isReadonly: true } + Property { name: "transitions"; type: "QQuickTransition"; isList: true; isReadonly: true } + Property { name: "state"; type: "string" } + Property { name: "childrenRect"; type: "QRectF"; isReadonly: true } + Property { name: "anchors"; type: "QQuickAnchors"; isReadonly: true; isPointer: true } + Property { name: "left"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "right"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "horizontalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "top"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "bottom"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "verticalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baseline"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baselineOffset"; type: "double" } + Property { name: "clip"; type: "bool" } + Property { name: "focus"; type: "bool" } + Property { name: "activeFocus"; type: "bool"; isReadonly: true } + Property { name: "activeFocusOnTab"; revision: 1; type: "bool" } + Property { name: "rotation"; type: "double" } + Property { name: "scale"; type: "double" } + Property { name: "transformOrigin"; type: "TransformOrigin" } + Property { name: "transformOriginPoint"; type: "QPointF"; isReadonly: true } + Property { name: "transform"; type: "QQuickTransform"; isList: true; isReadonly: true } + Property { name: "smooth"; type: "bool" } + Property { name: "antialiasing"; type: "bool" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "containmentMask"; revision: 11; type: "QObject"; isPointer: true } + Property { name: "layer"; type: "QQuickItemLayer"; isReadonly: true; isPointer: true } + Signal { + name: "childrenRectChanged" + Parameter { type: "QRectF" } + } + Signal { + name: "baselineOffsetChanged" + Parameter { type: "double" } + } + Signal { + name: "stateChanged" + Parameter { type: "string" } + } + Signal { + name: "focusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusOnTabChanged" + revision: 1 + Parameter { type: "bool" } + } + Signal { + name: "parentChanged" + Parameter { type: "QQuickItem"; isPointer: true } + } + Signal { + name: "transformOriginChanged" + Parameter { type: "TransformOrigin" } + } + Signal { + name: "smoothChanged" + Parameter { type: "bool" } + } + Signal { + name: "antialiasingChanged" + Parameter { type: "bool" } + } + Signal { + name: "clipChanged" + Parameter { type: "bool" } + } + Signal { + name: "windowChanged" + revision: 1 + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Signal { name: "containmentMaskChanged"; revision: 11 } + Method { name: "update" } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + Parameter { name: "targetSize"; type: "QSize" } + } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + } + Method { + name: "contains" + type: "bool" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapFromItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapFromGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { name: "forceActiveFocus" } + Method { + name: "forceActiveFocus" + Parameter { name: "reason"; type: "Qt::FocusReason" } + } + Method { + name: "nextItemInFocusChain" + revision: 1 + type: "QQuickItem*" + Parameter { name: "forward"; type: "bool" } + } + Method { name: "nextItemInFocusChain"; revision: 1; type: "QQuickItem*" } + Method { + name: "childAt" + type: "QQuickItem*" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + name: "QQuickPaintedItem" + defaultProperty: "data" + prototype: "QQuickItem" + Enum { + name: "RenderTarget" + values: { + "Image": 0, + "FramebufferObject": 1, + "InvertedYFramebufferObject": 2 + } + } + Enum { + name: "PerformanceHints" + values: { + "FastFBOResizing": 1 + } + } + Property { name: "contentsSize"; type: "QSize" } + Property { name: "fillColor"; type: "QColor" } + Property { name: "contentsScale"; type: "double" } + Property { name: "renderTarget"; type: "RenderTarget" } + Property { name: "textureSize"; type: "QSize" } + } + Component { + name: "QQuickUniversalBusyIndicator" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.Universal.impl/BusyIndicatorImpl 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "count"; type: "int" } + Property { name: "color"; type: "QColor" } + } + Component { + name: "QQuickUniversalFocusRectangle" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtQuick.Controls.Universal.impl/FocusRectangle 2.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickUniversalProgressBar" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.Universal.impl/ProgressBarImpl 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "color"; type: "QColor" } + Property { name: "progress"; type: "double" } + Property { name: "indeterminate"; type: "bool" } + } + Component { + name: "QQuickUniversalStyle" + prototype: "QQuickAttachedObject" + exports: ["QtQuick.Controls.Universal/Universal 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "Theme" + values: { + "Light": 0, + "Dark": 1, + "System": 2 + } + } + Enum { + name: "Color" + values: { + "Lime": 0, + "Green": 1, + "Emerald": 2, + "Teal": 3, + "Cyan": 4, + "Cobalt": 5, + "Indigo": 6, + "Violet": 7, + "Pink": 8, + "Magenta": 9, + "Crimson": 10, + "Red": 11, + "Orange": 12, + "Amber": 13, + "Yellow": 14, + "Brown": 15, + "Olive": 16, + "Steel": 17, + "Mauve": 18, + "Taupe": 19 + } + } + Property { name: "theme"; type: "Theme" } + Property { name: "accent"; type: "QVariant" } + Property { name: "foreground"; type: "QVariant" } + Property { name: "background"; type: "QVariant" } + Property { name: "altHighColor"; type: "QColor"; isReadonly: true } + Property { name: "altLowColor"; type: "QColor"; isReadonly: true } + Property { name: "altMediumColor"; type: "QColor"; isReadonly: true } + Property { name: "altMediumHighColor"; type: "QColor"; isReadonly: true } + Property { name: "altMediumLowColor"; type: "QColor"; isReadonly: true } + Property { name: "baseHighColor"; type: "QColor"; isReadonly: true } + Property { name: "baseLowColor"; type: "QColor"; isReadonly: true } + Property { name: "baseMediumColor"; type: "QColor"; isReadonly: true } + Property { name: "baseMediumHighColor"; type: "QColor"; isReadonly: true } + Property { name: "baseMediumLowColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeAltLowColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeBlackHighColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeBlackLowColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeBlackMediumLowColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeBlackMediumColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeDisabledHighColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeDisabledLowColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeHighColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeLowColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeMediumColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeMediumLowColor"; type: "QColor"; isReadonly: true } + Property { name: "chromeWhiteColor"; type: "QColor"; isReadonly: true } + Property { name: "listLowColor"; type: "QColor"; isReadonly: true } + Property { name: "listMediumColor"; type: "QColor"; isReadonly: true } + Signal { name: "paletteChanged" } + Method { + name: "color" + type: "QColor" + Parameter { name: "color"; type: "Color" } + } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Universal.impl/CheckIndicator 2.0" + exports: ["QtQuick.Controls.Universal.impl/CheckIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "partiallyChecked"; type: "bool"; isReadonly: true } + } + Component { + prototype: "QQuickRectangle" + name: "QtQuick.Controls.Universal.impl/RadioIndicator 2.0" + exports: ["QtQuick.Controls.Universal.impl/RadioIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QVariant" } + } + Component { + prototype: "QQuickItem" + name: "QtQuick.Controls.Universal.impl/SwitchIndicator 2.0" + exports: ["QtQuick.Controls.Universal.impl/SwitchIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "QQuickItem"; isPointer: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/qmldir new file mode 100644 index 0000000..6870a4e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/Universal/qmldir @@ -0,0 +1,4 @@ +module QtQuick.Controls.Universal +plugin qtquickcontrols2universalstyleplugin +classname QtQuickControls2UniversalStylePlugin +depends QtQuick.Controls 2.5 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/VerticalHeaderView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/VerticalHeaderView.qml new file mode 100644 index 0000000..3fc9ca5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/VerticalHeaderView.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Templates 2.15 as T + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + color: "#f6f6f6" + border.color: "#e4e4e4" + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/AbstractButtonSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/AbstractButtonSection.qml new file mode 100644 index 0000000..35fad2a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/AbstractButtonSection.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + caption: qsTr("AbstractButton") + + SectionLayout { + Label { + text: qsTr("Text") + tooltip: qsTr("The text displayed on the button.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.text + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Display") + tooltip: qsTr("Determines how the icon and text are displayed within the button.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.display + model: [ "IconOnly", "TextOnly", "TextBesideIcon" ] + scope: "AbstractButton" + Layout.fillWidth: true + } + } + + Label { + visible: checkable + text: qsTr("Checkable") + tooltip: qsTr("Whether the button is checkable.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.checkable.valueToString + backendValue: backendValues.checkable + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Checked") + tooltip: qsTr("Whether the button is checked.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.checked.valueToString + backendValue: backendValues.checked + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Exclusive") + tooltip: qsTr("Whether the button is exclusive.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.autoExclusive.valueToString + backendValue: backendValues.autoExclusive + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Auto-Repeat") + tooltip: qsTr("Whether the button repeats pressed(), released() and clicked() signals while the button is pressed and held down.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.autoRepeat.valueToString + backendValue: backendValues.autoRepeat + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/BusyIndicatorSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/BusyIndicatorSpecifics.qml new file mode 100644 index 0000000..7ae927f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/BusyIndicatorSpecifics.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("BusyIndicator") + + SectionLayout { + Label { + text: qsTr("Running") + tooltip: qsTr("Whether the busy indicator is currently indicating activity.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.running.valueToString + backendValue: backendValues.running + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ButtonSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ButtonSection.qml new file mode 100644 index 0000000..951c8cf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ButtonSection.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + id: section + caption: qsTr("Button") + + SectionLayout { + + Label { + text: qsTr("Flat") + tooltip: qsTr("Whether the button is flat.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.flat.valueToString + backendValue: backendValues.flat + Layout.fillWidth: true + } + } + Label { + text: qsTr("Highlighted") + tooltip: qsTr("Whether the button is highlighted.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.highlighted.valueToString + backendValue: backendValues.highlighted + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ButtonSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ButtonSpecifics.qml new file mode 100644 index 0000000..e094b9d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ButtonSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + ButtonSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckBoxSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckBoxSpecifics.qml new file mode 100644 index 0000000..f76aa21 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckBoxSpecifics.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + CheckSection { + width: parent.width + caption: qsTr("CheckBox") + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckDelegateSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckDelegateSpecifics.qml new file mode 100644 index 0000000..1df55e1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckDelegateSpecifics.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + CheckSection { + width: parent.width + caption: qsTr("CheckDelegate") + } + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckSection.qml new file mode 100644 index 0000000..76cde03 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/CheckSection.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + SectionLayout { + Label { + text: qsTr("Check State") + tooltip: qsTr("The current check state.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.checkState + model: [ "Unchecked", "PartiallyChecked", "Checked" ] + scope: "Qt" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Tri-state") + tooltip: qsTr("Whether the checkbox has three states.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.tristate.valueToString + backendValue: backendValues.tristate + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ComboBoxSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ComboBoxSpecifics.qml new file mode 100644 index 0000000..8a5e33b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ComboBoxSpecifics.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ComboBox") + + SectionLayout { + Label { + text: qsTr("Text Role") + tooltip: qsTr("The model role used for displaying text.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.textRole + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Current") + tooltip: qsTr("The index of the current item.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.currentIndex + Layout.fillWidth: true + } + } + Label { + text: qsTr("Editable") + tooltip: qsTr("Whether the combo box is editable.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.editable.valueToString + backendValue: backendValues.editable + Layout.fillWidth: true + } + } + Label { + text: qsTr("Flat") + tooltip: qsTr("Whether the combo box button is flat.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.flat.valueToString + backendValue: backendValues.flat + Layout.fillWidth: true + } + } + Label { + text: qsTr("DisplayText") + tooltip: qsTr("Holds the text that is displayed on the combo box button.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.displayText + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ContainerSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ContainerSection.qml new file mode 100644 index 0000000..896804c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ContainerSection.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + caption: qsTr("Container") + + SectionLayout { + Label { + text: qsTr("Current") + tooltip: qsTr("The index of the current item.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.currentIndex + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ControlSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ControlSection.qml new file mode 100644 index 0000000..3446c08 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ControlSection.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + caption: qsTr("Control") + + SectionLayout { + Label { + text: qsTr("Enabled") + tooltip: qsTr("Whether the control is enabled.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.enabled.valueToString + backendValue: backendValues.enabled + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Focus Policy") + tooltip: qsTr("Focus policy of the control.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.focusPolicy + model: [ "TabFocus", "ClickFocus", "StrongFocus", "WheelFocus", "NoFocus" ] + scope: "Qt" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Hover") + tooltip: qsTr("Whether control accepts hover events.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.hoverEnabled.valueToString + backendValue: backendValues.hoverEnabled + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Spacing") + tooltip: qsTr("Spacing between internal elements of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.spacing + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Wheel") + tooltip: qsTr("Whether control accepts wheel events.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.wheelEnabled.valueToString + backendValue: backendValues.wheelEnabled + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ControlSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ControlSpecifics.qml new file mode 100644 index 0000000..ccfd885 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ControlSpecifics.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/DelayButtonSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/DelayButtonSpecifics.qml new file mode 100644 index 0000000..40b673a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/DelayButtonSpecifics.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("DelayButton") + + SectionLayout { + Label { + text: qsTr("Delay") + tooltip: qsTr("The delay in milliseconds.") + } + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + decimals: 0 + stepSize: 1 + backendValue: backendValues.delay + Layout.fillWidth: true + } + } + } + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/DialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/DialSpecifics.qml new file mode 100644 index 0000000..a0df81e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/DialSpecifics.qml @@ -0,0 +1,172 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Dial") + + SectionLayout { + Label { + text: qsTr("Value") + tooltip: qsTr("The current value of the dial.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value of the dial range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value of the dial range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("The step size of the dial.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.stepSize + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Snap Mode") + tooltip: qsTr("The snap mode of the dial.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.snapMode + model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] + scope: "Dial" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Live") + tooltip: qsTr("Whether the dial provides live value updates.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.live.valueToString + backendValue: backendValues.live + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Input Mode") + tooltip: qsTr("How the dial tracks movement.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.inputMode + model: [ "Circular", "Horizontal", "Vertical" ] + scope: "Dial" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Wrap") + tooltip: qsTr("Whether the dial wraps when dragged.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.wrap.valueToString + backendValue: backendValues.wrap + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/FrameSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/FrameSpecifics.qml new file mode 100644 index 0000000..f17b639 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/FrameSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + PaneSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/GroupBoxSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/GroupBoxSpecifics.qml new file mode 100644 index 0000000..3a705bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/GroupBoxSpecifics.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("GroupBox") + + SectionLayout { + Label { + text: qsTr("Title") + tooltip: qsTr("The title of the group box.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.title + Layout.fillWidth: true + } + } + } + } + + PaneSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/InsetSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/InsetSection.qml new file mode 100644 index 0000000..4253b17 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/InsetSection.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + caption: qsTr("Inset") + + SectionLayout { + Label { + text: qsTr("Vertical") + } + SecondColumnLayout { + Label { + text: qsTr("Top") + tooltip: qsTr("Top inset for the background.") + width: 42 + } + SpinBox { + maximumValue: 10000 + minimumValue: -10000 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.topInset + Layout.fillWidth: true + } + Item { + width: 4 + height: 4 + } + + Label { + text: qsTr("Bottom") + tooltip: qsTr("Bottom inset for the background.") + width: 42 + } + SpinBox { + maximumValue: 10000 + minimumValue: -10000 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.bottomInset + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Horizontal") + } + SecondColumnLayout { + Label { + text: qsTr("Left") + tooltip: qsTr("Left inset for the background.") + width: 42 + } + SpinBox { + maximumValue: 10000 + minimumValue: -10000 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.leftInset + Layout.fillWidth: true + } + Item { + width: 4 + height: 4 + } + + Label { + text: qsTr("Right") + tooltip: qsTr("Right inset for the background.") + width: 42 + } + SpinBox { + maximumValue: 10000 + minimumValue: -10000 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.rightInset + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ItemDelegateSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ItemDelegateSection.qml new file mode 100644 index 0000000..a337bce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ItemDelegateSection.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + id: section + caption: qsTr("ItemDelegate") + + SectionLayout { + Label { + text: qsTr("Highlighted") + tooltip: qsTr("Whether the delegate is highlighted.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.highlighted.valueToString + backendValue: backendValues.highlighted + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ItemDelegateSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ItemDelegateSpecifics.qml new file mode 100644 index 0000000..5806398 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ItemDelegateSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/LabelSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/LabelSpecifics.qml new file mode 100644 index 0000000..e5d5e04 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/LabelSpecifics.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + StandardTextSection { + width: parent.width + showIsWrapping: true + showFormatProperty: true + showVerticalAlignment: true + } + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Text Color") + + ColorEditor { + caption: qsTr("Text Color") + backendValue: backendValues.color + supportGradient: false + } + } + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Style Color") + + ColorEditor { + caption: qsTr("Style Color") + backendValue: backendValues.styleColor + supportGradient: false + } + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } + + InsetSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaddingSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaddingSection.qml new file mode 100644 index 0000000..a7dee28 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaddingSection.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + caption: qsTr("Padding") + + SectionLayout { + Label { + text: qsTr("Top") + tooltip: qsTr("Padding between the content and the top edge of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.topPadding + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Left") + tooltip: qsTr("Padding between the content and the left edge of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.leftPadding + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Right") + tooltip: qsTr("Padding between the content and the right edge of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.rightPadding + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Bottom") + tooltip: qsTr("Padding between the content and the bottom edge of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.bottomPadding + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PageIndicatorSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PageIndicatorSpecifics.qml new file mode 100644 index 0000000..20aa857 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PageIndicatorSpecifics.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("PageIndicator") + + SectionLayout { + Label { + text: qsTr("Count") + tooltip: qsTr("The number of pages.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.count + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Current") + tooltip: qsTr("The index of the current page.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.currentIndex + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Interactive") + tooltip: qsTr("Whether the control is interactive.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.interactive.valueToString + backendValue: backendValues.interactive + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PageSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PageSpecifics.qml new file mode 100644 index 0000000..2dca110 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PageSpecifics.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Page") + + SectionLayout { + Label { + text: qsTr("Title") + tooltip: qsTr("Title of the page.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.title + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Width") + tooltip: qsTr("Content height used for calculating the total implicit width.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentWidth + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Height") + tooltip: qsTr("Content height used for calculating the total implicit height.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentHeight + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaneSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaneSection.qml new file mode 100644 index 0000000..80d154c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaneSection.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Section { + caption: qsTr("Pane") + + SectionLayout { + Label { + text: qsTr("Content Width") + tooltip: qsTr("Content height used for calculating the total implicit width.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentWidth + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Height") + tooltip: qsTr("Content height used for calculating the total implicit height.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentHeight + Layout.fillWidth: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaneSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaneSpecifics.qml new file mode 100644 index 0000000..f17b639 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/PaneSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + PaneSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ProgressBarSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ProgressBarSpecifics.qml new file mode 100644 index 0000000..c24d71d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ProgressBarSpecifics.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ProgressBar") + + SectionLayout { + Label { + text: qsTr("Indeterminate") + tooltip: qsTr("Whether the progress is indeterminate.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.indeterminate.valueToString + backendValue: backendValues.indeterminate + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Value") + tooltip: qsTr("The current value of the progress.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value for the progress.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value for the progress.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RadioButtonSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RadioButtonSpecifics.qml new file mode 100644 index 0000000..6137ad8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RadioButtonSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RadioDelegateSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RadioDelegateSpecifics.qml new file mode 100644 index 0000000..5806398 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RadioDelegateSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RangeSliderSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RangeSliderSpecifics.qml new file mode 100644 index 0000000..9372a4f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RangeSliderSpecifics.qml @@ -0,0 +1,189 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("RangeSlider") + + SectionLayout { + Label { + text: qsTr("First Value") + tooltip: qsTr("The value of the first range slider handle.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.first_value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Second Value") + tooltip: qsTr("The value of the second range slider handle.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.second_value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value of the range slider range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value of the range slider range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("The step size of the range slider.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.stepSize + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Snap Mode") + tooltip: qsTr("The snap mode of the range slider.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.snapMode + model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] + scope: "RangeSlider" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Orientation") + tooltip: qsTr("The orientation of the range slider.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.orientation + model: [ "Horizontal", "Vertical" ] + scope: "Qt" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Live") + tooltip: qsTr("Whether the range slider provides live value updates.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.live.valueToString + backendValue: backendValues.live + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Touch drag threshold") + tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.") + } + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 0 + backendValue: backendValues.touchDragThreshold + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RoundButtonSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RoundButtonSpecifics.qml new file mode 100644 index 0000000..af4ab5d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/RoundButtonSpecifics.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("RoundButton") + + SectionLayout { + Label { + text: qsTr("Radius") + tooltip: qsTr("Radius of the button.") + } + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 0 + backendValue: backendValues.radius + Layout.fillWidth: true + } + } + } + } + + ButtonSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ScrollViewSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ScrollViewSpecifics.qml new file mode 100644 index 0000000..0f3d56d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ScrollViewSpecifics.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ScrollView") + + SectionLayout { + Label { + text: qsTr("Content Width") + tooltip: qsTr("Content height used for calculating the total implicit width.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentWidth + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Height") + tooltip: qsTr("Content height used for calculating the total implicit height.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentHeight + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SliderSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SliderSpecifics.qml new file mode 100644 index 0000000..d126dd0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SliderSpecifics.qml @@ -0,0 +1,174 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Slider") + + SectionLayout { + Label { + text: qsTr("Value") + tooltip: qsTr("The current value of the slider.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value of the slider range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value of the slider range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("The step size of the slider.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.stepSize + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Snap Mode") + tooltip: qsTr("The snap mode of the slider.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.snapMode + model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] + scope: "Slider" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Orientation") + tooltip: qsTr("The orientation of the slider.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.orientation + model: [ "Horizontal", "Vertical" ] + scope: "Qt" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Live") + tooltip: qsTr("Whether the slider provides live value updates.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.live.valueToString + backendValue: backendValues.live + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Touch drag threshold") + tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.") + } + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 0 + backendValue: backendValues.touchDragThreshold + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SpinBoxSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SpinBoxSpecifics.qml new file mode 100644 index 0000000..db59f07 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SpinBoxSpecifics.qml @@ -0,0 +1,142 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("SpinBox") + + SectionLayout { + Label { + text: qsTr("Value") + tooltip: qsTr("The current value of the spinbox.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + backendValue: backendValues.value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value of the spinbox range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value of the spinbox range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("The step size of the spinbox.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.stepSize + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Editable") + tooltip: qsTr("Whether the spinbox is editable.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.editable.valueToString + backendValue: backendValues.editable + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Wrap") + tooltip: qsTr("Whether the spinbox wraps.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.wrap.valueToString + backendValue: backendValues.wrap + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/StackViewSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/StackViewSpecifics.qml new file mode 100644 index 0000000..ccfd885 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/StackViewSpecifics.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwipeDelegateSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwipeDelegateSpecifics.qml new file mode 100644 index 0000000..5806398 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwipeDelegateSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwipeViewSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwipeViewSpecifics.qml new file mode 100644 index 0000000..02cc900 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwipeViewSpecifics.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("SwipeView") + + SectionLayout { + Label { + text: qsTr("Interactive") + tooltip: qsTr("Whether the view is interactive.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.interactive.valueToString + backendValue: backendValues.interactive + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Orientation") + tooltip: qsTr("Orientation of the view.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.orientation + model: [ "Horizontal", "Vertical" ] + scope: "Qt" + Layout.fillWidth: true + } + } + } + } + + ContainerSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwitchDelegateSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwitchDelegateSpecifics.qml new file mode 100644 index 0000000..f8c0dcc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwitchDelegateSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwitchSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwitchSpecifics.qml new file mode 100644 index 0000000..6137ad8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/SwitchSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TabBarSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TabBarSpecifics.qml new file mode 100644 index 0000000..f17e8e9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TabBarSpecifics.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("TabBar") + + SectionLayout { + Label { + text: qsTr("Position") + tooltip: qsTr("Position of the tabbar.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.position + model: [ "Header", "Footer" ] + scope: "TabBar" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Width") + tooltip: qsTr("Content height used for calculating the total implicit width.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentWidth + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Height") + tooltip: qsTr("Content height used for calculating the total implicit height.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentHeight + Layout.fillWidth: true + } + } + } + } + + ContainerSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TabButtonSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TabButtonSpecifics.qml new file mode 100644 index 0000000..6137ad8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TabButtonSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TextAreaSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TextAreaSpecifics.qml new file mode 100644 index 0000000..f8cf92e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TextAreaSpecifics.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("TextArea") + + SectionLayout { + Label { + text: qsTr("Placeholder") + tooltip: qsTr("Placeholder text displayed when the editor is empty.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.placeholderText + Layout.fillWidth: true + } + + } + + Label { + text: qsTr("Hover") + tooltip: qsTr("Whether text area accepts hover events.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.hoverEnabled.valueToString + backendValue: backendValues.hoverEnabled + Layout.fillWidth: true + } + } + } + } + + Section { + width: parent.width + caption: qsTr("Placeholder Text Color") + + ColorEditor { + caption: qsTr("Placeholder Text Color") + backendValue: backendValues.placeholderTextColor + supportGradient: false + } + } + + StandardTextSection { + width: parent.width + showIsWrapping: true + showFormatProperty: true + showVerticalAlignment: true + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } + + InsetSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TextFieldSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TextFieldSpecifics.qml new file mode 100644 index 0000000..f95f282 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TextFieldSpecifics.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("TextField") + + SectionLayout { + Label { + text: qsTr("Placeholder") + tooltip: qsTr("Placeholder text displayed when the editor is empty.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.placeholderText + Layout.fillWidth: true + } + + } + + Label { + text: qsTr("Hover") + tooltip: qsTr("Whether text field accepts hover events.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.hoverEnabled.valueToString + backendValue: backendValues.hoverEnabled + Layout.fillWidth: true + } + } + } + } + + Section { + width: parent.width + caption: qsTr("Placeholder Text Color") + + ColorEditor { + caption: qsTr("Placeholder Text Color") + backendValue: backendValues.placeholderTextColor + supportGradient: false + } + } + + StandardTextSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } + + InsetSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolBarSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolBarSpecifics.qml new file mode 100644 index 0000000..acf02e7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolBarSpecifics.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ToolBar") + + SectionLayout { + Label { + text: qsTr("Position") + tooltip: qsTr("Position of the toolbar.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.position + model: [ "Header", "Footer" ] + scope: "ToolBar" + Layout.fillWidth: true + } + } + } + } + + PaneSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolButtonSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolButtonSpecifics.qml new file mode 100644 index 0000000..e094b9d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolButtonSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + ButtonSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolSeparatorSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolSeparatorSpecifics.qml new file mode 100644 index 0000000..d0ebd57 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/ToolSeparatorSpecifics.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ToolSeparator") + + SectionLayout { + Label { + text: qsTr("Orientation") + tooltip: qsTr("The orientation of the separator.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.orientation + model: [ "Horizontal", "Vertical" ] + scope: "Qt" + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TumblerSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TumblerSpecifics.qml new file mode 100644 index 0000000..04507ef --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/TumblerSpecifics.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.12 + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Tumbler") + + SectionLayout { + Label { + text: qsTr("Visible Count") + tooltip: qsTr("The count of visible items.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.visibleItemCount + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Current") + tooltip: qsTr("The index of the current item.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.currentIndex + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Wrap") + tooltip: qsTr("Whether the tumbler wrap.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.wrap.valueToString + backendValue: backendValues.wrap + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon.png new file mode 100644 index 0000000..666d1ed Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon16.png new file mode 100644 index 0000000..5aa57d7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon@2x.png new file mode 100644 index 0000000..bb2278f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/busyindicator-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon.png new file mode 100644 index 0000000..c44909f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon16.png new file mode 100644 index 0000000..5c921de Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon@2x.png new file mode 100644 index 0000000..f90a1ba Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/button-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon.png new file mode 100644 index 0000000..ee669b3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon16.png new file mode 100644 index 0000000..8d89eab Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon@2x.png new file mode 100644 index 0000000..51c5601 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/checkbox-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon.png new file mode 100644 index 0000000..2d31b17 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon16.png new file mode 100644 index 0000000..15fc350 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon@2x.png new file mode 100644 index 0000000..5f82390 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/combobox-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon.png new file mode 100644 index 0000000..5a55bd9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon16.png new file mode 100644 index 0000000..cd21394 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon@2x.png new file mode 100644 index 0000000..7beee2f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/delaybutton-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon.png new file mode 100644 index 0000000..b3b63e3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon16.png new file mode 100644 index 0000000..8d8c7c0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon@2x.png new file mode 100644 index 0000000..22547a1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/dial-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon.png new file mode 100644 index 0000000..32abc8b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon16.png new file mode 100644 index 0000000..e5b65ad Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon@2x.png new file mode 100644 index 0000000..8b876f3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/frame-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon.png new file mode 100644 index 0000000..5542ecf Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon16.png new file mode 100644 index 0000000..9cf4324 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon@2x.png new file mode 100644 index 0000000..80dab3c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/groupbox-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon.png new file mode 100644 index 0000000..822cf3e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon16.png new file mode 100644 index 0000000..b3ed007 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon@2x.png new file mode 100644 index 0000000..cb81308 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/itemdelegate-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon.png new file mode 100644 index 0000000..788bef0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon16.png new file mode 100644 index 0000000..b68d384 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon@2x.png new file mode 100644 index 0000000..7001413 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/label-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon.png new file mode 100644 index 0000000..b5ac87e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon16.png new file mode 100644 index 0000000..bc6810b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon@2x.png new file mode 100644 index 0000000..23db032 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/page-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon.png new file mode 100644 index 0000000..edb6b37 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon16.png new file mode 100644 index 0000000..0fb8967 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon@2x.png new file mode 100644 index 0000000..7be0ee8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pageindicator-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon.png new file mode 100644 index 0000000..62ebe48 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon16.png new file mode 100644 index 0000000..2b80484 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon@2x.png new file mode 100644 index 0000000..55bb116 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/pane-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon.png new file mode 100644 index 0000000..a023f73 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon16.png new file mode 100644 index 0000000..6fede21 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon@2x.png new file mode 100644 index 0000000..0069400 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/progressbar-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon.png new file mode 100644 index 0000000..d38170e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon16.png new file mode 100644 index 0000000..07b46a8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon@2x.png new file mode 100644 index 0000000..4bbddda Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/radiobutton-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon.png new file mode 100644 index 0000000..1c4c7b2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon16.png new file mode 100644 index 0000000..3be4624 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon@2x.png new file mode 100644 index 0000000..aee69b3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/rangeslider-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon.png new file mode 100644 index 0000000..d4b470d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon16.png new file mode 100644 index 0000000..f6f3666 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon@2x.png new file mode 100644 index 0000000..4553e16 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/roundbutton-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon.png new file mode 100644 index 0000000..5ef73ff Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon16.png new file mode 100644 index 0000000..f8ca7a3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon@2x.png new file mode 100644 index 0000000..0eb7f96 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/scrollview-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon.png new file mode 100644 index 0000000..bd0a972 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon16.png new file mode 100644 index 0000000..a08622d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon@2x.png new file mode 100644 index 0000000..93842e4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/slider-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon.png new file mode 100644 index 0000000..37277c5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon16.png new file mode 100644 index 0000000..f88711d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon@2x.png new file mode 100644 index 0000000..b62a3ba Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/spinbox-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon.png new file mode 100644 index 0000000..a6ced34 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon16.png new file mode 100644 index 0000000..0f19d0e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon@2x.png new file mode 100644 index 0000000..9b5ef95 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/stackview-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon.png new file mode 100644 index 0000000..031cb27 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon16.png new file mode 100644 index 0000000..446c469 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon@2x.png new file mode 100644 index 0000000..0ccb978 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/swipeview-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon.png new file mode 100644 index 0000000..e018159 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon16.png new file mode 100644 index 0000000..9abd275 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon@2x.png new file mode 100644 index 0000000..787f54c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/switch-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon.png new file mode 100644 index 0000000..f1b2dc0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon16.png new file mode 100644 index 0000000..4afc1fb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon@2x.png new file mode 100644 index 0000000..c32ecc7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textarea-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon.png new file mode 100644 index 0000000..ba5537a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon16.png new file mode 100644 index 0000000..c4a62a6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon@2x.png new file mode 100644 index 0000000..e05fd41 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/textfield-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon.png new file mode 100644 index 0000000..5cb5b2e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon16.png new file mode 100644 index 0000000..569373a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon@2x.png new file mode 100644 index 0000000..fd9e6ce Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbar-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon.png new file mode 100644 index 0000000..3298f69 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon16.png new file mode 100644 index 0000000..9ab7861 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon@2x.png new file mode 100644 index 0000000..e5958cd Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolbutton-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon.png new file mode 100644 index 0000000..5e99f06 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon16.png new file mode 100644 index 0000000..68f22c5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon@2x.png new file mode 100644 index 0000000..549c11c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/toolseparator-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon.png new file mode 100644 index 0000000..98eb823 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon16.png new file mode 100644 index 0000000..ff5f95c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon@2x.png new file mode 100644 index 0000000..236abf0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/images/tumbler-icon@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/qtquickcontrols2.metainfo b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/qtquickcontrols2.metainfo new file mode 100644 index 0000000..d27f1b9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/designer/qtquickcontrols2.metainfo @@ -0,0 +1,522 @@ +MetaInfo { + Type { + name: "QtQuick.Controls.BusyIndicator" + icon: "images/busyindicator-icon16.png" + + ItemLibraryEntry { + name: "Busy Indicator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/busyindicator-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.Button" + icon: "images/button-icon16.png" + + ItemLibraryEntry { + name: "Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/button-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" } + } + } + + Type { + name: "QtQuick.Controls.CheckBox" + icon: "images/checkbox-icon16.png" + + ItemLibraryEntry { + name: "Check Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/checkbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Check Box\")" } + } + } + + Type { + name: "QtQuick.Controls.CheckDelegate" + icon: "images/checkbox-icon16.png" + + ItemLibraryEntry { + name: "Check Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/checkbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Check Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.ComboBox" + icon: "images/combobox-icon16.png" + + ItemLibraryEntry { + name: "Combo Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/combobox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.DelayButton" + icon: "images/button-icon16.png" + + ItemLibraryEntry { + name: "Delay Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/delaybutton-icon.png" + version: "2.2" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Delay Button\")" } + } + } + + Type { + name: "QtQuick.Controls.Dial" + icon: "images/dial-icon16.png" + + ItemLibraryEntry { + name: "Dial" + category: "Qt Quick - Controls 2" + libraryIcon: "images/dial-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.Frame" + icon: "images/frame-icon16.png" + + ItemLibraryEntry { + name: "Frame" + category: "Qt Quick - Controls 2" + libraryIcon: "images/frame-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.GroupBox" + icon: "images/groupbox-icon16.png" + + ItemLibraryEntry { + name: "Group Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/groupbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + Property { name: "title"; type: "binding"; value: "qsTr(\"Group Box\")" } + } + } + + Type { + name: "QtQuick.Controls.ItemDelegate" + icon: "images/itemdelegate-icon16.png" + + ItemLibraryEntry { + name: "Item Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/itemdelegate-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Item Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.Label" + icon: "images/label-icon16.png" + + ItemLibraryEntry { + name: "Label" + category: "Qt Quick - Controls 2" + libraryIcon: "images/label-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Label\")" } + } + } + + Type { + name: "QtQuick.Controls.Page" + icon: "images/page-icon16.png" + + ItemLibraryEntry { + name: "Page" + category: "Qt Quick - Controls 2" + libraryIcon: "images/page-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.PageIndicator" + icon: "images/pageindicator-icon16.png" + + ItemLibraryEntry { + name: "Page Indicator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/pageindicator-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "count"; type: "int"; value: 3 } + } + } + + Type { + name: "QtQuick.Controls.Pane" + icon: "images/pane-icon16.png" + + ItemLibraryEntry { + name: "Pane" + category: "Qt Quick - Controls 2" + libraryIcon: "images/pane-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.ProgressBar" + icon: "images/progressbar-icon16.png" + + ItemLibraryEntry { + name: "Progress Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/progressbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "value"; type: "real"; value: 0.5 } + } + } + + Type { + name: "QtQuick.Controls.RadioButton" + icon: "images/radiobutton-icon16.png" + + ItemLibraryEntry { + name: "Radio Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/radiobutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Button\")" } + } + } + + Type { + name: "QtQuick.Controls.RadioDelegate" + icon: "images/radiobutton-icon16.png" + + ItemLibraryEntry { + name: "Radio Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/radiobutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.RangeSlider" + icon: "images/rangeslider-icon16.png" + + ItemLibraryEntry { + name: "Range Slider" + category: "Qt Quick - Controls 2" + libraryIcon: "images/rangeslider-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "first.value"; type: "real"; value: 0.25 } + Property { name: "second.value"; type: "real"; value: 0.75 } + } + } + + Type { + name: "QtQuick.Controls.RoundButton" + icon: "images/roundbutton-icon16.png" + + ItemLibraryEntry { + name: "Round Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/roundbutton-icon.png" + version: "2.1" + requiredImport: "QtQuick.Controls" + Property { name: "text"; type: "string"; value: "+" } + } + } + + Type { + name: "QtQuick.Controls.Slider" + icon: "images/slider-icon16.png" + + ItemLibraryEntry { + name: "Slider" + category: "Qt Quick - Controls 2" + libraryIcon: "images/slider-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "value"; type: "real"; value: 0.5 } + } + } + + Type { + name: "QtQuick.Controls.SpinBox" + icon: "images/spinbox-icon16.png" + + ItemLibraryEntry { + name: "Spin Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/spinbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.ScrollView" + icon: "images/scrollview-icon16.png" + + ItemLibraryEntry { + name: "Scroll View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/scrollview-icon.png" + version: "2.2" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.StackView" + icon: "images/stackview-icon16.png" + + ItemLibraryEntry { + name: "Stack View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/stackview-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.SwipeDelegate" + icon: "images/itemdelegate-icon16.png" + + ItemLibraryEntry { + name: "Swipe Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/itemdelegate-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Swipe Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.SwipeView" + icon: "images/swipeview-icon16.png" + + ItemLibraryEntry { + name: "Swipe View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/swipeview-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.Switch" + icon: "images/switch-icon16.png" + + ItemLibraryEntry { + name: "Switch" + category: "Qt Quick - Controls 2" + libraryIcon: "images/switch-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Switch\")" } + } + } + + Type { + name: "QtQuick.Controls.SwitchDelegate" + icon: "images/switch-icon16.png" + + ItemLibraryEntry { + name: "Switch Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/switch-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Switch Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.TabBar" + icon: "images/toolbar-icon16.png" + + ItemLibraryEntry { + name: "Tab Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + Property { name: "width"; type: "int"; value: 240 } + } + } + + Type { + name: "QtQuick.Controls.TabButton" + icon: "images/toolbutton-icon16.png" + + ItemLibraryEntry { + name: "Tab Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + Property { name: "text"; type: "binding"; value: "qsTr(\"Tab Button\")" } + } + } + + Type { + name: "QtQuick.Controls.TextArea" + icon: "images/textarea-icon16.png" + + ItemLibraryEntry { + name: "Text Area" + category: "Qt Quick - Controls 2" + libraryIcon: "images/textarea-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Area\")" } + } + } + + Type { + name: "QtQuick.Controls.TextField" + icon: "images/textfield-icon16.png" + + ItemLibraryEntry { + name: "Text Field" + category: "Qt Quick - Controls 2" + libraryIcon: "images/textfield-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Field\")" } + } + } + + Type { + name: "QtQuick.Controls.ToolBar" + icon: "images/toolbar-icon16.png" + + ItemLibraryEntry { + name: "Tool Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 360 } + } + } + + Type { + name: "QtQuick.Controls.ToolButton" + icon: "images/toolbutton-icon16.png" + + ItemLibraryEntry { + name: "Tool Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Tool Button\")" } + } + } + + Type { + name: "QtQuick.Controls.ToolSeparator" + icon: "images/toolseparator-icon16.png" + + ItemLibraryEntry { + name: "Tool Separator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolseparator-icon.png" + version: "2.1" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.Tumbler" + icon: "images/tumbler-icon16.png" + + ItemLibraryEntry { + name: "Tumbler" + category: "Qt Quick - Controls 2" + libraryIcon: "images/tumbler-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "model"; type: "int"; value: "10" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/libqtquickcontrols2plugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/libqtquickcontrols2plugin.so new file mode 100755 index 0000000..8fa8ab9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/libqtquickcontrols2plugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/plugins.qmltypes new file mode 100644 index 0000000..e8212c5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/plugins.qmltypes @@ -0,0 +1,895 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Controls 2.15' + +Module { + dependencies: [ + "QtQuick 2.11", + "QtQuick.Templates 2.5", + "QtQuick.Window 2.2" + ] + Component { + name: "QQuickCheckLabel" + defaultProperty: "data" + prototype: "QQuickText" + exports: ["QtQuick.Controls.impl/CheckLabel 2.3"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickClippedText" + defaultProperty: "data" + prototype: "QQuickText" + exports: ["QtQuick.Controls.impl/ClippedText 2.2"] + exportMetaObjectRevisions: [0] + Property { name: "clipX"; type: "double" } + Property { name: "clipY"; type: "double" } + Property { name: "clipWidth"; type: "double" } + Property { name: "clipHeight"; type: "double" } + } + Component { + name: "QQuickColor" + prototype: "QObject" + exports: ["QtQuick.Controls.impl/Color 2.3"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Method { + name: "transparent" + type: "QColor" + Parameter { name: "color"; type: "QColor" } + Parameter { name: "opacity"; type: "double" } + } + Method { + name: "blend" + type: "QColor" + Parameter { name: "a"; type: "QColor" } + Parameter { name: "b"; type: "QColor" } + Parameter { name: "factor"; type: "double" } + } + } + Component { + name: "QQuickColorImage" + defaultProperty: "data" + prototype: "QQuickImage" + exports: ["QtQuick.Controls.impl/ColorImage 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "color"; type: "QColor" } + Property { name: "defaultColor"; type: "QColor" } + } + Component { + name: "QQuickDefaultBusyIndicator" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.impl/BusyIndicatorImpl 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "pen"; type: "QColor" } + Property { name: "fill"; type: "QColor" } + Property { name: "running"; type: "bool" } + } + Component { + name: "QQuickDefaultDial" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtQuick.Controls.impl/DialImpl 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "progress"; type: "double" } + Property { name: "color"; type: "QColor" } + } + Component { + name: "QQuickDefaultProgressBar" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.impl/ProgressBarImpl 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "indeterminate"; type: "bool" } + Property { name: "progress"; type: "double" } + Property { name: "color"; type: "QColor" } + } + Component { + name: "QQuickDefaultStyle" + prototype: "QObject" + exports: ["QtQuick.Controls.impl/Default 2.1"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Property { name: "backgroundColor"; type: "QColor"; isReadonly: true } + Property { name: "overlayModalColor"; type: "QColor"; isReadonly: true } + Property { name: "overlayDimColor"; type: "QColor"; isReadonly: true } + Property { name: "textColor"; type: "QColor"; isReadonly: true } + Property { name: "textDarkColor"; type: "QColor"; isReadonly: true } + Property { name: "textLightColor"; type: "QColor"; isReadonly: true } + Property { name: "textLinkColor"; type: "QColor"; isReadonly: true } + Property { name: "textSelectionColor"; type: "QColor"; isReadonly: true } + Property { name: "textDisabledColor"; type: "QColor"; isReadonly: true } + Property { name: "textDisabledLightColor"; type: "QColor"; isReadonly: true } + Property { name: "textPlaceholderColor"; type: "QColor"; isReadonly: true } + Property { name: "focusColor"; type: "QColor"; isReadonly: true } + Property { name: "focusLightColor"; type: "QColor"; isReadonly: true } + Property { name: "focusPressedColor"; type: "QColor"; isReadonly: true } + Property { name: "buttonColor"; type: "QColor"; isReadonly: true } + Property { name: "buttonPressedColor"; type: "QColor"; isReadonly: true } + Property { name: "buttonCheckedColor"; type: "QColor"; isReadonly: true } + Property { name: "buttonCheckedPressedColor"; type: "QColor"; isReadonly: true } + Property { name: "buttonCheckedFocusColor"; type: "QColor"; isReadonly: true } + Property { name: "toolButtonColor"; type: "QColor"; isReadonly: true } + Property { name: "tabButtonColor"; type: "QColor"; isReadonly: true } + Property { name: "tabButtonPressedColor"; type: "QColor"; isReadonly: true } + Property { name: "tabButtonCheckedPressedColor"; type: "QColor"; isReadonly: true } + Property { name: "delegateColor"; type: "QColor"; isReadonly: true } + Property { name: "delegatePressedColor"; type: "QColor"; isReadonly: true } + Property { name: "delegateFocusColor"; type: "QColor"; isReadonly: true } + Property { name: "indicatorPressedColor"; type: "QColor"; isReadonly: true } + Property { name: "indicatorDisabledColor"; type: "QColor"; isReadonly: true } + Property { name: "indicatorFrameColor"; type: "QColor"; isReadonly: true } + Property { name: "indicatorFramePressedColor"; type: "QColor"; isReadonly: true } + Property { name: "indicatorFrameDisabledColor"; type: "QColor"; isReadonly: true } + Property { name: "frameDarkColor"; type: "QColor"; isReadonly: true } + Property { name: "frameLightColor"; type: "QColor"; isReadonly: true } + Property { name: "scrollBarColor"; type: "QColor"; isReadonly: true } + Property { name: "scrollBarPressedColor"; type: "QColor"; isReadonly: true } + Property { name: "progressBarColor"; type: "QColor"; isReadonly: true } + Property { name: "pageIndicatorColor"; type: "QColor"; isReadonly: true } + Property { name: "separatorColor"; type: "QColor"; isReadonly: true } + Property { name: "disabledDarkColor"; type: "QColor"; isReadonly: true } + Property { name: "disabledLightColor"; type: "QColor"; isReadonly: true } + } + Component { + name: "QQuickIconImage" + defaultProperty: "data" + prototype: "QQuickImage" + exports: ["QtQuick.Controls.impl/IconImage 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "name"; type: "string" } + Property { name: "color"; type: "QColor" } + } + Component { + name: "QQuickIconLabel" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.impl/IconLabel 2.3"] + exportMetaObjectRevisions: [0] + Enum { + name: "Display" + values: { + "IconOnly": 0, + "TextOnly": 1, + "TextBesideIcon": 2, + "TextUnderIcon": 3 + } + } + Property { name: "icon"; type: "QQuickIcon" } + Property { name: "text"; type: "string" } + Property { name: "font"; type: "QFont" } + Property { name: "color"; type: "QColor" } + Property { name: "display"; type: "Display" } + Property { name: "spacing"; type: "double" } + Property { name: "mirrored"; type: "bool" } + Property { name: "alignment"; type: "Qt::Alignment" } + Property { name: "topPadding"; type: "double" } + Property { name: "leftPadding"; type: "double" } + Property { name: "rightPadding"; type: "double" } + Property { name: "bottomPadding"; type: "double" } + } + Component { + name: "QQuickImplicitSizeItem" + defaultProperty: "data" + prototype: "QQuickItem" + Property { name: "implicitWidth"; type: "double"; isReadonly: true } + Property { name: "implicitHeight"; type: "double"; isReadonly: true } + } + Component { + name: "QQuickItemGroup" + defaultProperty: "data" + prototype: "QQuickImplicitSizeItem" + exports: ["QtQuick.Controls.impl/ItemGroup 2.2"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickMnemonicLabel" + defaultProperty: "data" + prototype: "QQuickText" + exports: ["QtQuick.Controls.impl/MnemonicLabel 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "text"; type: "string" } + Property { name: "mnemonicVisible"; type: "bool" } + } + Component { + name: "QQuickOverlay" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls/Overlay 2.3"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickOverlayAttached" + Property { name: "modal"; type: "QQmlComponent"; isPointer: true } + Property { name: "modeless"; type: "QQmlComponent"; isPointer: true } + Signal { name: "pressed" } + Signal { name: "released" } + } + Component { + name: "QQuickPaddedRectangle" + defaultProperty: "data" + prototype: "QQuickRectangle" + exports: ["QtQuick.Controls.impl/PaddedRectangle 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "padding"; type: "double" } + Property { name: "topPadding"; type: "double" } + Property { name: "leftPadding"; type: "double" } + Property { name: "rightPadding"; type: "double" } + Property { name: "bottomPadding"; type: "double" } + } + Component { + name: "QQuickPlaceholderText" + defaultProperty: "data" + prototype: "QQuickText" + exports: ["QtQuick.Controls.impl/PlaceholderText 2.2"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickSplitHandleAttached" + prototype: "QObject" + exports: ["QtQuick.Controls/SplitHandle 2.13"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "pressed"; type: "bool"; isReadonly: true } + } + Component { + name: "QQuickText" + defaultProperty: "data" + prototype: "QQuickImplicitSizeItem" + Enum { + name: "HAlignment" + values: { + "AlignLeft": 1, + "AlignRight": 2, + "AlignHCenter": 4, + "AlignJustify": 8 + } + } + Enum { + name: "VAlignment" + values: { + "AlignTop": 32, + "AlignBottom": 64, + "AlignVCenter": 128 + } + } + Enum { + name: "TextStyle" + values: { + "Normal": 0, + "Outline": 1, + "Raised": 2, + "Sunken": 3 + } + } + Enum { + name: "TextFormat" + values: { + "PlainText": 0, + "RichText": 1, + "MarkdownText": 3, + "AutoText": 2, + "StyledText": 4 + } + } + Enum { + name: "TextElideMode" + values: { + "ElideLeft": 0, + "ElideRight": 1, + "ElideMiddle": 2, + "ElideNone": 3 + } + } + Enum { + name: "WrapMode" + values: { + "NoWrap": 0, + "WordWrap": 1, + "WrapAnywhere": 3, + "WrapAtWordBoundaryOrAnywhere": 4, + "Wrap": 4 + } + } + Enum { + name: "RenderType" + values: { + "QtRendering": 0, + "NativeRendering": 1 + } + } + Enum { + name: "LineHeightMode" + values: { + "ProportionalHeight": 0, + "FixedHeight": 1 + } + } + Enum { + name: "FontSizeMode" + values: { + "FixedSize": 0, + "HorizontalFit": 1, + "VerticalFit": 2, + "Fit": 3 + } + } + Property { name: "text"; type: "string" } + Property { name: "font"; type: "QFont" } + Property { name: "color"; type: "QColor" } + Property { name: "linkColor"; type: "QColor" } + Property { name: "style"; type: "TextStyle" } + Property { name: "styleColor"; type: "QColor" } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "effectiveHorizontalAlignment"; type: "HAlignment"; isReadonly: true } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "wrapMode"; type: "WrapMode" } + Property { name: "lineCount"; type: "int"; isReadonly: true } + Property { name: "truncated"; type: "bool"; isReadonly: true } + Property { name: "maximumLineCount"; type: "int" } + Property { name: "textFormat"; type: "TextFormat" } + Property { name: "elide"; type: "TextElideMode" } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "paintedWidth"; type: "double"; isReadonly: true } + Property { name: "paintedHeight"; type: "double"; isReadonly: true } + Property { name: "lineHeight"; type: "double" } + Property { name: "lineHeightMode"; type: "LineHeightMode" } + Property { name: "baseUrl"; type: "QUrl" } + Property { name: "minimumPixelSize"; type: "int" } + Property { name: "minimumPointSize"; type: "int" } + Property { name: "fontSizeMode"; type: "FontSizeMode" } + Property { name: "renderType"; type: "RenderType" } + Property { name: "hoveredLink"; revision: 2; type: "string"; isReadonly: true } + Property { name: "padding"; revision: 6; type: "double" } + Property { name: "topPadding"; revision: 6; type: "double" } + Property { name: "leftPadding"; revision: 6; type: "double" } + Property { name: "rightPadding"; revision: 6; type: "double" } + Property { name: "bottomPadding"; revision: 6; type: "double" } + Property { name: "fontInfo"; revision: 9; type: "QJSValue"; isReadonly: true } + Property { name: "advance"; revision: 10; type: "QSizeF"; isReadonly: true } + Signal { + name: "textChanged" + Parameter { name: "text"; type: "string" } + } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "linkHovered" + revision: 2 + Parameter { name: "link"; type: "string" } + } + Signal { + name: "fontChanged" + Parameter { name: "font"; type: "QFont" } + } + Signal { + name: "styleChanged" + Parameter { name: "style"; type: "QQuickText::TextStyle" } + } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickText::HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickText::VAlignment" } + } + Signal { + name: "textFormatChanged" + Parameter { name: "textFormat"; type: "QQuickText::TextFormat" } + } + Signal { + name: "elideModeChanged" + Parameter { name: "mode"; type: "QQuickText::TextElideMode" } + } + Signal { name: "contentSizeChanged" } + Signal { + name: "contentWidthChanged" + Parameter { name: "contentWidth"; type: "double" } + } + Signal { + name: "contentHeightChanged" + Parameter { name: "contentHeight"; type: "double" } + } + Signal { + name: "lineHeightChanged" + Parameter { name: "lineHeight"; type: "double" } + } + Signal { + name: "lineHeightModeChanged" + Parameter { name: "mode"; type: "LineHeightMode" } + } + Signal { + name: "lineLaidOut" + Parameter { name: "line"; type: "QQuickTextLine"; isPointer: true } + } + Signal { name: "paddingChanged"; revision: 6 } + Signal { name: "topPaddingChanged"; revision: 6 } + Signal { name: "leftPaddingChanged"; revision: 6 } + Signal { name: "rightPaddingChanged"; revision: 6 } + Signal { name: "bottomPaddingChanged"; revision: 6 } + Signal { name: "fontInfoChanged"; revision: 9 } + Method { name: "doLayout" } + Method { name: "forceLayout"; revision: 9 } + Method { + name: "linkAt" + revision: 3 + type: "string" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + name: "QQuickTumblerView" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.impl/TumblerView 2.1"] + exportMetaObjectRevisions: [0] + Property { name: "model"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "path"; type: "QQuickPath"; isPointer: true } + } + Component { + prototype: "QQuickAbstractButton" + name: "QtQuick.Controls/AbstractButton 2.0" + exports: ["QtQuick.Controls/AbstractButton 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickAction" + name: "QtQuick.Controls/Action 2.3" + exports: ["QtQuick.Controls/Action 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + } + Component { + prototype: "QQuickActionGroup" + name: "QtQuick.Controls/ActionGroup 2.3" + exports: ["QtQuick.Controls/ActionGroup 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "actions" + } + Component { + prototype: "QQuickApplicationWindow" + name: "QtQuick.Controls/ApplicationWindow 2.0" + exports: ["QtQuick.Controls/ApplicationWindow 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickBusyIndicator" + name: "QtQuick.Controls/BusyIndicator 2.0" + exports: ["QtQuick.Controls/BusyIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickButton" + name: "QtQuick.Controls/Button 2.0" + exports: ["QtQuick.Controls/Button 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickButtonGroup" + name: "QtQuick.Controls/ButtonGroup 2.0" + exports: ["QtQuick.Controls/ButtonGroup 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + } + Component { + prototype: "QQuickCheckBox" + name: "QtQuick.Controls/CheckBox 2.0" + exports: ["QtQuick.Controls/CheckBox 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickCheckDelegate" + name: "QtQuick.Controls/CheckDelegate 2.0" + exports: ["QtQuick.Controls/CheckDelegate 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickComboBox" + name: "QtQuick.Controls/ComboBox 2.0" + exports: ["QtQuick.Controls/ComboBox 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickContainer" + name: "QtQuick.Controls/Container 2.0" + exports: ["QtQuick.Controls/Container 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickControl" + name: "QtQuick.Controls/Control 2.0" + exports: ["QtQuick.Controls/Control 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickDelayButton" + name: "QtQuick.Controls/DelayButton 2.2" + exports: ["QtQuick.Controls/DelayButton 2.2"] + exportMetaObjectRevisions: [2] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickDial" + name: "QtQuick.Controls/Dial 2.0" + exports: ["QtQuick.Controls/Dial 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickDialog" + name: "QtQuick.Controls/Dialog 2.1" + exports: ["QtQuick.Controls/Dialog 2.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickDialogButtonBox" + name: "QtQuick.Controls/DialogButtonBox 2.1" + exports: ["QtQuick.Controls/DialogButtonBox 2.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickDrawer" + name: "QtQuick.Controls/Drawer 2.0" + exports: ["QtQuick.Controls/Drawer 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickFrame" + name: "QtQuick.Controls/Frame 2.0" + exports: ["QtQuick.Controls/Frame 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickGroupBox" + name: "QtQuick.Controls/GroupBox 2.0" + exports: ["QtQuick.Controls/GroupBox 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickHorizontalHeaderView" + name: "QtQuick.Controls/HorizontalHeaderView 2.15" + exports: ["QtQuick.Controls/HorizontalHeaderView 2.15"] + exportMetaObjectRevisions: [15] + isComposite: true + defaultProperty: "flickableData" + } + Component { + prototype: "QQuickItemDelegate" + name: "QtQuick.Controls/ItemDelegate 2.0" + exports: ["QtQuick.Controls/ItemDelegate 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickLabel" + name: "QtQuick.Controls/Label 2.0" + exports: ["QtQuick.Controls/Label 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickMenu" + name: "QtQuick.Controls/Menu 2.0" + exports: ["QtQuick.Controls/Menu 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickMenuBar" + name: "QtQuick.Controls/MenuBar 2.3" + exports: ["QtQuick.Controls/MenuBar 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickMenuBarItem" + name: "QtQuick.Controls/MenuBarItem 2.3" + exports: ["QtQuick.Controls/MenuBarItem 2.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickMenuItem" + name: "QtQuick.Controls/MenuItem 2.0" + exports: ["QtQuick.Controls/MenuItem 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickMenuSeparator" + name: "QtQuick.Controls/MenuSeparator 2.1" + exports: ["QtQuick.Controls/MenuSeparator 2.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickPage" + name: "QtQuick.Controls/Page 2.0" + exports: ["QtQuick.Controls/Page 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickPageIndicator" + name: "QtQuick.Controls/PageIndicator 2.0" + exports: ["QtQuick.Controls/PageIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickPane" + name: "QtQuick.Controls/Pane 2.0" + exports: ["QtQuick.Controls/Pane 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickPopup" + name: "QtQuick.Controls/Popup 2.0" + exports: ["QtQuick.Controls/Popup 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickProgressBar" + name: "QtQuick.Controls/ProgressBar 2.0" + exports: ["QtQuick.Controls/ProgressBar 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickRadioButton" + name: "QtQuick.Controls/RadioButton 2.0" + exports: ["QtQuick.Controls/RadioButton 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickRadioDelegate" + name: "QtQuick.Controls/RadioDelegate 2.0" + exports: ["QtQuick.Controls/RadioDelegate 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickRangeSlider" + name: "QtQuick.Controls/RangeSlider 2.0" + exports: ["QtQuick.Controls/RangeSlider 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickRoundButton" + name: "QtQuick.Controls/RoundButton 2.1" + exports: ["QtQuick.Controls/RoundButton 2.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickScrollBar" + name: "QtQuick.Controls/ScrollBar 2.0" + exports: ["QtQuick.Controls/ScrollBar 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickScrollIndicator" + name: "QtQuick.Controls/ScrollIndicator 2.0" + exports: ["QtQuick.Controls/ScrollIndicator 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickScrollView" + name: "QtQuick.Controls/ScrollView 2.2" + exports: ["QtQuick.Controls/ScrollView 2.2"] + exportMetaObjectRevisions: [2] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickSlider" + name: "QtQuick.Controls/Slider 2.0" + exports: ["QtQuick.Controls/Slider 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickSpinBox" + name: "QtQuick.Controls/SpinBox 2.0" + exports: ["QtQuick.Controls/SpinBox 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickSplitView" + name: "QtQuick.Controls/SplitView 2.13" + exports: ["QtQuick.Controls/SplitView 2.13"] + exportMetaObjectRevisions: [13] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickStackView" + name: "QtQuick.Controls/StackView 2.0" + exports: ["QtQuick.Controls/StackView 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickSwipeDelegate" + name: "QtQuick.Controls/SwipeDelegate 2.0" + exports: ["QtQuick.Controls/SwipeDelegate 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickSwipeView" + name: "QtQuick.Controls/SwipeView 2.0" + exports: ["QtQuick.Controls/SwipeView 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickSwitch" + name: "QtQuick.Controls/Switch 2.0" + exports: ["QtQuick.Controls/Switch 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickSwitchDelegate" + name: "QtQuick.Controls/SwitchDelegate 2.0" + exports: ["QtQuick.Controls/SwitchDelegate 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickTabBar" + name: "QtQuick.Controls/TabBar 2.0" + exports: ["QtQuick.Controls/TabBar 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickTabButton" + name: "QtQuick.Controls/TabButton 2.0" + exports: ["QtQuick.Controls/TabButton 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickTextArea" + name: "QtQuick.Controls/TextArea 2.0" + exports: ["QtQuick.Controls/TextArea 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickTextField" + name: "QtQuick.Controls/TextField 2.0" + exports: ["QtQuick.Controls/TextField 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickToolBar" + name: "QtQuick.Controls/ToolBar 2.0" + exports: ["QtQuick.Controls/ToolBar 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickToolButton" + name: "QtQuick.Controls/ToolButton 2.0" + exports: ["QtQuick.Controls/ToolButton 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickToolSeparator" + name: "QtQuick.Controls/ToolSeparator 2.1" + exports: ["QtQuick.Controls/ToolSeparator 2.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickToolTip" + name: "QtQuick.Controls/ToolTip 2.0" + exports: ["QtQuick.Controls/ToolTip 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentData" + } + Component { + prototype: "QQuickTumbler" + name: "QtQuick.Controls/Tumbler 2.0" + exports: ["QtQuick.Controls/Tumbler 2.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickVerticalHeaderView" + name: "QtQuick.Controls/VerticalHeaderView 2.15" + exports: ["QtQuick.Controls/VerticalHeaderView 2.15"] + exportMetaObjectRevisions: [15] + isComposite: true + defaultProperty: "flickableData" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/qmldir new file mode 100644 index 0000000..c9ccb8f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls.2/qmldir @@ -0,0 +1,5 @@ +module QtQuick.Controls +plugin qtquickcontrols2plugin +classname QtQuickControls2Plugin +depends QtQuick.Templates 2.5 +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ApplicationWindow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ApplicationWindow.qml new file mode 100644 index 0000000..7d21555 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ApplicationWindow.qml @@ -0,0 +1,265 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick.Window 2.2 +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.0 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ApplicationWindow + \since 5.1 + \inqmlmodule QtQuick.Controls + \ingroup applicationwindow + \ingroup controls + \brief Provides a top-level application window. + + \image applicationwindow.png + + ApplicationWindow is a \l Window that adds convenience for positioning items, + such as \l MenuBar, \l ToolBar, and \l StatusBar in a platform independent + manner. + + \code + ApplicationWindow { + id: window + visible: true + + menuBar: MenuBar { + Menu { MenuItem {...} } + Menu { MenuItem {...} } + } + + toolBar: ToolBar { + RowLayout { + anchors.fill: parent + ToolButton {...} + } + } + + TabView { + id: myContent + anchors.fill: parent + ... + } + } + \endcode + + \note By default, an ApplicationWindow is not visible. + + The \l{Qt Quick Controls 1 - Gallery} example is a good starting + point to explore this type. +*/ + +Window { + id: root + + /*! + \qmlproperty MenuBar ApplicationWindow::menuBar + + This property holds the \l MenuBar. + + By default, this value is not set. + */ + property MenuBar menuBar: null + + /*! + \qmlproperty Item ApplicationWindow::toolBar + + This property holds the toolbar \l Item. + + It can be set to any Item type, but is generally used with \l ToolBar. + + By default, this value is not set. When you set the toolbar item, it will + be anchored automatically into the application window. + */ + property Item toolBar + + /*! + \qmlproperty Item ApplicationWindow::statusBar + + This property holds the status bar \l Item. + + It can be set to any Item type, but is generally used with \l StatusBar. + + By default, this value is not set. When you set the status bar item, it + will be anchored automatically into the application window. + */ + property Item statusBar + + // The below documentation was supposed to be written as a grouped property, but qdoc would + // not render it correctly due to a bug (QTBUG-34206) + /*! + \qmlproperty ContentItem ApplicationWindow::contentItem + + This group holds the size constraints of the content item. This is the area between the + \l ToolBar and the \l StatusBar. + The \l ApplicationWindow will use this as input when calculating the effective size + constraints of the actual window. + It holds these 6 properties for describing the minimum, implicit and maximum sizes: + \table + \header \li Grouped property \li Description + \row \li contentItem.minimumWidth \li The minimum width of the content item. + \row \li contentItem.minimumHeight \li The minimum height of the content item. + \row \li contentItem.implicitWidth \li The implicit width of the content item. + \row \li contentItem.implicitHeight \li The implicit height of the content item. + \row \li contentItem.maximumWidth \li The maximum width of the content item. + \row \li contentItem.maximumHeight \li The maximum height of the content item. + \endtable + */ + property alias contentItem : contentArea + + /*! The style Component for the window. + \sa {Qt Quick Controls 1 Styles QML Types} + */ + property Component style: Settings.styleComponent(Settings.style, "ApplicationWindowStyle.qml", root) + + /*! \internal */ + property alias __style: styleLoader.item + + /*! \internal */ + property alias __panel: panelLoader.item + + /*! \internal */ + property real __topBottomMargins: __panel.contentArea.y + __panel.statusBarArea.height + /*! \internal + There is a similar macro QWINDOWSIZE_MAX in qwindow_p.h that is used to limit the + range of QWindow::maximum{Width,Height} + However, in case we have a very big number (> 2^31) conversion will fail, and it will be + converted to 0, resulting in that we will call setMaximumWidth(0).... + We therefore need to enforce the limit at a level where we are still operating on + floating point values. + */ + readonly property real __qwindowsize_max: (1 << 24) - 1 + + /*! \internal */ + property real __width: 0 + Qml.Binding { + target: root + property: "__width" + when: (root.minimumWidth <= root.maximumWidth) && !contentArea.__noImplicitWidthGiven + value: Math.max(Math.min(root.maximumWidth, contentArea.implicitWidth), root.minimumWidth) + restoreMode: Binding.RestoreBinding + } + /*! \internal */ + property real __height: 0 + Qml.Binding { + target: root + property: "__height" + when: (root.minimumHeight <= root.maximumHeight) && !contentArea.__noImplicitHeightGiven + value: Math.max(Math.min(root.maximumHeight, contentArea.implicitHeight + __topBottomMargins), root.minimumHeight) + restoreMode: Binding.RestoreBinding + } + /* As soon as an application developer writes + width: 200 + this binding will be broken. This is the reason for this indirection + via __width (and __height) + */ + width: __width + height: __height + + minimumWidth: contentArea.__noMinimumWidthGiven ? 0 : contentArea.minimumWidth + minimumHeight: contentArea.__noMinimumHeightGiven ? 0 : (contentArea.minimumHeight + __topBottomMargins) + + maximumWidth: Math.min(__qwindowsize_max, contentArea.maximumWidth) + maximumHeight: Math.min(__qwindowsize_max, contentArea.maximumHeight + __topBottomMargins) + + /*! \internal */ + default property alias data: contentArea.data + + flags: Qt.Window | Qt.WindowFullscreenButtonHint | + Qt.WindowTitleHint | Qt.WindowSystemMenuHint | Qt.WindowMinMaxButtonsHint | + Qt.WindowCloseButtonHint | Qt.WindowFullscreenButtonHint + // QTBUG-35049: Windows is removing features we didn't ask for, even though Qt::CustomizeWindowHint is not set + // Otherwise Qt.Window | Qt.WindowFullscreenButtonHint would be enough + + Loader { + id: panelLoader + anchors.fill: parent + sourceComponent: __style ? __style.panel : null + onStatusChanged: if (status === Loader.Error) console.error("Failed to load Style for", root) + focus: true + Loader { + id: styleLoader + sourceComponent: style + property var __control: root + property QtObject styleData: QtObject { + readonly property bool hasColor: root.color != "#ffffff" + } + onStatusChanged: if (status === Loader.Error) console.error("Failed to load Style for", root) + } + + Qml.Binding { + target: toolBar + property: "parent" + value: __panel.toolBarArea + restoreMode: Binding.RestoreBinding + } + Qml.Binding { + target: statusBar + property: "parent" + value: __panel.statusBarArea + restoreMode: Binding.RestoreBinding + } + + Qml.Binding { + property: "parent" + target: menuBar ? menuBar.__contentItem : null + when: menuBar && !menuBar.__isNative + value: __panel.menuBarArea + restoreMode: Binding.RestoreBinding + } + Qml.Binding { + target: menuBar + property: "__parentWindow" + value: root + restoreMode: Binding.RestoreBinding + } + + Keys.forwardTo: menuBar ? [menuBar.__contentItem, __panel] : [] + + ContentItem { + id: contentArea + anchors.fill: parent + parent: __panel.contentArea + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/BusyIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/BusyIndicator.qml new file mode 100644 index 0000000..6c9972a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/BusyIndicator.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype BusyIndicator + \inqmlmodule QtQuick.Controls + \since 5.2 + \ingroup controls + \brief A busy indicator. + + \image busyindicator.png + + The busy indicator should be used to indicate activity while content is + being loaded or the UI is blocked waiting for a resource to become available. + + The following snippet shows how to use the BusyIndicator: + + \qml + BusyIndicator { + running: image.status === Image.Loading + } + \endqml + + You can create a custom appearance for a Busy Indicator by + assigning a \l {BusyIndicatorStyle}. + */ +Control { + id: indicator + + /*! \qmlproperty bool BusyIndicator::running + + This property holds whether the busy indicator is currently indicating + activity. + + \note The indicator is only visible when this property is set to \c true. + + The default value is \c true. + */ + property bool running: true + + Accessible.role: Accessible.Indicator + Accessible.name: "busy" + + style: Settings.styleComponent(Settings.style, "BusyIndicatorStyle.qml", indicator) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Button.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Button.qml new file mode 100644 index 0000000..c3f2923 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Button.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype Button + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief A push button with a text label. + + \image button.png + + The push button is perhaps the most commonly used widget in any graphical + user interface. Pushing (or clicking) a button commands the computer to + perform some action or answer a question. Common examples of buttons are + OK, Apply, Cancel, Close, Yes, No, and Help buttons. + + \qml + Button { + text: "Button" + } + \endqml + + Button is similar to the QPushButton widget. + + You can create a custom appearance for a Button by + assigning a \l {ButtonStyle}. + */ +BasicButton { + id: button + + /*! This property holds whether the push button is the default button. + Default buttons decide what happens when the user presses enter in a + dialog without giving a button explicit focus. \note This property only + changes the appearance of the button. The expected behavior needs to be + implemented by the user. + + The default value is \c false. + */ + property bool isDefault: false + + /*! Assign a \l Menu to this property to get a pull-down menu button. + + The default value is \c null. + */ + property Menu menu: null + + __effectivePressed: __behavior.effectivePressed || menu && menu.__popupVisible + + activeFocusOnTab: true + + Accessible.name: text + + style: Settings.styleComponent(Settings.style, "ButtonStyle.qml", button) + + Qml.Binding { + target: menu + property: "__minimumWidth" + value: button.__panel.width + restoreMode: Binding.RestoreBinding + } + + Qml.Binding { + target: menu + property: "__visualItem" + value: button + restoreMode: Binding.RestoreBinding + } + + Connections { + target: __behavior + function onEffectivePressedChanged() { + if (!Settings.hasTouchScreen && __behavior.effectivePressed && menu) + popupMenuTimer.start() + } + function onReleased() { + if (Settings.hasTouchScreen && __behavior.containsMouse && menu) + popupMenuTimer.start() + } + } + + Timer { + id: popupMenuTimer + interval: 10 + onTriggered: { + __behavior.keyPressed = false + if (Qt.application.layoutDirection === Qt.RightToLeft) + menu.__popup(Qt.rect(button.width, button.height, 0, 0), 0) + else + menu.__popup(Qt.rect(0, button.height, 0, 0), 0) + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Calendar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Calendar.qml new file mode 100644 index 0000000..bf3d673 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Calendar.qml @@ -0,0 +1,456 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.9 +import QtQuick.Controls 1.5 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype Calendar + \inqmlmodule QtQuick.Controls + \since 5.3 + \ingroup controls + \brief Provides a way to select dates from a calendar. + + \image calendar.png + + Calendar allows selection of dates from a grid of days, similar to + QCalendarWidget. + + The dates on the calendar can be selected with the mouse, or navigated + with the keyboard. + + The selected date can be set through \l selectedDate. + A minimum and maximum date can be set through \l minimumDate and + \l maximumDate. The earliest minimum date that can be set is 1 January, 1 + AD. The latest maximum date that can be set is 25 October, 275759 AD. + + \code + Calendar { + minimumDate: new Date(2017, 0, 1) + maximumDate: new Date(2018, 0, 1) + } + \endcode + + The selected date is displayed using the format in the application's + default locale. + + Week numbers can be displayed by setting the weekNumbersVisible property to + \c true. + + \qml + Calendar { + weekNumbersVisible: true + } + \endqml + + You can create a custom appearance for Calendar by assigning a + \l {CalendarStyle}. +*/ + +Control { + id: calendar + + /*! + \qmlproperty date Calendar::selectedDate + + The date that has been selected by the user. + + This property is subject to the following validation: + + \list + \li If selectedDate is outside the range of \l minimumDate and + \l maximumDate, it will be clamped to be within that range. + + \li selectedDate will not be changed if \c undefined or some other + invalid value is assigned. + + \li If there are hours, minutes, seconds or milliseconds set, they + will be removed. + \endlist + + The default value is the current date, which is equivalent to: + + \code + new Date() + \endcode + */ + property alias selectedDate: rangedDate.date + + /*! + \qmlproperty date Calendar::minimumDate + + The earliest date that this calendar will accept. + + By default, this property is set to the earliest minimum date + (1 January, 1 AD). + */ + property alias minimumDate: rangedDate.minimumDate + + /*! + \qmlproperty date Calendar::maximumDate + + The latest date that this calendar will accept. + + By default, this property is set to the latest maximum date + (25 October, 275759 AD). + */ + property alias maximumDate: rangedDate.maximumDate + + /*! + This property determines which month in visibleYear is shown on the + calendar. + + The month is from \c 0 to \c 11 to be consistent with the JavaScript + Date object. + + \sa visibleYear + */ + property int visibleMonth: selectedDate.getMonth() + + /*! + This property determines which year is shown on the + calendar. + + \sa visibleMonth + */ + property int visibleYear: selectedDate.getFullYear() + + onSelectedDateChanged: { + // When the selected date changes, the view should move back to that date. + visibleMonth = selectedDate.getMonth(); + visibleYear = selectedDate.getFullYear(); + } + + RangedDate { + id: rangedDate + date: new Date() + minimumDate: CalendarUtils.minimumCalendarDate + maximumDate: CalendarUtils.maximumCalendarDate + } + + /*! + This property determines the visibility of the frame + surrounding the calendar. + + The default value is \c true. + */ + property bool frameVisible: true + + /*! + This property determines the visibility of week numbers. + + The default value is \c false. + */ + property bool weekNumbersVisible: false + + /*! + This property determines the visibility of the navigation bar. + \since QtQuick.Controls 1.3 + + The default value is \c true. + */ + property bool navigationBarVisible: true + + /*! + \qmlproperty enum Calendar::dayOfWeekFormat + + The format in which the days of the week (in the header) are displayed. + + \c Locale.ShortFormat is the default and recommended format, as + \c Locale.NarrowFormat may not be fully supported by each locale (see + \l {Locale String Format Types}) and + \c Locale.LongFormat may not fit within the header cells. + */ + property int dayOfWeekFormat: Locale.ShortFormat + + /*! + \qmlproperty object Calendar::locale + \since QtQuick.Controls 1.6 + + This property controls the locale that this calendar uses to display + itself. + + The locale affects how dates and day names are localized, as well as + which day is considered the first in a week. + + The following example sets an Australian locale: + + \code + locale: Qt.locale("en_AU") + \endcode + + The default value is equivalent to \c Qt.locale(). + */ + property var locale: Qt.locale() + + // left for compatibility reasons; can be removed in next minor version/Qt 6 + property alias __locale: calendar.locale + + /*! + \internal + + This property holds the model that will be used by the Calendar to + populate the dates available to the user. + */ + property CalendarModel __model: CalendarModel { + locale: calendar.locale + + // TODO: don't set the hour when QTBUG-56787 is fixed + visibleDate: new Date(visibleYear, visibleMonth, 1, 12) + } + + style: Settings.styleComponent(Settings.style, "CalendarStyle.qml", calendar) + + /*! + \qmlsignal Calendar::hovered(date date) + + Emitted when the mouse hovers over a valid date in the calendar. + + \e date is the date that was hovered over. + + The corresponding handler is \c onHovered. + */ + signal hovered(date date) + + /*! + \qmlsignal Calendar::pressed(date date) + + Emitted when the mouse is pressed on a valid date in the calendar. + + This is also emitted when dragging the mouse to another date while it is pressed. + + \e date is the date that the mouse was pressed on. + + The corresponding handler is \c onPressed. + */ + signal pressed(date date) + + /*! + \qmlsignal Calendar::released(date date) + + Emitted when the mouse is released over a valid date in the calendar. + + \e date is the date that the mouse was released over. + + The corresponding handler is \c onReleased. + */ + signal released(date date) + + /*! + \qmlsignal Calendar::clicked(date date) + + Emitted when the mouse is clicked on a valid date in the calendar. + + \e date is the date that the mouse was clicked on. + + The corresponding handler is \c onClicked. + */ + signal clicked(date date) + + /*! + \qmlsignal Calendar::doubleClicked(date date) + + Emitted when the mouse is double-clicked on a valid date in the calendar. + + \e date is the date that the mouse was double-clicked on. + + The corresponding handler is \c onDoubleClicked. + */ + signal doubleClicked(date date) + + /*! + \qmlsignal Calendar::pressAndHold(date date) + \since QtQuick.Controls 1.3 + + Emitted when the mouse is pressed and held on a valid date in the calendar. + + \e date is the date that the mouse was pressed on. + + The corresponding handler is \c onPressAndHold. + */ + signal pressAndHold(date date) + + /*! + \qmlmethod void Calendar::showPreviousMonth() + Sets visibleMonth to the previous month. + */ + function showPreviousMonth() { + if (visibleMonth === 0) { + visibleMonth = CalendarUtils.monthsInAYear - 1; + --visibleYear; + } else { + --visibleMonth; + } + } + + /*! + \qmlmethod void Calendar::showNextMonth() + Sets visibleMonth to the next month. + */ + function showNextMonth() { + if (visibleMonth === CalendarUtils.monthsInAYear - 1) { + visibleMonth = 0; + ++visibleYear; + } else { + ++visibleMonth; + } + } + + /*! + \qmlmethod void Calendar::showPreviousYear() + Sets visibleYear to the previous year. + */ + function showPreviousYear() { + if (visibleYear - 1 >= minimumDate.getFullYear()) { + --visibleYear; + } + } + + /*! + \qmlmethod void Calendar::showNextYear() + Sets visibleYear to the next year. + */ + function showNextYear() { + if (visibleYear + 1 <= maximumDate.getFullYear()) { + ++visibleYear; + } + } + + /*! + Selects the month before the current month in \l selectedDate. + */ + function __selectPreviousMonth() { + calendar.selectedDate = CalendarUtils.setMonth(calendar.selectedDate, calendar.selectedDate.getMonth() - 1); + } + + /*! + Selects the month after the current month in \l selectedDate. + */ + function __selectNextMonth() { + calendar.selectedDate = CalendarUtils.setMonth(calendar.selectedDate, calendar.selectedDate.getMonth() + 1); + } + + /*! + Selects the week before the current week in \l selectedDate. + */ + function __selectPreviousWeek() { + var newDate = new Date(calendar.selectedDate); + newDate.setDate(newDate.getDate() - CalendarUtils.daysInAWeek); + calendar.selectedDate = newDate; + } + + /*! + Selects the week after the current week in \l selectedDate. + */ + function __selectNextWeek() { + var newDate = new Date(calendar.selectedDate); + newDate.setDate(newDate.getDate() + CalendarUtils.daysInAWeek); + calendar.selectedDate = newDate; + } + + /*! + Selects the first day of the current month in \l selectedDate. + */ + function __selectFirstDayOfMonth() { + var newDate = new Date(calendar.selectedDate); + newDate.setDate(1); + calendar.selectedDate = newDate; + } + + /*! + Selects the last day of the current month in \l selectedDate. + */ + function __selectLastDayOfMonth() { + var newDate = new Date(calendar.selectedDate); + newDate.setDate(CalendarUtils.daysInMonth(newDate)); + calendar.selectedDate = newDate; + } + + /*! + Selects the day before the current day in \l selectedDate. + */ + function __selectPreviousDay() { + var newDate = new Date(calendar.selectedDate); + newDate.setDate(newDate.getDate() - 1); + calendar.selectedDate = newDate; + } + + /*! + Selects the day after the current day in \l selectedDate. + */ + function __selectNextDay() { + var newDate = new Date(calendar.selectedDate); + newDate.setDate(newDate.getDate() + 1); + calendar.selectedDate = newDate; + } + + Keys.onLeftPressed: { + calendar.__selectPreviousDay(); + } + + Keys.onUpPressed: { + calendar.__selectPreviousWeek(); + } + + Keys.onDownPressed: { + calendar.__selectNextWeek(); + } + + Keys.onRightPressed: { + calendar.__selectNextDay(); + } + + Keys.onPressed: { + if (event.key === Qt.Key_Home) { + calendar.__selectFirstDayOfMonth(); + event.accepted = true; + } else if (event.key === Qt.Key_End) { + calendar.__selectLastDayOfMonth(); + event.accepted = true; + } else if (event.key === Qt.Key_PageUp) { + calendar.__selectPreviousMonth(); + event.accepted = true; + } else if (event.key === Qt.Key_PageDown) { + calendar.__selectNextMonth(); + event.accepted = true; + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/CheckBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/CheckBox.qml new file mode 100644 index 0000000..d244816 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/CheckBox.qml @@ -0,0 +1,197 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype CheckBox + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief A checkbox with a text label. + + \image checkbox.png + + A CheckBox is an option button that can be toggled on (checked) or off + (unchecked). Checkboxes are typically used to represent features in an + application that can be enabled or disabled without affecting others. + + The state of the checkbox can be set with the \l {AbstractCheckable::checked}{checked} property. + + In addition to the checked and unchecked states, there is a third state: + partially checked. This state indicates that the + regular checked/unchecked state can not be determined; generally because of + other states that affect the checkbox. This state is useful when several + child nodes are selected in a treeview, for example. + + The partially checked state can be made available to the user by setting + \l partiallyCheckedEnabled to \c true, or set directly by setting + \l checkedState to \c Qt.PartiallyChecked. \l checkedState behaves + identically to \l {AbstractCheckable::checked}{checked} when \l partiallyCheckedEnabled + is \c false; setting one will appropriately set the other. + + The label is shown next to the checkbox, and you can set the label text using its + \l {AbstractCheckable::text}{text} property. + + \qml + Column { + CheckBox { + text: qsTr("Breakfast") + checked: true + } + CheckBox { + text: qsTr("Lunch") + } + CheckBox { + text: qsTr("Dinner") + checked: true + } + } + \endqml + + Whenever a CheckBox is clicked, it emits the \l {AbstractCheckable::clicked}{clicked()} signal. + + You can create a custom appearance for a CheckBox by + assigning a \l {CheckBoxStyle}. +*/ + +AbstractCheckable { + id: checkBox + + /*! + \qmlproperty enumeration CheckBox::checkedState + + This property indicates the current checked state of the checkbox. + + Possible values: + \c Qt.UnChecked - The checkbox is not checked (default). + \c Qt.Checked - The checkbox is checked. + \c Qt.PartiallyChecked - The checkbox is in a partially checked (or + "mixed") state. + + The \l {AbstractCheckable::checked}{checked} property also determines whether + this property is \c Qt.Checked or \c Qt.UnChecked, and vice versa. + */ + property int checkedState: checked ? Qt.Checked : Qt.Unchecked + + /*! + This property determines whether the \c Qt.PartiallyChecked state is + available. + + A checkbox may be in a partially checked state when the regular checked + state can not be determined. + + Setting \l checkedState to \c Qt.PartiallyChecked will implicitly set + this property to \c true. + + If this property is \c true, \l {AbstractCheckable::checked}{checked} will be \c false. + + By default, this property is \c false. + */ + property bool partiallyCheckedEnabled: false + + /*! + \internal + True if onCheckedChanged should be ignored because we were reacting + to onCheckedStateChanged. + */ + property bool __ignoreChecked: false + + /*! + \internal + True if onCheckedStateChanged should be ignored because we were reacting + to onCheckedChanged. + */ + property bool __ignoreCheckedState: false + + style: Settings.styleComponent(Settings.style, "CheckBoxStyle.qml", checkBox) + + activeFocusOnTab: true + + Accessible.role: Accessible.CheckBox + Accessible.name: text + + __cycleStatesHandler: __cycleCheckBoxStates + + onCheckedChanged: { + if (!__ignoreChecked) { + __ignoreCheckedState = true; + checkedState = checked ? Qt.Checked : Qt.Unchecked; + __ignoreCheckedState = false; + } + } + + onCheckedStateChanged: { + __ignoreChecked = true; + if (checkedState === Qt.PartiallyChecked) { + partiallyCheckedEnabled = true; + checked = false; + } else if (!__ignoreCheckedState) { + checked = checkedState === Qt.Checked; + } + __ignoreChecked = false; + } + + onPartiallyCheckedEnabledChanged: { + if (exclusiveGroup && partiallyCheckedEnabled) { + console.warn("Cannot have partially checked boxes in an ExclusiveGroup."); + } + } + + onExclusiveGroupChanged: { + if (exclusiveGroup && partiallyCheckedEnabled) { + console.warn("Cannot have partially checked boxes in an ExclusiveGroup."); + } + } + + /*! \internal */ + function __cycleCheckBoxStates() { + if (!partiallyCheckedEnabled) { + checked = !checked; + } else { + switch (checkedState) { + case Qt.Unchecked: checkedState = Qt.Checked; break; + case Qt.Checked: checkedState = Qt.PartiallyChecked; break; + case Qt.PartiallyChecked: checkedState = Qt.Unchecked; break; + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ComboBox.qml new file mode 100644 index 0000000..b01cfe1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ComboBox.qml @@ -0,0 +1,717 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ComboBox + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief Provides a drop-down list functionality. + + \image combobox.png + + Add items to the ComboBox by assigning it a ListModel, or a list of strings + to the \l model property. + + \qml + ComboBox { + width: 200 + model: [ "Banana", "Apple", "Coconut" ] + } + \endqml + + In this example we are demonstrating how to use a ListModel with a combo box. + + \qml + ComboBox { + currentIndex: 2 + model: ListModel { + id: cbItems + ListElement { text: "Banana"; color: "Yellow" } + ListElement { text: "Apple"; color: "Green" } + ListElement { text: "Coconut"; color: "Brown" } + } + width: 200 + onCurrentIndexChanged: console.debug(cbItems.get(currentIndex).text + ", " + cbItems.get(currentIndex).color) + } + \endqml + + You can make a combo box editable by setting the \l editable property. An editable combo box will + autocomplete its text based on what is available in the model. + + In the next example we demonstrate how you can append content to an editable combo box by + reacting to the \l accepted signal. Note that you have to explicitly prevent duplicates. + + \qml + ComboBox { + editable: true + model: ListModel { + id: model + ListElement { text: "Banana"; color: "Yellow" } + ListElement { text: "Apple"; color: "Green" } + ListElement { text: "Coconut"; color: "Brown" } + } + onAccepted: { + if (find(currentText) === -1) { + model.append({text: editText}) + currentIndex = find(editText) + } + } + } + \endqml + + + You can create a custom appearance for a ComboBox by + assigning a \l {ComboBoxStyle}. +*/ + +Control { + id: comboBox + + /*! \qmlproperty model ComboBox::model + The model to populate the ComboBox from. + + Changing the model after initialization will reset \l currentIndex to \c 0. + */ + property alias model: popupItems.model + + /*! The model role used for populating the ComboBox. */ + property string textRole: "" + + /*! \qmlproperty int ComboBox::currentIndex + The index of the currently selected item in the ComboBox. + + Setting currentIndex to \c -1 will reset the selection and clear the text + label. If \l editable is \c true, you may also need to manually clear \l editText. + + \sa model + */ + property alias currentIndex: popup.__selectedIndex + + /*! \qmlproperty string ComboBox::currentText + The text of the currently selected item in the ComboBox. + + \note Since \c currentText depends on \c currentIndex, there's no way to ensure \c currentText + will be up to date whenever a \c onCurrentIndexChanged handler is called. + */ + readonly property alias currentText: popup.currentText + + /*! This property holds whether the combo box can be edited by the user. + The default value is \c false. + \since QtQuick.Controls 1.1 + */ + property bool editable: false + + /*! \qmlproperty string ComboBox::editText + \since QtQuick.Controls 1.1 + This property specifies text being manipulated by the user for an editable combo box. + */ + property alias editText: input.text + + /*! \qmlproperty enumeration ComboBox::inputMethodHints + \since QtQuick.Controls 1.5 + Provides hints to the input method about the expected content of the combo box and how it + should operate. + + The value is a bit-wise combination of flags or \c Qt.ImhNone if no hints are set. + + Flags that alter behavior are: + + \list + \li Qt.ImhHiddenText - Characters should be hidden, as is typically used when entering passwords. + \li Qt.ImhSensitiveData - Typed text should not be stored by the active input method + in any persistent storage like predictive user dictionary. + \li Qt.ImhNoAutoUppercase - The input method should not try to automatically switch to upper case + when a sentence ends. + \li Qt.ImhPreferNumbers - Numbers are preferred (but not required). + \li Qt.ImhPreferUppercase - Upper case letters are preferred (but not required). + \li Qt.ImhPreferLowercase - Lower case letters are preferred (but not required). + \li Qt.ImhNoPredictiveText - Do not use predictive text (i.e. dictionary lookup) while typing. + + \li Qt.ImhDate - The text editor functions as a date field. + \li Qt.ImhTime - The text editor functions as a time field. + \endlist + + Flags that restrict input (exclusive flags) are: + + \list + \li Qt.ImhDigitsOnly - Only digits are allowed. + \li Qt.ImhFormattedNumbersOnly - Only number input is allowed. This includes decimal point and minus sign. + \li Qt.ImhUppercaseOnly - Only upper case letter input is allowed. + \li Qt.ImhLowercaseOnly - Only lower case letter input is allowed. + \li Qt.ImhDialableCharactersOnly - Only characters suitable for phone dialing are allowed. + \li Qt.ImhEmailCharactersOnly - Only characters suitable for email addresses are allowed. + \li Qt.ImhUrlCharactersOnly - Only characters suitable for URLs are allowed. + \endlist + + Masks: + + \list + \li Qt.ImhExclusiveInputMask - This mask yields nonzero if any of the exclusive flags are used. + \endlist + */ + property alias inputMethodHints: input.inputMethodHints + + /*! This property specifies whether the combobox should gain active focus when pressed. + The default value is \c false. */ + property bool activeFocusOnPress: false + + /*! \qmlproperty bool ComboBox::pressed + + This property holds whether the button is being pressed. */ + readonly property bool pressed: mouseArea.effectivePressed || popup.__popupVisible + + /*! \qmlproperty bool ComboBox::hovered + + This property indicates whether the control is being hovered. + */ + readonly property bool hovered: mouseArea.containsMouse || input.containsMouse + + /*! \qmlproperty int ComboBox::count + \since QtQuick.Controls 1.1 + This property holds the number of items in the combo box. + */ + readonly property alias count: popupItems.count + + /*! \qmlmethod string ComboBox::textAt(int index) + Returns the text for a given \a index. + If an invalid index is provided, \c null is returned + \since QtQuick.Controls 1.1 + */ + function textAt (index) { + if (index >= count || index < 0) + return null; + return popupItems.objectAt(index).text; + } + + /*! \qmlmethod int ComboBox::find(string text) + Finds and returns the index of a given \a text + If no match is found, \c -1 is returned. The search is case sensitive. + \since QtQuick.Controls 1.1 + */ + function find (text) { + return input.find(text, Qt.MatchExactly) + } + + /*! + \qmlproperty Validator ComboBox::validator + \since QtQuick.Controls 1.1 + + Allows you to set a text validator for an editable ComboBox. + When a validator is set, + the text field will only accept input which leaves the text property in + an intermediate state. The accepted signal will only be sent + if the text is in an acceptable state when enter is pressed. + + Currently supported validators are \l[QtQuick]{IntValidator}, + \l[QtQuick]{DoubleValidator}, and \l[QtQuick]{RegExpValidator}. An + example of using validators is shown below, which allows input of + integers between 11 and 31 into the text field: + + \note This property is only applied when \l editable is \c true + + \qml + import QtQuick 2.2 + import QtQuick.Controls 1.2 + + ComboBox { + editable: true + model: 10 + validator: IntValidator {bottom: 0; top: 10;} + focus: true + } + \endqml + + \sa acceptableInput, accepted, editable + */ + property alias validator: input.validator + + /*! + \since QtQuick.Controls 1.3 + + This property contains the edit \l Menu for working + with text selection. Set it to \c null if no menu + is wanted. + + \note The menu is only in use when \l editable is \c true + */ + property Component menu: input.editMenu.defaultMenu + + /*! + \qmlproperty bool ComboBox::acceptableInput + \since QtQuick.Controls 1.1 + + Returns \c true if the combo box contains acceptable + text in the editable text field. + + If a validator was set, this property will return \c + true if the current text satisfies the validator or mask as + a final string (not as an intermediate string). + + \sa validator, accepted + + */ + readonly property alias acceptableInput: input.acceptableInput + + /*! + \qmlproperty bool ComboBox::selectByMouse + \since QtQuick.Controls 1.3 + + This property determines if the user can select the text in + the editable text field with the mouse. + + The default value is \c true. + */ + property bool selectByMouse: true + + /*! + \qmlproperty bool ComboBox::inputMethodComposing + \since QtQuick.Controls 1.3 + + This property holds whether an editable ComboBox has partial text input from an input method. + + While it is composing an input method may rely on mouse or key events from the ComboBox + to edit or commit the partial text. This property can be used to determine when to disable + events handlers that may interfere with the correct operation of an input method. + */ + readonly property bool inputMethodComposing: !!input.inputMethodComposing + + /*! + \qmlsignal ComboBox::accepted() + \since QtQuick.Controls 1.1 + + This signal is emitted when the Return or Enter key is pressed on an + \l editable combo box. If the confirmed string is not currently in the model, + the currentIndex will be set to -1 and the \l currentText will be updated + accordingly. + + \note If there is a \l validator set on the combobox, + the signal will only be emitted if the input is in an acceptable state. + + The corresponding handler is \c onAccepted. + */ + signal accepted + + /*! + \qmlsignal ComboBox::activated(int index) + \since QtQuick.Controls 1.1 + + This signal is similar to currentIndex changed, but will only + be emitted if the combo box index was changed by the user, not + when set programmatically. + + \e index is the activated model index, or \c -1 if a new string is + accepted. + + The corresponding handler is \c onActivated. + */ + signal activated(int index) + + /*! + \qmlmethod void ComboBox::selectAll() + \since QtQuick.Controls 1.1 + + Causes all \l editText to be selected. + */ + function selectAll() { + input.selectAll() + } + + /*! \internal */ + function __selectPrevItem() { + input.blockUpdate = true + if (currentIndex > 0) { + currentIndex--; + input.text = popup.currentText; + activated(currentIndex); + } + input.blockUpdate = false; + } + + /*! \internal */ + function __selectNextItem() { + input.blockUpdate = true; + if (currentIndex < popupItems.count - 1) { + currentIndex++; + input.text = popup.currentText; + activated(currentIndex); + } + input.blockUpdate = false; + } + + /*! \internal */ + property var __popup: popup + + style: Settings.styleComponent(Settings.style, "ComboBoxStyle.qml", comboBox) + + activeFocusOnTab: true + + Accessible.name: editable ? editText : currentText + Accessible.role: Accessible.ComboBox + Accessible.editable: editable + + MouseArea { + id: mouseArea + property bool overridePressed: false + readonly property bool effectivePressed: (pressed || overridePressed) && containsMouse + anchors.fill: parent + hoverEnabled: Settings.hoverEnabled + onPressed: { + if (comboBox.activeFocusOnPress) + forceActiveFocus() + if (!Settings.hasTouchScreen) + popup.toggleShow() + else + overridePressed = true + } + onCanceled: overridePressed = false + onClicked: { + if (Settings.hasTouchScreen) + popup.toggleShow() + overridePressed = false + } + onWheel: { + if (wheel.angleDelta.y > 0) { + __selectPrevItem(); + } else if (wheel.angleDelta.y < 0){ + __selectNextItem(); + } + } + } + + Component.onCompleted: { + if (currentIndex === -1) + currentIndex = 0 + + popup.ready = true + popup.resolveTextValue(textRole) + } + + Keys.onPressed: { + // Perform one-character based lookup for non-editable combo box + if (!editable && event.text.length > 0) { + var index = input.find(event.text, Qt.MatchStartsWith); + if (index >= 0 && index !== currentIndex) { + currentIndex = index; + activated(currentIndex); + } + } + } + + TextInputWithHandles { + id: input + + visible: editable + enabled: editable + focus: true + clip: contentWidth > width + + control: comboBox + cursorHandle: __style ? __style.__cursorHandle : undefined + selectionHandle: __style ? __style.__selectionHandle : undefined + + anchors.fill: parent + anchors.leftMargin: __style ? __style.padding.left : 0 + anchors.topMargin: __style ? __style.padding.top : 0 + anchors.rightMargin: __style ? __panel.dropDownButtonWidth + __style.padding.right : 0 + anchors.bottomMargin: __style ? __style.padding.bottom: 0 + + verticalAlignment: Text.AlignVCenter + + font: __panel && __panel.font !== undefined ? __panel.font : TextSingleton.font + renderType: __style ? __style.renderType : Text.NativeRendering + color: __panel ? __panel.textColor : "black" + selectionColor: __panel ? __panel.selectionColor : "blue" + selectedTextColor: __panel ? __panel.selectedTextColor : "white" + onAccepted: { + var idx = input.find(editText, Qt.MatchFixedString) + if (idx > -1) { + editTextMatches = true; + currentIndex = idx; + editText = textAt(idx); + } else { + editTextMatches = false; + currentIndex = -1; + popup.currentText = editText; + } + comboBox.accepted(); + } + + property bool blockUpdate: false + property string prevText + property bool editTextMatches: true + + function find (text, searchType) { + for (var i = 0 ; i < popupItems.count ; ++i) { + var currentString = popupItems.objectAt(i).text + if (searchType === Qt.MatchExactly) { + if (text === currentString) + return i; + } else if (searchType === Qt.CaseSensitive) { + if (currentString.indexOf(text) === 0) + return i; + } else if (searchType === Qt.MatchFixedString) { + if (currentString.toLowerCase().indexOf(text.toLowerCase()) === 0 + && currentString.length === text.length) + return i; + } else if (currentString.toLowerCase().indexOf(text.toLowerCase()) === 0) { + return i + } + } + return -1; + } + + // Finds first entry and shortest entry. Used by editable combo + function tryComplete (inputText) { + var candidate = ""; + var shortestString = ""; + for (var i = 0 ; i < popupItems.count ; ++i) { + var currentString = popupItems.objectAt(i).text; + + if (currentString.toLowerCase().indexOf(inputText.toLowerCase()) === 0) { + if (candidate.length) { // Find smallest possible match + var cmp = 0; + + // We try to complete the shortest string that matches our search + if (currentString.length < candidate.length) + candidate = currentString + + while (cmp < Math.min(currentString.length, shortestString.length) + && shortestString[cmp].toLowerCase() === currentString[cmp].toLowerCase()) + cmp++; + shortestString = shortestString.substring(0, cmp); + } else { // First match, select as current index and find other matches + candidate = currentString; + shortestString = currentString; + } + } + } + + if (candidate.length) + return inputText + candidate.substring(inputText.length, candidate.length); + return inputText; + } + + property bool allowComplete: false + Keys.forwardTo: comboBox + Keys.onPressed: allowComplete = (event.key !== Qt.Key_Backspace && event.key !== Qt.Key_Delete); + + onTextChanged: { + if (editable && !blockUpdate && allowComplete && text.length > 0) { + var completed = input.tryComplete(text) + if (completed.length > text.length) { + var oldtext = input.text; + input.text = completed; + input.select(text.length, oldtext.length); + } + } + prevText = text + } + } + + Qml.Binding { + target: input + property: "text" + value: popup.currentText + when: input.editTextMatches + restoreMode: Binding.RestoreBinding + } + + onTextRoleChanged: popup.resolveTextValue(textRole) + + ExclusiveGroup { id: eg } + + Menu { + id: popup + objectName: "popup" + + style: isPopup ? __style.__popupStyle : __style.__dropDownStyle + + property string currentText: selectedText + onSelectedTextChanged: popup.currentText = selectedText + + property string selectedText + property int triggeredIndex: -1 + on__SelectedIndexChanged: { + if (__selectedIndex === -1) + popup.currentText = "" + else + updateSelectedText() + if (triggeredIndex >= 0 && triggeredIndex == __selectedIndex) { + activated(currentIndex) + triggeredIndex = -1 + } + } + property string textRole: "" + + property bool ready: false + property bool isPopup: !editable && !!__panel && __panel.popup + + property int y: isPopup ? (comboBox.__panel.height - comboBox.__panel.implicitHeight) / 2.0 : comboBox.__panel.height + __minimumWidth: comboBox.width + __visualItem: comboBox + + property bool modelIsArray: false + + Instantiator { + id: popupItems + active: false + + property bool updatingModel: false + onModelChanged: { + popup.modelIsArray = !!model ? model.constructor === Array : false + if (active) { + if (updatingModel && popup.__selectedIndex === 0) { + // We still want to update the currentText + popup.updateSelectedText() + } else { + updatingModel = true + popup.__selectedIndex = 0 + } + } + popup.resolveTextValue(comboBox.textRole) + } + + MenuItem { + text: popup.textRole === '' ? + modelData : + ((popup.modelIsArray ? modelData[popup.textRole] : model[popup.textRole]) || '') + onTriggered: { + popup.triggeredIndex = index + comboBox.editText = text + } + onTextChanged: if (index === currentIndex) popup.updateSelectedText(); + checkable: true + exclusiveGroup: eg + } + onObjectAdded: { + popup.insertItem(index, object) + if (!updatingModel && index === popup.__selectedIndex) + popup.selectedText = object["text"] + } + onObjectRemoved: popup.removeItem(object) + + } + + function resolveTextValue(initialTextRole) { + if (!ready || !model) { + popupItems.active = false + return; + } + + var get = model['get']; + if (!get && popup.modelIsArray && !!model[0]) { + if (model[0].constructor !== String && model[0].constructor !== Number) + get = function(i) { return model[i]; } + } + + var modelMayHaveRoles = get !== undefined + textRole = initialTextRole + if (textRole === "" && modelMayHaveRoles && get(0)) { + // No text role set, check whether model has a suitable role + // If 'text' is found, or there's only one role, pick that. + var listElement = get(0) + var roleName = "" + var roleCount = 0 + for (var role in listElement) { + if (listElement[role].constructor === Function) + continue; + if (role === "text") { + roleName = role + break + } else if (!roleName) { + roleName = role + } + ++roleCount + } + if (roleCount > 1 && roleName !== "text") { + console.warn("No suitable 'textRole' found for ComboBox.") + } else { + textRole = roleName + } + } + + if (!popupItems.active) + popupItems.active = true + else + updateSelectedText() + } + + function toggleShow() { + if (popup.__popupVisible) { + popup.__dismissAndDestroy() + } else { + if (items[__selectedIndex]) + items[__selectedIndex].checked = true + __currentIndex = comboBox.currentIndex + if (Qt.application.layoutDirection === Qt.RightToLeft) + __popup(Qt.rect(comboBox.width, y, 0, 0), isPopup ? __selectedIndex : 0) + else + __popup(Qt.rect(0, y, 0, 0), isPopup ? __selectedIndex : 0) + } + } + + function updateSelectedText() { + var selectedItem; + if (__selectedIndex !== -1 && (selectedItem = items[__selectedIndex])) { + input.editTextMatches = true + selectedText = Qt.binding(function () { return selectedItem.text }) + if (currentText !== selectedText) // __selectedIndex went form -1 to 0 + selectedTextChanged() + } + } + } + + // The key bindings below will only be in use when popup is + // not visible. Otherwise, native popup key handling will take place: + Keys.onSpacePressed: { + if (!editable) + popup.toggleShow() + else + event.accepted = false + } + + Keys.onUpPressed: __selectPrevItem() + Keys.onDownPressed: __selectNextItem() +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/GroupBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/GroupBox.qml new file mode 100644 index 0000000..0a414ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/GroupBox.qml @@ -0,0 +1,232 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Layouts 1.0 + +/*! + \qmltype GroupBox + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief GroupBox provides a group box frame with a title. + + \image groupbox.png + + A group box provides a frame, a title on top and displays various other controls inside itself. Group boxes can also be checkable. + + Child controls in checkable group boxes are enabled or disabled depending on whether or not the group box is checked. + + You can minimize the space consumption of a group box by enabling the flat property. + In most styles, enabling this property results in the removal of the left, right and bottom edges of the frame. + + To add content to a group box, you can reparent it to its contentItem property. + + The implicit size of the GroupBox is calculated based on the size of its content. If you want to anchor + items inside the group box, you must specify an explicit width and height on the GroupBox itself. + + The following example shows how we use a GroupBox: + + \qml + GroupBox { + title: "Joining for?" + + Column { + spacing: 10 + + CheckBox { + text: "Breakfast" + checked: true + } + CheckBox { + text: "Lunch" + checked: false + } + CheckBox { + text: "Dinner" + checked: true + } + } + } + \endqml + + \sa CheckBox, RadioButton, Layout + +*/ + +FocusScope { + id: groupbox + + /*! + This property holds the group box title text. + + There is no default title text. + */ + property string title + + /*! + This property holds whether the group box is painted flat or has a frame. + + A group box usually consists of a surrounding frame with a title at the top. + If this property is enabled, only the top part of the frame is drawn in most styles; + otherwise, the whole frame is drawn. + + By default, this property is disabled, so group boxes are not flat unless explicitly specified. + + \note In some styles, flat and non-flat group boxes have similar representations and may not be as + distinguishable as they are in other styles. + */ + property bool flat: false + + /*! + This property holds whether the group box has a checkbox in its title. + + If this property is true, the group box displays its title using a checkbox in place of an ordinary label. + If the checkbox is checked, the group box's children are enabled; otherwise, they are disabled and inaccessible. + + By default, group boxes are not checkable. + */ + property bool checkable: false + + /*! + \qmlproperty bool GroupBox::checked + + This property holds whether the group box is checked. + + If the group box is checkable, it is displayed with a check box. If the check box is checked, the group + box's children are enabled; otherwise, the children are disabled and are inaccessible to the user. + + By default, checkable group boxes are also checked. + */ + property alias checked: check.checked + + + /*! \internal */ + default property alias __content: container.data + + /*! + \qmlproperty Item GroupBox::contentItem + + This property holds the content Item of the group box. + + Items declared as children of a GroupBox are automatically parented to the GroupBox's contentItem. + Items created dynamically need to be explicitly parented to the contentItem: + + \note The implicit size of the GroupBox is calculated based on the size of its content. If you want to anchor + items inside the group box, you must specify an explicit width and height on the GroupBox itself. + */ + readonly property alias contentItem: container + + /*! \internal */ + property Component style: Settings.styleComponent(Settings.style, "GroupBoxStyle.qml", groupbox) + + /*! \internal */ + property alias __checkbox: check + + /*! \internal */ + property alias __style: styleLoader.item + + implicitWidth: Math.max((!anchors.fill ? container.calcWidth() : 0) + loader.leftMargin + loader.rightMargin, + sizeHint.implicitWidth + (checkable ? 24 : 6)) + implicitHeight: (!anchors.fill ? container.calcHeight() : 0) + loader.topMargin + loader.bottomMargin + + Layout.minimumWidth: implicitWidth + Layout.minimumHeight: implicitHeight + + Accessible.role: Accessible.Grouping + Accessible.name: title + + activeFocusOnTab: false + + + data: [ + Loader { + id: loader + anchors.fill: parent + property int topMargin: __style ? __style.padding.top : 0 + property int bottomMargin: __style ? __style.padding.bottom : 0 + property int leftMargin: __style ? __style.padding.left : 0 + property int rightMargin: __style ? __style.padding.right : 0 + sourceComponent: styleLoader.item ? styleLoader.item.panel : null + onLoaded: item.z = -1 + Text { id: sizeHint ; visible: false ; text: title } + Loader { + id: styleLoader + property alias __control: groupbox + sourceComponent: groupbox.style + } + }, + CheckBox { + id: check + objectName: "check" + checked: true + text: groupbox.title + visible: checkable + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + height: loader.topMargin + activeFocusOnTab: groupbox.checkable + style: CheckBoxStyle { panel: Item{} } + }, + Item { + id: container + objectName: "container" + z: 1 + focus: true + anchors.fill: parent + + anchors.topMargin: loader.topMargin + anchors.leftMargin: loader.leftMargin + anchors.rightMargin: loader.rightMargin + anchors.bottomMargin: loader.bottomMargin + enabled: (!groupbox.checkable || groupbox.checked) + + property Item layoutItem: container.children.length === 1 ? container.children[0] : null + function calcWidth () { return (layoutItem ? (layoutItem.implicitWidth || layoutItem.width) + + (layoutItem.anchors.fill ? layoutItem.anchors.leftMargin + + layoutItem.anchors.rightMargin : 0) : container.childrenRect.width) } + function calcHeight () { return (layoutItem ? (layoutItem.implicitHeight || layoutItem.height) + + (layoutItem.anchors.fill ? layoutItem.anchors.topMargin + + layoutItem.anchors.bottomMargin : 0) : container.childrenRect.height) } + }] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Label.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Label.qml new file mode 100644 index 0000000..ea3f27b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Label.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.6 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype Label + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief A text label. + + \image label.png + + In addition to the normal \l Text type, Label follows the font and + color scheme of the system. + Use the \c text property to assign a text to the label. For other properties + check \l Text. + + A simple label looks like this: + \qml + Label { + text: "Hello world" + } + \endqml + + You can use the properties of \l Text to change the appearance + of the text as desired: + \qml + Label { + text: "Hello world" + font.pixelSize: 22 + font.italic: true + color: "steelblue" + } + \endqml + + \sa Text, TextField, TextEdit +*/ + +Text { + /*! + \qmlproperty string Label::text + + The text to display. Use this property to get and set it. + */ + + id: label + color: SystemPaletteSingleton.windowText(enabled) + activeFocusOnTab: false + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + Accessible.name: text + Accessible.role: Accessible.StaticText +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Menu.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Menu.qml new file mode 100644 index 0000000..f91e863 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Menu.qml @@ -0,0 +1,180 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype Menu + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup menus + \ingroup controls + \brief Provides a menu component for use as a context menu, popup menu, or + as part of a menu bar. + + \image menu.png + + \code + Menu { + title: "Edit" + + MenuItem { + text: "Cut" + shortcut: "Ctrl+X" + onTriggered: ... + } + + MenuItem { + text: "Copy" + shortcut: "Ctrl+C" + onTriggered: ... + } + + MenuItem { + text: "Paste" + shortcut: "Ctrl+V" + onTriggered: ... + } + + MenuSeparator { } + + Menu { + title: "More Stuff" + + MenuItem { + text: "Do Nothing" + } + } + } + \endcode + + The main uses for menus: + \list + \li + as a \e top-level menu in a \l MenuBar + \li + as a \e submenu inside another menu + \li + as a standalone or \e context menu + \endlist + + Note that some properties, such as \c enabled, \c text, or \c iconSource, + only make sense in a particular use case of the menu. + + \sa MenuBar, MenuItem, MenuSeparator +*/ + +MenuPrivate { + id: root + + /*! \internal + \omit + Documented in qqquickmenu.cpp. + \endomit + */ + function addMenu(title) { + return root.insertMenu(items.length, title) + } + + /*! \internal + \omit + Documented in qquickmenu.cpp. + \endomit + */ + function insertMenu(index, title) { + if (!__selfComponent) + __selfComponent = Qt.createComponent("Menu.qml", root) + var submenu = __selfComponent.createObject(__selfComponent, { "title": title }) + root.insertItem(index, submenu) + return submenu + } + + /*! \internal */ + property Component __selfComponent: null + + /*! \qmlproperty Component Menu::style + \since QtQuick.Controls.Styles 1.2 + + The style Component for this control. + \sa {MenuStyle} + + */ + property Component style + + Component.onCompleted: { + if (!style) { + __usingDefaultStyle = true + style = Qt.binding(function() { return Settings.styleComponent(Settings.style, "MenuStyle.qml", root) }) + } + } + + /*! \internal */ + property bool __usingDefaultStyle: false + /*! \internal */ + property var __parentContentItem: __parentMenu ? __parentMenu.__contentItem : null + /*! \internal */ + property int __currentIndex: -1 + /*! \internal */ + onAboutToHide: __currentIndex = -1 + on__MenuPopupDestroyed: contentLoader.active = false + onPopupVisibleChanged: { + if (__popupVisible) + contentLoader.active = true + } + + /*! \internal */ + __contentItem: Loader { + id: contentLoader + Component { + id: menuContent + MenuContentItem { + __menu: root + } + } + + sourceComponent: root.__isNative ? null : menuContent + active: false + focus: true + Keys.forwardTo: item ? [item, root.__parentContentItem] : [] + property bool altPressed: root.__parentContentItem ? root.__parentContentItem.altPressed : false + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/MenuBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/MenuBar.qml new file mode 100644 index 0000000..78fd7cc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/MenuBar.qml @@ -0,0 +1,347 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype MenuBar + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup applicationwindow + \ingroup controls + \brief Provides a horizontal menu bar. + + \image menubar.png + + MenuBar can be added to an \l ApplicationWindow, providing menu options + to access additional functionality of the application. + + \code + ApplicationWindow { + ... + menuBar: MenuBar { + Menu { + title: "File" + MenuItem { text: "Open..." } + MenuItem { text: "Close" } + } + + Menu { + title: "Edit" + MenuItem { text: "Cut" } + MenuItem { text: "Copy" } + MenuItem { text: "Paste" } + } + } + } + \endcode + + \sa ApplicationWindow::menuBar +*/ + +MenuBarPrivate { + id: root + + /*! \qmlproperty Component MenuBar::style + \since QtQuick.Controls.Styles 1.2 + + The style Component for this control. + \sa {MenuBarStyle} + + */ + property Component style: Settings.styleComponent(Settings.style, "MenuBarStyle.qml", root) + + /*! \internal */ + property QtObject __style: styleLoader.item + + __isNative: !__style.hasOwnProperty("__isNative") || __style.__isNative + + /*! \internal */ + __contentItem: Loader { + id: topLoader + sourceComponent: __menuBarComponent + active: !root.__isNative + focus: true + Keys.forwardTo: [item] + property real preferredWidth: parent && active ? parent.width : 0 + property bool altPressed: item ? item.__altPressed : false + + Loader { + id: styleLoader + property alias __control: topLoader.item + sourceComponent: root.style + onStatusChanged: { + if (status === Loader.Error) + console.error("Failed to load Style for", root) + } + } + } + + /*! \internal */ + property Component __menuBarComponent: Loader { + id: menuBarLoader + + Accessible.role: Accessible.MenuBar + + onStatusChanged: if (status === Loader.Error) console.error("Failed to load panel for", root) + + visible: status === Loader.Ready + sourceComponent: d.style ? d.style.background : undefined + + width: implicitWidth || root.__contentItem.preferredWidth + height: Math.max(row.height + d.heightPadding, item ? item.implicitHeight : 0) + + Qml.Binding { + // Make sure the styled menu bar is in the background + target: menuBarLoader.item + property: "z" + value: menuMouseArea.z - 1 + restoreMode: Binding.RestoreBinding + } + + QtObject { + id: d + + property Style style: __style + + property int openedMenuIndex: -1 + property bool preselectMenuItem: false + property real heightPadding: style ? style.padding.top + style.padding.bottom : 0 + + property bool altPressed: false + property bool altPressedAgain: false + property var mnemonicsMap: ({}) + + function openMenuAtIndex(index) { + if (openedMenuIndex === index) + return; + + var oldIndex = openedMenuIndex + openedMenuIndex = index + + if (oldIndex !== -1) { + var menu = root.menus[oldIndex] + if (menu.__popupVisible) + menu.__dismissAndDestroy() + } + + if (openedMenuIndex !== -1) { + menu = root.menus[openedMenuIndex] + if (menu.enabled) { + if (menu.__usingDefaultStyle) + menu.style = d.style.menuStyle + + var xPos = row.LayoutMirroring.enabled ? menuItemLoader.width : 0 + menu.__popup(Qt.rect(xPos, menuBarLoader.height - d.heightPadding, 0, 0), 0) + + if (preselectMenuItem) + menu.__currentIndex = 0 + } + } + } + + function dismissActiveFocus(event, reason) { + if (reason) { + altPressedAgain = false + altPressed = false + openMenuAtIndex(-1) + root.__contentItem.parent.forceActiveFocus() + } else { + event.accepted = false + } + } + + function maybeOpenFirstMenu(event) { + if (altPressed && openedMenuIndex === -1) { + preselectMenuItem = true + openMenuAtIndex(0) + } else { + event.accepted = false + } + } + } + property alias __altPressed: d.altPressed // Needed for the menu contents + + focus: true + + Keys.onPressed: { + var action = null + if (event.key === Qt.Key_Alt) { + if (!d.altPressed) + d.altPressed = true + else + d.altPressedAgain = true + } else if (d.altPressed && (action = d.mnemonicsMap[event.text.toUpperCase()])) { + d.preselectMenuItem = true + action.trigger() + event.accepted = true + } + } + + Keys.onReleased: d.dismissActiveFocus(event, d.altPressedAgain && d.openedMenuIndex === -1) + Keys.onEscapePressed: d.dismissActiveFocus(event, d.openedMenuIndex === -1) + + Keys.onUpPressed: d.maybeOpenFirstMenu(event) + Keys.onDownPressed: d.maybeOpenFirstMenu(event) + + Keys.onLeftPressed: { + if (d.openedMenuIndex > 0) { + var idx = d.openedMenuIndex - 1 + while (idx >= 0 && !(root.menus[idx].enabled && root.menus[idx].visible)) + idx-- + if (idx >= 0) { + d.preselectMenuItem = true + d.openMenuAtIndex(idx) + } + } else { + event.accepted = false; + } + } + + Keys.onRightPressed: { + if (d.openedMenuIndex !== -1 && d.openedMenuIndex < root.menus.length - 1) { + var idx = d.openedMenuIndex + 1 + while (idx < root.menus.length && !(root.menus[idx].enabled && root.menus[idx].visible)) + idx++ + if (idx < root.menus.length) { + d.preselectMenuItem = true + d.openMenuAtIndex(idx) + } + } else { + event.accepted = false; + } + } + + Keys.forwardTo: d.openedMenuIndex !== -1 ? [root.menus[d.openedMenuIndex].__contentItem] : [] + + Row { + id: row + x: d.style ? d.style.padding.left : 0 + y: d.style ? d.style.padding.top : 0 + width: parent.width - (d.style ? d.style.padding.left + d.style.padding.right : 0) + LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft + + Repeater { + id: itemsRepeater + model: root.menus + Loader { + id: menuItemLoader + + Accessible.role: Accessible.MenuItem + Accessible.name: StyleHelpers.removeMnemonics(opts.text) + Accessible.onPressAction: d.openMenuAtIndex(opts.index) + + property var styleData: QtObject { + id: opts + readonly property int index: __menuItemIndex + readonly property string text: !!__menuItem && __menuItem.title + readonly property bool enabled: !!__menuItem && __menuItem.enabled + readonly property bool selected: menuMouseArea.hoveredItem === menuItemLoader + readonly property bool open: !!__menuItem && __menuItem.__popupVisible || d.openedMenuIndex === index + readonly property bool underlineMnemonic: d.altPressed + } + + height: Math.max(menuBarLoader.height - d.heightPadding, + menuItemLoader.item ? menuItemLoader.item.implicitHeight : 0) + + readonly property var __menuItem: modelData + readonly property int __menuItemIndex: index + sourceComponent: d.style ? d.style.itemDelegate : null + visible: __menuItem.visible + + Connections { + target: __menuItem + function onAboutToHide() { + if (d.openedMenuIndex === index) { + d.openMenuAtIndex(-1) + menuMouseArea.hoveredItem = null + } + } + } + + Connections { + target: __menuItem.__action + function onTriggered() { d.openMenuAtIndex(__menuItemIndex) } + } + + Component.onCompleted: { + __menuItem.__visualItem = menuItemLoader + + var title = __menuItem.title + var ampersandPos = title.indexOf("&") + if (ampersandPos !== -1) + d.mnemonicsMap[title[ampersandPos + 1].toUpperCase()] = __menuItem.__action + } + } + } + } + + MouseArea { + id: menuMouseArea + anchors.fill: parent + hoverEnabled: Settings.hoverEnabled + + onPositionChanged: updateCurrentItem(mouse) + onPressed: updateCurrentItem(mouse) + onExited: hoveredItem = null + + property Item currentItem: null + property Item hoveredItem: null + function updateCurrentItem(mouse) { + var pos = mapToItem(row, mouse.x, mouse.y) + if (pressed || !hoveredItem + || !hoveredItem.contains(Qt.point(pos.x - currentItem.x, pos.y - currentItem.y))) { + hoveredItem = row.childAt(pos.x, pos.y) + if (!hoveredItem) + return false; + currentItem = hoveredItem + if (pressed || d.openedMenuIndex !== -1) { + d.preselectMenuItem = false + d.openMenuAtIndex(currentItem.__menuItemIndex) + } + } + return true; + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/AbstractCheckable.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/AbstractCheckable.qml new file mode 100644 index 0000000..e96f050 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/AbstractCheckable.qml @@ -0,0 +1,178 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Window 2.2 + +/*! + \qmltype AbstractCheckable + \inqmlmodule QtQuick.Controls + \brief An abstract representation of a checkable control with a label + \qmlabstract + \internal + + A checkable control is one that has two states: checked (on) and + unchecked (off). AbstractCheckable encapsulates the basic behavior and + states that are required by checkable controls. + + Examples of checkable controls are RadioButton and + CheckBox. CheckBox extends AbstractCheckable's behavior by adding a third + state: partially checked. +*/ + +Control { + id: abstractCheckable + + /*! + Emitted whenever the control is clicked. + */ + signal clicked + + /*! + \qmlproperty bool AbstractCheckable::pressed + + This property is \c true if the control is being pressed. + Set this property to manually invoke a mouse click. + */ + property alias pressed: mouseArea.effectivePressed + + /*! \qmlproperty bool AbstractCheckcable::hovered + + This property indicates whether the control is being hovered. + */ + readonly property alias hovered: mouseArea.containsMouse + + /*! + This property is \c true if the control is checked. + */ + property bool checked: false + Accessible.checked: checked + Accessible.checkable: true + + /*! + This property is \c true if the control takes the focus when it is + pressed; \l{QQuickItem::forceActiveFocus()}{forceActiveFocus()} will be + called on the control. + */ + property bool activeFocusOnPress: false + + /*! + This property stores the ExclusiveGroup that the control belongs to. + */ + property ExclusiveGroup exclusiveGroup: null + + /*! + This property holds the text that the label should display. + */ + property string text + + /*! + This property holds the button tooltip. + + \since QtQuick.Controls 1.7 + */ + property string tooltip + Accessible.description: tooltip + + /*! \internal */ + property var __cycleStatesHandler: cycleRadioButtonStates + + activeFocusOnTab: true + + MouseArea { + id: mouseArea + focus: true + anchors.fill: parent + hoverEnabled: Settings.hoverEnabled + enabled: !keyPressed + + property bool keyPressed: false + property bool effectivePressed: pressed && containsMouse || keyPressed + + onClicked: abstractCheckable.clicked(); + + onPressed: if (activeFocusOnPress) forceActiveFocus(); + + onExited: Tooltip.hideText() + onCanceled: Tooltip.hideText() + + onReleased: { + if (containsMouse && (!exclusiveGroup || !checked)) + __cycleStatesHandler(); + } + + Timer { + interval: 1000 + running: mouseArea.containsMouse && !pressed && tooltip.length && mouseArea.Window.visibility !== Window.Hidden + onTriggered: Tooltip.showText(mouseArea, Qt.point(mouseArea.mouseX, mouseArea.mouseY), tooltip) + } + } + + /*! \internal */ + onExclusiveGroupChanged: { + if (exclusiveGroup) + exclusiveGroup.bindCheckable(abstractCheckable) + } + + Keys.onPressed: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat && !mouseArea.pressed) + mouseArea.keyPressed = true; + } + + Keys.onReleased: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat && mouseArea.keyPressed) { + mouseArea.keyPressed = false; + if (!exclusiveGroup || !checked) + __cycleStatesHandler(); + clicked(); + } + } + + Action { + // handle mnemonic + text: abstractCheckable.text + onTriggered: { + if (!abstractCheckable.exclusiveGroup || !abstractCheckable.checked) + abstractCheckable.__cycleStatesHandler(); + abstractCheckable.clicked(); + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/BasicButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/BasicButton.qml new file mode 100644 index 0000000..d5c5d28 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/BasicButton.qml @@ -0,0 +1,241 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Window 2.2 + +/*! + \qmltype BasicButton + \internal + \qmlabstract + \inqmlmodule QtQuick.Controls.Private +*/ + +Control { + id: button + + /*! This signal is emitted when the button is clicked. */ + signal clicked + + /*! \qmlproperty bool BasicButton::pressed + + This property holds whether the button is being pressed. */ + readonly property alias pressed: button.__effectivePressed + + /*! \qmlproperty bool BasicButton::hovered + + This property indicates whether the control is being hovered. + */ + readonly property alias hovered: behavior.containsMouse + + /*! This property holds whether the button is checkable. + + The default value is \c false. */ + property bool checkable: false + Accessible.checkable: checkable + + /*! This property holds whether the button is checked. + + Only checkable buttons can be checked. + + The default value is \c false. */ + property bool checked: false + Accessible.checked: checked + + /*! This property holds the ExclusiveGroup that the button belongs to. + + The default value is \c null. */ + property ExclusiveGroup exclusiveGroup: null + + /*! This property holds the associated button action. + + If a button has an action associated, the action defines the + button's properties like checked, text, tooltip etc. + + When an action is set, it's still possible to override the \l text, + \l tooltip, \l iconSource, and \l iconName properties. + + The default value is \c null. */ + property Action action: null + + /*! This property specifies whether the button should gain active focus when pressed. + + The default value is \c false. */ + property bool activeFocusOnPress: false + + /*! This property holds the text shown on the button. If the button has no + text, the \l text property will be an empty string. + + The default value is the empty string. + */ + property string text: action ? action.text : "" + + /*! This property holds the button tooltip. */ + property string tooltip: action ? (action.tooltip || StyleHelpers.removeMnemonics(action.text)) : "" + + /*! This property holds the icon shown on the button. If the button has no + icon, the iconSource property will be an empty string. + + The default value is the empty string. + */ + property url iconSource: action ? action.iconSource : "" + + /*! The image label source as theme name. + When an icon from the platform icon theme is found, this takes + precedence over iconSource. + + \include icons.qdocinc iconName + */ + property string iconName: action ? action.iconName : "" + + /*! \internal */ + property string __position: "only" + /*! \internal */ + readonly property bool __iconOverriden: button.action && (button.action.iconSource !== button.iconSource || button.action.iconName !== button.iconName) + /*! \internal */ + property Action __action: action || ownAction + /*! \internal */ + readonly property Action __iconAction: __iconOverriden ? ownAction : __action + + /*! \internal */ + onExclusiveGroupChanged: { + if (exclusiveGroup) + exclusiveGroup.bindCheckable(button) + } + + Accessible.role: Accessible.Button + Accessible.description: tooltip + + /*! \internal */ + function accessiblePressAction() { + __action.trigger(button) + } + + Action { + id: ownAction + enabled: button.enabled + iconSource: !button.action || __iconOverriden ? button.iconSource : "" + iconName: !button.action || __iconOverriden ? button.iconName : "" + + // let ownAction handle mnemonic if and only if the button does + // not already have an action assigned to avoid ambiguous shortcuts + text: button.action ? "" : button.text + } + + Connections { + target: __action + function onTriggered() { button.clicked() } + } + + activeFocusOnTab: true + + Keys.onPressed: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat && !behavior.pressed) { + behavior.keyPressed = true; + event.accepted = true; + } + } + + onFocusChanged: if (!focus) behavior.keyPressed = false + + Keys.onReleased: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat && behavior.keyPressed) { + behavior.keyPressed = false; + __action.trigger(button) + behavior.toggle() + event.accepted = true; + } + } + + MouseArea { + id: behavior + property bool keyPressed: false + property bool effectivePressed: pressed && containsMouse || keyPressed + + anchors.fill: parent + hoverEnabled: Settings.hoverEnabled + enabled: !keyPressed + + function toggle() { + if (button.checkable && !button.action && !(button.checked && button.exclusiveGroup)) + button.checked = !button.checked + } + + onReleased: { + if (containsMouse) { + toggle() + __action.trigger(button) + } + } + onExited: Tooltip.hideText() + onCanceled: Tooltip.hideText() + onPressed: { + if (activeFocusOnPress) + button.forceActiveFocus() + } + + Timer { + interval: 1000 + running: behavior.containsMouse && !pressed && tooltip.length && behavior.Window.visibility !== Window.Hidden + onTriggered: Tooltip.showText(behavior, Qt.point(behavior.mouseX, behavior.mouseY), tooltip) + } + } + + /*! \internal */ + property var __behavior: behavior + + /*! \internal */ + property bool __effectivePressed: behavior.effectivePressed + + states: [ + State { + name: "boundAction" + when: action !== null + PropertyChanges { + target: button + enabled: action.enabled + checkable: action.checkable + checked: action.checked + } + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/BasicTableView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/BasicTableView.qml new file mode 100644 index 0000000..4f0f9a0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/BasicTableView.qml @@ -0,0 +1,792 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +import QtQml 2.14 as Qml +import QtQuick 2.6 +import QtQuick.Controls 1.5 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.2 +import QtQuick.Window 2.2 + +/*! + \qmltype BasicTableView + \qmlabstract + \inqmlmodule QtQuick.Controls.Private +*/ + +ScrollView { + id: root + + /*! \qmlproperty bool BasicTableView::alternatingRowColors + + This property is set to \c true if the view alternates the row color. + The default value is \c true. + */ + property bool alternatingRowColors: true + + /*! \qmlproperty bool BasicTableView::headerVisible + + This property determines if the header is visible. + The default value is \c true. + */ + property bool headerVisible: true + + /*! \qmlproperty bool BasicTableView::backgroundVisible + + This property determines if the background should be filled or not. + + The default value is \c true. + + \note The rowDelegate is not affected by this property + */ + property alias backgroundVisible: colorRect.visible + + /*! \qmlproperty Component BasicTableView::itemDelegate + \internal + + Documentation differs between TableView and TreeView. + See qtquickcontrols-treeview.qdoc and qtquickcontrols-tableview.qdoc + */ + property Component itemDelegate: __style ? __style.itemDelegate : null + + /*! \qmlproperty Component BasicTableView::rowDelegate + + This property defines a delegate to draw a row. + + In the row delegate you have access to the following special properties: + \list + \li styleData.alternate - true when the row uses the alternate background color + \li styleData.selected - true when the row is currently selected + \li styleData.row - the index of the row + \li styleData.hasActiveFocus - true when the row has focus (since QtQuick.Controls 1.3) + \li styleData.pressed - true when the row is pressed (since QtQuick.Controls 1.3) + \endlist + + \note For performance reasons, created delegates can be recycled + across multiple table rows. This implies that when you make use of implicit + properties such as \c styleData.row or \c model, these values can change + after the delegate has been constructed. This means that you should not assume + that content is fixed when \c Component.onCompleted is called, but instead rely on + bindings to such properties. + */ + property Component rowDelegate: __style ? __style.rowDelegate : null + + /*! \qmlproperty Component BasicTableView::headerDelegate + + This property defines a delegate to draw a header. + + In the header delegate you have access to the following special properties: + \list + \li styleData.value - the value or text for this item + \li styleData.column - the index of the column + \li styleData.pressed - true when the column is being pressed + \li styleData.containsMouse - true when the column is under the mouse + \li styleData.textAlignment - the horizontal text alignment of the column (since QtQuickControls 1.1) + \endlist + */ + property Component headerDelegate: __style ? __style.headerDelegate : null + + /*! \qmlproperty int BasicTableView::sortIndicatorColumn + + Index of the current sort column. + The default value is \c {0}. + */ + property int sortIndicatorColumn + + /*! \qmlproperty bool BasicTableView::sortIndicatorVisible + + This property shows or hides the sort indicator + The default value is \c false. + \note The view itself does not sort the data. + */ + property bool sortIndicatorVisible: false + + /*! \qmlproperty enumeration BasicTableView::sortIndicatorOrder + + This sets the sorting order of the sort indicator + The allowed values are: + \list + \li Qt.AscendingOrder - the default + \li Qt.DescendingOrder + \endlist + */ + property int sortIndicatorOrder: Qt.AscendingOrder + + /*! \qmlproperty Component BasicTableView::contentHeader + This is the content header of the view. + */ + property alias contentHeader: listView.header + + /*! \qmlproperty Component BasicTableView::contentFooter + This is the content footer of the view. + */ + property alias contentFooter: listView.footer + + /*! \qmlproperty int BasicTableView::columnCount + The current number of columns + */ + readonly property alias columnCount: columnModel.count + + /*! \qmlpropertygroup BasicTableView::section + \internal + \qmlproperty string BasicTableView::section.property + \qmlproperty enumeration BasicTableView::section.criteria + \qmlproperty Component BasicTableView::section.delegate + \qmlproperty enumeration BasicTableView::section.labelPositioning + + Moved to the qdoc files to keep the grouped property layout. + See qtquickcontrols-treeview.qdoc and qtquickcontrols-tableview.qdoc + */ + property alias section: listView.section + + /*! + \qmlproperty enumeration BasicTableView::selectionMode + \since QtQuick.Controls 1.1 + + This enum indicates how the view responds to user selections: + + The possible modes are: + + \list + + \li SelectionMode.NoSelection - Items cannot be selected. + + \li SelectionMode.SingleSelection - When the user selects an item, + any already-selected item becomes unselected, and the user cannot + unselect the selected item. (Default) + + \li SelectionMode.MultiSelection - When the user selects an item in the usual way, + the selection status of that item is toggled and the other items are left alone. + + \li SelectionMode.ExtendedSelection - When the user selects an item in the usual way, + the selection is cleared and the new item selected. However, if the user presses the + Ctrl key when clicking on an item, the clicked item gets toggled and all other items + are left untouched. If the user presses the Shift key while clicking + on an item, all items between the current item and the clicked item are selected or unselected, + depending on the state of the clicked item. Multiple items can be selected by dragging the + mouse over them. + + \li SelectionMode.ContiguousSelection - When the user selects an item in the usual way, + the selection is cleared and the new item selected. However, if the user presses the Shift key while + clicking on an item, all items between the current item and the clicked item are selected. + + \endlist + */ + property int selectionMode: SelectionMode.SingleSelection + + /*! + \qmlmethod TableViewColumn BasicTableView::addColumn(object column) + + Adds a \a column and returns the added column. + + The \a column argument can be an instance of TableViewColumn, + or a Component. The component has to contain a TableViewColumn. + Otherwise \c null is returned. + */ + function addColumn(column) { + return insertColumn(columnCount, column) + } + + /*! + \qmlmethod TableViewColumn BasicTableView::insertColumn(int index, object column) + + Inserts a \a column at the given \a index and returns the inserted column. + + The \a column argument can be an instance of TableViewColumn, + or a Component. The component has to contain a TableViewColumn. + Otherwise \c null is returned. + */ + function insertColumn(index, column) { + if (__isTreeView && index === 0 && columnCount > 0) { + console.warn(__viewTypeName + "::insertColumn(): Can't replace column 0") + return null + } + var object = column + if (typeof column['createObject'] === 'function') { + object = column.createObject(root) + } else if (object.__view) { + console.warn(__viewTypeName + "::insertColumn(): you cannot add a column to multiple views") + return null + } + if (index >= 0 && index <= columnCount && object.accessibleRole === Accessible.ColumnHeader) { + object.__view = root + columnModel.insert(index, {columnItem: object}) + if (root.__columns[index] !== object) { + // The new column needs to be put into __columns at the specified index + // so the list needs to be recreated to be correct + var arr = [] + for (var i = 0; i < index; ++i) + arr.push(root.__columns[i]) + arr.push(object) + for (i = index; i < root.__columns.length; ++i) + arr.push(root.__columns[i]) + root.__columns = arr + } + return object + } + + if (object !== column) + object.destroy() + console.warn(__viewTypeName + "::insertColumn(): invalid argument") + return null + } + + /*! + \qmlmethod void BasicTableView::removeColumn(int index) + + Removes and destroys a column at the given \a index. + */ + function removeColumn(index) { + if (index < 0 || index >= columnCount) { + console.warn(__viewTypeName + "::removeColumn(): invalid argument") + return + } + if (__isTreeView && index === 0) { + console.warn(__viewTypeName + "::removeColumn(): Can't remove column 0") + return + } + var column = columnModel.get(index).columnItem + columnModel.remove(index, 1) + column.destroy() + } + + /*! + \qmlmethod void BasicTableView::moveColumn(int from, int to) + + Moves a column \a from index \a to another. + */ + function moveColumn(from, to) { + if (from < 0 || from >= columnCount || to < 0 || to >= columnCount) { + console.warn(__viewTypeName + "::moveColumn(): invalid argument") + return + } + if (__isTreeView && to === 0) { + console.warn(__viewTypeName + "::moveColumn(): Can't move column 0") + return + } + if (sortIndicatorColumn === from) + sortIndicatorColumn = to + columnModel.move(from, to, 1) + } + + /*! + \qmlmethod TableViewColumn BasicTableView::getColumn(int index) + + Returns the column at the given \a index + or \c null if the \a index is invalid. + */ + function getColumn(index) { + if (index < 0 || index >= columnCount) + return null + return columnModel.get(index).columnItem + } + + /*! + \qmlmethod void BasicTableView::resizeColumnsToContents() + + Resizes all columns to ensure that the column contents and the headers will fit. + \since QtQuick.Controls 1.2 + */ + function resizeColumnsToContents () { + for (var i = 0; i < __columns.length; ++i) { + var col = getColumn(i) + var header = __listView.headerItem.headerRepeater.itemAt(i) + if (col) { + col.resizeToContents() + if (col.width < header.implicitWidth) + col.width = header.implicitWidth + } + } + } + + // Internal stuff. Do not look + + Component.onCompleted: { + for (var i = 0; i < __columns.length; ++i) { + var column = __columns[i] + if (column.accessibleRole === Accessible.ColumnHeader) + addColumn(column) + } + } + + activeFocusOnTab: true + + implicitWidth: 200 + implicitHeight: 150 + + frameVisible: true + __scrollBarTopMargin: headerVisible && (listView.transientScrollBars || Qt.platform.os === "osx") + ? listView.headerItem.height : 0 + + /*! \internal + Use this to display user-friendly messages in TableView and TreeView common functions. + */ + property string __viewTypeName + + /*! \internal */ + readonly property bool __isTreeView: __viewTypeName === "TreeView" + + /*! \internal */ + default property alias __columns: root.data + + /*! \internal */ + property alias __currentRowItem: listView.currentItem + + /*! \internal + This property is forwarded to TableView::currentRow, but not to any TreeView property. + */ + property alias __currentRow: listView.currentIndex + + /*! \internal */ + readonly property alias __listView: listView + + /*! \internal */ + property Component __itemDelegateLoader: null + + /*! \internal + Allows to override the model property in cases like TreeView, + where we want to use a proxy/adaptor model between the user's model + and whatever a ListView can swallow. + */ + property var __model + + /*! \internal */ + property bool __activateItemOnSingleClick: __style ? __style.activateItemOnSingleClick : false + + /*! \internal */ + property Item __mouseArea + + ListView { + id: listView + focus: true + activeFocusOnTab: false + Keys.forwardTo: [__mouseArea] + anchors.fill: parent + contentWidth: headerItem.headerRow.width + listView.vScrollbarPadding + // ### FIXME Late configuration of the header item requires + // this binding to get the header visible after creation + contentY: -headerItem.height + + currentIndex: -1 + visible: columnCount > 0 + interactive: Settings.hasTouchScreen + property var rowItemStack: [] // Used as a cache for rowDelegates + + readonly property bool transientScrollBars: __style && !!__style.transientScrollBars + readonly property real vScrollbarPadding: __scroller.verticalScrollBar.visible + && !transientScrollBars && Qt.platform.os === "osx" ? + __verticalScrollBar.width + __scroller.scrollBarSpacing + root.__style.padding.right : 0 + + Qml.Binding { + // On Mac, we reserve the vSB space in the contentItem because the vSB should + // appear under the header. Unfortunately, the ListView header won't expand + // beyond the ListView's boundaries, that's why we need to ressort to this. + target: root.__scroller + when: Qt.platform.os === "osx" + property: "verticalScrollbarOffset" + value: 0 + restoreMode: Binding.RestoreBinding + } + + function incrementCurrentIndexBlocking() { + var oldIndex = __listView.currentIndex + __scroller.blockUpdates = true; + incrementCurrentIndex(); + __scroller.blockUpdates = false; + return oldIndex !== __listView.currentIndex + } + + function decrementCurrentIndexBlocking() { + var oldIndex = __listView.currentIndex + __scroller.blockUpdates = true; + decrementCurrentIndex(); + __scroller.blockUpdates = false; + return oldIndex !== __listView.currentIndex + } + + function scrollIfNeeded(key) { + var diff = key === Qt.Key_PageDown ? height : + key === Qt.Key_PageUp ? -height : 0 + if (diff !== 0) + __verticalScrollBar.value += diff + } + + SystemPalette { + id: palette + colorGroup: enabled ? SystemPalette.Active : SystemPalette.Disabled + } + + Rectangle { + id: colorRect + parent: viewport + anchors.fill: parent + color: __style ? __style.backgroundColor : palette.base + z: -2 + } + + // Fills extra rows with alternate color + Column { + id: rowfiller + Loader { + id: rowSizeItem + sourceComponent: root.rowDelegate + visible: false + property QtObject styleData: QtObject { + property bool alternate: false + property bool selected: false + property bool hasActiveFocus: false + property bool pressed: false + } + } + property int rowHeight: Math.floor(rowSizeItem.implicitHeight) + property int paddedRowCount: rowHeight != 0 ? height/rowHeight : 0 + + y: listView.contentHeight - listView.contentY + listView.originY + width: parent.width + visible: alternatingRowColors + height: listView.model && listView.model.count ? Math.max(viewport.height - listView.contentHeight, 0) : 0 + Repeater { + model: visible ? parent.paddedRowCount : 0 + Loader { + width: rowfiller.width + height: rowfiller.rowHeight + sourceComponent: root.rowDelegate + property QtObject styleData: QtObject { + readonly property bool alternate: (index + __listView.count) % 2 === 1 + readonly property bool selected: false + readonly property bool hasActiveFocus: false + readonly property bool pressed: false + } + readonly property var model: null + readonly property var modelData: null + } + } + } + + ListModel { + id: columnModel + } + + highlightFollowsCurrentItem: true + model: root.__model + + delegate: FocusScope { + id: rowItemContainer + + activeFocusOnTab: false + z: rowItem.activeFocus ? 0.7 : rowItem.itemSelected ? 0.5 : 0 + + property Item rowItem + // We recycle instantiated row items to speed up list scrolling + + Component.onDestruction: { + // move the rowItem back in cache + if (rowItem) { + rowItem.visible = false; + rowItem.parent = null; + rowItem.rowIndex = -1; + listView.rowItemStack.push(rowItem); // return rowItem to cache + } + } + + Component.onCompleted: { + // retrieve row item from cache + if (listView.rowItemStack.length > 0) + rowItem = listView.rowItemStack.pop(); + else + rowItem = rowComponent.createObject(listView); + + // Bind container to item size + rowItemContainer.width = Qt.binding( function() { return rowItem.width }); + rowItemContainer.height = Qt.binding( function() { return rowItem.height }); + + // Reassign row-specific bindings + rowItem.rowIndex = Qt.binding( function() { return model.index }); + rowItem.itemModelData = Qt.binding( function() { return typeof modelData === "undefined" ? null : modelData }); + rowItem.itemModel = Qt.binding( function() { return model }); + rowItem.parent = rowItemContainer; + rowItem.visible = true; + } + } + + Component { + id: rowComponent + + FocusScope { + id: rowitem + visible: false + + property int rowIndex + property var itemModelData + property var itemModel + property bool itemSelected: __mouseArea.selected(rowIndex) + property bool alternate: alternatingRowColors && rowIndex % 2 === 1 + readonly property color itemTextColor: itemSelected ? __style.highlightedTextColor : __style.textColor + property Item branchDecoration: null + + width: itemrow.width + height: rowstyle.height + + onActiveFocusChanged: { + if (activeFocus) + listView.currentIndex = rowIndex + } + + Loader { + id: rowstyle + // row delegate + sourceComponent: rowitem.itemModel !== undefined ? root.rowDelegate : null + // Row fills the view width regardless of item size + // But scrollbar should not adjust to it + height: item ? item.height : 16 + width: parent.width + __horizontalScrollBar.width + x: listView.contentX + + // these properties are exposed to the row delegate + // Note: these properties should be mirrored in the row filler as well + property QtObject styleData: QtObject { + readonly property int row: rowitem.rowIndex + readonly property bool alternate: rowitem.alternate + readonly property bool selected: rowitem.itemSelected + readonly property bool hasActiveFocus: rowitem.activeFocus + readonly property bool pressed: rowitem.rowIndex === __mouseArea.pressedRow + } + readonly property var model: rowitem.itemModel + readonly property var modelData: rowitem.itemModelData + } + Row { + id: itemrow + height: parent.height + Repeater { + model: columnModel + + delegate: __itemDelegateLoader + + onItemAdded: { + var columnItem = columnModel.get(index).columnItem + item.__rowItem = rowitem + item.__column = columnItem + } + } + } + } + } + + headerPositioning: ListView.OverlayHeader + header: Item { + id: tableHeader + visible: headerVisible + width: Math.max(headerRow.width + listView.vScrollbarPadding, root.viewport.width) + height: visible ? headerRow.height : 0 + + property alias headerRow: row + property alias headerRepeater: repeater + Row { + id: row + + Repeater { + id: repeater + + property int targetIndex: -1 + property int dragIndex: -1 + + model: columnModel + + delegate: Item { + id: headerRowDelegate + readonly property int column: index + z:-index + width: modelData.width + implicitWidth: columnCount === 1 ? viewport.width + __verticalScrollBar.width : headerStyle.implicitWidth + visible: modelData.visible + height: headerStyle.height + + readonly property bool treeViewMovable: !__isTreeView || index > 0 + + Loader { + id: headerStyle + sourceComponent: root.headerDelegate + width: parent.width + property QtObject styleData: QtObject { + readonly property string value: modelData.title + readonly property bool pressed: headerClickArea.pressed + readonly property bool containsMouse: headerClickArea.containsMouse + readonly property int column: index + readonly property int textAlignment: modelData.horizontalAlignment + readonly property bool resizable: modelData.resizable + } + } + + Rectangle{ + id: targetmark + width: parent.width + height:parent.height + opacity: (treeViewMovable && index === repeater.targetIndex && repeater.targetIndex !== repeater.dragIndex) ? 0.5 : 0 + Behavior on opacity { NumberAnimation { duration: 160 } } + color: palette.highlight + visible: modelData.movable + } + + MouseArea{ + id: headerClickArea + drag.axis: Qt.YAxis + hoverEnabled: Settings.hoverEnabled + anchors.fill: parent + onClicked: { + if (sortIndicatorColumn === index) + sortIndicatorOrder = sortIndicatorOrder === Qt.AscendingOrder ? Qt.DescendingOrder : Qt.AscendingOrder + sortIndicatorColumn = index + } + // Here we handle moving header sections + // NOTE: the direction is different from the master branch + // so this indicates that I am using an invalid assumption on item ordering + onPositionChanged: { + if (drag.active && modelData.movable && pressed && columnCount > 1) { // only do this while dragging + for (var h = columnCount-1 ; h >= 0 ; --h) { + if (headerRow.children[h].visible && drag.target.x + headerRowDelegate.width/2 > headerRow.children[h].x) { + repeater.targetIndex = h + break + } + } + } + } + + onPressed: { + repeater.dragIndex = index + } + + onReleased: { + if (repeater.targetIndex >= 0 && repeater.targetIndex !== index ) { + var targetColumn = columnModel.get(repeater.targetIndex).columnItem + if (targetColumn.movable && (!__isTreeView || repeater.targetIndex > 0)) { + if (sortIndicatorColumn === index) + sortIndicatorColumn = repeater.targetIndex + columnModel.move(index, repeater.targetIndex, 1) + } + } + repeater.targetIndex = -1 + repeater.dragIndex = -1 + } + drag.target: treeViewMovable && modelData.movable && columnCount > 1 ? draghandle : null + } + + Loader { + id: draghandle + property QtObject styleData: QtObject{ + readonly property string value: modelData.title + readonly property bool pressed: headerClickArea.pressed + readonly property bool containsMouse: headerClickArea.containsMouse + readonly property int column: index + readonly property int textAlignment: modelData.horizontalAlignment + } + parent: tableHeader + x: __implicitX + property double __implicitX: headerRowDelegate.x + width: modelData.width + height: parent.height + sourceComponent: root.headerDelegate + visible: headerClickArea.pressed + onVisibleChanged: { + if (!visible) + x = Qt.binding(function () { return __implicitX }) + } + opacity: 0.5 + } + + + MouseArea { + id: headerResizeHandle + property int offset: 0 + readonly property int minimumSize: 20 + preventStealing: true + anchors.rightMargin: -width/2 + width: Settings.hasTouchScreen ? Screen.pixelDensity * 3.5 : 16 + height: parent.height + anchors.right: parent.right + enabled: modelData.resizable && columnCount > 0 + onPositionChanged: { + var newHeaderWidth = modelData.width + (mouseX - offset) + modelData.width = Math.max(minimumSize, newHeaderWidth) + } + + onDoubleClicked: getColumn(index).resizeToContents() + onPressedChanged: if (pressed) offset=mouseX + cursorShape: enabled && repeater.dragIndex==-1 ? Qt.SplitHCursor : Qt.ArrowCursor + } + } + } + } + + Loader { + property QtObject styleData: QtObject{ + readonly property string value: "" + readonly property bool pressed: false + readonly property bool containsMouse: false + readonly property int column: -1 + readonly property int textAlignment: Text.AlignLeft + } + + anchors.top: parent.top + anchors.right: parent.right + anchors.bottom: headerRow.bottom + sourceComponent: root.headerDelegate + readonly property real __remainingWidth: parent.width - headerRow.width + visible: __remainingWidth > 0 + width: __remainingWidth + z:-1 + } + } + + function columnAt(offset) { + var item = listView.headerItem.headerRow.childAt(offset, 0) + return item ? item.column : -1 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/CalendarHeaderModel.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/CalendarHeaderModel.qml new file mode 100644 index 0000000..40328a8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/CalendarHeaderModel.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +/* + CalendarHeaderModel contains a list of the days of a week, + according to a \l locale. The \l locale affects which day of the week + is first in the model. + + The only role provided by the model is \c dayOfWeek, which is one of the + following JavaScript values: + + \list + \li \c Locale.Sunday + \li \c Locale.Monday + \li \c Locale.Tuesday + \li \c Locale.Wednesday + \li \c Locale.Thursday + \li \c Locale.Friday + \li \c Locale.Saturday + \endlist + */ + +ListModel { + id: root + + /* + The locale that this model should be based on. + This affects which day of the week is first in the model. + */ + property var locale + + ListElement { + dayOfWeek: Locale.Sunday + } + ListElement { + dayOfWeek: Locale.Monday + } + ListElement { + dayOfWeek: Locale.Tuesday + } + ListElement { + dayOfWeek: Locale.Wednesday + } + ListElement { + dayOfWeek: Locale.Thursday + } + ListElement { + dayOfWeek: Locale.Friday + } + ListElement { + dayOfWeek: Locale.Saturday + } + + Component.onCompleted: updateFirstDayOfWeek() + onLocaleChanged: updateFirstDayOfWeek() + + function updateFirstDayOfWeek() { + var daysOfWeek = [Locale.Sunday, Locale.Monday, Locale.Tuesday, + Locale.Wednesday, Locale.Thursday, Locale.Friday, Locale.Saturday]; + var firstDayOfWeek = root.locale.firstDayOfWeek; + + var shifted = daysOfWeek.splice(firstDayOfWeek, daysOfWeek.length - firstDayOfWeek); + daysOfWeek = shifted.concat(daysOfWeek) + + if (firstDayOfWeek !== root.get(0).dayOfWeek) { + for (var i = 0; i < daysOfWeek.length; ++i) { + root.setProperty(i, "dayOfWeek", daysOfWeek[i]); + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/CalendarUtils.js b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/CalendarUtils.js new file mode 100644 index 0000000..9a93d8d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/CalendarUtils.js @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +.pragma library + +var daysInAWeek = 7; +var monthsInAYear = 12; + +// Not the number of weeks per month, but the number of weeks that are +// shown on a typical calendar. +var weeksOnACalendarMonth = 6; + +// Can't create year 1 directly... +var minimumCalendarDate = new Date(-1, 0, 1); +minimumCalendarDate.setFullYear(minimumCalendarDate.getFullYear() + 2); +var maximumCalendarDate = new Date(275759, 9, 25); + +function daysInMonth(date) { + // Passing 0 as the day will give us the previous month, which will be + // date.getMonth() since we added 1 to it. + return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(); +} + +/*! + Returns a copy of \a date with its month set to \a month, keeping the same + day if possible. Does not modify \a date. +*/ +function setMonth(date, month) { + var oldDay = date.getDate(); + var newDate = new Date(date); + // Set the day first, because setting the month could cause it to skip ahead + // a month if the day is larger than the latest day in that month. + newDate.setDate(1); + newDate.setMonth(month); + // We'd like to have the previous day still selected when we change + // months, but it might not be possible, so use the smallest of the two. + newDate.setDate(Math.min(oldDay, daysInMonth(newDate))); + return newDate; +} + +/*! + Returns the cell rectangle for the cell at the given \a index, assuming + that the grid has a number of columns equal to \a columns and rows + equal to \a rows, with an available width of \a availableWidth and height + of \a availableHeight. + + If \a gridLineWidth is greater than \c 0, the cell rectangle will be + calculated under the assumption that there is a grid between the cells: + + 31 | 1 | 2 | 3 | 4 | 5 | 6 + -------------------------------- + 7 | 8 | 9 | 10 | 11 | 12 | 13 + -------------------------------- + 14 | 15 | 16 | 17 | 18 | 19 | 20 + -------------------------------- + 21 | 22 | 23 | 24 | 25 | 26 | 27 + -------------------------------- + 28 | 29 | 30 | 31 | 1 | 2 | 3 + -------------------------------- + 4 | 5 | 6 | 7 | 8 | 9 | 10 +*/ +function cellRectAt(index, columns, rows, availableWidth, availableHeight, gridLineWidth) { + var col = Math.floor(index % columns); + var row = Math.floor(index / columns); + + var availableWidthMinusGridLines = availableWidth - ((columns - 1) * gridLineWidth); + var availableHeightMinusGridLines = availableHeight - ((rows - 1) * gridLineWidth); + var remainingHorizontalSpace = Math.floor(availableWidthMinusGridLines % columns); + var remainingVerticalSpace = Math.floor(availableHeightMinusGridLines % rows); + var baseCellWidth = Math.floor(availableWidthMinusGridLines / columns); + var baseCellHeight = Math.floor(availableHeightMinusGridLines / rows); + + var rect = Qt.rect(0, 0, 0, 0); + + rect.x = baseCellWidth * col; + rect.width = baseCellWidth; + if (remainingHorizontalSpace > 0) { + if (col < remainingHorizontalSpace) { + ++rect.width; + } + + // This cell's x position should be increased by 1 for every column above it. + rect.x += Math.min(remainingHorizontalSpace, col); + } + + rect.y = baseCellHeight * row; + rect.height = baseCellHeight; + if (remainingVerticalSpace > 0) { + if (row < remainingVerticalSpace) { + ++rect.height; + } + + // This cell's y position should be increased by 1 for every row above it. + rect.y += Math.min(remainingVerticalSpace, row); + } + + rect.x += col * gridLineWidth; + rect.y += row * gridLineWidth; + + return rect; +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ColumnMenuContent.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ColumnMenuContent.qml new file mode 100644 index 0000000..5f8b4d6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ColumnMenuContent.qml @@ -0,0 +1,252 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Item { + id: content + + property Component menuItemDelegate + property Component scrollIndicatorStyle + property Component scrollerStyle + property var itemsModel + property int minWidth: 100 + property real maxHeight: 800 + readonly property bool mousePressed: hoverArea.pressed + + signal triggered(var item) + + function menuItemAt(index) { + list.currentIndex = index + return list.currentItem + } + + width: Math.max(list.contentWidth, minWidth) + height: Math.min(list.contentHeight, fittedMaxHeight) + + readonly property int currentIndex: __menu.__currentIndex + property Item currentItem: null + property int itemHeight: 23 + + Component.onCompleted: { + var children = list.contentItem.children + for (var i = 0; i < list.count; i++) { + var child = children[i] + if (child.visible && child.styleData.type === MenuItemType.Item) { + itemHeight = children[i].height + break + } + } + } + + readonly property int fittingItems: Math.floor((maxHeight - downScroller.height) / itemHeight) + readonly property real fittedMaxHeight: itemHeight * fittingItems + downScroller.height + readonly property bool shouldUseScrollers: scrollView.style === emptyScrollerStyle && itemsModel.length > fittingItems + readonly property real upScrollerHeight: upScroller.visible ? upScroller.height : 0 + readonly property real downScrollerHeight: downScroller.visible ? downScroller.height : 0 + property var oldMousePos: undefined + property var openedSubmenu: null + + function updateCurrentItem(mouse) { + var pos = mapToItem(list.contentItem, mouse.x, mouse.y) + var dx = 0 + var dy = 0 + var dist = 0 + if (openedSubmenu && oldMousePos !== undefined) { + dx = mouse.x - oldMousePos.x + dy = mouse.y - oldMousePos.y + dist = Math.sqrt(dx * dx + dy * dy) + } + oldMousePos = mouse + if (openedSubmenu && dist > 5) { + var menuRect = __menu.__popupGeometry + var submenuRect = openedSubmenu.__popupGeometry + var angle = Math.atan2(dy, dx) + var ds = 0 + if (submenuRect.x > menuRect.x) { + ds = menuRect.width - oldMousePos.x + } else { + angle = Math.PI - angle + ds = oldMousePos.x + } + var above = submenuRect.y - menuRect.y - oldMousePos.y + var below = submenuRect.height - above + var minAngle = Math.atan2(above, ds) + var maxAngle = Math.atan2(below, ds) + // This tests that the current mouse position is in + // the triangle defined by the previous mouse position + // and the submenu's top-left and bottom-left corners. + if (minAngle < angle && angle < maxAngle) { + sloppyTimer.start() + return + } + } + + if (!currentItem || !currentItem.contains(Qt.point(pos.x - currentItem.x, pos.y - currentItem.y))) { + if (currentItem && !hoverArea.pressed + && currentItem.styleData.type === MenuItemType.Menu) { + currentItem.__closeSubMenu() + openedSubmenu = null + } + currentItem = list.itemAt(pos.x, pos.y) + if (currentItem) { + __menu.__currentIndex = currentItem.__menuItemIndex + if (currentItem.styleData.type === MenuItemType.Menu) { + showCurrentItemSubMenu(false) + } + } else { + __menu.__currentIndex = -1 + } + } + } + + function showCurrentItemSubMenu(immediately) { + if (!currentItem.__menuItem.__popupVisible) { + currentItem.__showSubMenu(immediately) + openedSubmenu = currentItem.__menuItem + } + } + + Timer { + id: sloppyTimer + interval: 1000 + + // Stop timer as soon as we hover one of the submenu items + property int currentIndex: openedSubmenu ? openedSubmenu.__currentIndex : -1 + onCurrentIndexChanged: if (currentIndex !== -1) stop() + + onTriggered: { + if (openedSubmenu && openedSubmenu.__currentIndex === -1) + updateCurrentItem(oldMousePos) + } + } + + Component { + id: emptyScrollerStyle + Style { + padding { left: 0; right: 0; top: 0; bottom: 0 } + property bool scrollToClickedPosition: false + property Component frame: Item { visible: false } + property Component corner: Item { visible: false } + property Component __scrollbar: Item { visible: false } + } + } + + ScrollView { + id: scrollView + anchors { + fill: parent + topMargin: upScrollerHeight + bottomMargin: downScrollerHeight + } + + style: scrollerStyle || emptyScrollerStyle + __wheelAreaScrollSpeed: itemHeight + + ListView { + id: list + model: itemsModel + delegate: menuItemDelegate + snapMode: ListView.SnapToItem + boundsBehavior: Flickable.StopAtBounds + highlightFollowsCurrentItem: true + highlightMoveDuration: 0 + } + } + + MouseArea { + id: hoverArea + anchors.left: scrollView.left + width: scrollView.width - scrollView.__verticalScrollBar.width + height: parent.height + + hoverEnabled: Settings.hoverEnabled + acceptedButtons: Qt.AllButtons + + onPositionChanged: updateCurrentItem({ "x": mouse.x, "y": mouse.y }) + onPressed: updateCurrentItem({ "x": mouse.x, "y": mouse.y }) + onReleased: { + if (currentItem && currentItem.__menuItem.enabled) { + if (currentItem.styleData.type === MenuItemType.Menu) { + showCurrentItemSubMenu(true) + } else { + content.triggered(currentItem) + } + } + } + onExited: { + if (currentItem && !currentItem.__menuItem.__popupVisible) { + currentItem = null + __menu.__currentIndex = -1 + } + } + + MenuContentScroller { + id: upScroller + direction: Qt.UpArrow + visible: shouldUseScrollers && !list.atYBeginning + function scrollABit() { list.contentY -= itemHeight } + } + + MenuContentScroller { + id: downScroller + direction: Qt.DownArrow + visible: shouldUseScrollers && !list.atYEnd + function scrollABit() { list.contentY += itemHeight } + } + } + + Timer { + interval: 1 + running: true + repeat: false + onTriggered: list.positionViewAtIndex(currentIndex, !scrollView.__style + ? ListView.Center : ListView.Beginning) + } + + Qml.Binding { + target: scrollView.__verticalScrollBar + property: "singleStep" + value: itemHeight + restoreMode: Binding.RestoreBinding + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ContentItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ContentItem.qml new file mode 100644 index 0000000..2c5b372 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ContentItem.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Layouts 1.1 + +Item { + id: contentItem + property real minimumWidth: __calcMinimum('Width') + property real minimumHeight: __calcMinimum('Height') + property real maximumWidth: Number.POSITIVE_INFINITY + property real maximumHeight: Number.POSITIVE_INFINITY + implicitWidth: __calcImplicitWidth() + implicitHeight: __calcImplicitHeight() + + /*! \internal */ + property Item __layoutItem: contentItem.visibleChildren.length === 1 ? contentItem.visibleChildren[0] : null + /*! \internal */ + property real __marginsWidth: __layoutItem ? __layoutItem.anchors.leftMargin + __layoutItem.anchors.rightMargin : 0 + /*! \internal */ + property real __marginsHeight: __layoutItem ? __layoutItem.anchors.topMargin + __layoutItem.anchors.bottomMargin : 0 + + /*! \internal */ + property bool __noMinimumWidthGiven : false + /*! \internal */ + property bool __noMinimumHeightGiven : false + /*! \internal */ + property bool __noImplicitWidthGiven : false + /*! \internal */ + property bool __noImplicitHeightGiven : false + + function __calcImplicitWidth() { + if (__layoutItem && __layoutItem.anchors.fill) + return __calcImplicit('Width') + return contentItem.childrenRect.x + contentItem.childrenRect.width + } + + function __calcImplicitHeight() { + if (__layoutItem && __layoutItem.anchors.fill) + return __calcImplicit('Height') + return contentItem.childrenRect.y + contentItem.childrenRect.height + } + + function __calcImplicit(hw) { + var pref = __layoutItem.Layout['preferred' + hw] + if (pref < 0) { + pref = __layoutItem['implicit' + hw] + } + contentItem['__noImplicit' + hw + 'Given'] = (pref === 0 ? true : false) + pref += contentItem['__margins' + hw] + return pref + } + + function __calcMinimum(hw) { // hw is 'Width' or 'Height' + return (__layoutItem && __layoutItem.anchors.fill) ? __calcMinMax('minimum', hw) : 0 + } + + function __calcMaximum(hw) { // hw is 'Width' or 'Height' + return (__layoutItem && __layoutItem.anchors.fill) ? __calcMinMax('maximum', hw) : Number.POSITIVE_INFINITY + } + + function __calcMinMax(minMaxConstraint, hw) { + var attachedPropName = minMaxConstraint + hw + var extent = __layoutItem.Layout[attachedPropName] + + if (minMaxConstraint === 'minimum') + contentItem['__noMinimum' + hw + 'Given'] = (extent === 0 ? true : false) + + extent += contentItem['__margins' + hw] + return extent + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/Control.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/Control.qml new file mode 100644 index 0000000..182a1e9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/Control.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls.Styles 1.1 + +/*! + \qmltype Control + \internal + \qmlabstract + \inqmlmodule QtQuick.Controls.Private +*/ +FocusScope { + id: root + + /*! \qmlproperty Component Control::style + + The style Component for this control. + \sa {Qt Quick Controls Styles QML Types} + + */ + property Component style + + /*! \internal */ + property QtObject __style: styleLoader.item + + /*! \internal */ + property Item __panel: panelLoader.item + + /*! \internal */ + property var styleHints + + implicitWidth: __panel ? __panel.implicitWidth: 0 + implicitHeight: __panel ? __panel.implicitHeight: 0 + baselineOffset: __panel ? __panel.baselineOffset: 0 + activeFocusOnTab: false + + /*! \internal */ + property alias __styleData: styleLoader.styleData + + Loader { + id: styleLoader + sourceComponent: style + property Item __control: root + property QtObject styleData: null + onStatusChanged: { + if (status === Loader.Error) + console.error("Failed to load Style for", root) + } + } + + Loader { + id: panelLoader + anchors.fill: parent + sourceComponent: __style ? __style.panel : null + onStatusChanged: if (status === Loader.Error) console.error("Failed to load Style for", root) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/EditMenu.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/EditMenu.qml new file mode 100644 index 0000000..fde124e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/EditMenu.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Loader { + property Item control + property Item input + property Item cursorHandle + property Item selectionHandle + property Flickable flickable + property Component defaultMenu: item && item.defaultMenu ? item.defaultMenu : null + property QtObject menuInstance: null + property MouseArea mouseArea + property QtObject style: __style + + Connections { + target: control + function onMenuChanged() { + if (menuInstance !== null) { + menuInstance.destroy() + menuInstance = null + } + } + } + + function getMenuInstance() + { + // Lazy load menu when first requested + if (!menuInstance && control.menu) { + menuInstance = control.menu.createObject(input); + } + return menuInstance; + } + + function syncStyle() { + if (!style) + return; + + if (style.__editMenu) + sourceComponent = style.__editMenu; + else { + // todo: get ios/android/base menus from style as well + source = (Qt.resolvedUrl(Qt.platform.os === "ios" ? "" + : Qt.platform.os === "android" ? "" : "EditMenu_base.qml")); + } + } + onStyleChanged: syncStyle(); + Component.onCompleted: syncStyle(); +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/EditMenu_base.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/EditMenu_base.qml new file mode 100644 index 0000000..346eba2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/EditMenu_base.qml @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Item { + id: editMenuBase + anchors.fill: parent + + Component { + id: undoAction + Action { + text: qsTr("&Undo") + shortcut: StandardKey.Undo + iconName: "edit-undo" + enabled: input.canUndo + onTriggered: input.undo() + } + } + + Component { + id: redoAction + Action { + text: qsTr("&Redo") + shortcut: StandardKey.Redo + iconName: "edit-redo" + enabled: input.canRedo + onTriggered: input.redo() + } + } + + Component { + id: cutAction + Action { + text: qsTr("Cu&t") + shortcut: StandardKey.Cut + iconName: "edit-cut" + enabled: !input.readOnly && selectionStart !== selectionEnd + onTriggered: { + input.cut(); + input.select(input.cursorPosition, input.cursorPosition); + } + } + } + + Component { + id: copyAction + Action { + text: qsTr("&Copy") + shortcut: StandardKey.Copy + iconName: "edit-copy" + enabled: input.selectionStart !== input.selectionEnd + onTriggered: { + input.copy(); + input.select(input.cursorPosition, input.cursorPosition); + } + } + } + + Component { + id: pasteAction + Action { + text: qsTr("&Paste") + shortcut: StandardKey.Paste + iconName: "edit-paste" + enabled: input.canPaste + onTriggered: input.paste() + } + } + + Component { + id: deleteAction + Action { + text: qsTr("Delete") + shortcut: StandardKey.Delete + iconName: "edit-delete" + enabled: !input.readOnly && input.selectionStart !== input.selectionEnd + onTriggered: input.remove(input.selectionStart, input.selectionEnd) + } + } + + Component { + id: clearAction + Action { + text: qsTr("Clear") + shortcut: StandardKey.DeleteCompleteLine + iconName: "edit-clear" + enabled: !input.readOnly && input.length > 0 + onTriggered: input.remove(0, input.length) + } + } + + Component { + id: selectAllAction + Action { + text: qsTr("Select All") + shortcut: StandardKey.SelectAll + enabled: !(input.selectionStart === 0 && input.selectionEnd === input.length) + onTriggered: input.selectAll() + } + } + + property Component defaultMenu: Menu { + MenuItem { action: undoAction.createObject(editMenuBase) } + MenuItem { action: redoAction.createObject(editMenuBase) } + MenuSeparator {} + MenuItem { action: cutAction.createObject(editMenuBase) } + MenuItem { action: copyAction.createObject(editMenuBase) } + MenuItem { action: pasteAction.createObject(editMenuBase) } + MenuItem { action: deleteAction.createObject(editMenuBase) } + MenuItem { action: clearAction.createObject(editMenuBase) } + MenuSeparator {} + MenuItem { action: selectAllAction.createObject(editMenuBase) } + } + + Connections { + target: mouseArea + + function onClicked() { + if (input.selectionStart === input.selectionEnd) { + var cursorPos = input.positionAt(mouse.x, mouse.y) + input.moveHandles(cursorPos, cursorPos) + } + + input.activate() + + if (control.menu) { + var menu = getMenuInstance(); + menu.__dismissAndDestroy(); + var menuPos = mapToItem(null, mouse.x, mouse.y) + menu.__popup(Qt.rect(menuPos.x, menuPos.y, 0, 0), -1, MenuPrivate.EditMenu); + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/FastGlow.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/FastGlow.qml new file mode 100644 index 0000000..1a8b7a8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/FastGlow.qml @@ -0,0 +1,330 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.4 + +Item { + id: rootItem + property variant source + property real spread: 0.0 + property real blur: 0.0 + property color color: "white" + property bool transparentBorder: false + property bool cached: false + + SourceProxy { + id: sourceProxy + input: rootItem.source + } + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + property string __internalBlurVertexShader: "qrc:/QtQuick/Controls/Shaders/blur.vert" + + property string __internalBlurFragmentShader: "qrc:/QtQuick/Controls/Shaders/blur.frag" + + ShaderEffect { + id: level0 + property variant source: sourceProxy.output + anchors.fill: parent + visible: false + smooth: true + } + + ShaderEffectSource { + id: level1 + width: Math.ceil(shaderItem.width / 32) * 32 + height: Math.ceil(shaderItem.height / 32) * 32 + sourceItem: level0 + hideSource: rootItem.visible + sourceRect: transparentBorder ? Qt.rect(-64, -64, shaderItem.width, shaderItem.height) : Qt.rect(0,0,0,0) + smooth: true + visible: false + } + + ShaderEffect { + id: effect1 + property variant source: level1 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level2 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level2 + width: level1.width / 2 + height: level1.height / 2 + sourceItem: effect1 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect2 + property variant source: level2 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level3 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level3 + width: level2.width / 2 + height: level2.height / 2 + sourceItem: effect2 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect3 + property variant source: level3 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level4 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level4 + width: level3.width / 2 + height: level3.height / 2 + sourceItem: effect3 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect4 + property variant source: level4 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level5 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level5 + width: level4.width / 2 + height: level4.height / 2 + sourceItem: effect4 + hideSource: rootItem.visible + visible: false + smooth: true + } + + ShaderEffect { + id: effect5 + property variant source: level5 + property real yStep: 1/height + property real xStep: 1/width + anchors.fill: level6 + visible: false + smooth: true + vertexShader: __internalBlurVertexShader + fragmentShader: __internalBlurFragmentShader + } + + ShaderEffectSource { + id: level6 + width: level5.width / 2 + height: level5.height / 2 + sourceItem: effect5 + hideSource: rootItem.visible + visible: false + smooth: true + } + + Item { + id: dummysource + width: 1 + height: 1 + visible: false + } + + ShaderEffectSource { + id: dummy + width: 1 + height: 1 + sourceItem: dummysource + visible: false + smooth: false + live: false + } + + ShaderEffect { + id: shaderItem + x: transparentBorder ? -64 : 0 + y: transparentBorder ? -64 : 0 + width: transparentBorder ? parent.width + 128 : parent.width + height: transparentBorder ? parent.height + 128 : parent.height + + property variant source1: level1 + property variant source2: level2 + property variant source3: level3 + property variant source4: level4 + property variant source5: level5 + property variant source6: level6 + property real lod: rootItem.blur + + property real weight1; + property real weight2; + property real weight3; + property real weight4; + property real weight5; + property real weight6; + + property real spread: 1.0 - (rootItem.spread * 0.98) + property alias color: rootItem.color + + function weight(v) { + if (v <= 0.0) + return 1 + if (v >= 0.5) + return 0 + + return 1.0 - v / 0.5 + } + + function calculateWeights() { + + var w1 = weight(Math.abs(lod - 0.100)) + var w2 = weight(Math.abs(lod - 0.300)) + var w3 = weight(Math.abs(lod - 0.500)) + var w4 = weight(Math.abs(lod - 0.700)) + var w5 = weight(Math.abs(lod - 0.900)) + var w6 = weight(Math.abs(lod - 1.100)) + + var sum = w1 + w2 + w3 + w4 + w5 + w6; + weight1 = w1 / sum; + weight2 = w2 / sum; + weight3 = w3 / sum; + weight4 = w4 / sum; + weight5 = w5 / sum; + weight6 = w6 / sum; + + upateSources() + } + + function upateSources() { + var sources = new Array(); + var weights = new Array(); + + if (weight1 > 0) { + sources.push(level1) + weights.push(weight1) + } + + if (weight2 > 0) { + sources.push(level2) + weights.push(weight2) + } + + if (weight3 > 0) { + sources.push(level3) + weights.push(weight3) + } + + if (weight4 > 0) { + sources.push(level4) + weights.push(weight4) + } + + if (weight5 > 0) { + sources.push(level5) + weights.push(weight5) + } + + if (weight6 > 0) { + sources.push(level6) + weights.push(weight6) + } + + for (var j = sources.length; j < 6; j++) { + sources.push(dummy) + weights.push(0.0) + } + + source1 = sources[0] + source2 = sources[1] + source3 = sources[2] + source4 = sources[3] + source5 = sources[4] + source6 = sources[5] + + weight1 = weights[0] + weight2 = weights[1] + weight3 = weights[2] + weight4 = weights[3] + weight5 = weights[4] + weight6 = weights[5] + } + + Component.onCompleted: calculateWeights() + + onLodChanged: calculateWeights() + + fragmentShader: "qrc:/QtQuick/Controls/Shaders/glow.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/FocusFrame.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/FocusFrame.qml new file mode 100644 index 0000000..570df32 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/FocusFrame.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype FocusFrame + \internal + \inqmlmodule QtQuick.Controls.Private +*/ +Item { + id: root + activeFocusOnTab: false + Accessible.role: Accessible.StatusBar + + anchors.topMargin: focusMargin + anchors.leftMargin: focusMargin + anchors.rightMargin: focusMargin + anchors.bottomMargin: focusMargin + + property int focusMargin: loader.item ? loader.item.margin : -3 + + Loader { + id: loader + z: 2 + anchors.fill: parent + sourceComponent: Settings.styleComponent(Settings.style, "FocusFrameStyle.qml", root) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/HoverButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/HoverButton.qml new file mode 100644 index 0000000..bc7f91b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/HoverButton.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Item { + id: button + property alias source: image.source + signal clicked + + Rectangle { + id: fillRect + anchors.fill: parent + color: "black" + opacity: mouse.pressed ? 0.07 : mouse.containsMouse ? 0.02 : 0.0 + } + + Rectangle { + border.color: gridColor + anchors.fill: parent + anchors.margins: -1 + color: "transparent" + opacity: fillRect.opacity * 10 + } + + Image { + id: image + width: Math.min(implicitWidth, parent.width * 0.4) + height: Math.min(implicitHeight, parent.height * 0.4) + anchors.centerIn: parent + fillMode: Image.PreserveAspectFit + opacity: 0.6 + } + + MouseArea { + id: mouse + anchors.fill: parent + onClicked: button.clicked() + hoverEnabled: Settings.hoverEnabled + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuContentItem.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuContentItem.qml new file mode 100644 index 0000000..9fcb2f0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuContentItem.qml @@ -0,0 +1,282 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Controls.Private 1.0 + +Loader { + id: menuFrameLoader + + property var __menu + + Accessible.role: Accessible.PopupMenu + + visible: status === Loader.Ready + width: content.width + (d.style ? d.style.padding.left + d.style.padding.right : 0) + height: content.height + (d.style ? d.style.padding.top + d.style.padding.bottom : 0) + + Loader { + id: styleLoader + active: !__menu.isNative + sourceComponent: __menu.style + property alias __control: menuFrameLoader + onStatusChanged: { + if (status === Loader.Error) + console.error("Failed to load Style for", __menu) + } + } + sourceComponent: d.style ? d.style.frame : undefined + + QtObject { + id: d + property var mnemonicsMap: ({}) + readonly property Style style: styleLoader.item + readonly property Component menuItemPanel: style ? style.menuItemPanel : null + + function canBeHovered(index) { + var item = content.menuItemAt(index) + if (item && item.visible && item.styleData.type !== MenuItemType.Separator && item.styleData.enabled) { + __menu.__currentIndex = index + return true + } + return false + } + + function triggerCurrent() { + var item = content.menuItemAt(__menu.__currentIndex) + if (item) + triggerAndDismiss(item) + } + + function triggerAndDismiss(item) { + if (!item) + return; + if (item.styleData.type === MenuItemType.Separator) + __menu.__dismissAndDestroy() + else if (item.styleData.type === MenuItemType.Item) + item.__menuItem.trigger() + } + } + + focus: true + + Keys.onPressed: { + var item = null + if (!(event.modifiers & Qt.AltModifier) + && (item = d.mnemonicsMap[event.text.toUpperCase()])) { + if (item.styleData.type === MenuItemType.Menu) { + __menu.__currentIndex = item.__menuItemIndex + item.__showSubMenu(true) + item.__menuItem.__currentIndex = 0 + } else { + d.triggerAndDismiss(item) + } + event.accepted = true + } else { + event.accepted = false + } + } + + Keys.onEscapePressed: __menu.__dismissAndDestroy() + + Keys.onDownPressed: { + if (__menu.__currentIndex < 0) + __menu.__currentIndex = -1 + + for (var i = __menu.__currentIndex + 1; + i < __menu.items.length && !d.canBeHovered(i); i++) + ; + event.accepted = true + } + + Keys.onUpPressed: { + for (var i = __menu.__currentIndex - 1; + i >= 0 && !d.canBeHovered(i); i--) + ; + event.accepted = true + } + + Keys.onLeftPressed: { + if ((event.accepted = __menu.__parentMenu.hasOwnProperty("title"))) + __menu.__closeAndDestroy() + } + + Keys.onRightPressed: { + var item = content.menuItemAt(__menu.__currentIndex) + if (item && item.styleData.type === MenuItemType.Menu + && !item.__menuItem.__popupVisible) { + item.__showSubMenu(true) + item.__menuItem.__currentIndex = 0 + event.accepted = true + } else { + event.accepted = false + } + } + + Keys.onSpacePressed: d.triggerCurrent() + Keys.onReturnPressed: d.triggerCurrent() + Keys.onEnterPressed: d.triggerCurrent() + + Qml.Binding { + // Make sure the styled frame is in the background + target: item + property: "z" + value: content.z - 1 + restoreMode: Binding.RestoreBinding + } + + ColumnMenuContent { + id: content + x: d.style ? d.style.padding.left : 0 + y: d.style ? d.style.padding.top : 0 + menuItemDelegate: menuItemComponent + scrollIndicatorStyle: d.style && d.style.scrollIndicator || null + scrollerStyle: d.style && d.style.__scrollerStyle + itemsModel: __menu.items + minWidth: __menu.__minimumWidth + maxHeight: d.style ? d.style.__maxPopupHeight : 0 + onTriggered: d.triggerAndDismiss(item) + } + + Component { + id: menuItemComponent + Loader { + id: menuItemLoader + + Accessible.role: opts.type === MenuItemType.Item || opts.type === MenuItemType.Menu ? + Accessible.MenuItem : Accessible.NoRole + Accessible.name: StyleHelpers.removeMnemonics(opts.text) + Accessible.checkable: opts.checkable + Accessible.checked: opts.checked + Accessible.onPressAction: { + if (opts.type === MenuItemType.Item) { + d.triggerAndDismiss(menuItemLoader) + } else if (opts.type === MenuItemType.Menu) { + __showSubMenu(true /*immediately*/) + } + } + + property QtObject styleData: QtObject { + id: opts + readonly property int index: __menuItemIndex + readonly property int type: __menuItem ? __menuItem.type : -1 + readonly property bool selected: type !== MenuItemType.Separator && __menu.__currentIndex === index + readonly property bool pressed: type !== MenuItemType.Separator && __menu.__currentIndex === index + && content.mousePressed // TODO Add key pressed condition once we get delayed menu closing + readonly property string text: type === MenuItemType.Menu ? __menuItem.title : + type !== MenuItemType.Separator ? __menuItem.text : "" + readonly property bool underlineMnemonic: __menu.__contentItem.altPressed + readonly property string shortcut: !!__menuItem && __menuItem["shortcut"] || "" + readonly property var iconSource: !!__menuItem && __menuItem["iconSource"] || undefined + readonly property bool enabled: type !== MenuItemType.Separator && !!__menuItem && __menuItem.enabled + readonly property bool checked: !!__menuItem && !!__menuItem["checked"] + readonly property bool checkable: !!__menuItem && !!__menuItem["checkable"] + readonly property bool exclusive: !!__menuItem && !!__menuItem["exclusiveGroup"] + readonly property int scrollerDirection: Qt.NoArrow + } + + readonly property var __menuItem: modelData + readonly property int __menuItemIndex: index + + sourceComponent: d.menuItemPanel + enabled: visible && opts.enabled + visible: !!__menuItem && __menuItem.visible + active: visible + + function __showSubMenu(immediately) { + if (!__menuItem.enabled) + return; + if (immediately) { + if (__menu.__currentIndex === __menuItemIndex) { + if (__menuItem.__usingDefaultStyle) + __menuItem.style = __menu.style + __menuItem.__popup(Qt.rect(menuFrameLoader.width - (d.style.submenuOverlap + d.style.padding.right), -d.style.padding.top, 0, 0), -1) + } + } else { + openMenuTimer.start() + } + } + + Timer { + id: openMenuTimer + interval: d.style.submenuPopupDelay + onTriggered: menuItemLoader.__showSubMenu(true) + } + + function __closeSubMenu() { + if (openMenuTimer.running) + openMenuTimer.stop() + else if (__menuItem.__popupVisible) + closeMenuTimer.start() + } + + Timer { + id: closeMenuTimer + interval: 1 + onTriggered: { + if (__menu.__currentIndex !== __menuItemIndex) + __menuItem.__closeAndDestroy() + } + } + + onLoaded: { + __menuItem.__visualItem = menuItemLoader + + if (content.width < item.implicitWidth) + content.width = item.implicitWidth + + var title = opts.text + var ampersandPos = title.indexOf("&") + if (ampersandPos !== -1) + d.mnemonicsMap[title[ampersandPos + 1].toUpperCase()] = menuItemLoader + } + + Qml.Binding { + target: menuItemLoader.item + property: "width" + property alias menuItem: menuItemLoader.item + value: menuItem ? Math.max(__menu.__minimumWidth, content.width) - 2 * menuItem.x : 0 + restoreMode: Binding.RestoreBinding + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuContentScroller.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuContentScroller.qml new file mode 100644 index 0000000..f33d204 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuContentScroller.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +MouseArea { + id: scrollIndicator + property int direction: 0 + + anchors { + top: direction === Qt.UpArrow ? parent.top : undefined + bottom: direction === Qt.DownArrow ? parent.bottom : undefined + } + + hoverEnabled: visible && Settings.hoverEnabled + height: scrollerLoader.height + width: parent.width + + Loader { + id: scrollerLoader + + width: parent.width + sourceComponent: scrollIndicatorStyle + // Extra property values for desktop style + property var __menuItem: null + property var styleData: { + "index": -1, + "type": MenuItemType.ScrollIndicator, + "text": "", + "selected": scrollIndicator.containsMouse, + "scrollerDirection": scrollIndicator.direction, + "checkable": false, + "checked": false, + "enabled": true + } + } + + Timer { + interval: 100 + repeat: true + triggeredOnStart: true + running: parent.containsMouse + onTriggered: scrollABit() + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuItemSubControls.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuItemSubControls.qml new file mode 100644 index 0000000..818b957 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/MenuItemSubControls.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +QtObject { + property Component background: null + property Component label: null + property Component submenuIndicator: null + property Component shortcut: null + property Component checkmarkIndicator: null +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ModalPopupBehavior.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ModalPopupBehavior.qml new file mode 100644 index 0000000..c9a4b68 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ModalPopupBehavior.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +// KNOWN ISSUES +// none + +/*! + \qmltype ModalPopupBehavior + \internal + \inqmlmodule QtQuick.Controls.Private +*/ +Item { + id: popupBehavior + + property bool showing: false + property bool whenAlso: true // modifier to the "showing" property + property bool consumeCancelClick: true + property int delay: 0 // delay before popout becomes visible + property int deallocationDelay: 3000 // 3 seconds + + property Component popupComponent + + property alias popup: popupLoader.item // read-only + property alias window: popupBehavior.root // read-only + + signal prepareToShow + signal prepareToHide + signal cancelledByClick + + // implementation + + anchors.fill: parent + + onShowingChanged: notifyChange() + onWhenAlsoChanged: notifyChange() + function notifyChange() { + if(showing && whenAlso) { + if(popupLoader.sourceComponent == undefined) { + popupLoader.sourceComponent = popupComponent; + } + } else { + mouseArea.enabled = false; // disable before opacity is changed in case it has fading behavior + if(Qt.isQtObject(popupLoader.item)) { + popupBehavior.prepareToHide(); + popupLoader.item.opacity = 0; + } + } + } + + property Item root: findRoot() + function findRoot() { + var p = parent; + while(p.parent != undefined) + p = p.parent; + + return p; + } + + MouseArea { + id: mouseArea + anchors.fill: parent + enabled: false // enabled only when popout is showing + onPressed: { + popupBehavior.showing = false; + mouse.accepted = consumeCancelClick; + cancelledByClick(); + } + } + + Loader { + id: popupLoader + } + + Timer { // visibility timer + running: Qt.isQtObject(popupLoader.item) && showing && whenAlso + interval: delay + onTriggered: { + popupBehavior.prepareToShow(); + mouseArea.enabled = true; + popup.opacity = 1; + } + } + + Timer { // deallocation timer + running: Qt.isQtObject(popupLoader.item) && popupLoader.item.opacity == 0 + interval: deallocationDelay + onTriggered: popupLoader.sourceComponent = undefined + } + + states: State { + name: "active" + when: Qt.isQtObject(popupLoader.item) && popupLoader.item.opacity > 0 + ParentChange { target: popupBehavior; parent: root } + } + } + diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ScrollBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ScrollBar.qml new file mode 100644 index 0000000..eea7a73 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ScrollBar.qml @@ -0,0 +1,237 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ScrollBar + \internal + \inqmlmodule QtQuick.Controls.Private +*/ +Item { + id: scrollbar + + property bool isTransient: false + property bool active: false + property int orientation: Qt.Horizontal + property alias minimumValue: slider.minimumValue + property alias maximumValue: slider.maximumValue + property alias value: slider.value + property int singleStep: 20 + + activeFocusOnTab: false + + Accessible.role: Accessible.ScrollBar + implicitWidth: panelLoader.implicitWidth + implicitHeight: panelLoader.implicitHeight + + property bool upPressed + property bool downPressed + property bool pageUpPressed + property bool pageDownPressed + property bool handlePressed + + + property Item __panel: panelLoader.item + Loader { + id: panelLoader + anchors.fill: parent + sourceComponent: __style ? __style.__scrollbar : null + onStatusChanged: if (status === Loader.Error) console.error("Failed to load Style for", root) + property alias __control: scrollbar + property QtObject __styleData: QtObject { + readonly property alias horizontal: internal.horizontal + readonly property alias upPressed: scrollbar.upPressed + readonly property alias downPressed: scrollbar.downPressed + readonly property alias handlePressed: scrollbar.handlePressed + } + } + + MouseArea { + id: internal + property bool horizontal: orientation === Qt.Horizontal + property int pageStep: internal.horizontal ? width : height + property bool scrollToClickposition: internal.scrollToClickPosition + anchors.fill: parent + cursorShape: __panel && __panel.visible ? Qt.ArrowCursor : Qt.IBeamCursor // forces a cursor change + + property bool autoincrement: false + property bool scrollToClickPosition: __style ? __style.scrollToClickedPosition : 0 + + // Update hover item + onEntered: if (!pressed) __panel.activeControl = __panel.hitTest(mouseX, mouseY) + onExited: if (!pressed) __panel.activeControl = "none" + onMouseXChanged: if (!pressed) __panel.activeControl = __panel.hitTest(mouseX, mouseY) + hoverEnabled: Settings.hoverEnabled + preventStealing: true + property var pressedX + property var pressedY + property int oldPosition + property int grooveSize + + Timer { + running: upPressed || downPressed || pageUpPressed || pageDownPressed + interval: 350 + onTriggered: internal.autoincrement = true + } + + Timer { + running: internal.autoincrement + interval: 60 + repeat: true + onTriggered: { + if (upPressed && internal.containsMouse) + internal.decrement(); + else if (downPressed && internal.containsMouse) + internal.increment(); + else if (pageUpPressed) + internal.decrementPage(); + else if (pageDownPressed) + internal.incrementPage(); + } + } + + onPositionChanged: { + if (handlePressed) { + if (!horizontal) + slider.position = oldPosition + (mouseY - pressedY) + else + slider.position = oldPosition + (mouseX - pressedX) + } + } + + onPressed: { + if (mouse.source !== Qt.MouseEventNotSynthesized) { + mouse.accepted = false + return + } + __panel.activeControl = __panel.hitTest(mouseX, mouseY) + scrollToClickposition = scrollToClickPosition + var handleRect = __panel.subControlRect("handle") + var grooveRect = __panel.subControlRect("groove") + grooveSize = horizontal ? grooveRect.width - handleRect.width: + grooveRect.height - handleRect.height; + if (__panel.activeControl === "handle") { + pressedX = mouseX; + pressedY = mouseY; + handlePressed = true; + oldPosition = slider.position; + } else if (__panel.activeControl === "up") { + decrement(); + upPressed = Qt.binding(function() {return containsMouse}); + } else if (__panel.activeControl === "down") { + increment(); + downPressed = Qt.binding(function() {return containsMouse}); + } else if (!scrollToClickposition){ + if (__panel.activeControl === "upPage") { + decrementPage(); + pageUpPressed = true; + } else if (__panel.activeControl === "downPage") { + incrementPage(); + pageDownPressed = true; + } + } else { // scroll to click position + slider.position = horizontal ? mouseX - handleRect.width/2 - grooveRect.x + : mouseY - handleRect.height/2 - grooveRect.y + pressedX = mouseX; + pressedY = mouseY; + handlePressed = true; + oldPosition = slider.position; + } + } + + onReleased: { + __panel.activeControl = __panel.hitTest(mouseX, mouseY); + autoincrement = false; + upPressed = false; + downPressed = false; + handlePressed = false; + pageUpPressed = false; + pageDownPressed = false; + } + + onWheel: { + var stepCount = -(wheel.angleDelta.x ? wheel.angleDelta.x : wheel.angleDelta.y) / 120 + if (stepCount != 0) { + if (wheel.modifiers & Qt.ControlModifier || wheel.modifiers & Qt.ShiftModifier) + incrementPage(stepCount) + else + increment(stepCount) + } + } + + function incrementPage(stepCount) { + value = boundValue(value + getSteps(pageStep, stepCount)) + } + + function decrementPage(stepCount) { + value = boundValue(value - getSteps(pageStep, stepCount)) + } + + function increment(stepCount) { + value = boundValue(value + getSteps(singleStep, stepCount)) + } + + function decrement(stepCount) { + value = boundValue(value - getSteps(singleStep, stepCount)) + } + + function boundValue(val) { + return Math.min(Math.max(val, minimumValue), maximumValue) + } + + function getSteps(step, count) { + if (count) + step *= count + return step + } + + RangeModel { + id: slider + minimumValue: 0.0 + maximumValue: 1.0 + value: 0 + stepSize: 0.0 + inverted: false + positionAtMaximum: internal.grooveSize + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ScrollViewHelper.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ScrollViewHelper.qml new file mode 100644 index 0000000..f5ef5b1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ScrollViewHelper.qml @@ -0,0 +1,234 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ScrollViewHeader + \internal + \inqmlmodule QtQuick.Controls.Private +*/ +Item { + id: scrollHelper + + property alias horizontalScrollBar: hscrollbar + property alias verticalScrollBar: vscrollbar + property bool blockUpdates: false + property int availableHeight + property int availableWidth + property int contentHeight + property int contentWidth + property bool active + property int horizontalScrollBarPolicy: Qt.ScrollBarAsNeeded + property int verticalScrollBarPolicy: Qt.ScrollBarAsNeeded + + + property int leftMargin: outerFrame && root.__style ? root.__style.padding.left : 0 + property int rightMargin: outerFrame && root.__style ? root.__style.padding.right : 0 + property int topMargin: outerFrame && root.__style ? root.__style.padding.top : 0 + property int bottomMargin: outerFrame && root.__style ? root.__style.padding.bottom : 0 + + anchors.fill: parent + + Timer { + id: layoutTimer + interval: 0; + onTriggered: { + blockUpdates = true; + scrollHelper.contentWidth = flickableItem !== null ? flickableItem.contentWidth : 0 + scrollHelper.contentHeight = flickableItem !== null ? flickableItem.contentHeight : 0 + scrollHelper.availableWidth = viewport.width + scrollHelper.availableHeight = viewport.height + blockUpdates = false; + hscrollbar.valueChanged(); + vscrollbar.valueChanged(); + } + } + + Connections { + target: viewport + function onWidthChanged() { layoutTimer.running = true } + function onHeightChanged() { layoutTimer.running = true } + } + + Connections { + target: flickableItem + function onContentWidthChanged() { layoutTimer.running = true } + function onContentHeightChanged() { layoutTimer.running = true } + function onContentXChanged() { + hscrollbar.flash() + vscrollbar.flash() + } + function onContentYChanged() { + hscrollbar.flash() + vscrollbar.flash() + } + } + + Loader { + id: cornerFill + z: 1 + sourceComponent: __style ? __style.corner : null + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.bottomMargin: bottomMargin + anchors.rightMargin: rightMargin + width: visible ? vscrollbar.width : 0 + height: visible ? hscrollbar.height : 0 + visible: hscrollbar.visible && !hscrollbar.isTransient && vscrollbar.visible && !vscrollbar.isTransient + } + + ScrollBar { + id: hscrollbar + readonly property int scrollAmount: contentWidth - availableWidth + readonly property bool scrollable: scrollAmount > 0 + isTransient: !!__panel && !!__panel.isTransient + active: !!__panel && (__panel.sunken || __panel.activeControl !== "none") + enabled: !isTransient || __panel.visible + orientation: Qt.Horizontal + visible: horizontalScrollBarPolicy == Qt.ScrollBarAsNeeded ? scrollable : horizontalScrollBarPolicy == Qt.ScrollBarAlwaysOn + height: visible ? implicitHeight : 0 + z: 1 + maximumValue: scrollable ? scrollAmount : 0 + minimumValue: 0 + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: cornerFill.left + anchors.leftMargin: leftMargin + anchors.bottomMargin: bottomMargin + onScrollAmountChanged: { + var scrollableAmount = scrollable ? scrollAmount : 0 + if (flickableItem && (flickableItem.atXBeginning || flickableItem.atXEnd)) { + value = Math.min(scrollableAmount, flickableItem.contentX - flickableItem.originX); + } else if (value > scrollableAmount) { + value = scrollableAmount; + } + } + onValueChanged: { + if (flickableItem && !blockUpdates) { + flickableItem.contentX = value + flickableItem.originX + } + } + Qml.Binding { + target: hscrollbar.__panel + property: "raised" + value: vscrollbar.active || scrollHelper.active + when: hscrollbar.isTransient + restoreMode: Binding.RestoreBinding + } + Qml.Binding { + target: hscrollbar.__panel + property: "visible" + value: true + when: !hscrollbar.isTransient || scrollHelper.active + restoreMode: Binding.RestoreBinding + } + function flash() { + if (hscrollbar.isTransient) { + hscrollbar.__panel.on = true + hscrollbar.__panel.visible = true + hFlasher.start() + } + } + Timer { + id: hFlasher + interval: 10 + onTriggered: hscrollbar.__panel.on = false + } + } + + ScrollBar { + id: vscrollbar + readonly property int scrollAmount: contentHeight - availableHeight + readonly property bool scrollable: scrollAmount > 0 + isTransient: !!__panel && !!__panel.isTransient + active: !!__panel && (__panel.sunken || __panel.activeControl !== "none") + enabled: !isTransient || __panel.visible + orientation: Qt.Vertical + visible: verticalScrollBarPolicy === Qt.ScrollBarAsNeeded ? scrollable : verticalScrollBarPolicy === Qt.ScrollBarAlwaysOn + width: visible ? implicitWidth : 0 + z: 1 + anchors.bottom: cornerFill.top + maximumValue: scrollable ? scrollAmount + __viewTopMargin : 0 + minimumValue: 0 + anchors.right: parent.right + anchors.top: parent.top + anchors.topMargin: __scrollBarTopMargin + topMargin + anchors.rightMargin: rightMargin + onScrollAmountChanged: { + if (flickableItem && (flickableItem.atYBeginning || flickableItem.atYEnd)) { + value = flickableItem.contentY - flickableItem.originY + } + } + onValueChanged: { + if (flickableItem && !blockUpdates && enabled) { + flickableItem.contentY = value + flickableItem.originY + } + } + Qml.Binding { + target: vscrollbar.__panel + property: "raised" + value: hscrollbar.active || scrollHelper.active + when: vscrollbar.isTransient + restoreMode: Binding.RestoreBinding + } + Qml.Binding { + target: vscrollbar.__panel + property: "visible" + value: true + when: !vscrollbar.isTransient || scrollHelper.active + restoreMode: Binding.RestoreBinding + } + function flash() { + if (vscrollbar.isTransient) { + vscrollbar.__panel.on = true + vscrollbar.__panel.visible = true + vFlasher.start() + } + } + Timer { + id: vFlasher + interval: 10 + onTriggered: vscrollbar.__panel.on = false + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/SourceProxy.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/SourceProxy.qml new file mode 100644 index 0000000..275c24d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/SourceProxy.qml @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +Item { + id: rootItem + property variant input + property variant output + property variant sourceRect + visible: false + + Component.onCompleted: evaluateInput() + + onInputChanged: evaluateInput() + + onSourceRectChanged: evaluateInput() + + function evaluateInput() { + if (input == undefined) { + output = input + } + else if (sourceRect != undefined && sourceRect != Qt.rect(0, 0, 0, 0) && !isQQuickShaderEffectSource(input)) { + proxySource.sourceItem = input + output = proxySource + proxySource.sourceRect = sourceRect + } + else if (isQQuickItemLayerEnabled(input)) { + output = input + } + else if ((isQQuickImage(input) && !hasTileMode(input) && !hasChildren(input))) { + output = input + } + else if (isQQuickShaderEffectSource(input)) { + output = input + } + else { + proxySource.sourceItem = input + output = proxySource + proxySource.sourceRect = Qt.rect(0, 0, 0, 0) + } + } + + function isQQuickItemLayerEnabled(item) { + if (item.hasOwnProperty("layer")) { + var l = item["layer"] + if (l.hasOwnProperty("enabled") && l["enabled"].toString() == "true") + return true + } + return false + } + + function isQQuickImage(item) { + var imageProperties = [ "fillMode", "progress", "asynchronous", "sourceSize", "status", "smooth" ] + return hasProperties(item, imageProperties) + } + + function isQQuickShaderEffectSource(item) { + var shaderEffectSourceProperties = [ "hideSource", "format", "sourceItem", "mipmap", "wrapMode", "live", "recursive", "sourceRect" ] + return hasProperties(item, shaderEffectSourceProperties) + } + + function hasProperties(item, properties) { + var counter = 0 + for (var j = 0; j < properties.length; j++) { + if (item.hasOwnProperty(properties [j])) + counter++ + } + return properties.length == counter + } + + function hasChildren(item) { + if (item.hasOwnProperty("childrenRect")) { + if (item["childrenRect"].toString() != "QRectF(0, 0, 0, 0)") + return true + else + return false + } + return false + } + + function hasTileMode(item) { + if (item.hasOwnProperty("fillMode")) { + if (item["fillMode"].toString() != "0") + return true + else + return false + } + return false + } + + ShaderEffectSource { + id: proxySource + live: rootItem.input != rootItem.output + hideSource: false + smooth: true + visible: false + } +} + diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/StackView.js b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/StackView.js new file mode 100644 index 0000000..b0b77e2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/StackView.js @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +var stackView = []; + +function push(p) +{ + if (!p) + return + stackView.push(p) + __depth++ + return p +} + +function pop() +{ + if (stackView.length === 0) + return null + var p = stackView.pop() + __depth-- + return p +} + +function current() +{ + if (stackView.length === 0) + return null + return stackView[stackView.length-1] +} + diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/StackViewSlideDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/StackViewSlideDelegate.qml new file mode 100644 index 0000000..dcc1444 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/StackViewSlideDelegate.qml @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 + +/*! + \qmltype StackViewSlideTransition + \internal + \inqmlmodule QtQuick.Controls.Private +*/ +StackViewDelegate { + id: root + + property bool horizontal: true + + function getTransition(properties) + { + return root[horizontal ? "horizontalSlide" : "verticalSlide"][properties.name] + } + + function transitionFinished(properties) + { + properties.exitItem.x = 0 + properties.exitItem.y = 0 + } + + property QtObject horizontalSlide: QtObject { + property Component pushTransition: StackViewTransition { + PropertyAnimation { + target: enterItem + property: "x" + from: target.width + to: 0 + duration: 400 + easing.type: Easing.OutCubic + } + PropertyAnimation { + target: exitItem + property: "x" + from: 0 + to: -target.width + duration: 400 + easing.type: Easing.OutCubic + } + } + + property Component popTransition: StackViewTransition { + PropertyAnimation { + target: enterItem + property: "x" + from: -target.width + to: 0 + duration: 400 + easing.type: Easing.OutCubic + } + PropertyAnimation { + target: exitItem + property: "x" + from: 0 + to: target.width + duration: 400 + easing.type: Easing.OutCubic + } + } + property Component replaceTransition: pushTransition + } + + property QtObject verticalSlide: QtObject { + property Component pushTransition: StackViewTransition { + PropertyAnimation { + target: enterItem + property: "y" + from: target.height + to: 0 + duration: 300 + } + PropertyAnimation { + target: exitItem + property: "y" + from: 0 + to: -target.height + duration: 300 + } + } + + property Component popTransition: StackViewTransition { + PropertyAnimation { + target: enterItem + property: "y" + from: -target.height + to: 0 + duration: 300 + } + PropertyAnimation { + target: exitItem + property: "y" + from: 0 + to: target.height + duration: 300 + } + } + property Component replaceTransition: pushTransition + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/Style.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/Style.qml new file mode 100644 index 0000000..805c925 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/Style.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype Style + \internal + \inqmlmodule QtQuick.Controls.Private +*/ + +AbstractStyle { + /*! The control this style is attached to. */ + readonly property Item control: __control +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/SystemPaletteSingleton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/SystemPaletteSingleton.qml new file mode 100644 index 0000000..e4e82c5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/SystemPaletteSingleton.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.2 + +QtObject { + property SystemPalette active: SystemPalette { colorGroup: SystemPalette.Active } + property SystemPalette disabled: SystemPalette { colorGroup: SystemPalette.Disabled } + + function alternateBase(enabled) { return enabled ? active.alternateBase : disabled.alternateBase } + function base(enabled) { return enabled ? active.base : disabled.base } + function button(enabled) { return enabled ? active.button : disabled.button } + function buttonText(enabled) { return enabled ? active.buttonText : disabled.buttonText } + function dark(enabled) { return enabled ? active.dark : disabled.dark } + function highlight(enabled) { return enabled ? active.highlight : disabled.highlight } + function highlightedText(enabled) { return enabled ? active.highlightedText : disabled.highlightedText } + function light(enabled) { return enabled ? active.light : disabled.light } + function mid(enabled) { return enabled ? active.mid : disabled.mid } + function midlight(enabled) { return enabled ? active.midlight : disabled.midlight } + function shadow(enabled) { return enabled ? active.shadow : disabled.shadow } + function text(enabled) { return enabled ? active.text : disabled.text } + function window(enabled) { return enabled ? active.window : disabled.window } + function windowText(enabled) { return enabled ? active.windowText : disabled.windowText } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TabBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TabBar.qml new file mode 100644 index 0000000..1186968 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TabBar.qml @@ -0,0 +1,331 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype TabBar + \internal + \inqmlmodule QtQuick.Controls.Private +*/ +FocusScope { + id: tabbar + height: Math.max(tabrow.height, Math.max(leftCorner.height, rightCorner.height)) + width: tabView.width + + activeFocusOnTab: true + + Keys.onRightPressed: { + if (tabView && tabView.currentIndex < tabView.count - 1) + tabView.currentIndex = tabView.currentIndex + 1 + } + Keys.onLeftPressed: { + if (tabView && tabView.currentIndex > 0) + tabView.currentIndex = tabView.currentIndex - 1 + } + + onTabViewChanged: parent = tabView + visible: tabView ? tabView.tabsVisible : true + + property var tabView + property var style + property var styleItem: tabView.__styleItem ? tabView.__styleItem : null + + property bool tabsMovable: styleItem ? styleItem.tabsMovable : false + + property int tabsAlignment: styleItem ? styleItem.tabsAlignment : Qt.AlignLeft + + property int tabOverlap: styleItem ? styleItem.tabOverlap : 0 + + property int elide: Text.ElideRight + + property real availableWidth: tabbar.width - leftCorner.width - rightCorner.width + + property var __selectedTabRect + + function tab(index) { + for (var i = 0; i < tabrow.children.length; ++i) { + if (tabrow.children[i].tabindex == index) { + return tabrow.children[i] + } + } + return null; + } + + /*! \internal */ + function __isAncestorOf(item, child) { + //TODO: maybe removed from 5.2 if the function was merged in qtdeclarative + if (child === item) + return false; + + while (child) { + child = child.parent; + if (child === item) + return true; + } + return false; + } + Loader { + id: background + anchors.fill: parent + sourceComponent: styleItem ? styleItem.tabBar : undefined + } + + ListView { + id: tabrow + objectName: "tabrow" + Accessible.role: Accessible.PageTabList + LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft + spacing: -tabOverlap + orientation: Qt.Horizontal + interactive: false + focus: true + clip: true + + // Note this will silence the binding loop warnings caused by QTBUG-35038 + // and should be removed when this issue is resolved. + property int contentWidthWorkaround: contentWidth > 0 ? contentWidth: 0 + width: Math.min(availableWidth, count ? contentWidthWorkaround : availableWidth) + height: currentItem ? currentItem.height : 0 + + highlightMoveDuration: 0 + + // We cannot bind directly to the currentIndex because the actual model is + // populated after the listview is completed, resulting in an invalid contentItem + currentIndex: tabView.currentIndex < model.count ? tabView.currentIndex : -1 + onCurrentIndexChanged: tabrow.positionViewAtIndex(currentIndex, ListView.Contain) + + moveDisplaced: Transition { + NumberAnimation { + property: "x" + duration: 125 + easing.type: Easing.OutQuad + } + } + + states: [ + State { + name: "left" + when: tabsAlignment === Qt.AlignLeft + AnchorChanges { target:tabrow ; anchors.left: parent.left } + PropertyChanges { target:tabrow ; anchors.leftMargin: leftCorner.width } + }, + State { + name: "center" + when: tabsAlignment === Qt.AlignHCenter + AnchorChanges { target:tabrow ; anchors.horizontalCenter: tabbar.horizontalCenter } + }, + State { + name: "right" + when: tabsAlignment === Qt.AlignRight + AnchorChanges { target:tabrow ; anchors.right: parent.right } + PropertyChanges { target:tabrow ; anchors.rightMargin: rightCorner.width } + } + ] + + model: tabView.__tabs + + delegate: MouseArea { + id: tabitem + objectName: "mousearea" + hoverEnabled: Settings.hoverEnabled + focus: true + enabled: modelData.enabled + + Qml.Binding { + target: tabbar + when: selected + property: "__selectedTabRect" + value: Qt.rect(x, y, width, height) + restoreMode: Binding.RestoreBinding + } + + drag.target: tabsMovable ? tabloader : null + drag.axis: Drag.XAxis + drag.minimumX: drag.active ? 0 : -Number.MAX_VALUE + drag.maximumX: tabrow.width - tabitem.width + + property int tabindex: index + property bool selected : tabView.currentIndex === index + property string title: modelData.title + property bool nextSelected: tabView.currentIndex === index + 1 + property bool previousSelected: tabView.currentIndex === index - 1 + + property bool keyPressed: false + property bool effectivePressed: pressed && containsMouse || keyPressed + + z: selected ? 1 : -index + implicitWidth: tabloader.implicitWidth + implicitHeight: tabloader.implicitHeight + + function changeTab() { + tabView.currentIndex = index; + var next = tabbar.nextItemInFocusChain(true); + if (__isAncestorOf(tabView.getTab(currentIndex), next)) + next.forceActiveFocus(); + } + + onClicked: { + if (tabrow.interactive) { + changeTab() + } + } + onPressed: { + if (!tabrow.interactive) { + changeTab() + } + } + + Keys.onPressed: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat && !tabitem.pressed) + tabitem.keyPressed = true + } + Keys.onReleased: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat && tabitem.keyPressed) + tabitem.keyPressed = false + } + onFocusChanged: if (!focus) tabitem.keyPressed = false + + Loader { + id: tabloader + + property Item control: tabView + property int index: tabindex + + property QtObject styleData: QtObject { + readonly property alias index: tabitem.tabindex + readonly property alias selected: tabitem.selected + readonly property alias title: tabitem.title + readonly property alias nextSelected: tabitem.nextSelected + readonly property alias previousSelected: tabitem.previousSelected + readonly property alias pressed: tabitem.effectivePressed + readonly property alias hovered: tabitem.containsMouse + readonly property alias enabled: tabitem.enabled + readonly property bool activeFocus: tabitem.activeFocus + readonly property real availableWidth: tabbar.availableWidth + readonly property real totalWidth: tabrow.contentWidth + } + + sourceComponent: loader.item ? loader.item.tab : null + + Drag.keys: "application/x-tabbartab" + Drag.active: tabitem.drag.active + Drag.source: tabitem + + property real __prevX: 0 + property real __dragX: 0 + onXChanged: { + if (Drag.active) { + // keep track for the snap back animation + __dragX = tabitem.mapFromItem(tabrow, tabloader.x, 0).x + + // when moving to the left, the hot spot is the left edge and vice versa + Drag.hotSpot.x = x < __prevX ? 0 : width + __prevX = x + } + } + + width: tabitem.width + state: Drag.active ? "drag" : "" + + transitions: [ + Transition { + to: "drag" + PropertyAction { target: tabloader; property: "parent"; value: tabrow } + }, + Transition { + from: "drag" + SequentialAnimation { + PropertyAction { target: tabloader; property: "parent"; value: tabitem } + NumberAnimation { + target: tabloader + duration: 50 + easing.type: Easing.OutQuad + property: "x" + from: tabloader.__dragX + to: 0 + } + } + } + ] + } + + Accessible.role: Accessible.PageTab + Accessible.name: modelData.title + } + } + + Loader { + id: leftCorner + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + sourceComponent: styleItem ? styleItem.leftCorner : undefined + width: item ? item.implicitWidth : 0 + height: item ? item.implicitHeight : 0 + } + + Loader { + id: rightCorner + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + sourceComponent: styleItem ? styleItem.rightCorner : undefined + width: item ? item.implicitWidth : 0 + height: item ? item.implicitHeight : 0 + } + + DropArea { + anchors.fill: tabrow + keys: "application/x-tabbartab" + onPositionChanged: { + var source = drag.source + var target = tabrow.itemAt(drag.x, drag.y) + if (source && target && source !== target) { + source = source.drag.target + target = target.drag.target + var center = target.parent.x + target.width / 2 + if ((source.index > target.index && source.x < center) + || (source.index < target.index && source.x + source.width > center)) + tabView.moveTab(source.index, target.index) + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TableViewItemDelegateLoader.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TableViewItemDelegateLoader.qml new file mode 100644 index 0000000..c5c6584 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TableViewItemDelegateLoader.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +/*! + \qmltype TableViewItemDelegateLoader + \internal + \qmlabstract + \inqmlmodule QtQuick.Controls.Private +*/ + +Loader { + id: itemDelegateLoader + + width: __column ? __column.width : 0 + height: parent ? parent.height : 0 + visible: __column ? __column.visible : false + + property bool isValid: false + sourceComponent: (__model === undefined || !isValid) ? null + : __column && __column.delegate ? __column.delegate : __itemDelegate + + // All these properties are internal + property int __index: index + property Item __rowItem: null + property var __model: __rowItem ? __rowItem.itemModel : undefined + property var __modelData: __rowItem ? __rowItem.itemModelData : undefined + property TableViewColumn __column: null + property Component __itemDelegate: null + property var __mouseArea: null + property var __style: null + + // These properties are exposed to the item delegate + readonly property var model: __model + readonly property var modelData: __modelData + + property QtObject styleData: QtObject { + readonly property int row: __rowItem ? __rowItem.rowIndex : -1 + readonly property int column: __index + readonly property int elideMode: __column ? __column.elideMode : Text.ElideLeft + readonly property int textAlignment: __column ? __column.horizontalAlignment : Text.AlignLeft + readonly property bool selected: __rowItem ? __rowItem.itemSelected : false + readonly property bool hasActiveFocus: __rowItem ? __rowItem.activeFocus : false + readonly property bool pressed: __mouseArea && row === __mouseArea.pressedRow && column === __mouseArea.pressedColumn + readonly property color textColor: __rowItem ? __rowItem.itemTextColor : "black" + readonly property string role: __column ? __column.role : "" + readonly property var value: model && model.hasOwnProperty(role) ? model[role] // Qml ListModel and QAbstractItemModel + : modelData && modelData.hasOwnProperty(role) ? modelData[role] // QObjectList / QObject + : modelData != undefined ? modelData : "" // Models without role + onRowChanged: if (row !== -1) itemDelegateLoader.isValid = true + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TableViewSelection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TableViewSelection.qml new file mode 100644 index 0000000..e8af9dd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TableViewSelection.qml @@ -0,0 +1,196 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +QtObject { + + property int count: 0 + signal selectionChanged + + property bool __dirty: false + property var __ranges: [] + + function forEach (callback) { + if (!(callback instanceof Function)) { + console.warn("TableViewSelection.forEach: argument is not a function") + return; + } + __forEach(callback, -1) + } + + function contains(index) { + for (var i = 0 ; i < __ranges.length ; ++i) { + if (__ranges[i][0] <= index && index <= __ranges[i][1]) + return true; + else if (__ranges[i][0] > index) + return false; + } + return false; + } + + function clear() { + __ranges = [] + __dirty = true + count = 0 + selectionChanged() + } + + function selectAll() { select(0, rowCount - 1) } + function select(first, last) { __select(true, first, last) } + function deselect(first, last) { __select(false, first, last) } + + // --- private section --- + + function __printRanges() { + var out = "" + for (var i = 0 ; i < __ranges.length ; ++ i) + out += ("{" + __ranges[i][0] + "," + __ranges[i][1] + "} ") + print(out) + } + + function __count() { + var sum = 0 + for (var i = 0 ; i < __ranges.length ; ++i) { + sum += (1 + __ranges[i][1] - __ranges[i][0]) + } + return sum + } + + function __forEach (callback, startIndex) { + __dirty = false + var i, j + + for (i = 0 ; i < __ranges.length && !__dirty ; ++i) { + for (j = __ranges[i][0] ; !__dirty && j <= __ranges[i][1] ; ++j) { + if (j >= startIndex) + callback.call(this, j) + } + } + + // Restart iteration at last index if selection changed + if (__dirty) + return __forEach(callback, j) + } + + function __selectOne(index) { + __ranges = [[index, index]] + __dirty = true + count = 1 + selectionChanged(); + } + + function __select(select, first, last) { + + var i, range + var start = first + var stop = first + var startRangeIndex = -1 + var stopRangeIndex = -1 + var newRangePos = 0 + + if (first < 0 || last < 0 || first >= rowCount || last >=rowCount) { + console.warn("TableViewSelection: index out of range") + return + } + + if (last !== undefined) { + start = first <= last ? first : last + stop = first <= last ? last : first + } + + if (select) { + + // Find beginning and end ranges + for (i = 0 ; i < __ranges.length; ++ i) { + range = __ranges[i] + if (range[0] > stop + 1) continue; // above range + if (range[1] < start - 1) { // below range + newRangePos = i + 1 + continue; + } + if (startRangeIndex === -1) + startRangeIndex = i + stopRangeIndex = i + } + + if (startRangeIndex !== -1) + start = Math.min(__ranges[startRangeIndex][0], start) + if (stopRangeIndex !== -1) + stop = Math.max(__ranges[stopRangeIndex][1], stop) + + if (startRangeIndex === -1) + startRangeIndex = newRangePos + + __ranges.splice(Math.max(0, startRangeIndex), + 1 + stopRangeIndex - startRangeIndex, [start, stop]) + + } else { + + // Find beginning and end ranges + for (i = 0 ; i < __ranges.length; ++ i) { + range = __ranges[i] + if (range[1] < start) continue; // below range + if (range[0] > stop) continue; // above range + if (startRangeIndex === -1) + startRangeIndex = i + stopRangeIndex = i + } + + // Slice ranges accordingly + if (startRangeIndex >= 0 && stopRangeIndex >= 0) { + var startRange = __ranges[startRangeIndex] + var stopRange = __ranges[stopRangeIndex] + var length = 1 + stopRangeIndex - startRangeIndex + if (start <= startRange[0] && stop >= stopRange[1]) { //remove + __ranges.splice(startRangeIndex, length) + } else if (start - 1 < startRange[0] && stop <= stopRange[1]) { //cut front + __ranges.splice(startRangeIndex, length, [stop + 1, stopRange[1]]) + } else if (start - 1 < startRange[1] && stop >= stopRange[1]) { // cut back + __ranges.splice(startRangeIndex, length, [startRange[0], start - 1]) + } else { //split + __ranges.splice(startRangeIndex, length, [startRange[0], start - 1], [stop + 1, stopRange[1]]) + } + } + } + __dirty = true + count = __count() // forces a re-evaluation of indexes in the delegates + selectionChanged() + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextHandle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextHandle.qml new file mode 100644 index 0000000..45e97f7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextHandle.qml @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Loader { + id: handle + + property Item editor + property int minimum: -1 + property int maximum: -1 + property int position: -1 + property alias delegate: handle.sourceComponent + + readonly property alias pressed: mouse.pressed + + readonly property real handleX: x + (item ? item.x : 0) + readonly property real handleY: y + (item ? item.y : 0) + readonly property real handleWidth: item ? item.width : 0 + readonly property real handleHeight: item ? item.height : 0 + + property Item control + property QtObject styleData: QtObject { + id: styleData + signal activated() + readonly property alias pressed: mouse.pressed + readonly property alias position: handle.position + readonly property bool hasSelection: editor.selectionStart !== editor.selectionEnd + readonly property real lineHeight: position !== -1 ? editor.positionToRectangle(position).height + : editor.cursorRectangle.height + } + + function activate() { + styleData.activated() + } + + MouseArea { + id: mouse + anchors.fill: item + enabled: item && item.visible + preventStealing: true + property real pressX + property point offset + property bool handleDragged: false + + onPressed: { + Qt.inputMethod.commit() + handleDragged = false + pressX = mouse.x + var handleRect = editor.positionToRectangle(handle.position) + var centerX = handleRect.x + (handleRect.width / 2) + var centerY = handleRect.y + (handleRect.height / 2) + var center = mapFromItem(editor, centerX, centerY) + offset = Qt.point(mouseX - center.x, mouseY - center.y) + } + onReleased: { + if (!handleDragged) { + // The user just clicked on the handle. In that + // case clear the selection. + var mousePos = editor.mapFromItem(item, mouse.x, mouse.y) + var editorPos = editor.positionAt(mousePos.x, mousePos.y) + editor.select(editorPos, editorPos) + } + } + onPositionChanged: { + handleDragged = true + var pt = mapToItem(editor, mouse.x - offset.x, mouse.y - offset.y) + + // limit vertically within mix/max coordinates or content bounds + var min = (minimum !== -1) ? minimum : 0 + var max = (maximum !== -1) ? maximum : editor.length + pt.y = Math.max(pt.y, editor.positionToRectangle(min).y) + pt.y = Math.min(pt.y, editor.positionToRectangle(max).y) + + var pos = editor.positionAt(pt.x, pt.y) + + // limit horizontally within min/max character positions + if (minimum !== -1) + pos = Math.max(pos, minimum) + pos = Math.max(pos, 0) + if (maximum !== -1) + pos = Math.min(pos, maximum) + pos = Math.min(pos, editor.length) + + handle.position = pos + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextInputWithHandles.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextInputWithHandles.qml new file mode 100644 index 0000000..ac78c26 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextInputWithHandles.qml @@ -0,0 +1,201 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Window 2.2 +import QtQuick.Controls.Private 1.0 + +TextInput { + id: input + + property Item control + property alias cursorHandle: cursorHandle.delegate + property alias selectionHandle: selectionHandle.delegate + + property bool blockRecursion: false + property bool hasSelection: selectionStart !== selectionEnd + readonly property int selectionPosition: selectionStart !== cursorPosition ? selectionStart : selectionEnd + readonly property alias containsMouse: mouseArea.containsMouse + property alias editMenu: editMenu + cursorDelegate: __style && __style.__cursorDelegate ? __style.__cursorDelegate : null + + selectByMouse: control.selectByMouse && (!Settings.isMobile || !cursorHandle.delegate || !selectionHandle.delegate) + + // force re-evaluation when selection moves: + // - cursorRectangle changes => content scrolled + // - contentWidth changes => text layout changed + property rect selectionRectangle: cursorRectangle.x && contentWidth ? positionToRectangle(selectionPosition) + : positionToRectangle(selectionPosition) + + onSelectionStartChanged: syncHandlesWithSelection() + onCursorPositionChanged: syncHandlesWithSelection() + + function syncHandlesWithSelection() + { + if (!blockRecursion && selectionHandle.delegate) { + blockRecursion = true + // We cannot use property selectionPosition since it gets updated after onSelectionStartChanged + cursorHandle.position = cursorPosition + selectionHandle.position = (selectionStart !== cursorPosition) ? selectionStart : selectionEnd + blockRecursion = false + } + } + + function activate() { + if (activeFocusOnPress) { + forceActiveFocus() + if (!readOnly) + Qt.inputMethod.show() + } + cursorHandle.activate() + selectionHandle.activate() + } + + function moveHandles(cursor, selection) { + blockRecursion = true + cursorPosition = cursor + if (selection === -1) { + selectWord() + selection = selectionStart + } + selectionHandle.position = selection + cursorHandle.position = cursorPosition + blockRecursion = false + } + + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: Settings.hoverEnabled + cursorShape: Qt.IBeamCursor + acceptedButtons: (input.selectByMouse ? Qt.NoButton : Qt.LeftButton) | (control.menu ? Qt.RightButton : Qt.NoButton) + onClicked: { + if (editMenu.item) + return; + var pos = input.positionAt(mouse.x, mouse.y) + input.moveHandles(pos, pos) + input.activate() + } + onPressAndHold: { + if (editMenu.item) + return; + var pos = input.positionAt(mouse.x, mouse.y) + input.moveHandles(pos, control.selectByMouse ? -1 : pos) + input.activate() + } + } + + EditMenu { + id: editMenu + input: parent + mouseArea: mouseArea + control: parent.control + cursorHandle: cursorHandle + selectionHandle: selectionHandle + anchors.fill: parent + } + + ScenePosListener { + id: listener + item: input + enabled: input.activeFocus && Qt.platform.os !== "ios" && Settings.isMobile + } + + TextHandle { + id: selectionHandle + + editor: input + z: 1000001 // DefaultWindowDecoration+1 + parent: !input.activeFocus || Qt.platform.os === "ios" ? control : Window.contentItem // float (QTBUG-42538) + control: input.control + active: control.selectByMouse && Settings.isMobile + maximum: cursorHandle.position - 1 + + readonly property var mappedOrigin: editor.mapToItem(parent, 0,0) + + // Mention scenePos in the mappedPos binding to force re-evaluation if it changes + readonly property var mappedPos: listener.scenePos.x !== listener.scenePos.y !== Number.MAX_VALUE ? + editor.mapToItem(parent, editor.selectionRectangle.x, editor.selectionRectangle.y) : -1 + x: mappedPos.x + y: mappedPos.y + + visible: pressed || (input.hasSelection && handleX + handleWidth >= -1 && handleX - mappedOrigin.x <= control.width + 1) + + onPositionChanged: { + if (!input.blockRecursion) { + input.blockRecursion = true + input.select(selectionHandle.position, cursorHandle.position) + if (pressed) + input.ensureVisible(position) + input.blockRecursion = false + } + } + } + + TextHandle { + id: cursorHandle + + editor: input + z: 1000001 // DefaultWindowDecoration+1 + parent: !input.activeFocus || Qt.platform.os === "ios" ? control : Window.contentItem // float (QTBUG-42538) + control: input.control + active: control.selectByMouse && Settings.isMobile + minimum: input.hasSelection ? selectionHandle.position + 1 : -1 + + readonly property var mappedOrigin: editor.mapToItem(parent, 0,0) + + // Mention scenePos in the mappedPos binding to force re-evaluation if it changes + readonly property var mappedPos: listener.scenePos.x !== listener.scenePos.y !== Number.MAX_VALUE ? + editor.mapToItem(parent, editor.cursorRectangle.x, editor.cursorRectangle.y) : -1 + x: mappedPos.x + y: mappedPos.y + + visible: pressed || ((input.cursorVisible || input.hasSelection) && handleX + handleWidth >= -1 && handleX - mappedOrigin.x <= control.width + 1) + + onPositionChanged: { + if (!input.blockRecursion) { + input.blockRecursion = true + if (!input.hasSelection) + selectionHandle.position = cursorHandle.position + input.select(selectionHandle.position, cursorHandle.position) + input.blockRecursion = false + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextSingleton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextSingleton.qml new file mode 100644 index 0000000..8325469 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TextSingleton.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.2 +Text { +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ToolMenuButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ToolMenuButton.qml new file mode 100644 index 0000000..e6fba40 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/ToolMenuButton.qml @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.4 +import QtQuick.Controls 1.3 +import QtQuick.Controls.Private 1.0 + +FocusScope { + id: button + + property Menu menu + readonly property bool pressed: behavior.containsPress || behavior.keyPressed + readonly property alias hovered: behavior.containsMouse + + property alias panel: loader.sourceComponent + property alias __panel: loader.item + + activeFocusOnTab: true + Accessible.role: Accessible.Button + implicitWidth: __panel ? __panel.implicitWidth : 0 + implicitHeight: __panel ? __panel.implicitHeight : 0 + + Loader { + id: loader + anchors.fill: parent + property QtObject styleData: QtObject { + readonly property alias pressed: button.pressed + readonly property alias hovered: button.hovered + readonly property alias activeFocus: button.activeFocus + } + onStatusChanged: if (status === Loader.Error) console.error("Failed to load Style for", button) + } + + Keys.onPressed: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat && !behavior.keyPressed) + behavior.keyPressed = true + } + Keys.onReleased: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat && behavior.keyPressed) + behavior.keyPressed = false + } + onFocusChanged: { + if (!focus) + behavior.keyPressed = false + } + onPressedChanged: { + if (!Settings.hasTouchScreen && !pressed && menu) + popupMenuTimer.start() + } + + MouseArea { + id: behavior + property bool keyPressed: false + + anchors.fill: parent + enabled: !keyPressed + hoverEnabled: Settings.hoverEnabled + + onReleased: { + if (Settings.hasTouchScreen && containsMouse && menu) + popupMenuTimer.start() + } + + Timer { + id: popupMenuTimer + interval: 10 + onTriggered: { + behavior.keyPressed = false + if (Qt.application.layoutDirection === Qt.RightToLeft) + menu.__popup(Qt.rect(button.width, button.height, 0, 0), 0) + else + menu.__popup(Qt.rect(0, 0, button.width, button.height), 0) + } + } + } + + Qml.Binding { + target: menu + property: "__minimumWidth" + value: button.width + restoreMode: Binding.RestoreBinding + } + + Qml.Binding { + target: menu + property: "__visualItem" + value: button + restoreMode: Binding.RestoreBinding + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TreeViewItemDelegateLoader.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TreeViewItemDelegateLoader.qml new file mode 100644 index 0000000..ed9566a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/TreeViewItemDelegateLoader.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype TreeViewItemDelegateLoader + \internal + \qmlabstract + \inqmlmodule QtQuick.Controls.Private +*/ + +TableViewItemDelegateLoader { + id: itemDelegateLoader + + /* \internal */ + readonly property int __itemIndentation: __style && __index === 0 + ? __style.__indentation * (styleData.depth + 1) : 0 + /* \internal */ + property TreeModelAdaptor __treeModel: null + + // Exposed to the item delegate + styleData: QtObject { + readonly property int row: __rowItem ? __rowItem.rowIndex : -1 + readonly property int column: __index + readonly property int elideMode: __column ? __column.elideMode : Text.ElideLeft + readonly property int textAlignment: __column ? __column.horizontalAlignment : Text.AlignLeft + readonly property bool selected: __rowItem ? __rowItem.itemSelected : false + readonly property bool hasActiveFocus: __rowItem ? __rowItem.activeFocus : false + readonly property bool pressed: __mouseArea && row === __mouseArea.pressedRow && column === __mouseArea.pressedColumn + readonly property color textColor: __rowItem ? __rowItem.itemTextColor : "black" + readonly property string role: __column ? __column.role : "" + readonly property var value: model && model.hasOwnProperty(role) ? model[role] : "" + readonly property var index: model ? model["_q_TreeView_ModelIndex"] : __treeModel.index(-1,-1) + readonly property int depth: model && column === 0 ? model["_q_TreeView_ItemDepth"] : 0 + readonly property bool hasChildren: model ? model["_q_TreeView_HasChildren"] : false + readonly property bool hasSibling: model ? model["_q_TreeView_HasSibling"] : false + readonly property bool isExpanded: model ? model["_q_TreeView_ItemExpanded"] : false + } + + onLoaded: { + item.x = Qt.binding(function() { return __itemIndentation}) + item.width = Qt.binding(function() { return width - __itemIndentation }) + } + + Loader { + id: branchDelegateLoader + active: __model !== undefined + && __index === 0 + && styleData.hasChildren + visible: itemDelegateLoader.width > __itemIndentation + sourceComponent: __style && __style.__branchDelegate || null + anchors.right: parent.item ? parent.item.left : undefined + anchors.rightMargin: __style.__indentation > width ? (__style.__indentation - width) / 2 : 0 + anchors.verticalCenter: parent.verticalCenter + property QtObject styleData: itemDelegateLoader.styleData + onLoaded: if (__rowItem) __rowItem.branchDecoration = item + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/qmldir new file mode 100644 index 0000000..9fe8420 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/qmldir @@ -0,0 +1,37 @@ +module QtQuick.Controls.Private +AbstractCheckable 1.0 AbstractCheckable.qml +CalendarHeaderModel 1.0 CalendarHeaderModel.qml +Control 1.0 Control.qml +CalendarUtils 1.0 CalendarUtils.js +FocusFrame 1.0 FocusFrame.qml +Margins 1.0 Margins.qml +BasicButton 1.0 BasicButton.qml +ScrollBar 1.0 ScrollBar.qml +ScrollViewHelper 1.0 ScrollViewHelper.qml +Style 1.0 Style.qml +MenuItemSubControls 1.0 MenuItemSubControls.qml +TabBar 1.0 TabBar.qml +StackViewSlideDelegate 1.0 StackViewSlideDelegate.qml +StyleHelpers 1.0 style.js +JSArray 1.0 StackView.js +TableViewSelection 1.0 TableViewSelection.qml +FastGlow 1.0 FastGlow.qml +SourceProxy 1.0 SourceProxy.qml +GroupBoxStyle 1.0 ../Styles/Base/GroupBoxStyle.qml +FocusFrameStyle 1.0 ../Styles/Base/FocusFrameStyle.qml +ToolButtonStyle 1.0 ../Styles/Base/ToolButtonStyle.qml +MenuContentItem 1.0 MenuContentItem.qml +MenuContentScroller 1.0 MenuContentScroller.qml +ColumnMenuContent 1.0 ColumnMenuContent.qml +ContentItem 1.0 ContentItem.qml +HoverButton 1.0 HoverButton.qml +singleton SystemPaletteSingleton 1.0 SystemPaletteSingleton.qml +singleton TextSingleton 1.0 TextSingleton.qml +TextHandle 1.0 TextHandle.qml +TextInputWithHandles 1.0 TextInputWithHandles.qml +EditMenu 1.0 EditMenu.qml +EditMenu_base 1.0 EditMenu_base.qml +ToolMenuButton 1.0 ToolMenuButton.qml +BasicTableView 1.0 BasicTableView.qml +TableViewItemDelegateLoader 1.0 TableViewItemDelegateLoader.qml +TreeViewItemDelegateLoader 1.0 TreeViewItemDelegateLoader.qml diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/style.js b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/style.js new file mode 100644 index 0000000..844fdbd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Private/style.js @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +.pragma library + +function underlineAmpersands(match, p1, p2, p3) { + if (p2 === "&") + return p1.concat(p2, p3) + return p1.concat("", p2, "", p3) +} + +function removeAmpersands(match, p1, p2, p3) { + return p1.concat(p2, p3) +} + +function replaceAmpersands(text, replaceFunction) { + return text.replace(/([^&]*)&(.)([^&]*)/g, replaceFunction) +} + +function stylizeMnemonics(text) { + return replaceAmpersands(text, underlineAmpersands) +} + +function removeMnemonics(text) { + return replaceAmpersands(text, removeAmpersands) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ProgressBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ProgressBar.qml new file mode 100644 index 0000000..9171f7d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ProgressBar.qml @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ProgressBar + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief A progress indicator. + + \image progressbar.png + + The ProgressBar is used to give an indication of the progress of an operation. + \l value is updated regularly and must be between \l minimumValue and \l maximumValue. + + \code + Column { + ProgressBar { + value: 0.5 + } + ProgressBar { + indeterminate: true + } + } + \endcode + + You can create a custom appearance for a ProgressBar by + assigning a \l {ProgressBarStyle}. +*/ + +Control { + id: progressbar + + /*! This property holds the progress bar's current value. + Attempting to change the current value to one outside the minimum-maximum + range has no effect on the current value. + + The default value is \c{0}. + */ + property real value: 0 + + /*! This property is the progress bar's minimum value. + The \l value is clamped to this value. + The default value is \c{0}. + */ + property real minimumValue: 0 + + /*! This property is the progress bar's maximum value. + The \l value is clamped to this value. + If maximumValue is smaller than \l minimumValue, \l minimumValue will be enforced. + The default value is \c{1}. + */ + property real maximumValue: 1 + + /*! This property toggles indeterminate mode. + When the actual progress is unknown, use this option. + The progress bar will be animated as a busy indicator instead. + The default value is \c false. + */ + property bool indeterminate: false + + /*! \qmlproperty enumeration orientation + + This property holds the orientation of the progress bar. + + \list + \li Qt.Horizontal - Horizontal orientation. (Default) + \li Qt.Vertical - Vertical orientation. + \endlist + */ + property int orientation: Qt.Horizontal + + /*! \qmlproperty bool ProgressBar::hovered + + This property indicates whether the control is being hovered. + */ + readonly property alias hovered: hoverArea.containsMouse + + /*! \internal */ + style: Settings.styleComponent(Settings.style, "ProgressBarStyle.qml", progressbar) + + /*! \internal */ + property bool __initialized: false + /*! \internal */ + onMaximumValueChanged: setValue(value) + /*! \internal */ + onMinimumValueChanged: setValue(value) + /*! \internal */ + onValueChanged: if (__initialized) setValue(value) + /*! \internal */ + Component.onCompleted: { + __initialized = true; + setValue(value) + } + + activeFocusOnTab: false + + Accessible.role: Accessible.ProgressBar + Accessible.name: value + + implicitWidth:(__panel ? __panel.implicitWidth : 0) + implicitHeight: (__panel ? __panel.implicitHeight: 0) + + MouseArea { + id: hoverArea + anchors.fill: parent + hoverEnabled: Settings.hoverEnabled + } + + /*! \internal */ + function setValue(v) { + var newval = parseFloat(v) + if (!isNaN(newval)) { + // we give minimumValue priority over maximum if they are inconsistent + if (newval > maximumValue) { + if (maximumValue >= minimumValue) + newval = maximumValue; + else + newval = minimumValue + } else if (v < minimumValue) { + newval = minimumValue + } + if (value !== newval) + value = newval + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/RadioButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/RadioButton.qml new file mode 100644 index 0000000..cc191f5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/RadioButton.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype RadioButton + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief A radio button with a text label. + + \image radiobutton.png + + A RadioButton is an option button that can be switched on (checked) or off + (unchecked). Radio buttons typically present the user with a "one of many" + choices. In a group of radio buttons, only one radio button can be + checked at a time; if the user selects another button, the previously + selected button is switched off. + + \qml + GroupBox { + title: "Tab Position" + + RowLayout { + ExclusiveGroup { id: tabPositionGroup } + RadioButton { + text: "Top" + checked: true + exclusiveGroup: tabPositionGroup + } + RadioButton { + text: "Bottom" + exclusiveGroup: tabPositionGroup + } + } + } + \endqml + + You can create a custom appearance for a RadioButton by + assigning a \l {RadioButtonStyle}. +*/ + +AbstractCheckable { + id: radioButton + + activeFocusOnTab: true + + Accessible.name: text + Accessible.role: Accessible.RadioButton + + /*! + The style that should be applied to the radio button. Custom style + components can be created with: + + \codeline Qt.createComponent("path/to/style.qml", radioButtonId); + */ + style: Settings.styleComponent(Settings.style, "RadioButtonStyle.qml", radioButton) + + __cycleStatesHandler: function() { checked = !checked; } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ScrollView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ScrollView.qml new file mode 100644 index 0000000..f79cfc8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ScrollView.qml @@ -0,0 +1,374 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.1 + +/*! + \qmltype ScrollView + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup views + \ingroup controls + \brief Provides a scrolling view within another Item. + + \image scrollview.png + + A ScrollView can be used either to replace a \l Flickable or decorate an + existing \l Flickable. Depending on the platform, it will add scroll bars and + a content frame. + + Only one Item can be a direct child of the ScrollView and the child is implicitly anchored + to fill the scroll view. + + Example: + \code + ScrollView { + Image { source: "largeImage.png" } + } + \endcode + + In the previous example the Image item will implicitly get scroll behavior as if it was + used within a \l Flickable. The width and height of the child item will be used to + define the size of the content area. + + Example: + \code + ScrollView { + ListView { + ... + } + } + \endcode + + In this case the content size of the ScrollView will simply mirror that of its contained + \l flickableItem. + + You can create a custom appearance for a ScrollView by + assigning a \l {ScrollViewStyle}. +*/ + +FocusScope { + id: root + + implicitWidth: 240 + implicitHeight: 150 + + /*! + This property tells the ScrollView if it should render + a frame around its content. + + The default value is \c false. + */ + property bool frameVisible: false + + /*! \qmlproperty enumeration ScrollView::horizontalScrollBarPolicy + \since QtQuick.Controls 1.3 + + This property holds the policy for showing the horizontal scrollbar. + It can be any of the following values: + \list + \li Qt.ScrollBarAsNeeded + \li Qt.ScrollBarAlwaysOff + \li Qt.ScrollBarAlwaysOn + \endlist + + The default policy is \c Qt.ScrollBarAsNeeded. + */ + property alias horizontalScrollBarPolicy: scroller.horizontalScrollBarPolicy + + /*! \qmlproperty enumeration ScrollView::verticalScrollBarPolicy + \since QtQuick.Controls 1.3 + + This property holds the policy for showing the vertical scrollbar. + It can be any of the following values: + \list + \li Qt.ScrollBarAsNeeded + \li Qt.ScrollBarAlwaysOff + \li Qt.ScrollBarAlwaysOn + \endlist + + The default policy is \c Qt.ScrollBarAsNeeded. + */ + property alias verticalScrollBarPolicy: scroller.verticalScrollBarPolicy + + /*! + This property controls if there should be a highlight + around the frame when the ScrollView has input focus. + + The default value is \c false. + + \note This property is only applicable on some platforms, such + as Mac OS. + */ + property bool highlightOnFocus: false + + /*! + \qmlproperty Item ScrollView::viewport + + The viewport determines the current "window" on the contentItem. + In other words, it clips it and the size of the viewport tells you + how much of the content area is visible. + */ + property alias viewport: viewportItem + + /*! + \qmlproperty Item ScrollView::flickableItem + + The flickableItem of the ScrollView. If the contentItem provided + to the ScrollView is a Flickable, it will be the \l contentItem. + */ + readonly property alias flickableItem: internal.flickableItem + + /*! + The contentItem of the ScrollView. This is set by the user. + + Note that the definition of contentItem is somewhat different to that + of a Flickable, where the contentItem is implicitly created. + */ + default property Item contentItem + + /*! \internal */ + property alias __scroller: scroller + /*! \internal */ + property alias __verticalScrollbarOffset: scroller.verticalScrollbarOffset + /*! \internal */ + property alias __wheelAreaScrollSpeed: wheelArea.scrollSpeed + /*! \internal */ + property int __scrollBarTopMargin: 0 + /*! \internal */ + property int __viewTopMargin: 0 + /*! \internal */ + property alias __horizontalScrollBar: scroller.horizontalScrollBar + /*! \internal */ + property alias __verticalScrollBar: scroller.verticalScrollBar + /*! \qmlproperty Component ScrollView::style + + The style Component for this control. + \sa {Qt Quick Controls 1 Styles QML Types} + + */ + property Component style: Settings.styleComponent(Settings.style, "ScrollViewStyle.qml", root) + + /*! \internal */ + property Style __style: styleLoader.item + + activeFocusOnTab: false + + onContentItemChanged: { + + if (contentItem.hasOwnProperty("contentY") && // Check if flickable + contentItem.hasOwnProperty("contentHeight")) { + internal.flickableItem = contentItem // "Use content if it is a flickable + internal.flickableItem.parent = viewportItem + } else { + internal.flickableItem = flickableComponent.createObject(viewportItem) + contentItem.parent = internal.flickableItem.contentItem + } + internal.flickableItem.anchors.fill = viewportItem + if (!Settings.hasTouchScreen) + internal.flickableItem.interactive = false + } + + + children: Item { + id: internal + + property Flickable flickableItem + + Loader { + id: styleLoader + sourceComponent: style + onStatusChanged: { + if (status === Loader.Error) + console.error("Failed to load Style for", root) + } + property alias __control: root + } + + Qml.Binding { + target: flickableItem + property: "contentHeight" + when: contentItem !== flickableItem + value: contentItem ? contentItem.height : 0 + restoreMode: Binding.RestoreBinding + } + + Qml.Binding { + target: flickableItem + when: contentItem !== flickableItem + property: "contentWidth" + value: contentItem ? contentItem.width : 0 + restoreMode: Binding.RestoreBinding + } + + Connections { + target: flickableItem + + function onContentYChanged() { + scroller.blockUpdates = true + scroller.verticalScrollBar.value = flickableItem.contentY - flickableItem.originY + scroller.blockUpdates = false + } + + function onContentXChanged() { + scroller.blockUpdates = true + scroller.horizontalScrollBar.value = flickableItem.contentX - flickableItem.originX + scroller.blockUpdates = false + } + + } + + anchors.fill: parent + + Component { + id: flickableComponent + Flickable {} + } + + WheelArea { + id: wheelArea + parent: flickableItem + z: -1 + // ### Note this is needed due to broken mousewheel behavior in Flickable. + + anchors.fill: parent + + property int acceleration: 40 + property int flickThreshold: Settings.dragThreshold + property real speedThreshold: 3 + property real ignored: 0.001 // ## flick() does not work with 0 yVelocity + property int maxFlick: 400 + + property bool horizontalRecursionGuard: false + property bool verticalRecursionGuard: false + + horizontalMinimumValue: 0 + horizontalMaximumValue: flickableItem ? flickableItem.contentWidth - viewport.width : 0 + onHorizontalMaximumValueChanged: { + wheelArea.horizontalRecursionGuard = true + //if horizontalMaximumValue changed, horizontalValue may be actually synced with + wheelArea.horizontalValue = flickableItem.contentX - flickableItem.originX; + wheelArea.horizontalRecursionGuard = false + } + + verticalMinimumValue: 0 + verticalMaximumValue: flickableItem ? flickableItem.contentHeight - viewport.height + __viewTopMargin : 0 + onVerticalMaximumValueChanged: { + wheelArea.verticalRecursionGuard = true + //if verticalMaximumValue changed, verticalValue may be actually synced with + wheelArea.verticalValue = flickableItem.contentY - flickableItem.originY; + wheelArea.verticalRecursionGuard = false + } + + // The default scroll speed for typical angle-based mouse wheels. The value + // comes originally from QTextEdit, which sets 20px steps by default, as well as + // QQuickWheelArea. + // TODO: centralize somewhere, QPlatformTheme? + scrollSpeed: 20 * (__style && __style.__wheelScrollLines || 1) + + Connections { + target: flickableItem + + function onContentYChanged() { + wheelArea.verticalRecursionGuard = true + wheelArea.verticalValue = flickableItem.contentY - flickableItem.originY + wheelArea.verticalRecursionGuard = false + } + function onContentXChanged() { + wheelArea.horizontalRecursionGuard = true + wheelArea.horizontalValue = flickableItem.contentX - flickableItem.originX + wheelArea.horizontalRecursionGuard = false + } + } + + onVerticalValueChanged: { + if (!verticalRecursionGuard) { + var effectiveContentY = flickableItem.contentY - flickableItem.originY + if (effectiveContentY < flickThreshold && verticalDelta > speedThreshold) { + flickableItem.flick(ignored, Math.min(maxFlick, acceleration * verticalDelta)) + } else if (effectiveContentY > flickableItem.contentHeight - flickThreshold - viewport.height + && verticalDelta < -speedThreshold) { + flickableItem.flick(ignored, Math.max(-maxFlick, acceleration * verticalDelta)) + } else { + flickableItem.contentY = verticalValue + flickableItem.originY + } + } + } + + onHorizontalValueChanged: { + if (!horizontalRecursionGuard) + flickableItem.contentX = horizontalValue + flickableItem.originX + } + } + + ScrollViewHelper { + id: scroller + anchors.fill: parent + active: wheelArea.active + property bool outerFrame: !frameVisible || !(__style ? __style.__externalScrollBars : 0) + property int scrollBarSpacing: outerFrame ? 0 : (__style ? __style.__scrollBarSpacing : 0) + property int verticalScrollbarOffset: verticalScrollBar.visible && !verticalScrollBar.isTransient ? + verticalScrollBar.width + scrollBarSpacing : 0 + property int horizontalScrollbarOffset: horizontalScrollBar.visible && !horizontalScrollBar.isTransient ? + horizontalScrollBar.height + scrollBarSpacing : 0 + Loader { + id: frameLoader + sourceComponent: __style ? __style.frame : null + anchors.fill: parent + anchors.rightMargin: scroller.outerFrame ? 0 : scroller.verticalScrollbarOffset + anchors.bottomMargin: scroller.outerFrame ? 0 : scroller.horizontalScrollbarOffset + } + + Item { + id: viewportItem + anchors.fill: frameLoader + anchors.topMargin: frameVisible ? __style.padding.top : 0 + anchors.leftMargin: frameVisible ? __style.padding.left : 0 + anchors.rightMargin: (frameVisible ? __style.padding.right : 0) + (scroller.outerFrame ? scroller.verticalScrollbarOffset : 0) + anchors.bottomMargin: (frameVisible ? __style.padding.bottom : 0) + (scroller.outerFrame ? scroller.horizontalScrollbarOffset : 0) + clip: true + } + } + FocusFrame { visible: highlightOnFocus && root.activeFocus } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Slider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Slider.qml new file mode 100644 index 0000000..ff2f0c2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Slider.qml @@ -0,0 +1,347 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype Slider + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief Provides a vertical or horizontal slider control. + + \image slider.png + + The slider is the classic control for providing a bounded value. It lets + the user move a slider handle along a horizontal or vertical groove + and translates the handle's position into a value within the legal range. + + \code + Slider { + value: 0.5 + } + \endcode + + The slider value is by default in the range [0, 1]. If integer values are + needed, you can set the \l stepSize. + + You can create a custom appearance for a Slider by + assigning a \l {SliderStyle}. +*/ + +Control { + id: slider + + /*! + \qmlproperty enumeration Slider::orientation + + This property holds the layout orientation of the slider. + The default value is \c Qt.Horizontal. + */ + property int orientation: Qt.Horizontal + + /*! + \qmlproperty real Slider::minimumValue + + This property holds the minimum value of the slider. + The default value is \c{0.0}. + */ + property alias minimumValue: range.minimumValue + + /*! + \qmlproperty real Slider::maximumValue + + This property holds the maximum value of the slider. + The default value is \c{1.0}. + */ + property alias maximumValue: range.maximumValue + + /*! + \qmlproperty bool Slider::updateValueWhileDragging + + This property indicates whether the current \l value should be updated while + the user is moving the slider handle, or only when the button has been released. + This property could for instance be modified if changing the slider value would turn + out to be too time consuming. + + The default value is \c true. + */ + property bool updateValueWhileDragging: true + + /*! + \qmlproperty bool Slider::pressed + + This property indicates whether the slider handle is being pressed. + */ + readonly property alias pressed: mouseArea.pressed + + /*! + \qmlproperty bool Slider::hovered + + This property indicates whether the slider handle is being hovered. + */ + readonly property alias hovered: mouseArea.handleHovered + + /*! + \qmlproperty real Slider::stepSize + + This property indicates the slider step size. + + A value of 0 indicates that the value of the slider operates in a + continuous range between \l minimumValue and \l maximumValue. + + Any non 0 value indicates a discrete stepSize. The following example + will generate a slider with integer values in the range [0-5]. + + \qml + Slider { + maximumValue: 5.0 + stepSize: 1.0 + } + \endqml + + The default value is \c{0.0}. + */ + property alias stepSize: range.stepSize + + /*! + \qmlproperty real Slider::value + + This property holds the current value of the slider. + The default value is \c{0.0}. + */ + property alias value: range.value + + /*! + \qmlproperty bool Slider::activeFocusOnPress + + This property indicates whether the slider should receive active focus when + pressed. + */ + property bool activeFocusOnPress: false + + /*! + \qmlproperty bool Slider::tickmarksEnabled + + This property indicates whether the slider should display tickmarks + at step intervals. Tick mark spacing is calculated based on the + \l stepSize property. + + The default value is \c false. + + \note This property may be ignored on some platforms when using the native style (e.g. Android). + */ + property bool tickmarksEnabled: false + + /*! + \qmlproperty bool Slider::wheelEnabled + + This property determines whether the control handles wheel events. + The default value is \c true. + + \since QtQuick.Controls 1.6 + */ + property alias wheelEnabled: wheelarea.enabled + + /*! \internal */ + property bool __horizontal: orientation === Qt.Horizontal + + /*! \internal + The extra arguments positionAtMinimum and positionAtMaximum are there to force + re-evaluation of the handle position when the constraints change (QTBUG-41255), + and the same for range.minimumValue (QTBUG-51765) and range.maximumValue (QTBUG-63354). + */ + property real __handlePos: range.valueForPosition(__horizontal ? fakeHandle.x : fakeHandle.y, + range.positionAtMinimum, range.positionAtMaximum, range.minimumValue, range.maximumValue) + + activeFocusOnTab: true + + Accessible.role: Accessible.Slider + /*! \internal */ + function accessibleIncreaseAction() { + range.increaseSingleStep() + } + /*! \internal */ + function accessibleDecreaseAction() { + range.decreaseSingleStep() + } + + style: Settings.styleComponent(Settings.style, "SliderStyle.qml", slider) + + Keys.onRightPressed: if (__horizontal) range.increaseSingleStep() + Keys.onLeftPressed: if (__horizontal) range.decreaseSingleStep() + Keys.onUpPressed: if (!__horizontal) range.increaseSingleStep() + Keys.onDownPressed: if (!__horizontal) range.decreaseSingleStep() + + RangeModel { + id: range + minimumValue: 0.0 + maximumValue: 1.0 + value: 0 + stepSize: 0.0 + inverted: __horizontal ? false : true + + positionAtMinimum: 0 + positionAtMaximum: __horizontal ? slider.width - fakeHandle.width : slider.height - fakeHandle.height + } + + Item { + id: fakeHandle + anchors.verticalCenter: __horizontal ? parent.verticalCenter : undefined + anchors.horizontalCenter: !__horizontal ? parent.horizontalCenter : undefined + width: __panel.handleWidth + height: __panel.handleHeight + + function updatePos() { + if (updateValueWhileDragging && !mouseArea.drag.active) + range.position = __horizontal ? x : y + } + + onXChanged: updatePos(); + onYChanged: updatePos(); + } + + MouseArea { + id: mouseArea + + anchors.fill: parent + hoverEnabled: Settings.hoverEnabled + property int clickOffset: 0 + property real pressX: 0 + property real pressY: 0 + property bool handleHovered: false + + function clamp ( val ) { + return Math.max(range.positionAtMinimum, Math.min(range.positionAtMaximum, val)) + } + + function updateHandlePosition(mouse, force) { + var pos, overThreshold + if (__horizontal) { + pos = clamp (mouse.x + clickOffset - fakeHandle.width/2) + overThreshold = Math.abs(mouse.x - pressX) >= Settings.dragThreshold + if (overThreshold) + preventStealing = true + if (overThreshold || force) + fakeHandle.x = pos + } else if (!__horizontal) { + pos = clamp (mouse.y + clickOffset- fakeHandle.height/2) + overThreshold = Math.abs(mouse.y - pressY) >= Settings.dragThreshold + if (overThreshold) + preventStealing = true + if (overThreshold || force) + fakeHandle.y = pos + } + } + + onPositionChanged: { + if (pressed) + updateHandlePosition(mouse, !Settings.hasTouchScreen || preventStealing) + + var point = mouseArea.mapToItem(fakeHandle, mouse.x, mouse.y) + handleHovered = fakeHandle.contains(Qt.point(point.x, point.y)) + } + + onPressed: { + if (slider.activeFocusOnPress) + slider.forceActiveFocus(); + + if (handleHovered) { + var point = mouseArea.mapToItem(fakeHandle, mouse.x, mouse.y) + clickOffset = __horizontal ? fakeHandle.width/2 - point.x : fakeHandle.height/2 - point.y + } + pressX = mouse.x + pressY = mouse.y + updateHandlePosition(mouse, !Settings.hasTouchScreen) + } + + onReleased: { + updateHandlePosition(mouse, Settings.hasTouchScreen) + // If we don't update while dragging, this is the only + // moment that the range is updated. + if (!slider.updateValueWhileDragging) + range.position = __horizontal ? fakeHandle.x : fakeHandle.y; + clickOffset = 0 + preventStealing = false + } + + onExited: handleHovered = false + } + + + // During the drag, we simply ignore the position set from the range, this + // means that setting a value while dragging will not "interrupt" the + // dragging activity. + Qml.Binding { + when: !mouseArea.drag.active + target: fakeHandle + property: __horizontal ? "x" : "y" + value: range.position + restoreMode: Binding.RestoreBinding + } + + WheelArea { + id: wheelarea + anchors.fill: parent + verticalValue: slider.value + horizontalValue: slider.value + horizontalMinimumValue: slider.minimumValue + horizontalMaximumValue: slider.maximumValue + verticalMinimumValue: slider.minimumValue + verticalMaximumValue: slider.maximumValue + property real step: (slider.maximumValue - slider.minimumValue)/(range.positionAtMaximum - range.positionAtMinimum) + + onVerticalWheelMoved: { + if (verticalDelta !== 0) { + var delta = Math.abs(verticalDelta)*step > stepSize ? verticalDelta*step : verticalDelta/Math.abs(verticalDelta)*stepSize + range.position = range.positionForValue(value - delta * (inverted ? 1 : -1)) + } + } + + onHorizontalWheelMoved: { + if (horizontalDelta !== 0) { + var delta = Math.abs(horizontalDelta)*step > stepSize ? horizontalDelta*step : horizontalDelta/Math.abs(horizontalDelta)*stepSize + range.position = range.positionForValue(value + delta * (inverted ? 1 : -1)) + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/SpinBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/SpinBox.qml new file mode 100644 index 0000000..b7ec6a8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/SpinBox.qml @@ -0,0 +1,397 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype SpinBox + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief Provides a spin box control. + + \image spinbox.png + + SpinBox allows the user to choose a value by clicking the up or down buttons, or by + pressing up or down on the keyboard. The user can also type the value in manually. + + By default the SpinBox provides discrete values in the range [0-99] with a \l stepSize of 1 and 0 \l decimals. + + \code + SpinBox { + id: spinbox + } + \endcode + + Note that if you require decimal values you will need to set the \l decimals to a non 0 value. + + \code + SpinBox { + id: spinbox + decimals: 2 + } + \endcode + +*/ + +Control { + id: spinbox + + /*! + \qmlproperty real SpinBox::value + + The value of this SpinBox, clamped to \l minimumValue and \l maximumValue. + + The default value is \c{0.0}. + */ + property alias value: validator.value + + /*! + \qmlproperty real SpinBox::minimumValue + + The minimum value of the SpinBox range. + The \l value is clamped to this value. + + The default value is \c{0.0}. + */ + property alias minimumValue: validator.minimumValue + + /*! + \qmlproperty real SpinBox::maximumValue + + The maximum value of the SpinBox range. + The \l value is clamped to this value. If maximumValue is smaller than + \l minimumValue, \l minimumValue will be enforced. + + The default value is \c{99}. + */ + property alias maximumValue: validator.maximumValue + + /*! \qmlproperty real SpinBox::stepSize + The amount by which the \l value is incremented/decremented when a + spin button is pressed. + + The default value is \c{1.0}. + */ + property alias stepSize: validator.stepSize + + /*! \qmlproperty string SpinBox::suffix + The suffix for the value. I.e "cm" */ + property alias suffix: validator.suffix + + /*! \qmlproperty string SpinBox::prefix + The prefix for the value. I.e "$" */ + property alias prefix: validator.prefix + + /*! \qmlproperty int SpinBox::decimals + This property indicates the amount of decimals. + Note that if you enter more decimals than specified, they will + be truncated to the specified amount of decimal places. + The default value is \c{0}. + */ + property alias decimals: validator.decimals + + /*! \qmlproperty font SpinBox::font + + This property indicates the current font used by the SpinBox. + */ + property alias font: input.font + + /*! + \qmlproperty int SpinBox::cursorPosition + \since QtQuick.Controls 1.5 + + This property holds the position of the cursor in the SpinBox. + */ + property alias cursorPosition: input.cursorPosition + + + /*! This property indicates whether the Spinbox should get active + focus when pressed. + The default value is \c true. + */ + property bool activeFocusOnPress: true + + /*! \qmlproperty enumeration horizontalAlignment + \since QtQuick.Controls 1.1 + + This property indicates how the content is horizontally aligned + within the text field. + + The supported values are: + \list + \li Qt.AlignLeft + \li Qt.AlignHCenter + \li Qt.AlignRight + \endlist + + The default value is style dependent. + */ + property int horizontalAlignment: __panel ? __panel.horizontalAlignment : Qt.AlignLeft + + /*! + \qmlproperty bool SpinBox::hovered + + This property indicates whether the control is being hovered. + */ + readonly property bool hovered: mouseArea.containsMouse || input.containsMouse + || mouseUp.containsMouse || mouseDown.containsMouse + + /*! + \qmlsignal SpinBox::editingFinished() + \since QtQuick.Controls 1.1 + + This signal is emitted when the Return or Enter key is pressed or + the control loses focus. + + The corresponding handler is \c onEditingFinished. + */ + signal editingFinished() + + /*! + \qmlproperty bool SpinBox::selectByMouse + \since QtQuick.Controls 1.3 + + This property determines if the user can select the text with the + mouse. + + The default value is \c true. + */ + property bool selectByMouse: true + + /*! + \qmlproperty bool SpinBox::inputMethodComposing + \since QtQuick.Controls 1.3 + + This property holds whether the SpinBox has partial text input from an input method. + + While it is composing an input method may rely on mouse or key events from the SpinBox + to edit or commit the partial text. This property can be used to determine when to disable + events handlers that may interfere with the correct operation of an input method. + */ + readonly property bool inputMethodComposing: !!input.inputMethodComposing + + /*! + \since QtQuick.Controls 1.3 + + This property contains the edit \l Menu for working + with text selection. Set it to \c null if no menu + is wanted. + */ + property Component menu: input.editMenu.defaultMenu + + style: Settings.styleComponent(Settings.style, "SpinBoxStyle.qml", spinbox) + + /*! \internal */ + function __increment() { + validator.increment() + if (activeFocus) + input.selectValue() + } + + /*! \internal */ + function __decrement() { + validator.decrement() + if (activeFocus) + input.selectValue() + } + + /*! \internal */ + property alias __text: input.text + + /*! \internal */ + property alias __baselineOffset: input.baselineOffset + + __styleData: QtObject { + readonly property bool upEnabled: value != maximumValue; + readonly property alias upHovered: mouseUp.containsMouse + readonly property alias upPressed: mouseUp.pressed + + readonly property bool downEnabled: value != minimumValue; + readonly property alias downPressed: mouseDown.pressed + readonly property alias downHovered: mouseDown.containsMouse + + readonly property int contentHeight: Math.max(input.implicitHeight, 16) + readonly property int contentWidth: Math.max(maxSizeHint.implicitWidth, minSizeHint.implicitWidth) + } + + Text { + id: maxSizeHint + text: prefix + maximumValue.toFixed(decimals) + suffix + font: input.font + visible: false + } + + Text { + id: minSizeHint + text: prefix + minimumValue.toFixed(decimals) + suffix + font: input.font + visible: false + } + + activeFocusOnTab: true + + onActiveFocusChanged: if (activeFocus) input.selectValue() + + Accessible.name: input.text + Accessible.role: Accessible.SpinBox + Accessible.editable: true + + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: Settings.hoverEnabled + onPressed: if (activeFocusOnPress) input.forceActiveFocus() + onWheel: { + if (wheel.angleDelta.y > 0) + __increment(); + else + __decrement(); + } + } + + TextInputWithHandles { + id: input + clip: contentWidth > width + anchors.fill: parent + anchors.leftMargin: __style ? __style.padding.left : 0 + anchors.topMargin: __style ? __style.padding.top : 0 + anchors.rightMargin: __style ? __style.padding.right: 0 + anchors.bottomMargin: __style ? __style.padding.bottom: 0 + + control: spinbox + cursorHandle: __style ? __style.__cursorHandle : undefined + selectionHandle: __style ? __style.__selectionHandle : undefined + + focus: true + activeFocusOnPress: spinbox.activeFocusOnPress + + horizontalAlignment: spinbox.horizontalAlignment + verticalAlignment: __panel ? __panel.verticalAlignment : Qt.AlignVCenter + inputMethodHints: Qt.ImhFormattedNumbersOnly + + validator: SpinBoxValidator { + id: validator + property bool ready: false // Delay validation until all properties are ready + onTextChanged: if (ready) input.text = validator.text + Component.onCompleted: {input.text = validator.text ; ready = true} + } + onAccepted: { + input.text = validator.text + selectValue() + } + + Keys.forwardTo: spinbox + + onEditingFinished: spinbox.editingFinished() + + font: __panel ? __panel.font : TextSingleton.font + color: __panel ? __panel.foregroundColor : "black" + selectionColor: __panel ? __panel.selectionColor : "black" + selectedTextColor: __panel ? __panel.selectedTextColor : "black" + + opacity: parent.enabled ? 1 : 0.5 + renderType: __style ? __style.renderType : Text.NativeRendering + + function selectValue() { + select(prefix.length, text.length - suffix.length) + } + } + + // Spinbox increment button + + MouseArea { + id: mouseUp + objectName: "mouseUp" + hoverEnabled: Settings.hoverEnabled + + property var upRect: __panel ? __panel.upRect : null + + anchors.left: parent.left + anchors.top: parent.top + + anchors.leftMargin: upRect ? upRect.x : 0 + anchors.topMargin: upRect ? upRect.y : 0 + + width: upRect ? upRect.width : 0 + height: upRect ? upRect.height : 0 + + onClicked: __increment() + onPressed: if (!Settings.hasTouchScreen && activeFocusOnPress) input.forceActiveFocus() + + property bool autoincrement: false; + onReleased: autoincrement = false + onExited: autoincrement = false + Timer { running: mouseUp.pressed; interval: 350 ; onTriggered: mouseUp.autoincrement = true } + Timer { running: mouseUp.autoincrement && mouseUp.containsMouse; interval: 60 ; repeat: true ; onTriggered: __increment() } + } + + // Spinbox decrement button + + MouseArea { + id: mouseDown + objectName: "mouseDown" + hoverEnabled: Settings.hoverEnabled + + onClicked: __decrement() + onPressed: if (!Settings.hasTouchScreen && activeFocusOnPress) input.forceActiveFocus() + + property var downRect: __panel ? __panel.downRect : null + + anchors.left: parent.left + anchors.top: parent.top + + anchors.leftMargin: downRect ? downRect.x : 0 + anchors.topMargin: downRect ? downRect.y : 0 + + width: downRect ? downRect.width : 0 + height: downRect ? downRect.height : 0 + + property bool autoincrement: false; + onReleased: autoincrement = false + onExited: autoincrement = false + Timer { running: mouseDown.pressed; interval: 350 ; onTriggered: mouseDown.autoincrement = true } + Timer { running: mouseDown.autoincrement && mouseDown.containsMouse; interval: 60 ; repeat: true ; onTriggered: __decrement() } + } + + Keys.onUpPressed: __increment() + Keys.onDownPressed: __decrement() +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/SplitView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/SplitView.qml new file mode 100644 index 0000000..471e70a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/SplitView.qml @@ -0,0 +1,633 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.0 +import QtQuick.Controls.Private 1.0 as Private +import QtQuick.Window 2.1 + +/*! + \qmltype SplitView + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup views + \ingroup controls + \brief Lays out items with a draggable splitter between each item. + + \image splitview.png + + SplitView is a control that lays out items horizontally or + vertically with a draggable splitter between each item. + + There will always be one (and only one) item in the SplitView that has \l{Layout::fillWidth}{Layout.fillWidth} + set to \c true (or \l{Layout::fillHeight}{Layout.fillHeight}, if orientation is Qt.Vertical). This means that the + item will get all leftover space when other items have been laid out. + By default, the last visible child of the SplitView will have this set, but + it can be changed by explicitly setting fillWidth to \c true on another item. + + As the fillWidth item will automatically be resized to fit the extra space, explicit assignments + to its width and height properties will be ignored (but \l{Layout::minimumWidth}{Layout.minimumWidth} and + \l{Layout::maximumWidth}{Layout.maximumWidth} will still be respected). + The initial sizes of other items should be set via their width and height properties. + Any binding assignment to an item's width or height will be broken as soon as the user + drags that item's splitter handle. + + A handle can belong to the item either on the left or top side, or on the right or bottom side: + \list + \li If the fillWidth item is to the right: the handle belongs to the left item. + \li if the fillWidth item is on the left: the handle belongs to the right item. + \endlist + + This will again control which item gets resized when the user drags a handle, + and which handle gets hidden when an item is told to hide. + + SplitView supports setting attached Layout properties on child items, which + means that you can set the following attached properties for each child: + \list + \li \l{Layout::minimumWidth}{Layout.minimumWidth} + \li \l{Layout::minimumHeight}{Layout.minimumHeight} + \li \l{Layout::maximumWidth}{Layout.maximumWidth} + \li \l{Layout::maximumHeight}{Layout.maximumHeight} + \li \l{Layout::fillWidth}{Layout.fillWidth} (\c true for only one child) + \li \l{Layout::fillHeight}{Layout.fillHeight} (\c true for only one child) + \endlist + + \note import QtQuick.Layouts 1.0 in your QML file in order to use the Layout + attached properties inside SplitView. + + Example: + + To create a SplitView with three items, and let the center item get superfluous space, one + could do the following: + + \qml + SplitView { + anchors.fill: parent + orientation: Qt.Horizontal + + Rectangle { + width: 200 + Layout.maximumWidth: 400 + color: "lightblue" + Text { + text: "View 1" + anchors.centerIn: parent + } + } + Rectangle { + id: centerItem + Layout.minimumWidth: 50 + Layout.fillWidth: true + color: "lightgray" + Text { + text: "View 2" + anchors.centerIn: parent + } + } + Rectangle { + width: 200 + color: "lightgreen" + Text { + text: "View 3" + anchors.centerIn: parent + } + } + } + + \endqml +*/ + +Item { + id: root + + /*! + \qmlproperty enumeration SplitView::orientation + + This property holds the orientation of the SplitView. + The value can be either \c Qt.Horizontal or \c Qt.Vertical. + The default value is \c Qt.Horizontal. + */ + property int orientation: Qt.Horizontal + + /*! + This property holds the delegate that will be instantiated between each + child item. Inside the delegate the following properties are available: + + \table + \row \li readonly property bool styleData.index \li Specifies the index of the splitter handle. The handle + between the first and the second item will get index 0, + the next handle index 1 etc. + \row \li readonly property bool styleData.hovered \li The handle is being hovered. + \row \li readonly property bool styleData.pressed \li The handle is being pressed. + \row \li readonly property bool styleData.resizing \li The handle is being dragged. + \endtable + +*/ + property Component handleDelegate: Rectangle { + width: 1 + height: 1 + color: Qt.darker(pal.window, 1.5) + } + + /*! + This propery is \c true when the user is resizing any of the items by + dragging on the splitter handles. + */ + property bool resizing: false + + /*! \internal */ + default property alias __contents: contents.data + /*! \internal */ + property alias __items: splitterItems.children + /*! \internal */ + property alias __handles: splitterHandles.children + + clip: true + Component.onCompleted: d.init() + onWidthChanged: d.updateLayout() + onHeightChanged: d.updateLayout() + onOrientationChanged: d.changeOrientation() + + /*! \qmlmethod void SplitView::addItem(Item item) + Add an \a item to the end of the view. + \since QtQuick.Controls 1.3 */ + function addItem(item) { + d.updateLayoutGuard = true + d.addItem_impl(item) + d.calculateImplicitSize() + d.updateLayoutGuard = false + d.updateFillIndex() + } + + /*! \qmlmethod void SplitView::removeItem(Item item) + Remove \a item from the view. + \since QtQuick.Controls 1.4 */ + function removeItem(item) { + d.updateLayoutGuard = true + var result = d.removeItem_impl(item) + if (result !== null) { + d.calculateImplicitSize() + d.updateLayoutGuard = false + d.updateFillIndex() + } + else { + d.updateLayoutGuard = false + } + } + + SystemPalette { id: pal } + + QtObject { + id: d + + readonly property string leftMargin: horizontal ? "leftMargin" : "topMargin" + readonly property string topMargin: horizontal ? "topMargin" : "leftMargin" + readonly property string rightMargin: horizontal ? "rightMargin" : "bottomMargin" + + property bool horizontal: orientation == Qt.Horizontal + readonly property string minimum: horizontal ? "minimumWidth" : "minimumHeight" + readonly property string maximum: horizontal ? "maximumWidth" : "maximumHeight" + readonly property string otherMinimum: horizontal ? "minimumHeight" : "minimumWidth" + readonly property string otherMaximum: horizontal ? "maximumHeight" : "maximumWidth" + readonly property string offset: horizontal ? "x" : "y" + readonly property string otherOffset: horizontal ? "y" : "x" + readonly property string size: horizontal ? "width" : "height" + readonly property string otherSize: horizontal ? "height" : "width" + readonly property string implicitSize: horizontal ? "implicitWidth" : "implicitHeight" + readonly property string implicitOtherSize: horizontal ? "implicitHeight" : "implicitWidth" + + property int fillIndex: -1 + property bool updateLayoutGuard: true + + function extraMarginSize(item, other) { + if (typeof(other) === 'undefined') + other = false; + if (other === horizontal) + // vertical + return item.Layout.topMargin + item.Layout.bottomMargin + return item.Layout.leftMargin + item.Layout.rightMargin + } + + function addItem_impl(item) + { + // temporarily set fillIndex to new item + fillIndex = __items.length + if (splitterItems.children.length > 0) + handleLoader.createObject(splitterHandles, {"__handleIndex":splitterItems.children.length - 1}) + + item.parent = splitterItems + d.initItemConnections(item) + } + + function initItemConnections(item) + { + // should match disconnections in terminateItemConnections + item.widthChanged.connect(d.updateLayout) + item.heightChanged.connect(d.updateLayout) + item.Layout.maximumWidthChanged.connect(d.updateLayout) + item.Layout.minimumWidthChanged.connect(d.updateLayout) + item.Layout.maximumHeightChanged.connect(d.updateLayout) + item.Layout.minimumHeightChanged.connect(d.updateLayout) + item.Layout.leftMarginChanged.connect(d.updateLayout) + item.Layout.topMarginChanged.connect(d.updateLayout) + item.Layout.rightMarginChanged.connect(d.updateLayout) + item.Layout.bottomMarginChanged.connect(d.updateLayout) + item.visibleChanged.connect(d.updateFillIndex) + item.Layout.fillWidthChanged.connect(d.updateFillIndex) + item.Layout.fillHeightChanged.connect(d.updateFillIndex) + } + + function terminateItemConnections(item) + { + // should match connections in initItemConnections + item.widthChanged.disconnect(d.updateLayout) + item.heightChanged.disconnect(d.updateLayout) + item.Layout.maximumWidthChanged.disconnect(d.updateLayout) + item.Layout.minimumWidthChanged.disconnect(d.updateLayout) + item.Layout.maximumHeightChanged.disconnect(d.updateLayout) + item.Layout.minimumHeightChanged.disconnect(d.updateLayout) + item.visibleChanged.disconnect(d.updateFillIndex) + item.Layout.fillWidthChanged.disconnect(d.updateFillIndex) + item.Layout.fillHeightChanged.disconnect(d.updateFillIndex) + } + + function removeItem_impl(item) + { + var pos = itemPos(item) + + // Check pos range + if (pos < 0 || pos >= __items.length) + return null + + // Temporary unset the fillIndex + fillIndex = __items.length - 1 + + // Remove the handle at the left/right of the item that + // is going to be removed + var handlePos = -1 + var hasPrevious = pos > 0 + var hasNext = (pos + 1) < __items.length + + if (hasPrevious) + handlePos = pos-1 + else if (hasNext) + handlePos = pos + if (handlePos >= 0) { + var handle = __handles[handlePos] + handle.visible = false + handle.parent = null + handle.destroy() + for (var i = handlePos; i < __handles.length; ++i) + __handles[i].__handleIndex = i + } + + // Remove the item. + // Disconnect the item to be removed + terminateItemConnections(item) + item.parent = null + + return item + } + + function itemPos(item) + { + for (var i = 0; i < __items.length; ++i) + if (item === __items[i]) + return i + return -1 + } + + function init() + { + for (var i=0; i<__contents.length; ++i) { + var item = __contents[i]; + if (!item.hasOwnProperty("x")) + continue + addItem_impl(item) + i-- // item was removed from list + } + + d.calculateImplicitSize() + d.updateLayoutGuard = false + d.updateFillIndex() + } + + function updateFillIndex() + { + if (lastItem.visible !== root.visible) + return + var policy = (root.orientation === Qt.Horizontal) ? "fillWidth" : "fillHeight" + for (var i=0; i<__items.length-1; ++i) { + if (__items[i].Layout[policy] === true) + break; + } + + d.fillIndex = i + d.updateLayout() + } + + function changeOrientation() + { + if (__items.length == 0) + return; + d.updateLayoutGuard = true + + // Swap width/height for items and handles: + for (var i=0; i<__items.length; ++i) { + var item = __items[i] + var tmp = item.x + item.x = item.y + item.y = tmp + tmp = item.width + item.width = item.height + item.height = tmp + + var handle = __handles[i] + if (handle) { + tmp = handle.x + handle.x = handle.y + handle.y = handle.x + tmp = handle.width + handle.width = handle.height + handle.height = tmp + } + } + + // Change d.horizontal explicit, since the binding will change too late: + d.horizontal = orientation == Qt.Horizontal + d.updateLayoutGuard = false + d.updateFillIndex() + } + + function calculateImplicitSize() + { + var implicitSize = 0 + var implicitOtherSize = 0 + + for (var i=0; i<__items.length; ++i) { + var item = __items[i]; + implicitSize += clampedMinMax(item[d.size], item.Layout[minimum], item.Layout[maximum]) + extraMarginSize(item) + var os = clampedMinMax(item[otherSize], item.Layout[otherMinimum], item.Layout[otherMaximum]) + extraMarginSize(item, true) + implicitOtherSize = Math.max(implicitOtherSize, os) + + var handle = __handles[i] + if (handle) + implicitSize += handle[d.size] //### Can handles have margins?? + } + + root[d.implicitSize] = implicitSize + root[d.implicitOtherSize] = implicitOtherSize + } + + function clampedMinMax(value, minimum, maximum) + { + if (value < minimum) + value = minimum + if (value > maximum) + value = maximum + return value + } + + function accumulatedSize(firstIndex, lastIndex, includeFillItemMinimum) + { + // Go through items and handles, and + // calculate their accummulated width. + var w = 0 + for (var i=firstIndex; i __handleIndex) + visible: __items[__handleIndex + (resizeLeftItem ? 0 : 1)].visible + sourceComponent: handleDelegate + onWidthChanged: d.updateLayout() + onHeightChanged: d.updateLayout() + onXChanged: moveHandle() + onYChanged: moveHandle() + + MouseArea { + id: mouseArea + anchors.fill: parent + property real defaultMargin: Private.Settings.hasTouchScreen ? Screen.pixelDensity * 3.5 : 2 + anchors.leftMargin: (parent.width <= 1) ? -defaultMargin : 0 + anchors.rightMargin: (parent.width <= 1) ? -defaultMargin : 0 + anchors.topMargin: (parent.height <= 1) ? -defaultMargin : 0 + anchors.bottomMargin: (parent.height <= 1) ? -defaultMargin : 0 + hoverEnabled: Private.Settings.hoverEnabled + drag.threshold: 0 + drag.target: parent + drag.axis: root.orientation === Qt.Horizontal ? Drag.XAxis : Drag.YAxis + cursorShape: root.orientation === Qt.Horizontal ? Qt.SplitHCursor : Qt.SplitVCursor + } + + function moveHandle() { + // Moving the handle means resizing an item. Which one, + // left or right, depends on where the fillItem is. + // 'updateLayout' will be overridden in case new width violates max/min. + // 'updateLayout' will be triggered when an item changes width. + if (d.updateLayoutGuard) + return + + var leftHandle, leftItem, rightItem, rightHandle + var leftEdge, rightEdge, newWidth, leftStopX, rightStopX + var i + + if (resizeLeftItem) { + // Ensure that the handle is not crossing other handles. So + // find the first visible handle to the left to determine the left edge: + leftEdge = 0 + for (i=__handleIndex-1; i>=0; --i) { + leftHandle = __handles[i] + if (leftHandle.visible) { + leftEdge = leftHandle[d.offset] + leftHandle[d.size] + break; + } + } + + // Ensure: leftStopX >= itemHandle[d.offset] >= rightStopX + var min = d.accumulatedSize(__handleIndex+1, __items.length, true) + rightStopX = root[d.size] - min - itemHandle[d.size] + leftStopX = Math.max(leftEdge, itemHandle[d.offset]) + itemHandle[d.offset] = Math.min(rightStopX, Math.max(leftStopX, itemHandle[d.offset])) + + newWidth = itemHandle[d.offset] - leftEdge + leftItem = __items[__handleIndex] + // The next line will trigger 'updateLayout': + leftItem[d.size] = newWidth + } else { + // Resize item to the right. + // Ensure that the handle is not crossing other handles. So + // find the first visible handle to the right to determine the right edge: + rightEdge = root[d.size] + for (i=__handleIndex+1; i<__handles.length; ++i) { + rightHandle = __handles[i] + if (rightHandle.visible) { + rightEdge = rightHandle[d.offset] + break; + } + } + + // Ensure: leftStopX <= itemHandle[d.offset] <= rightStopX + min = d.accumulatedSize(0, __handleIndex+1, true) + leftStopX = min - itemHandle[d.size] + rightStopX = Math.min((rightEdge - itemHandle[d.size]), itemHandle[d.offset]) + itemHandle[d.offset] = Math.max(leftStopX, Math.min(itemHandle[d.offset], rightStopX)) + + newWidth = rightEdge - (itemHandle[d.offset] + itemHandle[d.size]) + rightItem = __items[__handleIndex+1] + // The next line will trigger 'updateLayout': + rightItem[d.size] = newWidth + } + } + } + } + + Item { + id: contents + visible: false + anchors.fill: parent + } + Item { + id: splitterItems + anchors.fill: parent + } + Item { + id: splitterHandles + anchors.fill: parent + } + + Item { + id: lastItem + onVisibleChanged: d.updateFillIndex() + } + + Component.onDestruction: { + for (var i=0; i [A, B, C, D] - "push" transition animation between C and D + \li pop() => [A, B] - "pop" transition animation between C and B + \li \l{push()}{push(D, replace)} => [A, B, D] - "replace" transition between C and D + \li \l{pop()}{pop(A)} => [A] - "pop" transition between C and A + \endlist + + \note When the stack is empty, a push() will not perform a + transition animation because there is nothing to transition from (typically during + application start-up). A pop() on a stack with depth 1 or 0 is a no-operation. + If all items need to be removed from the stack, a separate function clear() is + available. + + Calling push() returns the item that was pushed onto the stack. + Calling pop() returns the item that was popped off the stack. When pop() is + called in an unwind operation, the top-most item (the first item that was + popped, which will also be the one transitioning out) is returned. + + \section1 Deep Linking + \e{Deep linking} means launching an application into a particular state. For example, + a newspaper application could be launched into showing a particular article, + bypassing the front item (and possibly a section item) that would normally have + to be navigated through to get to the article concerned. In terms of StackView, deep + linking means the ability to modify the state of the stack, so much so that it is + possible to push a set of items to the top of the stack, or to completely reset + the stack to a given state. + + The API for deep linking in StackView is the same as for basic navigation. Pushing + an array instead of a single item, will involve that all the items in that array will + be pushed onto the stack. The transition animation, however, will be conducted as + if only the last item in the array was pushed onto the stack. The normal semantics + of push() apply for deep linking, meaning that push() adds whatever is pushed onto + the stack. Note also that only the last item of the array will be loaded. + The rest will be lazy-loaded as needed when entering the screen upon subsequent + calls to pop (or when requesting the item by using \a get). + + This gives us the following result, given the stack [A, B, C]: + + \list + \li \l{push()}{push([D, E, F])} => [A, B, C, D, E, F] - "push" transition animation between C and F + \li \l{push()}{push([D, E, F], replace)} => [A, B, D, E, F] - "replace" transition animation between C and F + \li clear(); \l{push()}{push([D, E, F])} => [D, E, F] - no transition animation (since the stack was empty) + \endlist + + \section1 Pushing items + + An item pushed onto the StackView can be either an Item, a URL, a string + containing a URL, or a Component. To push it, assign it to a property "item" + inside a property list, and pass it as an argument to \l{StackView::push}{push}: + + \code + stackView.push({item: yourItem}) + \endcode + + The list can contain several properties that control how the item should be pushed: + \list + \li \c item: this property is required, and holds the item to be pushed. + \li \c properties: a list of QML properties to be assigned to the item upon push. These + properties will be copied into the item at load time, or when the item will become + the current item (normally upon push). + \li \c immediate: set this property to \c true to skip transition effects. When pushing + an array, this property only needs to be set on the first element to make the + whole operation immediate. + \li \c replace: set this property to replace the current item on the stack. When pushing + an array, you only need to set this property on the first element to replace + as many elements on the stack as inside the array. + \li \c destroyOnPop: set this boolean to \c true if StackView needs to destroy the item when + it is popped off the stack. By default (if \a destroyOnPop is not specified), StackView + will destroy items pushed as components or URLs. Items not destroyed will be re-parented + back to the original parents they had before being pushed onto the stack and hidden. + If you need to set this property, do it with care, so that items are not leaked. + \endlist + + If the only argument needed is "item", the following short-hand notation can be applied: + + \code + stackView.push(yourItem) + \endcode + + You can push several items in one go by using an array of property lists. This is + more efficient than pushing items one by one, as StackView can then load only the + last item in the list. The rest will be loaded as they are about to become + the current item (which happens when the stack is popped). The following example shows how + to push an array of items: + + \code + stackView.push([{item: yourItem1}, {item: yourItem2}]) + \endcode + + If an inline item is pushed, the item is temporarily re-parented into the StackView. When the item + is later popped off, it gets re-parented back to its original owner again. + If, however, an item is pushed as a component or a URL, the actual item will be created as an + item from that component. This happens automatically when the item is about to become the current + item in the stack. Ownership of the item will then normally be taken by the StackView, which will + automatically destroy the item when it is later popped off. The component that declared the item, by + contrast, remains in the ownership of the application and is not destroyed by the stack. + This can be overridden by explicitly setting \c{destroyOnPop} in the list of arguments given to push. + + If the \c properties to be pushed are specified, they will be copied into the item at loading time + (in case of a component or URL), or when the item becomes the current item (in case of an inline + item). The following example shows how this can be done: + + \code + stackView.push({item: someItem, properties: {fgcolor: "red", bgcolor: "blue"}}) + \endcode + + + \note If an item is declared inside another item, and that parent gets destroyed, + (even if a component was used), that child item will also be destroyed. + This follows normal Qt parent-child destruction rules, but sometimes comes as a surprise + for developers. + + \section1 Lifecycle + An item's lifecycle in the StackView can have the following transitions: + \list 1 + \li instantiation + \li inactive + \li activating + \li active + \li deactivating + \li inactive + \li destruction + \endlist + + It can move any number of times between inactive and active. When an item is activated, + it's visible on the screen and is considered to be the current item. An item + in a StackView that is not visible is not activated, even if the item is currently the + top-most item in the stack. When the stack becomes visible, the item that is top-most gets + activated. Likewise if the stack is then hidden, the topmost item would be deactivated. + Popping the item off the top of the stack at this point would not result in further + deactivation since the item is not active. + + There is an attached \l{Stack::status}{Stack.status} property that tracks the lifecycle. This + property is an enumeration with the following values: \c Stack.Inactive, \c Stack.Activating, + \c Stack.Active and \c Stack.Deactivating. Combined with the normal \c Component.onComplete and + \c Component.onDestruction signals, the entire lifecycle is thus: + + \list + \li Created: Component.onCompleted() + \li Activating: Stack.onStatusChanged (Stack.status is Stack.Activating) + \li Acivated: Stack.onStatusChanged (Stack.status is Stack.Active) + \li Deactivating: Stack.onStatusChanged (Stack.status is Stack.Deactivating) + \li Deactivated: Stack.onStatusChanged (Stack.status is Stack.Inactive) + \li Destruction: Component.onDestruction() + \endlist + + \section1 Finding items + Sometimes it is necessary to search for an item, for example, in order to unwind the stack to + an item to which the application does not have a reference. This is facilitated using a + function find() in StackView. The find() function takes a callback function as its + only argument. The callback gets invoked for each item in the stack (starting at the top). + If the callback returns true, then it signals that a match has been found and the find() + function returns that item. If the callback fails to return true (no match is found), + then find() returns \c null. + + The code below searches for an item in the stack that has a name "order_id" and then unwinds to + that item. Note that since find() returns \c {null} if no item is found, and since pop unwinds to + the bottom of the stack if null is given as the target item, the code works well even in + case no matching item is found. + + \code + stackView.pop(stackView.find(function(item) { + return item.name == "order_id"; + })); + \endcode + + You can also get to an item in the stack using \l {get()}{get(index)}. You should use + this function if your item depends on another item in the stack, as the function will + ensure that the item at the given index gets loaded before it is returned. + + \code + previousItem = stackView.get(myItem.Stack.index - 1)); + \endcode + + \section1 Transitions + + A transition is performed whenever a item is pushed or popped, and consists of + two items: enterItem and exitItem. The StackView itself will never move items + around, but instead delegates the job to an external animation set provided + by the style or the application developer. How items should visually enter and leave the stack + (and the geometry they should end up with) is therefore completely controlled from the outside. + + When the transition starts, the StackView will search for a transition that + matches the operation executed. There are three transitions to choose + from: \l {StackViewDelegate::}{pushTransition}, \l {StackViewDelegate::}{popTransition}, + and \l {StackViewDelegate::}{replaceTransition}. Each implements how + \c enterItem should animate in, and \c exitItem out. The transitions are + collected inside a StackViewDelegate object assigned to + \l {StackView::delegate}{delegate}. By default, popTransition and + replaceTransition will be the same as pushTransition, unless you set them + to something else. + + A simple fade transition could be implemented as: + + \qml + StackView { + delegate: StackViewDelegate { + function transitionFinished(properties) + { + properties.exitItem.opacity = 1 + } + + pushTransition: StackViewTransition { + PropertyAnimation { + target: enterItem + property: "opacity" + from: 0 + to: 1 + } + PropertyAnimation { + target: exitItem + property: "opacity" + from: 1 + to: 0 + } + } + } + } + \endqml + + PushTransition needs to inherit from StackViewTransition, which is a ParallelAnimation that + contains the properties \c enterItem and \c exitItem. These items should be assigned to the + \c target property of animations within the transition. Since the same items instance can + be pushed several times to a StackView, you should always override + \l {StackViewDelegate::transitionFinished()}{StackViewDelegate.transitionFinished()}. + Implement this function to reset any properties animated on the exitItem so that later + transitions can expect the items to be in a default state. + + A more complex example could look like the following. Here, the items are lying on the side before + being rotated to an upright position: + + \qml + StackView { + delegate: StackViewDelegate { + function transitionFinished(properties) + { + properties.exitItem.x = 0 + properties.exitItem.rotation = 0 + } + + pushTransition: StackViewTransition { + SequentialAnimation { + ScriptAction { + script: enterItem.rotation = 90 + } + PropertyAnimation { + target: enterItem + property: "x" + from: enterItem.width + to: 0 + } + PropertyAnimation { + target: enterItem + property: "rotation" + from: 90 + to: 0 + } + } + PropertyAnimation { + target: exitItem + property: "x" + from: 0 + to: -exitItem.width + } + } + } + } + \endqml + + \section2 Advanced usage + + When the StackView needs a new transition, it first calls + \l {StackViewDelegate::getTransition()}{StackViewDelegate.getTransition()}. + The base implementation of this function just looks for a property named \c properties.name inside + itself (root), which is how it finds \c {property Component pushTransition} in the examples above. + + \code + function getTransition(properties) + { + return root[properties.name] + } + \endcode + + You can override this function for your delegate if you need extra logic to decide which + transition to return. You could for example introspect the items, and return different animations + depending on the their internal state. StackView will expect you to return a Component that + contains a StackViewTransition, or a StackViewTransition directly. The former is easier, as StackView will + then create the transition and later destroy it when it's done, while avoiding any side effects + caused by the transition being alive long after it has run. Returning a StackViewTransition directly + can be useful if you need to write some sort of transition caching for performance reasons. + As an optimization, you can also return \c null to signal that you just want to show/hide the items + immediately without creating or running any transitions. You can also override this function if + you need to alter the items in any way before the transition starts. + + \c properties contains the properties that will be assigned to the StackViewTransition before + it runs. In fact, you can add more properties to this object during the call + if you need to initialize additional properties of your custom StackViewTransition when the returned + component is instantiated. + + The following example shows how you can decide which animation to use at runtime: + + \qml + StackViewDelegate { + function getTransition(properties) + { + return (properties.enterItem.Stack.index % 2) ? horizontalTransition : verticalTransition + } + + function transitionFinished(properties) + { + properties.exitItem.x = 0 + properties.exitItem.y = 0 + } + + property Component horizontalTransition: StackViewTransition { + PropertyAnimation { + target: enterItem + property: "x" + from: target.width + to: 0 + duration: 300 + } + PropertyAnimation { + target: exitItem + property: "x" + from: 0 + to: target.width + duration: 300 + } + } + + property Component verticalTransition: StackViewTransition { + PropertyAnimation { + target: enterItem + property: "y" + from: target.height + to: 0 + duration: 300 + } + PropertyAnimation { + target: exitItem + property: "y" + from: 0 + to: target.height + duration: 300 + } + } + } + \endqml + + \section1 Supported Attached Properties + + Items in a StackView support these attached properties: + \list + \li \l{Stack::index}{Stack.index} - Contains the index of the item inside the StackView + \li \l{Stack::view}{Stack.view} - Contains the StackView the item is in + \li \l{Stack::status}{Stack.status} - Contains the status of the item + \endlist +*/ + +FocusScope { + id: root + + /*! \qmlproperty int StackView::depth + \readonly + The number of items currently pushed onto the stack. + */ + readonly property alias depth: root.__depth + + /*! \qmlproperty Item StackView::currentItem + \readonly + The currently top-most item in the stack. + */ + readonly property alias currentItem: root.__currentItem + + /*! The first item that should be shown when the StackView is created. + \a initialItem can take same value as the first argument to \l{StackView::push()} + {StackView.push()}. Note that this is just a convenience for writing + \c{Component.onCompleted: stackView.push(myInitialItem)} + + Examples: + + \list + \li initialItem: Qt.resolvedUrl("MyItem.qml") + \li initialItem: myItem + \li initialItem: {"item" : Qt.resolvedUrl("MyRectangle.qml"), "properties" : {"color" : "red"}} + \endlist + \sa push + */ + property var initialItem: null + + /*! \readonly + \a busy is \c true if a transition is running, and \c false otherwise. */ + readonly property bool busy: __currentTransition !== null + + /*! The transitions to use when pushing or popping items. + For better understanding on how to apply custom transitions, read \l{Transitions}. + \sa {Transitions} */ + property StackViewDelegate delegate: StackViewSlideDelegate {} + + /*! \qmlmethod Item StackView::push(Item item) + Pushes an \a item onto the stack. + + The function can also take a property list as argument - \c {Item StackView::push(jsobject dict)}, which + should contain one or more of the following properties: + \list + \li \a item: this property is required, and holds the item you want to push. + \li \e properties: a list of QML properties that should be assigned + to the item upon push. These properties will be copied into the item when it is + loaded (in case of a component or URL), or when it becomes the current item for the + first time (normally upon push). + \li \e immediate: set this property to \c true to skip transition effects. When pushing + an array, you only need to set this property on the first element to make the + whole operation immediate. + \li \e replace: set this property to replace the current item on the stack. When pushing + an array, you only need to set this property on the first element to replace + as many elements on the stack as inside the array. + \li \e destroyOnPop: set this property to specify if the item needs to be destroyed + when its popped off the stack. By default (if \e destroyOnPop is not specified), + StackView will destroy items pushed as components or URLs. Items + not destroyed will be re-parented to the original parents they had before being + pushed onto the stack, and hidden. If you need to set this property, do it with + care, so that items are not leaked. + \endlist + + You can also push an array of items (property lists) if you need to push several items + in one go. A transition will then only occur between the current item and the last + item in the list. Loading the other items will be deferred until needed. + + Examples: + \list + \li stackView.push({item:anItem}) + \li stackView.push({item:aURL, immediate: true, replace: true}) + \li stackView.push({item:aRectangle, properties:{color:"red"}}) + \li stackView.push({item:aComponent, properties:{color:"red"}}) + \li stackView.push({item:aComponent.createObject(), destroyOnPop:true}) + \li stackView.push([{item:anitem, immediate:true}, {item:aURL}]) + \endlist + + \note If the only argument needed is "item", you can apply the following short- + hand notation: \c{stackView.push(anItem)}. + + Returns the item that became current. + + \sa initialItem + \sa {Pushing items} + */ + function push(item) { + // Note: we support two different APIs in this function; The old meego API, and + // the new "property list" API. Hence the reason for hiding the fact that you + // can pass more arguments than shown in the signature: + if (__recursionGuard(true)) + return + var properties = arguments[1] + var immediate = arguments[2] + var replace = arguments[3] + var arrayPushed = (item instanceof Array) + var firstItem = arrayPushed ? item[0] : item + immediate = (immediate || JSArray.stackView.length === 0) + + if (firstItem && firstItem.item && firstItem.hasOwnProperty("x") === false) { + // Property list API used: + immediate = immediate || firstItem.immediate + replace = replace || firstItem.replace + } + + // Create, and push, a new javascript object, called "element", onto the stack. + // This element contains all the information necessary to construct the item, and + // will, after loaded, also contain the loaded item: + if (arrayPushed) { + if (item.length === 0) + return + var outElement = replace ? JSArray.pop() : JSArray.current() + for (var i=0; i 1 && item !== undefined && item !== inElement.item) { + // Pop from the top until we find 'item', and return the corresponding + // element. Skip all non-loaded items (except the first), since no one + // has any references to such items anyway: + while (__depth > 1 && !JSArray.current().loaded) + JSArray.pop() + inElement = JSArray.current() + while (__depth > 1 && item !== inElement.item) { + JSArray.pop() + __cleanup(inElement) + while (__depth > 1 && !JSArray.current().loaded) + JSArray.pop() + inElement = JSArray.current() + } + } + + var transition = { + inElement: inElement, + outElement: outElement, + immediate: immediate, + replace: false, + push: false + } + __performTransition(transition) + __recursionGuard(false) + return outElement.item; + } + + /*! \qmlmethod void StackView::clear() + Remove all items from the stack. No animations will be applied. */ + function clear() { + if (__recursionGuard(true)) + return + if (__currentTransition) + __currentTransition.animation.complete() + __currentItem = null + var count = __depth + for (var i=0; i=0; --i) { + var element = JSArray.stackView[i]; + if (onlySearchLoadedItems !== true) + __loadElement(element) + else if (!element.item) + continue + if (func(element.item)) + return element.item + } + return null; + } + + /*! \qmlmethod Item StackView::get(int index, bool dontLoad = false) + Returns the item at position \a index in + the stack. If \a dontLoad is true, the + item will not be forced to load (and \c null + will be returned if not yet loaded) */ + function get(index, dontLoad) + { + if (index < 0 || index >= JSArray.stackView.length) + return null + var element = JSArray.stackView[index] + if (dontLoad !== true) { + __loadElement(element) + return element.item + } else if (element.item) { + return element.item + } else { + return null + } + } + + /*! \qmlmethod void StackView::completeTransition() + Immediately completes any ongoing transition. + /sa Animation.complete + */ + function completeTransition() + { + if (__recursionGuard(true)) + return + if (__currentTransition) + __currentTransition.animation.complete() + __recursionGuard(false) + } + + /********* DEPRECATED API *********/ + + /*! \internal + \deprecated Use Push() instead */ + function replace(item, properties, immediate) { + push(item, properties, immediate, true) + } + + /********* PRIVATE API *********/ + + /*! \internal The currently top-most item on the stack. */ + property Item __currentItem: null + /*! \internal The number of items currently pushed onto the stack. */ + property int __depth: 0 + /*! \internal Stores the transition info while a transition is ongoing */ + property var __currentTransition: null + /*! \internal Stops the user from pushing items while preparing a transition */ + property bool __guard: false + + Component.onCompleted: { + if (initialItem) + push(initialItem) + } + + Component.onDestruction: { + if (__currentTransition) + __currentTransition.animation.complete() + __currentItem = null + } + + /*! \internal */ + function __recursionGuard(use) + { + if (use && __guard) { + console.warn("Warning: StackView: You cannot push/pop recursively!") + console.trace() + return true + } + __guard = use + } + + /*! \internal */ + function __loadElement(element) + { + if (element.loaded) { + if (!element.item) { + element.item = invalidItemReplacement.createObject(root) + element.item.text = "\nError: The item has been deleted outside StackView!" + } + return + } + if (!element.itemComponent) { + element.item = invalidItemReplacement.createObject(root) + element.item.text = "\nError: Invalid item (item was 'null'). " + + "This might indicate that the item was deleted outside StackView!" + return + } + + var comp = __resolveComponent(element.itemComponent, element) + + // Assign properties to item: + if (!element.properties) + element.properties = {} + + if (comp.hasOwnProperty("createObject")) { + if (comp.status === Component.Error) { + element.item = invalidItemReplacement.createObject(root) + element.item.text = "\nError: Could not load: " + comp.errorString() + } else { + element.item = comp.createObject(root, element.properties) + // Destroy items we create unless the user specified something else: + if (!element.hasOwnProperty("destroyOnPop")) + element.destroyOnPop = true + } + } else { + // comp is already an Item, so just re-parent it into the StackView: + element.item = comp + element.originalParent = parent + element.item.parent = root + for (var prop in element.properties) { + if (element.item.hasOwnProperty(prop)) + element.item[prop] = element.properties[prop]; + } + // Do not destroy items we didn't create, unless the user specified something else: + if (!element.hasOwnProperty("destroyOnPop")) + element.destroyOnPop = false + } + + element.item.Stack.__index = element.index + element.item.Stack.__view = root + // Let item fill all available space by default: + element.item.width = Qt.binding(function() { return root.width }) + element.item.height = Qt.binding(function() { return root.height }) + element.loaded = true + } + + /*! \internal */ + function __resolveComponent(unknownObjectType, element) + { + // We need this extra resolve function since we don't really + // know what kind of object the user pushed. So we try to + // figure it out by inspecting the object: + if (unknownObjectType.hasOwnProperty("createObject")) { + return unknownObjectType + } else if (typeof unknownObjectType == "string") { + return Qt.createComponent(unknownObjectType) + } else if (unknownObjectType.hasOwnProperty("x")) { + return unknownObjectType + } else if (unknownObjectType.hasOwnProperty("item")) { + // INVARIANT: user pushed a JS-object + element.properties = unknownObjectType.properties + if (!unknownObjectType.item) + unknownObjectType.item = invalidItemReplacement + if (unknownObjectType.hasOwnProperty("destroyOnPop")) + element.destroyOnPop = unknownObjectType.destroyOnPop + return __resolveComponent(unknownObjectType.item, element) + } else { + // We cannot determine the type, so assume its a URL: + return Qt.createComponent(unknownObjectType) + } + } + + /*! \internal */ + function __cleanup(element) { + // INVARIANT: element has been removed from JSArray. Destroy its + // item, or re-parent it back to the parent it had before it was pushed: + var item = element.item + if (element.destroyOnPop) { + item.destroy() + } else { + // Mark the item as no longer part of the StackView. It + // might reenter on pop if pushed several times: + item.visible = false + __setStatus(item, Stack.Inactive) + item.Stack.__view = null + item.Stack.__index = -1 + if (element.originalParent) + item.parent = element.originalParent + } + } + + /*! \internal */ + function __setStatus(item, status) { + item.Stack.__status = status + } + + /*! \internal */ + function __performTransition(transition) + { + // Animate item in "outElement" out, and item in "inElement" in. Set a guard to protect + // the user from pushing new items on signals that will fire while preparing for the transition + // (e.g Stack.onCompleted, Stack.onStatusChanged, Stack.onIndexChanged etc). Otherwise, we will enter + // this function several times, which causes the items to be updated half-way. + if (__currentTransition) + __currentTransition.animation.complete() + __loadElement(transition.inElement) + + transition.name = transition.replace ? "replaceTransition" : (transition.push ? "pushTransition" : "popTransition") + var enterItem = transition.inElement.item + transition.enterItem = enterItem + + // Since an item can be pushed several times, we need to update its properties: + enterItem.parent = root + enterItem.Stack.__view = root + enterItem.Stack.__index = transition.inElement.index + __currentItem = enterItem + + if (!transition.outElement) { + // A transition consists of two items, but we got just one. So just show the item: + enterItem.visible = true + __setStatus(enterItem, Stack.Activating) + __setStatus(enterItem, Stack.Active) + return + } + + var exitItem = transition.outElement.item + transition.exitItem = exitItem + if (enterItem === exitItem) + return + + if (root.delegate) { + transition.properties = { + "name":transition.name, + "enterItem":transition.enterItem, + "exitItem":transition.exitItem, + "immediate":transition.immediate } + var anim = root.delegate.getTransition(transition.properties) + if (anim.createObject) { + anim = anim.createObject(null, transition.properties) + anim.runningChanged.connect(function(){ if (anim.running === false) anim.destroy() }) + } + transition.animation = anim + } + + if (!transition.animation) { + console.warn("Warning: StackView: no", transition.name, "found!") + return + } + if (enterItem.anchors.fill || exitItem.anchors.fill) + console.warn("Warning: StackView: cannot transition an item that is anchored!") + + __currentTransition = transition + __setStatus(exitItem, Stack.Deactivating) + enterItem.visible = true + __setStatus(enterItem, Stack.Activating) + transition.animation.runningChanged.connect(animationFinished) + transition.animation.start() + // NB! For empty animations, "animationFinished" is already + // executed at this point, leaving __animation === null: + if (transition.immediate === true && transition.animation) + transition.animation.complete() + } + + /*! \internal */ + function animationFinished() + { + if (!__currentTransition || __currentTransition.animation.running) + return + + __currentTransition.animation.runningChanged.disconnect(animationFinished) + __currentTransition.exitItem.visible = false + __setStatus(__currentTransition.exitItem, Stack.Inactive); + __setStatus(__currentTransition.enterItem, Stack.Active); + __currentTransition.properties.animation = __currentTransition.animation + root.delegate.transitionFinished(__currentTransition.properties) + + if (!__currentTransition.push || __currentTransition.replace) + __cleanup(__currentTransition.outElement) + + __currentTransition = null + } + + /*! \internal */ + property Component invalidItemReplacement: Component { + Text { + width: parent.width + height: parent.height + wrapMode: Text.WrapAtWordBoundaryOrAnywhere + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StackViewDelegate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StackViewDelegate.qml new file mode 100644 index 0000000..f85eb0a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StackViewDelegate.qml @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +/*! + \qmltype StackViewDelegate + \inqmlmodule QtQuick.Controls + \ingroup controls + \since 5.1 + + \brief A delegate used by StackView for loading transitions. + + See the documentation for the \l {StackView} component. + +*/ +QtObject { + id: root + + /*! + \qmlmethod Transition StackViewDelegate::getTransition(properties) + + The base implementation of this function just looks for a property named + \a {properties}.name inside itself and returns it. + \sa {Transitions} + */ + function getTransition(properties) + { + return root[properties.name] + } + + /*! + \qmlmethod void StackViewDelegate::transitionFinished(properties) + + Handles the completion of a transition for \a properties. The base + implementation of this function is empty. + + \sa {Transitions} + */ + function transitionFinished(properties) + { + } + + /*! + \qmlproperty Component StackViewDelegate::pushTransition + + The transition used on push operation. + */ + property Component pushTransition: StackViewTransition {} + /*! + \qmlproperty Component StackViewDelegate::popTransition + + The transition used on pop operation. + Unless set, the popTransition is the same as pushTransition + */ + property Component popTransition: root["pushTransition"] + /*! + \qmlproperty Component StackViewDelegate::replaceTransition + + The transition used on replace operation. + Unless set, the replaceTransition is the same as pushTransition + */ + property Component replaceTransition: root["pushTransition"] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StackViewTransition.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StackViewTransition.qml new file mode 100644 index 0000000..9f4719e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StackViewTransition.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +ParallelAnimation { + id: root + /*! The name of the animation that is running. Can be one of the following: + \list + \li 'PushTransition' + \li 'PopTransition' + \li 'ReplaceTransition' + \endlist + */ + property string name + /*! The page that is transitioning in. */ + property Item enterItem + /*! The page that is transitioning out */ + property Item exitItem + /*! Set to \c true if the transition is told to + fast-forward directly to its end-state */ + property bool immediate +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StatusBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StatusBar.qml new file mode 100644 index 0000000..c1168d5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/StatusBar.qml @@ -0,0 +1,154 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype StatusBar + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup applicationwindow + \ingroup controls + \brief Contains status information in your app. + + The common way of using StatusBar is in relation to \l ApplicationWindow. + + Note that the StatusBar does not provide a layout of its own, but requires + you to position its contents, for instance by creating a \l RowLayout. + + If only a single item is used within the StatusBar, it will resize to fit the implicitHeight + of its contained item. This makes it particularly suitable for use together with layouts. + Otherwise the height is platform dependent. + + \code + import QtQuick.Controls 1.2 + import QtQuick.Layouts 1.0 + + ApplicationWindow { + statusBar: StatusBar { + RowLayout { + anchors.fill: parent + Label { text: "Read Only" } + } + } + } + \endcode +*/ + +FocusScope { + id: statusbar + + activeFocusOnTab: false + Accessible.role: Accessible.StatusBar + + width: parent ? parent.width : implicitWidth + implicitWidth: container.leftMargin + container.rightMargin + + Math.max(container.layoutWidth, __panel ? __panel.implicitWidth : 0) + implicitHeight: container.topMargin + container.bottomMargin + + Math.max(container.layoutHeight, __panel ? __panel.implicitHeight : 0) + + /*! \qmlproperty Component StatusBar::style + + The style Component for this control. + \sa {StatusBarStyle} + + */ + property Component style: Settings.styleComponent(Settings.style, "StatusBarStyle.qml", statusbar) + + /*! \internal */ + property alias __style: styleLoader.item + + /*! \internal */ + property Item __panel: panelLoader.item + + /*! \internal */ + default property alias __content: container.data + + /*! + \qmlproperty Item StatusBar::contentItem + + This property holds the content Item of the status bar. + + Items declared as children of a StatusBar are automatically parented to the StatusBar's contentItem. + Items created dynamically need to be explicitly parented to the contentItem: + + \note The implicit size of the StatusBar is calculated based on the size of its content. If you want to anchor + items inside the status bar, you must specify an explicit width and height on the StatusBar itself. + */ + readonly property alias contentItem: container + + data: [ + Loader { + id: panelLoader + anchors.fill: parent + sourceComponent: styleLoader.item ? styleLoader.item.panel : null + onLoaded: item.z = -1 + Loader { + id: styleLoader + property alias __control: statusbar + sourceComponent: style + } + }, + Item { + id: container + z: 1 + focus: true + anchors.fill: parent + + anchors.topMargin: topMargin + anchors.leftMargin: leftMargin + anchors.rightMargin: rightMargin + anchors.bottomMargin: bottomMargin + + property int topMargin: __style ? __style.padding.top : 0 + property int bottomMargin: __style ? __style.padding.bottom : 0 + property int leftMargin: __style ? __style.padding.left : 0 + property int rightMargin: __style ? __style.padding.right : 0 + + property Item layoutItem: container.children.length === 1 ? container.children[0] : null + property real layoutWidth: layoutItem ? (layoutItem.implicitWidth || layoutItem.width) + + (layoutItem.anchors.fill ? layoutItem.anchors.leftMargin + + layoutItem.anchors.rightMargin : 0) : 0 + property real layoutHeight: layoutItem ? (layoutItem.implicitHeight || layoutItem.height) + + (layoutItem.anchors.fill ? layoutItem.anchors.topMargin + + layoutItem.anchors.bottomMargin : 0) : 0 + }] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ApplicationWindowStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ApplicationWindowStyle.qml new file mode 100644 index 0000000..398567b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ApplicationWindowStyle.qml @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ApplicationWindowStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.4 + \ingroup controlsstyling + \brief Provides custom styling for ApplicationWindow. + + You can create a custom window background by replacing the "background" + delegate of ApplicationWindowStyle with a custom design. + + Example: + \qml + ApplicationWindow { + style: ApplicationWindowStyle { + background: BorderImage { + source: "background.png" + border { left: 20; top: 20; right: 20; bottom: 20 } + } + } + } + \endqml +*/ +QtObject { + /*! The window attached to this style. */ + readonly property ApplicationWindow control: __control + + /*! A custom background for the window. + + \note The window might have a custom background color set. The custom + background color is automatically filled by the window. The background + delegate should respect the custom background color by either hiding + itself altogether when a custom background color is set, or by letting + the custom background color shine through. + + The following read-only property is available within the scope + of the background delegate: + \table + \row \li \b {styleData.hasColor} : bool \li Whether the window has a custom background color set. + \endtable + */ + property Component background: Rectangle { + visible: !styleData.hasColor + color: SystemPaletteSingleton.window(true) + } + + /*! \internal */ + property Component panel: Item { + readonly property alias contentArea: contentArea + readonly property alias menuBarArea: menuBarArea + readonly property alias toolBarArea: toolBarArea + readonly property alias statusBarArea: statusBarArea + + Loader { + anchors.fill: parent + sourceComponent: background + } + + Item { + id: contentArea + anchors.top: toolBarArea.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: statusBarArea.top + } + + Item { + id: toolBarArea + anchors.top: parent.menuBarArea.bottom + anchors.left: parent.left + anchors.right: parent.right + implicitHeight: childrenRect.height + height: visibleChildren.length > 0 ? implicitHeight: 0 + } + + Item { + id: menuBarArea + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + implicitHeight: childrenRect.height + height: visibleChildren.length > 0 ? implicitHeight: 0 + } + + Item { + id: statusBarArea + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + implicitHeight: childrenRect.height + height: visibleChildren.length > 0 ? implicitHeight: 0 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/BasicTableViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/BasicTableViewStyle.qml new file mode 100644 index 0000000..334ee66 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/BasicTableViewStyle.qml @@ -0,0 +1,164 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype BasicTableViewStyle + \internal + \inqmlmodule QtQuick.Controls.Styles + \inherits ScrollViewStyle + \qmlabstract +*/ + +ScrollViewStyle { + id: root + + /*! \qmlproperty BasicTableView BasicTableViewStyle::control + \internal */ + readonly property BasicTableView control: __control + + /*! \qmlproperty color BasicTableViewStyle::textColor + The text color. */ + property color textColor: SystemPaletteSingleton.text(control.enabled) + + /*! \qmlproperty color BasicTableViewStyle::backgroundColor + The background color. */ + property color backgroundColor: control.backgroundVisible ? SystemPaletteSingleton.base(control.enabled) : "transparent" + + /*! \qmlproperty color BasicTableViewStyle::alternateBackgroundColor + The alternate background color. */ + property color alternateBackgroundColor: "#f5f5f5" + + /*! \qmlproperty color BasicTableViewStyle::highlightedTextColor + The text highlight color, used within selections. */ + property color highlightedTextColor: "white" + + /*! \qmlproperty bool BasicTableViewStyle::activateItemOnSingleClick + Activates items on single click. + + Its default value is \c false. + */ + property bool activateItemOnSingleClick: false + + padding.top: control.headerVisible ? 0 : 1 + + /*! \qmlproperty Component BasicTableViewStyle::headerDelegate + \internal + + Different documentation for TableViewStyle and TreeViewStyle. + See qtquickcontrolsstyles-tableviewstyle.qdoc and qtquickcontrolsstyles-treeviewstyle.qdoc + */ + property Component headerDelegate: BorderImage { + height: Math.round(textItem.implicitHeight * 1.2) + source: "images/header.png" + border.left: 4 + border.bottom: 2 + border.top: 2 + Text { + id: textItem + anchors.fill: parent + verticalAlignment: Text.AlignVCenter + horizontalAlignment: styleData.textAlignment + anchors.leftMargin: horizontalAlignment === Text.AlignLeft ? 12 : 1 + anchors.rightMargin: horizontalAlignment === Text.AlignRight ? 8 : 1 + text: styleData.value + elide: Text.ElideRight + color: textColor + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + Rectangle { + width: 1 + height: parent.height - 2 + y: 1 + color: "#ccc" + } + } + + /*! \qmlproperty Component BasicTableViewStyle::rowDelegate + \internal + + Different documentation for TableViewStyle and TreeViewStyle. + See qtquickcontrolsstyles-tableviewstyle.qdoc and qtquickcontrolsstyles-treeviewstyle.qdoc + */ + property Component rowDelegate: Rectangle { + height: Math.round(TextSingleton.implicitHeight * 1.2) + property color selectedColor: control.activeFocus ? "#07c" : "#999" + color: styleData.selected ? selectedColor : + !styleData.alternate ? alternateBackgroundColor : backgroundColor + } + + /*! \qmlproperty Component BasicTableViewStyle::itemDelegate + \internal + + Different documentation for TableViewStyle and TreeViewStyle. + See qtquickcontrolsstyles-tableviewstyle.qdoc and qtquickcontrolsstyles-treeviewstyle.qdoc + */ + property Component itemDelegate: Item { + height: Math.max(16, label.implicitHeight) + property int implicitWidth: label.implicitWidth + 20 + + Text { + id: label + objectName: "label" + width: parent.width - x - (horizontalAlignment === Text.AlignRight ? 8 : 1) + x: (styleData.hasOwnProperty("depth") && styleData.column === 0) ? 0 : + horizontalAlignment === Text.AlignRight ? 1 : 8 + horizontalAlignment: styleData.textAlignment + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: 1 + elide: styleData.elideMode + text: styleData.value !== undefined ? styleData.value.toString() : "" + color: styleData.textColor + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + } + + /*! \internal + Part of TreeViewStyle + */ + property Component __branchDelegate: null + + /*! \internal + Part of TreeViewStyle + */ + property int __indentation: 12 +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/BusyIndicatorStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/BusyIndicatorStyle.qml new file mode 100644 index 0000000..da2a2aa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/BusyIndicatorStyle.qml @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype BusyIndicatorStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.2 + \ingroup controlsstyling + \brief Provides custom styling for BusyIndicatorStyle. + + You can create a busy indicator by replacing the "indicator" delegate + of the BusyIndicatorStyle with a custom design. + + Example: + \qml + BusyIndicator { + style: BusyIndicatorStyle { + indicator: Image { + visible: control.running + source: "spinner.png" + RotationAnimator on rotation { + running: control.running + loops: Animation.Infinite + duration: 2000 + from: 0 ; to: 360 + } + } + } + } + \endqml +*/ +Style { + id: indicatorstyle + + /*! The \l BusyIndicator this style is attached to. */ + readonly property BusyIndicator control: __control + + /*! This defines the appearance of the busy indicator. */ + property Component indicator: Item { + id: indicatorItem + + implicitWidth: 48 + implicitHeight: 48 + + opacity: control.running ? 1 : 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + + Image { + anchors.centerIn: parent + anchors.alignWhenCentered: true + width: Math.min(parent.width, parent.height) + height: width + source: width <= 32 ? "images/spinner_small.png" : + width >= 48 ? "images/spinner_large.png" : + "images/spinner_medium.png" + RotationAnimator on rotation { + duration: 800 + loops: Animation.Infinite + from: 0 + to: 360 + running: indicatorItem.visible && (control.running || indicatorItem.opacity > 0); + } + } + } + + /*! \internal */ + property Component panel: Item { + anchors.fill: parent + implicitWidth: indicatorLoader.implicitWidth + implicitHeight: indicatorLoader.implicitHeight + + Loader { + id: indicatorLoader + sourceComponent: indicator + anchors.centerIn: parent + width: Math.min(parent.width, parent.height) + height: width + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ButtonStyle.qml new file mode 100644 index 0000000..5a3fa55 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ButtonStyle.qml @@ -0,0 +1,175 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ButtonStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup controlsstyling + \brief Provides custom styling for Button. + + You can create a custom button by replacing the "background" delegate + of the ButtonStyle with a custom design. + + Example: + \qml + Button { + text: "A button" + style: ButtonStyle { + background: Rectangle { + implicitWidth: 100 + implicitHeight: 25 + border.width: control.activeFocus ? 2 : 1 + border.color: "#888" + radius: 4 + gradient: Gradient { + GradientStop { position: 0 ; color: control.pressed ? "#ccc" : "#eee" } + GradientStop { position: 1 ; color: control.pressed ? "#aaa" : "#ccc" } + } + } + } + } + \endqml + If you need a custom label, you can replace the label item. +*/ + +Style { + id: buttonstyle + + /*! The \l {QtQuick.Controls::}{Button} this style is attached to. */ + readonly property Button control: __control + + /*! The padding between the background and the label components. */ + padding { + top: 4 + left: 4 + right: 4 + (control.menu !== null ? Math.round(TextSingleton.implicitHeight * 0.5) : 0) + bottom: 4 + } + + /*! This defines the background of the button. */ + property Component background: Item { + property bool down: control.pressed || (control.checkable && control.checked) + implicitWidth: Math.round(TextSingleton.implicitHeight * 4.5) + implicitHeight: Math.max(25, Math.round(TextSingleton.implicitHeight * 1.2)) + Rectangle { + anchors.fill: parent + anchors.bottomMargin: down ? 0 : -1 + color: "#10000000" + radius: baserect.radius + } + Rectangle { + id: baserect + gradient: Gradient { + GradientStop {color: down ? "#aaa" : "#fefefe" ; position: 0} + GradientStop {color: down ? "#ccc" : "#e3e3e3" ; position: down ? 0.1: 1} + } + radius: TextSingleton.implicitHeight * 0.16 + anchors.fill: parent + border.color: control.activeFocus ? "#47b" : "#999" + Rectangle { + anchors.fill: parent + radius: parent.radius + color: control.activeFocus ? "#47b" : "white" + opacity: control.hovered || control.activeFocus ? 0.1 : 0 + Behavior on opacity {NumberAnimation{ duration: 100 }} + } + } + Image { + id: imageItem + visible: control.menu !== null + source: "images/arrow-down.png" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 4 + opacity: control.enabled ? 0.6 : 0.5 + } + } + + /*! This defines the label of the button. */ + property Component label: Item { + implicitWidth: row.implicitWidth + implicitHeight: row.implicitHeight + baselineOffset: row.y + text.y + text.baselineOffset + Row { + id: row + anchors.centerIn: parent + spacing: 2 + Image { + source: control.iconSource + anchors.verticalCenter: parent.verticalCenter + } + Text { + id: text + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + anchors.verticalCenter: parent.verticalCenter + text: StyleHelpers.stylizeMnemonics(control.text) + color: SystemPaletteSingleton.buttonText(control.enabled) + } + } + } + + /*! \internal */ + property Component panel: Item { + anchors.fill: parent + implicitWidth: Math.max(labelLoader.implicitWidth + padding.left + padding.right, backgroundLoader.implicitWidth) + implicitHeight: Math.max(labelLoader.implicitHeight + padding.top + padding.bottom, backgroundLoader.implicitHeight) + baselineOffset: labelLoader.item ? padding.top + labelLoader.item.baselineOffset : 0 + + Loader { + id: backgroundLoader + anchors.fill: parent + sourceComponent: background + } + + Loader { + id: labelLoader + sourceComponent: label + anchors.fill: parent + anchors.leftMargin: padding.left + anchors.topMargin: padding.top + anchors.rightMargin: padding.right + anchors.bottomMargin: padding.bottom + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CalendarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CalendarStyle.qml new file mode 100644 index 0000000..bde2f2c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CalendarStyle.qml @@ -0,0 +1,703 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype CalendarStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.3 + \ingroup controlsstyling + \brief Provides custom styling for \l Calendar. + + \section2 Component Map + + \image calendarstyle-components-week-numbers.png + + The calendar has the following styleable components: + + \table + \row \li \image square-white.png + \li \l background + \li Fills the entire control. + \row \li \image square-yellow.png + \li \l navigationBar + \li + \row \li \image square-green.png + \li \l dayOfWeekDelegate + \li One instance per day of week. + \row \li \image square-red.png + \li \l weekNumberDelegate + \li One instance per week. + \row \li \image square-blue.png + \li \l dayDelegate + \li One instance per day of month. + \endtable + + \section2 Custom Style Example + \qml + Calendar { + anchors.centerIn: parent + + style: CalendarStyle { + gridVisible: false + dayDelegate: Rectangle { + gradient: Gradient { + GradientStop { + position: 0.00 + color: styleData.selected ? "#111" : (styleData.visibleMonth && styleData.valid ? "#444" : "#666"); + } + GradientStop { + position: 1.00 + color: styleData.selected ? "#444" : (styleData.visibleMonth && styleData.valid ? "#111" : "#666"); + } + GradientStop { + position: 1.00 + color: styleData.selected ? "#777" : (styleData.visibleMonth && styleData.valid ? "#111" : "#666"); + } + } + + Label { + text: styleData.date.getDate() + anchors.centerIn: parent + color: styleData.valid ? "white" : "grey" + } + + Rectangle { + width: parent.width + height: 1 + color: "#555" + anchors.bottom: parent.bottom + } + + Rectangle { + width: 1 + height: parent.height + color: "#555" + anchors.right: parent.right + } + } + } + } + \endqml +*/ + +Style { + id: calendarStyle + + /*! + The Calendar this style is attached to. + */ + readonly property Calendar control: __control + + /*! + The color of the grid lines. + */ + property color gridColor: "#d3d3d3" + + /*! + This property determines the visibility of the grid. + + The default value is \c true. + */ + property bool gridVisible: true + + /*! + \internal + + The width of each grid line. + */ + property real __gridLineWidth: 1 + + /*! \internal */ + property color __horizontalSeparatorColor: gridColor + + /*! \internal */ + property color __verticalSeparatorColor: gridColor + + function __cellRectAt(index) { + return CalendarUtils.cellRectAt(index, control.__panel.columns, control.__panel.rows, + control.__panel.availableWidth, control.__panel.availableHeight, gridVisible ? __gridLineWidth : 0); + } + + function __isValidDate(date) { + return date !== undefined + && date.getTime() >= control.minimumDate.getTime() + && date.getTime() <= control.maximumDate.getTime(); + } + + /*! + The background of the calendar. + + The implicit size of the calendar is calculated based on the implicit size of the background delegate. + */ + property Component background: Rectangle { + color: "#fff" + implicitWidth: Math.max(250, Math.round(TextSingleton.implicitHeight * 14)) + implicitHeight: Math.max(250, Math.round(TextSingleton.implicitHeight * 14)) + } + + /*! + The navigation bar of the calendar. + + Styles the bar at the top of the calendar that contains the + next month/previous month buttons and the selected date label. + + The properties provided to the delegate are: + \table + \row \li readonly property string \b styleData.title + \li The title of the calendar. + \endtable + */ + property Component navigationBar: Rectangle { + height: Math.round(TextSingleton.implicitHeight * 2.73) + color: "#f9f9f9" + + Rectangle { + color: Qt.rgba(1,1,1,0.6) + height: 1 + width: parent.width + } + + Rectangle { + anchors.bottom: parent.bottom + height: 1 + width: parent.width + color: "#ddd" + } + HoverButton { + id: previousMonth + width: parent.height + height: width + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + source: "images/leftanglearrow.png" + onClicked: control.showPreviousMonth() + } + Label { + id: dateText + text: styleData.title + elide: Text.ElideRight + horizontalAlignment: Text.AlignHCenter + font.pixelSize: TextSingleton.implicitHeight * 1.25 + anchors.verticalCenter: parent.verticalCenter + anchors.left: previousMonth.right + anchors.leftMargin: 2 + anchors.right: nextMonth.left + anchors.rightMargin: 2 + } + HoverButton { + id: nextMonth + width: parent.height + height: width + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + source: "images/rightanglearrow.png" + onClicked: control.showNextMonth() + } + } + + /*! + The delegate that styles each date in the calendar. + + The properties provided to each delegate are: + \table + \row \li readonly property date \b styleData.date + \li The date this delegate represents. + \row \li readonly property bool \b styleData.selected + \li \c true if this is the selected date. + \row \li readonly property int \b styleData.index + \li The index of this delegate. + \row \li readonly property bool \b styleData.valid + \li \c true if this date is greater than or equal to than \l {Calendar::minimumDate}{minimumDate} and + less than or equal to \l {Calendar::maximumDate}{maximumDate}. + \row \li readonly property bool \b styleData.today + \li \c true if this date is equal to today's date. + \row \li readonly property bool \b styleData.visibleMonth + \li \c true if the month in this date is the visible month. + \row \li readonly property bool \b styleData.hovered + \li \c true if the mouse is over this cell. + \note This property is \c true even when the mouse is hovered over an invalid date. + \row \li readonly property bool \b styleData.pressed + \li \c true if the mouse is pressed on this cell. + \note This property is \c true even when the mouse is pressed on an invalid date. + \endtable + */ + property Component dayDelegate: Rectangle { + anchors.fill: parent + anchors.leftMargin: (!addExtraMargin || control.weekNumbersVisible) && styleData.index % CalendarUtils.daysInAWeek === 0 ? 0 : -1 + anchors.rightMargin: !addExtraMargin && styleData.index % CalendarUtils.daysInAWeek === CalendarUtils.daysInAWeek - 1 ? 0 : -1 + anchors.bottomMargin: !addExtraMargin && styleData.index >= CalendarUtils.daysInAWeek * (CalendarUtils.weeksOnACalendarMonth - 1) ? 0 : -1 + anchors.topMargin: styleData.selected ? -1 : 0 + color: styleData.date !== undefined && styleData.selected ? selectedDateColor : "transparent" + + readonly property bool addExtraMargin: control.frameVisible && styleData.selected + readonly property color sameMonthDateTextColor: "#444" + readonly property color selectedDateColor: Qt.platform.os === "osx" ? "#3778d0" : SystemPaletteSingleton.highlight(control.enabled) + readonly property color selectedDateTextColor: "white" + readonly property color differentMonthDateTextColor: "#bbb" + readonly property color invalidDateColor: "#dddddd" + Label { + id: dayDelegateText + text: styleData.date.getDate() + anchors.centerIn: parent + horizontalAlignment: Text.AlignRight + font.pixelSize: Math.min(parent.height/3, parent.width/3) + color: { + var theColor = invalidDateColor; + if (styleData.valid) { + // Date is within the valid range. + theColor = styleData.visibleMonth ? sameMonthDateTextColor : differentMonthDateTextColor; + if (styleData.selected) + theColor = selectedDateTextColor; + } + theColor; + } + } + } + + /*! + The delegate that styles each weekday. + + The height of the weekday row is calculated based on the maximum implicit height of the delegates. + + The properties provided to each delegate are: + \table + \row \li readonly property int \b styleData.index + \li The index (0-6) of the delegate. + \row \li readonly property int \b styleData.dayOfWeek + \li The day of the week this delegate represents. Possible values: + \list + \li \c Locale.Sunday + \li \c Locale.Monday + \li \c Locale.Tuesday + \li \c Locale.Wednesday + \li \c Locale.Thursday + \li \c Locale.Friday + \li \c Locale.Saturday + \endlist + \endtable + */ + property Component dayOfWeekDelegate: Rectangle { + color: gridVisible ? "#fcfcfc" : "transparent" + implicitHeight: Math.round(TextSingleton.implicitHeight * 2.25) + Label { + text: control.locale.dayName(styleData.dayOfWeek, control.dayOfWeekFormat) + anchors.centerIn: parent + } + } + + /*! + The delegate that styles each week number. + + The width of the week number column is calculated based on the maximum implicit width of the delegates. + + The properties provided to each delegate are: + \table + \row \li readonly property int \b styleData.index + \li The index (0-5) of the delegate. + \row \li readonly property int \b styleData.weekNumber + \li The number of the week this delegate represents. + \endtable + */ + property Component weekNumberDelegate: Rectangle { + implicitWidth: Math.round(TextSingleton.implicitHeight * 2) + Label { + text: styleData.weekNumber + anchors.centerIn: parent + color: "#444" + } + } + + /*! \internal */ + property Component panel: Item { + id: panelItem + + implicitWidth: backgroundLoader.implicitWidth + implicitHeight: backgroundLoader.implicitHeight + + property alias navigationBarItem: navigationBarLoader.item + + property alias dayOfWeekHeaderRow: dayOfWeekHeaderRow + + readonly property int weeksToShow: 6 + readonly property int rows: weeksToShow + readonly property int columns: CalendarUtils.daysInAWeek + + // The combined available width and height to be shared amongst each cell. + readonly property real availableWidth: viewContainer.width + readonly property real availableHeight: viewContainer.height + + property int hoveredCellIndex: -1 + property int pressedCellIndex: -1 + property int pressCellIndex: -1 + property var pressDate: null + + Rectangle { + anchors.fill: parent + color: "transparent" + border.color: gridColor + visible: control.frameVisible + } + + Item { + id: container + anchors.fill: parent + anchors.margins: control.frameVisible ? 1 : 0 + + Loader { + id: backgroundLoader + anchors.fill: parent + sourceComponent: background + } + + Loader { + id: navigationBarLoader + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + sourceComponent: navigationBar + active: control.navigationBarVisible + + property QtObject styleData: QtObject { + readonly property string title: control.locale.standaloneMonthName(control.visibleMonth) + + new Date(control.visibleYear, control.visibleMonth, 1).toLocaleDateString(control.locale, " yyyy") + } + } + + Row { + id: dayOfWeekHeaderRow + anchors.top: navigationBarLoader.bottom + anchors.left: parent.left + anchors.leftMargin: (control.weekNumbersVisible ? weekNumbersItem.width : 0) + anchors.right: parent.right + spacing: gridVisible ? __gridLineWidth : 0 + property alias __repeater: repeater + + Repeater { + id: repeater + model: CalendarHeaderModel { + locale: control.locale + } + Loader { + id: dayOfWeekDelegateLoader + sourceComponent: dayOfWeekDelegate + width: __cellRectAt(index).width + + readonly property int __index: index + readonly property var __dayOfWeek: dayOfWeek + + property QtObject styleData: QtObject { + readonly property alias index: dayOfWeekDelegateLoader.__index + readonly property alias dayOfWeek: dayOfWeekDelegateLoader.__dayOfWeek + } + } + } + } + + Rectangle { + id: topGridLine + color: __horizontalSeparatorColor + width: parent.width + height: __gridLineWidth + visible: gridVisible + anchors.top: dayOfWeekHeaderRow.bottom + } + + Row { + id: gridRow + width: weekNumbersItem.width + viewContainer.width + height: viewContainer.height + anchors.top: topGridLine.bottom + + Column { + id: weekNumbersItem + visible: control.weekNumbersVisible + height: viewContainer.height + spacing: gridVisible ? __gridLineWidth : 0 + Repeater { + id: weekNumberRepeater + model: panelItem.weeksToShow + + Loader { + id: weekNumberDelegateLoader + height: __cellRectAt(index * panelItem.columns).height + sourceComponent: weekNumberDelegate + + readonly property int __index: index + property int __weekNumber: control.__model.weekNumberAt(index) + + Connections { + target: control + + function onVisibleMonthChanged() { + __weekNumber = control.__model.weekNumberAt(index) + } + + function onVisibleYearChanged() { + __weekNumber = control.__model.weekNumberAt(index) + } + } + + Connections { + target: control.__model + function onCountChanged() { + __weekNumber = control.__model.weekNumberAt(index) + } + } + + property QtObject styleData: QtObject { + readonly property alias index: weekNumberDelegateLoader.__index + readonly property int weekNumber: weekNumberDelegateLoader.__weekNumber + } + } + } + } + + Rectangle { + id: separator + anchors.topMargin: - dayOfWeekHeaderRow.height - 1 + anchors.top: weekNumbersItem.top + anchors.bottom: weekNumbersItem.bottom + + width: __gridLineWidth + color: __verticalSeparatorColor + visible: control.weekNumbersVisible + } + + // Contains the grid lines and the grid itself. + Item { + id: viewContainer + width: container.width - (control.weekNumbersVisible ? weekNumbersItem.width + separator.width : 0) + height: container.height - navigationBarLoader.height - dayOfWeekHeaderRow.height - topGridLine.height + + Repeater { + id: verticalGridLineRepeater + model: panelItem.columns - 1 + delegate: Rectangle { + x: __cellRectAt(index + 1).x - __gridLineWidth + y: 0 + width: __gridLineWidth + height: viewContainer.height + color: gridColor + visible: gridVisible + } + } + + Repeater { + id: horizontalGridLineRepeater + model: panelItem.rows - 1 + delegate: Rectangle { + x: 0 + y: __cellRectAt((index + 1) * panelItem.columns).y - __gridLineWidth + width: viewContainer.width + height: __gridLineWidth + color: gridColor + visible: gridVisible + } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + + hoverEnabled: Settings.hoverEnabled + + function cellIndexAt(mouseX, mouseY) { + var viewContainerPos = viewContainer.mapFromItem(mouseArea, mouseX, mouseY); + var child = viewContainer.childAt(viewContainerPos.x, viewContainerPos.y); + // In the tests, the mouseArea sometimes gets picked instead of the cells, + // probably because stuff is still loading. To be safe, we check for that here. + return child && child !== mouseArea ? child.__index : -1; + } + + onEntered: { + hoveredCellIndex = cellIndexAt(mouseX, mouseY); + if (hoveredCellIndex === undefined) { + hoveredCellIndex = cellIndexAt(mouseX, mouseY); + } + + var date = view.model.dateAt(hoveredCellIndex); + if (__isValidDate(date)) { + control.hovered(date); + } + } + + onExited: { + hoveredCellIndex = -1; + } + + onPositionChanged: { + var indexOfCell = cellIndexAt(mouse.x, mouse.y); + var previousHoveredCellIndex = hoveredCellIndex; + hoveredCellIndex = indexOfCell; + if (indexOfCell !== -1) { + var date = view.model.dateAt(indexOfCell); + if (__isValidDate(date)) { + if (hoveredCellIndex !== previousHoveredCellIndex) + control.hovered(date); + + // The date must be different for the pressed signal to be emitted. + if (pressed && date.getTime() !== control.selectedDate.getTime()) { + control.pressed(date); + + // You can't select dates in a different month while dragging. + if (date.getMonth() === control.selectedDate.getMonth()) { + control.selectedDate = date; + pressedCellIndex = indexOfCell; + } + } + } + } + } + + onPressed: { + pressCellIndex = cellIndexAt(mouse.x, mouse.y); + pressDate = null; + if (pressCellIndex !== -1) { + var date = view.model.dateAt(pressCellIndex); + pressedCellIndex = pressCellIndex; + pressDate = date; + if (__isValidDate(date)) { + control.selectedDate = date; + control.pressed(date); + } + } + } + + onReleased: { + var indexOfCell = cellIndexAt(mouse.x, mouse.y); + if (indexOfCell !== -1) { + // The cell index might be valid, but the date has to be too. We could let the + // selected date validation take care of this, but then the selected date would + // change to the earliest day if a day before the minimum date is clicked, for example. + var date = view.model.dateAt(indexOfCell); + if (__isValidDate(date)) { + control.released(date); + } + } + pressedCellIndex = -1; + } + + onClicked: { + var indexOfCell = cellIndexAt(mouse.x, mouse.y); + if (indexOfCell !== -1 && indexOfCell === pressCellIndex) { + if (__isValidDate(pressDate)) + control.clicked(pressDate); + } + } + + onDoubleClicked: { + var indexOfCell = cellIndexAt(mouse.x, mouse.y); + if (indexOfCell !== -1) { + var date = view.model.dateAt(indexOfCell); + if (__isValidDate(date)) + control.doubleClicked(date); + } + } + + onPressAndHold: { + var indexOfCell = cellIndexAt(mouse.x, mouse.y); + if (indexOfCell !== -1 && indexOfCell === pressCellIndex) { + var date = view.model.dateAt(indexOfCell); + if (__isValidDate(date)) + control.pressAndHold(date); + } + } + } + + Connections { + target: control + function onSelectedDateChanged() { view.selectedDateChanged() } + } + + Repeater { + id: view + + property int currentIndex: -1 + + model: control.__model + + Component.onCompleted: selectedDateChanged() + + function selectedDateChanged() { + if (model !== undefined && model.locale !== undefined) { + currentIndex = model.indexAt(control.selectedDate); + } + } + + delegate: Loader { + id: delegateLoader + + x: __cellRectAt(index).x + y: __cellRectAt(index).y + width: __cellRectAt(index).width + height: __cellRectAt(index).height + sourceComponent: dayDelegate + + readonly property int __index: index + readonly property date __date: date + // We rely on the fact that an invalid QDate will be converted to a Date + // whose year is -4713, which is always an invalid date since our + // earliest minimum date is the year 1. + readonly property bool valid: __isValidDate(date) + + property QtObject styleData: QtObject { + readonly property alias index: delegateLoader.__index + readonly property bool selected: control.selectedDate.getFullYear() === date.getFullYear() && + control.selectedDate.getMonth() === date.getMonth() && + control.selectedDate.getDate() === date.getDate() + readonly property alias date: delegateLoader.__date + readonly property bool valid: delegateLoader.valid + // TODO: this will not be correct if the app is running when a new day begins. + readonly property bool today: date.getTime() === new Date().setHours(0, 0, 0, 0) + readonly property bool visibleMonth: date.getMonth() === control.visibleMonth + readonly property bool hovered: panelItem.hoveredCellIndex == index + readonly property bool pressed: panelItem.pressedCellIndex == index + // todo: pressed property here, clicked and doubleClicked in the control itself + } + } + } + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CheckBoxStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CheckBoxStyle.qml new file mode 100644 index 0000000..a476a95 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CheckBoxStyle.qml @@ -0,0 +1,193 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Window 2.1 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype CheckBoxStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup controlsstyling + \brief Provides custom styling for CheckBox. + + Example: + \qml + CheckBox { + text: "Check Box" + style: CheckBoxStyle { + indicator: Rectangle { + implicitWidth: 16 + implicitHeight: 16 + radius: 3 + border.color: control.activeFocus ? "darkblue" : "gray" + border.width: 1 + Rectangle { + visible: control.checked + color: "#555" + border.color: "#333" + radius: 1 + anchors.margins: 4 + anchors.fill: parent + } + } + } + } + \endqml +*/ +Style { + id: checkboxStyle + + /*! The \l CheckBox this style is attached to. */ + readonly property CheckBox control: __control + + /*! This defines the text label. */ + property Component label: Item { + implicitWidth: text.implicitWidth + 2 + implicitHeight: text.implicitHeight + baselineOffset: text.baselineOffset + Rectangle { + anchors.fill: text + anchors.margins: -1 + anchors.leftMargin: -3 + anchors.rightMargin: -3 + visible: control.activeFocus + height: 6 + radius: 3 + color: "#224f9fef" + border.color: "#47b" + opacity: 0.6 + } + Text { + id: text + text: StyleHelpers.stylizeMnemonics(control.text) + anchors.centerIn: parent + color: SystemPaletteSingleton.text(control.enabled) + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + } + /*! The background under indicator and label. */ + property Component background + + /*! The spacing between indicator and label. */ + property int spacing: Math.round(TextSingleton.implicitHeight/4) + + /*! This defines the indicator button. */ + property Component indicator: Item { + implicitWidth: Math.round(TextSingleton.implicitHeight) + implicitHeight: implicitWidth + Rectangle { + anchors.fill: parent + anchors.bottomMargin: -1 + color: "#44ffffff" + radius: baserect.radius + } + Rectangle { + id: baserect + gradient: Gradient { + GradientStop {color: "#eee" ; position: 0} + GradientStop {color: control.pressed ? "#eee" : "#fff" ; position: 0.1} + GradientStop {color: "#fff" ; position: 1} + } + radius: TextSingleton.implicitHeight * 0.16 + anchors.fill: parent + border.color: control.activeFocus ? "#47b" : "#999" + } + + Image { + source: "images/check.png" + opacity: control.checkedState === Qt.Checked ? control.enabled ? 1 : 0.5 : 0 + anchors.centerIn: parent + anchors.verticalCenterOffset: 1 + Behavior on opacity {NumberAnimation {duration: 80}} + } + + Rectangle { + anchors.fill: parent + anchors.margins: Math.round(baserect.radius) + antialiasing: true + gradient: Gradient { + GradientStop {color: control.pressed ? "#555" : "#999" ; position: 0} + GradientStop {color: "#555" ; position: 1} + } + radius: baserect.radius - 1 + anchors.centerIn: parent + anchors.alignWhenCentered: true + border.color: "#222" + Behavior on opacity {NumberAnimation {duration: 80}} + opacity: control.checkedState === Qt.PartiallyChecked ? control.enabled ? 1 : 0.5 : 0 + } + } + + /*! \internal */ + property Component panel: Item { + implicitWidth: Math.max(backgroundLoader.implicitWidth, row.implicitWidth + padding.left + padding.right) + implicitHeight: Math.max(backgroundLoader.implicitHeight, labelLoader.implicitHeight + padding.top + padding.bottom,indicatorLoader.implicitHeight + padding.top + padding.bottom) + baselineOffset: labelLoader.item ? padding.top + labelLoader.item.baselineOffset : 0 + + Loader { + id: backgroundLoader + sourceComponent: background + anchors.fill: parent + } + RowLayout { + id: row + anchors.fill: parent + + anchors.leftMargin: padding.left + anchors.rightMargin: padding.right + anchors.topMargin: padding.top + anchors.bottomMargin: padding.bottom + + spacing: checkboxStyle.spacing + Loader { + id: indicatorLoader + sourceComponent: indicator + } + Loader { + id: labelLoader + Layout.fillWidth: true + sourceComponent: label + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularButtonStyle.qml new file mode 100644 index 0000000..b2324e0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularButtonStyle.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Extras.Private 1.0 + +ButtonStyle { + id: buttonStyle + + label: Text { + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: control.text + font.pixelSize: TextSingleton.font.pixelSize * 1.25 + color: control.pressed || control.checked ? __buttonHelper.textColorDown : __buttonHelper.textColorUp + styleColor: control.pressed || control.checked ? __buttonHelper.textRaisedColorDown : __buttonHelper.textRaisedColorUp + style: Text.Raised + wrapMode: Text.Wrap + fontSizeMode: Text.Fit + } + + /*! \internal */ + property alias __buttonHelper: buttonHelper + + CircularButtonStyleHelper { + id: buttonHelper + control: buttonStyle.control + } + + background: Item { + implicitWidth: __buttonHelper.implicitWidth + implicitHeight: __buttonHelper.implicitHeight + + Canvas { + id: backgroundCanvas + anchors.fill: parent + + Connections { + target: control + function onPressedChanged() { backgroundCanvas.requestPaint() } + } + + onPaint: { + var ctx = getContext("2d"); + __buttonHelper.paintBackground(ctx); + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularGaugeStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularGaugeStyle.qml new file mode 100644 index 0000000..e40b8bb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularGaugeStyle.qml @@ -0,0 +1,497 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtGraphicalEffects 1.0 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 + +/*! + \qmltype CircularGaugeStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.5 + \ingroup controlsstyling + \brief Provides custom styling for CircularGauge. + + You can create a custom circular gauge by replacing the following delegates: + \list + \li \l background + \li \l tickmark + \li \l minorTickmark + \li \l tickmarkLabel + \li \l needle + \li \l foreground + \endlist + + Below is an example that changes the needle to a basic orange \l Rectangle: + \code + CircularGauge { + style: CircularGaugeStyle { + needle: Rectangle { + y: outerRadius * 0.15 + implicitWidth: outerRadius * 0.03 + implicitHeight: outerRadius * 0.9 + antialiasing: true + color: Qt.rgba(0.66, 0.3, 0, 1) + } + } + } + \endcode + + The result: + \image circulargauge-needle-example-2.png CircularGaugeStyle example + + \section2 Direction + + \l minimumValueAngle and \l maximumValueAngle determine not only the + position of the tickmarks, labels and needle, but the direction in which + they are displayed around the gauge. For example, if \l minimumValueAngle + is greater than \l maximumValueAngle, the gauge will be anti-clockwise. + Below, there are two gauges: the top gauge has a \l minimumValueAngle of + \c -90 degrees and a \l maximumValueAngle of \c 90 degrees, and the bottom + gauge has the opposite. + + \image circulargauge-reversed.png Reversed CircularGauge + + \sa {Styling CircularGauge} +*/ + +Style { + id: circularGaugeStyle + + /*! + The \l CircularGauge that this style is attached to. + */ + readonly property CircularGauge control: __control + + /*! + The distance from the center of the gauge to the outer edge of the + gauge. + + This property is useful for determining the size of the various + components of the style, in order to ensure that they are scaled + proportionately when the gauge is resized. + */ + readonly property real outerRadius: Math.min(control.width, control.height) * 0.5 + + /*! + This property determines the angle at which the minimum value is + displayed on the gauge. + + The angle set affects the following components of the gauge: + \list + \li The angle of the needle + \li The position of the tickmarks and labels + \endlist + + The angle origin points north: + + \image circulargauge-angles.png + + There is no minimum or maximum angle for this property, but the default + style only supports angles whose absolute range is less than or equal + to \c 360 degrees. This is because ranges higher than \c 360 degrees + will cause the tickmarks and labels to overlap each other. + + The default value is \c -145. + */ + property real minimumValueAngle: -145 + + /*! + This property determines the angle at which the maximum value is + displayed on the gauge. + + The angle set affects the following components of the gauge: + \list + \li The angle of the needle + \li The position of the tickmarks and labels + \endlist + + The angle origin points north: + + \image circulargauge-angles.png + + There is no minimum or maximum angle for this property, but the default + style only supports angles whose absolute range is less than or equal + to \c 360 degrees. This is because ranges higher than \c 360 degrees + will cause the tickmarks and labels to overlap each other. + + The default value is \c 145. + */ + property real maximumValueAngle: 145 + + /*! + The range between \l minimumValueAngle and \l maximumValueAngle, in + degrees. This value will always be positive. + */ + readonly property real angleRange: control.__panel.circularTickmarkLabel.angleRange + + /*! + This property holds the rotation of the needle in degrees. + */ + property real needleRotation: { + var percentage = (control.value - control.minimumValue) / (control.maximumValue - control.minimumValue); + minimumValueAngle + percentage * angleRange; + } + + /*! + The interval at which tickmarks are displayed. + + For example, if this property is set to \c 10 (the default), + control.minimumValue to \c 0, and control.maximumValue to \c 100, + the tickmarks displayed will be 0, 10, 20, etc., to 100, + around the gauge. + */ + property real tickmarkStepSize: 10 + + /*! + The distance in pixels from the outside of the gauge (outerRadius) at + which the outermost point of the tickmark line is drawn. + */ + property real tickmarkInset: 0 + + + /*! + The amount of tickmarks displayed by the gauge, calculated from + \l tickmarkStepSize and the control's + \l {CircularGauge::minimumValue}{minimumValue} and + \l {CircularGauge::maximumValue}{maximumValue}. + + \sa minorTickmarkCount + */ + readonly property int tickmarkCount: control.__panel.circularTickmarkLabel.tickmarkCount + + /*! + The amount of minor tickmarks between each tickmark. + + The default value is \c 4. + + \sa tickmarkCount + */ + property int minorTickmarkCount: 4 + + /*! + The distance in pixels from the outside of the gauge (outerRadius) at + which the outermost point of the minor tickmark line is drawn. + */ + property real minorTickmarkInset: 0 + + /*! + The distance in pixels from the outside of the gauge (outerRadius) at + which the center of the value marker text is drawn. + */ + property real labelInset: __protectedScope.toPixels(0.19) + + /*! + The interval at which tickmark labels are displayed. + + For example, if this property is set to \c 10 (the default), + control.minimumValue to \c 0, and control.maximumValue to \c 100, the + tickmark labels displayed will be 0, 10, 20, etc., to 100, + around the gauge. + */ + property real labelStepSize: tickmarkStepSize + + /*! + The amount of tickmark labels displayed by the gauge, calculated from + \l labelStepSize and the control's + \l {CircularGauge::minimumValue}{minimumValue} and + \l {CircularGauge::maximumValue}{maximumValue}. + + \sa tickmarkCount, minorTickmarkCount + */ + readonly property int labelCount: control.__panel.circularTickmarkLabel.labelCount + + /*! \qmlmethod real CircularGaugeStyle::valueToAngle(real value) + Returns \a value as an angle in degrees. + + This function is useful for custom drawing or positioning of items in + the style's components. For example, it can be used to calculate the + angles at which to draw an arc around the gauge indicating the safe + area for the needle to be within. + + For example, if minimumValueAngle is set to \c 270 and + maximumValueAngle is set to \c 90, this function will return \c 270 + when passed minimumValue and \c 90 when passed maximumValue. + + \sa {Styling CircularGauge#styling-circulargauge-background}{ + Styling CircularGauge's background} + */ + function valueToAngle(value) { + return control.__panel.circularTickmarkLabel.valueToAngle(value); + } + + property QtObject __protectedScope: QtObject { + /*! + Converts a value expressed as a percentage of \l outerRadius to + a pixel value. + */ + function toPixels(percentageOfOuterRadius) { + return percentageOfOuterRadius * outerRadius; + } + } + + /*! + The background of the gauge. + + If set, the background determines the implicit size of the gauge. + + By default, there is no background defined. + + \sa {Styling CircularGauge#styling-circulargauge-background}{ + Styling CircularGauge's background} + */ + property Component background + + /*! + This component defines each individual tickmark. The position of each + tickmark is already set; only the + \l {Item::implicitWidth}{implicitWidth} and + \l {Item::implicitHeight}{implicitHeight} need to be specified. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this tickmark. + \row \li \c {readonly property real} \b styleData.value + \li The value that this tickmark represents. + \endtable + + To illustrate what these properties refer to, we can use the following + example: + + \snippet circulargauge-tickmark-indices-values.qml tickmarks + + We've replaced the conventional \e line tickmarks with \l Text items + and have hidden the tickmarkLabel component in order to make the + association clearer: + + \image circulargauge-tickmark-indices-values.png Tickmarks + + The index property can be useful if you have another model that + contains images to display for each index, for example. + + The value property is useful for drawing lower and upper limits around + the gauge to indicate the recommended value ranges. For example, speeds + above 200 kilometers an hour in a car's speedometer could be indicated + as dangerous using this property. + + \sa {Styling CircularGauge#styling-circulargauge-tickmark}{ + Styling CircularGauge's tickmark} + */ + property Component tickmark: Rectangle { + implicitWidth: outerRadius * 0.02 + antialiasing: true + implicitHeight: outerRadius * 0.06 + color: "#c8c8c8" + } + + /*! + This component defines each individual minor tickmark. The position of + each minor tickmark is already set; only the + \l {Item::implicitWidth}{implicitWidth} and + \l {Item::implicitHeight}{implicitHeight} need to be specified. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this tickmark. + \row \li \c {readonly property real} \b styleData.value + \li The value that this tickmark represents. + \endtable + + \sa {Styling CircularGauge#styling-circulargauge-minorTickmark}{ + Styling CircularGauge's minorTickmark} + */ + property Component minorTickmark: Rectangle { + implicitWidth: outerRadius * 0.01 + antialiasing: true + implicitHeight: outerRadius * 0.03 + color: "#c8c8c8" + } + + /*! + This defines the text of each tickmark label on the gauge. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this label. + \row \li \c {readonly property real} \b styleData.value + \li The value that this label represents. + \endtable + + \sa {Styling CircularGauge#styling-circulargauge-tickmarkLabel}{ + Styling CircularGauge's tickmarkLabel} + */ + property Component tickmarkLabel: Text { + font.pixelSize: Math.max(6, __protectedScope.toPixels(0.12)) + text: styleData.value + color: "#c8c8c8" + antialiasing: true + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + /*! + The needle that points to the gauge's current value. + + This component is drawn below the \l foreground component. + + The style expects the needle to be pointing up at a rotation of \c 0, + in order for the rotation to be correct. For example: + + \image circulargauge-needle.png CircularGauge's needle + + When defining your own needle component, the only properties that the + style requires you to set are the + \l {Item::implicitWidth}{implicitWidth} and + \l {Item::implicitHeight}{implicitHeight}. + + Optionally, you can set \l {Item::x}{x} and \l {Item::y}{y} to change + the needle's transform origin. Setting the \c x position can be useful + for needle images where the needle is not centered exactly + horizontally. Setting the \c y position allows you to make the base of + the needle hang over the center of the gauge. + + \sa {Styling CircularGauge#styling-circulargauge-needle}{ + Styling CircularGauge's needle} + */ + property Component needle: Item { + implicitWidth: __protectedScope.toPixels(0.08) + implicitHeight: 0.9 * outerRadius + + Image { + anchors.fill: parent + source: "images/needle.png" + } + } + + /*! + The foreground of the gauge. This component is drawn above all others. + + Like \l background, the foreground component fills the entire gauge. + + By default, the knob of the gauge is defined here. + + \sa {Styling CircularGauge#styling-circulargauge-foreground}{ + Styling CircularGauge's foreground} + */ + property Component foreground: Item { + Image { + source: "images/knob.png" + anchors.centerIn: parent + scale: { + var idealHeight = __protectedScope.toPixels(0.2); + var originalImageHeight = sourceSize.height; + idealHeight / originalImageHeight; + } + } + } + + /*! \internal */ + property Component panel: Item { + id: panelItem + implicitWidth: backgroundLoader.item ? backgroundLoader.implicitWidth : TextSingleton.implicitHeight * 16 + implicitHeight: backgroundLoader.item ? backgroundLoader.implicitHeight : TextSingleton.implicitHeight * 16 + + property alias background: backgroundLoader.item + property alias circularTickmarkLabel: circularTickmarkLabel_ + + Loader { + id: backgroundLoader + sourceComponent: circularGaugeStyle.background + width: outerRadius * 2 + height: outerRadius * 2 + anchors.centerIn: parent + } + + CircularTickmarkLabel { + id: circularTickmarkLabel_ + anchors.fill: backgroundLoader + + minimumValue: control.minimumValue + maximumValue: control.maximumValue + stepSize: control.stepSize + tickmarksVisible: control.tickmarksVisible + minimumValueAngle: circularGaugeStyle.minimumValueAngle + maximumValueAngle: circularGaugeStyle.maximumValueAngle + tickmarkStepSize: circularGaugeStyle.tickmarkStepSize + tickmarkInset: circularGaugeStyle.tickmarkInset + minorTickmarkCount: circularGaugeStyle.minorTickmarkCount + minorTickmarkInset: circularGaugeStyle.minorTickmarkInset + labelInset: circularGaugeStyle.labelInset + labelStepSize: circularGaugeStyle.labelStepSize + + style: CircularTickmarkLabelStyle { + tickmark: circularGaugeStyle.tickmark + minorTickmark: circularGaugeStyle.minorTickmark + tickmarkLabel: circularGaugeStyle.tickmarkLabel + } + } + + Loader { + id: needleLoader + sourceComponent: circularGaugeStyle.needle + transform: [ + Rotation { + angle: needleRotation + origin.x: needleLoader.width / 2 + origin.y: needleLoader.height + }, + Translate { + x: panelItem.width / 2 - needleLoader.width / 2 + y: panelItem.height / 2 - needleLoader.height + } + ] + } + + Loader { + id: foreground + sourceComponent: circularGaugeStyle.foreground + anchors.fill: backgroundLoader + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularTickmarkLabelStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularTickmarkLabelStyle.qml new file mode 100644 index 0000000..494a7f2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CircularTickmarkLabelStyle.qml @@ -0,0 +1,309 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras.Private 1.0 +import QtQuick.Extras.Private.CppUtils 1.0 + +Style { + id: circularTickmarkLabelStyle + + /*! + The distance from the center of the control to the outer edge. + */ + readonly property real outerRadius: Math.min(control.width, control.height) * 0.5 + + property QtObject __protectedScope: QtObject { + /*! + Converts a value expressed as a percentage of \l outerRadius to + a pixel value. + */ + function toPixels(percentageOfOuterRadius) { + return percentageOfOuterRadius * outerRadius; + } + } + + /*! + This component defines each individual tickmark. The position of each + tickmark is already set; only the size needs to be specified. + */ + property Component tickmark: Rectangle { + width: outerRadius * 0.02 + antialiasing: true + height: outerRadius * 0.06 + color: "#c8c8c8" + } + + /*! + This component defines each individual minor tickmark. The position of + each minor tickmark is already set; only the size needs to be specified. + */ + property Component minorTickmark: Rectangle { + width: outerRadius * 0.01 + antialiasing: true + height: outerRadius * 0.03 + color: "#c8c8c8" + } + + /*! + This defines the text of each tickmark label on the gauge. + */ + property Component tickmarkLabel: Text { + font.pixelSize: Math.max(6, __protectedScope.toPixels(0.12)) + text: styleData.value + color: "#c8c8c8" + antialiasing: true + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + /*! \internal */ + property Component panel: Item { + id: panelItem + implicitWidth: 250 + implicitHeight: 250 + + function rangeUsed(count, stepSize) { + return (((count - 1) * stepSize) / (control.maximumValue - control.minimumValue)) * control.angleRange; + } + + readonly property real tickmarkSectionSize: rangeUsed(control.tickmarkCount, control.tickmarkStepSize) / (control.tickmarkCount - 1) + readonly property real tickmarkSectionValue: (control.maximumValue - control.minimumValue) / (control.tickmarkCount - 1) + readonly property real minorTickmarkSectionSize: tickmarkSectionSize / (control.minorTickmarkCount + 1) + readonly property real minorTickmarkSectionValue: tickmarkSectionValue / (control.minorTickmarkCount + 1) + readonly property int totalMinorTickmarkCount: { + // The size of each section within two major tickmarks, expressed as a percentage. + var minorSectionPercentage = 1 / (control.minorTickmarkCount + 1); + // The amount of major tickmarks not able to be displayed; will be 0 if they all fit. + var tickmarksNotDisplayed = control.__tickmarkCount - control.tickmarkCount; + var count = control.minorTickmarkCount * (control.tickmarkCount - 1); + // We'll try to display as many minor tickmarks as we can to fill up the space. + count + tickmarksNotDisplayed / minorSectionPercentage; + } + readonly property real labelSectionSize: rangeUsed(control.labelCount, control.labelStepSize) / (control.labelCount - 1) + + function toPixels(percentageOfOuterRadius) { + return percentageOfOuterRadius * outerRadius; + } + + /*! + Returns the angle of \a marker (in the range 0 ... n - 1, where n + is the amount of markers) on the gauge where sections are of size + tickmarkSectionSize. + */ + function tickmarkAngleFromIndex(tickmarkIndex) { + return tickmarkIndex * tickmarkSectionSize + control.minimumValueAngle; + } + + function labelAngleFromIndex(labelIndex) { + return labelIndex * labelSectionSize + control.minimumValueAngle; + } + + function labelPosFromIndex(index, labelWidth, labelHeight) { + return MathUtils.centerAlongCircle(outerRadius, outerRadius, labelWidth, labelHeight, + MathUtils.degToRadOffset(labelAngleFromIndex(index)), + outerRadius - control.labelInset) + } + + function minorTickmarkAngleFromIndex(minorTickmarkIndex) { + var baseAngle = tickmarkAngleFromIndex(Math.floor(minorTickmarkIndex / control.minorTickmarkCount)); + // + minorTickmarkSectionSize because we don't want the first minor tickmark to start on top of its "parent" tickmark. + var relativeMinorAngle = (minorTickmarkIndex % control.minorTickmarkCount * minorTickmarkSectionSize) + minorTickmarkSectionSize; + return baseAngle + relativeMinorAngle; + } + + function tickmarkValueFromIndex(majorIndex) { + return (majorIndex * tickmarkSectionValue) + control.minimumValue; + } + + function tickmarkValueFromMinorIndex(minorIndex) { + var majorIndex = Math.floor(minorIndex / control.minorTickmarkCount); + var relativeMinorIndex = minorIndex % control.minorTickmarkCount; + return tickmarkValueFromIndex(majorIndex) + ((relativeMinorIndex * minorTickmarkSectionValue) + minorTickmarkSectionValue); + } + + Loader { + active: control.tickmarksVisible && tickmark != null + width: outerRadius * 2 + height: outerRadius * 2 + anchors.centerIn: parent + + sourceComponent: Repeater { + id: tickmarkRepeater + model: control.tickmarkCount + delegate: Loader { + id: tickmarkLoader + objectName: "tickmark" + styleData.index + x: tickmarkRepeater.width / 2 + y: tickmarkRepeater.height / 2 + + transform: [ + Translate { + y: -outerRadius + control.tickmarkInset + }, + Rotation { + angle: panelItem.tickmarkAngleFromIndex(styleData.index) - __tickmarkWidthAsAngle / 2 + } + ] + + sourceComponent: tickmark + + property int __index: index + property QtObject styleData: QtObject { + readonly property alias index: tickmarkLoader.__index + readonly property real value: tickmarkValueFromIndex(index) + } + + readonly property real __tickmarkWidthAsAngle: MathUtils.radToDeg((width / (MathUtils.pi2 * outerRadius)) * MathUtils.pi2) + } + } + } + Loader { + active: control.tickmarksVisible && minorTickmark != null + width: outerRadius * 2 + height: outerRadius * 2 + anchors.centerIn: parent + + sourceComponent: Repeater { + id: minorRepeater + anchors.fill: parent + model: totalMinorTickmarkCount + delegate: Loader { + id: minorTickmarkLoader + objectName: "minorTickmark" + styleData.index + x: minorRepeater.width / 2 + y: minorRepeater.height / 2 + transform: [ + Translate { + y: -outerRadius + control.minorTickmarkInset + }, + Rotation { + angle: panelItem.minorTickmarkAngleFromIndex(styleData.index) - __minorTickmarkWidthAsAngle / 2 + } + ] + + sourceComponent: minorTickmark + + property int __index: index + property QtObject styleData: QtObject { + readonly property alias index: minorTickmarkLoader.__index + readonly property real value: tickmarkValueFromMinorIndex(index) + } + + readonly property real __minorTickmarkWidthAsAngle: MathUtils.radToDeg((width / (MathUtils.pi2 * outerRadius)) * MathUtils.pi2) + } + } + } + Loader { + id: labelLoader + active: control.tickmarksVisible && tickmarkLabel != null + width: outerRadius * 2 + height: outerRadius * 2 + anchors.centerIn: parent + + sourceComponent: Item { + id: labelItem + width: outerRadius * 2 + height: outerRadius * 2 + anchors.centerIn: parent + + Connections { + target: control + function onMinimumValueChanged() { valueTextModel.update() } + function onMaximumValueChanged() { valueTextModel.update() } + function onTickmarkStepSizeChanged() { valueTextModel.update() } + function onLabelStepSizeChanged() { valueTextModel.update() } + } + + Repeater { + id: labelItemRepeater + + Component.onCompleted: valueTextModel.update(); + + model: ListModel { + id: valueTextModel + + function update() { + if (control.labelStepSize === 0) { + return; + } + + // Make bigger if it's too small and vice versa. + // +1 because we want to show 11 values, with, for example: 0, 10, 20... 100. + var difference = control.labelCount - count; + if (difference > 0) { + for (; difference > 0; --difference) { + append({ value: 0 }); + } + } else if (difference < 0) { + for (; difference < 0; ++difference) { + remove(count - 1); + } + } + + var index = 0; + for (var value = control.minimumValue; + value <= control.maximumValue && index < count; + value += control.labelStepSize, ++index) { + setProperty(index, "value", value); + } + } + } + delegate: Loader { + id: tickmarkLabelDelegateLoader + objectName: "labelDelegateLoader" + index + sourceComponent: tickmarkLabel + x: pos.x + y: pos.y + + readonly property point pos: panelItem.labelPosFromIndex(index, width, height); + + readonly property int __index: index + readonly property real __value: value + property QtObject styleData: QtObject { + readonly property var value: index != -1 ? tickmarkLabelDelegateLoader.__value : 0 + readonly property alias index: tickmarkLabelDelegateLoader.__index + } + } + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ComboBoxStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ComboBoxStyle.qml new file mode 100644 index 0000000..ea13696 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ComboBoxStyle.qml @@ -0,0 +1,328 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Window 2.1 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ComboBoxStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup controlsstyling + \brief Provides custom styling for ComboBox. +*/ + +Style { + id: cbStyle + + /*! + \qmlproperty enumeration renderType + \since QtQuick.Controls.Styles 1.2 + + Override the default rendering type for the control. + + Supported render types are: + \list + \li Text.QtRendering + \li Text.NativeRendering + \endlist + + The default value is platform dependent. + + \sa Text::renderType + */ + property int renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + + /*! + \since QtQuick.Controls.Styles 1.3 + The font of the control. + */ + property font font + + /*! + \since QtQuick.Controls.Styles 1.3 + The text color. + */ + property color textColor: SystemPaletteSingleton.text(control.enabled) + + /*! + \since QtQuick.Controls.Styles 1.3 + The text highlight color, used behind selections. + */ + property color selectionColor: SystemPaletteSingleton.highlight(control.enabled) + + /*! + \since QtQuick.Controls.Styles 1.3 + The highlighted text color, used in selections. + */ + property color selectedTextColor: SystemPaletteSingleton.highlightedText(control.enabled) + + /*! The \l ComboBox this style is attached to. */ + readonly property ComboBox control: __control + + /*! The padding between the background and the label components. */ + padding { top: 4 ; left: 6 ; right: 6 ; bottom:4 } + + /*! The size of the drop down button when the combobox is editable. */ + property int dropDownButtonWidth: Math.round(TextSingleton.implicitHeight) + + /*! \internal Alias kept for backwards compatibility with a spelling mistake in 5.2.0) */ + property alias drowDownButtonWidth: cbStyle.dropDownButtonWidth + + /*! This defines the background of the button. */ + property Component background: Item { + implicitWidth: Math.round(TextSingleton.implicitHeight * 4.5) + implicitHeight: Math.max(25, Math.round(TextSingleton.implicitHeight * 1.2)) + Rectangle { + anchors.fill: parent + anchors.bottomMargin: control.pressed ? 0 : -1 + color: "#10000000" + radius: baserect.radius + } + Rectangle { + id: baserect + gradient: Gradient { + GradientStop {color: control.pressed ? "#bababa" : "#fefefe" ; position: 0} + GradientStop {color: control.pressed ? "#ccc" : "#e3e3e3" ; position: 1} + } + radius: TextSingleton.implicitHeight * 0.16 + anchors.fill: parent + border.color: control.activeFocus ? "#47b" : "#999" + Rectangle { + anchors.fill: parent + radius: parent.radius + color: control.activeFocus ? "#47b" : "white" + opacity: control.hovered || control.activeFocus ? 0.1 : 0 + Behavior on opacity {NumberAnimation{ duration: 100 }} + } + } + Image { + id: imageItem + visible: control.menu !== null + source: "images/arrow-down.png" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: dropDownButtonWidth / 2 + opacity: control.enabled ? 0.6 : 0.3 + } + } + + /*! \internal */ + property Component __editor: Item { + implicitWidth: 100 + implicitHeight: Math.max(25, Math.round(TextSingleton.implicitHeight * 1.2)) + clip: true + Rectangle { + anchors.fill: parent + anchors.bottomMargin: 0 + color: "#44ffffff" + radius: baserect.radius + } + Rectangle { + id: baserect + anchors.rightMargin: -radius + anchors.bottomMargin: 1 + gradient: Gradient { + GradientStop {color: "#e0e0e0" ; position: 0} + GradientStop {color: "#fff" ; position: 0.1} + GradientStop {color: "#fff" ; position: 1} + } + radius: TextSingleton.implicitHeight * 0.16 + anchors.fill: parent + border.color: control.activeFocus ? "#47b" : "#999" + } + Rectangle { + color: "#aaa" + anchors.bottomMargin: 2 + anchors.topMargin: 1 + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + width: 1 + } + } + + /*! This defines the label of the button. */ + property Component label: Item { + implicitWidth: textitem.implicitWidth + 20 + baselineOffset: textitem.y + textitem.baselineOffset + Text { + id: textitem + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: 4 + anchors.rightMargin: 10 + anchors.verticalCenter: parent.verticalCenter + text: control.currentText + renderType: cbStyle.renderType + font: cbStyle.font + color: cbStyle.textColor + elide: Text.ElideRight + } + } + + /*! \internal */ + property Component panel: Item { + property bool popup: false + property font font: cbStyle.font + property color textColor: cbStyle.textColor + property color selectionColor: cbStyle.selectionColor + property color selectedTextColor: cbStyle.selectedTextColor + property int dropDownButtonWidth: cbStyle.dropDownButtonWidth + anchors.centerIn: parent + anchors.fill: parent + implicitWidth: backgroundLoader.implicitWidth + implicitHeight: Math.max(labelLoader.implicitHeight + padding.top + padding.bottom, backgroundLoader.implicitHeight) + baselineOffset: labelLoader.item ? padding.top + labelLoader.item.baselineOffset: 0 + + Loader { + id: backgroundLoader + anchors.fill: parent + sourceComponent: background + + } + + Loader { + id: editorLoader + anchors.fill: parent + anchors.rightMargin: dropDownButtonWidth + padding.right + anchors.bottomMargin: -1 + sourceComponent: control.editable ? __editor : null + } + + Loader { + id: labelLoader + sourceComponent: label + visible: !control.editable + anchors.fill: parent + anchors.leftMargin: padding.left + anchors.topMargin: padding.top + anchors.rightMargin: padding.right + anchors.bottomMargin: padding.bottom + } + } + + /*! \internal */ + property Component __dropDownStyle: MenuStyle { + font: cbStyle.font + __labelColor: cbStyle.textColor + __selectedLabelColor: cbStyle.selectedTextColor + __selectedBackgroundColor: cbStyle.selectionColor + __maxPopupHeight: 600 + __menuItemType: "comboboxitem" + __scrollerStyle: ScrollViewStyle { } + } + + /*! \internal */ + property Component __popupStyle: Style { + property int __maxPopupHeight: 400 + property int submenuOverlap: 0 + property int submenuPopupDelay: 100 + + property Component frame: Rectangle { + id: popupFrame + border.color: "white" + Text { + text: "NOT IMPLEMENTED" + color: "red" + font { + pixelSize: 10 + bold: true + } + anchors.centerIn: parent + rotation: -Math.atan2(popupFrame.height, popupFrame.width) * 180 / Math.PI + } + } + + property Component menuItemPanel: Text { + text: styleData.text + } + + property Component __scrollerStyle: null + } + + /*! \internal + The cursor handle. + \since QtQuick.Controls.Styles 1.3 + + The parent of the handle is positioned to the top left corner of + the cursor position. The interactive area is determined by the + geometry of the handle delegate. + + The following signals and read-only properties are available within the scope + of the handle delegate: + \table + \row \li \b {styleData.activated()} [signal] \li Emitted when the handle is activated ie. the editor is clicked. + \row \li \b {styleData.pressed} : bool \li Whether the handle is pressed. + \row \li \b {styleData.position} : int \li The character position of the handle. + \row \li \b {styleData.lineHeight} : real \li The height of the line the handle is on. + \row \li \b {styleData.hasSelection} : bool \li Whether the editor has selected text. + \endtable + */ + property Component __cursorHandle + + /*! \internal + The selection handle. + \since QtQuick.Controls.Styles 1.3 + + The parent of the handle is positioned to the top left corner of + the first selected character. The interactive area is determined + by the geometry of the handle delegate. + + The following signals and read-only properties are available within the scope + of the handle delegate: + \table + \row \li \b {styleData.activated()} [signal] \li Emitted when the handle is activated ie. the editor is clicked. + \row \li \b {styleData.pressed} : bool \li Whether the handle is pressed. + \row \li \b {styleData.position} : int \li The character position of the handle. + \row \li \b {styleData.lineHeight} : real \li The height of the line the handle is on. + \row \li \b {styleData.hasSelection} : bool \li Whether the editor has selected text. + \endtable + */ + property Component __selectionHandle + + /*! \internal + The cursor delegate. + \since QtQuick.Controls.Styles 1.3 + */ + property Component __cursorDelegate +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CommonStyleHelper.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CommonStyleHelper.qml new file mode 100644 index 0000000..5deeb35 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/CommonStyleHelper.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +QtObject { + property Item control + + property color buttonColorUpTop: "#e3e3e3" + property color buttonColorUpBottom: "#b3b3b3" + property color buttonColorDownTop: "#d3d3d3" + property color buttonColorDownBottom: "#939393" + property color textColorUp: "#4e4e4e" + property color textColorDown: "#303030" + property color textRaisedColorUp: "#ffffff" + property color textRaisedColorDown: "#e3e3e3" + property color offColor: "#ff0000" + property color offColorShine: "#ff6666" + property color onColor: "#00cc00" + property color onColorShine: "#66ff66" + property color inactiveColor: "#1f1f1f" + property color inactiveColorShine: "#666666" +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/DelayButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/DelayButtonStyle.qml new file mode 100644 index 0000000..00a1716 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/DelayButtonStyle.qml @@ -0,0 +1,230 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtGraphicalEffects 1.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private.CppUtils 1.1 + +/*! + \qmltype DelayButtonStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.5 + \ingroup controlsstyling + \brief Provides custom styling for DelayButton. + + You can create a custom DelayButton by replacing the following delegates: + \list + \li \l foreground + \li \l {ButtonStyle::}{label} + \endlist +*/ + +CircularButtonStyle { + id: delayButtonStyle + + /*! + The \l DelayButton that this style is attached to. + */ + readonly property DelayButton control: __control + + /*! + The gradient of the progress bar around the button. + */ + property Gradient progressBarGradient: Gradient { + GradientStop { + position: 0 + color: "#ff6666" + } + GradientStop { + position: 1 + color: "#ff0000" + } + } + + /*! + The color of the drop shadow under the progress bar. + */ + property color progressBarDropShadowColor: "#ff6666" + + background: Item { + implicitWidth: __buttonHelper.implicitWidth + implicitHeight: __buttonHelper.implicitHeight + + Canvas { + id: backgroundCanvas + anchors.fill: parent + + Connections { + target: control + function onPressedChanged() { backgroundCanvas.requestPaint() } + function onCheckedChanged() { backgroundCanvas.requestPaint() } + } + + onPaint: { + var ctx = getContext("2d"); + __buttonHelper.paintBackground(ctx); + } + } + } + + /*! + The foreground of the button. + + The progress bar is drawn here. + */ + property Component foreground: Item { + id: foregroundItem + + state: "normal" + states: [ + State { + name: "normal" + + PropertyChanges { + target: foregroundItem + opacity: 1 + } + }, + State { + name: "activated" + } + ] + + transitions: [ + Transition { + from: "normal" + to: "activated" + SequentialAnimation { + loops: Animation.Infinite + + NumberAnimation { + target: foregroundItem + property: "opacity" + from: 0.8 + to: 0 + duration: 500 + easing.type: Easing.InOutSine + } + NumberAnimation { + target: foregroundItem + property: "opacity" + from: 0 + to: 0.8 + duration: 500 + easing.type: Easing.InOutSine + } + } + } + ] + + Connections { + target: control + function onActivated() { state = "activated" } + function onCheckedChanged() { if (!control.checked) state = "normal" } + } + + CircularProgressBar { + id: progressBar + visible: false + width: Math.min(parent.width, parent.height) + progressBarDropShadow.radius * 3 * 2 + height: width + anchors.centerIn: parent + antialiasing: true + barWidth: __buttonHelper.outerArcLineWidth + inset: progressBarDropShadow.radius * 3 + minimumValueAngle: -180 + maximumValueAngle: 180 + + progress: control.progress + + // TODO: Add gradient property if/when we drop support for building with 5.1. + function updateGradient() { + clearStops(); + for (var i = 0; i < progressBarGradient.stops.length; ++i) { + addStop(progressBarGradient.stops[i].position, progressBarGradient.stops[i].color); + } + } + + Component.onCompleted: updateGradient() + + Connections { + target: delayButtonStyle + function onProgressBarGradientChanged() { progressBar.updateGradient() } + } + } + + DropShadow { + id: progressBarDropShadow + anchors.fill: progressBar + // QTBUG-33747 +// cached: !control.pressed + color: progressBarDropShadowColor + source: progressBar + } + } + + panel: Item { + implicitWidth: backgroundLoader.implicitWidth + implicitHeight: backgroundLoader.implicitHeight + + Loader { + id: backgroundLoader + anchors.fill: parent + sourceComponent: background + } + + Loader { + id: foregroundLoader + anchors.fill: parent + sourceComponent: foreground + } + + Loader { + id: labelLoader + sourceComponent: label + anchors.fill: parent + anchors.leftMargin: padding.left + anchors.topMargin: padding.top + anchors.rightMargin: padding.right + anchors.bottomMargin: padding.bottom + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/DialStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/DialStyle.qml new file mode 100644 index 0000000..9517245 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/DialStyle.qml @@ -0,0 +1,359 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 +import QtQuick.Extras.Private.CppUtils 1.0 + +/*! + \qmltype DialStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.5 + \ingroup controlsstyling + \brief Provides custom styling for Dial. + + You can create a custom dial by replacing the following delegates: + \list + \li \l background + \endlist +*/ + +Style { + id: dialStyle + + /*! + The \l Dial that this style is attached to. + */ + readonly property Dial control: __control + + /*! + The distance from the center of the dial to the outer edge of the dial. + + This property is useful for determining the size of the various + components of the style, in order to ensure that they are scaled + proportionately when the dial is resized. + */ + readonly property real outerRadius: Math.min(control.height, control.width) / 2 + + /*! + The distance in pixels from the outside of the dial (outerRadius) + to the center of the handle. + */ + property real handleInset: (__tickmarkRadius * 4) + ((__handleRadius * 2) * 0.55) + + /*! + The interval at which tickmarks are displayed. + + For example, if this property is set to \c 10, + control.minimumValue to \c 0, and control.maximumValue to \c 100, + the tickmarks displayed will be 0, 10, 20, etc., to 100, along + the circumference of the dial. + */ + property real tickmarkStepSize: 1 + + /*! + The distance in pixels from the outside of the dial (outerRadius) at + which the outermost point of the tickmark line is drawn. + */ + property real tickmarkInset: 0 + + + /*! + The amount of tickmarks displayed by the dial, calculated from + \l tickmarkStepSize and the control's + \l {Dial::minimumValue}{minimumValue} and + \l {Dial::maximumValue}{maximumValue}. + + \sa minorTickmarkCount + */ + readonly property int tickmarkCount: control.__panel.circularTickmarkLabel.tickmarkCount + + /*! + The amount of minor tickmarks between each tickmark. + + \sa tickmarkCount + */ + property int minorTickmarkCount: 0 + + /*! + The distance in pixels from the outside of the dial (outerRadius) at + which the outermost point of the minor tickmark line is drawn. + */ + property real minorTickmarkInset: 0 + + /*! + The distance in pixels from the outside of the dial (outerRadius) at + which the center of the value marker text is drawn. + */ + property real labelInset: 0 + + /*! + The interval at which tickmark labels are displayed. + + For example, if this property is set to \c 10 (the default), + control.minimumValue to \c 0, and control.maximumValue to \c 100, the + tickmark labels displayed will be 0, 10, 20, etc., to 100, + along the circumference of the dial. + */ + property real labelStepSize: tickmarkStepSize + + /*! + The amount of tickmark labels displayed by the dial, calculated from + \l labelStepSize and the control's + \l {Dial::minimumValue}{minimumValue} and + \l {Dial::maximumValue}{maximumValue}. + + \sa tickmarkCount, minorTickmarkCount + */ + readonly property int labelCount: control.__panel.circularTickmarkLabel.labelCount + + /*! \qmlmethod real DialStyle::valueToAngle(real value) + Returns \a value as an angle in degrees. + + This function is useful for custom drawing or positioning of items in + the style's components. For example, it can be used to calculate the + angles at which to draw an arc around the dial indicating the safe + range of values. + */ + function valueToAngle(value) { + return control.__panel.circularTickmarkLabel.valueToAngle(value); + } + + /*! \internal */ + readonly property real __tickmarkRadius: outerRadius * 0.06 + + /*! \internal */ + readonly property real __handleRadius: outerRadius * 0.15 + + /*! + \internal + + This property determines whether it is possible to change the value of + the dial simply by pressing/tapping. + + If \c false, the user must drag to rotate the dial and hence change the + value. + + This property is useful for touch devices, where it is easy to + accidentally tap while flicking, for example. + */ + property bool __dragToSet: Settings.hasTouchScreen && Settings.isMobile + + /*! + The background of the dial. + + The implicit size of the dial is taken from this component. + */ + property Component background: Item { + id: backgroundItem + implicitWidth: backgroundHelper.implicitWidth + implicitHeight: backgroundHelper.implicitHeight + + CircularButtonStyleHelper { + id: backgroundHelper + control: dialStyle.control + property color zeroMarkerColor: "#a8a8a8" + property color zeroMarkerColorTransparent: "transparent" + property real zeroMarkerLength: outerArcLineWidth * 1.25 + property real zeroMarkerWidth: outerArcLineWidth * 0.3 + + smallestAxis: Math.min(backgroundItem.width, backgroundItem.height) - __tickmarkRadius * 4 + } + + Canvas { + id: backgroundCanvas + anchors.fill: parent + + readonly property real xCenter: width / 2 + readonly property real yCenter: height / 2 + + onPaint: { + var ctx = getContext("2d"); + backgroundHelper.paintBackground(ctx); + } + } + } + + /*! + The handle of the dial. + + The handle is automatically positioned within the dial, based on the + \l handleInset and the implicit width and height of the handle itself. + */ + property Component handle: Canvas { + implicitWidth: __handleRadius * 2 + implicitHeight: __handleRadius * 2 + + HandleStyleHelper { + id: handleHelper + } + + onPaint: { + var ctx = getContext("2d"); + handleHelper.paintHandle(ctx, 1, 1, width - 2, height - 2); + } + } + + /*! + This component defines each individual tickmark. The position of each + tickmark is already set; only the + \l {Item::implicitWidth}{implicitWidth} and + \l {Item::implicitHeight}{implicitHeight} need to be specified. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this tickmark. + \row \li \c {readonly property real} \b styleData.value + \li The value that this tickmark represents. + \endtable + */ + property Component tickmark: Rectangle { + implicitWidth: outerRadius * 0.015 + (styleData.index === 0 || styleData.index === tickmarkCount ? 1 : (styleData.index) / tickmarkCount) * __tickmarkRadius * 0.75 + implicitHeight: implicitWidth + radius: height / 2 + color: styleData.index === 0 ? "transparent" : Qt.rgba(0, 0, 0, 0.266) + antialiasing: true + border.width: styleData.index === 0 ? Math.max(1, outerRadius * 0.0075) : 0 + border.color: Qt.rgba(0, 0, 0, 0.266) + } + + /*! + This component defines each individual minor tickmark. The position of each + minor tickmark is already set; only the + \l {Item::implicitWidth}{implicitWidth} and + \l {Item::implicitHeight}{implicitHeight} need to be specified. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this tickmark. + \row \li \c {readonly property real} \b styleData.value + \li The value that this tickmark represents. + \endtable + + By default, no minor tickmark is defined. + */ + property Component minorTickmark + + /*! + This defines the text of each tickmark label on the dial. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this label. + \row \li \c {readonly property real} \b styleData.value + \li The value that this label represents. + \endtable + + By default, no label is defined. + */ + property Component tickmarkLabel + + /*! \internal */ + property Component panel: Item { + implicitWidth: backgroundLoader.implicitWidth + implicitHeight: backgroundLoader.implicitHeight + + property alias background: backgroundLoader.item + property alias circularTickmarkLabel: circularTickmarkLabel_ + + Loader { + id: backgroundLoader + sourceComponent: dialStyle.background + width: outerRadius * 2 + height: width + anchors.centerIn: parent + } + + Loader { + id: handleLoader + sourceComponent: dialStyle.handle + x: backgroundLoader.x + __pos.x - width / 2 + y: backgroundLoader.y + __pos.y - height / 2 + + readonly property point __pos: { + var radians = 0; + if (control.__wrap) { + radians = (control.value - control.minimumValue) / + (control.maximumValue - control.minimumValue) * + (MathUtils.pi2) + backgroundHelper.zeroAngle; + } else { + radians = -(Math.PI * 8 - (control.value - control.minimumValue) * 10 * + Math.PI / (control.maximumValue - control.minimumValue)) / 6; + } + + return MathUtils.centerAlongCircle(backgroundLoader.width / 2, backgroundLoader.height / 2, + 0, 0, radians, outerRadius - handleInset) + } + } + + CircularTickmarkLabel { + id: circularTickmarkLabel_ + anchors.fill: backgroundLoader + + minimumValue: control.minimumValue + maximumValue: control.maximumValue + stepSize: control.stepSize + tickmarksVisible: control.tickmarksVisible + minimumValueAngle: -150 + maximumValueAngle: 150 + tickmarkStepSize: dialStyle.tickmarkStepSize + tickmarkInset: dialStyle.tickmarkInset + minorTickmarkCount: dialStyle.minorTickmarkCount + minorTickmarkInset: dialStyle.minorTickmarkInset + labelInset: dialStyle.labelInset + labelStepSize: dialStyle.labelStepSize + + style: CircularTickmarkLabelStyle { + tickmark: dialStyle.tickmark + minorTickmark: dialStyle.minorTickmark + tickmarkLabel: dialStyle.tickmarkLabel + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/FocusFrameStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/FocusFrameStyle.qml new file mode 100644 index 0000000..3db2479 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/FocusFrameStyle.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype FocusFrameStyle + \internal + \inqmlmodule QtQuick.Controls.Styles +*/ +Item { + property int margin: -3 +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/GaugeStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/GaugeStyle.qml new file mode 100644 index 0000000..4ad1f7e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/GaugeStyle.qml @@ -0,0 +1,544 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 + +/*! + \qmltype GaugeStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.5 + \ingroup controlsstyling + \brief Provides custom styling for Gauge. + + You can create a custom gauge by replacing the following delegates: + \list + \li \l background + \li valueBar + \li tickmarkLabel + \endlist + + Below, you'll find an example of how to create a temperature gauge that + changes color as its value increases: + + \code + import QtQuick 2.2 + import QtQuick.Controls 1.4 + import QtQuick.Controls.Styles 1.4 + import QtQuick.Extras 1.4 + + Rectangle { + width: 80 + height: 200 + + Timer { + running: true + repeat: true + interval: 2000 + onTriggered: gauge.value = gauge.value == gauge.maximumValue ? 5 : gauge.maximumValue + } + + Gauge { + id: gauge + anchors.fill: parent + anchors.margins: 10 + + value: 5 + Behavior on value { + NumberAnimation { + duration: 1000 + } + } + + style: GaugeStyle { + valueBar: Rectangle { + implicitWidth: 16 + color: Qt.rgba(gauge.value / gauge.maximumValue, 0, 1 - gauge.value / gauge.maximumValue, 1) + } + } + } + } + \endcode + + \image gauge-temperature.png + The gauge displaying values at various points during the animation. + + \sa {Styling Gauge} +*/ + +Style { + id: gaugeStyle + + /*! + The \l Gauge that this style is attached to. + */ + readonly property Gauge control: __control + + /*! + This property holds the value displayed by the gauge as a position in + pixels. + + It is useful for custom styling. + */ + readonly property real valuePosition: control.__panel.valuePosition + + /*! + The background of the gauge, displayed behind the \l valueBar. + + By default, no background is defined. + */ + property Component background + + /*! + Each tickmark displayed by the gauge. + + To set the size of the tickmarks, specify an + \l {Item::implicitWidth}{implicitWidth} and + \l {Item::implicitHeight}{implicitHeight}. + + The widest tickmark will determine the space set aside for all + tickmarks. For this reason, the \c implicitWidth of each tickmark + should be greater than or equal to that of each minor tickmark. If you + need minor tickmarks to have greater widths than the major tickmarks, + set the larger width in a child item of the \l minorTickmark component. + + For layouting reasons, each tickmark should have the same + \c implicitHeight. If different heights are needed for individual + tickmarks, specify those heights in a child item of the component. + + In the example below, we decrease the height of the tickmarks: + + \code + tickmark: Item { + implicitWidth: 18 + implicitHeight: 1 + + Rectangle { + color: "#c8c8c8" + anchors.fill: parent + anchors.leftMargin: 3 + anchors.rightMargin: 3 + } + } + \endcode + + \image gauge-tickmark-example.png Gauge tickmark example + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this tickmark. + \row \li \c {readonly property real} \b styleData.value + \li The value that this tickmark represents. + \row \li \c {readonly property real} \b styleData.valuePosition + \li The value that this tickmark represents as a position in + pixels, with 0 being at the bottom of the gauge. + \endtable + + \sa minorTickmark + */ + property Component tickmark: Item { + implicitWidth: Math.round(TextSingleton.height * 1.1) + implicitHeight: Math.max(2, Math.round(TextSingleton.height * 0.1)) + + Rectangle { + color: "#c8c8c8" + anchors.fill: parent + anchors.leftMargin: Math.round(TextSingleton.implicitHeight * 0.2) + anchors.rightMargin: Math.round(TextSingleton.implicitHeight * 0.2) + } + } + + /*! + Each minor tickmark displayed by the gauge. + + To set the size of the minor tickmarks, specify an + \l {Item::implicitWidth}{implicitWidth} and + \l {Item::implicitHeight}{implicitHeight}. + + For layouting reasons, each minor tickmark should have the same + \c implicitHeight. If different heights are needed for individual + tickmarks, specify those heights in a child item of the component. + + In the example below, we decrease the width of the minor tickmarks: + + \code + minorTickmark: Item { + implicitWidth: 8 + implicitHeight: 1 + + Rectangle { + color: "#cccccc" + anchors.fill: parent + anchors.leftMargin: 2 + anchors.rightMargin: 4 + } + } + \endcode + + \image gauge-minorTickmark-example.png Gauge minorTickmark example + + Each instance of this component has access to the following property: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this minor tickmark. + \row \li \c {readonly property real} \b styleData.value + \li The value that this minor tickmark represents. + \row \li \c {readonly property real} \b styleData.valuePosition + \li The value that this minor tickmark represents as a + position in pixels, with 0 being at the bottom of the + gauge. + \endtable + + \sa tickmark + */ + property Component minorTickmark: Item { + implicitWidth: Math.round(TextSingleton.implicitHeight * 0.65) + implicitHeight: Math.max(1, Math.round(TextSingleton.implicitHeight * 0.05)) + + Rectangle { + color: "#c8c8c8" + anchors.fill: parent + anchors.leftMargin: control.__tickmarkAlignment === Qt.AlignBottom || control.__tickmarkAlignment === Qt.AlignRight + ? Math.max(3, Math.round(TextSingleton.implicitHeight * 0.2)) + : 0 + anchors.rightMargin: control.__tickmarkAlignment === Qt.AlignBottom || control.__tickmarkAlignment === Qt.AlignRight + ? 0 + : Math.max(3, Math.round(TextSingleton.implicitHeight * 0.2)) + } + } + + /*! + This defines the text of each tickmark label on the gauge. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this label. + \row \li \c {readonly property real} \b styleData.value + \li The value that this label represents. + \endtable + */ + property Component tickmarkLabel: Text { + text: control.formatValue(styleData.value) + font: control.font + color: "#c8c8c8" + antialiasing: true + } + + /*! + The bar that represents the value of the gauge. + + To height of the value bar is automatically resized according to + \l {Gauge::value}{value}, and does not need to be specified. + + When a custom valueBar is defined, its + \l {Item::implicitWidth}{implicitWidth} property must be set. + */ + property Component valueBar: Rectangle { + color: "#00bbff" + implicitWidth: TextSingleton.implicitHeight + } + + /*! + The bar that represents the foreground of the gauge. + + This component is drawn above every other component. + */ + property Component foreground: Canvas { + readonly property real xCenter: width / 2 + readonly property real yCenter: height / 2 + property real shineLength: height * 0.95 + + onPaint: { + var ctx = getContext("2d"); + ctx.reset(); + + ctx.beginPath(); + ctx.rect(0, 0, width, height); + + var gradient = ctx.createLinearGradient(0, yCenter, width, yCenter); + + gradient.addColorStop(0, Qt.rgba(1, 1, 1, 0.08)); + gradient.addColorStop(1, Qt.rgba(1, 1, 1, 0.20)); + ctx.fillStyle = gradient; + ctx.fill(); + } + } + + /*! \internal */ + property Component panel: Item { + id: panelComponent + implicitWidth: control.orientation === Qt.Vertical ? tickmarkLabelBoundsWidth + rawBarWidth : TextSingleton.height * 14 + implicitHeight: control.orientation === Qt.Vertical ? TextSingleton.height * 14 : tickmarkLabelBoundsWidth + rawBarWidth + + readonly property int tickmarkCount: (control.maximumValue - control.minimumValue) / control.tickmarkStepSize + 1 + readonly property real tickmarkSpacing: (tickmarkLabelBounds.height - tickmarkWidth * tickmarkCount) / (tickmarkCount - 1) + + property real tickmarkLength: tickmarkColumn.width + // Can't deduce this from the column, so we set it from within the first tickmark delegate loader. + property real tickmarkWidth: 2 + + readonly property real tickmarkOffset: control.orientation === Qt.Vertical ? control.__hiddenText.height / 2 : control.__hiddenText.width / 2 + + readonly property real minorTickmarkStep: control.tickmarkStepSize / (control.minorTickmarkCount + 1); + + /*! + Returns the marker text that should be displayed based on + \a markerPos (\c 0 to \c 1.0). + */ + function markerTextFromPos(markerPos) { + return markerPos * (control.maximumValue - control.minimumValue) + control.minimumValue; + } + + readonly property real rawBarWidth: valueBarLoader.item.implicitWidth + readonly property real barLength: (control.orientation === Qt.Vertical ? control.height : control.width) - (tickmarkOffset * 2 - 2) + + readonly property real tickmarkLabelBoundsWidth: tickmarkLength + (control.orientation === Qt.Vertical ? control.__hiddenText.width : control.__hiddenText.height) + readonly property int valuePosition: valueBarLoader.height + + Item { + id: container + + width: control.orientation === Qt.Vertical ? parent.width : parent.height + height: control.orientation === Qt.Vertical ? parent.height : parent.width + rotation: control.orientation === Qt.Horizontal ? 90 : 0 + transformOrigin: Item.Center + anchors.centerIn: parent + + Item { + id: valueBarItem + + x: control.__tickmarkAlignment === Qt.AlignLeft || control.__tickmarkAlignment === Qt.AlignTop ? tickmarkLabelBounds.x + tickmarkLabelBounds.width : 0 + width: rawBarWidth + height: barLength + anchors.verticalCenter: parent.verticalCenter + + Loader { + id: backgroundLoader + sourceComponent: background + anchors.fill: parent + } + + Loader { + id: valueBarLoader + sourceComponent: valueBar + + readonly property real valueAsPercentage: (control.value - control.minimumValue) / (control.maximumValue - control.minimumValue) + + y: Math.round(parent.height - height) + height: Math.round(valueAsPercentage * parent.height) + } + } + Item { + id: tickmarkLabelBounds + + x: control.__tickmarkAlignment === Qt.AlignLeft || control.__tickmarkAlignment === Qt.AlignTop ? 0 : valueBarItem.width + width: tickmarkLabelBoundsWidth + height: barLength + anchors.verticalCenter: parent.verticalCenter + // We want our items to be laid out from bottom to top, but Column can't do that, so we flip + // the whole item containing the tickmarks and labels vertically. Then, we flip each tickmark + // and label back again. + transform: Rotation { + axis.x: 1 + axis.y: 0 + axis.z: 0 + origin.x: tickmarkLabelBounds.width / 2 + origin.y: tickmarkLabelBounds.height / 2 + angle: 180 + } + + Column { + id: tickmarkColumn + x: control.__tickmarkAlignment === Qt.AlignRight || control.__tickmarkAlignment === Qt.AlignBottom ? 0 : tickmarkLabelBounds.width - width + spacing: tickmarkSpacing + anchors.verticalCenter: parent.verticalCenter + + Repeater { + id: tickmarkRepeater + model: tickmarkCount + delegate: Loader { + id: tickmarkDelegateLoader + + sourceComponent: gaugeStyle.tickmark + transform: Rotation { + axis.x: 1 + axis.y: 0 + axis.z: 0 + origin.x: tickmarkDelegateLoader.width / 2 + origin.y: tickmarkDelegateLoader.height / 2 + angle: 180 + } + + onHeightChanged: { + if (index == 0) + tickmarkWidth = height; + } + + readonly property int __index: index + property QtObject styleData: QtObject { + readonly property alias index: tickmarkDelegateLoader.__index + readonly property real value: (index / (tickmarkCount - 1)) * (control.maximumValue - control.minimumValue) + control.minimumValue + readonly property int valuePosition: Math.round(tickmarkDelegateLoader.y) + } + } + } + } + + // Doesn't need to be in a column, since we assume that the major tickmarks will always be longer than us. + Repeater { + id: minorTickmarkRepeater + model: (tickmarkCount - 1) * control.minorTickmarkCount + delegate: Loader { + id: minorTickmarkDelegateLoader + + x: control.__tickmarkAlignment === Qt.AlignRight || control.__tickmarkAlignment === Qt.AlignBottom ? 0 : tickmarkLabelBounds.width - width + y: { + var tickmarkWidthOffset = Math.floor(index / control.minorTickmarkCount) * tickmarkWidth + tickmarkWidth; + var relativePosition = (index % control.minorTickmarkCount + 1) * (tickmarkSpacing / (control.minorTickmarkCount + 1)); + var clusterOffset = Math.floor(index / control.minorTickmarkCount) * tickmarkSpacing; + // We assume that each minorTickmark's height is the same. + return clusterOffset + tickmarkWidthOffset + relativePosition - height / 2; + } + + transform: Rotation { + axis.x: 1 + axis.y: 0 + axis.z: 0 + origin.x: minorTickmarkDelegateLoader.width / 2 + origin.y: minorTickmarkDelegateLoader.height / 2 + angle: 180 + } + + sourceComponent: gaugeStyle.minorTickmark + + readonly property int __index: index + property QtObject styleData: QtObject { + readonly property alias index: minorTickmarkDelegateLoader.__index + readonly property real value: { + var tickmarkIndex = Math.floor(index / control.minorTickmarkCount); + return index * minorTickmarkStep + minorTickmarkStep * tickmarkIndex + minorTickmarkStep + control.minimumValue; + } + readonly property int valuePosition: Math.round(minorTickmarkDelegateLoader.y) + } + } + } + + Item { + id: tickmarkLabelItem + x: control.__tickmarkAlignment === Qt.AlignRight || control.__tickmarkAlignment === Qt.AlignBottom + ? tickmarkLength + : tickmarkLabelBounds.width - tickmarkLength - width + width: control.__hiddenText.width + // Use the bar height instead of the container's, as the labels seem to be translated by 1 when we + // flip the control vertically, and this fixes that. + height: parent.height + anchors.verticalCenter: parent.verticalCenter + + Repeater { + id: tickmarkTextRepeater + model: tickmarkCount + delegate: Item { + x: { + if (control.orientation === Qt.Vertical) + return 0; + + // Align the text to the edge of the tickmarks. + return ((width - height) / 2) * (control.__tickmarkAlignment === Qt.AlignBottom ? -1 : 1); + } + y: index * labelDistance - height / 2 + + width: control.__hiddenText.width + height: control.__hiddenText.height + + transformOrigin: Item.Center + rotation: control.orientation === Qt.Vertical ? 0 : 90 + + readonly property real labelDistance: tickmarkLabelBounds.height / (tickmarkCount - 1) + + Loader { + id: tickmarkTextRepeaterDelegate + + x: { + if (control.orientation === Qt.Horizontal) { + return parent.width / 2 - width / 2; + } + + return control.__tickmarkAlignment === Qt.AlignRight || control.__tickmarkAlignment === Qt.AlignBottom + ? 0 + : parent.width - width; + } + + transform: Rotation { + axis.x: 1 + axis.y: 0 + axis.z: 0 + origin.x: tickmarkTextRepeaterDelegate.width / 2 + origin.y: tickmarkTextRepeaterDelegate.height / 2 + angle: 180 + } + + sourceComponent: tickmarkLabel + + readonly property int __index: index + property QtObject styleData: QtObject { + readonly property alias index: tickmarkTextRepeaterDelegate.__index + readonly property real value: markerTextFromPos(index / (tickmarkTextRepeater.count - 1)) + } + } + } + } + } + } + Loader { + id: foregroundLoader + sourceComponent: foreground + anchors.fill: valueBarItem + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/GroupBoxStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/GroupBoxStyle.qml new file mode 100644 index 0000000..061a806 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/GroupBoxStyle.qml @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype GroupBoxStyle + \internal + \inqmlmodule QtQuick.Controls.Styles + \ingroup controlsstyling + \since 5.1 +*/ +Style { + + /*! The \l GroupBox this style is attached to. */ + readonly property GroupBox control: __control + + /*! The margin from the content item to the groupbox. */ + padding { + top: (control.title.length > 0 || control.checkable ? TextSingleton.implicitHeight : 0) + 10 + left: 8 + right: 8 + bottom: 6 + } + + /*! The title text color. */ + property color textColor: SystemPaletteSingleton.text(control.enabled) + + /*! The check box. */ + property Component checkbox: Item { + implicitWidth: 18 + implicitHeight: 18 + BorderImage { + anchors.fill: parent + source: "images/editbox.png" + border.top: 6 + border.bottom: 6 + border.left: 6 + border.right: 6 + } + Rectangle { + height: 16 + width: 16 + antialiasing: true + visible: control.checked + color: "#666" + radius: 1 + anchors.margins: 4 + anchors.fill: parent + anchors.topMargin: 3 + anchors.bottomMargin: 5 + border.color: "#222" + opacity: control.enabled ? 1 : 0.5 + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + border.color: "#33ffffff" + } + } + BorderImage { + anchors.fill: parent + anchors.margins: -1 + source: "images/focusframe.png" + visible: control.activeFocus + border.left: 4 + border.right: 4 + border.top: 4 + border.bottom: 4 + } + } + + /*! The groupbox frame. */ + property Component panel: Item { + anchors.fill: parent + Loader { + id: checkboxloader + anchors.left: parent.left + sourceComponent: control.checkable ? checkbox : null + anchors.verticalCenter: label.verticalCenter + width: item ? item.implicitWidth : 0 + } + + Text { + id: label + anchors.top: parent.top + anchors.left: checkboxloader.right + anchors.margins: 4 + text: control.title + color: textColor + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + + BorderImage { + anchors.fill: parent + anchors.topMargin: padding.top - 7 + source: "images/groupbox.png" + border.left: 4 + border.right: 4 + border.top: 4 + border.bottom: 4 + visible: !control.flat + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/HandleStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/HandleStyle.qml new file mode 100644 index 0000000..0713c9f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/HandleStyle.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 + +Style { + id: handleStyle + property alias handleColorTop: __helper.handleColorTop + property alias handleColorBottom: __helper.handleColorBottom + property alias handleColorBottomStop: __helper.handleColorBottomStop + + HandleStyleHelper { + id: __helper + } + + property Component handle: Item { + implicitWidth: 50 + implicitHeight: 50 + + Canvas { + id: handleCanvas + anchors.fill: parent + + onPaint: { + var ctx = getContext("2d"); + __helper.paintHandle(ctx); + } + } + } + + property Component panel: Item { + Loader { + id: handleLoader + sourceComponent: handle + anchors.fill: parent + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/HandleStyleHelper.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/HandleStyleHelper.qml new file mode 100644 index 0000000..78059bf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/HandleStyleHelper.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +QtObject { + id: handleStyleHelper + + property color handleColorTop: "#969696" + property color handleColorBottom: Qt.rgba(0.9, 0.9, 0.9, 0.298) + property real handleColorBottomStop: 0.7 + + property color handleRingColorTop: "#b0b0b0" + property color handleRingColorBottom: "transparent" + + /*! + If \a ctx is the only argument, this is equivalent to calling + paintHandle(\c ctx, \c 0, \c 0, \c ctx.canvas.width, \c ctx.canvas.height). + */ + function paintHandle(ctx, handleX, handleY, handleWidth, handleHeight) { + ctx.reset(); + + if (handleWidth < 0) + return; + + if (arguments.length == 1) { + handleX = 0; + handleY = 0; + handleWidth = ctx.canvas.width; + handleHeight = ctx.canvas.height; + } + + ctx.beginPath(); + var gradient = ctx.createRadialGradient(handleX, handleY, 0, + handleX, handleY, handleWidth * 1.5); + gradient.addColorStop(0, handleColorTop); + gradient.addColorStop(handleColorBottomStop, handleColorBottom); + ctx.ellipse(handleX, handleY, handleWidth, handleHeight); + ctx.fillStyle = gradient; + ctx.fill(); + + /* Draw the ring gradient around the handle. */ + // Clip first, so we only draw inside the ring. + ctx.beginPath(); + ctx.ellipse(handleX, handleY, handleWidth, handleHeight); + ctx.ellipse(handleX + 2, handleY + 2, handleWidth - 4, handleHeight - 4); + ctx.clip(); + + ctx.beginPath(); + gradient = ctx.createLinearGradient(handleX + handleWidth / 2, handleY, + handleX + handleWidth / 2, handleY + handleHeight); + gradient.addColorStop(0, handleRingColorTop); + gradient.addColorStop(1, handleRingColorBottom); + ctx.ellipse(handleX, handleY, handleWidth, handleHeight); + ctx.fillStyle = gradient; + ctx.fill(); + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/MenuBarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/MenuBarStyle.qml new file mode 100644 index 0000000..ade34b0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/MenuBarStyle.qml @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype MenuBarStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.3 + \ingroup controlsstyling + \brief Provides custom styling for MenuBar. + + \note Styling menu bars may not be supported on platforms using native menu bars + through their QPA plugin. +*/ + +Style { + id: root + + /*! + \qmlmethod string MenuBarStyle::formatMnemonic(string text, bool underline = false) + Returns a formatted string to render mnemonics for a given menu item \a text. + + The mnemonic character is prefixed by an ampersand in the original string. + + Passing \c true for \e underline will underline the mnemonic character (e.g., + \c formatMnemonic("&File", true) will return \c "File"). Passing \c false + for \a underline will return the plain text form (e.g., \c formatMnemonic("&File", false) + will return \c "File"). + + \sa Label + */ + function formatMnemonic(text, underline) { + return underline ? StyleHelpers.stylizeMnemonics(text) : StyleHelpers.removeMnemonics(text) + } + + /*! The background for the full menu bar. + + The background will be extended to the full containing window width. + Its height will always fit all of the menu bar items. The final size + will include the paddings. + */ + property Component background: Rectangle { + color: "#dcdcdc" + implicitHeight: 20 + } + + /*! The menu bar item. + + \target styleData properties + This item has to be configured using the \b styleData object which is in scope, + and contains the following read-only properties: + \table + \row \li \b {styleData.index} : int \li The index of the menu item in its menu. + \row \li \b {styleData.selected} : bool \li \c true if the menu item is selected. + \row \li \b {styleData.open} : bool \li \c true when the pull down menu is open. + \row \li \b {styleData.text} : string \li The menu bar item's text. + \row \li \b {styleData.underlineMnemonic} : bool \li When \c true, the style should underline the menu item's label mnemonic. + \endtable + + */ + property Component itemDelegate: Rectangle { + implicitWidth: text.width + 12 + implicitHeight: text.height + 4 + color: styleData.enabled && styleData.open ? "#49d" : "transparent" + + Text { + id: text + font: root.font + text: formatMnemonic(styleData.text, styleData.underlineMnemonic) + anchors.centerIn: parent + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + color: styleData.open ? "white" : SystemPaletteSingleton.windowText(control.enabled && styleData.enabled) + } + } + + /*! The style component for the menubar's own menus and their submenus. + + \sa {MenuStyle} + */ + property Component menuStyle: MenuStyle { + font: root.font + } + + /*! + \since QtQuick.Controls.Styles 1.3 + The font of the control. + */ + property font font + + /*! \internal */ + property bool __isNative: true +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/MenuStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/MenuStyle.qml new file mode 100644 index 0000000..f40e0af --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/MenuStyle.qml @@ -0,0 +1,477 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Window 2.1 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype MenuStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.3 + \ingroup controlsstyling + \brief Provides custom styling for Menu. + + \target styleData properties + The \b styleData object contains the following read-only properties: + \table + \row \li \b {styleData.index} : int \li The index of the menu item in its menu. + \row \li \b {styleData.type} : enumeration \li The type of menu item. See below for possible values. + \row \li \b {styleData.selected} : bool \li \c true if the menu item is selected. + \row \li \b {styleData.pressed} : bool \li \c true if the menu item is pressed. Available since 5.4. + \row \li \b {styleData.text} : string \li The menu item's text, or title if it's a submenu. + \row \li \b {styleData.underlineMnemonic} : bool \li Whether the style should underline the menu item's label mnemonic. + \row \li \b {styleData.shortcut} : string \li The text for the menu item's shortcut. + \row \li \b {styleData.iconSource} : url \li The source URL to the menu item's icon. Undefined if it has no icon. + \row \li \b {styleData.enabled} : bool \li \c true if the menu item is enabled. + \row \li \b {styleData.checkable} : bool \li \c true if the menu item is checkable. + \row \li \b {styleData.exclusive} : bool \li \c true if the menu item is checkable, and it's part of an \l ExclusiveGroup. + \row \li \b {styleData.checked} : bool \li \c true if the menu item is checkable and currently checked. + \row \li \b {styleData.scrollerDirection} : enumeration \li If the menu item is a scroller, its pointing direction. + Valid values are \c Qt.UpArrow, \c Qt.DownArrow, and \c Qt.NoArrow. + \endtable + + The valid values for \b {styleData.type} are: + \list + \li MenuItemType.Item + \li MenuItemType.Menu + \li MenuItemType.Separator + \li MenuItemType.ScrollIndicator + \endlist + + \note Styling menus may not be supported on platforms using native menus + through their QPA plugin. +*/ + +Style { + id: styleRoot + + padding { + top: 1 + bottom: 1 + left: 1 + right: 1 + } + + /*! The amount of pixels by which a submenu popup overlaps horizontally its parent menu. */ + property int submenuOverlap: 1 + + /*! The number of milliseconds to wait before opening a submenu. */ + property int submenuPopupDelay: 200 + + /*! + \qmlmethod string MenuStyle::formatMnemonic(string text, bool underline = false) + Returns a rich-text string to render mnemonics for a given menu item \a text. + + The mnemonic character is prefixed by an ampersand in the original string. + + Passing \c true for \a underline will underline the mnemonic character (e.g., + \c formatMnemonic("&Open...", true) will return \c "Open..."). Passing \c false + for \a underline will return the plain text form (e.g., \c formatMnemonic("&Open...", false) + will return \c "Open..."). + + \sa Label + */ + function formatMnemonic(text, underline) { + return underline ? StyleHelpers.stylizeMnemonics(text) : StyleHelpers.removeMnemonics(text) + } + + /*! The background frame for the menu popup. + + The \l Menu will resize the frame to its contents plus the padding. + */ + property Component frame: Rectangle { + color: styleRoot.__backgroundColor + border { width: 1; color: styleRoot.__borderColor } + } + + /*! \qmlproperty Object MenuStyle::itemDelegate + + The object containing the menu item subcontrol components. These subcontrols are used + for normal menu items only, i.e. not for separators or scroll indicators. + + The subcontrols are: + + \list + \li \b {itemDelegate.background} : Component + + The menu item background component. + + Its appearance generally changes with \l {styleData properties} {styleData.selected} + and \l {styleData properties} {styleData.enabled}. + + The default implementation shows only when the item is enabled and selected. It remains + invisible otherwise. + + \li \b {itemDelegate.label} : Component + + Component for the actual text label. + + The text itself is fetched from \l {styleData properties} {styleData.text}, and its appearance should depend + on \l {styleData properties} {styleData.enabled} and \l {styleData properties} {styleData.selected}. + + If \l {styleData properties} {styleData.underlineMnemonic} is true, the label should underline its mnemonic + character. \l formatMnemonic provides the default formatting. + + \li \b {itemDelegate.submenuIndicator} : Component + + It indicates that the current menu item is a submenu. + + Only used when \l {styleData properties} {styleData.type} equals \c MenuItemType.Menu. + + \li \b {itemDelegate.shortcut} : Component + + Displays the shortcut attached to the menu item. + + Only used when \l {styleData properties} {styleData.shortcut} is not empty. + + \li \b {itemDelegate.checkmarkIndicator} : Component + + Will be used when \l {styleData properties} {styleData.checkable} is \c true and its appearance + may depend on \l {styleData properties} {styleData.exclusive}, i.e., whether it will behave like a + checkbox or a radio button. Use \l {styleData properties} {styleData.checked} for the checked state. + \endlist + + \note This property cannot be overwritten although all of the subcontrol properties can. + */ + property alias itemDelegate: internalMenuItem + + MenuItemSubControls { + id: internalMenuItem + + background: Rectangle { + visible: styleData.selected && styleData.enabled + gradient: Gradient { + id: selectedGradient + GradientStop { color: Qt.lighter(__selectedBackgroundColor, 1.3); position: -0.2 } + GradientStop { color: __selectedBackgroundColor; position: 1.4 } + } + + border.width: 1 + border.color: Qt.darker(__selectedBackgroundColor, 1) + antialiasing: true + } + + label: Text { + text: formatMnemonic(styleData.text, styleData.underlineMnemonic) + color: __currentTextColor + font: styleRoot.font + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + + submenuIndicator: Text { + text: __mirrored ? "\u25c2" : "\u25b8" // BLACK LEFT/RIGHT-POINTING SMALL TRIANGLE + font: styleRoot.font + color: __currentTextColor + style: styleData.selected ? Text.Normal : Text.Raised + styleColor: Qt.lighter(color, 4) + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + + shortcut: Text { + text: styleData.shortcut + font { + bold: styleRoot.font.bold + capitalization: styleRoot.font.capitalization + family: styleRoot.font.family + italic: styleRoot.font.italic + letterSpacing: styleRoot.font.letterSpacing + pixelSize: styleRoot.font.pixelSize * 0.9 + strikeout: styleRoot.font.strikeout + underline: styleRoot.font.underline + weight: styleRoot.font.weight + wordSpacing: styleRoot.font.wordSpacing + } + color: __currentTextColor + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + + checkmarkIndicator: Loader { + sourceComponent: styleData.exclusive ? exclusiveCheckMark : nonExclusiveCheckMark + Component { + id: exclusiveCheckMark + Rectangle { + x: 1 + width: 10 + height: 10 + color: "white" + border.color: "gray" + antialiasing: true + radius: height/2 + + Rectangle { + anchors.centerIn: parent + visible: styleData.checked + width: 4 + height: 4 + color: "#666" + border.color: "#222" + antialiasing: true + radius: height/2 + } + } + } + + Component { + id: nonExclusiveCheckMark + BorderImage { + width: 12 + height: 12 + source: "images/editbox.png" + border.top: 6 + border.bottom: 6 + border.left: 6 + border.right: 6 + + Rectangle { + antialiasing: true + visible: styleData.checked + color: "#666" + radius: 1 + anchors.margins: 4 + anchors.fill: parent + border.color: "#222" + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + border.color: "#33ffffff" + } + } + } + } + } + } + + /*! Component for the separator menu item. + + Will be used when \l {styleData properties} {styleData.type} equals \c MenuItemType.Separator. + */ + property Component separator: Item { + implicitHeight: styleRoot.font.pixelSize / 2 + Rectangle { + width: parent.width - 2 + height: 1 + x: 1 + anchors.verticalCenter: parent.verticalCenter + color: "darkgray" + } + } + + /*! Component for the scroll indicator menu item. + + Will be used when \l {styleData properties} {styleData.type} equals \c MenuItemType.ScrollIndicator. + Its appearance should follow \l {styleData properties} {styleData.scrollerDirection}. + + This is the item added at the top and bottom of the menu popup when its contents won't fit the screen + to indicate more content is available in the direction of the arrow. + */ + property Component scrollIndicator: Image { + anchors.centerIn: parent + source: styleData.scrollerDirection === Qt.UpArrow ? "images/arrow-up.png" : "images/arrow-down.png" + } + + /*! + \since QtQuick.Controls.Styles 1.3 + The font of the control. + */ + property font font + + /*! \internal */ + property string __menuItemType: "menuitem" + + /*! \internal + The menu popup frame background color. + + This is set to be a uniform background. If you want a gradient or a pixmap, + you should override \l frame. + + \sa frame, borderColor + */ + property color __backgroundColor: "#dcdcdc" + + /*! \internal + The menu popup frame border color. + + The border width is set to 1 pixel. Override \l frame if you want a larger border. + + \sa frame, backgroundColor + */ + property color __borderColor: "darkgray" + + /*! \internal + The maximum height for a popup before it will show scrollers. + */ + property int __maxPopupHeight: 600 + + /*! \internal + The menu item background color when selected. + + This property is provided for convenience and only sets the color. + It does not change the style in any other way. + */ + property color __selectedBackgroundColor: "#49d" + + /*! \internal + The menu item label color. + + When set, keyboard shorcuts get the same color as the item's text. + + \sa selectedLabelColor, disabledLabelColor + */ + property color __labelColor: "#444" + + /*! \internal + The menu item label color when selected. + + \sa labelColor, selectedLabelColor + */ + property color __selectedLabelColor: "white" + + /*! \internal + The menu item label color when disabled. + + \sa labelColor, disabledLabelColor + */ + property color __disabledLabelColor: "gray" + + + /*! \internal */ + readonly property bool __mirrored: Qt.application.layoutDirection === Qt.RightToLeft + + /*! \internal + The margin between the frame and the menu item label's left side. + + Generally, this should be large enough to fit optional checkmarks on + the label's left side. + */ + property int __leftLabelMargin: 18 + + /*! \internal + The margin between the menu item label's right side and the frame. */ + property int __rightLabelMargin: 12 + + /*! \internal + The minimum spacing between the menu item label's text right side and any + element located on its right (submenu indicator or shortcut). + */ + property int __minRightLabelSpacing: 28 + + /*! \internal */ + property Component __scrollerStyle: null + + /*! \internal + The menu item contents itself. + + The default implementation uses \l MenuItemStyle. + */ + property Component menuItemPanel: Item { + id: panel + + property QtObject __styleData: styleData + /*! \internal + The current color of the text label. + + Use this if you're overriding e.g. \l shortcutIndicator to keep the color matched + with \l label, or to derive new colors from it. + */ + property color currentTextColor: !styleData.enabled ? __disabledLabelColor : + styleData.selected ? __selectedLabelColor : __labelColor + + implicitWidth: Math.max((parent ? parent.width : 0), + Math.round(__leftLabelMargin + labelLoader.width + __rightLabelMargin + + (rightIndicatorLoader.active ? __minRightLabelSpacing + rightIndicatorLoader.width : 0))) + implicitHeight: Math.round(styleData.type === MenuItemType.Separator ? separatorLoader.implicitHeight : + !!styleData.scrollerDirection ? styleRoot.font.pixelSize * 0.75 : labelLoader.height + 4) + + Loader { + property alias styleData: panel.__styleData + property alias __currentTextColor: panel.currentTextColor + anchors.fill: parent + sourceComponent: itemDelegate.background + } + + Loader { + id: separatorLoader + property alias styleData: panel.__styleData + property alias __currentTextColor: panel.currentTextColor + anchors.fill: parent + sourceComponent: separator + active: styleData.type === MenuItemType.Separator + } + + Loader { + property alias styleData: panel.__styleData + property alias __currentTextColor: panel.currentTextColor + x: __mirrored ? parent.width - width - 4 : 4 + anchors.verticalCenterOffset: -1 + anchors.verticalCenter: parent.verticalCenter + active: __menuItemType === "menuitem" && styleData.checkable + sourceComponent: itemDelegate.checkmarkIndicator + } + + Loader { + id: labelLoader + readonly property real offset: __menuItemType === "menuitem" ? __leftLabelMargin : 6 + property alias styleData: panel.__styleData + property alias __currentTextColor: panel.currentTextColor + x: __mirrored ? parent.width - width - offset : offset + y: 1 + active: styleData.type !== MenuItemType.Separator + sourceComponent: itemDelegate.label + baselineOffset: item ? item.baselineOffset : 0.0 + } + + Loader { + id: rightIndicatorLoader + property alias styleData: panel.__styleData + property alias __currentTextColor: panel.currentTextColor + active: styleData.type === MenuItemType.Menu || styleData.shortcut !== "" + sourceComponent: styleData.type === MenuItemType.Menu ? itemDelegate.submenuIndicator : itemDelegate.shortcut + LayoutMirroring.enabled: __mirrored + baselineOffset: item ? item.baselineOffset : 0.0 + anchors { + right: parent.right + rightMargin: 6 + baseline: !styleData.isSubmenu ? labelLoader.baseline : undefined + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/PieMenuStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/PieMenuStyle.qml new file mode 100644 index 0000000..ddeb4ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/PieMenuStyle.qml @@ -0,0 +1,404 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtGraphicalEffects 1.0 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 +import QtQuick.Extras.Private.CppUtils 1.0 + +/*! + \qmltype PieMenuStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.5 + \ingroup controlsstyling + \brief Provides custom styling for PieMenu. + + PieMenuStyle is a style for PieMenu that draws each section of the menu as a + filled "slice". + + You can create a custom pie menu by replacing the following delegates: + \list + \li \l background + \li \l cancel + \li \l menuItem + \li \l title + \endlist + + To customize the appearance of each menuItem without having to define your + own, you can use the \l backgroundColor and \l selectionColor properties. + To customize the drop shadow, use the \l shadowColor, \l shadowRadius and + \l shadowSpread properties. + + Icons that are too large for the section that they are in will be scaled + down appropriately. + + To style individual sections of the menu, use the menuItem component: + \code + PieMenuStyle { + shadowRadius: 0 + + menuItem: Item { + id: item + rotation: -90 + sectionCenterAngle(styleData.index) + + Rectangle { + width: parent.height * 0.2 + height: width + color: "darkorange" + radius: width / 2 + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + + Text { + id: textItem + text: control.menuItems[styleData.index].text + anchors.centerIn: parent + color: control.currentIndex === styleData.index ? "red" : "white" + rotation: -item.rotation + } + } + } + } + \endcode + + \image piemenu-menuitem-example.png A custom PieMenu +*/ + +Style { + id: pieMenuStyle + + /*! + The \l PieMenu that this style is attached to. + */ + readonly property PieMenu control: __control + + /*! The background color. */ + property color backgroundColor: Qt.rgba(0.6, 0.6, 0.6, 0.66) + + /*! The selection color. */ + property color selectionColor: "#eee" + + /*! + The shadow color. + + \sa DropShadow + */ + property color shadowColor: Qt.rgba(0, 0, 0, 0.26) + + /*! + The shadow radius. + + \sa DropShadow + */ + property real shadowRadius: 10 + + /*! + The shadow spread. + + \sa DropShadow + */ + property real shadowSpread: 0.3 + + /*! + The distance from the center of the menu to the outer edge of the menu. + + \sa cancelRadius + */ + readonly property real radius: Math.min(control.width, control.height) * 0.5 + + /*! + The radius of the area that is used to cancel the menu. + + \sa radius + */ + property real cancelRadius: radius * 0.4 + + /*! + The angle (in degrees) at which the first menu item will be drawn. + + The absolute range formed by \a startAngle and \l endAngle must be + less than or equal to \c 360 degrees. + + Menu items are displayed clockwise when \a startAngle is less than + \l endAngle, otherwise they are displayed anti-clockwise. + + \sa endAngle + */ + property real startAngle: -90 + + /*! + The angle (in degrees) at which the last menu item will be drawn. + + The absolute range formed by \l startAngle and \a endAngle must be + less than or equal to \c 360 degrees. + + Menu items are displayed clockwise when \l startAngle is less than + \a endAngle, otherwise they are displayed anti-clockwise. + + \sa startAngle + */ + property real endAngle: 90 + + /*! + \qmlmethod real PieMenuStyle::sectionStartAngle(int itemIndex) + Returns the start of the section at \a itemIndex as an angle in degrees. + */ + function sectionStartAngle(itemIndex) { + return MathUtils.radToDegOffset(control.__protectedScope.sectionStartAngle(itemIndex)); + } + + /*! + \qmlmethod real PieMenuStyle::sectionCenterAngle(int itemIndex) + Returns the center of the section at \a itemIndex as an angle in + degrees. + */ + function sectionCenterAngle(itemIndex) { + return MathUtils.radToDegOffset(control.__protectedScope.sectionCenterAngle(itemIndex)); + } + + /*! + \qmlmethod real PieMenuStyle::sectionEndAngle(int itemIndex) + Returns the end of the section at \a itemIndex as an angle in degrees. + */ + function sectionEndAngle(itemIndex) { + return MathUtils.radToDegOffset(control.__protectedScope.sectionEndAngle(itemIndex)); + } + + /*! + \internal + + The distance in pixels from the center of each menu item's icon to the + center of the menu. A higher value means that the icons will be further + from the center of the menu. + */ + readonly property real __iconOffset: cancelRadius + ((radius - cancelRadius) / 2) + + /*! \internal */ + readonly property real __selectableRadius: radius - cancelRadius + + /*! \internal */ + property int __implicitWidth: Math.round(TextSingleton.implicitHeight * 12.5) + + /*! \internal */ + property int __implicitHeight: __implicitWidth + + /*! + The background of the menu. + + By default, there is no background defined. + */ + property Component background + + /*! + The cancel component of the menu. + + This is an area in the center of the menu that closes the menu when + clicked. + + By default, it is not visible. + */ + property Component cancel: null + + /*! + The component that displays the text of the currently selected menu + item, or the title if there is no current item. + + The current item's text is available via the \c styleData.text + property. + */ + property Component title: Text { + font.pointSize: 20 + text: styleData.text + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ccc" + antialiasing: true + } + + /*! + This component defines each section of the pie menu. + + This component covers the width and height of the control. + + No mouse events are propagated to this component, which means that + controls like Button will not function when used within it. You can + check if the mouse is over this section by comparing + \c control.currentIndex to \c styleData.index. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this menu item. + \row \li \c {readonly property bool} \b styleData.hovered + \li \c true if this menu item is under the mouse. + \row \li \c {readonly property bool} \b styleData.pressed + \li \c true if the mouse is pressed down on this menu item. + \endtable + */ + property Component menuItem: Item { + id: actionRootDelegateItem + + function drawRingSection(ctx, x, y, section, r, ringWidth, ringColor) { + ctx.fillStyle = ringColor; + + // Draw one section. + ctx.beginPath(); + ctx.moveTo(x,y); + + // Canvas draws 0 degrees at 3 o'clock, whereas we want it to draw it at 12. + var start = control.__protectedScope.sectionStartAngle(section); + var end = control.__protectedScope.sectionEndAngle(section); + ctx.arc(x, y, r, start, end, start > end); + ctx.fill(); + + // Either change this to the background color, or use the global composition. + ctx.fillStyle = "black"; + ctx.globalCompositeOperation = "destination-out"; + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.arc(x, y, ringWidth, 0, Math.PI * 2); + ctx.closePath(); + ctx.fill(); + + // If using the global composition method, make sure to change it back to default. + ctx.globalCompositeOperation = "source-over"; + } + + Canvas { + id: actionCanvas + anchors.fill: parent + property color currentColor: control.currentIndex === styleData.index ? selectionColor : backgroundColor + + Connections { + target: pieMenuStyle + function onStartAngleChanged() { actionCanvas.requestPaint() } + function onEndAngleChanged() { actionCanvas.requestPaint() } + } + + Connections { + target: control + function onCurrentIndexChanged() { actionCanvas.requestPaint() } + } + + onPaint: { + var ctx = getContext("2d"); + ctx.reset(); + drawRingSection(ctx, width / 2, height / 2, styleData.index, radius, cancelRadius, currentColor); + } + } + + readonly property var __styleData: styleData + + PieMenuIcon { + control: pieMenuStyle.control + styleData: __styleData + } + } + + /*! \internal */ + property Component panel: Item { + implicitWidth: __implicitWidth + implicitHeight: __implicitHeight + + property alias titleItem: titleLoader.item + + Item { + id: itemgroup + anchors.fill: parent + visible: false + + Loader { + id: backgroundLoader + sourceComponent: background + anchors.fill: parent + } + + Loader { + id: cancelLoader + sourceComponent: cancel + anchors.centerIn: parent + } + + Repeater { + id: menuItemRepeater + model: control.__protectedScope.visibleItems + + delegate: Loader { + id: menuItemLoader + anchors.fill: parent + sourceComponent: menuItem + + readonly property int __index: index + property QtObject styleData: QtObject { + readonly property alias index: menuItemLoader.__index + readonly property bool hovered: control.currentIndex === index + readonly property bool pressed: control.__protectedScope.pressedIndex === index + } + } + } + } + DropShadow { + id: dropShadow + anchors.fill: itemgroup + spread: shadowSpread + samples: shadowRadius * 2 + 1 + transparentBorder: true + color: shadowColor + source: itemgroup + } + + Loader { + id: titleLoader + sourceComponent: title + x: parent.x + parent.width / 2 - width / 2 + y: -height - 10 + + property QtObject styleData: QtObject { + property string text: control.currentIndex !== -1 + ? control.__protectedScope.visibleItems[control.currentIndex].text + : control.title + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ProgressBarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ProgressBarStyle.qml new file mode 100644 index 0000000..d51e056 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ProgressBarStyle.qml @@ -0,0 +1,261 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ProgressBarStyle + + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup controlsstyling + \brief Provides custom styling for ProgressBar. + + Example: + \qml + ProgressBar { + value: slider.value + style: ProgressBarStyle { + background: Rectangle { + radius: 2 + color: "lightgray" + border.color: "gray" + border.width: 1 + implicitWidth: 200 + implicitHeight: 24 + } + progress: Rectangle { + color: "lightsteelblue" + border.color: "steelblue" + } + } + } + \endqml + + Note that the example above is somewhat simplified and will not animate + an indeterminate progress bar. The following snippet demonstrates + how you can incorporate a custom animation for the indeterminate + state as well. + + \code + progress: Rectangle { + border.color: "steelblue" + color: "lightsteelblue" + + // Indeterminate animation by animating alternating stripes: + Item { + anchors.fill: parent + anchors.margins: 1 + visible: control.indeterminate + clip: true + Row { + Repeater { + Rectangle { + color: index % 2 ? "steelblue" : "lightsteelblue" + width: 20 ; height: control.height + } + model: control.width / 20 + 2 + } + XAnimator on x { + from: 0 ; to: -40 + loops: Animation.Infinite + running: control.indeterminate + } + } + } + } + \endcode + + +*/ + +Style { + id: progressBarStyle + + /*! The \l ProgressBar this style is attached to. */ + readonly property ProgressBar control: __control + + /*! A value in the range [0-1] indicating the current progress. */ + readonly property real currentProgress: control.indeterminate ? 1.0 : + control.value / control.maximumValue + + /*! This property holds the visible contents of the progress bar + You can access the Slider through the \c control property. + + For convenience, you can also access the readonly property \c styleData.progress + which provides the current progress as a \c real in the range [0-1] + */ + padding { top: 0 ; left: 0 ; right: 0 ; bottom: 0 } + + /*! \qmlproperty Component ProgressBarStyle::progress + The progress component for this style. + */ + property Component progress: Item { + property color progressColor: "#49d" + anchors.fill: parent + clip: true + Rectangle { + id: base + anchors.fill: parent + radius: TextSingleton.implicitHeight * 0.16 + antialiasing: true + gradient: Gradient { + GradientStop {color: Qt.lighter(progressColor, 1.3) ; position: 0} + GradientStop {color: progressColor ; position: 1.4} + } + border.width: 1 + border.color: Qt.darker(progressColor, 1.2) + Rectangle { + color: "transparent" + radius: 1.5 + clip: true + antialiasing: true + anchors.fill: parent + anchors.margins: 1 + border.color: Qt.rgba(1,1,1,0.1) + Image { + visible: control.indeterminate + height: parent.height + NumberAnimation on x { + from: -39 + to: 0 + running: control.indeterminate + duration: 800 + loops: Animation.Infinite + } + fillMode: Image.Tile + width: parent.width + 25 + source: "images/progress-indeterminate.png" + } + } + } + Rectangle { + height: parent.height - 2 + width: 1 + y: 1 + anchors.right: parent.right + anchors.rightMargin: 1 + color: Qt.rgba(1,1,1,0.1) + visible: splitter.visible + } + Rectangle { + id: splitter + height: parent.height - 2 + width: 1 + y: 1 + anchors.right: parent.right + color: Qt.darker(progressColor, 1.2) + property int offset: currentProgress * control.width + visible: offset > base.radius && offset < control.width - base.radius + 1 + } + } + + /*! \qmlproperty Component ProgressBarStyle::background + The background component for this style. + + \note The implicitWidth and implicitHeight of the background component + must be set. + */ + property Component background: Item { + implicitWidth: 200 + implicitHeight: Math.max(17, Math.round(TextSingleton.implicitHeight * 0.7)) + Rectangle { + anchors.fill: parent + anchors.bottomMargin: control.pressed ? 0 : -1 + color: "#44ffffff" + radius: baserect.radius + } + Rectangle { + id: baserect + gradient: Gradient { + GradientStop {color: "#eee" ; position: 0} + GradientStop {color: "#fff" ; position: 0.1} + GradientStop {color: "#fff" ; position: 1} + } + radius: TextSingleton.implicitHeight * 0.16 + anchors.fill: parent + border.color: control.activeFocus ? "#47b" : "#999" + Rectangle { + anchors.fill: parent + radius: parent.radius + color: control.activeFocus ? "#47b" : "white" + opacity: control.hovered || control.activeFocus ? 0.1 : 0 + Behavior on opacity {NumberAnimation{ duration: 100 }} + } + } + } + + /*! \qmlproperty Component ProgressBarStyle::panel + The panel component for this style. + */ + property Component panel: Item{ + property bool horizontal: control.orientation == Qt.Horizontal + implicitWidth: horizontal ? backgroundLoader.implicitWidth : backgroundLoader.implicitHeight + implicitHeight: horizontal ? backgroundLoader.implicitHeight : backgroundLoader.implicitWidth + + Item { + width: horizontal ? parent.width : parent.height + height: !horizontal ? parent.width : parent.height + y: horizontal ? 0 : width + rotation: horizontal ? 0 : -90 + transformOrigin: Item.TopLeft + + Loader { + id: backgroundLoader + anchors.fill: parent + sourceComponent: background + } + + Loader { + sourceComponent: progressBarStyle.progress + anchors.topMargin: padding.top + anchors.leftMargin: padding.left + anchors.rightMargin: padding.right + anchors.bottomMargin: padding.bottom + + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + width: currentProgress * (parent.width - padding.left - padding.right) + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/RadioButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/RadioButtonStyle.qml new file mode 100644 index 0000000..6e3a2dc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/RadioButtonStyle.qml @@ -0,0 +1,172 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype RadioButtonStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup controlsstyling + \brief Provides custom styling for RadioButton. + + Example: + \qml + RadioButton { + text: "Radio Button" + style: RadioButtonStyle { + indicator: Rectangle { + implicitWidth: 16 + implicitHeight: 16 + radius: 9 + border.color: control.activeFocus ? "darkblue" : "gray" + border.width: 1 + Rectangle { + anchors.fill: parent + visible: control.checked + color: "#555" + radius: 9 + anchors.margins: 4 + } + } + } + } + \endqml +*/ + +Style { + id: radiobuttonStyle + + /*! The \l RadioButton this style is attached to. */ + readonly property RadioButton control: __control + + /*! This defines the text label. */ + property Component label: Item { + implicitWidth: text.implicitWidth + 2 + implicitHeight: text.implicitHeight + baselineOffset: text.y + text.baselineOffset + Rectangle { + anchors.fill: text + anchors.margins: -1 + anchors.leftMargin: -3 + anchors.rightMargin: -3 + visible: control.activeFocus + height: 6 + radius: 3 + color: "#224f9fef" + border.color: "#47b" + opacity: 0.6 + } + Text { + id: text + text: StyleHelpers.stylizeMnemonics(control.text) + anchors.centerIn: parent + color: SystemPaletteSingleton.text(control.enabled) + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + } + + /*! The background under indicator and label. */ + property Component background + + /*! The spacing between indicator and label. */ + property int spacing: Math.round(TextSingleton.implicitHeight/4) + + /*! This defines the indicator button. */ + property Component indicator: Rectangle { + width: Math.round(TextSingleton.implicitHeight) + height: width + gradient: Gradient { + GradientStop {color: "#eee" ; position: 0} + GradientStop {color: control.pressed ? "#eee" : "#fff" ; position: 0.4} + GradientStop {color: "#fff" ; position: 1} + } + border.color: control.activeFocus ? "#16c" : "gray" + antialiasing: true + radius: height/2 + Rectangle { + anchors.centerIn: parent + width: Math.round(parent.width * 0.5) + height: width + gradient: Gradient { + GradientStop {color: "#999" ; position: 0} + GradientStop {color: "#555" ; position: 1} + } + border.color: "#222" + antialiasing: true + radius: height/2 + Behavior on opacity {NumberAnimation {duration: 80}} + opacity: control.checked ? control.enabled ? 1 : 0.5 : 0 + } + } + + /*! \internal */ + property Component panel: Item { + implicitWidth: Math.max(backgroundLoader.implicitWidth, row.implicitWidth + padding.left + padding.right) + implicitHeight: Math.max(backgroundLoader.implicitHeight, labelLoader.implicitHeight + padding.top + padding.bottom,indicatorLoader.implicitHeight + padding.top + padding.bottom) + baselineOffset: labelLoader.item ? padding.top + labelLoader.item.baselineOffset : 0 + + Loader { + id:backgroundLoader + sourceComponent: background + anchors.fill: parent + } + Row { + id: row + anchors.fill: parent + + anchors.leftMargin: padding.left + anchors.rightMargin: padding.right + anchors.topMargin: padding.top + anchors.bottomMargin: padding.bottom + + spacing: radiobuttonStyle.spacing + Loader { + id: indicatorLoader + sourceComponent: indicator + } + Loader { + id: labelLoader + sourceComponent: label + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ScrollViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ScrollViewStyle.qml new file mode 100644 index 0000000..36b518d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ScrollViewStyle.qml @@ -0,0 +1,406 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ScrollViewStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup viewsstyling + \ingroup controlsstyling + \brief Provides custom styling for ScrollView. +*/ +Style { + id: root + + /*! The \l ScrollView this style is attached to. */ + readonly property ScrollView control: __control + + /*! This property controls the frame border padding of the scrollView. */ + padding {left: 1; top: 1; right: 1; bottom: 1} + + /*! This Component paints the corner area between scroll bars */ + property Component corner: Rectangle { color: "#ccc" } + + /*! This component determines if the flickable should reposition itself at the + mouse location when clicked. */ + property bool scrollToClickedPosition: true + + /*! This property holds whether the scroll bars are transient. Transient scroll bars + appear when the content is scrolled and disappear when they are no longer needed. + + The default value is platform dependent. */ + property bool transientScrollBars: Settings.isMobile && Settings.hasTouchScreen + + /*! This Component paints the frame around scroll bars. */ + property Component frame: Rectangle { + color: control["backgroundVisible"] ? "white": "transparent" + border.color: "#999" + border.width: 1 + radius: 1 + visible: control.frameVisible + } + + /*! This is the minimum extent of the scroll bar handle. + + The default value is \c 30. + */ + + property int minimumHandleLength: 30 + + /*! This property controls the edge overlap + between the handle and the increment/decrement buttons. + + The default value is \c 30. + */ + + property int handleOverlap: 1 + + /*! This component controls the appearance of the + scroll bar background. + + You can access the following state properties: + + \table + \row \li property bool \b styleData.hovered + \row \li property bool \b styleData.horizontal + \endtable + */ + + property Component scrollBarBackground: Item { + property bool sticky: false + property bool hovered: styleData.hovered + implicitWidth: Math.round(TextSingleton.implicitHeight) + implicitHeight: Math.round(TextSingleton.implicitHeight) + clip: true + opacity: transientScrollBars ? 0.5 : 1.0 + visible: !Settings.hasTouchScreen && (!transientScrollBars || sticky) + Rectangle { + anchors.fill: parent + color: "#ddd" + border.color: "#aaa" + anchors.rightMargin: styleData.horizontal ? -2 : -1 + anchors.leftMargin: styleData.horizontal ? -2 : 0 + anchors.topMargin: styleData.horizontal ? 0 : -2 + anchors.bottomMargin: styleData.horizontal ? -1 : -2 + } + onHoveredChanged: if (hovered) sticky = true + onVisibleChanged: if (!visible) sticky = false + } + + /*! This component controls the appearance of the + scroll bar handle. + + You can access the following state properties: + + \table + \row \li property bool \b styleData.hovered + \row \li property bool \b styleData.pressed + \row \li property bool \b styleData.horizontal + \endtable + */ + + property Component handle: Item { + property bool sticky: false + property bool hovered: __activeControl !== "none" + implicitWidth: Math.round(TextSingleton.implicitHeight) + 1 + implicitHeight: Math.round(TextSingleton.implicitHeight) + 1 + BorderImage { + id: img + opacity: styleData.pressed && !transientScrollBars ? 0.5 : styleData.hovered ? 1 : 0.8 + source: "images/scrollbar-handle-" + (transientScrollBars ? "transient" : styleData.horizontal ? "horizontal" : "vertical") + ".png" + border.left: transientScrollBars ? 5 : 2 + border.top: transientScrollBars ? 5 : 2 + border.right: transientScrollBars ? 5 : 2 + border.bottom: transientScrollBars ? 5 : 2 + anchors.top: !styleData.horizontal ? parent.top : undefined + anchors.margins: transientScrollBars ? 2 : 0 + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.left: styleData.horizontal ? parent.left : undefined + width: !styleData.horizontal && transientScrollBars ? sticky ? 13 : 10 : parent.width + height: styleData.horizontal && transientScrollBars ? sticky ? 13 : 10 : parent.height + Behavior on width { enabled: !styleData.horizontal && transientScrollBars; NumberAnimation { duration: 100 } } + Behavior on height { enabled: styleData.horizontal && transientScrollBars; NumberAnimation { duration: 100 } } + } + onHoveredChanged: if (hovered) sticky = true + onVisibleChanged: if (!visible) sticky = false + } + + /*! This component controls the appearance of the + scroll bar increment button. + + You can access the following state properties: + + \table + \row \li property bool \b styleData.hovered + \row \li property bool \b styleData.pressed + \row \li property bool \b styleData.horizontal + \endtable + */ + property Component incrementControl: Rectangle { + visible: !transientScrollBars + implicitWidth: transientScrollBars ? 0 : Math.round(TextSingleton.implicitHeight) + implicitHeight: transientScrollBars ? 0 : Math.round(TextSingleton.implicitHeight) + Rectangle { + anchors.fill: parent + anchors.bottomMargin: -1 + anchors.rightMargin: -1 + border.color: "#aaa" + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + border.color: "#44ffffff" + } + Image { + source: styleData.horizontal ? "images/arrow-right.png" : "images/arrow-down.png" + anchors.centerIn: parent + opacity: control.enabled ? 0.6 : 0.5 + } + gradient: Gradient { + GradientStop {color: styleData.pressed ? "lightgray" : "white" ; position: 0} + GradientStop {color: styleData.pressed ? "lightgray" : "lightgray" ; position: 1} + } + } + } + + /*! This component controls the appearance of the + scroll bar decrement button. + + You can access the following state properties: + + \table + \row \li property bool \b styleData.hovered + \row \li property bool \b styleData.pressed + \row \li property bool \b styleData.horizontal + \endtable + */ + property Component decrementControl: Rectangle { + visible: !transientScrollBars + implicitWidth: transientScrollBars ? 0 : Math.round(TextSingleton.implicitHeight) + implicitHeight: transientScrollBars ? 0 : Math.round(TextSingleton.implicitHeight) + Rectangle { + anchors.fill: parent + anchors.topMargin: styleData.horizontal ? 0 : -1 + anchors.leftMargin: styleData.horizontal ? -1 : 0 + anchors.bottomMargin: styleData.horizontal ? -1 : 0 + anchors.rightMargin: styleData.horizontal ? 0 : -1 + color: "lightgray" + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + border.color: "#44ffffff" + } + Image { + source: styleData.horizontal ? "images/arrow-left.png" : "images/arrow-up.png" + anchors.centerIn: parent + anchors.verticalCenterOffset: styleData.horizontal ? 0 : -1 + anchors.horizontalCenterOffset: styleData.horizontal ? -1 : 0 + opacity: control.enabled ? 0.6 : 0.5 + } + gradient: Gradient { + GradientStop {color: styleData.pressed ? "lightgray" : "white" ; position: 0} + GradientStop {color: styleData.pressed ? "lightgray" : "lightgray" ; position: 1} + } + border.color: "#aaa" + } + } + + /*! \internal */ + property Component __scrollbar: Item { + id: panel + property string activeControl: "none" + property bool scrollToClickPosition: true + property bool isTransient: transientScrollBars + + property bool on: false + property bool raised: false + property bool sunken: __styleData.upPressed | __styleData.downPressed | __styleData.handlePressed + + states: State { + name: "out" + when: isTransient + && (!__stickyScrollbars || !flickableItem.moving) + && panel.activeControl === "none" + && !panel.on + && !panel.raised + PropertyChanges { target: panel; opacity: 0 } + } + + transitions: Transition { + to: "out" + SequentialAnimation { + PauseAnimation { duration: root.__scrollBarFadeDelay } + NumberAnimation { properties: "opacity"; duration: root.__scrollBarFadeDuration } + PropertyAction { target: panel; property: "visible"; value: false } + } + } + + implicitWidth: __styleData.horizontal ? 200 : bg.implicitWidth + implicitHeight: __styleData.horizontal ? bg.implicitHeight : 200 + + function pixelMetric(arg) { + if (arg === "scrollbarExtent") + return (__styleData.horizontal ? bg.height : bg.width); + return 0; + } + + function styleHint(arg) { + return false; + } + + function hitTest(argX, argY) { + if (itemIsHit(handleControl, argX, argY)) + return "handle" + else if (itemIsHit(incrementLoader, argX, argY)) + return "up"; + else if (itemIsHit(decrementLoader, argX, argY)) + return "down"; + else if (itemIsHit(bg, argX, argY)) { + if (__styleData.horizontal && argX < handleControl.x || !__styleData.horizontal && argY < handleControl.y) + return "upPage" + else + return "downPage" + } + + return "none"; + } + + function subControlRect(arg) { + if (arg === "handle") { + return Qt.rect(handleControl.x, handleControl.y, handleControl.width, handleControl.height); + } else if (arg === "groove") { + if (__styleData.horizontal) { + return Qt.rect(incrementLoader.width - handleOverlap, + 0, + __control.width - (incrementLoader.width + decrementLoader.width - handleOverlap * 2), + __control.height); + } else { + return Qt.rect(0, + incrementLoader.height - handleOverlap, + __control.width, + __control.height - (incrementLoader.height + decrementLoader.height - handleOverlap * 2)); + } + } + return Qt.rect(0,0,0,0); + } + + function itemIsHit(argItem, argX, argY) { + var pos = argItem.mapFromItem(__control, argX, argY); + return (pos.x >= 0 && pos.x <= argItem.width && pos.y >= 0 && pos.y <= argItem.height); + } + + Loader { + id: incrementLoader + anchors.top: parent.top + anchors.left: parent.left + sourceComponent: decrementControl + property QtObject styleData: QtObject { + readonly property bool hovered: activeControl === "up" + readonly property bool pressed: __styleData.upPressed + readonly property bool horizontal: __styleData.horizontal + } + } + + Loader { + id: bg + anchors.top: __styleData.horizontal ? undefined : incrementLoader.bottom + anchors.bottom: __styleData.horizontal ? undefined : decrementLoader.top + anchors.left: __styleData.horizontal ? incrementLoader.right : undefined + anchors.right: __styleData.horizontal ? decrementLoader.left : undefined + sourceComponent: scrollBarBackground + property QtObject styleData: QtObject { + readonly property bool horizontal: __styleData.horizontal + readonly property bool hovered: activeControl !== "none" + } + } + + Loader { + id: decrementLoader + anchors.bottom: __styleData.horizontal ? undefined : parent.bottom + anchors.right: __styleData.horizontal ? parent.right : undefined + sourceComponent: incrementControl + property QtObject styleData: QtObject { + readonly property bool hovered: activeControl === "down" + readonly property bool pressed: __styleData.downPressed + readonly property bool horizontal: __styleData.horizontal + } + } + + property var flickableItem: control.flickableItem + property int extent: Math.max(minimumHandleLength, __styleData.horizontal ? + Math.min(1, ((flickableItem && flickableItem.contentWidth > 0.0) ? flickableItem.width/flickableItem.contentWidth : 1)) * bg.width : + Math.min(1, ((flickableItem && flickableItem.contentHeight > 0.0) ? flickableItem.height/flickableItem.contentHeight : 1)) * bg.height) + readonly property real range: __control.maximumValue - __control.minimumValue + readonly property real begin: __control.value - __control.minimumValue + + Loader { + id: handleControl + height: __styleData.horizontal ? implicitHeight : extent + width: __styleData.horizontal ? extent : implicitWidth + anchors.top: bg.top + anchors.left: bg.left + anchors.topMargin: __styleData.horizontal || range === 0 ? 0 : -handleOverlap + (2 * begin * (bg.height + (2 * handleOverlap) - extent) + range) / (2 * range) + anchors.leftMargin: __styleData.horizontal && range !== 0 ? -handleOverlap + (2 * begin * (bg.width + (2 * handleOverlap) - extent) + range) / (2 * range) : 0 + sourceComponent: handle + property QtObject styleData: QtObject { + readonly property bool hovered: activeControl === "handle" + readonly property bool pressed: __styleData.handlePressed + readonly property bool horizontal: __styleData.horizontal + } + readonly property alias __activeControl: panel.activeControl + } + } + + /*! \internal */ + property bool __externalScrollBars: false + /*! \internal */ + property int __scrollBarSpacing: 4 + /*! \internal */ + property int __scrollBarFadeDelay: 450 + /*! \internal */ + property int __scrollBarFadeDuration: 200 + /*! \internal */ + property bool __stickyScrollbars: false +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SliderStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SliderStyle.qml new file mode 100644 index 0000000..ca50306 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SliderStyle.qml @@ -0,0 +1,232 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype SliderStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup controlsstyling + \brief Provides custom styling for Slider. + + The slider style allows you to create a custom appearance for + a \l Slider control. + + The implicit size of the slider is calculated based on the + maximum implicit size of the \c background and \c handle + delegates combined. + + Example: + \qml + Slider { + anchors.centerIn: parent + style: SliderStyle { + groove: Rectangle { + implicitWidth: 200 + implicitHeight: 8 + color: "gray" + radius: 8 + } + handle: Rectangle { + anchors.centerIn: parent + color: control.pressed ? "white" : "lightgray" + border.color: "gray" + border.width: 2 + implicitWidth: 34 + implicitHeight: 34 + radius: 12 + } + } + } + \endqml +*/ +Style { + id: styleitem + + /*! The \l Slider this style is attached to. */ + readonly property Slider control: __control + + padding { top: 0 ; left: 0 ; right: 0 ; bottom: 0 } + + /*! This property holds the item for the slider handle. + You can access the slider through the \c control property + */ + property Component handle: Item{ + implicitWidth: implicitHeight + implicitHeight: TextSingleton.implicitHeight * 1.2 + + FastGlow { + source: handle + anchors.fill: parent + anchors.bottomMargin: -1 + anchors.topMargin: 1 + smooth: true + color: "#11000000" + spread: 0.8 + transparentBorder: true + blur: 0.1 + + } + Rectangle { + id: handle + anchors.fill: parent + + radius: width/2 + gradient: Gradient { + GradientStop { color: control.pressed ? "#e0e0e0" : "#fff" ; position: 1 } + GradientStop { color: "#eee" ; position: 0 } + } + Rectangle { + anchors.fill: parent + anchors.margins: 1 + radius: width/2 + border.color: "#99ffffff" + color: control.activeFocus ? "#224f7fbf" : "transparent" + } + border.color: control.activeFocus ? "#47b" : "#777" + } + + } + /*! This property holds the background groove of the slider. + + You can access the handle position through the \c styleData.handlePosition property. + */ + property Component groove: Item { + property color fillColor: "#49d" + anchors.verticalCenter: parent.verticalCenter + implicitWidth: Math.round(TextSingleton.implicitHeight * 4.5) + implicitHeight: Math.max(6, Math.round(TextSingleton.implicitHeight * 0.3)) + Rectangle { + radius: height/2 + anchors.fill: parent + border.width: 1 + border.color: "#888" + gradient: Gradient { + GradientStop { color: "#bbb" ; position: 0 } + GradientStop { color: "#ccc" ; position: 0.6 } + GradientStop { color: "#ccc" ; position: 1 } + } + } + Item { + clip: true + width: styleData.handlePosition + height: parent.height + Rectangle { + anchors.fill: parent + border.color: Qt.darker(fillColor, 1.2) + radius: height/2 + gradient: Gradient { + GradientStop {color: Qt.lighter(fillColor, 1.3) ; position: 0} + GradientStop {color: fillColor ; position: 1.4} + } + } + } + } + + /*! This property holds the tick mark labels. + \since QtQuick.Controls.Styles 1.1 + + Every tickmark that should be drawn must be defined within this + component, so it is common to use a \l Repeater, for example. + + You can access the handle width through the \c styleData.handleWidth property. + */ + property Component tickmarks: Repeater { + id: repeater + model: control.stepSize > 0 ? 1 + (control.maximumValue - control.minimumValue) / control.stepSize : 0 + Rectangle { + color: "#777" + width: 1 ; height: 3 + y: repeater.height + x: styleData.handleWidth / 2 + index * ((repeater.width - styleData.handleWidth) / (repeater.count-1)) + } + } + + /*! This property holds the slider style panel. + + Note that it is generally not recommended to override this. + */ + property Component panel: Item { + id: root + property int handleWidth: handleLoader.width + property int handleHeight: handleLoader.height + + property bool horizontal : control.orientation === Qt.Horizontal + property int horizontalSize: grooveLoader.implicitWidth + padding.left + padding.right + property int verticalSize: Math.max(handleLoader.implicitHeight, grooveLoader.implicitHeight) + padding.top + padding.bottom + + implicitWidth: horizontal ? horizontalSize : verticalSize + implicitHeight: horizontal ? verticalSize : horizontalSize + + y: horizontal ? 0 : height + rotation: horizontal ? 0 : -90 + transformOrigin: Item.TopLeft + + Item { + + anchors.fill: parent + + Loader { + id: grooveLoader + property QtObject styleData: QtObject { + readonly property int handlePosition: handleLoader.x + handleLoader.width/2 + } + x: padding.left + sourceComponent: groove + width: (horizontal ? parent.width : parent.height) - padding.left - padding.right + y: Math.round(padding.top + (Math.round(horizontal ? parent.height : parent.width - padding.top - padding.bottom) - grooveLoader.item.height)/2) + } + Loader { + id: tickMarkLoader + anchors.fill: parent + sourceComponent: control.tickmarksEnabled ? tickmarks : null + property QtObject styleData: QtObject { readonly property int handleWidth: control.__panel.handleWidth } + } + Loader { + id: handleLoader + sourceComponent: handle + anchors.verticalCenter: grooveLoader.verticalCenter + x: Math.round((control.__handlePos - control.minimumValue) / (control.maximumValue - control.minimumValue) * ((horizontal ? root.width : root.height) - item.width)) + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SpinBoxStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SpinBoxStyle.qml new file mode 100644 index 0000000..bc57ef6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SpinBoxStyle.qml @@ -0,0 +1,258 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype SpinBoxStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.2 + \ingroup controlsstyling + \brief Provides custom styling for SpinBox. + + Example: + \qml + SpinBox { + style: SpinBoxStyle{ + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + border.color: "gray" + radius: 2 + } + } + } + \endqml +*/ + +Style { + id: spinboxStyle + + /*! The \l SpinBox this style is attached to. */ + readonly property SpinBox control: __control + + /*! The content margins of the text field. */ + padding { top: 1 ; left: Math.round(styleData.contentHeight/2) ; right: Math.max(22, Math.round(styleData.contentHeight)) ; bottom: 0 } + /*! \qmlproperty enumeration horizontalAlignment + + This property defines the default text aligment. + + The supported values are: + \list + \li Qt.AlignLeft + \li Qt.AlignHCenter + \li Qt.AlignRight + \endlist + + The default value is Qt.AlignRight + */ + property int horizontalAlignment: Qt.AlignRight + + /*! The text color. */ + property color textColor: SystemPaletteSingleton.text(control.enabled) + + /*! The text highlight color, used behind selections. */ + property color selectionColor: SystemPaletteSingleton.highlight(control.enabled) + + /*! The highlighted text color, used in selections. */ + property color selectedTextColor: SystemPaletteSingleton.highlightedText(control.enabled) + + /*! + \qmlproperty enumeration renderType + + Override the default rendering type for the control. + + Supported render types are: + \list + \li Text.QtRendering + \li Text.NativeRendering + \endlist + + The default value is platform dependent. + + \sa Text::renderType + */ + property int renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + + /*! + \since QtQuick.Controls.Styles 1.3 + The font of the control. + */ + property font font + + /*! The button used to increment the value. */ + property Component incrementControl: Item { + implicitWidth: padding.right + Image { + source: "images/arrow-up.png" + anchors.centerIn: parent + anchors.verticalCenterOffset: 1 + opacity: control.enabled ? (styleData.upPressed ? 1 : 0.6) : 0.5 + } + } + + /*! The button used to decrement the value. */ + property Component decrementControl: Item { + implicitWidth: padding.right + Image { + source: "images/arrow-down.png" + anchors.centerIn: parent + anchors.verticalCenterOffset: -2 + opacity: control.enabled ? (styleData.downPressed ? 1 : 0.6) : 0.5 + } + } + + /*! The background of the SpinBox. */ + property Component background: Item { + implicitHeight: Math.max(25, Math.round(styleData.contentHeight * 1.2)) + implicitWidth: styleData.contentWidth + padding.left + padding.right + baselineOffset: control.__baselineOffset + Rectangle { + anchors.fill: parent + anchors.bottomMargin: -1 + color: "#44ffffff" + radius: baserect.radius + } + Rectangle { + id: baserect + gradient: Gradient { + GradientStop {color: "#eee" ; position: 0} + GradientStop {color: "#fff" ; position: 0.1} + GradientStop {color: "#fff" ; position: 1} + } + radius: control.font.pixelSize * 0.16 + anchors.fill: parent + border.color: control.activeFocus ? "#47b" : "#999" + } + } + + /*! \internal */ + property Component panel: Item { + id: styleitem + implicitWidth: backgroundLoader.implicitWidth + implicitHeight: backgroundLoader.implicitHeight + baselineOffset: backgroundLoader.item ? backgroundLoader.item.baselineOffset : 0 + + property font font: spinboxStyle.font + + property color foregroundColor: spinboxStyle.textColor + property color selectionColor: spinboxStyle.selectionColor + property color selectedTextColor: spinboxStyle.selectedTextColor + + property var margins: spinboxStyle.padding + + property rect upRect: Qt.rect(width - incrementControlLoader.implicitWidth, 0, incrementControlLoader.implicitWidth, height / 2 + 1) + property rect downRect: Qt.rect(width - decrementControlLoader.implicitWidth, height / 2, decrementControlLoader.implicitWidth, height / 2) + + property int horizontalAlignment: spinboxStyle.horizontalAlignment + property int verticalAlignment: Qt.AlignVCenter + + Loader { + id: backgroundLoader + anchors.fill: parent + sourceComponent: background + } + + Loader { + id: incrementControlLoader + x: upRect.x + y: upRect.y + width: upRect.width + height: upRect.height + sourceComponent: incrementControl + } + + Loader { + id: decrementControlLoader + x: downRect.x + y: downRect.y + width: downRect.width + height: downRect.height + sourceComponent: decrementControl + } + } + + /*! \internal + The cursor handle. + \since QtQuick.Controls.Styles 1.3 + + The parent of the handle is positioned to the top left corner of + the cursor position. The interactive area is determined by the + geometry of the handle delegate. + + The following signals and read-only properties are available within the scope + of the handle delegate: + \table + \row \li \b {styleData.activated()} [signal] \li Emitted when the handle is activated ie. the editor is clicked. + \row \li \b {styleData.pressed} : bool \li Whether the handle is pressed. + \row \li \b {styleData.position} : int \li The character position of the handle. + \row \li \b {styleData.lineHeight} : real \li The height of the line the handle is on. + \row \li \b {styleData.hasSelection} : bool \li Whether the editor has selected text. + \endtable + */ + property Component __cursorHandle + + /*! \internal + The selection handle. + \since QtQuick.Controls.Styles 1.3 + + The parent of the handle is positioned to the top left corner of + the first selected character. The interactive area is determined + by the geometry of the handle delegate. + + The following signals and read-only properties are available within the scope + of the handle delegate: + \table + \row \li \b {styleData.activated()} [signal] \li Emitted when the handle is activated ie. the editor is clicked. + \row \li \b {styleData.pressed} : bool \li Whether the handle is pressed. + \row \li \b {styleData.position} : int \li The character position of the handle. + \row \li \b {styleData.lineHeight} : real \li The height of the line the handle is on. + \row \li \b {styleData.hasSelection} : bool \li Whether the editor has selected text. + \endtable + */ + property Component __selectionHandle + + /*! \internal + The cursor delegate. + \since QtQuick.Controls.Styles 1.3 + */ + property Component __cursorDelegate +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/StatusBarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/StatusBarStyle.qml new file mode 100644 index 0000000..8b62042 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/StatusBarStyle.qml @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype StatusBarStyle + \inqmlmodule QtQuick.Controls.Styles + \ingroup controlsstyling + \since 5.2 + \brief Provides custom styling for StatusBar. + + The status bar can be defined by overriding the background component and + setting the content padding. + + Example: + \qml + StatusBar { + style: StatusBarStyle { + padding { + left: 8 + right: 8 + top: 3 + bottom: 3 + } + background: Rectangle { + implicitHeight: 16 + implicitWidth: 200 + gradient: Gradient{ + GradientStop{color: "#eee" ; position: 0} + GradientStop{color: "#ccc" ; position: 1} + } + Rectangle { + anchors.top: parent.top + width: parent.width + height: 1 + color: "#999" + } + } + } + } + \endqml +*/ + +Style { + + /*! The content padding inside the status bar. */ + padding { + left: 3 + right: 3 + top: 3 + bottom: 2 + } + + /*! This defines the background of the status bar. */ + property Component background: Rectangle { + implicitHeight: 16 + implicitWidth: 200 + + gradient: Gradient{ + GradientStop{color: "#eee" ; position: 0} + GradientStop{color: "#ccc" ; position: 1} + } + + Rectangle { + anchors.top: parent.top + width: parent.width + height: 1 + color: "#999" + } + } + + /*! This defines the panel of the status bar. */ + property Component panel: Loader { + sourceComponent: background + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/StatusIndicatorStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/StatusIndicatorStyle.qml new file mode 100644 index 0000000..ae9f211 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/StatusIndicatorStyle.qml @@ -0,0 +1,232 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtGraphicalEffects 1.0 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 + +/*! + \qmltype StatusIndicatorStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.5 + \ingroup controlsstyling + \brief Provides custom styling for StatusIndicatorStyle. + + You can create a custom status indicator by defining the \l indicator + component. +*/ + +Style { + id: pieMenuStyle + + /*! + The \l StatusIndicator that this style is attached to. + */ + readonly property StatusIndicator control: __control + + /*! + The color that instances of + \l [QtQuickExtras]{StatusIndicator} will have. + The \l [QtQuickExtras]{StatusIndicator::}{color} + property in \l [QtQuickExtras]{StatusIndicator} + will override this property when set. + */ + property color color: "red" + + /*! + This defines the indicator in both its on and off status. + */ + property Component indicator: Item { + readonly property real shineStep: 0.05 + readonly property real smallestAxis: Math.min(control.width, control.height) + readonly property real outerRecessPercentage: 0.11 + readonly property color offColor: Qt.rgba(0.13, 0.13, 0.13) + readonly property color baseColor: control.active ? control.color : offColor + + implicitWidth: TextSingleton.implicitHeight * 2 + implicitHeight: implicitWidth + + Canvas { + id: backgroundCanvas + width: Math.min(parent.width, parent.height) + // height: width --- QTBUG-42878 + height: Math.min(parent.width, parent.height) + anchors.centerIn: parent + + Connections { + target: control + function onActiveChanged() { backgroundCanvas.requestPaint() } + function onColorChanged() { backgroundCanvas.requestPaint() } + } + + onPaint: { + var ctx = getContext("2d"); + ctx.reset(); + + // Draw the semi-transparent background. + ctx.beginPath(); + var gradient = ctx.createLinearGradient(width / 2, 0, width / 2, height * 0.75); + gradient.addColorStop(0.0, Qt.rgba(0, 0, 0, control.active ? 0.1 : 0.25)); + gradient.addColorStop(1.0, control.active ? Qt.rgba(0, 0, 0, 0.1) : Qt.rgba(0.74, 0.74, 0.74, 0.25)); + + ctx.fillStyle = gradient; + ctx.ellipse(0, 0, width, height); + ctx.fill(); + } + } + + Item { + id: shadowGuard + anchors.fill: backgroundCanvas + anchors.margins: -shadow.radius + + Canvas { + id: colorCanvas + anchors.fill: parent + anchors.margins: shadow.radius + + Connections { + target: control + function onActiveChanged() { colorCanvas.requestPaint() } + function onColorChanged() { colorCanvas.requestPaint() } + } + + onPaint: { + var ctx = getContext("2d"); + ctx.reset(); + + // Draw the actual color within the circle. + ctx.beginPath(); + ctx.fillStyle = baseColor; + var recess = smallestAxis * outerRecessPercentage; + ctx.ellipse(recess, recess, width - recess * 2, height - recess * 2); + ctx.fill(); + } + } + } + + DropShadow { + id: shadow + source: shadowGuard + color: control.color + cached: true + anchors.fill: shadowGuard + visible: control.active + } + + Canvas { + id: foregroundCanvas + anchors.fill: backgroundCanvas + + Connections { + target: control + function onActiveChanged() { foregroundCanvas.requestPaint() } + function onColorChanged() { foregroundCanvas.requestPaint() } + } + + onPaint: { + var ctx = getContext("2d"); + ctx.reset(); + + // Draw the first shine. + ctx.beginPath(); + ctx.fillStyle = Qt.rgba(1, 1, 1, 0.03); + var recessPercentage = outerRecessPercentage + shineStep * 0.65; + var recess = smallestAxis * recessPercentage; + ctx.ellipse(recess, recess, width - recess * 2, height - recess * 2); + ctx.fill(); + + // Draw the second, inner shine. + ctx.beginPath(); + ctx.fillStyle = Qt.rgba(1, 1, 1, 0.06); + recessPercentage += shineStep; + recess = smallestAxis * recessPercentage; + ctx.ellipse(recess, recess, width - recess * 2, height - recess * 2); + ctx.fill(); + + // Now draw the final arced shine that goes over the first and second shines. + // First, clip the entire shine area. + ctx.beginPath(); + recessPercentage -= shineStep; + recess = smallestAxis * recessPercentage; + ctx.ellipse(recess, recess, width - recess * 2, height - recess * 2); + ctx.clip(); + + if (!control.active) { + // Then, clip the bottom area out of the shine. + ctx.ellipse(recess, height * 0.425, width - recess * 2, height - recess * 2); + ctx.clip(); + } + + ctx.beginPath(); + var gradient; + if (!control.active) { + // Draw the shine arc. + gradient = ctx.createLinearGradient(width / 2, height * 0.2, width / 2, height * 0.65); + gradient.addColorStop(0.0, Qt.rgba(1, 1, 1, 0.05)); + gradient.addColorStop(1.0, "transparent"); + } else { + // Draw the radial shine. + gradient = ctx.createRadialGradient(width / 2, height / 2, 0, width / 2, height / 2, width * 0.5 /* (same as height) */); + gradient.addColorStop(0.0, Qt.lighter(baseColor, 1.4)); + gradient.addColorStop(1.0, "transparent"); + } + + ctx.fillStyle = gradient; + ctx.ellipse(recess, recess, width - recess * 2, height - recess * 2); + ctx.fill(); + } + } + } + + /*! \internal */ + property Component panel: Item { + implicitWidth: indicatorLoader.implicitWidth + implicitHeight: indicatorLoader.implicitHeight + + Loader { + id: indicatorLoader + width: Math.max(1, parent.width) + height: Math.max(1, parent.height) + anchors.centerIn: parent + sourceComponent: indicator + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SwitchStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SwitchStyle.qml new file mode 100644 index 0000000..39db036 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/SwitchStyle.qml @@ -0,0 +1,169 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype SwitchStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.2 + \ingroup controlsstyling + \brief Provides custom styling for Switch. + + Example: + \qml + Switch { + style: SwitchStyle { + groove: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + radius: 9 + border.color: control.activeFocus ? "darkblue" : "gray" + border.width: 1 + } + } + } + \endqml +*/ +Style { + id: switchstyle + + /*! The content padding. */ + padding { + top: 0 + left: 0 + right: 0 + bottom: 0 + } + + /*! This defines the switch handle. */ + property Component handle: Rectangle { + opacity: control.enabled ? 1.0 : 0.5 + implicitWidth: Math.round((parent.parent.width - padding.left - padding.right)/2) + implicitHeight: control.height - padding.top - padding.bottom + + border.color: control.activeFocus ? Qt.darker(highlight, 2) : Qt.darker(button, 2) + property color bg: control.activeFocus ? Qt.darker(highlight, 1.2) : button + property color highlight: SystemPaletteSingleton.highlight(control.enabled) + property color button: SystemPaletteSingleton.button(control.enabled) + gradient: Gradient { + GradientStop {color: Qt.lighter(bg, 1.4) ; position: 0} + GradientStop {color: bg ; position: 1} + } + + radius: 2 + } + + /*! This property holds the background groove of the switch. */ + property Component groove: Rectangle { + property color shadow: control.checked ? Qt.darker(highlight, 1.2): "#999" + property color bg: control.checked ? highlight:"#bbb" + property color highlight: SystemPaletteSingleton.highlight(control.enabled) + + implicitWidth: Math.round(implicitHeight * 3) + implicitHeight: Math.max(16, Math.round(TextSingleton.implicitHeight)) + + border.color: "gray" + color: "red" + + radius: 2 + Behavior on shadow {ColorAnimation{ duration: 80 }} + Behavior on bg {ColorAnimation{ duration: 80 }} + gradient: Gradient { + GradientStop {color: shadow; position: 0} + GradientStop {color: bg ; position: 0.2} + GradientStop {color: bg ; position: 1} + } + Rectangle { + color: "#44ffffff" + height: 1 + anchors.bottom: parent.bottom + anchors.bottomMargin: -1 + width: parent.width - 2 + x: 1 + } + } + + /*! \internal */ + property Component panel: Item { + + implicitWidth: Math.round(grooveLoader.width + padding.left + padding.right) + implicitHeight: grooveLoader.implicitHeight + padding.top + padding.bottom + + property var __handle: handleLoader + property int min: padding.left + property int max: grooveLoader.width - handleLoader.width - padding.right + + Loader { + id: grooveLoader + y: padding.top + x: padding.left + + sourceComponent: groove + anchors.verticalCenter: parent.verticalCenter + + + Loader { + id: handleLoader + + z:1 + + x: control.checked ? max : min + + anchors.top: grooveLoader.top + anchors.bottom: grooveLoader.bottom + anchors.topMargin: padding.top + anchors.bottomMargin: padding.bottom + + Behavior on x { + id: behavior + enabled: handleLoader.status === Loader.Ready + NumberAnimation { + duration: 150 + easing.type: Easing.OutCubic + } + } + + sourceComponent: handle + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TabViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TabViewStyle.qml new file mode 100644 index 0000000..2d7d2d9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TabViewStyle.qml @@ -0,0 +1,194 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype TabViewStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup viewsstyling + \ingroup controlsstyling + \brief Provides custom styling for TabView. + +\qml + TabView { + id: frame + anchors.fill: parent + anchors.margins: 4 + Tab { title: "Tab 1" } + Tab { title: "Tab 2" } + Tab { title: "Tab 3" } + + style: TabViewStyle { + frameOverlap: 1 + tab: Rectangle { + color: styleData.selected ? "steelblue" :"lightsteelblue" + border.color: "steelblue" + implicitWidth: Math.max(text.width + 4, 80) + implicitHeight: 20 + radius: 2 + Text { + id: text + anchors.centerIn: parent + text: styleData.title + color: styleData.selected ? "white" : "black" + } + } + frame: Rectangle { color: "steelblue" } + } + } +\endqml + +*/ + +Style { + + /*! The \l ScrollView this style is attached to. */ + readonly property TabView control: __control + + /*! This property holds whether the user can move the tabs. + Tabs are not movable by default. */ + property bool tabsMovable: false + + /*! This property holds the horizontal alignment of + the tab buttons. Supported values are: + \list + \li Qt.AlignLeft (default) + \li Qt.AlignHCenter + \li Qt.AlignRight + \endlist + */ + property int tabsAlignment: Qt.AlignLeft + + /*! This property holds the amount of overlap there are between + individual tab buttons. */ + property int tabOverlap: 1 + + /*! This property holds the amount of overlap there are between + individual tab buttons and the frame. */ + property int frameOverlap: 2 + + /*! This defines the tab frame. */ + property Component frame: Rectangle { + color: "#dcdcdc" + border.color: "#aaa" + + Rectangle { + anchors.fill: parent + color: "transparent" + border.color: "#66ffffff" + anchors.margins: 1 + } + } + + /*! This defines the tab. You can access the tab state through the + \c styleData property, with the following properties: + + \table + \row \li readonly property int \b styleData.index \li This is the current tab index. + \row \li readonly property bool \b styleData.selected \li This is the active tab. + \row \li readonly property string \b styleData.title \li Tab title text. + \row \li readonly property bool \b styleData.nextSelected \li The next tab is selected. + \row \li readonly property bool \b styleData.previousSelected \li The previous tab is selected. + \row \li readonly property bool \b styleData.pressed \li The tab is being pressed. (since QtQuick.Controls.Styles 1.3) + \row \li readonly property bool \b styleData.hovered \li The tab is being hovered. + \row \li readonly property bool \b styleData.enabled \li The tab is enabled. (since QtQuick.Controls.Styles 1.2) + \row \li readonly property bool \b styleData.activeFocus \li The tab button has keyboard focus. + \row \li readonly property bool \b styleData.availableWidth \li The available width for the tabs. + \row \li readonly property bool \b styleData.totalWidth \li The total width of the tabs. (since QtQuick.Controls.Styles 1.2) + \endtable + */ + property Component tab: Item { + scale: control.tabPosition === Qt.TopEdge ? 1 : -1 + + property int totalOverlap: tabOverlap * (control.count - 1) + property real maxTabWidth: control.count > 0 ? (styleData.availableWidth + totalOverlap) / control.count : 0 + + implicitWidth: Math.round(Math.min(maxTabWidth, textitem.implicitWidth + 20)) + implicitHeight: Math.round(textitem.implicitHeight + 10) + + Item { + anchors.fill: parent + anchors.bottomMargin: styleData.selected ? 0 : 2 + BorderImage { + anchors.fill: parent + source: styleData.selected ? "images/tab_selected.png" : "images/tab.png" + border.top: 6 + border.bottom: 6 + border.left: 6 + border.right: 6 + anchors.topMargin: styleData.selected ? 0 : 1 + } + } + Text { + id: textitem + anchors.fill: parent + anchors.leftMargin: 4 + anchors.rightMargin: 4 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + text: styleData.title + elide: Text.ElideMiddle + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + scale: control.tabPosition === Qt.TopEdge ? 1 : -1 + color: SystemPaletteSingleton.text(styleData.enabled) + Rectangle { + anchors.centerIn: parent + width: textitem.paintedWidth + 6 + height: textitem.paintedHeight + 4 + visible: (styleData.activeFocus && styleData.selected) + radius: 3 + color: "#224f9fef" + border.color: "#47b" + } + } + } + + /*! This defines the left corner. */ + property Component leftCorner: null + + /*! This defines the right corner. */ + property Component rightCorner: null + + /*! This defines the tab bar background. */ + property Component tabBar: null +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TableViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TableViewStyle.qml new file mode 100644 index 0000000..f7a6bfa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TableViewStyle.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +BasicTableViewStyle { + id: root + + readonly property TableView control: __control +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TextAreaStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TextAreaStyle.qml new file mode 100644 index 0000000..8c08e21 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TextAreaStyle.qml @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype TextAreaStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.2 + \ingroup controlsstyling + \brief Provides custom styling for TextArea. + + Example: + \qml + TextArea { + style: TextAreaStyle { + textColor: "#333" + selectionColor: "steelblue" + selectedTextColor: "#eee" + backgroundColor: "#eee" + } + } + \endqml +*/ + +ScrollViewStyle { + id: style + + /*! The \l TextArea this style is attached to. */ + readonly property TextArea control: __control + + /*! The current font. */ + property font font + + /*! The text color. */ + property color textColor: SystemPaletteSingleton.text(control.enabled) + + /*! The text highlight color, used behind selections. */ + property color selectionColor: SystemPaletteSingleton.highlight(control.enabled) + + /*! The highlighted text color, used in selections. */ + property color selectedTextColor: SystemPaletteSingleton.highlightedText(control.enabled) + + /*! The background color. */ + property color backgroundColor: control.backgroundVisible ? SystemPaletteSingleton.base(control.enabled) : "transparent" + + /*! + \qmlproperty enumeration renderType + + Override the default rendering type for the control. + + Supported render types are: + \list + \li Text.QtRendering + \li Text.NativeRendering + \endlist + + The default value is platform dependent. + + \sa Text::renderType + */ + property int renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + + /*! The default margin, in pixels, around the text in the TextArea. + \since QtQuick.Controls.Styles 1.3 + \sa TextArea::textMargin */ + property real textMargin: 4 + + /*! \internal + The cursor handle. + \since QtQuick.Controls.Styles 1.3 + + The parent of the handle is positioned to the top left corner of + the cursor position. The interactive area is determined by the + geometry of the handle delegate. + + The following signals and read-only properties are available within the scope + of the handle delegate: + \table + \row \li \b {styleData.activated()} [signal] \li Emitted when the handle is activated ie. the editor is clicked. + \row \li \b {styleData.pressed} : bool \li Whether the handle is pressed. + \row \li \b {styleData.position} : int \li The character position of the handle. + \row \li \b {styleData.lineHeight} : real \li The height of the line the handle is on. + \row \li \b {styleData.hasSelection} : bool \li Whether the editor has selected text. + \endtable + */ + property Component __cursorHandle + + /*! \internal + The selection handle. + \since QtQuick.Controls.Styles 1.3 + + The parent of the handle is positioned to the top left corner of + the first selected character. The interactive area is determined + by the geometry of the handle delegate. + + The following signals and read-only properties are available within the scope + of the handle delegate: + \table + \row \li \b {styleData.activated()} [signal] \li Emitted when the handle is activated ie. the editor is clicked. + \row \li \b {styleData.pressed} : bool \li Whether the handle is pressed. + \row \li \b {styleData.position} : int \li The character position of the handle. + \row \li \b {styleData.lineHeight} : real \li The height of the line the handle is on. + \row \li \b {styleData.hasSelection} : bool \li Whether the editor has selected text. + \endtable + */ + property Component __selectionHandle + + /*! \internal + The cursor delegate. + \since QtQuick.Controls.Styles 1.3 + */ + property Component __cursorDelegate + + /*! \internal + The delegate for the cut/copy/paste menu. + \since QtQuick.Controls.Styles 1.4 + */ + property Component __editMenu +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TextFieldStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TextFieldStyle.qml new file mode 100644 index 0000000..338b7af --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TextFieldStyle.qml @@ -0,0 +1,221 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype TextFieldStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.1 + \ingroup controlsstyling + \brief Provides custom styling for TextField. + + Example: + \qml + TextField { + style: TextFieldStyle { + textColor: "black" + background: Rectangle { + radius: 2 + implicitWidth: 100 + implicitHeight: 24 + border.color: "#333" + border.width: 1 + } + } + } + \endqml +*/ + +Style { + id: style + + /*! The \l TextField this style is attached to. */ + readonly property TextField control: __control + + /*! The content margins of the text field. */ + padding { top: 4 ; left: Math.round(control.__contentHeight/3) ; right: control.__contentHeight/3 ; bottom: 4 } + + /*! The current font. */ + property font font + + /*! The text color. */ + property color textColor: SystemPaletteSingleton.text(control.enabled) + + /*! The text highlight color, used behind selections. */ + property color selectionColor: SystemPaletteSingleton.highlight(control.enabled) + + /*! The highlighted text color, used in selections. */ + property color selectedTextColor: SystemPaletteSingleton.highlightedText(control.enabled) + + /*! + \qmlproperty string passwordCharacter + \since QtQuick.Controls.Styles 1.4 + + The password character that is displayed when echoMode + on the TextField is set to TextInput.Password or + TextInput.PasswordEchoOnEdit. + */ + property string passwordCharacter: Qt.styleHints.passwordMaskCharacter + + /*! + \qmlproperty enumeration renderType + \since QtQuick.Controls.Styles 1.1 + + Override the default rendering type for the control. + + Supported render types are: + \list + \li Text.QtRendering + \li Text.NativeRendering + \endlist + + The default value is platform dependent. + + \sa Text::renderType + */ + property int renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + + /*! The placeholder text color, used when the text field is empty. + \since QtQuick.Controls.Styles 1.1 + */ + property color placeholderTextColor: Qt.rgba(0, 0, 0, 0.5) + + /*! The background of the text field. */ + property Component background: Item { + Rectangle { + anchors.fill: parent + anchors.bottomMargin: -1 + color: "#44ffffff" + radius: baserect.radius + } + Rectangle { + id: baserect + gradient: Gradient { + GradientStop {color: "#e0e0e0" ; position: 0} + GradientStop {color: "#fff" ; position: 0.1} + GradientStop {color: "#fff" ; position: 1} + } + radius: control.__contentHeight * 0.16 + anchors.fill: parent + border.color: control.activeFocus ? "#47b" : "#999" + } + } + + /*! \internal */ + property Component panel: Item { + anchors.fill: parent + + property int topMargin: padding.top + property int leftMargin: padding.left + property int rightMargin: padding.right + property int bottomMargin: padding.bottom + + property color textColor: style.textColor + property color selectionColor: style.selectionColor + property color selectedTextColor: style.selectedTextColor + + implicitWidth: backgroundLoader.implicitWidth || Math.round(control.__contentHeight * 8) + implicitHeight: backgroundLoader.implicitHeight || Math.max(25, Math.round(control.__contentHeight * 1.2)) + baselineOffset: padding.top + control.__baselineOffset + + property color placeholderTextColor: style.placeholderTextColor + property font font: style.font + + Loader { + id: backgroundLoader + sourceComponent: background + anchors.fill: parent + } + } + + /*! \internal + The cursor handle. + \since QtQuick.Controls.Styles 1.3 + + The parent of the handle is positioned to the top left corner of + the cursor position. The interactive area is determined by the + geometry of the handle delegate. + + The following signals and read-only properties are available within the scope + of the handle delegate: + \table + \row \li \b {styleData.activated()} [signal] \li Emitted when the handle is activated ie. the editor is clicked. + \row \li \b {styleData.pressed} : bool \li Whether the handle is pressed. + \row \li \b {styleData.position} : int \li The character position of the handle. + \row \li \b {styleData.lineHeight} : real \li The height of the line the handle is on. + \row \li \b {styleData.hasSelection} : bool \li Whether the editor has selected text. + \endtable + */ + property Component __cursorHandle + + /*! \internal + The selection handle. + \since QtQuick.Controls.Styles 1.3 + + The parent of the handle is positioned to the top left corner of + the first selected character. The interactive area is determined + by the geometry of the handle delegate. + + The following signals and read-only properties are available within the scope + of the handle delegate: + \table + \row \li \b {styleData.activated()} [signal] \li Emitted when the handle is activated ie. the editor is clicked. + \row \li \b {styleData.pressed} : bool \li Whether the handle is pressed. + \row \li \b {styleData.position} : int \li The character position of the handle. + \row \li \b {styleData.lineHeight} : real \li The height of the line the handle is on. + \row \li \b {styleData.hasSelection} : bool \li Whether the editor has selected text. + \endtable + */ + property Component __selectionHandle + + /*! \internal + The cursor delegate. + \since QtQuick.Controls.Styles 1.3 + */ + property Component __cursorDelegate + + /*! \internal + The delegate for the cut/copy/paste menu. + \since QtQuick.Controls.Styles 1.4 + */ + property Component __editMenu +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToggleButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToggleButtonStyle.qml new file mode 100644 index 0000000..2c47b4b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToggleButtonStyle.qml @@ -0,0 +1,290 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtGraphicalEffects 1.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 +import QtQuick.Extras.Private.CppUtils 1.0 + +/*! + \qmltype ToggleButtonStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.5 + \ingroup controlsstyling + \brief Provides custom styling for ToggleButton. + + You can create a custom toggle button by replacing the same delegates that + \l {ButtonStyle} provides. +*/ + +CircularButtonStyle { + id: circularButtonStyle + + /*! + The \l ToggleButton that this style is attached to. + */ + readonly property ToggleButton control: __control + + /*! + The gradient that is displayed on the inactive state indicator. The + inactive state indicator will be the checked gradient when the button + is unchecked, and the unchecked gradient when the button is checked. + + \sa checkedGradient, uncheckedGradient + */ + property Gradient inactiveGradient: Gradient { + GradientStop { + position: 0 + color: commonStyleHelper.inactiveColor + } + GradientStop { + position: 1 + color: commonStyleHelper.inactiveColorShine + } + } + + /*! + The gradient that is displayed on the checked state indicator. + + \sa uncheckedGradient, inactiveGradient + */ + property Gradient checkedGradient: Gradient { + GradientStop { + position: 0 + color: commonStyleHelper.onColor + } + GradientStop { + position: 1 + color: commonStyleHelper.onColorShine + } + } + + /*! + The gradient that is displayed on the unchecked state indicator. + + \sa checkedGradient, inactiveGradient + */ + property Gradient uncheckedGradient: Gradient { + GradientStop { + position: 0 + color: commonStyleHelper.offColor + } + GradientStop { + position: 1 + color: commonStyleHelper.offColorShine + } + } + + /*! + The color that is used for the drop shadow below the checked state + indicator. + + \sa uncheckedDropShadowColor + */ + property color checkedDropShadowColor: commonStyleHelper.onColor + + /*! + The color that is used for the drop shadow below the checked state + indicator. + + \sa checkedDropShadowColor + */ + property color uncheckedDropShadowColor: commonStyleHelper.offColor + + CommonStyleHelper { + id: commonStyleHelper + } + + background: Item { + implicitWidth: __buttonHelper.implicitWidth + implicitHeight: __buttonHelper.implicitHeight + + Connections { + target: control + function onPressedChanged() { + backgroundCanvas.requestPaint(); + } + + function onCheckedChanged() { + uncheckedCanvas.requestPaint(); + checkedCanvas.requestPaint(); + } + } + + Connections { + target: circularButtonStyle + + function onCheckedGradientChanged() { checkedCanvas.requestPaint() } + function onCheckedDropShadowColorChanged() { checkedCanvas.requestPaint() } + function onUncheckedGradientChanged() { uncheckedCanvas.requestPaint() } + function onUncheckedDropShadowColorChanged() { uncheckedCanvas.requestPaint() } + function onInactiveGradientChanged() { + checkedCanvas.requestPaint(); + uncheckedCanvas.requestPaint(); + } + } + + Connections { + target: circularButtonStyle.checkedGradient + function onUpdated() { checkedCanvas.requestPaint() } + } + + Connections { + target: circularButtonStyle.uncheckedGradient + function onUpdated() { uncheckedCanvas.requestPaint() } + } + + Connections { + target: circularButtonStyle.inactiveGradient + function onUpdated() { + uncheckedCanvas.requestPaint(); + checkedCanvas.requestPaint(); + } + } + + Canvas { + id: backgroundCanvas + anchors.fill: parent + + onPaint: { + var ctx = getContext("2d"); + __buttonHelper.paintBackground(ctx); + } + } + + Canvas { + id: uncheckedCanvas + anchors.fill: parent + anchors.margins: -(__buttonHelper.radius * 3) + visible: control.checked + + readonly property real xCenter: width / 2 + readonly property real yCenter: height / 2 + + onPaint: { + var ctx = getContext("2d"); + ctx.reset(); + + /* Draw unchecked indicator */ + ctx.beginPath(); + ctx.lineWidth = __buttonHelper.outerArcLineWidth - __buttonHelper.innerArcLineWidth; + ctx.arc(xCenter, yCenter, __buttonHelper.outerArcRadius + __buttonHelper.innerArcLineWidth / 2, + MathUtils.degToRad(180), MathUtils.degToRad(270), false); + var gradient = ctx.createLinearGradient(xCenter, yCenter + __buttonHelper.radius, + xCenter, yCenter - __buttonHelper.radius); + var relevantGradient = control.checked ? inactiveGradient : uncheckedGradient; + for (var i = 0; i < relevantGradient.stops.length; ++i) { + gradient.addColorStop(relevantGradient.stops[i].position, relevantGradient.stops[i].color); + } + ctx.strokeStyle = gradient; + ctx.stroke(); + } + } + + Canvas { + id: checkedCanvas + anchors.fill: parent + anchors.margins: -(__buttonHelper.radius * 3) + visible: !control.checked + + readonly property real xCenter: width / 2 + readonly property real yCenter: height / 2 + + onPaint: { + var ctx = getContext("2d"); + ctx.reset(); + + /* Draw checked indicator */ + ctx.beginPath(); + ctx.lineWidth = __buttonHelper.outerArcLineWidth - __buttonHelper.innerArcLineWidth; + ctx.arc(xCenter, yCenter, __buttonHelper.outerArcRadius + __buttonHelper.innerArcLineWidth / 2, + MathUtils.degToRad(270), MathUtils.degToRad(0), false); + var gradient = ctx.createLinearGradient(xCenter, yCenter + __buttonHelper.radius, + xCenter, yCenter - __buttonHelper.radius); + var relevantGradient = control.checked ? checkedGradient : inactiveGradient; + for (var i = 0; i < relevantGradient.stops.length; ++i) { + gradient.addColorStop(relevantGradient.stops[i].position, relevantGradient.stops[i].color); + } + ctx.strokeStyle = gradient; + ctx.stroke(); + } + } + + DropShadow { + id: uncheckedDropShadow + anchors.fill: uncheckedCanvas + cached: true + color: uncheckedDropShadowColor + source: uncheckedCanvas + visible: !control.checked + } + + DropShadow { + id: checkedDropShadow + anchors.fill: checkedCanvas + cached: true + color: checkedDropShadowColor + source: checkedCanvas + visible: control.checked + } + } + + panel: Item { + implicitWidth: backgroundLoader.implicitWidth + implicitHeight: backgroundLoader.implicitHeight + + Loader { + id: backgroundLoader + anchors.fill: parent + sourceComponent: background + } + + Loader { + id: labelLoader + sourceComponent: label + anchors.fill: parent + anchors.leftMargin: padding.left + anchors.topMargin: padding.top + anchors.rightMargin: padding.right + anchors.bottomMargin: padding.bottom + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToolBarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToolBarStyle.qml new file mode 100644 index 0000000..8c34efa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToolBarStyle.qml @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ToolBarStyle + \inqmlmodule QtQuick.Controls.Styles + \ingroup controlsstyling + \since 5.2 + \brief Provides custom styling for ToolBar. + + The tool bar can be defined by overriding the background component and + setting the content padding. + + Example: + \qml + ToolBar { + style: ToolBarStyle { + padding { + left: 8 + right: 8 + top: 3 + bottom: 3 + } + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + border.color: "#999" + gradient: Gradient { + GradientStop { position: 0 ; color: "#fff" } + GradientStop { position: 1 ; color: "#eee" } + } + } + } + } + \endqml +*/ + +Style { + + /*! The content padding inside the tool bar. */ + padding { + left: 6 + right: 6 + top: 3 + bottom: 3 + } + + /*! This defines the background of the tool bar. */ + property Component background: Item { + implicitHeight: 40 + implicitWidth: 200 + Rectangle { + anchors.fill: parent + gradient: Gradient{ + GradientStop{color: "#eee" ; position: 0} + GradientStop{color: "#ccc" ; position: 1} + } + Rectangle { + anchors.bottom: parent.bottom + width: parent.width + height: 1 + color: "#999" + } + } + } + + /*! This defines the menu button appearance on platforms + that have a unified tool bar and menu bar. + + \since QtQuick.Controls.Styles 1.3 + + The following read-only properties are available within the scope + of the menu button delegate: + \table + \row \li \b {styleData.pressed} : bool \li Whether the button is pressed. + \row \li \b {styleData.hovered} : bool \li Whether the button is hovered. + \row \li \b {styleData.activeFocus} : bool \li Whether the button has active focus. + \endtable + */ + property Component menuButton: null + + /*! This defines the panel of the tool bar. */ + property Component panel: Loader { + sourceComponent: background + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToolButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToolButtonStyle.qml new file mode 100644 index 0000000..9387188 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/ToolButtonStyle.qml @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ToolButtonStyle + \internal + \ingroup controlsstyling + \inqmlmodule QtQuick.Controls.Styles +*/ +Style { + readonly property ToolButton control: __control + property Component panel: Item { + id: styleitem + implicitWidth: (hasIcon ? icon.width : Math.max(label.implicitWidth + frame.border.left + frame.border.right, 36)) + + (arrow.visible ? 10 : 0) + implicitHeight: hasIcon ? icon.height : Math.max(label.implicitHeight, 36) + + readonly property bool hasIcon: icon.status === Image.Ready || icon.status === Image.Loading + + Rectangle { + anchors.fill: parent + visible: control.pressed || (control.checkable && control.checked) + color: "lightgray" + radius:4 + border.color: "#aaa" + } + Item { + anchors.left: parent.left + anchors.right: arrow.left + anchors.top: parent.top + anchors.bottom: parent.bottom + clip: true + Text { + id: label + visible: !hasIcon + anchors.centerIn: parent + text: StyleHelpers.stylizeMnemonics(control.text) + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + Image { + id: icon + anchors.centerIn: parent + source: control.iconSource + } + } + + BorderImage { + id: frame + anchors.fill: parent + anchors.margins: -1 + anchors.topMargin: -2 + anchors.rightMargin: 0 + source: "images/focusframe.png" + visible: control.activeFocus + border.left: 4 + border.right: 4 + border.top: 4 + border.bottom: 4 + } + + Image { + id: arrow + visible: control.menu !== null + source: visible ? "images/arrow-down.png" : "" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: visible ? 3 : 0 + opacity: control.enabled ? 0.7 : 0.5 + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TreeViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TreeViewStyle.qml new file mode 100644 index 0000000..72825cc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TreeViewStyle.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Private 1.0 + +BasicTableViewStyle { + id: root + + readonly property TreeView control: __control + + property int indentation: 16 + + property Component branchDelegate: Item { + width: indentation + height: 16 + Text { + visible: styleData.column === 0 && styleData.hasChildren + text: styleData.isExpanded ? "\u25bc" : "\u25b6" + color: !control.activeFocus || styleData.selected ? styleData.textColor : "#666" + font.pointSize: 10 + renderType: Text.NativeRendering + style: Text.PlainText + anchors.centerIn: parent + anchors.verticalCenterOffset: 2 + } + } + + __branchDelegate: branchDelegate + __indentation: indentation +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TumblerStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TumblerStyle.qml new file mode 100644 index 0000000..c70aea6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/TumblerStyle.qml @@ -0,0 +1,334 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtGraphicalEffects 1.0 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 + +/*! + \qmltype TumblerStyle + \inqmlmodule QtQuick.Controls.Styles + \since 5.5 + \ingroup controlsstyling + \brief Provides custom styling for Tumbler. + + You can create a custom tumbler by replacing the following delegates: + \list + \li \l background + \li \l foreground + \li \l separator + \li \l delegate + \li \l highlight + \li \l frame + \endlist +*/ + +Style { + id: tumblerStyle + + padding.left: __padding + padding.right: __padding + padding.top: __padding + padding.bottom: __padding + + /*! + The \l Tumbler that this style is attached to. + */ + readonly property Tumbler control: __control + + /*! + \obsolete + + This property holds the spacing between each delegate. + + This property has no effect. + */ + property real spacing: 0 + + /*! + This property holds the amount of items visible in each column. + + This value should be an odd number. + */ + property int visibleItemCount: 3 + + /*! + \internal + + TODO: how do we handle differing padding values? + */ + readonly property real __padding: Math.max(6, Math.round(TextSingleton.implicitHeight * 0.4)) + /*! \internal */ + property real __delegateHeight: 0 + /*! \internal */ + property real __separatorWidth: 0 + + /*! + The background of the tumbler. + */ + property Component background: Rectangle { + gradient: Gradient { + GradientStop { position: 0.00; color: "#acacac" } + GradientStop { position: 0.12; color: "#d5d5d5" } + GradientStop { position: 0.24; color: "#e8e8e8" } + GradientStop { position: 0.39; color: "#ffffff" } + GradientStop { position: 0.61; color: "#ffffff" } + GradientStop { position: 0.76; color: "#e8e8e8" } + GradientStop { position: 0.88; color: "#d5d5d5" } + GradientStop { position: 1.00; color: "#acacac" } + } + } + + /*! + The foreground of the tumbler. + */ + property Component foreground: Item { + clip: true + + Rectangle { + id: rect + anchors.fill: parent + // Go one pixel larger than our parent so that we can hide our one pixel frame + // that the shadow is created from. + anchors.margins: -1 + color: "transparent" + border.color: "black" + visible: false + } + + DropShadow { + anchors.fill: rect + source: rect + samples: 15 + spread: 0.45 + cached: true + } + } + + /*! + The separator between each column. + + The \l {Item::}{implicitWidth} property must be set, and should be the + same value for each separator. + */ + property Component separator: Canvas { + implicitWidth: Math.max(10, Math.round(TextSingleton.implicitHeight * 0.4)) + + onPaint: { + var ctx = getContext("2d"); + ctx.reset(); + + ctx.fillStyle = "#11000000"; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = "#11000000"; + ctx.fillRect(width * 0.2, 0, width * 0.6, height); + ctx.fillStyle = "#66000000"; + ctx.fillRect(width * 0.4, 0, width * 0.2, height); + } + } + + /*! + The foreground of each column. + + In terms of stacking order, this component is displayed above the + delegate and highlight components, but below the foreground component. + + \table + \row \li \c {readonly property int} \b styleData.column + \li The index of the column that contains this item. + \row \li \c {readonly property bool} \b styleData.activeFocus + \li \c true if the column that contains this item has active focus. + + \endtable + + Delegates for items in specific columns can be defined using + TumblerColumn's \l {TumblerColumn::columnForeground}{columnForeground} + property, which will be used instead of this component. + */ + property Component columnForeground + + /*! + The frame around the tumbler. + + The \l {Item::}{implicitWidth} property must be set, and should be the + same value for each separator. + */ + property Component frame: Canvas { + onPaint: { + // workaround for QTBUG-40792 + var ctx = getContext("2d"); + ctx.reset(); + + var cornerRadius = Math.max(2, Math.round(TextSingleton.implicitHeight * 0.2)); + var outerLineWidth = Math.max(1, Math.round(TextSingleton.implicitHeight * 0.05)); + var innerLineWidth = __padding - outerLineWidth; + + ctx.save(); + ctx.lineWidth = outerLineWidth; + ctx.beginPath(); + ctx.roundedRect(0, 0, width, height, cornerRadius, cornerRadius); + ctx.roundedRect(outerLineWidth, outerLineWidth, width - outerLineWidth * 2, height - outerLineWidth * 2, + cornerRadius - outerLineWidth, cornerRadius - outerLineWidth); + ctx.clip(); + + ctx.beginPath(); + ctx.rect(0, 0, width, height); + var gradient = ctx.createLinearGradient(width / 2, 0, width / 2, height); + gradient.addColorStop(0, "#33b3b3b3"); + gradient.addColorStop(1, "#4ce6e6e6"); + ctx.fillStyle = gradient; + ctx.fill(); + ctx.restore(); + + // The inner stroke must account for its corner radius. + cornerRadius -= outerLineWidth; + + ctx.save(); + ctx.lineWidth = innerLineWidth; + ctx.beginPath(); + ctx.roundedRect(outerLineWidth, outerLineWidth, width - outerLineWidth * 2, height - outerLineWidth * 2, + cornerRadius, cornerRadius); + ctx.roundedRect(outerLineWidth + innerLineWidth, outerLineWidth + innerLineWidth, + width - outerLineWidth * 2 - innerLineWidth * 2, height - outerLineWidth * 2 - innerLineWidth * 2, + cornerRadius - innerLineWidth, cornerRadius - innerLineWidth); + ctx.clip(); + + ctx.beginPath(); + ctx.rect(0, 0, width, height); + gradient = ctx.createLinearGradient(width / 2, 0, width / 2, height); + gradient.addColorStop(0, "#4c666666"); + gradient.addColorStop(1, "#40cccccc"); + ctx.fillStyle = gradient; + ctx.fill(); + ctx.restore(); + } + } + + /*! + The delegate provides a template defining each item instantiated in the + column. Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this delegate in the model. + \row \li \c {readonly property int} \b styleData.column + \li The index of the column that contains this item. + \row \li \c {readonly property real} \b styleData.value + \li The value for this delegate from the model. + \row \li \c {readonly property bool} \b styleData.current + \li \c true if this delegate is the current item. + \row \li \c {readonly property real} \b styleData.displacement + \li \c A value from \c {-visibleItemCount / 2} to + \c {visibleItemCount / 2} which represents how far away + this item is from being the current item, with \c 0 being + completely current. + + For example, the item below will be 40% opaque when + it is not the current item, and transition to 100% + opacity when it becomes the current item: + + \code + delegate: Text { + text: styleData.value + opacity: 0.4 + Math.max(0, 1 - Math.abs(styleData.displacement)) * 0.6 + } + \endcode + \row \li \c {readonly property bool} \b styleData.activeFocus + \li \c true if the column that contains this item has active focus. + + \endtable + + Properties of the model are also available depending upon the type of + \l {qml-data-models}{Data Model}. + + Delegates for items in specific columns can be defined using + TumblerColumn's \l {TumblerColumn::delegate}{delegate} property, which + will be used instead of this delegate. + + The \l {Item::}{implicitHeight} property must be set, and it must be + the same for each delegate. + */ + property Component delegate: Item { + implicitHeight: (control.height - padding.top - padding.bottom) / tumblerStyle.visibleItemCount + + Text { + id: label + text: styleData.value + color: "#666666" + opacity: 0.4 + Math.max(0, 1 - Math.abs(styleData.displacement)) * 0.6 + font.pixelSize: Math.round(TextSingleton.font.pixelSize * 1.25) + anchors.centerIn: parent + } + } + + /*! + The delegate for the highlight of each column. + + Delegates for the highlight of specific columns can be defined using + TumblerColumn's \l {TumblerColumn::highlight}{highlight} property, + which will be used instead of this delegate. + + Each instance of this component has access to the following properties: + + \table + \row \li \c {readonly property int} \b styleData.index + \li The index of this column in the tumbler. + \row \li \c {readonly property int} \b styleData.columnIndex + \li The index of the column that contains this highlight. + \row \li \c {readonly property bool} \b styleData.activeFocus + \li \c true if the column that contains this highlight has active focus. + \endtable + */ + property Component highlight + + /*! \internal */ + property Component panel: Item { + implicitWidth: { + var w = (__separatorWidth * (control.columnCount - 1)) + tumblerStyle.padding.left + tumblerStyle.padding.right; + for (var i = 0; i < control.columnCount; ++i) + w += control.getColumn(i).width; + return w; + } + implicitHeight: TextSingleton.implicitHeight * 10 + tumblerStyle.padding.top + tumblerStyle.padding.bottom + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-down.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-down.png new file mode 100644 index 0000000..dadd4f8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-down.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-down@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-down@2x.png new file mode 100644 index 0000000..2829fd1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-down@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-left.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-left.png new file mode 100644 index 0000000..7693fc7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-left.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-left@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-left@2x.png new file mode 100644 index 0000000..0005b3e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-left@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-right.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-right.png new file mode 100644 index 0000000..b5cb2b2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-right.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-right@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-right@2x.png new file mode 100644 index 0000000..21b36f7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-right@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-up.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-up.png new file mode 100644 index 0000000..d8a8247 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-up.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-up@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-up@2x.png new file mode 100644 index 0000000..1bd44d5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/arrow-up@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/button.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/button.png new file mode 100644 index 0000000..3793f3e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/button.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/button_down.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/button_down.png new file mode 100644 index 0000000..7b016fa Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/button_down.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/check.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/check.png new file mode 100644 index 0000000..ad1df95 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/check.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/check@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/check@2x.png new file mode 100644 index 0000000..3eb4ae7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/check@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/editbox.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/editbox.png new file mode 100644 index 0000000..f0e6ee4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/editbox.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/focusframe.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/focusframe.png new file mode 100644 index 0000000..aad5661 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/focusframe.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/groupbox.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/groupbox.png new file mode 100644 index 0000000..680e926 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/groupbox.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/header.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/header.png new file mode 100644 index 0000000..aaf8f99 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/header.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/knob.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/knob.png new file mode 100644 index 0000000..9a948fd Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/knob.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/leftanglearrow.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/leftanglearrow.png new file mode 100644 index 0000000..1e479a3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/leftanglearrow.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/needle.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/needle.png new file mode 100644 index 0000000..316dad7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/needle.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/progress-indeterminate.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/progress-indeterminate.png new file mode 100644 index 0000000..2ff41b4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/progress-indeterminate.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/rightanglearrow.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/rightanglearrow.png new file mode 100644 index 0000000..52f1a24 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/rightanglearrow.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-horizontal.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-horizontal.png new file mode 100644 index 0000000..67f582d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-horizontal.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-transient.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-transient.png new file mode 100644 index 0000000..34e7dd6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-transient.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-vertical.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-vertical.png new file mode 100644 index 0000000..280dac5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/scrollbar-handle-vertical.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/slider-groove.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/slider-groove.png new file mode 100644 index 0000000..a9d059b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/slider-groove.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/slider-handle.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/slider-handle.png new file mode 100644 index 0000000..0d4ee9c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/slider-handle.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_large.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_large.png new file mode 100644 index 0000000..8e6a773 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_large.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_medium.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_medium.png new file mode 100644 index 0000000..48a24d5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_medium.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_small.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_small.png new file mode 100644 index 0000000..c3e86dc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/spinner_small.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/tab.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/tab.png new file mode 100644 index 0000000..ce116cc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/tab.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/tab_selected.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/tab_selected.png new file mode 100644 index 0000000..e0cb16a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Base/images/tab_selected.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ApplicationWindowStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ApplicationWindowStyle.qml new file mode 100644 index 0000000..455cafb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ApplicationWindowStyle.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick.Controls.Styles 1.3 + +ApplicationWindowStyle { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/BusyIndicatorStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/BusyIndicatorStyle.qml new file mode 100644 index 0000000..b73729d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/BusyIndicatorStyle.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick.Controls.Styles 1.1 + +BusyIndicatorStyle { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ButtonStyle.qml new file mode 100644 index 0000000..21fc28b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ButtonStyle.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + property Component panel: StyleItem { + id: styleitem + elementType: "button" + sunken: control.pressed || (control.checkable && control.checked) + raised: !(control.pressed || (control.checkable && control.checked)) + hover: control.hovered + text: control.iconSource === "" ? "" : control.text + hasFocus: control.activeFocus + hints: control.styleHints + // If no icon, let the style do the drawing + activeControl: control.isDefault ? "default" : "f" + + properties: { + "icon": control.__iconAction.__icon, + "menu": control.menu + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/CalendarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/CalendarStyle.qml new file mode 100644 index 0000000..ec22f77 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/CalendarStyle.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick.Controls.Styles 1.1 + +CalendarStyle {} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/CheckBoxStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/CheckBoxStyle.qml new file mode 100644 index 0000000..7ed6869 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/CheckBoxStyle.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + property Component panel: Item { + anchors.fill: parent + + implicitWidth: styleitem.implicitWidth + implicitHeight: styleitem.implicitHeight + baselineOffset: styleitem.baselineOffset + StyleItem { + id: styleitem + elementType: "checkbox" + sunken: control.pressed + on: control.checked || control.pressed + hover: control.hovered + enabled: control.enabled + hasFocus: control.activeFocus && styleitem.style == "mac" + hints: control.styleHints + properties: {"partiallyChecked": (control.checkedState === Qt.PartiallyChecked) } + contentHeight: textitem.implicitHeight + contentWidth: Math.ceil(textitem.implicitWidth) + 4 + property int indicatorWidth: pixelMetric("indicatorwidth") + (macStyle ? 2 : 4) + property bool macStyle: (style === "mac") + + Text { + id: textitem + text: control.text + anchors.left: parent.left + anchors.leftMargin: parent.indicatorWidth + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: parent.macStyle ? 1 : 0 + anchors.right: parent.right + renderType: Text.NativeRendering + elide: Text.ElideRight + enabled: control.enabled + color: SystemPaletteSingleton.windowText(control.enabled) + StyleItem { + elementType: "focusrect" + anchors.margins: -1 + anchors.leftMargin: -2 + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + width: textitem.implicitWidth + 3 + visible: control.activeFocus + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ComboBoxStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ComboBoxStyle.qml new file mode 100644 index 0000000..cd5ce47 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ComboBoxStyle.qml @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Window 2.1 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import "." as Desktop + +Style { + readonly property ComboBox control: __control + property int renderType: Text.NativeRendering + padding { top: 4 ; left: 6 ; right: 6 ; bottom:4 } + property Component panel: Item { + property bool popup: !!styleItem.styleHint("comboboxpopup") + property color textColor: SystemPaletteSingleton.text(control.enabled) + property color selectionColor: SystemPaletteSingleton.highlight(control.enabled) + property color selectedTextColor: SystemPaletteSingleton.highlightedText(control.enabled) + property int dropDownButtonWidth: 24 + + implicitWidth: 125 + implicitHeight: styleItem.implicitHeight + baselineOffset: styleItem.baselineOffset + anchors.fill: parent + StyleItem { + id: styleItem + + height: parent.height + width: parent.width + elementType: "combobox" + sunken: control.pressed + raised: !sunken + hover: control.hovered + enabled: control.enabled + // The style makes sure the text rendering won't overlap the decoration. + // In that case, 35 pixels margin in this case looks good enough. Worst + // case, the ellipsis will be truncated (2nd worst, not visible at all). + text: elidedText(control.currentText, Text.ElideRight, parent.width - 35) + hasFocus: control.activeFocus + // contentHeight as in QComboBox + contentHeight: Math.max(Math.ceil(textHeight("")), 14) + 2 + + hints: control.styleHints + properties: { + "popup": control.__popup, + "editable" : control.editable + } + } + } + + property Component __popupStyle: MenuStyle { + __menuItemType: "comboboxitem" + } + + property Component __dropDownStyle: Style { + id: dropDownStyleRoot + property int __maxPopupHeight: 600 + property int submenuOverlap: 0 + property int submenuPopupDelay: 0 + + property Component frame: StyleItem { + elementType: "frame" + Component.onCompleted: { + var defaultFrameWidth = pixelMetric("defaultframewidth") + dropDownStyleRoot.padding.left = defaultFrameWidth + dropDownStyleRoot.padding.right = defaultFrameWidth + dropDownStyleRoot.padding.top = defaultFrameWidth + dropDownStyleRoot.padding.bottom = defaultFrameWidth + } + } + + property Component menuItemPanel: StyleItem { + elementType: "itemrow" + selected: styleData.selected + + implicitWidth: textItem.implicitWidth + implicitHeight: textItem.implicitHeight + + StyleItem { + id: textItem + elementType: "item" + contentWidth: textWidth(text) + contentHeight: textHeight(text) + text: styleData.text + selected: parent ? parent.selected : false + } + } + + property Component __scrollerStyle: Desktop.ScrollViewStyle { } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/FocusFrameStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/FocusFrameStyle.qml new file mode 100644 index 0000000..59f52e6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/FocusFrameStyle.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype FocusFrameStyle + \internal + \inqmlmodule QtQuick.Controls.Styles +*/ +StyleItem { + property int margin: -3 + anchors.fill: parent + elementType: "focusframe" +} + + diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/GroupBoxStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/GroupBoxStyle.qml new file mode 100644 index 0000000..b312893 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/GroupBoxStyle.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + + +Style { + readonly property GroupBox control: __control + + property var __style: StyleItem { id: style } + property int titleHeight: 18 + + Component.onCompleted: { + var stylename = __style.style + if (stylename.indexOf("windows") > -1) + titleHeight = 9 + } + + padding { + top: Math.round(Settings.dpiScaleFactor * (control.title.length > 0 || control.checkable ? titleHeight : 0) + (style.style == "mac" ? 9 : 6)) + left: Math.round(Settings.dpiScaleFactor * 8) + right: Math.round(Settings.dpiScaleFactor * 8) + bottom: Math.round(Settings.dpiScaleFactor * 7 + (style.style.indexOf("windows") > -1 ? 2 : 0)) + } + + property Component panel: StyleItem { + anchors.fill: parent + id: styleitem + elementType: "groupbox" + text: control.title + on: control.checked + hasFocus: control.__checkbox.activeFocus + activeControl: control.checkable ? "checkbox" : "" + properties: { "checkable" : control.checkable , "sunken" : !control.flat} + border {top: 32 ; bottom: 8} + Accessible.role: Accessible.Grouping + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/MenuBarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/MenuBarStyle.qml new file mode 100644 index 0000000..8e517c8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/MenuBarStyle.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import "." as Desktop + +Style { + id: styleRoot + + property Component background: StyleItem { + elementType: "menubar" + + Component.onCompleted: { + styleRoot.padding.left = pixelMetric("menubarhmargin") + pixelMetric("menubarpanelwidth") + styleRoot.padding.right = pixelMetric("menubarhmargin") + pixelMetric("menubarpanelwidth") + styleRoot.padding.top = pixelMetric("menubarvmargin") + pixelMetric("menubarpanelwidth") + styleRoot.padding.bottom = pixelMetric("menubarvmargin") + pixelMetric("menubarpanelwidth") + } + } + + property Component itemDelegate: StyleItem { + elementType: "menubaritem" + + text: styleData.text + property string plainText: StyleHelpers.removeMnemonics(text) + contentWidth: textWidth(plainText) + contentHeight: textHeight(plainText) + width: implicitWidth + + enabled: styleData.enabled + sunken: styleData.open + selected: (parent && styleData.selected) || sunken + + hints: { "showUnderlined": styleData.underlineMnemonic } + } + + property Component menuStyle: Desktop.MenuStyle { } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/MenuStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/MenuStyle.qml new file mode 100644 index 0000000..282860a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/MenuStyle.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Window 2.1 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + id: styleRoot + + property string __menuItemType: "menuitem" + + property int submenuOverlap: 0 + property int submenuPopupDelay: 0 + property int __maxPopupHeight: 0 + + property Component frame: StyleItem { + elementType: "menu" + + Rectangle { + visible: anchors.margins > 0 + anchors { + fill: parent + margins: pixelMetric("menupanelwidth") + } + color: SystemPaletteSingleton.window(control.enabled) + } + + Component.onCompleted: { + var menuHMargin = pixelMetric("menuhmargin") + var menuVMargin = pixelMetric("menuvmargin") + var menuPanelWidth = pixelMetric("menupanelwidth") + styleRoot.padding.left = menuHMargin + menuPanelWidth + styleRoot.padding.right = menuHMargin + menuPanelWidth + styleRoot.padding.top = menuVMargin + menuPanelWidth + styleRoot.padding.bottom = menuVMargin + menuPanelWidth + styleRoot.submenuOverlap = 2 * menuPanelWidth + styleRoot.submenuPopupDelay = styleHint("submenupopupdelay") + } + + // ### The Screen attached property can only be set on an Item, + // ### and will get its values only when put on a Window. + readonly property int desktopAvailableHeight: Screen.desktopAvailableHeight + Qml.Binding { + target: styleRoot + property: "__maxPopupHeight" + value: desktopAvailableHeight * 0.99 + restoreMode: Binding.RestoreBinding + } + } + + property Component menuItemPanel: StyleItem { + elementType: __menuItemType + + text: styleData.text + property string textAndShorcut: text + (styleData.shortcut ? "\t" + styleData.shortcut : "") + contentWidth: textWidth(textAndShorcut) + contentHeight: textHeight(textAndShorcut) + + enabled: styleData.enabled + selected: styleData.selected + on: styleData.checkable && styleData.checked + + hints: { "showUnderlined": styleData.underlineMnemonic } + + properties: { + "checkable": styleData.checkable, + "exclusive": styleData.exclusive, + "shortcut": styleData.shortcut, + "type": styleData.type, + "scrollerDirection": styleData.scrollerDirection, + "icon": !!__menuItem && __menuItem.__icon + } + } + + property Component scrollIndicator: menuItemPanel + + property Component __scrollerStyle: null +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ProgressBarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ProgressBarStyle.qml new file mode 100644 index 0000000..aa44b1a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ProgressBarStyle.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + property Component panel: StyleItem { + anchors.fill: parent + elementType: "progressbar" + // XXX: since desktop uses int instead of real, the progressbar + // range [0..1] must be stretched to a good precision + property int factor : 1000 + property int decimals: 3 + value: indeterminate ? 0 : control.value.toFixed(decimals) * factor // does indeterminate value need to be 1 on windows? + minimum: indeterminate ? 0 : control.minimumValue.toFixed(decimals) * factor + maximum: indeterminate ? 0 : control.maximumValue.toFixed(decimals) * factor + enabled: control.enabled + horizontal: control.orientation === Qt.Horizontal + hints: control.styleHints + contentWidth: horizontal ? 200 : 23 + contentHeight: horizontal ? 23 : 200 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/RadioButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/RadioButtonStyle.qml new file mode 100644 index 0000000..c217387 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/RadioButtonStyle.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + readonly property RadioButton control: __control + property Component panel: Item { + anchors.fill: parent + + implicitWidth: styleitem.implicitWidth + implicitHeight: styleitem.implicitHeight + baselineOffset: styleitem.baselineOffset + + StyleItem { + id: styleitem + elementType: "radiobutton" + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: macStyle ? -1 : 0 + sunken: control.pressed + on: control.checked || control.pressed + hover: control.hovered + enabled: control.enabled + hasFocus: control.activeFocus && styleitem.style == "mac" + hints: control.styleHints + contentHeight: textitem.implicitHeight + contentWidth: Math.ceil(textitem.implicitWidth) + 4 + property int indicatorWidth: pixelMetric("indicatorwidth") + (macStyle ? 2 : 4) + property bool macStyle: (style === "mac") + + Text { + id: textitem + text: control.text + anchors.left: parent.left + anchors.leftMargin: parent.indicatorWidth + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: parent.macStyle ? 2 : 0 + anchors.right: parent.right + renderType: Text.NativeRendering + elide: Text.ElideRight + enabled: control.enabled + color: SystemPaletteSingleton.windowText(control.enabled) + StyleItem { + elementType: "focusrect" + anchors.margins: -1 + anchors.leftMargin: -2 + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + width: textitem.implicitWidth + 3 + visible: control.activeFocus + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/RowItemSingleton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/RowItemSingleton.qml new file mode 100644 index 0000000..5fd6e32 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/RowItemSingleton.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +pragma Singleton +import QtQuick.Controls.Private 1.0 +StyleItem { + elementType: "itemrow" +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ScrollViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ScrollViewStyle.qml new file mode 100644 index 0000000..d867738 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ScrollViewStyle.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + id: root + + padding { + property int frameWidth: __styleitem.pixelMetric("defaultframewidth") + left: frameWidth + top: frameWidth + bottom: frameWidth + right: frameWidth + } + + property StyleItem __styleitem: StyleItem { elementType: "frame" } + + property Component frame: StyleItem { + id: styleitem + elementType: "frame" + sunken: true + visible: control.frameVisible + textureHeight: 64 + textureWidth: 64 + border { + top: 16 + left: 16 + right: 16 + bottom: 16 + } + } + + property Component corner: StyleItem { elementType: "scrollareacorner" } + + readonly property bool __externalScrollBars: __styleitem.styleHint("externalScrollBars") + readonly property int __scrollBarSpacing: __styleitem.pixelMetric("scrollbarspacing") + readonly property bool scrollToClickedPosition: __styleitem.styleHint("scrollToClickPosition") !== 0 + property bool transientScrollBars: false + + readonly property int __wheelScrollLines: __styleitem.styleHint("wheelScrollLines") + + property Component __scrollbar: StyleItem { + anchors.fill:parent + elementType: "scrollbar" + hover: activeControl != "none" + activeControl: "none" + sunken: __styleData.upPressed | __styleData.downPressed | __styleData.handlePressed + minimum: __control.minimumValue + maximum: __control.maximumValue + value: __control.value + horizontal: __styleData.horizontal + enabled: __control.enabled + + implicitWidth: horizontal ? 200 : pixelMetric("scrollbarExtent") + implicitHeight: horizontal ? pixelMetric("scrollbarExtent") : 200 + + onIsTransientChanged: root.transientScrollBars = isTransient + } + +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SliderStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SliderStyle.qml new file mode 100644 index 0000000..bba9d54 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SliderStyle.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + readonly property Item control: __control + property Component panel: StyleItem { + elementType: "slider" + sunken: control.pressed + implicitWidth: 200 + contentHeight: horizontal ? 22 : 200 + contentWidth: horizontal ? 200 : 22 + + maximum: control.maximumValue*100 + minimum: control.minimumValue*100 + step: control.stepSize*100 + value: control.__handlePos*100 + horizontal: control.orientation === Qt.Horizontal + enabled: control.enabled + hasFocus: control.activeFocus + hover: control.hovered + hints: control.styleHints + activeControl: control.tickmarksEnabled ? "ticks" : "" + property int handleWidth: 15 + property int handleHeight: 15 + } + padding { top: 0 ; left: 0 ; right: 0 ; bottom: 0 } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SpinBoxStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SpinBoxStyle.qml new file mode 100644 index 0000000..50e13ab --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SpinBoxStyle.qml @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + readonly property SpinBox control: __control + + padding { + top: control.__panel ? control.__panel.topPadding + (styleitem.style === "mac" ? 2 : 0) : 0 + left: control.__panel ? control.__panel.leftPadding : 0 + right: control.__panel ? control.__panel.rightPadding : 0 + bottom: control.__panel ? control.__panel.bottomPadding : 0 + } + StyleItem {id: styleitem ; visible: false} + + property int renderType: Text.NativeRendering + + property Component panel: Item { + id: style + + property rect upRect + property rect downRect + + property int horizontalAlignment: Qt.platform.os === "osx" ? Qt.AlignRight : Qt.AlignLeft + property int verticalAlignment: Qt.AlignVCenter + + property alias font: styleitem.font + + property color foregroundColor: SystemPaletteSingleton.text(control.enabled) + property color backgroundColor: SystemPaletteSingleton.base(control.enabled) + property color selectionColor: SystemPaletteSingleton.highlight(control.enabled) + property color selectedTextColor: SystemPaletteSingleton.highlightedText(control.enabled) + + property int topPadding: edit.anchors.topMargin + property int leftPadding: 3 + edit.anchors.leftMargin + property int rightPadding: 3 + edit.anchors.rightMargin + property int bottomPadding: edit.anchors.bottomMargin + + width: 100 + height: styleitem.implicitHeight + + implicitWidth: 2 + styleitem.implicitWidth + implicitHeight: styleitem.implicitHeight + baselineOffset: styleitem.baselineOffset + + Item { + id: edit + anchors.fill: parent + FocusFrame { + anchors.fill: parent + focusMargin:-6 + visible: spinbox.activeFocus && styleitem.styleHint("focuswidget") + } + } + + function updateRect() { + style.upRect = styleitem.subControlRect("up"); + style.downRect = styleitem.subControlRect("down"); + var inputRect = styleitem.subControlRect("edit"); + edit.anchors.topMargin = inputRect.y + edit.anchors.leftMargin = inputRect.x + edit.anchors.rightMargin = style.width - inputRect.width - edit.anchors.leftMargin + edit.anchors.bottomMargin = style.height - inputRect.height - edit.anchors.topMargin + } + + Component.onCompleted: updateRect() + onWidthChanged: updateRect() + onHeightChanged: updateRect() + + StyleItem { + id: styleitem + elementType: "spinbox" + anchors.fill: parent + sunken: (styleData.downEnabled && styleData.downPressed) || (styleData.upEnabled && styleData.upPressed) + hover: control.hovered + hints: control.styleHints + hasFocus: control.activeFocus + enabled: control.enabled + value: (styleData.upPressed ? 1 : 0) | + (styleData.downPressed ? 1<<1 : 0) | + (styleData.upEnabled ? (1<<2) : 0) | + (styleData.downEnabled ? (1<<3) : 0) + contentWidth: styleData.contentWidth + contentHeight: styleData.contentHeight + textureHeight: implicitHeight + border {top: 6 ; bottom: 6} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/StatusBarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/StatusBarStyle.qml new file mode 100644 index 0000000..744cff3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/StatusBarStyle.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype StatusBarStyle + \internal + \inqmlmodule QtQuick.Controls.Styles +*/ +Style { + + padding.left: 4 + padding.right: 4 + padding.top: 3 + padding.bottom: 2 + + property Component panel: StyleItem { + implicitHeight: 16 + implicitWidth: 200 + anchors.fill: parent + elementType: "statusbar" + textureWidth: 64 + border {left: 16 ; right: 16} + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SwitchStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SwitchStyle.qml new file mode 100644 index 0000000..719b633 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/SwitchStyle.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.1 + +SwitchStyle { +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TabViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TabViewStyle.qml new file mode 100644 index 0000000..c571e22 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TabViewStyle.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.1 +Style { + id: root + + property bool tabsMovable: false + property int tabsAlignment: __barstyle.styleHint("tabbaralignment") === "center" ? Qt.AlignHCenter : Qt.AlignLeft; + property int tabOverlap: __barstyle.pixelMetric("taboverlap"); + property int frameOverlap: __barstyle.pixelMetric("tabbaseoverlap"); + + property StyleItem __barstyle: StyleItem { + elementType: "tab" + properties: { "tabposition" : (control.tabPosition === Qt.TopEdge ? "Top" : "Bottom") } + visible: false + } + + property Component frame: StyleItem { + id: styleitem + anchors.fill: parent + anchors.topMargin: 1//stack.baseOverlap + z: style == "oxygen" ? 1 : 0 + elementType: "tabframe" + value: tabbarItem && tabsVisible && tabbarItem.tab(currentIndex) ? tabbarItem.tab(currentIndex).x : 0 + minimum: tabbarItem && tabsVisible && tabbarItem.tab(currentIndex) ? tabbarItem.tab(currentIndex).width : 0 + maximum: tabbarItem && tabsVisible ? tabbarItem.width : width + properties: { "selectedTabRect" : tabbarItem.__selectedTabRect, "orientation" : control.tabPosition } + hints: control.styleHints + Component.onCompleted: { + stack.frameWidth = styleitem.pixelMetric("defaultframewidth"); + stack.style = style; + } + border{ + top: 16 + bottom: 16 + } + textureHeight: 64 + } + + property Component tab: Item { + id: item + property string tabpos: control.count === 1 ? "only" : index === 0 ? "beginning" : index === control.count - 1 ? "end" : "middle" + property string selectedpos: styleData.nextSelected ? "next" : styleData.previousSelected ? "previous" : "" + property string orientation: control.tabPosition === Qt.TopEdge ? "Top" : "Bottom" + property int tabHSpace: __barstyle.pixelMetric("tabhspace"); + property int tabVSpace: __barstyle.pixelMetric("tabvspace"); + property int totalOverlap: tabOverlap * (control.count - 1) + property real maxTabWidth: control.count > 0 ? (control.width + totalOverlap) / control.count : 0 + implicitWidth: Math.min(maxTabWidth, Math.max(50, styleitem.textWidth(styleData.title)) + tabHSpace + 2) + implicitHeight: Math.max(styleitem.font.pixelSize + tabVSpace + 6, 0) + + StyleItem { + id: styleitem + + elementType: "tab" + paintMargins: style === "mac" ? 0 : 2 + + anchors.fill: parent + anchors.topMargin: style === "mac" ? 2 : 0 + anchors.rightMargin: -paintMargins + anchors.bottomMargin: -1 + anchors.leftMargin: -paintMargins + (style === "mac" && selected ? -1 : 0) + properties: { "hasFrame" : true, "orientation": orientation, "tabpos": tabpos, "selectedpos": selectedpos } + hints: control.styleHints + + enabled: styleData.enabled + selected: styleData.selected + text: elidedText(styleData.title, tabbarItem.elide, item.width - item.tabHSpace) + hover: styleData.hovered + hasFocus: tabbarItem.activeFocus && selected + } + } + + property Component leftCorner: null + property Component rightCorner: null +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TableViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TableViewStyle.qml new file mode 100644 index 0000000..6c008b3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TableViewStyle.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import "." + +ScrollViewStyle { + id: root + + readonly property BasicTableView control: __control + property int __indentation: 8 + property bool activateItemOnSingleClick: __styleitem.styleHint("activateItemOnSingleClick") + property color textColor: __styleitem.textColor + property color backgroundColor: SystemPaletteSingleton.base(control.enabled) + property color highlightedTextColor: __styleitem.highlightedTextColor + + property StyleItem __styleitem: StyleItem{ + property color textColor: styleHint("textColor") + property color highlightedTextColor: styleHint("highlightedTextColor") + elementType: "item" + visible: false + active: control.activeFocus + onActiveChanged: { + highlightedTextColor = styleHint("highlightedTextColor") + textColor = styleHint("textColor") + } + } + + property Component headerDelegate: StyleItem { + elementType: "header" + activeControl: itemSort + raised: true + sunken: styleData.pressed + text: styleData.value + hover: styleData.containsMouse + hints: control.styleHints + properties: {"headerpos": headerPosition, "textalignment": styleData.textAlignment} + property string itemSort: (control.sortIndicatorVisible && styleData.column === control.sortIndicatorColumn) ? (control.sortIndicatorOrder == Qt.AscendingOrder ? "up" : "down") : ""; + property string headerPosition: !styleData.resizable && control.columnCount === 1 ? "only" : + !styleData.resizable && styleData.column === control.columnCount-1 ? "end" : + styleData.column === 0 ? "beginning" : "" + } + + property Component rowDelegate: BorderImage { + visible: styleData.selected || styleData.alternate + source: "image://__tablerow/" + (styleData.alternate ? "alternate_" : "") + + (styleData.selected ? "selected_" : "") + + (control.activeFocus ? "active" : "") + height: Math.max(16, RowItemSingleton.implicitHeight) + border.left: 4 ; border.right: 4 + } + + property Component itemDelegate: Item { + height: Math.max(16, label.implicitHeight) + property int implicitWidth: label.implicitWidth + 16 + + Text { + id: label + objectName: "label" + width: parent.width + font: __styleitem.font + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: styleData.hasOwnProperty("depth") && styleData.column === 0 ? 0 : + horizontalAlignment === Text.AlignRight ? 1 : 8 + anchors.rightMargin: (styleData.hasOwnProperty("depth") && styleData.column === 0) + || horizontalAlignment !== Text.AlignRight ? 1 : 8 + horizontalAlignment: styleData.textAlignment + anchors.verticalCenter: parent.verticalCenter + elide: styleData.elideMode + text: styleData.value !== undefined ? styleData.value : "" + color: styleData.textColor + renderType: Text.NativeRendering + } + } + + property Component __branchDelegate: null +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TextAreaStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TextAreaStyle.qml new file mode 100644 index 0000000..8a39f8a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TextAreaStyle.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +ScrollViewStyle { + property font font: __styleitem.font + property color textColor: SystemPaletteSingleton.text(control.enabled) + property color selectionColor: SystemPaletteSingleton.highlight(control.enabled) + property color selectedTextColor: SystemPaletteSingleton.highlightedText(control.enabled) + property color backgroundColor: control.backgroundVisible ? SystemPaletteSingleton.base(control.enabled) : "transparent" + + property StyleItem __styleitem: StyleItem{ + elementType: "edit" + visible: false + active: control.activeFocus + } + + property int renderType: Text.NativeRendering + property real textMargin: 4 +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TextFieldStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TextFieldStyle.qml new file mode 100644 index 0000000..fd58d34 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TextFieldStyle.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + property int renderType: Text.NativeRendering + + property Component panel: StyleItem { + id: textfieldstyle + elementType: "edit" + anchors.fill: parent + + sunken: true + hasFocus: control.activeFocus + hover: hovered + hints: control.styleHints + + property color textColor: SystemPaletteSingleton.text(control.enabled) + property color placeholderTextColor: "darkGray" + property color selectionColor: SystemPaletteSingleton.highlight(control.enabled) + property color selectedTextColor: SystemPaletteSingleton.highlightedText(control.enabled) + + + property bool rounded: !!hints["rounded"] + property int topMargin: style === "mac" ? 3 : 2 + property int leftMargin: rounded ? 12 : 4 + property int rightMargin: leftMargin + property int bottomMargin: 2 + + contentWidth: 100 + // Form QLineEdit::sizeHint + contentHeight: Math.max(control.__contentHeight, 16) + + FocusFrame { + anchors.fill: parent + visible: textfield.activeFocus && textfieldstyle.styleHint("focuswidget") && !rounded + } + textureHeight: implicitHeight + textureWidth: 32 + border {top: 8 ; bottom: 8 ; left: 8 ; right: 8} + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ToolBarStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ToolBarStyle.qml new file mode 100644 index 0000000..fe1840a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ToolBarStyle.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype StatusBarStyle + \internal + \inqmlmodule QtQuick.Controls.Styles +*/ +Style { + + padding.left: 6 + padding.right: 6 + padding.top: 1 + padding.bottom: style.style === "mac" ? 1 : style.style === "fusion" ? 3 : 2 + + StyleItem { id: style ; visible: false} + + property Component panel: StyleItem { + id: toolbar + anchors.fill: parent + elementType: "toolbar" + textureWidth: 64 + border {left: 16 ; right: 16} + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ToolButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ToolButtonStyle.qml new file mode 100644 index 0000000..a4e1546 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/ToolButtonStyle.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +Style { + property Component panel: StyleItem { + id: styleitem + + anchors.fill: parent + elementType: "toolbutton" + on: control.checkable && control.checked + sunken: control.pressed + raised: !(control.checkable && control.checked) && control.hovered + hover: control.hovered + hasFocus: control.activeFocus + hints: control.styleHints + text: control.text + + properties: { + "icon": control.__iconAction.__icon, + "position": control.__position, + "menu" : control.menu !== null + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TreeViewStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TreeViewStyle.qml new file mode 100644 index 0000000..3ec6073 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/TreeViewStyle.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Private 1.0 +import "." as Desktop + +Desktop.TableViewStyle { + id: root + + __indentation: 12 + + __branchDelegate: StyleItem { + id: si + elementType: "itembranchindicator" + properties: { + "hasChildren": styleData.hasChildren, + "hasSibling": styleData.hasSibling && !styleData.isExpanded + } + on: styleData.isExpanded + selected: styleData.selected + hasFocus: __styleitem.active + + Component.onCompleted: { + root.__indentation = si.pixelMetric("treeviewindentation") + implicitWidth = root.__indentation + implicitHeight = implicitWidth + var rect = si.subControlRect("dummy"); + width = rect.width + height = rect.height + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/qmldir new file mode 100644 index 0000000..1b69187 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Desktop/qmldir @@ -0,0 +1,2 @@ +singleton RowItemSingleton 1.0 RowItemSingleton.qml +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Flat/libqtquickextrasflatplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Flat/libqtquickextrasflatplugin.so new file mode 100755 index 0000000..55ae47e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Flat/libqtquickextrasflatplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Flat/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Flat/plugins.qmltypes new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Flat/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Flat/qmldir new file mode 100644 index 0000000..2fe4922 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/Flat/qmldir @@ -0,0 +1,4 @@ +module QtQuick.Controls.Styles.Flat +plugin qtquickextrasflatplugin +classname QtQuickExtrasStylesPlugin +depends QtQml 2.14 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/qmldir new file mode 100644 index 0000000..4b2f984 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Styles/qmldir @@ -0,0 +1,38 @@ +module QtQuick.Controls.Styles +ApplicationWindowStyle 1.3 Base/ApplicationWindowStyle.qml +ButtonStyle 1.0 Base/ButtonStyle.qml +BusyIndicatorStyle 1.1 Base/BusyIndicatorStyle.qml +CalendarStyle 1.1 Base/CalendarStyle.qml +CheckBoxStyle 1.0 Base/CheckBoxStyle.qml +ComboBoxStyle 1.0 Base/ComboBoxStyle.qml +MenuStyle 1.2 Base/MenuStyle.qml +MenuBarStyle 1.2 Base/MenuBarStyle.qml +ProgressBarStyle 1.0 Base/ProgressBarStyle.qml +RadioButtonStyle 1.0 Base/RadioButtonStyle.qml +ScrollViewStyle 1.0 Base/ScrollViewStyle.qml +SliderStyle 1.0 Base/SliderStyle.qml +SpinBoxStyle 1.1 Base/SpinBoxStyle.qml +SwitchStyle 1.1 Base/SwitchStyle.qml +TabViewStyle 1.0 Base/TabViewStyle.qml +TableViewStyle 1.0 Base/TableViewStyle.qml +TreeViewStyle 1.4 Base/TreeViewStyle.qml +TextAreaStyle 1.1 Base/TextAreaStyle.qml +TextFieldStyle 1.0 Base/TextFieldStyle.qml +ToolBarStyle 1.0 Base/ToolBarStyle.qml +StatusBarStyle 1.0 Base/StatusBarStyle.qml + +CircularGaugeStyle 1.0 Base/CircularGaugeStyle.qml +CircularButtonStyle 1.0 Base/CircularButtonStyle.qml +CircularTickmarkLabelStyle 1.0 Base/CircularTickmarkLabelStyle.qml +CommonStyleHelper 1.0 Base/CommonStyleHelper.qml +DelayButtonStyle 1.0 Base/DelayButtonStyle.qml +DialStyle 1.1 Base/DialStyle.qml +GaugeStyle 1.0 Base/GaugeStyle.qml +HandleStyle 1.0 Base/HandleStyle.qml +HandleStyleHelper 1.0 Base/HandleStyleHelper.qml +PieMenuStyle 1.3 Base/PieMenuStyle.qml +StatusIndicatorStyle 1.1 Base/StatusIndicatorStyle.qml +ToggleButtonStyle 1.0 Base/ToggleButtonStyle.qml +TumblerStyle 1.2 Base/TumblerStyle.qml + +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Switch.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Switch.qml new file mode 100644 index 0000000..b33f7d0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Switch.qml @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype Switch + \inqmlmodule QtQuick.Controls + \since 5.2 + \ingroup controls + \brief A switch. + + \image switch.png + \caption On and Off states of a Switch. + + A Switch is a toggle button that can be switched on (checked) or off + (unchecked). Switches are typically used to represent features in an + application that can be enabled or disabled without affecting others. + + On mobile platforms, switches are commonly used to enable or disable + features. + + \qml + Column { + Switch { checked: true } + Switch { checked: false } + } + \endqml + + You can create a custom appearance for a Switch by + assigning a \l {SwitchStyle}. +*/ + +Control { + id: root + + /*! + This property is \c true if the control is checked. + The default value is \c false. + */ + property bool checked: false + + /*! + \qmlproperty bool Switch::pressed + \since QtQuick.Controls 1.3 + + This property is \c true when the control is pressed. + */ + readonly property alias pressed: internal.pressed + + /*! + This property is \c true if the control takes the focus when it is + pressed; \l{QQuickItem::forceActiveFocus()}{forceActiveFocus()} will be + called on the control. + */ + property bool activeFocusOnPress: false + + /*! + This property stores the ExclusiveGroup that the control belongs to. + */ + property ExclusiveGroup exclusiveGroup: null + + /*! + \since QtQuick.Controls 1.3 + + This signal is emitted when the control is clicked. + */ + signal clicked + + Keys.onPressed: { + if (event.key === Qt.Key_Space && !event.isAutoRepeat) + checked = !checked; + } + + /*! \internal */ + onExclusiveGroupChanged: { + if (exclusiveGroup) + exclusiveGroup.bindCheckable(root) + } + + MouseArea { + id: internal + + property Item handle: __panel.__handle + property int min: __panel.min + property int max: __panel.max + focus: true + anchors.fill: parent + drag.threshold: 0 + drag.target: handle + drag.axis: Drag.XAxis + drag.minimumX: min + drag.maximumX: max + + onPressed: { + if (activeFocusOnPress) + root.forceActiveFocus() + } + + onReleased: { + if (drag.active) { + checked = (handle.x < max/2) ? false : true; + internal.handle.x = checked ? internal.max : internal.min + } else { + checked = (handle.x === max) ? false : true + } + } + + onClicked: root.clicked() + } + + onCheckedChanged: { + if (internal.handle) + internal.handle.x = checked ? internal.max : internal.min + } + + activeFocusOnTab: true + Accessible.role: Accessible.CheckBox + Accessible.name: "switch" + + /*! + The style that should be applied to the switch. Custom style + components can be created with: + + \codeline Qt.createComponent("path/to/style.qml", switchId); + */ + style: Settings.styleComponent(Settings.style, "SwitchStyle.qml", root) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Tab.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Tab.qml new file mode 100644 index 0000000..657d389 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/Tab.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +/*! + \qmltype Tab + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup viewaddons + \ingroup controls + \brief Tab represents the content of a tab in a TabView. + + A Tab item inherits from Loader and provides a similar + API. + + Tabs are lazily loaded; only tabs that have been made current (for example, + by clicking on them) will have valid content. You can force loading of tabs + by setting the active property to \c true: + + \code + Tab { + active: true + } + \endcode + + \sa TabView +*/ + +Loader { + id: tab + anchors.fill: parent + + /*! This property holds the title of the tab. */ + property string title + + /*! \internal */ + property bool __inserted: false + + Accessible.role: Accessible.LayeredPane + active: false + visible: false + + activeFocusOnTab: false + + onVisibleChanged: if (visible) active = true + + /*! \internal */ + default property alias component: tab.sourceComponent +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TabView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TabView.qml new file mode 100644 index 0000000..2579636 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TabView.qml @@ -0,0 +1,329 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype TabView + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup views + \ingroup controls + \brief A control that allows the user to select one of multiple stacked items. + + \image tabview.png + + TabView provides tab-based navigation model for your application. + For example, the following snippet uses tabs to present rectangles of + different color on each tab page: + + \qml + TabView { + Tab { + title: "Red" + Rectangle { color: "red" } + } + Tab { + title: "Blue" + Rectangle { color: "blue" } + } + Tab { + title: "Green" + Rectangle { color: "green" } + } + } + \endqml + + \note You can create a custom appearance for a TabView by + assigning a \l {TabViewStyle}. + + \l Tab represents the content of a tab in a TabView. +*/ + +FocusScope { + id: root + + implicitWidth: 240 + implicitHeight: 150 + + /*! The current tab index */ + property int currentIndex: 0 + + /*! The current tab count */ + readonly property int count: __tabs.count + + /*! The visibility of the tab frame around contents */ + property bool frameVisible: true + + /*! The visibility of the tab bar */ + property bool tabsVisible: true + + /*! + \qmlproperty enumeration TabView::tabPosition + + \list + \li Qt.TopEdge (default) + \li Qt.BottomEdge + \endlist + */ + property int tabPosition: Qt.TopEdge + + /*! + \qmlproperty Item TabView::contentItem + \since QtQuick.Controls 1.3 + + This property holds the content item of the tab view. + + Tabs declared as children of a TabView are automatically parented to the TabView's contentItem. + */ + readonly property alias contentItem: stack + + /*! \internal */ + default property alias data: stack.data + + /*! + \qmlmethod Tab TabView::addTab(string title, Component component) + + Adds a new tab with the given \a title and an optional \a component. + + Returns the newly added tab. + */ + function addTab(title, component) { + return insertTab(__tabs.count, title, component) + } + + /*! + \qmlmethod Tab TabView::insertTab(int index, string title, Component component) + + Inserts a new tab at \a index, with the given \a title and + an optional \a component. + + Returns the newly added tab. + */ + function insertTab(index, title, component) { + var tab = tabcomp.createObject() + tab.sourceComponent = component + tab.title = title + // insert at appropriate index first, then set the parent to + // avoid onChildrenChanged appending it to the end of the list + __tabs.insert(index, {tab: tab}) + tab.__inserted = true + tab.parent = stack + __didInsertIndex(index) + __setOpacities() + return tab + } + + /*! \qmlmethod void TabView::removeTab(int index) + Removes and destroys a tab at the given \a index. */ + function removeTab(index) { + var tab = __tabs.get(index).tab + __willRemoveIndex(index) + __tabs.remove(index, 1) + tab.destroy() + __setOpacities() + } + + /*! \qmlmethod void TabView::moveTab(int from, int to) + Moves a tab \a from index \a to another. */ + function moveTab(from, to) { + __tabs.move(from, to, 1) + + if (currentIndex == from) { + currentIndex = to + } else { + var start = Math.min(from, to) + var end = Math.max(from, to) + if (currentIndex >= start && currentIndex <= end) { + if (from < to) + --currentIndex + else + ++currentIndex + } + } + } + + /*! \qmlmethod Tab TabView::getTab(int index) + Returns the \l Tab item at \a index. */ + function getTab(index) { + var data = __tabs.get(index) + return data && data.tab + } + + /*! \internal */ + property ListModel __tabs: ListModel { } + + /*! \internal */ + property Component style: Settings.styleComponent(Settings.style, "TabViewStyle.qml", root) + + /*! \internal */ + property var __styleItem: loader.item + + onCurrentIndexChanged: __setOpacities() + + /*! \internal */ + function __willRemoveIndex(index) { + // Make sure currentIndex will points to the same tab after the removal. + // Also activate the next index if the current index is being removed, + // except when it's both the current and last index. + if (count > 1 && (currentIndex > index || currentIndex == count -1)) + --currentIndex + } + function __didInsertIndex(index) { + // Make sure currentIndex points to the same tab as before the insertion. + if (count > 1 && currentIndex >= index) + currentIndex++ + } + + function __setOpacities() { + for (var i = 0; i < __tabs.count; ++i) { + var child = __tabs.get(i).tab + child.visible = (i == currentIndex ? true : false) + } + } + + activeFocusOnTab: false + + Component { + id: tabcomp + Tab {} + } + + TabBar { + id: tabbarItem + objectName: "tabbar" + tabView: root + style: loader.item + anchors.top: parent.top + anchors.left: root.left + anchors.right: root.right + } + + Loader { + id: loader + z: tabbarItem.z - 1 + sourceComponent: style + property var __control: root + } + + Loader { + id: frameLoader + z: tabbarItem.z - 1 + + anchors.fill: parent + anchors.topMargin: tabPosition === Qt.TopEdge && tabbarItem && tabsVisible ? Math.max(0, tabbarItem.height - baseOverlap) : 0 + anchors.bottomMargin: tabPosition === Qt.BottomEdge && tabbarItem && tabsVisible ? Math.max(0, tabbarItem.height -baseOverlap) : 0 + sourceComponent: frameVisible && loader.item ? loader.item.frame : null + + property int baseOverlap: __styleItem ? __styleItem.frameOverlap : 0 + + Item { + id: stack + + anchors.fill: parent + anchors.margins: (frameVisible ? frameWidth : 0) + anchors.topMargin: anchors.margins + (style =="mac" ? 6 : 0) + anchors.bottomMargin: anchors.margins + + property int frameWidth + property string style + property bool completed: false + + Component.onCompleted: { + addTabs(stack.children) + completed = true + } + + onChildrenChanged: { + if (completed) + stack.addTabs(stack.children) + } + + function addTabs(tabs) { + var tabAdded = false + for (var i = 0 ; i < tabs.length ; ++i) { + var tab = tabs[i] + if (!tab.__inserted && tab.Accessible.role === Accessible.LayeredPane) { + tab.__inserted = true + // reparent tabs created dynamically by createObject(tabView) + tab.parent = stack + // a dynamically added tab should also get automatically removed when destructed + if (completed) + tab.Component.onDestruction.connect(stack.onDynamicTabDestroyed.bind(tab)) + __tabs.append({tab: tab}) + tabAdded = true + } + } + if (tabAdded) + __setOpacities() + } + + function onDynamicTabDestroyed() { + for (var i = 0; i < __tabs.count; ++i) { + if (__tabs.get(i).tab === this) { + __willRemoveIndex(i) + __tabs.remove(i, 1) + __setOpacities() + break + } + } + } + } + onLoaded: { item.z = -1 } + } + + onChildrenChanged: stack.addTabs(root.children) + + states: [ + State { + name: "Bottom" + when: tabPosition === Qt.BottomEdge && tabbarItem != undefined + PropertyChanges { + target: tabbarItem + anchors.topMargin: -frameLoader.baseOverlap + } + AnchorChanges { + target: tabbarItem + anchors.top: frameLoader.bottom + } + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TableView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TableView.qml new file mode 100644 index 0000000..1dbdafd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TableView.qml @@ -0,0 +1,319 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.3 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Window 2.1 + +BasicTableView { + id: root + + property var model + + readonly property int rowCount: __listView.count + property alias currentRow: root.__currentRow + + signal activated(int row) + signal clicked(int row) + signal doubleClicked(int row) + signal pressAndHold(int row) + + function positionViewAtRow(row, mode) { + __listView.positionViewAtIndex(row, mode) + } + + function rowAt(x, y) { + var obj = root.mapToItem(__listView.contentItem, x, y) + return __listView.indexAt(obj.x, obj.y) + } + + readonly property alias selection: selectionObject + + style: Settings.styleComponent(Settings.style, "TableViewStyle.qml", root) + + Accessible.role: Accessible.Table + + // Internal stuff. Do not look + + onModelChanged: selection.clear() + + __viewTypeName: "TableView" + __model: model + + __itemDelegateLoader: TableViewItemDelegateLoader { + __style: root.__style + __itemDelegate: root.itemDelegate + __mouseArea: mousearea + } + + __mouseArea: MouseArea { + id: mousearea + + parent: __listView + width: __listView.width + height: __listView.height + z: -1 + propagateComposedEvents: true + focus: true + + property bool autoincrement: false + property bool autodecrement: false + property int previousRow: 0 + property int clickedRow: -1 + property int dragRow: -1 + property int firstKeyRow: -1 + property int pressedRow: -1 + property int pressedColumn: -1 + + TableViewSelection { + id: selectionObject + } + + function selected(rowIndex) { + if (dragRow > -1 && (rowIndex >= clickedRow && rowIndex <= dragRow + || rowIndex <= clickedRow && rowIndex >= dragRow)) + return selection.contains(clickedRow) + + return selection.count && selection.contains(rowIndex) + } + + onReleased: { + pressedRow = -1 + pressedColumn = -1 + autoincrement = false + autodecrement = false + var clickIndex = __listView.indexAt(0, mouseY + __listView.contentY) + if (clickIndex > -1) { + if (Settings.hasTouchScreen) { + __listView.currentIndex = clickIndex + mouseSelect(clickIndex, mouse.modifiers) + } + previousRow = clickIndex + } + + if (mousearea.dragRow >= 0) { + selection.__select(selection.contains(mousearea.clickedRow), mousearea.clickedRow, mousearea.dragRow) + mousearea.dragRow = -1 + } + } + + function decrementCurrentIndex() { + __listView.decrementCurrentIndexBlocking(); + + var newIndex = __listView.indexAt(0, __listView.contentY) + if (newIndex !== -1) { + if (selectionMode > SelectionMode.SingleSelection) + mousearea.dragRow = newIndex + else if (selectionMode === SelectionMode.SingleSelection) + selection.__selectOne(newIndex) + } + } + + function incrementCurrentIndex() { + __listView.incrementCurrentIndexBlocking(); + + var newIndex = Math.max(0, __listView.indexAt(0, __listView.height + __listView.contentY)) + if (newIndex !== -1) { + if (selectionMode > SelectionMode.SingleSelection) + mousearea.dragRow = newIndex + else if (selectionMode === SelectionMode.SingleSelection) + selection.__selectOne(newIndex) + } + } + + // Handle vertical scrolling whem dragging mouse outside boundraries + Timer { + running: mousearea.autoincrement && __verticalScrollBar.visible + repeat: true + interval: 20 + onTriggered: mousearea.incrementCurrentIndex() + } + + Timer { + running: mousearea.autodecrement && __verticalScrollBar.visible + repeat: true + interval: 20 + onTriggered: mousearea.decrementCurrentIndex() + } + + onPositionChanged: { + if (mouseY > __listView.height && pressed) { + if (autoincrement) return; + autodecrement = false; + autoincrement = true; + } else if (mouseY < 0 && pressed) { + if (autodecrement) return; + autoincrement = false; + autodecrement = true; + } else { + autoincrement = false; + autodecrement = false; + } + + if (pressed && containsMouse) { + pressedRow = Math.max(0, __listView.indexAt(0, mouseY + __listView.contentY)) + pressedColumn = __listView.columnAt(mouseX) + if (!Settings.hasTouchScreen) { + if (pressedRow >= 0 && pressedRow !== currentRow) { + __listView.currentIndex = pressedRow; + if (selectionMode === SelectionMode.SingleSelection) { + selection.__selectOne(pressedRow) + } else if (selectionMode > 1) { + dragRow = pressedRow + } + } + } + } + } + + onClicked: { + var clickIndex = __listView.indexAt(0, mouseY + __listView.contentY) + if (clickIndex > -1) { + if (root.__activateItemOnSingleClick) + root.activated(clickIndex) + root.clicked(clickIndex) + } + } + + onPressed: { + pressedRow = __listView.indexAt(0, mouseY + __listView.contentY) + pressedColumn = __listView.columnAt(mouseX) + __listView.forceActiveFocus() + if (pressedRow > -1 && !Settings.hasTouchScreen) { + __listView.currentIndex = pressedRow + mouseSelect(pressedRow, mouse.modifiers) + mousearea.clickedRow = pressedRow + } + } + + onExited: { + mousearea.pressedRow = -1 + mousearea.pressedColumn = -1 + } + + onCanceled: { + mousearea.pressedRow = -1 + mousearea.pressedColumn = -1 + } + + function mouseSelect(index, modifiers) { + if (selectionMode) { + if (modifiers & Qt.ShiftModifier && (selectionMode === SelectionMode.ExtendedSelection)) { + selection.select(previousRow, index) + } else if (selectionMode === SelectionMode.MultiSelection || + (selectionMode === SelectionMode.ExtendedSelection && modifiers & Qt.ControlModifier)) { + selection.__select(!selection.contains(index) , index) + } else { + selection.__selectOne(index) + } + } + } + + onDoubleClicked: { + var clickIndex = __listView.indexAt(0, mouseY + __listView.contentY) + if (clickIndex > -1) { + if (!root.__activateItemOnSingleClick) + root.activated(clickIndex) + root.doubleClicked(clickIndex) + } + } + + onPressAndHold: { + var pressIndex = __listView.indexAt(0, mouseY + __listView.contentY) + if (pressIndex > -1) + root.pressAndHold(pressIndex) + } + + // Note: with boolean preventStealing we are keeping the flickable from + // eating our mouse press events + preventStealing: !Settings.hasTouchScreen + + function keySelect(shiftPressed, row) { + if (row < 0 || row > rowCount - 1) + return + if (shiftPressed && (selectionMode >= SelectionMode.ExtendedSelection)) { + selection.__ranges = new Array() + selection.select(mousearea.firstKeyRow, row) + } else { + selection.__selectOne(row) + } + } + + Keys.forwardTo: [root] + + Keys.onUpPressed: { + event.accepted = __listView.decrementCurrentIndexBlocking() + if (selectionMode) + keySelect(event.modifiers & Qt.ShiftModifier, currentRow) + } + + Keys.onDownPressed: { + event.accepted = __listView.incrementCurrentIndexBlocking() + if (selectionMode) + keySelect(event.modifiers & Qt.ShiftModifier, currentRow) + } + + Keys.onPressed: { + __listView.scrollIfNeeded(event.key) + + if (event.key === Qt.Key_Shift) { + firstKeyRow = currentRow + } + + if (event.key === Qt.Key_A && event.modifiers & Qt.ControlModifier) { + if (selectionMode > 1) + selection.selectAll() + } + } + + Keys.onReleased: { + if (event.key === Qt.Key_Shift) + firstKeyRow = -1 + } + + Keys.onReturnPressed: { + if (currentRow > -1) + root.activated(currentRow); + else + event.accepted = false + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TableViewColumn.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TableViewColumn.qml new file mode 100644 index 0000000..9fa05b3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TableViewColumn.qml @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +/*! + \qmltype TableViewColumn + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup viewitems + \ingroup controls + \brief Used to define columns in a \l TableView or in a \l TreeView. + + \image tableview.png + + TableViewColumn represents a column within a TableView or a TreeView. It provides + properties to decide how the data in that column is presented. + + \qml + TableView { + TableViewColumn { role: "title"; title: "Title"; width: 100 } + TableViewColumn { role: "author"; title: "Author"; width: 200 } + model: libraryModel + } + \endqml + + \sa TableView, TreeView +*/ + +QtObject { + + /*! \internal */ + property Item __view: null + + /*! \internal */ + property int __index: -1 + + /*! The title text of the column. */ + property string title + + /*! The model \c role of the column. */ + property string role + + /*! The current width of the column. + The default value depends on platform. If only one + column is defined, the width expands to the viewport. + */ + property int width: (__view && __view.columnCount === 1) ? __view.viewport.width : 160 + + /*! The visible status of the column. */ + property bool visible: true + + /*! Determines if the column should be resizable. + \since QtQuick.Controls 1.1 */ + property bool resizable: true + + /*! Determines if the column should be movable. + The default value is \c true. + \note A non-movable column may get indirectly moved if adjacent columns are movable. + \since QtQuick.Controls 1.1 */ + property bool movable: true + + /*! \qmlproperty enumeration TableViewColumn::elideMode + The text elide mode of the column. + Allowed values are: + \list + \li Text.ElideNone + \li Text.ElideLeft + \li Text.ElideMiddle + \li Text.ElideRight - the default + \endlist + \sa {Text::elide}{elide} */ + property int elideMode: Text.ElideRight + + /*! \qmlproperty enumeration TableViewColumn::horizontalAlignment + The horizontal text alignment of the column. + Allowed values are: + \list + \li Text.AlignLeft - the default + \li Text.AlignRight + \li Text.AlignHCenter + \li Text.AlignJustify + \endlist + \sa {Text::horizontalAlignment}{horizontalAlignment} */ + property int horizontalAlignment: Text.AlignLeft + + /*! The delegate of the column. This can be used to set the itemDelagate + of a \l TableView or \l TreeView for a specific column. + + In the delegate you have access to the following special properties: + \list + \li styleData.selected - if the item is currently selected + \li styleData.value - the value or text for this item + \li styleData.textColor - the default text color for an item + \li styleData.row - the index of the row + \li styleData.column - the index of the column + \li styleData.elideMode - the elide mode of the column + \li styleData.textAlignment - the horizontal text alignment of the column + \endlist + */ + property Component delegate + + property int accessibleRole: Accessible.ColumnHeader + + /*! \qmlmethod void TableViewColumn::resizeToContents() + Resizes the column so that the implicitWidth of the contents on every row will fit. + \since QtQuick.Controls 1.2 */ + function resizeToContents() { + var minWidth = 0 + var listdata = __view.__listView.children[0] + for (var i = 0; __index === -1 && i < __view.__columns.length; ++i) { + if (__view.__columns[i] === this) + __index = i + } + // ### HACK We don't have direct access to the instantiated item, + // so we go spelunking. Each 'item' variable check is annotated + // with the expected object it should point to in BasicTableView. + for (var row = 0 ; row < listdata.children.length ; ++row) { + var item = listdata.children[row] ? listdata.children[row].rowItem : undefined + if (item) { // FocusScope { id: rowitem } + item = item.children[1] + if (item) { // Row { id: itemrow } + item = item.children[__index] + if (item) { // Repeater.delegate a.k.a. __view.__itemDelegateLoader + var indent = __view.__isTreeView && __index === 0 ? item.__itemIndentation : 0 + item = item.item + if (item && item.hasOwnProperty("implicitWidth")) { + minWidth = Math.max(minWidth, item.implicitWidth + indent) + } + } + } + } + } + if (minWidth) + width = minWidth + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TextArea.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TextArea.qml new file mode 100644 index 0000000..d289780 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TextArea.qml @@ -0,0 +1,978 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.6 +import QtQuick.Window 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +/*! + \qmltype TextArea + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief Displays multiple lines of editable formatted text. + + \image textarea.png + + It can display both plain and rich text. For example: + + \qml + TextArea { + width: 240 + text: + "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " + + "sed do eiusmod tempor incididunt ut labore et dolore magna " + + "aliqua. Ut enim ad minim veniam, quis nostrud exercitation " + + "ullamco laboris nisi ut aliquip ex ea commodo cosnsequat. "; + } + \endqml + + Clipboard support is provided by the cut(), copy(), and paste() functions, and the selection can + be handled in a traditional "mouse" mechanism by setting selectByMouse, or handled completely + from QML by manipulating selectionStart and selectionEnd, or using selectAll() or selectWord(). + + You can translate between cursor positions (characters from the start of the document) and pixel + points using positionAt() and positionToRectangle(). + + You can create a custom appearance for a TextArea by + assigning a \l {TextAreaStyle}. + + \sa TextField, TextEdit +*/ + +ScrollView { + id: area + + /*! + \qmlproperty bool TextArea::activeFocusOnPress + + Whether the TextEdit should gain active focus on a mouse press. By default this is + set to true. + */ + property alias activeFocusOnPress: edit.activeFocusOnPress + + /*! + \qmlproperty url TextArea::baseUrl + + This property specifies a base URL which is used to resolve relative URLs + within the text. + + The default value is the url of the QML file instantiating the TextArea item. + */ + property alias baseUrl: edit.baseUrl + + /*! + \qmlproperty bool TextArea::canPaste + + Returns true if the TextArea is writable and the content of the clipboard is + suitable for pasting into the TextArea. + */ + readonly property alias canPaste: edit.canPaste + + /*! + \qmlproperty bool TextArea::canRedo + + Returns true if the TextArea is writable and there are \l {undo}{undone} + operations that can be redone. + */ + readonly property alias canRedo: edit.canRedo + + /*! + \qmlproperty bool TextArea::canUndo + + Returns true if the TextArea is writable and there are previous operations + that can be undone. + */ + readonly property alias canUndo: edit.canUndo + + /*! + \qmlproperty color TextArea::textColor + + The text color. + + \qml + TextArea { textColor: "orange" } + \endqml + */ + property alias textColor: edit.color + + /*! + \qmlproperty int TextArea::cursorPosition + The position of the cursor in the TextArea. + */ + property alias cursorPosition: edit.cursorPosition + + /*! + \qmlproperty rect TextArea::cursorRectangle + \since QtQuick.Controls 1.3 + + The rectangle where the text cursor is rendered within the text area. + */ + readonly property alias cursorRectangle: edit.cursorRectangle + + /*! \qmlproperty font TextArea::font + + The font of the TextArea. + */ + property alias font: edit.font + + /*! + \qmlproperty enumeration TextArea::horizontalAlignment + + Sets the alignment of the text within the TextArea item's width. + + By default, the horizontal text alignment follows the natural alignment of the text, + for example, text that is read from left to right will be aligned to the left. + + The valid values for \c horizontalAlignment are: + \list + \li TextEdit.AlignLeft (Default) + \li TextEdit.AlignRight + \li TextEdit.AlignHCenter + \endlist + + When using the attached property LayoutMirroring::enabled to mirror application + layouts, the horizontal alignment of text will also be mirrored. However, the property + \c horizontalAlignment will remain unchanged. To query the effective horizontal alignment + of TextArea, use the read-only property \c effectiveHorizontalAlignment. + */ + property alias horizontalAlignment: edit.horizontalAlignment + + /*! + \qmlproperty enumeration TextArea::effectiveHorizontalAlignment + + Gets the effective horizontal alignment of the text within the TextArea item's width. + + To set/get the default horizontal alignment of TextArea, use the property \c horizontalAlignment. + + */ + readonly property alias effectiveHorizontalAlignment: edit.effectiveHorizontalAlignment + + /*! + \qmlproperty enumeration TextArea::verticalAlignment + + Sets the alignment of the text within the TextArea item's height. + + The valid values for \c verticalAlignment are: + \list + \li TextEdit.AlignTop + \li TextEdit.AlignBottom + \li TextEdit.AlignVCenter (Default) + \endlist + */ + property alias verticalAlignment: edit.verticalAlignment + + /*! + \qmlproperty bool TextArea::inputMethodComposing + \since QtQuick.Controls 1.3 + + This property holds whether the TextArea has partial text input from an input method. + + While it is composing an input method may rely on mouse or key events from the TextArea + to edit or commit the partial text. This property can be used to determine when to disable + events handlers that may interfere with the correct operation of an input method. + */ + readonly property bool inputMethodComposing: !!edit.inputMethodComposing + + /*! + \qmlproperty enumeration TextArea::inputMethodHints + + Provides hints to the input method about the expected content of the text edit, and how it + should operate. + + The value is a bit-wise combination of flags or Qt.ImhNone if no hints are set. + + The default value is \c Qt.ImhNone. + + Flags that alter behavior are: + + \list + \li Qt.ImhHiddenText - Characters should be hidden, as is typically used when entering passwords. + \li Qt.ImhSensitiveData - Typed text should not be stored by the active input method + in any persistent storage like predictive user dictionary. + \li Qt.ImhNoAutoUppercase - The input method should not try to automatically switch to upper case + when a sentence ends. + \li Qt.ImhPreferNumbers - Numbers are preferred (but not required). + \li Qt.ImhPreferUppercase - Upper case letters are preferred (but not required). + \li Qt.ImhPreferLowercase - Lower case letters are preferred (but not required). + \li Qt.ImhNoPredictiveText - Do not use predictive text (i.e. dictionary lookup) while typing. + + \li Qt.ImhDate - The text editor functions as a date field. + \li Qt.ImhTime - The text editor functions as a time field. + \endlist + + Flags that restrict input (exclusive flags) are: + + \list + \li Qt.ImhDigitsOnly - Only digits are allowed. + \li Qt.ImhFormattedNumbersOnly - Only number input is allowed. This includes decimal point and minus sign. + \li Qt.ImhUppercaseOnly - Only upper case letter input is allowed. + \li Qt.ImhLowercaseOnly - Only lower case letter input is allowed. + \li Qt.ImhDialableCharactersOnly - Only characters suitable for phone dialing are allowed. + \li Qt.ImhEmailCharactersOnly - Only characters suitable for email addresses are allowed. + \li Qt.ImhUrlCharactersOnly - Only characters suitable for URLs are allowed. + \endlist + + Masks: + + \list + \li Qt.ImhExclusiveInputMask - This mask yields nonzero if any of the exclusive flags are used. + \endlist + */ + property alias inputMethodHints: edit.inputMethodHints + + /*! + \qmlproperty int TextArea::length + + Returns the total number of plain text characters in the TextArea item. + + As this number doesn't include any formatting markup, it may not be the same as the + length of the string returned by the \l text property. + + This property can be faster than querying the length the \l text property as it doesn't + require any copying or conversion of the TextArea's internal string data. + */ + readonly property alias length: edit.length + + /*! + \qmlproperty int TextArea::lineCount + + Returns the total number of lines in the TextArea item. + */ + readonly property alias lineCount: edit.lineCount + + /*! + \qmlproperty bool TextArea::readOnly + + Whether the user can interact with the TextArea item. + + The difference from a disabled text field is that it will appear + to be active, and text can be selected and copied. + + If this property is set to \c true, the text cannot be edited by user interaction. + + By default this property is \c false. + */ + property alias readOnly: edit.readOnly + Accessible.readOnly: readOnly + + /*! + \qmlproperty string TextArea::selectedText + + This read-only property provides the text currently selected in the + text edit. + */ + readonly property alias selectedText: edit.selectedText + + /*! + \qmlproperty int TextArea::selectionEnd + + The cursor position after the last character in the current selection. + + This property is read-only. To change the selection, use select(start,end), + selectAll(), or selectWord(). + + \sa selectionStart, cursorPosition, selectedText + */ + readonly property alias selectionEnd: edit.selectionEnd + + /*! + \qmlproperty int TextArea::selectionStart + + The cursor position before the first character in the current selection. + + This property is read-only. To change the selection, use select(start,end), + selectAll(), or selectWord(). + + \sa selectionEnd, cursorPosition, selectedText + */ + readonly property alias selectionStart: edit.selectionStart + + /*! + \qmlproperty bool TextArea::tabChangesFocus + + This property holds whether Tab changes focus, or is accepted as input. + + Defaults to \c false. + */ + property bool tabChangesFocus: false + + /*! + \qmlproperty string TextArea::text + + The text to display. If the text format is AutoText the text edit will + automatically determine whether the text should be treated as + rich text. This determination is made using Qt::mightBeRichText(). + */ + property alias text: edit.text + + /*! + \qmlproperty enumeration TextArea::textFormat + + The way the text property should be displayed. + + \list + \li TextEdit.AutoText + \li TextEdit.PlainText + \li TextEdit.RichText + \endlist + + The default is TextEdit.PlainText. If the text format is TextEdit.AutoText the text edit + will automatically determine whether the text should be treated as + rich text. This determination is made using Qt::mightBeRichText(). + */ + property alias textFormat: edit.textFormat + + /*! + \qmlproperty enumeration TextArea::wrapMode + + Set this property to wrap the text to the TextArea item's width. + + \list + \li TextEdit.NoWrap (default) - no wrapping will be performed. + \li TextEdit.WordWrap - wrapping is done on word boundaries only. + \li TextEdit.WrapAnywhere - wrapping is done at any point on a line, even if it occurs in the middle of a word. + \li TextEdit.Wrap - if possible, wrapping occurs at a word boundary; otherwise it will occur at the appropriate point on the line, even in the middle of a word. + \endlist + */ + property alias wrapMode: edit.wrapMode + + /*! + \qmlproperty bool TextArea::selectByMouse + + This property determines if the user can select the text with the + mouse. + + The default value is \c true. + */ + property bool selectByMouse: true + + /*! + \qmlproperty bool TextArea::selectByKeyboard + + This property determines if the user can select the text with the + keyboard. + + If set to \c true, the user can use the keyboard to select the text + even if the editor is read-only. If set to \c false, the user cannot + use the keyboard to select the text even if the editor is editable. + + The default value is \c true when the editor is editable, + and \c false when read-only. + + \sa readOnly + */ + property alias selectByKeyboard: edit.selectByKeyboard + + /*! + \qmlsignal TextArea::linkActivated(string link) + + This signal is emitted when the user clicks on a link embedded in the text. + The link must be in rich text or HTML format and the + \e link string provides access to the particular link. + + The corresponding handler is \c onLinkActivated. + */ + signal linkActivated(string link) + + /*! + \qmlsignal TextArea::linkHovered(string link) + \since QtQuick.Controls 1.1 + + This signal is emitted when the user hovers a link embedded in the text. + The link must be in rich text or HTML format and the + \e link string provides access to the particular link. + + \sa hoveredLink + + The corresponding handler is \c onLinkHovered. + */ + signal linkHovered(string link) + + /*! + \qmlsignal TextArea::editingFinished() + \since QtQuick.Controls 1.5 + + This signal is emitted when the text area loses focus. + + The corresponding handler is \c onEditingFinished. + */ + signal editingFinished() + + /*! + \qmlproperty string TextArea::hoveredLink + \since QtQuick.Controls 1.1 + + This property contains the link string when user hovers a link + embedded in the text. The link must be in rich text or HTML format + and the link string provides access to the particular link. + */ + readonly property alias hoveredLink: edit.hoveredLink + + /*! + \since QtQuick.Controls 1.3 + + This property contains the edit \l Menu for working + with text selection. Set it to \c null if no menu + is wanted. + + \sa Menu + */ + property Component menu: editMenu.defaultMenu + + /*! + \qmlmethod void TextArea::append(string text) + + Appends a string \a text as a new line to the end of the text area. + */ + function append (string) { + edit.append(string) + __verticalScrollBar.value = __verticalScrollBar.maximumValue + } + + /*! + \qmlmethod void TextArea::copy() + + Copies the currently selected text to the system clipboard. + */ + function copy() { + edit.copy(); + } + + /*! + \qmlmethod void TextArea::cut() + + Moves the currently selected text to the system clipboard. + */ + function cut() { + edit.cut(); + } + + /*! + \qmlmethod void TextArea::deselect() + + Removes active text selection. + */ + function deselect() { + edit.deselect(); + } + + /*! + \qmlmethod string TextArea::getFormattedText(int start, int end) + + Returns the section of text that is between the \a start and \a end positions. + + The returned text will be formatted according to the \l textFormat property. + */ + function getFormattedText(start, end) { + return edit.getFormattedText(start, end); + } + + /*! + \qmlmethod string TextArea::getText(int start, int end) + + Returns the section of text that is between the \a start and \a end positions. + + The returned text does not include any rich text formatting. + */ + function getText(start, end) { + return edit.getText(start, end); + } + + /*! + \qmlmethod void TextArea::insert(int position, string text) + + Inserts \a text into the TextArea at \a position. + */ + function insert(position, text) { + edit.insert(position, text); + } + + /*! + \qmlmethod bool TextArea::isRightToLeft(int start, int end) + + Returns true if the natural reading direction of the editor text + found between positions \a start and \a end is right to left. + */ + function isRightToLeft(start, end) { + return edit.isRightToLeft(start, end); + } + + /*! + \qmlmethod void TextArea::moveCursorSelection(int position, SelectionMode mode = TextEdit.SelectCharacters) + + Moves the cursor to \a position and updates the selection according to the optional \a mode + parameter. (To only move the cursor, set the \l cursorPosition property.) + + When this method is called it additionally sets either the + selectionStart or the selectionEnd (whichever was at the previous cursor position) + to the specified position. This allows you to easily extend and contract the selected + text range. + + The selection mode specifies whether the selection is updated on a per character or a per word + basis. If not specified the selection mode will default to TextEdit.SelectCharacters. + + \list + \li TextEdit.SelectCharacters - Sets either the selectionStart or selectionEnd (whichever was at + the previous cursor position) to the specified position. + \li TextEdit.SelectWords - Sets the selectionStart and selectionEnd to include all + words between the specified position and the previous cursor position. Words partially in the + range are included. + \endlist + + For example, take this sequence of calls: + + \code + cursorPosition = 5 + moveCursorSelection(9, TextEdit.SelectCharacters) + moveCursorSelection(7, TextEdit.SelectCharacters) + \endcode + + This moves the cursor to the 5th position, extends the selection end from 5 to 9, + and then retracts the selection end from 9 to 7, leaving the text from the 5th + position to the 7th position selected (the 6th and 7th characters). + + The same sequence with TextEdit.SelectWords will extend the selection start to a word boundary + before or on the 5th position, and extend the selection end to a word boundary on or past the 9th position. + */ + function moveCursorSelection(position, mode) { + edit.moveCursorSelection(position, mode); + } + + /*! + \qmlmethod void TextArea::paste() + + Replaces the currently selected text by the contents of the system clipboard. + */ + function paste() { + edit.paste(); + } + + /*! + \qmlmethod int TextArea::positionAt(int x, int y) + + Returns the text position closest to pixel position (\a x, \a y). + + Position 0 is before the first character, position 1 is after the first character + but before the second, and so on until position \l {text}.length, which is after all characters. + */ + function positionAt(x, y) { + return edit.positionAt(x, y); + } + + /*! + \qmlmethod rectangle TextArea::positionToRectangle(position) + + Returns the rectangle at the given \a position in the text. The x, y, + and height properties correspond to the cursor that would describe + that position. + */ + function positionToRectangle(position) { + return edit.positionToRectangle(position); + } + + /*! + \qmlmethod void TextArea::redo() + + Redoes the last operation if redo is \l {canRedo}{available}. + */ + function redo() { + edit.redo(); + } + + /*! + \qmlmethod string TextArea::remove(int start, int end) + + Removes the section of text that is between the \a start and \a end positions from the TextArea. + */ + function remove(start, end) { + return edit.remove(start, end); + } + + /*! + \qmlmethod void TextArea::select(int start, int end) + + Causes the text from \a start to \a end to be selected. + + If either start or end is out of range, the selection is not changed. + + After calling this, selectionStart will become the lesser + and selectionEnd will become the greater (regardless of the order passed + to this method). + + \sa selectionStart, selectionEnd + */ + function select(start, end) { + edit.select(start, end); + } + + /*! + \qmlmethod void TextArea::selectAll() + + Causes all text to be selected. + */ + function selectAll() { + edit.selectAll(); + } + + /*! + \qmlmethod void TextArea::selectWord() + + Causes the word closest to the current cursor position to be selected. + */ + function selectWord() { + edit.selectWord(); + } + + /*! + \qmlmethod void TextArea::undo() + + Undoes the last operation if undo is \l {canUndo}{available}. Deselects any + current selection, and updates the selection start to the current cursor + position. + */ + function undo() { + edit.undo(); + } + + /*! \qmlproperty bool TextArea::backgroundVisible + + This property determines if the background should be filled or not. + + The default value is \c true. + */ + property alias backgroundVisible: colorRect.visible + + /*! \internal */ + default property alias data: area.data + + /*! \qmlproperty real TextArea::textMargin + \since QtQuick.Controls 1.1 + + The margin, in pixels, around the text in the TextArea. + */ + property alias textMargin: edit.textMargin + + /*! \qmlproperty real TextArea::contentWidth + \since QtQuick.Controls 1.3 + + The width of the text content. + */ + readonly property alias contentWidth: edit.contentWidth + + /*! \qmlproperty real TextArea::contentHeight + \since QtQuick.Controls 1.3 + + The height of the text content. + */ + readonly property alias contentHeight: edit.contentHeight + + frameVisible: true + + activeFocusOnTab: true + + Accessible.role: Accessible.EditableText + + style: Settings.styleComponent(Settings.style, "TextAreaStyle.qml", area) + + /*! + \qmlproperty TextDocument TextArea::textDocument + + This property exposes the \l QQuickTextDocument of this TextArea. + \sa TextEdit::textDocument + */ + property alias textDocument: edit.textDocument + + Flickable { + id: flickable + + interactive: !edit.selectByMouse + anchors.fill: parent + + TextEdit { + id: edit + focus: true + cursorDelegate: __style && __style.__cursorDelegate ? __style.__cursorDelegate : null + persistentSelection: true + + Rectangle { + id: colorRect + parent: viewport + anchors.fill: parent + color: __style ? __style.backgroundColor : "white" + z: -1 + } + + property int layoutRecursionDepth: 0 + + function doLayout() { + // scrollbars affect the document/viewport size and vice versa, so we + // must allow the layout loop to recurse twice until the sizes stabilize + if (layoutRecursionDepth <= 2) { + layoutRecursionDepth++ + + if (wrapMode == TextEdit.NoWrap) { + __horizontalScrollBar.visible = edit.contentWidth > viewport.width + edit.width = Math.max(viewport.width, edit.contentWidth) + } else { + __horizontalScrollBar.visible = false + edit.width = viewport.width + } + edit.height = Math.max(viewport.height, edit.contentHeight) + + flickable.contentWidth = edit.contentWidth + flickable.contentHeight = edit.contentHeight + + layoutRecursionDepth-- + } + } + + Connections { + target: area.viewport + function onWidthChanged() { edit.doLayout() } + function onHeightChanged() { edit.doLayout() } + } + onContentWidthChanged: edit.doLayout() + onContentHeightChanged: edit.doLayout() + onWrapModeChanged: edit.doLayout() + + renderType: __style ? __style.renderType : Text.NativeRendering + font: __style ? __style.font : TextSingleton.font + color: __style ? __style.textColor : "darkgray" + selectionColor: __style ? __style.selectionColor : "darkred" + selectedTextColor: __style ? __style.selectedTextColor : "white" + wrapMode: TextEdit.WordWrap + textMargin: __style && __style.textMargin !== undefined ? __style.textMargin : 4 + + selectByMouse: area.selectByMouse && Qt.platform.os != "ios" && (!Settings.isMobile || !cursorHandle.delegate || !selectionHandle.delegate) + readOnly: false + + Keys.forwardTo: area + + KeyNavigation.priority: KeyNavigation.BeforeItem + KeyNavigation.tab: area.tabChangesFocus ? area.KeyNavigation.tab : null + KeyNavigation.backtab: area.tabChangesFocus ? area.KeyNavigation.backtab : null + + property bool blockRecursion: false + property bool hasSelection: selectionStart !== selectionEnd + readonly property int selectionPosition: selectionStart !== cursorPosition ? selectionStart : selectionEnd + + // force re-evaluation when contentWidth changes => text layout changes => selection moves + property rect selectionRectangle: contentWidth ? positionToRectangle(selectionPosition) + : positionToRectangle(selectionPosition) + + onSelectionStartChanged: syncHandlesWithSelection() + onCursorPositionChanged: syncHandlesWithSelection() + + function syncHandlesWithSelection() + { + if (!blockRecursion && selectionHandle.delegate) { + blockRecursion = true + // We cannot use property selectionPosition since it gets updated after onSelectionStartChanged + cursorHandle.position = cursorPosition + selectionHandle.position = (selectionStart !== cursorPosition) ? selectionStart : selectionEnd + blockRecursion = false + } + ensureVisible(cursorRectangle) + } + + function ensureVisible(rect) { + if (rect.y >= flickableItem.contentY + viewport.height - rect.height - textMargin) { + // moving down + flickableItem.contentY = rect.y - viewport.height + rect.height + textMargin + } else if (rect.y < flickableItem.contentY) { + // moving up + flickableItem.contentY = rect.y - textMargin + } + + if (rect.x >= flickableItem.contentX + viewport.width - textMargin) { + // moving right + flickableItem.contentX = rect.x - viewport.width + textMargin + } else if (rect.x < flickableItem.contentX) { + // moving left + flickableItem.contentX = rect.x - textMargin + } + } + + onLinkActivated: area.linkActivated(link) + onLinkHovered: area.linkHovered(link) + onEditingFinished: area.editingFinished() + + function activate() { + if (activeFocusOnPress) { + forceActiveFocus() + if (!readOnly) + Qt.inputMethod.show() + } + cursorHandle.activate() + selectionHandle.activate() + } + + function moveHandles(cursor, selection) { + blockRecursion = true + cursorPosition = cursor + if (selection === -1) { + selectWord() + selection = selectionStart + } + selectionHandle.position = selection + cursorHandle.position = cursorPosition + blockRecursion = false + } + + MouseArea { + id: mouseArea + anchors.fill: parent + cursorShape: edit.hoveredLink ? Qt.PointingHandCursor : Qt.IBeamCursor + acceptedButtons: (edit.selectByMouse ? Qt.NoButton : Qt.LeftButton) | (area.menu ? Qt.RightButton : Qt.NoButton) + onClicked: { + if (editMenu.item) + return; + var pos = edit.positionAt(mouse.x, mouse.y) + edit.moveHandles(pos, pos) + edit.activate() + } + onPressAndHold: { + if (editMenu.item) + return; + var pos = edit.positionAt(mouse.x, mouse.y) + edit.moveHandles(pos, area.selectByMouse ? -1 : pos) + edit.activate() + } + } + + EditMenu { + id: editMenu + control: area + input: edit + mouseArea: mouseArea + cursorHandle: cursorHandle + selectionHandle: selectionHandle + flickable: flickable + anchors.fill: parent + } + + ScenePosListener { + id: listener + item: edit + enabled: edit.activeFocus && Qt.platform.os !== "ios" && Settings.isMobile + } + + TextHandle { + id: selectionHandle + + editor: edit + control: area + z: 1000001 // DefaultWindowDecoration+1 + parent: !edit.activeFocus || Qt.platform.os === "ios" ? editor : Window.contentItem // float (QTBUG-42538) + active: area.selectByMouse && Settings.isMobile + delegate: __style.__selectionHandle + maximum: cursorHandle.position - 1 + + // Mention scenePos, contentX and contentY in the mappedPos binding to force re-evaluation if they change + property var mappedPos: listener.scenePos.x !== listener.scenePos.y !== flickableItem.contentX !== flickableItem.contentY !== Number.MAX_VALUE ? + editor.mapToItem(parent, editor.selectionRectangle.x, editor.selectionRectangle.y) : -1 + x: mappedPos.x + y: mappedPos.y + + property var posInViewport: flickableItem.contentX !== flickableItem.contentY !== Number.MAX_VALUE ? + viewport.mapFromItem(parent, handleX, handleY) : -1 + visible: pressed || (edit.hasSelection + && posInViewport.y + handleHeight >= -1 + && posInViewport.y <= viewport.height + 1 + && posInViewport.x + handleWidth >= -1 + && posInViewport.x <= viewport.width + 1) + + onPositionChanged: { + if (!edit.blockRecursion) { + edit.blockRecursion = true + edit.select(selectionHandle.position, cursorHandle.position) + if (pressed) + edit.ensureVisible(edit.selectionRectangle) + edit.blockRecursion = false + } + } + } + + TextHandle { + id: cursorHandle + + editor: edit + control: area + z: 1000001 // DefaultWindowDecoration+1 + parent: !edit.activeFocus || Qt.platform.os === "ios" ? editor : Window.contentItem // float (QTBUG-42538) + active: area.selectByMouse && Settings.isMobile + delegate: __style.__cursorHandle + minimum: edit.hasSelection ? selectionHandle.position + 1 : -1 + + // Mention scenePos, contentX and contentY in the mappedPos binding to force re-evaluation if they change + property var mappedPos: listener.scenePos.x !== listener.scenePos.y !== flickableItem.contentX !== flickableItem.contentY !== Number.MAX_VALUE ? + editor.mapToItem(parent, editor.cursorRectangle.x, editor.cursorRectangle.y) : -1 + x: mappedPos.x + y: mappedPos.y + + property var posInViewport: flickableItem.contentX !== flickableItem.contentY !== Number.MAX_VALUE ? + viewport.mapFromItem(parent, handleX, handleY) : -1 + visible: pressed || ((edit.cursorVisible || edit.hasSelection) + && posInViewport.y + handleHeight >= -1 + && posInViewport.y <= viewport.height + 1 + && posInViewport.x + handleWidth >= -1 + && posInViewport.x <= viewport.width + 1) + + onPositionChanged: { + if (!edit.blockRecursion) { + edit.blockRecursion = true + if (!edit.hasSelection) + selectionHandle.position = cursorHandle.position + edit.select(selectionHandle.position, cursorHandle.position) + edit.blockRecursion = false + } + } + } + } + } + + Keys.onPressed: { + if (event.key == Qt.Key_PageUp) { + __verticalScrollBar.value -= area.height + } else if (event.key == Qt.Key_PageDown) + __verticalScrollBar.value += area.height + } + +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TextField.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TextField.qml new file mode 100644 index 0000000..d0d1d5c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TextField.qml @@ -0,0 +1,672 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.6 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype TextField + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief Displays a single line of editable plain text. + + \image textfield.png + + TextField is used to accept a line of text input. Input constraints can be + placed on a TextField item (for example, through a \l validator or \l + inputMask). Setting \l echoMode to an appropriate value enables + TextField to be used for a password input field. + + \qml + TextField { + placeholderText: qsTr("Enter name") + } + \endqml + + You can create a custom appearance for a TextField by + assigning a \l {TextFieldStyle}. + + \sa TextArea, TextInput +*/ + +Control { + id: textfield + + /*! + \qmlproperty bool TextField::acceptableInput + + Returns \c true if the text field contains acceptable + text. + + If a validator or input mask was set, this property will return \c + true if the current text satisfies the validator or mask as + a final string (not as an intermediate string). + + The default value is \c true. + + \sa validator, inputMask, accepted + + */ + readonly property alias acceptableInput: textInput.acceptableInput // read only + + /*! + \qmlproperty bool TextField::activeFocusOnPress + + This property is set to \c true if the TextField should gain active + focus on a mouse press. + + The default value is \c true. + */ + property alias activeFocusOnPress: textInput.activeFocusOnPress + + /*! + \qmlproperty bool TextField::canPaste + + Returns \c true if the TextField is writable and the content of the + clipboard is suitable for pasting into the TextField. + */ + readonly property alias canPaste: textInput.canPaste + + /*! + \qmlproperty bool TextField::canRedo + + Returns \c true if the TextField is writable and there are \l + {undo}{undone} operations that can be redone. + */ + readonly property alias canRedo: textInput.canRedo + + /*! + \qmlproperty bool TextField::canUndo + + Returns \c true if the TextField is writable and there are previous + operations that can be undone. + */ + readonly property alias canUndo: textInput.canUndo + + /*! + \qmlproperty color TextField::textColor + + This property holds the text color. + */ + property alias textColor: textInput.color + + /*! + \qmlproperty int TextField::cursorPosition + + This property holds the position of the cursor in the TextField. + */ + property alias cursorPosition: textInput.cursorPosition + + /*! + \qmlproperty rect TextField::cursorRectangle + \since QtQuick.Controls 1.3 + + The rectangle where the text cursor is rendered within the text field. + */ + readonly property alias cursorRectangle: textInput.cursorRectangle + + /*! + \qmlproperty string TextField::displayText + + This property holds the text displayed in the TextField. + + If \l echoMode is set to TextInput::Normal, this holds the + same value as the TextField::text property. Otherwise, + this property holds the text visible to the user, while + the \l text property holds the actual entered text. + */ + readonly property alias displayText: textInput.displayText + + /*! + \qmlproperty enumeration TextField::echoMode + + Specifies how the text should be displayed in the + TextField. + + The possible modes are: + \list + \li TextInput.Normal - Displays the text as it is. (Default) + \li TextInput.Password - Displays asterisks instead of characters. + \li TextInput.NoEcho - Displays nothing. + \li TextInput.PasswordEchoOnEdit - Displays characters as they are + entered while editing, otherwise displays asterisks. + \endlist + */ + property alias echoMode: textInput.echoMode + Accessible.passwordEdit: echoMode == TextInput.Password || echoMode === TextInput.PasswordEchoOnEdit + + /*! + \qmlproperty font TextField::font + + Sets the font of the TextField. + */ + property alias font: textInput.font + + /*! + \qmlproperty enumeration TextField::horizontalAlignment + + Sets the alignment of the text within the TextField item's width. + + By default, the horizontal text alignment follows the natural alignment + of the text, for example text that is read from left to right will be + aligned to the left. + + The possible alignment values are: + \list + \li TextInput.AlignLeft + \li TextInput.AlignRight + \li TextInput.AlignHCenter + \endlist + + When using the attached property, LayoutMirroring::enabled, to mirror + application layouts, the horizontal alignment of text will also be + mirrored. However, the property \c horizontalAlignment will remain + unchanged. To query the effective horizontal alignment of TextField, use + the read-only property \c effectiveHorizontalAlignment. + */ + property alias horizontalAlignment: textInput.horizontalAlignment + + /*! + \qmlproperty enumeration TextField::effectiveHorizontalAlignment + + Gets the effective horizontal alignment of the text within the TextField + item's width. + + \l horizontalAlignment contains the default horizontal alignment. + + \sa horizontalAlignment + + */ + readonly property alias effectiveHorizontalAlignment: textInput.effectiveHorizontalAlignment + + /*! + \qmlproperty enumeration TextField::verticalAlignment + + Sets the alignment of the text within the TextField item's height. + + The possible alignment values are: + \list + \li TextInput.AlignTop + \li TextInput.AlignBottom + \li TextInput.AlignVCenter (default). + \endlist + */ + property alias verticalAlignment: textInput.verticalAlignment + + /*! + \qmlproperty string TextField::inputMask + + Sets an input mask on the TextField, restricting the allowable text + inputs. See QLineEdit::inputMask for further details, as the exact same + mask strings are used by TextField. + + \sa acceptableInput, validator + */ + property alias inputMask: textInput.inputMask + + /*! + \qmlproperty bool TextField::inputMethodComposing + \since QtQuick.Controls 1.3 + + This property holds whether the TextField has partial text input from an input method. + + While it is composing an input method may rely on mouse or key events from the TextField + to edit or commit the partial text. This property can be used to determine when to disable + events handlers that may interfere with the correct operation of an input method. + */ + readonly property bool inputMethodComposing: !!textInput.inputMethodComposing + + /*! + \qmlproperty enumeration TextField::inputMethodHints + + Provides hints to the input method about the expected content of the + text field and how it should operate. + + The value is a bit-wise combination of flags, or \c Qt.ImhNone if no + hints are set. + + The default value is \c Qt.ImhNone. + + Flags that alter behavior are: + + \list + \li Qt.ImhHiddenText - Characters should be hidden, as is typically used when entering passwords. + This is automatically set when setting echoMode to \c TextInput.Password. + \li Qt.ImhSensitiveData - Typed text should not be stored by the active input method + in any persistent storage like predictive user dictionary. + \li Qt.ImhNoAutoUppercase - The input method should not try to automatically switch to upper case + when a sentence ends. + \li Qt.ImhPreferNumbers - Numbers are preferred (but not required). + \li Qt.ImhPreferUppercase - Uppercase letters are preferred (but not required). + \li Qt.ImhPreferLowercase - Lowercase letters are preferred (but not required). + \li Qt.ImhNoPredictiveText - Do not use predictive text (for example, dictionary lookup) while typing. + + \li Qt.ImhDate - The text editor functions as a date field. + \li Qt.ImhTime - The text editor functions as a time field. + \li Qt.ImhMultiLine - The text editor doesn't close software input keyboard when Return or Enter key is pressed (since QtQuick.Controls 1.3). + \endlist + + Flags that restrict input (exclusive flags) are: + + \list + \li Qt.ImhDigitsOnly - Only digits are allowed. + \li Qt.ImhFormattedNumbersOnly - Only number input is allowed. This includes decimal point and minus sign. + \li Qt.ImhUppercaseOnly - Only uppercase letter input is allowed. + \li Qt.ImhLowercaseOnly - Only lowercase letter input is allowed. + \li Qt.ImhDialableCharactersOnly - Only characters suitable for phone dialing are allowed. + \li Qt.ImhEmailCharactersOnly - Only characters suitable for email addresses are allowed. + \li Qt.ImhUrlCharactersOnly - Only characters suitable for URLs are allowed. + \endlist + + Masks: + \list + \li Qt.ImhExclusiveInputMask - This mask yields nonzero if any of the exclusive flags are used. + \endlist + */ + property alias inputMethodHints: textInput.inputMethodHints + + /*! + \qmlproperty int TextField::length + + Returns the total number of characters in the TextField item. + + If the TextField has an input mask, the length will include mask + characters and may differ from the length of the string returned by the + \l text property. + + This property can be faster than querying the length of the \l text + property as it doesn't require any copying or conversion of the + TextField's internal string data. + */ + readonly property alias length: textInput.length + + /*! + \qmlproperty int TextField::maximumLength + + This property holds the maximum permitted length of the text in the + TextField. + + If the text is too long, it is truncated at the limit. + */ + property alias maximumLength: textInput.maximumLength + + /*! + \qmlproperty string TextField::placeholderText + + This property contains the text that is shown in the text field when the + text field is empty. + */ + property alias placeholderText: placeholderTextComponent.text + + /*! + \qmlproperty bool TextField::readOnly + + Sets whether user input can modify the contents of the TextField. Read- + only is different from a disabled text field in that the text field will + appear to be active and text can still be selected and copied. + + If readOnly is set to \c true, then user input will not affect the text. + Any bindings or attempts to set the text property will still + work, however. + */ + property alias readOnly: textInput.readOnly + Accessible.readOnly: readOnly + + /*! + \qmlproperty bool TextField::selectByMouse + \since QtQuick.Controls 1.3 + + This property determines if the user can select the text with the + mouse. + + The default value is \c true. + */ + property bool selectByMouse: true + + /*! + \qmlproperty string TextField::selectedText + + Provides the text currently selected in the text input. + + It is equivalent to the following snippet, but is faster and easier + to use. + + \code + myTextField.text.toString().substring(myTextField.selectionStart, myTextField.selectionEnd); + \endcode + */ + readonly property alias selectedText: textInput.selectedText + + /*! + \qmlproperty int TextField::selectionEnd + + The cursor position after the last character in the current selection. + + This property is read-only. To change the selection, use + select(start,end), selectAll(), or selectWord(). + + \sa selectionStart, cursorPosition, selectedText + */ + readonly property alias selectionEnd: textInput.selectionEnd + + /*! + \qmlproperty int TextField::selectionStart + + The cursor position before the first character in the current selection. + + This property is read-only. To change the selection, use select(start,end), + selectAll(), or selectWord(). + + \sa selectionEnd, cursorPosition, selectedText + */ + readonly property alias selectionStart: textInput.selectionStart + + /*! + \qmlproperty string TextField::text + + This property contains the text in the TextField. + */ + property alias text: textInput.text + + /*! + \qmlproperty Validator TextField::validator + + Allows you to set a validator on the TextField. When a validator is set, + the TextField will only accept input which leaves the text property in + an intermediate state. The accepted signal will only be sent + if the text is in an acceptable state when enter is pressed. + + Currently supported validators are \l[QtQuick]{IntValidator}, + \l[QtQuick]{DoubleValidator}, and \l[QtQuick]{RegExpValidator}. An + example of using validators is shown below, which allows input of + integers between 11 and 31 into the text input: + + \code + import QtQuick 2.2 + import QtQuick.Controls 1.2 + + TextField { + validator: IntValidator {bottom: 11; top: 31;} + focus: true + } + \endcode + + \sa acceptableInput, inputMask, accepted + */ + property alias validator: textInput.validator + + /*! + \since QtQuick.Controls 1.3 + + This property contains the edit \l Menu for working + with text selection. Set it to \c null if no menu + is wanted. + */ + property Component menu: textInput.editMenu.defaultMenu + + /*! + \qmlsignal TextField::accepted() + + This signal is emitted when the Return or Enter key is pressed. + Note that if there is a \l validator or \l inputMask set on the text + field, the signal will only be emitted if the input is in an acceptable + state. + + The corresponding handler is \c onAccepted. + */ + signal accepted() + + /*! + \qmlsignal TextField::editingFinished() + \since QtQuick.Controls 1.1 + + This signal is emitted when the Return or Enter key is pressed or + the text field loses focus. Note that if there is a validator or + inputMask set on the text field and enter/return is pressed, this + signal will only be emitted if the input follows + the inputMask and the validator returns an acceptable state. + + The corresponding handler is \c onEditingFinished. + */ + signal editingFinished() + + /*! + \qmlmethod void TextField::copy() + + Copies the currently selected text to the system clipboard. + */ + function copy() { + textInput.copy() + } + + /*! + \qmlmethod void TextField::cut() + + Moves the currently selected text to the system clipboard. + */ + function cut() { + textInput.cut() + } + + /*! + \qmlmethod void TextField::deselect() + + Removes active text selection. + */ + function deselect() { + textInput.deselect(); + } + + /*! + \qmlmethod string TextField::getText(int start, int end) + + Removes the section of text that is between the \a start and \a end + positions from the TextField. + */ + function getText(start, end) { + return textInput.getText(start, end); + } + + /*! + \qmlmethod void TextField::insert(int position, string text) + + Inserts \a text into the TextField at \a position. + */ + function insert(position, text) { + textInput.insert(position, text); + } + + /*! + \qmlmethod bool TextField::isRightToLeft(int start, int end) + + Returns \c true if the natural reading direction of the editor text + found between positions \a start and \a end is right to left. + */ + function isRightToLeft(start, end) { + return textInput.isRightToLeft(start, end); + } + + /*! + \qmlmethod void TextField::paste() + + Replaces the currently selected text by the contents of the system + clipboard. + */ + function paste() { + textInput.paste() + } + + /*! + \qmlmethod void TextField::redo() + + Performs the last operation if redo is \l {canRedo}{available}. + */ + function redo() { + textInput.redo(); + } + + /*! + \qmlmethod void TextField::remove(int start, int end) + \since QtQuick.Controls 1.4 + + Removes the section of text that is between the \a start and \a end positions. + */ + function remove(start, end) { + textInput.remove(start, end) + } + + /*! + \qmlmethod void TextField::select(int start, int end) + + Causes the text from \a start to \a end to be selected. + + If either start or end is out of range, the selection is not changed. + + After calling select, selectionStart will become the lesser + and selectionEnd will become the greater (regardless of the order passed + to this method). + + \sa selectionStart, selectionEnd + */ + function select(start, end) { + textInput.select(start, end) + } + + /*! + \qmlmethod void TextField::selectAll() + + Causes all text to be selected. + */ + function selectAll() { + textInput.selectAll() + } + + /*! + \qmlmethod void TextField::selectWord() + + Causes the word closest to the current cursor position to be selected. + */ + function selectWord() { + textInput.selectWord() + } + + /*! + \qmlmethod void TextField::undo() + + Reverts the last operation if undo is \l {canUndo}{available}. undo() + deselects any current selection and updates the selection start to the + current cursor position. + */ + function undo() { + textInput.undo(); + } + + /*! \qmlproperty bool TextField::hovered + + This property holds whether the control is being hovered. + */ + readonly property alias hovered: textInput.containsMouse + + /*! \internal */ + property alias __contentHeight: textInput.contentHeight + + /*! \internal */ + property alias __contentWidth: textInput.contentWidth + + /*! \internal */ + property alias __baselineOffset: textInput.baselineOffset + + style: Settings.styleComponent(Settings.style, "TextFieldStyle.qml", textInput) + + activeFocusOnTab: true + + Accessible.name: text + Accessible.role: Accessible.EditableText + Accessible.description: placeholderText + + Text { + id: placeholderTextComponent + anchors.fill: textInput + font: textInput.font + horizontalAlignment: textInput.horizontalAlignment + verticalAlignment: textInput.verticalAlignment + opacity: !textInput.displayText && (!textInput.activeFocus || textInput.horizontalAlignment !== Qt.AlignHCenter) ? 1.0 : 0.0 + color: __panel ? __panel.placeholderTextColor : "darkgray" + clip: contentWidth > width; + elide: Text.ElideRight + renderType: __style ? __style.renderType : Text.NativeRendering + } + + TextInputWithHandles { + id: textInput + focus: true + passwordCharacter: __style && __style.passwordCharacter !== undefined ? __style.passwordCharacter + : Qt.styleHints.passwordMaskCharacter + selectionColor: __panel ? __panel.selectionColor : "darkred" + selectedTextColor: __panel ? __panel.selectedTextColor : "white" + + control: textfield + cursorHandle: __style ? __style.__cursorHandle : undefined + selectionHandle: __style ? __style.__selectionHandle : undefined + + font: __panel ? __panel.font : TextSingleton.font + anchors.leftMargin: __panel ? __panel.leftMargin : 0 + anchors.topMargin: __panel ? __panel.topMargin : 0 + anchors.rightMargin: __panel ? __panel.rightMargin : 0 + anchors.bottomMargin: __panel ? __panel.bottomMargin : 0 + + anchors.fill: parent + verticalAlignment: Text.AlignVCenter + + color: __panel ? __panel.textColor : "darkgray" + clip: contentWidth > width + + renderType: __style ? __style.renderType : Text.NativeRendering + + Keys.forwardTo: textfield + + EnterKey.type: control.EnterKey.type + + onAccepted: textfield.accepted() + + onEditingFinished: textfield.editingFinished() + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ToolBar.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ToolBar.qml new file mode 100644 index 0000000..2e8a8fa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ToolBar.qml @@ -0,0 +1,182 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ToolBar + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup applicationwindow + \ingroup controls + \brief Contains ToolButton and related controls. + + \image toolbar.png + + The common way of using ToolBar is in relation to \l ApplicationWindow. It + provides styling and is generally designed to work well with ToolButton as + well as other controls. + + Note that the ToolBar does not provide a layout of its own, but requires + you to position its contents, for instance by creating a \l RowLayout. + + If only a single item is used within the ToolBar, it will resize to fit the implicitHeight + of its contained item. This makes it particularly suitable for use together with layouts. + Otherwise the height is platform dependent. + + \code + ApplicationWindow { + ... + toolBar:ToolBar { + RowLayout { + anchors.fill: parent + ToolButton { + iconSource: "new.png" + } + ToolButton { + iconSource: "open.png" + } + ToolButton { + iconSource: "save-as.png" + } + Item { Layout.fillWidth: true } + CheckBox { + text: "Enabled" + checked: true + Layout.alignment: Qt.AlignRight + } + } + } + } + \endcode +*/ + +FocusScope { + id: toolbar + + activeFocusOnTab: false + Accessible.role: Accessible.ToolBar + LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft + LayoutMirroring.childrenInherit: true + + width: parent ? parent.width : implicitWidth + implicitWidth: container.leftMargin + container.rightMargin + + Math.max(container.layoutWidth, __panel ? __panel.implicitWidth : 0) + implicitHeight: container.topMargin + container.bottomMargin + + Math.max(container.layoutHeight, __panel ? __panel.implicitHeight : 0) + + /*! \internal */ + property Component style: Settings.styleComponent(Settings.style, "ToolBarStyle.qml", toolbar) + + /*! \internal */ + property alias __style: styleLoader.item + + /*! \internal */ + property Item __panel: panelLoader.item + + /*! \internal */ + default property alias __content: container.data + + /*! \internal */ + property var __menu + + /*! + \qmlproperty Item ToolBar::contentItem + + This property holds the content Item of the tool bar. + + Items declared as children of a ToolBar are automatically parented to the ToolBar's contentItem. + Items created dynamically need to be explicitly parented to the contentItem: + + \note The implicit size of the ToolBar is calculated based on the size of its content. If you want to anchor + items inside the tool bar, you must specify an explicit width and height on the ToolBar itself. + */ + readonly property alias contentItem: container + + data: [ + Loader { + id: panelLoader + anchors.fill: parent + sourceComponent: styleLoader.item ? styleLoader.item.panel : null + onLoaded: item.z = -1 + Loader { + id: styleLoader + property alias __control: toolbar + sourceComponent: style + } + }, + Item { + id: container + z: 1 + focus: true + anchors.fill: parent + + anchors.topMargin: topMargin + anchors.leftMargin: leftMargin + anchors.rightMargin: rightMargin + (buttonLoader.active ? buttonLoader.width + rightMargin : 0) + anchors.bottomMargin: bottomMargin + + property int topMargin: __style ? __style.padding.top : 0 + property int bottomMargin: __style ? __style.padding.bottom : 0 + property int leftMargin: __style ? __style.padding.left : 0 + property int rightMargin: __style ? __style.padding.right : 0 + + property Item layoutItem: container.children.length === 1 ? container.children[0] : null + property real layoutWidth: layoutItem ? (layoutItem.implicitWidth || layoutItem.width) + + (layoutItem.anchors.fill ? layoutItem.anchors.leftMargin + + layoutItem.anchors.rightMargin : 0) : 0 + property real layoutHeight: layoutItem ? (layoutItem.implicitHeight || layoutItem.height) + + (layoutItem.anchors.fill ? layoutItem.anchors.topMargin + + layoutItem.anchors.bottomMargin : 0) : 0 + }, + Loader { + id: buttonLoader + anchors.right: parent.right + anchors.rightMargin: container.rightMargin + anchors.verticalCenter: parent.verticalCenter + sourceComponent: ToolMenuButton { + menu: toolbar.__menu + panel: toolbar.__style.menuButton || null + } + active: !!__menu && __menu.items.length > 0 && !!__style.menuButton + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ToolButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ToolButton.qml new file mode 100644 index 0000000..1d5e474 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/ToolButton.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ToolButton + \inqmlmodule QtQuick.Controls + \since 5.1 + \ingroup controls + \brief Provides a button type that is typically used within a ToolBar. + + \image toolbar.png + + ToolButton is functionally similar to \l {QtQuick.Controls::}{Button}, but + can provide a look that is more suitable within a \l ToolBar. + + \code + ApplicationWindow { + ... + toolBar: ToolBar { + RowLayout { + ToolButton { + iconSource: "new.png" + } + ToolButton { + iconSource: "open.png" + } + ToolButton { + iconSource: "save-as.png" + } + Item { Layout.fillWidth: true } + CheckBox { + text: "Enabled" + checked: true + } + } + } + } + \endcode + + You can create a custom appearance for a ToolButton by + assigning a \l {ButtonStyle}. +*/ + +Button { + id: button + style: Settings.styleComponent(Settings.style, "ToolButtonStyle.qml", button) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TreeView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TreeView.qml new file mode 100644 index 0000000..2bedb9e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/TreeView.qml @@ -0,0 +1,421 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 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$ +** +****************************************************************************/ + +import QtQuick 2.4 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.2 +import QtQml.Models 2.2 + +BasicTableView { + id: root + + property var model: null + property alias rootIndex: modelAdaptor.rootIndex + + readonly property var currentIndex: modelAdaptor.updateCount, modelAdaptor.mapRowToModelIndex(__currentRow) + property ItemSelectionModel selection: null + + signal activated(var index) + signal clicked(var index) + signal doubleClicked(var index) + signal pressAndHold(var index) + signal expanded(var index) + signal collapsed(var index) + + function isExpanded(index) { + if (index.valid && index.model !== model) { + console.warn("TreeView.isExpanded: model and index mismatch") + return false + } + return modelAdaptor.isExpanded(index) + } + + function collapse(index) { + if (index.valid && index.model !== model) + console.warn("TreeView.collapse: model and index mismatch") + else + modelAdaptor.collapse(index) + } + + function expand(index) { + if (index.valid && index.model !== model) + console.warn("TreeView.expand: model and index mismatch") + else + modelAdaptor.expand(index) + } + + function indexAt(x, y) { + var obj = root.mapToItem(__listView.contentItem, x, y) + return modelAdaptor.mapRowToModelIndex(__listView.indexAt(obj.x, obj.y)) + } + + style: Settings.styleComponent(Settings.style, "TreeViewStyle.qml", root) + + // Internal stuff. Do not look + + __viewTypeName: "TreeView" + + __model: TreeModelAdaptor { + id: modelAdaptor + model: root.model + + // Hack to force re-evaluation of the currentIndex binding + property int updateCount: 0 + onModelReset: updateCount++ + onRowsInserted: updateCount++ + onRowsRemoved: updateCount++ + + onExpanded: root.expanded(index) + onCollapsed: root.collapsed(index) + } + + __itemDelegateLoader: TreeViewItemDelegateLoader { + __style: root.__style + __itemDelegate: root.itemDelegate + __mouseArea: mouseArea + __treeModel: modelAdaptor + } + + onSelectionModeChanged: if (!!selection) selection.clear() + + __mouseArea: MouseArea { + id: mouseArea + + parent: __listView + width: __listView.width + height: __listView.height + z: -1 + propagateComposedEvents: true + focus: true + // If there is not a touchscreen, keep the flickable from eating our mouse drags. + // If there is a touchscreen, flicking is possible, but selection can be done only by tapping, not by dragging. + preventStealing: !Settings.hasTouchScreen + + property var clickedIndex: undefined + property var pressedIndex: undefined + property bool selectOnRelease: false + property int pressedColumn: -1 + readonly property alias currentRow: root.__currentRow + readonly property alias currentIndex: root.currentIndex + + // Handle vertical scrolling whem dragging mouse outside boundaries + property int autoScroll: 0 // 0 -> do nothing; 1 -> increment; 2 -> decrement + property bool shiftPressed: false // forward shift key state to the autoscroll timer + + Timer { + running: mouseArea.autoScroll !== 0 && __verticalScrollBar.visible + interval: 20 + repeat: true + onTriggered: { + var oldPressedIndex = mouseArea.pressedIndex + var row + if (mouseArea.autoScroll === 1) { + __listView.incrementCurrentIndexBlocking(); + row = __listView.indexAt(0, __listView.height + __listView.contentY) + if (row === -1) + row = __listView.count - 1 + } else { + __listView.decrementCurrentIndexBlocking(); + row = __listView.indexAt(0, __listView.contentY) + } + + var index = modelAdaptor.mapRowToModelIndex(row) + if (index !== oldPressedIndex) { + mouseArea.pressedIndex = index + var modifiers = mouseArea.shiftPressed ? Qt.ShiftModifier : Qt.NoModifier + mouseArea.mouseSelect(index, modifiers, true /* drag */) + } + } + } + + function mouseSelect(modelIndex, modifiers, drag) { + if (!selection) { + maybeWarnAboutSelectionMode() + return + } + + if (selectionMode) { + selection.setCurrentIndex(modelIndex, ItemSelectionModel.NoUpdate) + if (selectionMode === SelectionMode.SingleSelection) { + selection.select(modelIndex, ItemSelectionModel.ClearAndSelect) + } else { + var selectRowRange = (drag && (selectionMode === SelectionMode.MultiSelection + || (selectionMode === SelectionMode.ExtendedSelection + && modifiers & Qt.ControlModifier))) + || modifiers & Qt.ShiftModifier + var itemSelection = !selectRowRange || clickedIndex === modelIndex ? modelIndex + : modelAdaptor.selectionForRowRange(clickedIndex, modelIndex) + + if (selectionMode === SelectionMode.MultiSelection + || selectionMode === SelectionMode.ExtendedSelection && modifiers & Qt.ControlModifier) { + if (drag) + selection.select(itemSelection, ItemSelectionModel.ToggleCurrent) + else + selection.select(modelIndex, ItemSelectionModel.Toggle) + } else if (modifiers & Qt.ShiftModifier) { + selection.select(itemSelection, ItemSelectionModel.SelectCurrent) + } else { + clickedIndex = modelIndex // Needed only when drag is true + selection.select(modelIndex, ItemSelectionModel.ClearAndSelect) + } + } + } + } + + function keySelect(keyModifiers) { + if (selectionMode) { + if (!keyModifiers) + clickedIndex = currentIndex + if (!(keyModifiers & Qt.ControlModifier)) + mouseSelect(currentIndex, keyModifiers, keyModifiers & Qt.ShiftModifier) + } + } + + function selected(row) { + if (selectionMode === SelectionMode.NoSelection) + return false + + var modelIndex = null + if (!!selection) { + modelIndex = modelAdaptor.mapRowToModelIndex(row) + if (modelIndex.valid) { + if (selectionMode === SelectionMode.SingleSelection) + return selection.currentIndex === modelIndex + return selection.hasSelection && selection.isSelected(modelIndex) + } else { + return false + } + } + + return row === currentRow + && (selectionMode === SelectionMode.SingleSelection + || (selectionMode > SelectionMode.SingleSelection && !selection)) + } + + function branchDecorationContains(x, y) { + var clickedItem = __listView.itemAt(0, y + __listView.contentY) + if (!(clickedItem && clickedItem.rowItem)) + return false + var branchDecoration = clickedItem.rowItem.branchDecoration + if (!branchDecoration) + return false + var pos = mapToItem(branchDecoration, x, y) + return branchDecoration.contains(Qt.point(pos.x, pos.y)) + } + + function maybeWarnAboutSelectionMode() { + if (selectionMode > SelectionMode.SingleSelection) + console.warn("TreeView: Non-single selection is not supported without an ItemSelectionModel.") + } + + onPressed: { + var pressedRow = __listView.indexAt(0, mouseY + __listView.contentY) + pressedIndex = modelAdaptor.mapRowToModelIndex(pressedRow) + pressedColumn = __listView.columnAt(mouseX) + selectOnRelease = false + __listView.forceActiveFocus() + if (pressedRow === -1 + || Settings.hasTouchScreen + || branchDecorationContains(mouse.x, mouse.y)) { + return + } + if (selectionMode === SelectionMode.ExtendedSelection + && selection.isSelected(pressedIndex)) { + selectOnRelease = true + return + } + __listView.currentIndex = pressedRow + if (!clickedIndex) + clickedIndex = pressedIndex + mouseSelect(pressedIndex, mouse.modifiers, false) + if (!mouse.modifiers) + clickedIndex = pressedIndex + } + + onReleased: { + if (selectOnRelease) { + var releasedRow = __listView.indexAt(0, mouseY + __listView.contentY) + var releasedIndex = modelAdaptor.mapRowToModelIndex(releasedRow) + if (releasedRow >= 0 && releasedIndex === pressedIndex) + mouseSelect(pressedIndex, mouse.modifiers, false) + } + pressedIndex = undefined + pressedColumn = -1 + autoScroll = 0 + selectOnRelease = false + } + + onPositionChanged: { + // NOTE: Testing for pressed is not technically needed, at least + // until we decide to support tooltips or some other hover feature + if (mouseY > __listView.height && pressed) { + if (autoScroll === 1) return; + autoScroll = 1 + } else if (mouseY < 0 && pressed) { + if (autoScroll === 2) return; + autoScroll = 2 + } else { + autoScroll = 0 + } + + if (pressed && containsMouse) { + var oldPressedIndex = pressedIndex + var pressedRow = __listView.indexAt(0, mouseY + __listView.contentY) + pressedIndex = modelAdaptor.mapRowToModelIndex(pressedRow) + pressedColumn = __listView.columnAt(mouseX) + if (pressedRow > -1 && oldPressedIndex !== pressedIndex) { + __listView.currentIndex = pressedRow + mouseSelect(pressedIndex, mouse.modifiers, true /* drag */) + } + } + } + + onExited: { + pressedIndex = undefined + pressedColumn = -1 + selectOnRelease = false + } + + onCanceled: { + pressedIndex = undefined + pressedColumn = -1 + autoScroll = 0 + selectOnRelease = false + } + + onClicked: { + var clickIndex = __listView.indexAt(0, mouseY + __listView.contentY) + if (clickIndex > -1) { + var modelIndex = modelAdaptor.mapRowToModelIndex(clickIndex) + if (branchDecorationContains(mouse.x, mouse.y)) { + if (modelAdaptor.isExpanded(modelIndex)) + modelAdaptor.collapse(modelIndex) + else + modelAdaptor.expand(modelIndex) + } else { + if (Settings.hasTouchScreen) { + // compensate for the fact that onPressed didn't select on press: do it here instead + pressedIndex = modelAdaptor.mapRowToModelIndex(clickIndex) + pressedColumn = __listView.columnAt(mouseX) + selectOnRelease = false + __listView.forceActiveFocus() + __listView.currentIndex = clickIndex + if (!clickedIndex) + clickedIndex = pressedIndex + mouseSelect(pressedIndex, mouse.modifiers, false) + if (!mouse.modifiers) + clickedIndex = pressedIndex + } + if (root.__activateItemOnSingleClick && !mouse.modifiers) + root.activated(modelIndex) + } + root.clicked(modelIndex) + } + } + + onDoubleClicked: { + var clickIndex = __listView.indexAt(0, mouseY + __listView.contentY) + if (clickIndex > -1) { + var modelIndex = modelAdaptor.mapRowToModelIndex(clickIndex) + if (!root.__activateItemOnSingleClick) + root.activated(modelIndex) + root.doubleClicked(modelIndex) + } + } + + onPressAndHold: { + var pressIndex = __listView.indexAt(0, mouseY + __listView.contentY) + if (pressIndex > -1) { + var modelIndex = modelAdaptor.mapRowToModelIndex(pressIndex) + root.pressAndHold(modelIndex) + } + } + + Keys.forwardTo: [root] + + Keys.onUpPressed: { + event.accepted = __listView.decrementCurrentIndexBlocking() + keySelect(event.modifiers) + } + + Keys.onDownPressed: { + event.accepted = __listView.incrementCurrentIndexBlocking() + keySelect(event.modifiers) + } + + Keys.onRightPressed: { + if (root.currentIndex.valid) + root.expand(currentIndex) + else + event.accepted = false + } + + Keys.onLeftPressed: { + if (root.currentIndex.valid) + root.collapse(currentIndex) + else + event.accepted = false + } + + Keys.onReturnPressed: { + if (root.currentIndex.valid) + root.activated(currentIndex) + else + event.accepted = false + } + + Keys.onPressed: { + __listView.scrollIfNeeded(event.key) + + if (event.key === Qt.Key_A && event.modifiers & Qt.ControlModifier + && !!selection && selectionMode > SelectionMode.SingleSelection) { + var sel = modelAdaptor.selectionForRowRange(0, __listView.count - 1) + selection.select(sel, ItemSelectionModel.SelectCurrent) + } else if (event.key === Qt.Key_Shift) { + shiftPressed = true + } + } + + Keys.onReleased: { + if (event.key === Qt.Key_Shift) + shiftPressed = false + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/libqtquickcontrolsplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/libqtquickcontrolsplugin.so new file mode 100755 index 0000000..5eb149e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/libqtquickcontrolsplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/plugins.qmltypes new file mode 100644 index 0000000..0242497 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/plugins.qmltypes @@ -0,0 +1,3439 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick.Controls 1.5' + +Module { + dependencies: [ + "QtGraphicalEffects 1.12", + "QtQml 2.14", + "QtQml.Models 2.2", + "QtQuick 2.9", + "QtQuick.Controls.Styles 1.4", + "QtQuick.Extras 1.4", + "QtQuick.Layouts 1.1", + "QtQuick.Window 2.2" + ] + Component { + name: "QAbstractItemModel" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/AbstractItemModel 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "LayoutChangeHint" + values: { + "NoLayoutChangeHint": 0, + "VerticalSortHint": 1, + "HorizontalSortHint": 2 + } + } + Enum { + name: "CheckIndexOption" + values: { + "NoOption": 0, + "IndexIsValid": 1, + "DoNotUseParent": 2, + "ParentIsInvalid": 4 + } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + Parameter { name: "roles"; type: "QVector" } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + } + Signal { + name: "headerDataChanged" + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutChanged" } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutAboutToBeChanged" } + Signal { + name: "rowsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { name: "modelAboutToBeReset" } + Signal { name: "modelReset" } + Signal { + name: "rowsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationRow"; type: "int" } + } + Signal { + name: "rowsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "row"; type: "int" } + } + Signal { + name: "columnsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationColumn"; type: "int" } + } + Signal { + name: "columnsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "column"; type: "int" } + } + Method { name: "submit"; type: "bool" } + Method { name: "revert" } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "parent" + type: "QModelIndex" + Parameter { name: "child"; type: "QModelIndex" } + } + Method { + name: "sibling" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "idx"; type: "QModelIndex" } + } + Method { + name: "rowCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "rowCount"; type: "int" } + Method { + name: "columnCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "columnCount"; type: "int" } + Method { + name: "hasChildren" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "hasChildren"; type: "bool" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + } + Method { + name: "fetchMore" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "canFetchMore" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "flags" + type: "Qt::ItemFlags" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + Parameter { name: "flags"; type: "Qt::MatchFlags" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } + Component { + name: "QQuickAbstractStyle1" + defaultProperty: "data" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/AbstractStyle 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "padding"; type: "QQuickPadding1"; isReadonly: true; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + name: "QQuickAction1" + prototype: "QObject" + exports: ["QtQuick.Controls/Action 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "text"; type: "string" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "__icon"; type: "QVariant"; isReadonly: true } + Property { name: "tooltip"; type: "string" } + Property { name: "enabled"; type: "bool" } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "shortcut"; type: "QVariant" } + Signal { + name: "triggered" + Parameter { name: "source"; type: "QObject"; isPointer: true } + } + Signal { name: "triggered" } + Signal { + name: "toggled" + Parameter { name: "checked"; type: "bool" } + } + Signal { + name: "shortcutChanged" + Parameter { name: "shortcut"; type: "QVariant" } + } + Signal { name: "iconChanged" } + Signal { + name: "tooltipChanged" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "trigger" + Parameter { name: "source"; type: "QObject"; isPointer: true } + } + Method { name: "trigger" } + } + Component { + name: "QQuickCalendarModel1" + prototype: "QAbstractListModel" + exports: ["QtQuick.Controls.Private/CalendarModel 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "visibleDate"; type: "QDate" } + Property { name: "locale"; type: "QLocale" } + Property { name: "count"; type: "int"; isReadonly: true } + Signal { + name: "visibleDateChanged" + Parameter { name: "visibleDate"; type: "QDate" } + } + Signal { + name: "localeChanged" + Parameter { name: "locale"; type: "QLocale" } + } + Signal { + name: "countChanged" + Parameter { name: "count"; type: "int" } + } + Method { + name: "dateAt" + type: "QDateTime" + Parameter { name: "index"; type: "int" } + } + Method { + name: "indexAt" + type: "int" + Parameter { name: "visibleDate"; type: "QDate" } + } + Method { + name: "weekNumberAt" + type: "int" + Parameter { name: "row"; type: "int" } + } + } + Component { + name: "QQuickControlSettings1" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/Settings 1.0"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Property { name: "style"; type: "QUrl"; isReadonly: true } + Property { name: "styleName"; type: "string" } + Property { name: "stylePath"; type: "string" } + Property { name: "dpiScaleFactor"; type: "double"; isReadonly: true } + Property { name: "dragThreshold"; type: "double"; isReadonly: true } + Property { name: "hasTouchScreen"; type: "bool"; isReadonly: true } + Property { name: "isMobile"; type: "bool"; isReadonly: true } + Property { name: "hoverEnabled"; type: "bool"; isReadonly: true } + Method { + name: "styleComponent" + type: "QQmlComponent*" + Parameter { name: "styleDirUrl"; type: "QUrl" } + Parameter { name: "controlStyleName"; type: "string" } + Parameter { name: "control"; type: "QObject"; isPointer: true } + } + } + Component { + name: "QQuickControlsPrivate1" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/Controls 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickControlsPrivate1Attached" + } + Component { + name: "QQuickControlsPrivate1Attached" + prototype: "QObject" + Property { name: "window"; type: "QQuickWindow"; isReadonly: true; isPointer: true } + } + Component { + name: "QQuickExclusiveGroup1" + defaultProperty: "__actions" + prototype: "QObject" + exports: ["QtQuick.Controls/ExclusiveGroup 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "current"; type: "QObject"; isPointer: true } + Property { name: "__actions"; type: "QQuickAction1"; isList: true; isReadonly: true } + Method { + name: "bindCheckable" + Parameter { name: "o"; type: "QObject"; isPointer: true } + } + Method { + name: "unbindCheckable" + Parameter { name: "o"; type: "QObject"; isPointer: true } + } + } + Component { + name: "QQuickMenu1" + defaultProperty: "items" + prototype: "QQuickMenuText1" + exports: ["QtQuick.Controls.Private/MenuPrivate 1.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "MenuType" + values: { + "DefaultMenu": 0, + "EditMenu": 1 + } + } + Property { name: "title"; type: "string" } + Property { name: "items"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "__selectedIndex"; type: "int" } + Property { name: "__popupVisible"; type: "bool"; isReadonly: true } + Property { name: "__contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__minimumWidth"; type: "int" } + Property { name: "__font"; type: "QFont" } + Property { name: "__xOffset"; type: "double" } + Property { name: "__yOffset"; type: "double" } + Property { name: "__action"; type: "QQuickAction1"; isReadonly: true; isPointer: true } + Property { name: "__popupGeometry"; type: "QRect"; isReadonly: true } + Property { name: "__isProxy"; type: "bool" } + Signal { name: "aboutToShow" } + Signal { name: "aboutToHide" } + Signal { name: "popupVisibleChanged" } + Signal { name: "__menuPopupDestroyed" } + Signal { name: "menuContentItemChanged" } + Signal { name: "minimumWidthChanged" } + Signal { name: "__proxyChanged" } + Method { name: "__dismissMenu" } + Method { name: "__closeAndDestroy" } + Method { name: "__dismissAndDestroy" } + Method { name: "popup" } + Method { + name: "addItem" + type: "QQuickMenuItem1*" + Parameter { type: "string" } + } + Method { + name: "insertItem" + type: "QQuickMenuItem1*" + Parameter { type: "int" } + Parameter { type: "string" } + } + Method { name: "addSeparator" } + Method { + name: "insertSeparator" + Parameter { type: "int" } + } + Method { + name: "insertItem" + Parameter { type: "int" } + Parameter { type: "QQuickMenuBase1"; isPointer: true } + } + Method { + name: "removeItem" + Parameter { type: "QQuickMenuBase1"; isPointer: true } + } + Method { name: "clear" } + Method { + name: "__popup" + Parameter { name: "targetRect"; type: "QRectF" } + Parameter { name: "atItemIndex"; type: "int" } + Parameter { name: "menuType"; type: "MenuType" } + } + Method { + name: "__popup" + Parameter { name: "targetRect"; type: "QRectF" } + Parameter { name: "atItemIndex"; type: "int" } + } + Method { + name: "__popup" + Parameter { name: "targetRect"; type: "QRectF" } + } + } + Component { + name: "QQuickMenuBar1" + defaultProperty: "menus" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/MenuBarPrivate 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "menus"; type: "QQuickMenu1"; isList: true; isReadonly: true } + Property { name: "__contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__parentWindow"; type: "QQuickWindow"; isPointer: true } + Property { name: "__isNative"; type: "bool" } + Signal { name: "nativeChanged" } + Signal { name: "contentItemChanged" } + } + Component { + name: "QQuickMenuBase1" + prototype: "QObject" + exports: ["QtQuick.Controls/MenuBase 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "visible"; type: "bool" } + Property { name: "type"; type: "QQuickMenuItemType1::MenuItemType"; isReadonly: true } + Property { name: "__parentMenu"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "__isNative"; type: "bool"; isReadonly: true } + Property { name: "__visualItem"; type: "QQuickItem"; isPointer: true } + } + Component { + name: "QQuickMenuItem1" + prototype: "QQuickMenuText1" + exports: ["QtQuick.Controls/MenuItem 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "text"; type: "string" } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "shortcut"; type: "QVariant" } + Property { name: "action"; type: "QQuickAction1"; isPointer: true } + Signal { name: "triggered" } + Signal { + name: "toggled" + Parameter { name: "checked"; type: "bool" } + } + Method { name: "trigger" } + } + Component { + name: "QQuickMenuItemType1" + exports: ["QtQuick.Controls/MenuItemType 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "MenuItemType" + values: { + "Separator": 0, + "Item": 1, + "Menu": 2, + "ScrollIndicator": 3 + } + } + } + Component { + name: "QQuickMenuSeparator1" + prototype: "QQuickMenuBase1" + exports: ["QtQuick.Controls/MenuSeparator 1.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickMenuText1" + prototype: "QQuickMenuBase1" + Property { name: "enabled"; type: "bool" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "__icon"; type: "QVariant"; isReadonly: true } + Signal { name: "__textChanged" } + } + Component { + name: "QQuickPadding1" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/Padding 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "left"; type: "int" } + Property { name: "top"; type: "int" } + Property { name: "right"; type: "int" } + Property { name: "bottom"; type: "int" } + Method { + name: "setLeft" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setTop" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setRight" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setBottom" + Parameter { name: "arg"; type: "int" } + } + } + Component { + name: "QQuickPopupWindow1" + defaultProperty: "popupContentItem" + prototype: "QQuickWindow" + exports: ["QtQuick.Controls.Private/PopupWindow 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "popupContentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "parentItem"; type: "QQuickItem"; isPointer: true } + Signal { name: "popupDismissed" } + Signal { name: "geometryChanged" } + Method { name: "show" } + Method { name: "dismissPopup" } + } + Component { + name: "QQuickRangeModel1" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/RangeModel 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "value"; type: "double" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "stepSize"; type: "double" } + Property { name: "position"; type: "double" } + Property { name: "positionAtMinimum"; type: "double" } + Property { name: "positionAtMaximum"; type: "double" } + Property { name: "inverted"; type: "bool" } + Signal { + name: "valueChanged" + Parameter { name: "value"; type: "double" } + } + Signal { + name: "positionChanged" + Parameter { name: "position"; type: "double" } + } + Signal { + name: "stepSizeChanged" + Parameter { name: "stepSize"; type: "double" } + } + Signal { + name: "invertedChanged" + Parameter { name: "inverted"; type: "bool" } + } + Signal { + name: "minimumChanged" + Parameter { name: "min"; type: "double" } + } + Signal { + name: "maximumChanged" + Parameter { name: "max"; type: "double" } + } + Signal { + name: "positionAtMinimumChanged" + Parameter { name: "min"; type: "double" } + } + Signal { + name: "positionAtMaximumChanged" + Parameter { name: "max"; type: "double" } + } + Method { name: "toMinimum" } + Method { name: "toMaximum" } + Method { + name: "setValue" + Parameter { name: "value"; type: "double" } + } + Method { + name: "setPosition" + Parameter { name: "position"; type: "double" } + } + Method { name: "increaseSingleStep" } + Method { name: "decreaseSingleStep" } + Method { + name: "valueForPosition" + type: "double" + Parameter { name: "position"; type: "double" } + } + Method { + name: "positionForValue" + type: "double" + Parameter { name: "value"; type: "double" } + } + } + Component { + name: "QQuickRangedDate1" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/RangedDate 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "date"; type: "QDateTime" } + Property { name: "minimumDate"; type: "QDateTime" } + Property { name: "maximumDate"; type: "QDateTime" } + } + Component { + name: "QQuickRootItem" + defaultProperty: "data" + prototype: "QQuickItem" + Method { + name: "setWidth" + Parameter { name: "w"; type: "int" } + } + Method { + name: "setHeight" + Parameter { name: "h"; type: "int" } + } + } + Component { + name: "QQuickScenePosListener1" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/ScenePosListener 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "item"; type: "QQuickItem"; isPointer: true } + Property { name: "scenePos"; type: "QPointF"; isReadonly: true } + Property { name: "enabled"; type: "bool" } + } + Component { + name: "QQuickSelectionMode1" + exports: ["QtQuick.Controls/SelectionMode 1.1"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "SelectionMode" + values: { + "NoSelection": 0, + "SingleSelection": 1, + "ExtendedSelection": 2, + "MultiSelection": 3, + "ContiguousSelection": 4 + } + } + } + Component { + name: "QQuickSpinBoxValidator1" + prototype: "QValidator" + exports: ["QtQuick.Controls.Private/SpinBoxValidator 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "text"; type: "string"; isReadonly: true } + Property { name: "value"; type: "double" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "decimals"; type: "int" } + Property { name: "stepSize"; type: "double" } + Property { name: "prefix"; type: "string" } + Property { name: "suffix"; type: "string" } + Method { name: "increment" } + Method { name: "decrement" } + } + Component { + name: "QQuickStack1" + prototype: "QObject" + exports: ["QtQuick.Controls/Stack 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "Status" + values: { + "Inactive": 0, + "Deactivating": 1, + "Activating": 2, + "Active": 3 + } + } + Property { name: "index"; type: "int"; isReadonly: true } + Property { name: "__index"; type: "int" } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "__status"; type: "Status" } + Property { name: "view"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "__view"; type: "QQuickItem"; isPointer: true } + } + Component { + name: "QQuickStyleItem1" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.Private/StyleItem 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "border"; type: "QQuickPadding1"; isReadonly: true; isPointer: true } + Property { name: "sunken"; type: "bool" } + Property { name: "raised"; type: "bool" } + Property { name: "active"; type: "bool" } + Property { name: "selected"; type: "bool" } + Property { name: "hasFocus"; type: "bool" } + Property { name: "on"; type: "bool" } + Property { name: "hover"; type: "bool" } + Property { name: "horizontal"; type: "bool" } + Property { name: "isTransient"; type: "bool" } + Property { name: "elementType"; type: "string" } + Property { name: "text"; type: "string" } + Property { name: "activeControl"; type: "string" } + Property { name: "style"; type: "string"; isReadonly: true } + Property { name: "hints"; type: "QVariantMap" } + Property { name: "properties"; type: "QVariantMap" } + Property { name: "font"; type: "QFont"; isReadonly: true } + Property { name: "minimum"; type: "int" } + Property { name: "maximum"; type: "int" } + Property { name: "value"; type: "int" } + Property { name: "step"; type: "int" } + Property { name: "paintMargins"; type: "int" } + Property { name: "contentWidth"; type: "int" } + Property { name: "contentHeight"; type: "int" } + Property { name: "textureWidth"; type: "int" } + Property { name: "textureHeight"; type: "int" } + Signal { name: "transientChanged" } + Signal { name: "infoChanged" } + Signal { name: "hintChanged" } + Signal { + name: "contentWidthChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "contentHeightChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "textureWidthChanged" + Parameter { name: "w"; type: "int" } + } + Signal { + name: "textureHeightChanged" + Parameter { name: "h"; type: "int" } + } + Method { + name: "pixelMetric" + type: "int" + Parameter { type: "string" } + } + Method { + name: "styleHint" + type: "QVariant" + Parameter { type: "string" } + } + Method { name: "updateSizeHint" } + Method { name: "updateRect" } + Method { name: "updateBaselineOffset" } + Method { name: "updateItem" } + Method { + name: "hitTest" + type: "string" + Parameter { name: "x"; type: "int" } + Parameter { name: "y"; type: "int" } + } + Method { + name: "subControlRect" + type: "QRectF" + Parameter { name: "subcontrolString"; type: "string" } + } + Method { + name: "elidedText" + type: "string" + Parameter { name: "text"; type: "string" } + Parameter { name: "elideMode"; type: "int" } + Parameter { name: "width"; type: "int" } + } + Method { + name: "hasThemeIcon" + type: "bool" + Parameter { type: "string" } + } + Method { + name: "textWidth" + type: "double" + Parameter { type: "string" } + } + Method { + name: "textHeight" + type: "double" + Parameter { type: "string" } + } + } + Component { + name: "QQuickTooltip1" + prototype: "QObject" + exports: ["QtQuick.Controls.Private/Tooltip 1.0"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Method { + name: "showText" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + Parameter { name: "pos"; type: "QPointF" } + Parameter { name: "text"; type: "string" } + } + Method { name: "hideText" } + } + Component { + name: "QQuickTreeModelAdaptor1" + prototype: "QAbstractListModel" + exports: ["QtQuick.Controls.Private/TreeModelAdaptor 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "model"; type: "QAbstractItemModel"; isPointer: true } + Property { name: "rootIndex"; type: "QModelIndex" } + Signal { + name: "modelChanged" + Parameter { name: "model"; type: "QAbstractItemModel"; isPointer: true } + } + Signal { + name: "expanded" + Parameter { name: "index"; type: "QModelIndex" } + } + Signal { + name: "collapsed" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "expand" + Parameter { type: "QModelIndex" } + } + Method { + name: "collapse" + Parameter { type: "QModelIndex" } + } + Method { + name: "setModel" + Parameter { name: "model"; type: "QAbstractItemModel"; isPointer: true } + } + Method { + name: "mapRowToModelIndex" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + } + Method { + name: "selectionForRowRange" + type: "QItemSelection" + Parameter { name: "fromIndex"; type: "QModelIndex" } + Parameter { name: "toIndex"; type: "QModelIndex" } + } + Method { + name: "isExpanded" + type: "bool" + Parameter { type: "QModelIndex" } + } + } + Component { + name: "QQuickWheelArea1" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Controls.Private/WheelArea 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "verticalDelta"; type: "double" } + Property { name: "horizontalDelta"; type: "double" } + Property { name: "horizontalMinimumValue"; type: "double" } + Property { name: "horizontalMaximumValue"; type: "double" } + Property { name: "verticalMinimumValue"; type: "double" } + Property { name: "verticalMaximumValue"; type: "double" } + Property { name: "horizontalValue"; type: "double" } + Property { name: "verticalValue"; type: "double" } + Property { name: "scrollSpeed"; type: "double" } + Property { name: "active"; type: "bool" } + Property { name: "inverted"; type: "bool"; isReadonly: true } + Signal { name: "verticalWheelMoved" } + Signal { name: "horizontalWheelMoved" } + } + Component { + prototype: "QQuickWindowQmlImpl" + name: "QtQuick.Controls/ApplicationWindow 1.0" + exports: ["QtQuick.Controls/ApplicationWindow 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "menuBar"; type: "MenuBar_QMLTYPE_4"; isPointer: true } + Property { name: "toolBar"; type: "QQuickItem"; isPointer: true } + Property { name: "statusBar"; type: "QQuickItem"; isPointer: true } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__topBottomMargins"; type: "double" } + Property { name: "__qwindowsize_max"; type: "double"; isReadonly: true } + Property { name: "__width"; type: "double" } + Property { name: "__height"; type: "double" } + Property { name: "contentItem"; type: "ContentItem_QMLTYPE_2"; isReadonly: true; isPointer: true } + Property { name: "__style"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "__panel"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + prototype: "QObject" + name: "QtQuick.Controls.Styles/ApplicationWindowStyle 1.3" + exports: ["QtQuick.Controls.Styles/ApplicationWindowStyle 1.3"] + exportMetaObjectRevisions: [3] + isComposite: true + Property { + name: "control" + type: "ApplicationWindow_QMLTYPE_14" + isReadonly: true + isPointer: true + } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/BusyIndicator 1.1" + exports: ["QtQuick.Controls/BusyIndicator 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "running"; type: "bool" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/BusyIndicatorStyle 1.1" + exports: ["QtQuick.Controls.Styles/BusyIndicatorStyle 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "BusyIndicator_QMLTYPE_21"; isReadonly: true; isPointer: true } + Property { name: "indicator"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/Button 1.0" + exports: ["QtQuick.Controls/Button 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "isDefault"; type: "bool" } + Property { name: "menu"; type: "Menu_QMLTYPE_55"; isPointer: true } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "action"; type: "QQuickAction1"; isPointer: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "text"; type: "string" } + Property { name: "tooltip"; type: "string" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "__position"; type: "string" } + Property { name: "__iconOverriden"; type: "bool"; isReadonly: true } + Property { name: "__action"; type: "QQuickAction1"; isPointer: true } + Property { name: "__iconAction"; type: "QQuickAction1"; isReadonly: true; isPointer: true } + Property { name: "__behavior"; type: "QVariant" } + Property { name: "__effectivePressed"; type: "bool" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + Method { name: "accessiblePressAction"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/ButtonStyle 1.0" + exports: ["QtQuick.Controls.Styles/ButtonStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "Button_QMLTYPE_60"; isReadonly: true; isPointer: true } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "label"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/Calendar 1.2" + exports: ["QtQuick.Controls/Calendar 1.2"] + exportMetaObjectRevisions: [2] + isComposite: true + defaultProperty: "data" + Property { name: "visibleMonth"; type: "int" } + Property { name: "visibleYear"; type: "int" } + Property { name: "frameVisible"; type: "bool" } + Property { name: "weekNumbersVisible"; type: "bool" } + Property { name: "navigationBarVisible"; type: "bool" } + Property { name: "dayOfWeekFormat"; type: "int" } + Property { name: "locale"; type: "QVariant" } + Property { name: "__model"; type: "QQuickCalendarModel1"; isPointer: true } + Property { name: "selectedDate"; type: "QDateTime" } + Property { name: "minimumDate"; type: "QDateTime" } + Property { name: "maximumDate"; type: "QDateTime" } + Property { name: "__locale"; type: "QVariant" } + Signal { + name: "hovered" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "pressed" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "released" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "clicked" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "doubleClicked" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "pressAndHold" + Parameter { name: "date"; type: "QDateTime" } + } + Method { name: "showPreviousMonth"; type: "QVariant" } + Method { name: "showNextMonth"; type: "QVariant" } + Method { name: "showPreviousYear"; type: "QVariant" } + Method { name: "showNextYear"; type: "QVariant" } + Method { name: "__selectPreviousMonth"; type: "QVariant" } + Method { name: "__selectNextMonth"; type: "QVariant" } + Method { name: "__selectPreviousWeek"; type: "QVariant" } + Method { name: "__selectNextWeek"; type: "QVariant" } + Method { name: "__selectFirstDayOfMonth"; type: "QVariant" } + Method { name: "__selectLastDayOfMonth"; type: "QVariant" } + Method { name: "__selectPreviousDay"; type: "QVariant" } + Method { name: "__selectNextDay"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/Calendar 1.6" + exports: ["QtQuick.Controls/Calendar 1.6"] + exportMetaObjectRevisions: [6] + isComposite: true + defaultProperty: "data" + Property { name: "visibleMonth"; type: "int" } + Property { name: "visibleYear"; type: "int" } + Property { name: "frameVisible"; type: "bool" } + Property { name: "weekNumbersVisible"; type: "bool" } + Property { name: "navigationBarVisible"; type: "bool" } + Property { name: "dayOfWeekFormat"; type: "int" } + Property { name: "locale"; type: "QVariant" } + Property { name: "__model"; type: "QQuickCalendarModel1"; isPointer: true } + Property { name: "selectedDate"; type: "QDateTime" } + Property { name: "minimumDate"; type: "QDateTime" } + Property { name: "maximumDate"; type: "QDateTime" } + Property { name: "__locale"; type: "QVariant" } + Signal { + name: "hovered" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "pressed" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "released" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "clicked" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "doubleClicked" + Parameter { name: "date"; type: "QDateTime" } + } + Signal { + name: "pressAndHold" + Parameter { name: "date"; type: "QDateTime" } + } + Method { name: "showPreviousMonth"; type: "QVariant" } + Method { name: "showNextMonth"; type: "QVariant" } + Method { name: "showPreviousYear"; type: "QVariant" } + Method { name: "showNextYear"; type: "QVariant" } + Method { name: "__selectPreviousMonth"; type: "QVariant" } + Method { name: "__selectNextMonth"; type: "QVariant" } + Method { name: "__selectPreviousWeek"; type: "QVariant" } + Method { name: "__selectNextWeek"; type: "QVariant" } + Method { name: "__selectFirstDayOfMonth"; type: "QVariant" } + Method { name: "__selectLastDayOfMonth"; type: "QVariant" } + Method { name: "__selectPreviousDay"; type: "QVariant" } + Method { name: "__selectNextDay"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/CalendarStyle 1.1" + exports: ["QtQuick.Controls.Styles/CalendarStyle 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "Calendar_QMLTYPE_65"; isReadonly: true; isPointer: true } + Property { name: "gridColor"; type: "QColor" } + Property { name: "gridVisible"; type: "bool" } + Property { name: "__gridLineWidth"; type: "double" } + Property { name: "__horizontalSeparatorColor"; type: "QColor" } + Property { name: "__verticalSeparatorColor"; type: "QColor" } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "navigationBar"; type: "QQmlComponent"; isPointer: true } + Property { name: "dayDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "dayOfWeekDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "weekNumberDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Method { + name: "__cellRectAt" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "__isValidDate" + type: "QVariant" + Parameter { name: "date"; type: "QVariant" } + } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/CheckBox 1.0" + exports: ["QtQuick.Controls/CheckBox 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "checkedState"; type: "int" } + Property { name: "partiallyCheckedEnabled"; type: "bool" } + Property { name: "__ignoreChecked"; type: "bool" } + Property { name: "__ignoreCheckedState"; type: "bool" } + Method { name: "__cycleCheckBoxStates"; type: "QVariant" } + Property { name: "checked"; type: "bool" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "text"; type: "string" } + Property { name: "tooltip"; type: "string" } + Property { name: "__cycleStatesHandler"; type: "QVariant" } + Property { name: "pressed"; type: "bool" } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/CheckBoxStyle 1.0" + exports: ["QtQuick.Controls.Styles/CheckBoxStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "CheckBox_QMLTYPE_88"; isReadonly: true; isPointer: true } + Property { name: "label"; type: "QQmlComponent"; isPointer: true } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "spacing"; type: "int" } + Property { name: "indicator"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/CircularButtonStyle 1.0" + exports: ["QtQuick.Controls.Styles/CircularButtonStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { + name: "__buttonHelper" + type: "CircularButtonStyleHelper_QMLTYPE_93" + isReadonly: true + isPointer: true + } + Property { name: "control"; type: "Button_QMLTYPE_60"; isReadonly: true; isPointer: true } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "label"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/CircularGaugeStyle 1.0" + exports: ["QtQuick.Controls.Styles/CircularGaugeStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "CircularGauge_QMLTYPE_97"; isReadonly: true; isPointer: true } + Property { name: "outerRadius"; type: "double"; isReadonly: true } + Property { name: "minimumValueAngle"; type: "double" } + Property { name: "maximumValueAngle"; type: "double" } + Property { name: "angleRange"; type: "double"; isReadonly: true } + Property { name: "needleRotation"; type: "double" } + Property { name: "tickmarkStepSize"; type: "double" } + Property { name: "tickmarkInset"; type: "double" } + Property { name: "tickmarkCount"; type: "int"; isReadonly: true } + Property { name: "minorTickmarkCount"; type: "int" } + Property { name: "minorTickmarkInset"; type: "double" } + Property { name: "labelInset"; type: "double" } + Property { name: "labelStepSize"; type: "double" } + Property { name: "labelCount"; type: "int"; isReadonly: true } + Property { name: "__protectedScope"; type: "QObject"; isPointer: true } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "tickmark"; type: "QQmlComponent"; isPointer: true } + Property { name: "minorTickmark"; type: "QQmlComponent"; isPointer: true } + Property { name: "tickmarkLabel"; type: "QQmlComponent"; isPointer: true } + Property { name: "needle"; type: "QQmlComponent"; isPointer: true } + Property { name: "foreground"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Method { + name: "valueToAngle" + type: "QVariant" + Parameter { name: "value"; type: "QVariant" } + } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/CircularTickmarkLabelStyle 1.0" + exports: ["QtQuick.Controls.Styles/CircularTickmarkLabelStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "outerRadius"; type: "double"; isReadonly: true } + Property { name: "__protectedScope"; type: "QObject"; isPointer: true } + Property { name: "tickmark"; type: "QQmlComponent"; isPointer: true } + Property { name: "minorTickmark"; type: "QQmlComponent"; isPointer: true } + Property { name: "tickmarkLabel"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Property { name: "control"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/ComboBox 1.0" + exports: ["QtQuick.Controls/ComboBox 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "textRole"; type: "string" } + Property { name: "editable"; type: "bool" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "menu"; type: "QQmlComponent"; isPointer: true } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "__popup"; type: "QVariant" } + Property { name: "model"; type: "QVariant" } + Property { name: "currentIndex"; type: "int" } + Property { name: "currentText"; type: "string"; isReadonly: true } + Property { name: "editText"; type: "string" } + Property { name: "inputMethodHints"; type: "int" } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "validator"; type: "QValidator"; isPointer: true } + Property { name: "acceptableInput"; type: "bool"; isReadonly: true } + Signal { name: "accepted" } + Signal { + name: "activated" + Parameter { name: "index"; type: "int" } + } + Method { + name: "textAt" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "find" + type: "QVariant" + Parameter { name: "text"; type: "QVariant" } + } + Method { name: "selectAll"; type: "QVariant" } + Method { name: "__selectPrevItem"; type: "QVariant" } + Method { name: "__selectNextItem"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/ComboBoxStyle 1.0" + exports: ["QtQuick.Controls.Styles/ComboBoxStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "renderType"; type: "int" } + Property { name: "font"; type: "QFont" } + Property { name: "textColor"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "selectedTextColor"; type: "QColor" } + Property { name: "control"; type: "ComboBox_QMLTYPE_120"; isReadonly: true; isPointer: true } + Property { name: "dropDownButtonWidth"; type: "int" } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "__editor"; type: "QQmlComponent"; isPointer: true } + Property { name: "label"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Property { name: "__dropDownStyle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__popupStyle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__cursorHandle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__selectionHandle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__cursorDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "drowDownButtonWidth"; type: "int" } + } + Component { + prototype: "QObject" + name: "QtQuick.Controls.Styles/CommonStyleHelper 1.0" + exports: ["QtQuick.Controls.Styles/CommonStyleHelper 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "buttonColorUpTop"; type: "QColor" } + Property { name: "buttonColorUpBottom"; type: "QColor" } + Property { name: "buttonColorDownTop"; type: "QColor" } + Property { name: "buttonColorDownBottom"; type: "QColor" } + Property { name: "textColorUp"; type: "QColor" } + Property { name: "textColorDown"; type: "QColor" } + Property { name: "textRaisedColorUp"; type: "QColor" } + Property { name: "textRaisedColorDown"; type: "QColor" } + Property { name: "offColor"; type: "QColor" } + Property { name: "offColorShine"; type: "QColor" } + Property { name: "onColor"; type: "QColor" } + Property { name: "onColorShine"; type: "QColor" } + Property { name: "inactiveColor"; type: "QColor" } + Property { name: "inactiveColorShine"; type: "QColor" } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/DelayButtonStyle 1.0" + exports: ["QtQuick.Controls.Styles/DelayButtonStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "DelayButton_QMLTYPE_159"; isReadonly: true; isPointer: true } + Property { name: "progressBarGradient"; type: "QQuickGradient"; isPointer: true } + Property { name: "progressBarDropShadowColor"; type: "QColor" } + Property { name: "foreground"; type: "QQmlComponent"; isPointer: true } + Property { + name: "__buttonHelper" + type: "CircularButtonStyleHelper_QMLTYPE_93" + isReadonly: true + isPointer: true + } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "label"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/DialStyle 1.1" + exports: ["QtQuick.Controls.Styles/DialStyle 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "Dial_QMLTYPE_165"; isReadonly: true; isPointer: true } + Property { name: "outerRadius"; type: "double"; isReadonly: true } + Property { name: "handleInset"; type: "double" } + Property { name: "tickmarkStepSize"; type: "double" } + Property { name: "tickmarkInset"; type: "double" } + Property { name: "tickmarkCount"; type: "int"; isReadonly: true } + Property { name: "minorTickmarkCount"; type: "int" } + Property { name: "minorTickmarkInset"; type: "double" } + Property { name: "labelInset"; type: "double" } + Property { name: "labelStepSize"; type: "double" } + Property { name: "labelCount"; type: "int"; isReadonly: true } + Property { name: "__tickmarkRadius"; type: "double"; isReadonly: true } + Property { name: "__handleRadius"; type: "double"; isReadonly: true } + Property { name: "__dragToSet"; type: "bool" } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Property { name: "tickmark"; type: "QQmlComponent"; isPointer: true } + Property { name: "minorTickmark"; type: "QQmlComponent"; isPointer: true } + Property { name: "tickmarkLabel"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Method { + name: "valueToAngle" + type: "QVariant" + Parameter { name: "value"; type: "QVariant" } + } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/GaugeStyle 1.0" + exports: ["QtQuick.Controls.Styles/GaugeStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "Gauge_QMLTYPE_173"; isReadonly: true; isPointer: true } + Property { name: "valuePosition"; type: "double"; isReadonly: true } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "tickmark"; type: "QQmlComponent"; isPointer: true } + Property { name: "minorTickmark"; type: "QQmlComponent"; isPointer: true } + Property { name: "tickmarkLabel"; type: "QQmlComponent"; isPointer: true } + Property { name: "valueBar"; type: "QQmlComponent"; isPointer: true } + Property { name: "foreground"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/GroupBox 1.0" + exports: ["QtQuick.Controls/GroupBox 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "__content" + Property { name: "title"; type: "string" } + Property { name: "flat"; type: "bool" } + Property { name: "checkable"; type: "bool" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "checked"; type: "bool" } + Property { name: "__content"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "__checkbox"; type: "CheckBox_QMLTYPE_88"; isReadonly: true; isPointer: true } + Property { name: "__style"; type: "QObject"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/HandleStyle 1.0" + exports: ["QtQuick.Controls.Styles/HandleStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Property { name: "handleColorTop"; type: "QColor" } + Property { name: "handleColorBottom"; type: "QColor" } + Property { name: "handleColorBottomStop"; type: "double" } + Property { name: "control"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QObject" + name: "QtQuick.Controls.Styles/HandleStyleHelper 1.0" + exports: ["QtQuick.Controls.Styles/HandleStyleHelper 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + Property { name: "handleColorTop"; type: "QColor" } + Property { name: "handleColorBottom"; type: "QColor" } + Property { name: "handleColorBottomStop"; type: "double" } + Property { name: "handleRingColorTop"; type: "QColor" } + Property { name: "handleRingColorBottom"; type: "QColor" } + Method { + name: "paintHandle" + type: "QVariant" + Parameter { name: "ctx"; type: "QVariant" } + Parameter { name: "handleX"; type: "QVariant" } + Parameter { name: "handleY"; type: "QVariant" } + Parameter { name: "handleWidth"; type: "QVariant" } + Parameter { name: "handleHeight"; type: "QVariant" } + } + } + Component { + prototype: "QQuickText" + name: "QtQuick.Controls/Label 1.0" + exports: ["QtQuick.Controls/Label 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + } + Component { + prototype: "QQuickMenu1" + name: "QtQuick.Controls/Menu 1.0" + exports: ["QtQuick.Controls/Menu 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "items" + Property { name: "__selfComponent"; type: "QQmlComponent"; isPointer: true } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__usingDefaultStyle"; type: "bool" } + Property { name: "__parentContentItem"; type: "QVariant" } + Property { name: "__currentIndex"; type: "int" } + Method { + name: "addMenu" + type: "QVariant" + Parameter { name: "title"; type: "QVariant" } + } + Method { + name: "insertMenu" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + Parameter { name: "title"; type: "QVariant" } + } + } + Component { + prototype: "QQuickMenuBar1" + name: "QtQuick.Controls/MenuBar 1.0" + exports: ["QtQuick.Controls/MenuBar 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "menus" + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__menuBarComponent"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/MenuBarStyle 1.2" + exports: ["QtQuick.Controls.Styles/MenuBarStyle 1.2"] + exportMetaObjectRevisions: [2] + isComposite: true + defaultProperty: "data" + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "itemDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "menuStyle"; type: "QQmlComponent"; isPointer: true } + Property { name: "font"; type: "QFont" } + Property { name: "__isNative"; type: "bool" } + Method { + name: "formatMnemonic" + type: "QVariant" + Parameter { name: "text"; type: "QVariant" } + Parameter { name: "underline"; type: "QVariant" } + } + Property { name: "control"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/MenuStyle 1.2" + exports: ["QtQuick.Controls.Styles/MenuStyle 1.2"] + exportMetaObjectRevisions: [2] + isComposite: true + defaultProperty: "data" + Property { name: "submenuOverlap"; type: "int" } + Property { name: "submenuPopupDelay"; type: "int" } + Property { name: "frame"; type: "QQmlComponent"; isPointer: true } + Property { name: "separator"; type: "QQmlComponent"; isPointer: true } + Property { name: "scrollIndicator"; type: "QQmlComponent"; isPointer: true } + Property { name: "font"; type: "QFont" } + Property { name: "__menuItemType"; type: "string" } + Property { name: "__backgroundColor"; type: "QColor" } + Property { name: "__borderColor"; type: "QColor" } + Property { name: "__maxPopupHeight"; type: "int" } + Property { name: "__selectedBackgroundColor"; type: "QColor" } + Property { name: "__labelColor"; type: "QColor" } + Property { name: "__selectedLabelColor"; type: "QColor" } + Property { name: "__disabledLabelColor"; type: "QColor" } + Property { name: "__mirrored"; type: "bool"; isReadonly: true } + Property { name: "__leftLabelMargin"; type: "int" } + Property { name: "__rightLabelMargin"; type: "int" } + Property { name: "__minRightLabelSpacing"; type: "int" } + Property { name: "__scrollerStyle"; type: "QQmlComponent"; isPointer: true } + Property { name: "menuItemPanel"; type: "QQmlComponent"; isPointer: true } + Property { + name: "itemDelegate" + type: "MenuItemSubControls_QMLTYPE_125" + isReadonly: true + isPointer: true + } + Method { + name: "formatMnemonic" + type: "QVariant" + Parameter { name: "text"; type: "QVariant" } + Parameter { name: "underline"; type: "QVariant" } + } + Property { name: "control"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/PieMenuStyle 1.3" + exports: ["QtQuick.Controls.Styles/PieMenuStyle 1.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "PieMenu_QMLTYPE_192"; isReadonly: true; isPointer: true } + Property { name: "backgroundColor"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "shadowColor"; type: "QColor" } + Property { name: "shadowRadius"; type: "double" } + Property { name: "shadowSpread"; type: "double" } + Property { name: "radius"; type: "double"; isReadonly: true } + Property { name: "cancelRadius"; type: "double" } + Property { name: "startAngle"; type: "double" } + Property { name: "endAngle"; type: "double" } + Property { name: "__iconOffset"; type: "double"; isReadonly: true } + Property { name: "__selectableRadius"; type: "double"; isReadonly: true } + Property { name: "__implicitWidth"; type: "int" } + Property { name: "__implicitHeight"; type: "int" } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "cancel"; type: "QQmlComponent"; isPointer: true } + Property { name: "title"; type: "QQmlComponent"; isPointer: true } + Property { name: "menuItem"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Method { + name: "sectionStartAngle" + type: "QVariant" + Parameter { name: "itemIndex"; type: "QVariant" } + } + Method { + name: "sectionCenterAngle" + type: "QVariant" + Parameter { name: "itemIndex"; type: "QVariant" } + } + Method { + name: "sectionEndAngle" + type: "QVariant" + Parameter { name: "itemIndex"; type: "QVariant" } + } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/ProgressBar 1.0" + exports: ["QtQuick.Controls/ProgressBar 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "value"; type: "double" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "indeterminate"; type: "bool" } + Property { name: "orientation"; type: "int" } + Property { name: "__initialized"; type: "bool" } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Method { + name: "setValue" + type: "QVariant" + Parameter { name: "v"; type: "QVariant" } + } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/ProgressBarStyle 1.0" + exports: ["QtQuick.Controls.Styles/ProgressBarStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "ProgressBar_QMLTYPE_207"; isReadonly: true; isPointer: true } + Property { name: "currentProgress"; type: "double"; isReadonly: true } + Property { name: "progress"; type: "QQmlComponent"; isPointer: true } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/RadioButton 1.0" + exports: ["QtQuick.Controls/RadioButton 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "checked"; type: "bool" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "text"; type: "string" } + Property { name: "tooltip"; type: "string" } + Property { name: "__cycleStatesHandler"; type: "QVariant" } + Property { name: "pressed"; type: "bool" } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/RadioButtonStyle 1.0" + exports: ["QtQuick.Controls.Styles/RadioButtonStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "RadioButton_QMLTYPE_214"; isReadonly: true; isPointer: true } + Property { name: "label"; type: "QQmlComponent"; isPointer: true } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "spacing"; type: "int" } + Property { name: "indicator"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/ScrollView 1.0" + exports: ["QtQuick.Controls/ScrollView 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentItem" + Property { name: "frameVisible"; type: "bool" } + Property { name: "highlightOnFocus"; type: "bool" } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__scrollBarTopMargin"; type: "int" } + Property { name: "__viewTopMargin"; type: "int" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "Style_QMLTYPE_3"; isPointer: true } + Property { name: "horizontalScrollBarPolicy"; type: "int" } + Property { name: "verticalScrollBarPolicy"; type: "int" } + Property { name: "viewport"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "flickableItem"; type: "QQuickFlickable"; isReadonly: true; isPointer: true } + Property { + name: "__scroller" + type: "ScrollViewHelper_QMLTYPE_32" + isReadonly: true + isPointer: true + } + Property { name: "__verticalScrollbarOffset"; type: "int" } + Property { name: "__wheelAreaScrollSpeed"; type: "double" } + Property { + name: "__horizontalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + Property { + name: "__verticalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/ScrollViewStyle 1.0" + exports: ["QtQuick.Controls.Styles/ScrollViewStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "ScrollView_QMLTYPE_37"; isReadonly: true; isPointer: true } + Property { name: "corner"; type: "QQmlComponent"; isPointer: true } + Property { name: "scrollToClickedPosition"; type: "bool" } + Property { name: "transientScrollBars"; type: "bool" } + Property { name: "frame"; type: "QQmlComponent"; isPointer: true } + Property { name: "minimumHandleLength"; type: "int" } + Property { name: "handleOverlap"; type: "int" } + Property { name: "scrollBarBackground"; type: "QQmlComponent"; isPointer: true } + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Property { name: "incrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "decrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "__scrollbar"; type: "QQmlComponent"; isPointer: true } + Property { name: "__externalScrollBars"; type: "bool" } + Property { name: "__scrollBarSpacing"; type: "int" } + Property { name: "__scrollBarFadeDelay"; type: "int" } + Property { name: "__scrollBarFadeDuration"; type: "int" } + Property { name: "__stickyScrollbars"; type: "bool" } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/Slider 1.0" + exports: ["QtQuick.Controls/Slider 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "orientation"; type: "int" } + Property { name: "updateValueWhileDragging"; type: "bool" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "tickmarksEnabled"; type: "bool" } + Property { name: "__horizontal"; type: "bool" } + Property { name: "__handlePos"; type: "double" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "stepSize"; type: "double" } + Property { name: "value"; type: "double" } + Property { name: "wheelEnabled"; type: "bool" } + Method { name: "accessibleIncreaseAction"; type: "QVariant" } + Method { name: "accessibleDecreaseAction"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/Slider 1.6" + exports: ["QtQuick.Controls/Slider 1.6"] + exportMetaObjectRevisions: [6] + isComposite: true + defaultProperty: "data" + Property { name: "orientation"; type: "int" } + Property { name: "updateValueWhileDragging"; type: "bool" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "tickmarksEnabled"; type: "bool" } + Property { name: "__horizontal"; type: "bool" } + Property { name: "__handlePos"; type: "double" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "stepSize"; type: "double" } + Property { name: "value"; type: "double" } + Property { name: "wheelEnabled"; type: "bool" } + Method { name: "accessibleIncreaseAction"; type: "QVariant" } + Method { name: "accessibleDecreaseAction"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/SliderStyle 1.0" + exports: ["QtQuick.Controls.Styles/SliderStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "Slider_QMLTYPE_218"; isReadonly: true; isPointer: true } + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Property { name: "groove"; type: "QQmlComponent"; isPointer: true } + Property { name: "tickmarks"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/SpinBox 1.0" + exports: ["QtQuick.Controls/SpinBox 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "horizontalAlignment"; type: "int" } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "menu"; type: "QQmlComponent"; isPointer: true } + Property { name: "value"; type: "double" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "stepSize"; type: "double" } + Property { name: "suffix"; type: "string" } + Property { name: "prefix"; type: "string" } + Property { name: "decimals"; type: "int" } + Property { name: "font"; type: "QFont" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "__text"; type: "string" } + Property { name: "__baselineOffset"; type: "double" } + Signal { name: "editingFinished" } + Method { name: "__increment"; type: "QVariant" } + Method { name: "__decrement"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/SpinBoxStyle 1.1" + exports: ["QtQuick.Controls.Styles/SpinBoxStyle 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "SpinBox_QMLTYPE_238"; isReadonly: true; isPointer: true } + Property { name: "horizontalAlignment"; type: "int" } + Property { name: "textColor"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "selectedTextColor"; type: "QColor" } + Property { name: "renderType"; type: "int" } + Property { name: "font"; type: "QFont" } + Property { name: "incrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "decrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Property { name: "__cursorHandle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__selectionHandle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__cursorDelegate"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickItem" + name: "QtQuick.Controls/SplitView 1.0" + exports: ["QtQuick.Controls/SplitView 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "__contents" + Property { name: "orientation"; type: "int" } + Property { name: "handleDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "resizing"; type: "bool" } + Property { name: "__contents"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "__items"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "__handles"; type: "QQuickItem"; isList: true; isReadonly: true } + Method { + name: "addItem" + type: "QVariant" + Parameter { name: "item"; type: "QVariant" } + } + Method { + name: "removeItem" + type: "QVariant" + Parameter { name: "item"; type: "QVariant" } + } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/StackView 1.0" + exports: ["QtQuick.Controls/StackView 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "initialItem"; type: "QVariant" } + Property { name: "busy"; type: "bool"; isReadonly: true } + Property { name: "delegate"; type: "StackViewDelegate_QMLTYPE_252"; isPointer: true } + Property { name: "__currentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__depth"; type: "int" } + Property { name: "__currentTransition"; type: "QVariant" } + Property { name: "__guard"; type: "bool" } + Property { name: "invalidItemReplacement"; type: "QQmlComponent"; isPointer: true } + Property { name: "depth"; type: "int"; isReadonly: true } + Property { name: "currentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Method { + name: "push" + type: "QVariant" + Parameter { name: "item"; type: "QVariant" } + } + Method { + name: "pop" + type: "QVariant" + Parameter { name: "item"; type: "QVariant" } + } + Method { name: "clear"; type: "QVariant" } + Method { + name: "find" + type: "QVariant" + Parameter { name: "func"; type: "QVariant" } + Parameter { name: "onlySearchLoadedItems"; type: "QVariant" } + } + Method { + name: "get" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + Parameter { name: "dontLoad"; type: "QVariant" } + } + Method { name: "completeTransition"; type: "QVariant" } + Method { + name: "replace" + type: "QVariant" + Parameter { name: "item"; type: "QVariant" } + Parameter { name: "properties"; type: "QVariant" } + Parameter { name: "immediate"; type: "QVariant" } + } + Method { + name: "__recursionGuard" + type: "QVariant" + Parameter { name: "use"; type: "QVariant" } + } + Method { + name: "__loadElement" + type: "QVariant" + Parameter { name: "element"; type: "QVariant" } + } + Method { + name: "__resolveComponent" + type: "QVariant" + Parameter { name: "unknownObjectType"; type: "QVariant" } + Parameter { name: "element"; type: "QVariant" } + } + Method { + name: "__cleanup" + type: "QVariant" + Parameter { name: "element"; type: "QVariant" } + } + Method { + name: "__setStatus" + type: "QVariant" + Parameter { name: "item"; type: "QVariant" } + Parameter { name: "status"; type: "QVariant" } + } + Method { + name: "__performTransition" + type: "QVariant" + Parameter { name: "transition"; type: "QVariant" } + } + Method { name: "animationFinished"; type: "QVariant" } + } + Component { + prototype: "QObject" + name: "QtQuick.Controls/StackViewDelegate 1.0" + exports: ["QtQuick.Controls/StackViewDelegate 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + Property { name: "pushTransition"; type: "QQmlComponent"; isPointer: true } + Property { name: "popTransition"; type: "QQmlComponent"; isPointer: true } + Property { name: "replaceTransition"; type: "QQmlComponent"; isPointer: true } + Method { + name: "getTransition" + type: "QVariant" + Parameter { name: "properties"; type: "QVariant" } + } + Method { + name: "transitionFinished" + type: "QVariant" + Parameter { name: "properties"; type: "QVariant" } + } + } + Component { + prototype: "QQuickParallelAnimation" + name: "QtQuick.Controls/StackViewTransition 1.0" + exports: ["QtQuick.Controls/StackViewTransition 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "animations" + Property { name: "name"; type: "string" } + Property { name: "enterItem"; type: "QQuickItem"; isPointer: true } + Property { name: "exitItem"; type: "QQuickItem"; isPointer: true } + Property { name: "immediate"; type: "bool" } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/StatusBar 1.0" + exports: ["QtQuick.Controls/StatusBar 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "__content" + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "__style"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "__content"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/StatusBarStyle 1.0" + exports: ["QtQuick.Controls.Styles/StatusBarStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Property { name: "control"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/StatusIndicatorStyle 1.1" + exports: ["QtQuick.Controls.Styles/StatusIndicatorStyle 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { + name: "control" + type: "StatusIndicator_QMLTYPE_261" + isReadonly: true + isPointer: true + } + Property { name: "color"; type: "QColor" } + Property { name: "indicator"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/Switch 1.1" + exports: ["QtQuick.Controls/Switch 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "checked"; type: "bool" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/SwitchStyle 1.1" + exports: ["QtQuick.Controls.Styles/SwitchStyle 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Property { name: "groove"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Property { name: "control"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickLoader" + name: "QtQuick.Controls/Tab 1.0" + exports: ["QtQuick.Controls/Tab 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "component" + Property { name: "title"; type: "string" } + Property { name: "__inserted"; type: "bool" } + Property { name: "component"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/TabView 1.0" + exports: ["QtQuick.Controls/TabView 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "currentIndex"; type: "int" } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "frameVisible"; type: "bool" } + Property { name: "tabsVisible"; type: "bool" } + Property { name: "tabPosition"; type: "int" } + Property { name: "__tabs"; type: "QQmlListModel"; isPointer: true } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__styleItem"; type: "QVariant" } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Method { + name: "addTab" + type: "QVariant" + Parameter { name: "title"; type: "QVariant" } + Parameter { name: "component"; type: "QVariant" } + } + Method { + name: "insertTab" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + Parameter { name: "title"; type: "QVariant" } + Parameter { name: "component"; type: "QVariant" } + } + Method { + name: "removeTab" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "moveTab" + type: "QVariant" + Parameter { name: "from"; type: "QVariant" } + Parameter { name: "to"; type: "QVariant" } + } + Method { + name: "getTab" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "__willRemoveIndex" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "__didInsertIndex" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { name: "__setOpacities"; type: "QVariant" } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/TabViewStyle 1.0" + exports: ["QtQuick.Controls.Styles/TabViewStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "TabView_QMLTYPE_280"; isReadonly: true; isPointer: true } + Property { name: "tabsMovable"; type: "bool" } + Property { name: "tabsAlignment"; type: "int" } + Property { name: "tabOverlap"; type: "int" } + Property { name: "frameOverlap"; type: "int" } + Property { name: "frame"; type: "QQmlComponent"; isPointer: true } + Property { name: "tab"; type: "QQmlComponent"; isPointer: true } + Property { name: "leftCorner"; type: "QQmlComponent"; isPointer: true } + Property { name: "rightCorner"; type: "QQmlComponent"; isPointer: true } + Property { name: "tabBar"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/TableView 1.0" + exports: ["QtQuick.Controls/TableView 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "__columns" + Property { name: "model"; type: "QVariant" } + Property { name: "rowCount"; type: "int"; isReadonly: true } + Property { name: "currentRow"; type: "int" } + Property { + name: "selection" + type: "TableViewSelection_QMLTYPE_308" + isReadonly: true + isPointer: true + } + Signal { + name: "activated" + Parameter { name: "row"; type: "int" } + } + Signal { + name: "clicked" + Parameter { name: "row"; type: "int" } + } + Signal { + name: "doubleClicked" + Parameter { name: "row"; type: "int" } + } + Signal { + name: "pressAndHold" + Parameter { name: "row"; type: "int" } + } + Method { + name: "positionViewAtRow" + type: "QVariant" + Parameter { name: "row"; type: "QVariant" } + Parameter { name: "mode"; type: "QVariant" } + } + Method { + name: "rowAt" + type: "QVariant" + Parameter { name: "x"; type: "QVariant" } + Parameter { name: "y"; type: "QVariant" } + } + Property { name: "alternatingRowColors"; type: "bool" } + Property { name: "headerVisible"; type: "bool" } + Property { name: "itemDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "rowDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "headerDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "sortIndicatorColumn"; type: "int" } + Property { name: "sortIndicatorVisible"; type: "bool" } + Property { name: "sortIndicatorOrder"; type: "int" } + Property { name: "selectionMode"; type: "int" } + Property { name: "__viewTypeName"; type: "string" } + Property { name: "__isTreeView"; type: "bool"; isReadonly: true } + Property { name: "__itemDelegateLoader"; type: "QQmlComponent"; isPointer: true } + Property { name: "__model"; type: "QVariant" } + Property { name: "__activateItemOnSingleClick"; type: "bool" } + Property { name: "__mouseArea"; type: "QQuickItem"; isPointer: true } + Property { name: "backgroundVisible"; type: "bool" } + Property { name: "contentHeader"; type: "QQmlComponent"; isPointer: true } + Property { name: "contentFooter"; type: "QQmlComponent"; isPointer: true } + Property { name: "columnCount"; type: "int"; isReadonly: true } + Property { name: "section"; type: "QQuickViewSection"; isReadonly: true; isPointer: true } + Property { name: "__columns"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "__currentRowItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "__currentRow"; type: "int" } + Property { name: "__listView"; type: "QQuickListView"; isReadonly: true; isPointer: true } + Method { + name: "addColumn" + type: "QVariant" + Parameter { name: "column"; type: "QVariant" } + } + Method { + name: "insertColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + Parameter { name: "column"; type: "QVariant" } + } + Method { + name: "removeColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "moveColumn" + type: "QVariant" + Parameter { name: "from"; type: "QVariant" } + Parameter { name: "to"; type: "QVariant" } + } + Method { + name: "getColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { name: "resizeColumnsToContents"; type: "QVariant" } + Property { name: "frameVisible"; type: "bool" } + Property { name: "highlightOnFocus"; type: "bool" } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__scrollBarTopMargin"; type: "int" } + Property { name: "__viewTopMargin"; type: "int" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "Style_QMLTYPE_3"; isPointer: true } + Property { name: "horizontalScrollBarPolicy"; type: "int" } + Property { name: "verticalScrollBarPolicy"; type: "int" } + Property { name: "viewport"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "flickableItem"; type: "QQuickFlickable"; isReadonly: true; isPointer: true } + Property { + name: "__scroller" + type: "ScrollViewHelper_QMLTYPE_32" + isReadonly: true + isPointer: true + } + Property { name: "__verticalScrollbarOffset"; type: "int" } + Property { name: "__wheelAreaScrollSpeed"; type: "double" } + Property { + name: "__horizontalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + Property { + name: "__verticalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + } + Component { + prototype: "QObject" + name: "QtQuick.Controls/TableViewColumn 1.0" + exports: ["QtQuick.Controls/TableViewColumn 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + Property { name: "__view"; type: "QQuickItem"; isPointer: true } + Property { name: "__index"; type: "int" } + Property { name: "title"; type: "string" } + Property { name: "role"; type: "string" } + Property { name: "width"; type: "int" } + Property { name: "visible"; type: "bool" } + Property { name: "resizable"; type: "bool" } + Property { name: "movable"; type: "bool" } + Property { name: "elideMode"; type: "int" } + Property { name: "horizontalAlignment"; type: "int" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Method { name: "resizeToContents"; type: "QVariant" } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/TableViewStyle 1.0" + exports: ["QtQuick.Controls.Styles/TableViewStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "TableView_QMLTYPE_312"; isReadonly: true; isPointer: true } + Property { name: "textColor"; type: "QColor" } + Property { name: "backgroundColor"; type: "QColor" } + Property { name: "alternateBackgroundColor"; type: "QColor" } + Property { name: "highlightedTextColor"; type: "QColor" } + Property { name: "activateItemOnSingleClick"; type: "bool" } + Property { name: "headerDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "rowDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "itemDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "__branchDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "__indentation"; type: "int" } + Property { name: "corner"; type: "QQmlComponent"; isPointer: true } + Property { name: "scrollToClickedPosition"; type: "bool" } + Property { name: "transientScrollBars"; type: "bool" } + Property { name: "frame"; type: "QQmlComponent"; isPointer: true } + Property { name: "minimumHandleLength"; type: "int" } + Property { name: "handleOverlap"; type: "int" } + Property { name: "scrollBarBackground"; type: "QQmlComponent"; isPointer: true } + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Property { name: "incrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "decrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "__scrollbar"; type: "QQmlComponent"; isPointer: true } + Property { name: "__externalScrollBars"; type: "bool" } + Property { name: "__scrollBarSpacing"; type: "int" } + Property { name: "__scrollBarFadeDelay"; type: "int" } + Property { name: "__scrollBarFadeDuration"; type: "int" } + Property { name: "__stickyScrollbars"; type: "bool" } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/TextArea 1.0" + exports: ["QtQuick.Controls/TextArea 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "tabChangesFocus"; type: "bool" } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "menu"; type: "QQmlComponent"; isPointer: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "baseUrl"; type: "QUrl" } + Property { name: "canPaste"; type: "bool"; isReadonly: true } + Property { name: "canRedo"; type: "bool"; isReadonly: true } + Property { name: "canUndo"; type: "bool"; isReadonly: true } + Property { name: "textColor"; type: "QColor" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "cursorRectangle"; type: "QRectF"; isReadonly: true } + Property { name: "font"; type: "QFont" } + Property { name: "horizontalAlignment"; type: "int" } + Property { name: "effectiveHorizontalAlignment"; type: "int"; isReadonly: true } + Property { name: "verticalAlignment"; type: "int" } + Property { name: "inputMethodHints"; type: "int" } + Property { name: "length"; type: "int"; isReadonly: true } + Property { name: "lineCount"; type: "int"; isReadonly: true } + Property { name: "readOnly"; type: "bool" } + Property { name: "selectedText"; type: "string"; isReadonly: true } + Property { name: "selectionEnd"; type: "int"; isReadonly: true } + Property { name: "selectionStart"; type: "int"; isReadonly: true } + Property { name: "text"; type: "string" } + Property { name: "textFormat"; type: "int" } + Property { name: "wrapMode"; type: "int" } + Property { name: "selectByKeyboard"; type: "bool" } + Property { name: "hoveredLink"; type: "string"; isReadonly: true } + Property { name: "backgroundVisible"; type: "bool" } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "textMargin"; type: "double" } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "textDocument"; type: "QQuickTextDocument"; isReadonly: true; isPointer: true } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "linkHovered" + Parameter { name: "link"; type: "string" } + } + Signal { name: "editingFinished" } + Method { + name: "append" + type: "QVariant" + Parameter { name: "string"; type: "QVariant" } + } + Method { name: "copy"; type: "QVariant" } + Method { name: "cut"; type: "QVariant" } + Method { name: "deselect"; type: "QVariant" } + Method { + name: "getFormattedText" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "getText" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "insert" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + Parameter { name: "text"; type: "QVariant" } + } + Method { + name: "isRightToLeft" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "moveCursorSelection" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + Parameter { name: "mode"; type: "QVariant" } + } + Method { name: "paste"; type: "QVariant" } + Method { + name: "positionAt" + type: "QVariant" + Parameter { name: "x"; type: "QVariant" } + Parameter { name: "y"; type: "QVariant" } + } + Method { + name: "positionToRectangle" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + } + Method { name: "redo"; type: "QVariant" } + Method { + name: "remove" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "select" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { name: "selectAll"; type: "QVariant" } + Method { name: "selectWord"; type: "QVariant" } + Method { name: "undo"; type: "QVariant" } + Property { name: "frameVisible"; type: "bool" } + Property { name: "highlightOnFocus"; type: "bool" } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__scrollBarTopMargin"; type: "int" } + Property { name: "__viewTopMargin"; type: "int" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "Style_QMLTYPE_3"; isPointer: true } + Property { name: "horizontalScrollBarPolicy"; type: "int" } + Property { name: "verticalScrollBarPolicy"; type: "int" } + Property { name: "viewport"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "flickableItem"; type: "QQuickFlickable"; isReadonly: true; isPointer: true } + Property { + name: "__scroller" + type: "ScrollViewHelper_QMLTYPE_32" + isReadonly: true + isPointer: true + } + Property { name: "__verticalScrollbarOffset"; type: "int" } + Property { name: "__wheelAreaScrollSpeed"; type: "double" } + Property { + name: "__horizontalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + Property { + name: "__verticalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/TextArea 1.3" + exports: ["QtQuick.Controls/TextArea 1.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "tabChangesFocus"; type: "bool" } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "menu"; type: "QQmlComponent"; isPointer: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "baseUrl"; type: "QUrl" } + Property { name: "canPaste"; type: "bool"; isReadonly: true } + Property { name: "canRedo"; type: "bool"; isReadonly: true } + Property { name: "canUndo"; type: "bool"; isReadonly: true } + Property { name: "textColor"; type: "QColor" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "cursorRectangle"; type: "QRectF"; isReadonly: true } + Property { name: "font"; type: "QFont" } + Property { name: "horizontalAlignment"; type: "int" } + Property { name: "effectiveHorizontalAlignment"; type: "int"; isReadonly: true } + Property { name: "verticalAlignment"; type: "int" } + Property { name: "inputMethodHints"; type: "int" } + Property { name: "length"; type: "int"; isReadonly: true } + Property { name: "lineCount"; type: "int"; isReadonly: true } + Property { name: "readOnly"; type: "bool" } + Property { name: "selectedText"; type: "string"; isReadonly: true } + Property { name: "selectionEnd"; type: "int"; isReadonly: true } + Property { name: "selectionStart"; type: "int"; isReadonly: true } + Property { name: "text"; type: "string" } + Property { name: "textFormat"; type: "int" } + Property { name: "wrapMode"; type: "int" } + Property { name: "selectByKeyboard"; type: "bool" } + Property { name: "hoveredLink"; type: "string"; isReadonly: true } + Property { name: "backgroundVisible"; type: "bool" } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "textMargin"; type: "double" } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "textDocument"; type: "QQuickTextDocument"; isReadonly: true; isPointer: true } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "linkHovered" + Parameter { name: "link"; type: "string" } + } + Signal { name: "editingFinished" } + Method { + name: "append" + type: "QVariant" + Parameter { name: "string"; type: "QVariant" } + } + Method { name: "copy"; type: "QVariant" } + Method { name: "cut"; type: "QVariant" } + Method { name: "deselect"; type: "QVariant" } + Method { + name: "getFormattedText" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "getText" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "insert" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + Parameter { name: "text"; type: "QVariant" } + } + Method { + name: "isRightToLeft" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "moveCursorSelection" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + Parameter { name: "mode"; type: "QVariant" } + } + Method { name: "paste"; type: "QVariant" } + Method { + name: "positionAt" + type: "QVariant" + Parameter { name: "x"; type: "QVariant" } + Parameter { name: "y"; type: "QVariant" } + } + Method { + name: "positionToRectangle" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + } + Method { name: "redo"; type: "QVariant" } + Method { + name: "remove" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "select" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { name: "selectAll"; type: "QVariant" } + Method { name: "selectWord"; type: "QVariant" } + Method { name: "undo"; type: "QVariant" } + Property { name: "frameVisible"; type: "bool" } + Property { name: "highlightOnFocus"; type: "bool" } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__scrollBarTopMargin"; type: "int" } + Property { name: "__viewTopMargin"; type: "int" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "Style_QMLTYPE_3"; isPointer: true } + Property { name: "horizontalScrollBarPolicy"; type: "int" } + Property { name: "verticalScrollBarPolicy"; type: "int" } + Property { name: "viewport"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "flickableItem"; type: "QQuickFlickable"; isReadonly: true; isPointer: true } + Property { + name: "__scroller" + type: "ScrollViewHelper_QMLTYPE_32" + isReadonly: true + isPointer: true + } + Property { name: "__verticalScrollbarOffset"; type: "int" } + Property { name: "__wheelAreaScrollSpeed"; type: "double" } + Property { + name: "__horizontalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + Property { + name: "__verticalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/TextArea 1.5" + exports: ["QtQuick.Controls/TextArea 1.5"] + exportMetaObjectRevisions: [5] + isComposite: true + defaultProperty: "data" + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "tabChangesFocus"; type: "bool" } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "menu"; type: "QQmlComponent"; isPointer: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "baseUrl"; type: "QUrl" } + Property { name: "canPaste"; type: "bool"; isReadonly: true } + Property { name: "canRedo"; type: "bool"; isReadonly: true } + Property { name: "canUndo"; type: "bool"; isReadonly: true } + Property { name: "textColor"; type: "QColor" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "cursorRectangle"; type: "QRectF"; isReadonly: true } + Property { name: "font"; type: "QFont" } + Property { name: "horizontalAlignment"; type: "int" } + Property { name: "effectiveHorizontalAlignment"; type: "int"; isReadonly: true } + Property { name: "verticalAlignment"; type: "int" } + Property { name: "inputMethodHints"; type: "int" } + Property { name: "length"; type: "int"; isReadonly: true } + Property { name: "lineCount"; type: "int"; isReadonly: true } + Property { name: "readOnly"; type: "bool" } + Property { name: "selectedText"; type: "string"; isReadonly: true } + Property { name: "selectionEnd"; type: "int"; isReadonly: true } + Property { name: "selectionStart"; type: "int"; isReadonly: true } + Property { name: "text"; type: "string" } + Property { name: "textFormat"; type: "int" } + Property { name: "wrapMode"; type: "int" } + Property { name: "selectByKeyboard"; type: "bool" } + Property { name: "hoveredLink"; type: "string"; isReadonly: true } + Property { name: "backgroundVisible"; type: "bool" } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "textMargin"; type: "double" } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "textDocument"; type: "QQuickTextDocument"; isReadonly: true; isPointer: true } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "linkHovered" + Parameter { name: "link"; type: "string" } + } + Signal { name: "editingFinished" } + Method { + name: "append" + type: "QVariant" + Parameter { name: "string"; type: "QVariant" } + } + Method { name: "copy"; type: "QVariant" } + Method { name: "cut"; type: "QVariant" } + Method { name: "deselect"; type: "QVariant" } + Method { + name: "getFormattedText" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "getText" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "insert" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + Parameter { name: "text"; type: "QVariant" } + } + Method { + name: "isRightToLeft" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "moveCursorSelection" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + Parameter { name: "mode"; type: "QVariant" } + } + Method { name: "paste"; type: "QVariant" } + Method { + name: "positionAt" + type: "QVariant" + Parameter { name: "x"; type: "QVariant" } + Parameter { name: "y"; type: "QVariant" } + } + Method { + name: "positionToRectangle" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + } + Method { name: "redo"; type: "QVariant" } + Method { + name: "remove" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "select" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { name: "selectAll"; type: "QVariant" } + Method { name: "selectWord"; type: "QVariant" } + Method { name: "undo"; type: "QVariant" } + Property { name: "frameVisible"; type: "bool" } + Property { name: "highlightOnFocus"; type: "bool" } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__scrollBarTopMargin"; type: "int" } + Property { name: "__viewTopMargin"; type: "int" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "Style_QMLTYPE_3"; isPointer: true } + Property { name: "horizontalScrollBarPolicy"; type: "int" } + Property { name: "verticalScrollBarPolicy"; type: "int" } + Property { name: "viewport"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "flickableItem"; type: "QQuickFlickable"; isReadonly: true; isPointer: true } + Property { + name: "__scroller" + type: "ScrollViewHelper_QMLTYPE_32" + isReadonly: true + isPointer: true + } + Property { name: "__verticalScrollbarOffset"; type: "int" } + Property { name: "__wheelAreaScrollSpeed"; type: "double" } + Property { + name: "__horizontalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + Property { + name: "__verticalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/TextAreaStyle 1.1" + exports: ["QtQuick.Controls.Styles/TextAreaStyle 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "TextArea_QMLTYPE_318"; isReadonly: true; isPointer: true } + Property { name: "font"; type: "QFont" } + Property { name: "textColor"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "selectedTextColor"; type: "QColor" } + Property { name: "backgroundColor"; type: "QColor" } + Property { name: "renderType"; type: "int" } + Property { name: "textMargin"; type: "double" } + Property { name: "__cursorHandle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__selectionHandle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__cursorDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "__editMenu"; type: "QQmlComponent"; isPointer: true } + Property { name: "corner"; type: "QQmlComponent"; isPointer: true } + Property { name: "scrollToClickedPosition"; type: "bool" } + Property { name: "transientScrollBars"; type: "bool" } + Property { name: "frame"; type: "QQmlComponent"; isPointer: true } + Property { name: "minimumHandleLength"; type: "int" } + Property { name: "handleOverlap"; type: "int" } + Property { name: "scrollBarBackground"; type: "QQmlComponent"; isPointer: true } + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Property { name: "incrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "decrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "__scrollbar"; type: "QQmlComponent"; isPointer: true } + Property { name: "__externalScrollBars"; type: "bool" } + Property { name: "__scrollBarSpacing"; type: "int" } + Property { name: "__scrollBarFadeDelay"; type: "int" } + Property { name: "__scrollBarFadeDuration"; type: "int" } + Property { name: "__stickyScrollbars"; type: "bool" } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/TextField 1.0" + exports: ["QtQuick.Controls/TextField 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "menu"; type: "QQmlComponent"; isPointer: true } + Property { name: "acceptableInput"; type: "bool"; isReadonly: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "canPaste"; type: "bool"; isReadonly: true } + Property { name: "canRedo"; type: "bool"; isReadonly: true } + Property { name: "canUndo"; type: "bool"; isReadonly: true } + Property { name: "textColor"; type: "QColor" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "cursorRectangle"; type: "QRectF"; isReadonly: true } + Property { name: "displayText"; type: "string"; isReadonly: true } + Property { name: "echoMode"; type: "int" } + Property { name: "font"; type: "QFont" } + Property { name: "horizontalAlignment"; type: "int" } + Property { name: "effectiveHorizontalAlignment"; type: "int"; isReadonly: true } + Property { name: "verticalAlignment"; type: "int" } + Property { name: "inputMask"; type: "string" } + Property { name: "inputMethodHints"; type: "int" } + Property { name: "length"; type: "int"; isReadonly: true } + Property { name: "maximumLength"; type: "int" } + Property { name: "placeholderText"; type: "string" } + Property { name: "readOnly"; type: "bool" } + Property { name: "selectedText"; type: "string"; isReadonly: true } + Property { name: "selectionEnd"; type: "int"; isReadonly: true } + Property { name: "selectionStart"; type: "int"; isReadonly: true } + Property { name: "text"; type: "string" } + Property { name: "validator"; type: "QValidator"; isPointer: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "__contentHeight"; type: "double"; isReadonly: true } + Property { name: "__contentWidth"; type: "double"; isReadonly: true } + Property { name: "__baselineOffset"; type: "double" } + Signal { name: "accepted" } + Signal { name: "editingFinished" } + Method { name: "copy"; type: "QVariant" } + Method { name: "cut"; type: "QVariant" } + Method { name: "deselect"; type: "QVariant" } + Method { + name: "getText" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "insert" + type: "QVariant" + Parameter { name: "position"; type: "QVariant" } + Parameter { name: "text"; type: "QVariant" } + } + Method { + name: "isRightToLeft" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { name: "paste"; type: "QVariant" } + Method { name: "redo"; type: "QVariant" } + Method { + name: "remove" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { + name: "select" + type: "QVariant" + Parameter { name: "start"; type: "QVariant" } + Parameter { name: "end"; type: "QVariant" } + } + Method { name: "selectAll"; type: "QVariant" } + Method { name: "selectWord"; type: "QVariant" } + Method { name: "undo"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/TextFieldStyle 1.0" + exports: ["QtQuick.Controls.Styles/TextFieldStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "TextField_QMLTYPE_324"; isReadonly: true; isPointer: true } + Property { name: "font"; type: "QFont" } + Property { name: "textColor"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "selectedTextColor"; type: "QColor" } + Property { name: "passwordCharacter"; type: "string" } + Property { name: "renderType"; type: "int" } + Property { name: "placeholderTextColor"; type: "QColor" } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Property { name: "__cursorHandle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__selectionHandle"; type: "QQmlComponent"; isPointer: true } + Property { name: "__cursorDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "__editMenu"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/ToggleButtonStyle 1.0" + exports: ["QtQuick.Controls.Styles/ToggleButtonStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "ToggleButton_QMLTYPE_327"; isReadonly: true; isPointer: true } + Property { name: "inactiveGradient"; type: "QQuickGradient"; isPointer: true } + Property { name: "checkedGradient"; type: "QQuickGradient"; isPointer: true } + Property { name: "uncheckedGradient"; type: "QQuickGradient"; isPointer: true } + Property { name: "checkedDropShadowColor"; type: "QColor" } + Property { name: "uncheckedDropShadowColor"; type: "QColor" } + Property { + name: "__buttonHelper" + type: "CircularButtonStyleHelper_QMLTYPE_93" + isReadonly: true + isPointer: true + } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "label"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/ToolBar 1.0" + exports: ["QtQuick.Controls/ToolBar 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "__content" + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "__menu"; type: "QVariant" } + Property { name: "__style"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "__content"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/ToolBarStyle 1.0" + exports: ["QtQuick.Controls.Styles/ToolBarStyle 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "menuButton"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + Property { name: "control"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/ToolButton 1.0" + exports: ["QtQuick.Controls/ToolButton 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "isDefault"; type: "bool" } + Property { name: "menu"; type: "Menu_QMLTYPE_55"; isPointer: true } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "action"; type: "QQuickAction1"; isPointer: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "text"; type: "string" } + Property { name: "tooltip"; type: "string" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "__position"; type: "string" } + Property { name: "__iconOverriden"; type: "bool"; isReadonly: true } + Property { name: "__action"; type: "QQuickAction1"; isPointer: true } + Property { name: "__iconAction"; type: "QQuickAction1"; isReadonly: true; isPointer: true } + Property { name: "__behavior"; type: "QVariant" } + Property { name: "__effectivePressed"; type: "bool" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + Method { name: "accessiblePressAction"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/TreeView 1.4" + exports: ["QtQuick.Controls/TreeView 1.4"] + exportMetaObjectRevisions: [4] + isComposite: true + defaultProperty: "__columns" + Property { name: "model"; type: "QVariant" } + Property { name: "currentIndex"; type: "QVariant"; isReadonly: true } + Property { name: "selection"; type: "QItemSelectionModel"; isPointer: true } + Property { name: "rootIndex"; type: "QModelIndex" } + Signal { + name: "activated" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "clicked" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "doubleClicked" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "pressAndHold" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "expanded" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "collapsed" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "isExpanded" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "collapse" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "expand" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "indexAt" + type: "QVariant" + Parameter { name: "x"; type: "QVariant" } + Parameter { name: "y"; type: "QVariant" } + } + Property { name: "alternatingRowColors"; type: "bool" } + Property { name: "headerVisible"; type: "bool" } + Property { name: "itemDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "rowDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "headerDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "sortIndicatorColumn"; type: "int" } + Property { name: "sortIndicatorVisible"; type: "bool" } + Property { name: "sortIndicatorOrder"; type: "int" } + Property { name: "selectionMode"; type: "int" } + Property { name: "__viewTypeName"; type: "string" } + Property { name: "__isTreeView"; type: "bool"; isReadonly: true } + Property { name: "__itemDelegateLoader"; type: "QQmlComponent"; isPointer: true } + Property { name: "__model"; type: "QVariant" } + Property { name: "__activateItemOnSingleClick"; type: "bool" } + Property { name: "__mouseArea"; type: "QQuickItem"; isPointer: true } + Property { name: "backgroundVisible"; type: "bool" } + Property { name: "contentHeader"; type: "QQmlComponent"; isPointer: true } + Property { name: "contentFooter"; type: "QQmlComponent"; isPointer: true } + Property { name: "columnCount"; type: "int"; isReadonly: true } + Property { name: "section"; type: "QQuickViewSection"; isReadonly: true; isPointer: true } + Property { name: "__columns"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "__currentRowItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "__currentRow"; type: "int" } + Property { name: "__listView"; type: "QQuickListView"; isReadonly: true; isPointer: true } + Method { + name: "addColumn" + type: "QVariant" + Parameter { name: "column"; type: "QVariant" } + } + Method { + name: "insertColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + Parameter { name: "column"; type: "QVariant" } + } + Method { + name: "removeColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "moveColumn" + type: "QVariant" + Parameter { name: "from"; type: "QVariant" } + Parameter { name: "to"; type: "QVariant" } + } + Method { + name: "getColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { name: "resizeColumnsToContents"; type: "QVariant" } + Property { name: "frameVisible"; type: "bool" } + Property { name: "highlightOnFocus"; type: "bool" } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__scrollBarTopMargin"; type: "int" } + Property { name: "__viewTopMargin"; type: "int" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "Style_QMLTYPE_3"; isPointer: true } + Property { name: "horizontalScrollBarPolicy"; type: "int" } + Property { name: "verticalScrollBarPolicy"; type: "int" } + Property { name: "viewport"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "flickableItem"; type: "QQuickFlickable"; isReadonly: true; isPointer: true } + Property { + name: "__scroller" + type: "ScrollViewHelper_QMLTYPE_32" + isReadonly: true + isPointer: true + } + Property { name: "__verticalScrollbarOffset"; type: "int" } + Property { name: "__wheelAreaScrollSpeed"; type: "double" } + Property { + name: "__horizontalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + Property { + name: "__verticalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Controls/TreeView 1.5" + exports: ["QtQuick.Controls/TreeView 1.5"] + exportMetaObjectRevisions: [5] + isComposite: true + defaultProperty: "__columns" + Property { name: "model"; type: "QVariant" } + Property { name: "currentIndex"; type: "QVariant"; isReadonly: true } + Property { name: "selection"; type: "QItemSelectionModel"; isPointer: true } + Property { name: "rootIndex"; type: "QModelIndex" } + Signal { + name: "activated" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "clicked" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "doubleClicked" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "pressAndHold" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "expanded" + Parameter { name: "index"; type: "QVariant" } + } + Signal { + name: "collapsed" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "isExpanded" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "collapse" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "expand" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "indexAt" + type: "QVariant" + Parameter { name: "x"; type: "QVariant" } + Parameter { name: "y"; type: "QVariant" } + } + Property { name: "alternatingRowColors"; type: "bool" } + Property { name: "headerVisible"; type: "bool" } + Property { name: "itemDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "rowDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "headerDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "sortIndicatorColumn"; type: "int" } + Property { name: "sortIndicatorVisible"; type: "bool" } + Property { name: "sortIndicatorOrder"; type: "int" } + Property { name: "selectionMode"; type: "int" } + Property { name: "__viewTypeName"; type: "string" } + Property { name: "__isTreeView"; type: "bool"; isReadonly: true } + Property { name: "__itemDelegateLoader"; type: "QQmlComponent"; isPointer: true } + Property { name: "__model"; type: "QVariant" } + Property { name: "__activateItemOnSingleClick"; type: "bool" } + Property { name: "__mouseArea"; type: "QQuickItem"; isPointer: true } + Property { name: "backgroundVisible"; type: "bool" } + Property { name: "contentHeader"; type: "QQmlComponent"; isPointer: true } + Property { name: "contentFooter"; type: "QQmlComponent"; isPointer: true } + Property { name: "columnCount"; type: "int"; isReadonly: true } + Property { name: "section"; type: "QQuickViewSection"; isReadonly: true; isPointer: true } + Property { name: "__columns"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "__currentRowItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "__currentRow"; type: "int" } + Property { name: "__listView"; type: "QQuickListView"; isReadonly: true; isPointer: true } + Method { + name: "addColumn" + type: "QVariant" + Parameter { name: "column"; type: "QVariant" } + } + Method { + name: "insertColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + Parameter { name: "column"; type: "QVariant" } + } + Method { + name: "removeColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "moveColumn" + type: "QVariant" + Parameter { name: "from"; type: "QVariant" } + Parameter { name: "to"; type: "QVariant" } + } + Method { + name: "getColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { name: "resizeColumnsToContents"; type: "QVariant" } + Property { name: "frameVisible"; type: "bool" } + Property { name: "highlightOnFocus"; type: "bool" } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__scrollBarTopMargin"; type: "int" } + Property { name: "__viewTopMargin"; type: "int" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "Style_QMLTYPE_3"; isPointer: true } + Property { name: "horizontalScrollBarPolicy"; type: "int" } + Property { name: "verticalScrollBarPolicy"; type: "int" } + Property { name: "viewport"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "flickableItem"; type: "QQuickFlickable"; isReadonly: true; isPointer: true } + Property { + name: "__scroller" + type: "ScrollViewHelper_QMLTYPE_32" + isReadonly: true + isPointer: true + } + Property { name: "__verticalScrollbarOffset"; type: "int" } + Property { name: "__wheelAreaScrollSpeed"; type: "double" } + Property { + name: "__horizontalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + Property { + name: "__verticalScrollBar" + type: "ScrollBar_QMLTYPE_28" + isReadonly: true + isPointer: true + } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/TreeViewStyle 1.4" + exports: ["QtQuick.Controls.Styles/TreeViewStyle 1.4"] + exportMetaObjectRevisions: [4] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "TreeView_QMLTYPE_350"; isReadonly: true; isPointer: true } + Property { name: "indentation"; type: "int" } + Property { name: "branchDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "textColor"; type: "QColor" } + Property { name: "backgroundColor"; type: "QColor" } + Property { name: "alternateBackgroundColor"; type: "QColor" } + Property { name: "highlightedTextColor"; type: "QColor" } + Property { name: "activateItemOnSingleClick"; type: "bool" } + Property { name: "headerDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "rowDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "itemDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "__branchDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "__indentation"; type: "int" } + Property { name: "corner"; type: "QQmlComponent"; isPointer: true } + Property { name: "scrollToClickedPosition"; type: "bool" } + Property { name: "transientScrollBars"; type: "bool" } + Property { name: "frame"; type: "QQmlComponent"; isPointer: true } + Property { name: "minimumHandleLength"; type: "int" } + Property { name: "handleOverlap"; type: "int" } + Property { name: "scrollBarBackground"; type: "QQmlComponent"; isPointer: true } + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Property { name: "incrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "decrementControl"; type: "QQmlComponent"; isPointer: true } + Property { name: "__scrollbar"; type: "QQmlComponent"; isPointer: true } + Property { name: "__externalScrollBars"; type: "bool" } + Property { name: "__scrollBarSpacing"; type: "int" } + Property { name: "__scrollBarFadeDelay"; type: "int" } + Property { name: "__scrollBarFadeDuration"; type: "int" } + Property { name: "__stickyScrollbars"; type: "bool" } + } + Component { + prototype: "QQuickAbstractStyle1" + name: "QtQuick.Controls.Styles/TumblerStyle 1.2" + exports: ["QtQuick.Controls.Styles/TumblerStyle 1.2"] + exportMetaObjectRevisions: [2] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "Tumbler_QMLTYPE_353"; isReadonly: true; isPointer: true } + Property { name: "spacing"; type: "double" } + Property { name: "visibleItemCount"; type: "int" } + Property { name: "__padding"; type: "double"; isReadonly: true } + Property { name: "__delegateHeight"; type: "double" } + Property { name: "__separatorWidth"; type: "double" } + Property { name: "background"; type: "QQmlComponent"; isPointer: true } + Property { name: "foreground"; type: "QQmlComponent"; isPointer: true } + Property { name: "separator"; type: "QQmlComponent"; isPointer: true } + Property { name: "columnForeground"; type: "QQmlComponent"; isPointer: true } + Property { name: "frame"; type: "QQmlComponent"; isPointer: true } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "highlight"; type: "QQmlComponent"; isPointer: true } + Property { name: "panel"; type: "QQmlComponent"; isPointer: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/qmldir new file mode 100644 index 0000000..6641de8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Controls/qmldir @@ -0,0 +1,8 @@ +module QtQuick.Controls +plugin qtquickcontrolsplugin +classname QtQuickControls1Plugin +typeinfo plugins.qmltypes +designersupported +depends QtQuick.Window 2.2 +depends QtQuick.Layouts 1.0 +depends QtQml 2.14 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultColorDialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultColorDialog.qml new file mode 100644 index 0000000..f8c8e22 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultColorDialog.qml @@ -0,0 +1,405 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.4 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Dialogs 1.0 +import QtQuick.Window 2.1 +import "qml" + +AbstractColorDialog { + id: root + property bool __valueSet: true // guard to prevent binding loops + function __setControlsFromColor() { + __valueSet = false + hueSlider.value = root.currentHue + saturationSlider.value = root.currentSaturation + lightnessSlider.value = root.currentLightness + alphaSlider.value = root.currentAlpha + crosshairs.x = root.currentLightness * paletteMap.width + crosshairs.y = (1.0 - root.currentSaturation) * paletteMap.height + __valueSet = true + } + onCurrentColorChanged: __setControlsFromColor() + + Rectangle { + id: content + implicitHeight: Math.min(root.__maximumDimension, Screen.pixelDensity * (usePaletteMap ? 120 : 50)) + implicitWidth: Math.min(root.__maximumDimension, usePaletteMap ? Screen.pixelDensity * (usePaletteMap ? 100 : 50) : implicitHeight * 1.5) + color: palette.window + focus: root.visible + property real bottomMinHeight: sliders.height + buttonRow.height + outerSpacing * 3 + property real spacing: 8 + property real outerSpacing: 12 + property bool usePaletteMap: true + + Keys.onPressed: { + event.accepted = true + switch (event.key) { + case Qt.Key_Return: + case Qt.Key_Select: + accept() + break + case Qt.Key_Escape: + case Qt.Key_Back: + reject() + break + case Qt.Key_C: + if (event.modifiers & Qt.ControlModifier) + colorField.copyAll() + break + case Qt.Key_V: + if (event.modifiers & Qt.ControlModifier) { + colorField.paste() + root.currentColor = colorField.text + } + break + default: + // do nothing + event.accepted = false + break + } + } + + SystemPalette { id: palette } + + Item { + id: paletteFrame + visible: content.usePaletteMap + anchors { + top: parent.top + left: parent.left + right: parent.right + margins: content.outerSpacing + } + height: Math.min(content.height - content.bottomMinHeight, content.width - content.outerSpacing * 2) + + Image { + id: paletteMap + x: (parent.width - width) / 2 + width: height + onWidthChanged: root.__setControlsFromColor() + height: parent.height + source: "images/checkers.png" + fillMode: Image.Tile + + // note we smoothscale the shader from a smaller version to improve performance + ShaderEffect { + id: map + width: 64 + height: 64 + opacity: alphaSlider.value + scale: paletteMap.width / width; + layer.enabled: true + layer.smooth: true + anchors.centerIn: parent + property real hue: hueSlider.value + + fragmentShader: content.OpenGLInfo.profile === OpenGLInfo.CoreProfile ? "#version 150 + in vec2 qt_TexCoord0; + uniform float qt_Opacity; + uniform float hue; + out vec4 fragColor; + + float hueToIntensity(float v1, float v2, float h) { + h = fract(h); + if (h < 1.0 / 6.0) + return v1 + (v2 - v1) * 6.0 * h; + else if (h < 1.0 / 2.0) + return v2; + else if (h < 2.0 / 3.0) + return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h); + + return v1; + } + + vec3 HSLtoRGB(vec3 color) { + float h = color.x; + float l = color.z; + float s = color.y; + + if (s < 1.0 / 256.0) + return vec3(l, l, l); + + float v1; + float v2; + if (l < 0.5) + v2 = l * (1.0 + s); + else + v2 = (l + s) - (s * l); + + v1 = 2.0 * l - v2; + + float d = 1.0 / 3.0; + float r = hueToIntensity(v1, v2, h + d); + float g = hueToIntensity(v1, v2, h); + float b = hueToIntensity(v1, v2, h - d); + return vec3(r, g, b); + } + + void main() { + vec4 c = vec4(1.0); + c.rgb = HSLtoRGB(vec3(hue, 1.0 - qt_TexCoord0.t, qt_TexCoord0.s)); + fragColor = c * qt_Opacity; + } + " : " + varying mediump vec2 qt_TexCoord0; + uniform highp float qt_Opacity; + uniform highp float hue; + + highp float hueToIntensity(highp float v1, highp float v2, highp float h) { + h = fract(h); + if (h < 1.0 / 6.0) + return v1 + (v2 - v1) * 6.0 * h; + else if (h < 1.0 / 2.0) + return v2; + else if (h < 2.0 / 3.0) + return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h); + + return v1; + } + + highp vec3 HSLtoRGB(highp vec3 color) { + highp float h = color.x; + highp float l = color.z; + highp float s = color.y; + + if (s < 1.0 / 256.0) + return vec3(l, l, l); + + highp float v1; + highp float v2; + if (l < 0.5) + v2 = l * (1.0 + s); + else + v2 = (l + s) - (s * l); + + v1 = 2.0 * l - v2; + + highp float d = 1.0 / 3.0; + highp float r = hueToIntensity(v1, v2, h + d); + highp float g = hueToIntensity(v1, v2, h); + highp float b = hueToIntensity(v1, v2, h - d); + return vec3(r, g, b); + } + + void main() { + lowp vec4 c = vec4(1.0); + c.rgb = HSLtoRGB(vec3(hue, 1.0 - qt_TexCoord0.t, qt_TexCoord0.s)); + gl_FragColor = c * qt_Opacity; + } + " + } + + MouseArea { + id: mapMouseArea + anchors.fill: parent + onPositionChanged: { + if (pressed && containsMouse) { + var xx = Math.max(0, Math.min(mouse.x, parent.width)) + var yy = Math.max(0, Math.min(mouse.y, parent.height)) + saturationSlider.value = 1.0 - yy / parent.height + lightnessSlider.value = xx / parent.width + // TODO if we constrain the movement here, can avoid the containsMouse test + crosshairs.x = mouse.x - crosshairs.radius + crosshairs.y = mouse.y - crosshairs.radius + } + } + onPressed: positionChanged(mouse) + } + + Image { + id: crosshairs + property int radius: width / 2 // truncated to int + source: "images/crosshairs.png" + } + + BorderImage { + anchors.fill: parent + anchors.margins: -1 + anchors.leftMargin: -2 + source: "images/sunken_frame.png" + border.left: 8 + border.right: 8 + border.top: 8 + border.bottom: 8 + } + } + } + + Column { + id: sliders + anchors { + top: paletteFrame.bottom + left: parent.left + right: parent.right + margins: content.outerSpacing + } + + ColorSlider { + id: hueSlider + value: 0.5 + onValueChanged: if (__valueSet) root.currentColor = Qt.hsla(hueSlider.value, saturationSlider.value, lightnessSlider.value, alphaSlider.value) + text: qsTr("Hue") + trackDelegate: Rectangle { + rotation: -90 + transformOrigin: Item.TopLeft + gradient: Gradient { + GradientStop {position: 0.000; color: Qt.rgba(1, 0, 0, 1)} + GradientStop {position: 0.167; color: Qt.rgba(1, 1, 0, 1)} + GradientStop {position: 0.333; color: Qt.rgba(0, 1, 0, 1)} + GradientStop {position: 0.500; color: Qt.rgba(0, 1, 1, 1)} + GradientStop {position: 0.667; color: Qt.rgba(0, 0, 1, 1)} + GradientStop {position: 0.833; color: Qt.rgba(1, 0, 1, 1)} + GradientStop {position: 1.000; color: Qt.rgba(1, 0, 0, 1)} + } + } + } + + ColorSlider { + id: saturationSlider + visible: !content.usePaletteMap + value: 0.5 + onValueChanged: if (__valueSet) root.currentColor = Qt.hsla(hueSlider.value, saturationSlider.value, lightnessSlider.value, alphaSlider.value) + text: qsTr("Saturation") + trackDelegate: Rectangle { + rotation: -90 + transformOrigin: Item.TopLeft + gradient: Gradient { + GradientStop { position: 0; color: Qt.hsla(hueSlider.value, 0.0, lightnessSlider.value, 1.0) } + GradientStop { position: 1; color: Qt.hsla(hueSlider.value, 1.0, lightnessSlider.value, 1.0) } + } + } + } + + ColorSlider { + id: lightnessSlider + visible: !content.usePaletteMap + value: 0.5 + onValueChanged: if (__valueSet) root.currentColor = Qt.hsla(hueSlider.value, saturationSlider.value, lightnessSlider.value, alphaSlider.value) + text: qsTr("Luminosity") + trackDelegate: Rectangle { + rotation: -90 + transformOrigin: Item.TopLeft + gradient: Gradient { + GradientStop { position: 0; color: "black" } + GradientStop { position: 0.5; color: Qt.hsla(hueSlider.value, saturationSlider.value, 0.5, 1.0) } + GradientStop { position: 1; color: "white" } + } + } + } + + ColorSlider { + id: alphaSlider + minimum: 0.0 + maximum: 1.0 + value: 1.0 + onValueChanged: if (__valueSet) root.currentColor = Qt.hsla(hueSlider.value, saturationSlider.value, lightnessSlider.value, alphaSlider.value) + text: qsTr("Alpha") + visible: root.showAlphaChannel + trackDelegate: Item { + rotation: -90 + transformOrigin: Item.TopLeft + Image { + anchors {fill: parent} + source: "images/checkers.png" + fillMode: Image.TileVertically + } + Rectangle { + anchors.fill: parent + gradient: Gradient { + GradientStop { position: 0; color: "transparent" } + GradientStop { position: 1; color: Qt.hsla(hueSlider.value, + saturationSlider.value, + lightnessSlider.value, 1.0) } + } } + } + } + } + + Item { + id: buttonRow + height: Math.max(buttonsOnly.height, copyIcon.height) + width: parent.width + anchors { + left: parent.left + right: parent.right + bottom: content.bottom + margins: content.outerSpacing + } + Row { + spacing: content.spacing + height: visible ? parent.height : 0 + visible: !Settings.isMobile + TextField { + id: colorField + text: root.currentColor.toString() + anchors.verticalCenter: parent.verticalCenter + onAccepted: root.currentColor = text + Component.onCompleted: width = implicitWidth + 10 + } + Image { + id: copyIcon + anchors.verticalCenter: parent.verticalCenter + source: "images/copy.png" + MouseArea { + anchors.fill: parent + onClicked: colorField.copyAll() + } + } + } + Row { + id: buttonsOnly + spacing: content.spacing + anchors.right: parent.right + Button { + id: cancelButton + text: qsTr("Cancel") + onClicked: root.reject() + } + Button { + id: okButton + text: qsTr("OK") + onClicked: root.accept() + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultDialogWrapper.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultDialogWrapper.qml new file mode 100644 index 0000000..3ca030c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultDialogWrapper.qml @@ -0,0 +1,207 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Dialogs 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Window 2.1 +import "qml" + +AbstractDialog { + id: root + default property alias data: defaultContentItem.data + + signal actionChosen(var action) + + onVisibilityChanged: if (visible && contentItem) contentItem.forceActiveFocus() + + Rectangle { + id: content + property real spacing: 6 + property real outerSpacing: 12 + property real buttonsRowImplicitHeight: 0 + property real buttonsRowImplicitWidth: Screen.pixelDensity * 50 + property bool buttonsInSingleRow: defaultContentItem.width >= buttonsRowImplicitWidth + property real minimumHeight: implicitHeight + property real minimumWidth: implicitWidth + implicitHeight: defaultContentItem.implicitHeight + spacing + outerSpacing * 2 + Math.max(buttonsRight.implicitHeight, buttonsRowImplicitHeight) + implicitWidth: Math.min(root.__maximumDimension, Math.max( + defaultContentItem.implicitWidth, buttonsRowImplicitWidth, Screen.pixelDensity * 50) + outerSpacing * 2) + color: palette.window + Keys.onPressed: { + event.accepted = handleKey(event.key) + } + + SystemPalette { id: palette } + + Item { + id: defaultContentItem + anchors { + left: parent.left + right: parent.right + top: parent.top + bottom: buttonsLeft.implicitHeight ? buttonsLeft.top : buttonsRight.top + margins: content.outerSpacing + bottomMargin: buttonsLeft.implicitHeight + buttonsRight.implicitHeight > 0 ? content.spacing : 0 + } + implicitHeight: children.length === 1 ? children[0].implicitHeight + : (children.length ? childrenRect.height : 0) + implicitWidth: children.length === 1 ? children[0].implicitWidth + : (children.length ? childrenRect.width : 0) + } + + Flow { + id: buttonsLeft + spacing: content.spacing + anchors { + left: parent.left + bottom: content.buttonsInSingleRow ? parent.bottom : buttonsRight.top + margins: content.outerSpacing + } + + Repeater { + id: buttonsLeftRepeater + Button { + text: (buttonsLeftRepeater.model && buttonsLeftRepeater.model[index] ? buttonsLeftRepeater.model[index].text : index) + onClicked: content.handleButton(buttonsLeftRepeater.model[index].standardButton) + } + } + + Button { + id: moreButton + text: qsTr("Show Details...") + visible: false + } + } + + Flow { + id: buttonsRight + spacing: content.spacing + layoutDirection: Qt.RightToLeft + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + margins: content.outerSpacing + } + + Repeater { + id: buttonsRightRepeater + // TODO maybe: insert gaps if the button requires it (destructive buttons only) + Button { + text: (buttonsRightRepeater.model && buttonsRightRepeater.model[index] ? buttonsRightRepeater.model[index].text : index) + onClicked: content.handleButton(buttonsRightRepeater.model[index].standardButton) + } + } + } + + function handleButton(button) { + var action = { + "button": button, + "key": 0, + "accepted": true, + } + root.actionChosen(action) + if (action.accepted) { + click(button) + } + } + + function handleKey(key) { + var button = 0 + switch (key) { + case Qt.Key_Escape: + case Qt.Key_Back: + button = StandardButton.Cancel + break + case Qt.Key_Enter: + case Qt.Key_Return: + button = StandardButton.Ok + break + default: + return false + } + var action = { + "button": button, + "key": key, + "accepted": true, + } + root.actionChosen(action) + if (action.accepted) { + switch (button) { + case StandardButton.Cancel: + reject() + break + case StandardButton.Ok: + accept() + break + } + } + return true + } + } + function setupButtons() { + buttonsLeftRepeater.model = root.__standardButtonsLeftModel() + buttonsRightRepeater.model = root.__standardButtonsRightModel() + if (buttonsRightRepeater.model && buttonsRightRepeater.model.length > 0) + content.buttonsRowImplicitHeight = buttonsRight.visibleChildren[0].implicitHeight + if (buttonsLeftRepeater.count + buttonsRightRepeater.count < 1) + return; + var calcWidth = 0; + + function calculateForButton(i, b) { + var buttonWidth = b.implicitWidth; + if (buttonWidth > 0) { + if (i > 0) + buttonWidth += content.spacing + calcWidth += buttonWidth + } + } + + for (var i = 0; i < buttonsRight.visibleChildren.length; ++i) + calculateForButton(i, buttonsRight.visibleChildren[i]) + content.minimumWidth = Math.max(calcWidth + content.outerSpacing * 2, content.implicitWidth) + for (i = 0; i < buttonsLeft.visibleChildren.length; ++i) + calculateForButton(i, buttonsLeft.visibleChildren[i]) + content.buttonsRowImplicitWidth = calcWidth + content.spacing + } + onStandardButtonsChanged: setupButtons() + Component.onCompleted: setupButtons() +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultFileDialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultFileDialog.qml new file mode 100644 index 0000000..ea2fa42 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultFileDialog.qml @@ -0,0 +1,488 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 as ControlsPrivate +import QtQuick.Dialogs 1.1 +import QtQuick.Dialogs.Private 1.1 +import QtQuick.Layouts 1.1 +import QtQuick.Window 2.1 +import Qt.labs.folderlistmodel 2.1 +import Qt.labs.settings 1.0 +import "qml" + +AbstractFileDialog { + id: root + + property Component modelComponent: Component { + FolderListModel { + showFiles: !root.selectFolder + nameFilters: root.selectedNameFilterExtensions + sortField: (view.sortIndicatorColumn === 0 ? FolderListModel.Name : + (view.sortIndicatorColumn === 1 ? FolderListModel.Type : + (view.sortIndicatorColumn === 2 ? FolderListModel.Size : FolderListModel.LastModified))) + sortReversed: view.sortIndicatorOrder === Qt.DescendingOrder + } + } + + onVisibleChanged: { + if (visible) { + // If the TableView doesn't have a model yet, create it asynchronously to avoid a UI freeze + if (!view.model) { + var incubator = modelComponent.incubateObject(null, { }) + function init(model) { + view.model = model + model.nameFilters = root.selectedNameFilterExtensions + root.folder = model.folder + } + + if (incubator.status === Component.Ready) { + init(incubator.object) + } else { + incubator.onStatusChanged = function(status) { + if (status === Component.Ready) + init(incubator.object) + } + } + } + + view.needsWidthAdjustment = true + view.selection.clear() + view.focus = true + } + } + + Component.onCompleted: { + filterField.currentIndex = root.selectedNameFilterIndex + root.favoriteFolders = settings.favoriteFolders + } + + Component.onDestruction: { + settings.favoriteFolders = root.favoriteFolders + } + + property Settings settings: Settings { + category: "QQControlsFileDialog" + property alias width: root.width + property alias height: root.height + property alias sidebarWidth: sidebar.width + property alias sidebarSplit: shortcutsScroll.height + property alias sidebarVisible: root.sidebarVisible + property variant favoriteFolders: [] + } + + property bool showFocusHighlight: false + property SystemPalette palette: SystemPalette { } + property var favoriteFolders: [] + + function dirDown(path) { + view.selection.clear() + root.folder = root.pathToUrl(path) + } + function dirUp() { + view.selection.clear() + if (view.model.parentFolder != "") + root.folder = view.model.parentFolder + } + function acceptSelection() { + // transfer the view's selections to QQuickFileDialog + clearSelection() + if (selectFolder && view.selection.count === 0) + addSelection(folder) + else { + view.selection.forEach(function(idx) { + if (view.model.isFolder(idx)) { + if (selectFolder) + addSelection(view.model.get(idx, "fileURL")) + } else { + if (!selectFolder) + addSelection(view.model.get(idx, "fileURL")) + } + }) + } + accept() + } + + property Action dirUpAction: Action { + text: "\ue810" + shortcut: "Ctrl+U" + onTriggered: dirUp() + tooltip: qsTr("Go up to the folder containing this one") + } + + Rectangle { + id: window + implicitWidth: Math.min(root.__maximumDimension, Math.max(Screen.pixelDensity * 100, splitter.implicitWidth)) + implicitHeight: Math.min(root.__maximumDimension, Screen.pixelDensity * 80) + color: root.palette.window + + Qml.Binding { + target: view.model + property: "folder" + value: root.folder + restoreMode: Binding.RestoreBinding + } + Qml.Binding { + target: currentPathField + property: "text" + value: root.urlToPath(root.folder) + restoreMode: Binding.RestoreBinding + } + Keys.onPressed: { + event.accepted = true + switch (event.key) { + case Qt.Key_Back: + case Qt.Key_Escape: + reject() + break + default: + event.accepted = false + break + } + } + Keys.forwardTo: [view.flickableItem] + + SplitView { + id: splitter + x: 0 + width: parent.width + anchors.top: titleBar.bottom + anchors.bottom: bottomBar.top + + Column { + id: sidebar + Component.onCompleted: if (width < 1) width = sidebarSplitter.maxShortcutWidth + height: parent.height + width: 0 // initial width only; settings and onCompleted will override it + visible: root.sidebarVisible + SplitView { + id: sidebarSplitter + orientation: Qt.Vertical + property real rowHeight: 10 + property real maxShortcutWidth: 80 + width: parent.width + height: parent.height - favoritesButtons.height + + ScrollView { + id: shortcutsScroll + Component.onCompleted: { + if (height < 1) + height = sidebarSplitter.rowHeight * 4.65 + Layout.minimumHeight = sidebarSplitter.rowHeight * 2.65 + } + height: 0 // initial width only; settings and onCompleted will override it + ListView { + id: shortcutsView + model: __shortcuts.length + anchors.bottomMargin: ControlsPrivate.Settings.hasTouchScreen ? Screen.pixelDensity * 3.5 : anchors.margins + implicitHeight: model.count * sidebarSplitter.rowHeight + delegate: Item { + id: shortcutItem + width: sidebarSplitter.width + height: shortcutLabel.implicitHeight * 1.5 + Text { + id: shortcutLabel + text: __shortcuts[index].name + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + right: parent.right + margins: 4 + } + elide: Text.ElideLeft + renderType: ControlsPrivate.Settings.isMobile ? Text.QtRendering : Text.NativeRendering + Component.onCompleted: { + sidebarSplitter.rowHeight = parent.height + if (implicitWidth * 1.2 > sidebarSplitter.maxShortcutWidth) + sidebarSplitter.maxShortcutWidth = implicitWidth * 1.2 + } + } + MouseArea { + anchors.fill: parent + onClicked: root.folder = __shortcuts[index].url + } + } + } + } + + ScrollView { + Layout.minimumHeight: sidebarSplitter.rowHeight * 2.5 + ListView { + id: favorites + model: root.favoriteFolders + anchors.topMargin: ControlsPrivate.Settings.hasTouchScreen ? Screen.pixelDensity * 3.5 : anchors.margins + delegate: Item { + width: favorites.width + height: folderLabel.implicitHeight * 1.5 + Text { + id: folderLabel + text: root.favoriteFolders[index] + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + right: parent.right + margins: 4 + } + elide: Text.ElideLeft + renderType: ControlsPrivate.Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + Menu { + id: favoriteCtxMenu + title: root.favoriteFolders[index] + MenuItem { + text: qsTr("Remove favorite") + onTriggered: { + root.favoriteFolders.splice(index, 1) + favorites.model = root.favoriteFolders + } + } + } + MouseArea { + id: favoriteArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + hoverEnabled: true + onClicked: { + if (mouse.button == Qt.LeftButton) + root.folder = root.favoriteFolders[index] + else if (mouse.button == Qt.RightButton) + favoriteCtxMenu.popup() + } + onExited: ControlsPrivate.Tooltip.hideText() + onCanceled: ControlsPrivate.Tooltip.hideText() + Timer { + interval: 1000 + running: favoriteArea.containsMouse && !favoriteArea.pressed && folderLabel.truncated + onTriggered: ControlsPrivate.Tooltip.showText(favoriteArea, + Qt.point(favoriteArea.mouseX, favoriteArea.mouseY), urlToPath(root.favoriteFolders[index])) + } + } + } + } + } + } + + Row { + id: favoritesButtons + height: plusButton.height + 1 + anchors.right: parent.right + anchors.rightMargin: 6 + layoutDirection: Qt.RightToLeft + Button { + id: plusButton + style: IconButtonStyle { } + text: "\ue83e" + tooltip: qsTr("Add the current directory as a favorite") + width: height + onClicked: { + root.favoriteFolders.push(root.folder) + favorites.model = root.favoriteFolders + } + } + } + } + + TableView { + id: view + sortIndicatorVisible: true + Layout.fillWidth: true + Layout.minimumWidth: 40 + property bool needsWidthAdjustment: true + selectionMode: root.selectMultiple ? + (ControlsPrivate.Settings.hasTouchScreen ? SelectionMode.MultiSelection : SelectionMode.ExtendedSelection) : + SelectionMode.SingleSelection + onRowCountChanged: if (needsWidthAdjustment && rowCount > 0) { + resizeColumnsToContents() + needsWidthAdjustment = false + } + model: null + + onActivated: if (view.focus) { + if (view.selection.count > 0 && view.model.isFolder(row)) { + dirDown(view.model.get(row, "filePath")) + } else { + root.acceptSelection() + } + } + onClicked: currentPathField.text = view.model.get(row, "filePath") + + + TableViewColumn { + id: fileNameColumn + role: "fileName" + title: qsTr("Filename") + delegate: Item { + implicitWidth: pathText.implicitWidth + pathText.anchors.leftMargin + pathText.anchors.rightMargin + IconGlyph { + id: fileIcon + x: 4 + height: parent.height - 2 + unicode: view.model.isFolder(styleData.row) ? "\ue804" : "\ue802" + } + Text { + id: pathText + text: styleData.value + anchors { + left: parent.left + right: parent.right + leftMargin: fileIcon.width + 6 + rightMargin: 4 + verticalCenter: parent.verticalCenter + } + color: styleData.textColor + elide: Text.ElideRight + renderType: ControlsPrivate.Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + } + } + TableViewColumn { + role: "fileSuffix" + title: qsTr("Type", "file type (extension)") + // TODO should not need to create a whole new component just to customize the text value + // something like textFormat: function(text) { return view.model.get(styleData.row, "fileIsDir") ? "folder" : text } + delegate: Item { + implicitWidth: sizeText.implicitWidth + sizeText.anchors.leftMargin + sizeText.anchors.rightMargin + Text { + id: sizeText + text: view.model.get(styleData.row, "fileIsDir") ? "folder" : styleData.value + anchors { + left: parent.left + right: parent.right + leftMargin: 4 + rightMargin: 4 + verticalCenter: parent.verticalCenter + } + color: styleData.textColor + elide: Text.ElideRight + renderType: ControlsPrivate.Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + } + } + TableViewColumn { + role: "fileSize" + title: qsTr("Size", "file size") + horizontalAlignment: Text.AlignRight + } + TableViewColumn { id: modifiedColumn; role: "fileModified" ; title: qsTr("Modified", "last-modified time") } + TableViewColumn { id: accessedColumn; role: "fileAccessed" ; title: qsTr("Accessed", "last-accessed time") } + } + } + + ToolBar { + id: titleBar + RowLayout { + anchors.fill: parent + ToolButton { + action: dirUpAction + style: IconButtonStyle { } + Layout.maximumWidth: height * 1.5 + } + TextField { + id: currentPathField + Layout.fillWidth: true + function doAccept() { + root.clearSelection() + if (root.addSelection(root.pathToUrl(text))) + root.accept() + else + root.folder = root.pathFolder(text) + } + onAccepted: doAccept() + } + } + } + Item { + id: bottomBar + width: parent.width + height: buttonRow.height + buttonRow.spacing * 2 + anchors.bottom: parent.bottom + + Row { + id: buttonRow + anchors.right: parent.right + anchors.rightMargin: spacing + anchors.verticalCenter: parent.verticalCenter + spacing: 4 + Button { + id: toggleSidebarButton + checkable: true + style: IconButtonStyle { } + text: "\u25E7" + height: cancelButton.height + width: height + checked: root.sidebarVisible + onClicked: { + root.sidebarVisible = !root.sidebarVisible + } + } + ComboBox { + id: filterField + model: root.nameFilters + visible: !selectFolder + width: bottomBar.width - toggleSidebarButton.width - cancelButton.width - okButton.width - parent.spacing * 6 + anchors.verticalCenter: parent.verticalCenter + onCurrentTextChanged: { + root.selectNameFilter(currentText) + if (view.model) + view.model.nameFilters = root.selectedNameFilterExtensions + } + } + Button { + id: cancelButton + text: qsTr("Cancel") + onClicked: root.reject() + } + Button { + id: okButton + text: root.selectFolder ? qsTr("Choose") : (selectExisting ? qsTr("Open") : qsTr("Save")) + onClicked: { + if (view.model.isFolder(view.currentRow) && !selectFolder) + dirDown(view.model.get(view.currentRow, "filePath")) + else if (!(root.selectExisting)) + currentPathField.doAccept() + else + root.acceptSelection() + } + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultFontDialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultFontDialog.qml new file mode 100644 index 0000000..a307f46 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultFontDialog.qml @@ -0,0 +1,442 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.0 +import QtQuick.Dialogs 1.1 +import QtQuick.Dialogs.Private 1.1 +import QtQuick.Layouts 1.1 +import QtQuick.Window 2.1 +import "qml" + +AbstractFontDialog { + id: root + + property alias font: content.externalFont + property alias currentFont: content.font + property bool isAndroid: Qt.platform.os === "android" + + Screen.onPrimaryOrientationChanged: { + if (isAndroid) + setWidthsToMatchAndroid() + } + + Component.onCompleted: { + if (isAndroid) + setWidthsToMatchAndroid() + } + + function setWidthsToMatchAndroid() { + fontListView.Layout.maximumWidth = content.width - weightListView.width - pointSizeSpinBox.width - content.outerSpacing + wsComboBox.Layout.maximumWidth = (content.width / 2) - content.outerSpacing + } + + Rectangle { + id: content + SystemPalette { id: palette } + + implicitWidth: root.isAndroid ? Math.min(Screen.width, Screen.height) * (9 / 10) : Math.min(root.__maximumDimension, Screen.pixelDensity * 100) + implicitHeight: (Screen.primaryOrientation === Qt.PortraitOrientation || Screen.primaryOrientation === Qt.InvertedPortraitOrientation) + ? Math.max(root.__maximumDimension, Screen.pixelDensity * 60) + : Math.min(root.__maximumDimension, Screen.pixelDensity * 60) + property real spacing: 6 + property real outerSpacing: 12 + color: palette.window + + property font font: Qt.font({ family: "Helvetica", pointSize: 24, weight: Font.Normal }) + property font externalFont + property string writingSystem + property string writingSystemSample + property var pointSizes + + onExternalFontChanged: { + if (Component.status != Component.Ready) + return + + if (content.font != content.externalFont) { + font = externalFont + wsComboBox.reset() + fontListView.reset() + weightListView.reset() + } + } + + Component.onCompleted: externalFontChanged() + + onWritingSystemSampleChanged: { sample.text = writingSystemSample; } + + Keys.onPressed: { + event.accepted = true + switch (event.key) { + case Qt.Key_Return: + case Qt.Key_Select: + updateUponAccepted() + break + case Qt.Key_Escape: + case Qt.Key_Back: + reject() + break + default: + // do nothing + event.accepted = false + break + } + } + + function updateUponAccepted() { + root.font = content.font + root.accept() + } + + ColumnLayout { + id: mainLayout + anchors { fill: parent; margins: content.outerSpacing } + spacing: content.spacing + + GridLayout { + columnSpacing: content.spacing; rowSpacing: content.spacing + columns: 3 + + Label { id: fontNameLabel; horizontalAlignment: Text.AlignLeft; Layout.fillWidth: true; text: qsTr("Font"); font.bold: true } + Label { id: weightLabel; horizontalAlignment: Text.AlignLeft; text: qsTr("Weight"); font.bold: true } + Label { id: sizeLabel; horizontalAlignment: Text.AlignLeft; text: qsTr("Size"); font.bold: true } + TableView { + id: fontListView + focus: true + Layout.fillWidth: true + Layout.fillHeight: true + Layout.preferredWidth: fontColumn.width + headerVisible: false + function reset() { + fontModel.findIndex() + content.pointSizes = fontModel.pointSizes() + fontModel.findPointSizesIndex() + } + TableViewColumn{ id: fontColumn; role: "family"; title: qsTr("Font Family") } + itemDelegate: Text { + width: parent.width + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignLeft + elide: styleData.elideMode + text: styleData.value + } + model: FontListModel { + id: fontModel + scalableFonts: root.scalableFonts + nonScalableFonts: root.nonScalableFonts + monospacedFonts: root.monospacedFonts + proportionalFonts: root.proportionalFonts + Component.onCompleted: fontListView.reset() + onModelReset: { findIndex(); } + function findIndex() { + fontListView.selection.clear() + if (fontModel.count <= 0 || fontListView.rowCount <= 0) + return + + var currentRow = 0 + if (content.font.family != "") { + for (var i = 0; i < fontModel.count; ++i) { + if (content.font.family == fontModel.get(i).family) { + currentRow = i + break + } + } + } + content.font.family = fontModel.get(currentRow).family + fontListView.selection.select(currentRow) + fontListView.positionViewAtRow(currentRow, ListView.Contain) + fontListView.clicked(currentRow) + } + function findPointSizesIndex() { + pointSizesListView.selection.clear() + if (content.pointSizes.length <= 0 || pointSizesListView.rowCount <= 0) + return + + var currentRow = -1 + for (var i = 0; i < content.pointSizes.length; ++i) { + if (content.font.pointSize == content.pointSizes[i]) { + currentRow = i + break + } + } + if (currentRow != -1) { + content.font.pointSize = content.pointSizes[currentRow] + pointSizesListView.selection.select(currentRow) + pointSizesListView.positionViewAtRow(currentRow, ListView.Contain) + pointSizesListView.clicked(currentRow) + } + } + } + function select(row) { + if (row == -1) + return + currentRow = row + content.font.family = fontModel.get(row).family + positionViewAtRow(row, ListView.Contain) + } + onClicked: select(row) + onCurrentRowChanged: select(currentRow) + } + TableView { + id: weightListView + implicitWidth: (Component.status == Component.Ready) ? (weightColumn.width + content.outerSpacing) : (root.isAndroid ? 180 : 100) + Layout.fillHeight: true + Component.onCompleted: resizeColumnsToContents(); + headerVisible: false + function reset() { + weightModel.findIndex() + } + TableViewColumn { id: weightColumn; role: "name"; title: qsTr("Weight") } + itemDelegate: Text { + width: parent.width + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignLeft + elide: styleData.elideMode + text: styleData.value + } + model: ListModel { + id: weightModel + ListElement { name: qsTr("Thin"); weight: Font.Thin } + ListElement { name: qsTr("ExtraLight"); weight: Font.ExtraLight } + ListElement { name: qsTr("Light"); weight: Font.Light } + ListElement { name: qsTr("Normal"); weight: Font.Normal } + ListElement { name: qsTr("Medium"); weight: Font.Medium } + ListElement { name: qsTr("DemiBold"); weight: Font.DemiBold } + ListElement { name: qsTr("Bold"); weight: Font.Bold } + ListElement { name: qsTr("ExtraBold"); weight: Font.ExtraBold } + ListElement { name: qsTr("Black"); weight: Font.Black } + Component.onCompleted: weightListView.reset() + function findIndex() { + var currentRow = 1 + for (var i = 0; i < weightModel.count; ++i) { + if (content.font.weight == weightModel.get(i).weight) { + currentRow = i + break + } + } + content.font.weight = weightModel.get(currentRow).family + weightListView.selection.select(currentRow) + weightListView.positionViewAtRow(currentRow, ListView.Contain) + weightListView.clicked(currentRow) + } + } + function select(row) { + if (row == -1) + return + currentRow = row + content.font.weight = weightModel.get(row).weight + positionViewAtRow(row, ListView.Contain) + } + onClicked: select(row) + onCurrentRowChanged: select(currentRow) + } + ColumnLayout { + SpinBox { + id: pointSizeSpinBox; + implicitWidth: (Component.status == Component.Ready) ? (psColumn.width + content.outerSpacing) : (root.isAndroid ? 130 : 80) + value: content.font.pointSize + decimals: 0 + minimumValue: 1 + maximumValue: 512 + onValueChanged: { + content.font.pointSize = Number(value); + updatePointSizesIndex(); + } + function updatePointSizesIndex() { + pointSizesListView.selection.clear() + if (content.pointSizes.length <= 0 || pointSizesListView.rowCount <= 0) + return + var currentRow = -1 + for (var i = 0; i < content.pointSizes.length; ++i) { + if (content.font.pointSize == content.pointSizes[i]) { + currentRow = i + break + } + } + if (currentRow < 0) + return + content.font.pointSize = content.pointSizes[currentRow] + pointSizesListView.selection.select(currentRow) + pointSizesListView.positionViewAtRow(currentRow, ListView.Contain) + pointSizesListView.clicked(currentRow) + } + } + TableView { + id: pointSizesListView + Layout.fillHeight: true + headerVisible: false + implicitWidth: (Component.status == Component.Ready) ? (psColumn.width + content.outerSpacing) : (root.isAndroid ? 130 : 80) + Component.onCompleted: resizeColumnsToContents(); + TableViewColumn{ id: psColumn; role: ""; title: qsTr("Size") } + itemDelegate: Text { + width: parent.width + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignLeft + elide: styleData.elideMode + text: styleData.value + } + model: content.pointSizes + property bool guard: false + function select(row) { + if (row == -1 || !guard) + return + currentRow = row + content.font.pointSize = content.pointSizes[row] + pointSizeSpinBox.value = content.pointSizes[row] + positionViewAtRow(row, ListView.Contain) + } + onClicked: select(row) + onCurrentRowChanged: { + select(currentRow) + if (!guard) + guard = true + } + } + } + } + + RowLayout { + spacing: content.spacing + Layout.fillHeight: false + ColumnLayout { + spacing: content.spacing + Layout.rowSpan: 3 + Label { text: qsTr("Style"); font.bold: true } + CheckBox { + id: italicCheckBox + text: qsTr("Italic") + checked: content.font.italic + onClicked: { content.font.italic = italicCheckBox.checked } + } + CheckBox { + id: underlineCheckBox + text: qsTr("Underline") + checked: content.font.underline + onClicked: { content.font.underline = underlineCheckBox.checked } + } + CheckBox { + id: overlineCheckBox + text: qsTr("Overline") + checked: content.font.overline + onClicked: { content.font.overline = overlineCheckBox.checked } + } + CheckBox { + id: strikeoutCheckBox + text: qsTr("Strikeout") + checked: content.font.strikeout + onClicked: { content.font.strikeout = strikeoutCheckBox.checked } + } + Item { Layout.fillHeight: true; } //spacer + Label { text: qsTr("Writing System"); font.bold: true } + } + + ColumnLayout { + Layout.rowSpan: 3 + spacing: content.spacing + Layout.columnSpan: 2 + Layout.fillWidth: true + Layout.fillHeight: true + Label { id: sampleLabel; text: qsTr("Sample"); font.bold: true } + + Rectangle { + clip: true + Layout.fillWidth: true + Layout.fillHeight: true + implicitWidth: Math.min(360, sample.implicitWidth + parent.spacing) + implicitHeight: Math.min(240, sample.implicitHeight + parent.spacing) + color: "white" + border.color: "#999" + TextInput { + id: sample + activeFocusOnTab: true + Accessible.name: text + Accessible.role: Accessible.EditableText + anchors.centerIn: parent + font: content.font + onFocusChanged: if (!focus && sample.text == "") sample.text = content.writingSystemSample + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + } + } + } + + RowLayout { + id: buttonRow + Layout.columnSpan: 3 + spacing: content.spacing + ComboBox { + id: wsComboBox + function reset() { + if (wsModel.count > 0) { + currentIndex = 0 + } + } + textRole: "name" + model: WritingSystemListModel { + id: wsModel + Component.onCompleted: wsComboBox.reset() + } + onCurrentIndexChanged: { + if (currentIndex == -1) + return + + content.writingSystem = wsModel.get(currentIndex).name + fontModel.writingSystem = content.writingSystem + content.writingSystemSample = wsModel.get(currentIndex).sample + fontListView.reset() + } + } + Item { Layout.fillWidth: true; } //spacer + Button { + text: qsTr("Cancel") + onClicked: root.reject() + } + Button { + text: qsTr("OK") + onClicked: { + content.updateUponAccepted() + } + } + } + } + } +} + diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultMessageDialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultMessageDialog.qml new file mode 100644 index 0000000..d2f2a07 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/DefaultMessageDialog.qml @@ -0,0 +1,320 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Dialogs 1.1 +import QtQuick.Window 2.1 +import "qml" + +AbstractMessageDialog { + id: root + + Rectangle { + id: content + property real spacing: 6 + property real outerSpacing: 12 + property real buttonsRowImplicitWidth: Screen.pixelDensity * 50 + implicitHeight: contentColumn.implicitHeight + outerSpacing * 2 + onImplicitHeightChanged: root.height = implicitHeight + implicitWidth: Math.min(root.__maximumDimension, Math.max( + mainText.implicitWidth, buttonsRowImplicitWidth) + outerSpacing * 2); + onImplicitWidthChanged: root.width = implicitWidth + color: palette.window + focus: root.visible + Keys.onPressed: { + event.accepted = true + if (event.modifiers === Qt.ControlModifier) + switch (event.key) { + case Qt.Key_A: + detailedText.selectAll() + break + case Qt.Key_C: + detailedText.copy() + break + case Qt.Key_Period: + if (Qt.platform.os === "osx") + reject() + break + } else switch (event.key) { + case Qt.Key_Escape: + case Qt.Key_Back: + reject() + break + case Qt.Key_Enter: + case Qt.Key_Return: + accept() + break + } + } + + Column { + id: contentColumn + spacing: content.spacing + x: content.outerSpacing + y: content.outerSpacing + width: content.width - content.outerSpacing * 2 + + SystemPalette { id: palette } + + Item { + width: parent.width + height: Math.max(icon.height, mainText.height + informativeText.height + content.spacing) + Image { + id: icon + source: root.standardIconSource + } + + Text { + id: mainText + anchors { + left: icon.right + leftMargin: content.spacing + right: parent.right + } + text: root.text + font.weight: Font.Bold + wrapMode: Text.WordWrap + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + + Text { + id: informativeText + anchors { + left: icon.right + right: parent.right + top: mainText.bottom + leftMargin: content.spacing + topMargin: content.spacing + } + text: root.informativeText + wrapMode: Text.WordWrap + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + } + + + Flow { + id: buttons + spacing: content.spacing + layoutDirection: Qt.RightToLeft + width: parent.width + content.outerSpacing + x: -content.outerSpacing + Button { + id: okButton + text: qsTr("OK") + onClicked: root.click(StandardButton.Ok) + visible: root.standardButtons & StandardButton.Ok + } + Button { + id: openButton + text: qsTr("Open") + onClicked: root.click(StandardButton.Open) + visible: root.standardButtons & StandardButton.Open + } + Button { + id: saveButton + text: qsTr("Save") + onClicked: root.click(StandardButton.Save) + visible: root.standardButtons & StandardButton.Save + } + Button { + id: saveAllButton + text: qsTr("Save All") + onClicked: root.click(StandardButton.SaveAll) + visible: root.standardButtons & StandardButton.SaveAll + } + Button { + id: retryButton + text: qsTr("Retry") + onClicked: root.click(StandardButton.Retry) + visible: root.standardButtons & StandardButton.Retry + } + Button { + id: ignoreButton + text: qsTr("Ignore") + onClicked: root.click(StandardButton.Ignore) + visible: root.standardButtons & StandardButton.Ignore + } + Button { + id: applyButton + text: qsTr("Apply") + onClicked: root.click(StandardButton.Apply) + visible: root.standardButtons & StandardButton.Apply + } + Button { + id: yesButton + text: qsTr("Yes") + onClicked: root.click(StandardButton.Yes) + visible: root.standardButtons & StandardButton.Yes + } + Button { + id: yesAllButton + text: qsTr("Yes to All") + onClicked: root.click(StandardButton.YesToAll) + visible: root.standardButtons & StandardButton.YesToAll + } + Button { + id: noButton + text: qsTr("No") + onClicked: root.click(StandardButton.No) + visible: root.standardButtons & StandardButton.No + } + Button { + id: noAllButton + text: qsTr("No to All") + onClicked: root.click(StandardButton.NoToAll) + visible: root.standardButtons & StandardButton.NoToAll + } + Button { + id: discardButton + text: qsTr("Discard") + onClicked: root.click(StandardButton.Discard) + visible: root.standardButtons & StandardButton.Discard + } + Button { + id: resetButton + text: qsTr("Reset") + onClicked: root.click(StandardButton.Reset) + visible: root.standardButtons & StandardButton.Reset + } + Button { + id: restoreDefaultsButton + text: qsTr("Restore Defaults") + onClicked: root.click(StandardButton.RestoreDefaults) + visible: root.standardButtons & StandardButton.RestoreDefaults + } + Button { + id: cancelButton + text: qsTr("Cancel") + onClicked: root.click(StandardButton.Cancel) + visible: root.standardButtons & StandardButton.Cancel + } + Button { + id: abortButton + text: qsTr("Abort") + onClicked: root.click(StandardButton.Abort) + visible: root.standardButtons & StandardButton.Abort + } + Button { + id: closeButton + text: qsTr("Close") + onClicked: root.click(StandardButton.Close) + visible: root.standardButtons & StandardButton.Close + } + Button { + id: moreButton + text: qsTr("Show Details...") + onClicked: content.state = (content.state === "" ? "expanded" : "") + visible: root.detailedText.length > 0 + } + Button { + id: helpButton + text: qsTr("Help") + onClicked: root.click(StandardButton.Help) + visible: root.standardButtons & StandardButton.Help + } + onVisibleChildrenChanged: calculateImplicitWidth() + } + } + + Item { + id: details + width: parent.width + implicitHeight: detailedText.implicitHeight + content.spacing + height: 0 + clip: true + + anchors { + left: parent.left + right: parent.right + top: contentColumn.bottom + topMargin: content.spacing + leftMargin: content.outerSpacing + rightMargin: content.outerSpacing + } + + Flickable { + id: flickable + contentHeight: detailedText.height + anchors.fill: parent + anchors.topMargin: content.spacing + anchors.bottomMargin: content.outerSpacing + TextEdit { + id: detailedText + text: root.detailedText + width: details.width + wrapMode: Text.WordWrap + readOnly: true + selectByMouse: true + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + } + } + + states: [ + State { + name: "expanded" + PropertyChanges { + target: details + height: content.height - contentColumn.height - content.spacing - content.outerSpacing + } + PropertyChanges { + target: content + implicitHeight: contentColumn.implicitHeight + content.spacing * 2 + + detailedText.implicitHeight + content.outerSpacing * 2 + } + PropertyChanges { + target: moreButton + text: qsTr("Hide Details") + } + } + ] + } + function calculateImplicitWidth() { + if (buttons.visibleChildren.length < 2) + return; + var calcWidth = 0; + for (var i = 0; i < buttons.visibleChildren.length; ++i) + calcWidth += Math.max(100, buttons.visibleChildren[i].implicitWidth) + content.spacing + content.buttonsRowImplicitWidth = content.outerSpacing + calcWidth + } + Component.onCompleted: calculateImplicitWidth() +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/libdialogsprivateplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/libdialogsprivateplugin.so new file mode 100755 index 0000000..34401e8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/libdialogsprivateplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/plugins.qmltypes new file mode 100644 index 0000000..f508d50 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/plugins.qmltypes @@ -0,0 +1,334 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick.Dialogs.Private 1.1' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QAbstractItemModel" + prototype: "QObject" + Enum { + name: "LayoutChangeHint" + values: { + "NoLayoutChangeHint": 0, + "VerticalSortHint": 1, + "HorizontalSortHint": 2 + } + } + Enum { + name: "CheckIndexOption" + values: { + "NoOption": 0, + "IndexIsValid": 1, + "DoNotUseParent": 2, + "ParentIsInvalid": 4 + } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + Parameter { name: "roles"; type: "QVector" } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + } + Signal { + name: "headerDataChanged" + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutChanged" } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutAboutToBeChanged" } + Signal { + name: "rowsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { name: "modelAboutToBeReset" } + Signal { name: "modelReset" } + Signal { + name: "rowsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationRow"; type: "int" } + } + Signal { + name: "rowsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "row"; type: "int" } + } + Signal { + name: "columnsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationColumn"; type: "int" } + } + Signal { + name: "columnsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "column"; type: "int" } + } + Method { name: "submit"; type: "bool" } + Method { name: "revert" } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "parent" + type: "QModelIndex" + Parameter { name: "child"; type: "QModelIndex" } + } + Method { + name: "sibling" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "idx"; type: "QModelIndex" } + } + Method { + name: "rowCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "rowCount"; type: "int" } + Method { + name: "columnCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "columnCount"; type: "int" } + Method { + name: "hasChildren" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "hasChildren"; type: "bool" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + } + Method { + name: "fetchMore" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "canFetchMore" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "flags" + type: "Qt::ItemFlags" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + Parameter { name: "flags"; type: "Qt::MatchFlags" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } + Component { + name: "QQuickFontListModel" + prototype: "QAbstractListModel" + exports: ["QtQuick.Dialogs.Private/FontListModel 1.1"] + exportMetaObjectRevisions: [0] + Property { name: "writingSystem"; type: "string" } + Property { name: "scalableFonts"; type: "bool" } + Property { name: "nonScalableFonts"; type: "bool" } + Property { name: "monospacedFonts"; type: "bool" } + Property { name: "proportionalFonts"; type: "bool" } + Property { name: "count"; type: "int"; isReadonly: true } + Signal { name: "rowCountChanged" } + Method { + name: "setScalableFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setNonScalableFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setMonospacedFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setProportionalFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "get" + type: "QJSValue" + Parameter { name: "index"; type: "int" } + } + Method { name: "pointSizes"; type: "QJSValue" } + } + Component { + name: "QQuickWritingSystemListModel" + prototype: "QAbstractListModel" + exports: ["QtQuick.Dialogs.Private/WritingSystemListModel 1.1"] + exportMetaObjectRevisions: [0] + Property { name: "writingSystems"; type: "QStringList"; isReadonly: true } + Property { name: "count"; type: "int"; isReadonly: true } + Signal { name: "rowCountChanged" } + Method { + name: "get" + type: "QJSValue" + Parameter { name: "index"; type: "int" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/qmldir new file mode 100644 index 0000000..562d59e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/Private/qmldir @@ -0,0 +1,4 @@ +module QtQuick.Dialogs.Private +plugin dialogsprivateplugin +classname QtQuick2DialogsPrivatePlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetColorDialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetColorDialog.qml new file mode 100644 index 0000000..891b371 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetColorDialog.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.PrivateWidgets 1.0 + +QtColorDialog { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetFileDialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetFileDialog.qml new file mode 100644 index 0000000..f888431 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetFileDialog.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.PrivateWidgets 1.0 + +QtFileDialog { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetFontDialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetFontDialog.qml new file mode 100644 index 0000000..e1a10e5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetFontDialog.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.PrivateWidgets 1.1 + +QtFontDialog { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetMessageDialog.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetMessageDialog.qml new file mode 100644 index 0000000..52e8f1c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/WidgetMessageDialog.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.PrivateWidgets 1.1 + +QtMessageDialog { } diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/checkers.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/checkers.png new file mode 100644 index 0000000..72cb9f0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/checkers.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/checkmark.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/checkmark.png new file mode 100644 index 0000000..821aafc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/checkmark.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/copy.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/copy.png new file mode 100644 index 0000000..2aeb282 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/copy.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/critical.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/critical.png new file mode 100644 index 0000000..dc9c5ae Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/critical.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/crosshairs.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/crosshairs.png new file mode 100644 index 0000000..9a61946 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/crosshairs.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/information.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/information.png new file mode 100644 index 0000000..0a2eb87 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/information.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/question.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/question.png new file mode 100644 index 0000000..2dd92fd Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/question.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/slider_handle.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/slider_handle.png new file mode 100644 index 0000000..e3b9654 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/slider_handle.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/sunken_frame.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/sunken_frame.png new file mode 100644 index 0000000..178c309 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/sunken_frame.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/warning.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/warning.png new file mode 100644 index 0000000..cba78f6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/warning.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/window_border.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/window_border.png new file mode 100644 index 0000000..23c011d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/images/window_border.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/libdialogplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/libdialogplugin.so new file mode 100755 index 0000000..1bc8440 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/libdialogplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/plugins.qmltypes new file mode 100644 index 0000000..559bb48 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/plugins.qmltypes @@ -0,0 +1,484 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick.Dialogs 1.3' + +Module { + dependencies: [ + "Qt.labs.folderlistmodel 2.1", + "Qt.labs.settings 1.0", + "QtGraphicalEffects 1.12", + "QtQml 2.14", + "QtQml.Models 2.2", + "QtQuick 2.9", + "QtQuick.Controls 1.5", + "QtQuick.Controls.Styles 1.4", + "QtQuick.Extras 1.4", + "QtQuick.Layouts 1.1", + "QtQuick.Window 2.2" + ] + Component { + name: "QQuickAbstractColorDialog" + prototype: "QQuickAbstractDialog" + Property { name: "showAlphaChannel"; type: "bool" } + Property { name: "color"; type: "QColor" } + Property { name: "currentColor"; type: "QColor" } + Property { name: "currentHue"; type: "double"; isReadonly: true } + Property { name: "currentSaturation"; type: "double"; isReadonly: true } + Property { name: "currentLightness"; type: "double"; isReadonly: true } + Property { name: "currentAlpha"; type: "double"; isReadonly: true } + Signal { name: "selectionAccepted" } + Method { + name: "setVisible" + Parameter { name: "v"; type: "bool" } + } + Method { + name: "setModality" + Parameter { name: "m"; type: "Qt::WindowModality" } + } + Method { + name: "setTitle" + Parameter { name: "t"; type: "string" } + } + Method { + name: "setColor" + Parameter { name: "arg"; type: "QColor" } + } + Method { + name: "setCurrentColor" + Parameter { name: "currentColor"; type: "QColor" } + } + Method { + name: "setShowAlphaChannel" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + name: "QQuickAbstractDialog" + prototype: "QObject" + Enum { + name: "StandardButton" + values: { + "NoButton": 0, + "Ok": 1024, + "Save": 2048, + "SaveAll": 4096, + "Open": 8192, + "Yes": 16384, + "YesToAll": 32768, + "No": 65536, + "NoToAll": 131072, + "Abort": 262144, + "Retry": 524288, + "Ignore": 1048576, + "Close": 2097152, + "Cancel": 4194304, + "Discard": 8388608, + "Help": 16777216, + "Apply": 33554432, + "Reset": 67108864, + "RestoreDefaults": 134217728, + "NButtons": 134217729 + } + } + Enum { + name: "StandardButtons" + values: { + "NoButton": 0, + "Ok": 1024, + "Save": 2048, + "SaveAll": 4096, + "Open": 8192, + "Yes": 16384, + "YesToAll": 32768, + "No": 65536, + "NoToAll": 131072, + "Abort": 262144, + "Retry": 524288, + "Ignore": 1048576, + "Close": 2097152, + "Cancel": 4194304, + "Discard": 8388608, + "Help": 16777216, + "Apply": 33554432, + "Reset": 67108864, + "RestoreDefaults": 134217728, + "NButtons": 134217729 + } + } + Property { name: "visible"; type: "bool" } + Property { name: "modality"; type: "Qt::WindowModality" } + Property { name: "title"; type: "string" } + Property { name: "isWindow"; type: "bool"; isReadonly: true } + Property { name: "x"; type: "int" } + Property { name: "y"; type: "int" } + Property { name: "width"; type: "int" } + Property { name: "height"; type: "int" } + Property { name: "__maximumDimension"; type: "int"; isReadonly: true } + Signal { name: "visibilityChanged" } + Signal { name: "geometryChanged" } + Signal { name: "accepted" } + Signal { name: "rejected" } + Method { name: "open" } + Method { name: "close" } + Method { + name: "setX" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setY" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setWidth" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setHeight" + Parameter { name: "arg"; type: "int" } + } + } + Component { + name: "QQuickAbstractFileDialog" + prototype: "QQuickAbstractDialog" + Property { name: "selectExisting"; type: "bool" } + Property { name: "selectMultiple"; type: "bool" } + Property { name: "selectFolder"; type: "bool" } + Property { name: "folder"; type: "QUrl" } + Property { name: "nameFilters"; type: "QStringList" } + Property { name: "selectedNameFilter"; type: "string" } + Property { name: "selectedNameFilterExtensions"; type: "QStringList"; isReadonly: true } + Property { name: "selectedNameFilterIndex"; type: "int" } + Property { name: "fileUrl"; type: "QUrl"; isReadonly: true } + Property { name: "fileUrls"; type: "QList"; isReadonly: true } + Property { name: "sidebarVisible"; type: "bool" } + Property { name: "defaultSuffix"; type: "string" } + Property { name: "shortcuts"; type: "QJSValue"; isReadonly: true } + Property { name: "__shortcuts"; type: "QJSValue"; isReadonly: true } + Signal { name: "filterSelected" } + Signal { name: "fileModeChanged" } + Signal { name: "selectionAccepted" } + Method { + name: "setVisible" + Parameter { name: "v"; type: "bool" } + } + Method { + name: "setTitle" + Parameter { name: "t"; type: "string" } + } + Method { + name: "setSelectExisting" + Parameter { name: "s"; type: "bool" } + } + Method { + name: "setSelectMultiple" + Parameter { name: "s"; type: "bool" } + } + Method { + name: "setSelectFolder" + Parameter { name: "s"; type: "bool" } + } + Method { + name: "setFolder" + Parameter { name: "f"; type: "QUrl" } + } + Method { + name: "setNameFilters" + Parameter { name: "f"; type: "QStringList" } + } + Method { + name: "selectNameFilter" + Parameter { name: "f"; type: "string" } + } + Method { + name: "setSelectedNameFilterIndex" + Parameter { name: "idx"; type: "int" } + } + Method { + name: "setSidebarVisible" + Parameter { name: "s"; type: "bool" } + } + Method { + name: "setDefaultSuffix" + Parameter { name: "suffix"; type: "string" } + } + } + Component { + name: "QQuickAbstractFontDialog" + prototype: "QQuickAbstractDialog" + Property { name: "scalableFonts"; type: "bool" } + Property { name: "nonScalableFonts"; type: "bool" } + Property { name: "monospacedFonts"; type: "bool" } + Property { name: "proportionalFonts"; type: "bool" } + Property { name: "font"; type: "QFont" } + Property { name: "currentFont"; type: "QFont" } + Signal { name: "selectionAccepted" } + Method { + name: "setVisible" + Parameter { name: "v"; type: "bool" } + } + Method { + name: "setModality" + Parameter { name: "m"; type: "Qt::WindowModality" } + } + Method { + name: "setTitle" + Parameter { name: "t"; type: "string" } + } + Method { + name: "setFont" + Parameter { name: "arg"; type: "QFont" } + } + Method { + name: "setCurrentFont" + Parameter { name: "arg"; type: "QFont" } + } + Method { + name: "setScalableFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setNonScalableFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setMonospacedFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setProportionalFonts" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + name: "QQuickAbstractMessageDialog" + prototype: "QQuickAbstractDialog" + Enum { + name: "Icon" + values: { + "NoIcon": 0, + "Information": 1, + "Warning": 2, + "Critical": 3, + "Question": 4 + } + } + Property { name: "text"; type: "string" } + Property { name: "informativeText"; type: "string" } + Property { name: "detailedText"; type: "string" } + Property { name: "icon"; type: "Icon" } + Property { name: "standardIconSource"; type: "QUrl"; isReadonly: true } + Property { name: "standardButtons"; type: "QQuickAbstractDialog::StandardButtons" } + Property { + name: "clickedButton" + type: "QQuickAbstractDialog::StandardButton" + isReadonly: true + } + Signal { name: "buttonClicked" } + Signal { name: "discard" } + Signal { name: "help" } + Signal { name: "yes" } + Signal { name: "no" } + Signal { name: "apply" } + Signal { name: "reset" } + Method { + name: "setVisible" + Parameter { name: "v"; type: "bool" } + } + Method { + name: "setTitle" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setText" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setInformativeText" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setDetailedText" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setIcon" + Parameter { name: "icon"; type: "Icon" } + } + Method { + name: "setStandardButtons" + Parameter { name: "buttons"; type: "StandardButtons" } + } + Method { + name: "click" + Parameter { name: "button"; type: "QQuickAbstractDialog::StandardButton" } + } + } + Component { + name: "QQuickColorDialog" + defaultProperty: "contentItem" + prototype: "QQuickAbstractColorDialog" + exports: ["QtQuick.Dialogs/AbstractColorDialog 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + } + Component { + name: "QQuickDialog1" + defaultProperty: "contentItem" + prototype: "QQuickAbstractDialog" + exports: ["QtQuick.Dialogs/AbstractDialog 1.2"] + exportMetaObjectRevisions: [0] + Property { name: "title"; type: "string" } + Property { name: "standardButtons"; type: "QQuickAbstractDialog::StandardButtons" } + Property { + name: "clickedButton" + type: "QQuickAbstractDialog::StandardButton" + isReadonly: true + } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Signal { name: "buttonClicked" } + Signal { name: "discard" } + Signal { name: "help" } + Signal { name: "yes" } + Signal { name: "no" } + Signal { name: "apply" } + Signal { name: "reset" } + Method { + name: "setTitle" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setStandardButtons" + Parameter { name: "buttons"; type: "StandardButtons" } + } + Method { + name: "click" + Parameter { name: "button"; type: "QQuickAbstractDialog::StandardButton" } + } + Method { name: "__standardButtonsLeftModel"; type: "QJSValue" } + Method { name: "__standardButtonsRightModel"; type: "QJSValue" } + } + Component { + name: "QQuickFileDialog" + defaultProperty: "contentItem" + prototype: "QQuickAbstractFileDialog" + exports: ["QtQuick.Dialogs/AbstractFileDialog 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Method { name: "clearSelection" } + Method { + name: "addSelection" + type: "bool" + Parameter { name: "path"; type: "QUrl" } + } + } + Component { + name: "QQuickFontDialog" + defaultProperty: "contentItem" + prototype: "QQuickAbstractFontDialog" + exports: ["QtQuick.Dialogs/AbstractFontDialog 1.1"] + exportMetaObjectRevisions: [0] + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + } + Component { + name: "QQuickMessageDialog" + defaultProperty: "contentItem" + prototype: "QQuickAbstractMessageDialog" + exports: ["QtQuick.Dialogs/AbstractMessageDialog 1.1"] + exportMetaObjectRevisions: [0] + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + } + Component { + name: "QQuickStandardButton" + exports: ["QtQuick.Dialogs/StandardButton 1.1"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickStandardIcon" + exports: ["QtQuick.Dialogs/StandardIcon 1.1"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + prototype: "QQuickColorDialog" + name: "QtQuick.Dialogs/ColorDialog 1.0" + exports: ["QtQuick.Dialogs/ColorDialog 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentItem" + Property { name: "__valueSet"; type: "bool" } + Method { name: "__setControlsFromColor"; type: "QVariant" } + } + Component { + prototype: "QQuickDialog1" + name: "QtQuick.Dialogs/Dialog 1.2" + exports: ["QtQuick.Dialogs/Dialog 1.2"] + exportMetaObjectRevisions: [2] + isComposite: true + defaultProperty: "data" + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Signal { + name: "actionChosen" + Parameter { name: "action"; type: "QVariant" } + } + Method { name: "setupButtons"; type: "QVariant" } + } + Component { + prototype: "QQuickDialog1" + name: "QtQuick.Dialogs/Dialog 1.3" + exports: ["QtQuick.Dialogs/Dialog 1.3"] + exportMetaObjectRevisions: [3] + isComposite: true + defaultProperty: "data" + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Signal { + name: "actionChosen" + Parameter { name: "action"; type: "QVariant" } + } + Method { name: "setupButtons"; type: "QVariant" } + } + Component { + prototype: "QQuickFileDialog" + name: "QtQuick.Dialogs/FileDialog 1.0" + exports: ["QtQuick.Dialogs/FileDialog 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "contentItem" + Property { name: "modelComponent"; type: "QQmlComponent"; isPointer: true } + Property { name: "settings"; type: "QQmlSettings"; isPointer: true } + Property { name: "showFocusHighlight"; type: "bool" } + Property { name: "palette"; type: "QQuickSystemPalette"; isPointer: true } + Property { name: "favoriteFolders"; type: "QVariant" } + Property { name: "dirUpAction"; type: "QQuickAction1"; isPointer: true } + Method { + name: "dirDown" + type: "QVariant" + Parameter { name: "path"; type: "QVariant" } + } + Method { name: "dirUp"; type: "QVariant" } + Method { name: "acceptSelection"; type: "QVariant" } + } + Component { + prototype: "QQuickFontDialog" + name: "QtQuick.Dialogs/FontDialog 1.1" + exports: ["QtQuick.Dialogs/FontDialog 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "contentItem" + Property { name: "font"; type: "QFont" } + Property { name: "currentFont"; type: "QFont" } + } + Component { + prototype: "QQuickMessageDialog" + name: "QtQuick.Dialogs/MessageDialog 1.1" + exports: ["QtQuick.Dialogs/MessageDialog 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "contentItem" + Method { name: "calculateImplicitWidth"; type: "QVariant" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/ColorSlider.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/ColorSlider.qml new file mode 100644 index 0000000..8322910 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/ColorSlider.qml @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls.Private 1.0 + +Item { + id: colorSlider + + property real value: 1 + property real maximum: 1 + property real minimum: 0 + property string text: "" + property bool pressed: mouseArea.pressed + property bool integer: false + property Component trackDelegate + property string handleSource: "../images/slider_handle.png" + + width: parent.width + height: handle.height + textText.implicitHeight + + function updatePos() { + if (maximum > minimum) { + var pos = (track.width - 10) * (value - minimum) / (maximum - minimum) + 5; + return Math.min(Math.max(pos, 5), track.width - 5) - 10; + } else { + return 5; + } + } + + SystemPalette { id: palette } + + Column { + id: column + width: parent.width + spacing: 12 + Text { + id: textText + anchors.horizontalCenter: parent.horizontalCenter + text: colorSlider.text + anchors.left: parent.left + color: palette.windowText + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + } + + Item { + id: track + height: 8 + anchors.left: parent.left + anchors.right: parent.right + + Loader { + sourceComponent: trackDelegate + width: parent.height + height: parent.width + y: width + } + + BorderImage { + source: "../images/sunken_frame.png" + border.left: 8 + border.right: 8 + border.top:8 + border.bottom: 8 + anchors.fill: track + anchors.margins: -1 + anchors.topMargin: -2 + anchors.leftMargin: -2 + } + + Image { + id: handle + anchors.verticalCenter: parent.verticalCenter + smooth: true + source: "../images/slider_handle.png" + x: updatePos() - 8 + z: 1 + } + + MouseArea { + id: mouseArea + anchors {left: parent.left; right: parent.right; verticalCenter: parent.verticalCenter} + height: handle.height + width: handle.width + preventStealing: true + + onPressed: { + var handleX = Math.max(0, Math.min(mouseX, mouseArea.width)) + var realValue = (maximum - minimum) * handleX / mouseArea.width + minimum; + value = colorSlider.integer ? Math.round(realValue) : realValue; + } + + onPositionChanged: { + if (pressed) { + var handleX = Math.max(0, Math.min(mouseX, mouseArea.width)) + var realValue = (maximum - minimum) * handleX / mouseArea.width + minimum; + value = colorSlider.integer ? Math.round(realValue) : realValue; + } + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/DefaultWindowDecoration.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/DefaultWindowDecoration.qml new file mode 100644 index 0000000..ceb8b21 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/DefaultWindowDecoration.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +Rectangle { + color: "#80000000" + anchors.fill: parent + z: 1000000 + property alias content: borderImage.content + property bool dismissOnOuterClick: true + signal dismissed + MouseArea { + anchors.fill: parent + onClicked: if (dismissOnOuterClick) dismissed() + BorderImage { + id: borderImage + property Item content + + MouseArea { anchors.fill: parent } + + width: content ? content.width + 15 : 0 + height: content ? content.height + 15 : 0 + onWidthChanged: if (content) content.x = 5 + onHeightChanged: if (content) content.y = 5 + border { left: 10; top: 10; right: 10; bottom: 10 } + clip: true + source: "../images/window_border.png" + anchors.centerIn: parent + onContentChanged: if (content) content.parent = borderImage + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/IconButtonStyle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/IconButtonStyle.qml new file mode 100644 index 0000000..a09debe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/IconButtonStyle.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.1 + +ButtonStyle { + FontLoader { id: iconFont; source: "icons.ttf" } + + label: Text { + id: text + font.family: iconFont.name + font.pointSize: TextSingleton.font.pointSize * 1.5 + renderType: Settings.isMobile ? Text.QtRendering : Text.NativeRendering + text: control.text + color: SystemPaletteSingleton.buttonText(control.enabled) + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/IconGlyph.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/IconGlyph.qml new file mode 100644 index 0000000..728ce7e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/IconGlyph.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Dialogs 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$ +** +****************************************************************************/ + +import QtQuick 2.2 + +Text { + id: icon + width: height + verticalAlignment: Text.AlignVCenter + font.family: iconFont.name + property alias unicode: icon.text + FontLoader { id: iconFont; source: "icons.ttf"; onNameChanged: console.log("custom font" + name) } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/icons.ttf b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/icons.ttf new file mode 100644 index 0000000..54289ca Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/icons.ttf differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/qmldir new file mode 100644 index 0000000..b130eec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qml/qmldir @@ -0,0 +1,3 @@ +ColorSlider 1.0 ColorSlider.qml +IconButtonStyle 1.0 IconButtonStyle.qml +IconGlyph 1.0 IconGlyph.qml diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qmldir new file mode 100644 index 0000000..88df140 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Dialogs/qmldir @@ -0,0 +1,10 @@ +module QtQuick.Dialogs +plugin dialogplugin +classname QtQuick2DialogsPlugin +typeinfo plugins.qmltypes +depends Qt.labs.folderlistmodel 1.0 +depends Qt.labs.settings 1.0 +depends QtQuick.Dialogs.Private 1.0 +depends QtQuick.Controls 1.3 +depends QtQuick.PrivateWidgets 1.1 +depends QtQml 2.14 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/CircularGauge.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/CircularGauge.qml new file mode 100644 index 0000000..d42e17d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/CircularGauge.qml @@ -0,0 +1,160 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +// Workaround for QTBUG-37751; we need this import for RangeModel, although we shouldn't. +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras.Private 1.0 + +/*! + \qmltype CircularGauge + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \ingroup extras-non-interactive + \brief A gauge that displays a value within a range along an arc. + + \image circulargauge.png CircularGauge + + The CircularGauge is similar to traditional mechanical gauges that use a + needle to display a value from some input, such as the speed of a vehicle or + air pressure, for example. + + The minimum and maximum values displayable by the gauge can be set with the + \l minimumValue and \l maximumValue properties. The angle at which these + values are displayed can be set with the + \l {CircularGaugeStyle::}{minimumValueAngle} and + \l {CircularGaugeStyle::}{maximumValueAngle} properties of + \l {CircularGaugeStyle}. + + Example: + \code + CircularGauge { + value: accelerating ? maximumValue : 0 + anchors.centerIn: parent + + property bool accelerating: false + + Keys.onSpacePressed: accelerating = true + Keys.onReleased: { + if (event.key === Qt.Key_Space) { + accelerating = false; + event.accepted = true; + } + } + + Component.onCompleted: forceActiveFocus() + + Behavior on value { + NumberAnimation { + duration: 1000 + } + } + } + \endcode + + You can create a custom appearance for a CircularGauge by assigning a + \l {CircularGaugeStyle}. +*/ + +Control { + id: circularGauge + + style: Settings.styleComponent(Settings.style, "CircularGaugeStyle.qml", circularGauge) + + /*! + \qmlproperty real CircularGauge::minimumValue + + This property holds the smallest value displayed by the gauge. + */ + property alias minimumValue: range.minimumValue + + /*! + \qmlproperty real CircularGauge::maximumValue + + This property holds the largest value displayed by the gauge. + */ + property alias maximumValue: range.maximumValue + + /*! + This property holds the current value displayed by the gauge, which will + always be between \l minimumValue and \l maximumValue, inclusive. + */ + property alias value: range.value + + /*! + \qmlproperty real CircularGauge::stepSize + + This property holds the size of the value increments that the needle + displays. + + For example, when stepSize is \c 10 and value is \c 0, adding \c 5 to + \l value will have no visible effect on the needle, although \l value + will still be incremented. Adding an extra \c 5 to \l value will then + cause the needle to point to \c 10. + */ + property alias stepSize: range.stepSize + + /*! + This property determines whether or not the gauge displays tickmarks, + minor tickmarks, and labels. + + For more fine-grained control over what is displayed, the following + style components of + \l CircularGaugeStyle can be + used: + + \list + \li \l {CircularGaugeStyle::}{tickmark} + \li \l {CircularGaugeStyle::}{minorTickmark} + \li \l {CircularGaugeStyle::}{tickmarkLabel} + \endlist + */ + property bool tickmarksVisible: true + + RangeModel { + id: range + minimumValue: 0 + maximumValue: 100 + stepSize: 0 + value: minimumValue + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/DelayButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/DelayButton.qml new file mode 100644 index 0000000..9a0c3a2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/DelayButton.qml @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype DelayButton + \inherits QtQuickControls::Button + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \ingroup extras-interactive + \brief A checkable button that triggers an action when held in long enough. + + \image delaybutton.png A DelayButton + + The DelayButton is a checkable button that incorporates a delay before + the button becomes checked and the \l activated signal is emitted. This + delay prevents accidental presses. + + The current progress is expressed as a decimal value between \c 0.0 and + \c 1.0. The time it takes for \l activated to be emitted is measured in + milliseconds, and can be set with the \l delay property. + + The progress is indicated by a progress indicator around the button. When + the indicator reaches completion, it flashes. + + \image delaybutton-progress.png A DelayButton being held down + A DelayButton being held down + \image delaybutton-activated.png A DelayButton after being activated + A DelayButton after being activated + + You can create a custom appearance for a DelayButton by assigning a + \l {DelayButtonStyle}. +*/ + +Button { + id: root + + style: Settings.styleComponent(Settings.style, "DelayButtonStyle.qml", root) + + /*! + \qmlproperty real DelayButton::progress + + This property holds the current progress as displayed by the progress + indicator, in the range \c 0.0 - \c 1.0. + */ + readonly property alias progress: root.__progress + + /*! + This property holds the time it takes (in milliseconds) for \l progress + to reach \c 1.0 and emit \l activated. + + The default value is \c 3000 ms. + */ + property int delay: 3000 + + /*! + This signal is emitted when \l progress reaches \c 1.0 and the button + becomes checked. + */ + signal activated + + + /*! \internal */ + property real __progress: 0.0 + + Behavior on __progress { + id: progressBehavior + + NumberAnimation { + id: numberAnimation + } + } + + Qml.Binding { + // Force checkable to false to get full control over the checked -property + target: root + property: "checkable" + value: false + restoreMode: Binding.RestoreBinding + } + + onProgressChanged: { + if (__progress === 1.0) { + checked = true; + activated(); + } + } + + onCheckedChanged: { + if (checked) { + if (__progress < 1) { + // Programmatically activated the button; don't animate. + progressBehavior.enabled = false; + __progress = 1; + progressBehavior.enabled = true; + } + } else { + // Unchecked the button after it was flashing; it should instantly stop + // flashing (with no reversed progress bar). + progressBehavior.enabled = false; + __progress = 0; + progressBehavior.enabled = true; + } + } + + onPressedChanged: { + if (checked) { + if (pressed) { + // Pressed the button to stop the activation. + checked = false; + } + } else { + var effectiveDelay = pressed ? delay : delay * 0.3; + // Not active. Either the button is being held down or let go. + numberAnimation.duration = Math.max(0, (pressed ? 1 - __progress : __progress) * effectiveDelay); + __progress = pressed ? 1 : 0; + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Dial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Dial.qml new file mode 100644 index 0000000..688f13d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Dial.qml @@ -0,0 +1,229 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 + +/*! + \qmltype Dial + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \ingroup extras-interactive + \brief A circular dial that is rotated to set a value. + + \image dial.png A Dial + + The Dial is similar to a traditional dial knob that is found on devices + such as stereos or industrial equipment. It allows the user to specify a + value within a range. + + Like CircularGauge, Dial can display tickmarks to give an indication of + the current value. When a suitable stepSize is combined with + \l {DialStyle::}{tickmarkStepSize}, + the dial "snaps" to each tickmark. + + You can create a custom appearance for a Dial by assigning a + \l {DialStyle}. +*/ + +Control { + id: dial + + activeFocusOnTab: true + style: Settings.styleComponent(Settings.style, "DialStyle.qml", dial) + + /*! + \qmlproperty real Dial::value + + The angle of the handle along the dial, in the range of + \c 0.0 to \c 1.0. + + The default value is \c{0.0}. + */ + property alias value: range.value + + /*! + \qmlproperty real Dial::minimumValue + + The smallest value allowed by the dial. + + The default value is \c{0.0}. + + \sa value, maximumValue + */ + property alias minimumValue: range.minimumValue + + /*! + \qmlproperty real Dial::maximumValue + + The largest value allowed by the dial. + + The default value is \c{1.0}. + + \sa value, minimumValue + */ + property alias maximumValue: range.maximumValue + + /*! + \qmlproperty real Dial::hovered + + This property holds whether the button is being hovered. + */ + readonly property alias hovered: mouseArea.containsMouse + + /*! + \qmlproperty real Dial::stepSize + + The default value is \c{0.0}. + */ + property alias stepSize: range.stepSize + + /*! + \internal + Determines whether the dial can be freely rotated past the zero marker. + + The default value is \c false. + */ + property bool __wrap: false + + /*! + This property specifies whether the dial should gain active focus when + pressed. + + The default value is \c false. + + \sa pressed + */ + property bool activeFocusOnPress: false + + /*! + \qmlproperty bool Dial::pressed + + Returns \c true if the dial is pressed. + + \sa activeFocusOnPress + */ + readonly property alias pressed: mouseArea.pressed + + /*! + This property determines whether or not the dial displays tickmarks, + minor tickmarks, and labels. + + For more fine-grained control over what is displayed, the following + style components of + \l {DialStyle} can be used: + + \list + \li \l {DialStyle::}{tickmark} + \li \l {DialStyle::}{minorTickmark} + \li \l {DialStyle::}{tickmarkLabel} + \endlist + + The default value is \c true. + */ + property bool tickmarksVisible: true + + Keys.onLeftPressed: value -= stepSize + Keys.onDownPressed: value -= stepSize + Keys.onRightPressed: value += stepSize + Keys.onUpPressed: value += stepSize + Keys.onPressed: { + if (event.key === Qt.Key_Home) { + value = minimumValue; + event.accepted = true; + } else if (event.key === Qt.Key_End) { + value = maximumValue; + event.accepted = true; + } + } + + RangeModel { + id: range + minimumValue: 0.0 + maximumValue: 1.0 + stepSize: 0 + value: 0 + } + + MouseArea { + id: mouseArea + hoverEnabled: true + parent: __panel.background.parent + anchors.fill: parent + + onPositionChanged: { + if (pressed) { + value = valueFromPoint(mouseX, mouseY); + } + } + onPressed: { + if (!__style.__dragToSet) + value = valueFromPoint(mouseX, mouseY); + + if (activeFocusOnPress) + dial.forceActiveFocus(); + } + + function bound(val) { return Math.max(minimumValue, Math.min(maximumValue, val)); } + + function valueFromPoint(x, y) + { + var yy = height / 2.0 - y; + var xx = x - width / 2.0; + var angle = (xx || yy) ? Math.atan2(yy, xx) : 0; + + if (angle < Math.PI/ -2) + angle = angle + Math.PI * 2; + + var range = maximumValue - minimumValue; + var value; + if (__wrap) + value = (minimumValue + range * (Math.PI * 3 / 2 - angle) / (2 * Math.PI)); + else + value = (minimumValue + range * (Math.PI * 4 / 3 - angle) / (Math.PI * 10 / 6)); + + return bound(value) + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Gauge.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Gauge.qml new file mode 100644 index 0000000..276cc12 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Gauge.qml @@ -0,0 +1,210 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 + +/*! + \qmltype Gauge + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \ingroup extras-non-interactive + \brief A straight gauge that displays a value within a range. + + \image gauge.png Gauge + + The Gauge control displays a value within some range along a horizontal or + vertical axis. It can be thought of as an extension of ProgressBar, + providing tickmarks and labels to provide a visual measurement of the + progress. + + The minimum and maximum values displayable by the gauge can be set with the + \l minimumValue and \l maximumValue properties. + + Example: + \code + Gauge { + minimumValue: 0 + value: 50 + maximumValue: 100 + anchors.centerIn: parent + } + \endcode + + You can create a custom appearance for a Gauge by assigning a + \l {GaugeStyle}. +*/ + +Control { + id: gauge + + style: Settings.styleComponent(Settings.style, "GaugeStyle.qml", gauge) + + /*! + This property holds the smallest value displayed by the gauge. + + The default value is \c 0. + */ + property alias minimumValue: range.minimumValue + + /*! + This property holds the value displayed by the gauge. + + The default value is \c 0. + */ + property alias value: range.value + + /*! + This property holds the largest value displayed by the gauge. + + The default value is \c 100. + */ + property alias maximumValue: range.maximumValue + + /*! + This property determines the orientation of the gauge. + + The default value is \c Qt.Vertical. + */ + property int orientation: Qt.Vertical + + /*! + This property determines the alignment of each tickmark within the + gauge. When \l orientation is \c Qt.Vertical, the valid values are: + + \list + \li Qt.AlignLeft + \li Qt.AlignRight + \endlist + + Any other value will cause \c Qt.AlignLeft to be used, which is also the + default value for this orientation. + + When \l orientation is \c Qt.Horizontal, the valid values are: + + \list + \li Qt.AlignTop + \li Qt.AlignBottom + \endlist + + Any other value will cause \c Qt.AlignBottom to be used, which is also + the default value for this orientation. + */ + property int tickmarkAlignment: orientation == Qt.Vertical ? Qt.AlignLeft : Qt.AlignBottom + property int __tickmarkAlignment: { + if (orientation == Qt.Vertical) { + return (tickmarkAlignment == Qt.AlignLeft || tickmarkAlignment == Qt.AlignRight) ? tickmarkAlignment : Qt.AlignLeft; + } + + return (tickmarkAlignment == Qt.AlignTop || tickmarkAlignment == Qt.AlignBottom) ? tickmarkAlignment : Qt.AlignBottom; + } + + /*! + \internal + + TODO: finish this + + This property determines whether or not the tickmarks and their labels + are drawn inside (over) the gauge. The value of this property affects + \l tickmarkAlignment. + */ + property bool __tickmarksInside: false + + /*! + This property determines the rate at which tickmarks are drawn on the + gauge. The lower the value, the more often tickmarks are drawn. + + The default value is \c 10. + */ + property real tickmarkStepSize: 10 + + /*! + This property determines the amount of minor tickmarks drawn between + each regular tickmark. + + The default value is \c 4. + */ + property int minorTickmarkCount: 4 + + /*! + \qmlproperty font Gauge::font + + The font to use for the tickmark text. + */ + property alias font: hiddenText.font + + /*! + This property accepts a function that formats the given \a value for + display in + \l {GaugeStyle::}{tickmarkLabel}. + + For example, to provide a custom format that displays all values with 3 + decimal places: + + \code + formatValue: function(value) { + return value.toFixed(3); + } + \endcode + + The default function does no formatting. + */ + property var formatValue: function(value) { + return value; + } + + property alias __hiddenText: hiddenText + Text { + id: hiddenText + text: formatValue(maximumValue) + visible: false + } + + RangeModel { + id: range + minimumValue: 0 + value: 0 + maximumValue: 100 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/PieMenu.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/PieMenu.qml new file mode 100644 index 0000000..cfaaecb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/PieMenu.qml @@ -0,0 +1,738 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 +import QtQuick.Extras.Private.CppUtils 1.0 as CppUtils + +/*! + \qmltype PieMenu + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \ingroup extras-interactive + \brief A popup menu that displays several menu items along an arc. + + \image piemenu.png A PieMenu + + The PieMenu provides a radial context menu as an alternative to a + traditional menu. All of the items in a PieMenu are an equal distance + from the center of the control. + + \section2 Populating the Menu + + To create a menu, define at least one MenuItem as a child of it: + \code + PieMenu { + id: pieMenu + + MenuItem { + text: "Action 1" + onTriggered: print("Action 1") + } + MenuItem { + text: "Action 2" + onTriggered: print("Action 2") + } + MenuItem { + text: "Action 3" + onTriggered: print("Action 3") + } + } + \endcode + + By default, only the currently selected item's text is displayed above the + menu. To provide text that is always visible when there is no current item, + set the \l title property. + + \section2 Displaying the Menu + + The typical use case for a menu is to open at the point of the mouse + cursor after a right click occurs. To do that, define a MouseArea that + covers the region upon which clicks should open the menu. When the + MouseArea is right-clicked, call the popup() function: + \code + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.RightButton + + onClicked: pieMenu.popup(mouseX, mouseY) + } + \endcode + + If the menu is opened in a position where some of its menu items would be + outside of \l boundingItem, it is automatically moved to a position where + they will not be hidden. By default, the boundingItem is set to the parent + of the menu. It can also be set to \c null to prevent this behavior. + + PieMenu can be displayed at any position on the screen. With a traditional + context menu, the menu would be positioned with its top left corner at the + position of the right click, but since PieMenu is radial, we position it + centered over the position of the right click. + + To create a PieMenu that opens after a long press and selects items upon + releasing, you can combine ActivationMode.ActivateOnRelease with a + MouseArea using a Timer: + \code + MouseArea { + id: touchArea + anchors.fill: parent + + Timer { + id: pressAndHoldTimer + interval: 300 + onTriggered: pieMenu.popup(touchArea.mouseX, touchArea.mouseY); + } + + onPressed: pressAndHoldTimer.start() + onReleased: pressAndHoldTimer.stop(); + } + + PieMenu { + id: pieMenu + + triggerMode: TriggerMode.TriggerOnRelease + + MenuItem { + text: "Action 1" + onTriggered: print("Action 1") + } + MenuItem { + text: "Action 2" + onTriggered: print("Action 2") + } + MenuItem { + text: "Action 3" + onTriggered: print("Action 3") + } + } + \endcode + + You can hide individual menu items by setting their visible property to + \c false. Hiding items does not affect the + \l {PieMenuStyle::}{startAngle} or + \l {PieMenuStyle::}{endAngle}; the + remaining items will grow to consume the available space. + + You can create a custom appearance for a PieMenu by assigning a \l {PieMenuStyle} +*/ + +Control { + id: pieMenu + visible: false + + style: Settings.styleComponent(Settings.style, "PieMenuStyle.qml", pieMenu) + + /*! + This property reflects the angle (in radians) created by the imaginary + line from the center of the menu to the position of the cursor. + + Its value is undefined when the menu is not visible. + */ + readonly property real selectionAngle: { + var centerX = width / 2; + var centerY = height / 2; + var targetX = __protectedScope.selectionPos.x; + var targetY = __protectedScope.selectionPos.y; + + var xDistance = centerX - targetX; + var yDistance = centerY - targetY; + + var angleToTarget = Math.atan2(xDistance, yDistance) * -1; + angleToTarget; + } + + /*! + \qmlproperty enumeration PieMenu::activationMode + + This property determines the method for selecting items in the menu. + + \list + \li An activationMode of \a ActivationMode.ActivateOnPress means that menu + items will only be selected when a mouse press event occurs over them. + + \li An activationMode of \a ActivationMode.ActivateOnRelease means that menu + items will only be selected when a mouse release event occurs over them. + This means that the user must keep the mouse button down after opening + the menu and release the mouse over the item they wish to select. + + \li An activationMode of \a ActivationMode.ActivateOnClick means that menu + items will only be selected when the user clicks once over them. + \endlist + + \warning Changing the activationMode while the menu is visible will + result in undefined behavior. + + \deprecated Use triggerMode instead. + */ + property alias activationMode: pieMenu.triggerMode + + /*! + \qmlproperty enumeration PieMenu::triggerMode + + This property determines the method for selecting items in the menu. + + \list + \li A triggerMode of \a TriggerMode.TriggerOnPress means that menu + items will only be selected when a mouse press event occurs over them. + + \li A triggerMode of \a TriggerMode.TriggerOnRelease means that menu + items will only be selected when a mouse release event occurs over them. + This means that the user must keep the mouse button down after opening + the menu and release the mouse over the item they wish to select. + + \li A triggerMode of \a TriggerMode.TriggerOnClick means that menu + items will only be selected when the user clicks once over them. + \endlist + + \warning Changing the triggerMode while the menu is visible will + result in undefined behavior. + */ + property int triggerMode: TriggerMode.TriggerOnClick + + /*! + \qmlproperty list menuItems + + The list of menu items displayed by this menu. + + You can assign menu items by declaring them as children of PieMenu: + \code + PieMenu { + MenuItem { + text: "Action 1" + onTriggered: function() { print("Action 1"); } + } + MenuItem { + text: "Action 2" + onTriggered: function() { print("Action 2"); } + } + MenuItem { + text: "Action 3" + onTriggered: function() { print("Action 3"); } + } + } + \endcode + */ + default property alias menuItems: defaultPropertyHack.menuItems + + QtObject { + // Can't specify a list as a default property (QTBUG-10822) + id: defaultPropertyHack + property list menuItems + } + + /*! + \qmlproperty int PieMenu::currentIndex + + The index of the the menu item that is currently under the mouse, + or \c -1 if there is no such item. + */ + readonly property alias currentIndex: protectedScope.currentIndex + + /*! + \qmlproperty int PieMenu::currentItem + + The menu item that is currently under the mouse, or \c null if there is + no such item. + */ + readonly property alias currentItem: protectedScope.currentItem + + /*! + This property defines the text that is shown above the menu when + there is no current menu item (currentIndex is \c -1). + + The default value is \c "" (an empty string). + */ + property string title: "" + + /*! + The item which the menu must stay within. + + A typical use case for PieMenu involves: + + \list + \li A MouseArea that determines the clickable area within which the + menu can be opened. + \li The bounds that the menu must not go outside of. + \endlist + + Although they sound similar, they have different purposes. Consider the + example below: + + \image piemenu-boundingItem-example.png Canvas boundingItem example + + The user can only open the menu within the inner rectangle. In this + case, they've opened the menu on the edge of the MouseArea, but there + would not be enough room to display the entire menu centered at the + cursor position, so it was moved to the left. + + If for some reason we didn't want this restriction, we can set + boundingItem to \c null: + + \image piemenu-boundingItem-null-example.png Canvas null boundingItem example + + By default, the menu's \l {Item::}{parent} is the boundingItem. + */ + property Item boundingItem: parent + + /*! + \qmlmethod void popup(real x, real y) + + Opens the menu at coordinates \a x, \a y. + */ + function popup(x, y) { + if (x !== undefined) + pieMenu.x = x - pieMenu.width / 2; + if (y !== undefined) + pieMenu.y = y - pieMenu.height / 2; + + pieMenu.visible = true; + } + + /*! + \qmlmethod void addItem(string text) + + Adds a \a text item to the end of the menu items. + + Equivalent to passing calling \c insertItem(menuItems.length, text). + + Returns the newly added item. + */ + function addItem(text) { + return insertItem(menuItems.length, text); + } + + /*! + \qmlmethod void insertItem(int before, string text) + + Inserts a MenuItem with \a text before the index at \a before. + + To insert an item at the end, pass \c menuItems.length. + + Returns the newly inserted item, or \c null if \a before is invalid. + */ + function insertItem(before, text) { + if (before < 0 || before > menuItems.length) { + return null; + } + + var newItems = __protectedScope.copyItemsToJsArray(); + var newItem = Qt.createQmlObject("import QtQuick.Controls 1.1; MenuItem {}", pieMenu, ""); + newItem.text = text; + newItems.splice(before, 0, newItem); + + menuItems = newItems; + return newItem; + } + + /*! + \qmlmethod void removeItem(item) + + Removes \a item from the menu. + */ + function removeItem(item) { + for (var i = 0; i < menuItems.length; ++i) { + if (menuItems[i] === item) { + var newItems = __protectedScope.copyItemsToJsArray(); + + newItems.splice(i, 1); + menuItems = newItems; + break; + } + } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: !Settings.hasTouchScreen && triggerMode !== TriggerMode.TriggerOnRelease + acceptedButtons: Qt.LeftButton | Qt.RightButton + onContainsMouseChanged: if (!containsMouse) __protectedScope.currentIndex = -1 + objectName: "PieMenu internal MouseArea" + + // The mouse thief also updates the selectionPos, so we can't bind to + // this mouseArea's mouseX/mouseY. + onPositionChanged: { + __protectedScope.selectionPos = Qt.point(mouseX, mouseY) + } + } + + /*! \internal */ + property alias __mouseThief: mouseThief + + CppUtils.MouseThief { + id: mouseThief + + onPressed: { + __protectedScope.selectionPos = Qt.point(mouseX, mouseY); + if (__protectedScope.handleEvent(ActivationMode.ActivateOnPress)) { + mouseThief.acceptCurrentEvent(); + // We handled the press event, so we can reset this now. + mouseThief.receivedPressEvent = false; + } + } + onReleased: { + __protectedScope.selectionPos = Qt.point(mouseX, mouseY); + if (__protectedScope.handleEvent(ActivationMode.ActivateOnRelease)) { + mouseThief.acceptCurrentEvent(); + // We handled the press event, so we can reset this now. + mouseThief.receivedPressEvent = false; + } + __protectedScope.pressedIndex = -1; + } + onClicked: { + __protectedScope.selectionPos = Qt.point(mouseX, mouseY); + if (__protectedScope.handleEvent(ActivationMode.ActivateOnClick)) { + mouseThief.acceptCurrentEvent(); + } + + // Clicked is the last stage in a click event (press, release, click), + // so we can safely set this to false now. + mouseThief.receivedPressEvent = false; + } + onTouchUpdate: __protectedScope.selectionPos = Qt.point(mouseX, mouseY) + } + + onVisibleChanged: { + // parent check is for when it's created without a parent, + // which we do in the tests, for example. + if (parent) { + if (visible) { + if (boundingItem) + __protectedScope.moveWithinBounds(); + + // We need to grab the mouse so that we can detect released() + // (which is only emitted after pressed(), which our MouseArea can't + // emit as it didn't have focus until we were made visible). + mouseThief.grabMouse(mouseArea); + } else { + mouseThief.ungrabMouse(); + __protectedScope.selectionPos = Qt.point(width / 2, height / 2); + } + } + } + onSelectionAngleChanged: __protectedScope.checkForCurrentItem() + + /*! \internal */ + property QtObject __protectedScope: QtObject { + id: protectedScope + + property int currentIndex: -1 + property MenuItem currentItem: currentIndex != -1 ? visibleItems[currentIndex] : null + property point selectionPos: Qt.point(width / 2, height / 2) + property int pressedIndex: -1 + readonly property var localRect: mapFromItem(mouseArea, mouseArea.mouseX, mouseArea.mouseY) + readonly property var visibleItems: { + var items = []; + for (var i = 0; i < menuItems.length; ++i) { + if (menuItems[i].visible) { + items.push(menuItems[i]); + } + } + return items; + } + + onSelectionPosChanged: __protectedScope.checkForCurrentItem() + + // Can't bind directly, because the menu sets this to (0, 0) on closing. + onLocalRectChanged: { + if (visible) + selectionPos = Qt.point(localRect.x, localRect.y); + } + + function copyItemsToJsArray() { + var newItems = []; + for (var j = 0; j < menuItems.length; ++j) { + newItems.push(menuItems[j]); + } + return newItems; + } + + /*! + Returns \c true if the mouse is over the section at \a itemIndex. + */ + function isMouseOver(itemIndex) { + if (__style == null) + return false; + + // Our mouse angle's origin is north naturally, but the section angles need to be + // altered to have their origin north, so we need to remove the alteration here in order to compare properly. + // For example, section 0 will start at -1.57, whereas we want it to start at 0. + var sectionStart = __protectedScope.sectionStartAngle(itemIndex) + Math.PI / 2; + var sectionEnd = __protectedScope.sectionEndAngle(itemIndex) + Math.PI / 2; + + var selAngle = selectionAngle; + var isWithinOurAngle = false; + + if (sectionStart > CppUtils.MathUtils.pi2) { + sectionStart %= CppUtils.MathUtils.pi2; + } else if (sectionStart < -CppUtils.MathUtils.pi2) { + sectionStart %= -CppUtils.MathUtils.pi2; + } + + if (sectionEnd > CppUtils.MathUtils.pi2) { + sectionEnd %= CppUtils.MathUtils.pi2; + } else if (sectionEnd < -CppUtils.MathUtils.pi2) { + sectionEnd %= -CppUtils.MathUtils.pi2; + } + + // If the section crosses the -180 => 180 wrap-around point (from atan2), + // temporarily rotate the section so it doesn't. + if (sectionStart > Math.PI) { + var difference = sectionStart - Math.PI; + selAngle -= difference; + sectionStart -= difference; + sectionEnd -= difference; + } else if (sectionStart < -Math.PI) { + difference = Math.abs(sectionStart - (-Math.PI)); + selAngle += difference; + sectionStart += difference; + sectionEnd += difference; + } + + if (sectionEnd > Math.PI) { + difference = sectionEnd - Math.PI; + selAngle -= difference; + sectionStart -= difference; + sectionEnd -= difference; + } else if (sectionEnd < -Math.PI) { + difference = Math.abs(sectionEnd - (-Math.PI)); + selAngle += difference; + sectionStart += difference; + sectionEnd += difference; + } + + // If we moved the mouse past -180 or 180, we need to move it back within, + // without changing its actual direction. + if (selAngle > Math.PI) { + selAngle = selAngle - CppUtils.MathUtils.pi2; + } else if (selAngle < -Math.PI) { + selAngle += CppUtils.MathUtils.pi2; + } + + if (sectionStart > sectionEnd) { + isWithinOurAngle = selAngle >= sectionEnd && selAngle < sectionStart; + } else { + isWithinOurAngle = selAngle >= sectionStart && selAngle < sectionEnd; + } + + var x1 = width / 2; + var y1 = height / 2; + var x2 = __protectedScope.selectionPos.x; + var y2 = __protectedScope.selectionPos.y; + var distanceFromCenter = Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2); + var cancelRadiusSquared = __style.cancelRadius * __style.cancelRadius; + var styleRadiusSquared = __style.radius * __style.radius; + var isWithinOurRadius = distanceFromCenter >= cancelRadiusSquared + && distanceFromCenter < styleRadiusSquared; + return isWithinOurAngle && isWithinOurRadius; + } + + readonly property real arcRange: endAngleRadians - startAngleRadians + + /*! + The size of one section in radians. + */ + readonly property real sectionSize: arcRange / visibleItems.length + readonly property real startAngleRadians: CppUtils.MathUtils.degToRadOffset(__style.startAngle) + readonly property real endAngleRadians: CppUtils.MathUtils.degToRadOffset(__style.endAngle) + + readonly property real circumferenceOfFullRange: 2 * Math.PI * __style.radius + readonly property real percentageOfFullRange: (arcRange / (Math.PI * 2)) + readonly property real circumferenceOfSection: (sectionSize / arcRange) * (percentageOfFullRange * circumferenceOfFullRange) + + function sectionStartAngle(section) { + var start = startAngleRadians + section * sectionSize; + return start; + } + + function sectionCenterAngle(section) { + return (sectionStartAngle(section) + sectionEndAngle(section)) / 2; + } + + function sectionEndAngle(section) { + var end = startAngleRadians + section * sectionSize + sectionSize; + return end; + } + + function handleEvent(eventType) { + if (!visible) + return false; + + checkForCurrentItem(); + + if (eventType === TriggerMode.TriggerOnPress) + pressedIndex = currentIndex; + + if (eventType === TriggerMode.TriggerOnPress && triggerMode === TriggerMode.TriggerOnClick) { + // We *MUST* accept press events if we plan on also accepting the release + // (aka click, since we create that ourselves) event. If we don't, the + // external mouse area gets the press event but not the release event, + // and won't open until a release event is received, which means until the + // user taps twice on the external mouse area. + // Usually, we accept the current event in the onX MouseThief event handlers above, + // but there we set receivedPressEvent to false if this function says it handled + // the event, which we don't want, since TriggerOnClick is expecting to have + // received a press event. So, we ensure that receivedPressEvent stays true + // by saying we didn't handle the event, even though we actually do. + mouseThief.acceptCurrentEvent(); + return false; + } + + if (triggerMode === eventType) { + if (eventType === TriggerMode.TriggerOnClick && !mouseThief.receivedPressEvent) { + // When the trigger mode is TriggerOnClick, we can't + // act on a click event if we didn't receive the press. + return false; + } + + // Setting visible to false resets the selectionPos to the center + // of the menu, which in turn causes the currentItem check to be re-evaluated, + // which sees that there's no current item because the selectionPos is centered. + // To avoid all of that, we store these variables before setting visible to false. + var currentItemBeforeClosing = currentItem; + var selectionPosBeforeClosing = selectionPos; + var currentIndexBeforeClosing = currentIndex; + + // If the cursor was over an item; trigger it. If it wasn't, + // close our menu regardless. We do this first so that it's + // possible to keep the menu open by setting visible to true in onTriggered. + visible = false; + + if (currentItemBeforeClosing) { + currentItemBeforeClosing.trigger(); + } + + if (visible && !Settings.hasTouchScreen && !Settings.isMobile) { + // The user kept the menu open in onTriggered, so restore the hover stuff. + selectionPos = selectionPosBeforeClosing; + currentIndex = currentIndexBeforeClosing; + } + + // If the trigger mode and event are Release, we should ensure + // that we received a press event beforehand. If we didn't, we shouldn't steal + // the event in MouseThief's event filter. + return mouseThief.receivedPressEvent; + } + return false; + } + + function checkForCurrentItem() { + // Use a temporary varibable because setting currentIndex to -1 here + // will trigger onCurrentIndexChanged. + if (!!visibleItems) { + var hoveredIndex = -1; + for (var i = 0; i < visibleItems.length; ++i) { + if (isMouseOver(i)) { + hoveredIndex = i; + break; + } + } + currentIndex = hoveredIndex; + } + } + + function simplifyAngle(angle) { + var simplified = angle % 360; + if (simplified < 0) + simplified += 360; + return simplified; + } + + function isWithinBottomEdge() { + var start = simplifyAngle(pieMenu.__style.startAngle); + var end = simplifyAngle(pieMenu.__style.endAngle); + return start >= 270 && end <= 90 && ((start < 360 && end <= 360) || (start >= 0 && end > 0)); + } + + function isWithinTopEdge() { + var start = simplifyAngle(pieMenu.__style.startAngle); + var end = simplifyAngle(pieMenu.__style.endAngle); + return start >= 90 && start < 270 && end > 90 && end <= 270; + } + + function isWithinLeftEdge() { + var start = simplifyAngle(pieMenu.__style.startAngle); + var end = simplifyAngle(pieMenu.__style.endAngle); + return (start === 360 || start >= 0) && start < 180 && end > 0 && end <= 180; + } + + function isWithinRightEdge() { + var start = simplifyAngle(pieMenu.__style.startAngle); + var end = simplifyAngle(pieMenu.__style.endAngle); + return start >= 180 && start < 360 && end > 180 && (end === 360 || end === 0); + } + + /*! + Moves the menu if it would open with parts outside of \a rootParent. + */ + function moveWithinBounds() { + // Find the bounding rect of the bounding item in the parent's referential. + var topLeft = boundingItem.mapToItem(pieMenu.parent, 0, 0); + var topRight = boundingItem.mapToItem(pieMenu.parent, boundingItem.width, 0); + var bottomLeft = boundingItem.mapToItem(pieMenu.parent, 0, boundingItem.height); + var bottomRight = boundingItem.mapToItem(pieMenu.parent, boundingItem.width, boundingItem.height); + + // If the boundingItem is rotated, normalize the bounding rect. + topLeft.x = Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x); + topLeft.y = Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y); + bottomRight.x = Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x); + bottomRight.y = Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y); + + if (pieMenu.x < topLeft.x && !isWithinLeftEdge()) { + // The width and height of the menu is always that of a full circle, + // so the menu is not always outside an edge when it's outside the edge - + // it depends on the start and end angles. + pieMenu.x = topLeft.x; + } else if (pieMenu.x + pieMenu.width > bottomRight.x && !isWithinRightEdge()) { + pieMenu.x = bottomRight.x - pieMenu.width; + } + + if (pieMenu.y < topLeft.y && !isWithinTopEdge()) { + pieMenu.y = topLeft.y; + } else if (pieMenu.y + pieMenu.height > bottomRight.y && !isWithinBottomEdge()) { + pieMenu.y = bottomRight.y - pieMenu.height; + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularButton.qml new file mode 100644 index 0000000..6a147eb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularButton.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 + +/*! + \internal +*/ +Button { + id: button + style: Settings.styleComponent(Settings.style, "CircularButtonStyle.qml", button) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularButtonStyleHelper.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularButtonStyleHelper.qml new file mode 100644 index 0000000..713d727 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularButtonStyleHelper.qml @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 + +QtObject { + id: circularButtonStyleHelper + + property Item control + + property color buttonColorUpTop: "#e3e3e3" + property color buttonColorUpBottom: "#b3b3b3" + property color buttonColorDownTop: "#d3d3d3" + property color buttonColorDownBottom: "#939393" + property color outerArcColorTop: "#9c9c9c" + property color outerArcColorBottom: Qt.rgba(0.941, 0.941, 0.941, 0.29) + property color innerArcColorTop: "#e3e3e3" + property color innerArcColorBottom: "#acacac" + property real innerArcColorBottomStop: 0.4 + property color shineColor: Qt.rgba(1, 1, 1, 0.29) + property real smallestAxis: control ? Math.min(control.width, control.height) : 0 + property real outerArcLineWidth: smallestAxis * 0.04 + property real innerArcLineWidth: Math.max(1, outerArcLineWidth * 0.1) + property real shineArcLineWidth: Math.max(1, outerArcLineWidth * 0.1) + property real implicitWidth: Math.round(TextSingleton.implicitHeight * 8) + property real implicitHeight: Math.round(TextSingleton.implicitHeight * 8) + + property color textColorUp: "#4e4e4e" + property color textColorDown: "#303030" + property color textRaisedColorUp: "#ffffff" + property color textRaisedColorDown: "#e3e3e3" + + property real radius: (smallestAxis * 0.5) - outerArcLineWidth - innerArcLineWidth + property real halfRadius: radius / 2 + property real outerArcRadius: innerArcRadius + outerArcLineWidth / 2 + property real innerArcRadius: radius + innerArcLineWidth / 2 + property real shineArcRadius: outerArcRadius + outerArcLineWidth / 2 - shineArcLineWidth / 2 + property real zeroAngle: Math.PI * 0.5 + + property color buttonColorTop: control && control.pressed ? buttonColorDownTop : buttonColorUpTop + property color buttonColorBottom: control && control.pressed ? buttonColorDownBottom : buttonColorUpBottom + + function toPixels(percentageOfSmallestAxis) { + return percentageOfSmallestAxis * smallestAxis; + } + + function paintBackground(ctx) { + ctx.reset(); + + if (outerArcRadius < 0 || radius < 0) + return; + + var xCenter = ctx.canvas.width / 2; + var yCenter = ctx.canvas.height / 2; + + /* Draw outer arc */ + ctx.beginPath(); + ctx.lineWidth = outerArcLineWidth; + ctx.arc(xCenter, yCenter, outerArcRadius, 0, Math.PI * 2, false); + var gradient = ctx.createRadialGradient(xCenter, yCenter - halfRadius, + 0, xCenter, yCenter - halfRadius, radius * 1.5); + gradient.addColorStop(0, outerArcColorTop); + gradient.addColorStop(1, outerArcColorBottom); + ctx.strokeStyle = gradient; + ctx.stroke(); + + /* Draw the shine along the bottom */ + ctx.beginPath(); + ctx.lineWidth = shineArcLineWidth; + ctx.arc(xCenter, yCenter, shineArcRadius, 0, Math.PI, false); + gradient = ctx.createLinearGradient(xCenter, yCenter + radius, xCenter, yCenter); + gradient.addColorStop(0, shineColor); + gradient.addColorStop(0.5, "rgba(255, 255, 255, 0)"); + ctx.strokeStyle = gradient; + ctx.stroke(); + + /* Draw inner arc */ + ctx.beginPath(); + ctx.lineWidth = innerArcLineWidth + 1; + ctx.arc(xCenter, yCenter, innerArcRadius, 0, Math.PI * 2, false); + gradient = ctx.createLinearGradient(xCenter, yCenter - halfRadius, + xCenter, yCenter + halfRadius); + gradient.addColorStop(0, innerArcColorTop); + gradient.addColorStop(innerArcColorBottomStop, innerArcColorBottom); + ctx.strokeStyle = gradient; + ctx.stroke(); + + /* Draw the button's body */ + ctx.beginPath(); + ctx.ellipse(xCenter - radius, yCenter - radius, radius * 2, radius * 2); + gradient = ctx.createRadialGradient(xCenter, yCenter + radius * 0.85, 0, + xCenter, yCenter + radius * 0.85, radius * (0.85 * 2)); + gradient.addColorStop(1, buttonColorTop); + gradient.addColorStop(0, buttonColorBottom); + ctx.fillStyle = gradient; + ctx.fill(); + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularTickmarkLabel.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularTickmarkLabel.qml new file mode 100644 index 0000000..997a784 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/CircularTickmarkLabel.qml @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +// Workaround for QTBUG-37751; we need this import for RangeModel, although we shouldn't. +import QtQuick.Controls 1.1 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 + +Control { + id: label + style: Settings.styleComponent(Settings.style, "CircularTickmarkLabelStyle.qml", label) + + property alias minimumValue: range.minimumValue + + property alias maximumValue: range.maximumValue + + property alias stepSize: range.stepSize + + RangeModel { + id: range + minimumValue: 0 + maximumValue: 100 + stepSize: 0 + // Not used. + value: minimumValue + } + + /*! + This property determines the angle at which the first tickmark is drawn. + */ + property real minimumValueAngle: -145 + + /*! + This property determines the angle at which the last tickmark is drawn. + */ + property real maximumValueAngle: 145 + + /*! + The range between \l minimumValueAngle and \l maximumValueAngle, in + degrees. + */ + readonly property real angleRange: maximumValueAngle - minimumValueAngle + + /*! + The interval at which tickmarks are displayed. + */ + property real tickmarkStepSize: 10 + + /*! + The distance in pixels from the outside of the control (outerRadius) at + which the outermost point of the tickmark line is drawn. + */ + property real tickmarkInset: 0.0 + + /*! + The amount of tickmarks displayed. + */ + readonly property int tickmarkCount: __tickmarkCount + + /*! + The amount of minor tickmarks between each tickmark. + */ + property int minorTickmarkCount: 4 + + /*! + The distance in pixels from the outside of the control (outerRadius) at + which the outermost point of the minor tickmark line is drawn. + */ + property real minorTickmarkInset: 0.0 + + /*! + The distance in pixels from the outside of the control (outerRadius) at + which the center of the value marker text is drawn. + */ + property real labelInset: __style.__protectedScope.toPixels(0.19) + + /*! + The interval at which tickmark labels are displayed. + */ + property real labelStepSize: tickmarkStepSize + + /*! + The amount of tickmark labels displayed. + */ + readonly property int labelCount: (maximumValue - minimumValue) / labelStepSize + 1 + + /*! \internal */ + readonly property real __tickmarkCount: tickmarkStepSize > 0 ? (maximumValue - minimumValue) / tickmarkStepSize + 1 : 0 + + /*! + This property determines whether or not the control displays tickmarks, + minor tickmarks, and labels. + */ + property bool tickmarksVisible: true + + /*! + Returns \a value as an angle in degrees. + + For example, if minimumValueAngle is set to \c 270 and maximumValueAngle + is set to \c 90, this function will return \c 270 when passed + minimumValue and \c 90 when passed maximumValue. + */ + function valueToAngle(value) { + var normalised = (value - minimumValue) / (maximumValue - minimumValue); + return (maximumValueAngle - minimumValueAngle) * normalised + minimumValueAngle; + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/Handle.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/Handle.qml new file mode 100644 index 0000000..6c3fdaa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/Handle.qml @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtGraphicalEffects 1.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras.Private 1.1 +import QtQuick.Extras.Private.CppUtils 1.0 + +Control { + id: root + x: handleArea.centerOfHandle.x - width / 2 + y: handleArea.centerOfHandle.y - height / 2 + + style: Settings.styleComponent(Settings.style, "HandleStyle.qml", root) + + /*! + The angle of the handle along the circumference of \l rotationRadius in + radians, scaled to be in the range of 0.0 to 1.0. + */ + property alias value: range.value + + RangeModel { + id: range + minimumValue: 0.0 + maximumValue: 1.0 + stepSize: 0 + value: minimumValue + } + + /*! + The angle in radians where the dial starts. + */ + property real zeroAngle: 0 + + /*! + The radius of the rotation of this handle. + */ + property real rotationRadius: 50 + + /*! + The center of the dial. This is the origin point for the handle's + rotation. + */ + property real dialXCenter: 0 + property real dialYCenter: 0 + + /*! + This property holds the amount of extra room added to each side of + the handle to make it easier to drag on touch devices. + */ + property real allowance: Math.max(width, height) * 1.5 + + /* + The function used to determine the handle's value from the position of + the mouse. + + Can be set to provide custom value calculation. It expects these + parameters: \c mouseX, \c mouseY, \c xCenter, \c yCenter, \c zeroAngle + */ + property var valueFromMouse: handleArea.valueFromMouse + + property alias handleArea: handleArea + + MouseArea { + id: handleArea + // Respond to value changes by calculating the new center of the handle. + property point centerOfHandle: MathUtils.centerAlongCircle(dialXCenter, dialYCenter, + 0, 0, MathUtils.valueToAngle(value, 1, zeroAngle), rotationRadius); + + anchors.fill: parent + anchors.margins: -allowance + + onPositionChanged: { + // Whenever the handle is moved with the mouse, update the value. + value = root.valueFromMouse(mouse.x + centerOfHandle.x - allowance, + mouse.y + centerOfHandle.y - allowance, dialXCenter, dialYCenter, zeroAngle); + } + + // A helper function for onPositionChanged. + function valueFromMouse(mouseX, mouseY, xCenter, yCenter, zeroAngle) { + return MathUtils.angleToValue( + MathUtils.halfPi - Math.atan2(mouseX - xCenter, mouseY - yCenter), 1, zeroAngle); + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/PieMenuIcon.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/PieMenuIcon.qml new file mode 100644 index 0000000..7cb57e0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/PieMenuIcon.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.3 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 +import QtQuick.Extras.Private.CppUtils 1.0 + +Loader { + id: iconLoader + active: iconSource != "" + + property PieMenu control: null + property QtObject styleData: null + + readonly property string iconSource: styleData && styleData.index < control.__protectedScope.visibleItems.length + ? control.__protectedScope.visibleItems[styleData.index].iconSource + : "" + + sourceComponent: Image { + id: iconImage + source: iconSource + x: pos.x + y: pos.y + scale: scaleFactor + + readonly property point pos: MathUtils.centerAlongCircle( + iconLoader.parent.width / 2, iconLoader.parent.height / 2, width, height, + MathUtils.degToRadOffset(sectionCenterAngle(styleData.index)), control.__style.__iconOffset) + + /* + The icons should scale with the menu at some point, so that they + stay within the bounds of each section. We down-scale the image by + whichever of the following amounts are larger: + + a) The amount by which the largest dimension's diagonal size exceeds + the "selectable" radius. The selectable radius is the distance in pixels + between lines A and B in the incredibly visually appealing image below: + + __________ + - B - + / \ + / ____ \ + | / A \ | + --------| |-------- + + b) The amount by which the diagonal exceeds the circumference of + one section. + */ + readonly property real scaleFactor: { + var largestDimension = Math.max(iconImage.sourceSize.width, iconImage.sourceSize.height) * Math.sqrt(2); + // TODO: add padding + var radiusDifference = largestDimension - control.__style.__selectableRadius; + var circumferenceDifference = largestDimension - Math.abs(control.__protectedScope.circumferenceOfSection); + if (circumferenceDifference > 0 || radiusDifference > 0) { + // We need to down-scale. + if (radiusDifference > circumferenceDifference) { + return control.__style.__selectableRadius / largestDimension; + } else { + return Math.abs(control.__protectedScope.circumferenceOfSection) / largestDimension; + } + } + return 1; + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/TextSingleton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/TextSingleton.qml new file mode 100644 index 0000000..78e9003 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/TextSingleton.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.1 + +Text { +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/qmldir new file mode 100644 index 0000000..3b115bb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Private/qmldir @@ -0,0 +1 @@ +module QtQuick.Extras.Private diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/StatusIndicator.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/StatusIndicator.qml new file mode 100644 index 0000000..aee171c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/StatusIndicator.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 + +/*! + \qmltype StatusIndicator + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \ingroup extras-non-interactive + \brief An indicator that displays active or inactive states. + + \image statusindicator-active.png A StatusIndicator in the active state + A StatusIndicator in the active state. + \image statusindicator-inactive.png A StatusIndicator in the inactive state + A StatusIndicator in the inactive state. + + The StatusIndicator displays active or inactive states. By using different + colors via the \l color property, StatusIndicator can provide extra + context to these states. For example: + + \table + \row + \li QML + \li Result + \row + \li + \code + import QtQuick 2.2 + import QtQuick.Extras 1.4 + + Rectangle { + width: 100 + height: 100 + color: "#cccccc" + + StatusIndicator { + anchors.centerIn: parent + color: "green" + } + } + \endcode + \li \image statusindicator-green.png "Green StatusIndicator" + \endtable + + You can create a custom appearance for a StatusIndicator by assigning a + \l {StatusIndicatorStyle}. +*/ + +Control { + id: statusIndicator + + style: Settings.styleComponent(Settings.style, "StatusIndicatorStyle.qml", statusIndicator) + + /*! + This property specifies whether the indicator is active or inactive. + + The default value is \c false (off). + + \deprecated Use active instead. + */ + property alias on: statusIndicator.active + + /*! + This property specifies whether the indicator is active or inactive. + + The default value is \c false (inactive). + */ + property bool active: false + + /*! + This property specifies the color of the indicator when it is active. + + The default value is \c "red". + */ + property color color: __style.color +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/ToggleButton.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/ToggleButton.qml new file mode 100644 index 0000000..9a66741 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/ToggleButton.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype ToggleButton + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \ingroup extras-interactive + \brief A push button that toggles between two states. + + \image togglebutton-unchecked.png An unchecked ToggleButton + An unchecked ToggleButton. + \image togglebutton-checked.png A checked ToggleButton + A checked ToggleButton. + + The ToggleButton is a simple extension of Qt Quick Controls' Button, using + the checked property to toggle between two states: \e checked and + \e unchecked. It enhances the visibility of a checkable button's state by + placing color-coded indicators around the button. + + You can create a custom appearance for a ToggleButton by assigning a + \l {ToggleButtonStyle}. +*/ + +Button { + id: button + checkable: true + style: Settings.styleComponent(Settings.style, "ToggleButtonStyle.qml", button) +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Tumbler.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Tumbler.qml new file mode 100644 index 0000000..355d676 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/Tumbler.qml @@ -0,0 +1,478 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQml 2.14 as Qml +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls.Private 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Extras.Private 1.0 +import QtQuick.Layouts 1.0 + +/*! + \qmltype Tumbler + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \ingroup extras-interactive + \brief A control that can have several spinnable wheels, each with items + that can be selected. + + \image tumbler.png A Tumbler + + \note Tumbler requires Qt 5.5.0 or later. + + The Tumbler control is used with one or more TumblerColumn items, which + define the content of each column: + + \code + Tumbler { + TumblerColumn { + model: 5 + } + TumblerColumn { + model: [0, 1, 2, 3, 4] + } + TumblerColumn { + model: ["A", "B", "C", "D", "E"] + } + } + \endcode + + You can also use a traditional model with roles: + + \code + Rectangle { + width: 220 + height: 350 + color: "#494d53" + + ListModel { + id: listModel + + ListElement { + foo: "A" + bar: "B" + baz: "C" + } + ListElement { + foo: "A" + bar: "B" + baz: "C" + } + ListElement { + foo: "A" + bar: "B" + baz: "C" + } + } + + Tumbler { + anchors.centerIn: parent + + TumblerColumn { + model: listModel + role: "foo" + } + TumblerColumn { + model: listModel + role: "bar" + } + TumblerColumn { + model: listModel + role: "baz" + } + } + } + \endcode + + \section1 Limitations + + For technical reasons, the model count must be equal to or greater than + \l {TumblerStyle::}{visibleItemCount} + plus one. The + \l {TumblerStyle::}{visibleItemCount} + must also be an odd number. + + You can create a custom appearance for a Tumbler by assigning a + \l {TumblerStyle}. To style + individual columns, use the \l {TumblerColumn::delegate}{delegate} and + \l {TumblerColumn::highlight}{highlight} properties of TumblerColumn. +*/ + +Control { + id: tumbler + + /* + \qmlproperty Component Tumbler::style + + The style Component for this control. + */ + style: Settings.styleComponent(Settings.style, "TumblerStyle.qml", tumbler) + + ListModel { + id: columnModel + } + + /*! + \qmlproperty int Tumbler::columnCount + + The number of columns in the Tumbler. + */ + readonly property alias columnCount: columnModel.count + + /*! \internal */ + function __isValidColumnIndex(index) { + return index >= 0 && index < columnCount/* && columnRepeater.children.length === columnCount*/; + } + + /*! \internal */ + function __isValidColumnAndItemIndex(columnIndex, itemIndex) { + return __isValidColumnIndex(columnIndex) && itemIndex >= 0 && itemIndex < __viewAt(columnIndex).count; + } + + /*! + \qmlmethod int Tumbler::currentIndexAt(int columnIndex) + Returns the current index of the column at \a columnIndex, or \c null + if \a columnIndex is invalid. + */ + function currentIndexAt(columnIndex) { + if (!__isValidColumnIndex(columnIndex)) + return -1; + + return columnModel.get(columnIndex).columnObject.currentIndex; + } + + /*! + \qmlmethod void Tumbler::setCurrentIndexAt(int columnIndex, int itemIndex, int interval) + Sets the current index of the column at \a columnIndex to \a itemIndex. The animation + length can be set with \a interval, which defaults to \c 0. + + Does nothing if \a columnIndex or \a itemIndex are invalid. + */ + function setCurrentIndexAt(columnIndex, itemIndex, interval) { + if (!__isValidColumnAndItemIndex(columnIndex, itemIndex)) + return; + + var view = columnRepeater.itemAt(columnIndex).view; + if (view.currentIndex !== itemIndex) { + view.highlightMoveDuration = typeof interval !== 'undefined' ? interval : 0; + view.currentIndex = itemIndex; + view.highlightMoveDuration = Qt.binding(function(){ return __highlightMoveDuration; }); + } + } + + /*! + \qmlmethod TumblerColumn Tumbler::getColumn(int columnIndex) + Returns the column at \a columnIndex or \c null if the index is + invalid. + */ + function getColumn(columnIndex) { + if (!__isValidColumnIndex(columnIndex)) + return null; + + return columnModel.get(columnIndex).columnObject; + } + + /*! + \qmlmethod TumblerColumn Tumbler::addColumn(TumblerColumn column) + Adds a \a column and returns the added column. + + The \a column argument can be an instance of TumblerColumn, + or a \l Component. The component has to contain a TumblerColumn. + Otherwise \c null is returned. + */ + function addColumn(column) { + return insertColumn(columnCount, column); + } + + /*! + \qmlmethod TumblerColumn Tumbler::insertColumn(int index, TumblerColumn column) + Inserts a \a column at the given \a index and returns the inserted column. + + The \a column argument can be an instance of TumblerColumn, + or a \l Component. The component has to contain a TumblerColumn. + Otherwise, \c null is returned. + */ + function insertColumn(index, column) { + var object = column; + if (typeof column["createObject"] === "function") { + object = column.createObject(root); + } else if (object.__tumbler) { + console.warn("Tumbler::insertColumn(): you cannot add a column to multiple Tumblers") + return null; + } + if (index >= 0 && index <= columnCount && object.accessibleRole === Accessible.ColumnHeader) { + object.__tumbler = tumbler; + object.__index = index; + columnModel.insert(index, { columnObject: object }); + return object; + } + + if (object !== column) + object.destroy(); + console.warn("Tumbler::insertColumn(): invalid argument"); + return null; + } + + /* + Try making one selection bar by invisible highlight item hack, so that bars go across separators + */ + + Component.onCompleted: { + for (var i = 0; i < data.length; ++i) { + var column = data[i]; + if (column.accessibleRole === Accessible.ColumnHeader) + addColumn(column); + } + } + + /*! \internal */ + readonly property alias __columnRow: columnRow + /*! \internal */ + property int __highlightMoveDuration: 300 + + /*! \internal */ + function __viewAt(index) { + if (!__isValidColumnIndex(index)) + return null; + + return columnRepeater.itemAt(index).view; + } + + /*! \internal */ + readonly property alias __movementDelayTimer: movementDelayTimer + + // When the up/down arrow keys are held down on a PathView, + // the movement of the items is limited to the highlightMoveDuration, + // but there is no built-in guard against trying to move the items at + // the speed of the auto-repeat key presses. This results in sluggish + // movement, so we enforce a delay with a timer to avoid this. + Timer { + id: movementDelayTimer + interval: __highlightMoveDuration + } + + Loader { + id: backgroundLoader + sourceComponent: __style.background + anchors.fill: columnRow + } + + Loader { + id: frameLoader + sourceComponent: __style.frame + anchors.fill: columnRow + anchors.leftMargin: -__style.padding.left + anchors.rightMargin: -__style.padding.right + anchors.topMargin: -__style.padding.top + anchors.bottomMargin: -__style.padding.bottom + } + + Row { + id: columnRow + x: __style.padding.left + y: __style.padding.top + + Repeater { + id: columnRepeater + model: columnModel + delegate: Item { + id: columnItem + width: columnPathView.width + separatorDelegateLoader.width + height: columnPathView.height + + readonly property int __columnIndex: index + // For index-related functions and tests. + readonly property alias view: columnPathView + readonly property alias separator: separatorDelegateLoader.item + + PathView { + id: columnPathView + width: columnObject.width + height: tumbler.height - tumbler.__style.padding.top - tumbler.__style.padding.bottom + visible: columnObject.visible + clip: true + + Qml.Binding { + target: columnObject + property: "__currentIndex" + value: columnPathView.currentIndex + restoreMode: Binding.RestoreBinding + } + + // We add one here so that the delegate's don't just appear in the view instantly, + // but rather come from the top/bottom. To account for this adjustment elsewhere, + // we extend the path height by half an item's height at the top and bottom. + pathItemCount: tumbler.__style.visibleItemCount + 1 + preferredHighlightBegin: 0.5 + preferredHighlightEnd: 0.5 + highlightMoveDuration: tumbler.__highlightMoveDuration + highlight: Loader { + id: highlightLoader + objectName: "highlightLoader" + sourceComponent: columnObject.highlight ? columnObject.highlight : __style.highlight + width: columnPathView.width + + readonly property int __index: index + + property QtObject styleData: QtObject { + readonly property alias index: highlightLoader.__index + readonly property int column: columnItem.__columnIndex + readonly property bool activeFocus: columnPathView.activeFocus + } + } + dragMargin: width / 2 + + activeFocusOnTab: true + Keys.onDownPressed: { + if (!movementDelayTimer.running) { + columnPathView.incrementCurrentIndex(); + movementDelayTimer.start(); + } + } + Keys.onUpPressed: { + if (!movementDelayTimer.running) { + columnPathView.decrementCurrentIndex(); + movementDelayTimer.start(); + } + } + + path: Path { + startX: columnPathView.width / 2 + startY: -tumbler.__style.__delegateHeight / 2 + PathLine { + x: columnPathView.width / 2 + y: columnPathView.pathItemCount * tumbler.__style.__delegateHeight - tumbler.__style.__delegateHeight / 2 + } + } + + model: columnObject.model + + delegate: Item { + id: delegateRootItem + property var itemModel: model + + implicitWidth: itemDelegateLoader.width + implicitHeight: itemDelegateLoader.height + + Loader { + id: itemDelegateLoader + sourceComponent: columnObject.delegate ? columnObject.delegate : __style.delegate + width: columnObject.width + + onHeightChanged: tumbler.__style.__delegateHeight = height; + + property var model: itemModel + + readonly property var __modelData: modelData + readonly property int __columnDelegateIndex: index + property QtObject styleData: QtObject { + readonly property var modelData: itemDelegateLoader.__modelData + readonly property alias index: itemDelegateLoader.__columnDelegateIndex + readonly property int column: columnItem.__columnIndex + readonly property bool activeFocus: columnPathView.activeFocus + readonly property real displacement: { + var count = delegateRootItem.PathView.view.count; + var offset = delegateRootItem.PathView.view.offset; + + var d = count - index - offset; + var halfVisibleItems = Math.floor(tumbler.__style.visibleItemCount / 2) + 1; + if (d > halfVisibleItems) + d -= count; + else if (d < -halfVisibleItems) + d += count; + return d; + } + readonly property bool current: delegateRootItem.PathView.isCurrentItem + readonly property string role: columnObject.role + readonly property var value: (itemModel && itemModel.hasOwnProperty(role)) + ? itemModel[role] // Qml ListModel and QAbstractItemModel + : modelData && modelData.hasOwnProperty(role) + ? modelData[role] // QObjectList/QObject + : modelData != undefined ? modelData : "" // Models without role + } + } + } + } + + Loader { + anchors.fill: columnPathView + sourceComponent: columnObject.columnForeground ? columnObject.columnForeground : __style.columnForeground + + property QtObject styleData: QtObject { + readonly property int column: columnItem.__columnIndex + readonly property bool activeFocus: columnPathView.activeFocus + } + } + + Loader { + id: separatorDelegateLoader + objectName: "separatorDelegateLoader" + sourceComponent: __style.separator + // Don't need a separator after the last delegate. + active: __columnIndex < tumbler.columnCount - 1 + anchors.left: columnPathView.right + anchors.top: parent.top + anchors.bottom: parent.bottom + visible: columnObject.visible + + // Use the width of the first separator to help us + // determine the default separator width. + onWidthChanged: { + if (__columnIndex == 0) { + tumbler.__style.__separatorWidth = width; + } + } + + property QtObject styleData: QtObject { + readonly property int index: __columnIndex + } + } + } + } + } + + Loader { + id: foregroundLoader + sourceComponent: __style.foreground + anchors.fill: backgroundLoader + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/TumblerColumn.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/TumblerColumn.qml new file mode 100644 index 0000000..f630a22 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/TumblerColumn.qml @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Private 1.0 + +/*! + \qmltype TumblerColumn + \inqmlmodule QtQuick.Extras + \since 5.5 + \ingroup extras + \brief A column within a tumbler. + + TumblerColumn represents a column within a tumbler, providing the interface + to define the items and width of each column. + + \code + Tumbler { + TumblerColumn { + model: [1, 2, 3] + } + + TumblerColumn { + model: ["A", "B", "C"] + visible: false + } + } + \endcode + + You can create a custom appearance for a Tumbler by assigning a + \l {TumblerStyle}. +*/ + +QtObject { + id: tumblerColumn + + /*! \internal */ + property Item __tumbler: null + + /*! + \internal + + The index of this column within the tumbler. + */ + property int __index: -1 + + /*! + \internal + + The index of the current item, if the PathView has items instantiated, + or the last current index if it doesn't. + */ + property int __currentIndex: -1 + + property int accessibleRole: Accessible.ColumnHeader + + /*! + \qmlproperty int TumblerColumn::currentIndex + + This read-only property holds the index of the current item for this + column. If the model count is reduced, the current index will be + reduced to the new count minus one. + + \sa {Tumbler::currentIndexAt}, {Tumbler::setCurrentIndexAt} + */ + readonly property alias currentIndex: tumblerColumn.__currentIndex + + /*! + This property holds the model that provides data for this column. + */ + property var model: null + + /*! + This property holds the model role of this column. + */ + property string role: "" + + /*! + The item delegate for this column. + + If set, this delegate will be used to display items in this column, + instead of the + \l {TumblerStyle::}{delegate} + property in \l {TumblerStyle}. + + The \l {Item::implicitHeight}{implicitHeight} property must be set, + and it must be the same for each delegate. + */ + property Component delegate + + /*! + The highlight delegate for this column. + + If set, this highlight will be used to display the highlight in this + column, instead of the + \l {TumblerStyle::}{highlight} + property in \l {TumblerStyle}. + */ + property Component highlight + + /*! + The foreground of this column. + + If set, this component will be used to display the foreground in this + column, instead of the + \l {TumblerStyle::}{columnForeground} + property in \l {TumblerStyle}. + */ + property Component columnForeground + + /*! + This property holds the visibility of this column. + */ + property bool visible: true + + /*! + This read-only property indicates whether the item has active focus. + + See Item's \l {Item::activeFocus}{activeFocus} property for more + information. + */ + readonly property bool activeFocus: { + if (__tumbler === null) + return null; + + var view = __tumbler.__viewAt(__index); + return view && view.activeFocus ? true : false; + } + + /*! + This property holds the width of this column. + */ + property real width: TextSingleton.implicitHeight * 4 +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/CircularGaugeSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/CircularGaugeSpecifics.qml new file mode 100644 index 0000000..f718b1b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/CircularGaugeSpecifics.qml @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("CircularGauge") + + SectionLayout { + Label { + text: qsTr("Value") + tooltip: qsTr("Value") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.value + minimumValue: backendValues.minimumValue.value + maximumValue: backendValues.maximumValue.value + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Minimum Value") + tooltip: qsTr("Minimum Value") + } + SecondColumnLayout { + SpinBox { + id: minimumValueSpinBox + backendValue: backendValues.minimumValue + minimumValue: 0 + maximumValue: backendValues.maximumValue.value + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Maximum Value") + tooltip: qsTr("Maximum Value") + } + SecondColumnLayout { + SpinBox { + id: maximumValueSpinBox + backendValue: backendValues.maximumValue + minimumValue: backendValues.minimumValue.value + maximumValue: 1000 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("Step Size") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.stepSize + minimumValue: 0 + maximumValue: backendValues.maximumValue.value + } + ExpandingSpacer { + } + } + } + } +} + diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/DelayButtonSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/DelayButtonSpecifics.qml new file mode 100644 index 0000000..8972c5d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/DelayButtonSpecifics.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("DelayButton") + + SectionLayout { + Label { + text: qsTr("Text") + tooltip: qsTr("Text") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.text + showTranslateCheckBox: true + implicitWidth: 180 + } + ExpandingSpacer { + } + } + +// Label { +// text: qsTr("Disable Button") +// tooltip: qsTr("Disable Button") +// } +// SecondColumnLayout { +// CheckBox { +// backendValue: backendValues.disabled +// implicitWidth: 180 +// } +// ExpandingSpacer { +// } +// } + + Label { + text: qsTr("Delay") + tooltip: qsTr("Delay") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.delay + minimumValue: 0 + maximumValue: 60000 + } + ExpandingSpacer { + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/DialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/DialSpecifics.qml new file mode 100644 index 0000000..645014f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/DialSpecifics.qml @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Dial") + + SectionLayout { + Label { + text: qsTr("Value") + tooltip: qsTr("Value") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.value + minimumValue: backendValues.minimumValue.value + maximumValue: backendValues.maximumValue.value + stepSize: 0.01 + decimals: 2 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Minimum Value") + tooltip: qsTr("Minimum Value") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.minimumValue + minimumValue: -1000 + maximumValue: backendValues.maximumValue.value + stepSize: 0.01 + decimals: 2 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Maximum Value") + tooltip: qsTr("Maximum Value") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.maximumValue + minimumValue: backendValues.minimumValue.value + maximumValue: 1000 + stepSize: 0.01 + decimals: 2 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("Step Size") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.stepSize + minimumValue: 0 + maximumValue: backendValues.maximumValue.value + stepSize: 0.01 + decimals: 2 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Tickmarks Visible") + tooltip: qsTr("Tickmarks Visible") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.tickmarksVisible + } + ExpandingSpacer { + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/GaugeSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/GaugeSpecifics.qml new file mode 100644 index 0000000..0ed417c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/GaugeSpecifics.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Gauge") + + SectionLayout { + + Label { + text: qsTr("Value") + tooltip: qsTr("Value") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.value + minimumValue: backendValues.minimumValue.value + maximumValue: backendValues.maximumValue.value + stepSize: 0.01 + decimals: 2 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Minimum Value") + tooltip: qsTr("Minimum Value") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.minimumValue + minimumValue: 0 + maximumValue: backendValues.maximumValue.value + stepSize: 0.01 + decimals: 2 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Maximum Value") + tooltip: qsTr("Maximum Value") + } + SecondColumnLayout { + SpinBox { + backendValue: backendValues.maximumValue + minimumValue: backendValues.minimumValue.value + maximumValue: 1000 + stepSize: 0.01 + decimals: 2 + } + ExpandingSpacer { + } + } + +// Label { +// text: qsTr("Orientation") +// tooltip: qsTr("Orientation") +// } +// SecondColumnLayout { +// ComboBox { +// id: orientationComboBox +// backendValue: backendValues.orientation +// implicitWidth: 180 +// model: ["Vertical", "Horizontal"] +// } +// ExpandingSpacer { +// } +// } + +// Label { +// text: qsTr("Tickmark Alignment") +// tooltip: qsTr("Tickmark Alignment") +// } + +// SecondColumnLayout { +// ComboBox { +// backendValue: backendValues.orientation +// implicitWidth: 180 +// model: orientationComboBox.currentText === "Vertical" ? ["AlignLeft", "AlignRight"] : ["AlignTop", "AlignBottom"] +// } +// ExpandingSpacer { +// } +// } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/PictureSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/PictureSpecifics.qml new file mode 100644 index 0000000..461e233 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/PictureSpecifics.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.Controls 1.1 as Controls +import QtQuick.Controls.Styles 1.1 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Picture") + + SectionLayout { + Label { + text: qsTr("Source") + tooltip: qsTr("Source") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.source + showTranslateCheckBox: false + implicitWidth: 180 + } + ExpandingSpacer { + } + } + } + } + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Color") + + ColorEditor { + caption: qsTr("Color") + backendValue: backendValues.color + supportGradient: false + } + } +} + diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/PieMenuSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/PieMenuSpecifics.qml new file mode 100644 index 0000000..f2e6a76 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/PieMenuSpecifics.qml @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.Controls 1.1 as Controls +import QtQuick.Controls.Styles 1.1 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("PieMenu") + + SectionLayout { + Label { + text: qsTr("Trigger Mode") + tooltip: qsTr("Trigger Mode") + } + SecondColumnLayout { + // Work around ComboBox string => int problem. + Controls.ComboBox { + id: comboBox + + property variant backendValue: backendValues.triggerMode + + property color textColor: "white" + implicitWidth: 180 + model: ["TriggerOnPress", "TriggerOnRelease", "TriggerOnClick"] + + QtObject { + property variant valueFromBackend: comboBox.backendValue + onValueFromBackendChanged: { + comboBox.currentIndex = comboBox.find(comboBox.backendValue.valueToString); + } + } + + onCurrentTextChanged: { + if (backendValue === undefined) + return; + + if (backendValue.value !== currentText) + backendValue.value = comboBox.currentIndex + } + + style: CustomComboBoxStyle { + textColor: comboBox.textColor + } + + ExtendedFunctionButton { + x: 2 + y: 4 + backendValue: comboBox.backendValue + visible: comboBox.enabled + } + } + ExpandingSpacer { + } + } + } + } +} + diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/StatusIndicatorSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/StatusIndicatorSpecifics.qml new file mode 100644 index 0000000..9de6171 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/StatusIndicatorSpecifics.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("StatusIndicator") + + SectionLayout { + Label { + text: qsTr("Active") + tooltip: qsTr("Active") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.active + implicitWidth: 100 + } + ExpandingSpacer { + } + } + } + } + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Color") + + ColorEditor { + caption: qsTr("Color") + backendValue: backendValues.color + supportGradient: false + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/ToggleButtonSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/ToggleButtonSpecifics.qml new file mode 100644 index 0000000..3a1eceb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/ToggleButtonSpecifics.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Extras 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$ +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("ToggleButton") + + SectionLayout { + Label { + text: qsTr("Text") + tooltip: qsTr("Text") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.text + showTranslateCheckBox: true + implicitWidth: 180 + } + ExpandingSpacer { + } + } + +// Label { +// text: qsTr("Disable Button") +// tooltip: qsTr("Disable Button") +// } +// SecondColumnLayout { +// CheckBox { +// backendValue: backendValues.disabled +// implicitWidth: 180 +// } +// ExpandingSpacer { +// } +// } + + Label { + text: qsTr("Checked") + tooltip: qsTr("Checked") + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.checked + implicitWidth: 180 + } + ExpandingSpacer { + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/circulargauge-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/circulargauge-icon.png new file mode 100644 index 0000000..2d0a31e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/circulargauge-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/circulargauge-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/circulargauge-icon16.png new file mode 100644 index 0000000..713a22f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/circulargauge-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/delaybutton-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/delaybutton-icon.png new file mode 100644 index 0000000..8532b64 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/delaybutton-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/delaybutton-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/delaybutton-icon16.png new file mode 100644 index 0000000..569d80d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/delaybutton-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/dial-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/dial-icon.png new file mode 100644 index 0000000..7a1eb98 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/dial-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/dial-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/dial-icon16.png new file mode 100644 index 0000000..7036a6a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/dial-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/gauge-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/gauge-icon.png new file mode 100644 index 0000000..8b63823 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/gauge-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/gauge-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/gauge-icon16.png new file mode 100644 index 0000000..467d1f5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/gauge-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/picture-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/picture-icon.png new file mode 100644 index 0000000..2a71994 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/picture-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/picture-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/picture-icon16.png new file mode 100644 index 0000000..6544fbb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/picture-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/piemenu-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/piemenu-icon.png new file mode 100644 index 0000000..2353557 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/piemenu-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/piemenu-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/piemenu-icon16.png new file mode 100644 index 0000000..c7b79cb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/piemenu-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/statusindicator-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/statusindicator-icon.png new file mode 100644 index 0000000..0d8cb94 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/statusindicator-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/statusindicator-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/statusindicator-icon16.png new file mode 100644 index 0000000..cc7fabe Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/statusindicator-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/togglebutton-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/togglebutton-icon.png new file mode 100644 index 0000000..9b7c962 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/togglebutton-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/togglebutton-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/togglebutton-icon16.png new file mode 100644 index 0000000..afe9b71 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/togglebutton-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/tumbler-icon.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/tumbler-icon.png new file mode 100644 index 0000000..56359d5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/tumbler-icon.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/tumbler-icon16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/tumbler-icon16.png new file mode 100644 index 0000000..4ac3173 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/images/tumbler-icon16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/qtquickextras.metainfo b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/qtquickextras.metainfo new file mode 100644 index 0000000..c2e8929 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/designer/qtquickextras.metainfo @@ -0,0 +1,122 @@ +MetaInfo { + Type { + name: "QtQuick.Extras.DelayButton" + icon: "images/delaybutton-icon16.png" + + ItemLibraryEntry { + name: "Delay Button" + category: "Qt Quick - Extras" + libraryIcon: "images/delaybutton-icon.png" + version: "1.0" + requiredImport: "QtQuick.Extras" + + Property { + name: "text" + type: "binding" + value: "qsTr(\"Button\")" + } + } + } + Type { + name: "QtQuick.Extras.ToggleButton" + icon: "images/togglebutton-icon16.png" + + ItemLibraryEntry { + name: "Toggle Button" + category: "Qt Quick - Extras" + libraryIcon: "images/togglebutton-icon.png" + version: "1.0" + requiredImport: "QtQuick.Extras" + + Property { + name: "text" + type: "binding" + value: "qsTr(\"Button\")" + } + } + } + Type { + name: "QtQuick.Extras.Gauge" + icon: "images/gauge-icon16.png" + + ItemLibraryEntry { + name: "Gauge" + category: "Qt Quick - Extras" + libraryIcon: "images/gauge-icon.png" + version: "1.0" + requiredImport: "QtQuick.Extras" + } + } + Type { + name: "QtQuick.Extras.CircularGauge" + icon: "images/circulargauge-icon16.png" + + ItemLibraryEntry { + name: "Circular Gauge" + category: "Qt Quick - Extras" + libraryIcon: "images/circulargauge-icon.png" + version: "1.0" + requiredImport: "QtQuick.Extras" + } + } + Type { + name: "QtQuick.Extras.PieMenu" + icon: "images/piemenu-icon16.png" + + ItemLibraryEntry { + name: "Pie Menu" + category: "Qt Quick - Extras" + libraryIcon: "images/piemenu-icon.png" + version: "1.0" + requiredImport: "QtQuick.Extras" + } + } + Type { + name: "QtQuick.Extras.Dial" + icon: "images/dial-icon16.png" + + ItemLibraryEntry { + name: "Dial" + category: "Qt Quick - Extras" + libraryIcon: "images/dial-icon.png" + version: "1.0" + requiredImport: "QtQuick.Extras" + } + } + Type { + name: "QtQuick.Extras.StatusIndicator" + icon: "images/statusindicator-icon16.png" + + ItemLibraryEntry { + name: "Status Indicator" + category: "Qt Quick - Extras" + libraryIcon: "images/statusindicator-icon.png" + version: "1.1" + requiredImport: "QtQuick.Extras" + } + } + Type { + name: "QtQuick.Extras.Tumbler" + icon: "images/tumbler-icon16.png" + + ItemLibraryEntry { + name: "Tumbler" + category: "Qt Quick - Extras" + libraryIcon: "images/tumbler-icon.png" + version: "1.2" + requiredImport: "QtQuick.Extras" + } + } + Type { + name: "QtQuick.Extras.Picture" + icon: "images/picture-icon16.png" + + ItemLibraryEntry { + name: "Picture" + category: "Qt Quick - Extras" + libraryIcon: "images/picture-icon.png" + version: "1.3" + requiredImport: "QtQuick.Extras" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/libqtquickextrasplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/libqtquickextrasplugin.so new file mode 100755 index 0000000..aade671 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/libqtquickextrasplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/plugins.qmltypes new file mode 100644 index 0000000..f16f0b5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/plugins.qmltypes @@ -0,0 +1,657 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick.Extras 1.4' + +Module { + dependencies: [ + "QtGraphicalEffects 1.12", + "QtQml 2.14", + "QtQml.Models 2.2", + "QtQuick 2.9", + "QtQuick.Controls 1.5", + "QtQuick.Controls.Styles 1.4", + "QtQuick.Layouts 1.1", + "QtQuick.Window 2.2" + ] + Component { + name: "QQuickActivationMode" + exports: ["QtQuick.Extras/ActivationMode 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "ActivationMode" + values: { + "ActivateOnPress": 0, + "ActivateOnRelease": 1, + "ActivateOnClick": 2 + } + } + } + Component { + name: "QQuickCircularProgressBar" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtQuick.Extras.Private.CppUtils/CircularProgressBar 1.1"] + exportMetaObjectRevisions: [0] + Property { name: "progress"; type: "double" } + Property { name: "barWidth"; type: "double" } + Property { name: "inset"; type: "double" } + Property { name: "minimumValueAngle"; type: "double" } + Property { name: "maximumValueAngle"; type: "double" } + Property { name: "backgroundColor"; type: "QColor" } + Signal { + name: "progressChanged" + Parameter { name: "progress"; type: "double" } + } + Signal { + name: "barWidthChanged" + Parameter { name: "barWidth"; type: "double" } + } + Signal { + name: "insetChanged" + Parameter { name: "inset"; type: "double" } + } + Signal { + name: "minimumValueAngleChanged" + Parameter { name: "minimumValueAngle"; type: "double" } + } + Signal { + name: "maximumValueAngleChanged" + Parameter { name: "maximumValueAngle"; type: "double" } + } + Signal { + name: "backgroundColorChanged" + Parameter { name: "backgroundColor"; type: "QColor" } + } + Method { name: "clearStops" } + Method { + name: "addStop" + Parameter { name: "position"; type: "double" } + Parameter { name: "color"; type: "QColor" } + } + Method { name: "redraw" } + } + Component { + name: "QQuickFlatProgressBar" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtQuick.Extras.Private.CppUtils/FlatProgressBar 1.1"] + exportMetaObjectRevisions: [0] + Property { name: "stripeOffset"; type: "double" } + Property { name: "progress"; type: "double" } + Property { name: "indeterminate"; type: "bool" } + Signal { + name: "stripeOffsetChanged" + Parameter { name: "stripeOffset"; type: "double" } + } + Signal { + name: "progressChanged" + Parameter { name: "progress"; type: "double" } + } + Signal { + name: "indeterminateChanged" + Parameter { name: "indeterminate"; type: "bool" } + } + Method { name: "repaint" } + Method { name: "restartAnimation" } + Method { name: "onVisibleChanged" } + Method { name: "onWidthChanged" } + Method { name: "onHeightChanged" } + } + Component { + name: "QQuickMathUtils" + prototype: "QObject" + exports: ["QtQuick.Extras.Private.CppUtils/MathUtils 1.0"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Property { name: "pi2"; type: "double"; isReadonly: true } + Method { + name: "degToRad" + type: "double" + Parameter { name: "degrees"; type: "double" } + } + Method { + name: "degToRadOffset" + type: "double" + Parameter { name: "degrees"; type: "double" } + } + Method { + name: "radToDeg" + type: "double" + Parameter { name: "radians"; type: "double" } + } + Method { + name: "radToDegOffset" + type: "double" + Parameter { name: "radians"; type: "double" } + } + Method { + name: "centerAlongCircle" + type: "QPointF" + Parameter { name: "xCenter"; type: "double" } + Parameter { name: "yCenter"; type: "double" } + Parameter { name: "width"; type: "double" } + Parameter { name: "height"; type: "double" } + Parameter { name: "angleOnCircle"; type: "double" } + Parameter { name: "distanceAlongRadius"; type: "double" } + } + Method { + name: "roundEven" + type: "double" + Parameter { name: "number"; type: "double" } + } + } + Component { + name: "QQuickMouseThief" + prototype: "QObject" + exports: ["QtQuick.Extras.Private.CppUtils/MouseThief 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "receivedPressEvent"; type: "bool" } + Signal { + name: "pressed" + Parameter { name: "mouseX"; type: "int" } + Parameter { name: "mouseY"; type: "int" } + } + Signal { + name: "released" + Parameter { name: "mouseX"; type: "int" } + Parameter { name: "mouseY"; type: "int" } + } + Signal { + name: "clicked" + Parameter { name: "mouseX"; type: "int" } + Parameter { name: "mouseY"; type: "int" } + } + Signal { + name: "touchUpdate" + Parameter { name: "mouseX"; type: "int" } + Parameter { name: "mouseY"; type: "int" } + } + Signal { name: "handledEventChanged" } + Method { + name: "grabMouse" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { name: "ungrabMouse" } + Method { name: "acceptCurrentEvent" } + } + Component { + name: "QQuickPicture" + defaultProperty: "data" + prototype: "QQuickPaintedItem" + exports: ["QtQuick.Extras/Picture 1.4"] + exportMetaObjectRevisions: [0] + Property { name: "source"; type: "QUrl" } + Property { name: "color"; type: "QColor" } + } + Component { + name: "QQuickTriggerMode" + exports: ["QtQuick.Extras/TriggerMode 1.3"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "TriggerMode" + values: { + "TriggerOnPress": 0, + "TriggerOnRelease": 1, + "TriggerOnClick": 2 + } + } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras.Private/CircularButton 1.0" + exports: ["QtQuick.Extras.Private/CircularButton 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "isDefault"; type: "bool" } + Property { name: "menu"; type: "Menu_QMLTYPE_38"; isPointer: true } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "action"; type: "QQuickAction1"; isPointer: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "text"; type: "string" } + Property { name: "tooltip"; type: "string" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "__position"; type: "string" } + Property { name: "__iconOverriden"; type: "bool"; isReadonly: true } + Property { name: "__action"; type: "QQuickAction1"; isPointer: true } + Property { name: "__iconAction"; type: "QQuickAction1"; isReadonly: true; isPointer: true } + Property { name: "__behavior"; type: "QVariant" } + Property { name: "__effectivePressed"; type: "bool" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + Method { name: "accessiblePressAction"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QObject" + name: "QtQuick.Extras.Private/CircularButtonStyleHelper 1.0" + exports: ["QtQuick.Extras.Private/CircularButtonStyleHelper 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + Property { name: "control"; type: "QQuickItem"; isPointer: true } + Property { name: "buttonColorUpTop"; type: "QColor" } + Property { name: "buttonColorUpBottom"; type: "QColor" } + Property { name: "buttonColorDownTop"; type: "QColor" } + Property { name: "buttonColorDownBottom"; type: "QColor" } + Property { name: "outerArcColorTop"; type: "QColor" } + Property { name: "outerArcColorBottom"; type: "QColor" } + Property { name: "innerArcColorTop"; type: "QColor" } + Property { name: "innerArcColorBottom"; type: "QColor" } + Property { name: "innerArcColorBottomStop"; type: "double" } + Property { name: "shineColor"; type: "QColor" } + Property { name: "smallestAxis"; type: "double" } + Property { name: "outerArcLineWidth"; type: "double" } + Property { name: "innerArcLineWidth"; type: "double" } + Property { name: "shineArcLineWidth"; type: "double" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "textColorUp"; type: "QColor" } + Property { name: "textColorDown"; type: "QColor" } + Property { name: "textRaisedColorUp"; type: "QColor" } + Property { name: "textRaisedColorDown"; type: "QColor" } + Property { name: "radius"; type: "double" } + Property { name: "halfRadius"; type: "double" } + Property { name: "outerArcRadius"; type: "double" } + Property { name: "innerArcRadius"; type: "double" } + Property { name: "shineArcRadius"; type: "double" } + Property { name: "zeroAngle"; type: "double" } + Property { name: "buttonColorTop"; type: "QColor" } + Property { name: "buttonColorBottom"; type: "QColor" } + Method { + name: "toPixels" + type: "QVariant" + Parameter { name: "percentageOfSmallestAxis"; type: "QVariant" } + } + Method { + name: "paintBackground" + type: "QVariant" + Parameter { name: "ctx"; type: "QVariant" } + } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/CircularGauge 1.0" + exports: ["QtQuick.Extras/CircularGauge 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "tickmarksVisible"; type: "bool" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "value"; type: "double" } + Property { name: "stepSize"; type: "double" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras.Private/CircularTickmarkLabel 1.0" + exports: ["QtQuick.Extras.Private/CircularTickmarkLabel 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "minimumValueAngle"; type: "double" } + Property { name: "maximumValueAngle"; type: "double" } + Property { name: "angleRange"; type: "double"; isReadonly: true } + Property { name: "tickmarkStepSize"; type: "double" } + Property { name: "tickmarkInset"; type: "double" } + Property { name: "tickmarkCount"; type: "int"; isReadonly: true } + Property { name: "minorTickmarkCount"; type: "int" } + Property { name: "minorTickmarkInset"; type: "double" } + Property { name: "labelInset"; type: "double" } + Property { name: "labelStepSize"; type: "double" } + Property { name: "labelCount"; type: "int"; isReadonly: true } + Property { name: "__tickmarkCount"; type: "double"; isReadonly: true } + Property { name: "tickmarksVisible"; type: "bool" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "stepSize"; type: "double" } + Method { + name: "valueToAngle" + type: "QVariant" + Parameter { name: "value"; type: "QVariant" } + } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/DelayButton 1.0" + exports: ["QtQuick.Extras/DelayButton 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "delay"; type: "int" } + Property { name: "__progress"; type: "double" } + Property { name: "progress"; type: "double"; isReadonly: true } + Signal { name: "activated" } + Property { name: "isDefault"; type: "bool" } + Property { name: "menu"; type: "Menu_QMLTYPE_38"; isPointer: true } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "action"; type: "QQuickAction1"; isPointer: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "text"; type: "string" } + Property { name: "tooltip"; type: "string" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "__position"; type: "string" } + Property { name: "__iconOverriden"; type: "bool"; isReadonly: true } + Property { name: "__action"; type: "QQuickAction1"; isPointer: true } + Property { name: "__iconAction"; type: "QQuickAction1"; isReadonly: true; isPointer: true } + Property { name: "__behavior"; type: "QVariant" } + Property { name: "__effectivePressed"; type: "bool" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + Method { name: "accessiblePressAction"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/Dial 1.0" + exports: ["QtQuick.Extras/Dial 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "__wrap"; type: "bool" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "tickmarksVisible"; type: "bool" } + Property { name: "value"; type: "double" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "stepSize"; type: "double" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/Dial 1.1" + exports: ["QtQuick.Extras/Dial 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "__wrap"; type: "bool" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "tickmarksVisible"; type: "bool" } + Property { name: "value"; type: "double" } + Property { name: "minimumValue"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "stepSize"; type: "double" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/Gauge 1.0" + exports: ["QtQuick.Extras/Gauge 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "orientation"; type: "int" } + Property { name: "tickmarkAlignment"; type: "int" } + Property { name: "__tickmarkAlignment"; type: "int" } + Property { name: "__tickmarksInside"; type: "bool" } + Property { name: "tickmarkStepSize"; type: "double" } + Property { name: "minorTickmarkCount"; type: "int" } + Property { name: "formatValue"; type: "QVariant" } + Property { name: "minimumValue"; type: "double" } + Property { name: "value"; type: "double" } + Property { name: "maximumValue"; type: "double" } + Property { name: "font"; type: "QFont" } + Property { name: "__hiddenText"; type: "QQuickText"; isReadonly: true; isPointer: true } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/PieMenu 1.0" + exports: ["QtQuick.Extras/PieMenu 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "menuItems" + Property { name: "selectionAngle"; type: "double"; isReadonly: true } + Property { name: "triggerMode"; type: "int" } + Property { name: "title"; type: "string" } + Property { name: "boundingItem"; type: "QQuickItem"; isPointer: true } + Property { name: "__protectedScope"; type: "QObject"; isPointer: true } + Property { name: "activationMode"; type: "int" } + Property { name: "menuItems"; type: "QQuickMenuItem1"; isList: true; isReadonly: true } + Property { name: "currentIndex"; type: "int"; isReadonly: true } + Property { name: "currentItem"; type: "QQuickMenuItem1"; isReadonly: true; isPointer: true } + Property { name: "__mouseThief"; type: "QQuickMouseThief"; isReadonly: true; isPointer: true } + Method { + name: "popup" + type: "QVariant" + Parameter { name: "x"; type: "QVariant" } + Parameter { name: "y"; type: "QVariant" } + } + Method { + name: "addItem" + type: "QVariant" + Parameter { name: "text"; type: "QVariant" } + } + Method { + name: "insertItem" + type: "QVariant" + Parameter { name: "before"; type: "QVariant" } + Parameter { name: "text"; type: "QVariant" } + } + Method { + name: "removeItem" + type: "QVariant" + Parameter { name: "item"; type: "QVariant" } + } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickLoader" + name: "QtQuick.Extras.Private/PieMenuIcon 1.0" + exports: ["QtQuick.Extras.Private/PieMenuIcon 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "control"; type: "PieMenu_QMLTYPE_98"; isPointer: true } + Property { name: "styleData"; type: "QObject"; isPointer: true } + Property { name: "iconSource"; type: "string"; isReadonly: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/StatusIndicator 1.0" + exports: ["QtQuick.Extras/StatusIndicator 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "active"; type: "bool" } + Property { name: "color"; type: "QColor" } + Property { name: "on"; type: "bool" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/StatusIndicator 1.1" + exports: ["QtQuick.Extras/StatusIndicator 1.1"] + exportMetaObjectRevisions: [1] + isComposite: true + defaultProperty: "data" + Property { name: "active"; type: "bool" } + Property { name: "color"; type: "QColor" } + Property { name: "on"; type: "bool" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickText" + name: "QtQuick.Extras.Private/TextSingleton 1.0" + exports: ["QtQuick.Extras.Private/TextSingleton 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + isCreatable: false + isSingleton: true + defaultProperty: "data" + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/ToggleButton 1.0" + exports: ["QtQuick.Extras/ToggleButton 1.0"] + exportMetaObjectRevisions: [0] + isComposite: true + defaultProperty: "data" + Property { name: "isDefault"; type: "bool" } + Property { name: "menu"; type: "Menu_QMLTYPE_38"; isPointer: true } + Property { name: "checkable"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "exclusiveGroup"; type: "QQuickExclusiveGroup1"; isPointer: true } + Property { name: "action"; type: "QQuickAction1"; isPointer: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "text"; type: "string" } + Property { name: "tooltip"; type: "string" } + Property { name: "iconSource"; type: "QUrl" } + Property { name: "iconName"; type: "string" } + Property { name: "__position"; type: "string" } + Property { name: "__iconOverriden"; type: "bool"; isReadonly: true } + Property { name: "__action"; type: "QQuickAction1"; isPointer: true } + Property { name: "__iconAction"; type: "QQuickAction1"; isReadonly: true; isPointer: true } + Property { name: "__behavior"; type: "QVariant" } + Property { name: "__effectivePressed"; type: "bool" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + Method { name: "accessiblePressAction"; type: "QVariant" } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QQuickFocusScope" + name: "QtQuick.Extras/Tumbler 1.2" + exports: ["QtQuick.Extras/Tumbler 1.2"] + exportMetaObjectRevisions: [2] + isComposite: true + defaultProperty: "data" + Property { name: "__highlightMoveDuration"; type: "int" } + Property { name: "columnCount"; type: "int"; isReadonly: true } + Property { name: "__columnRow"; type: "QQuickRow"; isReadonly: true; isPointer: true } + Property { name: "__movementDelayTimer"; type: "QQmlTimer"; isReadonly: true; isPointer: true } + Method { + name: "__isValidColumnIndex" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Method { + name: "__isValidColumnAndItemIndex" + type: "QVariant" + Parameter { name: "columnIndex"; type: "QVariant" } + Parameter { name: "itemIndex"; type: "QVariant" } + } + Method { + name: "currentIndexAt" + type: "QVariant" + Parameter { name: "columnIndex"; type: "QVariant" } + } + Method { + name: "setCurrentIndexAt" + type: "QVariant" + Parameter { name: "columnIndex"; type: "QVariant" } + Parameter { name: "itemIndex"; type: "QVariant" } + Parameter { name: "interval"; type: "QVariant" } + } + Method { + name: "getColumn" + type: "QVariant" + Parameter { name: "columnIndex"; type: "QVariant" } + } + Method { + name: "addColumn" + type: "QVariant" + Parameter { name: "column"; type: "QVariant" } + } + Method { + name: "insertColumn" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + Parameter { name: "column"; type: "QVariant" } + } + Method { + name: "__viewAt" + type: "QVariant" + Parameter { name: "index"; type: "QVariant" } + } + Property { name: "style"; type: "QQmlComponent"; isPointer: true } + Property { name: "__style"; type: "QObject"; isPointer: true } + Property { name: "__panel"; type: "QQuickItem"; isPointer: true } + Property { name: "styleHints"; type: "QVariant" } + Property { name: "__styleData"; type: "QObject"; isPointer: true } + } + Component { + prototype: "QObject" + name: "QtQuick.Extras/TumblerColumn 1.2" + exports: ["QtQuick.Extras/TumblerColumn 1.2"] + exportMetaObjectRevisions: [2] + isComposite: true + Property { name: "__tumbler"; type: "QQuickItem"; isPointer: true } + Property { name: "__index"; type: "int" } + Property { name: "__currentIndex"; type: "int" } + Property { name: "model"; type: "QVariant" } + Property { name: "role"; type: "string" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "highlight"; type: "QQmlComponent"; isPointer: true } + Property { name: "columnForeground"; type: "QQmlComponent"; isPointer: true } + Property { name: "visible"; type: "bool" } + Property { name: "activeFocus"; type: "bool"; isReadonly: true } + Property { name: "width"; type: "double" } + Property { name: "currentIndex"; type: "int"; isReadonly: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/qmldir new file mode 100644 index 0000000..0cac6a5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Extras/qmldir @@ -0,0 +1,7 @@ +module QtQuick.Extras +plugin qtquickextrasplugin +classname QtQuickExtrasPlugin +#typeinfo plugins.qmltypes + +depends QtGraphicalEffects 1.0 +depends QtQml 2.14 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/libqquicklayoutsplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/libqquicklayoutsplugin.so new file mode 100755 index 0000000..90d744b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/libqquicklayoutsplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/plugins.qmltypes new file mode 100644 index 0000000..6889083 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/plugins.qmltypes @@ -0,0 +1,129 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0"] + Component { + file: "qquicklinearlayout_p.h" + name: "QQuickColumnLayout" + prototype: "QQuickLinearLayout" + exports: [ + "QtQuick.Layouts/ColumnLayout 1.0", + "QtQuick.Layouts/ColumnLayout 1.1", + "QtQuick.Layouts/ColumnLayout 1.11", + "QtQuick.Layouts/ColumnLayout 1.4", + "QtQuick.Layouts/ColumnLayout 1.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + } + Component { + file: "qquicklinearlayout_p.h" + name: "QQuickGridLayout" + prototype: "QQuickGridLayoutBase" + exports: [ + "QtQuick.Layouts/GridLayout 1.0", + "QtQuick.Layouts/GridLayout 1.1", + "QtQuick.Layouts/GridLayout 1.11", + "QtQuick.Layouts/GridLayout 1.4", + "QtQuick.Layouts/GridLayout 1.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "Flow" + values: ["LeftToRight", "TopToBottom"] + } + Property { name: "columnSpacing"; type: "double" } + Property { name: "rowSpacing"; type: "double" } + Property { name: "columns"; type: "int" } + Property { name: "rows"; type: "int" } + Property { name: "flow"; type: "Flow" } + } + Component { + file: "qquicklinearlayout_p.h" + name: "QQuickGridLayoutBase" + prototype: "QQuickLayout" + Property { name: "layoutDirection"; revision: 1; type: "Qt::LayoutDirection" } + Signal { name: "layoutDirectionChanged"; revision: 1 } + } + Component { + file: "qquicklayout_p.h" + name: "QQuickLayout" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick.Layouts/Layout 1.0", + "QtQuick.Layouts/Layout 1.1", + "QtQuick.Layouts/Layout 1.11", + "QtQuick.Layouts/Layout 1.4", + "QtQuick.Layouts/Layout 1.7" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + attachedType: "QQuickLayoutAttached" + Method { name: "invalidateSenderItem" } + Method { name: "_q_dumpLayoutTree" } + } + Component { + name: "QQuickLayoutAttached" + Property { name: "minimumWidth"; type: "double" } + Property { name: "minimumHeight"; type: "double" } + Property { name: "preferredWidth"; type: "double" } + Property { name: "preferredHeight"; type: "double" } + Property { name: "maximumWidth"; type: "double" } + Property { name: "maximumHeight"; type: "double" } + Property { name: "fillHeight"; type: "bool" } + Property { name: "fillWidth"; type: "bool" } + Property { name: "row"; type: "int" } + Property { name: "column"; type: "int" } + Property { name: "rowSpan"; type: "int" } + Property { name: "columnSpan"; type: "int" } + Property { name: "alignment"; type: "Qt::Alignment" } + Property { name: "margins"; type: "double" } + Property { name: "leftMargin"; type: "double" } + Property { name: "topMargin"; type: "double" } + Property { name: "rightMargin"; type: "double" } + Property { name: "bottomMargin"; type: "double" } + } + Component { + file: "qquicklinearlayout_p.h" + name: "QQuickLinearLayout" + prototype: "QQuickGridLayoutBase" + Property { name: "spacing"; type: "double" } + } + Component { + file: "qquicklinearlayout_p.h" + name: "QQuickRowLayout" + prototype: "QQuickLinearLayout" + exports: [ + "QtQuick.Layouts/RowLayout 1.0", + "QtQuick.Layouts/RowLayout 1.1", + "QtQuick.Layouts/RowLayout 1.11", + "QtQuick.Layouts/RowLayout 1.4", + "QtQuick.Layouts/RowLayout 1.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + } + Component { + file: "qquickstacklayout_p.h" + name: "QQuickStackLayout" + prototype: "QQuickLayout" + exports: [ + "QtQuick.Layouts/StackLayout 1.11", + "QtQuick.Layouts/StackLayout 1.3", + "QtQuick.Layouts/StackLayout 1.4", + "QtQuick.Layouts/StackLayout 1.7" + ] + exportMetaObjectRevisions: [11, 3, 4, 7] + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "currentIndex"; type: "int" } + Method { + name: "itemAt" + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/qmldir new file mode 100644 index 0000000..00f85f7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Layouts/qmldir @@ -0,0 +1,5 @@ +module QtQuick.Layouts +plugin qquicklayoutsplugin +classname QtQuickLayoutsPlugin +typeinfo plugins.qmltypes +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/libqmllocalstorageplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/libqmllocalstorageplugin.so new file mode 100755 index 0000000..eff8c5b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/libqmllocalstorageplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/plugins.qmltypes new file mode 100644 index 0000000..a3e43bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/plugins.qmltypes @@ -0,0 +1,22 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: [] + Component { + file: "qquicklocalstorage_p.h" + name: "QQuickLocalStorage" + exports: ["QtQuick.LocalStorage/LocalStorage 2.0"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Method { + name: "openDatabaseSync" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/qmldir new file mode 100644 index 0000000..dd14cc6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/LocalStorage/qmldir @@ -0,0 +1,4 @@ +module QtQuick.LocalStorage +plugin qmllocalstorageplugin +classname QQmlLocalStoragePlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/libparticlesplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/libparticlesplugin.so new file mode 100755 index 0000000..9b0915d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/libparticlesplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/plugins.qmltypes new file mode 100644 index 0000000..08b745e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/plugins.qmltypes @@ -0,0 +1,1381 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0"] + Component { + file: "qquickage_p.h" + name: "QQuickAgeAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/Age 2.0", + "QtQuick.Particles/Age 2.1", + "QtQuick.Particles/Age 2.11", + "QtQuick.Particles/Age 2.4", + "QtQuick.Particles/Age 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "lifeLeft"; type: "int" } + Property { name: "advancePosition"; type: "bool" } + Signal { + name: "lifeLeftChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "advancePositionChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setLifeLeft" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setAdvancePosition" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + file: "qquickangledirection_p.h" + name: "QQuickAngleDirection" + prototype: "QQuickDirection" + exports: ["QtQuick.Particles/AngleDirection 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "angle"; type: "double" } + Property { name: "magnitude"; type: "double" } + Property { name: "angleVariation"; type: "double" } + Property { name: "magnitudeVariation"; type: "double" } + Signal { + name: "angleChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "magnitudeChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "angleVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "magnitudeVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setAngle" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setMagnitude" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setAngleVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setMagnitudeVariation" + Parameter { name: "arg"; type: "double" } + } + } + Component { + file: "qquickpointattractor_p.h" + name: "QQuickAttractorAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/Attractor 2.0", + "QtQuick.Particles/Attractor 2.1", + "QtQuick.Particles/Attractor 2.11", + "QtQuick.Particles/Attractor 2.4", + "QtQuick.Particles/Attractor 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "Proportion" + values: [ + "Constant", + "Linear", + "Quadratic", + "InverseLinear", + "InverseQuadratic" + ] + } + Enum { + name: "AffectableParameters" + values: ["Position", "Velocity", "Acceleration"] + } + Property { name: "strength"; type: "double" } + Property { name: "pointX"; type: "double" } + Property { name: "pointY"; type: "double" } + Property { name: "affectedParameter"; type: "AffectableParameters" } + Property { name: "proportionalToDistance"; type: "Proportion" } + Signal { + name: "strengthChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "pointXChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "pointYChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "affectedParameterChanged" + Parameter { name: "arg"; type: "AffectableParameters" } + } + Signal { + name: "proportionalToDistanceChanged" + Parameter { name: "arg"; type: "Proportion" } + } + Method { + name: "setStrength" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setPointX" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setPointY" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setAffectedParameter" + Parameter { name: "arg"; type: "AffectableParameters" } + } + Method { + name: "setProportionalToDistance" + Parameter { name: "arg"; type: "Proportion" } + } + } + Component { + file: "qquickcumulativedirection_p.h" + name: "QQuickCumulativeDirection" + defaultProperty: "directions" + prototype: "QQuickDirection" + exports: ["QtQuick.Particles/CumulativeDirection 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "directions"; type: "QQuickDirection"; isList: true; isReadonly: true } + } + Component { + file: "qquickcustomaffector_p.h" + name: "QQuickCustomAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/Affector 2.0", + "QtQuick.Particles/Affector 2.1", + "QtQuick.Particles/Affector 2.11", + "QtQuick.Particles/Affector 2.4", + "QtQuick.Particles/Affector 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "relative"; type: "bool" } + Property { name: "position"; type: "QQuickDirection"; isPointer: true } + Property { name: "velocity"; type: "QQuickDirection"; isPointer: true } + Property { name: "acceleration"; type: "QQuickDirection"; isPointer: true } + Signal { + name: "affectParticles" + Parameter { name: "particles"; type: "QJSValue" } + Parameter { name: "dt"; type: "double" } + } + Signal { + name: "positionChanged" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Signal { + name: "velocityChanged" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Signal { + name: "accelerationChanged" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Signal { + name: "relativeChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setPosition" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Method { + name: "setVelocity" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Method { + name: "setAcceleration" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Method { + name: "setRelative" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + file: "qquickcustomparticle_p.h" + name: "QQuickCustomParticle" + prototype: "QQuickParticlePainter" + exports: [ + "QtQuick.Particles/CustomParticle 2.0", + "QtQuick.Particles/CustomParticle 2.1", + "QtQuick.Particles/CustomParticle 2.11", + "QtQuick.Particles/CustomParticle 2.4", + "QtQuick.Particles/CustomParticle 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "fragmentShader"; type: "QByteArray" } + Property { name: "vertexShader"; type: "QByteArray" } + Method { + name: "sourceDestroyed" + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + } + Component { + file: "qquickdirection_p.h" + name: "QQuickDirection" + exports: ["QtQuick.Particles/NullVector 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + file: "qquickellipseextruder_p.h" + name: "QQuickEllipseExtruder" + prototype: "QQuickParticleExtruder" + exports: ["QtQuick.Particles/EllipseShape 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "fill"; type: "bool" } + Signal { + name: "fillChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setFill" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + file: "qquickfriction_p.h" + name: "QQuickFrictionAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/Friction 2.0", + "QtQuick.Particles/Friction 2.1", + "QtQuick.Particles/Friction 2.11", + "QtQuick.Particles/Friction 2.4", + "QtQuick.Particles/Friction 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "factor"; type: "double" } + Property { name: "threshold"; type: "double" } + Signal { + name: "factorChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "thresholdChanged" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setFactor" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setThreshold" + Parameter { name: "arg"; type: "double" } + } + } + Component { + file: "qquickgravity_p.h" + name: "QQuickGravityAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/Gravity 2.0", + "QtQuick.Particles/Gravity 2.1", + "QtQuick.Particles/Gravity 2.11", + "QtQuick.Particles/Gravity 2.4", + "QtQuick.Particles/Gravity 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "magnitude"; type: "double" } + Property { name: "acceleration"; type: "double" } + Property { name: "angle"; type: "double" } + Signal { + name: "magnitudeChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "angleChanged" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setMagnitude" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setAcceleration" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setAngle" + Parameter { name: "arg"; type: "double" } + } + } + Component { + file: "qquickgroupgoal_p.h" + name: "QQuickGroupGoalAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/GroupGoal 2.0", + "QtQuick.Particles/GroupGoal 2.1", + "QtQuick.Particles/GroupGoal 2.11", + "QtQuick.Particles/GroupGoal 2.4", + "QtQuick.Particles/GroupGoal 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "goalState"; type: "string" } + Property { name: "jump"; type: "bool" } + Signal { + name: "goalStateChanged" + Parameter { name: "arg"; type: "string" } + } + Signal { + name: "jumpChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setGoalState" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setJump" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + file: "qquickimageparticle_p.h" + name: "QQuickImageParticle" + prototype: "QQuickParticlePainter" + exports: [ + "QtQuick.Particles/ImageParticle 2.0", + "QtQuick.Particles/ImageParticle 2.1", + "QtQuick.Particles/ImageParticle 2.11", + "QtQuick.Particles/ImageParticle 2.4", + "QtQuick.Particles/ImageParticle 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "Status" + values: ["Null", "Ready", "Loading", "Error"] + } + Enum { + name: "EntryEffect" + values: ["None", "Fade", "Scale"] + } + Property { name: "source"; type: "QUrl" } + Property { name: "sprites"; type: "QQuickSprite"; isList: true; isReadonly: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "colorTable"; type: "QUrl" } + Property { name: "sizeTable"; type: "QUrl" } + Property { name: "opacityTable"; type: "QUrl" } + Property { name: "color"; type: "QColor" } + Property { name: "colorVariation"; type: "double" } + Property { name: "redVariation"; type: "double" } + Property { name: "greenVariation"; type: "double" } + Property { name: "blueVariation"; type: "double" } + Property { name: "alpha"; type: "double" } + Property { name: "alphaVariation"; type: "double" } + Property { name: "rotation"; type: "double" } + Property { name: "rotationVariation"; type: "double" } + Property { name: "rotationVelocity"; type: "double" } + Property { name: "rotationVelocityVariation"; type: "double" } + Property { name: "autoRotation"; type: "bool" } + Property { name: "xVector"; type: "QQuickDirection"; isPointer: true } + Property { name: "yVector"; type: "QQuickDirection"; isPointer: true } + Property { name: "spritesInterpolate"; type: "bool" } + Property { name: "entryEffect"; type: "EntryEffect" } + Signal { name: "imageChanged" } + Signal { name: "colortableChanged" } + Signal { name: "sizetableChanged" } + Signal { name: "opacitytableChanged" } + Signal { + name: "alphaVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "alphaChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "redVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "greenVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "blueVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "rotationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "rotationVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "rotationVelocityChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "rotationVelocityVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "autoRotationChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "xVectorChanged" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Signal { + name: "yVectorChanged" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Signal { + name: "spritesInterpolateChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "bypassOptimizationsChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "entryEffectChanged" + Parameter { name: "arg"; type: "EntryEffect" } + } + Signal { + name: "statusChanged" + Parameter { name: "arg"; type: "Status" } + } + Method { + name: "reloadColor" + Parameter { name: "c"; type: "Color4ub" } + Parameter { name: "d"; type: "QQuickParticleData"; isPointer: true } + } + Method { + name: "setAlphaVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setAlpha" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setRedVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setGreenVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setBlueVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setRotation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setRotationVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setRotationVelocity" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setRotationVelocityVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setAutoRotation" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setXVector" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Method { + name: "setYVector" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Method { + name: "setSpritesInterpolate" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setBypassOptimizations" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setEntryEffect" + Parameter { name: "arg"; type: "EntryEffect" } + } + Method { name: "createEngine" } + Method { + name: "spriteAdvance" + Parameter { name: "spriteIndex"; type: "int" } + } + Method { + name: "spritesUpdate" + Parameter { name: "time"; type: "double" } + } + Method { name: "spritesUpdate" } + Method { name: "mainThreadFetchImageData" } + Method { + name: "finishBuildParticleNodes" + Parameter { name: "n"; type: "QSGNode*"; isPointer: true } + } + } + Component { + file: "qquickitemparticle_p.h" + name: "QQuickItemParticle" + prototype: "QQuickParticlePainter" + exports: [ + "QtQuick.Particles/ItemParticle 2.0", + "QtQuick.Particles/ItemParticle 2.1", + "QtQuick.Particles/ItemParticle 2.11", + "QtQuick.Particles/ItemParticle 2.4", + "QtQuick.Particles/ItemParticle 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + attachedType: "QQuickItemParticleAttached" + Property { name: "fade"; type: "bool" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Signal { + name: "delegateChanged" + Parameter { name: "arg"; type: "QQmlComponent"; isPointer: true } + } + Method { + name: "freeze" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "unfreeze" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "take" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + Parameter { name: "prioritize"; type: "bool" } + } + Method { + name: "take" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "give" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "setFade" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setDelegate" + Parameter { name: "arg"; type: "QQmlComponent"; isPointer: true } + } + } + Component { + name: "QQuickItemParticleAttached" + Property { name: "particle"; type: "QQuickItemParticle"; isReadonly: true; isPointer: true } + Signal { name: "detached" } + Signal { name: "attached" } + } + Component { + file: "qquicklineextruder_p.h" + name: "QQuickLineExtruder" + prototype: "QQuickParticleExtruder" + exports: ["QtQuick.Particles/LineShape 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "mirrored"; type: "bool" } + Signal { + name: "mirroredChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setMirrored" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + file: "qquickmaskextruder_p.h" + name: "QQuickMaskExtruder" + prototype: "QQuickParticleExtruder" + exports: ["QtQuick.Particles/MaskShape 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "source"; type: "QUrl" } + Signal { + name: "sourceChanged" + Parameter { name: "arg"; type: "QUrl" } + } + Method { + name: "setSource" + Parameter { name: "arg"; type: "QUrl" } + } + Method { name: "startMaskLoading" } + Method { name: "finishMaskLoading" } + } + Component { + file: "qquickparticleaffector_p.h" + name: "QQuickParticleAffector" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick.Particles/ParticleAffector 2.0", + "QtQuick.Particles/ParticleAffector 2.1", + "QtQuick.Particles/ParticleAffector 2.11", + "QtQuick.Particles/ParticleAffector 2.4", + "QtQuick.Particles/ParticleAffector 2.7" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "system"; type: "QQuickParticleSystem"; isPointer: true } + Property { name: "groups"; type: "QStringList" } + Property { name: "whenCollidingWith"; type: "QStringList" } + Property { name: "enabled"; type: "bool" } + Property { name: "once"; type: "bool" } + Property { name: "shape"; type: "QQuickParticleExtruder"; isPointer: true } + Signal { + name: "systemChanged" + Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } + } + Signal { + name: "groupsChanged" + Parameter { name: "arg"; type: "QStringList" } + } + Signal { + name: "enabledChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "onceChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "shapeChanged" + Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } + } + Signal { + name: "affected" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Signal { + name: "whenCollidingWithChanged" + Parameter { name: "arg"; type: "QStringList" } + } + Method { + name: "setSystem" + Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } + } + Method { + name: "setGroups" + Parameter { name: "arg"; type: "QStringList" } + } + Method { + name: "setEnabled" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setOnceOff" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setShape" + Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } + } + Method { + name: "setWhenCollidingWith" + Parameter { name: "arg"; type: "QStringList" } + } + Method { name: "updateOffsets" } + } + Component { + file: "qquickparticleemitter_p.h" + name: "QQuickParticleEmitter" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick.Particles/Emitter 2.0", + "QtQuick.Particles/Emitter 2.1", + "QtQuick.Particles/Emitter 2.11", + "QtQuick.Particles/Emitter 2.4", + "QtQuick.Particles/Emitter 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "Lifetime" + values: ["InfiniteLife"] + } + Property { name: "system"; type: "QQuickParticleSystem"; isPointer: true } + Property { name: "group"; type: "string" } + Property { name: "shape"; type: "QQuickParticleExtruder"; isPointer: true } + Property { name: "enabled"; type: "bool" } + Property { name: "startTime"; type: "int" } + Property { name: "emitRate"; type: "double" } + Property { name: "lifeSpan"; type: "int" } + Property { name: "lifeSpanVariation"; type: "int" } + Property { name: "maximumEmitted"; type: "int" } + Property { name: "size"; type: "double" } + Property { name: "endSize"; type: "double" } + Property { name: "sizeVariation"; type: "double" } + Property { name: "velocity"; type: "QQuickDirection"; isPointer: true } + Property { name: "acceleration"; type: "QQuickDirection"; isPointer: true } + Property { name: "velocityFromMovement"; type: "double" } + Signal { + name: "emitParticles" + Parameter { name: "particles"; type: "QJSValue" } + } + Signal { + name: "particlesPerSecondChanged" + Parameter { type: "double" } + } + Signal { + name: "particleDurationChanged" + Parameter { type: "int" } + } + Signal { + name: "enabledChanged" + Parameter { type: "bool" } + } + Signal { + name: "systemChanged" + Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } + } + Signal { + name: "groupChanged" + Parameter { name: "arg"; type: "string" } + } + Signal { + name: "particleDurationVariationChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "extruderChanged" + Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } + } + Signal { + name: "particleSizeChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "particleEndSizeChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "particleSizeVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "velocityChanged" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Signal { + name: "accelerationChanged" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Signal { + name: "maximumEmittedChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { name: "particleCountChanged" } + Signal { + name: "startTimeChanged" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "pulse" + Parameter { name: "milliseconds"; type: "int" } + } + Method { + name: "burst" + Parameter { name: "num"; type: "int" } + } + Method { + name: "burst" + Parameter { name: "num"; type: "int" } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "setEnabled" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setParticlesPerSecond" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setParticleDuration" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setSystem" + Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } + } + Method { + name: "setGroup" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setParticleDurationVariation" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setExtruder" + Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } + } + Method { + name: "setParticleSize" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setParticleEndSize" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setParticleSizeVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setVelocity" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Method { + name: "setAcceleration" + Parameter { name: "arg"; type: "QQuickDirection"; isPointer: true } + } + Method { + name: "setMaxParticleCount" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setStartTime" + Parameter { name: "arg"; type: "int" } + } + Method { name: "reset" } + } + Component { + file: "qquickparticleextruder_p.h" + name: "QQuickParticleExtruder" + exports: ["QtQuick.Particles/ParticleExtruder 2.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + file: "qquickparticlegroup_p.h" + name: "QQuickParticleGroup" + defaultProperty: "particleChildren" + prototype: "QQuickStochasticState" + exports: ["QtQuick.Particles/ParticleGroup 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "system"; type: "QQuickParticleSystem"; isPointer: true } + Property { name: "particleChildren"; type: "QObject"; isList: true; isReadonly: true } + Signal { + name: "maximumAliveChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "systemChanged" + Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } + } + Method { + name: "setMaximumAlive" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setSystem" + Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } + } + Method { + name: "delayRedirect" + Parameter { name: "obj"; type: "QObject"; isPointer: true } + } + } + Component { + file: "qquickparticlepainter_p.h" + name: "QQuickParticlePainter" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick.Particles/ParticlePainter 2.0", + "QtQuick.Particles/ParticlePainter 2.1", + "QtQuick.Particles/ParticlePainter 2.11", + "QtQuick.Particles/ParticlePainter 2.4", + "QtQuick.Particles/ParticlePainter 2.7" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "system"; type: "QQuickParticleSystem"; isPointer: true } + Property { name: "groups"; type: "QStringList" } + Signal { name: "countChanged" } + Signal { + name: "systemChanged" + Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } + } + Signal { + name: "groupsChanged" + Parameter { name: "arg"; type: "QStringList" } + } + Method { + name: "setSystem" + Parameter { name: "arg"; type: "QQuickParticleSystem"; isPointer: true } + } + Method { + name: "setGroups" + Parameter { name: "arg"; type: "QStringList" } + } + Method { + name: "calcSystemOffset" + Parameter { name: "resetPending"; type: "bool" } + } + Method { name: "calcSystemOffset" } + Method { name: "sceneGraphInvalidated" } + } + Component { + file: "qquickparticlesystem_p.h" + name: "QQuickParticleSystem" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick.Particles/ParticleSystem 2.0", + "QtQuick.Particles/ParticleSystem 2.1", + "QtQuick.Particles/ParticleSystem 2.11", + "QtQuick.Particles/ParticleSystem 2.4", + "QtQuick.Particles/ParticleSystem 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "running"; type: "bool" } + Property { name: "paused"; type: "bool" } + Property { name: "empty"; type: "bool"; isReadonly: true } + Signal { name: "systemInitialized" } + Signal { + name: "runningChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "pausedChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "emptyChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { name: "start" } + Method { name: "stop" } + Method { name: "restart" } + Method { name: "pause" } + Method { name: "resume" } + Method { name: "reset" } + Method { + name: "setRunning" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setPaused" + Parameter { name: "arg"; type: "bool" } + } + Method { name: "duration"; type: "int" } + Method { name: "emittersChanged" } + Method { + name: "loadPainter" + Parameter { name: "p"; type: "QQuickParticlePainter"; isPointer: true } + } + Method { name: "createEngine" } + Method { + name: "particleStateChange" + Parameter { name: "idx"; type: "int" } + } + } + Component { + file: "qquickpointdirection_p.h" + name: "QQuickPointDirection" + prototype: "QQuickDirection" + exports: ["QtQuick.Particles/PointDirection 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "xVariation"; type: "double" } + Property { name: "yVariation"; type: "double" } + Signal { + name: "xChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "yChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "xVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "yVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setX" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setY" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setXVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setYVariation" + Parameter { name: "arg"; type: "double" } + } + } + Component { + file: "qquickrectangleextruder_p.h" + name: "QQuickRectangleExtruder" + prototype: "QQuickParticleExtruder" + exports: ["QtQuick.Particles/RectangleShape 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "fill"; type: "bool" } + Signal { + name: "fillChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setFill" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + file: "qquickspritegoal_p.h" + name: "QQuickSpriteGoalAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/SpriteGoal 2.0", + "QtQuick.Particles/SpriteGoal 2.1", + "QtQuick.Particles/SpriteGoal 2.11", + "QtQuick.Particles/SpriteGoal 2.4", + "QtQuick.Particles/SpriteGoal 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "goalState"; type: "string" } + Property { name: "jump"; type: "bool" } + Property { name: "systemStates"; type: "bool" } + Signal { + name: "goalStateChanged" + Parameter { name: "arg"; type: "string" } + } + Signal { + name: "jumpChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "systemStatesChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setGoalState" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setJump" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setSystemStates" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + name: "QQuickStochasticState" + Property { name: "duration"; type: "int" } + Property { name: "durationVariation"; type: "int" } + Property { name: "randomStart"; type: "bool" } + Property { name: "to"; type: "QVariantMap" } + Property { name: "name"; type: "string" } + Signal { + name: "durationChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "nameChanged" + Parameter { name: "arg"; type: "string" } + } + Signal { + name: "toChanged" + Parameter { name: "arg"; type: "QVariantMap" } + } + Signal { + name: "durationVariationChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { name: "entered" } + Signal { + name: "randomStartChanged" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setDuration" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setName" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setTo" + Parameter { name: "arg"; type: "QVariantMap" } + } + Method { + name: "setDurationVariation" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setRandomStart" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + file: "qquicktargetdirection_p.h" + name: "QQuickTargetDirection" + prototype: "QQuickDirection" + exports: ["QtQuick.Particles/TargetDirection 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "targetX"; type: "double" } + Property { name: "targetY"; type: "double" } + Property { name: "targetItem"; type: "QQuickItem"; isPointer: true } + Property { name: "targetVariation"; type: "double" } + Property { name: "proportionalMagnitude"; type: "bool" } + Property { name: "magnitude"; type: "double" } + Property { name: "magnitudeVariation"; type: "double" } + Signal { + name: "targetXChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "targetYChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "targetVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "magnitudeChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "proprotionalMagnitudeChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "magnitudeVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "targetItemChanged" + Parameter { name: "arg"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "setTargetX" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setTargetY" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setTargetVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setMagnitude" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setProportionalMagnitude" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setMagnitudeVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setTargetItem" + Parameter { name: "arg"; type: "QQuickItem"; isPointer: true } + } + } + Component { + file: "qquicktrailemitter_p.h" + name: "QQuickTrailEmitter" + prototype: "QQuickParticleEmitter" + exports: [ + "QtQuick.Particles/TrailEmitter 2.0", + "QtQuick.Particles/TrailEmitter 2.1", + "QtQuick.Particles/TrailEmitter 2.11", + "QtQuick.Particles/TrailEmitter 2.4", + "QtQuick.Particles/TrailEmitter 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "EmitSize" + values: ["ParticleSize"] + } + Property { name: "follow"; type: "string" } + Property { name: "emitRatePerParticle"; type: "int" } + Property { name: "emitShape"; type: "QQuickParticleExtruder"; isPointer: true } + Property { name: "emitHeight"; type: "double" } + Property { name: "emitWidth"; type: "double" } + Signal { + name: "emitFollowParticles" + Parameter { name: "particles"; type: "QJSValue" } + Parameter { name: "followed"; type: "QJSValue" } + } + Signal { + name: "particlesPerParticlePerSecondChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "emitterXVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "emitterYVariationChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "followChanged" + Parameter { name: "arg"; type: "string" } + } + Signal { + name: "emissionShapeChanged" + Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } + } + Method { + name: "setParticlesPerParticlePerSecond" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setEmitterXVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setEmitterYVariation" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setFollow" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setEmissionShape" + Parameter { name: "arg"; type: "QQuickParticleExtruder"; isPointer: true } + } + Method { name: "recalcParticlesPerSecond" } + } + Component { + file: "qquickturbulence_p.h" + name: "QQuickTurbulenceAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/Turbulence 2.0", + "QtQuick.Particles/Turbulence 2.1", + "QtQuick.Particles/Turbulence 2.11", + "QtQuick.Particles/Turbulence 2.4", + "QtQuick.Particles/Turbulence 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Property { name: "strength"; type: "double" } + Property { name: "noiseSource"; type: "QUrl" } + Signal { + name: "strengthChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "noiseSourceChanged" + Parameter { name: "arg"; type: "QUrl" } + } + Method { + name: "setStrength" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setNoiseSource" + Parameter { name: "arg"; type: "QUrl" } + } + } + Component { + file: "qquickwander_p.h" + name: "QQuickWanderAffector" + prototype: "QQuickParticleAffector" + exports: [ + "QtQuick.Particles/Wander 2.0", + "QtQuick.Particles/Wander 2.1", + "QtQuick.Particles/Wander 2.11", + "QtQuick.Particles/Wander 2.4", + "QtQuick.Particles/Wander 2.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "AffectableParameters" + values: ["Position", "Velocity", "Acceleration"] + } + Property { name: "pace"; type: "double" } + Property { name: "xVariance"; type: "double" } + Property { name: "yVariance"; type: "double" } + Property { name: "affectedParameter"; type: "AffectableParameters" } + Signal { + name: "xVarianceChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "yVarianceChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "paceChanged" + Parameter { name: "arg"; type: "double" } + } + Signal { + name: "affectedParameterChanged" + Parameter { name: "arg"; type: "AffectableParameters" } + } + Method { + name: "setXVariance" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setYVariance" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setPace" + Parameter { name: "arg"; type: "double" } + } + Method { + name: "setAffectedParameter" + Parameter { name: "arg"; type: "AffectableParameters" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/qmldir new file mode 100644 index 0000000..1f17baa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Particles.2/qmldir @@ -0,0 +1,4 @@ +module QtQuick.Particles +plugin particlesplugin +classname QtQuick2ParticlesPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/libpdfplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/libpdfplugin.so new file mode 100755 index 0000000..67a9c11 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/libpdfplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/plugins.qmltypes new file mode 100644 index 0000000..a30361d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/plugins.qmltypes @@ -0,0 +1,52 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick.Pdf 5.14' + +Module { + dependencies: [ + "QtGraphicalEffects 1.12", + "QtQuick 2.14", + "QtQuick.Controls 2.14", + "QtQuick.Controls.Fusion 2.14", + "QtQuick.Controls.Fusion.impl 2.14", + "QtQuick.Controls.Imagine 2.14", + "QtQuick.Controls.Imagine.impl 2.14", + "QtQuick.Controls.Material 2.14", + "QtQuick.Controls.Material.impl 2.14", + "QtQuick.Controls.Universal 2.14", + "QtQuick.Controls.Universal.impl 2.12", + "QtQuick.Controls.impl 2.14", + "QtQuick.Shapes 1.14", + "QtQuick.Templates 2.14", + "QtQuick.Window 2.2" + ] + Component { + name: "QQuickPdfDocument" + prototype: "QObject" + exports: ["QtQuick.Pdf/PdfDocument 5.14"] + exportMetaObjectRevisions: [0] + Property { name: "source"; type: "QUrl" } + Property { name: "pageCount"; type: "int"; isReadonly: true } + Property { name: "password"; type: "string" } + Property { name: "status"; type: "QPdfDocument::Status"; isReadonly: true } + Property { name: "title"; type: "string"; isReadonly: true } + Property { name: "subject"; type: "string"; isReadonly: true } + Property { name: "author"; type: "string"; isReadonly: true } + Property { name: "keywords"; type: "string"; isReadonly: true } + Property { name: "producer"; type: "string"; isReadonly: true } + Property { name: "creator"; type: "string"; isReadonly: true } + Property { name: "creationDate"; type: "QDateTime"; isReadonly: true } + Property { name: "modificationDate"; type: "QDateTime"; isReadonly: true } + Signal { name: "passwordRequired" } + Signal { name: "metaDataLoaded" } + Method { + name: "pagePointSize" + type: "QSizeF" + Parameter { name: "page"; type: "int" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfMultiPageView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfMultiPageView.qml new file mode 100644 index 0000000..71485c2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfMultiPageView.qml @@ -0,0 +1,434 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtPDF module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.14 +import QtQuick.Controls 2.14 +import QtQuick.Layouts 1.14 +import QtQuick.Pdf 5.15 +import QtQuick.Shapes 1.14 +import QtQuick.Window 2.14 + +Item { + // public API + // TODO 5.15: required property + property var document: undefined + property bool debug: false + + property string selectedText + function selectAll() { + var currentItem = tableHelper.itemAtCell(tableHelper.cellAtPos(root.width / 2, root.height / 2)) + if (currentItem) + currentItem.selection.selectAll() + } + function copySelectionToClipboard() { + var currentItem = tableHelper.itemAtCell(tableHelper.cellAtPos(root.width / 2, root.height / 2)) + if (debug) + console.log("currentItem", currentItem, "sel", currentItem.selection.text) + if (currentItem) + currentItem.selection.copyToClipboard() + } + + // page navigation + property alias currentPage: navigationStack.currentPage + property alias backEnabled: navigationStack.backAvailable + property alias forwardEnabled: navigationStack.forwardAvailable + function back() { navigationStack.back() } + function forward() { navigationStack.forward() } + function goToPage(page) { + if (page === navigationStack.currentPage) + return + goToLocation(page, Qt.point(-1, -1), 0) + } + function goToLocation(page, location, zoom) { + if (zoom > 0) { + navigationStack.jumping = true // don't call navigationStack.update() because we will push() instead + root.renderScale = zoom + tableView.forceLayout() // but do ensure that the table layout is correct before we try to jump + navigationStack.jumping = false + } + navigationStack.push(page, location, zoom) // actually jump + } + property vector2d jumpLocationMargin: Qt.vector2d(10, 10) // px from top-left corner + property int currentPageRenderingStatus: Image.Null + + // page scaling + property real renderScale: 1 + property real pageRotation: 0 + function resetScale() { root.renderScale = 1 } + function scaleToWidth(width, height) { + root.renderScale = width / (tableView.rot90 ? tableView.firstPagePointSize.height : tableView.firstPagePointSize.width) + } + function scaleToPage(width, height) { + var windowAspect = width / height + var pageAspect = tableView.firstPagePointSize.width / tableView.firstPagePointSize.height + if (tableView.rot90) { + if (windowAspect > pageAspect) { + root.renderScale = height / tableView.firstPagePointSize.width + } else { + root.renderScale = width / tableView.firstPagePointSize.height + } + } else { + if (windowAspect > pageAspect) { + root.renderScale = height / tableView.firstPagePointSize.height + } else { + root.renderScale = width / tableView.firstPagePointSize.width + } + } + } + + // text search + property alias searchModel: searchModel + property alias searchString: searchModel.searchString + function searchBack() { --searchModel.currentResult } + function searchForward() { ++searchModel.currentResult } + + id: root + PdfStyle { id: style } + TableView { + id: tableView + anchors.fill: parent + anchors.leftMargin: 2 + model: modelInUse && root.document !== undefined ? root.document.pageCount : 0 + // workaround to make TableView do scheduleRebuildTable(RebuildOption::All) in cases when forceLayout() doesn't + property bool modelInUse: true + function rebuild() { + modelInUse = false + modelInUse = true + } + // end workaround + rowSpacing: 6 + property real rotationNorm: Math.round((360 + (root.pageRotation % 360)) % 360) + property bool rot90: rotationNorm == 90 || rotationNorm == 270 + onRot90Changed: forceLayout() + property size firstPagePointSize: document === undefined ? Qt.size(0, 0) : document.pagePointSize(0) + property real pageHolderWidth: Math.max(root.width, document === undefined ? 0 : + (rot90 ? document.maxPageHeight : document.maxPageWidth) * root.renderScale) + contentWidth: document === undefined ? 0 : pageHolderWidth + vscroll.width + 2 + rowHeightProvider: function(row) { return (rot90 ? document.pagePointSize(row).width : document.pagePointSize(row).height) * root.renderScale } + TableViewExtra { + id: tableHelper + tableView: tableView + } + delegate: Rectangle { + id: pageHolder + color: root.debug ? "beige" : "transparent" + Text { + visible: root.debug + anchors { right: parent.right; verticalCenter: parent.verticalCenter } + rotation: -90; text: pageHolder.width.toFixed(1) + "x" + pageHolder.height.toFixed(1) + "\n" + + image.width.toFixed(1) + "x" + image.height.toFixed(1) + } + implicitWidth: tableView.pageHolderWidth + implicitHeight: tableView.rot90 ? image.width : image.height + property alias selection: selection + Rectangle { + id: paper + width: image.width + height: image.height + rotation: root.pageRotation + anchors.centerIn: pinch.active ? undefined : parent + property size pagePointSize: document.pagePointSize(index) + property real pageScale: image.paintedWidth / pagePointSize.width + Image { + id: image + source: document.source + currentFrame: index + asynchronous: true + fillMode: Image.PreserveAspectFit + width: paper.pagePointSize.width * root.renderScale + height: paper.pagePointSize.height * root.renderScale + property real renderScale: root.renderScale + property real oldRenderScale: 1 + onRenderScaleChanged: { + image.sourceSize.width = paper.pagePointSize.width * renderScale + image.sourceSize.height = 0 + paper.scale = 1 + searchHighlights.update() + } + onStatusChanged: { + if (index === navigationStack.currentPage) + root.currentPageRenderingStatus = status + } + } + Shape { + anchors.fill: parent + visible: image.status === Image.Ready + onVisibleChanged: searchHighlights.update() + ShapePath { + strokeWidth: -1 + fillColor: style.pageSearchResultsColor + scale: Qt.size(paper.pageScale, paper.pageScale) + PathMultiline { + id: searchHighlights + function update() { + // paths could be a binding, but we need to be able to "kick" it sometimes + paths = searchModel.boundingPolygonsOnPage(index) + } + } + } + Connections { + target: searchModel + // whenever the highlights on the _current_ page change, they actually need to change on _all_ pages + // (usually because the search string has changed) + function onCurrentPageBoundingPolygonsChanged() { searchHighlights.update() } + } + ShapePath { + strokeWidth: -1 + fillColor: style.selectionColor + scale: Qt.size(paper.pageScale, paper.pageScale) + PathMultiline { + paths: selection.geometry + } + } + } + Shape { + anchors.fill: parent + visible: image.status === Image.Ready && searchModel.currentPage === index + ShapePath { + strokeWidth: style.currentSearchResultStrokeWidth + strokeColor: style.currentSearchResultStrokeColor + fillColor: "transparent" + scale: Qt.size(paper.pageScale, paper.pageScale) + PathMultiline { + paths: searchModel.currentResultBoundingPolygons + } + } + } + PinchHandler { + id: pinch + minimumScale: 0.1 + maximumScale: root.renderScale < 4 ? 2 : 1 + minimumRotation: root.pageRotation + maximumRotation: root.pageRotation + enabled: image.sourceSize.width < 5000 + onActiveChanged: + if (active) { + paper.z = 10 + } else { + paper.z = 0 + var centroidInPoints = Qt.point(pinch.centroid.position.x / root.renderScale, + pinch.centroid.position.y / root.renderScale) + var centroidInFlickable = tableView.mapFromItem(paper, pinch.centroid.position.x, pinch.centroid.position.y) + var newSourceWidth = image.sourceSize.width * paper.scale + var ratio = newSourceWidth / image.sourceSize.width + if (root.debug) + console.log("pinch ended on page", index, "with centroid", pinch.centroid.position, centroidInPoints, "wrt flickable", centroidInFlickable, + "page at", pageHolder.x.toFixed(2), pageHolder.y.toFixed(2), + "contentX/Y were", tableView.contentX.toFixed(2), tableView.contentY.toFixed(2)) + if (ratio > 1.1 || ratio < 0.9) { + var centroidOnPage = Qt.point(centroidInPoints.x * root.renderScale * ratio, centroidInPoints.y * root.renderScale * ratio) + paper.scale = 1 + paper.x = 0 + paper.y = 0 + root.renderScale *= ratio + tableView.forceLayout() + if (tableView.rotationNorm == 0) { + tableView.contentX = pageHolder.x + tableView.originX + centroidOnPage.x - centroidInFlickable.x + tableView.contentY = pageHolder.y + tableView.originY + centroidOnPage.y - centroidInFlickable.y + } else if (tableView.rotationNorm == 90) { + tableView.contentX = pageHolder.x + tableView.originX + image.height - centroidOnPage.y - centroidInFlickable.x + tableView.contentY = pageHolder.y + tableView.originY + centroidOnPage.x - centroidInFlickable.y + } else if (tableView.rotationNorm == 180) { + tableView.contentX = pageHolder.x + tableView.originX + image.width - centroidOnPage.x - centroidInFlickable.x + tableView.contentY = pageHolder.y + tableView.originY + image.height - centroidOnPage.y - centroidInFlickable.y + } else if (tableView.rotationNorm == 270) { + tableView.contentX = pageHolder.x + tableView.originX + centroidOnPage.y - centroidInFlickable.x + tableView.contentY = pageHolder.y + tableView.originY + image.width - centroidOnPage.x - centroidInFlickable.y + } + if (root.debug) + console.log("contentX/Y adjusted to", tableView.contentX.toFixed(2), tableView.contentY.toFixed(2), "y @top", pageHolder.y) + tableView.returnToBounds() + } + } + grabPermissions: PointerHandler.CanTakeOverFromAnything + } + DragHandler { + id: textSelectionDrag + acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus + target: null + } + TapHandler { + id: mouseClickHandler + acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus + } + TapHandler { + id: touchTapHandler + acceptedDevices: PointerDevice.TouchScreen + onTapped: { + selection.clear() + selection.forceActiveFocus() + } + } + Repeater { + model: PdfLinkModel { + id: linkModel + document: root.document + page: image.currentFrame + } + delegate: Shape { + x: rect.x * paper.pageScale + y: rect.y * paper.pageScale + width: rect.width * paper.pageScale + height: rect.height * paper.pageScale + visible: image.status === Image.Ready + ShapePath { + strokeWidth: style.linkUnderscoreStrokeWidth + strokeColor: style.linkUnderscoreColor + strokeStyle: style.linkUnderscoreStrokeStyle + dashPattern: style.linkUnderscoreDashPattern + startX: 0; startY: height + PathLine { x: width; y: height } + } + MouseArea { // TODO switch to TapHandler / HoverHandler in 5.15 + id: linkMA + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + onClicked: { + if (page >= 0) + root.goToLocation(page, location, zoom) + else + Qt.openUrlExternally(url) + } + } + ToolTip { + visible: linkMA.containsMouse + delay: 1000 + text: page >= 0 ? + ("page " + (page + 1) + + " location " + location.x.toFixed(1) + ", " + location.y.toFixed(1) + + " zoom " + zoom) : url + } + } + } + PdfSelection { + id: selection + anchors.fill: parent + document: root.document + page: image.currentFrame + renderScale: image.renderScale + fromPoint: textSelectionDrag.centroid.pressPosition + toPoint: textSelectionDrag.centroid.position + hold: !textSelectionDrag.active && !mouseClickHandler.pressed + onTextChanged: root.selectedText = text + focus: true + } + } + } + ScrollBar.vertical: ScrollBar { + id: vscroll + property bool moved: false + onPositionChanged: moved = true + onActiveChanged: { + var cell = tableHelper.cellAtPos(root.width / 2, root.height / 2) + var currentItem = tableHelper.itemAtCell(cell) + var currentLocation = Qt.point(0, 0) + if (currentItem) { // maybe the delegate wasn't loaded yet + currentLocation = Qt.point((tableView.contentX - currentItem.x + jumpLocationMargin.x) / root.renderScale, + (tableView.contentY - currentItem.y + jumpLocationMargin.y) / root.renderScale) + } + if (active) { + moved = false + // emitJumped false to avoid interrupting a pinch if TableView thinks it should scroll at the same time + navigationStack.push(cell.y, currentLocation, root.renderScale, false) + } else if (moved) { + navigationStack.update(cell.y, currentLocation, root.renderScale) + } + } + } + ScrollBar.horizontal: ScrollBar { } + } + onRenderScaleChanged: { + // if navigationStack.jumped changes the scale, don't turn around and update the stack again; + // and don't force layout either, because positionViewAtCell() will do that + if (navigationStack.jumping) + return + // make TableView rebuild from scratch, because otherwise it doesn't know the delegates are changing size + tableView.rebuild() + var cell = tableHelper.cellAtPos(root.width / 2, root.height / 2) + var currentItem = tableHelper.itemAtCell(cell) + if (currentItem) { + var currentLocation = Qt.point((tableView.contentX - currentItem.x + jumpLocationMargin.x) / root.renderScale, + (tableView.contentY - currentItem.y + jumpLocationMargin.y) / root.renderScale) + navigationStack.update(cell.y, currentLocation, renderScale) + } + } + PdfNavigationStack { + id: navigationStack + property bool jumping: false + property int previousPage: 0 + onJumped: { + jumping = true + root.renderScale = zoom + if (location.y < 0) { + // invalid to indicate that a specific location was not needed, + // so attempt to position the new page just as the current page is + var currentYOffset = 0 + var previousPageDelegate = tableHelper.itemAtCell(0, previousPage) + if (previousPageDelegate) + currentYOffset = tableView.contentY - previousPageDelegate.y + tableHelper.positionViewAtRow(page, Qt.AlignTop, currentYOffset) + if (root.debug) { + console.log("going from page", previousPage, "to", page, "offset", currentYOffset, + "ended up @", tableView.contentX.toFixed(1) + ", " + tableView.contentY.toFixed(1)) + } + } else { + // jump to a page and position the given location relative to the top-left corner of the viewport + var pageSize = root.document.pagePointSize(page) + pageSize.width *= root.renderScale + pageSize.height *= root.renderScale + var xOffsetLimit = Math.max(0, pageSize.width - root.width) / 2 + var offset = Qt.point(Math.max(-xOffsetLimit, Math.min(xOffsetLimit, + location.x * root.renderScale - jumpLocationMargin.x)), + Math.max(0, location.y * root.renderScale - jumpLocationMargin.y)) + tableHelper.positionViewAtCell(0, page, Qt.AlignLeft | Qt.AlignTop, offset) + if (root.debug) { + console.log("going to zoom", zoom, "loc", location, "on page", page, + "ended up @", tableView.contentX.toFixed(1) + ", " + tableView.contentY.toFixed(1)) + } + } + jumping = false + previousPage = page + } + onCurrentPageChanged: searchModel.currentPage = currentPage + } + PdfSearchModel { + id: searchModel + document: root.document === undefined ? null : root.document + // TODO maybe avoid jumping if the result is already fully visible in the viewport + onCurrentResultBoundingRectChanged: root.goToLocation(currentPage, + Qt.point(currentResultBoundingRect.x, currentResultBoundingRect.y), 0) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfPageView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfPageView.qml new file mode 100644 index 0000000..b90ad2d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfPageView.qml @@ -0,0 +1,276 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtPDF module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.14 +import QtQuick.Controls 2.14 +import QtQuick.Pdf 5.15 +import QtQuick.Shapes 1.14 +import Qt.labs.animation 1.0 + +Rectangle { + // public API + // TODO 5.15: required property + property var document: undefined + property alias status: image.status + + property alias selectedText: selection.text + function selectAll() { + selection.selectAll() + } + function copySelectionToClipboard() { + selection.copyToClipboard() + } + + // page navigation + property alias currentPage: navigationStack.currentPage + property alias backEnabled: navigationStack.backAvailable + property alias forwardEnabled: navigationStack.forwardAvailable + function back() { navigationStack.back() } + function forward() { navigationStack.forward() } + function goToPage(page) { goToLocation(page, Qt.point(0, 0), 0) } + function goToLocation(page, location, zoom) { + if (zoom > 0) + root.renderScale = zoom + navigationStack.push(page, location, zoom) + } + + // page scaling + property real renderScale: 1 + property alias sourceSize: image.sourceSize + function resetScale() { + image.sourceSize.width = 0 + image.sourceSize.height = 0 + root.x = 0 + root.y = 0 + root.scale = 1 + } + function scaleToWidth(width, height) { + var halfRotation = Math.abs(root.rotation % 180) + image.sourceSize = Qt.size((halfRotation > 45 && halfRotation < 135) ? height : width, 0) + root.x = 0 + root.y = 0 + image.centerInSize = Qt.size(width, height) + image.centerOnLoad = true + image.vCenterOnLoad = (halfRotation > 45 && halfRotation < 135) + root.scale = 1 + } + function scaleToPage(width, height) { + var windowAspect = width / height + var halfRotation = Math.abs(root.rotation % 180) + var pagePointSize = document.pagePointSize(navigationStack.currentPage) + if (halfRotation > 45 && halfRotation < 135) { + // rotated 90 or 270º + var pageAspect = pagePointSize.height / pagePointSize.width + if (windowAspect > pageAspect) { + image.sourceSize = Qt.size(height, 0) + } else { + image.sourceSize = Qt.size(0, width) + } + } else { + var pageAspect = pagePointSize.width / pagePointSize.height + if (windowAspect > pageAspect) { + image.sourceSize = Qt.size(0, height) + } else { + image.sourceSize = Qt.size(width, 0) + } + } + image.centerInSize = Qt.size(width, height) + image.centerOnLoad = true + image.vCenterOnLoad = true + root.scale = 1 + } + + // text search + property alias searchModel: searchModel + property alias searchString: searchModel.searchString + function searchBack() { --searchModel.currentResult } + function searchForward() { ++searchModel.currentResult } + + // implementation + id: root + width: image.width + height: image.height + + PdfSelection { + id: selection + document: root.document + page: navigationStack.currentPage + fromPoint: Qt.point(textSelectionDrag.centroid.pressPosition.x / image.pageScale, textSelectionDrag.centroid.pressPosition.y / image.pageScale) + toPoint: Qt.point(textSelectionDrag.centroid.position.x / image.pageScale, textSelectionDrag.centroid.position.y / image.pageScale) + hold: !textSelectionDrag.active && !tapHandler.pressed + } + + PdfSearchModel { + id: searchModel + document: root.document === undefined ? null : root.document + onCurrentPageChanged: root.goToPage(currentPage) + } + + PdfNavigationStack { + id: navigationStack + onCurrentPageChanged: searchModel.currentPage = currentPage + // TODO onCurrentLocationChanged: position currentLocation.x and .y in middle // currentPageChanged() MUST occur first! + onCurrentZoomChanged: root.renderScale = currentZoom + // TODO deal with horizontal location (need WheelHandler or Flickable probably) + } + + Image { + id: image + currentFrame: navigationStack.currentPage + source: document.status === PdfDocument.Ready ? document.source : "" + asynchronous: true + fillMode: Image.PreserveAspectFit + property bool centerOnLoad: false + property bool vCenterOnLoad: false + property size centerInSize + property real pageScale: image.paintedWidth / document.pagePointSize(navigationStack.currentPage).width + function reRenderIfNecessary() { + var newSourceWidth = image.sourceSize.width * root.scale + var ratio = newSourceWidth / image.sourceSize.width + if (ratio > 1.1 || ratio < 0.9) { + image.sourceSize.width = newSourceWidth + image.sourceSize.height = 0 + root.scale = 1 + } + } + onStatusChanged: + if (status == Image.Ready && centerOnLoad) { + root.x = (centerInSize.width - image.implicitWidth) / 2 + root.y = vCenterOnLoad ? (centerInSize.height - image.implicitHeight) / 2 : 0 + centerOnLoad = false + vCenterOnLoad = false + } + } + onRenderScaleChanged: { + image.sourceSize.width = document.pagePointSize(navigationStack.currentPage).width * renderScale + image.sourceSize.height = 0 + root.scale = 1 + } + + Shape { + anchors.fill: parent + opacity: 0.25 + visible: image.status === Image.Ready + ShapePath { + strokeWidth: 1 + strokeColor: "cyan" + fillColor: "steelblue" + scale: Qt.size(image.pageScale, image.pageScale) + PathMultiline { + paths: searchModel.currentPageBoundingPolygons + } + } + ShapePath { + strokeWidth: 1 + strokeColor: "orange" + fillColor: "cyan" + scale: Qt.size(image.pageScale, image.pageScale) + PathMultiline { + paths: searchModel.currentResultBoundingPolygons + } + } + ShapePath { + fillColor: "orange" + scale: Qt.size(image.pageScale, image.pageScale) + PathMultiline { + paths: selection.geometry + } + } + } + + Repeater { + model: PdfLinkModel { + id: linkModel + document: root.document + page: navigationStack.currentPage + } + delegate: Rectangle { + color: "transparent" + border.color: "lightgrey" + x: rect.x * image.pageScale + y: rect.y * image.pageScale + width: rect.width * image.pageScale + height: rect.height * image.pageScale + MouseArea { // TODO switch to TapHandler / HoverHandler in 5.15 + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: { + if (page >= 0) + navigationStack.push(page, Qt.point(0, 0), root.renderScale) + else + Qt.openUrlExternally(url) + } + } + } + } + + PinchHandler { + id: pinch + minimumScale: 0.1 + maximumScale: 10 + minimumRotation: 0 + maximumRotation: 0 + onActiveChanged: if (!active) image.reRenderIfNecessary() + grabPermissions: PinchHandler.TakeOverForbidden // don't allow takeover if pinch has started + } + DragHandler { + id: pageMovingTouchDrag + acceptedDevices: PointerDevice.TouchScreen + } + DragHandler { + id: pageMovingMiddleMouseDrag + acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus + acceptedButtons: Qt.MiddleButton + snapMode: DragHandler.NoSnap + } + DragHandler { + id: textSelectionDrag + acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus + target: null + } + TapHandler { + id: tapHandler + acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus + } + // prevent it from being scrolled out of view + BoundaryRule on x { + minimum: 100 - root.width + maximum: root.parent.width - 100 + } + BoundaryRule on y { + minimum: 100 - root.height + maximum: root.parent.height - 100 + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfScrollablePageView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfScrollablePageView.qml new file mode 100644 index 0000000..51d9e53 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qml/PdfScrollablePageView.qml @@ -0,0 +1,307 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtPDF module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.14 +import QtQuick.Controls 2.14 +import QtQuick.Pdf 5.15 +import QtQuick.Shapes 1.14 +import Qt.labs.animation 1.0 + +Flickable { + // public API + // TODO 5.15: required property + property var document: undefined + property bool debug: false + property alias status: image.status + + property alias selectedText: selection.text + function selectAll() { + selection.selectAll() + } + function copySelectionToClipboard() { + selection.copyToClipboard() + } + + // page navigation + property alias currentPage: navigationStack.currentPage + property alias backEnabled: navigationStack.backAvailable + property alias forwardEnabled: navigationStack.forwardAvailable + function back() { navigationStack.back() } + function forward() { navigationStack.forward() } + function goToPage(page) { + if (page === navigationStack.currentPage) + return + goToLocation(page, Qt.point(0, 0), 0) + } + function goToLocation(page, location, zoom) { + if (zoom > 0) + root.renderScale = zoom + navigationStack.push(page, location, zoom) + } + + // page scaling + property real renderScale: 1 + property real pageRotation: 0 + property alias sourceSize: image.sourceSize + function resetScale() { + paper.scale = 1 + root.renderScale = 1 + } + function scaleToWidth(width, height) { + var pagePointSize = document.pagePointSize(navigationStack.currentPage) + root.renderScale = root.width / (paper.rot90 ? pagePointSize.height : pagePointSize.width) + if (debug) + console.log("scaling", pagePointSize, "to fit", root.width, "rotated?", paper.rot90, "scale", root.renderScale) + root.contentX = 0 + root.contentY = 0 + } + function scaleToPage(width, height) { + var pagePointSize = document.pagePointSize(navigationStack.currentPage) + root.renderScale = Math.min( + root.width / (paper.rot90 ? pagePointSize.height : pagePointSize.width), + root.height / (paper.rot90 ? pagePointSize.width : pagePointSize.height) ) + root.contentX = 0 + root.contentY = 0 + } + + // text search + property alias searchModel: searchModel + property alias searchString: searchModel.searchString + function searchBack() { --searchModel.currentResult } + function searchForward() { ++searchModel.currentResult } + + // implementation + id: root + PdfStyle { id: style } + contentWidth: paper.width + contentHeight: paper.height + ScrollBar.vertical: ScrollBar { + onActiveChanged: + if (!active ) { + var currentLocation = Qt.point((root.contentX + root.width / 2) / root.renderScale, + (root.contentY + root.height / 2) / root.renderScale) + navigationStack.update(navigationStack.currentPage, currentLocation, root.renderScale) + } + } + ScrollBar.horizontal: ScrollBar { + onActiveChanged: + if (!active ) { + var currentLocation = Qt.point((root.contentX + root.width / 2) / root.renderScale, + (root.contentY + root.height / 2) / root.renderScale) + navigationStack.update(navigationStack.currentPage, currentLocation, root.renderScale) + } + } + + onRenderScaleChanged: { + image.sourceSize.width = document.pagePointSize(navigationStack.currentPage).width * renderScale + image.sourceSize.height = 0 + paper.scale = 1 + var currentLocation = Qt.point((root.contentX + root.width / 2) / root.renderScale, + (root.contentY + root.height / 2) / root.renderScale) + navigationStack.update(navigationStack.currentPage, currentLocation, root.renderScale) + } + + PdfSearchModel { + id: searchModel + document: root.document === undefined ? null : root.document + // TODO maybe avoid jumping if the result is already fully visible in the viewport + onCurrentResultBoundingRectChanged: root.goToLocation(currentPage, + Qt.point(currentResultBoundingRect.x, currentResultBoundingRect.y), 0) + } + + PdfNavigationStack { + id: navigationStack + onJumped: { + root.renderScale = zoom + var dx = Math.max(0, location.x * root.renderScale - root.width / 2) - root.contentX + var dy = Math.max(0, location.y * root.renderScale - root.height / 2) - root.contentY + // don't jump if location is in the viewport already, i.e. if the "error" between desired and actual contentX/Y is small + if (Math.abs(dx) > root.width / 3) + root.contentX += dx + if (Math.abs(dy) > root.height / 3) + root.contentY += dy + if (root.debug) { + console.log("going to zoom", zoom, "loc", location, + "on page", page, "ended up @", root.contentX + ", " + root.contentY) + } + } + onCurrentPageChanged: searchModel.currentPage = currentPage + } + + Rectangle { + id: paper + width: rot90 ? image.height : image.width + height: rot90 ? image.width : image.height + property real rotationModulus: Math.abs(root.pageRotation % 180) + property bool rot90: rotationModulus > 45 && rotationModulus < 135 + + Image { + id: image + currentFrame: navigationStack.currentPage + source: document.status === PdfDocument.Ready ? document.source : "" + asynchronous: true + fillMode: Image.PreserveAspectFit + rotation: root.pageRotation + anchors.centerIn: parent + property real pageScale: image.paintedWidth / document.pagePointSize(navigationStack.currentPage).width + + Shape { + anchors.fill: parent + visible: image.status === Image.Ready + ShapePath { + strokeWidth: -1 + fillColor: style.pageSearchResultsColor + scale: Qt.size(image.pageScale, image.pageScale) + PathMultiline { + paths: searchModel.currentPageBoundingPolygons + } + } + ShapePath { + strokeWidth: style.currentSearchResultStrokeWidth + strokeColor: style.currentSearchResultStrokeColor + fillColor: "transparent" + scale: Qt.size(image.pageScale, image.pageScale) + PathMultiline { + paths: searchModel.currentResultBoundingPolygons + } + } + ShapePath { + fillColor: style.selectionColor + scale: Qt.size(image.pageScale, image.pageScale) + PathMultiline { + paths: selection.geometry + } + } + } + + Repeater { + model: PdfLinkModel { + id: linkModel + document: root.document + page: navigationStack.currentPage + } + delegate: Shape { + x: rect.x * image.pageScale + y: rect.y * image.pageScale + width: rect.width * image.pageScale + height: rect.height * image.pageScale + ShapePath { + strokeWidth: style.linkUnderscoreStrokeWidth + strokeColor: style.linkUnderscoreColor + strokeStyle: style.linkUnderscoreStrokeStyle + dashPattern: style.linkUnderscoreDashPattern + startX: 0; startY: height + PathLine { x: width; y: height } + } + MouseArea { // TODO switch to TapHandler / HoverHandler in 5.15 + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: { + if (page >= 0) + navigationStack.push(page, Qt.point(0, 0), root.renderScale) + else + Qt.openUrlExternally(url) + } + } + } + } + DragHandler { + id: textSelectionDrag + acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus + target: null + } + TapHandler { + id: mouseClickHandler + acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus + } + TapHandler { + id: touchTapHandler + acceptedDevices: PointerDevice.TouchScreen + onTapped: { + selection.clear() + selection.focus = true + } + } + } + + PdfSelection { + id: selection + anchors.fill: parent + document: root.document + page: navigationStack.currentPage + renderScale: image.pageScale + fromPoint: textSelectionDrag.centroid.pressPosition + toPoint: textSelectionDrag.centroid.position + hold: !textSelectionDrag.active && !mouseClickHandler.pressed + focus: true + } + + PinchHandler { + id: pinch + minimumScale: 0.1 + maximumScale: root.renderScale < 4 ? 2 : 1 + minimumRotation: 0 + maximumRotation: 0 + enabled: image.sourceSize.width < 5000 + onActiveChanged: + if (!active) { + var centroidInPoints = Qt.point(pinch.centroid.position.x / root.renderScale, + pinch.centroid.position.y / root.renderScale) + var centroidInFlickable = root.mapFromItem(paper, pinch.centroid.position.x, pinch.centroid.position.y) + var newSourceWidth = image.sourceSize.width * paper.scale + var ratio = newSourceWidth / image.sourceSize.width + if (root.debug) + console.log("pinch ended with centroid", pinch.centroid.position, centroidInPoints, "wrt flickable", centroidInFlickable, + "page at", paper.x.toFixed(2), paper.y.toFixed(2), + "contentX/Y were", root.contentX.toFixed(2), root.contentY.toFixed(2)) + if (ratio > 1.1 || ratio < 0.9) { + var centroidOnPage = Qt.point(centroidInPoints.x * root.renderScale * ratio, centroidInPoints.y * root.renderScale * ratio) + paper.scale = 1 + paper.x = 0 + paper.y = 0 + root.contentX = centroidOnPage.x - centroidInFlickable.x + root.contentY = centroidOnPage.y - centroidInFlickable.y + root.renderScale *= ratio // onRenderScaleChanged calls navigationStack.update() so we don't need to here + if (root.debug) + console.log("contentX/Y adjusted to", root.contentX.toFixed(2), root.contentY.toFixed(2)) + } else { + paper.x = 0 + paper.y = 0 + } + } + grabPermissions: PointerHandler.CanTakeOverFromAnything + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qmldir new file mode 100644 index 0000000..65fa95c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Pdf/qmldir @@ -0,0 +1,4 @@ +module QtQuick.Pdf +plugin pdfplugin +classname QtQuick2PdfPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/libwidgetsplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/libwidgetsplugin.so new file mode 100755 index 0000000..cb9371b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/libwidgetsplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/plugins.qmltypes new file mode 100644 index 0000000..5e70b3b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/plugins.qmltypes @@ -0,0 +1,328 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick.PrivateWidgets 1.1' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QQuickAbstractColorDialog" + prototype: "QQuickAbstractDialog" + Property { name: "showAlphaChannel"; type: "bool" } + Property { name: "color"; type: "QColor" } + Property { name: "currentColor"; type: "QColor" } + Property { name: "currentHue"; type: "double"; isReadonly: true } + Property { name: "currentSaturation"; type: "double"; isReadonly: true } + Property { name: "currentLightness"; type: "double"; isReadonly: true } + Property { name: "currentAlpha"; type: "double"; isReadonly: true } + Signal { name: "selectionAccepted" } + Method { + name: "setVisible" + Parameter { name: "v"; type: "bool" } + } + Method { + name: "setModality" + Parameter { name: "m"; type: "Qt::WindowModality" } + } + Method { + name: "setTitle" + Parameter { name: "t"; type: "string" } + } + Method { + name: "setColor" + Parameter { name: "arg"; type: "QColor" } + } + Method { + name: "setCurrentColor" + Parameter { name: "currentColor"; type: "QColor" } + } + Method { + name: "setShowAlphaChannel" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + name: "QQuickAbstractDialog" + prototype: "QObject" + Enum { + name: "StandardButton" + values: { + "NoButton": 0, + "Ok": 1024, + "Save": 2048, + "SaveAll": 4096, + "Open": 8192, + "Yes": 16384, + "YesToAll": 32768, + "No": 65536, + "NoToAll": 131072, + "Abort": 262144, + "Retry": 524288, + "Ignore": 1048576, + "Close": 2097152, + "Cancel": 4194304, + "Discard": 8388608, + "Help": 16777216, + "Apply": 33554432, + "Reset": 67108864, + "RestoreDefaults": 134217728, + "NButtons": 134217729 + } + } + Enum { + name: "StandardButtons" + values: { + "NoButton": 0, + "Ok": 1024, + "Save": 2048, + "SaveAll": 4096, + "Open": 8192, + "Yes": 16384, + "YesToAll": 32768, + "No": 65536, + "NoToAll": 131072, + "Abort": 262144, + "Retry": 524288, + "Ignore": 1048576, + "Close": 2097152, + "Cancel": 4194304, + "Discard": 8388608, + "Help": 16777216, + "Apply": 33554432, + "Reset": 67108864, + "RestoreDefaults": 134217728, + "NButtons": 134217729 + } + } + Property { name: "visible"; type: "bool" } + Property { name: "modality"; type: "Qt::WindowModality" } + Property { name: "title"; type: "string" } + Property { name: "isWindow"; type: "bool"; isReadonly: true } + Property { name: "x"; type: "int" } + Property { name: "y"; type: "int" } + Property { name: "width"; type: "int" } + Property { name: "height"; type: "int" } + Property { name: "__maximumDimension"; type: "int"; isReadonly: true } + Signal { name: "visibilityChanged" } + Signal { name: "geometryChanged" } + Signal { name: "accepted" } + Signal { name: "rejected" } + Method { name: "open" } + Method { name: "close" } + Method { + name: "setX" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setY" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setWidth" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setHeight" + Parameter { name: "arg"; type: "int" } + } + } + Component { + name: "QQuickAbstractFileDialog" + prototype: "QQuickAbstractDialog" + Property { name: "selectExisting"; type: "bool" } + Property { name: "selectMultiple"; type: "bool" } + Property { name: "selectFolder"; type: "bool" } + Property { name: "folder"; type: "QUrl" } + Property { name: "nameFilters"; type: "QStringList" } + Property { name: "selectedNameFilter"; type: "string" } + Property { name: "selectedNameFilterExtensions"; type: "QStringList"; isReadonly: true } + Property { name: "selectedNameFilterIndex"; type: "int" } + Property { name: "fileUrl"; type: "QUrl"; isReadonly: true } + Property { name: "fileUrls"; type: "QList"; isReadonly: true } + Property { name: "sidebarVisible"; type: "bool" } + Property { name: "defaultSuffix"; type: "string" } + Property { name: "shortcuts"; type: "QJSValue"; isReadonly: true } + Property { name: "__shortcuts"; type: "QJSValue"; isReadonly: true } + Signal { name: "filterSelected" } + Signal { name: "fileModeChanged" } + Signal { name: "selectionAccepted" } + Method { + name: "setVisible" + Parameter { name: "v"; type: "bool" } + } + Method { + name: "setTitle" + Parameter { name: "t"; type: "string" } + } + Method { + name: "setSelectExisting" + Parameter { name: "s"; type: "bool" } + } + Method { + name: "setSelectMultiple" + Parameter { name: "s"; type: "bool" } + } + Method { + name: "setSelectFolder" + Parameter { name: "s"; type: "bool" } + } + Method { + name: "setFolder" + Parameter { name: "f"; type: "QUrl" } + } + Method { + name: "setNameFilters" + Parameter { name: "f"; type: "QStringList" } + } + Method { + name: "selectNameFilter" + Parameter { name: "f"; type: "string" } + } + Method { + name: "setSelectedNameFilterIndex" + Parameter { name: "idx"; type: "int" } + } + Method { + name: "setSidebarVisible" + Parameter { name: "s"; type: "bool" } + } + Method { + name: "setDefaultSuffix" + Parameter { name: "suffix"; type: "string" } + } + } + Component { + name: "QQuickAbstractFontDialog" + prototype: "QQuickAbstractDialog" + Property { name: "scalableFonts"; type: "bool" } + Property { name: "nonScalableFonts"; type: "bool" } + Property { name: "monospacedFonts"; type: "bool" } + Property { name: "proportionalFonts"; type: "bool" } + Property { name: "font"; type: "QFont" } + Property { name: "currentFont"; type: "QFont" } + Signal { name: "selectionAccepted" } + Method { + name: "setVisible" + Parameter { name: "v"; type: "bool" } + } + Method { + name: "setModality" + Parameter { name: "m"; type: "Qt::WindowModality" } + } + Method { + name: "setTitle" + Parameter { name: "t"; type: "string" } + } + Method { + name: "setFont" + Parameter { name: "arg"; type: "QFont" } + } + Method { + name: "setCurrentFont" + Parameter { name: "arg"; type: "QFont" } + } + Method { + name: "setScalableFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setNonScalableFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setMonospacedFonts" + Parameter { name: "arg"; type: "bool" } + } + Method { + name: "setProportionalFonts" + Parameter { name: "arg"; type: "bool" } + } + } + Component { + name: "QQuickAbstractMessageDialog" + prototype: "QQuickAbstractDialog" + exports: ["QtQuick.PrivateWidgets/QtMessageDialog 1.1"] + exportMetaObjectRevisions: [0] + Enum { + name: "Icon" + values: { + "NoIcon": 0, + "Information": 1, + "Warning": 2, + "Critical": 3, + "Question": 4 + } + } + Property { name: "text"; type: "string" } + Property { name: "informativeText"; type: "string" } + Property { name: "detailedText"; type: "string" } + Property { name: "icon"; type: "Icon" } + Property { name: "standardIconSource"; type: "QUrl"; isReadonly: true } + Property { name: "standardButtons"; type: "QQuickAbstractDialog::StandardButtons" } + Property { + name: "clickedButton" + type: "QQuickAbstractDialog::StandardButton" + isReadonly: true + } + Signal { name: "buttonClicked" } + Signal { name: "discard" } + Signal { name: "help" } + Signal { name: "yes" } + Signal { name: "no" } + Signal { name: "apply" } + Signal { name: "reset" } + Method { + name: "setVisible" + Parameter { name: "v"; type: "bool" } + } + Method { + name: "setTitle" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setText" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setInformativeText" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setDetailedText" + Parameter { name: "arg"; type: "string" } + } + Method { + name: "setIcon" + Parameter { name: "icon"; type: "Icon" } + } + Method { + name: "setStandardButtons" + Parameter { name: "buttons"; type: "StandardButtons" } + } + Method { + name: "click" + Parameter { name: "button"; type: "QQuickAbstractDialog::StandardButton" } + } + } + Component { + name: "QQuickQColorDialog" + prototype: "QQuickAbstractColorDialog" + exports: ["QtQuick.PrivateWidgets/QtColorDialog 1.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickQFileDialog" + prototype: "QQuickAbstractFileDialog" + exports: ["QtQuick.PrivateWidgets/QtFileDialog 1.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickQFontDialog" + prototype: "QQuickAbstractFontDialog" + exports: ["QtQuick.PrivateWidgets/QtFontDialog 1.1"] + exportMetaObjectRevisions: [0] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/qmldir new file mode 100644 index 0000000..da63c98 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/PrivateWidgets/qmldir @@ -0,0 +1,4 @@ +module QtQuick.PrivateWidgets +plugin widgetsplugin +classname QtQuick2PrivateWidgetsPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/libqtquickscene2dplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/libqtquickscene2dplugin.so new file mode 100755 index 0000000..2b1707a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/libqtquickscene2dplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/plugins.qmltypes new file mode 100644 index 0000000..16b8927 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/plugins.qmltypes @@ -0,0 +1,68 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Scene2D 2.15' + +Module { + dependencies: ["Qt3D.Core 2.0", "Qt3D.Render 2.0"] + Component { + name: "Qt3DRender::Quick::QScene2D" + defaultProperty: "item" + prototype: "Qt3DCore::QNode" + exports: ["QtQuick.Scene2D/Scene2D 2.9"] + exportMetaObjectRevisions: [209] + Enum { + name: "RenderPolicy" + values: { + "Continuous": 0, + "SingleShot": 1 + } + } + Property { name: "output"; type: "Qt3DRender::QRenderTargetOutput"; isPointer: true } + Property { name: "renderPolicy"; type: "QScene2D::RenderPolicy" } + Property { name: "item"; type: "QQuickItem"; isPointer: true } + Property { name: "mouseEnabled"; type: "bool" } + Signal { + name: "outputChanged" + Parameter { name: "output"; type: "Qt3DRender::QRenderTargetOutput"; isPointer: true } + } + Signal { + name: "renderPolicyChanged" + Parameter { name: "policy"; type: "QScene2D::RenderPolicy" } + } + Signal { + name: "itemChanged" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Signal { + name: "mouseEnabledChanged" + Parameter { name: "enabled"; type: "bool" } + } + Method { + name: "setOutput" + Parameter { name: "output"; type: "Qt3DRender::QRenderTargetOutput"; isPointer: true } + } + Method { + name: "setRenderPolicy" + Parameter { name: "policy"; type: "QScene2D::RenderPolicy" } + } + Method { + name: "setItem" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "setMouseEnabled" + Parameter { name: "enabled"; type: "bool" } + } + Property { + name: "entities" + revision: 209 + type: "Qt3DCore::QEntity" + isList: true + isReadonly: true + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/qmldir new file mode 100644 index 0000000..2e807f1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene2D/qmldir @@ -0,0 +1,3 @@ +module QtQuick.Scene2D +plugin qtquickscene2dplugin +classname QtQuickScene2DPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/libqtquickscene3dplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/libqtquickscene3dplugin.so new file mode 100755 index 0000000..7671dae Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/libqtquickscene3dplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/plugins.qmltypes new file mode 100644 index 0000000..f0ce9a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/plugins.qmltypes @@ -0,0 +1,87 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Scene3D 2.15' + +Module { + dependencies: ["Qt3D.Core 2.0", "QtQuick 2.0"] + Component { + name: "Qt3DRender::Scene3DItem" + defaultProperty: "entity" + prototype: "QQuickItem" + exports: [ + "QtQuick.Scene3D/Scene3D 2.0", + "QtQuick.Scene3D/Scene3D 2.14" + ] + exportMetaObjectRevisions: [0, 14] + Enum { + name: "CameraAspectRatioMode" + values: { + "AutomaticAspectRatio": 0, + "UserAspectRatio": 1 + } + } + Enum { + name: "CompositingMode" + values: { + "FBO": 0, + "Underlay": 1 + } + } + Property { name: "entity"; type: "Qt3DCore::QEntity"; isPointer: true } + Property { name: "aspects"; type: "QStringList" } + Property { name: "multisample"; type: "bool" } + Property { name: "cameraAspectRatioMode"; type: "CameraAspectRatioMode" } + Property { name: "hoverEnabled"; type: "bool" } + Property { name: "compositingMode"; revision: 14; type: "CompositingMode" } + Signal { + name: "cameraAspectRatioModeChanged" + Parameter { name: "mode"; type: "CameraAspectRatioMode" } + } + Method { + name: "setAspects" + Parameter { name: "aspects"; type: "QStringList" } + } + Method { + name: "setEntity" + Parameter { name: "entity"; type: "Qt3DCore::QEntity"; isPointer: true } + } + Method { + name: "setCameraAspectRatioMode" + Parameter { name: "mode"; type: "CameraAspectRatioMode" } + } + Method { + name: "setHoverEnabled" + Parameter { name: "enabled"; type: "bool" } + } + Method { + name: "setCompositingMode" + Parameter { name: "mode"; type: "CompositingMode" } + } + Method { + name: "setItemAreaAndDevicePixelRatio" + Parameter { name: "area"; type: "QSize" } + Parameter { name: "devicePixelRatio"; type: "double" } + } + } + Component { + name: "Qt3DRender::Scene3DView" + defaultProperty: "entity" + prototype: "QQuickItem" + exports: ["QtQuick.Scene3D/Scene3DView 2.14"] + exportMetaObjectRevisions: [0] + Property { name: "entity"; type: "Qt3DCore::QEntity"; isPointer: true } + Property { name: "scene3D"; type: "Qt3DRender::Scene3DItem"; isPointer: true } + Method { + name: "setEntity" + Parameter { name: "entity"; type: "Qt3DCore::QEntity"; isPointer: true } + } + Method { + name: "setScene3D" + Parameter { name: "scene3D"; type: "Scene3DItem"; isPointer: true } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/qmldir new file mode 100644 index 0000000..0f551d2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Scene3D/qmldir @@ -0,0 +1,3 @@ +module QtQuick.Scene3D +plugin qtquickscene3dplugin +classname QtQuickScene3DPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/libqmlshapesplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/libqmlshapesplugin.so new file mode 100755 index 0000000..d3dbdb8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/libqmlshapesplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/plugins.qmltypes new file mode 100644 index 0000000..9232061 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/plugins.qmltypes @@ -0,0 +1,154 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0"] + Component { + file: "qquickshape_p.h" + name: "QQuickShape" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick.Shapes/Shape 1.0", + "QtQuick.Shapes/Shape 1.1", + "QtQuick.Shapes/Shape 1.11", + "QtQuick.Shapes/Shape 1.4", + "QtQuick.Shapes/Shape 1.7" + ] + exportMetaObjectRevisions: [0, 1, 11, 4, 7] + Enum { + name: "RendererType" + values: [ + "UnknownRenderer", + "GeometryRenderer", + "NvprRenderer", + "SoftwareRenderer" + ] + } + Enum { + name: "Status" + values: ["Null", "Ready", "Processing"] + } + Enum { + name: "ContainsMode" + values: ["BoundingRectContains", "FillContains"] + } + Property { name: "rendererType"; type: "RendererType"; isReadonly: true } + Property { name: "asynchronous"; type: "bool" } + Property { name: "vendorExtensionsEnabled"; type: "bool" } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "containsMode"; revision: 11; type: "ContainsMode" } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Signal { name: "rendererChanged" } + Signal { name: "containsModeChanged"; revision: 11 } + Method { name: "_q_shapePathChanged" } + } + Component { + file: "qquickshape_p.h" + name: "QQuickShapeConicalGradient" + defaultProperty: "stops" + prototype: "QQuickShapeGradient" + exports: [ + "QtQuick.Shapes/ConicalGradient 1.0", + "QtQuick.Shapes/ConicalGradient 1.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "centerX"; type: "double" } + Property { name: "centerY"; type: "double" } + Property { name: "angle"; type: "double" } + } + Component { + file: "qquickshape_p.h" + name: "QQuickShapeGradient" + defaultProperty: "stops" + prototype: "QQuickGradient" + exports: [ + "QtQuick.Shapes/ShapeGradient 1.0", + "QtQuick.Shapes/ShapeGradient 1.12" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 12] + Enum { + name: "SpreadMode" + values: ["PadSpread", "RepeatSpread", "ReflectSpread"] + } + Property { name: "spread"; type: "SpreadMode" } + } + Component { + file: "qquickshape_p.h" + name: "QQuickShapeLinearGradient" + defaultProperty: "stops" + prototype: "QQuickShapeGradient" + exports: [ + "QtQuick.Shapes/LinearGradient 1.0", + "QtQuick.Shapes/LinearGradient 1.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "x1"; type: "double" } + Property { name: "y1"; type: "double" } + Property { name: "x2"; type: "double" } + Property { name: "y2"; type: "double" } + } + Component { + file: "qquickshape_p.h" + name: "QQuickShapePath" + defaultProperty: "pathElements" + prototype: "QQuickPath" + exports: [ + "QtQuick.Shapes/ShapePath 1.0", + "QtQuick.Shapes/ShapePath 1.14" + ] + exportMetaObjectRevisions: [0, 14] + Enum { + name: "FillRule" + values: ["OddEvenFill", "WindingFill"] + } + Enum { + name: "JoinStyle" + values: ["MiterJoin", "BevelJoin", "RoundJoin"] + } + Enum { + name: "CapStyle" + values: ["FlatCap", "SquareCap", "RoundCap"] + } + Enum { + name: "StrokeStyle" + values: ["SolidLine", "DashLine"] + } + Property { name: "strokeColor"; type: "QColor" } + Property { name: "strokeWidth"; type: "double" } + Property { name: "fillColor"; type: "QColor" } + Property { name: "fillRule"; type: "FillRule" } + Property { name: "joinStyle"; type: "JoinStyle" } + Property { name: "miterLimit"; type: "int" } + Property { name: "capStyle"; type: "CapStyle" } + Property { name: "strokeStyle"; type: "StrokeStyle" } + Property { name: "dashOffset"; type: "double" } + Property { name: "dashPattern"; type: "QVector" } + Property { name: "fillGradient"; type: "QQuickShapeGradient"; isPointer: true } + Property { name: "scale"; revision: 14; type: "QSizeF" } + Signal { name: "shapePathChanged" } + Method { name: "_q_fillGradientChanged" } + } + Component { + file: "qquickshape_p.h" + name: "QQuickShapeRadialGradient" + defaultProperty: "stops" + prototype: "QQuickShapeGradient" + exports: [ + "QtQuick.Shapes/RadialGradient 1.0", + "QtQuick.Shapes/RadialGradient 1.12" + ] + exportMetaObjectRevisions: [0, 12] + Property { name: "centerX"; type: "double" } + Property { name: "centerY"; type: "double" } + Property { name: "centerRadius"; type: "double" } + Property { name: "focalX"; type: "double" } + Property { name: "focalY"; type: "double" } + Property { name: "focalRadius"; type: "double" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/qmldir new file mode 100644 index 0000000..306ad1e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Shapes/qmldir @@ -0,0 +1,4 @@ +module QtQuick.Shapes +plugin qmlshapesplugin +classname QmlShapesPlugin +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/libqtquicktemplates2plugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/libqtquicktemplates2plugin.so new file mode 100755 index 0000000..359be4e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/libqtquicktemplates2plugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/plugins.qmltypes new file mode 100644 index 0000000..42c04c8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/plugins.qmltypes @@ -0,0 +1,3122 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.Templates 2.15' + +Module { + dependencies: ["QtQuick 2.9", "QtQuick.Window 2.2"] + Component { + name: "QQuickAbstractButton" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/AbstractButton 2.0", + "QtQuick.Templates/AbstractButton 2.2", + "QtQuick.Templates/AbstractButton 2.3", + "QtQuick.Templates/AbstractButton 2.4", + "QtQuick.Templates/AbstractButton 2.5" + ] + exportMetaObjectRevisions: [0, 2, 3, 4, 5] + Enum { + name: "Display" + values: { + "IconOnly": 0, + "TextOnly": 1, + "TextBesideIcon": 2, + "TextUnderIcon": 3 + } + } + Property { name: "text"; type: "string" } + Property { name: "down"; type: "bool" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "checked"; type: "bool" } + Property { name: "checkable"; type: "bool" } + Property { name: "autoExclusive"; type: "bool" } + Property { name: "autoRepeat"; type: "bool" } + Property { name: "indicator"; type: "QQuickItem"; isPointer: true } + Property { name: "icon"; revision: 3; type: "QQuickIcon" } + Property { name: "display"; revision: 3; type: "Display" } + Property { name: "action"; revision: 3; type: "QQuickAction"; isPointer: true } + Property { name: "autoRepeatDelay"; revision: 4; type: "int" } + Property { name: "autoRepeatInterval"; revision: 4; type: "int" } + Property { name: "pressX"; revision: 4; type: "double"; isReadonly: true } + Property { name: "pressY"; revision: 4; type: "double"; isReadonly: true } + Property { name: "implicitIndicatorWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitIndicatorHeight"; revision: 5; type: "double"; isReadonly: true } + Signal { name: "pressed" } + Signal { name: "released" } + Signal { name: "canceled" } + Signal { name: "clicked" } + Signal { name: "pressAndHold" } + Signal { name: "doubleClicked" } + Signal { name: "toggled"; revision: 2 } + Signal { name: "iconChanged"; revision: 3 } + Signal { name: "displayChanged"; revision: 3 } + Signal { name: "actionChanged"; revision: 3 } + Signal { name: "autoRepeatDelayChanged"; revision: 4 } + Signal { name: "autoRepeatIntervalChanged"; revision: 4 } + Signal { name: "pressXChanged"; revision: 4 } + Signal { name: "pressYChanged"; revision: 4 } + Signal { name: "implicitIndicatorWidthChanged"; revision: 5 } + Signal { name: "implicitIndicatorHeightChanged"; revision: 5 } + Method { name: "toggle" } + } + Component { + name: "QQuickAction" + prototype: "QObject" + exports: ["QtQuick.Templates/Action 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "text"; type: "string" } + Property { name: "icon"; type: "QQuickIcon" } + Property { name: "enabled"; type: "bool" } + Property { name: "checked"; type: "bool" } + Property { name: "checkable"; type: "bool" } + Property { name: "shortcut"; type: "QVariant" } + Signal { + name: "textChanged" + Parameter { name: "text"; type: "string" } + } + Signal { + name: "iconChanged" + Parameter { name: "icon"; type: "QQuickIcon" } + } + Signal { + name: "enabledChanged" + Parameter { name: "enabled"; type: "bool" } + } + Signal { + name: "checkedChanged" + Parameter { name: "checked"; type: "bool" } + } + Signal { + name: "checkableChanged" + Parameter { name: "checkable"; type: "bool" } + } + Signal { + name: "shortcutChanged" + Parameter { name: "shortcut"; type: "QKeySequence" } + } + Signal { + name: "toggled" + Parameter { name: "source"; type: "QObject"; isPointer: true } + } + Signal { name: "toggled" } + Signal { + name: "triggered" + Parameter { name: "source"; type: "QObject"; isPointer: true } + } + Signal { name: "triggered" } + Method { + name: "toggle" + Parameter { name: "source"; type: "QObject"; isPointer: true } + } + Method { name: "toggle" } + Method { + name: "trigger" + Parameter { name: "source"; type: "QObject"; isPointer: true } + } + Method { name: "trigger" } + } + Component { + name: "QQuickActionGroup" + defaultProperty: "actions" + prototype: "QObject" + exports: ["QtQuick.Templates/ActionGroup 2.3"] + exportMetaObjectRevisions: [0] + attachedType: "QQuickActionGroupAttached" + Property { name: "checkedAction"; type: "QQuickAction"; isPointer: true } + Property { name: "actions"; type: "QQuickAction"; isList: true; isReadonly: true } + Property { name: "exclusive"; type: "bool" } + Property { name: "enabled"; type: "bool" } + Signal { + name: "triggered" + Parameter { name: "action"; type: "QQuickAction"; isPointer: true } + } + Method { + name: "addAction" + Parameter { name: "action"; type: "QQuickAction"; isPointer: true } + } + Method { + name: "removeAction" + Parameter { name: "action"; type: "QQuickAction"; isPointer: true } + } + } + Component { + name: "QQuickActionGroupAttached" + prototype: "QObject" + Property { name: "group"; type: "QQuickActionGroup"; isPointer: true } + } + Component { + name: "QQuickApplicationWindow" + defaultProperty: "contentData" + prototype: "QQuickWindowQmlImpl" + exports: [ + "QtQuick.Templates/ApplicationWindow 2.0", + "QtQuick.Templates/ApplicationWindow 2.3" + ] + exportMetaObjectRevisions: [0, 3] + attachedType: "QQuickApplicationWindowAttached" + Property { name: "background"; type: "QQuickItem"; isPointer: true } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "contentData"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "activeFocusControl"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "header"; type: "QQuickItem"; isPointer: true } + Property { name: "footer"; type: "QQuickItem"; isPointer: true } + Property { name: "overlay"; type: "QQuickOverlay"; isReadonly: true; isPointer: true } + Property { name: "font"; type: "QFont" } + Property { name: "locale"; type: "QLocale" } + Property { name: "palette"; revision: 3; type: "QPalette" } + Property { name: "menuBar"; revision: 3; type: "QQuickItem"; isPointer: true } + Signal { name: "paletteChanged"; revision: 3 } + Signal { name: "menuBarChanged"; revision: 3 } + } + Component { + name: "QQuickApplicationWindowAttached" + prototype: "QObject" + Property { name: "window"; type: "QQuickApplicationWindow"; isReadonly: true; isPointer: true } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "activeFocusControl"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "header"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "footer"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "overlay"; type: "QQuickOverlay"; isReadonly: true; isPointer: true } + Property { name: "menuBar"; type: "QQuickItem"; isReadonly: true; isPointer: true } + } + Component { + name: "QQuickBusyIndicator" + defaultProperty: "data" + prototype: "QQuickControl" + exports: ["QtQuick.Templates/BusyIndicator 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "running"; type: "bool" } + } + Component { + name: "QQuickButton" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: ["QtQuick.Templates/Button 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "highlighted"; type: "bool" } + Property { name: "flat"; type: "bool" } + } + Component { + name: "QQuickButtonGroup" + prototype: "QObject" + exports: [ + "QtQuick.Templates/ButtonGroup 2.0", + "QtQuick.Templates/ButtonGroup 2.1", + "QtQuick.Templates/ButtonGroup 2.3", + "QtQuick.Templates/ButtonGroup 2.4" + ] + exportMetaObjectRevisions: [0, 1, 3, 4] + attachedType: "QQuickButtonGroupAttached" + Property { name: "checkedButton"; type: "QQuickAbstractButton"; isPointer: true } + Property { name: "buttons"; type: "QQuickAbstractButton"; isList: true; isReadonly: true } + Property { name: "exclusive"; revision: 3; type: "bool" } + Property { name: "checkState"; revision: 4; type: "Qt::CheckState" } + Signal { + name: "clicked" + revision: 1 + Parameter { name: "button"; type: "QQuickAbstractButton"; isPointer: true } + } + Signal { name: "exclusiveChanged"; revision: 3 } + Signal { name: "checkStateChanged"; revision: 4 } + Method { + name: "addButton" + Parameter { name: "button"; type: "QQuickAbstractButton"; isPointer: true } + } + Method { + name: "removeButton" + Parameter { name: "button"; type: "QQuickAbstractButton"; isPointer: true } + } + } + Component { + name: "QQuickButtonGroupAttached" + prototype: "QObject" + Property { name: "group"; type: "QQuickButtonGroup"; isPointer: true } + } + Component { + name: "QQuickCheckBox" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: [ + "QtQuick.Templates/CheckBox 2.0", + "QtQuick.Templates/CheckBox 2.4" + ] + exportMetaObjectRevisions: [0, 4] + Property { name: "tristate"; type: "bool" } + Property { name: "checkState"; type: "Qt::CheckState" } + Property { name: "nextCheckState"; revision: 4; type: "QJSValue" } + Signal { name: "nextCheckStateChanged"; revision: 4 } + } + Component { + name: "QQuickCheckDelegate" + defaultProperty: "data" + prototype: "QQuickItemDelegate" + exports: [ + "QtQuick.Templates/CheckDelegate 2.0", + "QtQuick.Templates/CheckDelegate 2.4" + ] + exportMetaObjectRevisions: [0, 4] + Property { name: "tristate"; type: "bool" } + Property { name: "checkState"; type: "Qt::CheckState" } + Property { name: "nextCheckState"; revision: 4; type: "QJSValue" } + Signal { name: "nextCheckStateChanged"; revision: 4 } + } + Component { + name: "QQuickComboBox" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/ComboBox 2.0", + "QtQuick.Templates/ComboBox 2.1", + "QtQuick.Templates/ComboBox 2.14", + "QtQuick.Templates/ComboBox 2.15", + "QtQuick.Templates/ComboBox 2.2", + "QtQuick.Templates/ComboBox 2.5" + ] + exportMetaObjectRevisions: [0, 1, 14, 15, 2, 5] + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "model"; type: "QVariant" } + Property { name: "delegateModel"; type: "QQmlInstanceModel"; isReadonly: true; isPointer: true } + Property { name: "pressed"; type: "bool" } + Property { name: "highlightedIndex"; type: "int"; isReadonly: true } + Property { name: "currentIndex"; type: "int" } + Property { name: "currentText"; type: "string"; isReadonly: true } + Property { name: "displayText"; type: "string" } + Property { name: "textRole"; type: "string" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "indicator"; type: "QQuickItem"; isPointer: true } + Property { name: "popup"; type: "QQuickPopup"; isPointer: true } + Property { name: "flat"; revision: 1; type: "bool" } + Property { name: "down"; revision: 2; type: "bool" } + Property { name: "editable"; revision: 2; type: "bool" } + Property { name: "editText"; revision: 2; type: "string" } + Property { name: "validator"; revision: 2; type: "QValidator"; isPointer: true } + Property { name: "inputMethodHints"; revision: 2; type: "Qt::InputMethodHints" } + Property { name: "inputMethodComposing"; revision: 2; type: "bool"; isReadonly: true } + Property { name: "acceptableInput"; revision: 2; type: "bool"; isReadonly: true } + Property { name: "implicitIndicatorWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitIndicatorHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "currentValue"; revision: 14; type: "QVariant"; isReadonly: true } + Property { name: "valueRole"; revision: 14; type: "string" } + Property { name: "selectTextByMouse"; revision: 15; type: "bool" } + Signal { + name: "activated" + Parameter { name: "index"; type: "int" } + } + Signal { + name: "highlighted" + Parameter { name: "index"; type: "int" } + } + Signal { name: "flatChanged"; revision: 1 } + Signal { name: "accepted"; revision: 2 } + Signal { name: "downChanged"; revision: 2 } + Signal { name: "editableChanged"; revision: 2 } + Signal { name: "editTextChanged"; revision: 2 } + Signal { name: "validatorChanged"; revision: 2 } + Signal { name: "inputMethodHintsChanged"; revision: 2 } + Signal { name: "inputMethodComposingChanged"; revision: 2 } + Signal { name: "acceptableInputChanged"; revision: 2 } + Signal { name: "implicitIndicatorWidthChanged"; revision: 5 } + Signal { name: "implicitIndicatorHeightChanged"; revision: 5 } + Signal { name: "valueRoleChanged"; revision: 14 } + Signal { name: "currentValueChanged"; revision: 14 } + Signal { name: "selectTextByMouseChanged"; revision: 15 } + Method { name: "incrementCurrentIndex" } + Method { name: "decrementCurrentIndex" } + Method { name: "selectAll"; revision: 2 } + Method { + name: "textAt" + type: "string" + Parameter { name: "index"; type: "int" } + } + Method { + name: "find" + type: "int" + Parameter { name: "text"; type: "string" } + Parameter { name: "flags"; type: "Qt::MatchFlags" } + } + Method { + name: "find" + type: "int" + Parameter { name: "text"; type: "string" } + } + Method { + name: "valueAt" + revision: 14 + type: "QVariant" + Parameter { name: "index"; type: "int" } + } + Method { + name: "indexOfValue" + revision: 14 + type: "int" + Parameter { name: "value"; type: "QVariant" } + } + } + Component { + name: "QQuickContainer" + defaultProperty: "contentData" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/Container 2.0", + "QtQuick.Templates/Container 2.1", + "QtQuick.Templates/Container 2.3", + "QtQuick.Templates/Container 2.5" + ] + exportMetaObjectRevisions: [0, 1, 3, 5] + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "contentModel"; type: "QVariant"; isReadonly: true } + Property { name: "contentData"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "contentChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "currentIndex"; type: "int" } + Property { name: "currentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "contentWidth"; revision: 5; type: "double" } + Property { name: "contentHeight"; revision: 5; type: "double" } + Signal { name: "contentWidthChanged"; revision: 5 } + Signal { name: "contentHeightChanged"; revision: 5 } + Method { + name: "setCurrentIndex" + Parameter { name: "index"; type: "int" } + } + Method { name: "incrementCurrentIndex"; revision: 1 } + Method { name: "decrementCurrentIndex"; revision: 1 } + Method { + name: "itemAt" + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "addItem" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "insertItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "moveItem" + Parameter { name: "from"; type: "int" } + Parameter { name: "to"; type: "int" } + } + Method { + name: "removeItem" + Parameter { name: "item"; type: "QVariant" } + } + Method { + name: "takeItem" + revision: 3 + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + } + Component { name: "QQuickContentItem"; defaultProperty: "data"; prototype: "QQuickItem" } + Component { + name: "QQuickControl" + defaultProperty: "data" + prototype: "QQuickItem" + exports: [ + "QtQuick.Templates/Control 2.0", + "QtQuick.Templates/Control 2.3", + "QtQuick.Templates/Control 2.5" + ] + exportMetaObjectRevisions: [0, 3, 5] + Property { name: "font"; type: "QFont" } + Property { name: "availableWidth"; type: "double"; isReadonly: true } + Property { name: "availableHeight"; type: "double"; isReadonly: true } + Property { name: "padding"; type: "double" } + Property { name: "topPadding"; type: "double" } + Property { name: "leftPadding"; type: "double" } + Property { name: "rightPadding"; type: "double" } + Property { name: "bottomPadding"; type: "double" } + Property { name: "spacing"; type: "double" } + Property { name: "locale"; type: "QLocale" } + Property { name: "mirrored"; type: "bool"; isReadonly: true } + Property { name: "focusPolicy"; type: "Qt::FocusPolicy" } + Property { name: "focusReason"; type: "Qt::FocusReason" } + Property { name: "visualFocus"; type: "bool"; isReadonly: true } + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "hoverEnabled"; type: "bool" } + Property { name: "wheelEnabled"; type: "bool" } + Property { name: "background"; type: "QQuickItem"; isPointer: true } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "baselineOffset"; type: "double" } + Property { name: "palette"; revision: 3; type: "QPalette" } + Property { name: "horizontalPadding"; revision: 5; type: "double" } + Property { name: "verticalPadding"; revision: 5; type: "double" } + Property { name: "implicitContentWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitContentHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "topInset"; revision: 5; type: "double" } + Property { name: "leftInset"; revision: 5; type: "double" } + Property { name: "rightInset"; revision: 5; type: "double" } + Property { name: "bottomInset"; revision: 5; type: "double" } + Signal { name: "paletteChanged"; revision: 3 } + Signal { name: "horizontalPaddingChanged"; revision: 5 } + Signal { name: "verticalPaddingChanged"; revision: 5 } + Signal { name: "implicitContentWidthChanged"; revision: 5 } + Signal { name: "implicitContentHeightChanged"; revision: 5 } + Signal { name: "implicitBackgroundWidthChanged"; revision: 5 } + Signal { name: "implicitBackgroundHeightChanged"; revision: 5 } + Signal { name: "topInsetChanged"; revision: 5 } + Signal { name: "leftInsetChanged"; revision: 5 } + Signal { name: "rightInsetChanged"; revision: 5 } + Signal { name: "bottomInsetChanged"; revision: 5 } + } + Component { + name: "QQuickDelayButton" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: ["QtQuick.Templates/DelayButton 2.2"] + exportMetaObjectRevisions: [0] + Property { name: "delay"; type: "int" } + Property { name: "progress"; type: "double" } + Property { name: "transition"; type: "QQuickTransition"; isPointer: true } + Signal { name: "activated" } + } + Component { + name: "QQuickDial" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/Dial 2.0", + "QtQuick.Templates/Dial 2.2", + "QtQuick.Templates/Dial 2.5" + ] + exportMetaObjectRevisions: [0, 2, 5] + Enum { + name: "SnapMode" + values: { + "NoSnap": 0, + "SnapAlways": 1, + "SnapOnRelease": 2 + } + } + Enum { + name: "InputMode" + values: { + "Circular": 0, + "Horizontal": 1, + "Vertical": 2 + } + } + Property { name: "from"; type: "double" } + Property { name: "to"; type: "double" } + Property { name: "value"; type: "double" } + Property { name: "position"; type: "double"; isReadonly: true } + Property { name: "angle"; type: "double"; isReadonly: true } + Property { name: "stepSize"; type: "double" } + Property { name: "snapMode"; type: "SnapMode" } + Property { name: "wrap"; type: "bool" } + Property { name: "pressed"; type: "bool"; isReadonly: true } + Property { name: "handle"; type: "QQuickItem"; isPointer: true } + Property { name: "live"; revision: 2; type: "bool" } + Property { name: "inputMode"; revision: 5; type: "InputMode" } + Signal { name: "moved"; revision: 2 } + Signal { name: "liveChanged"; revision: 2 } + Signal { name: "inputModeChanged"; revision: 5 } + Method { name: "increase" } + Method { name: "decrease" } + } + Component { + name: "QQuickDialog" + defaultProperty: "contentData" + prototype: "QQuickPopup" + exports: [ + "QtQuick.Templates/Dialog 2.1", + "QtQuick.Templates/Dialog 2.3", + "QtQuick.Templates/Dialog 2.5" + ] + exportMetaObjectRevisions: [0, 3, 5] + Enum { + name: "StandardCode" + values: { + "Rejected": 0, + "Accepted": 1 + } + } + Property { name: "title"; type: "string" } + Property { name: "header"; type: "QQuickItem"; isPointer: true } + Property { name: "footer"; type: "QQuickItem"; isPointer: true } + Property { name: "standardButtons"; type: "QPlatformDialogHelper::StandardButtons" } + Property { name: "result"; revision: 3; type: "int" } + Property { name: "implicitHeaderWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitHeaderHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitFooterWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitFooterHeight"; revision: 5; type: "double"; isReadonly: true } + Signal { name: "accepted" } + Signal { name: "rejected" } + Signal { name: "applied"; revision: 3 } + Signal { name: "reset"; revision: 3 } + Signal { name: "discarded"; revision: 3 } + Signal { name: "helpRequested"; revision: 3 } + Signal { name: "resultChanged"; revision: 3 } + Method { name: "accept" } + Method { name: "reject" } + Method { + name: "done" + Parameter { name: "result"; type: "int" } + } + Method { + name: "standardButton" + revision: 3 + type: "QQuickAbstractButton*" + Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } + } + } + Component { + name: "QQuickDialogButtonBox" + defaultProperty: "contentData" + prototype: "QQuickContainer" + exports: [ + "QtQuick.Templates/DialogButtonBox 2.1", + "QtQuick.Templates/DialogButtonBox 2.3", + "QtQuick.Templates/DialogButtonBox 2.5" + ] + exportMetaObjectRevisions: [0, 3, 5] + attachedType: "QQuickDialogButtonBoxAttached" + Enum { + name: "Position" + values: { + "Header": 0, + "Footer": 1 + } + } + Property { name: "position"; type: "Position" } + Property { name: "alignment"; type: "Qt::Alignment" } + Property { name: "standardButtons"; type: "QPlatformDialogHelper::StandardButtons" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "buttonLayout"; revision: 5; type: "QPlatformDialogHelper::ButtonLayout" } + Signal { name: "accepted" } + Signal { name: "rejected" } + Signal { name: "helpRequested" } + Signal { + name: "clicked" + Parameter { name: "button"; type: "QQuickAbstractButton"; isPointer: true } + } + Signal { name: "applied"; revision: 3 } + Signal { name: "reset"; revision: 3 } + Signal { name: "discarded"; revision: 3 } + Signal { name: "buttonLayoutChanged"; revision: 5 } + Method { + name: "standardButton" + type: "QQuickAbstractButton*" + Parameter { name: "button"; type: "QPlatformDialogHelper::StandardButton" } + } + } + Component { + name: "QQuickDialogButtonBoxAttached" + prototype: "QObject" + Property { name: "buttonBox"; type: "QQuickDialogButtonBox"; isReadonly: true; isPointer: true } + Property { name: "buttonRole"; type: "QPlatformDialogHelper::ButtonRole" } + } + Component { + name: "QQuickDrawer" + defaultProperty: "contentData" + prototype: "QQuickPopup" + exports: [ + "QtQuick.Templates/Drawer 2.0", + "QtQuick.Templates/Drawer 2.2" + ] + exportMetaObjectRevisions: [0, 2] + Property { name: "edge"; type: "Qt::Edge" } + Property { name: "position"; type: "double" } + Property { name: "dragMargin"; type: "double" } + Property { name: "interactive"; revision: 2; type: "bool" } + Signal { name: "interactiveChanged"; revision: 2 } + } + Component { + name: "QQuickFrame" + defaultProperty: "contentData" + prototype: "QQuickPane" + exports: ["QtQuick.Templates/Frame 2.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickGroupBox" + defaultProperty: "contentData" + prototype: "QQuickFrame" + exports: [ + "QtQuick.Templates/GroupBox 2.0", + "QtQuick.Templates/GroupBox 2.5" + ] + exportMetaObjectRevisions: [0, 5] + Property { name: "title"; type: "string" } + Property { name: "label"; type: "QQuickItem"; isPointer: true } + Property { name: "implicitLabelWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitLabelHeight"; revision: 5; type: "double"; isReadonly: true } + Signal { name: "implicitLabelWidthChanged"; revision: 5 } + Signal { name: "implicitLabelHeightChanged"; revision: 5 } + } + Component { + name: "QQuickHeaderViewBase" + defaultProperty: "flickableData" + prototype: "QQuickTableView" + Property { name: "textRole"; type: "string" } + } + Component { + name: "QQuickHorizontalHeaderView" + defaultProperty: "flickableData" + prototype: "QQuickHeaderViewBase" + exports: ["QtQuick.Templates/HorizontalHeaderView 2.15"] + exportMetaObjectRevisions: [0] + attachedType: "QQuickTableViewAttached" + } + Component { + name: "QQuickIcon" + Property { name: "name"; type: "string" } + Property { name: "source"; type: "QUrl" } + Property { name: "width"; type: "int" } + Property { name: "height"; type: "int" } + Property { name: "color"; type: "QColor" } + Property { name: "cache"; type: "bool" } + } + Component { + name: "QQuickImplicitSizeItem" + defaultProperty: "data" + prototype: "QQuickItem" + Property { name: "implicitWidth"; type: "double"; isReadonly: true } + Property { name: "implicitHeight"; type: "double"; isReadonly: true } + } + Component { + name: "QQuickItem" + defaultProperty: "data" + prototype: "QObject" + Enum { + name: "Flags" + values: { + "ItemClipsChildrenToShape": 1, + "ItemAcceptsInputMethod": 2, + "ItemIsFocusScope": 4, + "ItemHasContents": 8, + "ItemAcceptsDrops": 16 + } + } + Enum { + name: "TransformOrigin" + values: { + "TopLeft": 0, + "Top": 1, + "TopRight": 2, + "Left": 3, + "Center": 4, + "Right": 5, + "BottomLeft": 6, + "Bottom": 7, + "BottomRight": 8 + } + } + Property { name: "parent"; type: "QQuickItem"; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "resources"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "children"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "z"; type: "double" } + Property { name: "width"; type: "double" } + Property { name: "height"; type: "double" } + Property { name: "opacity"; type: "double" } + Property { name: "enabled"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "visibleChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "states"; type: "QQuickState"; isList: true; isReadonly: true } + Property { name: "transitions"; type: "QQuickTransition"; isList: true; isReadonly: true } + Property { name: "state"; type: "string" } + Property { name: "childrenRect"; type: "QRectF"; isReadonly: true } + Property { name: "anchors"; type: "QQuickAnchors"; isReadonly: true; isPointer: true } + Property { name: "left"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "right"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "horizontalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "top"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "bottom"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "verticalCenter"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baseline"; type: "QQuickAnchorLine"; isReadonly: true } + Property { name: "baselineOffset"; type: "double" } + Property { name: "clip"; type: "bool" } + Property { name: "focus"; type: "bool" } + Property { name: "activeFocus"; type: "bool"; isReadonly: true } + Property { name: "activeFocusOnTab"; revision: 1; type: "bool" } + Property { name: "rotation"; type: "double" } + Property { name: "scale"; type: "double" } + Property { name: "transformOrigin"; type: "TransformOrigin" } + Property { name: "transformOriginPoint"; type: "QPointF"; isReadonly: true } + Property { name: "transform"; type: "QQuickTransform"; isList: true; isReadonly: true } + Property { name: "smooth"; type: "bool" } + Property { name: "antialiasing"; type: "bool" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "containmentMask"; revision: 11; type: "QObject"; isPointer: true } + Property { name: "layer"; type: "QQuickItemLayer"; isReadonly: true; isPointer: true } + Signal { + name: "childrenRectChanged" + Parameter { type: "QRectF" } + } + Signal { + name: "baselineOffsetChanged" + Parameter { type: "double" } + } + Signal { + name: "stateChanged" + Parameter { type: "string" } + } + Signal { + name: "focusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusChanged" + Parameter { type: "bool" } + } + Signal { + name: "activeFocusOnTabChanged" + revision: 1 + Parameter { type: "bool" } + } + Signal { + name: "parentChanged" + Parameter { type: "QQuickItem"; isPointer: true } + } + Signal { + name: "transformOriginChanged" + Parameter { type: "TransformOrigin" } + } + Signal { + name: "smoothChanged" + Parameter { type: "bool" } + } + Signal { + name: "antialiasingChanged" + Parameter { type: "bool" } + } + Signal { + name: "clipChanged" + Parameter { type: "bool" } + } + Signal { + name: "windowChanged" + revision: 1 + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Signal { name: "containmentMaskChanged"; revision: 11 } + Method { name: "update" } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + Parameter { name: "targetSize"; type: "QSize" } + } + Method { + name: "grabToImage" + revision: 4 + type: "bool" + Parameter { name: "callback"; type: "QJSValue" } + } + Method { + name: "contains" + type: "bool" + Parameter { name: "point"; type: "QPointF" } + } + Method { + name: "mapFromItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToItem" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapFromGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "mapToGlobal" + revision: 7 + Parameter { type: "QQmlV4Function"; isPointer: true } + } + Method { name: "forceActiveFocus" } + Method { + name: "forceActiveFocus" + Parameter { name: "reason"; type: "Qt::FocusReason" } + } + Method { + name: "nextItemInFocusChain" + revision: 1 + type: "QQuickItem*" + Parameter { name: "forward"; type: "bool" } + } + Method { name: "nextItemInFocusChain"; revision: 1; type: "QQuickItem*" } + Method { + name: "childAt" + type: "QQuickItem*" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + name: "QQuickItemDelegate" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: ["QtQuick.Templates/ItemDelegate 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "highlighted"; type: "bool" } + } + Component { + name: "QQuickLabel" + defaultProperty: "data" + prototype: "QQuickText" + exports: [ + "QtQuick.Templates/Label 2.0", + "QtQuick.Templates/Label 2.3", + "QtQuick.Templates/Label 2.5" + ] + exportMetaObjectRevisions: [0, 3, 5] + Property { name: "font"; type: "QFont" } + Property { name: "background"; type: "QQuickItem"; isPointer: true } + Property { name: "palette"; revision: 3; type: "QPalette" } + Property { name: "implicitBackgroundWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "topInset"; revision: 5; type: "double" } + Property { name: "leftInset"; revision: 5; type: "double" } + Property { name: "rightInset"; revision: 5; type: "double" } + Property { name: "bottomInset"; revision: 5; type: "double" } + Signal { name: "paletteChanged"; revision: 3 } + Signal { name: "implicitBackgroundWidthChanged"; revision: 5 } + Signal { name: "implicitBackgroundHeightChanged"; revision: 5 } + Signal { name: "topInsetChanged"; revision: 5 } + Signal { name: "leftInsetChanged"; revision: 5 } + Signal { name: "rightInsetChanged"; revision: 5 } + Signal { name: "bottomInsetChanged"; revision: 5 } + } + Component { + name: "QQuickMenu" + defaultProperty: "contentData" + prototype: "QQuickPopup" + exports: ["QtQuick.Templates/Menu 2.0", "QtQuick.Templates/Menu 2.3"] + exportMetaObjectRevisions: [0, 3] + Property { name: "contentModel"; type: "QVariant"; isReadonly: true } + Property { name: "contentData"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "title"; type: "string" } + Property { name: "count"; revision: 3; type: "int"; isReadonly: true } + Property { name: "cascade"; revision: 3; type: "bool" } + Property { name: "overlap"; revision: 3; type: "double" } + Property { name: "delegate"; revision: 3; type: "QQmlComponent"; isPointer: true } + Property { name: "currentIndex"; revision: 3; type: "int" } + Signal { + name: "titleChanged" + Parameter { name: "title"; type: "string" } + } + Signal { name: "countChanged"; revision: 3 } + Signal { + name: "cascadeChanged" + revision: 3 + Parameter { name: "cascade"; type: "bool" } + } + Signal { name: "overlapChanged"; revision: 3 } + Signal { name: "delegateChanged"; revision: 3 } + Signal { name: "currentIndexChanged"; revision: 3 } + Method { + name: "itemAt" + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "addItem" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "insertItem" + Parameter { name: "index"; type: "int" } + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "moveItem" + Parameter { name: "from"; type: "int" } + Parameter { name: "to"; type: "int" } + } + Method { + name: "removeItem" + Parameter { name: "item"; type: "QVariant" } + } + Method { + name: "takeItem" + revision: 3 + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "menuAt" + revision: 3 + type: "QQuickMenu*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "addMenu" + revision: 3 + Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } + } + Method { + name: "insertMenu" + revision: 3 + Parameter { name: "index"; type: "int" } + Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } + } + Method { + name: "removeMenu" + revision: 3 + Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } + } + Method { + name: "takeMenu" + revision: 3 + type: "QQuickMenu*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "actionAt" + revision: 3 + type: "QQuickAction*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "addAction" + revision: 3 + Parameter { name: "action"; type: "QQuickAction"; isPointer: true } + } + Method { + name: "insertAction" + revision: 3 + Parameter { name: "index"; type: "int" } + Parameter { name: "action"; type: "QQuickAction"; isPointer: true } + } + Method { + name: "removeAction" + revision: 3 + Parameter { name: "action"; type: "QQuickAction"; isPointer: true } + } + Method { + name: "takeAction" + revision: 3 + type: "QQuickAction*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "popup" + revision: 3 + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { name: "dismiss"; revision: 3 } + } + Component { + name: "QQuickMenuBar" + defaultProperty: "contentData" + prototype: "QQuickContainer" + exports: ["QtQuick.Templates/MenuBar 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "contentWidth"; type: "double" } + Property { name: "contentHeight"; type: "double" } + Property { name: "menus"; type: "QQuickMenu"; isList: true; isReadonly: true } + Property { name: "contentData"; type: "QObject"; isList: true; isReadonly: true } + Method { + name: "menuAt" + type: "QQuickMenu*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "addMenu" + Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } + } + Method { + name: "insertMenu" + Parameter { name: "index"; type: "int" } + Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } + } + Method { + name: "removeMenu" + Parameter { name: "menu"; type: "QQuickMenu"; isPointer: true } + } + Method { + name: "takeMenu" + type: "QQuickMenu*" + Parameter { name: "index"; type: "int" } + } + } + Component { + name: "QQuickMenuBarItem" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: ["QtQuick.Templates/MenuBarItem 2.3"] + exportMetaObjectRevisions: [0] + Property { name: "menuBar"; type: "QQuickMenuBar"; isReadonly: true; isPointer: true } + Property { name: "menu"; type: "QQuickMenu"; isPointer: true } + Property { name: "highlighted"; type: "bool" } + Signal { name: "triggered" } + } + Component { + name: "QQuickMenuItem" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: [ + "QtQuick.Templates/MenuItem 2.0", + "QtQuick.Templates/MenuItem 2.3" + ] + exportMetaObjectRevisions: [0, 3] + Property { name: "highlighted"; type: "bool" } + Property { name: "arrow"; revision: 3; type: "QQuickItem"; isPointer: true } + Property { name: "menu"; revision: 3; type: "QQuickMenu"; isReadonly: true; isPointer: true } + Property { name: "subMenu"; revision: 3; type: "QQuickMenu"; isReadonly: true; isPointer: true } + Signal { name: "triggered" } + Signal { name: "arrowChanged"; revision: 3 } + Signal { name: "menuChanged"; revision: 3 } + Signal { name: "subMenuChanged"; revision: 3 } + } + Component { + name: "QQuickMenuSeparator" + defaultProperty: "data" + prototype: "QQuickControl" + exports: ["QtQuick.Templates/MenuSeparator 2.1"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickOverlay" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick.Templates/Overlay 2.3"] + isCreatable: false + exportMetaObjectRevisions: [0] + attachedType: "QQuickOverlayAttached" + Property { name: "modal"; type: "QQmlComponent"; isPointer: true } + Property { name: "modeless"; type: "QQmlComponent"; isPointer: true } + Signal { name: "pressed" } + Signal { name: "released" } + } + Component { + name: "QQuickOverlayAttached" + prototype: "QObject" + Property { name: "overlay"; type: "QQuickOverlay"; isReadonly: true; isPointer: true } + Property { name: "modal"; type: "QQmlComponent"; isPointer: true } + Property { name: "modeless"; type: "QQmlComponent"; isPointer: true } + Signal { name: "pressed" } + Signal { name: "released" } + } + Component { + name: "QQuickPage" + defaultProperty: "contentData" + prototype: "QQuickPane" + exports: [ + "QtQuick.Templates/Page 2.0", + "QtQuick.Templates/Page 2.1", + "QtQuick.Templates/Page 2.5" + ] + exportMetaObjectRevisions: [0, 1, 5] + Property { name: "title"; type: "string" } + Property { name: "header"; type: "QQuickItem"; isPointer: true } + Property { name: "footer"; type: "QQuickItem"; isPointer: true } + Property { name: "contentWidth"; revision: 1; type: "double" } + Property { name: "contentHeight"; revision: 1; type: "double" } + Property { name: "implicitHeaderWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitHeaderHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitFooterWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitFooterHeight"; revision: 5; type: "double"; isReadonly: true } + } + Component { + name: "QQuickPageIndicator" + defaultProperty: "data" + prototype: "QQuickControl" + exports: ["QtQuick.Templates/PageIndicator 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "count"; type: "int" } + Property { name: "currentIndex"; type: "int" } + Property { name: "interactive"; type: "bool" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + } + Component { + name: "QQuickPane" + defaultProperty: "contentData" + prototype: "QQuickControl" + exports: ["QtQuick.Templates/Pane 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "contentWidth"; type: "double" } + Property { name: "contentHeight"; type: "double" } + Property { name: "contentData"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "contentChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + } + Component { + name: "QQuickPopup" + defaultProperty: "contentData" + prototype: "QObject" + exports: [ + "QtQuick.Templates/Popup 2.0", + "QtQuick.Templates/Popup 2.1", + "QtQuick.Templates/Popup 2.3", + "QtQuick.Templates/Popup 2.5" + ] + exportMetaObjectRevisions: [0, 1, 3, 5] + Enum { + name: "ClosePolicy" + values: { + "NoAutoClose": 0, + "CloseOnPressOutside": 1, + "CloseOnPressOutsideParent": 2, + "CloseOnReleaseOutside": 4, + "CloseOnReleaseOutsideParent": 8, + "CloseOnEscape": 16 + } + } + Enum { + name: "TransformOrigin" + values: { + "TopLeft": 0, + "Top": 1, + "TopRight": 2, + "Left": 3, + "Center": 4, + "Right": 5, + "BottomLeft": 6, + "Bottom": 7, + "BottomRight": 8 + } + } + Property { name: "x"; type: "double" } + Property { name: "y"; type: "double" } + Property { name: "z"; type: "double" } + Property { name: "width"; type: "double" } + Property { name: "height"; type: "double" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "contentWidth"; type: "double" } + Property { name: "contentHeight"; type: "double" } + Property { name: "availableWidth"; type: "double"; isReadonly: true } + Property { name: "availableHeight"; type: "double"; isReadonly: true } + Property { name: "margins"; type: "double" } + Property { name: "topMargin"; type: "double" } + Property { name: "leftMargin"; type: "double" } + Property { name: "rightMargin"; type: "double" } + Property { name: "bottomMargin"; type: "double" } + Property { name: "padding"; type: "double" } + Property { name: "topPadding"; type: "double" } + Property { name: "leftPadding"; type: "double" } + Property { name: "rightPadding"; type: "double" } + Property { name: "bottomPadding"; type: "double" } + Property { name: "locale"; type: "QLocale" } + Property { name: "font"; type: "QFont" } + Property { name: "parent"; type: "QQuickItem"; isPointer: true } + Property { name: "background"; type: "QQuickItem"; isPointer: true } + Property { name: "contentItem"; type: "QQuickItem"; isPointer: true } + Property { name: "contentData"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "contentChildren"; type: "QQuickItem"; isList: true; isReadonly: true } + Property { name: "clip"; type: "bool" } + Property { name: "focus"; type: "bool" } + Property { name: "activeFocus"; type: "bool"; isReadonly: true } + Property { name: "modal"; type: "bool" } + Property { name: "dim"; type: "bool" } + Property { name: "visible"; type: "bool" } + Property { name: "opacity"; type: "double" } + Property { name: "scale"; type: "double" } + Property { name: "closePolicy"; type: "ClosePolicy" } + Property { name: "transformOrigin"; type: "TransformOrigin" } + Property { name: "enter"; type: "QQuickTransition"; isPointer: true } + Property { name: "exit"; type: "QQuickTransition"; isPointer: true } + Property { name: "spacing"; revision: 1; type: "double" } + Property { name: "opened"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "mirrored"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "enabled"; revision: 3; type: "bool" } + Property { name: "palette"; revision: 3; type: "QPalette" } + Property { name: "horizontalPadding"; type: "double" } + Property { name: "verticalPadding"; type: "double" } + Property { + name: "anchors" + revision: 5 + type: "QQuickPopupAnchors" + isReadonly: true + isPointer: true + } + Property { name: "implicitContentWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitContentHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "topInset"; revision: 5; type: "double" } + Property { name: "leftInset"; revision: 5; type: "double" } + Property { name: "rightInset"; revision: 5; type: "double" } + Property { name: "bottomInset"; revision: 5; type: "double" } + Signal { name: "opened" } + Signal { name: "closed" } + Signal { name: "aboutToShow" } + Signal { name: "aboutToHide" } + Signal { + name: "windowChanged" + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Signal { name: "spacingChanged"; revision: 1 } + Signal { name: "openedChanged"; revision: 3 } + Signal { name: "mirroredChanged"; revision: 3 } + Signal { name: "enabledChanged"; revision: 3 } + Signal { name: "paletteChanged"; revision: 3 } + Signal { name: "horizontalPaddingChanged"; revision: 5 } + Signal { name: "verticalPaddingChanged"; revision: 5 } + Signal { name: "implicitContentWidthChanged"; revision: 5 } + Signal { name: "implicitContentHeightChanged"; revision: 5 } + Signal { name: "implicitBackgroundWidthChanged"; revision: 5 } + Signal { name: "implicitBackgroundHeightChanged"; revision: 5 } + Signal { name: "topInsetChanged"; revision: 5 } + Signal { name: "leftInsetChanged"; revision: 5 } + Signal { name: "rightInsetChanged"; revision: 5 } + Signal { name: "bottomInsetChanged"; revision: 5 } + Method { name: "open" } + Method { name: "close" } + Method { + name: "forceActiveFocus" + Parameter { name: "reason"; type: "Qt::FocusReason" } + } + Method { name: "forceActiveFocus" } + } + Component { + name: "QQuickPopupAnchors" + prototype: "QObject" + Property { name: "centerIn"; type: "QQuickItem"; isPointer: true } + } + Component { + name: "QQuickProgressBar" + defaultProperty: "data" + prototype: "QQuickControl" + exports: ["QtQuick.Templates/ProgressBar 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "from"; type: "double" } + Property { name: "to"; type: "double" } + Property { name: "value"; type: "double" } + Property { name: "position"; type: "double"; isReadonly: true } + Property { name: "visualPosition"; type: "double"; isReadonly: true } + Property { name: "indeterminate"; type: "bool" } + } + Component { + name: "QQuickRadioButton" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: ["QtQuick.Templates/RadioButton 2.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickRadioDelegate" + defaultProperty: "data" + prototype: "QQuickItemDelegate" + exports: ["QtQuick.Templates/RadioDelegate 2.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickRangeSlider" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/RangeSlider 2.0", + "QtQuick.Templates/RangeSlider 2.1", + "QtQuick.Templates/RangeSlider 2.2", + "QtQuick.Templates/RangeSlider 2.3", + "QtQuick.Templates/RangeSlider 2.5" + ] + exportMetaObjectRevisions: [0, 1, 2, 3, 5] + Enum { + name: "SnapMode" + values: { + "NoSnap": 0, + "SnapAlways": 1, + "SnapOnRelease": 2 + } + } + Property { name: "from"; type: "double" } + Property { name: "to"; type: "double" } + Property { name: "first"; type: "QQuickRangeSliderNode"; isReadonly: true; isPointer: true } + Property { name: "second"; type: "QQuickRangeSliderNode"; isReadonly: true; isPointer: true } + Property { name: "stepSize"; type: "double" } + Property { name: "snapMode"; type: "SnapMode" } + Property { name: "orientation"; type: "Qt::Orientation" } + Property { name: "live"; revision: 2; type: "bool" } + Property { name: "horizontal"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "vertical"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "touchDragThreshold"; revision: 5; type: "double" } + Signal { name: "liveChanged"; revision: 2 } + Signal { name: "touchDragThresholdChanged"; revision: 5 } + Method { + name: "setValues" + Parameter { name: "firstValue"; type: "double" } + Parameter { name: "secondValue"; type: "double" } + } + Method { + name: "valueAt" + revision: 5 + type: "double" + Parameter { name: "position"; type: "double" } + } + } + Component { + name: "QQuickRangeSliderNode" + prototype: "QObject" + Property { name: "value"; type: "double" } + Property { name: "position"; type: "double"; isReadonly: true } + Property { name: "visualPosition"; type: "double"; isReadonly: true } + Property { name: "handle"; type: "QQuickItem"; isPointer: true } + Property { name: "pressed"; type: "bool" } + Property { name: "hovered"; revision: 1; type: "bool" } + Property { name: "implicitHandleWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitHandleHeight"; revision: 5; type: "double"; isReadonly: true } + Signal { name: "hoveredChanged"; revision: 1 } + Signal { name: "moved" } + Method { name: "increase" } + Method { name: "decrease" } + } + Component { + name: "QQuickRoundButton" + defaultProperty: "data" + prototype: "QQuickButton" + exports: ["QtQuick.Templates/RoundButton 2.1"] + exportMetaObjectRevisions: [0] + Property { name: "radius"; type: "double" } + } + Component { + name: "QQuickScrollBar" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/ScrollBar 2.0", + "QtQuick.Templates/ScrollBar 2.2", + "QtQuick.Templates/ScrollBar 2.3", + "QtQuick.Templates/ScrollBar 2.4" + ] + exportMetaObjectRevisions: [0, 2, 3, 4] + attachedType: "QQuickScrollBarAttached" + Enum { + name: "SnapMode" + values: { + "NoSnap": 0, + "SnapAlways": 1, + "SnapOnRelease": 2 + } + } + Enum { + name: "Policy" + values: { + "AsNeeded": 0, + "AlwaysOff": 1, + "AlwaysOn": 2 + } + } + Property { name: "size"; type: "double" } + Property { name: "position"; type: "double" } + Property { name: "stepSize"; type: "double" } + Property { name: "active"; type: "bool" } + Property { name: "pressed"; type: "bool" } + Property { name: "orientation"; type: "Qt::Orientation" } + Property { name: "snapMode"; revision: 2; type: "SnapMode" } + Property { name: "interactive"; revision: 2; type: "bool" } + Property { name: "policy"; revision: 2; type: "Policy" } + Property { name: "horizontal"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "vertical"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "minimumSize"; revision: 4; type: "double" } + Property { name: "visualSize"; revision: 4; type: "double"; isReadonly: true } + Property { name: "visualPosition"; revision: 4; type: "double"; isReadonly: true } + Signal { name: "snapModeChanged"; revision: 2 } + Signal { name: "interactiveChanged"; revision: 2 } + Signal { name: "policyChanged"; revision: 2 } + Signal { name: "minimumSizeChanged"; revision: 4 } + Signal { name: "visualSizeChanged"; revision: 4 } + Signal { name: "visualPositionChanged"; revision: 4 } + Method { name: "increase" } + Method { name: "decrease" } + Method { + name: "setSize" + Parameter { name: "size"; type: "double" } + } + Method { + name: "setPosition" + Parameter { name: "position"; type: "double" } + } + } + Component { + name: "QQuickScrollBarAttached" + prototype: "QObject" + Property { name: "horizontal"; type: "QQuickScrollBar"; isPointer: true } + Property { name: "vertical"; type: "QQuickScrollBar"; isPointer: true } + } + Component { + name: "QQuickScrollIndicator" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/ScrollIndicator 2.0", + "QtQuick.Templates/ScrollIndicator 2.3", + "QtQuick.Templates/ScrollIndicator 2.4" + ] + exportMetaObjectRevisions: [0, 3, 4] + attachedType: "QQuickScrollIndicatorAttached" + Property { name: "size"; type: "double" } + Property { name: "position"; type: "double" } + Property { name: "active"; type: "bool" } + Property { name: "orientation"; type: "Qt::Orientation" } + Property { name: "horizontal"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "vertical"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "minimumSize"; revision: 4; type: "double" } + Property { name: "visualSize"; revision: 4; type: "double"; isReadonly: true } + Property { name: "visualPosition"; revision: 4; type: "double"; isReadonly: true } + Signal { name: "minimumSizeChanged"; revision: 4 } + Signal { name: "visualSizeChanged"; revision: 4 } + Signal { name: "visualPositionChanged"; revision: 4 } + Method { + name: "setSize" + Parameter { name: "size"; type: "double" } + } + Method { + name: "setPosition" + Parameter { name: "position"; type: "double" } + } + } + Component { + name: "QQuickScrollIndicatorAttached" + prototype: "QObject" + Property { name: "horizontal"; type: "QQuickScrollIndicator"; isPointer: true } + Property { name: "vertical"; type: "QQuickScrollIndicator"; isPointer: true } + } + Component { + name: "QQuickScrollView" + defaultProperty: "contentData" + prototype: "QQuickPane" + exports: ["QtQuick.Templates/ScrollView 2.2"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickSlider" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/Slider 2.0", + "QtQuick.Templates/Slider 2.1", + "QtQuick.Templates/Slider 2.2", + "QtQuick.Templates/Slider 2.3", + "QtQuick.Templates/Slider 2.5" + ] + exportMetaObjectRevisions: [0, 1, 2, 3, 5] + Enum { + name: "SnapMode" + values: { + "NoSnap": 0, + "SnapAlways": 1, + "SnapOnRelease": 2 + } + } + Property { name: "from"; type: "double" } + Property { name: "to"; type: "double" } + Property { name: "value"; type: "double" } + Property { name: "position"; type: "double"; isReadonly: true } + Property { name: "visualPosition"; type: "double"; isReadonly: true } + Property { name: "stepSize"; type: "double" } + Property { name: "snapMode"; type: "SnapMode" } + Property { name: "pressed"; type: "bool" } + Property { name: "orientation"; type: "Qt::Orientation" } + Property { name: "handle"; type: "QQuickItem"; isPointer: true } + Property { name: "live"; revision: 2; type: "bool" } + Property { name: "horizontal"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "vertical"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "touchDragThreshold"; revision: 5; type: "double" } + Property { name: "implicitHandleWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitHandleHeight"; revision: 5; type: "double"; isReadonly: true } + Signal { name: "moved"; revision: 2 } + Signal { name: "liveChanged"; revision: 2 } + Signal { name: "touchDragThresholdChanged"; revision: 5 } + Signal { name: "implicitHandleWidthChanged"; revision: 5 } + Signal { name: "implicitHandleHeightChanged"; revision: 5 } + Method { name: "increase" } + Method { name: "decrease" } + Method { + name: "valueAt" + revision: 1 + type: "double" + Parameter { name: "position"; type: "double" } + } + } + Component { + name: "QQuickSpinBox" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/SpinBox 2.0", + "QtQuick.Templates/SpinBox 2.1", + "QtQuick.Templates/SpinBox 2.2", + "QtQuick.Templates/SpinBox 2.3", + "QtQuick.Templates/SpinBox 2.4", + "QtQuick.Templates/SpinBox 2.5" + ] + exportMetaObjectRevisions: [0, 1, 2, 3, 4, 5] + Property { name: "from"; type: "int" } + Property { name: "to"; type: "int" } + Property { name: "value"; type: "int" } + Property { name: "stepSize"; type: "int" } + Property { name: "editable"; type: "bool" } + Property { name: "validator"; type: "QValidator"; isPointer: true } + Property { name: "textFromValue"; type: "QJSValue" } + Property { name: "valueFromText"; type: "QJSValue" } + Property { name: "up"; type: "QQuickSpinButton"; isReadonly: true; isPointer: true } + Property { name: "down"; type: "QQuickSpinButton"; isReadonly: true; isPointer: true } + Property { name: "inputMethodHints"; revision: 2; type: "Qt::InputMethodHints" } + Property { name: "inputMethodComposing"; revision: 2; type: "bool"; isReadonly: true } + Property { name: "wrap"; revision: 3; type: "bool" } + Property { name: "displayText"; revision: 4; type: "string"; isReadonly: true } + Signal { name: "valueModified"; revision: 2 } + Signal { name: "inputMethodHintsChanged"; revision: 2 } + Signal { name: "inputMethodComposingChanged"; revision: 2 } + Signal { name: "wrapChanged"; revision: 3 } + Signal { name: "displayTextChanged"; revision: 4 } + Method { name: "increase" } + Method { name: "decrease" } + } + Component { + name: "QQuickSpinButton" + prototype: "QObject" + Property { name: "pressed"; type: "bool" } + Property { name: "indicator"; type: "QQuickItem"; isPointer: true } + Property { name: "hovered"; revision: 1; type: "bool" } + Property { name: "implicitIndicatorWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitIndicatorHeight"; revision: 5; type: "double"; isReadonly: true } + Signal { name: "hoveredChanged"; revision: 1 } + Signal { name: "implicitIndicatorWidthChanged"; revision: 5 } + Signal { name: "implicitIndicatorHeightChanged"; revision: 5 } + } + Component { + name: "QQuickSplitHandleAttached" + prototype: "QObject" + exports: ["QtQuick.Templates/SplitHandle 2.13"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "hovered"; type: "bool"; isReadonly: true } + Property { name: "pressed"; type: "bool"; isReadonly: true } + } + Component { + name: "QQuickSplitView" + defaultProperty: "contentData" + prototype: "QQuickContainer" + exports: ["QtQuick.Templates/SplitView 2.13"] + exportMetaObjectRevisions: [0] + attachedType: "QQuickSplitViewAttached" + Property { name: "orientation"; type: "Qt::Orientation" } + Property { name: "resizing"; type: "bool"; isReadonly: true } + Property { name: "handle"; type: "QQmlComponent"; isPointer: true } + Method { name: "saveState"; type: "QVariant" } + Method { + name: "restoreState" + type: "bool" + Parameter { name: "state"; type: "QVariant" } + } + } + Component { + name: "QQuickSplitViewAttached" + prototype: "QObject" + Property { name: "view"; type: "QQuickSplitView"; isReadonly: true; isPointer: true } + Property { name: "minimumWidth"; type: "double" } + Property { name: "minimumHeight"; type: "double" } + Property { name: "preferredWidth"; type: "double" } + Property { name: "preferredHeight"; type: "double" } + Property { name: "maximumWidth"; type: "double" } + Property { name: "maximumHeight"; type: "double" } + Property { name: "fillHeight"; type: "bool" } + Property { name: "fillWidth"; type: "bool" } + } + Component { + name: "QQuickStackView" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/StackView 2.0", + "QtQuick.Templates/StackView 2.1" + ] + exportMetaObjectRevisions: [0, 1] + attachedType: "QQuickStackViewAttached" + Enum { + name: "Status" + values: { + "Inactive": 0, + "Deactivating": 1, + "Activating": 2, + "Active": 3 + } + } + Enum { + name: "LoadBehavior" + values: { + "DontLoad": 0, + "ForceLoad": 1 + } + } + Enum { + name: "Operation" + values: { + "Transition": -1, + "Immediate": 0, + "PushTransition": 1, + "ReplaceTransition": 2, + "PopTransition": 3 + } + } + Property { name: "busy"; type: "bool"; isReadonly: true } + Property { name: "depth"; type: "int"; isReadonly: true } + Property { name: "currentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "initialItem"; type: "QJSValue" } + Property { name: "popEnter"; type: "QQuickTransition"; isPointer: true } + Property { name: "popExit"; type: "QQuickTransition"; isPointer: true } + Property { name: "pushEnter"; type: "QQuickTransition"; isPointer: true } + Property { name: "pushExit"; type: "QQuickTransition"; isPointer: true } + Property { name: "replaceEnter"; type: "QQuickTransition"; isPointer: true } + Property { name: "replaceExit"; type: "QQuickTransition"; isPointer: true } + Property { name: "empty"; revision: 3; type: "bool"; isReadonly: true } + Signal { name: "emptyChanged"; revision: 3 } + Method { + name: "clear" + Parameter { name: "operation"; type: "Operation" } + } + Method { name: "clear" } + Method { + name: "get" + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + Parameter { name: "behavior"; type: "LoadBehavior" } + } + Method { + name: "get" + type: "QQuickItem*" + Parameter { name: "index"; type: "int" } + } + Method { + name: "find" + type: "QQuickItem*" + Parameter { name: "callback"; type: "QJSValue" } + Parameter { name: "behavior"; type: "LoadBehavior" } + } + Method { + name: "find" + type: "QQuickItem*" + Parameter { name: "callback"; type: "QJSValue" } + } + Method { + name: "push" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "pop" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "replace" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + } + Component { + name: "QQuickStackViewAttached" + prototype: "QObject" + Property { name: "index"; type: "int"; isReadonly: true } + Property { name: "view"; type: "QQuickStackView"; isReadonly: true; isPointer: true } + Property { name: "status"; type: "QQuickStackView::Status"; isReadonly: true } + Property { name: "visible"; type: "bool" } + Signal { name: "activated" } + Signal { name: "activating" } + Signal { name: "deactivated" } + Signal { name: "deactivating" } + Signal { name: "removed" } + } + Component { + name: "QQuickSwipe" + prototype: "QObject" + Property { name: "position"; type: "double" } + Property { name: "complete"; type: "bool"; isReadonly: true } + Property { name: "left"; type: "QQmlComponent"; isPointer: true } + Property { name: "behind"; type: "QQmlComponent"; isPointer: true } + Property { name: "right"; type: "QQmlComponent"; isPointer: true } + Property { name: "leftItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "behindItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "rightItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "enabled"; type: "bool" } + Property { name: "transition"; type: "QQuickTransition"; isPointer: true } + Signal { name: "completed" } + Signal { name: "opened" } + Signal { name: "closed" } + Method { name: "close"; revision: 1 } + Method { + name: "open" + revision: 2 + Parameter { name: "side"; type: "QQuickSwipeDelegate::Side" } + } + } + Component { + name: "QQuickSwipeDelegate" + defaultProperty: "data" + prototype: "QQuickItemDelegate" + exports: [ + "QtQuick.Templates/SwipeDelegate 2.0", + "QtQuick.Templates/SwipeDelegate 2.1", + "QtQuick.Templates/SwipeDelegate 2.2" + ] + exportMetaObjectRevisions: [0, 1, 2] + attachedType: "QQuickSwipeDelegateAttached" + Enum { + name: "Side" + values: { + "Left": 1, + "Right": -1 + } + } + Property { name: "swipe"; type: "QQuickSwipe"; isReadonly: true; isPointer: true } + } + Component { + name: "QQuickSwipeDelegateAttached" + prototype: "QObject" + Property { name: "pressed"; type: "bool"; isReadonly: true } + Signal { name: "clicked" } + } + Component { + name: "QQuickSwipeView" + defaultProperty: "contentData" + prototype: "QQuickContainer" + exports: [ + "QtQuick.Templates/SwipeView 2.0", + "QtQuick.Templates/SwipeView 2.1", + "QtQuick.Templates/SwipeView 2.2" + ] + exportMetaObjectRevisions: [0, 1, 2] + attachedType: "QQuickSwipeViewAttached" + Property { name: "interactive"; revision: 1; type: "bool" } + Property { name: "orientation"; revision: 2; type: "Qt::Orientation" } + Property { name: "horizontal"; revision: 3; type: "bool"; isReadonly: true } + Property { name: "vertical"; revision: 3; type: "bool"; isReadonly: true } + Signal { name: "interactiveChanged"; revision: 1 } + Signal { name: "orientationChanged"; revision: 2 } + } + Component { + name: "QQuickSwipeViewAttached" + prototype: "QObject" + Property { name: "index"; type: "int"; isReadonly: true } + Property { name: "isCurrentItem"; type: "bool"; isReadonly: true } + Property { name: "view"; type: "QQuickSwipeView"; isReadonly: true; isPointer: true } + Property { name: "isNextItem"; revision: 1; type: "bool"; isReadonly: true } + Property { name: "isPreviousItem"; revision: 1; type: "bool"; isReadonly: true } + } + Component { + name: "QQuickSwitch" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: ["QtQuick.Templates/Switch 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "position"; type: "double" } + Property { name: "visualPosition"; type: "double"; isReadonly: true } + } + Component { + name: "QQuickSwitchDelegate" + defaultProperty: "data" + prototype: "QQuickItemDelegate" + exports: ["QtQuick.Templates/SwitchDelegate 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "position"; type: "double" } + Property { name: "visualPosition"; type: "double"; isReadonly: true } + } + Component { + name: "QQuickTabBar" + defaultProperty: "contentData" + prototype: "QQuickContainer" + exports: [ + "QtQuick.Templates/TabBar 2.0", + "QtQuick.Templates/TabBar 2.2" + ] + exportMetaObjectRevisions: [0, 2] + attachedType: "QQuickTabBarAttached" + Enum { + name: "Position" + values: { + "Header": 0, + "Footer": 1 + } + } + Property { name: "position"; type: "Position" } + Property { name: "contentWidth"; revision: 2; type: "double" } + Property { name: "contentHeight"; revision: 2; type: "double" } + } + Component { + name: "QQuickTabBarAttached" + prototype: "QObject" + Property { name: "index"; type: "int"; isReadonly: true } + Property { name: "tabBar"; type: "QQuickTabBar"; isReadonly: true; isPointer: true } + Property { name: "position"; type: "QQuickTabBar::Position"; isReadonly: true } + } + Component { + name: "QQuickTabButton" + defaultProperty: "data" + prototype: "QQuickAbstractButton" + exports: ["QtQuick.Templates/TabButton 2.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickTableView" + defaultProperty: "flickableData" + prototype: "QQuickFlickable" + exports: ["QtQuick.Templates/__TableView__ 2.15"] + exportMetaObjectRevisions: [15] + attachedType: "QQuickTableViewAttached" + Property { name: "rows"; type: "int"; isReadonly: true } + Property { name: "columns"; type: "int"; isReadonly: true } + Property { name: "rowSpacing"; type: "double" } + Property { name: "columnSpacing"; type: "double" } + Property { name: "rowHeightProvider"; type: "QJSValue" } + Property { name: "columnWidthProvider"; type: "QJSValue" } + Property { name: "model"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "reuseItems"; type: "bool" } + Property { name: "contentWidth"; type: "double" } + Property { name: "contentHeight"; type: "double" } + Property { name: "syncView"; revision: 14; type: "QQuickTableView"; isPointer: true } + Property { name: "syncDirection"; revision: 14; type: "Qt::Orientations" } + Signal { name: "syncViewChanged"; revision: 14 } + Signal { name: "syncDirectionChanged"; revision: 14 } + Method { name: "forceLayout" } + } + Component { + name: "QQuickTableViewAttached" + prototype: "QObject" + Property { name: "view"; type: "QQuickTableView"; isReadonly: true; isPointer: true } + Signal { name: "pooled" } + Signal { name: "reused" } + } + Component { + name: "QQuickText" + defaultProperty: "data" + prototype: "QQuickImplicitSizeItem" + Enum { + name: "HAlignment" + values: { + "AlignLeft": 1, + "AlignRight": 2, + "AlignHCenter": 4, + "AlignJustify": 8 + } + } + Enum { + name: "VAlignment" + values: { + "AlignTop": 32, + "AlignBottom": 64, + "AlignVCenter": 128 + } + } + Enum { + name: "TextStyle" + values: { + "Normal": 0, + "Outline": 1, + "Raised": 2, + "Sunken": 3 + } + } + Enum { + name: "TextFormat" + values: { + "PlainText": 0, + "RichText": 1, + "MarkdownText": 3, + "AutoText": 2, + "StyledText": 4 + } + } + Enum { + name: "TextElideMode" + values: { + "ElideLeft": 0, + "ElideRight": 1, + "ElideMiddle": 2, + "ElideNone": 3 + } + } + Enum { + name: "WrapMode" + values: { + "NoWrap": 0, + "WordWrap": 1, + "WrapAnywhere": 3, + "WrapAtWordBoundaryOrAnywhere": 4, + "Wrap": 4 + } + } + Enum { + name: "RenderType" + values: { + "QtRendering": 0, + "NativeRendering": 1 + } + } + Enum { + name: "LineHeightMode" + values: { + "ProportionalHeight": 0, + "FixedHeight": 1 + } + } + Enum { + name: "FontSizeMode" + values: { + "FixedSize": 0, + "HorizontalFit": 1, + "VerticalFit": 2, + "Fit": 3 + } + } + Property { name: "text"; type: "string" } + Property { name: "font"; type: "QFont" } + Property { name: "color"; type: "QColor" } + Property { name: "linkColor"; type: "QColor" } + Property { name: "style"; type: "TextStyle" } + Property { name: "styleColor"; type: "QColor" } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "effectiveHorizontalAlignment"; type: "HAlignment"; isReadonly: true } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "wrapMode"; type: "WrapMode" } + Property { name: "lineCount"; type: "int"; isReadonly: true } + Property { name: "truncated"; type: "bool"; isReadonly: true } + Property { name: "maximumLineCount"; type: "int" } + Property { name: "textFormat"; type: "TextFormat" } + Property { name: "elide"; type: "TextElideMode" } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "paintedWidth"; type: "double"; isReadonly: true } + Property { name: "paintedHeight"; type: "double"; isReadonly: true } + Property { name: "lineHeight"; type: "double" } + Property { name: "lineHeightMode"; type: "LineHeightMode" } + Property { name: "baseUrl"; type: "QUrl" } + Property { name: "minimumPixelSize"; type: "int" } + Property { name: "minimumPointSize"; type: "int" } + Property { name: "fontSizeMode"; type: "FontSizeMode" } + Property { name: "renderType"; type: "RenderType" } + Property { name: "hoveredLink"; revision: 2; type: "string"; isReadonly: true } + Property { name: "padding"; revision: 6; type: "double" } + Property { name: "topPadding"; revision: 6; type: "double" } + Property { name: "leftPadding"; revision: 6; type: "double" } + Property { name: "rightPadding"; revision: 6; type: "double" } + Property { name: "bottomPadding"; revision: 6; type: "double" } + Property { name: "fontInfo"; revision: 9; type: "QJSValue"; isReadonly: true } + Property { name: "advance"; revision: 10; type: "QSizeF"; isReadonly: true } + Signal { + name: "textChanged" + Parameter { name: "text"; type: "string" } + } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "linkHovered" + revision: 2 + Parameter { name: "link"; type: "string" } + } + Signal { + name: "fontChanged" + Parameter { name: "font"; type: "QFont" } + } + Signal { + name: "styleChanged" + Parameter { name: "style"; type: "QQuickText::TextStyle" } + } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickText::HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickText::VAlignment" } + } + Signal { + name: "textFormatChanged" + Parameter { name: "textFormat"; type: "QQuickText::TextFormat" } + } + Signal { + name: "elideModeChanged" + Parameter { name: "mode"; type: "QQuickText::TextElideMode" } + } + Signal { name: "contentSizeChanged" } + Signal { + name: "contentWidthChanged" + Parameter { name: "contentWidth"; type: "double" } + } + Signal { + name: "contentHeightChanged" + Parameter { name: "contentHeight"; type: "double" } + } + Signal { + name: "lineHeightChanged" + Parameter { name: "lineHeight"; type: "double" } + } + Signal { + name: "lineHeightModeChanged" + Parameter { name: "mode"; type: "LineHeightMode" } + } + Signal { + name: "lineLaidOut" + Parameter { name: "line"; type: "QQuickTextLine"; isPointer: true } + } + Signal { name: "paddingChanged"; revision: 6 } + Signal { name: "topPaddingChanged"; revision: 6 } + Signal { name: "leftPaddingChanged"; revision: 6 } + Signal { name: "rightPaddingChanged"; revision: 6 } + Signal { name: "bottomPaddingChanged"; revision: 6 } + Signal { name: "fontInfoChanged"; revision: 9 } + Method { name: "doLayout" } + Method { name: "forceLayout"; revision: 9 } + Method { + name: "linkAt" + revision: 3 + type: "string" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + name: "QQuickTextArea" + defaultProperty: "data" + prototype: "QQuickTextEdit" + exports: [ + "QtQuick.Templates/TextArea 2.0", + "QtQuick.Templates/TextArea 2.1", + "QtQuick.Templates/TextArea 2.3", + "QtQuick.Templates/TextArea 2.5" + ] + exportMetaObjectRevisions: [0, 1, 3, 5] + attachedType: "QQuickTextAreaAttached" + Property { name: "font"; type: "QFont" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "background"; type: "QQuickItem"; isPointer: true } + Property { name: "placeholderText"; type: "string" } + Property { name: "focusReason"; type: "Qt::FocusReason" } + Property { name: "hovered"; revision: 1; type: "bool"; isReadonly: true } + Property { name: "hoverEnabled"; revision: 1; type: "bool" } + Property { name: "palette"; revision: 3; type: "QPalette" } + Property { name: "placeholderTextColor"; revision: 5; type: "QColor" } + Property { name: "implicitBackgroundWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "topInset"; revision: 5; type: "double" } + Property { name: "leftInset"; revision: 5; type: "double" } + Property { name: "rightInset"; revision: 5; type: "double" } + Property { name: "bottomInset"; revision: 5; type: "double" } + Signal { name: "implicitWidthChanged3" } + Signal { name: "implicitHeightChanged3" } + Signal { + name: "pressAndHold" + Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "pressed" + revision: 1 + Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "released" + revision: 1 + Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { name: "hoveredChanged"; revision: 1 } + Signal { name: "hoverEnabledChanged"; revision: 1 } + Signal { name: "paletteChanged"; revision: 3 } + Signal { name: "placeholderTextColorChanged"; revision: 5 } + Signal { name: "implicitBackgroundWidthChanged"; revision: 5 } + Signal { name: "implicitBackgroundHeightChanged"; revision: 5 } + Signal { name: "topInsetChanged"; revision: 5 } + Signal { name: "leftInsetChanged"; revision: 5 } + Signal { name: "rightInsetChanged"; revision: 5 } + Signal { name: "bottomInsetChanged"; revision: 5 } + } + Component { + name: "QQuickTextAreaAttached" + prototype: "QObject" + Property { name: "flickable"; type: "QQuickTextArea"; isPointer: true } + } + Component { + name: "QQuickTextEdit" + defaultProperty: "data" + prototype: "QQuickImplicitSizeItem" + Enum { + name: "HAlignment" + values: { + "AlignLeft": 1, + "AlignRight": 2, + "AlignHCenter": 4, + "AlignJustify": 8 + } + } + Enum { + name: "VAlignment" + values: { + "AlignTop": 32, + "AlignBottom": 64, + "AlignVCenter": 128 + } + } + Enum { + name: "TextFormat" + values: { + "PlainText": 0, + "RichText": 1, + "AutoText": 2, + "MarkdownText": 3 + } + } + Enum { + name: "WrapMode" + values: { + "NoWrap": 0, + "WordWrap": 1, + "WrapAnywhere": 3, + "WrapAtWordBoundaryOrAnywhere": 4, + "Wrap": 4 + } + } + Enum { + name: "SelectionMode" + values: { + "SelectCharacters": 0, + "SelectWords": 1 + } + } + Enum { + name: "RenderType" + values: { + "QtRendering": 0, + "NativeRendering": 1 + } + } + Property { name: "text"; type: "string" } + Property { name: "color"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "selectedTextColor"; type: "QColor" } + Property { name: "font"; type: "QFont" } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "effectiveHorizontalAlignment"; type: "HAlignment"; isReadonly: true } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "wrapMode"; type: "WrapMode" } + Property { name: "lineCount"; type: "int"; isReadonly: true } + Property { name: "length"; type: "int"; isReadonly: true } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "paintedWidth"; type: "double"; isReadonly: true } + Property { name: "paintedHeight"; type: "double"; isReadonly: true } + Property { name: "textFormat"; type: "TextFormat" } + Property { name: "readOnly"; type: "bool" } + Property { name: "cursorVisible"; type: "bool" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "cursorRectangle"; type: "QRectF"; isReadonly: true } + Property { name: "cursorDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "overwriteMode"; type: "bool" } + Property { name: "selectionStart"; type: "int"; isReadonly: true } + Property { name: "selectionEnd"; type: "int"; isReadonly: true } + Property { name: "selectedText"; type: "string"; isReadonly: true } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "persistentSelection"; type: "bool" } + Property { name: "textMargin"; type: "double" } + Property { name: "inputMethodHints"; type: "Qt::InputMethodHints" } + Property { name: "selectByKeyboard"; revision: 1; type: "bool" } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "mouseSelectionMode"; type: "SelectionMode" } + Property { name: "canPaste"; type: "bool"; isReadonly: true } + Property { name: "canUndo"; type: "bool"; isReadonly: true } + Property { name: "canRedo"; type: "bool"; isReadonly: true } + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "baseUrl"; type: "QUrl" } + Property { name: "renderType"; type: "RenderType" } + Property { + name: "textDocument" + revision: 1 + type: "QQuickTextDocument" + isReadonly: true + isPointer: true + } + Property { name: "hoveredLink"; revision: 2; type: "string"; isReadonly: true } + Property { name: "padding"; revision: 6; type: "double" } + Property { name: "topPadding"; revision: 6; type: "double" } + Property { name: "leftPadding"; revision: 6; type: "double" } + Property { name: "rightPadding"; revision: 6; type: "double" } + Property { name: "bottomPadding"; revision: 6; type: "double" } + Property { name: "preeditText"; revision: 7; type: "string"; isReadonly: true } + Property { name: "tabStopDistance"; revision: 10; type: "double" } + Signal { name: "preeditTextChanged"; revision: 7 } + Signal { name: "contentSizeChanged" } + Signal { + name: "colorChanged" + Parameter { name: "color"; type: "QColor" } + } + Signal { + name: "selectionColorChanged" + Parameter { name: "color"; type: "QColor" } + } + Signal { + name: "selectedTextColorChanged" + Parameter { name: "color"; type: "QColor" } + } + Signal { + name: "fontChanged" + Parameter { name: "font"; type: "QFont" } + } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickTextEdit::HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickTextEdit::VAlignment" } + } + Signal { + name: "textFormatChanged" + Parameter { name: "textFormat"; type: "QQuickTextEdit::TextFormat" } + } + Signal { + name: "readOnlyChanged" + Parameter { name: "isReadOnly"; type: "bool" } + } + Signal { + name: "cursorVisibleChanged" + Parameter { name: "isCursorVisible"; type: "bool" } + } + Signal { + name: "overwriteModeChanged" + Parameter { name: "overwriteMode"; type: "bool" } + } + Signal { + name: "activeFocusOnPressChanged" + Parameter { name: "activeFocusOnPressed"; type: "bool" } + } + Signal { + name: "persistentSelectionChanged" + Parameter { name: "isPersistentSelection"; type: "bool" } + } + Signal { + name: "textMarginChanged" + Parameter { name: "textMargin"; type: "double" } + } + Signal { + name: "selectByKeyboardChanged" + revision: 1 + Parameter { name: "selectByKeyboard"; type: "bool" } + } + Signal { + name: "selectByMouseChanged" + Parameter { name: "selectByMouse"; type: "bool" } + } + Signal { + name: "mouseSelectionModeChanged" + Parameter { name: "mode"; type: "QQuickTextEdit::SelectionMode" } + } + Signal { + name: "linkActivated" + Parameter { name: "link"; type: "string" } + } + Signal { + name: "linkHovered" + revision: 2 + Parameter { name: "link"; type: "string" } + } + Signal { name: "editingFinished"; revision: 6 } + Signal { name: "paddingChanged"; revision: 6 } + Signal { name: "topPaddingChanged"; revision: 6 } + Signal { name: "leftPaddingChanged"; revision: 6 } + Signal { name: "rightPaddingChanged"; revision: 6 } + Signal { name: "bottomPaddingChanged"; revision: 6 } + Signal { + name: "tabStopDistanceChanged" + revision: 10 + Parameter { name: "distance"; type: "double" } + } + Method { name: "selectAll" } + Method { name: "selectWord" } + Method { + name: "select" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "deselect" } + Method { + name: "isRightToLeft" + type: "bool" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "cut" } + Method { name: "copy" } + Method { name: "paste" } + Method { name: "undo" } + Method { name: "redo" } + Method { + name: "insert" + Parameter { name: "position"; type: "int" } + Parameter { name: "text"; type: "string" } + } + Method { + name: "remove" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "append" + revision: 2 + Parameter { name: "text"; type: "string" } + } + Method { name: "clear"; revision: 7 } + Method { + name: "inputMethodQuery" + revision: 4 + type: "QVariant" + Parameter { name: "query"; type: "Qt::InputMethodQuery" } + Parameter { name: "argument"; type: "QVariant" } + } + Method { + name: "positionToRectangle" + type: "QRectF" + Parameter { type: "int" } + } + Method { + name: "positionAt" + type: "int" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "moveCursorSelection" + Parameter { name: "pos"; type: "int" } + } + Method { + name: "moveCursorSelection" + Parameter { name: "pos"; type: "int" } + Parameter { name: "mode"; type: "SelectionMode" } + } + Method { + name: "getText" + type: "string" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "getFormattedText" + type: "string" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "linkAt" + revision: 3 + type: "string" + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + } + Component { + name: "QQuickTextField" + defaultProperty: "data" + prototype: "QQuickTextInput" + exports: [ + "QtQuick.Templates/TextField 2.0", + "QtQuick.Templates/TextField 2.1", + "QtQuick.Templates/TextField 2.3", + "QtQuick.Templates/TextField 2.5" + ] + exportMetaObjectRevisions: [0, 1, 3, 5] + Property { name: "font"; type: "QFont" } + Property { name: "implicitWidth"; type: "double" } + Property { name: "implicitHeight"; type: "double" } + Property { name: "background"; type: "QQuickItem"; isPointer: true } + Property { name: "placeholderText"; type: "string" } + Property { name: "focusReason"; type: "Qt::FocusReason" } + Property { name: "hovered"; revision: 1; type: "bool"; isReadonly: true } + Property { name: "hoverEnabled"; revision: 1; type: "bool" } + Property { name: "palette"; revision: 3; type: "QPalette" } + Property { name: "placeholderTextColor"; revision: 5; type: "QColor" } + Property { name: "implicitBackgroundWidth"; revision: 5; type: "double"; isReadonly: true } + Property { name: "implicitBackgroundHeight"; revision: 5; type: "double"; isReadonly: true } + Property { name: "topInset"; revision: 5; type: "double" } + Property { name: "leftInset"; revision: 5; type: "double" } + Property { name: "rightInset"; revision: 5; type: "double" } + Property { name: "bottomInset"; revision: 5; type: "double" } + Signal { name: "implicitWidthChanged3" } + Signal { name: "implicitHeightChanged3" } + Signal { + name: "pressAndHold" + Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "pressed" + revision: 1 + Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { + name: "released" + revision: 1 + Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true } + } + Signal { name: "hoveredChanged"; revision: 1 } + Signal { name: "hoverEnabledChanged"; revision: 1 } + Signal { name: "paletteChanged"; revision: 3 } + Signal { name: "placeholderTextColorChanged"; revision: 5 } + Signal { name: "implicitBackgroundWidthChanged"; revision: 5 } + Signal { name: "implicitBackgroundHeightChanged"; revision: 5 } + Signal { name: "topInsetChanged"; revision: 5 } + Signal { name: "leftInsetChanged"; revision: 5 } + Signal { name: "rightInsetChanged"; revision: 5 } + Signal { name: "bottomInsetChanged"; revision: 5 } + } + Component { + name: "QQuickTextInput" + defaultProperty: "data" + prototype: "QQuickImplicitSizeItem" + Enum { + name: "EchoMode" + values: { + "Normal": 0, + "NoEcho": 1, + "Password": 2, + "PasswordEchoOnEdit": 3 + } + } + Enum { + name: "HAlignment" + values: { + "AlignLeft": 1, + "AlignRight": 2, + "AlignHCenter": 4 + } + } + Enum { + name: "VAlignment" + values: { + "AlignTop": 32, + "AlignBottom": 64, + "AlignVCenter": 128 + } + } + Enum { + name: "WrapMode" + values: { + "NoWrap": 0, + "WordWrap": 1, + "WrapAnywhere": 3, + "WrapAtWordBoundaryOrAnywhere": 4, + "Wrap": 4 + } + } + Enum { + name: "SelectionMode" + values: { + "SelectCharacters": 0, + "SelectWords": 1 + } + } + Enum { + name: "CursorPosition" + values: { + "CursorBetweenCharacters": 0, + "CursorOnCharacter": 1 + } + } + Enum { + name: "RenderType" + values: { + "QtRendering": 0, + "NativeRendering": 1 + } + } + Property { name: "text"; type: "string" } + Property { name: "length"; type: "int"; isReadonly: true } + Property { name: "color"; type: "QColor" } + Property { name: "selectionColor"; type: "QColor" } + Property { name: "selectedTextColor"; type: "QColor" } + Property { name: "font"; type: "QFont" } + Property { name: "horizontalAlignment"; type: "HAlignment" } + Property { name: "effectiveHorizontalAlignment"; type: "HAlignment"; isReadonly: true } + Property { name: "verticalAlignment"; type: "VAlignment" } + Property { name: "wrapMode"; type: "WrapMode" } + Property { name: "readOnly"; type: "bool" } + Property { name: "cursorVisible"; type: "bool" } + Property { name: "cursorPosition"; type: "int" } + Property { name: "cursorRectangle"; type: "QRectF"; isReadonly: true } + Property { name: "cursorDelegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "overwriteMode"; type: "bool" } + Property { name: "selectionStart"; type: "int"; isReadonly: true } + Property { name: "selectionEnd"; type: "int"; isReadonly: true } + Property { name: "selectedText"; type: "string"; isReadonly: true } + Property { name: "maximumLength"; type: "int" } + Property { name: "validator"; type: "QValidator"; isPointer: true } + Property { name: "inputMask"; type: "string" } + Property { name: "inputMethodHints"; type: "Qt::InputMethodHints" } + Property { name: "acceptableInput"; type: "bool"; isReadonly: true } + Property { name: "echoMode"; type: "EchoMode" } + Property { name: "activeFocusOnPress"; type: "bool" } + Property { name: "passwordCharacter"; type: "string" } + Property { name: "passwordMaskDelay"; revision: 4; type: "int" } + Property { name: "displayText"; type: "string"; isReadonly: true } + Property { name: "preeditText"; revision: 7; type: "string"; isReadonly: true } + Property { name: "autoScroll"; type: "bool" } + Property { name: "selectByMouse"; type: "bool" } + Property { name: "mouseSelectionMode"; type: "SelectionMode" } + Property { name: "persistentSelection"; type: "bool" } + Property { name: "canPaste"; type: "bool"; isReadonly: true } + Property { name: "canUndo"; type: "bool"; isReadonly: true } + Property { name: "canRedo"; type: "bool"; isReadonly: true } + Property { name: "inputMethodComposing"; type: "bool"; isReadonly: true } + Property { name: "contentWidth"; type: "double"; isReadonly: true } + Property { name: "contentHeight"; type: "double"; isReadonly: true } + Property { name: "renderType"; type: "RenderType" } + Property { name: "padding"; revision: 6; type: "double" } + Property { name: "topPadding"; revision: 6; type: "double" } + Property { name: "leftPadding"; revision: 6; type: "double" } + Property { name: "rightPadding"; revision: 6; type: "double" } + Property { name: "bottomPadding"; revision: 6; type: "double" } + Signal { name: "accepted" } + Signal { name: "editingFinished"; revision: 2 } + Signal { name: "textEdited"; revision: 9 } + Signal { + name: "fontChanged" + Parameter { name: "font"; type: "QFont" } + } + Signal { + name: "horizontalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickTextInput::HAlignment" } + } + Signal { + name: "verticalAlignmentChanged" + Parameter { name: "alignment"; type: "QQuickTextInput::VAlignment" } + } + Signal { + name: "readOnlyChanged" + Parameter { name: "isReadOnly"; type: "bool" } + } + Signal { + name: "cursorVisibleChanged" + Parameter { name: "isCursorVisible"; type: "bool" } + } + Signal { + name: "overwriteModeChanged" + Parameter { name: "overwriteMode"; type: "bool" } + } + Signal { + name: "maximumLengthChanged" + Parameter { name: "maximumLength"; type: "int" } + } + Signal { + name: "inputMaskChanged" + Parameter { name: "inputMask"; type: "string" } + } + Signal { + name: "echoModeChanged" + Parameter { name: "echoMode"; type: "QQuickTextInput::EchoMode" } + } + Signal { + name: "passwordMaskDelayChanged" + revision: 4 + Parameter { name: "delay"; type: "int" } + } + Signal { name: "preeditTextChanged"; revision: 7 } + Signal { + name: "activeFocusOnPressChanged" + Parameter { name: "activeFocusOnPress"; type: "bool" } + } + Signal { + name: "autoScrollChanged" + Parameter { name: "autoScroll"; type: "bool" } + } + Signal { + name: "selectByMouseChanged" + Parameter { name: "selectByMouse"; type: "bool" } + } + Signal { + name: "mouseSelectionModeChanged" + Parameter { name: "mode"; type: "QQuickTextInput::SelectionMode" } + } + Signal { name: "contentSizeChanged" } + Signal { name: "paddingChanged"; revision: 6 } + Signal { name: "topPaddingChanged"; revision: 6 } + Signal { name: "leftPaddingChanged"; revision: 6 } + Signal { name: "rightPaddingChanged"; revision: 6 } + Signal { name: "bottomPaddingChanged"; revision: 6 } + Method { name: "selectAll" } + Method { name: "selectWord" } + Method { + name: "select" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "deselect" } + Method { + name: "isRightToLeft" + type: "bool" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { name: "cut" } + Method { name: "copy" } + Method { name: "paste" } + Method { name: "undo" } + Method { name: "redo" } + Method { + name: "insert" + Parameter { name: "position"; type: "int" } + Parameter { name: "text"; type: "string" } + } + Method { + name: "remove" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + Method { + name: "ensureVisible" + revision: 4 + Parameter { name: "position"; type: "int" } + } + Method { name: "clear"; revision: 7 } + Method { + name: "positionAt" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "positionToRectangle" + type: "QRectF" + Parameter { name: "pos"; type: "int" } + } + Method { + name: "moveCursorSelection" + Parameter { name: "pos"; type: "int" } + } + Method { + name: "moveCursorSelection" + Parameter { name: "pos"; type: "int" } + Parameter { name: "mode"; type: "SelectionMode" } + } + Method { + name: "inputMethodQuery" + revision: 4 + type: "QVariant" + Parameter { name: "query"; type: "Qt::InputMethodQuery" } + Parameter { name: "argument"; type: "QVariant" } + } + Method { + name: "getText" + type: "string" + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + } + } + Component { + name: "QQuickToolBar" + defaultProperty: "contentData" + prototype: "QQuickPane" + exports: ["QtQuick.Templates/ToolBar 2.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Position" + values: { + "Header": 0, + "Footer": 1 + } + } + Property { name: "position"; type: "Position" } + } + Component { + name: "QQuickToolButton" + defaultProperty: "data" + prototype: "QQuickButton" + exports: ["QtQuick.Templates/ToolButton 2.0"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuickToolSeparator" + defaultProperty: "data" + prototype: "QQuickControl" + exports: ["QtQuick.Templates/ToolSeparator 2.1"] + exportMetaObjectRevisions: [0] + Property { name: "orientation"; type: "Qt::Orientation" } + Property { name: "horizontal"; type: "bool"; isReadonly: true } + Property { name: "vertical"; type: "bool"; isReadonly: true } + } + Component { + name: "QQuickToolTip" + defaultProperty: "contentData" + prototype: "QQuickPopup" + exports: [ + "QtQuick.Templates/ToolTip 2.0", + "QtQuick.Templates/ToolTip 2.5" + ] + exportMetaObjectRevisions: [0, 5] + attachedType: "QQuickToolTipAttached" + Property { name: "delay"; type: "int" } + Property { name: "timeout"; type: "int" } + Property { name: "text"; type: "string" } + Method { + name: "show" + revision: 5 + Parameter { name: "text"; type: "string" } + Parameter { name: "ms"; type: "int" } + } + Method { + name: "show" + revision: 5 + Parameter { name: "text"; type: "string" } + } + Method { name: "hide"; revision: 5 } + } + Component { + name: "QQuickToolTipAttached" + prototype: "QObject" + Property { name: "text"; type: "string" } + Property { name: "delay"; type: "int" } + Property { name: "timeout"; type: "int" } + Property { name: "visible"; type: "bool" } + Property { name: "toolTip"; type: "QQuickToolTip"; isReadonly: true; isPointer: true } + Method { + name: "show" + Parameter { name: "text"; type: "string" } + Parameter { name: "ms"; type: "int" } + } + Method { + name: "show" + Parameter { name: "text"; type: "string" } + } + Method { name: "hide" } + } + Component { + name: "QQuickTumbler" + defaultProperty: "data" + prototype: "QQuickControl" + exports: [ + "QtQuick.Templates/Tumbler 2.0", + "QtQuick.Templates/Tumbler 2.1", + "QtQuick.Templates/Tumbler 2.2" + ] + exportMetaObjectRevisions: [0, 1, 2] + attachedType: "QQuickTumblerAttached" + Enum { + name: "PositionMode" + values: { + "Beginning": 0, + "Center": 1, + "End": 2, + "Visible": 3, + "Contain": 4, + "SnapPosition": 5 + } + } + Property { name: "model"; type: "QVariant" } + Property { name: "count"; type: "int"; isReadonly: true } + Property { name: "currentIndex"; type: "int" } + Property { name: "currentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "visibleItemCount"; type: "int" } + Property { name: "wrap"; revision: 1; type: "bool" } + Property { name: "moving"; revision: 2; type: "bool"; isReadonly: true } + Signal { name: "wrapChanged"; revision: 1 } + Signal { name: "movingChanged"; revision: 2 } + Method { + name: "positionViewAtIndex" + revision: 5 + Parameter { name: "index"; type: "int" } + Parameter { name: "mode"; type: "PositionMode" } + } + } + Component { + name: "QQuickTumblerAttached" + prototype: "QObject" + Property { name: "tumbler"; type: "QQuickTumbler"; isReadonly: true; isPointer: true } + Property { name: "displacement"; type: "double"; isReadonly: true } + } + Component { + name: "QQuickVerticalHeaderView" + defaultProperty: "flickableData" + prototype: "QQuickHeaderViewBase" + exports: ["QtQuick.Templates/VerticalHeaderView 2.15"] + exportMetaObjectRevisions: [0] + attachedType: "QQuickTableViewAttached" + } + Component { + name: "QQuickWindow" + defaultProperty: "data" + prototype: "QWindow" + Enum { + name: "CreateTextureOptions" + values: { + "TextureHasAlphaChannel": 1, + "TextureHasMipmaps": 2, + "TextureOwnsGLTexture": 4, + "TextureCanUseAtlas": 8, + "TextureIsOpaque": 16 + } + } + Enum { + name: "SceneGraphError" + values: { + "ContextNotAvailable": 1 + } + } + Enum { + name: "TextRenderType" + values: { + "QtTextRendering": 0, + "NativeTextRendering": 1 + } + } + Enum { + name: "NativeObjectType" + values: { + "NativeObjectTexture": 0 + } + } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "color"; type: "QColor" } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { + name: "activeFocusItem" + revision: 1 + type: "QQuickItem" + isReadonly: true + isPointer: true + } + Signal { name: "frameSwapped" } + Signal { + name: "openglContextCreated" + revision: 2 + Parameter { name: "context"; type: "QOpenGLContext"; isPointer: true } + } + Signal { name: "sceneGraphInitialized" } + Signal { name: "sceneGraphInvalidated" } + Signal { name: "beforeSynchronizing" } + Signal { name: "afterSynchronizing"; revision: 2 } + Signal { name: "beforeRendering" } + Signal { name: "afterRendering" } + Signal { name: "afterAnimating"; revision: 2 } + Signal { name: "sceneGraphAboutToStop"; revision: 2 } + Signal { + name: "closing" + revision: 1 + Parameter { name: "close"; type: "QQuickCloseEvent"; isPointer: true } + } + Signal { + name: "colorChanged" + Parameter { type: "QColor" } + } + Signal { name: "activeFocusItemChanged"; revision: 1 } + Signal { + name: "sceneGraphError" + revision: 2 + Parameter { name: "error"; type: "QQuickWindow::SceneGraphError" } + Parameter { name: "message"; type: "string" } + } + Signal { name: "beforeRenderPassRecording"; revision: 14 } + Signal { name: "afterRenderPassRecording"; revision: 14 } + Method { name: "update" } + Method { name: "releaseResources" } + } + Component { + name: "QQuickWindowQmlImpl" + defaultProperty: "data" + prototype: "QQuickWindow" + Property { name: "visible"; type: "bool" } + Property { name: "visibility"; type: "Visibility" } + Property { name: "screen"; revision: 3; type: "QObject"; isPointer: true } + Signal { + name: "visibleChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "visibilityChanged" + Parameter { name: "visibility"; type: "QWindow::Visibility" } + } + Signal { name: "screenChanged"; revision: 3 } + } + Component { + name: "QWindow" + prototype: "QObject" + Enum { + name: "Visibility" + values: { + "Hidden": 0, + "AutomaticVisibility": 1, + "Windowed": 2, + "Minimized": 3, + "Maximized": 4, + "FullScreen": 5 + } + } + Enum { + name: "AncestorMode" + values: { + "ExcludeTransients": 0, + "IncludeTransients": 1 + } + } + Property { name: "title"; type: "string" } + Property { name: "modality"; type: "Qt::WindowModality" } + Property { name: "flags"; type: "Qt::WindowFlags" } + Property { name: "x"; type: "int" } + Property { name: "y"; type: "int" } + Property { name: "width"; type: "int" } + Property { name: "height"; type: "int" } + Property { name: "minimumWidth"; type: "int" } + Property { name: "minimumHeight"; type: "int" } + Property { name: "maximumWidth"; type: "int" } + Property { name: "maximumHeight"; type: "int" } + Property { name: "visible"; type: "bool" } + Property { name: "active"; revision: 1; type: "bool"; isReadonly: true } + Property { name: "visibility"; revision: 1; type: "Visibility" } + Property { name: "contentOrientation"; type: "Qt::ScreenOrientation" } + Property { name: "opacity"; revision: 1; type: "double" } + Property { name: "transientParent"; revision: 13; type: "QWindow"; isPointer: true } + Signal { + name: "screenChanged" + Parameter { name: "screen"; type: "QScreen"; isPointer: true } + } + Signal { + name: "modalityChanged" + Parameter { name: "modality"; type: "Qt::WindowModality" } + } + Signal { + name: "windowStateChanged" + Parameter { name: "windowState"; type: "Qt::WindowState" } + } + Signal { + name: "windowTitleChanged" + revision: 2 + Parameter { name: "title"; type: "string" } + } + Signal { + name: "xChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "yChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "widthChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "heightChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "minimumWidthChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "minimumHeightChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "maximumWidthChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "maximumHeightChanged" + Parameter { name: "arg"; type: "int" } + } + Signal { + name: "visibleChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "visibilityChanged" + revision: 1 + Parameter { name: "visibility"; type: "QWindow::Visibility" } + } + Signal { name: "activeChanged"; revision: 1 } + Signal { + name: "contentOrientationChanged" + Parameter { name: "orientation"; type: "Qt::ScreenOrientation" } + } + Signal { + name: "focusObjectChanged" + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Signal { + name: "opacityChanged" + revision: 1 + Parameter { name: "opacity"; type: "double" } + } + Signal { + name: "transientParentChanged" + revision: 13 + Parameter { name: "transientParent"; type: "QWindow"; isPointer: true } + } + Method { name: "requestActivate"; revision: 1 } + Method { + name: "setVisible" + Parameter { name: "visible"; type: "bool" } + } + Method { name: "show" } + Method { name: "hide" } + Method { name: "showMinimized" } + Method { name: "showMaximized" } + Method { name: "showFullScreen" } + Method { name: "showNormal" } + Method { name: "close"; type: "bool" } + Method { name: "raise" } + Method { name: "lower" } + Method { + name: "startSystemResize" + type: "bool" + Parameter { name: "edges"; type: "Qt::Edges" } + } + Method { name: "startSystemMove"; type: "bool" } + Method { + name: "setTitle" + Parameter { type: "string" } + } + Method { + name: "setX" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setY" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setWidth" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setHeight" + Parameter { name: "arg"; type: "int" } + } + Method { + name: "setGeometry" + Parameter { name: "posx"; type: "int" } + Parameter { name: "posy"; type: "int" } + Parameter { name: "w"; type: "int" } + Parameter { name: "h"; type: "int" } + } + Method { + name: "setGeometry" + Parameter { name: "rect"; type: "QRect" } + } + Method { + name: "setMinimumWidth" + Parameter { name: "w"; type: "int" } + } + Method { + name: "setMinimumHeight" + Parameter { name: "h"; type: "int" } + } + Method { + name: "setMaximumWidth" + Parameter { name: "w"; type: "int" } + } + Method { + name: "setMaximumHeight" + Parameter { name: "h"; type: "int" } + } + Method { + name: "alert" + revision: 1 + Parameter { name: "msec"; type: "int" } + } + Method { name: "requestUpdate"; revision: 3 } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/qmldir new file mode 100644 index 0000000..9f3773a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Templates.2/qmldir @@ -0,0 +1,5 @@ +module QtQuick.Templates +plugin qtquicktemplates2plugin +classname QtQuickTemplates2Plugin +depends QtQuick.Window 2.2 +depends QtQuick 2.9 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/libqtquicktimelineplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/libqtquicktimelineplugin.so new file mode 100755 index 0000000..55cc6f6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/libqtquicktimelineplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/plugins.qmltypes new file mode 100644 index 0000000..8419129 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/plugins.qmltypes @@ -0,0 +1,52 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick.Timeline 1.0' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QQuickKeyframe" + prototype: "QObject" + exports: ["QtQuick.Timeline/Keyframe 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "frame"; type: "double" } + Property { name: "easing"; type: "QEasingCurve" } + Property { name: "value"; type: "QVariant" } + Signal { name: "easingCurveChanged" } + } + Component { + name: "QQuickKeyframeGroup" + defaultProperty: "keyframes" + prototype: "QObject" + exports: ["QtQuick.Timeline/KeyframeGroup 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "target"; type: "QObject"; isPointer: true } + Property { name: "property"; type: "string" } + Property { name: "keyframes"; type: "QQuickKeyframe"; isList: true; isReadonly: true } + } + Component { + name: "QQuickTimeline" + defaultProperty: "keyframeGroups" + prototype: "QObject" + exports: ["QtQuick.Timeline/Timeline 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "startFrame"; type: "double" } + Property { name: "endFrame"; type: "double" } + Property { name: "currentFrame"; type: "double" } + Property { name: "keyframeGroups"; type: "QQuickKeyframeGroup"; isList: true; isReadonly: true } + Property { name: "animations"; type: "QQuickTimelineAnimation"; isList: true; isReadonly: true } + Property { name: "enabled"; type: "bool" } + } + Component { + name: "QQuickTimelineAnimation" + prototype: "QQuickNumberAnimation" + exports: ["QtQuick.Timeline/TimelineAnimation 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "pingPong"; type: "bool" } + Signal { name: "finished" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/qmldir new file mode 100644 index 0000000..29060c5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Timeline/qmldir @@ -0,0 +1,5 @@ +module QtQuick.Timeline +plugin qtquicktimelineplugin +classname QtQuickTimelinePlugin +typeinfo plugins.qmltypes +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/libwindowplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/libwindowplugin.so new file mode 100755 index 0000000..2522461 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/libwindowplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/plugins.qmltypes new file mode 100644 index 0000000..aaa2153 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/plugins.qmltypes @@ -0,0 +1,217 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0"] + Component { + file: "plugin.h" + name: "QQuickRootItem" + defaultProperty: "data" + prototype: "QQuickItem" + Method { + name: "setWidth" + Parameter { name: "w"; type: "int" } + } + Method { + name: "setHeight" + Parameter { name: "h"; type: "int" } + } + } + Component { + file: "plugin.h" + name: "QQuickScreen" + exports: [ + "QtQuick.Window/Screen 2.0", + "QtQuick.Window/Screen 2.10", + "QtQuick.Window/Screen 2.3" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 10, 3] + attachedType: "QQuickScreenAttached" + } + Component { + file: "plugin.h" + name: "QQuickScreenAttached" + prototype: "QQuickScreenInfo" + Property { name: "orientationUpdateMask"; type: "Qt::ScreenOrientations" } + Method { + name: "screenChanged" + Parameter { type: "QScreen"; isPointer: true } + } + Method { + name: "angleBetween" + type: "int" + Parameter { name: "a"; type: "int" } + Parameter { name: "b"; type: "int" } + } + } + Component { + file: "plugin.h" + name: "QQuickScreenInfo" + exports: [ + "QtQuick.Window/ScreenInfo 2.10", + "QtQuick.Window/ScreenInfo 2.3" + ] + isCreatable: false + exportMetaObjectRevisions: [10, 3] + Property { name: "name"; type: "string"; isReadonly: true } + Property { name: "manufacturer"; revision: 10; type: "string"; isReadonly: true } + Property { name: "model"; revision: 10; type: "string"; isReadonly: true } + Property { name: "serialNumber"; revision: 10; type: "string"; isReadonly: true } + Property { name: "width"; type: "int"; isReadonly: true } + Property { name: "height"; type: "int"; isReadonly: true } + Property { name: "desktopAvailableWidth"; type: "int"; isReadonly: true } + Property { name: "desktopAvailableHeight"; type: "int"; isReadonly: true } + Property { name: "logicalPixelDensity"; type: "double"; isReadonly: true } + Property { name: "pixelDensity"; type: "double"; isReadonly: true } + Property { name: "devicePixelRatio"; type: "double"; isReadonly: true } + Property { name: "primaryOrientation"; type: "Qt::ScreenOrientation"; isReadonly: true } + Property { name: "orientation"; type: "Qt::ScreenOrientation"; isReadonly: true } + Property { name: "virtualX"; revision: 3; type: "int"; isReadonly: true } + Property { name: "virtualY"; revision: 3; type: "int"; isReadonly: true } + Signal { name: "manufacturerChanged"; revision: 10 } + Signal { name: "modelChanged"; revision: 10 } + Signal { name: "serialNumberChanged"; revision: 10 } + Signal { name: "desktopGeometryChanged" } + Signal { name: "virtualXChanged"; revision: 3 } + Signal { name: "virtualYChanged"; revision: 3 } + } + Component { + file: "plugin.h" + name: "QQuickWindow" + defaultProperty: "data" + exports: ["QtQuick.Window/Window 2.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "CreateTextureOptions" + alias: "CreateTextureOption" + isFlag: true + values: [ + "TextureHasAlphaChannel", + "TextureHasMipmaps", + "TextureOwnsGLTexture", + "TextureCanUseAtlas", + "TextureIsOpaque" + ] + } + Enum { + name: "SceneGraphError" + values: ["ContextNotAvailable"] + } + Enum { + name: "TextRenderType" + values: ["QtTextRendering", "NativeTextRendering"] + } + Enum { + name: "NativeObjectType" + values: ["NativeObjectTexture"] + } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "color"; type: "QColor" } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { + name: "activeFocusItem" + revision: 1 + type: "QQuickItem" + isReadonly: true + isPointer: true + } + Signal { name: "frameSwapped" } + Signal { + name: "openglContextCreated" + revision: 2 + Parameter { name: "context"; type: "QOpenGLContext"; isPointer: true } + } + Signal { name: "sceneGraphInitialized" } + Signal { name: "sceneGraphInvalidated" } + Signal { name: "beforeSynchronizing" } + Signal { name: "afterSynchronizing"; revision: 2 } + Signal { name: "beforeRendering" } + Signal { name: "afterRendering" } + Signal { name: "afterAnimating"; revision: 2 } + Signal { name: "sceneGraphAboutToStop"; revision: 2 } + Signal { + name: "closing" + revision: 1 + Parameter { name: "close"; type: "QQuickCloseEvent"; isPointer: true } + } + Signal { + name: "colorChanged" + Parameter { type: "QColor" } + } + Signal { name: "activeFocusItemChanged"; revision: 1 } + Signal { + name: "sceneGraphError" + revision: 2 + Parameter { name: "error"; type: "QQuickWindow::SceneGraphError" } + Parameter { name: "message"; type: "string" } + } + Signal { name: "beforeRenderPassRecording"; revision: 14 } + Signal { name: "afterRenderPassRecording"; revision: 14 } + Method { name: "update" } + Method { name: "releaseResources" } + Method { name: "maybeUpdate" } + Method { name: "cleanupSceneGraph" } + Method { name: "physicalDpiChanged" } + Method { + name: "handleScreenChanged" + Parameter { name: "screen"; type: "QScreen"; isPointer: true } + } + Method { + name: "setTransientParent_helper" + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Method { name: "runJobsAfterSwap" } + Method { + name: "handleApplicationStateChanged" + Parameter { name: "state"; type: "Qt::ApplicationState" } + } + } + Component { + file: "plugin.h" + name: "QQuickWindowAttached" + Property { name: "visibility"; type: "QWindow::Visibility"; isReadonly: true } + Property { name: "active"; type: "bool"; isReadonly: true } + Property { name: "activeFocusItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "contentItem"; type: "QQuickItem"; isReadonly: true; isPointer: true } + Property { name: "width"; type: "int"; isReadonly: true } + Property { name: "height"; type: "int"; isReadonly: true } + Property { name: "window"; type: "QQuickWindow"; isReadonly: true; isPointer: true } + Method { + name: "windowChange" + Parameter { type: "QQuickWindow"; isPointer: true } + } + } + Component { + file: "plugin.h" + name: "QQuickWindowQmlImpl" + defaultProperty: "data" + prototype: "QQuickWindow" + exports: [ + "QtQuick.Window/Window 2.1", + "QtQuick.Window/Window 2.14", + "QtQuick.Window/Window 2.2", + "QtQuick.Window/Window 2.3" + ] + exportMetaObjectRevisions: [1, 14, 2, 3] + attachedType: "QQuickWindowAttached" + Property { name: "visible"; type: "bool" } + Property { name: "visibility"; type: "Visibility" } + Property { name: "screen"; revision: 3; type: "QObject"; isPointer: true } + Signal { + name: "visibleChanged" + Parameter { name: "arg"; type: "bool" } + } + Signal { + name: "visibilityChanged" + Parameter { name: "visibility"; type: "QWindow::Visibility" } + } + Signal { name: "screenChanged"; revision: 3 } + Method { name: "setWindowVisibility" } + } + Component { file: "plugin.h"; name: "QWindowForeign" } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/qmldir new file mode 100644 index 0000000..fb6202b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/Window.2/qmldir @@ -0,0 +1,5 @@ +module QtQuick.Window +plugin windowplugin +classname QtQuick2WindowPlugin +typeinfo plugins.qmltypes +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/libqmlxmllistmodelplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/libqmlxmllistmodelplugin.so new file mode 100755 index 0000000..908f089 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/libqmlxmllistmodelplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/plugins.qmltypes new file mode 100644 index 0000000..a2072f2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/plugins.qmltypes @@ -0,0 +1,333 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick.XmlListModel 2.15' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QAbstractItemModel" + prototype: "QObject" + Enum { + name: "LayoutChangeHint" + values: { + "NoLayoutChangeHint": 0, + "VerticalSortHint": 1, + "HorizontalSortHint": 2 + } + } + Enum { + name: "CheckIndexOption" + values: { + "NoOption": 0, + "IndexIsValid": 1, + "DoNotUseParent": 2, + "ParentIsInvalid": 4 + } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + Parameter { name: "roles"; type: "QVector" } + } + Signal { + name: "dataChanged" + Parameter { name: "topLeft"; type: "QModelIndex" } + Parameter { name: "bottomRight"; type: "QModelIndex" } + } + Signal { + name: "headerDataChanged" + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutChanged" } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } + } + Signal { + name: "layoutAboutToBeChanged" + Parameter { name: "parents"; type: "QList" } + } + Signal { name: "layoutAboutToBeChanged" } + Signal { + name: "rowsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "rowsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsInserted" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsAboutToBeRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { + name: "columnsRemoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "first"; type: "int" } + Parameter { name: "last"; type: "int" } + } + Signal { name: "modelAboutToBeReset" } + Signal { name: "modelReset" } + Signal { + name: "rowsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationRow"; type: "int" } + } + Signal { + name: "rowsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "row"; type: "int" } + } + Signal { + name: "columnsAboutToBeMoved" + Parameter { name: "sourceParent"; type: "QModelIndex" } + Parameter { name: "sourceStart"; type: "int" } + Parameter { name: "sourceEnd"; type: "int" } + Parameter { name: "destinationParent"; type: "QModelIndex" } + Parameter { name: "destinationColumn"; type: "int" } + } + Signal { + name: "columnsMoved" + Parameter { name: "parent"; type: "QModelIndex" } + Parameter { name: "start"; type: "int" } + Parameter { name: "end"; type: "int" } + Parameter { name: "destination"; type: "QModelIndex" } + Parameter { name: "column"; type: "int" } + } + Method { name: "submit"; type: "bool" } + Method { name: "revert" } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "hasIndex" + type: "bool" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "index" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + } + Method { + name: "parent" + type: "QModelIndex" + Parameter { name: "child"; type: "QModelIndex" } + } + Method { + name: "sibling" + type: "QModelIndex" + Parameter { name: "row"; type: "int" } + Parameter { name: "column"; type: "int" } + Parameter { name: "idx"; type: "QModelIndex" } + } + Method { + name: "rowCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "rowCount"; type: "int" } + Method { + name: "columnCount" + type: "int" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "columnCount"; type: "int" } + Method { + name: "hasChildren" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { name: "hasChildren"; type: "bool" } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "data" + type: "QVariant" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "setData" + type: "bool" + Parameter { name: "index"; type: "QModelIndex" } + Parameter { name: "value"; type: "QVariant" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + Parameter { name: "role"; type: "int" } + } + Method { + name: "headerData" + type: "QVariant" + Parameter { name: "section"; type: "int" } + Parameter { name: "orientation"; type: "Qt::Orientation" } + } + Method { + name: "fetchMore" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "canFetchMore" + type: "bool" + Parameter { name: "parent"; type: "QModelIndex" } + } + Method { + name: "flags" + type: "Qt::ItemFlags" + Parameter { name: "index"; type: "QModelIndex" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + Parameter { name: "flags"; type: "Qt::MatchFlags" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + Parameter { name: "hits"; type: "int" } + } + Method { + name: "match" + type: "QModelIndexList" + Parameter { name: "start"; type: "QModelIndex" } + Parameter { name: "role"; type: "int" } + Parameter { name: "value"; type: "QVariant" } + } + } + Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } + Component { + name: "QQuickXmlListModel" + defaultProperty: "roles" + prototype: "QAbstractListModel" + exports: ["QtQuick.XmlListModel/XmlListModel 2.0"] + exportMetaObjectRevisions: [0] + Enum { + name: "Status" + values: { + "Null": 0, + "Ready": 1, + "Loading": 2, + "Error": 3 + } + } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "progress"; type: "double"; isReadonly: true } + Property { name: "source"; type: "QUrl" } + Property { name: "xml"; type: "string" } + Property { name: "query"; type: "string" } + Property { name: "namespaceDeclarations"; type: "string" } + Property { name: "roles"; type: "QQuickXmlListModelRole"; isList: true; isReadonly: true } + Property { name: "count"; type: "int"; isReadonly: true } + Signal { + name: "statusChanged" + Parameter { type: "QQuickXmlListModel::Status" } + } + Signal { + name: "progressChanged" + Parameter { name: "progress"; type: "double" } + } + Method { name: "reload" } + Method { + name: "get" + type: "QJSValue" + Parameter { name: "index"; type: "int" } + } + Method { name: "errorString"; type: "string" } + } + Component { + name: "QQuickXmlListModelRole" + prototype: "QObject" + exports: ["QtQuick.XmlListModel/XmlRole 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "name"; type: "string" } + Property { name: "query"; type: "string" } + Property { name: "isKey"; type: "bool" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/qmldir new file mode 100644 index 0000000..1f17dbb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick/XmlListModel/qmldir @@ -0,0 +1,5 @@ +module QtQuick.XmlListModel +plugin qmlxmllistmodelplugin +classname QmlXmlListModelPlugin +typeinfo plugins.qmltypes +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/AdditiveColorGradient.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/AdditiveColorGradient.qml new file mode 100644 index 0000000..0325114 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/AdditiveColorGradient.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property vector3d bottomColor: Qt.vector3d(0.0, 0.0, 0.0) + property vector3d topColor: Qt.vector3d(1.0, 1.0, 1.0) + + Shader { + id: additivecolorgradient + stage: Shader.Fragment + shader: "shaders/additivecolorgradient.frag" + } + + passes: [ + Pass { + shaders: additivecolorgradient + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Blur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Blur.qml new file mode 100644 index 0000000..9a224e1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Blur.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real amount: 0.01 + + Shader { + id: blur + stage: Shader.Fragment + shader: "shaders/blur.frag" + } + + passes: [ + Pass { + shaders: blur + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/BrushStrokes.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/BrushStrokes.qml new file mode 100644 index 0000000..11fecd7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/BrushStrokes.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property TextureInput noiseSample: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/brushnoise.png" + } + } + property real brushLength: 1.0 // 0 - 3 + property real brushSize: 100.0 // 10 - 200 + property real brushAngle: 45.0 + readonly property real sinAlpha: Math.sin(degrees_to_radians(brushAngle)) + readonly property real cosAlpha: Math.cos(degrees_to_radians(brushAngle)) + + function degrees_to_radians(degrees) { + var pi = Math.PI; + return degrees * (pi/180); + } + + Shader { + id: brushstrokes + stage: Shader.Fragment + shader: "shaders/brushstrokes.frag" + } + + passes: [ + Pass { + shaders: brushstrokes + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/ChromaticAberration.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/ChromaticAberration.qml new file mode 100644 index 0000000..25f3ec1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/ChromaticAberration.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property TextureInput maskTexture: TextureInput { + texture: Texture { + source: "maps/white.png" + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + } + } + readonly property TextureInput sourceTexture: TextureInput { + texture: Texture {} + } + readonly property TextureInput depthTexture: TextureInput { + texture: Texture {} + } + property real aberrationAmount: 50 + property real focusDepth: 600 + + Shader { + id: chromaticAberration + stage: Shader.Fragment + shader: "shaders/chromaticaberration.frag" + } + + passes: [ + Pass { + shaders: chromaticAberration + commands: [ + BufferInput { + param: "sourceTexture" + }, + DepthInput { + param: "depthTexture" + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/ColorMaster.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/ColorMaster.qml new file mode 100644 index 0000000..1c8551f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/ColorMaster.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real redStrength: 1.0 // 0 - 2 + property real greenStrength: 1.5 // 0 - 2 + property real blueStrength: 1.0 // 0 - 2 + property real saturation: 0.0 // -1 - 1 + + Shader { + id: colormaster + stage: Shader.Fragment + shader: "shaders/colormaster.frag" + } + + passes: [ + Pass { + shaders: colormaster + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DepthOfFieldHQBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DepthOfFieldHQBlur.qml new file mode 100644 index 0000000..7312e99 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DepthOfFieldHQBlur.qml @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + readonly property TextureInput sourceSampler: TextureInput { + texture: Texture {} + } + readonly property TextureInput depthSampler: TextureInput { + texture: Texture {} + } + property real focusDistance: 600 + property real focusRange: 100 + property real blurAmount: 4 + + Shader { + id: downsampleVert + stage: Shader.Vertex + shader: "shaders/downsample.vert" + } + Shader { + id: downsampleFrag + stage: Shader.Fragment + shader: "shaders/downsample.frag" + } + + Shader { + id: blurVert + stage: Shader.Vertex + shader: "shaders/depthoffieldblur.vert" + } + Shader { + id: blurFrag + stage: Shader.Fragment + shader: "shaders/depthoffieldblur.frag" + } + + Buffer { + id: downsampleBuffer + name: "downsampleBuffer" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.None + sizeMultiplier: 0.5 + } + + passes: [ + Pass { + shaders: [ downsampleVert, downsampleFrag ] + commands: BufferInput { + param: "depthSampler" + } + output: downsampleBuffer + }, + Pass { + shaders: [ blurVert, blurFrag ] + commands: [ + BufferInput { + buffer: downsampleBuffer + }, + BufferInput { + param: "sourceSampler" + }, + DepthInput { + param: "depthSampler" + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Desaturate.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Desaturate.qml new file mode 100644 index 0000000..e08ee0d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Desaturate.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real amount: 0.5 + + Shader { + id: desaturate + stage: Shader.Fragment + shader: "shaders/desaturate.frag" + } + + passes: [ + Pass { + shaders: desaturate + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionRipple.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionRipple.qml new file mode 100644 index 0000000..2c18b10 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionRipple.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real radius: 100.0 // 0 - 100 + property real distortionWidth: 10.0 // 2 - 100 + property real distortionHeight: 10.0 // 0 - 100 + property real distortionPhase: 0.0 // 0 - 360 + property vector2d center: Qt.vector2d(0.5, 0.5) + + Shader { + id: distortionVert + stage: Shader.Vertex + shader: "shaders/distortion.vert" + } + + Shader { + id: distortionFrag + stage: Shader.Fragment + shader: "shaders/distortionripple.frag" + } + + passes: [ + Pass { + shaders: [ distortionVert, distortionFrag ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionSphere.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionSphere.qml new file mode 100644 index 0000000..3ff0779 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionSphere.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real radius: 0.25 // 0 - 1 + property real distortionHeight: 0.5 // -1 - 1 + property vector2d center: Qt.vector2d(0.5, 0.5) + + Shader { + id: distortionVert + stage: Shader.Vertex + shader: "shaders/distortion.vert" + } + + Shader { + id: distortionFrag + stage: Shader.Fragment + shader: "shaders/distortionsphere.frag" + } + + passes: [ + Pass { + shaders: [ distortionVert, distortionFrag ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionSpiral.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionSpiral.qml new file mode 100644 index 0000000..ddfea6f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/DistortionSpiral.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real radius: 0.25 // 0 - 1 + property real distortionStrength: 1.0 // -10 - 10 + property vector2d center: Qt.vector2d(0.5, 0.5) + + Shader { + id: distortionVert + stage: Shader.Vertex + shader: "shaders/distortion.vert" + } + + Shader { + id: distortionFrag + stage: Shader.Fragment + shader: "shaders/distortionspiral.frag" + } + + passes: [ + Pass { + shaders: [ distortionVert, distortionFrag ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/EdgeDetect.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/EdgeDetect.qml new file mode 100644 index 0000000..4f24357 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/EdgeDetect.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real edgeStrength: 0.5 // 0 - 1 + + Shader { + id: edgeVert + stage: Shader.Vertex + shader: "shaders/edgedetect.vert" + } + + Shader { + id: edgeFrag + stage: Shader.Fragment + shader: "shaders/edgedetect.frag" + } + + passes: [ + Pass { + shaders: [ edgeVert, edgeFrag ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Emboss.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Emboss.qml new file mode 100644 index 0000000..dc6feb5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Emboss.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real amount: 0.003 // 0 - 0.01 + + Shader { + id: emboss + stage: Shader.Fragment + shader: "shaders/emboss.frag" + } + + passes: [ + Pass { + shaders: emboss + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Flip.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Flip.qml new file mode 100644 index 0000000..c219aee --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Flip.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property bool flipHorizontally: true + property bool flipVertically: true + + Shader { + id: flip + stage: Shader.Fragment + shader: "shaders/flip.frag" + } + + passes: [ + Pass { + shaders: flip + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Fxaa.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Fxaa.qml new file mode 100644 index 0000000..fda483d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Fxaa.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + readonly property TextureInput sprite: TextureInput { + texture: Texture {} + } + + Shader { + id: rgbl + stage: Shader.Fragment + shader: "shaders/fxaaRgbl.frag" + } + Shader { + id: blur + stage: Shader.Fragment + shader: "shaders/fxaaBlur.frag" + } + Buffer { + id: rgblBuffer + name: "rgbl_buffer" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.None // aka frame + } + + passes: [ + Pass { + shaders: rgbl + output: rgblBuffer + }, + Pass { + shaders: blur + commands: [ BufferInput { + buffer: rgblBuffer + }, BufferInput { + param: "sprite" + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/GaussianBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/GaussianBlur.qml new file mode 100644 index 0000000..da9605f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/GaussianBlur.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real amount: 2 // 0 - 10 + Shader { + id: vertical + stage: Shader.Vertex + shader: "shaders/blurvertical.vert" + } + Shader { + id: horizontal + stage: Shader.Vertex + shader: "shaders/blurhorizontal.vert" + } + Shader { + id: gaussianblur + stage: Shader.Fragment + shader: "shaders/gaussianblur.frag" + } + + Buffer { + id: tempBuffer + name: "tempBuffer" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.None // aka frame + } + + passes: [ + Pass { + shaders: [ horizontal, gaussianblur ] + output: tempBuffer + }, + Pass { + shaders: [ vertical, gaussianblur ] + commands: [ + BufferInput { + buffer: tempBuffer + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/HDRBloomTonemap.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/HDRBloomTonemap.qml new file mode 100644 index 0000000..59351cd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/HDRBloomTonemap.qml @@ -0,0 +1,155 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + readonly property TextureInput downsample2: TextureInput { + texture: Texture {} + } + readonly property TextureInput downsample4: TextureInput { + texture: Texture {} + } + property real gamma: 1 // 0.1 - 4 + property real exposure: 0 // -9 - 9 + readonly property real exposureExp2: Math.pow(2, exposure) + property real bloomThreshold: 1 + property real blurFalloff: 0 // 0 - 10 + readonly property real negativeBlurFalloffExp2: Math.pow(2, -blurFalloff) + property real tonemappingLerp: 1 // 0 - 1 + property real channelThreshold: 1 + readonly property real poissonRotation: 0 + readonly property real poissonDistance: 4 + + Shader { + id: luminosityVert + stage: Shader.Vertex + shader: "shaders/luminosity.vert" + } + Shader { + id: luminosityFrag + stage: Shader.Fragment + shader: "shaders/luminosity.frag" + } + + Shader { + id: blurVert + stage: Shader.Vertex + shader: "shaders/poissonblur.vert" + } + Shader { + id: blurFrag + stage: Shader.Fragment + shader: "shaders/poissonblur.frag" + } + + Shader { + id: combiner + stage: Shader.Fragment + shader: "shaders/combiner.frag" + } + + Buffer { + id: luminosity_buffer2 + name: "luminosity_buffer2" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.None + sizeMultiplier: 0.5 + } + Buffer { + id: downsample_buffer2 + name: "downsample_buffer2" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.None + sizeMultiplier: 0.5 + } + Buffer { + id: downsample_buffer4 + name: "downsample_buffer4" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.None + sizeMultiplier: 0.25 + } + + passes: [ + Pass { + shaders: [ luminosityVert, luminosityFrag ] + output: downsample_buffer2 + }, + Pass { + shaders: [ luminosityVert, luminosityFrag ] + commands: BufferInput { + buffer: downsample_buffer2 + } + output: luminosity_buffer2 + }, + Pass { + shaders: [ blurVert, blurFrag ] + commands: BufferInput { + buffer: luminosity_buffer2 + } + output: downsample_buffer2 + }, + Pass { + + shaders: [ blurVert, blurFrag ] + commands: [ + SetUniformValue { + target: "poissonRotation" + value: 0.62831 + }, + BufferInput { + buffer: luminosity_buffer2 + } + ] + output: downsample_buffer4 + }, + Pass { + shaders: combiner + commands: [ + BufferInput { + param: "downsample2" + buffer: downsample_buffer2 + }, + BufferInput { + param: "downsample4" + buffer: downsample_buffer4 + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/MotionBlur.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/MotionBlur.qml new file mode 100644 index 0000000..8ffd763 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/MotionBlur.qml @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + readonly property TextureInput sprite: TextureInput { + texture: Texture {} + } + property real fadeAmount: 0.25 // 0 - 1 + property real blurQuality: 0.25 // 0.1 - 1.0 + + Shader { + id: vblurVert + stage: Shader.Vertex + shader: "shaders/motionblurvertical.vert" + } + Shader { + id: vblurFrag + stage: Shader.Fragment + shader: "shaders/motionblurvertical.frag" + } + + Shader { + id: hblurVert + stage: Shader.Vertex + shader: "shaders/motionblurhorizontal.vert" + } + Shader { + id: hblurFrag + stage: Shader.Fragment + shader: "shaders/motionblurhorizontal.frag" + } + + Shader { + id: blend + stage: Shader.Fragment + shader: "shaders/blend.frag" + } + + Buffer { + id: glowBuffer + name: "glowBuffer" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Nearest + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.SceneLifetime + sizeMultiplier: blurQuality + } + + Buffer { + id: tempBuffer + name: "tempBuffer" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.None + sizeMultiplier: blurQuality + } + + passes: [ + Pass { + shaders: [ hblurVert, hblurFrag ] + commands: [ + BufferInput { + param: "glowSampler" + buffer: glowBuffer + } + ] + output: tempBuffer + }, + Pass { + shaders: [ vblurVert, vblurFrag ] + commands: [ + BufferInput { + buffer: tempBuffer + } + ] + output: glowBuffer + }, + Pass { + shaders: blend + commands: [ + BufferInput { + buffer: glowBuffer + }, + BufferInput { + param: "sprite" + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/SCurveTonemap.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/SCurveTonemap.qml new file mode 100644 index 0000000..589558b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/SCurveTonemap.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.14 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real shoulderSlope: 1.0 // 0.0 - 3.0 + property real shoulderEmphasis: 0 // -1.0 - 1.0 + property real toeSlope: 1.0 // 0.0 - 3.0 + property real toeEmphasis: 0 // -1.0 - 1.0 + property real contrastBoost: 0 // -1.0 - 2.0 + property real saturationLevel: 1 // 0.0 - 2.0 + property real gammaValue: 2.2 // 0.1 - 8.0 + property bool useExposure: false + property real whitePoint: 1.0 // 0.01 - 128.0 + property real exposureValue: 1.0 // 0.01 - 16.0 + + Shader { + id: tonemapShader + stage: Shader.Fragment + shader: "shaders/scurvetonemap.frag" + } + + Buffer { + // LDR output + id: defaultOutput + format: Buffer.RGBA8 + } + + passes: [ + Pass { + shaders: tonemapShader + output: defaultOutput + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Scatter.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Scatter.qml new file mode 100644 index 0000000..1afadab --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Scatter.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property TextureInput noiseSample: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/brushnoise.png" + } + } + property real amount: 10.0 // 0 - 127 + property int direction: 0 // 0 = both, 1 = horizontal, 2 = vertical + property bool randomize: true + + Shader { + id: scatter + stage: Shader.Fragment + shader: "shaders/scatter.frag" + } + + passes: [ + Pass { + shaders: [ scatter ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/TiltShift.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/TiltShift.qml new file mode 100644 index 0000000..d09e7c3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/TiltShift.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + readonly property TextureInput sourceSampler: TextureInput { + texture: Texture {} + } + property real focusPosition: 0.5 // 0 - 1 + property real focusWidth: 0.2 // 0 - 1 + property real blurAmount: 4 // 0 - 10 + property bool isVertical: false + property bool isInverted: false + + Shader { + id: downsampleVert + stage: Shader.Vertex + shader: "shaders/downsample.vert" + } + Shader { + id: downsampleFrag + stage: Shader.Fragment + shader: "shaders/downsampletiltshift.frag" + } + + Shader { + id: blurVert + stage: Shader.Vertex + shader: "shaders/poissonblurtiltshift.vert" + } + Shader { + id: blurFrag + stage: Shader.Fragment + shader: "shaders/poissonblurtiltshift.frag" + } + + Buffer { + id: downsampleBuffer + name: "downsampleBuffer" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + bufferFlags: Buffer.None + sizeMultiplier: 0.5 + } + + passes: [ + Pass { + shaders: [ downsampleVert, downsampleFrag ] + output: downsampleBuffer + }, + Pass { + shaders: [ blurVert, blurFrag ] + commands: [ + BufferInput { + buffer: downsampleBuffer + }, + BufferInput { + param: "sourceSampler" + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Vignette.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Vignette.qml new file mode 100644 index 0000000..cc12e05 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/Vignette.qml @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + property real vignetteStrength: 15 // 0 - 15 + property vector3d vignetteColor: Qt.vector3d(0.5, 0.5, 0.5) + property real vignetteRadius: 0.35 // 0 - 5 + + Shader { + id: vignette + stage: Shader.Fragment + shader: "shaders/vignette.frag" + } + + passes: [ + Pass { + shaders: vignette + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSection.qml new file mode 100644 index 0000000..86021dc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSection.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + Section { + caption: qsTr("Additive Color Gradient") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Top Color") } + + ColorEditor { + backendValue: backendValues.topColor + supportGradient: false + isVector3D: true + } + + PropertyLabel { text: qsTr("Bottom Color") } + + ColorEditor { + backendValue: backendValues.ambientColor + supportGradient: false + isVector3D: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSpecifics.qml new file mode 100644 index 0000000..8a215c0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/AdditiveColorGradientSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + AdditiveColorGradientSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BlurSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BlurSection.qml new file mode 100644 index 0000000..f517fa1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BlurSection.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Blur") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Strength of the blur.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 0.1 + minimumValue: 0 + decimals: 3 + stepSize: 0.01 + backendValue: backendValues.amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BlurSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BlurSpecifics.qml new file mode 100644 index 0000000..eac297a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BlurSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + BlurSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BrushStrokesSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BrushStrokesSection.qml new file mode 100644 index 0000000..2f7d94c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BrushStrokesSection.qml @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Noise") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Noise Sample Texture") + tooltip: qsTr("Defines a texture for noise samples.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.noiseSample_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Brush") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Length") + tooltip: qsTr("Length of the brush.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 3 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.brushLength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Size") + tooltip: qsTr("Size of the brush.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 200 + minimumValue: 10 + decimals: 0 + backendValue: backendValues.brushSize + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Angle") + tooltip: qsTr("Angle of the brush") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 360 + minimumValue: 0 + decimals: 0 + backendValue: backendValues.brushAngle + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BrushStrokesSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BrushStrokesSpecifics.qml new file mode 100644 index 0000000..f5790a1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/BrushStrokesSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + BrushStrokesSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ChromaticAberrationSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ChromaticAberrationSection.qml new file mode 100644 index 0000000..7024e22 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ChromaticAberrationSection.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Mask") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Mask Texture") + tooltip: qsTr("Defines a texture for mask.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.maskTexture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Aberration") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Amount of aberration.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1000 + minimumValue: -1000 + decimals: 0 + backendValue: backendValues.aberrationAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Focus Depth") + tooltip: qsTr("Focus depth of the aberration.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 10000 + minimumValue: 0 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.focusDepth + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ChromaticAberrationSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ChromaticAberrationSpecifics.qml new file mode 100644 index 0000000..0df8434 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ChromaticAberrationSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + ChromaticAberrationSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ColorMasterSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ColorMasterSection.qml new file mode 100644 index 0000000..bf603dc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ColorMasterSection.qml @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Colors") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Red Strength") + tooltip: qsTr("Red strength.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 2 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.redStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Green Strength") + tooltip: qsTr("Green strength.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 2 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.greenStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Blue Strength") + tooltip: qsTr("Blue strength.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 2 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.blueStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Saturation") + tooltip: qsTr("Color saturation.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: -1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.saturation + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ColorMasterSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ColorMasterSpecifics.qml new file mode 100644 index 0000000..28ad864 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ColorMasterSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + ColorMasterSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSection.qml new file mode 100644 index 0000000..83b0d0b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSection.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Blur") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Blur Amount") + tooltip: qsTr("Amount of blur.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 50 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.blurAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Focus Distance") + tooltip: qsTr("Focus distance of the blur.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 5000 + minimumValue: 0 + decimals: 0 + backendValue: backendValues.focusDistance + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Focus Range") + tooltip: qsTr("Focus range of the blur.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 5000 + minimumValue: 0 + decimals: 0 + backendValue: backendValues.focusRange + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSpecifics.qml new file mode 100644 index 0000000..05323c0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DepthOfFieldHQBlurSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + DepthOfFieldHQBlurSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DesaturateSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DesaturateSection.qml new file mode 100644 index 0000000..d5e22f8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DesaturateSection.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Desaturate") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Strength of the desaturate.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: -1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DesaturateSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DesaturateSpecifics.qml new file mode 100644 index 0000000..e8bd050 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DesaturateSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + DesaturateSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionRippleSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionRippleSection.qml new file mode 100644 index 0000000..379a8eb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionRippleSection.qml @@ -0,0 +1,157 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Distortion Ripple") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Radius") + tooltip: qsTr("Radius of the effect.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 100 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.radius + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Width") + tooltip: qsTr("Width of the distortion.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 100 + minimumValue: 2 + decimals: 2 + backendValue: backendValues.distortionWidth + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Height") + tooltip: qsTr("Height of the distortion.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 100 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.distortionHeight + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Phase") + tooltip: qsTr("Phase of the distortion.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 360 + minimumValue: 0 + decimals: 0 + backendValue: backendValues.distortionPhase + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Center") + tooltip: qsTr("Center of the distortion.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.center_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.center_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionRippleSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionRippleSpecifics.qml new file mode 100644 index 0000000..7e786a0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionRippleSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + DistortionRippleSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSphereSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSphereSection.qml new file mode 100644 index 0000000..44248ce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSphereSection.qml @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Distortion Sphere") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Radius") + tooltip: qsTr("Radius of the effect.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.radius + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Height") + tooltip: qsTr("Height of the distortion.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: -1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.distortionHeight + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Center") + tooltip: qsTr("Center of the distortion.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.center_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.center_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSphereSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSphereSpecifics.qml new file mode 100644 index 0000000..8b2acdd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSphereSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + DistortionSphereSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSpiralSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSpiralSection.qml new file mode 100644 index 0000000..386ea39 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSpiralSection.qml @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Distortion Spiral") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Radius") + tooltip: qsTr("Radius of the effect.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.radius + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Strength") + tooltip: qsTr("Strength of the distortion.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 10 + minimumValue: -10 + decimals: 2 + backendValue: backendValues.distortionStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Center") + tooltip: qsTr("Center of the distortion.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.center_x + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.center_y + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSpiralSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSpiralSpecifics.qml new file mode 100644 index 0000000..1cebde6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/DistortionSpiralSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + DistortionSpiralSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EdgeDetectSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EdgeDetectSection.qml new file mode 100644 index 0000000..c7b0c57 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EdgeDetectSection.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Edge Detect") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Strength") + tooltip: qsTr("Strength of the edge.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.edgeStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EdgeDetectSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EdgeDetectSpecifics.qml new file mode 100644 index 0000000..0d920cb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EdgeDetectSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EdgeDetectSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EffectSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EffectSection.qml new file mode 100644 index 0000000..189ecd2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EffectSection.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Section { + caption: qsTr("Effect") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Passes") + tooltip: qsTr("Render passes of the effect.") + Layout.alignment: Qt.AlignTop + Layout.topMargin: 5 + } + + SecondColumnLayout { + EditableListView { + backendValue: backendValues.passes + model: backendValues.passes.expressionAsList + Layout.fillWidth: true + typeFilter: "QtQuick3D.Pass" + + onAdd: function(value) { backendValues.passes.idListAdd(value) } + onRemove: function(idx) { backendValues.passes.idListRemove(idx) } + onReplace: function (idx, value) { backendValues.passes.idListReplace(idx, value) } + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EffectSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EffectSpecifics.qml new file mode 100644 index 0000000..e322b78 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EffectSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EffectSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EmbossSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EmbossSection.qml new file mode 100644 index 0000000..223f7cc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EmbossSection.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Emboss") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Strength of the emboss.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 0.01 + minimumValue: 0 + decimals: 4 + stepSize: 0.001 + backendValue: backendValues.amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EmbossSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EmbossSpecifics.qml new file mode 100644 index 0000000..a8fb19f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/EmbossSpecifics.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + EmbossSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FlipSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FlipSection.qml new file mode 100644 index 0000000..426dd8d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FlipSection.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + Section { + caption: qsTr("Flip") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Horizontal") + tooltip: qsTr("Flip horizontally.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.flipHorizontally.valueToString + backendValue: backendValues.flipHorizontally + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Vertical") + tooltip: qsTr("Flip vertically.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.flipVertically.valueToString + backendValue: backendValues.flipVertically + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FlipSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FlipSpecifics.qml new file mode 100644 index 0000000..c77e951 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FlipSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + FlipSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FxaaSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FxaaSection.qml new file mode 100644 index 0000000..f1a2a9c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FxaaSection.qml @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + // Fxaa effect has no modifiable properties +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FxaaSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FxaaSpecifics.qml new file mode 100644 index 0000000..eae8125 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/FxaaSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + FxaaSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/GaussianBlurSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/GaussianBlurSection.qml new file mode 100644 index 0000000..a74446f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/GaussianBlurSection.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Gaussian Blur") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Strength of the blur.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 10 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/GaussianBlurSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/GaussianBlurSpecifics.qml new file mode 100644 index 0000000..8ad52a2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/GaussianBlurSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + GaussianBlurSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSection.qml new file mode 100644 index 0000000..87da556 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSection.qml @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Tonemap") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Gamma") + tooltip: qsTr("Amount of gamma.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 4 + minimumValue: 0.1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.gamma + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Exposure") + tooltip: qsTr("Amount of exposure.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9 + minimumValue: -9 + decimals: 2 + backendValue: backendValues.exposure + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Blur Falloff") + tooltip: qsTr("Amount of blur falloff.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 10 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.blurFalloff + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Tonemapping Lerp") + tooltip: qsTr("Tonemapping linear interpolation value.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.tonemappingLerp + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Bloom Threshold") + tooltip: qsTr("Bloom color threshold value.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 3 + stepSize: 0.1 + backendValue: backendValues.bloomThreshold + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Channel Threshold") + tooltip: qsTr("Channel color threshold value.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 3 + stepSize: 0.1 + backendValue: backendValues.channelThreshold + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSpecifics.qml new file mode 100644 index 0000000..d7dcabb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/HDRBloomTonemapSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + HDRBloomTonemapSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/IdComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/IdComboBox.qml new file mode 100644 index 0000000..094039c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/IdComboBox.qml @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import HelperWidgets 2.0 + +ComboBox { + id: comboBox + + property alias typeFilter: itemFilterModel.typeFilter + + manualMapping: true + editable: true + model: comboBox.addDefaultItem(itemFilterModel.itemModel) + + textInput.validator: RegExpValidator { regExp: /(^$|^[a-z_]\w*)/ } + + ItemFilterModel { + id: itemFilterModel + modelNodeBackendProperty: modelNodeBackend + } + + property string defaultItem: qsTr("None") + property string textValue: comboBox.backendValue.expression + property bool block: false + property bool dirty: true + property var editRegExp: /^[a-z_]\w*/ + + onTextValueChanged: { + if (comboBox.block) + return + + comboBox.setCurrentText(comboBox.textValue) + } + onModelChanged: comboBox.setCurrentText(comboBox.textValue) + onCompressedActivated: function(index, reason) { comboBox.handleActivate(index) } + Component.onCompleted: comboBox.setCurrentText(comboBox.textValue) + + onEditTextChanged: { + comboBox.dirty = true + colorLogic.errorState = !(editRegExp.exec(comboBox.editText) !== null + || comboBox.editText === parenthesize(defaultItem)) + } + onFocusChanged: { + if (comboBox.dirty) + comboBox.handleActivate(comboBox.currentIndex) + } + + function handleActivate(index) + { + if (!comboBox.__isCompleted || comboBox.backendValue === undefined) + return + + var cText = (index === -1) ? comboBox.editText : comboBox.textAt(index) + comboBox.block = true + comboBox.setCurrentText(cText) + comboBox.block = false + } + + function setCurrentText(text) + { + if (!comboBox.__isCompleted || comboBox.backendValue === undefined) + return + + comboBox.currentIndex = comboBox.find(text) + + if (text === "") { + comboBox.currentIndex = 0 + comboBox.editText = parenthesize(comboBox.defaultItem) + } else { + if (comboBox.currentIndex === -1) + comboBox.editText = text + else if (comboBox.currentIndex === 0) + comboBox.editText = parenthesize(comboBox.defaultItem) + } + + if (comboBox.currentIndex === 0) { + comboBox.backendValue.resetValue() + } else { + if (comboBox.backendValue.expression !== comboBox.editText) + comboBox.backendValue.expression = comboBox.editText + } + comboBox.dirty = false + } + + function addDefaultItem(arr) + { + var copy = arr.slice() + copy.unshift(parenthesize(comboBox.defaultItem)) + return copy + } + + function parenthesize(value) + { + return "[" + value + "]" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/MotionBlurSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/MotionBlurSection.qml new file mode 100644 index 0000000..fb57f23 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/MotionBlurSection.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Motion Blur") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Fade Amount") + tooltip: qsTr("Specifies how much the blur fades away each frame.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.fadeAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Quality") + tooltip: qsTr("Blur quality.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0.1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.blurQuality + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/MotionBlurSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/MotionBlurSpecifics.qml new file mode 100644 index 0000000..31de28c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/MotionBlurSpecifics.qml @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +Column { + width: parent.width + + MotionBlurSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/SCurveTonemapSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/SCurveTonemapSection.qml new file mode 100644 index 0000000..4ace941 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/SCurveTonemapSection.qml @@ -0,0 +1,236 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Curve") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Shoulder Slope") + tooltip: qsTr("Set the slope of the curve shoulder.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 3 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.shoulderSlope + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Shoulder Emphasis") + tooltip: qsTr("Set the emphasis of the curve shoulder.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: -1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.shoulderEmphasis + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Toe Slope") + tooltip: qsTr("Set the slope of the curve toe.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 3 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.toeSlope + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Toe Emphasis") + tooltip: qsTr("Set the emphasis of the curve toe.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: -1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.toeEmphasis + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Color") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Contrast Boost") + tooltip: qsTr("Set the contrast boost amount.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 2 + minimumValue: -1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.contrastBoost + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Saturation Level") + tooltip: qsTr("Set the color saturation level.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 2 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.saturationLevel + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Gamma") + tooltip: qsTr("Set the gamma value.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 8 + minimumValue: 0.1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.gammaValue + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Use Exposure") + tooltip: qsTr("Specifies if the exposure or white point should be used.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.useExposure.valueToString + backendValue: backendValues.useExposure + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("White Point") + tooltip: qsTr("Set the white point value.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 128 + minimumValue: 0.01 + decimals: 2 + backendValue: backendValues.whitePoint + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Exposure") + tooltip: qsTr("Set the exposure value.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 16 + minimumValue: 0.01 + decimals: 2 + backendValue: backendValues.exposureValue + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/SCurveTonemapSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/SCurveTonemapSpecifics.qml new file mode 100644 index 0000000..863d02a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/SCurveTonemapSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + SCurveTonemapSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ScatterSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ScatterSection.qml new file mode 100644 index 0000000..ea616ec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ScatterSection.qml @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Noise") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Noise Sample Texture") + tooltip: qsTr("Defines a texture for noise samples.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.noiseSample_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Scatter") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Amount of scatter.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 127 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Direction") + tooltip: qsTr("Direction of scatter. 0 = both, 1 = horizontal, 2 = vertical.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 2 + minimumValue: 0 + decimals: 0 + backendValue: backendValues.direction + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Randomize") + tooltip: qsTr("Specifies if the scatter is random.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.randomize.valueToString + backendValue: backendValues.randomize + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ScatterSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ScatterSpecifics.qml new file mode 100644 index 0000000..397c78c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/ScatterSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + ScatterSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/TiltShiftSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/TiltShiftSection.qml new file mode 100644 index 0000000..c1a6813 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/TiltShiftSection.qml @@ -0,0 +1,132 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Tilt Shift") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Focus Position") + tooltip: qsTr("Set the focus position.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.focusPosition + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Focus Width") + tooltip: qsTr("Set the focus width.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.focusWidth + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Blur Amount") + tooltip: qsTr("Set the blur amount.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 10 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.blurAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Vertical") + tooltip: qsTr("Specifies if the tilt shift is vertical.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.isVertical.valueToString + backendValue: backendValues.isVertical + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Inverted") + tooltip: qsTr("Specifies if the tilt shift is inverted.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.isInverted.valueToString + backendValue: backendValues.isInverted + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/TiltShiftSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/TiltShiftSpecifics.qml new file mode 100644 index 0000000..ab571f9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/TiltShiftSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + TiltShiftSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/VignetteSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/VignetteSection.qml new file mode 100644 index 0000000..73ba7cb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/VignetteSection.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Vignette") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Strength") + tooltip: qsTr("Set the vignette strength.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 15 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.vignetteStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Radius") + tooltip: qsTr("Set the vignette radius.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 5 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.vignetteRadius + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Vignette Color") } + + ColorEditor { + backendValue: backendValues.vignetteColor + supportGradient: false + isVector3D: true + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/VignetteSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/VignetteSpecifics.qml new file mode 100644 index 0000000..ec574c3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/VignetteSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + VignetteSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/effectlib.metainfo b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/effectlib.metainfo new file mode 100644 index 0000000..870ec86 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/effectlib.metainfo @@ -0,0 +1,421 @@ +MetaInfo { + Type { + name: "QtQuick3D.Effects.AdditiveColorGradient" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Additive Color Gradient" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Blur" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Blur" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.BrushStrokes" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Brush Strokes" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.ChromaticAberration" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Chromatic Aberration" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.ColorMaster" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Color Master" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.DepthOfFieldHQBlur" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Depth of Field HQ Blur" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Desaturate" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Desaturate" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.DistortionRipple" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Distortion Ripple" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.DistortionSphere" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Distortion Sphere" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.DistortionSpiral" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Distortion Spiral" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.EdgeDetect" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Edge Detect" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Emboss" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Emboss" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Flip" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Flip" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Fxaa" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Fxaa" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.GaussianBlur" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Gaussian Blur" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.HDRBloomTonemap" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "HDR Bloom Tonemap" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.MotionBlur" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Motion Blur" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Scatter" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Scatter" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.SCurveTonemap" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "SCurve Tonemap" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.TiltShift" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Tilt Shift" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Vignette" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Vignette" + category: "Qt Quick 3D Effects" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + } + } + Type { + name: "QtQuick3D.Effects.Effect" + icon: "images/effect16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Effect" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/effect.png" + version: "1.15" + requiredImport: "QtQuick3D.Effects" + QmlSource { source: "./source/effect_template.qml" } + ExtraFile { source: "./source/effect_default_shader.frag" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect.png new file mode 100644 index 0000000..8f9f288 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect16.png new file mode 100644 index 0000000..93fbc03 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect@2x.png new file mode 100644 index 0000000..204f50e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/images/effect@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/source/effect_default_shader.frag b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/source/effect_default_shader.frag new file mode 100644 index 0000000..8eea4a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/source/effect_default_shader.frag @@ -0,0 +1,4 @@ +void frag() { + vec4 mainCol = texture2D_0(vec2(TexCoord.x, TexCoord.y)); + gl_FragColor = vec4(1.0 - mainCol.r, 1.0 - mainCol.g, 1.0 - mainCol.b, mainCol.a); +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/source/effect_template.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/source/effect_template.qml new file mode 100644 index 0000000..cc1d274 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/designer/source/effect_template.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Effects 1.15 + +Effect { + passes: renderPass + + Pass { + id: renderPass + shaders: [fragShader] + } + + Shader { + id: fragShader + stage: Shader.Fragment + shader: "effect_default_shader.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/libqtquick3deffectplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/libqtquick3deffectplugin.so new file mode 100755 index 0000000..b210867 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/libqtquick3deffectplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/maps/brushnoise.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/maps/brushnoise.png new file mode 100644 index 0000000..43e2034 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/maps/brushnoise.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/maps/white.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/maps/white.png new file mode 100644 index 0000000..dd0f1d2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/maps/white.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/plugins.qmltypes new file mode 100644 index 0000000..1eb2369 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/plugins.qmltypes @@ -0,0 +1,24 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick3D.Effects 1.15' + +Module { + dependencies: [ + "QtQuick 2.15", + "QtQuick.Window 2.1", + "QtQuick3D 1.15", + "QtQuick3D.Materials 1.15" + ] + Component { + name: "QQuick3DEffect" + defaultProperty: "data" + prototype: "QQuick3DObject" + exports: ["QtQuick3D.Effects/Effect 1.15"] + exportMetaObjectRevisions: [0] + Property { name: "passes"; type: "QQuick3DShaderUtilsRenderPass"; isList: true; isReadonly: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/qmldir new file mode 100644 index 0000000..1af8339 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Effects/qmldir @@ -0,0 +1,27 @@ +module QtQuick3D.Effects +plugin qtquick3deffectplugin +classname QtQuick3DEffectPlugin +AdditiveColorGradient 1.0 AdditiveColorGradient.qml +Blur 1.0 Blur.qml +BrushStrokes 1.0 BrushStrokes.qml +ChromaticAberration 1.0 ChromaticAberration.qml +ColorMaster 1.0 ColorMaster.qml +DepthOfFieldHQBlur 1.0 DepthOfFieldHQBlur.qml +Desaturate 1.0 Desaturate.qml +DistortionRipple 1.0 DistortionRipple.qml +DistortionSphere 1.0 DistortionSphere.qml +DistortionSpiral 1.0 DistortionSpiral.qml +EdgeDetect 1.0 EdgeDetect.qml +Emboss 1.0 Emboss.qml +Flip 1.0 Flip.qml +Fxaa 1.0 Fxaa.qml +GaussianBlur 1.0 GaussianBlur.qml +HDRBloomTonemap 1.0 HDRBloomTonemap.qml +MotionBlur 1.0 MotionBlur.qml +Scatter 1.0 Scatter.qml +SCurveTonemap 1.0 SCurveTonemap.qml +TiltShift 1.0 TiltShift.qml +Vignette 1.0 Vignette.qml +designersupported +depends QtQuick3D 1.15 +depends QtQuick.Window 2.1 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/AxisHelper.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/AxisHelper.qml new file mode 100644 index 0000000..b27b945 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/AxisHelper.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +Node { + id: axisGrid_obj + + property alias gridColor: gridMaterial.diffuseColor + property alias gridOpacity: gridMaterial.opacity + property alias enableXZGrid: gridXZ.visible + property alias enableXYGrid: gridXY.visible + property alias enableYZGrid: gridYZ.visible + property bool enableAxisLines: true + + // Axis Lines + Model { + id: xAxis + source: "#Cube" + position: Qt.vector3d(5000, 0, 0) + scale: Qt.vector3d(100, .05, .05) + visible: enableAxisLines + + materials: DefaultMaterial { + lighting: DefaultMaterial.NoLighting + diffuseColor: "red" + } + } + + Model { + id: yAxis + source: "#Cube" + position: Qt.vector3d(0, 5000, 0) + scale: Qt.vector3d(0.05, 100, 0.05) + visible: enableAxisLines + materials: DefaultMaterial { + lighting: DefaultMaterial.NoLighting + diffuseColor: "green" + } + } + + Model { + id: zAxis + source: "#Cube" + position: Qt.vector3d(0, 0, 5000) + scale: Qt.vector3d(0.05, 0.05, 100) + visible: enableAxisLines + materials: DefaultMaterial { + lighting: DefaultMaterial.NoLighting + diffuseColor: "blue" + } + } + + // Grid Lines + DefaultMaterial { + id: gridMaterial + lighting: DefaultMaterial.NoLighting + opacity: 0.5 + diffuseColor: Qt.rgba(0.8, 0.8, 0.8, 1) + } + + Model { + id: gridXZ + source: "meshes/axisGrid.mesh" + scale: Qt.vector3d(100, 100, 100) + materials: [ + gridMaterial + ] + } + + Model { + id: gridXY + visible: false + source: "meshes/axisGrid.mesh" + scale: Qt.vector3d(100, 100, 100) + eulerRotation: Qt.vector3d(90, 0, 0) + materials: [ + gridMaterial + ] + } + + Model { + id: gridYZ + visible: false + source: "meshes/axisGrid.mesh" + scale: Qt.vector3d(100, 100, 100) + eulerRotation: Qt.vector3d(0, 0, 90) + materials: [ + gridMaterial + ] + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/DebugView.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/DebugView.qml new file mode 100644 index 0000000..ed6b9d2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/DebugView.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +Rectangle { + property var source: null + width: layout.width + 10 + height: layout.height + 10 + color: "#80778BA5" + radius: 5 + + Column { + id: layout + anchors.centerIn: parent + + Text { + text: source.renderStats.fps + " FPS (" + (source.renderStats.frameTime).toFixed(3) + "ms)" + font.pointSize: 13 + color: "white" + } + Text { + text: "Sync: " + (source.renderStats.syncTime).toFixed(3) + "ms" + font.pointSize: 9 + color: "white" + } + Text { + text: "Render: " + (source.renderStats.renderTime).toFixed(3) + "ms" + font.pointSize: 9 + color: "white" + } + Text { + text: "Max: " + (source.renderStats.maxFrameTime).toFixed(3) + "ms" + font.pointSize: 9 + color: "white" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/WasdController.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/WasdController.qml new file mode 100644 index 0000000..5f508f6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/WasdController.qml @@ -0,0 +1,320 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +Item { + id: root + property Node controlledObject: undefined + + property real speed: 1 + property real shiftSpeed: 3 + + property real forwardSpeed: 5 + property real backSpeed: 5 + property real rightSpeed: 5 + property real leftSpeed: 5 + property real upSpeed: 5 + property real downSpeed: 5 + property real xSpeed: 0.1 + property real ySpeed: 0.1 + + property bool xInvert: false + property bool yInvert: true + + property bool mouseEnabled: true + property bool keysEnabled: true + + readonly property bool inputsNeedProcessing: status.moveForward | status.moveBack + | status.moveLeft | status.moveRight + | status.moveUp | status.moveDown + | status.useMouse + + property alias acceptedButtons: dragHandler.acceptedButtons + + + + implicitWidth: parent.width + implicitHeight: parent.height + focus: keysEnabled + + DragHandler { + id: dragHandler + target: null + enabled: mouseEnabled + onCentroidChanged: { + mouseMoved(Qt.vector2d(centroid.position.x, centroid.position.y)); + } + + onActiveChanged: { + if (active) + mousePressed(Qt.vector2d(centroid.position.x, centroid.position.y)); + else + mouseReleased(Qt.vector2d(centroid.position.x, centroid.position.y)); + } + } + + Keys.onPressed: if (keysEnabled) handleKeyPress(event) + Keys.onReleased: if (keysEnabled) handleKeyRelease(event) + + function mousePressed(newPos) { + status.currentPos = newPos + status.lastPos = newPos + status.useMouse = true; + } + + function mouseReleased(newPos) { + status.useMouse = false; + } + + function mouseMoved(newPos) { + status.currentPos = newPos; + } + + function forwardPressed() { + status.moveForward = true + status.moveBack = false + } + + function forwardReleased() { + status.moveForward = false + } + + function backPressed() { + status.moveBack = true + status.moveForward = false + } + + function backReleased() { + status.moveBack = false + } + + function rightPressed() { + status.moveRight = true + status.moveLeft = false + } + + function rightReleased() { + status.moveRight = false + } + + function leftPressed() { + status.moveLeft = true + status.moveRight = false + } + + function leftReleased() { + status.moveLeft = false + } + + function upPressed() { + status.moveUp = true + status.moveDown = false + } + + function upReleased() { + status.moveUp = false + } + + function downPressed() { + status.moveDown = true + status.moveUp = false + } + + function downReleased() { + status.moveDown = false + } + + function shiftPressed() { + status.shiftDown = true + } + + function shiftReleased() { + status.shiftDown = false + } + + function handleKeyPress(event) + { + switch (event.key) { + case Qt.Key_W: + case Qt.Key_Up: + forwardPressed(); + break; + case Qt.Key_S: + case Qt.Key_Down: + backPressed(); + break; + case Qt.Key_A: + case Qt.Key_Left: + leftPressed(); + break; + case Qt.Key_D: + case Qt.Key_Right: + rightPressed(); + break; + case Qt.Key_R: + case Qt.Key_PageUp: + upPressed(); + break; + case Qt.Key_F: + case Qt.Key_PageDown: + downPressed(); + break; + case Qt.Key_Shift: + shiftPressed(); + break; + } + } + + function handleKeyRelease(event) + { + switch (event.key) { + case Qt.Key_W: + case Qt.Key_Up: + forwardReleased(); + break; + case Qt.Key_S: + case Qt.Key_Down: + backReleased(); + break; + case Qt.Key_A: + case Qt.Key_Left: + leftReleased(); + break; + case Qt.Key_D: + case Qt.Key_Right: + rightReleased(); + break; + case Qt.Key_R: + case Qt.Key_PageUp: + upReleased(); + break; + case Qt.Key_F: + case Qt.Key_PageDown: + downReleased(); + break; + case Qt.Key_Shift: + shiftReleased(); + break; + } + } + + Timer { + id: updateTimer + interval: 16 + repeat: true + running: root.inputsNeedProcessing + onTriggered: { + processInputs(); + } + } + + function processInputs() + { + if (root.inputsNeedProcessing) + status.processInput(); + } + + QtObject { + id: status + + property bool moveForward: false + property bool moveBack: false + property bool moveLeft: false + property bool moveRight: false + property bool moveUp: false + property bool moveDown: false + property bool shiftDown: false + property bool useMouse: false + + property vector2d lastPos: Qt.vector2d(0, 0) + property vector2d currentPos: Qt.vector2d(0, 0) + + function updatePosition(vector, speed, position) + { + if (shiftDown) + speed *= shiftSpeed; + else + speed *= root.speed + + var direction = vector; + var velocity = Qt.vector3d(direction.x * speed, + direction.y * speed, + direction.z * speed); + controlledObject.position = Qt.vector3d(position.x + velocity.x, + position.y + velocity.y, + position.z + velocity.z); + } + + function negate(vector) { + return Qt.vector3d(-vector.x, -vector.y, -vector.z) + } + + function processInput() { + if (controlledObject == undefined) + return; + + if (moveForward) + updatePosition(controlledObject.forward, forwardSpeed, controlledObject.position); + else if (moveBack) + updatePosition(negate(controlledObject.forward), backSpeed, controlledObject.position); + + if (moveRight) + updatePosition(controlledObject.right, rightSpeed, controlledObject.position); + else if (moveLeft) + updatePosition(negate(controlledObject.right), leftSpeed, controlledObject.position); + + if (moveDown) + updatePosition(negate(controlledObject.up), downSpeed, controlledObject.position); + else if (moveUp) + updatePosition(controlledObject.up, upSpeed, controlledObject.position); + + if (useMouse) { + // Get the delta + var rotationVector = controlledObject.eulerRotation; + var delta = Qt.vector2d(lastPos.x - currentPos.x, + lastPos.y - currentPos.y); + // rotate x + var rotateX = delta.x * xSpeed + if (xInvert) + rotateX = -rotateX; + rotationVector.y += rotateX; + + // rotate y + var rotateY = delta.y * -ySpeed + if (yInvert) + rotateY = -rotateY; + rotationVector.x += rotateY; + controlledObject.setEulerRotation(rotationVector); + lastPos = currentPos; + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/libqtquick3dhelpersplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/libqtquick3dhelpersplugin.so new file mode 100755 index 0000000..e364444 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/libqtquick3dhelpersplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/meshes/axisGrid.mesh b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/meshes/axisGrid.mesh new file mode 100644 index 0000000..c186888 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/meshes/axisGrid.mesh differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/plugins.qmltypes new file mode 100644 index 0000000..8b6293d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/plugins.qmltypes @@ -0,0 +1,71 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick3D.Helpers 1.15' + +Module { + dependencies: [ + "QtQuick 2.15", + "QtQuick.Window 2.1", + "QtQuick3D 1.15", + "QtQuick3D.Effects 1.15", + "QtQuick3D.Materials 1.15" + ] + Component { + name: "GridGeometry" + defaultProperty: "data" + prototype: "QQuick3DGeometry" + exports: ["QtQuick3D.Helpers/GridGeometry 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "horizontalLines"; type: "int" } + Property { name: "verticalLines"; type: "int" } + Property { name: "horizontalStep"; type: "float" } + Property { name: "verticalStep"; type: "float" } + Method { + name: "setHorizontalLines" + Parameter { name: "count"; type: "int" } + } + Method { + name: "setVerticalLines" + Parameter { name: "count"; type: "int" } + } + Method { + name: "setHorizontalStep" + Parameter { name: "step"; type: "float" } + } + Method { + name: "setVerticalStep" + Parameter { name: "step"; type: "float" } + } + } + Component { + name: "PointerPlane" + defaultProperty: "data" + prototype: "QQuick3DNode" + exports: ["QtQuick3D.Helpers/PointerPlane 1.14"] + exportMetaObjectRevisions: [0] + Method { + name: "getIntersectPos" + type: "QVector3D" + Parameter { name: "rayPos0"; type: "QVector3D" } + Parameter { name: "rayPos1"; type: "QVector3D" } + Parameter { name: "planePos"; type: "QVector3D" } + Parameter { name: "planeNormal"; type: "QVector3D" } + } + Method { + name: "getIntersectPosFromSceneRay" + type: "QVector3D" + Parameter { name: "rayPos0"; type: "QVector3D" } + Parameter { name: "rayPos1"; type: "QVector3D" } + } + Method { + name: "getIntersectPosFromView" + type: "QVector3D" + Parameter { name: "view"; type: "QQuick3DViewport"; isPointer: true } + Parameter { name: "posInView"; type: "QPointF" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/qmldir new file mode 100644 index 0000000..93ebcd0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Helpers/qmldir @@ -0,0 +1,8 @@ +module QtQuick3D.Helpers +plugin qtquick3dhelpersplugin +classname QtQuick3DHelpersPlugin +AxisHelper 1.0 AxisHelper.qml +DebugView 1.0 DebugView.qml +WasdController 1.0 WasdController.qml +designersupported +depends QtQuick3D 1.0 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumAnodizedEmissiveMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumAnodizedEmissiveMaterial.qml new file mode 100644 index 0000000..c829464 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumAnodizedEmissiveMaterial.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real roughness: 0.3 + property vector3d base_color: Qt.vector3d(0.7, 0.7, 0.7) + property real intensity: 1.0 + property vector3d emission_color: Qt.vector3d(0, 0, 0) + + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy + } + + property TextureInput emissive_texture: TextureInput { + id: emissiveTexture + enabled: true + texture: Texture { + id: emissiveImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/emissive.png" + } + } + + property TextureInput emissive_mask_texture: TextureInput { + id: emissiveMaskTexture + enabled: true + texture: Texture { + id: emissiveMaskImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/emissive_mask.png" + } + } + + property TextureInput uEnvironmentTexture: TextureInput { + id: uEnvironmentTexture + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/shadow.png" + } + } + + Shader { + id: aluminumAnodizedEmissiveShader + stage: Shader.Fragment + shader: "shaders/aluminumAnodizedEmissive.frag" + } + + passes: [ + Pass { + shaders: aluminumAnodizedEmissiveShader + } + ] + +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumAnodizedMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumAnodizedMaterial.qml new file mode 100644 index 0000000..c5a9c42 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumAnodizedMaterial.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real roughness: 0.3 + property vector3d base_color: Qt.vector3d(0.7, 0.7, 0.7) + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy + } + + property TextureInput uEnvironmentTexture: TextureInput { + id: uEnvironmentTexture + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/shadow.png" + } + } + + Shader { + id: aluminumAnodizedShader + stage: Shader.Fragment + shader: "shaders/aluminumAnodized.frag" + } + + passes: [ + Pass { + shaders: aluminumAnodizedShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumBrushedMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumBrushedMaterial.qml new file mode 100644 index 0000000..3a57d40 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumBrushedMaterial.qml @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property vector3d tiling: Qt.vector3d(3, 3, 3) + property real brushing_strength: 0.5 + property real reflection_stretch: 0.5 + property vector3d metal_color: Qt.vector3d(0.95, 0.95, 0.95) + property real bump_amount: 0.4 + +// +// + + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy + } + + + property TextureInput uEnvironmentTexture: TextureInput { + id: uEnvironmentTexture + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/shadow.png" + } + } + + property TextureInput brush_texture: TextureInput { + enabled: true + texture: Texture { + id: brushTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/brushed_full_contrast.png" + } + } + + property TextureInput roughness_texture_u: TextureInput { + enabled: true + texture: Texture { + id: roughnessUTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/brushed_full_contrast.png" + } + } + + property TextureInput roughness_texture_v: TextureInput { + enabled: true + texture: Texture { + id: roughnessVTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/brushed_full_contrast.png" + } + } + + + property TextureInput bump_texture: TextureInput { + enabled: true + texture: Texture { + id: bumpTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/brushed_a.png" + } + } + + Shader { + id: aluminumBrushedFragShader + stage: Shader.Fragment + shader: "shaders/aluminumBrushed.frag" + } + + passes: [ + Pass { + shaders: aluminumBrushedFragShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumEmissiveMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumEmissiveMaterial.qml new file mode 100644 index 0000000..ead7517 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumEmissiveMaterial.qml @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real reflection_map_offset: 0.5 + property real reflection_map_scale: 0.3 + property vector3d tiling: Qt.vector3d(1, 1, 1) + property real roughness_map_offset: 0.16 + property real roughness_map_scale: 0.4 + property vector3d metal_color: Qt.vector3d(0.95, 0.95, 0.95) + property real intensity: 1.0 + property vector3d emission_color: Qt.vector3d(0, 0, 0) + property vector3d emissive_mask_offset: Qt.vector3d(0, 0, 0) + property real bump_amount: 0.5 + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy + } + + property TextureInput uEnvironmentTexture: TextureInput { + id: uEnvironmentTexture + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/shadow.png" + } + } + + property TextureInput reflection_texture: TextureInput { + enabled: true + texture: Texture { + id: reflectionTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/grunge_b.png" + } + } + + property TextureInput roughness_texture: TextureInput { + enabled: true + texture: Texture { + id: roughnessTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/grunge_d.png" + } + } + + property TextureInput emissive_texture: TextureInput { + id: emissiveTexture + enabled: true + texture: Texture { + id: emissiveImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/emissive.png" + } + } + + property TextureInput emissive_mask_texture: TextureInput { + id: emissiveMaskTexture + enabled: true + texture: Texture { + id: emissiveMaskImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/emissive_mask.png" + } + } + + property TextureInput bump_texture: TextureInput { + enabled: true + texture: Texture { + id: bumpTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/grunge_d.png" + } + } + + Shader { + id: aluminumEmissiveShader + stage: Shader.Fragment + shader: "shaders/aluminumEmissive.frag" + } + + passes: [ + Pass { + shaders: aluminumEmissiveShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumMaterial.qml new file mode 100644 index 0000000..ecddb27 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/AluminumMaterial.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + property real reflection_map_offset: 0.5 + property real reflection_map_scale: 0.3 + property real roughness_map_offset: 0.16 + property real roughness_map_scale: 0.4 + property real bump_amount: 0.5 + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property vector3d tiling: Qt.vector3d(1, 1, 1) + property vector3d metal_color: Qt.vector3d(0.95, 0.95, 0.95) + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy + } + + property TextureInput uEnvironmentTexture: TextureInput { + id: uEnvironmentTexture + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/shadow.png" + } + } + property TextureInput reflection_texture: TextureInput { + enabled: true + texture: Texture { + id: reflectionTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/grunge_b.png" + } + } + property TextureInput roughness_texture: TextureInput { + enabled: true + texture: Texture { + id: roughnessTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/grunge_d.png" + } + } + property TextureInput bump_texture: TextureInput { + enabled: true + texture: Texture { + id: bumpTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/grunge_d.png" + } + } + + Shader { + id: aluminumFragShader + stage: Shader.Fragment + shader: "shaders/aluminum.frag" + } + + passes: [ + Pass { + shaders: aluminumFragShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/CopperMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/CopperMaterial.qml new file mode 100644 index 0000000..b01692a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/CopperMaterial.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + // These properties names need to match the ones in the shader code! + property bool uEnvironmentMappingEnabled: false + property bool uShadowMappingEnabled: false + property real roughness: 0.0 + property vector3d metal_color: Qt.vector3d(0.805, 0.395, 0.305) + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy + } + + property TextureInput uEnvironmentTexture: TextureInput { + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + + Shader { + id: copperFragShader + stage: Shader.Fragment + shader: "shaders/copper.frag" + } + + passes: [ Pass { + shaders: copperFragShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/FrostedGlassMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/FrostedGlassMaterial.qml new file mode 100644 index 0000000..a3488e7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/FrostedGlassMaterial.qml @@ -0,0 +1,236 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + // These properties names need to match the ones in the shader code! + property real roughness: 0.0 + property real blur_size: 8.0 + property real refract_depth: 5 + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real glass_bfactor: 0.0 + property bool glass_binside: false + property real uFresnelPower: 1.0 + property real reflectivity_amount: 1.0 + property real glass_ior: 1.5 + property real intLightFall: 2.0 + property real intLightRot: 0.0 + property real intLightBrt: 0.0 + property real bumpScale: 0.5 + property int bumpBands: 1 + property vector3d bumpCoords: Qt.vector3d(1.0, 1.0, 1.0) + property vector2d intLightPos: Qt.vector2d(0.5, 0.0) + property vector3d glass_color: Qt.vector3d(0.9, 0.9, 0.9) + property vector3d intLightCol: Qt.vector3d(0.9, 0.9, 0.9) + hasTransparency: true + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Refraction | ShaderInfo.Glossy + } + + property TextureInput glass_bump: TextureInput { + enabled: true + texture: Texture { + id: glassBumpMap + source: "maps/spherical_checker.png" + } + } + + property TextureInput uEnvironmentTexture: TextureInput { + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + property TextureInput randomGradient1D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient1D.png" + } + } + property TextureInput randomGradient2D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient2D.png" + } + } + property TextureInput randomGradient3D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient3D.png" + } + } + property TextureInput randomGradient4D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient4D.png" + } + } + + Shader { + id: mainShader + stage: Shader.Fragment + shader: "shaders/frostedThinGlass.frag" + } + Shader { + id: noopShader + stage: Shader.Fragment + shader: "shaders/frostedThinGlassNoop.frag" + } + Shader { + id: preBlurShader + stage: Shader.Fragment + shader: "shaders/frostedThinGlassPreBlur.frag" + } + Shader { + id: blurXShader + stage: Shader.Fragment + shader: "shaders/frostedThinGlassBlurX.frag" + } + Shader { + id: blurYShader + stage: Shader.Fragment + shader: "shaders/frostedThinGlassBlurY.frag" + } + + Buffer { + id: frameBuffer + name: "frameBuffer" + format: Buffer.Unknown + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + sizeMultiplier: 1.0 + bufferFlags: Buffer.None // aka frame + } + + Buffer { + id: dummyBuffer + name: "dummyBuffer" + format: Buffer.RGBA8 + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + sizeMultiplier: 1.0 + bufferFlags: Buffer.None // aka frame + } + + Buffer { + id: tempBuffer + name: "tempBuffer" + format: Buffer.RGBA16F + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + sizeMultiplier: 0.5 + bufferFlags: Buffer.None // aka frame + } + + Buffer { + id: blurYBuffer + name: "tempBlurY" + format: Buffer.RGBA16F + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + sizeMultiplier: 0.5 + bufferFlags: Buffer.None // aka frame + } + + Buffer { + id: blurXBuffer + name: "tempBlurX" + format: Buffer.RGBA16F + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + sizeMultiplier: 0.5 + bufferFlags: Buffer.None // aka frame + } + + passes: [ Pass { + shaders: noopShader + output: dummyBuffer + commands: [ BufferBlit { + destination: frameBuffer + } + ] + }, Pass { + shaders: preBlurShader + output: tempBuffer + commands: [ BufferInput { + buffer: frameBuffer + param: "OriginBuffer" + } + ] + }, Pass { + shaders: blurXShader + output: blurXBuffer + commands: [ BufferInput { + buffer: tempBuffer + param: "BlurBuffer" + } + ] + }, Pass { + shaders: blurYShader + output: blurYBuffer + commands: [ BufferInput { + buffer: blurXBuffer + param: "BlurBuffer" + }, BufferInput { + buffer: tempBuffer + param: "OriginBuffer" + } + ] + }, Pass { + shaders: mainShader + commands: [BufferInput { + buffer: blurYBuffer + param: "refractiveTexture" + }, Blending { + srcBlending: Blending.SrcAlpha + destBlending: Blending.OneMinusSrcAlpha + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/FrostedGlassSinglePassMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/FrostedGlassSinglePassMaterial.qml new file mode 100644 index 0000000..fc8ccdb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/FrostedGlassSinglePassMaterial.qml @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + property real roughness: 0.0 + property real blur_size: 8.0 + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real uFresnelPower: 1.0 + property real reflectivity_amount: 1.0 + property real glass_ior: 1.5 + property real bumpScale: 0.5 + property real noiseScale: 2.0 + property int bumpBands: 1 + property vector3d noiseCoords: Qt.vector3d(1.0, 1.0, 1.0) + property vector3d bumpCoords: Qt.vector3d(1.0, 1.0, 1.0) + property vector3d glass_color: Qt.vector3d(0.9, 0.9, 0.9) + hasTransparency: true + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Refraction | ShaderInfo.Glossy + } + + property TextureInput uEnvironmentTexture: TextureInput { + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + property TextureInput randomGradient1D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient1D.png" + } + } + property TextureInput randomGradient2D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient2D.png" + } + } + property TextureInput randomGradient3D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient3D.png" + } + } + property TextureInput randomGradient4D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient4D.png" + } + } + + Shader { + id: frostedGlassSpFragShader + stage: Shader.Fragment + shader: "shaders/frostedThinGlassSp.frag" + } + + Buffer { + id: tempBuffer + name: "temp_buffer" + format: Buffer.Unknown + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + sizeMultiplier: 1.0 + bufferFlags: Buffer.None // aka frame + } + + passes: [ Pass { + shaders: frostedGlassSpFragShader + commands: [ BufferBlit { + destination: tempBuffer + }, BufferInput { + buffer: tempBuffer + param: "refractiveTexture" + }, Blending { + srcBlending: Blending.SrcAlpha + destBlending: Blending.OneMinusSrcAlpha + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/GlassMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/GlassMaterial.qml new file mode 100644 index 0000000..82e876d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/GlassMaterial.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + // These properties names need to match the ones in the shader code! + property bool uEnvironmentMappingEnabled: false + property bool uShadowMappingEnabled: false + property real uFresnelPower: 1.0 + property real uMinOpacity: 0.5 + property real reflectivity_amount: 0.5 + property real glass_ior: 1.5 + property vector3d glass_color: Qt.vector3d(0.6, 0.6, 0.6) + hasTransparency: true + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Transparent | ShaderInfo.Glossy + } + + property TextureInput uEnvironmentTexture: TextureInput { + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + + Shader { + id: simpleGlassFragShader + stage: Shader.Fragment + shader: "shaders/simpleGlass.frag" + } + + passes: [ Pass { + shaders: simpleGlassFragShader + commands: [ Blending { + srcBlending: Blending.SrcAlpha + destBlending: Blending.OneMinusSrcAlpha + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/GlassRefractiveMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/GlassRefractiveMaterial.qml new file mode 100644 index 0000000..de89521 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/GlassRefractiveMaterial.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + // These properties names need to match the ones in the shader code! + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real uFresnelPower: 1.0 + property real reflectivity_amount: 1.0 + property real glass_ior: 1.5 + property real roughness: 0.0 + property vector3d glass_color: Qt.vector3d(0.9, 0.9, 0.9) + hasTransparency: true + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Refraction | ShaderInfo.Glossy + } + + property TextureInput uEnvironmentTexture: TextureInput { + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + + Shader { + id: simpleGlassRefractiveFragShader + stage: Shader.Fragment + shader: "shaders/simpleGlassRefractive.frag" + } + + Buffer { + id: tempBuffer + name: "temp_buffer" + format: Buffer.Unknown + textureFilterOperation: Buffer.Linear + textureCoordOperation: Buffer.ClampToEdge + sizeMultiplier: 1.0 + bufferFlags: Buffer.None // aka frame + } + + passes: [ Pass { + shaders: simpleGlassRefractiveFragShader + commands: [ BufferBlit { + destination: tempBuffer + }, BufferInput { + buffer: tempBuffer + param: "refractiveTexture" + }, Blending { + srcBlending: Blending.SrcAlpha + destBlending: Blending.OneMinusSrcAlpha + } + ] + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PaperArtisticMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PaperArtisticMaterial.qml new file mode 100644 index 0000000..18d927a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PaperArtisticMaterial.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + // These properties names need to match the ones in the shader code! + property bool uEnvironmentMappingEnabled: false + property bool uShadowMappingEnabled: false + property real bump_amount: 0.5 + property real uTranslucentFalloff: 0.0 + property real uDiffuseLightWrap: 0.0 + property real uOpacity: 100.0 + property real transmission_weight: 0.2 + property real reflection_weight: 0.8 + property vector2d texture_tiling: Qt.vector2d(5.0, 5.0) + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Transmissive | ShaderInfo.Diffuse + } + + property TextureInput uEnvironmentTexture: TextureInput { + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + property TextureInput diffuse_texture: TextureInput { + enabled: true + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/paper_diffuse.png" + } + } + property TextureInput bump_texture: TextureInput { + enabled: true + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/art_paper_normal.png" + } + } + property TextureInput transmission_texture: TextureInput { + enabled: true + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/art_paper_trans.png" + } + } + + Shader { + id: paperArtisticFragShader + stage: Shader.Fragment + shader: "shaders/paperArtistic.frag" + } + + passes: [ Pass { + shaders: paperArtisticFragShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PaperOfficeMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PaperOfficeMaterial.qml new file mode 100644 index 0000000..6e55ddf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PaperOfficeMaterial.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + // These properties names need to match the ones in the shader code! + property bool uShadowMappingEnabled: false + property real bump_amount: 0.5 + property real uTranslucentFalloff: 0.0 + property real uDiffuseLightWrap: 0.0 + property real uOpacity: 100.0 + property real transmission_weight: 0.2 + property real reflection_weight: 0.8 + property vector2d texture_tiling: Qt.vector2d(1.0, 1.0) + property vector3d paper_color: Qt.vector3d(0.531, 0.531, 0.531) + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Transmissive | ShaderInfo.Diffuse + } + + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + property TextureInput diffuse_texture: TextureInput { + enabled: true + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/paper_diffuse.png" + } + } + property TextureInput bump_texture: TextureInput { + enabled: true + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/paper_diffuse.png" + } + } + property TextureInput transmission_texture: TextureInput { + enabled: true + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/paper_trans.png" + } + } + + Shader { + id: paperOfficeFragShader + stage: Shader.Fragment + shader: "shaders/paperOffice.frag" + } + + passes: [ Pass { + shaders: paperOfficeFragShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PlasticStructuredRedEmissiveMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PlasticStructuredRedEmissiveMaterial.qml new file mode 100644 index 0000000..72cef76 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PlasticStructuredRedEmissiveMaterial.qml @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + // These properties names need to match the ones in the shader code! + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real roughness: 0.25 + property real material_ior: 1.46 + property real intensity: 1.0 + property real texture_scaling: 0.1 + property real bump_factor: 0.4 + property vector3d diffuse_color: Qt.vector3d(0.451, 0.04, 0.035) + property vector3d emission_color: Qt.vector3d(0.0, 0.0, 0.0) + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy | ShaderInfo.Diffuse + } + + property TextureInput uEnvironmentTexture: TextureInput { + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + property TextureInput emissive_texture: TextureInput { + id: emissiveTexture + enabled: true + texture: Texture { + id: emissiveImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/emissive.png" + } + } + property TextureInput emissive_mask_texture: TextureInput { + id: emissiveMaskTexture + enabled: true + texture: Texture { + id: emissiveMaskImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/emissive_mask.png" + } + } + property TextureInput randomGradient1D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient1D.png" + } + } + property TextureInput randomGradient2D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient2D.png" + } + } + property TextureInput randomGradient3D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient3D.png" + } + } + property TextureInput randomGradient4D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient4D.png" + } + } + + Shader { + id: plasticStructuredRedEmissiveFragShader + stage: Shader.Fragment + shader: "shaders/plasticStructuredRedEmissive.frag" + } + + passes: [ Pass { + shaders: plasticStructuredRedEmissiveFragShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PlasticStructuredRedMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PlasticStructuredRedMaterial.qml new file mode 100644 index 0000000..ea71d6c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/PlasticStructuredRedMaterial.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + // These properties names need to match the ones in the shader code! + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real roughness: 0.25 + property real material_ior: 1.46 + property real intensity: 1.0 + property real texture_scaling: 0.1 + property real bump_factor: 0.4 + property vector3d diffuse_color: Qt.vector3d(0.451, 0.04, 0.035) + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy | ShaderInfo.Diffuse + } + + property TextureInput uEnvironmentTexture: TextureInput { + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + source: "maps/shadow.png" + } + } + property TextureInput randomGradient1D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient1D.png" + } + } + property TextureInput randomGradient2D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient2D.png" + } + } + property TextureInput randomGradient3D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient3D.png" + } + } + property TextureInput randomGradient4D: TextureInput { + texture: Texture { + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/randomGradient4D.png" + } + } + + Shader { + id: plasticStructuredRedFragShader + stage: Shader.Fragment + shader: "shaders/plasticStructuredRed.frag" + } + + passes: [ Pass { + shaders: plasticStructuredRedFragShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/SteelMilledConcentricMaterial.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/SteelMilledConcentricMaterial.qml new file mode 100644 index 0000000..2dfebc2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/SteelMilledConcentricMaterial.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + property bool uEnvironmentMappingEnabled: true + property bool uShadowMappingEnabled: false + property real material_ior: 2.5 + property real anisotropy: 0.8 + property vector2d texture_tiling: Qt.vector2d(8, 5) + + shaderInfo: ShaderInfo { + version: "330" + type: "GLSL" + shaderKey: ShaderInfo.Glossy + } + + property TextureInput uEnvironmentTexture: TextureInput { + id: uEnvironmentTexture + enabled: uEnvironmentMappingEnabled + texture: Texture { + id: envImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/spherical_checker.png" + } + } + property TextureInput uBakedShadowTexture: TextureInput { + enabled: uShadowMappingEnabled + texture: Texture { + id: shadowImage + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/shadow.png" + } + } + property TextureInput diffuse_texture: TextureInput { + enabled: true + texture: Texture { + id: diffuseTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/concentric_milled_steel.png" + } + } + property TextureInput anisotropy_rot_texture: TextureInput { + enabled: true + texture: Texture { + id: anisoTexture + tilingModeHorizontal: Texture.Repeat + tilingModeVertical: Texture.Repeat + source: "maps/concentric_milled_steel_aniso.png" + } + } + + Shader { + id: steelMilledConcentricFragShader + stage: Shader.Fragment + shader: "shaders/steelMilledConcentric.frag" + } + + passes: [ + Pass { + shaders: steelMilledConcentricFragShader + } + ] +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedEmissiveMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedEmissiveMaterialSection.qml new file mode 100644 index 0000000..d3343de --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedEmissiveMaterialSection.qml @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Emission") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Intensity") + tooltip: qsTr("Set the emission intensity.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.intensity + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Map Texture") + tooltip: qsTr("Defines a texture for emissive map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.emissive_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("MaskTexture") + tooltip: qsTr("Defines a texture for emissive mask.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.emissive_mask_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Emission Color") } + + ColorEditor { + backendValue: backendValues.emission_color + supportGradient: false + isVector3D: true + } + } + } + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Base Color") } + + ColorEditor { + backendValue: backendValues.base_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Set the material roughness.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedEmissiveMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedEmissiveMaterialSpecifics.qml new file mode 100644 index 0000000..10f07ba --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedEmissiveMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + AluminumAnodizedEmissiveMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedMaterialSection.qml new file mode 100644 index 0000000..71eaec2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedMaterialSection.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Base Color") } + + ColorEditor { + backendValue: backendValues.base_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Set the material roughness.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedMaterialSpecifics.qml new file mode 100644 index 0000000..ebe6190 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumAnodizedMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + AluminumAnodizedMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumBrushedMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumBrushedMaterialSection.qml new file mode 100644 index 0000000..3c74c97 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumBrushedMaterialSection.qml @@ -0,0 +1,268 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + id: materialRoot + width: parent.width + + Section { + caption: qsTr("Roughness") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Metal Color") } + + ColorEditor { + backendValue: backendValues.metal_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a horizontal texture for roughness map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.roughness_texture_u_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a vertical texture for roughness map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.roughness_texture_v_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Reflection") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Stretch") + tooltip: qsTr("Set the material reflection stretch.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflection_stretch + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a vertical texture for roughness map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.roughness_texture_v_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Brush") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Strength") + tooltip: qsTr("Set the strength of the brush strokes.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.brushing_strength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Tiling") + tooltip: qsTr("Sets the tiling repeat of the brush map.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_x + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_y + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_z + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Bump") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Set the bump map bumpiness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bump_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for bump map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.bump_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumBrushedMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumBrushedMaterialSpecifics.qml new file mode 100644 index 0000000..5a8d0f4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumBrushedMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + AluminumBrushedMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumEmissiveMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumEmissiveMaterialSection.qml new file mode 100644 index 0000000..0c98ed2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumEmissiveMaterialSection.qml @@ -0,0 +1,421 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Emission") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Emission Color") } + + ColorEditor { + backendValue: backendValues.emission_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Intensity") + tooltip: qsTr("Set the emission intensity.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.intensity + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Map Texture") + tooltip: qsTr("Defines a texture for emissive map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.emissive_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("MaskTexture") + tooltip: qsTr("Defines a texture for emissive mask.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.emissive_mask_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Mask Offset") + tooltip: qsTr("Sets the mask offset of emissive map.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.emissive_mask_offset_x + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.emissive_mask_offset_y + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.emissive_mask_offset_z + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Roughness") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Metal Color") } + + ColorEditor { + backendValue: backendValues.metal_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Map Offset") + tooltip: qsTr("Set the material roughness map offset.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness_map_offset + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Map scale") + tooltip: qsTr("Set the material roughness map scale.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness_map_scale + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for roughness map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.roughness_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Reflection") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Map Offset") + tooltip: qsTr("Set the material reclection map offset.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflection_map_offset + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Map scale") + tooltip: qsTr("Set the material reclection map scale.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflection_map_scale + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for reflection map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.reflection_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Tiling") + tooltip: qsTr("Sets the tiling repeat of the reflection map.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_x + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_y + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_z + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Bump") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Set the bump map bumpiness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bump_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for bump map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.bump_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumEmissiveMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumEmissiveMaterialSpecifics.qml new file mode 100644 index 0000000..ea3b677 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumEmissiveMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + AluminumEmissiveMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumMaterialSection.qml new file mode 100644 index 0000000..762819c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumMaterialSection.qml @@ -0,0 +1,281 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Roughness") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Metal Color") } + + ColorEditor { + backendValue: backendValues.metal_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Map Offset") + tooltip: qsTr("Set the material roughness map offset.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness_map_offset + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Map scale") + tooltip: qsTr("Set the material roughness map scale.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness_map_scale + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for roughness map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.roughness_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Reflection") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Map Offset") + tooltip: qsTr("Set the material reclection map offset.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflection_map_offset + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Map scale") + tooltip: qsTr("Set the material reclection map scale.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflection_map_scale + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for reflection map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.reflection_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Tiling") + tooltip: qsTr("Sets the tiling repeat of the reflection map.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_x + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_y + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.tiling_z + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Bump") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Set the bump map bumpiness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bump_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for bump map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.bump_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumMaterialSpecifics.qml new file mode 100644 index 0000000..bbbdc71 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/AluminumMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + AluminumMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CopperMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CopperMaterialSection.qml new file mode 100644 index 0000000..4263269 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CopperMaterialSection.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Metal Color") } + + ColorEditor { + backendValue: backendValues.metal_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Set the material roughness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CopperMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CopperMaterialSpecifics.qml new file mode 100644 index 0000000..85e54ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CopperMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + CopperMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CustomMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CustomMaterialSection.qml new file mode 100644 index 0000000..059774a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CustomMaterialSection.qml @@ -0,0 +1,205 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Custom Material") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Transparency") + tooltip: qsTr("Specifies if the material has transparency.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.hasTransparency.valueToString + backendValue: backendValues.hasTransparency + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Refraction") + tooltip: qsTr("Specifies if the material has refraction.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.hasRefraction.valueToString + backendValue: backendValues.hasRefraction + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Always Dirty") + tooltip: qsTr("Specifies if the material needs to be refreshed every time it is used.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.alwaysDirty.valueToString + backendValue: backendValues.alwaysDirty + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Shader Info") + tooltip: qsTr("Shader info for the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.ShaderInfo" + backendValue: backendValues.shaderInfo + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Passes") + tooltip: qsTr("Render passes of the material.") + Layout.alignment: Qt.AlignTop + Layout.topMargin: 5 + } + + SecondColumnLayout { + EditableListView { + backendValue: backendValues.passes + model: backendValues.passes.expressionAsList + Layout.fillWidth: true + typeFilter: "QtQuick3D.Pass" + + onAdd: function(value) { backendValues.passes.idListAdd(value) } + onRemove: function(idx) { backendValues.passes.idListRemove(idx) } + onReplace: function (idx, value) { backendValues.passes.idListReplace(idx, value) } + } + + ExpandingSpacer {} + } + } + } + + Section { + // Copied from quick3d's MaterialSection.qml + caption: qsTr("Material") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Light Probe") + tooltip: qsTr("Defines a texture for overriding or setting an image based lighting texture for use with this material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.lightProbe + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Displacement Map") + tooltip: qsTr("Defines a grayscale image used to offset the vertices of geometry across the surface of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.displacementMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Displacement Amount") + tooltip: qsTr("Controls the offset amount for the displacement map.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: -9999999 + maximumValue: 9999999 + decimals: 0 + backendValue: backendValues.displacementAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Culling Mode") + tooltip: qsTr("Defines whether culling is enabled and which mode is actually enabled.") + } + + SecondColumnLayout { + ComboBox { + scope: "Material" + model: ["BackFaceCulling", "FrontFaceCulling", "NoCulling"] + backendValue: backendValues.cullMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CustomMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CustomMaterialSpecifics.qml new file mode 100644 index 0000000..8957ad7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/CustomMaterialSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + CustomMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/EnvironmentMapSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/EnvironmentMapSection.qml new file mode 100644 index 0000000..4a7639c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/EnvironmentMapSection.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Environment Map") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Enabled") + tooltip: qsTr("Specifies if the environment map is enabled.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.uEnvironmentMappingEnabled.valueToString + backendValue: backendValues.uEnvironmentMappingEnabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for environment map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.uEnvironmentTexture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} \ No newline at end of file diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassMaterialSection.qml new file mode 100644 index 0000000..ad6cbff --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassMaterialSection.qml @@ -0,0 +1,512 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Bump") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Scale") + tooltip: qsTr("Set the scale of the bump bands.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 5 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bumpScale + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Bands") + tooltip: qsTr("Set the number of the bump bands.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 0 + backendValue: backendValues.bumpBands + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Strength") + tooltip: qsTr("Set the glass bump map strength.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.glass_bfactor + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Internal") + tooltip: qsTr("Specifies if the bump map be used only for the internal lighting.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.glass_binside.valueToString + backendValue: backendValues.glass_binside + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for bump map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.glass_bump_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Coordinates") + tooltip: qsTr("Sets the bump coordinates of the refraction.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.bumpCoords_x + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.bumpCoords_y + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.bumpCoords_z + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Glass Color") } + + ColorEditor { + backendValue: backendValues.glass_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Set the material roughness.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Blur Size") + tooltip: qsTr("Set the amount of blurring behind the glass.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 50 + decimals: 2 + backendValue: backendValues.blur_size + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Refract Depth") + tooltip: qsTr("Set the refract depth of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 5 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.refract_depth + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Fresnel Power") + tooltip: qsTr("Set the fresnel power of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 100 + decimals: 2 + backendValue: backendValues.uFresnelPower + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Reflectivity") + tooltip: qsTr("Set the reflectivity of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflectivity_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Index of Refraction") + tooltip: qsTr("Set the index of refraction for the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1.4 + maximumValue: 2.1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.glass_ior + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Band Light") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Band Light Color") } + + ColorEditor { + backendValue: backendValues.intLightCol + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Falloff") + tooltip: qsTr("Set the light intensity falloff rate.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 2 + backendValue: backendValues.intLightFall + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Angle") + tooltip: qsTr("Set the angle of lightsource. Band is perpendicular to this.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 360 + decimals: 2 + backendValue: backendValues.intLightRot + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Brightness") + tooltip: qsTr("Set the brightness of the band light.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.intLightBrt + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Position") + tooltip: qsTr("Sets the Position of the band light in the UV space.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.intLightPos_x + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.intLightPos_y + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Random Gradient Maps") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("1D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient1D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("2D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient2D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("3D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient3D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("4D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient4D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassMaterialSpecifics.qml new file mode 100644 index 0000000..7ff98b5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + FrostedGlassMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassSinglePassMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassSinglePassMaterialSection.qml new file mode 100644 index 0000000..1c77d2c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassSinglePassMaterialSection.qml @@ -0,0 +1,430 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Bump") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Scale") + tooltip: qsTr("Set the scale of the bump bands.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 5 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bumpScale + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Bands") + tooltip: qsTr("Set the number of the bump bands.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 0 + backendValue: backendValues.bumpBands + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Coordinates") + tooltip: qsTr("Sets the bump coordinates of the refraction.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.bumpCoords_x + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.bumpCoords_y + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.bumpCoords_z + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Glass Color") } + + ColorEditor { + backendValue: backendValues.glass_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Set the material roughness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Blur Size") + tooltip: qsTr("Set the amount of blurring behind the glass.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 50 + decimals: 2 + backendValue: backendValues.blur_size + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Fresnel Power") + tooltip: qsTr("Set the fresnel power of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 100 + decimals: 2 + backendValue: backendValues.uFresnelPower + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Reflectivity") + tooltip: qsTr("Set the reflectivity of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflectivity_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Index of Refraction") + tooltip: qsTr("Set the index of refraction for the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1.4 + maximumValue: 2.1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.glass_ior + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Noise") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Scale") + tooltip: qsTr("Set the noise scale.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 40 + decimals: 2 + backendValue: backendValues.noiseScale + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Coordinates") + tooltip: qsTr("Sets the noise coordinates.") + } + + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.noiseCoords_x + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.noiseCoords_y + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 2 + backendValue: backendValues.noiseCoords_z + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Random Gradient Maps") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("1D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient1D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("2D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient2D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("3D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient3D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("4D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient4D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassSinglePassMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassSinglePassMaterialSpecifics.qml new file mode 100644 index 0000000..9f8b16a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/FrostedGlassSinglePassMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + FrostedGlassSinglePassMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassMaterialSection.qml new file mode 100644 index 0000000..e066307 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassMaterialSection.qml @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Glass Color") } + + ColorEditor { + backendValue: backendValues.glass_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Fresnel Power") + tooltip: qsTr("Set the fresnel power of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 100 + decimals: 2 + backendValue: backendValues.uFresnelPower + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Minimum Opacity") + tooltip: qsTr("Set the minimum opacity of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.uMinOpacity + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Reflectivity") + tooltip: qsTr("Set the reflectivity of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflectivity_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Index of Refraction") + tooltip: qsTr("Set the index of refraction for the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1.4 + maximumValue: 2.1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.glass_ior + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassMaterialSpecifics.qml new file mode 100644 index 0000000..b3ce4a0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + GlassMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassRefractiveMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassRefractiveMaterialSection.qml new file mode 100644 index 0000000..6ec799a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassRefractiveMaterialSection.qml @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Glass Color") } + + ColorEditor { + backendValue: backendValues.glass_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Fresnel Power") + tooltip: qsTr("Set the fresnel power of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 100 + decimals: 2 + backendValue: backendValues.uFresnelPower + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Set the roughness of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Reflectivity") + tooltip: qsTr("Set the reflectivity of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflectivity_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Index of Refraction") + tooltip: qsTr("Set the index of refraction for the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1.4 + maximumValue: 2.1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.glass_ior + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassRefractiveMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassRefractiveMaterialSpecifics.qml new file mode 100644 index 0000000..d5ee497 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/GlassRefractiveMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + GlassRefractiveMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/IdComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/IdComboBox.qml new file mode 100644 index 0000000..4111ad0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/IdComboBox.qml @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import HelperWidgets 2.0 + +ComboBox { + id: comboBox + + property alias typeFilter: itemFilterModel.typeFilter + + manualMapping: true + editable: true + model: comboBox.addDefaultItem(itemFilterModel.itemModel) + + textInput.validator: RegExpValidator { regExp: /(^$|^[a-z_]\w*)/ } + + ItemFilterModel { + id: itemFilterModel + modelNodeBackendProperty: modelNodeBackend + } + + property string defaultItem: qsTr("None") + property string textValue: comboBox.backendValue.expression + property bool block: false + property bool dirty: true + property var editRegExp: /^[a-z_]\w*/ + + onTextValueChanged: { + if (comboBox.block) + return + + comboBox.setCurrentText(comboBox.textValue) + } + onModelChanged: comboBox.setCurrentText(comboBox.textValue) + onCompressedActivated: comboBox.handleActivate(index) + Component.onCompleted: comboBox.setCurrentText(comboBox.textValue) + + onEditTextChanged: { + comboBox.dirty = true + colorLogic.errorState = !(editRegExp.exec(comboBox.editText) !== null + || comboBox.editText === parenthesize(defaultItem)) + } + onFocusChanged: { + if (comboBox.dirty) + comboBox.handleActivate(comboBox.currentIndex) + } + + function handleActivate(index) + { + if (!comboBox.__isCompleted || comboBox.backendValue === undefined) + return + + var cText = (index === -1) ? comboBox.editText : comboBox.textAt(index) + comboBox.block = true + comboBox.setCurrentText(cText) + comboBox.block = false + } + + function setCurrentText(text) + { + if (!comboBox.__isCompleted || comboBox.backendValue === undefined) + return + + comboBox.currentIndex = comboBox.find(text) + + if (text === "") { + comboBox.currentIndex = 0 + comboBox.editText = parenthesize(comboBox.defaultItem) + } else { + if (comboBox.currentIndex === -1) + comboBox.editText = text + else if (comboBox.currentIndex === 0) + comboBox.editText = parenthesize(comboBox.defaultItem) + } + + if (comboBox.currentIndex === 0) { + comboBox.backendValue.resetValue() + } else { + if (comboBox.backendValue.expression !== comboBox.editText) + comboBox.backendValue.expression = comboBox.editText + } + comboBox.dirty = false + } + + function addDefaultItem(arr) + { + var copy = arr.slice() + copy.unshift(parenthesize(comboBox.defaultItem)) + return copy + } + + function parenthesize(value) + { + return "[" + value + "]" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperArtisticMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperArtisticMaterialSection.qml new file mode 100644 index 0000000..a460243 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperArtisticMaterialSection.qml @@ -0,0 +1,269 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Transmission") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Transmission Weight") + tooltip: qsTr("Set the material transmission weight.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.transmission_weight + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Reflection Weight") + tooltip: qsTr("Set the material reflection weight.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflection_weight + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for transmission map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.transmission_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Translucency Falloff") + tooltip: qsTr("Set the falloff of the translucency of the material.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 100 + minimumValue: 0 + decimals: 2 + backendValue: backendValues.uTranslucentFalloff + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Opacity") + tooltip: qsTr("Set the opacity of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 100 + decimals: 2 + backendValue: backendValues.uOpacity + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture Tiling") + tooltip: qsTr("Sets the tiling repeat of the reflection map.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.texture_tiling_x + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.texture_tiling_y + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Diffuse Map") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Light Wrap") + tooltip: qsTr("Set the diffuse light bend of the material.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.uDiffuseLightWrap + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for diffuse map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.diffuse_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Bump") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Set the bump map bumpiness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bump_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for bump map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.bump_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperArtisticMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperArtisticMaterialSpecifics.qml new file mode 100644 index 0000000..4dc7862 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperArtisticMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + PaperArtisticMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperOfficeMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperOfficeMaterialSection.qml new file mode 100644 index 0000000..0ecd973 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperOfficeMaterialSection.qml @@ -0,0 +1,277 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Transmission") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Transmission Weight") + tooltip: qsTr("Set the material transmission weight.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.transmission_weight + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Reflection Weight") + tooltip: qsTr("Set the material reflection weight.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.reflection_weight + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for transmission map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.transmission_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Translucency Falloff") + tooltip: qsTr("Set the falloff of the translucency of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 100 + decimals: 2 + backendValue: backendValues.uTranslucentFalloff + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Opacity") + tooltip: qsTr("Set the opacity of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 100 + decimals: 2 + backendValue: backendValues.uOpacity + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture Tiling") + tooltip: qsTr("Sets the tiling repeat of the reflection map.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.texture_tiling_x + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.texture_tiling_y + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Paper Color") } + + ColorEditor { + backendValue: backendValues.paper_color + supportGradient: false + isVector3D: true + } + } + } + + Section { + caption: qsTr("Diffuse Map") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Light Wrap") + tooltip: qsTr("Set the diffuse light bend of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.uDiffuseLightWrap + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for diffuse map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.diffuse_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Bump") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Amount") + tooltip: qsTr("Set the bump map bumpiness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bump_amount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for bump map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.bump_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperOfficeMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperOfficeMaterialSpecifics.qml new file mode 100644 index 0000000..18f4436 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PaperOfficeMaterialSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + ShadowMapSection { + width: parent.width + } + + PaperOfficeMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedEmissiveMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedEmissiveMaterialSection.qml new file mode 100644 index 0000000..511f2d8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedEmissiveMaterialSection.qml @@ -0,0 +1,271 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Emission") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Intensity") + tooltip: qsTr("Set the emission intensity.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.intensity + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Map Texture") + tooltip: qsTr("Defines a texture for emissive map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.emissive_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("MaskTexture") + tooltip: qsTr("Defines a texture for emissive mask.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.emissive_mask_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Emission Color") } + + ColorEditor { + backendValue: backendValues.emission_color + supportGradient: false + isVector3D: true + } + } + } + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Diffuse Color") } + + ColorEditor { + backendValue: backendValues.diffuse_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Set the material roughness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Index of Refraction") + tooltip: qsTr("Set the index of refraction for the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1.4 + maximumValue: 1.6 + decimals: 3 + stepSize: 0.01 + backendValue: backendValues.material_ior + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture Scaling") + tooltip: qsTr("Set the texture scaling of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.texture_scaling + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Bump Factor") + tooltip: qsTr("Set the strength of the bumpiness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bump_factor + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Random Gradient Maps") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("1D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient1D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("2D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient2D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("3D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient3D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("4D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient4D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedEmissiveMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedEmissiveMaterialSpecifics.qml new file mode 100644 index 0000000..93860a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedEmissiveMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + PlasticStructuredRedEmissiveMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedMaterialSection.qml new file mode 100644 index 0000000..5aa55ba --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedMaterialSection.qml @@ -0,0 +1,203 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Diffuse Color") } + + ColorEditor { + backendValue: backendValues.diffuse_color + supportGradient: false + isVector3D: true + } + + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Set the material roughness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Index of Refraction") + tooltip: qsTr("Set the index of refraction for the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1.4 + maximumValue: 1.6 + decimals: 3 + stepSize: 0.01 + backendValue: backendValues.material_ior + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture Scaling") + tooltip: qsTr("Set the texture scaling of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.texture_scaling + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Bump Factor") + tooltip: qsTr("Set the strength of the bumpiness.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bump_factor + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Random Gradient Maps") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("1D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient1D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("2D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient2D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("3D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient3D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("4D") + tooltip: qsTr("Defines a texture map used to create the random bumpiness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.randomGradient4D_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedMaterialSpecifics.qml new file mode 100644 index 0000000..51fcf0b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/PlasticStructuredRedMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + PlasticStructuredRedMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/ShadowMapSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/ShadowMapSection.qml new file mode 100644 index 0000000..d141f6f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/ShadowMapSection.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Shadow Map") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Enabled") + tooltip: qsTr("Specifies if the shadow map is enabled.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.uShadowMappingEnabled.valueToString + backendValue: backendValues.uShadowMappingEnabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Defines a texture for shadow map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.uBakedShadowTexture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} \ No newline at end of file diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/SteelMilledConcentricMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/SteelMilledConcentricMaterialSection.qml new file mode 100644 index 0000000..6b03371 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/SteelMilledConcentricMaterialSection.qml @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("General") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Index of Refraction") + tooltip: qsTr("Set the index of refraction for the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0.47 + maximumValue: 2.97 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.material_ior + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Anisotropy") + tooltip: qsTr("Set the anisotropy of the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0.01 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.anisotropy + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Textures") + width: parent.width + + SectionLayout { + + PropertyLabel { + text: qsTr("Tiling") + tooltip: qsTr("Sets the tiling repeat of the texture maps.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.texture_tiling_x + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "X" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + minimumValue: 1 + maximumValue: 100 + decimals: 0 + backendValue: backendValues.texture_tiling_y + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { text: "Y" } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Diffuse") + tooltip: qsTr("Defines a texture for diffuse map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.diffuse_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Anisotropy") + tooltip: qsTr("Defines a texture for anisotropy map.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.anisotropy_rot_texture_texture + defaultItem: qsTr("Default") + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/SteelMilledConcentricMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/SteelMilledConcentricMaterialSpecifics.qml new file mode 100644 index 0000000..41bc154 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/SteelMilledConcentricMaterialSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + EnvironmentMapSection { + width: parent.width + } + + ShadowMapSection { + width: parent.width + } + + SteelMilledConcentricMaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial.png new file mode 100644 index 0000000..1b540da Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial16.png new file mode 100644 index 0000000..7284792 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial@2x.png new file mode 100644 index 0000000..3dbcf73 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/images/custommaterial@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/materiallib.metainfo b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/materiallib.metainfo new file mode 100644 index 0000000..1b2b606 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/materiallib.metainfo @@ -0,0 +1,308 @@ +MetaInfo { + Type { + name: "QtQuick3D.Materials.AluminumAnodizedEmissiveMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Aluminum Anod Emis" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.AluminumAnodizedMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Aluminum Anodized" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.AluminumBrushedMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Aluminum Brushed" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.AluminumEmissiveMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Aluminum Emissive" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.AluminumMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Aluminum" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.CopperMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Copper" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.FrostedGlassMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Frosted Glass" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.FrostedGlassSinglePassMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Frosted Glass Single Pass" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.GlassMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Glass" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.GlassRefractiveMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Glass Refractive" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.PaperArtisticMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Paper Artistic" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.PaperOfficeMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Paper Office" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.PlasticStructuredRedEmissiveMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Plastic Struct Emissive" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.PlasticStructuredRedMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Plastic Structured" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.SteelMilledConcentricMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: false + } + + ItemLibraryEntry { + name: "Steel Milled Concentric" + category: "Qt Quick 3D Materials" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + } + } + Type { + name: "QtQuick3D.Materials.CustomMaterial" + icon: "images/custommaterial16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Custom Material" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/custommaterial.png" + version: "1.14" + requiredImport: "QtQuick3D.Materials" + QmlSource { source: "./source/custommaterial_template.qml" } + ExtraFile { source: "./source/custom_material_default_shader.vert" } + ExtraFile { source: "./source/custom_material_default_shader.frag" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custom_material_default_shader.frag b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custom_material_default_shader.frag new file mode 100644 index 0000000..617c768 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custom_material_default_shader.frag @@ -0,0 +1,5 @@ +out vec4 fragColor; + +void main() { + fragColor = vec4(1.0, 0.0, 0.0, 1.0); +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custom_material_default_shader.vert b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custom_material_default_shader.vert new file mode 100644 index 0000000..5bdf4e2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custom_material_default_shader.vert @@ -0,0 +1,6 @@ +in vec3 attr_pos; +uniform mat4 modelViewProjection; + +void main() { + gl_Position = modelViewProjection * vec4(attr_pos, 1.0); +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custommaterial_template.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custommaterial_template.qml new file mode 100644 index 0000000..7461bf0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/designer/source/custommaterial_template.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 +import QtQuick3D.Materials 1.15 + +CustomMaterial { + shaderInfo: shaderInformation + passes: renderPass + + ShaderInfo { + id: shaderInformation + type: "GLSL" + version: "330" + } + + Pass { + id: renderPass + shaders: [vertShader, fragShader] + } + + Shader { + id: vertShader + stage: Shader.Vertex + shader: "custom_material_default_shader.vert" + } + + Shader { + id: fragShader + stage: Shader.Fragment + shader: "custom_material_default_shader.frag" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/libqtquick3dmaterialplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/libqtquick3dmaterialplugin.so new file mode 100755 index 0000000..c4b10ad Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/libqtquick3dmaterialplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/art_paper_normal.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/art_paper_normal.png new file mode 100644 index 0000000..5696c1a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/art_paper_normal.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/art_paper_trans.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/art_paper_trans.png new file mode 100644 index 0000000..e70e8a6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/art_paper_trans.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/brushed_a.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/brushed_a.png new file mode 100644 index 0000000..5196fbc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/brushed_a.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/brushed_full_contrast.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/brushed_full_contrast.png new file mode 100644 index 0000000..a2322a6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/brushed_full_contrast.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/concentric_milled_steel.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/concentric_milled_steel.png new file mode 100644 index 0000000..56101f2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/concentric_milled_steel.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/concentric_milled_steel_aniso.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/concentric_milled_steel_aniso.png new file mode 100644 index 0000000..f4ef5b6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/concentric_milled_steel_aniso.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/emissive.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/emissive.png new file mode 100644 index 0000000..599b1cc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/emissive.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/emissive_mask.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/emissive_mask.png new file mode 100644 index 0000000..599b1cc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/emissive_mask.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/grunge_b.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/grunge_b.png new file mode 100644 index 0000000..2dd4969 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/grunge_b.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/grunge_d.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/grunge_d.png new file mode 100644 index 0000000..88c571f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/grunge_d.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/paper_diffuse.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/paper_diffuse.png new file mode 100644 index 0000000..863a088 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/paper_diffuse.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/paper_trans.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/paper_trans.png new file mode 100644 index 0000000..68a3845 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/paper_trans.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient1D.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient1D.png new file mode 100644 index 0000000..0d37132 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient1D.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient2D.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient2D.png new file mode 100644 index 0000000..8b60ca6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient2D.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient3D.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient3D.png new file mode 100644 index 0000000..c22e1ba Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient3D.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient4D.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient4D.png new file mode 100644 index 0000000..ad282d8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/randomGradient4D.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/shadow.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/shadow.png new file mode 100644 index 0000000..599b1cc Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/shadow.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/spherical_checker.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/spherical_checker.png new file mode 100644 index 0000000..e42394d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/maps/spherical_checker.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/plugins.qmltypes new file mode 100644 index 0000000..a261e63 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/plugins.qmltypes @@ -0,0 +1,56 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick3D.Materials 1.15' + +Module { + dependencies: [ + "QtQuick 2.15", + "QtQuick.Window 2.1", + "QtQuick3D 1.15", + "QtQuick3D.Effects 1.15" + ] + Component { + name: "QQuick3DCustomMaterial" + defaultProperty: "data" + prototype: "QQuick3DMaterial" + exports: ["QtQuick3D.Materials/CustomMaterial 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "hasTransparency"; type: "bool" } + Property { name: "hasRefraction"; type: "bool" } + Property { name: "alwaysDirty"; type: "bool" } + Property { name: "shaderInfo"; type: "QQuick3DShaderUtilsShaderInfo"; isPointer: true } + Property { name: "passes"; type: "QQuick3DShaderUtilsRenderPass"; isList: true; isReadonly: true } + Signal { + name: "hasTransparencyChanged" + Parameter { name: "hasTransparency"; type: "bool" } + } + Signal { + name: "hasRefractionChanged" + Parameter { name: "hasRefraction"; type: "bool" } + } + Signal { + name: "alwaysDirtyChanged" + Parameter { name: "alwaysDirty"; type: "bool" } + } + Method { + name: "setHasTransparency" + Parameter { name: "hasTransparency"; type: "bool" } + } + Method { + name: "setHasRefraction" + Parameter { name: "hasRefraction"; type: "bool" } + } + Method { + name: "setShaderInfo" + Parameter { name: "shaderInfo"; type: "QQuick3DShaderUtilsShaderInfo"; isPointer: true } + } + Method { + name: "setAlwaysDirty" + Parameter { name: "alwaysDirty"; type: "bool" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/qmldir new file mode 100644 index 0000000..313ecf3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/Materials/qmldir @@ -0,0 +1,22 @@ +module QtQuick3D.Materials +plugin qtquick3dmaterialplugin +classname QtQuick3DMaterialPlugin +AluminumAnisotropicMaterial 1.0 AluminumAnisotropicMaterial.qml +AluminumBrushedMaterial 1.0 AluminumBrushedMaterial.qml +AluminumEmissiveMaterial 1.0 AluminumEmissiveMaterial.qml +AluminumMaterial 1.0 AluminumMaterial.qml +AluminumAnodizedEmissiveMaterial 1.0 AluminumAnodizedEmissiveMaterial.qml +AluminumAnodizedMaterial 1.0 AluminumAnodizedMaterial.qml +CopperMaterial 1.0 CopperMaterial.qml +GlassMaterial 1.0 GlassMaterial.qml +GlassRefractiveMaterial 1.0 GlassRefractiveMaterial.qml +FrostedGlassMaterial 1.0 FrostedGlassMaterial.qml +FrostedGlassSinglePassMaterial 1.0 FrostedGlassSinglePassMaterial.qml +PaperArtisticMaterial 1.0 PaperArtisticMaterial.qml +PaperOfficeMaterial 1.0 PaperOfficeMaterial.qml +PlasticStructuredRedMaterial 1.0 PlasticStructuredRedMaterial.qml +PlasticStructuredRedEmissiveMaterial 1.0 PlasticStructuredRedEmissiveMaterial.qml +SteelMilledConcentricMaterial 1.0 SteelMilledConcentricMaterial.qml +designersupported +depends QtQuick3D 1.0 +depends QtQuick.Window 2.1 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/AreaLightSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/AreaLightSection.qml new file mode 100644 index 0000000..487d67c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/AreaLightSection.qml @@ -0,0 +1,135 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("AreaLight") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Scope") + tooltip: qsTr("Sets the scope of the light. Only the node and its children are affected by this light.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Node" + backendValue: backendValues.scope + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Brightness") + tooltip: qsTr("Sets the strength of the light.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.brightness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Width") + tooltip: qsTr("Sets the width of the area light's rectangle.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.width + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Height") + tooltip: qsTr("Sets the height of the area light's rectangle.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.height + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Color") } + + ColorEditor { + backendValue: backendValues.color + supportGradient: false + } + + PropertyLabel { text: qsTr("Ambient Color") } + + ColorEditor { + backendValue: backendValues.ambientColor + supportGradient: false + } + } + } + + ShadowSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/AreaLightSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/AreaLightSpecifics.qml new file mode 100644 index 0000000..aee47ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/AreaLightSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + NodeSection { + width: parent.width + } + + AreaLightSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BlendingSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BlendingSection.qml new file mode 100644 index 0000000..f6988c3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BlendingSection.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Blending") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Source") + tooltip: qsTr("Source blending for a pass.") + } + + SecondColumnLayout { + ComboBox { + scope: "Blending" + model: ["Unknown", "Zero", "One", "SrcColor", "OneMinusSrcColor", "DstColor", + "OneMinusDstColor", "SrcAlpha", "OneMinusSrcAlpha", "DstAlpha", + "OneMinusDstAlpha", "ConstantColor", "OneMinusConstantColor", + "ConstantAlpha", "OneMinusConstantAlpha", "SrcAlphaSaturate"] + backendValue: backendValues.srcBlending + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Destination") + tooltip: qsTr("Destination blending for a pass.") + } + + SecondColumnLayout { + ComboBox { + scope: "Blending" + model: ["Unknown", "Zero", "One", "SrcColor", "OneMinusSrcColor", "DstColor", + "OneMinusDstColor", "SrcAlpha", "OneMinusSrcAlpha", "DstAlpha", + "OneMinusDstAlpha", "ConstantColor", "OneMinusConstantColor", + "ConstantAlpha", "OneMinusConstantAlpha"] + backendValue: backendValues.destBlending + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BlendingSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BlendingSpecifics.qml new file mode 100644 index 0000000..824dbd8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BlendingSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + BlendingSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferBlitSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferBlitSection.qml new file mode 100644 index 0000000..efb2890 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferBlitSection.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Buffer Blit") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Source") + tooltip: qsTr("Source buffer for the buffer blit.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Buffer" + backendValue: backendValues.source + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Destination") + tooltip: qsTr("Destination buffer for the buffer blit.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Buffer" + backendValue: backendValues.destination + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferBlitSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferBlitSpecifics.qml new file mode 100644 index 0000000..7c97bbc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferBlitSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + BufferBlitSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferInputSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferInputSection.qml new file mode 100644 index 0000000..ec90b1e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferInputSection.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Buffer Input") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Buffer") + tooltip: qsTr("Input buffer for a pass.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Buffer" + backendValue: backendValues.buffer + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Parameter") + tooltip: qsTr("Buffer input buffer name in the shader.") + } + + SecondColumnLayout { + LineEdit { + backendValue: backendValues.param + showTranslateCheckBox: false + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferInputSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferInputSpecifics.qml new file mode 100644 index 0000000..b4b1e74 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferInputSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + BufferInputSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferSection.qml new file mode 100644 index 0000000..726e870 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferSection.qml @@ -0,0 +1,151 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Buffer") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Name") + tooltip: qsTr("Buffer name.") + } + + SecondColumnLayout { + LineEdit { + backendValue: backendValues.name + showTranslateCheckBox: false + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Format") + tooltip: qsTr("Format of the buffer.") + } + + SecondColumnLayout { + ComboBox { + scope: "Buffer" + model: ["Unknown", "R8", "R16", "R16F", "R32I", "R32UI", "R32F", "RG8", "RGBA8", + "RGB8", "SRGB8", "SRGB8A8", "RGB565", "RGBA16F", "RG16F", "RG32F", + "RGB32F", "RGBA32F", "R11G11B10", "RGB9E5", "Depth16", "Depth24", + "Depth32", "Depth24Stencil8"] + backendValue: backendValues.format + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Filter") + tooltip: qsTr("Texture filter for the buffer.") + } + + SecondColumnLayout { + ComboBox { + scope: "Buffer" + model: ["Unknown", "Nearest", "Linear"] + backendValue: backendValues.textureFilterOperation + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Coordinate Operation") + tooltip: qsTr("Texture coordinate operation for the buffer.") + } + + SecondColumnLayout { + ComboBox { + scope: "Buffer" + model: ["Unknown", "ClampToEdge", "MirroredRepeat", "Repeat"] + backendValue: backendValues.textureCoordOperation + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Allocation Flags") + tooltip: qsTr("Allocation flags for the buffer.") + } + + SecondColumnLayout { + ComboBox { + scope: "Buffer" + model: ["None", "SceneLifetime"] + backendValue: backendValues.bufferFlags + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Size Multiplier") + tooltip: qsTr("Defines the size multiplier for the buffer.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 10000 + minimumValue: 0 + decimals: 2 + realDragRange: 30 + backendValue: backendValues.sizeMultiplier + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferSpecifics.qml new file mode 100644 index 0000000..ba81332 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/BufferSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + BufferSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CullModeSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CullModeSection.qml new file mode 100644 index 0000000..ae616a6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CullModeSection.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Cull Mode") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Mode") + tooltip: qsTr("Cull mode for a pass.") + } + + SecondColumnLayout { + ComboBox { + scope: "Material" + model: ["BackFaceCulling", "FrontFaceCulling", "NoCulling"] + backendValue: backendValues.cullMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CullModeSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CullModeSpecifics.qml new file mode 100644 index 0000000..2aaa54d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CullModeSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + CullModeSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CustomCameraSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CustomCameraSection.qml new file mode 100644 index 0000000..7e7d449 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CustomCameraSection.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Section { + caption: qsTr("Custom Camera") + + SectionLayout { + // TODO: projection is matrix4x4 property, is that supported? + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CustomCameraSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CustomCameraSpecifics.qml new file mode 100644 index 0000000..820b513 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/CustomCameraSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + CustomCameraSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DefaultMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DefaultMaterialSection.qml new file mode 100644 index 0000000..e7d385c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DefaultMaterialSection.qml @@ -0,0 +1,506 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Default Material") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Lighting") + tooltip: qsTr("Defines which lighting method is used when generating this material.") + } + + SecondColumnLayout { + ComboBox { + scope: "DefaultMaterial" + model: ["NoLighting", "FragmentLighting"] + backendValue: backendValues.lighting + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Blend Mode") + tooltip: qsTr("Determines how the colors of the model rendered blend with those behind it.") + } + + SecondColumnLayout { + ComboBox { + scope: "DefaultMaterial" + model: ["SourceOver", "Screen", "Multiply", "Overlay", "ColorBurn", "ColorDodge"] + backendValue: backendValues.blendMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Enable Vertex Colors") + tooltip: qsTr("Enables the use of vertex colors from the mesh.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.vertexColorsEnabled.valueToString + backendValue: backendValues.vertexColorsEnabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Diffuse") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Diffuse Color") } + + ColorEditor { + backendValue: backendValues.diffuseColor + supportGradient: false + } + + PropertyLabel { + text: qsTr("Diffuse Map") + tooltip: qsTr("Defines a texture to apply to the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.diffuseMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Emissive") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Emissive Color") } + + ColorEditor { + backendValue: backendValues.emissiveColor + supportGradient: false + } + + PropertyLabel { + text: qsTr("Emissive Factor") + tooltip: qsTr("Determines the amount of self-illumination from the material (will not light other objects).") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.emissiveFactor + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Emissive Map") + tooltip: qsTr("Sets a texture to be used to set the emissive factor for different parts of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.emissiveMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Specular") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Specular Tint") } + + ColorEditor { + backendValue: backendValues.specularTint + supportGradient: false + } + + PropertyLabel { + text: qsTr("Specular Amount") + tooltip: qsTr("Controls the strength of specularity (highlights and reflections).") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.specularAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Specular Map") + tooltip: qsTr("Defines a RGB texture to modulate the amount and the color of specularity across the surface of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.specularMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Specular Model") + tooltip: qsTr("Determines which functions are used to calculate specular highlights for lights in the scene.") + } + + SecondColumnLayout { + ComboBox { + scope: "DefaultMaterial" + model: ["Default", "KGGX", "KWard"] + backendValue: backendValues.specularModel + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Reflection Map") + tooltip: qsTr("Sets a texture used for specular highlights on the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.specularReflectionMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Index of Refraction") + tooltip: qsTr("Controls what angles of reflections are affected by the Fresnel power.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 3 + minimumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.indexOfRefraction + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Fresnel Power") + tooltip: qsTr("Decreases head-on reflections (looking directly at the surface) while maintaining reflections seen at grazing angles.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 2 + backendValue: backendValues.fresnelPower + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Specular Roughness") + tooltip: qsTr("Controls the size of the specular highlight generated from lights and the clarity of reflections in general.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0.001 + decimals: 3 + backendValue: backendValues.specularRoughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Roughness Map") + tooltip: qsTr("Defines a texture to control the specular roughness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.roughnessMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Opacity") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Opacity") + tooltip: qsTr("Sets the visibility of the geometry for this material.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.opacity + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Opacity Map") + tooltip: qsTr("Defines a texture used to control the opacity differently for different parts of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.opacityMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Bump/Normal") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Bump Amount") + tooltip: qsTr("Controls the amount of simulated displacement for the bump map or normal map.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.bumpAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Bump Map") + tooltip: qsTr("Defines a grayscale texture to simulate fine geometry displacement across the surface of the material.") + } + + SecondColumnLayout { + IdComboBox { + id: bumpMapComboBox + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.bumpMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + + Connections { + target: normalMapComboBox.backendValue + function onExpressionChanged() { + if (normalMapComboBox.backendValue.expression !== "") + bumpMapComboBox.backendValue.resetValue() + } + } + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Normal Map") + tooltip: qsTr("Defines a RGB image used to simulate fine geometry displacement across the surface of the material.") + } + + SecondColumnLayout { + IdComboBox { + id: normalMapComboBox + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.normalMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + + Connections { + target: bumpMapComboBox.backendValue + function onExpressionChanged() { + if (bumpMapComboBox.backendValue.expression !== "") + normalMapComboBox.backendValue.resetValue() + } + } + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Translucency") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Translucency Falloff") + tooltip: qsTr("Defines the amount of falloff for the translucency based on the angle of the normals of the object to the light source.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 999999 + minimumValue: -999999 + realDragRange: 5000 + decimals: 2 + backendValue: backendValues.translucentFalloff + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Diffuse Light Wrap") + tooltip: qsTr("Determines the amount of light wrap for the translucency map.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.diffuseLightWrap + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Translucency Map") + tooltip: qsTr("Defines a grayscale texture controlling how much light can pass through the material from behind.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.translucencyMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DefaultMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DefaultMaterialSpecifics.qml new file mode 100644 index 0000000..b0fb9cd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DefaultMaterialSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + DefaultMaterialSection { + width: parent.width + } + + MaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DepthInputSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DepthInputSection.qml new file mode 100644 index 0000000..ad12773 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DepthInputSection.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Depth Input") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Parameter") + tooltip: qsTr("Depth input texture name in the shader.") + } + + SecondColumnLayout { + LineEdit { + backendValue: backendValues.param + showTranslateCheckBox: false + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DepthInputSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DepthInputSpecifics.qml new file mode 100644 index 0000000..e025eff --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DepthInputSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + DepthInputSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DirectionalLightSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DirectionalLightSection.qml new file mode 100644 index 0000000..5441b19 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DirectionalLightSection.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("DirectionalLight") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Scope") + tooltip: qsTr("Sets the scope of the light. Only the node and its children are affected by this light.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Node" + backendValue: backendValues.scope + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Brightness") + tooltip: qsTr("Sets the strength of the light.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.brightness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Color") } + + ColorEditor { + backendValue: backendValues.color + supportGradient: false + } + + PropertyLabel { text: qsTr("Ambient Color") } + + ColorEditor { + backendValue: backendValues.ambientColor + supportGradient: false + } + } + } + + ShadowSection { + width: parent.width + } + +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DirectionalLightSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DirectionalLightSpecifics.qml new file mode 100644 index 0000000..4cbd9d8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/DirectionalLightSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + NodeSection { + width: parent.width + } + + DirectionalLightSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/FrustumCameraSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/FrustumCameraSection.qml new file mode 100644 index 0000000..a746edf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/FrustumCameraSection.qml @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Frustum Camera") + + SectionLayout { + PropertyLabel { + text: qsTr("Top") + tooltip: qsTr("Sets the top plane of the camera view frustum.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.top + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Bottom") + tooltip: qsTr("Sets the bottom plane of the camera view frustum.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.bottom + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Right") + tooltip: qsTr("Sets the right plane of the camera view frustum.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.right + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Left") + tooltip: qsTr("Sets the left plane of the camera view frustum.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.left + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/FrustumCameraSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/FrustumCameraSpecifics.qml new file mode 100644 index 0000000..d760558 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/FrustumCameraSpecifics.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + FrustumCameraSection { + width: parent.width + } + + PerspectiveCameraSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/IdComboBox.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/IdComboBox.qml new file mode 100644 index 0000000..c090e30 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/IdComboBox.qml @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import HelperWidgets 2.0 + +ComboBox { + id: comboBox + + property alias typeFilter: itemFilterModel.typeFilter + + manualMapping: true + editable: true + model: comboBox.addDefaultItem(itemFilterModel.itemModel) + + textInput.validator: RegExpValidator { regExp: /(^$|^[a-z_]\w*)/ } + + ItemFilterModel { + id: itemFilterModel + modelNodeBackendProperty: modelNodeBackend + } + + property string defaultItem: qsTr("None") + property string textValue: comboBox.backendValue.expression + property bool block: false + property bool dirty: true + property var editRegExp: /^[a-z_]\w*/ + + onTextValueChanged: { + if (comboBox.block) + return + + comboBox.setCurrentText(comboBox.textValue) + } + onModelChanged: comboBox.setCurrentText(comboBox.textValue) + onCompressedActivated: function(index, reason) { comboBox.handleActivate(index) } + Component.onCompleted: comboBox.setCurrentText(comboBox.textValue) + + onEditTextChanged: { + comboBox.dirty = true + colorLogic.errorState = !(editRegExp.exec(comboBox.editText) !== null + || comboBox.editText === parenthesize(defaultItem)) + } + onFocusChanged: { + if (comboBox.dirty) + comboBox.handleActivate(comboBox.currentIndex) + } + + function handleActivate(index) + { + if (!comboBox.__isCompleted || comboBox.backendValue === undefined) + return + + var cText = (index === -1) ? comboBox.editText : comboBox.textAt(index) + comboBox.block = true + comboBox.setCurrentText(cText) + comboBox.block = false + } + + function setCurrentText(text) + { + if (!comboBox.__isCompleted || comboBox.backendValue === undefined) + return + + comboBox.currentIndex = comboBox.find(text) + + if (text === "") { + comboBox.currentIndex = 0 + comboBox.editText = parenthesize(comboBox.defaultItem) + } else { + if (comboBox.currentIndex === -1) + comboBox.editText = text + else if (comboBox.currentIndex === 0) + comboBox.editText = parenthesize(comboBox.defaultItem) + } + + if (comboBox.currentIndex === 0) { + comboBox.backendValue.resetValue() + } else { + if (comboBox.backendValue.expression !== comboBox.editText) + comboBox.backendValue.expression = comboBox.editText + } + comboBox.dirty = false + } + + function addDefaultItem(arr) + { + var copy = arr.slice() + copy.unshift(parenthesize(comboBox.defaultItem)) + return copy + } + + function parenthesize(value) + { + return "[" + value + "]" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/MaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/MaterialSection.qml new file mode 100644 index 0000000..32e1f44 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/MaterialSection.qml @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Material") + + SectionLayout { + + // Baked Lighting properties (may be internal eventually) + // ### lightmapIndirect + // ### lightmapRadiosity + // ### lightmapShadow + + // ### iblProbe override + + PropertyLabel { + text: qsTr("Light Probe") + tooltip: qsTr("Defines a texture for overriding or setting an image based lighting texture for use with this material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.lightProbe + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Displacement Map") + tooltip: qsTr("Defines a grayscale image used to offset the vertices of geometry across the surface of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.displacementMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Displacement Amount") + tooltip: qsTr("Controls the offset amount for the displacement map.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.displacementAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Culling Mode") + tooltip: qsTr("Defines whether culling is enabled and which mode is actually enabled.") + } + + SecondColumnLayout { + ComboBox { + scope: "Material" + model: ["BackFaceCulling", "FrontFaceCulling", "NoCulling"] + backendValue: backendValues.cullMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ModelSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ModelSection.qml new file mode 100644 index 0000000..f04af25 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ModelSection.qml @@ -0,0 +1,205 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Model") + + SectionLayout { + id: tessellationSection + + PropertyLabel { + text: qsTr("Source") + tooltip: qsTr("Defines the location of the mesh file containing the geometry of this model.") + } + + SecondColumnLayout { + UrlChooser { + backendValue: backendValues.source + filter: "*.mesh" + } + + ExpandingSpacer {} + } + + function hasTessellationMode(mode) { + if (tessellationModeComboBox.backendValue.valueToString !== "" && + tessellationModeComboBox.backendValue.valueToString !== mode) + return false + + if (tessellationModeComboBox.backendValue.enumeration !== "" && + tessellationModeComboBox.backendValue.enumeration !== mode) + return false + + return true + } + + PropertyLabel { + text: qsTr("Tessellation Mode") + tooltip: qsTr("Defines what method to use to dynamically generate additional geometry for the model.") + } + + SecondColumnLayout { + ComboBox { + id: tessellationModeComboBox + scope: "Model" + model: ["NoTessellation", "Linear", "Phong", "NPatch"] + backendValue: backendValues.tessellationMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Edge Tessellation") + tooltip: qsTr("Defines the edge multiplier to the tessellation generator.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 64.0 + minimumValue: 0.0 + decimals: 0 + backendValue: backendValues.edgeTessellation + enabled: !tessellationSection.hasTessellationMode("NoTessellation") + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Inner Tessellation") + tooltip: qsTr("Defines the inner multiplier to the tessellation generator.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 64.0 + minimumValue: 0.0 + decimals: 0 + backendValue: backendValues.innerTessellation + enabled: !tessellationSection.hasTessellationMode("NoTessellation") + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Enable Wireframe Mode") + tooltip: qsTr("Enables the wireframe mode if tesselation is enabled.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.isWireframeMode.valueToString + backendValue: backendValues.isWireframeMode + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Casts Shadows") + tooltip: qsTr("Enables the geometry of this model to be rendered to the shadow maps.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.castsShadows.valueToString + backendValue: backendValues.castsShadows + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Receives Shadows") + tooltip: qsTr("Enables the geometry of this model to receive shadows.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.receivesShadows.valueToString + backendValue: backendValues.receivesShadows + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Pickable") + tooltip: qsTr("Controls whether the model is pickable or not.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.pickable.valueToString + backendValue: backendValues.pickable + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Materials") + } + + SecondColumnLayout { + EditableListView { + backendValue: backendValues.materials + model: backendValues.materials.expressionAsList + Layout.fillWidth: true + + onAdd: function(value) { backendValues.materials.idListAdd(value) } + onRemove: function(idx) { backendValues.materials.idListRemove(idx) } + onReplace: function (idx, value) { backendValues.materials.idListReplace(idx, value) } + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ModelSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ModelSpecifics.qml new file mode 100644 index 0000000..7713d30 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ModelSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + ModelSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/NodeSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/NodeSection.qml new file mode 100644 index 0000000..8a90353 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/NodeSection.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Node") + + SectionLayout { + PropertyLabel { + text: qsTr("Opacity") + tooltip: qsTr("Controls the local opacity value of the node.") + } + + SecondColumnLayout { + // ### should be a slider + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.opacity + sliderIndicatorVisible: true + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Visibility") + tooltip: qsTr("Sets the local visibility of the node.") + } + + SecondColumnLayout { + // ### should be a slider + CheckBox { + text: qsTr("Is Visible") + backendValue: backendValues.visible + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + id: transformSection + width: parent.width + caption: qsTr("Transform") + + ColumnLayout { + spacing: StudioTheme.Values.transform3DSectionSpacing + + SectionLayout { + PropertyLabel { + text: qsTr("Translation") + tooltip: qsTr("Sets the translation of the node.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + + SectionLayout { + PropertyLabel { + text: qsTr("Rotation") + tooltip: qsTr("Sets the rotation of the node in degrees.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.eulerRotation_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.eulerRotation_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.eulerRotation_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + + SectionLayout { + PropertyLabel { + text: qsTr("Scale") + tooltip: qsTr("Sets the scale of the node.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.scale_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.scale_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.scale_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + + SectionLayout { + PropertyLabel { + text: qsTr("Pivot") + tooltip: qsTr("Sets the pivot of the node.") + } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.pivot_x + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "X" + color: StudioTheme.Values.theme3DAxisXColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.pivot_y + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Y" + color: StudioTheme.Values.theme3DAxisYColor + } + + ExpandingSpacer {} + } + + PropertyLabel {} + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.pivot_z + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "Z" + color: StudioTheme.Values.theme3DAxisZColor + } + + ExpandingSpacer {} + } + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/NodeSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/NodeSpecifics.qml new file mode 100644 index 0000000..d503a54 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/NodeSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + NodeSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/Object3DSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/Object3DSection.qml new file mode 100644 index 0000000..55bb688 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/Object3DSection.qml @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Section { + caption: qsTr("Object") +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/OrthographicCameraSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/OrthographicCameraSection.qml new file mode 100644 index 0000000..d9d7a44 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/OrthographicCameraSection.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Orthographic Camera") + + SectionLayout { + PropertyLabel { + text: qsTr("Clip Near") + tooltip: qsTr("Sets the near value of the camera view frustum.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.clipNear + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Clip Far") + tooltip: qsTr("Sets the far value of the camera view frustum.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + stepSize: 100 + backendValue: backendValues.clipFar + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/OrthographicCameraSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/OrthographicCameraSpecifics.qml new file mode 100644 index 0000000..6444330 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/OrthographicCameraSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + OrthographicCameraSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PassSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PassSection.qml new file mode 100644 index 0000000..b87d263 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PassSection.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Pass") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Commands") + tooltip: qsTr("Render commands of the pass.") + Layout.alignment: Qt.AlignTop + Layout.topMargin: 5 + } + + SecondColumnLayout { + EditableListView { + backendValue: backendValues.commands + model: backendValues.commands.expressionAsList + Layout.fillWidth: true + typeFilter: "QtQuick3D.Command" + + onAdd: function(value) { backendValues.commands.idListAdd(value) } + onRemove: function(idx) { backendValues.commands.idListRemove(idx) } + onReplace: function (idx, value) { backendValues.commands.idListReplace(idx, value) } + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Buffer") + tooltip: qsTr("Output buffer for the pass.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Buffer" + backendValue: backendValues.output + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Shaders") + tooltip: qsTr("Shaders for the pass.") + Layout.alignment: Qt.AlignTop + Layout.topMargin: 5 + } + + SecondColumnLayout { + EditableListView { + backendValue: backendValues.shaders + model: backendValues.shaders.expressionAsList + Layout.fillWidth: true + typeFilter: "QtQuick3D.Shader" + + onAdd: function(value) { backendValues.shaders.idListAdd(value) } + onRemove: function(idx) { backendValues.shaders.idListRemove(idx) } + onReplace: function (idx, value) { backendValues.shaders.idListReplace(idx, value) } + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PassSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PassSpecifics.qml new file mode 100644 index 0000000..f0ac1b3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PassSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + PassSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PerspectiveCameraSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PerspectiveCameraSection.qml new file mode 100644 index 0000000..9cd3a24 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PerspectiveCameraSection.qml @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Perspective Camera") + + SectionLayout { + PropertyLabel { + text: qsTr("Clip Near") + tooltip: qsTr("Sets the near value of the view frustum of the camera.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.clipNear + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Clip Far") + tooltip: qsTr("Sets the far value of the view frustum of the camera.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + stepSize: 100 + backendValue: backendValues.clipFar + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Field of View") + tooltip: qsTr("Sets the field of view of the camera in degrees.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 180 + decimals: 2 + backendValue: backendValues.fieldOfView + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("FOV Orientation") + tooltip: qsTr("Determines if the field of view property reflects the vertical or the horizontal field of view.") + } + + SecondColumnLayout { + ComboBox { + scope: "PerspectiveCamera" + model: ["Vertical", "Horizontal"] + backendValue: backendValues.fieldOfViewOrientation + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PerspectiveCameraSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PerspectiveCameraSpecifics.qml new file mode 100644 index 0000000..8e1787e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PerspectiveCameraSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + PerspectiveCameraSection { + width: parent.width + } + + NodeSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PointLightSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PointLightSection.qml new file mode 100644 index 0000000..df08824 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PointLightSection.qml @@ -0,0 +1,154 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("PointLight") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Scope") + tooltip: qsTr("Sets the scope of the light. Only the node and its children are affected by this light.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Node" + backendValue: backendValues.scope + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Brightness") + tooltip: qsTr("Sets the strength of the light.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.brightness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Constant Fade") + tooltip: qsTr("Sets the constant attenuation of the light.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.constantFade + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Linear Fade") + tooltip: qsTr("Sets the linear attenuation of the light.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.linearFade + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Quadratic Fade") + tooltip: qsTr("Sets the quadratic attenuation of the light.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.quadraticFade + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Color") } + + ColorEditor { + backendValue: backendValues.color + supportGradient: false + } + + PropertyLabel { text: qsTr("Ambient Color") } + + ColorEditor { + backendValue: backendValues.ambientColor + supportGradient: false + } + } + } + + ShadowSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PointLightSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PointLightSpecifics.qml new file mode 100644 index 0000000..97989dc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PointLightSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + NodeSection { + width: parent.width + } + + PointLightSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PrincipledMaterialSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PrincipledMaterialSection.qml new file mode 100644 index 0000000..562d3a2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PrincipledMaterialSection.qml @@ -0,0 +1,549 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Principled Material") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Alpha Mode") + tooltip: qsTr("Sets the mode for how the alpha channel of material color is used.") + } + + SecondColumnLayout { + ComboBox { + scope: "PrincipledMaterial" + model: ["Opaque", "Mask", "Blend"] + backendValue: backendValues.alphaMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Alpha Cutoff") + tooltip: qsTr("Specifies the cutoff value when using the Mask alphaMode.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.alphaCutoff + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Blend Mode") + tooltip: qsTr("Determines how the colors of the model rendered blend with those behind it.") + } + + SecondColumnLayout { + ComboBox { + scope: "PrincipledMaterial" + model: ["SourceOver", "Screen", "Multiply", "Overlay", "ColorBurn", "ColorDodge"] + backendValue: backendValues.blendMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Index Of Refraction") + tooltip: qsTr("Controls how fast light travels through the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1 + maximumValue: 3 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.indexOfRefraction + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Lighting") + tooltip: qsTr("Defines which lighting method is used when generating this material.") + } + + SecondColumnLayout { + ComboBox { + scope: "PrincipledMaterial" + model: ["NoLighting", "FragmentLighting"] + backendValue: backendValues.lighting + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Metalness") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Metalness") + tooltip: qsTr("Defines the metalness of the the material.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.metalness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Metalness Map") + tooltip: qsTr("Sets a texture to be used to set the metalness amount for the different parts of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.metalnessMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Metalness Channel") + tooltip: qsTr("Defines the texture channel used to read the metalness value from metalnessMap.") + } + + SecondColumnLayout { + ComboBox { + scope: "Material" + model: ["R", "G", "B", "A"] + backendValue: backendValues.metalnessChannel + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Normal") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Normal Map") + tooltip: qsTr("Defines an RGB image used to simulate fine geometry displacement across the surface of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.normalMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Normal Strength") + tooltip: qsTr("Controls the amount of simulated displacement for the normalMap.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.normalStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Occlusion") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Occlusion Amount") + tooltip: qsTr("Contains the factor used to modify the values from the occlusionMap texture.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.occlusionAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Occlusion Map") + tooltip: qsTr("Defines a texture used to determine how much indirect light the different areas of the material should receive.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.occlusionMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Occlusion Channel") + tooltip: qsTr("Defines the texture channel used to read the occlusion value from occlusionMap.") + } + + SecondColumnLayout { + ComboBox { + scope: "Material" + model: ["R", "G", "B", "A"] + backendValue: backendValues.occlusionChannel + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Opacity") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Opacity") + tooltip: qsTr("Drops the opacity of just this material, separate from the model.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 1 + minimumValue: 0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.opacity + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Opacity Map") + tooltip: qsTr("Defines a texture used to control the opacity differently for different parts of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.opacityMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Opacity Channel") + tooltip: qsTr("Defines the texture channel used to read the opacity value from opacityMap.") + } + + SecondColumnLayout { + ComboBox { + scope: "Material" + model: ["R", "G", "B", "A"] + backendValue: backendValues.opacityChannel + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Roughness") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Roughness") + tooltip: qsTr("Controls the size of the specular highlight generated from lights, and the clarity of reflections in general.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.roughness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Roughness Map") + tooltip: qsTr("Defines a texture to control the specular roughness of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.roughnessMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Roughness Channel") + tooltip: qsTr("Defines the texture channel used to read the roughness value from roughnessMap.") + } + + SecondColumnLayout { + ComboBox { + scope: "Material" + model: ["R", "G", "B", "A"] + backendValue: backendValues.roughnessChannel + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Specular") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Specular Amount") + tooltip: qsTr("Controls the strength of specularity (highlights and reflections).") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.specularAmount + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Specular Map") + tooltip: qsTr("Defines a RGB Texture to modulate the amount and the color of specularity across the surface of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.specularMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Specular Reflection Map") + tooltip: qsTr("Sets a texture used for specular highlights on the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.specularReflectionMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Specular Tint") + tooltip: qsTr("Defines how much of the base color contributes to the specular reflections.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 1 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.specularTint + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Base Color") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Base Color") } + + ColorEditor { + backendValue: backendValues.baseColor + supportGradient: false + } + + PropertyLabel { + text: qsTr("Base Color Map") + tooltip: qsTr("Defines a texture used to set the base color of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.baseColorMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Emissive") + width: parent.width + + SectionLayout { + PropertyLabel { text: qsTr("Emissive Color") } + + ColorEditor { + backendValue: backendValues.emissiveColor + supportGradient: false + } + + PropertyLabel { + text: qsTr("Emissive Map") + tooltip: qsTr("Sets a texture to be used to set the emissive factor for different parts of the material.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + Layout.fillWidth: true + backendValue: backendValues.emissiveMap + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PrincipledMaterialSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PrincipledMaterialSpecifics.qml new file mode 100644 index 0000000..0ab597c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/PrincipledMaterialSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + PrincipledMaterialSection { + width: parent.width + } + + MaterialSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/RenderStateSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/RenderStateSection.qml new file mode 100644 index 0000000..ac1f132 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/RenderStateSection.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Render State") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("State") + tooltip: qsTr("Render state to set for a pass.") + } + + SecondColumnLayout { + ComboBox { + scope: "RenderState" + model: ["Unknown", "Blend", "CullFace", "DepthTest", "StencilTest", + "ScissorTest", "DepthWrite", "Multisample"] + backendValue: backendValues.renderState + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Enabled") + tooltip: qsTr("Render state enable state.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.enabled.valueToString + backendValue: backendValues.enabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/RenderStateSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/RenderStateSpecifics.qml new file mode 100644 index 0000000..f0b7fbe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/RenderStateSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + RenderStateSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SceneEnvironmentSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SceneEnvironmentSection.qml new file mode 100644 index 0000000..6be38bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SceneEnvironmentSection.qml @@ -0,0 +1,401 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Scene Environment") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Antialiasing Mode") + tooltip: qsTr("Sets the antialiasing mode applied to the scene.") + } + + SecondColumnLayout { + ComboBox { + scope: "SceneEnvironment" + model: ["NoAA", "SSAA", "MSAA", "ProgressiveAA"] + backendValue: backendValues.antialiasingMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Antialiasing Quality") + tooltip: qsTr("Sets the level of antialiasing applied to the scene.") + } + + SecondColumnLayout { + ComboBox { + scope: "SceneEnvironment" + model: ["Medium", "High", "VeryHigh"] + backendValue: backendValues.antialiasingQuality + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Temporal AA") + tooltip: qsTr("Enables temporal antialiasing using camera jittering and frame blending.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.temporalAAEnabled.valueToString + backendValue: backendValues.temporalAAEnabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Temporal AA Strength") + tooltip: qsTr("Sets the amount of temporal antialiasing applied.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 2.0 + minimumValue: 0.01 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.temporalAAStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Background Mode") + tooltip: qsTr("Controls if and how the background of the scene should be cleared.") + } + + SecondColumnLayout { + ComboBox { + scope: "SceneEnvironment" + model: ["Transparent", "Unspecified", "Color", "SkyBox"] + backendValue: backendValues.backgroundMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Enable Depth Test") + tooltip: qsTr("Enables depth testing. Disable to optimize render speed for layers with mostly transparent objects.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.depthTestEnabled.valueToString + backendValue: backendValues.depthTestEnabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Enable Depth Prepass") + tooltip: qsTr("Draw depth buffer as a separate pass. Disable to optimize render speed for layers with low depth complexity.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.depthPrePassEnabled.valueToString + backendValue: backendValues.depthPrePassEnabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Effect") + tooltip: qsTr("A post-processing effect applied to this scene.") + Layout.alignment: Qt.AlignTop + Layout.topMargin: 5 + } + + SecondColumnLayout { + EditableListView { + backendValue: backendValues.effects + model: backendValues.effects.expressionAsList + Layout.fillWidth: true + typeFilter: "QtQuick3D.Effect" + + onAdd: function(value) { backendValues.effects.idListAdd(value) } + onRemove: function(idx) { backendValues.effects.idListRemove(idx) } + onReplace: function (idx, value) { backendValues.effects.idListReplace(idx, value) } + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Clear Color") } + + ColorEditor { + backendValue: backendValues.clearColor + supportGradient: false + } + } + } + + Section { + caption: qsTr("Ambient Occlusion") + width: parent.width + + SectionLayout { + + PropertyLabel { + text: qsTr("AO Strength") + tooltip: qsTr("Sets the amount of ambient occlusion applied.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 100 + minimumValue: 0 + decimals: 0 + backendValue: backendValues.aoStrength + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("AO Distance") + tooltip: qsTr("Sets how far ambient occlusion shadows spread away from objects.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 99999 + minimumValue: 0 + decimals: 0 + backendValue: backendValues.aoDistance + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("AO Softness") + tooltip: qsTr("Sets how smooth the edges of the ambient occlusion shading are.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 50 + minimumValue: 0 + decimals: 0 + backendValue: backendValues.aoSoftness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("AO Dither") + tooltip: qsTr("Enables scattering of the ambient occlusion shadow band edges to improve smoothness (at the risk of sometimes producing obvious patterned artifacts).") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.aoDither.valueToString + backendValue: backendValues.aoDither + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("AO Sample Rate") + tooltip: qsTr("Sets the ambient occlusion quality (more shades of gray) at the expense of performance.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 4 + minimumValue: 2 + decimals: 0 + backendValue: backendValues.aoSampleRate + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("AO Bias") + tooltip: qsTr("Sets the cutoff distance preventing objects from exhibiting ambient occlusion at close distances.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 999999 + minimumValue: -999999 + realDragRange: 5000 + decimals: 2 + backendValue: backendValues.aoBias + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } + + Section { + caption: qsTr("Image Based Lighting") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Light Probe") + tooltip: qsTr("Defines a texture for overriding or setting an image based lighting texture for use with the skybox of this scene.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.lightProbe + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Probe Brightness") + tooltip: qsTr("Sets the amount of light emitted by the light probe.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 999999 + minimumValue: -999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.probeBrightness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Fast IBL") + tooltip: qsTr("Use a faster approximation to image-based lighting.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.aoDither.valueToString + backendValue: backendValues.fastIBL + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Probe Horizon") + tooltip: qsTr("Upper limit for horizon darkening of the light probe.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: -0.001 + minimumValue: -1 + decimals: 3 + stepSize: 0.1 + backendValue: backendValues.probeHorizon + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Probe FOV") + tooltip: qsTr("Image source FOV for the case of using a camera-source as the IBL probe.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 180 + minimumValue: 1.0 + decimals: 1 + backendValue: backendValues.probeFieldOfView + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SceneEnvironmentSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SceneEnvironmentSpecifics.qml new file mode 100644 index 0000000..58ff1ae --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SceneEnvironmentSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + SceneEnvironmentSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SetUniformValueSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SetUniformValueSection.qml new file mode 100644 index 0000000..476797a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SetUniformValueSection.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Set Uniform Value") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Target") + tooltip: qsTr("The name of the uniform to change value for a pass.") + } + + SecondColumnLayout { + LineEdit { + backendValue: backendValues.target + showTranslateCheckBox: false + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Value") + tooltip: qsTr("The value of the uniform.") + } + + SecondColumnLayout { + LineEdit { + backendValue: backendValues.value + showTranslateCheckBox: false + writeAsExpression: true + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SetUniformValueSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SetUniformValueSpecifics.qml new file mode 100644 index 0000000..8084f8f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SetUniformValueSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + SetUniformValueSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderInfoSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderInfoSection.qml new file mode 100644 index 0000000..436cdbd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderInfoSection.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Shader Info") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Version") + tooltip: qsTr("Shader code version to use.") + } + + SecondColumnLayout { + LineEdit { + backendValue: backendValues.version + showTranslateCheckBox: false + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Type") + tooltip: qsTr("Shader type.") + } + + SecondColumnLayout { + LineEdit { + backendValue: backendValues.type + showTranslateCheckBox: false + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Key") + tooltip: qsTr("Shader key.") + } + + SecondColumnLayout { + ComboBox { + scope: "ShaderInfo" + model: ["Diffuse", "Specular", "Cutout", "Refraction", "Transparent", "Displace", + "Transmissive", "Glossy"] + backendValue: backendValues.shaderKey + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderInfoSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderInfoSpecifics.qml new file mode 100644 index 0000000..5c6cad8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderInfoSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + ShaderInfoSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderSection.qml new file mode 100644 index 0000000..0efac93 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderSection.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Shader") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Source") + tooltip: qsTr("Shader source code.") + } + + SecondColumnLayout { + UrlChooser { + backendValue: backendValues.shader + filter: "*.vert *.frag *.glslv *.glslf *.glsl *.vsh *.fsh" + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Stage") + tooltip: qsTr("Shader stage.") + } + + SecondColumnLayout { + ComboBox { + scope: "Shader" + model: ["Shared", "Vertex", "Fragment", "Geometry", "Compute"] + backendValue: backendValues.stage + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderSpecifics.qml new file mode 100644 index 0000000..00c8a1e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShaderSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + ShaderSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShadowSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShadowSection.qml new file mode 100644 index 0000000..76371a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/ShadowSection.qml @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Shadows") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Casts Shadow") + tooltip: qsTr("Enables shadow casting for this light.") + } + + SecondColumnLayout { + CheckBox { + id: shadowCheckBox + text: backendValues.castsShadow.valueToString + backendValue: backendValues.castsShadow + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + // ### all the following should only be shown when shadows are enabled + PropertyLabel { + text: qsTr("Shadow Factor") + tooltip: qsTr("Determines how dark the cast shadows should be.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0.0 + maximumValue: 100.0 + decimals: 0 + backendValue: backendValues.shadowFactor + enabled: shadowCheckBox.backendValue.value === true + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Shadow Filter") + tooltip: qsTr("Sets how much blur is applied to the shadows.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 1.0 + maximumValue: 100.0 + decimals: 0 + backendValue: backendValues.shadowFilter + enabled: shadowCheckBox.backendValue.value === true + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Shadow Map Quality") + tooltip: qsTr("Sets the quality of the shadow map created for shadow rendering.") + } + + SecondColumnLayout { + ComboBox { + scope: "Light" + model: ["ShadowMapQualityLow", "ShadowMapQualityMedium", "ShadowMapQualityHigh", + "ShadowMapQualityVeryHigh"] + backendValue: backendValues.shadowMapQuality + enabled: shadowCheckBox.backendValue.value === true + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Shadow Bias") + tooltip: qsTr("Sets a slight offset to avoid self-shadowing artifacts.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: -1.0 + maximumValue: 1.0 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.shadowBias + enabled: shadowCheckBox.backendValue.value === true + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Shadow Map Far") + tooltip: qsTr("Determines the maximum distance for the shadow map.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: -9999999 + maximumValue: 9999999 + realDragRange: 5000 + decimals: 0 + stepSize: 100 + backendValue: backendValues.shadowMapFar + enabled: shadowCheckBox.backendValue.value === true + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SpotLightSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SpotLightSection.qml new file mode 100644 index 0000000..f9a0aa3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SpotLightSection.qml @@ -0,0 +1,190 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("SpotLight") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Scope") + tooltip: qsTr("Sets the scope of the light. Only the node and its children are affected by this light.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Node" + backendValue: backendValues.scope + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Brightness") + tooltip: qsTr("Sets the strength of the light.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.brightness + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Constant Fade") + tooltip: qsTr("Sets the constant attenuation of the light.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.constantFade + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Linear Fade") + tooltip: qsTr("Sets the linear attenuation of the light.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.linearFade + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Quadratic Fade") + tooltip: qsTr("Sets the quadratic attenuation of the light.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.quadraticFade + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Cone Angle") + tooltip: qsTr("Sets the angle of the light cone.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 180 + decimals: 2 + backendValue: backendValues.coneAngle + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Inner Cone Angle") + tooltip: qsTr("Sets the angle of the inner light cone.") + } + + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 180 + decimals: 2 + backendValue: backendValues.innerConeAngle + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Color") } + + ColorEditor { + backendValue: backendValues.color + supportGradient: false + } + + PropertyLabel { text: qsTr("Ambient Color") } + + ColorEditor { + backendValue: backendValues.ambientColor + supportGradient: false + } + } + } + + ShadowSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SpotLightSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SpotLightSpecifics.qml new file mode 100644 index 0000000..2b262a1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/SpotLightSpecifics.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + NodeSection { + width: parent.width + } + + SpotLightSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureInputSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureInputSection.qml new file mode 100644 index 0000000..92a1a17 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureInputSection.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Column { + width: parent.width + + Section { + caption: qsTr("Texture Input") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Texture") + tooltip: qsTr("Input texture.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Texture" + backendValue: backendValues.texture + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Enabled") + tooltip: qsTr("Texture enable state.") + } + + SecondColumnLayout { + CheckBox { + text: backendValues.enabled.valueToString + backendValue: backendValues.enabled + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureInputSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureInputSpecifics.qml new file mode 100644 index 0000000..08d4cb4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureInputSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + TextureInputSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureSection.qml new file mode 100644 index 0000000..18a3f27 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureSection.qml @@ -0,0 +1,275 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Image") + width: parent.width + + SectionLayout { + PropertyLabel { + text: qsTr("Source") + tooltip: qsTr("Holds the location of an image file containing the data used by the texture.") + } + + SecondColumnLayout { + UrlChooser { + backendValue: backendValues.source + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Source Item") + tooltip: qsTr("Defines an item to be used as the source of the texture.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick.Item" + backendValue: backendValues.sourceItem + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Scale") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 999999 + minimumValue: 0 + realDragRange: 2 + decimals: 2 + backendValue: backendValues.scaleU + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "U" + tooltip: qsTr("Defines how to scale the U texture coordinate when mapping to UV coordinates of a mesh.") + } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + maximumValue: 999999 + minimumValue: 0 + realDragRange: 2 + decimals: 2 + backendValue: backendValues.scaleV + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "V" + tooltip: qsTr("Defines how to scale the V texture coordinate when mapping to UV coordinates of a mesh.") + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Texture Mapping") + tooltip: qsTr("Defines which method of mapping to use when sampling this texture.") + } + + SecondColumnLayout { + ComboBox { + scope: "Texture" + model: ["UV", "Environment", "LightProbe"] + backendValue: backendValues.mappingMode + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("U Tiling") + tooltip: qsTr("Controls how the texture is mapped when the U scaling value is greater than 1.") + } + + SecondColumnLayout { + ComboBox { + scope: "Texture" + model: ["Unknown", "ClampToEdge", "MirroredRepeat", "Repeat"] + backendValue: backendValues.tilingModeHorizontal + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("V Tiling") + tooltip: qsTr("Controls how the texture is mapped when the V scaling value is greater than 1.") + } + + SecondColumnLayout { + ComboBox { + scope: "Texture" + model: ["Unknown", "ClampToEdge", "MirroredRepeat", "Repeat"] + backendValue: backendValues.tilingModeVertical + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("UV Rotation") + tooltip: qsTr("Rotates the texture around the pivot point.") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 999999 + minimumValue: -999999 + realDragRange: 360 + decimals: 0 + backendValue: backendValues.rotationUV + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Position") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 999999 + minimumValue: -999999 + realDragRange: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.positionU + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "U" + tooltip: qsTr("Offsets the U coordinate mapping from left to right.") + } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + maximumValue: 999999 + minimumValue: -999999 + realDragRange: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.positionV + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "V" + tooltip: qsTr("Offsets the V coordinate mapping from bottom to top.") + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Pivot") + } + + SecondColumnLayout { + SpinBox { + maximumValue: 999999 + minimumValue: -999999 + realDragRange: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.pivotU + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "U" + tooltip: qsTr("Sets the pivot U position.") + } + + Spacer { implicitWidth: StudioTheme.Values.controlGap } + + SpinBox { + maximumValue: 999999 + minimumValue: -999999 + realDragRange: 2 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.pivotV + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + Spacer { implicitWidth: StudioTheme.Values.controlLabelGap } + + ControlLabel { + text: "V" + tooltip: qsTr("Sets the pivot V position.") + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureSpecifics.qml new file mode 100644 index 0000000..e12b5e7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/TextureSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + TextureSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/View3DSection.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/View3DSection.qml new file mode 100644 index 0000000..132b587 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/View3DSection.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioTheme 1.0 as StudioTheme + +Section { + width: parent.width + caption: qsTr("View3D") + + SectionLayout { + PropertyLabel { + text: qsTr("Camera") + tooltip: qsTr("Specifies which camera is used to render the scene.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Camera" + backendValue: backendValues.camera + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Environment") + tooltip: qsTr("Specifies the scene environment used to render the scene.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.SceneEnvironment" + backendValue: backendValues.environment + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + + PropertyLabel { + text: qsTr("Import Scene") + tooltip: qsTr("Defines the reference node of the scene to render to the viewport.") + } + + SecondColumnLayout { + IdComboBox { + typeFilter: "QtQuick3D.Node" + backendValue: backendValues.importScene + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + } + + ExpandingSpacer {} + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/View3DSpecifics.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/View3DSpecifics.qml new file mode 100644 index 0000000..55d2ede --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/View3DSpecifics.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 + +Column { + width: parent.width + + View3DSection { + width: parent.width + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera.png new file mode 100644 index 0000000..4460421 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera16.png new file mode 100644 index 0000000..74d84d6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera@2x.png new file mode 100644 index 0000000..8931adb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/camera@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone.png new file mode 100644 index 0000000..29e0df7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone16.png new file mode 100644 index 0000000..d30f924 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone@2x.png new file mode 100644 index 0000000..099e80c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cone@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube.png new file mode 100644 index 0000000..9581263 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube16.png new file mode 100644 index 0000000..759f073 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube@2x.png new file mode 100644 index 0000000..7ab1e27 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cube@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder.png new file mode 100644 index 0000000..e391446 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder16.png new file mode 100644 index 0000000..37d683d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder@2x.png new file mode 100644 index 0000000..2b166ed Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/cylinder@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy.png new file mode 100644 index 0000000..a3b6c7f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy16.png new file mode 100644 index 0000000..de8906a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy@2x.png new file mode 100644 index 0000000..7ca04a0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/dummy@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group.png new file mode 100644 index 0000000..fd9d439 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group16.png new file mode 100644 index 0000000..0e85848 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group@2x.png new file mode 100644 index 0000000..d230647 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/group@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea.png new file mode 100644 index 0000000..54a32ee Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea16.png new file mode 100644 index 0000000..805340d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea@2x.png new file mode 100644 index 0000000..77e1f20 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightarea@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional.png new file mode 100644 index 0000000..1e800ba Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional16.png new file mode 100644 index 0000000..c326e8d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional@2x.png new file mode 100644 index 0000000..4ea4343 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightdirectional@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint.png new file mode 100644 index 0000000..06e81a7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint16.png new file mode 100644 index 0000000..0fe6eb5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint@2x.png new file mode 100644 index 0000000..0f627c2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightpoint@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot.png new file mode 100644 index 0000000..c256ef1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot16.png new file mode 100644 index 0000000..4d5ef11 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot@2x.png new file mode 100644 index 0000000..c15ae37 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/lightspot@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material.png new file mode 100644 index 0000000..7755645 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material16.png new file mode 100644 index 0000000..7f486b8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material@2x.png new file mode 100644 index 0000000..ea604a9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/material@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/model16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/model16.png new file mode 100644 index 0000000..759f073 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/model16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane.png new file mode 100644 index 0000000..87d4979 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane16.png new file mode 100644 index 0000000..6f55b08 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane@2x.png new file mode 100644 index 0000000..b8799e6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/plane@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene.png new file mode 100644 index 0000000..e13791e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene16.png new file mode 100644 index 0000000..202b2f9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene@2x.png new file mode 100644 index 0000000..cef25b1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/scene@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand.png new file mode 100644 index 0000000..86aa50b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand16.png new file mode 100644 index 0000000..62a9160 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand@2x.png new file mode 100644 index 0000000..6fc3793 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shadercommand@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil.png new file mode 100644 index 0000000..948752c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil16.png new file mode 100644 index 0000000..a33401e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil@2x.png new file mode 100644 index 0000000..a54511e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/shaderutil@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere.png new file mode 100644 index 0000000..28f0ab4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere16.png new file mode 100644 index 0000000..1db5129 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere@2x.png new file mode 100644 index 0000000..9243df7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/sphere@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture.png new file mode 100644 index 0000000..35abe7a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture16.png new file mode 100644 index 0000000..ea87efb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture@2x.png new file mode 100644 index 0000000..b13e4fa Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/texture@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D.png new file mode 100644 index 0000000..5ac7ae8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D16.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D16.png new file mode 100644 index 0000000..ade7500 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D16.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D@2x.png b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D@2x.png new file mode 100644 index 0000000..94a5c10 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/images/view3D@2x.png differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/quick3d.metainfo b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/quick3d.metainfo new file mode 100644 index 0000000..da90d99 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/quick3d.metainfo @@ -0,0 +1,588 @@ +MetaInfo { + Type { + name: "QtQuick3D.PerspectiveCamera" + icon: "images/camera16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Camera Perspective" + category: "Qt Quick 3D" + libraryIcon: "images/camera.png" + version: "1.0" + requiredImport: "QtQuick3D" + Property { name: "z"; type: "int"; value: 500; } + } + } + Type { + name: "QtQuick3D.OrthographicCamera" + icon: "images/camera16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Camera Orthographic" + category: "Qt Quick 3D" + libraryIcon: "images/camera.png" + version: "1.0" + requiredImport: "QtQuick3D" + Property { name: "z"; type: "int"; value: 500; } + } + } + Type { + name: "QtQuick3D.FrustumCamera" + icon: "images/camera16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Camera Frustum" + category: "Qt Quick 3D" + libraryIcon: "images/camera.png" + version: "1.0" + requiredImport: "QtQuick3D" + Property { name: "z"; type: "int"; value: 500; } + } + } + Type { + name: "QtQuick3D.CustomCamera" + icon: "images/camera16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Camera Custom" + category: "Qt Quick 3D" + libraryIcon: "images/camera.png" + version: "1.0" + requiredImport: "QtQuick3D" + Property { name: "z"; type: "int"; value: 500; } + } + } + Type { + name: "QtQuick3D.DefaultMaterial" + icon: "images/material16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Default Material" + category: "Qt Quick 3D" + libraryIcon: "images/material.png" + version: "1.0" + requiredImport: "QtQuick3D" + Property { name: "diffuseColor"; type: "color"; value: "green"; } + } + } + Type { + name: "QtQuick3D.PrincipledMaterial" + icon: "images/material16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Principled Material" + category: "Qt Quick 3D" + libraryIcon: "images/material.png" + version: "1.0" + requiredImport: "QtQuick3D" + Property { name: "baseColor"; type: "color"; value: "#ff000000"; } + Property { name: "metalness"; type: "int"; value: "0"; } + Property { name: "roughness"; type: "float"; value: "0.734981"; } + } + } + Type { + name: "QtQuick3D.Texture" + icon: "images/texture16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeContainer: false + } + + ItemLibraryEntry { + name: "Texture" + category: "Qt Quick 3D" + libraryIcon: "images/texture.png" + version: "1.0" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.DirectionalLight" + icon: "images/lightdirectional16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Light Directional" + category: "Qt Quick 3D" + libraryIcon: "images/lightdirectional.png" + version: "1.0" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.PointLight" + icon: "images/lightpoint16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Light Point" + category: "Qt Quick 3D" + libraryIcon: "images/lightpoint.png" + version: "1.0" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.AreaLight" + icon: "images/lightarea16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Light Area" + category: "Qt Quick 3D" + libraryIcon: "images/lightarea.png" + version: "1.0" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.SpotLight" + icon: "images/lightspot16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Light Spot" + category: "Qt Quick 3D" + libraryIcon: "images/lightspot.png" + version: "1.0" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Cube" + category: "Qt Quick 3D" + libraryIcon: "images/cube.png" + version: "1.0" + requiredImport: "QtQuick3D" + QmlSource { source: "./source/cube_model_template.qml" } + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Sphere" + category: "Qt Quick 3D" + libraryIcon: "images/sphere.png" + version: "1.0" + requiredImport: "QtQuick3D" + QmlSource { source: "./source/sphere_model_template.qml" } + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Cylinder" + category: "Qt Quick 3D" + libraryIcon: "images/cylinder.png" + version: "1.0" + requiredImport: "QtQuick3D" + QmlSource { source: "./source/cylinder_model_template.qml" } + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Plane" + category: "Qt Quick 3D" + libraryIcon: "images/plane.png" + version: "1.0" + requiredImport: "QtQuick3D" + QmlSource { source: "./source/plane_model_template.qml" } + } + } + Type { + name: "QtQuick3D.Model" + icon: "images/model16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + visibleNonDefaultProperties: "materials" + } + + ItemLibraryEntry { + name: "Cone" + category: "Qt Quick 3D" + libraryIcon: "images/cone.png" + version: "1.0" + requiredImport: "QtQuick3D" + QmlSource { source: "./source/cone_model_template.qml" } + } + } + Type { + name: "QtQuick3D.Node" + icon: "images/group16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeDroppedInView3D: true + } + + ItemLibraryEntry { + name: "Group" + category: "Qt Quick 3D" + libraryIcon: "images/group.png" + version: "1.0" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.SceneEnvironment" + icon: "images/scene16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Scene Environment" + category: "Qt Quick 3D" + libraryIcon: "images/scene.png" + version: "1.0" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.View3D" + icon: "images/view3D16.png" + + ItemLibraryEntry { + name: "View3D" + category: "Qt Quick 3D" + libraryIcon: "images/view3D.png" + version: "1.0" + requiredImport: "QtQuick3D" + QmlSource { source: "./source/view3D_template.qml" } + } + } + Type { + name: "QtQuick3D.Shader" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Shader" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.ShaderInfo" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Shader Info" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.TextureInput" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Texture Input" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.Pass" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Pass" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.BufferInput" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Buffer Input" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.BufferBlit" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Buffer Blit" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.Blending" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Blending" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.Buffer" + icon: "images/shaderutil16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Buffer" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shaderutil.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.RenderState" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Render State" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.CullMode" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Cull Mode" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.DepthInput" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Depth Input" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } + Type { + name: "QtQuick3D.SetUniformValue" + icon: "images/shadercommand16.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Set Uniform Value" + category: "Qt Quick 3D Custom Shader Utils" + libraryIcon: "images/shadercommand.png" + version: "1.15" + requiredImport: "QtQuick3D" + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cone_model_template.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cone_model_template.qml new file mode 100644 index 0000000..b2df2c4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cone_model_template.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +Model { + source: "#Cone" + + materials: coneMaterial + DefaultMaterial { + id: coneMaterial + diffuseColor: "#4aee45" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cube_model_template.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cube_model_template.qml new file mode 100644 index 0000000..fb893db --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cube_model_template.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +Model { + source: "#Cube" + + materials: cubeMaterial + DefaultMaterial { + id: cubeMaterial + diffuseColor: "#4aee45" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cylinder_model_template.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cylinder_model_template.qml new file mode 100644 index 0000000..527b2dc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/cylinder_model_template.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +Model { + source: "#Cylinder" + + materials: cylinderMaterial + DefaultMaterial { + id: cylinderMaterial + diffuseColor: "#4aee45" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/plane_model_template.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/plane_model_template.qml new file mode 100644 index 0000000..11953eb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/plane_model_template.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +Model { + source: "#Rectangle" + + materials: rectMaterial + DefaultMaterial { + id: rectMaterial + diffuseColor: "#4aee45" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/sphere_model_template.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/sphere_model_template.qml new file mode 100644 index 0000000..3225541 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/sphere_model_template.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +Model { + source: "#Sphere" + + materials: sphereMaterial + DefaultMaterial { + id: sphereMaterial + diffuseColor: "#4aee45" + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/view3D_template.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/view3D_template.qml new file mode 100644 index 0000000..db39927 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/designer/source/view3D_template.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Quick 3D. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick3D 1.15 + +View3D { + width: 400 + height: 400 + environment: sceneEnvironment + + SceneEnvironment { + id: sceneEnvironment + antialiasingMode: SceneEnvironment.MSAA + antialiasingQuality: SceneEnvironment.High + } + + Node { + id: scene + + DirectionalLight { + id: directionalLight + } + + PerspectiveCamera { + id: camera + z: 350 + } + + Model { + id: cubeModel + eulerRotation.x: 30 + eulerRotation.y: 45 + + source: "#Cube" + + materials: cubeMaterial + DefaultMaterial { + id: cubeMaterial + diffuseColor: "#4aee45" + } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/libqquick3dplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/libqquick3dplugin.so new file mode 100755 index 0000000..b7a2ba9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/libqquick3dplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/plugins.qmltypes new file mode 100644 index 0000000..0b54176 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/plugins.qmltypes @@ -0,0 +1,1998 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtQuick3D 1.15' + +Module { + dependencies: [ + "QtQuick 2.15", + "QtQuick.Window 2.1", + "QtQuick3D.Effects 1.15", + "QtQuick3D.Materials 1.15" + ] + Component { + name: "QQuick3DAbstractLight" + defaultProperty: "data" + prototype: "QQuick3DNode" + exports: ["QtQuick3D/Light 1.14"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "QSSGShadowMapQuality" + values: { + "ShadowMapQualityLow": 0, + "ShadowMapQualityMedium": 1, + "ShadowMapQualityHigh": 2, + "ShadowMapQualityVeryHigh": 3 + } + } + Property { name: "color"; type: "QColor" } + Property { name: "ambientColor"; type: "QColor" } + Property { name: "brightness"; type: "float" } + Property { name: "scope"; type: "QQuick3DNode"; isPointer: true } + Property { name: "castsShadow"; type: "bool" } + Property { name: "shadowBias"; type: "float" } + Property { name: "shadowFactor"; type: "float" } + Property { name: "shadowMapQuality"; type: "QSSGShadowMapQuality" } + Property { name: "shadowMapFar"; type: "float" } + Property { name: "shadowFilter"; type: "float" } + Method { + name: "setColor" + Parameter { name: "color"; type: "QColor" } + } + Method { + name: "setAmbientColor" + Parameter { name: "ambientColor"; type: "QColor" } + } + Method { + name: "setBrightness" + Parameter { name: "brightness"; type: "float" } + } + Method { + name: "setScope" + Parameter { name: "scope"; type: "QQuick3DNode"; isPointer: true } + } + Method { + name: "setCastsShadow" + Parameter { name: "castsShadow"; type: "bool" } + } + Method { + name: "setShadowBias" + Parameter { name: "shadowBias"; type: "float" } + } + Method { + name: "setShadowFactor" + Parameter { name: "shadowFactor"; type: "float" } + } + Method { + name: "setShadowMapQuality" + Parameter { name: "shadowMapQuality"; type: "QSSGShadowMapQuality" } + } + Method { + name: "setShadowMapFar" + Parameter { name: "shadowMapFar"; type: "float" } + } + Method { + name: "setShadowFilter" + Parameter { name: "shadowFilter"; type: "float" } + } + } + Component { + name: "QQuick3DAreaLight" + defaultProperty: "data" + prototype: "QQuick3DAbstractLight" + exports: ["QtQuick3D/AreaLight 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "width"; type: "float" } + Property { name: "height"; type: "float" } + Method { + name: "setWidth" + Parameter { name: "width"; type: "float" } + } + Method { + name: "setHeight" + Parameter { name: "height"; type: "float" } + } + } + Component { + name: "QQuick3DCamera" + defaultProperty: "data" + prototype: "QQuick3DNode" + exports: ["QtQuick3D/Camera 1.14", "QtQuick3D/Camera 1.15"] + isCreatable: false + exportMetaObjectRevisions: [0, 1] + Enum { + name: "FieldOfViewOrientation" + values: { + "Vertical": 0, + "Horizontal": 1 + } + } + Property { name: "frustumCullingEnabled"; type: "bool" } + Method { + name: "setFrustumCullingEnabled" + Parameter { name: "frustumCullingEnabled"; type: "bool" } + } + Method { + name: "mapToViewport" + type: "QVector3D" + Parameter { name: "scenePos"; type: "QVector3D" } + } + Method { + name: "mapFromViewport" + type: "QVector3D" + Parameter { name: "viewportPos"; type: "QVector3D" } + } + Method { + name: "lookAt" + revision: 1 + Parameter { name: "scenePos"; type: "QVector3D" } + } + Method { + name: "lookAt" + revision: 1 + Parameter { name: "node"; type: "const QQuick3DNode"; isPointer: true } + } + } + Component { + name: "QQuick3DCustomCamera" + defaultProperty: "data" + prototype: "QQuick3DCamera" + exports: ["QtQuick3D/CustomCamera 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "projection"; type: "QMatrix4x4" } + Method { + name: "setProjection" + Parameter { name: "projection"; type: "QMatrix4x4" } + } + } + Component { + name: "QQuick3DCustomMaterial" + defaultProperty: "data" + prototype: "QQuick3DMaterial" + exports: ["QtQuick3D.Materials/CustomMaterial 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "hasTransparency"; type: "bool" } + Property { name: "hasRefraction"; type: "bool" } + Property { name: "alwaysDirty"; type: "bool" } + Property { name: "shaderInfo"; type: "QQuick3DShaderUtilsShaderInfo"; isPointer: true } + Property { name: "passes"; type: "QQuick3DShaderUtilsRenderPass"; isList: true; isReadonly: true } + Signal { + name: "hasTransparencyChanged" + Parameter { name: "hasTransparency"; type: "bool" } + } + Signal { + name: "hasRefractionChanged" + Parameter { name: "hasRefraction"; type: "bool" } + } + Signal { + name: "alwaysDirtyChanged" + Parameter { name: "alwaysDirty"; type: "bool" } + } + Method { + name: "setHasTransparency" + Parameter { name: "hasTransparency"; type: "bool" } + } + Method { + name: "setHasRefraction" + Parameter { name: "hasRefraction"; type: "bool" } + } + Method { + name: "setShaderInfo" + Parameter { name: "shaderInfo"; type: "QQuick3DShaderUtilsShaderInfo"; isPointer: true } + } + Method { + name: "setAlwaysDirty" + Parameter { name: "alwaysDirty"; type: "bool" } + } + } + Component { + name: "QQuick3DDefaultMaterial" + defaultProperty: "data" + prototype: "QQuick3DMaterial" + exports: [ + "QtQuick3D/DefaultMaterial 1.14", + "QtQuick3D/DefaultMaterial 1.15" + ] + exportMetaObjectRevisions: [0, 1] + Enum { + name: "Lighting" + values: { + "NoLighting": 0, + "FragmentLighting": 1 + } + } + Enum { + name: "BlendMode" + values: { + "SourceOver": 0, + "Screen": 1, + "Multiply": 2, + "Overlay": 3, + "ColorBurn": 4, + "ColorDodge": 5 + } + } + Enum { + name: "SpecularModel" + values: { + "Default": 0, + "KGGX": 1, + "KWard": 2 + } + } + Property { name: "lighting"; type: "Lighting" } + Property { name: "blendMode"; type: "BlendMode" } + Property { name: "diffuseColor"; type: "QColor" } + Property { name: "diffuseMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "emissiveFactor"; type: "float" } + Property { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "emissiveColor"; type: "QColor" } + Property { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "specularModel"; type: "SpecularModel" } + Property { name: "specularTint"; type: "QColor" } + Property { name: "indexOfRefraction"; type: "float" } + Property { name: "fresnelPower"; type: "float" } + Property { name: "specularAmount"; type: "float" } + Property { name: "specularRoughness"; type: "float" } + Property { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "roughnessChannel"; revision: 1; type: "TextureChannelMapping" } + Property { name: "opacity"; type: "float" } + Property { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "opacityChannel"; revision: 1; type: "TextureChannelMapping" } + Property { name: "bumpMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "bumpAmount"; type: "float" } + Property { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "translucencyMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "translucencyChannel"; revision: 1; type: "TextureChannelMapping" } + Property { name: "translucentFalloff"; type: "float" } + Property { name: "diffuseLightWrap"; type: "float" } + Property { name: "vertexColorsEnabled"; type: "bool" } + Signal { + name: "lightingChanged" + Parameter { name: "lighting"; type: "Lighting" } + } + Signal { + name: "blendModeChanged" + Parameter { name: "blendMode"; type: "BlendMode" } + } + Signal { + name: "diffuseColorChanged" + Parameter { name: "diffuseColor"; type: "QColor" } + } + Signal { + name: "diffuseMapChanged" + Parameter { name: "diffuseMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "emissiveFactorChanged" + Parameter { name: "emissiveFactor"; type: "float" } + } + Signal { + name: "emissiveMapChanged" + Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "emissiveColorChanged" + Parameter { name: "emissiveColor"; type: "QColor" } + } + Signal { + name: "specularReflectionMapChanged" + Parameter { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "specularMapChanged" + Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "specularModelChanged" + Parameter { name: "specularModel"; type: "SpecularModel" } + } + Signal { + name: "specularTintChanged" + Parameter { name: "specularTint"; type: "QColor" } + } + Signal { + name: "indexOfRefractionChanged" + Parameter { name: "indexOfRefraction"; type: "float" } + } + Signal { + name: "fresnelPowerChanged" + Parameter { name: "fresnelPower"; type: "float" } + } + Signal { + name: "specularAmountChanged" + Parameter { name: "specularAmount"; type: "float" } + } + Signal { + name: "specularRoughnessChanged" + Parameter { name: "specularRoughness"; type: "float" } + } + Signal { + name: "roughnessMapChanged" + Parameter { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "opacityChanged" + Parameter { name: "opacity"; type: "float" } + } + Signal { + name: "opacityMapChanged" + Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "bumpMapChanged" + Parameter { name: "bumpMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "bumpAmountChanged" + Parameter { name: "bumpAmount"; type: "float" } + } + Signal { + name: "normalMapChanged" + Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "translucencyMapChanged" + Parameter { name: "translucencyMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "translucentFalloffChanged" + Parameter { name: "translucentFalloff"; type: "float" } + } + Signal { + name: "diffuseLightWrapChanged" + Parameter { name: "diffuseLightWrap"; type: "float" } + } + Signal { + name: "vertexColorsEnabledChanged" + Parameter { name: "vertexColorsEnabled"; type: "bool" } + } + Signal { + name: "roughnessChannelChanged" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Signal { + name: "opacityChannelChanged" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Signal { + name: "translucencyChannelChanged" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Method { + name: "setLighting" + Parameter { name: "lighting"; type: "Lighting" } + } + Method { + name: "setBlendMode" + Parameter { name: "blendMode"; type: "BlendMode" } + } + Method { + name: "setDiffuseColor" + Parameter { name: "diffuseColor"; type: "QColor" } + } + Method { + name: "setDiffuseMap" + Parameter { name: "diffuseMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setEmissiveFactor" + Parameter { name: "emissiveFactor"; type: "float" } + } + Method { + name: "setEmissiveMap" + Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setEmissiveColor" + Parameter { name: "emissiveColor"; type: "QColor" } + } + Method { + name: "setSpecularReflectionMap" + Parameter { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setSpecularMap" + Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setSpecularModel" + Parameter { name: "specularModel"; type: "SpecularModel" } + } + Method { + name: "setSpecularTint" + Parameter { name: "specularTint"; type: "QColor" } + } + Method { + name: "setIndexOfRefraction" + Parameter { name: "indexOfRefraction"; type: "float" } + } + Method { + name: "setFresnelPower" + Parameter { name: "fresnelPower"; type: "float" } + } + Method { + name: "setSpecularAmount" + Parameter { name: "specularAmount"; type: "float" } + } + Method { + name: "setSpecularRoughness" + Parameter { name: "specularRoughness"; type: "float" } + } + Method { + name: "setRoughnessMap" + Parameter { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setOpacity" + Parameter { name: "opacity"; type: "float" } + } + Method { + name: "setOpacityMap" + Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setBumpMap" + Parameter { name: "bumpMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setBumpAmount" + Parameter { name: "bumpAmount"; type: "float" } + } + Method { + name: "setNormalMap" + Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setTranslucencyMap" + Parameter { name: "translucencyMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setTranslucentFalloff" + Parameter { name: "translucentFalloff"; type: "float" } + } + Method { + name: "setDiffuseLightWrap" + Parameter { name: "diffuseLightWrap"; type: "float" } + } + Method { + name: "setVertexColorsEnabled" + Parameter { name: "vertexColorsEnabled"; type: "bool" } + } + Method { + name: "setRoughnessChannel" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Method { + name: "setOpacityChannel" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Method { + name: "setTranslucencyChannel" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + } + Component { + name: "QQuick3DDirectionalLight" + defaultProperty: "data" + prototype: "QQuick3DAbstractLight" + exports: ["QtQuick3D/DirectionalLight 1.14"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuick3DEffect" + defaultProperty: "data" + prototype: "QQuick3DObject" + exports: ["QtQuick3D.Effects/Effect 1.15"] + exportMetaObjectRevisions: [0] + Property { name: "passes"; type: "QQuick3DShaderUtilsRenderPass"; isList: true; isReadonly: true } + } + Component { + name: "QQuick3DFrustumCamera" + defaultProperty: "data" + prototype: "QQuick3DPerspectiveCamera" + exports: ["QtQuick3D/FrustumCamera 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "top"; type: "float" } + Property { name: "bottom"; type: "float" } + Property { name: "right"; type: "float" } + Property { name: "left"; type: "float" } + Method { + name: "setTop" + Parameter { name: "top"; type: "float" } + } + Method { + name: "setBottom" + Parameter { name: "bottom"; type: "float" } + } + Method { + name: "setRight" + Parameter { name: "right"; type: "float" } + } + Method { + name: "setLeft" + Parameter { name: "left"; type: "float" } + } + } + Component { + name: "QQuick3DGeometry" + defaultProperty: "data" + prototype: "QQuick3DObject" + exports: ["QtQuick3D/Geometry 1.14"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "name"; type: "string" } + Signal { name: "geometryNodeDirty" } + Method { + name: "setName" + Parameter { name: "name"; type: "string" } + } + } + Component { + name: "QQuick3DLoader" + defaultProperty: "data" + prototype: "QQuick3DNode" + exports: ["QtQuick3D/Loader3D 1.14"] + exportMetaObjectRevisions: [0] + Enum { + name: "Status" + values: { + "Null": 0, + "Ready": 1, + "Loading": 2, + "Error": 3 + } + } + Property { name: "active"; type: "bool" } + Property { name: "source"; type: "QUrl" } + Property { name: "sourceComponent"; type: "QQmlComponent"; isPointer: true } + Property { name: "item"; type: "QObject"; isReadonly: true; isPointer: true } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "progress"; type: "double"; isReadonly: true } + Property { name: "asynchronous"; type: "bool" } + Signal { name: "loaded" } + Method { + name: "setSource" + Parameter { type: "QQmlV4Function"; isPointer: true } + } + } + Component { + name: "QQuick3DMaterial" + defaultProperty: "data" + prototype: "QQuick3DObject" + exports: ["QtQuick3D/Material 1.14"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "CullMode" + values: { + "BackFaceCulling": 1, + "FrontFaceCulling": 2, + "NoCulling": 3 + } + } + Enum { + name: "TextureChannelMapping" + values: { + "R": 0, + "G": 1, + "B": 2, + "A": 3 + } + } + Property { name: "lightmapIndirect"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "lightmapRadiosity"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "lightmapShadow"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "lightProbe"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "displacementMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "displacementAmount"; type: "float" } + Property { name: "cullMode"; type: "CullMode" } + Signal { + name: "lightmapIndirectChanged" + Parameter { name: "lightmapIndirect"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "lightmapRadiosityChanged" + Parameter { name: "lightmapRadiosity"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "lightmapShadowChanged" + Parameter { name: "lightmapShadow"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "lightProbeChanged" + Parameter { name: "lightProbe"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "displacementMapChanged" + Parameter { name: "displacementMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "displacementAmountChanged" + Parameter { name: "displacementAmount"; type: "float" } + } + Signal { + name: "cullModeChanged" + Parameter { name: "cullMode"; type: "CullMode" } + } + Method { + name: "setLightmapIndirect" + Parameter { name: "lightmapIndirect"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setLightmapRadiosity" + Parameter { name: "lightmapRadiosity"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setLightmapShadow" + Parameter { name: "lightmapShadow"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setLightProbe" + Parameter { name: "lightProbe"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setDisplacementMap" + Parameter { name: "displacementMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setDisplacementAmount" + Parameter { name: "displacementAmount"; type: "float" } + } + Method { + name: "setCullMode" + Parameter { name: "cullMode"; type: "CullMode" } + } + } + Component { + name: "QQuick3DModel" + defaultProperty: "data" + prototype: "QQuick3DNode" + exports: ["QtQuick3D/Model 1.14", "QtQuick3D/Model 1.15"] + exportMetaObjectRevisions: [0, 1] + Enum { + name: "QSSGTessellationModeValues" + values: { + "NoTessellation": 0, + "Linear": 1, + "Phong": 2, + "NPatch": 3 + } + } + Property { name: "source"; type: "QUrl" } + Property { name: "tessellationMode"; type: "QSSGTessellationModeValues" } + Property { name: "edgeTessellation"; type: "float" } + Property { name: "innerTessellation"; type: "float" } + Property { name: "isWireframeMode"; type: "bool" } + Property { name: "castsShadows"; type: "bool" } + Property { name: "receivesShadows"; type: "bool" } + Property { name: "materials"; type: "QQuick3DMaterial"; isList: true; isReadonly: true } + Property { name: "pickable"; type: "bool" } + Property { name: "geometry"; type: "QQuick3DGeometry"; isPointer: true } + Property { name: "bounds"; revision: 1; type: "QQuick3DBounds3"; isReadonly: true } + Method { + name: "setSource" + Parameter { name: "source"; type: "QUrl" } + } + Method { + name: "setTessellationMode" + Parameter { name: "tessellationMode"; type: "QSSGTessellationModeValues" } + } + Method { + name: "setEdgeTessellation" + Parameter { name: "edgeTessellation"; type: "float" } + } + Method { + name: "setInnerTessellation" + Parameter { name: "innerTessellation"; type: "float" } + } + Method { + name: "setIsWireframeMode" + Parameter { name: "isWireframeMode"; type: "bool" } + } + Method { + name: "setCastsShadows" + Parameter { name: "castsShadows"; type: "bool" } + } + Method { + name: "setReceivesShadows" + Parameter { name: "receivesShadows"; type: "bool" } + } + Method { + name: "setPickable" + Parameter { name: "pickable"; type: "bool" } + } + Method { + name: "setGeometry" + Parameter { name: "geometry"; type: "QQuick3DGeometry"; isPointer: true } + } + Method { + name: "setBounds" + Parameter { name: "min"; type: "QVector3D" } + Parameter { name: "max"; type: "QVector3D" } + } + } + Component { + name: "QQuick3DNode" + defaultProperty: "data" + prototype: "QQuick3DObject" + exports: ["QtQuick3D/Node 1.14", "QtQuick3D/Node 1.15"] + exportMetaObjectRevisions: [0, 1] + Enum { + name: "TransformSpace" + values: { + "LocalSpace": 0, + "ParentSpace": 1, + "SceneSpace": 2 + } + } + Enum { + name: "StaticFlags" + values: { + "None": 0 + } + } + Property { name: "x"; type: "float" } + Property { name: "y"; type: "float" } + Property { name: "z"; type: "float" } + Property { name: "rotation"; revision: 1; type: "QQuaternion" } + Property { name: "eulerRotation"; revision: 1; type: "QVector3D" } + Property { name: "position"; type: "QVector3D" } + Property { name: "scale"; type: "QVector3D" } + Property { name: "pivot"; type: "QVector3D" } + Property { name: "opacity"; type: "float" } + Property { name: "visible"; type: "bool" } + Property { name: "forward"; type: "QVector3D"; isReadonly: true } + Property { name: "up"; type: "QVector3D"; isReadonly: true } + Property { name: "right"; type: "QVector3D"; isReadonly: true } + Property { name: "scenePosition"; type: "QVector3D"; isReadonly: true } + Property { name: "sceneRotation"; revision: 1; type: "QQuaternion"; isReadonly: true } + Property { name: "sceneScale"; type: "QVector3D"; isReadonly: true } + Property { name: "sceneTransform"; type: "QMatrix4x4"; isReadonly: true } + Property { name: "staticFlags"; revision: 1; type: "int" } + Signal { name: "rotationChanged"; revision: 1 } + Signal { name: "eulerRotationChanged"; revision: 1 } + Signal { name: "localOpacityChanged" } + Method { + name: "setX" + Parameter { name: "x"; type: "float" } + } + Method { + name: "setY" + Parameter { name: "y"; type: "float" } + } + Method { + name: "setZ" + Parameter { name: "z"; type: "float" } + } + Method { + name: "setRotation" + revision: 1 + Parameter { name: "rotation"; type: "QQuaternion" } + } + Method { + name: "setEulerRotation" + revision: 1 + Parameter { name: "eulerRotation"; type: "QVector3D" } + } + Method { + name: "setPosition" + Parameter { name: "position"; type: "QVector3D" } + } + Method { + name: "setScale" + Parameter { name: "scale"; type: "QVector3D" } + } + Method { + name: "setPivot" + Parameter { name: "pivot"; type: "QVector3D" } + } + Method { + name: "setLocalOpacity" + Parameter { name: "opacity"; type: "float" } + } + Method { + name: "setVisible" + Parameter { name: "visible"; type: "bool" } + } + Method { + name: "setStaticFlags" + Parameter { name: "staticFlags"; type: "int" } + } + Method { + name: "rotate" + Parameter { name: "degrees"; type: "double" } + Parameter { name: "axis"; type: "QVector3D" } + Parameter { name: "space"; type: "TransformSpace" } + } + Method { + name: "mapPositionToScene" + type: "QVector3D" + Parameter { name: "localPosition"; type: "QVector3D" } + } + Method { + name: "mapPositionFromScene" + type: "QVector3D" + Parameter { name: "scenePosition"; type: "QVector3D" } + } + Method { + name: "mapPositionToNode" + type: "QVector3D" + Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true } + Parameter { name: "localPosition"; type: "QVector3D" } + } + Method { + name: "mapPositionFromNode" + type: "QVector3D" + Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true } + Parameter { name: "localPosition"; type: "QVector3D" } + } + Method { + name: "mapDirectionToScene" + type: "QVector3D" + Parameter { name: "localDirection"; type: "QVector3D" } + } + Method { + name: "mapDirectionFromScene" + type: "QVector3D" + Parameter { name: "sceneDirection"; type: "QVector3D" } + } + Method { + name: "mapDirectionToNode" + type: "QVector3D" + Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true } + Parameter { name: "localDirection"; type: "QVector3D" } + } + Method { + name: "mapDirectionFromNode" + type: "QVector3D" + Parameter { name: "node"; type: "QQuick3DNode"; isPointer: true } + Parameter { name: "localDirection"; type: "QVector3D" } + } + } + Component { + name: "QQuick3DObject" + defaultProperty: "data" + prototype: "QObject" + exports: ["QtQuick3D/Object3D 1.14"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "parent"; type: "QQuick3DObject"; isPointer: true } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "resources"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "children"; type: "QQuick3DObject"; isList: true; isReadonly: true } + Property { name: "states"; type: "QQuickState"; isList: true; isReadonly: true } + Property { name: "transitions"; type: "QQuickTransition"; isList: true; isReadonly: true } + Property { name: "state"; type: "string" } + Method { name: "update" } + Method { + name: "setParentItem" + Parameter { name: "parentItem"; type: "QQuick3DObject"; isPointer: true } + } + } + Component { + name: "QQuick3DOrthographicCamera" + defaultProperty: "data" + prototype: "QQuick3DCamera" + exports: ["QtQuick3D/OrthographicCamera 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "clipNear"; type: "float" } + Property { name: "clipFar"; type: "float" } + Method { + name: "setClipNear" + Parameter { name: "clipNear"; type: "float" } + } + Method { + name: "setClipFar" + Parameter { name: "clipFar"; type: "float" } + } + } + Component { + name: "QQuick3DPerspectiveCamera" + defaultProperty: "data" + prototype: "QQuick3DCamera" + exports: ["QtQuick3D/PerspectiveCamera 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "clipNear"; type: "float" } + Property { name: "clipFar"; type: "float" } + Property { name: "fieldOfView"; type: "float" } + Property { name: "fieldOfViewOrientation"; type: "FieldOfViewOrientation" } + Method { + name: "setClipNear" + Parameter { name: "clipNear"; type: "float" } + } + Method { + name: "setClipFar" + Parameter { name: "clipFar"; type: "float" } + } + Method { + name: "setFieldOfView" + Parameter { name: "fieldOfView"; type: "float" } + } + Method { + name: "setFieldOfViewOrientation" + Parameter { name: "fieldOfViewOrientation"; type: "FieldOfViewOrientation" } + } + } + Component { + name: "QQuick3DPointLight" + defaultProperty: "data" + prototype: "QQuick3DAbstractLight" + exports: ["QtQuick3D/PointLight 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "constantFade"; type: "float" } + Property { name: "linearFade"; type: "float" } + Property { name: "quadraticFade"; type: "float" } + Method { + name: "setConstantFade" + Parameter { name: "constantFade"; type: "float" } + } + Method { + name: "setLinearFade" + Parameter { name: "linearFade"; type: "float" } + } + Method { + name: "setQuadraticFade" + Parameter { name: "quadraticFade"; type: "float" } + } + } + Component { + name: "QQuick3DPrincipledMaterial" + defaultProperty: "data" + prototype: "QQuick3DMaterial" + exports: [ + "QtQuick3D/PrincipledMaterial 1.14", + "QtQuick3D/PrincipledMaterial 1.15" + ] + exportMetaObjectRevisions: [0, 1] + Enum { + name: "Lighting" + values: { + "NoLighting": 0, + "FragmentLighting": 1 + } + } + Enum { + name: "BlendMode" + values: { + "SourceOver": 0, + "Screen": 1, + "Multiply": 2, + "Overlay": 3, + "ColorBurn": 4, + "ColorDodge": 5 + } + } + Enum { + name: "AlphaMode" + values: { + "Opaque": 0, + "Mask": 1, + "Blend": 2 + } + } + Property { name: "lighting"; type: "Lighting" } + Property { name: "blendMode"; type: "BlendMode" } + Property { name: "baseColor"; type: "QColor" } + Property { name: "baseColorMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "metalness"; type: "float" } + Property { name: "metalnessMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "metalnessChannel"; revision: 1; type: "TextureChannelMapping" } + Property { name: "specularAmount"; type: "float" } + Property { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "specularTint"; type: "float" } + Property { name: "roughness"; type: "float" } + Property { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "roughnessChannel"; revision: 1; type: "TextureChannelMapping" } + Property { name: "indexOfRefraction"; type: "float" } + Property { name: "emissiveColor"; type: "QColor" } + Property { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "opacity"; type: "float" } + Property { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "opacityChannel"; revision: 1; type: "TextureChannelMapping" } + Property { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "normalStrength"; type: "float" } + Property { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "occlusionMap"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "occlusionChannel"; revision: 1; type: "TextureChannelMapping" } + Property { name: "occlusionAmount"; type: "float" } + Property { name: "alphaMode"; type: "AlphaMode" } + Property { name: "alphaCutoff"; type: "float" } + Signal { + name: "lightingChanged" + Parameter { name: "lighting"; type: "Lighting" } + } + Signal { + name: "blendModeChanged" + Parameter { name: "blendMode"; type: "BlendMode" } + } + Signal { + name: "baseColorChanged" + Parameter { name: "baseColor"; type: "QColor" } + } + Signal { + name: "baseColorMapChanged" + Parameter { name: "baseColorMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "emissiveMapChanged" + Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "emissiveColorChanged" + Parameter { name: "emissiveColor"; type: "QColor" } + } + Signal { + name: "specularReflectionMapChanged" + Parameter { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "specularMapChanged" + Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "specularTintChanged" + Parameter { name: "specularTint"; type: "float" } + } + Signal { + name: "indexOfRefractionChanged" + Parameter { name: "indexOfRefraction"; type: "float" } + } + Signal { + name: "specularAmountChanged" + Parameter { name: "specularAmount"; type: "float" } + } + Signal { + name: "roughnessChanged" + Parameter { name: "roughness"; type: "float" } + } + Signal { + name: "roughnessMapChanged" + Parameter { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "opacityChanged" + Parameter { name: "opacity"; type: "float" } + } + Signal { + name: "opacityMapChanged" + Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "normalMapChanged" + Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "metalnessChanged" + Parameter { name: "metalness"; type: "float" } + } + Signal { + name: "metalnessMapChanged" + Parameter { name: "metalnessMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "normalStrengthChanged" + Parameter { name: "normalStrength"; type: "float" } + } + Signal { + name: "occlusionMapChanged" + Parameter { name: "occlusionMap"; type: "QQuick3DTexture"; isPointer: true } + } + Signal { + name: "occlusionAmountChanged" + Parameter { name: "occlusionAmount"; type: "float" } + } + Signal { + name: "alphaModeChanged" + Parameter { name: "alphaMode"; type: "AlphaMode" } + } + Signal { + name: "alphaCutoffChanged" + Parameter { name: "alphaCutoff"; type: "float" } + } + Signal { + name: "metalnessChannelChanged" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Signal { + name: "roughnessChannelChanged" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Signal { + name: "opacityChannelChanged" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Signal { + name: "occlusionChannelChanged" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Method { + name: "setLighting" + Parameter { name: "lighting"; type: "Lighting" } + } + Method { + name: "setBlendMode" + Parameter { name: "blendMode"; type: "BlendMode" } + } + Method { + name: "setBaseColor" + Parameter { name: "baseColor"; type: "QColor" } + } + Method { + name: "setBaseColorMap" + Parameter { name: "baseColorMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setEmissiveMap" + Parameter { name: "emissiveMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setEmissiveColor" + Parameter { name: "emissiveColor"; type: "QColor" } + } + Method { + name: "setSpecularReflectionMap" + Parameter { name: "specularReflectionMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setSpecularMap" + Parameter { name: "specularMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setSpecularTint" + Parameter { name: "specularTint"; type: "float" } + } + Method { + name: "setIndexOfRefraction" + Parameter { name: "indexOfRefraction"; type: "float" } + } + Method { + name: "setSpecularAmount" + Parameter { name: "specularAmount"; type: "float" } + } + Method { + name: "setRoughness" + Parameter { name: "roughness"; type: "float" } + } + Method { + name: "setRoughnessMap" + Parameter { name: "roughnessMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setOpacity" + Parameter { name: "opacity"; type: "float" } + } + Method { + name: "setOpacityMap" + Parameter { name: "opacityMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setNormalMap" + Parameter { name: "normalMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setMetalness" + Parameter { name: "metalnessAmount"; type: "float" } + } + Method { + name: "setMetalnessMap" + Parameter { name: "metalnessMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setNormalStrength" + Parameter { name: "normalStrength"; type: "float" } + } + Method { + name: "setOcclusionMap" + Parameter { name: "occlusionMap"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setOcclusionAmount" + Parameter { name: "occlusionAmount"; type: "float" } + } + Method { + name: "setAlphaMode" + Parameter { name: "alphaMode"; type: "AlphaMode" } + } + Method { + name: "setAlphaCutoff" + Parameter { name: "alphaCutoff"; type: "float" } + } + Method { + name: "setMetalnessChannel" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Method { + name: "setRoughnessChannel" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Method { + name: "setOpacityChannel" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + Method { + name: "setOcclusionChannel" + revision: 1 + Parameter { name: "channel"; type: "TextureChannelMapping" } + } + } + Component { + name: "QQuick3DQuaternionAnimation" + prototype: "QQuickPropertyAnimation" + exports: ["QtQuick3D/QuaternionAnimation 1.15"] + exportMetaObjectRevisions: [0] + Enum { + name: "Type" + values: { + "Slerp": 0, + "Nlerp": 1 + } + } + Property { name: "from"; type: "QQuaternion" } + Property { name: "to"; type: "QQuaternion" } + Property { name: "type"; type: "Type" } + Property { name: "fromXRotation"; type: "float" } + Property { name: "fromYRotation"; type: "float" } + Property { name: "fromZRotation"; type: "float" } + Property { name: "toXRotation"; type: "float" } + Property { name: "toYRotation"; type: "float" } + Property { name: "toZRotation"; type: "float" } + Signal { + name: "typeChanged" + Parameter { name: "type"; type: "Type" } + } + Signal { + name: "fromXRotationChanged" + Parameter { name: "value"; type: "float" } + } + Signal { + name: "fromYRotationChanged" + Parameter { name: "value"; type: "float" } + } + Signal { + name: "fromZRotationChanged" + Parameter { name: "value"; type: "float" } + } + Signal { + name: "toXRotationChanged" + Parameter { name: "value"; type: "float" } + } + Signal { + name: "toYRotationChanged" + Parameter { name: "value"; type: "float" } + } + Signal { + name: "toZRotationChanged" + Parameter { name: "value"; type: "float" } + } + } + Component { + name: "QQuick3DQuaternionUtils" + prototype: "QObject" + exports: ["QtQuick3D/Quaternion 1.15"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Method { + name: "fromAxesAndAngles" + type: "QQuaternion" + Parameter { name: "axis1"; type: "QVector3D" } + Parameter { name: "angle1"; type: "float" } + Parameter { name: "axis2"; type: "QVector3D" } + Parameter { name: "angle2"; type: "float" } + Parameter { name: "axis3"; type: "QVector3D" } + Parameter { name: "angle3"; type: "float" } + } + Method { + name: "fromAxesAndAngles" + type: "QQuaternion" + Parameter { name: "axis1"; type: "QVector3D" } + Parameter { name: "angle1"; type: "float" } + Parameter { name: "axis2"; type: "QVector3D" } + Parameter { name: "angle2"; type: "float" } + } + Method { + name: "fromAxisAndAngle" + type: "QQuaternion" + Parameter { name: "x"; type: "float" } + Parameter { name: "y"; type: "float" } + Parameter { name: "z"; type: "float" } + Parameter { name: "angle"; type: "float" } + } + Method { + name: "fromAxisAndAngle" + type: "QQuaternion" + Parameter { name: "axis"; type: "QVector3D" } + Parameter { name: "angle"; type: "float" } + } + Method { + name: "fromEulerAngles" + type: "QQuaternion" + Parameter { name: "x"; type: "float" } + Parameter { name: "y"; type: "float" } + Parameter { name: "z"; type: "float" } + } + Method { + name: "fromEulerAngles" + type: "QQuaternion" + Parameter { name: "eulerAngles"; type: "QVector3D" } + } + Method { + name: "lookAt" + revision: 1 + type: "QQuaternion" + Parameter { name: "sourcePosition"; type: "QVector3D" } + Parameter { name: "sourceDirection"; type: "QVector3D" } + Parameter { name: "targetPosition"; type: "QVector3D" } + Parameter { name: "upDirection"; type: "QVector3D" } + } + Method { + name: "lookAt" + revision: 1 + type: "QQuaternion" + Parameter { name: "sourcePosition"; type: "QVector3D" } + Parameter { name: "sourceDirection"; type: "QVector3D" } + Parameter { name: "targetPosition"; type: "QVector3D" } + } + } + Component { + name: "QQuick3DRepeater" + defaultProperty: "delegate" + prototype: "QQuick3DNode" + exports: ["QtQuick3D/Repeater3D 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "model"; type: "QVariant" } + Property { name: "delegate"; type: "QQmlComponent"; isPointer: true } + Property { name: "count"; type: "int"; isReadonly: true } + Signal { + name: "objectAdded" + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QQuick3DObject"; isPointer: true } + } + Signal { + name: "objectRemoved" + Parameter { name: "index"; type: "int" } + Parameter { name: "object"; type: "QQuick3DObject"; isPointer: true } + } + Method { + name: "objectAt" + type: "QQuick3DObject*" + Parameter { name: "index"; type: "int" } + } + } + Component { + name: "QQuick3DSceneEnvironment" + defaultProperty: "data" + prototype: "QQuick3DObject" + exports: [ + "QtQuick3D/SceneEnvironment 1.14", + "QtQuick3D/SceneEnvironment 1.15" + ] + exportMetaObjectRevisions: [0, 1] + Enum { + name: "QQuick3DEnvironmentAAModeValues" + values: { + "NoAA": 0, + "SSAA": 1, + "MSAA": 2, + "ProgressiveAA": 3 + } + } + Enum { + name: "QQuick3DEnvironmentAAQualityValues" + values: { + "Medium": 2, + "High": 4, + "VeryHigh": 8 + } + } + Enum { + name: "QQuick3DEnvironmentBackgroundTypes" + values: { + "Transparent": 0, + "Unspecified": 1, + "Color": 2, + "SkyBox": 3 + } + } + Property { name: "antialiasingMode"; type: "QQuick3DEnvironmentAAModeValues" } + Property { name: "antialiasingQuality"; type: "QQuick3DEnvironmentAAQualityValues" } + Property { name: "temporalAAEnabled"; type: "bool" } + Property { name: "temporalAAStrength"; type: "float" } + Property { name: "backgroundMode"; type: "QQuick3DEnvironmentBackgroundTypes" } + Property { name: "clearColor"; type: "QColor" } + Property { name: "depthTestEnabled"; type: "bool" } + Property { name: "depthPrePassEnabled"; type: "bool" } + Property { name: "aoStrength"; type: "float" } + Property { name: "aoDistance"; type: "float" } + Property { name: "aoSoftness"; type: "float" } + Property { name: "aoDither"; type: "bool" } + Property { name: "aoSampleRate"; type: "int" } + Property { name: "aoBias"; type: "float" } + Property { name: "lightProbe"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "probeBrightness"; type: "float" } + Property { name: "fastImageBasedLightingEnabled"; type: "bool" } + Property { name: "probeHorizon"; type: "float" } + Property { name: "probeFieldOfView"; type: "float" } + Property { name: "effects"; revision: 1; type: "QQuick3DEffect"; isList: true; isReadonly: true } + Method { + name: "setAntialiasingMode" + Parameter { name: "antialiasingMode"; type: "QQuick3DEnvironmentAAModeValues" } + } + Method { + name: "setAntialiasingQuality" + Parameter { name: "antialiasingQuality"; type: "QQuick3DEnvironmentAAQualityValues" } + } + Method { + name: "setTemporalAAEnabled" + Parameter { name: "temporalAAEnabled"; type: "bool" } + } + Method { + name: "setTemporalAAStrength" + Parameter { name: "strength"; type: "float" } + } + Method { + name: "setBackgroundMode" + Parameter { name: "backgroundMode"; type: "QQuick3DEnvironmentBackgroundTypes" } + } + Method { + name: "setClearColor" + Parameter { name: "clearColor"; type: "QColor" } + } + Method { + name: "setAoStrength" + Parameter { name: "aoStrength"; type: "float" } + } + Method { + name: "setAoDistance" + Parameter { name: "aoDistance"; type: "float" } + } + Method { + name: "setAoSoftness" + Parameter { name: "aoSoftness"; type: "float" } + } + Method { + name: "setAoDither" + Parameter { name: "aoDither"; type: "bool" } + } + Method { + name: "setAoSampleRate" + Parameter { name: "aoSampleRate"; type: "int" } + } + Method { + name: "setAoBias" + Parameter { name: "aoBias"; type: "float" } + } + Method { + name: "setLightProbe" + Parameter { name: "lightProbe"; type: "QQuick3DTexture"; isPointer: true } + } + Method { + name: "setProbeBrightness" + Parameter { name: "probeBrightness"; type: "float" } + } + Method { + name: "setFastImageBasedLightingEnabled" + Parameter { name: "fastImageBasedLightingEnabled"; type: "bool" } + } + Method { + name: "setProbeHorizon" + Parameter { name: "probeHorizon"; type: "float" } + } + Method { + name: "setProbeFieldOfView" + Parameter { name: "probeFieldOfView"; type: "float" } + } + Method { + name: "setDepthTestEnabled" + Parameter { name: "depthTestEnabled"; type: "bool" } + } + Method { + name: "setDepthPrePassEnabled" + Parameter { name: "depthPrePassEnabled"; type: "bool" } + } + } + Component { + name: "QQuick3DShaderApplyDepthValue" + prototype: "QQuick3DShaderUtilsRenderCommand" + exports: ["QtQuick3D/DepthInput 1.15"] + exportMetaObjectRevisions: [0] + Property { name: "param"; type: "QByteArray" } + } + Component { + name: "QQuick3DShaderUtilsApplyValue" + prototype: "QQuick3DShaderUtilsRenderCommand" + exports: ["QtQuick3D/SetUniformValue 1.15"] + exportMetaObjectRevisions: [0] + Property { name: "target"; type: "QByteArray" } + Property { name: "value"; type: "QVariant" } + } + Component { + name: "QQuick3DShaderUtilsBlending" + prototype: "QQuick3DShaderUtilsRenderCommand" + exports: ["QtQuick3D/Blending 1.14"] + exportMetaObjectRevisions: [0] + Enum { + name: "SrcBlending" + values: { + "Unknown": 0, + "Zero": 1, + "One": 2, + "SrcColor": 3, + "OneMinusSrcColor": 4, + "DstColor": 5, + "OneMinusDstColor": 6, + "SrcAlpha": 7, + "OneMinusSrcAlpha": 8, + "DstAlpha": 9, + "OneMinusDstAlpha": 10, + "ConstantColor": 11, + "OneMinusConstantColor": 12, + "ConstantAlpha": 13, + "OneMinusConstantAlpha": 14, + "SrcAlphaSaturate": 15 + } + } + Enum { + name: "DestBlending" + values: { + "Unknown": 0, + "Zero": 1, + "One": 2, + "SrcColor": 3, + "OneMinusSrcColor": 4, + "DstColor": 5, + "OneMinusDstColor": 6, + "SrcAlpha": 7, + "OneMinusSrcAlpha": 8, + "DstAlpha": 9, + "OneMinusDstAlpha": 10, + "ConstantColor": 11, + "OneMinusConstantColor": 12, + "ConstantAlpha": 13, + "OneMinusConstantAlpha": 14 + } + } + Property { name: "srcBlending"; type: "SrcBlending" } + Property { name: "destBlending"; type: "DestBlending" } + Method { + name: "setDestBlending" + Parameter { name: "destBlending"; type: "DestBlending" } + } + Method { + name: "setSrcBlending" + Parameter { name: "srcBlending"; type: "SrcBlending" } + } + } + Component { + name: "QQuick3DShaderUtilsBuffer" + prototype: "QObject" + exports: ["QtQuick3D/Buffer 1.14"] + exportMetaObjectRevisions: [0] + Enum { + name: "TextureFilterOperation" + values: { + "Unknown": 0, + "Nearest": 1, + "Linear": 2 + } + } + Enum { + name: "TextureCoordOperation" + values: { + "Unknown": 0, + "ClampToEdge": 1, + "MirroredRepeat": 2, + "Repeat": 3 + } + } + Enum { + name: "AllocateBufferFlagValues" + values: { + "None": 0, + "SceneLifetime": 1 + } + } + Enum { + name: "TextureFormat" + values: { + "Unknown": 0, + "R8": 1, + "R16": 2, + "R16F": 3, + "R32I": 4, + "R32UI": 5, + "R32F": 6, + "RG8": 7, + "RGBA8": 8, + "RGB8": 9, + "SRGB8": 10, + "SRGB8A8": 11, + "RGB565": 12, + "RGBA16F": 13, + "RG16F": 14, + "RG32F": 15, + "RGB32F": 16, + "RGBA32F": 17, + "R11G11B10": 18, + "RGB9E5": 19, + "Depth16": 20, + "Depth24": 21, + "Depth32": 22, + "Depth24Stencil8": 23 + } + } + Property { name: "format"; type: "TextureFormat" } + Property { name: "textureFilterOperation"; type: "TextureFilterOperation" } + Property { name: "textureCoordOperation"; type: "TextureCoordOperation" } + Property { name: "sizeMultiplier"; type: "float" } + Property { name: "bufferFlags"; type: "AllocateBufferFlagValues" } + Property { name: "name"; type: "QByteArray" } + } + Component { + name: "QQuick3DShaderUtilsBufferBlit" + prototype: "QQuick3DShaderUtilsRenderCommand" + exports: ["QtQuick3D/BufferBlit 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "source"; type: "QQuick3DShaderUtilsBuffer"; isPointer: true } + Property { name: "destination"; type: "QQuick3DShaderUtilsBuffer"; isPointer: true } + } + Component { + name: "QQuick3DShaderUtilsBufferInput" + prototype: "QQuick3DShaderUtilsRenderCommand" + exports: ["QtQuick3D/BufferInput 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "buffer"; type: "QQuick3DShaderUtilsBuffer"; isPointer: true } + Property { name: "param"; type: "QByteArray" } + } + Component { + name: "QQuick3DShaderUtilsCullMode" + prototype: "QQuick3DShaderUtilsRenderCommand" + exports: ["QtQuick3D/CullMode 1.15"] + exportMetaObjectRevisions: [0] + Property { name: "cullMode"; type: "QQuick3DMaterial::CullMode" } + Method { + name: "setCullMode" + Parameter { name: "cullMode"; type: "QQuick3DMaterial::CullMode" } + } + } + Component { + name: "QQuick3DShaderUtilsRenderCommand" + prototype: "QObject" + exports: ["QtQuick3D/Command 1.14"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QQuick3DShaderUtilsRenderPass" + prototype: "QObject" + exports: ["QtQuick3D/Pass 1.14"] + exportMetaObjectRevisions: [0] + Property { + name: "commands" + type: "QQuick3DShaderUtilsRenderCommand" + isList: true + isReadonly: true + } + Property { name: "output"; type: "QQuick3DShaderUtilsBuffer"; isPointer: true } + Property { name: "shaders"; type: "QQuick3DShaderUtilsShader"; isList: true; isReadonly: true } + } + Component { + name: "QQuick3DShaderUtilsRenderState" + prototype: "QQuick3DShaderUtilsRenderCommand" + exports: ["QtQuick3D/RenderState 1.14"] + exportMetaObjectRevisions: [0] + Enum { + name: "RenderState" + values: { + "Unknown": 0, + "Blend": 1, + "CullFace": 2, + "DepthTest": 3, + "StencilTest": 4, + "ScissorTest": 5, + "DepthWrite": 6, + "Multisample": 7 + } + } + Property { name: "renderState"; type: "RenderState" } + Property { name: "enabled"; type: "bool" } + Method { + name: "setRenderState" + Parameter { name: "renderState"; type: "RenderState" } + } + } + Component { + name: "QQuick3DShaderUtilsShader" + prototype: "QObject" + exports: ["QtQuick3D/Shader 1.14"] + exportMetaObjectRevisions: [0] + Enum { + name: "Stage" + values: { + "Shared": 0, + "Vertex": 1, + "Fragment": 2, + "Geometry": 3, + "Compute": 4 + } + } + Property { name: "shader"; type: "QByteArray" } + Property { name: "stage"; type: "Stage" } + } + Component { + name: "QQuick3DShaderUtilsShaderInfo" + prototype: "QObject" + exports: ["QtQuick3D/ShaderInfo 1.14"] + exportMetaObjectRevisions: [0] + Enum { + name: "MaterialShaderKeyValues" + values: { + "Diffuse": 1, + "Specular": 2, + "Cutout": 4, + "Refraction": 8, + "Transparent": 16, + "Displace": 32, + "Transmissive": 64, + "Glossy": 3 + } + } + Property { name: "version"; type: "QByteArray" } + Property { name: "type"; type: "QByteArray" } + Property { name: "shaderKey"; type: "int" } + } + Component { + name: "QQuick3DShaderUtilsTextureInput" + prototype: "QObject" + exports: ["QtQuick3D/TextureInput 1.14"] + exportMetaObjectRevisions: [0] + Property { name: "texture"; type: "QQuick3DTexture"; isPointer: true } + Property { name: "enabled"; type: "bool" } + Signal { + name: "textureDirty" + Parameter { name: "texture"; type: "QQuick3DShaderUtilsTextureInput"; isPointer: true } + } + Method { + name: "setTexture" + Parameter { name: "texture"; type: "QQuick3DTexture"; isPointer: true } + } + } + Component { + name: "QQuick3DSpotLight" + defaultProperty: "data" + prototype: "QQuick3DAbstractLight" + exports: ["QtQuick3D/SpotLight 1.15"] + exportMetaObjectRevisions: [0] + Property { name: "constantFade"; type: "float" } + Property { name: "linearFade"; type: "float" } + Property { name: "quadraticFade"; type: "float" } + Property { name: "coneAngle"; type: "float" } + Property { name: "innerConeAngle"; type: "float" } + Method { + name: "setConstantFade" + Parameter { name: "constantFade"; type: "float" } + } + Method { + name: "setLinearFade" + Parameter { name: "linearFade"; type: "float" } + } + Method { + name: "setQuadraticFade" + Parameter { name: "quadraticFade"; type: "float" } + } + Method { + name: "setConeAngle" + Parameter { name: "coneAngle"; type: "float" } + } + Method { + name: "setInnerConeAngle" + Parameter { name: "innerConeAngle"; type: "float" } + } + } + Component { + name: "QQuick3DTexture" + defaultProperty: "data" + prototype: "QQuick3DObject" + exports: ["QtQuick3D/Texture 1.14"] + exportMetaObjectRevisions: [0] + Enum { + name: "MappingMode" + values: { + "UV": 0, + "Environment": 1, + "LightProbe": 2 + } + } + Enum { + name: "TilingMode" + values: { + "ClampToEdge": 1, + "MirroredRepeat": 2, + "Repeat": 3 + } + } + Enum { + name: "Format" + values: { + "Automatic": 0, + "R8": 1, + "R16": 2, + "R16F": 3, + "R32I": 4, + "R32UI": 5, + "R32F": 6, + "RG8": 7, + "RGBA8": 8, + "RGB8": 9, + "SRGB8": 10, + "SRGB8A8": 11, + "RGB565": 12, + "RGBA5551": 13, + "Alpha8": 14, + "Luminance8": 15, + "Luminance16": 16, + "LuminanceAlpha8": 17, + "RGBA16F": 18, + "RG16F": 19, + "RG32F": 20, + "RGB32F": 21, + "RGBA32F": 22, + "R11G11B10": 23, + "RGB9E5": 24, + "RGBA_DXT1": 25, + "RGB_DXT1": 26, + "RGBA_DXT3": 27, + "RGBA_DXT5": 28, + "Depth16": 29, + "Depth24": 30, + "Depth32": 31, + "Depth24Stencil8": 32 + } + } + Property { name: "source"; type: "QUrl" } + Property { name: "sourceItem"; type: "QQuickItem"; isPointer: true } + Property { name: "scaleU"; type: "float" } + Property { name: "scaleV"; type: "float" } + Property { name: "mappingMode"; type: "MappingMode" } + Property { name: "tilingModeHorizontal"; type: "TilingMode" } + Property { name: "tilingModeVertical"; type: "TilingMode" } + Property { name: "rotationUV"; type: "float" } + Property { name: "positionU"; type: "float" } + Property { name: "positionV"; type: "float" } + Property { name: "pivotU"; type: "float" } + Property { name: "pivotV"; type: "float" } + Property { name: "flipV"; type: "bool" } + Property { name: "format"; type: "Format" } + Signal { name: "horizontalTilingChanged" } + Signal { name: "verticalTilingChanged" } + Method { + name: "setSource" + Parameter { name: "source"; type: "QUrl" } + } + Method { + name: "setSourceItem" + Parameter { name: "sourceItem"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "setScaleU" + Parameter { name: "scaleU"; type: "float" } + } + Method { + name: "setScaleV" + Parameter { name: "scaleV"; type: "float" } + } + Method { + name: "setMappingMode" + Parameter { name: "mappingMode"; type: "MappingMode" } + } + Method { + name: "setHorizontalTiling" + Parameter { name: "tilingModeHorizontal"; type: "TilingMode" } + } + Method { + name: "setVerticalTiling" + Parameter { name: "tilingModeVertical"; type: "TilingMode" } + } + Method { + name: "setRotationUV" + Parameter { name: "rotationUV"; type: "float" } + } + Method { + name: "setPositionU" + Parameter { name: "positionU"; type: "float" } + } + Method { + name: "setPositionV" + Parameter { name: "positionV"; type: "float" } + } + Method { + name: "setPivotU" + Parameter { name: "pivotU"; type: "float" } + } + Method { + name: "setPivotV" + Parameter { name: "pivotV"; type: "float" } + } + Method { + name: "setFlipV" + Parameter { name: "flipV"; type: "bool" } + } + Method { + name: "setFormat" + Parameter { name: "format"; type: "Format" } + } + } + Component { + name: "QQuick3DViewport" + defaultProperty: "data" + prototype: "QQuickItem" + exports: ["QtQuick3D/View3D 1.14"] + exportMetaObjectRevisions: [0] + Enum { + name: "RenderMode" + values: { + "Offscreen": 0, + "Underlay": 1, + "Overlay": 2, + "Inline": 3 + } + } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "camera"; type: "QQuick3DCamera"; isPointer: true } + Property { name: "environment"; type: "QQuick3DSceneEnvironment"; isPointer: true } + Property { name: "scene"; type: "QQuick3DNode"; isReadonly: true; isPointer: true } + Property { name: "importScene"; type: "QQuick3DNode"; isPointer: true } + Property { name: "renderMode"; type: "RenderMode" } + Property { name: "renderStats"; type: "QQuick3DRenderStats"; isReadonly: true; isPointer: true } + Method { + name: "setCamera" + Parameter { name: "camera"; type: "QQuick3DCamera"; isPointer: true } + } + Method { + name: "setEnvironment" + Parameter { name: "environment"; type: "QQuick3DSceneEnvironment"; isPointer: true } + } + Method { + name: "setImportScene" + Parameter { name: "inScene"; type: "QQuick3DNode"; isPointer: true } + } + Method { + name: "setRenderMode" + Parameter { name: "renderMode"; type: "RenderMode" } + } + Method { + name: "mapFrom3DScene" + type: "QVector3D" + Parameter { name: "scenePos"; type: "QVector3D" } + } + Method { + name: "mapTo3DScene" + type: "QVector3D" + Parameter { name: "viewPos"; type: "QVector3D" } + } + Method { + name: "pick" + type: "QQuick3DPickResult" + Parameter { name: "x"; type: "float" } + Parameter { name: "y"; type: "float" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/qmldir new file mode 100644 index 0000000..d5cad0b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtQuick3D/qmldir @@ -0,0 +1,5 @@ +module QtQuick3D +plugin qquick3dplugin +classname QQuick3DPlugin +typeinfo plugins.qmltypes +designersupported diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/libqtremoteobjects.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/libqtremoteobjects.so new file mode 100755 index 0000000..0b2af9b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/libqtremoteobjects.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/plugins.qmltypes new file mode 100644 index 0000000..bf9d156 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/plugins.qmltypes @@ -0,0 +1,128 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtRemoteObjects 5.15' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QRemoteObjectAbstractPersistedStore" + prototype: "QObject" + exports: ["QtRemoteObjects/PersistedStore 5.12"] + isCreatable: false + exportMetaObjectRevisions: [0] + } + Component { + name: "QRemoteObjectHost" + prototype: "QRemoteObjectHostBase" + exports: ["QtRemoteObjects/Host 5.15"] + exportMetaObjectRevisions: [0] + Property { name: "hostUrl"; type: "QUrl" } + } + Component { + name: "QRemoteObjectHostBase" + prototype: "QRemoteObjectNode" + Enum { + name: "AllowedSchemas" + values: { + "BuiltInSchemasOnly": 0, + "AllowExternalRegistration": 1 + } + } + Method { + name: "enableRemoting" + type: "bool" + Parameter { name: "object"; type: "QObject"; isPointer: true } + Parameter { name: "name"; type: "string" } + } + Method { + name: "enableRemoting" + type: "bool" + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Method { + name: "disableRemoting" + type: "bool" + Parameter { name: "remoteObject"; type: "QObject"; isPointer: true } + } + } + Component { + name: "QRemoteObjectNode" + prototype: "QObject" + exports: ["QtRemoteObjects/Node 5.12"] + exportMetaObjectRevisions: [0] + Enum { + name: "ErrorCode" + values: { + "NoError": 0, + "RegistryNotAcquired": 1, + "RegistryAlreadyHosted": 2, + "NodeIsNoServer": 3, + "ServerAlreadyCreated": 4, + "UnintendedRegistryHosting": 5, + "OperationNotValidOnClientNode": 6, + "SourceNotRegistered": 7, + "MissingObjectName": 8, + "HostUrlInvalid": 9, + "ProtocolMismatch": 10, + "ListenFailed": 11 + } + } + Property { name: "registryUrl"; type: "QUrl" } + Property { + name: "persistedStore" + type: "QRemoteObjectAbstractPersistedStore" + isPointer: true + } + Property { name: "heartbeatInterval"; type: "int" } + Signal { + name: "remoteObjectAdded" + Parameter { type: "QRemoteObjectSourceLocation" } + } + Signal { + name: "remoteObjectRemoved" + Parameter { type: "QRemoteObjectSourceLocation" } + } + Signal { + name: "error" + Parameter { name: "errorCode"; type: "QRemoteObjectNode::ErrorCode" } + } + Signal { + name: "heartbeatIntervalChanged" + Parameter { name: "heartbeatInterval"; type: "int" } + } + Method { + name: "connectToNode" + type: "bool" + Parameter { name: "address"; type: "QUrl" } + } + } + Component { + name: "QRemoteObjectSettingsStore" + prototype: "QRemoteObjectAbstractPersistedStore" + exports: ["QtRemoteObjects/SettingsStore 5.12"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QtQmlRemoteObjects" + prototype: "QObject" + exports: ["QtRemoteObjects/QtRemoteObjects 5.14"] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0] + Method { + name: "watch" + type: "QJSValue" + Parameter { name: "reply"; type: "QRemoteObjectPendingCall" } + Parameter { name: "timeout"; type: "int" } + } + Method { + name: "watch" + type: "QJSValue" + Parameter { name: "reply"; type: "QRemoteObjectPendingCall" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/qmldir new file mode 100644 index 0000000..a8d960b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtRemoteObjects/qmldir @@ -0,0 +1,3 @@ +module QtRemoteObjects +plugin qtremoteobjects +classname QtRemoteObjectsPlugin diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/libdeclarative_sensors.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/libdeclarative_sensors.so new file mode 100755 index 0000000..c6c44bf Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/libdeclarative_sensors.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/plugins.qmltypes new file mode 100644 index 0000000..c68c37b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/plugins.qmltypes @@ -0,0 +1,613 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable QtSensors 5.15' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QmlAccelerometer" + prototype: "QmlSensor" + exports: [ + "QtSensors/Accelerometer 5.0", + "QtSensors/Accelerometer 5.1", + "QtSensors/Accelerometer 5.2" + ] + exportMetaObjectRevisions: [0, 1, 1] + Enum { + name: "AccelerationMode" + values: { + "Combined": 0, + "Gravity": 1, + "User": 2 + } + } + Property { name: "accelerationMode"; revision: 1; type: "AccelerationMode" } + Signal { + name: "accelerationModeChanged" + revision: 1 + Parameter { name: "accelerationMode"; type: "AccelerationMode" } + } + } + Component { + name: "QmlAccelerometerReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/AccelerometerReading 5.0", + "QtSensors/AccelerometerReading 5.1", + "QtSensors/AccelerometerReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "z"; type: "double"; isReadonly: true } + } + Component { + name: "QmlAltimeter" + prototype: "QmlSensor" + exports: ["QtSensors/Altimeter 5.1", "QtSensors/Altimeter 5.2"] + exportMetaObjectRevisions: [0, 0] + } + Component { + name: "QmlAltimeterReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/AltimeterReading 5.1", + "QtSensors/AltimeterReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0] + Property { name: "altitude"; type: "double"; isReadonly: true } + } + Component { + name: "QmlAmbientLightSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/AmbientLightSensor 5.0", + "QtSensors/AmbientLightSensor 5.1", + "QtSensors/AmbientLightSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + } + Component { + name: "QmlAmbientLightSensorReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/AmbientLightReading 5.0", + "QtSensors/AmbientLightReading 5.1", + "QtSensors/AmbientLightReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "lightLevel"; type: "QAmbientLightReading::LightLevel"; isReadonly: true } + } + Component { + name: "QmlAmbientTemperatureReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/AmbientTemperatureReading 5.1", + "QtSensors/AmbientTemperatureReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0] + Property { name: "temperature"; type: "double"; isReadonly: true } + } + Component { + name: "QmlAmbientTemperatureSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/AmbientTemperatureSensor 5.1", + "QtSensors/AmbientTemperatureSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0] + } + Component { + name: "QmlCompass" + prototype: "QmlSensor" + exports: [ + "QtSensors/Compass 5.0", + "QtSensors/Compass 5.1", + "QtSensors/Compass 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + } + Component { + name: "QmlCompassReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/CompassReading 5.0", + "QtSensors/CompassReading 5.1", + "QtSensors/CompassReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "azimuth"; type: "double"; isReadonly: true } + Property { name: "calibrationLevel"; type: "double"; isReadonly: true } + } + Component { + name: "QmlDistanceReading" + prototype: "QmlSensorReading" + exports: ["QtSensors/DistanceReading 5.4"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "distance"; type: "double"; isReadonly: true } + } + Component { + name: "QmlDistanceSensor" + prototype: "QmlSensor" + exports: ["QtSensors/DistanceSensor 5.4"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QmlGyroscope" + prototype: "QmlSensor" + exports: [ + "QtSensors/Gyroscope 5.0", + "QtSensors/Gyroscope 5.1", + "QtSensors/Gyroscope 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + } + Component { + name: "QmlGyroscopeReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/GyroscopeReading 5.0", + "QtSensors/GyroscopeReading 5.1", + "QtSensors/GyroscopeReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "z"; type: "double"; isReadonly: true } + } + Component { + name: "QmlHolsterReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/HolsterReading 5.1", + "QtSensors/HolsterReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0] + Property { name: "holstered"; type: "bool"; isReadonly: true } + } + Component { + name: "QmlHolsterSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/HolsterSensor 5.1", + "QtSensors/HolsterSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0] + } + Component { + name: "QmlHumidityReading" + prototype: "QmlSensorReading" + exports: ["QtSensors/HumidityReading 5.9"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "relativeHumidity"; type: "double"; isReadonly: true } + Property { name: "absoluteHumidity"; type: "double"; isReadonly: true } + } + Component { + name: "QmlHumiditySensor" + prototype: "QmlSensor" + exports: ["QtSensors/HumiditySensor 5.9"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QmlIRProximitySensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/IRProximitySensor 5.0", + "QtSensors/IRProximitySensor 5.1", + "QtSensors/IRProximitySensor 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + } + Component { + name: "QmlIRProximitySensorReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/IRProximityReading 5.0", + "QtSensors/IRProximityReading 5.1", + "QtSensors/IRProximityReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "reflectance"; type: "double"; isReadonly: true } + } + Component { + name: "QmlLidReading" + prototype: "QmlSensorReading" + exports: ["QtSensors/LidReading 5.9"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "backLidChanged"; type: "bool"; isReadonly: true } + Property { name: "frontLidClosed"; type: "bool"; isReadonly: true } + Signal { + name: "backLidChanged" + Parameter { name: "closed"; type: "bool" } + } + Signal { + name: "frontLidChanged" + type: "bool" + Parameter { name: "closed"; type: "bool" } + } + } + Component { + name: "QmlLidSensor" + prototype: "QmlSensor" + exports: ["QtSensors/LidSensor 5.9"] + exportMetaObjectRevisions: [0] + } + Component { + name: "QmlLightSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/LightSensor 5.0", + "QtSensors/LightSensor 5.1", + "QtSensors/LightSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "fieldOfView"; type: "double"; isReadonly: true } + Signal { + name: "fieldOfViewChanged" + Parameter { name: "fieldOfView"; type: "double" } + } + } + Component { + name: "QmlLightSensorReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/LightReading 5.0", + "QtSensors/LightReading 5.1", + "QtSensors/LightReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "illuminance"; type: "double"; isReadonly: true } + } + Component { + name: "QmlMagnetometer" + prototype: "QmlSensor" + exports: [ + "QtSensors/Magnetometer 5.0", + "QtSensors/Magnetometer 5.1", + "QtSensors/Magnetometer 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "returnGeoValues"; type: "bool" } + Signal { + name: "returnGeoValuesChanged" + Parameter { name: "returnGeoValues"; type: "bool" } + } + } + Component { + name: "QmlMagnetometerReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/MagnetometerReading 5.0", + "QtSensors/MagnetometerReading 5.1", + "QtSensors/MagnetometerReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "z"; type: "double"; isReadonly: true } + Property { name: "calibrationLevel"; type: "double"; isReadonly: true } + } + Component { + name: "QmlOrientationSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/OrientationSensor 5.0", + "QtSensors/OrientationSensor 5.1", + "QtSensors/OrientationSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + } + Component { + name: "QmlOrientationSensorReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/OrientationReading 5.0", + "QtSensors/OrientationReading 5.1", + "QtSensors/OrientationReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "orientation"; type: "QOrientationReading::Orientation"; isReadonly: true } + } + Component { + name: "QmlPressureReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/PressureReading 5.1", + "QtSensors/PressureReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1] + Property { name: "pressure"; type: "double"; isReadonly: true } + Property { name: "temperature"; revision: 1; type: "double"; isReadonly: true } + Signal { name: "temperatureChanged"; revision: 1 } + } + Component { + name: "QmlPressureSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/PressureSensor 5.1", + "QtSensors/PressureSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0] + } + Component { + name: "QmlProximitySensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/ProximitySensor 5.0", + "QtSensors/ProximitySensor 5.1", + "QtSensors/ProximitySensor 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + } + Component { + name: "QmlProximitySensorReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/ProximityReading 5.0", + "QtSensors/ProximityReading 5.1", + "QtSensors/ProximityReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "near"; type: "bool"; isReadonly: true } + } + Component { + name: "QmlRotationSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/RotationSensor 5.0", + "QtSensors/RotationSensor 5.1", + "QtSensors/RotationSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "hasZ"; type: "bool"; isReadonly: true } + Signal { + name: "hasZChanged" + Parameter { name: "hasZ"; type: "bool" } + } + } + Component { + name: "QmlRotationSensorReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/RotationReading 5.0", + "QtSensors/RotationReading 5.1", + "QtSensors/RotationReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "x"; type: "double"; isReadonly: true } + Property { name: "y"; type: "double"; isReadonly: true } + Property { name: "z"; type: "double"; isReadonly: true } + } + Component { + name: "QmlSensor" + prototype: "QObject" + exports: [ + "QtSensors/Sensor 5.0", + "QtSensors/Sensor 5.1", + "QtSensors/Sensor 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 1, 1] + Enum { + name: "AxesOrientationMode" + values: { + "FixedOrientation": 0, + "AutomaticOrientation": 1, + "UserOrientation": 2 + } + } + Property { name: "identifier"; type: "string" } + Property { name: "type"; type: "string"; isReadonly: true } + Property { name: "connectedToBackend"; type: "bool"; isReadonly: true } + Property { name: "availableDataRates"; type: "QmlSensorRange"; isList: true; isReadonly: true } + Property { name: "dataRate"; type: "int" } + Property { name: "reading"; type: "QmlSensorReading"; isReadonly: true; isPointer: true } + Property { name: "busy"; type: "bool"; isReadonly: true } + Property { name: "active"; type: "bool" } + Property { name: "outputRanges"; type: "QmlSensorOutputRange"; isList: true; isReadonly: true } + Property { name: "outputRange"; type: "int" } + Property { name: "description"; type: "string"; isReadonly: true } + Property { name: "error"; type: "int"; isReadonly: true } + Property { name: "alwaysOn"; type: "bool" } + Property { name: "skipDuplicates"; revision: 1; type: "bool" } + Property { name: "axesOrientationMode"; revision: 1; type: "AxesOrientationMode" } + Property { name: "currentOrientation"; revision: 1; type: "int"; isReadonly: true } + Property { name: "userOrientation"; revision: 1; type: "int" } + Property { name: "maxBufferSize"; revision: 1; type: "int"; isReadonly: true } + Property { name: "efficientBufferSize"; revision: 1; type: "int"; isReadonly: true } + Property { name: "bufferSize"; revision: 1; type: "int" } + Signal { + name: "skipDuplicatesChanged" + revision: 1 + Parameter { name: "skipDuplicates"; type: "bool" } + } + Signal { + name: "axesOrientationModeChanged" + revision: 1 + Parameter { name: "axesOrientationMode"; type: "AxesOrientationMode" } + } + Signal { + name: "currentOrientationChanged" + revision: 1 + Parameter { name: "currentOrientation"; type: "int" } + } + Signal { + name: "userOrientationChanged" + revision: 1 + Parameter { name: "userOrientation"; type: "int" } + } + Signal { + name: "maxBufferSizeChanged" + revision: 1 + Parameter { name: "maxBufferSize"; type: "int" } + } + Signal { + name: "efficientBufferSizeChanged" + revision: 1 + Parameter { name: "efficientBufferSize"; type: "int" } + } + Signal { + name: "bufferSizeChanged" + revision: 1 + Parameter { name: "bufferSize"; type: "int" } + } + Method { name: "start"; type: "bool" } + Method { name: "stop" } + } + Component { + name: "QmlSensorGesture" + prototype: "QObject" + exports: [ + "QtSensors/SensorGesture 5.0", + "QtSensors/SensorGesture 5.1", + "QtSensors/SensorGesture 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "availableGestures"; type: "QStringList"; isReadonly: true } + Property { name: "gestures"; type: "QStringList" } + Property { name: "validGestures"; type: "QStringList"; isReadonly: true } + Property { name: "invalidGestures"; type: "QStringList"; isReadonly: true } + Property { name: "enabled"; type: "bool" } + Signal { + name: "detected" + Parameter { name: "gesture"; type: "string" } + } + } + Component { + name: "QmlSensorGlobal" + prototype: "QObject" + exports: [ + "QtSensors/QmlSensors 5.0", + "QtSensors/QmlSensors 5.1", + "QtSensors/QmlSensors 5.2" + ] + isCreatable: false + isSingleton: true + exportMetaObjectRevisions: [0, 0, 0] + Signal { name: "availableSensorsChanged" } + Method { name: "sensorTypes"; type: "QStringList" } + Method { + name: "sensorsForType" + type: "QStringList" + Parameter { name: "type"; type: "string" } + } + Method { + name: "defaultSensorForType" + type: "string" + Parameter { name: "type"; type: "string" } + } + } + Component { + name: "QmlSensorOutputRange" + prototype: "QObject" + exports: [ + "QtSensors/OutputRange 5.0", + "QtSensors/OutputRange 5.1", + "QtSensors/OutputRange 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "minimum"; type: "double"; isReadonly: true } + Property { name: "maximum"; type: "double"; isReadonly: true } + Property { name: "accuracy"; type: "double"; isReadonly: true } + } + Component { + name: "QmlSensorRange" + prototype: "QObject" + exports: [ + "QtSensors/Range 5.0", + "QtSensors/Range 5.1", + "QtSensors/Range 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "minimum"; type: "int"; isReadonly: true } + Property { name: "maximum"; type: "int"; isReadonly: true } + } + Component { + name: "QmlSensorReading" + prototype: "QObject" + exports: [ + "QtSensors/SensorReading 5.0", + "QtSensors/SensorReading 5.1", + "QtSensors/SensorReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "timestamp"; type: "qulonglong"; isReadonly: true } + } + Component { + name: "QmlTapSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/TapSensor 5.0", + "QtSensors/TapSensor 5.1", + "QtSensors/TapSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "returnDoubleTapEvents"; type: "bool" } + Signal { + name: "returnDoubleTapEventsChanged" + Parameter { name: "returnDoubleTapEvents"; type: "bool" } + } + } + Component { + name: "QmlTapSensorReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/TapReading 5.0", + "QtSensors/TapReading 5.1", + "QtSensors/TapReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "tapDirection"; type: "QTapReading::TapDirection"; isReadonly: true } + Property { name: "doubleTap"; type: "bool"; isReadonly: true } + Signal { name: "isDoubleTapChanged" } + } + Component { + name: "QmlTiltSensor" + prototype: "QmlSensor" + exports: [ + "QtSensors/TiltSensor 5.0", + "QtSensors/TiltSensor 5.1", + "QtSensors/TiltSensor 5.2" + ] + exportMetaObjectRevisions: [0, 0, 0] + Method { name: "calibrate" } + } + Component { + name: "QmlTiltSensorReading" + prototype: "QmlSensorReading" + exports: [ + "QtSensors/TiltReading 5.0", + "QtSensors/TiltReading 5.1", + "QtSensors/TiltReading 5.2" + ] + isCreatable: false + exportMetaObjectRevisions: [0, 0, 0] + Property { name: "yRotation"; type: "double"; isReadonly: true } + Property { name: "xRotation"; type: "double"; isReadonly: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/qmldir new file mode 100644 index 0000000..8ce4a5a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtSensors/qmldir @@ -0,0 +1,4 @@ +module QtSensors +plugin declarative_sensors +classname QtSensorsDeclarativeModule +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/SignalSpy.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/SignalSpy.qml new file mode 100644 index 0000000..52ed83e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/SignalSpy.qml @@ -0,0 +1,268 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite 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$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtTest 1.1 + +/*! + \qmltype SignalSpy + \inqmlmodule QtTest + \brief Enables introspection of signal emission. + \since 4.8 + \ingroup qtquicktest + + In the following example, a SignalSpy is installed to watch the + "clicked" signal on a user-defined Button type. When the signal + is emitted, the \l count property on the spy will be increased. + + \code + Button { + id: button + SignalSpy { + id: spy + target: button + signalName: "clicked" + } + TestCase { + name: "ButtonClick" + function test_click() { + compare(spy.count, 0) + button.clicked(); + compare(spy.count, 1) + } + } + } + \endcode + + The above style of test is suitable for signals that are emitted + synchronously. For asynchronous signals, the wait() method can be + used to block the test until the signal occurs (or a timeout expires). + + \sa {QtTest::TestCase}{TestCase}, {Qt Quick Test} +*/ + +Item { + id: spy + visible: false + + TestUtil { + id: util + } + // Public API. + /*! + \qmlproperty object SignalSpy::target + + This property defines the target object that will be used to + listen for emissions of the \l signalName signal. + + \sa signalName, count + */ + property var target: null + /*! + \qmlproperty string SignalSpy::signalName + + This property defines the name of the signal on \l target to + listen for. + + \sa target, count + */ + property string signalName: "" + /*! + \qmlproperty int SignalSpy::count + + This property defines the number of times that \l signalName has + been emitted from \l target since the last call to clear(). + + \sa target, signalName, clear() + \readonly + */ + readonly property alias count: spy.qtest_count + /*! + \qmlproperty bool SignalSpy::valid + + This property defines the current signal connection status. It will be true when the \l signalName of the \l target is connected successfully, otherwise it will be false. + + \sa count, target, signalName, clear() + \readonly + */ + readonly property alias valid:spy.qtest_valid + /*! + \qmlproperty list SignalSpy::signalArguments + + This property holds a list of emitted signal arguments. Each emission of the signal will append one item to the list, containing the arguments of the signal. + When connecting to a new \l target or new \l signalName or calling the \l clear() method, the \l signalArguments will be reset to empty. + + \sa signalName, clear() + \readonly + */ + readonly property alias signalArguments:spy.qtest_signalArguments + + /*! + \qmlmethod SignalSpy::clear() + + Clears \l count to 0, resets \l valid to false and clears the \l signalArguments to empty. + + \sa count, wait() + */ + function clear() { + qtest_count = 0 + qtest_expectedCount = 0 + qtest_signalArguments = [] + } + + /*! + \qmlmethod SignalSpy::wait(timeout = 5000) + + Waits for the signal \l signalName on \l target to be emitted, + for up to \a timeout milliseconds. The test case will fail if + the signal is not emitted. + + \code + SignalSpy { + id: spy + target: button + signalName: "clicked" + } + + function test_async_click() { + ... + // do something that will cause clicked() to be emitted + ... + spy.wait() + compare(spy.count, 1) + } + \endcode + + There are two possible scenarios: the signal has already been + emitted when wait() is called, or the signal has not yet been + emitted. The wait() function handles the first scenario by immediately + returning if the signal has already occurred. + + The clear() method can be used to discard information about signals + that have already occurred to synchronize wait() with future signal + emissions. + + \sa clear(), TestCase::tryCompare() + */ + function wait(timeout) { + if (timeout === undefined) + timeout = 5000 + var expected = ++qtest_expectedCount + var i = 0 + while (i < timeout && qtest_count < expected) { + qtest_results.wait(50) + i += 50 + } + var success = (qtest_count >= expected) + if (!qtest_results.verify(success, "wait for signal " + signalName, util.callerFile(), util.callerLine())) + throw new Error("QtQuickTest::fail") + } + + // Internal implementation detail follows. + + TestResult { id: qtest_results } + + onTargetChanged: { + qtest_update() + } + onSignalNameChanged: { + qtest_update() + } + + /*! \internal */ + property var qtest_prevTarget: null + /*! \internal */ + property string qtest_prevSignalName: "" + /*! \internal */ + property int qtest_expectedCount: 0 + /*! \internal */ + property var qtest_signalArguments:[] + /*! \internal */ + property int qtest_count: 0 + /*! \internal */ + property bool qtest_valid:false + /*! \internal */ + + /*! \internal */ + function qtest_update() { + if (qtest_prevTarget != null) { + var prevHandlerName = qtest_signalHandlerName(qtest_prevSignalName) + var prevFunc = qtest_prevTarget[prevHandlerName] + if (prevFunc) + prevFunc.disconnect(spy.qtest_activated) + qtest_prevTarget = null + qtest_prevSignalName = "" + } + if (target != null && signalName != "") { + // Look for the signal name in the object + var func = target[signalName] + if (typeof func !== "function") { + // If it is not a function, try looking for signal handler + // i.e. (onSignal) this is needed for cases where there is a property + // and a signal with the same name, e.g. Mousearea.pressed + func = target[qtest_signalHandlerName(signalName)] + } + if (func === undefined) { + spy.qtest_valid = false + console.log("Signal '" + signalName + "' not found") + } else { + qtest_prevTarget = target + qtest_prevSignalName = signalName + func.connect(spy.qtest_activated) + spy.qtest_valid = true + spy.qtest_signalArguments = [] + } + } else { + spy.qtest_valid = false + } + } + + /*! \internal */ + function qtest_activated() { + ++qtest_count + spy.qtest_signalArguments[spy.qtest_signalArguments.length] = arguments + } + + /*! \internal */ + function qtest_signalHandlerName(sn) { + if (sn.substr(0, 2) === "on" && sn[2] === sn[2].toUpperCase()) + return sn + return "on" + sn.substr(0, 1).toUpperCase() + sn.substr(1) + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/TestCase.qml b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/TestCase.qml new file mode 100644 index 0000000..380b7e3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/TestCase.qml @@ -0,0 +1,2045 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite 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$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Window 2.0 // used for qtest_verifyItem +import QtTest 1.2 +import "testlogger.js" as TestLogger +import Qt.test.qtestroot 1.0 + +/*! + \qmltype TestCase + \inqmlmodule QtTest + \brief Represents a unit test case. + \since 4.8 + \ingroup qtquicktest + + \section1 Introduction to QML Test Cases + + Test cases are written as JavaScript functions within a TestCase + type: + + \code + import QtQuick 2.0 + import QtTest 1.2 + + TestCase { + name: "MathTests" + + function test_math() { + compare(2 + 2, 4, "2 + 2 = 4") + } + + function test_fail() { + compare(2 + 2, 5, "2 + 2 = 5") + } + } + \endcode + + Functions whose names start with "test_" are treated as test cases + to be executed. The \l name property is used to prefix the functions + in the output: + + \code + ********* Start testing of MathTests ********* + Config: Using QTest library 4.7.2, Qt 4.7.2 + PASS : MathTests::initTestCase() + FAIL! : MathTests::test_fail() 2 + 2 = 5 + Actual (): 4 + Expected (): 5 + Loc: [/home/.../tst_math.qml(12)] + PASS : MathTests::test_math() + PASS : MathTests::cleanupTestCase() + Totals: 3 passed, 1 failed, 0 skipped + ********* Finished testing of MathTests ********* + \endcode + + Because of the way JavaScript properties work, the order in which the + test functions are found is unpredictable. To assist with predictability, + the test framework will sort the functions on ascending order of name. + This can help when there are two tests that must be run in order. + + Multiple TestCase types can be supplied. The test program will exit + once they have all completed. If a test case doesn't need to run + (because a precondition has failed), then \l optional can be set to true. + + \section1 Data-driven Tests + + Table data can be provided to a test using a function name that ends + with "_data". Alternatively, the \c init_data() function can be used + to provide default test data for all test functions in a TestCase type: + + + \code + import QtQuick 2.0 + import QtTest 1.2 + + TestCase { + name: "DataTests" + + function init_data() { + return [ + {tag:"init_data_1", a:1, b:2, answer: 3}, + {tag:"init_data_2", a:2, b:4, answer: 6} + ]; + } + + function test_table_data() { + return [ + {tag: "2 + 2 = 4", a: 2, b: 2, answer: 4 }, + {tag: "2 + 6 = 8", a: 2, b: 6, answer: 8 }, + ] + } + + function test_table(data) { + //data comes from test_table_data + compare(data.a + data.b, data.answer) + } + + function test__default_table(data) { + //data comes from init_data + compare(data.a + data.b, data.answer) + } + } + \endcode + + The test framework will iterate over all of the rows in the table + and pass each row to the test function. As shown, the columns can be + extracted for use in the test. The \c tag column is special - it is + printed by the test framework when a row fails, to help the reader + identify which case failed amongst a set of otherwise passing tests. + + \section1 Benchmarks + + Functions whose names start with "benchmark_" will be run multiple + times with the Qt benchmark framework, with an average timing value + reported for the runs. This is equivalent to using the \c{QBENCHMARK} + macro in the C++ version of QTestLib. + + \code + TestCase { + id: top + name: "CreateBenchmark" + + function benchmark_create_component() { + var component = Qt.createComponent("item.qml") + var obj = component.createObject(top) + obj.destroy() + component.destroy() + } + } + + RESULT : CreateBenchmark::benchmark_create_component: + 0.23 msecs per iteration (total: 60, iterations: 256) + PASS : CreateBenchmark::benchmark_create_component() + \endcode + + To get the effect of the \c{QBENCHMARK_ONCE} macro, prefix the test + function name with "benchmark_once_". + + \section1 Simulating Keyboard and Mouse Events + + The keyPress(), keyRelease(), and keyClick() methods can be used + to simulate keyboard events within unit tests. The events are + delivered to the currently focused QML item. You can pass either + a Qt.Key enum value or a latin1 char (string of length one) + + \code + Rectangle { + width: 50; height: 50 + focus: true + + TestCase { + name: "KeyClick" + when: windowShown + + function test_key_click() { + keyClick(Qt.Key_Left) + keyClick("a") + ... + } + } + } + \endcode + + The mousePress(), mouseRelease(), mouseClick(), mouseDoubleClickSequence() + and mouseMove() methods can be used to simulate mouse events in a + similar fashion. + + \b{Note:} keyboard and mouse events can only be delivered once the + main window has been shown. Attempts to deliver events before then + will fail. Use the \l when and windowShown properties to track + when the main window has been shown. + + \section1 Managing Dynamically Created Test Objects + + A typical pattern with QML tests is to + \l {Dynamic QML Object Creation from JavaScript}{dynamically create} + an item and then destroy it at the end of the test function: + + \code + TestCase { + id: testCase + name: "MyTest" + when: windowShown + + function test_click() { + var item = Qt.createQmlObject("import QtQuick 2.0; Item {}", testCase); + verify(item); + + // Test item... + + item.destroy(); + } + } + \endcode + + The problem with this pattern is that any failures in the test function + will cause the call to \c item.destroy() to be skipped, leaving the item + hanging around in the scene until the test case has finished. This can + result in interference with future tests; for example, by blocking input + events or producing unrelated debug output that makes it difficult to + follow the code's execution. + + By calling \l createTemporaryQmlObject() instead, the object is guaranteed + to be destroyed at the end of the test function: + + \code + TestCase { + id: testCase + name: "MyTest" + when: windowShown + + function test_click() { + var item = createTemporaryQmlObject("import QtQuick 2.0; Item {}", testCase); + verify(item); + + // Test item... + + // Don't need to worry about destroying "item" here. + } + } + \endcode + + For objects that are created via the \l {Component::}{createObject()} function + of \l Component, the \l createTemporaryObject() function can be used. + + \sa {QtTest::SignalSpy}{SignalSpy}, {Qt Quick Test} +*/ + + +Item { + id: testCase + visible: false + TestUtil { + id:util + } + + /*! + \qmlproperty string TestCase::name + + This property defines the name of the test case for result reporting. + The default value is an empty string. + + \code + TestCase { + name: "ButtonTests" + ... + } + \endcode + */ + property string name + + /*! + \qmlproperty bool TestCase::when + + This property should be set to true when the application wants + the test cases to run. The default value is true. In the following + example, a test is run when the user presses the mouse button: + + \code + Rectangle { + id: foo + width: 640; height: 480 + color: "cyan" + + MouseArea { + id: area + anchors.fill: parent + } + + property bool bar: true + + TestCase { + name: "ItemTests" + when: area.pressed + id: test1 + + function test_bar() { + verify(bar) + } + } + } + \endcode + + The test application will exit once all \l TestCase types + have been triggered and have run. The \l optional property can + be used to exclude a \l TestCase type. + + \sa optional, completed + */ + property bool when: true + + /*! + \qmlproperty bool TestCase::completed + + This property will be set to true once the test case has completed + execution. Test cases are only executed once. The initial value + is false. + + \sa running, when + */ + property bool completed: false + + /*! + \qmlproperty bool TestCase::running + + This property will be set to true while the test case is running. + The initial value is false, and the value will become false again + once the test case completes. + + \sa completed, when + */ + property bool running: false + + /*! + \qmlproperty bool TestCase::optional + + Multiple \l TestCase types can be supplied in a test application. + The application will exit once they have all completed. If a test case + does not need to run (because a precondition has failed), then this + property can be set to true. The default value is false. + + \code + TestCase { + when: false + optional: true + function test_not_run() { + verify(false) + } + } + \endcode + + \sa when, completed + */ + property bool optional: false + + /*! + \qmlproperty bool TestCase::windowShown + + This property will be set to true after the QML viewing window has + been displayed. Normally test cases run as soon as the test application + is loaded and before a window is displayed. If the test case involves + visual types and behaviors, then it may need to be delayed until + after the window is shown. + + \code + Button { + id: button + onClicked: text = "Clicked" + TestCase { + name: "ClickTest" + when: windowShown + function test_click() { + button.clicked(); + compare(button.text, "Clicked"); + } + } + } + \endcode + */ + property bool windowShown: QTestRootObject.windowShown + + // Internal private state. Identifiers prefixed with qtest are reserved. + /*! \internal */ + property bool qtest_prevWhen: true + /*! \internal */ + property int qtest_testId: -1 + /*! \internal */ + property bool qtest_componentCompleted : false + /*! \internal */ + property var qtest_testCaseResult + /*! \internal */ + property var qtest_results: qtest_results_normal + /*! \internal */ + TestResult { id: qtest_results_normal } + /*! \internal */ + property var qtest_events: qtest_events_normal + TestEvent { id: qtest_events_normal } + /*! \internal */ + property var qtest_temporaryObjects: [] + + /*! + \qmlmethod TestCase::fail(message = "") + + Fails the current test case, with the optional \a message. + Similar to \c{QFAIL(message)} in C++. + */ + function fail(msg) { + if (msg === undefined) + msg = ""; + qtest_results.fail(msg, util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + + /*! \internal */ + function qtest_fail(msg, frame) { + if (msg === undefined) + msg = ""; + qtest_results.fail(msg, util.callerFile(frame), util.callerLine(frame)) + throw new Error("QtQuickTest::fail") + } + + /*! + \qmlmethod TestCase::verify(condition, message = "") + + Fails the current test case if \a condition is false, and + displays the optional \a message. Similar to \c{QVERIFY(condition)} + or \c{QVERIFY2(condition, message)} in C++. + */ + function verify(cond, msg) { + if (arguments.length > 2) + qtest_fail("More than two arguments given to verify(). Did you mean tryVerify() or tryCompare()?", 1) + + if (msg === undefined) + msg = ""; + if (!qtest_results.verify(cond, msg, util.callerFile(), util.callerLine())) + throw new Error("QtQuickTest::fail") + } + + /*! + \since 5.8 + \qmlmethod TestCase::tryVerify(function, timeout = 5000, message = "") + + Fails the current test case if \a function does not evaluate to + \c true before the specified \a timeout (in milliseconds) has elapsed. + The function is evaluated multiple times until the timeout is + reached. An optional \a message is displayed upon failure. + + This function is intended for testing applications where a condition + changes based on asynchronous events. Use verify() for testing + synchronous condition changes, and tryCompare() for testing + asynchronous property changes. + + For example, in the code below, it's not possible to use tryCompare(), + because the \c currentItem property might be \c null for a short period + of time: + + \code + tryCompare(listView.currentItem, "text", "Hello"); + \endcode + + Instead, we can use tryVerify() to first check that \c currentItem + isn't \c null, and then use a regular compare afterwards: + + \code + tryVerify(function(){ return listView.currentItem }) + compare(listView.currentItem.text, "Hello") + \endcode + + \sa verify(), compare(), tryCompare(), SignalSpy::wait() + */ + function tryVerify(expressionFunction, timeout, msg) { + if (!expressionFunction || !(expressionFunction instanceof Function)) { + qtest_results.fail("First argument must be a function", util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + + if (timeout && typeof(timeout) !== "number") { + qtest_results.fail("timeout argument must be a number", util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + + if (msg && typeof(msg) !== "string") { + qtest_results.fail("message argument must be a string", util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + + if (!timeout) + timeout = 5000 + + if (msg === undefined) + msg = "function returned false" + + if (!expressionFunction()) + wait(0) + + var i = 0 + while (i < timeout && !expressionFunction()) { + wait(50) + i += 50 + } + + if (!qtest_results.verify(expressionFunction(), msg, util.callerFile(), util.callerLine())) + throw new Error("QtQuickTest::fail") + } + + /*! + \since 5.13 + \qmlmethod bool TestCase::isPolishScheduled(object item) + + Returns \c true if \l {QQuickItem::}{updatePolish()} has not been called + on \a item since the last call to \l {QQuickItem::}{polish()}, + otherwise returns \c false. + + When assigning values to properties in QML, any layouting the item + must do as a result of the assignment might not take effect immediately, + but can instead be postponed until the item is polished. For these cases, + you can use this function to ensure that the item has been polished + before the execution of the test continues. For example: + + \code + verify(isPolishScheduled(item)) + verify(waitForItemPolished(item)) + \endcode + + Without the call to \c isPolishScheduled() above, the + call to \c waitForItemPolished() might see that no polish + was scheduled and therefore pass instantly, assuming that + the item had already been polished. This function + makes it obvious why an item wasn't polished and allows tests to + fail early under such circumstances. + + \sa waitForItemPolished(), QQuickItem::polish(), QQuickItem::updatePolish() + */ + function isPolishScheduled(item) { + if (!item || typeof item !== "object") { + qtest_results.fail("Argument must be a valid Item; actual type is " + typeof item, + util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + + return qtest_results.isPolishScheduled(item) + } + + /*! + \since 5.13 + \qmlmethod bool waitForItemPolished(object item, int timeout = 5000) + + Waits for \a timeout milliseconds or until + \l {QQuickItem::}{updatePolish()} has been called on \a item. + + Returns \c true if \c updatePolish() was called on \a item within + \a timeout milliseconds, otherwise returns \c false. + + \sa isPolishScheduled(), QQuickItem::polish(), QQuickItem::updatePolish() + */ + function waitForItemPolished(item, timeout) { + if (!item || typeof item !== "object") { + qtest_results.fail("First argument must be a valid Item; actual type is " + typeof item, + util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + + if (timeout !== undefined && typeof(timeout) != "number") { + qtest_results.fail("Second argument must be a number; actual type is " + typeof timeout, + util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + + if (!timeout) + timeout = 5000 + + return qtest_results.waitForItemPolished(item, timeout) + } + + /*! + \since 5.9 + \qmlmethod object TestCase::createTemporaryQmlObject(string qml, object parent, string filePath) + + This function dynamically creates a QML object from the given \a qml + string with the specified \a parent. The returned object will be + destroyed (if it was not already) after \l cleanup() has finished + executing, meaning that objects created with this function are + guaranteed to be destroyed after each test, regardless of whether or + not the tests fail. + + If there was an error while creating the object, \c null will be + returned. + + If \a filePath is specified, it will be used for error reporting for + the created object. + + This function calls + \l {QtQml::Qt::createQmlObject()}{Qt.createQmlObject()} internally. + + \sa {Managing Dynamically Created Test Objects} + */ + function createTemporaryQmlObject(qml, parent, filePath) { + if (typeof qml !== "string") { + qtest_results.fail("First argument must be a string of QML; actual type is " + typeof qml, + util.callerFile(), util.callerLine()); + throw new Error("QtQuickTest::fail"); + } + + if (!parent || typeof parent !== "object") { + qtest_results.fail("Second argument must be a valid parent object; actual type is " + typeof parent, + util.callerFile(), util.callerLine()); + throw new Error("QtQuickTest::fail"); + } + + if (filePath !== undefined && typeof filePath !== "string") { + qtest_results.fail("Third argument must be a file path string; actual type is " + typeof filePath, + util.callerFile(), util.callerLine()); + throw new Error("QtQuickTest::fail"); + } + + var object = Qt.createQmlObject(qml, parent, filePath); + qtest_temporaryObjects.push(object); + return object; + } + + /*! + \since 5.9 + \qmlmethod object TestCase::createTemporaryObject(Component component, object parent, object properties) + + This function dynamically creates a QML object from the given + \a component with the specified optional \a parent and \a properties. + The returned object will be destroyed (if it was not already) after + \l cleanup() has finished executing, meaning that objects created with + this function are guaranteed to be destroyed after each test, + regardless of whether or not the tests fail. + + If there was an error while creating the object, \c null will be + returned. + + This function calls + \l {QtQml::Component::createObject()}{component.createObject()} + internally. + + \sa {Managing Dynamically Created Test Objects} + */ + function createTemporaryObject(component, parent, properties) { + if (typeof component !== "object") { + qtest_results.fail("First argument must be a Component; actual type is " + typeof component, + util.callerFile(), util.callerLine()); + throw new Error("QtQuickTest::fail"); + } + + if (properties && typeof properties !== "object") { + qtest_results.fail("Third argument must be an object; actual type is " + typeof properties, + util.callerFile(), util.callerLine()); + throw new Error("QtQuickTest::fail"); + } + + var object = component.createObject(parent, properties ? properties : ({})); + qtest_temporaryObjects.push(object); + return object; + } + + /*! + \internal + + Destroys all temporary objects that still exist. + */ + function qtest_destroyTemporaryObjects() { + for (var i = 0; i < qtest_temporaryObjects.length; ++i) { + var temporaryObject = qtest_temporaryObjects[i]; + // ### the typeof check can be removed when QTBUG-57749 is fixed + if (temporaryObject && typeof temporaryObject.destroy === "function") + temporaryObject.destroy(); + } + qtest_temporaryObjects = []; + } + + /*! \internal */ + // Determine what is o. + // Discussions and reference: http://philrathe.com/articles/equiv + // Test suites: http://philrathe.com/tests/equiv + // Author: Philippe Rathé + function qtest_typeof(o) { + if (typeof o === "undefined") { + return "undefined"; + + // consider: typeof null === object + } else if (o === null) { + return "null"; + + } else if (o.constructor === String) { + return "string"; + + } else if (o.constructor === Boolean) { + return "boolean"; + + } else if (o.constructor === Number) { + + if (isNaN(o)) { + return "nan"; + } else { + return "number"; + } + // consider: typeof [] === object + } else if (o instanceof Array) { + return "array"; + + // consider: typeof new Date() === object + } else if (o instanceof Date) { + return "date"; + + // consider: /./ instanceof Object; + // /./ instanceof RegExp; + // typeof /./ === "function"; // => false in IE and Opera, + // true in FF and Safari + } else if (o instanceof RegExp) { + return "regexp"; + + } else if (typeof o === "object") { + if ("mapFromItem" in o && "mapToItem" in o) { + return "declarativeitem"; // @todo improve detection of declarative items + } else if ("x" in o && "y" in o && "z" in o) { + return "vector3d"; // Qt 3D vector + } + return "object"; + } else if (o instanceof Function) { + return "function"; + } else { + return undefined; + } + } + + /*! \internal */ + // Test for equality + // Large parts contain sources from QUnit or http://philrathe.com + // Discussions and reference: http://philrathe.com/articles/equiv + // Test suites: http://philrathe.com/tests/equiv + // Author: Philippe Rathé + function qtest_compareInternal(act, exp) { + var success = false; + if (act === exp) { + success = true; // catch the most you can + } else if (act === null || exp === null || typeof act === "undefined" || typeof exp === "undefined") { + success = false; // don't lose time with error prone cases + } else { + var typeExp = qtest_typeof(exp), typeAct = qtest_typeof(act) + if (typeExp !== typeAct) { + // allow object vs string comparison (e.g. for colors) + // else break on different types + if ((typeExp === "string" && (typeAct === "object") || typeAct == "declarativeitem") + || ((typeExp === "object" || typeExp == "declarativeitem") && typeAct === "string")) { + success = (act == exp) + } + } else if (typeExp === "string" || typeExp === "boolean" || + typeExp === "null" || typeExp === "undefined") { + if (exp instanceof act.constructor || act instanceof exp.constructor) { + // to catch short annotaion VS 'new' annotation of act declaration + // e.g. var i = 1; + // var j = new Number(1); + success = (act == exp) + } else { + success = (act === exp) + } + } else if (typeExp === "nan") { + success = isNaN(act); + } else if (typeExp === "number") { + // Use act fuzzy compare if the two values are floats + if (Math.abs(act - exp) <= 0.00001) { + success = true + } + } else if (typeExp === "array") { + success = qtest_compareInternalArrays(act, exp) + } else if (typeExp === "object") { + success = qtest_compareInternalObjects(act, exp) + } else if (typeExp === "declarativeitem") { + success = qtest_compareInternalObjects(act, exp) // @todo improve comparison of declarative items + } else if (typeExp === "vector3d") { + success = (Math.abs(act.x - exp.x) <= 0.00001 && + Math.abs(act.y - exp.y) <= 0.00001 && + Math.abs(act.z - exp.z) <= 0.00001) + } else if (typeExp === "date") { + success = (act.valueOf() === exp.valueOf()) + } else if (typeExp === "regexp") { + success = (act.source === exp.source && // the regex itself + act.global === exp.global && // and its modifers (gmi) ... + act.ignoreCase === exp.ignoreCase && + act.multiline === exp.multiline) + } + } + return success + } + + /*! \internal */ + function qtest_compareInternalObjects(act, exp) { + var i; + var eq = true; // unless we can proove it + var aProperties = [], bProperties = []; // collection of strings + + // comparing constructors is more strict than using instanceof + if (act.constructor !== exp.constructor) { + return false; + } + + for (i in act) { // be strict: don't ensures hasOwnProperty and go deep + aProperties.push(i); // collect act's properties + if (!qtest_compareInternal(act[i], exp[i])) { + eq = false; + break; + } + } + + for (i in exp) { + bProperties.push(i); // collect exp's properties + } + + if (aProperties.length == 0 && bProperties.length == 0) { // at least a special case for QUrl + return eq && (JSON.stringify(act) == JSON.stringify(exp)); + } + + // Ensures identical properties name + return eq && qtest_compareInternal(aProperties.sort(), bProperties.sort()); + + } + + /*! \internal */ + function qtest_compareInternalArrays(actual, expected) { + if (actual.length != expected.length) { + return false + } + + for (var i = 0, len = actual.length; i < len; i++) { + if (!qtest_compareInternal(actual[i], expected[i])) { + return false + } + } + + return true + } + + /*! + \qmlmethod TestCase::compare(actual, expected, message = "") + + Fails the current test case if \a actual is not the same as + \a expected, and displays the optional \a message. Similar + to \c{QCOMPARE(actual, expected)} in C++. + + \sa tryCompare(), fuzzyCompare + */ + function compare(actual, expected, msg) { + var act = qtest_results.stringify(actual) + var exp = qtest_results.stringify(expected) + + var success = qtest_compareInternal(actual, expected) + if (msg === undefined) { + if (success) + msg = "COMPARE()" + else + msg = "Compared values are not the same" + } + if (!qtest_results.compare(success, msg, act, exp, util.callerFile(), util.callerLine())) { + throw new Error("QtQuickTest::fail") + } + } + + /*! + \qmlmethod TestCase::fuzzyCompare(actual, expected, delta, message = "") + + Fails the current test case if the difference betwen \a actual and \a expected + is greater than \a delta, and displays the optional \a message. Similar + to \c{qFuzzyCompare(actual, expected)} in C++ but with a required \a delta value. + + This function can also be used for color comparisons if both the \a actual and + \a expected values can be converted into color values. If any of the differences + for RGBA channel values are greater than \a delta, the test fails. + + \sa tryCompare(), compare() + */ + function fuzzyCompare(actual, expected, delta, msg) { + if (delta === undefined) + qtest_fail("A delta value is required for fuzzyCompare", 2) + + var success = qtest_results.fuzzyCompare(actual, expected, delta) + if (msg === undefined) { + if (success) + msg = "FUZZYCOMPARE()" + else + msg = "Compared values are not the same with delta(" + delta + ")" + } + + if (!qtest_results.compare(success, msg, actual, expected, util.callerFile(), util.callerLine())) { + throw new Error("QtQuickTest::fail") + } + } + + /*! + \qmlmethod object TestCase::grabImage(item) + + Returns a snapshot image object of the given \a item. + + The returned image object has the following properties: + \list + \li width Returns the width of the underlying image (since 5.10) + \li height Returns the height of the underlying image (since 5.10) + \li size Returns the size of the underlying image (since 5.10) + \endlist + + Additionally, the returned image object has the following methods: + \list + \li \c {red(x, y)} Returns the red channel value of the pixel at \e x, \e y position + \li \c {green(x, y)} Returns the green channel value of the pixel at \e x, \e y position + \li \c {blue(x, y)} Returns the blue channel value of the pixel at \e x, \e y position + \li \c {alpha(x, y)} Returns the alpha channel value of the pixel at \e x, \e y position + \li \c {pixel(x, y)} Returns the color value of the pixel at \e x, \e y position + \li \c {equals(image)} Returns \c true if this image is identical to \e image - + see \l QImage::operator== (since 5.6) + + For example: + + \code + var image = grabImage(rect); + compare(image.red(10, 10), 255); + compare(image.pixel(20, 20), Qt.rgba(255, 0, 0, 255)); + + rect.width += 10; + var newImage = grabImage(rect); + verify(!newImage.equals(image)); + \endcode + + \li \c {save(path)} Saves the image to the given \e path. If the image cannot + be saved, an exception will be thrown. (since 5.10) + + This can be useful to perform postmortem analysis on failing tests, for + example: + + \code + var image = grabImage(rect); + try { + compare(image.width, 100); + } catch (ex) { + image.save("debug.png"); + throw ex; + } + \endcode + + \endlist + */ + function grabImage(item) { + return qtest_results.grabImage(item); + } + + /*! + \since 5.4 + \qmlmethod QtObject TestCase::findChild(parent, objectName) + + Returns the first child of \a parent with \a objectName, or \c null if + no such item exists. Both visual and non-visual children are searched + recursively, with visual children being searched first. + + \code + compare(findChild(item, "childObject"), expectedChildObject); + \endcode + */ + function findChild(parent, objectName) { + // First, search the visual item hierarchy. + var child = qtest_findVisualChild(parent, objectName); + if (child) + return child; + + // If it's not a visual child, it might be a QObject child. + return qtest_results.findChild(parent, objectName); + } + + /*! \internal */ + function qtest_findVisualChild(parent, objectName) { + if (!parent || parent.children === undefined) + return null; + + for (var i = 0; i < parent.children.length; ++i) { + // Is this direct child of ours the child we're after? + var child = parent.children[i]; + if (child.objectName === objectName) + return child; + } + + for (i = 0; i < parent.children.length; ++i) { + // Try the direct child's children. + child = qtest_findVisualChild(parent.children[i], objectName); + if (child) + return child; + } + return null; + } + + /*! + \qmlmethod TestCase::tryCompare(obj, property, expected, timeout = 5000, message = "") + + Fails the current test case if the specified \a property on \a obj + is not the same as \a expected, and displays the optional \a message. + The test will be retried multiple times until the + \a timeout (in milliseconds) is reached. + + This function is intended for testing applications where a property + changes value based on asynchronous events. Use compare() for testing + synchronous property changes. + + \code + tryCompare(img, "status", BorderImage.Ready) + compare(img.width, 120) + compare(img.height, 120) + compare(img.horizontalTileMode, BorderImage.Stretch) + compare(img.verticalTileMode, BorderImage.Stretch) + \endcode + + SignalSpy::wait() provides an alternative method to wait for a + signal to be emitted. + + \sa compare(), SignalSpy::wait() + */ + function tryCompare(obj, prop, value, timeout, msg) { + if (arguments.length == 1 || (typeof(prop) != "string" && typeof(prop) != "number")) { + qtest_results.fail("A property name as string or index is required for tryCompare", + util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + if (arguments.length == 2) { + qtest_results.fail("A value is required for tryCompare", + util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + if (timeout !== undefined && typeof(timeout) != "number") { + qtest_results.fail("timeout should be a number", + util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::fail") + } + if (!timeout) + timeout = 5000 + if (msg === undefined) + msg = "property " + prop + if (!qtest_compareInternal(obj[prop], value)) + wait(0) + var i = 0 + while (i < timeout && !qtest_compareInternal(obj[prop], value)) { + wait(50) + i += 50 + } + var actual = obj[prop] + var act = qtest_results.stringify(actual) + var exp = qtest_results.stringify(value) + var success = qtest_compareInternal(actual, value) + if (!qtest_results.compare(success, msg, act, exp, util.callerFile(), util.callerLine())) + throw new Error("QtQuickTest::fail") + } + + /*! + \qmlmethod TestCase::skip(message = "") + + Skips the current test case and prints the optional \a message. + If this is a data-driven test, then only the current row is skipped. + Similar to \c{QSKIP(message)} in C++. + */ + function skip(msg) { + if (msg === undefined) + msg = "" + qtest_results.skip(msg, util.callerFile(), util.callerLine()) + throw new Error("QtQuickTest::skip") + } + + /*! + \qmlmethod TestCase::expectFail(tag, message) + + In a data-driven test, marks the row associated with \a tag as + expected to fail. When the fail occurs, display the \a message, + abort the test, and mark the test as passing. Similar to + \c{QEXPECT_FAIL(tag, message, Abort)} in C++. + + If the test is not data-driven, then \a tag must be set to + an empty string. + + \sa expectFailContinue() + */ + function expectFail(tag, msg) { + if (tag === undefined) { + warn("tag argument missing from expectFail()") + tag = "" + } + if (msg === undefined) { + warn("message argument missing from expectFail()") + msg = "" + } + if (!qtest_results.expectFail(tag, msg, util.callerFile(), util.callerLine())) + throw new Error("QtQuickTest::expectFail") + } + + /*! + \qmlmethod TestCase::expectFailContinue(tag, message) + + In a data-driven test, marks the row associated with \a tag as + expected to fail. When the fail occurs, display the \a message, + and then continue the test. Similar to + \c{QEXPECT_FAIL(tag, message, Continue)} in C++. + + If the test is not data-driven, then \a tag must be set to + an empty string. + + \sa expectFail() + */ + function expectFailContinue(tag, msg) { + if (tag === undefined) { + warn("tag argument missing from expectFailContinue()") + tag = "" + } + if (msg === undefined) { + warn("message argument missing from expectFailContinue()") + msg = "" + } + if (!qtest_results.expectFailContinue(tag, msg, util.callerFile(), util.callerLine())) + throw new Error("QtQuickTest::expectFail") + } + + /*! + \qmlmethod TestCase::warn(message) + + Prints \a message as a warning message. Similar to + \c{QWARN(message)} in C++. + + \sa ignoreWarning() + */ + function warn(msg) { + if (msg === undefined) + msg = "" + qtest_results.warn(msg, util.callerFile(), util.callerLine()); + } + + /*! + \qmlmethod TestCase::ignoreWarning(message) + + Marks \a message as an ignored warning message. When it occurs, + the warning will not be printed and the test passes. If the message + does not occur, then the test will fail. Similar to + \c{QTest::ignoreMessage(QtWarningMsg, message)} in C++. + + Since Qt 5.12, \a message can be either a string, or a regular + expression providing a pattern of messages to ignore. + + For example, the following snippet will ignore a string warning message: + \qml + ignoreWarning("Something sort of bad happened") + \endqml + + And the following snippet will ignore a regular expression matching a + number of possible warning messages: + \qml + ignoreWarning(new RegExp("[0-9]+ bad things happened")) + \endqml + + \note Despite being a JavaScript RegExp object, it will not be + interpreted as such; instead, the pattern will be passed to + \l QRegularExpression. + + \sa warn() + */ + function ignoreWarning(msg) { + if (msg === undefined) + msg = "" + qtest_results.ignoreWarning(msg) + } + + /*! + \qmlmethod TestCase::wait(ms) + + Waits for \a ms milliseconds while processing Qt events. + + \sa sleep(), waitForRendering() + */ + function wait(ms) { + qtest_results.wait(ms) + } + + /*! + \qmlmethod TestCase::waitForRendering(item, timeout = 5000) + + Waits for \a timeout milliseconds or until the \a item is rendered by the renderer. + Returns true if \c item is rendered in \a timeout milliseconds, otherwise returns false. + The default \a timeout value is 5000. + + \sa sleep(), wait() + */ + function waitForRendering(item, timeout) { + if (timeout === undefined) + timeout = 5000 + if (!qtest_verifyItem(item, "waitForRendering")) + return + return qtest_results.waitForRendering(item, timeout) + } + + /*! + \qmlmethod TestCase::sleep(ms) + + Sleeps for \a ms milliseconds without processing Qt events. + + \sa wait(), waitForRendering() + */ + function sleep(ms) { + qtest_results.sleep(ms) + } + + /*! + \qmlmethod TestCase::keyPress(key, modifiers = Qt.NoModifier, delay = -1) + + Simulates pressing a \a key with optional \a modifiers on the currently + focused item. If \a delay is larger than 0, the test will wait for + \a delay milliseconds. + + The event will be sent to the TestCase window or, in case of multiple windows, + to the current active window. See \l QGuiApplication::focusWindow() for more details. + + \b{Note:} At some point you should release the key using keyRelease(). + + \sa keyRelease(), keyClick() + */ + function keyPress(key, modifiers, delay) { + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + if (typeof(key) == "string" && key.length == 1) { + if (!qtest_events.keyPressChar(key, modifiers, delay)) + qtest_fail("window not shown", 2) + } else { + if (!qtest_events.keyPress(key, modifiers, delay)) + qtest_fail("window not shown", 2) + } + } + + /*! + \qmlmethod TestCase::keyRelease(key, modifiers = Qt.NoModifier, delay = -1) + + Simulates releasing a \a key with optional \a modifiers on the currently + focused item. If \a delay is larger than 0, the test will wait for + \a delay milliseconds. + + The event will be sent to the TestCase window or, in case of multiple windows, + to the current active window. See \l QGuiApplication::focusWindow() for more details. + + \sa keyPress(), keyClick() + */ + function keyRelease(key, modifiers, delay) { + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + if (typeof(key) == "string" && key.length == 1) { + if (!qtest_events.keyReleaseChar(key, modifiers, delay)) + qtest_fail("window not shown", 2) + } else { + if (!qtest_events.keyRelease(key, modifiers, delay)) + qtest_fail("window not shown", 2) + } + } + + /*! + \qmlmethod TestCase::keyClick(key, modifiers = Qt.NoModifier, delay = -1) + + Simulates clicking of \a key with optional \a modifiers on the currently + focused item. If \a delay is larger than 0, the test will wait for + \a delay milliseconds. + + The event will be sent to the TestCase window or, in case of multiple windows, + to the current active window. See \l QGuiApplication::focusWindow() for more details. + + \sa keyPress(), keyRelease() + */ + function keyClick(key, modifiers, delay) { + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + if (typeof(key) == "string" && key.length == 1) { + if (!qtest_events.keyClickChar(key, modifiers, delay)) + qtest_fail("window not shown", 2) + } else { + if (!qtest_events.keyClick(key, modifiers, delay)) + qtest_fail("window not shown", 2) + } + } + + /*! + \since 5.10 + \qmlmethod TestCase::keySequence(keySequence) + + Simulates typing of \a keySequence. The key sequence can be set + to one of the \l{QKeySequence::StandardKey}{standard keyboard shortcuts}, or + it can be described with a string containing a sequence of up to four key + presses. + + Each event shall be sent to the TestCase window or, in case of multiple windows, + to the current active window. See \l QGuiApplication::focusWindow() for more details. + + \sa keyPress(), keyRelease(), {GNU Emacs Style Key Sequences}, + {QtQuick::Shortcut::sequence}{Shortcut.sequence} + */ + function keySequence(keySequence) { + if (!qtest_events.keySequence(keySequence)) + qtest_fail("window not shown", 2) + } + + /*! + \qmlmethod TestCase::mousePress(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) + + Simulates pressing a mouse \a button with optional \a modifiers + on an \a item. The position is defined by \a x and \a y. + If \a x or \a y are not defined the position will be the center of \a item. + If \a delay is specified, the test will wait for the specified amount of + milliseconds before the press. + + The position given by \a x and \a y is transformed from the co-ordinate + system of \a item into window co-ordinates and then delivered. + If \a item is obscured by another item, or a child of \a item occupies + that position, then the event will be delivered to the other item instead. + + \sa mouseRelease(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseDrag(), mouseWheel() + */ + function mousePress(item, x, y, button, modifiers, delay) { + if (!qtest_verifyItem(item, "mousePress")) + return + + if (button === undefined) + button = Qt.LeftButton + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + if (x === undefined) + x = item.width / 2 + if (y === undefined) + y = item.height / 2 + if (!qtest_events.mousePress(item, x, y, button, modifiers, delay)) + qtest_fail("window not shown", 2) + } + + /*! + \qmlmethod TestCase::mouseRelease(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) + + Simulates releasing a mouse \a button with optional \a modifiers + on an \a item. The position of the release is defined by \a x and \a y. + If \a x or \a y are not defined the position will be the center of \a item. + If \a delay is specified, the test will wait for the specified amount of + milliseconds before releasing the button. + + The position given by \a x and \a y is transformed from the co-ordinate + system of \a item into window co-ordinates and then delivered. + If \a item is obscured by another item, or a child of \a item occupies + that position, then the event will be delivered to the other item instead. + + \sa mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseDrag(), mouseWheel() + */ + function mouseRelease(item, x, y, button, modifiers, delay) { + if (!qtest_verifyItem(item, "mouseRelease")) + return + + if (button === undefined) + button = Qt.LeftButton + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + if (x === undefined) + x = item.width / 2 + if (y === undefined) + y = item.height / 2 + if (!qtest_events.mouseRelease(item, x, y, button, modifiers, delay)) + qtest_fail("window not shown", 2) + } + + /*! + \qmlmethod TestCase::mouseDrag(item, x, y, dx, dy, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) + + Simulates dragging the mouse on an \a item with \a button pressed and optional \a modifiers + The initial drag position is defined by \a x and \a y, + and drag distance is defined by \a dx and \a dy. If \a delay is specified, + the test will wait for the specified amount of milliseconds before releasing the button. + + The position given by \a x and \a y is transformed from the co-ordinate + system of \a item into window co-ordinates and then delivered. + If \a item is obscured by another item, or a child of \a item occupies + that position, then the event will be delivered to the other item instead. + + \sa mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseRelease(), mouseWheel() + */ + function mouseDrag(item, x, y, dx, dy, button, modifiers, delay) { + if (!qtest_verifyItem(item, "mouseDrag")) + return + + if (item.x === undefined || item.y === undefined) + return + if (button === undefined) + button = Qt.LeftButton + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + var moveDelay = Math.max(1, delay === -1 ? qtest_events.defaultMouseDelay : delay) + + // Divide dx and dy to have intermediate mouseMove while dragging + // Fractions of dx/dy need be superior to the dragThreshold + // to make the drag works though + var intermediateDx = Math.round(dx/3) + if (Math.abs(intermediateDx) < (util.dragThreshold + 1)) + intermediateDx = 0 + var intermediateDy = Math.round(dy/3) + if (Math.abs(intermediateDy) < (util.dragThreshold + 1)) + intermediateDy = 0 + + mousePress(item, x, y, button, modifiers, delay) + + // Trigger dragging by dragging past the drag threshold, but making sure to only drag + // along a certain axis if a distance greater than zero was given for that axis. + var dragTriggerXDistance = dx > 0 ? (util.dragThreshold + 1) : 0 + var dragTriggerYDistance = dy > 0 ? (util.dragThreshold + 1) : 0 + mouseMove(item, x + dragTriggerXDistance, y + dragTriggerYDistance, moveDelay, button) + if (intermediateDx !== 0 || intermediateDy !== 0) { + mouseMove(item, x + intermediateDx, y + intermediateDy, moveDelay, button) + mouseMove(item, x + 2*intermediateDx, y + 2*intermediateDy, moveDelay, button) + } + mouseMove(item, x + dx, y + dy, moveDelay, button) + mouseRelease(item, x + dx, y + dy, button, modifiers, delay) + } + + /*! + \qmlmethod TestCase::mouseClick(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) + + Simulates clicking a mouse \a button with optional \a modifiers + on an \a item. The position of the click is defined by \a x and \a y. + If \a x and \a y are not defined the position will be the center of \a item. + If \a delay is specified, the test will wait for the specified amount of + milliseconds before pressing and before releasing the button. + + The position given by \a x and \a y is transformed from the co-ordinate + system of \a item into window co-ordinates and then delivered. + If \a item is obscured by another item, or a child of \a item occupies + that position, then the event will be delivered to the other item instead. + + \sa mousePress(), mouseRelease(), mouseDoubleClickSequence(), mouseMove(), mouseDrag(), mouseWheel() + */ + function mouseClick(item, x, y, button, modifiers, delay) { + if (!qtest_verifyItem(item, "mouseClick")) + return + + if (button === undefined) + button = Qt.LeftButton + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + if (x === undefined) + x = item.width / 2 + if (y === undefined) + y = item.height / 2 + if (!qtest_events.mouseClick(item, x, y, button, modifiers, delay)) + qtest_fail("window not shown", 2) + } + + /*! + \qmlmethod TestCase::mouseDoubleClick(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) + \deprecated + + Simulates double-clicking a mouse \a button with optional \a modifiers + on an \a item. The position of the click is defined by \a x and \a y. + If \a x and \a y are not defined the position will be the center of \a item. + If \a delay is specified, the test will wait for the specified amount of + milliseconds before pressing and before releasing the button. + + The position given by \a x and \a y is transformed from the co-ordinate + system of \a item into window co-ordinates and then delivered. + If \a item is obscured by another item, or a child of \a item occupies + that position, then the event will be delivered to the other item instead. + + \sa mouseDoubleClickSequence(), mousePress(), mouseRelease(), mouseClick(), mouseMove(), mouseDrag(), mouseWheel() + */ + function mouseDoubleClick(item, x, y, button, modifiers, delay) { + if (!qtest_verifyItem(item, "mouseDoubleClick")) + return + + if (button === undefined) + button = Qt.LeftButton + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + if (x === undefined) + x = item.width / 2 + if (y === undefined) + y = item.height / 2 + if (!qtest_events.mouseDoubleClick(item, x, y, button, modifiers, delay)) + qtest_fail("window not shown", 2) + } + + /*! + \qmlmethod TestCase::mouseDoubleClickSequence(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) + + Simulates the full sequence of events generated by double-clicking a mouse + \a button with optional \a modifiers on an \a item. + + This method reproduces the sequence of mouse events generated when a user makes + a double click: Press-Release-Press-DoubleClick-Release. + + The position of the click is defined by \a x and \a y. + If \a x and \a y are not defined the position will be the center of \a item. + If \a delay is specified, the test will wait for the specified amount of + milliseconds before pressing and before releasing the button. + + The position given by \a x and \a y is transformed from the co-ordinate + system of \a item into window co-ordinates and then delivered. + If \a item is obscured by another item, or a child of \a item occupies + that position, then the event will be delivered to the other item instead. + + This QML method was introduced in Qt 5.5. + + \sa mousePress(), mouseRelease(), mouseClick(), mouseMove(), mouseDrag(), mouseWheel() + */ + function mouseDoubleClickSequence(item, x, y, button, modifiers, delay) { + if (!qtest_verifyItem(item, "mouseDoubleClickSequence")) + return + + if (button === undefined) + button = Qt.LeftButton + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (delay == undefined) + delay = -1 + if (x === undefined) + x = item.width / 2 + if (y === undefined) + y = item.height / 2 + if (!qtest_events.mouseDoubleClickSequence(item, x, y, button, modifiers, delay)) + qtest_fail("window not shown", 2) + } + + /*! + \qmlmethod TestCase::mouseMove(item, x, y, delay = -1) + + Moves the mouse pointer to the position given by \a x and \a y within + \a item. If a \a delay (in milliseconds) is given, the test will wait + before moving the mouse pointer. + + The position given by \a x and \a y is transformed from the co-ordinate + system of \a item into window co-ordinates and then delivered. + If \a item is obscured by another item, or a child of \a item occupies + that position, then the event will be delivered to the other item instead. + + \sa mousePress(), mouseRelease(), mouseClick(), mouseDoubleClickSequence(), mouseDrag(), mouseWheel() + */ + function mouseMove(item, x, y, delay, buttons) { + if (!qtest_verifyItem(item, "mouseMove")) + return + + if (delay == undefined) + delay = -1 + if (buttons == undefined) + buttons = Qt.NoButton + if (!qtest_events.mouseMove(item, x, y, delay, buttons)) + qtest_fail("window not shown", 2) + } + + /*! + \qmlmethod TestCase::mouseWheel(item, x, y, xDelta, yDelta, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1) + + Simulates rotating the mouse wheel on an \a item with \a button pressed and optional \a modifiers. + The position of the wheel event is defined by \a x and \a y. + If \a delay is specified, the test will wait for the specified amount of milliseconds before releasing the button. + + The position given by \a x and \a y is transformed from the co-ordinate + system of \a item into window co-ordinates and then delivered. + If \a item is obscured by another item, or a child of \a item occupies + that position, then the event will be delivered to the other item instead. + + The \a xDelta and \a yDelta contain the wheel rotation distance in eighths of a degree. see \l QWheelEvent::angleDelta() for more details. + + \sa mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseRelease(), mouseDrag(), QWheelEvent::angleDelta() + */ + function mouseWheel(item, x, y, xDelta, yDelta, buttons, modifiers, delay) { + if (!qtest_verifyItem(item, "mouseWheel")) + return + + if (delay == undefined) + delay = -1 + if (buttons == undefined) + buttons = Qt.NoButton + if (modifiers === undefined) + modifiers = Qt.NoModifier + if (xDelta == undefined) + xDelta = 0 + if (yDelta == undefined) + yDelta = 0 + if (!qtest_events.mouseWheel(item, x, y, buttons, modifiers, xDelta, yDelta, delay)) + qtest_fail("window not shown", 2) + } + + /*! + \qmlmethod TouchEventSequence TestCase::touchEvent(object item) + + \since 5.9 + + Begins a sequence of touch events through a simulated QTouchDevice::TouchScreen. + Events are delivered to the window containing \a item. + + The returned object is used to enumerate events to be delivered through a single + QTouchEvent. Touches are delivered to the window containing the TestCase unless + otherwise specified. + + \code + Rectangle { + width: 640; height: 480 + + MultiPointTouchArea { + id: area + anchors.fill: parent + + property bool touched: false + + onPressed: touched = true + } + + TestCase { + name: "ItemTests" + when: windowShown + id: test1 + + function test_touch() { + var touch = touchEvent(area); + touch.press(0, area, 10, 10); + touch.commit(); + verify(area.touched); + } + } + } + \endcode + + \sa TouchEventSequence::press(), TouchEventSequence::move(), TouchEventSequence::release(), TouchEventSequence::stationary(), TouchEventSequence::commit(), QTouchDevice::TouchScreen + */ + + function touchEvent(item) { + if (!qtest_verifyItem(item, "touchEvent")) + return + + return { + _defaultItem: item, + _sequence: qtest_events.touchEvent(item), + + press: function (id, target, x, y) { + if (!target) + target = this._defaultItem; + if (id === undefined) + qtest_fail("No id given to TouchEventSequence::press", 1); + if (x === undefined) + x = target.width / 2; + if (y === undefined) + y = target.height / 2; + this._sequence.press(id, target, x, y); + return this; + }, + + move: function (id, target, x, y) { + if (!target) + target = this._defaultItem; + if (id === undefined) + qtest_fail("No id given to TouchEventSequence::move", 1); + if (x === undefined) + x = target.width / 2; + if (y === undefined) + y = target.height / 2; + this._sequence.move(id, target, x, y); + return this; + }, + + stationary: function (id) { + if (id === undefined) + qtest_fail("No id given to TouchEventSequence::stationary", 1); + this._sequence.stationary(id); + return this; + }, + + release: function (id, target, x, y) { + if (!target) + target = this._defaultItem; + if (id === undefined) + qtest_fail("No id given to TouchEventSequence::release", 1); + if (x === undefined) + x = target.width / 2; + if (y === undefined) + y = target.height / 2; + this._sequence.release(id, target, x, y); + return this; + }, + + commit: function () { + this._sequence.commit(); + return this; + } + }; + } + + // Functions that can be overridden in subclasses for init/cleanup duties. + /*! + \qmlmethod TestCase::initTestCase() + + This function is called before any other test functions in the + \l TestCase type. The default implementation does nothing. + The application can provide its own implementation to perform + test case initialization. + + \sa cleanupTestCase(), init() + */ + function initTestCase() {} + + /*! + \qmlmethod TestCase::cleanupTestCase() + + This function is called after all other test functions in the + \l TestCase type have completed. The default implementation + does nothing. The application can provide its own implementation + to perform test case cleanup. + + \sa initTestCase(), cleanup() + */ + function cleanupTestCase() {} + + /*! + \qmlmethod TestCase::init() + + This function is called before each test function that is + executed in the \l TestCase type. The default implementation + does nothing. The application can provide its own implementation + to perform initialization before each test function. + + \sa cleanup(), initTestCase() + */ + function init() {} + + /*! + \qmlmethod TestCase::cleanup() + + This function is called after each test function that is + executed in the \l TestCase type. The default implementation + does nothing. The application can provide its own implementation + to perform cleanup after each test function. + + \sa init(), cleanupTestCase() + */ + function cleanup() {} + + /*! \internal */ + function qtest_verifyItem(item, method) { + try { + if (!(item instanceof Item) && + !(item instanceof Window)) { + // it's a QObject, but not a type + qtest_fail("TypeError: %1 requires an Item or Window type".arg(method), 2); + return false; + } + } catch (e) { // it's not a QObject + qtest_fail("TypeError: %1 requires an Item or Window type".arg(method), 3); + return false; + } + + return true; + } + + /*! \internal */ + function qtest_runInternal(prop, arg) { + try { + qtest_testCaseResult = testCase[prop](arg) + } catch (e) { + qtest_testCaseResult = [] + if (e.message.indexOf("QtQuickTest::") != 0) { + // Test threw an unrecognized exception - fail. + qtest_results.fail("Uncaught exception: " + e.message, + e.fileName, e.lineNumber) + } + } + return !qtest_results.failed + } + + /*! \internal */ + function qtest_runFunction(prop, arg) { + qtest_runInternal("init") + if (!qtest_results.skipped) { + qtest_runInternal(prop, arg) + qtest_results.finishTestData() + qtest_runInternal("cleanup") + qtest_destroyTemporaryObjects() + qtest_results.finishTestDataCleanup() + // wait(0) will call processEvents() so objects marked for deletion + // in the test function will be deleted. + wait(0) + } + } + + /*! \internal */ + function qtest_runBenchmarkFunction(prop, arg) { + qtest_results.startMeasurement() + do { + qtest_results.beginDataRun() + do { + // Run the initialization function. + qtest_runInternal("init") + if (qtest_results.skipped) + break + + // Execute the benchmark function. + if (prop.indexOf("benchmark_once_") != 0) + qtest_results.startBenchmark(TestResult.RepeatUntilValidMeasurement, qtest_results.dataTag) + else + qtest_results.startBenchmark(TestResult.RunOnce, qtest_results.dataTag) + while (!qtest_results.isBenchmarkDone()) { + var success = qtest_runInternal(prop, arg) + qtest_results.finishTestData() + if (!success) + break + qtest_results.nextBenchmark() + } + qtest_results.stopBenchmark() + + // Run the cleanup function. + qtest_runInternal("cleanup") + qtest_results.finishTestDataCleanup() + // wait(0) will call processEvents() so objects marked for deletion + // in the test function will be deleted. + wait(0) + } while (!qtest_results.measurementAccepted()) + qtest_results.endDataRun() + } while (qtest_results.needsMoreMeasurements()) + } + + /*! \internal */ + function qtest_run() { + if (TestLogger.log_start_test()) { + qtest_results.reset() + qtest_results.testCaseName = name + qtest_results.startLogging() + } else { + qtest_results.testCaseName = name + } + running = true + + // Check the run list to see if this class is mentioned. + let checkNames = false + let testsToRun = {} // explicitly provided function names to run and their tags for data-driven tests + + if (qtest_results.functionsToRun.length > 0) { + checkNames = true + var found = false + + if (name.length > 0) { + for (var index in qtest_results.functionsToRun) { + let caseFuncName = qtest_results.functionsToRun[index] + if (caseFuncName.indexOf(name + "::") != 0) + continue + + found = true + let funcName = caseFuncName.substring(name.length + 2) + + if (!(funcName in testsToRun)) + testsToRun[funcName] = [] + + let tagName = qtest_results.tagsToRun[index] + if (tagName.length > 0) // empty tags mean run all rows + testsToRun[funcName].push(tagName) + } + } + if (!found) { + completed = true + if (!TestLogger.log_complete_test(qtest_testId)) { + qtest_results.stopLogging() + Qt.quit() + } + qtest_results.testCaseName = "" + return + } + } + + // Run the initTestCase function. + qtest_results.functionName = "initTestCase" + var runTests = true + if (!qtest_runInternal("initTestCase")) + runTests = false + qtest_results.finishTestData() + qtest_results.finishTestDataCleanup() + qtest_results.finishTestFunction() + + // Run the test methods. + var testList = [] + if (runTests) { + for (var prop in testCase) { + if (prop.indexOf("test_") != 0 && prop.indexOf("benchmark_") != 0) + continue + var tail = prop.lastIndexOf("_data"); + if (tail != -1 && tail == (prop.length - 5)) + continue + testList.push(prop) + } + testList.sort() + } + + for (var index in testList) { + var prop = testList[index] + + if (checkNames && !(prop in testsToRun)) + continue + + var datafunc = prop + "_data" + var isBenchmark = (prop.indexOf("benchmark_") == 0) + qtest_results.functionName = prop + + if (!(datafunc in testCase)) + datafunc = "init_data"; + + if (datafunc in testCase) { + if (qtest_runInternal(datafunc)) { + var table = qtest_testCaseResult + var haveData = false + + let checkTags = (checkNames && testsToRun[prop].length > 0) + + qtest_results.initTestTable() + for (var index in table) { + haveData = true + var row = table[index] + if (!row.tag) + row.tag = "row " + index // Must have something + if (checkTags) { + let tags = testsToRun[prop] + let tagIdx = tags.indexOf(row.tag) + if (tagIdx < 0) + continue + tags.splice(tagIdx, 1) + } + qtest_results.dataTag = row.tag + if (isBenchmark) + qtest_runBenchmarkFunction(prop, row) + else + qtest_runFunction(prop, row) + qtest_results.dataTag = "" + qtest_results.skipped = false + } + if (!haveData) { + if (datafunc === "init_data") + qtest_runFunction(prop, null, isBenchmark) + else + qtest_results.warn("no data supplied for " + prop + "() by " + datafunc + "()" + , util.callerFile(), util.callerLine()); + } + qtest_results.clearTestTable() + } + } else if (isBenchmark) { + qtest_runBenchmarkFunction(prop, null, isBenchmark) + } else { + qtest_runFunction(prop, null, isBenchmark) + } + qtest_results.finishTestFunction() + qtest_results.skipped = false + + if (checkNames && testsToRun[prop].length <= 0) + delete testsToRun[prop] + } + + // Run the cleanupTestCase function. + qtest_results.skipped = false + qtest_results.functionName = "cleanupTestCase" + qtest_runInternal("cleanupTestCase") + + // Complain about missing functions that we were supposed to run. + if (checkNames) { + let missingTests = [] + for (var func in testsToRun) { + let caseFuncName = name + '::' + func + let tags = testsToRun[func] + if (tags.length <= 0) + missingTests.push(caseFuncName) + else + for (var i in tags) + missingTests.push(caseFuncName + ':' + tags[i]) + } + missingTests.sort() + if (missingTests.length > 0) + qtest_results.fail("Could not find test functions: " + missingTests, "", 0) + } + + // Clean up and exit. + running = false + completed = true + qtest_results.finishTestData() + qtest_results.finishTestDataCleanup() + qtest_results.finishTestFunction() + qtest_results.functionName = "" + + // Stop if there are no more tests to be run. + if (!TestLogger.log_complete_test(qtest_testId)) { + qtest_results.stopLogging() + Qt.quit() + } + qtest_results.testCaseName = "" + } + + onWhenChanged: { + if (when != qtest_prevWhen) { + qtest_prevWhen = when + if (when && !completed && !running && qtest_componentCompleted) + qtest_run() + } + } + + onOptionalChanged: { + if (!completed) { + if (optional) + TestLogger.log_optional_test(qtest_testId) + else + TestLogger.log_mandatory_test(qtest_testId) + } + } + + Component.onCompleted: { + QTestRootObject.hasTestCase = true; + qtest_componentCompleted = true; + qtest_testId = TestLogger.log_register_test(name) + if (optional) + TestLogger.log_optional_test(qtest_testId) + qtest_prevWhen = when + if (when && !completed && !running) + qtest_run() + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/libqmltestplugin.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/libqmltestplugin.so new file mode 100755 index 0000000..06d3c0f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/libqmltestplugin.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/plugins.qmltypes new file mode 100644 index 0000000..287bd5b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/plugins.qmltypes @@ -0,0 +1,364 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by qmltyperegistrar. + +Module { + dependencies: ["QtQuick 2.0", "QtQuick.Window 2.0"] + Component { + file: "quicktestevent_p.h" + name: "QQuickTouchEventSequence" + Method { + name: "press" + type: "QObject*" + Parameter { name: "touchId"; type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "move" + type: "QObject*" + Parameter { name: "touchId"; type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "release" + type: "QObject*" + Parameter { name: "touchId"; type: "int" } + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + } + Method { + name: "stationary" + type: "QObject*" + Parameter { name: "touchId"; type: "int" } + } + Method { name: "commit"; type: "QObject*" } + } + Component { + file: "quicktestevent_p.h" + name: "QuickTestEvent" + exports: ["QtTest/TestEvent 1.0", "QtTest/TestEvent 1.2"] + exportMetaObjectRevisions: [0, 2] + Property { name: "defaultMouseDelay"; type: "int"; isReadonly: true } + Method { + name: "keyPress" + type: "bool" + Parameter { name: "key"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "keyRelease" + type: "bool" + Parameter { name: "key"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "keyClick" + type: "bool" + Parameter { name: "key"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "keyPressChar" + type: "bool" + Parameter { name: "character"; type: "string" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "keyReleaseChar" + type: "bool" + Parameter { name: "character"; type: "string" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "keyClickChar" + type: "bool" + Parameter { name: "character"; type: "string" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "keySequence" + revision: 2 + type: "bool" + Parameter { name: "keySequence"; type: "QVariant" } + } + Method { + name: "mousePress" + type: "bool" + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + Parameter { name: "button"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "mouseRelease" + type: "bool" + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + Parameter { name: "button"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "mouseClick" + type: "bool" + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + Parameter { name: "button"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "mouseDoubleClick" + type: "bool" + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + Parameter { name: "button"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "mouseDoubleClickSequence" + type: "bool" + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + Parameter { name: "button"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "mouseMove" + type: "bool" + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + Parameter { name: "delay"; type: "int" } + Parameter { name: "buttons"; type: "int" } + } + Method { + name: "mouseWheel" + type: "bool" + Parameter { name: "item"; type: "QObject"; isPointer: true } + Parameter { name: "x"; type: "double" } + Parameter { name: "y"; type: "double" } + Parameter { name: "buttons"; type: "int" } + Parameter { name: "modifiers"; type: "int" } + Parameter { name: "xDelta"; type: "int" } + Parameter { name: "yDelta"; type: "int" } + Parameter { name: "delay"; type: "int" } + } + Method { + name: "touchEvent" + type: "QQuickTouchEventSequence*" + Parameter { name: "item"; type: "QObject"; isPointer: true } + } + Method { name: "touchEvent"; type: "QQuickTouchEventSequence*" } + } + Component { + file: "quicktestresultforeign_p.h" + name: "QuickTestResult" + exports: [ + "QtTest/TestResult 1.0", + "QtTest/TestResult 1.1", + "QtTest/TestResult 1.13" + ] + exportMetaObjectRevisions: [0, 1, 13] + Enum { + name: "RunMode" + values: ["RepeatUntilValidMeasurement", "RunOnce"] + } + Property { name: "testCaseName"; type: "string" } + Property { name: "functionName"; type: "string" } + Property { name: "dataTag"; type: "string" } + Property { name: "failed"; type: "bool"; isReadonly: true } + Property { name: "skipped"; type: "bool" } + Property { name: "passCount"; type: "int"; isReadonly: true } + Property { name: "failCount"; type: "int"; isReadonly: true } + Property { name: "skipCount"; type: "int"; isReadonly: true } + Property { name: "functionsToRun"; type: "QStringList"; isReadonly: true } + Property { name: "tagsToRun"; type: "QStringList"; isReadonly: true } + Signal { name: "programNameChanged" } + Method { name: "reset" } + Method { name: "startLogging" } + Method { name: "stopLogging" } + Method { name: "initTestTable" } + Method { name: "clearTestTable" } + Method { name: "finishTestData" } + Method { name: "finishTestDataCleanup" } + Method { name: "finishTestFunction" } + Method { + name: "stringify" + Parameter { name: "args"; type: "QQmlV4Function"; isPointer: true } + } + Method { + name: "fail" + Parameter { name: "message"; type: "string" } + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "line"; type: "int" } + } + Method { + name: "verify" + type: "bool" + Parameter { name: "success"; type: "bool" } + Parameter { name: "message"; type: "string" } + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "line"; type: "int" } + } + Method { + name: "compare" + type: "bool" + Parameter { name: "success"; type: "bool" } + Parameter { name: "message"; type: "string" } + Parameter { name: "val1"; type: "QVariant" } + Parameter { name: "val2"; type: "QVariant" } + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "line"; type: "int" } + } + Method { + name: "fuzzyCompare" + type: "bool" + Parameter { name: "actual"; type: "QVariant" } + Parameter { name: "expected"; type: "QVariant" } + Parameter { name: "delta"; type: "double" } + } + Method { + name: "skip" + Parameter { name: "message"; type: "string" } + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "line"; type: "int" } + } + Method { + name: "expectFail" + type: "bool" + Parameter { name: "tag"; type: "string" } + Parameter { name: "comment"; type: "string" } + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "line"; type: "int" } + } + Method { + name: "expectFailContinue" + type: "bool" + Parameter { name: "tag"; type: "string" } + Parameter { name: "comment"; type: "string" } + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "line"; type: "int" } + } + Method { + name: "warn" + Parameter { name: "message"; type: "string" } + Parameter { name: "location"; type: "QUrl" } + Parameter { name: "line"; type: "int" } + } + Method { + name: "ignoreWarning" + Parameter { name: "message"; type: "QJSValue" } + } + Method { + name: "wait" + Parameter { name: "ms"; type: "int" } + } + Method { + name: "sleep" + Parameter { name: "ms"; type: "int" } + } + Method { + name: "waitForRendering" + type: "bool" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + Parameter { name: "timeout"; type: "int" } + } + Method { + name: "waitForRendering" + type: "bool" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { name: "startMeasurement" } + Method { name: "beginDataRun" } + Method { name: "endDataRun" } + Method { name: "measurementAccepted"; type: "bool" } + Method { name: "needsMoreMeasurements"; type: "bool" } + Method { + name: "startBenchmark" + Parameter { name: "runMode"; type: "RunMode" } + Parameter { name: "tag"; type: "string" } + } + Method { name: "isBenchmarkDone"; type: "bool" } + Method { name: "nextBenchmark" } + Method { name: "stopBenchmark" } + Method { + name: "grabImage" + type: "QObject*" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "findChild" + revision: 1 + type: "QObject*" + Parameter { name: "parent"; type: "QObject"; isPointer: true } + Parameter { name: "objectName"; type: "string" } + } + Method { + name: "isPolishScheduled" + revision: 13 + type: "bool" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + } + Method { + name: "waitForItemPolished" + revision: 13 + type: "bool" + Parameter { name: "item"; type: "QQuickItem"; isPointer: true } + Parameter { name: "timeout"; type: "int" } + } + } + Component { + file: "quicktestutil_p.h" + name: "QuickTestUtil" + exports: ["QtTest/TestUtil 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "printAvailableFunctions"; type: "bool"; isReadonly: true } + Property { name: "dragThreshold"; type: "int"; isReadonly: true } + Method { + name: "typeName" + type: "QJSValue" + Parameter { name: "v"; type: "QVariant" } + } + Method { + name: "compare" + type: "bool" + Parameter { name: "act"; type: "QVariant" } + Parameter { name: "exp"; type: "QVariant" } + } + Method { + name: "callerFile" + type: "QJSValue" + Parameter { name: "frameIndex"; type: "int" } + } + Method { name: "callerFile"; type: "QJSValue" } + Method { + name: "callerLine" + type: "int" + Parameter { name: "frameIndex"; type: "int" } + } + Method { name: "callerLine"; type: "int" } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/qmldir new file mode 100644 index 0000000..be9039a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/qmldir @@ -0,0 +1,8 @@ +module QtTest +plugin qmltestplugin +classname QTestQmlModule +typeinfo plugins.qmltypes +TestCase 1.0 TestCase.qml +TestCase 1.2 TestCase.qml +SignalSpy 1.0 SignalSpy.qml +depends QtQuick.Window 2.0 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/testlogger.js b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/testlogger.js new file mode 100644 index 0000000..af6522c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtTest/testlogger.js @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite 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$ +** +****************************************************************************/ + +.pragma library + +// We need a global place to store the results that can be +// shared between multiple TestCase instances. Because QML +// creates a separate scope for every inclusion of this file, +// we hijack the global "Qt" object to store our data. +function log_init_results() +{ + if (!Qt.testResults) { + Qt.testResults = { + reportedStart: false, + nextId: 0, + testCases: [] + } + } +} + +function log_register_test(name) +{ + log_init_results() + var testId = Qt.testResults.nextId++ + Qt.testResults.testCases.push(testId) + return testId +} + +function log_optional_test(testId) +{ + log_init_results() + var index = Qt.testResults.testCases.indexOf(testId) + if (index >= 0) + Qt.testResults.testCases.splice(index, 1) +} + +function log_mandatory_test(testId) +{ + log_init_results() + var index = Qt.testResults.testCases.indexOf(testId) + if (index == -1) + Qt.testResults.testCases.push(testId) +} + +function log_start_test() +{ + log_init_results() + if (Qt.testResults.reportedStart) + return false + Qt.testResults.reportedStart = true + return true +} + +function log_complete_test(testId) +{ + var index = Qt.testResults.testCases.indexOf(testId) + if (index >= 0) + Qt.testResults.testCases.splice(index, 1) + return Qt.testResults.testCases.length > 0 +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/libdeclarative_webchannel.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/libdeclarative_webchannel.so new file mode 100755 index 0000000..51db43b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/libdeclarative_webchannel.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/plugins.qmltypes new file mode 100644 index 0000000..68378d6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/plugins.qmltypes @@ -0,0 +1,67 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtWebChannel 1.15' + +Module { + dependencies: [] + Component { + name: "QQmlWebChannel" + prototype: "QWebChannel" + exports: ["QtWebChannel/WebChannel 1.0"] + exportMetaObjectRevisions: [0] + attachedType: "QQmlWebChannelAttached" + Property { name: "transports"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "registeredObjects"; type: "QObject"; isList: true; isReadonly: true } + Method { + name: "registerObjects" + Parameter { name: "objects"; type: "QVariantMap" } + } + Method { + name: "connectTo" + Parameter { name: "transport"; type: "QObject"; isPointer: true } + } + Method { + name: "disconnectFrom" + Parameter { name: "transport"; type: "QObject"; isPointer: true } + } + } + Component { + name: "QQmlWebChannelAttached" + prototype: "QObject" + Property { name: "id"; type: "string" } + Signal { + name: "idChanged" + Parameter { name: "id"; type: "string" } + } + } + Component { + name: "QWebChannel" + prototype: "QObject" + Property { name: "blockUpdates"; type: "bool" } + Signal { + name: "blockUpdatesChanged" + Parameter { name: "block"; type: "bool" } + } + Method { + name: "connectTo" + Parameter { name: "transport"; type: "QWebChannelAbstractTransport"; isPointer: true } + } + Method { + name: "disconnectFrom" + Parameter { name: "transport"; type: "QWebChannelAbstractTransport"; isPointer: true } + } + Method { + name: "registerObject" + Parameter { name: "id"; type: "string" } + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Method { + name: "deregisterObject" + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/qmldir new file mode 100644 index 0000000..c521f2f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebChannel/qmldir @@ -0,0 +1,4 @@ +module QtWebChannel +classname QWebChannelPlugin +plugin declarative_webchannel +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/libdeclarative_qmlwebsockets.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/libdeclarative_qmlwebsockets.so new file mode 100755 index 0000000..86fbb7c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/libdeclarative_qmlwebsockets.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/plugins.qmltypes new file mode 100644 index 0000000..cabe5a2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/plugins.qmltypes @@ -0,0 +1,108 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtWebSockets 1.15' + +Module { + dependencies: [] + Component { + name: "QQmlWebSocket" + prototype: "QObject" + exports: ["QtWebSockets/WebSocket 1.0", "QtWebSockets/WebSocket 1.1"] + exportMetaObjectRevisions: [0, 1] + Enum { + name: "Status" + values: { + "Connecting": 0, + "Open": 1, + "Closing": 2, + "Closed": 3, + "Error": 4 + } + } + Property { name: "url"; type: "QUrl" } + Property { name: "status"; type: "Status"; isReadonly: true } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "active"; type: "bool" } + Signal { + name: "textMessageReceived" + Parameter { name: "message"; type: "string" } + } + Signal { + name: "binaryMessageReceived" + revision: 1 + Parameter { name: "message"; type: "QByteArray" } + } + Signal { + name: "statusChanged" + Parameter { name: "status"; type: "QQmlWebSocket::Status" } + } + Signal { + name: "activeChanged" + Parameter { name: "isActive"; type: "bool" } + } + Signal { + name: "errorStringChanged" + Parameter { name: "errorString"; type: "string" } + } + Method { + name: "sendTextMessage" + type: "qlonglong" + Parameter { name: "message"; type: "string" } + } + Method { + name: "sendBinaryMessage" + revision: 1 + type: "qlonglong" + Parameter { name: "message"; type: "QByteArray" } + } + } + Component { + name: "QQmlWebSocketServer" + prototype: "QObject" + exports: ["QtWebSockets/WebSocketServer 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "url"; type: "QUrl"; isReadonly: true } + Property { name: "host"; type: "string" } + Property { name: "port"; type: "int" } + Property { name: "name"; type: "string" } + Property { name: "errorString"; type: "string"; isReadonly: true } + Property { name: "listen"; type: "bool" } + Property { name: "accept"; type: "bool" } + Signal { + name: "clientConnected" + Parameter { name: "webSocket"; type: "QQmlWebSocket"; isPointer: true } + } + Signal { + name: "errorStringChanged" + Parameter { name: "errorString"; type: "string" } + } + Signal { + name: "urlChanged" + Parameter { name: "url"; type: "QUrl" } + } + Signal { + name: "portChanged" + Parameter { name: "port"; type: "int" } + } + Signal { + name: "nameChanged" + Parameter { name: "name"; type: "string" } + } + Signal { + name: "hostChanged" + Parameter { name: "host"; type: "string" } + } + Signal { + name: "listenChanged" + Parameter { name: "listen"; type: "bool" } + } + Signal { + name: "acceptChanged" + Parameter { name: "accept"; type: "bool" } + } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/qmldir new file mode 100644 index 0000000..130b79f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebSockets/qmldir @@ -0,0 +1,4 @@ +module QtWebSockets +plugin declarative_qmlwebsockets +classname QtWebSocketsDeclarativeModule +typeinfo plugins.qmltypes diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/libdeclarative_webview.so b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/libdeclarative_webview.so new file mode 100755 index 0000000..8aa4a09 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/libdeclarative_webview.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/plugins.qmltypes b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/plugins.qmltypes new file mode 100644 index 0000000..945610e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/plugins.qmltypes @@ -0,0 +1,90 @@ +import QtQuick.tooling 1.2 + +// This file describes the plugin-supplied types contained in the library. +// It is used for QML tooling purposes only. +// +// This file was auto-generated by: +// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtWebView 1.14' + +Module { + dependencies: ["QtQuick 2.0"] + Component { + name: "QQuickViewController" + defaultProperty: "data" + prototype: "QQuickItem" + Method { + name: "onWindowChanged" + Parameter { name: "window"; type: "QQuickWindow"; isPointer: true } + } + Method { name: "onVisibleChanged" } + } + Component { + name: "QQuickWebView" + defaultProperty: "data" + prototype: "QQuickViewController" + exports: [ + "QtWebView/WebView 1.0", + "QtWebView/WebView 1.1", + "QtWebView/WebView 1.14" + ] + exportMetaObjectRevisions: [0, 1, 14] + Enum { + name: "LoadStatus" + values: { + "LoadStartedStatus": 0, + "LoadStoppedStatus": 1, + "LoadSucceededStatus": 2, + "LoadFailedStatus": 3 + } + } + Property { name: "httpUserAgent"; revision: 14; type: "string" } + Property { name: "url"; type: "QUrl" } + Property { name: "loading"; revision: 1; type: "bool"; isReadonly: true } + Property { name: "loadProgress"; type: "int"; isReadonly: true } + Property { name: "title"; type: "string"; isReadonly: true } + Property { name: "canGoBack"; type: "bool"; isReadonly: true } + Property { name: "canGoForward"; type: "bool"; isReadonly: true } + Signal { + name: "loadingChanged" + revision: 1 + Parameter { name: "loadRequest"; type: "QQuickWebViewLoadRequest"; isPointer: true } + } + Signal { name: "httpUserAgentChanged"; revision: 14 } + Method { name: "goBack" } + Method { name: "goForward" } + Method { name: "reload" } + Method { name: "stop" } + Method { + name: "loadHtml" + revision: 1 + Parameter { name: "html"; type: "string" } + Parameter { name: "baseUrl"; type: "QUrl" } + } + Method { + name: "loadHtml" + revision: 1 + Parameter { name: "html"; type: "string" } + } + Method { + name: "runJavaScript" + revision: 1 + Parameter { name: "script"; type: "string" } + Parameter { name: "callback"; type: "QJSValue" } + } + Method { + name: "runJavaScript" + revision: 1 + Parameter { name: "script"; type: "string" } + } + } + Component { + name: "QQuickWebViewLoadRequest" + prototype: "QObject" + exports: ["QtWebView/WebViewLoadRequest 1.1"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "url"; type: "QUrl"; isReadonly: true } + Property { name: "status"; type: "QQuickWebView::LoadStatus"; isReadonly: true } + Property { name: "errorString"; type: "string"; isReadonly: true } + } +} diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/qmldir b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/qmldir new file mode 100644 index 0000000..2502350 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qml/QtWebView/qmldir @@ -0,0 +1,5 @@ +module QtWebView +plugin declarative_webview +typeinfo plugins.qmltypes +classname QWebViewModule +depends QtWebEngine 1.0 diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/qsci/api/python/PyQt5.api b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qsci/api/python/PyQt5.api new file mode 100644 index 0000000..3f02021 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/qsci/api/python/PyQt5.api @@ -0,0 +1,32715 @@ +QtCore.QtMsgType?10 +QtCore.QtMsgType.QtDebugMsg?10 +QtCore.QtMsgType.QtWarningMsg?10 +QtCore.QtMsgType.QtCriticalMsg?10 +QtCore.QtMsgType.QtFatalMsg?10 +QtCore.QtMsgType.QtSystemMsg?10 +QtCore.QtMsgType.QtInfoMsg?10 +QtCore.QCborKnownTags?10 +QtCore.QCborKnownTags.DateTimeString?10 +QtCore.QCborKnownTags.UnixTime_t?10 +QtCore.QCborKnownTags.PositiveBignum?10 +QtCore.QCborKnownTags.NegativeBignum?10 +QtCore.QCborKnownTags.Decimal?10 +QtCore.QCborKnownTags.Bigfloat?10 +QtCore.QCborKnownTags.COSE_Encrypt0?10 +QtCore.QCborKnownTags.COSE_Mac0?10 +QtCore.QCborKnownTags.COSE_Sign1?10 +QtCore.QCborKnownTags.ExpectedBase64url?10 +QtCore.QCborKnownTags.ExpectedBase64?10 +QtCore.QCborKnownTags.ExpectedBase16?10 +QtCore.QCborKnownTags.EncodedCbor?10 +QtCore.QCborKnownTags.Url?10 +QtCore.QCborKnownTags.Base64url?10 +QtCore.QCborKnownTags.Base64?10 +QtCore.QCborKnownTags.RegularExpression?10 +QtCore.QCborKnownTags.MimeMessage?10 +QtCore.QCborKnownTags.Uuid?10 +QtCore.QCborKnownTags.COSE_Encrypt?10 +QtCore.QCborKnownTags.COSE_Mac?10 +QtCore.QCborKnownTags.COSE_Sign?10 +QtCore.QCborKnownTags.Signature?10 +QtCore.QCborSimpleType?10 +QtCore.QCborSimpleType.False_?10 +QtCore.QCborSimpleType.True_?10 +QtCore.QCborSimpleType.Null?10 +QtCore.QCborSimpleType.Undefined?10 +QtCore.PYQT_VERSION?7 +QtCore.PYQT_VERSION_STR?7 +QtCore.QT_VERSION?7 +QtCore.QT_VERSION_STR?7 +QtCore.qAbs?4(float) -> float +QtCore.qRound?4(float) -> int +QtCore.qRound64?4(float) -> int +QtCore.qVersion?4() -> str +QtCore.qSharedBuild?4() -> bool +QtCore.qRegisterResourceData?4(int, bytes, bytes, bytes) -> bool +QtCore.qUnregisterResourceData?4(int, bytes, bytes, bytes) -> bool +QtCore.qFuzzyCompare?4(float, float) -> bool +QtCore.qIsNull?4(float) -> bool +QtCore.qsrand?4(int) +QtCore.qrand?4() -> int +QtCore.pyqtSetPickleProtocol?4(Any) +QtCore.pyqtPickleProtocol?4() -> Any +QtCore.qEnvironmentVariable?4(str) -> QString +QtCore.qEnvironmentVariable?4(str, QString) -> QString +QtCore.qCompress?4(QByteArray, int compressionLevel=-1) -> QByteArray +QtCore.qUncompress?4(QByteArray) -> QByteArray +QtCore.qChecksum?4(bytes) -> int +QtCore.qChecksum?4(bytes, Qt.ChecksumType) -> int +QtCore.qAddPostRoutine?4(Callable[..., None]) +QtCore.qRemovePostRoutine?4(Callable[..., None]) +QtCore.qAddPreRoutine?4(Callable[..., None]) +QtCore.pyqtRemoveInputHook?4() +QtCore.pyqtRestoreInputHook?4() +QtCore.qCritical?4(str) +QtCore.qDebug?4(str) +QtCore.qErrnoWarning?4(int, str) +QtCore.qErrnoWarning?4(str) +QtCore.qFatal?4(str) +QtCore.qInfo?4(str) +QtCore.qWarning?4(str) +QtCore.qInstallMessageHandler?4(Callable[..., None]) -> Callable[..., None] +QtCore.qSetMessagePattern?4(QString) +QtCore.qFormatLogMessage?4(QtMsgType, QMessageLogContext, QString) -> QString +QtCore.qIsInf?4(float) -> bool +QtCore.qIsFinite?4(float) -> bool +QtCore.qIsNaN?4(float) -> bool +QtCore.qInf?4() -> float +QtCore.qSNaN?4() -> float +QtCore.qQNaN?4() -> float +QtCore.qFloatDistance?4(float, float) -> int +QtCore.Q_CLASSINFO?4(str, str) -> Any +QtCore.Q_ENUM?4(Any) -> Any +QtCore.Q_ENUMS?4(Any) -> Any +QtCore.Q_FLAG?4(Any) -> Any +QtCore.Q_FLAGS?4(Any) -> Any +QtCore.QT_TR_NOOP?4(Any) -> Any +QtCore.QT_TR_NOOP_UTF8?4(Any) -> Any +QtCore.QT_TRANSLATE_NOOP?4(Any, Any) -> Any +QtCore.pyqtSlot?4(Any, str name=None, str result=None) -> Any +QtCore.Q_ARG?4(Any, Any) -> Any +QtCore.Q_RETURN_ARG?4(Any) -> Any +QtCore.bin_?4(QTextStream) -> QTextStream +QtCore.oct_?4(QTextStream) -> QTextStream +QtCore.dec?4(QTextStream) -> QTextStream +QtCore.hex_?4(QTextStream) -> QTextStream +QtCore.showbase?4(QTextStream) -> QTextStream +QtCore.forcesign?4(QTextStream) -> QTextStream +QtCore.forcepoint?4(QTextStream) -> QTextStream +QtCore.noshowbase?4(QTextStream) -> QTextStream +QtCore.noforcesign?4(QTextStream) -> QTextStream +QtCore.noforcepoint?4(QTextStream) -> QTextStream +QtCore.uppercasebase?4(QTextStream) -> QTextStream +QtCore.uppercasedigits?4(QTextStream) -> QTextStream +QtCore.lowercasebase?4(QTextStream) -> QTextStream +QtCore.lowercasedigits?4(QTextStream) -> QTextStream +QtCore.fixed?4(QTextStream) -> QTextStream +QtCore.scientific?4(QTextStream) -> QTextStream +QtCore.left?4(QTextStream) -> QTextStream +QtCore.right?4(QTextStream) -> QTextStream +QtCore.center?4(QTextStream) -> QTextStream +QtCore.endl?4(QTextStream) -> QTextStream +QtCore.flush?4(QTextStream) -> QTextStream +QtCore.reset?4(QTextStream) -> QTextStream +QtCore.bom?4(QTextStream) -> QTextStream +QtCore.ws?4(QTextStream) -> QTextStream +QtCore.qSetFieldWidth?4(int) -> QTextStreamManipulator +QtCore.qSetPadChar?4(QChar) -> QTextStreamManipulator +QtCore.qSetRealNumberPrecision?4(int) -> QTextStreamManipulator +QtCore.Qt.HighDpiScaleFactorRoundingPolicy?10 +QtCore.Qt.HighDpiScaleFactorRoundingPolicy.Round?10 +QtCore.Qt.HighDpiScaleFactorRoundingPolicy.Ceil?10 +QtCore.Qt.HighDpiScaleFactorRoundingPolicy.Floor?10 +QtCore.Qt.HighDpiScaleFactorRoundingPolicy.RoundPreferFloor?10 +QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough?10 +QtCore.Qt.ChecksumType?10 +QtCore.Qt.ChecksumType.ChecksumIso3309?10 +QtCore.Qt.ChecksumType.ChecksumItuV41?10 +QtCore.Qt.EnterKeyType?10 +QtCore.Qt.EnterKeyType.EnterKeyDefault?10 +QtCore.Qt.EnterKeyType.EnterKeyReturn?10 +QtCore.Qt.EnterKeyType.EnterKeyDone?10 +QtCore.Qt.EnterKeyType.EnterKeyGo?10 +QtCore.Qt.EnterKeyType.EnterKeySend?10 +QtCore.Qt.EnterKeyType.EnterKeySearch?10 +QtCore.Qt.EnterKeyType.EnterKeyNext?10 +QtCore.Qt.EnterKeyType.EnterKeyPrevious?10 +QtCore.Qt.ItemSelectionOperation?10 +QtCore.Qt.ItemSelectionOperation.ReplaceSelection?10 +QtCore.Qt.ItemSelectionOperation.AddToSelection?10 +QtCore.Qt.TabFocusBehavior?10 +QtCore.Qt.TabFocusBehavior.NoTabFocus?10 +QtCore.Qt.TabFocusBehavior.TabFocusTextControls?10 +QtCore.Qt.TabFocusBehavior.TabFocusListControls?10 +QtCore.Qt.TabFocusBehavior.TabFocusAllControls?10 +QtCore.Qt.MouseEventFlag?10 +QtCore.Qt.MouseEventFlag.MouseEventCreatedDoubleClick?10 +QtCore.Qt.MouseEventSource?10 +QtCore.Qt.MouseEventSource.MouseEventNotSynthesized?10 +QtCore.Qt.MouseEventSource.MouseEventSynthesizedBySystem?10 +QtCore.Qt.MouseEventSource.MouseEventSynthesizedByQt?10 +QtCore.Qt.MouseEventSource.MouseEventSynthesizedByApplication?10 +QtCore.Qt.ScrollPhase?10 +QtCore.Qt.ScrollPhase.ScrollBegin?10 +QtCore.Qt.ScrollPhase.ScrollUpdate?10 +QtCore.Qt.ScrollPhase.ScrollEnd?10 +QtCore.Qt.ScrollPhase.NoScrollPhase?10 +QtCore.Qt.ScrollPhase.ScrollMomentum?10 +QtCore.Qt.NativeGestureType?10 +QtCore.Qt.NativeGestureType.BeginNativeGesture?10 +QtCore.Qt.NativeGestureType.EndNativeGesture?10 +QtCore.Qt.NativeGestureType.PanNativeGesture?10 +QtCore.Qt.NativeGestureType.ZoomNativeGesture?10 +QtCore.Qt.NativeGestureType.SmartZoomNativeGesture?10 +QtCore.Qt.NativeGestureType.RotateNativeGesture?10 +QtCore.Qt.NativeGestureType.SwipeNativeGesture?10 +QtCore.Qt.Edge?10 +QtCore.Qt.Edge.TopEdge?10 +QtCore.Qt.Edge.LeftEdge?10 +QtCore.Qt.Edge.RightEdge?10 +QtCore.Qt.Edge.BottomEdge?10 +QtCore.Qt.ApplicationState?10 +QtCore.Qt.ApplicationState.ApplicationSuspended?10 +QtCore.Qt.ApplicationState.ApplicationHidden?10 +QtCore.Qt.ApplicationState.ApplicationInactive?10 +QtCore.Qt.ApplicationState.ApplicationActive?10 +QtCore.Qt.HitTestAccuracy?10 +QtCore.Qt.HitTestAccuracy.ExactHit?10 +QtCore.Qt.HitTestAccuracy.FuzzyHit?10 +QtCore.Qt.WhiteSpaceMode?10 +QtCore.Qt.WhiteSpaceMode.WhiteSpaceNormal?10 +QtCore.Qt.WhiteSpaceMode.WhiteSpacePre?10 +QtCore.Qt.WhiteSpaceMode.WhiteSpaceNoWrap?10 +QtCore.Qt.WhiteSpaceMode.WhiteSpaceModeUndefined?10 +QtCore.Qt.FindChildOption?10 +QtCore.Qt.FindChildOption.FindDirectChildrenOnly?10 +QtCore.Qt.FindChildOption.FindChildrenRecursively?10 +QtCore.Qt.ScreenOrientation?10 +QtCore.Qt.ScreenOrientation.PrimaryOrientation?10 +QtCore.Qt.ScreenOrientation.PortraitOrientation?10 +QtCore.Qt.ScreenOrientation.LandscapeOrientation?10 +QtCore.Qt.ScreenOrientation.InvertedPortraitOrientation?10 +QtCore.Qt.ScreenOrientation.InvertedLandscapeOrientation?10 +QtCore.Qt.CursorMoveStyle?10 +QtCore.Qt.CursorMoveStyle.LogicalMoveStyle?10 +QtCore.Qt.CursorMoveStyle.VisualMoveStyle?10 +QtCore.Qt.NavigationMode?10 +QtCore.Qt.NavigationMode.NavigationModeNone?10 +QtCore.Qt.NavigationMode.NavigationModeKeypadTabOrder?10 +QtCore.Qt.NavigationMode.NavigationModeKeypadDirectional?10 +QtCore.Qt.NavigationMode.NavigationModeCursorAuto?10 +QtCore.Qt.NavigationMode.NavigationModeCursorForceVisible?10 +QtCore.Qt.GestureFlag?10 +QtCore.Qt.GestureFlag.DontStartGestureOnChildren?10 +QtCore.Qt.GestureFlag.ReceivePartialGestures?10 +QtCore.Qt.GestureFlag.IgnoredGesturesPropagateToParent?10 +QtCore.Qt.GestureType?10 +QtCore.Qt.GestureType.TapGesture?10 +QtCore.Qt.GestureType.TapAndHoldGesture?10 +QtCore.Qt.GestureType.PanGesture?10 +QtCore.Qt.GestureType.PinchGesture?10 +QtCore.Qt.GestureType.SwipeGesture?10 +QtCore.Qt.GestureType.CustomGesture?10 +QtCore.Qt.GestureState?10 +QtCore.Qt.GestureState.GestureStarted?10 +QtCore.Qt.GestureState.GestureUpdated?10 +QtCore.Qt.GestureState.GestureFinished?10 +QtCore.Qt.GestureState.GestureCanceled?10 +QtCore.Qt.TouchPointState?10 +QtCore.Qt.TouchPointState.TouchPointPressed?10 +QtCore.Qt.TouchPointState.TouchPointMoved?10 +QtCore.Qt.TouchPointState.TouchPointStationary?10 +QtCore.Qt.TouchPointState.TouchPointReleased?10 +QtCore.Qt.CoordinateSystem?10 +QtCore.Qt.CoordinateSystem.DeviceCoordinates?10 +QtCore.Qt.CoordinateSystem.LogicalCoordinates?10 +QtCore.Qt.AnchorPoint?10 +QtCore.Qt.AnchorPoint.AnchorLeft?10 +QtCore.Qt.AnchorPoint.AnchorHorizontalCenter?10 +QtCore.Qt.AnchorPoint.AnchorRight?10 +QtCore.Qt.AnchorPoint.AnchorTop?10 +QtCore.Qt.AnchorPoint.AnchorVerticalCenter?10 +QtCore.Qt.AnchorPoint.AnchorBottom?10 +QtCore.Qt.InputMethodHint?10 +QtCore.Qt.InputMethodHint.ImhNone?10 +QtCore.Qt.InputMethodHint.ImhHiddenText?10 +QtCore.Qt.InputMethodHint.ImhNoAutoUppercase?10 +QtCore.Qt.InputMethodHint.ImhPreferNumbers?10 +QtCore.Qt.InputMethodHint.ImhPreferUppercase?10 +QtCore.Qt.InputMethodHint.ImhPreferLowercase?10 +QtCore.Qt.InputMethodHint.ImhNoPredictiveText?10 +QtCore.Qt.InputMethodHint.ImhDigitsOnly?10 +QtCore.Qt.InputMethodHint.ImhFormattedNumbersOnly?10 +QtCore.Qt.InputMethodHint.ImhUppercaseOnly?10 +QtCore.Qt.InputMethodHint.ImhLowercaseOnly?10 +QtCore.Qt.InputMethodHint.ImhDialableCharactersOnly?10 +QtCore.Qt.InputMethodHint.ImhEmailCharactersOnly?10 +QtCore.Qt.InputMethodHint.ImhUrlCharactersOnly?10 +QtCore.Qt.InputMethodHint.ImhExclusiveInputMask?10 +QtCore.Qt.InputMethodHint.ImhSensitiveData?10 +QtCore.Qt.InputMethodHint.ImhDate?10 +QtCore.Qt.InputMethodHint.ImhTime?10 +QtCore.Qt.InputMethodHint.ImhPreferLatin?10 +QtCore.Qt.InputMethodHint.ImhLatinOnly?10 +QtCore.Qt.InputMethodHint.ImhMultiLine?10 +QtCore.Qt.InputMethodHint.ImhNoEditMenu?10 +QtCore.Qt.InputMethodHint.ImhNoTextHandles?10 +QtCore.Qt.TileRule?10 +QtCore.Qt.TileRule.StretchTile?10 +QtCore.Qt.TileRule.RepeatTile?10 +QtCore.Qt.TileRule.RoundTile?10 +QtCore.Qt.WindowFrameSection?10 +QtCore.Qt.WindowFrameSection.NoSection?10 +QtCore.Qt.WindowFrameSection.LeftSection?10 +QtCore.Qt.WindowFrameSection.TopLeftSection?10 +QtCore.Qt.WindowFrameSection.TopSection?10 +QtCore.Qt.WindowFrameSection.TopRightSection?10 +QtCore.Qt.WindowFrameSection.RightSection?10 +QtCore.Qt.WindowFrameSection.BottomRightSection?10 +QtCore.Qt.WindowFrameSection.BottomSection?10 +QtCore.Qt.WindowFrameSection.BottomLeftSection?10 +QtCore.Qt.WindowFrameSection.TitleBarArea?10 +QtCore.Qt.SizeHint?10 +QtCore.Qt.SizeHint.MinimumSize?10 +QtCore.Qt.SizeHint.PreferredSize?10 +QtCore.Qt.SizeHint.MaximumSize?10 +QtCore.Qt.SizeHint.MinimumDescent?10 +QtCore.Qt.SizeMode?10 +QtCore.Qt.SizeMode.AbsoluteSize?10 +QtCore.Qt.SizeMode.RelativeSize?10 +QtCore.Qt.EventPriority?10 +QtCore.Qt.EventPriority.HighEventPriority?10 +QtCore.Qt.EventPriority.NormalEventPriority?10 +QtCore.Qt.EventPriority.LowEventPriority?10 +QtCore.Qt.Axis?10 +QtCore.Qt.Axis.XAxis?10 +QtCore.Qt.Axis.YAxis?10 +QtCore.Qt.Axis.ZAxis?10 +QtCore.Qt.MaskMode?10 +QtCore.Qt.MaskMode.MaskInColor?10 +QtCore.Qt.MaskMode.MaskOutColor?10 +QtCore.Qt.TextInteractionFlag?10 +QtCore.Qt.TextInteractionFlag.NoTextInteraction?10 +QtCore.Qt.TextInteractionFlag.TextSelectableByMouse?10 +QtCore.Qt.TextInteractionFlag.TextSelectableByKeyboard?10 +QtCore.Qt.TextInteractionFlag.LinksAccessibleByMouse?10 +QtCore.Qt.TextInteractionFlag.LinksAccessibleByKeyboard?10 +QtCore.Qt.TextInteractionFlag.TextEditable?10 +QtCore.Qt.TextInteractionFlag.TextEditorInteraction?10 +QtCore.Qt.TextInteractionFlag.TextBrowserInteraction?10 +QtCore.Qt.ItemSelectionMode?10 +QtCore.Qt.ItemSelectionMode.ContainsItemShape?10 +QtCore.Qt.ItemSelectionMode.IntersectsItemShape?10 +QtCore.Qt.ItemSelectionMode.ContainsItemBoundingRect?10 +QtCore.Qt.ItemSelectionMode.IntersectsItemBoundingRect?10 +QtCore.Qt.ApplicationAttribute?10 +QtCore.Qt.ApplicationAttribute.AA_ImmediateWidgetCreation?10 +QtCore.Qt.ApplicationAttribute.AA_MSWindowsUseDirect3DByDefault?10 +QtCore.Qt.ApplicationAttribute.AA_DontShowIconsInMenus?10 +QtCore.Qt.ApplicationAttribute.AA_NativeWindows?10 +QtCore.Qt.ApplicationAttribute.AA_DontCreateNativeWidgetSiblings?10 +QtCore.Qt.ApplicationAttribute.AA_MacPluginApplication?10 +QtCore.Qt.ApplicationAttribute.AA_DontUseNativeMenuBar?10 +QtCore.Qt.ApplicationAttribute.AA_MacDontSwapCtrlAndMeta?10 +QtCore.Qt.ApplicationAttribute.AA_X11InitThreads?10 +QtCore.Qt.ApplicationAttribute.AA_Use96Dpi?10 +QtCore.Qt.ApplicationAttribute.AA_SynthesizeTouchForUnhandledMouseEvents?10 +QtCore.Qt.ApplicationAttribute.AA_SynthesizeMouseForUnhandledTouchEvents?10 +QtCore.Qt.ApplicationAttribute.AA_UseHighDpiPixmaps?10 +QtCore.Qt.ApplicationAttribute.AA_ForceRasterWidgets?10 +QtCore.Qt.ApplicationAttribute.AA_UseDesktopOpenGL?10 +QtCore.Qt.ApplicationAttribute.AA_UseOpenGLES?10 +QtCore.Qt.ApplicationAttribute.AA_UseSoftwareOpenGL?10 +QtCore.Qt.ApplicationAttribute.AA_ShareOpenGLContexts?10 +QtCore.Qt.ApplicationAttribute.AA_SetPalette?10 +QtCore.Qt.ApplicationAttribute.AA_EnableHighDpiScaling?10 +QtCore.Qt.ApplicationAttribute.AA_DisableHighDpiScaling?10 +QtCore.Qt.ApplicationAttribute.AA_PluginApplication?10 +QtCore.Qt.ApplicationAttribute.AA_UseStyleSheetPropagationInWidgetStyles?10 +QtCore.Qt.ApplicationAttribute.AA_DontUseNativeDialogs?10 +QtCore.Qt.ApplicationAttribute.AA_SynthesizeMouseForUnhandledTabletEvents?10 +QtCore.Qt.ApplicationAttribute.AA_CompressHighFrequencyEvents?10 +QtCore.Qt.ApplicationAttribute.AA_DontCheckOpenGLContextThreadAffinity?10 +QtCore.Qt.ApplicationAttribute.AA_DisableShaderDiskCache?10 +QtCore.Qt.ApplicationAttribute.AA_DontShowShortcutsInContextMenus?10 +QtCore.Qt.ApplicationAttribute.AA_CompressTabletEvents?10 +QtCore.Qt.ApplicationAttribute.AA_DisableWindowContextHelpButton?10 +QtCore.Qt.ApplicationAttribute.AA_DisableSessionManager?10 +QtCore.Qt.ApplicationAttribute.AA_DisableNativeVirtualKeyboard?10 +QtCore.Qt.WindowModality?10 +QtCore.Qt.WindowModality.NonModal?10 +QtCore.Qt.WindowModality.WindowModal?10 +QtCore.Qt.WindowModality.ApplicationModal?10 +QtCore.Qt.MatchFlag?10 +QtCore.Qt.MatchFlag.MatchExactly?10 +QtCore.Qt.MatchFlag.MatchFixedString?10 +QtCore.Qt.MatchFlag.MatchContains?10 +QtCore.Qt.MatchFlag.MatchStartsWith?10 +QtCore.Qt.MatchFlag.MatchEndsWith?10 +QtCore.Qt.MatchFlag.MatchRegExp?10 +QtCore.Qt.MatchFlag.MatchWildcard?10 +QtCore.Qt.MatchFlag.MatchCaseSensitive?10 +QtCore.Qt.MatchFlag.MatchWrap?10 +QtCore.Qt.MatchFlag.MatchRecursive?10 +QtCore.Qt.MatchFlag.MatchRegularExpression?10 +QtCore.Qt.ItemFlag?10 +QtCore.Qt.ItemFlag.NoItemFlags?10 +QtCore.Qt.ItemFlag.ItemIsSelectable?10 +QtCore.Qt.ItemFlag.ItemIsEditable?10 +QtCore.Qt.ItemFlag.ItemIsDragEnabled?10 +QtCore.Qt.ItemFlag.ItemIsDropEnabled?10 +QtCore.Qt.ItemFlag.ItemIsUserCheckable?10 +QtCore.Qt.ItemFlag.ItemIsEnabled?10 +QtCore.Qt.ItemFlag.ItemIsTristate?10 +QtCore.Qt.ItemFlag.ItemNeverHasChildren?10 +QtCore.Qt.ItemFlag.ItemIsUserTristate?10 +QtCore.Qt.ItemFlag.ItemIsAutoTristate?10 +QtCore.Qt.ItemDataRole?10 +QtCore.Qt.ItemDataRole.DisplayRole?10 +QtCore.Qt.ItemDataRole.DecorationRole?10 +QtCore.Qt.ItemDataRole.EditRole?10 +QtCore.Qt.ItemDataRole.ToolTipRole?10 +QtCore.Qt.ItemDataRole.StatusTipRole?10 +QtCore.Qt.ItemDataRole.WhatsThisRole?10 +QtCore.Qt.ItemDataRole.FontRole?10 +QtCore.Qt.ItemDataRole.TextAlignmentRole?10 +QtCore.Qt.ItemDataRole.BackgroundRole?10 +QtCore.Qt.ItemDataRole.BackgroundColorRole?10 +QtCore.Qt.ItemDataRole.ForegroundRole?10 +QtCore.Qt.ItemDataRole.TextColorRole?10 +QtCore.Qt.ItemDataRole.CheckStateRole?10 +QtCore.Qt.ItemDataRole.AccessibleTextRole?10 +QtCore.Qt.ItemDataRole.AccessibleDescriptionRole?10 +QtCore.Qt.ItemDataRole.SizeHintRole?10 +QtCore.Qt.ItemDataRole.InitialSortOrderRole?10 +QtCore.Qt.ItemDataRole.UserRole?10 +QtCore.Qt.CheckState?10 +QtCore.Qt.CheckState.Unchecked?10 +QtCore.Qt.CheckState.PartiallyChecked?10 +QtCore.Qt.CheckState.Checked?10 +QtCore.Qt.DropAction?10 +QtCore.Qt.DropAction.CopyAction?10 +QtCore.Qt.DropAction.MoveAction?10 +QtCore.Qt.DropAction.LinkAction?10 +QtCore.Qt.DropAction.ActionMask?10 +QtCore.Qt.DropAction.TargetMoveAction?10 +QtCore.Qt.DropAction.IgnoreAction?10 +QtCore.Qt.LayoutDirection?10 +QtCore.Qt.LayoutDirection.LeftToRight?10 +QtCore.Qt.LayoutDirection.RightToLeft?10 +QtCore.Qt.LayoutDirection.LayoutDirectionAuto?10 +QtCore.Qt.ToolButtonStyle?10 +QtCore.Qt.ToolButtonStyle.ToolButtonIconOnly?10 +QtCore.Qt.ToolButtonStyle.ToolButtonTextOnly?10 +QtCore.Qt.ToolButtonStyle.ToolButtonTextBesideIcon?10 +QtCore.Qt.ToolButtonStyle.ToolButtonTextUnderIcon?10 +QtCore.Qt.ToolButtonStyle.ToolButtonFollowStyle?10 +QtCore.Qt.InputMethodQuery?10 +QtCore.Qt.InputMethodQuery.ImMicroFocus?10 +QtCore.Qt.InputMethodQuery.ImFont?10 +QtCore.Qt.InputMethodQuery.ImCursorPosition?10 +QtCore.Qt.InputMethodQuery.ImSurroundingText?10 +QtCore.Qt.InputMethodQuery.ImCurrentSelection?10 +QtCore.Qt.InputMethodQuery.ImMaximumTextLength?10 +QtCore.Qt.InputMethodQuery.ImAnchorPosition?10 +QtCore.Qt.InputMethodQuery.ImEnabled?10 +QtCore.Qt.InputMethodQuery.ImCursorRectangle?10 +QtCore.Qt.InputMethodQuery.ImHints?10 +QtCore.Qt.InputMethodQuery.ImPreferredLanguage?10 +QtCore.Qt.InputMethodQuery.ImPlatformData?10 +QtCore.Qt.InputMethodQuery.ImQueryInput?10 +QtCore.Qt.InputMethodQuery.ImQueryAll?10 +QtCore.Qt.InputMethodQuery.ImAbsolutePosition?10 +QtCore.Qt.InputMethodQuery.ImTextBeforeCursor?10 +QtCore.Qt.InputMethodQuery.ImTextAfterCursor?10 +QtCore.Qt.InputMethodQuery.ImEnterKeyType?10 +QtCore.Qt.InputMethodQuery.ImAnchorRectangle?10 +QtCore.Qt.InputMethodQuery.ImInputItemClipRectangle?10 +QtCore.Qt.ContextMenuPolicy?10 +QtCore.Qt.ContextMenuPolicy.NoContextMenu?10 +QtCore.Qt.ContextMenuPolicy.PreventContextMenu?10 +QtCore.Qt.ContextMenuPolicy.DefaultContextMenu?10 +QtCore.Qt.ContextMenuPolicy.ActionsContextMenu?10 +QtCore.Qt.ContextMenuPolicy.CustomContextMenu?10 +QtCore.Qt.FocusReason?10 +QtCore.Qt.FocusReason.MouseFocusReason?10 +QtCore.Qt.FocusReason.TabFocusReason?10 +QtCore.Qt.FocusReason.BacktabFocusReason?10 +QtCore.Qt.FocusReason.ActiveWindowFocusReason?10 +QtCore.Qt.FocusReason.PopupFocusReason?10 +QtCore.Qt.FocusReason.ShortcutFocusReason?10 +QtCore.Qt.FocusReason.MenuBarFocusReason?10 +QtCore.Qt.FocusReason.OtherFocusReason?10 +QtCore.Qt.FocusReason.NoFocusReason?10 +QtCore.Qt.TransformationMode?10 +QtCore.Qt.TransformationMode.FastTransformation?10 +QtCore.Qt.TransformationMode.SmoothTransformation?10 +QtCore.Qt.ClipOperation?10 +QtCore.Qt.ClipOperation.NoClip?10 +QtCore.Qt.ClipOperation.ReplaceClip?10 +QtCore.Qt.ClipOperation.IntersectClip?10 +QtCore.Qt.FillRule?10 +QtCore.Qt.FillRule.OddEvenFill?10 +QtCore.Qt.FillRule.WindingFill?10 +QtCore.Qt.ShortcutContext?10 +QtCore.Qt.ShortcutContext.WidgetShortcut?10 +QtCore.Qt.ShortcutContext.WindowShortcut?10 +QtCore.Qt.ShortcutContext.ApplicationShortcut?10 +QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut?10 +QtCore.Qt.ConnectionType?10 +QtCore.Qt.ConnectionType.AutoConnection?10 +QtCore.Qt.ConnectionType.DirectConnection?10 +QtCore.Qt.ConnectionType.QueuedConnection?10 +QtCore.Qt.ConnectionType.BlockingQueuedConnection?10 +QtCore.Qt.ConnectionType.UniqueConnection?10 +QtCore.Qt.Corner?10 +QtCore.Qt.Corner.TopLeftCorner?10 +QtCore.Qt.Corner.TopRightCorner?10 +QtCore.Qt.Corner.BottomLeftCorner?10 +QtCore.Qt.Corner.BottomRightCorner?10 +QtCore.Qt.CaseSensitivity?10 +QtCore.Qt.CaseSensitivity.CaseInsensitive?10 +QtCore.Qt.CaseSensitivity.CaseSensitive?10 +QtCore.Qt.ScrollBarPolicy?10 +QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded?10 +QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff?10 +QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOn?10 +QtCore.Qt.DayOfWeek?10 +QtCore.Qt.DayOfWeek.Monday?10 +QtCore.Qt.DayOfWeek.Tuesday?10 +QtCore.Qt.DayOfWeek.Wednesday?10 +QtCore.Qt.DayOfWeek.Thursday?10 +QtCore.Qt.DayOfWeek.Friday?10 +QtCore.Qt.DayOfWeek.Saturday?10 +QtCore.Qt.DayOfWeek.Sunday?10 +QtCore.Qt.TimeSpec?10 +QtCore.Qt.TimeSpec.LocalTime?10 +QtCore.Qt.TimeSpec.UTC?10 +QtCore.Qt.TimeSpec.OffsetFromUTC?10 +QtCore.Qt.TimeSpec.TimeZone?10 +QtCore.Qt.DateFormat?10 +QtCore.Qt.DateFormat.TextDate?10 +QtCore.Qt.DateFormat.ISODate?10 +QtCore.Qt.DateFormat.ISODateWithMs?10 +QtCore.Qt.DateFormat.LocalDate?10 +QtCore.Qt.DateFormat.SystemLocaleDate?10 +QtCore.Qt.DateFormat.LocaleDate?10 +QtCore.Qt.DateFormat.SystemLocaleShortDate?10 +QtCore.Qt.DateFormat.SystemLocaleLongDate?10 +QtCore.Qt.DateFormat.DefaultLocaleShortDate?10 +QtCore.Qt.DateFormat.DefaultLocaleLongDate?10 +QtCore.Qt.DateFormat.RFC2822Date?10 +QtCore.Qt.ToolBarArea?10 +QtCore.Qt.ToolBarArea.LeftToolBarArea?10 +QtCore.Qt.ToolBarArea.RightToolBarArea?10 +QtCore.Qt.ToolBarArea.TopToolBarArea?10 +QtCore.Qt.ToolBarArea.BottomToolBarArea?10 +QtCore.Qt.ToolBarArea.ToolBarArea_Mask?10 +QtCore.Qt.ToolBarArea.AllToolBarAreas?10 +QtCore.Qt.ToolBarArea.NoToolBarArea?10 +QtCore.Qt.TimerType?10 +QtCore.Qt.TimerType.PreciseTimer?10 +QtCore.Qt.TimerType.CoarseTimer?10 +QtCore.Qt.TimerType.VeryCoarseTimer?10 +QtCore.Qt.DockWidgetArea?10 +QtCore.Qt.DockWidgetArea.LeftDockWidgetArea?10 +QtCore.Qt.DockWidgetArea.RightDockWidgetArea?10 +QtCore.Qt.DockWidgetArea.TopDockWidgetArea?10 +QtCore.Qt.DockWidgetArea.BottomDockWidgetArea?10 +QtCore.Qt.DockWidgetArea.DockWidgetArea_Mask?10 +QtCore.Qt.DockWidgetArea.AllDockWidgetAreas?10 +QtCore.Qt.DockWidgetArea.NoDockWidgetArea?10 +QtCore.Qt.AspectRatioMode?10 +QtCore.Qt.AspectRatioMode.IgnoreAspectRatio?10 +QtCore.Qt.AspectRatioMode.KeepAspectRatio?10 +QtCore.Qt.AspectRatioMode.KeepAspectRatioByExpanding?10 +QtCore.Qt.TextFormat?10 +QtCore.Qt.TextFormat.PlainText?10 +QtCore.Qt.TextFormat.RichText?10 +QtCore.Qt.TextFormat.AutoText?10 +QtCore.Qt.TextFormat.MarkdownText?10 +QtCore.Qt.CursorShape?10 +QtCore.Qt.CursorShape.ArrowCursor?10 +QtCore.Qt.CursorShape.UpArrowCursor?10 +QtCore.Qt.CursorShape.CrossCursor?10 +QtCore.Qt.CursorShape.WaitCursor?10 +QtCore.Qt.CursorShape.IBeamCursor?10 +QtCore.Qt.CursorShape.SizeVerCursor?10 +QtCore.Qt.CursorShape.SizeHorCursor?10 +QtCore.Qt.CursorShape.SizeBDiagCursor?10 +QtCore.Qt.CursorShape.SizeFDiagCursor?10 +QtCore.Qt.CursorShape.SizeAllCursor?10 +QtCore.Qt.CursorShape.BlankCursor?10 +QtCore.Qt.CursorShape.SplitVCursor?10 +QtCore.Qt.CursorShape.SplitHCursor?10 +QtCore.Qt.CursorShape.PointingHandCursor?10 +QtCore.Qt.CursorShape.ForbiddenCursor?10 +QtCore.Qt.CursorShape.OpenHandCursor?10 +QtCore.Qt.CursorShape.ClosedHandCursor?10 +QtCore.Qt.CursorShape.WhatsThisCursor?10 +QtCore.Qt.CursorShape.BusyCursor?10 +QtCore.Qt.CursorShape.LastCursor?10 +QtCore.Qt.CursorShape.BitmapCursor?10 +QtCore.Qt.CursorShape.CustomCursor?10 +QtCore.Qt.CursorShape.DragCopyCursor?10 +QtCore.Qt.CursorShape.DragMoveCursor?10 +QtCore.Qt.CursorShape.DragLinkCursor?10 +QtCore.Qt.UIEffect?10 +QtCore.Qt.UIEffect.UI_General?10 +QtCore.Qt.UIEffect.UI_AnimateMenu?10 +QtCore.Qt.UIEffect.UI_FadeMenu?10 +QtCore.Qt.UIEffect.UI_AnimateCombo?10 +QtCore.Qt.UIEffect.UI_AnimateTooltip?10 +QtCore.Qt.UIEffect.UI_FadeTooltip?10 +QtCore.Qt.UIEffect.UI_AnimateToolBox?10 +QtCore.Qt.BrushStyle?10 +QtCore.Qt.BrushStyle.NoBrush?10 +QtCore.Qt.BrushStyle.SolidPattern?10 +QtCore.Qt.BrushStyle.Dense1Pattern?10 +QtCore.Qt.BrushStyle.Dense2Pattern?10 +QtCore.Qt.BrushStyle.Dense3Pattern?10 +QtCore.Qt.BrushStyle.Dense4Pattern?10 +QtCore.Qt.BrushStyle.Dense5Pattern?10 +QtCore.Qt.BrushStyle.Dense6Pattern?10 +QtCore.Qt.BrushStyle.Dense7Pattern?10 +QtCore.Qt.BrushStyle.HorPattern?10 +QtCore.Qt.BrushStyle.VerPattern?10 +QtCore.Qt.BrushStyle.CrossPattern?10 +QtCore.Qt.BrushStyle.BDiagPattern?10 +QtCore.Qt.BrushStyle.FDiagPattern?10 +QtCore.Qt.BrushStyle.DiagCrossPattern?10 +QtCore.Qt.BrushStyle.LinearGradientPattern?10 +QtCore.Qt.BrushStyle.RadialGradientPattern?10 +QtCore.Qt.BrushStyle.ConicalGradientPattern?10 +QtCore.Qt.BrushStyle.TexturePattern?10 +QtCore.Qt.PenJoinStyle?10 +QtCore.Qt.PenJoinStyle.MiterJoin?10 +QtCore.Qt.PenJoinStyle.BevelJoin?10 +QtCore.Qt.PenJoinStyle.RoundJoin?10 +QtCore.Qt.PenJoinStyle.MPenJoinStyle?10 +QtCore.Qt.PenJoinStyle.SvgMiterJoin?10 +QtCore.Qt.PenCapStyle?10 +QtCore.Qt.PenCapStyle.FlatCap?10 +QtCore.Qt.PenCapStyle.SquareCap?10 +QtCore.Qt.PenCapStyle.RoundCap?10 +QtCore.Qt.PenCapStyle.MPenCapStyle?10 +QtCore.Qt.PenStyle?10 +QtCore.Qt.PenStyle.NoPen?10 +QtCore.Qt.PenStyle.SolidLine?10 +QtCore.Qt.PenStyle.DashLine?10 +QtCore.Qt.PenStyle.DotLine?10 +QtCore.Qt.PenStyle.DashDotLine?10 +QtCore.Qt.PenStyle.DashDotDotLine?10 +QtCore.Qt.PenStyle.CustomDashLine?10 +QtCore.Qt.PenStyle.MPenStyle?10 +QtCore.Qt.ArrowType?10 +QtCore.Qt.ArrowType.NoArrow?10 +QtCore.Qt.ArrowType.UpArrow?10 +QtCore.Qt.ArrowType.DownArrow?10 +QtCore.Qt.ArrowType.LeftArrow?10 +QtCore.Qt.ArrowType.RightArrow?10 +QtCore.Qt.Key?10 +QtCore.Qt.Key.Key_Escape?10 +QtCore.Qt.Key.Key_Tab?10 +QtCore.Qt.Key.Key_Backtab?10 +QtCore.Qt.Key.Key_Backspace?10 +QtCore.Qt.Key.Key_Return?10 +QtCore.Qt.Key.Key_Enter?10 +QtCore.Qt.Key.Key_Insert?10 +QtCore.Qt.Key.Key_Delete?10 +QtCore.Qt.Key.Key_Pause?10 +QtCore.Qt.Key.Key_Print?10 +QtCore.Qt.Key.Key_SysReq?10 +QtCore.Qt.Key.Key_Clear?10 +QtCore.Qt.Key.Key_Home?10 +QtCore.Qt.Key.Key_End?10 +QtCore.Qt.Key.Key_Left?10 +QtCore.Qt.Key.Key_Up?10 +QtCore.Qt.Key.Key_Right?10 +QtCore.Qt.Key.Key_Down?10 +QtCore.Qt.Key.Key_PageUp?10 +QtCore.Qt.Key.Key_PageDown?10 +QtCore.Qt.Key.Key_Shift?10 +QtCore.Qt.Key.Key_Control?10 +QtCore.Qt.Key.Key_Meta?10 +QtCore.Qt.Key.Key_Alt?10 +QtCore.Qt.Key.Key_CapsLock?10 +QtCore.Qt.Key.Key_NumLock?10 +QtCore.Qt.Key.Key_ScrollLock?10 +QtCore.Qt.Key.Key_F1?10 +QtCore.Qt.Key.Key_F2?10 +QtCore.Qt.Key.Key_F3?10 +QtCore.Qt.Key.Key_F4?10 +QtCore.Qt.Key.Key_F5?10 +QtCore.Qt.Key.Key_F6?10 +QtCore.Qt.Key.Key_F7?10 +QtCore.Qt.Key.Key_F8?10 +QtCore.Qt.Key.Key_F9?10 +QtCore.Qt.Key.Key_F10?10 +QtCore.Qt.Key.Key_F11?10 +QtCore.Qt.Key.Key_F12?10 +QtCore.Qt.Key.Key_F13?10 +QtCore.Qt.Key.Key_F14?10 +QtCore.Qt.Key.Key_F15?10 +QtCore.Qt.Key.Key_F16?10 +QtCore.Qt.Key.Key_F17?10 +QtCore.Qt.Key.Key_F18?10 +QtCore.Qt.Key.Key_F19?10 +QtCore.Qt.Key.Key_F20?10 +QtCore.Qt.Key.Key_F21?10 +QtCore.Qt.Key.Key_F22?10 +QtCore.Qt.Key.Key_F23?10 +QtCore.Qt.Key.Key_F24?10 +QtCore.Qt.Key.Key_F25?10 +QtCore.Qt.Key.Key_F26?10 +QtCore.Qt.Key.Key_F27?10 +QtCore.Qt.Key.Key_F28?10 +QtCore.Qt.Key.Key_F29?10 +QtCore.Qt.Key.Key_F30?10 +QtCore.Qt.Key.Key_F31?10 +QtCore.Qt.Key.Key_F32?10 +QtCore.Qt.Key.Key_F33?10 +QtCore.Qt.Key.Key_F34?10 +QtCore.Qt.Key.Key_F35?10 +QtCore.Qt.Key.Key_Super_L?10 +QtCore.Qt.Key.Key_Super_R?10 +QtCore.Qt.Key.Key_Menu?10 +QtCore.Qt.Key.Key_Hyper_L?10 +QtCore.Qt.Key.Key_Hyper_R?10 +QtCore.Qt.Key.Key_Help?10 +QtCore.Qt.Key.Key_Direction_L?10 +QtCore.Qt.Key.Key_Direction_R?10 +QtCore.Qt.Key.Key_Space?10 +QtCore.Qt.Key.Key_Any?10 +QtCore.Qt.Key.Key_Exclam?10 +QtCore.Qt.Key.Key_QuoteDbl?10 +QtCore.Qt.Key.Key_NumberSign?10 +QtCore.Qt.Key.Key_Dollar?10 +QtCore.Qt.Key.Key_Percent?10 +QtCore.Qt.Key.Key_Ampersand?10 +QtCore.Qt.Key.Key_Apostrophe?10 +QtCore.Qt.Key.Key_ParenLeft?10 +QtCore.Qt.Key.Key_ParenRight?10 +QtCore.Qt.Key.Key_Asterisk?10 +QtCore.Qt.Key.Key_Plus?10 +QtCore.Qt.Key.Key_Comma?10 +QtCore.Qt.Key.Key_Minus?10 +QtCore.Qt.Key.Key_Period?10 +QtCore.Qt.Key.Key_Slash?10 +QtCore.Qt.Key.Key_0?10 +QtCore.Qt.Key.Key_1?10 +QtCore.Qt.Key.Key_2?10 +QtCore.Qt.Key.Key_3?10 +QtCore.Qt.Key.Key_4?10 +QtCore.Qt.Key.Key_5?10 +QtCore.Qt.Key.Key_6?10 +QtCore.Qt.Key.Key_7?10 +QtCore.Qt.Key.Key_8?10 +QtCore.Qt.Key.Key_9?10 +QtCore.Qt.Key.Key_Colon?10 +QtCore.Qt.Key.Key_Semicolon?10 +QtCore.Qt.Key.Key_Less?10 +QtCore.Qt.Key.Key_Equal?10 +QtCore.Qt.Key.Key_Greater?10 +QtCore.Qt.Key.Key_Question?10 +QtCore.Qt.Key.Key_At?10 +QtCore.Qt.Key.Key_A?10 +QtCore.Qt.Key.Key_B?10 +QtCore.Qt.Key.Key_C?10 +QtCore.Qt.Key.Key_D?10 +QtCore.Qt.Key.Key_E?10 +QtCore.Qt.Key.Key_F?10 +QtCore.Qt.Key.Key_G?10 +QtCore.Qt.Key.Key_H?10 +QtCore.Qt.Key.Key_I?10 +QtCore.Qt.Key.Key_J?10 +QtCore.Qt.Key.Key_K?10 +QtCore.Qt.Key.Key_L?10 +QtCore.Qt.Key.Key_M?10 +QtCore.Qt.Key.Key_N?10 +QtCore.Qt.Key.Key_O?10 +QtCore.Qt.Key.Key_P?10 +QtCore.Qt.Key.Key_Q?10 +QtCore.Qt.Key.Key_R?10 +QtCore.Qt.Key.Key_S?10 +QtCore.Qt.Key.Key_T?10 +QtCore.Qt.Key.Key_U?10 +QtCore.Qt.Key.Key_V?10 +QtCore.Qt.Key.Key_W?10 +QtCore.Qt.Key.Key_X?10 +QtCore.Qt.Key.Key_Y?10 +QtCore.Qt.Key.Key_Z?10 +QtCore.Qt.Key.Key_BracketLeft?10 +QtCore.Qt.Key.Key_Backslash?10 +QtCore.Qt.Key.Key_BracketRight?10 +QtCore.Qt.Key.Key_AsciiCircum?10 +QtCore.Qt.Key.Key_Underscore?10 +QtCore.Qt.Key.Key_QuoteLeft?10 +QtCore.Qt.Key.Key_BraceLeft?10 +QtCore.Qt.Key.Key_Bar?10 +QtCore.Qt.Key.Key_BraceRight?10 +QtCore.Qt.Key.Key_AsciiTilde?10 +QtCore.Qt.Key.Key_nobreakspace?10 +QtCore.Qt.Key.Key_exclamdown?10 +QtCore.Qt.Key.Key_cent?10 +QtCore.Qt.Key.Key_sterling?10 +QtCore.Qt.Key.Key_currency?10 +QtCore.Qt.Key.Key_yen?10 +QtCore.Qt.Key.Key_brokenbar?10 +QtCore.Qt.Key.Key_section?10 +QtCore.Qt.Key.Key_diaeresis?10 +QtCore.Qt.Key.Key_copyright?10 +QtCore.Qt.Key.Key_ordfeminine?10 +QtCore.Qt.Key.Key_guillemotleft?10 +QtCore.Qt.Key.Key_notsign?10 +QtCore.Qt.Key.Key_hyphen?10 +QtCore.Qt.Key.Key_registered?10 +QtCore.Qt.Key.Key_macron?10 +QtCore.Qt.Key.Key_degree?10 +QtCore.Qt.Key.Key_plusminus?10 +QtCore.Qt.Key.Key_twosuperior?10 +QtCore.Qt.Key.Key_threesuperior?10 +QtCore.Qt.Key.Key_acute?10 +QtCore.Qt.Key.Key_mu?10 +QtCore.Qt.Key.Key_paragraph?10 +QtCore.Qt.Key.Key_periodcentered?10 +QtCore.Qt.Key.Key_cedilla?10 +QtCore.Qt.Key.Key_onesuperior?10 +QtCore.Qt.Key.Key_masculine?10 +QtCore.Qt.Key.Key_guillemotright?10 +QtCore.Qt.Key.Key_onequarter?10 +QtCore.Qt.Key.Key_onehalf?10 +QtCore.Qt.Key.Key_threequarters?10 +QtCore.Qt.Key.Key_questiondown?10 +QtCore.Qt.Key.Key_Agrave?10 +QtCore.Qt.Key.Key_Aacute?10 +QtCore.Qt.Key.Key_Acircumflex?10 +QtCore.Qt.Key.Key_Atilde?10 +QtCore.Qt.Key.Key_Adiaeresis?10 +QtCore.Qt.Key.Key_Aring?10 +QtCore.Qt.Key.Key_AE?10 +QtCore.Qt.Key.Key_Ccedilla?10 +QtCore.Qt.Key.Key_Egrave?10 +QtCore.Qt.Key.Key_Eacute?10 +QtCore.Qt.Key.Key_Ecircumflex?10 +QtCore.Qt.Key.Key_Ediaeresis?10 +QtCore.Qt.Key.Key_Igrave?10 +QtCore.Qt.Key.Key_Iacute?10 +QtCore.Qt.Key.Key_Icircumflex?10 +QtCore.Qt.Key.Key_Idiaeresis?10 +QtCore.Qt.Key.Key_ETH?10 +QtCore.Qt.Key.Key_Ntilde?10 +QtCore.Qt.Key.Key_Ograve?10 +QtCore.Qt.Key.Key_Oacute?10 +QtCore.Qt.Key.Key_Ocircumflex?10 +QtCore.Qt.Key.Key_Otilde?10 +QtCore.Qt.Key.Key_Odiaeresis?10 +QtCore.Qt.Key.Key_multiply?10 +QtCore.Qt.Key.Key_Ooblique?10 +QtCore.Qt.Key.Key_Ugrave?10 +QtCore.Qt.Key.Key_Uacute?10 +QtCore.Qt.Key.Key_Ucircumflex?10 +QtCore.Qt.Key.Key_Udiaeresis?10 +QtCore.Qt.Key.Key_Yacute?10 +QtCore.Qt.Key.Key_THORN?10 +QtCore.Qt.Key.Key_ssharp?10 +QtCore.Qt.Key.Key_division?10 +QtCore.Qt.Key.Key_ydiaeresis?10 +QtCore.Qt.Key.Key_AltGr?10 +QtCore.Qt.Key.Key_Multi_key?10 +QtCore.Qt.Key.Key_Codeinput?10 +QtCore.Qt.Key.Key_SingleCandidate?10 +QtCore.Qt.Key.Key_MultipleCandidate?10 +QtCore.Qt.Key.Key_PreviousCandidate?10 +QtCore.Qt.Key.Key_Mode_switch?10 +QtCore.Qt.Key.Key_Kanji?10 +QtCore.Qt.Key.Key_Muhenkan?10 +QtCore.Qt.Key.Key_Henkan?10 +QtCore.Qt.Key.Key_Romaji?10 +QtCore.Qt.Key.Key_Hiragana?10 +QtCore.Qt.Key.Key_Katakana?10 +QtCore.Qt.Key.Key_Hiragana_Katakana?10 +QtCore.Qt.Key.Key_Zenkaku?10 +QtCore.Qt.Key.Key_Hankaku?10 +QtCore.Qt.Key.Key_Zenkaku_Hankaku?10 +QtCore.Qt.Key.Key_Touroku?10 +QtCore.Qt.Key.Key_Massyo?10 +QtCore.Qt.Key.Key_Kana_Lock?10 +QtCore.Qt.Key.Key_Kana_Shift?10 +QtCore.Qt.Key.Key_Eisu_Shift?10 +QtCore.Qt.Key.Key_Eisu_toggle?10 +QtCore.Qt.Key.Key_Hangul?10 +QtCore.Qt.Key.Key_Hangul_Start?10 +QtCore.Qt.Key.Key_Hangul_End?10 +QtCore.Qt.Key.Key_Hangul_Hanja?10 +QtCore.Qt.Key.Key_Hangul_Jamo?10 +QtCore.Qt.Key.Key_Hangul_Romaja?10 +QtCore.Qt.Key.Key_Hangul_Jeonja?10 +QtCore.Qt.Key.Key_Hangul_Banja?10 +QtCore.Qt.Key.Key_Hangul_PreHanja?10 +QtCore.Qt.Key.Key_Hangul_PostHanja?10 +QtCore.Qt.Key.Key_Hangul_Special?10 +QtCore.Qt.Key.Key_Dead_Grave?10 +QtCore.Qt.Key.Key_Dead_Acute?10 +QtCore.Qt.Key.Key_Dead_Circumflex?10 +QtCore.Qt.Key.Key_Dead_Tilde?10 +QtCore.Qt.Key.Key_Dead_Macron?10 +QtCore.Qt.Key.Key_Dead_Breve?10 +QtCore.Qt.Key.Key_Dead_Abovedot?10 +QtCore.Qt.Key.Key_Dead_Diaeresis?10 +QtCore.Qt.Key.Key_Dead_Abovering?10 +QtCore.Qt.Key.Key_Dead_Doubleacute?10 +QtCore.Qt.Key.Key_Dead_Caron?10 +QtCore.Qt.Key.Key_Dead_Cedilla?10 +QtCore.Qt.Key.Key_Dead_Ogonek?10 +QtCore.Qt.Key.Key_Dead_Iota?10 +QtCore.Qt.Key.Key_Dead_Voiced_Sound?10 +QtCore.Qt.Key.Key_Dead_Semivoiced_Sound?10 +QtCore.Qt.Key.Key_Dead_Belowdot?10 +QtCore.Qt.Key.Key_Dead_Hook?10 +QtCore.Qt.Key.Key_Dead_Horn?10 +QtCore.Qt.Key.Key_Back?10 +QtCore.Qt.Key.Key_Forward?10 +QtCore.Qt.Key.Key_Stop?10 +QtCore.Qt.Key.Key_Refresh?10 +QtCore.Qt.Key.Key_VolumeDown?10 +QtCore.Qt.Key.Key_VolumeMute?10 +QtCore.Qt.Key.Key_VolumeUp?10 +QtCore.Qt.Key.Key_BassBoost?10 +QtCore.Qt.Key.Key_BassUp?10 +QtCore.Qt.Key.Key_BassDown?10 +QtCore.Qt.Key.Key_TrebleUp?10 +QtCore.Qt.Key.Key_TrebleDown?10 +QtCore.Qt.Key.Key_MediaPlay?10 +QtCore.Qt.Key.Key_MediaStop?10 +QtCore.Qt.Key.Key_MediaPrevious?10 +QtCore.Qt.Key.Key_MediaNext?10 +QtCore.Qt.Key.Key_MediaRecord?10 +QtCore.Qt.Key.Key_HomePage?10 +QtCore.Qt.Key.Key_Favorites?10 +QtCore.Qt.Key.Key_Search?10 +QtCore.Qt.Key.Key_Standby?10 +QtCore.Qt.Key.Key_OpenUrl?10 +QtCore.Qt.Key.Key_LaunchMail?10 +QtCore.Qt.Key.Key_LaunchMedia?10 +QtCore.Qt.Key.Key_Launch0?10 +QtCore.Qt.Key.Key_Launch1?10 +QtCore.Qt.Key.Key_Launch2?10 +QtCore.Qt.Key.Key_Launch3?10 +QtCore.Qt.Key.Key_Launch4?10 +QtCore.Qt.Key.Key_Launch5?10 +QtCore.Qt.Key.Key_Launch6?10 +QtCore.Qt.Key.Key_Launch7?10 +QtCore.Qt.Key.Key_Launch8?10 +QtCore.Qt.Key.Key_Launch9?10 +QtCore.Qt.Key.Key_LaunchA?10 +QtCore.Qt.Key.Key_LaunchB?10 +QtCore.Qt.Key.Key_LaunchC?10 +QtCore.Qt.Key.Key_LaunchD?10 +QtCore.Qt.Key.Key_LaunchE?10 +QtCore.Qt.Key.Key_LaunchF?10 +QtCore.Qt.Key.Key_MediaLast?10 +QtCore.Qt.Key.Key_Select?10 +QtCore.Qt.Key.Key_Yes?10 +QtCore.Qt.Key.Key_No?10 +QtCore.Qt.Key.Key_Context1?10 +QtCore.Qt.Key.Key_Context2?10 +QtCore.Qt.Key.Key_Context3?10 +QtCore.Qt.Key.Key_Context4?10 +QtCore.Qt.Key.Key_Call?10 +QtCore.Qt.Key.Key_Hangup?10 +QtCore.Qt.Key.Key_Flip?10 +QtCore.Qt.Key.Key_unknown?10 +QtCore.Qt.Key.Key_Execute?10 +QtCore.Qt.Key.Key_Printer?10 +QtCore.Qt.Key.Key_Play?10 +QtCore.Qt.Key.Key_Sleep?10 +QtCore.Qt.Key.Key_Zoom?10 +QtCore.Qt.Key.Key_Cancel?10 +QtCore.Qt.Key.Key_MonBrightnessUp?10 +QtCore.Qt.Key.Key_MonBrightnessDown?10 +QtCore.Qt.Key.Key_KeyboardLightOnOff?10 +QtCore.Qt.Key.Key_KeyboardBrightnessUp?10 +QtCore.Qt.Key.Key_KeyboardBrightnessDown?10 +QtCore.Qt.Key.Key_PowerOff?10 +QtCore.Qt.Key.Key_WakeUp?10 +QtCore.Qt.Key.Key_Eject?10 +QtCore.Qt.Key.Key_ScreenSaver?10 +QtCore.Qt.Key.Key_WWW?10 +QtCore.Qt.Key.Key_Memo?10 +QtCore.Qt.Key.Key_LightBulb?10 +QtCore.Qt.Key.Key_Shop?10 +QtCore.Qt.Key.Key_History?10 +QtCore.Qt.Key.Key_AddFavorite?10 +QtCore.Qt.Key.Key_HotLinks?10 +QtCore.Qt.Key.Key_BrightnessAdjust?10 +QtCore.Qt.Key.Key_Finance?10 +QtCore.Qt.Key.Key_Community?10 +QtCore.Qt.Key.Key_AudioRewind?10 +QtCore.Qt.Key.Key_BackForward?10 +QtCore.Qt.Key.Key_ApplicationLeft?10 +QtCore.Qt.Key.Key_ApplicationRight?10 +QtCore.Qt.Key.Key_Book?10 +QtCore.Qt.Key.Key_CD?10 +QtCore.Qt.Key.Key_Calculator?10 +QtCore.Qt.Key.Key_ToDoList?10 +QtCore.Qt.Key.Key_ClearGrab?10 +QtCore.Qt.Key.Key_Close?10 +QtCore.Qt.Key.Key_Copy?10 +QtCore.Qt.Key.Key_Cut?10 +QtCore.Qt.Key.Key_Display?10 +QtCore.Qt.Key.Key_DOS?10 +QtCore.Qt.Key.Key_Documents?10 +QtCore.Qt.Key.Key_Excel?10 +QtCore.Qt.Key.Key_Explorer?10 +QtCore.Qt.Key.Key_Game?10 +QtCore.Qt.Key.Key_Go?10 +QtCore.Qt.Key.Key_iTouch?10 +QtCore.Qt.Key.Key_LogOff?10 +QtCore.Qt.Key.Key_Market?10 +QtCore.Qt.Key.Key_Meeting?10 +QtCore.Qt.Key.Key_MenuKB?10 +QtCore.Qt.Key.Key_MenuPB?10 +QtCore.Qt.Key.Key_MySites?10 +QtCore.Qt.Key.Key_News?10 +QtCore.Qt.Key.Key_OfficeHome?10 +QtCore.Qt.Key.Key_Option?10 +QtCore.Qt.Key.Key_Paste?10 +QtCore.Qt.Key.Key_Phone?10 +QtCore.Qt.Key.Key_Calendar?10 +QtCore.Qt.Key.Key_Reply?10 +QtCore.Qt.Key.Key_Reload?10 +QtCore.Qt.Key.Key_RotateWindows?10 +QtCore.Qt.Key.Key_RotationPB?10 +QtCore.Qt.Key.Key_RotationKB?10 +QtCore.Qt.Key.Key_Save?10 +QtCore.Qt.Key.Key_Send?10 +QtCore.Qt.Key.Key_Spell?10 +QtCore.Qt.Key.Key_SplitScreen?10 +QtCore.Qt.Key.Key_Support?10 +QtCore.Qt.Key.Key_TaskPane?10 +QtCore.Qt.Key.Key_Terminal?10 +QtCore.Qt.Key.Key_Tools?10 +QtCore.Qt.Key.Key_Travel?10 +QtCore.Qt.Key.Key_Video?10 +QtCore.Qt.Key.Key_Word?10 +QtCore.Qt.Key.Key_Xfer?10 +QtCore.Qt.Key.Key_ZoomIn?10 +QtCore.Qt.Key.Key_ZoomOut?10 +QtCore.Qt.Key.Key_Away?10 +QtCore.Qt.Key.Key_Messenger?10 +QtCore.Qt.Key.Key_WebCam?10 +QtCore.Qt.Key.Key_MailForward?10 +QtCore.Qt.Key.Key_Pictures?10 +QtCore.Qt.Key.Key_Music?10 +QtCore.Qt.Key.Key_Battery?10 +QtCore.Qt.Key.Key_Bluetooth?10 +QtCore.Qt.Key.Key_WLAN?10 +QtCore.Qt.Key.Key_UWB?10 +QtCore.Qt.Key.Key_AudioForward?10 +QtCore.Qt.Key.Key_AudioRepeat?10 +QtCore.Qt.Key.Key_AudioRandomPlay?10 +QtCore.Qt.Key.Key_Subtitle?10 +QtCore.Qt.Key.Key_AudioCycleTrack?10 +QtCore.Qt.Key.Key_Time?10 +QtCore.Qt.Key.Key_Hibernate?10 +QtCore.Qt.Key.Key_View?10 +QtCore.Qt.Key.Key_TopMenu?10 +QtCore.Qt.Key.Key_PowerDown?10 +QtCore.Qt.Key.Key_Suspend?10 +QtCore.Qt.Key.Key_ContrastAdjust?10 +QtCore.Qt.Key.Key_MediaPause?10 +QtCore.Qt.Key.Key_MediaTogglePlayPause?10 +QtCore.Qt.Key.Key_LaunchG?10 +QtCore.Qt.Key.Key_LaunchH?10 +QtCore.Qt.Key.Key_ToggleCallHangup?10 +QtCore.Qt.Key.Key_VoiceDial?10 +QtCore.Qt.Key.Key_LastNumberRedial?10 +QtCore.Qt.Key.Key_Camera?10 +QtCore.Qt.Key.Key_CameraFocus?10 +QtCore.Qt.Key.Key_TouchpadToggle?10 +QtCore.Qt.Key.Key_TouchpadOn?10 +QtCore.Qt.Key.Key_TouchpadOff?10 +QtCore.Qt.Key.Key_MicMute?10 +QtCore.Qt.Key.Key_Red?10 +QtCore.Qt.Key.Key_Green?10 +QtCore.Qt.Key.Key_Yellow?10 +QtCore.Qt.Key.Key_Blue?10 +QtCore.Qt.Key.Key_ChannelUp?10 +QtCore.Qt.Key.Key_ChannelDown?10 +QtCore.Qt.Key.Key_Guide?10 +QtCore.Qt.Key.Key_Info?10 +QtCore.Qt.Key.Key_Settings?10 +QtCore.Qt.Key.Key_Exit?10 +QtCore.Qt.Key.Key_MicVolumeUp?10 +QtCore.Qt.Key.Key_MicVolumeDown?10 +QtCore.Qt.Key.Key_New?10 +QtCore.Qt.Key.Key_Open?10 +QtCore.Qt.Key.Key_Find?10 +QtCore.Qt.Key.Key_Undo?10 +QtCore.Qt.Key.Key_Redo?10 +QtCore.Qt.Key.Key_Dead_Stroke?10 +QtCore.Qt.Key.Key_Dead_Abovecomma?10 +QtCore.Qt.Key.Key_Dead_Abovereversedcomma?10 +QtCore.Qt.Key.Key_Dead_Doublegrave?10 +QtCore.Qt.Key.Key_Dead_Belowring?10 +QtCore.Qt.Key.Key_Dead_Belowmacron?10 +QtCore.Qt.Key.Key_Dead_Belowcircumflex?10 +QtCore.Qt.Key.Key_Dead_Belowtilde?10 +QtCore.Qt.Key.Key_Dead_Belowbreve?10 +QtCore.Qt.Key.Key_Dead_Belowdiaeresis?10 +QtCore.Qt.Key.Key_Dead_Invertedbreve?10 +QtCore.Qt.Key.Key_Dead_Belowcomma?10 +QtCore.Qt.Key.Key_Dead_Currency?10 +QtCore.Qt.Key.Key_Dead_a?10 +QtCore.Qt.Key.Key_Dead_A?10 +QtCore.Qt.Key.Key_Dead_e?10 +QtCore.Qt.Key.Key_Dead_E?10 +QtCore.Qt.Key.Key_Dead_i?10 +QtCore.Qt.Key.Key_Dead_I?10 +QtCore.Qt.Key.Key_Dead_o?10 +QtCore.Qt.Key.Key_Dead_O?10 +QtCore.Qt.Key.Key_Dead_u?10 +QtCore.Qt.Key.Key_Dead_U?10 +QtCore.Qt.Key.Key_Dead_Small_Schwa?10 +QtCore.Qt.Key.Key_Dead_Capital_Schwa?10 +QtCore.Qt.Key.Key_Dead_Greek?10 +QtCore.Qt.Key.Key_Dead_Lowline?10 +QtCore.Qt.Key.Key_Dead_Aboveverticalline?10 +QtCore.Qt.Key.Key_Dead_Belowverticalline?10 +QtCore.Qt.Key.Key_Dead_Longsolidusoverlay?10 +QtCore.Qt.BGMode?10 +QtCore.Qt.BGMode.TransparentMode?10 +QtCore.Qt.BGMode.OpaqueMode?10 +QtCore.Qt.ImageConversionFlag?10 +QtCore.Qt.ImageConversionFlag.AutoColor?10 +QtCore.Qt.ImageConversionFlag.ColorOnly?10 +QtCore.Qt.ImageConversionFlag.MonoOnly?10 +QtCore.Qt.ImageConversionFlag.ThresholdAlphaDither?10 +QtCore.Qt.ImageConversionFlag.OrderedAlphaDither?10 +QtCore.Qt.ImageConversionFlag.DiffuseAlphaDither?10 +QtCore.Qt.ImageConversionFlag.DiffuseDither?10 +QtCore.Qt.ImageConversionFlag.OrderedDither?10 +QtCore.Qt.ImageConversionFlag.ThresholdDither?10 +QtCore.Qt.ImageConversionFlag.AutoDither?10 +QtCore.Qt.ImageConversionFlag.PreferDither?10 +QtCore.Qt.ImageConversionFlag.AvoidDither?10 +QtCore.Qt.ImageConversionFlag.NoOpaqueDetection?10 +QtCore.Qt.ImageConversionFlag.NoFormatConversion?10 +QtCore.Qt.WidgetAttribute?10 +QtCore.Qt.WidgetAttribute.WA_Disabled?10 +QtCore.Qt.WidgetAttribute.WA_UnderMouse?10 +QtCore.Qt.WidgetAttribute.WA_MouseTracking?10 +QtCore.Qt.WidgetAttribute.WA_OpaquePaintEvent?10 +QtCore.Qt.WidgetAttribute.WA_StaticContents?10 +QtCore.Qt.WidgetAttribute.WA_LaidOut?10 +QtCore.Qt.WidgetAttribute.WA_PaintOnScreen?10 +QtCore.Qt.WidgetAttribute.WA_NoSystemBackground?10 +QtCore.Qt.WidgetAttribute.WA_UpdatesDisabled?10 +QtCore.Qt.WidgetAttribute.WA_Mapped?10 +QtCore.Qt.WidgetAttribute.WA_MacNoClickThrough?10 +QtCore.Qt.WidgetAttribute.WA_InputMethodEnabled?10 +QtCore.Qt.WidgetAttribute.WA_WState_Visible?10 +QtCore.Qt.WidgetAttribute.WA_WState_Hidden?10 +QtCore.Qt.WidgetAttribute.WA_ForceDisabled?10 +QtCore.Qt.WidgetAttribute.WA_KeyCompression?10 +QtCore.Qt.WidgetAttribute.WA_PendingMoveEvent?10 +QtCore.Qt.WidgetAttribute.WA_PendingResizeEvent?10 +QtCore.Qt.WidgetAttribute.WA_SetPalette?10 +QtCore.Qt.WidgetAttribute.WA_SetFont?10 +QtCore.Qt.WidgetAttribute.WA_SetCursor?10 +QtCore.Qt.WidgetAttribute.WA_NoChildEventsFromChildren?10 +QtCore.Qt.WidgetAttribute.WA_WindowModified?10 +QtCore.Qt.WidgetAttribute.WA_Resized?10 +QtCore.Qt.WidgetAttribute.WA_Moved?10 +QtCore.Qt.WidgetAttribute.WA_PendingUpdate?10 +QtCore.Qt.WidgetAttribute.WA_InvalidSize?10 +QtCore.Qt.WidgetAttribute.WA_MacMetalStyle?10 +QtCore.Qt.WidgetAttribute.WA_CustomWhatsThis?10 +QtCore.Qt.WidgetAttribute.WA_LayoutOnEntireRect?10 +QtCore.Qt.WidgetAttribute.WA_OutsideWSRange?10 +QtCore.Qt.WidgetAttribute.WA_GrabbedShortcut?10 +QtCore.Qt.WidgetAttribute.WA_TransparentForMouseEvents?10 +QtCore.Qt.WidgetAttribute.WA_PaintUnclipped?10 +QtCore.Qt.WidgetAttribute.WA_SetWindowIcon?10 +QtCore.Qt.WidgetAttribute.WA_NoMouseReplay?10 +QtCore.Qt.WidgetAttribute.WA_DeleteOnClose?10 +QtCore.Qt.WidgetAttribute.WA_RightToLeft?10 +QtCore.Qt.WidgetAttribute.WA_SetLayoutDirection?10 +QtCore.Qt.WidgetAttribute.WA_NoChildEventsForParent?10 +QtCore.Qt.WidgetAttribute.WA_ForceUpdatesDisabled?10 +QtCore.Qt.WidgetAttribute.WA_WState_Created?10 +QtCore.Qt.WidgetAttribute.WA_WState_CompressKeys?10 +QtCore.Qt.WidgetAttribute.WA_WState_InPaintEvent?10 +QtCore.Qt.WidgetAttribute.WA_WState_Reparented?10 +QtCore.Qt.WidgetAttribute.WA_WState_ConfigPending?10 +QtCore.Qt.WidgetAttribute.WA_WState_Polished?10 +QtCore.Qt.WidgetAttribute.WA_WState_OwnSizePolicy?10 +QtCore.Qt.WidgetAttribute.WA_WState_ExplicitShowHide?10 +QtCore.Qt.WidgetAttribute.WA_MouseNoMask?10 +QtCore.Qt.WidgetAttribute.WA_GroupLeader?10 +QtCore.Qt.WidgetAttribute.WA_NoMousePropagation?10 +QtCore.Qt.WidgetAttribute.WA_Hover?10 +QtCore.Qt.WidgetAttribute.WA_InputMethodTransparent?10 +QtCore.Qt.WidgetAttribute.WA_QuitOnClose?10 +QtCore.Qt.WidgetAttribute.WA_KeyboardFocusChange?10 +QtCore.Qt.WidgetAttribute.WA_AcceptDrops?10 +QtCore.Qt.WidgetAttribute.WA_WindowPropagation?10 +QtCore.Qt.WidgetAttribute.WA_NoX11EventCompression?10 +QtCore.Qt.WidgetAttribute.WA_TintedBackground?10 +QtCore.Qt.WidgetAttribute.WA_X11OpenGLOverlay?10 +QtCore.Qt.WidgetAttribute.WA_AttributeCount?10 +QtCore.Qt.WidgetAttribute.WA_AlwaysShowToolTips?10 +QtCore.Qt.WidgetAttribute.WA_MacOpaqueSizeGrip?10 +QtCore.Qt.WidgetAttribute.WA_SetStyle?10 +QtCore.Qt.WidgetAttribute.WA_MacBrushedMetal?10 +QtCore.Qt.WidgetAttribute.WA_SetLocale?10 +QtCore.Qt.WidgetAttribute.WA_MacShowFocusRect?10 +QtCore.Qt.WidgetAttribute.WA_MacNormalSize?10 +QtCore.Qt.WidgetAttribute.WA_MacSmallSize?10 +QtCore.Qt.WidgetAttribute.WA_MacMiniSize?10 +QtCore.Qt.WidgetAttribute.WA_LayoutUsesWidgetRect?10 +QtCore.Qt.WidgetAttribute.WA_StyledBackground?10 +QtCore.Qt.WidgetAttribute.WA_MSWindowsUseDirect3D?10 +QtCore.Qt.WidgetAttribute.WA_MacAlwaysShowToolWindow?10 +QtCore.Qt.WidgetAttribute.WA_StyleSheet?10 +QtCore.Qt.WidgetAttribute.WA_ShowWithoutActivating?10 +QtCore.Qt.WidgetAttribute.WA_NativeWindow?10 +QtCore.Qt.WidgetAttribute.WA_DontCreateNativeAncestors?10 +QtCore.Qt.WidgetAttribute.WA_MacVariableSize?10 +QtCore.Qt.WidgetAttribute.WA_DontShowOnScreen?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDesktop?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDock?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeToolBar?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeMenu?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeUtility?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeSplash?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDialog?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDropDownMenu?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypePopupMenu?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeToolTip?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeNotification?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeCombo?10 +QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDND?10 +QtCore.Qt.WidgetAttribute.WA_MacFrameworkScaled?10 +QtCore.Qt.WidgetAttribute.WA_TranslucentBackground?10 +QtCore.Qt.WidgetAttribute.WA_AcceptTouchEvents?10 +QtCore.Qt.WidgetAttribute.WA_TouchPadAcceptSingleTouchEvents?10 +QtCore.Qt.WidgetAttribute.WA_X11DoNotAcceptFocus?10 +QtCore.Qt.WidgetAttribute.WA_MacNoShadow?10 +QtCore.Qt.WidgetAttribute.WA_AlwaysStackOnTop?10 +QtCore.Qt.WidgetAttribute.WA_TabletTracking?10 +QtCore.Qt.WidgetAttribute.WA_ContentsMarginsRespectsSafeArea?10 +QtCore.Qt.WidgetAttribute.WA_StyleSheetTarget?10 +QtCore.Qt.WindowState?10 +QtCore.Qt.WindowState.WindowNoState?10 +QtCore.Qt.WindowState.WindowMinimized?10 +QtCore.Qt.WindowState.WindowMaximized?10 +QtCore.Qt.WindowState.WindowFullScreen?10 +QtCore.Qt.WindowState.WindowActive?10 +QtCore.Qt.WindowType?10 +QtCore.Qt.WindowType.Widget?10 +QtCore.Qt.WindowType.Window?10 +QtCore.Qt.WindowType.Dialog?10 +QtCore.Qt.WindowType.Sheet?10 +QtCore.Qt.WindowType.Drawer?10 +QtCore.Qt.WindowType.Popup?10 +QtCore.Qt.WindowType.Tool?10 +QtCore.Qt.WindowType.ToolTip?10 +QtCore.Qt.WindowType.SplashScreen?10 +QtCore.Qt.WindowType.Desktop?10 +QtCore.Qt.WindowType.SubWindow?10 +QtCore.Qt.WindowType.WindowType_Mask?10 +QtCore.Qt.WindowType.MSWindowsFixedSizeDialogHint?10 +QtCore.Qt.WindowType.MSWindowsOwnDC?10 +QtCore.Qt.WindowType.X11BypassWindowManagerHint?10 +QtCore.Qt.WindowType.FramelessWindowHint?10 +QtCore.Qt.WindowType.CustomizeWindowHint?10 +QtCore.Qt.WindowType.WindowTitleHint?10 +QtCore.Qt.WindowType.WindowSystemMenuHint?10 +QtCore.Qt.WindowType.WindowMinimizeButtonHint?10 +QtCore.Qt.WindowType.WindowMaximizeButtonHint?10 +QtCore.Qt.WindowType.WindowMinMaxButtonsHint?10 +QtCore.Qt.WindowType.WindowContextHelpButtonHint?10 +QtCore.Qt.WindowType.WindowShadeButtonHint?10 +QtCore.Qt.WindowType.WindowStaysOnTopHint?10 +QtCore.Qt.WindowType.WindowStaysOnBottomHint?10 +QtCore.Qt.WindowType.WindowCloseButtonHint?10 +QtCore.Qt.WindowType.MacWindowToolBarButtonHint?10 +QtCore.Qt.WindowType.BypassGraphicsProxyWidget?10 +QtCore.Qt.WindowType.WindowTransparentForInput?10 +QtCore.Qt.WindowType.WindowOverridesSystemGestures?10 +QtCore.Qt.WindowType.WindowDoesNotAcceptFocus?10 +QtCore.Qt.WindowType.NoDropShadowWindowHint?10 +QtCore.Qt.WindowType.WindowFullscreenButtonHint?10 +QtCore.Qt.WindowType.ForeignWindow?10 +QtCore.Qt.WindowType.BypassWindowManagerHint?10 +QtCore.Qt.WindowType.CoverWindow?10 +QtCore.Qt.WindowType.MaximizeUsingFullscreenGeometryHint?10 +QtCore.Qt.TextElideMode?10 +QtCore.Qt.TextElideMode.ElideLeft?10 +QtCore.Qt.TextElideMode.ElideRight?10 +QtCore.Qt.TextElideMode.ElideMiddle?10 +QtCore.Qt.TextElideMode.ElideNone?10 +QtCore.Qt.TextFlag?10 +QtCore.Qt.TextFlag.TextSingleLine?10 +QtCore.Qt.TextFlag.TextDontClip?10 +QtCore.Qt.TextFlag.TextExpandTabs?10 +QtCore.Qt.TextFlag.TextShowMnemonic?10 +QtCore.Qt.TextFlag.TextWordWrap?10 +QtCore.Qt.TextFlag.TextWrapAnywhere?10 +QtCore.Qt.TextFlag.TextDontPrint?10 +QtCore.Qt.TextFlag.TextIncludeTrailingSpaces?10 +QtCore.Qt.TextFlag.TextHideMnemonic?10 +QtCore.Qt.TextFlag.TextJustificationForced?10 +QtCore.Qt.AlignmentFlag?10 +QtCore.Qt.AlignmentFlag.AlignLeft?10 +QtCore.Qt.AlignmentFlag.AlignLeading?10 +QtCore.Qt.AlignmentFlag.AlignRight?10 +QtCore.Qt.AlignmentFlag.AlignTrailing?10 +QtCore.Qt.AlignmentFlag.AlignHCenter?10 +QtCore.Qt.AlignmentFlag.AlignJustify?10 +QtCore.Qt.AlignmentFlag.AlignAbsolute?10 +QtCore.Qt.AlignmentFlag.AlignHorizontal_Mask?10 +QtCore.Qt.AlignmentFlag.AlignTop?10 +QtCore.Qt.AlignmentFlag.AlignBottom?10 +QtCore.Qt.AlignmentFlag.AlignVCenter?10 +QtCore.Qt.AlignmentFlag.AlignVertical_Mask?10 +QtCore.Qt.AlignmentFlag.AlignCenter?10 +QtCore.Qt.AlignmentFlag.AlignBaseline?10 +QtCore.Qt.SortOrder?10 +QtCore.Qt.SortOrder.AscendingOrder?10 +QtCore.Qt.SortOrder.DescendingOrder?10 +QtCore.Qt.FocusPolicy?10 +QtCore.Qt.FocusPolicy.NoFocus?10 +QtCore.Qt.FocusPolicy.TabFocus?10 +QtCore.Qt.FocusPolicy.ClickFocus?10 +QtCore.Qt.FocusPolicy.StrongFocus?10 +QtCore.Qt.FocusPolicy.WheelFocus?10 +QtCore.Qt.Orientation?10 +QtCore.Qt.Orientation.Horizontal?10 +QtCore.Qt.Orientation.Vertical?10 +QtCore.Qt.MouseButton?10 +QtCore.Qt.MouseButton.NoButton?10 +QtCore.Qt.MouseButton.AllButtons?10 +QtCore.Qt.MouseButton.LeftButton?10 +QtCore.Qt.MouseButton.RightButton?10 +QtCore.Qt.MouseButton.MidButton?10 +QtCore.Qt.MouseButton.MiddleButton?10 +QtCore.Qt.MouseButton.XButton1?10 +QtCore.Qt.MouseButton.XButton2?10 +QtCore.Qt.MouseButton.BackButton?10 +QtCore.Qt.MouseButton.ExtraButton1?10 +QtCore.Qt.MouseButton.ForwardButton?10 +QtCore.Qt.MouseButton.ExtraButton2?10 +QtCore.Qt.MouseButton.TaskButton?10 +QtCore.Qt.MouseButton.ExtraButton3?10 +QtCore.Qt.MouseButton.ExtraButton4?10 +QtCore.Qt.MouseButton.ExtraButton5?10 +QtCore.Qt.MouseButton.ExtraButton6?10 +QtCore.Qt.MouseButton.ExtraButton7?10 +QtCore.Qt.MouseButton.ExtraButton8?10 +QtCore.Qt.MouseButton.ExtraButton9?10 +QtCore.Qt.MouseButton.ExtraButton10?10 +QtCore.Qt.MouseButton.ExtraButton11?10 +QtCore.Qt.MouseButton.ExtraButton12?10 +QtCore.Qt.MouseButton.ExtraButton13?10 +QtCore.Qt.MouseButton.ExtraButton14?10 +QtCore.Qt.MouseButton.ExtraButton15?10 +QtCore.Qt.MouseButton.ExtraButton16?10 +QtCore.Qt.MouseButton.ExtraButton17?10 +QtCore.Qt.MouseButton.ExtraButton18?10 +QtCore.Qt.MouseButton.ExtraButton19?10 +QtCore.Qt.MouseButton.ExtraButton20?10 +QtCore.Qt.MouseButton.ExtraButton21?10 +QtCore.Qt.MouseButton.ExtraButton22?10 +QtCore.Qt.MouseButton.ExtraButton23?10 +QtCore.Qt.MouseButton.ExtraButton24?10 +QtCore.Qt.Modifier?10 +QtCore.Qt.Modifier.META?10 +QtCore.Qt.Modifier.SHIFT?10 +QtCore.Qt.Modifier.CTRL?10 +QtCore.Qt.Modifier.ALT?10 +QtCore.Qt.Modifier.MODIFIER_MASK?10 +QtCore.Qt.Modifier.UNICODE_ACCEL?10 +QtCore.Qt.KeyboardModifier?10 +QtCore.Qt.KeyboardModifier.NoModifier?10 +QtCore.Qt.KeyboardModifier.ShiftModifier?10 +QtCore.Qt.KeyboardModifier.ControlModifier?10 +QtCore.Qt.KeyboardModifier.AltModifier?10 +QtCore.Qt.KeyboardModifier.MetaModifier?10 +QtCore.Qt.KeyboardModifier.KeypadModifier?10 +QtCore.Qt.KeyboardModifier.GroupSwitchModifier?10 +QtCore.Qt.KeyboardModifier.KeyboardModifierMask?10 +QtCore.Qt.GlobalColor?10 +QtCore.Qt.GlobalColor.color0?10 +QtCore.Qt.GlobalColor.color1?10 +QtCore.Qt.GlobalColor.black?10 +QtCore.Qt.GlobalColor.white?10 +QtCore.Qt.GlobalColor.darkGray?10 +QtCore.Qt.GlobalColor.gray?10 +QtCore.Qt.GlobalColor.lightGray?10 +QtCore.Qt.GlobalColor.red?10 +QtCore.Qt.GlobalColor.green?10 +QtCore.Qt.GlobalColor.blue?10 +QtCore.Qt.GlobalColor.cyan?10 +QtCore.Qt.GlobalColor.magenta?10 +QtCore.Qt.GlobalColor.yellow?10 +QtCore.Qt.GlobalColor.darkRed?10 +QtCore.Qt.GlobalColor.darkGreen?10 +QtCore.Qt.GlobalColor.darkBlue?10 +QtCore.Qt.GlobalColor.darkCyan?10 +QtCore.Qt.GlobalColor.darkMagenta?10 +QtCore.Qt.GlobalColor.darkYellow?10 +QtCore.Qt.GlobalColor.transparent?10 +QtCore.Qt.KeyboardModifiers?1() +QtCore.Qt.KeyboardModifiers.__init__?1(self) +QtCore.Qt.KeyboardModifiers?1(int) +QtCore.Qt.KeyboardModifiers.__init__?1(self, int) +QtCore.Qt.KeyboardModifiers?1(Qt.KeyboardModifiers) +QtCore.Qt.KeyboardModifiers.__init__?1(self, Qt.KeyboardModifiers) +QtCore.Qt.MouseButtons?1() +QtCore.Qt.MouseButtons.__init__?1(self) +QtCore.Qt.MouseButtons?1(int) +QtCore.Qt.MouseButtons.__init__?1(self, int) +QtCore.Qt.MouseButtons?1(Qt.MouseButtons) +QtCore.Qt.MouseButtons.__init__?1(self, Qt.MouseButtons) +QtCore.Qt.Orientations?1() +QtCore.Qt.Orientations.__init__?1(self) +QtCore.Qt.Orientations?1(int) +QtCore.Qt.Orientations.__init__?1(self, int) +QtCore.Qt.Orientations?1(Qt.Orientations) +QtCore.Qt.Orientations.__init__?1(self, Qt.Orientations) +QtCore.Qt.Alignment?1() +QtCore.Qt.Alignment.__init__?1(self) +QtCore.Qt.Alignment?1(int) +QtCore.Qt.Alignment.__init__?1(self, int) +QtCore.Qt.Alignment?1(Qt.Alignment) +QtCore.Qt.Alignment.__init__?1(self, Qt.Alignment) +QtCore.Qt.WindowFlags?1() +QtCore.Qt.WindowFlags.__init__?1(self) +QtCore.Qt.WindowFlags?1(int) +QtCore.Qt.WindowFlags.__init__?1(self, int) +QtCore.Qt.WindowFlags?1(Qt.WindowFlags) +QtCore.Qt.WindowFlags.__init__?1(self, Qt.WindowFlags) +QtCore.Qt.WindowStates?1() +QtCore.Qt.WindowStates.__init__?1(self) +QtCore.Qt.WindowStates?1(int) +QtCore.Qt.WindowStates.__init__?1(self, int) +QtCore.Qt.WindowStates?1(Qt.WindowStates) +QtCore.Qt.WindowStates.__init__?1(self, Qt.WindowStates) +QtCore.Qt.ImageConversionFlags?1() +QtCore.Qt.ImageConversionFlags.__init__?1(self) +QtCore.Qt.ImageConversionFlags?1(int) +QtCore.Qt.ImageConversionFlags.__init__?1(self, int) +QtCore.Qt.ImageConversionFlags?1(Qt.ImageConversionFlags) +QtCore.Qt.ImageConversionFlags.__init__?1(self, Qt.ImageConversionFlags) +QtCore.Qt.DockWidgetAreas?1() +QtCore.Qt.DockWidgetAreas.__init__?1(self) +QtCore.Qt.DockWidgetAreas?1(int) +QtCore.Qt.DockWidgetAreas.__init__?1(self, int) +QtCore.Qt.DockWidgetAreas?1(Qt.DockWidgetAreas) +QtCore.Qt.DockWidgetAreas.__init__?1(self, Qt.DockWidgetAreas) +QtCore.Qt.ToolBarAreas?1() +QtCore.Qt.ToolBarAreas.__init__?1(self) +QtCore.Qt.ToolBarAreas?1(int) +QtCore.Qt.ToolBarAreas.__init__?1(self, int) +QtCore.Qt.ToolBarAreas?1(Qt.ToolBarAreas) +QtCore.Qt.ToolBarAreas.__init__?1(self, Qt.ToolBarAreas) +QtCore.Qt.InputMethodQueries?1() +QtCore.Qt.InputMethodQueries.__init__?1(self) +QtCore.Qt.InputMethodQueries?1(int) +QtCore.Qt.InputMethodQueries.__init__?1(self, int) +QtCore.Qt.InputMethodQueries?1(Qt.InputMethodQueries) +QtCore.Qt.InputMethodQueries.__init__?1(self, Qt.InputMethodQueries) +QtCore.Qt.DropActions?1() +QtCore.Qt.DropActions.__init__?1(self) +QtCore.Qt.DropActions?1(int) +QtCore.Qt.DropActions.__init__?1(self, int) +QtCore.Qt.DropActions?1(Qt.DropActions) +QtCore.Qt.DropActions.__init__?1(self, Qt.DropActions) +QtCore.Qt.ItemFlags?1() +QtCore.Qt.ItemFlags.__init__?1(self) +QtCore.Qt.ItemFlags?1(int) +QtCore.Qt.ItemFlags.__init__?1(self, int) +QtCore.Qt.ItemFlags?1(Qt.ItemFlags) +QtCore.Qt.ItemFlags.__init__?1(self, Qt.ItemFlags) +QtCore.Qt.MatchFlags?1() +QtCore.Qt.MatchFlags.__init__?1(self) +QtCore.Qt.MatchFlags?1(int) +QtCore.Qt.MatchFlags.__init__?1(self, int) +QtCore.Qt.MatchFlags?1(Qt.MatchFlags) +QtCore.Qt.MatchFlags.__init__?1(self, Qt.MatchFlags) +QtCore.Qt.TextInteractionFlags?1() +QtCore.Qt.TextInteractionFlags.__init__?1(self) +QtCore.Qt.TextInteractionFlags?1(int) +QtCore.Qt.TextInteractionFlags.__init__?1(self, int) +QtCore.Qt.TextInteractionFlags?1(Qt.TextInteractionFlags) +QtCore.Qt.TextInteractionFlags.__init__?1(self, Qt.TextInteractionFlags) +QtCore.Qt.InputMethodHints?1() +QtCore.Qt.InputMethodHints.__init__?1(self) +QtCore.Qt.InputMethodHints?1(int) +QtCore.Qt.InputMethodHints.__init__?1(self, int) +QtCore.Qt.InputMethodHints?1(Qt.InputMethodHints) +QtCore.Qt.InputMethodHints.__init__?1(self, Qt.InputMethodHints) +QtCore.Qt.TouchPointStates?1() +QtCore.Qt.TouchPointStates.__init__?1(self) +QtCore.Qt.TouchPointStates?1(int) +QtCore.Qt.TouchPointStates.__init__?1(self, int) +QtCore.Qt.TouchPointStates?1(Qt.TouchPointStates) +QtCore.Qt.TouchPointStates.__init__?1(self, Qt.TouchPointStates) +QtCore.Qt.GestureFlags?1() +QtCore.Qt.GestureFlags.__init__?1(self) +QtCore.Qt.GestureFlags?1(int) +QtCore.Qt.GestureFlags.__init__?1(self, int) +QtCore.Qt.GestureFlags?1(Qt.GestureFlags) +QtCore.Qt.GestureFlags.__init__?1(self, Qt.GestureFlags) +QtCore.Qt.ScreenOrientations?1() +QtCore.Qt.ScreenOrientations.__init__?1(self) +QtCore.Qt.ScreenOrientations?1(int) +QtCore.Qt.ScreenOrientations.__init__?1(self, int) +QtCore.Qt.ScreenOrientations?1(Qt.ScreenOrientations) +QtCore.Qt.ScreenOrientations.__init__?1(self, Qt.ScreenOrientations) +QtCore.Qt.FindChildOptions?1() +QtCore.Qt.FindChildOptions.__init__?1(self) +QtCore.Qt.FindChildOptions?1(int) +QtCore.Qt.FindChildOptions.__init__?1(self, int) +QtCore.Qt.FindChildOptions?1(Qt.FindChildOptions) +QtCore.Qt.FindChildOptions.__init__?1(self, Qt.FindChildOptions) +QtCore.Qt.ApplicationStates?1() +QtCore.Qt.ApplicationStates.__init__?1(self) +QtCore.Qt.ApplicationStates?1(int) +QtCore.Qt.ApplicationStates.__init__?1(self, int) +QtCore.Qt.ApplicationStates?1(Qt.ApplicationStates) +QtCore.Qt.ApplicationStates.__init__?1(self, Qt.ApplicationStates) +QtCore.Qt.Edges?1() +QtCore.Qt.Edges.__init__?1(self) +QtCore.Qt.Edges?1(int) +QtCore.Qt.Edges.__init__?1(self, int) +QtCore.Qt.Edges?1(Qt.Edges) +QtCore.Qt.Edges.__init__?1(self, Qt.Edges) +QtCore.Qt.MouseEventFlags?1() +QtCore.Qt.MouseEventFlags.__init__?1(self) +QtCore.Qt.MouseEventFlags?1(int) +QtCore.Qt.MouseEventFlags.__init__?1(self, int) +QtCore.Qt.MouseEventFlags?1(Qt.MouseEventFlags) +QtCore.Qt.MouseEventFlags.__init__?1(self, Qt.MouseEventFlags) +QtCore.QObject.staticMetaObject?7 +QtCore.QObject?1(QObject parent=None) +QtCore.QObject.__init__?1(self, QObject parent=None) +QtCore.QObject.metaObject?4() -> QMetaObject +QtCore.QObject.pyqtConfigure?4(Any) +QtCore.QObject.__getattr__?4(str) -> Any +QtCore.QObject.event?4(QEvent) -> bool +QtCore.QObject.eventFilter?4(QObject, QEvent) -> bool +QtCore.QObject.tr?4(str, str disambiguation=None, int n=-1) -> QString +QtCore.QObject.findChild?4(type, QString name='', Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> Any +QtCore.QObject.findChild?4(Tuple, QString name='', Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> Any +QtCore.QObject.findChildren?4(type, QString name='', Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> List +QtCore.QObject.findChildren?4(Tuple, QString name='', Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> List +QtCore.QObject.findChildren?4(type, QRegExp, Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> List +QtCore.QObject.findChildren?4(Tuple, QRegExp, Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> List +QtCore.QObject.findChildren?4(type, QRegularExpression, Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> List +QtCore.QObject.findChildren?4(Tuple, QRegularExpression, Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> List +QtCore.QObject.objectName?4() -> QString +QtCore.QObject.setObjectName?4(QString) +QtCore.QObject.isWidgetType?4() -> bool +QtCore.QObject.isWindowType?4() -> bool +QtCore.QObject.signalsBlocked?4() -> bool +QtCore.QObject.blockSignals?4(bool) -> bool +QtCore.QObject.thread?4() -> QThread +QtCore.QObject.moveToThread?4(QThread) +QtCore.QObject.startTimer?4(int, Qt.TimerType timerType=Qt.CoarseTimer) -> int +QtCore.QObject.killTimer?4(int) +QtCore.QObject.children?4() -> unknown-type +QtCore.QObject.setParent?4(QObject) +QtCore.QObject.installEventFilter?4(QObject) +QtCore.QObject.removeEventFilter?4(QObject) +QtCore.QObject.dumpObjectInfo?4() +QtCore.QObject.dumpObjectTree?4() +QtCore.QObject.dynamicPropertyNames?4() -> unknown-type +QtCore.QObject.setProperty?4(str, QVariant) -> bool +QtCore.QObject.property?4(str) -> QVariant +QtCore.QObject.destroyed?4(QObject object=None) +QtCore.QObject.objectNameChanged?4(QString) +QtCore.QObject.parent?4() -> QObject +QtCore.QObject.inherits?4(str) -> bool +QtCore.QObject.deleteLater?4() +QtCore.QObject.sender?4() -> QObject +QtCore.QObject.receivers?4(Any) -> int +QtCore.QObject.timerEvent?4(QTimerEvent) +QtCore.QObject.childEvent?4(QChildEvent) +QtCore.QObject.customEvent?4(QEvent) +QtCore.QObject.connectNotify?4(QMetaMethod) +QtCore.QObject.disconnectNotify?4(QMetaMethod) +QtCore.QObject.senderSignalIndex?4() -> int +QtCore.QObject.isSignalConnected?4(QMetaMethod) -> bool +QtCore.QObject.disconnect?4(QMetaObject.Connection) -> bool +QtCore.QObject.disconnect?4() -> Any +QtCore.QAbstractAnimation.DeletionPolicy?10 +QtCore.QAbstractAnimation.DeletionPolicy.KeepWhenStopped?10 +QtCore.QAbstractAnimation.DeletionPolicy.DeleteWhenStopped?10 +QtCore.QAbstractAnimation.State?10 +QtCore.QAbstractAnimation.State.Stopped?10 +QtCore.QAbstractAnimation.State.Paused?10 +QtCore.QAbstractAnimation.State.Running?10 +QtCore.QAbstractAnimation.Direction?10 +QtCore.QAbstractAnimation.Direction.Forward?10 +QtCore.QAbstractAnimation.Direction.Backward?10 +QtCore.QAbstractAnimation?1(QObject parent=None) +QtCore.QAbstractAnimation.__init__?1(self, QObject parent=None) +QtCore.QAbstractAnimation.state?4() -> QAbstractAnimation.State +QtCore.QAbstractAnimation.group?4() -> QAnimationGroup +QtCore.QAbstractAnimation.direction?4() -> QAbstractAnimation.Direction +QtCore.QAbstractAnimation.setDirection?4(QAbstractAnimation.Direction) +QtCore.QAbstractAnimation.currentTime?4() -> int +QtCore.QAbstractAnimation.currentLoopTime?4() -> int +QtCore.QAbstractAnimation.loopCount?4() -> int +QtCore.QAbstractAnimation.setLoopCount?4(int) +QtCore.QAbstractAnimation.currentLoop?4() -> int +QtCore.QAbstractAnimation.duration?4() -> int +QtCore.QAbstractAnimation.totalDuration?4() -> int +QtCore.QAbstractAnimation.finished?4() +QtCore.QAbstractAnimation.stateChanged?4(QAbstractAnimation.State, QAbstractAnimation.State) +QtCore.QAbstractAnimation.currentLoopChanged?4(int) +QtCore.QAbstractAnimation.directionChanged?4(QAbstractAnimation.Direction) +QtCore.QAbstractAnimation.start?4(QAbstractAnimation.DeletionPolicy policy=QAbstractAnimation.KeepWhenStopped) +QtCore.QAbstractAnimation.pause?4() +QtCore.QAbstractAnimation.resume?4() +QtCore.QAbstractAnimation.setPaused?4(bool) +QtCore.QAbstractAnimation.stop?4() +QtCore.QAbstractAnimation.setCurrentTime?4(int) +QtCore.QAbstractAnimation.event?4(QEvent) -> bool +QtCore.QAbstractAnimation.updateCurrentTime?4(int) +QtCore.QAbstractAnimation.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) +QtCore.QAbstractAnimation.updateDirection?4(QAbstractAnimation.Direction) +QtCore.QAbstractEventDispatcher?1(QObject parent=None) +QtCore.QAbstractEventDispatcher.__init__?1(self, QObject parent=None) +QtCore.QAbstractEventDispatcher.instance?4(QThread thread=None) -> QAbstractEventDispatcher +QtCore.QAbstractEventDispatcher.processEvents?4(QEventLoop.ProcessEventsFlags) -> bool +QtCore.QAbstractEventDispatcher.hasPendingEvents?4() -> bool +QtCore.QAbstractEventDispatcher.registerSocketNotifier?4(QSocketNotifier) +QtCore.QAbstractEventDispatcher.unregisterSocketNotifier?4(QSocketNotifier) +QtCore.QAbstractEventDispatcher.registerTimer?4(int, Qt.TimerType, QObject) -> int +QtCore.QAbstractEventDispatcher.registerTimer?4(int, int, Qt.TimerType, QObject) +QtCore.QAbstractEventDispatcher.unregisterTimer?4(int) -> bool +QtCore.QAbstractEventDispatcher.unregisterTimers?4(QObject) -> bool +QtCore.QAbstractEventDispatcher.registeredTimers?4(QObject) -> unknown-type +QtCore.QAbstractEventDispatcher.wakeUp?4() +QtCore.QAbstractEventDispatcher.interrupt?4() +QtCore.QAbstractEventDispatcher.flush?4() +QtCore.QAbstractEventDispatcher.startingUp?4() +QtCore.QAbstractEventDispatcher.closingDown?4() +QtCore.QAbstractEventDispatcher.remainingTime?4(int) -> int +QtCore.QAbstractEventDispatcher.installNativeEventFilter?4(QAbstractNativeEventFilter) +QtCore.QAbstractEventDispatcher.removeNativeEventFilter?4(QAbstractNativeEventFilter) +QtCore.QAbstractEventDispatcher.filterNativeEvent?4(QByteArray, PyQt5.sip.voidptr) -> (bool, int) +QtCore.QAbstractEventDispatcher.aboutToBlock?4() +QtCore.QAbstractEventDispatcher.awake?4() +QtCore.QAbstractEventDispatcher.TimerInfo.interval?7 +QtCore.QAbstractEventDispatcher.TimerInfo.timerId?7 +QtCore.QAbstractEventDispatcher.TimerInfo.timerType?7 +QtCore.QAbstractEventDispatcher.TimerInfo?1(int, int, Qt.TimerType) +QtCore.QAbstractEventDispatcher.TimerInfo.__init__?1(self, int, int, Qt.TimerType) +QtCore.QAbstractEventDispatcher.TimerInfo?1(QAbstractEventDispatcher.TimerInfo) +QtCore.QAbstractEventDispatcher.TimerInfo.__init__?1(self, QAbstractEventDispatcher.TimerInfo) +QtCore.QModelIndex?1() +QtCore.QModelIndex.__init__?1(self) +QtCore.QModelIndex?1(QModelIndex) +QtCore.QModelIndex.__init__?1(self, QModelIndex) +QtCore.QModelIndex?1(QPersistentModelIndex) +QtCore.QModelIndex.__init__?1(self, QPersistentModelIndex) +QtCore.QModelIndex.child?4(int, int) -> QModelIndex +QtCore.QModelIndex.row?4() -> int +QtCore.QModelIndex.column?4() -> int +QtCore.QModelIndex.data?4(int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtCore.QModelIndex.flags?4() -> Qt.ItemFlags +QtCore.QModelIndex.internalPointer?4() -> Any +QtCore.QModelIndex.internalId?4() -> Any +QtCore.QModelIndex.model?4() -> QAbstractItemModel +QtCore.QModelIndex.isValid?4() -> bool +QtCore.QModelIndex.parent?4() -> QModelIndex +QtCore.QModelIndex.sibling?4(int, int) -> QModelIndex +QtCore.QModelIndex.siblingAtColumn?4(int) -> QModelIndex +QtCore.QModelIndex.siblingAtRow?4(int) -> QModelIndex +QtCore.QPersistentModelIndex?1() +QtCore.QPersistentModelIndex.__init__?1(self) +QtCore.QPersistentModelIndex?1(QModelIndex) +QtCore.QPersistentModelIndex.__init__?1(self, QModelIndex) +QtCore.QPersistentModelIndex?1(QPersistentModelIndex) +QtCore.QPersistentModelIndex.__init__?1(self, QPersistentModelIndex) +QtCore.QPersistentModelIndex.row?4() -> int +QtCore.QPersistentModelIndex.column?4() -> int +QtCore.QPersistentModelIndex.data?4(int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtCore.QPersistentModelIndex.flags?4() -> Qt.ItemFlags +QtCore.QPersistentModelIndex.parent?4() -> QModelIndex +QtCore.QPersistentModelIndex.sibling?4(int, int) -> QModelIndex +QtCore.QPersistentModelIndex.child?4(int, int) -> QModelIndex +QtCore.QPersistentModelIndex.model?4() -> QAbstractItemModel +QtCore.QPersistentModelIndex.isValid?4() -> bool +QtCore.QPersistentModelIndex.swap?4(QPersistentModelIndex) +QtCore.QAbstractItemModel.CheckIndexOption?10 +QtCore.QAbstractItemModel.CheckIndexOption.NoOption?10 +QtCore.QAbstractItemModel.CheckIndexOption.IndexIsValid?10 +QtCore.QAbstractItemModel.CheckIndexOption.DoNotUseParent?10 +QtCore.QAbstractItemModel.CheckIndexOption.ParentIsInvalid?10 +QtCore.QAbstractItemModel.LayoutChangeHint?10 +QtCore.QAbstractItemModel.LayoutChangeHint.NoLayoutChangeHint?10 +QtCore.QAbstractItemModel.LayoutChangeHint.VerticalSortHint?10 +QtCore.QAbstractItemModel.LayoutChangeHint.HorizontalSortHint?10 +QtCore.QAbstractItemModel?1(QObject parent=None) +QtCore.QAbstractItemModel.__init__?1(self, QObject parent=None) +QtCore.QAbstractItemModel.hasIndex?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtCore.QAbstractItemModel.parent?4(QModelIndex) -> QModelIndex +QtCore.QAbstractItemModel.parent?4() -> QObject +QtCore.QAbstractItemModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtCore.QAbstractItemModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QAbstractItemModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QAbstractItemModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.data?4(QModelIndex, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtCore.QAbstractItemModel.setData?4(QModelIndex, QVariant, int role=Qt.ItemDataRole.EditRole) -> bool +QtCore.QAbstractItemModel.headerData?4(int, Qt.Orientation, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtCore.QAbstractItemModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.ItemDataRole.EditRole) -> bool +QtCore.QAbstractItemModel.itemData?4(QModelIndex) -> unknown-type +QtCore.QAbstractItemModel.setItemData?4(QModelIndex, unknown-type) -> bool +QtCore.QAbstractItemModel.mimeTypes?4() -> QStringList +QtCore.QAbstractItemModel.mimeData?4(unknown-type) -> QMimeData +QtCore.QAbstractItemModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QAbstractItemModel.supportedDropActions?4() -> Qt.DropActions +QtCore.QAbstractItemModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.fetchMore?4(QModelIndex) +QtCore.QAbstractItemModel.canFetchMore?4(QModelIndex) -> bool +QtCore.QAbstractItemModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtCore.QAbstractItemModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtCore.QAbstractItemModel.buddy?4(QModelIndex) -> QModelIndex +QtCore.QAbstractItemModel.match?4(QModelIndex, int, QVariant, int hits=1, Qt.MatchFlags flags=Qt.MatchStartsWith|Qt.MatchWrap) -> unknown-type +QtCore.QAbstractItemModel.span?4(QModelIndex) -> QSize +QtCore.QAbstractItemModel.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) +QtCore.QAbstractItemModel.headerDataChanged?4(Qt.Orientation, int, int) +QtCore.QAbstractItemModel.layoutAboutToBeChanged?4(unknown-type parents=[], QAbstractItemModel.LayoutChangeHint hint=QAbstractItemModel.NoLayoutChangeHint) +QtCore.QAbstractItemModel.layoutChanged?4(unknown-type parents=[], QAbstractItemModel.LayoutChangeHint hint=QAbstractItemModel.NoLayoutChangeHint) +QtCore.QAbstractItemModel.rowsAboutToBeInserted?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.rowsInserted?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.rowsAboutToBeRemoved?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.rowsRemoved?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.columnsAboutToBeInserted?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.columnsInserted?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.columnsAboutToBeRemoved?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.columnsRemoved?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.modelAboutToBeReset?4() +QtCore.QAbstractItemModel.modelReset?4() +QtCore.QAbstractItemModel.submit?4() -> bool +QtCore.QAbstractItemModel.revert?4() +QtCore.QAbstractItemModel.encodeData?4(unknown-type, QDataStream) +QtCore.QAbstractItemModel.decodeData?4(int, int, QModelIndex, QDataStream) -> bool +QtCore.QAbstractItemModel.beginInsertRows?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.endInsertRows?4() +QtCore.QAbstractItemModel.beginRemoveRows?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.endRemoveRows?4() +QtCore.QAbstractItemModel.beginInsertColumns?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.endInsertColumns?4() +QtCore.QAbstractItemModel.beginRemoveColumns?4(QModelIndex, int, int) +QtCore.QAbstractItemModel.endRemoveColumns?4() +QtCore.QAbstractItemModel.persistentIndexList?4() -> unknown-type +QtCore.QAbstractItemModel.changePersistentIndex?4(QModelIndex, QModelIndex) +QtCore.QAbstractItemModel.changePersistentIndexList?4(unknown-type, unknown-type) +QtCore.QAbstractItemModel.insertRow?4(int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.insertColumn?4(int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.removeRow?4(int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.removeColumn?4(int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractItemModel.supportedDragActions?4() -> Qt.DropActions +QtCore.QAbstractItemModel.roleNames?4() -> unknown-type +QtCore.QAbstractItemModel.createIndex?4(int, int, Any object=None) -> QModelIndex +QtCore.QAbstractItemModel.rowsAboutToBeMoved?4(QModelIndex, int, int, QModelIndex, int) +QtCore.QAbstractItemModel.rowsMoved?4(QModelIndex, int, int, QModelIndex, int) +QtCore.QAbstractItemModel.columnsAboutToBeMoved?4(QModelIndex, int, int, QModelIndex, int) +QtCore.QAbstractItemModel.columnsMoved?4(QModelIndex, int, int, QModelIndex, int) +QtCore.QAbstractItemModel.beginMoveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QAbstractItemModel.endMoveRows?4() +QtCore.QAbstractItemModel.beginMoveColumns?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QAbstractItemModel.endMoveColumns?4() +QtCore.QAbstractItemModel.beginResetModel?4() +QtCore.QAbstractItemModel.endResetModel?4() +QtCore.QAbstractItemModel.resetInternalData?4() +QtCore.QAbstractItemModel.canDropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QAbstractItemModel.moveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QAbstractItemModel.moveColumns?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QAbstractItemModel.moveRow?4(QModelIndex, int, QModelIndex, int) -> bool +QtCore.QAbstractItemModel.moveColumn?4(QModelIndex, int, QModelIndex, int) -> bool +QtCore.QAbstractItemModel.checkIndex?4(QModelIndex, QAbstractItemModel.CheckIndexOptions options=QAbstractItemModel.CheckIndexOption.NoOption) -> bool +QtCore.QAbstractItemModel.CheckIndexOptions?1() +QtCore.QAbstractItemModel.CheckIndexOptions.__init__?1(self) +QtCore.QAbstractItemModel.CheckIndexOptions?1(int) +QtCore.QAbstractItemModel.CheckIndexOptions.__init__?1(self, int) +QtCore.QAbstractItemModel.CheckIndexOptions?1(QAbstractItemModel.CheckIndexOptions) +QtCore.QAbstractItemModel.CheckIndexOptions.__init__?1(self, QAbstractItemModel.CheckIndexOptions) +QtCore.QAbstractTableModel?1(QObject parent=None) +QtCore.QAbstractTableModel.__init__?1(self, QObject parent=None) +QtCore.QAbstractTableModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtCore.QAbstractTableModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QAbstractTableModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtCore.QAbstractTableModel.parent?4() -> QObject +QtCore.QAbstractTableModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtCore.QAbstractListModel?1(QObject parent=None) +QtCore.QAbstractListModel.__init__?1(self, QObject parent=None) +QtCore.QAbstractListModel.index?4(int, int column=0, QModelIndex parent=QModelIndex()) -> QModelIndex +QtCore.QAbstractListModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QAbstractListModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtCore.QAbstractListModel.parent?4() -> QObject +QtCore.QAbstractListModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtCore.QAbstractNativeEventFilter?1() +QtCore.QAbstractNativeEventFilter.__init__?1(self) +QtCore.QAbstractNativeEventFilter.nativeEventFilter?4(QByteArray, PyQt5.sip.voidptr) -> (bool, int) +QtCore.QAbstractProxyModel?1(QObject parent=None) +QtCore.QAbstractProxyModel.__init__?1(self, QObject parent=None) +QtCore.QAbstractProxyModel.setSourceModel?4(QAbstractItemModel) +QtCore.QAbstractProxyModel.sourceModel?4() -> QAbstractItemModel +QtCore.QAbstractProxyModel.mapToSource?4(QModelIndex) -> QModelIndex +QtCore.QAbstractProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex +QtCore.QAbstractProxyModel.mapSelectionToSource?4(QItemSelection) -> QItemSelection +QtCore.QAbstractProxyModel.mapSelectionFromSource?4(QItemSelection) -> QItemSelection +QtCore.QAbstractProxyModel.submit?4() -> bool +QtCore.QAbstractProxyModel.revert?4() +QtCore.QAbstractProxyModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant +QtCore.QAbstractProxyModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool +QtCore.QAbstractProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant +QtCore.QAbstractProxyModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool +QtCore.QAbstractProxyModel.itemData?4(QModelIndex) -> unknown-type +QtCore.QAbstractProxyModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtCore.QAbstractProxyModel.setItemData?4(QModelIndex, unknown-type) -> bool +QtCore.QAbstractProxyModel.buddy?4(QModelIndex) -> QModelIndex +QtCore.QAbstractProxyModel.canFetchMore?4(QModelIndex) -> bool +QtCore.QAbstractProxyModel.fetchMore?4(QModelIndex) +QtCore.QAbstractProxyModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtCore.QAbstractProxyModel.span?4(QModelIndex) -> QSize +QtCore.QAbstractProxyModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool +QtCore.QAbstractProxyModel.mimeData?4(unknown-type) -> QMimeData +QtCore.QAbstractProxyModel.mimeTypes?4() -> QStringList +QtCore.QAbstractProxyModel.supportedDropActions?4() -> Qt.DropActions +QtCore.QAbstractProxyModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtCore.QAbstractProxyModel.resetInternalData?4() +QtCore.QAbstractProxyModel.sourceModelChanged?4() +QtCore.QAbstractProxyModel.canDropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QAbstractProxyModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QAbstractProxyModel.supportedDragActions?4() -> Qt.DropActions +QtCore.QAbstractState?1(QState parent=None) +QtCore.QAbstractState.__init__?1(self, QState parent=None) +QtCore.QAbstractState.parentState?4() -> QState +QtCore.QAbstractState.machine?4() -> QStateMachine +QtCore.QAbstractState.active?4() -> bool +QtCore.QAbstractState.activeChanged?4(bool) +QtCore.QAbstractState.entered?4() +QtCore.QAbstractState.exited?4() +QtCore.QAbstractState.onEntry?4(QEvent) +QtCore.QAbstractState.onExit?4(QEvent) +QtCore.QAbstractState.event?4(QEvent) -> bool +QtCore.QAbstractTransition.TransitionType?10 +QtCore.QAbstractTransition.TransitionType.ExternalTransition?10 +QtCore.QAbstractTransition.TransitionType.InternalTransition?10 +QtCore.QAbstractTransition?1(QState sourceState=None) +QtCore.QAbstractTransition.__init__?1(self, QState sourceState=None) +QtCore.QAbstractTransition.sourceState?4() -> QState +QtCore.QAbstractTransition.targetState?4() -> QAbstractState +QtCore.QAbstractTransition.setTargetState?4(QAbstractState) +QtCore.QAbstractTransition.targetStates?4() -> unknown-type +QtCore.QAbstractTransition.setTargetStates?4(unknown-type) +QtCore.QAbstractTransition.machine?4() -> QStateMachine +QtCore.QAbstractTransition.addAnimation?4(QAbstractAnimation) +QtCore.QAbstractTransition.removeAnimation?4(QAbstractAnimation) +QtCore.QAbstractTransition.animations?4() -> unknown-type +QtCore.QAbstractTransition.triggered?4() +QtCore.QAbstractTransition.targetStateChanged?4() +QtCore.QAbstractTransition.targetStatesChanged?4() +QtCore.QAbstractTransition.eventTest?4(QEvent) -> bool +QtCore.QAbstractTransition.onTransition?4(QEvent) +QtCore.QAbstractTransition.event?4(QEvent) -> bool +QtCore.QAbstractTransition.transitionType?4() -> QAbstractTransition.TransitionType +QtCore.QAbstractTransition.setTransitionType?4(QAbstractTransition.TransitionType) +QtCore.QAnimationGroup?1(QObject parent=None) +QtCore.QAnimationGroup.__init__?1(self, QObject parent=None) +QtCore.QAnimationGroup.animationAt?4(int) -> QAbstractAnimation +QtCore.QAnimationGroup.animationCount?4() -> int +QtCore.QAnimationGroup.indexOfAnimation?4(QAbstractAnimation) -> int +QtCore.QAnimationGroup.addAnimation?4(QAbstractAnimation) +QtCore.QAnimationGroup.insertAnimation?4(int, QAbstractAnimation) +QtCore.QAnimationGroup.removeAnimation?4(QAbstractAnimation) +QtCore.QAnimationGroup.takeAnimation?4(int) -> QAbstractAnimation +QtCore.QAnimationGroup.clear?4() +QtCore.QAnimationGroup.event?4(QEvent) -> bool +QtCore.QBasicTimer?1() +QtCore.QBasicTimer.__init__?1(self) +QtCore.QBasicTimer?1(QBasicTimer) +QtCore.QBasicTimer.__init__?1(self, QBasicTimer) +QtCore.QBasicTimer.isActive?4() -> bool +QtCore.QBasicTimer.timerId?4() -> int +QtCore.QBasicTimer.start?4(int, Qt.TimerType, QObject) +QtCore.QBasicTimer.start?4(int, QObject) +QtCore.QBasicTimer.stop?4() +QtCore.QBasicTimer.swap?4(QBasicTimer) +QtCore.QBitArray?1() +QtCore.QBitArray.__init__?1(self) +QtCore.QBitArray?1(int, bool value=False) +QtCore.QBitArray.__init__?1(self, int, bool value=False) +QtCore.QBitArray?1(QBitArray) +QtCore.QBitArray.__init__?1(self, QBitArray) +QtCore.QBitArray.size?4() -> int +QtCore.QBitArray.count?4() -> int +QtCore.QBitArray.count?4(bool) -> int +QtCore.QBitArray.isEmpty?4() -> bool +QtCore.QBitArray.isNull?4() -> bool +QtCore.QBitArray.resize?4(int) +QtCore.QBitArray.detach?4() +QtCore.QBitArray.isDetached?4() -> bool +QtCore.QBitArray.clear?4() +QtCore.QBitArray.fill?4(bool, int, int) +QtCore.QBitArray.truncate?4(int) +QtCore.QBitArray.fill?4(bool, int size=-1) -> bool +QtCore.QBitArray.testBit?4(int) -> bool +QtCore.QBitArray.setBit?4(int) +QtCore.QBitArray.clearBit?4(int) +QtCore.QBitArray.setBit?4(int, bool) +QtCore.QBitArray.toggleBit?4(int) -> bool +QtCore.QBitArray.at?4(int) -> bool +QtCore.QBitArray.swap?4(QBitArray) +QtCore.QBitArray.bits?4() -> Any +QtCore.QBitArray.fromBits?4(bytes, int) -> QBitArray +QtCore.QIODevice.OpenModeFlag?10 +QtCore.QIODevice.OpenModeFlag.NotOpen?10 +QtCore.QIODevice.OpenModeFlag.ReadOnly?10 +QtCore.QIODevice.OpenModeFlag.WriteOnly?10 +QtCore.QIODevice.OpenModeFlag.ReadWrite?10 +QtCore.QIODevice.OpenModeFlag.Append?10 +QtCore.QIODevice.OpenModeFlag.Truncate?10 +QtCore.QIODevice.OpenModeFlag.Text?10 +QtCore.QIODevice.OpenModeFlag.Unbuffered?10 +QtCore.QIODevice.OpenModeFlag.NewOnly?10 +QtCore.QIODevice.OpenModeFlag.ExistingOnly?10 +QtCore.QIODevice?1() +QtCore.QIODevice.__init__?1(self) +QtCore.QIODevice?1(QObject) +QtCore.QIODevice.__init__?1(self, QObject) +QtCore.QIODevice.openMode?4() -> QIODevice.OpenMode +QtCore.QIODevice.setTextModeEnabled?4(bool) +QtCore.QIODevice.isTextModeEnabled?4() -> bool +QtCore.QIODevice.isOpen?4() -> bool +QtCore.QIODevice.isReadable?4() -> bool +QtCore.QIODevice.isWritable?4() -> bool +QtCore.QIODevice.isSequential?4() -> bool +QtCore.QIODevice.open?4(QIODevice.OpenMode) -> bool +QtCore.QIODevice.close?4() +QtCore.QIODevice.pos?4() -> int +QtCore.QIODevice.size?4() -> int +QtCore.QIODevice.seek?4(int) -> bool +QtCore.QIODevice.atEnd?4() -> bool +QtCore.QIODevice.reset?4() -> bool +QtCore.QIODevice.bytesAvailable?4() -> int +QtCore.QIODevice.bytesToWrite?4() -> int +QtCore.QIODevice.read?4(int) -> Any +QtCore.QIODevice.readAll?4() -> QByteArray +QtCore.QIODevice.readLine?4(int maxlen=0) -> Any +QtCore.QIODevice.canReadLine?4() -> bool +QtCore.QIODevice.peek?4(int) -> QByteArray +QtCore.QIODevice.write?4(QByteArray) -> int +QtCore.QIODevice.waitForReadyRead?4(int) -> bool +QtCore.QIODevice.waitForBytesWritten?4(int) -> bool +QtCore.QIODevice.ungetChar?4(str) +QtCore.QIODevice.putChar?4(str) -> bool +QtCore.QIODevice.getChar?4() -> (bool, bytes) +QtCore.QIODevice.errorString?4() -> QString +QtCore.QIODevice.readyRead?4() +QtCore.QIODevice.bytesWritten?4(int) +QtCore.QIODevice.aboutToClose?4() +QtCore.QIODevice.readChannelFinished?4() +QtCore.QIODevice.readData?4(int) -> Any +QtCore.QIODevice.readLineData?4(int) -> Any +QtCore.QIODevice.writeData?4(bytes) -> int +QtCore.QIODevice.setOpenMode?4(QIODevice.OpenMode) +QtCore.QIODevice.setErrorString?4(QString) +QtCore.QIODevice.readChannelCount?4() -> int +QtCore.QIODevice.writeChannelCount?4() -> int +QtCore.QIODevice.currentReadChannel?4() -> int +QtCore.QIODevice.setCurrentReadChannel?4(int) +QtCore.QIODevice.currentWriteChannel?4() -> int +QtCore.QIODevice.setCurrentWriteChannel?4(int) +QtCore.QIODevice.startTransaction?4() +QtCore.QIODevice.commitTransaction?4() +QtCore.QIODevice.rollbackTransaction?4() +QtCore.QIODevice.isTransactionStarted?4() -> bool +QtCore.QIODevice.channelReadyRead?4(int) +QtCore.QIODevice.channelBytesWritten?4(int, int) +QtCore.QIODevice.skip?4(int) -> int +QtCore.QBuffer?1(QObject parent=None) +QtCore.QBuffer.__init__?1(self, QObject parent=None) +QtCore.QBuffer?1(QByteArray, QObject parent=None) +QtCore.QBuffer.__init__?1(self, QByteArray, QObject parent=None) +QtCore.QBuffer.buffer?4() -> QByteArray +QtCore.QBuffer.data?4() -> QByteArray +QtCore.QBuffer.setBuffer?4(QByteArray) +QtCore.QBuffer.setData?4(QByteArray) +QtCore.QBuffer.setData?4(bytes) +QtCore.QBuffer.open?4(QIODevice.OpenMode) -> bool +QtCore.QBuffer.close?4() +QtCore.QBuffer.size?4() -> int +QtCore.QBuffer.pos?4() -> int +QtCore.QBuffer.seek?4(int) -> bool +QtCore.QBuffer.atEnd?4() -> bool +QtCore.QBuffer.canReadLine?4() -> bool +QtCore.QBuffer.readData?4(int) -> Any +QtCore.QBuffer.writeData?4(bytes) -> int +QtCore.QBuffer.connectNotify?4(QMetaMethod) +QtCore.QBuffer.disconnectNotify?4(QMetaMethod) +QtCore.QByteArray.Base64DecodingStatus?10 +QtCore.QByteArray.Base64DecodingStatus.Ok?10 +QtCore.QByteArray.Base64DecodingStatus.IllegalInputLength?10 +QtCore.QByteArray.Base64DecodingStatus.IllegalCharacter?10 +QtCore.QByteArray.Base64DecodingStatus.IllegalPadding?10 +QtCore.QByteArray.Base64Option?10 +QtCore.QByteArray.Base64Option.Base64Encoding?10 +QtCore.QByteArray.Base64Option.Base64UrlEncoding?10 +QtCore.QByteArray.Base64Option.KeepTrailingEquals?10 +QtCore.QByteArray.Base64Option.OmitTrailingEquals?10 +QtCore.QByteArray.Base64Option.IgnoreBase64DecodingErrors?10 +QtCore.QByteArray.Base64Option.AbortOnBase64DecodingErrors?10 +QtCore.QByteArray?1() +QtCore.QByteArray.__init__?1(self) +QtCore.QByteArray?1(int, str) +QtCore.QByteArray.__init__?1(self, int, str) +QtCore.QByteArray?1(QByteArray) +QtCore.QByteArray.__init__?1(self, QByteArray) +QtCore.QByteArray.resize?4(int) +QtCore.QByteArray.fill?4(str, int size=-1) -> QByteArray +QtCore.QByteArray.clear?4() +QtCore.QByteArray.indexOf?4(QByteArray, int from=0) -> int +QtCore.QByteArray.indexOf?4(QString, int from=0) -> int +QtCore.QByteArray.lastIndexOf?4(QByteArray, int from=-1) -> int +QtCore.QByteArray.lastIndexOf?4(QString, int from=-1) -> int +QtCore.QByteArray.count?4(QByteArray) -> int +QtCore.QByteArray.left?4(int) -> QByteArray +QtCore.QByteArray.right?4(int) -> QByteArray +QtCore.QByteArray.mid?4(int, int length=-1) -> QByteArray +QtCore.QByteArray.startsWith?4(QByteArray) -> bool +QtCore.QByteArray.endsWith?4(QByteArray) -> bool +QtCore.QByteArray.truncate?4(int) +QtCore.QByteArray.chop?4(int) +QtCore.QByteArray.toLower?4() -> QByteArray +QtCore.QByteArray.toUpper?4() -> QByteArray +QtCore.QByteArray.trimmed?4() -> QByteArray +QtCore.QByteArray.simplified?4() -> QByteArray +QtCore.QByteArray.leftJustified?4(int, str fill=' ', bool truncate=False) -> QByteArray +QtCore.QByteArray.rightJustified?4(int, str fill=' ', bool truncate=False) -> QByteArray +QtCore.QByteArray.prepend?4(QByteArray) -> QByteArray +QtCore.QByteArray.append?4(QByteArray) -> QByteArray +QtCore.QByteArray.append?4(QString) -> QByteArray +QtCore.QByteArray.insert?4(int, QByteArray) -> QByteArray +QtCore.QByteArray.insert?4(int, QString) -> QByteArray +QtCore.QByteArray.remove?4(int, int) -> QByteArray +QtCore.QByteArray.replace?4(int, int, QByteArray) -> QByteArray +QtCore.QByteArray.replace?4(QByteArray, QByteArray) -> QByteArray +QtCore.QByteArray.replace?4(QString, QByteArray) -> QByteArray +QtCore.QByteArray.split?4(str) -> unknown-type +QtCore.QByteArray.toShort?4(int base=10) -> (int, bool) +QtCore.QByteArray.toUShort?4(int base=10) -> (int, bool) +QtCore.QByteArray.toInt?4(int base=10) -> (int, bool) +QtCore.QByteArray.toUInt?4(int base=10) -> (int, bool) +QtCore.QByteArray.toLong?4(int base=10) -> (int, bool) +QtCore.QByteArray.toULong?4(int base=10) -> (int, bool) +QtCore.QByteArray.toLongLong?4(int base=10) -> (int, bool) +QtCore.QByteArray.toULongLong?4(int base=10) -> (int, bool) +QtCore.QByteArray.toFloat?4() -> (float, bool) +QtCore.QByteArray.toDouble?4() -> (float, bool) +QtCore.QByteArray.toBase64?4() -> QByteArray +QtCore.QByteArray.setNum?4(float, str format='g', int precision=6) -> QByteArray +QtCore.QByteArray.setNum?4(Any, int base=10) -> QByteArray +QtCore.QByteArray.number?4(float, str format='g', int precision=6) -> QByteArray +QtCore.QByteArray.number?4(Any, int base=10) -> QByteArray +QtCore.QByteArray.fromBase64?4(QByteArray) -> QByteArray +QtCore.QByteArray.fromRawData?4(bytes) -> QByteArray +QtCore.QByteArray.fromHex?4(QByteArray) -> QByteArray +QtCore.QByteArray.count?4() -> int +QtCore.QByteArray.length?4() -> int +QtCore.QByteArray.isNull?4() -> bool +QtCore.QByteArray.size?4() -> int +QtCore.QByteArray.at?4(int) -> bytes +QtCore.QByteArray.isEmpty?4() -> bool +QtCore.QByteArray.data?4() -> Any +QtCore.QByteArray.capacity?4() -> int +QtCore.QByteArray.reserve?4(int) +QtCore.QByteArray.squeeze?4() +QtCore.QByteArray.push_back?4(QByteArray) +QtCore.QByteArray.push_front?4(QByteArray) +QtCore.QByteArray.contains?4(QByteArray) -> bool +QtCore.QByteArray.toHex?4() -> QByteArray +QtCore.QByteArray.toPercentEncoding?4(QByteArray exclude=QByteArray(), QByteArray include=QByteArray(), str percent='%') -> QByteArray +QtCore.QByteArray.fromPercentEncoding?4(QByteArray, str percent='%') -> QByteArray +QtCore.QByteArray.repeated?4(int) -> QByteArray +QtCore.QByteArray.swap?4(QByteArray) +QtCore.QByteArray.toBase64?4(QByteArray.Base64Options) -> QByteArray +QtCore.QByteArray.fromBase64?4(QByteArray, QByteArray.Base64Options) -> QByteArray +QtCore.QByteArray.prepend?4(int, bytes) -> QByteArray +QtCore.QByteArray.append?4(int, bytes) -> QByteArray +QtCore.QByteArray.insert?4(int, int, bytes) -> QByteArray +QtCore.QByteArray.toHex?4(str) -> QByteArray +QtCore.QByteArray.chopped?4(int) -> QByteArray +QtCore.QByteArray.compare?4(QByteArray, Qt.CaseSensitivity cs=Qt.CaseSensitive) -> int +QtCore.QByteArray.isUpper?4() -> bool +QtCore.QByteArray.isLower?4() -> bool +QtCore.QByteArray.fromBase64Encoding?4(QByteArray, QByteArray.Base64Options options=QByteArray.Base64Encoding) -> QByteArray.FromBase64Result +QtCore.QByteArray.Base64Options?1() +QtCore.QByteArray.Base64Options.__init__?1(self) +QtCore.QByteArray.Base64Options?1(int) +QtCore.QByteArray.Base64Options.__init__?1(self, int) +QtCore.QByteArray.Base64Options?1(QByteArray.Base64Options) +QtCore.QByteArray.Base64Options.__init__?1(self, QByteArray.Base64Options) +QtCore.QByteArray.FromBase64Result.decoded?7 +QtCore.QByteArray.FromBase64Result.decodingStatus?7 +QtCore.QByteArray.FromBase64Result?1() +QtCore.QByteArray.FromBase64Result.__init__?1(self) +QtCore.QByteArray.FromBase64Result?1(QByteArray.FromBase64Result) +QtCore.QByteArray.FromBase64Result.__init__?1(self, QByteArray.FromBase64Result) +QtCore.QByteArray.FromBase64Result.swap?4(QByteArray.FromBase64Result) +QtCore.QByteArrayMatcher?1() +QtCore.QByteArrayMatcher.__init__?1(self) +QtCore.QByteArrayMatcher?1(QByteArray) +QtCore.QByteArrayMatcher.__init__?1(self, QByteArray) +QtCore.QByteArrayMatcher?1(QByteArrayMatcher) +QtCore.QByteArrayMatcher.__init__?1(self, QByteArrayMatcher) +QtCore.QByteArrayMatcher.setPattern?4(QByteArray) +QtCore.QByteArrayMatcher.indexIn?4(QByteArray, int from=0) -> int +QtCore.QByteArrayMatcher.pattern?4() -> QByteArray +QtCore.QCalendar.System?10 +QtCore.QCalendar.System.Gregorian?10 +QtCore.QCalendar.System.Julian?10 +QtCore.QCalendar.System.Milankovic?10 +QtCore.QCalendar.System.Jalali?10 +QtCore.QCalendar.System.IslamicCivil?10 +QtCore.Unspecified?10 +QtCore.QCalendar?1() +QtCore.QCalendar.__init__?1(self) +QtCore.QCalendar?1(QCalendar.System) +QtCore.QCalendar.__init__?1(self, QCalendar.System) +QtCore.QCalendar?1(str) +QtCore.QCalendar.__init__?1(self, str) +QtCore.QCalendar?1(QCalendar) +QtCore.QCalendar.__init__?1(self, QCalendar) +QtCore.QCalendar.daysInMonth?4(int, int year=QCalendar.Unspecified) -> int +QtCore.QCalendar.daysInYear?4(int) -> int +QtCore.QCalendar.monthsInYear?4(int) -> int +QtCore.QCalendar.isDateValid?4(int, int, int) -> bool +QtCore.QCalendar.isLeapYear?4(int) -> bool +QtCore.QCalendar.isGregorian?4() -> bool +QtCore.QCalendar.isLunar?4() -> bool +QtCore.QCalendar.isLuniSolar?4() -> bool +QtCore.QCalendar.isSolar?4() -> bool +QtCore.QCalendar.isProleptic?4() -> bool +QtCore.QCalendar.hasYearZero?4() -> bool +QtCore.QCalendar.maximumDaysInMonth?4() -> int +QtCore.QCalendar.minimumDaysInMonth?4() -> int +QtCore.QCalendar.maximumMonthsInYear?4() -> int +QtCore.QCalendar.name?4() -> QString +QtCore.QCalendar.dateFromParts?4(int, int, int) -> QDate +QtCore.QCalendar.dateFromParts?4(QCalendar.YearMonthDay) -> QDate +QtCore.QCalendar.partsFromDate?4(QDate) -> QCalendar.YearMonthDay +QtCore.QCalendar.dayOfWeek?4(QDate) -> int +QtCore.QCalendar.monthName?4(QLocale, int, int year=QCalendar.Unspecified, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QCalendar.standaloneMonthName?4(QLocale, int, int year=QCalendar.Unspecified, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QCalendar.weekDayName?4(QLocale, int, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QCalendar.standaloneWeekDayName?4(QLocale, int, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QCalendar.dateTimeToString?4(QString, QDateTime, QDate, QTime, QLocale) -> QString +QtCore.QCalendar.availableCalendars?4() -> QStringList +QtCore.QCalendar.YearMonthDay.day?7 +QtCore.QCalendar.YearMonthDay.month?7 +QtCore.QCalendar.YearMonthDay.year?7 +QtCore.QCalendar.YearMonthDay?1() +QtCore.QCalendar.YearMonthDay.__init__?1(self) +QtCore.QCalendar.YearMonthDay?1(int, int month=1, int day=1) +QtCore.QCalendar.YearMonthDay.__init__?1(self, int, int month=1, int day=1) +QtCore.QCalendar.YearMonthDay?1(QCalendar.YearMonthDay) +QtCore.QCalendar.YearMonthDay.__init__?1(self, QCalendar.YearMonthDay) +QtCore.QCalendar.YearMonthDay.isValid?4() -> bool +QtCore.QCborError.Code?10 +QtCore.QCborError.Code.UnknownError?10 +QtCore.QCborError.Code.AdvancePastEnd?10 +QtCore.QCborError.Code.InputOutputError?10 +QtCore.QCborError.Code.GarbageAtEnd?10 +QtCore.QCborError.Code.EndOfFile?10 +QtCore.QCborError.Code.UnexpectedBreak?10 +QtCore.QCborError.Code.UnknownType?10 +QtCore.QCborError.Code.IllegalType?10 +QtCore.QCborError.Code.IllegalNumber?10 +QtCore.QCborError.Code.IllegalSimpleType?10 +QtCore.QCborError.Code.InvalidUtf8String?10 +QtCore.QCborError.Code.DataTooLarge?10 +QtCore.QCborError.Code.NestingTooDeep?10 +QtCore.QCborError.Code.UnsupportedType?10 +QtCore.QCborError.Code.NoError?10 +QtCore.QCborError?1() +QtCore.QCborError.__init__?1(self) +QtCore.QCborError?1(QCborError) +QtCore.QCborError.__init__?1(self, QCborError) +QtCore.QCborError.code?4() -> QCborError.Code +QtCore.QCborError.toString?4() -> QString +QtCore.QCborStreamWriter?1(QIODevice) +QtCore.QCborStreamWriter.__init__?1(self, QIODevice) +QtCore.QCborStreamWriter?1(QByteArray) +QtCore.QCborStreamWriter.__init__?1(self, QByteArray) +QtCore.QCborStreamWriter.setDevice?4(QIODevice) +QtCore.QCborStreamWriter.device?4() -> QIODevice +QtCore.QCborStreamWriter.append?4(QCborSimpleType) +QtCore.QCborStreamWriter.append?4(QCborKnownTags) +QtCore.QCborStreamWriter.append?4(QString) +QtCore.QCborStreamWriter.append?4(QByteArray) +QtCore.QCborStreamWriter.append?4(bool) +QtCore.QCborStreamWriter.append?4(float) +QtCore.QCborStreamWriter.append?4(Any) +QtCore.QCborStreamWriter.appendNull?4() +QtCore.QCborStreamWriter.appendUndefined?4() +QtCore.QCborStreamWriter.startArray?4() +QtCore.QCborStreamWriter.startArray?4(int) +QtCore.QCborStreamWriter.endArray?4() -> bool +QtCore.QCborStreamWriter.startMap?4() +QtCore.QCborStreamWriter.startMap?4(int) +QtCore.QCborStreamWriter.endMap?4() -> bool +QtCore.QCborStreamReader.StringResultCode?10 +QtCore.QCborStreamReader.StringResultCode.EndOfString?10 +QtCore.QCborStreamReader.StringResultCode.Ok?10 +QtCore.QCborStreamReader.StringResultCode.Error?10 +QtCore.QCborStreamReader.Type?10 +QtCore.QCborStreamReader.Type.UnsignedInteger?10 +QtCore.QCborStreamReader.Type.NegativeInteger?10 +QtCore.QCborStreamReader.Type.ByteString?10 +QtCore.QCborStreamReader.Type.ByteArray?10 +QtCore.QCborStreamReader.Type.TextString?10 +QtCore.QCborStreamReader.Type.String?10 +QtCore.QCborStreamReader.Type.Array?10 +QtCore.QCborStreamReader.Type.Map?10 +QtCore.QCborStreamReader.Type.Tag?10 +QtCore.QCborStreamReader.Type.SimpleType?10 +QtCore.QCborStreamReader.Type.HalfFloat?10 +QtCore.QCborStreamReader.Type.Float16?10 +QtCore.QCborStreamReader.Type.Float?10 +QtCore.QCborStreamReader.Type.Double?10 +QtCore.QCborStreamReader.Type.Invalid?10 +QtCore.QCborStreamReader?1() +QtCore.QCborStreamReader.__init__?1(self) +QtCore.QCborStreamReader?1(QByteArray) +QtCore.QCborStreamReader.__init__?1(self, QByteArray) +QtCore.QCborStreamReader?1(QIODevice) +QtCore.QCborStreamReader.__init__?1(self, QIODevice) +QtCore.QCborStreamReader.setDevice?4(QIODevice) +QtCore.QCborStreamReader.device?4() -> QIODevice +QtCore.QCborStreamReader.addData?4(QByteArray) +QtCore.QCborStreamReader.reparse?4() +QtCore.QCborStreamReader.clear?4() +QtCore.QCborStreamReader.reset?4() +QtCore.QCborStreamReader.lastError?4() -> QCborError +QtCore.QCborStreamReader.currentOffset?4() -> int +QtCore.QCborStreamReader.isValid?4() -> bool +QtCore.QCborStreamReader.containerDepth?4() -> int +QtCore.QCborStreamReader.parentContainerType?4() -> QCborStreamReader.Type +QtCore.QCborStreamReader.hasNext?4() -> bool +QtCore.QCborStreamReader.next?4(int maxRecursion=10000) -> bool +QtCore.QCborStreamReader.type?4() -> QCborStreamReader.Type +QtCore.QCborStreamReader.isUnsignedInteger?4() -> bool +QtCore.QCborStreamReader.isNegativeInteger?4() -> bool +QtCore.QCborStreamReader.isInteger?4() -> bool +QtCore.QCborStreamReader.isByteArray?4() -> bool +QtCore.QCborStreamReader.isString?4() -> bool +QtCore.QCborStreamReader.isArray?4() -> bool +QtCore.QCborStreamReader.isMap?4() -> bool +QtCore.QCborStreamReader.isTag?4() -> bool +QtCore.QCborStreamReader.isSimpleType?4() -> bool +QtCore.QCborStreamReader.isFloat16?4() -> bool +QtCore.QCborStreamReader.isFloat?4() -> bool +QtCore.QCborStreamReader.isDouble?4() -> bool +QtCore.QCborStreamReader.isInvalid?4() -> bool +QtCore.QCborStreamReader.isSimpleType?4(QCborSimpleType) -> bool +QtCore.QCborStreamReader.isFalse?4() -> bool +QtCore.QCborStreamReader.isTrue?4() -> bool +QtCore.QCborStreamReader.isBool?4() -> bool +QtCore.QCborStreamReader.isNull?4() -> bool +QtCore.QCborStreamReader.isUndefined?4() -> bool +QtCore.QCborStreamReader.isLengthKnown?4() -> bool +QtCore.QCborStreamReader.length?4() -> int +QtCore.QCborStreamReader.isContainer?4() -> bool +QtCore.QCborStreamReader.enterContainer?4() -> bool +QtCore.QCborStreamReader.leaveContainer?4() -> bool +QtCore.QCborStreamReader.readString?4() -> Tuple +QtCore.QCborStreamReader.readByteArray?4() -> Tuple +QtCore.QCborStreamReader.toBool?4() -> bool +QtCore.QCborStreamReader.toUnsignedInteger?4() -> int +QtCore.QCborStreamReader.toSimpleType?4() -> QCborSimpleType +QtCore.QCborStreamReader.toDouble?4() -> float +QtCore.QCborStreamReader.toInteger?4() -> int +QtCore.QCollatorSortKey?1(QCollatorSortKey) +QtCore.QCollatorSortKey.__init__?1(self, QCollatorSortKey) +QtCore.QCollatorSortKey.swap?4(QCollatorSortKey) +QtCore.QCollatorSortKey.compare?4(QCollatorSortKey) -> int +QtCore.QCollator?1(QLocale locale=QLocale()) +QtCore.QCollator.__init__?1(self, QLocale locale=QLocale()) +QtCore.QCollator?1(QCollator) +QtCore.QCollator.__init__?1(self, QCollator) +QtCore.QCollator.swap?4(QCollator) +QtCore.QCollator.setLocale?4(QLocale) +QtCore.QCollator.locale?4() -> QLocale +QtCore.QCollator.caseSensitivity?4() -> Qt.CaseSensitivity +QtCore.QCollator.setCaseSensitivity?4(Qt.CaseSensitivity) +QtCore.QCollator.setNumericMode?4(bool) +QtCore.QCollator.numericMode?4() -> bool +QtCore.QCollator.setIgnorePunctuation?4(bool) +QtCore.QCollator.ignorePunctuation?4() -> bool +QtCore.QCollator.compare?4(QString, QString) -> int +QtCore.QCollator.sortKey?4(QString) -> QCollatorSortKey +QtCore.QCommandLineOption.Flag?10 +QtCore.QCommandLineOption.Flag.HiddenFromHelp?10 +QtCore.QCommandLineOption.Flag.ShortOptionStyle?10 +QtCore.QCommandLineOption?1(QString) +QtCore.QCommandLineOption.__init__?1(self, QString) +QtCore.QCommandLineOption?1(QStringList) +QtCore.QCommandLineOption.__init__?1(self, QStringList) +QtCore.QCommandLineOption?1(QString, QString, QString valueName='', QString defaultValue='') +QtCore.QCommandLineOption.__init__?1(self, QString, QString, QString valueName='', QString defaultValue='') +QtCore.QCommandLineOption?1(QStringList, QString, QString valueName='', QString defaultValue='') +QtCore.QCommandLineOption.__init__?1(self, QStringList, QString, QString valueName='', QString defaultValue='') +QtCore.QCommandLineOption?1(QCommandLineOption) +QtCore.QCommandLineOption.__init__?1(self, QCommandLineOption) +QtCore.QCommandLineOption.swap?4(QCommandLineOption) +QtCore.QCommandLineOption.names?4() -> QStringList +QtCore.QCommandLineOption.setValueName?4(QString) +QtCore.QCommandLineOption.valueName?4() -> QString +QtCore.QCommandLineOption.setDescription?4(QString) +QtCore.QCommandLineOption.description?4() -> QString +QtCore.QCommandLineOption.setDefaultValue?4(QString) +QtCore.QCommandLineOption.setDefaultValues?4(QStringList) +QtCore.QCommandLineOption.defaultValues?4() -> QStringList +QtCore.QCommandLineOption.setHidden?4(bool) +QtCore.QCommandLineOption.isHidden?4() -> bool +QtCore.QCommandLineOption.flags?4() -> QCommandLineOption.Flags +QtCore.QCommandLineOption.setFlags?4(QCommandLineOption.Flags) +QtCore.QCommandLineOption.Flags?1() +QtCore.QCommandLineOption.Flags.__init__?1(self) +QtCore.QCommandLineOption.Flags?1(int) +QtCore.QCommandLineOption.Flags.__init__?1(self, int) +QtCore.QCommandLineOption.Flags?1(QCommandLineOption.Flags) +QtCore.QCommandLineOption.Flags.__init__?1(self, QCommandLineOption.Flags) +QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode?10 +QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode.ParseAsOptions?10 +QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode.ParseAsPositionalArguments?10 +QtCore.QCommandLineParser.SingleDashWordOptionMode?10 +QtCore.QCommandLineParser.SingleDashWordOptionMode.ParseAsCompactedShortOptions?10 +QtCore.QCommandLineParser.SingleDashWordOptionMode.ParseAsLongOptions?10 +QtCore.QCommandLineParser?1() +QtCore.QCommandLineParser.__init__?1(self) +QtCore.QCommandLineParser.setSingleDashWordOptionMode?4(QCommandLineParser.SingleDashWordOptionMode) +QtCore.QCommandLineParser.addOption?4(QCommandLineOption) -> bool +QtCore.QCommandLineParser.addVersionOption?4() -> QCommandLineOption +QtCore.QCommandLineParser.addHelpOption?4() -> QCommandLineOption +QtCore.QCommandLineParser.setApplicationDescription?4(QString) +QtCore.QCommandLineParser.applicationDescription?4() -> QString +QtCore.QCommandLineParser.addPositionalArgument?4(QString, QString, QString syntax='') +QtCore.QCommandLineParser.clearPositionalArguments?4() +QtCore.QCommandLineParser.process?4(QStringList) +QtCore.QCommandLineParser.process?4(QCoreApplication) +QtCore.QCommandLineParser.parse?4(QStringList) -> bool +QtCore.QCommandLineParser.errorText?4() -> QString +QtCore.QCommandLineParser.isSet?4(QString) -> bool +QtCore.QCommandLineParser.value?4(QString) -> QString +QtCore.QCommandLineParser.values?4(QString) -> QStringList +QtCore.QCommandLineParser.isSet?4(QCommandLineOption) -> bool +QtCore.QCommandLineParser.value?4(QCommandLineOption) -> QString +QtCore.QCommandLineParser.values?4(QCommandLineOption) -> QStringList +QtCore.QCommandLineParser.positionalArguments?4() -> QStringList +QtCore.QCommandLineParser.optionNames?4() -> QStringList +QtCore.QCommandLineParser.unknownOptionNames?4() -> QStringList +QtCore.QCommandLineParser.showHelp?4(int exitCode=0) +QtCore.QCommandLineParser.helpText?4() -> QString +QtCore.QCommandLineParser.addOptions?4(unknown-type) -> bool +QtCore.QCommandLineParser.showVersion?4() +QtCore.QCommandLineParser.setOptionsAfterPositionalArgumentsMode?4(QCommandLineParser.OptionsAfterPositionalArgumentsMode) +QtCore.QConcatenateTablesProxyModel?1(QObject parent=None) +QtCore.QConcatenateTablesProxyModel.__init__?1(self, QObject parent=None) +QtCore.QConcatenateTablesProxyModel.addSourceModel?4(QAbstractItemModel) +QtCore.QConcatenateTablesProxyModel.removeSourceModel?4(QAbstractItemModel) +QtCore.QConcatenateTablesProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex +QtCore.QConcatenateTablesProxyModel.mapToSource?4(QModelIndex) -> QModelIndex +QtCore.QConcatenateTablesProxyModel.data?4(QModelIndex, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtCore.QConcatenateTablesProxyModel.setData?4(QModelIndex, QVariant, int role=Qt.ItemDataRole.EditRole) -> bool +QtCore.QConcatenateTablesProxyModel.itemData?4(QModelIndex) -> unknown-type +QtCore.QConcatenateTablesProxyModel.setItemData?4(QModelIndex, unknown-type) -> bool +QtCore.QConcatenateTablesProxyModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtCore.QConcatenateTablesProxyModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtCore.QConcatenateTablesProxyModel.parent?4(QModelIndex) -> QModelIndex +QtCore.QConcatenateTablesProxyModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QConcatenateTablesProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtCore.QConcatenateTablesProxyModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QConcatenateTablesProxyModel.mimeTypes?4() -> QStringList +QtCore.QConcatenateTablesProxyModel.mimeData?4(unknown-type) -> QMimeData +QtCore.QConcatenateTablesProxyModel.canDropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QConcatenateTablesProxyModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QConcatenateTablesProxyModel.span?4(QModelIndex) -> QSize +QtCore.QConcatenateTablesProxyModel.sourceModels?4() -> unknown-type +QtCore.QCoreApplication?1(List) +QtCore.QCoreApplication.__init__?1(self, List) +QtCore.QCoreApplication.setOrganizationDomain?4(QString) +QtCore.QCoreApplication.organizationDomain?4() -> QString +QtCore.QCoreApplication.setOrganizationName?4(QString) +QtCore.QCoreApplication.organizationName?4() -> QString +QtCore.QCoreApplication.setApplicationName?4(QString) +QtCore.QCoreApplication.applicationName?4() -> QString +QtCore.QCoreApplication.arguments?4() -> QStringList +QtCore.QCoreApplication.instance?4() -> QCoreApplication +QtCore.QCoreApplication.exec_?4() -> int +QtCore.QCoreApplication.exec?4() -> int +QtCore.QCoreApplication.processEvents?4(QEventLoop.ProcessEventsFlags flags=QEventLoop.ProcessEventsFlag.AllEvents) +QtCore.QCoreApplication.processEvents?4(QEventLoop.ProcessEventsFlags, int) +QtCore.QCoreApplication.exit?4(int returnCode=0) +QtCore.QCoreApplication.sendEvent?4(QObject, QEvent) -> bool +QtCore.QCoreApplication.postEvent?4(QObject, QEvent, int priority=Qt.EventPriority.NormalEventPriority) +QtCore.QCoreApplication.sendPostedEvents?4(QObject receiver=None, int eventType=0) +QtCore.QCoreApplication.removePostedEvents?4(QObject, int eventType=0) +QtCore.QCoreApplication.hasPendingEvents?4() -> bool +QtCore.QCoreApplication.notify?4(QObject, QEvent) -> bool +QtCore.QCoreApplication.startingUp?4() -> bool +QtCore.QCoreApplication.closingDown?4() -> bool +QtCore.QCoreApplication.applicationDirPath?4() -> QString +QtCore.QCoreApplication.applicationFilePath?4() -> QString +QtCore.QCoreApplication.setLibraryPaths?4(QStringList) +QtCore.QCoreApplication.libraryPaths?4() -> QStringList +QtCore.QCoreApplication.addLibraryPath?4(QString) +QtCore.QCoreApplication.removeLibraryPath?4(QString) +QtCore.QCoreApplication.installTranslator?4(QTranslator) -> bool +QtCore.QCoreApplication.removeTranslator?4(QTranslator) -> bool +QtCore.QCoreApplication.translate?4(str, str, str disambiguation=None, int n=-1) -> QString +QtCore.QCoreApplication.flush?4() +QtCore.QCoreApplication.setAttribute?4(Qt.ApplicationAttribute, bool on=True) +QtCore.QCoreApplication.testAttribute?4(Qt.ApplicationAttribute) -> bool +QtCore.QCoreApplication.quit?4() +QtCore.QCoreApplication.aboutToQuit?4() +QtCore.QCoreApplication.event?4(QEvent) -> bool +QtCore.QCoreApplication.setApplicationVersion?4(QString) +QtCore.QCoreApplication.applicationVersion?4() -> QString +QtCore.QCoreApplication.applicationPid?4() -> int +QtCore.QCoreApplication.eventDispatcher?4() -> QAbstractEventDispatcher +QtCore.QCoreApplication.setEventDispatcher?4(QAbstractEventDispatcher) +QtCore.QCoreApplication.isQuitLockEnabled?4() -> bool +QtCore.QCoreApplication.setQuitLockEnabled?4(bool) +QtCore.QCoreApplication.installNativeEventFilter?4(QAbstractNativeEventFilter) +QtCore.QCoreApplication.removeNativeEventFilter?4(QAbstractNativeEventFilter) +QtCore.QCoreApplication.setSetuidAllowed?4(bool) +QtCore.QCoreApplication.isSetuidAllowed?4() -> bool +QtCore.QCoreApplication.__enter__?4() -> Any +QtCore.QCoreApplication.__exit__?4(Any, Any, Any) +QtCore.QEvent.Type?10 +QtCore.QEvent.Type.None_?10 +QtCore.QEvent.Type.Timer?10 +QtCore.QEvent.Type.MouseButtonPress?10 +QtCore.QEvent.Type.MouseButtonRelease?10 +QtCore.QEvent.Type.MouseButtonDblClick?10 +QtCore.QEvent.Type.MouseMove?10 +QtCore.QEvent.Type.KeyPress?10 +QtCore.QEvent.Type.KeyRelease?10 +QtCore.QEvent.Type.FocusIn?10 +QtCore.QEvent.Type.FocusOut?10 +QtCore.QEvent.Type.Enter?10 +QtCore.QEvent.Type.Leave?10 +QtCore.QEvent.Type.Paint?10 +QtCore.QEvent.Type.Move?10 +QtCore.QEvent.Type.Resize?10 +QtCore.QEvent.Type.Show?10 +QtCore.QEvent.Type.Hide?10 +QtCore.QEvent.Type.Close?10 +QtCore.QEvent.Type.ParentChange?10 +QtCore.QEvent.Type.ParentAboutToChange?10 +QtCore.QEvent.Type.ThreadChange?10 +QtCore.QEvent.Type.WindowActivate?10 +QtCore.QEvent.Type.WindowDeactivate?10 +QtCore.QEvent.Type.ShowToParent?10 +QtCore.QEvent.Type.HideToParent?10 +QtCore.QEvent.Type.Wheel?10 +QtCore.QEvent.Type.WindowTitleChange?10 +QtCore.QEvent.Type.WindowIconChange?10 +QtCore.QEvent.Type.ApplicationWindowIconChange?10 +QtCore.QEvent.Type.ApplicationFontChange?10 +QtCore.QEvent.Type.ApplicationLayoutDirectionChange?10 +QtCore.QEvent.Type.ApplicationPaletteChange?10 +QtCore.QEvent.Type.PaletteChange?10 +QtCore.QEvent.Type.Clipboard?10 +QtCore.QEvent.Type.MetaCall?10 +QtCore.QEvent.Type.SockAct?10 +QtCore.QEvent.Type.WinEventAct?10 +QtCore.QEvent.Type.DeferredDelete?10 +QtCore.QEvent.Type.DragEnter?10 +QtCore.QEvent.Type.DragMove?10 +QtCore.QEvent.Type.DragLeave?10 +QtCore.QEvent.Type.Drop?10 +QtCore.QEvent.Type.ChildAdded?10 +QtCore.QEvent.Type.ChildPolished?10 +QtCore.QEvent.Type.ChildRemoved?10 +QtCore.QEvent.Type.PolishRequest?10 +QtCore.QEvent.Type.Polish?10 +QtCore.QEvent.Type.LayoutRequest?10 +QtCore.QEvent.Type.UpdateRequest?10 +QtCore.QEvent.Type.UpdateLater?10 +QtCore.QEvent.Type.ContextMenu?10 +QtCore.QEvent.Type.InputMethod?10 +QtCore.QEvent.Type.TabletMove?10 +QtCore.QEvent.Type.LocaleChange?10 +QtCore.QEvent.Type.LanguageChange?10 +QtCore.QEvent.Type.LayoutDirectionChange?10 +QtCore.QEvent.Type.TabletPress?10 +QtCore.QEvent.Type.TabletRelease?10 +QtCore.QEvent.Type.OkRequest?10 +QtCore.QEvent.Type.IconDrag?10 +QtCore.QEvent.Type.FontChange?10 +QtCore.QEvent.Type.EnabledChange?10 +QtCore.QEvent.Type.ActivationChange?10 +QtCore.QEvent.Type.StyleChange?10 +QtCore.QEvent.Type.IconTextChange?10 +QtCore.QEvent.Type.ModifiedChange?10 +QtCore.QEvent.Type.MouseTrackingChange?10 +QtCore.QEvent.Type.WindowBlocked?10 +QtCore.QEvent.Type.WindowUnblocked?10 +QtCore.QEvent.Type.WindowStateChange?10 +QtCore.QEvent.Type.ToolTip?10 +QtCore.QEvent.Type.WhatsThis?10 +QtCore.QEvent.Type.StatusTip?10 +QtCore.QEvent.Type.ActionChanged?10 +QtCore.QEvent.Type.ActionAdded?10 +QtCore.QEvent.Type.ActionRemoved?10 +QtCore.QEvent.Type.FileOpen?10 +QtCore.QEvent.Type.Shortcut?10 +QtCore.QEvent.Type.ShortcutOverride?10 +QtCore.QEvent.Type.WhatsThisClicked?10 +QtCore.QEvent.Type.ToolBarChange?10 +QtCore.QEvent.Type.ApplicationActivate?10 +QtCore.QEvent.Type.ApplicationActivated?10 +QtCore.QEvent.Type.ApplicationDeactivate?10 +QtCore.QEvent.Type.ApplicationDeactivated?10 +QtCore.QEvent.Type.QueryWhatsThis?10 +QtCore.QEvent.Type.EnterWhatsThisMode?10 +QtCore.QEvent.Type.LeaveWhatsThisMode?10 +QtCore.QEvent.Type.ZOrderChange?10 +QtCore.QEvent.Type.HoverEnter?10 +QtCore.QEvent.Type.HoverLeave?10 +QtCore.QEvent.Type.HoverMove?10 +QtCore.QEvent.Type.GraphicsSceneMouseMove?10 +QtCore.QEvent.Type.GraphicsSceneMousePress?10 +QtCore.QEvent.Type.GraphicsSceneMouseRelease?10 +QtCore.QEvent.Type.GraphicsSceneMouseDoubleClick?10 +QtCore.QEvent.Type.GraphicsSceneContextMenu?10 +QtCore.QEvent.Type.GraphicsSceneHoverEnter?10 +QtCore.QEvent.Type.GraphicsSceneHoverMove?10 +QtCore.QEvent.Type.GraphicsSceneHoverLeave?10 +QtCore.QEvent.Type.GraphicsSceneHelp?10 +QtCore.QEvent.Type.GraphicsSceneDragEnter?10 +QtCore.QEvent.Type.GraphicsSceneDragMove?10 +QtCore.QEvent.Type.GraphicsSceneDragLeave?10 +QtCore.QEvent.Type.GraphicsSceneDrop?10 +QtCore.QEvent.Type.GraphicsSceneWheel?10 +QtCore.QEvent.Type.GraphicsSceneResize?10 +QtCore.QEvent.Type.GraphicsSceneMove?10 +QtCore.QEvent.Type.KeyboardLayoutChange?10 +QtCore.QEvent.Type.DynamicPropertyChange?10 +QtCore.QEvent.Type.TabletEnterProximity?10 +QtCore.QEvent.Type.TabletLeaveProximity?10 +QtCore.QEvent.Type.NonClientAreaMouseMove?10 +QtCore.QEvent.Type.NonClientAreaMouseButtonPress?10 +QtCore.QEvent.Type.NonClientAreaMouseButtonRelease?10 +QtCore.QEvent.Type.NonClientAreaMouseButtonDblClick?10 +QtCore.QEvent.Type.MacSizeChange?10 +QtCore.QEvent.Type.ContentsRectChange?10 +QtCore.QEvent.Type.CursorChange?10 +QtCore.QEvent.Type.ToolTipChange?10 +QtCore.QEvent.Type.GrabMouse?10 +QtCore.QEvent.Type.UngrabMouse?10 +QtCore.QEvent.Type.GrabKeyboard?10 +QtCore.QEvent.Type.UngrabKeyboard?10 +QtCore.QEvent.Type.StateMachineSignal?10 +QtCore.QEvent.Type.StateMachineWrapped?10 +QtCore.QEvent.Type.TouchBegin?10 +QtCore.QEvent.Type.TouchUpdate?10 +QtCore.QEvent.Type.TouchEnd?10 +QtCore.QEvent.Type.NativeGesture?10 +QtCore.QEvent.Type.RequestSoftwareInputPanel?10 +QtCore.QEvent.Type.CloseSoftwareInputPanel?10 +QtCore.QEvent.Type.WinIdChange?10 +QtCore.QEvent.Type.Gesture?10 +QtCore.QEvent.Type.GestureOverride?10 +QtCore.QEvent.Type.FocusAboutToChange?10 +QtCore.QEvent.Type.ScrollPrepare?10 +QtCore.QEvent.Type.Scroll?10 +QtCore.QEvent.Type.Expose?10 +QtCore.QEvent.Type.InputMethodQuery?10 +QtCore.QEvent.Type.OrientationChange?10 +QtCore.QEvent.Type.TouchCancel?10 +QtCore.QEvent.Type.PlatformPanel?10 +QtCore.QEvent.Type.ApplicationStateChange?10 +QtCore.QEvent.Type.ReadOnlyChange?10 +QtCore.QEvent.Type.PlatformSurface?10 +QtCore.QEvent.Type.TabletTrackingChange?10 +QtCore.QEvent.Type.EnterEditFocus?10 +QtCore.QEvent.Type.LeaveEditFocus?10 +QtCore.QEvent.Type.User?10 +QtCore.QEvent.Type.MaxUser?10 +QtCore.QEvent?1(QEvent.Type) +QtCore.QEvent.__init__?1(self, QEvent.Type) +QtCore.QEvent?1(QEvent) +QtCore.QEvent.__init__?1(self, QEvent) +QtCore.QEvent.type?4() -> QEvent.Type +QtCore.QEvent.spontaneous?4() -> bool +QtCore.QEvent.setAccepted?4(bool) +QtCore.QEvent.isAccepted?4() -> bool +QtCore.QEvent.accept?4() +QtCore.QEvent.ignore?4() +QtCore.QEvent.registerEventType?4(int hint=-1) -> int +QtCore.QTimerEvent?1(int) +QtCore.QTimerEvent.__init__?1(self, int) +QtCore.QTimerEvent?1(QTimerEvent) +QtCore.QTimerEvent.__init__?1(self, QTimerEvent) +QtCore.QTimerEvent.timerId?4() -> int +QtCore.QChildEvent?1(QEvent.Type, QObject) +QtCore.QChildEvent.__init__?1(self, QEvent.Type, QObject) +QtCore.QChildEvent?1(QChildEvent) +QtCore.QChildEvent.__init__?1(self, QChildEvent) +QtCore.QChildEvent.child?4() -> QObject +QtCore.QChildEvent.added?4() -> bool +QtCore.QChildEvent.polished?4() -> bool +QtCore.QChildEvent.removed?4() -> bool +QtCore.QDynamicPropertyChangeEvent?1(QByteArray) +QtCore.QDynamicPropertyChangeEvent.__init__?1(self, QByteArray) +QtCore.QDynamicPropertyChangeEvent?1(QDynamicPropertyChangeEvent) +QtCore.QDynamicPropertyChangeEvent.__init__?1(self, QDynamicPropertyChangeEvent) +QtCore.QDynamicPropertyChangeEvent.propertyName?4() -> QByteArray +QtCore.QCryptographicHash.Algorithm?10 +QtCore.QCryptographicHash.Algorithm.Md4?10 +QtCore.QCryptographicHash.Algorithm.Md5?10 +QtCore.QCryptographicHash.Algorithm.Sha1?10 +QtCore.QCryptographicHash.Algorithm.Sha224?10 +QtCore.QCryptographicHash.Algorithm.Sha256?10 +QtCore.QCryptographicHash.Algorithm.Sha384?10 +QtCore.QCryptographicHash.Algorithm.Sha512?10 +QtCore.QCryptographicHash.Algorithm.Sha3_224?10 +QtCore.QCryptographicHash.Algorithm.Sha3_256?10 +QtCore.QCryptographicHash.Algorithm.Sha3_384?10 +QtCore.QCryptographicHash.Algorithm.Sha3_512?10 +QtCore.QCryptographicHash.Algorithm.Keccak_224?10 +QtCore.QCryptographicHash.Algorithm.Keccak_256?10 +QtCore.QCryptographicHash.Algorithm.Keccak_384?10 +QtCore.QCryptographicHash.Algorithm.Keccak_512?10 +QtCore.QCryptographicHash?1(QCryptographicHash.Algorithm) +QtCore.QCryptographicHash.__init__?1(self, QCryptographicHash.Algorithm) +QtCore.QCryptographicHash.reset?4() +QtCore.QCryptographicHash.addData?4(bytes) +QtCore.QCryptographicHash.addData?4(QByteArray) +QtCore.QCryptographicHash.addData?4(QIODevice) -> bool +QtCore.QCryptographicHash.result?4() -> QByteArray +QtCore.QCryptographicHash.hash?4(QByteArray, QCryptographicHash.Algorithm) -> QByteArray +QtCore.QCryptographicHash.hashLength?4(QCryptographicHash.Algorithm) -> int +QtCore.QDataStream.FloatingPointPrecision?10 +QtCore.QDataStream.FloatingPointPrecision.SinglePrecision?10 +QtCore.QDataStream.FloatingPointPrecision.DoublePrecision?10 +QtCore.QDataStream.Status?10 +QtCore.QDataStream.Status.Ok?10 +QtCore.QDataStream.Status.ReadPastEnd?10 +QtCore.QDataStream.Status.ReadCorruptData?10 +QtCore.QDataStream.Status.WriteFailed?10 +QtCore.QDataStream.ByteOrder?10 +QtCore.QDataStream.ByteOrder.BigEndian?10 +QtCore.QDataStream.ByteOrder.LittleEndian?10 +QtCore.QDataStream.Version?10 +QtCore.QDataStream.Version.Qt_1_0?10 +QtCore.QDataStream.Version.Qt_2_0?10 +QtCore.QDataStream.Version.Qt_2_1?10 +QtCore.QDataStream.Version.Qt_3_0?10 +QtCore.QDataStream.Version.Qt_3_1?10 +QtCore.QDataStream.Version.Qt_3_3?10 +QtCore.QDataStream.Version.Qt_4_0?10 +QtCore.QDataStream.Version.Qt_4_1?10 +QtCore.QDataStream.Version.Qt_4_2?10 +QtCore.QDataStream.Version.Qt_4_3?10 +QtCore.QDataStream.Version.Qt_4_4?10 +QtCore.QDataStream.Version.Qt_4_5?10 +QtCore.QDataStream.Version.Qt_4_6?10 +QtCore.QDataStream.Version.Qt_4_7?10 +QtCore.QDataStream.Version.Qt_4_8?10 +QtCore.QDataStream.Version.Qt_4_9?10 +QtCore.QDataStream.Version.Qt_5_0?10 +QtCore.QDataStream.Version.Qt_5_1?10 +QtCore.QDataStream.Version.Qt_5_2?10 +QtCore.QDataStream.Version.Qt_5_3?10 +QtCore.QDataStream.Version.Qt_5_4?10 +QtCore.QDataStream.Version.Qt_5_5?10 +QtCore.QDataStream.Version.Qt_5_6?10 +QtCore.QDataStream.Version.Qt_5_7?10 +QtCore.QDataStream.Version.Qt_5_8?10 +QtCore.QDataStream.Version.Qt_5_9?10 +QtCore.QDataStream.Version.Qt_5_10?10 +QtCore.QDataStream.Version.Qt_5_11?10 +QtCore.QDataStream.Version.Qt_5_12?10 +QtCore.QDataStream.Version.Qt_5_13?10 +QtCore.QDataStream.Version.Qt_5_14?10 +QtCore.QDataStream.Version.Qt_5_15?10 +QtCore.QDataStream?1() +QtCore.QDataStream.__init__?1(self) +QtCore.QDataStream?1(QIODevice) +QtCore.QDataStream.__init__?1(self, QIODevice) +QtCore.QDataStream?1(QByteArray, QIODevice.OpenMode) +QtCore.QDataStream.__init__?1(self, QByteArray, QIODevice.OpenMode) +QtCore.QDataStream?1(QByteArray) +QtCore.QDataStream.__init__?1(self, QByteArray) +QtCore.QDataStream.device?4() -> QIODevice +QtCore.QDataStream.setDevice?4(QIODevice) +QtCore.QDataStream.atEnd?4() -> bool +QtCore.QDataStream.status?4() -> QDataStream.Status +QtCore.QDataStream.setStatus?4(QDataStream.Status) +QtCore.QDataStream.resetStatus?4() +QtCore.QDataStream.byteOrder?4() -> QDataStream.ByteOrder +QtCore.QDataStream.setByteOrder?4(QDataStream.ByteOrder) +QtCore.QDataStream.version?4() -> int +QtCore.QDataStream.setVersion?4(int) +QtCore.QDataStream.skipRawData?4(int) -> int +QtCore.QDataStream.readInt?4() -> int +QtCore.QDataStream.readInt8?4() -> int +QtCore.QDataStream.readUInt8?4() -> int +QtCore.QDataStream.readInt16?4() -> int +QtCore.QDataStream.readUInt16?4() -> int +QtCore.QDataStream.readInt32?4() -> int +QtCore.QDataStream.readUInt32?4() -> int +QtCore.QDataStream.readInt64?4() -> int +QtCore.QDataStream.readUInt64?4() -> int +QtCore.QDataStream.readBool?4() -> bool +QtCore.QDataStream.readFloat?4() -> float +QtCore.QDataStream.readDouble?4() -> float +QtCore.QDataStream.readString?4() -> Any +QtCore.QDataStream.writeInt?4(int) +QtCore.QDataStream.writeInt8?4(int) +QtCore.QDataStream.writeUInt8?4(int) +QtCore.QDataStream.writeInt16?4(int) +QtCore.QDataStream.writeUInt16?4(int) +QtCore.QDataStream.writeInt32?4(int) +QtCore.QDataStream.writeUInt32?4(int) +QtCore.QDataStream.writeInt64?4(int) +QtCore.QDataStream.writeUInt64?4(int) +QtCore.QDataStream.writeBool?4(bool) +QtCore.QDataStream.writeFloat?4(float) +QtCore.QDataStream.writeDouble?4(float) +QtCore.QDataStream.writeString?4(bytes) +QtCore.QDataStream.readQString?4() -> QString +QtCore.QDataStream.writeQString?4(QString) +QtCore.QDataStream.readQStringList?4() -> QStringList +QtCore.QDataStream.writeQStringList?4(QStringList) +QtCore.QDataStream.readQVariant?4() -> QVariant +QtCore.QDataStream.writeQVariant?4(QVariant) +QtCore.QDataStream.readQVariantList?4() -> unknown-type +QtCore.QDataStream.writeQVariantList?4(unknown-type) +QtCore.QDataStream.readQVariantMap?4() -> QVariantMap +QtCore.QDataStream.writeQVariantMap?4(QVariantMap) +QtCore.QDataStream.readQVariantHash?4() -> unknown-type +QtCore.QDataStream.writeQVariantHash?4(unknown-type) +QtCore.QDataStream.readBytes?4() -> Any +QtCore.QDataStream.readRawData?4(int) -> Any +QtCore.QDataStream.writeBytes?4(bytes) -> QDataStream +QtCore.QDataStream.writeRawData?4(bytes) -> int +QtCore.QDataStream.floatingPointPrecision?4() -> QDataStream.FloatingPointPrecision +QtCore.QDataStream.setFloatingPointPrecision?4(QDataStream.FloatingPointPrecision) +QtCore.QDataStream.startTransaction?4() +QtCore.QDataStream.commitTransaction?4() -> bool +QtCore.QDataStream.rollbackTransaction?4() +QtCore.QDataStream.abortTransaction?4() +QtCore.QDate.MonthNameType?10 +QtCore.QDate.MonthNameType.DateFormat?10 +QtCore.QDate.MonthNameType.StandaloneFormat?10 +QtCore.QDate?1() +QtCore.QDate.__init__?1(self) +QtCore.QDate?1(int, int, int) +QtCore.QDate.__init__?1(self, int, int, int) +QtCore.QDate?1(int, int, int, QCalendar) +QtCore.QDate.__init__?1(self, int, int, int, QCalendar) +QtCore.QDate?1(QDate) +QtCore.QDate.__init__?1(self, QDate) +QtCore.QDate.toPyDate?4() -> Any +QtCore.QDate.isNull?4() -> bool +QtCore.QDate.isValid?4() -> bool +QtCore.QDate.year?4() -> int +QtCore.QDate.year?4(QCalendar) -> int +QtCore.QDate.month?4() -> int +QtCore.QDate.month?4(QCalendar) -> int +QtCore.QDate.day?4() -> int +QtCore.QDate.day?4(QCalendar) -> int +QtCore.QDate.dayOfWeek?4() -> int +QtCore.QDate.dayOfWeek?4(QCalendar) -> int +QtCore.QDate.dayOfYear?4() -> int +QtCore.QDate.dayOfYear?4(QCalendar) -> int +QtCore.QDate.daysInMonth?4() -> int +QtCore.QDate.daysInMonth?4(QCalendar) -> int +QtCore.QDate.daysInYear?4() -> int +QtCore.QDate.daysInYear?4(QCalendar) -> int +QtCore.QDate.weekNumber?4() -> (int, int) +QtCore.QDate.shortMonthName?4(int, QDate.MonthNameType type=QDate.DateFormat) -> QString +QtCore.QDate.shortDayName?4(int, QDate.MonthNameType type=QDate.DateFormat) -> QString +QtCore.QDate.longMonthName?4(int, QDate.MonthNameType type=QDate.DateFormat) -> QString +QtCore.QDate.longDayName?4(int, QDate.MonthNameType type=QDate.DateFormat) -> QString +QtCore.QDate.toString?4(Qt.DateFormat format=Qt.TextDate) -> QString +QtCore.QDate.toString?4(Qt.DateFormat, QCalendar) -> QString +QtCore.QDate.toString?4(QString) -> QString +QtCore.QDate.toString?4(QString, QCalendar) -> QString +QtCore.QDate.addDays?4(int) -> QDate +QtCore.QDate.addMonths?4(int) -> QDate +QtCore.QDate.addMonths?4(int, QCalendar) -> QDate +QtCore.QDate.addYears?4(int) -> QDate +QtCore.QDate.addYears?4(int, QCalendar) -> QDate +QtCore.QDate.daysTo?4(QDate) -> int +QtCore.QDate.currentDate?4() -> QDate +QtCore.QDate.fromString?4(QString, Qt.DateFormat format=Qt.TextDate) -> QDate +QtCore.QDate.fromString?4(QString, QString) -> QDate +QtCore.QDate.fromString?4(QString, QString, QCalendar) -> QDate +QtCore.QDate.isValid?4(int, int, int) -> bool +QtCore.QDate.isLeapYear?4(int) -> bool +QtCore.QDate.fromJulianDay?4(int) -> QDate +QtCore.QDate.toJulianDay?4() -> int +QtCore.QDate.setDate?4(int, int, int) -> bool +QtCore.QDate.getDate?4() -> (int, int, int) +QtCore.QDate.startOfDay?4(Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -> QDateTime +QtCore.QDate.endOfDay?4(Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -> QDateTime +QtCore.QDate.startOfDay?4(QTimeZone) -> QDateTime +QtCore.QDate.endOfDay?4(QTimeZone) -> QDateTime +QtCore.QDate.setDate?4(int, int, int, QCalendar) -> bool +QtCore.QTime?1() +QtCore.QTime.__init__?1(self) +QtCore.QTime?1(int, int, int second=0, int msec=0) +QtCore.QTime.__init__?1(self, int, int, int second=0, int msec=0) +QtCore.QTime?1(QTime) +QtCore.QTime.__init__?1(self, QTime) +QtCore.QTime.toPyTime?4() -> Any +QtCore.QTime.isNull?4() -> bool +QtCore.QTime.isValid?4() -> bool +QtCore.QTime.hour?4() -> int +QtCore.QTime.minute?4() -> int +QtCore.QTime.second?4() -> int +QtCore.QTime.msec?4() -> int +QtCore.QTime.toString?4(Qt.DateFormat format=Qt.TextDate) -> QString +QtCore.QTime.toString?4(QString) -> QString +QtCore.QTime.setHMS?4(int, int, int, int msec=0) -> bool +QtCore.QTime.addSecs?4(int) -> QTime +QtCore.QTime.secsTo?4(QTime) -> int +QtCore.QTime.addMSecs?4(int) -> QTime +QtCore.QTime.msecsTo?4(QTime) -> int +QtCore.QTime.currentTime?4() -> QTime +QtCore.QTime.fromString?4(QString, Qt.DateFormat format=Qt.TextDate) -> QTime +QtCore.QTime.fromString?4(QString, QString) -> QTime +QtCore.QTime.isValid?4(int, int, int, int msec=0) -> bool +QtCore.QTime.start?4() +QtCore.QTime.restart?4() -> int +QtCore.QTime.elapsed?4() -> int +QtCore.QTime.fromMSecsSinceStartOfDay?4(int) -> QTime +QtCore.QTime.msecsSinceStartOfDay?4() -> int +QtCore.QDateTime.YearRange?10 +QtCore.QDateTime.YearRange.First?10 +QtCore.QDateTime.YearRange.Last?10 +QtCore.QDateTime?1() +QtCore.QDateTime.__init__?1(self) +QtCore.QDateTime?1(QDateTime) +QtCore.QDateTime.__init__?1(self, QDateTime) +QtCore.QDateTime?1(QDate) +QtCore.QDateTime.__init__?1(self, QDate) +QtCore.QDateTime?1(QDate, QTime, Qt.TimeSpec timeSpec=Qt.LocalTime) +QtCore.QDateTime.__init__?1(self, QDate, QTime, Qt.TimeSpec timeSpec=Qt.LocalTime) +QtCore.QDateTime?1(int, int, int, int, int, int second=0, int msec=0, int timeSpec=0) +QtCore.QDateTime.__init__?1(self, int, int, int, int, int, int second=0, int msec=0, int timeSpec=0) +QtCore.QDateTime?1(QDate, QTime, Qt.TimeSpec, int) +QtCore.QDateTime.__init__?1(self, QDate, QTime, Qt.TimeSpec, int) +QtCore.QDateTime?1(QDate, QTime, QTimeZone) +QtCore.QDateTime.__init__?1(self, QDate, QTime, QTimeZone) +QtCore.QDateTime.toPyDateTime?4() -> Any +QtCore.QDateTime.isNull?4() -> bool +QtCore.QDateTime.isValid?4() -> bool +QtCore.QDateTime.date?4() -> QDate +QtCore.QDateTime.time?4() -> QTime +QtCore.QDateTime.timeSpec?4() -> Qt.TimeSpec +QtCore.QDateTime.toTime_t?4() -> int +QtCore.QDateTime.setDate?4(QDate) +QtCore.QDateTime.setTime?4(QTime) +QtCore.QDateTime.setTimeSpec?4(Qt.TimeSpec) +QtCore.QDateTime.setTime_t?4(int) +QtCore.QDateTime.toString?4(Qt.DateFormat format=Qt.TextDate) -> QString +QtCore.QDateTime.toString?4(QString) -> QString +QtCore.QDateTime.addDays?4(int) -> QDateTime +QtCore.QDateTime.addMonths?4(int) -> QDateTime +QtCore.QDateTime.addYears?4(int) -> QDateTime +QtCore.QDateTime.addSecs?4(int) -> QDateTime +QtCore.QDateTime.addMSecs?4(int) -> QDateTime +QtCore.QDateTime.toTimeSpec?4(Qt.TimeSpec) -> QDateTime +QtCore.QDateTime.toLocalTime?4() -> QDateTime +QtCore.QDateTime.toUTC?4() -> QDateTime +QtCore.QDateTime.daysTo?4(QDateTime) -> int +QtCore.QDateTime.secsTo?4(QDateTime) -> int +QtCore.QDateTime.currentDateTime?4() -> QDateTime +QtCore.QDateTime.fromString?4(QString, Qt.DateFormat format=Qt.TextDate) -> QDateTime +QtCore.QDateTime.fromString?4(QString, QString) -> QDateTime +QtCore.QDateTime.fromTime_t?4(int) -> QDateTime +QtCore.QDateTime.toMSecsSinceEpoch?4() -> int +QtCore.QDateTime.setMSecsSinceEpoch?4(int) +QtCore.QDateTime.msecsTo?4(QDateTime) -> int +QtCore.QDateTime.currentDateTimeUtc?4() -> QDateTime +QtCore.QDateTime.fromMSecsSinceEpoch?4(int) -> QDateTime +QtCore.QDateTime.currentMSecsSinceEpoch?4() -> int +QtCore.QDateTime.swap?4(QDateTime) +QtCore.QDateTime.offsetFromUtc?4() -> int +QtCore.QDateTime.timeZone?4() -> QTimeZone +QtCore.QDateTime.timeZoneAbbreviation?4() -> QString +QtCore.QDateTime.isDaylightTime?4() -> bool +QtCore.QDateTime.setOffsetFromUtc?4(int) +QtCore.QDateTime.setTimeZone?4(QTimeZone) +QtCore.QDateTime.toOffsetFromUtc?4(int) -> QDateTime +QtCore.QDateTime.toTimeZone?4(QTimeZone) -> QDateTime +QtCore.QDateTime.fromTime_t?4(int, Qt.TimeSpec, int offsetSeconds=0) -> QDateTime +QtCore.QDateTime.fromTime_t?4(int, QTimeZone) -> QDateTime +QtCore.QDateTime.fromMSecsSinceEpoch?4(int, Qt.TimeSpec, int offsetSeconds=0) -> QDateTime +QtCore.QDateTime.fromMSecsSinceEpoch?4(int, QTimeZone) -> QDateTime +QtCore.QDateTime.toSecsSinceEpoch?4() -> int +QtCore.QDateTime.setSecsSinceEpoch?4(int) +QtCore.QDateTime.fromSecsSinceEpoch?4(int, Qt.TimeSpec spec=Qt.LocalTime, int offsetSeconds=0) -> QDateTime +QtCore.QDateTime.fromSecsSinceEpoch?4(int, QTimeZone) -> QDateTime +QtCore.QDateTime.currentSecsSinceEpoch?4() -> int +QtCore.QDateTime.fromString?4(QString, QString, QCalendar) -> QDateTime +QtCore.QDateTime.toString?4(QString, QCalendar) -> QString +QtCore.QDeadlineTimer.ForeverConstant?10 +QtCore.QDeadlineTimer.ForeverConstant.Forever?10 +QtCore.QDeadlineTimer?1(Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer.__init__?1(self, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer?1(QDeadlineTimer.ForeverConstant, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer.__init__?1(self, QDeadlineTimer.ForeverConstant, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer?1(int, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer.__init__?1(self, int, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer?1(QDeadlineTimer) +QtCore.QDeadlineTimer.__init__?1(self, QDeadlineTimer) +QtCore.QDeadlineTimer.swap?4(QDeadlineTimer) +QtCore.QDeadlineTimer.isForever?4() -> bool +QtCore.QDeadlineTimer.hasExpired?4() -> bool +QtCore.QDeadlineTimer.timerType?4() -> Qt.TimerType +QtCore.QDeadlineTimer.setTimerType?4(Qt.TimerType) +QtCore.QDeadlineTimer.remainingTime?4() -> int +QtCore.QDeadlineTimer.remainingTimeNSecs?4() -> int +QtCore.QDeadlineTimer.setRemainingTime?4(int, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer.setPreciseRemainingTime?4(int, int nsecs=0, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer.deadline?4() -> int +QtCore.QDeadlineTimer.deadlineNSecs?4() -> int +QtCore.QDeadlineTimer.setDeadline?4(int, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer.setPreciseDeadline?4(int, int nsecs=0, Qt.TimerType type=Qt.CoarseTimer) +QtCore.QDeadlineTimer.addNSecs?4(QDeadlineTimer, int) -> QDeadlineTimer +QtCore.QDeadlineTimer.current?4(Qt.TimerType type=Qt.CoarseTimer) -> QDeadlineTimer +QtCore.QDir.SortFlag?10 +QtCore.QDir.SortFlag.Name?10 +QtCore.QDir.SortFlag.Time?10 +QtCore.QDir.SortFlag.Size?10 +QtCore.QDir.SortFlag.Unsorted?10 +QtCore.QDir.SortFlag.SortByMask?10 +QtCore.QDir.SortFlag.DirsFirst?10 +QtCore.QDir.SortFlag.Reversed?10 +QtCore.QDir.SortFlag.IgnoreCase?10 +QtCore.QDir.SortFlag.DirsLast?10 +QtCore.QDir.SortFlag.LocaleAware?10 +QtCore.QDir.SortFlag.Type?10 +QtCore.QDir.SortFlag.NoSort?10 +QtCore.QDir.Filter?10 +QtCore.QDir.Filter.Dirs?10 +QtCore.QDir.Filter.Files?10 +QtCore.QDir.Filter.Drives?10 +QtCore.QDir.Filter.NoSymLinks?10 +QtCore.QDir.Filter.AllEntries?10 +QtCore.QDir.Filter.TypeMask?10 +QtCore.QDir.Filter.Readable?10 +QtCore.QDir.Filter.Writable?10 +QtCore.QDir.Filter.Executable?10 +QtCore.QDir.Filter.PermissionMask?10 +QtCore.QDir.Filter.Modified?10 +QtCore.QDir.Filter.Hidden?10 +QtCore.QDir.Filter.System?10 +QtCore.QDir.Filter.AccessMask?10 +QtCore.QDir.Filter.AllDirs?10 +QtCore.QDir.Filter.CaseSensitive?10 +QtCore.QDir.Filter.NoDotAndDotDot?10 +QtCore.QDir.Filter.NoFilter?10 +QtCore.QDir.Filter.NoDot?10 +QtCore.QDir.Filter.NoDotDot?10 +QtCore.QDir?1(QDir) +QtCore.QDir.__init__?1(self, QDir) +QtCore.QDir?1(QString path='') +QtCore.QDir.__init__?1(self, QString path='') +QtCore.QDir?1(QString, QString, QDir.SortFlags sort=QDir.Name|QDir.IgnoreCase, QDir.Filters filters=QDir.AllEntries) +QtCore.QDir.__init__?1(self, QString, QString, QDir.SortFlags sort=QDir.Name|QDir.IgnoreCase, QDir.Filters filters=QDir.AllEntries) +QtCore.QDir.setPath?4(QString) +QtCore.QDir.path?4() -> QString +QtCore.QDir.absolutePath?4() -> QString +QtCore.QDir.canonicalPath?4() -> QString +QtCore.QDir.dirName?4() -> QString +QtCore.QDir.filePath?4(QString) -> QString +QtCore.QDir.absoluteFilePath?4(QString) -> QString +QtCore.QDir.relativeFilePath?4(QString) -> QString +QtCore.QDir.cd?4(QString) -> bool +QtCore.QDir.cdUp?4() -> bool +QtCore.QDir.nameFilters?4() -> QStringList +QtCore.QDir.setNameFilters?4(QStringList) +QtCore.QDir.filter?4() -> QDir.Filters +QtCore.QDir.setFilter?4(QDir.Filters) +QtCore.QDir.sorting?4() -> QDir.SortFlags +QtCore.QDir.setSorting?4(QDir.SortFlags) +QtCore.QDir.count?4() -> int +QtCore.QDir.nameFiltersFromString?4(QString) -> QStringList +QtCore.QDir.entryList?4(QDir.Filters filters=QDir.NoFilter, QDir.SortFlags sort=QDir.SortFlag.NoSort) -> QStringList +QtCore.QDir.entryList?4(QStringList, QDir.Filters filters=QDir.NoFilter, QDir.SortFlags sort=QDir.SortFlag.NoSort) -> QStringList +QtCore.QDir.entryInfoList?4(QDir.Filters filters=QDir.NoFilter, QDir.SortFlags sort=QDir.SortFlag.NoSort) -> unknown-type +QtCore.QDir.entryInfoList?4(QStringList, QDir.Filters filters=QDir.NoFilter, QDir.SortFlags sort=QDir.SortFlag.NoSort) -> unknown-type +QtCore.QDir.mkdir?4(QString) -> bool +QtCore.QDir.rmdir?4(QString) -> bool +QtCore.QDir.mkpath?4(QString) -> bool +QtCore.QDir.rmpath?4(QString) -> bool +QtCore.QDir.isReadable?4() -> bool +QtCore.QDir.exists?4() -> bool +QtCore.QDir.isRoot?4() -> bool +QtCore.QDir.isRelativePath?4(QString) -> bool +QtCore.QDir.isAbsolutePath?4(QString) -> bool +QtCore.QDir.isRelative?4() -> bool +QtCore.QDir.isAbsolute?4() -> bool +QtCore.QDir.makeAbsolute?4() -> bool +QtCore.QDir.remove?4(QString) -> bool +QtCore.QDir.rename?4(QString, QString) -> bool +QtCore.QDir.exists?4(QString) -> bool +QtCore.QDir.refresh?4() +QtCore.QDir.drives?4() -> unknown-type +QtCore.QDir.separator?4() -> QChar +QtCore.QDir.setCurrent?4(QString) -> bool +QtCore.QDir.current?4() -> QDir +QtCore.QDir.currentPath?4() -> QString +QtCore.QDir.home?4() -> QDir +QtCore.QDir.homePath?4() -> QString +QtCore.QDir.root?4() -> QDir +QtCore.QDir.rootPath?4() -> QString +QtCore.QDir.temp?4() -> QDir +QtCore.QDir.tempPath?4() -> QString +QtCore.QDir.match?4(QStringList, QString) -> bool +QtCore.QDir.match?4(QString, QString) -> bool +QtCore.QDir.cleanPath?4(QString) -> QString +QtCore.QDir.toNativeSeparators?4(QString) -> QString +QtCore.QDir.fromNativeSeparators?4(QString) -> QString +QtCore.QDir.setSearchPaths?4(QString, QStringList) +QtCore.QDir.addSearchPath?4(QString, QString) +QtCore.QDir.searchPaths?4(QString) -> QStringList +QtCore.QDir.removeRecursively?4() -> bool +QtCore.QDir.swap?4(QDir) +QtCore.QDir.listSeparator?4() -> QChar +QtCore.QDir.isEmpty?4(QDir.Filters filters=QDir.AllEntries|QDir.NoDotAndDotDot) -> bool +QtCore.QDir.Filters?1() +QtCore.QDir.Filters.__init__?1(self) +QtCore.QDir.Filters?1(int) +QtCore.QDir.Filters.__init__?1(self, int) +QtCore.QDir.Filters?1(QDir.Filters) +QtCore.QDir.Filters.__init__?1(self, QDir.Filters) +QtCore.QDir.SortFlags?1() +QtCore.QDir.SortFlags.__init__?1(self) +QtCore.QDir.SortFlags?1(int) +QtCore.QDir.SortFlags.__init__?1(self, int) +QtCore.QDir.SortFlags?1(QDir.SortFlags) +QtCore.QDir.SortFlags.__init__?1(self, QDir.SortFlags) +QtCore.QDirIterator.IteratorFlag?10 +QtCore.QDirIterator.IteratorFlag.NoIteratorFlags?10 +QtCore.QDirIterator.IteratorFlag.FollowSymlinks?10 +QtCore.QDirIterator.IteratorFlag.Subdirectories?10 +QtCore.QDirIterator?1(QDir, QDirIterator.IteratorFlags flags=QDirIterator.NoIteratorFlags) +QtCore.QDirIterator.__init__?1(self, QDir, QDirIterator.IteratorFlags flags=QDirIterator.NoIteratorFlags) +QtCore.QDirIterator?1(QString, QDirIterator.IteratorFlags flags=QDirIterator.NoIteratorFlags) +QtCore.QDirIterator.__init__?1(self, QString, QDirIterator.IteratorFlags flags=QDirIterator.NoIteratorFlags) +QtCore.QDirIterator?1(QString, QDir.Filters, QDirIterator.IteratorFlags flags=QDirIterator.NoIteratorFlags) +QtCore.QDirIterator.__init__?1(self, QString, QDir.Filters, QDirIterator.IteratorFlags flags=QDirIterator.NoIteratorFlags) +QtCore.QDirIterator?1(QString, QStringList, QDir.Filters filters=QDir.NoFilter, QDirIterator.IteratorFlags flags=QDirIterator.NoIteratorFlags) +QtCore.QDirIterator.__init__?1(self, QString, QStringList, QDir.Filters filters=QDir.NoFilter, QDirIterator.IteratorFlags flags=QDirIterator.NoIteratorFlags) +QtCore.QDirIterator.next?4() -> QString +QtCore.QDirIterator.hasNext?4() -> bool +QtCore.QDirIterator.fileName?4() -> QString +QtCore.QDirIterator.filePath?4() -> QString +QtCore.QDirIterator.fileInfo?4() -> QFileInfo +QtCore.QDirIterator.path?4() -> QString +QtCore.QDirIterator.IteratorFlags?1() +QtCore.QDirIterator.IteratorFlags.__init__?1(self) +QtCore.QDirIterator.IteratorFlags?1(int) +QtCore.QDirIterator.IteratorFlags.__init__?1(self, int) +QtCore.QDirIterator.IteratorFlags?1(QDirIterator.IteratorFlags) +QtCore.QDirIterator.IteratorFlags.__init__?1(self, QDirIterator.IteratorFlags) +QtCore.QEasingCurve.Type?10 +QtCore.QEasingCurve.Type.Linear?10 +QtCore.QEasingCurve.Type.InQuad?10 +QtCore.QEasingCurve.Type.OutQuad?10 +QtCore.QEasingCurve.Type.InOutQuad?10 +QtCore.QEasingCurve.Type.OutInQuad?10 +QtCore.QEasingCurve.Type.InCubic?10 +QtCore.QEasingCurve.Type.OutCubic?10 +QtCore.QEasingCurve.Type.InOutCubic?10 +QtCore.QEasingCurve.Type.OutInCubic?10 +QtCore.QEasingCurve.Type.InQuart?10 +QtCore.QEasingCurve.Type.OutQuart?10 +QtCore.QEasingCurve.Type.InOutQuart?10 +QtCore.QEasingCurve.Type.OutInQuart?10 +QtCore.QEasingCurve.Type.InQuint?10 +QtCore.QEasingCurve.Type.OutQuint?10 +QtCore.QEasingCurve.Type.InOutQuint?10 +QtCore.QEasingCurve.Type.OutInQuint?10 +QtCore.QEasingCurve.Type.InSine?10 +QtCore.QEasingCurve.Type.OutSine?10 +QtCore.QEasingCurve.Type.InOutSine?10 +QtCore.QEasingCurve.Type.OutInSine?10 +QtCore.QEasingCurve.Type.InExpo?10 +QtCore.QEasingCurve.Type.OutExpo?10 +QtCore.QEasingCurve.Type.InOutExpo?10 +QtCore.QEasingCurve.Type.OutInExpo?10 +QtCore.QEasingCurve.Type.InCirc?10 +QtCore.QEasingCurve.Type.OutCirc?10 +QtCore.QEasingCurve.Type.InOutCirc?10 +QtCore.QEasingCurve.Type.OutInCirc?10 +QtCore.QEasingCurve.Type.InElastic?10 +QtCore.QEasingCurve.Type.OutElastic?10 +QtCore.QEasingCurve.Type.InOutElastic?10 +QtCore.QEasingCurve.Type.OutInElastic?10 +QtCore.QEasingCurve.Type.InBack?10 +QtCore.QEasingCurve.Type.OutBack?10 +QtCore.QEasingCurve.Type.InOutBack?10 +QtCore.QEasingCurve.Type.OutInBack?10 +QtCore.QEasingCurve.Type.InBounce?10 +QtCore.QEasingCurve.Type.OutBounce?10 +QtCore.QEasingCurve.Type.InOutBounce?10 +QtCore.QEasingCurve.Type.OutInBounce?10 +QtCore.QEasingCurve.Type.InCurve?10 +QtCore.QEasingCurve.Type.OutCurve?10 +QtCore.QEasingCurve.Type.SineCurve?10 +QtCore.QEasingCurve.Type.CosineCurve?10 +QtCore.QEasingCurve.Type.BezierSpline?10 +QtCore.QEasingCurve.Type.TCBSpline?10 +QtCore.QEasingCurve.Type.Custom?10 +QtCore.QEasingCurve?1(QEasingCurve.Type type=QEasingCurve.Linear) +QtCore.QEasingCurve.__init__?1(self, QEasingCurve.Type type=QEasingCurve.Linear) +QtCore.QEasingCurve?1(QEasingCurve) +QtCore.QEasingCurve.__init__?1(self, QEasingCurve) +QtCore.QEasingCurve.amplitude?4() -> float +QtCore.QEasingCurve.setAmplitude?4(float) +QtCore.QEasingCurve.period?4() -> float +QtCore.QEasingCurve.setPeriod?4(float) +QtCore.QEasingCurve.overshoot?4() -> float +QtCore.QEasingCurve.setOvershoot?4(float) +QtCore.QEasingCurve.type?4() -> QEasingCurve.Type +QtCore.QEasingCurve.setType?4(QEasingCurve.Type) +QtCore.QEasingCurve.setCustomType?4(Callable[..., None]) +QtCore.QEasingCurve.customType?4() -> Callable[..., None] +QtCore.QEasingCurve.valueForProgress?4(float) -> float +QtCore.QEasingCurve.swap?4(QEasingCurve) +QtCore.QEasingCurve.addCubicBezierSegment?4(QPointF, QPointF, QPointF) +QtCore.QEasingCurve.addTCBSegment?4(QPointF, float, float, float) +QtCore.QEasingCurve.toCubicSpline?4() -> unknown-type +QtCore.QElapsedTimer.ClockType?10 +QtCore.QElapsedTimer.ClockType.SystemTime?10 +QtCore.QElapsedTimer.ClockType.MonotonicClock?10 +QtCore.QElapsedTimer.ClockType.TickCounter?10 +QtCore.QElapsedTimer.ClockType.MachAbsoluteTime?10 +QtCore.QElapsedTimer.ClockType.PerformanceCounter?10 +QtCore.QElapsedTimer?1() +QtCore.QElapsedTimer.__init__?1(self) +QtCore.QElapsedTimer?1(QElapsedTimer) +QtCore.QElapsedTimer.__init__?1(self, QElapsedTimer) +QtCore.QElapsedTimer.clockType?4() -> QElapsedTimer.ClockType +QtCore.QElapsedTimer.isMonotonic?4() -> bool +QtCore.QElapsedTimer.start?4() +QtCore.QElapsedTimer.restart?4() -> int +QtCore.QElapsedTimer.invalidate?4() +QtCore.QElapsedTimer.isValid?4() -> bool +QtCore.QElapsedTimer.elapsed?4() -> int +QtCore.QElapsedTimer.hasExpired?4(int) -> bool +QtCore.QElapsedTimer.msecsSinceReference?4() -> int +QtCore.QElapsedTimer.msecsTo?4(QElapsedTimer) -> int +QtCore.QElapsedTimer.secsTo?4(QElapsedTimer) -> int +QtCore.QElapsedTimer.nsecsElapsed?4() -> int +QtCore.QEventLoop.ProcessEventsFlag?10 +QtCore.QEventLoop.ProcessEventsFlag.AllEvents?10 +QtCore.QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents?10 +QtCore.QEventLoop.ProcessEventsFlag.ExcludeSocketNotifiers?10 +QtCore.QEventLoop.ProcessEventsFlag.WaitForMoreEvents?10 +QtCore.QEventLoop.ProcessEventsFlag.X11ExcludeTimers?10 +QtCore.QEventLoop?1(QObject parent=None) +QtCore.QEventLoop.__init__?1(self, QObject parent=None) +QtCore.QEventLoop.processEvents?4(QEventLoop.ProcessEventsFlags flags=QEventLoop.AllEvents) -> bool +QtCore.QEventLoop.processEvents?4(QEventLoop.ProcessEventsFlags, int) +QtCore.QEventLoop.exec_?4(QEventLoop.ProcessEventsFlags flags=QEventLoop.AllEvents) -> int +QtCore.QEventLoop.exec?4(QEventLoop.ProcessEventsFlags flags=QEventLoop.AllEvents) -> int +QtCore.QEventLoop.exit?4(int returnCode=0) +QtCore.QEventLoop.isRunning?4() -> bool +QtCore.QEventLoop.wakeUp?4() +QtCore.QEventLoop.quit?4() +QtCore.QEventLoop.event?4(QEvent) -> bool +QtCore.QEventLoop.ProcessEventsFlags?1() +QtCore.QEventLoop.ProcessEventsFlags.__init__?1(self) +QtCore.QEventLoop.ProcessEventsFlags?1(int) +QtCore.QEventLoop.ProcessEventsFlags.__init__?1(self, int) +QtCore.QEventLoop.ProcessEventsFlags?1(QEventLoop.ProcessEventsFlags) +QtCore.QEventLoop.ProcessEventsFlags.__init__?1(self, QEventLoop.ProcessEventsFlags) +QtCore.QEventLoopLocker?1() +QtCore.QEventLoopLocker.__init__?1(self) +QtCore.QEventLoopLocker?1(QEventLoop) +QtCore.QEventLoopLocker.__init__?1(self, QEventLoop) +QtCore.QEventLoopLocker?1(QThread) +QtCore.QEventLoopLocker.__init__?1(self, QThread) +QtCore.QEventTransition?1(QState sourceState=None) +QtCore.QEventTransition.__init__?1(self, QState sourceState=None) +QtCore.QEventTransition?1(QObject, QEvent.Type, QState sourceState=None) +QtCore.QEventTransition.__init__?1(self, QObject, QEvent.Type, QState sourceState=None) +QtCore.QEventTransition.eventSource?4() -> QObject +QtCore.QEventTransition.setEventSource?4(QObject) +QtCore.QEventTransition.eventType?4() -> QEvent.Type +QtCore.QEventTransition.setEventType?4(QEvent.Type) +QtCore.QEventTransition.eventTest?4(QEvent) -> bool +QtCore.QEventTransition.onTransition?4(QEvent) +QtCore.QEventTransition.event?4(QEvent) -> bool +QtCore.QFileDevice.FileTime?10 +QtCore.QFileDevice.FileTime.FileAccessTime?10 +QtCore.QFileDevice.FileTime.FileBirthTime?10 +QtCore.QFileDevice.FileTime.FileMetadataChangeTime?10 +QtCore.QFileDevice.FileTime.FileModificationTime?10 +QtCore.QFileDevice.MemoryMapFlags?10 +QtCore.QFileDevice.MemoryMapFlags.NoOptions?10 +QtCore.QFileDevice.MemoryMapFlags.MapPrivateOption?10 +QtCore.QFileDevice.FileHandleFlag?10 +QtCore.QFileDevice.FileHandleFlag.AutoCloseHandle?10 +QtCore.QFileDevice.FileHandleFlag.DontCloseHandle?10 +QtCore.QFileDevice.Permission?10 +QtCore.QFileDevice.Permission.ReadOwner?10 +QtCore.QFileDevice.Permission.WriteOwner?10 +QtCore.QFileDevice.Permission.ExeOwner?10 +QtCore.QFileDevice.Permission.ReadUser?10 +QtCore.QFileDevice.Permission.WriteUser?10 +QtCore.QFileDevice.Permission.ExeUser?10 +QtCore.QFileDevice.Permission.ReadGroup?10 +QtCore.QFileDevice.Permission.WriteGroup?10 +QtCore.QFileDevice.Permission.ExeGroup?10 +QtCore.QFileDevice.Permission.ReadOther?10 +QtCore.QFileDevice.Permission.WriteOther?10 +QtCore.QFileDevice.Permission.ExeOther?10 +QtCore.QFileDevice.FileError?10 +QtCore.QFileDevice.FileError.NoError?10 +QtCore.QFileDevice.FileError.ReadError?10 +QtCore.QFileDevice.FileError.WriteError?10 +QtCore.QFileDevice.FileError.FatalError?10 +QtCore.QFileDevice.FileError.ResourceError?10 +QtCore.QFileDevice.FileError.OpenError?10 +QtCore.QFileDevice.FileError.AbortError?10 +QtCore.QFileDevice.FileError.TimeOutError?10 +QtCore.QFileDevice.FileError.UnspecifiedError?10 +QtCore.QFileDevice.FileError.RemoveError?10 +QtCore.QFileDevice.FileError.RenameError?10 +QtCore.QFileDevice.FileError.PositionError?10 +QtCore.QFileDevice.FileError.ResizeError?10 +QtCore.QFileDevice.FileError.PermissionsError?10 +QtCore.QFileDevice.FileError.CopyError?10 +QtCore.QFileDevice.error?4() -> QFileDevice.FileError +QtCore.QFileDevice.unsetError?4() +QtCore.QFileDevice.close?4() +QtCore.QFileDevice.isSequential?4() -> bool +QtCore.QFileDevice.handle?4() -> int +QtCore.QFileDevice.fileName?4() -> QString +QtCore.QFileDevice.pos?4() -> int +QtCore.QFileDevice.seek?4(int) -> bool +QtCore.QFileDevice.atEnd?4() -> bool +QtCore.QFileDevice.flush?4() -> bool +QtCore.QFileDevice.size?4() -> int +QtCore.QFileDevice.resize?4(int) -> bool +QtCore.QFileDevice.permissions?4() -> QFileDevice.Permissions +QtCore.QFileDevice.setPermissions?4(QFileDevice.Permissions) -> bool +QtCore.QFileDevice.map?4(int, int, QFileDevice.MemoryMapFlags flags=QFileDevice.NoOptions) -> PyQt5.sip.voidptr +QtCore.QFileDevice.unmap?4(PyQt5.sip.voidptr) -> bool +QtCore.QFileDevice.readData?4(int) -> Any +QtCore.QFileDevice.writeData?4(bytes) -> int +QtCore.QFileDevice.readLineData?4(int) -> Any +QtCore.QFileDevice.fileTime?4(QFileDevice.FileTime) -> QDateTime +QtCore.QFileDevice.setFileTime?4(QDateTime, QFileDevice.FileTime) -> bool +QtCore.QFile?1() +QtCore.QFile.__init__?1(self) +QtCore.QFile?1(QString) +QtCore.QFile.__init__?1(self, QString) +QtCore.QFile?1(QObject) +QtCore.QFile.__init__?1(self, QObject) +QtCore.QFile?1(QString, QObject) +QtCore.QFile.__init__?1(self, QString, QObject) +QtCore.QFile.fileName?4() -> QString +QtCore.QFile.setFileName?4(QString) +QtCore.QFile.encodeName?4(QString) -> QByteArray +QtCore.QFile.decodeName?4(QByteArray) -> QString +QtCore.QFile.decodeName?4(str) -> QString +QtCore.QFile.exists?4() -> bool +QtCore.QFile.exists?4(QString) -> bool +QtCore.QFile.symLinkTarget?4() -> QString +QtCore.QFile.symLinkTarget?4(QString) -> QString +QtCore.QFile.remove?4() -> bool +QtCore.QFile.remove?4(QString) -> bool +QtCore.QFile.rename?4(QString) -> bool +QtCore.QFile.rename?4(QString, QString) -> bool +QtCore.QFile.link?4(QString) -> bool +QtCore.QFile.link?4(QString, QString) -> bool +QtCore.QFile.copy?4(QString) -> bool +QtCore.QFile.copy?4(QString, QString) -> bool +QtCore.QFile.open?4(QIODevice.OpenMode) -> bool +QtCore.QFile.open?4(int, QIODevice.OpenMode, QFileDevice.FileHandleFlags handleFlags=QFileDevice.FileHandleFlag.DontCloseHandle) -> bool +QtCore.QFile.size?4() -> int +QtCore.QFile.resize?4(int) -> bool +QtCore.QFile.resize?4(QString, int) -> bool +QtCore.QFile.permissions?4() -> QFileDevice.Permissions +QtCore.QFile.permissions?4(QString) -> QFileDevice.Permissions +QtCore.QFile.setPermissions?4(QFileDevice.Permissions) -> bool +QtCore.QFile.setPermissions?4(QString, QFileDevice.Permissions) -> bool +QtCore.QFile.moveToTrash?4() -> bool +QtCore.QFile.moveToTrash?4(QString) -> (bool, QString) +QtCore.QFileDevice.Permissions?1() +QtCore.QFileDevice.Permissions.__init__?1(self) +QtCore.QFileDevice.Permissions?1(int) +QtCore.QFileDevice.Permissions.__init__?1(self, int) +QtCore.QFileDevice.Permissions?1(QFileDevice.Permissions) +QtCore.QFileDevice.Permissions.__init__?1(self, QFileDevice.Permissions) +QtCore.QFileDevice.FileHandleFlags?1() +QtCore.QFileDevice.FileHandleFlags.__init__?1(self) +QtCore.QFileDevice.FileHandleFlags?1(int) +QtCore.QFileDevice.FileHandleFlags.__init__?1(self, int) +QtCore.QFileDevice.FileHandleFlags?1(QFileDevice.FileHandleFlags) +QtCore.QFileDevice.FileHandleFlags.__init__?1(self, QFileDevice.FileHandleFlags) +QtCore.QFileInfo?1() +QtCore.QFileInfo.__init__?1(self) +QtCore.QFileInfo?1(QString) +QtCore.QFileInfo.__init__?1(self, QString) +QtCore.QFileInfo?1(QFile) +QtCore.QFileInfo.__init__?1(self, QFile) +QtCore.QFileInfo?1(QDir, QString) +QtCore.QFileInfo.__init__?1(self, QDir, QString) +QtCore.QFileInfo?1(QFileInfo) +QtCore.QFileInfo.__init__?1(self, QFileInfo) +QtCore.QFileInfo.setFile?4(QString) +QtCore.QFileInfo.setFile?4(QFile) +QtCore.QFileInfo.setFile?4(QDir, QString) +QtCore.QFileInfo.exists?4() -> bool +QtCore.QFileInfo.refresh?4() +QtCore.QFileInfo.filePath?4() -> QString +QtCore.QFileInfo.__fspath__?4() -> Any +QtCore.QFileInfo.absoluteFilePath?4() -> QString +QtCore.QFileInfo.canonicalFilePath?4() -> QString +QtCore.QFileInfo.fileName?4() -> QString +QtCore.QFileInfo.baseName?4() -> QString +QtCore.QFileInfo.completeBaseName?4() -> QString +QtCore.QFileInfo.suffix?4() -> QString +QtCore.QFileInfo.completeSuffix?4() -> QString +QtCore.QFileInfo.path?4() -> QString +QtCore.QFileInfo.absolutePath?4() -> QString +QtCore.QFileInfo.canonicalPath?4() -> QString +QtCore.QFileInfo.dir?4() -> QDir +QtCore.QFileInfo.absoluteDir?4() -> QDir +QtCore.QFileInfo.isReadable?4() -> bool +QtCore.QFileInfo.isWritable?4() -> bool +QtCore.QFileInfo.isExecutable?4() -> bool +QtCore.QFileInfo.isHidden?4() -> bool +QtCore.QFileInfo.isRelative?4() -> bool +QtCore.QFileInfo.isAbsolute?4() -> bool +QtCore.QFileInfo.makeAbsolute?4() -> bool +QtCore.QFileInfo.isFile?4() -> bool +QtCore.QFileInfo.isDir?4() -> bool +QtCore.QFileInfo.isSymLink?4() -> bool +QtCore.QFileInfo.isRoot?4() -> bool +QtCore.QFileInfo.owner?4() -> QString +QtCore.QFileInfo.ownerId?4() -> int +QtCore.QFileInfo.group?4() -> QString +QtCore.QFileInfo.groupId?4() -> int +QtCore.QFileInfo.permission?4(QFileDevice.Permissions) -> bool +QtCore.QFileInfo.permissions?4() -> QFileDevice.Permissions +QtCore.QFileInfo.size?4() -> int +QtCore.QFileInfo.created?4() -> QDateTime +QtCore.QFileInfo.lastModified?4() -> QDateTime +QtCore.QFileInfo.lastRead?4() -> QDateTime +QtCore.QFileInfo.caching?4() -> bool +QtCore.QFileInfo.setCaching?4(bool) +QtCore.QFileInfo.symLinkTarget?4() -> QString +QtCore.QFileInfo.bundleName?4() -> QString +QtCore.QFileInfo.isBundle?4() -> bool +QtCore.QFileInfo.isNativePath?4() -> bool +QtCore.QFileInfo.swap?4(QFileInfo) +QtCore.QFileInfo.exists?4(QString) -> bool +QtCore.QFileInfo.birthTime?4() -> QDateTime +QtCore.QFileInfo.metadataChangeTime?4() -> QDateTime +QtCore.QFileInfo.fileTime?4(QFileDevice.FileTime) -> QDateTime +QtCore.QFileInfo.isSymbolicLink?4() -> bool +QtCore.QFileInfo.isShortcut?4() -> bool +QtCore.QFileInfo.isJunction?4() -> bool +QtCore.QFileSelector?1(QObject parent=None) +QtCore.QFileSelector.__init__?1(self, QObject parent=None) +QtCore.QFileSelector.select?4(QString) -> QString +QtCore.QFileSelector.select?4(QUrl) -> QUrl +QtCore.QFileSelector.extraSelectors?4() -> QStringList +QtCore.QFileSelector.setExtraSelectors?4(QStringList) +QtCore.QFileSelector.allSelectors?4() -> QStringList +QtCore.QFileSystemWatcher?1(QObject parent=None) +QtCore.QFileSystemWatcher.__init__?1(self, QObject parent=None) +QtCore.QFileSystemWatcher?1(QStringList, QObject parent=None) +QtCore.QFileSystemWatcher.__init__?1(self, QStringList, QObject parent=None) +QtCore.QFileSystemWatcher.addPath?4(QString) -> bool +QtCore.QFileSystemWatcher.addPaths?4(QStringList) -> QStringList +QtCore.QFileSystemWatcher.directories?4() -> QStringList +QtCore.QFileSystemWatcher.files?4() -> QStringList +QtCore.QFileSystemWatcher.removePath?4(QString) -> bool +QtCore.QFileSystemWatcher.removePaths?4(QStringList) -> QStringList +QtCore.QFileSystemWatcher.directoryChanged?4(QString) +QtCore.QFileSystemWatcher.fileChanged?4(QString) +QtCore.QFinalState?1(QState parent=None) +QtCore.QFinalState.__init__?1(self, QState parent=None) +QtCore.QFinalState.onEntry?4(QEvent) +QtCore.QFinalState.onExit?4(QEvent) +QtCore.QFinalState.event?4(QEvent) -> bool +QtCore.QHistoryState.HistoryType?10 +QtCore.QHistoryState.HistoryType.ShallowHistory?10 +QtCore.QHistoryState.HistoryType.DeepHistory?10 +QtCore.QHistoryState?1(QState parent=None) +QtCore.QHistoryState.__init__?1(self, QState parent=None) +QtCore.QHistoryState?1(QHistoryState.HistoryType, QState parent=None) +QtCore.QHistoryState.__init__?1(self, QHistoryState.HistoryType, QState parent=None) +QtCore.QHistoryState.defaultState?4() -> QAbstractState +QtCore.QHistoryState.setDefaultState?4(QAbstractState) +QtCore.QHistoryState.historyType?4() -> QHistoryState.HistoryType +QtCore.QHistoryState.setHistoryType?4(QHistoryState.HistoryType) +QtCore.QHistoryState.onEntry?4(QEvent) +QtCore.QHistoryState.onExit?4(QEvent) +QtCore.QHistoryState.event?4(QEvent) -> bool +QtCore.QHistoryState.defaultStateChanged?4() +QtCore.QHistoryState.historyTypeChanged?4() +QtCore.QHistoryState.defaultTransition?4() -> QAbstractTransition +QtCore.QHistoryState.setDefaultTransition?4(QAbstractTransition) +QtCore.QHistoryState.defaultTransitionChanged?4() +QtCore.QIdentityProxyModel?1(QObject parent=None) +QtCore.QIdentityProxyModel.__init__?1(self, QObject parent=None) +QtCore.QIdentityProxyModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QIdentityProxyModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtCore.QIdentityProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex +QtCore.QIdentityProxyModel.mapToSource?4(QModelIndex) -> QModelIndex +QtCore.QIdentityProxyModel.parent?4(QModelIndex) -> QModelIndex +QtCore.QIdentityProxyModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QIdentityProxyModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QIdentityProxyModel.mapSelectionFromSource?4(QItemSelection) -> QItemSelection +QtCore.QIdentityProxyModel.mapSelectionToSource?4(QItemSelection) -> QItemSelection +QtCore.QIdentityProxyModel.match?4(QModelIndex, int, QVariant, int hits=1, Qt.MatchFlags flags=Qt.MatchStartsWith|Qt.MatchWrap) -> unknown-type +QtCore.QIdentityProxyModel.setSourceModel?4(QAbstractItemModel) +QtCore.QIdentityProxyModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QIdentityProxyModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QIdentityProxyModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QIdentityProxyModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QIdentityProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant +QtCore.QIdentityProxyModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtCore.QIdentityProxyModel.moveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QIdentityProxyModel.moveColumns?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QIODevice.OpenMode?1() +QtCore.QIODevice.OpenMode.__init__?1(self) +QtCore.QIODevice.OpenMode?1(int) +QtCore.QIODevice.OpenMode.__init__?1(self, int) +QtCore.QIODevice.OpenMode?1(QIODevice.OpenMode) +QtCore.QIODevice.OpenMode.__init__?1(self, QIODevice.OpenMode) +QtCore.QItemSelectionRange?1() +QtCore.QItemSelectionRange.__init__?1(self) +QtCore.QItemSelectionRange?1(QItemSelectionRange) +QtCore.QItemSelectionRange.__init__?1(self, QItemSelectionRange) +QtCore.QItemSelectionRange?1(QModelIndex, QModelIndex) +QtCore.QItemSelectionRange.__init__?1(self, QModelIndex, QModelIndex) +QtCore.QItemSelectionRange?1(QModelIndex) +QtCore.QItemSelectionRange.__init__?1(self, QModelIndex) +QtCore.QItemSelectionRange.top?4() -> int +QtCore.QItemSelectionRange.left?4() -> int +QtCore.QItemSelectionRange.bottom?4() -> int +QtCore.QItemSelectionRange.right?4() -> int +QtCore.QItemSelectionRange.width?4() -> int +QtCore.QItemSelectionRange.height?4() -> int +QtCore.QItemSelectionRange.topLeft?4() -> QPersistentModelIndex +QtCore.QItemSelectionRange.bottomRight?4() -> QPersistentModelIndex +QtCore.QItemSelectionRange.parent?4() -> QModelIndex +QtCore.QItemSelectionRange.model?4() -> QAbstractItemModel +QtCore.QItemSelectionRange.contains?4(QModelIndex) -> bool +QtCore.QItemSelectionRange.contains?4(int, int, QModelIndex) -> bool +QtCore.QItemSelectionRange.intersects?4(QItemSelectionRange) -> bool +QtCore.QItemSelectionRange.isValid?4() -> bool +QtCore.QItemSelectionRange.indexes?4() -> unknown-type +QtCore.QItemSelectionRange.intersected?4(QItemSelectionRange) -> QItemSelectionRange +QtCore.QItemSelectionRange.isEmpty?4() -> bool +QtCore.QItemSelectionRange.swap?4(QItemSelectionRange) +QtCore.QItemSelectionModel.SelectionFlag?10 +QtCore.QItemSelectionModel.SelectionFlag.NoUpdate?10 +QtCore.QItemSelectionModel.SelectionFlag.Clear?10 +QtCore.QItemSelectionModel.SelectionFlag.Select?10 +QtCore.QItemSelectionModel.SelectionFlag.Deselect?10 +QtCore.QItemSelectionModel.SelectionFlag.Toggle?10 +QtCore.QItemSelectionModel.SelectionFlag.Current?10 +QtCore.QItemSelectionModel.SelectionFlag.Rows?10 +QtCore.QItemSelectionModel.SelectionFlag.Columns?10 +QtCore.QItemSelectionModel.SelectionFlag.SelectCurrent?10 +QtCore.QItemSelectionModel.SelectionFlag.ToggleCurrent?10 +QtCore.QItemSelectionModel.SelectionFlag.ClearAndSelect?10 +QtCore.QItemSelectionModel?1(QAbstractItemModel model=None) +QtCore.QItemSelectionModel.__init__?1(self, QAbstractItemModel model=None) +QtCore.QItemSelectionModel?1(QAbstractItemModel, QObject) +QtCore.QItemSelectionModel.__init__?1(self, QAbstractItemModel, QObject) +QtCore.QItemSelectionModel.currentIndex?4() -> QModelIndex +QtCore.QItemSelectionModel.isSelected?4(QModelIndex) -> bool +QtCore.QItemSelectionModel.isRowSelected?4(int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QItemSelectionModel.isColumnSelected?4(int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QItemSelectionModel.rowIntersectsSelection?4(int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QItemSelectionModel.columnIntersectsSelection?4(int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QItemSelectionModel.selectedIndexes?4() -> unknown-type +QtCore.QItemSelectionModel.selection?4() -> QItemSelection +QtCore.QItemSelectionModel.model?4() -> QAbstractItemModel +QtCore.QItemSelectionModel.clear?4() +QtCore.QItemSelectionModel.clearSelection?4() +QtCore.QItemSelectionModel.reset?4() +QtCore.QItemSelectionModel.select?4(QModelIndex, QItemSelectionModel.SelectionFlags) +QtCore.QItemSelectionModel.select?4(QItemSelection, QItemSelectionModel.SelectionFlags) +QtCore.QItemSelectionModel.setCurrentIndex?4(QModelIndex, QItemSelectionModel.SelectionFlags) +QtCore.QItemSelectionModel.clearCurrentIndex?4() +QtCore.QItemSelectionModel.selectionChanged?4(QItemSelection, QItemSelection) +QtCore.QItemSelectionModel.currentChanged?4(QModelIndex, QModelIndex) +QtCore.QItemSelectionModel.currentRowChanged?4(QModelIndex, QModelIndex) +QtCore.QItemSelectionModel.currentColumnChanged?4(QModelIndex, QModelIndex) +QtCore.QItemSelectionModel.emitSelectionChanged?4(QItemSelection, QItemSelection) +QtCore.QItemSelectionModel.hasSelection?4() -> bool +QtCore.QItemSelectionModel.selectedRows?4(int column=0) -> unknown-type +QtCore.QItemSelectionModel.selectedColumns?4(int row=0) -> unknown-type +QtCore.QItemSelectionModel.setModel?4(QAbstractItemModel) +QtCore.QItemSelectionModel.modelChanged?4(QAbstractItemModel) +QtCore.QItemSelectionModel.SelectionFlags?1() +QtCore.QItemSelectionModel.SelectionFlags.__init__?1(self) +QtCore.QItemSelectionModel.SelectionFlags?1(int) +QtCore.QItemSelectionModel.SelectionFlags.__init__?1(self, int) +QtCore.QItemSelectionModel.SelectionFlags?1(QItemSelectionModel.SelectionFlags) +QtCore.QItemSelectionModel.SelectionFlags.__init__?1(self, QItemSelectionModel.SelectionFlags) +QtCore.QItemSelection?1() +QtCore.QItemSelection.__init__?1(self) +QtCore.QItemSelection?1(QModelIndex, QModelIndex) +QtCore.QItemSelection.__init__?1(self, QModelIndex, QModelIndex) +QtCore.QItemSelection?1(QItemSelection) +QtCore.QItemSelection.__init__?1(self, QItemSelection) +QtCore.QItemSelection.select?4(QModelIndex, QModelIndex) +QtCore.QItemSelection.contains?4(QModelIndex) -> bool +QtCore.QItemSelection.indexes?4() -> unknown-type +QtCore.QItemSelection.merge?4(QItemSelection, QItemSelectionModel.SelectionFlags) +QtCore.QItemSelection.split?4(QItemSelectionRange, QItemSelectionRange, QItemSelection) +QtCore.QItemSelection.clear?4() +QtCore.QItemSelection.isEmpty?4() -> bool +QtCore.QItemSelection.append?4(QItemSelectionRange) +QtCore.QItemSelection.prepend?4(QItemSelectionRange) +QtCore.QItemSelection.insert?4(int, QItemSelectionRange) +QtCore.QItemSelection.replace?4(int, QItemSelectionRange) +QtCore.QItemSelection.removeAt?4(int) +QtCore.QItemSelection.removeAll?4(QItemSelectionRange) -> int +QtCore.QItemSelection.takeAt?4(int) -> QItemSelectionRange +QtCore.QItemSelection.takeFirst?4() -> QItemSelectionRange +QtCore.QItemSelection.takeLast?4() -> QItemSelectionRange +QtCore.QItemSelection.move?4(int, int) +QtCore.QItemSelection.swap?4(int, int) +QtCore.QItemSelection.count?4(QItemSelectionRange) -> int +QtCore.QItemSelection.count?4() -> int +QtCore.QItemSelection.first?4() -> QItemSelectionRange +QtCore.QItemSelection.last?4() -> QItemSelectionRange +QtCore.QItemSelection.indexOf?4(QItemSelectionRange, int from=0) -> int +QtCore.QItemSelection.lastIndexOf?4(QItemSelectionRange, int from=-1) -> int +QtCore.QJsonParseError.ParseError?10 +QtCore.QJsonParseError.ParseError.NoError?10 +QtCore.QJsonParseError.ParseError.UnterminatedObject?10 +QtCore.QJsonParseError.ParseError.MissingNameSeparator?10 +QtCore.QJsonParseError.ParseError.UnterminatedArray?10 +QtCore.QJsonParseError.ParseError.MissingValueSeparator?10 +QtCore.QJsonParseError.ParseError.IllegalValue?10 +QtCore.QJsonParseError.ParseError.TerminationByNumber?10 +QtCore.QJsonParseError.ParseError.IllegalNumber?10 +QtCore.QJsonParseError.ParseError.IllegalEscapeSequence?10 +QtCore.QJsonParseError.ParseError.IllegalUTF8String?10 +QtCore.QJsonParseError.ParseError.UnterminatedString?10 +QtCore.QJsonParseError.ParseError.MissingObject?10 +QtCore.QJsonParseError.ParseError.DeepNesting?10 +QtCore.QJsonParseError.ParseError.DocumentTooLarge?10 +QtCore.QJsonParseError.ParseError.GarbageAtEnd?10 +QtCore.QJsonParseError.error?7 +QtCore.QJsonParseError.offset?7 +QtCore.QJsonParseError?1() +QtCore.QJsonParseError.__init__?1(self) +QtCore.QJsonParseError?1(QJsonParseError) +QtCore.QJsonParseError.__init__?1(self, QJsonParseError) +QtCore.QJsonParseError.errorString?4() -> QString +QtCore.QJsonDocument.JsonFormat?10 +QtCore.QJsonDocument.JsonFormat.Indented?10 +QtCore.QJsonDocument.JsonFormat.Compact?10 +QtCore.QJsonDocument.DataValidation?10 +QtCore.QJsonDocument.DataValidation.Validate?10 +QtCore.QJsonDocument.DataValidation.BypassValidation?10 +QtCore.QJsonDocument?1() +QtCore.QJsonDocument.__init__?1(self) +QtCore.QJsonDocument?1(QJsonObject) +QtCore.QJsonDocument.__init__?1(self, QJsonObject) +QtCore.QJsonDocument?1(QJsonArray) +QtCore.QJsonDocument.__init__?1(self, QJsonArray) +QtCore.QJsonDocument?1(QJsonDocument) +QtCore.QJsonDocument.__init__?1(self, QJsonDocument) +QtCore.QJsonDocument.fromRawData?4(bytes, int, QJsonDocument.DataValidation validation=QJsonDocument.Validate) -> QJsonDocument +QtCore.QJsonDocument.rawData?4() -> (bytes, int) +QtCore.QJsonDocument.fromBinaryData?4(QByteArray, QJsonDocument.DataValidation validation=QJsonDocument.Validate) -> QJsonDocument +QtCore.QJsonDocument.toBinaryData?4() -> QByteArray +QtCore.QJsonDocument.fromVariant?4(QVariant) -> QJsonDocument +QtCore.QJsonDocument.toVariant?4() -> QVariant +QtCore.QJsonDocument.fromJson?4(QByteArray, QJsonParseError error=None) -> QJsonDocument +QtCore.QJsonDocument.toJson?4() -> QByteArray +QtCore.QJsonDocument.toJson?4(QJsonDocument.JsonFormat) -> QByteArray +QtCore.QJsonDocument.isEmpty?4() -> bool +QtCore.QJsonDocument.isArray?4() -> bool +QtCore.QJsonDocument.isObject?4() -> bool +QtCore.QJsonDocument.object?4() -> QJsonObject +QtCore.QJsonDocument.array?4() -> QJsonArray +QtCore.QJsonDocument.setObject?4(QJsonObject) +QtCore.QJsonDocument.setArray?4(QJsonArray) +QtCore.QJsonDocument.isNull?4() -> bool +QtCore.QJsonDocument.swap?4(QJsonDocument) +QtCore.QJsonValue.Type?10 +QtCore.QJsonValue.Type.Null?10 +QtCore.QJsonValue.Type.Bool?10 +QtCore.QJsonValue.Type.Double?10 +QtCore.QJsonValue.Type.String?10 +QtCore.QJsonValue.Type.Array?10 +QtCore.QJsonValue.Type.Object?10 +QtCore.QJsonValue.Type.Undefined?10 +QtCore.QJsonValue?1(QJsonValue.Type type=QJsonValue.Null) +QtCore.QJsonValue.__init__?1(self, QJsonValue.Type type=QJsonValue.Null) +QtCore.QJsonValue?1(QJsonValue) +QtCore.QJsonValue.__init__?1(self, QJsonValue) +QtCore.QJsonValue.fromVariant?4(QVariant) -> QJsonValue +QtCore.QJsonValue.toVariant?4() -> QVariant +QtCore.QJsonValue.type?4() -> QJsonValue.Type +QtCore.QJsonValue.isNull?4() -> bool +QtCore.QJsonValue.isBool?4() -> bool +QtCore.QJsonValue.isDouble?4() -> bool +QtCore.QJsonValue.isString?4() -> bool +QtCore.QJsonValue.isArray?4() -> bool +QtCore.QJsonValue.isObject?4() -> bool +QtCore.QJsonValue.isUndefined?4() -> bool +QtCore.QJsonValue.toBool?4(bool defaultValue=False) -> bool +QtCore.QJsonValue.toInt?4(int defaultValue=0) -> int +QtCore.QJsonValue.toDouble?4(float defaultValue=0) -> float +QtCore.QJsonValue.toArray?4() -> QJsonArray +QtCore.QJsonValue.toArray?4(QJsonArray) -> QJsonArray +QtCore.QJsonValue.toObject?4() -> QJsonObject +QtCore.QJsonValue.toObject?4(QJsonObject) -> QJsonObject +QtCore.QJsonValue.toString?4() -> QString +QtCore.QJsonValue.toString?4(QString) -> QString +QtCore.QJsonValue.swap?4(QJsonValue) +QtCore.QLibrary.LoadHint?10 +QtCore.QLibrary.LoadHint.ResolveAllSymbolsHint?10 +QtCore.QLibrary.LoadHint.ExportExternalSymbolsHint?10 +QtCore.QLibrary.LoadHint.LoadArchiveMemberHint?10 +QtCore.QLibrary.LoadHint.PreventUnloadHint?10 +QtCore.QLibrary.LoadHint.DeepBindHint?10 +QtCore.QLibrary?1(QObject parent=None) +QtCore.QLibrary.__init__?1(self, QObject parent=None) +QtCore.QLibrary?1(QString, QObject parent=None) +QtCore.QLibrary.__init__?1(self, QString, QObject parent=None) +QtCore.QLibrary?1(QString, int, QObject parent=None) +QtCore.QLibrary.__init__?1(self, QString, int, QObject parent=None) +QtCore.QLibrary?1(QString, QString, QObject parent=None) +QtCore.QLibrary.__init__?1(self, QString, QString, QObject parent=None) +QtCore.QLibrary.errorString?4() -> QString +QtCore.QLibrary.fileName?4() -> QString +QtCore.QLibrary.isLoaded?4() -> bool +QtCore.QLibrary.load?4() -> bool +QtCore.QLibrary.loadHints?4() -> QLibrary.LoadHints +QtCore.QLibrary.resolve?4(str) -> PyQt5.sip.voidptr +QtCore.QLibrary.resolve?4(QString, str) -> PyQt5.sip.voidptr +QtCore.QLibrary.resolve?4(QString, int, str) -> PyQt5.sip.voidptr +QtCore.QLibrary.resolve?4(QString, QString, str) -> PyQt5.sip.voidptr +QtCore.QLibrary.unload?4() -> bool +QtCore.QLibrary.isLibrary?4(QString) -> bool +QtCore.QLibrary.setFileName?4(QString) +QtCore.QLibrary.setFileNameAndVersion?4(QString, int) +QtCore.QLibrary.setFileNameAndVersion?4(QString, QString) +QtCore.QLibrary.setLoadHints?4(QLibrary.LoadHints) +QtCore.QLibrary.LoadHints?1() +QtCore.QLibrary.LoadHints.__init__?1(self) +QtCore.QLibrary.LoadHints?1(int) +QtCore.QLibrary.LoadHints.__init__?1(self, int) +QtCore.QLibrary.LoadHints?1(QLibrary.LoadHints) +QtCore.QLibrary.LoadHints.__init__?1(self, QLibrary.LoadHints) +QtCore.QLibraryInfo.LibraryLocation?10 +QtCore.QLibraryInfo.LibraryLocation.PrefixPath?10 +QtCore.QLibraryInfo.LibraryLocation.DocumentationPath?10 +QtCore.QLibraryInfo.LibraryLocation.HeadersPath?10 +QtCore.QLibraryInfo.LibraryLocation.LibrariesPath?10 +QtCore.QLibraryInfo.LibraryLocation.BinariesPath?10 +QtCore.QLibraryInfo.LibraryLocation.PluginsPath?10 +QtCore.QLibraryInfo.LibraryLocation.DataPath?10 +QtCore.QLibraryInfo.LibraryLocation.TranslationsPath?10 +QtCore.QLibraryInfo.LibraryLocation.SettingsPath?10 +QtCore.QLibraryInfo.LibraryLocation.ExamplesPath?10 +QtCore.QLibraryInfo.LibraryLocation.ImportsPath?10 +QtCore.QLibraryInfo.LibraryLocation.TestsPath?10 +QtCore.QLibraryInfo.LibraryLocation.LibraryExecutablesPath?10 +QtCore.QLibraryInfo.LibraryLocation.Qml2ImportsPath?10 +QtCore.QLibraryInfo.LibraryLocation.ArchDataPath?10 +QtCore.QLibraryInfo?1(QLibraryInfo) +QtCore.QLibraryInfo.__init__?1(self, QLibraryInfo) +QtCore.QLibraryInfo.licensee?4() -> QString +QtCore.QLibraryInfo.licensedProducts?4() -> QString +QtCore.QLibraryInfo.location?4(QLibraryInfo.LibraryLocation) -> QString +QtCore.QLibraryInfo.buildDate?4() -> QDate +QtCore.QLibraryInfo.isDebugBuild?4() -> bool +QtCore.QLibraryInfo.version?4() -> QVersionNumber +QtCore.QLine?1() +QtCore.QLine.__init__?1(self) +QtCore.QLine?1(QPoint, QPoint) +QtCore.QLine.__init__?1(self, QPoint, QPoint) +QtCore.QLine?1(int, int, int, int) +QtCore.QLine.__init__?1(self, int, int, int, int) +QtCore.QLine?1(QLine) +QtCore.QLine.__init__?1(self, QLine) +QtCore.QLine.isNull?4() -> bool +QtCore.QLine.x1?4() -> int +QtCore.QLine.y1?4() -> int +QtCore.QLine.x2?4() -> int +QtCore.QLine.y2?4() -> int +QtCore.QLine.p1?4() -> QPoint +QtCore.QLine.p2?4() -> QPoint +QtCore.QLine.dx?4() -> int +QtCore.QLine.dy?4() -> int +QtCore.QLine.translate?4(QPoint) +QtCore.QLine.translate?4(int, int) +QtCore.QLine.translated?4(QPoint) -> QLine +QtCore.QLine.translated?4(int, int) -> QLine +QtCore.QLine.setP1?4(QPoint) +QtCore.QLine.setP2?4(QPoint) +QtCore.QLine.setPoints?4(QPoint, QPoint) +QtCore.QLine.setLine?4(int, int, int, int) +QtCore.QLine.center?4() -> QPoint +QtCore.QLineF.IntersectType?10 +QtCore.QLineF.IntersectType.NoIntersection?10 +QtCore.QLineF.IntersectType.BoundedIntersection?10 +QtCore.QLineF.IntersectType.UnboundedIntersection?10 +QtCore.QLineF?1(QLine) +QtCore.QLineF.__init__?1(self, QLine) +QtCore.QLineF?1() +QtCore.QLineF.__init__?1(self) +QtCore.QLineF?1(QPointF, QPointF) +QtCore.QLineF.__init__?1(self, QPointF, QPointF) +QtCore.QLineF?1(float, float, float, float) +QtCore.QLineF.__init__?1(self, float, float, float, float) +QtCore.QLineF?1(QLineF) +QtCore.QLineF.__init__?1(self, QLineF) +QtCore.QLineF.isNull?4() -> bool +QtCore.QLineF.length?4() -> float +QtCore.QLineF.unitVector?4() -> QLineF +QtCore.QLineF.intersect?4(QLineF, QPointF) -> QLineF.IntersectType +QtCore.QLineF.intersects?4(QLineF) -> (QLineF.IntersectType, QPointF) +QtCore.QLineF.x1?4() -> float +QtCore.QLineF.y1?4() -> float +QtCore.QLineF.x2?4() -> float +QtCore.QLineF.y2?4() -> float +QtCore.QLineF.p1?4() -> QPointF +QtCore.QLineF.p2?4() -> QPointF +QtCore.QLineF.dx?4() -> float +QtCore.QLineF.dy?4() -> float +QtCore.QLineF.normalVector?4() -> QLineF +QtCore.QLineF.translate?4(QPointF) +QtCore.QLineF.translate?4(float, float) +QtCore.QLineF.setLength?4(float) +QtCore.QLineF.pointAt?4(float) -> QPointF +QtCore.QLineF.toLine?4() -> QLine +QtCore.QLineF.fromPolar?4(float, float) -> QLineF +QtCore.QLineF.angle?4() -> float +QtCore.QLineF.setAngle?4(float) +QtCore.QLineF.angleTo?4(QLineF) -> float +QtCore.QLineF.translated?4(QPointF) -> QLineF +QtCore.QLineF.translated?4(float, float) -> QLineF +QtCore.QLineF.setP1?4(QPointF) +QtCore.QLineF.setP2?4(QPointF) +QtCore.QLineF.setPoints?4(QPointF, QPointF) +QtCore.QLineF.setLine?4(float, float, float, float) +QtCore.QLineF.center?4() -> QPointF +QtCore.QLocale.DataSizeFormat?10 +QtCore.QLocale.DataSizeFormat.DataSizeIecFormat?10 +QtCore.QLocale.DataSizeFormat.DataSizeTraditionalFormat?10 +QtCore.QLocale.DataSizeFormat.DataSizeSIFormat?10 +QtCore.QLocale.FloatingPointPrecisionOption?10 +QtCore.QLocale.FloatingPointPrecisionOption.FloatingPointShortest?10 +QtCore.QLocale.QuotationStyle?10 +QtCore.QLocale.QuotationStyle.StandardQuotation?10 +QtCore.QLocale.QuotationStyle.AlternateQuotation?10 +QtCore.QLocale.CurrencySymbolFormat?10 +QtCore.QLocale.CurrencySymbolFormat.CurrencyIsoCode?10 +QtCore.QLocale.CurrencySymbolFormat.CurrencySymbol?10 +QtCore.QLocale.CurrencySymbolFormat.CurrencyDisplayName?10 +QtCore.QLocale.Script?10 +QtCore.QLocale.Script.AnyScript?10 +QtCore.QLocale.Script.ArabicScript?10 +QtCore.QLocale.Script.CyrillicScript?10 +QtCore.QLocale.Script.DeseretScript?10 +QtCore.QLocale.Script.GurmukhiScript?10 +QtCore.QLocale.Script.SimplifiedHanScript?10 +QtCore.QLocale.Script.TraditionalHanScript?10 +QtCore.QLocale.Script.LatinScript?10 +QtCore.QLocale.Script.MongolianScript?10 +QtCore.QLocale.Script.TifinaghScript?10 +QtCore.QLocale.Script.SimplifiedChineseScript?10 +QtCore.QLocale.Script.TraditionalChineseScript?10 +QtCore.QLocale.Script.ArmenianScript?10 +QtCore.QLocale.Script.BengaliScript?10 +QtCore.QLocale.Script.CherokeeScript?10 +QtCore.QLocale.Script.DevanagariScript?10 +QtCore.QLocale.Script.EthiopicScript?10 +QtCore.QLocale.Script.GeorgianScript?10 +QtCore.QLocale.Script.GreekScript?10 +QtCore.QLocale.Script.GujaratiScript?10 +QtCore.QLocale.Script.HebrewScript?10 +QtCore.QLocale.Script.JapaneseScript?10 +QtCore.QLocale.Script.KhmerScript?10 +QtCore.QLocale.Script.KannadaScript?10 +QtCore.QLocale.Script.KoreanScript?10 +QtCore.QLocale.Script.LaoScript?10 +QtCore.QLocale.Script.MalayalamScript?10 +QtCore.QLocale.Script.MyanmarScript?10 +QtCore.QLocale.Script.OriyaScript?10 +QtCore.QLocale.Script.TamilScript?10 +QtCore.QLocale.Script.TeluguScript?10 +QtCore.QLocale.Script.ThaanaScript?10 +QtCore.QLocale.Script.ThaiScript?10 +QtCore.QLocale.Script.TibetanScript?10 +QtCore.QLocale.Script.SinhalaScript?10 +QtCore.QLocale.Script.SyriacScript?10 +QtCore.QLocale.Script.YiScript?10 +QtCore.QLocale.Script.VaiScript?10 +QtCore.QLocale.Script.AvestanScript?10 +QtCore.QLocale.Script.BalineseScript?10 +QtCore.QLocale.Script.BamumScript?10 +QtCore.QLocale.Script.BatakScript?10 +QtCore.QLocale.Script.BopomofoScript?10 +QtCore.QLocale.Script.BrahmiScript?10 +QtCore.QLocale.Script.BugineseScript?10 +QtCore.QLocale.Script.BuhidScript?10 +QtCore.QLocale.Script.CanadianAboriginalScript?10 +QtCore.QLocale.Script.CarianScript?10 +QtCore.QLocale.Script.ChakmaScript?10 +QtCore.QLocale.Script.ChamScript?10 +QtCore.QLocale.Script.CopticScript?10 +QtCore.QLocale.Script.CypriotScript?10 +QtCore.QLocale.Script.EgyptianHieroglyphsScript?10 +QtCore.QLocale.Script.FraserScript?10 +QtCore.QLocale.Script.GlagoliticScript?10 +QtCore.QLocale.Script.GothicScript?10 +QtCore.QLocale.Script.HanScript?10 +QtCore.QLocale.Script.HangulScript?10 +QtCore.QLocale.Script.HanunooScript?10 +QtCore.QLocale.Script.ImperialAramaicScript?10 +QtCore.QLocale.Script.InscriptionalPahlaviScript?10 +QtCore.QLocale.Script.InscriptionalParthianScript?10 +QtCore.QLocale.Script.JavaneseScript?10 +QtCore.QLocale.Script.KaithiScript?10 +QtCore.QLocale.Script.KatakanaScript?10 +QtCore.QLocale.Script.KayahLiScript?10 +QtCore.QLocale.Script.KharoshthiScript?10 +QtCore.QLocale.Script.LannaScript?10 +QtCore.QLocale.Script.LepchaScript?10 +QtCore.QLocale.Script.LimbuScript?10 +QtCore.QLocale.Script.LinearBScript?10 +QtCore.QLocale.Script.LycianScript?10 +QtCore.QLocale.Script.LydianScript?10 +QtCore.QLocale.Script.MandaeanScript?10 +QtCore.QLocale.Script.MeiteiMayekScript?10 +QtCore.QLocale.Script.MeroiticScript?10 +QtCore.QLocale.Script.MeroiticCursiveScript?10 +QtCore.QLocale.Script.NkoScript?10 +QtCore.QLocale.Script.NewTaiLueScript?10 +QtCore.QLocale.Script.OghamScript?10 +QtCore.QLocale.Script.OlChikiScript?10 +QtCore.QLocale.Script.OldItalicScript?10 +QtCore.QLocale.Script.OldPersianScript?10 +QtCore.QLocale.Script.OldSouthArabianScript?10 +QtCore.QLocale.Script.OrkhonScript?10 +QtCore.QLocale.Script.OsmanyaScript?10 +QtCore.QLocale.Script.PhagsPaScript?10 +QtCore.QLocale.Script.PhoenicianScript?10 +QtCore.QLocale.Script.PollardPhoneticScript?10 +QtCore.QLocale.Script.RejangScript?10 +QtCore.QLocale.Script.RunicScript?10 +QtCore.QLocale.Script.SamaritanScript?10 +QtCore.QLocale.Script.SaurashtraScript?10 +QtCore.QLocale.Script.SharadaScript?10 +QtCore.QLocale.Script.ShavianScript?10 +QtCore.QLocale.Script.SoraSompengScript?10 +QtCore.QLocale.Script.CuneiformScript?10 +QtCore.QLocale.Script.SundaneseScript?10 +QtCore.QLocale.Script.SylotiNagriScript?10 +QtCore.QLocale.Script.TagalogScript?10 +QtCore.QLocale.Script.TagbanwaScript?10 +QtCore.QLocale.Script.TaiLeScript?10 +QtCore.QLocale.Script.TaiVietScript?10 +QtCore.QLocale.Script.TakriScript?10 +QtCore.QLocale.Script.UgariticScript?10 +QtCore.QLocale.Script.BrailleScript?10 +QtCore.QLocale.Script.HiraganaScript?10 +QtCore.QLocale.Script.CaucasianAlbanianScript?10 +QtCore.QLocale.Script.BassaVahScript?10 +QtCore.QLocale.Script.DuployanScript?10 +QtCore.QLocale.Script.ElbasanScript?10 +QtCore.QLocale.Script.GranthaScript?10 +QtCore.QLocale.Script.PahawhHmongScript?10 +QtCore.QLocale.Script.KhojkiScript?10 +QtCore.QLocale.Script.LinearAScript?10 +QtCore.QLocale.Script.MahajaniScript?10 +QtCore.QLocale.Script.ManichaeanScript?10 +QtCore.QLocale.Script.MendeKikakuiScript?10 +QtCore.QLocale.Script.ModiScript?10 +QtCore.QLocale.Script.MroScript?10 +QtCore.QLocale.Script.OldNorthArabianScript?10 +QtCore.QLocale.Script.NabataeanScript?10 +QtCore.QLocale.Script.PalmyreneScript?10 +QtCore.QLocale.Script.PauCinHauScript?10 +QtCore.QLocale.Script.OldPermicScript?10 +QtCore.QLocale.Script.PsalterPahlaviScript?10 +QtCore.QLocale.Script.SiddhamScript?10 +QtCore.QLocale.Script.KhudawadiScript?10 +QtCore.QLocale.Script.TirhutaScript?10 +QtCore.QLocale.Script.VarangKshitiScript?10 +QtCore.QLocale.Script.AhomScript?10 +QtCore.QLocale.Script.AnatolianHieroglyphsScript?10 +QtCore.QLocale.Script.HatranScript?10 +QtCore.QLocale.Script.MultaniScript?10 +QtCore.QLocale.Script.OldHungarianScript?10 +QtCore.QLocale.Script.SignWritingScript?10 +QtCore.QLocale.Script.AdlamScript?10 +QtCore.QLocale.Script.BhaiksukiScript?10 +QtCore.QLocale.Script.MarchenScript?10 +QtCore.QLocale.Script.NewaScript?10 +QtCore.QLocale.Script.OsageScript?10 +QtCore.QLocale.Script.TangutScript?10 +QtCore.QLocale.Script.HanWithBopomofoScript?10 +QtCore.QLocale.Script.JamoScript?10 +QtCore.QLocale.MeasurementSystem?10 +QtCore.QLocale.MeasurementSystem.MetricSystem?10 +QtCore.QLocale.MeasurementSystem.ImperialSystem?10 +QtCore.QLocale.MeasurementSystem.ImperialUSSystem?10 +QtCore.QLocale.MeasurementSystem.ImperialUKSystem?10 +QtCore.QLocale.FormatType?10 +QtCore.QLocale.FormatType.LongFormat?10 +QtCore.QLocale.FormatType.ShortFormat?10 +QtCore.QLocale.FormatType.NarrowFormat?10 +QtCore.QLocale.NumberOption?10 +QtCore.QLocale.NumberOption.OmitGroupSeparator?10 +QtCore.QLocale.NumberOption.RejectGroupSeparator?10 +QtCore.QLocale.NumberOption.DefaultNumberOptions?10 +QtCore.QLocale.NumberOption.OmitLeadingZeroInExponent?10 +QtCore.QLocale.NumberOption.RejectLeadingZeroInExponent?10 +QtCore.QLocale.NumberOption.IncludeTrailingZeroesAfterDot?10 +QtCore.QLocale.NumberOption.RejectTrailingZeroesAfterDot?10 +QtCore.QLocale.Country?10 +QtCore.QLocale.Country.AnyCountry?10 +QtCore.QLocale.Country.Afghanistan?10 +QtCore.QLocale.Country.Albania?10 +QtCore.QLocale.Country.Algeria?10 +QtCore.QLocale.Country.AmericanSamoa?10 +QtCore.QLocale.Country.Andorra?10 +QtCore.QLocale.Country.Angola?10 +QtCore.QLocale.Country.Anguilla?10 +QtCore.QLocale.Country.Antarctica?10 +QtCore.QLocale.Country.AntiguaAndBarbuda?10 +QtCore.QLocale.Country.Argentina?10 +QtCore.QLocale.Country.Armenia?10 +QtCore.QLocale.Country.Aruba?10 +QtCore.QLocale.Country.Australia?10 +QtCore.QLocale.Country.Austria?10 +QtCore.QLocale.Country.Azerbaijan?10 +QtCore.QLocale.Country.Bahamas?10 +QtCore.QLocale.Country.Bahrain?10 +QtCore.QLocale.Country.Bangladesh?10 +QtCore.QLocale.Country.Barbados?10 +QtCore.QLocale.Country.Belarus?10 +QtCore.QLocale.Country.Belgium?10 +QtCore.QLocale.Country.Belize?10 +QtCore.QLocale.Country.Benin?10 +QtCore.QLocale.Country.Bermuda?10 +QtCore.QLocale.Country.Bhutan?10 +QtCore.QLocale.Country.Bolivia?10 +QtCore.QLocale.Country.BosniaAndHerzegowina?10 +QtCore.QLocale.Country.Botswana?10 +QtCore.QLocale.Country.BouvetIsland?10 +QtCore.QLocale.Country.Brazil?10 +QtCore.QLocale.Country.BritishIndianOceanTerritory?10 +QtCore.QLocale.Country.Bulgaria?10 +QtCore.QLocale.Country.BurkinaFaso?10 +QtCore.QLocale.Country.Burundi?10 +QtCore.QLocale.Country.Cambodia?10 +QtCore.QLocale.Country.Cameroon?10 +QtCore.QLocale.Country.Canada?10 +QtCore.QLocale.Country.CapeVerde?10 +QtCore.QLocale.Country.CaymanIslands?10 +QtCore.QLocale.Country.CentralAfricanRepublic?10 +QtCore.QLocale.Country.Chad?10 +QtCore.QLocale.Country.Chile?10 +QtCore.QLocale.Country.China?10 +QtCore.QLocale.Country.ChristmasIsland?10 +QtCore.QLocale.Country.CocosIslands?10 +QtCore.QLocale.Country.Colombia?10 +QtCore.QLocale.Country.Comoros?10 +QtCore.QLocale.Country.DemocraticRepublicOfCongo?10 +QtCore.QLocale.Country.PeoplesRepublicOfCongo?10 +QtCore.QLocale.Country.CookIslands?10 +QtCore.QLocale.Country.CostaRica?10 +QtCore.QLocale.Country.IvoryCoast?10 +QtCore.QLocale.Country.Croatia?10 +QtCore.QLocale.Country.Cuba?10 +QtCore.QLocale.Country.Cyprus?10 +QtCore.QLocale.Country.CzechRepublic?10 +QtCore.QLocale.Country.Denmark?10 +QtCore.QLocale.Country.Djibouti?10 +QtCore.QLocale.Country.Dominica?10 +QtCore.QLocale.Country.DominicanRepublic?10 +QtCore.QLocale.Country.EastTimor?10 +QtCore.QLocale.Country.Ecuador?10 +QtCore.QLocale.Country.Egypt?10 +QtCore.QLocale.Country.ElSalvador?10 +QtCore.QLocale.Country.EquatorialGuinea?10 +QtCore.QLocale.Country.Eritrea?10 +QtCore.QLocale.Country.Estonia?10 +QtCore.QLocale.Country.Ethiopia?10 +QtCore.QLocale.Country.FalklandIslands?10 +QtCore.QLocale.Country.FaroeIslands?10 +QtCore.QLocale.Country.Finland?10 +QtCore.QLocale.Country.France?10 +QtCore.QLocale.Country.FrenchGuiana?10 +QtCore.QLocale.Country.FrenchPolynesia?10 +QtCore.QLocale.Country.FrenchSouthernTerritories?10 +QtCore.QLocale.Country.Gabon?10 +QtCore.QLocale.Country.Gambia?10 +QtCore.QLocale.Country.Georgia?10 +QtCore.QLocale.Country.Germany?10 +QtCore.QLocale.Country.Ghana?10 +QtCore.QLocale.Country.Gibraltar?10 +QtCore.QLocale.Country.Greece?10 +QtCore.QLocale.Country.Greenland?10 +QtCore.QLocale.Country.Grenada?10 +QtCore.QLocale.Country.Guadeloupe?10 +QtCore.QLocale.Country.Guam?10 +QtCore.QLocale.Country.Guatemala?10 +QtCore.QLocale.Country.Guinea?10 +QtCore.QLocale.Country.GuineaBissau?10 +QtCore.QLocale.Country.Guyana?10 +QtCore.QLocale.Country.Haiti?10 +QtCore.QLocale.Country.HeardAndMcDonaldIslands?10 +QtCore.QLocale.Country.Honduras?10 +QtCore.QLocale.Country.HongKong?10 +QtCore.QLocale.Country.Hungary?10 +QtCore.QLocale.Country.Iceland?10 +QtCore.QLocale.Country.India?10 +QtCore.QLocale.Country.Indonesia?10 +QtCore.QLocale.Country.Iran?10 +QtCore.QLocale.Country.Iraq?10 +QtCore.QLocale.Country.Ireland?10 +QtCore.QLocale.Country.Israel?10 +QtCore.QLocale.Country.Italy?10 +QtCore.QLocale.Country.Jamaica?10 +QtCore.QLocale.Country.Japan?10 +QtCore.QLocale.Country.Jordan?10 +QtCore.QLocale.Country.Kazakhstan?10 +QtCore.QLocale.Country.Kenya?10 +QtCore.QLocale.Country.Kiribati?10 +QtCore.QLocale.Country.DemocraticRepublicOfKorea?10 +QtCore.QLocale.Country.RepublicOfKorea?10 +QtCore.QLocale.Country.Kuwait?10 +QtCore.QLocale.Country.Kyrgyzstan?10 +QtCore.QLocale.Country.Latvia?10 +QtCore.QLocale.Country.Lebanon?10 +QtCore.QLocale.Country.Lesotho?10 +QtCore.QLocale.Country.Liberia?10 +QtCore.QLocale.Country.Liechtenstein?10 +QtCore.QLocale.Country.Lithuania?10 +QtCore.QLocale.Country.Luxembourg?10 +QtCore.QLocale.Country.Macau?10 +QtCore.QLocale.Country.Macedonia?10 +QtCore.QLocale.Country.Madagascar?10 +QtCore.QLocale.Country.Malawi?10 +QtCore.QLocale.Country.Malaysia?10 +QtCore.QLocale.Country.Maldives?10 +QtCore.QLocale.Country.Mali?10 +QtCore.QLocale.Country.Malta?10 +QtCore.QLocale.Country.MarshallIslands?10 +QtCore.QLocale.Country.Martinique?10 +QtCore.QLocale.Country.Mauritania?10 +QtCore.QLocale.Country.Mauritius?10 +QtCore.QLocale.Country.Mayotte?10 +QtCore.QLocale.Country.Mexico?10 +QtCore.QLocale.Country.Micronesia?10 +QtCore.QLocale.Country.Moldova?10 +QtCore.QLocale.Country.Monaco?10 +QtCore.QLocale.Country.Mongolia?10 +QtCore.QLocale.Country.Montserrat?10 +QtCore.QLocale.Country.Morocco?10 +QtCore.QLocale.Country.Mozambique?10 +QtCore.QLocale.Country.Myanmar?10 +QtCore.QLocale.Country.Namibia?10 +QtCore.QLocale.Country.NauruCountry?10 +QtCore.QLocale.Country.Nepal?10 +QtCore.QLocale.Country.Netherlands?10 +QtCore.QLocale.Country.NewCaledonia?10 +QtCore.QLocale.Country.NewZealand?10 +QtCore.QLocale.Country.Nicaragua?10 +QtCore.QLocale.Country.Niger?10 +QtCore.QLocale.Country.Nigeria?10 +QtCore.QLocale.Country.Niue?10 +QtCore.QLocale.Country.NorfolkIsland?10 +QtCore.QLocale.Country.NorthernMarianaIslands?10 +QtCore.QLocale.Country.Norway?10 +QtCore.QLocale.Country.Oman?10 +QtCore.QLocale.Country.Pakistan?10 +QtCore.QLocale.Country.Palau?10 +QtCore.QLocale.Country.Panama?10 +QtCore.QLocale.Country.PapuaNewGuinea?10 +QtCore.QLocale.Country.Paraguay?10 +QtCore.QLocale.Country.Peru?10 +QtCore.QLocale.Country.Philippines?10 +QtCore.QLocale.Country.Pitcairn?10 +QtCore.QLocale.Country.Poland?10 +QtCore.QLocale.Country.Portugal?10 +QtCore.QLocale.Country.PuertoRico?10 +QtCore.QLocale.Country.Qatar?10 +QtCore.QLocale.Country.Reunion?10 +QtCore.QLocale.Country.Romania?10 +QtCore.QLocale.Country.RussianFederation?10 +QtCore.QLocale.Country.Rwanda?10 +QtCore.QLocale.Country.SaintKittsAndNevis?10 +QtCore.QLocale.Country.Samoa?10 +QtCore.QLocale.Country.SanMarino?10 +QtCore.QLocale.Country.SaoTomeAndPrincipe?10 +QtCore.QLocale.Country.SaudiArabia?10 +QtCore.QLocale.Country.Senegal?10 +QtCore.QLocale.Country.Seychelles?10 +QtCore.QLocale.Country.SierraLeone?10 +QtCore.QLocale.Country.Singapore?10 +QtCore.QLocale.Country.Slovakia?10 +QtCore.QLocale.Country.Slovenia?10 +QtCore.QLocale.Country.SolomonIslands?10 +QtCore.QLocale.Country.Somalia?10 +QtCore.QLocale.Country.SouthAfrica?10 +QtCore.QLocale.Country.SouthGeorgiaAndTheSouthSandwichIslands?10 +QtCore.QLocale.Country.Spain?10 +QtCore.QLocale.Country.SriLanka?10 +QtCore.QLocale.Country.Sudan?10 +QtCore.QLocale.Country.Suriname?10 +QtCore.QLocale.Country.SvalbardAndJanMayenIslands?10 +QtCore.QLocale.Country.Swaziland?10 +QtCore.QLocale.Country.Sweden?10 +QtCore.QLocale.Country.Switzerland?10 +QtCore.QLocale.Country.SyrianArabRepublic?10 +QtCore.QLocale.Country.Taiwan?10 +QtCore.QLocale.Country.Tajikistan?10 +QtCore.QLocale.Country.Tanzania?10 +QtCore.QLocale.Country.Thailand?10 +QtCore.QLocale.Country.Togo?10 +QtCore.QLocale.Country.Tokelau?10 +QtCore.QLocale.Country.TrinidadAndTobago?10 +QtCore.QLocale.Country.Tunisia?10 +QtCore.QLocale.Country.Turkey?10 +QtCore.QLocale.Country.Turkmenistan?10 +QtCore.QLocale.Country.TurksAndCaicosIslands?10 +QtCore.QLocale.Country.Tuvalu?10 +QtCore.QLocale.Country.Uganda?10 +QtCore.QLocale.Country.Ukraine?10 +QtCore.QLocale.Country.UnitedArabEmirates?10 +QtCore.QLocale.Country.UnitedKingdom?10 +QtCore.QLocale.Country.UnitedStates?10 +QtCore.QLocale.Country.UnitedStatesMinorOutlyingIslands?10 +QtCore.QLocale.Country.Uruguay?10 +QtCore.QLocale.Country.Uzbekistan?10 +QtCore.QLocale.Country.Vanuatu?10 +QtCore.QLocale.Country.VaticanCityState?10 +QtCore.QLocale.Country.Venezuela?10 +QtCore.QLocale.Country.BritishVirginIslands?10 +QtCore.QLocale.Country.WallisAndFutunaIslands?10 +QtCore.QLocale.Country.WesternSahara?10 +QtCore.QLocale.Country.Yemen?10 +QtCore.QLocale.Country.Zambia?10 +QtCore.QLocale.Country.Zimbabwe?10 +QtCore.QLocale.Country.Montenegro?10 +QtCore.QLocale.Country.Serbia?10 +QtCore.QLocale.Country.SaintBarthelemy?10 +QtCore.QLocale.Country.SaintMartin?10 +QtCore.QLocale.Country.LatinAmericaAndTheCaribbean?10 +QtCore.QLocale.Country.LastCountry?10 +QtCore.QLocale.Country.Brunei?10 +QtCore.QLocale.Country.CongoKinshasa?10 +QtCore.QLocale.Country.CongoBrazzaville?10 +QtCore.QLocale.Country.Fiji?10 +QtCore.QLocale.Country.Guernsey?10 +QtCore.QLocale.Country.NorthKorea?10 +QtCore.QLocale.Country.SouthKorea?10 +QtCore.QLocale.Country.Laos?10 +QtCore.QLocale.Country.Libya?10 +QtCore.QLocale.Country.CuraSao?10 +QtCore.QLocale.Country.PalestinianTerritories?10 +QtCore.QLocale.Country.Russia?10 +QtCore.QLocale.Country.SaintLucia?10 +QtCore.QLocale.Country.SaintVincentAndTheGrenadines?10 +QtCore.QLocale.Country.SaintHelena?10 +QtCore.QLocale.Country.SaintPierreAndMiquelon?10 +QtCore.QLocale.Country.Syria?10 +QtCore.QLocale.Country.Tonga?10 +QtCore.QLocale.Country.Vietnam?10 +QtCore.QLocale.Country.UnitedStatesVirginIslands?10 +QtCore.QLocale.Country.CanaryIslands?10 +QtCore.QLocale.Country.ClippertonIsland?10 +QtCore.QLocale.Country.AscensionIsland?10 +QtCore.QLocale.Country.AlandIslands?10 +QtCore.QLocale.Country.DiegoGarcia?10 +QtCore.QLocale.Country.CeutaAndMelilla?10 +QtCore.QLocale.Country.IsleOfMan?10 +QtCore.QLocale.Country.Jersey?10 +QtCore.QLocale.Country.TristanDaCunha?10 +QtCore.QLocale.Country.SouthSudan?10 +QtCore.QLocale.Country.Bonaire?10 +QtCore.QLocale.Country.SintMaarten?10 +QtCore.QLocale.Country.Kosovo?10 +QtCore.QLocale.Country.TokelauCountry?10 +QtCore.QLocale.Country.TuvaluCountry?10 +QtCore.QLocale.Country.EuropeanUnion?10 +QtCore.QLocale.Country.OutlyingOceania?10 +QtCore.QLocale.Country.LatinAmerica?10 +QtCore.QLocale.Country.World?10 +QtCore.QLocale.Country.Europe?10 +QtCore.QLocale.Language?10 +QtCore.QLocale.Language.C?10 +QtCore.QLocale.Language.Abkhazian?10 +QtCore.QLocale.Language.Afan?10 +QtCore.QLocale.Language.Afar?10 +QtCore.QLocale.Language.Afrikaans?10 +QtCore.QLocale.Language.Albanian?10 +QtCore.QLocale.Language.Amharic?10 +QtCore.QLocale.Language.Arabic?10 +QtCore.QLocale.Language.Armenian?10 +QtCore.QLocale.Language.Assamese?10 +QtCore.QLocale.Language.Aymara?10 +QtCore.QLocale.Language.Azerbaijani?10 +QtCore.QLocale.Language.Bashkir?10 +QtCore.QLocale.Language.Basque?10 +QtCore.QLocale.Language.Bengali?10 +QtCore.QLocale.Language.Bhutani?10 +QtCore.QLocale.Language.Bihari?10 +QtCore.QLocale.Language.Bislama?10 +QtCore.QLocale.Language.Breton?10 +QtCore.QLocale.Language.Bulgarian?10 +QtCore.QLocale.Language.Burmese?10 +QtCore.QLocale.Language.Byelorussian?10 +QtCore.QLocale.Language.Cambodian?10 +QtCore.QLocale.Language.Catalan?10 +QtCore.QLocale.Language.Chinese?10 +QtCore.QLocale.Language.Corsican?10 +QtCore.QLocale.Language.Croatian?10 +QtCore.QLocale.Language.Czech?10 +QtCore.QLocale.Language.Danish?10 +QtCore.QLocale.Language.Dutch?10 +QtCore.QLocale.Language.English?10 +QtCore.QLocale.Language.Esperanto?10 +QtCore.QLocale.Language.Estonian?10 +QtCore.QLocale.Language.Faroese?10 +QtCore.QLocale.Language.Finnish?10 +QtCore.QLocale.Language.French?10 +QtCore.QLocale.Language.Frisian?10 +QtCore.QLocale.Language.Gaelic?10 +QtCore.QLocale.Language.Galician?10 +QtCore.QLocale.Language.Georgian?10 +QtCore.QLocale.Language.German?10 +QtCore.QLocale.Language.Greek?10 +QtCore.QLocale.Language.Greenlandic?10 +QtCore.QLocale.Language.Guarani?10 +QtCore.QLocale.Language.Gujarati?10 +QtCore.QLocale.Language.Hausa?10 +QtCore.QLocale.Language.Hebrew?10 +QtCore.QLocale.Language.Hindi?10 +QtCore.QLocale.Language.Hungarian?10 +QtCore.QLocale.Language.Icelandic?10 +QtCore.QLocale.Language.Indonesian?10 +QtCore.QLocale.Language.Interlingua?10 +QtCore.QLocale.Language.Interlingue?10 +QtCore.QLocale.Language.Inuktitut?10 +QtCore.QLocale.Language.Inupiak?10 +QtCore.QLocale.Language.Irish?10 +QtCore.QLocale.Language.Italian?10 +QtCore.QLocale.Language.Japanese?10 +QtCore.QLocale.Language.Javanese?10 +QtCore.QLocale.Language.Kannada?10 +QtCore.QLocale.Language.Kashmiri?10 +QtCore.QLocale.Language.Kazakh?10 +QtCore.QLocale.Language.Kinyarwanda?10 +QtCore.QLocale.Language.Kirghiz?10 +QtCore.QLocale.Language.Korean?10 +QtCore.QLocale.Language.Kurdish?10 +QtCore.QLocale.Language.Kurundi?10 +QtCore.QLocale.Language.Latin?10 +QtCore.QLocale.Language.Latvian?10 +QtCore.QLocale.Language.Lingala?10 +QtCore.QLocale.Language.Lithuanian?10 +QtCore.QLocale.Language.Macedonian?10 +QtCore.QLocale.Language.Malagasy?10 +QtCore.QLocale.Language.Malay?10 +QtCore.QLocale.Language.Malayalam?10 +QtCore.QLocale.Language.Maltese?10 +QtCore.QLocale.Language.Maori?10 +QtCore.QLocale.Language.Marathi?10 +QtCore.QLocale.Language.Moldavian?10 +QtCore.QLocale.Language.Mongolian?10 +QtCore.QLocale.Language.NauruLanguage?10 +QtCore.QLocale.Language.Nepali?10 +QtCore.QLocale.Language.Norwegian?10 +QtCore.QLocale.Language.Occitan?10 +QtCore.QLocale.Language.Oriya?10 +QtCore.QLocale.Language.Pashto?10 +QtCore.QLocale.Language.Persian?10 +QtCore.QLocale.Language.Polish?10 +QtCore.QLocale.Language.Portuguese?10 +QtCore.QLocale.Language.Punjabi?10 +QtCore.QLocale.Language.Quechua?10 +QtCore.QLocale.Language.RhaetoRomance?10 +QtCore.QLocale.Language.Romanian?10 +QtCore.QLocale.Language.Russian?10 +QtCore.QLocale.Language.Samoan?10 +QtCore.QLocale.Language.Sanskrit?10 +QtCore.QLocale.Language.Serbian?10 +QtCore.QLocale.Language.SerboCroatian?10 +QtCore.QLocale.Language.Shona?10 +QtCore.QLocale.Language.Sindhi?10 +QtCore.QLocale.Language.Slovak?10 +QtCore.QLocale.Language.Slovenian?10 +QtCore.QLocale.Language.Somali?10 +QtCore.QLocale.Language.Spanish?10 +QtCore.QLocale.Language.Sundanese?10 +QtCore.QLocale.Language.Swahili?10 +QtCore.QLocale.Language.Swedish?10 +QtCore.QLocale.Language.Tagalog?10 +QtCore.QLocale.Language.Tajik?10 +QtCore.QLocale.Language.Tamil?10 +QtCore.QLocale.Language.Tatar?10 +QtCore.QLocale.Language.Telugu?10 +QtCore.QLocale.Language.Thai?10 +QtCore.QLocale.Language.Tibetan?10 +QtCore.QLocale.Language.Tigrinya?10 +QtCore.QLocale.Language.Tsonga?10 +QtCore.QLocale.Language.Turkish?10 +QtCore.QLocale.Language.Turkmen?10 +QtCore.QLocale.Language.Twi?10 +QtCore.QLocale.Language.Uigur?10 +QtCore.QLocale.Language.Ukrainian?10 +QtCore.QLocale.Language.Urdu?10 +QtCore.QLocale.Language.Uzbek?10 +QtCore.QLocale.Language.Vietnamese?10 +QtCore.QLocale.Language.Volapuk?10 +QtCore.QLocale.Language.Welsh?10 +QtCore.QLocale.Language.Wolof?10 +QtCore.QLocale.Language.Xhosa?10 +QtCore.QLocale.Language.Yiddish?10 +QtCore.QLocale.Language.Yoruba?10 +QtCore.QLocale.Language.Zhuang?10 +QtCore.QLocale.Language.Zulu?10 +QtCore.QLocale.Language.Bosnian?10 +QtCore.QLocale.Language.Divehi?10 +QtCore.QLocale.Language.Manx?10 +QtCore.QLocale.Language.Cornish?10 +QtCore.QLocale.Language.LastLanguage?10 +QtCore.QLocale.Language.NorwegianBokmal?10 +QtCore.QLocale.Language.NorwegianNynorsk?10 +QtCore.QLocale.Language.Akan?10 +QtCore.QLocale.Language.Konkani?10 +QtCore.QLocale.Language.Ga?10 +QtCore.QLocale.Language.Igbo?10 +QtCore.QLocale.Language.Kamba?10 +QtCore.QLocale.Language.Syriac?10 +QtCore.QLocale.Language.Blin?10 +QtCore.QLocale.Language.Geez?10 +QtCore.QLocale.Language.Koro?10 +QtCore.QLocale.Language.Sidamo?10 +QtCore.QLocale.Language.Atsam?10 +QtCore.QLocale.Language.Tigre?10 +QtCore.QLocale.Language.Jju?10 +QtCore.QLocale.Language.Friulian?10 +QtCore.QLocale.Language.Venda?10 +QtCore.QLocale.Language.Ewe?10 +QtCore.QLocale.Language.Walamo?10 +QtCore.QLocale.Language.Hawaiian?10 +QtCore.QLocale.Language.Tyap?10 +QtCore.QLocale.Language.Chewa?10 +QtCore.QLocale.Language.Filipino?10 +QtCore.QLocale.Language.SwissGerman?10 +QtCore.QLocale.Language.SichuanYi?10 +QtCore.QLocale.Language.Kpelle?10 +QtCore.QLocale.Language.LowGerman?10 +QtCore.QLocale.Language.SouthNdebele?10 +QtCore.QLocale.Language.NorthernSotho?10 +QtCore.QLocale.Language.NorthernSami?10 +QtCore.QLocale.Language.Taroko?10 +QtCore.QLocale.Language.Gusii?10 +QtCore.QLocale.Language.Taita?10 +QtCore.QLocale.Language.Fulah?10 +QtCore.QLocale.Language.Kikuyu?10 +QtCore.QLocale.Language.Samburu?10 +QtCore.QLocale.Language.Sena?10 +QtCore.QLocale.Language.NorthNdebele?10 +QtCore.QLocale.Language.Rombo?10 +QtCore.QLocale.Language.Tachelhit?10 +QtCore.QLocale.Language.Kabyle?10 +QtCore.QLocale.Language.Nyankole?10 +QtCore.QLocale.Language.Bena?10 +QtCore.QLocale.Language.Vunjo?10 +QtCore.QLocale.Language.Bambara?10 +QtCore.QLocale.Language.Embu?10 +QtCore.QLocale.Language.Cherokee?10 +QtCore.QLocale.Language.Morisyen?10 +QtCore.QLocale.Language.Makonde?10 +QtCore.QLocale.Language.Langi?10 +QtCore.QLocale.Language.Ganda?10 +QtCore.QLocale.Language.Bemba?10 +QtCore.QLocale.Language.Kabuverdianu?10 +QtCore.QLocale.Language.Meru?10 +QtCore.QLocale.Language.Kalenjin?10 +QtCore.QLocale.Language.Nama?10 +QtCore.QLocale.Language.Machame?10 +QtCore.QLocale.Language.Colognian?10 +QtCore.QLocale.Language.Masai?10 +QtCore.QLocale.Language.Soga?10 +QtCore.QLocale.Language.Luyia?10 +QtCore.QLocale.Language.Asu?10 +QtCore.QLocale.Language.Teso?10 +QtCore.QLocale.Language.Saho?10 +QtCore.QLocale.Language.KoyraChiini?10 +QtCore.QLocale.Language.Rwa?10 +QtCore.QLocale.Language.Luo?10 +QtCore.QLocale.Language.Chiga?10 +QtCore.QLocale.Language.CentralMoroccoTamazight?10 +QtCore.QLocale.Language.KoyraboroSenni?10 +QtCore.QLocale.Language.Shambala?10 +QtCore.QLocale.Language.AnyLanguage?10 +QtCore.QLocale.Language.Rundi?10 +QtCore.QLocale.Language.Bodo?10 +QtCore.QLocale.Language.Aghem?10 +QtCore.QLocale.Language.Basaa?10 +QtCore.QLocale.Language.Zarma?10 +QtCore.QLocale.Language.Duala?10 +QtCore.QLocale.Language.JolaFonyi?10 +QtCore.QLocale.Language.Ewondo?10 +QtCore.QLocale.Language.Bafia?10 +QtCore.QLocale.Language.LubaKatanga?10 +QtCore.QLocale.Language.MakhuwaMeetto?10 +QtCore.QLocale.Language.Mundang?10 +QtCore.QLocale.Language.Kwasio?10 +QtCore.QLocale.Language.Nuer?10 +QtCore.QLocale.Language.Sakha?10 +QtCore.QLocale.Language.Sangu?10 +QtCore.QLocale.Language.CongoSwahili?10 +QtCore.QLocale.Language.Tasawaq?10 +QtCore.QLocale.Language.Vai?10 +QtCore.QLocale.Language.Walser?10 +QtCore.QLocale.Language.Yangben?10 +QtCore.QLocale.Language.Oromo?10 +QtCore.QLocale.Language.Dzongkha?10 +QtCore.QLocale.Language.Belarusian?10 +QtCore.QLocale.Language.Khmer?10 +QtCore.QLocale.Language.Fijian?10 +QtCore.QLocale.Language.WesternFrisian?10 +QtCore.QLocale.Language.Lao?10 +QtCore.QLocale.Language.Marshallese?10 +QtCore.QLocale.Language.Romansh?10 +QtCore.QLocale.Language.Sango?10 +QtCore.QLocale.Language.Ossetic?10 +QtCore.QLocale.Language.SouthernSotho?10 +QtCore.QLocale.Language.Tswana?10 +QtCore.QLocale.Language.Sinhala?10 +QtCore.QLocale.Language.Swati?10 +QtCore.QLocale.Language.Sardinian?10 +QtCore.QLocale.Language.Tongan?10 +QtCore.QLocale.Language.Tahitian?10 +QtCore.QLocale.Language.Nyanja?10 +QtCore.QLocale.Language.Avaric?10 +QtCore.QLocale.Language.Chamorro?10 +QtCore.QLocale.Language.Chechen?10 +QtCore.QLocale.Language.Church?10 +QtCore.QLocale.Language.Chuvash?10 +QtCore.QLocale.Language.Cree?10 +QtCore.QLocale.Language.Haitian?10 +QtCore.QLocale.Language.Herero?10 +QtCore.QLocale.Language.HiriMotu?10 +QtCore.QLocale.Language.Kanuri?10 +QtCore.QLocale.Language.Komi?10 +QtCore.QLocale.Language.Kongo?10 +QtCore.QLocale.Language.Kwanyama?10 +QtCore.QLocale.Language.Limburgish?10 +QtCore.QLocale.Language.Luxembourgish?10 +QtCore.QLocale.Language.Navaho?10 +QtCore.QLocale.Language.Ndonga?10 +QtCore.QLocale.Language.Ojibwa?10 +QtCore.QLocale.Language.Pali?10 +QtCore.QLocale.Language.Walloon?10 +QtCore.QLocale.Language.Avestan?10 +QtCore.QLocale.Language.Asturian?10 +QtCore.QLocale.Language.Ngomba?10 +QtCore.QLocale.Language.Kako?10 +QtCore.QLocale.Language.Meta?10 +QtCore.QLocale.Language.Ngiemboon?10 +QtCore.QLocale.Language.Uighur?10 +QtCore.QLocale.Language.Aragonese?10 +QtCore.QLocale.Language.Akkadian?10 +QtCore.QLocale.Language.AncientEgyptian?10 +QtCore.QLocale.Language.AncientGreek?10 +QtCore.QLocale.Language.Aramaic?10 +QtCore.QLocale.Language.Balinese?10 +QtCore.QLocale.Language.Bamun?10 +QtCore.QLocale.Language.BatakToba?10 +QtCore.QLocale.Language.Buginese?10 +QtCore.QLocale.Language.Buhid?10 +QtCore.QLocale.Language.Carian?10 +QtCore.QLocale.Language.Chakma?10 +QtCore.QLocale.Language.ClassicalMandaic?10 +QtCore.QLocale.Language.Coptic?10 +QtCore.QLocale.Language.Dogri?10 +QtCore.QLocale.Language.EasternCham?10 +QtCore.QLocale.Language.EasternKayah?10 +QtCore.QLocale.Language.Etruscan?10 +QtCore.QLocale.Language.Gothic?10 +QtCore.QLocale.Language.Hanunoo?10 +QtCore.QLocale.Language.Ingush?10 +QtCore.QLocale.Language.LargeFloweryMiao?10 +QtCore.QLocale.Language.Lepcha?10 +QtCore.QLocale.Language.Limbu?10 +QtCore.QLocale.Language.Lisu?10 +QtCore.QLocale.Language.Lu?10 +QtCore.QLocale.Language.Lycian?10 +QtCore.QLocale.Language.Lydian?10 +QtCore.QLocale.Language.Mandingo?10 +QtCore.QLocale.Language.Manipuri?10 +QtCore.QLocale.Language.Meroitic?10 +QtCore.QLocale.Language.NorthernThai?10 +QtCore.QLocale.Language.OldIrish?10 +QtCore.QLocale.Language.OldNorse?10 +QtCore.QLocale.Language.OldPersian?10 +QtCore.QLocale.Language.OldTurkish?10 +QtCore.QLocale.Language.Pahlavi?10 +QtCore.QLocale.Language.Parthian?10 +QtCore.QLocale.Language.Phoenician?10 +QtCore.QLocale.Language.PrakritLanguage?10 +QtCore.QLocale.Language.Rejang?10 +QtCore.QLocale.Language.Sabaean?10 +QtCore.QLocale.Language.Samaritan?10 +QtCore.QLocale.Language.Santali?10 +QtCore.QLocale.Language.Saurashtra?10 +QtCore.QLocale.Language.Sora?10 +QtCore.QLocale.Language.Sylheti?10 +QtCore.QLocale.Language.Tagbanwa?10 +QtCore.QLocale.Language.TaiDam?10 +QtCore.QLocale.Language.TaiNua?10 +QtCore.QLocale.Language.Ugaritic?10 +QtCore.QLocale.Language.Akoose?10 +QtCore.QLocale.Language.Lakota?10 +QtCore.QLocale.Language.StandardMoroccanTamazight?10 +QtCore.QLocale.Language.Mapuche?10 +QtCore.QLocale.Language.CentralKurdish?10 +QtCore.QLocale.Language.LowerSorbian?10 +QtCore.QLocale.Language.UpperSorbian?10 +QtCore.QLocale.Language.Kenyang?10 +QtCore.QLocale.Language.Mohawk?10 +QtCore.QLocale.Language.Nko?10 +QtCore.QLocale.Language.Prussian?10 +QtCore.QLocale.Language.Kiche?10 +QtCore.QLocale.Language.SouthernSami?10 +QtCore.QLocale.Language.LuleSami?10 +QtCore.QLocale.Language.InariSami?10 +QtCore.QLocale.Language.SkoltSami?10 +QtCore.QLocale.Language.Warlpiri?10 +QtCore.QLocale.Language.ManichaeanMiddlePersian?10 +QtCore.QLocale.Language.Mende?10 +QtCore.QLocale.Language.AncientNorthArabian?10 +QtCore.QLocale.Language.LinearA?10 +QtCore.QLocale.Language.HmongNjua?10 +QtCore.QLocale.Language.Ho?10 +QtCore.QLocale.Language.Lezghian?10 +QtCore.QLocale.Language.Bassa?10 +QtCore.QLocale.Language.Mono?10 +QtCore.QLocale.Language.TedimChin?10 +QtCore.QLocale.Language.Maithili?10 +QtCore.QLocale.Language.Ahom?10 +QtCore.QLocale.Language.AmericanSignLanguage?10 +QtCore.QLocale.Language.ArdhamagadhiPrakrit?10 +QtCore.QLocale.Language.Bhojpuri?10 +QtCore.QLocale.Language.HieroglyphicLuwian?10 +QtCore.QLocale.Language.LiteraryChinese?10 +QtCore.QLocale.Language.Mazanderani?10 +QtCore.QLocale.Language.Mru?10 +QtCore.QLocale.Language.Newari?10 +QtCore.QLocale.Language.NorthernLuri?10 +QtCore.QLocale.Language.Palauan?10 +QtCore.QLocale.Language.Papiamento?10 +QtCore.QLocale.Language.Saraiki?10 +QtCore.QLocale.Language.TokelauLanguage?10 +QtCore.QLocale.Language.TokPisin?10 +QtCore.QLocale.Language.TuvaluLanguage?10 +QtCore.QLocale.Language.UncodedLanguages?10 +QtCore.QLocale.Language.Cantonese?10 +QtCore.QLocale.Language.Osage?10 +QtCore.QLocale.Language.Tangut?10 +QtCore.QLocale.Language.Ido?10 +QtCore.QLocale.Language.Lojban?10 +QtCore.QLocale.Language.Sicilian?10 +QtCore.QLocale.Language.SouthernKurdish?10 +QtCore.QLocale.Language.WesternBalochi?10 +QtCore.QLocale.Language.Cebuano?10 +QtCore.QLocale.Language.Erzya?10 +QtCore.QLocale.Language.Chickasaw?10 +QtCore.QLocale.Language.Muscogee?10 +QtCore.QLocale.Language.Silesian?10 +QtCore.QLocale.Language.NigerianPidgin?10 +QtCore.QLocale?1() +QtCore.QLocale.__init__?1(self) +QtCore.QLocale?1(QString) +QtCore.QLocale.__init__?1(self, QString) +QtCore.QLocale?1(QLocale.Language, QLocale.Country country=QLocale.AnyCountry) +QtCore.QLocale.__init__?1(self, QLocale.Language, QLocale.Country country=QLocale.AnyCountry) +QtCore.QLocale?1(QLocale) +QtCore.QLocale.__init__?1(self, QLocale) +QtCore.QLocale?1(QLocale.Language, QLocale.Script, QLocale.Country) +QtCore.QLocale.__init__?1(self, QLocale.Language, QLocale.Script, QLocale.Country) +QtCore.QLocale.language?4() -> QLocale.Language +QtCore.QLocale.country?4() -> QLocale.Country +QtCore.QLocale.name?4() -> QString +QtCore.QLocale.toShort?4(QString) -> (int, bool) +QtCore.QLocale.toUShort?4(QString) -> (int, bool) +QtCore.QLocale.toInt?4(QString) -> (int, bool) +QtCore.QLocale.toUInt?4(QString) -> (int, bool) +QtCore.QLocale.toLongLong?4(QString) -> (int, bool) +QtCore.QLocale.toULongLong?4(QString) -> (int, bool) +QtCore.QLocale.toFloat?4(QString) -> (float, bool) +QtCore.QLocale.toDouble?4(QString) -> (float, bool) +QtCore.QLocale.toString?4(float, str format='g', int precision=6) -> QString +QtCore.QLocale.languageToString?4(QLocale.Language) -> QString +QtCore.QLocale.countryToString?4(QLocale.Country) -> QString +QtCore.QLocale.setDefault?4(QLocale) +QtCore.QLocale.c?4() -> QLocale +QtCore.QLocale.system?4() -> QLocale +QtCore.QLocale.toString?4(QDateTime, QString) -> QString +QtCore.QLocale.toString?4(QDateTime, QString, QCalendar) -> QString +QtCore.QLocale.toString?4(QDateTime, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.toString?4(QDateTime, QLocale.FormatType, QCalendar) -> QString +QtCore.QLocale.toString?4(QDate, QString) -> QString +QtCore.QLocale.toString?4(QDate, QString, QCalendar) -> QString +QtCore.QLocale.toString?4(QDate, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.toString?4(QDate, QLocale.FormatType, QCalendar) -> QString +QtCore.QLocale.toString?4(QTime, QString) -> QString +QtCore.QLocale.toString?4(QTime, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.dateFormat?4(QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.timeFormat?4(QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.dateTimeFormat?4(QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.toDate?4(QString, QLocale.FormatType format=QLocale.LongFormat) -> QDate +QtCore.QLocale.toDate?4(QString, QString) -> QDate +QtCore.QLocale.toTime?4(QString, QLocale.FormatType format=QLocale.LongFormat) -> QTime +QtCore.QLocale.toTime?4(QString, QString) -> QTime +QtCore.QLocale.toDateTime?4(QString, QLocale.FormatType format=QLocale.LongFormat) -> QDateTime +QtCore.QLocale.toDateTime?4(QString, QString) -> QDateTime +QtCore.QLocale.decimalPoint?4() -> QChar +QtCore.QLocale.groupSeparator?4() -> QChar +QtCore.QLocale.percent?4() -> QChar +QtCore.QLocale.zeroDigit?4() -> QChar +QtCore.QLocale.negativeSign?4() -> QChar +QtCore.QLocale.exponential?4() -> QChar +QtCore.QLocale.monthName?4(int, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.dayName?4(int, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.setNumberOptions?4(QLocale.NumberOptions) +QtCore.QLocale.numberOptions?4() -> QLocale.NumberOptions +QtCore.QLocale.measurementSystem?4() -> QLocale.MeasurementSystem +QtCore.QLocale.positiveSign?4() -> QChar +QtCore.QLocale.standaloneMonthName?4(int, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.standaloneDayName?4(int, QLocale.FormatType format=QLocale.LongFormat) -> QString +QtCore.QLocale.amText?4() -> QString +QtCore.QLocale.pmText?4() -> QString +QtCore.QLocale.textDirection?4() -> Qt.LayoutDirection +QtCore.QLocale.script?4() -> QLocale.Script +QtCore.QLocale.bcp47Name?4() -> QString +QtCore.QLocale.nativeLanguageName?4() -> QString +QtCore.QLocale.nativeCountryName?4() -> QString +QtCore.QLocale.firstDayOfWeek?4() -> Qt.DayOfWeek +QtCore.QLocale.weekdays?4() -> unknown-type +QtCore.QLocale.toUpper?4(QString) -> QString +QtCore.QLocale.toLower?4(QString) -> QString +QtCore.QLocale.currencySymbol?4(QLocale.CurrencySymbolFormat format=QLocale.CurrencySymbol) -> QString +QtCore.QLocale.toCurrencyString?4(float, QString symbol='') -> QString +QtCore.QLocale.toCurrencyString?4(float, QString, int) -> QString +QtCore.QLocale.uiLanguages?4() -> QStringList +QtCore.QLocale.scriptToString?4(QLocale.Script) -> QString +QtCore.QLocale.matchingLocales?4(QLocale.Language, QLocale.Script, QLocale.Country) -> unknown-type +QtCore.QLocale.quoteString?4(QString, QLocale.QuotationStyle style=QLocale.StandardQuotation) -> QString +QtCore.QLocale.createSeparatedList?4(QStringList) -> QString +QtCore.QLocale.swap?4(QLocale) +QtCore.QLocale.toString?4(Any) -> QString +QtCore.QLocale.toCurrencyString?4(Any, QString symbol='') -> QString +QtCore.QLocale.formattedDataSize?4(int, int precision=2, QLocale.DataSizeFormats format=QLocale.DataSizeIecFormat) -> QString +QtCore.QLocale.toLong?4(QString) -> (int, bool) +QtCore.QLocale.toULong?4(QString) -> (int, bool) +QtCore.QLocale.toDate?4(QString, QLocale.FormatType, QCalendar) -> QDate +QtCore.QLocale.toTime?4(QString, QLocale.FormatType, QCalendar) -> QTime +QtCore.QLocale.toDateTime?4(QString, QLocale.FormatType, QCalendar) -> QDateTime +QtCore.QLocale.toDate?4(QString, QString, QCalendar) -> QDate +QtCore.QLocale.toTime?4(QString, QString, QCalendar) -> QTime +QtCore.QLocale.toDateTime?4(QString, QString, QCalendar) -> QDateTime +QtCore.QLocale.collation?4() -> QLocale +QtCore.QLocale.NumberOptions?1() +QtCore.QLocale.NumberOptions.__init__?1(self) +QtCore.QLocale.NumberOptions?1(int) +QtCore.QLocale.NumberOptions.__init__?1(self, int) +QtCore.QLocale.NumberOptions?1(QLocale.NumberOptions) +QtCore.QLocale.NumberOptions.__init__?1(self, QLocale.NumberOptions) +QtCore.QLocale.DataSizeFormats?1() +QtCore.QLocale.DataSizeFormats.__init__?1(self) +QtCore.QLocale.DataSizeFormats?1(int) +QtCore.QLocale.DataSizeFormats.__init__?1(self, int) +QtCore.QLocale.DataSizeFormats?1(QLocale.DataSizeFormats) +QtCore.QLocale.DataSizeFormats.__init__?1(self, QLocale.DataSizeFormats) +QtCore.QLockFile.LockError?10 +QtCore.QLockFile.LockError.NoError?10 +QtCore.QLockFile.LockError.LockFailedError?10 +QtCore.QLockFile.LockError.PermissionError?10 +QtCore.QLockFile.LockError.UnknownError?10 +QtCore.QLockFile?1(QString) +QtCore.QLockFile.__init__?1(self, QString) +QtCore.QLockFile.lock?4() -> bool +QtCore.QLockFile.tryLock?4(int timeout=0) -> bool +QtCore.QLockFile.unlock?4() +QtCore.QLockFile.setStaleLockTime?4(int) +QtCore.QLockFile.staleLockTime?4() -> int +QtCore.QLockFile.isLocked?4() -> bool +QtCore.QLockFile.getLockInfo?4() -> (bool, int, QString, QString) +QtCore.QLockFile.removeStaleLockFile?4() -> bool +QtCore.QLockFile.error?4() -> QLockFile.LockError +QtCore.QMessageLogContext.category?7 +QtCore.QMessageLogContext.file?7 +QtCore.QMessageLogContext.function?7 +QtCore.QMessageLogContext.line?7 +QtCore.QMessageLogger?1() +QtCore.QMessageLogger.__init__?1(self) +QtCore.QMessageLogger?1(str, int, str) +QtCore.QMessageLogger.__init__?1(self, str, int, str) +QtCore.QMessageLogger?1(str, int, str, str) +QtCore.QMessageLogger.__init__?1(self, str, int, str, str) +QtCore.QMessageLogger.debug?4(str) +QtCore.QMessageLogger.warning?4(str) +QtCore.QMessageLogger.critical?4(str) +QtCore.QMessageLogger.fatal?4(str) +QtCore.QMessageLogger.info?4(str) +QtCore.QLoggingCategory?1(str) +QtCore.QLoggingCategory.__init__?1(self, str) +QtCore.QLoggingCategory?1(str, QtMsgType) +QtCore.QLoggingCategory.__init__?1(self, str, QtMsgType) +QtCore.QLoggingCategory.isEnabled?4(QtMsgType) -> bool +QtCore.QLoggingCategory.setEnabled?4(QtMsgType, bool) +QtCore.QLoggingCategory.isDebugEnabled?4() -> bool +QtCore.QLoggingCategory.isInfoEnabled?4() -> bool +QtCore.QLoggingCategory.isWarningEnabled?4() -> bool +QtCore.QLoggingCategory.isCriticalEnabled?4() -> bool +QtCore.QLoggingCategory.categoryName?4() -> str +QtCore.QLoggingCategory.defaultCategory?4() -> QLoggingCategory +QtCore.QLoggingCategory.setFilterRules?4(QString) +QtCore.QMargins?1() +QtCore.QMargins.__init__?1(self) +QtCore.QMargins?1(int, int, int, int) +QtCore.QMargins.__init__?1(self, int, int, int, int) +QtCore.QMargins?1(QMargins) +QtCore.QMargins.__init__?1(self, QMargins) +QtCore.QMargins.isNull?4() -> bool +QtCore.QMargins.left?4() -> int +QtCore.QMargins.top?4() -> int +QtCore.QMargins.right?4() -> int +QtCore.QMargins.bottom?4() -> int +QtCore.QMargins.setLeft?4(int) +QtCore.QMargins.setTop?4(int) +QtCore.QMargins.setRight?4(int) +QtCore.QMargins.setBottom?4(int) +QtCore.QMarginsF?1() +QtCore.QMarginsF.__init__?1(self) +QtCore.QMarginsF?1(float, float, float, float) +QtCore.QMarginsF.__init__?1(self, float, float, float, float) +QtCore.QMarginsF?1(QMargins) +QtCore.QMarginsF.__init__?1(self, QMargins) +QtCore.QMarginsF?1(QMarginsF) +QtCore.QMarginsF.__init__?1(self, QMarginsF) +QtCore.QMarginsF.isNull?4() -> bool +QtCore.QMarginsF.left?4() -> float +QtCore.QMarginsF.top?4() -> float +QtCore.QMarginsF.right?4() -> float +QtCore.QMarginsF.bottom?4() -> float +QtCore.QMarginsF.setLeft?4(float) +QtCore.QMarginsF.setTop?4(float) +QtCore.QMarginsF.setRight?4(float) +QtCore.QMarginsF.setBottom?4(float) +QtCore.QMarginsF.toMargins?4() -> QMargins +QtCore.QMessageAuthenticationCode?1(QCryptographicHash.Algorithm, QByteArray key=QByteArray()) +QtCore.QMessageAuthenticationCode.__init__?1(self, QCryptographicHash.Algorithm, QByteArray key=QByteArray()) +QtCore.QMessageAuthenticationCode.reset?4() +QtCore.QMessageAuthenticationCode.setKey?4(QByteArray) +QtCore.QMessageAuthenticationCode.addData?4(str, int) +QtCore.QMessageAuthenticationCode.addData?4(QByteArray) +QtCore.QMessageAuthenticationCode.addData?4(QIODevice) -> bool +QtCore.QMessageAuthenticationCode.result?4() -> QByteArray +QtCore.QMessageAuthenticationCode.hash?4(QByteArray, QByteArray, QCryptographicHash.Algorithm) -> QByteArray +QtCore.QMetaMethod.MethodType?10 +QtCore.QMetaMethod.MethodType.Method?10 +QtCore.QMetaMethod.MethodType.Signal?10 +QtCore.QMetaMethod.MethodType.Slot?10 +QtCore.QMetaMethod.MethodType.Constructor?10 +QtCore.QMetaMethod.Access?10 +QtCore.QMetaMethod.Access.Private?10 +QtCore.QMetaMethod.Access.Protected?10 +QtCore.QMetaMethod.Access.Public?10 +QtCore.QMetaMethod?1() +QtCore.QMetaMethod.__init__?1(self) +QtCore.QMetaMethod?1(QMetaMethod) +QtCore.QMetaMethod.__init__?1(self, QMetaMethod) +QtCore.QMetaMethod.typeName?4() -> str +QtCore.QMetaMethod.parameterTypes?4() -> unknown-type +QtCore.QMetaMethod.parameterNames?4() -> unknown-type +QtCore.QMetaMethod.tag?4() -> str +QtCore.QMetaMethod.access?4() -> QMetaMethod.Access +QtCore.QMetaMethod.methodType?4() -> QMetaMethod.MethodType +QtCore.QMetaMethod.invoke?4(QObject, Qt.ConnectionType, QGenericReturnArgument, QGenericArgument value0=QGenericArgument(0, 0), QGenericArgument value1=QGenericArgument(0, 0), QGenericArgument value2=QGenericArgument(0, 0), QGenericArgument value3=QGenericArgument(0, 0), QGenericArgument value4=QGenericArgument(0, 0), QGenericArgument value5=QGenericArgument(0, 0), QGenericArgument value6=QGenericArgument(0, 0), QGenericArgument value7=QGenericArgument(0, 0), QGenericArgument value8=QGenericArgument(0, 0), QGenericArgument value9=QGenericArgument(0, 0)) -> Any +QtCore.QMetaMethod.invoke?4(QObject, QGenericReturnArgument, QGenericArgument value0=QGenericArgument(0, 0), QGenericArgument value1=QGenericArgument(0, 0), QGenericArgument value2=QGenericArgument(0, 0), QGenericArgument value3=QGenericArgument(0, 0), QGenericArgument value4=QGenericArgument(0, 0), QGenericArgument value5=QGenericArgument(0, 0), QGenericArgument value6=QGenericArgument(0, 0), QGenericArgument value7=QGenericArgument(0, 0), QGenericArgument value8=QGenericArgument(0, 0), QGenericArgument value9=QGenericArgument(0, 0)) -> Any +QtCore.QMetaMethod.invoke?4(QObject, Qt.ConnectionType, QGenericArgument value0=QGenericArgument(0, 0), QGenericArgument value1=QGenericArgument(0, 0), QGenericArgument value2=QGenericArgument(0, 0), QGenericArgument value3=QGenericArgument(0, 0), QGenericArgument value4=QGenericArgument(0, 0), QGenericArgument value5=QGenericArgument(0, 0), QGenericArgument value6=QGenericArgument(0, 0), QGenericArgument value7=QGenericArgument(0, 0), QGenericArgument value8=QGenericArgument(0, 0), QGenericArgument value9=QGenericArgument(0, 0)) -> Any +QtCore.QMetaMethod.invoke?4(QObject, QGenericArgument value0=QGenericArgument(0, 0), QGenericArgument value1=QGenericArgument(0, 0), QGenericArgument value2=QGenericArgument(0, 0), QGenericArgument value3=QGenericArgument(0, 0), QGenericArgument value4=QGenericArgument(0, 0), QGenericArgument value5=QGenericArgument(0, 0), QGenericArgument value6=QGenericArgument(0, 0), QGenericArgument value7=QGenericArgument(0, 0), QGenericArgument value8=QGenericArgument(0, 0), QGenericArgument value9=QGenericArgument(0, 0)) -> Any +QtCore.QMetaMethod.methodIndex?4() -> int +QtCore.QMetaMethod.isValid?4() -> bool +QtCore.QMetaMethod.methodSignature?4() -> QByteArray +QtCore.QMetaMethod.name?4() -> QByteArray +QtCore.QMetaMethod.returnType?4() -> int +QtCore.QMetaMethod.parameterCount?4() -> int +QtCore.QMetaMethod.parameterType?4(int) -> int +QtCore.QMetaEnum?1() +QtCore.QMetaEnum.__init__?1(self) +QtCore.QMetaEnum?1(QMetaEnum) +QtCore.QMetaEnum.__init__?1(self, QMetaEnum) +QtCore.QMetaEnum.name?4() -> str +QtCore.QMetaEnum.isFlag?4() -> bool +QtCore.QMetaEnum.keyCount?4() -> int +QtCore.QMetaEnum.key?4(int) -> str +QtCore.QMetaEnum.value?4(int) -> int +QtCore.QMetaEnum.scope?4() -> str +QtCore.QMetaEnum.keyToValue?4(str) -> (int, bool) +QtCore.QMetaEnum.valueToKey?4(int) -> str +QtCore.QMetaEnum.keysToValue?4(str) -> (int, bool) +QtCore.QMetaEnum.valueToKeys?4(int) -> QByteArray +QtCore.QMetaEnum.isValid?4() -> bool +QtCore.QMetaEnum.isScoped?4() -> bool +QtCore.QMetaEnum.enumName?4() -> str +QtCore.QMetaProperty?1() +QtCore.QMetaProperty.__init__?1(self) +QtCore.QMetaProperty?1(QMetaProperty) +QtCore.QMetaProperty.__init__?1(self, QMetaProperty) +QtCore.QMetaProperty.name?4() -> str +QtCore.QMetaProperty.typeName?4() -> str +QtCore.QMetaProperty.type?4() -> QVariant.Type +QtCore.QMetaProperty.isReadable?4() -> bool +QtCore.QMetaProperty.isWritable?4() -> bool +QtCore.QMetaProperty.isDesignable?4(QObject object=None) -> bool +QtCore.QMetaProperty.isScriptable?4(QObject object=None) -> bool +QtCore.QMetaProperty.isStored?4(QObject object=None) -> bool +QtCore.QMetaProperty.isFlagType?4() -> bool +QtCore.QMetaProperty.isEnumType?4() -> bool +QtCore.QMetaProperty.enumerator?4() -> QMetaEnum +QtCore.QMetaProperty.read?4(QObject) -> QVariant +QtCore.QMetaProperty.write?4(QObject, QVariant) -> bool +QtCore.QMetaProperty.reset?4(QObject) -> bool +QtCore.QMetaProperty.hasStdCppSet?4() -> bool +QtCore.QMetaProperty.isValid?4() -> bool +QtCore.QMetaProperty.isResettable?4() -> bool +QtCore.QMetaProperty.isUser?4(QObject object=None) -> bool +QtCore.QMetaProperty.userType?4() -> int +QtCore.QMetaProperty.hasNotifySignal?4() -> bool +QtCore.QMetaProperty.notifySignal?4() -> QMetaMethod +QtCore.QMetaProperty.notifySignalIndex?4() -> int +QtCore.QMetaProperty.propertyIndex?4() -> int +QtCore.QMetaProperty.isConstant?4() -> bool +QtCore.QMetaProperty.isFinal?4() -> bool +QtCore.QMetaProperty.relativePropertyIndex?4() -> int +QtCore.QMetaProperty.isRequired?4() -> bool +QtCore.QMetaClassInfo?1() +QtCore.QMetaClassInfo.__init__?1(self) +QtCore.QMetaClassInfo?1(QMetaClassInfo) +QtCore.QMetaClassInfo.__init__?1(self, QMetaClassInfo) +QtCore.QMetaClassInfo.name?4() -> str +QtCore.QMetaClassInfo.value?4() -> str +QtCore.QMetaType.TypeFlag?10 +QtCore.QMetaType.TypeFlag.NeedsConstruction?10 +QtCore.QMetaType.TypeFlag.NeedsDestruction?10 +QtCore.QMetaType.TypeFlag.MovableType?10 +QtCore.QMetaType.TypeFlag.PointerToQObject?10 +QtCore.QMetaType.TypeFlag.IsEnumeration?10 +QtCore.QMetaType.Type?10 +QtCore.QMetaType.Type.UnknownType?10 +QtCore.QMetaType.Type.Void?10 +QtCore.QMetaType.Type.Bool?10 +QtCore.QMetaType.Type.Int?10 +QtCore.QMetaType.Type.UInt?10 +QtCore.QMetaType.Type.LongLong?10 +QtCore.QMetaType.Type.ULongLong?10 +QtCore.QMetaType.Type.Double?10 +QtCore.QMetaType.Type.QChar?10 +QtCore.QMetaType.Type.QVariantMap?10 +QtCore.QMetaType.Type.QVariantList?10 +QtCore.QMetaType.Type.QVariantHash?10 +QtCore.QMetaType.Type.QString?10 +QtCore.QMetaType.Type.QStringList?10 +QtCore.QMetaType.Type.QByteArray?10 +QtCore.QMetaType.Type.QBitArray?10 +QtCore.QMetaType.Type.QDate?10 +QtCore.QMetaType.Type.QTime?10 +QtCore.QMetaType.Type.QDateTime?10 +QtCore.QMetaType.Type.QUrl?10 +QtCore.QMetaType.Type.QLocale?10 +QtCore.QMetaType.Type.QRect?10 +QtCore.QMetaType.Type.QRectF?10 +QtCore.QMetaType.Type.QSize?10 +QtCore.QMetaType.Type.QSizeF?10 +QtCore.QMetaType.Type.QLine?10 +QtCore.QMetaType.Type.QLineF?10 +QtCore.QMetaType.Type.QPoint?10 +QtCore.QMetaType.Type.QPointF?10 +QtCore.QMetaType.Type.QRegExp?10 +QtCore.QMetaType.Type.LastCoreType?10 +QtCore.QMetaType.Type.FirstGuiType?10 +QtCore.QMetaType.Type.QFont?10 +QtCore.QMetaType.Type.QPixmap?10 +QtCore.QMetaType.Type.QBrush?10 +QtCore.QMetaType.Type.QColor?10 +QtCore.QMetaType.Type.QPalette?10 +QtCore.QMetaType.Type.QIcon?10 +QtCore.QMetaType.Type.QImage?10 +QtCore.QMetaType.Type.QPolygon?10 +QtCore.QMetaType.Type.QRegion?10 +QtCore.QMetaType.Type.QBitmap?10 +QtCore.QMetaType.Type.QCursor?10 +QtCore.QMetaType.Type.QSizePolicy?10 +QtCore.QMetaType.Type.QKeySequence?10 +QtCore.QMetaType.Type.QPen?10 +QtCore.QMetaType.Type.QTextLength?10 +QtCore.QMetaType.Type.QTextFormat?10 +QtCore.QMetaType.Type.QMatrix?10 +QtCore.QMetaType.Type.QTransform?10 +QtCore.QMetaType.Type.VoidStar?10 +QtCore.QMetaType.Type.Long?10 +QtCore.QMetaType.Type.Short?10 +QtCore.QMetaType.Type.Char?10 +QtCore.QMetaType.Type.ULong?10 +QtCore.QMetaType.Type.UShort?10 +QtCore.QMetaType.Type.UChar?10 +QtCore.QMetaType.Type.Float?10 +QtCore.QMetaType.Type.QObjectStar?10 +QtCore.QMetaType.Type.QMatrix4x4?10 +QtCore.QMetaType.Type.QVector2D?10 +QtCore.QMetaType.Type.QVector3D?10 +QtCore.QMetaType.Type.QVector4D?10 +QtCore.QMetaType.Type.QQuaternion?10 +QtCore.QMetaType.Type.QEasingCurve?10 +QtCore.QMetaType.Type.QVariant?10 +QtCore.QMetaType.Type.QUuid?10 +QtCore.QMetaType.Type.QModelIndex?10 +QtCore.QMetaType.Type.QPolygonF?10 +QtCore.QMetaType.Type.SChar?10 +QtCore.QMetaType.Type.QRegularExpression?10 +QtCore.QMetaType.Type.QJsonValue?10 +QtCore.QMetaType.Type.QJsonObject?10 +QtCore.QMetaType.Type.QJsonArray?10 +QtCore.QMetaType.Type.QJsonDocument?10 +QtCore.QMetaType.Type.QByteArrayList?10 +QtCore.QMetaType.Type.QPersistentModelIndex?10 +QtCore.QMetaType.Type.QCborSimpleType?10 +QtCore.QMetaType.Type.QCborValue?10 +QtCore.QMetaType.Type.QCborArray?10 +QtCore.QMetaType.Type.QCborMap?10 +QtCore.QMetaType.Type.QColorSpace?10 +QtCore.QMetaType.Type.User?10 +QtCore.QMetaType?1(int type=QMetaType.Type.UnknownType) +QtCore.QMetaType.__init__?1(self, int type=QMetaType.Type.UnknownType) +QtCore.QMetaType.type?4(str) -> int +QtCore.QMetaType.typeName?4(int) -> str +QtCore.QMetaType.isRegistered?4(int) -> bool +QtCore.QMetaType.typeFlags?4(int) -> QMetaType.TypeFlags +QtCore.QMetaType.flags?4() -> QMetaType.TypeFlags +QtCore.QMetaType.isValid?4() -> bool +QtCore.QMetaType.isRegistered?4() -> bool +QtCore.QMetaType.metaObjectForType?4(int) -> QMetaObject +QtCore.QMetaType.id?4() -> int +QtCore.QMetaType.name?4() -> QByteArray +QtCore.QMetaType.TypeFlags?1() +QtCore.QMetaType.TypeFlags.__init__?1(self) +QtCore.QMetaType.TypeFlags?1(int) +QtCore.QMetaType.TypeFlags.__init__?1(self, int) +QtCore.QMetaType.TypeFlags?1(QMetaType.TypeFlags) +QtCore.QMetaType.TypeFlags.__init__?1(self, QMetaType.TypeFlags) +QtCore.QMimeData?1() +QtCore.QMimeData.__init__?1(self) +QtCore.QMimeData.urls?4() -> unknown-type +QtCore.QMimeData.setUrls?4(unknown-type) +QtCore.QMimeData.hasUrls?4() -> bool +QtCore.QMimeData.text?4() -> QString +QtCore.QMimeData.setText?4(QString) +QtCore.QMimeData.hasText?4() -> bool +QtCore.QMimeData.html?4() -> QString +QtCore.QMimeData.setHtml?4(QString) +QtCore.QMimeData.hasHtml?4() -> bool +QtCore.QMimeData.imageData?4() -> QVariant +QtCore.QMimeData.setImageData?4(QVariant) +QtCore.QMimeData.hasImage?4() -> bool +QtCore.QMimeData.colorData?4() -> QVariant +QtCore.QMimeData.setColorData?4(QVariant) +QtCore.QMimeData.hasColor?4() -> bool +QtCore.QMimeData.data?4(QString) -> QByteArray +QtCore.QMimeData.setData?4(QString, QByteArray) +QtCore.QMimeData.hasFormat?4(QString) -> bool +QtCore.QMimeData.formats?4() -> QStringList +QtCore.QMimeData.clear?4() +QtCore.QMimeData.removeFormat?4(QString) +QtCore.QMimeData.retrieveData?4(QString, QVariant.Type) -> QVariant +QtCore.QMimeDatabase.MatchMode?10 +QtCore.QMimeDatabase.MatchMode.MatchDefault?10 +QtCore.QMimeDatabase.MatchMode.MatchExtension?10 +QtCore.QMimeDatabase.MatchMode.MatchContent?10 +QtCore.QMimeDatabase?1() +QtCore.QMimeDatabase.__init__?1(self) +QtCore.QMimeDatabase.mimeTypeForName?4(QString) -> QMimeType +QtCore.QMimeDatabase.mimeTypeForFile?4(QString, QMimeDatabase.MatchMode mode=QMimeDatabase.MatchDefault) -> QMimeType +QtCore.QMimeDatabase.mimeTypeForFile?4(QFileInfo, QMimeDatabase.MatchMode mode=QMimeDatabase.MatchDefault) -> QMimeType +QtCore.QMimeDatabase.mimeTypesForFileName?4(QString) -> unknown-type +QtCore.QMimeDatabase.mimeTypeForData?4(QByteArray) -> QMimeType +QtCore.QMimeDatabase.mimeTypeForData?4(QIODevice) -> QMimeType +QtCore.QMimeDatabase.mimeTypeForUrl?4(QUrl) -> QMimeType +QtCore.QMimeDatabase.mimeTypeForFileNameAndData?4(QString, QIODevice) -> QMimeType +QtCore.QMimeDatabase.mimeTypeForFileNameAndData?4(QString, QByteArray) -> QMimeType +QtCore.QMimeDatabase.suffixForFileName?4(QString) -> QString +QtCore.QMimeDatabase.allMimeTypes?4() -> unknown-type +QtCore.QMimeType?1() +QtCore.QMimeType.__init__?1(self) +QtCore.QMimeType?1(QMimeType) +QtCore.QMimeType.__init__?1(self, QMimeType) +QtCore.QMimeType.swap?4(QMimeType) +QtCore.QMimeType.isValid?4() -> bool +QtCore.QMimeType.isDefault?4() -> bool +QtCore.QMimeType.name?4() -> QString +QtCore.QMimeType.comment?4() -> QString +QtCore.QMimeType.genericIconName?4() -> QString +QtCore.QMimeType.iconName?4() -> QString +QtCore.QMimeType.globPatterns?4() -> QStringList +QtCore.QMimeType.parentMimeTypes?4() -> QStringList +QtCore.QMimeType.allAncestors?4() -> QStringList +QtCore.QMimeType.aliases?4() -> QStringList +QtCore.QMimeType.suffixes?4() -> QStringList +QtCore.QMimeType.preferredSuffix?4() -> QString +QtCore.QMimeType.inherits?4(QString) -> bool +QtCore.QMimeType.filterString?4() -> QString +QtCore.QMutexLocker?1(QMutex) +QtCore.QMutexLocker.__init__?1(self, QMutex) +QtCore.QMutexLocker?1(QRecursiveMutex) +QtCore.QMutexLocker.__init__?1(self, QRecursiveMutex) +QtCore.QMutexLocker.unlock?4() +QtCore.QMutexLocker.relock?4() +QtCore.QMutexLocker.mutex?4() -> QMutex +QtCore.QMutexLocker.__enter__?4() -> Any +QtCore.QMutexLocker.__exit__?4(Any, Any, Any) +QtCore.QMutex.RecursionMode?10 +QtCore.QMutex.RecursionMode.NonRecursive?10 +QtCore.QMutex.RecursionMode.Recursive?10 +QtCore.QMutex?1(QMutex.RecursionMode mode=QMutex.NonRecursive) +QtCore.QMutex.__init__?1(self, QMutex.RecursionMode mode=QMutex.NonRecursive) +QtCore.QMutex.lock?4() +QtCore.QMutex.tryLock?4(int timeout=0) -> bool +QtCore.QMutex.unlock?4() +QtCore.QMutex.isRecursive?4() -> bool +QtCore.QRecursiveMutex?1() +QtCore.QRecursiveMutex.__init__?1(self) +QtCore.QSignalBlocker?1(QObject) +QtCore.QSignalBlocker.__init__?1(self, QObject) +QtCore.QSignalBlocker.reblock?4() +QtCore.QSignalBlocker.unblock?4() +QtCore.QSignalBlocker.__enter__?4() -> Any +QtCore.QSignalBlocker.__exit__?4(Any, Any, Any) +QtCore.QObjectCleanupHandler?1() +QtCore.QObjectCleanupHandler.__init__?1(self) +QtCore.QObjectCleanupHandler.add?4(QObject) -> QObject +QtCore.QObjectCleanupHandler.remove?4(QObject) +QtCore.QObjectCleanupHandler.isEmpty?4() -> bool +QtCore.QObjectCleanupHandler.clear?4() +QtCore.QMetaObject?1() +QtCore.QMetaObject.__init__?1(self) +QtCore.QMetaObject?1(QMetaObject) +QtCore.QMetaObject.__init__?1(self, QMetaObject) +QtCore.QMetaObject.className?4() -> str +QtCore.QMetaObject.superClass?4() -> QMetaObject +QtCore.QMetaObject.userProperty?4() -> QMetaProperty +QtCore.QMetaObject.methodOffset?4() -> int +QtCore.QMetaObject.enumeratorOffset?4() -> int +QtCore.QMetaObject.propertyOffset?4() -> int +QtCore.QMetaObject.classInfoOffset?4() -> int +QtCore.QMetaObject.methodCount?4() -> int +QtCore.QMetaObject.enumeratorCount?4() -> int +QtCore.QMetaObject.propertyCount?4() -> int +QtCore.QMetaObject.classInfoCount?4() -> int +QtCore.QMetaObject.indexOfMethod?4(str) -> int +QtCore.QMetaObject.indexOfSignal?4(str) -> int +QtCore.QMetaObject.indexOfSlot?4(str) -> int +QtCore.QMetaObject.indexOfEnumerator?4(str) -> int +QtCore.QMetaObject.indexOfProperty?4(str) -> int +QtCore.QMetaObject.indexOfClassInfo?4(str) -> int +QtCore.QMetaObject.method?4(int) -> QMetaMethod +QtCore.QMetaObject.enumerator?4(int) -> QMetaEnum +QtCore.QMetaObject.property?4(int) -> QMetaProperty +QtCore.QMetaObject.classInfo?4(int) -> QMetaClassInfo +QtCore.QMetaObject.checkConnectArgs?4(str, str) -> bool +QtCore.QMetaObject.connectSlotsByName?4(QObject) +QtCore.QMetaObject.normalizedSignature?4(str) -> QByteArray +QtCore.QMetaObject.normalizedType?4(str) -> QByteArray +QtCore.QMetaObject.invokeMethod?4(QObject, str, Qt.ConnectionType, QGenericReturnArgument, QGenericArgument value0=QGenericArgument(0, 0), QGenericArgument value1=QGenericArgument(0, 0), QGenericArgument value2=QGenericArgument(0, 0), QGenericArgument value3=QGenericArgument(0, 0), QGenericArgument value4=QGenericArgument(0, 0), QGenericArgument value5=QGenericArgument(0, 0), QGenericArgument value6=QGenericArgument(0, 0), QGenericArgument value7=QGenericArgument(0, 0), QGenericArgument value8=QGenericArgument(0, 0), QGenericArgument value9=QGenericArgument(0, 0)) -> Any +QtCore.QMetaObject.invokeMethod?4(QObject, str, QGenericReturnArgument, QGenericArgument value0=QGenericArgument(0, 0), QGenericArgument value1=QGenericArgument(0, 0), QGenericArgument value2=QGenericArgument(0, 0), QGenericArgument value3=QGenericArgument(0, 0), QGenericArgument value4=QGenericArgument(0, 0), QGenericArgument value5=QGenericArgument(0, 0), QGenericArgument value6=QGenericArgument(0, 0), QGenericArgument value7=QGenericArgument(0, 0), QGenericArgument value8=QGenericArgument(0, 0), QGenericArgument value9=QGenericArgument(0, 0)) -> Any +QtCore.QMetaObject.invokeMethod?4(QObject, str, Qt.ConnectionType, QGenericArgument value0=QGenericArgument(0, 0), QGenericArgument value1=QGenericArgument(0, 0), QGenericArgument value2=QGenericArgument(0, 0), QGenericArgument value3=QGenericArgument(0, 0), QGenericArgument value4=QGenericArgument(0, 0), QGenericArgument value5=QGenericArgument(0, 0), QGenericArgument value6=QGenericArgument(0, 0), QGenericArgument value7=QGenericArgument(0, 0), QGenericArgument value8=QGenericArgument(0, 0), QGenericArgument value9=QGenericArgument(0, 0)) -> Any +QtCore.QMetaObject.invokeMethod?4(QObject, str, QGenericArgument value0=QGenericArgument(0, 0), QGenericArgument value1=QGenericArgument(0, 0), QGenericArgument value2=QGenericArgument(0, 0), QGenericArgument value3=QGenericArgument(0, 0), QGenericArgument value4=QGenericArgument(0, 0), QGenericArgument value5=QGenericArgument(0, 0), QGenericArgument value6=QGenericArgument(0, 0), QGenericArgument value7=QGenericArgument(0, 0), QGenericArgument value8=QGenericArgument(0, 0), QGenericArgument value9=QGenericArgument(0, 0)) -> Any +QtCore.QMetaObject.constructorCount?4() -> int +QtCore.QMetaObject.indexOfConstructor?4(str) -> int +QtCore.QMetaObject.constructor?4(int) -> QMetaMethod +QtCore.QMetaObject.checkConnectArgs?4(QMetaMethod, QMetaMethod) -> bool +QtCore.QMetaObject.inherits?4(QMetaObject) -> bool +QtCore.QMetaObject.Connection?1() +QtCore.QMetaObject.Connection.__init__?1(self) +QtCore.QMetaObject.Connection?1(QMetaObject.Connection) +QtCore.QMetaObject.Connection.__init__?1(self, QMetaObject.Connection) +QtCore.QOperatingSystemVersion.OSType?10 +QtCore.QOperatingSystemVersion.OSType.Unknown?10 +QtCore.QOperatingSystemVersion.OSType.Windows?10 +QtCore.QOperatingSystemVersion.OSType.MacOS?10 +QtCore.QOperatingSystemVersion.OSType.IOS?10 +QtCore.QOperatingSystemVersion.OSType.TvOS?10 +QtCore.QOperatingSystemVersion.OSType.WatchOS?10 +QtCore.QOperatingSystemVersion.OSType.Android?10 +QtCore.QOperatingSystemVersion.AndroidJellyBean?7 +QtCore.QOperatingSystemVersion.AndroidJellyBean_MR1?7 +QtCore.QOperatingSystemVersion.AndroidJellyBean_MR2?7 +QtCore.QOperatingSystemVersion.AndroidKitKat?7 +QtCore.QOperatingSystemVersion.AndroidLollipop?7 +QtCore.QOperatingSystemVersion.AndroidLollipop_MR1?7 +QtCore.QOperatingSystemVersion.AndroidMarshmallow?7 +QtCore.QOperatingSystemVersion.AndroidNougat?7 +QtCore.QOperatingSystemVersion.AndroidNougat_MR1?7 +QtCore.QOperatingSystemVersion.AndroidOreo?7 +QtCore.QOperatingSystemVersion.MacOSBigSur?7 +QtCore.QOperatingSystemVersion.MacOSCatalina?7 +QtCore.QOperatingSystemVersion.MacOSHighSierra?7 +QtCore.QOperatingSystemVersion.MacOSMojave?7 +QtCore.QOperatingSystemVersion.MacOSSierra?7 +QtCore.QOperatingSystemVersion.OSXElCapitan?7 +QtCore.QOperatingSystemVersion.OSXMavericks?7 +QtCore.QOperatingSystemVersion.OSXYosemite?7 +QtCore.QOperatingSystemVersion.Windows10?7 +QtCore.QOperatingSystemVersion.Windows7?7 +QtCore.QOperatingSystemVersion.Windows8?7 +QtCore.QOperatingSystemVersion.Windows8_1?7 +QtCore.QOperatingSystemVersion?1(QOperatingSystemVersion.OSType, int, int vminor=-1, int vmicro=-1) +QtCore.QOperatingSystemVersion.__init__?1(self, QOperatingSystemVersion.OSType, int, int vminor=-1, int vmicro=-1) +QtCore.QOperatingSystemVersion?1(QOperatingSystemVersion) +QtCore.QOperatingSystemVersion.__init__?1(self, QOperatingSystemVersion) +QtCore.QOperatingSystemVersion.current?4() -> QOperatingSystemVersion +QtCore.QOperatingSystemVersion.currentType?4() -> QOperatingSystemVersion.OSType +QtCore.QOperatingSystemVersion.majorVersion?4() -> int +QtCore.QOperatingSystemVersion.minorVersion?4() -> int +QtCore.QOperatingSystemVersion.microVersion?4() -> int +QtCore.QOperatingSystemVersion.segmentCount?4() -> int +QtCore.QOperatingSystemVersion.type?4() -> QOperatingSystemVersion.OSType +QtCore.QOperatingSystemVersion.name?4() -> QString +QtCore.QParallelAnimationGroup?1(QObject parent=None) +QtCore.QParallelAnimationGroup.__init__?1(self, QObject parent=None) +QtCore.QParallelAnimationGroup.duration?4() -> int +QtCore.QParallelAnimationGroup.event?4(QEvent) -> bool +QtCore.QParallelAnimationGroup.updateCurrentTime?4(int) +QtCore.QParallelAnimationGroup.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) +QtCore.QParallelAnimationGroup.updateDirection?4(QAbstractAnimation.Direction) +QtCore.QPauseAnimation?1(QObject parent=None) +QtCore.QPauseAnimation.__init__?1(self, QObject parent=None) +QtCore.QPauseAnimation?1(int, QObject parent=None) +QtCore.QPauseAnimation.__init__?1(self, int, QObject parent=None) +QtCore.QPauseAnimation.duration?4() -> int +QtCore.QPauseAnimation.setDuration?4(int) +QtCore.QPauseAnimation.event?4(QEvent) -> bool +QtCore.QPauseAnimation.updateCurrentTime?4(int) +QtCore.QVariantAnimation?1(QObject parent=None) +QtCore.QVariantAnimation.__init__?1(self, QObject parent=None) +QtCore.QVariantAnimation.startValue?4() -> QVariant +QtCore.QVariantAnimation.setStartValue?4(QVariant) +QtCore.QVariantAnimation.endValue?4() -> QVariant +QtCore.QVariantAnimation.setEndValue?4(QVariant) +QtCore.QVariantAnimation.keyValueAt?4(float) -> QVariant +QtCore.QVariantAnimation.setKeyValueAt?4(float, QVariant) +QtCore.QVariantAnimation.keyValues?4() -> unknown-type +QtCore.QVariantAnimation.setKeyValues?4(unknown-type) +QtCore.QVariantAnimation.currentValue?4() -> QVariant +QtCore.QVariantAnimation.duration?4() -> int +QtCore.QVariantAnimation.setDuration?4(int) +QtCore.QVariantAnimation.easingCurve?4() -> QEasingCurve +QtCore.QVariantAnimation.setEasingCurve?4(QEasingCurve) +QtCore.QVariantAnimation.valueChanged?4(QVariant) +QtCore.QVariantAnimation.event?4(QEvent) -> bool +QtCore.QVariantAnimation.updateCurrentTime?4(int) +QtCore.QVariantAnimation.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) +QtCore.QVariantAnimation.updateCurrentValue?4(QVariant) +QtCore.QVariantAnimation.interpolated?4(QVariant, QVariant, float) -> QVariant +QtCore.QPropertyAnimation?1(QObject parent=None) +QtCore.QPropertyAnimation.__init__?1(self, QObject parent=None) +QtCore.QPropertyAnimation?1(QObject, QByteArray, QObject parent=None) +QtCore.QPropertyAnimation.__init__?1(self, QObject, QByteArray, QObject parent=None) +QtCore.QPropertyAnimation.targetObject?4() -> QObject +QtCore.QPropertyAnimation.setTargetObject?4(QObject) +QtCore.QPropertyAnimation.propertyName?4() -> QByteArray +QtCore.QPropertyAnimation.setPropertyName?4(QByteArray) +QtCore.QPropertyAnimation.event?4(QEvent) -> bool +QtCore.QPropertyAnimation.updateCurrentValue?4(QVariant) +QtCore.QPropertyAnimation.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) +QtCore.QPluginLoader?1(QObject parent=None) +QtCore.QPluginLoader.__init__?1(self, QObject parent=None) +QtCore.QPluginLoader?1(QString, QObject parent=None) +QtCore.QPluginLoader.__init__?1(self, QString, QObject parent=None) +QtCore.QPluginLoader.instance?4() -> QObject +QtCore.QPluginLoader.staticInstances?4() -> unknown-type +QtCore.QPluginLoader.load?4() -> bool +QtCore.QPluginLoader.unload?4() -> bool +QtCore.QPluginLoader.isLoaded?4() -> bool +QtCore.QPluginLoader.setFileName?4(QString) +QtCore.QPluginLoader.fileName?4() -> QString +QtCore.QPluginLoader.errorString?4() -> QString +QtCore.QPluginLoader.setLoadHints?4(QLibrary.LoadHints) +QtCore.QPluginLoader.loadHints?4() -> QLibrary.LoadHints +QtCore.QPoint?1() +QtCore.QPoint.__init__?1(self) +QtCore.QPoint?1(int, int) +QtCore.QPoint.__init__?1(self, int, int) +QtCore.QPoint?1(QPoint) +QtCore.QPoint.__init__?1(self, QPoint) +QtCore.QPoint.manhattanLength?4() -> int +QtCore.QPoint.isNull?4() -> bool +QtCore.QPoint.x?4() -> int +QtCore.QPoint.y?4() -> int +QtCore.QPoint.setX?4(int) +QtCore.QPoint.setY?4(int) +QtCore.QPoint.dotProduct?4(QPoint, QPoint) -> int +QtCore.QPoint.transposed?4() -> QPoint +QtCore.QPointF?1() +QtCore.QPointF.__init__?1(self) +QtCore.QPointF?1(float, float) +QtCore.QPointF.__init__?1(self, float, float) +QtCore.QPointF?1(QPoint) +QtCore.QPointF.__init__?1(self, QPoint) +QtCore.QPointF?1(QPointF) +QtCore.QPointF.__init__?1(self, QPointF) +QtCore.QPointF.isNull?4() -> bool +QtCore.QPointF.x?4() -> float +QtCore.QPointF.y?4() -> float +QtCore.QPointF.setX?4(float) +QtCore.QPointF.setY?4(float) +QtCore.QPointF.toPoint?4() -> QPoint +QtCore.QPointF.manhattanLength?4() -> float +QtCore.QPointF.dotProduct?4(QPointF, QPointF) -> float +QtCore.QPointF.transposed?4() -> QPointF +QtCore.QProcess.InputChannelMode?10 +QtCore.QProcess.InputChannelMode.ManagedInputChannel?10 +QtCore.QProcess.InputChannelMode.ForwardedInputChannel?10 +QtCore.QProcess.ProcessChannelMode?10 +QtCore.QProcess.ProcessChannelMode.SeparateChannels?10 +QtCore.QProcess.ProcessChannelMode.MergedChannels?10 +QtCore.QProcess.ProcessChannelMode.ForwardedChannels?10 +QtCore.QProcess.ProcessChannelMode.ForwardedOutputChannel?10 +QtCore.QProcess.ProcessChannelMode.ForwardedErrorChannel?10 +QtCore.QProcess.ProcessChannel?10 +QtCore.QProcess.ProcessChannel.StandardOutput?10 +QtCore.QProcess.ProcessChannel.StandardError?10 +QtCore.QProcess.ProcessState?10 +QtCore.QProcess.ProcessState.NotRunning?10 +QtCore.QProcess.ProcessState.Starting?10 +QtCore.QProcess.ProcessState.Running?10 +QtCore.QProcess.ProcessError?10 +QtCore.QProcess.ProcessError.FailedToStart?10 +QtCore.QProcess.ProcessError.Crashed?10 +QtCore.QProcess.ProcessError.Timedout?10 +QtCore.QProcess.ProcessError.ReadError?10 +QtCore.QProcess.ProcessError.WriteError?10 +QtCore.QProcess.ProcessError.UnknownError?10 +QtCore.QProcess.ExitStatus?10 +QtCore.QProcess.ExitStatus.NormalExit?10 +QtCore.QProcess.ExitStatus.CrashExit?10 +QtCore.QProcess?1(QObject parent=None) +QtCore.QProcess.__init__?1(self, QObject parent=None) +QtCore.QProcess.start?4(QString, QStringList, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtCore.QProcess.start?4(QString, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtCore.QProcess.start?4(QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtCore.QProcess.readChannel?4() -> QProcess.ProcessChannel +QtCore.QProcess.setReadChannel?4(QProcess.ProcessChannel) +QtCore.QProcess.closeReadChannel?4(QProcess.ProcessChannel) +QtCore.QProcess.closeWriteChannel?4() +QtCore.QProcess.workingDirectory?4() -> QString +QtCore.QProcess.setWorkingDirectory?4(QString) +QtCore.QProcess.error?4() -> QProcess.ProcessError +QtCore.QProcess.state?4() -> QProcess.ProcessState +QtCore.QProcess.pid?4() -> int +QtCore.QProcess.waitForStarted?4(int msecs=30000) -> bool +QtCore.QProcess.waitForReadyRead?4(int msecs=30000) -> bool +QtCore.QProcess.waitForBytesWritten?4(int msecs=30000) -> bool +QtCore.QProcess.waitForFinished?4(int msecs=30000) -> bool +QtCore.QProcess.readAllStandardOutput?4() -> QByteArray +QtCore.QProcess.readAllStandardError?4() -> QByteArray +QtCore.QProcess.exitCode?4() -> int +QtCore.QProcess.exitStatus?4() -> QProcess.ExitStatus +QtCore.QProcess.bytesAvailable?4() -> int +QtCore.QProcess.bytesToWrite?4() -> int +QtCore.QProcess.isSequential?4() -> bool +QtCore.QProcess.canReadLine?4() -> bool +QtCore.QProcess.close?4() +QtCore.QProcess.atEnd?4() -> bool +QtCore.QProcess.execute?4(QString, QStringList) -> int +QtCore.QProcess.execute?4(QString) -> int +QtCore.QProcess.startDetached?4(QString, QStringList, QString) -> (bool, int) +QtCore.QProcess.startDetached?4(QString, QStringList) -> bool +QtCore.QProcess.startDetached?4(QString) -> bool +QtCore.QProcess.startDetached?4() -> (bool, int) +QtCore.QProcess.systemEnvironment?4() -> QStringList +QtCore.QProcess.processChannelMode?4() -> QProcess.ProcessChannelMode +QtCore.QProcess.setProcessChannelMode?4(QProcess.ProcessChannelMode) +QtCore.QProcess.setStandardInputFile?4(QString) +QtCore.QProcess.setStandardOutputFile?4(QString, QIODevice.OpenMode mode=QIODevice.Truncate) +QtCore.QProcess.setStandardErrorFile?4(QString, QIODevice.OpenMode mode=QIODevice.Truncate) +QtCore.QProcess.setStandardOutputProcess?4(QProcess) +QtCore.QProcess.terminate?4() +QtCore.QProcess.kill?4() +QtCore.QProcess.started?4() +QtCore.QProcess.finished?4(int, QProcess.ExitStatus) +QtCore.QProcess.error?4(QProcess.ProcessError) +QtCore.QProcess.stateChanged?4(QProcess.ProcessState) +QtCore.QProcess.readyReadStandardOutput?4() +QtCore.QProcess.readyReadStandardError?4() +QtCore.QProcess.errorOccurred?4(QProcess.ProcessError) +QtCore.QProcess.setProcessState?4(QProcess.ProcessState) +QtCore.QProcess.setupChildProcess?4() +QtCore.QProcess.readData?4(int) -> Any +QtCore.QProcess.writeData?4(bytes) -> int +QtCore.QProcess.setProcessEnvironment?4(QProcessEnvironment) +QtCore.QProcess.processEnvironment?4() -> QProcessEnvironment +QtCore.QProcess.program?4() -> QString +QtCore.QProcess.setProgram?4(QString) +QtCore.QProcess.arguments?4() -> QStringList +QtCore.QProcess.setArguments?4(QStringList) +QtCore.QProcess.open?4(QIODevice.OpenMode mode=QIODevice.ReadWrite) -> bool +QtCore.QProcess.inputChannelMode?4() -> QProcess.InputChannelMode +QtCore.QProcess.setInputChannelMode?4(QProcess.InputChannelMode) +QtCore.QProcess.nullDevice?4() -> QString +QtCore.QProcess.processId?4() -> int +QtCore.QProcessEnvironment?1() +QtCore.QProcessEnvironment.__init__?1(self) +QtCore.QProcessEnvironment?1(QProcessEnvironment) +QtCore.QProcessEnvironment.__init__?1(self, QProcessEnvironment) +QtCore.QProcessEnvironment.isEmpty?4() -> bool +QtCore.QProcessEnvironment.clear?4() +QtCore.QProcessEnvironment.contains?4(QString) -> bool +QtCore.QProcessEnvironment.insert?4(QString, QString) +QtCore.QProcessEnvironment.insert?4(QProcessEnvironment) +QtCore.QProcessEnvironment.remove?4(QString) +QtCore.QProcessEnvironment.value?4(QString, QString defaultValue='') -> QString +QtCore.QProcessEnvironment.toStringList?4() -> QStringList +QtCore.QProcessEnvironment.systemEnvironment?4() -> QProcessEnvironment +QtCore.QProcessEnvironment.keys?4() -> QStringList +QtCore.QProcessEnvironment.swap?4(QProcessEnvironment) +QtCore.QRandomGenerator?1(int seed=1) +QtCore.QRandomGenerator.__init__?1(self, int seed=1) +QtCore.QRandomGenerator?1(QRandomGenerator) +QtCore.QRandomGenerator.__init__?1(self, QRandomGenerator) +QtCore.QRandomGenerator.generate?4() -> int +QtCore.QRandomGenerator.generate64?4() -> int +QtCore.QRandomGenerator.generateDouble?4() -> float +QtCore.QRandomGenerator.bounded?4(float) -> float +QtCore.QRandomGenerator.bounded?4(int) -> int +QtCore.QRandomGenerator.bounded?4(int, int) -> int +QtCore.QRandomGenerator.seed?4(int seed=1) +QtCore.QRandomGenerator.discard?4(int) +QtCore.QRandomGenerator.min?4() -> int +QtCore.QRandomGenerator.max?4() -> int +QtCore.QRandomGenerator.system?4() -> QRandomGenerator +QtCore.QRandomGenerator.global_?4() -> QRandomGenerator +QtCore.QRandomGenerator.securelySeeded?4() -> QRandomGenerator +QtCore.QReadWriteLock.RecursionMode?10 +QtCore.QReadWriteLock.RecursionMode.NonRecursive?10 +QtCore.QReadWriteLock.RecursionMode.Recursive?10 +QtCore.QReadWriteLock?1(QReadWriteLock.RecursionMode recursionMode=QReadWriteLock.NonRecursive) +QtCore.QReadWriteLock.__init__?1(self, QReadWriteLock.RecursionMode recursionMode=QReadWriteLock.NonRecursive) +QtCore.QReadWriteLock.lockForRead?4() +QtCore.QReadWriteLock.tryLockForRead?4() -> bool +QtCore.QReadWriteLock.tryLockForRead?4(int) -> bool +QtCore.QReadWriteLock.lockForWrite?4() +QtCore.QReadWriteLock.tryLockForWrite?4() -> bool +QtCore.QReadWriteLock.tryLockForWrite?4(int) -> bool +QtCore.QReadWriteLock.unlock?4() +QtCore.QReadLocker?1(QReadWriteLock) +QtCore.QReadLocker.__init__?1(self, QReadWriteLock) +QtCore.QReadLocker.unlock?4() +QtCore.QReadLocker.relock?4() +QtCore.QReadLocker.readWriteLock?4() -> QReadWriteLock +QtCore.QReadLocker.__enter__?4() -> Any +QtCore.QReadLocker.__exit__?4(Any, Any, Any) +QtCore.QWriteLocker?1(QReadWriteLock) +QtCore.QWriteLocker.__init__?1(self, QReadWriteLock) +QtCore.QWriteLocker.unlock?4() +QtCore.QWriteLocker.relock?4() +QtCore.QWriteLocker.readWriteLock?4() -> QReadWriteLock +QtCore.QWriteLocker.__enter__?4() -> Any +QtCore.QWriteLocker.__exit__?4(Any, Any, Any) +QtCore.QRect?1() +QtCore.QRect.__init__?1(self) +QtCore.QRect?1(int, int, int, int) +QtCore.QRect.__init__?1(self, int, int, int, int) +QtCore.QRect?1(QPoint, QPoint) +QtCore.QRect.__init__?1(self, QPoint, QPoint) +QtCore.QRect?1(QPoint, QSize) +QtCore.QRect.__init__?1(self, QPoint, QSize) +QtCore.QRect?1(QRect) +QtCore.QRect.__init__?1(self, QRect) +QtCore.QRect.normalized?4() -> QRect +QtCore.QRect.moveCenter?4(QPoint) +QtCore.QRect.contains?4(QPoint, bool proper=False) -> bool +QtCore.QRect.contains?4(QRect, bool proper=False) -> bool +QtCore.QRect.intersects?4(QRect) -> bool +QtCore.QRect.isNull?4() -> bool +QtCore.QRect.isEmpty?4() -> bool +QtCore.QRect.isValid?4() -> bool +QtCore.QRect.left?4() -> int +QtCore.QRect.top?4() -> int +QtCore.QRect.right?4() -> int +QtCore.QRect.bottom?4() -> int +QtCore.QRect.x?4() -> int +QtCore.QRect.y?4() -> int +QtCore.QRect.setLeft?4(int) +QtCore.QRect.setTop?4(int) +QtCore.QRect.setRight?4(int) +QtCore.QRect.setBottom?4(int) +QtCore.QRect.setTopLeft?4(QPoint) +QtCore.QRect.setBottomRight?4(QPoint) +QtCore.QRect.setTopRight?4(QPoint) +QtCore.QRect.setBottomLeft?4(QPoint) +QtCore.QRect.setX?4(int) +QtCore.QRect.setY?4(int) +QtCore.QRect.topLeft?4() -> QPoint +QtCore.QRect.bottomRight?4() -> QPoint +QtCore.QRect.topRight?4() -> QPoint +QtCore.QRect.bottomLeft?4() -> QPoint +QtCore.QRect.center?4() -> QPoint +QtCore.QRect.width?4() -> int +QtCore.QRect.height?4() -> int +QtCore.QRect.size?4() -> QSize +QtCore.QRect.translate?4(int, int) +QtCore.QRect.translate?4(QPoint) +QtCore.QRect.translated?4(int, int) -> QRect +QtCore.QRect.translated?4(QPoint) -> QRect +QtCore.QRect.moveTo?4(int, int) +QtCore.QRect.moveTo?4(QPoint) +QtCore.QRect.moveLeft?4(int) +QtCore.QRect.moveTop?4(int) +QtCore.QRect.moveRight?4(int) +QtCore.QRect.moveBottom?4(int) +QtCore.QRect.moveTopLeft?4(QPoint) +QtCore.QRect.moveBottomRight?4(QPoint) +QtCore.QRect.moveTopRight?4(QPoint) +QtCore.QRect.moveBottomLeft?4(QPoint) +QtCore.QRect.getRect?4() -> (int, int, int, int) +QtCore.QRect.setRect?4(int, int, int, int) +QtCore.QRect.getCoords?4() -> (int, int, int, int) +QtCore.QRect.setCoords?4(int, int, int, int) +QtCore.QRect.adjusted?4(int, int, int, int) -> QRect +QtCore.QRect.adjust?4(int, int, int, int) +QtCore.QRect.setWidth?4(int) +QtCore.QRect.setHeight?4(int) +QtCore.QRect.setSize?4(QSize) +QtCore.QRect.contains?4(int, int, bool) -> bool +QtCore.QRect.contains?4(int, int) -> bool +QtCore.QRect.intersected?4(QRect) -> QRect +QtCore.QRect.united?4(QRect) -> QRect +QtCore.QRect.marginsAdded?4(QMargins) -> QRect +QtCore.QRect.marginsRemoved?4(QMargins) -> QRect +QtCore.QRect.transposed?4() -> QRect +QtCore.QRectF?1() +QtCore.QRectF.__init__?1(self) +QtCore.QRectF?1(QPointF, QSizeF) +QtCore.QRectF.__init__?1(self, QPointF, QSizeF) +QtCore.QRectF?1(QPointF, QPointF) +QtCore.QRectF.__init__?1(self, QPointF, QPointF) +QtCore.QRectF?1(float, float, float, float) +QtCore.QRectF.__init__?1(self, float, float, float, float) +QtCore.QRectF?1(QRect) +QtCore.QRectF.__init__?1(self, QRect) +QtCore.QRectF?1(QRectF) +QtCore.QRectF.__init__?1(self, QRectF) +QtCore.QRectF.normalized?4() -> QRectF +QtCore.QRectF.left?4() -> float +QtCore.QRectF.top?4() -> float +QtCore.QRectF.right?4() -> float +QtCore.QRectF.bottom?4() -> float +QtCore.QRectF.setX?4(float) +QtCore.QRectF.setY?4(float) +QtCore.QRectF.topLeft?4() -> QPointF +QtCore.QRectF.bottomRight?4() -> QPointF +QtCore.QRectF.topRight?4() -> QPointF +QtCore.QRectF.bottomLeft?4() -> QPointF +QtCore.QRectF.contains?4(QPointF) -> bool +QtCore.QRectF.contains?4(QRectF) -> bool +QtCore.QRectF.intersects?4(QRectF) -> bool +QtCore.QRectF.isNull?4() -> bool +QtCore.QRectF.isEmpty?4() -> bool +QtCore.QRectF.isValid?4() -> bool +QtCore.QRectF.x?4() -> float +QtCore.QRectF.y?4() -> float +QtCore.QRectF.setLeft?4(float) +QtCore.QRectF.setRight?4(float) +QtCore.QRectF.setTop?4(float) +QtCore.QRectF.setBottom?4(float) +QtCore.QRectF.setTopLeft?4(QPointF) +QtCore.QRectF.setTopRight?4(QPointF) +QtCore.QRectF.setBottomLeft?4(QPointF) +QtCore.QRectF.setBottomRight?4(QPointF) +QtCore.QRectF.center?4() -> QPointF +QtCore.QRectF.moveLeft?4(float) +QtCore.QRectF.moveTop?4(float) +QtCore.QRectF.moveRight?4(float) +QtCore.QRectF.moveBottom?4(float) +QtCore.QRectF.moveTopLeft?4(QPointF) +QtCore.QRectF.moveTopRight?4(QPointF) +QtCore.QRectF.moveBottomLeft?4(QPointF) +QtCore.QRectF.moveBottomRight?4(QPointF) +QtCore.QRectF.moveCenter?4(QPointF) +QtCore.QRectF.width?4() -> float +QtCore.QRectF.height?4() -> float +QtCore.QRectF.size?4() -> QSizeF +QtCore.QRectF.translate?4(float, float) +QtCore.QRectF.translate?4(QPointF) +QtCore.QRectF.moveTo?4(float, float) +QtCore.QRectF.moveTo?4(QPointF) +QtCore.QRectF.translated?4(float, float) -> QRectF +QtCore.QRectF.translated?4(QPointF) -> QRectF +QtCore.QRectF.getRect?4() -> (float, float, float, float) +QtCore.QRectF.setRect?4(float, float, float, float) +QtCore.QRectF.getCoords?4() -> (float, float, float, float) +QtCore.QRectF.setCoords?4(float, float, float, float) +QtCore.QRectF.adjust?4(float, float, float, float) +QtCore.QRectF.adjusted?4(float, float, float, float) -> QRectF +QtCore.QRectF.setWidth?4(float) +QtCore.QRectF.setHeight?4(float) +QtCore.QRectF.setSize?4(QSizeF) +QtCore.QRectF.contains?4(float, float) -> bool +QtCore.QRectF.intersected?4(QRectF) -> QRectF +QtCore.QRectF.united?4(QRectF) -> QRectF +QtCore.QRectF.toAlignedRect?4() -> QRect +QtCore.QRectF.toRect?4() -> QRect +QtCore.QRectF.marginsAdded?4(QMarginsF) -> QRectF +QtCore.QRectF.marginsRemoved?4(QMarginsF) -> QRectF +QtCore.QRectF.transposed?4() -> QRectF +QtCore.QRegExp.CaretMode?10 +QtCore.QRegExp.CaretMode.CaretAtZero?10 +QtCore.QRegExp.CaretMode.CaretAtOffset?10 +QtCore.QRegExp.CaretMode.CaretWontMatch?10 +QtCore.QRegExp.PatternSyntax?10 +QtCore.QRegExp.PatternSyntax.RegExp?10 +QtCore.QRegExp.PatternSyntax.RegExp2?10 +QtCore.QRegExp.PatternSyntax.Wildcard?10 +QtCore.QRegExp.PatternSyntax.FixedString?10 +QtCore.QRegExp.PatternSyntax.WildcardUnix?10 +QtCore.QRegExp.PatternSyntax.W3CXmlSchema11?10 +QtCore.QRegExp?1() +QtCore.QRegExp.__init__?1(self) +QtCore.QRegExp?1(QString, Qt.CaseSensitivity cs=Qt.CaseSensitive, QRegExp.PatternSyntax syntax=QRegExp.RegExp) +QtCore.QRegExp.__init__?1(self, QString, Qt.CaseSensitivity cs=Qt.CaseSensitive, QRegExp.PatternSyntax syntax=QRegExp.RegExp) +QtCore.QRegExp?1(QRegExp) +QtCore.QRegExp.__init__?1(self, QRegExp) +QtCore.QRegExp.isEmpty?4() -> bool +QtCore.QRegExp.isValid?4() -> bool +QtCore.QRegExp.pattern?4() -> QString +QtCore.QRegExp.setPattern?4(QString) +QtCore.QRegExp.caseSensitivity?4() -> Qt.CaseSensitivity +QtCore.QRegExp.setCaseSensitivity?4(Qt.CaseSensitivity) +QtCore.QRegExp.patternSyntax?4() -> QRegExp.PatternSyntax +QtCore.QRegExp.setPatternSyntax?4(QRegExp.PatternSyntax) +QtCore.QRegExp.isMinimal?4() -> bool +QtCore.QRegExp.setMinimal?4(bool) +QtCore.QRegExp.exactMatch?4(QString) -> bool +QtCore.QRegExp.indexIn?4(QString, int offset=0, QRegExp.CaretMode caretMode=QRegExp.CaretAtZero) -> int +QtCore.QRegExp.lastIndexIn?4(QString, int offset=-1, QRegExp.CaretMode caretMode=QRegExp.CaretAtZero) -> int +QtCore.QRegExp.matchedLength?4() -> int +QtCore.QRegExp.capturedTexts?4() -> QStringList +QtCore.QRegExp.cap?4(int nth=0) -> QString +QtCore.QRegExp.pos?4(int nth=0) -> int +QtCore.QRegExp.errorString?4() -> QString +QtCore.QRegExp.escape?4(QString) -> QString +QtCore.QRegExp.captureCount?4() -> int +QtCore.QRegExp.swap?4(QRegExp) +QtCore.QRegularExpression.MatchOption?10 +QtCore.QRegularExpression.MatchOption.NoMatchOption?10 +QtCore.QRegularExpression.MatchOption.AnchoredMatchOption?10 +QtCore.QRegularExpression.MatchOption.DontCheckSubjectStringMatchOption?10 +QtCore.QRegularExpression.MatchType?10 +QtCore.QRegularExpression.MatchType.NormalMatch?10 +QtCore.QRegularExpression.MatchType.PartialPreferCompleteMatch?10 +QtCore.QRegularExpression.MatchType.PartialPreferFirstMatch?10 +QtCore.QRegularExpression.MatchType.NoMatch?10 +QtCore.QRegularExpression.PatternOption?10 +QtCore.QRegularExpression.PatternOption.NoPatternOption?10 +QtCore.QRegularExpression.PatternOption.CaseInsensitiveOption?10 +QtCore.QRegularExpression.PatternOption.DotMatchesEverythingOption?10 +QtCore.QRegularExpression.PatternOption.MultilineOption?10 +QtCore.QRegularExpression.PatternOption.ExtendedPatternSyntaxOption?10 +QtCore.QRegularExpression.PatternOption.InvertedGreedinessOption?10 +QtCore.QRegularExpression.PatternOption.DontCaptureOption?10 +QtCore.QRegularExpression.PatternOption.UseUnicodePropertiesOption?10 +QtCore.QRegularExpression.PatternOption.OptimizeOnFirstUsageOption?10 +QtCore.QRegularExpression.PatternOption.DontAutomaticallyOptimizeOption?10 +QtCore.QRegularExpression?1() +QtCore.QRegularExpression.__init__?1(self) +QtCore.QRegularExpression?1(QString, QRegularExpression.PatternOptions options=QRegularExpression.NoPatternOption) +QtCore.QRegularExpression.__init__?1(self, QString, QRegularExpression.PatternOptions options=QRegularExpression.NoPatternOption) +QtCore.QRegularExpression?1(QRegularExpression) +QtCore.QRegularExpression.__init__?1(self, QRegularExpression) +QtCore.QRegularExpression.patternOptions?4() -> QRegularExpression.PatternOptions +QtCore.QRegularExpression.setPatternOptions?4(QRegularExpression.PatternOptions) +QtCore.QRegularExpression.swap?4(QRegularExpression) +QtCore.QRegularExpression.pattern?4() -> QString +QtCore.QRegularExpression.setPattern?4(QString) +QtCore.QRegularExpression.isValid?4() -> bool +QtCore.QRegularExpression.patternErrorOffset?4() -> int +QtCore.QRegularExpression.errorString?4() -> QString +QtCore.QRegularExpression.captureCount?4() -> int +QtCore.QRegularExpression.match?4(QString, int offset=0, QRegularExpression.MatchType matchType=QRegularExpression.NormalMatch, QRegularExpression.MatchOptions matchOptions=QRegularExpression.NoMatchOption) -> QRegularExpressionMatch +QtCore.QRegularExpression.globalMatch?4(QString, int offset=0, QRegularExpression.MatchType matchType=QRegularExpression.NormalMatch, QRegularExpression.MatchOptions matchOptions=QRegularExpression.NoMatchOption) -> QRegularExpressionMatchIterator +QtCore.QRegularExpression.escape?4(QString) -> QString +QtCore.QRegularExpression.namedCaptureGroups?4() -> QStringList +QtCore.QRegularExpression.optimize?4() +QtCore.QRegularExpression.wildcardToRegularExpression?4(QString) -> QString +QtCore.QRegularExpression.anchoredPattern?4(QString) -> QString +QtCore.QRegularExpression.PatternOptions?1() +QtCore.QRegularExpression.PatternOptions.__init__?1(self) +QtCore.QRegularExpression.PatternOptions?1(int) +QtCore.QRegularExpression.PatternOptions.__init__?1(self, int) +QtCore.QRegularExpression.PatternOptions?1(QRegularExpression.PatternOptions) +QtCore.QRegularExpression.PatternOptions.__init__?1(self, QRegularExpression.PatternOptions) +QtCore.QRegularExpression.MatchOptions?1() +QtCore.QRegularExpression.MatchOptions.__init__?1(self) +QtCore.QRegularExpression.MatchOptions?1(int) +QtCore.QRegularExpression.MatchOptions.__init__?1(self, int) +QtCore.QRegularExpression.MatchOptions?1(QRegularExpression.MatchOptions) +QtCore.QRegularExpression.MatchOptions.__init__?1(self, QRegularExpression.MatchOptions) +QtCore.QRegularExpressionMatch?1() +QtCore.QRegularExpressionMatch.__init__?1(self) +QtCore.QRegularExpressionMatch?1(QRegularExpressionMatch) +QtCore.QRegularExpressionMatch.__init__?1(self, QRegularExpressionMatch) +QtCore.QRegularExpressionMatch.swap?4(QRegularExpressionMatch) +QtCore.QRegularExpressionMatch.regularExpression?4() -> QRegularExpression +QtCore.QRegularExpressionMatch.matchType?4() -> QRegularExpression.MatchType +QtCore.QRegularExpressionMatch.matchOptions?4() -> QRegularExpression.MatchOptions +QtCore.QRegularExpressionMatch.hasMatch?4() -> bool +QtCore.QRegularExpressionMatch.hasPartialMatch?4() -> bool +QtCore.QRegularExpressionMatch.isValid?4() -> bool +QtCore.QRegularExpressionMatch.lastCapturedIndex?4() -> int +QtCore.QRegularExpressionMatch.captured?4(int nth=0) -> QString +QtCore.QRegularExpressionMatch.captured?4(QString) -> QString +QtCore.QRegularExpressionMatch.capturedTexts?4() -> QStringList +QtCore.QRegularExpressionMatch.capturedStart?4(int nth=0) -> int +QtCore.QRegularExpressionMatch.capturedLength?4(int nth=0) -> int +QtCore.QRegularExpressionMatch.capturedEnd?4(int nth=0) -> int +QtCore.QRegularExpressionMatch.capturedStart?4(QString) -> int +QtCore.QRegularExpressionMatch.capturedLength?4(QString) -> int +QtCore.QRegularExpressionMatch.capturedEnd?4(QString) -> int +QtCore.QRegularExpressionMatchIterator?1() +QtCore.QRegularExpressionMatchIterator.__init__?1(self) +QtCore.QRegularExpressionMatchIterator?1(QRegularExpressionMatchIterator) +QtCore.QRegularExpressionMatchIterator.__init__?1(self, QRegularExpressionMatchIterator) +QtCore.QRegularExpressionMatchIterator.swap?4(QRegularExpressionMatchIterator) +QtCore.QRegularExpressionMatchIterator.isValid?4() -> bool +QtCore.QRegularExpressionMatchIterator.hasNext?4() -> bool +QtCore.QRegularExpressionMatchIterator.next?4() -> QRegularExpressionMatch +QtCore.QRegularExpressionMatchIterator.peekNext?4() -> QRegularExpressionMatch +QtCore.QRegularExpressionMatchIterator.regularExpression?4() -> QRegularExpression +QtCore.QRegularExpressionMatchIterator.matchType?4() -> QRegularExpression.MatchType +QtCore.QRegularExpressionMatchIterator.matchOptions?4() -> QRegularExpression.MatchOptions +QtCore.QResource.Compression?10 +QtCore.QResource.Compression.NoCompression?10 +QtCore.QResource.Compression.ZlibCompression?10 +QtCore.QResource.Compression.ZstdCompression?10 +QtCore.QResource?1(QString fileName='', QLocale locale=QLocale()) +QtCore.QResource.__init__?1(self, QString fileName='', QLocale locale=QLocale()) +QtCore.QResource.absoluteFilePath?4() -> QString +QtCore.QResource.data?4() -> Any +QtCore.QResource.fileName?4() -> QString +QtCore.QResource.isCompressed?4() -> bool +QtCore.QResource.isValid?4() -> bool +QtCore.QResource.locale?4() -> QLocale +QtCore.QResource.setFileName?4(QString) +QtCore.QResource.setLocale?4(QLocale) +QtCore.QResource.size?4() -> int +QtCore.QResource.registerResource?4(QString, QString mapRoot='') -> bool +QtCore.QResource.registerResourceData?4(bytes, QString mapRoot='') -> bool +QtCore.QResource.unregisterResource?4(QString, QString mapRoot='') -> bool +QtCore.QResource.unregisterResourceData?4(bytes, QString mapRoot='') -> bool +QtCore.QResource.children?4() -> QStringList +QtCore.QResource.isDir?4() -> bool +QtCore.QResource.isFile?4() -> bool +QtCore.QResource.lastModified?4() -> QDateTime +QtCore.QResource.compressionAlgorithm?4() -> QResource.Compression +QtCore.QResource.uncompressedSize?4() -> int +QtCore.QResource.uncompressedData?4() -> QByteArray +QtCore.QRunnable?1() +QtCore.QRunnable.__init__?1(self) +QtCore.QRunnable?1(QRunnable) +QtCore.QRunnable.__init__?1(self, QRunnable) +QtCore.QRunnable.run?4() +QtCore.QRunnable.autoDelete?4() -> bool +QtCore.QRunnable.setAutoDelete?4(bool) +QtCore.QRunnable.create?4(Callable[..., None]) -> QRunnable +QtCore.QSaveFile?1(QString) +QtCore.QSaveFile.__init__?1(self, QString) +QtCore.QSaveFile?1(QObject parent=None) +QtCore.QSaveFile.__init__?1(self, QObject parent=None) +QtCore.QSaveFile?1(QString, QObject) +QtCore.QSaveFile.__init__?1(self, QString, QObject) +QtCore.QSaveFile.fileName?4() -> QString +QtCore.QSaveFile.setFileName?4(QString) +QtCore.QSaveFile.open?4(QIODevice.OpenMode) -> bool +QtCore.QSaveFile.commit?4() -> bool +QtCore.QSaveFile.cancelWriting?4() +QtCore.QSaveFile.setDirectWriteFallback?4(bool) +QtCore.QSaveFile.directWriteFallback?4() -> bool +QtCore.QSaveFile.writeData?4(bytes) -> int +QtCore.QSemaphore?1(int n=0) +QtCore.QSemaphore.__init__?1(self, int n=0) +QtCore.QSemaphore.acquire?4(int n=1) +QtCore.QSemaphore.tryAcquire?4(int n=1) -> bool +QtCore.QSemaphore.tryAcquire?4(int, int) -> bool +QtCore.QSemaphore.release?4(int n=1) +QtCore.QSemaphore.available?4() -> int +QtCore.QSemaphoreReleaser?1() +QtCore.QSemaphoreReleaser.__init__?1(self) +QtCore.QSemaphoreReleaser?1(QSemaphore, int n=1) +QtCore.QSemaphoreReleaser.__init__?1(self, QSemaphore, int n=1) +QtCore.QSemaphoreReleaser.swap?4(QSemaphoreReleaser) +QtCore.QSemaphoreReleaser.semaphore?4() -> QSemaphore +QtCore.QSemaphoreReleaser.cancel?4() -> QSemaphore +QtCore.QSequentialAnimationGroup?1(QObject parent=None) +QtCore.QSequentialAnimationGroup.__init__?1(self, QObject parent=None) +QtCore.QSequentialAnimationGroup.addPause?4(int) -> QPauseAnimation +QtCore.QSequentialAnimationGroup.insertPause?4(int, int) -> QPauseAnimation +QtCore.QSequentialAnimationGroup.currentAnimation?4() -> QAbstractAnimation +QtCore.QSequentialAnimationGroup.duration?4() -> int +QtCore.QSequentialAnimationGroup.currentAnimationChanged?4(QAbstractAnimation) +QtCore.QSequentialAnimationGroup.event?4(QEvent) -> bool +QtCore.QSequentialAnimationGroup.updateCurrentTime?4(int) +QtCore.QSequentialAnimationGroup.updateState?4(QAbstractAnimation.State, QAbstractAnimation.State) +QtCore.QSequentialAnimationGroup.updateDirection?4(QAbstractAnimation.Direction) +QtCore.QSettings.Scope?10 +QtCore.QSettings.Scope.UserScope?10 +QtCore.QSettings.Scope.SystemScope?10 +QtCore.QSettings.Format?10 +QtCore.QSettings.Format.NativeFormat?10 +QtCore.QSettings.Format.IniFormat?10 +QtCore.QSettings.Format.InvalidFormat?10 +QtCore.QSettings.Status?10 +QtCore.QSettings.Status.NoError?10 +QtCore.QSettings.Status.AccessError?10 +QtCore.QSettings.Status.FormatError?10 +QtCore.QSettings?1(QString, QString application='', QObject parent=None) +QtCore.QSettings.__init__?1(self, QString, QString application='', QObject parent=None) +QtCore.QSettings?1(QSettings.Scope, QString, QString application='', QObject parent=None) +QtCore.QSettings.__init__?1(self, QSettings.Scope, QString, QString application='', QObject parent=None) +QtCore.QSettings?1(QSettings.Format, QSettings.Scope, QString, QString application='', QObject parent=None) +QtCore.QSettings.__init__?1(self, QSettings.Format, QSettings.Scope, QString, QString application='', QObject parent=None) +QtCore.QSettings?1(QString, QSettings.Format, QObject parent=None) +QtCore.QSettings.__init__?1(self, QString, QSettings.Format, QObject parent=None) +QtCore.QSettings?1(QSettings.Scope, QObject parent=None) +QtCore.QSettings.__init__?1(self, QSettings.Scope, QObject parent=None) +QtCore.QSettings?1(QObject parent=None) +QtCore.QSettings.__init__?1(self, QObject parent=None) +QtCore.QSettings.clear?4() +QtCore.QSettings.sync?4() +QtCore.QSettings.status?4() -> QSettings.Status +QtCore.QSettings.beginGroup?4(QString) +QtCore.QSettings.endGroup?4() +QtCore.QSettings.group?4() -> QString +QtCore.QSettings.beginReadArray?4(QString) -> int +QtCore.QSettings.beginWriteArray?4(QString, int size=-1) +QtCore.QSettings.endArray?4() +QtCore.QSettings.setArrayIndex?4(int) +QtCore.QSettings.allKeys?4() -> QStringList +QtCore.QSettings.childKeys?4() -> QStringList +QtCore.QSettings.childGroups?4() -> QStringList +QtCore.QSettings.isWritable?4() -> bool +QtCore.QSettings.setValue?4(QString, QVariant) +QtCore.QSettings.value?4(QString, QVariant defaultValue=None, Any type=None) -> Any +QtCore.QSettings.remove?4(QString) +QtCore.QSettings.contains?4(QString) -> bool +QtCore.QSettings.setFallbacksEnabled?4(bool) +QtCore.QSettings.fallbacksEnabled?4() -> bool +QtCore.QSettings.fileName?4() -> QString +QtCore.QSettings.setPath?4(QSettings.Format, QSettings.Scope, QString) +QtCore.QSettings.format?4() -> QSettings.Format +QtCore.QSettings.scope?4() -> QSettings.Scope +QtCore.QSettings.organizationName?4() -> QString +QtCore.QSettings.applicationName?4() -> QString +QtCore.QSettings.setDefaultFormat?4(QSettings.Format) +QtCore.QSettings.defaultFormat?4() -> QSettings.Format +QtCore.QSettings.setIniCodec?4(QTextCodec) +QtCore.QSettings.setIniCodec?4(str) +QtCore.QSettings.iniCodec?4() -> QTextCodec +QtCore.QSettings.isAtomicSyncRequired?4() -> bool +QtCore.QSettings.setAtomicSyncRequired?4(bool) +QtCore.QSettings.event?4(QEvent) -> bool +QtCore.QSharedMemory.SharedMemoryError?10 +QtCore.QSharedMemory.SharedMemoryError.NoError?10 +QtCore.QSharedMemory.SharedMemoryError.PermissionDenied?10 +QtCore.QSharedMemory.SharedMemoryError.InvalidSize?10 +QtCore.QSharedMemory.SharedMemoryError.KeyError?10 +QtCore.QSharedMemory.SharedMemoryError.AlreadyExists?10 +QtCore.QSharedMemory.SharedMemoryError.NotFound?10 +QtCore.QSharedMemory.SharedMemoryError.LockError?10 +QtCore.QSharedMemory.SharedMemoryError.OutOfResources?10 +QtCore.QSharedMemory.SharedMemoryError.UnknownError?10 +QtCore.QSharedMemory.AccessMode?10 +QtCore.QSharedMemory.AccessMode.ReadOnly?10 +QtCore.QSharedMemory.AccessMode.ReadWrite?10 +QtCore.QSharedMemory?1(QObject parent=None) +QtCore.QSharedMemory.__init__?1(self, QObject parent=None) +QtCore.QSharedMemory?1(QString, QObject parent=None) +QtCore.QSharedMemory.__init__?1(self, QString, QObject parent=None) +QtCore.QSharedMemory.setKey?4(QString) +QtCore.QSharedMemory.key?4() -> QString +QtCore.QSharedMemory.create?4(int, QSharedMemory.AccessMode mode=QSharedMemory.ReadWrite) -> bool +QtCore.QSharedMemory.size?4() -> int +QtCore.QSharedMemory.attach?4(QSharedMemory.AccessMode mode=QSharedMemory.ReadWrite) -> bool +QtCore.QSharedMemory.isAttached?4() -> bool +QtCore.QSharedMemory.detach?4() -> bool +QtCore.QSharedMemory.data?4() -> Any +QtCore.QSharedMemory.constData?4() -> Any +QtCore.QSharedMemory.lock?4() -> bool +QtCore.QSharedMemory.unlock?4() -> bool +QtCore.QSharedMemory.error?4() -> QSharedMemory.SharedMemoryError +QtCore.QSharedMemory.errorString?4() -> QString +QtCore.QSharedMemory.setNativeKey?4(QString) +QtCore.QSharedMemory.nativeKey?4() -> QString +QtCore.QSignalMapper?1(QObject parent=None) +QtCore.QSignalMapper.__init__?1(self, QObject parent=None) +QtCore.QSignalMapper.setMapping?4(QObject, int) +QtCore.QSignalMapper.setMapping?4(QObject, QString) +QtCore.QSignalMapper.setMapping?4(QObject, QWidget) +QtCore.QSignalMapper.setMapping?4(QObject, QObject) +QtCore.QSignalMapper.removeMappings?4(QObject) +QtCore.QSignalMapper.mapping?4(int) -> QObject +QtCore.QSignalMapper.mapping?4(QString) -> QObject +QtCore.QSignalMapper.mapping?4(QWidget) -> QObject +QtCore.QSignalMapper.mapping?4(QObject) -> QObject +QtCore.QSignalMapper.mapped?4(int) +QtCore.QSignalMapper.mapped?4(QString) +QtCore.QSignalMapper.mapped?4(QWidget) +QtCore.QSignalMapper.mapped?4(QObject) +QtCore.QSignalMapper.mappedInt?4(int) +QtCore.QSignalMapper.mappedString?4(QString) +QtCore.QSignalMapper.mappedWidget?4(QWidget) +QtCore.QSignalMapper.mappedObject?4(QObject) +QtCore.QSignalMapper.map?4() +QtCore.QSignalMapper.map?4(QObject) +QtCore.QSignalTransition?1(QState sourceState=None) +QtCore.QSignalTransition.__init__?1(self, QState sourceState=None) +QtCore.QSignalTransition?1(Any, QState sourceState=None) +QtCore.QSignalTransition.__init__?1(self, Any, QState sourceState=None) +QtCore.QSignalTransition.senderObject?4() -> QObject +QtCore.QSignalTransition.setSenderObject?4(QObject) +QtCore.QSignalTransition.signal?4() -> QByteArray +QtCore.QSignalTransition.setSignal?4(QByteArray) +QtCore.QSignalTransition.eventTest?4(QEvent) -> bool +QtCore.QSignalTransition.onTransition?4(QEvent) +QtCore.QSignalTransition.event?4(QEvent) -> bool +QtCore.QSignalTransition.senderObjectChanged?4() +QtCore.QSignalTransition.signalChanged?4() +QtCore.QSize?1() +QtCore.QSize.__init__?1(self) +QtCore.QSize?1(int, int) +QtCore.QSize.__init__?1(self, int, int) +QtCore.QSize?1(QSize) +QtCore.QSize.__init__?1(self, QSize) +QtCore.QSize.transpose?4() +QtCore.QSize.scale?4(QSize, Qt.AspectRatioMode) +QtCore.QSize.isNull?4() -> bool +QtCore.QSize.isEmpty?4() -> bool +QtCore.QSize.isValid?4() -> bool +QtCore.QSize.width?4() -> int +QtCore.QSize.height?4() -> int +QtCore.QSize.setWidth?4(int) +QtCore.QSize.setHeight?4(int) +QtCore.QSize.scale?4(int, int, Qt.AspectRatioMode) +QtCore.QSize.expandedTo?4(QSize) -> QSize +QtCore.QSize.boundedTo?4(QSize) -> QSize +QtCore.QSize.scaled?4(QSize, Qt.AspectRatioMode) -> QSize +QtCore.QSize.scaled?4(int, int, Qt.AspectRatioMode) -> QSize +QtCore.QSize.transposed?4() -> QSize +QtCore.QSize.grownBy?4(QMargins) -> QSize +QtCore.QSize.shrunkBy?4(QMargins) -> QSize +QtCore.QSizeF?1() +QtCore.QSizeF.__init__?1(self) +QtCore.QSizeF?1(QSize) +QtCore.QSizeF.__init__?1(self, QSize) +QtCore.QSizeF?1(float, float) +QtCore.QSizeF.__init__?1(self, float, float) +QtCore.QSizeF?1(QSizeF) +QtCore.QSizeF.__init__?1(self, QSizeF) +QtCore.QSizeF.transpose?4() +QtCore.QSizeF.scale?4(QSizeF, Qt.AspectRatioMode) +QtCore.QSizeF.isNull?4() -> bool +QtCore.QSizeF.isEmpty?4() -> bool +QtCore.QSizeF.isValid?4() -> bool +QtCore.QSizeF.width?4() -> float +QtCore.QSizeF.height?4() -> float +QtCore.QSizeF.setWidth?4(float) +QtCore.QSizeF.setHeight?4(float) +QtCore.QSizeF.scale?4(float, float, Qt.AspectRatioMode) +QtCore.QSizeF.expandedTo?4(QSizeF) -> QSizeF +QtCore.QSizeF.boundedTo?4(QSizeF) -> QSizeF +QtCore.QSizeF.toSize?4() -> QSize +QtCore.QSizeF.scaled?4(QSizeF, Qt.AspectRatioMode) -> QSizeF +QtCore.QSizeF.scaled?4(float, float, Qt.AspectRatioMode) -> QSizeF +QtCore.QSizeF.transposed?4() -> QSizeF +QtCore.QSizeF.grownBy?4(QMarginsF) -> QSizeF +QtCore.QSizeF.shrunkBy?4(QMarginsF) -> QSizeF +QtCore.QSocketNotifier.Type?10 +QtCore.QSocketNotifier.Type.Read?10 +QtCore.QSocketNotifier.Type.Write?10 +QtCore.QSocketNotifier.Type.Exception?10 +QtCore.QSocketNotifier?1(qintptr, QSocketNotifier.Type, QObject parent=None) +QtCore.QSocketNotifier.__init__?1(self, qintptr, QSocketNotifier.Type, QObject parent=None) +QtCore.QSocketNotifier.socket?4() -> qintptr +QtCore.QSocketNotifier.type?4() -> QSocketNotifier.Type +QtCore.QSocketNotifier.isEnabled?4() -> bool +QtCore.QSocketNotifier.setEnabled?4(bool) +QtCore.QSocketNotifier.activated?4(int) +QtCore.QSocketNotifier.event?4(QEvent) -> bool +QtCore.QSortFilterProxyModel?1(QObject parent=None) +QtCore.QSortFilterProxyModel.__init__?1(self, QObject parent=None) +QtCore.QSortFilterProxyModel.setSourceModel?4(QAbstractItemModel) +QtCore.QSortFilterProxyModel.mapToSource?4(QModelIndex) -> QModelIndex +QtCore.QSortFilterProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex +QtCore.QSortFilterProxyModel.mapSelectionToSource?4(QItemSelection) -> QItemSelection +QtCore.QSortFilterProxyModel.mapSelectionFromSource?4(QItemSelection) -> QItemSelection +QtCore.QSortFilterProxyModel.filterRegExp?4() -> QRegExp +QtCore.QSortFilterProxyModel.filterRegularExpression?4() -> QRegularExpression +QtCore.QSortFilterProxyModel.filterKeyColumn?4() -> int +QtCore.QSortFilterProxyModel.setFilterKeyColumn?4(int) +QtCore.QSortFilterProxyModel.filterCaseSensitivity?4() -> Qt.CaseSensitivity +QtCore.QSortFilterProxyModel.setFilterCaseSensitivity?4(Qt.CaseSensitivity) +QtCore.QSortFilterProxyModel.invalidate?4() +QtCore.QSortFilterProxyModel.setFilterFixedString?4(QString) +QtCore.QSortFilterProxyModel.setFilterRegExp?4(QRegExp) +QtCore.QSortFilterProxyModel.setFilterRegExp?4(QString) +QtCore.QSortFilterProxyModel.setFilterRegularExpression?4(QRegularExpression) +QtCore.QSortFilterProxyModel.setFilterRegularExpression?4(QString) +QtCore.QSortFilterProxyModel.setFilterWildcard?4(QString) +QtCore.QSortFilterProxyModel.filterAcceptsRow?4(int, QModelIndex) -> bool +QtCore.QSortFilterProxyModel.filterAcceptsColumn?4(int, QModelIndex) -> bool +QtCore.QSortFilterProxyModel.lessThan?4(QModelIndex, QModelIndex) -> bool +QtCore.QSortFilterProxyModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtCore.QSortFilterProxyModel.parent?4(QModelIndex) -> QModelIndex +QtCore.QSortFilterProxyModel.parent?4() -> QObject +QtCore.QSortFilterProxyModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QSortFilterProxyModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QSortFilterProxyModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool +QtCore.QSortFilterProxyModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant +QtCore.QSortFilterProxyModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool +QtCore.QSortFilterProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant +QtCore.QSortFilterProxyModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool +QtCore.QSortFilterProxyModel.mimeData?4(unknown-type) -> QMimeData +QtCore.QSortFilterProxyModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtCore.QSortFilterProxyModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QSortFilterProxyModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QSortFilterProxyModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QSortFilterProxyModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QSortFilterProxyModel.fetchMore?4(QModelIndex) +QtCore.QSortFilterProxyModel.canFetchMore?4(QModelIndex) -> bool +QtCore.QSortFilterProxyModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtCore.QSortFilterProxyModel.buddy?4(QModelIndex) -> QModelIndex +QtCore.QSortFilterProxyModel.span?4(QModelIndex) -> QSize +QtCore.QSortFilterProxyModel.match?4(QModelIndex, int, QVariant, int hits=1, Qt.MatchFlags flags=Qt.MatchStartsWith|Qt.MatchWrap) -> unknown-type +QtCore.QSortFilterProxyModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtCore.QSortFilterProxyModel.sortCaseSensitivity?4() -> Qt.CaseSensitivity +QtCore.QSortFilterProxyModel.setSortCaseSensitivity?4(Qt.CaseSensitivity) +QtCore.QSortFilterProxyModel.dynamicSortFilter?4() -> bool +QtCore.QSortFilterProxyModel.setDynamicSortFilter?4(bool) +QtCore.QSortFilterProxyModel.sortRole?4() -> int +QtCore.QSortFilterProxyModel.setSortRole?4(int) +QtCore.QSortFilterProxyModel.sortColumn?4() -> int +QtCore.QSortFilterProxyModel.sortOrder?4() -> Qt.SortOrder +QtCore.QSortFilterProxyModel.filterRole?4() -> int +QtCore.QSortFilterProxyModel.setFilterRole?4(int) +QtCore.QSortFilterProxyModel.mimeTypes?4() -> QStringList +QtCore.QSortFilterProxyModel.supportedDropActions?4() -> Qt.DropActions +QtCore.QSortFilterProxyModel.isSortLocaleAware?4() -> bool +QtCore.QSortFilterProxyModel.setSortLocaleAware?4(bool) +QtCore.QSortFilterProxyModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtCore.QSortFilterProxyModel.isRecursiveFilteringEnabled?4() -> bool +QtCore.QSortFilterProxyModel.setRecursiveFilteringEnabled?4(bool) +QtCore.QSortFilterProxyModel.invalidateFilter?4() +QtCore.QSortFilterProxyModel.dynamicSortFilterChanged?4(bool) +QtCore.QSortFilterProxyModel.filterCaseSensitivityChanged?4(Qt.CaseSensitivity) +QtCore.QSortFilterProxyModel.sortCaseSensitivityChanged?4(Qt.CaseSensitivity) +QtCore.QSortFilterProxyModel.sortLocaleAwareChanged?4(bool) +QtCore.QSortFilterProxyModel.sortRoleChanged?4(int) +QtCore.QSortFilterProxyModel.filterRoleChanged?4(int) +QtCore.QSortFilterProxyModel.recursiveFilteringEnabledChanged?4(bool) +QtCore.QStandardPaths.LocateOption?10 +QtCore.QStandardPaths.LocateOption.LocateFile?10 +QtCore.QStandardPaths.LocateOption.LocateDirectory?10 +QtCore.QStandardPaths.StandardLocation?10 +QtCore.QStandardPaths.StandardLocation.DesktopLocation?10 +QtCore.QStandardPaths.StandardLocation.DocumentsLocation?10 +QtCore.QStandardPaths.StandardLocation.FontsLocation?10 +QtCore.QStandardPaths.StandardLocation.ApplicationsLocation?10 +QtCore.QStandardPaths.StandardLocation.MusicLocation?10 +QtCore.QStandardPaths.StandardLocation.MoviesLocation?10 +QtCore.QStandardPaths.StandardLocation.PicturesLocation?10 +QtCore.QStandardPaths.StandardLocation.TempLocation?10 +QtCore.QStandardPaths.StandardLocation.HomeLocation?10 +QtCore.QStandardPaths.StandardLocation.DataLocation?10 +QtCore.QStandardPaths.StandardLocation.CacheLocation?10 +QtCore.QStandardPaths.StandardLocation.GenericDataLocation?10 +QtCore.QStandardPaths.StandardLocation.RuntimeLocation?10 +QtCore.QStandardPaths.StandardLocation.ConfigLocation?10 +QtCore.QStandardPaths.StandardLocation.DownloadLocation?10 +QtCore.QStandardPaths.StandardLocation.GenericCacheLocation?10 +QtCore.QStandardPaths.StandardLocation.GenericConfigLocation?10 +QtCore.QStandardPaths.StandardLocation.AppDataLocation?10 +QtCore.QStandardPaths.StandardLocation.AppLocalDataLocation?10 +QtCore.QStandardPaths.StandardLocation.AppConfigLocation?10 +QtCore.QStandardPaths?1(QStandardPaths) +QtCore.QStandardPaths.__init__?1(self, QStandardPaths) +QtCore.QStandardPaths.writableLocation?4(QStandardPaths.StandardLocation) -> QString +QtCore.QStandardPaths.standardLocations?4(QStandardPaths.StandardLocation) -> QStringList +QtCore.QStandardPaths.locate?4(QStandardPaths.StandardLocation, QString, QStandardPaths.LocateOptions options=QStandardPaths.LocateFile) -> QString +QtCore.QStandardPaths.locateAll?4(QStandardPaths.StandardLocation, QString, QStandardPaths.LocateOptions options=QStandardPaths.LocateFile) -> QStringList +QtCore.QStandardPaths.displayName?4(QStandardPaths.StandardLocation) -> QString +QtCore.QStandardPaths.findExecutable?4(QString, QStringList paths=[]) -> QString +QtCore.QStandardPaths.enableTestMode?4(bool) +QtCore.QStandardPaths.setTestModeEnabled?4(bool) +QtCore.QStandardPaths.LocateOptions?1() +QtCore.QStandardPaths.LocateOptions.__init__?1(self) +QtCore.QStandardPaths.LocateOptions?1(int) +QtCore.QStandardPaths.LocateOptions.__init__?1(self, int) +QtCore.QStandardPaths.LocateOptions?1(QStandardPaths.LocateOptions) +QtCore.QStandardPaths.LocateOptions.__init__?1(self, QStandardPaths.LocateOptions) +QtCore.QState.RestorePolicy?10 +QtCore.QState.RestorePolicy.DontRestoreProperties?10 +QtCore.QState.RestorePolicy.RestoreProperties?10 +QtCore.QState.ChildMode?10 +QtCore.QState.ChildMode.ExclusiveStates?10 +QtCore.QState.ChildMode.ParallelStates?10 +QtCore.QState?1(QState parent=None) +QtCore.QState.__init__?1(self, QState parent=None) +QtCore.QState?1(QState.ChildMode, QState parent=None) +QtCore.QState.__init__?1(self, QState.ChildMode, QState parent=None) +QtCore.QState.errorState?4() -> QAbstractState +QtCore.QState.setErrorState?4(QAbstractState) +QtCore.QState.addTransition?4(QAbstractTransition) +QtCore.QState.addTransition?4(Any, QAbstractState) -> QSignalTransition +QtCore.QState.addTransition?4(QAbstractState) -> QAbstractTransition +QtCore.QState.removeTransition?4(QAbstractTransition) +QtCore.QState.transitions?4() -> unknown-type +QtCore.QState.initialState?4() -> QAbstractState +QtCore.QState.setInitialState?4(QAbstractState) +QtCore.QState.childMode?4() -> QState.ChildMode +QtCore.QState.setChildMode?4(QState.ChildMode) +QtCore.QState.assignProperty?4(QObject, str, QVariant) +QtCore.QState.finished?4() +QtCore.QState.propertiesAssigned?4() +QtCore.QState.onEntry?4(QEvent) +QtCore.QState.onExit?4(QEvent) +QtCore.QState.event?4(QEvent) -> bool +QtCore.QState.childModeChanged?4() +QtCore.QState.initialStateChanged?4() +QtCore.QState.errorStateChanged?4() +QtCore.QStateMachine.Error?10 +QtCore.QStateMachine.Error.NoError?10 +QtCore.QStateMachine.Error.NoInitialStateError?10 +QtCore.QStateMachine.Error.NoDefaultStateInHistoryStateError?10 +QtCore.QStateMachine.Error.NoCommonAncestorForTransitionError?10 +QtCore.QStateMachine.Error.StateMachineChildModeSetToParallelError?10 +QtCore.QStateMachine.EventPriority?10 +QtCore.QStateMachine.EventPriority.NormalPriority?10 +QtCore.QStateMachine.EventPriority.HighPriority?10 +QtCore.QStateMachine?1(QObject parent=None) +QtCore.QStateMachine.__init__?1(self, QObject parent=None) +QtCore.QStateMachine?1(QState.ChildMode, QObject parent=None) +QtCore.QStateMachine.__init__?1(self, QState.ChildMode, QObject parent=None) +QtCore.QStateMachine.addState?4(QAbstractState) +QtCore.QStateMachine.removeState?4(QAbstractState) +QtCore.QStateMachine.error?4() -> QStateMachine.Error +QtCore.QStateMachine.errorString?4() -> QString +QtCore.QStateMachine.clearError?4() +QtCore.QStateMachine.isRunning?4() -> bool +QtCore.QStateMachine.isAnimated?4() -> bool +QtCore.QStateMachine.setAnimated?4(bool) +QtCore.QStateMachine.addDefaultAnimation?4(QAbstractAnimation) +QtCore.QStateMachine.defaultAnimations?4() -> unknown-type +QtCore.QStateMachine.removeDefaultAnimation?4(QAbstractAnimation) +QtCore.QStateMachine.globalRestorePolicy?4() -> QState.RestorePolicy +QtCore.QStateMachine.setGlobalRestorePolicy?4(QState.RestorePolicy) +QtCore.QStateMachine.postEvent?4(QEvent, QStateMachine.EventPriority priority=QStateMachine.NormalPriority) +QtCore.QStateMachine.postDelayedEvent?4(QEvent, int) -> int +QtCore.QStateMachine.cancelDelayedEvent?4(int) -> bool +QtCore.QStateMachine.configuration?4() -> unknown-type +QtCore.QStateMachine.eventFilter?4(QObject, QEvent) -> bool +QtCore.QStateMachine.start?4() +QtCore.QStateMachine.stop?4() +QtCore.QStateMachine.setRunning?4(bool) +QtCore.QStateMachine.started?4() +QtCore.QStateMachine.stopped?4() +QtCore.QStateMachine.runningChanged?4(bool) +QtCore.QStateMachine.onEntry?4(QEvent) +QtCore.QStateMachine.onExit?4(QEvent) +QtCore.QStateMachine.event?4(QEvent) -> bool +QtCore.QStateMachine.SignalEvent.sender?4() -> QObject +QtCore.QStateMachine.SignalEvent.signalIndex?4() -> int +QtCore.QStateMachine.SignalEvent.arguments?4() -> unknown-type +QtCore.QStateMachine.WrappedEvent.object?4() -> QObject +QtCore.QStateMachine.WrappedEvent.event?4() -> QEvent +QtCore.QStorageInfo?1() +QtCore.QStorageInfo.__init__?1(self) +QtCore.QStorageInfo?1(QString) +QtCore.QStorageInfo.__init__?1(self, QString) +QtCore.QStorageInfo?1(QDir) +QtCore.QStorageInfo.__init__?1(self, QDir) +QtCore.QStorageInfo?1(QStorageInfo) +QtCore.QStorageInfo.__init__?1(self, QStorageInfo) +QtCore.QStorageInfo.swap?4(QStorageInfo) +QtCore.QStorageInfo.setPath?4(QString) +QtCore.QStorageInfo.rootPath?4() -> QString +QtCore.QStorageInfo.device?4() -> QByteArray +QtCore.QStorageInfo.fileSystemType?4() -> QByteArray +QtCore.QStorageInfo.name?4() -> QString +QtCore.QStorageInfo.displayName?4() -> QString +QtCore.QStorageInfo.bytesTotal?4() -> int +QtCore.QStorageInfo.bytesFree?4() -> int +QtCore.QStorageInfo.bytesAvailable?4() -> int +QtCore.QStorageInfo.isReadOnly?4() -> bool +QtCore.QStorageInfo.isReady?4() -> bool +QtCore.QStorageInfo.isValid?4() -> bool +QtCore.QStorageInfo.refresh?4() +QtCore.QStorageInfo.mountedVolumes?4() -> unknown-type +QtCore.QStorageInfo.root?4() -> QStorageInfo +QtCore.QStorageInfo.isRoot?4() -> bool +QtCore.QStorageInfo.blockSize?4() -> int +QtCore.QStorageInfo.subvolume?4() -> QByteArray +QtCore.QStringListModel?1(QObject parent=None) +QtCore.QStringListModel.__init__?1(self, QObject parent=None) +QtCore.QStringListModel?1(QStringList, QObject parent=None) +QtCore.QStringListModel.__init__?1(self, QStringList, QObject parent=None) +QtCore.QStringListModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QStringListModel.data?4(QModelIndex, int) -> QVariant +QtCore.QStringListModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool +QtCore.QStringListModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtCore.QStringListModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QStringListModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QStringListModel.stringList?4() -> QStringList +QtCore.QStringListModel.setStringList?4(QStringList) +QtCore.QStringListModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtCore.QStringListModel.supportedDropActions?4() -> Qt.DropActions +QtCore.QStringListModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtCore.QStringListModel.moveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QStringListModel.itemData?4(QModelIndex) -> unknown-type +QtCore.QStringListModel.setItemData?4(QModelIndex, unknown-type) -> bool +QtCore.QSystemSemaphore.SystemSemaphoreError?10 +QtCore.QSystemSemaphore.SystemSemaphoreError.NoError?10 +QtCore.QSystemSemaphore.SystemSemaphoreError.PermissionDenied?10 +QtCore.QSystemSemaphore.SystemSemaphoreError.KeyError?10 +QtCore.QSystemSemaphore.SystemSemaphoreError.AlreadyExists?10 +QtCore.QSystemSemaphore.SystemSemaphoreError.NotFound?10 +QtCore.QSystemSemaphore.SystemSemaphoreError.OutOfResources?10 +QtCore.QSystemSemaphore.SystemSemaphoreError.UnknownError?10 +QtCore.QSystemSemaphore.AccessMode?10 +QtCore.QSystemSemaphore.AccessMode.Open?10 +QtCore.QSystemSemaphore.AccessMode.Create?10 +QtCore.QSystemSemaphore?1(QString, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) +QtCore.QSystemSemaphore.__init__?1(self, QString, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) +QtCore.QSystemSemaphore.setKey?4(QString, int initialValue=0, QSystemSemaphore.AccessMode mode=QSystemSemaphore.Open) +QtCore.QSystemSemaphore.key?4() -> QString +QtCore.QSystemSemaphore.acquire?4() -> bool +QtCore.QSystemSemaphore.release?4(int n=1) -> bool +QtCore.QSystemSemaphore.error?4() -> QSystemSemaphore.SystemSemaphoreError +QtCore.QSystemSemaphore.errorString?4() -> QString +QtCore.QTemporaryDir?1() +QtCore.QTemporaryDir.__init__?1(self) +QtCore.QTemporaryDir?1(QString) +QtCore.QTemporaryDir.__init__?1(self, QString) +QtCore.QTemporaryDir.isValid?4() -> bool +QtCore.QTemporaryDir.autoRemove?4() -> bool +QtCore.QTemporaryDir.setAutoRemove?4(bool) +QtCore.QTemporaryDir.remove?4() -> bool +QtCore.QTemporaryDir.path?4() -> QString +QtCore.QTemporaryDir.errorString?4() -> QString +QtCore.QTemporaryDir.filePath?4(QString) -> QString +QtCore.QTemporaryFile?1() +QtCore.QTemporaryFile.__init__?1(self) +QtCore.QTemporaryFile?1(QString) +QtCore.QTemporaryFile.__init__?1(self, QString) +QtCore.QTemporaryFile?1(QObject) +QtCore.QTemporaryFile.__init__?1(self, QObject) +QtCore.QTemporaryFile?1(QString, QObject) +QtCore.QTemporaryFile.__init__?1(self, QString, QObject) +QtCore.QTemporaryFile.autoRemove?4() -> bool +QtCore.QTemporaryFile.setAutoRemove?4(bool) +QtCore.QTemporaryFile.open?4() -> bool +QtCore.QTemporaryFile.fileName?4() -> QString +QtCore.QTemporaryFile.fileTemplate?4() -> QString +QtCore.QTemporaryFile.setFileTemplate?4(QString) +QtCore.QTemporaryFile.createNativeFile?4(QString) -> QTemporaryFile +QtCore.QTemporaryFile.createNativeFile?4(QFile) -> QTemporaryFile +QtCore.QTemporaryFile.rename?4(QString) -> bool +QtCore.QTemporaryFile.open?4(QIODevice.OpenMode) -> bool +QtCore.QTextBoundaryFinder.BoundaryType?10 +QtCore.QTextBoundaryFinder.BoundaryType.Grapheme?10 +QtCore.QTextBoundaryFinder.BoundaryType.Word?10 +QtCore.QTextBoundaryFinder.BoundaryType.Line?10 +QtCore.QTextBoundaryFinder.BoundaryType.Sentence?10 +QtCore.QTextBoundaryFinder.BoundaryReason?10 +QtCore.QTextBoundaryFinder.BoundaryReason.NotAtBoundary?10 +QtCore.QTextBoundaryFinder.BoundaryReason.SoftHyphen?10 +QtCore.QTextBoundaryFinder.BoundaryReason.BreakOpportunity?10 +QtCore.QTextBoundaryFinder.BoundaryReason.StartOfItem?10 +QtCore.QTextBoundaryFinder.BoundaryReason.EndOfItem?10 +QtCore.QTextBoundaryFinder.BoundaryReason.MandatoryBreak?10 +QtCore.QTextBoundaryFinder?1() +QtCore.QTextBoundaryFinder.__init__?1(self) +QtCore.QTextBoundaryFinder?1(QTextBoundaryFinder) +QtCore.QTextBoundaryFinder.__init__?1(self, QTextBoundaryFinder) +QtCore.QTextBoundaryFinder?1(QTextBoundaryFinder.BoundaryType, QString) +QtCore.QTextBoundaryFinder.__init__?1(self, QTextBoundaryFinder.BoundaryType, QString) +QtCore.QTextBoundaryFinder.isValid?4() -> bool +QtCore.QTextBoundaryFinder.type?4() -> QTextBoundaryFinder.BoundaryType +QtCore.QTextBoundaryFinder.string?4() -> QString +QtCore.QTextBoundaryFinder.toStart?4() +QtCore.QTextBoundaryFinder.toEnd?4() +QtCore.QTextBoundaryFinder.position?4() -> int +QtCore.QTextBoundaryFinder.setPosition?4(int) +QtCore.QTextBoundaryFinder.toNextBoundary?4() -> int +QtCore.QTextBoundaryFinder.toPreviousBoundary?4() -> int +QtCore.QTextBoundaryFinder.isAtBoundary?4() -> bool +QtCore.QTextBoundaryFinder.boundaryReasons?4() -> QTextBoundaryFinder.BoundaryReasons +QtCore.QTextBoundaryFinder.BoundaryReasons?1() +QtCore.QTextBoundaryFinder.BoundaryReasons.__init__?1(self) +QtCore.QTextBoundaryFinder.BoundaryReasons?1(int) +QtCore.QTextBoundaryFinder.BoundaryReasons.__init__?1(self, int) +QtCore.QTextBoundaryFinder.BoundaryReasons?1(QTextBoundaryFinder.BoundaryReasons) +QtCore.QTextBoundaryFinder.BoundaryReasons.__init__?1(self, QTextBoundaryFinder.BoundaryReasons) +QtCore.QTextCodec.ConversionFlag?10 +QtCore.QTextCodec.ConversionFlag.DefaultConversion?10 +QtCore.QTextCodec.ConversionFlag.ConvertInvalidToNull?10 +QtCore.QTextCodec.ConversionFlag.IgnoreHeader?10 +QtCore.QTextCodec?1() +QtCore.QTextCodec.__init__?1(self) +QtCore.QTextCodec.codecForName?4(QByteArray) -> QTextCodec +QtCore.QTextCodec.codecForName?4(str) -> QTextCodec +QtCore.QTextCodec.codecForMib?4(int) -> QTextCodec +QtCore.QTextCodec.codecForHtml?4(QByteArray) -> QTextCodec +QtCore.QTextCodec.codecForHtml?4(QByteArray, QTextCodec) -> QTextCodec +QtCore.QTextCodec.codecForUtfText?4(QByteArray) -> QTextCodec +QtCore.QTextCodec.codecForUtfText?4(QByteArray, QTextCodec) -> QTextCodec +QtCore.QTextCodec.availableCodecs?4() -> unknown-type +QtCore.QTextCodec.availableMibs?4() -> unknown-type +QtCore.QTextCodec.codecForLocale?4() -> QTextCodec +QtCore.QTextCodec.setCodecForLocale?4(QTextCodec) +QtCore.QTextCodec.makeDecoder?4(QTextCodec.ConversionFlags flags=QTextCodec.DefaultConversion) -> QTextDecoder +QtCore.QTextCodec.makeEncoder?4(QTextCodec.ConversionFlags flags=QTextCodec.DefaultConversion) -> QTextEncoder +QtCore.QTextCodec.canEncode?4(QString) -> bool +QtCore.QTextCodec.toUnicode?4(QByteArray) -> QString +QtCore.QTextCodec.toUnicode?4(bytes) -> QString +QtCore.QTextCodec.fromUnicode?4(QString) -> QByteArray +QtCore.QTextCodec.toUnicode?4(bytes, QTextCodec.ConverterState state=None) -> QString +QtCore.QTextCodec.name?4() -> QByteArray +QtCore.QTextCodec.aliases?4() -> unknown-type +QtCore.QTextCodec.mibEnum?4() -> int +QtCore.QTextCodec.convertToUnicode?4(bytes, QTextCodec.ConverterState) -> QString +QtCore.QTextCodec.convertFromUnicode?4(QChar, QTextCodec.ConverterState) -> QByteArray +QtCore.QTextCodec.ConversionFlags?1() +QtCore.QTextCodec.ConversionFlags.__init__?1(self) +QtCore.QTextCodec.ConversionFlags?1(int) +QtCore.QTextCodec.ConversionFlags.__init__?1(self, int) +QtCore.QTextCodec.ConversionFlags?1(QTextCodec.ConversionFlags) +QtCore.QTextCodec.ConversionFlags.__init__?1(self, QTextCodec.ConversionFlags) +QtCore.QTextCodec.ConverterState?1(QTextCodec.ConversionFlags flags=QTextCodec.DefaultConversion) +QtCore.QTextCodec.ConverterState.__init__?1(self, QTextCodec.ConversionFlags flags=QTextCodec.DefaultConversion) +QtCore.QTextEncoder?1(QTextCodec) +QtCore.QTextEncoder.__init__?1(self, QTextCodec) +QtCore.QTextEncoder?1(QTextCodec, QTextCodec.ConversionFlags) +QtCore.QTextEncoder.__init__?1(self, QTextCodec, QTextCodec.ConversionFlags) +QtCore.QTextEncoder.fromUnicode?4(QString) -> QByteArray +QtCore.QTextDecoder?1(QTextCodec) +QtCore.QTextDecoder.__init__?1(self, QTextCodec) +QtCore.QTextDecoder?1(QTextCodec, QTextCodec.ConversionFlags) +QtCore.QTextDecoder.__init__?1(self, QTextCodec, QTextCodec.ConversionFlags) +QtCore.QTextDecoder.toUnicode?4(bytes) -> QString +QtCore.QTextDecoder.toUnicode?4(QByteArray) -> QString +QtCore.QTextStream.Status?10 +QtCore.QTextStream.Status.Ok?10 +QtCore.QTextStream.Status.ReadPastEnd?10 +QtCore.QTextStream.Status.ReadCorruptData?10 +QtCore.QTextStream.Status.WriteFailed?10 +QtCore.QTextStream.NumberFlag?10 +QtCore.QTextStream.NumberFlag.ShowBase?10 +QtCore.QTextStream.NumberFlag.ForcePoint?10 +QtCore.QTextStream.NumberFlag.ForceSign?10 +QtCore.QTextStream.NumberFlag.UppercaseBase?10 +QtCore.QTextStream.NumberFlag.UppercaseDigits?10 +QtCore.QTextStream.FieldAlignment?10 +QtCore.QTextStream.FieldAlignment.AlignLeft?10 +QtCore.QTextStream.FieldAlignment.AlignRight?10 +QtCore.QTextStream.FieldAlignment.AlignCenter?10 +QtCore.QTextStream.FieldAlignment.AlignAccountingStyle?10 +QtCore.QTextStream.RealNumberNotation?10 +QtCore.QTextStream.RealNumberNotation.SmartNotation?10 +QtCore.QTextStream.RealNumberNotation.FixedNotation?10 +QtCore.QTextStream.RealNumberNotation.ScientificNotation?10 +QtCore.QTextStream?1() +QtCore.QTextStream.__init__?1(self) +QtCore.QTextStream?1(QIODevice) +QtCore.QTextStream.__init__?1(self, QIODevice) +QtCore.QTextStream?1(QByteArray, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtCore.QTextStream.__init__?1(self, QByteArray, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtCore.QTextStream.setCodec?4(QTextCodec) +QtCore.QTextStream.setCodec?4(str) +QtCore.QTextStream.codec?4() -> QTextCodec +QtCore.QTextStream.setAutoDetectUnicode?4(bool) +QtCore.QTextStream.autoDetectUnicode?4() -> bool +QtCore.QTextStream.setGenerateByteOrderMark?4(bool) +QtCore.QTextStream.generateByteOrderMark?4() -> bool +QtCore.QTextStream.setDevice?4(QIODevice) +QtCore.QTextStream.device?4() -> QIODevice +QtCore.QTextStream.atEnd?4() -> bool +QtCore.QTextStream.reset?4() +QtCore.QTextStream.flush?4() +QtCore.QTextStream.seek?4(int) -> bool +QtCore.QTextStream.skipWhiteSpace?4() +QtCore.QTextStream.read?4(int) -> QString +QtCore.QTextStream.readLine?4(int maxLength=0) -> QString +QtCore.QTextStream.readAll?4() -> QString +QtCore.QTextStream.setFieldAlignment?4(QTextStream.FieldAlignment) +QtCore.QTextStream.fieldAlignment?4() -> QTextStream.FieldAlignment +QtCore.QTextStream.setPadChar?4(QChar) +QtCore.QTextStream.padChar?4() -> QChar +QtCore.QTextStream.setFieldWidth?4(int) +QtCore.QTextStream.fieldWidth?4() -> int +QtCore.QTextStream.setNumberFlags?4(QTextStream.NumberFlags) +QtCore.QTextStream.numberFlags?4() -> QTextStream.NumberFlags +QtCore.QTextStream.setIntegerBase?4(int) +QtCore.QTextStream.integerBase?4() -> int +QtCore.QTextStream.setRealNumberNotation?4(QTextStream.RealNumberNotation) +QtCore.QTextStream.realNumberNotation?4() -> QTextStream.RealNumberNotation +QtCore.QTextStream.setRealNumberPrecision?4(int) +QtCore.QTextStream.realNumberPrecision?4() -> int +QtCore.QTextStream.status?4() -> QTextStream.Status +QtCore.QTextStream.setStatus?4(QTextStream.Status) +QtCore.QTextStream.resetStatus?4() +QtCore.QTextStream.pos?4() -> int +QtCore.QTextStream.setLocale?4(QLocale) +QtCore.QTextStream.locale?4() -> QLocale +QtCore.QTextStream.NumberFlags?1() +QtCore.QTextStream.NumberFlags.__init__?1(self) +QtCore.QTextStream.NumberFlags?1(int) +QtCore.QTextStream.NumberFlags.__init__?1(self, int) +QtCore.QTextStream.NumberFlags?1(QTextStream.NumberFlags) +QtCore.QTextStream.NumberFlags.__init__?1(self, QTextStream.NumberFlags) +QtCore.QThread.Priority?10 +QtCore.QThread.Priority.IdlePriority?10 +QtCore.QThread.Priority.LowestPriority?10 +QtCore.QThread.Priority.LowPriority?10 +QtCore.QThread.Priority.NormalPriority?10 +QtCore.QThread.Priority.HighPriority?10 +QtCore.QThread.Priority.HighestPriority?10 +QtCore.QThread.Priority.TimeCriticalPriority?10 +QtCore.QThread.Priority.InheritPriority?10 +QtCore.QThread?1(QObject parent=None) +QtCore.QThread.__init__?1(self, QObject parent=None) +QtCore.QThread.currentThread?4() -> QThread +QtCore.QThread.currentThreadId?4() -> PyQt5.sip.voidptr +QtCore.QThread.idealThreadCount?4() -> int +QtCore.QThread.yieldCurrentThread?4() +QtCore.QThread.isFinished?4() -> bool +QtCore.QThread.isRunning?4() -> bool +QtCore.QThread.setPriority?4(QThread.Priority) +QtCore.QThread.priority?4() -> QThread.Priority +QtCore.QThread.setStackSize?4(int) +QtCore.QThread.stackSize?4() -> int +QtCore.QThread.exit?4(int returnCode=0) +QtCore.QThread.start?4(QThread.Priority priority=QThread.InheritPriority) +QtCore.QThread.terminate?4() +QtCore.QThread.quit?4() +QtCore.QThread.wait?4(int msecs=ULONG_MAX) -> bool +QtCore.QThread.wait?4(QDeadlineTimer) -> bool +QtCore.QThread.started?4() +QtCore.QThread.finished?4() +QtCore.QThread.run?4() +QtCore.QThread.exec_?4() -> int +QtCore.QThread.exec?4() -> int +QtCore.QThread.setTerminationEnabled?4(bool enabled=True) +QtCore.QThread.event?4(QEvent) -> bool +QtCore.QThread.sleep?4(int) +QtCore.QThread.msleep?4(int) +QtCore.QThread.usleep?4(int) +QtCore.QThread.eventDispatcher?4() -> QAbstractEventDispatcher +QtCore.QThread.setEventDispatcher?4(QAbstractEventDispatcher) +QtCore.QThread.requestInterruption?4() +QtCore.QThread.isInterruptionRequested?4() -> bool +QtCore.QThread.loopLevel?4() -> int +QtCore.QThreadPool?1(QObject parent=None) +QtCore.QThreadPool.__init__?1(self, QObject parent=None) +QtCore.QThreadPool.globalInstance?4() -> QThreadPool +QtCore.QThreadPool.start?4(QRunnable, int priority=0) +QtCore.QThreadPool.start?4(Callable[..., None], int priority=0) +QtCore.QThreadPool.tryStart?4(QRunnable) -> bool +QtCore.QThreadPool.tryStart?4(Callable[..., None]) -> bool +QtCore.QThreadPool.tryTake?4(QRunnable) -> bool +QtCore.QThreadPool.expiryTimeout?4() -> int +QtCore.QThreadPool.setExpiryTimeout?4(int) +QtCore.QThreadPool.maxThreadCount?4() -> int +QtCore.QThreadPool.setMaxThreadCount?4(int) +QtCore.QThreadPool.activeThreadCount?4() -> int +QtCore.QThreadPool.reserveThread?4() +QtCore.QThreadPool.releaseThread?4() +QtCore.QThreadPool.waitForDone?4(int msecs=-1) -> bool +QtCore.QThreadPool.clear?4() +QtCore.QThreadPool.cancel?4(QRunnable) +QtCore.QThreadPool.setStackSize?4(int) +QtCore.QThreadPool.stackSize?4() -> int +QtCore.QThreadPool.contains?4(QThread) -> bool +QtCore.QTimeLine.State?10 +QtCore.QTimeLine.State.NotRunning?10 +QtCore.QTimeLine.State.Paused?10 +QtCore.QTimeLine.State.Running?10 +QtCore.QTimeLine.Direction?10 +QtCore.QTimeLine.Direction.Forward?10 +QtCore.QTimeLine.Direction.Backward?10 +QtCore.QTimeLine.CurveShape?10 +QtCore.QTimeLine.CurveShape.EaseInCurve?10 +QtCore.QTimeLine.CurveShape.EaseOutCurve?10 +QtCore.QTimeLine.CurveShape.EaseInOutCurve?10 +QtCore.QTimeLine.CurveShape.LinearCurve?10 +QtCore.QTimeLine.CurveShape.SineCurve?10 +QtCore.QTimeLine.CurveShape.CosineCurve?10 +QtCore.QTimeLine?1(int duration=1000, QObject parent=None) +QtCore.QTimeLine.__init__?1(self, int duration=1000, QObject parent=None) +QtCore.QTimeLine.state?4() -> QTimeLine.State +QtCore.QTimeLine.loopCount?4() -> int +QtCore.QTimeLine.setLoopCount?4(int) +QtCore.QTimeLine.direction?4() -> QTimeLine.Direction +QtCore.QTimeLine.setDirection?4(QTimeLine.Direction) +QtCore.QTimeLine.duration?4() -> int +QtCore.QTimeLine.setDuration?4(int) +QtCore.QTimeLine.startFrame?4() -> int +QtCore.QTimeLine.setStartFrame?4(int) +QtCore.QTimeLine.endFrame?4() -> int +QtCore.QTimeLine.setEndFrame?4(int) +QtCore.QTimeLine.setFrameRange?4(int, int) +QtCore.QTimeLine.updateInterval?4() -> int +QtCore.QTimeLine.setUpdateInterval?4(int) +QtCore.QTimeLine.curveShape?4() -> QTimeLine.CurveShape +QtCore.QTimeLine.setCurveShape?4(QTimeLine.CurveShape) +QtCore.QTimeLine.currentTime?4() -> int +QtCore.QTimeLine.currentFrame?4() -> int +QtCore.QTimeLine.currentValue?4() -> float +QtCore.QTimeLine.frameForTime?4(int) -> int +QtCore.QTimeLine.valueForTime?4(int) -> float +QtCore.QTimeLine.resume?4() +QtCore.QTimeLine.setCurrentTime?4(int) +QtCore.QTimeLine.setPaused?4(bool) +QtCore.QTimeLine.start?4() +QtCore.QTimeLine.stop?4() +QtCore.QTimeLine.toggleDirection?4() +QtCore.QTimeLine.finished?4() +QtCore.QTimeLine.frameChanged?4(int) +QtCore.QTimeLine.stateChanged?4(QTimeLine.State) +QtCore.QTimeLine.valueChanged?4(float) +QtCore.QTimeLine.timerEvent?4(QTimerEvent) +QtCore.QTimeLine.easingCurve?4() -> QEasingCurve +QtCore.QTimeLine.setEasingCurve?4(QEasingCurve) +QtCore.QTimer?1(QObject parent=None) +QtCore.QTimer.__init__?1(self, QObject parent=None) +QtCore.QTimer.isActive?4() -> bool +QtCore.QTimer.timerId?4() -> int +QtCore.QTimer.setInterval?4(int) +QtCore.QTimer.interval?4() -> int +QtCore.QTimer.isSingleShot?4() -> bool +QtCore.QTimer.setSingleShot?4(bool) +QtCore.QTimer.singleShot?4(int, Any) +QtCore.QTimer.singleShot?4(int, Qt.TimerType, Any) +QtCore.QTimer.start?4(int) +QtCore.QTimer.start?4() +QtCore.QTimer.stop?4() +QtCore.QTimer.timeout?4() +QtCore.QTimer.timerEvent?4(QTimerEvent) +QtCore.QTimer.setTimerType?4(Qt.TimerType) +QtCore.QTimer.timerType?4() -> Qt.TimerType +QtCore.QTimer.remainingTime?4() -> int +QtCore.QTimeZone.NameType?10 +QtCore.QTimeZone.NameType.DefaultName?10 +QtCore.QTimeZone.NameType.LongName?10 +QtCore.QTimeZone.NameType.ShortName?10 +QtCore.QTimeZone.NameType.OffsetName?10 +QtCore.QTimeZone.TimeType?10 +QtCore.QTimeZone.TimeType.StandardTime?10 +QtCore.QTimeZone.TimeType.DaylightTime?10 +QtCore.QTimeZone.TimeType.GenericTime?10 +QtCore.QTimeZone?1() +QtCore.QTimeZone.__init__?1(self) +QtCore.QTimeZone?1(QByteArray) +QtCore.QTimeZone.__init__?1(self, QByteArray) +QtCore.QTimeZone?1(int) +QtCore.QTimeZone.__init__?1(self, int) +QtCore.QTimeZone?1(QByteArray, int, QString, QString, QLocale.Country country=QLocale.AnyCountry, QString comment='') +QtCore.QTimeZone.__init__?1(self, QByteArray, int, QString, QString, QLocale.Country country=QLocale.AnyCountry, QString comment='') +QtCore.QTimeZone?1(QTimeZone) +QtCore.QTimeZone.__init__?1(self, QTimeZone) +QtCore.QTimeZone.swap?4(QTimeZone) +QtCore.QTimeZone.isValid?4() -> bool +QtCore.QTimeZone.id?4() -> QByteArray +QtCore.QTimeZone.country?4() -> QLocale.Country +QtCore.QTimeZone.comment?4() -> QString +QtCore.QTimeZone.displayName?4(QDateTime, QTimeZone.NameType nameType=QTimeZone.DefaultName, QLocale locale=QLocale()) -> QString +QtCore.QTimeZone.displayName?4(QTimeZone.TimeType, QTimeZone.NameType nameType=QTimeZone.DefaultName, QLocale locale=QLocale()) -> QString +QtCore.QTimeZone.abbreviation?4(QDateTime) -> QString +QtCore.QTimeZone.offsetFromUtc?4(QDateTime) -> int +QtCore.QTimeZone.standardTimeOffset?4(QDateTime) -> int +QtCore.QTimeZone.daylightTimeOffset?4(QDateTime) -> int +QtCore.QTimeZone.hasDaylightTime?4() -> bool +QtCore.QTimeZone.isDaylightTime?4(QDateTime) -> bool +QtCore.QTimeZone.offsetData?4(QDateTime) -> QTimeZone.OffsetData +QtCore.QTimeZone.hasTransitions?4() -> bool +QtCore.QTimeZone.nextTransition?4(QDateTime) -> QTimeZone.OffsetData +QtCore.QTimeZone.previousTransition?4(QDateTime) -> QTimeZone.OffsetData +QtCore.QTimeZone.transitions?4(QDateTime, QDateTime) -> unknown-type +QtCore.QTimeZone.systemTimeZoneId?4() -> QByteArray +QtCore.QTimeZone.isTimeZoneIdAvailable?4(QByteArray) -> bool +QtCore.QTimeZone.availableTimeZoneIds?4() -> unknown-type +QtCore.QTimeZone.availableTimeZoneIds?4(QLocale.Country) -> unknown-type +QtCore.QTimeZone.availableTimeZoneIds?4(int) -> unknown-type +QtCore.QTimeZone.ianaIdToWindowsId?4(QByteArray) -> QByteArray +QtCore.QTimeZone.windowsIdToDefaultIanaId?4(QByteArray) -> QByteArray +QtCore.QTimeZone.windowsIdToDefaultIanaId?4(QByteArray, QLocale.Country) -> QByteArray +QtCore.QTimeZone.windowsIdToIanaIds?4(QByteArray) -> unknown-type +QtCore.QTimeZone.windowsIdToIanaIds?4(QByteArray, QLocale.Country) -> unknown-type +QtCore.QTimeZone.systemTimeZone?4() -> QTimeZone +QtCore.QTimeZone.utc?4() -> QTimeZone +QtCore.QTimeZone.OffsetData.abbreviation?7 +QtCore.QTimeZone.OffsetData.atUtc?7 +QtCore.QTimeZone.OffsetData.daylightTimeOffset?7 +QtCore.QTimeZone.OffsetData.offsetFromUtc?7 +QtCore.QTimeZone.OffsetData.standardTimeOffset?7 +QtCore.QTimeZone.OffsetData?1() +QtCore.QTimeZone.OffsetData.__init__?1(self) +QtCore.QTimeZone.OffsetData?1(QTimeZone.OffsetData) +QtCore.QTimeZone.OffsetData.__init__?1(self, QTimeZone.OffsetData) +QtCore.QTranslator?1(QObject parent=None) +QtCore.QTranslator.__init__?1(self, QObject parent=None) +QtCore.QTranslator.translate?4(str, str, str disambiguation=None, int n=-1) -> QString +QtCore.QTranslator.isEmpty?4() -> bool +QtCore.QTranslator.load?4(QString, QString directory='', QString searchDelimiters='', QString suffix='') -> bool +QtCore.QTranslator.load?4(QLocale, QString, QString prefix='', QString directory='', QString suffix='') -> bool +QtCore.QTranslator.loadFromData?4(bytes, QString directory='') -> bool +QtCore.QTranslator.language?4() -> QString +QtCore.QTranslator.filePath?4() -> QString +QtCore.QTransposeProxyModel?1(QObject parent=None) +QtCore.QTransposeProxyModel.__init__?1(self, QObject parent=None) +QtCore.QTransposeProxyModel.setSourceModel?4(QAbstractItemModel) +QtCore.QTransposeProxyModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QTransposeProxyModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtCore.QTransposeProxyModel.headerData?4(int, Qt.Orientation, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtCore.QTransposeProxyModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.ItemDataRole.EditRole) -> bool +QtCore.QTransposeProxyModel.setItemData?4(QModelIndex, unknown-type) -> bool +QtCore.QTransposeProxyModel.span?4(QModelIndex) -> QSize +QtCore.QTransposeProxyModel.itemData?4(QModelIndex) -> unknown-type +QtCore.QTransposeProxyModel.mapFromSource?4(QModelIndex) -> QModelIndex +QtCore.QTransposeProxyModel.mapToSource?4(QModelIndex) -> QModelIndex +QtCore.QTransposeProxyModel.parent?4(QModelIndex) -> QModelIndex +QtCore.QTransposeProxyModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtCore.QTransposeProxyModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QTransposeProxyModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QTransposeProxyModel.moveRows?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QTransposeProxyModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QTransposeProxyModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtCore.QTransposeProxyModel.moveColumns?4(QModelIndex, int, int, QModelIndex, int) -> bool +QtCore.QTransposeProxyModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtCore.QUrl.UserInputResolutionOption?10 +QtCore.QUrl.UserInputResolutionOption.DefaultResolution?10 +QtCore.QUrl.UserInputResolutionOption.AssumeLocalFile?10 +QtCore.QUrl.ComponentFormattingOption?10 +QtCore.QUrl.ComponentFormattingOption.PrettyDecoded?10 +QtCore.QUrl.ComponentFormattingOption.EncodeSpaces?10 +QtCore.QUrl.ComponentFormattingOption.EncodeUnicode?10 +QtCore.QUrl.ComponentFormattingOption.EncodeDelimiters?10 +QtCore.QUrl.ComponentFormattingOption.EncodeReserved?10 +QtCore.QUrl.ComponentFormattingOption.DecodeReserved?10 +QtCore.QUrl.ComponentFormattingOption.FullyEncoded?10 +QtCore.QUrl.ComponentFormattingOption.FullyDecoded?10 +QtCore.QUrl.UrlFormattingOption?10 +QtCore.QUrl.UrlFormattingOption.None_?10 +QtCore.QUrl.UrlFormattingOption.RemoveScheme?10 +QtCore.QUrl.UrlFormattingOption.RemovePassword?10 +QtCore.QUrl.UrlFormattingOption.RemoveUserInfo?10 +QtCore.QUrl.UrlFormattingOption.RemovePort?10 +QtCore.QUrl.UrlFormattingOption.RemoveAuthority?10 +QtCore.QUrl.UrlFormattingOption.RemovePath?10 +QtCore.QUrl.UrlFormattingOption.RemoveQuery?10 +QtCore.QUrl.UrlFormattingOption.RemoveFragment?10 +QtCore.QUrl.UrlFormattingOption.PreferLocalFile?10 +QtCore.QUrl.UrlFormattingOption.StripTrailingSlash?10 +QtCore.QUrl.UrlFormattingOption.RemoveFilename?10 +QtCore.QUrl.UrlFormattingOption.NormalizePathSegments?10 +QtCore.QUrl.ParsingMode?10 +QtCore.QUrl.ParsingMode.TolerantMode?10 +QtCore.QUrl.ParsingMode.StrictMode?10 +QtCore.QUrl.ParsingMode.DecodedMode?10 +QtCore.QUrl?1() +QtCore.QUrl.__init__?1(self) +QtCore.QUrl?1(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) +QtCore.QUrl.__init__?1(self, QString, QUrl.ParsingMode mode=QUrl.TolerantMode) +QtCore.QUrl?1(QUrl) +QtCore.QUrl.__init__?1(self, QUrl) +QtCore.QUrl.url?4(QUrl.FormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrl.setUrl?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) +QtCore.QUrl.isValid?4() -> bool +QtCore.QUrl.isEmpty?4() -> bool +QtCore.QUrl.clear?4() +QtCore.QUrl.setScheme?4(QString) +QtCore.QUrl.scheme?4() -> QString +QtCore.QUrl.setAuthority?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) +QtCore.QUrl.authority?4(QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrl.setUserInfo?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) +QtCore.QUrl.userInfo?4(QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrl.setUserName?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) +QtCore.QUrl.userName?4(QUrl.ComponentFormattingOptions options=QUrl.FullyDecoded) -> QString +QtCore.QUrl.setPassword?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) +QtCore.QUrl.password?4(QUrl.ComponentFormattingOptions options=QUrl.FullyDecoded) -> QString +QtCore.QUrl.setHost?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) +QtCore.QUrl.host?4(QUrl.ComponentFormattingOptions=QUrl.FullyDecoded) -> QString +QtCore.QUrl.setPort?4(int) +QtCore.QUrl.port?4(int defaultPort=-1) -> int +QtCore.QUrl.setPath?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) +QtCore.QUrl.path?4(QUrl.ComponentFormattingOptions options=QUrl.FullyDecoded) -> QString +QtCore.QUrl.setFragment?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) +QtCore.QUrl.fragment?4(QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrl.resolved?4(QUrl) -> QUrl +QtCore.QUrl.isRelative?4() -> bool +QtCore.QUrl.isParentOf?4(QUrl) -> bool +QtCore.QUrl.fromLocalFile?4(QString) -> QUrl +QtCore.QUrl.toLocalFile?4() -> QString +QtCore.QUrl.toString?4(QUrl.FormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrl.toEncoded?4(QUrl.FormattingOptions options=QUrl.FullyEncoded) -> QByteArray +QtCore.QUrl.fromEncoded?4(QByteArray, QUrl.ParsingMode mode=QUrl.TolerantMode) -> QUrl +QtCore.QUrl.detach?4() +QtCore.QUrl.isDetached?4() -> bool +QtCore.QUrl.fromPercentEncoding?4(QByteArray) -> QString +QtCore.QUrl.toPercentEncoding?4(QString, QByteArray exclude=QByteArray(), QByteArray include=QByteArray()) -> QByteArray +QtCore.QUrl.hasQuery?4() -> bool +QtCore.QUrl.hasFragment?4() -> bool +QtCore.QUrl.errorString?4() -> QString +QtCore.QUrl.fromAce?4(QByteArray) -> QString +QtCore.QUrl.toAce?4(QString) -> QByteArray +QtCore.QUrl.idnWhitelist?4() -> QStringList +QtCore.QUrl.setIdnWhitelist?4(QStringList) +QtCore.QUrl.fromUserInput?4(QString) -> QUrl +QtCore.QUrl.swap?4(QUrl) +QtCore.QUrl.topLevelDomain?4(QUrl.ComponentFormattingOptions options=QUrl.FullyDecoded) -> QString +QtCore.QUrl.isLocalFile?4() -> bool +QtCore.QUrl.toDisplayString?4(QUrl.FormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrl.setQuery?4(QString, QUrl.ParsingMode mode=QUrl.TolerantMode) +QtCore.QUrl.setQuery?4(QUrlQuery) +QtCore.QUrl.query?4(QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrl.toStringList?4(unknown-type, QUrl.FormattingOptions options=QUrl.PrettyDecoded) -> QStringList +QtCore.QUrl.fromStringList?4(QStringList, QUrl.ParsingMode mode=QUrl.TolerantMode) -> unknown-type +QtCore.QUrl.adjusted?4(QUrl.FormattingOptions) -> QUrl +QtCore.QUrl.fileName?4(QUrl.ComponentFormattingOptions options=QUrl.FullyDecoded) -> QString +QtCore.QUrl.matches?4(QUrl, QUrl.FormattingOptions) -> bool +QtCore.QUrl.fromUserInput?4(QString, QString, QUrl.UserInputResolutionOptions options=QUrl.DefaultResolution) -> QUrl +QtCore.QUrl.FormattingOptions?1() +QtCore.QUrl.FormattingOptions.__init__?1(self) +QtCore.QUrl.FormattingOptions?1(QUrl.FormattingOptions) +QtCore.QUrl.FormattingOptions.__init__?1(self, QUrl.FormattingOptions) +QtCore.QUrl.ComponentFormattingOptions?1() +QtCore.QUrl.ComponentFormattingOptions.__init__?1(self) +QtCore.QUrl.ComponentFormattingOptions?1(int) +QtCore.QUrl.ComponentFormattingOptions.__init__?1(self, int) +QtCore.QUrl.ComponentFormattingOptions?1(QUrl.ComponentFormattingOptions) +QtCore.QUrl.ComponentFormattingOptions.__init__?1(self, QUrl.ComponentFormattingOptions) +QtCore.QUrl.UserInputResolutionOptions?1() +QtCore.QUrl.UserInputResolutionOptions.__init__?1(self) +QtCore.QUrl.UserInputResolutionOptions?1(int) +QtCore.QUrl.UserInputResolutionOptions.__init__?1(self, int) +QtCore.QUrl.UserInputResolutionOptions?1(QUrl.UserInputResolutionOptions) +QtCore.QUrl.UserInputResolutionOptions.__init__?1(self, QUrl.UserInputResolutionOptions) +QtCore.QUrlQuery?1() +QtCore.QUrlQuery.__init__?1(self) +QtCore.QUrlQuery?1(QUrl) +QtCore.QUrlQuery.__init__?1(self, QUrl) +QtCore.QUrlQuery?1(QString) +QtCore.QUrlQuery.__init__?1(self, QString) +QtCore.QUrlQuery?1(QUrlQuery) +QtCore.QUrlQuery.__init__?1(self, QUrlQuery) +QtCore.QUrlQuery.swap?4(QUrlQuery) +QtCore.QUrlQuery.isEmpty?4() -> bool +QtCore.QUrlQuery.isDetached?4() -> bool +QtCore.QUrlQuery.clear?4() +QtCore.QUrlQuery.query?4(QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrlQuery.setQuery?4(QString) +QtCore.QUrlQuery.toString?4(QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrlQuery.setQueryDelimiters?4(QChar, QChar) +QtCore.QUrlQuery.queryValueDelimiter?4() -> QChar +QtCore.QUrlQuery.queryPairDelimiter?4() -> QChar +QtCore.QUrlQuery.setQueryItems?4(unknown-type) +QtCore.QUrlQuery.queryItems?4(QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> unknown-type +QtCore.QUrlQuery.hasQueryItem?4(QString) -> bool +QtCore.QUrlQuery.addQueryItem?4(QString, QString) +QtCore.QUrlQuery.removeQueryItem?4(QString) +QtCore.QUrlQuery.queryItemValue?4(QString, QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> QString +QtCore.QUrlQuery.allQueryItemValues?4(QString, QUrl.ComponentFormattingOptions options=QUrl.PrettyDecoded) -> QStringList +QtCore.QUrlQuery.removeAllQueryItems?4(QString) +QtCore.QUrlQuery.defaultQueryValueDelimiter?4() -> QChar +QtCore.QUrlQuery.defaultQueryPairDelimiter?4() -> QChar +QtCore.QUuid.StringFormat?10 +QtCore.QUuid.StringFormat.WithBraces?10 +QtCore.QUuid.StringFormat.WithoutBraces?10 +QtCore.QUuid.StringFormat.Id128?10 +QtCore.QUuid.Version?10 +QtCore.QUuid.Version.VerUnknown?10 +QtCore.QUuid.Version.Time?10 +QtCore.QUuid.Version.EmbeddedPOSIX?10 +QtCore.QUuid.Version.Md5?10 +QtCore.QUuid.Version.Name?10 +QtCore.QUuid.Version.Random?10 +QtCore.QUuid.Version.Sha1?10 +QtCore.QUuid.Variant?10 +QtCore.QUuid.Variant.VarUnknown?10 +QtCore.QUuid.Variant.NCS?10 +QtCore.QUuid.Variant.DCE?10 +QtCore.QUuid.Variant.Microsoft?10 +QtCore.QUuid.Variant.Reserved?10 +QtCore.QUuid?1() +QtCore.QUuid.__init__?1(self) +QtCore.QUuid?1(int, int, int, int, int, int, int, int, int, int, int) +QtCore.QUuid.__init__?1(self, int, int, int, int, int, int, int, int, int, int, int) +QtCore.QUuid?1(QString) +QtCore.QUuid.__init__?1(self, QString) +QtCore.QUuid?1(QByteArray) +QtCore.QUuid.__init__?1(self, QByteArray) +QtCore.QUuid?1(QUuid) +QtCore.QUuid.__init__?1(self, QUuid) +QtCore.QUuid.toString?4() -> QString +QtCore.QUuid.toString?4(QUuid.StringFormat) -> QString +QtCore.QUuid.isNull?4() -> bool +QtCore.QUuid.createUuid?4() -> QUuid +QtCore.QUuid.createUuidV3?4(QUuid, QByteArray) -> QUuid +QtCore.QUuid.createUuidV5?4(QUuid, QByteArray) -> QUuid +QtCore.QUuid.createUuidV3?4(QUuid, QString) -> QUuid +QtCore.QUuid.createUuidV5?4(QUuid, QString) -> QUuid +QtCore.QUuid.variant?4() -> QUuid.Variant +QtCore.QUuid.version?4() -> QUuid.Version +QtCore.QUuid.toByteArray?4() -> QByteArray +QtCore.QUuid.toByteArray?4(QUuid.StringFormat) -> QByteArray +QtCore.QUuid.toRfc4122?4() -> QByteArray +QtCore.QUuid.fromRfc4122?4(QByteArray) -> QUuid +QtCore.QVariant.Type?10 +QtCore.QVariant.Type.Invalid?10 +QtCore.QVariant.Type.Bool?10 +QtCore.QVariant.Type.Int?10 +QtCore.QVariant.Type.UInt?10 +QtCore.QVariant.Type.LongLong?10 +QtCore.QVariant.Type.ULongLong?10 +QtCore.QVariant.Type.Double?10 +QtCore.QVariant.Type.Char?10 +QtCore.QVariant.Type.Map?10 +QtCore.QVariant.Type.List?10 +QtCore.QVariant.Type.String?10 +QtCore.QVariant.Type.StringList?10 +QtCore.QVariant.Type.ByteArray?10 +QtCore.QVariant.Type.BitArray?10 +QtCore.QVariant.Type.Date?10 +QtCore.QVariant.Type.Time?10 +QtCore.QVariant.Type.DateTime?10 +QtCore.QVariant.Type.Url?10 +QtCore.QVariant.Type.Locale?10 +QtCore.QVariant.Type.Rect?10 +QtCore.QVariant.Type.RectF?10 +QtCore.QVariant.Type.Size?10 +QtCore.QVariant.Type.SizeF?10 +QtCore.QVariant.Type.Line?10 +QtCore.QVariant.Type.LineF?10 +QtCore.QVariant.Type.Point?10 +QtCore.QVariant.Type.PointF?10 +QtCore.QVariant.Type.RegExp?10 +QtCore.QVariant.Type.Font?10 +QtCore.QVariant.Type.Pixmap?10 +QtCore.QVariant.Type.Brush?10 +QtCore.QVariant.Type.Color?10 +QtCore.QVariant.Type.Palette?10 +QtCore.QVariant.Type.Icon?10 +QtCore.QVariant.Type.Image?10 +QtCore.QVariant.Type.Polygon?10 +QtCore.QVariant.Type.Region?10 +QtCore.QVariant.Type.Bitmap?10 +QtCore.QVariant.Type.Cursor?10 +QtCore.QVariant.Type.SizePolicy?10 +QtCore.QVariant.Type.KeySequence?10 +QtCore.QVariant.Type.Pen?10 +QtCore.QVariant.Type.TextLength?10 +QtCore.QVariant.Type.TextFormat?10 +QtCore.QVariant.Type.Matrix?10 +QtCore.QVariant.Type.Transform?10 +QtCore.QVariant.Type.Hash?10 +QtCore.QVariant.Type.Matrix4x4?10 +QtCore.QVariant.Type.Vector2D?10 +QtCore.QVariant.Type.Vector3D?10 +QtCore.QVariant.Type.Vector4D?10 +QtCore.QVariant.Type.Quaternion?10 +QtCore.QVariant.Type.EasingCurve?10 +QtCore.QVariant.Type.Uuid?10 +QtCore.QVariant.Type.ModelIndex?10 +QtCore.QVariant.Type.PolygonF?10 +QtCore.QVariant.Type.RegularExpression?10 +QtCore.QVariant.Type.PersistentModelIndex?10 +QtCore.QVariant.Type.UserType?10 +QtCore.QVariant?1() +QtCore.QVariant.__init__?1(self) +QtCore.QVariant?1(QVariant.Type) +QtCore.QVariant.__init__?1(self, QVariant.Type) +QtCore.QVariant?1(Any) +QtCore.QVariant.__init__?1(self, Any) +QtCore.QVariant?1(QVariant) +QtCore.QVariant.__init__?1(self, QVariant) +QtCore.QVariant.value?4() -> Any +QtCore.QVariant.type?4() -> QVariant.Type +QtCore.QVariant.userType?4() -> int +QtCore.QVariant.typeName?4() -> str +QtCore.QVariant.canConvert?4(int) -> bool +QtCore.QVariant.convert?4(int) -> bool +QtCore.QVariant.isValid?4() -> bool +QtCore.QVariant.isNull?4() -> bool +QtCore.QVariant.clear?4() +QtCore.QVariant.load?4(QDataStream) +QtCore.QVariant.save?4(QDataStream) +QtCore.QVariant.typeToName?4(int) -> str +QtCore.QVariant.nameToType?4(str) -> QVariant.Type +QtCore.QVariant.swap?4(QVariant) +QtCore.QVersionNumber?1() +QtCore.QVersionNumber.__init__?1(self) +QtCore.QVersionNumber?1(unknown-type) +QtCore.QVersionNumber.__init__?1(self, unknown-type) +QtCore.QVersionNumber?1(int) +QtCore.QVersionNumber.__init__?1(self, int) +QtCore.QVersionNumber?1(int, int) +QtCore.QVersionNumber.__init__?1(self, int, int) +QtCore.QVersionNumber?1(int, int, int) +QtCore.QVersionNumber.__init__?1(self, int, int, int) +QtCore.QVersionNumber?1(QVersionNumber) +QtCore.QVersionNumber.__init__?1(self, QVersionNumber) +QtCore.QVersionNumber.isNull?4() -> bool +QtCore.QVersionNumber.isNormalized?4() -> bool +QtCore.QVersionNumber.majorVersion?4() -> int +QtCore.QVersionNumber.minorVersion?4() -> int +QtCore.QVersionNumber.microVersion?4() -> int +QtCore.QVersionNumber.normalized?4() -> QVersionNumber +QtCore.QVersionNumber.segments?4() -> unknown-type +QtCore.QVersionNumber.segmentAt?4(int) -> int +QtCore.QVersionNumber.segmentCount?4() -> int +QtCore.QVersionNumber.isPrefixOf?4(QVersionNumber) -> bool +QtCore.QVersionNumber.compare?4(QVersionNumber, QVersionNumber) -> int +QtCore.QVersionNumber.commonPrefix?4(QVersionNumber, QVersionNumber) -> QVersionNumber +QtCore.QVersionNumber.toString?4() -> QString +QtCore.QVersionNumber.fromString?4(QString) -> (QVersionNumber, int) +QtCore.QWaitCondition?1() +QtCore.QWaitCondition.__init__?1(self) +QtCore.QWaitCondition.wait?4(QMutex, int msecs=ULONG_MAX) -> bool +QtCore.QWaitCondition.wait?4(QMutex, QDeadlineTimer) -> bool +QtCore.QWaitCondition.wait?4(QReadWriteLock, int msecs=ULONG_MAX) -> bool +QtCore.QWaitCondition.wait?4(QReadWriteLock, QDeadlineTimer) -> bool +QtCore.QWaitCondition.wakeOne?4() +QtCore.QWaitCondition.wakeAll?4() +QtCore.QXmlStreamAttribute?1() +QtCore.QXmlStreamAttribute.__init__?1(self) +QtCore.QXmlStreamAttribute?1(QString, QString) +QtCore.QXmlStreamAttribute.__init__?1(self, QString, QString) +QtCore.QXmlStreamAttribute?1(QString, QString, QString) +QtCore.QXmlStreamAttribute.__init__?1(self, QString, QString, QString) +QtCore.QXmlStreamAttribute?1(QXmlStreamAttribute) +QtCore.QXmlStreamAttribute.__init__?1(self, QXmlStreamAttribute) +QtCore.QXmlStreamAttribute.namespaceUri?4() -> QStringRef +QtCore.QXmlStreamAttribute.name?4() -> QStringRef +QtCore.QXmlStreamAttribute.qualifiedName?4() -> QStringRef +QtCore.QXmlStreamAttribute.prefix?4() -> QStringRef +QtCore.QXmlStreamAttribute.value?4() -> QStringRef +QtCore.QXmlStreamAttribute.isDefault?4() -> bool +QtCore.QXmlStreamAttributes?1() +QtCore.QXmlStreamAttributes.__init__?1(self) +QtCore.QXmlStreamAttributes?1(QXmlStreamAttributes) +QtCore.QXmlStreamAttributes.__init__?1(self, QXmlStreamAttributes) +QtCore.QXmlStreamAttributes.value?4(QString, QString) -> QStringRef +QtCore.QXmlStreamAttributes.value?4(QString) -> QStringRef +QtCore.QXmlStreamAttributes.append?4(QString, QString, QString) +QtCore.QXmlStreamAttributes.append?4(QString, QString) +QtCore.QXmlStreamAttributes.append?4(QXmlStreamAttribute) +QtCore.QXmlStreamAttributes.hasAttribute?4(QString) -> bool +QtCore.QXmlStreamAttributes.hasAttribute?4(QString, QString) -> bool +QtCore.QXmlStreamAttributes.at?4(int) -> QXmlStreamAttribute +QtCore.QXmlStreamAttributes.clear?4() +QtCore.QXmlStreamAttributes.contains?4(QXmlStreamAttribute) -> bool +QtCore.QXmlStreamAttributes.count?4(QXmlStreamAttribute) -> int +QtCore.QXmlStreamAttributes.count?4() -> int +QtCore.QXmlStreamAttributes.data?4() -> PyQt5.sip.voidptr +QtCore.QXmlStreamAttributes.fill?4(QXmlStreamAttribute, int size=-1) +QtCore.QXmlStreamAttributes.first?4() -> QXmlStreamAttribute +QtCore.QXmlStreamAttributes.indexOf?4(QXmlStreamAttribute, int from=0) -> int +QtCore.QXmlStreamAttributes.insert?4(int, QXmlStreamAttribute) +QtCore.QXmlStreamAttributes.isEmpty?4() -> bool +QtCore.QXmlStreamAttributes.last?4() -> QXmlStreamAttribute +QtCore.QXmlStreamAttributes.lastIndexOf?4(QXmlStreamAttribute, int from=-1) -> int +QtCore.QXmlStreamAttributes.prepend?4(QXmlStreamAttribute) +QtCore.QXmlStreamAttributes.remove?4(int) +QtCore.QXmlStreamAttributes.remove?4(int, int) +QtCore.QXmlStreamAttributes.replace?4(int, QXmlStreamAttribute) +QtCore.QXmlStreamAttributes.size?4() -> int +QtCore.QXmlStreamNamespaceDeclaration?1() +QtCore.QXmlStreamNamespaceDeclaration.__init__?1(self) +QtCore.QXmlStreamNamespaceDeclaration?1(QXmlStreamNamespaceDeclaration) +QtCore.QXmlStreamNamespaceDeclaration.__init__?1(self, QXmlStreamNamespaceDeclaration) +QtCore.QXmlStreamNamespaceDeclaration?1(QString, QString) +QtCore.QXmlStreamNamespaceDeclaration.__init__?1(self, QString, QString) +QtCore.QXmlStreamNamespaceDeclaration.prefix?4() -> QStringRef +QtCore.QXmlStreamNamespaceDeclaration.namespaceUri?4() -> QStringRef +QtCore.QXmlStreamNotationDeclaration?1() +QtCore.QXmlStreamNotationDeclaration.__init__?1(self) +QtCore.QXmlStreamNotationDeclaration?1(QXmlStreamNotationDeclaration) +QtCore.QXmlStreamNotationDeclaration.__init__?1(self, QXmlStreamNotationDeclaration) +QtCore.QXmlStreamNotationDeclaration.name?4() -> QStringRef +QtCore.QXmlStreamNotationDeclaration.systemId?4() -> QStringRef +QtCore.QXmlStreamNotationDeclaration.publicId?4() -> QStringRef +QtCore.QXmlStreamEntityDeclaration?1() +QtCore.QXmlStreamEntityDeclaration.__init__?1(self) +QtCore.QXmlStreamEntityDeclaration?1(QXmlStreamEntityDeclaration) +QtCore.QXmlStreamEntityDeclaration.__init__?1(self, QXmlStreamEntityDeclaration) +QtCore.QXmlStreamEntityDeclaration.name?4() -> QStringRef +QtCore.QXmlStreamEntityDeclaration.notationName?4() -> QStringRef +QtCore.QXmlStreamEntityDeclaration.systemId?4() -> QStringRef +QtCore.QXmlStreamEntityDeclaration.publicId?4() -> QStringRef +QtCore.QXmlStreamEntityDeclaration.value?4() -> QStringRef +QtCore.QXmlStreamEntityResolver?1() +QtCore.QXmlStreamEntityResolver.__init__?1(self) +QtCore.QXmlStreamEntityResolver?1(QXmlStreamEntityResolver) +QtCore.QXmlStreamEntityResolver.__init__?1(self, QXmlStreamEntityResolver) +QtCore.QXmlStreamEntityResolver.resolveUndeclaredEntity?4(QString) -> QString +QtCore.QXmlStreamReader.Error?10 +QtCore.QXmlStreamReader.Error.NoError?10 +QtCore.QXmlStreamReader.Error.UnexpectedElementError?10 +QtCore.QXmlStreamReader.Error.CustomError?10 +QtCore.QXmlStreamReader.Error.NotWellFormedError?10 +QtCore.QXmlStreamReader.Error.PrematureEndOfDocumentError?10 +QtCore.QXmlStreamReader.ReadElementTextBehaviour?10 +QtCore.QXmlStreamReader.ReadElementTextBehaviour.ErrorOnUnexpectedElement?10 +QtCore.QXmlStreamReader.ReadElementTextBehaviour.IncludeChildElements?10 +QtCore.QXmlStreamReader.ReadElementTextBehaviour.SkipChildElements?10 +QtCore.QXmlStreamReader.TokenType?10 +QtCore.QXmlStreamReader.TokenType.NoToken?10 +QtCore.QXmlStreamReader.TokenType.Invalid?10 +QtCore.QXmlStreamReader.TokenType.StartDocument?10 +QtCore.QXmlStreamReader.TokenType.EndDocument?10 +QtCore.QXmlStreamReader.TokenType.StartElement?10 +QtCore.QXmlStreamReader.TokenType.EndElement?10 +QtCore.QXmlStreamReader.TokenType.Characters?10 +QtCore.QXmlStreamReader.TokenType.Comment?10 +QtCore.QXmlStreamReader.TokenType.DTD?10 +QtCore.QXmlStreamReader.TokenType.EntityReference?10 +QtCore.QXmlStreamReader.TokenType.ProcessingInstruction?10 +QtCore.QXmlStreamReader?1() +QtCore.QXmlStreamReader.__init__?1(self) +QtCore.QXmlStreamReader?1(QIODevice) +QtCore.QXmlStreamReader.__init__?1(self, QIODevice) +QtCore.QXmlStreamReader?1(QByteArray) +QtCore.QXmlStreamReader.__init__?1(self, QByteArray) +QtCore.QXmlStreamReader?1(QString) +QtCore.QXmlStreamReader.__init__?1(self, QString) +QtCore.QXmlStreamReader.setDevice?4(QIODevice) +QtCore.QXmlStreamReader.device?4() -> QIODevice +QtCore.QXmlStreamReader.addData?4(QByteArray) +QtCore.QXmlStreamReader.addData?4(QString) +QtCore.QXmlStreamReader.clear?4() +QtCore.QXmlStreamReader.atEnd?4() -> bool +QtCore.QXmlStreamReader.readNext?4() -> QXmlStreamReader.TokenType +QtCore.QXmlStreamReader.tokenType?4() -> QXmlStreamReader.TokenType +QtCore.QXmlStreamReader.tokenString?4() -> QString +QtCore.QXmlStreamReader.setNamespaceProcessing?4(bool) +QtCore.QXmlStreamReader.namespaceProcessing?4() -> bool +QtCore.QXmlStreamReader.isStartDocument?4() -> bool +QtCore.QXmlStreamReader.isEndDocument?4() -> bool +QtCore.QXmlStreamReader.isStartElement?4() -> bool +QtCore.QXmlStreamReader.isEndElement?4() -> bool +QtCore.QXmlStreamReader.isCharacters?4() -> bool +QtCore.QXmlStreamReader.isWhitespace?4() -> bool +QtCore.QXmlStreamReader.isCDATA?4() -> bool +QtCore.QXmlStreamReader.isComment?4() -> bool +QtCore.QXmlStreamReader.isDTD?4() -> bool +QtCore.QXmlStreamReader.isEntityReference?4() -> bool +QtCore.QXmlStreamReader.isProcessingInstruction?4() -> bool +QtCore.QXmlStreamReader.isStandaloneDocument?4() -> bool +QtCore.QXmlStreamReader.documentVersion?4() -> QStringRef +QtCore.QXmlStreamReader.documentEncoding?4() -> QStringRef +QtCore.QXmlStreamReader.lineNumber?4() -> int +QtCore.QXmlStreamReader.columnNumber?4() -> int +QtCore.QXmlStreamReader.characterOffset?4() -> int +QtCore.QXmlStreamReader.attributes?4() -> QXmlStreamAttributes +QtCore.QXmlStreamReader.readElementText?4(QXmlStreamReader.ReadElementTextBehaviour behaviour=QXmlStreamReader.ErrorOnUnexpectedElement) -> QString +QtCore.QXmlStreamReader.name?4() -> QStringRef +QtCore.QXmlStreamReader.namespaceUri?4() -> QStringRef +QtCore.QXmlStreamReader.qualifiedName?4() -> QStringRef +QtCore.QXmlStreamReader.prefix?4() -> QStringRef +QtCore.QXmlStreamReader.processingInstructionTarget?4() -> QStringRef +QtCore.QXmlStreamReader.processingInstructionData?4() -> QStringRef +QtCore.QXmlStreamReader.text?4() -> QStringRef +QtCore.QXmlStreamReader.namespaceDeclarations?4() -> unknown-type +QtCore.QXmlStreamReader.addExtraNamespaceDeclaration?4(QXmlStreamNamespaceDeclaration) +QtCore.QXmlStreamReader.addExtraNamespaceDeclarations?4(unknown-type) +QtCore.QXmlStreamReader.notationDeclarations?4() -> unknown-type +QtCore.QXmlStreamReader.entityDeclarations?4() -> unknown-type +QtCore.QXmlStreamReader.dtdName?4() -> QStringRef +QtCore.QXmlStreamReader.dtdPublicId?4() -> QStringRef +QtCore.QXmlStreamReader.dtdSystemId?4() -> QStringRef +QtCore.QXmlStreamReader.raiseError?4(QString message='') +QtCore.QXmlStreamReader.errorString?4() -> QString +QtCore.QXmlStreamReader.error?4() -> QXmlStreamReader.Error +QtCore.QXmlStreamReader.hasError?4() -> bool +QtCore.QXmlStreamReader.setEntityResolver?4(QXmlStreamEntityResolver) +QtCore.QXmlStreamReader.entityResolver?4() -> QXmlStreamEntityResolver +QtCore.QXmlStreamReader.readNextStartElement?4() -> bool +QtCore.QXmlStreamReader.skipCurrentElement?4() +QtCore.QXmlStreamReader.entityExpansionLimit?4() -> int +QtCore.QXmlStreamReader.setEntityExpansionLimit?4(int) +QtCore.QXmlStreamWriter?1() +QtCore.QXmlStreamWriter.__init__?1(self) +QtCore.QXmlStreamWriter?1(QIODevice) +QtCore.QXmlStreamWriter.__init__?1(self, QIODevice) +QtCore.QXmlStreamWriter?1(QByteArray) +QtCore.QXmlStreamWriter.__init__?1(self, QByteArray) +QtCore.QXmlStreamWriter.setDevice?4(QIODevice) +QtCore.QXmlStreamWriter.device?4() -> QIODevice +QtCore.QXmlStreamWriter.setCodec?4(QTextCodec) +QtCore.QXmlStreamWriter.setCodec?4(str) +QtCore.QXmlStreamWriter.codec?4() -> QTextCodec +QtCore.QXmlStreamWriter.setAutoFormatting?4(bool) +QtCore.QXmlStreamWriter.autoFormatting?4() -> bool +QtCore.QXmlStreamWriter.setAutoFormattingIndent?4(int) +QtCore.QXmlStreamWriter.autoFormattingIndent?4() -> int +QtCore.QXmlStreamWriter.writeAttribute?4(QString, QString) +QtCore.QXmlStreamWriter.writeAttribute?4(QString, QString, QString) +QtCore.QXmlStreamWriter.writeAttribute?4(QXmlStreamAttribute) +QtCore.QXmlStreamWriter.writeAttributes?4(QXmlStreamAttributes) +QtCore.QXmlStreamWriter.writeCDATA?4(QString) +QtCore.QXmlStreamWriter.writeCharacters?4(QString) +QtCore.QXmlStreamWriter.writeComment?4(QString) +QtCore.QXmlStreamWriter.writeDTD?4(QString) +QtCore.QXmlStreamWriter.writeEmptyElement?4(QString) +QtCore.QXmlStreamWriter.writeEmptyElement?4(QString, QString) +QtCore.QXmlStreamWriter.writeTextElement?4(QString, QString) +QtCore.QXmlStreamWriter.writeTextElement?4(QString, QString, QString) +QtCore.QXmlStreamWriter.writeEndDocument?4() +QtCore.QXmlStreamWriter.writeEndElement?4() +QtCore.QXmlStreamWriter.writeEntityReference?4(QString) +QtCore.QXmlStreamWriter.writeNamespace?4(QString, QString prefix='') +QtCore.QXmlStreamWriter.writeDefaultNamespace?4(QString) +QtCore.QXmlStreamWriter.writeProcessingInstruction?4(QString, QString data='') +QtCore.QXmlStreamWriter.writeStartDocument?4() +QtCore.QXmlStreamWriter.writeStartDocument?4(QString) +QtCore.QXmlStreamWriter.writeStartDocument?4(QString, bool) +QtCore.QXmlStreamWriter.writeStartElement?4(QString) +QtCore.QXmlStreamWriter.writeStartElement?4(QString, QString) +QtCore.QXmlStreamWriter.writeCurrentToken?4(QXmlStreamReader) +QtCore.QXmlStreamWriter.hasError?4() -> bool +QtCore.QSysInfo.Endian?10 +QtCore.QSysInfo.Endian.BigEndian?10 +QtCore.QSysInfo.Endian.LittleEndian?10 +QtCore.QSysInfo.Endian.ByteOrder?10 +QtCore.QSysInfo.Sizes?10 +QtCore.QSysInfo.Sizes.WordSize?10 +QtCore.QSysInfo?1() +QtCore.QSysInfo.__init__?1(self) +QtCore.QSysInfo?1(QSysInfo) +QtCore.QSysInfo.__init__?1(self, QSysInfo) +QtCore.QSysInfo.buildAbi?4() -> QString +QtCore.QSysInfo.buildCpuArchitecture?4() -> QString +QtCore.QSysInfo.currentCpuArchitecture?4() -> QString +QtCore.QSysInfo.kernelType?4() -> QString +QtCore.QSysInfo.kernelVersion?4() -> QString +QtCore.QSysInfo.prettyProductName?4() -> QString +QtCore.QSysInfo.productType?4() -> QString +QtCore.QSysInfo.productVersion?4() -> QString +QtCore.QSysInfo.machineHostName?4() -> QString +QtNetwork.QOcspRevocationReason?10 +QtNetwork.QOcspRevocationReason.None_?10 +QtNetwork.QOcspRevocationReason.Unspecified?10 +QtNetwork.QOcspRevocationReason.KeyCompromise?10 +QtNetwork.QOcspRevocationReason.CACompromise?10 +QtNetwork.QOcspRevocationReason.AffiliationChanged?10 +QtNetwork.QOcspRevocationReason.Superseded?10 +QtNetwork.QOcspRevocationReason.CessationOfOperation?10 +QtNetwork.QOcspRevocationReason.CertificateHold?10 +QtNetwork.QOcspRevocationReason.RemoveFromCRL?10 +QtNetwork.QOcspCertificateStatus?10 +QtNetwork.QOcspCertificateStatus.Good?10 +QtNetwork.QOcspCertificateStatus.Revoked?10 +QtNetwork.QOcspCertificateStatus.Unknown?10 +QtNetwork.QNetworkCacheMetaData?1() +QtNetwork.QNetworkCacheMetaData.__init__?1(self) +QtNetwork.QNetworkCacheMetaData?1(QNetworkCacheMetaData) +QtNetwork.QNetworkCacheMetaData.__init__?1(self, QNetworkCacheMetaData) +QtNetwork.QNetworkCacheMetaData.isValid?4() -> bool +QtNetwork.QNetworkCacheMetaData.url?4() -> QUrl +QtNetwork.QNetworkCacheMetaData.setUrl?4(QUrl) +QtNetwork.QNetworkCacheMetaData.rawHeaders?4() -> unknown-type +QtNetwork.QNetworkCacheMetaData.setRawHeaders?4(unknown-type) +QtNetwork.QNetworkCacheMetaData.lastModified?4() -> QDateTime +QtNetwork.QNetworkCacheMetaData.setLastModified?4(QDateTime) +QtNetwork.QNetworkCacheMetaData.expirationDate?4() -> QDateTime +QtNetwork.QNetworkCacheMetaData.setExpirationDate?4(QDateTime) +QtNetwork.QNetworkCacheMetaData.saveToDisk?4() -> bool +QtNetwork.QNetworkCacheMetaData.setSaveToDisk?4(bool) +QtNetwork.QNetworkCacheMetaData.attributes?4() -> unknown-type +QtNetwork.QNetworkCacheMetaData.setAttributes?4(unknown-type) +QtNetwork.QNetworkCacheMetaData.swap?4(QNetworkCacheMetaData) +QtNetwork.QAbstractNetworkCache?1(QObject parent=None) +QtNetwork.QAbstractNetworkCache.__init__?1(self, QObject parent=None) +QtNetwork.QAbstractNetworkCache.metaData?4(QUrl) -> QNetworkCacheMetaData +QtNetwork.QAbstractNetworkCache.updateMetaData?4(QNetworkCacheMetaData) +QtNetwork.QAbstractNetworkCache.data?4(QUrl) -> QIODevice +QtNetwork.QAbstractNetworkCache.remove?4(QUrl) -> bool +QtNetwork.QAbstractNetworkCache.cacheSize?4() -> int +QtNetwork.QAbstractNetworkCache.prepare?4(QNetworkCacheMetaData) -> QIODevice +QtNetwork.QAbstractNetworkCache.insert?4(QIODevice) +QtNetwork.QAbstractNetworkCache.clear?4() +QtNetwork.QAbstractSocket.PauseMode?10 +QtNetwork.QAbstractSocket.PauseMode.PauseNever?10 +QtNetwork.QAbstractSocket.PauseMode.PauseOnSslErrors?10 +QtNetwork.QAbstractSocket.BindFlag?10 +QtNetwork.QAbstractSocket.BindFlag.DefaultForPlatform?10 +QtNetwork.QAbstractSocket.BindFlag.ShareAddress?10 +QtNetwork.QAbstractSocket.BindFlag.DontShareAddress?10 +QtNetwork.QAbstractSocket.BindFlag.ReuseAddressHint?10 +QtNetwork.QAbstractSocket.SocketOption?10 +QtNetwork.QAbstractSocket.SocketOption.LowDelayOption?10 +QtNetwork.QAbstractSocket.SocketOption.KeepAliveOption?10 +QtNetwork.QAbstractSocket.SocketOption.MulticastTtlOption?10 +QtNetwork.QAbstractSocket.SocketOption.MulticastLoopbackOption?10 +QtNetwork.QAbstractSocket.SocketOption.TypeOfServiceOption?10 +QtNetwork.QAbstractSocket.SocketOption.SendBufferSizeSocketOption?10 +QtNetwork.QAbstractSocket.SocketOption.ReceiveBufferSizeSocketOption?10 +QtNetwork.QAbstractSocket.SocketOption.PathMtuSocketOption?10 +QtNetwork.QAbstractSocket.SocketState?10 +QtNetwork.QAbstractSocket.SocketState.UnconnectedState?10 +QtNetwork.QAbstractSocket.SocketState.HostLookupState?10 +QtNetwork.QAbstractSocket.SocketState.ConnectingState?10 +QtNetwork.QAbstractSocket.SocketState.ConnectedState?10 +QtNetwork.QAbstractSocket.SocketState.BoundState?10 +QtNetwork.QAbstractSocket.SocketState.ListeningState?10 +QtNetwork.QAbstractSocket.SocketState.ClosingState?10 +QtNetwork.QAbstractSocket.SocketError?10 +QtNetwork.QAbstractSocket.SocketError.ConnectionRefusedError?10 +QtNetwork.QAbstractSocket.SocketError.RemoteHostClosedError?10 +QtNetwork.QAbstractSocket.SocketError.HostNotFoundError?10 +QtNetwork.QAbstractSocket.SocketError.SocketAccessError?10 +QtNetwork.QAbstractSocket.SocketError.SocketResourceError?10 +QtNetwork.QAbstractSocket.SocketError.SocketTimeoutError?10 +QtNetwork.QAbstractSocket.SocketError.DatagramTooLargeError?10 +QtNetwork.QAbstractSocket.SocketError.NetworkError?10 +QtNetwork.QAbstractSocket.SocketError.AddressInUseError?10 +QtNetwork.QAbstractSocket.SocketError.SocketAddressNotAvailableError?10 +QtNetwork.QAbstractSocket.SocketError.UnsupportedSocketOperationError?10 +QtNetwork.QAbstractSocket.SocketError.UnfinishedSocketOperationError?10 +QtNetwork.QAbstractSocket.SocketError.ProxyAuthenticationRequiredError?10 +QtNetwork.QAbstractSocket.SocketError.SslHandshakeFailedError?10 +QtNetwork.QAbstractSocket.SocketError.ProxyConnectionRefusedError?10 +QtNetwork.QAbstractSocket.SocketError.ProxyConnectionClosedError?10 +QtNetwork.QAbstractSocket.SocketError.ProxyConnectionTimeoutError?10 +QtNetwork.QAbstractSocket.SocketError.ProxyNotFoundError?10 +QtNetwork.QAbstractSocket.SocketError.ProxyProtocolError?10 +QtNetwork.QAbstractSocket.SocketError.OperationError?10 +QtNetwork.QAbstractSocket.SocketError.SslInternalError?10 +QtNetwork.QAbstractSocket.SocketError.SslInvalidUserDataError?10 +QtNetwork.QAbstractSocket.SocketError.TemporaryError?10 +QtNetwork.QAbstractSocket.SocketError.UnknownSocketError?10 +QtNetwork.QAbstractSocket.NetworkLayerProtocol?10 +QtNetwork.QAbstractSocket.NetworkLayerProtocol.IPv4Protocol?10 +QtNetwork.QAbstractSocket.NetworkLayerProtocol.IPv6Protocol?10 +QtNetwork.QAbstractSocket.NetworkLayerProtocol.AnyIPProtocol?10 +QtNetwork.QAbstractSocket.NetworkLayerProtocol.UnknownNetworkLayerProtocol?10 +QtNetwork.QAbstractSocket.SocketType?10 +QtNetwork.QAbstractSocket.SocketType.TcpSocket?10 +QtNetwork.QAbstractSocket.SocketType.UdpSocket?10 +QtNetwork.QAbstractSocket.SocketType.SctpSocket?10 +QtNetwork.QAbstractSocket.SocketType.UnknownSocketType?10 +QtNetwork.QAbstractSocket?1(QAbstractSocket.SocketType, QObject) +QtNetwork.QAbstractSocket.__init__?1(self, QAbstractSocket.SocketType, QObject) +QtNetwork.QAbstractSocket.connectToHost?4(QString, int, QIODevice.OpenMode mode=QIODevice.ReadWrite, QAbstractSocket.NetworkLayerProtocol protocol=QAbstractSocket.AnyIPProtocol) +QtNetwork.QAbstractSocket.connectToHost?4(QHostAddress, int, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtNetwork.QAbstractSocket.disconnectFromHost?4() +QtNetwork.QAbstractSocket.isValid?4() -> bool +QtNetwork.QAbstractSocket.bytesAvailable?4() -> int +QtNetwork.QAbstractSocket.bytesToWrite?4() -> int +QtNetwork.QAbstractSocket.canReadLine?4() -> bool +QtNetwork.QAbstractSocket.localPort?4() -> int +QtNetwork.QAbstractSocket.localAddress?4() -> QHostAddress +QtNetwork.QAbstractSocket.peerPort?4() -> int +QtNetwork.QAbstractSocket.peerAddress?4() -> QHostAddress +QtNetwork.QAbstractSocket.peerName?4() -> QString +QtNetwork.QAbstractSocket.readBufferSize?4() -> int +QtNetwork.QAbstractSocket.setReadBufferSize?4(int) +QtNetwork.QAbstractSocket.abort?4() +QtNetwork.QAbstractSocket.setSocketDescriptor?4(qintptr, QAbstractSocket.SocketState state=QAbstractSocket.ConnectedState, QIODevice.OpenMode mode=QIODevice.ReadWrite) -> bool +QtNetwork.QAbstractSocket.socketDescriptor?4() -> qintptr +QtNetwork.QAbstractSocket.socketType?4() -> QAbstractSocket.SocketType +QtNetwork.QAbstractSocket.state?4() -> QAbstractSocket.SocketState +QtNetwork.QAbstractSocket.error?4() -> QAbstractSocket.SocketError +QtNetwork.QAbstractSocket.close?4() +QtNetwork.QAbstractSocket.isSequential?4() -> bool +QtNetwork.QAbstractSocket.atEnd?4() -> bool +QtNetwork.QAbstractSocket.flush?4() -> bool +QtNetwork.QAbstractSocket.waitForConnected?4(int msecs=30000) -> bool +QtNetwork.QAbstractSocket.waitForReadyRead?4(int msecs=30000) -> bool +QtNetwork.QAbstractSocket.waitForBytesWritten?4(int msecs=30000) -> bool +QtNetwork.QAbstractSocket.waitForDisconnected?4(int msecs=30000) -> bool +QtNetwork.QAbstractSocket.setProxy?4(QNetworkProxy) +QtNetwork.QAbstractSocket.proxy?4() -> QNetworkProxy +QtNetwork.QAbstractSocket.hostFound?4() +QtNetwork.QAbstractSocket.connected?4() +QtNetwork.QAbstractSocket.disconnected?4() +QtNetwork.QAbstractSocket.stateChanged?4(QAbstractSocket.SocketState) +QtNetwork.QAbstractSocket.error?4(QAbstractSocket.SocketError) +QtNetwork.QAbstractSocket.errorOccurred?4(QAbstractSocket.SocketError) +QtNetwork.QAbstractSocket.proxyAuthenticationRequired?4(QNetworkProxy, QAuthenticator) +QtNetwork.QAbstractSocket.readData?4(int) -> Any +QtNetwork.QAbstractSocket.readLineData?4(int) -> Any +QtNetwork.QAbstractSocket.writeData?4(bytes) -> int +QtNetwork.QAbstractSocket.setSocketState?4(QAbstractSocket.SocketState) +QtNetwork.QAbstractSocket.setSocketError?4(QAbstractSocket.SocketError) +QtNetwork.QAbstractSocket.setLocalPort?4(int) +QtNetwork.QAbstractSocket.setLocalAddress?4(QHostAddress) +QtNetwork.QAbstractSocket.setPeerPort?4(int) +QtNetwork.QAbstractSocket.setPeerAddress?4(QHostAddress) +QtNetwork.QAbstractSocket.setPeerName?4(QString) +QtNetwork.QAbstractSocket.setSocketOption?4(QAbstractSocket.SocketOption, QVariant) +QtNetwork.QAbstractSocket.socketOption?4(QAbstractSocket.SocketOption) -> QVariant +QtNetwork.QAbstractSocket.resume?4() +QtNetwork.QAbstractSocket.pauseMode?4() -> QAbstractSocket.PauseModes +QtNetwork.QAbstractSocket.setPauseMode?4(QAbstractSocket.PauseModes) +QtNetwork.QAbstractSocket.bind?4(QHostAddress, int port=0, QAbstractSocket.BindMode mode=QAbstractSocket.DefaultForPlatform) -> bool +QtNetwork.QAbstractSocket.bind?4(int port=0, QAbstractSocket.BindMode mode=QAbstractSocket.DefaultForPlatform) -> bool +QtNetwork.QAbstractSocket.protocolTag?4() -> QString +QtNetwork.QAbstractSocket.setProtocolTag?4(QString) +QtNetwork.QAbstractSocket.BindMode?1() +QtNetwork.QAbstractSocket.BindMode.__init__?1(self) +QtNetwork.QAbstractSocket.BindMode?1(int) +QtNetwork.QAbstractSocket.BindMode.__init__?1(self, int) +QtNetwork.QAbstractSocket.BindMode?1(QAbstractSocket.BindMode) +QtNetwork.QAbstractSocket.BindMode.__init__?1(self, QAbstractSocket.BindMode) +QtNetwork.QAbstractSocket.PauseModes?1() +QtNetwork.QAbstractSocket.PauseModes.__init__?1(self) +QtNetwork.QAbstractSocket.PauseModes?1(int) +QtNetwork.QAbstractSocket.PauseModes.__init__?1(self, int) +QtNetwork.QAbstractSocket.PauseModes?1(QAbstractSocket.PauseModes) +QtNetwork.QAbstractSocket.PauseModes.__init__?1(self, QAbstractSocket.PauseModes) +QtNetwork.QAuthenticator?1() +QtNetwork.QAuthenticator.__init__?1(self) +QtNetwork.QAuthenticator?1(QAuthenticator) +QtNetwork.QAuthenticator.__init__?1(self, QAuthenticator) +QtNetwork.QAuthenticator.user?4() -> QString +QtNetwork.QAuthenticator.setUser?4(QString) +QtNetwork.QAuthenticator.password?4() -> QString +QtNetwork.QAuthenticator.setPassword?4(QString) +QtNetwork.QAuthenticator.realm?4() -> QString +QtNetwork.QAuthenticator.isNull?4() -> bool +QtNetwork.QAuthenticator.option?4(QString) -> QVariant +QtNetwork.QAuthenticator.options?4() -> unknown-type +QtNetwork.QAuthenticator.setOption?4(QString, QVariant) +QtNetwork.QDnsDomainNameRecord?1() +QtNetwork.QDnsDomainNameRecord.__init__?1(self) +QtNetwork.QDnsDomainNameRecord?1(QDnsDomainNameRecord) +QtNetwork.QDnsDomainNameRecord.__init__?1(self, QDnsDomainNameRecord) +QtNetwork.QDnsDomainNameRecord.swap?4(QDnsDomainNameRecord) +QtNetwork.QDnsDomainNameRecord.name?4() -> QString +QtNetwork.QDnsDomainNameRecord.timeToLive?4() -> int +QtNetwork.QDnsDomainNameRecord.value?4() -> QString +QtNetwork.QDnsHostAddressRecord?1() +QtNetwork.QDnsHostAddressRecord.__init__?1(self) +QtNetwork.QDnsHostAddressRecord?1(QDnsHostAddressRecord) +QtNetwork.QDnsHostAddressRecord.__init__?1(self, QDnsHostAddressRecord) +QtNetwork.QDnsHostAddressRecord.swap?4(QDnsHostAddressRecord) +QtNetwork.QDnsHostAddressRecord.name?4() -> QString +QtNetwork.QDnsHostAddressRecord.timeToLive?4() -> int +QtNetwork.QDnsHostAddressRecord.value?4() -> QHostAddress +QtNetwork.QDnsMailExchangeRecord?1() +QtNetwork.QDnsMailExchangeRecord.__init__?1(self) +QtNetwork.QDnsMailExchangeRecord?1(QDnsMailExchangeRecord) +QtNetwork.QDnsMailExchangeRecord.__init__?1(self, QDnsMailExchangeRecord) +QtNetwork.QDnsMailExchangeRecord.swap?4(QDnsMailExchangeRecord) +QtNetwork.QDnsMailExchangeRecord.exchange?4() -> QString +QtNetwork.QDnsMailExchangeRecord.name?4() -> QString +QtNetwork.QDnsMailExchangeRecord.preference?4() -> int +QtNetwork.QDnsMailExchangeRecord.timeToLive?4() -> int +QtNetwork.QDnsServiceRecord?1() +QtNetwork.QDnsServiceRecord.__init__?1(self) +QtNetwork.QDnsServiceRecord?1(QDnsServiceRecord) +QtNetwork.QDnsServiceRecord.__init__?1(self, QDnsServiceRecord) +QtNetwork.QDnsServiceRecord.swap?4(QDnsServiceRecord) +QtNetwork.QDnsServiceRecord.name?4() -> QString +QtNetwork.QDnsServiceRecord.port?4() -> int +QtNetwork.QDnsServiceRecord.priority?4() -> int +QtNetwork.QDnsServiceRecord.target?4() -> QString +QtNetwork.QDnsServiceRecord.timeToLive?4() -> int +QtNetwork.QDnsServiceRecord.weight?4() -> int +QtNetwork.QDnsTextRecord?1() +QtNetwork.QDnsTextRecord.__init__?1(self) +QtNetwork.QDnsTextRecord?1(QDnsTextRecord) +QtNetwork.QDnsTextRecord.__init__?1(self, QDnsTextRecord) +QtNetwork.QDnsTextRecord.swap?4(QDnsTextRecord) +QtNetwork.QDnsTextRecord.name?4() -> QString +QtNetwork.QDnsTextRecord.timeToLive?4() -> int +QtNetwork.QDnsTextRecord.values?4() -> unknown-type +QtNetwork.QDnsLookup.Type?10 +QtNetwork.QDnsLookup.Type.A?10 +QtNetwork.QDnsLookup.Type.AAAA?10 +QtNetwork.QDnsLookup.Type.ANY?10 +QtNetwork.QDnsLookup.Type.CNAME?10 +QtNetwork.QDnsLookup.Type.MX?10 +QtNetwork.QDnsLookup.Type.NS?10 +QtNetwork.QDnsLookup.Type.PTR?10 +QtNetwork.QDnsLookup.Type.SRV?10 +QtNetwork.QDnsLookup.Type.TXT?10 +QtNetwork.QDnsLookup.Error?10 +QtNetwork.QDnsLookup.Error.NoError?10 +QtNetwork.QDnsLookup.Error.ResolverError?10 +QtNetwork.QDnsLookup.Error.OperationCancelledError?10 +QtNetwork.QDnsLookup.Error.InvalidRequestError?10 +QtNetwork.QDnsLookup.Error.InvalidReplyError?10 +QtNetwork.QDnsLookup.Error.ServerFailureError?10 +QtNetwork.QDnsLookup.Error.ServerRefusedError?10 +QtNetwork.QDnsLookup.Error.NotFoundError?10 +QtNetwork.QDnsLookup?1(QObject parent=None) +QtNetwork.QDnsLookup.__init__?1(self, QObject parent=None) +QtNetwork.QDnsLookup?1(QDnsLookup.Type, QString, QObject parent=None) +QtNetwork.QDnsLookup.__init__?1(self, QDnsLookup.Type, QString, QObject parent=None) +QtNetwork.QDnsLookup?1(QDnsLookup.Type, QString, QHostAddress, QObject parent=None) +QtNetwork.QDnsLookup.__init__?1(self, QDnsLookup.Type, QString, QHostAddress, QObject parent=None) +QtNetwork.QDnsLookup.error?4() -> QDnsLookup.Error +QtNetwork.QDnsLookup.errorString?4() -> QString +QtNetwork.QDnsLookup.isFinished?4() -> bool +QtNetwork.QDnsLookup.name?4() -> QString +QtNetwork.QDnsLookup.setName?4(QString) +QtNetwork.QDnsLookup.type?4() -> QDnsLookup.Type +QtNetwork.QDnsLookup.setType?4(QDnsLookup.Type) +QtNetwork.QDnsLookup.canonicalNameRecords?4() -> unknown-type +QtNetwork.QDnsLookup.hostAddressRecords?4() -> unknown-type +QtNetwork.QDnsLookup.mailExchangeRecords?4() -> unknown-type +QtNetwork.QDnsLookup.nameServerRecords?4() -> unknown-type +QtNetwork.QDnsLookup.pointerRecords?4() -> unknown-type +QtNetwork.QDnsLookup.serviceRecords?4() -> unknown-type +QtNetwork.QDnsLookup.textRecords?4() -> unknown-type +QtNetwork.QDnsLookup.abort?4() +QtNetwork.QDnsLookup.lookup?4() +QtNetwork.QDnsLookup.finished?4() +QtNetwork.QDnsLookup.nameChanged?4(QString) +QtNetwork.QDnsLookup.typeChanged?4(QDnsLookup.Type) +QtNetwork.QDnsLookup.nameserver?4() -> QHostAddress +QtNetwork.QDnsLookup.setNameserver?4(QHostAddress) +QtNetwork.QDnsLookup.nameserverChanged?4(QHostAddress) +QtNetwork.QHostAddress.ConversionModeFlag?10 +QtNetwork.QHostAddress.ConversionModeFlag.ConvertV4MappedToIPv4?10 +QtNetwork.QHostAddress.ConversionModeFlag.ConvertV4CompatToIPv4?10 +QtNetwork.QHostAddress.ConversionModeFlag.ConvertUnspecifiedAddress?10 +QtNetwork.QHostAddress.ConversionModeFlag.ConvertLocalHost?10 +QtNetwork.QHostAddress.ConversionModeFlag.TolerantConversion?10 +QtNetwork.QHostAddress.ConversionModeFlag.StrictConversion?10 +QtNetwork.QHostAddress.SpecialAddress?10 +QtNetwork.QHostAddress.SpecialAddress.Null?10 +QtNetwork.QHostAddress.SpecialAddress.Broadcast?10 +QtNetwork.QHostAddress.SpecialAddress.LocalHost?10 +QtNetwork.QHostAddress.SpecialAddress.LocalHostIPv6?10 +QtNetwork.QHostAddress.SpecialAddress.AnyIPv4?10 +QtNetwork.QHostAddress.SpecialAddress.AnyIPv6?10 +QtNetwork.QHostAddress.SpecialAddress.Any?10 +QtNetwork.QHostAddress?1() +QtNetwork.QHostAddress.__init__?1(self) +QtNetwork.QHostAddress?1(QHostAddress.SpecialAddress) +QtNetwork.QHostAddress.__init__?1(self, QHostAddress.SpecialAddress) +QtNetwork.QHostAddress?1(int) +QtNetwork.QHostAddress.__init__?1(self, int) +QtNetwork.QHostAddress?1(QString) +QtNetwork.QHostAddress.__init__?1(self, QString) +QtNetwork.QHostAddress?1(Q_IPV6ADDR) +QtNetwork.QHostAddress.__init__?1(self, Q_IPV6ADDR) +QtNetwork.QHostAddress?1(QHostAddress) +QtNetwork.QHostAddress.__init__?1(self, QHostAddress) +QtNetwork.QHostAddress.setAddress?4(QHostAddress.SpecialAddress) +QtNetwork.QHostAddress.setAddress?4(int) +QtNetwork.QHostAddress.setAddress?4(QString) -> bool +QtNetwork.QHostAddress.setAddress?4(Q_IPV6ADDR) +QtNetwork.QHostAddress.protocol?4() -> QAbstractSocket.NetworkLayerProtocol +QtNetwork.QHostAddress.toIPv4Address?4() -> int +QtNetwork.QHostAddress.toIPv6Address?4() -> Q_IPV6ADDR +QtNetwork.QHostAddress.toString?4() -> QString +QtNetwork.QHostAddress.scopeId?4() -> QString +QtNetwork.QHostAddress.setScopeId?4(QString) +QtNetwork.QHostAddress.isNull?4() -> bool +QtNetwork.QHostAddress.clear?4() +QtNetwork.QHostAddress.isInSubnet?4(QHostAddress, int) -> bool +QtNetwork.QHostAddress.isInSubnet?4(unknown-type) -> bool +QtNetwork.QHostAddress.isLoopback?4() -> bool +QtNetwork.QHostAddress.parseSubnet?4(QString) -> unknown-type +QtNetwork.QHostAddress.swap?4(QHostAddress) +QtNetwork.QHostAddress.isMulticast?4() -> bool +QtNetwork.QHostAddress.isEqual?4(QHostAddress, QHostAddress.ConversionMode mode=QHostAddress.TolerantConversion) -> bool +QtNetwork.QHostAddress.isGlobal?4() -> bool +QtNetwork.QHostAddress.isLinkLocal?4() -> bool +QtNetwork.QHostAddress.isSiteLocal?4() -> bool +QtNetwork.QHostAddress.isUniqueLocalUnicast?4() -> bool +QtNetwork.QHostAddress.isBroadcast?4() -> bool +QtNetwork.QHostAddress.ConversionMode?1() +QtNetwork.QHostAddress.ConversionMode.__init__?1(self) +QtNetwork.QHostAddress.ConversionMode?1(int) +QtNetwork.QHostAddress.ConversionMode.__init__?1(self, int) +QtNetwork.QHostAddress.ConversionMode?1(QHostAddress.ConversionMode) +QtNetwork.QHostAddress.ConversionMode.__init__?1(self, QHostAddress.ConversionMode) +QtNetwork.QHostInfo.HostInfoError?10 +QtNetwork.QHostInfo.HostInfoError.NoError?10 +QtNetwork.QHostInfo.HostInfoError.HostNotFound?10 +QtNetwork.QHostInfo.HostInfoError.UnknownError?10 +QtNetwork.QHostInfo?1(int id=-1) +QtNetwork.QHostInfo.__init__?1(self, int id=-1) +QtNetwork.QHostInfo?1(QHostInfo) +QtNetwork.QHostInfo.__init__?1(self, QHostInfo) +QtNetwork.QHostInfo.hostName?4() -> QString +QtNetwork.QHostInfo.setHostName?4(QString) +QtNetwork.QHostInfo.addresses?4() -> unknown-type +QtNetwork.QHostInfo.setAddresses?4(unknown-type) +QtNetwork.QHostInfo.error?4() -> QHostInfo.HostInfoError +QtNetwork.QHostInfo.setError?4(QHostInfo.HostInfoError) +QtNetwork.QHostInfo.errorString?4() -> QString +QtNetwork.QHostInfo.setErrorString?4(QString) +QtNetwork.QHostInfo.setLookupId?4(int) +QtNetwork.QHostInfo.lookupId?4() -> int +QtNetwork.QHostInfo.lookupHost?4(QString, Any) -> int +QtNetwork.QHostInfo.abortHostLookup?4(int) +QtNetwork.QHostInfo.fromName?4(QString) -> QHostInfo +QtNetwork.QHostInfo.localHostName?4() -> QString +QtNetwork.QHostInfo.localDomainName?4() -> QString +QtNetwork.QHostInfo.swap?4(QHostInfo) +QtNetwork.QHstsPolicy.PolicyFlag?10 +QtNetwork.QHstsPolicy.PolicyFlag.IncludeSubDomains?10 +QtNetwork.QHstsPolicy?1() +QtNetwork.QHstsPolicy.__init__?1(self) +QtNetwork.QHstsPolicy?1(QDateTime, QHstsPolicy.PolicyFlags, QString, QUrl.ParsingMode mode=QUrl.DecodedMode) +QtNetwork.QHstsPolicy.__init__?1(self, QDateTime, QHstsPolicy.PolicyFlags, QString, QUrl.ParsingMode mode=QUrl.DecodedMode) +QtNetwork.QHstsPolicy?1(QHstsPolicy) +QtNetwork.QHstsPolicy.__init__?1(self, QHstsPolicy) +QtNetwork.QHstsPolicy.swap?4(QHstsPolicy) +QtNetwork.QHstsPolicy.setHost?4(QString, QUrl.ParsingMode mode=QUrl.DecodedMode) +QtNetwork.QHstsPolicy.host?4(QUrl.ComponentFormattingOptions options=QUrl.ComponentFormattingOption.FullyDecoded) -> QString +QtNetwork.QHstsPolicy.setExpiry?4(QDateTime) +QtNetwork.QHstsPolicy.expiry?4() -> QDateTime +QtNetwork.QHstsPolicy.setIncludesSubDomains?4(bool) +QtNetwork.QHstsPolicy.includesSubDomains?4() -> bool +QtNetwork.QHstsPolicy.isExpired?4() -> bool +QtNetwork.QHstsPolicy.PolicyFlags?1() +QtNetwork.QHstsPolicy.PolicyFlags.__init__?1(self) +QtNetwork.QHstsPolicy.PolicyFlags?1(int) +QtNetwork.QHstsPolicy.PolicyFlags.__init__?1(self, int) +QtNetwork.QHstsPolicy.PolicyFlags?1(QHstsPolicy.PolicyFlags) +QtNetwork.QHstsPolicy.PolicyFlags.__init__?1(self, QHstsPolicy.PolicyFlags) +QtNetwork.QHttp2Configuration?1() +QtNetwork.QHttp2Configuration.__init__?1(self) +QtNetwork.QHttp2Configuration?1(QHttp2Configuration) +QtNetwork.QHttp2Configuration.__init__?1(self, QHttp2Configuration) +QtNetwork.QHttp2Configuration.setServerPushEnabled?4(bool) +QtNetwork.QHttp2Configuration.serverPushEnabled?4() -> bool +QtNetwork.QHttp2Configuration.setHuffmanCompressionEnabled?4(bool) +QtNetwork.QHttp2Configuration.huffmanCompressionEnabled?4() -> bool +QtNetwork.QHttp2Configuration.setSessionReceiveWindowSize?4(int) -> bool +QtNetwork.QHttp2Configuration.sessionReceiveWindowSize?4() -> int +QtNetwork.QHttp2Configuration.setStreamReceiveWindowSize?4(int) -> bool +QtNetwork.QHttp2Configuration.streamReceiveWindowSize?4() -> int +QtNetwork.QHttp2Configuration.setMaxFrameSize?4(int) -> bool +QtNetwork.QHttp2Configuration.maxFrameSize?4() -> int +QtNetwork.QHttp2Configuration.swap?4(QHttp2Configuration) +QtNetwork.QHttpPart?1() +QtNetwork.QHttpPart.__init__?1(self) +QtNetwork.QHttpPart?1(QHttpPart) +QtNetwork.QHttpPart.__init__?1(self, QHttpPart) +QtNetwork.QHttpPart.setHeader?4(QNetworkRequest.KnownHeaders, QVariant) +QtNetwork.QHttpPart.setRawHeader?4(QByteArray, QByteArray) +QtNetwork.QHttpPart.setBody?4(QByteArray) +QtNetwork.QHttpPart.setBodyDevice?4(QIODevice) +QtNetwork.QHttpPart.swap?4(QHttpPart) +QtNetwork.QHttpMultiPart.ContentType?10 +QtNetwork.QHttpMultiPart.ContentType.MixedType?10 +QtNetwork.QHttpMultiPart.ContentType.RelatedType?10 +QtNetwork.QHttpMultiPart.ContentType.FormDataType?10 +QtNetwork.QHttpMultiPart.ContentType.AlternativeType?10 +QtNetwork.QHttpMultiPart?1(QObject parent=None) +QtNetwork.QHttpMultiPart.__init__?1(self, QObject parent=None) +QtNetwork.QHttpMultiPart?1(QHttpMultiPart.ContentType, QObject parent=None) +QtNetwork.QHttpMultiPart.__init__?1(self, QHttpMultiPart.ContentType, QObject parent=None) +QtNetwork.QHttpMultiPart.append?4(QHttpPart) +QtNetwork.QHttpMultiPart.setContentType?4(QHttpMultiPart.ContentType) +QtNetwork.QHttpMultiPart.boundary?4() -> QByteArray +QtNetwork.QHttpMultiPart.setBoundary?4(QByteArray) +QtNetwork.QLocalServer.SocketOption?10 +QtNetwork.QLocalServer.SocketOption.UserAccessOption?10 +QtNetwork.QLocalServer.SocketOption.GroupAccessOption?10 +QtNetwork.QLocalServer.SocketOption.OtherAccessOption?10 +QtNetwork.QLocalServer.SocketOption.WorldAccessOption?10 +QtNetwork.QLocalServer?1(QObject parent=None) +QtNetwork.QLocalServer.__init__?1(self, QObject parent=None) +QtNetwork.QLocalServer.close?4() +QtNetwork.QLocalServer.errorString?4() -> QString +QtNetwork.QLocalServer.hasPendingConnections?4() -> bool +QtNetwork.QLocalServer.isListening?4() -> bool +QtNetwork.QLocalServer.listen?4(QString) -> bool +QtNetwork.QLocalServer.listen?4(qintptr) -> bool +QtNetwork.QLocalServer.maxPendingConnections?4() -> int +QtNetwork.QLocalServer.nextPendingConnection?4() -> QLocalSocket +QtNetwork.QLocalServer.serverName?4() -> QString +QtNetwork.QLocalServer.fullServerName?4() -> QString +QtNetwork.QLocalServer.serverError?4() -> QAbstractSocket.SocketError +QtNetwork.QLocalServer.setMaxPendingConnections?4(int) +QtNetwork.QLocalServer.waitForNewConnection?4(int msecs=0) -> (bool, bool) +QtNetwork.QLocalServer.removeServer?4(QString) -> bool +QtNetwork.QLocalServer.newConnection?4() +QtNetwork.QLocalServer.incomingConnection?4(quintptr) +QtNetwork.QLocalServer.setSocketOptions?4(QLocalServer.SocketOptions) +QtNetwork.QLocalServer.socketOptions?4() -> QLocalServer.SocketOptions +QtNetwork.QLocalServer.socketDescriptor?4() -> qintptr +QtNetwork.QLocalServer.SocketOptions?1() +QtNetwork.QLocalServer.SocketOptions.__init__?1(self) +QtNetwork.QLocalServer.SocketOptions?1(int) +QtNetwork.QLocalServer.SocketOptions.__init__?1(self, int) +QtNetwork.QLocalServer.SocketOptions?1(QLocalServer.SocketOptions) +QtNetwork.QLocalServer.SocketOptions.__init__?1(self, QLocalServer.SocketOptions) +QtNetwork.QLocalSocket.LocalSocketState?10 +QtNetwork.QLocalSocket.LocalSocketState.UnconnectedState?10 +QtNetwork.QLocalSocket.LocalSocketState.ConnectingState?10 +QtNetwork.QLocalSocket.LocalSocketState.ConnectedState?10 +QtNetwork.QLocalSocket.LocalSocketState.ClosingState?10 +QtNetwork.QLocalSocket.LocalSocketError?10 +QtNetwork.QLocalSocket.LocalSocketError.ConnectionRefusedError?10 +QtNetwork.QLocalSocket.LocalSocketError.PeerClosedError?10 +QtNetwork.QLocalSocket.LocalSocketError.ServerNotFoundError?10 +QtNetwork.QLocalSocket.LocalSocketError.SocketAccessError?10 +QtNetwork.QLocalSocket.LocalSocketError.SocketResourceError?10 +QtNetwork.QLocalSocket.LocalSocketError.SocketTimeoutError?10 +QtNetwork.QLocalSocket.LocalSocketError.DatagramTooLargeError?10 +QtNetwork.QLocalSocket.LocalSocketError.ConnectionError?10 +QtNetwork.QLocalSocket.LocalSocketError.UnsupportedSocketOperationError?10 +QtNetwork.QLocalSocket.LocalSocketError.OperationError?10 +QtNetwork.QLocalSocket.LocalSocketError.UnknownSocketError?10 +QtNetwork.QLocalSocket?1(QObject parent=None) +QtNetwork.QLocalSocket.__init__?1(self, QObject parent=None) +QtNetwork.QLocalSocket.connectToServer?4(QString, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtNetwork.QLocalSocket.connectToServer?4(QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtNetwork.QLocalSocket.disconnectFromServer?4() +QtNetwork.QLocalSocket.open?4(QIODevice.OpenMode mode=QIODevice.ReadWrite) -> bool +QtNetwork.QLocalSocket.serverName?4() -> QString +QtNetwork.QLocalSocket.setServerName?4(QString) +QtNetwork.QLocalSocket.fullServerName?4() -> QString +QtNetwork.QLocalSocket.abort?4() +QtNetwork.QLocalSocket.isSequential?4() -> bool +QtNetwork.QLocalSocket.bytesAvailable?4() -> int +QtNetwork.QLocalSocket.bytesToWrite?4() -> int +QtNetwork.QLocalSocket.canReadLine?4() -> bool +QtNetwork.QLocalSocket.close?4() +QtNetwork.QLocalSocket.error?4() -> QLocalSocket.LocalSocketError +QtNetwork.QLocalSocket.flush?4() -> bool +QtNetwork.QLocalSocket.isValid?4() -> bool +QtNetwork.QLocalSocket.readBufferSize?4() -> int +QtNetwork.QLocalSocket.setReadBufferSize?4(int) +QtNetwork.QLocalSocket.setSocketDescriptor?4(qintptr, QLocalSocket.LocalSocketState state=QLocalSocket.ConnectedState, QIODevice.OpenMode mode=QIODevice.ReadWrite) -> bool +QtNetwork.QLocalSocket.socketDescriptor?4() -> qintptr +QtNetwork.QLocalSocket.state?4() -> QLocalSocket.LocalSocketState +QtNetwork.QLocalSocket.waitForBytesWritten?4(int msecs=30000) -> bool +QtNetwork.QLocalSocket.waitForConnected?4(int msecs=30000) -> bool +QtNetwork.QLocalSocket.waitForDisconnected?4(int msecs=30000) -> bool +QtNetwork.QLocalSocket.waitForReadyRead?4(int msecs=30000) -> bool +QtNetwork.QLocalSocket.connected?4() +QtNetwork.QLocalSocket.disconnected?4() +QtNetwork.QLocalSocket.error?4(QLocalSocket.LocalSocketError) +QtNetwork.QLocalSocket.errorOccurred?4(QLocalSocket.LocalSocketError) +QtNetwork.QLocalSocket.stateChanged?4(QLocalSocket.LocalSocketState) +QtNetwork.QLocalSocket.readData?4(int) -> Any +QtNetwork.QLocalSocket.writeData?4(bytes) -> int +QtNetwork.QNetworkAccessManager.NetworkAccessibility?10 +QtNetwork.QNetworkAccessManager.NetworkAccessibility.UnknownAccessibility?10 +QtNetwork.QNetworkAccessManager.NetworkAccessibility.NotAccessible?10 +QtNetwork.QNetworkAccessManager.NetworkAccessibility.Accessible?10 +QtNetwork.QNetworkAccessManager.Operation?10 +QtNetwork.QNetworkAccessManager.Operation.HeadOperation?10 +QtNetwork.QNetworkAccessManager.Operation.GetOperation?10 +QtNetwork.QNetworkAccessManager.Operation.PutOperation?10 +QtNetwork.QNetworkAccessManager.Operation.PostOperation?10 +QtNetwork.QNetworkAccessManager.Operation.DeleteOperation?10 +QtNetwork.QNetworkAccessManager.Operation.CustomOperation?10 +QtNetwork.QNetworkAccessManager?1(QObject parent=None) +QtNetwork.QNetworkAccessManager.__init__?1(self, QObject parent=None) +QtNetwork.QNetworkAccessManager.proxy?4() -> QNetworkProxy +QtNetwork.QNetworkAccessManager.setProxy?4(QNetworkProxy) +QtNetwork.QNetworkAccessManager.cookieJar?4() -> QNetworkCookieJar +QtNetwork.QNetworkAccessManager.setCookieJar?4(QNetworkCookieJar) +QtNetwork.QNetworkAccessManager.head?4(QNetworkRequest) -> QNetworkReply +QtNetwork.QNetworkAccessManager.get?4(QNetworkRequest) -> QNetworkReply +QtNetwork.QNetworkAccessManager.post?4(QNetworkRequest, QIODevice) -> QNetworkReply +QtNetwork.QNetworkAccessManager.post?4(QNetworkRequest, QByteArray) -> QNetworkReply +QtNetwork.QNetworkAccessManager.post?4(QNetworkRequest, QHttpMultiPart) -> QNetworkReply +QtNetwork.QNetworkAccessManager.put?4(QNetworkRequest, QIODevice) -> QNetworkReply +QtNetwork.QNetworkAccessManager.put?4(QNetworkRequest, QByteArray) -> QNetworkReply +QtNetwork.QNetworkAccessManager.put?4(QNetworkRequest, QHttpMultiPart) -> QNetworkReply +QtNetwork.QNetworkAccessManager.proxyAuthenticationRequired?4(QNetworkProxy, QAuthenticator) +QtNetwork.QNetworkAccessManager.authenticationRequired?4(QNetworkReply, QAuthenticator) +QtNetwork.QNetworkAccessManager.finished?4(QNetworkReply) +QtNetwork.QNetworkAccessManager.encrypted?4(QNetworkReply) +QtNetwork.QNetworkAccessManager.sslErrors?4(QNetworkReply, unknown-type) +QtNetwork.QNetworkAccessManager.networkAccessibleChanged?4(QNetworkAccessManager.NetworkAccessibility) +QtNetwork.QNetworkAccessManager.preSharedKeyAuthenticationRequired?4(QNetworkReply, QSslPreSharedKeyAuthenticator) +QtNetwork.QNetworkAccessManager.createRequest?4(QNetworkAccessManager.Operation, QNetworkRequest, QIODevice device=None) -> QNetworkReply +QtNetwork.QNetworkAccessManager.proxyFactory?4() -> QNetworkProxyFactory +QtNetwork.QNetworkAccessManager.setProxyFactory?4(QNetworkProxyFactory) +QtNetwork.QNetworkAccessManager.cache?4() -> QAbstractNetworkCache +QtNetwork.QNetworkAccessManager.setCache?4(QAbstractNetworkCache) +QtNetwork.QNetworkAccessManager.deleteResource?4(QNetworkRequest) -> QNetworkReply +QtNetwork.QNetworkAccessManager.sendCustomRequest?4(QNetworkRequest, QByteArray, QIODevice data=None) -> QNetworkReply +QtNetwork.QNetworkAccessManager.sendCustomRequest?4(QNetworkRequest, QByteArray, QByteArray) -> QNetworkReply +QtNetwork.QNetworkAccessManager.sendCustomRequest?4(QNetworkRequest, QByteArray, QHttpMultiPart) -> QNetworkReply +QtNetwork.QNetworkAccessManager.setConfiguration?4(QNetworkConfiguration) +QtNetwork.QNetworkAccessManager.configuration?4() -> QNetworkConfiguration +QtNetwork.QNetworkAccessManager.activeConfiguration?4() -> QNetworkConfiguration +QtNetwork.QNetworkAccessManager.setNetworkAccessible?4(QNetworkAccessManager.NetworkAccessibility) +QtNetwork.QNetworkAccessManager.networkAccessible?4() -> QNetworkAccessManager.NetworkAccessibility +QtNetwork.QNetworkAccessManager.clearAccessCache?4() +QtNetwork.QNetworkAccessManager.supportedSchemes?4() -> QStringList +QtNetwork.QNetworkAccessManager.connectToHostEncrypted?4(QString, int port=443, QSslConfiguration sslConfiguration=QSslConfiguration.defaultConfiguration()) +QtNetwork.QNetworkAccessManager.connectToHostEncrypted?4(QString, int, QSslConfiguration, QString) +QtNetwork.QNetworkAccessManager.connectToHost?4(QString, int port=80) +QtNetwork.QNetworkAccessManager.supportedSchemesImplementation?4() -> QStringList +QtNetwork.QNetworkAccessManager.clearConnectionCache?4() +QtNetwork.QNetworkAccessManager.setStrictTransportSecurityEnabled?4(bool) +QtNetwork.QNetworkAccessManager.isStrictTransportSecurityEnabled?4() -> bool +QtNetwork.QNetworkAccessManager.addStrictTransportSecurityHosts?4(unknown-type) +QtNetwork.QNetworkAccessManager.strictTransportSecurityHosts?4() -> unknown-type +QtNetwork.QNetworkAccessManager.setRedirectPolicy?4(QNetworkRequest.RedirectPolicy) +QtNetwork.QNetworkAccessManager.redirectPolicy?4() -> QNetworkRequest.RedirectPolicy +QtNetwork.QNetworkAccessManager.enableStrictTransportSecurityStore?4(bool, QString storeDir='') +QtNetwork.QNetworkAccessManager.isStrictTransportSecurityStoreEnabled?4() -> bool +QtNetwork.QNetworkAccessManager.autoDeleteReplies?4() -> bool +QtNetwork.QNetworkAccessManager.setAutoDeleteReplies?4(bool) +QtNetwork.QNetworkAccessManager.transferTimeout?4() -> int +QtNetwork.QNetworkAccessManager.setTransferTimeout?4(int timeout=QNetworkRequest.TransferTimeoutConstant.DefaultTransferTimeoutConstant) +QtNetwork.QNetworkConfigurationManager.Capability?10 +QtNetwork.QNetworkConfigurationManager.Capability.CanStartAndStopInterfaces?10 +QtNetwork.QNetworkConfigurationManager.Capability.DirectConnectionRouting?10 +QtNetwork.QNetworkConfigurationManager.Capability.SystemSessionSupport?10 +QtNetwork.QNetworkConfigurationManager.Capability.ApplicationLevelRoaming?10 +QtNetwork.QNetworkConfigurationManager.Capability.ForcedRoaming?10 +QtNetwork.QNetworkConfigurationManager.Capability.DataStatistics?10 +QtNetwork.QNetworkConfigurationManager.Capability.NetworkSessionRequired?10 +QtNetwork.QNetworkConfigurationManager?1(QObject parent=None) +QtNetwork.QNetworkConfigurationManager.__init__?1(self, QObject parent=None) +QtNetwork.QNetworkConfigurationManager.capabilities?4() -> QNetworkConfigurationManager.Capabilities +QtNetwork.QNetworkConfigurationManager.defaultConfiguration?4() -> QNetworkConfiguration +QtNetwork.QNetworkConfigurationManager.allConfigurations?4(QNetworkConfiguration.StateFlags flags=QNetworkConfiguration.StateFlags()) -> unknown-type +QtNetwork.QNetworkConfigurationManager.configurationFromIdentifier?4(QString) -> QNetworkConfiguration +QtNetwork.QNetworkConfigurationManager.updateConfigurations?4() +QtNetwork.QNetworkConfigurationManager.isOnline?4() -> bool +QtNetwork.QNetworkConfigurationManager.configurationAdded?4(QNetworkConfiguration) +QtNetwork.QNetworkConfigurationManager.configurationRemoved?4(QNetworkConfiguration) +QtNetwork.QNetworkConfigurationManager.configurationChanged?4(QNetworkConfiguration) +QtNetwork.QNetworkConfigurationManager.onlineStateChanged?4(bool) +QtNetwork.QNetworkConfigurationManager.updateCompleted?4() +QtNetwork.QNetworkConfigurationManager.Capabilities?1() +QtNetwork.QNetworkConfigurationManager.Capabilities.__init__?1(self) +QtNetwork.QNetworkConfigurationManager.Capabilities?1(int) +QtNetwork.QNetworkConfigurationManager.Capabilities.__init__?1(self, int) +QtNetwork.QNetworkConfigurationManager.Capabilities?1(QNetworkConfigurationManager.Capabilities) +QtNetwork.QNetworkConfigurationManager.Capabilities.__init__?1(self, QNetworkConfigurationManager.Capabilities) +QtNetwork.QNetworkConfiguration.BearerType?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerUnknown?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerEthernet?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerWLAN?10 +QtNetwork.QNetworkConfiguration.BearerType.Bearer2G?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerCDMA2000?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerWCDMA?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerHSPA?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerBluetooth?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerWiMAX?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerEVDO?10 +QtNetwork.QNetworkConfiguration.BearerType.BearerLTE?10 +QtNetwork.QNetworkConfiguration.BearerType.Bearer3G?10 +QtNetwork.QNetworkConfiguration.BearerType.Bearer4G?10 +QtNetwork.QNetworkConfiguration.StateFlag?10 +QtNetwork.QNetworkConfiguration.StateFlag.Undefined?10 +QtNetwork.QNetworkConfiguration.StateFlag.Defined?10 +QtNetwork.QNetworkConfiguration.StateFlag.Discovered?10 +QtNetwork.QNetworkConfiguration.StateFlag.Active?10 +QtNetwork.QNetworkConfiguration.Purpose?10 +QtNetwork.QNetworkConfiguration.Purpose.UnknownPurpose?10 +QtNetwork.QNetworkConfiguration.Purpose.PublicPurpose?10 +QtNetwork.QNetworkConfiguration.Purpose.PrivatePurpose?10 +QtNetwork.QNetworkConfiguration.Purpose.ServiceSpecificPurpose?10 +QtNetwork.QNetworkConfiguration.Type?10 +QtNetwork.QNetworkConfiguration.Type.InternetAccessPoint?10 +QtNetwork.QNetworkConfiguration.Type.ServiceNetwork?10 +QtNetwork.QNetworkConfiguration.Type.UserChoice?10 +QtNetwork.QNetworkConfiguration.Type.Invalid?10 +QtNetwork.QNetworkConfiguration?1() +QtNetwork.QNetworkConfiguration.__init__?1(self) +QtNetwork.QNetworkConfiguration?1(QNetworkConfiguration) +QtNetwork.QNetworkConfiguration.__init__?1(self, QNetworkConfiguration) +QtNetwork.QNetworkConfiguration.state?4() -> QNetworkConfiguration.StateFlags +QtNetwork.QNetworkConfiguration.type?4() -> QNetworkConfiguration.Type +QtNetwork.QNetworkConfiguration.purpose?4() -> QNetworkConfiguration.Purpose +QtNetwork.QNetworkConfiguration.bearerType?4() -> QNetworkConfiguration.BearerType +QtNetwork.QNetworkConfiguration.bearerTypeName?4() -> QString +QtNetwork.QNetworkConfiguration.bearerTypeFamily?4() -> QNetworkConfiguration.BearerType +QtNetwork.QNetworkConfiguration.identifier?4() -> QString +QtNetwork.QNetworkConfiguration.isRoamingAvailable?4() -> bool +QtNetwork.QNetworkConfiguration.children?4() -> unknown-type +QtNetwork.QNetworkConfiguration.name?4() -> QString +QtNetwork.QNetworkConfiguration.isValid?4() -> bool +QtNetwork.QNetworkConfiguration.swap?4(QNetworkConfiguration) +QtNetwork.QNetworkConfiguration.connectTimeout?4() -> int +QtNetwork.QNetworkConfiguration.setConnectTimeout?4(int) -> bool +QtNetwork.QNetworkConfiguration.StateFlags?1() +QtNetwork.QNetworkConfiguration.StateFlags.__init__?1(self) +QtNetwork.QNetworkConfiguration.StateFlags?1(int) +QtNetwork.QNetworkConfiguration.StateFlags.__init__?1(self, int) +QtNetwork.QNetworkConfiguration.StateFlags?1(QNetworkConfiguration.StateFlags) +QtNetwork.QNetworkConfiguration.StateFlags.__init__?1(self, QNetworkConfiguration.StateFlags) +QtNetwork.QNetworkCookie.RawForm?10 +QtNetwork.QNetworkCookie.RawForm.NameAndValueOnly?10 +QtNetwork.QNetworkCookie.RawForm.Full?10 +QtNetwork.QNetworkCookie?1(QByteArray name=QByteArray(), QByteArray value=QByteArray()) +QtNetwork.QNetworkCookie.__init__?1(self, QByteArray name=QByteArray(), QByteArray value=QByteArray()) +QtNetwork.QNetworkCookie?1(QNetworkCookie) +QtNetwork.QNetworkCookie.__init__?1(self, QNetworkCookie) +QtNetwork.QNetworkCookie.isSecure?4() -> bool +QtNetwork.QNetworkCookie.setSecure?4(bool) +QtNetwork.QNetworkCookie.isSessionCookie?4() -> bool +QtNetwork.QNetworkCookie.expirationDate?4() -> QDateTime +QtNetwork.QNetworkCookie.setExpirationDate?4(QDateTime) +QtNetwork.QNetworkCookie.domain?4() -> QString +QtNetwork.QNetworkCookie.setDomain?4(QString) +QtNetwork.QNetworkCookie.path?4() -> QString +QtNetwork.QNetworkCookie.setPath?4(QString) +QtNetwork.QNetworkCookie.name?4() -> QByteArray +QtNetwork.QNetworkCookie.setName?4(QByteArray) +QtNetwork.QNetworkCookie.value?4() -> QByteArray +QtNetwork.QNetworkCookie.setValue?4(QByteArray) +QtNetwork.QNetworkCookie.toRawForm?4(QNetworkCookie.RawForm form=QNetworkCookie.Full) -> QByteArray +QtNetwork.QNetworkCookie.parseCookies?4(QByteArray) -> unknown-type +QtNetwork.QNetworkCookie.isHttpOnly?4() -> bool +QtNetwork.QNetworkCookie.setHttpOnly?4(bool) +QtNetwork.QNetworkCookie.swap?4(QNetworkCookie) +QtNetwork.QNetworkCookie.hasSameIdentifier?4(QNetworkCookie) -> bool +QtNetwork.QNetworkCookie.normalize?4(QUrl) +QtNetwork.QNetworkCookieJar?1(QObject parent=None) +QtNetwork.QNetworkCookieJar.__init__?1(self, QObject parent=None) +QtNetwork.QNetworkCookieJar.cookiesForUrl?4(QUrl) -> unknown-type +QtNetwork.QNetworkCookieJar.setCookiesFromUrl?4(unknown-type, QUrl) -> bool +QtNetwork.QNetworkCookieJar.insertCookie?4(QNetworkCookie) -> bool +QtNetwork.QNetworkCookieJar.updateCookie?4(QNetworkCookie) -> bool +QtNetwork.QNetworkCookieJar.deleteCookie?4(QNetworkCookie) -> bool +QtNetwork.QNetworkCookieJar.setAllCookies?4(unknown-type) +QtNetwork.QNetworkCookieJar.allCookies?4() -> unknown-type +QtNetwork.QNetworkCookieJar.validateCookie?4(QNetworkCookie, QUrl) -> bool +QtNetwork.QNetworkDatagram?1() +QtNetwork.QNetworkDatagram.__init__?1(self) +QtNetwork.QNetworkDatagram?1(QByteArray, QHostAddress destinationAddress=QHostAddress(), int port=0) +QtNetwork.QNetworkDatagram.__init__?1(self, QByteArray, QHostAddress destinationAddress=QHostAddress(), int port=0) +QtNetwork.QNetworkDatagram?1(QNetworkDatagram) +QtNetwork.QNetworkDatagram.__init__?1(self, QNetworkDatagram) +QtNetwork.QNetworkDatagram.swap?4(QNetworkDatagram) +QtNetwork.QNetworkDatagram.clear?4() +QtNetwork.QNetworkDatagram.isValid?4() -> bool +QtNetwork.QNetworkDatagram.isNull?4() -> bool +QtNetwork.QNetworkDatagram.interfaceIndex?4() -> int +QtNetwork.QNetworkDatagram.setInterfaceIndex?4(int) +QtNetwork.QNetworkDatagram.senderAddress?4() -> QHostAddress +QtNetwork.QNetworkDatagram.destinationAddress?4() -> QHostAddress +QtNetwork.QNetworkDatagram.senderPort?4() -> int +QtNetwork.QNetworkDatagram.destinationPort?4() -> int +QtNetwork.QNetworkDatagram.setSender?4(QHostAddress, int port=0) +QtNetwork.QNetworkDatagram.setDestination?4(QHostAddress, int) +QtNetwork.QNetworkDatagram.hopLimit?4() -> int +QtNetwork.QNetworkDatagram.setHopLimit?4(int) +QtNetwork.QNetworkDatagram.data?4() -> QByteArray +QtNetwork.QNetworkDatagram.setData?4(QByteArray) +QtNetwork.QNetworkDatagram.makeReply?4(QByteArray) -> QNetworkDatagram +QtNetwork.QNetworkDiskCache?1(QObject parent=None) +QtNetwork.QNetworkDiskCache.__init__?1(self, QObject parent=None) +QtNetwork.QNetworkDiskCache.cacheDirectory?4() -> QString +QtNetwork.QNetworkDiskCache.setCacheDirectory?4(QString) +QtNetwork.QNetworkDiskCache.maximumCacheSize?4() -> int +QtNetwork.QNetworkDiskCache.setMaximumCacheSize?4(int) +QtNetwork.QNetworkDiskCache.cacheSize?4() -> int +QtNetwork.QNetworkDiskCache.metaData?4(QUrl) -> QNetworkCacheMetaData +QtNetwork.QNetworkDiskCache.updateMetaData?4(QNetworkCacheMetaData) +QtNetwork.QNetworkDiskCache.data?4(QUrl) -> QIODevice +QtNetwork.QNetworkDiskCache.remove?4(QUrl) -> bool +QtNetwork.QNetworkDiskCache.prepare?4(QNetworkCacheMetaData) -> QIODevice +QtNetwork.QNetworkDiskCache.insert?4(QIODevice) +QtNetwork.QNetworkDiskCache.fileMetaData?4(QString) -> QNetworkCacheMetaData +QtNetwork.QNetworkDiskCache.clear?4() +QtNetwork.QNetworkDiskCache.expire?4() -> int +QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus?10 +QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus.DnsEligibilityUnknown?10 +QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus.DnsIneligible?10 +QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus.DnsEligible?10 +QtNetwork.QNetworkAddressEntry?1() +QtNetwork.QNetworkAddressEntry.__init__?1(self) +QtNetwork.QNetworkAddressEntry?1(QNetworkAddressEntry) +QtNetwork.QNetworkAddressEntry.__init__?1(self, QNetworkAddressEntry) +QtNetwork.QNetworkAddressEntry.ip?4() -> QHostAddress +QtNetwork.QNetworkAddressEntry.setIp?4(QHostAddress) +QtNetwork.QNetworkAddressEntry.netmask?4() -> QHostAddress +QtNetwork.QNetworkAddressEntry.setNetmask?4(QHostAddress) +QtNetwork.QNetworkAddressEntry.broadcast?4() -> QHostAddress +QtNetwork.QNetworkAddressEntry.setBroadcast?4(QHostAddress) +QtNetwork.QNetworkAddressEntry.prefixLength?4() -> int +QtNetwork.QNetworkAddressEntry.setPrefixLength?4(int) +QtNetwork.QNetworkAddressEntry.swap?4(QNetworkAddressEntry) +QtNetwork.QNetworkAddressEntry.dnsEligibility?4() -> QNetworkAddressEntry.DnsEligibilityStatus +QtNetwork.QNetworkAddressEntry.setDnsEligibility?4(QNetworkAddressEntry.DnsEligibilityStatus) +QtNetwork.QNetworkAddressEntry.isLifetimeKnown?4() -> bool +QtNetwork.QNetworkAddressEntry.preferredLifetime?4() -> QDeadlineTimer +QtNetwork.QNetworkAddressEntry.validityLifetime?4() -> QDeadlineTimer +QtNetwork.QNetworkAddressEntry.setAddressLifetime?4(QDeadlineTimer, QDeadlineTimer) +QtNetwork.QNetworkAddressEntry.clearAddressLifetime?4() +QtNetwork.QNetworkAddressEntry.isPermanent?4() -> bool +QtNetwork.QNetworkAddressEntry.isTemporary?4() -> bool +QtNetwork.QNetworkInterface.InterfaceType?10 +QtNetwork.QNetworkInterface.InterfaceType.Unknown?10 +QtNetwork.QNetworkInterface.InterfaceType.Loopback?10 +QtNetwork.QNetworkInterface.InterfaceType.Virtual?10 +QtNetwork.QNetworkInterface.InterfaceType.Ethernet?10 +QtNetwork.QNetworkInterface.InterfaceType.Slip?10 +QtNetwork.QNetworkInterface.InterfaceType.CanBus?10 +QtNetwork.QNetworkInterface.InterfaceType.Ppp?10 +QtNetwork.QNetworkInterface.InterfaceType.Fddi?10 +QtNetwork.QNetworkInterface.InterfaceType.Wifi?10 +QtNetwork.QNetworkInterface.InterfaceType.Ieee80211?10 +QtNetwork.QNetworkInterface.InterfaceType.Phonet?10 +QtNetwork.QNetworkInterface.InterfaceType.Ieee802154?10 +QtNetwork.QNetworkInterface.InterfaceType.SixLoWPAN?10 +QtNetwork.QNetworkInterface.InterfaceType.Ieee80216?10 +QtNetwork.QNetworkInterface.InterfaceType.Ieee1394?10 +QtNetwork.QNetworkInterface.InterfaceFlag?10 +QtNetwork.QNetworkInterface.InterfaceFlag.IsUp?10 +QtNetwork.QNetworkInterface.InterfaceFlag.IsRunning?10 +QtNetwork.QNetworkInterface.InterfaceFlag.CanBroadcast?10 +QtNetwork.QNetworkInterface.InterfaceFlag.IsLoopBack?10 +QtNetwork.QNetworkInterface.InterfaceFlag.IsPointToPoint?10 +QtNetwork.QNetworkInterface.InterfaceFlag.CanMulticast?10 +QtNetwork.QNetworkInterface?1() +QtNetwork.QNetworkInterface.__init__?1(self) +QtNetwork.QNetworkInterface?1(QNetworkInterface) +QtNetwork.QNetworkInterface.__init__?1(self, QNetworkInterface) +QtNetwork.QNetworkInterface.isValid?4() -> bool +QtNetwork.QNetworkInterface.name?4() -> QString +QtNetwork.QNetworkInterface.flags?4() -> QNetworkInterface.InterfaceFlags +QtNetwork.QNetworkInterface.hardwareAddress?4() -> QString +QtNetwork.QNetworkInterface.addressEntries?4() -> unknown-type +QtNetwork.QNetworkInterface.interfaceFromName?4(QString) -> QNetworkInterface +QtNetwork.QNetworkInterface.interfaceFromIndex?4(int) -> QNetworkInterface +QtNetwork.QNetworkInterface.allInterfaces?4() -> unknown-type +QtNetwork.QNetworkInterface.allAddresses?4() -> unknown-type +QtNetwork.QNetworkInterface.index?4() -> int +QtNetwork.QNetworkInterface.humanReadableName?4() -> QString +QtNetwork.QNetworkInterface.swap?4(QNetworkInterface) +QtNetwork.QNetworkInterface.interfaceIndexFromName?4(QString) -> int +QtNetwork.QNetworkInterface.interfaceNameFromIndex?4(int) -> QString +QtNetwork.QNetworkInterface.type?4() -> QNetworkInterface.InterfaceType +QtNetwork.QNetworkInterface.maximumTransmissionUnit?4() -> int +QtNetwork.QNetworkInterface.InterfaceFlags?1() +QtNetwork.QNetworkInterface.InterfaceFlags.__init__?1(self) +QtNetwork.QNetworkInterface.InterfaceFlags?1(int) +QtNetwork.QNetworkInterface.InterfaceFlags.__init__?1(self, int) +QtNetwork.QNetworkInterface.InterfaceFlags?1(QNetworkInterface.InterfaceFlags) +QtNetwork.QNetworkInterface.InterfaceFlags.__init__?1(self, QNetworkInterface.InterfaceFlags) +QtNetwork.QNetworkProxy.Capability?10 +QtNetwork.QNetworkProxy.Capability.TunnelingCapability?10 +QtNetwork.QNetworkProxy.Capability.ListeningCapability?10 +QtNetwork.QNetworkProxy.Capability.UdpTunnelingCapability?10 +QtNetwork.QNetworkProxy.Capability.CachingCapability?10 +QtNetwork.QNetworkProxy.Capability.HostNameLookupCapability?10 +QtNetwork.QNetworkProxy.Capability.SctpTunnelingCapability?10 +QtNetwork.QNetworkProxy.Capability.SctpListeningCapability?10 +QtNetwork.QNetworkProxy.ProxyType?10 +QtNetwork.QNetworkProxy.ProxyType.DefaultProxy?10 +QtNetwork.QNetworkProxy.ProxyType.Socks5Proxy?10 +QtNetwork.QNetworkProxy.ProxyType.NoProxy?10 +QtNetwork.QNetworkProxy.ProxyType.HttpProxy?10 +QtNetwork.QNetworkProxy.ProxyType.HttpCachingProxy?10 +QtNetwork.QNetworkProxy.ProxyType.FtpCachingProxy?10 +QtNetwork.QNetworkProxy?1() +QtNetwork.QNetworkProxy.__init__?1(self) +QtNetwork.QNetworkProxy?1(QNetworkProxy.ProxyType, QString hostName='', int port=0, QString user='', QString password='') +QtNetwork.QNetworkProxy.__init__?1(self, QNetworkProxy.ProxyType, QString hostName='', int port=0, QString user='', QString password='') +QtNetwork.QNetworkProxy?1(QNetworkProxy) +QtNetwork.QNetworkProxy.__init__?1(self, QNetworkProxy) +QtNetwork.QNetworkProxy.setType?4(QNetworkProxy.ProxyType) +QtNetwork.QNetworkProxy.type?4() -> QNetworkProxy.ProxyType +QtNetwork.QNetworkProxy.setUser?4(QString) +QtNetwork.QNetworkProxy.user?4() -> QString +QtNetwork.QNetworkProxy.setPassword?4(QString) +QtNetwork.QNetworkProxy.password?4() -> QString +QtNetwork.QNetworkProxy.setHostName?4(QString) +QtNetwork.QNetworkProxy.hostName?4() -> QString +QtNetwork.QNetworkProxy.setPort?4(int) +QtNetwork.QNetworkProxy.port?4() -> int +QtNetwork.QNetworkProxy.setApplicationProxy?4(QNetworkProxy) +QtNetwork.QNetworkProxy.applicationProxy?4() -> QNetworkProxy +QtNetwork.QNetworkProxy.isCachingProxy?4() -> bool +QtNetwork.QNetworkProxy.isTransparentProxy?4() -> bool +QtNetwork.QNetworkProxy.setCapabilities?4(QNetworkProxy.Capabilities) +QtNetwork.QNetworkProxy.capabilities?4() -> QNetworkProxy.Capabilities +QtNetwork.QNetworkProxy.swap?4(QNetworkProxy) +QtNetwork.QNetworkProxy.header?4(QNetworkRequest.KnownHeaders) -> QVariant +QtNetwork.QNetworkProxy.setHeader?4(QNetworkRequest.KnownHeaders, QVariant) +QtNetwork.QNetworkProxy.hasRawHeader?4(QByteArray) -> bool +QtNetwork.QNetworkProxy.rawHeaderList?4() -> unknown-type +QtNetwork.QNetworkProxy.rawHeader?4(QByteArray) -> QByteArray +QtNetwork.QNetworkProxy.setRawHeader?4(QByteArray, QByteArray) +QtNetwork.QNetworkProxy.Capabilities?1() +QtNetwork.QNetworkProxy.Capabilities.__init__?1(self) +QtNetwork.QNetworkProxy.Capabilities?1(int) +QtNetwork.QNetworkProxy.Capabilities.__init__?1(self, int) +QtNetwork.QNetworkProxy.Capabilities?1(QNetworkProxy.Capabilities) +QtNetwork.QNetworkProxy.Capabilities.__init__?1(self, QNetworkProxy.Capabilities) +QtNetwork.QNetworkProxyQuery.QueryType?10 +QtNetwork.QNetworkProxyQuery.QueryType.TcpSocket?10 +QtNetwork.QNetworkProxyQuery.QueryType.UdpSocket?10 +QtNetwork.QNetworkProxyQuery.QueryType.TcpServer?10 +QtNetwork.QNetworkProxyQuery.QueryType.UrlRequest?10 +QtNetwork.QNetworkProxyQuery.QueryType.SctpSocket?10 +QtNetwork.QNetworkProxyQuery.QueryType.SctpServer?10 +QtNetwork.QNetworkProxyQuery?1() +QtNetwork.QNetworkProxyQuery.__init__?1(self) +QtNetwork.QNetworkProxyQuery?1(QUrl, QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.UrlRequest) +QtNetwork.QNetworkProxyQuery.__init__?1(self, QUrl, QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.UrlRequest) +QtNetwork.QNetworkProxyQuery?1(QString, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpSocket) +QtNetwork.QNetworkProxyQuery.__init__?1(self, QString, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpSocket) +QtNetwork.QNetworkProxyQuery?1(int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpServer) +QtNetwork.QNetworkProxyQuery.__init__?1(self, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpServer) +QtNetwork.QNetworkProxyQuery?1(QNetworkConfiguration, QUrl, QNetworkProxyQuery.QueryType queryType=QNetworkProxyQuery.UrlRequest) +QtNetwork.QNetworkProxyQuery.__init__?1(self, QNetworkConfiguration, QUrl, QNetworkProxyQuery.QueryType queryType=QNetworkProxyQuery.UrlRequest) +QtNetwork.QNetworkProxyQuery?1(QNetworkConfiguration, QString, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpSocket) +QtNetwork.QNetworkProxyQuery.__init__?1(self, QNetworkConfiguration, QString, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpSocket) +QtNetwork.QNetworkProxyQuery?1(QNetworkConfiguration, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpServer) +QtNetwork.QNetworkProxyQuery.__init__?1(self, QNetworkConfiguration, int, QString protocolTag='', QNetworkProxyQuery.QueryType type=QNetworkProxyQuery.TcpServer) +QtNetwork.QNetworkProxyQuery?1(QNetworkProxyQuery) +QtNetwork.QNetworkProxyQuery.__init__?1(self, QNetworkProxyQuery) +QtNetwork.QNetworkProxyQuery.queryType?4() -> QNetworkProxyQuery.QueryType +QtNetwork.QNetworkProxyQuery.setQueryType?4(QNetworkProxyQuery.QueryType) +QtNetwork.QNetworkProxyQuery.peerPort?4() -> int +QtNetwork.QNetworkProxyQuery.setPeerPort?4(int) +QtNetwork.QNetworkProxyQuery.peerHostName?4() -> QString +QtNetwork.QNetworkProxyQuery.setPeerHostName?4(QString) +QtNetwork.QNetworkProxyQuery.localPort?4() -> int +QtNetwork.QNetworkProxyQuery.setLocalPort?4(int) +QtNetwork.QNetworkProxyQuery.protocolTag?4() -> QString +QtNetwork.QNetworkProxyQuery.setProtocolTag?4(QString) +QtNetwork.QNetworkProxyQuery.url?4() -> QUrl +QtNetwork.QNetworkProxyQuery.setUrl?4(QUrl) +QtNetwork.QNetworkProxyQuery.networkConfiguration?4() -> QNetworkConfiguration +QtNetwork.QNetworkProxyQuery.setNetworkConfiguration?4(QNetworkConfiguration) +QtNetwork.QNetworkProxyQuery.swap?4(QNetworkProxyQuery) +QtNetwork.QNetworkProxyFactory?1() +QtNetwork.QNetworkProxyFactory.__init__?1(self) +QtNetwork.QNetworkProxyFactory?1(QNetworkProxyFactory) +QtNetwork.QNetworkProxyFactory.__init__?1(self, QNetworkProxyFactory) +QtNetwork.QNetworkProxyFactory.queryProxy?4(QNetworkProxyQuery query=QNetworkProxyQuery()) -> unknown-type +QtNetwork.QNetworkProxyFactory.setApplicationProxyFactory?4(QNetworkProxyFactory) +QtNetwork.QNetworkProxyFactory.proxyForQuery?4(QNetworkProxyQuery) -> unknown-type +QtNetwork.QNetworkProxyFactory.systemProxyForQuery?4(QNetworkProxyQuery query=QNetworkProxyQuery()) -> unknown-type +QtNetwork.QNetworkProxyFactory.setUseSystemConfiguration?4(bool) +QtNetwork.QNetworkProxyFactory.usesSystemConfiguration?4() -> bool +QtNetwork.QNetworkReply.NetworkError?10 +QtNetwork.QNetworkReply.NetworkError.NoError?10 +QtNetwork.QNetworkReply.NetworkError.ConnectionRefusedError?10 +QtNetwork.QNetworkReply.NetworkError.RemoteHostClosedError?10 +QtNetwork.QNetworkReply.NetworkError.HostNotFoundError?10 +QtNetwork.QNetworkReply.NetworkError.TimeoutError?10 +QtNetwork.QNetworkReply.NetworkError.OperationCanceledError?10 +QtNetwork.QNetworkReply.NetworkError.SslHandshakeFailedError?10 +QtNetwork.QNetworkReply.NetworkError.UnknownNetworkError?10 +QtNetwork.QNetworkReply.NetworkError.ProxyConnectionRefusedError?10 +QtNetwork.QNetworkReply.NetworkError.ProxyConnectionClosedError?10 +QtNetwork.QNetworkReply.NetworkError.ProxyNotFoundError?10 +QtNetwork.QNetworkReply.NetworkError.ProxyTimeoutError?10 +QtNetwork.QNetworkReply.NetworkError.ProxyAuthenticationRequiredError?10 +QtNetwork.QNetworkReply.NetworkError.UnknownProxyError?10 +QtNetwork.QNetworkReply.NetworkError.ContentAccessDenied?10 +QtNetwork.QNetworkReply.NetworkError.ContentOperationNotPermittedError?10 +QtNetwork.QNetworkReply.NetworkError.ContentNotFoundError?10 +QtNetwork.QNetworkReply.NetworkError.AuthenticationRequiredError?10 +QtNetwork.QNetworkReply.NetworkError.UnknownContentError?10 +QtNetwork.QNetworkReply.NetworkError.ProtocolUnknownError?10 +QtNetwork.QNetworkReply.NetworkError.ProtocolInvalidOperationError?10 +QtNetwork.QNetworkReply.NetworkError.ProtocolFailure?10 +QtNetwork.QNetworkReply.NetworkError.ContentReSendError?10 +QtNetwork.QNetworkReply.NetworkError.TemporaryNetworkFailureError?10 +QtNetwork.QNetworkReply.NetworkError.NetworkSessionFailedError?10 +QtNetwork.QNetworkReply.NetworkError.BackgroundRequestNotAllowedError?10 +QtNetwork.QNetworkReply.NetworkError.ContentConflictError?10 +QtNetwork.QNetworkReply.NetworkError.ContentGoneError?10 +QtNetwork.QNetworkReply.NetworkError.InternalServerError?10 +QtNetwork.QNetworkReply.NetworkError.OperationNotImplementedError?10 +QtNetwork.QNetworkReply.NetworkError.ServiceUnavailableError?10 +QtNetwork.QNetworkReply.NetworkError.UnknownServerError?10 +QtNetwork.QNetworkReply.NetworkError.TooManyRedirectsError?10 +QtNetwork.QNetworkReply.NetworkError.InsecureRedirectError?10 +QtNetwork.QNetworkReply?1(QObject parent=None) +QtNetwork.QNetworkReply.__init__?1(self, QObject parent=None) +QtNetwork.QNetworkReply.abort?4() +QtNetwork.QNetworkReply.close?4() +QtNetwork.QNetworkReply.isSequential?4() -> bool +QtNetwork.QNetworkReply.readBufferSize?4() -> int +QtNetwork.QNetworkReply.setReadBufferSize?4(int) +QtNetwork.QNetworkReply.manager?4() -> QNetworkAccessManager +QtNetwork.QNetworkReply.operation?4() -> QNetworkAccessManager.Operation +QtNetwork.QNetworkReply.request?4() -> QNetworkRequest +QtNetwork.QNetworkReply.error?4() -> QNetworkReply.NetworkError +QtNetwork.QNetworkReply.url?4() -> QUrl +QtNetwork.QNetworkReply.header?4(QNetworkRequest.KnownHeaders) -> QVariant +QtNetwork.QNetworkReply.hasRawHeader?4(QByteArray) -> bool +QtNetwork.QNetworkReply.rawHeaderList?4() -> unknown-type +QtNetwork.QNetworkReply.rawHeader?4(QByteArray) -> QByteArray +QtNetwork.QNetworkReply.attribute?4(QNetworkRequest.Attribute) -> QVariant +QtNetwork.QNetworkReply.sslConfiguration?4() -> QSslConfiguration +QtNetwork.QNetworkReply.setSslConfiguration?4(QSslConfiguration) +QtNetwork.QNetworkReply.ignoreSslErrors?4() +QtNetwork.QNetworkReply.metaDataChanged?4() +QtNetwork.QNetworkReply.finished?4() +QtNetwork.QNetworkReply.encrypted?4() +QtNetwork.QNetworkReply.error?4(QNetworkReply.NetworkError) +QtNetwork.QNetworkReply.errorOccurred?4(QNetworkReply.NetworkError) +QtNetwork.QNetworkReply.sslErrors?4(unknown-type) +QtNetwork.QNetworkReply.uploadProgress?4(int, int) +QtNetwork.QNetworkReply.downloadProgress?4(int, int) +QtNetwork.QNetworkReply.preSharedKeyAuthenticationRequired?4(QSslPreSharedKeyAuthenticator) +QtNetwork.QNetworkReply.redirected?4(QUrl) +QtNetwork.QNetworkReply.redirectAllowed?4() +QtNetwork.QNetworkReply.writeData?4(bytes) -> int +QtNetwork.QNetworkReply.setOperation?4(QNetworkAccessManager.Operation) +QtNetwork.QNetworkReply.setRequest?4(QNetworkRequest) +QtNetwork.QNetworkReply.setError?4(QNetworkReply.NetworkError, QString) +QtNetwork.QNetworkReply.setUrl?4(QUrl) +QtNetwork.QNetworkReply.setHeader?4(QNetworkRequest.KnownHeaders, QVariant) +QtNetwork.QNetworkReply.setRawHeader?4(QByteArray, QByteArray) +QtNetwork.QNetworkReply.setAttribute?4(QNetworkRequest.Attribute, QVariant) +QtNetwork.QNetworkReply.setFinished?4(bool) +QtNetwork.QNetworkReply.isFinished?4() -> bool +QtNetwork.QNetworkReply.isRunning?4() -> bool +QtNetwork.QNetworkReply.ignoreSslErrors?4(unknown-type) +QtNetwork.QNetworkReply.rawHeaderPairs?4() -> unknown-type +QtNetwork.QNetworkReply.sslConfigurationImplementation?4(QSslConfiguration) +QtNetwork.QNetworkReply.setSslConfigurationImplementation?4(QSslConfiguration) +QtNetwork.QNetworkReply.ignoreSslErrorsImplementation?4(unknown-type) +QtNetwork.QNetworkRequest.TransferTimeoutConstant?10 +QtNetwork.QNetworkRequest.TransferTimeoutConstant.DefaultTransferTimeoutConstant?10 +QtNetwork.QNetworkRequest.RedirectPolicy?10 +QtNetwork.QNetworkRequest.RedirectPolicy.ManualRedirectPolicy?10 +QtNetwork.QNetworkRequest.RedirectPolicy.NoLessSafeRedirectPolicy?10 +QtNetwork.QNetworkRequest.RedirectPolicy.SameOriginRedirectPolicy?10 +QtNetwork.QNetworkRequest.RedirectPolicy.UserVerifiedRedirectPolicy?10 +QtNetwork.QNetworkRequest.Priority?10 +QtNetwork.QNetworkRequest.Priority.HighPriority?10 +QtNetwork.QNetworkRequest.Priority.NormalPriority?10 +QtNetwork.QNetworkRequest.Priority.LowPriority?10 +QtNetwork.QNetworkRequest.LoadControl?10 +QtNetwork.QNetworkRequest.LoadControl.Automatic?10 +QtNetwork.QNetworkRequest.LoadControl.Manual?10 +QtNetwork.QNetworkRequest.CacheLoadControl?10 +QtNetwork.QNetworkRequest.CacheLoadControl.AlwaysNetwork?10 +QtNetwork.QNetworkRequest.CacheLoadControl.PreferNetwork?10 +QtNetwork.QNetworkRequest.CacheLoadControl.PreferCache?10 +QtNetwork.QNetworkRequest.CacheLoadControl.AlwaysCache?10 +QtNetwork.QNetworkRequest.Attribute?10 +QtNetwork.QNetworkRequest.Attribute.HttpStatusCodeAttribute?10 +QtNetwork.QNetworkRequest.Attribute.HttpReasonPhraseAttribute?10 +QtNetwork.QNetworkRequest.Attribute.RedirectionTargetAttribute?10 +QtNetwork.QNetworkRequest.Attribute.ConnectionEncryptedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.CacheLoadControlAttribute?10 +QtNetwork.QNetworkRequest.Attribute.CacheSaveControlAttribute?10 +QtNetwork.QNetworkRequest.Attribute.SourceIsFromCacheAttribute?10 +QtNetwork.QNetworkRequest.Attribute.DoNotBufferUploadDataAttribute?10 +QtNetwork.QNetworkRequest.Attribute.HttpPipeliningAllowedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.HttpPipeliningWasUsedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.CustomVerbAttribute?10 +QtNetwork.QNetworkRequest.Attribute.CookieLoadControlAttribute?10 +QtNetwork.QNetworkRequest.Attribute.AuthenticationReuseAttribute?10 +QtNetwork.QNetworkRequest.Attribute.CookieSaveControlAttribute?10 +QtNetwork.QNetworkRequest.Attribute.BackgroundRequestAttribute?10 +QtNetwork.QNetworkRequest.Attribute.SpdyAllowedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.SpdyWasUsedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.EmitAllUploadProgressSignalsAttribute?10 +QtNetwork.QNetworkRequest.Attribute.FollowRedirectsAttribute?10 +QtNetwork.QNetworkRequest.Attribute.HTTP2AllowedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.Http2AllowedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.HTTP2WasUsedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.Http2WasUsedAttribute?10 +QtNetwork.QNetworkRequest.Attribute.OriginalContentLengthAttribute?10 +QtNetwork.QNetworkRequest.Attribute.RedirectPolicyAttribute?10 +QtNetwork.QNetworkRequest.Attribute.Http2DirectAttribute?10 +QtNetwork.QNetworkRequest.Attribute.AutoDeleteReplyOnFinishAttribute?10 +QtNetwork.QNetworkRequest.Attribute.User?10 +QtNetwork.QNetworkRequest.Attribute.UserMax?10 +QtNetwork.QNetworkRequest.KnownHeaders?10 +QtNetwork.QNetworkRequest.KnownHeaders.ContentTypeHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.ContentLengthHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.LocationHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.LastModifiedHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.CookieHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.SetCookieHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.ContentDispositionHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.UserAgentHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.ServerHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.IfModifiedSinceHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.ETagHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.IfMatchHeader?10 +QtNetwork.QNetworkRequest.KnownHeaders.IfNoneMatchHeader?10 +QtNetwork.QNetworkRequest?1(QUrl url=QUrl()) +QtNetwork.QNetworkRequest.__init__?1(self, QUrl url=QUrl()) +QtNetwork.QNetworkRequest?1(QNetworkRequest) +QtNetwork.QNetworkRequest.__init__?1(self, QNetworkRequest) +QtNetwork.QNetworkRequest.url?4() -> QUrl +QtNetwork.QNetworkRequest.setUrl?4(QUrl) +QtNetwork.QNetworkRequest.header?4(QNetworkRequest.KnownHeaders) -> QVariant +QtNetwork.QNetworkRequest.setHeader?4(QNetworkRequest.KnownHeaders, QVariant) +QtNetwork.QNetworkRequest.hasRawHeader?4(QByteArray) -> bool +QtNetwork.QNetworkRequest.rawHeaderList?4() -> unknown-type +QtNetwork.QNetworkRequest.rawHeader?4(QByteArray) -> QByteArray +QtNetwork.QNetworkRequest.setRawHeader?4(QByteArray, QByteArray) +QtNetwork.QNetworkRequest.attribute?4(QNetworkRequest.Attribute, QVariant defaultValue=None) -> QVariant +QtNetwork.QNetworkRequest.setAttribute?4(QNetworkRequest.Attribute, QVariant) +QtNetwork.QNetworkRequest.sslConfiguration?4() -> QSslConfiguration +QtNetwork.QNetworkRequest.setSslConfiguration?4(QSslConfiguration) +QtNetwork.QNetworkRequest.setOriginatingObject?4(QObject) +QtNetwork.QNetworkRequest.originatingObject?4() -> QObject +QtNetwork.QNetworkRequest.priority?4() -> QNetworkRequest.Priority +QtNetwork.QNetworkRequest.setPriority?4(QNetworkRequest.Priority) +QtNetwork.QNetworkRequest.swap?4(QNetworkRequest) +QtNetwork.QNetworkRequest.maximumRedirectsAllowed?4() -> int +QtNetwork.QNetworkRequest.setMaximumRedirectsAllowed?4(int) +QtNetwork.QNetworkRequest.peerVerifyName?4() -> QString +QtNetwork.QNetworkRequest.setPeerVerifyName?4(QString) +QtNetwork.QNetworkRequest.http2Configuration?4() -> QHttp2Configuration +QtNetwork.QNetworkRequest.setHttp2Configuration?4(QHttp2Configuration) +QtNetwork.QNetworkRequest.transferTimeout?4() -> int +QtNetwork.QNetworkRequest.setTransferTimeout?4(int timeout=QNetworkRequest.TransferTimeoutConstant.DefaultTransferTimeoutConstant) +QtNetwork.QNetworkSession.UsagePolicy?10 +QtNetwork.QNetworkSession.UsagePolicy.NoPolicy?10 +QtNetwork.QNetworkSession.UsagePolicy.NoBackgroundTrafficPolicy?10 +QtNetwork.QNetworkSession.SessionError?10 +QtNetwork.QNetworkSession.SessionError.UnknownSessionError?10 +QtNetwork.QNetworkSession.SessionError.SessionAbortedError?10 +QtNetwork.QNetworkSession.SessionError.RoamingError?10 +QtNetwork.QNetworkSession.SessionError.OperationNotSupportedError?10 +QtNetwork.QNetworkSession.SessionError.InvalidConfigurationError?10 +QtNetwork.QNetworkSession.State?10 +QtNetwork.QNetworkSession.State.Invalid?10 +QtNetwork.QNetworkSession.State.NotAvailable?10 +QtNetwork.QNetworkSession.State.Connecting?10 +QtNetwork.QNetworkSession.State.Connected?10 +QtNetwork.QNetworkSession.State.Closing?10 +QtNetwork.QNetworkSession.State.Disconnected?10 +QtNetwork.QNetworkSession.State.Roaming?10 +QtNetwork.QNetworkSession?1(QNetworkConfiguration, QObject parent=None) +QtNetwork.QNetworkSession.__init__?1(self, QNetworkConfiguration, QObject parent=None) +QtNetwork.QNetworkSession.isOpen?4() -> bool +QtNetwork.QNetworkSession.configuration?4() -> QNetworkConfiguration +QtNetwork.QNetworkSession.interface?4() -> QNetworkInterface +QtNetwork.QNetworkSession.state?4() -> QNetworkSession.State +QtNetwork.QNetworkSession.error?4() -> QNetworkSession.SessionError +QtNetwork.QNetworkSession.errorString?4() -> QString +QtNetwork.QNetworkSession.sessionProperty?4(QString) -> QVariant +QtNetwork.QNetworkSession.setSessionProperty?4(QString, QVariant) +QtNetwork.QNetworkSession.bytesWritten?4() -> int +QtNetwork.QNetworkSession.bytesReceived?4() -> int +QtNetwork.QNetworkSession.activeTime?4() -> int +QtNetwork.QNetworkSession.waitForOpened?4(int msecs=30000) -> bool +QtNetwork.QNetworkSession.open?4() +QtNetwork.QNetworkSession.close?4() +QtNetwork.QNetworkSession.stop?4() +QtNetwork.QNetworkSession.migrate?4() +QtNetwork.QNetworkSession.ignore?4() +QtNetwork.QNetworkSession.accept?4() +QtNetwork.QNetworkSession.reject?4() +QtNetwork.QNetworkSession.stateChanged?4(QNetworkSession.State) +QtNetwork.QNetworkSession.opened?4() +QtNetwork.QNetworkSession.closed?4() +QtNetwork.QNetworkSession.error?4(QNetworkSession.SessionError) +QtNetwork.QNetworkSession.preferredConfigurationChanged?4(QNetworkConfiguration, bool) +QtNetwork.QNetworkSession.newConfigurationActivated?4() +QtNetwork.QNetworkSession.connectNotify?4(QMetaMethod) +QtNetwork.QNetworkSession.disconnectNotify?4(QMetaMethod) +QtNetwork.QNetworkSession.usagePolicies?4() -> QNetworkSession.UsagePolicies +QtNetwork.QNetworkSession.usagePoliciesChanged?4(QNetworkSession.UsagePolicies) +QtNetwork.QNetworkSession.UsagePolicies?1() +QtNetwork.QNetworkSession.UsagePolicies.__init__?1(self) +QtNetwork.QNetworkSession.UsagePolicies?1(int) +QtNetwork.QNetworkSession.UsagePolicies.__init__?1(self, int) +QtNetwork.QNetworkSession.UsagePolicies?1(QNetworkSession.UsagePolicies) +QtNetwork.QNetworkSession.UsagePolicies.__init__?1(self, QNetworkSession.UsagePolicies) +QtNetwork.QOcspResponse?1() +QtNetwork.QOcspResponse.__init__?1(self) +QtNetwork.QOcspResponse?1(QOcspResponse) +QtNetwork.QOcspResponse.__init__?1(self, QOcspResponse) +QtNetwork.QOcspResponse.certificateStatus?4() -> QOcspCertificateStatus +QtNetwork.QOcspResponse.revocationReason?4() -> QOcspRevocationReason +QtNetwork.QOcspResponse.responder?4() -> QSslCertificate +QtNetwork.QOcspResponse.subject?4() -> QSslCertificate +QtNetwork.QOcspResponse.swap?4(QOcspResponse) +QtNetwork.QPasswordDigestor.deriveKeyPbkdf1?4(QCryptographicHash.Algorithm, QByteArray, QByteArray, int, int) -> QByteArray +QtNetwork.QPasswordDigestor.deriveKeyPbkdf2?4(QCryptographicHash.Algorithm, QByteArray, QByteArray, int, int) -> QByteArray +QtNetwork.QSsl.SslOption?10 +QtNetwork.QSsl.SslOption.SslOptionDisableEmptyFragments?10 +QtNetwork.QSsl.SslOption.SslOptionDisableSessionTickets?10 +QtNetwork.QSsl.SslOption.SslOptionDisableCompression?10 +QtNetwork.QSsl.SslOption.SslOptionDisableServerNameIndication?10 +QtNetwork.QSsl.SslOption.SslOptionDisableLegacyRenegotiation?10 +QtNetwork.QSsl.SslOption.SslOptionDisableSessionSharing?10 +QtNetwork.QSsl.SslOption.SslOptionDisableSessionPersistence?10 +QtNetwork.QSsl.SslOption.SslOptionDisableServerCipherPreference?10 +QtNetwork.QSsl.SslProtocol?10 +QtNetwork.QSsl.SslProtocol.UnknownProtocol?10 +QtNetwork.QSsl.SslProtocol.SslV3?10 +QtNetwork.QSsl.SslProtocol.SslV2?10 +QtNetwork.QSsl.SslProtocol.TlsV1_0?10 +QtNetwork.QSsl.SslProtocol.TlsV1_0OrLater?10 +QtNetwork.QSsl.SslProtocol.TlsV1_1?10 +QtNetwork.QSsl.SslProtocol.TlsV1_1OrLater?10 +QtNetwork.QSsl.SslProtocol.TlsV1_2?10 +QtNetwork.QSsl.SslProtocol.TlsV1_2OrLater?10 +QtNetwork.QSsl.SslProtocol.AnyProtocol?10 +QtNetwork.QSsl.SslProtocol.TlsV1SslV3?10 +QtNetwork.QSsl.SslProtocol.SecureProtocols?10 +QtNetwork.QSsl.SslProtocol.DtlsV1_0?10 +QtNetwork.QSsl.SslProtocol.DtlsV1_0OrLater?10 +QtNetwork.QSsl.SslProtocol.DtlsV1_2?10 +QtNetwork.QSsl.SslProtocol.DtlsV1_2OrLater?10 +QtNetwork.QSsl.SslProtocol.TlsV1_3?10 +QtNetwork.QSsl.SslProtocol.TlsV1_3OrLater?10 +QtNetwork.QSsl.AlternativeNameEntryType?10 +QtNetwork.QSsl.AlternativeNameEntryType.EmailEntry?10 +QtNetwork.QSsl.AlternativeNameEntryType.DnsEntry?10 +QtNetwork.QSsl.AlternativeNameEntryType.IpAddressEntry?10 +QtNetwork.QSsl.KeyAlgorithm?10 +QtNetwork.QSsl.KeyAlgorithm.Opaque?10 +QtNetwork.QSsl.KeyAlgorithm.Rsa?10 +QtNetwork.QSsl.KeyAlgorithm.Dsa?10 +QtNetwork.QSsl.KeyAlgorithm.Ec?10 +QtNetwork.QSsl.KeyAlgorithm.Dh?10 +QtNetwork.QSsl.EncodingFormat?10 +QtNetwork.QSsl.EncodingFormat.Pem?10 +QtNetwork.QSsl.EncodingFormat.Der?10 +QtNetwork.QSsl.KeyType?10 +QtNetwork.QSsl.KeyType.PrivateKey?10 +QtNetwork.QSsl.KeyType.PublicKey?10 +QtNetwork.QSsl.SslOptions?1() +QtNetwork.QSsl.SslOptions.__init__?1(self) +QtNetwork.QSsl.SslOptions?1(int) +QtNetwork.QSsl.SslOptions.__init__?1(self, int) +QtNetwork.QSsl.SslOptions?1(QSsl.SslOptions) +QtNetwork.QSsl.SslOptions.__init__?1(self, QSsl.SslOptions) +QtNetwork.QSslCertificate.PatternSyntax?10 +QtNetwork.QSslCertificate.PatternSyntax.RegularExpression?10 +QtNetwork.QSslCertificate.PatternSyntax.Wildcard?10 +QtNetwork.QSslCertificate.PatternSyntax.FixedString?10 +QtNetwork.QSslCertificate.SubjectInfo?10 +QtNetwork.QSslCertificate.SubjectInfo.Organization?10 +QtNetwork.QSslCertificate.SubjectInfo.CommonName?10 +QtNetwork.QSslCertificate.SubjectInfo.LocalityName?10 +QtNetwork.QSslCertificate.SubjectInfo.OrganizationalUnitName?10 +QtNetwork.QSslCertificate.SubjectInfo.CountryName?10 +QtNetwork.QSslCertificate.SubjectInfo.StateOrProvinceName?10 +QtNetwork.QSslCertificate.SubjectInfo.DistinguishedNameQualifier?10 +QtNetwork.QSslCertificate.SubjectInfo.SerialNumber?10 +QtNetwork.QSslCertificate.SubjectInfo.EmailAddress?10 +QtNetwork.QSslCertificate?1(QIODevice, QSsl.EncodingFormat format=QSsl.Pem) +QtNetwork.QSslCertificate.__init__?1(self, QIODevice, QSsl.EncodingFormat format=QSsl.Pem) +QtNetwork.QSslCertificate?1(QByteArray data=QByteArray(), QSsl.EncodingFormat format=QSsl.Pem) +QtNetwork.QSslCertificate.__init__?1(self, QByteArray data=QByteArray(), QSsl.EncodingFormat format=QSsl.Pem) +QtNetwork.QSslCertificate?1(QSslCertificate) +QtNetwork.QSslCertificate.__init__?1(self, QSslCertificate) +QtNetwork.QSslCertificate.isNull?4() -> bool +QtNetwork.QSslCertificate.clear?4() +QtNetwork.QSslCertificate.version?4() -> QByteArray +QtNetwork.QSslCertificate.serialNumber?4() -> QByteArray +QtNetwork.QSslCertificate.digest?4(QCryptographicHash.Algorithm algorithm=QCryptographicHash.Md5) -> QByteArray +QtNetwork.QSslCertificate.issuerInfo?4(QSslCertificate.SubjectInfo) -> QStringList +QtNetwork.QSslCertificate.issuerInfo?4(QByteArray) -> QStringList +QtNetwork.QSslCertificate.subjectInfo?4(QSslCertificate.SubjectInfo) -> QStringList +QtNetwork.QSslCertificate.subjectInfo?4(QByteArray) -> QStringList +QtNetwork.QSslCertificate.subjectAlternativeNames?4() -> unknown-type +QtNetwork.QSslCertificate.effectiveDate?4() -> QDateTime +QtNetwork.QSslCertificate.expiryDate?4() -> QDateTime +QtNetwork.QSslCertificate.publicKey?4() -> QSslKey +QtNetwork.QSslCertificate.toPem?4() -> QByteArray +QtNetwork.QSslCertificate.toDer?4() -> QByteArray +QtNetwork.QSslCertificate.fromPath?4(QString, QSsl.EncodingFormat format=QSsl.Pem, QRegExp.PatternSyntax syntax=QRegExp.FixedString) -> unknown-type +QtNetwork.QSslCertificate.fromDevice?4(QIODevice, QSsl.EncodingFormat format=QSsl.Pem) -> unknown-type +QtNetwork.QSslCertificate.fromData?4(QByteArray, QSsl.EncodingFormat format=QSsl.Pem) -> unknown-type +QtNetwork.QSslCertificate.handle?4() -> PyQt5.sip.voidptr +QtNetwork.QSslCertificate.swap?4(QSslCertificate) +QtNetwork.QSslCertificate.isBlacklisted?4() -> bool +QtNetwork.QSslCertificate.subjectInfoAttributes?4() -> unknown-type +QtNetwork.QSslCertificate.issuerInfoAttributes?4() -> unknown-type +QtNetwork.QSslCertificate.extensions?4() -> unknown-type +QtNetwork.QSslCertificate.toText?4() -> QString +QtNetwork.QSslCertificate.verify?4(unknown-type, QString hostName='') -> unknown-type +QtNetwork.QSslCertificate.isSelfSigned?4() -> bool +QtNetwork.QSslCertificate.importPkcs12?4(QIODevice, QSslKey, QSslCertificate, unknown-type caCertificates=[], QByteArray passPhrase=QByteArray()) -> bool +QtNetwork.QSslCertificate.issuerDisplayName?4() -> QString +QtNetwork.QSslCertificate.subjectDisplayName?4() -> QString +QtNetwork.QSslCertificateExtension?1() +QtNetwork.QSslCertificateExtension.__init__?1(self) +QtNetwork.QSslCertificateExtension?1(QSslCertificateExtension) +QtNetwork.QSslCertificateExtension.__init__?1(self, QSslCertificateExtension) +QtNetwork.QSslCertificateExtension.swap?4(QSslCertificateExtension) +QtNetwork.QSslCertificateExtension.oid?4() -> QString +QtNetwork.QSslCertificateExtension.name?4() -> QString +QtNetwork.QSslCertificateExtension.value?4() -> QVariant +QtNetwork.QSslCertificateExtension.isCritical?4() -> bool +QtNetwork.QSslCertificateExtension.isSupported?4() -> bool +QtNetwork.QSslCipher?1() +QtNetwork.QSslCipher.__init__?1(self) +QtNetwork.QSslCipher?1(QString) +QtNetwork.QSslCipher.__init__?1(self, QString) +QtNetwork.QSslCipher?1(QString, QSsl.SslProtocol) +QtNetwork.QSslCipher.__init__?1(self, QString, QSsl.SslProtocol) +QtNetwork.QSslCipher?1(QSslCipher) +QtNetwork.QSslCipher.__init__?1(self, QSslCipher) +QtNetwork.QSslCipher.isNull?4() -> bool +QtNetwork.QSslCipher.name?4() -> QString +QtNetwork.QSslCipher.supportedBits?4() -> int +QtNetwork.QSslCipher.usedBits?4() -> int +QtNetwork.QSslCipher.keyExchangeMethod?4() -> QString +QtNetwork.QSslCipher.authenticationMethod?4() -> QString +QtNetwork.QSslCipher.encryptionMethod?4() -> QString +QtNetwork.QSslCipher.protocolString?4() -> QString +QtNetwork.QSslCipher.protocol?4() -> QSsl.SslProtocol +QtNetwork.QSslCipher.swap?4(QSslCipher) +QtNetwork.QSslConfiguration.NextProtocolNegotiationStatus?10 +QtNetwork.QSslConfiguration.NextProtocolNegotiationStatus.NextProtocolNegotiationNone?10 +QtNetwork.QSslConfiguration.NextProtocolNegotiationStatus.NextProtocolNegotiationNegotiated?10 +QtNetwork.QSslConfiguration.NextProtocolNegotiationStatus.NextProtocolNegotiationUnsupported?10 +QtNetwork.QSslConfiguration.NextProtocolHttp1_1?7 +QtNetwork.QSslConfiguration.NextProtocolSpdy3_0?7 +QtNetwork.QSslConfiguration?1() +QtNetwork.QSslConfiguration.__init__?1(self) +QtNetwork.QSslConfiguration?1(QSslConfiguration) +QtNetwork.QSslConfiguration.__init__?1(self, QSslConfiguration) +QtNetwork.QSslConfiguration.isNull?4() -> bool +QtNetwork.QSslConfiguration.protocol?4() -> QSsl.SslProtocol +QtNetwork.QSslConfiguration.setProtocol?4(QSsl.SslProtocol) +QtNetwork.QSslConfiguration.peerVerifyMode?4() -> QSslSocket.PeerVerifyMode +QtNetwork.QSslConfiguration.setPeerVerifyMode?4(QSslSocket.PeerVerifyMode) +QtNetwork.QSslConfiguration.peerVerifyDepth?4() -> int +QtNetwork.QSslConfiguration.setPeerVerifyDepth?4(int) +QtNetwork.QSslConfiguration.localCertificate?4() -> QSslCertificate +QtNetwork.QSslConfiguration.setLocalCertificate?4(QSslCertificate) +QtNetwork.QSslConfiguration.peerCertificate?4() -> QSslCertificate +QtNetwork.QSslConfiguration.peerCertificateChain?4() -> unknown-type +QtNetwork.QSslConfiguration.sessionCipher?4() -> QSslCipher +QtNetwork.QSslConfiguration.privateKey?4() -> QSslKey +QtNetwork.QSslConfiguration.setPrivateKey?4(QSslKey) +QtNetwork.QSslConfiguration.ciphers?4() -> unknown-type +QtNetwork.QSslConfiguration.setCiphers?4(unknown-type) +QtNetwork.QSslConfiguration.caCertificates?4() -> unknown-type +QtNetwork.QSslConfiguration.setCaCertificates?4(unknown-type) +QtNetwork.QSslConfiguration.defaultConfiguration?4() -> QSslConfiguration +QtNetwork.QSslConfiguration.setDefaultConfiguration?4(QSslConfiguration) +QtNetwork.QSslConfiguration.setSslOption?4(QSsl.SslOption, bool) +QtNetwork.QSslConfiguration.testSslOption?4(QSsl.SslOption) -> bool +QtNetwork.QSslConfiguration.swap?4(QSslConfiguration) +QtNetwork.QSslConfiguration.localCertificateChain?4() -> unknown-type +QtNetwork.QSslConfiguration.setLocalCertificateChain?4(unknown-type) +QtNetwork.QSslConfiguration.sessionTicket?4() -> QByteArray +QtNetwork.QSslConfiguration.setSessionTicket?4(QByteArray) +QtNetwork.QSslConfiguration.sessionTicketLifeTimeHint?4() -> int +QtNetwork.QSslConfiguration.setAllowedNextProtocols?4(unknown-type) +QtNetwork.QSslConfiguration.allowedNextProtocols?4() -> unknown-type +QtNetwork.QSslConfiguration.nextNegotiatedProtocol?4() -> QByteArray +QtNetwork.QSslConfiguration.nextProtocolNegotiationStatus?4() -> QSslConfiguration.NextProtocolNegotiationStatus +QtNetwork.QSslConfiguration.sessionProtocol?4() -> QSsl.SslProtocol +QtNetwork.QSslConfiguration.supportedCiphers?4() -> unknown-type +QtNetwork.QSslConfiguration.systemCaCertificates?4() -> unknown-type +QtNetwork.QSslConfiguration.ellipticCurves?4() -> unknown-type +QtNetwork.QSslConfiguration.setEllipticCurves?4(unknown-type) +QtNetwork.QSslConfiguration.supportedEllipticCurves?4() -> unknown-type +QtNetwork.QSslConfiguration.ephemeralServerKey?4() -> QSslKey +QtNetwork.QSslConfiguration.preSharedKeyIdentityHint?4() -> QByteArray +QtNetwork.QSslConfiguration.setPreSharedKeyIdentityHint?4(QByteArray) +QtNetwork.QSslConfiguration.diffieHellmanParameters?4() -> QSslDiffieHellmanParameters +QtNetwork.QSslConfiguration.setDiffieHellmanParameters?4(QSslDiffieHellmanParameters) +QtNetwork.QSslConfiguration.backendConfiguration?4() -> unknown-type +QtNetwork.QSslConfiguration.setBackendConfigurationOption?4(QByteArray, QVariant) +QtNetwork.QSslConfiguration.setBackendConfiguration?4(unknown-type backendConfiguration={}) +QtNetwork.QSslConfiguration.setOcspStaplingEnabled?4(bool) +QtNetwork.QSslConfiguration.ocspStaplingEnabled?4() -> bool +QtNetwork.QSslConfiguration.addCaCertificate?4(QSslCertificate) +QtNetwork.QSslConfiguration.addCaCertificates?4(QString, QSsl.EncodingFormat format=QSsl.Pem, QSslCertificate.PatternSyntax syntax=QSslCertificate.PatternSyntax.FixedString) -> bool +QtNetwork.QSslConfiguration.addCaCertificates?4(unknown-type) +QtNetwork.QSslDiffieHellmanParameters.Error?10 +QtNetwork.QSslDiffieHellmanParameters.Error.NoError?10 +QtNetwork.QSslDiffieHellmanParameters.Error.InvalidInputDataError?10 +QtNetwork.QSslDiffieHellmanParameters.Error.UnsafeParametersError?10 +QtNetwork.QSslDiffieHellmanParameters?1() +QtNetwork.QSslDiffieHellmanParameters.__init__?1(self) +QtNetwork.QSslDiffieHellmanParameters?1(QSslDiffieHellmanParameters) +QtNetwork.QSslDiffieHellmanParameters.__init__?1(self, QSslDiffieHellmanParameters) +QtNetwork.QSslDiffieHellmanParameters.swap?4(QSslDiffieHellmanParameters) +QtNetwork.QSslDiffieHellmanParameters.defaultParameters?4() -> QSslDiffieHellmanParameters +QtNetwork.QSslDiffieHellmanParameters.fromEncoded?4(QByteArray, QSsl.EncodingFormat encoding=QSsl.EncodingFormat.Pem) -> QSslDiffieHellmanParameters +QtNetwork.QSslDiffieHellmanParameters.fromEncoded?4(QIODevice, QSsl.EncodingFormat encoding=QSsl.EncodingFormat.Pem) -> QSslDiffieHellmanParameters +QtNetwork.QSslDiffieHellmanParameters.isEmpty?4() -> bool +QtNetwork.QSslDiffieHellmanParameters.isValid?4() -> bool +QtNetwork.QSslDiffieHellmanParameters.error?4() -> QSslDiffieHellmanParameters.Error +QtNetwork.QSslDiffieHellmanParameters.errorString?4() -> QString +QtNetwork.QSslEllipticCurve?1() +QtNetwork.QSslEllipticCurve.__init__?1(self) +QtNetwork.QSslEllipticCurve?1(QSslEllipticCurve) +QtNetwork.QSslEllipticCurve.__init__?1(self, QSslEllipticCurve) +QtNetwork.QSslEllipticCurve.fromShortName?4(QString) -> QSslEllipticCurve +QtNetwork.QSslEllipticCurve.fromLongName?4(QString) -> QSslEllipticCurve +QtNetwork.QSslEllipticCurve.shortName?4() -> QString +QtNetwork.QSslEllipticCurve.longName?4() -> QString +QtNetwork.QSslEllipticCurve.isValid?4() -> bool +QtNetwork.QSslEllipticCurve.isTlsNamedCurve?4() -> bool +QtNetwork.QSslError.SslError?10 +QtNetwork.QSslError.SslError.UnspecifiedError?10 +QtNetwork.QSslError.SslError.NoError?10 +QtNetwork.QSslError.SslError.UnableToGetIssuerCertificate?10 +QtNetwork.QSslError.SslError.UnableToDecryptCertificateSignature?10 +QtNetwork.QSslError.SslError.UnableToDecodeIssuerPublicKey?10 +QtNetwork.QSslError.SslError.CertificateSignatureFailed?10 +QtNetwork.QSslError.SslError.CertificateNotYetValid?10 +QtNetwork.QSslError.SslError.CertificateExpired?10 +QtNetwork.QSslError.SslError.InvalidNotBeforeField?10 +QtNetwork.QSslError.SslError.InvalidNotAfterField?10 +QtNetwork.QSslError.SslError.SelfSignedCertificate?10 +QtNetwork.QSslError.SslError.SelfSignedCertificateInChain?10 +QtNetwork.QSslError.SslError.UnableToGetLocalIssuerCertificate?10 +QtNetwork.QSslError.SslError.UnableToVerifyFirstCertificate?10 +QtNetwork.QSslError.SslError.CertificateRevoked?10 +QtNetwork.QSslError.SslError.InvalidCaCertificate?10 +QtNetwork.QSslError.SslError.PathLengthExceeded?10 +QtNetwork.QSslError.SslError.InvalidPurpose?10 +QtNetwork.QSslError.SslError.CertificateUntrusted?10 +QtNetwork.QSslError.SslError.CertificateRejected?10 +QtNetwork.QSslError.SslError.SubjectIssuerMismatch?10 +QtNetwork.QSslError.SslError.AuthorityIssuerSerialNumberMismatch?10 +QtNetwork.QSslError.SslError.NoPeerCertificate?10 +QtNetwork.QSslError.SslError.HostNameMismatch?10 +QtNetwork.QSslError.SslError.NoSslSupport?10 +QtNetwork.QSslError.SslError.CertificateBlacklisted?10 +QtNetwork.QSslError.SslError.CertificateStatusUnknown?10 +QtNetwork.QSslError.SslError.OcspNoResponseFound?10 +QtNetwork.QSslError.SslError.OcspMalformedRequest?10 +QtNetwork.QSslError.SslError.OcspMalformedResponse?10 +QtNetwork.QSslError.SslError.OcspInternalError?10 +QtNetwork.QSslError.SslError.OcspTryLater?10 +QtNetwork.QSslError.SslError.OcspSigRequred?10 +QtNetwork.QSslError.SslError.OcspUnauthorized?10 +QtNetwork.QSslError.SslError.OcspResponseCannotBeTrusted?10 +QtNetwork.QSslError.SslError.OcspResponseCertIdUnknown?10 +QtNetwork.QSslError.SslError.OcspResponseExpired?10 +QtNetwork.QSslError.SslError.OcspStatusUnknown?10 +QtNetwork.QSslError?1() +QtNetwork.QSslError.__init__?1(self) +QtNetwork.QSslError?1(QSslError.SslError) +QtNetwork.QSslError.__init__?1(self, QSslError.SslError) +QtNetwork.QSslError?1(QSslError.SslError, QSslCertificate) +QtNetwork.QSslError.__init__?1(self, QSslError.SslError, QSslCertificate) +QtNetwork.QSslError?1(QSslError) +QtNetwork.QSslError.__init__?1(self, QSslError) +QtNetwork.QSslError.error?4() -> QSslError.SslError +QtNetwork.QSslError.errorString?4() -> QString +QtNetwork.QSslError.certificate?4() -> QSslCertificate +QtNetwork.QSslError.swap?4(QSslError) +QtNetwork.QSslKey?1() +QtNetwork.QSslKey.__init__?1(self) +QtNetwork.QSslKey?1(QByteArray, QSsl.KeyAlgorithm, QSsl.EncodingFormat encoding=QSsl.Pem, QSsl.KeyType type=QSsl.PrivateKey, QByteArray passPhrase=QByteArray()) +QtNetwork.QSslKey.__init__?1(self, QByteArray, QSsl.KeyAlgorithm, QSsl.EncodingFormat encoding=QSsl.Pem, QSsl.KeyType type=QSsl.PrivateKey, QByteArray passPhrase=QByteArray()) +QtNetwork.QSslKey?1(QIODevice, QSsl.KeyAlgorithm, QSsl.EncodingFormat encoding=QSsl.Pem, QSsl.KeyType type=QSsl.PrivateKey, QByteArray passPhrase=QByteArray()) +QtNetwork.QSslKey.__init__?1(self, QIODevice, QSsl.KeyAlgorithm, QSsl.EncodingFormat encoding=QSsl.Pem, QSsl.KeyType type=QSsl.PrivateKey, QByteArray passPhrase=QByteArray()) +QtNetwork.QSslKey?1(PyQt5.sip.voidptr, QSsl.KeyType type=QSsl.PrivateKey) +QtNetwork.QSslKey.__init__?1(self, PyQt5.sip.voidptr, QSsl.KeyType type=QSsl.PrivateKey) +QtNetwork.QSslKey?1(QSslKey) +QtNetwork.QSslKey.__init__?1(self, QSslKey) +QtNetwork.QSslKey.isNull?4() -> bool +QtNetwork.QSslKey.clear?4() +QtNetwork.QSslKey.length?4() -> int +QtNetwork.QSslKey.type?4() -> QSsl.KeyType +QtNetwork.QSslKey.algorithm?4() -> QSsl.KeyAlgorithm +QtNetwork.QSslKey.toPem?4(QByteArray passPhrase=QByteArray()) -> QByteArray +QtNetwork.QSslKey.toDer?4(QByteArray passPhrase=QByteArray()) -> QByteArray +QtNetwork.QSslKey.handle?4() -> PyQt5.sip.voidptr +QtNetwork.QSslKey.swap?4(QSslKey) +QtNetwork.QSslPreSharedKeyAuthenticator?1() +QtNetwork.QSslPreSharedKeyAuthenticator.__init__?1(self) +QtNetwork.QSslPreSharedKeyAuthenticator?1(QSslPreSharedKeyAuthenticator) +QtNetwork.QSslPreSharedKeyAuthenticator.__init__?1(self, QSslPreSharedKeyAuthenticator) +QtNetwork.QSslPreSharedKeyAuthenticator.swap?4(QSslPreSharedKeyAuthenticator) +QtNetwork.QSslPreSharedKeyAuthenticator.identityHint?4() -> QByteArray +QtNetwork.QSslPreSharedKeyAuthenticator.setIdentity?4(QByteArray) +QtNetwork.QSslPreSharedKeyAuthenticator.identity?4() -> QByteArray +QtNetwork.QSslPreSharedKeyAuthenticator.maximumIdentityLength?4() -> int +QtNetwork.QSslPreSharedKeyAuthenticator.setPreSharedKey?4(QByteArray) +QtNetwork.QSslPreSharedKeyAuthenticator.preSharedKey?4() -> QByteArray +QtNetwork.QSslPreSharedKeyAuthenticator.maximumPreSharedKeyLength?4() -> int +QtNetwork.QTcpSocket?1(QObject parent=None) +QtNetwork.QTcpSocket.__init__?1(self, QObject parent=None) +QtNetwork.QSslSocket.PeerVerifyMode?10 +QtNetwork.QSslSocket.PeerVerifyMode.VerifyNone?10 +QtNetwork.QSslSocket.PeerVerifyMode.QueryPeer?10 +QtNetwork.QSslSocket.PeerVerifyMode.VerifyPeer?10 +QtNetwork.QSslSocket.PeerVerifyMode.AutoVerifyPeer?10 +QtNetwork.QSslSocket.SslMode?10 +QtNetwork.QSslSocket.SslMode.UnencryptedMode?10 +QtNetwork.QSslSocket.SslMode.SslClientMode?10 +QtNetwork.QSslSocket.SslMode.SslServerMode?10 +QtNetwork.QSslSocket?1(QObject parent=None) +QtNetwork.QSslSocket.__init__?1(self, QObject parent=None) +QtNetwork.QSslSocket.connectToHostEncrypted?4(QString, int, QIODevice.OpenMode mode=QIODevice.ReadWrite, QAbstractSocket.NetworkLayerProtocol protocol=QAbstractSocket.AnyIPProtocol) +QtNetwork.QSslSocket.connectToHostEncrypted?4(QString, int, QString, QIODevice.OpenMode mode=QIODevice.ReadWrite, QAbstractSocket.NetworkLayerProtocol protocol=QAbstractSocket.AnyIPProtocol) +QtNetwork.QSslSocket.setSocketDescriptor?4(qintptr, QAbstractSocket.SocketState state=QAbstractSocket.ConnectedState, QIODevice.OpenMode mode=QIODevice.ReadWrite) -> bool +QtNetwork.QSslSocket.mode?4() -> QSslSocket.SslMode +QtNetwork.QSslSocket.isEncrypted?4() -> bool +QtNetwork.QSslSocket.protocol?4() -> QSsl.SslProtocol +QtNetwork.QSslSocket.setProtocol?4(QSsl.SslProtocol) +QtNetwork.QSslSocket.bytesAvailable?4() -> int +QtNetwork.QSslSocket.bytesToWrite?4() -> int +QtNetwork.QSslSocket.canReadLine?4() -> bool +QtNetwork.QSslSocket.close?4() +QtNetwork.QSslSocket.atEnd?4() -> bool +QtNetwork.QSslSocket.flush?4() -> bool +QtNetwork.QSslSocket.abort?4() +QtNetwork.QSslSocket.setLocalCertificate?4(QSslCertificate) +QtNetwork.QSslSocket.setLocalCertificate?4(QString, QSsl.EncodingFormat format=QSsl.Pem) +QtNetwork.QSslSocket.localCertificate?4() -> QSslCertificate +QtNetwork.QSslSocket.peerCertificate?4() -> QSslCertificate +QtNetwork.QSslSocket.peerCertificateChain?4() -> unknown-type +QtNetwork.QSslSocket.sessionCipher?4() -> QSslCipher +QtNetwork.QSslSocket.setPrivateKey?4(QSslKey) +QtNetwork.QSslSocket.setPrivateKey?4(QString, QSsl.KeyAlgorithm algorithm=QSsl.Rsa, QSsl.EncodingFormat format=QSsl.Pem, QByteArray passPhrase=QByteArray()) +QtNetwork.QSslSocket.privateKey?4() -> QSslKey +QtNetwork.QSslSocket.ciphers?4() -> unknown-type +QtNetwork.QSslSocket.setCiphers?4(unknown-type) +QtNetwork.QSslSocket.setCiphers?4(QString) +QtNetwork.QSslSocket.setDefaultCiphers?4(unknown-type) +QtNetwork.QSslSocket.defaultCiphers?4() -> unknown-type +QtNetwork.QSslSocket.supportedCiphers?4() -> unknown-type +QtNetwork.QSslSocket.addCaCertificates?4(QString, QSsl.EncodingFormat format=QSsl.Pem, QRegExp.PatternSyntax syntax=QRegExp.FixedString) -> bool +QtNetwork.QSslSocket.addCaCertificate?4(QSslCertificate) +QtNetwork.QSslSocket.addCaCertificates?4(unknown-type) +QtNetwork.QSslSocket.setCaCertificates?4(unknown-type) +QtNetwork.QSslSocket.caCertificates?4() -> unknown-type +QtNetwork.QSslSocket.addDefaultCaCertificates?4(QString, QSsl.EncodingFormat format=QSsl.Pem, QRegExp.PatternSyntax syntax=QRegExp.FixedString) -> bool +QtNetwork.QSslSocket.addDefaultCaCertificate?4(QSslCertificate) +QtNetwork.QSslSocket.addDefaultCaCertificates?4(unknown-type) +QtNetwork.QSslSocket.setDefaultCaCertificates?4(unknown-type) +QtNetwork.QSslSocket.defaultCaCertificates?4() -> unknown-type +QtNetwork.QSslSocket.systemCaCertificates?4() -> unknown-type +QtNetwork.QSslSocket.waitForConnected?4(int msecs=30000) -> bool +QtNetwork.QSslSocket.waitForEncrypted?4(int msecs=30000) -> bool +QtNetwork.QSslSocket.waitForReadyRead?4(int msecs=30000) -> bool +QtNetwork.QSslSocket.waitForBytesWritten?4(int msecs=30000) -> bool +QtNetwork.QSslSocket.waitForDisconnected?4(int msecs=30000) -> bool +QtNetwork.QSslSocket.sslErrors?4() -> unknown-type +QtNetwork.QSslSocket.supportsSsl?4() -> bool +QtNetwork.QSslSocket.startClientEncryption?4() +QtNetwork.QSslSocket.startServerEncryption?4() +QtNetwork.QSslSocket.ignoreSslErrors?4() +QtNetwork.QSslSocket.encrypted?4() +QtNetwork.QSslSocket.sslErrors?4(unknown-type) +QtNetwork.QSslSocket.modeChanged?4(QSslSocket.SslMode) +QtNetwork.QSslSocket.preSharedKeyAuthenticationRequired?4(QSslPreSharedKeyAuthenticator) +QtNetwork.QSslSocket.readData?4(int) -> Any +QtNetwork.QSslSocket.writeData?4(bytes) -> int +QtNetwork.QSslSocket.peerVerifyMode?4() -> QSslSocket.PeerVerifyMode +QtNetwork.QSslSocket.setPeerVerifyMode?4(QSslSocket.PeerVerifyMode) +QtNetwork.QSslSocket.peerVerifyDepth?4() -> int +QtNetwork.QSslSocket.setPeerVerifyDepth?4(int) +QtNetwork.QSslSocket.setReadBufferSize?4(int) +QtNetwork.QSslSocket.encryptedBytesAvailable?4() -> int +QtNetwork.QSslSocket.encryptedBytesToWrite?4() -> int +QtNetwork.QSslSocket.sslConfiguration?4() -> QSslConfiguration +QtNetwork.QSslSocket.setSslConfiguration?4(QSslConfiguration) +QtNetwork.QSslSocket.peerVerifyError?4(QSslError) +QtNetwork.QSslSocket.encryptedBytesWritten?4(int) +QtNetwork.QSslSocket.setSocketOption?4(QAbstractSocket.SocketOption, QVariant) +QtNetwork.QSslSocket.socketOption?4(QAbstractSocket.SocketOption) -> QVariant +QtNetwork.QSslSocket.ignoreSslErrors?4(unknown-type) +QtNetwork.QSslSocket.peerVerifyName?4() -> QString +QtNetwork.QSslSocket.setPeerVerifyName?4(QString) +QtNetwork.QSslSocket.resume?4() +QtNetwork.QSslSocket.connectToHost?4(QString, int, QIODevice.OpenMode mode=QIODevice.ReadWrite, QAbstractSocket.NetworkLayerProtocol protocol=QAbstractSocket.AnyIPProtocol) +QtNetwork.QSslSocket.disconnectFromHost?4() +QtNetwork.QSslSocket.sslLibraryVersionNumber?4() -> int +QtNetwork.QSslSocket.sslLibraryVersionString?4() -> QString +QtNetwork.QSslSocket.setLocalCertificateChain?4(unknown-type) +QtNetwork.QSslSocket.localCertificateChain?4() -> unknown-type +QtNetwork.QSslSocket.sessionProtocol?4() -> QSsl.SslProtocol +QtNetwork.QSslSocket.sslLibraryBuildVersionNumber?4() -> int +QtNetwork.QSslSocket.sslLibraryBuildVersionString?4() -> QString +QtNetwork.QSslSocket.ocspResponses?4() -> unknown-type +QtNetwork.QSslSocket.sslHandshakeErrors?4() -> unknown-type +QtNetwork.QSslSocket.newSessionTicketReceived?4() +QtNetwork.QTcpServer?1(QObject parent=None) +QtNetwork.QTcpServer.__init__?1(self, QObject parent=None) +QtNetwork.QTcpServer.listen?4(QHostAddress address=QHostAddress.Any, int port=0) -> bool +QtNetwork.QTcpServer.close?4() +QtNetwork.QTcpServer.isListening?4() -> bool +QtNetwork.QTcpServer.setMaxPendingConnections?4(int) +QtNetwork.QTcpServer.maxPendingConnections?4() -> int +QtNetwork.QTcpServer.serverPort?4() -> int +QtNetwork.QTcpServer.serverAddress?4() -> QHostAddress +QtNetwork.QTcpServer.socketDescriptor?4() -> qintptr +QtNetwork.QTcpServer.setSocketDescriptor?4(qintptr) -> bool +QtNetwork.QTcpServer.waitForNewConnection?4(int msecs=0) -> (bool, bool) +QtNetwork.QTcpServer.hasPendingConnections?4() -> bool +QtNetwork.QTcpServer.nextPendingConnection?4() -> QTcpSocket +QtNetwork.QTcpServer.serverError?4() -> QAbstractSocket.SocketError +QtNetwork.QTcpServer.errorString?4() -> QString +QtNetwork.QTcpServer.setProxy?4(QNetworkProxy) +QtNetwork.QTcpServer.proxy?4() -> QNetworkProxy +QtNetwork.QTcpServer.pauseAccepting?4() +QtNetwork.QTcpServer.resumeAccepting?4() +QtNetwork.QTcpServer.incomingConnection?4(qintptr) +QtNetwork.QTcpServer.addPendingConnection?4(QTcpSocket) +QtNetwork.QTcpServer.newConnection?4() +QtNetwork.QTcpServer.acceptError?4(QAbstractSocket.SocketError) +QtNetwork.QUdpSocket?1(QObject parent=None) +QtNetwork.QUdpSocket.__init__?1(self, QObject parent=None) +QtNetwork.QUdpSocket.hasPendingDatagrams?4() -> bool +QtNetwork.QUdpSocket.pendingDatagramSize?4() -> int +QtNetwork.QUdpSocket.readDatagram?4(int) -> (Any, QHostAddress, int) +QtNetwork.QUdpSocket.writeDatagram?4(bytes, QHostAddress, int) -> int +QtNetwork.QUdpSocket.writeDatagram?4(QByteArray, QHostAddress, int) -> int +QtNetwork.QUdpSocket.joinMulticastGroup?4(QHostAddress) -> bool +QtNetwork.QUdpSocket.joinMulticastGroup?4(QHostAddress, QNetworkInterface) -> bool +QtNetwork.QUdpSocket.leaveMulticastGroup?4(QHostAddress) -> bool +QtNetwork.QUdpSocket.leaveMulticastGroup?4(QHostAddress, QNetworkInterface) -> bool +QtNetwork.QUdpSocket.multicastInterface?4() -> QNetworkInterface +QtNetwork.QUdpSocket.setMulticastInterface?4(QNetworkInterface) +QtNetwork.QUdpSocket.receiveDatagram?4(int maxSize=-1) -> QNetworkDatagram +QtNetwork.QUdpSocket.writeDatagram?4(QNetworkDatagram) -> int +QtGui.qt_set_sequence_auto_mnemonic?4(bool) +QtGui.qFuzzyCompare?4(QMatrix4x4, QMatrix4x4) -> bool +QtGui.qPixelFormatRgba?4(int, int, int, int, QPixelFormat.AlphaUsage, QPixelFormat.AlphaPosition, QPixelFormat.AlphaPremultiplied premultiplied=QPixelFormat.NotPremultiplied, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedInteger) -> QPixelFormat +QtGui.qPixelFormatGrayscale?4(int, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedInteger) -> QPixelFormat +QtGui.qPixelFormatCmyk?4(int, int alphaSize=0, QPixelFormat.AlphaUsage alphaUsage=QPixelFormat.IgnoresAlpha, QPixelFormat.AlphaPosition alphaPosition=QPixelFormat.AtBeginning, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedInteger) -> QPixelFormat +QtGui.qPixelFormatHsl?4(int, int alphaSize=0, QPixelFormat.AlphaUsage alphaUsage=QPixelFormat.IgnoresAlpha, QPixelFormat.AlphaPosition alphaPosition=QPixelFormat.AtBeginning, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.FloatingPoint) -> QPixelFormat +QtGui.qPixelFormatHsv?4(int, int alphaSize=0, QPixelFormat.AlphaUsage alphaUsage=QPixelFormat.IgnoresAlpha, QPixelFormat.AlphaPosition alphaPosition=QPixelFormat.AtBeginning, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.FloatingPoint) -> QPixelFormat +QtGui.qPixelFormatYuv?4(QPixelFormat.YUVLayout, int alphaSize=0, QPixelFormat.AlphaUsage alphaUsage=QPixelFormat.IgnoresAlpha, QPixelFormat.AlphaPosition alphaPosition=QPixelFormat.AtBeginning, QPixelFormat.AlphaPremultiplied premultiplied=QPixelFormat.NotPremultiplied, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedByte, QPixelFormat.ByteOrder byteOrder=QPixelFormat.LittleEndian) -> QPixelFormat +QtGui.qPixelFormatAlpha?4(int, QPixelFormat.TypeInterpretation typeInterpretation=QPixelFormat.UnsignedInteger) -> QPixelFormat +QtGui.qFuzzyCompare?4(QQuaternion, QQuaternion) -> bool +QtGui.qRgba64?4(int, int, int, int) -> QRgba64 +QtGui.qRgba64?4(int) -> QRgba64 +QtGui.qPremultiply?4(QRgba64) -> QRgba64 +QtGui.qUnpremultiply?4(QRgba64) -> QRgba64 +QtGui.qRed?4(QRgba64) -> int +QtGui.qGreen?4(QRgba64) -> int +QtGui.qBlue?4(QRgba64) -> int +QtGui.qAlpha?4(QRgba64) -> int +QtGui.qRed?4(int) -> int +QtGui.qGreen?4(int) -> int +QtGui.qBlue?4(int) -> int +QtGui.qAlpha?4(int) -> int +QtGui.qRgb?4(int, int, int) -> int +QtGui.qRgba?4(int, int, int, int) -> int +QtGui.qGray?4(int, int, int) -> int +QtGui.qGray?4(int) -> int +QtGui.qIsGray?4(int) -> bool +QtGui.qPremultiply?4(int) -> int +QtGui.qUnpremultiply?4(int) -> int +QtGui.qFuzzyCompare?4(QTransform, QTransform) -> bool +QtGui.qFuzzyCompare?4(QVector2D, QVector2D) -> bool +QtGui.qFuzzyCompare?4(QVector3D, QVector3D) -> bool +QtGui.qFuzzyCompare?4(QVector4D, QVector4D) -> bool +QtGui.QAbstractTextDocumentLayout?1(QTextDocument) +QtGui.QAbstractTextDocumentLayout.__init__?1(self, QTextDocument) +QtGui.QAbstractTextDocumentLayout.draw?4(QPainter, QAbstractTextDocumentLayout.PaintContext) +QtGui.QAbstractTextDocumentLayout.hitTest?4(QPointF, Qt.HitTestAccuracy) -> int +QtGui.QAbstractTextDocumentLayout.anchorAt?4(QPointF) -> QString +QtGui.QAbstractTextDocumentLayout.pageCount?4() -> int +QtGui.QAbstractTextDocumentLayout.documentSize?4() -> QSizeF +QtGui.QAbstractTextDocumentLayout.frameBoundingRect?4(QTextFrame) -> QRectF +QtGui.QAbstractTextDocumentLayout.blockBoundingRect?4(QTextBlock) -> QRectF +QtGui.QAbstractTextDocumentLayout.setPaintDevice?4(QPaintDevice) +QtGui.QAbstractTextDocumentLayout.paintDevice?4() -> QPaintDevice +QtGui.QAbstractTextDocumentLayout.document?4() -> QTextDocument +QtGui.QAbstractTextDocumentLayout.registerHandler?4(int, QObject) +QtGui.QAbstractTextDocumentLayout.unregisterHandler?4(int, QObject component=None) +QtGui.QAbstractTextDocumentLayout.handlerForObject?4(int) -> QTextObjectInterface +QtGui.QAbstractTextDocumentLayout.update?4(QRectF rect=QRectF(0, 0, 1e+09, 1e+09)) +QtGui.QAbstractTextDocumentLayout.documentSizeChanged?4(QSizeF) +QtGui.QAbstractTextDocumentLayout.pageCountChanged?4(int) +QtGui.QAbstractTextDocumentLayout.updateBlock?4(QTextBlock) +QtGui.QAbstractTextDocumentLayout.documentChanged?4(int, int, int) +QtGui.QAbstractTextDocumentLayout.resizeInlineObject?4(QTextInlineObject, int, QTextFormat) +QtGui.QAbstractTextDocumentLayout.positionInlineObject?4(QTextInlineObject, int, QTextFormat) +QtGui.QAbstractTextDocumentLayout.drawInlineObject?4(QPainter, QRectF, QTextInlineObject, int, QTextFormat) +QtGui.QAbstractTextDocumentLayout.format?4(int) -> QTextCharFormat +QtGui.QAbstractTextDocumentLayout.imageAt?4(QPointF) -> QString +QtGui.QAbstractTextDocumentLayout.formatAt?4(QPointF) -> QTextFormat +QtGui.QAbstractTextDocumentLayout.blockWithMarkerAt?4(QPointF) -> QTextBlock +QtGui.QAbstractTextDocumentLayout.Selection.cursor?7 +QtGui.QAbstractTextDocumentLayout.Selection.format?7 +QtGui.QAbstractTextDocumentLayout.Selection?1() +QtGui.QAbstractTextDocumentLayout.Selection.__init__?1(self) +QtGui.QAbstractTextDocumentLayout.Selection?1(QAbstractTextDocumentLayout.Selection) +QtGui.QAbstractTextDocumentLayout.Selection.__init__?1(self, QAbstractTextDocumentLayout.Selection) +QtGui.QAbstractTextDocumentLayout.PaintContext.clip?7 +QtGui.QAbstractTextDocumentLayout.PaintContext.cursorPosition?7 +QtGui.QAbstractTextDocumentLayout.PaintContext.palette?7 +QtGui.QAbstractTextDocumentLayout.PaintContext.selections?7 +QtGui.QAbstractTextDocumentLayout.PaintContext?1() +QtGui.QAbstractTextDocumentLayout.PaintContext.__init__?1(self) +QtGui.QAbstractTextDocumentLayout.PaintContext?1(QAbstractTextDocumentLayout.PaintContext) +QtGui.QAbstractTextDocumentLayout.PaintContext.__init__?1(self, QAbstractTextDocumentLayout.PaintContext) +QtGui.QTextObjectInterface?1() +QtGui.QTextObjectInterface.__init__?1(self) +QtGui.QTextObjectInterface?1(QTextObjectInterface) +QtGui.QTextObjectInterface.__init__?1(self, QTextObjectInterface) +QtGui.QTextObjectInterface.intrinsicSize?4(QTextDocument, int, QTextFormat) -> QSizeF +QtGui.QTextObjectInterface.drawObject?4(QPainter, QRectF, QTextDocument, int, QTextFormat) +QtGui.QBackingStore?1(QWindow) +QtGui.QBackingStore.__init__?1(self, QWindow) +QtGui.QBackingStore.window?4() -> QWindow +QtGui.QBackingStore.paintDevice?4() -> QPaintDevice +QtGui.QBackingStore.flush?4(QRegion, QWindow window=None, QPoint offset=QPoint()) +QtGui.QBackingStore.resize?4(QSize) +QtGui.QBackingStore.size?4() -> QSize +QtGui.QBackingStore.scroll?4(QRegion, int, int) -> bool +QtGui.QBackingStore.beginPaint?4(QRegion) +QtGui.QBackingStore.endPaint?4() +QtGui.QBackingStore.setStaticContents?4(QRegion) +QtGui.QBackingStore.staticContents?4() -> QRegion +QtGui.QBackingStore.hasStaticContents?4() -> bool +QtGui.QPaintDevice.PaintDeviceMetric?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmWidth?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmHeight?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmWidthMM?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmHeightMM?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmNumColors?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmDepth?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmDpiX?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmDpiY?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmPhysicalDpiX?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmPhysicalDpiY?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmDevicePixelRatio?10 +QtGui.QPaintDevice.PaintDeviceMetric.PdmDevicePixelRatioScaled?10 +QtGui.QPaintDevice?1() +QtGui.QPaintDevice.__init__?1(self) +QtGui.QPaintDevice.paintEngine?4() -> QPaintEngine +QtGui.QPaintDevice.width?4() -> int +QtGui.QPaintDevice.height?4() -> int +QtGui.QPaintDevice.widthMM?4() -> int +QtGui.QPaintDevice.heightMM?4() -> int +QtGui.QPaintDevice.logicalDpiX?4() -> int +QtGui.QPaintDevice.logicalDpiY?4() -> int +QtGui.QPaintDevice.physicalDpiX?4() -> int +QtGui.QPaintDevice.physicalDpiY?4() -> int +QtGui.QPaintDevice.depth?4() -> int +QtGui.QPaintDevice.paintingActive?4() -> bool +QtGui.QPaintDevice.colorCount?4() -> int +QtGui.QPaintDevice.devicePixelRatio?4() -> int +QtGui.QPaintDevice.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QPaintDevice.devicePixelRatioF?4() -> float +QtGui.QPaintDevice.devicePixelRatioFScale?4() -> float +QtGui.QPixmap?1() +QtGui.QPixmap.__init__?1(self) +QtGui.QPixmap?1(int, int) +QtGui.QPixmap.__init__?1(self, int, int) +QtGui.QPixmap?1(QSize) +QtGui.QPixmap.__init__?1(self, QSize) +QtGui.QPixmap?1(QString, str format=None, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) +QtGui.QPixmap.__init__?1(self, QString, str format=None, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) +QtGui.QPixmap?1(List) +QtGui.QPixmap.__init__?1(self, List) +QtGui.QPixmap?1(QPixmap) +QtGui.QPixmap.__init__?1(self, QPixmap) +QtGui.QPixmap?1(QVariant) +QtGui.QPixmap.__init__?1(self, QVariant) +QtGui.QPixmap.isNull?4() -> bool +QtGui.QPixmap.devType?4() -> int +QtGui.QPixmap.width?4() -> int +QtGui.QPixmap.height?4() -> int +QtGui.QPixmap.size?4() -> QSize +QtGui.QPixmap.rect?4() -> QRect +QtGui.QPixmap.depth?4() -> int +QtGui.QPixmap.defaultDepth?4() -> int +QtGui.QPixmap.fill?4(QColor color=Qt.GlobalColor.white) +QtGui.QPixmap.mask?4() -> QBitmap +QtGui.QPixmap.setMask?4(QBitmap) +QtGui.QPixmap.hasAlpha?4() -> bool +QtGui.QPixmap.hasAlphaChannel?4() -> bool +QtGui.QPixmap.createHeuristicMask?4(bool clipTight=True) -> QBitmap +QtGui.QPixmap.createMaskFromColor?4(QColor, Qt.MaskMode mode=Qt.MaskInColor) -> QBitmap +QtGui.QPixmap.scaled?4(int, int, Qt.AspectRatioMode aspectRatioMode=Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode=Qt.FastTransformation) -> QPixmap +QtGui.QPixmap.scaled?4(QSize, Qt.AspectRatioMode aspectRatioMode=Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode=Qt.FastTransformation) -> QPixmap +QtGui.QPixmap.scaledToWidth?4(int, Qt.TransformationMode mode=Qt.FastTransformation) -> QPixmap +QtGui.QPixmap.scaledToHeight?4(int, Qt.TransformationMode mode=Qt.FastTransformation) -> QPixmap +QtGui.QPixmap.toImage?4() -> QImage +QtGui.QPixmap.fromImage?4(QImage, Qt.ImageConversionFlags flags=Qt.AutoColor) -> QPixmap +QtGui.QPixmap.fromImageReader?4(QImageReader, Qt.ImageConversionFlags flags=Qt.AutoColor) -> QPixmap +QtGui.QPixmap.convertFromImage?4(QImage, Qt.ImageConversionFlags flags=Qt.AutoColor) -> bool +QtGui.QPixmap.load?4(QString, str format=None, Qt.ImageConversionFlags flags=Qt.AutoColor) -> bool +QtGui.QPixmap.loadFromData?4(bytes, str format=None, Qt.ImageConversionFlags flags=Qt.AutoColor) -> bool +QtGui.QPixmap.loadFromData?4(QByteArray, str format=None, Qt.ImageConversionFlags flags=Qt.AutoColor) -> bool +QtGui.QPixmap.save?4(QString, str format=None, int quality=-1) -> bool +QtGui.QPixmap.save?4(QIODevice, str format=None, int quality=-1) -> bool +QtGui.QPixmap.copy?4(QRect rect=QRect()) -> QPixmap +QtGui.QPixmap.detach?4() +QtGui.QPixmap.isQBitmap?4() -> bool +QtGui.QPixmap.paintEngine?4() -> QPaintEngine +QtGui.QPixmap.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QPixmap.copy?4(int, int, int, int) -> QPixmap +QtGui.QPixmap.transformed?4(QTransform, Qt.TransformationMode mode=Qt.FastTransformation) -> QPixmap +QtGui.QPixmap.trueMatrix?4(QTransform, int, int) -> QTransform +QtGui.QPixmap.cacheKey?4() -> int +QtGui.QPixmap.scroll?4(int, int, QRect) -> QRegion +QtGui.QPixmap.scroll?4(int, int, int, int, int, int) -> QRegion +QtGui.QPixmap.swap?4(QPixmap) +QtGui.QPixmap.devicePixelRatio?4() -> float +QtGui.QPixmap.setDevicePixelRatio?4(float) +QtGui.QBitmap?1() +QtGui.QBitmap.__init__?1(self) +QtGui.QBitmap?1(QBitmap) +QtGui.QBitmap.__init__?1(self, QBitmap) +QtGui.QBitmap?1(QPixmap) +QtGui.QBitmap.__init__?1(self, QPixmap) +QtGui.QBitmap?1(int, int) +QtGui.QBitmap.__init__?1(self, int, int) +QtGui.QBitmap?1(QSize) +QtGui.QBitmap.__init__?1(self, QSize) +QtGui.QBitmap?1(QString, str format=None) +QtGui.QBitmap.__init__?1(self, QString, str format=None) +QtGui.QBitmap?1(QVariant) +QtGui.QBitmap.__init__?1(self, QVariant) +QtGui.QBitmap.clear?4() +QtGui.QBitmap.fromImage?4(QImage, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) -> QBitmap +QtGui.QBitmap.fromData?4(QSize, bytes, QImage.Format format=QImage.Format_MonoLSB) -> QBitmap +QtGui.QBitmap.transformed?4(QTransform) -> QBitmap +QtGui.QBitmap.swap?4(QBitmap) +QtGui.QColor.NameFormat?10 +QtGui.QColor.NameFormat.HexRgb?10 +QtGui.QColor.NameFormat.HexArgb?10 +QtGui.QColor.Spec?10 +QtGui.QColor.Spec.Invalid?10 +QtGui.QColor.Spec.Rgb?10 +QtGui.QColor.Spec.Hsv?10 +QtGui.QColor.Spec.Cmyk?10 +QtGui.QColor.Spec.Hsl?10 +QtGui.QColor.Spec.ExtendedRgb?10 +QtGui.QColor?1(Qt.GlobalColor) +QtGui.QColor.__init__?1(self, Qt.GlobalColor) +QtGui.QColor?1(int) +QtGui.QColor.__init__?1(self, int) +QtGui.QColor?1(QRgba64) +QtGui.QColor.__init__?1(self, QRgba64) +QtGui.QColor?1(QVariant) +QtGui.QColor.__init__?1(self, QVariant) +QtGui.QColor?1() +QtGui.QColor.__init__?1(self) +QtGui.QColor?1(int, int, int, int alpha=255) +QtGui.QColor.__init__?1(self, int, int, int, int alpha=255) +QtGui.QColor?1(QString) +QtGui.QColor.__init__?1(self, QString) +QtGui.QColor?1(QColor) +QtGui.QColor.__init__?1(self, QColor) +QtGui.QColor.name?4() -> QString +QtGui.QColor.setNamedColor?4(QString) +QtGui.QColor.colorNames?4() -> QStringList +QtGui.QColor.spec?4() -> QColor.Spec +QtGui.QColor.alpha?4() -> int +QtGui.QColor.setAlpha?4(int) +QtGui.QColor.alphaF?4() -> float +QtGui.QColor.setAlphaF?4(float) +QtGui.QColor.red?4() -> int +QtGui.QColor.green?4() -> int +QtGui.QColor.blue?4() -> int +QtGui.QColor.setRed?4(int) +QtGui.QColor.setGreen?4(int) +QtGui.QColor.setBlue?4(int) +QtGui.QColor.redF?4() -> float +QtGui.QColor.greenF?4() -> float +QtGui.QColor.blueF?4() -> float +QtGui.QColor.setRedF?4(float) +QtGui.QColor.setGreenF?4(float) +QtGui.QColor.setBlueF?4(float) +QtGui.QColor.getRgb?4() -> (int, int, int, int) +QtGui.QColor.setRgb?4(int, int, int, int alpha=255) +QtGui.QColor.getRgbF?4() -> (float, float, float, float) +QtGui.QColor.setRgbF?4(float, float, float, float alpha=1) +QtGui.QColor.rgba?4() -> int +QtGui.QColor.setRgba?4(int) +QtGui.QColor.rgb?4() -> int +QtGui.QColor.setRgb?4(int) +QtGui.QColor.hue?4() -> int +QtGui.QColor.saturation?4() -> int +QtGui.QColor.value?4() -> int +QtGui.QColor.hueF?4() -> float +QtGui.QColor.saturationF?4() -> float +QtGui.QColor.valueF?4() -> float +QtGui.QColor.getHsv?4() -> (int, int, int, int) +QtGui.QColor.setHsv?4(int, int, int, int alpha=255) +QtGui.QColor.getHsvF?4() -> (float, float, float, float) +QtGui.QColor.setHsvF?4(float, float, float, float alpha=1) +QtGui.QColor.cyan?4() -> int +QtGui.QColor.magenta?4() -> int +QtGui.QColor.yellow?4() -> int +QtGui.QColor.black?4() -> int +QtGui.QColor.cyanF?4() -> float +QtGui.QColor.magentaF?4() -> float +QtGui.QColor.yellowF?4() -> float +QtGui.QColor.blackF?4() -> float +QtGui.QColor.getCmyk?4() -> (int, int, int, int, int) +QtGui.QColor.setCmyk?4(int, int, int, int, int alpha=255) +QtGui.QColor.getCmykF?4() -> (float, float, float, float, float) +QtGui.QColor.setCmykF?4(float, float, float, float, float alpha=1) +QtGui.QColor.toRgb?4() -> QColor +QtGui.QColor.toHsv?4() -> QColor +QtGui.QColor.toCmyk?4() -> QColor +QtGui.QColor.convertTo?4(QColor.Spec) -> QColor +QtGui.QColor.fromRgb?4(int) -> QColor +QtGui.QColor.fromRgba?4(int) -> QColor +QtGui.QColor.fromRgb?4(int, int, int, int alpha=255) -> QColor +QtGui.QColor.fromRgbF?4(float, float, float, float alpha=1) -> QColor +QtGui.QColor.fromHsv?4(int, int, int, int alpha=255) -> QColor +QtGui.QColor.fromHsvF?4(float, float, float, float alpha=1) -> QColor +QtGui.QColor.fromCmyk?4(int, int, int, int, int alpha=255) -> QColor +QtGui.QColor.fromCmykF?4(float, float, float, float, float alpha=1) -> QColor +QtGui.QColor.isValid?4() -> bool +QtGui.QColor.lighter?4(int factor=150) -> QColor +QtGui.QColor.darker?4(int factor=200) -> QColor +QtGui.QColor.hsvHue?4() -> int +QtGui.QColor.hsvSaturation?4() -> int +QtGui.QColor.hsvHueF?4() -> float +QtGui.QColor.hsvSaturationF?4() -> float +QtGui.QColor.hslHue?4() -> int +QtGui.QColor.hslSaturation?4() -> int +QtGui.QColor.lightness?4() -> int +QtGui.QColor.hslHueF?4() -> float +QtGui.QColor.hslSaturationF?4() -> float +QtGui.QColor.lightnessF?4() -> float +QtGui.QColor.getHsl?4() -> (int, int, int, int) +QtGui.QColor.setHsl?4(int, int, int, int alpha=255) +QtGui.QColor.getHslF?4() -> (float, float, float, float) +QtGui.QColor.setHslF?4(float, float, float, float alpha=1) +QtGui.QColor.toHsl?4() -> QColor +QtGui.QColor.fromHsl?4(int, int, int, int alpha=255) -> QColor +QtGui.QColor.fromHslF?4(float, float, float, float alpha=1) -> QColor +QtGui.QColor.isValidColor?4(QString) -> bool +QtGui.QColor.name?4(QColor.NameFormat) -> QString +QtGui.QColor.rgba64?4() -> QRgba64 +QtGui.QColor.setRgba64?4(QRgba64) +QtGui.QColor.fromRgba64?4(int, int, int, int alpha=65535) -> QColor +QtGui.QColor.fromRgba64?4(QRgba64) -> QColor +QtGui.QColor.toExtendedRgb?4() -> QColor +QtGui.QColorConstants.Black?7 +QtGui.QColorConstants.Blue?7 +QtGui.QColorConstants.Color0?7 +QtGui.QColorConstants.Color1?7 +QtGui.QColorConstants.Cyan?7 +QtGui.QColorConstants.DarkBlue?7 +QtGui.QColorConstants.DarkCyan?7 +QtGui.QColorConstants.DarkGray?7 +QtGui.QColorConstants.DarkGreen?7 +QtGui.QColorConstants.DarkMagenta?7 +QtGui.QColorConstants.DarkRed?7 +QtGui.QColorConstants.DarkYellow?7 +QtGui.QColorConstants.Gray?7 +QtGui.QColorConstants.Green?7 +QtGui.QColorConstants.LightGray?7 +QtGui.QColorConstants.Magenta?7 +QtGui.QColorConstants.Red?7 +QtGui.QColorConstants.Transparent?7 +QtGui.QColorConstants.White?7 +QtGui.QColorConstants.Yellow?7 +QtGui.QColorConstants.Svg.aliceblue?7 +QtGui.QColorConstants.Svg.antiquewhite?7 +QtGui.QColorConstants.Svg.aqua?7 +QtGui.QColorConstants.Svg.aquamarine?7 +QtGui.QColorConstants.Svg.azure?7 +QtGui.QColorConstants.Svg.beige?7 +QtGui.QColorConstants.Svg.bisque?7 +QtGui.QColorConstants.Svg.black?7 +QtGui.QColorConstants.Svg.blanchedalmond?7 +QtGui.QColorConstants.Svg.blue?7 +QtGui.QColorConstants.Svg.blueviolet?7 +QtGui.QColorConstants.Svg.brown?7 +QtGui.QColorConstants.Svg.burlywood?7 +QtGui.QColorConstants.Svg.cadetblue?7 +QtGui.QColorConstants.Svg.chartreuse?7 +QtGui.QColorConstants.Svg.chocolate?7 +QtGui.QColorConstants.Svg.coral?7 +QtGui.QColorConstants.Svg.cornflowerblue?7 +QtGui.QColorConstants.Svg.cornsilk?7 +QtGui.QColorConstants.Svg.crimson?7 +QtGui.QColorConstants.Svg.cyan?7 +QtGui.QColorConstants.Svg.darkblue?7 +QtGui.QColorConstants.Svg.darkcyan?7 +QtGui.QColorConstants.Svg.darkgoldenrod?7 +QtGui.QColorConstants.Svg.darkgray?7 +QtGui.QColorConstants.Svg.darkgreen?7 +QtGui.QColorConstants.Svg.darkgrey?7 +QtGui.QColorConstants.Svg.darkkhaki?7 +QtGui.QColorConstants.Svg.darkmagenta?7 +QtGui.QColorConstants.Svg.darkolivegreen?7 +QtGui.QColorConstants.Svg.darkorange?7 +QtGui.QColorConstants.Svg.darkorchid?7 +QtGui.QColorConstants.Svg.darkred?7 +QtGui.QColorConstants.Svg.darksalmon?7 +QtGui.QColorConstants.Svg.darkseagreen?7 +QtGui.QColorConstants.Svg.darkslateblue?7 +QtGui.QColorConstants.Svg.darkslategray?7 +QtGui.QColorConstants.Svg.darkslategrey?7 +QtGui.QColorConstants.Svg.darkturquoise?7 +QtGui.QColorConstants.Svg.darkviolet?7 +QtGui.QColorConstants.Svg.deeppink?7 +QtGui.QColorConstants.Svg.deepskyblue?7 +QtGui.QColorConstants.Svg.dimgray?7 +QtGui.QColorConstants.Svg.dimgrey?7 +QtGui.QColorConstants.Svg.dodgerblue?7 +QtGui.QColorConstants.Svg.firebrick?7 +QtGui.QColorConstants.Svg.floralwhite?7 +QtGui.QColorConstants.Svg.forestgreen?7 +QtGui.QColorConstants.Svg.fuchsia?7 +QtGui.QColorConstants.Svg.gainsboro?7 +QtGui.QColorConstants.Svg.ghostwhite?7 +QtGui.QColorConstants.Svg.gold?7 +QtGui.QColorConstants.Svg.goldenrod?7 +QtGui.QColorConstants.Svg.gray?7 +QtGui.QColorConstants.Svg.green?7 +QtGui.QColorConstants.Svg.greenyellow?7 +QtGui.QColorConstants.Svg.grey?7 +QtGui.QColorConstants.Svg.honeydew?7 +QtGui.QColorConstants.Svg.hotpink?7 +QtGui.QColorConstants.Svg.indianred?7 +QtGui.QColorConstants.Svg.indigo?7 +QtGui.QColorConstants.Svg.ivory?7 +QtGui.QColorConstants.Svg.khaki?7 +QtGui.QColorConstants.Svg.lavender?7 +QtGui.QColorConstants.Svg.lavenderblush?7 +QtGui.QColorConstants.Svg.lawngreen?7 +QtGui.QColorConstants.Svg.lemonchiffon?7 +QtGui.QColorConstants.Svg.lightblue?7 +QtGui.QColorConstants.Svg.lightcoral?7 +QtGui.QColorConstants.Svg.lightcyan?7 +QtGui.QColorConstants.Svg.lightgoldenrodyellow?7 +QtGui.QColorConstants.Svg.lightgray?7 +QtGui.QColorConstants.Svg.lightgreen?7 +QtGui.QColorConstants.Svg.lightgrey?7 +QtGui.QColorConstants.Svg.lightpink?7 +QtGui.QColorConstants.Svg.lightsalmon?7 +QtGui.QColorConstants.Svg.lightseagreen?7 +QtGui.QColorConstants.Svg.lightskyblue?7 +QtGui.QColorConstants.Svg.lightslategray?7 +QtGui.QColorConstants.Svg.lightslategrey?7 +QtGui.QColorConstants.Svg.lightsteelblue?7 +QtGui.QColorConstants.Svg.lightyellow?7 +QtGui.QColorConstants.Svg.lime?7 +QtGui.QColorConstants.Svg.limegreen?7 +QtGui.QColorConstants.Svg.linen?7 +QtGui.QColorConstants.Svg.magenta?7 +QtGui.QColorConstants.Svg.maroon?7 +QtGui.QColorConstants.Svg.mediumaquamarine?7 +QtGui.QColorConstants.Svg.mediumblue?7 +QtGui.QColorConstants.Svg.mediumorchid?7 +QtGui.QColorConstants.Svg.mediumpurple?7 +QtGui.QColorConstants.Svg.mediumseagreen?7 +QtGui.QColorConstants.Svg.mediumslateblue?7 +QtGui.QColorConstants.Svg.mediumspringgreen?7 +QtGui.QColorConstants.Svg.mediumturquoise?7 +QtGui.QColorConstants.Svg.mediumvioletred?7 +QtGui.QColorConstants.Svg.midnightblue?7 +QtGui.QColorConstants.Svg.mintcream?7 +QtGui.QColorConstants.Svg.mistyrose?7 +QtGui.QColorConstants.Svg.moccasin?7 +QtGui.QColorConstants.Svg.navajowhite?7 +QtGui.QColorConstants.Svg.navy?7 +QtGui.QColorConstants.Svg.oldlace?7 +QtGui.QColorConstants.Svg.olive?7 +QtGui.QColorConstants.Svg.olivedrab?7 +QtGui.QColorConstants.Svg.orange?7 +QtGui.QColorConstants.Svg.orangered?7 +QtGui.QColorConstants.Svg.orchid?7 +QtGui.QColorConstants.Svg.palegoldenrod?7 +QtGui.QColorConstants.Svg.palegreen?7 +QtGui.QColorConstants.Svg.paleturquoise?7 +QtGui.QColorConstants.Svg.palevioletred?7 +QtGui.QColorConstants.Svg.papayawhip?7 +QtGui.QColorConstants.Svg.peachpuff?7 +QtGui.QColorConstants.Svg.peru?7 +QtGui.QColorConstants.Svg.pink?7 +QtGui.QColorConstants.Svg.plum?7 +QtGui.QColorConstants.Svg.powderblue?7 +QtGui.QColorConstants.Svg.purple?7 +QtGui.QColorConstants.Svg.red?7 +QtGui.QColorConstants.Svg.rosybrown?7 +QtGui.QColorConstants.Svg.royalblue?7 +QtGui.QColorConstants.Svg.saddlebrown?7 +QtGui.QColorConstants.Svg.salmon?7 +QtGui.QColorConstants.Svg.sandybrown?7 +QtGui.QColorConstants.Svg.seagreen?7 +QtGui.QColorConstants.Svg.seashell?7 +QtGui.QColorConstants.Svg.sienna?7 +QtGui.QColorConstants.Svg.silver?7 +QtGui.QColorConstants.Svg.skyblue?7 +QtGui.QColorConstants.Svg.slateblue?7 +QtGui.QColorConstants.Svg.slategray?7 +QtGui.QColorConstants.Svg.slategrey?7 +QtGui.QColorConstants.Svg.snow?7 +QtGui.QColorConstants.Svg.springgreen?7 +QtGui.QColorConstants.Svg.steelblue?7 +QtGui.QColorConstants.Svg.tan?7 +QtGui.QColorConstants.Svg.teal?7 +QtGui.QColorConstants.Svg.thistle?7 +QtGui.QColorConstants.Svg.tomato?7 +QtGui.QColorConstants.Svg.turquoise?7 +QtGui.QColorConstants.Svg.violet?7 +QtGui.QColorConstants.Svg.wheat?7 +QtGui.QColorConstants.Svg.white?7 +QtGui.QColorConstants.Svg.whitesmoke?7 +QtGui.QColorConstants.Svg.yellow?7 +QtGui.QColorConstants.Svg.yellowgreen?7 +QtGui.QBrush?1() +QtGui.QBrush.__init__?1(self) +QtGui.QBrush?1(Qt.BrushStyle) +QtGui.QBrush.__init__?1(self, Qt.BrushStyle) +QtGui.QBrush?1(QColor, Qt.BrushStyle style=Qt.SolidPattern) +QtGui.QBrush.__init__?1(self, QColor, Qt.BrushStyle style=Qt.SolidPattern) +QtGui.QBrush?1(QColor, QPixmap) +QtGui.QBrush.__init__?1(self, QColor, QPixmap) +QtGui.QBrush?1(QPixmap) +QtGui.QBrush.__init__?1(self, QPixmap) +QtGui.QBrush?1(QImage) +QtGui.QBrush.__init__?1(self, QImage) +QtGui.QBrush?1(QBrush) +QtGui.QBrush.__init__?1(self, QBrush) +QtGui.QBrush?1(QVariant) +QtGui.QBrush.__init__?1(self, QVariant) +QtGui.QBrush.setStyle?4(Qt.BrushStyle) +QtGui.QBrush.texture?4() -> QPixmap +QtGui.QBrush.setTexture?4(QPixmap) +QtGui.QBrush.setColor?4(QColor) +QtGui.QBrush.gradient?4() -> QGradient +QtGui.QBrush.isOpaque?4() -> bool +QtGui.QBrush.setColor?4(Qt.GlobalColor) +QtGui.QBrush.style?4() -> Qt.BrushStyle +QtGui.QBrush.color?4() -> QColor +QtGui.QBrush.setTextureImage?4(QImage) +QtGui.QBrush.textureImage?4() -> QImage +QtGui.QBrush.setTransform?4(QTransform) +QtGui.QBrush.transform?4() -> QTransform +QtGui.QBrush.swap?4(QBrush) +QtGui.QGradient.Preset?10 +QtGui.QGradient.Preset.WarmFlame?10 +QtGui.QGradient.Preset.NightFade?10 +QtGui.QGradient.Preset.SpringWarmth?10 +QtGui.QGradient.Preset.JuicyPeach?10 +QtGui.QGradient.Preset.YoungPassion?10 +QtGui.QGradient.Preset.LadyLips?10 +QtGui.QGradient.Preset.SunnyMorning?10 +QtGui.QGradient.Preset.RainyAshville?10 +QtGui.QGradient.Preset.FrozenDreams?10 +QtGui.QGradient.Preset.WinterNeva?10 +QtGui.QGradient.Preset.DustyGrass?10 +QtGui.QGradient.Preset.TemptingAzure?10 +QtGui.QGradient.Preset.HeavyRain?10 +QtGui.QGradient.Preset.AmyCrisp?10 +QtGui.QGradient.Preset.MeanFruit?10 +QtGui.QGradient.Preset.DeepBlue?10 +QtGui.QGradient.Preset.RipeMalinka?10 +QtGui.QGradient.Preset.CloudyKnoxville?10 +QtGui.QGradient.Preset.MalibuBeach?10 +QtGui.QGradient.Preset.NewLife?10 +QtGui.QGradient.Preset.TrueSunset?10 +QtGui.QGradient.Preset.MorpheusDen?10 +QtGui.QGradient.Preset.RareWind?10 +QtGui.QGradient.Preset.NearMoon?10 +QtGui.QGradient.Preset.WildApple?10 +QtGui.QGradient.Preset.SaintPetersburg?10 +QtGui.QGradient.Preset.PlumPlate?10 +QtGui.QGradient.Preset.EverlastingSky?10 +QtGui.QGradient.Preset.HappyFisher?10 +QtGui.QGradient.Preset.Blessing?10 +QtGui.QGradient.Preset.SharpeyeEagle?10 +QtGui.QGradient.Preset.LadogaBottom?10 +QtGui.QGradient.Preset.LemonGate?10 +QtGui.QGradient.Preset.ItmeoBranding?10 +QtGui.QGradient.Preset.ZeusMiracle?10 +QtGui.QGradient.Preset.OldHat?10 +QtGui.QGradient.Preset.StarWine?10 +QtGui.QGradient.Preset.HappyAcid?10 +QtGui.QGradient.Preset.AwesomePine?10 +QtGui.QGradient.Preset.NewYork?10 +QtGui.QGradient.Preset.ShyRainbow?10 +QtGui.QGradient.Preset.MixedHopes?10 +QtGui.QGradient.Preset.FlyHigh?10 +QtGui.QGradient.Preset.StrongBliss?10 +QtGui.QGradient.Preset.FreshMilk?10 +QtGui.QGradient.Preset.SnowAgain?10 +QtGui.QGradient.Preset.FebruaryInk?10 +QtGui.QGradient.Preset.KindSteel?10 +QtGui.QGradient.Preset.SoftGrass?10 +QtGui.QGradient.Preset.GrownEarly?10 +QtGui.QGradient.Preset.SharpBlues?10 +QtGui.QGradient.Preset.ShadyWater?10 +QtGui.QGradient.Preset.DirtyBeauty?10 +QtGui.QGradient.Preset.GreatWhale?10 +QtGui.QGradient.Preset.TeenNotebook?10 +QtGui.QGradient.Preset.PoliteRumors?10 +QtGui.QGradient.Preset.SweetPeriod?10 +QtGui.QGradient.Preset.WideMatrix?10 +QtGui.QGradient.Preset.SoftCherish?10 +QtGui.QGradient.Preset.RedSalvation?10 +QtGui.QGradient.Preset.BurningSpring?10 +QtGui.QGradient.Preset.NightParty?10 +QtGui.QGradient.Preset.SkyGlider?10 +QtGui.QGradient.Preset.HeavenPeach?10 +QtGui.QGradient.Preset.PurpleDivision?10 +QtGui.QGradient.Preset.AquaSplash?10 +QtGui.QGradient.Preset.SpikyNaga?10 +QtGui.QGradient.Preset.LoveKiss?10 +QtGui.QGradient.Preset.CleanMirror?10 +QtGui.QGradient.Preset.PremiumDark?10 +QtGui.QGradient.Preset.ColdEvening?10 +QtGui.QGradient.Preset.CochitiLake?10 +QtGui.QGradient.Preset.SummerGames?10 +QtGui.QGradient.Preset.PassionateBed?10 +QtGui.QGradient.Preset.MountainRock?10 +QtGui.QGradient.Preset.DesertHump?10 +QtGui.QGradient.Preset.JungleDay?10 +QtGui.QGradient.Preset.PhoenixStart?10 +QtGui.QGradient.Preset.OctoberSilence?10 +QtGui.QGradient.Preset.FarawayRiver?10 +QtGui.QGradient.Preset.AlchemistLab?10 +QtGui.QGradient.Preset.OverSun?10 +QtGui.QGradient.Preset.PremiumWhite?10 +QtGui.QGradient.Preset.MarsParty?10 +QtGui.QGradient.Preset.EternalConstance?10 +QtGui.QGradient.Preset.JapanBlush?10 +QtGui.QGradient.Preset.SmilingRain?10 +QtGui.QGradient.Preset.CloudyApple?10 +QtGui.QGradient.Preset.BigMango?10 +QtGui.QGradient.Preset.HealthyWater?10 +QtGui.QGradient.Preset.AmourAmour?10 +QtGui.QGradient.Preset.RiskyConcrete?10 +QtGui.QGradient.Preset.StrongStick?10 +QtGui.QGradient.Preset.ViciousStance?10 +QtGui.QGradient.Preset.PaloAlto?10 +QtGui.QGradient.Preset.HappyMemories?10 +QtGui.QGradient.Preset.MidnightBloom?10 +QtGui.QGradient.Preset.Crystalline?10 +QtGui.QGradient.Preset.PartyBliss?10 +QtGui.QGradient.Preset.ConfidentCloud?10 +QtGui.QGradient.Preset.LeCocktail?10 +QtGui.QGradient.Preset.RiverCity?10 +QtGui.QGradient.Preset.FrozenBerry?10 +QtGui.QGradient.Preset.ChildCare?10 +QtGui.QGradient.Preset.FlyingLemon?10 +QtGui.QGradient.Preset.NewRetrowave?10 +QtGui.QGradient.Preset.HiddenJaguar?10 +QtGui.QGradient.Preset.AboveTheSky?10 +QtGui.QGradient.Preset.Nega?10 +QtGui.QGradient.Preset.DenseWater?10 +QtGui.QGradient.Preset.Seashore?10 +QtGui.QGradient.Preset.MarbleWall?10 +QtGui.QGradient.Preset.CheerfulCaramel?10 +QtGui.QGradient.Preset.NightSky?10 +QtGui.QGradient.Preset.MagicLake?10 +QtGui.QGradient.Preset.YoungGrass?10 +QtGui.QGradient.Preset.ColorfulPeach?10 +QtGui.QGradient.Preset.GentleCare?10 +QtGui.QGradient.Preset.PlumBath?10 +QtGui.QGradient.Preset.HappyUnicorn?10 +QtGui.QGradient.Preset.AfricanField?10 +QtGui.QGradient.Preset.SolidStone?10 +QtGui.QGradient.Preset.OrangeJuice?10 +QtGui.QGradient.Preset.GlassWater?10 +QtGui.QGradient.Preset.NorthMiracle?10 +QtGui.QGradient.Preset.FruitBlend?10 +QtGui.QGradient.Preset.MillenniumPine?10 +QtGui.QGradient.Preset.HighFlight?10 +QtGui.QGradient.Preset.MoleHall?10 +QtGui.QGradient.Preset.SpaceShift?10 +QtGui.QGradient.Preset.ForestInei?10 +QtGui.QGradient.Preset.RoyalGarden?10 +QtGui.QGradient.Preset.RichMetal?10 +QtGui.QGradient.Preset.JuicyCake?10 +QtGui.QGradient.Preset.SmartIndigo?10 +QtGui.QGradient.Preset.SandStrike?10 +QtGui.QGradient.Preset.NorseBeauty?10 +QtGui.QGradient.Preset.AquaGuidance?10 +QtGui.QGradient.Preset.SunVeggie?10 +QtGui.QGradient.Preset.SeaLord?10 +QtGui.QGradient.Preset.BlackSea?10 +QtGui.QGradient.Preset.GrassShampoo?10 +QtGui.QGradient.Preset.LandingAircraft?10 +QtGui.QGradient.Preset.WitchDance?10 +QtGui.QGradient.Preset.SleeplessNight?10 +QtGui.QGradient.Preset.AngelCare?10 +QtGui.QGradient.Preset.CrystalRiver?10 +QtGui.QGradient.Preset.SoftLipstick?10 +QtGui.QGradient.Preset.SaltMountain?10 +QtGui.QGradient.Preset.PerfectWhite?10 +QtGui.QGradient.Preset.FreshOasis?10 +QtGui.QGradient.Preset.StrictNovember?10 +QtGui.QGradient.Preset.MorningSalad?10 +QtGui.QGradient.Preset.DeepRelief?10 +QtGui.QGradient.Preset.SeaStrike?10 +QtGui.QGradient.Preset.NightCall?10 +QtGui.QGradient.Preset.SupremeSky?10 +QtGui.QGradient.Preset.LightBlue?10 +QtGui.QGradient.Preset.MindCrawl?10 +QtGui.QGradient.Preset.LilyMeadow?10 +QtGui.QGradient.Preset.SugarLollipop?10 +QtGui.QGradient.Preset.SweetDessert?10 +QtGui.QGradient.Preset.MagicRay?10 +QtGui.QGradient.Preset.TeenParty?10 +QtGui.QGradient.Preset.FrozenHeat?10 +QtGui.QGradient.Preset.GagarinView?10 +QtGui.QGradient.Preset.FabledSunset?10 +QtGui.QGradient.Preset.PerfectBlue?10 +QtGui.QGradient.Preset.NumPresets?10 +QtGui.QGradient.Spread?10 +QtGui.QGradient.Spread.PadSpread?10 +QtGui.QGradient.Spread.ReflectSpread?10 +QtGui.QGradient.Spread.RepeatSpread?10 +QtGui.QGradient.Type?10 +QtGui.QGradient.Type.LinearGradient?10 +QtGui.QGradient.Type.RadialGradient?10 +QtGui.QGradient.Type.ConicalGradient?10 +QtGui.QGradient.Type.NoGradient?10 +QtGui.QGradient.CoordinateMode?10 +QtGui.QGradient.CoordinateMode.LogicalMode?10 +QtGui.QGradient.CoordinateMode.StretchToDeviceMode?10 +QtGui.QGradient.CoordinateMode.ObjectBoundingMode?10 +QtGui.QGradient.CoordinateMode.ObjectMode?10 +QtGui.QGradient?1() +QtGui.QGradient.__init__?1(self) +QtGui.QGradient?1(QGradient.Preset) +QtGui.QGradient.__init__?1(self, QGradient.Preset) +QtGui.QGradient?1(QGradient) +QtGui.QGradient.__init__?1(self, QGradient) +QtGui.QGradient.type?4() -> QGradient.Type +QtGui.QGradient.spread?4() -> QGradient.Spread +QtGui.QGradient.setColorAt?4(float, QColor) +QtGui.QGradient.setStops?4(unknown-type) +QtGui.QGradient.stops?4() -> unknown-type +QtGui.QGradient.setSpread?4(QGradient.Spread) +QtGui.QGradient.coordinateMode?4() -> QGradient.CoordinateMode +QtGui.QGradient.setCoordinateMode?4(QGradient.CoordinateMode) +QtGui.QLinearGradient?1() +QtGui.QLinearGradient.__init__?1(self) +QtGui.QLinearGradient?1(QPointF, QPointF) +QtGui.QLinearGradient.__init__?1(self, QPointF, QPointF) +QtGui.QLinearGradient?1(float, float, float, float) +QtGui.QLinearGradient.__init__?1(self, float, float, float, float) +QtGui.QLinearGradient?1(QLinearGradient) +QtGui.QLinearGradient.__init__?1(self, QLinearGradient) +QtGui.QLinearGradient.start?4() -> QPointF +QtGui.QLinearGradient.finalStop?4() -> QPointF +QtGui.QLinearGradient.setStart?4(QPointF) +QtGui.QLinearGradient.setStart?4(float, float) +QtGui.QLinearGradient.setFinalStop?4(QPointF) +QtGui.QLinearGradient.setFinalStop?4(float, float) +QtGui.QRadialGradient?1() +QtGui.QRadialGradient.__init__?1(self) +QtGui.QRadialGradient?1(QPointF, float, QPointF) +QtGui.QRadialGradient.__init__?1(self, QPointF, float, QPointF) +QtGui.QRadialGradient?1(QPointF, float, QPointF, float) +QtGui.QRadialGradient.__init__?1(self, QPointF, float, QPointF, float) +QtGui.QRadialGradient?1(QPointF, float) +QtGui.QRadialGradient.__init__?1(self, QPointF, float) +QtGui.QRadialGradient?1(float, float, float, float, float) +QtGui.QRadialGradient.__init__?1(self, float, float, float, float, float) +QtGui.QRadialGradient?1(float, float, float, float, float, float) +QtGui.QRadialGradient.__init__?1(self, float, float, float, float, float, float) +QtGui.QRadialGradient?1(float, float, float) +QtGui.QRadialGradient.__init__?1(self, float, float, float) +QtGui.QRadialGradient?1(QRadialGradient) +QtGui.QRadialGradient.__init__?1(self, QRadialGradient) +QtGui.QRadialGradient.center?4() -> QPointF +QtGui.QRadialGradient.focalPoint?4() -> QPointF +QtGui.QRadialGradient.radius?4() -> float +QtGui.QRadialGradient.setCenter?4(QPointF) +QtGui.QRadialGradient.setCenter?4(float, float) +QtGui.QRadialGradient.setFocalPoint?4(QPointF) +QtGui.QRadialGradient.setFocalPoint?4(float, float) +QtGui.QRadialGradient.setRadius?4(float) +QtGui.QRadialGradient.centerRadius?4() -> float +QtGui.QRadialGradient.setCenterRadius?4(float) +QtGui.QRadialGradient.focalRadius?4() -> float +QtGui.QRadialGradient.setFocalRadius?4(float) +QtGui.QConicalGradient?1() +QtGui.QConicalGradient.__init__?1(self) +QtGui.QConicalGradient?1(QPointF, float) +QtGui.QConicalGradient.__init__?1(self, QPointF, float) +QtGui.QConicalGradient?1(float, float, float) +QtGui.QConicalGradient.__init__?1(self, float, float, float) +QtGui.QConicalGradient?1(QConicalGradient) +QtGui.QConicalGradient.__init__?1(self, QConicalGradient) +QtGui.QConicalGradient.center?4() -> QPointF +QtGui.QConicalGradient.angle?4() -> float +QtGui.QConicalGradient.setCenter?4(QPointF) +QtGui.QConicalGradient.setCenter?4(float, float) +QtGui.QConicalGradient.setAngle?4(float) +QtGui.QClipboard.Mode?10 +QtGui.QClipboard.Mode.Clipboard?10 +QtGui.QClipboard.Mode.Selection?10 +QtGui.QClipboard.Mode.FindBuffer?10 +QtGui.QClipboard.clear?4(QClipboard.Mode mode=QClipboard.Clipboard) +QtGui.QClipboard.supportsFindBuffer?4() -> bool +QtGui.QClipboard.supportsSelection?4() -> bool +QtGui.QClipboard.ownsClipboard?4() -> bool +QtGui.QClipboard.ownsFindBuffer?4() -> bool +QtGui.QClipboard.ownsSelection?4() -> bool +QtGui.QClipboard.text?4(QClipboard.Mode mode=QClipboard.Clipboard) -> QString +QtGui.QClipboard.text?4(QString, QClipboard.Mode mode=QClipboard.Clipboard) -> Tuple +QtGui.QClipboard.setText?4(QString, QClipboard.Mode mode=QClipboard.Clipboard) +QtGui.QClipboard.mimeData?4(QClipboard.Mode mode=QClipboard.Clipboard) -> QMimeData +QtGui.QClipboard.setMimeData?4(QMimeData, QClipboard.Mode mode=QClipboard.Clipboard) +QtGui.QClipboard.image?4(QClipboard.Mode mode=QClipboard.Clipboard) -> QImage +QtGui.QClipboard.pixmap?4(QClipboard.Mode mode=QClipboard.Clipboard) -> QPixmap +QtGui.QClipboard.setImage?4(QImage, QClipboard.Mode mode=QClipboard.Clipboard) +QtGui.QClipboard.setPixmap?4(QPixmap, QClipboard.Mode mode=QClipboard.Clipboard) +QtGui.QClipboard.changed?4(QClipboard.Mode) +QtGui.QClipboard.dataChanged?4() +QtGui.QClipboard.findBufferChanged?4() +QtGui.QClipboard.selectionChanged?4() +QtGui.QColorSpace.TransferFunction?10 +QtGui.QColorSpace.TransferFunction.Custom?10 +QtGui.QColorSpace.TransferFunction.Linear?10 +QtGui.QColorSpace.TransferFunction.Gamma?10 +QtGui.QColorSpace.TransferFunction.SRgb?10 +QtGui.QColorSpace.TransferFunction.ProPhotoRgb?10 +QtGui.QColorSpace.Primaries?10 +QtGui.QColorSpace.Primaries.Custom?10 +QtGui.QColorSpace.Primaries.SRgb?10 +QtGui.QColorSpace.Primaries.AdobeRgb?10 +QtGui.QColorSpace.Primaries.DciP3D65?10 +QtGui.QColorSpace.Primaries.ProPhotoRgb?10 +QtGui.QColorSpace.NamedColorSpace?10 +QtGui.QColorSpace.NamedColorSpace.SRgb?10 +QtGui.QColorSpace.NamedColorSpace.SRgbLinear?10 +QtGui.QColorSpace.NamedColorSpace.AdobeRgb?10 +QtGui.QColorSpace.NamedColorSpace.DisplayP3?10 +QtGui.QColorSpace.NamedColorSpace.ProPhotoRgb?10 +QtGui.QColorSpace?1() +QtGui.QColorSpace.__init__?1(self) +QtGui.QColorSpace?1(QColorSpace.NamedColorSpace) +QtGui.QColorSpace.__init__?1(self, QColorSpace.NamedColorSpace) +QtGui.QColorSpace?1(QColorSpace.Primaries, QColorSpace.TransferFunction, float gamma=0) +QtGui.QColorSpace.__init__?1(self, QColorSpace.Primaries, QColorSpace.TransferFunction, float gamma=0) +QtGui.QColorSpace?1(QColorSpace.Primaries, float) +QtGui.QColorSpace.__init__?1(self, QColorSpace.Primaries, float) +QtGui.QColorSpace?1(QPointF, QPointF, QPointF, QPointF, QColorSpace.TransferFunction, float gamma=0) +QtGui.QColorSpace.__init__?1(self, QPointF, QPointF, QPointF, QPointF, QColorSpace.TransferFunction, float gamma=0) +QtGui.QColorSpace?1(QColorSpace) +QtGui.QColorSpace.__init__?1(self, QColorSpace) +QtGui.QColorSpace.swap?4(QColorSpace) +QtGui.QColorSpace.primaries?4() -> QColorSpace.Primaries +QtGui.QColorSpace.transferFunction?4() -> QColorSpace.TransferFunction +QtGui.QColorSpace.gamma?4() -> float +QtGui.QColorSpace.setTransferFunction?4(QColorSpace.TransferFunction, float gamma=0) +QtGui.QColorSpace.withTransferFunction?4(QColorSpace.TransferFunction, float gamma=0) -> QColorSpace +QtGui.QColorSpace.setPrimaries?4(QColorSpace.Primaries) +QtGui.QColorSpace.setPrimaries?4(QPointF, QPointF, QPointF, QPointF) +QtGui.QColorSpace.isValid?4() -> bool +QtGui.QColorSpace.fromIccProfile?4(QByteArray) -> QColorSpace +QtGui.QColorSpace.iccProfile?4() -> QByteArray +QtGui.QColorSpace.transformationToColorSpace?4(QColorSpace) -> QColorTransform +QtGui.QColorTransform?1() +QtGui.QColorTransform.__init__?1(self) +QtGui.QColorTransform?1(QColorTransform) +QtGui.QColorTransform.__init__?1(self, QColorTransform) +QtGui.QColorTransform.swap?4(QColorTransform) +QtGui.QColorTransform.map?4(int) -> int +QtGui.QColorTransform.map?4(QRgba64) -> QRgba64 +QtGui.QColorTransform.map?4(QColor) -> QColor +QtGui.QCursor?1() +QtGui.QCursor.__init__?1(self) +QtGui.QCursor?1(QBitmap, QBitmap, int hotX=-1, int hotY=-1) +QtGui.QCursor.__init__?1(self, QBitmap, QBitmap, int hotX=-1, int hotY=-1) +QtGui.QCursor?1(QPixmap, int hotX=-1, int hotY=-1) +QtGui.QCursor.__init__?1(self, QPixmap, int hotX=-1, int hotY=-1) +QtGui.QCursor?1(QCursor) +QtGui.QCursor.__init__?1(self, QCursor) +QtGui.QCursor?1(QVariant) +QtGui.QCursor.__init__?1(self, QVariant) +QtGui.QCursor.shape?4() -> Qt.CursorShape +QtGui.QCursor.setShape?4(Qt.CursorShape) +QtGui.QCursor.bitmap?4() -> QBitmap +QtGui.QCursor.mask?4() -> QBitmap +QtGui.QCursor.pixmap?4() -> QPixmap +QtGui.QCursor.hotSpot?4() -> QPoint +QtGui.QCursor.pos?4() -> QPoint +QtGui.QCursor.setPos?4(int, int) +QtGui.QCursor.setPos?4(QPoint) +QtGui.QCursor.pos?4(QScreen) -> QPoint +QtGui.QCursor.setPos?4(QScreen, int, int) +QtGui.QCursor.setPos?4(QScreen, QPoint) +QtGui.QCursor.swap?4(QCursor) +QtGui.QDesktopServices?1() +QtGui.QDesktopServices.__init__?1(self) +QtGui.QDesktopServices?1(QDesktopServices) +QtGui.QDesktopServices.__init__?1(self, QDesktopServices) +QtGui.QDesktopServices.openUrl?4(QUrl) -> bool +QtGui.QDesktopServices.setUrlHandler?4(QString, QObject, str) +QtGui.QDesktopServices.setUrlHandler?4(QString, Callable[..., None]) +QtGui.QDesktopServices.unsetUrlHandler?4(QString) +QtGui.QDrag?1(QObject) +QtGui.QDrag.__init__?1(self, QObject) +QtGui.QDrag.exec_?4(Qt.DropActions supportedActions=Qt.MoveAction) -> Qt.DropAction +QtGui.QDrag.exec?4(Qt.DropActions supportedActions=Qt.MoveAction) -> Qt.DropAction +QtGui.QDrag.exec_?4(Qt.DropActions, Qt.DropAction) -> Qt.DropAction +QtGui.QDrag.exec?4(Qt.DropActions, Qt.DropAction) -> Qt.DropAction +QtGui.QDrag.setMimeData?4(QMimeData) +QtGui.QDrag.mimeData?4() -> QMimeData +QtGui.QDrag.setPixmap?4(QPixmap) +QtGui.QDrag.pixmap?4() -> QPixmap +QtGui.QDrag.setHotSpot?4(QPoint) +QtGui.QDrag.hotSpot?4() -> QPoint +QtGui.QDrag.source?4() -> QObject +QtGui.QDrag.target?4() -> QObject +QtGui.QDrag.setDragCursor?4(QPixmap, Qt.DropAction) +QtGui.QDrag.actionChanged?4(Qt.DropAction) +QtGui.QDrag.targetChanged?4(QObject) +QtGui.QDrag.dragCursor?4(Qt.DropAction) -> QPixmap +QtGui.QDrag.supportedActions?4() -> Qt.DropActions +QtGui.QDrag.defaultAction?4() -> Qt.DropAction +QtGui.QDrag.cancel?4() +QtGui.QInputEvent.modifiers?4() -> Qt.KeyboardModifiers +QtGui.QInputEvent.timestamp?4() -> int +QtGui.QInputEvent.setTimestamp?4(int) +QtGui.QMouseEvent?1(QEvent.Type, QPointF, Qt.MouseButton, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QMouseEvent.__init__?1(self, QEvent.Type, QPointF, Qt.MouseButton, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QMouseEvent?1(QEvent.Type, QPointF, QPointF, Qt.MouseButton, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QMouseEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, Qt.MouseButton, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QMouseEvent?1(QEvent.Type, QPointF, QPointF, QPointF, Qt.MouseButton, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QMouseEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, QPointF, Qt.MouseButton, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QMouseEvent?1(QEvent.Type, QPointF, QPointF, QPointF, Qt.MouseButton, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.MouseEventSource) +QtGui.QMouseEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, QPointF, Qt.MouseButton, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.MouseEventSource) +QtGui.QMouseEvent?1(QMouseEvent) +QtGui.QMouseEvent.__init__?1(self, QMouseEvent) +QtGui.QMouseEvent.pos?4() -> QPoint +QtGui.QMouseEvent.globalPos?4() -> QPoint +QtGui.QMouseEvent.x?4() -> int +QtGui.QMouseEvent.y?4() -> int +QtGui.QMouseEvent.globalX?4() -> int +QtGui.QMouseEvent.globalY?4() -> int +QtGui.QMouseEvent.button?4() -> Qt.MouseButton +QtGui.QMouseEvent.buttons?4() -> Qt.MouseButtons +QtGui.QMouseEvent.localPos?4() -> QPointF +QtGui.QMouseEvent.windowPos?4() -> QPointF +QtGui.QMouseEvent.screenPos?4() -> QPointF +QtGui.QMouseEvent.source?4() -> Qt.MouseEventSource +QtGui.QMouseEvent.flags?4() -> Qt.MouseEventFlags +QtGui.QHoverEvent?1(QEvent.Type, QPointF, QPointF, Qt.KeyboardModifiers modifiers=Qt.NoModifier) +QtGui.QHoverEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, Qt.KeyboardModifiers modifiers=Qt.NoModifier) +QtGui.QHoverEvent?1(QHoverEvent) +QtGui.QHoverEvent.__init__?1(self, QHoverEvent) +QtGui.QHoverEvent.pos?4() -> QPoint +QtGui.QHoverEvent.oldPos?4() -> QPoint +QtGui.QHoverEvent.posF?4() -> QPointF +QtGui.QHoverEvent.oldPosF?4() -> QPointF +QtGui.QWheelEvent?1(QPointF, QPointF, QPoint, QPoint, int, Qt.Orientation, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QWheelEvent.__init__?1(self, QPointF, QPointF, QPoint, QPoint, int, Qt.Orientation, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QWheelEvent?1(QPointF, QPointF, QPoint, QPoint, int, Qt.Orientation, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.ScrollPhase) +QtGui.QWheelEvent.__init__?1(self, QPointF, QPointF, QPoint, QPoint, int, Qt.Orientation, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.ScrollPhase) +QtGui.QWheelEvent?1(QPointF, QPointF, QPoint, QPoint, int, Qt.Orientation, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.ScrollPhase, Qt.MouseEventSource) +QtGui.QWheelEvent.__init__?1(self, QPointF, QPointF, QPoint, QPoint, int, Qt.Orientation, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.ScrollPhase, Qt.MouseEventSource) +QtGui.QWheelEvent?1(QPointF, QPointF, QPoint, QPoint, int, Qt.Orientation, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.ScrollPhase, Qt.MouseEventSource, bool) +QtGui.QWheelEvent.__init__?1(self, QPointF, QPointF, QPoint, QPoint, int, Qt.Orientation, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.ScrollPhase, Qt.MouseEventSource, bool) +QtGui.QWheelEvent?1(QPointF, QPointF, QPoint, QPoint, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.ScrollPhase, bool, Qt.MouseEventSource source=Qt.MouseEventNotSynthesized) +QtGui.QWheelEvent.__init__?1(self, QPointF, QPointF, QPoint, QPoint, Qt.MouseButtons, Qt.KeyboardModifiers, Qt.ScrollPhase, bool, Qt.MouseEventSource source=Qt.MouseEventNotSynthesized) +QtGui.QWheelEvent?1(QWheelEvent) +QtGui.QWheelEvent.__init__?1(self, QWheelEvent) +QtGui.QWheelEvent.pos?4() -> QPoint +QtGui.QWheelEvent.globalPos?4() -> QPoint +QtGui.QWheelEvent.x?4() -> int +QtGui.QWheelEvent.y?4() -> int +QtGui.QWheelEvent.globalX?4() -> int +QtGui.QWheelEvent.globalY?4() -> int +QtGui.QWheelEvent.buttons?4() -> Qt.MouseButtons +QtGui.QWheelEvent.pixelDelta?4() -> QPoint +QtGui.QWheelEvent.angleDelta?4() -> QPoint +QtGui.QWheelEvent.posF?4() -> QPointF +QtGui.QWheelEvent.globalPosF?4() -> QPointF +QtGui.QWheelEvent.phase?4() -> Qt.ScrollPhase +QtGui.QWheelEvent.source?4() -> Qt.MouseEventSource +QtGui.QWheelEvent.inverted?4() -> bool +QtGui.QWheelEvent.position?4() -> QPointF +QtGui.QWheelEvent.globalPosition?4() -> QPointF +QtGui.QTabletEvent.PointerType?10 +QtGui.QTabletEvent.PointerType.UnknownPointer?10 +QtGui.QTabletEvent.PointerType.Pen?10 +QtGui.QTabletEvent.PointerType.Cursor?10 +QtGui.QTabletEvent.PointerType.Eraser?10 +QtGui.QTabletEvent.TabletDevice?10 +QtGui.QTabletEvent.TabletDevice.NoDevice?10 +QtGui.QTabletEvent.TabletDevice.Puck?10 +QtGui.QTabletEvent.TabletDevice.Stylus?10 +QtGui.QTabletEvent.TabletDevice.Airbrush?10 +QtGui.QTabletEvent.TabletDevice.FourDMouse?10 +QtGui.QTabletEvent.TabletDevice.XFreeEraser?10 +QtGui.QTabletEvent.TabletDevice.RotationStylus?10 +QtGui.QTabletEvent?1(QEvent.Type, QPointF, QPointF, int, int, float, int, int, float, float, int, Qt.KeyboardModifiers, int, Qt.MouseButton, Qt.MouseButtons) +QtGui.QTabletEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, int, int, float, int, int, float, float, int, Qt.KeyboardModifiers, int, Qt.MouseButton, Qt.MouseButtons) +QtGui.QTabletEvent?1(QEvent.Type, QPointF, QPointF, int, int, float, int, int, float, float, int, Qt.KeyboardModifiers, int) +QtGui.QTabletEvent.__init__?1(self, QEvent.Type, QPointF, QPointF, int, int, float, int, int, float, float, int, Qt.KeyboardModifiers, int) +QtGui.QTabletEvent?1(QTabletEvent) +QtGui.QTabletEvent.__init__?1(self, QTabletEvent) +QtGui.QTabletEvent.pos?4() -> QPoint +QtGui.QTabletEvent.globalPos?4() -> QPoint +QtGui.QTabletEvent.x?4() -> int +QtGui.QTabletEvent.y?4() -> int +QtGui.QTabletEvent.globalX?4() -> int +QtGui.QTabletEvent.globalY?4() -> int +QtGui.QTabletEvent.hiResGlobalX?4() -> float +QtGui.QTabletEvent.hiResGlobalY?4() -> float +QtGui.QTabletEvent.device?4() -> QTabletEvent.TabletDevice +QtGui.QTabletEvent.pointerType?4() -> QTabletEvent.PointerType +QtGui.QTabletEvent.uniqueId?4() -> int +QtGui.QTabletEvent.pressure?4() -> float +QtGui.QTabletEvent.z?4() -> int +QtGui.QTabletEvent.tangentialPressure?4() -> float +QtGui.QTabletEvent.rotation?4() -> float +QtGui.QTabletEvent.xTilt?4() -> int +QtGui.QTabletEvent.yTilt?4() -> int +QtGui.QTabletEvent.posF?4() -> QPointF +QtGui.QTabletEvent.globalPosF?4() -> QPointF +QtGui.QTabletEvent.button?4() -> Qt.MouseButton +QtGui.QTabletEvent.buttons?4() -> Qt.MouseButtons +QtGui.QTabletEvent.deviceType?4() -> QTabletEvent.TabletDevice +QtGui.QKeyEvent?1(QEvent.Type, int, Qt.KeyboardModifiers, int, int, int, QString text='', bool autorep=False, int count=1) +QtGui.QKeyEvent.__init__?1(self, QEvent.Type, int, Qt.KeyboardModifiers, int, int, int, QString text='', bool autorep=False, int count=1) +QtGui.QKeyEvent?1(QEvent.Type, int, Qt.KeyboardModifiers, QString text='', bool autorep=False, int count=1) +QtGui.QKeyEvent.__init__?1(self, QEvent.Type, int, Qt.KeyboardModifiers, QString text='', bool autorep=False, int count=1) +QtGui.QKeyEvent?1(QKeyEvent) +QtGui.QKeyEvent.__init__?1(self, QKeyEvent) +QtGui.QKeyEvent.key?4() -> int +QtGui.QKeyEvent.modifiers?4() -> Qt.KeyboardModifiers +QtGui.QKeyEvent.text?4() -> QString +QtGui.QKeyEvent.isAutoRepeat?4() -> bool +QtGui.QKeyEvent.count?4() -> int +QtGui.QKeyEvent.matches?4(QKeySequence.StandardKey) -> bool +QtGui.QKeyEvent.nativeModifiers?4() -> int +QtGui.QKeyEvent.nativeScanCode?4() -> int +QtGui.QKeyEvent.nativeVirtualKey?4() -> int +QtGui.QFocusEvent?1(QEvent.Type, Qt.FocusReason reason=Qt.OtherFocusReason) +QtGui.QFocusEvent.__init__?1(self, QEvent.Type, Qt.FocusReason reason=Qt.OtherFocusReason) +QtGui.QFocusEvent?1(QFocusEvent) +QtGui.QFocusEvent.__init__?1(self, QFocusEvent) +QtGui.QFocusEvent.gotFocus?4() -> bool +QtGui.QFocusEvent.lostFocus?4() -> bool +QtGui.QFocusEvent.reason?4() -> Qt.FocusReason +QtGui.QPaintEvent?1(QRegion) +QtGui.QPaintEvent.__init__?1(self, QRegion) +QtGui.QPaintEvent?1(QRect) +QtGui.QPaintEvent.__init__?1(self, QRect) +QtGui.QPaintEvent?1(QPaintEvent) +QtGui.QPaintEvent.__init__?1(self, QPaintEvent) +QtGui.QPaintEvent.rect?4() -> QRect +QtGui.QPaintEvent.region?4() -> QRegion +QtGui.QMoveEvent?1(QPoint, QPoint) +QtGui.QMoveEvent.__init__?1(self, QPoint, QPoint) +QtGui.QMoveEvent?1(QMoveEvent) +QtGui.QMoveEvent.__init__?1(self, QMoveEvent) +QtGui.QMoveEvent.pos?4() -> QPoint +QtGui.QMoveEvent.oldPos?4() -> QPoint +QtGui.QResizeEvent?1(QSize, QSize) +QtGui.QResizeEvent.__init__?1(self, QSize, QSize) +QtGui.QResizeEvent?1(QResizeEvent) +QtGui.QResizeEvent.__init__?1(self, QResizeEvent) +QtGui.QResizeEvent.size?4() -> QSize +QtGui.QResizeEvent.oldSize?4() -> QSize +QtGui.QCloseEvent?1() +QtGui.QCloseEvent.__init__?1(self) +QtGui.QCloseEvent?1(QCloseEvent) +QtGui.QCloseEvent.__init__?1(self, QCloseEvent) +QtGui.QIconDragEvent?1() +QtGui.QIconDragEvent.__init__?1(self) +QtGui.QIconDragEvent?1(QIconDragEvent) +QtGui.QIconDragEvent.__init__?1(self, QIconDragEvent) +QtGui.QShowEvent?1() +QtGui.QShowEvent.__init__?1(self) +QtGui.QShowEvent?1(QShowEvent) +QtGui.QShowEvent.__init__?1(self, QShowEvent) +QtGui.QHideEvent?1() +QtGui.QHideEvent.__init__?1(self) +QtGui.QHideEvent?1(QHideEvent) +QtGui.QHideEvent.__init__?1(self, QHideEvent) +QtGui.QContextMenuEvent.Reason?10 +QtGui.QContextMenuEvent.Reason.Mouse?10 +QtGui.QContextMenuEvent.Reason.Keyboard?10 +QtGui.QContextMenuEvent.Reason.Other?10 +QtGui.QContextMenuEvent?1(QContextMenuEvent.Reason, QPoint, QPoint, Qt.KeyboardModifiers) +QtGui.QContextMenuEvent.__init__?1(self, QContextMenuEvent.Reason, QPoint, QPoint, Qt.KeyboardModifiers) +QtGui.QContextMenuEvent?1(QContextMenuEvent.Reason, QPoint, QPoint) +QtGui.QContextMenuEvent.__init__?1(self, QContextMenuEvent.Reason, QPoint, QPoint) +QtGui.QContextMenuEvent?1(QContextMenuEvent.Reason, QPoint) +QtGui.QContextMenuEvent.__init__?1(self, QContextMenuEvent.Reason, QPoint) +QtGui.QContextMenuEvent?1(QContextMenuEvent) +QtGui.QContextMenuEvent.__init__?1(self, QContextMenuEvent) +QtGui.QContextMenuEvent.x?4() -> int +QtGui.QContextMenuEvent.y?4() -> int +QtGui.QContextMenuEvent.globalX?4() -> int +QtGui.QContextMenuEvent.globalY?4() -> int +QtGui.QContextMenuEvent.pos?4() -> QPoint +QtGui.QContextMenuEvent.globalPos?4() -> QPoint +QtGui.QContextMenuEvent.reason?4() -> QContextMenuEvent.Reason +QtGui.QInputMethodEvent.AttributeType?10 +QtGui.QInputMethodEvent.AttributeType.TextFormat?10 +QtGui.QInputMethodEvent.AttributeType.Cursor?10 +QtGui.QInputMethodEvent.AttributeType.Language?10 +QtGui.QInputMethodEvent.AttributeType.Ruby?10 +QtGui.QInputMethodEvent.AttributeType.Selection?10 +QtGui.QInputMethodEvent?1() +QtGui.QInputMethodEvent.__init__?1(self) +QtGui.QInputMethodEvent?1(QString, unknown-type) +QtGui.QInputMethodEvent.__init__?1(self, QString, unknown-type) +QtGui.QInputMethodEvent?1(QInputMethodEvent) +QtGui.QInputMethodEvent.__init__?1(self, QInputMethodEvent) +QtGui.QInputMethodEvent.setCommitString?4(QString, int from=0, int length=0) +QtGui.QInputMethodEvent.attributes?4() -> unknown-type +QtGui.QInputMethodEvent.preeditString?4() -> QString +QtGui.QInputMethodEvent.commitString?4() -> QString +QtGui.QInputMethodEvent.replacementStart?4() -> int +QtGui.QInputMethodEvent.replacementLength?4() -> int +QtGui.QInputMethodEvent.Attribute.length?7 +QtGui.QInputMethodEvent.Attribute.start?7 +QtGui.QInputMethodEvent.Attribute.type?7 +QtGui.QInputMethodEvent.Attribute.value?7 +QtGui.QInputMethodEvent.Attribute?1(QInputMethodEvent.AttributeType, int, int, QVariant) +QtGui.QInputMethodEvent.Attribute.__init__?1(self, QInputMethodEvent.AttributeType, int, int, QVariant) +QtGui.QInputMethodEvent.Attribute?1(QInputMethodEvent.AttributeType, int, int) +QtGui.QInputMethodEvent.Attribute.__init__?1(self, QInputMethodEvent.AttributeType, int, int) +QtGui.QInputMethodEvent.Attribute?1(QInputMethodEvent.Attribute) +QtGui.QInputMethodEvent.Attribute.__init__?1(self, QInputMethodEvent.Attribute) +QtGui.QInputMethodQueryEvent?1(Qt.InputMethodQueries) +QtGui.QInputMethodQueryEvent.__init__?1(self, Qt.InputMethodQueries) +QtGui.QInputMethodQueryEvent?1(QInputMethodQueryEvent) +QtGui.QInputMethodQueryEvent.__init__?1(self, QInputMethodQueryEvent) +QtGui.QInputMethodQueryEvent.queries?4() -> Qt.InputMethodQueries +QtGui.QInputMethodQueryEvent.setValue?4(Qt.InputMethodQuery, QVariant) +QtGui.QInputMethodQueryEvent.value?4(Qt.InputMethodQuery) -> QVariant +QtGui.QDropEvent?1(QPointF, Qt.DropActions, QMimeData, Qt.MouseButtons, Qt.KeyboardModifiers, QEvent.Type type=QEvent.Drop) +QtGui.QDropEvent.__init__?1(self, QPointF, Qt.DropActions, QMimeData, Qt.MouseButtons, Qt.KeyboardModifiers, QEvent.Type type=QEvent.Drop) +QtGui.QDropEvent?1(QDropEvent) +QtGui.QDropEvent.__init__?1(self, QDropEvent) +QtGui.QDropEvent.pos?4() -> QPoint +QtGui.QDropEvent.posF?4() -> QPointF +QtGui.QDropEvent.mouseButtons?4() -> Qt.MouseButtons +QtGui.QDropEvent.keyboardModifiers?4() -> Qt.KeyboardModifiers +QtGui.QDropEvent.possibleActions?4() -> Qt.DropActions +QtGui.QDropEvent.proposedAction?4() -> Qt.DropAction +QtGui.QDropEvent.acceptProposedAction?4() +QtGui.QDropEvent.dropAction?4() -> Qt.DropAction +QtGui.QDropEvent.setDropAction?4(Qt.DropAction) +QtGui.QDropEvent.source?4() -> QObject +QtGui.QDropEvent.mimeData?4() -> QMimeData +QtGui.QDragMoveEvent?1(QPoint, Qt.DropActions, QMimeData, Qt.MouseButtons, Qt.KeyboardModifiers, QEvent.Type type=QEvent.DragMove) +QtGui.QDragMoveEvent.__init__?1(self, QPoint, Qt.DropActions, QMimeData, Qt.MouseButtons, Qt.KeyboardModifiers, QEvent.Type type=QEvent.DragMove) +QtGui.QDragMoveEvent?1(QDragMoveEvent) +QtGui.QDragMoveEvent.__init__?1(self, QDragMoveEvent) +QtGui.QDragMoveEvent.answerRect?4() -> QRect +QtGui.QDragMoveEvent.accept?4() +QtGui.QDragMoveEvent.ignore?4() +QtGui.QDragMoveEvent.accept?4(QRect) +QtGui.QDragMoveEvent.ignore?4(QRect) +QtGui.QDragEnterEvent?1(QPoint, Qt.DropActions, QMimeData, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QDragEnterEvent.__init__?1(self, QPoint, Qt.DropActions, QMimeData, Qt.MouseButtons, Qt.KeyboardModifiers) +QtGui.QDragEnterEvent?1(QDragEnterEvent) +QtGui.QDragEnterEvent.__init__?1(self, QDragEnterEvent) +QtGui.QDragLeaveEvent?1() +QtGui.QDragLeaveEvent.__init__?1(self) +QtGui.QDragLeaveEvent?1(QDragLeaveEvent) +QtGui.QDragLeaveEvent.__init__?1(self, QDragLeaveEvent) +QtGui.QHelpEvent?1(QEvent.Type, QPoint, QPoint) +QtGui.QHelpEvent.__init__?1(self, QEvent.Type, QPoint, QPoint) +QtGui.QHelpEvent?1(QHelpEvent) +QtGui.QHelpEvent.__init__?1(self, QHelpEvent) +QtGui.QHelpEvent.x?4() -> int +QtGui.QHelpEvent.y?4() -> int +QtGui.QHelpEvent.globalX?4() -> int +QtGui.QHelpEvent.globalY?4() -> int +QtGui.QHelpEvent.pos?4() -> QPoint +QtGui.QHelpEvent.globalPos?4() -> QPoint +QtGui.QStatusTipEvent?1(QString) +QtGui.QStatusTipEvent.__init__?1(self, QString) +QtGui.QStatusTipEvent?1(QStatusTipEvent) +QtGui.QStatusTipEvent.__init__?1(self, QStatusTipEvent) +QtGui.QStatusTipEvent.tip?4() -> QString +QtGui.QWhatsThisClickedEvent?1(QString) +QtGui.QWhatsThisClickedEvent.__init__?1(self, QString) +QtGui.QWhatsThisClickedEvent?1(QWhatsThisClickedEvent) +QtGui.QWhatsThisClickedEvent.__init__?1(self, QWhatsThisClickedEvent) +QtGui.QWhatsThisClickedEvent.href?4() -> QString +QtGui.QActionEvent?1(int, QAction, QAction before=None) +QtGui.QActionEvent.__init__?1(self, int, QAction, QAction before=None) +QtGui.QActionEvent?1(QActionEvent) +QtGui.QActionEvent.__init__?1(self, QActionEvent) +QtGui.QActionEvent.action?4() -> QAction +QtGui.QActionEvent.before?4() -> QAction +QtGui.QFileOpenEvent.file?4() -> QString +QtGui.QFileOpenEvent.url?4() -> QUrl +QtGui.QFileOpenEvent.openFile?4(QFile, QIODevice.OpenMode) -> bool +QtGui.QShortcutEvent?1(QKeySequence, int, bool ambiguous=False) +QtGui.QShortcutEvent.__init__?1(self, QKeySequence, int, bool ambiguous=False) +QtGui.QShortcutEvent?1(QShortcutEvent) +QtGui.QShortcutEvent.__init__?1(self, QShortcutEvent) +QtGui.QShortcutEvent.isAmbiguous?4() -> bool +QtGui.QShortcutEvent.key?4() -> QKeySequence +QtGui.QShortcutEvent.shortcutId?4() -> int +QtGui.QWindowStateChangeEvent.oldState?4() -> Qt.WindowStates +QtGui.QTouchEvent?1(QEvent.Type, QTouchDevice device=None, Qt.KeyboardModifiers modifiers=Qt.NoModifier, Qt.TouchPointStates touchPointStates=Qt.TouchPointStates(), unknown-type touchPoints=[]) +QtGui.QTouchEvent.__init__?1(self, QEvent.Type, QTouchDevice device=None, Qt.KeyboardModifiers modifiers=Qt.NoModifier, Qt.TouchPointStates touchPointStates=Qt.TouchPointStates(), unknown-type touchPoints=[]) +QtGui.QTouchEvent?1(QTouchEvent) +QtGui.QTouchEvent.__init__?1(self, QTouchEvent) +QtGui.QTouchEvent.target?4() -> QObject +QtGui.QTouchEvent.touchPointStates?4() -> Qt.TouchPointStates +QtGui.QTouchEvent.touchPoints?4() -> unknown-type +QtGui.QTouchEvent.window?4() -> QWindow +QtGui.QTouchEvent.device?4() -> QTouchDevice +QtGui.QTouchEvent.setDevice?4(QTouchDevice) +QtGui.QTouchEvent.TouchPoint.InfoFlag?10 +QtGui.QTouchEvent.TouchPoint.InfoFlag.Pen?10 +QtGui.QTouchEvent.TouchPoint.InfoFlag.Token?10 +QtGui.QTouchEvent.TouchPoint.id?4() -> int +QtGui.QTouchEvent.TouchPoint.state?4() -> Qt.TouchPointState +QtGui.QTouchEvent.TouchPoint.pos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.startPos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.lastPos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.scenePos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.startScenePos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.lastScenePos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.screenPos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.startScreenPos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.lastScreenPos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.normalizedPos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.startNormalizedPos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.lastNormalizedPos?4() -> QPointF +QtGui.QTouchEvent.TouchPoint.rect?4() -> QRectF +QtGui.QTouchEvent.TouchPoint.sceneRect?4() -> QRectF +QtGui.QTouchEvent.TouchPoint.screenRect?4() -> QRectF +QtGui.QTouchEvent.TouchPoint.pressure?4() -> float +QtGui.QTouchEvent.TouchPoint.velocity?4() -> QVector2D +QtGui.QTouchEvent.TouchPoint.flags?4() -> QTouchEvent.TouchPoint.InfoFlags +QtGui.QTouchEvent.TouchPoint.rawScreenPositions?4() -> unknown-type +QtGui.QTouchEvent.TouchPoint.uniqueId?4() -> QPointingDeviceUniqueId +QtGui.QTouchEvent.TouchPoint.rotation?4() -> float +QtGui.QTouchEvent.TouchPoint.ellipseDiameters?4() -> QSizeF +QtGui.QTouchEvent.TouchPoint.InfoFlags?1() +QtGui.QTouchEvent.TouchPoint.InfoFlags.__init__?1(self) +QtGui.QTouchEvent.TouchPoint.InfoFlags?1(int) +QtGui.QTouchEvent.TouchPoint.InfoFlags.__init__?1(self, int) +QtGui.QTouchEvent.TouchPoint.InfoFlags?1(QTouchEvent.TouchPoint.InfoFlags) +QtGui.QTouchEvent.TouchPoint.InfoFlags.__init__?1(self, QTouchEvent.TouchPoint.InfoFlags) +QtGui.QExposeEvent?1(QRegion) +QtGui.QExposeEvent.__init__?1(self, QRegion) +QtGui.QExposeEvent?1(QExposeEvent) +QtGui.QExposeEvent.__init__?1(self, QExposeEvent) +QtGui.QExposeEvent.region?4() -> QRegion +QtGui.QScrollPrepareEvent?1(QPointF) +QtGui.QScrollPrepareEvent.__init__?1(self, QPointF) +QtGui.QScrollPrepareEvent?1(QScrollPrepareEvent) +QtGui.QScrollPrepareEvent.__init__?1(self, QScrollPrepareEvent) +QtGui.QScrollPrepareEvent.startPos?4() -> QPointF +QtGui.QScrollPrepareEvent.viewportSize?4() -> QSizeF +QtGui.QScrollPrepareEvent.contentPosRange?4() -> QRectF +QtGui.QScrollPrepareEvent.contentPos?4() -> QPointF +QtGui.QScrollPrepareEvent.setViewportSize?4(QSizeF) +QtGui.QScrollPrepareEvent.setContentPosRange?4(QRectF) +QtGui.QScrollPrepareEvent.setContentPos?4(QPointF) +QtGui.QScrollEvent.ScrollState?10 +QtGui.QScrollEvent.ScrollState.ScrollStarted?10 +QtGui.QScrollEvent.ScrollState.ScrollUpdated?10 +QtGui.QScrollEvent.ScrollState.ScrollFinished?10 +QtGui.QScrollEvent?1(QPointF, QPointF, QScrollEvent.ScrollState) +QtGui.QScrollEvent.__init__?1(self, QPointF, QPointF, QScrollEvent.ScrollState) +QtGui.QScrollEvent?1(QScrollEvent) +QtGui.QScrollEvent.__init__?1(self, QScrollEvent) +QtGui.QScrollEvent.contentPos?4() -> QPointF +QtGui.QScrollEvent.overshootDistance?4() -> QPointF +QtGui.QScrollEvent.scrollState?4() -> QScrollEvent.ScrollState +QtGui.QEnterEvent?1(QPointF, QPointF, QPointF) +QtGui.QEnterEvent.__init__?1(self, QPointF, QPointF, QPointF) +QtGui.QEnterEvent?1(QEnterEvent) +QtGui.QEnterEvent.__init__?1(self, QEnterEvent) +QtGui.QEnterEvent.pos?4() -> QPoint +QtGui.QEnterEvent.globalPos?4() -> QPoint +QtGui.QEnterEvent.x?4() -> int +QtGui.QEnterEvent.y?4() -> int +QtGui.QEnterEvent.globalX?4() -> int +QtGui.QEnterEvent.globalY?4() -> int +QtGui.QEnterEvent.localPos?4() -> QPointF +QtGui.QEnterEvent.windowPos?4() -> QPointF +QtGui.QEnterEvent.screenPos?4() -> QPointF +QtGui.QNativeGestureEvent?1(Qt.NativeGestureType, QPointF, QPointF, QPointF, float, int, int) +QtGui.QNativeGestureEvent.__init__?1(self, Qt.NativeGestureType, QPointF, QPointF, QPointF, float, int, int) +QtGui.QNativeGestureEvent?1(Qt.NativeGestureType, QTouchDevice, QPointF, QPointF, QPointF, float, int, int) +QtGui.QNativeGestureEvent.__init__?1(self, Qt.NativeGestureType, QTouchDevice, QPointF, QPointF, QPointF, float, int, int) +QtGui.QNativeGestureEvent?1(QNativeGestureEvent) +QtGui.QNativeGestureEvent.__init__?1(self, QNativeGestureEvent) +QtGui.QNativeGestureEvent.gestureType?4() -> Qt.NativeGestureType +QtGui.QNativeGestureEvent.value?4() -> float +QtGui.QNativeGestureEvent.pos?4() -> QPoint +QtGui.QNativeGestureEvent.globalPos?4() -> QPoint +QtGui.QNativeGestureEvent.localPos?4() -> QPointF +QtGui.QNativeGestureEvent.windowPos?4() -> QPointF +QtGui.QNativeGestureEvent.screenPos?4() -> QPointF +QtGui.QNativeGestureEvent.device?4() -> QTouchDevice +QtGui.QPlatformSurfaceEvent.SurfaceEventType?10 +QtGui.QPlatformSurfaceEvent.SurfaceEventType.SurfaceCreated?10 +QtGui.QPlatformSurfaceEvent.SurfaceEventType.SurfaceAboutToBeDestroyed?10 +QtGui.QPlatformSurfaceEvent?1(QPlatformSurfaceEvent.SurfaceEventType) +QtGui.QPlatformSurfaceEvent.__init__?1(self, QPlatformSurfaceEvent.SurfaceEventType) +QtGui.QPlatformSurfaceEvent?1(QPlatformSurfaceEvent) +QtGui.QPlatformSurfaceEvent.__init__?1(self, QPlatformSurfaceEvent) +QtGui.QPlatformSurfaceEvent.surfaceEventType?4() -> QPlatformSurfaceEvent.SurfaceEventType +QtGui.QPointingDeviceUniqueId?1() +QtGui.QPointingDeviceUniqueId.__init__?1(self) +QtGui.QPointingDeviceUniqueId?1(QPointingDeviceUniqueId) +QtGui.QPointingDeviceUniqueId.__init__?1(self, QPointingDeviceUniqueId) +QtGui.QPointingDeviceUniqueId.fromNumericId?4(int) -> QPointingDeviceUniqueId +QtGui.QPointingDeviceUniqueId.isValid?4() -> bool +QtGui.QPointingDeviceUniqueId.numericId?4() -> int +QtGui.QFont.HintingPreference?10 +QtGui.QFont.HintingPreference.PreferDefaultHinting?10 +QtGui.QFont.HintingPreference.PreferNoHinting?10 +QtGui.QFont.HintingPreference.PreferVerticalHinting?10 +QtGui.QFont.HintingPreference.PreferFullHinting?10 +QtGui.QFont.SpacingType?10 +QtGui.QFont.SpacingType.PercentageSpacing?10 +QtGui.QFont.SpacingType.AbsoluteSpacing?10 +QtGui.QFont.Capitalization?10 +QtGui.QFont.Capitalization.MixedCase?10 +QtGui.QFont.Capitalization.AllUppercase?10 +QtGui.QFont.Capitalization.AllLowercase?10 +QtGui.QFont.Capitalization.SmallCaps?10 +QtGui.QFont.Capitalization.Capitalize?10 +QtGui.QFont.Stretch?10 +QtGui.QFont.Stretch.AnyStretch?10 +QtGui.QFont.Stretch.UltraCondensed?10 +QtGui.QFont.Stretch.ExtraCondensed?10 +QtGui.QFont.Stretch.Condensed?10 +QtGui.QFont.Stretch.SemiCondensed?10 +QtGui.QFont.Stretch.Unstretched?10 +QtGui.QFont.Stretch.SemiExpanded?10 +QtGui.QFont.Stretch.Expanded?10 +QtGui.QFont.Stretch.ExtraExpanded?10 +QtGui.QFont.Stretch.UltraExpanded?10 +QtGui.QFont.Style?10 +QtGui.QFont.Style.StyleNormal?10 +QtGui.QFont.Style.StyleItalic?10 +QtGui.QFont.Style.StyleOblique?10 +QtGui.QFont.Weight?10 +QtGui.QFont.Weight.Thin?10 +QtGui.QFont.Weight.ExtraLight?10 +QtGui.QFont.Weight.Light?10 +QtGui.QFont.Weight.Normal?10 +QtGui.QFont.Weight.Medium?10 +QtGui.QFont.Weight.DemiBold?10 +QtGui.QFont.Weight.Bold?10 +QtGui.QFont.Weight.ExtraBold?10 +QtGui.QFont.Weight.Black?10 +QtGui.QFont.StyleStrategy?10 +QtGui.QFont.StyleStrategy.PreferDefault?10 +QtGui.QFont.StyleStrategy.PreferBitmap?10 +QtGui.QFont.StyleStrategy.PreferDevice?10 +QtGui.QFont.StyleStrategy.PreferOutline?10 +QtGui.QFont.StyleStrategy.ForceOutline?10 +QtGui.QFont.StyleStrategy.PreferMatch?10 +QtGui.QFont.StyleStrategy.PreferQuality?10 +QtGui.QFont.StyleStrategy.PreferAntialias?10 +QtGui.QFont.StyleStrategy.NoAntialias?10 +QtGui.QFont.StyleStrategy.NoSubpixelAntialias?10 +QtGui.QFont.StyleStrategy.OpenGLCompatible?10 +QtGui.QFont.StyleStrategy.NoFontMerging?10 +QtGui.QFont.StyleStrategy.ForceIntegerMetrics?10 +QtGui.QFont.StyleStrategy.PreferNoShaping?10 +QtGui.QFont.StyleHint?10 +QtGui.QFont.StyleHint.Helvetica?10 +QtGui.QFont.StyleHint.SansSerif?10 +QtGui.QFont.StyleHint.Times?10 +QtGui.QFont.StyleHint.Serif?10 +QtGui.QFont.StyleHint.Courier?10 +QtGui.QFont.StyleHint.TypeWriter?10 +QtGui.QFont.StyleHint.OldEnglish?10 +QtGui.QFont.StyleHint.Decorative?10 +QtGui.QFont.StyleHint.System?10 +QtGui.QFont.StyleHint.AnyStyle?10 +QtGui.QFont.StyleHint.Cursive?10 +QtGui.QFont.StyleHint.Monospace?10 +QtGui.QFont.StyleHint.Fantasy?10 +QtGui.QFont?1() +QtGui.QFont.__init__?1(self) +QtGui.QFont?1(QString, int pointSize=-1, int weight=-1, bool italic=False) +QtGui.QFont.__init__?1(self, QString, int pointSize=-1, int weight=-1, bool italic=False) +QtGui.QFont?1(QFont, QPaintDevice) +QtGui.QFont.__init__?1(self, QFont, QPaintDevice) +QtGui.QFont?1(QFont) +QtGui.QFont.__init__?1(self, QFont) +QtGui.QFont?1(QVariant) +QtGui.QFont.__init__?1(self, QVariant) +QtGui.QFont.family?4() -> QString +QtGui.QFont.setFamily?4(QString) +QtGui.QFont.pointSize?4() -> int +QtGui.QFont.setPointSize?4(int) +QtGui.QFont.pointSizeF?4() -> float +QtGui.QFont.setPointSizeF?4(float) +QtGui.QFont.pixelSize?4() -> int +QtGui.QFont.setPixelSize?4(int) +QtGui.QFont.weight?4() -> int +QtGui.QFont.setWeight?4(int) +QtGui.QFont.setStyle?4(QFont.Style) +QtGui.QFont.style?4() -> QFont.Style +QtGui.QFont.underline?4() -> bool +QtGui.QFont.setUnderline?4(bool) +QtGui.QFont.overline?4() -> bool +QtGui.QFont.setOverline?4(bool) +QtGui.QFont.strikeOut?4() -> bool +QtGui.QFont.setStrikeOut?4(bool) +QtGui.QFont.fixedPitch?4() -> bool +QtGui.QFont.setFixedPitch?4(bool) +QtGui.QFont.kerning?4() -> bool +QtGui.QFont.setKerning?4(bool) +QtGui.QFont.styleHint?4() -> QFont.StyleHint +QtGui.QFont.styleStrategy?4() -> QFont.StyleStrategy +QtGui.QFont.setStyleHint?4(QFont.StyleHint, QFont.StyleStrategy strategy=QFont.PreferDefault) +QtGui.QFont.setStyleStrategy?4(QFont.StyleStrategy) +QtGui.QFont.stretch?4() -> int +QtGui.QFont.setStretch?4(int) +QtGui.QFont.rawMode?4() -> bool +QtGui.QFont.setRawMode?4(bool) +QtGui.QFont.exactMatch?4() -> bool +QtGui.QFont.isCopyOf?4(QFont) -> bool +QtGui.QFont.setRawName?4(QString) +QtGui.QFont.rawName?4() -> QString +QtGui.QFont.key?4() -> QString +QtGui.QFont.toString?4() -> QString +QtGui.QFont.fromString?4(QString) -> bool +QtGui.QFont.substitute?4(QString) -> QString +QtGui.QFont.substitutes?4(QString) -> QStringList +QtGui.QFont.substitutions?4() -> QStringList +QtGui.QFont.insertSubstitution?4(QString, QString) +QtGui.QFont.insertSubstitutions?4(QString, QStringList) +QtGui.QFont.removeSubstitutions?4(QString) +QtGui.QFont.initialize?4() +QtGui.QFont.cleanup?4() +QtGui.QFont.cacheStatistics?4() +QtGui.QFont.defaultFamily?4() -> QString +QtGui.QFont.lastResortFamily?4() -> QString +QtGui.QFont.lastResortFont?4() -> QString +QtGui.QFont.resolve?4(QFont) -> QFont +QtGui.QFont.bold?4() -> bool +QtGui.QFont.setBold?4(bool) +QtGui.QFont.italic?4() -> bool +QtGui.QFont.setItalic?4(bool) +QtGui.QFont.letterSpacing?4() -> float +QtGui.QFont.letterSpacingType?4() -> QFont.SpacingType +QtGui.QFont.setLetterSpacing?4(QFont.SpacingType, float) +QtGui.QFont.wordSpacing?4() -> float +QtGui.QFont.setWordSpacing?4(float) +QtGui.QFont.setCapitalization?4(QFont.Capitalization) +QtGui.QFont.capitalization?4() -> QFont.Capitalization +QtGui.QFont.styleName?4() -> QString +QtGui.QFont.setStyleName?4(QString) +QtGui.QFont.setHintingPreference?4(QFont.HintingPreference) +QtGui.QFont.hintingPreference?4() -> QFont.HintingPreference +QtGui.QFont.swap?4(QFont) +QtGui.QFont.families?4() -> QStringList +QtGui.QFont.setFamilies?4(QStringList) +QtGui.QFontDatabase.SystemFont?10 +QtGui.QFontDatabase.SystemFont.GeneralFont?10 +QtGui.QFontDatabase.SystemFont.FixedFont?10 +QtGui.QFontDatabase.SystemFont.TitleFont?10 +QtGui.QFontDatabase.SystemFont.SmallestReadableFont?10 +QtGui.QFontDatabase.WritingSystem?10 +QtGui.QFontDatabase.WritingSystem.Any?10 +QtGui.QFontDatabase.WritingSystem.Latin?10 +QtGui.QFontDatabase.WritingSystem.Greek?10 +QtGui.QFontDatabase.WritingSystem.Cyrillic?10 +QtGui.QFontDatabase.WritingSystem.Armenian?10 +QtGui.QFontDatabase.WritingSystem.Hebrew?10 +QtGui.QFontDatabase.WritingSystem.Arabic?10 +QtGui.QFontDatabase.WritingSystem.Syriac?10 +QtGui.QFontDatabase.WritingSystem.Thaana?10 +QtGui.QFontDatabase.WritingSystem.Devanagari?10 +QtGui.QFontDatabase.WritingSystem.Bengali?10 +QtGui.QFontDatabase.WritingSystem.Gurmukhi?10 +QtGui.QFontDatabase.WritingSystem.Gujarati?10 +QtGui.QFontDatabase.WritingSystem.Oriya?10 +QtGui.QFontDatabase.WritingSystem.Tamil?10 +QtGui.QFontDatabase.WritingSystem.Telugu?10 +QtGui.QFontDatabase.WritingSystem.Kannada?10 +QtGui.QFontDatabase.WritingSystem.Malayalam?10 +QtGui.QFontDatabase.WritingSystem.Sinhala?10 +QtGui.QFontDatabase.WritingSystem.Thai?10 +QtGui.QFontDatabase.WritingSystem.Lao?10 +QtGui.QFontDatabase.WritingSystem.Tibetan?10 +QtGui.QFontDatabase.WritingSystem.Myanmar?10 +QtGui.QFontDatabase.WritingSystem.Georgian?10 +QtGui.QFontDatabase.WritingSystem.Khmer?10 +QtGui.QFontDatabase.WritingSystem.SimplifiedChinese?10 +QtGui.QFontDatabase.WritingSystem.TraditionalChinese?10 +QtGui.QFontDatabase.WritingSystem.Japanese?10 +QtGui.QFontDatabase.WritingSystem.Korean?10 +QtGui.QFontDatabase.WritingSystem.Vietnamese?10 +QtGui.QFontDatabase.WritingSystem.Other?10 +QtGui.QFontDatabase.WritingSystem.Symbol?10 +QtGui.QFontDatabase.WritingSystem.Ogham?10 +QtGui.QFontDatabase.WritingSystem.Runic?10 +QtGui.QFontDatabase.WritingSystem.Nko?10 +QtGui.QFontDatabase?1() +QtGui.QFontDatabase.__init__?1(self) +QtGui.QFontDatabase?1(QFontDatabase) +QtGui.QFontDatabase.__init__?1(self, QFontDatabase) +QtGui.QFontDatabase.standardSizes?4() -> unknown-type +QtGui.QFontDatabase.writingSystems?4() -> unknown-type +QtGui.QFontDatabase.writingSystems?4(QString) -> unknown-type +QtGui.QFontDatabase.families?4(QFontDatabase.WritingSystem writingSystem=QFontDatabase.Any) -> QStringList +QtGui.QFontDatabase.styles?4(QString) -> QStringList +QtGui.QFontDatabase.pointSizes?4(QString, QString style='') -> unknown-type +QtGui.QFontDatabase.smoothSizes?4(QString, QString) -> unknown-type +QtGui.QFontDatabase.styleString?4(QFont) -> QString +QtGui.QFontDatabase.styleString?4(QFontInfo) -> QString +QtGui.QFontDatabase.font?4(QString, QString, int) -> QFont +QtGui.QFontDatabase.isBitmapScalable?4(QString, QString style='') -> bool +QtGui.QFontDatabase.isSmoothlyScalable?4(QString, QString style='') -> bool +QtGui.QFontDatabase.isScalable?4(QString, QString style='') -> bool +QtGui.QFontDatabase.isFixedPitch?4(QString, QString style='') -> bool +QtGui.QFontDatabase.italic?4(QString, QString) -> bool +QtGui.QFontDatabase.bold?4(QString, QString) -> bool +QtGui.QFontDatabase.weight?4(QString, QString) -> int +QtGui.QFontDatabase.writingSystemName?4(QFontDatabase.WritingSystem) -> QString +QtGui.QFontDatabase.writingSystemSample?4(QFontDatabase.WritingSystem) -> QString +QtGui.QFontDatabase.addApplicationFont?4(QString) -> int +QtGui.QFontDatabase.addApplicationFontFromData?4(QByteArray) -> int +QtGui.QFontDatabase.applicationFontFamilies?4(int) -> QStringList +QtGui.QFontDatabase.removeApplicationFont?4(int) -> bool +QtGui.QFontDatabase.removeAllApplicationFonts?4() -> bool +QtGui.QFontDatabase.supportsThreadedFontRendering?4() -> bool +QtGui.QFontDatabase.systemFont?4(QFontDatabase.SystemFont) -> QFont +QtGui.QFontDatabase.isPrivateFamily?4(QString) -> bool +QtGui.QFontInfo?1(QFont) +QtGui.QFontInfo.__init__?1(self, QFont) +QtGui.QFontInfo?1(QFontInfo) +QtGui.QFontInfo.__init__?1(self, QFontInfo) +QtGui.QFontInfo.family?4() -> QString +QtGui.QFontInfo.pixelSize?4() -> int +QtGui.QFontInfo.pointSize?4() -> int +QtGui.QFontInfo.pointSizeF?4() -> float +QtGui.QFontInfo.italic?4() -> bool +QtGui.QFontInfo.style?4() -> QFont.Style +QtGui.QFontInfo.weight?4() -> int +QtGui.QFontInfo.bold?4() -> bool +QtGui.QFontInfo.fixedPitch?4() -> bool +QtGui.QFontInfo.styleHint?4() -> QFont.StyleHint +QtGui.QFontInfo.rawMode?4() -> bool +QtGui.QFontInfo.exactMatch?4() -> bool +QtGui.QFontInfo.styleName?4() -> QString +QtGui.QFontInfo.swap?4(QFontInfo) +QtGui.QFontMetrics?1(QFont) +QtGui.QFontMetrics.__init__?1(self, QFont) +QtGui.QFontMetrics?1(QFont, QPaintDevice) +QtGui.QFontMetrics.__init__?1(self, QFont, QPaintDevice) +QtGui.QFontMetrics?1(QFontMetrics) +QtGui.QFontMetrics.__init__?1(self, QFontMetrics) +QtGui.QFontMetrics.ascent?4() -> int +QtGui.QFontMetrics.descent?4() -> int +QtGui.QFontMetrics.height?4() -> int +QtGui.QFontMetrics.leading?4() -> int +QtGui.QFontMetrics.lineSpacing?4() -> int +QtGui.QFontMetrics.minLeftBearing?4() -> int +QtGui.QFontMetrics.minRightBearing?4() -> int +QtGui.QFontMetrics.maxWidth?4() -> int +QtGui.QFontMetrics.xHeight?4() -> int +QtGui.QFontMetrics.inFont?4(QChar) -> bool +QtGui.QFontMetrics.leftBearing?4(QChar) -> int +QtGui.QFontMetrics.rightBearing?4(QChar) -> int +QtGui.QFontMetrics.widthChar?4(QChar) -> int +QtGui.QFontMetrics.width?4(QString, int length=-1) -> int +QtGui.QFontMetrics.boundingRectChar?4(QChar) -> QRect +QtGui.QFontMetrics.boundingRect?4(QString) -> QRect +QtGui.QFontMetrics.boundingRect?4(QRect, int, QString, int tabStops=0, List tabArray=None) -> QRect +QtGui.QFontMetrics.boundingRect?4(int, int, int, int, int, QString, int tabStops=0, List tabArray=None) -> QRect +QtGui.QFontMetrics.size?4(int, QString, int tabStops=0, List tabArray=None) -> QSize +QtGui.QFontMetrics.underlinePos?4() -> int +QtGui.QFontMetrics.overlinePos?4() -> int +QtGui.QFontMetrics.strikeOutPos?4() -> int +QtGui.QFontMetrics.lineWidth?4() -> int +QtGui.QFontMetrics.averageCharWidth?4() -> int +QtGui.QFontMetrics.elidedText?4(QString, Qt.TextElideMode, int, int flags=0) -> QString +QtGui.QFontMetrics.tightBoundingRect?4(QString) -> QRect +QtGui.QFontMetrics.inFontUcs4?4(int) -> bool +QtGui.QFontMetrics.swap?4(QFontMetrics) +QtGui.QFontMetrics.capHeight?4() -> int +QtGui.QFontMetrics.horizontalAdvance?4(QString, int length=-1) -> int +QtGui.QFontMetrics.fontDpi?4() -> float +QtGui.QFontMetricsF?1(QFont) +QtGui.QFontMetricsF.__init__?1(self, QFont) +QtGui.QFontMetricsF?1(QFont, QPaintDevice) +QtGui.QFontMetricsF.__init__?1(self, QFont, QPaintDevice) +QtGui.QFontMetricsF?1(QFontMetrics) +QtGui.QFontMetricsF.__init__?1(self, QFontMetrics) +QtGui.QFontMetricsF?1(QFontMetricsF) +QtGui.QFontMetricsF.__init__?1(self, QFontMetricsF) +QtGui.QFontMetricsF.ascent?4() -> float +QtGui.QFontMetricsF.descent?4() -> float +QtGui.QFontMetricsF.height?4() -> float +QtGui.QFontMetricsF.leading?4() -> float +QtGui.QFontMetricsF.lineSpacing?4() -> float +QtGui.QFontMetricsF.minLeftBearing?4() -> float +QtGui.QFontMetricsF.minRightBearing?4() -> float +QtGui.QFontMetricsF.maxWidth?4() -> float +QtGui.QFontMetricsF.xHeight?4() -> float +QtGui.QFontMetricsF.inFont?4(QChar) -> bool +QtGui.QFontMetricsF.leftBearing?4(QChar) -> float +QtGui.QFontMetricsF.rightBearing?4(QChar) -> float +QtGui.QFontMetricsF.widthChar?4(QChar) -> float +QtGui.QFontMetricsF.width?4(QString) -> float +QtGui.QFontMetricsF.boundingRectChar?4(QChar) -> QRectF +QtGui.QFontMetricsF.boundingRect?4(QString) -> QRectF +QtGui.QFontMetricsF.boundingRect?4(QRectF, int, QString, int tabStops=0, List tabArray=None) -> QRectF +QtGui.QFontMetricsF.size?4(int, QString, int tabStops=0, List tabArray=None) -> QSizeF +QtGui.QFontMetricsF.underlinePos?4() -> float +QtGui.QFontMetricsF.overlinePos?4() -> float +QtGui.QFontMetricsF.strikeOutPos?4() -> float +QtGui.QFontMetricsF.lineWidth?4() -> float +QtGui.QFontMetricsF.averageCharWidth?4() -> float +QtGui.QFontMetricsF.elidedText?4(QString, Qt.TextElideMode, float, int flags=0) -> QString +QtGui.QFontMetricsF.tightBoundingRect?4(QString) -> QRectF +QtGui.QFontMetricsF.inFontUcs4?4(int) -> bool +QtGui.QFontMetricsF.swap?4(QFontMetricsF) +QtGui.QFontMetricsF.capHeight?4() -> float +QtGui.QFontMetricsF.horizontalAdvance?4(QString, int length=-1) -> float +QtGui.QFontMetricsF.fontDpi?4() -> float +QtGui.QMatrix4x3?1() +QtGui.QMatrix4x3.__init__?1(self) +QtGui.QMatrix4x3?1(QMatrix4x3) +QtGui.QMatrix4x3.__init__?1(self, QMatrix4x3) +QtGui.QMatrix4x3?1(Any) +QtGui.QMatrix4x3.__init__?1(self, Any) +QtGui.QMatrix4x3.data?4() -> List +QtGui.QMatrix4x3.copyDataTo?4() -> List +QtGui.QMatrix4x3.isIdentity?4() -> bool +QtGui.QMatrix4x3.setToIdentity?4() +QtGui.QMatrix4x3.fill?4(float) +QtGui.QMatrix4x3.transposed?4() -> QMatrix3x4 +QtGui.QMatrix4x2?1() +QtGui.QMatrix4x2.__init__?1(self) +QtGui.QMatrix4x2?1(QMatrix4x2) +QtGui.QMatrix4x2.__init__?1(self, QMatrix4x2) +QtGui.QMatrix4x2?1(Any) +QtGui.QMatrix4x2.__init__?1(self, Any) +QtGui.QMatrix4x2.data?4() -> List +QtGui.QMatrix4x2.copyDataTo?4() -> List +QtGui.QMatrix4x2.isIdentity?4() -> bool +QtGui.QMatrix4x2.setToIdentity?4() +QtGui.QMatrix4x2.fill?4(float) +QtGui.QMatrix4x2.transposed?4() -> QMatrix2x4 +QtGui.QMatrix3x4?1() +QtGui.QMatrix3x4.__init__?1(self) +QtGui.QMatrix3x4?1(QMatrix3x4) +QtGui.QMatrix3x4.__init__?1(self, QMatrix3x4) +QtGui.QMatrix3x4?1(Any) +QtGui.QMatrix3x4.__init__?1(self, Any) +QtGui.QMatrix3x4.data?4() -> List +QtGui.QMatrix3x4.copyDataTo?4() -> List +QtGui.QMatrix3x4.isIdentity?4() -> bool +QtGui.QMatrix3x4.setToIdentity?4() +QtGui.QMatrix3x4.fill?4(float) +QtGui.QMatrix3x4.transposed?4() -> QMatrix4x3 +QtGui.QMatrix3x3?1() +QtGui.QMatrix3x3.__init__?1(self) +QtGui.QMatrix3x3?1(QMatrix3x3) +QtGui.QMatrix3x3.__init__?1(self, QMatrix3x3) +QtGui.QMatrix3x3?1(Any) +QtGui.QMatrix3x3.__init__?1(self, Any) +QtGui.QMatrix3x3.data?4() -> List +QtGui.QMatrix3x3.copyDataTo?4() -> List +QtGui.QMatrix3x3.isIdentity?4() -> bool +QtGui.QMatrix3x3.setToIdentity?4() +QtGui.QMatrix3x3.fill?4(float) +QtGui.QMatrix3x3.transposed?4() -> QMatrix3x3 +QtGui.QMatrix3x2?1() +QtGui.QMatrix3x2.__init__?1(self) +QtGui.QMatrix3x2?1(QMatrix3x2) +QtGui.QMatrix3x2.__init__?1(self, QMatrix3x2) +QtGui.QMatrix3x2?1(Any) +QtGui.QMatrix3x2.__init__?1(self, Any) +QtGui.QMatrix3x2.data?4() -> List +QtGui.QMatrix3x2.copyDataTo?4() -> List +QtGui.QMatrix3x2.isIdentity?4() -> bool +QtGui.QMatrix3x2.setToIdentity?4() +QtGui.QMatrix3x2.fill?4(float) +QtGui.QMatrix3x2.transposed?4() -> QMatrix2x3 +QtGui.QMatrix2x4?1() +QtGui.QMatrix2x4.__init__?1(self) +QtGui.QMatrix2x4?1(QMatrix2x4) +QtGui.QMatrix2x4.__init__?1(self, QMatrix2x4) +QtGui.QMatrix2x4?1(Any) +QtGui.QMatrix2x4.__init__?1(self, Any) +QtGui.QMatrix2x4.data?4() -> List +QtGui.QMatrix2x4.copyDataTo?4() -> List +QtGui.QMatrix2x4.isIdentity?4() -> bool +QtGui.QMatrix2x4.setToIdentity?4() +QtGui.QMatrix2x4.fill?4(float) +QtGui.QMatrix2x4.transposed?4() -> QMatrix4x2 +QtGui.QMatrix2x3?1() +QtGui.QMatrix2x3.__init__?1(self) +QtGui.QMatrix2x3?1(QMatrix2x3) +QtGui.QMatrix2x3.__init__?1(self, QMatrix2x3) +QtGui.QMatrix2x3?1(Any) +QtGui.QMatrix2x3.__init__?1(self, Any) +QtGui.QMatrix2x3.data?4() -> List +QtGui.QMatrix2x3.copyDataTo?4() -> List +QtGui.QMatrix2x3.isIdentity?4() -> bool +QtGui.QMatrix2x3.setToIdentity?4() +QtGui.QMatrix2x3.fill?4(float) +QtGui.QMatrix2x3.transposed?4() -> QMatrix3x2 +QtGui.QMatrix2x2?1() +QtGui.QMatrix2x2.__init__?1(self) +QtGui.QMatrix2x2?1(QMatrix2x2) +QtGui.QMatrix2x2.__init__?1(self, QMatrix2x2) +QtGui.QMatrix2x2?1(Any) +QtGui.QMatrix2x2.__init__?1(self, Any) +QtGui.QMatrix2x2.data?4() -> List +QtGui.QMatrix2x2.copyDataTo?4() -> List +QtGui.QMatrix2x2.isIdentity?4() -> bool +QtGui.QMatrix2x2.setToIdentity?4() +QtGui.QMatrix2x2.fill?4(float) +QtGui.QMatrix2x2.transposed?4() -> QMatrix2x2 +QtGui.QGlyphRun.GlyphRunFlag?10 +QtGui.QGlyphRun.GlyphRunFlag.Overline?10 +QtGui.QGlyphRun.GlyphRunFlag.Underline?10 +QtGui.QGlyphRun.GlyphRunFlag.StrikeOut?10 +QtGui.QGlyphRun.GlyphRunFlag.RightToLeft?10 +QtGui.QGlyphRun.GlyphRunFlag.SplitLigature?10 +QtGui.QGlyphRun?1() +QtGui.QGlyphRun.__init__?1(self) +QtGui.QGlyphRun?1(QGlyphRun) +QtGui.QGlyphRun.__init__?1(self, QGlyphRun) +QtGui.QGlyphRun.rawFont?4() -> QRawFont +QtGui.QGlyphRun.setRawFont?4(QRawFont) +QtGui.QGlyphRun.glyphIndexes?4() -> unknown-type +QtGui.QGlyphRun.setGlyphIndexes?4(unknown-type) +QtGui.QGlyphRun.positions?4() -> unknown-type +QtGui.QGlyphRun.setPositions?4(unknown-type) +QtGui.QGlyphRun.clear?4() +QtGui.QGlyphRun.setOverline?4(bool) +QtGui.QGlyphRun.overline?4() -> bool +QtGui.QGlyphRun.setUnderline?4(bool) +QtGui.QGlyphRun.underline?4() -> bool +QtGui.QGlyphRun.setStrikeOut?4(bool) +QtGui.QGlyphRun.strikeOut?4() -> bool +QtGui.QGlyphRun.setRightToLeft?4(bool) +QtGui.QGlyphRun.isRightToLeft?4() -> bool +QtGui.QGlyphRun.setFlag?4(QGlyphRun.GlyphRunFlag, bool enabled=True) +QtGui.QGlyphRun.setFlags?4(QGlyphRun.GlyphRunFlags) +QtGui.QGlyphRun.flags?4() -> QGlyphRun.GlyphRunFlags +QtGui.QGlyphRun.setBoundingRect?4(QRectF) +QtGui.QGlyphRun.boundingRect?4() -> QRectF +QtGui.QGlyphRun.isEmpty?4() -> bool +QtGui.QGlyphRun.swap?4(QGlyphRun) +QtGui.QGlyphRun.GlyphRunFlags?1() +QtGui.QGlyphRun.GlyphRunFlags.__init__?1(self) +QtGui.QGlyphRun.GlyphRunFlags?1(int) +QtGui.QGlyphRun.GlyphRunFlags.__init__?1(self, int) +QtGui.QGlyphRun.GlyphRunFlags?1(QGlyphRun.GlyphRunFlags) +QtGui.QGlyphRun.GlyphRunFlags.__init__?1(self, QGlyphRun.GlyphRunFlags) +QtGui.QGuiApplication?1(List) +QtGui.QGuiApplication.__init__?1(self, List) +QtGui.QGuiApplication.allWindows?4() -> unknown-type +QtGui.QGuiApplication.topLevelWindows?4() -> unknown-type +QtGui.QGuiApplication.topLevelAt?4(QPoint) -> QWindow +QtGui.QGuiApplication.platformName?4() -> QString +QtGui.QGuiApplication.focusWindow?4() -> QWindow +QtGui.QGuiApplication.focusObject?4() -> QObject +QtGui.QGuiApplication.primaryScreen?4() -> QScreen +QtGui.QGuiApplication.screens?4() -> unknown-type +QtGui.QGuiApplication.overrideCursor?4() -> QCursor +QtGui.QGuiApplication.setOverrideCursor?4(QCursor) +QtGui.QGuiApplication.changeOverrideCursor?4(QCursor) +QtGui.QGuiApplication.restoreOverrideCursor?4() +QtGui.QGuiApplication.font?4() -> QFont +QtGui.QGuiApplication.setFont?4(QFont) +QtGui.QGuiApplication.clipboard?4() -> QClipboard +QtGui.QGuiApplication.palette?4() -> QPalette +QtGui.QGuiApplication.setPalette?4(QPalette) +QtGui.QGuiApplication.keyboardModifiers?4() -> Qt.KeyboardModifiers +QtGui.QGuiApplication.queryKeyboardModifiers?4() -> Qt.KeyboardModifiers +QtGui.QGuiApplication.mouseButtons?4() -> Qt.MouseButtons +QtGui.QGuiApplication.setLayoutDirection?4(Qt.LayoutDirection) +QtGui.QGuiApplication.layoutDirection?4() -> Qt.LayoutDirection +QtGui.QGuiApplication.isRightToLeft?4() -> bool +QtGui.QGuiApplication.isLeftToRight?4() -> bool +QtGui.QGuiApplication.setDesktopSettingsAware?4(bool) +QtGui.QGuiApplication.desktopSettingsAware?4() -> bool +QtGui.QGuiApplication.setQuitOnLastWindowClosed?4(bool) +QtGui.QGuiApplication.quitOnLastWindowClosed?4() -> bool +QtGui.QGuiApplication.exec_?4() -> int +QtGui.QGuiApplication.exec?4() -> int +QtGui.QGuiApplication.notify?4(QObject, QEvent) -> bool +QtGui.QGuiApplication.fontDatabaseChanged?4() +QtGui.QGuiApplication.screenAdded?4(QScreen) +QtGui.QGuiApplication.lastWindowClosed?4() +QtGui.QGuiApplication.focusObjectChanged?4(QObject) +QtGui.QGuiApplication.commitDataRequest?4(QSessionManager) +QtGui.QGuiApplication.saveStateRequest?4(QSessionManager) +QtGui.QGuiApplication.focusWindowChanged?4(QWindow) +QtGui.QGuiApplication.applicationStateChanged?4(Qt.ApplicationState) +QtGui.QGuiApplication.applicationDisplayNameChanged?4() +QtGui.QGuiApplication.setApplicationDisplayName?4(QString) +QtGui.QGuiApplication.applicationDisplayName?4() -> QString +QtGui.QGuiApplication.modalWindow?4() -> QWindow +QtGui.QGuiApplication.styleHints?4() -> QStyleHints +QtGui.QGuiApplication.inputMethod?4() -> QInputMethod +QtGui.QGuiApplication.devicePixelRatio?4() -> float +QtGui.QGuiApplication.isSessionRestored?4() -> bool +QtGui.QGuiApplication.sessionId?4() -> QString +QtGui.QGuiApplication.sessionKey?4() -> QString +QtGui.QGuiApplication.isSavingSession?4() -> bool +QtGui.QGuiApplication.applicationState?4() -> Qt.ApplicationState +QtGui.QGuiApplication.sync?4() +QtGui.QGuiApplication.setWindowIcon?4(QIcon) +QtGui.QGuiApplication.windowIcon?4() -> QIcon +QtGui.QGuiApplication.event?4(QEvent) -> bool +QtGui.QGuiApplication.screenRemoved?4(QScreen) +QtGui.QGuiApplication.layoutDirectionChanged?4(Qt.LayoutDirection) +QtGui.QGuiApplication.paletteChanged?4(QPalette) +QtGui.QGuiApplication.isFallbackSessionManagementEnabled?4() -> bool +QtGui.QGuiApplication.setFallbackSessionManagementEnabled?4(bool) +QtGui.QGuiApplication.primaryScreenChanged?4(QScreen) +QtGui.QGuiApplication.setDesktopFileName?4(QString) +QtGui.QGuiApplication.desktopFileName?4() -> QString +QtGui.QGuiApplication.screenAt?4(QPoint) -> QScreen +QtGui.QGuiApplication.fontChanged?4(QFont) +QtGui.QGuiApplication.setHighDpiScaleFactorRoundingPolicy?4(Qt.HighDpiScaleFactorRoundingPolicy) +QtGui.QGuiApplication.highDpiScaleFactorRoundingPolicy?4() -> Qt.HighDpiScaleFactorRoundingPolicy +QtGui.QIcon.State?10 +QtGui.QIcon.State.On?10 +QtGui.QIcon.State.Off?10 +QtGui.QIcon.Mode?10 +QtGui.QIcon.Mode.Normal?10 +QtGui.QIcon.Mode.Disabled?10 +QtGui.QIcon.Mode.Active?10 +QtGui.QIcon.Mode.Selected?10 +QtGui.QIcon?1() +QtGui.QIcon.__init__?1(self) +QtGui.QIcon?1(QPixmap) +QtGui.QIcon.__init__?1(self, QPixmap) +QtGui.QIcon?1(QIcon) +QtGui.QIcon.__init__?1(self, QIcon) +QtGui.QIcon?1(QString) +QtGui.QIcon.__init__?1(self, QString) +QtGui.QIcon?1(QIconEngine) +QtGui.QIcon.__init__?1(self, QIconEngine) +QtGui.QIcon?1(QVariant) +QtGui.QIcon.__init__?1(self, QVariant) +QtGui.QIcon.pixmap?4(QSize, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QPixmap +QtGui.QIcon.pixmap?4(int, int, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QPixmap +QtGui.QIcon.pixmap?4(int, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QPixmap +QtGui.QIcon.pixmap?4(QWindow, QSize, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QPixmap +QtGui.QIcon.actualSize?4(QSize, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QSize +QtGui.QIcon.actualSize?4(QWindow, QSize, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> QSize +QtGui.QIcon.availableSizes?4(QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> unknown-type +QtGui.QIcon.paint?4(QPainter, QRect, Qt.Alignment alignment=Qt.AlignCenter, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) +QtGui.QIcon.paint?4(QPainter, int, int, int, int, Qt.Alignment alignment=Qt.AlignCenter, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) +QtGui.QIcon.isNull?4() -> bool +QtGui.QIcon.isDetached?4() -> bool +QtGui.QIcon.addPixmap?4(QPixmap, QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) +QtGui.QIcon.addFile?4(QString, QSize size=QSize(), QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) +QtGui.QIcon.cacheKey?4() -> int +QtGui.QIcon.fromTheme?4(QString) -> QIcon +QtGui.QIcon.fromTheme?4(QString, QIcon) -> QIcon +QtGui.QIcon.hasThemeIcon?4(QString) -> bool +QtGui.QIcon.themeSearchPaths?4() -> QStringList +QtGui.QIcon.setThemeSearchPaths?4(QStringList) +QtGui.QIcon.themeName?4() -> QString +QtGui.QIcon.setThemeName?4(QString) +QtGui.QIcon.name?4() -> QString +QtGui.QIcon.swap?4(QIcon) +QtGui.QIcon.setIsMask?4(bool) +QtGui.QIcon.isMask?4() -> bool +QtGui.QIcon.fallbackSearchPaths?4() -> QStringList +QtGui.QIcon.setFallbackSearchPaths?4(QStringList) +QtGui.QIcon.fallbackThemeName?4() -> QString +QtGui.QIcon.setFallbackThemeName?4(QString) +QtGui.QIconEngine.IconEngineHook?10 +QtGui.QIconEngine.IconEngineHook.AvailableSizesHook?10 +QtGui.QIconEngine.IconEngineHook.IconNameHook?10 +QtGui.QIconEngine.IconEngineHook.IsNullHook?10 +QtGui.QIconEngine.IconEngineHook.ScaledPixmapHook?10 +QtGui.QIconEngine?1() +QtGui.QIconEngine.__init__?1(self) +QtGui.QIconEngine?1(QIconEngine) +QtGui.QIconEngine.__init__?1(self, QIconEngine) +QtGui.QIconEngine.paint?4(QPainter, QRect, QIcon.Mode, QIcon.State) +QtGui.QIconEngine.actualSize?4(QSize, QIcon.Mode, QIcon.State) -> QSize +QtGui.QIconEngine.pixmap?4(QSize, QIcon.Mode, QIcon.State) -> QPixmap +QtGui.QIconEngine.addPixmap?4(QPixmap, QIcon.Mode, QIcon.State) +QtGui.QIconEngine.addFile?4(QString, QSize, QIcon.Mode, QIcon.State) +QtGui.QIconEngine.key?4() -> QString +QtGui.QIconEngine.clone?4() -> QIconEngine +QtGui.QIconEngine.read?4(QDataStream) -> bool +QtGui.QIconEngine.write?4(QDataStream) -> bool +QtGui.QIconEngine.availableSizes?4(QIcon.Mode mode=QIcon.Normal, QIcon.State state=QIcon.Off) -> unknown-type +QtGui.QIconEngine.iconName?4() -> QString +QtGui.QIconEngine.isNull?4() -> bool +QtGui.QIconEngine.scaledPixmap?4(QSize, QIcon.Mode, QIcon.State, float) -> QPixmap +QtGui.QIconEngine.AvailableSizesArgument.mode?7 +QtGui.QIconEngine.AvailableSizesArgument.sizes?7 +QtGui.QIconEngine.AvailableSizesArgument.state?7 +QtGui.QIconEngine.AvailableSizesArgument?1() +QtGui.QIconEngine.AvailableSizesArgument.__init__?1(self) +QtGui.QIconEngine.AvailableSizesArgument?1(QIconEngine.AvailableSizesArgument) +QtGui.QIconEngine.AvailableSizesArgument.__init__?1(self, QIconEngine.AvailableSizesArgument) +QtGui.QIconEngine.ScaledPixmapArgument.mode?7 +QtGui.QIconEngine.ScaledPixmapArgument.pixmap?7 +QtGui.QIconEngine.ScaledPixmapArgument.scale?7 +QtGui.QIconEngine.ScaledPixmapArgument.size?7 +QtGui.QIconEngine.ScaledPixmapArgument.state?7 +QtGui.QIconEngine.ScaledPixmapArgument?1() +QtGui.QIconEngine.ScaledPixmapArgument.__init__?1(self) +QtGui.QIconEngine.ScaledPixmapArgument?1(QIconEngine.ScaledPixmapArgument) +QtGui.QIconEngine.ScaledPixmapArgument.__init__?1(self, QIconEngine.ScaledPixmapArgument) +QtGui.QImage.Format?10 +QtGui.QImage.Format.Format_Invalid?10 +QtGui.QImage.Format.Format_Mono?10 +QtGui.QImage.Format.Format_MonoLSB?10 +QtGui.QImage.Format.Format_Indexed8?10 +QtGui.QImage.Format.Format_RGB32?10 +QtGui.QImage.Format.Format_ARGB32?10 +QtGui.QImage.Format.Format_ARGB32_Premultiplied?10 +QtGui.QImage.Format.Format_RGB16?10 +QtGui.QImage.Format.Format_ARGB8565_Premultiplied?10 +QtGui.QImage.Format.Format_RGB666?10 +QtGui.QImage.Format.Format_ARGB6666_Premultiplied?10 +QtGui.QImage.Format.Format_RGB555?10 +QtGui.QImage.Format.Format_ARGB8555_Premultiplied?10 +QtGui.QImage.Format.Format_RGB888?10 +QtGui.QImage.Format.Format_RGB444?10 +QtGui.QImage.Format.Format_ARGB4444_Premultiplied?10 +QtGui.QImage.Format.Format_RGBX8888?10 +QtGui.QImage.Format.Format_RGBA8888?10 +QtGui.QImage.Format.Format_RGBA8888_Premultiplied?10 +QtGui.QImage.Format.Format_BGR30?10 +QtGui.QImage.Format.Format_A2BGR30_Premultiplied?10 +QtGui.QImage.Format.Format_RGB30?10 +QtGui.QImage.Format.Format_A2RGB30_Premultiplied?10 +QtGui.QImage.Format.Format_Alpha8?10 +QtGui.QImage.Format.Format_Grayscale8?10 +QtGui.QImage.Format.Format_RGBX64?10 +QtGui.QImage.Format.Format_RGBA64?10 +QtGui.QImage.Format.Format_RGBA64_Premultiplied?10 +QtGui.QImage.Format.Format_Grayscale16?10 +QtGui.QImage.Format.Format_BGR888?10 +QtGui.QImage.InvertMode?10 +QtGui.QImage.InvertMode.InvertRgb?10 +QtGui.QImage.InvertMode.InvertRgba?10 +QtGui.QImage?1() +QtGui.QImage.__init__?1(self) +QtGui.QImage?1(QSize, QImage.Format) +QtGui.QImage.__init__?1(self, QSize, QImage.Format) +QtGui.QImage?1(int, int, QImage.Format) +QtGui.QImage.__init__?1(self, int, int, QImage.Format) +QtGui.QImage?1(bytes, int, int, QImage.Format) +QtGui.QImage.__init__?1(self, bytes, int, int, QImage.Format) +QtGui.QImage?1(PyQt5.sip.voidptr, int, int, QImage.Format) +QtGui.QImage.__init__?1(self, PyQt5.sip.voidptr, int, int, QImage.Format) +QtGui.QImage?1(bytes, int, int, int, QImage.Format) +QtGui.QImage.__init__?1(self, bytes, int, int, int, QImage.Format) +QtGui.QImage?1(PyQt5.sip.voidptr, int, int, int, QImage.Format) +QtGui.QImage.__init__?1(self, PyQt5.sip.voidptr, int, int, int, QImage.Format) +QtGui.QImage?1(List) +QtGui.QImage.__init__?1(self, List) +QtGui.QImage?1(QString, str format=None) +QtGui.QImage.__init__?1(self, QString, str format=None) +QtGui.QImage?1(QImage) +QtGui.QImage.__init__?1(self, QImage) +QtGui.QImage?1(QVariant) +QtGui.QImage.__init__?1(self, QVariant) +QtGui.QImage.isNull?4() -> bool +QtGui.QImage.devType?4() -> int +QtGui.QImage.detach?4() +QtGui.QImage.isDetached?4() -> bool +QtGui.QImage.copy?4(QRect rect=QRect()) -> QImage +QtGui.QImage.copy?4(int, int, int, int) -> QImage +QtGui.QImage.format?4() -> QImage.Format +QtGui.QImage.convertToFormat?4(QImage.Format, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) -> QImage +QtGui.QImage.convertToFormat?4(QImage.Format, unknown-type, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) -> QImage +QtGui.QImage.width?4() -> int +QtGui.QImage.height?4() -> int +QtGui.QImage.size?4() -> QSize +QtGui.QImage.rect?4() -> QRect +QtGui.QImage.depth?4() -> int +QtGui.QImage.color?4(int) -> int +QtGui.QImage.setColor?4(int, int) +QtGui.QImage.allGray?4() -> bool +QtGui.QImage.isGrayscale?4() -> bool +QtGui.QImage.bits?4() -> PyQt5.sip.voidptr +QtGui.QImage.constBits?4() -> PyQt5.sip.voidptr +QtGui.QImage.scanLine?4(int) -> PyQt5.sip.voidptr +QtGui.QImage.constScanLine?4(int) -> PyQt5.sip.voidptr +QtGui.QImage.bytesPerLine?4() -> int +QtGui.QImage.valid?4(QPoint) -> bool +QtGui.QImage.valid?4(int, int) -> bool +QtGui.QImage.pixelIndex?4(QPoint) -> int +QtGui.QImage.pixelIndex?4(int, int) -> int +QtGui.QImage.pixel?4(QPoint) -> int +QtGui.QImage.pixel?4(int, int) -> int +QtGui.QImage.setPixel?4(QPoint, int) +QtGui.QImage.setPixel?4(int, int, int) +QtGui.QImage.colorTable?4() -> unknown-type +QtGui.QImage.setColorTable?4(unknown-type) +QtGui.QImage.fill?4(Qt.GlobalColor) +QtGui.QImage.fill?4(QColor) +QtGui.QImage.fill?4(int) +QtGui.QImage.hasAlphaChannel?4() -> bool +QtGui.QImage.setAlphaChannel?4(QImage) +QtGui.QImage.createAlphaMask?4(Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) -> QImage +QtGui.QImage.createHeuristicMask?4(bool clipTight=True) -> QImage +QtGui.QImage.scaled?4(int, int, Qt.AspectRatioMode aspectRatioMode=Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode=Qt.FastTransformation) -> QImage +QtGui.QImage.scaled?4(QSize, Qt.AspectRatioMode aspectRatioMode=Qt.IgnoreAspectRatio, Qt.TransformationMode transformMode=Qt.FastTransformation) -> QImage +QtGui.QImage.scaledToWidth?4(int, Qt.TransformationMode mode=Qt.FastTransformation) -> QImage +QtGui.QImage.scaledToHeight?4(int, Qt.TransformationMode mode=Qt.FastTransformation) -> QImage +QtGui.QImage.mirrored?4(bool horizontal=False, bool vertical=True) -> QImage +QtGui.QImage.rgbSwapped?4() -> QImage +QtGui.QImage.invertPixels?4(QImage.InvertMode mode=QImage.InvertRgb) +QtGui.QImage.load?4(QIODevice, str) -> bool +QtGui.QImage.load?4(QString, str format=None) -> bool +QtGui.QImage.loadFromData?4(bytes, str format=None) -> bool +QtGui.QImage.loadFromData?4(QByteArray, str format=None) -> bool +QtGui.QImage.save?4(QString, str format=None, int quality=-1) -> bool +QtGui.QImage.save?4(QIODevice, str format=None, int quality=-1) -> bool +QtGui.QImage.fromData?4(bytes, str format=None) -> QImage +QtGui.QImage.fromData?4(QByteArray, str format=None) -> QImage +QtGui.QImage.paintEngine?4() -> QPaintEngine +QtGui.QImage.dotsPerMeterX?4() -> int +QtGui.QImage.dotsPerMeterY?4() -> int +QtGui.QImage.setDotsPerMeterX?4(int) +QtGui.QImage.setDotsPerMeterY?4(int) +QtGui.QImage.offset?4() -> QPoint +QtGui.QImage.setOffset?4(QPoint) +QtGui.QImage.textKeys?4() -> QStringList +QtGui.QImage.text?4(QString key='') -> QString +QtGui.QImage.setText?4(QString, QString) +QtGui.QImage.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QImage.smoothScaled?4(int, int) -> QImage +QtGui.QImage.createMaskFromColor?4(int, Qt.MaskMode mode=Qt.MaskInColor) -> QImage +QtGui.QImage.transformed?4(QTransform, Qt.TransformationMode mode=Qt.FastTransformation) -> QImage +QtGui.QImage.trueMatrix?4(QTransform, int, int) -> QTransform +QtGui.QImage.cacheKey?4() -> int +QtGui.QImage.colorCount?4() -> int +QtGui.QImage.setColorCount?4(int) +QtGui.QImage.byteCount?4() -> int +QtGui.QImage.bitPlaneCount?4() -> int +QtGui.QImage.swap?4(QImage) +QtGui.QImage.devicePixelRatio?4() -> float +QtGui.QImage.setDevicePixelRatio?4(float) +QtGui.QImage.pixelFormat?4() -> QPixelFormat +QtGui.QImage.toPixelFormat?4(QImage.Format) -> QPixelFormat +QtGui.QImage.toImageFormat?4(QPixelFormat) -> QImage.Format +QtGui.QImage.pixelColor?4(int, int) -> QColor +QtGui.QImage.pixelColor?4(QPoint) -> QColor +QtGui.QImage.setPixelColor?4(int, int, QColor) +QtGui.QImage.setPixelColor?4(QPoint, QColor) +QtGui.QImage.reinterpretAsFormat?4(QImage.Format) -> bool +QtGui.QImage.sizeInBytes?4() -> int +QtGui.QImage.convertTo?4(QImage.Format, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) +QtGui.QImage.colorSpace?4() -> QColorSpace +QtGui.QImage.convertedToColorSpace?4(QColorSpace) -> QImage +QtGui.QImage.convertToColorSpace?4(QColorSpace) +QtGui.QImage.setColorSpace?4(QColorSpace) +QtGui.QImage.applyColorTransform?4(QColorTransform) +QtGui.QImageIOHandler.Transformation?10 +QtGui.QImageIOHandler.Transformation.TransformationNone?10 +QtGui.QImageIOHandler.Transformation.TransformationMirror?10 +QtGui.QImageIOHandler.Transformation.TransformationFlip?10 +QtGui.QImageIOHandler.Transformation.TransformationRotate180?10 +QtGui.QImageIOHandler.Transformation.TransformationRotate90?10 +QtGui.QImageIOHandler.Transformation.TransformationMirrorAndRotate90?10 +QtGui.QImageIOHandler.Transformation.TransformationFlipAndRotate90?10 +QtGui.QImageIOHandler.Transformation.TransformationRotate270?10 +QtGui.QImageIOHandler.ImageOption?10 +QtGui.QImageIOHandler.ImageOption.Size?10 +QtGui.QImageIOHandler.ImageOption.ClipRect?10 +QtGui.QImageIOHandler.ImageOption.Description?10 +QtGui.QImageIOHandler.ImageOption.ScaledClipRect?10 +QtGui.QImageIOHandler.ImageOption.ScaledSize?10 +QtGui.QImageIOHandler.ImageOption.CompressionRatio?10 +QtGui.QImageIOHandler.ImageOption.Gamma?10 +QtGui.QImageIOHandler.ImageOption.Quality?10 +QtGui.QImageIOHandler.ImageOption.Name?10 +QtGui.QImageIOHandler.ImageOption.SubType?10 +QtGui.QImageIOHandler.ImageOption.IncrementalReading?10 +QtGui.QImageIOHandler.ImageOption.Endianness?10 +QtGui.QImageIOHandler.ImageOption.Animation?10 +QtGui.QImageIOHandler.ImageOption.BackgroundColor?10 +QtGui.QImageIOHandler.ImageOption.SupportedSubTypes?10 +QtGui.QImageIOHandler.ImageOption.OptimizedWrite?10 +QtGui.QImageIOHandler.ImageOption.ProgressiveScanWrite?10 +QtGui.QImageIOHandler.ImageOption.ImageTransformation?10 +QtGui.QImageIOHandler.ImageOption.TransformedByDefault?10 +QtGui.QImageIOHandler?1() +QtGui.QImageIOHandler.__init__?1(self) +QtGui.QImageIOHandler.setDevice?4(QIODevice) +QtGui.QImageIOHandler.device?4() -> QIODevice +QtGui.QImageIOHandler.setFormat?4(QByteArray) +QtGui.QImageIOHandler.format?4() -> QByteArray +QtGui.QImageIOHandler.canRead?4() -> bool +QtGui.QImageIOHandler.read?4(QImage) -> bool +QtGui.QImageIOHandler.write?4(QImage) -> bool +QtGui.QImageIOHandler.option?4(QImageIOHandler.ImageOption) -> QVariant +QtGui.QImageIOHandler.setOption?4(QImageIOHandler.ImageOption, QVariant) +QtGui.QImageIOHandler.supportsOption?4(QImageIOHandler.ImageOption) -> bool +QtGui.QImageIOHandler.jumpToNextImage?4() -> bool +QtGui.QImageIOHandler.jumpToImage?4(int) -> bool +QtGui.QImageIOHandler.loopCount?4() -> int +QtGui.QImageIOHandler.imageCount?4() -> int +QtGui.QImageIOHandler.nextImageDelay?4() -> int +QtGui.QImageIOHandler.currentImageNumber?4() -> int +QtGui.QImageIOHandler.currentImageRect?4() -> QRect +QtGui.QImageIOHandler.Transformations?1() +QtGui.QImageIOHandler.Transformations.__init__?1(self) +QtGui.QImageIOHandler.Transformations?1(int) +QtGui.QImageIOHandler.Transformations.__init__?1(self, int) +QtGui.QImageIOHandler.Transformations?1(QImageIOHandler.Transformations) +QtGui.QImageIOHandler.Transformations.__init__?1(self, QImageIOHandler.Transformations) +QtGui.QImageReader.ImageReaderError?10 +QtGui.QImageReader.ImageReaderError.UnknownError?10 +QtGui.QImageReader.ImageReaderError.FileNotFoundError?10 +QtGui.QImageReader.ImageReaderError.DeviceError?10 +QtGui.QImageReader.ImageReaderError.UnsupportedFormatError?10 +QtGui.QImageReader.ImageReaderError.InvalidDataError?10 +QtGui.QImageReader?1() +QtGui.QImageReader.__init__?1(self) +QtGui.QImageReader?1(QIODevice, QByteArray format=QByteArray()) +QtGui.QImageReader.__init__?1(self, QIODevice, QByteArray format=QByteArray()) +QtGui.QImageReader?1(QString, QByteArray format=QByteArray()) +QtGui.QImageReader.__init__?1(self, QString, QByteArray format=QByteArray()) +QtGui.QImageReader.setFormat?4(QByteArray) +QtGui.QImageReader.format?4() -> QByteArray +QtGui.QImageReader.setDevice?4(QIODevice) +QtGui.QImageReader.device?4() -> QIODevice +QtGui.QImageReader.setFileName?4(QString) +QtGui.QImageReader.fileName?4() -> QString +QtGui.QImageReader.size?4() -> QSize +QtGui.QImageReader.setClipRect?4(QRect) +QtGui.QImageReader.clipRect?4() -> QRect +QtGui.QImageReader.setScaledSize?4(QSize) +QtGui.QImageReader.scaledSize?4() -> QSize +QtGui.QImageReader.setScaledClipRect?4(QRect) +QtGui.QImageReader.scaledClipRect?4() -> QRect +QtGui.QImageReader.canRead?4() -> bool +QtGui.QImageReader.read?4() -> QImage +QtGui.QImageReader.read?4(QImage) -> bool +QtGui.QImageReader.jumpToNextImage?4() -> bool +QtGui.QImageReader.jumpToImage?4(int) -> bool +QtGui.QImageReader.loopCount?4() -> int +QtGui.QImageReader.imageCount?4() -> int +QtGui.QImageReader.nextImageDelay?4() -> int +QtGui.QImageReader.currentImageNumber?4() -> int +QtGui.QImageReader.currentImageRect?4() -> QRect +QtGui.QImageReader.error?4() -> QImageReader.ImageReaderError +QtGui.QImageReader.errorString?4() -> QString +QtGui.QImageReader.imageFormat?4(QString) -> QByteArray +QtGui.QImageReader.imageFormat?4(QIODevice) -> QByteArray +QtGui.QImageReader.supportedImageFormats?4() -> unknown-type +QtGui.QImageReader.textKeys?4() -> QStringList +QtGui.QImageReader.text?4(QString) -> QString +QtGui.QImageReader.setBackgroundColor?4(QColor) +QtGui.QImageReader.backgroundColor?4() -> QColor +QtGui.QImageReader.supportsAnimation?4() -> bool +QtGui.QImageReader.setQuality?4(int) +QtGui.QImageReader.quality?4() -> int +QtGui.QImageReader.supportsOption?4(QImageIOHandler.ImageOption) -> bool +QtGui.QImageReader.setAutoDetectImageFormat?4(bool) +QtGui.QImageReader.autoDetectImageFormat?4() -> bool +QtGui.QImageReader.imageFormat?4() -> QImage.Format +QtGui.QImageReader.setDecideFormatFromContent?4(bool) +QtGui.QImageReader.decideFormatFromContent?4() -> bool +QtGui.QImageReader.supportedMimeTypes?4() -> unknown-type +QtGui.QImageReader.subType?4() -> QByteArray +QtGui.QImageReader.supportedSubTypes?4() -> unknown-type +QtGui.QImageReader.transformation?4() -> QImageIOHandler.Transformations +QtGui.QImageReader.setAutoTransform?4(bool) +QtGui.QImageReader.autoTransform?4() -> bool +QtGui.QImageReader.setGamma?4(float) +QtGui.QImageReader.gamma?4() -> float +QtGui.QImageReader.imageFormatsForMimeType?4(QByteArray) -> unknown-type +QtGui.QImageWriter.ImageWriterError?10 +QtGui.QImageWriter.ImageWriterError.UnknownError?10 +QtGui.QImageWriter.ImageWriterError.DeviceError?10 +QtGui.QImageWriter.ImageWriterError.UnsupportedFormatError?10 +QtGui.QImageWriter.ImageWriterError.InvalidImageError?10 +QtGui.QImageWriter?1() +QtGui.QImageWriter.__init__?1(self) +QtGui.QImageWriter?1(QIODevice, QByteArray) +QtGui.QImageWriter.__init__?1(self, QIODevice, QByteArray) +QtGui.QImageWriter?1(QString, QByteArray format=QByteArray()) +QtGui.QImageWriter.__init__?1(self, QString, QByteArray format=QByteArray()) +QtGui.QImageWriter.setFormat?4(QByteArray) +QtGui.QImageWriter.format?4() -> QByteArray +QtGui.QImageWriter.setDevice?4(QIODevice) +QtGui.QImageWriter.device?4() -> QIODevice +QtGui.QImageWriter.setFileName?4(QString) +QtGui.QImageWriter.fileName?4() -> QString +QtGui.QImageWriter.setQuality?4(int) +QtGui.QImageWriter.quality?4() -> int +QtGui.QImageWriter.setGamma?4(float) +QtGui.QImageWriter.gamma?4() -> float +QtGui.QImageWriter.canWrite?4() -> bool +QtGui.QImageWriter.write?4(QImage) -> bool +QtGui.QImageWriter.error?4() -> QImageWriter.ImageWriterError +QtGui.QImageWriter.errorString?4() -> QString +QtGui.QImageWriter.supportedImageFormats?4() -> unknown-type +QtGui.QImageWriter.setText?4(QString, QString) +QtGui.QImageWriter.supportsOption?4(QImageIOHandler.ImageOption) -> bool +QtGui.QImageWriter.setCompression?4(int) +QtGui.QImageWriter.compression?4() -> int +QtGui.QImageWriter.supportedMimeTypes?4() -> unknown-type +QtGui.QImageWriter.setSubType?4(QByteArray) +QtGui.QImageWriter.subType?4() -> QByteArray +QtGui.QImageWriter.supportedSubTypes?4() -> unknown-type +QtGui.QImageWriter.setOptimizedWrite?4(bool) +QtGui.QImageWriter.optimizedWrite?4() -> bool +QtGui.QImageWriter.setProgressiveScanWrite?4(bool) +QtGui.QImageWriter.progressiveScanWrite?4() -> bool +QtGui.QImageWriter.transformation?4() -> QImageIOHandler.Transformations +QtGui.QImageWriter.setTransformation?4(QImageIOHandler.Transformations) +QtGui.QImageWriter.imageFormatsForMimeType?4(QByteArray) -> unknown-type +QtGui.QInputMethod.Action?10 +QtGui.QInputMethod.Action.Click?10 +QtGui.QInputMethod.Action.ContextMenu?10 +QtGui.QInputMethod.inputItemTransform?4() -> QTransform +QtGui.QInputMethod.setInputItemTransform?4(QTransform) +QtGui.QInputMethod.cursorRectangle?4() -> QRectF +QtGui.QInputMethod.keyboardRectangle?4() -> QRectF +QtGui.QInputMethod.isVisible?4() -> bool +QtGui.QInputMethod.setVisible?4(bool) +QtGui.QInputMethod.isAnimating?4() -> bool +QtGui.QInputMethod.locale?4() -> QLocale +QtGui.QInputMethod.inputDirection?4() -> Qt.LayoutDirection +QtGui.QInputMethod.inputItemRectangle?4() -> QRectF +QtGui.QInputMethod.setInputItemRectangle?4(QRectF) +QtGui.QInputMethod.queryFocusObject?4(Qt.InputMethodQuery, QVariant) -> QVariant +QtGui.QInputMethod.show?4() +QtGui.QInputMethod.hide?4() +QtGui.QInputMethod.update?4(Qt.InputMethodQueries) +QtGui.QInputMethod.reset?4() +QtGui.QInputMethod.commit?4() +QtGui.QInputMethod.invokeAction?4(QInputMethod.Action, int) +QtGui.QInputMethod.cursorRectangleChanged?4() +QtGui.QInputMethod.keyboardRectangleChanged?4() +QtGui.QInputMethod.visibleChanged?4() +QtGui.QInputMethod.animatingChanged?4() +QtGui.QInputMethod.localeChanged?4() +QtGui.QInputMethod.inputDirectionChanged?4(Qt.LayoutDirection) +QtGui.QInputMethod.anchorRectangle?4() -> QRectF +QtGui.QInputMethod.inputItemClipRectangle?4() -> QRectF +QtGui.QInputMethod.anchorRectangleChanged?4() +QtGui.QInputMethod.inputItemClipRectangleChanged?4() +QtGui.QKeySequence.StandardKey?10 +QtGui.QKeySequence.StandardKey.UnknownKey?10 +QtGui.QKeySequence.StandardKey.HelpContents?10 +QtGui.QKeySequence.StandardKey.WhatsThis?10 +QtGui.QKeySequence.StandardKey.Open?10 +QtGui.QKeySequence.StandardKey.Close?10 +QtGui.QKeySequence.StandardKey.Save?10 +QtGui.QKeySequence.StandardKey.New?10 +QtGui.QKeySequence.StandardKey.Delete?10 +QtGui.QKeySequence.StandardKey.Cut?10 +QtGui.QKeySequence.StandardKey.Copy?10 +QtGui.QKeySequence.StandardKey.Paste?10 +QtGui.QKeySequence.StandardKey.Undo?10 +QtGui.QKeySequence.StandardKey.Redo?10 +QtGui.QKeySequence.StandardKey.Back?10 +QtGui.QKeySequence.StandardKey.Forward?10 +QtGui.QKeySequence.StandardKey.Refresh?10 +QtGui.QKeySequence.StandardKey.ZoomIn?10 +QtGui.QKeySequence.StandardKey.ZoomOut?10 +QtGui.QKeySequence.StandardKey.Print?10 +QtGui.QKeySequence.StandardKey.AddTab?10 +QtGui.QKeySequence.StandardKey.NextChild?10 +QtGui.QKeySequence.StandardKey.PreviousChild?10 +QtGui.QKeySequence.StandardKey.Find?10 +QtGui.QKeySequence.StandardKey.FindNext?10 +QtGui.QKeySequence.StandardKey.FindPrevious?10 +QtGui.QKeySequence.StandardKey.Replace?10 +QtGui.QKeySequence.StandardKey.SelectAll?10 +QtGui.QKeySequence.StandardKey.Bold?10 +QtGui.QKeySequence.StandardKey.Italic?10 +QtGui.QKeySequence.StandardKey.Underline?10 +QtGui.QKeySequence.StandardKey.MoveToNextChar?10 +QtGui.QKeySequence.StandardKey.MoveToPreviousChar?10 +QtGui.QKeySequence.StandardKey.MoveToNextWord?10 +QtGui.QKeySequence.StandardKey.MoveToPreviousWord?10 +QtGui.QKeySequence.StandardKey.MoveToNextLine?10 +QtGui.QKeySequence.StandardKey.MoveToPreviousLine?10 +QtGui.QKeySequence.StandardKey.MoveToNextPage?10 +QtGui.QKeySequence.StandardKey.MoveToPreviousPage?10 +QtGui.QKeySequence.StandardKey.MoveToStartOfLine?10 +QtGui.QKeySequence.StandardKey.MoveToEndOfLine?10 +QtGui.QKeySequence.StandardKey.MoveToStartOfBlock?10 +QtGui.QKeySequence.StandardKey.MoveToEndOfBlock?10 +QtGui.QKeySequence.StandardKey.MoveToStartOfDocument?10 +QtGui.QKeySequence.StandardKey.MoveToEndOfDocument?10 +QtGui.QKeySequence.StandardKey.SelectNextChar?10 +QtGui.QKeySequence.StandardKey.SelectPreviousChar?10 +QtGui.QKeySequence.StandardKey.SelectNextWord?10 +QtGui.QKeySequence.StandardKey.SelectPreviousWord?10 +QtGui.QKeySequence.StandardKey.SelectNextLine?10 +QtGui.QKeySequence.StandardKey.SelectPreviousLine?10 +QtGui.QKeySequence.StandardKey.SelectNextPage?10 +QtGui.QKeySequence.StandardKey.SelectPreviousPage?10 +QtGui.QKeySequence.StandardKey.SelectStartOfLine?10 +QtGui.QKeySequence.StandardKey.SelectEndOfLine?10 +QtGui.QKeySequence.StandardKey.SelectStartOfBlock?10 +QtGui.QKeySequence.StandardKey.SelectEndOfBlock?10 +QtGui.QKeySequence.StandardKey.SelectStartOfDocument?10 +QtGui.QKeySequence.StandardKey.SelectEndOfDocument?10 +QtGui.QKeySequence.StandardKey.DeleteStartOfWord?10 +QtGui.QKeySequence.StandardKey.DeleteEndOfWord?10 +QtGui.QKeySequence.StandardKey.DeleteEndOfLine?10 +QtGui.QKeySequence.StandardKey.InsertParagraphSeparator?10 +QtGui.QKeySequence.StandardKey.InsertLineSeparator?10 +QtGui.QKeySequence.StandardKey.SaveAs?10 +QtGui.QKeySequence.StandardKey.Preferences?10 +QtGui.QKeySequence.StandardKey.Quit?10 +QtGui.QKeySequence.StandardKey.FullScreen?10 +QtGui.QKeySequence.StandardKey.Deselect?10 +QtGui.QKeySequence.StandardKey.DeleteCompleteLine?10 +QtGui.QKeySequence.StandardKey.Backspace?10 +QtGui.QKeySequence.StandardKey.Cancel?10 +QtGui.QKeySequence.SequenceMatch?10 +QtGui.QKeySequence.SequenceMatch.NoMatch?10 +QtGui.QKeySequence.SequenceMatch.PartialMatch?10 +QtGui.QKeySequence.SequenceMatch.ExactMatch?10 +QtGui.QKeySequence.SequenceFormat?10 +QtGui.QKeySequence.SequenceFormat.NativeText?10 +QtGui.QKeySequence.SequenceFormat.PortableText?10 +QtGui.QKeySequence?1() +QtGui.QKeySequence.__init__?1(self) +QtGui.QKeySequence?1(QKeySequence) +QtGui.QKeySequence.__init__?1(self, QKeySequence) +QtGui.QKeySequence?1(QString, QKeySequence.SequenceFormat format=QKeySequence.NativeText) +QtGui.QKeySequence.__init__?1(self, QString, QKeySequence.SequenceFormat format=QKeySequence.NativeText) +QtGui.QKeySequence?1(int, int key2=0, int key3=0, int key4=0) +QtGui.QKeySequence.__init__?1(self, int, int key2=0, int key3=0, int key4=0) +QtGui.QKeySequence?1(QVariant) +QtGui.QKeySequence.__init__?1(self, QVariant) +QtGui.QKeySequence.count?4() -> int +QtGui.QKeySequence.isEmpty?4() -> bool +QtGui.QKeySequence.matches?4(QKeySequence) -> QKeySequence.SequenceMatch +QtGui.QKeySequence.mnemonic?4(QString) -> QKeySequence +QtGui.QKeySequence.isDetached?4() -> bool +QtGui.QKeySequence.swap?4(QKeySequence) +QtGui.QKeySequence.toString?4(QKeySequence.SequenceFormat format=QKeySequence.PortableText) -> QString +QtGui.QKeySequence.fromString?4(QString, QKeySequence.SequenceFormat format=QKeySequence.PortableText) -> QKeySequence +QtGui.QKeySequence.keyBindings?4(QKeySequence.StandardKey) -> unknown-type +QtGui.QKeySequence.listFromString?4(QString, QKeySequence.SequenceFormat format=QKeySequence.PortableText) -> unknown-type +QtGui.QKeySequence.listToString?4(unknown-type, QKeySequence.SequenceFormat format=QKeySequence.PortableText) -> QString +QtGui.QMatrix4x4?1() +QtGui.QMatrix4x4.__init__?1(self) +QtGui.QMatrix4x4?1(Any) +QtGui.QMatrix4x4.__init__?1(self, Any) +QtGui.QMatrix4x4?1(float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float) +QtGui.QMatrix4x4.__init__?1(self, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float) +QtGui.QMatrix4x4?1(QTransform) +QtGui.QMatrix4x4.__init__?1(self, QTransform) +QtGui.QMatrix4x4?1(QMatrix4x4) +QtGui.QMatrix4x4.__init__?1(self, QMatrix4x4) +QtGui.QMatrix4x4.determinant?4() -> float +QtGui.QMatrix4x4.inverted?4() -> (QMatrix4x4, bool) +QtGui.QMatrix4x4.transposed?4() -> QMatrix4x4 +QtGui.QMatrix4x4.normalMatrix?4() -> QMatrix3x3 +QtGui.QMatrix4x4.scale?4(QVector3D) +QtGui.QMatrix4x4.scale?4(float, float) +QtGui.QMatrix4x4.scale?4(float, float, float) +QtGui.QMatrix4x4.scale?4(float) +QtGui.QMatrix4x4.translate?4(QVector3D) +QtGui.QMatrix4x4.translate?4(float, float) +QtGui.QMatrix4x4.translate?4(float, float, float) +QtGui.QMatrix4x4.rotate?4(float, QVector3D) +QtGui.QMatrix4x4.rotate?4(float, float, float, float z=0) +QtGui.QMatrix4x4.rotate?4(QQuaternion) +QtGui.QMatrix4x4.ortho?4(QRect) +QtGui.QMatrix4x4.ortho?4(QRectF) +QtGui.QMatrix4x4.ortho?4(float, float, float, float, float, float) +QtGui.QMatrix4x4.frustum?4(float, float, float, float, float, float) +QtGui.QMatrix4x4.perspective?4(float, float, float, float) +QtGui.QMatrix4x4.lookAt?4(QVector3D, QVector3D, QVector3D) +QtGui.QMatrix4x4.copyDataTo?4() -> List +QtGui.QMatrix4x4.toTransform?4() -> QTransform +QtGui.QMatrix4x4.toTransform?4(float) -> QTransform +QtGui.QMatrix4x4.mapRect?4(QRect) -> QRect +QtGui.QMatrix4x4.mapRect?4(QRectF) -> QRectF +QtGui.QMatrix4x4.data?4() -> List +QtGui.QMatrix4x4.optimize?4() +QtGui.QMatrix4x4.column?4(int) -> QVector4D +QtGui.QMatrix4x4.setColumn?4(int, QVector4D) +QtGui.QMatrix4x4.row?4(int) -> QVector4D +QtGui.QMatrix4x4.setRow?4(int, QVector4D) +QtGui.QMatrix4x4.isIdentity?4() -> bool +QtGui.QMatrix4x4.setToIdentity?4() +QtGui.QMatrix4x4.fill?4(float) +QtGui.QMatrix4x4.map?4(QPoint) -> QPoint +QtGui.QMatrix4x4.map?4(QPointF) -> QPointF +QtGui.QMatrix4x4.map?4(QVector3D) -> QVector3D +QtGui.QMatrix4x4.mapVector?4(QVector3D) -> QVector3D +QtGui.QMatrix4x4.map?4(QVector4D) -> QVector4D +QtGui.QMatrix4x4.viewport?4(float, float, float, float, float nearPlane=0, float farPlane=1) +QtGui.QMatrix4x4.viewport?4(QRectF) +QtGui.QMatrix4x4.isAffine?4() -> bool +QtGui.QMovie.CacheMode?10 +QtGui.QMovie.CacheMode.CacheNone?10 +QtGui.QMovie.CacheMode.CacheAll?10 +QtGui.QMovie.MovieState?10 +QtGui.QMovie.MovieState.NotRunning?10 +QtGui.QMovie.MovieState.Paused?10 +QtGui.QMovie.MovieState.Running?10 +QtGui.QMovie?1(QObject parent=None) +QtGui.QMovie.__init__?1(self, QObject parent=None) +QtGui.QMovie?1(QIODevice, QByteArray format=QByteArray(), QObject parent=None) +QtGui.QMovie.__init__?1(self, QIODevice, QByteArray format=QByteArray(), QObject parent=None) +QtGui.QMovie?1(QString, QByteArray format=QByteArray(), QObject parent=None) +QtGui.QMovie.__init__?1(self, QString, QByteArray format=QByteArray(), QObject parent=None) +QtGui.QMovie.supportedFormats?4() -> unknown-type +QtGui.QMovie.setDevice?4(QIODevice) +QtGui.QMovie.device?4() -> QIODevice +QtGui.QMovie.setFileName?4(QString) +QtGui.QMovie.fileName?4() -> QString +QtGui.QMovie.setFormat?4(QByteArray) +QtGui.QMovie.format?4() -> QByteArray +QtGui.QMovie.setBackgroundColor?4(QColor) +QtGui.QMovie.backgroundColor?4() -> QColor +QtGui.QMovie.state?4() -> QMovie.MovieState +QtGui.QMovie.frameRect?4() -> QRect +QtGui.QMovie.currentImage?4() -> QImage +QtGui.QMovie.currentPixmap?4() -> QPixmap +QtGui.QMovie.isValid?4() -> bool +QtGui.QMovie.jumpToFrame?4(int) -> bool +QtGui.QMovie.loopCount?4() -> int +QtGui.QMovie.frameCount?4() -> int +QtGui.QMovie.nextFrameDelay?4() -> int +QtGui.QMovie.currentFrameNumber?4() -> int +QtGui.QMovie.setSpeed?4(int) +QtGui.QMovie.speed?4() -> int +QtGui.QMovie.scaledSize?4() -> QSize +QtGui.QMovie.setScaledSize?4(QSize) +QtGui.QMovie.cacheMode?4() -> QMovie.CacheMode +QtGui.QMovie.setCacheMode?4(QMovie.CacheMode) +QtGui.QMovie.started?4() +QtGui.QMovie.resized?4(QSize) +QtGui.QMovie.updated?4(QRect) +QtGui.QMovie.stateChanged?4(QMovie.MovieState) +QtGui.QMovie.error?4(QImageReader.ImageReaderError) +QtGui.QMovie.finished?4() +QtGui.QMovie.frameChanged?4(int) +QtGui.QMovie.start?4() +QtGui.QMovie.jumpToNextFrame?4() -> bool +QtGui.QMovie.setPaused?4(bool) +QtGui.QMovie.stop?4() +QtGui.QMovie.lastError?4() -> QImageReader.ImageReaderError +QtGui.QMovie.lastErrorString?4() -> QString +QtGui.QSurface.SurfaceType?10 +QtGui.QSurface.SurfaceType.RasterSurface?10 +QtGui.QSurface.SurfaceType.OpenGLSurface?10 +QtGui.QSurface.SurfaceType.RasterGLSurface?10 +QtGui.QSurface.SurfaceType.OpenVGSurface?10 +QtGui.QSurface.SurfaceType.VulkanSurface?10 +QtGui.QSurface.SurfaceType.MetalSurface?10 +QtGui.QSurface.SurfaceClass?10 +QtGui.QSurface.SurfaceClass.Window?10 +QtGui.QSurface.SurfaceClass.Offscreen?10 +QtGui.QSurface?1(QSurface.SurfaceClass) +QtGui.QSurface.__init__?1(self, QSurface.SurfaceClass) +QtGui.QSurface?1(QSurface) +QtGui.QSurface.__init__?1(self, QSurface) +QtGui.QSurface.surfaceClass?4() -> QSurface.SurfaceClass +QtGui.QSurface.format?4() -> QSurfaceFormat +QtGui.QSurface.surfaceType?4() -> QSurface.SurfaceType +QtGui.QSurface.size?4() -> QSize +QtGui.QSurface.supportsOpenGL?4() -> bool +QtGui.QOffscreenSurface?1(QScreen screen=None) +QtGui.QOffscreenSurface.__init__?1(self, QScreen screen=None) +QtGui.QOffscreenSurface?1(QScreen, QObject) +QtGui.QOffscreenSurface.__init__?1(self, QScreen, QObject) +QtGui.QOffscreenSurface.surfaceType?4() -> QSurface.SurfaceType +QtGui.QOffscreenSurface.create?4() +QtGui.QOffscreenSurface.destroy?4() +QtGui.QOffscreenSurface.isValid?4() -> bool +QtGui.QOffscreenSurface.setFormat?4(QSurfaceFormat) +QtGui.QOffscreenSurface.format?4() -> QSurfaceFormat +QtGui.QOffscreenSurface.requestedFormat?4() -> QSurfaceFormat +QtGui.QOffscreenSurface.size?4() -> QSize +QtGui.QOffscreenSurface.screen?4() -> QScreen +QtGui.QOffscreenSurface.setScreen?4(QScreen) +QtGui.QOffscreenSurface.screenChanged?4(QScreen) +QtGui.QOffscreenSurface.nativeHandle?4() -> PyQt5.sip.voidptr +QtGui.QOffscreenSurface.setNativeHandle?4(PyQt5.sip.voidptr) +QtGui.QOpenGLBuffer.RangeAccessFlag?10 +QtGui.QOpenGLBuffer.RangeAccessFlag.RangeRead?10 +QtGui.QOpenGLBuffer.RangeAccessFlag.RangeWrite?10 +QtGui.QOpenGLBuffer.RangeAccessFlag.RangeInvalidate?10 +QtGui.QOpenGLBuffer.RangeAccessFlag.RangeInvalidateBuffer?10 +QtGui.QOpenGLBuffer.RangeAccessFlag.RangeFlushExplicit?10 +QtGui.QOpenGLBuffer.RangeAccessFlag.RangeUnsynchronized?10 +QtGui.QOpenGLBuffer.Access?10 +QtGui.QOpenGLBuffer.Access.ReadOnly?10 +QtGui.QOpenGLBuffer.Access.WriteOnly?10 +QtGui.QOpenGLBuffer.Access.ReadWrite?10 +QtGui.QOpenGLBuffer.UsagePattern?10 +QtGui.QOpenGLBuffer.UsagePattern.StreamDraw?10 +QtGui.QOpenGLBuffer.UsagePattern.StreamRead?10 +QtGui.QOpenGLBuffer.UsagePattern.StreamCopy?10 +QtGui.QOpenGLBuffer.UsagePattern.StaticDraw?10 +QtGui.QOpenGLBuffer.UsagePattern.StaticRead?10 +QtGui.QOpenGLBuffer.UsagePattern.StaticCopy?10 +QtGui.QOpenGLBuffer.UsagePattern.DynamicDraw?10 +QtGui.QOpenGLBuffer.UsagePattern.DynamicRead?10 +QtGui.QOpenGLBuffer.UsagePattern.DynamicCopy?10 +QtGui.QOpenGLBuffer.Type?10 +QtGui.QOpenGLBuffer.Type.VertexBuffer?10 +QtGui.QOpenGLBuffer.Type.IndexBuffer?10 +QtGui.QOpenGLBuffer.Type.PixelPackBuffer?10 +QtGui.QOpenGLBuffer.Type.PixelUnpackBuffer?10 +QtGui.QOpenGLBuffer?1() +QtGui.QOpenGLBuffer.__init__?1(self) +QtGui.QOpenGLBuffer?1(QOpenGLBuffer.Type) +QtGui.QOpenGLBuffer.__init__?1(self, QOpenGLBuffer.Type) +QtGui.QOpenGLBuffer?1(QOpenGLBuffer) +QtGui.QOpenGLBuffer.__init__?1(self, QOpenGLBuffer) +QtGui.QOpenGLBuffer.type?4() -> QOpenGLBuffer.Type +QtGui.QOpenGLBuffer.usagePattern?4() -> QOpenGLBuffer.UsagePattern +QtGui.QOpenGLBuffer.setUsagePattern?4(QOpenGLBuffer.UsagePattern) +QtGui.QOpenGLBuffer.create?4() -> bool +QtGui.QOpenGLBuffer.isCreated?4() -> bool +QtGui.QOpenGLBuffer.destroy?4() +QtGui.QOpenGLBuffer.bind?4() -> bool +QtGui.QOpenGLBuffer.release?4() +QtGui.QOpenGLBuffer.release?4(QOpenGLBuffer.Type) +QtGui.QOpenGLBuffer.bufferId?4() -> int +QtGui.QOpenGLBuffer.size?4() -> int +QtGui.QOpenGLBuffer.read?4(int, PyQt5.sip.voidptr, int) -> bool +QtGui.QOpenGLBuffer.write?4(int, PyQt5.sip.voidptr, int) +QtGui.QOpenGLBuffer.allocate?4(PyQt5.sip.voidptr, int) +QtGui.QOpenGLBuffer.allocate?4(int) +QtGui.QOpenGLBuffer.map?4(QOpenGLBuffer.Access) -> PyQt5.sip.voidptr +QtGui.QOpenGLBuffer.unmap?4() -> bool +QtGui.QOpenGLBuffer.mapRange?4(int, int, QOpenGLBuffer.RangeAccessFlags) -> PyQt5.sip.voidptr +QtGui.QOpenGLBuffer.RangeAccessFlags?1() +QtGui.QOpenGLBuffer.RangeAccessFlags.__init__?1(self) +QtGui.QOpenGLBuffer.RangeAccessFlags?1(int) +QtGui.QOpenGLBuffer.RangeAccessFlags.__init__?1(self, int) +QtGui.QOpenGLBuffer.RangeAccessFlags?1(QOpenGLBuffer.RangeAccessFlags) +QtGui.QOpenGLBuffer.RangeAccessFlags.__init__?1(self, QOpenGLBuffer.RangeAccessFlags) +QtGui.QOpenGLContextGroup.shares?4() -> unknown-type +QtGui.QOpenGLContextGroup.currentContextGroup?4() -> QOpenGLContextGroup +QtGui.QOpenGLContext.OpenGLModuleType?10 +QtGui.QOpenGLContext.OpenGLModuleType.LibGL?10 +QtGui.QOpenGLContext.OpenGLModuleType.LibGLES?10 +QtGui.QOpenGLContext?1(QObject parent=None) +QtGui.QOpenGLContext.__init__?1(self, QObject parent=None) +QtGui.QOpenGLContext.setFormat?4(QSurfaceFormat) +QtGui.QOpenGLContext.setShareContext?4(QOpenGLContext) +QtGui.QOpenGLContext.setScreen?4(QScreen) +QtGui.QOpenGLContext.create?4() -> bool +QtGui.QOpenGLContext.isValid?4() -> bool +QtGui.QOpenGLContext.format?4() -> QSurfaceFormat +QtGui.QOpenGLContext.shareContext?4() -> QOpenGLContext +QtGui.QOpenGLContext.shareGroup?4() -> QOpenGLContextGroup +QtGui.QOpenGLContext.screen?4() -> QScreen +QtGui.QOpenGLContext.defaultFramebufferObject?4() -> int +QtGui.QOpenGLContext.makeCurrent?4(QSurface) -> bool +QtGui.QOpenGLContext.doneCurrent?4() +QtGui.QOpenGLContext.swapBuffers?4(QSurface) +QtGui.QOpenGLContext.getProcAddress?4(QByteArray) -> PyQt5.sip.voidptr +QtGui.QOpenGLContext.surface?4() -> QSurface +QtGui.QOpenGLContext.currentContext?4() -> QOpenGLContext +QtGui.QOpenGLContext.areSharing?4(QOpenGLContext, QOpenGLContext) -> bool +QtGui.QOpenGLContext.extensions?4() -> unknown-type +QtGui.QOpenGLContext.hasExtension?4(QByteArray) -> bool +QtGui.QOpenGLContext.aboutToBeDestroyed?4() +QtGui.QOpenGLContext.versionFunctions?4(QOpenGLVersionProfile versionProfile=None) -> Any +QtGui.QOpenGLContext.openGLModuleHandle?4() -> PyQt5.sip.voidptr +QtGui.QOpenGLContext.openGLModuleType?4() -> QOpenGLContext.OpenGLModuleType +QtGui.QOpenGLContext.isOpenGLES?4() -> bool +QtGui.QOpenGLContext.setNativeHandle?4(QVariant) +QtGui.QOpenGLContext.nativeHandle?4() -> QVariant +QtGui.QOpenGLContext.supportsThreadedOpenGL?4() -> bool +QtGui.QOpenGLContext.globalShareContext?4() -> QOpenGLContext +QtGui.QOpenGLVersionProfile?1() +QtGui.QOpenGLVersionProfile.__init__?1(self) +QtGui.QOpenGLVersionProfile?1(QSurfaceFormat) +QtGui.QOpenGLVersionProfile.__init__?1(self, QSurfaceFormat) +QtGui.QOpenGLVersionProfile?1(QOpenGLVersionProfile) +QtGui.QOpenGLVersionProfile.__init__?1(self, QOpenGLVersionProfile) +QtGui.QOpenGLVersionProfile.version?4() -> unknown-type +QtGui.QOpenGLVersionProfile.setVersion?4(int, int) +QtGui.QOpenGLVersionProfile.profile?4() -> QSurfaceFormat.OpenGLContextProfile +QtGui.QOpenGLVersionProfile.setProfile?4(QSurfaceFormat.OpenGLContextProfile) +QtGui.QOpenGLVersionProfile.hasProfiles?4() -> bool +QtGui.QOpenGLVersionProfile.isLegacyVersion?4() -> bool +QtGui.QOpenGLVersionProfile.isValid?4() -> bool +QtGui.QOpenGLDebugMessage.Severity?10 +QtGui.QOpenGLDebugMessage.Severity.InvalidSeverity?10 +QtGui.QOpenGLDebugMessage.Severity.HighSeverity?10 +QtGui.QOpenGLDebugMessage.Severity.MediumSeverity?10 +QtGui.QOpenGLDebugMessage.Severity.LowSeverity?10 +QtGui.QOpenGLDebugMessage.Severity.NotificationSeverity?10 +QtGui.QOpenGLDebugMessage.Severity.AnySeverity?10 +QtGui.QOpenGLDebugMessage.Type?10 +QtGui.QOpenGLDebugMessage.Type.InvalidType?10 +QtGui.QOpenGLDebugMessage.Type.ErrorType?10 +QtGui.QOpenGLDebugMessage.Type.DeprecatedBehaviorType?10 +QtGui.QOpenGLDebugMessage.Type.UndefinedBehaviorType?10 +QtGui.QOpenGLDebugMessage.Type.PortabilityType?10 +QtGui.QOpenGLDebugMessage.Type.PerformanceType?10 +QtGui.QOpenGLDebugMessage.Type.OtherType?10 +QtGui.QOpenGLDebugMessage.Type.MarkerType?10 +QtGui.QOpenGLDebugMessage.Type.GroupPushType?10 +QtGui.QOpenGLDebugMessage.Type.GroupPopType?10 +QtGui.QOpenGLDebugMessage.Type.AnyType?10 +QtGui.QOpenGLDebugMessage.Source?10 +QtGui.QOpenGLDebugMessage.Source.InvalidSource?10 +QtGui.QOpenGLDebugMessage.Source.APISource?10 +QtGui.QOpenGLDebugMessage.Source.WindowSystemSource?10 +QtGui.QOpenGLDebugMessage.Source.ShaderCompilerSource?10 +QtGui.QOpenGLDebugMessage.Source.ThirdPartySource?10 +QtGui.QOpenGLDebugMessage.Source.ApplicationSource?10 +QtGui.QOpenGLDebugMessage.Source.OtherSource?10 +QtGui.QOpenGLDebugMessage.Source.AnySource?10 +QtGui.QOpenGLDebugMessage?1() +QtGui.QOpenGLDebugMessage.__init__?1(self) +QtGui.QOpenGLDebugMessage?1(QOpenGLDebugMessage) +QtGui.QOpenGLDebugMessage.__init__?1(self, QOpenGLDebugMessage) +QtGui.QOpenGLDebugMessage.swap?4(QOpenGLDebugMessage) +QtGui.QOpenGLDebugMessage.source?4() -> QOpenGLDebugMessage.Source +QtGui.QOpenGLDebugMessage.type?4() -> QOpenGLDebugMessage.Type +QtGui.QOpenGLDebugMessage.severity?4() -> QOpenGLDebugMessage.Severity +QtGui.QOpenGLDebugMessage.id?4() -> int +QtGui.QOpenGLDebugMessage.message?4() -> QString +QtGui.QOpenGLDebugMessage.createApplicationMessage?4(QString, int id=0, QOpenGLDebugMessage.Severity severity=QOpenGLDebugMessage.NotificationSeverity, QOpenGLDebugMessage.Type type=QOpenGLDebugMessage.OtherType) -> QOpenGLDebugMessage +QtGui.QOpenGLDebugMessage.createThirdPartyMessage?4(QString, int id=0, QOpenGLDebugMessage.Severity severity=QOpenGLDebugMessage.NotificationSeverity, QOpenGLDebugMessage.Type type=QOpenGLDebugMessage.OtherType) -> QOpenGLDebugMessage +QtGui.QOpenGLDebugMessage.Sources?1() +QtGui.QOpenGLDebugMessage.Sources.__init__?1(self) +QtGui.QOpenGLDebugMessage.Sources?1(int) +QtGui.QOpenGLDebugMessage.Sources.__init__?1(self, int) +QtGui.QOpenGLDebugMessage.Sources?1(QOpenGLDebugMessage.Sources) +QtGui.QOpenGLDebugMessage.Sources.__init__?1(self, QOpenGLDebugMessage.Sources) +QtGui.QOpenGLDebugMessage.Types?1() +QtGui.QOpenGLDebugMessage.Types.__init__?1(self) +QtGui.QOpenGLDebugMessage.Types?1(int) +QtGui.QOpenGLDebugMessage.Types.__init__?1(self, int) +QtGui.QOpenGLDebugMessage.Types?1(QOpenGLDebugMessage.Types) +QtGui.QOpenGLDebugMessage.Types.__init__?1(self, QOpenGLDebugMessage.Types) +QtGui.QOpenGLDebugMessage.Severities?1() +QtGui.QOpenGLDebugMessage.Severities.__init__?1(self) +QtGui.QOpenGLDebugMessage.Severities?1(int) +QtGui.QOpenGLDebugMessage.Severities.__init__?1(self, int) +QtGui.QOpenGLDebugMessage.Severities?1(QOpenGLDebugMessage.Severities) +QtGui.QOpenGLDebugMessage.Severities.__init__?1(self, QOpenGLDebugMessage.Severities) +QtGui.QOpenGLDebugLogger.LoggingMode?10 +QtGui.QOpenGLDebugLogger.LoggingMode.AsynchronousLogging?10 +QtGui.QOpenGLDebugLogger.LoggingMode.SynchronousLogging?10 +QtGui.QOpenGLDebugLogger?1(QObject parent=None) +QtGui.QOpenGLDebugLogger.__init__?1(self, QObject parent=None) +QtGui.QOpenGLDebugLogger.initialize?4() -> bool +QtGui.QOpenGLDebugLogger.isLogging?4() -> bool +QtGui.QOpenGLDebugLogger.loggingMode?4() -> QOpenGLDebugLogger.LoggingMode +QtGui.QOpenGLDebugLogger.maximumMessageLength?4() -> int +QtGui.QOpenGLDebugLogger.pushGroup?4(QString, int id=0, QOpenGLDebugMessage.Source source=QOpenGLDebugMessage.ApplicationSource) +QtGui.QOpenGLDebugLogger.popGroup?4() +QtGui.QOpenGLDebugLogger.enableMessages?4(QOpenGLDebugMessage.Sources sources=QOpenGLDebugMessage.AnySource, QOpenGLDebugMessage.Types types=QOpenGLDebugMessage.AnyType, QOpenGLDebugMessage.Severities severities=QOpenGLDebugMessage.Severity.AnySeverity) +QtGui.QOpenGLDebugLogger.enableMessages?4(unknown-type, QOpenGLDebugMessage.Sources sources=QOpenGLDebugMessage.AnySource, QOpenGLDebugMessage.Types types=QOpenGLDebugMessage.AnyType) +QtGui.QOpenGLDebugLogger.disableMessages?4(QOpenGLDebugMessage.Sources sources=QOpenGLDebugMessage.AnySource, QOpenGLDebugMessage.Types types=QOpenGLDebugMessage.AnyType, QOpenGLDebugMessage.Severities severities=QOpenGLDebugMessage.Severity.AnySeverity) +QtGui.QOpenGLDebugLogger.disableMessages?4(unknown-type, QOpenGLDebugMessage.Sources sources=QOpenGLDebugMessage.AnySource, QOpenGLDebugMessage.Types types=QOpenGLDebugMessage.AnyType) +QtGui.QOpenGLDebugLogger.loggedMessages?4() -> unknown-type +QtGui.QOpenGLDebugLogger.logMessage?4(QOpenGLDebugMessage) +QtGui.QOpenGLDebugLogger.startLogging?4(QOpenGLDebugLogger.LoggingMode loggingMode=QOpenGLDebugLogger.AsynchronousLogging) +QtGui.QOpenGLDebugLogger.stopLogging?4() +QtGui.QOpenGLDebugLogger.messageLogged?4(QOpenGLDebugMessage) +QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy?10 +QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy.DontRestoreFramebufferBinding?10 +QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy.RestoreFramebufferBindingToDefault?10 +QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy.RestoreFrameBufferBinding?10 +QtGui.QOpenGLFramebufferObject.Attachment?10 +QtGui.QOpenGLFramebufferObject.Attachment.NoAttachment?10 +QtGui.QOpenGLFramebufferObject.Attachment.CombinedDepthStencil?10 +QtGui.QOpenGLFramebufferObject.Attachment.Depth?10 +QtGui.QOpenGLFramebufferObject?1(QSize, int target=GL_TEXTURE_2D) +QtGui.QOpenGLFramebufferObject.__init__?1(self, QSize, int target=GL_TEXTURE_2D) +QtGui.QOpenGLFramebufferObject?1(int, int, int target=GL_TEXTURE_2D) +QtGui.QOpenGLFramebufferObject.__init__?1(self, int, int, int target=GL_TEXTURE_2D) +QtGui.QOpenGLFramebufferObject?1(QSize, QOpenGLFramebufferObject.Attachment, int target=GL_TEXTURE_2D, int internal_format=GL_RGBA8) +QtGui.QOpenGLFramebufferObject.__init__?1(self, QSize, QOpenGLFramebufferObject.Attachment, int target=GL_TEXTURE_2D, int internal_format=GL_RGBA8) +QtGui.QOpenGLFramebufferObject?1(int, int, QOpenGLFramebufferObject.Attachment, int target=GL_TEXTURE_2D, int internal_format=GL_RGBA8) +QtGui.QOpenGLFramebufferObject.__init__?1(self, int, int, QOpenGLFramebufferObject.Attachment, int target=GL_TEXTURE_2D, int internal_format=GL_RGBA8) +QtGui.QOpenGLFramebufferObject?1(QSize, QOpenGLFramebufferObjectFormat) +QtGui.QOpenGLFramebufferObject.__init__?1(self, QSize, QOpenGLFramebufferObjectFormat) +QtGui.QOpenGLFramebufferObject?1(int, int, QOpenGLFramebufferObjectFormat) +QtGui.QOpenGLFramebufferObject.__init__?1(self, int, int, QOpenGLFramebufferObjectFormat) +QtGui.QOpenGLFramebufferObject.format?4() -> QOpenGLFramebufferObjectFormat +QtGui.QOpenGLFramebufferObject.isValid?4() -> bool +QtGui.QOpenGLFramebufferObject.isBound?4() -> bool +QtGui.QOpenGLFramebufferObject.bind?4() -> bool +QtGui.QOpenGLFramebufferObject.release?4() -> bool +QtGui.QOpenGLFramebufferObject.width?4() -> int +QtGui.QOpenGLFramebufferObject.height?4() -> int +QtGui.QOpenGLFramebufferObject.texture?4() -> int +QtGui.QOpenGLFramebufferObject.textures?4() -> unknown-type +QtGui.QOpenGLFramebufferObject.size?4() -> QSize +QtGui.QOpenGLFramebufferObject.toImage?4() -> QImage +QtGui.QOpenGLFramebufferObject.toImage?4(bool) -> QImage +QtGui.QOpenGLFramebufferObject.toImage?4(bool, int) -> QImage +QtGui.QOpenGLFramebufferObject.attachment?4() -> QOpenGLFramebufferObject.Attachment +QtGui.QOpenGLFramebufferObject.setAttachment?4(QOpenGLFramebufferObject.Attachment) +QtGui.QOpenGLFramebufferObject.handle?4() -> int +QtGui.QOpenGLFramebufferObject.bindDefault?4() -> bool +QtGui.QOpenGLFramebufferObject.hasOpenGLFramebufferObjects?4() -> bool +QtGui.QOpenGLFramebufferObject.hasOpenGLFramebufferBlit?4() -> bool +QtGui.QOpenGLFramebufferObject.blitFramebuffer?4(QOpenGLFramebufferObject, QRect, QOpenGLFramebufferObject, QRect, int buffers=GL_COLOR_BUFFER_BIT, int filter=GL_NEAREST) +QtGui.QOpenGLFramebufferObject.blitFramebuffer?4(QOpenGLFramebufferObject, QOpenGLFramebufferObject, int buffers=GL_COLOR_BUFFER_BIT, int filter=GL_NEAREST) +QtGui.QOpenGLFramebufferObject.blitFramebuffer?4(QOpenGLFramebufferObject, QRect, QOpenGLFramebufferObject, QRect, int, int, int, int) +QtGui.QOpenGLFramebufferObject.blitFramebuffer?4(QOpenGLFramebufferObject, QRect, QOpenGLFramebufferObject, QRect, int, int, int, int, QOpenGLFramebufferObject.FramebufferRestorePolicy) +QtGui.QOpenGLFramebufferObject.takeTexture?4() -> int +QtGui.QOpenGLFramebufferObject.takeTexture?4(int) -> int +QtGui.QOpenGLFramebufferObject.addColorAttachment?4(QSize, int internal_format=0) +QtGui.QOpenGLFramebufferObject.addColorAttachment?4(int, int, int internal_format=0) +QtGui.QOpenGLFramebufferObject.sizes?4() -> unknown-type +QtGui.QOpenGLFramebufferObjectFormat?1() +QtGui.QOpenGLFramebufferObjectFormat.__init__?1(self) +QtGui.QOpenGLFramebufferObjectFormat?1(QOpenGLFramebufferObjectFormat) +QtGui.QOpenGLFramebufferObjectFormat.__init__?1(self, QOpenGLFramebufferObjectFormat) +QtGui.QOpenGLFramebufferObjectFormat.setSamples?4(int) +QtGui.QOpenGLFramebufferObjectFormat.samples?4() -> int +QtGui.QOpenGLFramebufferObjectFormat.setMipmap?4(bool) +QtGui.QOpenGLFramebufferObjectFormat.mipmap?4() -> bool +QtGui.QOpenGLFramebufferObjectFormat.setAttachment?4(QOpenGLFramebufferObject.Attachment) +QtGui.QOpenGLFramebufferObjectFormat.attachment?4() -> QOpenGLFramebufferObject.Attachment +QtGui.QOpenGLFramebufferObjectFormat.setTextureTarget?4(int) +QtGui.QOpenGLFramebufferObjectFormat.textureTarget?4() -> int +QtGui.QOpenGLFramebufferObjectFormat.setInternalTextureFormat?4(int) +QtGui.QOpenGLFramebufferObjectFormat.internalTextureFormat?4() -> int +QtGui.QOpenGLPaintDevice?1() +QtGui.QOpenGLPaintDevice.__init__?1(self) +QtGui.QOpenGLPaintDevice?1(QSize) +QtGui.QOpenGLPaintDevice.__init__?1(self, QSize) +QtGui.QOpenGLPaintDevice?1(int, int) +QtGui.QOpenGLPaintDevice.__init__?1(self, int, int) +QtGui.QOpenGLPaintDevice.paintEngine?4() -> QPaintEngine +QtGui.QOpenGLPaintDevice.context?4() -> QOpenGLContext +QtGui.QOpenGLPaintDevice.size?4() -> QSize +QtGui.QOpenGLPaintDevice.setSize?4(QSize) +QtGui.QOpenGLPaintDevice.dotsPerMeterX?4() -> float +QtGui.QOpenGLPaintDevice.dotsPerMeterY?4() -> float +QtGui.QOpenGLPaintDevice.setDotsPerMeterX?4(float) +QtGui.QOpenGLPaintDevice.setDotsPerMeterY?4(float) +QtGui.QOpenGLPaintDevice.setPaintFlipped?4(bool) +QtGui.QOpenGLPaintDevice.paintFlipped?4() -> bool +QtGui.QOpenGLPaintDevice.ensureActiveTarget?4() +QtGui.QOpenGLPaintDevice.setDevicePixelRatio?4(float) +QtGui.QOpenGLPaintDevice.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QOpenGLPixelTransferOptions?1() +QtGui.QOpenGLPixelTransferOptions.__init__?1(self) +QtGui.QOpenGLPixelTransferOptions?1(QOpenGLPixelTransferOptions) +QtGui.QOpenGLPixelTransferOptions.__init__?1(self, QOpenGLPixelTransferOptions) +QtGui.QOpenGLPixelTransferOptions.swap?4(QOpenGLPixelTransferOptions) +QtGui.QOpenGLPixelTransferOptions.setAlignment?4(int) +QtGui.QOpenGLPixelTransferOptions.alignment?4() -> int +QtGui.QOpenGLPixelTransferOptions.setSkipImages?4(int) +QtGui.QOpenGLPixelTransferOptions.skipImages?4() -> int +QtGui.QOpenGLPixelTransferOptions.setSkipRows?4(int) +QtGui.QOpenGLPixelTransferOptions.skipRows?4() -> int +QtGui.QOpenGLPixelTransferOptions.setSkipPixels?4(int) +QtGui.QOpenGLPixelTransferOptions.skipPixels?4() -> int +QtGui.QOpenGLPixelTransferOptions.setImageHeight?4(int) +QtGui.QOpenGLPixelTransferOptions.imageHeight?4() -> int +QtGui.QOpenGLPixelTransferOptions.setRowLength?4(int) +QtGui.QOpenGLPixelTransferOptions.rowLength?4() -> int +QtGui.QOpenGLPixelTransferOptions.setLeastSignificantByteFirst?4(bool) +QtGui.QOpenGLPixelTransferOptions.isLeastSignificantBitFirst?4() -> bool +QtGui.QOpenGLPixelTransferOptions.setSwapBytesEnabled?4(bool) +QtGui.QOpenGLPixelTransferOptions.isSwapBytesEnabled?4() -> bool +QtGui.QOpenGLShader.ShaderTypeBit?10 +QtGui.QOpenGLShader.ShaderTypeBit.Vertex?10 +QtGui.QOpenGLShader.ShaderTypeBit.Fragment?10 +QtGui.QOpenGLShader.ShaderTypeBit.Geometry?10 +QtGui.QOpenGLShader.ShaderTypeBit.TessellationControl?10 +QtGui.QOpenGLShader.ShaderTypeBit.TessellationEvaluation?10 +QtGui.QOpenGLShader.ShaderTypeBit.Compute?10 +QtGui.QOpenGLShader?1(QOpenGLShader.ShaderType, QObject parent=None) +QtGui.QOpenGLShader.__init__?1(self, QOpenGLShader.ShaderType, QObject parent=None) +QtGui.QOpenGLShader.shaderType?4() -> QOpenGLShader.ShaderType +QtGui.QOpenGLShader.compileSourceCode?4(QByteArray) -> bool +QtGui.QOpenGLShader.compileSourceCode?4(QString) -> bool +QtGui.QOpenGLShader.compileSourceFile?4(QString) -> bool +QtGui.QOpenGLShader.sourceCode?4() -> QByteArray +QtGui.QOpenGLShader.isCompiled?4() -> bool +QtGui.QOpenGLShader.log?4() -> QString +QtGui.QOpenGLShader.shaderId?4() -> int +QtGui.QOpenGLShader.hasOpenGLShaders?4(QOpenGLShader.ShaderType, QOpenGLContext context=None) -> bool +QtGui.QOpenGLShader.ShaderType?1() +QtGui.QOpenGLShader.ShaderType.__init__?1(self) +QtGui.QOpenGLShader.ShaderType?1(int) +QtGui.QOpenGLShader.ShaderType.__init__?1(self, int) +QtGui.QOpenGLShader.ShaderType?1(QOpenGLShader.ShaderType) +QtGui.QOpenGLShader.ShaderType.__init__?1(self, QOpenGLShader.ShaderType) +QtGui.QOpenGLShaderProgram?1(QObject parent=None) +QtGui.QOpenGLShaderProgram.__init__?1(self, QObject parent=None) +QtGui.QOpenGLShaderProgram.addShader?4(QOpenGLShader) -> bool +QtGui.QOpenGLShaderProgram.removeShader?4(QOpenGLShader) +QtGui.QOpenGLShaderProgram.shaders?4() -> unknown-type +QtGui.QOpenGLShaderProgram.addShaderFromSourceCode?4(QOpenGLShader.ShaderType, QByteArray) -> bool +QtGui.QOpenGLShaderProgram.addShaderFromSourceCode?4(QOpenGLShader.ShaderType, QString) -> bool +QtGui.QOpenGLShaderProgram.addShaderFromSourceFile?4(QOpenGLShader.ShaderType, QString) -> bool +QtGui.QOpenGLShaderProgram.removeAllShaders?4() +QtGui.QOpenGLShaderProgram.link?4() -> bool +QtGui.QOpenGLShaderProgram.isLinked?4() -> bool +QtGui.QOpenGLShaderProgram.log?4() -> QString +QtGui.QOpenGLShaderProgram.bind?4() -> bool +QtGui.QOpenGLShaderProgram.release?4() +QtGui.QOpenGLShaderProgram.programId?4() -> int +QtGui.QOpenGLShaderProgram.bindAttributeLocation?4(QByteArray, int) +QtGui.QOpenGLShaderProgram.bindAttributeLocation?4(QString, int) +QtGui.QOpenGLShaderProgram.attributeLocation?4(QByteArray) -> int +QtGui.QOpenGLShaderProgram.attributeLocation?4(QString) -> int +QtGui.QOpenGLShaderProgram.setAttributeValue?4(int, float) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(int, float, float) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(int, float, float, float) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(int, float, float, float, float) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(int, QVector2D) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(int, QVector3D) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(int, QVector4D) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(int, QColor) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(str, float) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(str, float, float) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(str, float, float, float) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(str, float, float, float, float) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(str, QVector2D) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(str, QVector3D) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(str, QVector4D) +QtGui.QOpenGLShaderProgram.setAttributeValue?4(str, QColor) +QtGui.QOpenGLShaderProgram.setAttributeArray?4(int, Any) +QtGui.QOpenGLShaderProgram.setAttributeArray?4(str, Any) +QtGui.QOpenGLShaderProgram.setAttributeBuffer?4(int, int, int, int, int stride=0) +QtGui.QOpenGLShaderProgram.setAttributeBuffer?4(str, int, int, int, int stride=0) +QtGui.QOpenGLShaderProgram.enableAttributeArray?4(int) +QtGui.QOpenGLShaderProgram.enableAttributeArray?4(str) +QtGui.QOpenGLShaderProgram.disableAttributeArray?4(int) +QtGui.QOpenGLShaderProgram.disableAttributeArray?4(str) +QtGui.QOpenGLShaderProgram.uniformLocation?4(QByteArray) -> int +QtGui.QOpenGLShaderProgram.uniformLocation?4(QString) -> int +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, int) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, float) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, float, float) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, float, float, float) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, float, float, float, float) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QVector2D) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QVector3D) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QVector4D) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QColor) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QPoint) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QPointF) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QSize) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QSizeF) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix2x2) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix2x3) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix2x4) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix3x2) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix3x3) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix3x4) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix4x2) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix4x3) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QMatrix4x4) +QtGui.QOpenGLShaderProgram.setUniformValue?4(int, QTransform) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, int) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, float) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, float, float) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, float, float, float) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, float, float, float, float) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QVector2D) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QVector3D) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QVector4D) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QColor) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QPoint) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QPointF) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QSize) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QSizeF) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix2x2) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix2x3) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix2x4) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix3x2) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix3x3) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix3x4) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix4x2) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix4x3) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QMatrix4x4) +QtGui.QOpenGLShaderProgram.setUniformValue?4(str, QTransform) +QtGui.QOpenGLShaderProgram.setUniformValueArray?4(int, Any) +QtGui.QOpenGLShaderProgram.setUniformValueArray?4(str, Any) +QtGui.QOpenGLShaderProgram.hasOpenGLShaderPrograms?4(QOpenGLContext context=None) -> bool +QtGui.QOpenGLShaderProgram.maxGeometryOutputVertices?4() -> int +QtGui.QOpenGLShaderProgram.setPatchVertexCount?4(int) +QtGui.QOpenGLShaderProgram.patchVertexCount?4() -> int +QtGui.QOpenGLShaderProgram.setDefaultOuterTessellationLevels?4(unknown-type) +QtGui.QOpenGLShaderProgram.defaultOuterTessellationLevels?4() -> unknown-type +QtGui.QOpenGLShaderProgram.setDefaultInnerTessellationLevels?4(unknown-type) +QtGui.QOpenGLShaderProgram.defaultInnerTessellationLevels?4() -> unknown-type +QtGui.QOpenGLShaderProgram.create?4() -> bool +QtGui.QOpenGLShaderProgram.addCacheableShaderFromSourceCode?4(QOpenGLShader.ShaderType, QByteArray) -> bool +QtGui.QOpenGLShaderProgram.addCacheableShaderFromSourceCode?4(QOpenGLShader.ShaderType, QString) -> bool +QtGui.QOpenGLShaderProgram.addCacheableShaderFromSourceFile?4(QOpenGLShader.ShaderType, QString) -> bool +QtGui.QOpenGLTexture.ComparisonMode?10 +QtGui.QOpenGLTexture.ComparisonMode.CompareRefToTexture?10 +QtGui.QOpenGLTexture.ComparisonMode.CompareNone?10 +QtGui.QOpenGLTexture.ComparisonFunction?10 +QtGui.QOpenGLTexture.ComparisonFunction.CompareLessEqual?10 +QtGui.QOpenGLTexture.ComparisonFunction.CompareGreaterEqual?10 +QtGui.QOpenGLTexture.ComparisonFunction.CompareLess?10 +QtGui.QOpenGLTexture.ComparisonFunction.CompareGreater?10 +QtGui.QOpenGLTexture.ComparisonFunction.CompareEqual?10 +QtGui.QOpenGLTexture.ComparisonFunction.CommpareNotEqual?10 +QtGui.QOpenGLTexture.ComparisonFunction.CompareAlways?10 +QtGui.QOpenGLTexture.ComparisonFunction.CompareNever?10 +QtGui.QOpenGLTexture.CoordinateDirection?10 +QtGui.QOpenGLTexture.CoordinateDirection.DirectionS?10 +QtGui.QOpenGLTexture.CoordinateDirection.DirectionT?10 +QtGui.QOpenGLTexture.CoordinateDirection.DirectionR?10 +QtGui.QOpenGLTexture.WrapMode?10 +QtGui.QOpenGLTexture.WrapMode.Repeat?10 +QtGui.QOpenGLTexture.WrapMode.MirroredRepeat?10 +QtGui.QOpenGLTexture.WrapMode.ClampToEdge?10 +QtGui.QOpenGLTexture.WrapMode.ClampToBorder?10 +QtGui.QOpenGLTexture.Filter?10 +QtGui.QOpenGLTexture.Filter.Nearest?10 +QtGui.QOpenGLTexture.Filter.Linear?10 +QtGui.QOpenGLTexture.Filter.NearestMipMapNearest?10 +QtGui.QOpenGLTexture.Filter.NearestMipMapLinear?10 +QtGui.QOpenGLTexture.Filter.LinearMipMapNearest?10 +QtGui.QOpenGLTexture.Filter.LinearMipMapLinear?10 +QtGui.QOpenGLTexture.DepthStencilMode?10 +QtGui.QOpenGLTexture.DepthStencilMode.DepthMode?10 +QtGui.QOpenGLTexture.DepthStencilMode.StencilMode?10 +QtGui.QOpenGLTexture.SwizzleValue?10 +QtGui.QOpenGLTexture.SwizzleValue.RedValue?10 +QtGui.QOpenGLTexture.SwizzleValue.GreenValue?10 +QtGui.QOpenGLTexture.SwizzleValue.BlueValue?10 +QtGui.QOpenGLTexture.SwizzleValue.AlphaValue?10 +QtGui.QOpenGLTexture.SwizzleValue.ZeroValue?10 +QtGui.QOpenGLTexture.SwizzleValue.OneValue?10 +QtGui.QOpenGLTexture.SwizzleComponent?10 +QtGui.QOpenGLTexture.SwizzleComponent.SwizzleRed?10 +QtGui.QOpenGLTexture.SwizzleComponent.SwizzleGreen?10 +QtGui.QOpenGLTexture.SwizzleComponent.SwizzleBlue?10 +QtGui.QOpenGLTexture.SwizzleComponent.SwizzleAlpha?10 +QtGui.QOpenGLTexture.Feature?10 +QtGui.QOpenGLTexture.Feature.ImmutableStorage?10 +QtGui.QOpenGLTexture.Feature.ImmutableMultisampleStorage?10 +QtGui.QOpenGLTexture.Feature.TextureRectangle?10 +QtGui.QOpenGLTexture.Feature.TextureArrays?10 +QtGui.QOpenGLTexture.Feature.Texture3D?10 +QtGui.QOpenGLTexture.Feature.TextureMultisample?10 +QtGui.QOpenGLTexture.Feature.TextureBuffer?10 +QtGui.QOpenGLTexture.Feature.TextureCubeMapArrays?10 +QtGui.QOpenGLTexture.Feature.Swizzle?10 +QtGui.QOpenGLTexture.Feature.StencilTexturing?10 +QtGui.QOpenGLTexture.Feature.AnisotropicFiltering?10 +QtGui.QOpenGLTexture.Feature.NPOTTextures?10 +QtGui.QOpenGLTexture.Feature.NPOTTextureRepeat?10 +QtGui.QOpenGLTexture.Feature.Texture1D?10 +QtGui.QOpenGLTexture.Feature.TextureComparisonOperators?10 +QtGui.QOpenGLTexture.Feature.TextureMipMapLevel?10 +QtGui.QOpenGLTexture.PixelType?10 +QtGui.QOpenGLTexture.PixelType.NoPixelType?10 +QtGui.QOpenGLTexture.PixelType.Int8?10 +QtGui.QOpenGLTexture.PixelType.UInt8?10 +QtGui.QOpenGLTexture.PixelType.Int16?10 +QtGui.QOpenGLTexture.PixelType.UInt16?10 +QtGui.QOpenGLTexture.PixelType.Int32?10 +QtGui.QOpenGLTexture.PixelType.UInt32?10 +QtGui.QOpenGLTexture.PixelType.Float16?10 +QtGui.QOpenGLTexture.PixelType.Float16OES?10 +QtGui.QOpenGLTexture.PixelType.Float32?10 +QtGui.QOpenGLTexture.PixelType.UInt32_RGB9_E5?10 +QtGui.QOpenGLTexture.PixelType.UInt32_RG11B10F?10 +QtGui.QOpenGLTexture.PixelType.UInt8_RG3B2?10 +QtGui.QOpenGLTexture.PixelType.UInt8_RG3B2_Rev?10 +QtGui.QOpenGLTexture.PixelType.UInt16_RGB5A1?10 +QtGui.QOpenGLTexture.PixelType.UInt16_RGB5A1_Rev?10 +QtGui.QOpenGLTexture.PixelType.UInt16_R5G6B5?10 +QtGui.QOpenGLTexture.PixelType.UInt16_R5G6B5_Rev?10 +QtGui.QOpenGLTexture.PixelType.UInt16_RGBA4?10 +QtGui.QOpenGLTexture.PixelType.UInt16_RGBA4_Rev?10 +QtGui.QOpenGLTexture.PixelType.UInt32_RGB10A2?10 +QtGui.QOpenGLTexture.PixelType.UInt32_RGB10A2_Rev?10 +QtGui.QOpenGLTexture.PixelType.UInt32_RGBA8?10 +QtGui.QOpenGLTexture.PixelType.UInt32_RGBA8_Rev?10 +QtGui.QOpenGLTexture.PixelType.UInt32_D24S8?10 +QtGui.QOpenGLTexture.PixelType.Float32_D32_UInt32_S8_X24?10 +QtGui.QOpenGLTexture.PixelFormat?10 +QtGui.QOpenGLTexture.PixelFormat.NoSourceFormat?10 +QtGui.QOpenGLTexture.PixelFormat.Red?10 +QtGui.QOpenGLTexture.PixelFormat.RG?10 +QtGui.QOpenGLTexture.PixelFormat.RGB?10 +QtGui.QOpenGLTexture.PixelFormat.BGR?10 +QtGui.QOpenGLTexture.PixelFormat.RGBA?10 +QtGui.QOpenGLTexture.PixelFormat.BGRA?10 +QtGui.QOpenGLTexture.PixelFormat.Red_Integer?10 +QtGui.QOpenGLTexture.PixelFormat.RG_Integer?10 +QtGui.QOpenGLTexture.PixelFormat.RGB_Integer?10 +QtGui.QOpenGLTexture.PixelFormat.BGR_Integer?10 +QtGui.QOpenGLTexture.PixelFormat.RGBA_Integer?10 +QtGui.QOpenGLTexture.PixelFormat.BGRA_Integer?10 +QtGui.QOpenGLTexture.PixelFormat.Depth?10 +QtGui.QOpenGLTexture.PixelFormat.DepthStencil?10 +QtGui.QOpenGLTexture.PixelFormat.Alpha?10 +QtGui.QOpenGLTexture.PixelFormat.Luminance?10 +QtGui.QOpenGLTexture.PixelFormat.LuminanceAlpha?10 +QtGui.QOpenGLTexture.PixelFormat.Stencil?10 +QtGui.QOpenGLTexture.CubeMapFace?10 +QtGui.QOpenGLTexture.CubeMapFace.CubeMapPositiveX?10 +QtGui.QOpenGLTexture.CubeMapFace.CubeMapNegativeX?10 +QtGui.QOpenGLTexture.CubeMapFace.CubeMapPositiveY?10 +QtGui.QOpenGLTexture.CubeMapFace.CubeMapNegativeY?10 +QtGui.QOpenGLTexture.CubeMapFace.CubeMapPositiveZ?10 +QtGui.QOpenGLTexture.CubeMapFace.CubeMapNegativeZ?10 +QtGui.QOpenGLTexture.TextureFormat?10 +QtGui.QOpenGLTexture.TextureFormat.NoFormat?10 +QtGui.QOpenGLTexture.TextureFormat.R8_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RG8_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGB8_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA8_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.R16_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RG16_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGB16_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA16_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.R8_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RG8_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGB8_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA8_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.R16_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RG16_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGB16_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA16_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.R8U?10 +QtGui.QOpenGLTexture.TextureFormat.RG8U?10 +QtGui.QOpenGLTexture.TextureFormat.RGB8U?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA8U?10 +QtGui.QOpenGLTexture.TextureFormat.R16U?10 +QtGui.QOpenGLTexture.TextureFormat.RG16U?10 +QtGui.QOpenGLTexture.TextureFormat.RGB16U?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA16U?10 +QtGui.QOpenGLTexture.TextureFormat.R32U?10 +QtGui.QOpenGLTexture.TextureFormat.RG32U?10 +QtGui.QOpenGLTexture.TextureFormat.RGB32U?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA32U?10 +QtGui.QOpenGLTexture.TextureFormat.R8I?10 +QtGui.QOpenGLTexture.TextureFormat.RG8I?10 +QtGui.QOpenGLTexture.TextureFormat.RGB8I?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA8I?10 +QtGui.QOpenGLTexture.TextureFormat.R16I?10 +QtGui.QOpenGLTexture.TextureFormat.RG16I?10 +QtGui.QOpenGLTexture.TextureFormat.RGB16I?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA16I?10 +QtGui.QOpenGLTexture.TextureFormat.R32I?10 +QtGui.QOpenGLTexture.TextureFormat.RG32I?10 +QtGui.QOpenGLTexture.TextureFormat.RGB32I?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA32I?10 +QtGui.QOpenGLTexture.TextureFormat.R16F?10 +QtGui.QOpenGLTexture.TextureFormat.RG16F?10 +QtGui.QOpenGLTexture.TextureFormat.RGB16F?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA16F?10 +QtGui.QOpenGLTexture.TextureFormat.R32F?10 +QtGui.QOpenGLTexture.TextureFormat.RG32F?10 +QtGui.QOpenGLTexture.TextureFormat.RGB32F?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA32F?10 +QtGui.QOpenGLTexture.TextureFormat.RGB9E5?10 +QtGui.QOpenGLTexture.TextureFormat.RG11B10F?10 +QtGui.QOpenGLTexture.TextureFormat.RG3B2?10 +QtGui.QOpenGLTexture.TextureFormat.R5G6B5?10 +QtGui.QOpenGLTexture.TextureFormat.RGB5A1?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA4?10 +QtGui.QOpenGLTexture.TextureFormat.RGB10A2?10 +QtGui.QOpenGLTexture.TextureFormat.D16?10 +QtGui.QOpenGLTexture.TextureFormat.D24?10 +QtGui.QOpenGLTexture.TextureFormat.D24S8?10 +QtGui.QOpenGLTexture.TextureFormat.D32?10 +QtGui.QOpenGLTexture.TextureFormat.D32F?10 +QtGui.QOpenGLTexture.TextureFormat.D32FS8X24?10 +QtGui.QOpenGLTexture.TextureFormat.RGB_DXT1?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_DXT1?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_DXT3?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_DXT5?10 +QtGui.QOpenGLTexture.TextureFormat.R_ATI1N_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.R_ATI1N_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RG_ATI2N_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RG_ATI2N_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGB_BP_UNSIGNED_FLOAT?10 +QtGui.QOpenGLTexture.TextureFormat.RGB_BP_SIGNED_FLOAT?10 +QtGui.QOpenGLTexture.TextureFormat.RGB_BP_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB_DXT1?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB_Alpha_DXT1?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB_Alpha_DXT3?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB_Alpha_DXT5?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB_BP_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.DepthFormat?10 +QtGui.QOpenGLTexture.TextureFormat.AlphaFormat?10 +QtGui.QOpenGLTexture.TextureFormat.RGBFormat?10 +QtGui.QOpenGLTexture.TextureFormat.RGBAFormat?10 +QtGui.QOpenGLTexture.TextureFormat.LuminanceFormat?10 +QtGui.QOpenGLTexture.TextureFormat.LuminanceAlphaFormat?10 +QtGui.QOpenGLTexture.TextureFormat.S8?10 +QtGui.QOpenGLTexture.TextureFormat.R11_EAC_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.R11_EAC_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RG11_EAC_UNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RG11_EAC_SNorm?10 +QtGui.QOpenGLTexture.TextureFormat.RGB8_ETC2?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_ETC2?10 +QtGui.QOpenGLTexture.TextureFormat.RGB8_PunchThrough_Alpha1_ETC2?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_PunchThrough_Alpha1_ETC2?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA8_ETC2_EAC?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ETC2_EAC?10 +QtGui.QOpenGLTexture.TextureFormat.RGB8_ETC1?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_4x4?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_5x4?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_5x5?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_6x5?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_6x6?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_8x5?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_8x6?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_8x8?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_10x5?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_10x6?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_10x8?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_10x10?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_12x10?10 +QtGui.QOpenGLTexture.TextureFormat.RGBA_ASTC_12x12?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_4x4?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_5x4?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_5x5?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_6x5?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_6x6?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_8x5?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_8x6?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_8x8?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_10x5?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_10x6?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_10x8?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_10x10?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_12x10?10 +QtGui.QOpenGLTexture.TextureFormat.SRGB8_Alpha8_ASTC_12x12?10 +QtGui.QOpenGLTexture.TextureUnitReset?10 +QtGui.QOpenGLTexture.TextureUnitReset.ResetTextureUnit?10 +QtGui.QOpenGLTexture.TextureUnitReset.DontResetTextureUnit?10 +QtGui.QOpenGLTexture.MipMapGeneration?10 +QtGui.QOpenGLTexture.MipMapGeneration.GenerateMipMaps?10 +QtGui.QOpenGLTexture.MipMapGeneration.DontGenerateMipMaps?10 +QtGui.QOpenGLTexture.BindingTarget?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTarget1D?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTarget1DArray?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTarget2D?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTarget2DArray?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTarget3D?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTargetCubeMap?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTargetCubeMapArray?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTarget2DMultisample?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTarget2DMultisampleArray?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTargetRectangle?10 +QtGui.QOpenGLTexture.BindingTarget.BindingTargetBuffer?10 +QtGui.QOpenGLTexture.Target?10 +QtGui.QOpenGLTexture.Target.Target1D?10 +QtGui.QOpenGLTexture.Target.Target1DArray?10 +QtGui.QOpenGLTexture.Target.Target2D?10 +QtGui.QOpenGLTexture.Target.Target2DArray?10 +QtGui.QOpenGLTexture.Target.Target3D?10 +QtGui.QOpenGLTexture.Target.TargetCubeMap?10 +QtGui.QOpenGLTexture.Target.TargetCubeMapArray?10 +QtGui.QOpenGLTexture.Target.Target2DMultisample?10 +QtGui.QOpenGLTexture.Target.Target2DMultisampleArray?10 +QtGui.QOpenGLTexture.Target.TargetRectangle?10 +QtGui.QOpenGLTexture.Target.TargetBuffer?10 +QtGui.QOpenGLTexture?1(QOpenGLTexture.Target) +QtGui.QOpenGLTexture.__init__?1(self, QOpenGLTexture.Target) +QtGui.QOpenGLTexture?1(QImage, QOpenGLTexture.MipMapGeneration genMipMaps=QOpenGLTexture.GenerateMipMaps) +QtGui.QOpenGLTexture.__init__?1(self, QImage, QOpenGLTexture.MipMapGeneration genMipMaps=QOpenGLTexture.GenerateMipMaps) +QtGui.QOpenGLTexture.create?4() -> bool +QtGui.QOpenGLTexture.destroy?4() +QtGui.QOpenGLTexture.isCreated?4() -> bool +QtGui.QOpenGLTexture.textureId?4() -> int +QtGui.QOpenGLTexture.bind?4() +QtGui.QOpenGLTexture.bind?4(int, QOpenGLTexture.TextureUnitReset reset=QOpenGLTexture.DontResetTextureUnit) +QtGui.QOpenGLTexture.release?4() +QtGui.QOpenGLTexture.release?4(int, QOpenGLTexture.TextureUnitReset reset=QOpenGLTexture.DontResetTextureUnit) +QtGui.QOpenGLTexture.isBound?4() -> bool +QtGui.QOpenGLTexture.isBound?4(int) -> bool +QtGui.QOpenGLTexture.boundTextureId?4(QOpenGLTexture.BindingTarget) -> int +QtGui.QOpenGLTexture.boundTextureId?4(int, QOpenGLTexture.BindingTarget) -> int +QtGui.QOpenGLTexture.setFormat?4(QOpenGLTexture.TextureFormat) +QtGui.QOpenGLTexture.format?4() -> QOpenGLTexture.TextureFormat +QtGui.QOpenGLTexture.setSize?4(int, int height=1, int depth=1) +QtGui.QOpenGLTexture.width?4() -> int +QtGui.QOpenGLTexture.height?4() -> int +QtGui.QOpenGLTexture.depth?4() -> int +QtGui.QOpenGLTexture.setMipLevels?4(int) +QtGui.QOpenGLTexture.mipLevels?4() -> int +QtGui.QOpenGLTexture.maximumMipLevels?4() -> int +QtGui.QOpenGLTexture.setLayers?4(int) +QtGui.QOpenGLTexture.layers?4() -> int +QtGui.QOpenGLTexture.faces?4() -> int +QtGui.QOpenGLTexture.allocateStorage?4() +QtGui.QOpenGLTexture.allocateStorage?4(QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType) +QtGui.QOpenGLTexture.isStorageAllocated?4() -> bool +QtGui.QOpenGLTexture.createTextureView?4(QOpenGLTexture.Target, QOpenGLTexture.TextureFormat, int, int, int, int) -> QOpenGLTexture +QtGui.QOpenGLTexture.isTextureView?4() -> bool +QtGui.QOpenGLTexture.setData?4(int, int, QOpenGLTexture.CubeMapFace, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(int, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(QImage, QOpenGLTexture.MipMapGeneration genMipMaps=QOpenGLTexture.GenerateMipMaps) +QtGui.QOpenGLTexture.setCompressedData?4(int, int, QOpenGLTexture.CubeMapFace, int, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setCompressedData?4(int, int, int, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setCompressedData?4(int, int, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setCompressedData?4(int, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.hasFeature?4(QOpenGLTexture.Feature) -> bool +QtGui.QOpenGLTexture.setMipBaseLevel?4(int) +QtGui.QOpenGLTexture.mipBaseLevel?4() -> int +QtGui.QOpenGLTexture.setMipMaxLevel?4(int) +QtGui.QOpenGLTexture.mipMaxLevel?4() -> int +QtGui.QOpenGLTexture.setMipLevelRange?4(int, int) +QtGui.QOpenGLTexture.mipLevelRange?4() -> unknown-type +QtGui.QOpenGLTexture.setAutoMipMapGenerationEnabled?4(bool) +QtGui.QOpenGLTexture.isAutoMipMapGenerationEnabled?4() -> bool +QtGui.QOpenGLTexture.generateMipMaps?4() +QtGui.QOpenGLTexture.generateMipMaps?4(int, bool resetBaseLevel=True) +QtGui.QOpenGLTexture.setSwizzleMask?4(QOpenGLTexture.SwizzleComponent, QOpenGLTexture.SwizzleValue) +QtGui.QOpenGLTexture.setSwizzleMask?4(QOpenGLTexture.SwizzleValue, QOpenGLTexture.SwizzleValue, QOpenGLTexture.SwizzleValue, QOpenGLTexture.SwizzleValue) +QtGui.QOpenGLTexture.swizzleMask?4(QOpenGLTexture.SwizzleComponent) -> QOpenGLTexture.SwizzleValue +QtGui.QOpenGLTexture.setDepthStencilMode?4(QOpenGLTexture.DepthStencilMode) +QtGui.QOpenGLTexture.depthStencilMode?4() -> QOpenGLTexture.DepthStencilMode +QtGui.QOpenGLTexture.setMinificationFilter?4(QOpenGLTexture.Filter) +QtGui.QOpenGLTexture.minificationFilter?4() -> QOpenGLTexture.Filter +QtGui.QOpenGLTexture.setMagnificationFilter?4(QOpenGLTexture.Filter) +QtGui.QOpenGLTexture.magnificationFilter?4() -> QOpenGLTexture.Filter +QtGui.QOpenGLTexture.setMinMagFilters?4(QOpenGLTexture.Filter, QOpenGLTexture.Filter) +QtGui.QOpenGLTexture.minMagFilters?4() -> unknown-type +QtGui.QOpenGLTexture.setMaximumAnisotropy?4(float) +QtGui.QOpenGLTexture.maximumAnisotropy?4() -> float +QtGui.QOpenGLTexture.setWrapMode?4(QOpenGLTexture.WrapMode) +QtGui.QOpenGLTexture.setWrapMode?4(QOpenGLTexture.CoordinateDirection, QOpenGLTexture.WrapMode) +QtGui.QOpenGLTexture.wrapMode?4(QOpenGLTexture.CoordinateDirection) -> QOpenGLTexture.WrapMode +QtGui.QOpenGLTexture.setBorderColor?4(QColor) +QtGui.QOpenGLTexture.borderColor?4() -> QColor +QtGui.QOpenGLTexture.setMinimumLevelOfDetail?4(float) +QtGui.QOpenGLTexture.minimumLevelOfDetail?4() -> float +QtGui.QOpenGLTexture.setMaximumLevelOfDetail?4(float) +QtGui.QOpenGLTexture.maximumLevelOfDetail?4() -> float +QtGui.QOpenGLTexture.setLevelOfDetailRange?4(float, float) +QtGui.QOpenGLTexture.levelOfDetailRange?4() -> unknown-type +QtGui.QOpenGLTexture.setLevelofDetailBias?4(float) +QtGui.QOpenGLTexture.levelofDetailBias?4() -> float +QtGui.QOpenGLTexture.target?4() -> QOpenGLTexture.Target +QtGui.QOpenGLTexture.setSamples?4(int) +QtGui.QOpenGLTexture.samples?4() -> int +QtGui.QOpenGLTexture.setFixedSamplePositions?4(bool) +QtGui.QOpenGLTexture.isFixedSamplePositions?4() -> bool +QtGui.QOpenGLTexture.setComparisonFunction?4(QOpenGLTexture.ComparisonFunction) +QtGui.QOpenGLTexture.comparisonFunction?4() -> QOpenGLTexture.ComparisonFunction +QtGui.QOpenGLTexture.setComparisonMode?4(QOpenGLTexture.ComparisonMode) +QtGui.QOpenGLTexture.comparisonMode?4() -> QOpenGLTexture.ComparisonMode +QtGui.QOpenGLTexture.setData?4(int, int, int, QOpenGLTexture.CubeMapFace, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setCompressedData?4(int, int, int, QOpenGLTexture.CubeMapFace, int, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(int, int, int, int, int, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(int, int, int, int, int, int, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(int, int, int, int, int, int, int, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(int, int, int, int, int, int, int, int, QOpenGLTexture.CubeMapFace, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.setData?4(int, int, int, int, int, int, int, int, QOpenGLTexture.CubeMapFace, int, QOpenGLTexture.PixelFormat, QOpenGLTexture.PixelType, PyQt5.sip.voidptr, QOpenGLPixelTransferOptions options=None) +QtGui.QOpenGLTexture.Features?1() +QtGui.QOpenGLTexture.Features.__init__?1(self) +QtGui.QOpenGLTexture.Features?1(int) +QtGui.QOpenGLTexture.Features.__init__?1(self, int) +QtGui.QOpenGLTexture.Features?1(QOpenGLTexture.Features) +QtGui.QOpenGLTexture.Features.__init__?1(self, QOpenGLTexture.Features) +QtGui.QOpenGLTextureBlitter.Origin?10 +QtGui.QOpenGLTextureBlitter.Origin.OriginBottomLeft?10 +QtGui.QOpenGLTextureBlitter.Origin.OriginTopLeft?10 +QtGui.QOpenGLTextureBlitter?1() +QtGui.QOpenGLTextureBlitter.__init__?1(self) +QtGui.QOpenGLTextureBlitter.create?4() -> bool +QtGui.QOpenGLTextureBlitter.isCreated?4() -> bool +QtGui.QOpenGLTextureBlitter.destroy?4() +QtGui.QOpenGLTextureBlitter.supportsExternalOESTarget?4() -> bool +QtGui.QOpenGLTextureBlitter.bind?4(int target=GL_TEXTURE_2D) +QtGui.QOpenGLTextureBlitter.release?4() +QtGui.QOpenGLTextureBlitter.setRedBlueSwizzle?4(bool) +QtGui.QOpenGLTextureBlitter.setOpacity?4(float) +QtGui.QOpenGLTextureBlitter.blit?4(int, QMatrix4x4, QOpenGLTextureBlitter.Origin) +QtGui.QOpenGLTextureBlitter.blit?4(int, QMatrix4x4, QMatrix3x3) +QtGui.QOpenGLTextureBlitter.targetTransform?4(QRectF, QRect) -> QMatrix4x4 +QtGui.QOpenGLTextureBlitter.sourceTransform?4(QRectF, QSize, QOpenGLTextureBlitter.Origin) -> QMatrix3x3 +QtGui.QOpenGLTimerQuery?1(QObject parent=None) +QtGui.QOpenGLTimerQuery.__init__?1(self, QObject parent=None) +QtGui.QOpenGLTimerQuery.create?4() -> bool +QtGui.QOpenGLTimerQuery.destroy?4() +QtGui.QOpenGLTimerQuery.isCreated?4() -> bool +QtGui.QOpenGLTimerQuery.objectId?4() -> int +QtGui.QOpenGLTimerQuery.begin?4() +QtGui.QOpenGLTimerQuery.end?4() +QtGui.QOpenGLTimerQuery.waitForTimestamp?4() -> int +QtGui.QOpenGLTimerQuery.recordTimestamp?4() +QtGui.QOpenGLTimerQuery.isResultAvailable?4() -> bool +QtGui.QOpenGLTimerQuery.waitForResult?4() -> int +QtGui.QOpenGLTimeMonitor?1(QObject parent=None) +QtGui.QOpenGLTimeMonitor.__init__?1(self, QObject parent=None) +QtGui.QOpenGLTimeMonitor.setSampleCount?4(int) +QtGui.QOpenGLTimeMonitor.sampleCount?4() -> int +QtGui.QOpenGLTimeMonitor.create?4() -> bool +QtGui.QOpenGLTimeMonitor.destroy?4() +QtGui.QOpenGLTimeMonitor.isCreated?4() -> bool +QtGui.QOpenGLTimeMonitor.objectIds?4() -> unknown-type +QtGui.QOpenGLTimeMonitor.recordSample?4() -> int +QtGui.QOpenGLTimeMonitor.isResultAvailable?4() -> bool +QtGui.QOpenGLTimeMonitor.waitForSamples?4() -> unknown-type +QtGui.QOpenGLTimeMonitor.waitForIntervals?4() -> unknown-type +QtGui.QOpenGLTimeMonitor.reset?4() +QtGui.QOpenGLVertexArrayObject?1(QObject parent=None) +QtGui.QOpenGLVertexArrayObject.__init__?1(self, QObject parent=None) +QtGui.QOpenGLVertexArrayObject.create?4() -> bool +QtGui.QOpenGLVertexArrayObject.destroy?4() +QtGui.QOpenGLVertexArrayObject.isCreated?4() -> bool +QtGui.QOpenGLVertexArrayObject.objectId?4() -> int +QtGui.QOpenGLVertexArrayObject.bind?4() +QtGui.QOpenGLVertexArrayObject.release?4() +QtGui.QOpenGLVertexArrayObject.Binder?1(QOpenGLVertexArrayObject) +QtGui.QOpenGLVertexArrayObject.Binder.__init__?1(self, QOpenGLVertexArrayObject) +QtGui.QOpenGLVertexArrayObject.Binder.release?4() +QtGui.QOpenGLVertexArrayObject.Binder.rebind?4() +QtGui.QOpenGLVertexArrayObject.Binder.__enter__?4() -> Any +QtGui.QOpenGLVertexArrayObject.Binder.__exit__?4(Any, Any, Any) +QtGui.QWindow.Visibility?10 +QtGui.QWindow.Visibility.Hidden?10 +QtGui.QWindow.Visibility.AutomaticVisibility?10 +QtGui.QWindow.Visibility.Windowed?10 +QtGui.QWindow.Visibility.Minimized?10 +QtGui.QWindow.Visibility.Maximized?10 +QtGui.QWindow.Visibility.FullScreen?10 +QtGui.QWindow.AncestorMode?10 +QtGui.QWindow.AncestorMode.ExcludeTransients?10 +QtGui.QWindow.AncestorMode.IncludeTransients?10 +QtGui.QWindow?1(QScreen screen=None) +QtGui.QWindow.__init__?1(self, QScreen screen=None) +QtGui.QWindow?1(QWindow) +QtGui.QWindow.__init__?1(self, QWindow) +QtGui.QWindow.setSurfaceType?4(QSurface.SurfaceType) +QtGui.QWindow.surfaceType?4() -> QSurface.SurfaceType +QtGui.QWindow.isVisible?4() -> bool +QtGui.QWindow.create?4() +QtGui.QWindow.winId?4() -> quintptr +QtGui.QWindow.parent?4() -> QWindow +QtGui.QWindow.setParent?4(QWindow) +QtGui.QWindow.isTopLevel?4() -> bool +QtGui.QWindow.isModal?4() -> bool +QtGui.QWindow.modality?4() -> Qt.WindowModality +QtGui.QWindow.setModality?4(Qt.WindowModality) +QtGui.QWindow.setFormat?4(QSurfaceFormat) +QtGui.QWindow.format?4() -> QSurfaceFormat +QtGui.QWindow.requestedFormat?4() -> QSurfaceFormat +QtGui.QWindow.setFlags?4(Qt.WindowFlags) +QtGui.QWindow.flags?4() -> Qt.WindowFlags +QtGui.QWindow.type?4() -> Qt.WindowType +QtGui.QWindow.title?4() -> QString +QtGui.QWindow.setOpacity?4(float) +QtGui.QWindow.requestActivate?4() +QtGui.QWindow.isActive?4() -> bool +QtGui.QWindow.reportContentOrientationChange?4(Qt.ScreenOrientation) +QtGui.QWindow.contentOrientation?4() -> Qt.ScreenOrientation +QtGui.QWindow.devicePixelRatio?4() -> float +QtGui.QWindow.windowState?4() -> Qt.WindowState +QtGui.QWindow.setWindowState?4(Qt.WindowState) +QtGui.QWindow.setTransientParent?4(QWindow) +QtGui.QWindow.transientParent?4() -> QWindow +QtGui.QWindow.isAncestorOf?4(QWindow, QWindow.AncestorMode mode=QWindow.IncludeTransients) -> bool +QtGui.QWindow.isExposed?4() -> bool +QtGui.QWindow.minimumWidth?4() -> int +QtGui.QWindow.minimumHeight?4() -> int +QtGui.QWindow.maximumWidth?4() -> int +QtGui.QWindow.maximumHeight?4() -> int +QtGui.QWindow.minimumSize?4() -> QSize +QtGui.QWindow.maximumSize?4() -> QSize +QtGui.QWindow.baseSize?4() -> QSize +QtGui.QWindow.sizeIncrement?4() -> QSize +QtGui.QWindow.setMinimumSize?4(QSize) +QtGui.QWindow.setMaximumSize?4(QSize) +QtGui.QWindow.setBaseSize?4(QSize) +QtGui.QWindow.setSizeIncrement?4(QSize) +QtGui.QWindow.setGeometry?4(int, int, int, int) +QtGui.QWindow.setGeometry?4(QRect) +QtGui.QWindow.geometry?4() -> QRect +QtGui.QWindow.frameMargins?4() -> QMargins +QtGui.QWindow.frameGeometry?4() -> QRect +QtGui.QWindow.framePosition?4() -> QPoint +QtGui.QWindow.setFramePosition?4(QPoint) +QtGui.QWindow.width?4() -> int +QtGui.QWindow.height?4() -> int +QtGui.QWindow.x?4() -> int +QtGui.QWindow.y?4() -> int +QtGui.QWindow.size?4() -> QSize +QtGui.QWindow.position?4() -> QPoint +QtGui.QWindow.setPosition?4(QPoint) +QtGui.QWindow.setPosition?4(int, int) +QtGui.QWindow.resize?4(QSize) +QtGui.QWindow.resize?4(int, int) +QtGui.QWindow.setFilePath?4(QString) +QtGui.QWindow.filePath?4() -> QString +QtGui.QWindow.setIcon?4(QIcon) +QtGui.QWindow.icon?4() -> QIcon +QtGui.QWindow.destroy?4() +QtGui.QWindow.setKeyboardGrabEnabled?4(bool) -> bool +QtGui.QWindow.setMouseGrabEnabled?4(bool) -> bool +QtGui.QWindow.screen?4() -> QScreen +QtGui.QWindow.setScreen?4(QScreen) +QtGui.QWindow.focusObject?4() -> QObject +QtGui.QWindow.mapToGlobal?4(QPoint) -> QPoint +QtGui.QWindow.mapFromGlobal?4(QPoint) -> QPoint +QtGui.QWindow.cursor?4() -> QCursor +QtGui.QWindow.setCursor?4(QCursor) +QtGui.QWindow.unsetCursor?4() +QtGui.QWindow.setVisible?4(bool) +QtGui.QWindow.show?4() +QtGui.QWindow.hide?4() +QtGui.QWindow.showMinimized?4() +QtGui.QWindow.showMaximized?4() +QtGui.QWindow.showFullScreen?4() +QtGui.QWindow.showNormal?4() +QtGui.QWindow.close?4() -> bool +QtGui.QWindow.raise_?4() +QtGui.QWindow.lower?4() +QtGui.QWindow.setTitle?4(QString) +QtGui.QWindow.setX?4(int) +QtGui.QWindow.setY?4(int) +QtGui.QWindow.setWidth?4(int) +QtGui.QWindow.setHeight?4(int) +QtGui.QWindow.setMinimumWidth?4(int) +QtGui.QWindow.setMinimumHeight?4(int) +QtGui.QWindow.setMaximumWidth?4(int) +QtGui.QWindow.setMaximumHeight?4(int) +QtGui.QWindow.alert?4(int) +QtGui.QWindow.requestUpdate?4() +QtGui.QWindow.screenChanged?4(QScreen) +QtGui.QWindow.modalityChanged?4(Qt.WindowModality) +QtGui.QWindow.windowStateChanged?4(Qt.WindowState) +QtGui.QWindow.xChanged?4(int) +QtGui.QWindow.yChanged?4(int) +QtGui.QWindow.widthChanged?4(int) +QtGui.QWindow.heightChanged?4(int) +QtGui.QWindow.minimumWidthChanged?4(int) +QtGui.QWindow.minimumHeightChanged?4(int) +QtGui.QWindow.maximumWidthChanged?4(int) +QtGui.QWindow.maximumHeightChanged?4(int) +QtGui.QWindow.visibleChanged?4(bool) +QtGui.QWindow.contentOrientationChanged?4(Qt.ScreenOrientation) +QtGui.QWindow.focusObjectChanged?4(QObject) +QtGui.QWindow.windowTitleChanged?4(QString) +QtGui.QWindow.exposeEvent?4(QExposeEvent) +QtGui.QWindow.resizeEvent?4(QResizeEvent) +QtGui.QWindow.moveEvent?4(QMoveEvent) +QtGui.QWindow.focusInEvent?4(QFocusEvent) +QtGui.QWindow.focusOutEvent?4(QFocusEvent) +QtGui.QWindow.showEvent?4(QShowEvent) +QtGui.QWindow.hideEvent?4(QHideEvent) +QtGui.QWindow.event?4(QEvent) -> bool +QtGui.QWindow.keyPressEvent?4(QKeyEvent) +QtGui.QWindow.keyReleaseEvent?4(QKeyEvent) +QtGui.QWindow.mousePressEvent?4(QMouseEvent) +QtGui.QWindow.mouseReleaseEvent?4(QMouseEvent) +QtGui.QWindow.mouseDoubleClickEvent?4(QMouseEvent) +QtGui.QWindow.mouseMoveEvent?4(QMouseEvent) +QtGui.QWindow.wheelEvent?4(QWheelEvent) +QtGui.QWindow.touchEvent?4(QTouchEvent) +QtGui.QWindow.tabletEvent?4(QTabletEvent) +QtGui.QWindow.visibility?4() -> QWindow.Visibility +QtGui.QWindow.setVisibility?4(QWindow.Visibility) +QtGui.QWindow.opacity?4() -> float +QtGui.QWindow.setMask?4(QRegion) +QtGui.QWindow.mask?4() -> QRegion +QtGui.QWindow.fromWinId?4(quintptr) -> QWindow +QtGui.QWindow.visibilityChanged?4(QWindow.Visibility) +QtGui.QWindow.activeChanged?4() +QtGui.QWindow.opacityChanged?4(float) +QtGui.QWindow.parent?4(QWindow.AncestorMode) -> QWindow +QtGui.QWindow.setFlag?4(Qt.WindowType, bool on=True) +QtGui.QWindow.windowStates?4() -> Qt.WindowStates +QtGui.QWindow.setWindowStates?4(Qt.WindowStates) +QtGui.QWindow.startSystemResize?4(Qt.Edges) -> bool +QtGui.QWindow.startSystemMove?4() -> bool +QtGui.QPaintDeviceWindow.update?4(QRect) +QtGui.QPaintDeviceWindow.update?4(QRegion) +QtGui.QPaintDeviceWindow.update?4() +QtGui.QPaintDeviceWindow.paintEvent?4(QPaintEvent) +QtGui.QPaintDeviceWindow.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QPaintDeviceWindow.exposeEvent?4(QExposeEvent) +QtGui.QPaintDeviceWindow.event?4(QEvent) -> bool +QtGui.QOpenGLWindow.UpdateBehavior?10 +QtGui.QOpenGLWindow.UpdateBehavior.NoPartialUpdate?10 +QtGui.QOpenGLWindow.UpdateBehavior.PartialUpdateBlit?10 +QtGui.QOpenGLWindow.UpdateBehavior.PartialUpdateBlend?10 +QtGui.QOpenGLWindow?1(QOpenGLWindow.UpdateBehavior updateBehavior=QOpenGLWindow.NoPartialUpdate, QWindow parent=None) +QtGui.QOpenGLWindow.__init__?1(self, QOpenGLWindow.UpdateBehavior updateBehavior=QOpenGLWindow.NoPartialUpdate, QWindow parent=None) +QtGui.QOpenGLWindow?1(QOpenGLContext, QOpenGLWindow.UpdateBehavior updateBehavior=QOpenGLWindow.NoPartialUpdate, QWindow parent=None) +QtGui.QOpenGLWindow.__init__?1(self, QOpenGLContext, QOpenGLWindow.UpdateBehavior updateBehavior=QOpenGLWindow.NoPartialUpdate, QWindow parent=None) +QtGui.QOpenGLWindow.updateBehavior?4() -> QOpenGLWindow.UpdateBehavior +QtGui.QOpenGLWindow.isValid?4() -> bool +QtGui.QOpenGLWindow.makeCurrent?4() +QtGui.QOpenGLWindow.doneCurrent?4() +QtGui.QOpenGLWindow.context?4() -> QOpenGLContext +QtGui.QOpenGLWindow.defaultFramebufferObject?4() -> int +QtGui.QOpenGLWindow.grabFramebuffer?4() -> QImage +QtGui.QOpenGLWindow.shareContext?4() -> QOpenGLContext +QtGui.QOpenGLWindow.frameSwapped?4() +QtGui.QOpenGLWindow.initializeGL?4() +QtGui.QOpenGLWindow.resizeGL?4(int, int) +QtGui.QOpenGLWindow.paintGL?4() +QtGui.QOpenGLWindow.paintUnderGL?4() +QtGui.QOpenGLWindow.paintOverGL?4() +QtGui.QOpenGLWindow.paintEvent?4(QPaintEvent) +QtGui.QOpenGLWindow.resizeEvent?4(QResizeEvent) +QtGui.QOpenGLWindow.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QPagedPaintDevice.PdfVersion?10 +QtGui.QPagedPaintDevice.PdfVersion.PdfVersion_1_4?10 +QtGui.QPagedPaintDevice.PdfVersion.PdfVersion_A1b?10 +QtGui.QPagedPaintDevice.PdfVersion.PdfVersion_1_6?10 +QtGui.QPagedPaintDevice.PageSize?10 +QtGui.QPagedPaintDevice.PageSize.A4?10 +QtGui.QPagedPaintDevice.PageSize.B5?10 +QtGui.QPagedPaintDevice.PageSize.Letter?10 +QtGui.QPagedPaintDevice.PageSize.Legal?10 +QtGui.QPagedPaintDevice.PageSize.Executive?10 +QtGui.QPagedPaintDevice.PageSize.A0?10 +QtGui.QPagedPaintDevice.PageSize.A1?10 +QtGui.QPagedPaintDevice.PageSize.A2?10 +QtGui.QPagedPaintDevice.PageSize.A3?10 +QtGui.QPagedPaintDevice.PageSize.A5?10 +QtGui.QPagedPaintDevice.PageSize.A6?10 +QtGui.QPagedPaintDevice.PageSize.A7?10 +QtGui.QPagedPaintDevice.PageSize.A8?10 +QtGui.QPagedPaintDevice.PageSize.A9?10 +QtGui.QPagedPaintDevice.PageSize.B0?10 +QtGui.QPagedPaintDevice.PageSize.B1?10 +QtGui.QPagedPaintDevice.PageSize.B10?10 +QtGui.QPagedPaintDevice.PageSize.B2?10 +QtGui.QPagedPaintDevice.PageSize.B3?10 +QtGui.QPagedPaintDevice.PageSize.B4?10 +QtGui.QPagedPaintDevice.PageSize.B6?10 +QtGui.QPagedPaintDevice.PageSize.B7?10 +QtGui.QPagedPaintDevice.PageSize.B8?10 +QtGui.QPagedPaintDevice.PageSize.B9?10 +QtGui.QPagedPaintDevice.PageSize.C5E?10 +QtGui.QPagedPaintDevice.PageSize.Comm10E?10 +QtGui.QPagedPaintDevice.PageSize.DLE?10 +QtGui.QPagedPaintDevice.PageSize.Folio?10 +QtGui.QPagedPaintDevice.PageSize.Ledger?10 +QtGui.QPagedPaintDevice.PageSize.Tabloid?10 +QtGui.QPagedPaintDevice.PageSize.Custom?10 +QtGui.QPagedPaintDevice.PageSize.A10?10 +QtGui.QPagedPaintDevice.PageSize.A3Extra?10 +QtGui.QPagedPaintDevice.PageSize.A4Extra?10 +QtGui.QPagedPaintDevice.PageSize.A4Plus?10 +QtGui.QPagedPaintDevice.PageSize.A4Small?10 +QtGui.QPagedPaintDevice.PageSize.A5Extra?10 +QtGui.QPagedPaintDevice.PageSize.B5Extra?10 +QtGui.QPagedPaintDevice.PageSize.JisB0?10 +QtGui.QPagedPaintDevice.PageSize.JisB1?10 +QtGui.QPagedPaintDevice.PageSize.JisB2?10 +QtGui.QPagedPaintDevice.PageSize.JisB3?10 +QtGui.QPagedPaintDevice.PageSize.JisB4?10 +QtGui.QPagedPaintDevice.PageSize.JisB5?10 +QtGui.QPagedPaintDevice.PageSize.JisB6?10 +QtGui.QPagedPaintDevice.PageSize.JisB7?10 +QtGui.QPagedPaintDevice.PageSize.JisB8?10 +QtGui.QPagedPaintDevice.PageSize.JisB9?10 +QtGui.QPagedPaintDevice.PageSize.JisB10?10 +QtGui.QPagedPaintDevice.PageSize.AnsiC?10 +QtGui.QPagedPaintDevice.PageSize.AnsiD?10 +QtGui.QPagedPaintDevice.PageSize.AnsiE?10 +QtGui.QPagedPaintDevice.PageSize.LegalExtra?10 +QtGui.QPagedPaintDevice.PageSize.LetterExtra?10 +QtGui.QPagedPaintDevice.PageSize.LetterPlus?10 +QtGui.QPagedPaintDevice.PageSize.LetterSmall?10 +QtGui.QPagedPaintDevice.PageSize.TabloidExtra?10 +QtGui.QPagedPaintDevice.PageSize.ArchA?10 +QtGui.QPagedPaintDevice.PageSize.ArchB?10 +QtGui.QPagedPaintDevice.PageSize.ArchC?10 +QtGui.QPagedPaintDevice.PageSize.ArchD?10 +QtGui.QPagedPaintDevice.PageSize.ArchE?10 +QtGui.QPagedPaintDevice.PageSize.Imperial7x9?10 +QtGui.QPagedPaintDevice.PageSize.Imperial8x10?10 +QtGui.QPagedPaintDevice.PageSize.Imperial9x11?10 +QtGui.QPagedPaintDevice.PageSize.Imperial9x12?10 +QtGui.QPagedPaintDevice.PageSize.Imperial10x11?10 +QtGui.QPagedPaintDevice.PageSize.Imperial10x13?10 +QtGui.QPagedPaintDevice.PageSize.Imperial10x14?10 +QtGui.QPagedPaintDevice.PageSize.Imperial12x11?10 +QtGui.QPagedPaintDevice.PageSize.Imperial15x11?10 +QtGui.QPagedPaintDevice.PageSize.ExecutiveStandard?10 +QtGui.QPagedPaintDevice.PageSize.Note?10 +QtGui.QPagedPaintDevice.PageSize.Quarto?10 +QtGui.QPagedPaintDevice.PageSize.Statement?10 +QtGui.QPagedPaintDevice.PageSize.SuperA?10 +QtGui.QPagedPaintDevice.PageSize.SuperB?10 +QtGui.QPagedPaintDevice.PageSize.Postcard?10 +QtGui.QPagedPaintDevice.PageSize.DoublePostcard?10 +QtGui.QPagedPaintDevice.PageSize.Prc16K?10 +QtGui.QPagedPaintDevice.PageSize.Prc32K?10 +QtGui.QPagedPaintDevice.PageSize.Prc32KBig?10 +QtGui.QPagedPaintDevice.PageSize.FanFoldUS?10 +QtGui.QPagedPaintDevice.PageSize.FanFoldGerman?10 +QtGui.QPagedPaintDevice.PageSize.FanFoldGermanLegal?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeB4?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeB5?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeB6?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC0?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC1?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC2?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC3?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC4?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC6?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC65?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC7?10 +QtGui.QPagedPaintDevice.PageSize.Envelope9?10 +QtGui.QPagedPaintDevice.PageSize.Envelope11?10 +QtGui.QPagedPaintDevice.PageSize.Envelope12?10 +QtGui.QPagedPaintDevice.PageSize.Envelope14?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeMonarch?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePersonal?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeChou3?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeChou4?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeInvite?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeItalian?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeKaku2?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeKaku3?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc1?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc2?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc3?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc4?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc5?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc6?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc7?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc8?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc9?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopePrc10?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeYou4?10 +QtGui.QPagedPaintDevice.PageSize.NPaperSize?10 +QtGui.QPagedPaintDevice.PageSize.AnsiA?10 +QtGui.QPagedPaintDevice.PageSize.AnsiB?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeC5?10 +QtGui.QPagedPaintDevice.PageSize.EnvelopeDL?10 +QtGui.QPagedPaintDevice.PageSize.Envelope10?10 +QtGui.QPagedPaintDevice.PageSize.LastPageSize?10 +QtGui.QPagedPaintDevice?1() +QtGui.QPagedPaintDevice.__init__?1(self) +QtGui.QPagedPaintDevice.newPage?4() -> bool +QtGui.QPagedPaintDevice.setPageSize?4(QPagedPaintDevice.PageSize) +QtGui.QPagedPaintDevice.pageSize?4() -> QPagedPaintDevice.PageSize +QtGui.QPagedPaintDevice.setPageSizeMM?4(QSizeF) +QtGui.QPagedPaintDevice.pageSizeMM?4() -> QSizeF +QtGui.QPagedPaintDevice.setMargins?4(QPagedPaintDevice.Margins) +QtGui.QPagedPaintDevice.margins?4() -> QPagedPaintDevice.Margins +QtGui.QPagedPaintDevice.setPageLayout?4(QPageLayout) -> bool +QtGui.QPagedPaintDevice.setPageSize?4(QPageSize) -> bool +QtGui.QPagedPaintDevice.setPageOrientation?4(QPageLayout.Orientation) -> bool +QtGui.QPagedPaintDevice.setPageMargins?4(QMarginsF) -> bool +QtGui.QPagedPaintDevice.setPageMargins?4(QMarginsF, QPageLayout.Unit) -> bool +QtGui.QPagedPaintDevice.pageLayout?4() -> QPageLayout +QtGui.QPagedPaintDevice.Margins.bottom?7 +QtGui.QPagedPaintDevice.Margins.left?7 +QtGui.QPagedPaintDevice.Margins.right?7 +QtGui.QPagedPaintDevice.Margins.top?7 +QtGui.QPagedPaintDevice.Margins?1() +QtGui.QPagedPaintDevice.Margins.__init__?1(self) +QtGui.QPagedPaintDevice.Margins?1(QPagedPaintDevice.Margins) +QtGui.QPagedPaintDevice.Margins.__init__?1(self, QPagedPaintDevice.Margins) +QtGui.QPageLayout.Mode?10 +QtGui.QPageLayout.Mode.StandardMode?10 +QtGui.QPageLayout.Mode.FullPageMode?10 +QtGui.QPageLayout.Orientation?10 +QtGui.QPageLayout.Orientation.Portrait?10 +QtGui.QPageLayout.Orientation.Landscape?10 +QtGui.QPageLayout.Unit?10 +QtGui.QPageLayout.Unit.Millimeter?10 +QtGui.QPageLayout.Unit.Point?10 +QtGui.QPageLayout.Unit.Inch?10 +QtGui.QPageLayout.Unit.Pica?10 +QtGui.QPageLayout.Unit.Didot?10 +QtGui.QPageLayout.Unit.Cicero?10 +QtGui.QPageLayout?1() +QtGui.QPageLayout.__init__?1(self) +QtGui.QPageLayout?1(QPageSize, QPageLayout.Orientation, QMarginsF, QPageLayout.Unit units=QPageLayout.Point, QMarginsF minMargins=QMarginsF(0, 0, 0, 0)) +QtGui.QPageLayout.__init__?1(self, QPageSize, QPageLayout.Orientation, QMarginsF, QPageLayout.Unit units=QPageLayout.Point, QMarginsF minMargins=QMarginsF(0, 0, 0, 0)) +QtGui.QPageLayout?1(QPageLayout) +QtGui.QPageLayout.__init__?1(self, QPageLayout) +QtGui.QPageLayout.swap?4(QPageLayout) +QtGui.QPageLayout.isEquivalentTo?4(QPageLayout) -> bool +QtGui.QPageLayout.isValid?4() -> bool +QtGui.QPageLayout.setMode?4(QPageLayout.Mode) +QtGui.QPageLayout.mode?4() -> QPageLayout.Mode +QtGui.QPageLayout.setPageSize?4(QPageSize, QMarginsF minMargins=QMarginsF(0, 0, 0, 0)) +QtGui.QPageLayout.pageSize?4() -> QPageSize +QtGui.QPageLayout.setOrientation?4(QPageLayout.Orientation) +QtGui.QPageLayout.orientation?4() -> QPageLayout.Orientation +QtGui.QPageLayout.setUnits?4(QPageLayout.Unit) +QtGui.QPageLayout.units?4() -> QPageLayout.Unit +QtGui.QPageLayout.setMargins?4(QMarginsF) -> bool +QtGui.QPageLayout.setLeftMargin?4(float) -> bool +QtGui.QPageLayout.setRightMargin?4(float) -> bool +QtGui.QPageLayout.setTopMargin?4(float) -> bool +QtGui.QPageLayout.setBottomMargin?4(float) -> bool +QtGui.QPageLayout.margins?4() -> QMarginsF +QtGui.QPageLayout.margins?4(QPageLayout.Unit) -> QMarginsF +QtGui.QPageLayout.marginsPoints?4() -> QMargins +QtGui.QPageLayout.marginsPixels?4(int) -> QMargins +QtGui.QPageLayout.setMinimumMargins?4(QMarginsF) +QtGui.QPageLayout.minimumMargins?4() -> QMarginsF +QtGui.QPageLayout.maximumMargins?4() -> QMarginsF +QtGui.QPageLayout.fullRect?4() -> QRectF +QtGui.QPageLayout.fullRect?4(QPageLayout.Unit) -> QRectF +QtGui.QPageLayout.fullRectPoints?4() -> QRect +QtGui.QPageLayout.fullRectPixels?4(int) -> QRect +QtGui.QPageLayout.paintRect?4() -> QRectF +QtGui.QPageLayout.paintRect?4(QPageLayout.Unit) -> QRectF +QtGui.QPageLayout.paintRectPoints?4() -> QRect +QtGui.QPageLayout.paintRectPixels?4(int) -> QRect +QtGui.QPageSize.SizeMatchPolicy?10 +QtGui.QPageSize.SizeMatchPolicy.FuzzyMatch?10 +QtGui.QPageSize.SizeMatchPolicy.FuzzyOrientationMatch?10 +QtGui.QPageSize.SizeMatchPolicy.ExactMatch?10 +QtGui.QPageSize.Unit?10 +QtGui.QPageSize.Unit.Millimeter?10 +QtGui.QPageSize.Unit.Point?10 +QtGui.QPageSize.Unit.Inch?10 +QtGui.QPageSize.Unit.Pica?10 +QtGui.QPageSize.Unit.Didot?10 +QtGui.QPageSize.Unit.Cicero?10 +QtGui.QPageSize.PageSizeId?10 +QtGui.QPageSize.PageSizeId.A4?10 +QtGui.QPageSize.PageSizeId.B5?10 +QtGui.QPageSize.PageSizeId.Letter?10 +QtGui.QPageSize.PageSizeId.Legal?10 +QtGui.QPageSize.PageSizeId.Executive?10 +QtGui.QPageSize.PageSizeId.A0?10 +QtGui.QPageSize.PageSizeId.A1?10 +QtGui.QPageSize.PageSizeId.A2?10 +QtGui.QPageSize.PageSizeId.A3?10 +QtGui.QPageSize.PageSizeId.A5?10 +QtGui.QPageSize.PageSizeId.A6?10 +QtGui.QPageSize.PageSizeId.A7?10 +QtGui.QPageSize.PageSizeId.A8?10 +QtGui.QPageSize.PageSizeId.A9?10 +QtGui.QPageSize.PageSizeId.B0?10 +QtGui.QPageSize.PageSizeId.B1?10 +QtGui.QPageSize.PageSizeId.B10?10 +QtGui.QPageSize.PageSizeId.B2?10 +QtGui.QPageSize.PageSizeId.B3?10 +QtGui.QPageSize.PageSizeId.B4?10 +QtGui.QPageSize.PageSizeId.B6?10 +QtGui.QPageSize.PageSizeId.B7?10 +QtGui.QPageSize.PageSizeId.B8?10 +QtGui.QPageSize.PageSizeId.B9?10 +QtGui.QPageSize.PageSizeId.C5E?10 +QtGui.QPageSize.PageSizeId.Comm10E?10 +QtGui.QPageSize.PageSizeId.DLE?10 +QtGui.QPageSize.PageSizeId.Folio?10 +QtGui.QPageSize.PageSizeId.Ledger?10 +QtGui.QPageSize.PageSizeId.Tabloid?10 +QtGui.QPageSize.PageSizeId.Custom?10 +QtGui.QPageSize.PageSizeId.A10?10 +QtGui.QPageSize.PageSizeId.A3Extra?10 +QtGui.QPageSize.PageSizeId.A4Extra?10 +QtGui.QPageSize.PageSizeId.A4Plus?10 +QtGui.QPageSize.PageSizeId.A4Small?10 +QtGui.QPageSize.PageSizeId.A5Extra?10 +QtGui.QPageSize.PageSizeId.B5Extra?10 +QtGui.QPageSize.PageSizeId.JisB0?10 +QtGui.QPageSize.PageSizeId.JisB1?10 +QtGui.QPageSize.PageSizeId.JisB2?10 +QtGui.QPageSize.PageSizeId.JisB3?10 +QtGui.QPageSize.PageSizeId.JisB4?10 +QtGui.QPageSize.PageSizeId.JisB5?10 +QtGui.QPageSize.PageSizeId.JisB6?10 +QtGui.QPageSize.PageSizeId.JisB7?10 +QtGui.QPageSize.PageSizeId.JisB8?10 +QtGui.QPageSize.PageSizeId.JisB9?10 +QtGui.QPageSize.PageSizeId.JisB10?10 +QtGui.QPageSize.PageSizeId.AnsiC?10 +QtGui.QPageSize.PageSizeId.AnsiD?10 +QtGui.QPageSize.PageSizeId.AnsiE?10 +QtGui.QPageSize.PageSizeId.LegalExtra?10 +QtGui.QPageSize.PageSizeId.LetterExtra?10 +QtGui.QPageSize.PageSizeId.LetterPlus?10 +QtGui.QPageSize.PageSizeId.LetterSmall?10 +QtGui.QPageSize.PageSizeId.TabloidExtra?10 +QtGui.QPageSize.PageSizeId.ArchA?10 +QtGui.QPageSize.PageSizeId.ArchB?10 +QtGui.QPageSize.PageSizeId.ArchC?10 +QtGui.QPageSize.PageSizeId.ArchD?10 +QtGui.QPageSize.PageSizeId.ArchE?10 +QtGui.QPageSize.PageSizeId.Imperial7x9?10 +QtGui.QPageSize.PageSizeId.Imperial8x10?10 +QtGui.QPageSize.PageSizeId.Imperial9x11?10 +QtGui.QPageSize.PageSizeId.Imperial9x12?10 +QtGui.QPageSize.PageSizeId.Imperial10x11?10 +QtGui.QPageSize.PageSizeId.Imperial10x13?10 +QtGui.QPageSize.PageSizeId.Imperial10x14?10 +QtGui.QPageSize.PageSizeId.Imperial12x11?10 +QtGui.QPageSize.PageSizeId.Imperial15x11?10 +QtGui.QPageSize.PageSizeId.ExecutiveStandard?10 +QtGui.QPageSize.PageSizeId.Note?10 +QtGui.QPageSize.PageSizeId.Quarto?10 +QtGui.QPageSize.PageSizeId.Statement?10 +QtGui.QPageSize.PageSizeId.SuperA?10 +QtGui.QPageSize.PageSizeId.SuperB?10 +QtGui.QPageSize.PageSizeId.Postcard?10 +QtGui.QPageSize.PageSizeId.DoublePostcard?10 +QtGui.QPageSize.PageSizeId.Prc16K?10 +QtGui.QPageSize.PageSizeId.Prc32K?10 +QtGui.QPageSize.PageSizeId.Prc32KBig?10 +QtGui.QPageSize.PageSizeId.FanFoldUS?10 +QtGui.QPageSize.PageSizeId.FanFoldGerman?10 +QtGui.QPageSize.PageSizeId.FanFoldGermanLegal?10 +QtGui.QPageSize.PageSizeId.EnvelopeB4?10 +QtGui.QPageSize.PageSizeId.EnvelopeB5?10 +QtGui.QPageSize.PageSizeId.EnvelopeB6?10 +QtGui.QPageSize.PageSizeId.EnvelopeC0?10 +QtGui.QPageSize.PageSizeId.EnvelopeC1?10 +QtGui.QPageSize.PageSizeId.EnvelopeC2?10 +QtGui.QPageSize.PageSizeId.EnvelopeC3?10 +QtGui.QPageSize.PageSizeId.EnvelopeC4?10 +QtGui.QPageSize.PageSizeId.EnvelopeC6?10 +QtGui.QPageSize.PageSizeId.EnvelopeC65?10 +QtGui.QPageSize.PageSizeId.EnvelopeC7?10 +QtGui.QPageSize.PageSizeId.Envelope9?10 +QtGui.QPageSize.PageSizeId.Envelope11?10 +QtGui.QPageSize.PageSizeId.Envelope12?10 +QtGui.QPageSize.PageSizeId.Envelope14?10 +QtGui.QPageSize.PageSizeId.EnvelopeMonarch?10 +QtGui.QPageSize.PageSizeId.EnvelopePersonal?10 +QtGui.QPageSize.PageSizeId.EnvelopeChou3?10 +QtGui.QPageSize.PageSizeId.EnvelopeChou4?10 +QtGui.QPageSize.PageSizeId.EnvelopeInvite?10 +QtGui.QPageSize.PageSizeId.EnvelopeItalian?10 +QtGui.QPageSize.PageSizeId.EnvelopeKaku2?10 +QtGui.QPageSize.PageSizeId.EnvelopeKaku3?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc1?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc2?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc3?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc4?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc5?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc6?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc7?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc8?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc9?10 +QtGui.QPageSize.PageSizeId.EnvelopePrc10?10 +QtGui.QPageSize.PageSizeId.EnvelopeYou4?10 +QtGui.QPageSize.PageSizeId.NPageSize?10 +QtGui.QPageSize.PageSizeId.NPaperSize?10 +QtGui.QPageSize.PageSizeId.AnsiA?10 +QtGui.QPageSize.PageSizeId.AnsiB?10 +QtGui.QPageSize.PageSizeId.EnvelopeC5?10 +QtGui.QPageSize.PageSizeId.EnvelopeDL?10 +QtGui.QPageSize.PageSizeId.Envelope10?10 +QtGui.QPageSize.PageSizeId.LastPageSize?10 +QtGui.QPageSize?1() +QtGui.QPageSize.__init__?1(self) +QtGui.QPageSize?1(QPageSize.PageSizeId) +QtGui.QPageSize.__init__?1(self, QPageSize.PageSizeId) +QtGui.QPageSize?1(QSize, QString name='', QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) +QtGui.QPageSize.__init__?1(self, QSize, QString name='', QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) +QtGui.QPageSize?1(QSizeF, QPageSize.Unit, QString name='', QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) +QtGui.QPageSize.__init__?1(self, QSizeF, QPageSize.Unit, QString name='', QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) +QtGui.QPageSize?1(QPageSize) +QtGui.QPageSize.__init__?1(self, QPageSize) +QtGui.QPageSize.swap?4(QPageSize) +QtGui.QPageSize.isEquivalentTo?4(QPageSize) -> bool +QtGui.QPageSize.isValid?4() -> bool +QtGui.QPageSize.key?4() -> QString +QtGui.QPageSize.name?4() -> QString +QtGui.QPageSize.id?4() -> QPageSize.PageSizeId +QtGui.QPageSize.windowsId?4() -> int +QtGui.QPageSize.definitionSize?4() -> QSizeF +QtGui.QPageSize.definitionUnits?4() -> QPageSize.Unit +QtGui.QPageSize.size?4(QPageSize.Unit) -> QSizeF +QtGui.QPageSize.sizePoints?4() -> QSize +QtGui.QPageSize.sizePixels?4(int) -> QSize +QtGui.QPageSize.rect?4(QPageSize.Unit) -> QRectF +QtGui.QPageSize.rectPoints?4() -> QRect +QtGui.QPageSize.rectPixels?4(int) -> QRect +QtGui.QPageSize.key?4(QPageSize.PageSizeId) -> QString +QtGui.QPageSize.name?4(QPageSize.PageSizeId) -> QString +QtGui.QPageSize.id?4(QSize, QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) -> QPageSize.PageSizeId +QtGui.QPageSize.id?4(QSizeF, QPageSize.Unit, QPageSize.SizeMatchPolicy matchPolicy=QPageSize.FuzzyMatch) -> QPageSize.PageSizeId +QtGui.QPageSize.id?4(int) -> QPageSize.PageSizeId +QtGui.QPageSize.windowsId?4(QPageSize.PageSizeId) -> int +QtGui.QPageSize.definitionSize?4(QPageSize.PageSizeId) -> QSizeF +QtGui.QPageSize.definitionUnits?4(QPageSize.PageSizeId) -> QPageSize.Unit +QtGui.QPageSize.size?4(QPageSize.PageSizeId, QPageSize.Unit) -> QSizeF +QtGui.QPageSize.sizePoints?4(QPageSize.PageSizeId) -> QSize +QtGui.QPageSize.sizePixels?4(QPageSize.PageSizeId, int) -> QSize +QtGui.QPainter.PixmapFragmentHint?10 +QtGui.QPainter.PixmapFragmentHint.OpaqueHint?10 +QtGui.QPainter.CompositionMode?10 +QtGui.QPainter.CompositionMode.CompositionMode_SourceOver?10 +QtGui.QPainter.CompositionMode.CompositionMode_DestinationOver?10 +QtGui.QPainter.CompositionMode.CompositionMode_Clear?10 +QtGui.QPainter.CompositionMode.CompositionMode_Source?10 +QtGui.QPainter.CompositionMode.CompositionMode_Destination?10 +QtGui.QPainter.CompositionMode.CompositionMode_SourceIn?10 +QtGui.QPainter.CompositionMode.CompositionMode_DestinationIn?10 +QtGui.QPainter.CompositionMode.CompositionMode_SourceOut?10 +QtGui.QPainter.CompositionMode.CompositionMode_DestinationOut?10 +QtGui.QPainter.CompositionMode.CompositionMode_SourceAtop?10 +QtGui.QPainter.CompositionMode.CompositionMode_DestinationAtop?10 +QtGui.QPainter.CompositionMode.CompositionMode_Xor?10 +QtGui.QPainter.CompositionMode.CompositionMode_Plus?10 +QtGui.QPainter.CompositionMode.CompositionMode_Multiply?10 +QtGui.QPainter.CompositionMode.CompositionMode_Screen?10 +QtGui.QPainter.CompositionMode.CompositionMode_Overlay?10 +QtGui.QPainter.CompositionMode.CompositionMode_Darken?10 +QtGui.QPainter.CompositionMode.CompositionMode_Lighten?10 +QtGui.QPainter.CompositionMode.CompositionMode_ColorDodge?10 +QtGui.QPainter.CompositionMode.CompositionMode_ColorBurn?10 +QtGui.QPainter.CompositionMode.CompositionMode_HardLight?10 +QtGui.QPainter.CompositionMode.CompositionMode_SoftLight?10 +QtGui.QPainter.CompositionMode.CompositionMode_Difference?10 +QtGui.QPainter.CompositionMode.CompositionMode_Exclusion?10 +QtGui.QPainter.CompositionMode.RasterOp_SourceOrDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_SourceAndDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_SourceXorDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_NotSourceAndNotDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_NotSourceOrNotDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_NotSourceXorDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_NotSource?10 +QtGui.QPainter.CompositionMode.RasterOp_NotSourceAndDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_SourceAndNotDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_NotSourceOrDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_SourceOrNotDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_ClearDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_SetDestination?10 +QtGui.QPainter.CompositionMode.RasterOp_NotDestination?10 +QtGui.QPainter.RenderHint?10 +QtGui.QPainter.RenderHint.Antialiasing?10 +QtGui.QPainter.RenderHint.TextAntialiasing?10 +QtGui.QPainter.RenderHint.SmoothPixmapTransform?10 +QtGui.QPainter.RenderHint.HighQualityAntialiasing?10 +QtGui.QPainter.RenderHint.NonCosmeticDefaultPen?10 +QtGui.QPainter.RenderHint.Qt4CompatiblePainting?10 +QtGui.QPainter.RenderHint.LosslessImageRendering?10 +QtGui.QPainter?1() +QtGui.QPainter.__init__?1(self) +QtGui.QPainter?1(QPaintDevice) +QtGui.QPainter.__init__?1(self, QPaintDevice) +QtGui.QPainter.__enter__?4() -> Any +QtGui.QPainter.__exit__?4(Any, Any, Any) +QtGui.QPainter.device?4() -> QPaintDevice +QtGui.QPainter.begin?4(QPaintDevice) -> bool +QtGui.QPainter.end?4() -> bool +QtGui.QPainter.isActive?4() -> bool +QtGui.QPainter.setCompositionMode?4(QPainter.CompositionMode) +QtGui.QPainter.compositionMode?4() -> QPainter.CompositionMode +QtGui.QPainter.font?4() -> QFont +QtGui.QPainter.setFont?4(QFont) +QtGui.QPainter.fontMetrics?4() -> QFontMetrics +QtGui.QPainter.fontInfo?4() -> QFontInfo +QtGui.QPainter.setPen?4(QColor) +QtGui.QPainter.setPen?4(QPen) +QtGui.QPainter.setPen?4(Qt.PenStyle) +QtGui.QPainter.pen?4() -> QPen +QtGui.QPainter.setBrush?4(QBrush) +QtGui.QPainter.setBrush?4(Qt.BrushStyle) +QtGui.QPainter.brush?4() -> QBrush +QtGui.QPainter.setBackgroundMode?4(Qt.BGMode) +QtGui.QPainter.backgroundMode?4() -> Qt.BGMode +QtGui.QPainter.brushOrigin?4() -> QPoint +QtGui.QPainter.setBrushOrigin?4(QPointF) +QtGui.QPainter.setBackground?4(QBrush) +QtGui.QPainter.background?4() -> QBrush +QtGui.QPainter.clipRegion?4() -> QRegion +QtGui.QPainter.clipPath?4() -> QPainterPath +QtGui.QPainter.setClipRect?4(QRectF, Qt.ClipOperation operation=Qt.ReplaceClip) +QtGui.QPainter.setClipRegion?4(QRegion, Qt.ClipOperation operation=Qt.ReplaceClip) +QtGui.QPainter.setClipPath?4(QPainterPath, Qt.ClipOperation operation=Qt.ReplaceClip) +QtGui.QPainter.setClipping?4(bool) +QtGui.QPainter.hasClipping?4() -> bool +QtGui.QPainter.save?4() +QtGui.QPainter.restore?4() +QtGui.QPainter.scale?4(float, float) +QtGui.QPainter.shear?4(float, float) +QtGui.QPainter.rotate?4(float) +QtGui.QPainter.translate?4(QPointF) +QtGui.QPainter.window?4() -> QRect +QtGui.QPainter.setWindow?4(QRect) +QtGui.QPainter.viewport?4() -> QRect +QtGui.QPainter.setViewport?4(QRect) +QtGui.QPainter.setViewTransformEnabled?4(bool) +QtGui.QPainter.viewTransformEnabled?4() -> bool +QtGui.QPainter.strokePath?4(QPainterPath, QPen) +QtGui.QPainter.fillPath?4(QPainterPath, QBrush) +QtGui.QPainter.drawPath?4(QPainterPath) +QtGui.QPainter.drawPoints?4(QPolygonF) +QtGui.QPainter.drawPoints?4(QPolygon) +QtGui.QPainter.drawPoints?4(QPointF) +QtGui.QPainter.drawPoints?4(QPointF, Any) +QtGui.QPainter.drawPoints?4(QPoint) +QtGui.QPainter.drawPoints?4(QPoint, Any) +QtGui.QPainter.drawLines?4(QLineF) +QtGui.QPainter.drawLines?4(QLineF, Any) +QtGui.QPainter.drawLines?4(QPointF) +QtGui.QPainter.drawLines?4(QPointF, Any) +QtGui.QPainter.drawLines?4(QLine) +QtGui.QPainter.drawLines?4(QLine, Any) +QtGui.QPainter.drawLines?4(QPoint) +QtGui.QPainter.drawLines?4(QPoint, Any) +QtGui.QPainter.drawRects?4(QRectF) +QtGui.QPainter.drawRects?4(QRectF, Any) +QtGui.QPainter.drawRects?4(QRect) +QtGui.QPainter.drawRects?4(QRect, Any) +QtGui.QPainter.drawEllipse?4(QRectF) +QtGui.QPainter.drawEllipse?4(QRect) +QtGui.QPainter.drawPolyline?4(QPolygonF) +QtGui.QPainter.drawPolyline?4(QPolygon) +QtGui.QPainter.drawPolyline?4(QPointF) +QtGui.QPainter.drawPolyline?4(QPointF, Any) +QtGui.QPainter.drawPolyline?4(QPoint) +QtGui.QPainter.drawPolyline?4(QPoint, Any) +QtGui.QPainter.drawPolygon?4(QPolygonF, Qt.FillRule fillRule=Qt.OddEvenFill) +QtGui.QPainter.drawPolygon?4(QPolygon, Qt.FillRule fillRule=Qt.OddEvenFill) +QtGui.QPainter.drawPolygon?4(QPointF, Qt.FillRule fillRule=Qt.OddEvenFill) +QtGui.QPainter.drawPolygon?4(QPointF, Any) +QtGui.QPainter.drawPolygon?4(QPoint, Qt.FillRule fillRule=Qt.OddEvenFill) +QtGui.QPainter.drawPolygon?4(QPoint, Any) +QtGui.QPainter.drawConvexPolygon?4(QPolygonF) +QtGui.QPainter.drawConvexPolygon?4(QPolygon) +QtGui.QPainter.drawConvexPolygon?4(QPointF) +QtGui.QPainter.drawConvexPolygon?4(QPointF, Any) +QtGui.QPainter.drawConvexPolygon?4(QPoint) +QtGui.QPainter.drawConvexPolygon?4(QPoint, Any) +QtGui.QPainter.drawArc?4(QRectF, int, int) +QtGui.QPainter.drawPie?4(QRectF, int, int) +QtGui.QPainter.drawChord?4(QRectF, int, int) +QtGui.QPainter.drawTiledPixmap?4(QRectF, QPixmap, QPointF pos=QPointF()) +QtGui.QPainter.drawPicture?4(QPointF, QPicture) +QtGui.QPainter.drawPixmap?4(QRectF, QPixmap, QRectF) +QtGui.QPainter.setLayoutDirection?4(Qt.LayoutDirection) +QtGui.QPainter.layoutDirection?4() -> Qt.LayoutDirection +QtGui.QPainter.drawText?4(QPointF, QString) +QtGui.QPainter.drawText?4(QRectF, int, QString) -> QRectF +QtGui.QPainter.drawText?4(QRect, int, QString) -> QRect +QtGui.QPainter.drawText?4(QRectF, QString, QTextOption option=QTextOption()) +QtGui.QPainter.boundingRect?4(QRectF, int, QString) -> QRectF +QtGui.QPainter.boundingRect?4(QRect, int, QString) -> QRect +QtGui.QPainter.boundingRect?4(QRectF, QString, QTextOption option=QTextOption()) -> QRectF +QtGui.QPainter.fillRect?4(QRectF, QBrush) +QtGui.QPainter.fillRect?4(QRect, QBrush) +QtGui.QPainter.eraseRect?4(QRectF) +QtGui.QPainter.setRenderHint?4(QPainter.RenderHint, bool on=True) +QtGui.QPainter.renderHints?4() -> QPainter.RenderHints +QtGui.QPainter.setRenderHints?4(QPainter.RenderHints, bool on=True) +QtGui.QPainter.paintEngine?4() -> QPaintEngine +QtGui.QPainter.drawLine?4(QLineF) +QtGui.QPainter.drawLine?4(QLine) +QtGui.QPainter.drawLine?4(int, int, int, int) +QtGui.QPainter.drawLine?4(QPoint, QPoint) +QtGui.QPainter.drawLine?4(QPointF, QPointF) +QtGui.QPainter.drawRect?4(QRectF) +QtGui.QPainter.drawRect?4(int, int, int, int) +QtGui.QPainter.drawRect?4(QRect) +QtGui.QPainter.drawPoint?4(QPointF) +QtGui.QPainter.drawPoint?4(int, int) +QtGui.QPainter.drawPoint?4(QPoint) +QtGui.QPainter.drawEllipse?4(int, int, int, int) +QtGui.QPainter.drawArc?4(QRect, int, int) +QtGui.QPainter.drawArc?4(int, int, int, int, int, int) +QtGui.QPainter.drawPie?4(QRect, int, int) +QtGui.QPainter.drawPie?4(int, int, int, int, int, int) +QtGui.QPainter.drawChord?4(QRect, int, int) +QtGui.QPainter.drawChord?4(int, int, int, int, int, int) +QtGui.QPainter.setClipRect?4(int, int, int, int, Qt.ClipOperation operation=Qt.ReplaceClip) +QtGui.QPainter.setClipRect?4(QRect, Qt.ClipOperation operation=Qt.ReplaceClip) +QtGui.QPainter.eraseRect?4(QRect) +QtGui.QPainter.eraseRect?4(int, int, int, int) +QtGui.QPainter.fillRect?4(int, int, int, int, QBrush) +QtGui.QPainter.setBrushOrigin?4(int, int) +QtGui.QPainter.setBrushOrigin?4(QPoint) +QtGui.QPainter.drawTiledPixmap?4(QRect, QPixmap, QPoint pos=QPoint()) +QtGui.QPainter.drawTiledPixmap?4(int, int, int, int, QPixmap, int sx=0, int sy=0) +QtGui.QPainter.drawPixmap?4(QRect, QPixmap, QRect) +QtGui.QPainter.drawPixmap?4(QPointF, QPixmap) +QtGui.QPainter.drawPixmap?4(QPoint, QPixmap) +QtGui.QPainter.drawPixmap?4(QRect, QPixmap) +QtGui.QPainter.drawPixmap?4(int, int, QPixmap) +QtGui.QPainter.drawPixmap?4(int, int, int, int, QPixmap) +QtGui.QPainter.drawPixmap?4(int, int, int, int, QPixmap, int, int, int, int) +QtGui.QPainter.drawPixmap?4(int, int, QPixmap, int, int, int, int) +QtGui.QPainter.drawPixmap?4(QPointF, QPixmap, QRectF) +QtGui.QPainter.drawPixmap?4(QPoint, QPixmap, QRect) +QtGui.QPainter.drawImage?4(QRectF, QImage) +QtGui.QPainter.drawImage?4(QRect, QImage) +QtGui.QPainter.drawImage?4(QPointF, QImage) +QtGui.QPainter.drawImage?4(QPoint, QImage) +QtGui.QPainter.drawImage?4(int, int, QImage, int sx=0, int sy=0, int sw=-1, int sh=-1, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) +QtGui.QPainter.drawText?4(QPoint, QString) +QtGui.QPainter.drawText?4(int, int, int, int, int, QString) -> QRect +QtGui.QPainter.drawText?4(int, int, QString) +QtGui.QPainter.boundingRect?4(int, int, int, int, int, QString) -> QRect +QtGui.QPainter.opacity?4() -> float +QtGui.QPainter.setOpacity?4(float) +QtGui.QPainter.translate?4(float, float) +QtGui.QPainter.translate?4(QPoint) +QtGui.QPainter.setViewport?4(int, int, int, int) +QtGui.QPainter.setWindow?4(int, int, int, int) +QtGui.QPainter.worldMatrixEnabled?4() -> bool +QtGui.QPainter.setWorldMatrixEnabled?4(bool) +QtGui.QPainter.drawPicture?4(int, int, QPicture) +QtGui.QPainter.drawPicture?4(QPoint, QPicture) +QtGui.QPainter.setTransform?4(QTransform, bool combine=False) +QtGui.QPainter.transform?4() -> QTransform +QtGui.QPainter.deviceTransform?4() -> QTransform +QtGui.QPainter.resetTransform?4() +QtGui.QPainter.setWorldTransform?4(QTransform, bool combine=False) +QtGui.QPainter.worldTransform?4() -> QTransform +QtGui.QPainter.combinedTransform?4() -> QTransform +QtGui.QPainter.testRenderHint?4(QPainter.RenderHint) -> bool +QtGui.QPainter.drawRoundedRect?4(QRectF, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) +QtGui.QPainter.drawRoundedRect?4(int, int, int, int, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) +QtGui.QPainter.drawRoundedRect?4(QRect, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) +QtGui.QPainter.drawEllipse?4(QPointF, float, float) +QtGui.QPainter.drawEllipse?4(QPoint, int, int) +QtGui.QPainter.fillRect?4(QRectF, QColor) +QtGui.QPainter.fillRect?4(QRect, QColor) +QtGui.QPainter.fillRect?4(int, int, int, int, QColor) +QtGui.QPainter.fillRect?4(int, int, int, int, Qt.GlobalColor) +QtGui.QPainter.fillRect?4(QRect, Qt.GlobalColor) +QtGui.QPainter.fillRect?4(QRectF, Qt.GlobalColor) +QtGui.QPainter.fillRect?4(int, int, int, int, Qt.BrushStyle) +QtGui.QPainter.fillRect?4(QRect, Qt.BrushStyle) +QtGui.QPainter.fillRect?4(QRectF, Qt.BrushStyle) +QtGui.QPainter.beginNativePainting?4() +QtGui.QPainter.endNativePainting?4() +QtGui.QPainter.drawPixmapFragments?4(QPainter.PixmapFragment, QPixmap, QPainter.PixmapFragmentHints hints=0) +QtGui.QPainter.drawStaticText?4(QPointF, QStaticText) +QtGui.QPainter.drawStaticText?4(QPoint, QStaticText) +QtGui.QPainter.drawStaticText?4(int, int, QStaticText) +QtGui.QPainter.clipBoundingRect?4() -> QRectF +QtGui.QPainter.drawGlyphRun?4(QPointF, QGlyphRun) +QtGui.QPainter.fillRect?4(int, int, int, int, QGradient.Preset) +QtGui.QPainter.fillRect?4(QRect, QGradient.Preset) +QtGui.QPainter.fillRect?4(QRectF, QGradient.Preset) +QtGui.QPainter.drawImage?4(QRectF, QImage, QRectF, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) +QtGui.QPainter.drawImage?4(QRect, QImage, QRect, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) +QtGui.QPainter.drawImage?4(QPointF, QImage, QRectF, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) +QtGui.QPainter.drawImage?4(QPoint, QImage, QRect, Qt.ImageConversionFlags flags=Qt.ImageConversionFlag.AutoColor) +QtGui.QPainter.RenderHints?1() +QtGui.QPainter.RenderHints.__init__?1(self) +QtGui.QPainter.RenderHints?1(int) +QtGui.QPainter.RenderHints.__init__?1(self, int) +QtGui.QPainter.RenderHints?1(QPainter.RenderHints) +QtGui.QPainter.RenderHints.__init__?1(self, QPainter.RenderHints) +QtGui.QPainter.PixmapFragment.height?7 +QtGui.QPainter.PixmapFragment.opacity?7 +QtGui.QPainter.PixmapFragment.rotation?7 +QtGui.QPainter.PixmapFragment.scaleX?7 +QtGui.QPainter.PixmapFragment.scaleY?7 +QtGui.QPainter.PixmapFragment.sourceLeft?7 +QtGui.QPainter.PixmapFragment.sourceTop?7 +QtGui.QPainter.PixmapFragment.width?7 +QtGui.QPainter.PixmapFragment.x?7 +QtGui.QPainter.PixmapFragment.y?7 +QtGui.QPainter.PixmapFragment?1() +QtGui.QPainter.PixmapFragment.__init__?1(self) +QtGui.QPainter.PixmapFragment?1(QPainter.PixmapFragment) +QtGui.QPainter.PixmapFragment.__init__?1(self, QPainter.PixmapFragment) +QtGui.QPainter.PixmapFragment.create?4(QPointF, QRectF, float scaleX=1, float scaleY=1, float rotation=0, float opacity=1) -> QPainter.PixmapFragment +QtGui.QPainter.PixmapFragmentHints?1() +QtGui.QPainter.PixmapFragmentHints.__init__?1(self) +QtGui.QPainter.PixmapFragmentHints?1(int) +QtGui.QPainter.PixmapFragmentHints.__init__?1(self, int) +QtGui.QPainter.PixmapFragmentHints?1(QPainter.PixmapFragmentHints) +QtGui.QPainter.PixmapFragmentHints.__init__?1(self, QPainter.PixmapFragmentHints) +QtGui.QTextItem.RenderFlag?10 +QtGui.QTextItem.RenderFlag.RightToLeft?10 +QtGui.QTextItem.RenderFlag.Overline?10 +QtGui.QTextItem.RenderFlag.Underline?10 +QtGui.QTextItem.RenderFlag.StrikeOut?10 +QtGui.QTextItem?1() +QtGui.QTextItem.__init__?1(self) +QtGui.QTextItem?1(QTextItem) +QtGui.QTextItem.__init__?1(self, QTextItem) +QtGui.QTextItem.descent?4() -> float +QtGui.QTextItem.ascent?4() -> float +QtGui.QTextItem.width?4() -> float +QtGui.QTextItem.renderFlags?4() -> QTextItem.RenderFlags +QtGui.QTextItem.text?4() -> QString +QtGui.QTextItem.font?4() -> QFont +QtGui.QTextItem.RenderFlags?1() +QtGui.QTextItem.RenderFlags.__init__?1(self) +QtGui.QTextItem.RenderFlags?1(int) +QtGui.QTextItem.RenderFlags.__init__?1(self, int) +QtGui.QTextItem.RenderFlags?1(QTextItem.RenderFlags) +QtGui.QTextItem.RenderFlags.__init__?1(self, QTextItem.RenderFlags) +QtGui.QPaintEngine.Type?10 +QtGui.QPaintEngine.Type.X11?10 +QtGui.QPaintEngine.Type.Windows?10 +QtGui.QPaintEngine.Type.QuickDraw?10 +QtGui.QPaintEngine.Type.CoreGraphics?10 +QtGui.QPaintEngine.Type.MacPrinter?10 +QtGui.QPaintEngine.Type.QWindowSystem?10 +QtGui.QPaintEngine.Type.PostScript?10 +QtGui.QPaintEngine.Type.OpenGL?10 +QtGui.QPaintEngine.Type.Picture?10 +QtGui.QPaintEngine.Type.SVG?10 +QtGui.QPaintEngine.Type.Raster?10 +QtGui.QPaintEngine.Type.Direct3D?10 +QtGui.QPaintEngine.Type.Pdf?10 +QtGui.QPaintEngine.Type.OpenVG?10 +QtGui.QPaintEngine.Type.OpenGL2?10 +QtGui.QPaintEngine.Type.PaintBuffer?10 +QtGui.QPaintEngine.Type.Blitter?10 +QtGui.QPaintEngine.Type.Direct2D?10 +QtGui.QPaintEngine.Type.User?10 +QtGui.QPaintEngine.Type.MaxUser?10 +QtGui.QPaintEngine.PolygonDrawMode?10 +QtGui.QPaintEngine.PolygonDrawMode.OddEvenMode?10 +QtGui.QPaintEngine.PolygonDrawMode.WindingMode?10 +QtGui.QPaintEngine.PolygonDrawMode.ConvexMode?10 +QtGui.QPaintEngine.PolygonDrawMode.PolylineMode?10 +QtGui.QPaintEngine.DirtyFlag?10 +QtGui.QPaintEngine.DirtyFlag.DirtyPen?10 +QtGui.QPaintEngine.DirtyFlag.DirtyBrush?10 +QtGui.QPaintEngine.DirtyFlag.DirtyBrushOrigin?10 +QtGui.QPaintEngine.DirtyFlag.DirtyFont?10 +QtGui.QPaintEngine.DirtyFlag.DirtyBackground?10 +QtGui.QPaintEngine.DirtyFlag.DirtyBackgroundMode?10 +QtGui.QPaintEngine.DirtyFlag.DirtyTransform?10 +QtGui.QPaintEngine.DirtyFlag.DirtyClipRegion?10 +QtGui.QPaintEngine.DirtyFlag.DirtyClipPath?10 +QtGui.QPaintEngine.DirtyFlag.DirtyHints?10 +QtGui.QPaintEngine.DirtyFlag.DirtyCompositionMode?10 +QtGui.QPaintEngine.DirtyFlag.DirtyClipEnabled?10 +QtGui.QPaintEngine.DirtyFlag.DirtyOpacity?10 +QtGui.QPaintEngine.DirtyFlag.AllDirty?10 +QtGui.QPaintEngine.PaintEngineFeature?10 +QtGui.QPaintEngine.PaintEngineFeature.PrimitiveTransform?10 +QtGui.QPaintEngine.PaintEngineFeature.PatternTransform?10 +QtGui.QPaintEngine.PaintEngineFeature.PixmapTransform?10 +QtGui.QPaintEngine.PaintEngineFeature.PatternBrush?10 +QtGui.QPaintEngine.PaintEngineFeature.LinearGradientFill?10 +QtGui.QPaintEngine.PaintEngineFeature.RadialGradientFill?10 +QtGui.QPaintEngine.PaintEngineFeature.ConicalGradientFill?10 +QtGui.QPaintEngine.PaintEngineFeature.AlphaBlend?10 +QtGui.QPaintEngine.PaintEngineFeature.PorterDuff?10 +QtGui.QPaintEngine.PaintEngineFeature.PainterPaths?10 +QtGui.QPaintEngine.PaintEngineFeature.Antialiasing?10 +QtGui.QPaintEngine.PaintEngineFeature.BrushStroke?10 +QtGui.QPaintEngine.PaintEngineFeature.ConstantOpacity?10 +QtGui.QPaintEngine.PaintEngineFeature.MaskedBrush?10 +QtGui.QPaintEngine.PaintEngineFeature.PaintOutsidePaintEvent?10 +QtGui.QPaintEngine.PaintEngineFeature.PerspectiveTransform?10 +QtGui.QPaintEngine.PaintEngineFeature.BlendModes?10 +QtGui.QPaintEngine.PaintEngineFeature.ObjectBoundingModeGradients?10 +QtGui.QPaintEngine.PaintEngineFeature.RasterOpModes?10 +QtGui.QPaintEngine.PaintEngineFeature.AllFeatures?10 +QtGui.QPaintEngine?1(QPaintEngine.PaintEngineFeatures features=QPaintEngine.PaintEngineFeatures()) +QtGui.QPaintEngine.__init__?1(self, QPaintEngine.PaintEngineFeatures features=QPaintEngine.PaintEngineFeatures()) +QtGui.QPaintEngine.isActive?4() -> bool +QtGui.QPaintEngine.setActive?4(bool) +QtGui.QPaintEngine.begin?4(QPaintDevice) -> bool +QtGui.QPaintEngine.end?4() -> bool +QtGui.QPaintEngine.updateState?4(QPaintEngineState) +QtGui.QPaintEngine.drawRects?4(QRect) +QtGui.QPaintEngine.drawRects?4(QRectF) +QtGui.QPaintEngine.drawLines?4(QLine) +QtGui.QPaintEngine.drawLines?4(QLineF) +QtGui.QPaintEngine.drawEllipse?4(QRectF) +QtGui.QPaintEngine.drawEllipse?4(QRect) +QtGui.QPaintEngine.drawPath?4(QPainterPath) +QtGui.QPaintEngine.drawPoints?4(QPointF) +QtGui.QPaintEngine.drawPoints?4(QPoint) +QtGui.QPaintEngine.drawPolygon?4(QPointF, QPaintEngine.PolygonDrawMode) +QtGui.QPaintEngine.drawPolygon?4(QPoint, QPaintEngine.PolygonDrawMode) +QtGui.QPaintEngine.drawPixmap?4(QRectF, QPixmap, QRectF) +QtGui.QPaintEngine.drawTextItem?4(QPointF, QTextItem) +QtGui.QPaintEngine.drawTiledPixmap?4(QRectF, QPixmap, QPointF) +QtGui.QPaintEngine.drawImage?4(QRectF, QImage, QRectF, Qt.ImageConversionFlags flags=Qt.AutoColor) +QtGui.QPaintEngine.setPaintDevice?4(QPaintDevice) +QtGui.QPaintEngine.paintDevice?4() -> QPaintDevice +QtGui.QPaintEngine.type?4() -> QPaintEngine.Type +QtGui.QPaintEngine.painter?4() -> QPainter +QtGui.QPaintEngine.hasFeature?4(QPaintEngine.PaintEngineFeatures) -> bool +QtGui.QPaintEngine.PaintEngineFeatures?1() +QtGui.QPaintEngine.PaintEngineFeatures.__init__?1(self) +QtGui.QPaintEngine.PaintEngineFeatures?1(int) +QtGui.QPaintEngine.PaintEngineFeatures.__init__?1(self, int) +QtGui.QPaintEngine.PaintEngineFeatures?1(QPaintEngine.PaintEngineFeatures) +QtGui.QPaintEngine.PaintEngineFeatures.__init__?1(self, QPaintEngine.PaintEngineFeatures) +QtGui.QPaintEngine.DirtyFlags?1() +QtGui.QPaintEngine.DirtyFlags.__init__?1(self) +QtGui.QPaintEngine.DirtyFlags?1(int) +QtGui.QPaintEngine.DirtyFlags.__init__?1(self, int) +QtGui.QPaintEngine.DirtyFlags?1(QPaintEngine.DirtyFlags) +QtGui.QPaintEngine.DirtyFlags.__init__?1(self, QPaintEngine.DirtyFlags) +QtGui.QPaintEngineState?1() +QtGui.QPaintEngineState.__init__?1(self) +QtGui.QPaintEngineState?1(QPaintEngineState) +QtGui.QPaintEngineState.__init__?1(self, QPaintEngineState) +QtGui.QPaintEngineState.state?4() -> QPaintEngine.DirtyFlags +QtGui.QPaintEngineState.pen?4() -> QPen +QtGui.QPaintEngineState.brush?4() -> QBrush +QtGui.QPaintEngineState.brushOrigin?4() -> QPointF +QtGui.QPaintEngineState.backgroundBrush?4() -> QBrush +QtGui.QPaintEngineState.backgroundMode?4() -> Qt.BGMode +QtGui.QPaintEngineState.font?4() -> QFont +QtGui.QPaintEngineState.opacity?4() -> float +QtGui.QPaintEngineState.clipOperation?4() -> Qt.ClipOperation +QtGui.QPaintEngineState.clipRegion?4() -> QRegion +QtGui.QPaintEngineState.clipPath?4() -> QPainterPath +QtGui.QPaintEngineState.isClipEnabled?4() -> bool +QtGui.QPaintEngineState.renderHints?4() -> QPainter.RenderHints +QtGui.QPaintEngineState.compositionMode?4() -> QPainter.CompositionMode +QtGui.QPaintEngineState.painter?4() -> QPainter +QtGui.QPaintEngineState.transform?4() -> QTransform +QtGui.QPaintEngineState.brushNeedsResolving?4() -> bool +QtGui.QPaintEngineState.penNeedsResolving?4() -> bool +QtGui.QPainterPath.ElementType?10 +QtGui.QPainterPath.ElementType.MoveToElement?10 +QtGui.QPainterPath.ElementType.LineToElement?10 +QtGui.QPainterPath.ElementType.CurveToElement?10 +QtGui.QPainterPath.ElementType.CurveToDataElement?10 +QtGui.QPainterPath?1() +QtGui.QPainterPath.__init__?1(self) +QtGui.QPainterPath?1(QPointF) +QtGui.QPainterPath.__init__?1(self, QPointF) +QtGui.QPainterPath?1(QPainterPath) +QtGui.QPainterPath.__init__?1(self, QPainterPath) +QtGui.QPainterPath.closeSubpath?4() +QtGui.QPainterPath.moveTo?4(QPointF) +QtGui.QPainterPath.lineTo?4(QPointF) +QtGui.QPainterPath.arcTo?4(QRectF, float, float) +QtGui.QPainterPath.cubicTo?4(QPointF, QPointF, QPointF) +QtGui.QPainterPath.quadTo?4(QPointF, QPointF) +QtGui.QPainterPath.currentPosition?4() -> QPointF +QtGui.QPainterPath.addRect?4(QRectF) +QtGui.QPainterPath.addEllipse?4(QRectF) +QtGui.QPainterPath.addPolygon?4(QPolygonF) +QtGui.QPainterPath.addText?4(QPointF, QFont, QString) +QtGui.QPainterPath.addPath?4(QPainterPath) +QtGui.QPainterPath.addRegion?4(QRegion) +QtGui.QPainterPath.connectPath?4(QPainterPath) +QtGui.QPainterPath.contains?4(QPointF) -> bool +QtGui.QPainterPath.contains?4(QRectF) -> bool +QtGui.QPainterPath.intersects?4(QRectF) -> bool +QtGui.QPainterPath.boundingRect?4() -> QRectF +QtGui.QPainterPath.controlPointRect?4() -> QRectF +QtGui.QPainterPath.fillRule?4() -> Qt.FillRule +QtGui.QPainterPath.setFillRule?4(Qt.FillRule) +QtGui.QPainterPath.toReversed?4() -> QPainterPath +QtGui.QPainterPath.toSubpathPolygons?4() -> unknown-type +QtGui.QPainterPath.toFillPolygons?4() -> unknown-type +QtGui.QPainterPath.toFillPolygon?4() -> QPolygonF +QtGui.QPainterPath.moveTo?4(float, float) +QtGui.QPainterPath.arcMoveTo?4(QRectF, float) +QtGui.QPainterPath.arcMoveTo?4(float, float, float, float, float) +QtGui.QPainterPath.arcTo?4(float, float, float, float, float, float) +QtGui.QPainterPath.lineTo?4(float, float) +QtGui.QPainterPath.cubicTo?4(float, float, float, float, float, float) +QtGui.QPainterPath.quadTo?4(float, float, float, float) +QtGui.QPainterPath.addEllipse?4(float, float, float, float) +QtGui.QPainterPath.addRect?4(float, float, float, float) +QtGui.QPainterPath.addText?4(float, float, QFont, QString) +QtGui.QPainterPath.isEmpty?4() -> bool +QtGui.QPainterPath.elementCount?4() -> int +QtGui.QPainterPath.elementAt?4(int) -> QPainterPath.Element +QtGui.QPainterPath.setElementPositionAt?4(int, float, float) +QtGui.QPainterPath.toSubpathPolygons?4(QTransform) -> unknown-type +QtGui.QPainterPath.toFillPolygons?4(QTransform) -> unknown-type +QtGui.QPainterPath.toFillPolygon?4(QTransform) -> QPolygonF +QtGui.QPainterPath.length?4() -> float +QtGui.QPainterPath.percentAtLength?4(float) -> float +QtGui.QPainterPath.pointAtPercent?4(float) -> QPointF +QtGui.QPainterPath.angleAtPercent?4(float) -> float +QtGui.QPainterPath.slopeAtPercent?4(float) -> float +QtGui.QPainterPath.intersects?4(QPainterPath) -> bool +QtGui.QPainterPath.contains?4(QPainterPath) -> bool +QtGui.QPainterPath.united?4(QPainterPath) -> QPainterPath +QtGui.QPainterPath.intersected?4(QPainterPath) -> QPainterPath +QtGui.QPainterPath.subtracted?4(QPainterPath) -> QPainterPath +QtGui.QPainterPath.addRoundedRect?4(QRectF, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) +QtGui.QPainterPath.addRoundedRect?4(float, float, float, float, float, float, Qt.SizeMode mode=Qt.AbsoluteSize) +QtGui.QPainterPath.addEllipse?4(QPointF, float, float) +QtGui.QPainterPath.simplified?4() -> QPainterPath +QtGui.QPainterPath.translate?4(float, float) +QtGui.QPainterPath.translated?4(float, float) -> QPainterPath +QtGui.QPainterPath.translate?4(QPointF) +QtGui.QPainterPath.translated?4(QPointF) -> QPainterPath +QtGui.QPainterPath.swap?4(QPainterPath) +QtGui.QPainterPath.clear?4() +QtGui.QPainterPath.reserve?4(int) +QtGui.QPainterPath.capacity?4() -> int +QtGui.QPainterPath.Element.type?7 +QtGui.QPainterPath.Element.x?7 +QtGui.QPainterPath.Element.y?7 +QtGui.QPainterPath.Element?1() +QtGui.QPainterPath.Element.__init__?1(self) +QtGui.QPainterPath.Element?1(QPainterPath.Element) +QtGui.QPainterPath.Element.__init__?1(self, QPainterPath.Element) +QtGui.QPainterPath.Element.isMoveTo?4() -> bool +QtGui.QPainterPath.Element.isLineTo?4() -> bool +QtGui.QPainterPath.Element.isCurveTo?4() -> bool +QtGui.QPainterPathStroker?1() +QtGui.QPainterPathStroker.__init__?1(self) +QtGui.QPainterPathStroker?1(QPen) +QtGui.QPainterPathStroker.__init__?1(self, QPen) +QtGui.QPainterPathStroker.setWidth?4(float) +QtGui.QPainterPathStroker.width?4() -> float +QtGui.QPainterPathStroker.setCapStyle?4(Qt.PenCapStyle) +QtGui.QPainterPathStroker.capStyle?4() -> Qt.PenCapStyle +QtGui.QPainterPathStroker.setJoinStyle?4(Qt.PenJoinStyle) +QtGui.QPainterPathStroker.joinStyle?4() -> Qt.PenJoinStyle +QtGui.QPainterPathStroker.setMiterLimit?4(float) +QtGui.QPainterPathStroker.miterLimit?4() -> float +QtGui.QPainterPathStroker.setCurveThreshold?4(float) +QtGui.QPainterPathStroker.curveThreshold?4() -> float +QtGui.QPainterPathStroker.setDashPattern?4(Qt.PenStyle) +QtGui.QPainterPathStroker.setDashPattern?4(unknown-type) +QtGui.QPainterPathStroker.dashPattern?4() -> unknown-type +QtGui.QPainterPathStroker.createStroke?4(QPainterPath) -> QPainterPath +QtGui.QPainterPathStroker.setDashOffset?4(float) +QtGui.QPainterPathStroker.dashOffset?4() -> float +QtGui.QPalette.ColorRole?10 +QtGui.QPalette.ColorRole.WindowText?10 +QtGui.QPalette.ColorRole.Foreground?10 +QtGui.QPalette.ColorRole.Button?10 +QtGui.QPalette.ColorRole.Light?10 +QtGui.QPalette.ColorRole.Midlight?10 +QtGui.QPalette.ColorRole.Dark?10 +QtGui.QPalette.ColorRole.Mid?10 +QtGui.QPalette.ColorRole.Text?10 +QtGui.QPalette.ColorRole.BrightText?10 +QtGui.QPalette.ColorRole.ButtonText?10 +QtGui.QPalette.ColorRole.Base?10 +QtGui.QPalette.ColorRole.Window?10 +QtGui.QPalette.ColorRole.Background?10 +QtGui.QPalette.ColorRole.Shadow?10 +QtGui.QPalette.ColorRole.Highlight?10 +QtGui.QPalette.ColorRole.HighlightedText?10 +QtGui.QPalette.ColorRole.Link?10 +QtGui.QPalette.ColorRole.LinkVisited?10 +QtGui.QPalette.ColorRole.AlternateBase?10 +QtGui.QPalette.ColorRole.ToolTipBase?10 +QtGui.QPalette.ColorRole.ToolTipText?10 +QtGui.QPalette.ColorRole.PlaceholderText?10 +QtGui.QPalette.ColorRole.NoRole?10 +QtGui.QPalette.ColorRole.NColorRoles?10 +QtGui.QPalette.ColorGroup?10 +QtGui.QPalette.ColorGroup.Active?10 +QtGui.QPalette.ColorGroup.Disabled?10 +QtGui.QPalette.ColorGroup.Inactive?10 +QtGui.QPalette.ColorGroup.NColorGroups?10 +QtGui.QPalette.ColorGroup.Current?10 +QtGui.QPalette.ColorGroup.All?10 +QtGui.QPalette.ColorGroup.Normal?10 +QtGui.QPalette?1() +QtGui.QPalette.__init__?1(self) +QtGui.QPalette?1(QColor) +QtGui.QPalette.__init__?1(self, QColor) +QtGui.QPalette?1(Qt.GlobalColor) +QtGui.QPalette.__init__?1(self, Qt.GlobalColor) +QtGui.QPalette?1(QColor, QColor) +QtGui.QPalette.__init__?1(self, QColor, QColor) +QtGui.QPalette?1(QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush) +QtGui.QPalette.__init__?1(self, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush) +QtGui.QPalette?1(QPalette) +QtGui.QPalette.__init__?1(self, QPalette) +QtGui.QPalette?1(QVariant) +QtGui.QPalette.__init__?1(self, QVariant) +QtGui.QPalette.currentColorGroup?4() -> QPalette.ColorGroup +QtGui.QPalette.setCurrentColorGroup?4(QPalette.ColorGroup) +QtGui.QPalette.color?4(QPalette.ColorGroup, QPalette.ColorRole) -> QColor +QtGui.QPalette.brush?4(QPalette.ColorGroup, QPalette.ColorRole) -> QBrush +QtGui.QPalette.setBrush?4(QPalette.ColorGroup, QPalette.ColorRole, QBrush) +QtGui.QPalette.setColorGroup?4(QPalette.ColorGroup, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush, QBrush) +QtGui.QPalette.isEqual?4(QPalette.ColorGroup, QPalette.ColorGroup) -> bool +QtGui.QPalette.color?4(QPalette.ColorRole) -> QColor +QtGui.QPalette.brush?4(QPalette.ColorRole) -> QBrush +QtGui.QPalette.windowText?4() -> QBrush +QtGui.QPalette.button?4() -> QBrush +QtGui.QPalette.light?4() -> QBrush +QtGui.QPalette.dark?4() -> QBrush +QtGui.QPalette.mid?4() -> QBrush +QtGui.QPalette.text?4() -> QBrush +QtGui.QPalette.base?4() -> QBrush +QtGui.QPalette.alternateBase?4() -> QBrush +QtGui.QPalette.window?4() -> QBrush +QtGui.QPalette.midlight?4() -> QBrush +QtGui.QPalette.brightText?4() -> QBrush +QtGui.QPalette.buttonText?4() -> QBrush +QtGui.QPalette.shadow?4() -> QBrush +QtGui.QPalette.highlight?4() -> QBrush +QtGui.QPalette.highlightedText?4() -> QBrush +QtGui.QPalette.link?4() -> QBrush +QtGui.QPalette.linkVisited?4() -> QBrush +QtGui.QPalette.toolTipBase?4() -> QBrush +QtGui.QPalette.toolTipText?4() -> QBrush +QtGui.QPalette.placeholderText?4() -> QBrush +QtGui.QPalette.isCopyOf?4(QPalette) -> bool +QtGui.QPalette.resolve?4(QPalette) -> QPalette +QtGui.QPalette.resolve?4() -> int +QtGui.QPalette.resolve?4(int) +QtGui.QPalette.setColor?4(QPalette.ColorGroup, QPalette.ColorRole, QColor) +QtGui.QPalette.setColor?4(QPalette.ColorRole, QColor) +QtGui.QPalette.setBrush?4(QPalette.ColorRole, QBrush) +QtGui.QPalette.isBrushSet?4(QPalette.ColorGroup, QPalette.ColorRole) -> bool +QtGui.QPalette.cacheKey?4() -> int +QtGui.QPalette.swap?4(QPalette) +QtGui.QPdfWriter?1(QString) +QtGui.QPdfWriter.__init__?1(self, QString) +QtGui.QPdfWriter?1(QIODevice) +QtGui.QPdfWriter.__init__?1(self, QIODevice) +QtGui.QPdfWriter.title?4() -> QString +QtGui.QPdfWriter.setTitle?4(QString) +QtGui.QPdfWriter.creator?4() -> QString +QtGui.QPdfWriter.setCreator?4(QString) +QtGui.QPdfWriter.newPage?4() -> bool +QtGui.QPdfWriter.setPageSize?4(QPagedPaintDevice.PageSize) +QtGui.QPdfWriter.setPageSize?4(QPageSize) -> bool +QtGui.QPdfWriter.setPageSizeMM?4(QSizeF) +QtGui.QPdfWriter.setMargins?4(QPagedPaintDevice.Margins) +QtGui.QPdfWriter.paintEngine?4() -> QPaintEngine +QtGui.QPdfWriter.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QPdfWriter.setResolution?4(int) +QtGui.QPdfWriter.resolution?4() -> int +QtGui.QPdfWriter.setPdfVersion?4(QPagedPaintDevice.PdfVersion) +QtGui.QPdfWriter.pdfVersion?4() -> QPagedPaintDevice.PdfVersion +QtGui.QPdfWriter.setDocumentXmpMetadata?4(QByteArray) +QtGui.QPdfWriter.documentXmpMetadata?4() -> QByteArray +QtGui.QPdfWriter.addFileAttachment?4(QString, QByteArray, QString mimeType='') +QtGui.QPen?1() +QtGui.QPen.__init__?1(self) +QtGui.QPen?1(Qt.PenStyle) +QtGui.QPen.__init__?1(self, Qt.PenStyle) +QtGui.QPen?1(QBrush, float, Qt.PenStyle style=Qt.SolidLine, Qt.PenCapStyle cap=Qt.SquareCap, Qt.PenJoinStyle join=Qt.BevelJoin) +QtGui.QPen.__init__?1(self, QBrush, float, Qt.PenStyle style=Qt.SolidLine, Qt.PenCapStyle cap=Qt.SquareCap, Qt.PenJoinStyle join=Qt.BevelJoin) +QtGui.QPen?1(QPen) +QtGui.QPen.__init__?1(self, QPen) +QtGui.QPen?1(QVariant) +QtGui.QPen.__init__?1(self, QVariant) +QtGui.QPen.style?4() -> Qt.PenStyle +QtGui.QPen.setStyle?4(Qt.PenStyle) +QtGui.QPen.widthF?4() -> float +QtGui.QPen.setWidthF?4(float) +QtGui.QPen.width?4() -> int +QtGui.QPen.setWidth?4(int) +QtGui.QPen.color?4() -> QColor +QtGui.QPen.setColor?4(QColor) +QtGui.QPen.brush?4() -> QBrush +QtGui.QPen.setBrush?4(QBrush) +QtGui.QPen.isSolid?4() -> bool +QtGui.QPen.capStyle?4() -> Qt.PenCapStyle +QtGui.QPen.setCapStyle?4(Qt.PenCapStyle) +QtGui.QPen.joinStyle?4() -> Qt.PenJoinStyle +QtGui.QPen.setJoinStyle?4(Qt.PenJoinStyle) +QtGui.QPen.dashPattern?4() -> unknown-type +QtGui.QPen.setDashPattern?4(unknown-type) +QtGui.QPen.miterLimit?4() -> float +QtGui.QPen.setMiterLimit?4(float) +QtGui.QPen.dashOffset?4() -> float +QtGui.QPen.setDashOffset?4(float) +QtGui.QPen.isCosmetic?4() -> bool +QtGui.QPen.setCosmetic?4(bool) +QtGui.QPen.swap?4(QPen) +QtGui.QPicture?1(int formatVersion=-1) +QtGui.QPicture.__init__?1(self, int formatVersion=-1) +QtGui.QPicture?1(QPicture) +QtGui.QPicture.__init__?1(self, QPicture) +QtGui.QPicture.isNull?4() -> bool +QtGui.QPicture.devType?4() -> int +QtGui.QPicture.size?4() -> int +QtGui.QPicture.data?4() -> bytes +QtGui.QPicture.setData?4(bytes) +QtGui.QPicture.play?4(QPainter) -> bool +QtGui.QPicture.load?4(QIODevice, str format=None) -> bool +QtGui.QPicture.load?4(QString, str format=None) -> bool +QtGui.QPicture.save?4(QIODevice, str format=None) -> bool +QtGui.QPicture.save?4(QString, str format=None) -> bool +QtGui.QPicture.boundingRect?4() -> QRect +QtGui.QPicture.setBoundingRect?4(QRect) +QtGui.QPicture.detach?4() +QtGui.QPicture.isDetached?4() -> bool +QtGui.QPicture.paintEngine?4() -> QPaintEngine +QtGui.QPicture.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QPicture.swap?4(QPicture) +QtGui.QPictureIO?1() +QtGui.QPictureIO.__init__?1(self) +QtGui.QPictureIO?1(QIODevice, str) +QtGui.QPictureIO.__init__?1(self, QIODevice, str) +QtGui.QPictureIO?1(QString, str) +QtGui.QPictureIO.__init__?1(self, QString, str) +QtGui.QPictureIO.picture?4() -> QPicture +QtGui.QPictureIO.status?4() -> int +QtGui.QPictureIO.format?4() -> str +QtGui.QPictureIO.ioDevice?4() -> QIODevice +QtGui.QPictureIO.fileName?4() -> QString +QtGui.QPictureIO.quality?4() -> int +QtGui.QPictureIO.description?4() -> QString +QtGui.QPictureIO.parameters?4() -> str +QtGui.QPictureIO.gamma?4() -> float +QtGui.QPictureIO.setPicture?4(QPicture) +QtGui.QPictureIO.setStatus?4(int) +QtGui.QPictureIO.setFormat?4(str) +QtGui.QPictureIO.setIODevice?4(QIODevice) +QtGui.QPictureIO.setFileName?4(QString) +QtGui.QPictureIO.setQuality?4(int) +QtGui.QPictureIO.setDescription?4(QString) +QtGui.QPictureIO.setParameters?4(str) +QtGui.QPictureIO.setGamma?4(float) +QtGui.QPictureIO.read?4() -> bool +QtGui.QPictureIO.write?4() -> bool +QtGui.QPictureIO.pictureFormat?4(QString) -> QByteArray +QtGui.QPictureIO.pictureFormat?4(QIODevice) -> QByteArray +QtGui.QPictureIO.inputFormats?4() -> unknown-type +QtGui.QPictureIO.outputFormats?4() -> unknown-type +QtGui.QPictureIO.defineIOHandler?4(str, str, str, Callable[..., None], Callable[..., None]) +QtGui.QPixelFormat.ByteOrder?10 +QtGui.QPixelFormat.ByteOrder.LittleEndian?10 +QtGui.QPixelFormat.ByteOrder.BigEndian?10 +QtGui.QPixelFormat.ByteOrder.CurrentSystemEndian?10 +QtGui.QPixelFormat.YUVLayout?10 +QtGui.QPixelFormat.YUVLayout.YUV444?10 +QtGui.QPixelFormat.YUVLayout.YUV422?10 +QtGui.QPixelFormat.YUVLayout.YUV411?10 +QtGui.QPixelFormat.YUVLayout.YUV420P?10 +QtGui.QPixelFormat.YUVLayout.YUV420SP?10 +QtGui.QPixelFormat.YUVLayout.YV12?10 +QtGui.QPixelFormat.YUVLayout.UYVY?10 +QtGui.QPixelFormat.YUVLayout.YUYV?10 +QtGui.QPixelFormat.YUVLayout.NV12?10 +QtGui.QPixelFormat.YUVLayout.NV21?10 +QtGui.QPixelFormat.YUVLayout.IMC1?10 +QtGui.QPixelFormat.YUVLayout.IMC2?10 +QtGui.QPixelFormat.YUVLayout.IMC3?10 +QtGui.QPixelFormat.YUVLayout.IMC4?10 +QtGui.QPixelFormat.YUVLayout.Y8?10 +QtGui.QPixelFormat.YUVLayout.Y16?10 +QtGui.QPixelFormat.TypeInterpretation?10 +QtGui.QPixelFormat.TypeInterpretation.UnsignedInteger?10 +QtGui.QPixelFormat.TypeInterpretation.UnsignedShort?10 +QtGui.QPixelFormat.TypeInterpretation.UnsignedByte?10 +QtGui.QPixelFormat.TypeInterpretation.FloatingPoint?10 +QtGui.QPixelFormat.AlphaPremultiplied?10 +QtGui.QPixelFormat.AlphaPremultiplied.NotPremultiplied?10 +QtGui.QPixelFormat.AlphaPremultiplied.Premultiplied?10 +QtGui.QPixelFormat.AlphaPosition?10 +QtGui.QPixelFormat.AlphaPosition.AtBeginning?10 +QtGui.QPixelFormat.AlphaPosition.AtEnd?10 +QtGui.QPixelFormat.AlphaUsage?10 +QtGui.QPixelFormat.AlphaUsage.UsesAlpha?10 +QtGui.QPixelFormat.AlphaUsage.IgnoresAlpha?10 +QtGui.QPixelFormat.ColorModel?10 +QtGui.QPixelFormat.ColorModel.RGB?10 +QtGui.QPixelFormat.ColorModel.BGR?10 +QtGui.QPixelFormat.ColorModel.Indexed?10 +QtGui.QPixelFormat.ColorModel.Grayscale?10 +QtGui.QPixelFormat.ColorModel.CMYK?10 +QtGui.QPixelFormat.ColorModel.HSL?10 +QtGui.QPixelFormat.ColorModel.HSV?10 +QtGui.QPixelFormat.ColorModel.YUV?10 +QtGui.QPixelFormat.ColorModel.Alpha?10 +QtGui.QPixelFormat?1() +QtGui.QPixelFormat.__init__?1(self) +QtGui.QPixelFormat?1(QPixelFormat.ColorModel, int, int, int, int, int, int, QPixelFormat.AlphaUsage, QPixelFormat.AlphaPosition, QPixelFormat.AlphaPremultiplied, QPixelFormat.TypeInterpretation, QPixelFormat.ByteOrder byteOrder=QPixelFormat.CurrentSystemEndian, int subEnum=0) +QtGui.QPixelFormat.__init__?1(self, QPixelFormat.ColorModel, int, int, int, int, int, int, QPixelFormat.AlphaUsage, QPixelFormat.AlphaPosition, QPixelFormat.AlphaPremultiplied, QPixelFormat.TypeInterpretation, QPixelFormat.ByteOrder byteOrder=QPixelFormat.CurrentSystemEndian, int subEnum=0) +QtGui.QPixelFormat?1(QPixelFormat) +QtGui.QPixelFormat.__init__?1(self, QPixelFormat) +QtGui.QPixelFormat.colorModel?4() -> QPixelFormat.ColorModel +QtGui.QPixelFormat.channelCount?4() -> int +QtGui.QPixelFormat.redSize?4() -> int +QtGui.QPixelFormat.greenSize?4() -> int +QtGui.QPixelFormat.blueSize?4() -> int +QtGui.QPixelFormat.cyanSize?4() -> int +QtGui.QPixelFormat.magentaSize?4() -> int +QtGui.QPixelFormat.yellowSize?4() -> int +QtGui.QPixelFormat.blackSize?4() -> int +QtGui.QPixelFormat.hueSize?4() -> int +QtGui.QPixelFormat.saturationSize?4() -> int +QtGui.QPixelFormat.lightnessSize?4() -> int +QtGui.QPixelFormat.brightnessSize?4() -> int +QtGui.QPixelFormat.alphaSize?4() -> int +QtGui.QPixelFormat.bitsPerPixel?4() -> int +QtGui.QPixelFormat.alphaUsage?4() -> QPixelFormat.AlphaUsage +QtGui.QPixelFormat.alphaPosition?4() -> QPixelFormat.AlphaPosition +QtGui.QPixelFormat.premultiplied?4() -> QPixelFormat.AlphaPremultiplied +QtGui.QPixelFormat.typeInterpretation?4() -> QPixelFormat.TypeInterpretation +QtGui.QPixelFormat.byteOrder?4() -> QPixelFormat.ByteOrder +QtGui.QPixelFormat.yuvLayout?4() -> QPixelFormat.YUVLayout +QtGui.QPixelFormat.subEnum?4() -> int +QtGui.QPixmapCache?1() +QtGui.QPixmapCache.__init__?1(self) +QtGui.QPixmapCache?1(QPixmapCache) +QtGui.QPixmapCache.__init__?1(self, QPixmapCache) +QtGui.QPixmapCache.cacheLimit?4() -> int +QtGui.QPixmapCache.clear?4() +QtGui.QPixmapCache.find?4(QString) -> QPixmap +QtGui.QPixmapCache.find?4(QPixmapCache.Key) -> QPixmap +QtGui.QPixmapCache.insert?4(QString, QPixmap) -> bool +QtGui.QPixmapCache.insert?4(QPixmap) -> QPixmapCache.Key +QtGui.QPixmapCache.remove?4(QString) +QtGui.QPixmapCache.remove?4(QPixmapCache.Key) +QtGui.QPixmapCache.replace?4(QPixmapCache.Key, QPixmap) -> bool +QtGui.QPixmapCache.setCacheLimit?4(int) +QtGui.QPixmapCache.Key?1() +QtGui.QPixmapCache.Key.__init__?1(self) +QtGui.QPixmapCache.Key?1(QPixmapCache.Key) +QtGui.QPixmapCache.Key.__init__?1(self, QPixmapCache.Key) +QtGui.QPixmapCache.Key.swap?4(QPixmapCache.Key) +QtGui.QPixmapCache.Key.isValid?4() -> bool +QtGui.QPolygon?1() +QtGui.QPolygon.__init__?1(self) +QtGui.QPolygon?1(QPolygon) +QtGui.QPolygon.__init__?1(self, QPolygon) +QtGui.QPolygon?1(List) +QtGui.QPolygon.__init__?1(self, List) +QtGui.QPolygon?1(unknown-type) +QtGui.QPolygon.__init__?1(self, unknown-type) +QtGui.QPolygon?1(QRect, bool closed=False) +QtGui.QPolygon.__init__?1(self, QRect, bool closed=False) +QtGui.QPolygon?1(int) +QtGui.QPolygon.__init__?1(self, int) +QtGui.QPolygon?1(QVariant) +QtGui.QPolygon.__init__?1(self, QVariant) +QtGui.QPolygon.translate?4(int, int) +QtGui.QPolygon.boundingRect?4() -> QRect +QtGui.QPolygon.point?4(int) -> QPoint +QtGui.QPolygon.setPoints?4(List) +QtGui.QPolygon.setPoints?4(int, int, Any) +QtGui.QPolygon.putPoints?4(int, int, int, Any) +QtGui.QPolygon.putPoints?4(int, int, QPolygon, int from=0) +QtGui.QPolygon.setPoint?4(int, QPoint) +QtGui.QPolygon.setPoint?4(int, int, int) +QtGui.QPolygon.translate?4(QPoint) +QtGui.QPolygon.containsPoint?4(QPoint, Qt.FillRule) -> bool +QtGui.QPolygon.united?4(QPolygon) -> QPolygon +QtGui.QPolygon.intersected?4(QPolygon) -> QPolygon +QtGui.QPolygon.subtracted?4(QPolygon) -> QPolygon +QtGui.QPolygon.translated?4(int, int) -> QPolygon +QtGui.QPolygon.translated?4(QPoint) -> QPolygon +QtGui.QPolygon.append?4(QPoint) +QtGui.QPolygon.at?4(int) -> QPoint +QtGui.QPolygon.clear?4() +QtGui.QPolygon.contains?4(QPoint) -> bool +QtGui.QPolygon.count?4(QPoint) -> int +QtGui.QPolygon.count?4() -> int +QtGui.QPolygon.data?4() -> PyQt5.sip.voidptr +QtGui.QPolygon.fill?4(QPoint, int size=-1) +QtGui.QPolygon.first?4() -> QPoint +QtGui.QPolygon.indexOf?4(QPoint, int from=0) -> int +QtGui.QPolygon.insert?4(int, QPoint) +QtGui.QPolygon.isEmpty?4() -> bool +QtGui.QPolygon.last?4() -> QPoint +QtGui.QPolygon.lastIndexOf?4(QPoint, int from=-1) -> int +QtGui.QPolygon.mid?4(int, int length=-1) -> QPolygon +QtGui.QPolygon.prepend?4(QPoint) +QtGui.QPolygon.remove?4(int) +QtGui.QPolygon.remove?4(int, int) +QtGui.QPolygon.replace?4(int, QPoint) +QtGui.QPolygon.size?4() -> int +QtGui.QPolygon.value?4(int) -> QPoint +QtGui.QPolygon.value?4(int, QPoint) -> QPoint +QtGui.QPolygon.swap?4(QPolygon) +QtGui.QPolygon.intersects?4(QPolygon) -> bool +QtGui.QPolygonF?1() +QtGui.QPolygonF.__init__?1(self) +QtGui.QPolygonF?1(QPolygonF) +QtGui.QPolygonF.__init__?1(self, QPolygonF) +QtGui.QPolygonF?1(unknown-type) +QtGui.QPolygonF.__init__?1(self, unknown-type) +QtGui.QPolygonF?1(QRectF) +QtGui.QPolygonF.__init__?1(self, QRectF) +QtGui.QPolygonF?1(QPolygon) +QtGui.QPolygonF.__init__?1(self, QPolygon) +QtGui.QPolygonF?1(int) +QtGui.QPolygonF.__init__?1(self, int) +QtGui.QPolygonF.translate?4(QPointF) +QtGui.QPolygonF.toPolygon?4() -> QPolygon +QtGui.QPolygonF.isClosed?4() -> bool +QtGui.QPolygonF.boundingRect?4() -> QRectF +QtGui.QPolygonF.translate?4(float, float) +QtGui.QPolygonF.containsPoint?4(QPointF, Qt.FillRule) -> bool +QtGui.QPolygonF.united?4(QPolygonF) -> QPolygonF +QtGui.QPolygonF.intersected?4(QPolygonF) -> QPolygonF +QtGui.QPolygonF.subtracted?4(QPolygonF) -> QPolygonF +QtGui.QPolygonF.translated?4(QPointF) -> QPolygonF +QtGui.QPolygonF.translated?4(float, float) -> QPolygonF +QtGui.QPolygonF.append?4(QPointF) +QtGui.QPolygonF.at?4(int) -> QPointF +QtGui.QPolygonF.clear?4() +QtGui.QPolygonF.contains?4(QPointF) -> bool +QtGui.QPolygonF.count?4(QPointF) -> int +QtGui.QPolygonF.count?4() -> int +QtGui.QPolygonF.data?4() -> PyQt5.sip.voidptr +QtGui.QPolygonF.fill?4(QPointF, int size=-1) +QtGui.QPolygonF.first?4() -> QPointF +QtGui.QPolygonF.indexOf?4(QPointF, int from=0) -> int +QtGui.QPolygonF.insert?4(int, QPointF) +QtGui.QPolygonF.isEmpty?4() -> bool +QtGui.QPolygonF.last?4() -> QPointF +QtGui.QPolygonF.lastIndexOf?4(QPointF, int from=-1) -> int +QtGui.QPolygonF.mid?4(int, int length=-1) -> QPolygonF +QtGui.QPolygonF.prepend?4(QPointF) +QtGui.QPolygonF.remove?4(int) +QtGui.QPolygonF.remove?4(int, int) +QtGui.QPolygonF.replace?4(int, QPointF) +QtGui.QPolygonF.size?4() -> int +QtGui.QPolygonF.value?4(int) -> QPointF +QtGui.QPolygonF.value?4(int, QPointF) -> QPointF +QtGui.QPolygonF.swap?4(QPolygonF) +QtGui.QPolygonF.intersects?4(QPolygonF) -> bool +QtGui.QQuaternion?1() +QtGui.QQuaternion.__init__?1(self) +QtGui.QQuaternion?1(float, float, float, float) +QtGui.QQuaternion.__init__?1(self, float, float, float, float) +QtGui.QQuaternion?1(float, QVector3D) +QtGui.QQuaternion.__init__?1(self, float, QVector3D) +QtGui.QQuaternion?1(QVector4D) +QtGui.QQuaternion.__init__?1(self, QVector4D) +QtGui.QQuaternion?1(QQuaternion) +QtGui.QQuaternion.__init__?1(self, QQuaternion) +QtGui.QQuaternion.length?4() -> float +QtGui.QQuaternion.lengthSquared?4() -> float +QtGui.QQuaternion.normalized?4() -> QQuaternion +QtGui.QQuaternion.normalize?4() +QtGui.QQuaternion.rotatedVector?4(QVector3D) -> QVector3D +QtGui.QQuaternion.fromAxisAndAngle?4(QVector3D, float) -> QQuaternion +QtGui.QQuaternion.fromAxisAndAngle?4(float, float, float, float) -> QQuaternion +QtGui.QQuaternion.slerp?4(QQuaternion, QQuaternion, float) -> QQuaternion +QtGui.QQuaternion.nlerp?4(QQuaternion, QQuaternion, float) -> QQuaternion +QtGui.QQuaternion.isNull?4() -> bool +QtGui.QQuaternion.isIdentity?4() -> bool +QtGui.QQuaternion.x?4() -> float +QtGui.QQuaternion.y?4() -> float +QtGui.QQuaternion.z?4() -> float +QtGui.QQuaternion.scalar?4() -> float +QtGui.QQuaternion.setX?4(float) +QtGui.QQuaternion.setY?4(float) +QtGui.QQuaternion.setZ?4(float) +QtGui.QQuaternion.setScalar?4(float) +QtGui.QQuaternion.conjugate?4() -> QQuaternion +QtGui.QQuaternion.setVector?4(QVector3D) +QtGui.QQuaternion.vector?4() -> QVector3D +QtGui.QQuaternion.setVector?4(float, float, float) +QtGui.QQuaternion.toVector4D?4() -> QVector4D +QtGui.QQuaternion.getAxisAndAngle?4() -> (QVector3D, float) +QtGui.QQuaternion.getEulerAngles?4() -> (float, float, float) +QtGui.QQuaternion.fromEulerAngles?4(float, float, float) -> QQuaternion +QtGui.QQuaternion.toRotationMatrix?4() -> QMatrix3x3 +QtGui.QQuaternion.fromRotationMatrix?4(QMatrix3x3) -> QQuaternion +QtGui.QQuaternion.getAxes?4() -> (QVector3D, QVector3D, QVector3D) +QtGui.QQuaternion.fromAxes?4(QVector3D, QVector3D, QVector3D) -> QQuaternion +QtGui.QQuaternion.fromDirection?4(QVector3D, QVector3D) -> QQuaternion +QtGui.QQuaternion.rotationTo?4(QVector3D, QVector3D) -> QQuaternion +QtGui.QQuaternion.dotProduct?4(QQuaternion, QQuaternion) -> float +QtGui.QQuaternion.inverted?4() -> QQuaternion +QtGui.QQuaternion.conjugated?4() -> QQuaternion +QtGui.QQuaternion.toEulerAngles?4() -> QVector3D +QtGui.QQuaternion.fromEulerAngles?4(QVector3D) -> QQuaternion +QtGui.QRasterWindow?1(QWindow parent=None) +QtGui.QRasterWindow.__init__?1(self, QWindow parent=None) +QtGui.QRasterWindow.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtGui.QRawFont.LayoutFlag?10 +QtGui.QRawFont.LayoutFlag.SeparateAdvances?10 +QtGui.QRawFont.LayoutFlag.KernedAdvances?10 +QtGui.QRawFont.LayoutFlag.UseDesignMetrics?10 +QtGui.QRawFont.AntialiasingType?10 +QtGui.QRawFont.AntialiasingType.PixelAntialiasing?10 +QtGui.QRawFont.AntialiasingType.SubPixelAntialiasing?10 +QtGui.QRawFont?1() +QtGui.QRawFont.__init__?1(self) +QtGui.QRawFont?1(QString, float, QFont.HintingPreference hintingPreference=QFont.PreferDefaultHinting) +QtGui.QRawFont.__init__?1(self, QString, float, QFont.HintingPreference hintingPreference=QFont.PreferDefaultHinting) +QtGui.QRawFont?1(QByteArray, float, QFont.HintingPreference hintingPreference=QFont.PreferDefaultHinting) +QtGui.QRawFont.__init__?1(self, QByteArray, float, QFont.HintingPreference hintingPreference=QFont.PreferDefaultHinting) +QtGui.QRawFont?1(QRawFont) +QtGui.QRawFont.__init__?1(self, QRawFont) +QtGui.QRawFont.isValid?4() -> bool +QtGui.QRawFont.familyName?4() -> QString +QtGui.QRawFont.styleName?4() -> QString +QtGui.QRawFont.style?4() -> QFont.Style +QtGui.QRawFont.weight?4() -> int +QtGui.QRawFont.glyphIndexesForString?4(QString) -> unknown-type +QtGui.QRawFont.advancesForGlyphIndexes?4(unknown-type) -> unknown-type +QtGui.QRawFont.advancesForGlyphIndexes?4(unknown-type, QRawFont.LayoutFlags) -> unknown-type +QtGui.QRawFont.alphaMapForGlyph?4(int, QRawFont.AntialiasingType antialiasingType=QRawFont.SubPixelAntialiasing, QTransform transform=QTransform()) -> QImage +QtGui.QRawFont.pathForGlyph?4(int) -> QPainterPath +QtGui.QRawFont.setPixelSize?4(float) +QtGui.QRawFont.pixelSize?4() -> float +QtGui.QRawFont.hintingPreference?4() -> QFont.HintingPreference +QtGui.QRawFont.ascent?4() -> float +QtGui.QRawFont.descent?4() -> float +QtGui.QRawFont.leading?4() -> float +QtGui.QRawFont.xHeight?4() -> float +QtGui.QRawFont.averageCharWidth?4() -> float +QtGui.QRawFont.maxCharWidth?4() -> float +QtGui.QRawFont.unitsPerEm?4() -> float +QtGui.QRawFont.loadFromFile?4(QString, float, QFont.HintingPreference) +QtGui.QRawFont.loadFromData?4(QByteArray, float, QFont.HintingPreference) +QtGui.QRawFont.supportsCharacter?4(int) -> bool +QtGui.QRawFont.supportsCharacter?4(QChar) -> bool +QtGui.QRawFont.supportedWritingSystems?4() -> unknown-type +QtGui.QRawFont.fontTable?4(str) -> QByteArray +QtGui.QRawFont.fromFont?4(QFont, QFontDatabase.WritingSystem writingSystem=QFontDatabase.Any) -> QRawFont +QtGui.QRawFont.boundingRect?4(int) -> QRectF +QtGui.QRawFont.lineThickness?4() -> float +QtGui.QRawFont.underlinePosition?4() -> float +QtGui.QRawFont.swap?4(QRawFont) +QtGui.QRawFont.capHeight?4() -> float +QtGui.QRawFont.LayoutFlags?1() +QtGui.QRawFont.LayoutFlags.__init__?1(self) +QtGui.QRawFont.LayoutFlags?1(int) +QtGui.QRawFont.LayoutFlags.__init__?1(self, int) +QtGui.QRawFont.LayoutFlags?1(QRawFont.LayoutFlags) +QtGui.QRawFont.LayoutFlags.__init__?1(self, QRawFont.LayoutFlags) +QtGui.QRegion.RegionType?10 +QtGui.QRegion.RegionType.Rectangle?10 +QtGui.QRegion.RegionType.Ellipse?10 +QtGui.QRegion?1() +QtGui.QRegion.__init__?1(self) +QtGui.QRegion?1(int, int, int, int, QRegion.RegionType type=QRegion.Rectangle) +QtGui.QRegion.__init__?1(self, int, int, int, int, QRegion.RegionType type=QRegion.Rectangle) +QtGui.QRegion?1(QRect, QRegion.RegionType type=QRegion.Rectangle) +QtGui.QRegion.__init__?1(self, QRect, QRegion.RegionType type=QRegion.Rectangle) +QtGui.QRegion?1(QPolygon, Qt.FillRule fillRule=Qt.OddEvenFill) +QtGui.QRegion.__init__?1(self, QPolygon, Qt.FillRule fillRule=Qt.OddEvenFill) +QtGui.QRegion?1(QBitmap) +QtGui.QRegion.__init__?1(self, QBitmap) +QtGui.QRegion?1(QRegion) +QtGui.QRegion.__init__?1(self, QRegion) +QtGui.QRegion?1(QVariant) +QtGui.QRegion.__init__?1(self, QVariant) +QtGui.QRegion.isEmpty?4() -> bool +QtGui.QRegion.contains?4(QPoint) -> bool +QtGui.QRegion.contains?4(QRect) -> bool +QtGui.QRegion.translate?4(int, int) +QtGui.QRegion.translate?4(QPoint) +QtGui.QRegion.translated?4(int, int) -> QRegion +QtGui.QRegion.translated?4(QPoint) -> QRegion +QtGui.QRegion.united?4(QRegion) -> QRegion +QtGui.QRegion.united?4(QRect) -> QRegion +QtGui.QRegion.boundingRect?4() -> QRect +QtGui.QRegion.rects?4() -> unknown-type +QtGui.QRegion.setRects?4(unknown-type) +QtGui.QRegion.intersected?4(QRegion) -> QRegion +QtGui.QRegion.intersected?4(QRect) -> QRegion +QtGui.QRegion.subtracted?4(QRegion) -> QRegion +QtGui.QRegion.xored?4(QRegion) -> QRegion +QtGui.QRegion.intersects?4(QRegion) -> bool +QtGui.QRegion.intersects?4(QRect) -> bool +QtGui.QRegion.rectCount?4() -> int +QtGui.QRegion.swap?4(QRegion) +QtGui.QRegion.isNull?4() -> bool +QtGui.QRgba64?1() +QtGui.QRgba64.__init__?1(self) +QtGui.QRgba64?1(QRgba64) +QtGui.QRgba64.__init__?1(self, QRgba64) +QtGui.QRgba64.fromRgba64?4(int) -> QRgba64 +QtGui.QRgba64.fromRgba64?4(int, int, int, int) -> QRgba64 +QtGui.QRgba64.fromRgba?4(int, int, int, int) -> QRgba64 +QtGui.QRgba64.fromArgb32?4(int) -> QRgba64 +QtGui.QRgba64.isOpaque?4() -> bool +QtGui.QRgba64.isTransparent?4() -> bool +QtGui.QRgba64.red?4() -> int +QtGui.QRgba64.green?4() -> int +QtGui.QRgba64.blue?4() -> int +QtGui.QRgba64.alpha?4() -> int +QtGui.QRgba64.setRed?4(int) +QtGui.QRgba64.setGreen?4(int) +QtGui.QRgba64.setBlue?4(int) +QtGui.QRgba64.setAlpha?4(int) +QtGui.QRgba64.red8?4() -> int +QtGui.QRgba64.green8?4() -> int +QtGui.QRgba64.blue8?4() -> int +QtGui.QRgba64.alpha8?4() -> int +QtGui.QRgba64.toArgb32?4() -> int +QtGui.QRgba64.toRgb16?4() -> int +QtGui.QRgba64.premultiplied?4() -> QRgba64 +QtGui.QRgba64.unpremultiplied?4() -> QRgba64 +QtGui.QScreen.name?4() -> QString +QtGui.QScreen.depth?4() -> int +QtGui.QScreen.size?4() -> QSize +QtGui.QScreen.geometry?4() -> QRect +QtGui.QScreen.physicalSize?4() -> QSizeF +QtGui.QScreen.physicalDotsPerInchX?4() -> float +QtGui.QScreen.physicalDotsPerInchY?4() -> float +QtGui.QScreen.physicalDotsPerInch?4() -> float +QtGui.QScreen.logicalDotsPerInchX?4() -> float +QtGui.QScreen.logicalDotsPerInchY?4() -> float +QtGui.QScreen.logicalDotsPerInch?4() -> float +QtGui.QScreen.availableSize?4() -> QSize +QtGui.QScreen.availableGeometry?4() -> QRect +QtGui.QScreen.virtualSiblings?4() -> unknown-type +QtGui.QScreen.virtualSize?4() -> QSize +QtGui.QScreen.virtualGeometry?4() -> QRect +QtGui.QScreen.availableVirtualSize?4() -> QSize +QtGui.QScreen.availableVirtualGeometry?4() -> QRect +QtGui.QScreen.nativeOrientation?4() -> Qt.ScreenOrientation +QtGui.QScreen.primaryOrientation?4() -> Qt.ScreenOrientation +QtGui.QScreen.orientation?4() -> Qt.ScreenOrientation +QtGui.QScreen.orientationUpdateMask?4() -> Qt.ScreenOrientations +QtGui.QScreen.setOrientationUpdateMask?4(Qt.ScreenOrientations) +QtGui.QScreen.angleBetween?4(Qt.ScreenOrientation, Qt.ScreenOrientation) -> int +QtGui.QScreen.transformBetween?4(Qt.ScreenOrientation, Qt.ScreenOrientation, QRect) -> QTransform +QtGui.QScreen.mapBetween?4(Qt.ScreenOrientation, Qt.ScreenOrientation, QRect) -> QRect +QtGui.QScreen.isPortrait?4(Qt.ScreenOrientation) -> bool +QtGui.QScreen.isLandscape?4(Qt.ScreenOrientation) -> bool +QtGui.QScreen.grabWindow?4(quintptr, int x=0, int y=0, int width=-1, int height=-1) -> QPixmap +QtGui.QScreen.refreshRate?4() -> float +QtGui.QScreen.devicePixelRatio?4() -> float +QtGui.QScreen.geometryChanged?4(QRect) +QtGui.QScreen.physicalDotsPerInchChanged?4(float) +QtGui.QScreen.logicalDotsPerInchChanged?4(float) +QtGui.QScreen.primaryOrientationChanged?4(Qt.ScreenOrientation) +QtGui.QScreen.orientationChanged?4(Qt.ScreenOrientation) +QtGui.QScreen.refreshRateChanged?4(float) +QtGui.QScreen.physicalSizeChanged?4(QSizeF) +QtGui.QScreen.virtualGeometryChanged?4(QRect) +QtGui.QScreen.availableGeometryChanged?4(QRect) +QtGui.QScreen.manufacturer?4() -> QString +QtGui.QScreen.model?4() -> QString +QtGui.QScreen.serialNumber?4() -> QString +QtGui.QScreen.virtualSiblingAt?4(QPoint) -> QScreen +QtGui.QSessionManager.RestartHint?10 +QtGui.QSessionManager.RestartHint.RestartIfRunning?10 +QtGui.QSessionManager.RestartHint.RestartAnyway?10 +QtGui.QSessionManager.RestartHint.RestartImmediately?10 +QtGui.QSessionManager.RestartHint.RestartNever?10 +QtGui.QSessionManager.sessionId?4() -> QString +QtGui.QSessionManager.sessionKey?4() -> QString +QtGui.QSessionManager.allowsInteraction?4() -> bool +QtGui.QSessionManager.allowsErrorInteraction?4() -> bool +QtGui.QSessionManager.release?4() +QtGui.QSessionManager.cancel?4() +QtGui.QSessionManager.setRestartHint?4(QSessionManager.RestartHint) +QtGui.QSessionManager.restartHint?4() -> QSessionManager.RestartHint +QtGui.QSessionManager.setRestartCommand?4(QStringList) +QtGui.QSessionManager.restartCommand?4() -> QStringList +QtGui.QSessionManager.setDiscardCommand?4(QStringList) +QtGui.QSessionManager.discardCommand?4() -> QStringList +QtGui.QSessionManager.setManagerProperty?4(QString, QString) +QtGui.QSessionManager.setManagerProperty?4(QString, QStringList) +QtGui.QSessionManager.isPhase2?4() -> bool +QtGui.QSessionManager.requestPhase2?4() +QtGui.QStandardItemModel?1(QObject parent=None) +QtGui.QStandardItemModel.__init__?1(self, QObject parent=None) +QtGui.QStandardItemModel?1(int, int, QObject parent=None) +QtGui.QStandardItemModel.__init__?1(self, int, int, QObject parent=None) +QtGui.QStandardItemModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtGui.QStandardItemModel.parent?4(QModelIndex) -> QModelIndex +QtGui.QStandardItemModel.parent?4() -> QObject +QtGui.QStandardItemModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtGui.QStandardItemModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtGui.QStandardItemModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool +QtGui.QStandardItemModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant +QtGui.QStandardItemModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool +QtGui.QStandardItemModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant +QtGui.QStandardItemModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool +QtGui.QStandardItemModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtGui.QStandardItemModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtGui.QStandardItemModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtGui.QStandardItemModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtGui.QStandardItemModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtGui.QStandardItemModel.clear?4() +QtGui.QStandardItemModel.supportedDropActions?4() -> Qt.DropActions +QtGui.QStandardItemModel.itemData?4(QModelIndex) -> unknown-type +QtGui.QStandardItemModel.setItemData?4(QModelIndex, unknown-type) -> bool +QtGui.QStandardItemModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtGui.QStandardItemModel.itemFromIndex?4(QModelIndex) -> QStandardItem +QtGui.QStandardItemModel.indexFromItem?4(QStandardItem) -> QModelIndex +QtGui.QStandardItemModel.item?4(int, int column=0) -> QStandardItem +QtGui.QStandardItemModel.setItem?4(int, int, QStandardItem) +QtGui.QStandardItemModel.setItem?4(int, QStandardItem) +QtGui.QStandardItemModel.invisibleRootItem?4() -> QStandardItem +QtGui.QStandardItemModel.horizontalHeaderItem?4(int) -> QStandardItem +QtGui.QStandardItemModel.setHorizontalHeaderItem?4(int, QStandardItem) +QtGui.QStandardItemModel.verticalHeaderItem?4(int) -> QStandardItem +QtGui.QStandardItemModel.setVerticalHeaderItem?4(int, QStandardItem) +QtGui.QStandardItemModel.setHorizontalHeaderLabels?4(QStringList) +QtGui.QStandardItemModel.setVerticalHeaderLabels?4(QStringList) +QtGui.QStandardItemModel.setRowCount?4(int) +QtGui.QStandardItemModel.setColumnCount?4(int) +QtGui.QStandardItemModel.appendRow?4(unknown-type) +QtGui.QStandardItemModel.appendColumn?4(unknown-type) +QtGui.QStandardItemModel.insertRow?4(int, unknown-type) +QtGui.QStandardItemModel.insertColumn?4(int, unknown-type) +QtGui.QStandardItemModel.takeItem?4(int, int column=0) -> QStandardItem +QtGui.QStandardItemModel.takeRow?4(int) -> unknown-type +QtGui.QStandardItemModel.takeColumn?4(int) -> unknown-type +QtGui.QStandardItemModel.takeHorizontalHeaderItem?4(int) -> QStandardItem +QtGui.QStandardItemModel.takeVerticalHeaderItem?4(int) -> QStandardItem +QtGui.QStandardItemModel.itemPrototype?4() -> QStandardItem +QtGui.QStandardItemModel.setItemPrototype?4(QStandardItem) +QtGui.QStandardItemModel.findItems?4(QString, Qt.MatchFlags flags=Qt.MatchExactly, int column=0) -> unknown-type +QtGui.QStandardItemModel.sortRole?4() -> int +QtGui.QStandardItemModel.setSortRole?4(int) +QtGui.QStandardItemModel.appendRow?4(QStandardItem) +QtGui.QStandardItemModel.insertRow?4(int, QStandardItem) +QtGui.QStandardItemModel.insertRow?4(int, QModelIndex parent=QModelIndex()) -> bool +QtGui.QStandardItemModel.insertColumn?4(int, QModelIndex parent=QModelIndex()) -> bool +QtGui.QStandardItemModel.mimeTypes?4() -> QStringList +QtGui.QStandardItemModel.mimeData?4(unknown-type) -> QMimeData +QtGui.QStandardItemModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtGui.QStandardItemModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtGui.QStandardItemModel.setItemRoleNames?4(unknown-type) +QtGui.QStandardItemModel.itemChanged?4(QStandardItem) +QtGui.QStandardItemModel.clearItemData?4(QModelIndex) -> bool +QtGui.QStandardItem.ItemType?10 +QtGui.QStandardItem.ItemType.Type?10 +QtGui.QStandardItem.ItemType.UserType?10 +QtGui.QStandardItem?1() +QtGui.QStandardItem.__init__?1(self) +QtGui.QStandardItem?1(QString) +QtGui.QStandardItem.__init__?1(self, QString) +QtGui.QStandardItem?1(QIcon, QString) +QtGui.QStandardItem.__init__?1(self, QIcon, QString) +QtGui.QStandardItem?1(int, int columns=1) +QtGui.QStandardItem.__init__?1(self, int, int columns=1) +QtGui.QStandardItem?1(QStandardItem) +QtGui.QStandardItem.__init__?1(self, QStandardItem) +QtGui.QStandardItem.data?4(int role=Qt.UserRole+1) -> QVariant +QtGui.QStandardItem.setData?4(QVariant, int role=Qt.UserRole+1) +QtGui.QStandardItem.text?4() -> QString +QtGui.QStandardItem.icon?4() -> QIcon +QtGui.QStandardItem.toolTip?4() -> QString +QtGui.QStandardItem.statusTip?4() -> QString +QtGui.QStandardItem.whatsThis?4() -> QString +QtGui.QStandardItem.sizeHint?4() -> QSize +QtGui.QStandardItem.font?4() -> QFont +QtGui.QStandardItem.textAlignment?4() -> Qt.Alignment +QtGui.QStandardItem.background?4() -> QBrush +QtGui.QStandardItem.foreground?4() -> QBrush +QtGui.QStandardItem.checkState?4() -> Qt.CheckState +QtGui.QStandardItem.accessibleText?4() -> QString +QtGui.QStandardItem.accessibleDescription?4() -> QString +QtGui.QStandardItem.flags?4() -> Qt.ItemFlags +QtGui.QStandardItem.setFlags?4(Qt.ItemFlags) +QtGui.QStandardItem.isEnabled?4() -> bool +QtGui.QStandardItem.setEnabled?4(bool) +QtGui.QStandardItem.isEditable?4() -> bool +QtGui.QStandardItem.setEditable?4(bool) +QtGui.QStandardItem.isSelectable?4() -> bool +QtGui.QStandardItem.setSelectable?4(bool) +QtGui.QStandardItem.isCheckable?4() -> bool +QtGui.QStandardItem.setCheckable?4(bool) +QtGui.QStandardItem.isTristate?4() -> bool +QtGui.QStandardItem.setTristate?4(bool) +QtGui.QStandardItem.isDragEnabled?4() -> bool +QtGui.QStandardItem.setDragEnabled?4(bool) +QtGui.QStandardItem.isDropEnabled?4() -> bool +QtGui.QStandardItem.setDropEnabled?4(bool) +QtGui.QStandardItem.parent?4() -> QStandardItem +QtGui.QStandardItem.row?4() -> int +QtGui.QStandardItem.column?4() -> int +QtGui.QStandardItem.index?4() -> QModelIndex +QtGui.QStandardItem.model?4() -> QStandardItemModel +QtGui.QStandardItem.rowCount?4() -> int +QtGui.QStandardItem.setRowCount?4(int) +QtGui.QStandardItem.columnCount?4() -> int +QtGui.QStandardItem.setColumnCount?4(int) +QtGui.QStandardItem.hasChildren?4() -> bool +QtGui.QStandardItem.child?4(int, int column=0) -> QStandardItem +QtGui.QStandardItem.setChild?4(int, int, QStandardItem) +QtGui.QStandardItem.setChild?4(int, QStandardItem) +QtGui.QStandardItem.insertRow?4(int, unknown-type) +QtGui.QStandardItem.insertRow?4(int, QStandardItem) +QtGui.QStandardItem.insertRows?4(int, int) +QtGui.QStandardItem.insertColumn?4(int, unknown-type) +QtGui.QStandardItem.insertColumns?4(int, int) +QtGui.QStandardItem.removeRow?4(int) +QtGui.QStandardItem.removeColumn?4(int) +QtGui.QStandardItem.removeRows?4(int, int) +QtGui.QStandardItem.removeColumns?4(int, int) +QtGui.QStandardItem.takeChild?4(int, int column=0) -> QStandardItem +QtGui.QStandardItem.takeRow?4(int) -> unknown-type +QtGui.QStandardItem.takeColumn?4(int) -> unknown-type +QtGui.QStandardItem.sortChildren?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtGui.QStandardItem.clone?4() -> QStandardItem +QtGui.QStandardItem.type?4() -> int +QtGui.QStandardItem.read?4(QDataStream) +QtGui.QStandardItem.write?4(QDataStream) +QtGui.QStandardItem.setText?4(QString) +QtGui.QStandardItem.setIcon?4(QIcon) +QtGui.QStandardItem.setToolTip?4(QString) +QtGui.QStandardItem.setStatusTip?4(QString) +QtGui.QStandardItem.setWhatsThis?4(QString) +QtGui.QStandardItem.setSizeHint?4(QSize) +QtGui.QStandardItem.setFont?4(QFont) +QtGui.QStandardItem.setTextAlignment?4(Qt.Alignment) +QtGui.QStandardItem.setBackground?4(QBrush) +QtGui.QStandardItem.setForeground?4(QBrush) +QtGui.QStandardItem.setCheckState?4(Qt.CheckState) +QtGui.QStandardItem.setAccessibleText?4(QString) +QtGui.QStandardItem.setAccessibleDescription?4(QString) +QtGui.QStandardItem.appendRow?4(unknown-type) +QtGui.QStandardItem.appendRow?4(QStandardItem) +QtGui.QStandardItem.appendColumn?4(unknown-type) +QtGui.QStandardItem.insertRows?4(int, unknown-type) +QtGui.QStandardItem.appendRows?4(unknown-type) +QtGui.QStandardItem.emitDataChanged?4() +QtGui.QStandardItem.isAutoTristate?4() -> bool +QtGui.QStandardItem.setAutoTristate?4(bool) +QtGui.QStandardItem.isUserTristate?4() -> bool +QtGui.QStandardItem.setUserTristate?4(bool) +QtGui.QStandardItem.clearData?4() +QtGui.QStaticText.PerformanceHint?10 +QtGui.QStaticText.PerformanceHint.ModerateCaching?10 +QtGui.QStaticText.PerformanceHint.AggressiveCaching?10 +QtGui.QStaticText?1() +QtGui.QStaticText.__init__?1(self) +QtGui.QStaticText?1(QString) +QtGui.QStaticText.__init__?1(self, QString) +QtGui.QStaticText?1(QStaticText) +QtGui.QStaticText.__init__?1(self, QStaticText) +QtGui.QStaticText.setText?4(QString) +QtGui.QStaticText.text?4() -> QString +QtGui.QStaticText.setTextFormat?4(Qt.TextFormat) +QtGui.QStaticText.textFormat?4() -> Qt.TextFormat +QtGui.QStaticText.setTextWidth?4(float) +QtGui.QStaticText.textWidth?4() -> float +QtGui.QStaticText.setTextOption?4(QTextOption) +QtGui.QStaticText.textOption?4() -> QTextOption +QtGui.QStaticText.size?4() -> QSizeF +QtGui.QStaticText.prepare?4(QTransform matrix=QTransform(), QFont font=QFont()) +QtGui.QStaticText.setPerformanceHint?4(QStaticText.PerformanceHint) +QtGui.QStaticText.performanceHint?4() -> QStaticText.PerformanceHint +QtGui.QStaticText.swap?4(QStaticText) +QtGui.QStyleHints.mouseDoubleClickInterval?4() -> int +QtGui.QStyleHints.startDragDistance?4() -> int +QtGui.QStyleHints.startDragTime?4() -> int +QtGui.QStyleHints.startDragVelocity?4() -> int +QtGui.QStyleHints.keyboardInputInterval?4() -> int +QtGui.QStyleHints.keyboardAutoRepeatRate?4() -> int +QtGui.QStyleHints.cursorFlashTime?4() -> int +QtGui.QStyleHints.showIsFullScreen?4() -> bool +QtGui.QStyleHints.passwordMaskDelay?4() -> int +QtGui.QStyleHints.fontSmoothingGamma?4() -> float +QtGui.QStyleHints.useRtlExtensions?4() -> bool +QtGui.QStyleHints.passwordMaskCharacter?4() -> QChar +QtGui.QStyleHints.setFocusOnTouchRelease?4() -> bool +QtGui.QStyleHints.mousePressAndHoldInterval?4() -> int +QtGui.QStyleHints.tabFocusBehavior?4() -> Qt.TabFocusBehavior +QtGui.QStyleHints.singleClickActivation?4() -> bool +QtGui.QStyleHints.cursorFlashTimeChanged?4(int) +QtGui.QStyleHints.keyboardInputIntervalChanged?4(int) +QtGui.QStyleHints.mouseDoubleClickIntervalChanged?4(int) +QtGui.QStyleHints.startDragDistanceChanged?4(int) +QtGui.QStyleHints.startDragTimeChanged?4(int) +QtGui.QStyleHints.mousePressAndHoldIntervalChanged?4(int) +QtGui.QStyleHints.tabFocusBehaviorChanged?4(Qt.TabFocusBehavior) +QtGui.QStyleHints.showIsMaximized?4() -> bool +QtGui.QStyleHints.useHoverEffects?4() -> bool +QtGui.QStyleHints.setUseHoverEffects?4(bool) +QtGui.QStyleHints.useHoverEffectsChanged?4(bool) +QtGui.QStyleHints.wheelScrollLines?4() -> int +QtGui.QStyleHints.wheelScrollLinesChanged?4(int) +QtGui.QStyleHints.showShortcutsInContextMenus?4() -> bool +QtGui.QStyleHints.mouseQuickSelectionThreshold?4() -> int +QtGui.QStyleHints.mouseQuickSelectionThresholdChanged?4(int) +QtGui.QStyleHints.setShowShortcutsInContextMenus?4(bool) +QtGui.QStyleHints.showShortcutsInContextMenusChanged?4(bool) +QtGui.QStyleHints.mouseDoubleClickDistance?4() -> int +QtGui.QStyleHints.touchDoubleTapDistance?4() -> int +QtGui.QSurfaceFormat.ColorSpace?10 +QtGui.QSurfaceFormat.ColorSpace.DefaultColorSpace?10 +QtGui.QSurfaceFormat.ColorSpace.sRGBColorSpace?10 +QtGui.QSurfaceFormat.OpenGLContextProfile?10 +QtGui.QSurfaceFormat.OpenGLContextProfile.NoProfile?10 +QtGui.QSurfaceFormat.OpenGLContextProfile.CoreProfile?10 +QtGui.QSurfaceFormat.OpenGLContextProfile.CompatibilityProfile?10 +QtGui.QSurfaceFormat.RenderableType?10 +QtGui.QSurfaceFormat.RenderableType.DefaultRenderableType?10 +QtGui.QSurfaceFormat.RenderableType.OpenGL?10 +QtGui.QSurfaceFormat.RenderableType.OpenGLES?10 +QtGui.QSurfaceFormat.RenderableType.OpenVG?10 +QtGui.QSurfaceFormat.SwapBehavior?10 +QtGui.QSurfaceFormat.SwapBehavior.DefaultSwapBehavior?10 +QtGui.QSurfaceFormat.SwapBehavior.SingleBuffer?10 +QtGui.QSurfaceFormat.SwapBehavior.DoubleBuffer?10 +QtGui.QSurfaceFormat.SwapBehavior.TripleBuffer?10 +QtGui.QSurfaceFormat.FormatOption?10 +QtGui.QSurfaceFormat.FormatOption.StereoBuffers?10 +QtGui.QSurfaceFormat.FormatOption.DebugContext?10 +QtGui.QSurfaceFormat.FormatOption.DeprecatedFunctions?10 +QtGui.QSurfaceFormat.FormatOption.ResetNotification?10 +QtGui.QSurfaceFormat?1() +QtGui.QSurfaceFormat.__init__?1(self) +QtGui.QSurfaceFormat?1(QSurfaceFormat.FormatOptions) +QtGui.QSurfaceFormat.__init__?1(self, QSurfaceFormat.FormatOptions) +QtGui.QSurfaceFormat?1(QSurfaceFormat) +QtGui.QSurfaceFormat.__init__?1(self, QSurfaceFormat) +QtGui.QSurfaceFormat.setDepthBufferSize?4(int) +QtGui.QSurfaceFormat.depthBufferSize?4() -> int +QtGui.QSurfaceFormat.setStencilBufferSize?4(int) +QtGui.QSurfaceFormat.stencilBufferSize?4() -> int +QtGui.QSurfaceFormat.setRedBufferSize?4(int) +QtGui.QSurfaceFormat.redBufferSize?4() -> int +QtGui.QSurfaceFormat.setGreenBufferSize?4(int) +QtGui.QSurfaceFormat.greenBufferSize?4() -> int +QtGui.QSurfaceFormat.setBlueBufferSize?4(int) +QtGui.QSurfaceFormat.blueBufferSize?4() -> int +QtGui.QSurfaceFormat.setAlphaBufferSize?4(int) +QtGui.QSurfaceFormat.alphaBufferSize?4() -> int +QtGui.QSurfaceFormat.setSamples?4(int) +QtGui.QSurfaceFormat.samples?4() -> int +QtGui.QSurfaceFormat.setSwapBehavior?4(QSurfaceFormat.SwapBehavior) +QtGui.QSurfaceFormat.swapBehavior?4() -> QSurfaceFormat.SwapBehavior +QtGui.QSurfaceFormat.hasAlpha?4() -> bool +QtGui.QSurfaceFormat.setProfile?4(QSurfaceFormat.OpenGLContextProfile) +QtGui.QSurfaceFormat.profile?4() -> QSurfaceFormat.OpenGLContextProfile +QtGui.QSurfaceFormat.setRenderableType?4(QSurfaceFormat.RenderableType) +QtGui.QSurfaceFormat.renderableType?4() -> QSurfaceFormat.RenderableType +QtGui.QSurfaceFormat.setMajorVersion?4(int) +QtGui.QSurfaceFormat.majorVersion?4() -> int +QtGui.QSurfaceFormat.setMinorVersion?4(int) +QtGui.QSurfaceFormat.minorVersion?4() -> int +QtGui.QSurfaceFormat.setStereo?4(bool) +QtGui.QSurfaceFormat.setOption?4(QSurfaceFormat.FormatOptions) +QtGui.QSurfaceFormat.testOption?4(QSurfaceFormat.FormatOptions) -> bool +QtGui.QSurfaceFormat.stereo?4() -> bool +QtGui.QSurfaceFormat.version?4() -> unknown-type +QtGui.QSurfaceFormat.setVersion?4(int, int) +QtGui.QSurfaceFormat.setOptions?4(QSurfaceFormat.FormatOptions) +QtGui.QSurfaceFormat.setOption?4(QSurfaceFormat.FormatOption, bool on=True) +QtGui.QSurfaceFormat.testOption?4(QSurfaceFormat.FormatOption) -> bool +QtGui.QSurfaceFormat.options?4() -> QSurfaceFormat.FormatOptions +QtGui.QSurfaceFormat.swapInterval?4() -> int +QtGui.QSurfaceFormat.setSwapInterval?4(int) +QtGui.QSurfaceFormat.setDefaultFormat?4(QSurfaceFormat) +QtGui.QSurfaceFormat.defaultFormat?4() -> QSurfaceFormat +QtGui.QSurfaceFormat.colorSpace?4() -> QSurfaceFormat.ColorSpace +QtGui.QSurfaceFormat.setColorSpace?4(QSurfaceFormat.ColorSpace) +QtGui.QSurfaceFormat.FormatOptions?1() +QtGui.QSurfaceFormat.FormatOptions.__init__?1(self) +QtGui.QSurfaceFormat.FormatOptions?1(int) +QtGui.QSurfaceFormat.FormatOptions.__init__?1(self, int) +QtGui.QSurfaceFormat.FormatOptions?1(QSurfaceFormat.FormatOptions) +QtGui.QSurfaceFormat.FormatOptions.__init__?1(self, QSurfaceFormat.FormatOptions) +QtGui.QSyntaxHighlighter?1(QTextDocument) +QtGui.QSyntaxHighlighter.__init__?1(self, QTextDocument) +QtGui.QSyntaxHighlighter?1(QObject) +QtGui.QSyntaxHighlighter.__init__?1(self, QObject) +QtGui.QSyntaxHighlighter.setDocument?4(QTextDocument) +QtGui.QSyntaxHighlighter.document?4() -> QTextDocument +QtGui.QSyntaxHighlighter.rehighlight?4() +QtGui.QSyntaxHighlighter.rehighlightBlock?4(QTextBlock) +QtGui.QSyntaxHighlighter.highlightBlock?4(QString) +QtGui.QSyntaxHighlighter.setFormat?4(int, int, QTextCharFormat) +QtGui.QSyntaxHighlighter.setFormat?4(int, int, QColor) +QtGui.QSyntaxHighlighter.setFormat?4(int, int, QFont) +QtGui.QSyntaxHighlighter.format?4(int) -> QTextCharFormat +QtGui.QSyntaxHighlighter.previousBlockState?4() -> int +QtGui.QSyntaxHighlighter.currentBlockState?4() -> int +QtGui.QSyntaxHighlighter.setCurrentBlockState?4(int) +QtGui.QSyntaxHighlighter.setCurrentBlockUserData?4(QTextBlockUserData) +QtGui.QSyntaxHighlighter.currentBlockUserData?4() -> QTextBlockUserData +QtGui.QSyntaxHighlighter.currentBlock?4() -> QTextBlock +QtGui.QTextCursor.SelectionType?10 +QtGui.QTextCursor.SelectionType.WordUnderCursor?10 +QtGui.QTextCursor.SelectionType.LineUnderCursor?10 +QtGui.QTextCursor.SelectionType.BlockUnderCursor?10 +QtGui.QTextCursor.SelectionType.Document?10 +QtGui.QTextCursor.MoveOperation?10 +QtGui.QTextCursor.MoveOperation.NoMove?10 +QtGui.QTextCursor.MoveOperation.Start?10 +QtGui.QTextCursor.MoveOperation.Up?10 +QtGui.QTextCursor.MoveOperation.StartOfLine?10 +QtGui.QTextCursor.MoveOperation.StartOfBlock?10 +QtGui.QTextCursor.MoveOperation.StartOfWord?10 +QtGui.QTextCursor.MoveOperation.PreviousBlock?10 +QtGui.QTextCursor.MoveOperation.PreviousCharacter?10 +QtGui.QTextCursor.MoveOperation.PreviousWord?10 +QtGui.QTextCursor.MoveOperation.Left?10 +QtGui.QTextCursor.MoveOperation.WordLeft?10 +QtGui.QTextCursor.MoveOperation.End?10 +QtGui.QTextCursor.MoveOperation.Down?10 +QtGui.QTextCursor.MoveOperation.EndOfLine?10 +QtGui.QTextCursor.MoveOperation.EndOfWord?10 +QtGui.QTextCursor.MoveOperation.EndOfBlock?10 +QtGui.QTextCursor.MoveOperation.NextBlock?10 +QtGui.QTextCursor.MoveOperation.NextCharacter?10 +QtGui.QTextCursor.MoveOperation.NextWord?10 +QtGui.QTextCursor.MoveOperation.Right?10 +QtGui.QTextCursor.MoveOperation.WordRight?10 +QtGui.QTextCursor.MoveOperation.NextCell?10 +QtGui.QTextCursor.MoveOperation.PreviousCell?10 +QtGui.QTextCursor.MoveOperation.NextRow?10 +QtGui.QTextCursor.MoveOperation.PreviousRow?10 +QtGui.QTextCursor.MoveMode?10 +QtGui.QTextCursor.MoveMode.MoveAnchor?10 +QtGui.QTextCursor.MoveMode.KeepAnchor?10 +QtGui.QTextCursor?1() +QtGui.QTextCursor.__init__?1(self) +QtGui.QTextCursor?1(QTextDocument) +QtGui.QTextCursor.__init__?1(self, QTextDocument) +QtGui.QTextCursor?1(QTextFrame) +QtGui.QTextCursor.__init__?1(self, QTextFrame) +QtGui.QTextCursor?1(QTextBlock) +QtGui.QTextCursor.__init__?1(self, QTextBlock) +QtGui.QTextCursor?1(QTextCursor) +QtGui.QTextCursor.__init__?1(self, QTextCursor) +QtGui.QTextCursor.isNull?4() -> bool +QtGui.QTextCursor.setPosition?4(int, QTextCursor.MoveMode mode=QTextCursor.MoveAnchor) +QtGui.QTextCursor.position?4() -> int +QtGui.QTextCursor.anchor?4() -> int +QtGui.QTextCursor.insertText?4(QString) +QtGui.QTextCursor.insertText?4(QString, QTextCharFormat) +QtGui.QTextCursor.movePosition?4(QTextCursor.MoveOperation, QTextCursor.MoveMode mode=QTextCursor.MoveAnchor, int n=1) -> bool +QtGui.QTextCursor.deleteChar?4() +QtGui.QTextCursor.deletePreviousChar?4() +QtGui.QTextCursor.select?4(QTextCursor.SelectionType) +QtGui.QTextCursor.hasSelection?4() -> bool +QtGui.QTextCursor.hasComplexSelection?4() -> bool +QtGui.QTextCursor.removeSelectedText?4() +QtGui.QTextCursor.clearSelection?4() +QtGui.QTextCursor.selectionStart?4() -> int +QtGui.QTextCursor.selectionEnd?4() -> int +QtGui.QTextCursor.selectedText?4() -> QString +QtGui.QTextCursor.selection?4() -> QTextDocumentFragment +QtGui.QTextCursor.selectedTableCells?4() -> (int, int, int, int) +QtGui.QTextCursor.block?4() -> QTextBlock +QtGui.QTextCursor.charFormat?4() -> QTextCharFormat +QtGui.QTextCursor.setCharFormat?4(QTextCharFormat) +QtGui.QTextCursor.mergeCharFormat?4(QTextCharFormat) +QtGui.QTextCursor.blockFormat?4() -> QTextBlockFormat +QtGui.QTextCursor.setBlockFormat?4(QTextBlockFormat) +QtGui.QTextCursor.mergeBlockFormat?4(QTextBlockFormat) +QtGui.QTextCursor.blockCharFormat?4() -> QTextCharFormat +QtGui.QTextCursor.setBlockCharFormat?4(QTextCharFormat) +QtGui.QTextCursor.mergeBlockCharFormat?4(QTextCharFormat) +QtGui.QTextCursor.atBlockStart?4() -> bool +QtGui.QTextCursor.atBlockEnd?4() -> bool +QtGui.QTextCursor.atStart?4() -> bool +QtGui.QTextCursor.atEnd?4() -> bool +QtGui.QTextCursor.insertBlock?4() +QtGui.QTextCursor.insertBlock?4(QTextBlockFormat) +QtGui.QTextCursor.insertBlock?4(QTextBlockFormat, QTextCharFormat) +QtGui.QTextCursor.insertList?4(QTextListFormat) -> QTextList +QtGui.QTextCursor.insertList?4(QTextListFormat.Style) -> QTextList +QtGui.QTextCursor.createList?4(QTextListFormat) -> QTextList +QtGui.QTextCursor.createList?4(QTextListFormat.Style) -> QTextList +QtGui.QTextCursor.currentList?4() -> QTextList +QtGui.QTextCursor.insertTable?4(int, int, QTextTableFormat) -> QTextTable +QtGui.QTextCursor.insertTable?4(int, int) -> QTextTable +QtGui.QTextCursor.currentTable?4() -> QTextTable +QtGui.QTextCursor.insertFrame?4(QTextFrameFormat) -> QTextFrame +QtGui.QTextCursor.currentFrame?4() -> QTextFrame +QtGui.QTextCursor.insertFragment?4(QTextDocumentFragment) +QtGui.QTextCursor.insertHtml?4(QString) +QtGui.QTextCursor.insertImage?4(QTextImageFormat) +QtGui.QTextCursor.insertImage?4(QTextImageFormat, QTextFrameFormat.Position) +QtGui.QTextCursor.insertImage?4(QString) +QtGui.QTextCursor.insertImage?4(QImage, QString name='') +QtGui.QTextCursor.beginEditBlock?4() +QtGui.QTextCursor.joinPreviousEditBlock?4() +QtGui.QTextCursor.endEditBlock?4() +QtGui.QTextCursor.blockNumber?4() -> int +QtGui.QTextCursor.columnNumber?4() -> int +QtGui.QTextCursor.isCopyOf?4(QTextCursor) -> bool +QtGui.QTextCursor.visualNavigation?4() -> bool +QtGui.QTextCursor.setVisualNavigation?4(bool) +QtGui.QTextCursor.document?4() -> QTextDocument +QtGui.QTextCursor.positionInBlock?4() -> int +QtGui.QTextCursor.setVerticalMovementX?4(int) +QtGui.QTextCursor.verticalMovementX?4() -> int +QtGui.QTextCursor.setKeepPositionOnInsert?4(bool) +QtGui.QTextCursor.keepPositionOnInsert?4() -> bool +QtGui.QTextCursor.swap?4(QTextCursor) +QtGui.Qt.mightBeRichText?4(QString) -> bool +QtGui.Qt.convertFromPlainText?4(QString, Qt.WhiteSpaceMode mode=Qt.WhiteSpacePre) -> QString +QtGui.QTextDocument.MarkdownFeature?10 +QtGui.QTextDocument.MarkdownFeature.MarkdownNoHTML?10 +QtGui.QTextDocument.MarkdownFeature.MarkdownDialectCommonMark?10 +QtGui.QTextDocument.MarkdownFeature.MarkdownDialectGitHub?10 +QtGui.QTextDocument.Stacks?10 +QtGui.QTextDocument.Stacks.UndoStack?10 +QtGui.QTextDocument.Stacks.RedoStack?10 +QtGui.QTextDocument.Stacks.UndoAndRedoStacks?10 +QtGui.QTextDocument.ResourceType?10 +QtGui.QTextDocument.ResourceType.UnknownResource?10 +QtGui.QTextDocument.ResourceType.HtmlResource?10 +QtGui.QTextDocument.ResourceType.ImageResource?10 +QtGui.QTextDocument.ResourceType.StyleSheetResource?10 +QtGui.QTextDocument.ResourceType.MarkdownResource?10 +QtGui.QTextDocument.ResourceType.UserResource?10 +QtGui.QTextDocument.FindFlag?10 +QtGui.QTextDocument.FindFlag.FindBackward?10 +QtGui.QTextDocument.FindFlag.FindCaseSensitively?10 +QtGui.QTextDocument.FindFlag.FindWholeWords?10 +QtGui.QTextDocument.MetaInformation?10 +QtGui.QTextDocument.MetaInformation.DocumentTitle?10 +QtGui.QTextDocument.MetaInformation.DocumentUrl?10 +QtGui.QTextDocument?1(QObject parent=None) +QtGui.QTextDocument.__init__?1(self, QObject parent=None) +QtGui.QTextDocument?1(QString, QObject parent=None) +QtGui.QTextDocument.__init__?1(self, QString, QObject parent=None) +QtGui.QTextDocument.clone?4(QObject parent=None) -> QTextDocument +QtGui.QTextDocument.isEmpty?4() -> bool +QtGui.QTextDocument.clear?4() +QtGui.QTextDocument.setUndoRedoEnabled?4(bool) +QtGui.QTextDocument.isUndoRedoEnabled?4() -> bool +QtGui.QTextDocument.isUndoAvailable?4() -> bool +QtGui.QTextDocument.isRedoAvailable?4() -> bool +QtGui.QTextDocument.setDocumentLayout?4(QAbstractTextDocumentLayout) +QtGui.QTextDocument.documentLayout?4() -> QAbstractTextDocumentLayout +QtGui.QTextDocument.setMetaInformation?4(QTextDocument.MetaInformation, QString) +QtGui.QTextDocument.metaInformation?4(QTextDocument.MetaInformation) -> QString +QtGui.QTextDocument.toHtml?4(QByteArray encoding=QByteArray()) -> QString +QtGui.QTextDocument.setHtml?4(QString) +QtGui.QTextDocument.toPlainText?4() -> QString +QtGui.QTextDocument.setPlainText?4(QString) +QtGui.QTextDocument.find?4(QString, int position=0, QTextDocument.FindFlags options=0) -> QTextCursor +QtGui.QTextDocument.find?4(QRegExp, int position=0, QTextDocument.FindFlags options=0) -> QTextCursor +QtGui.QTextDocument.find?4(QRegularExpression, int position=0, QTextDocument.FindFlags options=0) -> QTextCursor +QtGui.QTextDocument.find?4(QString, QTextCursor, QTextDocument.FindFlags options=0) -> QTextCursor +QtGui.QTextDocument.find?4(QRegExp, QTextCursor, QTextDocument.FindFlags options=0) -> QTextCursor +QtGui.QTextDocument.find?4(QRegularExpression, QTextCursor, QTextDocument.FindFlags options=0) -> QTextCursor +QtGui.QTextDocument.rootFrame?4() -> QTextFrame +QtGui.QTextDocument.object?4(int) -> QTextObject +QtGui.QTextDocument.objectForFormat?4(QTextFormat) -> QTextObject +QtGui.QTextDocument.findBlock?4(int) -> QTextBlock +QtGui.QTextDocument.begin?4() -> QTextBlock +QtGui.QTextDocument.end?4() -> QTextBlock +QtGui.QTextDocument.setPageSize?4(QSizeF) +QtGui.QTextDocument.pageSize?4() -> QSizeF +QtGui.QTextDocument.setDefaultFont?4(QFont) +QtGui.QTextDocument.defaultFont?4() -> QFont +QtGui.QTextDocument.pageCount?4() -> int +QtGui.QTextDocument.isModified?4() -> bool +QtGui.QTextDocument.print_?4(QPagedPaintDevice) +QtGui.QTextDocument.print?4(QPagedPaintDevice) +QtGui.QTextDocument.resource?4(int, QUrl) -> QVariant +QtGui.QTextDocument.addResource?4(int, QUrl, QVariant) +QtGui.QTextDocument.allFormats?4() -> unknown-type +QtGui.QTextDocument.markContentsDirty?4(int, int) +QtGui.QTextDocument.setUseDesignMetrics?4(bool) +QtGui.QTextDocument.useDesignMetrics?4() -> bool +QtGui.QTextDocument.blockCountChanged?4(int) +QtGui.QTextDocument.contentsChange?4(int, int, int) +QtGui.QTextDocument.contentsChanged?4() +QtGui.QTextDocument.cursorPositionChanged?4(QTextCursor) +QtGui.QTextDocument.modificationChanged?4(bool) +QtGui.QTextDocument.redoAvailable?4(bool) +QtGui.QTextDocument.undoAvailable?4(bool) +QtGui.QTextDocument.undo?4() +QtGui.QTextDocument.redo?4() +QtGui.QTextDocument.setModified?4(bool on=True) +QtGui.QTextDocument.createObject?4(QTextFormat) -> QTextObject +QtGui.QTextDocument.loadResource?4(int, QUrl) -> QVariant +QtGui.QTextDocument.drawContents?4(QPainter, QRectF rect=QRectF()) +QtGui.QTextDocument.setTextWidth?4(float) +QtGui.QTextDocument.textWidth?4() -> float +QtGui.QTextDocument.idealWidth?4() -> float +QtGui.QTextDocument.adjustSize?4() +QtGui.QTextDocument.size?4() -> QSizeF +QtGui.QTextDocument.blockCount?4() -> int +QtGui.QTextDocument.setDefaultStyleSheet?4(QString) +QtGui.QTextDocument.defaultStyleSheet?4() -> QString +QtGui.QTextDocument.undo?4(QTextCursor) +QtGui.QTextDocument.redo?4(QTextCursor) +QtGui.QTextDocument.maximumBlockCount?4() -> int +QtGui.QTextDocument.setMaximumBlockCount?4(int) +QtGui.QTextDocument.defaultTextOption?4() -> QTextOption +QtGui.QTextDocument.setDefaultTextOption?4(QTextOption) +QtGui.QTextDocument.revision?4() -> int +QtGui.QTextDocument.findBlockByNumber?4(int) -> QTextBlock +QtGui.QTextDocument.findBlockByLineNumber?4(int) -> QTextBlock +QtGui.QTextDocument.firstBlock?4() -> QTextBlock +QtGui.QTextDocument.lastBlock?4() -> QTextBlock +QtGui.QTextDocument.indentWidth?4() -> float +QtGui.QTextDocument.setIndentWidth?4(float) +QtGui.QTextDocument.undoCommandAdded?4() +QtGui.QTextDocument.documentLayoutChanged?4() +QtGui.QTextDocument.characterAt?4(int) -> QChar +QtGui.QTextDocument.documentMargin?4() -> float +QtGui.QTextDocument.setDocumentMargin?4(float) +QtGui.QTextDocument.lineCount?4() -> int +QtGui.QTextDocument.characterCount?4() -> int +QtGui.QTextDocument.availableUndoSteps?4() -> int +QtGui.QTextDocument.availableRedoSteps?4() -> int +QtGui.QTextDocument.clearUndoRedoStacks?4(QTextDocument.Stacks stacks=QTextDocument.UndoAndRedoStacks) +QtGui.QTextDocument.defaultCursorMoveStyle?4() -> Qt.CursorMoveStyle +QtGui.QTextDocument.setDefaultCursorMoveStyle?4(Qt.CursorMoveStyle) +QtGui.QTextDocument.baseUrl?4() -> QUrl +QtGui.QTextDocument.setBaseUrl?4(QUrl) +QtGui.QTextDocument.baseUrlChanged?4(QUrl) +QtGui.QTextDocument.toRawText?4() -> QString +QtGui.QTextDocument.toMarkdown?4(QTextDocument.MarkdownFeatures features=QTextDocument.MarkdownDialectGitHub) -> QString +QtGui.QTextDocument.setMarkdown?4(QString, QTextDocument.MarkdownFeatures features=QTextDocument.MarkdownDialectGitHub) +QtGui.QTextDocument.FindFlags?1() +QtGui.QTextDocument.FindFlags.__init__?1(self) +QtGui.QTextDocument.FindFlags?1(int) +QtGui.QTextDocument.FindFlags.__init__?1(self, int) +QtGui.QTextDocument.FindFlags?1(QTextDocument.FindFlags) +QtGui.QTextDocument.FindFlags.__init__?1(self, QTextDocument.FindFlags) +QtGui.QTextDocument.MarkdownFeatures?1() +QtGui.QTextDocument.MarkdownFeatures.__init__?1(self) +QtGui.QTextDocument.MarkdownFeatures?1(int) +QtGui.QTextDocument.MarkdownFeatures.__init__?1(self, int) +QtGui.QTextDocument.MarkdownFeatures?1(QTextDocument.MarkdownFeatures) +QtGui.QTextDocument.MarkdownFeatures.__init__?1(self, QTextDocument.MarkdownFeatures) +QtGui.QTextDocumentFragment?1() +QtGui.QTextDocumentFragment.__init__?1(self) +QtGui.QTextDocumentFragment?1(QTextDocument) +QtGui.QTextDocumentFragment.__init__?1(self, QTextDocument) +QtGui.QTextDocumentFragment?1(QTextCursor) +QtGui.QTextDocumentFragment.__init__?1(self, QTextCursor) +QtGui.QTextDocumentFragment?1(QTextDocumentFragment) +QtGui.QTextDocumentFragment.__init__?1(self, QTextDocumentFragment) +QtGui.QTextDocumentFragment.isEmpty?4() -> bool +QtGui.QTextDocumentFragment.toPlainText?4() -> QString +QtGui.QTextDocumentFragment.toHtml?4(QByteArray encoding=QByteArray()) -> QString +QtGui.QTextDocumentFragment.fromPlainText?4(QString) -> QTextDocumentFragment +QtGui.QTextDocumentFragment.fromHtml?4(QString) -> QTextDocumentFragment +QtGui.QTextDocumentFragment.fromHtml?4(QString, QTextDocument) -> QTextDocumentFragment +QtGui.QTextDocumentWriter?1() +QtGui.QTextDocumentWriter.__init__?1(self) +QtGui.QTextDocumentWriter?1(QIODevice, QByteArray) +QtGui.QTextDocumentWriter.__init__?1(self, QIODevice, QByteArray) +QtGui.QTextDocumentWriter?1(QString, QByteArray format=QByteArray()) +QtGui.QTextDocumentWriter.__init__?1(self, QString, QByteArray format=QByteArray()) +QtGui.QTextDocumentWriter.setFormat?4(QByteArray) +QtGui.QTextDocumentWriter.format?4() -> QByteArray +QtGui.QTextDocumentWriter.setDevice?4(QIODevice) +QtGui.QTextDocumentWriter.device?4() -> QIODevice +QtGui.QTextDocumentWriter.setFileName?4(QString) +QtGui.QTextDocumentWriter.fileName?4() -> QString +QtGui.QTextDocumentWriter.write?4(QTextDocument) -> bool +QtGui.QTextDocumentWriter.write?4(QTextDocumentFragment) -> bool +QtGui.QTextDocumentWriter.setCodec?4(QTextCodec) +QtGui.QTextDocumentWriter.codec?4() -> QTextCodec +QtGui.QTextDocumentWriter.supportedDocumentFormats?4() -> unknown-type +QtGui.QTextLength.Type?10 +QtGui.QTextLength.Type.VariableLength?10 +QtGui.QTextLength.Type.FixedLength?10 +QtGui.QTextLength.Type.PercentageLength?10 +QtGui.QTextLength?1() +QtGui.QTextLength.__init__?1(self) +QtGui.QTextLength?1(QTextLength.Type, float) +QtGui.QTextLength.__init__?1(self, QTextLength.Type, float) +QtGui.QTextLength?1(QVariant) +QtGui.QTextLength.__init__?1(self, QVariant) +QtGui.QTextLength?1(QTextLength) +QtGui.QTextLength.__init__?1(self, QTextLength) +QtGui.QTextLength.type?4() -> QTextLength.Type +QtGui.QTextLength.value?4(float) -> float +QtGui.QTextLength.rawValue?4() -> float +QtGui.QTextFormat.Property?10 +QtGui.QTextFormat.Property.ObjectIndex?10 +QtGui.QTextFormat.Property.CssFloat?10 +QtGui.QTextFormat.Property.LayoutDirection?10 +QtGui.QTextFormat.Property.OutlinePen?10 +QtGui.QTextFormat.Property.BackgroundBrush?10 +QtGui.QTextFormat.Property.ForegroundBrush?10 +QtGui.QTextFormat.Property.BlockAlignment?10 +QtGui.QTextFormat.Property.BlockTopMargin?10 +QtGui.QTextFormat.Property.BlockBottomMargin?10 +QtGui.QTextFormat.Property.BlockLeftMargin?10 +QtGui.QTextFormat.Property.BlockRightMargin?10 +QtGui.QTextFormat.Property.TextIndent?10 +QtGui.QTextFormat.Property.BlockIndent?10 +QtGui.QTextFormat.Property.BlockNonBreakableLines?10 +QtGui.QTextFormat.Property.BlockTrailingHorizontalRulerWidth?10 +QtGui.QTextFormat.Property.FontFamily?10 +QtGui.QTextFormat.Property.FontPointSize?10 +QtGui.QTextFormat.Property.FontSizeAdjustment?10 +QtGui.QTextFormat.Property.FontSizeIncrement?10 +QtGui.QTextFormat.Property.FontWeight?10 +QtGui.QTextFormat.Property.FontItalic?10 +QtGui.QTextFormat.Property.FontUnderline?10 +QtGui.QTextFormat.Property.FontOverline?10 +QtGui.QTextFormat.Property.FontStrikeOut?10 +QtGui.QTextFormat.Property.FontFixedPitch?10 +QtGui.QTextFormat.Property.FontPixelSize?10 +QtGui.QTextFormat.Property.TextUnderlineColor?10 +QtGui.QTextFormat.Property.TextVerticalAlignment?10 +QtGui.QTextFormat.Property.TextOutline?10 +QtGui.QTextFormat.Property.IsAnchor?10 +QtGui.QTextFormat.Property.AnchorHref?10 +QtGui.QTextFormat.Property.AnchorName?10 +QtGui.QTextFormat.Property.ObjectType?10 +QtGui.QTextFormat.Property.ListStyle?10 +QtGui.QTextFormat.Property.ListIndent?10 +QtGui.QTextFormat.Property.FrameBorder?10 +QtGui.QTextFormat.Property.FrameMargin?10 +QtGui.QTextFormat.Property.FramePadding?10 +QtGui.QTextFormat.Property.FrameWidth?10 +QtGui.QTextFormat.Property.FrameHeight?10 +QtGui.QTextFormat.Property.TableColumns?10 +QtGui.QTextFormat.Property.TableColumnWidthConstraints?10 +QtGui.QTextFormat.Property.TableCellSpacing?10 +QtGui.QTextFormat.Property.TableCellPadding?10 +QtGui.QTextFormat.Property.TableCellRowSpan?10 +QtGui.QTextFormat.Property.TableCellColumnSpan?10 +QtGui.QTextFormat.Property.ImageName?10 +QtGui.QTextFormat.Property.ImageWidth?10 +QtGui.QTextFormat.Property.ImageHeight?10 +QtGui.QTextFormat.Property.TextUnderlineStyle?10 +QtGui.QTextFormat.Property.TableHeaderRowCount?10 +QtGui.QTextFormat.Property.FullWidthSelection?10 +QtGui.QTextFormat.Property.PageBreakPolicy?10 +QtGui.QTextFormat.Property.TextToolTip?10 +QtGui.QTextFormat.Property.FrameTopMargin?10 +QtGui.QTextFormat.Property.FrameBottomMargin?10 +QtGui.QTextFormat.Property.FrameLeftMargin?10 +QtGui.QTextFormat.Property.FrameRightMargin?10 +QtGui.QTextFormat.Property.FrameBorderBrush?10 +QtGui.QTextFormat.Property.FrameBorderStyle?10 +QtGui.QTextFormat.Property.BackgroundImageUrl?10 +QtGui.QTextFormat.Property.TabPositions?10 +QtGui.QTextFormat.Property.FirstFontProperty?10 +QtGui.QTextFormat.Property.FontCapitalization?10 +QtGui.QTextFormat.Property.FontLetterSpacing?10 +QtGui.QTextFormat.Property.FontWordSpacing?10 +QtGui.QTextFormat.Property.LastFontProperty?10 +QtGui.QTextFormat.Property.TableCellTopPadding?10 +QtGui.QTextFormat.Property.TableCellBottomPadding?10 +QtGui.QTextFormat.Property.TableCellLeftPadding?10 +QtGui.QTextFormat.Property.TableCellRightPadding?10 +QtGui.QTextFormat.Property.FontStyleHint?10 +QtGui.QTextFormat.Property.FontStyleStrategy?10 +QtGui.QTextFormat.Property.FontKerning?10 +QtGui.QTextFormat.Property.LineHeight?10 +QtGui.QTextFormat.Property.LineHeightType?10 +QtGui.QTextFormat.Property.FontHintingPreference?10 +QtGui.QTextFormat.Property.ListNumberPrefix?10 +QtGui.QTextFormat.Property.ListNumberSuffix?10 +QtGui.QTextFormat.Property.FontStretch?10 +QtGui.QTextFormat.Property.FontLetterSpacingType?10 +QtGui.QTextFormat.Property.HeadingLevel?10 +QtGui.QTextFormat.Property.ImageQuality?10 +QtGui.QTextFormat.Property.FontFamilies?10 +QtGui.QTextFormat.Property.FontStyleName?10 +QtGui.QTextFormat.Property.BlockQuoteLevel?10 +QtGui.QTextFormat.Property.BlockCodeLanguage?10 +QtGui.QTextFormat.Property.BlockCodeFence?10 +QtGui.QTextFormat.Property.BlockMarker?10 +QtGui.QTextFormat.Property.TableBorderCollapse?10 +QtGui.QTextFormat.Property.TableCellTopBorder?10 +QtGui.QTextFormat.Property.TableCellBottomBorder?10 +QtGui.QTextFormat.Property.TableCellLeftBorder?10 +QtGui.QTextFormat.Property.TableCellRightBorder?10 +QtGui.QTextFormat.Property.TableCellTopBorderStyle?10 +QtGui.QTextFormat.Property.TableCellBottomBorderStyle?10 +QtGui.QTextFormat.Property.TableCellLeftBorderStyle?10 +QtGui.QTextFormat.Property.TableCellRightBorderStyle?10 +QtGui.QTextFormat.Property.TableCellTopBorderBrush?10 +QtGui.QTextFormat.Property.TableCellBottomBorderBrush?10 +QtGui.QTextFormat.Property.TableCellLeftBorderBrush?10 +QtGui.QTextFormat.Property.TableCellRightBorderBrush?10 +QtGui.QTextFormat.Property.ImageTitle?10 +QtGui.QTextFormat.Property.ImageAltText?10 +QtGui.QTextFormat.Property.UserProperty?10 +QtGui.QTextFormat.PageBreakFlag?10 +QtGui.QTextFormat.PageBreakFlag.PageBreak_Auto?10 +QtGui.QTextFormat.PageBreakFlag.PageBreak_AlwaysBefore?10 +QtGui.QTextFormat.PageBreakFlag.PageBreak_AlwaysAfter?10 +QtGui.QTextFormat.ObjectTypes?10 +QtGui.QTextFormat.ObjectTypes.NoObject?10 +QtGui.QTextFormat.ObjectTypes.ImageObject?10 +QtGui.QTextFormat.ObjectTypes.TableObject?10 +QtGui.QTextFormat.ObjectTypes.TableCellObject?10 +QtGui.QTextFormat.ObjectTypes.UserObject?10 +QtGui.QTextFormat.FormatType?10 +QtGui.QTextFormat.FormatType.InvalidFormat?10 +QtGui.QTextFormat.FormatType.BlockFormat?10 +QtGui.QTextFormat.FormatType.CharFormat?10 +QtGui.QTextFormat.FormatType.ListFormat?10 +QtGui.QTextFormat.FormatType.TableFormat?10 +QtGui.QTextFormat.FormatType.FrameFormat?10 +QtGui.QTextFormat.FormatType.UserFormat?10 +QtGui.QTextFormat?1() +QtGui.QTextFormat.__init__?1(self) +QtGui.QTextFormat?1(int) +QtGui.QTextFormat.__init__?1(self, int) +QtGui.QTextFormat?1(QTextFormat) +QtGui.QTextFormat.__init__?1(self, QTextFormat) +QtGui.QTextFormat?1(QVariant) +QtGui.QTextFormat.__init__?1(self, QVariant) +QtGui.QTextFormat.merge?4(QTextFormat) +QtGui.QTextFormat.isValid?4() -> bool +QtGui.QTextFormat.type?4() -> int +QtGui.QTextFormat.objectIndex?4() -> int +QtGui.QTextFormat.setObjectIndex?4(int) +QtGui.QTextFormat.property?4(int) -> QVariant +QtGui.QTextFormat.setProperty?4(int, QVariant) +QtGui.QTextFormat.clearProperty?4(int) +QtGui.QTextFormat.hasProperty?4(int) -> bool +QtGui.QTextFormat.boolProperty?4(int) -> bool +QtGui.QTextFormat.intProperty?4(int) -> int +QtGui.QTextFormat.doubleProperty?4(int) -> float +QtGui.QTextFormat.stringProperty?4(int) -> QString +QtGui.QTextFormat.colorProperty?4(int) -> QColor +QtGui.QTextFormat.penProperty?4(int) -> QPen +QtGui.QTextFormat.brushProperty?4(int) -> QBrush +QtGui.QTextFormat.lengthProperty?4(int) -> QTextLength +QtGui.QTextFormat.lengthVectorProperty?4(int) -> unknown-type +QtGui.QTextFormat.setProperty?4(int, unknown-type) +QtGui.QTextFormat.properties?4() -> unknown-type +QtGui.QTextFormat.objectType?4() -> int +QtGui.QTextFormat.isCharFormat?4() -> bool +QtGui.QTextFormat.isBlockFormat?4() -> bool +QtGui.QTextFormat.isListFormat?4() -> bool +QtGui.QTextFormat.isFrameFormat?4() -> bool +QtGui.QTextFormat.isImageFormat?4() -> bool +QtGui.QTextFormat.isTableFormat?4() -> bool +QtGui.QTextFormat.toBlockFormat?4() -> QTextBlockFormat +QtGui.QTextFormat.toCharFormat?4() -> QTextCharFormat +QtGui.QTextFormat.toListFormat?4() -> QTextListFormat +QtGui.QTextFormat.toTableFormat?4() -> QTextTableFormat +QtGui.QTextFormat.toFrameFormat?4() -> QTextFrameFormat +QtGui.QTextFormat.toImageFormat?4() -> QTextImageFormat +QtGui.QTextFormat.setLayoutDirection?4(Qt.LayoutDirection) +QtGui.QTextFormat.layoutDirection?4() -> Qt.LayoutDirection +QtGui.QTextFormat.setBackground?4(QBrush) +QtGui.QTextFormat.background?4() -> QBrush +QtGui.QTextFormat.clearBackground?4() +QtGui.QTextFormat.setForeground?4(QBrush) +QtGui.QTextFormat.foreground?4() -> QBrush +QtGui.QTextFormat.clearForeground?4() +QtGui.QTextFormat.setObjectType?4(int) +QtGui.QTextFormat.propertyCount?4() -> int +QtGui.QTextFormat.isTableCellFormat?4() -> bool +QtGui.QTextFormat.toTableCellFormat?4() -> QTextTableCellFormat +QtGui.QTextFormat.swap?4(QTextFormat) +QtGui.QTextFormat.isEmpty?4() -> bool +QtGui.QTextFormat.PageBreakFlags?1() +QtGui.QTextFormat.PageBreakFlags.__init__?1(self) +QtGui.QTextFormat.PageBreakFlags?1(int) +QtGui.QTextFormat.PageBreakFlags.__init__?1(self, int) +QtGui.QTextFormat.PageBreakFlags?1(QTextFormat.PageBreakFlags) +QtGui.QTextFormat.PageBreakFlags.__init__?1(self, QTextFormat.PageBreakFlags) +QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior?10 +QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior.FontPropertiesSpecifiedOnly?10 +QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior.FontPropertiesAll?10 +QtGui.QTextCharFormat.UnderlineStyle?10 +QtGui.QTextCharFormat.UnderlineStyle.NoUnderline?10 +QtGui.QTextCharFormat.UnderlineStyle.SingleUnderline?10 +QtGui.QTextCharFormat.UnderlineStyle.DashUnderline?10 +QtGui.QTextCharFormat.UnderlineStyle.DotLine?10 +QtGui.QTextCharFormat.UnderlineStyle.DashDotLine?10 +QtGui.QTextCharFormat.UnderlineStyle.DashDotDotLine?10 +QtGui.QTextCharFormat.UnderlineStyle.WaveUnderline?10 +QtGui.QTextCharFormat.UnderlineStyle.SpellCheckUnderline?10 +QtGui.QTextCharFormat.VerticalAlignment?10 +QtGui.QTextCharFormat.VerticalAlignment.AlignNormal?10 +QtGui.QTextCharFormat.VerticalAlignment.AlignSuperScript?10 +QtGui.QTextCharFormat.VerticalAlignment.AlignSubScript?10 +QtGui.QTextCharFormat.VerticalAlignment.AlignMiddle?10 +QtGui.QTextCharFormat.VerticalAlignment.AlignTop?10 +QtGui.QTextCharFormat.VerticalAlignment.AlignBottom?10 +QtGui.QTextCharFormat.VerticalAlignment.AlignBaseline?10 +QtGui.QTextCharFormat?1() +QtGui.QTextCharFormat.__init__?1(self) +QtGui.QTextCharFormat?1(QTextCharFormat) +QtGui.QTextCharFormat.__init__?1(self, QTextCharFormat) +QtGui.QTextCharFormat.isValid?4() -> bool +QtGui.QTextCharFormat.setFont?4(QFont) +QtGui.QTextCharFormat.font?4() -> QFont +QtGui.QTextCharFormat.setFontFamily?4(QString) +QtGui.QTextCharFormat.fontFamily?4() -> QString +QtGui.QTextCharFormat.setFontPointSize?4(float) +QtGui.QTextCharFormat.fontPointSize?4() -> float +QtGui.QTextCharFormat.setFontWeight?4(int) +QtGui.QTextCharFormat.fontWeight?4() -> int +QtGui.QTextCharFormat.setFontItalic?4(bool) +QtGui.QTextCharFormat.fontItalic?4() -> bool +QtGui.QTextCharFormat.setFontUnderline?4(bool) +QtGui.QTextCharFormat.fontUnderline?4() -> bool +QtGui.QTextCharFormat.setFontOverline?4(bool) +QtGui.QTextCharFormat.fontOverline?4() -> bool +QtGui.QTextCharFormat.setFontStrikeOut?4(bool) +QtGui.QTextCharFormat.fontStrikeOut?4() -> bool +QtGui.QTextCharFormat.setUnderlineColor?4(QColor) +QtGui.QTextCharFormat.underlineColor?4() -> QColor +QtGui.QTextCharFormat.setFontFixedPitch?4(bool) +QtGui.QTextCharFormat.fontFixedPitch?4() -> bool +QtGui.QTextCharFormat.setVerticalAlignment?4(QTextCharFormat.VerticalAlignment) +QtGui.QTextCharFormat.verticalAlignment?4() -> QTextCharFormat.VerticalAlignment +QtGui.QTextCharFormat.setAnchor?4(bool) +QtGui.QTextCharFormat.isAnchor?4() -> bool +QtGui.QTextCharFormat.setAnchorHref?4(QString) +QtGui.QTextCharFormat.anchorHref?4() -> QString +QtGui.QTextCharFormat.tableCellRowSpan?4() -> int +QtGui.QTextCharFormat.tableCellColumnSpan?4() -> int +QtGui.QTextCharFormat.setTableCellRowSpan?4(int) +QtGui.QTextCharFormat.setTableCellColumnSpan?4(int) +QtGui.QTextCharFormat.setTextOutline?4(QPen) +QtGui.QTextCharFormat.textOutline?4() -> QPen +QtGui.QTextCharFormat.setUnderlineStyle?4(QTextCharFormat.UnderlineStyle) +QtGui.QTextCharFormat.underlineStyle?4() -> QTextCharFormat.UnderlineStyle +QtGui.QTextCharFormat.setToolTip?4(QString) +QtGui.QTextCharFormat.toolTip?4() -> QString +QtGui.QTextCharFormat.setAnchorNames?4(QStringList) +QtGui.QTextCharFormat.anchorNames?4() -> QStringList +QtGui.QTextCharFormat.setFontCapitalization?4(QFont.Capitalization) +QtGui.QTextCharFormat.fontCapitalization?4() -> QFont.Capitalization +QtGui.QTextCharFormat.setFontLetterSpacing?4(float) +QtGui.QTextCharFormat.fontLetterSpacing?4() -> float +QtGui.QTextCharFormat.setFontWordSpacing?4(float) +QtGui.QTextCharFormat.fontWordSpacing?4() -> float +QtGui.QTextCharFormat.setFontStyleHint?4(QFont.StyleHint, QFont.StyleStrategy strategy=QFont.PreferDefault) +QtGui.QTextCharFormat.setFontStyleStrategy?4(QFont.StyleStrategy) +QtGui.QTextCharFormat.fontStyleHint?4() -> QFont.StyleHint +QtGui.QTextCharFormat.fontStyleStrategy?4() -> QFont.StyleStrategy +QtGui.QTextCharFormat.setFontKerning?4(bool) +QtGui.QTextCharFormat.fontKerning?4() -> bool +QtGui.QTextCharFormat.setFontHintingPreference?4(QFont.HintingPreference) +QtGui.QTextCharFormat.fontHintingPreference?4() -> QFont.HintingPreference +QtGui.QTextCharFormat.fontStretch?4() -> int +QtGui.QTextCharFormat.setFontStretch?4(int) +QtGui.QTextCharFormat.setFontLetterSpacingType?4(QFont.SpacingType) +QtGui.QTextCharFormat.fontLetterSpacingType?4() -> QFont.SpacingType +QtGui.QTextCharFormat.setFont?4(QFont, QTextCharFormat.FontPropertiesInheritanceBehavior) +QtGui.QTextCharFormat.setFontFamilies?4(QStringList) +QtGui.QTextCharFormat.fontFamilies?4() -> QVariant +QtGui.QTextCharFormat.setFontStyleName?4(QString) +QtGui.QTextCharFormat.fontStyleName?4() -> QVariant +QtGui.QTextBlockFormat.MarkerType?10 +QtGui.QTextBlockFormat.MarkerType.NoMarker?10 +QtGui.QTextBlockFormat.MarkerType.Unchecked?10 +QtGui.QTextBlockFormat.MarkerType.Checked?10 +QtGui.QTextBlockFormat.LineHeightTypes?10 +QtGui.QTextBlockFormat.LineHeightTypes.SingleHeight?10 +QtGui.QTextBlockFormat.LineHeightTypes.ProportionalHeight?10 +QtGui.QTextBlockFormat.LineHeightTypes.FixedHeight?10 +QtGui.QTextBlockFormat.LineHeightTypes.MinimumHeight?10 +QtGui.QTextBlockFormat.LineHeightTypes.LineDistanceHeight?10 +QtGui.QTextBlockFormat?1() +QtGui.QTextBlockFormat.__init__?1(self) +QtGui.QTextBlockFormat?1(QTextBlockFormat) +QtGui.QTextBlockFormat.__init__?1(self, QTextBlockFormat) +QtGui.QTextBlockFormat.isValid?4() -> bool +QtGui.QTextBlockFormat.alignment?4() -> Qt.Alignment +QtGui.QTextBlockFormat.setTopMargin?4(float) +QtGui.QTextBlockFormat.topMargin?4() -> float +QtGui.QTextBlockFormat.setBottomMargin?4(float) +QtGui.QTextBlockFormat.bottomMargin?4() -> float +QtGui.QTextBlockFormat.setLeftMargin?4(float) +QtGui.QTextBlockFormat.leftMargin?4() -> float +QtGui.QTextBlockFormat.setRightMargin?4(float) +QtGui.QTextBlockFormat.rightMargin?4() -> float +QtGui.QTextBlockFormat.setTextIndent?4(float) +QtGui.QTextBlockFormat.textIndent?4() -> float +QtGui.QTextBlockFormat.indent?4() -> int +QtGui.QTextBlockFormat.setNonBreakableLines?4(bool) +QtGui.QTextBlockFormat.nonBreakableLines?4() -> bool +QtGui.QTextBlockFormat.setAlignment?4(Qt.Alignment) +QtGui.QTextBlockFormat.setIndent?4(int) +QtGui.QTextBlockFormat.setPageBreakPolicy?4(QTextFormat.PageBreakFlags) +QtGui.QTextBlockFormat.pageBreakPolicy?4() -> QTextFormat.PageBreakFlags +QtGui.QTextBlockFormat.setTabPositions?4(unknown-type) +QtGui.QTextBlockFormat.tabPositions?4() -> unknown-type +QtGui.QTextBlockFormat.setLineHeight?4(float, int) +QtGui.QTextBlockFormat.lineHeight?4() -> float +QtGui.QTextBlockFormat.lineHeight?4(float, float scaling=1) -> float +QtGui.QTextBlockFormat.lineHeightType?4() -> int +QtGui.QTextBlockFormat.setHeadingLevel?4(int) +QtGui.QTextBlockFormat.headingLevel?4() -> int +QtGui.QTextBlockFormat.setMarker?4(QTextBlockFormat.MarkerType) +QtGui.QTextBlockFormat.marker?4() -> QTextBlockFormat.MarkerType +QtGui.QTextListFormat.Style?10 +QtGui.QTextListFormat.Style.ListDisc?10 +QtGui.QTextListFormat.Style.ListCircle?10 +QtGui.QTextListFormat.Style.ListSquare?10 +QtGui.QTextListFormat.Style.ListDecimal?10 +QtGui.QTextListFormat.Style.ListLowerAlpha?10 +QtGui.QTextListFormat.Style.ListUpperAlpha?10 +QtGui.QTextListFormat.Style.ListLowerRoman?10 +QtGui.QTextListFormat.Style.ListUpperRoman?10 +QtGui.QTextListFormat?1() +QtGui.QTextListFormat.__init__?1(self) +QtGui.QTextListFormat?1(QTextListFormat) +QtGui.QTextListFormat.__init__?1(self, QTextListFormat) +QtGui.QTextListFormat.isValid?4() -> bool +QtGui.QTextListFormat.style?4() -> QTextListFormat.Style +QtGui.QTextListFormat.indent?4() -> int +QtGui.QTextListFormat.setStyle?4(QTextListFormat.Style) +QtGui.QTextListFormat.setIndent?4(int) +QtGui.QTextListFormat.numberPrefix?4() -> QString +QtGui.QTextListFormat.numberSuffix?4() -> QString +QtGui.QTextListFormat.setNumberPrefix?4(QString) +QtGui.QTextListFormat.setNumberSuffix?4(QString) +QtGui.QTextImageFormat?1() +QtGui.QTextImageFormat.__init__?1(self) +QtGui.QTextImageFormat?1(QTextImageFormat) +QtGui.QTextImageFormat.__init__?1(self, QTextImageFormat) +QtGui.QTextImageFormat.isValid?4() -> bool +QtGui.QTextImageFormat.name?4() -> QString +QtGui.QTextImageFormat.width?4() -> float +QtGui.QTextImageFormat.height?4() -> float +QtGui.QTextImageFormat.quality?4() -> int +QtGui.QTextImageFormat.setName?4(QString) +QtGui.QTextImageFormat.setWidth?4(float) +QtGui.QTextImageFormat.setHeight?4(float) +QtGui.QTextImageFormat.setQuality?4(int quality=100) +QtGui.QTextFrameFormat.BorderStyle?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_None?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Dotted?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Dashed?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Solid?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Double?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_DotDash?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_DotDotDash?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Groove?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Ridge?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Inset?10 +QtGui.QTextFrameFormat.BorderStyle.BorderStyle_Outset?10 +QtGui.QTextFrameFormat.Position?10 +QtGui.QTextFrameFormat.Position.InFlow?10 +QtGui.QTextFrameFormat.Position.FloatLeft?10 +QtGui.QTextFrameFormat.Position.FloatRight?10 +QtGui.QTextFrameFormat?1() +QtGui.QTextFrameFormat.__init__?1(self) +QtGui.QTextFrameFormat?1(QTextFrameFormat) +QtGui.QTextFrameFormat.__init__?1(self, QTextFrameFormat) +QtGui.QTextFrameFormat.isValid?4() -> bool +QtGui.QTextFrameFormat.setPosition?4(QTextFrameFormat.Position) +QtGui.QTextFrameFormat.position?4() -> QTextFrameFormat.Position +QtGui.QTextFrameFormat.border?4() -> float +QtGui.QTextFrameFormat.margin?4() -> float +QtGui.QTextFrameFormat.padding?4() -> float +QtGui.QTextFrameFormat.setWidth?4(QTextLength) +QtGui.QTextFrameFormat.width?4() -> QTextLength +QtGui.QTextFrameFormat.height?4() -> QTextLength +QtGui.QTextFrameFormat.setBorder?4(float) +QtGui.QTextFrameFormat.setMargin?4(float) +QtGui.QTextFrameFormat.setPadding?4(float) +QtGui.QTextFrameFormat.setWidth?4(float) +QtGui.QTextFrameFormat.setHeight?4(float) +QtGui.QTextFrameFormat.setHeight?4(QTextLength) +QtGui.QTextFrameFormat.setPageBreakPolicy?4(QTextFormat.PageBreakFlags) +QtGui.QTextFrameFormat.pageBreakPolicy?4() -> QTextFormat.PageBreakFlags +QtGui.QTextFrameFormat.setBorderBrush?4(QBrush) +QtGui.QTextFrameFormat.borderBrush?4() -> QBrush +QtGui.QTextFrameFormat.setBorderStyle?4(QTextFrameFormat.BorderStyle) +QtGui.QTextFrameFormat.borderStyle?4() -> QTextFrameFormat.BorderStyle +QtGui.QTextFrameFormat.topMargin?4() -> float +QtGui.QTextFrameFormat.bottomMargin?4() -> float +QtGui.QTextFrameFormat.leftMargin?4() -> float +QtGui.QTextFrameFormat.rightMargin?4() -> float +QtGui.QTextFrameFormat.setTopMargin?4(float) +QtGui.QTextFrameFormat.setBottomMargin?4(float) +QtGui.QTextFrameFormat.setLeftMargin?4(float) +QtGui.QTextFrameFormat.setRightMargin?4(float) +QtGui.QTextTableFormat?1() +QtGui.QTextTableFormat.__init__?1(self) +QtGui.QTextTableFormat?1(QTextTableFormat) +QtGui.QTextTableFormat.__init__?1(self, QTextTableFormat) +QtGui.QTextTableFormat.isValid?4() -> bool +QtGui.QTextTableFormat.columns?4() -> int +QtGui.QTextTableFormat.setColumnWidthConstraints?4(unknown-type) +QtGui.QTextTableFormat.columnWidthConstraints?4() -> unknown-type +QtGui.QTextTableFormat.clearColumnWidthConstraints?4() +QtGui.QTextTableFormat.cellSpacing?4() -> float +QtGui.QTextTableFormat.setCellSpacing?4(float) +QtGui.QTextTableFormat.cellPadding?4() -> float +QtGui.QTextTableFormat.alignment?4() -> Qt.Alignment +QtGui.QTextTableFormat.setColumns?4(int) +QtGui.QTextTableFormat.setCellPadding?4(float) +QtGui.QTextTableFormat.setAlignment?4(Qt.Alignment) +QtGui.QTextTableFormat.setHeaderRowCount?4(int) +QtGui.QTextTableFormat.headerRowCount?4() -> int +QtGui.QTextTableFormat.setBorderCollapse?4(bool) +QtGui.QTextTableFormat.borderCollapse?4() -> bool +QtGui.QTextTableCellFormat?1() +QtGui.QTextTableCellFormat.__init__?1(self) +QtGui.QTextTableCellFormat?1(QTextTableCellFormat) +QtGui.QTextTableCellFormat.__init__?1(self, QTextTableCellFormat) +QtGui.QTextTableCellFormat.isValid?4() -> bool +QtGui.QTextTableCellFormat.setTopPadding?4(float) +QtGui.QTextTableCellFormat.topPadding?4() -> float +QtGui.QTextTableCellFormat.setBottomPadding?4(float) +QtGui.QTextTableCellFormat.bottomPadding?4() -> float +QtGui.QTextTableCellFormat.setLeftPadding?4(float) +QtGui.QTextTableCellFormat.leftPadding?4() -> float +QtGui.QTextTableCellFormat.setRightPadding?4(float) +QtGui.QTextTableCellFormat.rightPadding?4() -> float +QtGui.QTextTableCellFormat.setPadding?4(float) +QtGui.QTextTableCellFormat.setTopBorder?4(float) +QtGui.QTextTableCellFormat.topBorder?4() -> float +QtGui.QTextTableCellFormat.setBottomBorder?4(float) +QtGui.QTextTableCellFormat.bottomBorder?4() -> float +QtGui.QTextTableCellFormat.setLeftBorder?4(float) +QtGui.QTextTableCellFormat.leftBorder?4() -> float +QtGui.QTextTableCellFormat.setRightBorder?4(float) +QtGui.QTextTableCellFormat.rightBorder?4() -> float +QtGui.QTextTableCellFormat.setBorder?4(float) +QtGui.QTextTableCellFormat.setTopBorderStyle?4(QTextFrameFormat.BorderStyle) +QtGui.QTextTableCellFormat.topBorderStyle?4() -> QTextFrameFormat.BorderStyle +QtGui.QTextTableCellFormat.setBottomBorderStyle?4(QTextFrameFormat.BorderStyle) +QtGui.QTextTableCellFormat.bottomBorderStyle?4() -> QTextFrameFormat.BorderStyle +QtGui.QTextTableCellFormat.setLeftBorderStyle?4(QTextFrameFormat.BorderStyle) +QtGui.QTextTableCellFormat.leftBorderStyle?4() -> QTextFrameFormat.BorderStyle +QtGui.QTextTableCellFormat.setRightBorderStyle?4(QTextFrameFormat.BorderStyle) +QtGui.QTextTableCellFormat.rightBorderStyle?4() -> QTextFrameFormat.BorderStyle +QtGui.QTextTableCellFormat.setBorderStyle?4(QTextFrameFormat.BorderStyle) +QtGui.QTextTableCellFormat.setTopBorderBrush?4(QBrush) +QtGui.QTextTableCellFormat.topBorderBrush?4() -> QBrush +QtGui.QTextTableCellFormat.setBottomBorderBrush?4(QBrush) +QtGui.QTextTableCellFormat.bottomBorderBrush?4() -> QBrush +QtGui.QTextTableCellFormat.setLeftBorderBrush?4(QBrush) +QtGui.QTextTableCellFormat.leftBorderBrush?4() -> QBrush +QtGui.QTextTableCellFormat.setRightBorderBrush?4(QBrush) +QtGui.QTextTableCellFormat.rightBorderBrush?4() -> QBrush +QtGui.QTextTableCellFormat.setBorderBrush?4(QBrush) +QtGui.QTextInlineObject?1() +QtGui.QTextInlineObject.__init__?1(self) +QtGui.QTextInlineObject?1(QTextInlineObject) +QtGui.QTextInlineObject.__init__?1(self, QTextInlineObject) +QtGui.QTextInlineObject.isValid?4() -> bool +QtGui.QTextInlineObject.rect?4() -> QRectF +QtGui.QTextInlineObject.width?4() -> float +QtGui.QTextInlineObject.ascent?4() -> float +QtGui.QTextInlineObject.descent?4() -> float +QtGui.QTextInlineObject.height?4() -> float +QtGui.QTextInlineObject.textDirection?4() -> Qt.LayoutDirection +QtGui.QTextInlineObject.setWidth?4(float) +QtGui.QTextInlineObject.setAscent?4(float) +QtGui.QTextInlineObject.setDescent?4(float) +QtGui.QTextInlineObject.textPosition?4() -> int +QtGui.QTextInlineObject.formatIndex?4() -> int +QtGui.QTextInlineObject.format?4() -> QTextFormat +QtGui.QTextLayout.CursorMode?10 +QtGui.QTextLayout.CursorMode.SkipCharacters?10 +QtGui.QTextLayout.CursorMode.SkipWords?10 +QtGui.QTextLayout?1() +QtGui.QTextLayout.__init__?1(self) +QtGui.QTextLayout?1(QString) +QtGui.QTextLayout.__init__?1(self, QString) +QtGui.QTextLayout?1(QString, QFont, QPaintDevice paintDevice=None) +QtGui.QTextLayout.__init__?1(self, QString, QFont, QPaintDevice paintDevice=None) +QtGui.QTextLayout?1(QTextBlock) +QtGui.QTextLayout.__init__?1(self, QTextBlock) +QtGui.QTextLayout.setFont?4(QFont) +QtGui.QTextLayout.font?4() -> QFont +QtGui.QTextLayout.setText?4(QString) +QtGui.QTextLayout.text?4() -> QString +QtGui.QTextLayout.setTextOption?4(QTextOption) +QtGui.QTextLayout.textOption?4() -> QTextOption +QtGui.QTextLayout.setPreeditArea?4(int, QString) +QtGui.QTextLayout.preeditAreaPosition?4() -> int +QtGui.QTextLayout.preeditAreaText?4() -> QString +QtGui.QTextLayout.setAdditionalFormats?4(unknown-type) +QtGui.QTextLayout.additionalFormats?4() -> unknown-type +QtGui.QTextLayout.clearAdditionalFormats?4() +QtGui.QTextLayout.setCacheEnabled?4(bool) +QtGui.QTextLayout.cacheEnabled?4() -> bool +QtGui.QTextLayout.beginLayout?4() +QtGui.QTextLayout.endLayout?4() +QtGui.QTextLayout.createLine?4() -> QTextLine +QtGui.QTextLayout.lineCount?4() -> int +QtGui.QTextLayout.lineAt?4(int) -> QTextLine +QtGui.QTextLayout.lineForTextPosition?4(int) -> QTextLine +QtGui.QTextLayout.isValidCursorPosition?4(int) -> bool +QtGui.QTextLayout.nextCursorPosition?4(int, QTextLayout.CursorMode mode=QTextLayout.SkipCharacters) -> int +QtGui.QTextLayout.previousCursorPosition?4(int, QTextLayout.CursorMode mode=QTextLayout.SkipCharacters) -> int +QtGui.QTextLayout.draw?4(QPainter, QPointF, unknown-type selections=[], QRectF clip=QRectF()) +QtGui.QTextLayout.drawCursor?4(QPainter, QPointF, int) +QtGui.QTextLayout.drawCursor?4(QPainter, QPointF, int, int) +QtGui.QTextLayout.position?4() -> QPointF +QtGui.QTextLayout.setPosition?4(QPointF) +QtGui.QTextLayout.boundingRect?4() -> QRectF +QtGui.QTextLayout.minimumWidth?4() -> float +QtGui.QTextLayout.maximumWidth?4() -> float +QtGui.QTextLayout.clearLayout?4() +QtGui.QTextLayout.setCursorMoveStyle?4(Qt.CursorMoveStyle) +QtGui.QTextLayout.cursorMoveStyle?4() -> Qt.CursorMoveStyle +QtGui.QTextLayout.leftCursorPosition?4(int) -> int +QtGui.QTextLayout.rightCursorPosition?4(int) -> int +QtGui.QTextLayout.glyphRuns?4(int from=-1, int length=-1) -> unknown-type +QtGui.QTextLayout.setFormats?4(unknown-type) +QtGui.QTextLayout.formats?4() -> unknown-type +QtGui.QTextLayout.clearFormats?4() +QtGui.QTextLayout.FormatRange.format?7 +QtGui.QTextLayout.FormatRange.length?7 +QtGui.QTextLayout.FormatRange.start?7 +QtGui.QTextLayout.FormatRange?1() +QtGui.QTextLayout.FormatRange.__init__?1(self) +QtGui.QTextLayout.FormatRange?1(QTextLayout.FormatRange) +QtGui.QTextLayout.FormatRange.__init__?1(self, QTextLayout.FormatRange) +QtGui.QTextLine.CursorPosition?10 +QtGui.QTextLine.CursorPosition.CursorBetweenCharacters?10 +QtGui.QTextLine.CursorPosition.CursorOnCharacter?10 +QtGui.QTextLine.Edge?10 +QtGui.QTextLine.Edge.Leading?10 +QtGui.QTextLine.Edge.Trailing?10 +QtGui.QTextLine?1() +QtGui.QTextLine.__init__?1(self) +QtGui.QTextLine?1(QTextLine) +QtGui.QTextLine.__init__?1(self, QTextLine) +QtGui.QTextLine.isValid?4() -> bool +QtGui.QTextLine.rect?4() -> QRectF +QtGui.QTextLine.x?4() -> float +QtGui.QTextLine.y?4() -> float +QtGui.QTextLine.width?4() -> float +QtGui.QTextLine.ascent?4() -> float +QtGui.QTextLine.descent?4() -> float +QtGui.QTextLine.height?4() -> float +QtGui.QTextLine.naturalTextWidth?4() -> float +QtGui.QTextLine.naturalTextRect?4() -> QRectF +QtGui.QTextLine.cursorToX?4(int, QTextLine.Edge edge=QTextLine.Leading) -> (float, int) +QtGui.QTextLine.xToCursor?4(float, QTextLine.CursorPosition edge=QTextLine.CursorBetweenCharacters) -> int +QtGui.QTextLine.setLineWidth?4(float) +QtGui.QTextLine.setNumColumns?4(int) +QtGui.QTextLine.setNumColumns?4(int, float) +QtGui.QTextLine.setPosition?4(QPointF) +QtGui.QTextLine.textStart?4() -> int +QtGui.QTextLine.textLength?4() -> int +QtGui.QTextLine.lineNumber?4() -> int +QtGui.QTextLine.draw?4(QPainter, QPointF, QTextLayout.FormatRange selection=None) +QtGui.QTextLine.position?4() -> QPointF +QtGui.QTextLine.leading?4() -> float +QtGui.QTextLine.setLeadingIncluded?4(bool) +QtGui.QTextLine.leadingIncluded?4() -> bool +QtGui.QTextLine.horizontalAdvance?4() -> float +QtGui.QTextLine.glyphRuns?4(int from=-1, int length=-1) -> unknown-type +QtGui.QTextObject?1(QTextDocument) +QtGui.QTextObject.__init__?1(self, QTextDocument) +QtGui.QTextObject.setFormat?4(QTextFormat) +QtGui.QTextObject.format?4() -> QTextFormat +QtGui.QTextObject.formatIndex?4() -> int +QtGui.QTextObject.document?4() -> QTextDocument +QtGui.QTextObject.objectIndex?4() -> int +QtGui.QTextBlockGroup?1(QTextDocument) +QtGui.QTextBlockGroup.__init__?1(self, QTextDocument) +QtGui.QTextBlockGroup.blockInserted?4(QTextBlock) +QtGui.QTextBlockGroup.blockRemoved?4(QTextBlock) +QtGui.QTextBlockGroup.blockFormatChanged?4(QTextBlock) +QtGui.QTextBlockGroup.blockList?4() -> unknown-type +QtGui.QTextList?1(QTextDocument) +QtGui.QTextList.__init__?1(self, QTextDocument) +QtGui.QTextList.count?4() -> int +QtGui.QTextList.item?4(int) -> QTextBlock +QtGui.QTextList.itemNumber?4(QTextBlock) -> int +QtGui.QTextList.itemText?4(QTextBlock) -> QString +QtGui.QTextList.removeItem?4(int) +QtGui.QTextList.remove?4(QTextBlock) +QtGui.QTextList.add?4(QTextBlock) +QtGui.QTextList.format?4() -> QTextListFormat +QtGui.QTextList.setFormat?4(QTextListFormat) +QtGui.QTextFrame?1(QTextDocument) +QtGui.QTextFrame.__init__?1(self, QTextDocument) +QtGui.QTextFrame.frameFormat?4() -> QTextFrameFormat +QtGui.QTextFrame.firstCursorPosition?4() -> QTextCursor +QtGui.QTextFrame.lastCursorPosition?4() -> QTextCursor +QtGui.QTextFrame.firstPosition?4() -> int +QtGui.QTextFrame.lastPosition?4() -> int +QtGui.QTextFrame.childFrames?4() -> unknown-type +QtGui.QTextFrame.parentFrame?4() -> QTextFrame +QtGui.QTextFrame.begin?4() -> QTextFrame.iterator +QtGui.QTextFrame.end?4() -> QTextFrame.iterator +QtGui.QTextFrame.setFrameFormat?4(QTextFrameFormat) +QtGui.QTextFrame.iterator?1() +QtGui.QTextFrame.iterator.__init__?1(self) +QtGui.QTextFrame.iterator?1(QTextFrame.iterator) +QtGui.QTextFrame.iterator.__init__?1(self, QTextFrame.iterator) +QtGui.QTextFrame.iterator.parentFrame?4() -> QTextFrame +QtGui.QTextFrame.iterator.currentFrame?4() -> QTextFrame +QtGui.QTextFrame.iterator.currentBlock?4() -> QTextBlock +QtGui.QTextFrame.iterator.atEnd?4() -> bool +QtGui.QTextBlock?1() +QtGui.QTextBlock.__init__?1(self) +QtGui.QTextBlock?1(QTextBlock) +QtGui.QTextBlock.__init__?1(self, QTextBlock) +QtGui.QTextBlock.isValid?4() -> bool +QtGui.QTextBlock.position?4() -> int +QtGui.QTextBlock.length?4() -> int +QtGui.QTextBlock.contains?4(int) -> bool +QtGui.QTextBlock.layout?4() -> QTextLayout +QtGui.QTextBlock.blockFormat?4() -> QTextBlockFormat +QtGui.QTextBlock.blockFormatIndex?4() -> int +QtGui.QTextBlock.charFormat?4() -> QTextCharFormat +QtGui.QTextBlock.charFormatIndex?4() -> int +QtGui.QTextBlock.text?4() -> QString +QtGui.QTextBlock.document?4() -> QTextDocument +QtGui.QTextBlock.textList?4() -> QTextList +QtGui.QTextBlock.begin?4() -> QTextBlock.iterator +QtGui.QTextBlock.end?4() -> QTextBlock.iterator +QtGui.QTextBlock.next?4() -> QTextBlock +QtGui.QTextBlock.previous?4() -> QTextBlock +QtGui.QTextBlock.userData?4() -> QTextBlockUserData +QtGui.QTextBlock.setUserData?4(QTextBlockUserData) +QtGui.QTextBlock.userState?4() -> int +QtGui.QTextBlock.setUserState?4(int) +QtGui.QTextBlock.clearLayout?4() +QtGui.QTextBlock.revision?4() -> int +QtGui.QTextBlock.setRevision?4(int) +QtGui.QTextBlock.isVisible?4() -> bool +QtGui.QTextBlock.setVisible?4(bool) +QtGui.QTextBlock.blockNumber?4() -> int +QtGui.QTextBlock.firstLineNumber?4() -> int +QtGui.QTextBlock.setLineCount?4(int) +QtGui.QTextBlock.lineCount?4() -> int +QtGui.QTextBlock.textDirection?4() -> Qt.LayoutDirection +QtGui.QTextBlock.textFormats?4() -> unknown-type +QtGui.QTextBlock.iterator?1() +QtGui.QTextBlock.iterator.__init__?1(self) +QtGui.QTextBlock.iterator?1(QTextBlock.iterator) +QtGui.QTextBlock.iterator.__init__?1(self, QTextBlock.iterator) +QtGui.QTextBlock.iterator.fragment?4() -> QTextFragment +QtGui.QTextBlock.iterator.atEnd?4() -> bool +QtGui.QTextFragment?1() +QtGui.QTextFragment.__init__?1(self) +QtGui.QTextFragment?1(QTextFragment) +QtGui.QTextFragment.__init__?1(self, QTextFragment) +QtGui.QTextFragment.isValid?4() -> bool +QtGui.QTextFragment.position?4() -> int +QtGui.QTextFragment.length?4() -> int +QtGui.QTextFragment.contains?4(int) -> bool +QtGui.QTextFragment.charFormat?4() -> QTextCharFormat +QtGui.QTextFragment.charFormatIndex?4() -> int +QtGui.QTextFragment.text?4() -> QString +QtGui.QTextFragment.glyphRuns?4(int from=-1, int length=-1) -> unknown-type +QtGui.QTextBlockUserData?1() +QtGui.QTextBlockUserData.__init__?1(self) +QtGui.QTextBlockUserData?1(QTextBlockUserData) +QtGui.QTextBlockUserData.__init__?1(self, QTextBlockUserData) +QtGui.QTextOption.TabType?10 +QtGui.QTextOption.TabType.LeftTab?10 +QtGui.QTextOption.TabType.RightTab?10 +QtGui.QTextOption.TabType.CenterTab?10 +QtGui.QTextOption.TabType.DelimiterTab?10 +QtGui.QTextOption.Flag?10 +QtGui.QTextOption.Flag.IncludeTrailingSpaces?10 +QtGui.QTextOption.Flag.ShowTabsAndSpaces?10 +QtGui.QTextOption.Flag.ShowLineAndParagraphSeparators?10 +QtGui.QTextOption.Flag.AddSpaceForLineAndParagraphSeparators?10 +QtGui.QTextOption.Flag.SuppressColors?10 +QtGui.QTextOption.Flag.ShowDocumentTerminator?10 +QtGui.QTextOption.WrapMode?10 +QtGui.QTextOption.WrapMode.NoWrap?10 +QtGui.QTextOption.WrapMode.WordWrap?10 +QtGui.QTextOption.WrapMode.ManualWrap?10 +QtGui.QTextOption.WrapMode.WrapAnywhere?10 +QtGui.QTextOption.WrapMode.WrapAtWordBoundaryOrAnywhere?10 +QtGui.QTextOption?1() +QtGui.QTextOption.__init__?1(self) +QtGui.QTextOption?1(Qt.Alignment) +QtGui.QTextOption.__init__?1(self, Qt.Alignment) +QtGui.QTextOption?1(QTextOption) +QtGui.QTextOption.__init__?1(self, QTextOption) +QtGui.QTextOption.alignment?4() -> Qt.Alignment +QtGui.QTextOption.setTextDirection?4(Qt.LayoutDirection) +QtGui.QTextOption.textDirection?4() -> Qt.LayoutDirection +QtGui.QTextOption.setWrapMode?4(QTextOption.WrapMode) +QtGui.QTextOption.wrapMode?4() -> QTextOption.WrapMode +QtGui.QTextOption.flags?4() -> QTextOption.Flags +QtGui.QTextOption.tabStop?4() -> float +QtGui.QTextOption.setTabArray?4(unknown-type) +QtGui.QTextOption.tabArray?4() -> unknown-type +QtGui.QTextOption.setUseDesignMetrics?4(bool) +QtGui.QTextOption.useDesignMetrics?4() -> bool +QtGui.QTextOption.setAlignment?4(Qt.Alignment) +QtGui.QTextOption.setFlags?4(QTextOption.Flags) +QtGui.QTextOption.setTabStop?4(float) +QtGui.QTextOption.setTabs?4(unknown-type) +QtGui.QTextOption.tabs?4() -> unknown-type +QtGui.QTextOption.setTabStopDistance?4(float) +QtGui.QTextOption.tabStopDistance?4() -> float +QtGui.QTextOption.Flags?1() +QtGui.QTextOption.Flags.__init__?1(self) +QtGui.QTextOption.Flags?1(int) +QtGui.QTextOption.Flags.__init__?1(self, int) +QtGui.QTextOption.Flags?1(QTextOption.Flags) +QtGui.QTextOption.Flags.__init__?1(self, QTextOption.Flags) +QtGui.QTextOption.Tab.delimiter?7 +QtGui.QTextOption.Tab.position?7 +QtGui.QTextOption.Tab.type?7 +QtGui.QTextOption.Tab?1() +QtGui.QTextOption.Tab.__init__?1(self) +QtGui.QTextOption.Tab?1(float, QTextOption.TabType, QChar delim='') +QtGui.QTextOption.Tab.__init__?1(self, float, QTextOption.TabType, QChar delim='') +QtGui.QTextOption.Tab?1(QTextOption.Tab) +QtGui.QTextOption.Tab.__init__?1(self, QTextOption.Tab) +QtGui.QTextTableCell?1() +QtGui.QTextTableCell.__init__?1(self) +QtGui.QTextTableCell?1(QTextTableCell) +QtGui.QTextTableCell.__init__?1(self, QTextTableCell) +QtGui.QTextTableCell.format?4() -> QTextCharFormat +QtGui.QTextTableCell.setFormat?4(QTextCharFormat) +QtGui.QTextTableCell.row?4() -> int +QtGui.QTextTableCell.column?4() -> int +QtGui.QTextTableCell.rowSpan?4() -> int +QtGui.QTextTableCell.columnSpan?4() -> int +QtGui.QTextTableCell.isValid?4() -> bool +QtGui.QTextTableCell.firstCursorPosition?4() -> QTextCursor +QtGui.QTextTableCell.lastCursorPosition?4() -> QTextCursor +QtGui.QTextTableCell.tableCellFormatIndex?4() -> int +QtGui.QTextTable?1(QTextDocument) +QtGui.QTextTable.__init__?1(self, QTextDocument) +QtGui.QTextTable.resize?4(int, int) +QtGui.QTextTable.insertRows?4(int, int) +QtGui.QTextTable.insertColumns?4(int, int) +QtGui.QTextTable.removeRows?4(int, int) +QtGui.QTextTable.removeColumns?4(int, int) +QtGui.QTextTable.mergeCells?4(int, int, int, int) +QtGui.QTextTable.mergeCells?4(QTextCursor) +QtGui.QTextTable.splitCell?4(int, int, int, int) +QtGui.QTextTable.rows?4() -> int +QtGui.QTextTable.columns?4() -> int +QtGui.QTextTable.cellAt?4(int, int) -> QTextTableCell +QtGui.QTextTable.cellAt?4(int) -> QTextTableCell +QtGui.QTextTable.cellAt?4(QTextCursor) -> QTextTableCell +QtGui.QTextTable.rowStart?4(QTextCursor) -> QTextCursor +QtGui.QTextTable.rowEnd?4(QTextCursor) -> QTextCursor +QtGui.QTextTable.format?4() -> QTextTableFormat +QtGui.QTextTable.setFormat?4(QTextTableFormat) +QtGui.QTextTable.appendRows?4(int) +QtGui.QTextTable.appendColumns?4(int) +QtGui.QTouchDevice.CapabilityFlag?10 +QtGui.QTouchDevice.CapabilityFlag.Position?10 +QtGui.QTouchDevice.CapabilityFlag.Area?10 +QtGui.QTouchDevice.CapabilityFlag.Pressure?10 +QtGui.QTouchDevice.CapabilityFlag.Velocity?10 +QtGui.QTouchDevice.CapabilityFlag.RawPositions?10 +QtGui.QTouchDevice.CapabilityFlag.NormalizedPosition?10 +QtGui.QTouchDevice.CapabilityFlag.MouseEmulation?10 +QtGui.QTouchDevice.DeviceType?10 +QtGui.QTouchDevice.DeviceType.TouchScreen?10 +QtGui.QTouchDevice.DeviceType.TouchPad?10 +QtGui.QTouchDevice?1() +QtGui.QTouchDevice.__init__?1(self) +QtGui.QTouchDevice?1(QTouchDevice) +QtGui.QTouchDevice.__init__?1(self, QTouchDevice) +QtGui.QTouchDevice.devices?4() -> unknown-type +QtGui.QTouchDevice.name?4() -> QString +QtGui.QTouchDevice.type?4() -> QTouchDevice.DeviceType +QtGui.QTouchDevice.capabilities?4() -> QTouchDevice.Capabilities +QtGui.QTouchDevice.setName?4(QString) +QtGui.QTouchDevice.setType?4(QTouchDevice.DeviceType) +QtGui.QTouchDevice.setCapabilities?4(QTouchDevice.Capabilities) +QtGui.QTouchDevice.maximumTouchPoints?4() -> int +QtGui.QTouchDevice.setMaximumTouchPoints?4(int) +QtGui.QTouchDevice.Capabilities?1() +QtGui.QTouchDevice.Capabilities.__init__?1(self) +QtGui.QTouchDevice.Capabilities?1(int) +QtGui.QTouchDevice.Capabilities.__init__?1(self, int) +QtGui.QTouchDevice.Capabilities?1(QTouchDevice.Capabilities) +QtGui.QTouchDevice.Capabilities.__init__?1(self, QTouchDevice.Capabilities) +QtGui.QTransform.TransformationType?10 +QtGui.QTransform.TransformationType.TxNone?10 +QtGui.QTransform.TransformationType.TxTranslate?10 +QtGui.QTransform.TransformationType.TxScale?10 +QtGui.QTransform.TransformationType.TxRotate?10 +QtGui.QTransform.TransformationType.TxShear?10 +QtGui.QTransform.TransformationType.TxProject?10 +QtGui.QTransform?1() +QtGui.QTransform.__init__?1(self) +QtGui.QTransform?1(float, float, float, float, float, float, float, float, float m33=1) +QtGui.QTransform.__init__?1(self, float, float, float, float, float, float, float, float, float m33=1) +QtGui.QTransform?1(float, float, float, float, float, float) +QtGui.QTransform.__init__?1(self, float, float, float, float, float, float) +QtGui.QTransform?1(QTransform) +QtGui.QTransform.__init__?1(self, QTransform) +QtGui.QTransform.type?4() -> QTransform.TransformationType +QtGui.QTransform.setMatrix?4(float, float, float, float, float, float, float, float, float) +QtGui.QTransform.inverted?4() -> (QTransform, bool) +QtGui.QTransform.adjoint?4() -> QTransform +QtGui.QTransform.transposed?4() -> QTransform +QtGui.QTransform.translate?4(float, float) -> QTransform +QtGui.QTransform.scale?4(float, float) -> QTransform +QtGui.QTransform.shear?4(float, float) -> QTransform +QtGui.QTransform.rotate?4(float, Qt.Axis axis=Qt.ZAxis) -> QTransform +QtGui.QTransform.rotateRadians?4(float, Qt.Axis axis=Qt.ZAxis) -> QTransform +QtGui.QTransform.squareToQuad?4(QPolygonF, QTransform) -> bool +QtGui.QTransform.quadToSquare?4(QPolygonF, QTransform) -> bool +QtGui.QTransform.quadToQuad?4(QPolygonF, QPolygonF, QTransform) -> bool +QtGui.QTransform.reset?4() +QtGui.QTransform.map?4(int, int) -> (int, int) +QtGui.QTransform.map?4(float, float) -> (float, float) +QtGui.QTransform.map?4(QPoint) -> QPoint +QtGui.QTransform.map?4(QPointF) -> QPointF +QtGui.QTransform.map?4(QLine) -> QLine +QtGui.QTransform.map?4(QLineF) -> QLineF +QtGui.QTransform.map?4(QPolygonF) -> QPolygonF +QtGui.QTransform.map?4(QPolygon) -> QPolygon +QtGui.QTransform.map?4(QRegion) -> QRegion +QtGui.QTransform.map?4(QPainterPath) -> QPainterPath +QtGui.QTransform.mapToPolygon?4(QRect) -> QPolygon +QtGui.QTransform.mapRect?4(QRect) -> QRect +QtGui.QTransform.mapRect?4(QRectF) -> QRectF +QtGui.QTransform.isAffine?4() -> bool +QtGui.QTransform.isIdentity?4() -> bool +QtGui.QTransform.isInvertible?4() -> bool +QtGui.QTransform.isScaling?4() -> bool +QtGui.QTransform.isRotating?4() -> bool +QtGui.QTransform.isTranslating?4() -> bool +QtGui.QTransform.determinant?4() -> float +QtGui.QTransform.m11?4() -> float +QtGui.QTransform.m12?4() -> float +QtGui.QTransform.m13?4() -> float +QtGui.QTransform.m21?4() -> float +QtGui.QTransform.m22?4() -> float +QtGui.QTransform.m23?4() -> float +QtGui.QTransform.m31?4() -> float +QtGui.QTransform.m32?4() -> float +QtGui.QTransform.m33?4() -> float +QtGui.QTransform.dx?4() -> float +QtGui.QTransform.dy?4() -> float +QtGui.QTransform.fromTranslate?4(float, float) -> QTransform +QtGui.QTransform.fromScale?4(float, float) -> QTransform +QtGui.QValidator.State?10 +QtGui.QValidator.State.Invalid?10 +QtGui.QValidator.State.Intermediate?10 +QtGui.QValidator.State.Acceptable?10 +QtGui.QValidator?1(QObject parent=None) +QtGui.QValidator.__init__?1(self, QObject parent=None) +QtGui.QValidator.validate?4(QString, int) -> (QValidator.State, QString, int) +QtGui.QValidator.fixup?4(QString) -> QString +QtGui.QValidator.setLocale?4(QLocale) +QtGui.QValidator.locale?4() -> QLocale +QtGui.QValidator.changed?4() +QtGui.QIntValidator?1(QObject parent=None) +QtGui.QIntValidator.__init__?1(self, QObject parent=None) +QtGui.QIntValidator?1(int, int, QObject parent=None) +QtGui.QIntValidator.__init__?1(self, int, int, QObject parent=None) +QtGui.QIntValidator.validate?4(QString, int) -> (QValidator.State, QString, int) +QtGui.QIntValidator.fixup?4(QString) -> QString +QtGui.QIntValidator.setBottom?4(int) +QtGui.QIntValidator.setTop?4(int) +QtGui.QIntValidator.setRange?4(int, int) +QtGui.QIntValidator.bottom?4() -> int +QtGui.QIntValidator.top?4() -> int +QtGui.QDoubleValidator.Notation?10 +QtGui.QDoubleValidator.Notation.StandardNotation?10 +QtGui.QDoubleValidator.Notation.ScientificNotation?10 +QtGui.QDoubleValidator?1(QObject parent=None) +QtGui.QDoubleValidator.__init__?1(self, QObject parent=None) +QtGui.QDoubleValidator?1(float, float, int, QObject parent=None) +QtGui.QDoubleValidator.__init__?1(self, float, float, int, QObject parent=None) +QtGui.QDoubleValidator.validate?4(QString, int) -> (QValidator.State, QString, int) +QtGui.QDoubleValidator.setRange?4(float, float, int decimals=0) +QtGui.QDoubleValidator.setBottom?4(float) +QtGui.QDoubleValidator.setTop?4(float) +QtGui.QDoubleValidator.setDecimals?4(int) +QtGui.QDoubleValidator.bottom?4() -> float +QtGui.QDoubleValidator.top?4() -> float +QtGui.QDoubleValidator.decimals?4() -> int +QtGui.QDoubleValidator.setNotation?4(QDoubleValidator.Notation) +QtGui.QDoubleValidator.notation?4() -> QDoubleValidator.Notation +QtGui.QRegExpValidator?1(QObject parent=None) +QtGui.QRegExpValidator.__init__?1(self, QObject parent=None) +QtGui.QRegExpValidator?1(QRegExp, QObject parent=None) +QtGui.QRegExpValidator.__init__?1(self, QRegExp, QObject parent=None) +QtGui.QRegExpValidator.validate?4(QString, int) -> (QValidator.State, QString, int) +QtGui.QRegExpValidator.setRegExp?4(QRegExp) +QtGui.QRegExpValidator.regExp?4() -> QRegExp +QtGui.QRegularExpressionValidator?1(QObject parent=None) +QtGui.QRegularExpressionValidator.__init__?1(self, QObject parent=None) +QtGui.QRegularExpressionValidator?1(QRegularExpression, QObject parent=None) +QtGui.QRegularExpressionValidator.__init__?1(self, QRegularExpression, QObject parent=None) +QtGui.QRegularExpressionValidator.validate?4(QString, int) -> (QValidator.State, QString, int) +QtGui.QRegularExpressionValidator.regularExpression?4() -> QRegularExpression +QtGui.QRegularExpressionValidator.setRegularExpression?4(QRegularExpression) +QtGui.QVector2D?1() +QtGui.QVector2D.__init__?1(self) +QtGui.QVector2D?1(float, float) +QtGui.QVector2D.__init__?1(self, float, float) +QtGui.QVector2D?1(QPoint) +QtGui.QVector2D.__init__?1(self, QPoint) +QtGui.QVector2D?1(QPointF) +QtGui.QVector2D.__init__?1(self, QPointF) +QtGui.QVector2D?1(QVector3D) +QtGui.QVector2D.__init__?1(self, QVector3D) +QtGui.QVector2D?1(QVector4D) +QtGui.QVector2D.__init__?1(self, QVector4D) +QtGui.QVector2D?1(QVector2D) +QtGui.QVector2D.__init__?1(self, QVector2D) +QtGui.QVector2D.length?4() -> float +QtGui.QVector2D.lengthSquared?4() -> float +QtGui.QVector2D.normalized?4() -> QVector2D +QtGui.QVector2D.normalize?4() +QtGui.QVector2D.dotProduct?4(QVector2D, QVector2D) -> float +QtGui.QVector2D.toVector3D?4() -> QVector3D +QtGui.QVector2D.toVector4D?4() -> QVector4D +QtGui.QVector2D.isNull?4() -> bool +QtGui.QVector2D.x?4() -> float +QtGui.QVector2D.y?4() -> float +QtGui.QVector2D.setX?4(float) +QtGui.QVector2D.setY?4(float) +QtGui.QVector2D.toPoint?4() -> QPoint +QtGui.QVector2D.toPointF?4() -> QPointF +QtGui.QVector2D.distanceToPoint?4(QVector2D) -> float +QtGui.QVector2D.distanceToLine?4(QVector2D, QVector2D) -> float +QtGui.QVector3D?1() +QtGui.QVector3D.__init__?1(self) +QtGui.QVector3D?1(float, float, float) +QtGui.QVector3D.__init__?1(self, float, float, float) +QtGui.QVector3D?1(QPoint) +QtGui.QVector3D.__init__?1(self, QPoint) +QtGui.QVector3D?1(QPointF) +QtGui.QVector3D.__init__?1(self, QPointF) +QtGui.QVector3D?1(QVector2D) +QtGui.QVector3D.__init__?1(self, QVector2D) +QtGui.QVector3D?1(QVector2D, float) +QtGui.QVector3D.__init__?1(self, QVector2D, float) +QtGui.QVector3D?1(QVector4D) +QtGui.QVector3D.__init__?1(self, QVector4D) +QtGui.QVector3D?1(QVector3D) +QtGui.QVector3D.__init__?1(self, QVector3D) +QtGui.QVector3D.length?4() -> float +QtGui.QVector3D.lengthSquared?4() -> float +QtGui.QVector3D.normalized?4() -> QVector3D +QtGui.QVector3D.normalize?4() +QtGui.QVector3D.dotProduct?4(QVector3D, QVector3D) -> float +QtGui.QVector3D.crossProduct?4(QVector3D, QVector3D) -> QVector3D +QtGui.QVector3D.normal?4(QVector3D, QVector3D) -> QVector3D +QtGui.QVector3D.normal?4(QVector3D, QVector3D, QVector3D) -> QVector3D +QtGui.QVector3D.distanceToPlane?4(QVector3D, QVector3D) -> float +QtGui.QVector3D.distanceToPlane?4(QVector3D, QVector3D, QVector3D) -> float +QtGui.QVector3D.distanceToLine?4(QVector3D, QVector3D) -> float +QtGui.QVector3D.toVector2D?4() -> QVector2D +QtGui.QVector3D.toVector4D?4() -> QVector4D +QtGui.QVector3D.isNull?4() -> bool +QtGui.QVector3D.x?4() -> float +QtGui.QVector3D.y?4() -> float +QtGui.QVector3D.z?4() -> float +QtGui.QVector3D.setX?4(float) +QtGui.QVector3D.setY?4(float) +QtGui.QVector3D.setZ?4(float) +QtGui.QVector3D.toPoint?4() -> QPoint +QtGui.QVector3D.toPointF?4() -> QPointF +QtGui.QVector3D.distanceToPoint?4(QVector3D) -> float +QtGui.QVector3D.project?4(QMatrix4x4, QMatrix4x4, QRect) -> QVector3D +QtGui.QVector3D.unproject?4(QMatrix4x4, QMatrix4x4, QRect) -> QVector3D +QtGui.QVector4D?1() +QtGui.QVector4D.__init__?1(self) +QtGui.QVector4D?1(float, float, float, float) +QtGui.QVector4D.__init__?1(self, float, float, float, float) +QtGui.QVector4D?1(QPoint) +QtGui.QVector4D.__init__?1(self, QPoint) +QtGui.QVector4D?1(QPointF) +QtGui.QVector4D.__init__?1(self, QPointF) +QtGui.QVector4D?1(QVector2D) +QtGui.QVector4D.__init__?1(self, QVector2D) +QtGui.QVector4D?1(QVector2D, float, float) +QtGui.QVector4D.__init__?1(self, QVector2D, float, float) +QtGui.QVector4D?1(QVector3D) +QtGui.QVector4D.__init__?1(self, QVector3D) +QtGui.QVector4D?1(QVector3D, float) +QtGui.QVector4D.__init__?1(self, QVector3D, float) +QtGui.QVector4D?1(QVector4D) +QtGui.QVector4D.__init__?1(self, QVector4D) +QtGui.QVector4D.length?4() -> float +QtGui.QVector4D.lengthSquared?4() -> float +QtGui.QVector4D.normalized?4() -> QVector4D +QtGui.QVector4D.normalize?4() +QtGui.QVector4D.dotProduct?4(QVector4D, QVector4D) -> float +QtGui.QVector4D.toVector2D?4() -> QVector2D +QtGui.QVector4D.toVector2DAffine?4() -> QVector2D +QtGui.QVector4D.toVector3D?4() -> QVector3D +QtGui.QVector4D.toVector3DAffine?4() -> QVector3D +QtGui.QVector4D.isNull?4() -> bool +QtGui.QVector4D.x?4() -> float +QtGui.QVector4D.y?4() -> float +QtGui.QVector4D.z?4() -> float +QtGui.QVector4D.w?4() -> float +QtGui.QVector4D.setX?4(float) +QtGui.QVector4D.setY?4(float) +QtGui.QVector4D.setZ?4(float) +QtGui.QVector4D.setW?4(float) +QtGui.QVector4D.toPoint?4() -> QPoint +QtGui.QVector4D.toPointF?4() -> QPointF +QtWidgets.QWIDGETSIZE_MAX?7 +QtWidgets.qApp?7 +QtWidgets.qDrawShadeLine?4(QPainter, int, int, int, int, QPalette, bool sunken=True, int lineWidth=1, int midLineWidth=0) +QtWidgets.qDrawShadeLine?4(QPainter, QPoint, QPoint, QPalette, bool sunken=True, int lineWidth=1, int midLineWidth=0) +QtWidgets.qDrawShadeRect?4(QPainter, int, int, int, int, QPalette, bool sunken=False, int lineWidth=1, int midLineWidth=0, QBrush fill=None) +QtWidgets.qDrawShadeRect?4(QPainter, QRect, QPalette, bool sunken=False, int lineWidth=1, int midLineWidth=0, QBrush fill=None) +QtWidgets.qDrawShadePanel?4(QPainter, int, int, int, int, QPalette, bool sunken=False, int lineWidth=1, QBrush fill=None) +QtWidgets.qDrawShadePanel?4(QPainter, QRect, QPalette, bool sunken=False, int lineWidth=1, QBrush fill=None) +QtWidgets.qDrawWinButton?4(QPainter, int, int, int, int, QPalette, bool sunken=False, QBrush fill=None) +QtWidgets.qDrawWinButton?4(QPainter, QRect, QPalette, bool sunken=False, QBrush fill=None) +QtWidgets.qDrawWinPanel?4(QPainter, int, int, int, int, QPalette, bool sunken=False, QBrush fill=None) +QtWidgets.qDrawWinPanel?4(QPainter, QRect, QPalette, bool sunken=False, QBrush fill=None) +QtWidgets.qDrawPlainRect?4(QPainter, int, int, int, int, QColor, int lineWidth=1, QBrush fill=None) +QtWidgets.qDrawPlainRect?4(QPainter, QRect, QColor, int lineWidth=1, QBrush fill=None) +QtWidgets.qDrawBorderPixmap?4(QPainter, QRect, QMargins, QPixmap) +QtWidgets.QWidget.RenderFlag?10 +QtWidgets.QWidget.RenderFlag.DrawWindowBackground?10 +QtWidgets.QWidget.RenderFlag.DrawChildren?10 +QtWidgets.QWidget.RenderFlag.IgnoreMask?10 +QtWidgets.QWidget?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QWidget.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QWidget.devType?4() -> int +QtWidgets.QWidget.style?4() -> QStyle +QtWidgets.QWidget.setStyle?4(QStyle) +QtWidgets.QWidget.isEnabledTo?4(QWidget) -> bool +QtWidgets.QWidget.setEnabled?4(bool) +QtWidgets.QWidget.setDisabled?4(bool) +QtWidgets.QWidget.setWindowModified?4(bool) +QtWidgets.QWidget.frameGeometry?4() -> QRect +QtWidgets.QWidget.normalGeometry?4() -> QRect +QtWidgets.QWidget.x?4() -> int +QtWidgets.QWidget.y?4() -> int +QtWidgets.QWidget.pos?4() -> QPoint +QtWidgets.QWidget.frameSize?4() -> QSize +QtWidgets.QWidget.childrenRect?4() -> QRect +QtWidgets.QWidget.childrenRegion?4() -> QRegion +QtWidgets.QWidget.minimumSize?4() -> QSize +QtWidgets.QWidget.maximumSize?4() -> QSize +QtWidgets.QWidget.setMinimumSize?4(int, int) +QtWidgets.QWidget.setMaximumSize?4(int, int) +QtWidgets.QWidget.setMinimumWidth?4(int) +QtWidgets.QWidget.setMinimumHeight?4(int) +QtWidgets.QWidget.setMaximumWidth?4(int) +QtWidgets.QWidget.setMaximumHeight?4(int) +QtWidgets.QWidget.sizeIncrement?4() -> QSize +QtWidgets.QWidget.setSizeIncrement?4(int, int) +QtWidgets.QWidget.baseSize?4() -> QSize +QtWidgets.QWidget.setBaseSize?4(int, int) +QtWidgets.QWidget.setFixedSize?4(QSize) +QtWidgets.QWidget.setFixedSize?4(int, int) +QtWidgets.QWidget.setFixedWidth?4(int) +QtWidgets.QWidget.setFixedHeight?4(int) +QtWidgets.QWidget.mapToGlobal?4(QPoint) -> QPoint +QtWidgets.QWidget.mapFromGlobal?4(QPoint) -> QPoint +QtWidgets.QWidget.mapToParent?4(QPoint) -> QPoint +QtWidgets.QWidget.mapFromParent?4(QPoint) -> QPoint +QtWidgets.QWidget.mapTo?4(QWidget, QPoint) -> QPoint +QtWidgets.QWidget.mapFrom?4(QWidget, QPoint) -> QPoint +QtWidgets.QWidget.window?4() -> QWidget +QtWidgets.QWidget.palette?4() -> QPalette +QtWidgets.QWidget.setPalette?4(QPalette) +QtWidgets.QWidget.setBackgroundRole?4(QPalette.ColorRole) +QtWidgets.QWidget.backgroundRole?4() -> QPalette.ColorRole +QtWidgets.QWidget.setForegroundRole?4(QPalette.ColorRole) +QtWidgets.QWidget.foregroundRole?4() -> QPalette.ColorRole +QtWidgets.QWidget.setFont?4(QFont) +QtWidgets.QWidget.cursor?4() -> QCursor +QtWidgets.QWidget.setCursor?4(QCursor) +QtWidgets.QWidget.unsetCursor?4() +QtWidgets.QWidget.setMask?4(QBitmap) +QtWidgets.QWidget.setMask?4(QRegion) +QtWidgets.QWidget.mask?4() -> QRegion +QtWidgets.QWidget.clearMask?4() +QtWidgets.QWidget.setWindowTitle?4(QString) +QtWidgets.QWidget.windowTitle?4() -> QString +QtWidgets.QWidget.setWindowIcon?4(QIcon) +QtWidgets.QWidget.windowIcon?4() -> QIcon +QtWidgets.QWidget.setWindowIconText?4(QString) +QtWidgets.QWidget.windowIconText?4() -> QString +QtWidgets.QWidget.setWindowRole?4(QString) +QtWidgets.QWidget.windowRole?4() -> QString +QtWidgets.QWidget.setWindowOpacity?4(float) +QtWidgets.QWidget.windowOpacity?4() -> float +QtWidgets.QWidget.isWindowModified?4() -> bool +QtWidgets.QWidget.setToolTip?4(QString) +QtWidgets.QWidget.toolTip?4() -> QString +QtWidgets.QWidget.setStatusTip?4(QString) +QtWidgets.QWidget.statusTip?4() -> QString +QtWidgets.QWidget.setWhatsThis?4(QString) +QtWidgets.QWidget.whatsThis?4() -> QString +QtWidgets.QWidget.accessibleName?4() -> QString +QtWidgets.QWidget.setAccessibleName?4(QString) +QtWidgets.QWidget.accessibleDescription?4() -> QString +QtWidgets.QWidget.setAccessibleDescription?4(QString) +QtWidgets.QWidget.setLayoutDirection?4(Qt.LayoutDirection) +QtWidgets.QWidget.layoutDirection?4() -> Qt.LayoutDirection +QtWidgets.QWidget.unsetLayoutDirection?4() +QtWidgets.QWidget.isRightToLeft?4() -> bool +QtWidgets.QWidget.isLeftToRight?4() -> bool +QtWidgets.QWidget.setFocus?4() +QtWidgets.QWidget.isActiveWindow?4() -> bool +QtWidgets.QWidget.activateWindow?4() +QtWidgets.QWidget.clearFocus?4() +QtWidgets.QWidget.setFocus?4(Qt.FocusReason) +QtWidgets.QWidget.focusPolicy?4() -> Qt.FocusPolicy +QtWidgets.QWidget.setFocusPolicy?4(Qt.FocusPolicy) +QtWidgets.QWidget.hasFocus?4() -> bool +QtWidgets.QWidget.setTabOrder?4(QWidget, QWidget) +QtWidgets.QWidget.setFocusProxy?4(QWidget) +QtWidgets.QWidget.focusProxy?4() -> QWidget +QtWidgets.QWidget.contextMenuPolicy?4() -> Qt.ContextMenuPolicy +QtWidgets.QWidget.setContextMenuPolicy?4(Qt.ContextMenuPolicy) +QtWidgets.QWidget.grabMouse?4() +QtWidgets.QWidget.grabMouse?4(QCursor) +QtWidgets.QWidget.releaseMouse?4() +QtWidgets.QWidget.grabKeyboard?4() +QtWidgets.QWidget.releaseKeyboard?4() +QtWidgets.QWidget.grabShortcut?4(QKeySequence, Qt.ShortcutContext context=Qt.WindowShortcut) -> int +QtWidgets.QWidget.releaseShortcut?4(int) +QtWidgets.QWidget.setShortcutEnabled?4(int, bool enabled=True) +QtWidgets.QWidget.mouseGrabber?4() -> QWidget +QtWidgets.QWidget.keyboardGrabber?4() -> QWidget +QtWidgets.QWidget.setUpdatesEnabled?4(bool) +QtWidgets.QWidget.update?4() +QtWidgets.QWidget.repaint?4() +QtWidgets.QWidget.update?4(QRect) +QtWidgets.QWidget.update?4(QRegion) +QtWidgets.QWidget.repaint?4(int, int, int, int) +QtWidgets.QWidget.repaint?4(QRect) +QtWidgets.QWidget.repaint?4(QRegion) +QtWidgets.QWidget.setVisible?4(bool) +QtWidgets.QWidget.setHidden?4(bool) +QtWidgets.QWidget.show?4() +QtWidgets.QWidget.hide?4() +QtWidgets.QWidget.showMinimized?4() +QtWidgets.QWidget.showMaximized?4() +QtWidgets.QWidget.showFullScreen?4() +QtWidgets.QWidget.showNormal?4() +QtWidgets.QWidget.close?4() -> bool +QtWidgets.QWidget.raise_?4() +QtWidgets.QWidget.lower?4() +QtWidgets.QWidget.stackUnder?4(QWidget) +QtWidgets.QWidget.move?4(QPoint) +QtWidgets.QWidget.resize?4(QSize) +QtWidgets.QWidget.setGeometry?4(QRect) +QtWidgets.QWidget.adjustSize?4() +QtWidgets.QWidget.isVisibleTo?4(QWidget) -> bool +QtWidgets.QWidget.isMinimized?4() -> bool +QtWidgets.QWidget.isMaximized?4() -> bool +QtWidgets.QWidget.isFullScreen?4() -> bool +QtWidgets.QWidget.windowState?4() -> Qt.WindowStates +QtWidgets.QWidget.setWindowState?4(Qt.WindowStates) +QtWidgets.QWidget.overrideWindowState?4(Qt.WindowStates) +QtWidgets.QWidget.sizeHint?4() -> QSize +QtWidgets.QWidget.minimumSizeHint?4() -> QSize +QtWidgets.QWidget.sizePolicy?4() -> QSizePolicy +QtWidgets.QWidget.setSizePolicy?4(QSizePolicy) +QtWidgets.QWidget.heightForWidth?4(int) -> int +QtWidgets.QWidget.visibleRegion?4() -> QRegion +QtWidgets.QWidget.setContentsMargins?4(int, int, int, int) +QtWidgets.QWidget.getContentsMargins?4() -> (int, int, int, int) +QtWidgets.QWidget.contentsRect?4() -> QRect +QtWidgets.QWidget.layout?4() -> QLayout +QtWidgets.QWidget.setLayout?4(QLayout) +QtWidgets.QWidget.updateGeometry?4() +QtWidgets.QWidget.setParent?4(QWidget) +QtWidgets.QWidget.setParent?4(QWidget, Qt.WindowFlags) +QtWidgets.QWidget.scroll?4(int, int) +QtWidgets.QWidget.scroll?4(int, int, QRect) +QtWidgets.QWidget.focusWidget?4() -> QWidget +QtWidgets.QWidget.nextInFocusChain?4() -> QWidget +QtWidgets.QWidget.acceptDrops?4() -> bool +QtWidgets.QWidget.setAcceptDrops?4(bool) +QtWidgets.QWidget.addAction?4(QAction) +QtWidgets.QWidget.addActions?4(unknown-type) +QtWidgets.QWidget.insertAction?4(QAction, QAction) +QtWidgets.QWidget.insertActions?4(QAction, unknown-type) +QtWidgets.QWidget.removeAction?4(QAction) +QtWidgets.QWidget.actions?4() -> unknown-type +QtWidgets.QWidget.setWindowFlags?4(Qt.WindowFlags) +QtWidgets.QWidget.overrideWindowFlags?4(Qt.WindowFlags) +QtWidgets.QWidget.find?4(quintptr) -> QWidget +QtWidgets.QWidget.childAt?4(QPoint) -> QWidget +QtWidgets.QWidget.setAttribute?4(Qt.WidgetAttribute, bool on=True) +QtWidgets.QWidget.paintEngine?4() -> QPaintEngine +QtWidgets.QWidget.ensurePolished?4() +QtWidgets.QWidget.isAncestorOf?4(QWidget) -> bool +QtWidgets.QWidget.customContextMenuRequested?4(QPoint) +QtWidgets.QWidget.event?4(QEvent) -> bool +QtWidgets.QWidget.mousePressEvent?4(QMouseEvent) +QtWidgets.QWidget.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QWidget.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QWidget.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QWidget.wheelEvent?4(QWheelEvent) +QtWidgets.QWidget.keyPressEvent?4(QKeyEvent) +QtWidgets.QWidget.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QWidget.focusInEvent?4(QFocusEvent) +QtWidgets.QWidget.focusOutEvent?4(QFocusEvent) +QtWidgets.QWidget.enterEvent?4(QEvent) +QtWidgets.QWidget.leaveEvent?4(QEvent) +QtWidgets.QWidget.paintEvent?4(QPaintEvent) +QtWidgets.QWidget.moveEvent?4(QMoveEvent) +QtWidgets.QWidget.resizeEvent?4(QResizeEvent) +QtWidgets.QWidget.closeEvent?4(QCloseEvent) +QtWidgets.QWidget.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QWidget.tabletEvent?4(QTabletEvent) +QtWidgets.QWidget.actionEvent?4(QActionEvent) +QtWidgets.QWidget.dragEnterEvent?4(QDragEnterEvent) +QtWidgets.QWidget.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QWidget.dragLeaveEvent?4(QDragLeaveEvent) +QtWidgets.QWidget.dropEvent?4(QDropEvent) +QtWidgets.QWidget.showEvent?4(QShowEvent) +QtWidgets.QWidget.hideEvent?4(QHideEvent) +QtWidgets.QWidget.changeEvent?4(QEvent) +QtWidgets.QWidget.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtWidgets.QWidget.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QWidget.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QWidget.updateMicroFocus?4() +QtWidgets.QWidget.create?4(quintptr window=0, bool initializeWindow=True, bool destroyOldWindow=True) +QtWidgets.QWidget.destroy?4(bool destroyWindow=True, bool destroySubWindows=True) +QtWidgets.QWidget.focusNextPrevChild?4(bool) -> bool +QtWidgets.QWidget.focusNextChild?4() -> bool +QtWidgets.QWidget.focusPreviousChild?4() -> bool +QtWidgets.QWidget.childAt?4(int, int) -> QWidget +QtWidgets.QWidget.windowType?4() -> Qt.WindowType +QtWidgets.QWidget.windowFlags?4() -> Qt.WindowFlags +QtWidgets.QWidget.winId?4() -> quintptr +QtWidgets.QWidget.isWindow?4() -> bool +QtWidgets.QWidget.isEnabled?4() -> bool +QtWidgets.QWidget.isModal?4() -> bool +QtWidgets.QWidget.minimumWidth?4() -> int +QtWidgets.QWidget.minimumHeight?4() -> int +QtWidgets.QWidget.maximumWidth?4() -> int +QtWidgets.QWidget.maximumHeight?4() -> int +QtWidgets.QWidget.setMinimumSize?4(QSize) +QtWidgets.QWidget.setMaximumSize?4(QSize) +QtWidgets.QWidget.setSizeIncrement?4(QSize) +QtWidgets.QWidget.setBaseSize?4(QSize) +QtWidgets.QWidget.font?4() -> QFont +QtWidgets.QWidget.fontMetrics?4() -> QFontMetrics +QtWidgets.QWidget.fontInfo?4() -> QFontInfo +QtWidgets.QWidget.setMouseTracking?4(bool) +QtWidgets.QWidget.hasMouseTracking?4() -> bool +QtWidgets.QWidget.underMouse?4() -> bool +QtWidgets.QWidget.updatesEnabled?4() -> bool +QtWidgets.QWidget.update?4(int, int, int, int) +QtWidgets.QWidget.isVisible?4() -> bool +QtWidgets.QWidget.isHidden?4() -> bool +QtWidgets.QWidget.move?4(int, int) +QtWidgets.QWidget.resize?4(int, int) +QtWidgets.QWidget.setGeometry?4(int, int, int, int) +QtWidgets.QWidget.rect?4() -> QRect +QtWidgets.QWidget.geometry?4() -> QRect +QtWidgets.QWidget.size?4() -> QSize +QtWidgets.QWidget.width?4() -> int +QtWidgets.QWidget.height?4() -> int +QtWidgets.QWidget.parentWidget?4() -> QWidget +QtWidgets.QWidget.setSizePolicy?4(QSizePolicy.Policy, QSizePolicy.Policy) +QtWidgets.QWidget.testAttribute?4(Qt.WidgetAttribute) -> bool +QtWidgets.QWidget.windowModality?4() -> Qt.WindowModality +QtWidgets.QWidget.setWindowModality?4(Qt.WindowModality) +QtWidgets.QWidget.autoFillBackground?4() -> bool +QtWidgets.QWidget.setAutoFillBackground?4(bool) +QtWidgets.QWidget.setStyleSheet?4(QString) +QtWidgets.QWidget.styleSheet?4() -> QString +QtWidgets.QWidget.setShortcutAutoRepeat?4(int, bool enabled=True) +QtWidgets.QWidget.saveGeometry?4() -> QByteArray +QtWidgets.QWidget.restoreGeometry?4(QByteArray) -> bool +QtWidgets.QWidget.render?4(QPaintDevice, QPoint targetOffset=QPoint(), QRegion sourceRegion=QRegion(), QWidget.RenderFlags flags=QWidget.RenderFlags(QWidget.RenderFlag.DrawWindowBackground|QWidget.RenderFlag.DrawChildren)) +QtWidgets.QWidget.render?4(QPainter, QPoint targetOffset=QPoint(), QRegion sourceRegion=QRegion(), QWidget.RenderFlags flags=QWidget.RenderFlags(QWidget.RenderFlag.DrawWindowBackground|QWidget.RenderFlag.DrawChildren)) +QtWidgets.QWidget.setLocale?4(QLocale) +QtWidgets.QWidget.locale?4() -> QLocale +QtWidgets.QWidget.unsetLocale?4() +QtWidgets.QWidget.effectiveWinId?4() -> quintptr +QtWidgets.QWidget.nativeParentWidget?4() -> QWidget +QtWidgets.QWidget.setWindowFilePath?4(QString) +QtWidgets.QWidget.windowFilePath?4() -> QString +QtWidgets.QWidget.graphicsProxyWidget?4() -> QGraphicsProxyWidget +QtWidgets.QWidget.graphicsEffect?4() -> QGraphicsEffect +QtWidgets.QWidget.setGraphicsEffect?4(QGraphicsEffect) +QtWidgets.QWidget.grabGesture?4(Qt.GestureType, Qt.GestureFlags flags=Qt.GestureFlags()) +QtWidgets.QWidget.ungrabGesture?4(Qt.GestureType) +QtWidgets.QWidget.setContentsMargins?4(QMargins) +QtWidgets.QWidget.contentsMargins?4() -> QMargins +QtWidgets.QWidget.previousInFocusChain?4() -> QWidget +QtWidgets.QWidget.inputMethodHints?4() -> Qt.InputMethodHints +QtWidgets.QWidget.setInputMethodHints?4(Qt.InputMethodHints) +QtWidgets.QWidget.hasHeightForWidth?4() -> bool +QtWidgets.QWidget.grab?4(QRect rectangle=QRect(QPoint(0, 0), QSize(-1, -1))) -> QPixmap +QtWidgets.QWidget.createWindowContainer?4(QWindow, QWidget parent=None, Qt.WindowFlags flags=0) -> Any +QtWidgets.QWidget.windowHandle?4() -> QWindow +QtWidgets.QWidget.nativeEvent?4(QByteArray, PyQt5.sip.voidptr) -> (bool, int) +QtWidgets.QWidget.sharedPainter?4() -> QPainter +QtWidgets.QWidget.initPainter?4(QPainter) +QtWidgets.QWidget.setToolTipDuration?4(int) +QtWidgets.QWidget.toolTipDuration?4() -> int +QtWidgets.QWidget.windowTitleChanged?4(QString) +QtWidgets.QWidget.windowIconChanged?4(QIcon) +QtWidgets.QWidget.windowIconTextChanged?4(QString) +QtWidgets.QWidget.setTabletTracking?4(bool) +QtWidgets.QWidget.hasTabletTracking?4() -> bool +QtWidgets.QWidget.setWindowFlag?4(Qt.WindowType, bool on=True) +QtWidgets.QWidget.screen?4() -> QScreen +QtWidgets.QAbstractButton?1(QWidget parent=None) +QtWidgets.QAbstractButton.__init__?1(self, QWidget parent=None) +QtWidgets.QAbstractButton.setAutoRepeatDelay?4(int) +QtWidgets.QAbstractButton.autoRepeatDelay?4() -> int +QtWidgets.QAbstractButton.setAutoRepeatInterval?4(int) +QtWidgets.QAbstractButton.autoRepeatInterval?4() -> int +QtWidgets.QAbstractButton.setText?4(QString) +QtWidgets.QAbstractButton.text?4() -> QString +QtWidgets.QAbstractButton.setIcon?4(QIcon) +QtWidgets.QAbstractButton.icon?4() -> QIcon +QtWidgets.QAbstractButton.iconSize?4() -> QSize +QtWidgets.QAbstractButton.setShortcut?4(QKeySequence) +QtWidgets.QAbstractButton.shortcut?4() -> QKeySequence +QtWidgets.QAbstractButton.setCheckable?4(bool) +QtWidgets.QAbstractButton.isCheckable?4() -> bool +QtWidgets.QAbstractButton.isChecked?4() -> bool +QtWidgets.QAbstractButton.setDown?4(bool) +QtWidgets.QAbstractButton.isDown?4() -> bool +QtWidgets.QAbstractButton.setAutoRepeat?4(bool) +QtWidgets.QAbstractButton.autoRepeat?4() -> bool +QtWidgets.QAbstractButton.setAutoExclusive?4(bool) +QtWidgets.QAbstractButton.autoExclusive?4() -> bool +QtWidgets.QAbstractButton.group?4() -> QButtonGroup +QtWidgets.QAbstractButton.setIconSize?4(QSize) +QtWidgets.QAbstractButton.animateClick?4(int msecs=100) +QtWidgets.QAbstractButton.click?4() +QtWidgets.QAbstractButton.toggle?4() +QtWidgets.QAbstractButton.setChecked?4(bool) +QtWidgets.QAbstractButton.pressed?4() +QtWidgets.QAbstractButton.released?4() +QtWidgets.QAbstractButton.clicked?4(bool checked=False) +QtWidgets.QAbstractButton.toggled?4(bool) +QtWidgets.QAbstractButton.paintEvent?4(QPaintEvent) +QtWidgets.QAbstractButton.hitButton?4(QPoint) -> bool +QtWidgets.QAbstractButton.checkStateSet?4() +QtWidgets.QAbstractButton.nextCheckState?4() +QtWidgets.QAbstractButton.event?4(QEvent) -> bool +QtWidgets.QAbstractButton.keyPressEvent?4(QKeyEvent) +QtWidgets.QAbstractButton.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QAbstractButton.mousePressEvent?4(QMouseEvent) +QtWidgets.QAbstractButton.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QAbstractButton.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QAbstractButton.focusInEvent?4(QFocusEvent) +QtWidgets.QAbstractButton.focusOutEvent?4(QFocusEvent) +QtWidgets.QAbstractButton.changeEvent?4(QEvent) +QtWidgets.QAbstractButton.timerEvent?4(QTimerEvent) +QtWidgets.QAbstractItemDelegate.EndEditHint?10 +QtWidgets.QAbstractItemDelegate.EndEditHint.NoHint?10 +QtWidgets.QAbstractItemDelegate.EndEditHint.EditNextItem?10 +QtWidgets.QAbstractItemDelegate.EndEditHint.EditPreviousItem?10 +QtWidgets.QAbstractItemDelegate.EndEditHint.SubmitModelCache?10 +QtWidgets.QAbstractItemDelegate.EndEditHint.RevertModelCache?10 +QtWidgets.QAbstractItemDelegate?1(QObject parent=None) +QtWidgets.QAbstractItemDelegate.__init__?1(self, QObject parent=None) +QtWidgets.QAbstractItemDelegate.paint?4(QPainter, QStyleOptionViewItem, QModelIndex) +QtWidgets.QAbstractItemDelegate.sizeHint?4(QStyleOptionViewItem, QModelIndex) -> QSize +QtWidgets.QAbstractItemDelegate.createEditor?4(QWidget, QStyleOptionViewItem, QModelIndex) -> QWidget +QtWidgets.QAbstractItemDelegate.setEditorData?4(QWidget, QModelIndex) +QtWidgets.QAbstractItemDelegate.setModelData?4(QWidget, QAbstractItemModel, QModelIndex) +QtWidgets.QAbstractItemDelegate.updateEditorGeometry?4(QWidget, QStyleOptionViewItem, QModelIndex) +QtWidgets.QAbstractItemDelegate.destroyEditor?4(QWidget, QModelIndex) +QtWidgets.QAbstractItemDelegate.editorEvent?4(QEvent, QAbstractItemModel, QStyleOptionViewItem, QModelIndex) -> bool +QtWidgets.QAbstractItemDelegate.helpEvent?4(QHelpEvent, QAbstractItemView, QStyleOptionViewItem, QModelIndex) -> bool +QtWidgets.QAbstractItemDelegate.commitData?4(QWidget) +QtWidgets.QAbstractItemDelegate.closeEditor?4(QWidget, QAbstractItemDelegate.EndEditHint hint=QAbstractItemDelegate.NoHint) +QtWidgets.QAbstractItemDelegate.sizeHintChanged?4(QModelIndex) +QtWidgets.QFrame.StyleMask?10 +QtWidgets.QFrame.StyleMask.Shadow_Mask?10 +QtWidgets.QFrame.StyleMask.Shape_Mask?10 +QtWidgets.QFrame.Shape?10 +QtWidgets.QFrame.Shape.NoFrame?10 +QtWidgets.QFrame.Shape.Box?10 +QtWidgets.QFrame.Shape.Panel?10 +QtWidgets.QFrame.Shape.WinPanel?10 +QtWidgets.QFrame.Shape.HLine?10 +QtWidgets.QFrame.Shape.VLine?10 +QtWidgets.QFrame.Shape.StyledPanel?10 +QtWidgets.QFrame.Shadow?10 +QtWidgets.QFrame.Shadow.Plain?10 +QtWidgets.QFrame.Shadow.Raised?10 +QtWidgets.QFrame.Shadow.Sunken?10 +QtWidgets.QFrame?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QFrame.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QFrame.frameStyle?4() -> int +QtWidgets.QFrame.setFrameStyle?4(int) +QtWidgets.QFrame.frameWidth?4() -> int +QtWidgets.QFrame.sizeHint?4() -> QSize +QtWidgets.QFrame.frameShape?4() -> QFrame.Shape +QtWidgets.QFrame.setFrameShape?4(QFrame.Shape) +QtWidgets.QFrame.frameShadow?4() -> QFrame.Shadow +QtWidgets.QFrame.setFrameShadow?4(QFrame.Shadow) +QtWidgets.QFrame.lineWidth?4() -> int +QtWidgets.QFrame.setLineWidth?4(int) +QtWidgets.QFrame.midLineWidth?4() -> int +QtWidgets.QFrame.setMidLineWidth?4(int) +QtWidgets.QFrame.frameRect?4() -> QRect +QtWidgets.QFrame.setFrameRect?4(QRect) +QtWidgets.QFrame.event?4(QEvent) -> bool +QtWidgets.QFrame.paintEvent?4(QPaintEvent) +QtWidgets.QFrame.changeEvent?4(QEvent) +QtWidgets.QFrame.drawFrame?4(QPainter) +QtWidgets.QFrame.initStyleOption?4(QStyleOptionFrame) +QtWidgets.QAbstractScrollArea.SizeAdjustPolicy?10 +QtWidgets.QAbstractScrollArea.SizeAdjustPolicy.AdjustIgnored?10 +QtWidgets.QAbstractScrollArea.SizeAdjustPolicy.AdjustToContentsOnFirstShow?10 +QtWidgets.QAbstractScrollArea.SizeAdjustPolicy.AdjustToContents?10 +QtWidgets.QAbstractScrollArea?1(QWidget parent=None) +QtWidgets.QAbstractScrollArea.__init__?1(self, QWidget parent=None) +QtWidgets.QAbstractScrollArea.verticalScrollBarPolicy?4() -> Qt.ScrollBarPolicy +QtWidgets.QAbstractScrollArea.setVerticalScrollBarPolicy?4(Qt.ScrollBarPolicy) +QtWidgets.QAbstractScrollArea.verticalScrollBar?4() -> QScrollBar +QtWidgets.QAbstractScrollArea.horizontalScrollBarPolicy?4() -> Qt.ScrollBarPolicy +QtWidgets.QAbstractScrollArea.setHorizontalScrollBarPolicy?4(Qt.ScrollBarPolicy) +QtWidgets.QAbstractScrollArea.horizontalScrollBar?4() -> QScrollBar +QtWidgets.QAbstractScrollArea.viewport?4() -> QWidget +QtWidgets.QAbstractScrollArea.maximumViewportSize?4() -> QSize +QtWidgets.QAbstractScrollArea.minimumSizeHint?4() -> QSize +QtWidgets.QAbstractScrollArea.sizeHint?4() -> QSize +QtWidgets.QAbstractScrollArea.setViewportMargins?4(int, int, int, int) +QtWidgets.QAbstractScrollArea.setViewportMargins?4(QMargins) +QtWidgets.QAbstractScrollArea.viewportMargins?4() -> QMargins +QtWidgets.QAbstractScrollArea.viewportSizeHint?4() -> QSize +QtWidgets.QAbstractScrollArea.event?4(QEvent) -> bool +QtWidgets.QAbstractScrollArea.viewportEvent?4(QEvent) -> bool +QtWidgets.QAbstractScrollArea.resizeEvent?4(QResizeEvent) +QtWidgets.QAbstractScrollArea.paintEvent?4(QPaintEvent) +QtWidgets.QAbstractScrollArea.mousePressEvent?4(QMouseEvent) +QtWidgets.QAbstractScrollArea.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QAbstractScrollArea.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QAbstractScrollArea.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QAbstractScrollArea.wheelEvent?4(QWheelEvent) +QtWidgets.QAbstractScrollArea.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QAbstractScrollArea.dragEnterEvent?4(QDragEnterEvent) +QtWidgets.QAbstractScrollArea.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QAbstractScrollArea.dragLeaveEvent?4(QDragLeaveEvent) +QtWidgets.QAbstractScrollArea.dropEvent?4(QDropEvent) +QtWidgets.QAbstractScrollArea.keyPressEvent?4(QKeyEvent) +QtWidgets.QAbstractScrollArea.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QAbstractScrollArea.scrollContentsBy?4(int, int) +QtWidgets.QAbstractScrollArea.setVerticalScrollBar?4(QScrollBar) +QtWidgets.QAbstractScrollArea.setHorizontalScrollBar?4(QScrollBar) +QtWidgets.QAbstractScrollArea.cornerWidget?4() -> QWidget +QtWidgets.QAbstractScrollArea.setCornerWidget?4(QWidget) +QtWidgets.QAbstractScrollArea.addScrollBarWidget?4(QWidget, Qt.Alignment) +QtWidgets.QAbstractScrollArea.scrollBarWidgets?4(Qt.Alignment) -> unknown-type +QtWidgets.QAbstractScrollArea.setViewport?4(QWidget) +QtWidgets.QAbstractScrollArea.setupViewport?4(QWidget) +QtWidgets.QAbstractScrollArea.sizeAdjustPolicy?4() -> QAbstractScrollArea.SizeAdjustPolicy +QtWidgets.QAbstractScrollArea.setSizeAdjustPolicy?4(QAbstractScrollArea.SizeAdjustPolicy) +QtWidgets.QAbstractItemView.DropIndicatorPosition?10 +QtWidgets.QAbstractItemView.DropIndicatorPosition.OnItem?10 +QtWidgets.QAbstractItemView.DropIndicatorPosition.AboveItem?10 +QtWidgets.QAbstractItemView.DropIndicatorPosition.BelowItem?10 +QtWidgets.QAbstractItemView.DropIndicatorPosition.OnViewport?10 +QtWidgets.QAbstractItemView.State?10 +QtWidgets.QAbstractItemView.State.NoState?10 +QtWidgets.QAbstractItemView.State.DraggingState?10 +QtWidgets.QAbstractItemView.State.DragSelectingState?10 +QtWidgets.QAbstractItemView.State.EditingState?10 +QtWidgets.QAbstractItemView.State.ExpandingState?10 +QtWidgets.QAbstractItemView.State.CollapsingState?10 +QtWidgets.QAbstractItemView.State.AnimatingState?10 +QtWidgets.QAbstractItemView.CursorAction?10 +QtWidgets.QAbstractItemView.CursorAction.MoveUp?10 +QtWidgets.QAbstractItemView.CursorAction.MoveDown?10 +QtWidgets.QAbstractItemView.CursorAction.MoveLeft?10 +QtWidgets.QAbstractItemView.CursorAction.MoveRight?10 +QtWidgets.QAbstractItemView.CursorAction.MoveHome?10 +QtWidgets.QAbstractItemView.CursorAction.MoveEnd?10 +QtWidgets.QAbstractItemView.CursorAction.MovePageUp?10 +QtWidgets.QAbstractItemView.CursorAction.MovePageDown?10 +QtWidgets.QAbstractItemView.CursorAction.MoveNext?10 +QtWidgets.QAbstractItemView.CursorAction.MovePrevious?10 +QtWidgets.QAbstractItemView.SelectionMode?10 +QtWidgets.QAbstractItemView.SelectionMode.NoSelection?10 +QtWidgets.QAbstractItemView.SelectionMode.SingleSelection?10 +QtWidgets.QAbstractItemView.SelectionMode.MultiSelection?10 +QtWidgets.QAbstractItemView.SelectionMode.ExtendedSelection?10 +QtWidgets.QAbstractItemView.SelectionMode.ContiguousSelection?10 +QtWidgets.QAbstractItemView.SelectionBehavior?10 +QtWidgets.QAbstractItemView.SelectionBehavior.SelectItems?10 +QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows?10 +QtWidgets.QAbstractItemView.SelectionBehavior.SelectColumns?10 +QtWidgets.QAbstractItemView.ScrollMode?10 +QtWidgets.QAbstractItemView.ScrollMode.ScrollPerItem?10 +QtWidgets.QAbstractItemView.ScrollMode.ScrollPerPixel?10 +QtWidgets.QAbstractItemView.ScrollHint?10 +QtWidgets.QAbstractItemView.ScrollHint.EnsureVisible?10 +QtWidgets.QAbstractItemView.ScrollHint.PositionAtTop?10 +QtWidgets.QAbstractItemView.ScrollHint.PositionAtBottom?10 +QtWidgets.QAbstractItemView.ScrollHint.PositionAtCenter?10 +QtWidgets.QAbstractItemView.EditTrigger?10 +QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers?10 +QtWidgets.QAbstractItemView.EditTrigger.CurrentChanged?10 +QtWidgets.QAbstractItemView.EditTrigger.DoubleClicked?10 +QtWidgets.QAbstractItemView.EditTrigger.SelectedClicked?10 +QtWidgets.QAbstractItemView.EditTrigger.EditKeyPressed?10 +QtWidgets.QAbstractItemView.EditTrigger.AnyKeyPressed?10 +QtWidgets.QAbstractItemView.EditTrigger.AllEditTriggers?10 +QtWidgets.QAbstractItemView.DragDropMode?10 +QtWidgets.QAbstractItemView.DragDropMode.NoDragDrop?10 +QtWidgets.QAbstractItemView.DragDropMode.DragOnly?10 +QtWidgets.QAbstractItemView.DragDropMode.DropOnly?10 +QtWidgets.QAbstractItemView.DragDropMode.DragDrop?10 +QtWidgets.QAbstractItemView.DragDropMode.InternalMove?10 +QtWidgets.QAbstractItemView?1(QWidget parent=None) +QtWidgets.QAbstractItemView.__init__?1(self, QWidget parent=None) +QtWidgets.QAbstractItemView.setModel?4(QAbstractItemModel) +QtWidgets.QAbstractItemView.model?4() -> QAbstractItemModel +QtWidgets.QAbstractItemView.setSelectionModel?4(QItemSelectionModel) +QtWidgets.QAbstractItemView.selectionModel?4() -> QItemSelectionModel +QtWidgets.QAbstractItemView.setItemDelegate?4(QAbstractItemDelegate) +QtWidgets.QAbstractItemView.itemDelegate?4() -> QAbstractItemDelegate +QtWidgets.QAbstractItemView.setSelectionMode?4(QAbstractItemView.SelectionMode) +QtWidgets.QAbstractItemView.selectionMode?4() -> QAbstractItemView.SelectionMode +QtWidgets.QAbstractItemView.setSelectionBehavior?4(QAbstractItemView.SelectionBehavior) +QtWidgets.QAbstractItemView.selectionBehavior?4() -> QAbstractItemView.SelectionBehavior +QtWidgets.QAbstractItemView.currentIndex?4() -> QModelIndex +QtWidgets.QAbstractItemView.rootIndex?4() -> QModelIndex +QtWidgets.QAbstractItemView.setEditTriggers?4(QAbstractItemView.EditTriggers) +QtWidgets.QAbstractItemView.editTriggers?4() -> QAbstractItemView.EditTriggers +QtWidgets.QAbstractItemView.setAutoScroll?4(bool) +QtWidgets.QAbstractItemView.hasAutoScroll?4() -> bool +QtWidgets.QAbstractItemView.setTabKeyNavigation?4(bool) +QtWidgets.QAbstractItemView.tabKeyNavigation?4() -> bool +QtWidgets.QAbstractItemView.setDropIndicatorShown?4(bool) +QtWidgets.QAbstractItemView.showDropIndicator?4() -> bool +QtWidgets.QAbstractItemView.setDragEnabled?4(bool) +QtWidgets.QAbstractItemView.dragEnabled?4() -> bool +QtWidgets.QAbstractItemView.setAlternatingRowColors?4(bool) +QtWidgets.QAbstractItemView.alternatingRowColors?4() -> bool +QtWidgets.QAbstractItemView.setIconSize?4(QSize) +QtWidgets.QAbstractItemView.iconSize?4() -> QSize +QtWidgets.QAbstractItemView.setTextElideMode?4(Qt.TextElideMode) +QtWidgets.QAbstractItemView.textElideMode?4() -> Qt.TextElideMode +QtWidgets.QAbstractItemView.keyboardSearch?4(QString) +QtWidgets.QAbstractItemView.visualRect?4(QModelIndex) -> QRect +QtWidgets.QAbstractItemView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) +QtWidgets.QAbstractItemView.indexAt?4(QPoint) -> QModelIndex +QtWidgets.QAbstractItemView.sizeHintForIndex?4(QModelIndex) -> QSize +QtWidgets.QAbstractItemView.sizeHintForRow?4(int) -> int +QtWidgets.QAbstractItemView.sizeHintForColumn?4(int) -> int +QtWidgets.QAbstractItemView.openPersistentEditor?4(QModelIndex) +QtWidgets.QAbstractItemView.closePersistentEditor?4(QModelIndex) +QtWidgets.QAbstractItemView.setIndexWidget?4(QModelIndex, QWidget) +QtWidgets.QAbstractItemView.indexWidget?4(QModelIndex) -> QWidget +QtWidgets.QAbstractItemView.reset?4() +QtWidgets.QAbstractItemView.setRootIndex?4(QModelIndex) +QtWidgets.QAbstractItemView.selectAll?4() +QtWidgets.QAbstractItemView.edit?4(QModelIndex) +QtWidgets.QAbstractItemView.clearSelection?4() +QtWidgets.QAbstractItemView.setCurrentIndex?4(QModelIndex) +QtWidgets.QAbstractItemView.scrollToTop?4() +QtWidgets.QAbstractItemView.scrollToBottom?4() +QtWidgets.QAbstractItemView.update?4() +QtWidgets.QAbstractItemView.update?4(QModelIndex) +QtWidgets.QAbstractItemView.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) +QtWidgets.QAbstractItemView.rowsInserted?4(QModelIndex, int, int) +QtWidgets.QAbstractItemView.rowsAboutToBeRemoved?4(QModelIndex, int, int) +QtWidgets.QAbstractItemView.selectionChanged?4(QItemSelection, QItemSelection) +QtWidgets.QAbstractItemView.currentChanged?4(QModelIndex, QModelIndex) +QtWidgets.QAbstractItemView.updateEditorData?4() +QtWidgets.QAbstractItemView.updateEditorGeometries?4() +QtWidgets.QAbstractItemView.updateGeometries?4() +QtWidgets.QAbstractItemView.verticalScrollbarAction?4(int) +QtWidgets.QAbstractItemView.horizontalScrollbarAction?4(int) +QtWidgets.QAbstractItemView.verticalScrollbarValueChanged?4(int) +QtWidgets.QAbstractItemView.horizontalScrollbarValueChanged?4(int) +QtWidgets.QAbstractItemView.closeEditor?4(QWidget, QAbstractItemDelegate.EndEditHint) +QtWidgets.QAbstractItemView.commitData?4(QWidget) +QtWidgets.QAbstractItemView.editorDestroyed?4(QObject) +QtWidgets.QAbstractItemView.pressed?4(QModelIndex) +QtWidgets.QAbstractItemView.clicked?4(QModelIndex) +QtWidgets.QAbstractItemView.doubleClicked?4(QModelIndex) +QtWidgets.QAbstractItemView.activated?4(QModelIndex) +QtWidgets.QAbstractItemView.entered?4(QModelIndex) +QtWidgets.QAbstractItemView.viewportEntered?4() +QtWidgets.QAbstractItemView.iconSizeChanged?4(QSize) +QtWidgets.QAbstractItemView.moveCursor?4(QAbstractItemView.CursorAction, Qt.KeyboardModifiers) -> QModelIndex +QtWidgets.QAbstractItemView.horizontalOffset?4() -> int +QtWidgets.QAbstractItemView.verticalOffset?4() -> int +QtWidgets.QAbstractItemView.isIndexHidden?4(QModelIndex) -> bool +QtWidgets.QAbstractItemView.setSelection?4(QRect, QItemSelectionModel.SelectionFlags) +QtWidgets.QAbstractItemView.visualRegionForSelection?4(QItemSelection) -> QRegion +QtWidgets.QAbstractItemView.selectedIndexes?4() -> unknown-type +QtWidgets.QAbstractItemView.edit?4(QModelIndex, QAbstractItemView.EditTrigger, QEvent) -> bool +QtWidgets.QAbstractItemView.selectionCommand?4(QModelIndex, QEvent event=None) -> QItemSelectionModel.SelectionFlags +QtWidgets.QAbstractItemView.startDrag?4(Qt.DropActions) +QtWidgets.QAbstractItemView.viewOptions?4() -> QStyleOptionViewItem +QtWidgets.QAbstractItemView.state?4() -> QAbstractItemView.State +QtWidgets.QAbstractItemView.setState?4(QAbstractItemView.State) +QtWidgets.QAbstractItemView.scheduleDelayedItemsLayout?4() +QtWidgets.QAbstractItemView.executeDelayedItemsLayout?4() +QtWidgets.QAbstractItemView.scrollDirtyRegion?4(int, int) +QtWidgets.QAbstractItemView.setDirtyRegion?4(QRegion) +QtWidgets.QAbstractItemView.dirtyRegionOffset?4() -> QPoint +QtWidgets.QAbstractItemView.event?4(QEvent) -> bool +QtWidgets.QAbstractItemView.viewportEvent?4(QEvent) -> bool +QtWidgets.QAbstractItemView.mousePressEvent?4(QMouseEvent) +QtWidgets.QAbstractItemView.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QAbstractItemView.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QAbstractItemView.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QAbstractItemView.dragEnterEvent?4(QDragEnterEvent) +QtWidgets.QAbstractItemView.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QAbstractItemView.dragLeaveEvent?4(QDragLeaveEvent) +QtWidgets.QAbstractItemView.dropEvent?4(QDropEvent) +QtWidgets.QAbstractItemView.focusInEvent?4(QFocusEvent) +QtWidgets.QAbstractItemView.focusOutEvent?4(QFocusEvent) +QtWidgets.QAbstractItemView.keyPressEvent?4(QKeyEvent) +QtWidgets.QAbstractItemView.resizeEvent?4(QResizeEvent) +QtWidgets.QAbstractItemView.timerEvent?4(QTimerEvent) +QtWidgets.QAbstractItemView.dropIndicatorPosition?4() -> QAbstractItemView.DropIndicatorPosition +QtWidgets.QAbstractItemView.setVerticalScrollMode?4(QAbstractItemView.ScrollMode) +QtWidgets.QAbstractItemView.verticalScrollMode?4() -> QAbstractItemView.ScrollMode +QtWidgets.QAbstractItemView.setHorizontalScrollMode?4(QAbstractItemView.ScrollMode) +QtWidgets.QAbstractItemView.horizontalScrollMode?4() -> QAbstractItemView.ScrollMode +QtWidgets.QAbstractItemView.setDragDropOverwriteMode?4(bool) +QtWidgets.QAbstractItemView.dragDropOverwriteMode?4() -> bool +QtWidgets.QAbstractItemView.setDragDropMode?4(QAbstractItemView.DragDropMode) +QtWidgets.QAbstractItemView.dragDropMode?4() -> QAbstractItemView.DragDropMode +QtWidgets.QAbstractItemView.setItemDelegateForRow?4(int, QAbstractItemDelegate) +QtWidgets.QAbstractItemView.itemDelegateForRow?4(int) -> QAbstractItemDelegate +QtWidgets.QAbstractItemView.setItemDelegateForColumn?4(int, QAbstractItemDelegate) +QtWidgets.QAbstractItemView.itemDelegateForColumn?4(int) -> QAbstractItemDelegate +QtWidgets.QAbstractItemView.itemDelegate?4(QModelIndex) -> QAbstractItemDelegate +QtWidgets.QAbstractItemView.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QAbstractItemView.setAutoScrollMargin?4(int) +QtWidgets.QAbstractItemView.autoScrollMargin?4() -> int +QtWidgets.QAbstractItemView.focusNextPrevChild?4(bool) -> bool +QtWidgets.QAbstractItemView.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QAbstractItemView.viewportSizeHint?4() -> QSize +QtWidgets.QAbstractItemView.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QAbstractItemView.setDefaultDropAction?4(Qt.DropAction) +QtWidgets.QAbstractItemView.defaultDropAction?4() -> Qt.DropAction +QtWidgets.QAbstractItemView.resetVerticalScrollMode?4() +QtWidgets.QAbstractItemView.resetHorizontalScrollMode?4() +QtWidgets.QAbstractItemView.isPersistentEditorOpen?4(QModelIndex) -> bool +QtWidgets.QAbstractItemView.EditTriggers?1() +QtWidgets.QAbstractItemView.EditTriggers.__init__?1(self) +QtWidgets.QAbstractItemView.EditTriggers?1(int) +QtWidgets.QAbstractItemView.EditTriggers.__init__?1(self, int) +QtWidgets.QAbstractItemView.EditTriggers?1(QAbstractItemView.EditTriggers) +QtWidgets.QAbstractItemView.EditTriggers.__init__?1(self, QAbstractItemView.EditTriggers) +QtWidgets.QAbstractSlider.SliderChange?10 +QtWidgets.QAbstractSlider.SliderChange.SliderRangeChange?10 +QtWidgets.QAbstractSlider.SliderChange.SliderOrientationChange?10 +QtWidgets.QAbstractSlider.SliderChange.SliderStepsChange?10 +QtWidgets.QAbstractSlider.SliderChange.SliderValueChange?10 +QtWidgets.QAbstractSlider.SliderAction?10 +QtWidgets.QAbstractSlider.SliderAction.SliderNoAction?10 +QtWidgets.QAbstractSlider.SliderAction.SliderSingleStepAdd?10 +QtWidgets.QAbstractSlider.SliderAction.SliderSingleStepSub?10 +QtWidgets.QAbstractSlider.SliderAction.SliderPageStepAdd?10 +QtWidgets.QAbstractSlider.SliderAction.SliderPageStepSub?10 +QtWidgets.QAbstractSlider.SliderAction.SliderToMinimum?10 +QtWidgets.QAbstractSlider.SliderAction.SliderToMaximum?10 +QtWidgets.QAbstractSlider.SliderAction.SliderMove?10 +QtWidgets.QAbstractSlider?1(QWidget parent=None) +QtWidgets.QAbstractSlider.__init__?1(self, QWidget parent=None) +QtWidgets.QAbstractSlider.orientation?4() -> Qt.Orientation +QtWidgets.QAbstractSlider.setMinimum?4(int) +QtWidgets.QAbstractSlider.minimum?4() -> int +QtWidgets.QAbstractSlider.setMaximum?4(int) +QtWidgets.QAbstractSlider.maximum?4() -> int +QtWidgets.QAbstractSlider.setRange?4(int, int) +QtWidgets.QAbstractSlider.setSingleStep?4(int) +QtWidgets.QAbstractSlider.singleStep?4() -> int +QtWidgets.QAbstractSlider.setPageStep?4(int) +QtWidgets.QAbstractSlider.pageStep?4() -> int +QtWidgets.QAbstractSlider.setTracking?4(bool) +QtWidgets.QAbstractSlider.hasTracking?4() -> bool +QtWidgets.QAbstractSlider.setSliderDown?4(bool) +QtWidgets.QAbstractSlider.isSliderDown?4() -> bool +QtWidgets.QAbstractSlider.setSliderPosition?4(int) +QtWidgets.QAbstractSlider.sliderPosition?4() -> int +QtWidgets.QAbstractSlider.setInvertedAppearance?4(bool) +QtWidgets.QAbstractSlider.invertedAppearance?4() -> bool +QtWidgets.QAbstractSlider.setInvertedControls?4(bool) +QtWidgets.QAbstractSlider.invertedControls?4() -> bool +QtWidgets.QAbstractSlider.value?4() -> int +QtWidgets.QAbstractSlider.triggerAction?4(QAbstractSlider.SliderAction) +QtWidgets.QAbstractSlider.setValue?4(int) +QtWidgets.QAbstractSlider.setOrientation?4(Qt.Orientation) +QtWidgets.QAbstractSlider.valueChanged?4(int) +QtWidgets.QAbstractSlider.sliderPressed?4() +QtWidgets.QAbstractSlider.sliderMoved?4(int) +QtWidgets.QAbstractSlider.sliderReleased?4() +QtWidgets.QAbstractSlider.rangeChanged?4(int, int) +QtWidgets.QAbstractSlider.actionTriggered?4(int) +QtWidgets.QAbstractSlider.setRepeatAction?4(QAbstractSlider.SliderAction, int thresholdTime=500, int repeatTime=50) +QtWidgets.QAbstractSlider.repeatAction?4() -> QAbstractSlider.SliderAction +QtWidgets.QAbstractSlider.sliderChange?4(QAbstractSlider.SliderChange) +QtWidgets.QAbstractSlider.event?4(QEvent) -> bool +QtWidgets.QAbstractSlider.keyPressEvent?4(QKeyEvent) +QtWidgets.QAbstractSlider.timerEvent?4(QTimerEvent) +QtWidgets.QAbstractSlider.wheelEvent?4(QWheelEvent) +QtWidgets.QAbstractSlider.changeEvent?4(QEvent) +QtWidgets.QAbstractSpinBox.StepType?10 +QtWidgets.QAbstractSpinBox.StepType.DefaultStepType?10 +QtWidgets.QAbstractSpinBox.StepType.AdaptiveDecimalStepType?10 +QtWidgets.QAbstractSpinBox.CorrectionMode?10 +QtWidgets.QAbstractSpinBox.CorrectionMode.CorrectToPreviousValue?10 +QtWidgets.QAbstractSpinBox.CorrectionMode.CorrectToNearestValue?10 +QtWidgets.QAbstractSpinBox.ButtonSymbols?10 +QtWidgets.QAbstractSpinBox.ButtonSymbols.UpDownArrows?10 +QtWidgets.QAbstractSpinBox.ButtonSymbols.PlusMinus?10 +QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons?10 +QtWidgets.QAbstractSpinBox.StepEnabledFlag?10 +QtWidgets.QAbstractSpinBox.StepEnabledFlag.StepNone?10 +QtWidgets.QAbstractSpinBox.StepEnabledFlag.StepUpEnabled?10 +QtWidgets.QAbstractSpinBox.StepEnabledFlag.StepDownEnabled?10 +QtWidgets.QAbstractSpinBox?1(QWidget parent=None) +QtWidgets.QAbstractSpinBox.__init__?1(self, QWidget parent=None) +QtWidgets.QAbstractSpinBox.buttonSymbols?4() -> QAbstractSpinBox.ButtonSymbols +QtWidgets.QAbstractSpinBox.setButtonSymbols?4(QAbstractSpinBox.ButtonSymbols) +QtWidgets.QAbstractSpinBox.text?4() -> QString +QtWidgets.QAbstractSpinBox.specialValueText?4() -> QString +QtWidgets.QAbstractSpinBox.setSpecialValueText?4(QString) +QtWidgets.QAbstractSpinBox.wrapping?4() -> bool +QtWidgets.QAbstractSpinBox.setWrapping?4(bool) +QtWidgets.QAbstractSpinBox.setReadOnly?4(bool) +QtWidgets.QAbstractSpinBox.isReadOnly?4() -> bool +QtWidgets.QAbstractSpinBox.setAlignment?4(Qt.Alignment) +QtWidgets.QAbstractSpinBox.alignment?4() -> Qt.Alignment +QtWidgets.QAbstractSpinBox.setFrame?4(bool) +QtWidgets.QAbstractSpinBox.hasFrame?4() -> bool +QtWidgets.QAbstractSpinBox.sizeHint?4() -> QSize +QtWidgets.QAbstractSpinBox.minimumSizeHint?4() -> QSize +QtWidgets.QAbstractSpinBox.interpretText?4() +QtWidgets.QAbstractSpinBox.event?4(QEvent) -> bool +QtWidgets.QAbstractSpinBox.validate?4(QString, int) -> (QValidator.State, QString, int) +QtWidgets.QAbstractSpinBox.fixup?4(QString) -> QString +QtWidgets.QAbstractSpinBox.stepBy?4(int) +QtWidgets.QAbstractSpinBox.stepUp?4() +QtWidgets.QAbstractSpinBox.stepDown?4() +QtWidgets.QAbstractSpinBox.selectAll?4() +QtWidgets.QAbstractSpinBox.clear?4() +QtWidgets.QAbstractSpinBox.editingFinished?4() +QtWidgets.QAbstractSpinBox.resizeEvent?4(QResizeEvent) +QtWidgets.QAbstractSpinBox.keyPressEvent?4(QKeyEvent) +QtWidgets.QAbstractSpinBox.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QAbstractSpinBox.wheelEvent?4(QWheelEvent) +QtWidgets.QAbstractSpinBox.focusInEvent?4(QFocusEvent) +QtWidgets.QAbstractSpinBox.focusOutEvent?4(QFocusEvent) +QtWidgets.QAbstractSpinBox.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QAbstractSpinBox.changeEvent?4(QEvent) +QtWidgets.QAbstractSpinBox.closeEvent?4(QCloseEvent) +QtWidgets.QAbstractSpinBox.hideEvent?4(QHideEvent) +QtWidgets.QAbstractSpinBox.mousePressEvent?4(QMouseEvent) +QtWidgets.QAbstractSpinBox.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QAbstractSpinBox.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QAbstractSpinBox.timerEvent?4(QTimerEvent) +QtWidgets.QAbstractSpinBox.paintEvent?4(QPaintEvent) +QtWidgets.QAbstractSpinBox.showEvent?4(QShowEvent) +QtWidgets.QAbstractSpinBox.lineEdit?4() -> QLineEdit +QtWidgets.QAbstractSpinBox.setLineEdit?4(QLineEdit) +QtWidgets.QAbstractSpinBox.stepEnabled?4() -> QAbstractSpinBox.StepEnabled +QtWidgets.QAbstractSpinBox.initStyleOption?4(QStyleOptionSpinBox) +QtWidgets.QAbstractSpinBox.setCorrectionMode?4(QAbstractSpinBox.CorrectionMode) +QtWidgets.QAbstractSpinBox.correctionMode?4() -> QAbstractSpinBox.CorrectionMode +QtWidgets.QAbstractSpinBox.hasAcceptableInput?4() -> bool +QtWidgets.QAbstractSpinBox.setAccelerated?4(bool) +QtWidgets.QAbstractSpinBox.isAccelerated?4() -> bool +QtWidgets.QAbstractSpinBox.setKeyboardTracking?4(bool) +QtWidgets.QAbstractSpinBox.keyboardTracking?4() -> bool +QtWidgets.QAbstractSpinBox.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QAbstractSpinBox.setGroupSeparatorShown?4(bool) +QtWidgets.QAbstractSpinBox.isGroupSeparatorShown?4() -> bool +QtWidgets.QAbstractSpinBox.StepEnabled?1() +QtWidgets.QAbstractSpinBox.StepEnabled.__init__?1(self) +QtWidgets.QAbstractSpinBox.StepEnabled?1(int) +QtWidgets.QAbstractSpinBox.StepEnabled.__init__?1(self, int) +QtWidgets.QAbstractSpinBox.StepEnabled?1(QAbstractSpinBox.StepEnabled) +QtWidgets.QAbstractSpinBox.StepEnabled.__init__?1(self, QAbstractSpinBox.StepEnabled) +QtWidgets.QAction.Priority?10 +QtWidgets.QAction.Priority.LowPriority?10 +QtWidgets.QAction.Priority.NormalPriority?10 +QtWidgets.QAction.Priority.HighPriority?10 +QtWidgets.QAction.MenuRole?10 +QtWidgets.QAction.MenuRole.NoRole?10 +QtWidgets.QAction.MenuRole.TextHeuristicRole?10 +QtWidgets.QAction.MenuRole.ApplicationSpecificRole?10 +QtWidgets.QAction.MenuRole.AboutQtRole?10 +QtWidgets.QAction.MenuRole.AboutRole?10 +QtWidgets.QAction.MenuRole.PreferencesRole?10 +QtWidgets.QAction.MenuRole.QuitRole?10 +QtWidgets.QAction.ActionEvent?10 +QtWidgets.QAction.ActionEvent.Trigger?10 +QtWidgets.QAction.ActionEvent.Hover?10 +QtWidgets.QAction?1(QObject parent=None) +QtWidgets.QAction.__init__?1(self, QObject parent=None) +QtWidgets.QAction?1(QString, QObject parent=None) +QtWidgets.QAction.__init__?1(self, QString, QObject parent=None) +QtWidgets.QAction?1(QIcon, QString, QObject parent=None) +QtWidgets.QAction.__init__?1(self, QIcon, QString, QObject parent=None) +QtWidgets.QAction.setActionGroup?4(QActionGroup) +QtWidgets.QAction.actionGroup?4() -> QActionGroup +QtWidgets.QAction.setIcon?4(QIcon) +QtWidgets.QAction.icon?4() -> QIcon +QtWidgets.QAction.setText?4(QString) +QtWidgets.QAction.text?4() -> QString +QtWidgets.QAction.setIconText?4(QString) +QtWidgets.QAction.iconText?4() -> QString +QtWidgets.QAction.setToolTip?4(QString) +QtWidgets.QAction.toolTip?4() -> QString +QtWidgets.QAction.setStatusTip?4(QString) +QtWidgets.QAction.statusTip?4() -> QString +QtWidgets.QAction.setWhatsThis?4(QString) +QtWidgets.QAction.whatsThis?4() -> QString +QtWidgets.QAction.menu?4() -> QMenu +QtWidgets.QAction.setMenu?4(QMenu) +QtWidgets.QAction.setSeparator?4(bool) +QtWidgets.QAction.isSeparator?4() -> bool +QtWidgets.QAction.setShortcut?4(QKeySequence) +QtWidgets.QAction.shortcut?4() -> QKeySequence +QtWidgets.QAction.setShortcutContext?4(Qt.ShortcutContext) +QtWidgets.QAction.shortcutContext?4() -> Qt.ShortcutContext +QtWidgets.QAction.setFont?4(QFont) +QtWidgets.QAction.font?4() -> QFont +QtWidgets.QAction.setCheckable?4(bool) +QtWidgets.QAction.isCheckable?4() -> bool +QtWidgets.QAction.data?4() -> QVariant +QtWidgets.QAction.setData?4(QVariant) +QtWidgets.QAction.isChecked?4() -> bool +QtWidgets.QAction.isEnabled?4() -> bool +QtWidgets.QAction.isVisible?4() -> bool +QtWidgets.QAction.activate?4(QAction.ActionEvent) +QtWidgets.QAction.showStatusText?4(QWidget widget=None) -> bool +QtWidgets.QAction.parentWidget?4() -> QWidget +QtWidgets.QAction.event?4(QEvent) -> bool +QtWidgets.QAction.trigger?4() +QtWidgets.QAction.hover?4() +QtWidgets.QAction.setChecked?4(bool) +QtWidgets.QAction.toggle?4() +QtWidgets.QAction.setEnabled?4(bool) +QtWidgets.QAction.setDisabled?4(bool) +QtWidgets.QAction.setVisible?4(bool) +QtWidgets.QAction.changed?4() +QtWidgets.QAction.triggered?4(bool checked=False) +QtWidgets.QAction.hovered?4() +QtWidgets.QAction.toggled?4(bool) +QtWidgets.QAction.setShortcuts?4(unknown-type) +QtWidgets.QAction.setShortcuts?4(QKeySequence.StandardKey) +QtWidgets.QAction.shortcuts?4() -> unknown-type +QtWidgets.QAction.setAutoRepeat?4(bool) +QtWidgets.QAction.autoRepeat?4() -> bool +QtWidgets.QAction.setMenuRole?4(QAction.MenuRole) +QtWidgets.QAction.menuRole?4() -> QAction.MenuRole +QtWidgets.QAction.associatedWidgets?4() -> unknown-type +QtWidgets.QAction.associatedGraphicsWidgets?4() -> unknown-type +QtWidgets.QAction.setIconVisibleInMenu?4(bool) +QtWidgets.QAction.isIconVisibleInMenu?4() -> bool +QtWidgets.QAction.setPriority?4(QAction.Priority) +QtWidgets.QAction.priority?4() -> QAction.Priority +QtWidgets.QAction.setShortcutVisibleInContextMenu?4(bool) +QtWidgets.QAction.isShortcutVisibleInContextMenu?4() -> bool +QtWidgets.QActionGroup.ExclusionPolicy?10 +QtWidgets.QActionGroup.ExclusionPolicy.None_?10 +QtWidgets.QActionGroup.ExclusionPolicy.Exclusive?10 +QtWidgets.QActionGroup.ExclusionPolicy.ExclusiveOptional?10 +QtWidgets.QActionGroup?1(QObject) +QtWidgets.QActionGroup.__init__?1(self, QObject) +QtWidgets.QActionGroup.addAction?4(QAction) -> QAction +QtWidgets.QActionGroup.addAction?4(QString) -> QAction +QtWidgets.QActionGroup.addAction?4(QIcon, QString) -> QAction +QtWidgets.QActionGroup.removeAction?4(QAction) +QtWidgets.QActionGroup.actions?4() -> unknown-type +QtWidgets.QActionGroup.checkedAction?4() -> QAction +QtWidgets.QActionGroup.isExclusive?4() -> bool +QtWidgets.QActionGroup.isEnabled?4() -> bool +QtWidgets.QActionGroup.isVisible?4() -> bool +QtWidgets.QActionGroup.setEnabled?4(bool) +QtWidgets.QActionGroup.setDisabled?4(bool) +QtWidgets.QActionGroup.setVisible?4(bool) +QtWidgets.QActionGroup.setExclusive?4(bool) +QtWidgets.QActionGroup.triggered?4(QAction) +QtWidgets.QActionGroup.hovered?4(QAction) +QtWidgets.QActionGroup.exclusionPolicy?4() -> QActionGroup.ExclusionPolicy +QtWidgets.QActionGroup.setExclusionPolicy?4(QActionGroup.ExclusionPolicy) +QtWidgets.QApplication.ColorSpec?10 +QtWidgets.QApplication.ColorSpec.NormalColor?10 +QtWidgets.QApplication.ColorSpec.CustomColor?10 +QtWidgets.QApplication.ColorSpec.ManyColor?10 +QtWidgets.QApplication?1(List) +QtWidgets.QApplication.__init__?1(self, List) +QtWidgets.QApplication.style?4() -> QStyle +QtWidgets.QApplication.setStyle?4(QStyle) +QtWidgets.QApplication.setStyle?4(QString) -> QStyle +QtWidgets.QApplication.colorSpec?4() -> int +QtWidgets.QApplication.setColorSpec?4(int) +QtWidgets.QApplication.palette?4() -> QPalette +QtWidgets.QApplication.palette?4(QWidget) -> QPalette +QtWidgets.QApplication.palette?4(str) -> QPalette +QtWidgets.QApplication.setPalette?4(QPalette, str className=None) +QtWidgets.QApplication.font?4() -> QFont +QtWidgets.QApplication.font?4(QWidget) -> QFont +QtWidgets.QApplication.font?4(str) -> QFont +QtWidgets.QApplication.setFont?4(QFont, str className=None) +QtWidgets.QApplication.fontMetrics?4() -> QFontMetrics +QtWidgets.QApplication.setWindowIcon?4(QIcon) +QtWidgets.QApplication.windowIcon?4() -> QIcon +QtWidgets.QApplication.allWidgets?4() -> unknown-type +QtWidgets.QApplication.topLevelWidgets?4() -> unknown-type +QtWidgets.QApplication.desktop?4() -> QDesktopWidget +QtWidgets.QApplication.activePopupWidget?4() -> QWidget +QtWidgets.QApplication.activeModalWidget?4() -> QWidget +QtWidgets.QApplication.focusWidget?4() -> QWidget +QtWidgets.QApplication.activeWindow?4() -> QWidget +QtWidgets.QApplication.setActiveWindow?4(QWidget) +QtWidgets.QApplication.widgetAt?4(QPoint) -> QWidget +QtWidgets.QApplication.widgetAt?4(int, int) -> QWidget +QtWidgets.QApplication.topLevelAt?4(QPoint) -> QWidget +QtWidgets.QApplication.topLevelAt?4(int, int) -> QWidget +QtWidgets.QApplication.beep?4() +QtWidgets.QApplication.alert?4(QWidget, int msecs=0) +QtWidgets.QApplication.setCursorFlashTime?4(int) +QtWidgets.QApplication.cursorFlashTime?4() -> int +QtWidgets.QApplication.setDoubleClickInterval?4(int) +QtWidgets.QApplication.doubleClickInterval?4() -> int +QtWidgets.QApplication.setKeyboardInputInterval?4(int) +QtWidgets.QApplication.keyboardInputInterval?4() -> int +QtWidgets.QApplication.setWheelScrollLines?4(int) +QtWidgets.QApplication.wheelScrollLines?4() -> int +QtWidgets.QApplication.setGlobalStrut?4(QSize) +QtWidgets.QApplication.globalStrut?4() -> QSize +QtWidgets.QApplication.setStartDragTime?4(int) +QtWidgets.QApplication.startDragTime?4() -> int +QtWidgets.QApplication.setStartDragDistance?4(int) +QtWidgets.QApplication.startDragDistance?4() -> int +QtWidgets.QApplication.isEffectEnabled?4(Qt.UIEffect) -> bool +QtWidgets.QApplication.setEffectEnabled?4(Qt.UIEffect, bool enabled=True) +QtWidgets.QApplication.exec_?4() -> int +QtWidgets.QApplication.exec?4() -> int +QtWidgets.QApplication.notify?4(QObject, QEvent) -> bool +QtWidgets.QApplication.autoSipEnabled?4() -> bool +QtWidgets.QApplication.styleSheet?4() -> QString +QtWidgets.QApplication.focusChanged?4(QWidget, QWidget) +QtWidgets.QApplication.aboutQt?4() +QtWidgets.QApplication.closeAllWindows?4() +QtWidgets.QApplication.setAutoSipEnabled?4(bool) +QtWidgets.QApplication.setStyleSheet?4(QString) +QtWidgets.QApplication.event?4(QEvent) -> bool +QtWidgets.QLayoutItem?1(Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QLayoutItem.__init__?1(self, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QLayoutItem?1(QLayoutItem) +QtWidgets.QLayoutItem.__init__?1(self, QLayoutItem) +QtWidgets.QLayoutItem.sizeHint?4() -> QSize +QtWidgets.QLayoutItem.minimumSize?4() -> QSize +QtWidgets.QLayoutItem.maximumSize?4() -> QSize +QtWidgets.QLayoutItem.expandingDirections?4() -> Qt.Orientations +QtWidgets.QLayoutItem.setGeometry?4(QRect) +QtWidgets.QLayoutItem.geometry?4() -> QRect +QtWidgets.QLayoutItem.isEmpty?4() -> bool +QtWidgets.QLayoutItem.hasHeightForWidth?4() -> bool +QtWidgets.QLayoutItem.heightForWidth?4(int) -> int +QtWidgets.QLayoutItem.minimumHeightForWidth?4(int) -> int +QtWidgets.QLayoutItem.invalidate?4() +QtWidgets.QLayoutItem.widget?4() -> QWidget +QtWidgets.QLayoutItem.layout?4() -> QLayout +QtWidgets.QLayoutItem.spacerItem?4() -> QSpacerItem +QtWidgets.QLayoutItem.alignment?4() -> Qt.Alignment +QtWidgets.QLayoutItem.setAlignment?4(Qt.Alignment) +QtWidgets.QLayoutItem.controlTypes?4() -> QSizePolicy.ControlTypes +QtWidgets.QLayout.SizeConstraint?10 +QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint?10 +QtWidgets.QLayout.SizeConstraint.SetNoConstraint?10 +QtWidgets.QLayout.SizeConstraint.SetMinimumSize?10 +QtWidgets.QLayout.SizeConstraint.SetFixedSize?10 +QtWidgets.QLayout.SizeConstraint.SetMaximumSize?10 +QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize?10 +QtWidgets.QLayout?1(QWidget) +QtWidgets.QLayout.__init__?1(self, QWidget) +QtWidgets.QLayout?1() +QtWidgets.QLayout.__init__?1(self) +QtWidgets.QLayout.spacing?4() -> int +QtWidgets.QLayout.setSpacing?4(int) +QtWidgets.QLayout.setAlignment?4(QWidget, Qt.Alignment) -> bool +QtWidgets.QLayout.setAlignment?4(QLayout, Qt.Alignment) -> bool +QtWidgets.QLayout.setAlignment?4(Qt.Alignment) +QtWidgets.QLayout.setSizeConstraint?4(QLayout.SizeConstraint) +QtWidgets.QLayout.sizeConstraint?4() -> QLayout.SizeConstraint +QtWidgets.QLayout.setMenuBar?4(QWidget) +QtWidgets.QLayout.menuBar?4() -> QWidget +QtWidgets.QLayout.parentWidget?4() -> QWidget +QtWidgets.QLayout.invalidate?4() +QtWidgets.QLayout.geometry?4() -> QRect +QtWidgets.QLayout.activate?4() -> bool +QtWidgets.QLayout.update?4() +QtWidgets.QLayout.addWidget?4(QWidget) +QtWidgets.QLayout.addItem?4(QLayoutItem) +QtWidgets.QLayout.removeWidget?4(QWidget) +QtWidgets.QLayout.removeItem?4(QLayoutItem) +QtWidgets.QLayout.expandingDirections?4() -> Qt.Orientations +QtWidgets.QLayout.minimumSize?4() -> QSize +QtWidgets.QLayout.maximumSize?4() -> QSize +QtWidgets.QLayout.setGeometry?4(QRect) +QtWidgets.QLayout.itemAt?4(int) -> QLayoutItem +QtWidgets.QLayout.takeAt?4(int) -> QLayoutItem +QtWidgets.QLayout.indexOf?4(QWidget) -> int +QtWidgets.QLayout.indexOf?4(QLayoutItem) -> int +QtWidgets.QLayout.count?4() -> int +QtWidgets.QLayout.isEmpty?4() -> bool +QtWidgets.QLayout.totalHeightForWidth?4(int) -> int +QtWidgets.QLayout.totalMinimumSize?4() -> QSize +QtWidgets.QLayout.totalMaximumSize?4() -> QSize +QtWidgets.QLayout.totalSizeHint?4() -> QSize +QtWidgets.QLayout.layout?4() -> QLayout +QtWidgets.QLayout.setEnabled?4(bool) +QtWidgets.QLayout.isEnabled?4() -> bool +QtWidgets.QLayout.closestAcceptableSize?4(QWidget, QSize) -> QSize +QtWidgets.QLayout.widgetEvent?4(QEvent) +QtWidgets.QLayout.childEvent?4(QChildEvent) +QtWidgets.QLayout.addChildLayout?4(QLayout) +QtWidgets.QLayout.addChildWidget?4(QWidget) +QtWidgets.QLayout.alignmentRect?4(QRect) -> QRect +QtWidgets.QLayout.setContentsMargins?4(int, int, int, int) +QtWidgets.QLayout.getContentsMargins?4() -> (int, int, int, int) +QtWidgets.QLayout.contentsRect?4() -> QRect +QtWidgets.QLayout.setContentsMargins?4(QMargins) +QtWidgets.QLayout.contentsMargins?4() -> QMargins +QtWidgets.QLayout.controlTypes?4() -> QSizePolicy.ControlTypes +QtWidgets.QLayout.replaceWidget?4(QWidget, QWidget, Qt.FindChildOptions options=Qt.FindChildrenRecursively) -> QLayoutItem +QtWidgets.QBoxLayout.Direction?10 +QtWidgets.QBoxLayout.Direction.LeftToRight?10 +QtWidgets.QBoxLayout.Direction.RightToLeft?10 +QtWidgets.QBoxLayout.Direction.TopToBottom?10 +QtWidgets.QBoxLayout.Direction.BottomToTop?10 +QtWidgets.QBoxLayout.Direction.Down?10 +QtWidgets.QBoxLayout.Direction.Up?10 +QtWidgets.QBoxLayout?1(QBoxLayout.Direction, QWidget parent=None) +QtWidgets.QBoxLayout.__init__?1(self, QBoxLayout.Direction, QWidget parent=None) +QtWidgets.QBoxLayout.direction?4() -> QBoxLayout.Direction +QtWidgets.QBoxLayout.setDirection?4(QBoxLayout.Direction) +QtWidgets.QBoxLayout.addSpacing?4(int) +QtWidgets.QBoxLayout.addStretch?4(int stretch=0) +QtWidgets.QBoxLayout.addWidget?4(QWidget, int stretch=0, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QBoxLayout.addLayout?4(QLayout, int stretch=0) +QtWidgets.QBoxLayout.addStrut?4(int) +QtWidgets.QBoxLayout.addItem?4(QLayoutItem) +QtWidgets.QBoxLayout.insertSpacing?4(int, int) +QtWidgets.QBoxLayout.insertStretch?4(int, int stretch=0) +QtWidgets.QBoxLayout.insertWidget?4(int, QWidget, int stretch=0, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QBoxLayout.insertLayout?4(int, QLayout, int stretch=0) +QtWidgets.QBoxLayout.setStretchFactor?4(QWidget, int) -> bool +QtWidgets.QBoxLayout.setStretchFactor?4(QLayout, int) -> bool +QtWidgets.QBoxLayout.sizeHint?4() -> QSize +QtWidgets.QBoxLayout.minimumSize?4() -> QSize +QtWidgets.QBoxLayout.maximumSize?4() -> QSize +QtWidgets.QBoxLayout.hasHeightForWidth?4() -> bool +QtWidgets.QBoxLayout.heightForWidth?4(int) -> int +QtWidgets.QBoxLayout.minimumHeightForWidth?4(int) -> int +QtWidgets.QBoxLayout.expandingDirections?4() -> Qt.Orientations +QtWidgets.QBoxLayout.invalidate?4() +QtWidgets.QBoxLayout.itemAt?4(int) -> QLayoutItem +QtWidgets.QBoxLayout.takeAt?4(int) -> QLayoutItem +QtWidgets.QBoxLayout.count?4() -> int +QtWidgets.QBoxLayout.setGeometry?4(QRect) +QtWidgets.QBoxLayout.spacing?4() -> int +QtWidgets.QBoxLayout.setSpacing?4(int) +QtWidgets.QBoxLayout.addSpacerItem?4(QSpacerItem) +QtWidgets.QBoxLayout.insertSpacerItem?4(int, QSpacerItem) +QtWidgets.QBoxLayout.setStretch?4(int, int) +QtWidgets.QBoxLayout.stretch?4(int) -> int +QtWidgets.QBoxLayout.insertItem?4(int, QLayoutItem) +QtWidgets.QHBoxLayout?1() +QtWidgets.QHBoxLayout.__init__?1(self) +QtWidgets.QHBoxLayout?1(QWidget) +QtWidgets.QHBoxLayout.__init__?1(self, QWidget) +QtWidgets.QVBoxLayout?1() +QtWidgets.QVBoxLayout.__init__?1(self) +QtWidgets.QVBoxLayout?1(QWidget) +QtWidgets.QVBoxLayout.__init__?1(self, QWidget) +QtWidgets.QButtonGroup?1(QObject parent=None) +QtWidgets.QButtonGroup.__init__?1(self, QObject parent=None) +QtWidgets.QButtonGroup.setExclusive?4(bool) +QtWidgets.QButtonGroup.exclusive?4() -> bool +QtWidgets.QButtonGroup.addButton?4(QAbstractButton, int id=-1) +QtWidgets.QButtonGroup.removeButton?4(QAbstractButton) +QtWidgets.QButtonGroup.buttons?4() -> unknown-type +QtWidgets.QButtonGroup.button?4(int) -> QAbstractButton +QtWidgets.QButtonGroup.checkedButton?4() -> QAbstractButton +QtWidgets.QButtonGroup.setId?4(QAbstractButton, int) +QtWidgets.QButtonGroup.id?4(QAbstractButton) -> int +QtWidgets.QButtonGroup.checkedId?4() -> int +QtWidgets.QButtonGroup.buttonClicked?4(QAbstractButton) +QtWidgets.QButtonGroup.buttonClicked?4(int) +QtWidgets.QButtonGroup.buttonPressed?4(QAbstractButton) +QtWidgets.QButtonGroup.buttonPressed?4(int) +QtWidgets.QButtonGroup.buttonReleased?4(QAbstractButton) +QtWidgets.QButtonGroup.buttonReleased?4(int) +QtWidgets.QButtonGroup.buttonToggled?4(QAbstractButton, bool) +QtWidgets.QButtonGroup.buttonToggled?4(int, bool) +QtWidgets.QButtonGroup.idClicked?4(int) +QtWidgets.QButtonGroup.idPressed?4(int) +QtWidgets.QButtonGroup.idReleased?4(int) +QtWidgets.QButtonGroup.idToggled?4(int, bool) +QtWidgets.QCalendarWidget.SelectionMode?10 +QtWidgets.QCalendarWidget.SelectionMode.NoSelection?10 +QtWidgets.QCalendarWidget.SelectionMode.SingleSelection?10 +QtWidgets.QCalendarWidget.VerticalHeaderFormat?10 +QtWidgets.QCalendarWidget.VerticalHeaderFormat.NoVerticalHeader?10 +QtWidgets.QCalendarWidget.VerticalHeaderFormat.ISOWeekNumbers?10 +QtWidgets.QCalendarWidget.HorizontalHeaderFormat?10 +QtWidgets.QCalendarWidget.HorizontalHeaderFormat.NoHorizontalHeader?10 +QtWidgets.QCalendarWidget.HorizontalHeaderFormat.SingleLetterDayNames?10 +QtWidgets.QCalendarWidget.HorizontalHeaderFormat.ShortDayNames?10 +QtWidgets.QCalendarWidget.HorizontalHeaderFormat.LongDayNames?10 +QtWidgets.QCalendarWidget?1(QWidget parent=None) +QtWidgets.QCalendarWidget.__init__?1(self, QWidget parent=None) +QtWidgets.QCalendarWidget.sizeHint?4() -> QSize +QtWidgets.QCalendarWidget.minimumSizeHint?4() -> QSize +QtWidgets.QCalendarWidget.selectedDate?4() -> QDate +QtWidgets.QCalendarWidget.yearShown?4() -> int +QtWidgets.QCalendarWidget.monthShown?4() -> int +QtWidgets.QCalendarWidget.minimumDate?4() -> QDate +QtWidgets.QCalendarWidget.setMinimumDate?4(QDate) +QtWidgets.QCalendarWidget.maximumDate?4() -> QDate +QtWidgets.QCalendarWidget.setMaximumDate?4(QDate) +QtWidgets.QCalendarWidget.firstDayOfWeek?4() -> Qt.DayOfWeek +QtWidgets.QCalendarWidget.setFirstDayOfWeek?4(Qt.DayOfWeek) +QtWidgets.QCalendarWidget.isGridVisible?4() -> bool +QtWidgets.QCalendarWidget.setGridVisible?4(bool) +QtWidgets.QCalendarWidget.selectionMode?4() -> QCalendarWidget.SelectionMode +QtWidgets.QCalendarWidget.setSelectionMode?4(QCalendarWidget.SelectionMode) +QtWidgets.QCalendarWidget.horizontalHeaderFormat?4() -> QCalendarWidget.HorizontalHeaderFormat +QtWidgets.QCalendarWidget.setHorizontalHeaderFormat?4(QCalendarWidget.HorizontalHeaderFormat) +QtWidgets.QCalendarWidget.verticalHeaderFormat?4() -> QCalendarWidget.VerticalHeaderFormat +QtWidgets.QCalendarWidget.setVerticalHeaderFormat?4(QCalendarWidget.VerticalHeaderFormat) +QtWidgets.QCalendarWidget.headerTextFormat?4() -> QTextCharFormat +QtWidgets.QCalendarWidget.setHeaderTextFormat?4(QTextCharFormat) +QtWidgets.QCalendarWidget.weekdayTextFormat?4(Qt.DayOfWeek) -> QTextCharFormat +QtWidgets.QCalendarWidget.setWeekdayTextFormat?4(Qt.DayOfWeek, QTextCharFormat) +QtWidgets.QCalendarWidget.dateTextFormat?4() -> unknown-type +QtWidgets.QCalendarWidget.dateTextFormat?4(QDate) -> QTextCharFormat +QtWidgets.QCalendarWidget.setDateTextFormat?4(QDate, QTextCharFormat) +QtWidgets.QCalendarWidget.updateCell?4(QDate) +QtWidgets.QCalendarWidget.updateCells?4() +QtWidgets.QCalendarWidget.event?4(QEvent) -> bool +QtWidgets.QCalendarWidget.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QCalendarWidget.mousePressEvent?4(QMouseEvent) +QtWidgets.QCalendarWidget.resizeEvent?4(QResizeEvent) +QtWidgets.QCalendarWidget.keyPressEvent?4(QKeyEvent) +QtWidgets.QCalendarWidget.paintCell?4(QPainter, QRect, QDate) +QtWidgets.QCalendarWidget.setCurrentPage?4(int, int) +QtWidgets.QCalendarWidget.setDateRange?4(QDate, QDate) +QtWidgets.QCalendarWidget.setSelectedDate?4(QDate) +QtWidgets.QCalendarWidget.showNextMonth?4() +QtWidgets.QCalendarWidget.showNextYear?4() +QtWidgets.QCalendarWidget.showPreviousMonth?4() +QtWidgets.QCalendarWidget.showPreviousYear?4() +QtWidgets.QCalendarWidget.showSelectedDate?4() +QtWidgets.QCalendarWidget.showToday?4() +QtWidgets.QCalendarWidget.activated?4(QDate) +QtWidgets.QCalendarWidget.clicked?4(QDate) +QtWidgets.QCalendarWidget.currentPageChanged?4(int, int) +QtWidgets.QCalendarWidget.selectionChanged?4() +QtWidgets.QCalendarWidget.isNavigationBarVisible?4() -> bool +QtWidgets.QCalendarWidget.isDateEditEnabled?4() -> bool +QtWidgets.QCalendarWidget.setDateEditEnabled?4(bool) +QtWidgets.QCalendarWidget.dateEditAcceptDelay?4() -> int +QtWidgets.QCalendarWidget.setDateEditAcceptDelay?4(int) +QtWidgets.QCalendarWidget.setNavigationBarVisible?4(bool) +QtWidgets.QCalendarWidget.calendar?4() -> QCalendar +QtWidgets.QCalendarWidget.setCalendar?4(QCalendar) +QtWidgets.QCheckBox?1(QWidget parent=None) +QtWidgets.QCheckBox.__init__?1(self, QWidget parent=None) +QtWidgets.QCheckBox?1(QString, QWidget parent=None) +QtWidgets.QCheckBox.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QCheckBox.sizeHint?4() -> QSize +QtWidgets.QCheckBox.setTristate?4(bool on=True) +QtWidgets.QCheckBox.isTristate?4() -> bool +QtWidgets.QCheckBox.checkState?4() -> Qt.CheckState +QtWidgets.QCheckBox.setCheckState?4(Qt.CheckState) +QtWidgets.QCheckBox.minimumSizeHint?4() -> QSize +QtWidgets.QCheckBox.stateChanged?4(int) +QtWidgets.QCheckBox.hitButton?4(QPoint) -> bool +QtWidgets.QCheckBox.checkStateSet?4() +QtWidgets.QCheckBox.nextCheckState?4() +QtWidgets.QCheckBox.event?4(QEvent) -> bool +QtWidgets.QCheckBox.paintEvent?4(QPaintEvent) +QtWidgets.QCheckBox.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QCheckBox.initStyleOption?4(QStyleOptionButton) +QtWidgets.QDialog.DialogCode?10 +QtWidgets.QDialog.DialogCode.Rejected?10 +QtWidgets.QDialog.DialogCode.Accepted?10 +QtWidgets.QDialog?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QDialog.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QDialog.result?4() -> int +QtWidgets.QDialog.setVisible?4(bool) +QtWidgets.QDialog.sizeHint?4() -> QSize +QtWidgets.QDialog.minimumSizeHint?4() -> QSize +QtWidgets.QDialog.setSizeGripEnabled?4(bool) +QtWidgets.QDialog.isSizeGripEnabled?4() -> bool +QtWidgets.QDialog.setModal?4(bool) +QtWidgets.QDialog.setResult?4(int) +QtWidgets.QDialog.exec_?4() -> int +QtWidgets.QDialog.exec?4() -> int +QtWidgets.QDialog.done?4(int) +QtWidgets.QDialog.accept?4() +QtWidgets.QDialog.reject?4() +QtWidgets.QDialog.open?4() +QtWidgets.QDialog.accepted?4() +QtWidgets.QDialog.finished?4(int) +QtWidgets.QDialog.rejected?4() +QtWidgets.QDialog.keyPressEvent?4(QKeyEvent) +QtWidgets.QDialog.closeEvent?4(QCloseEvent) +QtWidgets.QDialog.showEvent?4(QShowEvent) +QtWidgets.QDialog.resizeEvent?4(QResizeEvent) +QtWidgets.QDialog.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QDialog.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QColorDialog.ColorDialogOption?10 +QtWidgets.QColorDialog.ColorDialogOption.ShowAlphaChannel?10 +QtWidgets.QColorDialog.ColorDialogOption.NoButtons?10 +QtWidgets.QColorDialog.ColorDialogOption.DontUseNativeDialog?10 +QtWidgets.QColorDialog?1(QWidget parent=None) +QtWidgets.QColorDialog.__init__?1(self, QWidget parent=None) +QtWidgets.QColorDialog?1(QColor, QWidget parent=None) +QtWidgets.QColorDialog.__init__?1(self, QColor, QWidget parent=None) +QtWidgets.QColorDialog.getColor?4(QColor initial=Qt.white, QWidget parent=None, QString title='', QColorDialog.ColorDialogOptions options=QColorDialog.ColorDialogOptions()) -> QColor +QtWidgets.QColorDialog.customCount?4() -> int +QtWidgets.QColorDialog.customColor?4(int) -> QColor +QtWidgets.QColorDialog.setCustomColor?4(int, QColor) +QtWidgets.QColorDialog.standardColor?4(int) -> QColor +QtWidgets.QColorDialog.setStandardColor?4(int, QColor) +QtWidgets.QColorDialog.colorSelected?4(QColor) +QtWidgets.QColorDialog.currentColorChanged?4(QColor) +QtWidgets.QColorDialog.changeEvent?4(QEvent) +QtWidgets.QColorDialog.done?4(int) +QtWidgets.QColorDialog.setCurrentColor?4(QColor) +QtWidgets.QColorDialog.currentColor?4() -> QColor +QtWidgets.QColorDialog.selectedColor?4() -> QColor +QtWidgets.QColorDialog.setOption?4(QColorDialog.ColorDialogOption, bool on=True) +QtWidgets.QColorDialog.testOption?4(QColorDialog.ColorDialogOption) -> bool +QtWidgets.QColorDialog.setOptions?4(QColorDialog.ColorDialogOptions) +QtWidgets.QColorDialog.options?4() -> QColorDialog.ColorDialogOptions +QtWidgets.QColorDialog.open?4() +QtWidgets.QColorDialog.open?4(Any) +QtWidgets.QColorDialog.setVisible?4(bool) +QtWidgets.QColorDialog.ColorDialogOptions?1() +QtWidgets.QColorDialog.ColorDialogOptions.__init__?1(self) +QtWidgets.QColorDialog.ColorDialogOptions?1(int) +QtWidgets.QColorDialog.ColorDialogOptions.__init__?1(self, int) +QtWidgets.QColorDialog.ColorDialogOptions?1(QColorDialog.ColorDialogOptions) +QtWidgets.QColorDialog.ColorDialogOptions.__init__?1(self, QColorDialog.ColorDialogOptions) +QtWidgets.QColumnView?1(QWidget parent=None) +QtWidgets.QColumnView.__init__?1(self, QWidget parent=None) +QtWidgets.QColumnView.columnWidths?4() -> unknown-type +QtWidgets.QColumnView.previewWidget?4() -> QWidget +QtWidgets.QColumnView.resizeGripsVisible?4() -> bool +QtWidgets.QColumnView.setColumnWidths?4(unknown-type) +QtWidgets.QColumnView.setPreviewWidget?4(QWidget) +QtWidgets.QColumnView.setResizeGripsVisible?4(bool) +QtWidgets.QColumnView.indexAt?4(QPoint) -> QModelIndex +QtWidgets.QColumnView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) +QtWidgets.QColumnView.sizeHint?4() -> QSize +QtWidgets.QColumnView.visualRect?4(QModelIndex) -> QRect +QtWidgets.QColumnView.setModel?4(QAbstractItemModel) +QtWidgets.QColumnView.setSelectionModel?4(QItemSelectionModel) +QtWidgets.QColumnView.setRootIndex?4(QModelIndex) +QtWidgets.QColumnView.selectAll?4() +QtWidgets.QColumnView.updatePreviewWidget?4(QModelIndex) +QtWidgets.QColumnView.createColumn?4(QModelIndex) -> QAbstractItemView +QtWidgets.QColumnView.initializeColumn?4(QAbstractItemView) +QtWidgets.QColumnView.isIndexHidden?4(QModelIndex) -> bool +QtWidgets.QColumnView.moveCursor?4(QAbstractItemView.CursorAction, Qt.KeyboardModifiers) -> QModelIndex +QtWidgets.QColumnView.resizeEvent?4(QResizeEvent) +QtWidgets.QColumnView.setSelection?4(QRect, QItemSelectionModel.SelectionFlags) +QtWidgets.QColumnView.visualRegionForSelection?4(QItemSelection) -> QRegion +QtWidgets.QColumnView.horizontalOffset?4() -> int +QtWidgets.QColumnView.verticalOffset?4() -> int +QtWidgets.QColumnView.scrollContentsBy?4(int, int) +QtWidgets.QColumnView.rowsInserted?4(QModelIndex, int, int) +QtWidgets.QColumnView.currentChanged?4(QModelIndex, QModelIndex) +QtWidgets.QComboBox.SizeAdjustPolicy?10 +QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToContents?10 +QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToContentsOnFirstShow?10 +QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLength?10 +QtWidgets.QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon?10 +QtWidgets.QComboBox.InsertPolicy?10 +QtWidgets.QComboBox.InsertPolicy.NoInsert?10 +QtWidgets.QComboBox.InsertPolicy.InsertAtTop?10 +QtWidgets.QComboBox.InsertPolicy.InsertAtCurrent?10 +QtWidgets.QComboBox.InsertPolicy.InsertAtBottom?10 +QtWidgets.QComboBox.InsertPolicy.InsertAfterCurrent?10 +QtWidgets.QComboBox.InsertPolicy.InsertBeforeCurrent?10 +QtWidgets.QComboBox.InsertPolicy.InsertAlphabetically?10 +QtWidgets.QComboBox?1(QWidget parent=None) +QtWidgets.QComboBox.__init__?1(self, QWidget parent=None) +QtWidgets.QComboBox.maxVisibleItems?4() -> int +QtWidgets.QComboBox.setMaxVisibleItems?4(int) +QtWidgets.QComboBox.count?4() -> int +QtWidgets.QComboBox.setMaxCount?4(int) +QtWidgets.QComboBox.maxCount?4() -> int +QtWidgets.QComboBox.duplicatesEnabled?4() -> bool +QtWidgets.QComboBox.setDuplicatesEnabled?4(bool) +QtWidgets.QComboBox.setFrame?4(bool) +QtWidgets.QComboBox.hasFrame?4() -> bool +QtWidgets.QComboBox.findText?4(QString, Qt.MatchFlags flags=Qt.MatchExactly|Qt.MatchCaseSensitive) -> int +QtWidgets.QComboBox.findData?4(QVariant, int role=Qt.UserRole, Qt.MatchFlags flags=Qt.MatchExactly|Qt.MatchCaseSensitive) -> int +QtWidgets.QComboBox.insertPolicy?4() -> QComboBox.InsertPolicy +QtWidgets.QComboBox.setInsertPolicy?4(QComboBox.InsertPolicy) +QtWidgets.QComboBox.sizeAdjustPolicy?4() -> QComboBox.SizeAdjustPolicy +QtWidgets.QComboBox.setSizeAdjustPolicy?4(QComboBox.SizeAdjustPolicy) +QtWidgets.QComboBox.minimumContentsLength?4() -> int +QtWidgets.QComboBox.setMinimumContentsLength?4(int) +QtWidgets.QComboBox.iconSize?4() -> QSize +QtWidgets.QComboBox.setIconSize?4(QSize) +QtWidgets.QComboBox.isEditable?4() -> bool +QtWidgets.QComboBox.setEditable?4(bool) +QtWidgets.QComboBox.setLineEdit?4(QLineEdit) +QtWidgets.QComboBox.lineEdit?4() -> QLineEdit +QtWidgets.QComboBox.setValidator?4(QValidator) +QtWidgets.QComboBox.validator?4() -> QValidator +QtWidgets.QComboBox.itemDelegate?4() -> QAbstractItemDelegate +QtWidgets.QComboBox.setItemDelegate?4(QAbstractItemDelegate) +QtWidgets.QComboBox.model?4() -> QAbstractItemModel +QtWidgets.QComboBox.setModel?4(QAbstractItemModel) +QtWidgets.QComboBox.rootModelIndex?4() -> QModelIndex +QtWidgets.QComboBox.setRootModelIndex?4(QModelIndex) +QtWidgets.QComboBox.modelColumn?4() -> int +QtWidgets.QComboBox.setModelColumn?4(int) +QtWidgets.QComboBox.currentIndex?4() -> int +QtWidgets.QComboBox.setCurrentIndex?4(int) +QtWidgets.QComboBox.currentText?4() -> QString +QtWidgets.QComboBox.itemText?4(int) -> QString +QtWidgets.QComboBox.itemIcon?4(int) -> QIcon +QtWidgets.QComboBox.itemData?4(int, int role=Qt.UserRole) -> QVariant +QtWidgets.QComboBox.addItems?4(QStringList) +QtWidgets.QComboBox.addItem?4(QString, QVariant userData=None) +QtWidgets.QComboBox.addItem?4(QIcon, QString, QVariant userData=None) +QtWidgets.QComboBox.insertItem?4(int, QString, QVariant userData=None) +QtWidgets.QComboBox.insertItem?4(int, QIcon, QString, QVariant userData=None) +QtWidgets.QComboBox.insertItems?4(int, QStringList) +QtWidgets.QComboBox.removeItem?4(int) +QtWidgets.QComboBox.setItemText?4(int, QString) +QtWidgets.QComboBox.setItemIcon?4(int, QIcon) +QtWidgets.QComboBox.setItemData?4(int, QVariant, int role=Qt.ItemDataRole.UserRole) +QtWidgets.QComboBox.view?4() -> QAbstractItemView +QtWidgets.QComboBox.setView?4(QAbstractItemView) +QtWidgets.QComboBox.sizeHint?4() -> QSize +QtWidgets.QComboBox.minimumSizeHint?4() -> QSize +QtWidgets.QComboBox.showPopup?4() +QtWidgets.QComboBox.hidePopup?4() +QtWidgets.QComboBox.event?4(QEvent) -> bool +QtWidgets.QComboBox.setCompleter?4(QCompleter) +QtWidgets.QComboBox.completer?4() -> QCompleter +QtWidgets.QComboBox.insertSeparator?4(int) +QtWidgets.QComboBox.clear?4() +QtWidgets.QComboBox.clearEditText?4() +QtWidgets.QComboBox.setEditText?4(QString) +QtWidgets.QComboBox.setCurrentText?4(QString) +QtWidgets.QComboBox.editTextChanged?4(QString) +QtWidgets.QComboBox.activated?4(int) +QtWidgets.QComboBox.activated?4(QString) +QtWidgets.QComboBox.currentIndexChanged?4(int) +QtWidgets.QComboBox.currentIndexChanged?4(QString) +QtWidgets.QComboBox.currentTextChanged?4(QString) +QtWidgets.QComboBox.highlighted?4(int) +QtWidgets.QComboBox.highlighted?4(QString) +QtWidgets.QComboBox.initStyleOption?4(QStyleOptionComboBox) +QtWidgets.QComboBox.focusInEvent?4(QFocusEvent) +QtWidgets.QComboBox.focusOutEvent?4(QFocusEvent) +QtWidgets.QComboBox.changeEvent?4(QEvent) +QtWidgets.QComboBox.resizeEvent?4(QResizeEvent) +QtWidgets.QComboBox.paintEvent?4(QPaintEvent) +QtWidgets.QComboBox.showEvent?4(QShowEvent) +QtWidgets.QComboBox.hideEvent?4(QHideEvent) +QtWidgets.QComboBox.mousePressEvent?4(QMouseEvent) +QtWidgets.QComboBox.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QComboBox.keyPressEvent?4(QKeyEvent) +QtWidgets.QComboBox.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QComboBox.wheelEvent?4(QWheelEvent) +QtWidgets.QComboBox.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QComboBox.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QComboBox.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QComboBox.currentData?4(int role=Qt.ItemDataRole.UserRole) -> QVariant +QtWidgets.QComboBox.inputMethodQuery?4(Qt.InputMethodQuery, QVariant) -> QVariant +QtWidgets.QComboBox.textActivated?4(QString) +QtWidgets.QComboBox.textHighlighted?4(QString) +QtWidgets.QComboBox.setPlaceholderText?4(QString) +QtWidgets.QComboBox.placeholderText?4() -> QString +QtWidgets.QPushButton?1(QWidget parent=None) +QtWidgets.QPushButton.__init__?1(self, QWidget parent=None) +QtWidgets.QPushButton?1(QString, QWidget parent=None) +QtWidgets.QPushButton.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QPushButton?1(QIcon, QString, QWidget parent=None) +QtWidgets.QPushButton.__init__?1(self, QIcon, QString, QWidget parent=None) +QtWidgets.QPushButton.sizeHint?4() -> QSize +QtWidgets.QPushButton.minimumSizeHint?4() -> QSize +QtWidgets.QPushButton.autoDefault?4() -> bool +QtWidgets.QPushButton.setAutoDefault?4(bool) +QtWidgets.QPushButton.isDefault?4() -> bool +QtWidgets.QPushButton.setDefault?4(bool) +QtWidgets.QPushButton.setMenu?4(QMenu) +QtWidgets.QPushButton.menu?4() -> QMenu +QtWidgets.QPushButton.setFlat?4(bool) +QtWidgets.QPushButton.isFlat?4() -> bool +QtWidgets.QPushButton.showMenu?4() +QtWidgets.QPushButton.initStyleOption?4(QStyleOptionButton) +QtWidgets.QPushButton.event?4(QEvent) -> bool +QtWidgets.QPushButton.paintEvent?4(QPaintEvent) +QtWidgets.QPushButton.keyPressEvent?4(QKeyEvent) +QtWidgets.QPushButton.focusInEvent?4(QFocusEvent) +QtWidgets.QPushButton.focusOutEvent?4(QFocusEvent) +QtWidgets.QPushButton.hitButton?4(QPoint) -> bool +QtWidgets.QCommandLinkButton?1(QWidget parent=None) +QtWidgets.QCommandLinkButton.__init__?1(self, QWidget parent=None) +QtWidgets.QCommandLinkButton?1(QString, QWidget parent=None) +QtWidgets.QCommandLinkButton.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QCommandLinkButton?1(QString, QString, QWidget parent=None) +QtWidgets.QCommandLinkButton.__init__?1(self, QString, QString, QWidget parent=None) +QtWidgets.QCommandLinkButton.description?4() -> QString +QtWidgets.QCommandLinkButton.setDescription?4(QString) +QtWidgets.QCommandLinkButton.sizeHint?4() -> QSize +QtWidgets.QCommandLinkButton.heightForWidth?4(int) -> int +QtWidgets.QCommandLinkButton.minimumSizeHint?4() -> QSize +QtWidgets.QCommandLinkButton.event?4(QEvent) -> bool +QtWidgets.QCommandLinkButton.paintEvent?4(QPaintEvent) +QtWidgets.QStyle.RequestSoftwareInputPanel?10 +QtWidgets.QStyle.RequestSoftwareInputPanel.RSIP_OnMouseClickAndAlreadyFocused?10 +QtWidgets.QStyle.RequestSoftwareInputPanel.RSIP_OnMouseClick?10 +QtWidgets.QStyle.StandardPixmap?10 +QtWidgets.QStyle.StandardPixmap.SP_TitleBarMenuButton?10 +QtWidgets.QStyle.StandardPixmap.SP_TitleBarMinButton?10 +QtWidgets.QStyle.StandardPixmap.SP_TitleBarMaxButton?10 +QtWidgets.QStyle.StandardPixmap.SP_TitleBarCloseButton?10 +QtWidgets.QStyle.StandardPixmap.SP_TitleBarNormalButton?10 +QtWidgets.QStyle.StandardPixmap.SP_TitleBarShadeButton?10 +QtWidgets.QStyle.StandardPixmap.SP_TitleBarUnshadeButton?10 +QtWidgets.QStyle.StandardPixmap.SP_TitleBarContextHelpButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DockWidgetCloseButton?10 +QtWidgets.QStyle.StandardPixmap.SP_MessageBoxInformation?10 +QtWidgets.QStyle.StandardPixmap.SP_MessageBoxWarning?10 +QtWidgets.QStyle.StandardPixmap.SP_MessageBoxCritical?10 +QtWidgets.QStyle.StandardPixmap.SP_MessageBoxQuestion?10 +QtWidgets.QStyle.StandardPixmap.SP_DesktopIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_TrashIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_ComputerIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DriveFDIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DriveHDIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DriveCDIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DriveDVDIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DriveNetIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DirOpenIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DirClosedIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DirLinkIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_FileIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_FileLinkIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_ToolBarHorizontalExtensionButton?10 +QtWidgets.QStyle.StandardPixmap.SP_ToolBarVerticalExtensionButton?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogStart?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogEnd?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogToParent?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogNewFolder?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogDetailedView?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogInfoView?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogContentsView?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogListView?10 +QtWidgets.QStyle.StandardPixmap.SP_FileDialogBack?10 +QtWidgets.QStyle.StandardPixmap.SP_DirIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogOkButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogCancelButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogHelpButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogOpenButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogSaveButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogCloseButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogApplyButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogResetButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogDiscardButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogYesButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogNoButton?10 +QtWidgets.QStyle.StandardPixmap.SP_ArrowUp?10 +QtWidgets.QStyle.StandardPixmap.SP_ArrowDown?10 +QtWidgets.QStyle.StandardPixmap.SP_ArrowLeft?10 +QtWidgets.QStyle.StandardPixmap.SP_ArrowRight?10 +QtWidgets.QStyle.StandardPixmap.SP_ArrowBack?10 +QtWidgets.QStyle.StandardPixmap.SP_ArrowForward?10 +QtWidgets.QStyle.StandardPixmap.SP_DirHomeIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_CommandLink?10 +QtWidgets.QStyle.StandardPixmap.SP_VistaShield?10 +QtWidgets.QStyle.StandardPixmap.SP_BrowserReload?10 +QtWidgets.QStyle.StandardPixmap.SP_BrowserStop?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaPlay?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaStop?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaPause?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaSkipForward?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaSkipBackward?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaSeekForward?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaSeekBackward?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaVolume?10 +QtWidgets.QStyle.StandardPixmap.SP_MediaVolumeMuted?10 +QtWidgets.QStyle.StandardPixmap.SP_DirLinkOpenIcon?10 +QtWidgets.QStyle.StandardPixmap.SP_LineEditClearButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogYesToAllButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogNoToAllButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogSaveAllButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogAbortButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogRetryButton?10 +QtWidgets.QStyle.StandardPixmap.SP_DialogIgnoreButton?10 +QtWidgets.QStyle.StandardPixmap.SP_RestoreDefaultsButton?10 +QtWidgets.QStyle.StandardPixmap.SP_CustomBase?10 +QtWidgets.QStyle.StyleHint?10 +QtWidgets.QStyle.StyleHint.SH_EtchDisabledText?10 +QtWidgets.QStyle.StyleHint.SH_DitherDisabledText?10 +QtWidgets.QStyle.StyleHint.SH_ScrollBar_MiddleClickAbsolutePosition?10 +QtWidgets.QStyle.StyleHint.SH_ScrollBar_ScrollWhenPointerLeavesControl?10 +QtWidgets.QStyle.StyleHint.SH_TabBar_SelectMouseType?10 +QtWidgets.QStyle.StyleHint.SH_TabBar_Alignment?10 +QtWidgets.QStyle.StyleHint.SH_Header_ArrowAlignment?10 +QtWidgets.QStyle.StyleHint.SH_Slider_SnapToValue?10 +QtWidgets.QStyle.StyleHint.SH_Slider_SloppyKeyEvents?10 +QtWidgets.QStyle.StyleHint.SH_ProgressDialog_CenterCancelButton?10 +QtWidgets.QStyle.StyleHint.SH_ProgressDialog_TextLabelAlignment?10 +QtWidgets.QStyle.StyleHint.SH_PrintDialog_RightAlignButtons?10 +QtWidgets.QStyle.StyleHint.SH_MainWindow_SpaceBelowMenuBar?10 +QtWidgets.QStyle.StyleHint.SH_FontDialog_SelectAssociatedText?10 +QtWidgets.QStyle.StyleHint.SH_Menu_AllowActiveAndDisabled?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SpaceActivatesItem?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuPopupDelay?10 +QtWidgets.QStyle.StyleHint.SH_ScrollView_FrameOnlyAroundContents?10 +QtWidgets.QStyle.StyleHint.SH_MenuBar_AltKeyNavigation?10 +QtWidgets.QStyle.StyleHint.SH_ComboBox_ListMouseTracking?10 +QtWidgets.QStyle.StyleHint.SH_Menu_MouseTracking?10 +QtWidgets.QStyle.StyleHint.SH_MenuBar_MouseTracking?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_ChangeHighlightOnFocus?10 +QtWidgets.QStyle.StyleHint.SH_Widget_ShareActivation?10 +QtWidgets.QStyle.StyleHint.SH_Workspace_FillSpaceOnMaximize?10 +QtWidgets.QStyle.StyleHint.SH_ComboBox_Popup?10 +QtWidgets.QStyle.StyleHint.SH_TitleBar_NoBorder?10 +QtWidgets.QStyle.StyleHint.SH_ScrollBar_StopMouseOverSlider?10 +QtWidgets.QStyle.StyleHint.SH_BlinkCursorWhenTextSelected?10 +QtWidgets.QStyle.StyleHint.SH_RichText_FullWidthSelection?10 +QtWidgets.QStyle.StyleHint.SH_Menu_Scrollable?10 +QtWidgets.QStyle.StyleHint.SH_GroupBox_TextLabelVerticalAlignment?10 +QtWidgets.QStyle.StyleHint.SH_GroupBox_TextLabelColor?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SloppySubMenus?10 +QtWidgets.QStyle.StyleHint.SH_Table_GridLineColor?10 +QtWidgets.QStyle.StyleHint.SH_LineEdit_PasswordCharacter?10 +QtWidgets.QStyle.StyleHint.SH_DialogButtons_DefaultButton?10 +QtWidgets.QStyle.StyleHint.SH_ToolBox_SelectedPageTitleBold?10 +QtWidgets.QStyle.StyleHint.SH_TabBar_PreferNoArrows?10 +QtWidgets.QStyle.StyleHint.SH_ScrollBar_LeftClickAbsolutePosition?10 +QtWidgets.QStyle.StyleHint.SH_UnderlineShortcut?10 +QtWidgets.QStyle.StyleHint.SH_SpinBox_AnimateButton?10 +QtWidgets.QStyle.StyleHint.SH_SpinBox_KeyPressAutoRepeatRate?10 +QtWidgets.QStyle.StyleHint.SH_SpinBox_ClickAutoRepeatRate?10 +QtWidgets.QStyle.StyleHint.SH_Menu_FillScreenWithScroll?10 +QtWidgets.QStyle.StyleHint.SH_ToolTipLabel_Opacity?10 +QtWidgets.QStyle.StyleHint.SH_DrawMenuBarSeparator?10 +QtWidgets.QStyle.StyleHint.SH_TitleBar_ModifyNotification?10 +QtWidgets.QStyle.StyleHint.SH_Button_FocusPolicy?10 +QtWidgets.QStyle.StyleHint.SH_MessageBox_UseBorderForButtonSpacing?10 +QtWidgets.QStyle.StyleHint.SH_TitleBar_AutoRaise?10 +QtWidgets.QStyle.StyleHint.SH_ToolButton_PopupDelay?10 +QtWidgets.QStyle.StyleHint.SH_FocusFrame_Mask?10 +QtWidgets.QStyle.StyleHint.SH_RubberBand_Mask?10 +QtWidgets.QStyle.StyleHint.SH_WindowFrame_Mask?10 +QtWidgets.QStyle.StyleHint.SH_SpinControls_DisableOnBounds?10 +QtWidgets.QStyle.StyleHint.SH_Dial_BackgroundRole?10 +QtWidgets.QStyle.StyleHint.SH_ComboBox_LayoutDirection?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_EllipsisLocation?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_ShowDecorationSelected?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_ActivateItemOnSingleClick?10 +QtWidgets.QStyle.StyleHint.SH_ScrollBar_ContextMenu?10 +QtWidgets.QStyle.StyleHint.SH_ScrollBar_RollBetweenButtons?10 +QtWidgets.QStyle.StyleHint.SH_Slider_StopMouseOverSlider?10 +QtWidgets.QStyle.StyleHint.SH_Slider_AbsoluteSetButtons?10 +QtWidgets.QStyle.StyleHint.SH_Slider_PageSetButtons?10 +QtWidgets.QStyle.StyleHint.SH_Menu_KeyboardSearch?10 +QtWidgets.QStyle.StyleHint.SH_TabBar_ElideMode?10 +QtWidgets.QStyle.StyleHint.SH_DialogButtonLayout?10 +QtWidgets.QStyle.StyleHint.SH_ComboBox_PopupFrameStyle?10 +QtWidgets.QStyle.StyleHint.SH_MessageBox_TextInteractionFlags?10 +QtWidgets.QStyle.StyleHint.SH_DialogButtonBox_ButtonsHaveIcons?10 +QtWidgets.QStyle.StyleHint.SH_SpellCheckUnderlineStyle?10 +QtWidgets.QStyle.StyleHint.SH_MessageBox_CenterButtons?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SelectionWrap?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_MovementWithoutUpdatingSelection?10 +QtWidgets.QStyle.StyleHint.SH_ToolTip_Mask?10 +QtWidgets.QStyle.StyleHint.SH_FocusFrame_AboveWidget?10 +QtWidgets.QStyle.StyleHint.SH_TextControl_FocusIndicatorTextCharFormat?10 +QtWidgets.QStyle.StyleHint.SH_WizardStyle?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_ArrowKeysNavigateIntoChildren?10 +QtWidgets.QStyle.StyleHint.SH_Menu_Mask?10 +QtWidgets.QStyle.StyleHint.SH_Menu_FlashTriggeredItem?10 +QtWidgets.QStyle.StyleHint.SH_Menu_FadeOutOnHide?10 +QtWidgets.QStyle.StyleHint.SH_SpinBox_ClickAutoRepeatThreshold?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_PaintAlternatingRowColorsForEmptyArea?10 +QtWidgets.QStyle.StyleHint.SH_FormLayoutWrapPolicy?10 +QtWidgets.QStyle.StyleHint.SH_TabWidget_DefaultTabPosition?10 +QtWidgets.QStyle.StyleHint.SH_ToolBar_Movable?10 +QtWidgets.QStyle.StyleHint.SH_FormLayoutFieldGrowthPolicy?10 +QtWidgets.QStyle.StyleHint.SH_FormLayoutFormAlignment?10 +QtWidgets.QStyle.StyleHint.SH_FormLayoutLabelAlignment?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_DrawDelegateFrame?10 +QtWidgets.QStyle.StyleHint.SH_TabBar_CloseButtonPosition?10 +QtWidgets.QStyle.StyleHint.SH_DockWidget_ButtonsHaveFrame?10 +QtWidgets.QStyle.StyleHint.SH_ToolButtonStyle?10 +QtWidgets.QStyle.StyleHint.SH_RequestSoftwareInputPanel?10 +QtWidgets.QStyle.StyleHint.SH_ListViewExpand_SelectMouseType?10 +QtWidgets.QStyle.StyleHint.SH_ScrollBar_Transient?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SupportsSections?10 +QtWidgets.QStyle.StyleHint.SH_ToolTip_WakeUpDelay?10 +QtWidgets.QStyle.StyleHint.SH_ToolTip_FallAsleepDelay?10 +QtWidgets.QStyle.StyleHint.SH_Widget_Animate?10 +QtWidgets.QStyle.StyleHint.SH_Splitter_OpaqueResize?10 +QtWidgets.QStyle.StyleHint.SH_LineEdit_PasswordMaskDelay?10 +QtWidgets.QStyle.StyleHint.SH_TabBar_ChangeCurrentDelay?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuUniDirection?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuUniDirectionFailCount?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuSloppySelectOtherActions?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuSloppyCloseTimeout?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuResetWhenReenteringParent?10 +QtWidgets.QStyle.StyleHint.SH_Menu_SubMenuDontStartSloppyOnLeave?10 +QtWidgets.QStyle.StyleHint.SH_ItemView_ScrollMode?10 +QtWidgets.QStyle.StyleHint.SH_TitleBar_ShowToolTipsOnButtons?10 +QtWidgets.QStyle.StyleHint.SH_Widget_Animation_Duration?10 +QtWidgets.QStyle.StyleHint.SH_ComboBox_AllowWheelScrolling?10 +QtWidgets.QStyle.StyleHint.SH_SpinBox_ButtonsInsideFrame?10 +QtWidgets.QStyle.StyleHint.SH_SpinBox_StepModifier?10 +QtWidgets.QStyle.StyleHint.SH_CustomBase?10 +QtWidgets.QStyle.ContentsType?10 +QtWidgets.QStyle.ContentsType.CT_PushButton?10 +QtWidgets.QStyle.ContentsType.CT_CheckBox?10 +QtWidgets.QStyle.ContentsType.CT_RadioButton?10 +QtWidgets.QStyle.ContentsType.CT_ToolButton?10 +QtWidgets.QStyle.ContentsType.CT_ComboBox?10 +QtWidgets.QStyle.ContentsType.CT_Splitter?10 +QtWidgets.QStyle.ContentsType.CT_ProgressBar?10 +QtWidgets.QStyle.ContentsType.CT_MenuItem?10 +QtWidgets.QStyle.ContentsType.CT_MenuBarItem?10 +QtWidgets.QStyle.ContentsType.CT_MenuBar?10 +QtWidgets.QStyle.ContentsType.CT_Menu?10 +QtWidgets.QStyle.ContentsType.CT_TabBarTab?10 +QtWidgets.QStyle.ContentsType.CT_Slider?10 +QtWidgets.QStyle.ContentsType.CT_ScrollBar?10 +QtWidgets.QStyle.ContentsType.CT_LineEdit?10 +QtWidgets.QStyle.ContentsType.CT_SpinBox?10 +QtWidgets.QStyle.ContentsType.CT_SizeGrip?10 +QtWidgets.QStyle.ContentsType.CT_TabWidget?10 +QtWidgets.QStyle.ContentsType.CT_DialogButtons?10 +QtWidgets.QStyle.ContentsType.CT_HeaderSection?10 +QtWidgets.QStyle.ContentsType.CT_GroupBox?10 +QtWidgets.QStyle.ContentsType.CT_MdiControls?10 +QtWidgets.QStyle.ContentsType.CT_ItemViewItem?10 +QtWidgets.QStyle.ContentsType.CT_CustomBase?10 +QtWidgets.QStyle.PixelMetric?10 +QtWidgets.QStyle.PixelMetric.PM_ButtonMargin?10 +QtWidgets.QStyle.PixelMetric.PM_ButtonDefaultIndicator?10 +QtWidgets.QStyle.PixelMetric.PM_MenuButtonIndicator?10 +QtWidgets.QStyle.PixelMetric.PM_ButtonShiftHorizontal?10 +QtWidgets.QStyle.PixelMetric.PM_ButtonShiftVertical?10 +QtWidgets.QStyle.PixelMetric.PM_DefaultFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_SpinBoxFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_ComboBoxFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_MaximumDragDistance?10 +QtWidgets.QStyle.PixelMetric.PM_ScrollBarExtent?10 +QtWidgets.QStyle.PixelMetric.PM_ScrollBarSliderMin?10 +QtWidgets.QStyle.PixelMetric.PM_SliderThickness?10 +QtWidgets.QStyle.PixelMetric.PM_SliderControlThickness?10 +QtWidgets.QStyle.PixelMetric.PM_SliderLength?10 +QtWidgets.QStyle.PixelMetric.PM_SliderTickmarkOffset?10 +QtWidgets.QStyle.PixelMetric.PM_SliderSpaceAvailable?10 +QtWidgets.QStyle.PixelMetric.PM_DockWidgetSeparatorExtent?10 +QtWidgets.QStyle.PixelMetric.PM_DockWidgetHandleExtent?10 +QtWidgets.QStyle.PixelMetric.PM_DockWidgetFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarTabOverlap?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarTabHSpace?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarTabVSpace?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarBaseHeight?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarBaseOverlap?10 +QtWidgets.QStyle.PixelMetric.PM_ProgressBarChunkWidth?10 +QtWidgets.QStyle.PixelMetric.PM_SplitterWidth?10 +QtWidgets.QStyle.PixelMetric.PM_TitleBarHeight?10 +QtWidgets.QStyle.PixelMetric.PM_MenuScrollerHeight?10 +QtWidgets.QStyle.PixelMetric.PM_MenuHMargin?10 +QtWidgets.QStyle.PixelMetric.PM_MenuVMargin?10 +QtWidgets.QStyle.PixelMetric.PM_MenuPanelWidth?10 +QtWidgets.QStyle.PixelMetric.PM_MenuTearoffHeight?10 +QtWidgets.QStyle.PixelMetric.PM_MenuDesktopFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_MenuBarPanelWidth?10 +QtWidgets.QStyle.PixelMetric.PM_MenuBarItemSpacing?10 +QtWidgets.QStyle.PixelMetric.PM_MenuBarVMargin?10 +QtWidgets.QStyle.PixelMetric.PM_MenuBarHMargin?10 +QtWidgets.QStyle.PixelMetric.PM_IndicatorWidth?10 +QtWidgets.QStyle.PixelMetric.PM_IndicatorHeight?10 +QtWidgets.QStyle.PixelMetric.PM_ExclusiveIndicatorWidth?10 +QtWidgets.QStyle.PixelMetric.PM_ExclusiveIndicatorHeight?10 +QtWidgets.QStyle.PixelMetric.PM_DialogButtonsSeparator?10 +QtWidgets.QStyle.PixelMetric.PM_DialogButtonsButtonWidth?10 +QtWidgets.QStyle.PixelMetric.PM_DialogButtonsButtonHeight?10 +QtWidgets.QStyle.PixelMetric.PM_MdiSubWindowFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_MDIFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_MdiSubWindowMinimizedWidth?10 +QtWidgets.QStyle.PixelMetric.PM_MDIMinimizedWidth?10 +QtWidgets.QStyle.PixelMetric.PM_HeaderMargin?10 +QtWidgets.QStyle.PixelMetric.PM_HeaderMarkSize?10 +QtWidgets.QStyle.PixelMetric.PM_HeaderGripMargin?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarTabShiftHorizontal?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarTabShiftVertical?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarScrollButtonWidth?10 +QtWidgets.QStyle.PixelMetric.PM_ToolBarFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_ToolBarHandleExtent?10 +QtWidgets.QStyle.PixelMetric.PM_ToolBarItemSpacing?10 +QtWidgets.QStyle.PixelMetric.PM_ToolBarItemMargin?10 +QtWidgets.QStyle.PixelMetric.PM_ToolBarSeparatorExtent?10 +QtWidgets.QStyle.PixelMetric.PM_ToolBarExtensionExtent?10 +QtWidgets.QStyle.PixelMetric.PM_SpinBoxSliderHeight?10 +QtWidgets.QStyle.PixelMetric.PM_DefaultTopLevelMargin?10 +QtWidgets.QStyle.PixelMetric.PM_DefaultChildMargin?10 +QtWidgets.QStyle.PixelMetric.PM_DefaultLayoutSpacing?10 +QtWidgets.QStyle.PixelMetric.PM_ToolBarIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_ListViewIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_IconViewIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_SmallIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_LargeIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_FocusFrameVMargin?10 +QtWidgets.QStyle.PixelMetric.PM_FocusFrameHMargin?10 +QtWidgets.QStyle.PixelMetric.PM_ToolTipLabelFrameWidth?10 +QtWidgets.QStyle.PixelMetric.PM_CheckBoxLabelSpacing?10 +QtWidgets.QStyle.PixelMetric.PM_TabBarIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_SizeGripSize?10 +QtWidgets.QStyle.PixelMetric.PM_DockWidgetTitleMargin?10 +QtWidgets.QStyle.PixelMetric.PM_MessageBoxIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_ButtonIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_DockWidgetTitleBarButtonMargin?10 +QtWidgets.QStyle.PixelMetric.PM_RadioButtonLabelSpacing?10 +QtWidgets.QStyle.PixelMetric.PM_LayoutLeftMargin?10 +QtWidgets.QStyle.PixelMetric.PM_LayoutTopMargin?10 +QtWidgets.QStyle.PixelMetric.PM_LayoutRightMargin?10 +QtWidgets.QStyle.PixelMetric.PM_LayoutBottomMargin?10 +QtWidgets.QStyle.PixelMetric.PM_LayoutHorizontalSpacing?10 +QtWidgets.QStyle.PixelMetric.PM_LayoutVerticalSpacing?10 +QtWidgets.QStyle.PixelMetric.PM_TabBar_ScrollButtonOverlap?10 +QtWidgets.QStyle.PixelMetric.PM_TextCursorWidth?10 +QtWidgets.QStyle.PixelMetric.PM_TabCloseIndicatorWidth?10 +QtWidgets.QStyle.PixelMetric.PM_TabCloseIndicatorHeight?10 +QtWidgets.QStyle.PixelMetric.PM_ScrollView_ScrollBarSpacing?10 +QtWidgets.QStyle.PixelMetric.PM_SubMenuOverlap?10 +QtWidgets.QStyle.PixelMetric.PM_ScrollView_ScrollBarOverlap?10 +QtWidgets.QStyle.PixelMetric.PM_TreeViewIndentation?10 +QtWidgets.QStyle.PixelMetric.PM_HeaderDefaultSectionSizeHorizontal?10 +QtWidgets.QStyle.PixelMetric.PM_HeaderDefaultSectionSizeVertical?10 +QtWidgets.QStyle.PixelMetric.PM_TitleBarButtonIconSize?10 +QtWidgets.QStyle.PixelMetric.PM_TitleBarButtonSize?10 +QtWidgets.QStyle.PixelMetric.PM_CustomBase?10 +QtWidgets.QStyle.SubControl?10 +QtWidgets.QStyle.SubControl.SC_None?10 +QtWidgets.QStyle.SubControl.SC_ScrollBarAddLine?10 +QtWidgets.QStyle.SubControl.SC_ScrollBarSubLine?10 +QtWidgets.QStyle.SubControl.SC_ScrollBarAddPage?10 +QtWidgets.QStyle.SubControl.SC_ScrollBarSubPage?10 +QtWidgets.QStyle.SubControl.SC_ScrollBarFirst?10 +QtWidgets.QStyle.SubControl.SC_ScrollBarLast?10 +QtWidgets.QStyle.SubControl.SC_ScrollBarSlider?10 +QtWidgets.QStyle.SubControl.SC_ScrollBarGroove?10 +QtWidgets.QStyle.SubControl.SC_SpinBoxUp?10 +QtWidgets.QStyle.SubControl.SC_SpinBoxDown?10 +QtWidgets.QStyle.SubControl.SC_SpinBoxFrame?10 +QtWidgets.QStyle.SubControl.SC_SpinBoxEditField?10 +QtWidgets.QStyle.SubControl.SC_ComboBoxFrame?10 +QtWidgets.QStyle.SubControl.SC_ComboBoxEditField?10 +QtWidgets.QStyle.SubControl.SC_ComboBoxArrow?10 +QtWidgets.QStyle.SubControl.SC_ComboBoxListBoxPopup?10 +QtWidgets.QStyle.SubControl.SC_SliderGroove?10 +QtWidgets.QStyle.SubControl.SC_SliderHandle?10 +QtWidgets.QStyle.SubControl.SC_SliderTickmarks?10 +QtWidgets.QStyle.SubControl.SC_ToolButton?10 +QtWidgets.QStyle.SubControl.SC_ToolButtonMenu?10 +QtWidgets.QStyle.SubControl.SC_TitleBarSysMenu?10 +QtWidgets.QStyle.SubControl.SC_TitleBarMinButton?10 +QtWidgets.QStyle.SubControl.SC_TitleBarMaxButton?10 +QtWidgets.QStyle.SubControl.SC_TitleBarCloseButton?10 +QtWidgets.QStyle.SubControl.SC_TitleBarNormalButton?10 +QtWidgets.QStyle.SubControl.SC_TitleBarShadeButton?10 +QtWidgets.QStyle.SubControl.SC_TitleBarUnshadeButton?10 +QtWidgets.QStyle.SubControl.SC_TitleBarContextHelpButton?10 +QtWidgets.QStyle.SubControl.SC_TitleBarLabel?10 +QtWidgets.QStyle.SubControl.SC_DialGroove?10 +QtWidgets.QStyle.SubControl.SC_DialHandle?10 +QtWidgets.QStyle.SubControl.SC_DialTickmarks?10 +QtWidgets.QStyle.SubControl.SC_GroupBoxCheckBox?10 +QtWidgets.QStyle.SubControl.SC_GroupBoxLabel?10 +QtWidgets.QStyle.SubControl.SC_GroupBoxContents?10 +QtWidgets.QStyle.SubControl.SC_GroupBoxFrame?10 +QtWidgets.QStyle.SubControl.SC_MdiMinButton?10 +QtWidgets.QStyle.SubControl.SC_MdiNormalButton?10 +QtWidgets.QStyle.SubControl.SC_MdiCloseButton?10 +QtWidgets.QStyle.SubControl.SC_CustomBase?10 +QtWidgets.QStyle.SubControl.SC_All?10 +QtWidgets.QStyle.ComplexControl?10 +QtWidgets.QStyle.ComplexControl.CC_SpinBox?10 +QtWidgets.QStyle.ComplexControl.CC_ComboBox?10 +QtWidgets.QStyle.ComplexControl.CC_ScrollBar?10 +QtWidgets.QStyle.ComplexControl.CC_Slider?10 +QtWidgets.QStyle.ComplexControl.CC_ToolButton?10 +QtWidgets.QStyle.ComplexControl.CC_TitleBar?10 +QtWidgets.QStyle.ComplexControl.CC_Dial?10 +QtWidgets.QStyle.ComplexControl.CC_GroupBox?10 +QtWidgets.QStyle.ComplexControl.CC_MdiControls?10 +QtWidgets.QStyle.ComplexControl.CC_CustomBase?10 +QtWidgets.QStyle.SubElement?10 +QtWidgets.QStyle.SubElement.SE_PushButtonContents?10 +QtWidgets.QStyle.SubElement.SE_PushButtonFocusRect?10 +QtWidgets.QStyle.SubElement.SE_CheckBoxIndicator?10 +QtWidgets.QStyle.SubElement.SE_CheckBoxContents?10 +QtWidgets.QStyle.SubElement.SE_CheckBoxFocusRect?10 +QtWidgets.QStyle.SubElement.SE_CheckBoxClickRect?10 +QtWidgets.QStyle.SubElement.SE_RadioButtonIndicator?10 +QtWidgets.QStyle.SubElement.SE_RadioButtonContents?10 +QtWidgets.QStyle.SubElement.SE_RadioButtonFocusRect?10 +QtWidgets.QStyle.SubElement.SE_RadioButtonClickRect?10 +QtWidgets.QStyle.SubElement.SE_ComboBoxFocusRect?10 +QtWidgets.QStyle.SubElement.SE_SliderFocusRect?10 +QtWidgets.QStyle.SubElement.SE_ProgressBarGroove?10 +QtWidgets.QStyle.SubElement.SE_ProgressBarContents?10 +QtWidgets.QStyle.SubElement.SE_ProgressBarLabel?10 +QtWidgets.QStyle.SubElement.SE_ToolBoxTabContents?10 +QtWidgets.QStyle.SubElement.SE_HeaderLabel?10 +QtWidgets.QStyle.SubElement.SE_HeaderArrow?10 +QtWidgets.QStyle.SubElement.SE_TabWidgetTabBar?10 +QtWidgets.QStyle.SubElement.SE_TabWidgetTabPane?10 +QtWidgets.QStyle.SubElement.SE_TabWidgetTabContents?10 +QtWidgets.QStyle.SubElement.SE_TabWidgetLeftCorner?10 +QtWidgets.QStyle.SubElement.SE_TabWidgetRightCorner?10 +QtWidgets.QStyle.SubElement.SE_ViewItemCheckIndicator?10 +QtWidgets.QStyle.SubElement.SE_TabBarTearIndicator?10 +QtWidgets.QStyle.SubElement.SE_TreeViewDisclosureItem?10 +QtWidgets.QStyle.SubElement.SE_LineEditContents?10 +QtWidgets.QStyle.SubElement.SE_FrameContents?10 +QtWidgets.QStyle.SubElement.SE_DockWidgetCloseButton?10 +QtWidgets.QStyle.SubElement.SE_DockWidgetFloatButton?10 +QtWidgets.QStyle.SubElement.SE_DockWidgetTitleBarText?10 +QtWidgets.QStyle.SubElement.SE_DockWidgetIcon?10 +QtWidgets.QStyle.SubElement.SE_CheckBoxLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_ComboBoxLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_DateTimeEditLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_DialogButtonBoxLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_LabelLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_ProgressBarLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_PushButtonLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_RadioButtonLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_SliderLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_SpinBoxLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_ToolButtonLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_FrameLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_GroupBoxLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_TabWidgetLayoutItem?10 +QtWidgets.QStyle.SubElement.SE_ItemViewItemCheckIndicator?10 +QtWidgets.QStyle.SubElement.SE_ItemViewItemDecoration?10 +QtWidgets.QStyle.SubElement.SE_ItemViewItemText?10 +QtWidgets.QStyle.SubElement.SE_ItemViewItemFocusRect?10 +QtWidgets.QStyle.SubElement.SE_TabBarTabLeftButton?10 +QtWidgets.QStyle.SubElement.SE_TabBarTabRightButton?10 +QtWidgets.QStyle.SubElement.SE_TabBarTabText?10 +QtWidgets.QStyle.SubElement.SE_ShapedFrameContents?10 +QtWidgets.QStyle.SubElement.SE_ToolBarHandle?10 +QtWidgets.QStyle.SubElement.SE_TabBarTearIndicatorLeft?10 +QtWidgets.QStyle.SubElement.SE_TabBarScrollLeftButton?10 +QtWidgets.QStyle.SubElement.SE_TabBarScrollRightButton?10 +QtWidgets.QStyle.SubElement.SE_TabBarTearIndicatorRight?10 +QtWidgets.QStyle.SubElement.SE_PushButtonBevel?10 +QtWidgets.QStyle.SubElement.SE_CustomBase?10 +QtWidgets.QStyle.ControlElement?10 +QtWidgets.QStyle.ControlElement.CE_PushButton?10 +QtWidgets.QStyle.ControlElement.CE_PushButtonBevel?10 +QtWidgets.QStyle.ControlElement.CE_PushButtonLabel?10 +QtWidgets.QStyle.ControlElement.CE_CheckBox?10 +QtWidgets.QStyle.ControlElement.CE_CheckBoxLabel?10 +QtWidgets.QStyle.ControlElement.CE_RadioButton?10 +QtWidgets.QStyle.ControlElement.CE_RadioButtonLabel?10 +QtWidgets.QStyle.ControlElement.CE_TabBarTab?10 +QtWidgets.QStyle.ControlElement.CE_TabBarTabShape?10 +QtWidgets.QStyle.ControlElement.CE_TabBarTabLabel?10 +QtWidgets.QStyle.ControlElement.CE_ProgressBar?10 +QtWidgets.QStyle.ControlElement.CE_ProgressBarGroove?10 +QtWidgets.QStyle.ControlElement.CE_ProgressBarContents?10 +QtWidgets.QStyle.ControlElement.CE_ProgressBarLabel?10 +QtWidgets.QStyle.ControlElement.CE_MenuItem?10 +QtWidgets.QStyle.ControlElement.CE_MenuScroller?10 +QtWidgets.QStyle.ControlElement.CE_MenuVMargin?10 +QtWidgets.QStyle.ControlElement.CE_MenuHMargin?10 +QtWidgets.QStyle.ControlElement.CE_MenuTearoff?10 +QtWidgets.QStyle.ControlElement.CE_MenuEmptyArea?10 +QtWidgets.QStyle.ControlElement.CE_MenuBarItem?10 +QtWidgets.QStyle.ControlElement.CE_MenuBarEmptyArea?10 +QtWidgets.QStyle.ControlElement.CE_ToolButtonLabel?10 +QtWidgets.QStyle.ControlElement.CE_Header?10 +QtWidgets.QStyle.ControlElement.CE_HeaderSection?10 +QtWidgets.QStyle.ControlElement.CE_HeaderLabel?10 +QtWidgets.QStyle.ControlElement.CE_ToolBoxTab?10 +QtWidgets.QStyle.ControlElement.CE_SizeGrip?10 +QtWidgets.QStyle.ControlElement.CE_Splitter?10 +QtWidgets.QStyle.ControlElement.CE_RubberBand?10 +QtWidgets.QStyle.ControlElement.CE_DockWidgetTitle?10 +QtWidgets.QStyle.ControlElement.CE_ScrollBarAddLine?10 +QtWidgets.QStyle.ControlElement.CE_ScrollBarSubLine?10 +QtWidgets.QStyle.ControlElement.CE_ScrollBarAddPage?10 +QtWidgets.QStyle.ControlElement.CE_ScrollBarSubPage?10 +QtWidgets.QStyle.ControlElement.CE_ScrollBarSlider?10 +QtWidgets.QStyle.ControlElement.CE_ScrollBarFirst?10 +QtWidgets.QStyle.ControlElement.CE_ScrollBarLast?10 +QtWidgets.QStyle.ControlElement.CE_FocusFrame?10 +QtWidgets.QStyle.ControlElement.CE_ComboBoxLabel?10 +QtWidgets.QStyle.ControlElement.CE_ToolBar?10 +QtWidgets.QStyle.ControlElement.CE_ToolBoxTabShape?10 +QtWidgets.QStyle.ControlElement.CE_ToolBoxTabLabel?10 +QtWidgets.QStyle.ControlElement.CE_HeaderEmptyArea?10 +QtWidgets.QStyle.ControlElement.CE_ColumnViewGrip?10 +QtWidgets.QStyle.ControlElement.CE_ItemViewItem?10 +QtWidgets.QStyle.ControlElement.CE_ShapedFrame?10 +QtWidgets.QStyle.ControlElement.CE_CustomBase?10 +QtWidgets.QStyle.PrimitiveElement?10 +QtWidgets.QStyle.PrimitiveElement.PE_Frame?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameDefaultButton?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameDockWidget?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameFocusRect?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameGroupBox?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameLineEdit?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameMenu?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameStatusBar?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameTabWidget?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameWindow?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameButtonBevel?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameButtonTool?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameTabBarBase?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelButtonCommand?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelButtonBevel?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelButtonTool?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelMenuBar?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelToolBar?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelLineEdit?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorArrowDown?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorArrowLeft?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorArrowRight?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorArrowUp?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorBranch?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorButtonDropDown?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorViewItemCheck?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorCheckBox?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorDockWidgetResizeHandle?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorHeaderArrow?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorMenuCheckMark?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorProgressChunk?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorRadioButton?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorSpinDown?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorSpinMinus?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorSpinPlus?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorSpinUp?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorToolBarHandle?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorToolBarSeparator?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelTipLabel?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorTabTear?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelScrollAreaCorner?10 +QtWidgets.QStyle.PrimitiveElement.PE_Widget?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorColumnViewArrow?10 +QtWidgets.QStyle.PrimitiveElement.PE_FrameStatusBarItem?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorItemViewItemCheck?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorItemViewItemDrop?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelItemViewItem?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelItemViewRow?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelStatusBar?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorTabClose?10 +QtWidgets.QStyle.PrimitiveElement.PE_PanelMenu?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorTabTearLeft?10 +QtWidgets.QStyle.PrimitiveElement.PE_IndicatorTabTearRight?10 +QtWidgets.QStyle.PrimitiveElement.PE_CustomBase?10 +QtWidgets.QStyle.StateFlag?10 +QtWidgets.QStyle.StateFlag.State_None?10 +QtWidgets.QStyle.StateFlag.State_Enabled?10 +QtWidgets.QStyle.StateFlag.State_Raised?10 +QtWidgets.QStyle.StateFlag.State_Sunken?10 +QtWidgets.QStyle.StateFlag.State_Off?10 +QtWidgets.QStyle.StateFlag.State_NoChange?10 +QtWidgets.QStyle.StateFlag.State_On?10 +QtWidgets.QStyle.StateFlag.State_DownArrow?10 +QtWidgets.QStyle.StateFlag.State_Horizontal?10 +QtWidgets.QStyle.StateFlag.State_HasFocus?10 +QtWidgets.QStyle.StateFlag.State_Top?10 +QtWidgets.QStyle.StateFlag.State_Bottom?10 +QtWidgets.QStyle.StateFlag.State_FocusAtBorder?10 +QtWidgets.QStyle.StateFlag.State_AutoRaise?10 +QtWidgets.QStyle.StateFlag.State_MouseOver?10 +QtWidgets.QStyle.StateFlag.State_UpArrow?10 +QtWidgets.QStyle.StateFlag.State_Selected?10 +QtWidgets.QStyle.StateFlag.State_Active?10 +QtWidgets.QStyle.StateFlag.State_Open?10 +QtWidgets.QStyle.StateFlag.State_Children?10 +QtWidgets.QStyle.StateFlag.State_Item?10 +QtWidgets.QStyle.StateFlag.State_Sibling?10 +QtWidgets.QStyle.StateFlag.State_Editing?10 +QtWidgets.QStyle.StateFlag.State_KeyboardFocusChange?10 +QtWidgets.QStyle.StateFlag.State_ReadOnly?10 +QtWidgets.QStyle.StateFlag.State_Window?10 +QtWidgets.QStyle.StateFlag.State_Small?10 +QtWidgets.QStyle.StateFlag.State_Mini?10 +QtWidgets.QStyle?1() +QtWidgets.QStyle.__init__?1(self) +QtWidgets.QStyle.polish?4(QWidget) +QtWidgets.QStyle.unpolish?4(QWidget) +QtWidgets.QStyle.polish?4(QApplication) +QtWidgets.QStyle.unpolish?4(QApplication) +QtWidgets.QStyle.polish?4(QPalette) -> QPalette +QtWidgets.QStyle.itemTextRect?4(QFontMetrics, QRect, int, bool, QString) -> QRect +QtWidgets.QStyle.itemPixmapRect?4(QRect, int, QPixmap) -> QRect +QtWidgets.QStyle.drawItemText?4(QPainter, QRect, int, QPalette, bool, QString, QPalette.ColorRole textRole=QPalette.NoRole) +QtWidgets.QStyle.drawItemPixmap?4(QPainter, QRect, int, QPixmap) +QtWidgets.QStyle.standardPalette?4() -> QPalette +QtWidgets.QStyle.drawPrimitive?4(QStyle.PrimitiveElement, QStyleOption, QPainter, QWidget widget=None) +QtWidgets.QStyle.drawControl?4(QStyle.ControlElement, QStyleOption, QPainter, QWidget widget=None) +QtWidgets.QStyle.subElementRect?4(QStyle.SubElement, QStyleOption, QWidget widget=None) -> QRect +QtWidgets.QStyle.drawComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPainter, QWidget widget=None) +QtWidgets.QStyle.hitTestComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPoint, QWidget widget=None) -> QStyle.SubControl +QtWidgets.QStyle.subControlRect?4(QStyle.ComplexControl, QStyleOptionComplex, QStyle.SubControl, QWidget widget=None) -> QRect +QtWidgets.QStyle.pixelMetric?4(QStyle.PixelMetric, QStyleOption option=None, QWidget widget=None) -> int +QtWidgets.QStyle.sizeFromContents?4(QStyle.ContentsType, QStyleOption, QSize, QWidget widget=None) -> QSize +QtWidgets.QStyle.styleHint?4(QStyle.StyleHint, QStyleOption option=None, QWidget widget=None, QStyleHintReturn returnData=None) -> int +QtWidgets.QStyle.standardPixmap?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QPixmap +QtWidgets.QStyle.standardIcon?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QIcon +QtWidgets.QStyle.generatedIconPixmap?4(QIcon.Mode, QPixmap, QStyleOption) -> QPixmap +QtWidgets.QStyle.visualRect?4(Qt.LayoutDirection, QRect, QRect) -> QRect +QtWidgets.QStyle.visualPos?4(Qt.LayoutDirection, QRect, QPoint) -> QPoint +QtWidgets.QStyle.sliderPositionFromValue?4(int, int, int, int, bool upsideDown=False) -> int +QtWidgets.QStyle.sliderValueFromPosition?4(int, int, int, int, bool upsideDown=False) -> int +QtWidgets.QStyle.visualAlignment?4(Qt.LayoutDirection, Qt.Alignment) -> Qt.Alignment +QtWidgets.QStyle.alignedRect?4(Qt.LayoutDirection, Qt.Alignment, QSize, QRect) -> QRect +QtWidgets.QStyle.layoutSpacing?4(QSizePolicy.ControlType, QSizePolicy.ControlType, Qt.Orientation, QStyleOption option=None, QWidget widget=None) -> int +QtWidgets.QStyle.combinedLayoutSpacing?4(QSizePolicy.ControlTypes, QSizePolicy.ControlTypes, Qt.Orientation, QStyleOption option=None, QWidget widget=None) -> int +QtWidgets.QStyle.proxy?4() -> QStyle +QtWidgets.QCommonStyle?1() +QtWidgets.QCommonStyle.__init__?1(self) +QtWidgets.QCommonStyle.polish?4(QWidget) +QtWidgets.QCommonStyle.unpolish?4(QWidget) +QtWidgets.QCommonStyle.polish?4(QApplication) +QtWidgets.QCommonStyle.unpolish?4(QApplication) +QtWidgets.QCommonStyle.polish?4(QPalette) -> QPalette +QtWidgets.QCommonStyle.drawPrimitive?4(QStyle.PrimitiveElement, QStyleOption, QPainter, QWidget widget=None) +QtWidgets.QCommonStyle.drawControl?4(QStyle.ControlElement, QStyleOption, QPainter, QWidget widget=None) +QtWidgets.QCommonStyle.subElementRect?4(QStyle.SubElement, QStyleOption, QWidget widget=None) -> QRect +QtWidgets.QCommonStyle.drawComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPainter, QWidget widget=None) +QtWidgets.QCommonStyle.hitTestComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPoint, QWidget widget=None) -> QStyle.SubControl +QtWidgets.QCommonStyle.subControlRect?4(QStyle.ComplexControl, QStyleOptionComplex, QStyle.SubControl, QWidget widget=None) -> QRect +QtWidgets.QCommonStyle.sizeFromContents?4(QStyle.ContentsType, QStyleOption, QSize, QWidget widget=None) -> QSize +QtWidgets.QCommonStyle.pixelMetric?4(QStyle.PixelMetric, QStyleOption option=None, QWidget widget=None) -> int +QtWidgets.QCommonStyle.styleHint?4(QStyle.StyleHint, QStyleOption option=None, QWidget widget=None, QStyleHintReturn returnData=None) -> int +QtWidgets.QCommonStyle.standardPixmap?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QPixmap +QtWidgets.QCommonStyle.generatedIconPixmap?4(QIcon.Mode, QPixmap, QStyleOption) -> QPixmap +QtWidgets.QCommonStyle.standardIcon?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QIcon +QtWidgets.QCommonStyle.layoutSpacing?4(QSizePolicy.ControlType, QSizePolicy.ControlType, Qt.Orientation, QStyleOption option=None, QWidget widget=None) -> int +QtWidgets.QCompleter.ModelSorting?10 +QtWidgets.QCompleter.ModelSorting.UnsortedModel?10 +QtWidgets.QCompleter.ModelSorting.CaseSensitivelySortedModel?10 +QtWidgets.QCompleter.ModelSorting.CaseInsensitivelySortedModel?10 +QtWidgets.QCompleter.CompletionMode?10 +QtWidgets.QCompleter.CompletionMode.PopupCompletion?10 +QtWidgets.QCompleter.CompletionMode.UnfilteredPopupCompletion?10 +QtWidgets.QCompleter.CompletionMode.InlineCompletion?10 +QtWidgets.QCompleter?1(QAbstractItemModel, QObject parent=None) +QtWidgets.QCompleter.__init__?1(self, QAbstractItemModel, QObject parent=None) +QtWidgets.QCompleter?1(QStringList, QObject parent=None) +QtWidgets.QCompleter.__init__?1(self, QStringList, QObject parent=None) +QtWidgets.QCompleter?1(QObject parent=None) +QtWidgets.QCompleter.__init__?1(self, QObject parent=None) +QtWidgets.QCompleter.setWidget?4(QWidget) +QtWidgets.QCompleter.widget?4() -> QWidget +QtWidgets.QCompleter.setModel?4(QAbstractItemModel) +QtWidgets.QCompleter.model?4() -> QAbstractItemModel +QtWidgets.QCompleter.setCompletionMode?4(QCompleter.CompletionMode) +QtWidgets.QCompleter.completionMode?4() -> QCompleter.CompletionMode +QtWidgets.QCompleter.popup?4() -> QAbstractItemView +QtWidgets.QCompleter.setPopup?4(QAbstractItemView) +QtWidgets.QCompleter.setCaseSensitivity?4(Qt.CaseSensitivity) +QtWidgets.QCompleter.caseSensitivity?4() -> Qt.CaseSensitivity +QtWidgets.QCompleter.setModelSorting?4(QCompleter.ModelSorting) +QtWidgets.QCompleter.modelSorting?4() -> QCompleter.ModelSorting +QtWidgets.QCompleter.setCompletionColumn?4(int) +QtWidgets.QCompleter.completionColumn?4() -> int +QtWidgets.QCompleter.setCompletionRole?4(int) +QtWidgets.QCompleter.completionRole?4() -> int +QtWidgets.QCompleter.completionCount?4() -> int +QtWidgets.QCompleter.setCurrentRow?4(int) -> bool +QtWidgets.QCompleter.currentRow?4() -> int +QtWidgets.QCompleter.currentIndex?4() -> QModelIndex +QtWidgets.QCompleter.currentCompletion?4() -> QString +QtWidgets.QCompleter.completionModel?4() -> QAbstractItemModel +QtWidgets.QCompleter.completionPrefix?4() -> QString +QtWidgets.QCompleter.pathFromIndex?4(QModelIndex) -> QString +QtWidgets.QCompleter.splitPath?4(QString) -> QStringList +QtWidgets.QCompleter.wrapAround?4() -> bool +QtWidgets.QCompleter.complete?4(QRect rect=QRect()) +QtWidgets.QCompleter.setCompletionPrefix?4(QString) +QtWidgets.QCompleter.setWrapAround?4(bool) +QtWidgets.QCompleter.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QCompleter.event?4(QEvent) -> bool +QtWidgets.QCompleter.activated?4(QString) +QtWidgets.QCompleter.activated?4(QModelIndex) +QtWidgets.QCompleter.highlighted?4(QString) +QtWidgets.QCompleter.highlighted?4(QModelIndex) +QtWidgets.QCompleter.maxVisibleItems?4() -> int +QtWidgets.QCompleter.setMaxVisibleItems?4(int) +QtWidgets.QCompleter.setFilterMode?4(Qt.MatchFlags) +QtWidgets.QCompleter.filterMode?4() -> Qt.MatchFlags +QtWidgets.QDataWidgetMapper.SubmitPolicy?10 +QtWidgets.QDataWidgetMapper.SubmitPolicy.AutoSubmit?10 +QtWidgets.QDataWidgetMapper.SubmitPolicy.ManualSubmit?10 +QtWidgets.QDataWidgetMapper?1(QObject parent=None) +QtWidgets.QDataWidgetMapper.__init__?1(self, QObject parent=None) +QtWidgets.QDataWidgetMapper.setModel?4(QAbstractItemModel) +QtWidgets.QDataWidgetMapper.model?4() -> QAbstractItemModel +QtWidgets.QDataWidgetMapper.setItemDelegate?4(QAbstractItemDelegate) +QtWidgets.QDataWidgetMapper.itemDelegate?4() -> QAbstractItemDelegate +QtWidgets.QDataWidgetMapper.setRootIndex?4(QModelIndex) +QtWidgets.QDataWidgetMapper.rootIndex?4() -> QModelIndex +QtWidgets.QDataWidgetMapper.setOrientation?4(Qt.Orientation) +QtWidgets.QDataWidgetMapper.orientation?4() -> Qt.Orientation +QtWidgets.QDataWidgetMapper.setSubmitPolicy?4(QDataWidgetMapper.SubmitPolicy) +QtWidgets.QDataWidgetMapper.submitPolicy?4() -> QDataWidgetMapper.SubmitPolicy +QtWidgets.QDataWidgetMapper.addMapping?4(QWidget, int) +QtWidgets.QDataWidgetMapper.addMapping?4(QWidget, int, QByteArray) +QtWidgets.QDataWidgetMapper.removeMapping?4(QWidget) +QtWidgets.QDataWidgetMapper.mappedPropertyName?4(QWidget) -> QByteArray +QtWidgets.QDataWidgetMapper.mappedSection?4(QWidget) -> int +QtWidgets.QDataWidgetMapper.mappedWidgetAt?4(int) -> QWidget +QtWidgets.QDataWidgetMapper.clearMapping?4() +QtWidgets.QDataWidgetMapper.currentIndex?4() -> int +QtWidgets.QDataWidgetMapper.revert?4() +QtWidgets.QDataWidgetMapper.setCurrentIndex?4(int) +QtWidgets.QDataWidgetMapper.setCurrentModelIndex?4(QModelIndex) +QtWidgets.QDataWidgetMapper.submit?4() -> bool +QtWidgets.QDataWidgetMapper.toFirst?4() +QtWidgets.QDataWidgetMapper.toLast?4() +QtWidgets.QDataWidgetMapper.toNext?4() +QtWidgets.QDataWidgetMapper.toPrevious?4() +QtWidgets.QDataWidgetMapper.currentIndexChanged?4(int) +QtWidgets.QDateTimeEdit.Section?10 +QtWidgets.QDateTimeEdit.Section.NoSection?10 +QtWidgets.QDateTimeEdit.Section.AmPmSection?10 +QtWidgets.QDateTimeEdit.Section.MSecSection?10 +QtWidgets.QDateTimeEdit.Section.SecondSection?10 +QtWidgets.QDateTimeEdit.Section.MinuteSection?10 +QtWidgets.QDateTimeEdit.Section.HourSection?10 +QtWidgets.QDateTimeEdit.Section.DaySection?10 +QtWidgets.QDateTimeEdit.Section.MonthSection?10 +QtWidgets.QDateTimeEdit.Section.YearSection?10 +QtWidgets.QDateTimeEdit.Section.TimeSections_Mask?10 +QtWidgets.QDateTimeEdit.Section.DateSections_Mask?10 +QtWidgets.QDateTimeEdit?1(QWidget parent=None) +QtWidgets.QDateTimeEdit.__init__?1(self, QWidget parent=None) +QtWidgets.QDateTimeEdit?1(QDateTime, QWidget parent=None) +QtWidgets.QDateTimeEdit.__init__?1(self, QDateTime, QWidget parent=None) +QtWidgets.QDateTimeEdit?1(QDate, QWidget parent=None) +QtWidgets.QDateTimeEdit.__init__?1(self, QDate, QWidget parent=None) +QtWidgets.QDateTimeEdit?1(QTime, QWidget parent=None) +QtWidgets.QDateTimeEdit.__init__?1(self, QTime, QWidget parent=None) +QtWidgets.QDateTimeEdit.dateTime?4() -> QDateTime +QtWidgets.QDateTimeEdit.date?4() -> QDate +QtWidgets.QDateTimeEdit.time?4() -> QTime +QtWidgets.QDateTimeEdit.minimumDate?4() -> QDate +QtWidgets.QDateTimeEdit.setMinimumDate?4(QDate) +QtWidgets.QDateTimeEdit.clearMinimumDate?4() +QtWidgets.QDateTimeEdit.maximumDate?4() -> QDate +QtWidgets.QDateTimeEdit.setMaximumDate?4(QDate) +QtWidgets.QDateTimeEdit.clearMaximumDate?4() +QtWidgets.QDateTimeEdit.setDateRange?4(QDate, QDate) +QtWidgets.QDateTimeEdit.minimumTime?4() -> QTime +QtWidgets.QDateTimeEdit.setMinimumTime?4(QTime) +QtWidgets.QDateTimeEdit.clearMinimumTime?4() +QtWidgets.QDateTimeEdit.maximumTime?4() -> QTime +QtWidgets.QDateTimeEdit.setMaximumTime?4(QTime) +QtWidgets.QDateTimeEdit.clearMaximumTime?4() +QtWidgets.QDateTimeEdit.setTimeRange?4(QTime, QTime) +QtWidgets.QDateTimeEdit.displayedSections?4() -> QDateTimeEdit.Sections +QtWidgets.QDateTimeEdit.currentSection?4() -> QDateTimeEdit.Section +QtWidgets.QDateTimeEdit.setCurrentSection?4(QDateTimeEdit.Section) +QtWidgets.QDateTimeEdit.sectionText?4(QDateTimeEdit.Section) -> QString +QtWidgets.QDateTimeEdit.displayFormat?4() -> QString +QtWidgets.QDateTimeEdit.setDisplayFormat?4(QString) +QtWidgets.QDateTimeEdit.calendarPopup?4() -> bool +QtWidgets.QDateTimeEdit.setCalendarPopup?4(bool) +QtWidgets.QDateTimeEdit.setSelectedSection?4(QDateTimeEdit.Section) +QtWidgets.QDateTimeEdit.sizeHint?4() -> QSize +QtWidgets.QDateTimeEdit.clear?4() +QtWidgets.QDateTimeEdit.stepBy?4(int) +QtWidgets.QDateTimeEdit.event?4(QEvent) -> bool +QtWidgets.QDateTimeEdit.sectionAt?4(int) -> QDateTimeEdit.Section +QtWidgets.QDateTimeEdit.currentSectionIndex?4() -> int +QtWidgets.QDateTimeEdit.setCurrentSectionIndex?4(int) +QtWidgets.QDateTimeEdit.sectionCount?4() -> int +QtWidgets.QDateTimeEdit.dateTimeChanged?4(QDateTime) +QtWidgets.QDateTimeEdit.timeChanged?4(QTime) +QtWidgets.QDateTimeEdit.dateChanged?4(QDate) +QtWidgets.QDateTimeEdit.setDateTime?4(QDateTime) +QtWidgets.QDateTimeEdit.setDate?4(QDate) +QtWidgets.QDateTimeEdit.setTime?4(QTime) +QtWidgets.QDateTimeEdit.initStyleOption?4(QStyleOptionSpinBox) +QtWidgets.QDateTimeEdit.keyPressEvent?4(QKeyEvent) +QtWidgets.QDateTimeEdit.wheelEvent?4(QWheelEvent) +QtWidgets.QDateTimeEdit.focusInEvent?4(QFocusEvent) +QtWidgets.QDateTimeEdit.focusNextPrevChild?4(bool) -> bool +QtWidgets.QDateTimeEdit.mousePressEvent?4(QMouseEvent) +QtWidgets.QDateTimeEdit.paintEvent?4(QPaintEvent) +QtWidgets.QDateTimeEdit.validate?4(QString, int) -> (QValidator.State, QString, int) +QtWidgets.QDateTimeEdit.fixup?4(QString) -> QString +QtWidgets.QDateTimeEdit.dateTimeFromText?4(QString) -> QDateTime +QtWidgets.QDateTimeEdit.textFromDateTime?4(QDateTime) -> QString +QtWidgets.QDateTimeEdit.stepEnabled?4() -> QAbstractSpinBox.StepEnabled +QtWidgets.QDateTimeEdit.minimumDateTime?4() -> QDateTime +QtWidgets.QDateTimeEdit.clearMinimumDateTime?4() +QtWidgets.QDateTimeEdit.setMinimumDateTime?4(QDateTime) +QtWidgets.QDateTimeEdit.maximumDateTime?4() -> QDateTime +QtWidgets.QDateTimeEdit.clearMaximumDateTime?4() +QtWidgets.QDateTimeEdit.setMaximumDateTime?4(QDateTime) +QtWidgets.QDateTimeEdit.setDateTimeRange?4(QDateTime, QDateTime) +QtWidgets.QDateTimeEdit.calendarWidget?4() -> QCalendarWidget +QtWidgets.QDateTimeEdit.setCalendarWidget?4(QCalendarWidget) +QtWidgets.QDateTimeEdit.timeSpec?4() -> Qt.TimeSpec +QtWidgets.QDateTimeEdit.setTimeSpec?4(Qt.TimeSpec) +QtWidgets.QDateTimeEdit.calendar?4() -> QCalendar +QtWidgets.QDateTimeEdit.setCalendar?4(QCalendar) +QtWidgets.QDateTimeEdit.Sections?1() +QtWidgets.QDateTimeEdit.Sections.__init__?1(self) +QtWidgets.QDateTimeEdit.Sections?1(int) +QtWidgets.QDateTimeEdit.Sections.__init__?1(self, int) +QtWidgets.QDateTimeEdit.Sections?1(QDateTimeEdit.Sections) +QtWidgets.QDateTimeEdit.Sections.__init__?1(self, QDateTimeEdit.Sections) +QtWidgets.QTimeEdit?1(QWidget parent=None) +QtWidgets.QTimeEdit.__init__?1(self, QWidget parent=None) +QtWidgets.QTimeEdit?1(QTime, QWidget parent=None) +QtWidgets.QTimeEdit.__init__?1(self, QTime, QWidget parent=None) +QtWidgets.QDateEdit?1(QWidget parent=None) +QtWidgets.QDateEdit.__init__?1(self, QWidget parent=None) +QtWidgets.QDateEdit?1(QDate, QWidget parent=None) +QtWidgets.QDateEdit.__init__?1(self, QDate, QWidget parent=None) +QtWidgets.QDesktopWidget?1() +QtWidgets.QDesktopWidget.__init__?1(self) +QtWidgets.QDesktopWidget.isVirtualDesktop?4() -> bool +QtWidgets.QDesktopWidget.primaryScreen?4() -> int +QtWidgets.QDesktopWidget.screenNumber?4(QWidget widget=None) -> int +QtWidgets.QDesktopWidget.screenNumber?4(QPoint) -> int +QtWidgets.QDesktopWidget.screen?4(int screen=-1) -> QWidget +QtWidgets.QDesktopWidget.screenCount?4() -> int +QtWidgets.QDesktopWidget.screenGeometry?4(int screen=-1) -> QRect +QtWidgets.QDesktopWidget.screenGeometry?4(QWidget) -> QRect +QtWidgets.QDesktopWidget.screenGeometry?4(QPoint) -> QRect +QtWidgets.QDesktopWidget.availableGeometry?4(int screen=-1) -> QRect +QtWidgets.QDesktopWidget.availableGeometry?4(QWidget) -> QRect +QtWidgets.QDesktopWidget.availableGeometry?4(QPoint) -> QRect +QtWidgets.QDesktopWidget.resized?4(int) +QtWidgets.QDesktopWidget.workAreaResized?4(int) +QtWidgets.QDesktopWidget.screenCountChanged?4(int) +QtWidgets.QDesktopWidget.primaryScreenChanged?4() +QtWidgets.QDesktopWidget.resizeEvent?4(QResizeEvent) +QtWidgets.QDial?1(QWidget parent=None) +QtWidgets.QDial.__init__?1(self, QWidget parent=None) +QtWidgets.QDial.wrapping?4() -> bool +QtWidgets.QDial.notchSize?4() -> int +QtWidgets.QDial.setNotchTarget?4(float) +QtWidgets.QDial.notchTarget?4() -> float +QtWidgets.QDial.notchesVisible?4() -> bool +QtWidgets.QDial.sizeHint?4() -> QSize +QtWidgets.QDial.minimumSizeHint?4() -> QSize +QtWidgets.QDial.setNotchesVisible?4(bool) +QtWidgets.QDial.setWrapping?4(bool) +QtWidgets.QDial.initStyleOption?4(QStyleOptionSlider) +QtWidgets.QDial.event?4(QEvent) -> bool +QtWidgets.QDial.resizeEvent?4(QResizeEvent) +QtWidgets.QDial.paintEvent?4(QPaintEvent) +QtWidgets.QDial.mousePressEvent?4(QMouseEvent) +QtWidgets.QDial.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QDial.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QDial.sliderChange?4(QAbstractSlider.SliderChange) +QtWidgets.QDialogButtonBox.StandardButton?10 +QtWidgets.QDialogButtonBox.StandardButton.NoButton?10 +QtWidgets.QDialogButtonBox.StandardButton.Ok?10 +QtWidgets.QDialogButtonBox.StandardButton.Save?10 +QtWidgets.QDialogButtonBox.StandardButton.SaveAll?10 +QtWidgets.QDialogButtonBox.StandardButton.Open?10 +QtWidgets.QDialogButtonBox.StandardButton.Yes?10 +QtWidgets.QDialogButtonBox.StandardButton.YesToAll?10 +QtWidgets.QDialogButtonBox.StandardButton.No?10 +QtWidgets.QDialogButtonBox.StandardButton.NoToAll?10 +QtWidgets.QDialogButtonBox.StandardButton.Abort?10 +QtWidgets.QDialogButtonBox.StandardButton.Retry?10 +QtWidgets.QDialogButtonBox.StandardButton.Ignore?10 +QtWidgets.QDialogButtonBox.StandardButton.Close?10 +QtWidgets.QDialogButtonBox.StandardButton.Cancel?10 +QtWidgets.QDialogButtonBox.StandardButton.Discard?10 +QtWidgets.QDialogButtonBox.StandardButton.Help?10 +QtWidgets.QDialogButtonBox.StandardButton.Apply?10 +QtWidgets.QDialogButtonBox.StandardButton.Reset?10 +QtWidgets.QDialogButtonBox.StandardButton.RestoreDefaults?10 +QtWidgets.QDialogButtonBox.ButtonRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.InvalidRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.AcceptRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.RejectRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.DestructiveRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.ActionRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.HelpRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.YesRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.NoRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.ResetRole?10 +QtWidgets.QDialogButtonBox.ButtonRole.ApplyRole?10 +QtWidgets.QDialogButtonBox.ButtonLayout?10 +QtWidgets.QDialogButtonBox.ButtonLayout.WinLayout?10 +QtWidgets.QDialogButtonBox.ButtonLayout.MacLayout?10 +QtWidgets.QDialogButtonBox.ButtonLayout.KdeLayout?10 +QtWidgets.QDialogButtonBox.ButtonLayout.GnomeLayout?10 +QtWidgets.QDialogButtonBox.ButtonLayout.AndroidLayout?10 +QtWidgets.QDialogButtonBox?1(QWidget parent=None) +QtWidgets.QDialogButtonBox.__init__?1(self, QWidget parent=None) +QtWidgets.QDialogButtonBox?1(Qt.Orientation, QWidget parent=None) +QtWidgets.QDialogButtonBox.__init__?1(self, Qt.Orientation, QWidget parent=None) +QtWidgets.QDialogButtonBox?1(QDialogButtonBox.StandardButtons, QWidget parent=None) +QtWidgets.QDialogButtonBox.__init__?1(self, QDialogButtonBox.StandardButtons, QWidget parent=None) +QtWidgets.QDialogButtonBox?1(QDialogButtonBox.StandardButtons, Qt.Orientation, QWidget parent=None) +QtWidgets.QDialogButtonBox.__init__?1(self, QDialogButtonBox.StandardButtons, Qt.Orientation, QWidget parent=None) +QtWidgets.QDialogButtonBox.setOrientation?4(Qt.Orientation) +QtWidgets.QDialogButtonBox.orientation?4() -> Qt.Orientation +QtWidgets.QDialogButtonBox.addButton?4(QAbstractButton, QDialogButtonBox.ButtonRole) +QtWidgets.QDialogButtonBox.addButton?4(QString, QDialogButtonBox.ButtonRole) -> QPushButton +QtWidgets.QDialogButtonBox.addButton?4(QDialogButtonBox.StandardButton) -> QPushButton +QtWidgets.QDialogButtonBox.removeButton?4(QAbstractButton) +QtWidgets.QDialogButtonBox.clear?4() +QtWidgets.QDialogButtonBox.buttons?4() -> unknown-type +QtWidgets.QDialogButtonBox.buttonRole?4(QAbstractButton) -> QDialogButtonBox.ButtonRole +QtWidgets.QDialogButtonBox.setStandardButtons?4(QDialogButtonBox.StandardButtons) +QtWidgets.QDialogButtonBox.standardButtons?4() -> QDialogButtonBox.StandardButtons +QtWidgets.QDialogButtonBox.standardButton?4(QAbstractButton) -> QDialogButtonBox.StandardButton +QtWidgets.QDialogButtonBox.button?4(QDialogButtonBox.StandardButton) -> QPushButton +QtWidgets.QDialogButtonBox.setCenterButtons?4(bool) +QtWidgets.QDialogButtonBox.centerButtons?4() -> bool +QtWidgets.QDialogButtonBox.accepted?4() +QtWidgets.QDialogButtonBox.clicked?4(QAbstractButton) +QtWidgets.QDialogButtonBox.helpRequested?4() +QtWidgets.QDialogButtonBox.rejected?4() +QtWidgets.QDialogButtonBox.changeEvent?4(QEvent) +QtWidgets.QDialogButtonBox.event?4(QEvent) -> bool +QtWidgets.QDialogButtonBox.StandardButtons?1() +QtWidgets.QDialogButtonBox.StandardButtons.__init__?1(self) +QtWidgets.QDialogButtonBox.StandardButtons?1(int) +QtWidgets.QDialogButtonBox.StandardButtons.__init__?1(self, int) +QtWidgets.QDialogButtonBox.StandardButtons?1(QDialogButtonBox.StandardButtons) +QtWidgets.QDialogButtonBox.StandardButtons.__init__?1(self, QDialogButtonBox.StandardButtons) +QtWidgets.QDirModel.Roles?10 +QtWidgets.QDirModel.Roles.FileIconRole?10 +QtWidgets.QDirModel.Roles.FilePathRole?10 +QtWidgets.QDirModel.Roles.FileNameRole?10 +QtWidgets.QDirModel?1(QStringList, QDir.Filters, QDir.SortFlags, QObject parent=None) +QtWidgets.QDirModel.__init__?1(self, QStringList, QDir.Filters, QDir.SortFlags, QObject parent=None) +QtWidgets.QDirModel?1(QObject parent=None) +QtWidgets.QDirModel.__init__?1(self, QObject parent=None) +QtWidgets.QDirModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtWidgets.QDirModel.parent?4(QModelIndex) -> QModelIndex +QtWidgets.QDirModel.parent?4() -> QObject +QtWidgets.QDirModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtWidgets.QDirModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtWidgets.QDirModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant +QtWidgets.QDirModel.setData?4(QModelIndex, QVariant, int role=Qt.EditRole) -> bool +QtWidgets.QDirModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant +QtWidgets.QDirModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool +QtWidgets.QDirModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtWidgets.QDirModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtWidgets.QDirModel.mimeTypes?4() -> QStringList +QtWidgets.QDirModel.mimeData?4(unknown-type) -> QMimeData +QtWidgets.QDirModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtWidgets.QDirModel.supportedDropActions?4() -> Qt.DropActions +QtWidgets.QDirModel.setIconProvider?4(QFileIconProvider) +QtWidgets.QDirModel.iconProvider?4() -> QFileIconProvider +QtWidgets.QDirModel.setNameFilters?4(QStringList) +QtWidgets.QDirModel.nameFilters?4() -> QStringList +QtWidgets.QDirModel.setFilter?4(QDir.Filters) +QtWidgets.QDirModel.filter?4() -> QDir.Filters +QtWidgets.QDirModel.setSorting?4(QDir.SortFlags) +QtWidgets.QDirModel.sorting?4() -> QDir.SortFlags +QtWidgets.QDirModel.setResolveSymlinks?4(bool) +QtWidgets.QDirModel.resolveSymlinks?4() -> bool +QtWidgets.QDirModel.setReadOnly?4(bool) +QtWidgets.QDirModel.isReadOnly?4() -> bool +QtWidgets.QDirModel.setLazyChildCount?4(bool) +QtWidgets.QDirModel.lazyChildCount?4() -> bool +QtWidgets.QDirModel.refresh?4(QModelIndex parent=QModelIndex()) +QtWidgets.QDirModel.index?4(QString, int column=0) -> QModelIndex +QtWidgets.QDirModel.isDir?4(QModelIndex) -> bool +QtWidgets.QDirModel.mkdir?4(QModelIndex, QString) -> QModelIndex +QtWidgets.QDirModel.rmdir?4(QModelIndex) -> bool +QtWidgets.QDirModel.remove?4(QModelIndex) -> bool +QtWidgets.QDirModel.filePath?4(QModelIndex) -> QString +QtWidgets.QDirModel.fileName?4(QModelIndex) -> QString +QtWidgets.QDirModel.fileIcon?4(QModelIndex) -> QIcon +QtWidgets.QDirModel.fileInfo?4(QModelIndex) -> QFileInfo +QtWidgets.QDockWidget.DockWidgetFeature?10 +QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable?10 +QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable?10 +QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetFloatable?10 +QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetVerticalTitleBar?10 +QtWidgets.QDockWidget.DockWidgetFeature.AllDockWidgetFeatures?10 +QtWidgets.QDockWidget.DockWidgetFeature.NoDockWidgetFeatures?10 +QtWidgets.QDockWidget?1(QString, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QDockWidget.__init__?1(self, QString, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QDockWidget?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QDockWidget.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QDockWidget.widget?4() -> QWidget +QtWidgets.QDockWidget.setWidget?4(QWidget) +QtWidgets.QDockWidget.setFeatures?4(QDockWidget.DockWidgetFeatures) +QtWidgets.QDockWidget.features?4() -> QDockWidget.DockWidgetFeatures +QtWidgets.QDockWidget.setFloating?4(bool) +QtWidgets.QDockWidget.isFloating?4() -> bool +QtWidgets.QDockWidget.setAllowedAreas?4(Qt.DockWidgetAreas) +QtWidgets.QDockWidget.allowedAreas?4() -> Qt.DockWidgetAreas +QtWidgets.QDockWidget.isAreaAllowed?4(Qt.DockWidgetArea) -> bool +QtWidgets.QDockWidget.toggleViewAction?4() -> QAction +QtWidgets.QDockWidget.setTitleBarWidget?4(QWidget) +QtWidgets.QDockWidget.titleBarWidget?4() -> QWidget +QtWidgets.QDockWidget.featuresChanged?4(QDockWidget.DockWidgetFeatures) +QtWidgets.QDockWidget.topLevelChanged?4(bool) +QtWidgets.QDockWidget.allowedAreasChanged?4(Qt.DockWidgetAreas) +QtWidgets.QDockWidget.dockLocationChanged?4(Qt.DockWidgetArea) +QtWidgets.QDockWidget.visibilityChanged?4(bool) +QtWidgets.QDockWidget.initStyleOption?4(QStyleOptionDockWidget) +QtWidgets.QDockWidget.changeEvent?4(QEvent) +QtWidgets.QDockWidget.closeEvent?4(QCloseEvent) +QtWidgets.QDockWidget.paintEvent?4(QPaintEvent) +QtWidgets.QDockWidget.event?4(QEvent) -> bool +QtWidgets.QDockWidget.DockWidgetFeatures?1() +QtWidgets.QDockWidget.DockWidgetFeatures.__init__?1(self) +QtWidgets.QDockWidget.DockWidgetFeatures?1(int) +QtWidgets.QDockWidget.DockWidgetFeatures.__init__?1(self, int) +QtWidgets.QDockWidget.DockWidgetFeatures?1(QDockWidget.DockWidgetFeatures) +QtWidgets.QDockWidget.DockWidgetFeatures.__init__?1(self, QDockWidget.DockWidgetFeatures) +QtWidgets.QErrorMessage?1(QWidget parent=None) +QtWidgets.QErrorMessage.__init__?1(self, QWidget parent=None) +QtWidgets.QErrorMessage.qtHandler?4() -> QErrorMessage +QtWidgets.QErrorMessage.showMessage?4(QString) +QtWidgets.QErrorMessage.showMessage?4(QString, QString) +QtWidgets.QErrorMessage.changeEvent?4(QEvent) +QtWidgets.QErrorMessage.done?4(int) +QtWidgets.QFileDialog.Option?10 +QtWidgets.QFileDialog.Option.ShowDirsOnly?10 +QtWidgets.QFileDialog.Option.DontResolveSymlinks?10 +QtWidgets.QFileDialog.Option.DontConfirmOverwrite?10 +QtWidgets.QFileDialog.Option.DontUseSheet?10 +QtWidgets.QFileDialog.Option.DontUseNativeDialog?10 +QtWidgets.QFileDialog.Option.ReadOnly?10 +QtWidgets.QFileDialog.Option.HideNameFilterDetails?10 +QtWidgets.QFileDialog.Option.DontUseCustomDirectoryIcons?10 +QtWidgets.QFileDialog.DialogLabel?10 +QtWidgets.QFileDialog.DialogLabel.LookIn?10 +QtWidgets.QFileDialog.DialogLabel.FileName?10 +QtWidgets.QFileDialog.DialogLabel.FileType?10 +QtWidgets.QFileDialog.DialogLabel.Accept?10 +QtWidgets.QFileDialog.DialogLabel.Reject?10 +QtWidgets.QFileDialog.AcceptMode?10 +QtWidgets.QFileDialog.AcceptMode.AcceptOpen?10 +QtWidgets.QFileDialog.AcceptMode.AcceptSave?10 +QtWidgets.QFileDialog.FileMode?10 +QtWidgets.QFileDialog.FileMode.AnyFile?10 +QtWidgets.QFileDialog.FileMode.ExistingFile?10 +QtWidgets.QFileDialog.FileMode.Directory?10 +QtWidgets.QFileDialog.FileMode.ExistingFiles?10 +QtWidgets.QFileDialog.FileMode.DirectoryOnly?10 +QtWidgets.QFileDialog.ViewMode?10 +QtWidgets.QFileDialog.ViewMode.Detail?10 +QtWidgets.QFileDialog.ViewMode.List?10 +QtWidgets.QFileDialog?1(QWidget, Qt.WindowFlags) +QtWidgets.QFileDialog.__init__?1(self, QWidget, Qt.WindowFlags) +QtWidgets.QFileDialog?1(QWidget parent=None, QString caption='', QString directory='', QString filter='') +QtWidgets.QFileDialog.__init__?1(self, QWidget parent=None, QString caption='', QString directory='', QString filter='') +QtWidgets.QFileDialog.setDirectory?4(QString) +QtWidgets.QFileDialog.setDirectory?4(QDir) +QtWidgets.QFileDialog.directory?4() -> QDir +QtWidgets.QFileDialog.selectFile?4(QString) +QtWidgets.QFileDialog.selectedFiles?4() -> QStringList +QtWidgets.QFileDialog.setViewMode?4(QFileDialog.ViewMode) +QtWidgets.QFileDialog.viewMode?4() -> QFileDialog.ViewMode +QtWidgets.QFileDialog.setFileMode?4(QFileDialog.FileMode) +QtWidgets.QFileDialog.fileMode?4() -> QFileDialog.FileMode +QtWidgets.QFileDialog.setAcceptMode?4(QFileDialog.AcceptMode) +QtWidgets.QFileDialog.acceptMode?4() -> QFileDialog.AcceptMode +QtWidgets.QFileDialog.setDefaultSuffix?4(QString) +QtWidgets.QFileDialog.defaultSuffix?4() -> QString +QtWidgets.QFileDialog.setHistory?4(QStringList) +QtWidgets.QFileDialog.history?4() -> QStringList +QtWidgets.QFileDialog.setItemDelegate?4(QAbstractItemDelegate) +QtWidgets.QFileDialog.itemDelegate?4() -> QAbstractItemDelegate +QtWidgets.QFileDialog.setIconProvider?4(QFileIconProvider) +QtWidgets.QFileDialog.iconProvider?4() -> QFileIconProvider +QtWidgets.QFileDialog.setLabelText?4(QFileDialog.DialogLabel, QString) +QtWidgets.QFileDialog.labelText?4(QFileDialog.DialogLabel) -> QString +QtWidgets.QFileDialog.currentChanged?4(QString) +QtWidgets.QFileDialog.directoryEntered?4(QString) +QtWidgets.QFileDialog.filesSelected?4(QStringList) +QtWidgets.QFileDialog.filterSelected?4(QString) +QtWidgets.QFileDialog.fileSelected?4(QString) +QtWidgets.QFileDialog.getExistingDirectory?4(QWidget parent=None, QString caption='', QString directory='', QFileDialog.Options options=QFileDialog.ShowDirsOnly) -> QString +QtWidgets.QFileDialog.getExistingDirectoryUrl?4(QWidget parent=None, QString caption='', QUrl directory=QUrl(), QFileDialog.Options options=QFileDialog.ShowDirsOnly, QStringList supportedSchemes=[]) -> QUrl +QtWidgets.QFileDialog.getOpenFileName?4(QWidget parent=None, QString caption='', QString directory='', QString filter='', QString initialFilter='', QFileDialog.Options options=0) -> Tuple +QtWidgets.QFileDialog.getOpenFileNames?4(QWidget parent=None, QString caption='', QString directory='', QString filter='', QString initialFilter='', QFileDialog.Options options=0) -> Tuple +QtWidgets.QFileDialog.getSaveFileName?4(QWidget parent=None, QString caption='', QString directory='', QString filter='', QString initialFilter='', QFileDialog.Options options=0) -> Tuple +QtWidgets.QFileDialog.done?4(int) +QtWidgets.QFileDialog.accept?4() +QtWidgets.QFileDialog.changeEvent?4(QEvent) +QtWidgets.QFileDialog.setSidebarUrls?4(unknown-type) +QtWidgets.QFileDialog.sidebarUrls?4() -> unknown-type +QtWidgets.QFileDialog.saveState?4() -> QByteArray +QtWidgets.QFileDialog.restoreState?4(QByteArray) -> bool +QtWidgets.QFileDialog.setProxyModel?4(QAbstractProxyModel) +QtWidgets.QFileDialog.proxyModel?4() -> QAbstractProxyModel +QtWidgets.QFileDialog.setNameFilter?4(QString) +QtWidgets.QFileDialog.setNameFilters?4(QStringList) +QtWidgets.QFileDialog.nameFilters?4() -> QStringList +QtWidgets.QFileDialog.selectNameFilter?4(QString) +QtWidgets.QFileDialog.selectedNameFilter?4() -> QString +QtWidgets.QFileDialog.filter?4() -> QDir.Filters +QtWidgets.QFileDialog.setFilter?4(QDir.Filters) +QtWidgets.QFileDialog.setOption?4(QFileDialog.Option, bool on=True) +QtWidgets.QFileDialog.testOption?4(QFileDialog.Option) -> bool +QtWidgets.QFileDialog.setOptions?4(QFileDialog.Options) +QtWidgets.QFileDialog.options?4() -> QFileDialog.Options +QtWidgets.QFileDialog.open?4() +QtWidgets.QFileDialog.open?4(Any) +QtWidgets.QFileDialog.setVisible?4(bool) +QtWidgets.QFileDialog.setDirectoryUrl?4(QUrl) +QtWidgets.QFileDialog.directoryUrl?4() -> QUrl +QtWidgets.QFileDialog.selectUrl?4(QUrl) +QtWidgets.QFileDialog.selectedUrls?4() -> unknown-type +QtWidgets.QFileDialog.setMimeTypeFilters?4(QStringList) +QtWidgets.QFileDialog.mimeTypeFilters?4() -> QStringList +QtWidgets.QFileDialog.selectMimeTypeFilter?4(QString) +QtWidgets.QFileDialog.urlSelected?4(QUrl) +QtWidgets.QFileDialog.urlsSelected?4(unknown-type) +QtWidgets.QFileDialog.currentUrlChanged?4(QUrl) +QtWidgets.QFileDialog.directoryUrlEntered?4(QUrl) +QtWidgets.QFileDialog.getOpenFileUrl?4(QWidget parent=None, QString caption='', QUrl directory=QUrl(), QString filter='', QString initialFilter='', QFileDialog.Options options=0, QStringList supportedSchemes=[]) -> Tuple +QtWidgets.QFileDialog.getOpenFileUrls?4(QWidget parent=None, QString caption='', QUrl directory=QUrl(), QString filter='', QString initialFilter='', QFileDialog.Options options=0, QStringList supportedSchemes=[]) -> Tuple +QtWidgets.QFileDialog.getSaveFileUrl?4(QWidget parent=None, QString caption='', QUrl directory=QUrl(), QString filter='', QString initialFilter='', QFileDialog.Options options=0, QStringList supportedSchemes=[]) -> Tuple +QtWidgets.QFileDialog.setSupportedSchemes?4(QStringList) +QtWidgets.QFileDialog.supportedSchemes?4() -> QStringList +QtWidgets.QFileDialog.selectedMimeTypeFilter?4() -> QString +QtWidgets.QFileDialog.saveFileContent?4(QByteArray, QString fileNameHint='') +QtWidgets.QFileDialog.Options?1() +QtWidgets.QFileDialog.Options.__init__?1(self) +QtWidgets.QFileDialog.Options?1(int) +QtWidgets.QFileDialog.Options.__init__?1(self, int) +QtWidgets.QFileDialog.Options?1(QFileDialog.Options) +QtWidgets.QFileDialog.Options.__init__?1(self, QFileDialog.Options) +QtWidgets.QFileIconProvider.Option?10 +QtWidgets.QFileIconProvider.Option.DontUseCustomDirectoryIcons?10 +QtWidgets.QFileIconProvider.IconType?10 +QtWidgets.QFileIconProvider.IconType.Computer?10 +QtWidgets.QFileIconProvider.IconType.Desktop?10 +QtWidgets.QFileIconProvider.IconType.Trashcan?10 +QtWidgets.QFileIconProvider.IconType.Network?10 +QtWidgets.QFileIconProvider.IconType.Drive?10 +QtWidgets.QFileIconProvider.IconType.Folder?10 +QtWidgets.QFileIconProvider.IconType.File?10 +QtWidgets.QFileIconProvider?1() +QtWidgets.QFileIconProvider.__init__?1(self) +QtWidgets.QFileIconProvider.icon?4(QFileIconProvider.IconType) -> QIcon +QtWidgets.QFileIconProvider.icon?4(QFileInfo) -> QIcon +QtWidgets.QFileIconProvider.type?4(QFileInfo) -> QString +QtWidgets.QFileIconProvider.setOptions?4(QFileIconProvider.Options) +QtWidgets.QFileIconProvider.options?4() -> QFileIconProvider.Options +QtWidgets.QFileIconProvider.Options?1() +QtWidgets.QFileIconProvider.Options.__init__?1(self) +QtWidgets.QFileIconProvider.Options?1(int) +QtWidgets.QFileIconProvider.Options.__init__?1(self, int) +QtWidgets.QFileIconProvider.Options?1(QFileIconProvider.Options) +QtWidgets.QFileIconProvider.Options.__init__?1(self, QFileIconProvider.Options) +QtWidgets.QFileSystemModel.Option?10 +QtWidgets.QFileSystemModel.Option.DontWatchForChanges?10 +QtWidgets.QFileSystemModel.Option.DontResolveSymlinks?10 +QtWidgets.QFileSystemModel.Option.DontUseCustomDirectoryIcons?10 +QtWidgets.QFileSystemModel.Roles?10 +QtWidgets.QFileSystemModel.Roles.FileIconRole?10 +QtWidgets.QFileSystemModel.Roles.FilePathRole?10 +QtWidgets.QFileSystemModel.Roles.FileNameRole?10 +QtWidgets.QFileSystemModel.Roles.FilePermissions?10 +QtWidgets.QFileSystemModel?1(QObject parent=None) +QtWidgets.QFileSystemModel.__init__?1(self, QObject parent=None) +QtWidgets.QFileSystemModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtWidgets.QFileSystemModel.index?4(QString, int column=0) -> QModelIndex +QtWidgets.QFileSystemModel.parent?4(QModelIndex) -> QModelIndex +QtWidgets.QFileSystemModel.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool +QtWidgets.QFileSystemModel.canFetchMore?4(QModelIndex) -> bool +QtWidgets.QFileSystemModel.fetchMore?4(QModelIndex) +QtWidgets.QFileSystemModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtWidgets.QFileSystemModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtWidgets.QFileSystemModel.myComputer?4(int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtWidgets.QFileSystemModel.data?4(QModelIndex, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtWidgets.QFileSystemModel.setData?4(QModelIndex, QVariant, int role=Qt.ItemDataRole.EditRole) -> bool +QtWidgets.QFileSystemModel.headerData?4(int, Qt.Orientation, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtWidgets.QFileSystemModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtWidgets.QFileSystemModel.sort?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtWidgets.QFileSystemModel.mimeTypes?4() -> QStringList +QtWidgets.QFileSystemModel.mimeData?4(unknown-type) -> QMimeData +QtWidgets.QFileSystemModel.dropMimeData?4(QMimeData, Qt.DropAction, int, int, QModelIndex) -> bool +QtWidgets.QFileSystemModel.supportedDropActions?4() -> Qt.DropActions +QtWidgets.QFileSystemModel.setRootPath?4(QString) -> QModelIndex +QtWidgets.QFileSystemModel.rootPath?4() -> QString +QtWidgets.QFileSystemModel.rootDirectory?4() -> QDir +QtWidgets.QFileSystemModel.setIconProvider?4(QFileIconProvider) +QtWidgets.QFileSystemModel.iconProvider?4() -> QFileIconProvider +QtWidgets.QFileSystemModel.setFilter?4(QDir.Filters) +QtWidgets.QFileSystemModel.filter?4() -> QDir.Filters +QtWidgets.QFileSystemModel.setResolveSymlinks?4(bool) +QtWidgets.QFileSystemModel.resolveSymlinks?4() -> bool +QtWidgets.QFileSystemModel.setReadOnly?4(bool) +QtWidgets.QFileSystemModel.isReadOnly?4() -> bool +QtWidgets.QFileSystemModel.setNameFilterDisables?4(bool) +QtWidgets.QFileSystemModel.nameFilterDisables?4() -> bool +QtWidgets.QFileSystemModel.setNameFilters?4(QStringList) +QtWidgets.QFileSystemModel.nameFilters?4() -> QStringList +QtWidgets.QFileSystemModel.filePath?4(QModelIndex) -> QString +QtWidgets.QFileSystemModel.isDir?4(QModelIndex) -> bool +QtWidgets.QFileSystemModel.size?4(QModelIndex) -> int +QtWidgets.QFileSystemModel.type?4(QModelIndex) -> QString +QtWidgets.QFileSystemModel.lastModified?4(QModelIndex) -> QDateTime +QtWidgets.QFileSystemModel.mkdir?4(QModelIndex, QString) -> QModelIndex +QtWidgets.QFileSystemModel.permissions?4(QModelIndex) -> QFileDevice.Permissions +QtWidgets.QFileSystemModel.rmdir?4(QModelIndex) -> bool +QtWidgets.QFileSystemModel.fileName?4(QModelIndex) -> QString +QtWidgets.QFileSystemModel.fileIcon?4(QModelIndex) -> QIcon +QtWidgets.QFileSystemModel.fileInfo?4(QModelIndex) -> QFileInfo +QtWidgets.QFileSystemModel.remove?4(QModelIndex) -> bool +QtWidgets.QFileSystemModel.fileRenamed?4(QString, QString, QString) +QtWidgets.QFileSystemModel.rootPathChanged?4(QString) +QtWidgets.QFileSystemModel.directoryLoaded?4(QString) +QtWidgets.QFileSystemModel.event?4(QEvent) -> bool +QtWidgets.QFileSystemModel.timerEvent?4(QTimerEvent) +QtWidgets.QFileSystemModel.sibling?4(int, int, QModelIndex) -> QModelIndex +QtWidgets.QFileSystemModel.setOption?4(QFileSystemModel.Option, bool on=True) +QtWidgets.QFileSystemModel.testOption?4(QFileSystemModel.Option) -> bool +QtWidgets.QFileSystemModel.setOptions?4(QFileSystemModel.Options) +QtWidgets.QFileSystemModel.options?4() -> QFileSystemModel.Options +QtWidgets.QFileSystemModel.Options?1() +QtWidgets.QFileSystemModel.Options.__init__?1(self) +QtWidgets.QFileSystemModel.Options?1(int) +QtWidgets.QFileSystemModel.Options.__init__?1(self, int) +QtWidgets.QFileSystemModel.Options?1(QFileSystemModel.Options) +QtWidgets.QFileSystemModel.Options.__init__?1(self, QFileSystemModel.Options) +QtWidgets.QFocusFrame?1(QWidget parent=None) +QtWidgets.QFocusFrame.__init__?1(self, QWidget parent=None) +QtWidgets.QFocusFrame.setWidget?4(QWidget) +QtWidgets.QFocusFrame.widget?4() -> QWidget +QtWidgets.QFocusFrame.initStyleOption?4(QStyleOption) +QtWidgets.QFocusFrame.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QFocusFrame.event?4(QEvent) -> bool +QtWidgets.QFocusFrame.paintEvent?4(QPaintEvent) +QtWidgets.QFontComboBox.FontFilter?10 +QtWidgets.QFontComboBox.FontFilter.AllFonts?10 +QtWidgets.QFontComboBox.FontFilter.ScalableFonts?10 +QtWidgets.QFontComboBox.FontFilter.NonScalableFonts?10 +QtWidgets.QFontComboBox.FontFilter.MonospacedFonts?10 +QtWidgets.QFontComboBox.FontFilter.ProportionalFonts?10 +QtWidgets.QFontComboBox?1(QWidget parent=None) +QtWidgets.QFontComboBox.__init__?1(self, QWidget parent=None) +QtWidgets.QFontComboBox.fontFilters?4() -> QFontComboBox.FontFilters +QtWidgets.QFontComboBox.setWritingSystem?4(QFontDatabase.WritingSystem) +QtWidgets.QFontComboBox.writingSystem?4() -> QFontDatabase.WritingSystem +QtWidgets.QFontComboBox.setFontFilters?4(QFontComboBox.FontFilters) +QtWidgets.QFontComboBox.currentFont?4() -> QFont +QtWidgets.QFontComboBox.sizeHint?4() -> QSize +QtWidgets.QFontComboBox.setCurrentFont?4(QFont) +QtWidgets.QFontComboBox.currentFontChanged?4(QFont) +QtWidgets.QFontComboBox.event?4(QEvent) -> bool +QtWidgets.QFontComboBox.FontFilters?1() +QtWidgets.QFontComboBox.FontFilters.__init__?1(self) +QtWidgets.QFontComboBox.FontFilters?1(int) +QtWidgets.QFontComboBox.FontFilters.__init__?1(self, int) +QtWidgets.QFontComboBox.FontFilters?1(QFontComboBox.FontFilters) +QtWidgets.QFontComboBox.FontFilters.__init__?1(self, QFontComboBox.FontFilters) +QtWidgets.QFontDialog.FontDialogOption?10 +QtWidgets.QFontDialog.FontDialogOption.NoButtons?10 +QtWidgets.QFontDialog.FontDialogOption.DontUseNativeDialog?10 +QtWidgets.QFontDialog.FontDialogOption.ScalableFonts?10 +QtWidgets.QFontDialog.FontDialogOption.NonScalableFonts?10 +QtWidgets.QFontDialog.FontDialogOption.MonospacedFonts?10 +QtWidgets.QFontDialog.FontDialogOption.ProportionalFonts?10 +QtWidgets.QFontDialog?1(QWidget parent=None) +QtWidgets.QFontDialog.__init__?1(self, QWidget parent=None) +QtWidgets.QFontDialog?1(QFont, QWidget parent=None) +QtWidgets.QFontDialog.__init__?1(self, QFont, QWidget parent=None) +QtWidgets.QFontDialog.getFont?4(QFont, QWidget parent=None, QString caption='', QFontDialog.FontDialogOptions options=QFontDialog.FontDialogOptions()) -> (QFont, bool) +QtWidgets.QFontDialog.getFont?4(QWidget parent=None) -> (QFont, bool) +QtWidgets.QFontDialog.changeEvent?4(QEvent) +QtWidgets.QFontDialog.done?4(int) +QtWidgets.QFontDialog.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QFontDialog.setCurrentFont?4(QFont) +QtWidgets.QFontDialog.currentFont?4() -> QFont +QtWidgets.QFontDialog.selectedFont?4() -> QFont +QtWidgets.QFontDialog.setOption?4(QFontDialog.FontDialogOption, bool on=True) +QtWidgets.QFontDialog.testOption?4(QFontDialog.FontDialogOption) -> bool +QtWidgets.QFontDialog.setOptions?4(QFontDialog.FontDialogOptions) +QtWidgets.QFontDialog.options?4() -> QFontDialog.FontDialogOptions +QtWidgets.QFontDialog.open?4() +QtWidgets.QFontDialog.open?4(Any) +QtWidgets.QFontDialog.setVisible?4(bool) +QtWidgets.QFontDialog.currentFontChanged?4(QFont) +QtWidgets.QFontDialog.fontSelected?4(QFont) +QtWidgets.QFontDialog.FontDialogOptions?1() +QtWidgets.QFontDialog.FontDialogOptions.__init__?1(self) +QtWidgets.QFontDialog.FontDialogOptions?1(int) +QtWidgets.QFontDialog.FontDialogOptions.__init__?1(self, int) +QtWidgets.QFontDialog.FontDialogOptions?1(QFontDialog.FontDialogOptions) +QtWidgets.QFontDialog.FontDialogOptions.__init__?1(self, QFontDialog.FontDialogOptions) +QtWidgets.QFormLayout.ItemRole?10 +QtWidgets.QFormLayout.ItemRole.LabelRole?10 +QtWidgets.QFormLayout.ItemRole.FieldRole?10 +QtWidgets.QFormLayout.ItemRole.SpanningRole?10 +QtWidgets.QFormLayout.RowWrapPolicy?10 +QtWidgets.QFormLayout.RowWrapPolicy.DontWrapRows?10 +QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows?10 +QtWidgets.QFormLayout.RowWrapPolicy.WrapAllRows?10 +QtWidgets.QFormLayout.FieldGrowthPolicy?10 +QtWidgets.QFormLayout.FieldGrowthPolicy.FieldsStayAtSizeHint?10 +QtWidgets.QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow?10 +QtWidgets.QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow?10 +QtWidgets.QFormLayout?1(QWidget parent=None) +QtWidgets.QFormLayout.__init__?1(self, QWidget parent=None) +QtWidgets.QFormLayout.setFieldGrowthPolicy?4(QFormLayout.FieldGrowthPolicy) +QtWidgets.QFormLayout.fieldGrowthPolicy?4() -> QFormLayout.FieldGrowthPolicy +QtWidgets.QFormLayout.setRowWrapPolicy?4(QFormLayout.RowWrapPolicy) +QtWidgets.QFormLayout.rowWrapPolicy?4() -> QFormLayout.RowWrapPolicy +QtWidgets.QFormLayout.setLabelAlignment?4(Qt.Alignment) +QtWidgets.QFormLayout.labelAlignment?4() -> Qt.Alignment +QtWidgets.QFormLayout.setFormAlignment?4(Qt.Alignment) +QtWidgets.QFormLayout.formAlignment?4() -> Qt.Alignment +QtWidgets.QFormLayout.setHorizontalSpacing?4(int) +QtWidgets.QFormLayout.horizontalSpacing?4() -> int +QtWidgets.QFormLayout.setVerticalSpacing?4(int) +QtWidgets.QFormLayout.verticalSpacing?4() -> int +QtWidgets.QFormLayout.spacing?4() -> int +QtWidgets.QFormLayout.setSpacing?4(int) +QtWidgets.QFormLayout.addRow?4(QWidget, QWidget) +QtWidgets.QFormLayout.addRow?4(QWidget, QLayout) +QtWidgets.QFormLayout.addRow?4(QString, QWidget) +QtWidgets.QFormLayout.addRow?4(QString, QLayout) +QtWidgets.QFormLayout.addRow?4(QWidget) +QtWidgets.QFormLayout.addRow?4(QLayout) +QtWidgets.QFormLayout.insertRow?4(int, QWidget, QWidget) +QtWidgets.QFormLayout.insertRow?4(int, QWidget, QLayout) +QtWidgets.QFormLayout.insertRow?4(int, QString, QWidget) +QtWidgets.QFormLayout.insertRow?4(int, QString, QLayout) +QtWidgets.QFormLayout.insertRow?4(int, QWidget) +QtWidgets.QFormLayout.insertRow?4(int, QLayout) +QtWidgets.QFormLayout.setItem?4(int, QFormLayout.ItemRole, QLayoutItem) +QtWidgets.QFormLayout.setWidget?4(int, QFormLayout.ItemRole, QWidget) +QtWidgets.QFormLayout.setLayout?4(int, QFormLayout.ItemRole, QLayout) +QtWidgets.QFormLayout.itemAt?4(int, QFormLayout.ItemRole) -> QLayoutItem +QtWidgets.QFormLayout.getItemPosition?4(int) -> (int, QFormLayout.ItemRole) +QtWidgets.QFormLayout.getWidgetPosition?4(QWidget) -> (int, QFormLayout.ItemRole) +QtWidgets.QFormLayout.getLayoutPosition?4(QLayout) -> (int, QFormLayout.ItemRole) +QtWidgets.QFormLayout.labelForField?4(QWidget) -> QWidget +QtWidgets.QFormLayout.labelForField?4(QLayout) -> QWidget +QtWidgets.QFormLayout.addItem?4(QLayoutItem) +QtWidgets.QFormLayout.itemAt?4(int) -> QLayoutItem +QtWidgets.QFormLayout.takeAt?4(int) -> QLayoutItem +QtWidgets.QFormLayout.setGeometry?4(QRect) +QtWidgets.QFormLayout.minimumSize?4() -> QSize +QtWidgets.QFormLayout.sizeHint?4() -> QSize +QtWidgets.QFormLayout.invalidate?4() +QtWidgets.QFormLayout.hasHeightForWidth?4() -> bool +QtWidgets.QFormLayout.heightForWidth?4(int) -> int +QtWidgets.QFormLayout.expandingDirections?4() -> Qt.Orientations +QtWidgets.QFormLayout.count?4() -> int +QtWidgets.QFormLayout.rowCount?4() -> int +QtWidgets.QFormLayout.removeRow?4(int) +QtWidgets.QFormLayout.removeRow?4(QWidget) +QtWidgets.QFormLayout.removeRow?4(QLayout) +QtWidgets.QFormLayout.takeRow?4(int) -> QFormLayout.TakeRowResult +QtWidgets.QFormLayout.takeRow?4(QWidget) -> QFormLayout.TakeRowResult +QtWidgets.QFormLayout.takeRow?4(QLayout) -> QFormLayout.TakeRowResult +QtWidgets.QFormLayout.TakeRowResult.fieldItem?7 +QtWidgets.QFormLayout.TakeRowResult.labelItem?7 +QtWidgets.QFormLayout.TakeRowResult?1() +QtWidgets.QFormLayout.TakeRowResult.__init__?1(self) +QtWidgets.QFormLayout.TakeRowResult?1(QFormLayout.TakeRowResult) +QtWidgets.QFormLayout.TakeRowResult.__init__?1(self, QFormLayout.TakeRowResult) +QtWidgets.QGesture.GestureCancelPolicy?10 +QtWidgets.QGesture.GestureCancelPolicy.CancelNone?10 +QtWidgets.QGesture.GestureCancelPolicy.CancelAllInContext?10 +QtWidgets.QGesture?1(QObject parent=None) +QtWidgets.QGesture.__init__?1(self, QObject parent=None) +QtWidgets.QGesture.gestureType?4() -> Qt.GestureType +QtWidgets.QGesture.state?4() -> Qt.GestureState +QtWidgets.QGesture.hotSpot?4() -> QPointF +QtWidgets.QGesture.setHotSpot?4(QPointF) +QtWidgets.QGesture.hasHotSpot?4() -> bool +QtWidgets.QGesture.unsetHotSpot?4() +QtWidgets.QGesture.setGestureCancelPolicy?4(QGesture.GestureCancelPolicy) +QtWidgets.QGesture.gestureCancelPolicy?4() -> QGesture.GestureCancelPolicy +QtWidgets.QPanGesture?1(QObject parent=None) +QtWidgets.QPanGesture.__init__?1(self, QObject parent=None) +QtWidgets.QPanGesture.lastOffset?4() -> QPointF +QtWidgets.QPanGesture.offset?4() -> QPointF +QtWidgets.QPanGesture.delta?4() -> QPointF +QtWidgets.QPanGesture.acceleration?4() -> float +QtWidgets.QPanGesture.setLastOffset?4(QPointF) +QtWidgets.QPanGesture.setOffset?4(QPointF) +QtWidgets.QPanGesture.setAcceleration?4(float) +QtWidgets.QPinchGesture.ChangeFlag?10 +QtWidgets.QPinchGesture.ChangeFlag.ScaleFactorChanged?10 +QtWidgets.QPinchGesture.ChangeFlag.RotationAngleChanged?10 +QtWidgets.QPinchGesture.ChangeFlag.CenterPointChanged?10 +QtWidgets.QPinchGesture?1(QObject parent=None) +QtWidgets.QPinchGesture.__init__?1(self, QObject parent=None) +QtWidgets.QPinchGesture.totalChangeFlags?4() -> QPinchGesture.ChangeFlags +QtWidgets.QPinchGesture.setTotalChangeFlags?4(QPinchGesture.ChangeFlags) +QtWidgets.QPinchGesture.changeFlags?4() -> QPinchGesture.ChangeFlags +QtWidgets.QPinchGesture.setChangeFlags?4(QPinchGesture.ChangeFlags) +QtWidgets.QPinchGesture.startCenterPoint?4() -> QPointF +QtWidgets.QPinchGesture.lastCenterPoint?4() -> QPointF +QtWidgets.QPinchGesture.centerPoint?4() -> QPointF +QtWidgets.QPinchGesture.setStartCenterPoint?4(QPointF) +QtWidgets.QPinchGesture.setLastCenterPoint?4(QPointF) +QtWidgets.QPinchGesture.setCenterPoint?4(QPointF) +QtWidgets.QPinchGesture.totalScaleFactor?4() -> float +QtWidgets.QPinchGesture.lastScaleFactor?4() -> float +QtWidgets.QPinchGesture.scaleFactor?4() -> float +QtWidgets.QPinchGesture.setTotalScaleFactor?4(float) +QtWidgets.QPinchGesture.setLastScaleFactor?4(float) +QtWidgets.QPinchGesture.setScaleFactor?4(float) +QtWidgets.QPinchGesture.totalRotationAngle?4() -> float +QtWidgets.QPinchGesture.lastRotationAngle?4() -> float +QtWidgets.QPinchGesture.rotationAngle?4() -> float +QtWidgets.QPinchGesture.setTotalRotationAngle?4(float) +QtWidgets.QPinchGesture.setLastRotationAngle?4(float) +QtWidgets.QPinchGesture.setRotationAngle?4(float) +QtWidgets.QPinchGesture.ChangeFlags?1() +QtWidgets.QPinchGesture.ChangeFlags.__init__?1(self) +QtWidgets.QPinchGesture.ChangeFlags?1(int) +QtWidgets.QPinchGesture.ChangeFlags.__init__?1(self, int) +QtWidgets.QPinchGesture.ChangeFlags?1(QPinchGesture.ChangeFlags) +QtWidgets.QPinchGesture.ChangeFlags.__init__?1(self, QPinchGesture.ChangeFlags) +QtWidgets.QSwipeGesture.SwipeDirection?10 +QtWidgets.QSwipeGesture.SwipeDirection.NoDirection?10 +QtWidgets.QSwipeGesture.SwipeDirection.Left?10 +QtWidgets.QSwipeGesture.SwipeDirection.Right?10 +QtWidgets.QSwipeGesture.SwipeDirection.Up?10 +QtWidgets.QSwipeGesture.SwipeDirection.Down?10 +QtWidgets.QSwipeGesture?1(QObject parent=None) +QtWidgets.QSwipeGesture.__init__?1(self, QObject parent=None) +QtWidgets.QSwipeGesture.horizontalDirection?4() -> QSwipeGesture.SwipeDirection +QtWidgets.QSwipeGesture.verticalDirection?4() -> QSwipeGesture.SwipeDirection +QtWidgets.QSwipeGesture.swipeAngle?4() -> float +QtWidgets.QSwipeGesture.setSwipeAngle?4(float) +QtWidgets.QTapGesture?1(QObject parent=None) +QtWidgets.QTapGesture.__init__?1(self, QObject parent=None) +QtWidgets.QTapGesture.position?4() -> QPointF +QtWidgets.QTapGesture.setPosition?4(QPointF) +QtWidgets.QTapAndHoldGesture?1(QObject parent=None) +QtWidgets.QTapAndHoldGesture.__init__?1(self, QObject parent=None) +QtWidgets.QTapAndHoldGesture.position?4() -> QPointF +QtWidgets.QTapAndHoldGesture.setPosition?4(QPointF) +QtWidgets.QTapAndHoldGesture.setTimeout?4(int) +QtWidgets.QTapAndHoldGesture.timeout?4() -> int +QtWidgets.QGestureEvent?1(unknown-type) +QtWidgets.QGestureEvent.__init__?1(self, unknown-type) +QtWidgets.QGestureEvent?1(QGestureEvent) +QtWidgets.QGestureEvent.__init__?1(self, QGestureEvent) +QtWidgets.QGestureEvent.gestures?4() -> unknown-type +QtWidgets.QGestureEvent.gesture?4(Qt.GestureType) -> QGesture +QtWidgets.QGestureEvent.activeGestures?4() -> unknown-type +QtWidgets.QGestureEvent.canceledGestures?4() -> unknown-type +QtWidgets.QGestureEvent.setAccepted?4(bool) +QtWidgets.QGestureEvent.isAccepted?4() -> bool +QtWidgets.QGestureEvent.accept?4() +QtWidgets.QGestureEvent.ignore?4() +QtWidgets.QGestureEvent.setAccepted?4(QGesture, bool) +QtWidgets.QGestureEvent.accept?4(QGesture) +QtWidgets.QGestureEvent.ignore?4(QGesture) +QtWidgets.QGestureEvent.isAccepted?4(QGesture) -> bool +QtWidgets.QGestureEvent.setAccepted?4(Qt.GestureType, bool) +QtWidgets.QGestureEvent.accept?4(Qt.GestureType) +QtWidgets.QGestureEvent.ignore?4(Qt.GestureType) +QtWidgets.QGestureEvent.isAccepted?4(Qt.GestureType) -> bool +QtWidgets.QGestureEvent.widget?4() -> QWidget +QtWidgets.QGestureEvent.mapToGraphicsScene?4(QPointF) -> QPointF +QtWidgets.QGestureRecognizer.ResultFlag?10 +QtWidgets.QGestureRecognizer.ResultFlag.Ignore?10 +QtWidgets.QGestureRecognizer.ResultFlag.MayBeGesture?10 +QtWidgets.QGestureRecognizer.ResultFlag.TriggerGesture?10 +QtWidgets.QGestureRecognizer.ResultFlag.FinishGesture?10 +QtWidgets.QGestureRecognizer.ResultFlag.CancelGesture?10 +QtWidgets.QGestureRecognizer.ResultFlag.ConsumeEventHint?10 +QtWidgets.QGestureRecognizer?1() +QtWidgets.QGestureRecognizer.__init__?1(self) +QtWidgets.QGestureRecognizer?1(QGestureRecognizer) +QtWidgets.QGestureRecognizer.__init__?1(self, QGestureRecognizer) +QtWidgets.QGestureRecognizer.create?4(QObject) -> QGesture +QtWidgets.QGestureRecognizer.recognize?4(QGesture, QObject, QEvent) -> QGestureRecognizer.Result +QtWidgets.QGestureRecognizer.reset?4(QGesture) +QtWidgets.QGestureRecognizer.registerRecognizer?4(QGestureRecognizer) -> Qt.GestureType +QtWidgets.QGestureRecognizer.unregisterRecognizer?4(Qt.GestureType) +QtWidgets.QGestureRecognizer.Result?1() +QtWidgets.QGestureRecognizer.Result.__init__?1(self) +QtWidgets.QGestureRecognizer.Result?1(int) +QtWidgets.QGestureRecognizer.Result.__init__?1(self, int) +QtWidgets.QGestureRecognizer.Result?1(QGestureRecognizer.Result) +QtWidgets.QGestureRecognizer.Result.__init__?1(self, QGestureRecognizer.Result) +QtWidgets.QGraphicsAnchor.setSpacing?4(float) +QtWidgets.QGraphicsAnchor.unsetSpacing?4() +QtWidgets.QGraphicsAnchor.spacing?4() -> float +QtWidgets.QGraphicsAnchor.setSizePolicy?4(QSizePolicy.Policy) +QtWidgets.QGraphicsAnchor.sizePolicy?4() -> QSizePolicy.Policy +QtWidgets.QGraphicsLayoutItem?1(QGraphicsLayoutItem parent=None, bool isLayout=False) +QtWidgets.QGraphicsLayoutItem.__init__?1(self, QGraphicsLayoutItem parent=None, bool isLayout=False) +QtWidgets.QGraphicsLayoutItem.setSizePolicy?4(QSizePolicy) +QtWidgets.QGraphicsLayoutItem.setSizePolicy?4(QSizePolicy.Policy, QSizePolicy.Policy, QSizePolicy.ControlType controlType=QSizePolicy.DefaultType) +QtWidgets.QGraphicsLayoutItem.sizePolicy?4() -> QSizePolicy +QtWidgets.QGraphicsLayoutItem.setMinimumSize?4(QSizeF) +QtWidgets.QGraphicsLayoutItem.minimumSize?4() -> QSizeF +QtWidgets.QGraphicsLayoutItem.setMinimumWidth?4(float) +QtWidgets.QGraphicsLayoutItem.setMinimumHeight?4(float) +QtWidgets.QGraphicsLayoutItem.setPreferredSize?4(QSizeF) +QtWidgets.QGraphicsLayoutItem.preferredSize?4() -> QSizeF +QtWidgets.QGraphicsLayoutItem.setPreferredWidth?4(float) +QtWidgets.QGraphicsLayoutItem.setPreferredHeight?4(float) +QtWidgets.QGraphicsLayoutItem.setMaximumSize?4(QSizeF) +QtWidgets.QGraphicsLayoutItem.maximumSize?4() -> QSizeF +QtWidgets.QGraphicsLayoutItem.setMaximumWidth?4(float) +QtWidgets.QGraphicsLayoutItem.setMaximumHeight?4(float) +QtWidgets.QGraphicsLayoutItem.setGeometry?4(QRectF) +QtWidgets.QGraphicsLayoutItem.geometry?4() -> QRectF +QtWidgets.QGraphicsLayoutItem.getContentsMargins?4() -> (float, float, float, float) +QtWidgets.QGraphicsLayoutItem.contentsRect?4() -> QRectF +QtWidgets.QGraphicsLayoutItem.effectiveSizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF +QtWidgets.QGraphicsLayoutItem.updateGeometry?4() +QtWidgets.QGraphicsLayoutItem.parentLayoutItem?4() -> QGraphicsLayoutItem +QtWidgets.QGraphicsLayoutItem.setParentLayoutItem?4(QGraphicsLayoutItem) +QtWidgets.QGraphicsLayoutItem.isLayout?4() -> bool +QtWidgets.QGraphicsLayoutItem.setMinimumSize?4(float, float) +QtWidgets.QGraphicsLayoutItem.setPreferredSize?4(float, float) +QtWidgets.QGraphicsLayoutItem.setMaximumSize?4(float, float) +QtWidgets.QGraphicsLayoutItem.minimumWidth?4() -> float +QtWidgets.QGraphicsLayoutItem.minimumHeight?4() -> float +QtWidgets.QGraphicsLayoutItem.preferredWidth?4() -> float +QtWidgets.QGraphicsLayoutItem.preferredHeight?4() -> float +QtWidgets.QGraphicsLayoutItem.maximumWidth?4() -> float +QtWidgets.QGraphicsLayoutItem.maximumHeight?4() -> float +QtWidgets.QGraphicsLayoutItem.graphicsItem?4() -> QGraphicsItem +QtWidgets.QGraphicsLayoutItem.ownedByLayout?4() -> bool +QtWidgets.QGraphicsLayoutItem.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF +QtWidgets.QGraphicsLayoutItem.setGraphicsItem?4(QGraphicsItem) +QtWidgets.QGraphicsLayoutItem.setOwnedByLayout?4(bool) +QtWidgets.QGraphicsLayout?1(QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsLayout.__init__?1(self, QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsLayout.setContentsMargins?4(float, float, float, float) +QtWidgets.QGraphicsLayout.getContentsMargins?4() -> (float, float, float, float) +QtWidgets.QGraphicsLayout.activate?4() +QtWidgets.QGraphicsLayout.isActivated?4() -> bool +QtWidgets.QGraphicsLayout.invalidate?4() +QtWidgets.QGraphicsLayout.widgetEvent?4(QEvent) +QtWidgets.QGraphicsLayout.count?4() -> int +QtWidgets.QGraphicsLayout.itemAt?4(int) -> QGraphicsLayoutItem +QtWidgets.QGraphicsLayout.removeAt?4(int) +QtWidgets.QGraphicsLayout.updateGeometry?4() +QtWidgets.QGraphicsLayout.addChildLayoutItem?4(QGraphicsLayoutItem) +QtWidgets.QGraphicsAnchorLayout?1(QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsAnchorLayout.__init__?1(self, QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsAnchorLayout.addAnchor?4(QGraphicsLayoutItem, Qt.AnchorPoint, QGraphicsLayoutItem, Qt.AnchorPoint) -> QGraphicsAnchor +QtWidgets.QGraphicsAnchorLayout.anchor?4(QGraphicsLayoutItem, Qt.AnchorPoint, QGraphicsLayoutItem, Qt.AnchorPoint) -> QGraphicsAnchor +QtWidgets.QGraphicsAnchorLayout.addCornerAnchors?4(QGraphicsLayoutItem, Qt.Corner, QGraphicsLayoutItem, Qt.Corner) +QtWidgets.QGraphicsAnchorLayout.addAnchors?4(QGraphicsLayoutItem, QGraphicsLayoutItem, Qt.Orientations orientations=Qt.Horizontal|Qt.Vertical) +QtWidgets.QGraphicsAnchorLayout.setHorizontalSpacing?4(float) +QtWidgets.QGraphicsAnchorLayout.setVerticalSpacing?4(float) +QtWidgets.QGraphicsAnchorLayout.setSpacing?4(float) +QtWidgets.QGraphicsAnchorLayout.horizontalSpacing?4() -> float +QtWidgets.QGraphicsAnchorLayout.verticalSpacing?4() -> float +QtWidgets.QGraphicsAnchorLayout.removeAt?4(int) +QtWidgets.QGraphicsAnchorLayout.setGeometry?4(QRectF) +QtWidgets.QGraphicsAnchorLayout.count?4() -> int +QtWidgets.QGraphicsAnchorLayout.itemAt?4(int) -> QGraphicsLayoutItem +QtWidgets.QGraphicsAnchorLayout.invalidate?4() +QtWidgets.QGraphicsAnchorLayout.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF +QtWidgets.QGraphicsEffect.PixmapPadMode?10 +QtWidgets.QGraphicsEffect.PixmapPadMode.NoPad?10 +QtWidgets.QGraphicsEffect.PixmapPadMode.PadToTransparentBorder?10 +QtWidgets.QGraphicsEffect.PixmapPadMode.PadToEffectiveBoundingRect?10 +QtWidgets.QGraphicsEffect.ChangeFlag?10 +QtWidgets.QGraphicsEffect.ChangeFlag.SourceAttached?10 +QtWidgets.QGraphicsEffect.ChangeFlag.SourceDetached?10 +QtWidgets.QGraphicsEffect.ChangeFlag.SourceBoundingRectChanged?10 +QtWidgets.QGraphicsEffect.ChangeFlag.SourceInvalidated?10 +QtWidgets.QGraphicsEffect?1(QObject parent=None) +QtWidgets.QGraphicsEffect.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsEffect.boundingRectFor?4(QRectF) -> QRectF +QtWidgets.QGraphicsEffect.boundingRect?4() -> QRectF +QtWidgets.QGraphicsEffect.isEnabled?4() -> bool +QtWidgets.QGraphicsEffect.setEnabled?4(bool) +QtWidgets.QGraphicsEffect.update?4() +QtWidgets.QGraphicsEffect.enabledChanged?4(bool) +QtWidgets.QGraphicsEffect.draw?4(QPainter) +QtWidgets.QGraphicsEffect.sourceChanged?4(QGraphicsEffect.ChangeFlags) +QtWidgets.QGraphicsEffect.updateBoundingRect?4() +QtWidgets.QGraphicsEffect.sourceIsPixmap?4() -> bool +QtWidgets.QGraphicsEffect.sourceBoundingRect?4(Qt.CoordinateSystem system=Qt.LogicalCoordinates) -> QRectF +QtWidgets.QGraphicsEffect.drawSource?4(QPainter) +QtWidgets.QGraphicsEffect.sourcePixmap?4(Qt.CoordinateSystem system=Qt.LogicalCoordinates, QGraphicsEffect.PixmapPadMode mode=QGraphicsEffect.PadToEffectiveBoundingRect) -> (QPixmap, QPoint) +QtWidgets.QGraphicsEffect.ChangeFlags?1() +QtWidgets.QGraphicsEffect.ChangeFlags.__init__?1(self) +QtWidgets.QGraphicsEffect.ChangeFlags?1(int) +QtWidgets.QGraphicsEffect.ChangeFlags.__init__?1(self, int) +QtWidgets.QGraphicsEffect.ChangeFlags?1(QGraphicsEffect.ChangeFlags) +QtWidgets.QGraphicsEffect.ChangeFlags.__init__?1(self, QGraphicsEffect.ChangeFlags) +QtWidgets.QGraphicsColorizeEffect?1(QObject parent=None) +QtWidgets.QGraphicsColorizeEffect.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsColorizeEffect.color?4() -> QColor +QtWidgets.QGraphicsColorizeEffect.strength?4() -> float +QtWidgets.QGraphicsColorizeEffect.setColor?4(QColor) +QtWidgets.QGraphicsColorizeEffect.setStrength?4(float) +QtWidgets.QGraphicsColorizeEffect.colorChanged?4(QColor) +QtWidgets.QGraphicsColorizeEffect.strengthChanged?4(float) +QtWidgets.QGraphicsColorizeEffect.draw?4(QPainter) +QtWidgets.QGraphicsBlurEffect.BlurHint?10 +QtWidgets.QGraphicsBlurEffect.BlurHint.PerformanceHint?10 +QtWidgets.QGraphicsBlurEffect.BlurHint.QualityHint?10 +QtWidgets.QGraphicsBlurEffect.BlurHint.AnimationHint?10 +QtWidgets.QGraphicsBlurEffect?1(QObject parent=None) +QtWidgets.QGraphicsBlurEffect.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsBlurEffect.boundingRectFor?4(QRectF) -> QRectF +QtWidgets.QGraphicsBlurEffect.blurRadius?4() -> float +QtWidgets.QGraphicsBlurEffect.blurHints?4() -> QGraphicsBlurEffect.BlurHints +QtWidgets.QGraphicsBlurEffect.setBlurRadius?4(float) +QtWidgets.QGraphicsBlurEffect.setBlurHints?4(QGraphicsBlurEffect.BlurHints) +QtWidgets.QGraphicsBlurEffect.blurRadiusChanged?4(float) +QtWidgets.QGraphicsBlurEffect.blurHintsChanged?4(QGraphicsBlurEffect.BlurHints) +QtWidgets.QGraphicsBlurEffect.draw?4(QPainter) +QtWidgets.QGraphicsBlurEffect.BlurHints?1() +QtWidgets.QGraphicsBlurEffect.BlurHints.__init__?1(self) +QtWidgets.QGraphicsBlurEffect.BlurHints?1(int) +QtWidgets.QGraphicsBlurEffect.BlurHints.__init__?1(self, int) +QtWidgets.QGraphicsBlurEffect.BlurHints?1(QGraphicsBlurEffect.BlurHints) +QtWidgets.QGraphicsBlurEffect.BlurHints.__init__?1(self, QGraphicsBlurEffect.BlurHints) +QtWidgets.QGraphicsDropShadowEffect?1(QObject parent=None) +QtWidgets.QGraphicsDropShadowEffect.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsDropShadowEffect.boundingRectFor?4(QRectF) -> QRectF +QtWidgets.QGraphicsDropShadowEffect.offset?4() -> QPointF +QtWidgets.QGraphicsDropShadowEffect.xOffset?4() -> float +QtWidgets.QGraphicsDropShadowEffect.yOffset?4() -> float +QtWidgets.QGraphicsDropShadowEffect.blurRadius?4() -> float +QtWidgets.QGraphicsDropShadowEffect.color?4() -> QColor +QtWidgets.QGraphicsDropShadowEffect.setOffset?4(QPointF) +QtWidgets.QGraphicsDropShadowEffect.setOffset?4(float, float) +QtWidgets.QGraphicsDropShadowEffect.setOffset?4(float) +QtWidgets.QGraphicsDropShadowEffect.setXOffset?4(float) +QtWidgets.QGraphicsDropShadowEffect.setYOffset?4(float) +QtWidgets.QGraphicsDropShadowEffect.setBlurRadius?4(float) +QtWidgets.QGraphicsDropShadowEffect.setColor?4(QColor) +QtWidgets.QGraphicsDropShadowEffect.offsetChanged?4(QPointF) +QtWidgets.QGraphicsDropShadowEffect.blurRadiusChanged?4(float) +QtWidgets.QGraphicsDropShadowEffect.colorChanged?4(QColor) +QtWidgets.QGraphicsDropShadowEffect.draw?4(QPainter) +QtWidgets.QGraphicsOpacityEffect?1(QObject parent=None) +QtWidgets.QGraphicsOpacityEffect.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsOpacityEffect.opacity?4() -> float +QtWidgets.QGraphicsOpacityEffect.opacityMask?4() -> QBrush +QtWidgets.QGraphicsOpacityEffect.setOpacity?4(float) +QtWidgets.QGraphicsOpacityEffect.setOpacityMask?4(QBrush) +QtWidgets.QGraphicsOpacityEffect.opacityChanged?4(float) +QtWidgets.QGraphicsOpacityEffect.opacityMaskChanged?4(QBrush) +QtWidgets.QGraphicsOpacityEffect.draw?4(QPainter) +QtWidgets.QGraphicsGridLayout?1(QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsGridLayout.__init__?1(self, QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsGridLayout.addItem?4(QGraphicsLayoutItem, int, int, int, int, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QGraphicsGridLayout.addItem?4(QGraphicsLayoutItem, int, int, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QGraphicsGridLayout.setHorizontalSpacing?4(float) +QtWidgets.QGraphicsGridLayout.horizontalSpacing?4() -> float +QtWidgets.QGraphicsGridLayout.setVerticalSpacing?4(float) +QtWidgets.QGraphicsGridLayout.verticalSpacing?4() -> float +QtWidgets.QGraphicsGridLayout.setSpacing?4(float) +QtWidgets.QGraphicsGridLayout.setRowSpacing?4(int, float) +QtWidgets.QGraphicsGridLayout.rowSpacing?4(int) -> float +QtWidgets.QGraphicsGridLayout.setColumnSpacing?4(int, float) +QtWidgets.QGraphicsGridLayout.columnSpacing?4(int) -> float +QtWidgets.QGraphicsGridLayout.setRowStretchFactor?4(int, int) +QtWidgets.QGraphicsGridLayout.rowStretchFactor?4(int) -> int +QtWidgets.QGraphicsGridLayout.setColumnStretchFactor?4(int, int) +QtWidgets.QGraphicsGridLayout.columnStretchFactor?4(int) -> int +QtWidgets.QGraphicsGridLayout.setRowMinimumHeight?4(int, float) +QtWidgets.QGraphicsGridLayout.rowMinimumHeight?4(int) -> float +QtWidgets.QGraphicsGridLayout.setRowPreferredHeight?4(int, float) +QtWidgets.QGraphicsGridLayout.rowPreferredHeight?4(int) -> float +QtWidgets.QGraphicsGridLayout.setRowMaximumHeight?4(int, float) +QtWidgets.QGraphicsGridLayout.rowMaximumHeight?4(int) -> float +QtWidgets.QGraphicsGridLayout.setRowFixedHeight?4(int, float) +QtWidgets.QGraphicsGridLayout.setColumnMinimumWidth?4(int, float) +QtWidgets.QGraphicsGridLayout.columnMinimumWidth?4(int) -> float +QtWidgets.QGraphicsGridLayout.setColumnPreferredWidth?4(int, float) +QtWidgets.QGraphicsGridLayout.columnPreferredWidth?4(int) -> float +QtWidgets.QGraphicsGridLayout.setColumnMaximumWidth?4(int, float) +QtWidgets.QGraphicsGridLayout.columnMaximumWidth?4(int) -> float +QtWidgets.QGraphicsGridLayout.setColumnFixedWidth?4(int, float) +QtWidgets.QGraphicsGridLayout.setRowAlignment?4(int, Qt.Alignment) +QtWidgets.QGraphicsGridLayout.rowAlignment?4(int) -> Qt.Alignment +QtWidgets.QGraphicsGridLayout.setColumnAlignment?4(int, Qt.Alignment) +QtWidgets.QGraphicsGridLayout.columnAlignment?4(int) -> Qt.Alignment +QtWidgets.QGraphicsGridLayout.setAlignment?4(QGraphicsLayoutItem, Qt.Alignment) +QtWidgets.QGraphicsGridLayout.alignment?4(QGraphicsLayoutItem) -> Qt.Alignment +QtWidgets.QGraphicsGridLayout.rowCount?4() -> int +QtWidgets.QGraphicsGridLayout.columnCount?4() -> int +QtWidgets.QGraphicsGridLayout.itemAt?4(int, int) -> QGraphicsLayoutItem +QtWidgets.QGraphicsGridLayout.count?4() -> int +QtWidgets.QGraphicsGridLayout.itemAt?4(int) -> QGraphicsLayoutItem +QtWidgets.QGraphicsGridLayout.removeAt?4(int) +QtWidgets.QGraphicsGridLayout.invalidate?4() +QtWidgets.QGraphicsGridLayout.setGeometry?4(QRectF) +QtWidgets.QGraphicsGridLayout.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF +QtWidgets.QGraphicsGridLayout.removeItem?4(QGraphicsLayoutItem) +QtWidgets.QGraphicsItem.PanelModality?10 +QtWidgets.QGraphicsItem.PanelModality.NonModal?10 +QtWidgets.QGraphicsItem.PanelModality.PanelModal?10 +QtWidgets.QGraphicsItem.PanelModality.SceneModal?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsFocusable?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemClipsToShape?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemClipsChildrenToShape?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIgnoresTransformations?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIgnoresParentOpacity?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemDoesntPropagateOpacityToChildren?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemStacksBehindParent?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemUsesExtendedStyleOption?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemHasNoContents?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemSendsGeometryChanges?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemAcceptsInputMethod?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemNegativeZStacksBehindParent?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsPanel?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemSendsScenePositionChanges?10 +QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemContainsChildrenInShape?10 +QtWidgets.QGraphicsItem.GraphicsItemChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemPositionChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemMatrixChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemVisibleChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemEnabledChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSelectedChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemParentChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemChildAddedChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemChildRemovedChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemTransformChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemPositionHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemTransformHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSceneChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemVisibleHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemEnabledHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSelectedHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemParentHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSceneHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemCursorChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemCursorHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemToolTipChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemToolTipHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemFlagsChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemFlagsHaveChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemZValueChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemZValueHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemOpacityChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemOpacityHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemScenePositionHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemRotationChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemRotationHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemScaleChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemScaleHasChanged?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemTransformOriginPointChange?10 +QtWidgets.QGraphicsItem.GraphicsItemChange.ItemTransformOriginPointHasChanged?10 +QtWidgets.QGraphicsItem.CacheMode?10 +QtWidgets.QGraphicsItem.CacheMode.NoCache?10 +QtWidgets.QGraphicsItem.CacheMode.ItemCoordinateCache?10 +QtWidgets.QGraphicsItem.CacheMode.DeviceCoordinateCache?10 +QtWidgets.QGraphicsItem.Type?7 +QtWidgets.QGraphicsItem.UserType?7 +QtWidgets.QGraphicsItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsItem.scene?4() -> QGraphicsScene +QtWidgets.QGraphicsItem.parentItem?4() -> QGraphicsItem +QtWidgets.QGraphicsItem.topLevelItem?4() -> QGraphicsItem +QtWidgets.QGraphicsItem.setParentItem?4(QGraphicsItem) +QtWidgets.QGraphicsItem.group?4() -> QGraphicsItemGroup +QtWidgets.QGraphicsItem.setGroup?4(QGraphicsItemGroup) +QtWidgets.QGraphicsItem.flags?4() -> QGraphicsItem.GraphicsItemFlags +QtWidgets.QGraphicsItem.setFlag?4(QGraphicsItem.GraphicsItemFlag, bool enabled=True) +QtWidgets.QGraphicsItem.setFlags?4(QGraphicsItem.GraphicsItemFlags) +QtWidgets.QGraphicsItem.toolTip?4() -> QString +QtWidgets.QGraphicsItem.setToolTip?4(QString) +QtWidgets.QGraphicsItem.cursor?4() -> QCursor +QtWidgets.QGraphicsItem.setCursor?4(QCursor) +QtWidgets.QGraphicsItem.hasCursor?4() -> bool +QtWidgets.QGraphicsItem.unsetCursor?4() +QtWidgets.QGraphicsItem.isVisible?4() -> bool +QtWidgets.QGraphicsItem.setVisible?4(bool) +QtWidgets.QGraphicsItem.hide?4() +QtWidgets.QGraphicsItem.show?4() +QtWidgets.QGraphicsItem.isEnabled?4() -> bool +QtWidgets.QGraphicsItem.setEnabled?4(bool) +QtWidgets.QGraphicsItem.isSelected?4() -> bool +QtWidgets.QGraphicsItem.setSelected?4(bool) +QtWidgets.QGraphicsItem.acceptDrops?4() -> bool +QtWidgets.QGraphicsItem.setAcceptDrops?4(bool) +QtWidgets.QGraphicsItem.acceptedMouseButtons?4() -> Qt.MouseButtons +QtWidgets.QGraphicsItem.setAcceptedMouseButtons?4(Qt.MouseButtons) +QtWidgets.QGraphicsItem.hasFocus?4() -> bool +QtWidgets.QGraphicsItem.setFocus?4(Qt.FocusReason focusReason=Qt.OtherFocusReason) +QtWidgets.QGraphicsItem.clearFocus?4() +QtWidgets.QGraphicsItem.pos?4() -> QPointF +QtWidgets.QGraphicsItem.x?4() -> float +QtWidgets.QGraphicsItem.y?4() -> float +QtWidgets.QGraphicsItem.scenePos?4() -> QPointF +QtWidgets.QGraphicsItem.setPos?4(QPointF) +QtWidgets.QGraphicsItem.moveBy?4(float, float) +QtWidgets.QGraphicsItem.ensureVisible?4(QRectF rect=QRectF(), int xMargin=50, int yMargin=50) +QtWidgets.QGraphicsItem.advance?4(int) +QtWidgets.QGraphicsItem.zValue?4() -> float +QtWidgets.QGraphicsItem.setZValue?4(float) +QtWidgets.QGraphicsItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsItem.childrenBoundingRect?4() -> QRectF +QtWidgets.QGraphicsItem.sceneBoundingRect?4() -> QRectF +QtWidgets.QGraphicsItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsItem.collidesWithItem?4(QGraphicsItem, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> bool +QtWidgets.QGraphicsItem.collidesWithPath?4(QPainterPath, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> bool +QtWidgets.QGraphicsItem.collidingItems?4(Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type +QtWidgets.QGraphicsItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsItem.update?4(QRectF rect=QRectF()) +QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, QPointF) -> QPointF +QtWidgets.QGraphicsItem.mapToParent?4(QPointF) -> QPointF +QtWidgets.QGraphicsItem.mapToScene?4(QPointF) -> QPointF +QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, QRectF) -> QPolygonF +QtWidgets.QGraphicsItem.mapToParent?4(QRectF) -> QPolygonF +QtWidgets.QGraphicsItem.mapToScene?4(QRectF) -> QPolygonF +QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, QPolygonF) -> QPolygonF +QtWidgets.QGraphicsItem.mapToParent?4(QPolygonF) -> QPolygonF +QtWidgets.QGraphicsItem.mapToScene?4(QPolygonF) -> QPolygonF +QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, QPainterPath) -> QPainterPath +QtWidgets.QGraphicsItem.mapToParent?4(QPainterPath) -> QPainterPath +QtWidgets.QGraphicsItem.mapToScene?4(QPainterPath) -> QPainterPath +QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, QPointF) -> QPointF +QtWidgets.QGraphicsItem.mapFromParent?4(QPointF) -> QPointF +QtWidgets.QGraphicsItem.mapFromScene?4(QPointF) -> QPointF +QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, QRectF) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromParent?4(QRectF) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromScene?4(QRectF) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, QPolygonF) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromParent?4(QPolygonF) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromScene?4(QPolygonF) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, QPainterPath) -> QPainterPath +QtWidgets.QGraphicsItem.mapFromParent?4(QPainterPath) -> QPainterPath +QtWidgets.QGraphicsItem.mapFromScene?4(QPainterPath) -> QPainterPath +QtWidgets.QGraphicsItem.isAncestorOf?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsItem.data?4(int) -> QVariant +QtWidgets.QGraphicsItem.setData?4(int, QVariant) +QtWidgets.QGraphicsItem.type?4() -> int +QtWidgets.QGraphicsItem.installSceneEventFilter?4(QGraphicsItem) +QtWidgets.QGraphicsItem.removeSceneEventFilter?4(QGraphicsItem) +QtWidgets.QGraphicsItem.contextMenuEvent?4(QGraphicsSceneContextMenuEvent) +QtWidgets.QGraphicsItem.dragEnterEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsItem.dragLeaveEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsItem.dragMoveEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsItem.dropEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsItem.focusInEvent?4(QFocusEvent) +QtWidgets.QGraphicsItem.focusOutEvent?4(QFocusEvent) +QtWidgets.QGraphicsItem.hoverEnterEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsItem.hoverLeaveEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsItem.hoverMoveEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsItem.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QGraphicsItem.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QGraphicsItem.itemChange?4(QGraphicsItem.GraphicsItemChange, QVariant) -> QVariant +QtWidgets.QGraphicsItem.keyPressEvent?4(QKeyEvent) +QtWidgets.QGraphicsItem.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QGraphicsItem.mouseDoubleClickEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsItem.mouseMoveEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsItem.mousePressEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsItem.mouseReleaseEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsItem.prepareGeometryChange?4() +QtWidgets.QGraphicsItem.sceneEvent?4(QEvent) -> bool +QtWidgets.QGraphicsItem.sceneEventFilter?4(QGraphicsItem, QEvent) -> bool +QtWidgets.QGraphicsItem.wheelEvent?4(QGraphicsSceneWheelEvent) +QtWidgets.QGraphicsItem.setPos?4(float, float) +QtWidgets.QGraphicsItem.ensureVisible?4(float, float, float, float, int xMargin=50, int yMargin=50) +QtWidgets.QGraphicsItem.update?4(float, float, float, float) +QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, float, float) -> QPointF +QtWidgets.QGraphicsItem.mapToParent?4(float, float) -> QPointF +QtWidgets.QGraphicsItem.mapToScene?4(float, float) -> QPointF +QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, float, float) -> QPointF +QtWidgets.QGraphicsItem.mapFromParent?4(float, float) -> QPointF +QtWidgets.QGraphicsItem.mapFromScene?4(float, float) -> QPointF +QtWidgets.QGraphicsItem.transform?4() -> QTransform +QtWidgets.QGraphicsItem.sceneTransform?4() -> QTransform +QtWidgets.QGraphicsItem.deviceTransform?4(QTransform) -> QTransform +QtWidgets.QGraphicsItem.setTransform?4(QTransform, bool combine=False) +QtWidgets.QGraphicsItem.resetTransform?4() +QtWidgets.QGraphicsItem.isObscured?4(QRectF rect=QRectF()) -> bool +QtWidgets.QGraphicsItem.isObscured?4(float, float, float, float) -> bool +QtWidgets.QGraphicsItem.mapToItem?4(QGraphicsItem, float, float, float, float) -> QPolygonF +QtWidgets.QGraphicsItem.mapToParent?4(float, float, float, float) -> QPolygonF +QtWidgets.QGraphicsItem.mapToScene?4(float, float, float, float) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromItem?4(QGraphicsItem, float, float, float, float) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromParent?4(float, float, float, float) -> QPolygonF +QtWidgets.QGraphicsItem.mapFromScene?4(float, float, float, float) -> QPolygonF +QtWidgets.QGraphicsItem.parentWidget?4() -> QGraphicsWidget +QtWidgets.QGraphicsItem.topLevelWidget?4() -> QGraphicsWidget +QtWidgets.QGraphicsItem.window?4() -> QGraphicsWidget +QtWidgets.QGraphicsItem.childItems?4() -> unknown-type +QtWidgets.QGraphicsItem.isWidget?4() -> bool +QtWidgets.QGraphicsItem.isWindow?4() -> bool +QtWidgets.QGraphicsItem.cacheMode?4() -> QGraphicsItem.CacheMode +QtWidgets.QGraphicsItem.setCacheMode?4(QGraphicsItem.CacheMode, QSize logicalCacheSize=QSize()) +QtWidgets.QGraphicsItem.isVisibleTo?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsItem.acceptHoverEvents?4() -> bool +QtWidgets.QGraphicsItem.setAcceptHoverEvents?4(bool) +QtWidgets.QGraphicsItem.grabMouse?4() +QtWidgets.QGraphicsItem.ungrabMouse?4() +QtWidgets.QGraphicsItem.grabKeyboard?4() +QtWidgets.QGraphicsItem.ungrabKeyboard?4() +QtWidgets.QGraphicsItem.boundingRegion?4(QTransform) -> QRegion +QtWidgets.QGraphicsItem.boundingRegionGranularity?4() -> float +QtWidgets.QGraphicsItem.setBoundingRegionGranularity?4(float) +QtWidgets.QGraphicsItem.scroll?4(float, float, QRectF rect=QRectF()) +QtWidgets.QGraphicsItem.commonAncestorItem?4(QGraphicsItem) -> QGraphicsItem +QtWidgets.QGraphicsItem.isUnderMouse?4() -> bool +QtWidgets.QGraphicsItem.opacity?4() -> float +QtWidgets.QGraphicsItem.effectiveOpacity?4() -> float +QtWidgets.QGraphicsItem.setOpacity?4(float) +QtWidgets.QGraphicsItem.itemTransform?4(QGraphicsItem) -> (QTransform, bool) +QtWidgets.QGraphicsItem.isClipped?4() -> bool +QtWidgets.QGraphicsItem.clipPath?4() -> QPainterPath +QtWidgets.QGraphicsItem.mapRectToItem?4(QGraphicsItem, QRectF) -> QRectF +QtWidgets.QGraphicsItem.mapRectToParent?4(QRectF) -> QRectF +QtWidgets.QGraphicsItem.mapRectToScene?4(QRectF) -> QRectF +QtWidgets.QGraphicsItem.mapRectFromItem?4(QGraphicsItem, QRectF) -> QRectF +QtWidgets.QGraphicsItem.mapRectFromParent?4(QRectF) -> QRectF +QtWidgets.QGraphicsItem.mapRectFromScene?4(QRectF) -> QRectF +QtWidgets.QGraphicsItem.mapRectToItem?4(QGraphicsItem, float, float, float, float) -> QRectF +QtWidgets.QGraphicsItem.mapRectToParent?4(float, float, float, float) -> QRectF +QtWidgets.QGraphicsItem.mapRectToScene?4(float, float, float, float) -> QRectF +QtWidgets.QGraphicsItem.mapRectFromItem?4(QGraphicsItem, float, float, float, float) -> QRectF +QtWidgets.QGraphicsItem.mapRectFromParent?4(float, float, float, float) -> QRectF +QtWidgets.QGraphicsItem.mapRectFromScene?4(float, float, float, float) -> QRectF +QtWidgets.QGraphicsItem.parentObject?4() -> QGraphicsObject +QtWidgets.QGraphicsItem.panel?4() -> QGraphicsItem +QtWidgets.QGraphicsItem.isPanel?4() -> bool +QtWidgets.QGraphicsItem.toGraphicsObject?4() -> QGraphicsObject +QtWidgets.QGraphicsItem.panelModality?4() -> QGraphicsItem.PanelModality +QtWidgets.QGraphicsItem.setPanelModality?4(QGraphicsItem.PanelModality) +QtWidgets.QGraphicsItem.isBlockedByModalPanel?4() -> (bool, QGraphicsItem) +QtWidgets.QGraphicsItem.graphicsEffect?4() -> QGraphicsEffect +QtWidgets.QGraphicsItem.setGraphicsEffect?4(QGraphicsEffect) +QtWidgets.QGraphicsItem.acceptTouchEvents?4() -> bool +QtWidgets.QGraphicsItem.setAcceptTouchEvents?4(bool) +QtWidgets.QGraphicsItem.filtersChildEvents?4() -> bool +QtWidgets.QGraphicsItem.setFiltersChildEvents?4(bool) +QtWidgets.QGraphicsItem.isActive?4() -> bool +QtWidgets.QGraphicsItem.setActive?4(bool) +QtWidgets.QGraphicsItem.focusProxy?4() -> QGraphicsItem +QtWidgets.QGraphicsItem.setFocusProxy?4(QGraphicsItem) +QtWidgets.QGraphicsItem.focusItem?4() -> QGraphicsItem +QtWidgets.QGraphicsItem.setX?4(float) +QtWidgets.QGraphicsItem.setY?4(float) +QtWidgets.QGraphicsItem.setRotation?4(float) +QtWidgets.QGraphicsItem.rotation?4() -> float +QtWidgets.QGraphicsItem.setScale?4(float) +QtWidgets.QGraphicsItem.scale?4() -> float +QtWidgets.QGraphicsItem.transformations?4() -> unknown-type +QtWidgets.QGraphicsItem.setTransformations?4(unknown-type) +QtWidgets.QGraphicsItem.transformOriginPoint?4() -> QPointF +QtWidgets.QGraphicsItem.setTransformOriginPoint?4(QPointF) +QtWidgets.QGraphicsItem.setTransformOriginPoint?4(float, float) +QtWidgets.QGraphicsItem.stackBefore?4(QGraphicsItem) +QtWidgets.QGraphicsItem.inputMethodHints?4() -> Qt.InputMethodHints +QtWidgets.QGraphicsItem.setInputMethodHints?4(Qt.InputMethodHints) +QtWidgets.QGraphicsItem.updateMicroFocus?4() +QtWidgets.QGraphicsItem.GraphicsItemFlags?1() +QtWidgets.QGraphicsItem.GraphicsItemFlags.__init__?1(self) +QtWidgets.QGraphicsItem.GraphicsItemFlags?1(int) +QtWidgets.QGraphicsItem.GraphicsItemFlags.__init__?1(self, int) +QtWidgets.QGraphicsItem.GraphicsItemFlags?1(QGraphicsItem.GraphicsItemFlags) +QtWidgets.QGraphicsItem.GraphicsItemFlags.__init__?1(self, QGraphicsItem.GraphicsItemFlags) +QtWidgets.QAbstractGraphicsShapeItem?1(QGraphicsItem parent=None) +QtWidgets.QAbstractGraphicsShapeItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QAbstractGraphicsShapeItem.pen?4() -> QPen +QtWidgets.QAbstractGraphicsShapeItem.setPen?4(QPen) +QtWidgets.QAbstractGraphicsShapeItem.brush?4() -> QBrush +QtWidgets.QAbstractGraphicsShapeItem.setBrush?4(QBrush) +QtWidgets.QAbstractGraphicsShapeItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QAbstractGraphicsShapeItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsPathItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsPathItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsPathItem?1(QPainterPath, QGraphicsItem parent=None) +QtWidgets.QGraphicsPathItem.__init__?1(self, QPainterPath, QGraphicsItem parent=None) +QtWidgets.QGraphicsPathItem.path?4() -> QPainterPath +QtWidgets.QGraphicsPathItem.setPath?4(QPainterPath) +QtWidgets.QGraphicsPathItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsPathItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsPathItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsPathItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsPathItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsPathItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsPathItem.type?4() -> int +QtWidgets.QGraphicsRectItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsRectItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsRectItem?1(QRectF, QGraphicsItem parent=None) +QtWidgets.QGraphicsRectItem.__init__?1(self, QRectF, QGraphicsItem parent=None) +QtWidgets.QGraphicsRectItem?1(float, float, float, float, QGraphicsItem parent=None) +QtWidgets.QGraphicsRectItem.__init__?1(self, float, float, float, float, QGraphicsItem parent=None) +QtWidgets.QGraphicsRectItem.rect?4() -> QRectF +QtWidgets.QGraphicsRectItem.setRect?4(QRectF) +QtWidgets.QGraphicsRectItem.setRect?4(float, float, float, float) +QtWidgets.QGraphicsRectItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsRectItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsRectItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsRectItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsRectItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsRectItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsRectItem.type?4() -> int +QtWidgets.QGraphicsEllipseItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsEllipseItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsEllipseItem?1(QRectF, QGraphicsItem parent=None) +QtWidgets.QGraphicsEllipseItem.__init__?1(self, QRectF, QGraphicsItem parent=None) +QtWidgets.QGraphicsEllipseItem?1(float, float, float, float, QGraphicsItem parent=None) +QtWidgets.QGraphicsEllipseItem.__init__?1(self, float, float, float, float, QGraphicsItem parent=None) +QtWidgets.QGraphicsEllipseItem.rect?4() -> QRectF +QtWidgets.QGraphicsEllipseItem.setRect?4(QRectF) +QtWidgets.QGraphicsEllipseItem.setRect?4(float, float, float, float) +QtWidgets.QGraphicsEllipseItem.startAngle?4() -> int +QtWidgets.QGraphicsEllipseItem.setStartAngle?4(int) +QtWidgets.QGraphicsEllipseItem.spanAngle?4() -> int +QtWidgets.QGraphicsEllipseItem.setSpanAngle?4(int) +QtWidgets.QGraphicsEllipseItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsEllipseItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsEllipseItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsEllipseItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsEllipseItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsEllipseItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsEllipseItem.type?4() -> int +QtWidgets.QGraphicsPolygonItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsPolygonItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsPolygonItem?1(QPolygonF, QGraphicsItem parent=None) +QtWidgets.QGraphicsPolygonItem.__init__?1(self, QPolygonF, QGraphicsItem parent=None) +QtWidgets.QGraphicsPolygonItem.polygon?4() -> QPolygonF +QtWidgets.QGraphicsPolygonItem.setPolygon?4(QPolygonF) +QtWidgets.QGraphicsPolygonItem.fillRule?4() -> Qt.FillRule +QtWidgets.QGraphicsPolygonItem.setFillRule?4(Qt.FillRule) +QtWidgets.QGraphicsPolygonItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsPolygonItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsPolygonItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsPolygonItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsPolygonItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsPolygonItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsPolygonItem.type?4() -> int +QtWidgets.QGraphicsLineItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsLineItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsLineItem?1(QLineF, QGraphicsItem parent=None) +QtWidgets.QGraphicsLineItem.__init__?1(self, QLineF, QGraphicsItem parent=None) +QtWidgets.QGraphicsLineItem?1(float, float, float, float, QGraphicsItem parent=None) +QtWidgets.QGraphicsLineItem.__init__?1(self, float, float, float, float, QGraphicsItem parent=None) +QtWidgets.QGraphicsLineItem.pen?4() -> QPen +QtWidgets.QGraphicsLineItem.setPen?4(QPen) +QtWidgets.QGraphicsLineItem.line?4() -> QLineF +QtWidgets.QGraphicsLineItem.setLine?4(QLineF) +QtWidgets.QGraphicsLineItem.setLine?4(float, float, float, float) +QtWidgets.QGraphicsLineItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsLineItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsLineItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsLineItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsLineItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsLineItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsLineItem.type?4() -> int +QtWidgets.QGraphicsPixmapItem.ShapeMode?10 +QtWidgets.QGraphicsPixmapItem.ShapeMode.MaskShape?10 +QtWidgets.QGraphicsPixmapItem.ShapeMode.BoundingRectShape?10 +QtWidgets.QGraphicsPixmapItem.ShapeMode.HeuristicMaskShape?10 +QtWidgets.QGraphicsPixmapItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsPixmapItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsPixmapItem?1(QPixmap, QGraphicsItem parent=None) +QtWidgets.QGraphicsPixmapItem.__init__?1(self, QPixmap, QGraphicsItem parent=None) +QtWidgets.QGraphicsPixmapItem.pixmap?4() -> QPixmap +QtWidgets.QGraphicsPixmapItem.setPixmap?4(QPixmap) +QtWidgets.QGraphicsPixmapItem.transformationMode?4() -> Qt.TransformationMode +QtWidgets.QGraphicsPixmapItem.setTransformationMode?4(Qt.TransformationMode) +QtWidgets.QGraphicsPixmapItem.offset?4() -> QPointF +QtWidgets.QGraphicsPixmapItem.setOffset?4(QPointF) +QtWidgets.QGraphicsPixmapItem.setOffset?4(float, float) +QtWidgets.QGraphicsPixmapItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsPixmapItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsPixmapItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsPixmapItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget) +QtWidgets.QGraphicsPixmapItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsPixmapItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsPixmapItem.type?4() -> int +QtWidgets.QGraphicsPixmapItem.shapeMode?4() -> QGraphicsPixmapItem.ShapeMode +QtWidgets.QGraphicsPixmapItem.setShapeMode?4(QGraphicsPixmapItem.ShapeMode) +QtWidgets.QGraphicsSimpleTextItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsSimpleTextItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsSimpleTextItem?1(QString, QGraphicsItem parent=None) +QtWidgets.QGraphicsSimpleTextItem.__init__?1(self, QString, QGraphicsItem parent=None) +QtWidgets.QGraphicsSimpleTextItem.setText?4(QString) +QtWidgets.QGraphicsSimpleTextItem.text?4() -> QString +QtWidgets.QGraphicsSimpleTextItem.setFont?4(QFont) +QtWidgets.QGraphicsSimpleTextItem.font?4() -> QFont +QtWidgets.QGraphicsSimpleTextItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsSimpleTextItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsSimpleTextItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsSimpleTextItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget) +QtWidgets.QGraphicsSimpleTextItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsSimpleTextItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsSimpleTextItem.type?4() -> int +QtWidgets.QGraphicsItemGroup?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsItemGroup.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsItemGroup.addToGroup?4(QGraphicsItem) +QtWidgets.QGraphicsItemGroup.removeFromGroup?4(QGraphicsItem) +QtWidgets.QGraphicsItemGroup.boundingRect?4() -> QRectF +QtWidgets.QGraphicsItemGroup.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsItemGroup.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsItemGroup.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsItemGroup.type?4() -> int +QtWidgets.QGraphicsObject?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsObject.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsObject.grabGesture?4(Qt.GestureType, Qt.GestureFlags flags=Qt.GestureFlags()) +QtWidgets.QGraphicsObject.ungrabGesture?4(Qt.GestureType) +QtWidgets.QGraphicsObject.parentChanged?4() +QtWidgets.QGraphicsObject.opacityChanged?4() +QtWidgets.QGraphicsObject.visibleChanged?4() +QtWidgets.QGraphicsObject.enabledChanged?4() +QtWidgets.QGraphicsObject.xChanged?4() +QtWidgets.QGraphicsObject.yChanged?4() +QtWidgets.QGraphicsObject.zChanged?4() +QtWidgets.QGraphicsObject.rotationChanged?4() +QtWidgets.QGraphicsObject.scaleChanged?4() +QtWidgets.QGraphicsObject.updateMicroFocus?4() +QtWidgets.QGraphicsObject.event?4(QEvent) -> bool +QtWidgets.QGraphicsTextItem?1(QGraphicsItem parent=None) +QtWidgets.QGraphicsTextItem.__init__?1(self, QGraphicsItem parent=None) +QtWidgets.QGraphicsTextItem?1(QString, QGraphicsItem parent=None) +QtWidgets.QGraphicsTextItem.__init__?1(self, QString, QGraphicsItem parent=None) +QtWidgets.QGraphicsTextItem.toHtml?4() -> QString +QtWidgets.QGraphicsTextItem.setHtml?4(QString) +QtWidgets.QGraphicsTextItem.toPlainText?4() -> QString +QtWidgets.QGraphicsTextItem.setPlainText?4(QString) +QtWidgets.QGraphicsTextItem.font?4() -> QFont +QtWidgets.QGraphicsTextItem.setFont?4(QFont) +QtWidgets.QGraphicsTextItem.setDefaultTextColor?4(QColor) +QtWidgets.QGraphicsTextItem.defaultTextColor?4() -> QColor +QtWidgets.QGraphicsTextItem.boundingRect?4() -> QRectF +QtWidgets.QGraphicsTextItem.shape?4() -> QPainterPath +QtWidgets.QGraphicsTextItem.contains?4(QPointF) -> bool +QtWidgets.QGraphicsTextItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget) +QtWidgets.QGraphicsTextItem.isObscuredBy?4(QGraphicsItem) -> bool +QtWidgets.QGraphicsTextItem.opaqueArea?4() -> QPainterPath +QtWidgets.QGraphicsTextItem.type?4() -> int +QtWidgets.QGraphicsTextItem.setTextWidth?4(float) +QtWidgets.QGraphicsTextItem.textWidth?4() -> float +QtWidgets.QGraphicsTextItem.adjustSize?4() +QtWidgets.QGraphicsTextItem.setDocument?4(QTextDocument) +QtWidgets.QGraphicsTextItem.document?4() -> QTextDocument +QtWidgets.QGraphicsTextItem.setTextInteractionFlags?4(Qt.TextInteractionFlags) +QtWidgets.QGraphicsTextItem.textInteractionFlags?4() -> Qt.TextInteractionFlags +QtWidgets.QGraphicsTextItem.setTabChangesFocus?4(bool) +QtWidgets.QGraphicsTextItem.tabChangesFocus?4() -> bool +QtWidgets.QGraphicsTextItem.setOpenExternalLinks?4(bool) +QtWidgets.QGraphicsTextItem.openExternalLinks?4() -> bool +QtWidgets.QGraphicsTextItem.setTextCursor?4(QTextCursor) +QtWidgets.QGraphicsTextItem.textCursor?4() -> QTextCursor +QtWidgets.QGraphicsTextItem.linkActivated?4(QString) +QtWidgets.QGraphicsTextItem.linkHovered?4(QString) +QtWidgets.QGraphicsTextItem.sceneEvent?4(QEvent) -> bool +QtWidgets.QGraphicsTextItem.mousePressEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsTextItem.mouseMoveEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsTextItem.mouseReleaseEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsTextItem.mouseDoubleClickEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsTextItem.contextMenuEvent?4(QGraphicsSceneContextMenuEvent) +QtWidgets.QGraphicsTextItem.keyPressEvent?4(QKeyEvent) +QtWidgets.QGraphicsTextItem.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QGraphicsTextItem.focusInEvent?4(QFocusEvent) +QtWidgets.QGraphicsTextItem.focusOutEvent?4(QFocusEvent) +QtWidgets.QGraphicsTextItem.dragEnterEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsTextItem.dragLeaveEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsTextItem.dragMoveEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsTextItem.dropEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsTextItem.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QGraphicsTextItem.hoverEnterEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsTextItem.hoverMoveEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsTextItem.hoverLeaveEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsTextItem.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QGraphicsLinearLayout?1(QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsLinearLayout.__init__?1(self, QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsLinearLayout?1(Qt.Orientation, QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsLinearLayout.__init__?1(self, Qt.Orientation, QGraphicsLayoutItem parent=None) +QtWidgets.QGraphicsLinearLayout.setOrientation?4(Qt.Orientation) +QtWidgets.QGraphicsLinearLayout.orientation?4() -> Qt.Orientation +QtWidgets.QGraphicsLinearLayout.addItem?4(QGraphicsLayoutItem) +QtWidgets.QGraphicsLinearLayout.addStretch?4(int stretch=1) +QtWidgets.QGraphicsLinearLayout.insertItem?4(int, QGraphicsLayoutItem) +QtWidgets.QGraphicsLinearLayout.insertStretch?4(int, int stretch=1) +QtWidgets.QGraphicsLinearLayout.removeItem?4(QGraphicsLayoutItem) +QtWidgets.QGraphicsLinearLayout.removeAt?4(int) +QtWidgets.QGraphicsLinearLayout.setSpacing?4(float) +QtWidgets.QGraphicsLinearLayout.spacing?4() -> float +QtWidgets.QGraphicsLinearLayout.setItemSpacing?4(int, float) +QtWidgets.QGraphicsLinearLayout.itemSpacing?4(int) -> float +QtWidgets.QGraphicsLinearLayout.setStretchFactor?4(QGraphicsLayoutItem, int) +QtWidgets.QGraphicsLinearLayout.stretchFactor?4(QGraphicsLayoutItem) -> int +QtWidgets.QGraphicsLinearLayout.setAlignment?4(QGraphicsLayoutItem, Qt.Alignment) +QtWidgets.QGraphicsLinearLayout.alignment?4(QGraphicsLayoutItem) -> Qt.Alignment +QtWidgets.QGraphicsLinearLayout.setGeometry?4(QRectF) +QtWidgets.QGraphicsLinearLayout.count?4() -> int +QtWidgets.QGraphicsLinearLayout.itemAt?4(int) -> QGraphicsLayoutItem +QtWidgets.QGraphicsLinearLayout.invalidate?4() +QtWidgets.QGraphicsLinearLayout.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF +QtWidgets.QGraphicsWidget?1(QGraphicsItem parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QGraphicsWidget.__init__?1(self, QGraphicsItem parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QGraphicsWidget.layout?4() -> QGraphicsLayout +QtWidgets.QGraphicsWidget.setLayout?4(QGraphicsLayout) +QtWidgets.QGraphicsWidget.adjustSize?4() +QtWidgets.QGraphicsWidget.layoutDirection?4() -> Qt.LayoutDirection +QtWidgets.QGraphicsWidget.setLayoutDirection?4(Qt.LayoutDirection) +QtWidgets.QGraphicsWidget.unsetLayoutDirection?4() +QtWidgets.QGraphicsWidget.style?4() -> QStyle +QtWidgets.QGraphicsWidget.setStyle?4(QStyle) +QtWidgets.QGraphicsWidget.font?4() -> QFont +QtWidgets.QGraphicsWidget.setFont?4(QFont) +QtWidgets.QGraphicsWidget.palette?4() -> QPalette +QtWidgets.QGraphicsWidget.setPalette?4(QPalette) +QtWidgets.QGraphicsWidget.resize?4(QSizeF) +QtWidgets.QGraphicsWidget.resize?4(float, float) +QtWidgets.QGraphicsWidget.size?4() -> QSizeF +QtWidgets.QGraphicsWidget.setGeometry?4(QRectF) +QtWidgets.QGraphicsWidget.rect?4() -> QRectF +QtWidgets.QGraphicsWidget.setContentsMargins?4(QMarginsF) +QtWidgets.QGraphicsWidget.setContentsMargins?4(float, float, float, float) +QtWidgets.QGraphicsWidget.getContentsMargins?4() -> (float, float, float, float) +QtWidgets.QGraphicsWidget.setWindowFrameMargins?4(QMarginsF) +QtWidgets.QGraphicsWidget.setWindowFrameMargins?4(float, float, float, float) +QtWidgets.QGraphicsWidget.getWindowFrameMargins?4() -> (float, float, float, float) +QtWidgets.QGraphicsWidget.unsetWindowFrameMargins?4() +QtWidgets.QGraphicsWidget.windowFrameGeometry?4() -> QRectF +QtWidgets.QGraphicsWidget.windowFrameRect?4() -> QRectF +QtWidgets.QGraphicsWidget.windowFlags?4() -> Qt.WindowFlags +QtWidgets.QGraphicsWidget.windowType?4() -> Qt.WindowType +QtWidgets.QGraphicsWidget.setWindowFlags?4(Qt.WindowFlags) +QtWidgets.QGraphicsWidget.isActiveWindow?4() -> bool +QtWidgets.QGraphicsWidget.setWindowTitle?4(QString) +QtWidgets.QGraphicsWidget.windowTitle?4() -> QString +QtWidgets.QGraphicsWidget.focusPolicy?4() -> Qt.FocusPolicy +QtWidgets.QGraphicsWidget.setFocusPolicy?4(Qt.FocusPolicy) +QtWidgets.QGraphicsWidget.setTabOrder?4(QGraphicsWidget, QGraphicsWidget) +QtWidgets.QGraphicsWidget.focusWidget?4() -> QGraphicsWidget +QtWidgets.QGraphicsWidget.grabShortcut?4(QKeySequence, Qt.ShortcutContext context=Qt.WindowShortcut) -> int +QtWidgets.QGraphicsWidget.releaseShortcut?4(int) +QtWidgets.QGraphicsWidget.setShortcutEnabled?4(int, bool enabled=True) +QtWidgets.QGraphicsWidget.setShortcutAutoRepeat?4(int, bool enabled=True) +QtWidgets.QGraphicsWidget.addAction?4(QAction) +QtWidgets.QGraphicsWidget.addActions?4(unknown-type) +QtWidgets.QGraphicsWidget.insertAction?4(QAction, QAction) +QtWidgets.QGraphicsWidget.insertActions?4(QAction, unknown-type) +QtWidgets.QGraphicsWidget.removeAction?4(QAction) +QtWidgets.QGraphicsWidget.actions?4() -> unknown-type +QtWidgets.QGraphicsWidget.setAttribute?4(Qt.WidgetAttribute, bool on=True) +QtWidgets.QGraphicsWidget.testAttribute?4(Qt.WidgetAttribute) -> bool +QtWidgets.QGraphicsWidget.type?4() -> int +QtWidgets.QGraphicsWidget.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsWidget.paintWindowFrame?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtWidgets.QGraphicsWidget.boundingRect?4() -> QRectF +QtWidgets.QGraphicsWidget.shape?4() -> QPainterPath +QtWidgets.QGraphicsWidget.setGeometry?4(float, float, float, float) +QtWidgets.QGraphicsWidget.close?4() -> bool +QtWidgets.QGraphicsWidget.initStyleOption?4(QStyleOption) +QtWidgets.QGraphicsWidget.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF +QtWidgets.QGraphicsWidget.updateGeometry?4() +QtWidgets.QGraphicsWidget.itemChange?4(QGraphicsItem.GraphicsItemChange, QVariant) -> QVariant +QtWidgets.QGraphicsWidget.sceneEvent?4(QEvent) -> bool +QtWidgets.QGraphicsWidget.windowFrameEvent?4(QEvent) -> bool +QtWidgets.QGraphicsWidget.windowFrameSectionAt?4(QPointF) -> Qt.WindowFrameSection +QtWidgets.QGraphicsWidget.event?4(QEvent) -> bool +QtWidgets.QGraphicsWidget.changeEvent?4(QEvent) +QtWidgets.QGraphicsWidget.closeEvent?4(QCloseEvent) +QtWidgets.QGraphicsWidget.focusInEvent?4(QFocusEvent) +QtWidgets.QGraphicsWidget.focusNextPrevChild?4(bool) -> bool +QtWidgets.QGraphicsWidget.focusOutEvent?4(QFocusEvent) +QtWidgets.QGraphicsWidget.hideEvent?4(QHideEvent) +QtWidgets.QGraphicsWidget.moveEvent?4(QGraphicsSceneMoveEvent) +QtWidgets.QGraphicsWidget.polishEvent?4() +QtWidgets.QGraphicsWidget.resizeEvent?4(QGraphicsSceneResizeEvent) +QtWidgets.QGraphicsWidget.showEvent?4(QShowEvent) +QtWidgets.QGraphicsWidget.hoverMoveEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsWidget.hoverLeaveEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsWidget.grabMouseEvent?4(QEvent) +QtWidgets.QGraphicsWidget.ungrabMouseEvent?4(QEvent) +QtWidgets.QGraphicsWidget.grabKeyboardEvent?4(QEvent) +QtWidgets.QGraphicsWidget.ungrabKeyboardEvent?4(QEvent) +QtWidgets.QGraphicsWidget.autoFillBackground?4() -> bool +QtWidgets.QGraphicsWidget.setAutoFillBackground?4(bool) +QtWidgets.QGraphicsWidget.geometryChanged?4() +QtWidgets.QGraphicsProxyWidget?1(QGraphicsItem parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QGraphicsProxyWidget.__init__?1(self, QGraphicsItem parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QGraphicsProxyWidget.setWidget?4(QWidget) +QtWidgets.QGraphicsProxyWidget.widget?4() -> QWidget +QtWidgets.QGraphicsProxyWidget.subWidgetRect?4(QWidget) -> QRectF +QtWidgets.QGraphicsProxyWidget.setGeometry?4(QRectF) +QtWidgets.QGraphicsProxyWidget.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget) +QtWidgets.QGraphicsProxyWidget.type?4() -> int +QtWidgets.QGraphicsProxyWidget.createProxyForChildWidget?4(QWidget) -> QGraphicsProxyWidget +QtWidgets.QGraphicsProxyWidget.itemChange?4(QGraphicsItem.GraphicsItemChange, QVariant) -> QVariant +QtWidgets.QGraphicsProxyWidget.event?4(QEvent) -> bool +QtWidgets.QGraphicsProxyWidget.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QGraphicsProxyWidget.showEvent?4(QShowEvent) +QtWidgets.QGraphicsProxyWidget.hideEvent?4(QHideEvent) +QtWidgets.QGraphicsProxyWidget.contextMenuEvent?4(QGraphicsSceneContextMenuEvent) +QtWidgets.QGraphicsProxyWidget.hoverEnterEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsProxyWidget.hoverLeaveEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsProxyWidget.hoverMoveEvent?4(QGraphicsSceneHoverEvent) +QtWidgets.QGraphicsProxyWidget.grabMouseEvent?4(QEvent) +QtWidgets.QGraphicsProxyWidget.ungrabMouseEvent?4(QEvent) +QtWidgets.QGraphicsProxyWidget.mouseMoveEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsProxyWidget.mousePressEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsProxyWidget.mouseReleaseEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsProxyWidget.mouseDoubleClickEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsProxyWidget.wheelEvent?4(QGraphicsSceneWheelEvent) +QtWidgets.QGraphicsProxyWidget.keyPressEvent?4(QKeyEvent) +QtWidgets.QGraphicsProxyWidget.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QGraphicsProxyWidget.focusInEvent?4(QFocusEvent) +QtWidgets.QGraphicsProxyWidget.focusOutEvent?4(QFocusEvent) +QtWidgets.QGraphicsProxyWidget.focusNextPrevChild?4(bool) -> bool +QtWidgets.QGraphicsProxyWidget.sizeHint?4(Qt.SizeHint, QSizeF constraint=QSizeF()) -> QSizeF +QtWidgets.QGraphicsProxyWidget.resizeEvent?4(QGraphicsSceneResizeEvent) +QtWidgets.QGraphicsProxyWidget.dragEnterEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsProxyWidget.dragLeaveEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsProxyWidget.dragMoveEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsProxyWidget.dropEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsProxyWidget.newProxyWidget?4(QWidget) -> QGraphicsProxyWidget +QtWidgets.QGraphicsProxyWidget.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QGraphicsProxyWidget.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QGraphicsScene.SceneLayer?10 +QtWidgets.QGraphicsScene.SceneLayer.ItemLayer?10 +QtWidgets.QGraphicsScene.SceneLayer.BackgroundLayer?10 +QtWidgets.QGraphicsScene.SceneLayer.ForegroundLayer?10 +QtWidgets.QGraphicsScene.SceneLayer.AllLayers?10 +QtWidgets.QGraphicsScene.ItemIndexMethod?10 +QtWidgets.QGraphicsScene.ItemIndexMethod.BspTreeIndex?10 +QtWidgets.QGraphicsScene.ItemIndexMethod.NoIndex?10 +QtWidgets.QGraphicsScene?1(QObject parent=None) +QtWidgets.QGraphicsScene.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsScene?1(QRectF, QObject parent=None) +QtWidgets.QGraphicsScene.__init__?1(self, QRectF, QObject parent=None) +QtWidgets.QGraphicsScene?1(float, float, float, float, QObject parent=None) +QtWidgets.QGraphicsScene.__init__?1(self, float, float, float, float, QObject parent=None) +QtWidgets.QGraphicsScene.sceneRect?4() -> QRectF +QtWidgets.QGraphicsScene.width?4() -> float +QtWidgets.QGraphicsScene.height?4() -> float +QtWidgets.QGraphicsScene.setSceneRect?4(QRectF) +QtWidgets.QGraphicsScene.setSceneRect?4(float, float, float, float) +QtWidgets.QGraphicsScene.render?4(QPainter, QRectF target=QRectF(), QRectF source=QRectF(), Qt.AspectRatioMode mode=Qt.KeepAspectRatio) +QtWidgets.QGraphicsScene.itemIndexMethod?4() -> QGraphicsScene.ItemIndexMethod +QtWidgets.QGraphicsScene.setItemIndexMethod?4(QGraphicsScene.ItemIndexMethod) +QtWidgets.QGraphicsScene.itemsBoundingRect?4() -> QRectF +QtWidgets.QGraphicsScene.items?4(Qt.SortOrder order=Qt.DescendingOrder) -> unknown-type +QtWidgets.QGraphicsScene.items?4(QPointF, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, Qt.SortOrder order=Qt.DescendingOrder, QTransform deviceTransform=QTransform()) -> unknown-type +QtWidgets.QGraphicsScene.items?4(QRectF, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, Qt.SortOrder order=Qt.DescendingOrder, QTransform deviceTransform=QTransform()) -> unknown-type +QtWidgets.QGraphicsScene.items?4(QPolygonF, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, Qt.SortOrder order=Qt.DescendingOrder, QTransform deviceTransform=QTransform()) -> unknown-type +QtWidgets.QGraphicsScene.items?4(QPainterPath, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, Qt.SortOrder order=Qt.DescendingOrder, QTransform deviceTransform=QTransform()) -> unknown-type +QtWidgets.QGraphicsScene.items?4(float, float, float, float, Qt.ItemSelectionMode, Qt.SortOrder, QTransform deviceTransform=QTransform()) -> unknown-type +QtWidgets.QGraphicsScene.collidingItems?4(QGraphicsItem, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type +QtWidgets.QGraphicsScene.selectedItems?4() -> unknown-type +QtWidgets.QGraphicsScene.setSelectionArea?4(QPainterPath, QTransform) +QtWidgets.QGraphicsScene.setSelectionArea?4(QPainterPath, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, QTransform deviceTransform=QTransform()) +QtWidgets.QGraphicsScene.clearSelection?4() +QtWidgets.QGraphicsScene.createItemGroup?4(unknown-type) -> QGraphicsItemGroup +QtWidgets.QGraphicsScene.destroyItemGroup?4(QGraphicsItemGroup) +QtWidgets.QGraphicsScene.addItem?4(QGraphicsItem) +QtWidgets.QGraphicsScene.addEllipse?4(QRectF, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsEllipseItem +QtWidgets.QGraphicsScene.addEllipse?4(float, float, float, float, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsEllipseItem +QtWidgets.QGraphicsScene.addLine?4(QLineF, QPen pen=QPen()) -> QGraphicsLineItem +QtWidgets.QGraphicsScene.addLine?4(float, float, float, float, QPen pen=QPen()) -> QGraphicsLineItem +QtWidgets.QGraphicsScene.addPath?4(QPainterPath, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsPathItem +QtWidgets.QGraphicsScene.addPixmap?4(QPixmap) -> QGraphicsPixmapItem +QtWidgets.QGraphicsScene.addPolygon?4(QPolygonF, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsPolygonItem +QtWidgets.QGraphicsScene.addRect?4(QRectF, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsRectItem +QtWidgets.QGraphicsScene.addRect?4(float, float, float, float, QPen pen=QPen(), QBrush brush=QBrush()) -> QGraphicsRectItem +QtWidgets.QGraphicsScene.addSimpleText?4(QString, QFont font=QFont()) -> QGraphicsSimpleTextItem +QtWidgets.QGraphicsScene.addText?4(QString, QFont font=QFont()) -> QGraphicsTextItem +QtWidgets.QGraphicsScene.removeItem?4(QGraphicsItem) +QtWidgets.QGraphicsScene.focusItem?4() -> QGraphicsItem +QtWidgets.QGraphicsScene.setFocusItem?4(QGraphicsItem, Qt.FocusReason focusReason=Qt.OtherFocusReason) +QtWidgets.QGraphicsScene.hasFocus?4() -> bool +QtWidgets.QGraphicsScene.setFocus?4(Qt.FocusReason focusReason=Qt.OtherFocusReason) +QtWidgets.QGraphicsScene.clearFocus?4() +QtWidgets.QGraphicsScene.mouseGrabberItem?4() -> QGraphicsItem +QtWidgets.QGraphicsScene.backgroundBrush?4() -> QBrush +QtWidgets.QGraphicsScene.setBackgroundBrush?4(QBrush) +QtWidgets.QGraphicsScene.foregroundBrush?4() -> QBrush +QtWidgets.QGraphicsScene.setForegroundBrush?4(QBrush) +QtWidgets.QGraphicsScene.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QGraphicsScene.views?4() -> unknown-type +QtWidgets.QGraphicsScene.advance?4() +QtWidgets.QGraphicsScene.update?4(QRectF rect=QRectF()) +QtWidgets.QGraphicsScene.invalidate?4(QRectF rect=QRectF(), QGraphicsScene.SceneLayers layers=QGraphicsScene.AllLayers) +QtWidgets.QGraphicsScene.clear?4() +QtWidgets.QGraphicsScene.changed?4(unknown-type) +QtWidgets.QGraphicsScene.sceneRectChanged?4(QRectF) +QtWidgets.QGraphicsScene.selectionChanged?4() +QtWidgets.QGraphicsScene.event?4(QEvent) -> bool +QtWidgets.QGraphicsScene.contextMenuEvent?4(QGraphicsSceneContextMenuEvent) +QtWidgets.QGraphicsScene.dragEnterEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsScene.dragMoveEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsScene.dragLeaveEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsScene.dropEvent?4(QGraphicsSceneDragDropEvent) +QtWidgets.QGraphicsScene.focusInEvent?4(QFocusEvent) +QtWidgets.QGraphicsScene.focusOutEvent?4(QFocusEvent) +QtWidgets.QGraphicsScene.helpEvent?4(QGraphicsSceneHelpEvent) +QtWidgets.QGraphicsScene.keyPressEvent?4(QKeyEvent) +QtWidgets.QGraphicsScene.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QGraphicsScene.mousePressEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsScene.mouseMoveEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsScene.mouseReleaseEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsScene.mouseDoubleClickEvent?4(QGraphicsSceneMouseEvent) +QtWidgets.QGraphicsScene.wheelEvent?4(QGraphicsSceneWheelEvent) +QtWidgets.QGraphicsScene.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QGraphicsScene.drawBackground?4(QPainter, QRectF) +QtWidgets.QGraphicsScene.drawForeground?4(QPainter, QRectF) +QtWidgets.QGraphicsScene.bspTreeDepth?4() -> int +QtWidgets.QGraphicsScene.setBspTreeDepth?4(int) +QtWidgets.QGraphicsScene.selectionArea?4() -> QPainterPath +QtWidgets.QGraphicsScene.update?4(float, float, float, float) +QtWidgets.QGraphicsScene.addWidget?4(QWidget, Qt.WindowFlags flags=Qt.WindowFlags()) -> QGraphicsProxyWidget +QtWidgets.QGraphicsScene.style?4() -> QStyle +QtWidgets.QGraphicsScene.setStyle?4(QStyle) +QtWidgets.QGraphicsScene.font?4() -> QFont +QtWidgets.QGraphicsScene.setFont?4(QFont) +QtWidgets.QGraphicsScene.palette?4() -> QPalette +QtWidgets.QGraphicsScene.setPalette?4(QPalette) +QtWidgets.QGraphicsScene.activeWindow?4() -> QGraphicsWidget +QtWidgets.QGraphicsScene.setActiveWindow?4(QGraphicsWidget) +QtWidgets.QGraphicsScene.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QGraphicsScene.focusNextPrevChild?4(bool) -> bool +QtWidgets.QGraphicsScene.setStickyFocus?4(bool) +QtWidgets.QGraphicsScene.stickyFocus?4() -> bool +QtWidgets.QGraphicsScene.itemAt?4(QPointF, QTransform) -> QGraphicsItem +QtWidgets.QGraphicsScene.itemAt?4(float, float, QTransform) -> QGraphicsItem +QtWidgets.QGraphicsScene.isActive?4() -> bool +QtWidgets.QGraphicsScene.activePanel?4() -> QGraphicsItem +QtWidgets.QGraphicsScene.setActivePanel?4(QGraphicsItem) +QtWidgets.QGraphicsScene.sendEvent?4(QGraphicsItem, QEvent) -> bool +QtWidgets.QGraphicsScene.invalidate?4(float, float, float, float, QGraphicsScene.SceneLayers layers=QGraphicsScene.AllLayers) +QtWidgets.QGraphicsScene.minimumRenderSize?4() -> float +QtWidgets.QGraphicsScene.setMinimumRenderSize?4(float) +QtWidgets.QGraphicsScene.focusItemChanged?4(QGraphicsItem, QGraphicsItem, Qt.FocusReason) +QtWidgets.QGraphicsScene.setSelectionArea?4(QPainterPath, Qt.ItemSelectionOperation, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape, QTransform deviceTransform=QTransform()) +QtWidgets.QGraphicsScene.focusOnTouch?4() -> bool +QtWidgets.QGraphicsScene.setFocusOnTouch?4(bool) +QtWidgets.QGraphicsScene.SceneLayers?1() +QtWidgets.QGraphicsScene.SceneLayers.__init__?1(self) +QtWidgets.QGraphicsScene.SceneLayers?1(int) +QtWidgets.QGraphicsScene.SceneLayers.__init__?1(self, int) +QtWidgets.QGraphicsScene.SceneLayers?1(QGraphicsScene.SceneLayers) +QtWidgets.QGraphicsScene.SceneLayers.__init__?1(self, QGraphicsScene.SceneLayers) +QtWidgets.QGraphicsSceneEvent.widget?4() -> QWidget +QtWidgets.QGraphicsSceneMouseEvent.pos?4() -> QPointF +QtWidgets.QGraphicsSceneMouseEvent.scenePos?4() -> QPointF +QtWidgets.QGraphicsSceneMouseEvent.screenPos?4() -> QPoint +QtWidgets.QGraphicsSceneMouseEvent.buttonDownPos?4(Qt.MouseButton) -> QPointF +QtWidgets.QGraphicsSceneMouseEvent.buttonDownScenePos?4(Qt.MouseButton) -> QPointF +QtWidgets.QGraphicsSceneMouseEvent.buttonDownScreenPos?4(Qt.MouseButton) -> QPoint +QtWidgets.QGraphicsSceneMouseEvent.lastPos?4() -> QPointF +QtWidgets.QGraphicsSceneMouseEvent.lastScenePos?4() -> QPointF +QtWidgets.QGraphicsSceneMouseEvent.lastScreenPos?4() -> QPoint +QtWidgets.QGraphicsSceneMouseEvent.buttons?4() -> Qt.MouseButtons +QtWidgets.QGraphicsSceneMouseEvent.button?4() -> Qt.MouseButton +QtWidgets.QGraphicsSceneMouseEvent.modifiers?4() -> Qt.KeyboardModifiers +QtWidgets.QGraphicsSceneMouseEvent.source?4() -> Qt.MouseEventSource +QtWidgets.QGraphicsSceneMouseEvent.flags?4() -> Qt.MouseEventFlags +QtWidgets.QGraphicsSceneWheelEvent.pos?4() -> QPointF +QtWidgets.QGraphicsSceneWheelEvent.scenePos?4() -> QPointF +QtWidgets.QGraphicsSceneWheelEvent.screenPos?4() -> QPoint +QtWidgets.QGraphicsSceneWheelEvent.buttons?4() -> Qt.MouseButtons +QtWidgets.QGraphicsSceneWheelEvent.modifiers?4() -> Qt.KeyboardModifiers +QtWidgets.QGraphicsSceneWheelEvent.delta?4() -> int +QtWidgets.QGraphicsSceneWheelEvent.orientation?4() -> Qt.Orientation +QtWidgets.QGraphicsSceneContextMenuEvent.Reason?10 +QtWidgets.QGraphicsSceneContextMenuEvent.Reason.Mouse?10 +QtWidgets.QGraphicsSceneContextMenuEvent.Reason.Keyboard?10 +QtWidgets.QGraphicsSceneContextMenuEvent.Reason.Other?10 +QtWidgets.QGraphicsSceneContextMenuEvent.pos?4() -> QPointF +QtWidgets.QGraphicsSceneContextMenuEvent.scenePos?4() -> QPointF +QtWidgets.QGraphicsSceneContextMenuEvent.screenPos?4() -> QPoint +QtWidgets.QGraphicsSceneContextMenuEvent.modifiers?4() -> Qt.KeyboardModifiers +QtWidgets.QGraphicsSceneContextMenuEvent.reason?4() -> QGraphicsSceneContextMenuEvent.Reason +QtWidgets.QGraphicsSceneHoverEvent.pos?4() -> QPointF +QtWidgets.QGraphicsSceneHoverEvent.scenePos?4() -> QPointF +QtWidgets.QGraphicsSceneHoverEvent.screenPos?4() -> QPoint +QtWidgets.QGraphicsSceneHoverEvent.lastPos?4() -> QPointF +QtWidgets.QGraphicsSceneHoverEvent.lastScenePos?4() -> QPointF +QtWidgets.QGraphicsSceneHoverEvent.lastScreenPos?4() -> QPoint +QtWidgets.QGraphicsSceneHoverEvent.modifiers?4() -> Qt.KeyboardModifiers +QtWidgets.QGraphicsSceneHelpEvent.scenePos?4() -> QPointF +QtWidgets.QGraphicsSceneHelpEvent.screenPos?4() -> QPoint +QtWidgets.QGraphicsSceneDragDropEvent.pos?4() -> QPointF +QtWidgets.QGraphicsSceneDragDropEvent.scenePos?4() -> QPointF +QtWidgets.QGraphicsSceneDragDropEvent.screenPos?4() -> QPoint +QtWidgets.QGraphicsSceneDragDropEvent.buttons?4() -> Qt.MouseButtons +QtWidgets.QGraphicsSceneDragDropEvent.modifiers?4() -> Qt.KeyboardModifiers +QtWidgets.QGraphicsSceneDragDropEvent.possibleActions?4() -> Qt.DropActions +QtWidgets.QGraphicsSceneDragDropEvent.proposedAction?4() -> Qt.DropAction +QtWidgets.QGraphicsSceneDragDropEvent.acceptProposedAction?4() +QtWidgets.QGraphicsSceneDragDropEvent.dropAction?4() -> Qt.DropAction +QtWidgets.QGraphicsSceneDragDropEvent.setDropAction?4(Qt.DropAction) +QtWidgets.QGraphicsSceneDragDropEvent.source?4() -> QWidget +QtWidgets.QGraphicsSceneDragDropEvent.mimeData?4() -> QMimeData +QtWidgets.QGraphicsSceneResizeEvent?1() +QtWidgets.QGraphicsSceneResizeEvent.__init__?1(self) +QtWidgets.QGraphicsSceneResizeEvent.oldSize?4() -> QSizeF +QtWidgets.QGraphicsSceneResizeEvent.newSize?4() -> QSizeF +QtWidgets.QGraphicsSceneMoveEvent?1() +QtWidgets.QGraphicsSceneMoveEvent.__init__?1(self) +QtWidgets.QGraphicsSceneMoveEvent.oldPos?4() -> QPointF +QtWidgets.QGraphicsSceneMoveEvent.newPos?4() -> QPointF +QtWidgets.QGraphicsTransform?1(QObject parent=None) +QtWidgets.QGraphicsTransform.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsTransform.applyTo?4(QMatrix4x4) +QtWidgets.QGraphicsTransform.update?4() +QtWidgets.QGraphicsScale?1(QObject parent=None) +QtWidgets.QGraphicsScale.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsScale.origin?4() -> QVector3D +QtWidgets.QGraphicsScale.setOrigin?4(QVector3D) +QtWidgets.QGraphicsScale.xScale?4() -> float +QtWidgets.QGraphicsScale.setXScale?4(float) +QtWidgets.QGraphicsScale.yScale?4() -> float +QtWidgets.QGraphicsScale.setYScale?4(float) +QtWidgets.QGraphicsScale.zScale?4() -> float +QtWidgets.QGraphicsScale.setZScale?4(float) +QtWidgets.QGraphicsScale.applyTo?4(QMatrix4x4) +QtWidgets.QGraphicsScale.originChanged?4() +QtWidgets.QGraphicsScale.scaleChanged?4() +QtWidgets.QGraphicsScale.xScaleChanged?4() +QtWidgets.QGraphicsScale.yScaleChanged?4() +QtWidgets.QGraphicsScale.zScaleChanged?4() +QtWidgets.QGraphicsRotation?1(QObject parent=None) +QtWidgets.QGraphicsRotation.__init__?1(self, QObject parent=None) +QtWidgets.QGraphicsRotation.origin?4() -> QVector3D +QtWidgets.QGraphicsRotation.setOrigin?4(QVector3D) +QtWidgets.QGraphicsRotation.angle?4() -> float +QtWidgets.QGraphicsRotation.setAngle?4(float) +QtWidgets.QGraphicsRotation.axis?4() -> QVector3D +QtWidgets.QGraphicsRotation.setAxis?4(QVector3D) +QtWidgets.QGraphicsRotation.setAxis?4(Qt.Axis) +QtWidgets.QGraphicsRotation.applyTo?4(QMatrix4x4) +QtWidgets.QGraphicsRotation.originChanged?4() +QtWidgets.QGraphicsRotation.angleChanged?4() +QtWidgets.QGraphicsRotation.axisChanged?4() +QtWidgets.QGraphicsView.OptimizationFlag?10 +QtWidgets.QGraphicsView.OptimizationFlag.DontClipPainter?10 +QtWidgets.QGraphicsView.OptimizationFlag.DontSavePainterState?10 +QtWidgets.QGraphicsView.OptimizationFlag.DontAdjustForAntialiasing?10 +QtWidgets.QGraphicsView.ViewportUpdateMode?10 +QtWidgets.QGraphicsView.ViewportUpdateMode.FullViewportUpdate?10 +QtWidgets.QGraphicsView.ViewportUpdateMode.MinimalViewportUpdate?10 +QtWidgets.QGraphicsView.ViewportUpdateMode.SmartViewportUpdate?10 +QtWidgets.QGraphicsView.ViewportUpdateMode.BoundingRectViewportUpdate?10 +QtWidgets.QGraphicsView.ViewportUpdateMode.NoViewportUpdate?10 +QtWidgets.QGraphicsView.ViewportAnchor?10 +QtWidgets.QGraphicsView.ViewportAnchor.NoAnchor?10 +QtWidgets.QGraphicsView.ViewportAnchor.AnchorViewCenter?10 +QtWidgets.QGraphicsView.ViewportAnchor.AnchorUnderMouse?10 +QtWidgets.QGraphicsView.DragMode?10 +QtWidgets.QGraphicsView.DragMode.NoDrag?10 +QtWidgets.QGraphicsView.DragMode.ScrollHandDrag?10 +QtWidgets.QGraphicsView.DragMode.RubberBandDrag?10 +QtWidgets.QGraphicsView.CacheModeFlag?10 +QtWidgets.QGraphicsView.CacheModeFlag.CacheNone?10 +QtWidgets.QGraphicsView.CacheModeFlag.CacheBackground?10 +QtWidgets.QGraphicsView?1(QWidget parent=None) +QtWidgets.QGraphicsView.__init__?1(self, QWidget parent=None) +QtWidgets.QGraphicsView?1(QGraphicsScene, QWidget parent=None) +QtWidgets.QGraphicsView.__init__?1(self, QGraphicsScene, QWidget parent=None) +QtWidgets.QGraphicsView.sizeHint?4() -> QSize +QtWidgets.QGraphicsView.renderHints?4() -> QPainter.RenderHints +QtWidgets.QGraphicsView.setRenderHint?4(QPainter.RenderHint, bool on=True) +QtWidgets.QGraphicsView.setRenderHints?4(QPainter.RenderHints) +QtWidgets.QGraphicsView.alignment?4() -> Qt.Alignment +QtWidgets.QGraphicsView.setAlignment?4(Qt.Alignment) +QtWidgets.QGraphicsView.transformationAnchor?4() -> QGraphicsView.ViewportAnchor +QtWidgets.QGraphicsView.setTransformationAnchor?4(QGraphicsView.ViewportAnchor) +QtWidgets.QGraphicsView.resizeAnchor?4() -> QGraphicsView.ViewportAnchor +QtWidgets.QGraphicsView.setResizeAnchor?4(QGraphicsView.ViewportAnchor) +QtWidgets.QGraphicsView.dragMode?4() -> QGraphicsView.DragMode +QtWidgets.QGraphicsView.setDragMode?4(QGraphicsView.DragMode) +QtWidgets.QGraphicsView.cacheMode?4() -> QGraphicsView.CacheMode +QtWidgets.QGraphicsView.setCacheMode?4(QGraphicsView.CacheMode) +QtWidgets.QGraphicsView.resetCachedContent?4() +QtWidgets.QGraphicsView.isInteractive?4() -> bool +QtWidgets.QGraphicsView.setInteractive?4(bool) +QtWidgets.QGraphicsView.scene?4() -> QGraphicsScene +QtWidgets.QGraphicsView.setScene?4(QGraphicsScene) +QtWidgets.QGraphicsView.sceneRect?4() -> QRectF +QtWidgets.QGraphicsView.setSceneRect?4(QRectF) +QtWidgets.QGraphicsView.rotate?4(float) +QtWidgets.QGraphicsView.scale?4(float, float) +QtWidgets.QGraphicsView.shear?4(float, float) +QtWidgets.QGraphicsView.translate?4(float, float) +QtWidgets.QGraphicsView.centerOn?4(QPointF) +QtWidgets.QGraphicsView.centerOn?4(QGraphicsItem) +QtWidgets.QGraphicsView.ensureVisible?4(QRectF, int xMargin=50, int yMargin=50) +QtWidgets.QGraphicsView.ensureVisible?4(QGraphicsItem, int xMargin=50, int yMargin=50) +QtWidgets.QGraphicsView.fitInView?4(QRectF, Qt.AspectRatioMode mode=Qt.IgnoreAspectRatio) +QtWidgets.QGraphicsView.fitInView?4(QGraphicsItem, Qt.AspectRatioMode mode=Qt.IgnoreAspectRatio) +QtWidgets.QGraphicsView.render?4(QPainter, QRectF target=QRectF(), QRect source=QRect(), Qt.AspectRatioMode mode=Qt.KeepAspectRatio) +QtWidgets.QGraphicsView.items?4() -> unknown-type +QtWidgets.QGraphicsView.items?4(QPoint) -> unknown-type +QtWidgets.QGraphicsView.items?4(int, int) -> unknown-type +QtWidgets.QGraphicsView.items?4(int, int, int, int, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type +QtWidgets.QGraphicsView.items?4(QRect, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type +QtWidgets.QGraphicsView.items?4(QPolygon, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type +QtWidgets.QGraphicsView.items?4(QPainterPath, Qt.ItemSelectionMode mode=Qt.IntersectsItemShape) -> unknown-type +QtWidgets.QGraphicsView.itemAt?4(QPoint) -> QGraphicsItem +QtWidgets.QGraphicsView.mapToScene?4(QPoint) -> QPointF +QtWidgets.QGraphicsView.mapToScene?4(QRect) -> QPolygonF +QtWidgets.QGraphicsView.mapToScene?4(QPolygon) -> QPolygonF +QtWidgets.QGraphicsView.mapToScene?4(QPainterPath) -> QPainterPath +QtWidgets.QGraphicsView.mapFromScene?4(QPointF) -> QPoint +QtWidgets.QGraphicsView.mapFromScene?4(QRectF) -> QPolygon +QtWidgets.QGraphicsView.mapFromScene?4(QPolygonF) -> QPolygon +QtWidgets.QGraphicsView.mapFromScene?4(QPainterPath) -> QPainterPath +QtWidgets.QGraphicsView.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QGraphicsView.backgroundBrush?4() -> QBrush +QtWidgets.QGraphicsView.setBackgroundBrush?4(QBrush) +QtWidgets.QGraphicsView.foregroundBrush?4() -> QBrush +QtWidgets.QGraphicsView.setForegroundBrush?4(QBrush) +QtWidgets.QGraphicsView.invalidateScene?4(QRectF rect=QRectF(), QGraphicsScene.SceneLayers layers=QGraphicsScene.AllLayers) +QtWidgets.QGraphicsView.updateScene?4(unknown-type) +QtWidgets.QGraphicsView.updateSceneRect?4(QRectF) +QtWidgets.QGraphicsView.setupViewport?4(QWidget) +QtWidgets.QGraphicsView.event?4(QEvent) -> bool +QtWidgets.QGraphicsView.viewportEvent?4(QEvent) -> bool +QtWidgets.QGraphicsView.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QGraphicsView.dragEnterEvent?4(QDragEnterEvent) +QtWidgets.QGraphicsView.dragLeaveEvent?4(QDragLeaveEvent) +QtWidgets.QGraphicsView.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QGraphicsView.dropEvent?4(QDropEvent) +QtWidgets.QGraphicsView.focusInEvent?4(QFocusEvent) +QtWidgets.QGraphicsView.focusOutEvent?4(QFocusEvent) +QtWidgets.QGraphicsView.focusNextPrevChild?4(bool) -> bool +QtWidgets.QGraphicsView.keyPressEvent?4(QKeyEvent) +QtWidgets.QGraphicsView.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QGraphicsView.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QGraphicsView.mousePressEvent?4(QMouseEvent) +QtWidgets.QGraphicsView.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QGraphicsView.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QGraphicsView.wheelEvent?4(QWheelEvent) +QtWidgets.QGraphicsView.paintEvent?4(QPaintEvent) +QtWidgets.QGraphicsView.resizeEvent?4(QResizeEvent) +QtWidgets.QGraphicsView.scrollContentsBy?4(int, int) +QtWidgets.QGraphicsView.showEvent?4(QShowEvent) +QtWidgets.QGraphicsView.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QGraphicsView.drawBackground?4(QPainter, QRectF) +QtWidgets.QGraphicsView.drawForeground?4(QPainter, QRectF) +QtWidgets.QGraphicsView.setSceneRect?4(float, float, float, float) +QtWidgets.QGraphicsView.centerOn?4(float, float) +QtWidgets.QGraphicsView.ensureVisible?4(float, float, float, float, int xMargin=50, int yMargin=50) +QtWidgets.QGraphicsView.fitInView?4(float, float, float, float, Qt.AspectRatioMode mode=Qt.IgnoreAspectRatio) +QtWidgets.QGraphicsView.itemAt?4(int, int) -> QGraphicsItem +QtWidgets.QGraphicsView.mapToScene?4(int, int) -> QPointF +QtWidgets.QGraphicsView.mapToScene?4(int, int, int, int) -> QPolygonF +QtWidgets.QGraphicsView.mapFromScene?4(float, float) -> QPoint +QtWidgets.QGraphicsView.mapFromScene?4(float, float, float, float) -> QPolygon +QtWidgets.QGraphicsView.viewportUpdateMode?4() -> QGraphicsView.ViewportUpdateMode +QtWidgets.QGraphicsView.setViewportUpdateMode?4(QGraphicsView.ViewportUpdateMode) +QtWidgets.QGraphicsView.optimizationFlags?4() -> QGraphicsView.OptimizationFlags +QtWidgets.QGraphicsView.setOptimizationFlag?4(QGraphicsView.OptimizationFlag, bool enabled=True) +QtWidgets.QGraphicsView.setOptimizationFlags?4(QGraphicsView.OptimizationFlags) +QtWidgets.QGraphicsView.rubberBandSelectionMode?4() -> Qt.ItemSelectionMode +QtWidgets.QGraphicsView.setRubberBandSelectionMode?4(Qt.ItemSelectionMode) +QtWidgets.QGraphicsView.transform?4() -> QTransform +QtWidgets.QGraphicsView.viewportTransform?4() -> QTransform +QtWidgets.QGraphicsView.setTransform?4(QTransform, bool combine=False) +QtWidgets.QGraphicsView.resetTransform?4() +QtWidgets.QGraphicsView.isTransformed?4() -> bool +QtWidgets.QGraphicsView.rubberBandRect?4() -> QRect +QtWidgets.QGraphicsView.rubberBandChanged?4(QRect, QPointF, QPointF) +QtWidgets.QGraphicsView.CacheMode?1() +QtWidgets.QGraphicsView.CacheMode.__init__?1(self) +QtWidgets.QGraphicsView.CacheMode?1(int) +QtWidgets.QGraphicsView.CacheMode.__init__?1(self, int) +QtWidgets.QGraphicsView.CacheMode?1(QGraphicsView.CacheMode) +QtWidgets.QGraphicsView.CacheMode.__init__?1(self, QGraphicsView.CacheMode) +QtWidgets.QGraphicsView.OptimizationFlags?1() +QtWidgets.QGraphicsView.OptimizationFlags.__init__?1(self) +QtWidgets.QGraphicsView.OptimizationFlags?1(int) +QtWidgets.QGraphicsView.OptimizationFlags.__init__?1(self, int) +QtWidgets.QGraphicsView.OptimizationFlags?1(QGraphicsView.OptimizationFlags) +QtWidgets.QGraphicsView.OptimizationFlags.__init__?1(self, QGraphicsView.OptimizationFlags) +QtWidgets.QGridLayout?1(QWidget) +QtWidgets.QGridLayout.__init__?1(self, QWidget) +QtWidgets.QGridLayout?1() +QtWidgets.QGridLayout.__init__?1(self) +QtWidgets.QGridLayout.sizeHint?4() -> QSize +QtWidgets.QGridLayout.minimumSize?4() -> QSize +QtWidgets.QGridLayout.maximumSize?4() -> QSize +QtWidgets.QGridLayout.setRowStretch?4(int, int) +QtWidgets.QGridLayout.setColumnStretch?4(int, int) +QtWidgets.QGridLayout.rowStretch?4(int) -> int +QtWidgets.QGridLayout.columnStretch?4(int) -> int +QtWidgets.QGridLayout.setRowMinimumHeight?4(int, int) +QtWidgets.QGridLayout.setColumnMinimumWidth?4(int, int) +QtWidgets.QGridLayout.rowMinimumHeight?4(int) -> int +QtWidgets.QGridLayout.columnMinimumWidth?4(int) -> int +QtWidgets.QGridLayout.columnCount?4() -> int +QtWidgets.QGridLayout.rowCount?4() -> int +QtWidgets.QGridLayout.cellRect?4(int, int) -> QRect +QtWidgets.QGridLayout.hasHeightForWidth?4() -> bool +QtWidgets.QGridLayout.heightForWidth?4(int) -> int +QtWidgets.QGridLayout.minimumHeightForWidth?4(int) -> int +QtWidgets.QGridLayout.expandingDirections?4() -> Qt.Orientations +QtWidgets.QGridLayout.invalidate?4() +QtWidgets.QGridLayout.addWidget?4(QWidget) +QtWidgets.QGridLayout.addWidget?4(QWidget, int, int, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QGridLayout.addWidget?4(QWidget, int, int, int, int, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QGridLayout.addLayout?4(QLayout, int, int, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QGridLayout.addLayout?4(QLayout, int, int, int, int, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QGridLayout.setOriginCorner?4(Qt.Corner) +QtWidgets.QGridLayout.originCorner?4() -> Qt.Corner +QtWidgets.QGridLayout.itemAt?4(int) -> QLayoutItem +QtWidgets.QGridLayout.takeAt?4(int) -> QLayoutItem +QtWidgets.QGridLayout.count?4() -> int +QtWidgets.QGridLayout.setGeometry?4(QRect) +QtWidgets.QGridLayout.addItem?4(QLayoutItem, int, int, int rowSpan=1, int columnSpan=1, Qt.Alignment alignment=Qt.Alignment()) +QtWidgets.QGridLayout.setDefaultPositioning?4(int, Qt.Orientation) +QtWidgets.QGridLayout.getItemPosition?4(int) -> (int, int, int, int) +QtWidgets.QGridLayout.setHorizontalSpacing?4(int) +QtWidgets.QGridLayout.horizontalSpacing?4() -> int +QtWidgets.QGridLayout.setVerticalSpacing?4(int) +QtWidgets.QGridLayout.verticalSpacing?4() -> int +QtWidgets.QGridLayout.setSpacing?4(int) +QtWidgets.QGridLayout.spacing?4() -> int +QtWidgets.QGridLayout.itemAtPosition?4(int, int) -> QLayoutItem +QtWidgets.QGridLayout.addItem?4(QLayoutItem) +QtWidgets.QGroupBox?1(QWidget parent=None) +QtWidgets.QGroupBox.__init__?1(self, QWidget parent=None) +QtWidgets.QGroupBox?1(QString, QWidget parent=None) +QtWidgets.QGroupBox.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QGroupBox.title?4() -> QString +QtWidgets.QGroupBox.setTitle?4(QString) +QtWidgets.QGroupBox.alignment?4() -> Qt.Alignment +QtWidgets.QGroupBox.setAlignment?4(int) +QtWidgets.QGroupBox.minimumSizeHint?4() -> QSize +QtWidgets.QGroupBox.isFlat?4() -> bool +QtWidgets.QGroupBox.setFlat?4(bool) +QtWidgets.QGroupBox.isCheckable?4() -> bool +QtWidgets.QGroupBox.setCheckable?4(bool) +QtWidgets.QGroupBox.isChecked?4() -> bool +QtWidgets.QGroupBox.setChecked?4(bool) +QtWidgets.QGroupBox.clicked?4(bool checked=False) +QtWidgets.QGroupBox.toggled?4(bool) +QtWidgets.QGroupBox.initStyleOption?4(QStyleOptionGroupBox) +QtWidgets.QGroupBox.event?4(QEvent) -> bool +QtWidgets.QGroupBox.childEvent?4(QChildEvent) +QtWidgets.QGroupBox.resizeEvent?4(QResizeEvent) +QtWidgets.QGroupBox.paintEvent?4(QPaintEvent) +QtWidgets.QGroupBox.focusInEvent?4(QFocusEvent) +QtWidgets.QGroupBox.changeEvent?4(QEvent) +QtWidgets.QGroupBox.mousePressEvent?4(QMouseEvent) +QtWidgets.QGroupBox.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QGroupBox.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QHeaderView.ResizeMode?10 +QtWidgets.QHeaderView.ResizeMode.Interactive?10 +QtWidgets.QHeaderView.ResizeMode.Fixed?10 +QtWidgets.QHeaderView.ResizeMode.Stretch?10 +QtWidgets.QHeaderView.ResizeMode.ResizeToContents?10 +QtWidgets.QHeaderView.ResizeMode.Custom?10 +QtWidgets.QHeaderView?1(Qt.Orientation, QWidget parent=None) +QtWidgets.QHeaderView.__init__?1(self, Qt.Orientation, QWidget parent=None) +QtWidgets.QHeaderView.setModel?4(QAbstractItemModel) +QtWidgets.QHeaderView.orientation?4() -> Qt.Orientation +QtWidgets.QHeaderView.offset?4() -> int +QtWidgets.QHeaderView.length?4() -> int +QtWidgets.QHeaderView.sizeHint?4() -> QSize +QtWidgets.QHeaderView.sectionSizeHint?4(int) -> int +QtWidgets.QHeaderView.visualIndexAt?4(int) -> int +QtWidgets.QHeaderView.logicalIndexAt?4(int) -> int +QtWidgets.QHeaderView.sectionSize?4(int) -> int +QtWidgets.QHeaderView.sectionPosition?4(int) -> int +QtWidgets.QHeaderView.sectionViewportPosition?4(int) -> int +QtWidgets.QHeaderView.moveSection?4(int, int) +QtWidgets.QHeaderView.resizeSection?4(int, int) +QtWidgets.QHeaderView.isSectionHidden?4(int) -> bool +QtWidgets.QHeaderView.setSectionHidden?4(int, bool) +QtWidgets.QHeaderView.count?4() -> int +QtWidgets.QHeaderView.visualIndex?4(int) -> int +QtWidgets.QHeaderView.logicalIndex?4(int) -> int +QtWidgets.QHeaderView.setHighlightSections?4(bool) +QtWidgets.QHeaderView.highlightSections?4() -> bool +QtWidgets.QHeaderView.stretchSectionCount?4() -> int +QtWidgets.QHeaderView.setSortIndicatorShown?4(bool) +QtWidgets.QHeaderView.isSortIndicatorShown?4() -> bool +QtWidgets.QHeaderView.setSortIndicator?4(int, Qt.SortOrder) +QtWidgets.QHeaderView.sortIndicatorSection?4() -> int +QtWidgets.QHeaderView.sortIndicatorOrder?4() -> Qt.SortOrder +QtWidgets.QHeaderView.stretchLastSection?4() -> bool +QtWidgets.QHeaderView.setStretchLastSection?4(bool) +QtWidgets.QHeaderView.sectionsMoved?4() -> bool +QtWidgets.QHeaderView.setOffset?4(int) +QtWidgets.QHeaderView.headerDataChanged?4(Qt.Orientation, int, int) +QtWidgets.QHeaderView.setOffsetToSectionPosition?4(int) +QtWidgets.QHeaderView.geometriesChanged?4() +QtWidgets.QHeaderView.sectionMoved?4(int, int, int) +QtWidgets.QHeaderView.sectionResized?4(int, int, int) +QtWidgets.QHeaderView.sectionPressed?4(int) +QtWidgets.QHeaderView.sectionClicked?4(int) +QtWidgets.QHeaderView.sectionDoubleClicked?4(int) +QtWidgets.QHeaderView.sectionCountChanged?4(int, int) +QtWidgets.QHeaderView.sectionHandleDoubleClicked?4(int) +QtWidgets.QHeaderView.updateSection?4(int) +QtWidgets.QHeaderView.resizeSections?4() +QtWidgets.QHeaderView.sectionsInserted?4(QModelIndex, int, int) +QtWidgets.QHeaderView.sectionsAboutToBeRemoved?4(QModelIndex, int, int) +QtWidgets.QHeaderView.initialize?4() +QtWidgets.QHeaderView.initializeSections?4() +QtWidgets.QHeaderView.initializeSections?4(int, int) +QtWidgets.QHeaderView.currentChanged?4(QModelIndex, QModelIndex) +QtWidgets.QHeaderView.event?4(QEvent) -> bool +QtWidgets.QHeaderView.viewportEvent?4(QEvent) -> bool +QtWidgets.QHeaderView.paintEvent?4(QPaintEvent) +QtWidgets.QHeaderView.mousePressEvent?4(QMouseEvent) +QtWidgets.QHeaderView.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QHeaderView.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QHeaderView.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QHeaderView.paintSection?4(QPainter, QRect, int) +QtWidgets.QHeaderView.sectionSizeFromContents?4(int) -> QSize +QtWidgets.QHeaderView.horizontalOffset?4() -> int +QtWidgets.QHeaderView.verticalOffset?4() -> int +QtWidgets.QHeaderView.updateGeometries?4() +QtWidgets.QHeaderView.scrollContentsBy?4(int, int) +QtWidgets.QHeaderView.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) +QtWidgets.QHeaderView.rowsInserted?4(QModelIndex, int, int) +QtWidgets.QHeaderView.visualRect?4(QModelIndex) -> QRect +QtWidgets.QHeaderView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint) +QtWidgets.QHeaderView.indexAt?4(QPoint) -> QModelIndex +QtWidgets.QHeaderView.isIndexHidden?4(QModelIndex) -> bool +QtWidgets.QHeaderView.moveCursor?4(QAbstractItemView.CursorAction, Qt.KeyboardModifiers) -> QModelIndex +QtWidgets.QHeaderView.setSelection?4(QRect, QItemSelectionModel.SelectionFlags) +QtWidgets.QHeaderView.visualRegionForSelection?4(QItemSelection) -> QRegion +QtWidgets.QHeaderView.logicalIndexAt?4(int, int) -> int +QtWidgets.QHeaderView.logicalIndexAt?4(QPoint) -> int +QtWidgets.QHeaderView.hideSection?4(int) +QtWidgets.QHeaderView.showSection?4(int) +QtWidgets.QHeaderView.resizeSections?4(QHeaderView.ResizeMode) +QtWidgets.QHeaderView.hiddenSectionCount?4() -> int +QtWidgets.QHeaderView.defaultSectionSize?4() -> int +QtWidgets.QHeaderView.setDefaultSectionSize?4(int) +QtWidgets.QHeaderView.defaultAlignment?4() -> Qt.Alignment +QtWidgets.QHeaderView.setDefaultAlignment?4(Qt.Alignment) +QtWidgets.QHeaderView.sectionsHidden?4() -> bool +QtWidgets.QHeaderView.swapSections?4(int, int) +QtWidgets.QHeaderView.cascadingSectionResizes?4() -> bool +QtWidgets.QHeaderView.setCascadingSectionResizes?4(bool) +QtWidgets.QHeaderView.minimumSectionSize?4() -> int +QtWidgets.QHeaderView.setMinimumSectionSize?4(int) +QtWidgets.QHeaderView.saveState?4() -> QByteArray +QtWidgets.QHeaderView.restoreState?4(QByteArray) -> bool +QtWidgets.QHeaderView.reset?4() +QtWidgets.QHeaderView.setOffsetToLastSection?4() +QtWidgets.QHeaderView.sectionEntered?4(int) +QtWidgets.QHeaderView.sortIndicatorChanged?4(int, Qt.SortOrder) +QtWidgets.QHeaderView.initStyleOption?4(QStyleOptionHeader) +QtWidgets.QHeaderView.setSectionsMovable?4(bool) +QtWidgets.QHeaderView.sectionsMovable?4() -> bool +QtWidgets.QHeaderView.setSectionsClickable?4(bool) +QtWidgets.QHeaderView.sectionsClickable?4() -> bool +QtWidgets.QHeaderView.sectionResizeMode?4(int) -> QHeaderView.ResizeMode +QtWidgets.QHeaderView.setSectionResizeMode?4(int, QHeaderView.ResizeMode) +QtWidgets.QHeaderView.setSectionResizeMode?4(QHeaderView.ResizeMode) +QtWidgets.QHeaderView.setVisible?4(bool) +QtWidgets.QHeaderView.setResizeContentsPrecision?4(int) +QtWidgets.QHeaderView.resizeContentsPrecision?4() -> int +QtWidgets.QHeaderView.maximumSectionSize?4() -> int +QtWidgets.QHeaderView.setMaximumSectionSize?4(int) +QtWidgets.QHeaderView.resetDefaultSectionSize?4() +QtWidgets.QHeaderView.setFirstSectionMovable?4(bool) +QtWidgets.QHeaderView.isFirstSectionMovable?4() -> bool +QtWidgets.QInputDialog.InputMode?10 +QtWidgets.QInputDialog.InputMode.TextInput?10 +QtWidgets.QInputDialog.InputMode.IntInput?10 +QtWidgets.QInputDialog.InputMode.DoubleInput?10 +QtWidgets.QInputDialog.InputDialogOption?10 +QtWidgets.QInputDialog.InputDialogOption.NoButtons?10 +QtWidgets.QInputDialog.InputDialogOption.UseListViewForComboBoxItems?10 +QtWidgets.QInputDialog.InputDialogOption.UsePlainTextEditForTextInput?10 +QtWidgets.QInputDialog?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QInputDialog.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QInputDialog.getText?4(QWidget, QString, QString, QLineEdit.EchoMode echo=QLineEdit.Normal, QString text='', Qt.WindowFlags flags=Qt.WindowFlags(), Qt.InputMethodHints inputMethodHints=Qt.ImhNone) -> (QString, bool) +QtWidgets.QInputDialog.getInt?4(QWidget, QString, QString, int value=0, int min=-2147483647, int max=2147483647, int step=1, Qt.WindowFlags flags=Qt.WindowFlags()) -> (int, bool) +QtWidgets.QInputDialog.getDouble?4(QWidget, QString, QString, float value=0, float min=-2147483647, float max=2147483647, int decimals=1, Qt.WindowFlags flags=Qt.WindowFlags()) -> (float, bool) +QtWidgets.QInputDialog.getDouble?4(QWidget, QString, QString, float, float, float, int, Qt.WindowFlags, float) -> (float, bool) +QtWidgets.QInputDialog.getItem?4(QWidget, QString, QString, QStringList, int current=0, bool editable=True, Qt.WindowFlags flags=Qt.WindowFlags(), Qt.InputMethodHints inputMethodHints=Qt.ImhNone) -> (QString, bool) +QtWidgets.QInputDialog.getMultiLineText?4(QWidget, QString, QString, QString text='', Qt.WindowFlags flags=Qt.WindowFlags(), Qt.InputMethodHints inputMethodHints=Qt.ImhNone) -> (QString, bool) +QtWidgets.QInputDialog.setInputMode?4(QInputDialog.InputMode) +QtWidgets.QInputDialog.inputMode?4() -> QInputDialog.InputMode +QtWidgets.QInputDialog.setLabelText?4(QString) +QtWidgets.QInputDialog.labelText?4() -> QString +QtWidgets.QInputDialog.setOption?4(QInputDialog.InputDialogOption, bool on=True) +QtWidgets.QInputDialog.testOption?4(QInputDialog.InputDialogOption) -> bool +QtWidgets.QInputDialog.setOptions?4(QInputDialog.InputDialogOptions) +QtWidgets.QInputDialog.options?4() -> QInputDialog.InputDialogOptions +QtWidgets.QInputDialog.setTextValue?4(QString) +QtWidgets.QInputDialog.textValue?4() -> QString +QtWidgets.QInputDialog.setTextEchoMode?4(QLineEdit.EchoMode) +QtWidgets.QInputDialog.textEchoMode?4() -> QLineEdit.EchoMode +QtWidgets.QInputDialog.setComboBoxEditable?4(bool) +QtWidgets.QInputDialog.isComboBoxEditable?4() -> bool +QtWidgets.QInputDialog.setComboBoxItems?4(QStringList) +QtWidgets.QInputDialog.comboBoxItems?4() -> QStringList +QtWidgets.QInputDialog.setIntValue?4(int) +QtWidgets.QInputDialog.intValue?4() -> int +QtWidgets.QInputDialog.setIntMinimum?4(int) +QtWidgets.QInputDialog.intMinimum?4() -> int +QtWidgets.QInputDialog.setIntMaximum?4(int) +QtWidgets.QInputDialog.intMaximum?4() -> int +QtWidgets.QInputDialog.setIntRange?4(int, int) +QtWidgets.QInputDialog.setIntStep?4(int) +QtWidgets.QInputDialog.intStep?4() -> int +QtWidgets.QInputDialog.setDoubleValue?4(float) +QtWidgets.QInputDialog.doubleValue?4() -> float +QtWidgets.QInputDialog.setDoubleMinimum?4(float) +QtWidgets.QInputDialog.doubleMinimum?4() -> float +QtWidgets.QInputDialog.setDoubleMaximum?4(float) +QtWidgets.QInputDialog.doubleMaximum?4() -> float +QtWidgets.QInputDialog.setDoubleRange?4(float, float) +QtWidgets.QInputDialog.setDoubleDecimals?4(int) +QtWidgets.QInputDialog.doubleDecimals?4() -> int +QtWidgets.QInputDialog.setOkButtonText?4(QString) +QtWidgets.QInputDialog.okButtonText?4() -> QString +QtWidgets.QInputDialog.setCancelButtonText?4(QString) +QtWidgets.QInputDialog.cancelButtonText?4() -> QString +QtWidgets.QInputDialog.open?4() +QtWidgets.QInputDialog.open?4(Any) +QtWidgets.QInputDialog.minimumSizeHint?4() -> QSize +QtWidgets.QInputDialog.sizeHint?4() -> QSize +QtWidgets.QInputDialog.setVisible?4(bool) +QtWidgets.QInputDialog.done?4(int) +QtWidgets.QInputDialog.textValueChanged?4(QString) +QtWidgets.QInputDialog.textValueSelected?4(QString) +QtWidgets.QInputDialog.intValueChanged?4(int) +QtWidgets.QInputDialog.intValueSelected?4(int) +QtWidgets.QInputDialog.doubleValueChanged?4(float) +QtWidgets.QInputDialog.doubleValueSelected?4(float) +QtWidgets.QInputDialog.setDoubleStep?4(float) +QtWidgets.QInputDialog.doubleStep?4() -> float +QtWidgets.QInputDialog.InputDialogOptions?1() +QtWidgets.QInputDialog.InputDialogOptions.__init__?1(self) +QtWidgets.QInputDialog.InputDialogOptions?1(int) +QtWidgets.QInputDialog.InputDialogOptions.__init__?1(self, int) +QtWidgets.QInputDialog.InputDialogOptions?1(QInputDialog.InputDialogOptions) +QtWidgets.QInputDialog.InputDialogOptions.__init__?1(self, QInputDialog.InputDialogOptions) +QtWidgets.QItemDelegate?1(QObject parent=None) +QtWidgets.QItemDelegate.__init__?1(self, QObject parent=None) +QtWidgets.QItemDelegate.paint?4(QPainter, QStyleOptionViewItem, QModelIndex) +QtWidgets.QItemDelegate.sizeHint?4(QStyleOptionViewItem, QModelIndex) -> QSize +QtWidgets.QItemDelegate.createEditor?4(QWidget, QStyleOptionViewItem, QModelIndex) -> QWidget +QtWidgets.QItemDelegate.setEditorData?4(QWidget, QModelIndex) +QtWidgets.QItemDelegate.setModelData?4(QWidget, QAbstractItemModel, QModelIndex) +QtWidgets.QItemDelegate.updateEditorGeometry?4(QWidget, QStyleOptionViewItem, QModelIndex) +QtWidgets.QItemDelegate.itemEditorFactory?4() -> QItemEditorFactory +QtWidgets.QItemDelegate.setItemEditorFactory?4(QItemEditorFactory) +QtWidgets.QItemDelegate.hasClipping?4() -> bool +QtWidgets.QItemDelegate.setClipping?4(bool) +QtWidgets.QItemDelegate.drawBackground?4(QPainter, QStyleOptionViewItem, QModelIndex) +QtWidgets.QItemDelegate.drawCheck?4(QPainter, QStyleOptionViewItem, QRect, Qt.CheckState) +QtWidgets.QItemDelegate.drawDecoration?4(QPainter, QStyleOptionViewItem, QRect, QPixmap) +QtWidgets.QItemDelegate.drawDisplay?4(QPainter, QStyleOptionViewItem, QRect, QString) +QtWidgets.QItemDelegate.drawFocus?4(QPainter, QStyleOptionViewItem, QRect) +QtWidgets.QItemDelegate.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QItemDelegate.editorEvent?4(QEvent, QAbstractItemModel, QStyleOptionViewItem, QModelIndex) -> bool +QtWidgets.QItemEditorCreatorBase?1() +QtWidgets.QItemEditorCreatorBase.__init__?1(self) +QtWidgets.QItemEditorCreatorBase?1(QItemEditorCreatorBase) +QtWidgets.QItemEditorCreatorBase.__init__?1(self, QItemEditorCreatorBase) +QtWidgets.QItemEditorCreatorBase.createWidget?4(QWidget) -> QWidget +QtWidgets.QItemEditorCreatorBase.valuePropertyName?4() -> QByteArray +QtWidgets.QItemEditorFactory?1() +QtWidgets.QItemEditorFactory.__init__?1(self) +QtWidgets.QItemEditorFactory?1(QItemEditorFactory) +QtWidgets.QItemEditorFactory.__init__?1(self, QItemEditorFactory) +QtWidgets.QItemEditorFactory.createEditor?4(int, QWidget) -> QWidget +QtWidgets.QItemEditorFactory.valuePropertyName?4(int) -> QByteArray +QtWidgets.QItemEditorFactory.registerEditor?4(int, QItemEditorCreatorBase) +QtWidgets.QItemEditorFactory.defaultFactory?4() -> QItemEditorFactory +QtWidgets.QItemEditorFactory.setDefaultFactory?4(QItemEditorFactory) +QtWidgets.QKeyEventTransition?1(QState sourceState=None) +QtWidgets.QKeyEventTransition.__init__?1(self, QState sourceState=None) +QtWidgets.QKeyEventTransition?1(QObject, QEvent.Type, int, QState sourceState=None) +QtWidgets.QKeyEventTransition.__init__?1(self, QObject, QEvent.Type, int, QState sourceState=None) +QtWidgets.QKeyEventTransition.key?4() -> int +QtWidgets.QKeyEventTransition.setKey?4(int) +QtWidgets.QKeyEventTransition.modifierMask?4() -> Qt.KeyboardModifiers +QtWidgets.QKeyEventTransition.setModifierMask?4(Qt.KeyboardModifiers) +QtWidgets.QKeyEventTransition.onTransition?4(QEvent) +QtWidgets.QKeyEventTransition.eventTest?4(QEvent) -> bool +QtWidgets.QKeySequenceEdit?1(QWidget parent=None) +QtWidgets.QKeySequenceEdit.__init__?1(self, QWidget parent=None) +QtWidgets.QKeySequenceEdit?1(QKeySequence, QWidget parent=None) +QtWidgets.QKeySequenceEdit.__init__?1(self, QKeySequence, QWidget parent=None) +QtWidgets.QKeySequenceEdit.keySequence?4() -> QKeySequence +QtWidgets.QKeySequenceEdit.setKeySequence?4(QKeySequence) +QtWidgets.QKeySequenceEdit.clear?4() +QtWidgets.QKeySequenceEdit.editingFinished?4() +QtWidgets.QKeySequenceEdit.keySequenceChanged?4(QKeySequence) +QtWidgets.QKeySequenceEdit.event?4(QEvent) -> bool +QtWidgets.QKeySequenceEdit.keyPressEvent?4(QKeyEvent) +QtWidgets.QKeySequenceEdit.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QKeySequenceEdit.timerEvent?4(QTimerEvent) +QtWidgets.QLabel?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QLabel.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QLabel?1(QString, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QLabel.__init__?1(self, QString, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QLabel.text?4() -> QString +QtWidgets.QLabel.pixmap?4() -> QPixmap +QtWidgets.QLabel.picture?4() -> QPicture +QtWidgets.QLabel.movie?4() -> QMovie +QtWidgets.QLabel.textFormat?4() -> Qt.TextFormat +QtWidgets.QLabel.setTextFormat?4(Qt.TextFormat) +QtWidgets.QLabel.alignment?4() -> Qt.Alignment +QtWidgets.QLabel.setAlignment?4(Qt.Alignment) +QtWidgets.QLabel.setWordWrap?4(bool) +QtWidgets.QLabel.wordWrap?4() -> bool +QtWidgets.QLabel.indent?4() -> int +QtWidgets.QLabel.setIndent?4(int) +QtWidgets.QLabel.margin?4() -> int +QtWidgets.QLabel.setMargin?4(int) +QtWidgets.QLabel.hasScaledContents?4() -> bool +QtWidgets.QLabel.setScaledContents?4(bool) +QtWidgets.QLabel.sizeHint?4() -> QSize +QtWidgets.QLabel.minimumSizeHint?4() -> QSize +QtWidgets.QLabel.setBuddy?4(QWidget) +QtWidgets.QLabel.buddy?4() -> QWidget +QtWidgets.QLabel.heightForWidth?4(int) -> int +QtWidgets.QLabel.openExternalLinks?4() -> bool +QtWidgets.QLabel.setTextInteractionFlags?4(Qt.TextInteractionFlags) +QtWidgets.QLabel.textInteractionFlags?4() -> Qt.TextInteractionFlags +QtWidgets.QLabel.setOpenExternalLinks?4(bool) +QtWidgets.QLabel.clear?4() +QtWidgets.QLabel.setMovie?4(QMovie) +QtWidgets.QLabel.setNum?4(float) +QtWidgets.QLabel.setNum?4(int) +QtWidgets.QLabel.setPicture?4(QPicture) +QtWidgets.QLabel.setPixmap?4(QPixmap) +QtWidgets.QLabel.setText?4(QString) +QtWidgets.QLabel.linkActivated?4(QString) +QtWidgets.QLabel.linkHovered?4(QString) +QtWidgets.QLabel.event?4(QEvent) -> bool +QtWidgets.QLabel.paintEvent?4(QPaintEvent) +QtWidgets.QLabel.changeEvent?4(QEvent) +QtWidgets.QLabel.keyPressEvent?4(QKeyEvent) +QtWidgets.QLabel.mousePressEvent?4(QMouseEvent) +QtWidgets.QLabel.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QLabel.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QLabel.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QLabel.focusInEvent?4(QFocusEvent) +QtWidgets.QLabel.focusOutEvent?4(QFocusEvent) +QtWidgets.QLabel.focusNextPrevChild?4(bool) -> bool +QtWidgets.QLabel.setSelection?4(int, int) +QtWidgets.QLabel.hasSelectedText?4() -> bool +QtWidgets.QLabel.selectedText?4() -> QString +QtWidgets.QLabel.selectionStart?4() -> int +QtWidgets.QSpacerItem?1(int, int, QSizePolicy.Policy hPolicy=QSizePolicy.Minimum, QSizePolicy.Policy vPolicy=QSizePolicy.Minimum) +QtWidgets.QSpacerItem.__init__?1(self, int, int, QSizePolicy.Policy hPolicy=QSizePolicy.Minimum, QSizePolicy.Policy vPolicy=QSizePolicy.Minimum) +QtWidgets.QSpacerItem?1(QSpacerItem) +QtWidgets.QSpacerItem.__init__?1(self, QSpacerItem) +QtWidgets.QSpacerItem.changeSize?4(int, int, QSizePolicy.Policy hPolicy=QSizePolicy.Minimum, QSizePolicy.Policy vPolicy=QSizePolicy.Minimum) +QtWidgets.QSpacerItem.sizeHint?4() -> QSize +QtWidgets.QSpacerItem.minimumSize?4() -> QSize +QtWidgets.QSpacerItem.maximumSize?4() -> QSize +QtWidgets.QSpacerItem.expandingDirections?4() -> Qt.Orientations +QtWidgets.QSpacerItem.isEmpty?4() -> bool +QtWidgets.QSpacerItem.setGeometry?4(QRect) +QtWidgets.QSpacerItem.geometry?4() -> QRect +QtWidgets.QSpacerItem.spacerItem?4() -> QSpacerItem +QtWidgets.QSpacerItem.sizePolicy?4() -> QSizePolicy +QtWidgets.QWidgetItem?1(QWidget) +QtWidgets.QWidgetItem.__init__?1(self, QWidget) +QtWidgets.QWidgetItem.sizeHint?4() -> QSize +QtWidgets.QWidgetItem.minimumSize?4() -> QSize +QtWidgets.QWidgetItem.maximumSize?4() -> QSize +QtWidgets.QWidgetItem.expandingDirections?4() -> Qt.Orientations +QtWidgets.QWidgetItem.isEmpty?4() -> bool +QtWidgets.QWidgetItem.setGeometry?4(QRect) +QtWidgets.QWidgetItem.geometry?4() -> QRect +QtWidgets.QWidgetItem.widget?4() -> QWidget +QtWidgets.QWidgetItem.hasHeightForWidth?4() -> bool +QtWidgets.QWidgetItem.heightForWidth?4(int) -> int +QtWidgets.QWidgetItem.controlTypes?4() -> QSizePolicy.ControlTypes +QtWidgets.QLCDNumber.SegmentStyle?10 +QtWidgets.QLCDNumber.SegmentStyle.Outline?10 +QtWidgets.QLCDNumber.SegmentStyle.Filled?10 +QtWidgets.QLCDNumber.SegmentStyle.Flat?10 +QtWidgets.QLCDNumber.Mode?10 +QtWidgets.QLCDNumber.Mode.Hex?10 +QtWidgets.QLCDNumber.Mode.Dec?10 +QtWidgets.QLCDNumber.Mode.Oct?10 +QtWidgets.QLCDNumber.Mode.Bin?10 +QtWidgets.QLCDNumber?1(QWidget parent=None) +QtWidgets.QLCDNumber.__init__?1(self, QWidget parent=None) +QtWidgets.QLCDNumber?1(int, QWidget parent=None) +QtWidgets.QLCDNumber.__init__?1(self, int, QWidget parent=None) +QtWidgets.QLCDNumber.smallDecimalPoint?4() -> bool +QtWidgets.QLCDNumber.digitCount?4() -> int +QtWidgets.QLCDNumber.setDigitCount?4(int) +QtWidgets.QLCDNumber.setNumDigits?4(int) +QtWidgets.QLCDNumber.checkOverflow?4(float) -> bool +QtWidgets.QLCDNumber.checkOverflow?4(int) -> bool +QtWidgets.QLCDNumber.mode?4() -> QLCDNumber.Mode +QtWidgets.QLCDNumber.setMode?4(QLCDNumber.Mode) +QtWidgets.QLCDNumber.segmentStyle?4() -> QLCDNumber.SegmentStyle +QtWidgets.QLCDNumber.setSegmentStyle?4(QLCDNumber.SegmentStyle) +QtWidgets.QLCDNumber.value?4() -> float +QtWidgets.QLCDNumber.intValue?4() -> int +QtWidgets.QLCDNumber.sizeHint?4() -> QSize +QtWidgets.QLCDNumber.display?4(QString) +QtWidgets.QLCDNumber.display?4(float) +QtWidgets.QLCDNumber.display?4(int) +QtWidgets.QLCDNumber.setHexMode?4() +QtWidgets.QLCDNumber.setDecMode?4() +QtWidgets.QLCDNumber.setOctMode?4() +QtWidgets.QLCDNumber.setBinMode?4() +QtWidgets.QLCDNumber.setSmallDecimalPoint?4(bool) +QtWidgets.QLCDNumber.overflow?4() +QtWidgets.QLCDNumber.event?4(QEvent) -> bool +QtWidgets.QLCDNumber.paintEvent?4(QPaintEvent) +QtWidgets.QLineEdit.ActionPosition?10 +QtWidgets.QLineEdit.ActionPosition.LeadingPosition?10 +QtWidgets.QLineEdit.ActionPosition.TrailingPosition?10 +QtWidgets.QLineEdit.EchoMode?10 +QtWidgets.QLineEdit.EchoMode.Normal?10 +QtWidgets.QLineEdit.EchoMode.NoEcho?10 +QtWidgets.QLineEdit.EchoMode.Password?10 +QtWidgets.QLineEdit.EchoMode.PasswordEchoOnEdit?10 +QtWidgets.QLineEdit?1(QWidget parent=None) +QtWidgets.QLineEdit.__init__?1(self, QWidget parent=None) +QtWidgets.QLineEdit?1(QString, QWidget parent=None) +QtWidgets.QLineEdit.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QLineEdit.text?4() -> QString +QtWidgets.QLineEdit.displayText?4() -> QString +QtWidgets.QLineEdit.maxLength?4() -> int +QtWidgets.QLineEdit.setMaxLength?4(int) +QtWidgets.QLineEdit.setFrame?4(bool) +QtWidgets.QLineEdit.hasFrame?4() -> bool +QtWidgets.QLineEdit.echoMode?4() -> QLineEdit.EchoMode +QtWidgets.QLineEdit.setEchoMode?4(QLineEdit.EchoMode) +QtWidgets.QLineEdit.isReadOnly?4() -> bool +QtWidgets.QLineEdit.setReadOnly?4(bool) +QtWidgets.QLineEdit.setValidator?4(QValidator) +QtWidgets.QLineEdit.validator?4() -> QValidator +QtWidgets.QLineEdit.sizeHint?4() -> QSize +QtWidgets.QLineEdit.minimumSizeHint?4() -> QSize +QtWidgets.QLineEdit.cursorPosition?4() -> int +QtWidgets.QLineEdit.setCursorPosition?4(int) +QtWidgets.QLineEdit.cursorPositionAt?4(QPoint) -> int +QtWidgets.QLineEdit.setAlignment?4(Qt.Alignment) +QtWidgets.QLineEdit.alignment?4() -> Qt.Alignment +QtWidgets.QLineEdit.cursorForward?4(bool, int steps=1) +QtWidgets.QLineEdit.cursorBackward?4(bool, int steps=1) +QtWidgets.QLineEdit.cursorWordForward?4(bool) +QtWidgets.QLineEdit.cursorWordBackward?4(bool) +QtWidgets.QLineEdit.backspace?4() +QtWidgets.QLineEdit.del_?4() +QtWidgets.QLineEdit.home?4(bool) +QtWidgets.QLineEdit.end?4(bool) +QtWidgets.QLineEdit.isModified?4() -> bool +QtWidgets.QLineEdit.setModified?4(bool) +QtWidgets.QLineEdit.setSelection?4(int, int) +QtWidgets.QLineEdit.hasSelectedText?4() -> bool +QtWidgets.QLineEdit.selectedText?4() -> QString +QtWidgets.QLineEdit.selectionStart?4() -> int +QtWidgets.QLineEdit.isUndoAvailable?4() -> bool +QtWidgets.QLineEdit.isRedoAvailable?4() -> bool +QtWidgets.QLineEdit.setDragEnabled?4(bool) +QtWidgets.QLineEdit.dragEnabled?4() -> bool +QtWidgets.QLineEdit.inputMask?4() -> QString +QtWidgets.QLineEdit.setInputMask?4(QString) +QtWidgets.QLineEdit.hasAcceptableInput?4() -> bool +QtWidgets.QLineEdit.setText?4(QString) +QtWidgets.QLineEdit.clear?4() +QtWidgets.QLineEdit.selectAll?4() +QtWidgets.QLineEdit.undo?4() +QtWidgets.QLineEdit.redo?4() +QtWidgets.QLineEdit.cut?4() +QtWidgets.QLineEdit.copy?4() +QtWidgets.QLineEdit.paste?4() +QtWidgets.QLineEdit.deselect?4() +QtWidgets.QLineEdit.insert?4(QString) +QtWidgets.QLineEdit.createStandardContextMenu?4() -> QMenu +QtWidgets.QLineEdit.textChanged?4(QString) +QtWidgets.QLineEdit.textEdited?4(QString) +QtWidgets.QLineEdit.cursorPositionChanged?4(int, int) +QtWidgets.QLineEdit.returnPressed?4() +QtWidgets.QLineEdit.editingFinished?4() +QtWidgets.QLineEdit.selectionChanged?4() +QtWidgets.QLineEdit.initStyleOption?4(QStyleOptionFrame) +QtWidgets.QLineEdit.mousePressEvent?4(QMouseEvent) +QtWidgets.QLineEdit.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QLineEdit.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QLineEdit.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QLineEdit.keyPressEvent?4(QKeyEvent) +QtWidgets.QLineEdit.focusInEvent?4(QFocusEvent) +QtWidgets.QLineEdit.focusOutEvent?4(QFocusEvent) +QtWidgets.QLineEdit.paintEvent?4(QPaintEvent) +QtWidgets.QLineEdit.dragEnterEvent?4(QDragEnterEvent) +QtWidgets.QLineEdit.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QLineEdit.dragLeaveEvent?4(QDragLeaveEvent) +QtWidgets.QLineEdit.dropEvent?4(QDropEvent) +QtWidgets.QLineEdit.changeEvent?4(QEvent) +QtWidgets.QLineEdit.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QLineEdit.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QLineEdit.cursorRect?4() -> QRect +QtWidgets.QLineEdit.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QLineEdit.event?4(QEvent) -> bool +QtWidgets.QLineEdit.setCompleter?4(QCompleter) +QtWidgets.QLineEdit.completer?4() -> QCompleter +QtWidgets.QLineEdit.setTextMargins?4(int, int, int, int) +QtWidgets.QLineEdit.getTextMargins?4() -> (int, int, int, int) +QtWidgets.QLineEdit.setTextMargins?4(QMargins) +QtWidgets.QLineEdit.textMargins?4() -> QMargins +QtWidgets.QLineEdit.placeholderText?4() -> QString +QtWidgets.QLineEdit.setPlaceholderText?4(QString) +QtWidgets.QLineEdit.setCursorMoveStyle?4(Qt.CursorMoveStyle) +QtWidgets.QLineEdit.cursorMoveStyle?4() -> Qt.CursorMoveStyle +QtWidgets.QLineEdit.setClearButtonEnabled?4(bool) +QtWidgets.QLineEdit.isClearButtonEnabled?4() -> bool +QtWidgets.QLineEdit.addAction?4(QAction) +QtWidgets.QLineEdit.addAction?4(QAction, QLineEdit.ActionPosition) +QtWidgets.QLineEdit.addAction?4(QIcon, QLineEdit.ActionPosition) -> QAction +QtWidgets.QLineEdit.inputMethodQuery?4(Qt.InputMethodQuery, QVariant) -> QVariant +QtWidgets.QLineEdit.selectionEnd?4() -> int +QtWidgets.QLineEdit.selectionLength?4() -> int +QtWidgets.QLineEdit.inputRejected?4() +QtWidgets.QListView.ViewMode?10 +QtWidgets.QListView.ViewMode.ListMode?10 +QtWidgets.QListView.ViewMode.IconMode?10 +QtWidgets.QListView.LayoutMode?10 +QtWidgets.QListView.LayoutMode.SinglePass?10 +QtWidgets.QListView.LayoutMode.Batched?10 +QtWidgets.QListView.ResizeMode?10 +QtWidgets.QListView.ResizeMode.Fixed?10 +QtWidgets.QListView.ResizeMode.Adjust?10 +QtWidgets.QListView.Flow?10 +QtWidgets.QListView.Flow.LeftToRight?10 +QtWidgets.QListView.Flow.TopToBottom?10 +QtWidgets.QListView.Movement?10 +QtWidgets.QListView.Movement.Static?10 +QtWidgets.QListView.Movement.Free?10 +QtWidgets.QListView.Movement.Snap?10 +QtWidgets.QListView?1(QWidget parent=None) +QtWidgets.QListView.__init__?1(self, QWidget parent=None) +QtWidgets.QListView.setMovement?4(QListView.Movement) +QtWidgets.QListView.movement?4() -> QListView.Movement +QtWidgets.QListView.setFlow?4(QListView.Flow) +QtWidgets.QListView.flow?4() -> QListView.Flow +QtWidgets.QListView.setWrapping?4(bool) +QtWidgets.QListView.isWrapping?4() -> bool +QtWidgets.QListView.setResizeMode?4(QListView.ResizeMode) +QtWidgets.QListView.resizeMode?4() -> QListView.ResizeMode +QtWidgets.QListView.setLayoutMode?4(QListView.LayoutMode) +QtWidgets.QListView.layoutMode?4() -> QListView.LayoutMode +QtWidgets.QListView.setSpacing?4(int) +QtWidgets.QListView.spacing?4() -> int +QtWidgets.QListView.setGridSize?4(QSize) +QtWidgets.QListView.gridSize?4() -> QSize +QtWidgets.QListView.setViewMode?4(QListView.ViewMode) +QtWidgets.QListView.viewMode?4() -> QListView.ViewMode +QtWidgets.QListView.clearPropertyFlags?4() +QtWidgets.QListView.isRowHidden?4(int) -> bool +QtWidgets.QListView.setRowHidden?4(int, bool) +QtWidgets.QListView.setModelColumn?4(int) +QtWidgets.QListView.modelColumn?4() -> int +QtWidgets.QListView.setUniformItemSizes?4(bool) +QtWidgets.QListView.uniformItemSizes?4() -> bool +QtWidgets.QListView.visualRect?4(QModelIndex) -> QRect +QtWidgets.QListView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) +QtWidgets.QListView.indexAt?4(QPoint) -> QModelIndex +QtWidgets.QListView.reset?4() +QtWidgets.QListView.setRootIndex?4(QModelIndex) +QtWidgets.QListView.indexesMoved?4(unknown-type) +QtWidgets.QListView.scrollContentsBy?4(int, int) +QtWidgets.QListView.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) +QtWidgets.QListView.rowsInserted?4(QModelIndex, int, int) +QtWidgets.QListView.rowsAboutToBeRemoved?4(QModelIndex, int, int) +QtWidgets.QListView.event?4(QEvent) -> bool +QtWidgets.QListView.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QListView.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QListView.timerEvent?4(QTimerEvent) +QtWidgets.QListView.resizeEvent?4(QResizeEvent) +QtWidgets.QListView.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QListView.dragLeaveEvent?4(QDragLeaveEvent) +QtWidgets.QListView.dropEvent?4(QDropEvent) +QtWidgets.QListView.wheelEvent?4(QWheelEvent) +QtWidgets.QListView.startDrag?4(Qt.DropActions) +QtWidgets.QListView.viewOptions?4() -> QStyleOptionViewItem +QtWidgets.QListView.paintEvent?4(QPaintEvent) +QtWidgets.QListView.horizontalOffset?4() -> int +QtWidgets.QListView.verticalOffset?4() -> int +QtWidgets.QListView.moveCursor?4(QAbstractItemView.CursorAction, Qt.KeyboardModifiers) -> QModelIndex +QtWidgets.QListView.rectForIndex?4(QModelIndex) -> QRect +QtWidgets.QListView.setPositionForIndex?4(QPoint, QModelIndex) +QtWidgets.QListView.setSelection?4(QRect, QItemSelectionModel.SelectionFlags) +QtWidgets.QListView.visualRegionForSelection?4(QItemSelection) -> QRegion +QtWidgets.QListView.selectedIndexes?4() -> unknown-type +QtWidgets.QListView.updateGeometries?4() +QtWidgets.QListView.isIndexHidden?4(QModelIndex) -> bool +QtWidgets.QListView.viewportSizeHint?4() -> QSize +QtWidgets.QListView.setBatchSize?4(int) +QtWidgets.QListView.batchSize?4() -> int +QtWidgets.QListView.setWordWrap?4(bool) +QtWidgets.QListView.wordWrap?4() -> bool +QtWidgets.QListView.setSelectionRectVisible?4(bool) +QtWidgets.QListView.isSelectionRectVisible?4() -> bool +QtWidgets.QListView.selectionChanged?4(QItemSelection, QItemSelection) +QtWidgets.QListView.currentChanged?4(QModelIndex, QModelIndex) +QtWidgets.QListView.setItemAlignment?4(Qt.Alignment) +QtWidgets.QListView.itemAlignment?4() -> Qt.Alignment +QtWidgets.QListWidgetItem.ItemType?10 +QtWidgets.QListWidgetItem.ItemType.Type?10 +QtWidgets.QListWidgetItem.ItemType.UserType?10 +QtWidgets.QListWidgetItem?1(QListWidget parent=None, int type=QListWidgetItem.Type) +QtWidgets.QListWidgetItem.__init__?1(self, QListWidget parent=None, int type=QListWidgetItem.Type) +QtWidgets.QListWidgetItem?1(QString, QListWidget parent=None, int type=QListWidgetItem.Type) +QtWidgets.QListWidgetItem.__init__?1(self, QString, QListWidget parent=None, int type=QListWidgetItem.Type) +QtWidgets.QListWidgetItem?1(QIcon, QString, QListWidget parent=None, int type=QListWidgetItem.Type) +QtWidgets.QListWidgetItem.__init__?1(self, QIcon, QString, QListWidget parent=None, int type=QListWidgetItem.Type) +QtWidgets.QListWidgetItem?1(QListWidgetItem) +QtWidgets.QListWidgetItem.__init__?1(self, QListWidgetItem) +QtWidgets.QListWidgetItem.clone?4() -> QListWidgetItem +QtWidgets.QListWidgetItem.listWidget?4() -> QListWidget +QtWidgets.QListWidgetItem.flags?4() -> Qt.ItemFlags +QtWidgets.QListWidgetItem.text?4() -> QString +QtWidgets.QListWidgetItem.icon?4() -> QIcon +QtWidgets.QListWidgetItem.statusTip?4() -> QString +QtWidgets.QListWidgetItem.toolTip?4() -> QString +QtWidgets.QListWidgetItem.whatsThis?4() -> QString +QtWidgets.QListWidgetItem.font?4() -> QFont +QtWidgets.QListWidgetItem.textAlignment?4() -> int +QtWidgets.QListWidgetItem.setTextAlignment?4(int) +QtWidgets.QListWidgetItem.checkState?4() -> Qt.CheckState +QtWidgets.QListWidgetItem.setCheckState?4(Qt.CheckState) +QtWidgets.QListWidgetItem.sizeHint?4() -> QSize +QtWidgets.QListWidgetItem.setSizeHint?4(QSize) +QtWidgets.QListWidgetItem.data?4(int) -> QVariant +QtWidgets.QListWidgetItem.setData?4(int, QVariant) +QtWidgets.QListWidgetItem.read?4(QDataStream) +QtWidgets.QListWidgetItem.write?4(QDataStream) +QtWidgets.QListWidgetItem.type?4() -> int +QtWidgets.QListWidgetItem.setFlags?4(Qt.ItemFlags) +QtWidgets.QListWidgetItem.setText?4(QString) +QtWidgets.QListWidgetItem.setIcon?4(QIcon) +QtWidgets.QListWidgetItem.setStatusTip?4(QString) +QtWidgets.QListWidgetItem.setToolTip?4(QString) +QtWidgets.QListWidgetItem.setWhatsThis?4(QString) +QtWidgets.QListWidgetItem.setFont?4(QFont) +QtWidgets.QListWidgetItem.background?4() -> QBrush +QtWidgets.QListWidgetItem.setBackground?4(QBrush) +QtWidgets.QListWidgetItem.foreground?4() -> QBrush +QtWidgets.QListWidgetItem.setForeground?4(QBrush) +QtWidgets.QListWidgetItem.setSelected?4(bool) +QtWidgets.QListWidgetItem.isSelected?4() -> bool +QtWidgets.QListWidgetItem.setHidden?4(bool) +QtWidgets.QListWidgetItem.isHidden?4() -> bool +QtWidgets.QListWidget?1(QWidget parent=None) +QtWidgets.QListWidget.__init__?1(self, QWidget parent=None) +QtWidgets.QListWidget.item?4(int) -> QListWidgetItem +QtWidgets.QListWidget.row?4(QListWidgetItem) -> int +QtWidgets.QListWidget.insertItem?4(int, QListWidgetItem) +QtWidgets.QListWidget.insertItem?4(int, QString) +QtWidgets.QListWidget.insertItems?4(int, QStringList) +QtWidgets.QListWidget.addItem?4(QListWidgetItem) +QtWidgets.QListWidget.addItem?4(QString) +QtWidgets.QListWidget.addItems?4(QStringList) +QtWidgets.QListWidget.takeItem?4(int) -> QListWidgetItem +QtWidgets.QListWidget.count?4() -> int +QtWidgets.QListWidget.currentItem?4() -> QListWidgetItem +QtWidgets.QListWidget.setCurrentItem?4(QListWidgetItem) +QtWidgets.QListWidget.setCurrentItem?4(QListWidgetItem, QItemSelectionModel.SelectionFlags) +QtWidgets.QListWidget.currentRow?4() -> int +QtWidgets.QListWidget.setCurrentRow?4(int) +QtWidgets.QListWidget.setCurrentRow?4(int, QItemSelectionModel.SelectionFlags) +QtWidgets.QListWidget.itemAt?4(QPoint) -> QListWidgetItem +QtWidgets.QListWidget.itemAt?4(int, int) -> QListWidgetItem +QtWidgets.QListWidget.itemWidget?4(QListWidgetItem) -> QWidget +QtWidgets.QListWidget.setItemWidget?4(QListWidgetItem, QWidget) +QtWidgets.QListWidget.visualItemRect?4(QListWidgetItem) -> QRect +QtWidgets.QListWidget.sortItems?4(Qt.SortOrder order=Qt.AscendingOrder) +QtWidgets.QListWidget.editItem?4(QListWidgetItem) +QtWidgets.QListWidget.openPersistentEditor?4(QListWidgetItem) +QtWidgets.QListWidget.closePersistentEditor?4(QListWidgetItem) +QtWidgets.QListWidget.selectedItems?4() -> unknown-type +QtWidgets.QListWidget.findItems?4(QString, Qt.MatchFlags) -> unknown-type +QtWidgets.QListWidget.clear?4() +QtWidgets.QListWidget.scrollToItem?4(QListWidgetItem, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) +QtWidgets.QListWidget.itemPressed?4(QListWidgetItem) +QtWidgets.QListWidget.itemClicked?4(QListWidgetItem) +QtWidgets.QListWidget.itemDoubleClicked?4(QListWidgetItem) +QtWidgets.QListWidget.itemActivated?4(QListWidgetItem) +QtWidgets.QListWidget.itemEntered?4(QListWidgetItem) +QtWidgets.QListWidget.itemChanged?4(QListWidgetItem) +QtWidgets.QListWidget.currentItemChanged?4(QListWidgetItem, QListWidgetItem) +QtWidgets.QListWidget.currentTextChanged?4(QString) +QtWidgets.QListWidget.currentRowChanged?4(int) +QtWidgets.QListWidget.itemSelectionChanged?4() +QtWidgets.QListWidget.mimeTypes?4() -> QStringList +QtWidgets.QListWidget.mimeData?4(unknown-type) -> QMimeData +QtWidgets.QListWidget.dropMimeData?4(int, QMimeData, Qt.DropAction) -> bool +QtWidgets.QListWidget.supportedDropActions?4() -> Qt.DropActions +QtWidgets.QListWidget.items?4(QMimeData) -> unknown-type +QtWidgets.QListWidget.indexFromItem?4(QListWidgetItem) -> QModelIndex +QtWidgets.QListWidget.itemFromIndex?4(QModelIndex) -> QListWidgetItem +QtWidgets.QListWidget.event?4(QEvent) -> bool +QtWidgets.QListWidget.setSortingEnabled?4(bool) +QtWidgets.QListWidget.isSortingEnabled?4() -> bool +QtWidgets.QListWidget.dropEvent?4(QDropEvent) +QtWidgets.QListWidget.removeItemWidget?4(QListWidgetItem) +QtWidgets.QListWidget.setSelectionModel?4(QItemSelectionModel) +QtWidgets.QListWidget.isPersistentEditorOpen?4(QListWidgetItem) -> bool +QtWidgets.QMainWindow.DockOption?10 +QtWidgets.QMainWindow.DockOption.AnimatedDocks?10 +QtWidgets.QMainWindow.DockOption.AllowNestedDocks?10 +QtWidgets.QMainWindow.DockOption.AllowTabbedDocks?10 +QtWidgets.QMainWindow.DockOption.ForceTabbedDocks?10 +QtWidgets.QMainWindow.DockOption.VerticalTabs?10 +QtWidgets.QMainWindow.DockOption.GroupedDragging?10 +QtWidgets.QMainWindow?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QMainWindow.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QMainWindow.iconSize?4() -> QSize +QtWidgets.QMainWindow.setIconSize?4(QSize) +QtWidgets.QMainWindow.toolButtonStyle?4() -> Qt.ToolButtonStyle +QtWidgets.QMainWindow.setToolButtonStyle?4(Qt.ToolButtonStyle) +QtWidgets.QMainWindow.menuBar?4() -> QMenuBar +QtWidgets.QMainWindow.setMenuBar?4(QMenuBar) +QtWidgets.QMainWindow.statusBar?4() -> QStatusBar +QtWidgets.QMainWindow.setStatusBar?4(QStatusBar) +QtWidgets.QMainWindow.centralWidget?4() -> QWidget +QtWidgets.QMainWindow.setCentralWidget?4(QWidget) +QtWidgets.QMainWindow.setCorner?4(Qt.Corner, Qt.DockWidgetArea) +QtWidgets.QMainWindow.corner?4(Qt.Corner) -> Qt.DockWidgetArea +QtWidgets.QMainWindow.addToolBarBreak?4(Qt.ToolBarArea area=Qt.TopToolBarArea) +QtWidgets.QMainWindow.insertToolBarBreak?4(QToolBar) +QtWidgets.QMainWindow.addToolBar?4(Qt.ToolBarArea, QToolBar) +QtWidgets.QMainWindow.addToolBar?4(QToolBar) +QtWidgets.QMainWindow.addToolBar?4(QString) -> QToolBar +QtWidgets.QMainWindow.insertToolBar?4(QToolBar, QToolBar) +QtWidgets.QMainWindow.removeToolBar?4(QToolBar) +QtWidgets.QMainWindow.toolBarArea?4(QToolBar) -> Qt.ToolBarArea +QtWidgets.QMainWindow.addDockWidget?4(Qt.DockWidgetArea, QDockWidget) +QtWidgets.QMainWindow.addDockWidget?4(Qt.DockWidgetArea, QDockWidget, Qt.Orientation) +QtWidgets.QMainWindow.splitDockWidget?4(QDockWidget, QDockWidget, Qt.Orientation) +QtWidgets.QMainWindow.removeDockWidget?4(QDockWidget) +QtWidgets.QMainWindow.dockWidgetArea?4(QDockWidget) -> Qt.DockWidgetArea +QtWidgets.QMainWindow.saveState?4(int version=0) -> QByteArray +QtWidgets.QMainWindow.restoreState?4(QByteArray, int version=0) -> bool +QtWidgets.QMainWindow.createPopupMenu?4() -> QMenu +QtWidgets.QMainWindow.setAnimated?4(bool) +QtWidgets.QMainWindow.setDockNestingEnabled?4(bool) +QtWidgets.QMainWindow.iconSizeChanged?4(QSize) +QtWidgets.QMainWindow.toolButtonStyleChanged?4(Qt.ToolButtonStyle) +QtWidgets.QMainWindow.tabifiedDockWidgetActivated?4(QDockWidget) +QtWidgets.QMainWindow.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QMainWindow.event?4(QEvent) -> bool +QtWidgets.QMainWindow.isAnimated?4() -> bool +QtWidgets.QMainWindow.isDockNestingEnabled?4() -> bool +QtWidgets.QMainWindow.isSeparator?4(QPoint) -> bool +QtWidgets.QMainWindow.menuWidget?4() -> QWidget +QtWidgets.QMainWindow.setMenuWidget?4(QWidget) +QtWidgets.QMainWindow.tabifyDockWidget?4(QDockWidget, QDockWidget) +QtWidgets.QMainWindow.setDockOptions?4(QMainWindow.DockOptions) +QtWidgets.QMainWindow.dockOptions?4() -> QMainWindow.DockOptions +QtWidgets.QMainWindow.removeToolBarBreak?4(QToolBar) +QtWidgets.QMainWindow.toolBarBreak?4(QToolBar) -> bool +QtWidgets.QMainWindow.setUnifiedTitleAndToolBarOnMac?4(bool) +QtWidgets.QMainWindow.unifiedTitleAndToolBarOnMac?4() -> bool +QtWidgets.QMainWindow.restoreDockWidget?4(QDockWidget) -> bool +QtWidgets.QMainWindow.documentMode?4() -> bool +QtWidgets.QMainWindow.setDocumentMode?4(bool) +QtWidgets.QMainWindow.tabShape?4() -> QTabWidget.TabShape +QtWidgets.QMainWindow.setTabShape?4(QTabWidget.TabShape) +QtWidgets.QMainWindow.tabPosition?4(Qt.DockWidgetArea) -> QTabWidget.TabPosition +QtWidgets.QMainWindow.setTabPosition?4(Qt.DockWidgetAreas, QTabWidget.TabPosition) +QtWidgets.QMainWindow.tabifiedDockWidgets?4(QDockWidget) -> unknown-type +QtWidgets.QMainWindow.takeCentralWidget?4() -> QWidget +QtWidgets.QMainWindow.resizeDocks?4(unknown-type, unknown-type, Qt.Orientation) +QtWidgets.QMainWindow.DockOptions?1() +QtWidgets.QMainWindow.DockOptions.__init__?1(self) +QtWidgets.QMainWindow.DockOptions?1(int) +QtWidgets.QMainWindow.DockOptions.__init__?1(self, int) +QtWidgets.QMainWindow.DockOptions?1(QMainWindow.DockOptions) +QtWidgets.QMainWindow.DockOptions.__init__?1(self, QMainWindow.DockOptions) +QtWidgets.QMdiArea.WindowOrder?10 +QtWidgets.QMdiArea.WindowOrder.CreationOrder?10 +QtWidgets.QMdiArea.WindowOrder.StackingOrder?10 +QtWidgets.QMdiArea.WindowOrder.ActivationHistoryOrder?10 +QtWidgets.QMdiArea.ViewMode?10 +QtWidgets.QMdiArea.ViewMode.SubWindowView?10 +QtWidgets.QMdiArea.ViewMode.TabbedView?10 +QtWidgets.QMdiArea.AreaOption?10 +QtWidgets.QMdiArea.AreaOption.DontMaximizeSubWindowOnActivation?10 +QtWidgets.QMdiArea?1(QWidget parent=None) +QtWidgets.QMdiArea.__init__?1(self, QWidget parent=None) +QtWidgets.QMdiArea.sizeHint?4() -> QSize +QtWidgets.QMdiArea.minimumSizeHint?4() -> QSize +QtWidgets.QMdiArea.activeSubWindow?4() -> QMdiSubWindow +QtWidgets.QMdiArea.addSubWindow?4(QWidget, Qt.WindowFlags flags=Qt.WindowFlags()) -> QMdiSubWindow +QtWidgets.QMdiArea.subWindowList?4(QMdiArea.WindowOrder order=QMdiArea.CreationOrder) -> unknown-type +QtWidgets.QMdiArea.currentSubWindow?4() -> QMdiSubWindow +QtWidgets.QMdiArea.removeSubWindow?4(QWidget) +QtWidgets.QMdiArea.background?4() -> QBrush +QtWidgets.QMdiArea.setBackground?4(QBrush) +QtWidgets.QMdiArea.setOption?4(QMdiArea.AreaOption, bool on=True) +QtWidgets.QMdiArea.testOption?4(QMdiArea.AreaOption) -> bool +QtWidgets.QMdiArea.subWindowActivated?4(QMdiSubWindow) +QtWidgets.QMdiArea.setActiveSubWindow?4(QMdiSubWindow) +QtWidgets.QMdiArea.tileSubWindows?4() +QtWidgets.QMdiArea.cascadeSubWindows?4() +QtWidgets.QMdiArea.closeActiveSubWindow?4() +QtWidgets.QMdiArea.closeAllSubWindows?4() +QtWidgets.QMdiArea.activateNextSubWindow?4() +QtWidgets.QMdiArea.activatePreviousSubWindow?4() +QtWidgets.QMdiArea.setupViewport?4(QWidget) +QtWidgets.QMdiArea.event?4(QEvent) -> bool +QtWidgets.QMdiArea.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QMdiArea.paintEvent?4(QPaintEvent) +QtWidgets.QMdiArea.childEvent?4(QChildEvent) +QtWidgets.QMdiArea.resizeEvent?4(QResizeEvent) +QtWidgets.QMdiArea.timerEvent?4(QTimerEvent) +QtWidgets.QMdiArea.showEvent?4(QShowEvent) +QtWidgets.QMdiArea.viewportEvent?4(QEvent) -> bool +QtWidgets.QMdiArea.scrollContentsBy?4(int, int) +QtWidgets.QMdiArea.activationOrder?4() -> QMdiArea.WindowOrder +QtWidgets.QMdiArea.setActivationOrder?4(QMdiArea.WindowOrder) +QtWidgets.QMdiArea.setViewMode?4(QMdiArea.ViewMode) +QtWidgets.QMdiArea.viewMode?4() -> QMdiArea.ViewMode +QtWidgets.QMdiArea.setTabShape?4(QTabWidget.TabShape) +QtWidgets.QMdiArea.tabShape?4() -> QTabWidget.TabShape +QtWidgets.QMdiArea.setTabPosition?4(QTabWidget.TabPosition) +QtWidgets.QMdiArea.tabPosition?4() -> QTabWidget.TabPosition +QtWidgets.QMdiArea.documentMode?4() -> bool +QtWidgets.QMdiArea.setDocumentMode?4(bool) +QtWidgets.QMdiArea.setTabsClosable?4(bool) +QtWidgets.QMdiArea.tabsClosable?4() -> bool +QtWidgets.QMdiArea.setTabsMovable?4(bool) +QtWidgets.QMdiArea.tabsMovable?4() -> bool +QtWidgets.QMdiArea.AreaOptions?1() +QtWidgets.QMdiArea.AreaOptions.__init__?1(self) +QtWidgets.QMdiArea.AreaOptions?1(int) +QtWidgets.QMdiArea.AreaOptions.__init__?1(self, int) +QtWidgets.QMdiArea.AreaOptions?1(QMdiArea.AreaOptions) +QtWidgets.QMdiArea.AreaOptions.__init__?1(self, QMdiArea.AreaOptions) +QtWidgets.QMdiSubWindow.SubWindowOption?10 +QtWidgets.QMdiSubWindow.SubWindowOption.RubberBandResize?10 +QtWidgets.QMdiSubWindow.SubWindowOption.RubberBandMove?10 +QtWidgets.QMdiSubWindow?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QMdiSubWindow.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QMdiSubWindow.sizeHint?4() -> QSize +QtWidgets.QMdiSubWindow.minimumSizeHint?4() -> QSize +QtWidgets.QMdiSubWindow.setWidget?4(QWidget) +QtWidgets.QMdiSubWindow.widget?4() -> QWidget +QtWidgets.QMdiSubWindow.isShaded?4() -> bool +QtWidgets.QMdiSubWindow.setOption?4(QMdiSubWindow.SubWindowOption, bool on=True) +QtWidgets.QMdiSubWindow.testOption?4(QMdiSubWindow.SubWindowOption) -> bool +QtWidgets.QMdiSubWindow.setKeyboardSingleStep?4(int) +QtWidgets.QMdiSubWindow.keyboardSingleStep?4() -> int +QtWidgets.QMdiSubWindow.setKeyboardPageStep?4(int) +QtWidgets.QMdiSubWindow.keyboardPageStep?4() -> int +QtWidgets.QMdiSubWindow.setSystemMenu?4(QMenu) +QtWidgets.QMdiSubWindow.systemMenu?4() -> QMenu +QtWidgets.QMdiSubWindow.mdiArea?4() -> QMdiArea +QtWidgets.QMdiSubWindow.windowStateChanged?4(Qt.WindowStates, Qt.WindowStates) +QtWidgets.QMdiSubWindow.aboutToActivate?4() +QtWidgets.QMdiSubWindow.showSystemMenu?4() +QtWidgets.QMdiSubWindow.showShaded?4() +QtWidgets.QMdiSubWindow.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QMdiSubWindow.event?4(QEvent) -> bool +QtWidgets.QMdiSubWindow.showEvent?4(QShowEvent) +QtWidgets.QMdiSubWindow.hideEvent?4(QHideEvent) +QtWidgets.QMdiSubWindow.changeEvent?4(QEvent) +QtWidgets.QMdiSubWindow.closeEvent?4(QCloseEvent) +QtWidgets.QMdiSubWindow.leaveEvent?4(QEvent) +QtWidgets.QMdiSubWindow.resizeEvent?4(QResizeEvent) +QtWidgets.QMdiSubWindow.timerEvent?4(QTimerEvent) +QtWidgets.QMdiSubWindow.moveEvent?4(QMoveEvent) +QtWidgets.QMdiSubWindow.paintEvent?4(QPaintEvent) +QtWidgets.QMdiSubWindow.mousePressEvent?4(QMouseEvent) +QtWidgets.QMdiSubWindow.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QMdiSubWindow.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QMdiSubWindow.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QMdiSubWindow.keyPressEvent?4(QKeyEvent) +QtWidgets.QMdiSubWindow.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QMdiSubWindow.focusInEvent?4(QFocusEvent) +QtWidgets.QMdiSubWindow.focusOutEvent?4(QFocusEvent) +QtWidgets.QMdiSubWindow.childEvent?4(QChildEvent) +QtWidgets.QMdiSubWindow.SubWindowOptions?1() +QtWidgets.QMdiSubWindow.SubWindowOptions.__init__?1(self) +QtWidgets.QMdiSubWindow.SubWindowOptions?1(int) +QtWidgets.QMdiSubWindow.SubWindowOptions.__init__?1(self, int) +QtWidgets.QMdiSubWindow.SubWindowOptions?1(QMdiSubWindow.SubWindowOptions) +QtWidgets.QMdiSubWindow.SubWindowOptions.__init__?1(self, QMdiSubWindow.SubWindowOptions) +QtWidgets.QMenu?1(QWidget parent=None) +QtWidgets.QMenu.__init__?1(self, QWidget parent=None) +QtWidgets.QMenu?1(QString, QWidget parent=None) +QtWidgets.QMenu.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QMenu.addAction?4(QAction) +QtWidgets.QMenu.addAction?4(QString) -> QAction +QtWidgets.QMenu.addAction?4(QIcon, QString) -> QAction +QtWidgets.QMenu.addAction?4(QString, Any, QKeySequence shortcut=0) -> QAction +QtWidgets.QMenu.addAction?4(QIcon, QString, Any, QKeySequence shortcut=0) -> QAction +QtWidgets.QMenu.addMenu?4(QMenu) -> QAction +QtWidgets.QMenu.addMenu?4(QString) -> QMenu +QtWidgets.QMenu.addMenu?4(QIcon, QString) -> QMenu +QtWidgets.QMenu.addSeparator?4() -> QAction +QtWidgets.QMenu.insertMenu?4(QAction, QMenu) -> QAction +QtWidgets.QMenu.insertSeparator?4(QAction) -> QAction +QtWidgets.QMenu.clear?4() +QtWidgets.QMenu.setTearOffEnabled?4(bool) +QtWidgets.QMenu.isTearOffEnabled?4() -> bool +QtWidgets.QMenu.isTearOffMenuVisible?4() -> bool +QtWidgets.QMenu.hideTearOffMenu?4() +QtWidgets.QMenu.setDefaultAction?4(QAction) +QtWidgets.QMenu.defaultAction?4() -> QAction +QtWidgets.QMenu.setActiveAction?4(QAction) +QtWidgets.QMenu.activeAction?4() -> QAction +QtWidgets.QMenu.popup?4(QPoint, QAction action=None) +QtWidgets.QMenu.exec_?4() -> QAction +QtWidgets.QMenu.exec?4() -> QAction +QtWidgets.QMenu.exec_?4(QPoint, QAction action=None) -> QAction +QtWidgets.QMenu.exec?4(QPoint, QAction action=None) -> QAction +QtWidgets.QMenu.exec_?4(unknown-type, QPoint, QAction at=None, QWidget parent=None) -> QAction +QtWidgets.QMenu.exec?4(unknown-type, QPoint, QAction at=None, QWidget parent=None) -> QAction +QtWidgets.QMenu.sizeHint?4() -> QSize +QtWidgets.QMenu.actionGeometry?4(QAction) -> QRect +QtWidgets.QMenu.actionAt?4(QPoint) -> QAction +QtWidgets.QMenu.menuAction?4() -> QAction +QtWidgets.QMenu.title?4() -> QString +QtWidgets.QMenu.setTitle?4(QString) +QtWidgets.QMenu.icon?4() -> QIcon +QtWidgets.QMenu.setIcon?4(QIcon) +QtWidgets.QMenu.setNoReplayFor?4(QWidget) +QtWidgets.QMenu.aboutToHide?4() +QtWidgets.QMenu.aboutToShow?4() +QtWidgets.QMenu.hovered?4(QAction) +QtWidgets.QMenu.triggered?4(QAction) +QtWidgets.QMenu.columnCount?4() -> int +QtWidgets.QMenu.initStyleOption?4(QStyleOptionMenuItem, QAction) +QtWidgets.QMenu.changeEvent?4(QEvent) +QtWidgets.QMenu.keyPressEvent?4(QKeyEvent) +QtWidgets.QMenu.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QMenu.mousePressEvent?4(QMouseEvent) +QtWidgets.QMenu.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QMenu.wheelEvent?4(QWheelEvent) +QtWidgets.QMenu.enterEvent?4(QEvent) +QtWidgets.QMenu.leaveEvent?4(QEvent) +QtWidgets.QMenu.hideEvent?4(QHideEvent) +QtWidgets.QMenu.paintEvent?4(QPaintEvent) +QtWidgets.QMenu.actionEvent?4(QActionEvent) +QtWidgets.QMenu.timerEvent?4(QTimerEvent) +QtWidgets.QMenu.event?4(QEvent) -> bool +QtWidgets.QMenu.focusNextPrevChild?4(bool) -> bool +QtWidgets.QMenu.isEmpty?4() -> bool +QtWidgets.QMenu.separatorsCollapsible?4() -> bool +QtWidgets.QMenu.setSeparatorsCollapsible?4(bool) +QtWidgets.QMenu.addSection?4(QString) -> QAction +QtWidgets.QMenu.addSection?4(QIcon, QString) -> QAction +QtWidgets.QMenu.insertSection?4(QAction, QString) -> QAction +QtWidgets.QMenu.insertSection?4(QAction, QIcon, QString) -> QAction +QtWidgets.QMenu.toolTipsVisible?4() -> bool +QtWidgets.QMenu.setToolTipsVisible?4(bool) +QtWidgets.QMenu.showTearOffMenu?4() +QtWidgets.QMenu.showTearOffMenu?4(QPoint) +QtWidgets.QMenuBar?1(QWidget parent=None) +QtWidgets.QMenuBar.__init__?1(self, QWidget parent=None) +QtWidgets.QMenuBar.addAction?4(QAction) +QtWidgets.QMenuBar.addAction?4(QString) -> QAction +QtWidgets.QMenuBar.addAction?4(QString, Any) -> QAction +QtWidgets.QMenuBar.addMenu?4(QMenu) -> QAction +QtWidgets.QMenuBar.addMenu?4(QString) -> QMenu +QtWidgets.QMenuBar.addMenu?4(QIcon, QString) -> QMenu +QtWidgets.QMenuBar.addSeparator?4() -> QAction +QtWidgets.QMenuBar.insertMenu?4(QAction, QMenu) -> QAction +QtWidgets.QMenuBar.insertSeparator?4(QAction) -> QAction +QtWidgets.QMenuBar.clear?4() +QtWidgets.QMenuBar.activeAction?4() -> QAction +QtWidgets.QMenuBar.setActiveAction?4(QAction) +QtWidgets.QMenuBar.setDefaultUp?4(bool) +QtWidgets.QMenuBar.isDefaultUp?4() -> bool +QtWidgets.QMenuBar.sizeHint?4() -> QSize +QtWidgets.QMenuBar.minimumSizeHint?4() -> QSize +QtWidgets.QMenuBar.heightForWidth?4(int) -> int +QtWidgets.QMenuBar.actionGeometry?4(QAction) -> QRect +QtWidgets.QMenuBar.actionAt?4(QPoint) -> QAction +QtWidgets.QMenuBar.setCornerWidget?4(QWidget, Qt.Corner corner=Qt.TopRightCorner) +QtWidgets.QMenuBar.cornerWidget?4(Qt.Corner corner=Qt.TopRightCorner) -> QWidget +QtWidgets.QMenuBar.setVisible?4(bool) +QtWidgets.QMenuBar.triggered?4(QAction) +QtWidgets.QMenuBar.hovered?4(QAction) +QtWidgets.QMenuBar.initStyleOption?4(QStyleOptionMenuItem, QAction) +QtWidgets.QMenuBar.changeEvent?4(QEvent) +QtWidgets.QMenuBar.keyPressEvent?4(QKeyEvent) +QtWidgets.QMenuBar.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QMenuBar.mousePressEvent?4(QMouseEvent) +QtWidgets.QMenuBar.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QMenuBar.leaveEvent?4(QEvent) +QtWidgets.QMenuBar.paintEvent?4(QPaintEvent) +QtWidgets.QMenuBar.resizeEvent?4(QResizeEvent) +QtWidgets.QMenuBar.actionEvent?4(QActionEvent) +QtWidgets.QMenuBar.focusOutEvent?4(QFocusEvent) +QtWidgets.QMenuBar.focusInEvent?4(QFocusEvent) +QtWidgets.QMenuBar.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QMenuBar.event?4(QEvent) -> bool +QtWidgets.QMenuBar.timerEvent?4(QTimerEvent) +QtWidgets.QMenuBar.isNativeMenuBar?4() -> bool +QtWidgets.QMenuBar.setNativeMenuBar?4(bool) +QtWidgets.QMessageBox.StandardButton?10 +QtWidgets.QMessageBox.StandardButton.NoButton?10 +QtWidgets.QMessageBox.StandardButton.Ok?10 +QtWidgets.QMessageBox.StandardButton.Save?10 +QtWidgets.QMessageBox.StandardButton.SaveAll?10 +QtWidgets.QMessageBox.StandardButton.Open?10 +QtWidgets.QMessageBox.StandardButton.Yes?10 +QtWidgets.QMessageBox.StandardButton.YesToAll?10 +QtWidgets.QMessageBox.StandardButton.No?10 +QtWidgets.QMessageBox.StandardButton.NoToAll?10 +QtWidgets.QMessageBox.StandardButton.Abort?10 +QtWidgets.QMessageBox.StandardButton.Retry?10 +QtWidgets.QMessageBox.StandardButton.Ignore?10 +QtWidgets.QMessageBox.StandardButton.Close?10 +QtWidgets.QMessageBox.StandardButton.Cancel?10 +QtWidgets.QMessageBox.StandardButton.Discard?10 +QtWidgets.QMessageBox.StandardButton.Help?10 +QtWidgets.QMessageBox.StandardButton.Apply?10 +QtWidgets.QMessageBox.StandardButton.Reset?10 +QtWidgets.QMessageBox.StandardButton.RestoreDefaults?10 +QtWidgets.QMessageBox.StandardButton.FirstButton?10 +QtWidgets.QMessageBox.StandardButton.LastButton?10 +QtWidgets.QMessageBox.StandardButton.YesAll?10 +QtWidgets.QMessageBox.StandardButton.NoAll?10 +QtWidgets.QMessageBox.StandardButton.Default?10 +QtWidgets.QMessageBox.StandardButton.Escape?10 +QtWidgets.QMessageBox.StandardButton.FlagMask?10 +QtWidgets.QMessageBox.StandardButton.ButtonMask?10 +QtWidgets.QMessageBox.Icon?10 +QtWidgets.QMessageBox.Icon.NoIcon?10 +QtWidgets.QMessageBox.Icon.Information?10 +QtWidgets.QMessageBox.Icon.Warning?10 +QtWidgets.QMessageBox.Icon.Critical?10 +QtWidgets.QMessageBox.Icon.Question?10 +QtWidgets.QMessageBox.ButtonRole?10 +QtWidgets.QMessageBox.ButtonRole.InvalidRole?10 +QtWidgets.QMessageBox.ButtonRole.AcceptRole?10 +QtWidgets.QMessageBox.ButtonRole.RejectRole?10 +QtWidgets.QMessageBox.ButtonRole.DestructiveRole?10 +QtWidgets.QMessageBox.ButtonRole.ActionRole?10 +QtWidgets.QMessageBox.ButtonRole.HelpRole?10 +QtWidgets.QMessageBox.ButtonRole.YesRole?10 +QtWidgets.QMessageBox.ButtonRole.NoRole?10 +QtWidgets.QMessageBox.ButtonRole.ResetRole?10 +QtWidgets.QMessageBox.ButtonRole.ApplyRole?10 +QtWidgets.QMessageBox?1(QWidget parent=None) +QtWidgets.QMessageBox.__init__?1(self, QWidget parent=None) +QtWidgets.QMessageBox?1(QMessageBox.Icon, QString, QString, QMessageBox.StandardButtons buttons=QMessageBox.NoButton, QWidget parent=None, Qt.WindowFlags flags=Qt.Dialog|Qt.MSWindowsFixedSizeDialogHint) +QtWidgets.QMessageBox.__init__?1(self, QMessageBox.Icon, QString, QString, QMessageBox.StandardButtons buttons=QMessageBox.NoButton, QWidget parent=None, Qt.WindowFlags flags=Qt.Dialog|Qt.MSWindowsFixedSizeDialogHint) +QtWidgets.QMessageBox.text?4() -> QString +QtWidgets.QMessageBox.setText?4(QString) +QtWidgets.QMessageBox.icon?4() -> QMessageBox.Icon +QtWidgets.QMessageBox.setIcon?4(QMessageBox.Icon) +QtWidgets.QMessageBox.iconPixmap?4() -> QPixmap +QtWidgets.QMessageBox.setIconPixmap?4(QPixmap) +QtWidgets.QMessageBox.textFormat?4() -> Qt.TextFormat +QtWidgets.QMessageBox.setTextFormat?4(Qt.TextFormat) +QtWidgets.QMessageBox.information?4(QWidget, QString, QString, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton +QtWidgets.QMessageBox.question?4(QWidget, QString, QString, QMessageBox.StandardButtons buttons=QMessageBox.StandardButtons(QMessageBox.Yes|QMessageBox.No), QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton +QtWidgets.QMessageBox.warning?4(QWidget, QString, QString, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton +QtWidgets.QMessageBox.critical?4(QWidget, QString, QString, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton +QtWidgets.QMessageBox.about?4(QWidget, QString, QString) +QtWidgets.QMessageBox.aboutQt?4(QWidget, QString title='') +QtWidgets.QMessageBox.standardIcon?4(QMessageBox.Icon) -> QPixmap +QtWidgets.QMessageBox.event?4(QEvent) -> bool +QtWidgets.QMessageBox.resizeEvent?4(QResizeEvent) +QtWidgets.QMessageBox.showEvent?4(QShowEvent) +QtWidgets.QMessageBox.closeEvent?4(QCloseEvent) +QtWidgets.QMessageBox.keyPressEvent?4(QKeyEvent) +QtWidgets.QMessageBox.changeEvent?4(QEvent) +QtWidgets.QMessageBox.addButton?4(QAbstractButton, QMessageBox.ButtonRole) +QtWidgets.QMessageBox.addButton?4(QString, QMessageBox.ButtonRole) -> QPushButton +QtWidgets.QMessageBox.addButton?4(QMessageBox.StandardButton) -> QPushButton +QtWidgets.QMessageBox.removeButton?4(QAbstractButton) +QtWidgets.QMessageBox.setStandardButtons?4(QMessageBox.StandardButtons) +QtWidgets.QMessageBox.standardButtons?4() -> QMessageBox.StandardButtons +QtWidgets.QMessageBox.standardButton?4(QAbstractButton) -> QMessageBox.StandardButton +QtWidgets.QMessageBox.button?4(QMessageBox.StandardButton) -> QAbstractButton +QtWidgets.QMessageBox.defaultButton?4() -> QPushButton +QtWidgets.QMessageBox.setDefaultButton?4(QPushButton) +QtWidgets.QMessageBox.setDefaultButton?4(QMessageBox.StandardButton) +QtWidgets.QMessageBox.escapeButton?4() -> QAbstractButton +QtWidgets.QMessageBox.setEscapeButton?4(QAbstractButton) +QtWidgets.QMessageBox.setEscapeButton?4(QMessageBox.StandardButton) +QtWidgets.QMessageBox.clickedButton?4() -> QAbstractButton +QtWidgets.QMessageBox.informativeText?4() -> QString +QtWidgets.QMessageBox.setInformativeText?4(QString) +QtWidgets.QMessageBox.detailedText?4() -> QString +QtWidgets.QMessageBox.setDetailedText?4(QString) +QtWidgets.QMessageBox.setWindowTitle?4(QString) +QtWidgets.QMessageBox.setWindowModality?4(Qt.WindowModality) +QtWidgets.QMessageBox.open?4() +QtWidgets.QMessageBox.open?4(Any) +QtWidgets.QMessageBox.buttons?4() -> unknown-type +QtWidgets.QMessageBox.buttonRole?4(QAbstractButton) -> QMessageBox.ButtonRole +QtWidgets.QMessageBox.buttonClicked?4(QAbstractButton) +QtWidgets.QMessageBox.setTextInteractionFlags?4(Qt.TextInteractionFlags) +QtWidgets.QMessageBox.textInteractionFlags?4() -> Qt.TextInteractionFlags +QtWidgets.QMessageBox.setCheckBox?4(QCheckBox) +QtWidgets.QMessageBox.checkBox?4() -> QCheckBox +QtWidgets.QMessageBox.StandardButtons?1() +QtWidgets.QMessageBox.StandardButtons.__init__?1(self) +QtWidgets.QMessageBox.StandardButtons?1(int) +QtWidgets.QMessageBox.StandardButtons.__init__?1(self, int) +QtWidgets.QMessageBox.StandardButtons?1(QMessageBox.StandardButtons) +QtWidgets.QMessageBox.StandardButtons.__init__?1(self, QMessageBox.StandardButtons) +QtWidgets.QMouseEventTransition?1(QState sourceState=None) +QtWidgets.QMouseEventTransition.__init__?1(self, QState sourceState=None) +QtWidgets.QMouseEventTransition?1(QObject, QEvent.Type, Qt.MouseButton, QState sourceState=None) +QtWidgets.QMouseEventTransition.__init__?1(self, QObject, QEvent.Type, Qt.MouseButton, QState sourceState=None) +QtWidgets.QMouseEventTransition.button?4() -> Qt.MouseButton +QtWidgets.QMouseEventTransition.setButton?4(Qt.MouseButton) +QtWidgets.QMouseEventTransition.modifierMask?4() -> Qt.KeyboardModifiers +QtWidgets.QMouseEventTransition.setModifierMask?4(Qt.KeyboardModifiers) +QtWidgets.QMouseEventTransition.hitTestPath?4() -> QPainterPath +QtWidgets.QMouseEventTransition.setHitTestPath?4(QPainterPath) +QtWidgets.QMouseEventTransition.onTransition?4(QEvent) +QtWidgets.QMouseEventTransition.eventTest?4(QEvent) -> bool +QtWidgets.QOpenGLWidget.UpdateBehavior?10 +QtWidgets.QOpenGLWidget.UpdateBehavior.NoPartialUpdate?10 +QtWidgets.QOpenGLWidget.UpdateBehavior.PartialUpdate?10 +QtWidgets.QOpenGLWidget?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QOpenGLWidget.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QOpenGLWidget.setFormat?4(QSurfaceFormat) +QtWidgets.QOpenGLWidget.format?4() -> QSurfaceFormat +QtWidgets.QOpenGLWidget.isValid?4() -> bool +QtWidgets.QOpenGLWidget.makeCurrent?4() +QtWidgets.QOpenGLWidget.doneCurrent?4() +QtWidgets.QOpenGLWidget.context?4() -> QOpenGLContext +QtWidgets.QOpenGLWidget.defaultFramebufferObject?4() -> int +QtWidgets.QOpenGLWidget.grabFramebuffer?4() -> QImage +QtWidgets.QOpenGLWidget.aboutToCompose?4() +QtWidgets.QOpenGLWidget.frameSwapped?4() +QtWidgets.QOpenGLWidget.aboutToResize?4() +QtWidgets.QOpenGLWidget.resized?4() +QtWidgets.QOpenGLWidget.initializeGL?4() +QtWidgets.QOpenGLWidget.resizeGL?4(int, int) +QtWidgets.QOpenGLWidget.paintGL?4() +QtWidgets.QOpenGLWidget.paintEvent?4(QPaintEvent) +QtWidgets.QOpenGLWidget.resizeEvent?4(QResizeEvent) +QtWidgets.QOpenGLWidget.event?4(QEvent) -> bool +QtWidgets.QOpenGLWidget.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtWidgets.QOpenGLWidget.paintEngine?4() -> QPaintEngine +QtWidgets.QOpenGLWidget.setUpdateBehavior?4(QOpenGLWidget.UpdateBehavior) +QtWidgets.QOpenGLWidget.updateBehavior?4() -> QOpenGLWidget.UpdateBehavior +QtWidgets.QOpenGLWidget.textureFormat?4() -> int +QtWidgets.QOpenGLWidget.setTextureFormat?4(int) +QtWidgets.QPlainTextEdit.LineWrapMode?10 +QtWidgets.QPlainTextEdit.LineWrapMode.NoWrap?10 +QtWidgets.QPlainTextEdit.LineWrapMode.WidgetWidth?10 +QtWidgets.QPlainTextEdit?1(QWidget parent=None) +QtWidgets.QPlainTextEdit.__init__?1(self, QWidget parent=None) +QtWidgets.QPlainTextEdit?1(QString, QWidget parent=None) +QtWidgets.QPlainTextEdit.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QPlainTextEdit.setDocument?4(QTextDocument) +QtWidgets.QPlainTextEdit.document?4() -> QTextDocument +QtWidgets.QPlainTextEdit.setTextCursor?4(QTextCursor) +QtWidgets.QPlainTextEdit.textCursor?4() -> QTextCursor +QtWidgets.QPlainTextEdit.isReadOnly?4() -> bool +QtWidgets.QPlainTextEdit.setReadOnly?4(bool) +QtWidgets.QPlainTextEdit.setTextInteractionFlags?4(Qt.TextInteractionFlags) +QtWidgets.QPlainTextEdit.textInteractionFlags?4() -> Qt.TextInteractionFlags +QtWidgets.QPlainTextEdit.mergeCurrentCharFormat?4(QTextCharFormat) +QtWidgets.QPlainTextEdit.setCurrentCharFormat?4(QTextCharFormat) +QtWidgets.QPlainTextEdit.currentCharFormat?4() -> QTextCharFormat +QtWidgets.QPlainTextEdit.tabChangesFocus?4() -> bool +QtWidgets.QPlainTextEdit.setTabChangesFocus?4(bool) +QtWidgets.QPlainTextEdit.setDocumentTitle?4(QString) +QtWidgets.QPlainTextEdit.documentTitle?4() -> QString +QtWidgets.QPlainTextEdit.isUndoRedoEnabled?4() -> bool +QtWidgets.QPlainTextEdit.setUndoRedoEnabled?4(bool) +QtWidgets.QPlainTextEdit.setMaximumBlockCount?4(int) +QtWidgets.QPlainTextEdit.maximumBlockCount?4() -> int +QtWidgets.QPlainTextEdit.lineWrapMode?4() -> QPlainTextEdit.LineWrapMode +QtWidgets.QPlainTextEdit.setLineWrapMode?4(QPlainTextEdit.LineWrapMode) +QtWidgets.QPlainTextEdit.wordWrapMode?4() -> QTextOption.WrapMode +QtWidgets.QPlainTextEdit.setWordWrapMode?4(QTextOption.WrapMode) +QtWidgets.QPlainTextEdit.setBackgroundVisible?4(bool) +QtWidgets.QPlainTextEdit.backgroundVisible?4() -> bool +QtWidgets.QPlainTextEdit.setCenterOnScroll?4(bool) +QtWidgets.QPlainTextEdit.centerOnScroll?4() -> bool +QtWidgets.QPlainTextEdit.find?4(QString, QTextDocument.FindFlags options=QTextDocument.FindFlags()) -> bool +QtWidgets.QPlainTextEdit.toPlainText?4() -> QString +QtWidgets.QPlainTextEdit.ensureCursorVisible?4() +QtWidgets.QPlainTextEdit.loadResource?4(int, QUrl) -> QVariant +QtWidgets.QPlainTextEdit.createStandardContextMenu?4() -> QMenu +QtWidgets.QPlainTextEdit.createStandardContextMenu?4(QPoint) -> QMenu +QtWidgets.QPlainTextEdit.cursorForPosition?4(QPoint) -> QTextCursor +QtWidgets.QPlainTextEdit.cursorRect?4(QTextCursor) -> QRect +QtWidgets.QPlainTextEdit.cursorRect?4() -> QRect +QtWidgets.QPlainTextEdit.overwriteMode?4() -> bool +QtWidgets.QPlainTextEdit.setOverwriteMode?4(bool) +QtWidgets.QPlainTextEdit.tabStopWidth?4() -> int +QtWidgets.QPlainTextEdit.setTabStopWidth?4(int) +QtWidgets.QPlainTextEdit.cursorWidth?4() -> int +QtWidgets.QPlainTextEdit.setCursorWidth?4(int) +QtWidgets.QPlainTextEdit.setExtraSelections?4(unknown-type) +QtWidgets.QPlainTextEdit.extraSelections?4() -> unknown-type +QtWidgets.QPlainTextEdit.moveCursor?4(QTextCursor.MoveOperation, QTextCursor.MoveMode mode=QTextCursor.MoveAnchor) +QtWidgets.QPlainTextEdit.canPaste?4() -> bool +QtWidgets.QPlainTextEdit.print_?4(QPagedPaintDevice) +QtWidgets.QPlainTextEdit.print?4(QPagedPaintDevice) +QtWidgets.QPlainTextEdit.blockCount?4() -> int +QtWidgets.QPlainTextEdit.setPlainText?4(QString) +QtWidgets.QPlainTextEdit.cut?4() +QtWidgets.QPlainTextEdit.copy?4() +QtWidgets.QPlainTextEdit.paste?4() +QtWidgets.QPlainTextEdit.undo?4() +QtWidgets.QPlainTextEdit.redo?4() +QtWidgets.QPlainTextEdit.clear?4() +QtWidgets.QPlainTextEdit.selectAll?4() +QtWidgets.QPlainTextEdit.insertPlainText?4(QString) +QtWidgets.QPlainTextEdit.appendPlainText?4(QString) +QtWidgets.QPlainTextEdit.appendHtml?4(QString) +QtWidgets.QPlainTextEdit.centerCursor?4() +QtWidgets.QPlainTextEdit.textChanged?4() +QtWidgets.QPlainTextEdit.undoAvailable?4(bool) +QtWidgets.QPlainTextEdit.redoAvailable?4(bool) +QtWidgets.QPlainTextEdit.copyAvailable?4(bool) +QtWidgets.QPlainTextEdit.selectionChanged?4() +QtWidgets.QPlainTextEdit.cursorPositionChanged?4() +QtWidgets.QPlainTextEdit.updateRequest?4(QRect, int) +QtWidgets.QPlainTextEdit.blockCountChanged?4(int) +QtWidgets.QPlainTextEdit.modificationChanged?4(bool) +QtWidgets.QPlainTextEdit.event?4(QEvent) -> bool +QtWidgets.QPlainTextEdit.timerEvent?4(QTimerEvent) +QtWidgets.QPlainTextEdit.keyPressEvent?4(QKeyEvent) +QtWidgets.QPlainTextEdit.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QPlainTextEdit.resizeEvent?4(QResizeEvent) +QtWidgets.QPlainTextEdit.paintEvent?4(QPaintEvent) +QtWidgets.QPlainTextEdit.mousePressEvent?4(QMouseEvent) +QtWidgets.QPlainTextEdit.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QPlainTextEdit.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QPlainTextEdit.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QPlainTextEdit.focusNextPrevChild?4(bool) -> bool +QtWidgets.QPlainTextEdit.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QPlainTextEdit.dragEnterEvent?4(QDragEnterEvent) +QtWidgets.QPlainTextEdit.dragLeaveEvent?4(QDragLeaveEvent) +QtWidgets.QPlainTextEdit.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QPlainTextEdit.dropEvent?4(QDropEvent) +QtWidgets.QPlainTextEdit.focusInEvent?4(QFocusEvent) +QtWidgets.QPlainTextEdit.focusOutEvent?4(QFocusEvent) +QtWidgets.QPlainTextEdit.showEvent?4(QShowEvent) +QtWidgets.QPlainTextEdit.changeEvent?4(QEvent) +QtWidgets.QPlainTextEdit.wheelEvent?4(QWheelEvent) +QtWidgets.QPlainTextEdit.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QPlainTextEdit.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QPlainTextEdit.createMimeDataFromSelection?4() -> QMimeData +QtWidgets.QPlainTextEdit.canInsertFromMimeData?4(QMimeData) -> bool +QtWidgets.QPlainTextEdit.insertFromMimeData?4(QMimeData) +QtWidgets.QPlainTextEdit.scrollContentsBy?4(int, int) +QtWidgets.QPlainTextEdit.firstVisibleBlock?4() -> QTextBlock +QtWidgets.QPlainTextEdit.contentOffset?4() -> QPointF +QtWidgets.QPlainTextEdit.blockBoundingRect?4(QTextBlock) -> QRectF +QtWidgets.QPlainTextEdit.blockBoundingGeometry?4(QTextBlock) -> QRectF +QtWidgets.QPlainTextEdit.getPaintContext?4() -> QAbstractTextDocumentLayout.PaintContext +QtWidgets.QPlainTextEdit.anchorAt?4(QPoint) -> QString +QtWidgets.QPlainTextEdit.zoomIn?4(int range=1) +QtWidgets.QPlainTextEdit.zoomOut?4(int range=1) +QtWidgets.QPlainTextEdit.setPlaceholderText?4(QString) +QtWidgets.QPlainTextEdit.placeholderText?4() -> QString +QtWidgets.QPlainTextEdit.find?4(QRegExp, QTextDocument.FindFlags options=QTextDocument.FindFlags()) -> bool +QtWidgets.QPlainTextEdit.find?4(QRegularExpression, QTextDocument.FindFlags options=QTextDocument.FindFlags()) -> bool +QtWidgets.QPlainTextEdit.inputMethodQuery?4(Qt.InputMethodQuery, QVariant) -> QVariant +QtWidgets.QPlainTextEdit.tabStopDistance?4() -> float +QtWidgets.QPlainTextEdit.setTabStopDistance?4(float) +QtWidgets.QPlainTextDocumentLayout?1(QTextDocument) +QtWidgets.QPlainTextDocumentLayout.__init__?1(self, QTextDocument) +QtWidgets.QPlainTextDocumentLayout.draw?4(QPainter, QAbstractTextDocumentLayout.PaintContext) +QtWidgets.QPlainTextDocumentLayout.hitTest?4(QPointF, Qt.HitTestAccuracy) -> int +QtWidgets.QPlainTextDocumentLayout.pageCount?4() -> int +QtWidgets.QPlainTextDocumentLayout.documentSize?4() -> QSizeF +QtWidgets.QPlainTextDocumentLayout.frameBoundingRect?4(QTextFrame) -> QRectF +QtWidgets.QPlainTextDocumentLayout.blockBoundingRect?4(QTextBlock) -> QRectF +QtWidgets.QPlainTextDocumentLayout.ensureBlockLayout?4(QTextBlock) +QtWidgets.QPlainTextDocumentLayout.setCursorWidth?4(int) +QtWidgets.QPlainTextDocumentLayout.cursorWidth?4() -> int +QtWidgets.QPlainTextDocumentLayout.requestUpdate?4() +QtWidgets.QPlainTextDocumentLayout.documentChanged?4(int, int, int) +QtWidgets.QProgressBar.Direction?10 +QtWidgets.QProgressBar.Direction.TopToBottom?10 +QtWidgets.QProgressBar.Direction.BottomToTop?10 +QtWidgets.QProgressBar?1(QWidget parent=None) +QtWidgets.QProgressBar.__init__?1(self, QWidget parent=None) +QtWidgets.QProgressBar.minimum?4() -> int +QtWidgets.QProgressBar.maximum?4() -> int +QtWidgets.QProgressBar.setRange?4(int, int) +QtWidgets.QProgressBar.value?4() -> int +QtWidgets.QProgressBar.text?4() -> QString +QtWidgets.QProgressBar.setTextVisible?4(bool) +QtWidgets.QProgressBar.isTextVisible?4() -> bool +QtWidgets.QProgressBar.alignment?4() -> Qt.Alignment +QtWidgets.QProgressBar.setAlignment?4(Qt.Alignment) +QtWidgets.QProgressBar.sizeHint?4() -> QSize +QtWidgets.QProgressBar.minimumSizeHint?4() -> QSize +QtWidgets.QProgressBar.orientation?4() -> Qt.Orientation +QtWidgets.QProgressBar.setInvertedAppearance?4(bool) +QtWidgets.QProgressBar.setTextDirection?4(QProgressBar.Direction) +QtWidgets.QProgressBar.setFormat?4(QString) +QtWidgets.QProgressBar.format?4() -> QString +QtWidgets.QProgressBar.resetFormat?4() +QtWidgets.QProgressBar.reset?4() +QtWidgets.QProgressBar.setMinimum?4(int) +QtWidgets.QProgressBar.setMaximum?4(int) +QtWidgets.QProgressBar.setValue?4(int) +QtWidgets.QProgressBar.setOrientation?4(Qt.Orientation) +QtWidgets.QProgressBar.valueChanged?4(int) +QtWidgets.QProgressBar.initStyleOption?4(QStyleOptionProgressBar) +QtWidgets.QProgressBar.event?4(QEvent) -> bool +QtWidgets.QProgressBar.paintEvent?4(QPaintEvent) +QtWidgets.QProgressDialog?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QProgressDialog.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QProgressDialog?1(QString, QString, int, int, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QProgressDialog.__init__?1(self, QString, QString, int, int, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QProgressDialog.setLabel?4(QLabel) +QtWidgets.QProgressDialog.setCancelButton?4(QPushButton) +QtWidgets.QProgressDialog.setBar?4(QProgressBar) +QtWidgets.QProgressDialog.wasCanceled?4() -> bool +QtWidgets.QProgressDialog.minimum?4() -> int +QtWidgets.QProgressDialog.maximum?4() -> int +QtWidgets.QProgressDialog.setRange?4(int, int) +QtWidgets.QProgressDialog.value?4() -> int +QtWidgets.QProgressDialog.sizeHint?4() -> QSize +QtWidgets.QProgressDialog.labelText?4() -> QString +QtWidgets.QProgressDialog.minimumDuration?4() -> int +QtWidgets.QProgressDialog.setAutoReset?4(bool) +QtWidgets.QProgressDialog.autoReset?4() -> bool +QtWidgets.QProgressDialog.setAutoClose?4(bool) +QtWidgets.QProgressDialog.autoClose?4() -> bool +QtWidgets.QProgressDialog.cancel?4() +QtWidgets.QProgressDialog.reset?4() +QtWidgets.QProgressDialog.setMaximum?4(int) +QtWidgets.QProgressDialog.setMinimum?4(int) +QtWidgets.QProgressDialog.setValue?4(int) +QtWidgets.QProgressDialog.setLabelText?4(QString) +QtWidgets.QProgressDialog.setCancelButtonText?4(QString) +QtWidgets.QProgressDialog.setMinimumDuration?4(int) +QtWidgets.QProgressDialog.canceled?4() +QtWidgets.QProgressDialog.resizeEvent?4(QResizeEvent) +QtWidgets.QProgressDialog.closeEvent?4(QCloseEvent) +QtWidgets.QProgressDialog.changeEvent?4(QEvent) +QtWidgets.QProgressDialog.showEvent?4(QShowEvent) +QtWidgets.QProgressDialog.forceShow?4() +QtWidgets.QProgressDialog.open?4() +QtWidgets.QProgressDialog.open?4(Any) +QtWidgets.QProxyStyle?1(QStyle style=None) +QtWidgets.QProxyStyle.__init__?1(self, QStyle style=None) +QtWidgets.QProxyStyle?1(QString) +QtWidgets.QProxyStyle.__init__?1(self, QString) +QtWidgets.QProxyStyle.baseStyle?4() -> QStyle +QtWidgets.QProxyStyle.setBaseStyle?4(QStyle) +QtWidgets.QProxyStyle.drawPrimitive?4(QStyle.PrimitiveElement, QStyleOption, QPainter, QWidget widget=None) +QtWidgets.QProxyStyle.drawControl?4(QStyle.ControlElement, QStyleOption, QPainter, QWidget widget=None) +QtWidgets.QProxyStyle.drawComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPainter, QWidget widget=None) +QtWidgets.QProxyStyle.drawItemText?4(QPainter, QRect, int, QPalette, bool, QString, QPalette.ColorRole textRole=QPalette.NoRole) +QtWidgets.QProxyStyle.drawItemPixmap?4(QPainter, QRect, int, QPixmap) +QtWidgets.QProxyStyle.sizeFromContents?4(QStyle.ContentsType, QStyleOption, QSize, QWidget) -> QSize +QtWidgets.QProxyStyle.subElementRect?4(QStyle.SubElement, QStyleOption, QWidget) -> QRect +QtWidgets.QProxyStyle.subControlRect?4(QStyle.ComplexControl, QStyleOptionComplex, QStyle.SubControl, QWidget) -> QRect +QtWidgets.QProxyStyle.itemTextRect?4(QFontMetrics, QRect, int, bool, QString) -> QRect +QtWidgets.QProxyStyle.itemPixmapRect?4(QRect, int, QPixmap) -> QRect +QtWidgets.QProxyStyle.hitTestComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex, QPoint, QWidget widget=None) -> QStyle.SubControl +QtWidgets.QProxyStyle.styleHint?4(QStyle.StyleHint, QStyleOption option=None, QWidget widget=None, QStyleHintReturn returnData=None) -> int +QtWidgets.QProxyStyle.pixelMetric?4(QStyle.PixelMetric, QStyleOption option=None, QWidget widget=None) -> int +QtWidgets.QProxyStyle.layoutSpacing?4(QSizePolicy.ControlType, QSizePolicy.ControlType, Qt.Orientation, QStyleOption option=None, QWidget widget=None) -> int +QtWidgets.QProxyStyle.standardIcon?4(QStyle.StandardPixmap, QStyleOption option=None, QWidget widget=None) -> QIcon +QtWidgets.QProxyStyle.standardPixmap?4(QStyle.StandardPixmap, QStyleOption, QWidget widget=None) -> QPixmap +QtWidgets.QProxyStyle.generatedIconPixmap?4(QIcon.Mode, QPixmap, QStyleOption) -> QPixmap +QtWidgets.QProxyStyle.standardPalette?4() -> QPalette +QtWidgets.QProxyStyle.polish?4(QWidget) +QtWidgets.QProxyStyle.polish?4(QPalette) -> QPalette +QtWidgets.QProxyStyle.polish?4(QApplication) +QtWidgets.QProxyStyle.unpolish?4(QWidget) +QtWidgets.QProxyStyle.unpolish?4(QApplication) +QtWidgets.QProxyStyle.event?4(QEvent) -> bool +QtWidgets.QRadioButton?1(QWidget parent=None) +QtWidgets.QRadioButton.__init__?1(self, QWidget parent=None) +QtWidgets.QRadioButton?1(QString, QWidget parent=None) +QtWidgets.QRadioButton.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QRadioButton.sizeHint?4() -> QSize +QtWidgets.QRadioButton.minimumSizeHint?4() -> QSize +QtWidgets.QRadioButton.initStyleOption?4(QStyleOptionButton) +QtWidgets.QRadioButton.hitButton?4(QPoint) -> bool +QtWidgets.QRadioButton.event?4(QEvent) -> bool +QtWidgets.QRadioButton.paintEvent?4(QPaintEvent) +QtWidgets.QRadioButton.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QRubberBand.Shape?10 +QtWidgets.QRubberBand.Shape.Line?10 +QtWidgets.QRubberBand.Shape.Rectangle?10 +QtWidgets.QRubberBand?1(QRubberBand.Shape, QWidget parent=None) +QtWidgets.QRubberBand.__init__?1(self, QRubberBand.Shape, QWidget parent=None) +QtWidgets.QRubberBand.shape?4() -> QRubberBand.Shape +QtWidgets.QRubberBand.setGeometry?4(QRect) +QtWidgets.QRubberBand.setGeometry?4(int, int, int, int) +QtWidgets.QRubberBand.move?4(QPoint) +QtWidgets.QRubberBand.move?4(int, int) +QtWidgets.QRubberBand.resize?4(int, int) +QtWidgets.QRubberBand.resize?4(QSize) +QtWidgets.QRubberBand.initStyleOption?4(QStyleOptionRubberBand) +QtWidgets.QRubberBand.event?4(QEvent) -> bool +QtWidgets.QRubberBand.paintEvent?4(QPaintEvent) +QtWidgets.QRubberBand.changeEvent?4(QEvent) +QtWidgets.QRubberBand.showEvent?4(QShowEvent) +QtWidgets.QRubberBand.resizeEvent?4(QResizeEvent) +QtWidgets.QRubberBand.moveEvent?4(QMoveEvent) +QtWidgets.QScrollArea?1(QWidget parent=None) +QtWidgets.QScrollArea.__init__?1(self, QWidget parent=None) +QtWidgets.QScrollArea.widget?4() -> QWidget +QtWidgets.QScrollArea.setWidget?4(QWidget) +QtWidgets.QScrollArea.takeWidget?4() -> QWidget +QtWidgets.QScrollArea.widgetResizable?4() -> bool +QtWidgets.QScrollArea.setWidgetResizable?4(bool) +QtWidgets.QScrollArea.alignment?4() -> Qt.Alignment +QtWidgets.QScrollArea.setAlignment?4(Qt.Alignment) +QtWidgets.QScrollArea.sizeHint?4() -> QSize +QtWidgets.QScrollArea.focusNextPrevChild?4(bool) -> bool +QtWidgets.QScrollArea.ensureVisible?4(int, int, int xMargin=50, int yMargin=50) +QtWidgets.QScrollArea.ensureWidgetVisible?4(QWidget, int xMargin=50, int yMargin=50) +QtWidgets.QScrollArea.event?4(QEvent) -> bool +QtWidgets.QScrollArea.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QScrollArea.resizeEvent?4(QResizeEvent) +QtWidgets.QScrollArea.scrollContentsBy?4(int, int) +QtWidgets.QScrollArea.viewportSizeHint?4() -> QSize +QtWidgets.QScrollBar?1(QWidget parent=None) +QtWidgets.QScrollBar.__init__?1(self, QWidget parent=None) +QtWidgets.QScrollBar?1(Qt.Orientation, QWidget parent=None) +QtWidgets.QScrollBar.__init__?1(self, Qt.Orientation, QWidget parent=None) +QtWidgets.QScrollBar.sizeHint?4() -> QSize +QtWidgets.QScrollBar.event?4(QEvent) -> bool +QtWidgets.QScrollBar.initStyleOption?4(QStyleOptionSlider) +QtWidgets.QScrollBar.paintEvent?4(QPaintEvent) +QtWidgets.QScrollBar.mousePressEvent?4(QMouseEvent) +QtWidgets.QScrollBar.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QScrollBar.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QScrollBar.hideEvent?4(QHideEvent) +QtWidgets.QScrollBar.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QScrollBar.wheelEvent?4(QWheelEvent) +QtWidgets.QScrollBar.sliderChange?4(QAbstractSlider.SliderChange) +QtWidgets.QScroller.Input?10 +QtWidgets.QScroller.Input.InputPress?10 +QtWidgets.QScroller.Input.InputMove?10 +QtWidgets.QScroller.Input.InputRelease?10 +QtWidgets.QScroller.ScrollerGestureType?10 +QtWidgets.QScroller.ScrollerGestureType.TouchGesture?10 +QtWidgets.QScroller.ScrollerGestureType.LeftMouseButtonGesture?10 +QtWidgets.QScroller.ScrollerGestureType.RightMouseButtonGesture?10 +QtWidgets.QScroller.ScrollerGestureType.MiddleMouseButtonGesture?10 +QtWidgets.QScroller.State?10 +QtWidgets.QScroller.State.Inactive?10 +QtWidgets.QScroller.State.Pressed?10 +QtWidgets.QScroller.State.Dragging?10 +QtWidgets.QScroller.State.Scrolling?10 +QtWidgets.QScroller.hasScroller?4(QObject) -> bool +QtWidgets.QScroller.scroller?4(QObject) -> QScroller +QtWidgets.QScroller.grabGesture?4(QObject, QScroller.ScrollerGestureType scrollGestureType=QScroller.TouchGesture) -> Qt.GestureType +QtWidgets.QScroller.grabbedGesture?4(QObject) -> Qt.GestureType +QtWidgets.QScroller.ungrabGesture?4(QObject) +QtWidgets.QScroller.activeScrollers?4() -> unknown-type +QtWidgets.QScroller.target?4() -> QObject +QtWidgets.QScroller.state?4() -> QScroller.State +QtWidgets.QScroller.handleInput?4(QScroller.Input, QPointF, int timestamp=0) -> bool +QtWidgets.QScroller.stop?4() +QtWidgets.QScroller.velocity?4() -> QPointF +QtWidgets.QScroller.finalPosition?4() -> QPointF +QtWidgets.QScroller.pixelPerMeter?4() -> QPointF +QtWidgets.QScroller.scrollerProperties?4() -> QScrollerProperties +QtWidgets.QScroller.setSnapPositionsX?4(unknown-type) +QtWidgets.QScroller.setSnapPositionsX?4(float, float) +QtWidgets.QScroller.setSnapPositionsY?4(unknown-type) +QtWidgets.QScroller.setSnapPositionsY?4(float, float) +QtWidgets.QScroller.setScrollerProperties?4(QScrollerProperties) +QtWidgets.QScroller.scrollTo?4(QPointF) +QtWidgets.QScroller.scrollTo?4(QPointF, int) +QtWidgets.QScroller.ensureVisible?4(QRectF, float, float) +QtWidgets.QScroller.ensureVisible?4(QRectF, float, float, int) +QtWidgets.QScroller.resendPrepareEvent?4() +QtWidgets.QScroller.stateChanged?4(QScroller.State) +QtWidgets.QScroller.scrollerPropertiesChanged?4(QScrollerProperties) +QtWidgets.QScrollerProperties.ScrollMetric?10 +QtWidgets.QScrollerProperties.ScrollMetric.MousePressEventDelay?10 +QtWidgets.QScrollerProperties.ScrollMetric.DragStartDistance?10 +QtWidgets.QScrollerProperties.ScrollMetric.DragVelocitySmoothingFactor?10 +QtWidgets.QScrollerProperties.ScrollMetric.AxisLockThreshold?10 +QtWidgets.QScrollerProperties.ScrollMetric.ScrollingCurve?10 +QtWidgets.QScrollerProperties.ScrollMetric.DecelerationFactor?10 +QtWidgets.QScrollerProperties.ScrollMetric.MinimumVelocity?10 +QtWidgets.QScrollerProperties.ScrollMetric.MaximumVelocity?10 +QtWidgets.QScrollerProperties.ScrollMetric.MaximumClickThroughVelocity?10 +QtWidgets.QScrollerProperties.ScrollMetric.AcceleratingFlickMaximumTime?10 +QtWidgets.QScrollerProperties.ScrollMetric.AcceleratingFlickSpeedupFactor?10 +QtWidgets.QScrollerProperties.ScrollMetric.SnapPositionRatio?10 +QtWidgets.QScrollerProperties.ScrollMetric.SnapTime?10 +QtWidgets.QScrollerProperties.ScrollMetric.OvershootDragResistanceFactor?10 +QtWidgets.QScrollerProperties.ScrollMetric.OvershootDragDistanceFactor?10 +QtWidgets.QScrollerProperties.ScrollMetric.OvershootScrollDistanceFactor?10 +QtWidgets.QScrollerProperties.ScrollMetric.OvershootScrollTime?10 +QtWidgets.QScrollerProperties.ScrollMetric.HorizontalOvershootPolicy?10 +QtWidgets.QScrollerProperties.ScrollMetric.VerticalOvershootPolicy?10 +QtWidgets.QScrollerProperties.ScrollMetric.FrameRate?10 +QtWidgets.QScrollerProperties.ScrollMetric.ScrollMetricCount?10 +QtWidgets.QScrollerProperties.FrameRates?10 +QtWidgets.QScrollerProperties.FrameRates.Standard?10 +QtWidgets.QScrollerProperties.FrameRates.Fps60?10 +QtWidgets.QScrollerProperties.FrameRates.Fps30?10 +QtWidgets.QScrollerProperties.FrameRates.Fps20?10 +QtWidgets.QScrollerProperties.OvershootPolicy?10 +QtWidgets.QScrollerProperties.OvershootPolicy.OvershootWhenScrollable?10 +QtWidgets.QScrollerProperties.OvershootPolicy.OvershootAlwaysOff?10 +QtWidgets.QScrollerProperties.OvershootPolicy.OvershootAlwaysOn?10 +QtWidgets.QScrollerProperties?1() +QtWidgets.QScrollerProperties.__init__?1(self) +QtWidgets.QScrollerProperties?1(QScrollerProperties) +QtWidgets.QScrollerProperties.__init__?1(self, QScrollerProperties) +QtWidgets.QScrollerProperties.setDefaultScrollerProperties?4(QScrollerProperties) +QtWidgets.QScrollerProperties.unsetDefaultScrollerProperties?4() +QtWidgets.QScrollerProperties.scrollMetric?4(QScrollerProperties.ScrollMetric) -> QVariant +QtWidgets.QScrollerProperties.setScrollMetric?4(QScrollerProperties.ScrollMetric, QVariant) +QtWidgets.QShortcut?1(QWidget) +QtWidgets.QShortcut.__init__?1(self, QWidget) +QtWidgets.QShortcut?1(QKeySequence, QWidget, Any member=None, Any ambiguousMember=None, Qt.ShortcutContext context=Qt.WindowShortcut) +QtWidgets.QShortcut.__init__?1(self, QKeySequence, QWidget, Any member=None, Any ambiguousMember=None, Qt.ShortcutContext context=Qt.WindowShortcut) +QtWidgets.QShortcut.setKey?4(QKeySequence) +QtWidgets.QShortcut.key?4() -> QKeySequence +QtWidgets.QShortcut.setEnabled?4(bool) +QtWidgets.QShortcut.isEnabled?4() -> bool +QtWidgets.QShortcut.setContext?4(Qt.ShortcutContext) +QtWidgets.QShortcut.context?4() -> Qt.ShortcutContext +QtWidgets.QShortcut.setWhatsThis?4(QString) +QtWidgets.QShortcut.whatsThis?4() -> QString +QtWidgets.QShortcut.id?4() -> int +QtWidgets.QShortcut.parentWidget?4() -> QWidget +QtWidgets.QShortcut.setAutoRepeat?4(bool) +QtWidgets.QShortcut.autoRepeat?4() -> bool +QtWidgets.QShortcut.activated?4() +QtWidgets.QShortcut.activatedAmbiguously?4() +QtWidgets.QShortcut.event?4(QEvent) -> bool +QtWidgets.QSizeGrip?1(QWidget) +QtWidgets.QSizeGrip.__init__?1(self, QWidget) +QtWidgets.QSizeGrip.sizeHint?4() -> QSize +QtWidgets.QSizeGrip.setVisible?4(bool) +QtWidgets.QSizeGrip.paintEvent?4(QPaintEvent) +QtWidgets.QSizeGrip.mousePressEvent?4(QMouseEvent) +QtWidgets.QSizeGrip.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QSizeGrip.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QSizeGrip.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QSizeGrip.event?4(QEvent) -> bool +QtWidgets.QSizeGrip.moveEvent?4(QMoveEvent) +QtWidgets.QSizeGrip.showEvent?4(QShowEvent) +QtWidgets.QSizeGrip.hideEvent?4(QHideEvent) +QtWidgets.QSizePolicy.ControlType?10 +QtWidgets.QSizePolicy.ControlType.DefaultType?10 +QtWidgets.QSizePolicy.ControlType.ButtonBox?10 +QtWidgets.QSizePolicy.ControlType.CheckBox?10 +QtWidgets.QSizePolicy.ControlType.ComboBox?10 +QtWidgets.QSizePolicy.ControlType.Frame?10 +QtWidgets.QSizePolicy.ControlType.GroupBox?10 +QtWidgets.QSizePolicy.ControlType.Label?10 +QtWidgets.QSizePolicy.ControlType.Line?10 +QtWidgets.QSizePolicy.ControlType.LineEdit?10 +QtWidgets.QSizePolicy.ControlType.PushButton?10 +QtWidgets.QSizePolicy.ControlType.RadioButton?10 +QtWidgets.QSizePolicy.ControlType.Slider?10 +QtWidgets.QSizePolicy.ControlType.SpinBox?10 +QtWidgets.QSizePolicy.ControlType.TabWidget?10 +QtWidgets.QSizePolicy.ControlType.ToolButton?10 +QtWidgets.QSizePolicy.Policy?10 +QtWidgets.QSizePolicy.Policy.Fixed?10 +QtWidgets.QSizePolicy.Policy.Minimum?10 +QtWidgets.QSizePolicy.Policy.Maximum?10 +QtWidgets.QSizePolicy.Policy.Preferred?10 +QtWidgets.QSizePolicy.Policy.MinimumExpanding?10 +QtWidgets.QSizePolicy.Policy.Expanding?10 +QtWidgets.QSizePolicy.Policy.Ignored?10 +QtWidgets.QSizePolicy.PolicyFlag?10 +QtWidgets.QSizePolicy.PolicyFlag.GrowFlag?10 +QtWidgets.QSizePolicy.PolicyFlag.ExpandFlag?10 +QtWidgets.QSizePolicy.PolicyFlag.ShrinkFlag?10 +QtWidgets.QSizePolicy.PolicyFlag.IgnoreFlag?10 +QtWidgets.QSizePolicy?1() +QtWidgets.QSizePolicy.__init__?1(self) +QtWidgets.QSizePolicy?1(QSizePolicy.Policy, QSizePolicy.Policy, QSizePolicy.ControlType type=QSizePolicy.DefaultType) +QtWidgets.QSizePolicy.__init__?1(self, QSizePolicy.Policy, QSizePolicy.Policy, QSizePolicy.ControlType type=QSizePolicy.DefaultType) +QtWidgets.QSizePolicy?1(QVariant) +QtWidgets.QSizePolicy.__init__?1(self, QVariant) +QtWidgets.QSizePolicy?1(QSizePolicy) +QtWidgets.QSizePolicy.__init__?1(self, QSizePolicy) +QtWidgets.QSizePolicy.horizontalPolicy?4() -> QSizePolicy.Policy +QtWidgets.QSizePolicy.verticalPolicy?4() -> QSizePolicy.Policy +QtWidgets.QSizePolicy.setHorizontalPolicy?4(QSizePolicy.Policy) +QtWidgets.QSizePolicy.setVerticalPolicy?4(QSizePolicy.Policy) +QtWidgets.QSizePolicy.expandingDirections?4() -> Qt.Orientations +QtWidgets.QSizePolicy.setHeightForWidth?4(bool) +QtWidgets.QSizePolicy.hasHeightForWidth?4() -> bool +QtWidgets.QSizePolicy.horizontalStretch?4() -> int +QtWidgets.QSizePolicy.verticalStretch?4() -> int +QtWidgets.QSizePolicy.setHorizontalStretch?4(int) +QtWidgets.QSizePolicy.setVerticalStretch?4(int) +QtWidgets.QSizePolicy.transpose?4() +QtWidgets.QSizePolicy.transposed?4() -> QSizePolicy +QtWidgets.QSizePolicy.controlType?4() -> QSizePolicy.ControlType +QtWidgets.QSizePolicy.setControlType?4(QSizePolicy.ControlType) +QtWidgets.QSizePolicy.setWidthForHeight?4(bool) +QtWidgets.QSizePolicy.hasWidthForHeight?4() -> bool +QtWidgets.QSizePolicy.retainSizeWhenHidden?4() -> bool +QtWidgets.QSizePolicy.setRetainSizeWhenHidden?4(bool) +QtWidgets.QSizePolicy.ControlTypes?1() +QtWidgets.QSizePolicy.ControlTypes.__init__?1(self) +QtWidgets.QSizePolicy.ControlTypes?1(int) +QtWidgets.QSizePolicy.ControlTypes.__init__?1(self, int) +QtWidgets.QSizePolicy.ControlTypes?1(QSizePolicy.ControlTypes) +QtWidgets.QSizePolicy.ControlTypes.__init__?1(self, QSizePolicy.ControlTypes) +QtWidgets.QSlider.TickPosition?10 +QtWidgets.QSlider.TickPosition.NoTicks?10 +QtWidgets.QSlider.TickPosition.TicksAbove?10 +QtWidgets.QSlider.TickPosition.TicksLeft?10 +QtWidgets.QSlider.TickPosition.TicksBelow?10 +QtWidgets.QSlider.TickPosition.TicksRight?10 +QtWidgets.QSlider.TickPosition.TicksBothSides?10 +QtWidgets.QSlider?1(QWidget parent=None) +QtWidgets.QSlider.__init__?1(self, QWidget parent=None) +QtWidgets.QSlider?1(Qt.Orientation, QWidget parent=None) +QtWidgets.QSlider.__init__?1(self, Qt.Orientation, QWidget parent=None) +QtWidgets.QSlider.sizeHint?4() -> QSize +QtWidgets.QSlider.minimumSizeHint?4() -> QSize +QtWidgets.QSlider.setTickPosition?4(QSlider.TickPosition) +QtWidgets.QSlider.tickPosition?4() -> QSlider.TickPosition +QtWidgets.QSlider.setTickInterval?4(int) +QtWidgets.QSlider.tickInterval?4() -> int +QtWidgets.QSlider.event?4(QEvent) -> bool +QtWidgets.QSlider.initStyleOption?4(QStyleOptionSlider) +QtWidgets.QSlider.paintEvent?4(QPaintEvent) +QtWidgets.QSlider.mousePressEvent?4(QMouseEvent) +QtWidgets.QSlider.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QSlider.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QSpinBox?1(QWidget parent=None) +QtWidgets.QSpinBox.__init__?1(self, QWidget parent=None) +QtWidgets.QSpinBox.value?4() -> int +QtWidgets.QSpinBox.prefix?4() -> QString +QtWidgets.QSpinBox.setPrefix?4(QString) +QtWidgets.QSpinBox.suffix?4() -> QString +QtWidgets.QSpinBox.setSuffix?4(QString) +QtWidgets.QSpinBox.cleanText?4() -> QString +QtWidgets.QSpinBox.singleStep?4() -> int +QtWidgets.QSpinBox.setSingleStep?4(int) +QtWidgets.QSpinBox.minimum?4() -> int +QtWidgets.QSpinBox.setMinimum?4(int) +QtWidgets.QSpinBox.maximum?4() -> int +QtWidgets.QSpinBox.setMaximum?4(int) +QtWidgets.QSpinBox.setRange?4(int, int) +QtWidgets.QSpinBox.validate?4(QString, int) -> (QValidator.State, QString, int) +QtWidgets.QSpinBox.valueFromText?4(QString) -> int +QtWidgets.QSpinBox.textFromValue?4(int) -> QString +QtWidgets.QSpinBox.fixup?4(QString) -> QString +QtWidgets.QSpinBox.event?4(QEvent) -> bool +QtWidgets.QSpinBox.setValue?4(int) +QtWidgets.QSpinBox.valueChanged?4(int) +QtWidgets.QSpinBox.valueChanged?4(QString) +QtWidgets.QSpinBox.textChanged?4(QString) +QtWidgets.QSpinBox.displayIntegerBase?4() -> int +QtWidgets.QSpinBox.setDisplayIntegerBase?4(int) +QtWidgets.QSpinBox.stepType?4() -> QAbstractSpinBox.StepType +QtWidgets.QSpinBox.setStepType?4(QAbstractSpinBox.StepType) +QtWidgets.QDoubleSpinBox?1(QWidget parent=None) +QtWidgets.QDoubleSpinBox.__init__?1(self, QWidget parent=None) +QtWidgets.QDoubleSpinBox.value?4() -> float +QtWidgets.QDoubleSpinBox.prefix?4() -> QString +QtWidgets.QDoubleSpinBox.setPrefix?4(QString) +QtWidgets.QDoubleSpinBox.suffix?4() -> QString +QtWidgets.QDoubleSpinBox.setSuffix?4(QString) +QtWidgets.QDoubleSpinBox.cleanText?4() -> QString +QtWidgets.QDoubleSpinBox.singleStep?4() -> float +QtWidgets.QDoubleSpinBox.setSingleStep?4(float) +QtWidgets.QDoubleSpinBox.minimum?4() -> float +QtWidgets.QDoubleSpinBox.setMinimum?4(float) +QtWidgets.QDoubleSpinBox.maximum?4() -> float +QtWidgets.QDoubleSpinBox.setMaximum?4(float) +QtWidgets.QDoubleSpinBox.setRange?4(float, float) +QtWidgets.QDoubleSpinBox.decimals?4() -> int +QtWidgets.QDoubleSpinBox.setDecimals?4(int) +QtWidgets.QDoubleSpinBox.validate?4(QString, int) -> (QValidator.State, QString, int) +QtWidgets.QDoubleSpinBox.valueFromText?4(QString) -> float +QtWidgets.QDoubleSpinBox.textFromValue?4(float) -> QString +QtWidgets.QDoubleSpinBox.fixup?4(QString) -> QString +QtWidgets.QDoubleSpinBox.setValue?4(float) +QtWidgets.QDoubleSpinBox.valueChanged?4(float) +QtWidgets.QDoubleSpinBox.valueChanged?4(QString) +QtWidgets.QDoubleSpinBox.textChanged?4(QString) +QtWidgets.QDoubleSpinBox.stepType?4() -> QAbstractSpinBox.StepType +QtWidgets.QDoubleSpinBox.setStepType?4(QAbstractSpinBox.StepType) +QtWidgets.QSplashScreen?1(QPixmap pixmap=QPixmap(), Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QSplashScreen.__init__?1(self, QPixmap pixmap=QPixmap(), Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QSplashScreen?1(QWidget, QPixmap pixmap=QPixmap(), Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QSplashScreen.__init__?1(self, QWidget, QPixmap pixmap=QPixmap(), Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QSplashScreen?1(QScreen, QPixmap pixmap=QPixmap(), Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QSplashScreen.__init__?1(self, QScreen, QPixmap pixmap=QPixmap(), Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QSplashScreen.setPixmap?4(QPixmap) +QtWidgets.QSplashScreen.pixmap?4() -> QPixmap +QtWidgets.QSplashScreen.finish?4(QWidget) +QtWidgets.QSplashScreen.repaint?4() +QtWidgets.QSplashScreen.message?4() -> QString +QtWidgets.QSplashScreen.showMessage?4(QString, int alignment=Qt.AlignLeft, QColor color=Qt.black) +QtWidgets.QSplashScreen.clearMessage?4() +QtWidgets.QSplashScreen.messageChanged?4(QString) +QtWidgets.QSplashScreen.drawContents?4(QPainter) +QtWidgets.QSplashScreen.event?4(QEvent) -> bool +QtWidgets.QSplashScreen.mousePressEvent?4(QMouseEvent) +QtWidgets.QSplitter?1(QWidget parent=None) +QtWidgets.QSplitter.__init__?1(self, QWidget parent=None) +QtWidgets.QSplitter?1(Qt.Orientation, QWidget parent=None) +QtWidgets.QSplitter.__init__?1(self, Qt.Orientation, QWidget parent=None) +QtWidgets.QSplitter.addWidget?4(QWidget) +QtWidgets.QSplitter.insertWidget?4(int, QWidget) +QtWidgets.QSplitter.setOrientation?4(Qt.Orientation) +QtWidgets.QSplitter.orientation?4() -> Qt.Orientation +QtWidgets.QSplitter.setChildrenCollapsible?4(bool) +QtWidgets.QSplitter.childrenCollapsible?4() -> bool +QtWidgets.QSplitter.setCollapsible?4(int, bool) +QtWidgets.QSplitter.isCollapsible?4(int) -> bool +QtWidgets.QSplitter.setOpaqueResize?4(bool opaque=True) +QtWidgets.QSplitter.opaqueResize?4() -> bool +QtWidgets.QSplitter.refresh?4() +QtWidgets.QSplitter.sizeHint?4() -> QSize +QtWidgets.QSplitter.minimumSizeHint?4() -> QSize +QtWidgets.QSplitter.sizes?4() -> unknown-type +QtWidgets.QSplitter.setSizes?4(unknown-type) +QtWidgets.QSplitter.saveState?4() -> QByteArray +QtWidgets.QSplitter.restoreState?4(QByteArray) -> bool +QtWidgets.QSplitter.handleWidth?4() -> int +QtWidgets.QSplitter.setHandleWidth?4(int) +QtWidgets.QSplitter.indexOf?4(QWidget) -> int +QtWidgets.QSplitter.widget?4(int) -> QWidget +QtWidgets.QSplitter.count?4() -> int +QtWidgets.QSplitter.getRange?4(int) -> (int, int) +QtWidgets.QSplitter.handle?4(int) -> QSplitterHandle +QtWidgets.QSplitter.setStretchFactor?4(int, int) +QtWidgets.QSplitter.replaceWidget?4(int, QWidget) -> QWidget +QtWidgets.QSplitter.splitterMoved?4(int, int) +QtWidgets.QSplitter.createHandle?4() -> QSplitterHandle +QtWidgets.QSplitter.childEvent?4(QChildEvent) +QtWidgets.QSplitter.event?4(QEvent) -> bool +QtWidgets.QSplitter.resizeEvent?4(QResizeEvent) +QtWidgets.QSplitter.changeEvent?4(QEvent) +QtWidgets.QSplitter.moveSplitter?4(int, int) +QtWidgets.QSplitter.setRubberBand?4(int) +QtWidgets.QSplitter.closestLegalPosition?4(int, int) -> int +QtWidgets.QSplitterHandle?1(Qt.Orientation, QSplitter) +QtWidgets.QSplitterHandle.__init__?1(self, Qt.Orientation, QSplitter) +QtWidgets.QSplitterHandle.setOrientation?4(Qt.Orientation) +QtWidgets.QSplitterHandle.orientation?4() -> Qt.Orientation +QtWidgets.QSplitterHandle.opaqueResize?4() -> bool +QtWidgets.QSplitterHandle.splitter?4() -> QSplitter +QtWidgets.QSplitterHandle.sizeHint?4() -> QSize +QtWidgets.QSplitterHandle.paintEvent?4(QPaintEvent) +QtWidgets.QSplitterHandle.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QSplitterHandle.mousePressEvent?4(QMouseEvent) +QtWidgets.QSplitterHandle.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QSplitterHandle.event?4(QEvent) -> bool +QtWidgets.QSplitterHandle.moveSplitter?4(int) +QtWidgets.QSplitterHandle.closestLegalPosition?4(int) -> int +QtWidgets.QSplitterHandle.resizeEvent?4(QResizeEvent) +QtWidgets.QStackedLayout.StackingMode?10 +QtWidgets.QStackedLayout.StackingMode.StackOne?10 +QtWidgets.QStackedLayout.StackingMode.StackAll?10 +QtWidgets.QStackedLayout?1() +QtWidgets.QStackedLayout.__init__?1(self) +QtWidgets.QStackedLayout?1(QWidget) +QtWidgets.QStackedLayout.__init__?1(self, QWidget) +QtWidgets.QStackedLayout?1(QLayout) +QtWidgets.QStackedLayout.__init__?1(self, QLayout) +QtWidgets.QStackedLayout.addWidget?4(QWidget) -> int +QtWidgets.QStackedLayout.insertWidget?4(int, QWidget) -> int +QtWidgets.QStackedLayout.currentWidget?4() -> QWidget +QtWidgets.QStackedLayout.currentIndex?4() -> int +QtWidgets.QStackedLayout.widget?4(int) -> QWidget +QtWidgets.QStackedLayout.widget?4() -> QWidget +QtWidgets.QStackedLayout.count?4() -> int +QtWidgets.QStackedLayout.addItem?4(QLayoutItem) +QtWidgets.QStackedLayout.sizeHint?4() -> QSize +QtWidgets.QStackedLayout.minimumSize?4() -> QSize +QtWidgets.QStackedLayout.itemAt?4(int) -> QLayoutItem +QtWidgets.QStackedLayout.takeAt?4(int) -> QLayoutItem +QtWidgets.QStackedLayout.setGeometry?4(QRect) +QtWidgets.QStackedLayout.widgetRemoved?4(int) +QtWidgets.QStackedLayout.currentChanged?4(int) +QtWidgets.QStackedLayout.setCurrentIndex?4(int) +QtWidgets.QStackedLayout.setCurrentWidget?4(QWidget) +QtWidgets.QStackedLayout.stackingMode?4() -> QStackedLayout.StackingMode +QtWidgets.QStackedLayout.setStackingMode?4(QStackedLayout.StackingMode) +QtWidgets.QStackedLayout.hasHeightForWidth?4() -> bool +QtWidgets.QStackedLayout.heightForWidth?4(int) -> int +QtWidgets.QStackedWidget?1(QWidget parent=None) +QtWidgets.QStackedWidget.__init__?1(self, QWidget parent=None) +QtWidgets.QStackedWidget.addWidget?4(QWidget) -> int +QtWidgets.QStackedWidget.insertWidget?4(int, QWidget) -> int +QtWidgets.QStackedWidget.removeWidget?4(QWidget) +QtWidgets.QStackedWidget.currentWidget?4() -> QWidget +QtWidgets.QStackedWidget.currentIndex?4() -> int +QtWidgets.QStackedWidget.indexOf?4(QWidget) -> int +QtWidgets.QStackedWidget.widget?4(int) -> QWidget +QtWidgets.QStackedWidget.count?4() -> int +QtWidgets.QStackedWidget.setCurrentIndex?4(int) +QtWidgets.QStackedWidget.setCurrentWidget?4(QWidget) +QtWidgets.QStackedWidget.currentChanged?4(int) +QtWidgets.QStackedWidget.widgetRemoved?4(int) +QtWidgets.QStackedWidget.event?4(QEvent) -> bool +QtWidgets.QStatusBar?1(QWidget parent=None) +QtWidgets.QStatusBar.__init__?1(self, QWidget parent=None) +QtWidgets.QStatusBar.addWidget?4(QWidget, int stretch=0) +QtWidgets.QStatusBar.addPermanentWidget?4(QWidget, int stretch=0) +QtWidgets.QStatusBar.removeWidget?4(QWidget) +QtWidgets.QStatusBar.setSizeGripEnabled?4(bool) +QtWidgets.QStatusBar.isSizeGripEnabled?4() -> bool +QtWidgets.QStatusBar.currentMessage?4() -> QString +QtWidgets.QStatusBar.insertWidget?4(int, QWidget, int stretch=0) -> int +QtWidgets.QStatusBar.insertPermanentWidget?4(int, QWidget, int stretch=0) -> int +QtWidgets.QStatusBar.showMessage?4(QString, int msecs=0) +QtWidgets.QStatusBar.clearMessage?4() +QtWidgets.QStatusBar.messageChanged?4(QString) +QtWidgets.QStatusBar.paintEvent?4(QPaintEvent) +QtWidgets.QStatusBar.resizeEvent?4(QResizeEvent) +QtWidgets.QStatusBar.reformat?4() +QtWidgets.QStatusBar.hideOrShow?4() +QtWidgets.QStatusBar.event?4(QEvent) -> bool +QtWidgets.QStatusBar.showEvent?4(QShowEvent) +QtWidgets.QStyle.State?1() +QtWidgets.QStyle.State.__init__?1(self) +QtWidgets.QStyle.State?1(int) +QtWidgets.QStyle.State.__init__?1(self, int) +QtWidgets.QStyle.State?1(QStyle.State) +QtWidgets.QStyle.State.__init__?1(self, QStyle.State) +QtWidgets.QStyle.SubControls?1() +QtWidgets.QStyle.SubControls.__init__?1(self) +QtWidgets.QStyle.SubControls?1(int) +QtWidgets.QStyle.SubControls.__init__?1(self, int) +QtWidgets.QStyle.SubControls?1(QStyle.SubControls) +QtWidgets.QStyle.SubControls.__init__?1(self, QStyle.SubControls) +QtWidgets.QStyledItemDelegate?1(QObject parent=None) +QtWidgets.QStyledItemDelegate.__init__?1(self, QObject parent=None) +QtWidgets.QStyledItemDelegate.paint?4(QPainter, QStyleOptionViewItem, QModelIndex) +QtWidgets.QStyledItemDelegate.sizeHint?4(QStyleOptionViewItem, QModelIndex) -> QSize +QtWidgets.QStyledItemDelegate.createEditor?4(QWidget, QStyleOptionViewItem, QModelIndex) -> QWidget +QtWidgets.QStyledItemDelegate.setEditorData?4(QWidget, QModelIndex) +QtWidgets.QStyledItemDelegate.setModelData?4(QWidget, QAbstractItemModel, QModelIndex) +QtWidgets.QStyledItemDelegate.updateEditorGeometry?4(QWidget, QStyleOptionViewItem, QModelIndex) +QtWidgets.QStyledItemDelegate.itemEditorFactory?4() -> QItemEditorFactory +QtWidgets.QStyledItemDelegate.setItemEditorFactory?4(QItemEditorFactory) +QtWidgets.QStyledItemDelegate.displayText?4(QVariant, QLocale) -> QString +QtWidgets.QStyledItemDelegate.initStyleOption?4(QStyleOptionViewItem, QModelIndex) +QtWidgets.QStyledItemDelegate.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QStyledItemDelegate.editorEvent?4(QEvent, QAbstractItemModel, QStyleOptionViewItem, QModelIndex) -> bool +QtWidgets.QStyleFactory?1() +QtWidgets.QStyleFactory.__init__?1(self) +QtWidgets.QStyleFactory?1(QStyleFactory) +QtWidgets.QStyleFactory.__init__?1(self, QStyleFactory) +QtWidgets.QStyleFactory.keys?4() -> QStringList +QtWidgets.QStyleFactory.create?4(QString) -> QStyle +QtWidgets.QStyleOption.StyleOptionVersion?10 +QtWidgets.QStyleOption.StyleOptionVersion.Version?10 +QtWidgets.QStyleOption.StyleOptionType?10 +QtWidgets.QStyleOption.StyleOptionType.Type?10 +QtWidgets.QStyleOption.OptionType?10 +QtWidgets.QStyleOption.OptionType.SO_Default?10 +QtWidgets.QStyleOption.OptionType.SO_FocusRect?10 +QtWidgets.QStyleOption.OptionType.SO_Button?10 +QtWidgets.QStyleOption.OptionType.SO_Tab?10 +QtWidgets.QStyleOption.OptionType.SO_MenuItem?10 +QtWidgets.QStyleOption.OptionType.SO_Frame?10 +QtWidgets.QStyleOption.OptionType.SO_ProgressBar?10 +QtWidgets.QStyleOption.OptionType.SO_ToolBox?10 +QtWidgets.QStyleOption.OptionType.SO_Header?10 +QtWidgets.QStyleOption.OptionType.SO_DockWidget?10 +QtWidgets.QStyleOption.OptionType.SO_ViewItem?10 +QtWidgets.QStyleOption.OptionType.SO_TabWidgetFrame?10 +QtWidgets.QStyleOption.OptionType.SO_TabBarBase?10 +QtWidgets.QStyleOption.OptionType.SO_RubberBand?10 +QtWidgets.QStyleOption.OptionType.SO_ToolBar?10 +QtWidgets.QStyleOption.OptionType.SO_Complex?10 +QtWidgets.QStyleOption.OptionType.SO_Slider?10 +QtWidgets.QStyleOption.OptionType.SO_SpinBox?10 +QtWidgets.QStyleOption.OptionType.SO_ToolButton?10 +QtWidgets.QStyleOption.OptionType.SO_ComboBox?10 +QtWidgets.QStyleOption.OptionType.SO_TitleBar?10 +QtWidgets.QStyleOption.OptionType.SO_GroupBox?10 +QtWidgets.QStyleOption.OptionType.SO_ComplexCustomBase?10 +QtWidgets.QStyleOption.OptionType.SO_GraphicsItem?10 +QtWidgets.QStyleOption.OptionType.SO_SizeGrip?10 +QtWidgets.QStyleOption.OptionType.SO_CustomBase?10 +QtWidgets.QStyleOption.direction?7 +QtWidgets.QStyleOption.fontMetrics?7 +QtWidgets.QStyleOption.palette?7 +QtWidgets.QStyleOption.rect?7 +QtWidgets.QStyleOption.state?7 +QtWidgets.QStyleOption.styleObject?7 +QtWidgets.QStyleOption.type?7 +QtWidgets.QStyleOption.version?7 +QtWidgets.QStyleOption?1(int version=QStyleOption.StyleOptionVersion.Version, int type=QStyleOption.OptionType.SO_Default) +QtWidgets.QStyleOption.__init__?1(self, int version=QStyleOption.StyleOptionVersion.Version, int type=QStyleOption.OptionType.SO_Default) +QtWidgets.QStyleOption?1(QStyleOption) +QtWidgets.QStyleOption.__init__?1(self, QStyleOption) +QtWidgets.QStyleOption.initFrom?4(QWidget) +QtWidgets.QStyleOptionFocusRect.StyleOptionVersion?10 +QtWidgets.QStyleOptionFocusRect.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionFocusRect.StyleOptionType?10 +QtWidgets.QStyleOptionFocusRect.StyleOptionType.Type?10 +QtWidgets.QStyleOptionFocusRect.backgroundColor?7 +QtWidgets.QStyleOptionFocusRect?1() +QtWidgets.QStyleOptionFocusRect.__init__?1(self) +QtWidgets.QStyleOptionFocusRect?1(QStyleOptionFocusRect) +QtWidgets.QStyleOptionFocusRect.__init__?1(self, QStyleOptionFocusRect) +QtWidgets.QStyleOptionFrame.FrameFeature?10 +QtWidgets.QStyleOptionFrame.FrameFeature.None_?10 +QtWidgets.QStyleOptionFrame.FrameFeature.Flat?10 +QtWidgets.QStyleOptionFrame.FrameFeature.Rounded?10 +QtWidgets.QStyleOptionFrame.StyleOptionVersion?10 +QtWidgets.QStyleOptionFrame.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionFrame.StyleOptionType?10 +QtWidgets.QStyleOptionFrame.StyleOptionType.Type?10 +QtWidgets.QStyleOptionFrame.features?7 +QtWidgets.QStyleOptionFrame.frameShape?7 +QtWidgets.QStyleOptionFrame.lineWidth?7 +QtWidgets.QStyleOptionFrame.midLineWidth?7 +QtWidgets.QStyleOptionFrame?1() +QtWidgets.QStyleOptionFrame.__init__?1(self) +QtWidgets.QStyleOptionFrame?1(QStyleOptionFrame) +QtWidgets.QStyleOptionFrame.__init__?1(self, QStyleOptionFrame) +QtWidgets.QStyleOptionFrame.FrameFeatures?1() +QtWidgets.QStyleOptionFrame.FrameFeatures.__init__?1(self) +QtWidgets.QStyleOptionFrame.FrameFeatures?1(int) +QtWidgets.QStyleOptionFrame.FrameFeatures.__init__?1(self, int) +QtWidgets.QStyleOptionFrame.FrameFeatures?1(QStyleOptionFrame.FrameFeatures) +QtWidgets.QStyleOptionFrame.FrameFeatures.__init__?1(self, QStyleOptionFrame.FrameFeatures) +QtWidgets.QStyleOptionTabWidgetFrame.StyleOptionVersion?10 +QtWidgets.QStyleOptionTabWidgetFrame.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionTabWidgetFrame.StyleOptionType?10 +QtWidgets.QStyleOptionTabWidgetFrame.StyleOptionType.Type?10 +QtWidgets.QStyleOptionTabWidgetFrame.leftCornerWidgetSize?7 +QtWidgets.QStyleOptionTabWidgetFrame.lineWidth?7 +QtWidgets.QStyleOptionTabWidgetFrame.midLineWidth?7 +QtWidgets.QStyleOptionTabWidgetFrame.rightCornerWidgetSize?7 +QtWidgets.QStyleOptionTabWidgetFrame.selectedTabRect?7 +QtWidgets.QStyleOptionTabWidgetFrame.shape?7 +QtWidgets.QStyleOptionTabWidgetFrame.tabBarRect?7 +QtWidgets.QStyleOptionTabWidgetFrame.tabBarSize?7 +QtWidgets.QStyleOptionTabWidgetFrame?1() +QtWidgets.QStyleOptionTabWidgetFrame.__init__?1(self) +QtWidgets.QStyleOptionTabWidgetFrame?1(QStyleOptionTabWidgetFrame) +QtWidgets.QStyleOptionTabWidgetFrame.__init__?1(self, QStyleOptionTabWidgetFrame) +QtWidgets.QStyleOptionTabBarBase.StyleOptionVersion?10 +QtWidgets.QStyleOptionTabBarBase.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionTabBarBase.StyleOptionType?10 +QtWidgets.QStyleOptionTabBarBase.StyleOptionType.Type?10 +QtWidgets.QStyleOptionTabBarBase.documentMode?7 +QtWidgets.QStyleOptionTabBarBase.selectedTabRect?7 +QtWidgets.QStyleOptionTabBarBase.shape?7 +QtWidgets.QStyleOptionTabBarBase.tabBarRect?7 +QtWidgets.QStyleOptionTabBarBase?1() +QtWidgets.QStyleOptionTabBarBase.__init__?1(self) +QtWidgets.QStyleOptionTabBarBase?1(QStyleOptionTabBarBase) +QtWidgets.QStyleOptionTabBarBase.__init__?1(self, QStyleOptionTabBarBase) +QtWidgets.QStyleOptionHeader.SortIndicator?10 +QtWidgets.QStyleOptionHeader.SortIndicator.None_?10 +QtWidgets.QStyleOptionHeader.SortIndicator.SortUp?10 +QtWidgets.QStyleOptionHeader.SortIndicator.SortDown?10 +QtWidgets.QStyleOptionHeader.SelectedPosition?10 +QtWidgets.QStyleOptionHeader.SelectedPosition.NotAdjacent?10 +QtWidgets.QStyleOptionHeader.SelectedPosition.NextIsSelected?10 +QtWidgets.QStyleOptionHeader.SelectedPosition.PreviousIsSelected?10 +QtWidgets.QStyleOptionHeader.SelectedPosition.NextAndPreviousAreSelected?10 +QtWidgets.QStyleOptionHeader.SectionPosition?10 +QtWidgets.QStyleOptionHeader.SectionPosition.Beginning?10 +QtWidgets.QStyleOptionHeader.SectionPosition.Middle?10 +QtWidgets.QStyleOptionHeader.SectionPosition.End?10 +QtWidgets.QStyleOptionHeader.SectionPosition.OnlyOneSection?10 +QtWidgets.QStyleOptionHeader.StyleOptionVersion?10 +QtWidgets.QStyleOptionHeader.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionHeader.StyleOptionType?10 +QtWidgets.QStyleOptionHeader.StyleOptionType.Type?10 +QtWidgets.QStyleOptionHeader.icon?7 +QtWidgets.QStyleOptionHeader.iconAlignment?7 +QtWidgets.QStyleOptionHeader.orientation?7 +QtWidgets.QStyleOptionHeader.position?7 +QtWidgets.QStyleOptionHeader.section?7 +QtWidgets.QStyleOptionHeader.selectedPosition?7 +QtWidgets.QStyleOptionHeader.sortIndicator?7 +QtWidgets.QStyleOptionHeader.text?7 +QtWidgets.QStyleOptionHeader.textAlignment?7 +QtWidgets.QStyleOptionHeader?1() +QtWidgets.QStyleOptionHeader.__init__?1(self) +QtWidgets.QStyleOptionHeader?1(QStyleOptionHeader) +QtWidgets.QStyleOptionHeader.__init__?1(self, QStyleOptionHeader) +QtWidgets.QStyleOptionButton.ButtonFeature?10 +QtWidgets.QStyleOptionButton.ButtonFeature.None_?10 +QtWidgets.QStyleOptionButton.ButtonFeature.Flat?10 +QtWidgets.QStyleOptionButton.ButtonFeature.HasMenu?10 +QtWidgets.QStyleOptionButton.ButtonFeature.DefaultButton?10 +QtWidgets.QStyleOptionButton.ButtonFeature.AutoDefaultButton?10 +QtWidgets.QStyleOptionButton.ButtonFeature.CommandLinkButton?10 +QtWidgets.QStyleOptionButton.StyleOptionVersion?10 +QtWidgets.QStyleOptionButton.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionButton.StyleOptionType?10 +QtWidgets.QStyleOptionButton.StyleOptionType.Type?10 +QtWidgets.QStyleOptionButton.features?7 +QtWidgets.QStyleOptionButton.icon?7 +QtWidgets.QStyleOptionButton.iconSize?7 +QtWidgets.QStyleOptionButton.text?7 +QtWidgets.QStyleOptionButton?1() +QtWidgets.QStyleOptionButton.__init__?1(self) +QtWidgets.QStyleOptionButton?1(QStyleOptionButton) +QtWidgets.QStyleOptionButton.__init__?1(self, QStyleOptionButton) +QtWidgets.QStyleOptionButton.ButtonFeatures?1() +QtWidgets.QStyleOptionButton.ButtonFeatures.__init__?1(self) +QtWidgets.QStyleOptionButton.ButtonFeatures?1(int) +QtWidgets.QStyleOptionButton.ButtonFeatures.__init__?1(self, int) +QtWidgets.QStyleOptionButton.ButtonFeatures?1(QStyleOptionButton.ButtonFeatures) +QtWidgets.QStyleOptionButton.ButtonFeatures.__init__?1(self, QStyleOptionButton.ButtonFeatures) +QtWidgets.QStyleOptionTab.TabFeature?10 +QtWidgets.QStyleOptionTab.TabFeature.None_?10 +QtWidgets.QStyleOptionTab.TabFeature.HasFrame?10 +QtWidgets.QStyleOptionTab.CornerWidget?10 +QtWidgets.QStyleOptionTab.CornerWidget.NoCornerWidgets?10 +QtWidgets.QStyleOptionTab.CornerWidget.LeftCornerWidget?10 +QtWidgets.QStyleOptionTab.CornerWidget.RightCornerWidget?10 +QtWidgets.QStyleOptionTab.SelectedPosition?10 +QtWidgets.QStyleOptionTab.SelectedPosition.NotAdjacent?10 +QtWidgets.QStyleOptionTab.SelectedPosition.NextIsSelected?10 +QtWidgets.QStyleOptionTab.SelectedPosition.PreviousIsSelected?10 +QtWidgets.QStyleOptionTab.TabPosition?10 +QtWidgets.QStyleOptionTab.TabPosition.Beginning?10 +QtWidgets.QStyleOptionTab.TabPosition.Middle?10 +QtWidgets.QStyleOptionTab.TabPosition.End?10 +QtWidgets.QStyleOptionTab.TabPosition.OnlyOneTab?10 +QtWidgets.QStyleOptionTab.StyleOptionVersion?10 +QtWidgets.QStyleOptionTab.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionTab.StyleOptionType?10 +QtWidgets.QStyleOptionTab.StyleOptionType.Type?10 +QtWidgets.QStyleOptionTab.cornerWidgets?7 +QtWidgets.QStyleOptionTab.documentMode?7 +QtWidgets.QStyleOptionTab.features?7 +QtWidgets.QStyleOptionTab.icon?7 +QtWidgets.QStyleOptionTab.iconSize?7 +QtWidgets.QStyleOptionTab.leftButtonSize?7 +QtWidgets.QStyleOptionTab.position?7 +QtWidgets.QStyleOptionTab.rightButtonSize?7 +QtWidgets.QStyleOptionTab.row?7 +QtWidgets.QStyleOptionTab.selectedPosition?7 +QtWidgets.QStyleOptionTab.shape?7 +QtWidgets.QStyleOptionTab.text?7 +QtWidgets.QStyleOptionTab?1() +QtWidgets.QStyleOptionTab.__init__?1(self) +QtWidgets.QStyleOptionTab?1(QStyleOptionTab) +QtWidgets.QStyleOptionTab.__init__?1(self, QStyleOptionTab) +QtWidgets.QStyleOptionTab.CornerWidgets?1() +QtWidgets.QStyleOptionTab.CornerWidgets.__init__?1(self) +QtWidgets.QStyleOptionTab.CornerWidgets?1(int) +QtWidgets.QStyleOptionTab.CornerWidgets.__init__?1(self, int) +QtWidgets.QStyleOptionTab.CornerWidgets?1(QStyleOptionTab.CornerWidgets) +QtWidgets.QStyleOptionTab.CornerWidgets.__init__?1(self, QStyleOptionTab.CornerWidgets) +QtWidgets.QStyleOptionTab.TabFeatures?1() +QtWidgets.QStyleOptionTab.TabFeatures.__init__?1(self) +QtWidgets.QStyleOptionTab.TabFeatures?1(int) +QtWidgets.QStyleOptionTab.TabFeatures.__init__?1(self, int) +QtWidgets.QStyleOptionTab.TabFeatures?1(QStyleOptionTab.TabFeatures) +QtWidgets.QStyleOptionTab.TabFeatures.__init__?1(self, QStyleOptionTab.TabFeatures) +QtWidgets.QStyleOptionTabV4.StyleOptionVersion?10 +QtWidgets.QStyleOptionTabV4.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionTabV4.tabIndex?7 +QtWidgets.QStyleOptionTabV4?1() +QtWidgets.QStyleOptionTabV4.__init__?1(self) +QtWidgets.QStyleOptionTabV4?1(QStyleOptionTabV4) +QtWidgets.QStyleOptionTabV4.__init__?1(self, QStyleOptionTabV4) +QtWidgets.QStyleOptionProgressBar.StyleOptionVersion?10 +QtWidgets.QStyleOptionProgressBar.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionProgressBar.StyleOptionType?10 +QtWidgets.QStyleOptionProgressBar.StyleOptionType.Type?10 +QtWidgets.QStyleOptionProgressBar.bottomToTop?7 +QtWidgets.QStyleOptionProgressBar.invertedAppearance?7 +QtWidgets.QStyleOptionProgressBar.maximum?7 +QtWidgets.QStyleOptionProgressBar.minimum?7 +QtWidgets.QStyleOptionProgressBar.orientation?7 +QtWidgets.QStyleOptionProgressBar.progress?7 +QtWidgets.QStyleOptionProgressBar.text?7 +QtWidgets.QStyleOptionProgressBar.textAlignment?7 +QtWidgets.QStyleOptionProgressBar.textVisible?7 +QtWidgets.QStyleOptionProgressBar?1() +QtWidgets.QStyleOptionProgressBar.__init__?1(self) +QtWidgets.QStyleOptionProgressBar?1(QStyleOptionProgressBar) +QtWidgets.QStyleOptionProgressBar.__init__?1(self, QStyleOptionProgressBar) +QtWidgets.QStyleOptionMenuItem.CheckType?10 +QtWidgets.QStyleOptionMenuItem.CheckType.NotCheckable?10 +QtWidgets.QStyleOptionMenuItem.CheckType.Exclusive?10 +QtWidgets.QStyleOptionMenuItem.CheckType.NonExclusive?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType.Normal?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType.DefaultItem?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType.Separator?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType.SubMenu?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType.Scroller?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType.TearOff?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType.Margin?10 +QtWidgets.QStyleOptionMenuItem.MenuItemType.EmptyArea?10 +QtWidgets.QStyleOptionMenuItem.StyleOptionVersion?10 +QtWidgets.QStyleOptionMenuItem.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionMenuItem.StyleOptionType?10 +QtWidgets.QStyleOptionMenuItem.StyleOptionType.Type?10 +QtWidgets.QStyleOptionMenuItem.checkType?7 +QtWidgets.QStyleOptionMenuItem.checked?7 +QtWidgets.QStyleOptionMenuItem.font?7 +QtWidgets.QStyleOptionMenuItem.icon?7 +QtWidgets.QStyleOptionMenuItem.maxIconWidth?7 +QtWidgets.QStyleOptionMenuItem.menuHasCheckableItems?7 +QtWidgets.QStyleOptionMenuItem.menuItemType?7 +QtWidgets.QStyleOptionMenuItem.menuRect?7 +QtWidgets.QStyleOptionMenuItem.tabWidth?7 +QtWidgets.QStyleOptionMenuItem.text?7 +QtWidgets.QStyleOptionMenuItem?1() +QtWidgets.QStyleOptionMenuItem.__init__?1(self) +QtWidgets.QStyleOptionMenuItem?1(QStyleOptionMenuItem) +QtWidgets.QStyleOptionMenuItem.__init__?1(self, QStyleOptionMenuItem) +QtWidgets.QStyleOptionDockWidget.StyleOptionVersion?10 +QtWidgets.QStyleOptionDockWidget.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionDockWidget.StyleOptionType?10 +QtWidgets.QStyleOptionDockWidget.StyleOptionType.Type?10 +QtWidgets.QStyleOptionDockWidget.closable?7 +QtWidgets.QStyleOptionDockWidget.floatable?7 +QtWidgets.QStyleOptionDockWidget.movable?7 +QtWidgets.QStyleOptionDockWidget.title?7 +QtWidgets.QStyleOptionDockWidget.verticalTitleBar?7 +QtWidgets.QStyleOptionDockWidget?1() +QtWidgets.QStyleOptionDockWidget.__init__?1(self) +QtWidgets.QStyleOptionDockWidget?1(QStyleOptionDockWidget) +QtWidgets.QStyleOptionDockWidget.__init__?1(self, QStyleOptionDockWidget) +QtWidgets.QStyleOptionViewItem.ViewItemPosition?10 +QtWidgets.QStyleOptionViewItem.ViewItemPosition.Invalid?10 +QtWidgets.QStyleOptionViewItem.ViewItemPosition.Beginning?10 +QtWidgets.QStyleOptionViewItem.ViewItemPosition.Middle?10 +QtWidgets.QStyleOptionViewItem.ViewItemPosition.End?10 +QtWidgets.QStyleOptionViewItem.ViewItemPosition.OnlyOne?10 +QtWidgets.QStyleOptionViewItem.ViewItemFeature?10 +QtWidgets.QStyleOptionViewItem.ViewItemFeature.None_?10 +QtWidgets.QStyleOptionViewItem.ViewItemFeature.WrapText?10 +QtWidgets.QStyleOptionViewItem.ViewItemFeature.Alternate?10 +QtWidgets.QStyleOptionViewItem.ViewItemFeature.HasCheckIndicator?10 +QtWidgets.QStyleOptionViewItem.ViewItemFeature.HasDisplay?10 +QtWidgets.QStyleOptionViewItem.ViewItemFeature.HasDecoration?10 +QtWidgets.QStyleOptionViewItem.Position?10 +QtWidgets.QStyleOptionViewItem.Position.Left?10 +QtWidgets.QStyleOptionViewItem.Position.Right?10 +QtWidgets.QStyleOptionViewItem.Position.Top?10 +QtWidgets.QStyleOptionViewItem.Position.Bottom?10 +QtWidgets.QStyleOptionViewItem.StyleOptionVersion?10 +QtWidgets.QStyleOptionViewItem.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionViewItem.StyleOptionType?10 +QtWidgets.QStyleOptionViewItem.StyleOptionType.Type?10 +QtWidgets.QStyleOptionViewItem.backgroundBrush?7 +QtWidgets.QStyleOptionViewItem.checkState?7 +QtWidgets.QStyleOptionViewItem.decorationAlignment?7 +QtWidgets.QStyleOptionViewItem.decorationPosition?7 +QtWidgets.QStyleOptionViewItem.decorationSize?7 +QtWidgets.QStyleOptionViewItem.displayAlignment?7 +QtWidgets.QStyleOptionViewItem.features?7 +QtWidgets.QStyleOptionViewItem.font?7 +QtWidgets.QStyleOptionViewItem.icon?7 +QtWidgets.QStyleOptionViewItem.index?7 +QtWidgets.QStyleOptionViewItem.locale?7 +QtWidgets.QStyleOptionViewItem.showDecorationSelected?7 +QtWidgets.QStyleOptionViewItem.text?7 +QtWidgets.QStyleOptionViewItem.textElideMode?7 +QtWidgets.QStyleOptionViewItem.viewItemPosition?7 +QtWidgets.QStyleOptionViewItem.widget?7 +QtWidgets.QStyleOptionViewItem?1() +QtWidgets.QStyleOptionViewItem.__init__?1(self) +QtWidgets.QStyleOptionViewItem?1(QStyleOptionViewItem) +QtWidgets.QStyleOptionViewItem.__init__?1(self, QStyleOptionViewItem) +QtWidgets.QStyleOptionViewItem.ViewItemFeatures?1() +QtWidgets.QStyleOptionViewItem.ViewItemFeatures.__init__?1(self) +QtWidgets.QStyleOptionViewItem.ViewItemFeatures?1(int) +QtWidgets.QStyleOptionViewItem.ViewItemFeatures.__init__?1(self, int) +QtWidgets.QStyleOptionViewItem.ViewItemFeatures?1(QStyleOptionViewItem.ViewItemFeatures) +QtWidgets.QStyleOptionViewItem.ViewItemFeatures.__init__?1(self, QStyleOptionViewItem.ViewItemFeatures) +QtWidgets.QStyleOptionToolBox.SelectedPosition?10 +QtWidgets.QStyleOptionToolBox.SelectedPosition.NotAdjacent?10 +QtWidgets.QStyleOptionToolBox.SelectedPosition.NextIsSelected?10 +QtWidgets.QStyleOptionToolBox.SelectedPosition.PreviousIsSelected?10 +QtWidgets.QStyleOptionToolBox.TabPosition?10 +QtWidgets.QStyleOptionToolBox.TabPosition.Beginning?10 +QtWidgets.QStyleOptionToolBox.TabPosition.Middle?10 +QtWidgets.QStyleOptionToolBox.TabPosition.End?10 +QtWidgets.QStyleOptionToolBox.TabPosition.OnlyOneTab?10 +QtWidgets.QStyleOptionToolBox.StyleOptionVersion?10 +QtWidgets.QStyleOptionToolBox.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionToolBox.StyleOptionType?10 +QtWidgets.QStyleOptionToolBox.StyleOptionType.Type?10 +QtWidgets.QStyleOptionToolBox.icon?7 +QtWidgets.QStyleOptionToolBox.position?7 +QtWidgets.QStyleOptionToolBox.selectedPosition?7 +QtWidgets.QStyleOptionToolBox.text?7 +QtWidgets.QStyleOptionToolBox?1() +QtWidgets.QStyleOptionToolBox.__init__?1(self) +QtWidgets.QStyleOptionToolBox?1(QStyleOptionToolBox) +QtWidgets.QStyleOptionToolBox.__init__?1(self, QStyleOptionToolBox) +QtWidgets.QStyleOptionRubberBand.StyleOptionVersion?10 +QtWidgets.QStyleOptionRubberBand.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionRubberBand.StyleOptionType?10 +QtWidgets.QStyleOptionRubberBand.StyleOptionType.Type?10 +QtWidgets.QStyleOptionRubberBand.opaque?7 +QtWidgets.QStyleOptionRubberBand.shape?7 +QtWidgets.QStyleOptionRubberBand?1() +QtWidgets.QStyleOptionRubberBand.__init__?1(self) +QtWidgets.QStyleOptionRubberBand?1(QStyleOptionRubberBand) +QtWidgets.QStyleOptionRubberBand.__init__?1(self, QStyleOptionRubberBand) +QtWidgets.QStyleOptionComplex.StyleOptionVersion?10 +QtWidgets.QStyleOptionComplex.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionComplex.StyleOptionType?10 +QtWidgets.QStyleOptionComplex.StyleOptionType.Type?10 +QtWidgets.QStyleOptionComplex.activeSubControls?7 +QtWidgets.QStyleOptionComplex.subControls?7 +QtWidgets.QStyleOptionComplex?1(int version=QStyleOptionComplex.StyleOptionVersion.Version, int type=QStyleOption.OptionType.SO_Complex) +QtWidgets.QStyleOptionComplex.__init__?1(self, int version=QStyleOptionComplex.StyleOptionVersion.Version, int type=QStyleOption.OptionType.SO_Complex) +QtWidgets.QStyleOptionComplex?1(QStyleOptionComplex) +QtWidgets.QStyleOptionComplex.__init__?1(self, QStyleOptionComplex) +QtWidgets.QStyleOptionSlider.StyleOptionVersion?10 +QtWidgets.QStyleOptionSlider.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionSlider.StyleOptionType?10 +QtWidgets.QStyleOptionSlider.StyleOptionType.Type?10 +QtWidgets.QStyleOptionSlider.dialWrapping?7 +QtWidgets.QStyleOptionSlider.maximum?7 +QtWidgets.QStyleOptionSlider.minimum?7 +QtWidgets.QStyleOptionSlider.notchTarget?7 +QtWidgets.QStyleOptionSlider.orientation?7 +QtWidgets.QStyleOptionSlider.pageStep?7 +QtWidgets.QStyleOptionSlider.singleStep?7 +QtWidgets.QStyleOptionSlider.sliderPosition?7 +QtWidgets.QStyleOptionSlider.sliderValue?7 +QtWidgets.QStyleOptionSlider.tickInterval?7 +QtWidgets.QStyleOptionSlider.tickPosition?7 +QtWidgets.QStyleOptionSlider.upsideDown?7 +QtWidgets.QStyleOptionSlider?1() +QtWidgets.QStyleOptionSlider.__init__?1(self) +QtWidgets.QStyleOptionSlider?1(QStyleOptionSlider) +QtWidgets.QStyleOptionSlider.__init__?1(self, QStyleOptionSlider) +QtWidgets.QStyleOptionSpinBox.StyleOptionVersion?10 +QtWidgets.QStyleOptionSpinBox.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionSpinBox.StyleOptionType?10 +QtWidgets.QStyleOptionSpinBox.StyleOptionType.Type?10 +QtWidgets.QStyleOptionSpinBox.buttonSymbols?7 +QtWidgets.QStyleOptionSpinBox.frame?7 +QtWidgets.QStyleOptionSpinBox.stepEnabled?7 +QtWidgets.QStyleOptionSpinBox?1() +QtWidgets.QStyleOptionSpinBox.__init__?1(self) +QtWidgets.QStyleOptionSpinBox?1(QStyleOptionSpinBox) +QtWidgets.QStyleOptionSpinBox.__init__?1(self, QStyleOptionSpinBox) +QtWidgets.QStyleOptionToolButton.ToolButtonFeature?10 +QtWidgets.QStyleOptionToolButton.ToolButtonFeature.None_?10 +QtWidgets.QStyleOptionToolButton.ToolButtonFeature.Arrow?10 +QtWidgets.QStyleOptionToolButton.ToolButtonFeature.Menu?10 +QtWidgets.QStyleOptionToolButton.ToolButtonFeature.PopupDelay?10 +QtWidgets.QStyleOptionToolButton.ToolButtonFeature.MenuButtonPopup?10 +QtWidgets.QStyleOptionToolButton.ToolButtonFeature.HasMenu?10 +QtWidgets.QStyleOptionToolButton.StyleOptionVersion?10 +QtWidgets.QStyleOptionToolButton.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionToolButton.StyleOptionType?10 +QtWidgets.QStyleOptionToolButton.StyleOptionType.Type?10 +QtWidgets.QStyleOptionToolButton.arrowType?7 +QtWidgets.QStyleOptionToolButton.features?7 +QtWidgets.QStyleOptionToolButton.font?7 +QtWidgets.QStyleOptionToolButton.icon?7 +QtWidgets.QStyleOptionToolButton.iconSize?7 +QtWidgets.QStyleOptionToolButton.pos?7 +QtWidgets.QStyleOptionToolButton.text?7 +QtWidgets.QStyleOptionToolButton.toolButtonStyle?7 +QtWidgets.QStyleOptionToolButton?1() +QtWidgets.QStyleOptionToolButton.__init__?1(self) +QtWidgets.QStyleOptionToolButton?1(QStyleOptionToolButton) +QtWidgets.QStyleOptionToolButton.__init__?1(self, QStyleOptionToolButton) +QtWidgets.QStyleOptionToolButton.ToolButtonFeatures?1() +QtWidgets.QStyleOptionToolButton.ToolButtonFeatures.__init__?1(self) +QtWidgets.QStyleOptionToolButton.ToolButtonFeatures?1(int) +QtWidgets.QStyleOptionToolButton.ToolButtonFeatures.__init__?1(self, int) +QtWidgets.QStyleOptionToolButton.ToolButtonFeatures?1(QStyleOptionToolButton.ToolButtonFeatures) +QtWidgets.QStyleOptionToolButton.ToolButtonFeatures.__init__?1(self, QStyleOptionToolButton.ToolButtonFeatures) +QtWidgets.QStyleOptionComboBox.StyleOptionVersion?10 +QtWidgets.QStyleOptionComboBox.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionComboBox.StyleOptionType?10 +QtWidgets.QStyleOptionComboBox.StyleOptionType.Type?10 +QtWidgets.QStyleOptionComboBox.currentIcon?7 +QtWidgets.QStyleOptionComboBox.currentText?7 +QtWidgets.QStyleOptionComboBox.editable?7 +QtWidgets.QStyleOptionComboBox.frame?7 +QtWidgets.QStyleOptionComboBox.iconSize?7 +QtWidgets.QStyleOptionComboBox.popupRect?7 +QtWidgets.QStyleOptionComboBox?1() +QtWidgets.QStyleOptionComboBox.__init__?1(self) +QtWidgets.QStyleOptionComboBox?1(QStyleOptionComboBox) +QtWidgets.QStyleOptionComboBox.__init__?1(self, QStyleOptionComboBox) +QtWidgets.QStyleOptionTitleBar.StyleOptionVersion?10 +QtWidgets.QStyleOptionTitleBar.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionTitleBar.StyleOptionType?10 +QtWidgets.QStyleOptionTitleBar.StyleOptionType.Type?10 +QtWidgets.QStyleOptionTitleBar.icon?7 +QtWidgets.QStyleOptionTitleBar.text?7 +QtWidgets.QStyleOptionTitleBar.titleBarFlags?7 +QtWidgets.QStyleOptionTitleBar.titleBarState?7 +QtWidgets.QStyleOptionTitleBar?1() +QtWidgets.QStyleOptionTitleBar.__init__?1(self) +QtWidgets.QStyleOptionTitleBar?1(QStyleOptionTitleBar) +QtWidgets.QStyleOptionTitleBar.__init__?1(self, QStyleOptionTitleBar) +QtWidgets.QStyleHintReturn.StyleOptionVersion?10 +QtWidgets.QStyleHintReturn.StyleOptionVersion.Version?10 +QtWidgets.QStyleHintReturn.StyleOptionType?10 +QtWidgets.QStyleHintReturn.StyleOptionType.Type?10 +QtWidgets.QStyleHintReturn.HintReturnType?10 +QtWidgets.QStyleHintReturn.HintReturnType.SH_Default?10 +QtWidgets.QStyleHintReturn.HintReturnType.SH_Mask?10 +QtWidgets.QStyleHintReturn.HintReturnType.SH_Variant?10 +QtWidgets.QStyleHintReturn.type?7 +QtWidgets.QStyleHintReturn.version?7 +QtWidgets.QStyleHintReturn?1(int version=QStyleOption.StyleOptionVersion.Version, int type=QStyleHintReturn.HintReturnType.SH_Default) +QtWidgets.QStyleHintReturn.__init__?1(self, int version=QStyleOption.StyleOptionVersion.Version, int type=QStyleHintReturn.HintReturnType.SH_Default) +QtWidgets.QStyleHintReturn?1(QStyleHintReturn) +QtWidgets.QStyleHintReturn.__init__?1(self, QStyleHintReturn) +QtWidgets.QStyleHintReturnMask.StyleOptionVersion?10 +QtWidgets.QStyleHintReturnMask.StyleOptionVersion.Version?10 +QtWidgets.QStyleHintReturnMask.StyleOptionType?10 +QtWidgets.QStyleHintReturnMask.StyleOptionType.Type?10 +QtWidgets.QStyleHintReturnMask.region?7 +QtWidgets.QStyleHintReturnMask?1() +QtWidgets.QStyleHintReturnMask.__init__?1(self) +QtWidgets.QStyleHintReturnMask?1(QStyleHintReturnMask) +QtWidgets.QStyleHintReturnMask.__init__?1(self, QStyleHintReturnMask) +QtWidgets.QStyleOptionToolBar.ToolBarFeature?10 +QtWidgets.QStyleOptionToolBar.ToolBarFeature.None_?10 +QtWidgets.QStyleOptionToolBar.ToolBarFeature.Movable?10 +QtWidgets.QStyleOptionToolBar.ToolBarPosition?10 +QtWidgets.QStyleOptionToolBar.ToolBarPosition.Beginning?10 +QtWidgets.QStyleOptionToolBar.ToolBarPosition.Middle?10 +QtWidgets.QStyleOptionToolBar.ToolBarPosition.End?10 +QtWidgets.QStyleOptionToolBar.ToolBarPosition.OnlyOne?10 +QtWidgets.QStyleOptionToolBar.StyleOptionVersion?10 +QtWidgets.QStyleOptionToolBar.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionToolBar.StyleOptionType?10 +QtWidgets.QStyleOptionToolBar.StyleOptionType.Type?10 +QtWidgets.QStyleOptionToolBar.features?7 +QtWidgets.QStyleOptionToolBar.lineWidth?7 +QtWidgets.QStyleOptionToolBar.midLineWidth?7 +QtWidgets.QStyleOptionToolBar.positionOfLine?7 +QtWidgets.QStyleOptionToolBar.positionWithinLine?7 +QtWidgets.QStyleOptionToolBar.toolBarArea?7 +QtWidgets.QStyleOptionToolBar?1() +QtWidgets.QStyleOptionToolBar.__init__?1(self) +QtWidgets.QStyleOptionToolBar?1(QStyleOptionToolBar) +QtWidgets.QStyleOptionToolBar.__init__?1(self, QStyleOptionToolBar) +QtWidgets.QStyleOptionToolBar.ToolBarFeatures?1() +QtWidgets.QStyleOptionToolBar.ToolBarFeatures.__init__?1(self) +QtWidgets.QStyleOptionToolBar.ToolBarFeatures?1(int) +QtWidgets.QStyleOptionToolBar.ToolBarFeatures.__init__?1(self, int) +QtWidgets.QStyleOptionToolBar.ToolBarFeatures?1(QStyleOptionToolBar.ToolBarFeatures) +QtWidgets.QStyleOptionToolBar.ToolBarFeatures.__init__?1(self, QStyleOptionToolBar.ToolBarFeatures) +QtWidgets.QStyleOptionGroupBox.StyleOptionVersion?10 +QtWidgets.QStyleOptionGroupBox.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionGroupBox.StyleOptionType?10 +QtWidgets.QStyleOptionGroupBox.StyleOptionType.Type?10 +QtWidgets.QStyleOptionGroupBox.features?7 +QtWidgets.QStyleOptionGroupBox.lineWidth?7 +QtWidgets.QStyleOptionGroupBox.midLineWidth?7 +QtWidgets.QStyleOptionGroupBox.text?7 +QtWidgets.QStyleOptionGroupBox.textAlignment?7 +QtWidgets.QStyleOptionGroupBox.textColor?7 +QtWidgets.QStyleOptionGroupBox?1() +QtWidgets.QStyleOptionGroupBox.__init__?1(self) +QtWidgets.QStyleOptionGroupBox?1(QStyleOptionGroupBox) +QtWidgets.QStyleOptionGroupBox.__init__?1(self, QStyleOptionGroupBox) +QtWidgets.QStyleOptionSizeGrip.StyleOptionVersion?10 +QtWidgets.QStyleOptionSizeGrip.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionSizeGrip.StyleOptionType?10 +QtWidgets.QStyleOptionSizeGrip.StyleOptionType.Type?10 +QtWidgets.QStyleOptionSizeGrip.corner?7 +QtWidgets.QStyleOptionSizeGrip?1() +QtWidgets.QStyleOptionSizeGrip.__init__?1(self) +QtWidgets.QStyleOptionSizeGrip?1(QStyleOptionSizeGrip) +QtWidgets.QStyleOptionSizeGrip.__init__?1(self, QStyleOptionSizeGrip) +QtWidgets.QStyleOptionGraphicsItem.StyleOptionVersion?10 +QtWidgets.QStyleOptionGraphicsItem.StyleOptionVersion.Version?10 +QtWidgets.QStyleOptionGraphicsItem.StyleOptionType?10 +QtWidgets.QStyleOptionGraphicsItem.StyleOptionType.Type?10 +QtWidgets.QStyleOptionGraphicsItem.exposedRect?7 +QtWidgets.QStyleOptionGraphicsItem?1() +QtWidgets.QStyleOptionGraphicsItem.__init__?1(self) +QtWidgets.QStyleOptionGraphicsItem?1(QStyleOptionGraphicsItem) +QtWidgets.QStyleOptionGraphicsItem.__init__?1(self, QStyleOptionGraphicsItem) +QtWidgets.QStyleOptionGraphicsItem.levelOfDetailFromTransform?4(QTransform) -> float +QtWidgets.QStyleHintReturnVariant.StyleOptionVersion?10 +QtWidgets.QStyleHintReturnVariant.StyleOptionVersion.Version?10 +QtWidgets.QStyleHintReturnVariant.StyleOptionType?10 +QtWidgets.QStyleHintReturnVariant.StyleOptionType.Type?10 +QtWidgets.QStyleHintReturnVariant.variant?7 +QtWidgets.QStyleHintReturnVariant?1() +QtWidgets.QStyleHintReturnVariant.__init__?1(self) +QtWidgets.QStyleHintReturnVariant?1(QStyleHintReturnVariant) +QtWidgets.QStyleHintReturnVariant.__init__?1(self, QStyleHintReturnVariant) +QtWidgets.QStylePainter?1() +QtWidgets.QStylePainter.__init__?1(self) +QtWidgets.QStylePainter?1(QWidget) +QtWidgets.QStylePainter.__init__?1(self, QWidget) +QtWidgets.QStylePainter?1(QPaintDevice, QWidget) +QtWidgets.QStylePainter.__init__?1(self, QPaintDevice, QWidget) +QtWidgets.QStylePainter.begin?4(QWidget) -> bool +QtWidgets.QStylePainter.begin?4(QPaintDevice, QWidget) -> bool +QtWidgets.QStylePainter.style?4() -> QStyle +QtWidgets.QStylePainter.drawPrimitive?4(QStyle.PrimitiveElement, QStyleOption) +QtWidgets.QStylePainter.drawControl?4(QStyle.ControlElement, QStyleOption) +QtWidgets.QStylePainter.drawComplexControl?4(QStyle.ComplexControl, QStyleOptionComplex) +QtWidgets.QStylePainter.drawItemText?4(QRect, int, QPalette, bool, QString, QPalette.ColorRole textRole=QPalette.NoRole) +QtWidgets.QStylePainter.drawItemPixmap?4(QRect, int, QPixmap) +QtWidgets.QSystemTrayIcon.MessageIcon?10 +QtWidgets.QSystemTrayIcon.MessageIcon.NoIcon?10 +QtWidgets.QSystemTrayIcon.MessageIcon.Information?10 +QtWidgets.QSystemTrayIcon.MessageIcon.Warning?10 +QtWidgets.QSystemTrayIcon.MessageIcon.Critical?10 +QtWidgets.QSystemTrayIcon.ActivationReason?10 +QtWidgets.QSystemTrayIcon.ActivationReason.Unknown?10 +QtWidgets.QSystemTrayIcon.ActivationReason.Context?10 +QtWidgets.QSystemTrayIcon.ActivationReason.DoubleClick?10 +QtWidgets.QSystemTrayIcon.ActivationReason.Trigger?10 +QtWidgets.QSystemTrayIcon.ActivationReason.MiddleClick?10 +QtWidgets.QSystemTrayIcon?1(QObject parent=None) +QtWidgets.QSystemTrayIcon.__init__?1(self, QObject parent=None) +QtWidgets.QSystemTrayIcon?1(QIcon, QObject parent=None) +QtWidgets.QSystemTrayIcon.__init__?1(self, QIcon, QObject parent=None) +QtWidgets.QSystemTrayIcon.setContextMenu?4(QMenu) +QtWidgets.QSystemTrayIcon.contextMenu?4() -> QMenu +QtWidgets.QSystemTrayIcon.geometry?4() -> QRect +QtWidgets.QSystemTrayIcon.icon?4() -> QIcon +QtWidgets.QSystemTrayIcon.setIcon?4(QIcon) +QtWidgets.QSystemTrayIcon.toolTip?4() -> QString +QtWidgets.QSystemTrayIcon.setToolTip?4(QString) +QtWidgets.QSystemTrayIcon.isSystemTrayAvailable?4() -> bool +QtWidgets.QSystemTrayIcon.supportsMessages?4() -> bool +QtWidgets.QSystemTrayIcon.showMessage?4(QString, QString, QSystemTrayIcon.MessageIcon icon=QSystemTrayIcon.Information, int msecs=10000) +QtWidgets.QSystemTrayIcon.showMessage?4(QString, QString, QIcon, int msecs=10000) +QtWidgets.QSystemTrayIcon.isVisible?4() -> bool +QtWidgets.QSystemTrayIcon.hide?4() +QtWidgets.QSystemTrayIcon.setVisible?4(bool) +QtWidgets.QSystemTrayIcon.show?4() +QtWidgets.QSystemTrayIcon.activated?4(QSystemTrayIcon.ActivationReason) +QtWidgets.QSystemTrayIcon.messageClicked?4() +QtWidgets.QSystemTrayIcon.event?4(QEvent) -> bool +QtWidgets.QTabBar.SelectionBehavior?10 +QtWidgets.QTabBar.SelectionBehavior.SelectLeftTab?10 +QtWidgets.QTabBar.SelectionBehavior.SelectRightTab?10 +QtWidgets.QTabBar.SelectionBehavior.SelectPreviousTab?10 +QtWidgets.QTabBar.ButtonPosition?10 +QtWidgets.QTabBar.ButtonPosition.LeftSide?10 +QtWidgets.QTabBar.ButtonPosition.RightSide?10 +QtWidgets.QTabBar.Shape?10 +QtWidgets.QTabBar.Shape.RoundedNorth?10 +QtWidgets.QTabBar.Shape.RoundedSouth?10 +QtWidgets.QTabBar.Shape.RoundedWest?10 +QtWidgets.QTabBar.Shape.RoundedEast?10 +QtWidgets.QTabBar.Shape.TriangularNorth?10 +QtWidgets.QTabBar.Shape.TriangularSouth?10 +QtWidgets.QTabBar.Shape.TriangularWest?10 +QtWidgets.QTabBar.Shape.TriangularEast?10 +QtWidgets.QTabBar?1(QWidget parent=None) +QtWidgets.QTabBar.__init__?1(self, QWidget parent=None) +QtWidgets.QTabBar.shape?4() -> QTabBar.Shape +QtWidgets.QTabBar.setShape?4(QTabBar.Shape) +QtWidgets.QTabBar.addTab?4(QString) -> int +QtWidgets.QTabBar.addTab?4(QIcon, QString) -> int +QtWidgets.QTabBar.insertTab?4(int, QString) -> int +QtWidgets.QTabBar.insertTab?4(int, QIcon, QString) -> int +QtWidgets.QTabBar.removeTab?4(int) +QtWidgets.QTabBar.isTabEnabled?4(int) -> bool +QtWidgets.QTabBar.setTabEnabled?4(int, bool) +QtWidgets.QTabBar.tabText?4(int) -> QString +QtWidgets.QTabBar.setTabText?4(int, QString) +QtWidgets.QTabBar.tabTextColor?4(int) -> QColor +QtWidgets.QTabBar.setTabTextColor?4(int, QColor) +QtWidgets.QTabBar.tabIcon?4(int) -> QIcon +QtWidgets.QTabBar.setTabIcon?4(int, QIcon) +QtWidgets.QTabBar.setTabToolTip?4(int, QString) +QtWidgets.QTabBar.tabToolTip?4(int) -> QString +QtWidgets.QTabBar.setTabWhatsThis?4(int, QString) +QtWidgets.QTabBar.tabWhatsThis?4(int) -> QString +QtWidgets.QTabBar.setTabData?4(int, QVariant) +QtWidgets.QTabBar.tabData?4(int) -> QVariant +QtWidgets.QTabBar.tabAt?4(QPoint) -> int +QtWidgets.QTabBar.tabRect?4(int) -> QRect +QtWidgets.QTabBar.currentIndex?4() -> int +QtWidgets.QTabBar.count?4() -> int +QtWidgets.QTabBar.sizeHint?4() -> QSize +QtWidgets.QTabBar.minimumSizeHint?4() -> QSize +QtWidgets.QTabBar.setDrawBase?4(bool) +QtWidgets.QTabBar.drawBase?4() -> bool +QtWidgets.QTabBar.iconSize?4() -> QSize +QtWidgets.QTabBar.setIconSize?4(QSize) +QtWidgets.QTabBar.elideMode?4() -> Qt.TextElideMode +QtWidgets.QTabBar.setElideMode?4(Qt.TextElideMode) +QtWidgets.QTabBar.setUsesScrollButtons?4(bool) +QtWidgets.QTabBar.usesScrollButtons?4() -> bool +QtWidgets.QTabBar.setCurrentIndex?4(int) +QtWidgets.QTabBar.currentChanged?4(int) +QtWidgets.QTabBar.initStyleOption?4(QStyleOptionTab, int) +QtWidgets.QTabBar.tabSizeHint?4(int) -> QSize +QtWidgets.QTabBar.tabInserted?4(int) +QtWidgets.QTabBar.tabRemoved?4(int) +QtWidgets.QTabBar.tabLayoutChange?4() +QtWidgets.QTabBar.event?4(QEvent) -> bool +QtWidgets.QTabBar.resizeEvent?4(QResizeEvent) +QtWidgets.QTabBar.showEvent?4(QShowEvent) +QtWidgets.QTabBar.paintEvent?4(QPaintEvent) +QtWidgets.QTabBar.mousePressEvent?4(QMouseEvent) +QtWidgets.QTabBar.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QTabBar.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QTabBar.keyPressEvent?4(QKeyEvent) +QtWidgets.QTabBar.changeEvent?4(QEvent) +QtWidgets.QTabBar.moveTab?4(int, int) +QtWidgets.QTabBar.tabsClosable?4() -> bool +QtWidgets.QTabBar.setTabsClosable?4(bool) +QtWidgets.QTabBar.setTabButton?4(int, QTabBar.ButtonPosition, QWidget) +QtWidgets.QTabBar.tabButton?4(int, QTabBar.ButtonPosition) -> QWidget +QtWidgets.QTabBar.selectionBehaviorOnRemove?4() -> QTabBar.SelectionBehavior +QtWidgets.QTabBar.setSelectionBehaviorOnRemove?4(QTabBar.SelectionBehavior) +QtWidgets.QTabBar.expanding?4() -> bool +QtWidgets.QTabBar.setExpanding?4(bool) +QtWidgets.QTabBar.isMovable?4() -> bool +QtWidgets.QTabBar.setMovable?4(bool) +QtWidgets.QTabBar.documentMode?4() -> bool +QtWidgets.QTabBar.setDocumentMode?4(bool) +QtWidgets.QTabBar.tabCloseRequested?4(int) +QtWidgets.QTabBar.tabMoved?4(int, int) +QtWidgets.QTabBar.hideEvent?4(QHideEvent) +QtWidgets.QTabBar.wheelEvent?4(QWheelEvent) +QtWidgets.QTabBar.minimumTabSizeHint?4(int) -> QSize +QtWidgets.QTabBar.tabBarClicked?4(int) +QtWidgets.QTabBar.tabBarDoubleClicked?4(int) +QtWidgets.QTabBar.autoHide?4() -> bool +QtWidgets.QTabBar.setAutoHide?4(bool) +QtWidgets.QTabBar.changeCurrentOnDrag?4() -> bool +QtWidgets.QTabBar.setChangeCurrentOnDrag?4(bool) +QtWidgets.QTabBar.timerEvent?4(QTimerEvent) +QtWidgets.QTabBar.accessibleTabName?4(int) -> QString +QtWidgets.QTabBar.setAccessibleTabName?4(int, QString) +QtWidgets.QTabBar.isTabVisible?4(int) -> bool +QtWidgets.QTabBar.setTabVisible?4(int, bool) +QtWidgets.QTableView?1(QWidget parent=None) +QtWidgets.QTableView.__init__?1(self, QWidget parent=None) +QtWidgets.QTableView.setModel?4(QAbstractItemModel) +QtWidgets.QTableView.setRootIndex?4(QModelIndex) +QtWidgets.QTableView.setSelectionModel?4(QItemSelectionModel) +QtWidgets.QTableView.horizontalHeader?4() -> QHeaderView +QtWidgets.QTableView.verticalHeader?4() -> QHeaderView +QtWidgets.QTableView.setHorizontalHeader?4(QHeaderView) +QtWidgets.QTableView.setVerticalHeader?4(QHeaderView) +QtWidgets.QTableView.rowViewportPosition?4(int) -> int +QtWidgets.QTableView.setRowHeight?4(int, int) +QtWidgets.QTableView.rowHeight?4(int) -> int +QtWidgets.QTableView.rowAt?4(int) -> int +QtWidgets.QTableView.columnViewportPosition?4(int) -> int +QtWidgets.QTableView.setColumnWidth?4(int, int) +QtWidgets.QTableView.columnWidth?4(int) -> int +QtWidgets.QTableView.columnAt?4(int) -> int +QtWidgets.QTableView.isRowHidden?4(int) -> bool +QtWidgets.QTableView.setRowHidden?4(int, bool) +QtWidgets.QTableView.isColumnHidden?4(int) -> bool +QtWidgets.QTableView.setColumnHidden?4(int, bool) +QtWidgets.QTableView.showGrid?4() -> bool +QtWidgets.QTableView.setShowGrid?4(bool) +QtWidgets.QTableView.gridStyle?4() -> Qt.PenStyle +QtWidgets.QTableView.setGridStyle?4(Qt.PenStyle) +QtWidgets.QTableView.visualRect?4(QModelIndex) -> QRect +QtWidgets.QTableView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) +QtWidgets.QTableView.indexAt?4(QPoint) -> QModelIndex +QtWidgets.QTableView.selectRow?4(int) +QtWidgets.QTableView.selectColumn?4(int) +QtWidgets.QTableView.hideRow?4(int) +QtWidgets.QTableView.hideColumn?4(int) +QtWidgets.QTableView.showRow?4(int) +QtWidgets.QTableView.showColumn?4(int) +QtWidgets.QTableView.resizeRowToContents?4(int) +QtWidgets.QTableView.resizeRowsToContents?4() +QtWidgets.QTableView.resizeColumnToContents?4(int) +QtWidgets.QTableView.resizeColumnsToContents?4() +QtWidgets.QTableView.rowMoved?4(int, int, int) +QtWidgets.QTableView.columnMoved?4(int, int, int) +QtWidgets.QTableView.rowResized?4(int, int, int) +QtWidgets.QTableView.columnResized?4(int, int, int) +QtWidgets.QTableView.rowCountChanged?4(int, int) +QtWidgets.QTableView.columnCountChanged?4(int, int) +QtWidgets.QTableView.scrollContentsBy?4(int, int) +QtWidgets.QTableView.viewOptions?4() -> QStyleOptionViewItem +QtWidgets.QTableView.paintEvent?4(QPaintEvent) +QtWidgets.QTableView.timerEvent?4(QTimerEvent) +QtWidgets.QTableView.horizontalOffset?4() -> int +QtWidgets.QTableView.verticalOffset?4() -> int +QtWidgets.QTableView.moveCursor?4(QAbstractItemView.CursorAction, Qt.KeyboardModifiers) -> QModelIndex +QtWidgets.QTableView.setSelection?4(QRect, QItemSelectionModel.SelectionFlags) +QtWidgets.QTableView.visualRegionForSelection?4(QItemSelection) -> QRegion +QtWidgets.QTableView.selectedIndexes?4() -> unknown-type +QtWidgets.QTableView.updateGeometries?4() +QtWidgets.QTableView.sizeHintForRow?4(int) -> int +QtWidgets.QTableView.sizeHintForColumn?4(int) -> int +QtWidgets.QTableView.verticalScrollbarAction?4(int) +QtWidgets.QTableView.horizontalScrollbarAction?4(int) +QtWidgets.QTableView.isIndexHidden?4(QModelIndex) -> bool +QtWidgets.QTableView.viewportSizeHint?4() -> QSize +QtWidgets.QTableView.setSortingEnabled?4(bool) +QtWidgets.QTableView.isSortingEnabled?4() -> bool +QtWidgets.QTableView.setSpan?4(int, int, int, int) +QtWidgets.QTableView.rowSpan?4(int, int) -> int +QtWidgets.QTableView.columnSpan?4(int, int) -> int +QtWidgets.QTableView.sortByColumn?4(int, Qt.SortOrder) +QtWidgets.QTableView.setWordWrap?4(bool) +QtWidgets.QTableView.wordWrap?4() -> bool +QtWidgets.QTableView.setCornerButtonEnabled?4(bool) +QtWidgets.QTableView.isCornerButtonEnabled?4() -> bool +QtWidgets.QTableView.clearSpans?4() +QtWidgets.QTableView.selectionChanged?4(QItemSelection, QItemSelection) +QtWidgets.QTableView.currentChanged?4(QModelIndex, QModelIndex) +QtWidgets.QTableWidgetSelectionRange?1() +QtWidgets.QTableWidgetSelectionRange.__init__?1(self) +QtWidgets.QTableWidgetSelectionRange?1(int, int, int, int) +QtWidgets.QTableWidgetSelectionRange.__init__?1(self, int, int, int, int) +QtWidgets.QTableWidgetSelectionRange?1(QTableWidgetSelectionRange) +QtWidgets.QTableWidgetSelectionRange.__init__?1(self, QTableWidgetSelectionRange) +QtWidgets.QTableWidgetSelectionRange.topRow?4() -> int +QtWidgets.QTableWidgetSelectionRange.bottomRow?4() -> int +QtWidgets.QTableWidgetSelectionRange.leftColumn?4() -> int +QtWidgets.QTableWidgetSelectionRange.rightColumn?4() -> int +QtWidgets.QTableWidgetSelectionRange.rowCount?4() -> int +QtWidgets.QTableWidgetSelectionRange.columnCount?4() -> int +QtWidgets.QTableWidgetItem.ItemType?10 +QtWidgets.QTableWidgetItem.ItemType.Type?10 +QtWidgets.QTableWidgetItem.ItemType.UserType?10 +QtWidgets.QTableWidgetItem?1(int type=QTableWidgetItem.ItemType.Type) +QtWidgets.QTableWidgetItem.__init__?1(self, int type=QTableWidgetItem.ItemType.Type) +QtWidgets.QTableWidgetItem?1(QString, int type=QTableWidgetItem.ItemType.Type) +QtWidgets.QTableWidgetItem.__init__?1(self, QString, int type=QTableWidgetItem.ItemType.Type) +QtWidgets.QTableWidgetItem?1(QIcon, QString, int type=QTableWidgetItem.ItemType.Type) +QtWidgets.QTableWidgetItem.__init__?1(self, QIcon, QString, int type=QTableWidgetItem.ItemType.Type) +QtWidgets.QTableWidgetItem?1(QTableWidgetItem) +QtWidgets.QTableWidgetItem.__init__?1(self, QTableWidgetItem) +QtWidgets.QTableWidgetItem.clone?4() -> QTableWidgetItem +QtWidgets.QTableWidgetItem.tableWidget?4() -> QTableWidget +QtWidgets.QTableWidgetItem.flags?4() -> Qt.ItemFlags +QtWidgets.QTableWidgetItem.text?4() -> QString +QtWidgets.QTableWidgetItem.icon?4() -> QIcon +QtWidgets.QTableWidgetItem.statusTip?4() -> QString +QtWidgets.QTableWidgetItem.toolTip?4() -> QString +QtWidgets.QTableWidgetItem.whatsThis?4() -> QString +QtWidgets.QTableWidgetItem.font?4() -> QFont +QtWidgets.QTableWidgetItem.textAlignment?4() -> int +QtWidgets.QTableWidgetItem.setTextAlignment?4(int) +QtWidgets.QTableWidgetItem.checkState?4() -> Qt.CheckState +QtWidgets.QTableWidgetItem.setCheckState?4(Qt.CheckState) +QtWidgets.QTableWidgetItem.data?4(int) -> QVariant +QtWidgets.QTableWidgetItem.setData?4(int, QVariant) +QtWidgets.QTableWidgetItem.read?4(QDataStream) +QtWidgets.QTableWidgetItem.write?4(QDataStream) +QtWidgets.QTableWidgetItem.type?4() -> int +QtWidgets.QTableWidgetItem.setFlags?4(Qt.ItemFlags) +QtWidgets.QTableWidgetItem.setText?4(QString) +QtWidgets.QTableWidgetItem.setIcon?4(QIcon) +QtWidgets.QTableWidgetItem.setStatusTip?4(QString) +QtWidgets.QTableWidgetItem.setToolTip?4(QString) +QtWidgets.QTableWidgetItem.setWhatsThis?4(QString) +QtWidgets.QTableWidgetItem.setFont?4(QFont) +QtWidgets.QTableWidgetItem.sizeHint?4() -> QSize +QtWidgets.QTableWidgetItem.setSizeHint?4(QSize) +QtWidgets.QTableWidgetItem.background?4() -> QBrush +QtWidgets.QTableWidgetItem.setBackground?4(QBrush) +QtWidgets.QTableWidgetItem.foreground?4() -> QBrush +QtWidgets.QTableWidgetItem.setForeground?4(QBrush) +QtWidgets.QTableWidgetItem.row?4() -> int +QtWidgets.QTableWidgetItem.column?4() -> int +QtWidgets.QTableWidgetItem.setSelected?4(bool) +QtWidgets.QTableWidgetItem.isSelected?4() -> bool +QtWidgets.QTableWidget?1(QWidget parent=None) +QtWidgets.QTableWidget.__init__?1(self, QWidget parent=None) +QtWidgets.QTableWidget?1(int, int, QWidget parent=None) +QtWidgets.QTableWidget.__init__?1(self, int, int, QWidget parent=None) +QtWidgets.QTableWidget.setRowCount?4(int) +QtWidgets.QTableWidget.rowCount?4() -> int +QtWidgets.QTableWidget.setColumnCount?4(int) +QtWidgets.QTableWidget.columnCount?4() -> int +QtWidgets.QTableWidget.row?4(QTableWidgetItem) -> int +QtWidgets.QTableWidget.column?4(QTableWidgetItem) -> int +QtWidgets.QTableWidget.item?4(int, int) -> QTableWidgetItem +QtWidgets.QTableWidget.setItem?4(int, int, QTableWidgetItem) +QtWidgets.QTableWidget.takeItem?4(int, int) -> QTableWidgetItem +QtWidgets.QTableWidget.verticalHeaderItem?4(int) -> QTableWidgetItem +QtWidgets.QTableWidget.setVerticalHeaderItem?4(int, QTableWidgetItem) +QtWidgets.QTableWidget.takeVerticalHeaderItem?4(int) -> QTableWidgetItem +QtWidgets.QTableWidget.horizontalHeaderItem?4(int) -> QTableWidgetItem +QtWidgets.QTableWidget.setHorizontalHeaderItem?4(int, QTableWidgetItem) +QtWidgets.QTableWidget.takeHorizontalHeaderItem?4(int) -> QTableWidgetItem +QtWidgets.QTableWidget.setVerticalHeaderLabels?4(QStringList) +QtWidgets.QTableWidget.setHorizontalHeaderLabels?4(QStringList) +QtWidgets.QTableWidget.currentRow?4() -> int +QtWidgets.QTableWidget.currentColumn?4() -> int +QtWidgets.QTableWidget.currentItem?4() -> QTableWidgetItem +QtWidgets.QTableWidget.setCurrentItem?4(QTableWidgetItem) +QtWidgets.QTableWidget.setCurrentItem?4(QTableWidgetItem, QItemSelectionModel.SelectionFlags) +QtWidgets.QTableWidget.setCurrentCell?4(int, int) +QtWidgets.QTableWidget.setCurrentCell?4(int, int, QItemSelectionModel.SelectionFlags) +QtWidgets.QTableWidget.sortItems?4(int, Qt.SortOrder order=Qt.AscendingOrder) +QtWidgets.QTableWidget.setSortingEnabled?4(bool) +QtWidgets.QTableWidget.isSortingEnabled?4() -> bool +QtWidgets.QTableWidget.editItem?4(QTableWidgetItem) +QtWidgets.QTableWidget.openPersistentEditor?4(QTableWidgetItem) +QtWidgets.QTableWidget.closePersistentEditor?4(QTableWidgetItem) +QtWidgets.QTableWidget.cellWidget?4(int, int) -> QWidget +QtWidgets.QTableWidget.setCellWidget?4(int, int, QWidget) +QtWidgets.QTableWidget.removeCellWidget?4(int, int) +QtWidgets.QTableWidget.setRangeSelected?4(QTableWidgetSelectionRange, bool) +QtWidgets.QTableWidget.selectedRanges?4() -> unknown-type +QtWidgets.QTableWidget.selectedItems?4() -> unknown-type +QtWidgets.QTableWidget.findItems?4(QString, Qt.MatchFlags) -> unknown-type +QtWidgets.QTableWidget.visualRow?4(int) -> int +QtWidgets.QTableWidget.visualColumn?4(int) -> int +QtWidgets.QTableWidget.itemAt?4(QPoint) -> QTableWidgetItem +QtWidgets.QTableWidget.itemAt?4(int, int) -> QTableWidgetItem +QtWidgets.QTableWidget.visualItemRect?4(QTableWidgetItem) -> QRect +QtWidgets.QTableWidget.itemPrototype?4() -> QTableWidgetItem +QtWidgets.QTableWidget.setItemPrototype?4(QTableWidgetItem) +QtWidgets.QTableWidget.scrollToItem?4(QTableWidgetItem, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) +QtWidgets.QTableWidget.insertRow?4(int) +QtWidgets.QTableWidget.insertColumn?4(int) +QtWidgets.QTableWidget.removeRow?4(int) +QtWidgets.QTableWidget.removeColumn?4(int) +QtWidgets.QTableWidget.clear?4() +QtWidgets.QTableWidget.clearContents?4() +QtWidgets.QTableWidget.itemPressed?4(QTableWidgetItem) +QtWidgets.QTableWidget.itemClicked?4(QTableWidgetItem) +QtWidgets.QTableWidget.itemDoubleClicked?4(QTableWidgetItem) +QtWidgets.QTableWidget.itemActivated?4(QTableWidgetItem) +QtWidgets.QTableWidget.itemEntered?4(QTableWidgetItem) +QtWidgets.QTableWidget.itemChanged?4(QTableWidgetItem) +QtWidgets.QTableWidget.currentItemChanged?4(QTableWidgetItem, QTableWidgetItem) +QtWidgets.QTableWidget.itemSelectionChanged?4() +QtWidgets.QTableWidget.cellPressed?4(int, int) +QtWidgets.QTableWidget.cellClicked?4(int, int) +QtWidgets.QTableWidget.cellDoubleClicked?4(int, int) +QtWidgets.QTableWidget.cellActivated?4(int, int) +QtWidgets.QTableWidget.cellEntered?4(int, int) +QtWidgets.QTableWidget.cellChanged?4(int, int) +QtWidgets.QTableWidget.currentCellChanged?4(int, int, int, int) +QtWidgets.QTableWidget.mimeTypes?4() -> QStringList +QtWidgets.QTableWidget.mimeData?4(unknown-type) -> QMimeData +QtWidgets.QTableWidget.dropMimeData?4(int, int, QMimeData, Qt.DropAction) -> bool +QtWidgets.QTableWidget.supportedDropActions?4() -> Qt.DropActions +QtWidgets.QTableWidget.items?4(QMimeData) -> unknown-type +QtWidgets.QTableWidget.indexFromItem?4(QTableWidgetItem) -> QModelIndex +QtWidgets.QTableWidget.itemFromIndex?4(QModelIndex) -> QTableWidgetItem +QtWidgets.QTableWidget.event?4(QEvent) -> bool +QtWidgets.QTableWidget.dropEvent?4(QDropEvent) +QtWidgets.QTableWidget.isPersistentEditorOpen?4(QTableWidgetItem) -> bool +QtWidgets.QTabWidget.TabShape?10 +QtWidgets.QTabWidget.TabShape.Rounded?10 +QtWidgets.QTabWidget.TabShape.Triangular?10 +QtWidgets.QTabWidget.TabPosition?10 +QtWidgets.QTabWidget.TabPosition.North?10 +QtWidgets.QTabWidget.TabPosition.South?10 +QtWidgets.QTabWidget.TabPosition.West?10 +QtWidgets.QTabWidget.TabPosition.East?10 +QtWidgets.QTabWidget?1(QWidget parent=None) +QtWidgets.QTabWidget.__init__?1(self, QWidget parent=None) +QtWidgets.QTabWidget.clear?4() +QtWidgets.QTabWidget.addTab?4(QWidget, QString) -> int +QtWidgets.QTabWidget.addTab?4(QWidget, QIcon, QString) -> int +QtWidgets.QTabWidget.insertTab?4(int, QWidget, QString) -> int +QtWidgets.QTabWidget.insertTab?4(int, QWidget, QIcon, QString) -> int +QtWidgets.QTabWidget.removeTab?4(int) +QtWidgets.QTabWidget.isTabEnabled?4(int) -> bool +QtWidgets.QTabWidget.setTabEnabled?4(int, bool) +QtWidgets.QTabWidget.tabText?4(int) -> QString +QtWidgets.QTabWidget.setTabText?4(int, QString) +QtWidgets.QTabWidget.tabIcon?4(int) -> QIcon +QtWidgets.QTabWidget.setTabIcon?4(int, QIcon) +QtWidgets.QTabWidget.setTabToolTip?4(int, QString) +QtWidgets.QTabWidget.tabToolTip?4(int) -> QString +QtWidgets.QTabWidget.setTabWhatsThis?4(int, QString) +QtWidgets.QTabWidget.tabWhatsThis?4(int) -> QString +QtWidgets.QTabWidget.currentIndex?4() -> int +QtWidgets.QTabWidget.currentWidget?4() -> QWidget +QtWidgets.QTabWidget.widget?4(int) -> QWidget +QtWidgets.QTabWidget.indexOf?4(QWidget) -> int +QtWidgets.QTabWidget.count?4() -> int +QtWidgets.QTabWidget.tabPosition?4() -> QTabWidget.TabPosition +QtWidgets.QTabWidget.setTabPosition?4(QTabWidget.TabPosition) +QtWidgets.QTabWidget.tabShape?4() -> QTabWidget.TabShape +QtWidgets.QTabWidget.setTabShape?4(QTabWidget.TabShape) +QtWidgets.QTabWidget.sizeHint?4() -> QSize +QtWidgets.QTabWidget.minimumSizeHint?4() -> QSize +QtWidgets.QTabWidget.setCornerWidget?4(QWidget, Qt.Corner corner=Qt.TopRightCorner) +QtWidgets.QTabWidget.cornerWidget?4(Qt.Corner corner=Qt.TopRightCorner) -> QWidget +QtWidgets.QTabWidget.setCurrentIndex?4(int) +QtWidgets.QTabWidget.setCurrentWidget?4(QWidget) +QtWidgets.QTabWidget.currentChanged?4(int) +QtWidgets.QTabWidget.initStyleOption?4(QStyleOptionTabWidgetFrame) +QtWidgets.QTabWidget.tabInserted?4(int) +QtWidgets.QTabWidget.tabRemoved?4(int) +QtWidgets.QTabWidget.event?4(QEvent) -> bool +QtWidgets.QTabWidget.showEvent?4(QShowEvent) +QtWidgets.QTabWidget.resizeEvent?4(QResizeEvent) +QtWidgets.QTabWidget.keyPressEvent?4(QKeyEvent) +QtWidgets.QTabWidget.paintEvent?4(QPaintEvent) +QtWidgets.QTabWidget.setTabBar?4(QTabBar) +QtWidgets.QTabWidget.tabBar?4() -> QTabBar +QtWidgets.QTabWidget.changeEvent?4(QEvent) +QtWidgets.QTabWidget.elideMode?4() -> Qt.TextElideMode +QtWidgets.QTabWidget.setElideMode?4(Qt.TextElideMode) +QtWidgets.QTabWidget.iconSize?4() -> QSize +QtWidgets.QTabWidget.setIconSize?4(QSize) +QtWidgets.QTabWidget.usesScrollButtons?4() -> bool +QtWidgets.QTabWidget.setUsesScrollButtons?4(bool) +QtWidgets.QTabWidget.tabsClosable?4() -> bool +QtWidgets.QTabWidget.setTabsClosable?4(bool) +QtWidgets.QTabWidget.isMovable?4() -> bool +QtWidgets.QTabWidget.setMovable?4(bool) +QtWidgets.QTabWidget.documentMode?4() -> bool +QtWidgets.QTabWidget.setDocumentMode?4(bool) +QtWidgets.QTabWidget.tabCloseRequested?4(int) +QtWidgets.QTabWidget.heightForWidth?4(int) -> int +QtWidgets.QTabWidget.hasHeightForWidth?4() -> bool +QtWidgets.QTabWidget.tabBarClicked?4(int) +QtWidgets.QTabWidget.tabBarDoubleClicked?4(int) +QtWidgets.QTabWidget.tabBarAutoHide?4() -> bool +QtWidgets.QTabWidget.setTabBarAutoHide?4(bool) +QtWidgets.QTabWidget.isTabVisible?4(int) -> bool +QtWidgets.QTabWidget.setTabVisible?4(int, bool) +QtWidgets.QTextEdit.AutoFormattingFlag?10 +QtWidgets.QTextEdit.AutoFormattingFlag.AutoNone?10 +QtWidgets.QTextEdit.AutoFormattingFlag.AutoBulletList?10 +QtWidgets.QTextEdit.AutoFormattingFlag.AutoAll?10 +QtWidgets.QTextEdit.LineWrapMode?10 +QtWidgets.QTextEdit.LineWrapMode.NoWrap?10 +QtWidgets.QTextEdit.LineWrapMode.WidgetWidth?10 +QtWidgets.QTextEdit.LineWrapMode.FixedPixelWidth?10 +QtWidgets.QTextEdit.LineWrapMode.FixedColumnWidth?10 +QtWidgets.QTextEdit?1(QWidget parent=None) +QtWidgets.QTextEdit.__init__?1(self, QWidget parent=None) +QtWidgets.QTextEdit?1(QString, QWidget parent=None) +QtWidgets.QTextEdit.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QTextEdit.setDocument?4(QTextDocument) +QtWidgets.QTextEdit.document?4() -> QTextDocument +QtWidgets.QTextEdit.setTextCursor?4(QTextCursor) +QtWidgets.QTextEdit.textCursor?4() -> QTextCursor +QtWidgets.QTextEdit.isReadOnly?4() -> bool +QtWidgets.QTextEdit.setReadOnly?4(bool) +QtWidgets.QTextEdit.fontPointSize?4() -> float +QtWidgets.QTextEdit.fontFamily?4() -> QString +QtWidgets.QTextEdit.fontWeight?4() -> int +QtWidgets.QTextEdit.fontUnderline?4() -> bool +QtWidgets.QTextEdit.fontItalic?4() -> bool +QtWidgets.QTextEdit.textColor?4() -> QColor +QtWidgets.QTextEdit.currentFont?4() -> QFont +QtWidgets.QTextEdit.alignment?4() -> Qt.Alignment +QtWidgets.QTextEdit.mergeCurrentCharFormat?4(QTextCharFormat) +QtWidgets.QTextEdit.setCurrentCharFormat?4(QTextCharFormat) +QtWidgets.QTextEdit.currentCharFormat?4() -> QTextCharFormat +QtWidgets.QTextEdit.autoFormatting?4() -> QTextEdit.AutoFormatting +QtWidgets.QTextEdit.setAutoFormatting?4(QTextEdit.AutoFormatting) +QtWidgets.QTextEdit.tabChangesFocus?4() -> bool +QtWidgets.QTextEdit.setTabChangesFocus?4(bool) +QtWidgets.QTextEdit.setDocumentTitle?4(QString) +QtWidgets.QTextEdit.documentTitle?4() -> QString +QtWidgets.QTextEdit.isUndoRedoEnabled?4() -> bool +QtWidgets.QTextEdit.setUndoRedoEnabled?4(bool) +QtWidgets.QTextEdit.lineWrapMode?4() -> QTextEdit.LineWrapMode +QtWidgets.QTextEdit.setLineWrapMode?4(QTextEdit.LineWrapMode) +QtWidgets.QTextEdit.lineWrapColumnOrWidth?4() -> int +QtWidgets.QTextEdit.setLineWrapColumnOrWidth?4(int) +QtWidgets.QTextEdit.wordWrapMode?4() -> QTextOption.WrapMode +QtWidgets.QTextEdit.setWordWrapMode?4(QTextOption.WrapMode) +QtWidgets.QTextEdit.find?4(QString, QTextDocument.FindFlags options=QTextDocument.FindFlags()) -> bool +QtWidgets.QTextEdit.toPlainText?4() -> QString +QtWidgets.QTextEdit.toHtml?4() -> QString +QtWidgets.QTextEdit.append?4(QString) +QtWidgets.QTextEdit.ensureCursorVisible?4() +QtWidgets.QTextEdit.loadResource?4(int, QUrl) -> QVariant +QtWidgets.QTextEdit.createStandardContextMenu?4() -> QMenu +QtWidgets.QTextEdit.createStandardContextMenu?4(QPoint) -> QMenu +QtWidgets.QTextEdit.cursorForPosition?4(QPoint) -> QTextCursor +QtWidgets.QTextEdit.cursorRect?4(QTextCursor) -> QRect +QtWidgets.QTextEdit.cursorRect?4() -> QRect +QtWidgets.QTextEdit.anchorAt?4(QPoint) -> QString +QtWidgets.QTextEdit.overwriteMode?4() -> bool +QtWidgets.QTextEdit.setOverwriteMode?4(bool) +QtWidgets.QTextEdit.tabStopWidth?4() -> int +QtWidgets.QTextEdit.setTabStopWidth?4(int) +QtWidgets.QTextEdit.acceptRichText?4() -> bool +QtWidgets.QTextEdit.setAcceptRichText?4(bool) +QtWidgets.QTextEdit.setTextInteractionFlags?4(Qt.TextInteractionFlags) +QtWidgets.QTextEdit.textInteractionFlags?4() -> Qt.TextInteractionFlags +QtWidgets.QTextEdit.setCursorWidth?4(int) +QtWidgets.QTextEdit.cursorWidth?4() -> int +QtWidgets.QTextEdit.setExtraSelections?4(unknown-type) +QtWidgets.QTextEdit.extraSelections?4() -> unknown-type +QtWidgets.QTextEdit.canPaste?4() -> bool +QtWidgets.QTextEdit.moveCursor?4(QTextCursor.MoveOperation, QTextCursor.MoveMode mode=QTextCursor.MoveAnchor) +QtWidgets.QTextEdit.print_?4(QPagedPaintDevice) +QtWidgets.QTextEdit.print?4(QPagedPaintDevice) +QtWidgets.QTextEdit.setFontPointSize?4(float) +QtWidgets.QTextEdit.setFontFamily?4(QString) +QtWidgets.QTextEdit.setFontWeight?4(int) +QtWidgets.QTextEdit.setFontUnderline?4(bool) +QtWidgets.QTextEdit.setFontItalic?4(bool) +QtWidgets.QTextEdit.setText?4(QString) +QtWidgets.QTextEdit.setTextColor?4(QColor) +QtWidgets.QTextEdit.setCurrentFont?4(QFont) +QtWidgets.QTextEdit.setAlignment?4(Qt.Alignment) +QtWidgets.QTextEdit.setPlainText?4(QString) +QtWidgets.QTextEdit.setHtml?4(QString) +QtWidgets.QTextEdit.cut?4() +QtWidgets.QTextEdit.copy?4() +QtWidgets.QTextEdit.paste?4() +QtWidgets.QTextEdit.clear?4() +QtWidgets.QTextEdit.selectAll?4() +QtWidgets.QTextEdit.insertPlainText?4(QString) +QtWidgets.QTextEdit.insertHtml?4(QString) +QtWidgets.QTextEdit.scrollToAnchor?4(QString) +QtWidgets.QTextEdit.redo?4() +QtWidgets.QTextEdit.undo?4() +QtWidgets.QTextEdit.zoomIn?4(int range=1) +QtWidgets.QTextEdit.zoomOut?4(int range=1) +QtWidgets.QTextEdit.textChanged?4() +QtWidgets.QTextEdit.undoAvailable?4(bool) +QtWidgets.QTextEdit.redoAvailable?4(bool) +QtWidgets.QTextEdit.currentCharFormatChanged?4(QTextCharFormat) +QtWidgets.QTextEdit.copyAvailable?4(bool) +QtWidgets.QTextEdit.selectionChanged?4() +QtWidgets.QTextEdit.cursorPositionChanged?4() +QtWidgets.QTextEdit.event?4(QEvent) -> bool +QtWidgets.QTextEdit.timerEvent?4(QTimerEvent) +QtWidgets.QTextEdit.keyPressEvent?4(QKeyEvent) +QtWidgets.QTextEdit.keyReleaseEvent?4(QKeyEvent) +QtWidgets.QTextEdit.resizeEvent?4(QResizeEvent) +QtWidgets.QTextEdit.paintEvent?4(QPaintEvent) +QtWidgets.QTextEdit.mousePressEvent?4(QMouseEvent) +QtWidgets.QTextEdit.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QTextEdit.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QTextEdit.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QTextEdit.focusNextPrevChild?4(bool) -> bool +QtWidgets.QTextEdit.contextMenuEvent?4(QContextMenuEvent) +QtWidgets.QTextEdit.dragEnterEvent?4(QDragEnterEvent) +QtWidgets.QTextEdit.dragLeaveEvent?4(QDragLeaveEvent) +QtWidgets.QTextEdit.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QTextEdit.dropEvent?4(QDropEvent) +QtWidgets.QTextEdit.focusInEvent?4(QFocusEvent) +QtWidgets.QTextEdit.focusOutEvent?4(QFocusEvent) +QtWidgets.QTextEdit.showEvent?4(QShowEvent) +QtWidgets.QTextEdit.changeEvent?4(QEvent) +QtWidgets.QTextEdit.wheelEvent?4(QWheelEvent) +QtWidgets.QTextEdit.createMimeDataFromSelection?4() -> QMimeData +QtWidgets.QTextEdit.canInsertFromMimeData?4(QMimeData) -> bool +QtWidgets.QTextEdit.insertFromMimeData?4(QMimeData) +QtWidgets.QTextEdit.inputMethodEvent?4(QInputMethodEvent) +QtWidgets.QTextEdit.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtWidgets.QTextEdit.scrollContentsBy?4(int, int) +QtWidgets.QTextEdit.textBackgroundColor?4() -> QColor +QtWidgets.QTextEdit.setTextBackgroundColor?4(QColor) +QtWidgets.QTextEdit.setPlaceholderText?4(QString) +QtWidgets.QTextEdit.placeholderText?4() -> QString +QtWidgets.QTextEdit.find?4(QRegExp, QTextDocument.FindFlags options=QTextDocument.FindFlags()) -> bool +QtWidgets.QTextEdit.find?4(QRegularExpression, QTextDocument.FindFlags options=QTextDocument.FindFlags()) -> bool +QtWidgets.QTextEdit.inputMethodQuery?4(Qt.InputMethodQuery, QVariant) -> QVariant +QtWidgets.QTextEdit.tabStopDistance?4() -> float +QtWidgets.QTextEdit.setTabStopDistance?4(float) +QtWidgets.QTextEdit.toMarkdown?4(QTextDocument.MarkdownFeatures features=QTextDocument.MarkdownDialectGitHub) -> QString +QtWidgets.QTextEdit.setMarkdown?4(QString) +QtWidgets.QTextBrowser?1(QWidget parent=None) +QtWidgets.QTextBrowser.__init__?1(self, QWidget parent=None) +QtWidgets.QTextBrowser.source?4() -> QUrl +QtWidgets.QTextBrowser.searchPaths?4() -> QStringList +QtWidgets.QTextBrowser.setSearchPaths?4(QStringList) +QtWidgets.QTextBrowser.loadResource?4(int, QUrl) -> QVariant +QtWidgets.QTextBrowser.setSource?4(QUrl) +QtWidgets.QTextBrowser.backward?4() +QtWidgets.QTextBrowser.forward?4() +QtWidgets.QTextBrowser.home?4() +QtWidgets.QTextBrowser.reload?4() +QtWidgets.QTextBrowser.backwardAvailable?4(bool) +QtWidgets.QTextBrowser.forwardAvailable?4(bool) +QtWidgets.QTextBrowser.sourceChanged?4(QUrl) +QtWidgets.QTextBrowser.highlighted?4(QUrl) +QtWidgets.QTextBrowser.highlighted?4(QString) +QtWidgets.QTextBrowser.anchorClicked?4(QUrl) +QtWidgets.QTextBrowser.event?4(QEvent) -> bool +QtWidgets.QTextBrowser.keyPressEvent?4(QKeyEvent) +QtWidgets.QTextBrowser.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QTextBrowser.mousePressEvent?4(QMouseEvent) +QtWidgets.QTextBrowser.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QTextBrowser.focusOutEvent?4(QFocusEvent) +QtWidgets.QTextBrowser.focusNextPrevChild?4(bool) -> bool +QtWidgets.QTextBrowser.paintEvent?4(QPaintEvent) +QtWidgets.QTextBrowser.isBackwardAvailable?4() -> bool +QtWidgets.QTextBrowser.isForwardAvailable?4() -> bool +QtWidgets.QTextBrowser.clearHistory?4() +QtWidgets.QTextBrowser.openExternalLinks?4() -> bool +QtWidgets.QTextBrowser.setOpenExternalLinks?4(bool) +QtWidgets.QTextBrowser.openLinks?4() -> bool +QtWidgets.QTextBrowser.setOpenLinks?4(bool) +QtWidgets.QTextBrowser.historyTitle?4(int) -> QString +QtWidgets.QTextBrowser.historyUrl?4(int) -> QUrl +QtWidgets.QTextBrowser.backwardHistoryCount?4() -> int +QtWidgets.QTextBrowser.forwardHistoryCount?4() -> int +QtWidgets.QTextBrowser.historyChanged?4() +QtWidgets.QTextBrowser.sourceType?4() -> QTextDocument.ResourceType +QtWidgets.QTextBrowser.setSource?4(QUrl, QTextDocument.ResourceType) +QtWidgets.QTextBrowser.doSetSource?4(QUrl, QTextDocument.ResourceType type=QTextDocument.UnknownResource) +QtWidgets.QTextEdit.ExtraSelection.cursor?7 +QtWidgets.QTextEdit.ExtraSelection.format?7 +QtWidgets.QTextEdit.ExtraSelection?1() +QtWidgets.QTextEdit.ExtraSelection.__init__?1(self) +QtWidgets.QTextEdit.ExtraSelection?1(QTextEdit.ExtraSelection) +QtWidgets.QTextEdit.ExtraSelection.__init__?1(self, QTextEdit.ExtraSelection) +QtWidgets.QTextEdit.AutoFormatting?1() +QtWidgets.QTextEdit.AutoFormatting.__init__?1(self) +QtWidgets.QTextEdit.AutoFormatting?1(int) +QtWidgets.QTextEdit.AutoFormatting.__init__?1(self, int) +QtWidgets.QTextEdit.AutoFormatting?1(QTextEdit.AutoFormatting) +QtWidgets.QTextEdit.AutoFormatting.__init__?1(self, QTextEdit.AutoFormatting) +QtWidgets.QToolBar?1(QString, QWidget parent=None) +QtWidgets.QToolBar.__init__?1(self, QString, QWidget parent=None) +QtWidgets.QToolBar?1(QWidget parent=None) +QtWidgets.QToolBar.__init__?1(self, QWidget parent=None) +QtWidgets.QToolBar.setMovable?4(bool) +QtWidgets.QToolBar.isMovable?4() -> bool +QtWidgets.QToolBar.setAllowedAreas?4(Qt.ToolBarAreas) +QtWidgets.QToolBar.allowedAreas?4() -> Qt.ToolBarAreas +QtWidgets.QToolBar.isAreaAllowed?4(Qt.ToolBarArea) -> bool +QtWidgets.QToolBar.setOrientation?4(Qt.Orientation) +QtWidgets.QToolBar.orientation?4() -> Qt.Orientation +QtWidgets.QToolBar.clear?4() +QtWidgets.QToolBar.addAction?4(QAction) +QtWidgets.QToolBar.addAction?4(QString) -> QAction +QtWidgets.QToolBar.addAction?4(QIcon, QString) -> QAction +QtWidgets.QToolBar.addAction?4(QString, Any) -> QAction +QtWidgets.QToolBar.addAction?4(QIcon, QString, Any) -> QAction +QtWidgets.QToolBar.addSeparator?4() -> QAction +QtWidgets.QToolBar.insertSeparator?4(QAction) -> QAction +QtWidgets.QToolBar.addWidget?4(QWidget) -> QAction +QtWidgets.QToolBar.insertWidget?4(QAction, QWidget) -> QAction +QtWidgets.QToolBar.actionGeometry?4(QAction) -> QRect +QtWidgets.QToolBar.actionAt?4(QPoint) -> QAction +QtWidgets.QToolBar.actionAt?4(int, int) -> QAction +QtWidgets.QToolBar.toggleViewAction?4() -> QAction +QtWidgets.QToolBar.iconSize?4() -> QSize +QtWidgets.QToolBar.toolButtonStyle?4() -> Qt.ToolButtonStyle +QtWidgets.QToolBar.widgetForAction?4(QAction) -> QWidget +QtWidgets.QToolBar.setIconSize?4(QSize) +QtWidgets.QToolBar.setToolButtonStyle?4(Qt.ToolButtonStyle) +QtWidgets.QToolBar.actionTriggered?4(QAction) +QtWidgets.QToolBar.movableChanged?4(bool) +QtWidgets.QToolBar.allowedAreasChanged?4(Qt.ToolBarAreas) +QtWidgets.QToolBar.orientationChanged?4(Qt.Orientation) +QtWidgets.QToolBar.iconSizeChanged?4(QSize) +QtWidgets.QToolBar.toolButtonStyleChanged?4(Qt.ToolButtonStyle) +QtWidgets.QToolBar.topLevelChanged?4(bool) +QtWidgets.QToolBar.visibilityChanged?4(bool) +QtWidgets.QToolBar.initStyleOption?4(QStyleOptionToolBar) +QtWidgets.QToolBar.actionEvent?4(QActionEvent) +QtWidgets.QToolBar.changeEvent?4(QEvent) +QtWidgets.QToolBar.paintEvent?4(QPaintEvent) +QtWidgets.QToolBar.event?4(QEvent) -> bool +QtWidgets.QToolBar.isFloatable?4() -> bool +QtWidgets.QToolBar.setFloatable?4(bool) +QtWidgets.QToolBar.isFloating?4() -> bool +QtWidgets.QToolBox?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QToolBox.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QToolBox.addItem?4(QWidget, QString) -> int +QtWidgets.QToolBox.addItem?4(QWidget, QIcon, QString) -> int +QtWidgets.QToolBox.insertItem?4(int, QWidget, QString) -> int +QtWidgets.QToolBox.insertItem?4(int, QWidget, QIcon, QString) -> int +QtWidgets.QToolBox.removeItem?4(int) +QtWidgets.QToolBox.setItemEnabled?4(int, bool) +QtWidgets.QToolBox.isItemEnabled?4(int) -> bool +QtWidgets.QToolBox.setItemText?4(int, QString) +QtWidgets.QToolBox.itemText?4(int) -> QString +QtWidgets.QToolBox.setItemIcon?4(int, QIcon) +QtWidgets.QToolBox.itemIcon?4(int) -> QIcon +QtWidgets.QToolBox.setItemToolTip?4(int, QString) +QtWidgets.QToolBox.itemToolTip?4(int) -> QString +QtWidgets.QToolBox.currentIndex?4() -> int +QtWidgets.QToolBox.currentWidget?4() -> QWidget +QtWidgets.QToolBox.widget?4(int) -> QWidget +QtWidgets.QToolBox.indexOf?4(QWidget) -> int +QtWidgets.QToolBox.count?4() -> int +QtWidgets.QToolBox.setCurrentIndex?4(int) +QtWidgets.QToolBox.setCurrentWidget?4(QWidget) +QtWidgets.QToolBox.currentChanged?4(int) +QtWidgets.QToolBox.itemInserted?4(int) +QtWidgets.QToolBox.itemRemoved?4(int) +QtWidgets.QToolBox.event?4(QEvent) -> bool +QtWidgets.QToolBox.showEvent?4(QShowEvent) +QtWidgets.QToolBox.changeEvent?4(QEvent) +QtWidgets.QToolButton.ToolButtonPopupMode?10 +QtWidgets.QToolButton.ToolButtonPopupMode.DelayedPopup?10 +QtWidgets.QToolButton.ToolButtonPopupMode.MenuButtonPopup?10 +QtWidgets.QToolButton.ToolButtonPopupMode.InstantPopup?10 +QtWidgets.QToolButton?1(QWidget parent=None) +QtWidgets.QToolButton.__init__?1(self, QWidget parent=None) +QtWidgets.QToolButton.sizeHint?4() -> QSize +QtWidgets.QToolButton.minimumSizeHint?4() -> QSize +QtWidgets.QToolButton.toolButtonStyle?4() -> Qt.ToolButtonStyle +QtWidgets.QToolButton.arrowType?4() -> Qt.ArrowType +QtWidgets.QToolButton.setArrowType?4(Qt.ArrowType) +QtWidgets.QToolButton.setMenu?4(QMenu) +QtWidgets.QToolButton.menu?4() -> QMenu +QtWidgets.QToolButton.setPopupMode?4(QToolButton.ToolButtonPopupMode) +QtWidgets.QToolButton.popupMode?4() -> QToolButton.ToolButtonPopupMode +QtWidgets.QToolButton.defaultAction?4() -> QAction +QtWidgets.QToolButton.setAutoRaise?4(bool) +QtWidgets.QToolButton.autoRaise?4() -> bool +QtWidgets.QToolButton.showMenu?4() +QtWidgets.QToolButton.setToolButtonStyle?4(Qt.ToolButtonStyle) +QtWidgets.QToolButton.setDefaultAction?4(QAction) +QtWidgets.QToolButton.triggered?4(QAction) +QtWidgets.QToolButton.initStyleOption?4(QStyleOptionToolButton) +QtWidgets.QToolButton.event?4(QEvent) -> bool +QtWidgets.QToolButton.mousePressEvent?4(QMouseEvent) +QtWidgets.QToolButton.paintEvent?4(QPaintEvent) +QtWidgets.QToolButton.actionEvent?4(QActionEvent) +QtWidgets.QToolButton.enterEvent?4(QEvent) +QtWidgets.QToolButton.leaveEvent?4(QEvent) +QtWidgets.QToolButton.timerEvent?4(QTimerEvent) +QtWidgets.QToolButton.changeEvent?4(QEvent) +QtWidgets.QToolButton.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QToolButton.nextCheckState?4() +QtWidgets.QToolButton.hitButton?4(QPoint) -> bool +QtWidgets.QToolTip?1(QToolTip) +QtWidgets.QToolTip.__init__?1(self, QToolTip) +QtWidgets.QToolTip.showText?4(QPoint, QString, QWidget widget=None) +QtWidgets.QToolTip.showText?4(QPoint, QString, QWidget, QRect) +QtWidgets.QToolTip.showText?4(QPoint, QString, QWidget, QRect, int) +QtWidgets.QToolTip.palette?4() -> QPalette +QtWidgets.QToolTip.hideText?4() +QtWidgets.QToolTip.setPalette?4(QPalette) +QtWidgets.QToolTip.font?4() -> QFont +QtWidgets.QToolTip.setFont?4(QFont) +QtWidgets.QToolTip.isVisible?4() -> bool +QtWidgets.QToolTip.text?4() -> QString +QtWidgets.QTreeView?1(QWidget parent=None) +QtWidgets.QTreeView.__init__?1(self, QWidget parent=None) +QtWidgets.QTreeView.setModel?4(QAbstractItemModel) +QtWidgets.QTreeView.setRootIndex?4(QModelIndex) +QtWidgets.QTreeView.setSelectionModel?4(QItemSelectionModel) +QtWidgets.QTreeView.header?4() -> QHeaderView +QtWidgets.QTreeView.setHeader?4(QHeaderView) +QtWidgets.QTreeView.indentation?4() -> int +QtWidgets.QTreeView.setIndentation?4(int) +QtWidgets.QTreeView.rootIsDecorated?4() -> bool +QtWidgets.QTreeView.setRootIsDecorated?4(bool) +QtWidgets.QTreeView.uniformRowHeights?4() -> bool +QtWidgets.QTreeView.setUniformRowHeights?4(bool) +QtWidgets.QTreeView.itemsExpandable?4() -> bool +QtWidgets.QTreeView.setItemsExpandable?4(bool) +QtWidgets.QTreeView.columnViewportPosition?4(int) -> int +QtWidgets.QTreeView.columnWidth?4(int) -> int +QtWidgets.QTreeView.columnAt?4(int) -> int +QtWidgets.QTreeView.isColumnHidden?4(int) -> bool +QtWidgets.QTreeView.setColumnHidden?4(int, bool) +QtWidgets.QTreeView.isRowHidden?4(int, QModelIndex) -> bool +QtWidgets.QTreeView.setRowHidden?4(int, QModelIndex, bool) +QtWidgets.QTreeView.isExpanded?4(QModelIndex) -> bool +QtWidgets.QTreeView.setExpanded?4(QModelIndex, bool) +QtWidgets.QTreeView.keyboardSearch?4(QString) +QtWidgets.QTreeView.visualRect?4(QModelIndex) -> QRect +QtWidgets.QTreeView.scrollTo?4(QModelIndex, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) +QtWidgets.QTreeView.indexAt?4(QPoint) -> QModelIndex +QtWidgets.QTreeView.indexAbove?4(QModelIndex) -> QModelIndex +QtWidgets.QTreeView.indexBelow?4(QModelIndex) -> QModelIndex +QtWidgets.QTreeView.reset?4() +QtWidgets.QTreeView.expanded?4(QModelIndex) +QtWidgets.QTreeView.collapsed?4(QModelIndex) +QtWidgets.QTreeView.dataChanged?4(QModelIndex, QModelIndex, unknown-type roles=[]) +QtWidgets.QTreeView.hideColumn?4(int) +QtWidgets.QTreeView.showColumn?4(int) +QtWidgets.QTreeView.expand?4(QModelIndex) +QtWidgets.QTreeView.expandAll?4() +QtWidgets.QTreeView.collapse?4(QModelIndex) +QtWidgets.QTreeView.collapseAll?4() +QtWidgets.QTreeView.resizeColumnToContents?4(int) +QtWidgets.QTreeView.selectAll?4() +QtWidgets.QTreeView.columnResized?4(int, int, int) +QtWidgets.QTreeView.columnCountChanged?4(int, int) +QtWidgets.QTreeView.columnMoved?4() +QtWidgets.QTreeView.reexpand?4() +QtWidgets.QTreeView.rowsRemoved?4(QModelIndex, int, int) +QtWidgets.QTreeView.scrollContentsBy?4(int, int) +QtWidgets.QTreeView.rowsInserted?4(QModelIndex, int, int) +QtWidgets.QTreeView.rowsAboutToBeRemoved?4(QModelIndex, int, int) +QtWidgets.QTreeView.moveCursor?4(QAbstractItemView.CursorAction, Qt.KeyboardModifiers) -> QModelIndex +QtWidgets.QTreeView.horizontalOffset?4() -> int +QtWidgets.QTreeView.verticalOffset?4() -> int +QtWidgets.QTreeView.setSelection?4(QRect, QItemSelectionModel.SelectionFlags) +QtWidgets.QTreeView.visualRegionForSelection?4(QItemSelection) -> QRegion +QtWidgets.QTreeView.selectedIndexes?4() -> unknown-type +QtWidgets.QTreeView.paintEvent?4(QPaintEvent) +QtWidgets.QTreeView.timerEvent?4(QTimerEvent) +QtWidgets.QTreeView.mouseReleaseEvent?4(QMouseEvent) +QtWidgets.QTreeView.drawRow?4(QPainter, QStyleOptionViewItem, QModelIndex) +QtWidgets.QTreeView.drawBranches?4(QPainter, QRect, QModelIndex) +QtWidgets.QTreeView.drawTree?4(QPainter, QRegion) +QtWidgets.QTreeView.mousePressEvent?4(QMouseEvent) +QtWidgets.QTreeView.mouseMoveEvent?4(QMouseEvent) +QtWidgets.QTreeView.mouseDoubleClickEvent?4(QMouseEvent) +QtWidgets.QTreeView.keyPressEvent?4(QKeyEvent) +QtWidgets.QTreeView.updateGeometries?4() +QtWidgets.QTreeView.sizeHintForColumn?4(int) -> int +QtWidgets.QTreeView.indexRowSizeHint?4(QModelIndex) -> int +QtWidgets.QTreeView.horizontalScrollbarAction?4(int) +QtWidgets.QTreeView.isIndexHidden?4(QModelIndex) -> bool +QtWidgets.QTreeView.setColumnWidth?4(int, int) +QtWidgets.QTreeView.setSortingEnabled?4(bool) +QtWidgets.QTreeView.isSortingEnabled?4() -> bool +QtWidgets.QTreeView.setAnimated?4(bool) +QtWidgets.QTreeView.isAnimated?4() -> bool +QtWidgets.QTreeView.setAllColumnsShowFocus?4(bool) +QtWidgets.QTreeView.allColumnsShowFocus?4() -> bool +QtWidgets.QTreeView.sortByColumn?4(int, Qt.SortOrder) +QtWidgets.QTreeView.autoExpandDelay?4() -> int +QtWidgets.QTreeView.setAutoExpandDelay?4(int) +QtWidgets.QTreeView.isFirstColumnSpanned?4(int, QModelIndex) -> bool +QtWidgets.QTreeView.setFirstColumnSpanned?4(int, QModelIndex, bool) +QtWidgets.QTreeView.setWordWrap?4(bool) +QtWidgets.QTreeView.wordWrap?4() -> bool +QtWidgets.QTreeView.expandToDepth?4(int) +QtWidgets.QTreeView.dragMoveEvent?4(QDragMoveEvent) +QtWidgets.QTreeView.viewportEvent?4(QEvent) -> bool +QtWidgets.QTreeView.rowHeight?4(QModelIndex) -> int +QtWidgets.QTreeView.selectionChanged?4(QItemSelection, QItemSelection) +QtWidgets.QTreeView.currentChanged?4(QModelIndex, QModelIndex) +QtWidgets.QTreeView.expandsOnDoubleClick?4() -> bool +QtWidgets.QTreeView.setExpandsOnDoubleClick?4(bool) +QtWidgets.QTreeView.isHeaderHidden?4() -> bool +QtWidgets.QTreeView.setHeaderHidden?4(bool) +QtWidgets.QTreeView.setTreePosition?4(int) +QtWidgets.QTreeView.treePosition?4() -> int +QtWidgets.QTreeView.viewportSizeHint?4() -> QSize +QtWidgets.QTreeView.resetIndentation?4() +QtWidgets.QTreeView.expandRecursively?4(QModelIndex, int depth=-1) +QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy?10 +QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy.ShowIndicator?10 +QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy.DontShowIndicator?10 +QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy.DontShowIndicatorWhenChildless?10 +QtWidgets.QTreeWidgetItem.ItemType?10 +QtWidgets.QTreeWidgetItem.ItemType.Type?10 +QtWidgets.QTreeWidgetItem.ItemType.UserType?10 +QtWidgets.QTreeWidgetItem?1(int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem.__init__?1(self, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem?1(QStringList, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem.__init__?1(self, QStringList, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem?1(QTreeWidget, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidget, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem?1(QTreeWidget, QStringList, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidget, QStringList, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem?1(QTreeWidget, QTreeWidgetItem, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidget, QTreeWidgetItem, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem?1(QTreeWidgetItem, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidgetItem, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem?1(QTreeWidgetItem, QStringList, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidgetItem, QStringList, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem?1(QTreeWidgetItem, QTreeWidgetItem, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidgetItem, QTreeWidgetItem, int type=QTreeWidgetItem.Type) +QtWidgets.QTreeWidgetItem?1(QTreeWidgetItem) +QtWidgets.QTreeWidgetItem.__init__?1(self, QTreeWidgetItem) +QtWidgets.QTreeWidgetItem.clone?4() -> QTreeWidgetItem +QtWidgets.QTreeWidgetItem.treeWidget?4() -> QTreeWidget +QtWidgets.QTreeWidgetItem.flags?4() -> Qt.ItemFlags +QtWidgets.QTreeWidgetItem.text?4(int) -> QString +QtWidgets.QTreeWidgetItem.icon?4(int) -> QIcon +QtWidgets.QTreeWidgetItem.statusTip?4(int) -> QString +QtWidgets.QTreeWidgetItem.toolTip?4(int) -> QString +QtWidgets.QTreeWidgetItem.whatsThis?4(int) -> QString +QtWidgets.QTreeWidgetItem.font?4(int) -> QFont +QtWidgets.QTreeWidgetItem.textAlignment?4(int) -> int +QtWidgets.QTreeWidgetItem.setTextAlignment?4(int, int) +QtWidgets.QTreeWidgetItem.checkState?4(int) -> Qt.CheckState +QtWidgets.QTreeWidgetItem.setCheckState?4(int, Qt.CheckState) +QtWidgets.QTreeWidgetItem.data?4(int, int) -> QVariant +QtWidgets.QTreeWidgetItem.setData?4(int, int, QVariant) +QtWidgets.QTreeWidgetItem.read?4(QDataStream) +QtWidgets.QTreeWidgetItem.write?4(QDataStream) +QtWidgets.QTreeWidgetItem.parent?4() -> QTreeWidgetItem +QtWidgets.QTreeWidgetItem.child?4(int) -> QTreeWidgetItem +QtWidgets.QTreeWidgetItem.childCount?4() -> int +QtWidgets.QTreeWidgetItem.columnCount?4() -> int +QtWidgets.QTreeWidgetItem.addChild?4(QTreeWidgetItem) +QtWidgets.QTreeWidgetItem.insertChild?4(int, QTreeWidgetItem) +QtWidgets.QTreeWidgetItem.takeChild?4(int) -> QTreeWidgetItem +QtWidgets.QTreeWidgetItem.type?4() -> int +QtWidgets.QTreeWidgetItem.setFlags?4(Qt.ItemFlags) +QtWidgets.QTreeWidgetItem.setText?4(int, QString) +QtWidgets.QTreeWidgetItem.setIcon?4(int, QIcon) +QtWidgets.QTreeWidgetItem.setStatusTip?4(int, QString) +QtWidgets.QTreeWidgetItem.setToolTip?4(int, QString) +QtWidgets.QTreeWidgetItem.setWhatsThis?4(int, QString) +QtWidgets.QTreeWidgetItem.setFont?4(int, QFont) +QtWidgets.QTreeWidgetItem.indexOfChild?4(QTreeWidgetItem) -> int +QtWidgets.QTreeWidgetItem.sizeHint?4(int) -> QSize +QtWidgets.QTreeWidgetItem.setSizeHint?4(int, QSize) +QtWidgets.QTreeWidgetItem.addChildren?4(unknown-type) +QtWidgets.QTreeWidgetItem.insertChildren?4(int, unknown-type) +QtWidgets.QTreeWidgetItem.takeChildren?4() -> unknown-type +QtWidgets.QTreeWidgetItem.background?4(int) -> QBrush +QtWidgets.QTreeWidgetItem.setBackground?4(int, QBrush) +QtWidgets.QTreeWidgetItem.foreground?4(int) -> QBrush +QtWidgets.QTreeWidgetItem.setForeground?4(int, QBrush) +QtWidgets.QTreeWidgetItem.sortChildren?4(int, Qt.SortOrder) +QtWidgets.QTreeWidgetItem.setSelected?4(bool) +QtWidgets.QTreeWidgetItem.isSelected?4() -> bool +QtWidgets.QTreeWidgetItem.setHidden?4(bool) +QtWidgets.QTreeWidgetItem.isHidden?4() -> bool +QtWidgets.QTreeWidgetItem.setExpanded?4(bool) +QtWidgets.QTreeWidgetItem.isExpanded?4() -> bool +QtWidgets.QTreeWidgetItem.setChildIndicatorPolicy?4(QTreeWidgetItem.ChildIndicatorPolicy) +QtWidgets.QTreeWidgetItem.childIndicatorPolicy?4() -> QTreeWidgetItem.ChildIndicatorPolicy +QtWidgets.QTreeWidgetItem.removeChild?4(QTreeWidgetItem) +QtWidgets.QTreeWidgetItem.setFirstColumnSpanned?4(bool) +QtWidgets.QTreeWidgetItem.isFirstColumnSpanned?4() -> bool +QtWidgets.QTreeWidgetItem.setDisabled?4(bool) +QtWidgets.QTreeWidgetItem.isDisabled?4() -> bool +QtWidgets.QTreeWidgetItem.emitDataChanged?4() +QtWidgets.QTreeWidget?1(QWidget parent=None) +QtWidgets.QTreeWidget.__init__?1(self, QWidget parent=None) +QtWidgets.QTreeWidget.columnCount?4() -> int +QtWidgets.QTreeWidget.setColumnCount?4(int) +QtWidgets.QTreeWidget.topLevelItem?4(int) -> QTreeWidgetItem +QtWidgets.QTreeWidget.topLevelItemCount?4() -> int +QtWidgets.QTreeWidget.insertTopLevelItem?4(int, QTreeWidgetItem) +QtWidgets.QTreeWidget.addTopLevelItem?4(QTreeWidgetItem) +QtWidgets.QTreeWidget.takeTopLevelItem?4(int) -> QTreeWidgetItem +QtWidgets.QTreeWidget.indexOfTopLevelItem?4(QTreeWidgetItem) -> int +QtWidgets.QTreeWidget.insertTopLevelItems?4(int, unknown-type) +QtWidgets.QTreeWidget.addTopLevelItems?4(unknown-type) +QtWidgets.QTreeWidget.headerItem?4() -> QTreeWidgetItem +QtWidgets.QTreeWidget.setHeaderItem?4(QTreeWidgetItem) +QtWidgets.QTreeWidget.setHeaderLabels?4(QStringList) +QtWidgets.QTreeWidget.currentItem?4() -> QTreeWidgetItem +QtWidgets.QTreeWidget.currentColumn?4() -> int +QtWidgets.QTreeWidget.setCurrentItem?4(QTreeWidgetItem) +QtWidgets.QTreeWidget.setCurrentItem?4(QTreeWidgetItem, int) +QtWidgets.QTreeWidget.setCurrentItem?4(QTreeWidgetItem, int, QItemSelectionModel.SelectionFlags) +QtWidgets.QTreeWidget.itemAt?4(QPoint) -> QTreeWidgetItem +QtWidgets.QTreeWidget.itemAt?4(int, int) -> QTreeWidgetItem +QtWidgets.QTreeWidget.visualItemRect?4(QTreeWidgetItem) -> QRect +QtWidgets.QTreeWidget.sortColumn?4() -> int +QtWidgets.QTreeWidget.sortItems?4(int, Qt.SortOrder) +QtWidgets.QTreeWidget.editItem?4(QTreeWidgetItem, int column=0) +QtWidgets.QTreeWidget.openPersistentEditor?4(QTreeWidgetItem, int column=0) +QtWidgets.QTreeWidget.closePersistentEditor?4(QTreeWidgetItem, int column=0) +QtWidgets.QTreeWidget.itemWidget?4(QTreeWidgetItem, int) -> QWidget +QtWidgets.QTreeWidget.setItemWidget?4(QTreeWidgetItem, int, QWidget) +QtWidgets.QTreeWidget.selectedItems?4() -> unknown-type +QtWidgets.QTreeWidget.findItems?4(QString, Qt.MatchFlags, int column=0) -> unknown-type +QtWidgets.QTreeWidget.scrollToItem?4(QTreeWidgetItem, QAbstractItemView.ScrollHint hint=QAbstractItemView.EnsureVisible) +QtWidgets.QTreeWidget.expandItem?4(QTreeWidgetItem) +QtWidgets.QTreeWidget.collapseItem?4(QTreeWidgetItem) +QtWidgets.QTreeWidget.clear?4() +QtWidgets.QTreeWidget.itemPressed?4(QTreeWidgetItem, int) +QtWidgets.QTreeWidget.itemClicked?4(QTreeWidgetItem, int) +QtWidgets.QTreeWidget.itemDoubleClicked?4(QTreeWidgetItem, int) +QtWidgets.QTreeWidget.itemActivated?4(QTreeWidgetItem, int) +QtWidgets.QTreeWidget.itemEntered?4(QTreeWidgetItem, int) +QtWidgets.QTreeWidget.itemChanged?4(QTreeWidgetItem, int) +QtWidgets.QTreeWidget.itemExpanded?4(QTreeWidgetItem) +QtWidgets.QTreeWidget.itemCollapsed?4(QTreeWidgetItem) +QtWidgets.QTreeWidget.currentItemChanged?4(QTreeWidgetItem, QTreeWidgetItem) +QtWidgets.QTreeWidget.itemSelectionChanged?4() +QtWidgets.QTreeWidget.mimeTypes?4() -> QStringList +QtWidgets.QTreeWidget.mimeData?4(unknown-type) -> QMimeData +QtWidgets.QTreeWidget.dropMimeData?4(QTreeWidgetItem, int, QMimeData, Qt.DropAction) -> bool +QtWidgets.QTreeWidget.supportedDropActions?4() -> Qt.DropActions +QtWidgets.QTreeWidget.indexFromItem?4(QTreeWidgetItem, int column=0) -> QModelIndex +QtWidgets.QTreeWidget.itemFromIndex?4(QModelIndex) -> QTreeWidgetItem +QtWidgets.QTreeWidget.event?4(QEvent) -> bool +QtWidgets.QTreeWidget.dropEvent?4(QDropEvent) +QtWidgets.QTreeWidget.invisibleRootItem?4() -> QTreeWidgetItem +QtWidgets.QTreeWidget.setHeaderLabel?4(QString) +QtWidgets.QTreeWidget.isFirstItemColumnSpanned?4(QTreeWidgetItem) -> bool +QtWidgets.QTreeWidget.setFirstItemColumnSpanned?4(QTreeWidgetItem, bool) +QtWidgets.QTreeWidget.itemAbove?4(QTreeWidgetItem) -> QTreeWidgetItem +QtWidgets.QTreeWidget.itemBelow?4(QTreeWidgetItem) -> QTreeWidgetItem +QtWidgets.QTreeWidget.removeItemWidget?4(QTreeWidgetItem, int) +QtWidgets.QTreeWidget.setSelectionModel?4(QItemSelectionModel) +QtWidgets.QTreeWidget.isPersistentEditorOpen?4(QTreeWidgetItem, int column=0) -> bool +QtWidgets.QTreeWidgetItemIterator.IteratorFlag?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.All?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Hidden?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NotHidden?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Selected?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Unselected?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Selectable?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NotSelectable?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.DragEnabled?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.DragDisabled?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.DropEnabled?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.DropDisabled?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.HasChildren?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NoChildren?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Checked?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NotChecked?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Enabled?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Disabled?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.Editable?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.NotEditable?10 +QtWidgets.QTreeWidgetItemIterator.IteratorFlag.UserFlag?10 +QtWidgets.QTreeWidgetItemIterator?1(QTreeWidgetItemIterator) +QtWidgets.QTreeWidgetItemIterator.__init__?1(self, QTreeWidgetItemIterator) +QtWidgets.QTreeWidgetItemIterator?1(QTreeWidget, QTreeWidgetItemIterator.IteratorFlags flags=QTreeWidgetItemIterator.All) +QtWidgets.QTreeWidgetItemIterator.__init__?1(self, QTreeWidget, QTreeWidgetItemIterator.IteratorFlags flags=QTreeWidgetItemIterator.All) +QtWidgets.QTreeWidgetItemIterator?1(QTreeWidgetItem, QTreeWidgetItemIterator.IteratorFlags flags=QTreeWidgetItemIterator.All) +QtWidgets.QTreeWidgetItemIterator.__init__?1(self, QTreeWidgetItem, QTreeWidgetItemIterator.IteratorFlags flags=QTreeWidgetItemIterator.All) +QtWidgets.QTreeWidgetItemIterator.value?4() -> QTreeWidgetItem +QtWidgets.QTreeWidgetItemIterator.IteratorFlags?1() +QtWidgets.QTreeWidgetItemIterator.IteratorFlags.__init__?1(self) +QtWidgets.QTreeWidgetItemIterator.IteratorFlags?1(int) +QtWidgets.QTreeWidgetItemIterator.IteratorFlags.__init__?1(self, int) +QtWidgets.QTreeWidgetItemIterator.IteratorFlags?1(QTreeWidgetItemIterator.IteratorFlags) +QtWidgets.QTreeWidgetItemIterator.IteratorFlags.__init__?1(self, QTreeWidgetItemIterator.IteratorFlags) +QtWidgets.QUndoGroup?1(QObject parent=None) +QtWidgets.QUndoGroup.__init__?1(self, QObject parent=None) +QtWidgets.QUndoGroup.addStack?4(QUndoStack) +QtWidgets.QUndoGroup.removeStack?4(QUndoStack) +QtWidgets.QUndoGroup.stacks?4() -> unknown-type +QtWidgets.QUndoGroup.activeStack?4() -> QUndoStack +QtWidgets.QUndoGroup.createRedoAction?4(QObject, QString prefix='') -> QAction +QtWidgets.QUndoGroup.createUndoAction?4(QObject, QString prefix='') -> QAction +QtWidgets.QUndoGroup.canUndo?4() -> bool +QtWidgets.QUndoGroup.canRedo?4() -> bool +QtWidgets.QUndoGroup.undoText?4() -> QString +QtWidgets.QUndoGroup.redoText?4() -> QString +QtWidgets.QUndoGroup.isClean?4() -> bool +QtWidgets.QUndoGroup.redo?4() +QtWidgets.QUndoGroup.setActiveStack?4(QUndoStack) +QtWidgets.QUndoGroup.undo?4() +QtWidgets.QUndoGroup.activeStackChanged?4(QUndoStack) +QtWidgets.QUndoGroup.canRedoChanged?4(bool) +QtWidgets.QUndoGroup.canUndoChanged?4(bool) +QtWidgets.QUndoGroup.cleanChanged?4(bool) +QtWidgets.QUndoGroup.indexChanged?4(int) +QtWidgets.QUndoGroup.redoTextChanged?4(QString) +QtWidgets.QUndoGroup.undoTextChanged?4(QString) +QtWidgets.QUndoCommand?1(QUndoCommand parent=None) +QtWidgets.QUndoCommand.__init__?1(self, QUndoCommand parent=None) +QtWidgets.QUndoCommand?1(QString, QUndoCommand parent=None) +QtWidgets.QUndoCommand.__init__?1(self, QString, QUndoCommand parent=None) +QtWidgets.QUndoCommand.id?4() -> int +QtWidgets.QUndoCommand.mergeWith?4(QUndoCommand) -> bool +QtWidgets.QUndoCommand.redo?4() +QtWidgets.QUndoCommand.setText?4(QString) +QtWidgets.QUndoCommand.text?4() -> QString +QtWidgets.QUndoCommand.undo?4() +QtWidgets.QUndoCommand.childCount?4() -> int +QtWidgets.QUndoCommand.child?4(int) -> QUndoCommand +QtWidgets.QUndoCommand.actionText?4() -> QString +QtWidgets.QUndoCommand.isObsolete?4() -> bool +QtWidgets.QUndoCommand.setObsolete?4(bool) +QtWidgets.QUndoStack?1(QObject parent=None) +QtWidgets.QUndoStack.__init__?1(self, QObject parent=None) +QtWidgets.QUndoStack.clear?4() +QtWidgets.QUndoStack.push?4(QUndoCommand) +QtWidgets.QUndoStack.canUndo?4() -> bool +QtWidgets.QUndoStack.canRedo?4() -> bool +QtWidgets.QUndoStack.undoText?4() -> QString +QtWidgets.QUndoStack.redoText?4() -> QString +QtWidgets.QUndoStack.count?4() -> int +QtWidgets.QUndoStack.index?4() -> int +QtWidgets.QUndoStack.text?4(int) -> QString +QtWidgets.QUndoStack.createUndoAction?4(QObject, QString prefix='') -> QAction +QtWidgets.QUndoStack.createRedoAction?4(QObject, QString prefix='') -> QAction +QtWidgets.QUndoStack.isActive?4() -> bool +QtWidgets.QUndoStack.isClean?4() -> bool +QtWidgets.QUndoStack.cleanIndex?4() -> int +QtWidgets.QUndoStack.beginMacro?4(QString) +QtWidgets.QUndoStack.endMacro?4() +QtWidgets.QUndoStack.redo?4() +QtWidgets.QUndoStack.setActive?4(bool active=True) +QtWidgets.QUndoStack.setClean?4() +QtWidgets.QUndoStack.setIndex?4(int) +QtWidgets.QUndoStack.undo?4() +QtWidgets.QUndoStack.resetClean?4() +QtWidgets.QUndoStack.canRedoChanged?4(bool) +QtWidgets.QUndoStack.canUndoChanged?4(bool) +QtWidgets.QUndoStack.cleanChanged?4(bool) +QtWidgets.QUndoStack.indexChanged?4(int) +QtWidgets.QUndoStack.redoTextChanged?4(QString) +QtWidgets.QUndoStack.undoTextChanged?4(QString) +QtWidgets.QUndoStack.setUndoLimit?4(int) +QtWidgets.QUndoStack.undoLimit?4() -> int +QtWidgets.QUndoStack.command?4(int) -> QUndoCommand +QtWidgets.QUndoView?1(QWidget parent=None) +QtWidgets.QUndoView.__init__?1(self, QWidget parent=None) +QtWidgets.QUndoView?1(QUndoStack, QWidget parent=None) +QtWidgets.QUndoView.__init__?1(self, QUndoStack, QWidget parent=None) +QtWidgets.QUndoView?1(QUndoGroup, QWidget parent=None) +QtWidgets.QUndoView.__init__?1(self, QUndoGroup, QWidget parent=None) +QtWidgets.QUndoView.stack?4() -> QUndoStack +QtWidgets.QUndoView.group?4() -> QUndoGroup +QtWidgets.QUndoView.setEmptyLabel?4(QString) +QtWidgets.QUndoView.emptyLabel?4() -> QString +QtWidgets.QUndoView.setCleanIcon?4(QIcon) +QtWidgets.QUndoView.cleanIcon?4() -> QIcon +QtWidgets.QUndoView.setStack?4(QUndoStack) +QtWidgets.QUndoView.setGroup?4(QUndoGroup) +QtWidgets.QWhatsThis?1(QWhatsThis) +QtWidgets.QWhatsThis.__init__?1(self, QWhatsThis) +QtWidgets.QWhatsThis.enterWhatsThisMode?4() +QtWidgets.QWhatsThis.inWhatsThisMode?4() -> bool +QtWidgets.QWhatsThis.leaveWhatsThisMode?4() +QtWidgets.QWhatsThis.showText?4(QPoint, QString, QWidget widget=None) +QtWidgets.QWhatsThis.hideText?4() +QtWidgets.QWhatsThis.createAction?4(QObject parent=None) -> QAction +QtWidgets.QWidget.RenderFlags?1() +QtWidgets.QWidget.RenderFlags.__init__?1(self) +QtWidgets.QWidget.RenderFlags?1(int) +QtWidgets.QWidget.RenderFlags.__init__?1(self, int) +QtWidgets.QWidget.RenderFlags?1(QWidget.RenderFlags) +QtWidgets.QWidget.RenderFlags.__init__?1(self, QWidget.RenderFlags) +QtWidgets.QWidgetAction?1(QObject) +QtWidgets.QWidgetAction.__init__?1(self, QObject) +QtWidgets.QWidgetAction.setDefaultWidget?4(QWidget) +QtWidgets.QWidgetAction.defaultWidget?4() -> QWidget +QtWidgets.QWidgetAction.requestWidget?4(QWidget) -> QWidget +QtWidgets.QWidgetAction.releaseWidget?4(QWidget) +QtWidgets.QWidgetAction.event?4(QEvent) -> bool +QtWidgets.QWidgetAction.eventFilter?4(QObject, QEvent) -> bool +QtWidgets.QWidgetAction.createWidget?4(QWidget) -> QWidget +QtWidgets.QWidgetAction.deleteWidget?4(QWidget) +QtWidgets.QWidgetAction.createdWidgets?4() -> unknown-type +QtWidgets.QWizard.WizardOption?10 +QtWidgets.QWizard.WizardOption.IndependentPages?10 +QtWidgets.QWizard.WizardOption.IgnoreSubTitles?10 +QtWidgets.QWizard.WizardOption.ExtendedWatermarkPixmap?10 +QtWidgets.QWizard.WizardOption.NoDefaultButton?10 +QtWidgets.QWizard.WizardOption.NoBackButtonOnStartPage?10 +QtWidgets.QWizard.WizardOption.NoBackButtonOnLastPage?10 +QtWidgets.QWizard.WizardOption.DisabledBackButtonOnLastPage?10 +QtWidgets.QWizard.WizardOption.HaveNextButtonOnLastPage?10 +QtWidgets.QWizard.WizardOption.HaveFinishButtonOnEarlyPages?10 +QtWidgets.QWizard.WizardOption.NoCancelButton?10 +QtWidgets.QWizard.WizardOption.CancelButtonOnLeft?10 +QtWidgets.QWizard.WizardOption.HaveHelpButton?10 +QtWidgets.QWizard.WizardOption.HelpButtonOnRight?10 +QtWidgets.QWizard.WizardOption.HaveCustomButton1?10 +QtWidgets.QWizard.WizardOption.HaveCustomButton2?10 +QtWidgets.QWizard.WizardOption.HaveCustomButton3?10 +QtWidgets.QWizard.WizardOption.NoCancelButtonOnLastPage?10 +QtWidgets.QWizard.WizardStyle?10 +QtWidgets.QWizard.WizardStyle.ClassicStyle?10 +QtWidgets.QWizard.WizardStyle.ModernStyle?10 +QtWidgets.QWizard.WizardStyle.MacStyle?10 +QtWidgets.QWizard.WizardStyle.AeroStyle?10 +QtWidgets.QWizard.WizardPixmap?10 +QtWidgets.QWizard.WizardPixmap.WatermarkPixmap?10 +QtWidgets.QWizard.WizardPixmap.LogoPixmap?10 +QtWidgets.QWizard.WizardPixmap.BannerPixmap?10 +QtWidgets.QWizard.WizardPixmap.BackgroundPixmap?10 +QtWidgets.QWizard.WizardButton?10 +QtWidgets.QWizard.WizardButton.BackButton?10 +QtWidgets.QWizard.WizardButton.NextButton?10 +QtWidgets.QWizard.WizardButton.CommitButton?10 +QtWidgets.QWizard.WizardButton.FinishButton?10 +QtWidgets.QWizard.WizardButton.CancelButton?10 +QtWidgets.QWizard.WizardButton.HelpButton?10 +QtWidgets.QWizard.WizardButton.CustomButton1?10 +QtWidgets.QWizard.WizardButton.CustomButton2?10 +QtWidgets.QWizard.WizardButton.CustomButton3?10 +QtWidgets.QWizard.WizardButton.Stretch?10 +QtWidgets.QWizard?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QWizard.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtWidgets.QWizard.addPage?4(QWizardPage) -> int +QtWidgets.QWizard.setPage?4(int, QWizardPage) +QtWidgets.QWizard.page?4(int) -> QWizardPage +QtWidgets.QWizard.hasVisitedPage?4(int) -> bool +QtWidgets.QWizard.visitedPages?4() -> unknown-type +QtWidgets.QWizard.setStartId?4(int) +QtWidgets.QWizard.startId?4() -> int +QtWidgets.QWizard.currentPage?4() -> QWizardPage +QtWidgets.QWizard.currentId?4() -> int +QtWidgets.QWizard.validateCurrentPage?4() -> bool +QtWidgets.QWizard.nextId?4() -> int +QtWidgets.QWizard.setField?4(QString, QVariant) +QtWidgets.QWizard.field?4(QString) -> QVariant +QtWidgets.QWizard.setWizardStyle?4(QWizard.WizardStyle) +QtWidgets.QWizard.wizardStyle?4() -> QWizard.WizardStyle +QtWidgets.QWizard.setOption?4(QWizard.WizardOption, bool on=True) +QtWidgets.QWizard.testOption?4(QWizard.WizardOption) -> bool +QtWidgets.QWizard.setOptions?4(QWizard.WizardOptions) +QtWidgets.QWizard.options?4() -> QWizard.WizardOptions +QtWidgets.QWizard.setButtonText?4(QWizard.WizardButton, QString) +QtWidgets.QWizard.buttonText?4(QWizard.WizardButton) -> QString +QtWidgets.QWizard.setButtonLayout?4(unknown-type) +QtWidgets.QWizard.setButton?4(QWizard.WizardButton, QAbstractButton) +QtWidgets.QWizard.button?4(QWizard.WizardButton) -> QAbstractButton +QtWidgets.QWizard.setTitleFormat?4(Qt.TextFormat) +QtWidgets.QWizard.titleFormat?4() -> Qt.TextFormat +QtWidgets.QWizard.setSubTitleFormat?4(Qt.TextFormat) +QtWidgets.QWizard.subTitleFormat?4() -> Qt.TextFormat +QtWidgets.QWizard.setPixmap?4(QWizard.WizardPixmap, QPixmap) +QtWidgets.QWizard.pixmap?4(QWizard.WizardPixmap) -> QPixmap +QtWidgets.QWizard.setDefaultProperty?4(str, str, Any) +QtWidgets.QWizard.setVisible?4(bool) +QtWidgets.QWizard.sizeHint?4() -> QSize +QtWidgets.QWizard.currentIdChanged?4(int) +QtWidgets.QWizard.helpRequested?4() +QtWidgets.QWizard.customButtonClicked?4(int) +QtWidgets.QWizard.back?4() +QtWidgets.QWizard.next?4() +QtWidgets.QWizard.restart?4() +QtWidgets.QWizard.event?4(QEvent) -> bool +QtWidgets.QWizard.resizeEvent?4(QResizeEvent) +QtWidgets.QWizard.paintEvent?4(QPaintEvent) +QtWidgets.QWizard.done?4(int) +QtWidgets.QWizard.initializePage?4(int) +QtWidgets.QWizard.cleanupPage?4(int) +QtWidgets.QWizard.removePage?4(int) +QtWidgets.QWizard.pageIds?4() -> unknown-type +QtWidgets.QWizard.setSideWidget?4(QWidget) +QtWidgets.QWizard.sideWidget?4() -> QWidget +QtWidgets.QWizard.pageAdded?4(int) +QtWidgets.QWizard.pageRemoved?4(int) +QtWidgets.QWizard.visitedIds?4() -> unknown-type +QtWidgets.QWizard.WizardOptions?1() +QtWidgets.QWizard.WizardOptions.__init__?1(self) +QtWidgets.QWizard.WizardOptions?1(int) +QtWidgets.QWizard.WizardOptions.__init__?1(self, int) +QtWidgets.QWizard.WizardOptions?1(QWizard.WizardOptions) +QtWidgets.QWizard.WizardOptions.__init__?1(self, QWizard.WizardOptions) +QtWidgets.QWizardPage?1(QWidget parent=None) +QtWidgets.QWizardPage.__init__?1(self, QWidget parent=None) +QtWidgets.QWizardPage.setTitle?4(QString) +QtWidgets.QWizardPage.title?4() -> QString +QtWidgets.QWizardPage.setSubTitle?4(QString) +QtWidgets.QWizardPage.subTitle?4() -> QString +QtWidgets.QWizardPage.setPixmap?4(QWizard.WizardPixmap, QPixmap) +QtWidgets.QWizardPage.pixmap?4(QWizard.WizardPixmap) -> QPixmap +QtWidgets.QWizardPage.setFinalPage?4(bool) +QtWidgets.QWizardPage.isFinalPage?4() -> bool +QtWidgets.QWizardPage.setCommitPage?4(bool) +QtWidgets.QWizardPage.isCommitPage?4() -> bool +QtWidgets.QWizardPage.setButtonText?4(QWizard.WizardButton, QString) +QtWidgets.QWizardPage.buttonText?4(QWizard.WizardButton) -> QString +QtWidgets.QWizardPage.initializePage?4() +QtWidgets.QWizardPage.cleanupPage?4() +QtWidgets.QWizardPage.validatePage?4() -> bool +QtWidgets.QWizardPage.isComplete?4() -> bool +QtWidgets.QWizardPage.nextId?4() -> int +QtWidgets.QWizardPage.completeChanged?4() +QtWidgets.QWizardPage.setField?4(QString, QVariant) +QtWidgets.QWizardPage.field?4(QString) -> QVariant +QtWidgets.QWizardPage.registerField?4(QString, QWidget, str property=None, Any changedSignal=None) +QtWidgets.QWizardPage.wizard?4() -> QWizard +QtQml.qmlClearTypeRegistrations?4() +QtQml.qmlTypeId?4(str, int, int, str) -> int +QtQml.qjsEngine?4(QObject) -> QJSEngine +QtQml.qmlAttachedPropertiesObject?4(type, QObject, bool create=True) -> QObject +QtQml.qmlRegisterRevision?4(type, int, str, int, int, type attachedProperties=None) -> int +QtQml.qmlRegisterSingletonType?4(QUrl, str, int, int, str) -> int +QtQml.qmlRegisterSingletonType?4(type, str, int, int, str, Callable[..., None]) -> int +QtQml.qmlRegisterType?4(QUrl, str, int, int, str) -> int +QtQml.qmlRegisterType?4(type, type attachedProperties=None) -> int +QtQml.qmlRegisterType?4(type, str, int, int, str, type attachedProperties=None) -> int +QtQml.qmlRegisterType?4(type, int, str, int, int, str, type attachedProperties=None) -> int +QtQml.qmlRegisterUncreatableType?4(type, str, int, int, str, QString) -> int +QtQml.qmlRegisterUncreatableType?4(type, int, str, int, int, str, QString) -> int +QtQml.QJSEngine.Extension?10 +QtQml.QJSEngine.Extension.TranslationExtension?10 +QtQml.QJSEngine.Extension.ConsoleExtension?10 +QtQml.QJSEngine.Extension.GarbageCollectionExtension?10 +QtQml.QJSEngine.Extension.AllExtensions?10 +QtQml.QJSEngine?1() +QtQml.QJSEngine.__init__?1(self) +QtQml.QJSEngine?1(QObject) +QtQml.QJSEngine.__init__?1(self, QObject) +QtQml.QJSEngine.globalObject?4() -> QJSValue +QtQml.QJSEngine.evaluate?4(QString, QString fileName='', int lineNumber=1) -> QJSValue +QtQml.QJSEngine.newObject?4() -> QJSValue +QtQml.QJSEngine.newArray?4(int length=0) -> QJSValue +QtQml.QJSEngine.newQObject?4(QObject) -> QJSValue +QtQml.QJSEngine.collectGarbage?4() +QtQml.QJSEngine.installTranslatorFunctions?4(QJSValue object=QJSValue()) +QtQml.QJSEngine.installExtensions?4(QJSEngine.Extensions, QJSValue object=QJSValue()) +QtQml.QJSEngine.newQMetaObject?4(QMetaObject) -> QJSValue +QtQml.QJSEngine.importModule?4(QString) -> QJSValue +QtQml.QJSEngine.newErrorObject?4(QJSValue.ErrorType, QString message='') -> QJSValue +QtQml.QJSEngine.throwError?4(QString) +QtQml.QJSEngine.throwError?4(QJSValue.ErrorType, QString message='') +QtQml.QJSEngine.setInterrupted?4(bool) +QtQml.QJSEngine.isInterrupted?4() -> bool +QtQml.QJSEngine.uiLanguage?4() -> QString +QtQml.QJSEngine.setUiLanguage?4(QString) +QtQml.QJSEngine.uiLanguageChanged?4() +QtQml.QJSEngine.Extensions?1() +QtQml.QJSEngine.Extensions.__init__?1(self) +QtQml.QJSEngine.Extensions?1(int) +QtQml.QJSEngine.Extensions.__init__?1(self, int) +QtQml.QJSEngine.Extensions?1(QJSEngine.Extensions) +QtQml.QJSEngine.Extensions.__init__?1(self, QJSEngine.Extensions) +QtQml.QJSValue.ErrorType?10 +QtQml.QJSValue.ErrorType.GenericError?10 +QtQml.QJSValue.ErrorType.EvalError?10 +QtQml.QJSValue.ErrorType.RangeError?10 +QtQml.QJSValue.ErrorType.ReferenceError?10 +QtQml.QJSValue.ErrorType.SyntaxError?10 +QtQml.QJSValue.ErrorType.TypeError?10 +QtQml.QJSValue.ErrorType.URIError?10 +QtQml.QJSValue.SpecialValue?10 +QtQml.QJSValue.SpecialValue.NullValue?10 +QtQml.QJSValue.SpecialValue.UndefinedValue?10 +QtQml.QJSValue?1(QJSValue.SpecialValue value=QJSValue.UndefinedValue) +QtQml.QJSValue.__init__?1(self, QJSValue.SpecialValue value=QJSValue.UndefinedValue) +QtQml.QJSValue?1(QJSValue) +QtQml.QJSValue.__init__?1(self, QJSValue) +QtQml.QJSValue.isBool?4() -> bool +QtQml.QJSValue.isNumber?4() -> bool +QtQml.QJSValue.isNull?4() -> bool +QtQml.QJSValue.isString?4() -> bool +QtQml.QJSValue.isUndefined?4() -> bool +QtQml.QJSValue.isVariant?4() -> bool +QtQml.QJSValue.isQObject?4() -> bool +QtQml.QJSValue.isObject?4() -> bool +QtQml.QJSValue.isDate?4() -> bool +QtQml.QJSValue.isRegExp?4() -> bool +QtQml.QJSValue.isArray?4() -> bool +QtQml.QJSValue.isError?4() -> bool +QtQml.QJSValue.toString?4() -> QString +QtQml.QJSValue.toNumber?4() -> float +QtQml.QJSValue.toInt?4() -> int +QtQml.QJSValue.toUInt?4() -> int +QtQml.QJSValue.toBool?4() -> bool +QtQml.QJSValue.toVariant?4() -> QVariant +QtQml.QJSValue.toQObject?4() -> QObject +QtQml.QJSValue.toDateTime?4() -> QDateTime +QtQml.QJSValue.equals?4(QJSValue) -> bool +QtQml.QJSValue.strictlyEquals?4(QJSValue) -> bool +QtQml.QJSValue.prototype?4() -> QJSValue +QtQml.QJSValue.setPrototype?4(QJSValue) +QtQml.QJSValue.property?4(QString) -> QJSValue +QtQml.QJSValue.setProperty?4(QString, QJSValue) +QtQml.QJSValue.hasProperty?4(QString) -> bool +QtQml.QJSValue.hasOwnProperty?4(QString) -> bool +QtQml.QJSValue.property?4(int) -> QJSValue +QtQml.QJSValue.setProperty?4(int, QJSValue) +QtQml.QJSValue.deleteProperty?4(QString) -> bool +QtQml.QJSValue.isCallable?4() -> bool +QtQml.QJSValue.call?4(unknown-type args=[]) -> QJSValue +QtQml.QJSValue.callWithInstance?4(QJSValue, unknown-type args=[]) -> QJSValue +QtQml.QJSValue.callAsConstructor?4(unknown-type args=[]) -> QJSValue +QtQml.QJSValue.errorType?4() -> QJSValue.ErrorType +QtQml.QJSValueIterator?1(QJSValue) +QtQml.QJSValueIterator.__init__?1(self, QJSValue) +QtQml.QJSValueIterator.hasNext?4() -> bool +QtQml.QJSValueIterator.next?4() -> bool +QtQml.QJSValueIterator.name?4() -> QString +QtQml.QJSValueIterator.value?4() -> QJSValue +QtQml.QQmlAbstractUrlInterceptor.DataType?10 +QtQml.QQmlAbstractUrlInterceptor.DataType.QmlFile?10 +QtQml.QQmlAbstractUrlInterceptor.DataType.JavaScriptFile?10 +QtQml.QQmlAbstractUrlInterceptor.DataType.QmldirFile?10 +QtQml.QQmlAbstractUrlInterceptor.DataType.UrlString?10 +QtQml.QQmlAbstractUrlInterceptor?1() +QtQml.QQmlAbstractUrlInterceptor.__init__?1(self) +QtQml.QQmlAbstractUrlInterceptor?1(QQmlAbstractUrlInterceptor) +QtQml.QQmlAbstractUrlInterceptor.__init__?1(self, QQmlAbstractUrlInterceptor) +QtQml.QQmlAbstractUrlInterceptor.intercept?4(QUrl, QQmlAbstractUrlInterceptor.DataType) -> QUrl +QtQml.QQmlEngine.ObjectOwnership?10 +QtQml.QQmlEngine.ObjectOwnership.CppOwnership?10 +QtQml.QQmlEngine.ObjectOwnership.JavaScriptOwnership?10 +QtQml.QQmlEngine?1(QObject parent=None) +QtQml.QQmlEngine.__init__?1(self, QObject parent=None) +QtQml.QQmlEngine.rootContext?4() -> QQmlContext +QtQml.QQmlEngine.clearComponentCache?4() +QtQml.QQmlEngine.trimComponentCache?4() +QtQml.QQmlEngine.importPathList?4() -> QStringList +QtQml.QQmlEngine.setImportPathList?4(QStringList) +QtQml.QQmlEngine.addImportPath?4(QString) +QtQml.QQmlEngine.pluginPathList?4() -> QStringList +QtQml.QQmlEngine.setPluginPathList?4(QStringList) +QtQml.QQmlEngine.addPluginPath?4(QString) +QtQml.QQmlEngine.addNamedBundle?4(QString, QString) -> bool +QtQml.QQmlEngine.importPlugin?4(QString, QString, unknown-type) -> bool +QtQml.QQmlEngine.setNetworkAccessManagerFactory?4(QQmlNetworkAccessManagerFactory) +QtQml.QQmlEngine.networkAccessManagerFactory?4() -> QQmlNetworkAccessManagerFactory +QtQml.QQmlEngine.networkAccessManager?4() -> QNetworkAccessManager +QtQml.QQmlEngine.addImageProvider?4(QString, QQmlImageProviderBase) +QtQml.QQmlEngine.imageProvider?4(QString) -> QQmlImageProviderBase +QtQml.QQmlEngine.removeImageProvider?4(QString) +QtQml.QQmlEngine.setIncubationController?4(QQmlIncubationController) +QtQml.QQmlEngine.incubationController?4() -> QQmlIncubationController +QtQml.QQmlEngine.setOfflineStoragePath?4(QString) +QtQml.QQmlEngine.offlineStoragePath?4() -> QString +QtQml.QQmlEngine.baseUrl?4() -> QUrl +QtQml.QQmlEngine.setBaseUrl?4(QUrl) +QtQml.QQmlEngine.outputWarningsToStandardError?4() -> bool +QtQml.QQmlEngine.setOutputWarningsToStandardError?4(bool) +QtQml.QQmlEngine.contextForObject?4(QObject) -> QQmlContext +QtQml.QQmlEngine.setContextForObject?4(QObject, QQmlContext) +QtQml.QQmlEngine.setObjectOwnership?4(QObject, QQmlEngine.ObjectOwnership) +QtQml.QQmlEngine.objectOwnership?4(QObject) -> QQmlEngine.ObjectOwnership +QtQml.QQmlEngine.event?4(QEvent) -> bool +QtQml.QQmlEngine.quit?4() +QtQml.QQmlEngine.warnings?4(unknown-type) +QtQml.QQmlEngine.exit?4(int) +QtQml.QQmlEngine.offlineStorageDatabaseFilePath?4(QString) -> QString +QtQml.QQmlEngine.retranslate?4() +QtQml.QQmlEngine.singletonInstance?4(int) -> Any +QtQml.QQmlApplicationEngine?1(QObject parent=None) +QtQml.QQmlApplicationEngine.__init__?1(self, QObject parent=None) +QtQml.QQmlApplicationEngine?1(QUrl, QObject parent=None) +QtQml.QQmlApplicationEngine.__init__?1(self, QUrl, QObject parent=None) +QtQml.QQmlApplicationEngine?1(QString, QObject parent=None) +QtQml.QQmlApplicationEngine.__init__?1(self, QString, QObject parent=None) +QtQml.QQmlApplicationEngine.rootObjects?4() -> unknown-type +QtQml.QQmlApplicationEngine.load?4(QUrl) +QtQml.QQmlApplicationEngine.load?4(QString) +QtQml.QQmlApplicationEngine.loadData?4(QByteArray, QUrl url=QUrl()) +QtQml.QQmlApplicationEngine.setInitialProperties?4(QVariantMap) +QtQml.QQmlApplicationEngine.objectCreated?4(QObject, QUrl) +QtQml.QQmlComponent.Status?10 +QtQml.QQmlComponent.Status.Null?10 +QtQml.QQmlComponent.Status.Ready?10 +QtQml.QQmlComponent.Status.Loading?10 +QtQml.QQmlComponent.Status.Error?10 +QtQml.QQmlComponent.CompilationMode?10 +QtQml.QQmlComponent.CompilationMode.PreferSynchronous?10 +QtQml.QQmlComponent.CompilationMode.Asynchronous?10 +QtQml.QQmlComponent?1(QQmlEngine, QObject parent=None) +QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QObject parent=None) +QtQml.QQmlComponent?1(QQmlEngine, QString, QObject parent=None) +QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QString, QObject parent=None) +QtQml.QQmlComponent?1(QQmlEngine, QString, QQmlComponent.CompilationMode, QObject parent=None) +QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QString, QQmlComponent.CompilationMode, QObject parent=None) +QtQml.QQmlComponent?1(QQmlEngine, QUrl, QObject parent=None) +QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QUrl, QObject parent=None) +QtQml.QQmlComponent?1(QQmlEngine, QUrl, QQmlComponent.CompilationMode, QObject parent=None) +QtQml.QQmlComponent.__init__?1(self, QQmlEngine, QUrl, QQmlComponent.CompilationMode, QObject parent=None) +QtQml.QQmlComponent?1(QObject parent=None) +QtQml.QQmlComponent.__init__?1(self, QObject parent=None) +QtQml.QQmlComponent.status?4() -> QQmlComponent.Status +QtQml.QQmlComponent.isNull?4() -> bool +QtQml.QQmlComponent.isReady?4() -> bool +QtQml.QQmlComponent.isError?4() -> bool +QtQml.QQmlComponent.isLoading?4() -> bool +QtQml.QQmlComponent.errors?4() -> unknown-type +QtQml.QQmlComponent.progress?4() -> float +QtQml.QQmlComponent.url?4() -> QUrl +QtQml.QQmlComponent.create?4(QQmlContext context=None) -> QObject +QtQml.QQmlComponent.createWithInitialProperties?4(QVariantMap, QQmlContext context=None) -> QObject +QtQml.QQmlComponent.beginCreate?4(QQmlContext) -> QObject +QtQml.QQmlComponent.completeCreate?4() +QtQml.QQmlComponent.create?4(QQmlIncubator, QQmlContext context=None, QQmlContext forContext=None) +QtQml.QQmlComponent.creationContext?4() -> QQmlContext +QtQml.QQmlComponent.loadUrl?4(QUrl) +QtQml.QQmlComponent.loadUrl?4(QUrl, QQmlComponent.CompilationMode) +QtQml.QQmlComponent.setData?4(QByteArray, QUrl) +QtQml.QQmlComponent.statusChanged?4(QQmlComponent.Status) +QtQml.QQmlComponent.progressChanged?4(float) +QtQml.QQmlComponent.engine?4() -> QQmlEngine +QtQml.QQmlComponent.setInitialProperties?4(QObject, QVariantMap) +QtQml.QQmlContext?1(QQmlEngine, QObject parent=None) +QtQml.QQmlContext.__init__?1(self, QQmlEngine, QObject parent=None) +QtQml.QQmlContext?1(QQmlContext, QObject parent=None) +QtQml.QQmlContext.__init__?1(self, QQmlContext, QObject parent=None) +QtQml.QQmlContext.isValid?4() -> bool +QtQml.QQmlContext.engine?4() -> QQmlEngine +QtQml.QQmlContext.parentContext?4() -> QQmlContext +QtQml.QQmlContext.contextObject?4() -> QObject +QtQml.QQmlContext.setContextObject?4(QObject) +QtQml.QQmlContext.contextProperty?4(QString) -> QVariant +QtQml.QQmlContext.setContextProperty?4(QString, QObject) +QtQml.QQmlContext.setContextProperty?4(QString, QVariant) +QtQml.QQmlContext.nameForObject?4(QObject) -> QString +QtQml.QQmlContext.resolvedUrl?4(QUrl) -> QUrl +QtQml.QQmlContext.setBaseUrl?4(QUrl) +QtQml.QQmlContext.baseUrl?4() -> QUrl +QtQml.QQmlContext.setContextProperties?4(unknown-type) +QtQml.QQmlContext.PropertyPair.name?7 +QtQml.QQmlContext.PropertyPair.value?7 +QtQml.QQmlContext.PropertyPair?1() +QtQml.QQmlContext.PropertyPair.__init__?1(self) +QtQml.QQmlContext.PropertyPair?1(QQmlContext.PropertyPair) +QtQml.QQmlContext.PropertyPair.__init__?1(self, QQmlContext.PropertyPair) +QtQml.QQmlImageProviderBase.Flag?10 +QtQml.QQmlImageProviderBase.Flag.ForceAsynchronousImageLoading?10 +QtQml.QQmlImageProviderBase.ImageType?10 +QtQml.QQmlImageProviderBase.ImageType.Image?10 +QtQml.QQmlImageProviderBase.ImageType.Pixmap?10 +QtQml.QQmlImageProviderBase.ImageType.Texture?10 +QtQml.QQmlImageProviderBase.ImageType.ImageResponse?10 +QtQml.QQmlImageProviderBase?1(QQmlImageProviderBase) +QtQml.QQmlImageProviderBase.__init__?1(self, QQmlImageProviderBase) +QtQml.QQmlImageProviderBase.imageType?4() -> QQmlImageProviderBase.ImageType +QtQml.QQmlImageProviderBase.flags?4() -> QQmlImageProviderBase.Flags +QtQml.QQmlImageProviderBase.Flags?1() +QtQml.QQmlImageProviderBase.Flags.__init__?1(self) +QtQml.QQmlImageProviderBase.Flags?1(int) +QtQml.QQmlImageProviderBase.Flags.__init__?1(self, int) +QtQml.QQmlImageProviderBase.Flags?1(QQmlImageProviderBase.Flags) +QtQml.QQmlImageProviderBase.Flags.__init__?1(self, QQmlImageProviderBase.Flags) +QtQml.QQmlError?1() +QtQml.QQmlError.__init__?1(self) +QtQml.QQmlError?1(QQmlError) +QtQml.QQmlError.__init__?1(self, QQmlError) +QtQml.QQmlError.isValid?4() -> bool +QtQml.QQmlError.url?4() -> QUrl +QtQml.QQmlError.setUrl?4(QUrl) +QtQml.QQmlError.description?4() -> QString +QtQml.QQmlError.setDescription?4(QString) +QtQml.QQmlError.line?4() -> int +QtQml.QQmlError.setLine?4(int) +QtQml.QQmlError.column?4() -> int +QtQml.QQmlError.setColumn?4(int) +QtQml.QQmlError.toString?4() -> QString +QtQml.QQmlError.object?4() -> QObject +QtQml.QQmlError.setObject?4(QObject) +QtQml.QQmlError.messageType?4() -> QtMsgType +QtQml.QQmlError.setMessageType?4(QtMsgType) +QtQml.QQmlExpression?1() +QtQml.QQmlExpression.__init__?1(self) +QtQml.QQmlExpression?1(QQmlContext, QObject, QString, QObject parent=None) +QtQml.QQmlExpression.__init__?1(self, QQmlContext, QObject, QString, QObject parent=None) +QtQml.QQmlExpression?1(QQmlScriptString, QQmlContext context=None, QObject scope=None, QObject parent=None) +QtQml.QQmlExpression.__init__?1(self, QQmlScriptString, QQmlContext context=None, QObject scope=None, QObject parent=None) +QtQml.QQmlExpression.engine?4() -> QQmlEngine +QtQml.QQmlExpression.context?4() -> QQmlContext +QtQml.QQmlExpression.expression?4() -> QString +QtQml.QQmlExpression.setExpression?4(QString) +QtQml.QQmlExpression.notifyOnValueChanged?4() -> bool +QtQml.QQmlExpression.setNotifyOnValueChanged?4(bool) +QtQml.QQmlExpression.sourceFile?4() -> QString +QtQml.QQmlExpression.lineNumber?4() -> int +QtQml.QQmlExpression.columnNumber?4() -> int +QtQml.QQmlExpression.setSourceLocation?4(QString, int, int column=0) +QtQml.QQmlExpression.scopeObject?4() -> QObject +QtQml.QQmlExpression.hasError?4() -> bool +QtQml.QQmlExpression.clearError?4() +QtQml.QQmlExpression.error?4() -> QQmlError +QtQml.QQmlExpression.evaluate?4() -> (QVariant, bool) +QtQml.QQmlExpression.valueChanged?4() +QtQml.QQmlExtensionPlugin?1(QObject parent=None) +QtQml.QQmlExtensionPlugin.__init__?1(self, QObject parent=None) +QtQml.QQmlExtensionPlugin.registerTypes?4(str) +QtQml.QQmlExtensionPlugin.initializeEngine?4(QQmlEngine, str) +QtQml.QQmlExtensionPlugin.baseUrl?4() -> QUrl +QtQml.QQmlEngineExtensionPlugin?1(QObject parent=None) +QtQml.QQmlEngineExtensionPlugin.__init__?1(self, QObject parent=None) +QtQml.QQmlEngineExtensionPlugin.initializeEngine?4(QQmlEngine, str) +QtQml.QQmlFileSelector?1(QQmlEngine, QObject parent=None) +QtQml.QQmlFileSelector.__init__?1(self, QQmlEngine, QObject parent=None) +QtQml.QQmlFileSelector.setSelector?4(QFileSelector) +QtQml.QQmlFileSelector.setExtraSelectors?4(QStringList) +QtQml.QQmlFileSelector.get?4(QQmlEngine) -> QQmlFileSelector +QtQml.QQmlFileSelector.selector?4() -> QFileSelector +QtQml.QQmlIncubator.Status?10 +QtQml.QQmlIncubator.Status.Null?10 +QtQml.QQmlIncubator.Status.Ready?10 +QtQml.QQmlIncubator.Status.Loading?10 +QtQml.QQmlIncubator.Status.Error?10 +QtQml.QQmlIncubator.IncubationMode?10 +QtQml.QQmlIncubator.IncubationMode.Asynchronous?10 +QtQml.QQmlIncubator.IncubationMode.AsynchronousIfNested?10 +QtQml.QQmlIncubator.IncubationMode.Synchronous?10 +QtQml.QQmlIncubator?1(QQmlIncubator.IncubationMode mode=QQmlIncubator.Asynchronous) +QtQml.QQmlIncubator.__init__?1(self, QQmlIncubator.IncubationMode mode=QQmlIncubator.Asynchronous) +QtQml.QQmlIncubator.clear?4() +QtQml.QQmlIncubator.forceCompletion?4() +QtQml.QQmlIncubator.isNull?4() -> bool +QtQml.QQmlIncubator.isReady?4() -> bool +QtQml.QQmlIncubator.isError?4() -> bool +QtQml.QQmlIncubator.isLoading?4() -> bool +QtQml.QQmlIncubator.errors?4() -> unknown-type +QtQml.QQmlIncubator.incubationMode?4() -> QQmlIncubator.IncubationMode +QtQml.QQmlIncubator.status?4() -> QQmlIncubator.Status +QtQml.QQmlIncubator.object?4() -> QObject +QtQml.QQmlIncubator.setInitialProperties?4(QVariantMap) +QtQml.QQmlIncubator.statusChanged?4(QQmlIncubator.Status) +QtQml.QQmlIncubator.setInitialState?4(QObject) +QtQml.QQmlIncubationController?1() +QtQml.QQmlIncubationController.__init__?1(self) +QtQml.QQmlIncubationController.engine?4() -> QQmlEngine +QtQml.QQmlIncubationController.incubatingObjectCount?4() -> int +QtQml.QQmlIncubationController.incubateFor?4(int) +QtQml.QQmlIncubationController.incubatingObjectCountChanged?4(int) +QtQml.QQmlListReference?1() +QtQml.QQmlListReference.__init__?1(self) +QtQml.QQmlListReference?1(QObject, str, QQmlEngine engine=None) +QtQml.QQmlListReference.__init__?1(self, QObject, str, QQmlEngine engine=None) +QtQml.QQmlListReference?1(QQmlListReference) +QtQml.QQmlListReference.__init__?1(self, QQmlListReference) +QtQml.QQmlListReference.isValid?4() -> bool +QtQml.QQmlListReference.object?4() -> QObject +QtQml.QQmlListReference.listElementType?4() -> QMetaObject +QtQml.QQmlListReference.canAppend?4() -> bool +QtQml.QQmlListReference.canAt?4() -> bool +QtQml.QQmlListReference.canClear?4() -> bool +QtQml.QQmlListReference.canCount?4() -> bool +QtQml.QQmlListReference.isManipulable?4() -> bool +QtQml.QQmlListReference.isReadable?4() -> bool +QtQml.QQmlListReference.append?4(QObject) -> bool +QtQml.QQmlListReference.at?4(int) -> QObject +QtQml.QQmlListReference.clear?4() -> bool +QtQml.QQmlListReference.count?4() -> int +QtQml.QQmlListReference.canReplace?4() -> bool +QtQml.QQmlListReference.canRemoveLast?4() -> bool +QtQml.QQmlListReference.replace?4(int, QObject) -> bool +QtQml.QQmlListReference.removeLast?4() -> bool +QtQml.QQmlNetworkAccessManagerFactory?1() +QtQml.QQmlNetworkAccessManagerFactory.__init__?1(self) +QtQml.QQmlNetworkAccessManagerFactory?1(QQmlNetworkAccessManagerFactory) +QtQml.QQmlNetworkAccessManagerFactory.__init__?1(self, QQmlNetworkAccessManagerFactory) +QtQml.QQmlNetworkAccessManagerFactory.create?4(QObject) -> QNetworkAccessManager +QtQml.QQmlParserStatus?1() +QtQml.QQmlParserStatus.__init__?1(self) +QtQml.QQmlParserStatus?1(QQmlParserStatus) +QtQml.QQmlParserStatus.__init__?1(self, QQmlParserStatus) +QtQml.QQmlParserStatus.classBegin?4() +QtQml.QQmlParserStatus.componentComplete?4() +QtQml.QQmlProperty.Type?10 +QtQml.QQmlProperty.Type.Invalid?10 +QtQml.QQmlProperty.Type.Property?10 +QtQml.QQmlProperty.Type.SignalProperty?10 +QtQml.QQmlProperty.PropertyTypeCategory?10 +QtQml.QQmlProperty.PropertyTypeCategory.InvalidCategory?10 +QtQml.QQmlProperty.PropertyTypeCategory.List?10 +QtQml.QQmlProperty.PropertyTypeCategory.Object?10 +QtQml.QQmlProperty.PropertyTypeCategory.Normal?10 +QtQml.QQmlProperty?1() +QtQml.QQmlProperty.__init__?1(self) +QtQml.QQmlProperty?1(QObject) +QtQml.QQmlProperty.__init__?1(self, QObject) +QtQml.QQmlProperty?1(QObject, QQmlContext) +QtQml.QQmlProperty.__init__?1(self, QObject, QQmlContext) +QtQml.QQmlProperty?1(QObject, QQmlEngine) +QtQml.QQmlProperty.__init__?1(self, QObject, QQmlEngine) +QtQml.QQmlProperty?1(QObject, QString) +QtQml.QQmlProperty.__init__?1(self, QObject, QString) +QtQml.QQmlProperty?1(QObject, QString, QQmlContext) +QtQml.QQmlProperty.__init__?1(self, QObject, QString, QQmlContext) +QtQml.QQmlProperty?1(QObject, QString, QQmlEngine) +QtQml.QQmlProperty.__init__?1(self, QObject, QString, QQmlEngine) +QtQml.QQmlProperty?1(QQmlProperty) +QtQml.QQmlProperty.__init__?1(self, QQmlProperty) +QtQml.QQmlProperty.type?4() -> QQmlProperty.Type +QtQml.QQmlProperty.isValid?4() -> bool +QtQml.QQmlProperty.isProperty?4() -> bool +QtQml.QQmlProperty.isSignalProperty?4() -> bool +QtQml.QQmlProperty.propertyType?4() -> int +QtQml.QQmlProperty.propertyTypeCategory?4() -> QQmlProperty.PropertyTypeCategory +QtQml.QQmlProperty.propertyTypeName?4() -> str +QtQml.QQmlProperty.name?4() -> QString +QtQml.QQmlProperty.read?4() -> QVariant +QtQml.QQmlProperty.read?4(QObject, QString) -> QVariant +QtQml.QQmlProperty.read?4(QObject, QString, QQmlContext) -> QVariant +QtQml.QQmlProperty.read?4(QObject, QString, QQmlEngine) -> QVariant +QtQml.QQmlProperty.write?4(QVariant) -> bool +QtQml.QQmlProperty.write?4(QObject, QString, QVariant) -> bool +QtQml.QQmlProperty.write?4(QObject, QString, QVariant, QQmlContext) -> bool +QtQml.QQmlProperty.write?4(QObject, QString, QVariant, QQmlEngine) -> bool +QtQml.QQmlProperty.reset?4() -> bool +QtQml.QQmlProperty.hasNotifySignal?4() -> bool +QtQml.QQmlProperty.needsNotifySignal?4() -> bool +QtQml.QQmlProperty.connectNotifySignal?4(Any) -> bool +QtQml.QQmlProperty.connectNotifySignal?4(QObject, int) -> bool +QtQml.QQmlProperty.isWritable?4() -> bool +QtQml.QQmlProperty.isDesignable?4() -> bool +QtQml.QQmlProperty.isResettable?4() -> bool +QtQml.QQmlProperty.object?4() -> QObject +QtQml.QQmlProperty.index?4() -> int +QtQml.QQmlProperty.property?4() -> QMetaProperty +QtQml.QQmlProperty.method?4() -> QMetaMethod +QtQml.QQmlPropertyMap?1(QObject parent=None) +QtQml.QQmlPropertyMap.__init__?1(self, QObject parent=None) +QtQml.QQmlPropertyMap.value?4(QString) -> QVariant +QtQml.QQmlPropertyMap.insert?4(QString, QVariant) +QtQml.QQmlPropertyMap.clear?4(QString) +QtQml.QQmlPropertyMap.keys?4() -> QStringList +QtQml.QQmlPropertyMap.count?4() -> int +QtQml.QQmlPropertyMap.size?4() -> int +QtQml.QQmlPropertyMap.isEmpty?4() -> bool +QtQml.QQmlPropertyMap.contains?4(QString) -> bool +QtQml.QQmlPropertyMap.valueChanged?4(QString, QVariant) +QtQml.QQmlPropertyMap.updateValue?4(QString, QVariant) -> QVariant +QtQml.QQmlPropertyValueSource?1() +QtQml.QQmlPropertyValueSource.__init__?1(self) +QtQml.QQmlPropertyValueSource?1(QQmlPropertyValueSource) +QtQml.QQmlPropertyValueSource.__init__?1(self, QQmlPropertyValueSource) +QtQml.QQmlPropertyValueSource.setTarget?4(QQmlProperty) +QtQml.QQmlScriptString?1() +QtQml.QQmlScriptString.__init__?1(self) +QtQml.QQmlScriptString?1(QQmlScriptString) +QtQml.QQmlScriptString.__init__?1(self, QQmlScriptString) +QtQml.QQmlScriptString.isEmpty?4() -> bool +QtQml.QQmlScriptString.isUndefinedLiteral?4() -> bool +QtQml.QQmlScriptString.isNullLiteral?4() -> bool +QtQml.QQmlScriptString.stringLiteral?4() -> QString +QtQml.QQmlScriptString.numberLiteral?4() -> (float, bool) +QtQml.QQmlScriptString.booleanLiteral?4() -> (bool, bool) +QtBluetooth.QBluetooth.AttAccessConstraint?10 +QtBluetooth.QBluetooth.AttAccessConstraint.AttAuthorizationRequired?10 +QtBluetooth.QBluetooth.AttAccessConstraint.AttAuthenticationRequired?10 +QtBluetooth.QBluetooth.AttAccessConstraint.AttEncryptionRequired?10 +QtBluetooth.QBluetooth.Security?10 +QtBluetooth.QBluetooth.Security.NoSecurity?10 +QtBluetooth.QBluetooth.Security.Authorization?10 +QtBluetooth.QBluetooth.Security.Authentication?10 +QtBluetooth.QBluetooth.Security.Encryption?10 +QtBluetooth.QBluetooth.Security.Secure?10 +QtBluetooth.QBluetooth.SecurityFlags?1() +QtBluetooth.QBluetooth.SecurityFlags.__init__?1(self) +QtBluetooth.QBluetooth.SecurityFlags?1(int) +QtBluetooth.QBluetooth.SecurityFlags.__init__?1(self, int) +QtBluetooth.QBluetooth.SecurityFlags?1(QBluetooth.SecurityFlags) +QtBluetooth.QBluetooth.SecurityFlags.__init__?1(self, QBluetooth.SecurityFlags) +QtBluetooth.QBluetooth.AttAccessConstraints?1() +QtBluetooth.QBluetooth.AttAccessConstraints.__init__?1(self) +QtBluetooth.QBluetooth.AttAccessConstraints?1(int) +QtBluetooth.QBluetooth.AttAccessConstraints.__init__?1(self, int) +QtBluetooth.QBluetooth.AttAccessConstraints?1(QBluetooth.AttAccessConstraints) +QtBluetooth.QBluetooth.AttAccessConstraints.__init__?1(self, QBluetooth.AttAccessConstraints) +QtBluetooth.QBluetoothAddress?1() +QtBluetooth.QBluetoothAddress.__init__?1(self) +QtBluetooth.QBluetoothAddress?1(int) +QtBluetooth.QBluetoothAddress.__init__?1(self, int) +QtBluetooth.QBluetoothAddress?1(QString) +QtBluetooth.QBluetoothAddress.__init__?1(self, QString) +QtBluetooth.QBluetoothAddress?1(QBluetoothAddress) +QtBluetooth.QBluetoothAddress.__init__?1(self, QBluetoothAddress) +QtBluetooth.QBluetoothAddress.isNull?4() -> bool +QtBluetooth.QBluetoothAddress.clear?4() +QtBluetooth.QBluetoothAddress.toUInt64?4() -> int +QtBluetooth.QBluetoothAddress.toString?4() -> QString +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethod?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethod.NoMethod?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethod.ClassicMethod?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethod.LowEnergyMethod?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.InquiryType?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.InquiryType.GeneralUnlimitedInquiry?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.InquiryType.LimitedInquiry?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.NoError?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.InputOutputError?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.PoweredOffError?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.InvalidBluetoothAdapterError?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.UnsupportedPlatformError?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.UnsupportedDiscoveryMethod?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent.Error.UnknownError?10 +QtBluetooth.QBluetoothDeviceDiscoveryAgent?1(QObject parent=None) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.__init__?1(self, QObject parent=None) +QtBluetooth.QBluetoothDeviceDiscoveryAgent?1(QBluetoothAddress, QObject parent=None) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.__init__?1(self, QBluetoothAddress, QObject parent=None) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.inquiryType?4() -> QBluetoothDeviceDiscoveryAgent.InquiryType +QtBluetooth.QBluetoothDeviceDiscoveryAgent.setInquiryType?4(QBluetoothDeviceDiscoveryAgent.InquiryType) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.isActive?4() -> bool +QtBluetooth.QBluetoothDeviceDiscoveryAgent.error?4() -> QBluetoothDeviceDiscoveryAgent.Error +QtBluetooth.QBluetoothDeviceDiscoveryAgent.errorString?4() -> QString +QtBluetooth.QBluetoothDeviceDiscoveryAgent.discoveredDevices?4() -> unknown-type +QtBluetooth.QBluetoothDeviceDiscoveryAgent.start?4() +QtBluetooth.QBluetoothDeviceDiscoveryAgent.start?4(QBluetoothDeviceDiscoveryAgent.DiscoveryMethods) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.stop?4() +QtBluetooth.QBluetoothDeviceDiscoveryAgent.deviceDiscovered?4(QBluetoothDeviceInfo) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.finished?4() +QtBluetooth.QBluetoothDeviceDiscoveryAgent.error?4(QBluetoothDeviceDiscoveryAgent.Error) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.canceled?4() +QtBluetooth.QBluetoothDeviceDiscoveryAgent.deviceUpdated?4(QBluetoothDeviceInfo, QBluetoothDeviceInfo.Fields) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.setLowEnergyDiscoveryTimeout?4(int) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.lowEnergyDiscoveryTimeout?4() -> int +QtBluetooth.QBluetoothDeviceDiscoveryAgent.supportedDiscoveryMethods?4() -> QBluetoothDeviceDiscoveryAgent.DiscoveryMethods +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethods?1() +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethods.__init__?1(self) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethods?1(int) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethods.__init__?1(self, int) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethods?1(QBluetoothDeviceDiscoveryAgent.DiscoveryMethods) +QtBluetooth.QBluetoothDeviceDiscoveryAgent.DiscoveryMethods.__init__?1(self, QBluetoothDeviceDiscoveryAgent.DiscoveryMethods) +QtBluetooth.QBluetoothDeviceInfo.Field?10 +QtBluetooth.QBluetoothDeviceInfo.Field.None_?10 +QtBluetooth.QBluetoothDeviceInfo.Field.RSSI?10 +QtBluetooth.QBluetoothDeviceInfo.Field.ManufacturerData?10 +QtBluetooth.QBluetoothDeviceInfo.Field.All?10 +QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration?10 +QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration.UnknownCoreConfiguration?10 +QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration.LowEnergyCoreConfiguration?10 +QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration.BaseRateCoreConfiguration?10 +QtBluetooth.QBluetoothDeviceInfo.CoreConfiguration.BaseRateAndLowEnergyCoreConfiguration?10 +QtBluetooth.QBluetoothDeviceInfo.DataCompleteness?10 +QtBluetooth.QBluetoothDeviceInfo.DataCompleteness.DataComplete?10 +QtBluetooth.QBluetoothDeviceInfo.DataCompleteness.DataIncomplete?10 +QtBluetooth.QBluetoothDeviceInfo.DataCompleteness.DataUnavailable?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.NoService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.PositioningService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.NetworkingService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.RenderingService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.CapturingService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.ObjectTransferService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.AudioService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.TelephonyService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.InformationService?10 +QtBluetooth.QBluetoothDeviceInfo.ServiceClass.AllServices?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.UncategorizedHealthDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthBloodPressureMonitor?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthThermometer?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthWeightScale?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthGlucoseMeter?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthPulseOximeter?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthDataDisplay?10 +QtBluetooth.QBluetoothDeviceInfo.MinorHealthClass.HealthStepCounter?10 +QtBluetooth.QBluetoothDeviceInfo.MinorToyClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.UncategorizedToy?10 +QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyRobot?10 +QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyVehicle?10 +QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyDoll?10 +QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyController?10 +QtBluetooth.QBluetoothDeviceInfo.MinorToyClass.ToyGame?10 +QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.UncategorizedWearableDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearableWristWatch?10 +QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearablePager?10 +QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearableJacket?10 +QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearableHelmet?10 +QtBluetooth.QBluetoothDeviceInfo.MinorWearableClass.WearableGlasses?10 +QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.UncategorizedImagingDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.ImageDisplay?10 +QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.ImageCamera?10 +QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.ImageScanner?10 +QtBluetooth.QBluetoothDeviceInfo.MinorImagingClass.ImagePrinter?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.UncategorizedPeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.KeyboardPeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.PointingDevicePeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.KeyboardWithPointingDevicePeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.JoystickPeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.GamepadPeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.RemoteControlPeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.SensingDevicePeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.DigitizerTabletPeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPeripheralClass.CardReaderPeripheral?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.UncategorizedAudioVideoDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.WearableHeadsetDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.HandsFreeDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Microphone?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Loudspeaker?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Headphones?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.PortableAudioDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.CarAudio?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.SetTopBox?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.HiFiAudioDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Vcr?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.VideoCamera?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.Camcorder?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.VideoMonitor?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.VideoDisplayAndLoudspeaker?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.VideoConferencing?10 +QtBluetooth.QBluetoothDeviceInfo.MinorAudioVideoClass.GamingDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkFullService?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorOne?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorTwo?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorThree?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorFour?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorFive?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkLoadFactorSix?10 +QtBluetooth.QBluetoothDeviceInfo.MinorNetworkClass.NetworkNoService?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.UncategorizedPhone?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.CellularPhone?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.CordlessPhone?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.SmartPhone?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.WiredModemOrVoiceGatewayPhone?10 +QtBluetooth.QBluetoothDeviceInfo.MinorPhoneClass.CommonIsdnAccessPhone?10 +QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.UncategorizedComputer?10 +QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.DesktopComputer?10 +QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.ServerComputer?10 +QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.LaptopComputer?10 +QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.HandheldClamShellComputer?10 +QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.HandheldComputer?10 +QtBluetooth.QBluetoothDeviceInfo.MinorComputerClass.WearableComputer?10 +QtBluetooth.QBluetoothDeviceInfo.MinorMiscellaneousClass?10 +QtBluetooth.QBluetoothDeviceInfo.MinorMiscellaneousClass.UncategorizedMiscellaneous?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.MiscellaneousDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.ComputerDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.PhoneDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.LANAccessDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.NetworkDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.AudioVideoDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.PeripheralDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.ImagingDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.WearableDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.ToyDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.HealthDevice?10 +QtBluetooth.QBluetoothDeviceInfo.MajorDeviceClass.UncategorizedDevice?10 +QtBluetooth.QBluetoothDeviceInfo?1() +QtBluetooth.QBluetoothDeviceInfo.__init__?1(self) +QtBluetooth.QBluetoothDeviceInfo?1(QBluetoothAddress, QString, int) +QtBluetooth.QBluetoothDeviceInfo.__init__?1(self, QBluetoothAddress, QString, int) +QtBluetooth.QBluetoothDeviceInfo?1(QBluetoothUuid, QString, int) +QtBluetooth.QBluetoothDeviceInfo.__init__?1(self, QBluetoothUuid, QString, int) +QtBluetooth.QBluetoothDeviceInfo?1(QBluetoothDeviceInfo) +QtBluetooth.QBluetoothDeviceInfo.__init__?1(self, QBluetoothDeviceInfo) +QtBluetooth.QBluetoothDeviceInfo.isValid?4() -> bool +QtBluetooth.QBluetoothDeviceInfo.isCached?4() -> bool +QtBluetooth.QBluetoothDeviceInfo.setCached?4(bool) +QtBluetooth.QBluetoothDeviceInfo.address?4() -> QBluetoothAddress +QtBluetooth.QBluetoothDeviceInfo.name?4() -> QString +QtBluetooth.QBluetoothDeviceInfo.serviceClasses?4() -> QBluetoothDeviceInfo.ServiceClasses +QtBluetooth.QBluetoothDeviceInfo.majorDeviceClass?4() -> QBluetoothDeviceInfo.MajorDeviceClass +QtBluetooth.QBluetoothDeviceInfo.minorDeviceClass?4() -> int +QtBluetooth.QBluetoothDeviceInfo.rssi?4() -> int +QtBluetooth.QBluetoothDeviceInfo.setRssi?4(int) +QtBluetooth.QBluetoothDeviceInfo.setServiceUuids?4(unknown-type, QBluetoothDeviceInfo.DataCompleteness) +QtBluetooth.QBluetoothDeviceInfo.setServiceUuids?4(unknown-type) +QtBluetooth.QBluetoothDeviceInfo.serviceUuids?4() -> (unknown-type, QBluetoothDeviceInfo.DataCompleteness) +QtBluetooth.QBluetoothDeviceInfo.serviceUuidsCompleteness?4() -> QBluetoothDeviceInfo.DataCompleteness +QtBluetooth.QBluetoothDeviceInfo.setCoreConfigurations?4(QBluetoothDeviceInfo.CoreConfigurations) +QtBluetooth.QBluetoothDeviceInfo.coreConfigurations?4() -> QBluetoothDeviceInfo.CoreConfigurations +QtBluetooth.QBluetoothDeviceInfo.setDeviceUuid?4(QBluetoothUuid) +QtBluetooth.QBluetoothDeviceInfo.deviceUuid?4() -> QBluetoothUuid +QtBluetooth.QBluetoothDeviceInfo.manufacturerIds?4() -> unknown-type +QtBluetooth.QBluetoothDeviceInfo.manufacturerData?4(int) -> QByteArray +QtBluetooth.QBluetoothDeviceInfo.setManufacturerData?4(int, QByteArray) -> bool +QtBluetooth.QBluetoothDeviceInfo.manufacturerData?4() -> unknown-type +QtBluetooth.QBluetoothDeviceInfo.ServiceClasses?1() +QtBluetooth.QBluetoothDeviceInfo.ServiceClasses.__init__?1(self) +QtBluetooth.QBluetoothDeviceInfo.ServiceClasses?1(int) +QtBluetooth.QBluetoothDeviceInfo.ServiceClasses.__init__?1(self, int) +QtBluetooth.QBluetoothDeviceInfo.ServiceClasses?1(QBluetoothDeviceInfo.ServiceClasses) +QtBluetooth.QBluetoothDeviceInfo.ServiceClasses.__init__?1(self, QBluetoothDeviceInfo.ServiceClasses) +QtBluetooth.QBluetoothDeviceInfo.CoreConfigurations?1() +QtBluetooth.QBluetoothDeviceInfo.CoreConfigurations.__init__?1(self) +QtBluetooth.QBluetoothDeviceInfo.CoreConfigurations?1(int) +QtBluetooth.QBluetoothDeviceInfo.CoreConfigurations.__init__?1(self, int) +QtBluetooth.QBluetoothDeviceInfo.CoreConfigurations?1(QBluetoothDeviceInfo.CoreConfigurations) +QtBluetooth.QBluetoothDeviceInfo.CoreConfigurations.__init__?1(self, QBluetoothDeviceInfo.CoreConfigurations) +QtBluetooth.QBluetoothDeviceInfo.Fields?1() +QtBluetooth.QBluetoothDeviceInfo.Fields.__init__?1(self) +QtBluetooth.QBluetoothDeviceInfo.Fields?1(int) +QtBluetooth.QBluetoothDeviceInfo.Fields.__init__?1(self, int) +QtBluetooth.QBluetoothDeviceInfo.Fields?1(QBluetoothDeviceInfo.Fields) +QtBluetooth.QBluetoothDeviceInfo.Fields.__init__?1(self, QBluetoothDeviceInfo.Fields) +QtBluetooth.QBluetoothHostInfo?1() +QtBluetooth.QBluetoothHostInfo.__init__?1(self) +QtBluetooth.QBluetoothHostInfo?1(QBluetoothHostInfo) +QtBluetooth.QBluetoothHostInfo.__init__?1(self, QBluetoothHostInfo) +QtBluetooth.QBluetoothHostInfo.address?4() -> QBluetoothAddress +QtBluetooth.QBluetoothHostInfo.setAddress?4(QBluetoothAddress) +QtBluetooth.QBluetoothHostInfo.name?4() -> QString +QtBluetooth.QBluetoothHostInfo.setName?4(QString) +QtBluetooth.QBluetoothLocalDevice.Error?10 +QtBluetooth.QBluetoothLocalDevice.Error.NoError?10 +QtBluetooth.QBluetoothLocalDevice.Error.PairingError?10 +QtBluetooth.QBluetoothLocalDevice.Error.UnknownError?10 +QtBluetooth.QBluetoothLocalDevice.HostMode?10 +QtBluetooth.QBluetoothLocalDevice.HostMode.HostPoweredOff?10 +QtBluetooth.QBluetoothLocalDevice.HostMode.HostConnectable?10 +QtBluetooth.QBluetoothLocalDevice.HostMode.HostDiscoverable?10 +QtBluetooth.QBluetoothLocalDevice.HostMode.HostDiscoverableLimitedInquiry?10 +QtBluetooth.QBluetoothLocalDevice.Pairing?10 +QtBluetooth.QBluetoothLocalDevice.Pairing.Unpaired?10 +QtBluetooth.QBluetoothLocalDevice.Pairing.Paired?10 +QtBluetooth.QBluetoothLocalDevice.Pairing.AuthorizedPaired?10 +QtBluetooth.QBluetoothLocalDevice?1(QObject parent=None) +QtBluetooth.QBluetoothLocalDevice.__init__?1(self, QObject parent=None) +QtBluetooth.QBluetoothLocalDevice?1(QBluetoothAddress, QObject parent=None) +QtBluetooth.QBluetoothLocalDevice.__init__?1(self, QBluetoothAddress, QObject parent=None) +QtBluetooth.QBluetoothLocalDevice.isValid?4() -> bool +QtBluetooth.QBluetoothLocalDevice.requestPairing?4(QBluetoothAddress, QBluetoothLocalDevice.Pairing) +QtBluetooth.QBluetoothLocalDevice.pairingStatus?4(QBluetoothAddress) -> QBluetoothLocalDevice.Pairing +QtBluetooth.QBluetoothLocalDevice.setHostMode?4(QBluetoothLocalDevice.HostMode) +QtBluetooth.QBluetoothLocalDevice.hostMode?4() -> QBluetoothLocalDevice.HostMode +QtBluetooth.QBluetoothLocalDevice.powerOn?4() +QtBluetooth.QBluetoothLocalDevice.name?4() -> QString +QtBluetooth.QBluetoothLocalDevice.address?4() -> QBluetoothAddress +QtBluetooth.QBluetoothLocalDevice.allDevices?4() -> unknown-type +QtBluetooth.QBluetoothLocalDevice.connectedDevices?4() -> unknown-type +QtBluetooth.QBluetoothLocalDevice.pairingConfirmation?4(bool) +QtBluetooth.QBluetoothLocalDevice.hostModeStateChanged?4(QBluetoothLocalDevice.HostMode) +QtBluetooth.QBluetoothLocalDevice.pairingFinished?4(QBluetoothAddress, QBluetoothLocalDevice.Pairing) +QtBluetooth.QBluetoothLocalDevice.pairingDisplayPinCode?4(QBluetoothAddress, QString) +QtBluetooth.QBluetoothLocalDevice.pairingDisplayConfirmation?4(QBluetoothAddress, QString) +QtBluetooth.QBluetoothLocalDevice.error?4(QBluetoothLocalDevice.Error) +QtBluetooth.QBluetoothLocalDevice.deviceConnected?4(QBluetoothAddress) +QtBluetooth.QBluetoothLocalDevice.deviceDisconnected?4(QBluetoothAddress) +QtBluetooth.QBluetoothServer.Error?10 +QtBluetooth.QBluetoothServer.Error.NoError?10 +QtBluetooth.QBluetoothServer.Error.UnknownError?10 +QtBluetooth.QBluetoothServer.Error.PoweredOffError?10 +QtBluetooth.QBluetoothServer.Error.InputOutputError?10 +QtBluetooth.QBluetoothServer.Error.ServiceAlreadyRegisteredError?10 +QtBluetooth.QBluetoothServer.Error.UnsupportedProtocolError?10 +QtBluetooth.QBluetoothServer?1(QBluetoothServiceInfo.Protocol, QObject parent=None) +QtBluetooth.QBluetoothServer.__init__?1(self, QBluetoothServiceInfo.Protocol, QObject parent=None) +QtBluetooth.QBluetoothServer.close?4() +QtBluetooth.QBluetoothServer.listen?4(QBluetoothAddress address=QBluetoothAddress(), int port=0) -> bool +QtBluetooth.QBluetoothServer.listen?4(QBluetoothUuid, QString serviceName='') -> QBluetoothServiceInfo +QtBluetooth.QBluetoothServer.isListening?4() -> bool +QtBluetooth.QBluetoothServer.setMaxPendingConnections?4(int) +QtBluetooth.QBluetoothServer.maxPendingConnections?4() -> int +QtBluetooth.QBluetoothServer.hasPendingConnections?4() -> bool +QtBluetooth.QBluetoothServer.nextPendingConnection?4() -> QBluetoothSocket +QtBluetooth.QBluetoothServer.serverAddress?4() -> QBluetoothAddress +QtBluetooth.QBluetoothServer.serverPort?4() -> int +QtBluetooth.QBluetoothServer.setSecurityFlags?4(QBluetooth.SecurityFlags) +QtBluetooth.QBluetoothServer.securityFlags?4() -> QBluetooth.SecurityFlags +QtBluetooth.QBluetoothServer.serverType?4() -> QBluetoothServiceInfo.Protocol +QtBluetooth.QBluetoothServer.error?4() -> QBluetoothServer.Error +QtBluetooth.QBluetoothServer.newConnection?4() +QtBluetooth.QBluetoothServer.error?4(QBluetoothServer.Error) +QtBluetooth.QBluetoothServiceDiscoveryAgent.DiscoveryMode?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent.DiscoveryMode.MinimalDiscovery?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent.DiscoveryMode.FullDiscovery?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent.Error?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.NoError?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.InputOutputError?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.PoweredOffError?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.InvalidBluetoothAdapterError?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent.Error.UnknownError?10 +QtBluetooth.QBluetoothServiceDiscoveryAgent?1(QObject parent=None) +QtBluetooth.QBluetoothServiceDiscoveryAgent.__init__?1(self, QObject parent=None) +QtBluetooth.QBluetoothServiceDiscoveryAgent?1(QBluetoothAddress, QObject parent=None) +QtBluetooth.QBluetoothServiceDiscoveryAgent.__init__?1(self, QBluetoothAddress, QObject parent=None) +QtBluetooth.QBluetoothServiceDiscoveryAgent.isActive?4() -> bool +QtBluetooth.QBluetoothServiceDiscoveryAgent.error?4() -> QBluetoothServiceDiscoveryAgent.Error +QtBluetooth.QBluetoothServiceDiscoveryAgent.errorString?4() -> QString +QtBluetooth.QBluetoothServiceDiscoveryAgent.discoveredServices?4() -> unknown-type +QtBluetooth.QBluetoothServiceDiscoveryAgent.setUuidFilter?4(unknown-type) +QtBluetooth.QBluetoothServiceDiscoveryAgent.setUuidFilter?4(QBluetoothUuid) +QtBluetooth.QBluetoothServiceDiscoveryAgent.uuidFilter?4() -> unknown-type +QtBluetooth.QBluetoothServiceDiscoveryAgent.setRemoteAddress?4(QBluetoothAddress) -> bool +QtBluetooth.QBluetoothServiceDiscoveryAgent.remoteAddress?4() -> QBluetoothAddress +QtBluetooth.QBluetoothServiceDiscoveryAgent.start?4(QBluetoothServiceDiscoveryAgent.DiscoveryMode mode=QBluetoothServiceDiscoveryAgent.MinimalDiscovery) +QtBluetooth.QBluetoothServiceDiscoveryAgent.stop?4() +QtBluetooth.QBluetoothServiceDiscoveryAgent.clear?4() +QtBluetooth.QBluetoothServiceDiscoveryAgent.serviceDiscovered?4(QBluetoothServiceInfo) +QtBluetooth.QBluetoothServiceDiscoveryAgent.finished?4() +QtBluetooth.QBluetoothServiceDiscoveryAgent.canceled?4() +QtBluetooth.QBluetoothServiceDiscoveryAgent.error?4(QBluetoothServiceDiscoveryAgent.Error) +QtBluetooth.QBluetoothServiceInfo.Protocol?10 +QtBluetooth.QBluetoothServiceInfo.Protocol.UnknownProtocol?10 +QtBluetooth.QBluetoothServiceInfo.Protocol.L2capProtocol?10 +QtBluetooth.QBluetoothServiceInfo.Protocol.RfcommProtocol?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceRecordHandle?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceClassIds?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceRecordState?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceId?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ProtocolDescriptorList?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.BrowseGroupList?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.LanguageBaseAttributeIdList?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceInfoTimeToLive?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceAvailability?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.BluetoothProfileDescriptorList?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.DocumentationUrl?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ClientExecutableUrl?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.IconUrl?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.AdditionalProtocolDescriptorList?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.PrimaryLanguageBase?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceName?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceDescription?10 +QtBluetooth.QBluetoothServiceInfo.AttributeId.ServiceProvider?10 +QtBluetooth.QBluetoothServiceInfo?1() +QtBluetooth.QBluetoothServiceInfo.__init__?1(self) +QtBluetooth.QBluetoothServiceInfo?1(QBluetoothServiceInfo) +QtBluetooth.QBluetoothServiceInfo.__init__?1(self, QBluetoothServiceInfo) +QtBluetooth.QBluetoothServiceInfo.isValid?4() -> bool +QtBluetooth.QBluetoothServiceInfo.isComplete?4() -> bool +QtBluetooth.QBluetoothServiceInfo.setDevice?4(QBluetoothDeviceInfo) +QtBluetooth.QBluetoothServiceInfo.device?4() -> QBluetoothDeviceInfo +QtBluetooth.QBluetoothServiceInfo.attribute?4(int) -> QVariant +QtBluetooth.QBluetoothServiceInfo.attributes?4() -> unknown-type +QtBluetooth.QBluetoothServiceInfo.contains?4(int) -> bool +QtBluetooth.QBluetoothServiceInfo.removeAttribute?4(int) +QtBluetooth.QBluetoothServiceInfo.socketProtocol?4() -> QBluetoothServiceInfo.Protocol +QtBluetooth.QBluetoothServiceInfo.protocolServiceMultiplexer?4() -> int +QtBluetooth.QBluetoothServiceInfo.serverChannel?4() -> int +QtBluetooth.QBluetoothServiceInfo.protocolDescriptor?4(QBluetoothUuid.ProtocolUuid) -> Sequence +QtBluetooth.QBluetoothServiceInfo.isRegistered?4() -> bool +QtBluetooth.QBluetoothServiceInfo.registerService?4(QBluetoothAddress localAdapter=QBluetoothAddress()) -> bool +QtBluetooth.QBluetoothServiceInfo.unregisterService?4() -> bool +QtBluetooth.QBluetoothServiceInfo.setAttribute?4(int, QBluetoothUuid) +QtBluetooth.QBluetoothServiceInfo.setAttribute?4(int, Sequence) +QtBluetooth.QBluetoothServiceInfo.setAttribute?4(int, QVariant) +QtBluetooth.QBluetoothServiceInfo.setServiceName?4(QString) +QtBluetooth.QBluetoothServiceInfo.serviceName?4() -> QString +QtBluetooth.QBluetoothServiceInfo.setServiceDescription?4(QString) +QtBluetooth.QBluetoothServiceInfo.serviceDescription?4() -> QString +QtBluetooth.QBluetoothServiceInfo.setServiceProvider?4(QString) +QtBluetooth.QBluetoothServiceInfo.serviceProvider?4() -> QString +QtBluetooth.QBluetoothServiceInfo.setServiceAvailability?4(int) +QtBluetooth.QBluetoothServiceInfo.serviceAvailability?4() -> int +QtBluetooth.QBluetoothServiceInfo.setServiceUuid?4(QBluetoothUuid) +QtBluetooth.QBluetoothServiceInfo.serviceUuid?4() -> QBluetoothUuid +QtBluetooth.QBluetoothServiceInfo.serviceClassUuids?4() -> unknown-type +QtBluetooth.QBluetoothSocket.SocketError?10 +QtBluetooth.QBluetoothSocket.SocketError.NoSocketError?10 +QtBluetooth.QBluetoothSocket.SocketError.UnknownSocketError?10 +QtBluetooth.QBluetoothSocket.SocketError.HostNotFoundError?10 +QtBluetooth.QBluetoothSocket.SocketError.ServiceNotFoundError?10 +QtBluetooth.QBluetoothSocket.SocketError.NetworkError?10 +QtBluetooth.QBluetoothSocket.SocketError.UnsupportedProtocolError?10 +QtBluetooth.QBluetoothSocket.SocketError.OperationError?10 +QtBluetooth.QBluetoothSocket.SocketError.RemoteHostClosedError?10 +QtBluetooth.QBluetoothSocket.SocketState?10 +QtBluetooth.QBluetoothSocket.SocketState.UnconnectedState?10 +QtBluetooth.QBluetoothSocket.SocketState.ServiceLookupState?10 +QtBluetooth.QBluetoothSocket.SocketState.ConnectingState?10 +QtBluetooth.QBluetoothSocket.SocketState.ConnectedState?10 +QtBluetooth.QBluetoothSocket.SocketState.BoundState?10 +QtBluetooth.QBluetoothSocket.SocketState.ClosingState?10 +QtBluetooth.QBluetoothSocket.SocketState.ListeningState?10 +QtBluetooth.QBluetoothSocket?1(QBluetoothServiceInfo.Protocol, QObject parent=None) +QtBluetooth.QBluetoothSocket.__init__?1(self, QBluetoothServiceInfo.Protocol, QObject parent=None) +QtBluetooth.QBluetoothSocket?1(QObject parent=None) +QtBluetooth.QBluetoothSocket.__init__?1(self, QObject parent=None) +QtBluetooth.QBluetoothSocket.abort?4() +QtBluetooth.QBluetoothSocket.close?4() +QtBluetooth.QBluetoothSocket.isSequential?4() -> bool +QtBluetooth.QBluetoothSocket.bytesAvailable?4() -> int +QtBluetooth.QBluetoothSocket.bytesToWrite?4() -> int +QtBluetooth.QBluetoothSocket.canReadLine?4() -> bool +QtBluetooth.QBluetoothSocket.connectToService?4(QBluetoothServiceInfo, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtBluetooth.QBluetoothSocket.connectToService?4(QBluetoothAddress, QBluetoothUuid, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtBluetooth.QBluetoothSocket.connectToService?4(QBluetoothAddress, int, QIODevice.OpenMode mode=QIODevice.ReadWrite) +QtBluetooth.QBluetoothSocket.disconnectFromService?4() +QtBluetooth.QBluetoothSocket.localName?4() -> QString +QtBluetooth.QBluetoothSocket.localAddress?4() -> QBluetoothAddress +QtBluetooth.QBluetoothSocket.localPort?4() -> int +QtBluetooth.QBluetoothSocket.peerName?4() -> QString +QtBluetooth.QBluetoothSocket.peerAddress?4() -> QBluetoothAddress +QtBluetooth.QBluetoothSocket.peerPort?4() -> int +QtBluetooth.QBluetoothSocket.setSocketDescriptor?4(int, QBluetoothServiceInfo.Protocol, QBluetoothSocket.SocketState state=QBluetoothSocket.ConnectedState, QIODevice.OpenMode mode=QIODevice.ReadWrite) -> bool +QtBluetooth.QBluetoothSocket.socketDescriptor?4() -> int +QtBluetooth.QBluetoothSocket.socketType?4() -> QBluetoothServiceInfo.Protocol +QtBluetooth.QBluetoothSocket.state?4() -> QBluetoothSocket.SocketState +QtBluetooth.QBluetoothSocket.error?4() -> QBluetoothSocket.SocketError +QtBluetooth.QBluetoothSocket.errorString?4() -> QString +QtBluetooth.QBluetoothSocket.connected?4() +QtBluetooth.QBluetoothSocket.disconnected?4() +QtBluetooth.QBluetoothSocket.error?4(QBluetoothSocket.SocketError) +QtBluetooth.QBluetoothSocket.stateChanged?4(QBluetoothSocket.SocketState) +QtBluetooth.QBluetoothSocket.readData?4(int) -> Any +QtBluetooth.QBluetoothSocket.writeData?4(bytes) -> int +QtBluetooth.QBluetoothSocket.setSocketState?4(QBluetoothSocket.SocketState) +QtBluetooth.QBluetoothSocket.setSocketError?4(QBluetoothSocket.SocketError) +QtBluetooth.QBluetoothSocket.doDeviceDiscovery?4(QBluetoothServiceInfo, QIODevice.OpenMode) +QtBluetooth.QBluetoothSocket.setPreferredSecurityFlags?4(QBluetooth.SecurityFlags) +QtBluetooth.QBluetoothSocket.preferredSecurityFlags?4() -> QBluetooth.SecurityFlags +QtBluetooth.QBluetoothTransferManager?1(QObject parent=None) +QtBluetooth.QBluetoothTransferManager.__init__?1(self, QObject parent=None) +QtBluetooth.QBluetoothTransferManager.put?4(QBluetoothTransferRequest, QIODevice) -> QBluetoothTransferReply +QtBluetooth.QBluetoothTransferManager.finished?4(QBluetoothTransferReply) +QtBluetooth.QBluetoothTransferReply.TransferError?10 +QtBluetooth.QBluetoothTransferReply.TransferError.NoError?10 +QtBluetooth.QBluetoothTransferReply.TransferError.UnknownError?10 +QtBluetooth.QBluetoothTransferReply.TransferError.FileNotFoundError?10 +QtBluetooth.QBluetoothTransferReply.TransferError.HostNotFoundError?10 +QtBluetooth.QBluetoothTransferReply.TransferError.UserCanceledTransferError?10 +QtBluetooth.QBluetoothTransferReply.TransferError.IODeviceNotReadableError?10 +QtBluetooth.QBluetoothTransferReply.TransferError.ResourceBusyError?10 +QtBluetooth.QBluetoothTransferReply.TransferError.SessionError?10 +QtBluetooth.QBluetoothTransferReply?1(QObject parent=None) +QtBluetooth.QBluetoothTransferReply.__init__?1(self, QObject parent=None) +QtBluetooth.QBluetoothTransferReply.isFinished?4() -> bool +QtBluetooth.QBluetoothTransferReply.isRunning?4() -> bool +QtBluetooth.QBluetoothTransferReply.manager?4() -> QBluetoothTransferManager +QtBluetooth.QBluetoothTransferReply.error?4() -> QBluetoothTransferReply.TransferError +QtBluetooth.QBluetoothTransferReply.errorString?4() -> QString +QtBluetooth.QBluetoothTransferReply.request?4() -> QBluetoothTransferRequest +QtBluetooth.QBluetoothTransferReply.abort?4() +QtBluetooth.QBluetoothTransferReply.finished?4(QBluetoothTransferReply) +QtBluetooth.QBluetoothTransferReply.transferProgress?4(int, int) +QtBluetooth.QBluetoothTransferReply.error?4(QBluetoothTransferReply.TransferError) +QtBluetooth.QBluetoothTransferReply.setManager?4(QBluetoothTransferManager) +QtBluetooth.QBluetoothTransferReply.setRequest?4(QBluetoothTransferRequest) +QtBluetooth.QBluetoothTransferRequest.Attribute?10 +QtBluetooth.QBluetoothTransferRequest.Attribute.DescriptionAttribute?10 +QtBluetooth.QBluetoothTransferRequest.Attribute.TimeAttribute?10 +QtBluetooth.QBluetoothTransferRequest.Attribute.TypeAttribute?10 +QtBluetooth.QBluetoothTransferRequest.Attribute.LengthAttribute?10 +QtBluetooth.QBluetoothTransferRequest.Attribute.NameAttribute?10 +QtBluetooth.QBluetoothTransferRequest?1(QBluetoothAddress address=QBluetoothAddress()) +QtBluetooth.QBluetoothTransferRequest.__init__?1(self, QBluetoothAddress address=QBluetoothAddress()) +QtBluetooth.QBluetoothTransferRequest?1(QBluetoothTransferRequest) +QtBluetooth.QBluetoothTransferRequest.__init__?1(self, QBluetoothTransferRequest) +QtBluetooth.QBluetoothTransferRequest.attribute?4(QBluetoothTransferRequest.Attribute, QVariant defaultValue=None) -> QVariant +QtBluetooth.QBluetoothTransferRequest.setAttribute?4(QBluetoothTransferRequest.Attribute, QVariant) +QtBluetooth.QBluetoothTransferRequest.address?4() -> QBluetoothAddress +QtBluetooth.QBluetoothUuid.DescriptorType?10 +QtBluetooth.QBluetoothUuid.DescriptorType.UnknownDescriptorType?10 +QtBluetooth.QBluetoothUuid.DescriptorType.CharacteristicExtendedProperties?10 +QtBluetooth.QBluetoothUuid.DescriptorType.CharacteristicUserDescription?10 +QtBluetooth.QBluetoothUuid.DescriptorType.ClientCharacteristicConfiguration?10 +QtBluetooth.QBluetoothUuid.DescriptorType.ServerCharacteristicConfiguration?10 +QtBluetooth.QBluetoothUuid.DescriptorType.CharacteristicPresentationFormat?10 +QtBluetooth.QBluetoothUuid.DescriptorType.CharacteristicAggregateFormat?10 +QtBluetooth.QBluetoothUuid.DescriptorType.ValidRange?10 +QtBluetooth.QBluetoothUuid.DescriptorType.ExternalReportReference?10 +QtBluetooth.QBluetoothUuid.DescriptorType.ReportReference?10 +QtBluetooth.QBluetoothUuid.DescriptorType.EnvironmentalSensingConfiguration?10 +QtBluetooth.QBluetoothUuid.DescriptorType.EnvironmentalSensingMeasurement?10 +QtBluetooth.QBluetoothUuid.DescriptorType.EnvironmentalSensingTriggerSetting?10 +QtBluetooth.QBluetoothUuid.CharacteristicType?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DeviceName?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Appearance?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.PeripheralPrivacyFlag?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ReconnectionAddress?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.PeripheralPreferredConnectionParameters?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ServiceChanged?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AlertLevel?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TxPowerLevel?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DateTime?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DayOfWeek?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DayDateTime?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ExactTime256?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DSTOffset?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TimeZone?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.LocalTimeInformation?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TimeWithDST?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TimeAccuracy?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TimeSource?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ReferenceTimeInformation?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TimeUpdateControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TimeUpdateState?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.GlucoseMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BatteryLevel?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TemperatureMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TemperatureType?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.IntermediateTemperature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.MeasurementInterval?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BootKeyboardInputReport?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.SystemID?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ModelNumberString?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.SerialNumberString?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.FirmwareRevisionString?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.HardwareRevisionString?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.SoftwareRevisionString?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ManufacturerNameString?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.IEEE1107320601RegulatoryCertificationDataList?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.CurrentTime?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ScanRefresh?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BootKeyboardOutputReport?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BootMouseInputReport?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.GlucoseMeasurementContext?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BloodPressureMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.IntermediateCuffPressure?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.HeartRateMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BodySensorLocation?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.HeartRateControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AlertStatus?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.RingerControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.RingerSetting?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AlertCategoryIDBitMask?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AlertCategoryID?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AlertNotificationControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.UnreadAlertStatus?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.NewAlert?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.SupportedNewAlertCategory?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.SupportedUnreadAlertCategory?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BloodPressureFeature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.HIDInformation?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ReportMap?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.HIDControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Report?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ProtocolMode?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ScanIntervalWindow?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.PnPID?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.GlucoseFeature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.RecordAccessControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.RSCMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.RSCFeature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.SCControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.CSCMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.CSCFeature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.SensorLocation?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.CyclingPowerMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.CyclingPowerVector?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.CyclingPowerFeature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.CyclingPowerControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.LocationAndSpeed?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Navigation?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.PositionQuality?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.LNFeature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.LNControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.MagneticDeclination?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Elevation?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Pressure?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Temperature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Humidity?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TrueWindSpeed?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TrueWindDirection?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ApparentWindSpeed?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ApparentWindDirection?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.GustFactor?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.PollenConcentration?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.UVIndex?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Irradiance?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Rainfall?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.WindChill?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.HeatIndex?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DewPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DescriptorValueChanged?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AerobicHeartRateLowerLimit?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AerobicThreshold?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Age?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AnaerobicHeartRateLowerLimit?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AnaerobicHeartRateUpperLimit?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AnaerobicThreshold?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.AerobicHeartRateUpperLimit?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DateOfBirth?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DateOfThresholdAssessment?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.EmailAddress?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.FatBurnHeartRateLowerLimit?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.FatBurnHeartRateUpperLimit?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.FirstName?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.FiveZoneHeartRateLimits?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Gender?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.HeartRateMax?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Height?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.HipCircumference?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.LastName?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.MaximumRecommendedHeartRate?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.RestingHeartRate?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.SportTypeForAerobicAnaerobicThresholds?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.ThreeZoneHeartRateLimits?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.TwoZoneHeartRateLimits?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.VO2Max?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.WaistCircumference?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Weight?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.DatabaseChangeIncrement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.UserIndex?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BodyCompositionFeature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BodyCompositionMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.WeightMeasurement?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.WeightScaleFeature?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.UserControlPoint?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.MagneticFluxDensity2D?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.MagneticFluxDensity3D?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.Language?10 +QtBluetooth.QBluetoothUuid.CharacteristicType.BarometricPressureTrend?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ServiceDiscoveryServer?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.BrowseGroupDescriptor?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.PublicBrowseGroup?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.SerialPort?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.LANAccessUsingPPP?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.DialupNetworking?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.IrMCSync?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ObexObjectPush?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.OBEXFileTransfer?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.IrMCSyncCommand?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.Headset?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.AudioSource?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.AudioSink?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.AV_RemoteControlTarget?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.AdvancedAudioDistribution?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.AV_RemoteControl?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.AV_RemoteControlController?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HeadsetAG?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.PANU?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.NAP?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GN?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.DirectPrinting?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ReferencePrinting?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ImagingResponder?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ImagingAutomaticArchive?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ImagingReferenceObjects?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.Handsfree?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HandsfreeAudioGateway?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.DirectPrintingReferenceObjectsService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ReflectedUI?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.BasicPrinting?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.PrintingStatus?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HumanInterfaceDeviceService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HardcopyCableReplacement?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HCRPrint?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HCRScan?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.SIMAccess?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.PhonebookAccessPCE?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.PhonebookAccessPSE?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.PhonebookAccess?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HeadsetHS?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.MessageAccessServer?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.MessageNotificationServer?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.MessageAccessProfile?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.PnPInformation?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericNetworking?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericFileTransfer?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericAudio?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericTelephony?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.VideoSource?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.VideoSink?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.VideoDistribution?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HDP?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HDPSource?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HDPSink?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.BasicImage?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GNSS?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GNSSServer?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.Display3D?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.Glasses3D?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.Synchronization3D?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.MPSProfile?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.MPSService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericAccess?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.GenericAttribute?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ImmediateAlert?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.LinkLoss?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.TxPower?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.CurrentTimeService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ReferenceTimeUpdateService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.NextDSTChangeService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.Glucose?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HealthThermometer?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.DeviceInformation?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HeartRate?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.PhoneAlertStatusService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.BatteryService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.BloodPressure?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.AlertNotificationService?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.HumanInterfaceDevice?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ScanParameters?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.RunningSpeedAndCadence?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.CyclingSpeedAndCadence?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.CyclingPower?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.LocationAndNavigation?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.EnvironmentalSensing?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.BodyComposition?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.UserData?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.WeightScale?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.BondManagement?10 +QtBluetooth.QBluetoothUuid.ServiceClassUuid.ContinuousGlucoseMonitoring?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Sdp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Udp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Rfcomm?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Tcp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.TcsBin?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.TcsAt?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Att?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Obex?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Ip?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Ftp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Http?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Wsp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Bnep?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Upnp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Hidp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.HardcopyControlChannel?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.HardcopyDataChannel?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.HardcopyNotification?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Avctp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Avdtp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.Cmtp?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.UdiCPlain?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.McapControlChannel?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.McapDataChannel?10 +QtBluetooth.QBluetoothUuid.ProtocolUuid.L2cap?10 +QtBluetooth.QBluetoothUuid?1() +QtBluetooth.QBluetoothUuid.__init__?1(self) +QtBluetooth.QBluetoothUuid?1(QBluetoothUuid.ProtocolUuid) +QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid.ProtocolUuid) +QtBluetooth.QBluetoothUuid?1(QBluetoothUuid.ServiceClassUuid) +QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid.ServiceClassUuid) +QtBluetooth.QBluetoothUuid?1(QBluetoothUuid.CharacteristicType) +QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid.CharacteristicType) +QtBluetooth.QBluetoothUuid?1(QBluetoothUuid.DescriptorType) +QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid.DescriptorType) +QtBluetooth.QBluetoothUuid?1(int) +QtBluetooth.QBluetoothUuid.__init__?1(self, int) +QtBluetooth.QBluetoothUuid?1(quint128) +QtBluetooth.QBluetoothUuid.__init__?1(self, quint128) +QtBluetooth.QBluetoothUuid?1(QString) +QtBluetooth.QBluetoothUuid.__init__?1(self, QString) +QtBluetooth.QBluetoothUuid?1(QBluetoothUuid) +QtBluetooth.QBluetoothUuid.__init__?1(self, QBluetoothUuid) +QtBluetooth.QBluetoothUuid?1(QUuid) +QtBluetooth.QBluetoothUuid.__init__?1(self, QUuid) +QtBluetooth.QBluetoothUuid.minimumSize?4() -> int +QtBluetooth.QBluetoothUuid.toUInt16?4() -> (int, bool) +QtBluetooth.QBluetoothUuid.toUInt32?4() -> (int, bool) +QtBluetooth.QBluetoothUuid.toUInt128?4() -> quint128 +QtBluetooth.QBluetoothUuid.serviceClassToString?4(QBluetoothUuid.ServiceClassUuid) -> QString +QtBluetooth.QBluetoothUuid.protocolToString?4(QBluetoothUuid.ProtocolUuid) -> QString +QtBluetooth.QBluetoothUuid.characteristicToString?4(QBluetoothUuid.CharacteristicType) -> QString +QtBluetooth.QBluetoothUuid.descriptorToString?4(QBluetoothUuid.DescriptorType) -> QString +QtBluetooth.QLowEnergyAdvertisingData.Discoverability?10 +QtBluetooth.QLowEnergyAdvertisingData.Discoverability.DiscoverabilityNone?10 +QtBluetooth.QLowEnergyAdvertisingData.Discoverability.DiscoverabilityLimited?10 +QtBluetooth.QLowEnergyAdvertisingData.Discoverability.DiscoverabilityGeneral?10 +QtBluetooth.QLowEnergyAdvertisingData?1() +QtBluetooth.QLowEnergyAdvertisingData.__init__?1(self) +QtBluetooth.QLowEnergyAdvertisingData?1(QLowEnergyAdvertisingData) +QtBluetooth.QLowEnergyAdvertisingData.__init__?1(self, QLowEnergyAdvertisingData) +QtBluetooth.QLowEnergyAdvertisingData.setLocalName?4(QString) +QtBluetooth.QLowEnergyAdvertisingData.localName?4() -> QString +QtBluetooth.QLowEnergyAdvertisingData.invalidManufacturerId?4() -> int +QtBluetooth.QLowEnergyAdvertisingData.setManufacturerData?4(int, QByteArray) +QtBluetooth.QLowEnergyAdvertisingData.manufacturerId?4() -> int +QtBluetooth.QLowEnergyAdvertisingData.manufacturerData?4() -> QByteArray +QtBluetooth.QLowEnergyAdvertisingData.setIncludePowerLevel?4(bool) +QtBluetooth.QLowEnergyAdvertisingData.includePowerLevel?4() -> bool +QtBluetooth.QLowEnergyAdvertisingData.setDiscoverability?4(QLowEnergyAdvertisingData.Discoverability) +QtBluetooth.QLowEnergyAdvertisingData.discoverability?4() -> QLowEnergyAdvertisingData.Discoverability +QtBluetooth.QLowEnergyAdvertisingData.setServices?4(unknown-type) +QtBluetooth.QLowEnergyAdvertisingData.services?4() -> unknown-type +QtBluetooth.QLowEnergyAdvertisingData.setRawData?4(QByteArray) +QtBluetooth.QLowEnergyAdvertisingData.rawData?4() -> QByteArray +QtBluetooth.QLowEnergyAdvertisingData.swap?4(QLowEnergyAdvertisingData) +QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy?10 +QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy.IgnoreWhiteList?10 +QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy.UseWhiteListForScanning?10 +QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy.UseWhiteListForConnecting?10 +QtBluetooth.QLowEnergyAdvertisingParameters.FilterPolicy.UseWhiteListForScanningAndConnecting?10 +QtBluetooth.QLowEnergyAdvertisingParameters.Mode?10 +QtBluetooth.QLowEnergyAdvertisingParameters.Mode.AdvInd?10 +QtBluetooth.QLowEnergyAdvertisingParameters.Mode.AdvScanInd?10 +QtBluetooth.QLowEnergyAdvertisingParameters.Mode.AdvNonConnInd?10 +QtBluetooth.QLowEnergyAdvertisingParameters?1() +QtBluetooth.QLowEnergyAdvertisingParameters.__init__?1(self) +QtBluetooth.QLowEnergyAdvertisingParameters?1(QLowEnergyAdvertisingParameters) +QtBluetooth.QLowEnergyAdvertisingParameters.__init__?1(self, QLowEnergyAdvertisingParameters) +QtBluetooth.QLowEnergyAdvertisingParameters.setMode?4(QLowEnergyAdvertisingParameters.Mode) +QtBluetooth.QLowEnergyAdvertisingParameters.mode?4() -> QLowEnergyAdvertisingParameters.Mode +QtBluetooth.QLowEnergyAdvertisingParameters.setWhiteList?4(unknown-type, QLowEnergyAdvertisingParameters.FilterPolicy) +QtBluetooth.QLowEnergyAdvertisingParameters.whiteList?4() -> unknown-type +QtBluetooth.QLowEnergyAdvertisingParameters.filterPolicy?4() -> QLowEnergyAdvertisingParameters.FilterPolicy +QtBluetooth.QLowEnergyAdvertisingParameters.setInterval?4(int, int) +QtBluetooth.QLowEnergyAdvertisingParameters.minimumInterval?4() -> int +QtBluetooth.QLowEnergyAdvertisingParameters.maximumInterval?4() -> int +QtBluetooth.QLowEnergyAdvertisingParameters.swap?4(QLowEnergyAdvertisingParameters) +QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.address?7 +QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.type?7 +QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo?1(QBluetoothAddress, QLowEnergyController.RemoteAddressType) +QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.__init__?1(self, QBluetoothAddress, QLowEnergyController.RemoteAddressType) +QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo?1() +QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.__init__?1(self) +QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo?1(QLowEnergyAdvertisingParameters.AddressInfo) +QtBluetooth.QLowEnergyAdvertisingParameters.AddressInfo.__init__?1(self, QLowEnergyAdvertisingParameters.AddressInfo) +QtBluetooth.QLowEnergyCharacteristic.PropertyType?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.Unknown?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.Broadcasting?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.Read?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.WriteNoResponse?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.Write?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.Notify?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.Indicate?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.WriteSigned?10 +QtBluetooth.QLowEnergyCharacteristic.PropertyType.ExtendedProperty?10 +QtBluetooth.QLowEnergyCharacteristic?1() +QtBluetooth.QLowEnergyCharacteristic.__init__?1(self) +QtBluetooth.QLowEnergyCharacteristic?1(QLowEnergyCharacteristic) +QtBluetooth.QLowEnergyCharacteristic.__init__?1(self, QLowEnergyCharacteristic) +QtBluetooth.QLowEnergyCharacteristic.name?4() -> QString +QtBluetooth.QLowEnergyCharacteristic.uuid?4() -> QBluetoothUuid +QtBluetooth.QLowEnergyCharacteristic.value?4() -> QByteArray +QtBluetooth.QLowEnergyCharacteristic.properties?4() -> QLowEnergyCharacteristic.PropertyTypes +QtBluetooth.QLowEnergyCharacteristic.handle?4() -> int +QtBluetooth.QLowEnergyCharacteristic.descriptor?4(QBluetoothUuid) -> QLowEnergyDescriptor +QtBluetooth.QLowEnergyCharacteristic.descriptors?4() -> unknown-type +QtBluetooth.QLowEnergyCharacteristic.isValid?4() -> bool +QtBluetooth.QLowEnergyCharacteristic.PropertyTypes?1() +QtBluetooth.QLowEnergyCharacteristic.PropertyTypes.__init__?1(self) +QtBluetooth.QLowEnergyCharacteristic.PropertyTypes?1(int) +QtBluetooth.QLowEnergyCharacteristic.PropertyTypes.__init__?1(self, int) +QtBluetooth.QLowEnergyCharacteristic.PropertyTypes?1(QLowEnergyCharacteristic.PropertyTypes) +QtBluetooth.QLowEnergyCharacteristic.PropertyTypes.__init__?1(self, QLowEnergyCharacteristic.PropertyTypes) +QtBluetooth.QLowEnergyCharacteristicData?1() +QtBluetooth.QLowEnergyCharacteristicData.__init__?1(self) +QtBluetooth.QLowEnergyCharacteristicData?1(QLowEnergyCharacteristicData) +QtBluetooth.QLowEnergyCharacteristicData.__init__?1(self, QLowEnergyCharacteristicData) +QtBluetooth.QLowEnergyCharacteristicData.uuid?4() -> QBluetoothUuid +QtBluetooth.QLowEnergyCharacteristicData.setUuid?4(QBluetoothUuid) +QtBluetooth.QLowEnergyCharacteristicData.value?4() -> QByteArray +QtBluetooth.QLowEnergyCharacteristicData.setValue?4(QByteArray) +QtBluetooth.QLowEnergyCharacteristicData.properties?4() -> QLowEnergyCharacteristic.PropertyTypes +QtBluetooth.QLowEnergyCharacteristicData.setProperties?4(QLowEnergyCharacteristic.PropertyTypes) +QtBluetooth.QLowEnergyCharacteristicData.descriptors?4() -> unknown-type +QtBluetooth.QLowEnergyCharacteristicData.setDescriptors?4(unknown-type) +QtBluetooth.QLowEnergyCharacteristicData.addDescriptor?4(QLowEnergyDescriptorData) +QtBluetooth.QLowEnergyCharacteristicData.setReadConstraints?4(QBluetooth.AttAccessConstraints) +QtBluetooth.QLowEnergyCharacteristicData.readConstraints?4() -> QBluetooth.AttAccessConstraints +QtBluetooth.QLowEnergyCharacteristicData.setWriteConstraints?4(QBluetooth.AttAccessConstraints) +QtBluetooth.QLowEnergyCharacteristicData.writeConstraints?4() -> QBluetooth.AttAccessConstraints +QtBluetooth.QLowEnergyCharacteristicData.setValueLength?4(int, int) +QtBluetooth.QLowEnergyCharacteristicData.minimumValueLength?4() -> int +QtBluetooth.QLowEnergyCharacteristicData.maximumValueLength?4() -> int +QtBluetooth.QLowEnergyCharacteristicData.isValid?4() -> bool +QtBluetooth.QLowEnergyCharacteristicData.swap?4(QLowEnergyCharacteristicData) +QtBluetooth.QLowEnergyConnectionParameters?1() +QtBluetooth.QLowEnergyConnectionParameters.__init__?1(self) +QtBluetooth.QLowEnergyConnectionParameters?1(QLowEnergyConnectionParameters) +QtBluetooth.QLowEnergyConnectionParameters.__init__?1(self, QLowEnergyConnectionParameters) +QtBluetooth.QLowEnergyConnectionParameters.setIntervalRange?4(float, float) +QtBluetooth.QLowEnergyConnectionParameters.minimumInterval?4() -> float +QtBluetooth.QLowEnergyConnectionParameters.maximumInterval?4() -> float +QtBluetooth.QLowEnergyConnectionParameters.setLatency?4(int) +QtBluetooth.QLowEnergyConnectionParameters.latency?4() -> int +QtBluetooth.QLowEnergyConnectionParameters.setSupervisionTimeout?4(int) +QtBluetooth.QLowEnergyConnectionParameters.supervisionTimeout?4() -> int +QtBluetooth.QLowEnergyConnectionParameters.swap?4(QLowEnergyConnectionParameters) +QtBluetooth.QLowEnergyController.Role?10 +QtBluetooth.QLowEnergyController.Role.CentralRole?10 +QtBluetooth.QLowEnergyController.Role.PeripheralRole?10 +QtBluetooth.QLowEnergyController.RemoteAddressType?10 +QtBluetooth.QLowEnergyController.RemoteAddressType.PublicAddress?10 +QtBluetooth.QLowEnergyController.RemoteAddressType.RandomAddress?10 +QtBluetooth.QLowEnergyController.ControllerState?10 +QtBluetooth.QLowEnergyController.ControllerState.UnconnectedState?10 +QtBluetooth.QLowEnergyController.ControllerState.ConnectingState?10 +QtBluetooth.QLowEnergyController.ControllerState.ConnectedState?10 +QtBluetooth.QLowEnergyController.ControllerState.DiscoveringState?10 +QtBluetooth.QLowEnergyController.ControllerState.DiscoveredState?10 +QtBluetooth.QLowEnergyController.ControllerState.ClosingState?10 +QtBluetooth.QLowEnergyController.ControllerState.AdvertisingState?10 +QtBluetooth.QLowEnergyController.Error?10 +QtBluetooth.QLowEnergyController.Error.NoError?10 +QtBluetooth.QLowEnergyController.Error.UnknownError?10 +QtBluetooth.QLowEnergyController.Error.UnknownRemoteDeviceError?10 +QtBluetooth.QLowEnergyController.Error.NetworkError?10 +QtBluetooth.QLowEnergyController.Error.InvalidBluetoothAdapterError?10 +QtBluetooth.QLowEnergyController.Error.ConnectionError?10 +QtBluetooth.QLowEnergyController.Error.AdvertisingError?10 +QtBluetooth.QLowEnergyController.Error.RemoteHostClosedError?10 +QtBluetooth.QLowEnergyController.Error.AuthorizationError?10 +QtBluetooth.QLowEnergyController?1(QBluetoothDeviceInfo, QObject parent=None) +QtBluetooth.QLowEnergyController.__init__?1(self, QBluetoothDeviceInfo, QObject parent=None) +QtBluetooth.QLowEnergyController?1(QBluetoothAddress, QObject parent=None) +QtBluetooth.QLowEnergyController.__init__?1(self, QBluetoothAddress, QObject parent=None) +QtBluetooth.QLowEnergyController?1(QBluetoothAddress, QBluetoothAddress, QObject parent=None) +QtBluetooth.QLowEnergyController.__init__?1(self, QBluetoothAddress, QBluetoothAddress, QObject parent=None) +QtBluetooth.QLowEnergyController.localAddress?4() -> QBluetoothAddress +QtBluetooth.QLowEnergyController.remoteAddress?4() -> QBluetoothAddress +QtBluetooth.QLowEnergyController.state?4() -> QLowEnergyController.ControllerState +QtBluetooth.QLowEnergyController.remoteAddressType?4() -> QLowEnergyController.RemoteAddressType +QtBluetooth.QLowEnergyController.setRemoteAddressType?4(QLowEnergyController.RemoteAddressType) +QtBluetooth.QLowEnergyController.connectToDevice?4() +QtBluetooth.QLowEnergyController.disconnectFromDevice?4() +QtBluetooth.QLowEnergyController.discoverServices?4() +QtBluetooth.QLowEnergyController.services?4() -> unknown-type +QtBluetooth.QLowEnergyController.createServiceObject?4(QBluetoothUuid, QObject parent=None) -> QLowEnergyService +QtBluetooth.QLowEnergyController.error?4() -> QLowEnergyController.Error +QtBluetooth.QLowEnergyController.errorString?4() -> QString +QtBluetooth.QLowEnergyController.remoteName?4() -> QString +QtBluetooth.QLowEnergyController.connected?4() +QtBluetooth.QLowEnergyController.disconnected?4() +QtBluetooth.QLowEnergyController.stateChanged?4(QLowEnergyController.ControllerState) +QtBluetooth.QLowEnergyController.error?4(QLowEnergyController.Error) +QtBluetooth.QLowEnergyController.serviceDiscovered?4(QBluetoothUuid) +QtBluetooth.QLowEnergyController.discoveryFinished?4() +QtBluetooth.QLowEnergyController.createCentral?4(QBluetoothDeviceInfo, QObject parent=None) -> QLowEnergyController +QtBluetooth.QLowEnergyController.createCentral?4(QBluetoothAddress, QBluetoothAddress, QObject parent=None) -> QLowEnergyController +QtBluetooth.QLowEnergyController.createPeripheral?4(QObject parent=None) -> QLowEnergyController +QtBluetooth.QLowEnergyController.startAdvertising?4(QLowEnergyAdvertisingParameters, QLowEnergyAdvertisingData, QLowEnergyAdvertisingData scanResponseData=QLowEnergyAdvertisingData()) +QtBluetooth.QLowEnergyController.stopAdvertising?4() +QtBluetooth.QLowEnergyController.addService?4(QLowEnergyServiceData, QObject parent=None) -> QLowEnergyService +QtBluetooth.QLowEnergyController.requestConnectionUpdate?4(QLowEnergyConnectionParameters) +QtBluetooth.QLowEnergyController.role?4() -> QLowEnergyController.Role +QtBluetooth.QLowEnergyController.connectionUpdated?4(QLowEnergyConnectionParameters) +QtBluetooth.QLowEnergyController.remoteDeviceUuid?4() -> QBluetoothUuid +QtBluetooth.QLowEnergyDescriptor?1() +QtBluetooth.QLowEnergyDescriptor.__init__?1(self) +QtBluetooth.QLowEnergyDescriptor?1(QLowEnergyDescriptor) +QtBluetooth.QLowEnergyDescriptor.__init__?1(self, QLowEnergyDescriptor) +QtBluetooth.QLowEnergyDescriptor.isValid?4() -> bool +QtBluetooth.QLowEnergyDescriptor.value?4() -> QByteArray +QtBluetooth.QLowEnergyDescriptor.uuid?4() -> QBluetoothUuid +QtBluetooth.QLowEnergyDescriptor.handle?4() -> int +QtBluetooth.QLowEnergyDescriptor.name?4() -> QString +QtBluetooth.QLowEnergyDescriptor.type?4() -> QBluetoothUuid.DescriptorType +QtBluetooth.QLowEnergyDescriptorData?1() +QtBluetooth.QLowEnergyDescriptorData.__init__?1(self) +QtBluetooth.QLowEnergyDescriptorData?1(QBluetoothUuid, QByteArray) +QtBluetooth.QLowEnergyDescriptorData.__init__?1(self, QBluetoothUuid, QByteArray) +QtBluetooth.QLowEnergyDescriptorData?1(QLowEnergyDescriptorData) +QtBluetooth.QLowEnergyDescriptorData.__init__?1(self, QLowEnergyDescriptorData) +QtBluetooth.QLowEnergyDescriptorData.value?4() -> QByteArray +QtBluetooth.QLowEnergyDescriptorData.setValue?4(QByteArray) +QtBluetooth.QLowEnergyDescriptorData.uuid?4() -> QBluetoothUuid +QtBluetooth.QLowEnergyDescriptorData.setUuid?4(QBluetoothUuid) +QtBluetooth.QLowEnergyDescriptorData.isValid?4() -> bool +QtBluetooth.QLowEnergyDescriptorData.setReadPermissions?4(bool, QBluetooth.AttAccessConstraints constraints=QBluetooth.AttAccessConstraints()) +QtBluetooth.QLowEnergyDescriptorData.isReadable?4() -> bool +QtBluetooth.QLowEnergyDescriptorData.readConstraints?4() -> QBluetooth.AttAccessConstraints +QtBluetooth.QLowEnergyDescriptorData.setWritePermissions?4(bool, QBluetooth.AttAccessConstraints constraints=QBluetooth.AttAccessConstraints()) +QtBluetooth.QLowEnergyDescriptorData.isWritable?4() -> bool +QtBluetooth.QLowEnergyDescriptorData.writeConstraints?4() -> QBluetooth.AttAccessConstraints +QtBluetooth.QLowEnergyDescriptorData.swap?4(QLowEnergyDescriptorData) +QtBluetooth.QLowEnergyService.WriteMode?10 +QtBluetooth.QLowEnergyService.WriteMode.WriteWithResponse?10 +QtBluetooth.QLowEnergyService.WriteMode.WriteWithoutResponse?10 +QtBluetooth.QLowEnergyService.WriteMode.WriteSigned?10 +QtBluetooth.QLowEnergyService.ServiceState?10 +QtBluetooth.QLowEnergyService.ServiceState.InvalidService?10 +QtBluetooth.QLowEnergyService.ServiceState.DiscoveryRequired?10 +QtBluetooth.QLowEnergyService.ServiceState.DiscoveringServices?10 +QtBluetooth.QLowEnergyService.ServiceState.ServiceDiscovered?10 +QtBluetooth.QLowEnergyService.ServiceState.LocalService?10 +QtBluetooth.QLowEnergyService.ServiceError?10 +QtBluetooth.QLowEnergyService.ServiceError.NoError?10 +QtBluetooth.QLowEnergyService.ServiceError.OperationError?10 +QtBluetooth.QLowEnergyService.ServiceError.CharacteristicWriteError?10 +QtBluetooth.QLowEnergyService.ServiceError.DescriptorWriteError?10 +QtBluetooth.QLowEnergyService.ServiceError.CharacteristicReadError?10 +QtBluetooth.QLowEnergyService.ServiceError.DescriptorReadError?10 +QtBluetooth.QLowEnergyService.ServiceError.UnknownError?10 +QtBluetooth.QLowEnergyService.ServiceType?10 +QtBluetooth.QLowEnergyService.ServiceType.PrimaryService?10 +QtBluetooth.QLowEnergyService.ServiceType.IncludedService?10 +QtBluetooth.QLowEnergyService.includedServices?4() -> unknown-type +QtBluetooth.QLowEnergyService.type?4() -> QLowEnergyService.ServiceTypes +QtBluetooth.QLowEnergyService.state?4() -> QLowEnergyService.ServiceState +QtBluetooth.QLowEnergyService.characteristic?4(QBluetoothUuid) -> QLowEnergyCharacteristic +QtBluetooth.QLowEnergyService.characteristics?4() -> unknown-type +QtBluetooth.QLowEnergyService.serviceUuid?4() -> QBluetoothUuid +QtBluetooth.QLowEnergyService.serviceName?4() -> QString +QtBluetooth.QLowEnergyService.discoverDetails?4() +QtBluetooth.QLowEnergyService.error?4() -> QLowEnergyService.ServiceError +QtBluetooth.QLowEnergyService.contains?4(QLowEnergyCharacteristic) -> bool +QtBluetooth.QLowEnergyService.contains?4(QLowEnergyDescriptor) -> bool +QtBluetooth.QLowEnergyService.writeCharacteristic?4(QLowEnergyCharacteristic, QByteArray, QLowEnergyService.WriteMode mode=QLowEnergyService.WriteWithResponse) +QtBluetooth.QLowEnergyService.writeDescriptor?4(QLowEnergyDescriptor, QByteArray) +QtBluetooth.QLowEnergyService.stateChanged?4(QLowEnergyService.ServiceState) +QtBluetooth.QLowEnergyService.characteristicChanged?4(QLowEnergyCharacteristic, QByteArray) +QtBluetooth.QLowEnergyService.characteristicWritten?4(QLowEnergyCharacteristic, QByteArray) +QtBluetooth.QLowEnergyService.descriptorWritten?4(QLowEnergyDescriptor, QByteArray) +QtBluetooth.QLowEnergyService.error?4(QLowEnergyService.ServiceError) +QtBluetooth.QLowEnergyService.readCharacteristic?4(QLowEnergyCharacteristic) +QtBluetooth.QLowEnergyService.readDescriptor?4(QLowEnergyDescriptor) +QtBluetooth.QLowEnergyService.characteristicRead?4(QLowEnergyCharacteristic, QByteArray) +QtBluetooth.QLowEnergyService.descriptorRead?4(QLowEnergyDescriptor, QByteArray) +QtBluetooth.QLowEnergyService.ServiceTypes?1() +QtBluetooth.QLowEnergyService.ServiceTypes.__init__?1(self) +QtBluetooth.QLowEnergyService.ServiceTypes?1(int) +QtBluetooth.QLowEnergyService.ServiceTypes.__init__?1(self, int) +QtBluetooth.QLowEnergyService.ServiceTypes?1(QLowEnergyService.ServiceTypes) +QtBluetooth.QLowEnergyService.ServiceTypes.__init__?1(self, QLowEnergyService.ServiceTypes) +QtBluetooth.QLowEnergyServiceData.ServiceType?10 +QtBluetooth.QLowEnergyServiceData.ServiceType.ServiceTypePrimary?10 +QtBluetooth.QLowEnergyServiceData.ServiceType.ServiceTypeSecondary?10 +QtBluetooth.QLowEnergyServiceData?1() +QtBluetooth.QLowEnergyServiceData.__init__?1(self) +QtBluetooth.QLowEnergyServiceData?1(QLowEnergyServiceData) +QtBluetooth.QLowEnergyServiceData.__init__?1(self, QLowEnergyServiceData) +QtBluetooth.QLowEnergyServiceData.type?4() -> QLowEnergyServiceData.ServiceType +QtBluetooth.QLowEnergyServiceData.setType?4(QLowEnergyServiceData.ServiceType) +QtBluetooth.QLowEnergyServiceData.uuid?4() -> QBluetoothUuid +QtBluetooth.QLowEnergyServiceData.setUuid?4(QBluetoothUuid) +QtBluetooth.QLowEnergyServiceData.includedServices?4() -> unknown-type +QtBluetooth.QLowEnergyServiceData.setIncludedServices?4(unknown-type) +QtBluetooth.QLowEnergyServiceData.addIncludedService?4(QLowEnergyService) +QtBluetooth.QLowEnergyServiceData.characteristics?4() -> unknown-type +QtBluetooth.QLowEnergyServiceData.setCharacteristics?4(unknown-type) +QtBluetooth.QLowEnergyServiceData.addCharacteristic?4(QLowEnergyCharacteristicData) +QtBluetooth.QLowEnergyServiceData.isValid?4() -> bool +QtBluetooth.QLowEnergyServiceData.swap?4(QLowEnergyServiceData) +QtDBus.QDBusAbstractAdaptor?1(QObject) +QtDBus.QDBusAbstractAdaptor.__init__?1(self, QObject) +QtDBus.QDBusAbstractAdaptor.setAutoRelaySignals?4(bool) +QtDBus.QDBusAbstractAdaptor.autoRelaySignals?4() -> bool +QtDBus.QDBusAbstractInterface?1(QString, QString, str, QDBusConnection, QObject) +QtDBus.QDBusAbstractInterface.__init__?1(self, QString, QString, str, QDBusConnection, QObject) +QtDBus.QDBusAbstractInterface.isValid?4() -> bool +QtDBus.QDBusAbstractInterface.connection?4() -> QDBusConnection +QtDBus.QDBusAbstractInterface.service?4() -> QString +QtDBus.QDBusAbstractInterface.path?4() -> QString +QtDBus.QDBusAbstractInterface.interface?4() -> QString +QtDBus.QDBusAbstractInterface.lastError?4() -> QDBusError +QtDBus.QDBusAbstractInterface.setTimeout?4(int) +QtDBus.QDBusAbstractInterface.timeout?4() -> int +QtDBus.QDBusAbstractInterface.call?4(QString, QVariant arg1=None, QVariant arg2=None, QVariant arg3=None, QVariant arg4=None, QVariant arg5=None, QVariant arg6=None, QVariant arg7=None, QVariant arg8=None) -> QDBusMessage +QtDBus.QDBusAbstractInterface.call?4(QDBus.CallMode, QString, QVariant arg1=None, QVariant arg2=None, QVariant arg3=None, QVariant arg4=None, QVariant arg5=None, QVariant arg6=None, QVariant arg7=None, QVariant arg8=None) -> QDBusMessage +QtDBus.QDBusAbstractInterface.callWithArgumentList?4(QDBus.CallMode, QString, unknown-type) -> QDBusMessage +QtDBus.QDBusAbstractInterface.callWithCallback?4(QString, unknown-type, Any, Any) -> bool +QtDBus.QDBusAbstractInterface.callWithCallback?4(QString, unknown-type, Any) -> bool +QtDBus.QDBusAbstractInterface.asyncCall?4(QString, QVariant arg1=None, QVariant arg2=None, QVariant arg3=None, QVariant arg4=None, QVariant arg5=None, QVariant arg6=None, QVariant arg7=None, QVariant arg8=None) -> QDBusPendingCall +QtDBus.QDBusAbstractInterface.asyncCallWithArgumentList?4(QString, unknown-type) -> QDBusPendingCall +QtDBus.QDBusAbstractInterface.connectNotify?4(QMetaMethod) +QtDBus.QDBusAbstractInterface.disconnectNotify?4(QMetaMethod) +QtDBus.QDBusArgument?1() +QtDBus.QDBusArgument.__init__?1(self) +QtDBus.QDBusArgument?1(QDBusArgument) +QtDBus.QDBusArgument.__init__?1(self, QDBusArgument) +QtDBus.QDBusArgument?1(Any, int id=QMetaType.Int) +QtDBus.QDBusArgument.__init__?1(self, Any, int id=QMetaType.Int) +QtDBus.QDBusArgument.add?4(Any, int id=QMetaType.Int) -> Any +QtDBus.QDBusArgument.beginStructure?4() +QtDBus.QDBusArgument.endStructure?4() +QtDBus.QDBusArgument.beginArray?4(int) +QtDBus.QDBusArgument.endArray?4() +QtDBus.QDBusArgument.beginMap?4(int, int) +QtDBus.QDBusArgument.endMap?4() +QtDBus.QDBusArgument.beginMapEntry?4() +QtDBus.QDBusArgument.endMapEntry?4() +QtDBus.QDBusArgument.swap?4(QDBusArgument) +QtDBus.QDBus.CallMode?10 +QtDBus.QDBus.CallMode.NoBlock?10 +QtDBus.QDBus.CallMode.Block?10 +QtDBus.QDBus.CallMode.BlockWithGui?10 +QtDBus.QDBus.CallMode.AutoDetect?10 +QtDBus.QDBusConnection.ConnectionCapability?10 +QtDBus.QDBusConnection.ConnectionCapability.UnixFileDescriptorPassing?10 +QtDBus.QDBusConnection.UnregisterMode?10 +QtDBus.QDBusConnection.UnregisterMode.UnregisterNode?10 +QtDBus.QDBusConnection.UnregisterMode.UnregisterTree?10 +QtDBus.QDBusConnection.RegisterOption?10 +QtDBus.QDBusConnection.RegisterOption.ExportAdaptors?10 +QtDBus.QDBusConnection.RegisterOption.ExportScriptableSlots?10 +QtDBus.QDBusConnection.RegisterOption.ExportScriptableSignals?10 +QtDBus.QDBusConnection.RegisterOption.ExportScriptableProperties?10 +QtDBus.QDBusConnection.RegisterOption.ExportScriptableInvokables?10 +QtDBus.QDBusConnection.RegisterOption.ExportScriptableContents?10 +QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableSlots?10 +QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableSignals?10 +QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableProperties?10 +QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableInvokables?10 +QtDBus.QDBusConnection.RegisterOption.ExportNonScriptableContents?10 +QtDBus.QDBusConnection.RegisterOption.ExportAllSlots?10 +QtDBus.QDBusConnection.RegisterOption.ExportAllSignals?10 +QtDBus.QDBusConnection.RegisterOption.ExportAllProperties?10 +QtDBus.QDBusConnection.RegisterOption.ExportAllInvokables?10 +QtDBus.QDBusConnection.RegisterOption.ExportAllContents?10 +QtDBus.QDBusConnection.RegisterOption.ExportAllSignal?10 +QtDBus.QDBusConnection.RegisterOption.ExportChildObjects?10 +QtDBus.QDBusConnection.BusType?10 +QtDBus.QDBusConnection.BusType.SessionBus?10 +QtDBus.QDBusConnection.BusType.SystemBus?10 +QtDBus.QDBusConnection.BusType.ActivationBus?10 +QtDBus.QDBusConnection?1(QString) +QtDBus.QDBusConnection.__init__?1(self, QString) +QtDBus.QDBusConnection?1(QDBusConnection) +QtDBus.QDBusConnection.__init__?1(self, QDBusConnection) +QtDBus.QDBusConnection.isConnected?4() -> bool +QtDBus.QDBusConnection.baseService?4() -> QString +QtDBus.QDBusConnection.lastError?4() -> QDBusError +QtDBus.QDBusConnection.name?4() -> QString +QtDBus.QDBusConnection.connectionCapabilities?4() -> QDBusConnection.ConnectionCapabilities +QtDBus.QDBusConnection.send?4(QDBusMessage) -> bool +QtDBus.QDBusConnection.callWithCallback?4(QDBusMessage, Any, Any, int timeout=-1) -> bool +QtDBus.QDBusConnection.call?4(QDBusMessage, QDBus.CallMode mode=QDBus.Block, int timeout=-1) -> QDBusMessage +QtDBus.QDBusConnection.asyncCall?4(QDBusMessage, int timeout=-1) -> QDBusPendingCall +QtDBus.QDBusConnection.connect?4(QString, QString, QString, QString, Any) -> bool +QtDBus.QDBusConnection.connect?4(QString, QString, QString, QString, QString, Any) -> bool +QtDBus.QDBusConnection.connect?4(QString, QString, QString, QString, QStringList, QString, Any) -> bool +QtDBus.QDBusConnection.disconnect?4(QString, QString, QString, QString, Any) -> bool +QtDBus.QDBusConnection.disconnect?4(QString, QString, QString, QString, QString, Any) -> bool +QtDBus.QDBusConnection.disconnect?4(QString, QString, QString, QString, QStringList, QString, Any) -> bool +QtDBus.QDBusConnection.registerObject?4(QString, QObject, QDBusConnection.RegisterOptions options=QDBusConnection.ExportAdaptors) -> bool +QtDBus.QDBusConnection.registerObject?4(QString, QString, QObject, QDBusConnection.RegisterOptions options=QDBusConnection.ExportAdaptors) -> bool +QtDBus.QDBusConnection.unregisterObject?4(QString, QDBusConnection.UnregisterMode mode=QDBusConnection.UnregisterNode) +QtDBus.QDBusConnection.objectRegisteredAt?4(QString) -> QObject +QtDBus.QDBusConnection.registerService?4(QString) -> bool +QtDBus.QDBusConnection.unregisterService?4(QString) -> bool +QtDBus.QDBusConnection.interface?4() -> QDBusConnectionInterface +QtDBus.QDBusConnection.connectToBus?4(QDBusConnection.BusType, QString) -> QDBusConnection +QtDBus.QDBusConnection.connectToBus?4(QString, QString) -> QDBusConnection +QtDBus.QDBusConnection.connectToPeer?4(QString, QString) -> QDBusConnection +QtDBus.QDBusConnection.disconnectFromBus?4(QString) +QtDBus.QDBusConnection.disconnectFromPeer?4(QString) +QtDBus.QDBusConnection.localMachineId?4() -> QByteArray +QtDBus.QDBusConnection.sessionBus?4() -> QDBusConnection +QtDBus.QDBusConnection.systemBus?4() -> QDBusConnection +QtDBus.QDBusConnection.sender?4() -> QDBusConnection +QtDBus.QDBusConnection.swap?4(QDBusConnection) +QtDBus.QDBusConnection.RegisterOptions?1() +QtDBus.QDBusConnection.RegisterOptions.__init__?1(self) +QtDBus.QDBusConnection.RegisterOptions?1(int) +QtDBus.QDBusConnection.RegisterOptions.__init__?1(self, int) +QtDBus.QDBusConnection.RegisterOptions?1(QDBusConnection.RegisterOptions) +QtDBus.QDBusConnection.RegisterOptions.__init__?1(self, QDBusConnection.RegisterOptions) +QtDBus.QDBusConnection.ConnectionCapabilities?1() +QtDBus.QDBusConnection.ConnectionCapabilities.__init__?1(self) +QtDBus.QDBusConnection.ConnectionCapabilities?1(int) +QtDBus.QDBusConnection.ConnectionCapabilities.__init__?1(self, int) +QtDBus.QDBusConnection.ConnectionCapabilities?1(QDBusConnection.ConnectionCapabilities) +QtDBus.QDBusConnection.ConnectionCapabilities.__init__?1(self, QDBusConnection.ConnectionCapabilities) +QtDBus.QDBusConnectionInterface.RegisterServiceReply?10 +QtDBus.QDBusConnectionInterface.RegisterServiceReply.ServiceNotRegistered?10 +QtDBus.QDBusConnectionInterface.RegisterServiceReply.ServiceRegistered?10 +QtDBus.QDBusConnectionInterface.RegisterServiceReply.ServiceQueued?10 +QtDBus.QDBusConnectionInterface.ServiceReplacementOptions?10 +QtDBus.QDBusConnectionInterface.ServiceReplacementOptions.DontAllowReplacement?10 +QtDBus.QDBusConnectionInterface.ServiceReplacementOptions.AllowReplacement?10 +QtDBus.QDBusConnectionInterface.ServiceQueueOptions?10 +QtDBus.QDBusConnectionInterface.ServiceQueueOptions.DontQueueService?10 +QtDBus.QDBusConnectionInterface.ServiceQueueOptions.QueueService?10 +QtDBus.QDBusConnectionInterface.ServiceQueueOptions.ReplaceExistingService?10 +QtDBus.QDBusConnectionInterface.registeredServiceNames?4() -> unknown-type +QtDBus.QDBusConnectionInterface.activatableServiceNames?4() -> unknown-type +QtDBus.QDBusConnectionInterface.isServiceRegistered?4(QString) -> unknown-type +QtDBus.QDBusConnectionInterface.serviceOwner?4(QString) -> unknown-type +QtDBus.QDBusConnectionInterface.unregisterService?4(QString) -> unknown-type +QtDBus.QDBusConnectionInterface.registerService?4(QString, QDBusConnectionInterface.ServiceQueueOptions qoption=QDBusConnectionInterface.DontQueueService, QDBusConnectionInterface.ServiceReplacementOptions roption=QDBusConnectionInterface.DontAllowReplacement) -> unknown-type +QtDBus.QDBusConnectionInterface.servicePid?4(QString) -> unknown-type +QtDBus.QDBusConnectionInterface.serviceUid?4(QString) -> unknown-type +QtDBus.QDBusConnectionInterface.startService?4(QString) -> unknown-type +QtDBus.QDBusConnectionInterface.serviceRegistered?4(QString) +QtDBus.QDBusConnectionInterface.serviceUnregistered?4(QString) +QtDBus.QDBusConnectionInterface.serviceOwnerChanged?4(QString, QString, QString) +QtDBus.QDBusConnectionInterface.callWithCallbackFailed?4(QDBusError, QDBusMessage) +QtDBus.QDBusConnectionInterface.connectNotify?4(QMetaMethod) +QtDBus.QDBusConnectionInterface.disconnectNotify?4(QMetaMethod) +QtDBus.QDBusError.ErrorType?10 +QtDBus.QDBusError.ErrorType.NoError?10 +QtDBus.QDBusError.ErrorType.Other?10 +QtDBus.QDBusError.ErrorType.Failed?10 +QtDBus.QDBusError.ErrorType.NoMemory?10 +QtDBus.QDBusError.ErrorType.ServiceUnknown?10 +QtDBus.QDBusError.ErrorType.NoReply?10 +QtDBus.QDBusError.ErrorType.BadAddress?10 +QtDBus.QDBusError.ErrorType.NotSupported?10 +QtDBus.QDBusError.ErrorType.LimitsExceeded?10 +QtDBus.QDBusError.ErrorType.AccessDenied?10 +QtDBus.QDBusError.ErrorType.NoServer?10 +QtDBus.QDBusError.ErrorType.Timeout?10 +QtDBus.QDBusError.ErrorType.NoNetwork?10 +QtDBus.QDBusError.ErrorType.AddressInUse?10 +QtDBus.QDBusError.ErrorType.Disconnected?10 +QtDBus.QDBusError.ErrorType.InvalidArgs?10 +QtDBus.QDBusError.ErrorType.UnknownMethod?10 +QtDBus.QDBusError.ErrorType.TimedOut?10 +QtDBus.QDBusError.ErrorType.InvalidSignature?10 +QtDBus.QDBusError.ErrorType.UnknownInterface?10 +QtDBus.QDBusError.ErrorType.InternalError?10 +QtDBus.QDBusError.ErrorType.UnknownObject?10 +QtDBus.QDBusError.ErrorType.InvalidService?10 +QtDBus.QDBusError.ErrorType.InvalidObjectPath?10 +QtDBus.QDBusError.ErrorType.InvalidInterface?10 +QtDBus.QDBusError.ErrorType.InvalidMember?10 +QtDBus.QDBusError.ErrorType.UnknownProperty?10 +QtDBus.QDBusError.ErrorType.PropertyReadOnly?10 +QtDBus.QDBusError?1(QDBusError) +QtDBus.QDBusError.__init__?1(self, QDBusError) +QtDBus.QDBusError.type?4() -> QDBusError.ErrorType +QtDBus.QDBusError.name?4() -> QString +QtDBus.QDBusError.message?4() -> QString +QtDBus.QDBusError.isValid?4() -> bool +QtDBus.QDBusError.errorString?4(QDBusError.ErrorType) -> QString +QtDBus.QDBusError.swap?4(QDBusError) +QtDBus.QDBusObjectPath?1() +QtDBus.QDBusObjectPath.__init__?1(self) +QtDBus.QDBusObjectPath?1(QString) +QtDBus.QDBusObjectPath.__init__?1(self, QString) +QtDBus.QDBusObjectPath?1(QDBusObjectPath) +QtDBus.QDBusObjectPath.__init__?1(self, QDBusObjectPath) +QtDBus.QDBusObjectPath.path?4() -> QString +QtDBus.QDBusObjectPath.setPath?4(QString) +QtDBus.QDBusObjectPath.swap?4(QDBusObjectPath) +QtDBus.QDBusSignature?1() +QtDBus.QDBusSignature.__init__?1(self) +QtDBus.QDBusSignature?1(QString) +QtDBus.QDBusSignature.__init__?1(self, QString) +QtDBus.QDBusSignature?1(QDBusSignature) +QtDBus.QDBusSignature.__init__?1(self, QDBusSignature) +QtDBus.QDBusSignature.signature?4() -> QString +QtDBus.QDBusSignature.setSignature?4(QString) +QtDBus.QDBusSignature.swap?4(QDBusSignature) +QtDBus.QDBusVariant?1() +QtDBus.QDBusVariant.__init__?1(self) +QtDBus.QDBusVariant?1(QVariant) +QtDBus.QDBusVariant.__init__?1(self, QVariant) +QtDBus.QDBusVariant?1(QDBusVariant) +QtDBus.QDBusVariant.__init__?1(self, QDBusVariant) +QtDBus.QDBusVariant.variant?4() -> QVariant +QtDBus.QDBusVariant.setVariant?4(QVariant) +QtDBus.QDBusVariant.swap?4(QDBusVariant) +QtDBus.QDBusInterface?1(QString, QString, QString interface='', QDBusConnection connection=QDBusConnection.sessionBus(), QObject parent=None) +QtDBus.QDBusInterface.__init__?1(self, QString, QString, QString interface='', QDBusConnection connection=QDBusConnection.sessionBus(), QObject parent=None) +QtDBus.QDBusMessage.MessageType?10 +QtDBus.QDBusMessage.MessageType.InvalidMessage?10 +QtDBus.QDBusMessage.MessageType.MethodCallMessage?10 +QtDBus.QDBusMessage.MessageType.ReplyMessage?10 +QtDBus.QDBusMessage.MessageType.ErrorMessage?10 +QtDBus.QDBusMessage.MessageType.SignalMessage?10 +QtDBus.QDBusMessage?1() +QtDBus.QDBusMessage.__init__?1(self) +QtDBus.QDBusMessage?1(QDBusMessage) +QtDBus.QDBusMessage.__init__?1(self, QDBusMessage) +QtDBus.QDBusMessage.createSignal?4(QString, QString, QString) -> QDBusMessage +QtDBus.QDBusMessage.createMethodCall?4(QString, QString, QString, QString) -> QDBusMessage +QtDBus.QDBusMessage.createError?4(QString, QString) -> QDBusMessage +QtDBus.QDBusMessage.createError?4(QDBusError) -> QDBusMessage +QtDBus.QDBusMessage.createError?4(QDBusError.ErrorType, QString) -> QDBusMessage +QtDBus.QDBusMessage.createReply?4(unknown-type arguments=[]) -> QDBusMessage +QtDBus.QDBusMessage.createReply?4(QVariant) -> QDBusMessage +QtDBus.QDBusMessage.createErrorReply?4(QString, QString) -> QDBusMessage +QtDBus.QDBusMessage.createErrorReply?4(QDBusError) -> QDBusMessage +QtDBus.QDBusMessage.createErrorReply?4(QDBusError.ErrorType, QString) -> QDBusMessage +QtDBus.QDBusMessage.service?4() -> QString +QtDBus.QDBusMessage.path?4() -> QString +QtDBus.QDBusMessage.interface?4() -> QString +QtDBus.QDBusMessage.member?4() -> QString +QtDBus.QDBusMessage.errorName?4() -> QString +QtDBus.QDBusMessage.errorMessage?4() -> QString +QtDBus.QDBusMessage.type?4() -> QDBusMessage.MessageType +QtDBus.QDBusMessage.signature?4() -> QString +QtDBus.QDBusMessage.isReplyRequired?4() -> bool +QtDBus.QDBusMessage.setDelayedReply?4(bool) +QtDBus.QDBusMessage.isDelayedReply?4() -> bool +QtDBus.QDBusMessage.setAutoStartService?4(bool) +QtDBus.QDBusMessage.autoStartService?4() -> bool +QtDBus.QDBusMessage.setArguments?4(unknown-type) +QtDBus.QDBusMessage.arguments?4() -> unknown-type +QtDBus.QDBusMessage.swap?4(QDBusMessage) +QtDBus.QDBusMessage.createTargetedSignal?4(QString, QString, QString, QString) -> QDBusMessage +QtDBus.QDBusMessage.setInteractiveAuthorizationAllowed?4(bool) +QtDBus.QDBusMessage.isInteractiveAuthorizationAllowed?4() -> bool +QtDBus.QDBusPendingCall?1(QDBusPendingCall) +QtDBus.QDBusPendingCall.__init__?1(self, QDBusPendingCall) +QtDBus.QDBusPendingCall.fromError?4(QDBusError) -> QDBusPendingCall +QtDBus.QDBusPendingCall.fromCompletedCall?4(QDBusMessage) -> QDBusPendingCall +QtDBus.QDBusPendingCall.swap?4(QDBusPendingCall) +QtDBus.QDBusPendingCallWatcher?1(QDBusPendingCall, QObject parent=None) +QtDBus.QDBusPendingCallWatcher.__init__?1(self, QDBusPendingCall, QObject parent=None) +QtDBus.QDBusPendingCallWatcher.isFinished?4() -> bool +QtDBus.QDBusPendingCallWatcher.waitForFinished?4() +QtDBus.QDBusPendingCallWatcher.finished?4(QDBusPendingCallWatcher watcher=None) +QtDBus.QDBusServiceWatcher.WatchModeFlag?10 +QtDBus.QDBusServiceWatcher.WatchModeFlag.WatchForRegistration?10 +QtDBus.QDBusServiceWatcher.WatchModeFlag.WatchForUnregistration?10 +QtDBus.QDBusServiceWatcher.WatchModeFlag.WatchForOwnerChange?10 +QtDBus.QDBusServiceWatcher?1(QObject parent=None) +QtDBus.QDBusServiceWatcher.__init__?1(self, QObject parent=None) +QtDBus.QDBusServiceWatcher?1(QString, QDBusConnection, QDBusServiceWatcher.WatchMode watchMode=QDBusServiceWatcher.WatchForOwnerChange, QObject parent=None) +QtDBus.QDBusServiceWatcher.__init__?1(self, QString, QDBusConnection, QDBusServiceWatcher.WatchMode watchMode=QDBusServiceWatcher.WatchForOwnerChange, QObject parent=None) +QtDBus.QDBusServiceWatcher.watchedServices?4() -> QStringList +QtDBus.QDBusServiceWatcher.setWatchedServices?4(QStringList) +QtDBus.QDBusServiceWatcher.addWatchedService?4(QString) +QtDBus.QDBusServiceWatcher.removeWatchedService?4(QString) -> bool +QtDBus.QDBusServiceWatcher.watchMode?4() -> QDBusServiceWatcher.WatchMode +QtDBus.QDBusServiceWatcher.setWatchMode?4(QDBusServiceWatcher.WatchMode) +QtDBus.QDBusServiceWatcher.connection?4() -> QDBusConnection +QtDBus.QDBusServiceWatcher.setConnection?4(QDBusConnection) +QtDBus.QDBusServiceWatcher.serviceRegistered?4(QString) +QtDBus.QDBusServiceWatcher.serviceUnregistered?4(QString) +QtDBus.QDBusServiceWatcher.serviceOwnerChanged?4(QString, QString, QString) +QtDBus.QDBusServiceWatcher.WatchMode?1() +QtDBus.QDBusServiceWatcher.WatchMode.__init__?1(self) +QtDBus.QDBusServiceWatcher.WatchMode?1(int) +QtDBus.QDBusServiceWatcher.WatchMode.__init__?1(self, int) +QtDBus.QDBusServiceWatcher.WatchMode?1(QDBusServiceWatcher.WatchMode) +QtDBus.QDBusServiceWatcher.WatchMode.__init__?1(self, QDBusServiceWatcher.WatchMode) +QtDBus.QDBusUnixFileDescriptor?1() +QtDBus.QDBusUnixFileDescriptor.__init__?1(self) +QtDBus.QDBusUnixFileDescriptor?1(int) +QtDBus.QDBusUnixFileDescriptor.__init__?1(self, int) +QtDBus.QDBusUnixFileDescriptor?1(QDBusUnixFileDescriptor) +QtDBus.QDBusUnixFileDescriptor.__init__?1(self, QDBusUnixFileDescriptor) +QtDBus.QDBusUnixFileDescriptor.isValid?4() -> bool +QtDBus.QDBusUnixFileDescriptor.fileDescriptor?4() -> int +QtDBus.QDBusUnixFileDescriptor.setFileDescriptor?4(int) +QtDBus.QDBusUnixFileDescriptor.isSupported?4() -> bool +QtDBus.QDBusUnixFileDescriptor.swap?4(QDBusUnixFileDescriptor) +QtDBus.QDBusPendingReply?1() +QtDBus.QDBusPendingReply.__init__?1(self) +QtDBus.QDBusPendingReply?1(QDBusPendingReply) +QtDBus.QDBusPendingReply.__init__?1(self, QDBusPendingReply) +QtDBus.QDBusPendingReply?1(QDBusPendingCall) +QtDBus.QDBusPendingReply.__init__?1(self, QDBusPendingCall) +QtDBus.QDBusPendingReply?1(QDBusMessage) +QtDBus.QDBusPendingReply.__init__?1(self, QDBusMessage) +QtDBus.QDBusPendingReply.argumentAt?4(int) -> QVariant +QtDBus.QDBusPendingReply.error?4() -> QDBusError +QtDBus.QDBusPendingReply.isError?4() -> bool +QtDBus.QDBusPendingReply.isFinished?4() -> bool +QtDBus.QDBusPendingReply.isValid?4() -> bool +QtDBus.QDBusPendingReply.reply?4() -> QDBusMessage +QtDBus.QDBusPendingReply.waitForFinished?4() +QtDBus.QDBusPendingReply.value?4(Any type=None) -> Any +QtDBus.QDBusReply?1(QDBusMessage) +QtDBus.QDBusReply.__init__?1(self, QDBusMessage) +QtDBus.QDBusReply?1(QDBusPendingCall) +QtDBus.QDBusReply.__init__?1(self, QDBusPendingCall) +QtDBus.QDBusReply?1(QDBusError) +QtDBus.QDBusReply.__init__?1(self, QDBusError) +QtDBus.QDBusReply?1(QDBusReply) +QtDBus.QDBusReply.__init__?1(self, QDBusReply) +QtDBus.QDBusReply.error?4() -> QDBusError +QtDBus.QDBusReply.isValid?4() -> bool +QtDBus.QDBusReply.value?4(Any type=None) -> Any +QtDesigner.QDesignerActionEditorInterface?1(QWidget, Qt.WindowFlags flags=0) +QtDesigner.QDesignerActionEditorInterface.__init__?1(self, QWidget, Qt.WindowFlags flags=0) +QtDesigner.QDesignerActionEditorInterface.core?4() -> QDesignerFormEditorInterface +QtDesigner.QDesignerActionEditorInterface.manageAction?4(QAction) +QtDesigner.QDesignerActionEditorInterface.unmanageAction?4(QAction) +QtDesigner.QDesignerActionEditorInterface.setFormWindow?4(QDesignerFormWindowInterface) +QtDesigner.QAbstractFormBuilder?1() +QtDesigner.QAbstractFormBuilder.__init__?1(self) +QtDesigner.QAbstractFormBuilder.load?4(QIODevice, QWidget parent=None) -> QWidget +QtDesigner.QAbstractFormBuilder.save?4(QIODevice, QWidget) +QtDesigner.QAbstractFormBuilder.setWorkingDirectory?4(QDir) +QtDesigner.QAbstractFormBuilder.workingDirectory?4() -> QDir +QtDesigner.QAbstractFormBuilder.errorString?4() -> QString +QtDesigner.QDesignerFormEditorInterface?1(QObject parent=None) +QtDesigner.QDesignerFormEditorInterface.__init__?1(self, QObject parent=None) +QtDesigner.QDesignerFormEditorInterface.extensionManager?4() -> QExtensionManager +QtDesigner.QDesignerFormEditorInterface.topLevel?4() -> QWidget +QtDesigner.QDesignerFormEditorInterface.widgetBox?4() -> QDesignerWidgetBoxInterface +QtDesigner.QDesignerFormEditorInterface.propertyEditor?4() -> QDesignerPropertyEditorInterface +QtDesigner.QDesignerFormEditorInterface.objectInspector?4() -> QDesignerObjectInspectorInterface +QtDesigner.QDesignerFormEditorInterface.formWindowManager?4() -> QDesignerFormWindowManagerInterface +QtDesigner.QDesignerFormEditorInterface.actionEditor?4() -> QDesignerActionEditorInterface +QtDesigner.QDesignerFormEditorInterface.setWidgetBox?4(QDesignerWidgetBoxInterface) +QtDesigner.QDesignerFormEditorInterface.setPropertyEditor?4(QDesignerPropertyEditorInterface) +QtDesigner.QDesignerFormEditorInterface.setObjectInspector?4(QDesignerObjectInspectorInterface) +QtDesigner.QDesignerFormEditorInterface.setActionEditor?4(QDesignerActionEditorInterface) +QtDesigner.QDesignerFormWindowInterface.FeatureFlag?10 +QtDesigner.QDesignerFormWindowInterface.FeatureFlag.EditFeature?10 +QtDesigner.QDesignerFormWindowInterface.FeatureFlag.GridFeature?10 +QtDesigner.QDesignerFormWindowInterface.FeatureFlag.TabOrderFeature?10 +QtDesigner.QDesignerFormWindowInterface.FeatureFlag.DefaultFeature?10 +QtDesigner.QDesignerFormWindowInterface?1(QWidget parent=None, Qt.WindowFlags flags=0) +QtDesigner.QDesignerFormWindowInterface.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=0) +QtDesigner.QDesignerFormWindowInterface.fileName?4() -> QString +QtDesigner.QDesignerFormWindowInterface.absoluteDir?4() -> QDir +QtDesigner.QDesignerFormWindowInterface.contents?4() -> QString +QtDesigner.QDesignerFormWindowInterface.setContents?4(QIODevice, QString errorMessage='') -> bool +QtDesigner.QDesignerFormWindowInterface.features?4() -> QDesignerFormWindowInterface.Feature +QtDesigner.QDesignerFormWindowInterface.hasFeature?4(QDesignerFormWindowInterface.Feature) -> bool +QtDesigner.QDesignerFormWindowInterface.author?4() -> QString +QtDesigner.QDesignerFormWindowInterface.setAuthor?4(QString) +QtDesigner.QDesignerFormWindowInterface.comment?4() -> QString +QtDesigner.QDesignerFormWindowInterface.setComment?4(QString) +QtDesigner.QDesignerFormWindowInterface.layoutDefault?4() -> (int, int) +QtDesigner.QDesignerFormWindowInterface.setLayoutDefault?4(int, int) +QtDesigner.QDesignerFormWindowInterface.layoutFunction?4() -> (QString, QString) +QtDesigner.QDesignerFormWindowInterface.setLayoutFunction?4(QString, QString) +QtDesigner.QDesignerFormWindowInterface.pixmapFunction?4() -> QString +QtDesigner.QDesignerFormWindowInterface.setPixmapFunction?4(QString) +QtDesigner.QDesignerFormWindowInterface.exportMacro?4() -> QString +QtDesigner.QDesignerFormWindowInterface.setExportMacro?4(QString) +QtDesigner.QDesignerFormWindowInterface.includeHints?4() -> QStringList +QtDesigner.QDesignerFormWindowInterface.setIncludeHints?4(QStringList) +QtDesigner.QDesignerFormWindowInterface.core?4() -> QDesignerFormEditorInterface +QtDesigner.QDesignerFormWindowInterface.cursor?4() -> QDesignerFormWindowCursorInterface +QtDesigner.QDesignerFormWindowInterface.grid?4() -> QPoint +QtDesigner.QDesignerFormWindowInterface.mainContainer?4() -> QWidget +QtDesigner.QDesignerFormWindowInterface.setMainContainer?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.isManaged?4(QWidget) -> bool +QtDesigner.QDesignerFormWindowInterface.isDirty?4() -> bool +QtDesigner.QDesignerFormWindowInterface.findFormWindow?4(QWidget) -> QDesignerFormWindowInterface +QtDesigner.QDesignerFormWindowInterface.findFormWindow?4(QObject) -> QDesignerFormWindowInterface +QtDesigner.QDesignerFormWindowInterface.emitSelectionChanged?4() +QtDesigner.QDesignerFormWindowInterface.resourceFiles?4() -> QStringList +QtDesigner.QDesignerFormWindowInterface.addResourceFile?4(QString) +QtDesigner.QDesignerFormWindowInterface.removeResourceFile?4(QString) +QtDesigner.QDesignerFormWindowInterface.manageWidget?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.unmanageWidget?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.setFeatures?4(QDesignerFormWindowInterface.Feature) +QtDesigner.QDesignerFormWindowInterface.setDirty?4(bool) +QtDesigner.QDesignerFormWindowInterface.clearSelection?4(bool update=True) +QtDesigner.QDesignerFormWindowInterface.selectWidget?4(QWidget, bool select=True) +QtDesigner.QDesignerFormWindowInterface.setGrid?4(QPoint) +QtDesigner.QDesignerFormWindowInterface.setFileName?4(QString) +QtDesigner.QDesignerFormWindowInterface.setContents?4(QString) -> bool +QtDesigner.QDesignerFormWindowInterface.mainContainerChanged?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.fileNameChanged?4(QString) +QtDesigner.QDesignerFormWindowInterface.featureChanged?4(QDesignerFormWindowInterface.Feature) +QtDesigner.QDesignerFormWindowInterface.selectionChanged?4() +QtDesigner.QDesignerFormWindowInterface.geometryChanged?4() +QtDesigner.QDesignerFormWindowInterface.resourceFilesChanged?4() +QtDesigner.QDesignerFormWindowInterface.widgetManaged?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.widgetUnmanaged?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.aboutToUnmanageWidget?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.activated?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.changed?4() +QtDesigner.QDesignerFormWindowInterface.widgetRemoved?4(QWidget) +QtDesigner.QDesignerFormWindowInterface.objectRemoved?4(QObject) +QtDesigner.QDesignerFormWindowInterface.checkContents?4() -> QStringList +QtDesigner.QDesignerFormWindowInterface.activeResourceFilePaths?4() -> QStringList +QtDesigner.QDesignerFormWindowInterface.formContainer?4() -> QWidget +QtDesigner.QDesignerFormWindowInterface.activateResourceFilePaths?4(QStringList) -> (int, QString) +QtDesigner.QDesignerFormWindowInterface.Feature?1() +QtDesigner.QDesignerFormWindowInterface.Feature.__init__?1(self) +QtDesigner.QDesignerFormWindowInterface.Feature?1(int) +QtDesigner.QDesignerFormWindowInterface.Feature.__init__?1(self, int) +QtDesigner.QDesignerFormWindowInterface.Feature?1(QDesignerFormWindowInterface.Feature) +QtDesigner.QDesignerFormWindowInterface.Feature.__init__?1(self, QDesignerFormWindowInterface.Feature) +QtDesigner.QDesignerFormWindowCursorInterface.MoveMode?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveMode.MoveAnchor?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveMode.KeepAnchor?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.NoMove?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Start?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.End?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Next?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Prev?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Left?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Right?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Up?10 +QtDesigner.QDesignerFormWindowCursorInterface.MoveOperation.Down?10 +QtDesigner.QDesignerFormWindowCursorInterface?1() +QtDesigner.QDesignerFormWindowCursorInterface.__init__?1(self) +QtDesigner.QDesignerFormWindowCursorInterface?1(QDesignerFormWindowCursorInterface) +QtDesigner.QDesignerFormWindowCursorInterface.__init__?1(self, QDesignerFormWindowCursorInterface) +QtDesigner.QDesignerFormWindowCursorInterface.formWindow?4() -> QDesignerFormWindowInterface +QtDesigner.QDesignerFormWindowCursorInterface.movePosition?4(QDesignerFormWindowCursorInterface.MoveOperation, QDesignerFormWindowCursorInterface.MoveMode mode=QDesignerFormWindowCursorInterface.MoveAnchor) -> bool +QtDesigner.QDesignerFormWindowCursorInterface.position?4() -> int +QtDesigner.QDesignerFormWindowCursorInterface.setPosition?4(int, QDesignerFormWindowCursorInterface.MoveMode mode=QDesignerFormWindowCursorInterface.MoveAnchor) +QtDesigner.QDesignerFormWindowCursorInterface.current?4() -> QWidget +QtDesigner.QDesignerFormWindowCursorInterface.widgetCount?4() -> int +QtDesigner.QDesignerFormWindowCursorInterface.widget?4(int) -> QWidget +QtDesigner.QDesignerFormWindowCursorInterface.hasSelection?4() -> bool +QtDesigner.QDesignerFormWindowCursorInterface.selectedWidgetCount?4() -> int +QtDesigner.QDesignerFormWindowCursorInterface.selectedWidget?4(int) -> QWidget +QtDesigner.QDesignerFormWindowCursorInterface.setProperty?4(QString, QVariant) +QtDesigner.QDesignerFormWindowCursorInterface.setWidgetProperty?4(QWidget, QString, QVariant) +QtDesigner.QDesignerFormWindowCursorInterface.resetWidgetProperty?4(QWidget, QString) +QtDesigner.QDesignerFormWindowCursorInterface.isWidgetSelected?4(QWidget) -> bool +QtDesigner.QDesignerFormWindowManagerInterface.ActionGroup?10 +QtDesigner.QDesignerFormWindowManagerInterface.ActionGroup.StyledPreviewActionGroup?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.CutAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.CopyAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.PasteAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.DeleteAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.SelectAllAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.LowerAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.RaiseAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.UndoAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.RedoAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.HorizontalLayoutAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.VerticalLayoutAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.SplitHorizontalAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.SplitVerticalAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.GridLayoutAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.FormLayoutAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.BreakLayoutAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.AdjustSizeAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.SimplifyLayoutAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.DefaultPreviewAction?10 +QtDesigner.QDesignerFormWindowManagerInterface.Action.FormWindowSettingsDialogAction?10 +QtDesigner.QDesignerFormWindowManagerInterface?1(QObject parent=None) +QtDesigner.QDesignerFormWindowManagerInterface.__init__?1(self, QObject parent=None) +QtDesigner.QDesignerFormWindowManagerInterface.actionFormLayout?4() -> QAction +QtDesigner.QDesignerFormWindowManagerInterface.actionSimplifyLayout?4() -> QAction +QtDesigner.QDesignerFormWindowManagerInterface.activeFormWindow?4() -> QDesignerFormWindowInterface +QtDesigner.QDesignerFormWindowManagerInterface.formWindowCount?4() -> int +QtDesigner.QDesignerFormWindowManagerInterface.formWindow?4(int) -> QDesignerFormWindowInterface +QtDesigner.QDesignerFormWindowManagerInterface.createFormWindow?4(QWidget parent=None, Qt.WindowFlags flags=0) -> QDesignerFormWindowInterface +QtDesigner.QDesignerFormWindowManagerInterface.core?4() -> QDesignerFormEditorInterface +QtDesigner.QDesignerFormWindowManagerInterface.formWindowAdded?4(QDesignerFormWindowInterface) +QtDesigner.QDesignerFormWindowManagerInterface.formWindowRemoved?4(QDesignerFormWindowInterface) +QtDesigner.QDesignerFormWindowManagerInterface.activeFormWindowChanged?4(QDesignerFormWindowInterface) +QtDesigner.QDesignerFormWindowManagerInterface.formWindowSettingsChanged?4(QDesignerFormWindowInterface) +QtDesigner.QDesignerFormWindowManagerInterface.addFormWindow?4(QDesignerFormWindowInterface) +QtDesigner.QDesignerFormWindowManagerInterface.removeFormWindow?4(QDesignerFormWindowInterface) +QtDesigner.QDesignerFormWindowManagerInterface.setActiveFormWindow?4(QDesignerFormWindowInterface) +QtDesigner.QDesignerFormWindowManagerInterface.action?4(QDesignerFormWindowManagerInterface.Action) -> QAction +QtDesigner.QDesignerFormWindowManagerInterface.actionGroup?4(QDesignerFormWindowManagerInterface.ActionGroup) -> QActionGroup +QtDesigner.QDesignerFormWindowManagerInterface.showPreview?4() +QtDesigner.QDesignerFormWindowManagerInterface.closeAllPreviews?4() +QtDesigner.QDesignerFormWindowManagerInterface.showPluginDialog?4() +QtDesigner.QDesignerObjectInspectorInterface?1(QWidget, Qt.WindowFlags flags=0) +QtDesigner.QDesignerObjectInspectorInterface.__init__?1(self, QWidget, Qt.WindowFlags flags=0) +QtDesigner.QDesignerObjectInspectorInterface.core?4() -> QDesignerFormEditorInterface +QtDesigner.QDesignerObjectInspectorInterface.setFormWindow?4(QDesignerFormWindowInterface) +QtDesigner.QDesignerPropertyEditorInterface?1(QWidget, Qt.WindowFlags flags=0) +QtDesigner.QDesignerPropertyEditorInterface.__init__?1(self, QWidget, Qt.WindowFlags flags=0) +QtDesigner.QDesignerPropertyEditorInterface.core?4() -> QDesignerFormEditorInterface +QtDesigner.QDesignerPropertyEditorInterface.isReadOnly?4() -> bool +QtDesigner.QDesignerPropertyEditorInterface.object?4() -> QObject +QtDesigner.QDesignerPropertyEditorInterface.currentPropertyName?4() -> QString +QtDesigner.QDesignerPropertyEditorInterface.propertyChanged?4(QString, QVariant) +QtDesigner.QDesignerPropertyEditorInterface.setObject?4(QObject) +QtDesigner.QDesignerPropertyEditorInterface.setPropertyValue?4(QString, QVariant, bool changed=True) +QtDesigner.QDesignerPropertyEditorInterface.setReadOnly?4(bool) +QtDesigner.QDesignerWidgetBoxInterface?1(QWidget parent=None, Qt.WindowFlags flags=0) +QtDesigner.QDesignerWidgetBoxInterface.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=0) +QtDesigner.QDesignerWidgetBoxInterface.setFileName?4(QString) +QtDesigner.QDesignerWidgetBoxInterface.fileName?4() -> QString +QtDesigner.QDesignerWidgetBoxInterface.load?4() -> bool +QtDesigner.QDesignerWidgetBoxInterface.save?4() -> bool +QtDesigner.QDesignerContainerExtension?1() +QtDesigner.QDesignerContainerExtension.__init__?1(self) +QtDesigner.QDesignerContainerExtension?1(QDesignerContainerExtension) +QtDesigner.QDesignerContainerExtension.__init__?1(self, QDesignerContainerExtension) +QtDesigner.QDesignerContainerExtension.count?4() -> int +QtDesigner.QDesignerContainerExtension.widget?4(int) -> QWidget +QtDesigner.QDesignerContainerExtension.currentIndex?4() -> int +QtDesigner.QDesignerContainerExtension.setCurrentIndex?4(int) +QtDesigner.QDesignerContainerExtension.addWidget?4(QWidget) +QtDesigner.QDesignerContainerExtension.insertWidget?4(int, QWidget) +QtDesigner.QDesignerContainerExtension.remove?4(int) +QtDesigner.QDesignerContainerExtension.canAddWidget?4() -> bool +QtDesigner.QDesignerContainerExtension.canRemove?4(int) -> bool +QtDesigner.QDesignerCustomWidgetInterface?1() +QtDesigner.QDesignerCustomWidgetInterface.__init__?1(self) +QtDesigner.QDesignerCustomWidgetInterface?1(QDesignerCustomWidgetInterface) +QtDesigner.QDesignerCustomWidgetInterface.__init__?1(self, QDesignerCustomWidgetInterface) +QtDesigner.QDesignerCustomWidgetInterface.name?4() -> QString +QtDesigner.QDesignerCustomWidgetInterface.group?4() -> QString +QtDesigner.QDesignerCustomWidgetInterface.toolTip?4() -> QString +QtDesigner.QDesignerCustomWidgetInterface.whatsThis?4() -> QString +QtDesigner.QDesignerCustomWidgetInterface.includeFile?4() -> QString +QtDesigner.QDesignerCustomWidgetInterface.icon?4() -> QIcon +QtDesigner.QDesignerCustomWidgetInterface.isContainer?4() -> bool +QtDesigner.QDesignerCustomWidgetInterface.createWidget?4(QWidget) -> QWidget +QtDesigner.QDesignerCustomWidgetInterface.isInitialized?4() -> bool +QtDesigner.QDesignerCustomWidgetInterface.initialize?4(QDesignerFormEditorInterface) +QtDesigner.QDesignerCustomWidgetInterface.domXml?4() -> QString +QtDesigner.QDesignerCustomWidgetInterface.codeTemplate?4() -> QString +QtDesigner.QDesignerCustomWidgetCollectionInterface?1() +QtDesigner.QDesignerCustomWidgetCollectionInterface.__init__?1(self) +QtDesigner.QDesignerCustomWidgetCollectionInterface?1(QDesignerCustomWidgetCollectionInterface) +QtDesigner.QDesignerCustomWidgetCollectionInterface.__init__?1(self, QDesignerCustomWidgetCollectionInterface) +QtDesigner.QDesignerCustomWidgetCollectionInterface.customWidgets?4() -> unknown-type +QtDesigner.QAbstractExtensionFactory?1() +QtDesigner.QAbstractExtensionFactory.__init__?1(self) +QtDesigner.QAbstractExtensionFactory?1(QAbstractExtensionFactory) +QtDesigner.QAbstractExtensionFactory.__init__?1(self, QAbstractExtensionFactory) +QtDesigner.QAbstractExtensionFactory.extension?4(QObject, QString) -> QObject +QtDesigner.QExtensionFactory?1(QExtensionManager parent=None) +QtDesigner.QExtensionFactory.__init__?1(self, QExtensionManager parent=None) +QtDesigner.QExtensionFactory.extension?4(QObject, QString) -> QObject +QtDesigner.QExtensionFactory.extensionManager?4() -> QExtensionManager +QtDesigner.QExtensionFactory.createExtension?4(QObject, QString, QObject) -> QObject +QtDesigner.QAbstractExtensionManager?1() +QtDesigner.QAbstractExtensionManager.__init__?1(self) +QtDesigner.QAbstractExtensionManager?1(QAbstractExtensionManager) +QtDesigner.QAbstractExtensionManager.__init__?1(self, QAbstractExtensionManager) +QtDesigner.QAbstractExtensionManager.registerExtensions?4(QAbstractExtensionFactory, QString) +QtDesigner.QAbstractExtensionManager.unregisterExtensions?4(QAbstractExtensionFactory, QString) +QtDesigner.QAbstractExtensionManager.extension?4(QObject, QString) -> QObject +QtDesigner.QFormBuilder?1() +QtDesigner.QFormBuilder.__init__?1(self) +QtDesigner.QFormBuilder.pluginPaths?4() -> QStringList +QtDesigner.QFormBuilder.clearPluginPaths?4() +QtDesigner.QFormBuilder.addPluginPath?4(QString) +QtDesigner.QFormBuilder.setPluginPath?4(QStringList) +QtDesigner.QFormBuilder.customWidgets?4() -> unknown-type +QtDesigner.QDesignerMemberSheetExtension?1() +QtDesigner.QDesignerMemberSheetExtension.__init__?1(self) +QtDesigner.QDesignerMemberSheetExtension?1(QDesignerMemberSheetExtension) +QtDesigner.QDesignerMemberSheetExtension.__init__?1(self, QDesignerMemberSheetExtension) +QtDesigner.QDesignerMemberSheetExtension.count?4() -> int +QtDesigner.QDesignerMemberSheetExtension.indexOf?4(QString) -> int +QtDesigner.QDesignerMemberSheetExtension.memberName?4(int) -> QString +QtDesigner.QDesignerMemberSheetExtension.memberGroup?4(int) -> QString +QtDesigner.QDesignerMemberSheetExtension.setMemberGroup?4(int, QString) +QtDesigner.QDesignerMemberSheetExtension.isVisible?4(int) -> bool +QtDesigner.QDesignerMemberSheetExtension.setVisible?4(int, bool) +QtDesigner.QDesignerMemberSheetExtension.isSignal?4(int) -> bool +QtDesigner.QDesignerMemberSheetExtension.isSlot?4(int) -> bool +QtDesigner.QDesignerMemberSheetExtension.inheritedFromWidget?4(int) -> bool +QtDesigner.QDesignerMemberSheetExtension.declaredInClass?4(int) -> QString +QtDesigner.QDesignerMemberSheetExtension.signature?4(int) -> QString +QtDesigner.QDesignerMemberSheetExtension.parameterTypes?4(int) -> unknown-type +QtDesigner.QDesignerMemberSheetExtension.parameterNames?4(int) -> unknown-type +QtDesigner.QDesignerPropertySheetExtension?1() +QtDesigner.QDesignerPropertySheetExtension.__init__?1(self) +QtDesigner.QDesignerPropertySheetExtension?1(QDesignerPropertySheetExtension) +QtDesigner.QDesignerPropertySheetExtension.__init__?1(self, QDesignerPropertySheetExtension) +QtDesigner.QDesignerPropertySheetExtension.count?4() -> int +QtDesigner.QDesignerPropertySheetExtension.indexOf?4(QString) -> int +QtDesigner.QDesignerPropertySheetExtension.propertyName?4(int) -> QString +QtDesigner.QDesignerPropertySheetExtension.propertyGroup?4(int) -> QString +QtDesigner.QDesignerPropertySheetExtension.setPropertyGroup?4(int, QString) +QtDesigner.QDesignerPropertySheetExtension.hasReset?4(int) -> bool +QtDesigner.QDesignerPropertySheetExtension.reset?4(int) -> bool +QtDesigner.QDesignerPropertySheetExtension.isVisible?4(int) -> bool +QtDesigner.QDesignerPropertySheetExtension.setVisible?4(int, bool) +QtDesigner.QDesignerPropertySheetExtension.isAttribute?4(int) -> bool +QtDesigner.QDesignerPropertySheetExtension.setAttribute?4(int, bool) +QtDesigner.QDesignerPropertySheetExtension.property?4(int) -> QVariant +QtDesigner.QDesignerPropertySheetExtension.setProperty?4(int, QVariant) +QtDesigner.QDesignerPropertySheetExtension.isChanged?4(int) -> bool +QtDesigner.QDesignerPropertySheetExtension.setChanged?4(int, bool) +QtDesigner.QDesignerPropertySheetExtension.isEnabled?4(int) -> bool +QtDesigner.QExtensionManager?1(QObject parent=None) +QtDesigner.QExtensionManager.__init__?1(self, QObject parent=None) +QtDesigner.QExtensionManager.registerExtensions?4(QAbstractExtensionFactory, QString iid='') +QtDesigner.QExtensionManager.unregisterExtensions?4(QAbstractExtensionFactory, QString iid='') +QtDesigner.QExtensionManager.extension?4(QObject, QString) -> QObject +QtDesigner.QDesignerTaskMenuExtension?1() +QtDesigner.QDesignerTaskMenuExtension.__init__?1(self) +QtDesigner.QDesignerTaskMenuExtension?1(QDesignerTaskMenuExtension) +QtDesigner.QDesignerTaskMenuExtension.__init__?1(self, QDesignerTaskMenuExtension) +QtDesigner.QDesignerTaskMenuExtension.taskActions?4() -> unknown-type +QtDesigner.QDesignerTaskMenuExtension.preferredEditAction?4() -> QAction +QtDesigner.QPyDesignerCustomWidgetCollectionPlugin?1(QObject parent=None) +QtDesigner.QPyDesignerCustomWidgetCollectionPlugin.__init__?1(self, QObject parent=None) +QtDesigner.QPyDesignerMemberSheetExtension?1(QObject) +QtDesigner.QPyDesignerMemberSheetExtension.__init__?1(self, QObject) +QtDesigner.QPyDesignerTaskMenuExtension?1(QObject) +QtDesigner.QPyDesignerTaskMenuExtension.__init__?1(self, QObject) +QtDesigner.QPyDesignerContainerExtension?1(QObject) +QtDesigner.QPyDesignerContainerExtension.__init__?1(self, QObject) +QtDesigner.QPyDesignerCustomWidgetPlugin?1(QObject parent=None) +QtDesigner.QPyDesignerCustomWidgetPlugin.__init__?1(self, QObject parent=None) +QtDesigner.QPyDesignerPropertySheetExtension?1(QObject) +QtDesigner.QPyDesignerPropertySheetExtension.__init__?1(self, QObject) +QtHelp.QCompressedHelpInfo?1() +QtHelp.QCompressedHelpInfo.__init__?1(self) +QtHelp.QCompressedHelpInfo?1(QCompressedHelpInfo) +QtHelp.QCompressedHelpInfo.__init__?1(self, QCompressedHelpInfo) +QtHelp.QCompressedHelpInfo.swap?4(QCompressedHelpInfo) +QtHelp.QCompressedHelpInfo.namespaceName?4() -> QString +QtHelp.QCompressedHelpInfo.component?4() -> QString +QtHelp.QCompressedHelpInfo.version?4() -> QVersionNumber +QtHelp.QCompressedHelpInfo.fromCompressedHelpFile?4(QString) -> QCompressedHelpInfo +QtHelp.QCompressedHelpInfo.isNull?4() -> bool +QtHelp.QHelpContentItem.child?4(int) -> QHelpContentItem +QtHelp.QHelpContentItem.childCount?4() -> int +QtHelp.QHelpContentItem.title?4() -> QString +QtHelp.QHelpContentItem.url?4() -> QUrl +QtHelp.QHelpContentItem.row?4() -> int +QtHelp.QHelpContentItem.parent?4() -> QHelpContentItem +QtHelp.QHelpContentItem.childPosition?4(QHelpContentItem) -> int +QtHelp.QHelpContentModel.createContents?4(QString) +QtHelp.QHelpContentModel.contentItemAt?4(QModelIndex) -> QHelpContentItem +QtHelp.QHelpContentModel.data?4(QModelIndex, int) -> QVariant +QtHelp.QHelpContentModel.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtHelp.QHelpContentModel.parent?4(QModelIndex) -> QModelIndex +QtHelp.QHelpContentModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtHelp.QHelpContentModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtHelp.QHelpContentModel.isCreatingContents?4() -> bool +QtHelp.QHelpContentModel.contentsCreationStarted?4() +QtHelp.QHelpContentModel.contentsCreated?4() +QtHelp.QHelpContentWidget.indexOf?4(QUrl) -> QModelIndex +QtHelp.QHelpContentWidget.linkActivated?4(QUrl) +QtHelp.QHelpEngineCore?1(QString, QObject parent=None) +QtHelp.QHelpEngineCore.__init__?1(self, QString, QObject parent=None) +QtHelp.QHelpEngineCore.setupData?4() -> bool +QtHelp.QHelpEngineCore.collectionFile?4() -> QString +QtHelp.QHelpEngineCore.setCollectionFile?4(QString) +QtHelp.QHelpEngineCore.copyCollectionFile?4(QString) -> bool +QtHelp.QHelpEngineCore.namespaceName?4(QString) -> QString +QtHelp.QHelpEngineCore.registerDocumentation?4(QString) -> bool +QtHelp.QHelpEngineCore.unregisterDocumentation?4(QString) -> bool +QtHelp.QHelpEngineCore.documentationFileName?4(QString) -> QString +QtHelp.QHelpEngineCore.customFilters?4() -> QStringList +QtHelp.QHelpEngineCore.removeCustomFilter?4(QString) -> bool +QtHelp.QHelpEngineCore.addCustomFilter?4(QString, QStringList) -> bool +QtHelp.QHelpEngineCore.filterAttributes?4() -> QStringList +QtHelp.QHelpEngineCore.filterAttributes?4(QString) -> QStringList +QtHelp.QHelpEngineCore.currentFilter?4() -> QString +QtHelp.QHelpEngineCore.setCurrentFilter?4(QString) +QtHelp.QHelpEngineCore.registeredDocumentations?4() -> QStringList +QtHelp.QHelpEngineCore.filterAttributeSets?4(QString) -> unknown-type +QtHelp.QHelpEngineCore.files?4(QString, QStringList, QString extensionFilter='') -> unknown-type +QtHelp.QHelpEngineCore.findFile?4(QUrl) -> QUrl +QtHelp.QHelpEngineCore.fileData?4(QUrl) -> QByteArray +QtHelp.QHelpEngineCore.linksForIdentifier?4(QString) -> unknown-type +QtHelp.QHelpEngineCore.linksForKeyword?4(QString) -> unknown-type +QtHelp.QHelpEngineCore.removeCustomValue?4(QString) -> bool +QtHelp.QHelpEngineCore.customValue?4(QString, QVariant defaultValue=None) -> QVariant +QtHelp.QHelpEngineCore.setCustomValue?4(QString, QVariant) -> bool +QtHelp.QHelpEngineCore.metaData?4(QString, QString) -> QVariant +QtHelp.QHelpEngineCore.error?4() -> QString +QtHelp.QHelpEngineCore.autoSaveFilter?4() -> bool +QtHelp.QHelpEngineCore.setAutoSaveFilter?4(bool) +QtHelp.QHelpEngineCore.setupStarted?4() +QtHelp.QHelpEngineCore.setupFinished?4() +QtHelp.QHelpEngineCore.currentFilterChanged?4(QString) +QtHelp.QHelpEngineCore.warning?4(QString) +QtHelp.QHelpEngineCore.readersAboutToBeInvalidated?4() +QtHelp.QHelpEngineCore.filterEngine?4() -> QHelpFilterEngine +QtHelp.QHelpEngineCore.files?4(QString, QString, QString extensionFilter='') -> unknown-type +QtHelp.QHelpEngineCore.setUsesFilterEngine?4(bool) +QtHelp.QHelpEngineCore.usesFilterEngine?4() -> bool +QtHelp.QHelpEngineCore.documentsForIdentifier?4(QString) -> unknown-type +QtHelp.QHelpEngineCore.documentsForIdentifier?4(QString, QString) -> unknown-type +QtHelp.QHelpEngineCore.documentsForKeyword?4(QString) -> unknown-type +QtHelp.QHelpEngineCore.documentsForKeyword?4(QString, QString) -> unknown-type +QtHelp.QHelpEngine?1(QString, QObject parent=None) +QtHelp.QHelpEngine.__init__?1(self, QString, QObject parent=None) +QtHelp.QHelpEngine.contentModel?4() -> QHelpContentModel +QtHelp.QHelpEngine.indexModel?4() -> QHelpIndexModel +QtHelp.QHelpEngine.contentWidget?4() -> QHelpContentWidget +QtHelp.QHelpEngine.indexWidget?4() -> QHelpIndexWidget +QtHelp.QHelpEngine.searchEngine?4() -> QHelpSearchEngine +QtHelp.QHelpFilterData?1() +QtHelp.QHelpFilterData.__init__?1(self) +QtHelp.QHelpFilterData?1(QHelpFilterData) +QtHelp.QHelpFilterData.__init__?1(self, QHelpFilterData) +QtHelp.QHelpFilterData.swap?4(QHelpFilterData) +QtHelp.QHelpFilterData.setComponents?4(QStringList) +QtHelp.QHelpFilterData.setVersions?4(unknown-type) +QtHelp.QHelpFilterData.components?4() -> QStringList +QtHelp.QHelpFilterData.versions?4() -> unknown-type +QtHelp.QHelpFilterEngine.namespaceToComponent?4() -> unknown-type +QtHelp.QHelpFilterEngine.namespaceToVersion?4() -> unknown-type +QtHelp.QHelpFilterEngine.filters?4() -> QStringList +QtHelp.QHelpFilterEngine.activeFilter?4() -> QString +QtHelp.QHelpFilterEngine.setActiveFilter?4(QString) -> bool +QtHelp.QHelpFilterEngine.availableComponents?4() -> QStringList +QtHelp.QHelpFilterEngine.filterData?4(QString) -> QHelpFilterData +QtHelp.QHelpFilterEngine.setFilterData?4(QString, QHelpFilterData) -> bool +QtHelp.QHelpFilterEngine.removeFilter?4(QString) -> bool +QtHelp.QHelpFilterEngine.namespacesForFilter?4(QString) -> QStringList +QtHelp.QHelpFilterEngine.filterActivated?4(QString) +QtHelp.QHelpFilterEngine.availableVersions?4() -> unknown-type +QtHelp.QHelpFilterEngine.indices?4() -> QStringList +QtHelp.QHelpFilterEngine.indices?4(QString) -> QStringList +QtHelp.QHelpFilterSettingsWidget?1(QWidget parent=None) +QtHelp.QHelpFilterSettingsWidget.__init__?1(self, QWidget parent=None) +QtHelp.QHelpFilterSettingsWidget.setAvailableComponents?4(QStringList) +QtHelp.QHelpFilterSettingsWidget.setAvailableVersions?4(unknown-type) +QtHelp.QHelpFilterSettingsWidget.readSettings?4(QHelpFilterEngine) +QtHelp.QHelpFilterSettingsWidget.applySettings?4(QHelpFilterEngine) -> bool +QtHelp.QHelpIndexModel.helpEngine?4() -> QHelpEngineCore +QtHelp.QHelpIndexModel.createIndex?4(QString) +QtHelp.QHelpIndexModel.filter?4(QString, QString wildcard='') -> QModelIndex +QtHelp.QHelpIndexModel.linksForKeyword?4(QString) -> unknown-type +QtHelp.QHelpIndexModel.isCreatingIndex?4() -> bool +QtHelp.QHelpIndexModel.indexCreationStarted?4() +QtHelp.QHelpIndexModel.indexCreated?4() +QtHelp.QHelpIndexWidget.linkActivated?4(QUrl, QString) +QtHelp.QHelpIndexWidget.linksActivated?4(unknown-type, QString) +QtHelp.QHelpIndexWidget.filterIndices?4(QString, QString wildcard='') +QtHelp.QHelpIndexWidget.activateCurrentItem?4() +QtHelp.QHelpIndexWidget.documentActivated?4(QHelpLink, QString) +QtHelp.QHelpIndexWidget.documentsActivated?4(unknown-type, QString) +QtHelp.QHelpLink.title?7 +QtHelp.QHelpLink.url?7 +QtHelp.QHelpLink?1() +QtHelp.QHelpLink.__init__?1(self) +QtHelp.QHelpLink?1(QHelpLink) +QtHelp.QHelpLink.__init__?1(self, QHelpLink) +QtHelp.QHelpSearchQuery.FieldName?10 +QtHelp.QHelpSearchQuery.FieldName.DEFAULT?10 +QtHelp.QHelpSearchQuery.FieldName.FUZZY?10 +QtHelp.QHelpSearchQuery.FieldName.WITHOUT?10 +QtHelp.QHelpSearchQuery.FieldName.PHRASE?10 +QtHelp.QHelpSearchQuery.FieldName.ALL?10 +QtHelp.QHelpSearchQuery.FieldName.ATLEAST?10 +QtHelp.QHelpSearchQuery?1() +QtHelp.QHelpSearchQuery.__init__?1(self) +QtHelp.QHelpSearchQuery?1(QHelpSearchQuery.FieldName, QStringList) +QtHelp.QHelpSearchQuery.__init__?1(self, QHelpSearchQuery.FieldName, QStringList) +QtHelp.QHelpSearchQuery?1(QHelpSearchQuery) +QtHelp.QHelpSearchQuery.__init__?1(self, QHelpSearchQuery) +QtHelp.QHelpSearchEngine?1(QHelpEngineCore, QObject parent=None) +QtHelp.QHelpSearchEngine.__init__?1(self, QHelpEngineCore, QObject parent=None) +QtHelp.QHelpSearchEngine.query?4() -> unknown-type +QtHelp.QHelpSearchEngine.queryWidget?4() -> QHelpSearchQueryWidget +QtHelp.QHelpSearchEngine.resultWidget?4() -> QHelpSearchResultWidget +QtHelp.QHelpSearchEngine.hitCount?4() -> int +QtHelp.QHelpSearchEngine.hits?4(int, int) -> unknown-type +QtHelp.QHelpSearchEngine.reindexDocumentation?4() +QtHelp.QHelpSearchEngine.cancelIndexing?4() +QtHelp.QHelpSearchEngine.search?4(unknown-type) +QtHelp.QHelpSearchEngine.cancelSearching?4() +QtHelp.QHelpSearchEngine.indexingStarted?4() +QtHelp.QHelpSearchEngine.indexingFinished?4() +QtHelp.QHelpSearchEngine.searchingStarted?4() +QtHelp.QHelpSearchEngine.searchingFinished?4(int) +QtHelp.QHelpSearchEngine.searchResultCount?4() -> int +QtHelp.QHelpSearchEngine.searchResults?4(int, int) -> unknown-type +QtHelp.QHelpSearchEngine.searchInput?4() -> QString +QtHelp.QHelpSearchEngine.search?4(QString) +QtHelp.QHelpSearchResult?1() +QtHelp.QHelpSearchResult.__init__?1(self) +QtHelp.QHelpSearchResult?1(QHelpSearchResult) +QtHelp.QHelpSearchResult.__init__?1(self, QHelpSearchResult) +QtHelp.QHelpSearchResult?1(QUrl, QString, QString) +QtHelp.QHelpSearchResult.__init__?1(self, QUrl, QString, QString) +QtHelp.QHelpSearchResult.title?4() -> QString +QtHelp.QHelpSearchResult.url?4() -> QUrl +QtHelp.QHelpSearchResult.snippet?4() -> QString +QtHelp.QHelpSearchQueryWidget?1(QWidget parent=None) +QtHelp.QHelpSearchQueryWidget.__init__?1(self, QWidget parent=None) +QtHelp.QHelpSearchQueryWidget.query?4() -> unknown-type +QtHelp.QHelpSearchQueryWidget.setQuery?4(unknown-type) +QtHelp.QHelpSearchQueryWidget.expandExtendedSearch?4() +QtHelp.QHelpSearchQueryWidget.collapseExtendedSearch?4() +QtHelp.QHelpSearchQueryWidget.search?4() +QtHelp.QHelpSearchQueryWidget.isCompactMode?4() -> bool +QtHelp.QHelpSearchQueryWidget.setCompactMode?4(bool) +QtHelp.QHelpSearchQueryWidget.searchInput?4() -> QString +QtHelp.QHelpSearchQueryWidget.setSearchInput?4(QString) +QtHelp.QHelpSearchResultWidget.linkAt?4(QPoint) -> QUrl +QtHelp.QHelpSearchResultWidget.requestShowLink?4(QUrl) +QtMultimedia.QAbstractVideoBuffer.MapMode?10 +QtMultimedia.QAbstractVideoBuffer.MapMode.NotMapped?10 +QtMultimedia.QAbstractVideoBuffer.MapMode.ReadOnly?10 +QtMultimedia.QAbstractVideoBuffer.MapMode.WriteOnly?10 +QtMultimedia.QAbstractVideoBuffer.MapMode.ReadWrite?10 +QtMultimedia.QAbstractVideoBuffer.HandleType?10 +QtMultimedia.QAbstractVideoBuffer.HandleType.NoHandle?10 +QtMultimedia.QAbstractVideoBuffer.HandleType.GLTextureHandle?10 +QtMultimedia.QAbstractVideoBuffer.HandleType.XvShmImageHandle?10 +QtMultimedia.QAbstractVideoBuffer.HandleType.CoreImageHandle?10 +QtMultimedia.QAbstractVideoBuffer.HandleType.QPixmapHandle?10 +QtMultimedia.QAbstractVideoBuffer.HandleType.EGLImageHandle?10 +QtMultimedia.QAbstractVideoBuffer.HandleType.UserHandle?10 +QtMultimedia.QAbstractVideoBuffer?1(QAbstractVideoBuffer.HandleType) +QtMultimedia.QAbstractVideoBuffer.__init__?1(self, QAbstractVideoBuffer.HandleType) +QtMultimedia.QAbstractVideoBuffer.handleType?4() -> QAbstractVideoBuffer.HandleType +QtMultimedia.QAbstractVideoBuffer.mapMode?4() -> QAbstractVideoBuffer.MapMode +QtMultimedia.QAbstractVideoBuffer.map?4(QAbstractVideoBuffer.MapMode) -> (Any, int, int) +QtMultimedia.QAbstractVideoBuffer.unmap?4() +QtMultimedia.QAbstractVideoBuffer.handle?4() -> QVariant +QtMultimedia.QAbstractVideoBuffer.release?4() +QtMultimedia.QVideoFilterRunnable.RunFlag?10 +QtMultimedia.QVideoFilterRunnable.RunFlag.LastInChain?10 +QtMultimedia.QVideoFilterRunnable?1() +QtMultimedia.QVideoFilterRunnable.__init__?1(self) +QtMultimedia.QVideoFilterRunnable?1(QVideoFilterRunnable) +QtMultimedia.QVideoFilterRunnable.__init__?1(self, QVideoFilterRunnable) +QtMultimedia.QVideoFilterRunnable.run?4(QVideoFrame, QVideoSurfaceFormat, QVideoFilterRunnable.RunFlags) -> QVideoFrame +QtMultimedia.QVideoFilterRunnable.RunFlags?1() +QtMultimedia.QVideoFilterRunnable.RunFlags.__init__?1(self) +QtMultimedia.QVideoFilterRunnable.RunFlags?1(int) +QtMultimedia.QVideoFilterRunnable.RunFlags.__init__?1(self, int) +QtMultimedia.QVideoFilterRunnable.RunFlags?1(QVideoFilterRunnable.RunFlags) +QtMultimedia.QVideoFilterRunnable.RunFlags.__init__?1(self, QVideoFilterRunnable.RunFlags) +QtMultimedia.QAbstractVideoFilter?1(QObject parent=None) +QtMultimedia.QAbstractVideoFilter.__init__?1(self, QObject parent=None) +QtMultimedia.QAbstractVideoFilter.isActive?4() -> bool +QtMultimedia.QAbstractVideoFilter.createFilterRunnable?4() -> QVideoFilterRunnable +QtMultimedia.QAbstractVideoFilter.activeChanged?4() +QtMultimedia.QAbstractVideoSurface.Error?10 +QtMultimedia.QAbstractVideoSurface.Error.NoError?10 +QtMultimedia.QAbstractVideoSurface.Error.UnsupportedFormatError?10 +QtMultimedia.QAbstractVideoSurface.Error.IncorrectFormatError?10 +QtMultimedia.QAbstractVideoSurface.Error.StoppedError?10 +QtMultimedia.QAbstractVideoSurface.Error.ResourceError?10 +QtMultimedia.QAbstractVideoSurface?1(QObject parent=None) +QtMultimedia.QAbstractVideoSurface.__init__?1(self, QObject parent=None) +QtMultimedia.QAbstractVideoSurface.supportedPixelFormats?4(QAbstractVideoBuffer.HandleType type=QAbstractVideoBuffer.NoHandle) -> unknown-type +QtMultimedia.QAbstractVideoSurface.isFormatSupported?4(QVideoSurfaceFormat) -> bool +QtMultimedia.QAbstractVideoSurface.nearestFormat?4(QVideoSurfaceFormat) -> QVideoSurfaceFormat +QtMultimedia.QAbstractVideoSurface.surfaceFormat?4() -> QVideoSurfaceFormat +QtMultimedia.QAbstractVideoSurface.start?4(QVideoSurfaceFormat) -> bool +QtMultimedia.QAbstractVideoSurface.stop?4() +QtMultimedia.QAbstractVideoSurface.isActive?4() -> bool +QtMultimedia.QAbstractVideoSurface.present?4(QVideoFrame) -> bool +QtMultimedia.QAbstractVideoSurface.error?4() -> QAbstractVideoSurface.Error +QtMultimedia.QAbstractVideoSurface.activeChanged?4(bool) +QtMultimedia.QAbstractVideoSurface.surfaceFormatChanged?4(QVideoSurfaceFormat) +QtMultimedia.QAbstractVideoSurface.supportedFormatsChanged?4() +QtMultimedia.QAbstractVideoSurface.setError?4(QAbstractVideoSurface.Error) +QtMultimedia.QAbstractVideoSurface.nativeResolution?4() -> QSize +QtMultimedia.QAbstractVideoSurface.setNativeResolution?4(QSize) +QtMultimedia.QAbstractVideoSurface.nativeResolutionChanged?4(QSize) +QtMultimedia.QAudio.VolumeScale?10 +QtMultimedia.QAudio.VolumeScale.LinearVolumeScale?10 +QtMultimedia.QAudio.VolumeScale.CubicVolumeScale?10 +QtMultimedia.QAudio.VolumeScale.LogarithmicVolumeScale?10 +QtMultimedia.QAudio.VolumeScale.DecibelVolumeScale?10 +QtMultimedia.QAudio.Role?10 +QtMultimedia.QAudio.Role.UnknownRole?10 +QtMultimedia.QAudio.Role.MusicRole?10 +QtMultimedia.QAudio.Role.VideoRole?10 +QtMultimedia.QAudio.Role.VoiceCommunicationRole?10 +QtMultimedia.QAudio.Role.AlarmRole?10 +QtMultimedia.QAudio.Role.NotificationRole?10 +QtMultimedia.QAudio.Role.RingtoneRole?10 +QtMultimedia.QAudio.Role.AccessibilityRole?10 +QtMultimedia.QAudio.Role.SonificationRole?10 +QtMultimedia.QAudio.Role.GameRole?10 +QtMultimedia.QAudio.Role.CustomRole?10 +QtMultimedia.QAudio.Mode?10 +QtMultimedia.QAudio.Mode.AudioInput?10 +QtMultimedia.QAudio.Mode.AudioOutput?10 +QtMultimedia.QAudio.State?10 +QtMultimedia.QAudio.State.ActiveState?10 +QtMultimedia.QAudio.State.SuspendedState?10 +QtMultimedia.QAudio.State.StoppedState?10 +QtMultimedia.QAudio.State.IdleState?10 +QtMultimedia.QAudio.State.InterruptedState?10 +QtMultimedia.QAudio.Error?10 +QtMultimedia.QAudio.Error.NoError?10 +QtMultimedia.QAudio.Error.OpenError?10 +QtMultimedia.QAudio.Error.IOError?10 +QtMultimedia.QAudio.Error.UnderrunError?10 +QtMultimedia.QAudio.Error.FatalError?10 +QtMultimedia.QAudio.convertVolume?4(float, QAudio.VolumeScale, QAudio.VolumeScale) -> float +QtMultimedia.QAudioBuffer?1() +QtMultimedia.QAudioBuffer.__init__?1(self) +QtMultimedia.QAudioBuffer?1(QByteArray, QAudioFormat, int startTime=-1) +QtMultimedia.QAudioBuffer.__init__?1(self, QByteArray, QAudioFormat, int startTime=-1) +QtMultimedia.QAudioBuffer?1(int, QAudioFormat, int startTime=-1) +QtMultimedia.QAudioBuffer.__init__?1(self, int, QAudioFormat, int startTime=-1) +QtMultimedia.QAudioBuffer?1(QAudioBuffer) +QtMultimedia.QAudioBuffer.__init__?1(self, QAudioBuffer) +QtMultimedia.QAudioBuffer.isValid?4() -> bool +QtMultimedia.QAudioBuffer.format?4() -> QAudioFormat +QtMultimedia.QAudioBuffer.frameCount?4() -> int +QtMultimedia.QAudioBuffer.sampleCount?4() -> int +QtMultimedia.QAudioBuffer.byteCount?4() -> int +QtMultimedia.QAudioBuffer.duration?4() -> int +QtMultimedia.QAudioBuffer.startTime?4() -> int +QtMultimedia.QAudioBuffer.constData?4() -> PyQt5.sip.voidptr +QtMultimedia.QAudioBuffer.data?4() -> PyQt5.sip.voidptr +QtMultimedia.QMediaObject?1(QObject, QMediaService) +QtMultimedia.QMediaObject.__init__?1(self, QObject, QMediaService) +QtMultimedia.QMediaObject.isAvailable?4() -> bool +QtMultimedia.QMediaObject.availability?4() -> QMultimedia.AvailabilityStatus +QtMultimedia.QMediaObject.service?4() -> QMediaService +QtMultimedia.QMediaObject.notifyInterval?4() -> int +QtMultimedia.QMediaObject.setNotifyInterval?4(int) +QtMultimedia.QMediaObject.bind?4(QObject) -> bool +QtMultimedia.QMediaObject.unbind?4(QObject) +QtMultimedia.QMediaObject.isMetaDataAvailable?4() -> bool +QtMultimedia.QMediaObject.metaData?4(QString) -> QVariant +QtMultimedia.QMediaObject.availableMetaData?4() -> QStringList +QtMultimedia.QMediaObject.notifyIntervalChanged?4(int) +QtMultimedia.QMediaObject.metaDataAvailableChanged?4(bool) +QtMultimedia.QMediaObject.metaDataChanged?4() +QtMultimedia.QMediaObject.metaDataChanged?4(QString, QVariant) +QtMultimedia.QMediaObject.availabilityChanged?4(QMultimedia.AvailabilityStatus) +QtMultimedia.QMediaObject.availabilityChanged?4(bool) +QtMultimedia.QMediaObject.addPropertyWatch?4(QByteArray) +QtMultimedia.QMediaObject.removePropertyWatch?4(QByteArray) +QtMultimedia.QAudioDecoder.Error?10 +QtMultimedia.QAudioDecoder.Error.NoError?10 +QtMultimedia.QAudioDecoder.Error.ResourceError?10 +QtMultimedia.QAudioDecoder.Error.FormatError?10 +QtMultimedia.QAudioDecoder.Error.AccessDeniedError?10 +QtMultimedia.QAudioDecoder.Error.ServiceMissingError?10 +QtMultimedia.QAudioDecoder.State?10 +QtMultimedia.QAudioDecoder.State.StoppedState?10 +QtMultimedia.QAudioDecoder.State.DecodingState?10 +QtMultimedia.QAudioDecoder?1(QObject parent=None) +QtMultimedia.QAudioDecoder.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioDecoder.hasSupport?4(QString, QStringList codecs=[]) -> QMultimedia.SupportEstimate +QtMultimedia.QAudioDecoder.state?4() -> QAudioDecoder.State +QtMultimedia.QAudioDecoder.sourceFilename?4() -> QString +QtMultimedia.QAudioDecoder.setSourceFilename?4(QString) +QtMultimedia.QAudioDecoder.sourceDevice?4() -> QIODevice +QtMultimedia.QAudioDecoder.setSourceDevice?4(QIODevice) +QtMultimedia.QAudioDecoder.audioFormat?4() -> QAudioFormat +QtMultimedia.QAudioDecoder.setAudioFormat?4(QAudioFormat) +QtMultimedia.QAudioDecoder.error?4() -> QAudioDecoder.Error +QtMultimedia.QAudioDecoder.errorString?4() -> QString +QtMultimedia.QAudioDecoder.read?4() -> QAudioBuffer +QtMultimedia.QAudioDecoder.bufferAvailable?4() -> bool +QtMultimedia.QAudioDecoder.position?4() -> int +QtMultimedia.QAudioDecoder.duration?4() -> int +QtMultimedia.QAudioDecoder.start?4() +QtMultimedia.QAudioDecoder.stop?4() +QtMultimedia.QAudioDecoder.bufferAvailableChanged?4(bool) +QtMultimedia.QAudioDecoder.bufferReady?4() +QtMultimedia.QAudioDecoder.finished?4() +QtMultimedia.QAudioDecoder.stateChanged?4(QAudioDecoder.State) +QtMultimedia.QAudioDecoder.formatChanged?4(QAudioFormat) +QtMultimedia.QAudioDecoder.error?4(QAudioDecoder.Error) +QtMultimedia.QAudioDecoder.sourceChanged?4() +QtMultimedia.QAudioDecoder.positionChanged?4(int) +QtMultimedia.QAudioDecoder.durationChanged?4(int) +QtMultimedia.QAudioDecoder.bind?4(QObject) -> bool +QtMultimedia.QAudioDecoder.unbind?4(QObject) +QtMultimedia.QMediaControl?1(QObject parent=None) +QtMultimedia.QMediaControl.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioDecoderControl?1(QObject parent=None) +QtMultimedia.QAudioDecoderControl.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioDecoderControl.state?4() -> QAudioDecoder.State +QtMultimedia.QAudioDecoderControl.sourceFilename?4() -> QString +QtMultimedia.QAudioDecoderControl.setSourceFilename?4(QString) +QtMultimedia.QAudioDecoderControl.sourceDevice?4() -> QIODevice +QtMultimedia.QAudioDecoderControl.setSourceDevice?4(QIODevice) +QtMultimedia.QAudioDecoderControl.start?4() +QtMultimedia.QAudioDecoderControl.stop?4() +QtMultimedia.QAudioDecoderControl.audioFormat?4() -> QAudioFormat +QtMultimedia.QAudioDecoderControl.setAudioFormat?4(QAudioFormat) +QtMultimedia.QAudioDecoderControl.read?4() -> QAudioBuffer +QtMultimedia.QAudioDecoderControl.bufferAvailable?4() -> bool +QtMultimedia.QAudioDecoderControl.position?4() -> int +QtMultimedia.QAudioDecoderControl.duration?4() -> int +QtMultimedia.QAudioDecoderControl.stateChanged?4(QAudioDecoder.State) +QtMultimedia.QAudioDecoderControl.formatChanged?4(QAudioFormat) +QtMultimedia.QAudioDecoderControl.sourceChanged?4() +QtMultimedia.QAudioDecoderControl.error?4(int, QString) +QtMultimedia.QAudioDecoderControl.bufferReady?4() +QtMultimedia.QAudioDecoderControl.bufferAvailableChanged?4(bool) +QtMultimedia.QAudioDecoderControl.finished?4() +QtMultimedia.QAudioDecoderControl.positionChanged?4(int) +QtMultimedia.QAudioDecoderControl.durationChanged?4(int) +QtMultimedia.QAudioDeviceInfo?1() +QtMultimedia.QAudioDeviceInfo.__init__?1(self) +QtMultimedia.QAudioDeviceInfo?1(QAudioDeviceInfo) +QtMultimedia.QAudioDeviceInfo.__init__?1(self, QAudioDeviceInfo) +QtMultimedia.QAudioDeviceInfo.isNull?4() -> bool +QtMultimedia.QAudioDeviceInfo.deviceName?4() -> QString +QtMultimedia.QAudioDeviceInfo.isFormatSupported?4(QAudioFormat) -> bool +QtMultimedia.QAudioDeviceInfo.preferredFormat?4() -> QAudioFormat +QtMultimedia.QAudioDeviceInfo.nearestFormat?4(QAudioFormat) -> QAudioFormat +QtMultimedia.QAudioDeviceInfo.supportedCodecs?4() -> QStringList +QtMultimedia.QAudioDeviceInfo.supportedSampleSizes?4() -> unknown-type +QtMultimedia.QAudioDeviceInfo.supportedByteOrders?4() -> unknown-type +QtMultimedia.QAudioDeviceInfo.supportedSampleTypes?4() -> unknown-type +QtMultimedia.QAudioDeviceInfo.defaultInputDevice?4() -> QAudioDeviceInfo +QtMultimedia.QAudioDeviceInfo.defaultOutputDevice?4() -> QAudioDeviceInfo +QtMultimedia.QAudioDeviceInfo.availableDevices?4(QAudio.Mode) -> unknown-type +QtMultimedia.QAudioDeviceInfo.supportedSampleRates?4() -> unknown-type +QtMultimedia.QAudioDeviceInfo.supportedChannelCounts?4() -> unknown-type +QtMultimedia.QAudioDeviceInfo.realm?4() -> QString +QtMultimedia.QAudioEncoderSettingsControl?1(QObject parent=None) +QtMultimedia.QAudioEncoderSettingsControl.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioEncoderSettingsControl.supportedAudioCodecs?4() -> QStringList +QtMultimedia.QAudioEncoderSettingsControl.codecDescription?4(QString) -> QString +QtMultimedia.QAudioEncoderSettingsControl.supportedSampleRates?4(QAudioEncoderSettings) -> (unknown-type, bool) +QtMultimedia.QAudioEncoderSettingsControl.audioSettings?4() -> QAudioEncoderSettings +QtMultimedia.QAudioEncoderSettingsControl.setAudioSettings?4(QAudioEncoderSettings) +QtMultimedia.QAudioFormat.Endian?10 +QtMultimedia.QAudioFormat.Endian.BigEndian?10 +QtMultimedia.QAudioFormat.Endian.LittleEndian?10 +QtMultimedia.QAudioFormat.SampleType?10 +QtMultimedia.QAudioFormat.SampleType.Unknown?10 +QtMultimedia.QAudioFormat.SampleType.SignedInt?10 +QtMultimedia.QAudioFormat.SampleType.UnSignedInt?10 +QtMultimedia.QAudioFormat.SampleType.Float?10 +QtMultimedia.QAudioFormat?1() +QtMultimedia.QAudioFormat.__init__?1(self) +QtMultimedia.QAudioFormat?1(QAudioFormat) +QtMultimedia.QAudioFormat.__init__?1(self, QAudioFormat) +QtMultimedia.QAudioFormat.isValid?4() -> bool +QtMultimedia.QAudioFormat.setSampleSize?4(int) +QtMultimedia.QAudioFormat.sampleSize?4() -> int +QtMultimedia.QAudioFormat.setCodec?4(QString) +QtMultimedia.QAudioFormat.codec?4() -> QString +QtMultimedia.QAudioFormat.setByteOrder?4(QAudioFormat.Endian) +QtMultimedia.QAudioFormat.byteOrder?4() -> QAudioFormat.Endian +QtMultimedia.QAudioFormat.setSampleType?4(QAudioFormat.SampleType) +QtMultimedia.QAudioFormat.sampleType?4() -> QAudioFormat.SampleType +QtMultimedia.QAudioFormat.setSampleRate?4(int) +QtMultimedia.QAudioFormat.sampleRate?4() -> int +QtMultimedia.QAudioFormat.setChannelCount?4(int) +QtMultimedia.QAudioFormat.channelCount?4() -> int +QtMultimedia.QAudioFormat.bytesForDuration?4(int) -> int +QtMultimedia.QAudioFormat.durationForBytes?4(int) -> int +QtMultimedia.QAudioFormat.bytesForFrames?4(int) -> int +QtMultimedia.QAudioFormat.framesForBytes?4(int) -> int +QtMultimedia.QAudioFormat.framesForDuration?4(int) -> int +QtMultimedia.QAudioFormat.durationForFrames?4(int) -> int +QtMultimedia.QAudioFormat.bytesPerFrame?4() -> int +QtMultimedia.QAudioInput?1(QAudioFormat format=QAudioFormat(), QObject parent=None) +QtMultimedia.QAudioInput.__init__?1(self, QAudioFormat format=QAudioFormat(), QObject parent=None) +QtMultimedia.QAudioInput?1(QAudioDeviceInfo, QAudioFormat format=QAudioFormat(), QObject parent=None) +QtMultimedia.QAudioInput.__init__?1(self, QAudioDeviceInfo, QAudioFormat format=QAudioFormat(), QObject parent=None) +QtMultimedia.QAudioInput.format?4() -> QAudioFormat +QtMultimedia.QAudioInput.start?4(QIODevice) +QtMultimedia.QAudioInput.start?4() -> QIODevice +QtMultimedia.QAudioInput.stop?4() +QtMultimedia.QAudioInput.reset?4() +QtMultimedia.QAudioInput.suspend?4() +QtMultimedia.QAudioInput.resume?4() +QtMultimedia.QAudioInput.setBufferSize?4(int) +QtMultimedia.QAudioInput.bufferSize?4() -> int +QtMultimedia.QAudioInput.bytesReady?4() -> int +QtMultimedia.QAudioInput.periodSize?4() -> int +QtMultimedia.QAudioInput.setNotifyInterval?4(int) +QtMultimedia.QAudioInput.notifyInterval?4() -> int +QtMultimedia.QAudioInput.processedUSecs?4() -> int +QtMultimedia.QAudioInput.elapsedUSecs?4() -> int +QtMultimedia.QAudioInput.error?4() -> QAudio.Error +QtMultimedia.QAudioInput.state?4() -> QAudio.State +QtMultimedia.QAudioInput.stateChanged?4(QAudio.State) +QtMultimedia.QAudioInput.notify?4() +QtMultimedia.QAudioInput.setVolume?4(float) +QtMultimedia.QAudioInput.volume?4() -> float +QtMultimedia.QAudioInputSelectorControl?1(QObject parent=None) +QtMultimedia.QAudioInputSelectorControl.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioInputSelectorControl.availableInputs?4() -> unknown-type +QtMultimedia.QAudioInputSelectorControl.inputDescription?4(QString) -> QString +QtMultimedia.QAudioInputSelectorControl.defaultInput?4() -> QString +QtMultimedia.QAudioInputSelectorControl.activeInput?4() -> QString +QtMultimedia.QAudioInputSelectorControl.setActiveInput?4(QString) +QtMultimedia.QAudioInputSelectorControl.activeInputChanged?4(QString) +QtMultimedia.QAudioInputSelectorControl.availableInputsChanged?4() +QtMultimedia.QAudioOutput?1(QAudioFormat format=QAudioFormat(), QObject parent=None) +QtMultimedia.QAudioOutput.__init__?1(self, QAudioFormat format=QAudioFormat(), QObject parent=None) +QtMultimedia.QAudioOutput?1(QAudioDeviceInfo, QAudioFormat format=QAudioFormat(), QObject parent=None) +QtMultimedia.QAudioOutput.__init__?1(self, QAudioDeviceInfo, QAudioFormat format=QAudioFormat(), QObject parent=None) +QtMultimedia.QAudioOutput.format?4() -> QAudioFormat +QtMultimedia.QAudioOutput.start?4(QIODevice) +QtMultimedia.QAudioOutput.start?4() -> QIODevice +QtMultimedia.QAudioOutput.stop?4() +QtMultimedia.QAudioOutput.reset?4() +QtMultimedia.QAudioOutput.suspend?4() +QtMultimedia.QAudioOutput.resume?4() +QtMultimedia.QAudioOutput.setBufferSize?4(int) +QtMultimedia.QAudioOutput.bufferSize?4() -> int +QtMultimedia.QAudioOutput.bytesFree?4() -> int +QtMultimedia.QAudioOutput.periodSize?4() -> int +QtMultimedia.QAudioOutput.setNotifyInterval?4(int) +QtMultimedia.QAudioOutput.notifyInterval?4() -> int +QtMultimedia.QAudioOutput.processedUSecs?4() -> int +QtMultimedia.QAudioOutput.elapsedUSecs?4() -> int +QtMultimedia.QAudioOutput.error?4() -> QAudio.Error +QtMultimedia.QAudioOutput.state?4() -> QAudio.State +QtMultimedia.QAudioOutput.stateChanged?4(QAudio.State) +QtMultimedia.QAudioOutput.notify?4() +QtMultimedia.QAudioOutput.setVolume?4(float) +QtMultimedia.QAudioOutput.volume?4() -> float +QtMultimedia.QAudioOutput.category?4() -> QString +QtMultimedia.QAudioOutput.setCategory?4(QString) +QtMultimedia.QAudioOutputSelectorControl?1(QObject parent=None) +QtMultimedia.QAudioOutputSelectorControl.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioOutputSelectorControl.availableOutputs?4() -> unknown-type +QtMultimedia.QAudioOutputSelectorControl.outputDescription?4(QString) -> QString +QtMultimedia.QAudioOutputSelectorControl.defaultOutput?4() -> QString +QtMultimedia.QAudioOutputSelectorControl.activeOutput?4() -> QString +QtMultimedia.QAudioOutputSelectorControl.setActiveOutput?4(QString) +QtMultimedia.QAudioOutputSelectorControl.activeOutputChanged?4(QString) +QtMultimedia.QAudioOutputSelectorControl.availableOutputsChanged?4() +QtMultimedia.QAudioProbe?1(QObject parent=None) +QtMultimedia.QAudioProbe.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioProbe.setSource?4(QMediaObject) -> bool +QtMultimedia.QAudioProbe.setSource?4(QMediaRecorder) -> bool +QtMultimedia.QAudioProbe.isActive?4() -> bool +QtMultimedia.QAudioProbe.audioBufferProbed?4(QAudioBuffer) +QtMultimedia.QAudioProbe.flush?4() +QtMultimedia.QMediaBindableInterface?1() +QtMultimedia.QMediaBindableInterface.__init__?1(self) +QtMultimedia.QMediaBindableInterface?1(QMediaBindableInterface) +QtMultimedia.QMediaBindableInterface.__init__?1(self, QMediaBindableInterface) +QtMultimedia.QMediaBindableInterface.mediaObject?4() -> QMediaObject +QtMultimedia.QMediaBindableInterface.setMediaObject?4(QMediaObject) -> bool +QtMultimedia.QMediaRecorder.Error?10 +QtMultimedia.QMediaRecorder.Error.NoError?10 +QtMultimedia.QMediaRecorder.Error.ResourceError?10 +QtMultimedia.QMediaRecorder.Error.FormatError?10 +QtMultimedia.QMediaRecorder.Error.OutOfSpaceError?10 +QtMultimedia.QMediaRecorder.Status?10 +QtMultimedia.QMediaRecorder.Status.UnavailableStatus?10 +QtMultimedia.QMediaRecorder.Status.UnloadedStatus?10 +QtMultimedia.QMediaRecorder.Status.LoadingStatus?10 +QtMultimedia.QMediaRecorder.Status.LoadedStatus?10 +QtMultimedia.QMediaRecorder.Status.StartingStatus?10 +QtMultimedia.QMediaRecorder.Status.RecordingStatus?10 +QtMultimedia.QMediaRecorder.Status.PausedStatus?10 +QtMultimedia.QMediaRecorder.Status.FinalizingStatus?10 +QtMultimedia.QMediaRecorder.State?10 +QtMultimedia.QMediaRecorder.State.StoppedState?10 +QtMultimedia.QMediaRecorder.State.RecordingState?10 +QtMultimedia.QMediaRecorder.State.PausedState?10 +QtMultimedia.QMediaRecorder?1(QMediaObject, QObject parent=None) +QtMultimedia.QMediaRecorder.__init__?1(self, QMediaObject, QObject parent=None) +QtMultimedia.QMediaRecorder.mediaObject?4() -> QMediaObject +QtMultimedia.QMediaRecorder.isAvailable?4() -> bool +QtMultimedia.QMediaRecorder.availability?4() -> QMultimedia.AvailabilityStatus +QtMultimedia.QMediaRecorder.outputLocation?4() -> QUrl +QtMultimedia.QMediaRecorder.setOutputLocation?4(QUrl) -> bool +QtMultimedia.QMediaRecorder.actualLocation?4() -> QUrl +QtMultimedia.QMediaRecorder.state?4() -> QMediaRecorder.State +QtMultimedia.QMediaRecorder.status?4() -> QMediaRecorder.Status +QtMultimedia.QMediaRecorder.error?4() -> QMediaRecorder.Error +QtMultimedia.QMediaRecorder.errorString?4() -> QString +QtMultimedia.QMediaRecorder.duration?4() -> int +QtMultimedia.QMediaRecorder.isMuted?4() -> bool +QtMultimedia.QMediaRecorder.volume?4() -> float +QtMultimedia.QMediaRecorder.supportedContainers?4() -> QStringList +QtMultimedia.QMediaRecorder.containerDescription?4(QString) -> QString +QtMultimedia.QMediaRecorder.supportedAudioCodecs?4() -> QStringList +QtMultimedia.QMediaRecorder.audioCodecDescription?4(QString) -> QString +QtMultimedia.QMediaRecorder.supportedAudioSampleRates?4(QAudioEncoderSettings settings=QAudioEncoderSettings()) -> (unknown-type, bool) +QtMultimedia.QMediaRecorder.supportedVideoCodecs?4() -> QStringList +QtMultimedia.QMediaRecorder.videoCodecDescription?4(QString) -> QString +QtMultimedia.QMediaRecorder.supportedResolutions?4(QVideoEncoderSettings settings=QVideoEncoderSettings()) -> (unknown-type, bool) +QtMultimedia.QMediaRecorder.supportedFrameRates?4(QVideoEncoderSettings settings=QVideoEncoderSettings()) -> (unknown-type, bool) +QtMultimedia.QMediaRecorder.audioSettings?4() -> QAudioEncoderSettings +QtMultimedia.QMediaRecorder.videoSettings?4() -> QVideoEncoderSettings +QtMultimedia.QMediaRecorder.containerFormat?4() -> QString +QtMultimedia.QMediaRecorder.setAudioSettings?4(QAudioEncoderSettings) +QtMultimedia.QMediaRecorder.setVideoSettings?4(QVideoEncoderSettings) +QtMultimedia.QMediaRecorder.setContainerFormat?4(QString) +QtMultimedia.QMediaRecorder.setEncodingSettings?4(QAudioEncoderSettings, QVideoEncoderSettings video=QVideoEncoderSettings(), QString container='') +QtMultimedia.QMediaRecorder.isMetaDataAvailable?4() -> bool +QtMultimedia.QMediaRecorder.isMetaDataWritable?4() -> bool +QtMultimedia.QMediaRecorder.metaData?4(QString) -> QVariant +QtMultimedia.QMediaRecorder.setMetaData?4(QString, QVariant) +QtMultimedia.QMediaRecorder.availableMetaData?4() -> QStringList +QtMultimedia.QMediaRecorder.record?4() +QtMultimedia.QMediaRecorder.pause?4() +QtMultimedia.QMediaRecorder.stop?4() +QtMultimedia.QMediaRecorder.setMuted?4(bool) +QtMultimedia.QMediaRecorder.setVolume?4(float) +QtMultimedia.QMediaRecorder.stateChanged?4(QMediaRecorder.State) +QtMultimedia.QMediaRecorder.statusChanged?4(QMediaRecorder.Status) +QtMultimedia.QMediaRecorder.durationChanged?4(int) +QtMultimedia.QMediaRecorder.mutedChanged?4(bool) +QtMultimedia.QMediaRecorder.volumeChanged?4(float) +QtMultimedia.QMediaRecorder.actualLocationChanged?4(QUrl) +QtMultimedia.QMediaRecorder.error?4(QMediaRecorder.Error) +QtMultimedia.QMediaRecorder.metaDataAvailableChanged?4(bool) +QtMultimedia.QMediaRecorder.metaDataWritableChanged?4(bool) +QtMultimedia.QMediaRecorder.metaDataChanged?4(QString, QVariant) +QtMultimedia.QMediaRecorder.metaDataChanged?4() +QtMultimedia.QMediaRecorder.availabilityChanged?4(QMultimedia.AvailabilityStatus) +QtMultimedia.QMediaRecorder.availabilityChanged?4(bool) +QtMultimedia.QMediaRecorder.setMediaObject?4(QMediaObject) -> bool +QtMultimedia.QAudioRecorder?1(QObject parent=None) +QtMultimedia.QAudioRecorder.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioRecorder.audioInputs?4() -> QStringList +QtMultimedia.QAudioRecorder.defaultAudioInput?4() -> QString +QtMultimedia.QAudioRecorder.audioInputDescription?4(QString) -> QString +QtMultimedia.QAudioRecorder.audioInput?4() -> QString +QtMultimedia.QAudioRecorder.setAudioInput?4(QString) +QtMultimedia.QAudioRecorder.audioInputChanged?4(QString) +QtMultimedia.QAudioRecorder.availableAudioInputsChanged?4() +QtMultimedia.QAudioRoleControl?1(QObject parent=None) +QtMultimedia.QAudioRoleControl.__init__?1(self, QObject parent=None) +QtMultimedia.QAudioRoleControl.audioRole?4() -> QAudio.Role +QtMultimedia.QAudioRoleControl.setAudioRole?4(QAudio.Role) +QtMultimedia.QAudioRoleControl.supportedAudioRoles?4() -> unknown-type +QtMultimedia.QAudioRoleControl.audioRoleChanged?4(QAudio.Role) +QtMultimedia.QCamera.Position?10 +QtMultimedia.QCamera.Position.UnspecifiedPosition?10 +QtMultimedia.QCamera.Position.BackFace?10 +QtMultimedia.QCamera.Position.FrontFace?10 +QtMultimedia.QCamera.LockType?10 +QtMultimedia.QCamera.LockType.NoLock?10 +QtMultimedia.QCamera.LockType.LockExposure?10 +QtMultimedia.QCamera.LockType.LockWhiteBalance?10 +QtMultimedia.QCamera.LockType.LockFocus?10 +QtMultimedia.QCamera.LockChangeReason?10 +QtMultimedia.QCamera.LockChangeReason.UserRequest?10 +QtMultimedia.QCamera.LockChangeReason.LockAcquired?10 +QtMultimedia.QCamera.LockChangeReason.LockFailed?10 +QtMultimedia.QCamera.LockChangeReason.LockLost?10 +QtMultimedia.QCamera.LockChangeReason.LockTemporaryLost?10 +QtMultimedia.QCamera.LockStatus?10 +QtMultimedia.QCamera.LockStatus.Unlocked?10 +QtMultimedia.QCamera.LockStatus.Searching?10 +QtMultimedia.QCamera.LockStatus.Locked?10 +QtMultimedia.QCamera.Error?10 +QtMultimedia.QCamera.Error.NoError?10 +QtMultimedia.QCamera.Error.CameraError?10 +QtMultimedia.QCamera.Error.InvalidRequestError?10 +QtMultimedia.QCamera.Error.ServiceMissingError?10 +QtMultimedia.QCamera.Error.NotSupportedFeatureError?10 +QtMultimedia.QCamera.CaptureMode?10 +QtMultimedia.QCamera.CaptureMode.CaptureViewfinder?10 +QtMultimedia.QCamera.CaptureMode.CaptureStillImage?10 +QtMultimedia.QCamera.CaptureMode.CaptureVideo?10 +QtMultimedia.QCamera.State?10 +QtMultimedia.QCamera.State.UnloadedState?10 +QtMultimedia.QCamera.State.LoadedState?10 +QtMultimedia.QCamera.State.ActiveState?10 +QtMultimedia.QCamera.Status?10 +QtMultimedia.QCamera.Status.UnavailableStatus?10 +QtMultimedia.QCamera.Status.UnloadedStatus?10 +QtMultimedia.QCamera.Status.LoadingStatus?10 +QtMultimedia.QCamera.Status.UnloadingStatus?10 +QtMultimedia.QCamera.Status.LoadedStatus?10 +QtMultimedia.QCamera.Status.StandbyStatus?10 +QtMultimedia.QCamera.Status.StartingStatus?10 +QtMultimedia.QCamera.Status.StoppingStatus?10 +QtMultimedia.QCamera.Status.ActiveStatus?10 +QtMultimedia.QCamera?1(QObject parent=None) +QtMultimedia.QCamera.__init__?1(self, QObject parent=None) +QtMultimedia.QCamera?1(QByteArray, QObject parent=None) +QtMultimedia.QCamera.__init__?1(self, QByteArray, QObject parent=None) +QtMultimedia.QCamera?1(QCameraInfo, QObject parent=None) +QtMultimedia.QCamera.__init__?1(self, QCameraInfo, QObject parent=None) +QtMultimedia.QCamera?1(QCamera.Position, QObject parent=None) +QtMultimedia.QCamera.__init__?1(self, QCamera.Position, QObject parent=None) +QtMultimedia.QCamera.availableDevices?4() -> unknown-type +QtMultimedia.QCamera.deviceDescription?4(QByteArray) -> QString +QtMultimedia.QCamera.availability?4() -> QMultimedia.AvailabilityStatus +QtMultimedia.QCamera.state?4() -> QCamera.State +QtMultimedia.QCamera.status?4() -> QCamera.Status +QtMultimedia.QCamera.captureMode?4() -> QCamera.CaptureModes +QtMultimedia.QCamera.isCaptureModeSupported?4(QCamera.CaptureModes) -> bool +QtMultimedia.QCamera.exposure?4() -> QCameraExposure +QtMultimedia.QCamera.focus?4() -> QCameraFocus +QtMultimedia.QCamera.imageProcessing?4() -> QCameraImageProcessing +QtMultimedia.QCamera.setViewfinder?4(QVideoWidget) +QtMultimedia.QCamera.setViewfinder?4(QGraphicsVideoItem) +QtMultimedia.QCamera.setViewfinder?4(QAbstractVideoSurface) +QtMultimedia.QCamera.error?4() -> QCamera.Error +QtMultimedia.QCamera.errorString?4() -> QString +QtMultimedia.QCamera.supportedLocks?4() -> QCamera.LockTypes +QtMultimedia.QCamera.requestedLocks?4() -> QCamera.LockTypes +QtMultimedia.QCamera.lockStatus?4() -> QCamera.LockStatus +QtMultimedia.QCamera.lockStatus?4(QCamera.LockType) -> QCamera.LockStatus +QtMultimedia.QCamera.setCaptureMode?4(QCamera.CaptureModes) +QtMultimedia.QCamera.load?4() +QtMultimedia.QCamera.unload?4() +QtMultimedia.QCamera.start?4() +QtMultimedia.QCamera.stop?4() +QtMultimedia.QCamera.searchAndLock?4() +QtMultimedia.QCamera.unlock?4() +QtMultimedia.QCamera.searchAndLock?4(QCamera.LockTypes) +QtMultimedia.QCamera.unlock?4(QCamera.LockTypes) +QtMultimedia.QCamera.stateChanged?4(QCamera.State) +QtMultimedia.QCamera.captureModeChanged?4(QCamera.CaptureModes) +QtMultimedia.QCamera.statusChanged?4(QCamera.Status) +QtMultimedia.QCamera.locked?4() +QtMultimedia.QCamera.lockFailed?4() +QtMultimedia.QCamera.lockStatusChanged?4(QCamera.LockStatus, QCamera.LockChangeReason) +QtMultimedia.QCamera.lockStatusChanged?4(QCamera.LockType, QCamera.LockStatus, QCamera.LockChangeReason) +QtMultimedia.QCamera.error?4(QCamera.Error) +QtMultimedia.QCamera.errorOccurred?4(QCamera.Error) +QtMultimedia.QCamera.viewfinderSettings?4() -> QCameraViewfinderSettings +QtMultimedia.QCamera.setViewfinderSettings?4(QCameraViewfinderSettings) +QtMultimedia.QCamera.supportedViewfinderSettings?4(QCameraViewfinderSettings settings=QCameraViewfinderSettings()) -> unknown-type +QtMultimedia.QCamera.supportedViewfinderResolutions?4(QCameraViewfinderSettings settings=QCameraViewfinderSettings()) -> unknown-type +QtMultimedia.QCamera.supportedViewfinderFrameRateRanges?4(QCameraViewfinderSettings settings=QCameraViewfinderSettings()) -> unknown-type +QtMultimedia.QCamera.supportedViewfinderPixelFormats?4(QCameraViewfinderSettings settings=QCameraViewfinderSettings()) -> unknown-type +QtMultimedia.QCamera.CaptureModes?1() +QtMultimedia.QCamera.CaptureModes.__init__?1(self) +QtMultimedia.QCamera.CaptureModes?1(int) +QtMultimedia.QCamera.CaptureModes.__init__?1(self, int) +QtMultimedia.QCamera.CaptureModes?1(QCamera.CaptureModes) +QtMultimedia.QCamera.CaptureModes.__init__?1(self, QCamera.CaptureModes) +QtMultimedia.QCamera.LockTypes?1() +QtMultimedia.QCamera.LockTypes.__init__?1(self) +QtMultimedia.QCamera.LockTypes?1(int) +QtMultimedia.QCamera.LockTypes.__init__?1(self, int) +QtMultimedia.QCamera.LockTypes?1(QCamera.LockTypes) +QtMultimedia.QCamera.LockTypes.__init__?1(self, QCamera.LockTypes) +QtMultimedia.QCamera.FrameRateRange.maximumFrameRate?7 +QtMultimedia.QCamera.FrameRateRange.minimumFrameRate?7 +QtMultimedia.QCamera.FrameRateRange?1(float, float) +QtMultimedia.QCamera.FrameRateRange.__init__?1(self, float, float) +QtMultimedia.QCamera.FrameRateRange?1() +QtMultimedia.QCamera.FrameRateRange.__init__?1(self) +QtMultimedia.QCamera.FrameRateRange?1(QCamera.FrameRateRange) +QtMultimedia.QCamera.FrameRateRange.__init__?1(self, QCamera.FrameRateRange) +QtMultimedia.QCameraCaptureBufferFormatControl?1(QObject parent=None) +QtMultimedia.QCameraCaptureBufferFormatControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraCaptureBufferFormatControl.supportedBufferFormats?4() -> unknown-type +QtMultimedia.QCameraCaptureBufferFormatControl.bufferFormat?4() -> QVideoFrame.PixelFormat +QtMultimedia.QCameraCaptureBufferFormatControl.setBufferFormat?4(QVideoFrame.PixelFormat) +QtMultimedia.QCameraCaptureBufferFormatControl.bufferFormatChanged?4(QVideoFrame.PixelFormat) +QtMultimedia.QCameraCaptureDestinationControl?1(QObject parent=None) +QtMultimedia.QCameraCaptureDestinationControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraCaptureDestinationControl.isCaptureDestinationSupported?4(QCameraImageCapture.CaptureDestinations) -> bool +QtMultimedia.QCameraCaptureDestinationControl.captureDestination?4() -> QCameraImageCapture.CaptureDestinations +QtMultimedia.QCameraCaptureDestinationControl.setCaptureDestination?4(QCameraImageCapture.CaptureDestinations) +QtMultimedia.QCameraCaptureDestinationControl.captureDestinationChanged?4(QCameraImageCapture.CaptureDestinations) +QtMultimedia.QCameraControl.PropertyChangeType?10 +QtMultimedia.QCameraControl.PropertyChangeType.CaptureMode?10 +QtMultimedia.QCameraControl.PropertyChangeType.ImageEncodingSettings?10 +QtMultimedia.QCameraControl.PropertyChangeType.VideoEncodingSettings?10 +QtMultimedia.QCameraControl.PropertyChangeType.Viewfinder?10 +QtMultimedia.QCameraControl.PropertyChangeType.ViewfinderSettings?10 +QtMultimedia.QCameraControl?1(QObject parent=None) +QtMultimedia.QCameraControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraControl.state?4() -> QCamera.State +QtMultimedia.QCameraControl.setState?4(QCamera.State) +QtMultimedia.QCameraControl.status?4() -> QCamera.Status +QtMultimedia.QCameraControl.captureMode?4() -> QCamera.CaptureModes +QtMultimedia.QCameraControl.setCaptureMode?4(QCamera.CaptureModes) +QtMultimedia.QCameraControl.isCaptureModeSupported?4(QCamera.CaptureModes) -> bool +QtMultimedia.QCameraControl.canChangeProperty?4(QCameraControl.PropertyChangeType, QCamera.Status) -> bool +QtMultimedia.QCameraControl.stateChanged?4(QCamera.State) +QtMultimedia.QCameraControl.statusChanged?4(QCamera.Status) +QtMultimedia.QCameraControl.error?4(int, QString) +QtMultimedia.QCameraControl.captureModeChanged?4(QCamera.CaptureModes) +QtMultimedia.QCameraExposure.MeteringMode?10 +QtMultimedia.QCameraExposure.MeteringMode.MeteringMatrix?10 +QtMultimedia.QCameraExposure.MeteringMode.MeteringAverage?10 +QtMultimedia.QCameraExposure.MeteringMode.MeteringSpot?10 +QtMultimedia.QCameraExposure.ExposureMode?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureAuto?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureManual?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposurePortrait?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureNight?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureBacklight?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureSpotlight?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureSports?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureSnow?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureBeach?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureLargeAperture?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureSmallAperture?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureAction?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureLandscape?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureNightPortrait?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureTheatre?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureSunset?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureSteadyPhoto?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureFireworks?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureParty?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureCandlelight?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureBarcode?10 +QtMultimedia.QCameraExposure.ExposureMode.ExposureModeVendor?10 +QtMultimedia.QCameraExposure.FlashMode?10 +QtMultimedia.QCameraExposure.FlashMode.FlashAuto?10 +QtMultimedia.QCameraExposure.FlashMode.FlashOff?10 +QtMultimedia.QCameraExposure.FlashMode.FlashOn?10 +QtMultimedia.QCameraExposure.FlashMode.FlashRedEyeReduction?10 +QtMultimedia.QCameraExposure.FlashMode.FlashFill?10 +QtMultimedia.QCameraExposure.FlashMode.FlashTorch?10 +QtMultimedia.QCameraExposure.FlashMode.FlashVideoLight?10 +QtMultimedia.QCameraExposure.FlashMode.FlashSlowSyncFrontCurtain?10 +QtMultimedia.QCameraExposure.FlashMode.FlashSlowSyncRearCurtain?10 +QtMultimedia.QCameraExposure.FlashMode.FlashManual?10 +QtMultimedia.QCameraExposure.isAvailable?4() -> bool +QtMultimedia.QCameraExposure.flashMode?4() -> QCameraExposure.FlashModes +QtMultimedia.QCameraExposure.isFlashModeSupported?4(QCameraExposure.FlashModes) -> bool +QtMultimedia.QCameraExposure.isFlashReady?4() -> bool +QtMultimedia.QCameraExposure.exposureMode?4() -> QCameraExposure.ExposureMode +QtMultimedia.QCameraExposure.isExposureModeSupported?4(QCameraExposure.ExposureMode) -> bool +QtMultimedia.QCameraExposure.exposureCompensation?4() -> float +QtMultimedia.QCameraExposure.meteringMode?4() -> QCameraExposure.MeteringMode +QtMultimedia.QCameraExposure.isMeteringModeSupported?4(QCameraExposure.MeteringMode) -> bool +QtMultimedia.QCameraExposure.spotMeteringPoint?4() -> QPointF +QtMultimedia.QCameraExposure.setSpotMeteringPoint?4(QPointF) +QtMultimedia.QCameraExposure.isoSensitivity?4() -> int +QtMultimedia.QCameraExposure.aperture?4() -> float +QtMultimedia.QCameraExposure.shutterSpeed?4() -> float +QtMultimedia.QCameraExposure.requestedIsoSensitivity?4() -> int +QtMultimedia.QCameraExposure.requestedAperture?4() -> float +QtMultimedia.QCameraExposure.requestedShutterSpeed?4() -> float +QtMultimedia.QCameraExposure.supportedIsoSensitivities?4() -> (unknown-type, bool) +QtMultimedia.QCameraExposure.supportedApertures?4() -> (unknown-type, bool) +QtMultimedia.QCameraExposure.supportedShutterSpeeds?4() -> (unknown-type, bool) +QtMultimedia.QCameraExposure.setFlashMode?4(QCameraExposure.FlashModes) +QtMultimedia.QCameraExposure.setExposureMode?4(QCameraExposure.ExposureMode) +QtMultimedia.QCameraExposure.setMeteringMode?4(QCameraExposure.MeteringMode) +QtMultimedia.QCameraExposure.setExposureCompensation?4(float) +QtMultimedia.QCameraExposure.setManualIsoSensitivity?4(int) +QtMultimedia.QCameraExposure.setAutoIsoSensitivity?4() +QtMultimedia.QCameraExposure.setManualAperture?4(float) +QtMultimedia.QCameraExposure.setAutoAperture?4() +QtMultimedia.QCameraExposure.setManualShutterSpeed?4(float) +QtMultimedia.QCameraExposure.setAutoShutterSpeed?4() +QtMultimedia.QCameraExposure.flashReady?4(bool) +QtMultimedia.QCameraExposure.apertureChanged?4(float) +QtMultimedia.QCameraExposure.apertureRangeChanged?4() +QtMultimedia.QCameraExposure.shutterSpeedChanged?4(float) +QtMultimedia.QCameraExposure.shutterSpeedRangeChanged?4() +QtMultimedia.QCameraExposure.isoSensitivityChanged?4(int) +QtMultimedia.QCameraExposure.exposureCompensationChanged?4(float) +QtMultimedia.QCameraExposure.FlashModes?1() +QtMultimedia.QCameraExposure.FlashModes.__init__?1(self) +QtMultimedia.QCameraExposure.FlashModes?1(int) +QtMultimedia.QCameraExposure.FlashModes.__init__?1(self, int) +QtMultimedia.QCameraExposure.FlashModes?1(QCameraExposure.FlashModes) +QtMultimedia.QCameraExposure.FlashModes.__init__?1(self, QCameraExposure.FlashModes) +QtMultimedia.QCameraExposureControl.ExposureParameter?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.ISO?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.Aperture?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.ShutterSpeed?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.ExposureCompensation?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.FlashPower?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.FlashCompensation?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.TorchPower?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.SpotMeteringPoint?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.ExposureMode?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.MeteringMode?10 +QtMultimedia.QCameraExposureControl.ExposureParameter.ExtendedExposureParameter?10 +QtMultimedia.QCameraExposureControl?1(QObject parent=None) +QtMultimedia.QCameraExposureControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraExposureControl.isParameterSupported?4(QCameraExposureControl.ExposureParameter) -> bool +QtMultimedia.QCameraExposureControl.supportedParameterRange?4(QCameraExposureControl.ExposureParameter) -> (unknown-type, bool) +QtMultimedia.QCameraExposureControl.requestedValue?4(QCameraExposureControl.ExposureParameter) -> QVariant +QtMultimedia.QCameraExposureControl.actualValue?4(QCameraExposureControl.ExposureParameter) -> QVariant +QtMultimedia.QCameraExposureControl.setValue?4(QCameraExposureControl.ExposureParameter, QVariant) -> bool +QtMultimedia.QCameraExposureControl.requestedValueChanged?4(int) +QtMultimedia.QCameraExposureControl.actualValueChanged?4(int) +QtMultimedia.QCameraExposureControl.parameterRangeChanged?4(int) +QtMultimedia.QCameraFeedbackControl.EventType?10 +QtMultimedia.QCameraFeedbackControl.EventType.ViewfinderStarted?10 +QtMultimedia.QCameraFeedbackControl.EventType.ViewfinderStopped?10 +QtMultimedia.QCameraFeedbackControl.EventType.ImageCaptured?10 +QtMultimedia.QCameraFeedbackControl.EventType.ImageSaved?10 +QtMultimedia.QCameraFeedbackControl.EventType.ImageError?10 +QtMultimedia.QCameraFeedbackControl.EventType.RecordingStarted?10 +QtMultimedia.QCameraFeedbackControl.EventType.RecordingInProgress?10 +QtMultimedia.QCameraFeedbackControl.EventType.RecordingStopped?10 +QtMultimedia.QCameraFeedbackControl.EventType.AutoFocusInProgress?10 +QtMultimedia.QCameraFeedbackControl.EventType.AutoFocusLocked?10 +QtMultimedia.QCameraFeedbackControl.EventType.AutoFocusFailed?10 +QtMultimedia.QCameraFeedbackControl?1(QObject parent=None) +QtMultimedia.QCameraFeedbackControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraFeedbackControl.isEventFeedbackLocked?4(QCameraFeedbackControl.EventType) -> bool +QtMultimedia.QCameraFeedbackControl.isEventFeedbackEnabled?4(QCameraFeedbackControl.EventType) -> bool +QtMultimedia.QCameraFeedbackControl.setEventFeedbackEnabled?4(QCameraFeedbackControl.EventType, bool) -> bool +QtMultimedia.QCameraFeedbackControl.resetEventFeedback?4(QCameraFeedbackControl.EventType) +QtMultimedia.QCameraFeedbackControl.setEventFeedbackSound?4(QCameraFeedbackControl.EventType, QString) -> bool +QtMultimedia.QCameraFlashControl?1(QObject parent=None) +QtMultimedia.QCameraFlashControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraFlashControl.flashMode?4() -> QCameraExposure.FlashModes +QtMultimedia.QCameraFlashControl.setFlashMode?4(QCameraExposure.FlashModes) +QtMultimedia.QCameraFlashControl.isFlashModeSupported?4(QCameraExposure.FlashModes) -> bool +QtMultimedia.QCameraFlashControl.isFlashReady?4() -> bool +QtMultimedia.QCameraFlashControl.flashReady?4(bool) +QtMultimedia.QCameraFocusZone.FocusZoneStatus?10 +QtMultimedia.QCameraFocusZone.FocusZoneStatus.Invalid?10 +QtMultimedia.QCameraFocusZone.FocusZoneStatus.Unused?10 +QtMultimedia.QCameraFocusZone.FocusZoneStatus.Selected?10 +QtMultimedia.QCameraFocusZone.FocusZoneStatus.Focused?10 +QtMultimedia.QCameraFocusZone?1(QCameraFocusZone) +QtMultimedia.QCameraFocusZone.__init__?1(self, QCameraFocusZone) +QtMultimedia.QCameraFocusZone.isValid?4() -> bool +QtMultimedia.QCameraFocusZone.area?4() -> QRectF +QtMultimedia.QCameraFocusZone.status?4() -> QCameraFocusZone.FocusZoneStatus +QtMultimedia.QCameraFocus.FocusPointMode?10 +QtMultimedia.QCameraFocus.FocusPointMode.FocusPointAuto?10 +QtMultimedia.QCameraFocus.FocusPointMode.FocusPointCenter?10 +QtMultimedia.QCameraFocus.FocusPointMode.FocusPointFaceDetection?10 +QtMultimedia.QCameraFocus.FocusPointMode.FocusPointCustom?10 +QtMultimedia.QCameraFocus.FocusMode?10 +QtMultimedia.QCameraFocus.FocusMode.ManualFocus?10 +QtMultimedia.QCameraFocus.FocusMode.HyperfocalFocus?10 +QtMultimedia.QCameraFocus.FocusMode.InfinityFocus?10 +QtMultimedia.QCameraFocus.FocusMode.AutoFocus?10 +QtMultimedia.QCameraFocus.FocusMode.ContinuousFocus?10 +QtMultimedia.QCameraFocus.FocusMode.MacroFocus?10 +QtMultimedia.QCameraFocus.isAvailable?4() -> bool +QtMultimedia.QCameraFocus.focusMode?4() -> QCameraFocus.FocusModes +QtMultimedia.QCameraFocus.setFocusMode?4(QCameraFocus.FocusModes) +QtMultimedia.QCameraFocus.isFocusModeSupported?4(QCameraFocus.FocusModes) -> bool +QtMultimedia.QCameraFocus.focusPointMode?4() -> QCameraFocus.FocusPointMode +QtMultimedia.QCameraFocus.setFocusPointMode?4(QCameraFocus.FocusPointMode) +QtMultimedia.QCameraFocus.isFocusPointModeSupported?4(QCameraFocus.FocusPointMode) -> bool +QtMultimedia.QCameraFocus.customFocusPoint?4() -> QPointF +QtMultimedia.QCameraFocus.setCustomFocusPoint?4(QPointF) +QtMultimedia.QCameraFocus.focusZones?4() -> unknown-type +QtMultimedia.QCameraFocus.maximumOpticalZoom?4() -> float +QtMultimedia.QCameraFocus.maximumDigitalZoom?4() -> float +QtMultimedia.QCameraFocus.opticalZoom?4() -> float +QtMultimedia.QCameraFocus.digitalZoom?4() -> float +QtMultimedia.QCameraFocus.zoomTo?4(float, float) +QtMultimedia.QCameraFocus.opticalZoomChanged?4(float) +QtMultimedia.QCameraFocus.digitalZoomChanged?4(float) +QtMultimedia.QCameraFocus.focusZonesChanged?4() +QtMultimedia.QCameraFocus.maximumOpticalZoomChanged?4(float) +QtMultimedia.QCameraFocus.maximumDigitalZoomChanged?4(float) +QtMultimedia.QCameraFocus.FocusModes?1() +QtMultimedia.QCameraFocus.FocusModes.__init__?1(self) +QtMultimedia.QCameraFocus.FocusModes?1(int) +QtMultimedia.QCameraFocus.FocusModes.__init__?1(self, int) +QtMultimedia.QCameraFocus.FocusModes?1(QCameraFocus.FocusModes) +QtMultimedia.QCameraFocus.FocusModes.__init__?1(self, QCameraFocus.FocusModes) +QtMultimedia.QCameraFocusControl?1(QObject parent=None) +QtMultimedia.QCameraFocusControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraFocusControl.focusMode?4() -> QCameraFocus.FocusModes +QtMultimedia.QCameraFocusControl.setFocusMode?4(QCameraFocus.FocusModes) +QtMultimedia.QCameraFocusControl.isFocusModeSupported?4(QCameraFocus.FocusModes) -> bool +QtMultimedia.QCameraFocusControl.focusPointMode?4() -> QCameraFocus.FocusPointMode +QtMultimedia.QCameraFocusControl.setFocusPointMode?4(QCameraFocus.FocusPointMode) +QtMultimedia.QCameraFocusControl.isFocusPointModeSupported?4(QCameraFocus.FocusPointMode) -> bool +QtMultimedia.QCameraFocusControl.customFocusPoint?4() -> QPointF +QtMultimedia.QCameraFocusControl.setCustomFocusPoint?4(QPointF) +QtMultimedia.QCameraFocusControl.focusZones?4() -> unknown-type +QtMultimedia.QCameraFocusControl.focusModeChanged?4(QCameraFocus.FocusModes) +QtMultimedia.QCameraFocusControl.focusPointModeChanged?4(QCameraFocus.FocusPointMode) +QtMultimedia.QCameraFocusControl.customFocusPointChanged?4(QPointF) +QtMultimedia.QCameraFocusControl.focusZonesChanged?4() +QtMultimedia.QCameraImageCapture.CaptureDestination?10 +QtMultimedia.QCameraImageCapture.CaptureDestination.CaptureToFile?10 +QtMultimedia.QCameraImageCapture.CaptureDestination.CaptureToBuffer?10 +QtMultimedia.QCameraImageCapture.DriveMode?10 +QtMultimedia.QCameraImageCapture.DriveMode.SingleImageCapture?10 +QtMultimedia.QCameraImageCapture.Error?10 +QtMultimedia.QCameraImageCapture.Error.NoError?10 +QtMultimedia.QCameraImageCapture.Error.NotReadyError?10 +QtMultimedia.QCameraImageCapture.Error.ResourceError?10 +QtMultimedia.QCameraImageCapture.Error.OutOfSpaceError?10 +QtMultimedia.QCameraImageCapture.Error.NotSupportedFeatureError?10 +QtMultimedia.QCameraImageCapture.Error.FormatError?10 +QtMultimedia.QCameraImageCapture?1(QMediaObject, QObject parent=None) +QtMultimedia.QCameraImageCapture.__init__?1(self, QMediaObject, QObject parent=None) +QtMultimedia.QCameraImageCapture.isAvailable?4() -> bool +QtMultimedia.QCameraImageCapture.availability?4() -> QMultimedia.AvailabilityStatus +QtMultimedia.QCameraImageCapture.mediaObject?4() -> QMediaObject +QtMultimedia.QCameraImageCapture.error?4() -> QCameraImageCapture.Error +QtMultimedia.QCameraImageCapture.errorString?4() -> QString +QtMultimedia.QCameraImageCapture.isReadyForCapture?4() -> bool +QtMultimedia.QCameraImageCapture.supportedImageCodecs?4() -> QStringList +QtMultimedia.QCameraImageCapture.imageCodecDescription?4(QString) -> QString +QtMultimedia.QCameraImageCapture.supportedResolutions?4(QImageEncoderSettings settings=QImageEncoderSettings()) -> (unknown-type, bool) +QtMultimedia.QCameraImageCapture.encodingSettings?4() -> QImageEncoderSettings +QtMultimedia.QCameraImageCapture.setEncodingSettings?4(QImageEncoderSettings) +QtMultimedia.QCameraImageCapture.supportedBufferFormats?4() -> unknown-type +QtMultimedia.QCameraImageCapture.bufferFormat?4() -> QVideoFrame.PixelFormat +QtMultimedia.QCameraImageCapture.setBufferFormat?4(QVideoFrame.PixelFormat) +QtMultimedia.QCameraImageCapture.isCaptureDestinationSupported?4(QCameraImageCapture.CaptureDestinations) -> bool +QtMultimedia.QCameraImageCapture.captureDestination?4() -> QCameraImageCapture.CaptureDestinations +QtMultimedia.QCameraImageCapture.setCaptureDestination?4(QCameraImageCapture.CaptureDestinations) +QtMultimedia.QCameraImageCapture.capture?4(QString file='') -> int +QtMultimedia.QCameraImageCapture.cancelCapture?4() +QtMultimedia.QCameraImageCapture.error?4(int, QCameraImageCapture.Error, QString) +QtMultimedia.QCameraImageCapture.readyForCaptureChanged?4(bool) +QtMultimedia.QCameraImageCapture.bufferFormatChanged?4(QVideoFrame.PixelFormat) +QtMultimedia.QCameraImageCapture.captureDestinationChanged?4(QCameraImageCapture.CaptureDestinations) +QtMultimedia.QCameraImageCapture.imageExposed?4(int) +QtMultimedia.QCameraImageCapture.imageCaptured?4(int, QImage) +QtMultimedia.QCameraImageCapture.imageMetadataAvailable?4(int, QString, QVariant) +QtMultimedia.QCameraImageCapture.imageAvailable?4(int, QVideoFrame) +QtMultimedia.QCameraImageCapture.imageSaved?4(int, QString) +QtMultimedia.QCameraImageCapture.setMediaObject?4(QMediaObject) -> bool +QtMultimedia.QCameraImageCapture.CaptureDestinations?1() +QtMultimedia.QCameraImageCapture.CaptureDestinations.__init__?1(self) +QtMultimedia.QCameraImageCapture.CaptureDestinations?1(int) +QtMultimedia.QCameraImageCapture.CaptureDestinations.__init__?1(self, int) +QtMultimedia.QCameraImageCapture.CaptureDestinations?1(QCameraImageCapture.CaptureDestinations) +QtMultimedia.QCameraImageCapture.CaptureDestinations.__init__?1(self, QCameraImageCapture.CaptureDestinations) +QtMultimedia.QCameraImageCaptureControl?1(QObject parent=None) +QtMultimedia.QCameraImageCaptureControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraImageCaptureControl.isReadyForCapture?4() -> bool +QtMultimedia.QCameraImageCaptureControl.driveMode?4() -> QCameraImageCapture.DriveMode +QtMultimedia.QCameraImageCaptureControl.setDriveMode?4(QCameraImageCapture.DriveMode) +QtMultimedia.QCameraImageCaptureControl.capture?4(QString) -> int +QtMultimedia.QCameraImageCaptureControl.cancelCapture?4() +QtMultimedia.QCameraImageCaptureControl.readyForCaptureChanged?4(bool) +QtMultimedia.QCameraImageCaptureControl.imageExposed?4(int) +QtMultimedia.QCameraImageCaptureControl.imageCaptured?4(int, QImage) +QtMultimedia.QCameraImageCaptureControl.imageMetadataAvailable?4(int, QString, QVariant) +QtMultimedia.QCameraImageCaptureControl.imageAvailable?4(int, QVideoFrame) +QtMultimedia.QCameraImageCaptureControl.imageSaved?4(int, QString) +QtMultimedia.QCameraImageCaptureControl.error?4(int, int, QString) +QtMultimedia.QCameraImageProcessing.ColorFilter?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterNone?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterGrayscale?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterNegative?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterSolarize?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterSepia?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterPosterize?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterWhiteboard?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterBlackboard?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterAqua?10 +QtMultimedia.QCameraImageProcessing.ColorFilter.ColorFilterVendor?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceAuto?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceManual?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceSunlight?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceCloudy?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceShade?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceTungsten?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceFluorescent?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceFlash?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceSunset?10 +QtMultimedia.QCameraImageProcessing.WhiteBalanceMode.WhiteBalanceVendor?10 +QtMultimedia.QCameraImageProcessing.isAvailable?4() -> bool +QtMultimedia.QCameraImageProcessing.whiteBalanceMode?4() -> QCameraImageProcessing.WhiteBalanceMode +QtMultimedia.QCameraImageProcessing.setWhiteBalanceMode?4(QCameraImageProcessing.WhiteBalanceMode) +QtMultimedia.QCameraImageProcessing.isWhiteBalanceModeSupported?4(QCameraImageProcessing.WhiteBalanceMode) -> bool +QtMultimedia.QCameraImageProcessing.manualWhiteBalance?4() -> float +QtMultimedia.QCameraImageProcessing.setManualWhiteBalance?4(float) +QtMultimedia.QCameraImageProcessing.contrast?4() -> float +QtMultimedia.QCameraImageProcessing.setContrast?4(float) +QtMultimedia.QCameraImageProcessing.saturation?4() -> float +QtMultimedia.QCameraImageProcessing.setSaturation?4(float) +QtMultimedia.QCameraImageProcessing.sharpeningLevel?4() -> float +QtMultimedia.QCameraImageProcessing.setSharpeningLevel?4(float) +QtMultimedia.QCameraImageProcessing.denoisingLevel?4() -> float +QtMultimedia.QCameraImageProcessing.setDenoisingLevel?4(float) +QtMultimedia.QCameraImageProcessing.colorFilter?4() -> QCameraImageProcessing.ColorFilter +QtMultimedia.QCameraImageProcessing.setColorFilter?4(QCameraImageProcessing.ColorFilter) +QtMultimedia.QCameraImageProcessing.isColorFilterSupported?4(QCameraImageProcessing.ColorFilter) -> bool +QtMultimedia.QCameraImageProcessing.brightness?4() -> float +QtMultimedia.QCameraImageProcessing.setBrightness?4(float) +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.WhiteBalancePreset?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.ColorTemperature?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.Contrast?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.Saturation?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.Brightness?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.Sharpening?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.Denoising?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.ContrastAdjustment?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.SaturationAdjustment?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.BrightnessAdjustment?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.SharpeningAdjustment?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.DenoisingAdjustment?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.ColorFilter?10 +QtMultimedia.QCameraImageProcessingControl.ProcessingParameter.ExtendedParameter?10 +QtMultimedia.QCameraImageProcessingControl?1(QObject parent=None) +QtMultimedia.QCameraImageProcessingControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraImageProcessingControl.isParameterSupported?4(QCameraImageProcessingControl.ProcessingParameter) -> bool +QtMultimedia.QCameraImageProcessingControl.isParameterValueSupported?4(QCameraImageProcessingControl.ProcessingParameter, QVariant) -> bool +QtMultimedia.QCameraImageProcessingControl.parameter?4(QCameraImageProcessingControl.ProcessingParameter) -> QVariant +QtMultimedia.QCameraImageProcessingControl.setParameter?4(QCameraImageProcessingControl.ProcessingParameter, QVariant) +QtMultimedia.QCameraInfo?1(QByteArray name=QByteArray()) +QtMultimedia.QCameraInfo.__init__?1(self, QByteArray name=QByteArray()) +QtMultimedia.QCameraInfo?1(QCamera) +QtMultimedia.QCameraInfo.__init__?1(self, QCamera) +QtMultimedia.QCameraInfo?1(QCameraInfo) +QtMultimedia.QCameraInfo.__init__?1(self, QCameraInfo) +QtMultimedia.QCameraInfo.isNull?4() -> bool +QtMultimedia.QCameraInfo.deviceName?4() -> QString +QtMultimedia.QCameraInfo.description?4() -> QString +QtMultimedia.QCameraInfo.position?4() -> QCamera.Position +QtMultimedia.QCameraInfo.orientation?4() -> int +QtMultimedia.QCameraInfo.defaultCamera?4() -> QCameraInfo +QtMultimedia.QCameraInfo.availableCameras?4(QCamera.Position position=QCamera.UnspecifiedPosition) -> unknown-type +QtMultimedia.QCameraInfoControl?1(QObject parent=None) +QtMultimedia.QCameraInfoControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraInfoControl.cameraPosition?4(QString) -> QCamera.Position +QtMultimedia.QCameraInfoControl.cameraOrientation?4(QString) -> int +QtMultimedia.QCameraLocksControl?1(QObject parent=None) +QtMultimedia.QCameraLocksControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraLocksControl.supportedLocks?4() -> QCamera.LockTypes +QtMultimedia.QCameraLocksControl.lockStatus?4(QCamera.LockType) -> QCamera.LockStatus +QtMultimedia.QCameraLocksControl.searchAndLock?4(QCamera.LockTypes) +QtMultimedia.QCameraLocksControl.unlock?4(QCamera.LockTypes) +QtMultimedia.QCameraLocksControl.lockStatusChanged?4(QCamera.LockType, QCamera.LockStatus, QCamera.LockChangeReason) +QtMultimedia.QCameraViewfinderSettings?1() +QtMultimedia.QCameraViewfinderSettings.__init__?1(self) +QtMultimedia.QCameraViewfinderSettings?1(QCameraViewfinderSettings) +QtMultimedia.QCameraViewfinderSettings.__init__?1(self, QCameraViewfinderSettings) +QtMultimedia.QCameraViewfinderSettings.swap?4(QCameraViewfinderSettings) +QtMultimedia.QCameraViewfinderSettings.isNull?4() -> bool +QtMultimedia.QCameraViewfinderSettings.resolution?4() -> QSize +QtMultimedia.QCameraViewfinderSettings.setResolution?4(QSize) +QtMultimedia.QCameraViewfinderSettings.setResolution?4(int, int) +QtMultimedia.QCameraViewfinderSettings.minimumFrameRate?4() -> float +QtMultimedia.QCameraViewfinderSettings.setMinimumFrameRate?4(float) +QtMultimedia.QCameraViewfinderSettings.maximumFrameRate?4() -> float +QtMultimedia.QCameraViewfinderSettings.setMaximumFrameRate?4(float) +QtMultimedia.QCameraViewfinderSettings.pixelFormat?4() -> QVideoFrame.PixelFormat +QtMultimedia.QCameraViewfinderSettings.setPixelFormat?4(QVideoFrame.PixelFormat) +QtMultimedia.QCameraViewfinderSettings.pixelAspectRatio?4() -> QSize +QtMultimedia.QCameraViewfinderSettings.setPixelAspectRatio?4(QSize) +QtMultimedia.QCameraViewfinderSettings.setPixelAspectRatio?4(int, int) +QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter?10 +QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter.Resolution?10 +QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter.PixelAspectRatio?10 +QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter.MinimumFrameRate?10 +QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter.MaximumFrameRate?10 +QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter.PixelFormat?10 +QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter.UserParameter?10 +QtMultimedia.QCameraViewfinderSettingsControl?1(QObject parent=None) +QtMultimedia.QCameraViewfinderSettingsControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraViewfinderSettingsControl.isViewfinderParameterSupported?4(QCameraViewfinderSettingsControl.ViewfinderParameter) -> bool +QtMultimedia.QCameraViewfinderSettingsControl.viewfinderParameter?4(QCameraViewfinderSettingsControl.ViewfinderParameter) -> QVariant +QtMultimedia.QCameraViewfinderSettingsControl.setViewfinderParameter?4(QCameraViewfinderSettingsControl.ViewfinderParameter, QVariant) +QtMultimedia.QCameraViewfinderSettingsControl2?1(QObject parent=None) +QtMultimedia.QCameraViewfinderSettingsControl2.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraViewfinderSettingsControl2.supportedViewfinderSettings?4() -> unknown-type +QtMultimedia.QCameraViewfinderSettingsControl2.viewfinderSettings?4() -> QCameraViewfinderSettings +QtMultimedia.QCameraViewfinderSettingsControl2.setViewfinderSettings?4(QCameraViewfinderSettings) +QtMultimedia.QCameraZoomControl?1(QObject parent=None) +QtMultimedia.QCameraZoomControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCameraZoomControl.maximumOpticalZoom?4() -> float +QtMultimedia.QCameraZoomControl.maximumDigitalZoom?4() -> float +QtMultimedia.QCameraZoomControl.requestedOpticalZoom?4() -> float +QtMultimedia.QCameraZoomControl.requestedDigitalZoom?4() -> float +QtMultimedia.QCameraZoomControl.currentOpticalZoom?4() -> float +QtMultimedia.QCameraZoomControl.currentDigitalZoom?4() -> float +QtMultimedia.QCameraZoomControl.zoomTo?4(float, float) +QtMultimedia.QCameraZoomControl.maximumOpticalZoomChanged?4(float) +QtMultimedia.QCameraZoomControl.maximumDigitalZoomChanged?4(float) +QtMultimedia.QCameraZoomControl.requestedOpticalZoomChanged?4(float) +QtMultimedia.QCameraZoomControl.requestedDigitalZoomChanged?4(float) +QtMultimedia.QCameraZoomControl.currentOpticalZoomChanged?4(float) +QtMultimedia.QCameraZoomControl.currentDigitalZoomChanged?4(float) +QtMultimedia.QCustomAudioRoleControl?1(QObject parent=None) +QtMultimedia.QCustomAudioRoleControl.__init__?1(self, QObject parent=None) +QtMultimedia.QCustomAudioRoleControl.customAudioRole?4() -> QString +QtMultimedia.QCustomAudioRoleControl.setCustomAudioRole?4(QString) +QtMultimedia.QCustomAudioRoleControl.supportedCustomAudioRoles?4() -> QStringList +QtMultimedia.QCustomAudioRoleControl.customAudioRoleChanged?4(QString) +QtMultimedia.QImageEncoderControl?1(QObject parent=None) +QtMultimedia.QImageEncoderControl.__init__?1(self, QObject parent=None) +QtMultimedia.QImageEncoderControl.supportedImageCodecs?4() -> QStringList +QtMultimedia.QImageEncoderControl.imageCodecDescription?4(QString) -> QString +QtMultimedia.QImageEncoderControl.supportedResolutions?4(QImageEncoderSettings) -> (unknown-type, bool) +QtMultimedia.QImageEncoderControl.imageSettings?4() -> QImageEncoderSettings +QtMultimedia.QImageEncoderControl.setImageSettings?4(QImageEncoderSettings) +QtMultimedia.QMediaAudioProbeControl?1(QObject parent=None) +QtMultimedia.QMediaAudioProbeControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaAudioProbeControl.audioBufferProbed?4(QAudioBuffer) +QtMultimedia.QMediaAudioProbeControl.flush?4() +QtMultimedia.QMediaAvailabilityControl?1(QObject parent=None) +QtMultimedia.QMediaAvailabilityControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaAvailabilityControl.availability?4() -> QMultimedia.AvailabilityStatus +QtMultimedia.QMediaAvailabilityControl.availabilityChanged?4(QMultimedia.AvailabilityStatus) +QtMultimedia.QMediaContainerControl?1(QObject parent=None) +QtMultimedia.QMediaContainerControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaContainerControl.supportedContainers?4() -> QStringList +QtMultimedia.QMediaContainerControl.containerFormat?4() -> QString +QtMultimedia.QMediaContainerControl.setContainerFormat?4(QString) +QtMultimedia.QMediaContainerControl.containerDescription?4(QString) -> QString +QtMultimedia.QMediaContent?1() +QtMultimedia.QMediaContent.__init__?1(self) +QtMultimedia.QMediaContent?1(QUrl) +QtMultimedia.QMediaContent.__init__?1(self, QUrl) +QtMultimedia.QMediaContent?1(QNetworkRequest) +QtMultimedia.QMediaContent.__init__?1(self, QNetworkRequest) +QtMultimedia.QMediaContent?1(QMediaResource) +QtMultimedia.QMediaContent.__init__?1(self, QMediaResource) +QtMultimedia.QMediaContent?1(unknown-type) +QtMultimedia.QMediaContent.__init__?1(self, unknown-type) +QtMultimedia.QMediaContent?1(QMediaContent) +QtMultimedia.QMediaContent.__init__?1(self, QMediaContent) +QtMultimedia.QMediaContent?1(QMediaPlaylist, QUrl contentUrl=QUrl()) +QtMultimedia.QMediaContent.__init__?1(self, QMediaPlaylist, QUrl contentUrl=QUrl()) +QtMultimedia.QMediaContent.isNull?4() -> bool +QtMultimedia.QMediaContent.canonicalUrl?4() -> QUrl +QtMultimedia.QMediaContent.canonicalRequest?4() -> QNetworkRequest +QtMultimedia.QMediaContent.canonicalResource?4() -> QMediaResource +QtMultimedia.QMediaContent.resources?4() -> unknown-type +QtMultimedia.QMediaContent.playlist?4() -> QMediaPlaylist +QtMultimedia.QMediaContent.request?4() -> QNetworkRequest +QtMultimedia.QAudioEncoderSettings?1() +QtMultimedia.QAudioEncoderSettings.__init__?1(self) +QtMultimedia.QAudioEncoderSettings?1(QAudioEncoderSettings) +QtMultimedia.QAudioEncoderSettings.__init__?1(self, QAudioEncoderSettings) +QtMultimedia.QAudioEncoderSettings.isNull?4() -> bool +QtMultimedia.QAudioEncoderSettings.encodingMode?4() -> QMultimedia.EncodingMode +QtMultimedia.QAudioEncoderSettings.setEncodingMode?4(QMultimedia.EncodingMode) +QtMultimedia.QAudioEncoderSettings.codec?4() -> QString +QtMultimedia.QAudioEncoderSettings.setCodec?4(QString) +QtMultimedia.QAudioEncoderSettings.bitRate?4() -> int +QtMultimedia.QAudioEncoderSettings.setBitRate?4(int) +QtMultimedia.QAudioEncoderSettings.channelCount?4() -> int +QtMultimedia.QAudioEncoderSettings.setChannelCount?4(int) +QtMultimedia.QAudioEncoderSettings.sampleRate?4() -> int +QtMultimedia.QAudioEncoderSettings.setSampleRate?4(int) +QtMultimedia.QAudioEncoderSettings.quality?4() -> QMultimedia.EncodingQuality +QtMultimedia.QAudioEncoderSettings.setQuality?4(QMultimedia.EncodingQuality) +QtMultimedia.QAudioEncoderSettings.encodingOption?4(QString) -> QVariant +QtMultimedia.QAudioEncoderSettings.encodingOptions?4() -> QVariantMap +QtMultimedia.QAudioEncoderSettings.setEncodingOption?4(QString, QVariant) +QtMultimedia.QAudioEncoderSettings.setEncodingOptions?4(QVariantMap) +QtMultimedia.QVideoEncoderSettings?1() +QtMultimedia.QVideoEncoderSettings.__init__?1(self) +QtMultimedia.QVideoEncoderSettings?1(QVideoEncoderSettings) +QtMultimedia.QVideoEncoderSettings.__init__?1(self, QVideoEncoderSettings) +QtMultimedia.QVideoEncoderSettings.isNull?4() -> bool +QtMultimedia.QVideoEncoderSettings.encodingMode?4() -> QMultimedia.EncodingMode +QtMultimedia.QVideoEncoderSettings.setEncodingMode?4(QMultimedia.EncodingMode) +QtMultimedia.QVideoEncoderSettings.codec?4() -> QString +QtMultimedia.QVideoEncoderSettings.setCodec?4(QString) +QtMultimedia.QVideoEncoderSettings.resolution?4() -> QSize +QtMultimedia.QVideoEncoderSettings.setResolution?4(QSize) +QtMultimedia.QVideoEncoderSettings.setResolution?4(int, int) +QtMultimedia.QVideoEncoderSettings.frameRate?4() -> float +QtMultimedia.QVideoEncoderSettings.setFrameRate?4(float) +QtMultimedia.QVideoEncoderSettings.bitRate?4() -> int +QtMultimedia.QVideoEncoderSettings.setBitRate?4(int) +QtMultimedia.QVideoEncoderSettings.quality?4() -> QMultimedia.EncodingQuality +QtMultimedia.QVideoEncoderSettings.setQuality?4(QMultimedia.EncodingQuality) +QtMultimedia.QVideoEncoderSettings.encodingOption?4(QString) -> QVariant +QtMultimedia.QVideoEncoderSettings.encodingOptions?4() -> QVariantMap +QtMultimedia.QVideoEncoderSettings.setEncodingOption?4(QString, QVariant) +QtMultimedia.QVideoEncoderSettings.setEncodingOptions?4(QVariantMap) +QtMultimedia.QImageEncoderSettings?1() +QtMultimedia.QImageEncoderSettings.__init__?1(self) +QtMultimedia.QImageEncoderSettings?1(QImageEncoderSettings) +QtMultimedia.QImageEncoderSettings.__init__?1(self, QImageEncoderSettings) +QtMultimedia.QImageEncoderSettings.isNull?4() -> bool +QtMultimedia.QImageEncoderSettings.codec?4() -> QString +QtMultimedia.QImageEncoderSettings.setCodec?4(QString) +QtMultimedia.QImageEncoderSettings.resolution?4() -> QSize +QtMultimedia.QImageEncoderSettings.setResolution?4(QSize) +QtMultimedia.QImageEncoderSettings.setResolution?4(int, int) +QtMultimedia.QImageEncoderSettings.quality?4() -> QMultimedia.EncodingQuality +QtMultimedia.QImageEncoderSettings.setQuality?4(QMultimedia.EncodingQuality) +QtMultimedia.QImageEncoderSettings.encodingOption?4(QString) -> QVariant +QtMultimedia.QImageEncoderSettings.encodingOptions?4() -> QVariantMap +QtMultimedia.QImageEncoderSettings.setEncodingOption?4(QString, QVariant) +QtMultimedia.QImageEncoderSettings.setEncodingOptions?4(QVariantMap) +QtMultimedia.QMediaGaplessPlaybackControl?1(QObject parent=None) +QtMultimedia.QMediaGaplessPlaybackControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaGaplessPlaybackControl.nextMedia?4() -> QMediaContent +QtMultimedia.QMediaGaplessPlaybackControl.setNextMedia?4(QMediaContent) +QtMultimedia.QMediaGaplessPlaybackControl.isCrossfadeSupported?4() -> bool +QtMultimedia.QMediaGaplessPlaybackControl.crossfadeTime?4() -> float +QtMultimedia.QMediaGaplessPlaybackControl.setCrossfadeTime?4(float) +QtMultimedia.QMediaGaplessPlaybackControl.crossfadeTimeChanged?4(float) +QtMultimedia.QMediaGaplessPlaybackControl.nextMediaChanged?4(QMediaContent) +QtMultimedia.QMediaGaplessPlaybackControl.advancedToNextMedia?4() +QtMultimedia.QMediaMetaData.AlbumArtist?7 +QtMultimedia.QMediaMetaData.AlbumTitle?7 +QtMultimedia.QMediaMetaData.AudioBitRate?7 +QtMultimedia.QMediaMetaData.AudioCodec?7 +QtMultimedia.QMediaMetaData.Author?7 +QtMultimedia.QMediaMetaData.AverageLevel?7 +QtMultimedia.QMediaMetaData.CameraManufacturer?7 +QtMultimedia.QMediaMetaData.CameraModel?7 +QtMultimedia.QMediaMetaData.Category?7 +QtMultimedia.QMediaMetaData.ChannelCount?7 +QtMultimedia.QMediaMetaData.ChapterNumber?7 +QtMultimedia.QMediaMetaData.Comment?7 +QtMultimedia.QMediaMetaData.Composer?7 +QtMultimedia.QMediaMetaData.Conductor?7 +QtMultimedia.QMediaMetaData.Contrast?7 +QtMultimedia.QMediaMetaData.ContributingArtist?7 +QtMultimedia.QMediaMetaData.Copyright?7 +QtMultimedia.QMediaMetaData.CoverArtImage?7 +QtMultimedia.QMediaMetaData.CoverArtUrlLarge?7 +QtMultimedia.QMediaMetaData.CoverArtUrlSmall?7 +QtMultimedia.QMediaMetaData.Date?7 +QtMultimedia.QMediaMetaData.DateTimeDigitized?7 +QtMultimedia.QMediaMetaData.DateTimeOriginal?7 +QtMultimedia.QMediaMetaData.Description?7 +QtMultimedia.QMediaMetaData.DeviceSettingDescription?7 +QtMultimedia.QMediaMetaData.DigitalZoomRatio?7 +QtMultimedia.QMediaMetaData.Director?7 +QtMultimedia.QMediaMetaData.Duration?7 +QtMultimedia.QMediaMetaData.Event?7 +QtMultimedia.QMediaMetaData.ExposureBiasValue?7 +QtMultimedia.QMediaMetaData.ExposureMode?7 +QtMultimedia.QMediaMetaData.ExposureProgram?7 +QtMultimedia.QMediaMetaData.ExposureTime?7 +QtMultimedia.QMediaMetaData.FNumber?7 +QtMultimedia.QMediaMetaData.Flash?7 +QtMultimedia.QMediaMetaData.FocalLength?7 +QtMultimedia.QMediaMetaData.FocalLengthIn35mmFilm?7 +QtMultimedia.QMediaMetaData.GPSAltitude?7 +QtMultimedia.QMediaMetaData.GPSAreaInformation?7 +QtMultimedia.QMediaMetaData.GPSDOP?7 +QtMultimedia.QMediaMetaData.GPSImgDirection?7 +QtMultimedia.QMediaMetaData.GPSImgDirectionRef?7 +QtMultimedia.QMediaMetaData.GPSLatitude?7 +QtMultimedia.QMediaMetaData.GPSLongitude?7 +QtMultimedia.QMediaMetaData.GPSMapDatum?7 +QtMultimedia.QMediaMetaData.GPSProcessingMethod?7 +QtMultimedia.QMediaMetaData.GPSSatellites?7 +QtMultimedia.QMediaMetaData.GPSSpeed?7 +QtMultimedia.QMediaMetaData.GPSStatus?7 +QtMultimedia.QMediaMetaData.GPSTimeStamp?7 +QtMultimedia.QMediaMetaData.GPSTrack?7 +QtMultimedia.QMediaMetaData.GPSTrackRef?7 +QtMultimedia.QMediaMetaData.GainControl?7 +QtMultimedia.QMediaMetaData.Genre?7 +QtMultimedia.QMediaMetaData.ISOSpeedRatings?7 +QtMultimedia.QMediaMetaData.Keywords?7 +QtMultimedia.QMediaMetaData.Language?7 +QtMultimedia.QMediaMetaData.LeadPerformer?7 +QtMultimedia.QMediaMetaData.LightSource?7 +QtMultimedia.QMediaMetaData.Lyrics?7 +QtMultimedia.QMediaMetaData.MediaType?7 +QtMultimedia.QMediaMetaData.MeteringMode?7 +QtMultimedia.QMediaMetaData.Mood?7 +QtMultimedia.QMediaMetaData.Orientation?7 +QtMultimedia.QMediaMetaData.ParentalRating?7 +QtMultimedia.QMediaMetaData.PeakValue?7 +QtMultimedia.QMediaMetaData.PixelAspectRatio?7 +QtMultimedia.QMediaMetaData.PosterImage?7 +QtMultimedia.QMediaMetaData.PosterUrl?7 +QtMultimedia.QMediaMetaData.Publisher?7 +QtMultimedia.QMediaMetaData.RatingOrganization?7 +QtMultimedia.QMediaMetaData.Resolution?7 +QtMultimedia.QMediaMetaData.SampleRate?7 +QtMultimedia.QMediaMetaData.Saturation?7 +QtMultimedia.QMediaMetaData.SceneCaptureType?7 +QtMultimedia.QMediaMetaData.Sharpness?7 +QtMultimedia.QMediaMetaData.Size?7 +QtMultimedia.QMediaMetaData.SubTitle?7 +QtMultimedia.QMediaMetaData.Subject?7 +QtMultimedia.QMediaMetaData.SubjectDistance?7 +QtMultimedia.QMediaMetaData.ThumbnailImage?7 +QtMultimedia.QMediaMetaData.Title?7 +QtMultimedia.QMediaMetaData.TrackCount?7 +QtMultimedia.QMediaMetaData.TrackNumber?7 +QtMultimedia.QMediaMetaData.UserRating?7 +QtMultimedia.QMediaMetaData.VideoBitRate?7 +QtMultimedia.QMediaMetaData.VideoCodec?7 +QtMultimedia.QMediaMetaData.VideoFrameRate?7 +QtMultimedia.QMediaMetaData.WhiteBalance?7 +QtMultimedia.QMediaMetaData.Writer?7 +QtMultimedia.QMediaMetaData.Year?7 +QtMultimedia.QMediaNetworkAccessControl?1(QObject parent=None) +QtMultimedia.QMediaNetworkAccessControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaNetworkAccessControl.setConfigurations?4(unknown-type) +QtMultimedia.QMediaNetworkAccessControl.currentConfiguration?4() -> QNetworkConfiguration +QtMultimedia.QMediaNetworkAccessControl.configurationChanged?4(QNetworkConfiguration) +QtMultimedia.QMediaPlayer.Error?10 +QtMultimedia.QMediaPlayer.Error.NoError?10 +QtMultimedia.QMediaPlayer.Error.ResourceError?10 +QtMultimedia.QMediaPlayer.Error.FormatError?10 +QtMultimedia.QMediaPlayer.Error.NetworkError?10 +QtMultimedia.QMediaPlayer.Error.AccessDeniedError?10 +QtMultimedia.QMediaPlayer.Error.ServiceMissingError?10 +QtMultimedia.QMediaPlayer.Flag?10 +QtMultimedia.QMediaPlayer.Flag.LowLatency?10 +QtMultimedia.QMediaPlayer.Flag.StreamPlayback?10 +QtMultimedia.QMediaPlayer.Flag.VideoSurface?10 +QtMultimedia.QMediaPlayer.MediaStatus?10 +QtMultimedia.QMediaPlayer.MediaStatus.UnknownMediaStatus?10 +QtMultimedia.QMediaPlayer.MediaStatus.NoMedia?10 +QtMultimedia.QMediaPlayer.MediaStatus.LoadingMedia?10 +QtMultimedia.QMediaPlayer.MediaStatus.LoadedMedia?10 +QtMultimedia.QMediaPlayer.MediaStatus.StalledMedia?10 +QtMultimedia.QMediaPlayer.MediaStatus.BufferingMedia?10 +QtMultimedia.QMediaPlayer.MediaStatus.BufferedMedia?10 +QtMultimedia.QMediaPlayer.MediaStatus.EndOfMedia?10 +QtMultimedia.QMediaPlayer.MediaStatus.InvalidMedia?10 +QtMultimedia.QMediaPlayer.State?10 +QtMultimedia.QMediaPlayer.State.StoppedState?10 +QtMultimedia.QMediaPlayer.State.PlayingState?10 +QtMultimedia.QMediaPlayer.State.PausedState?10 +QtMultimedia.QMediaPlayer?1(QObject parent=None, QMediaPlayer.Flags flags=QMediaPlayer.Flags()) +QtMultimedia.QMediaPlayer.__init__?1(self, QObject parent=None, QMediaPlayer.Flags flags=QMediaPlayer.Flags()) +QtMultimedia.QMediaPlayer.hasSupport?4(QString, QStringList codecs=[], QMediaPlayer.Flags flags=QMediaPlayer.Flags()) -> QMultimedia.SupportEstimate +QtMultimedia.QMediaPlayer.supportedMimeTypes?4(QMediaPlayer.Flags flags=QMediaPlayer.Flags()) -> QStringList +QtMultimedia.QMediaPlayer.setVideoOutput?4(QVideoWidget) +QtMultimedia.QMediaPlayer.setVideoOutput?4(QGraphicsVideoItem) +QtMultimedia.QMediaPlayer.setVideoOutput?4(QAbstractVideoSurface) +QtMultimedia.QMediaPlayer.setVideoOutput?4(unknown-type) +QtMultimedia.QMediaPlayer.media?4() -> QMediaContent +QtMultimedia.QMediaPlayer.mediaStream?4() -> QIODevice +QtMultimedia.QMediaPlayer.playlist?4() -> QMediaPlaylist +QtMultimedia.QMediaPlayer.currentMedia?4() -> QMediaContent +QtMultimedia.QMediaPlayer.state?4() -> QMediaPlayer.State +QtMultimedia.QMediaPlayer.mediaStatus?4() -> QMediaPlayer.MediaStatus +QtMultimedia.QMediaPlayer.duration?4() -> int +QtMultimedia.QMediaPlayer.position?4() -> int +QtMultimedia.QMediaPlayer.volume?4() -> int +QtMultimedia.QMediaPlayer.isMuted?4() -> bool +QtMultimedia.QMediaPlayer.isAudioAvailable?4() -> bool +QtMultimedia.QMediaPlayer.isVideoAvailable?4() -> bool +QtMultimedia.QMediaPlayer.bufferStatus?4() -> int +QtMultimedia.QMediaPlayer.isSeekable?4() -> bool +QtMultimedia.QMediaPlayer.playbackRate?4() -> float +QtMultimedia.QMediaPlayer.error?4() -> QMediaPlayer.Error +QtMultimedia.QMediaPlayer.errorString?4() -> QString +QtMultimedia.QMediaPlayer.currentNetworkConfiguration?4() -> QNetworkConfiguration +QtMultimedia.QMediaPlayer.availability?4() -> QMultimedia.AvailabilityStatus +QtMultimedia.QMediaPlayer.play?4() +QtMultimedia.QMediaPlayer.pause?4() +QtMultimedia.QMediaPlayer.stop?4() +QtMultimedia.QMediaPlayer.setPosition?4(int) +QtMultimedia.QMediaPlayer.setVolume?4(int) +QtMultimedia.QMediaPlayer.setMuted?4(bool) +QtMultimedia.QMediaPlayer.setPlaybackRate?4(float) +QtMultimedia.QMediaPlayer.setMedia?4(QMediaContent, QIODevice stream=None) +QtMultimedia.QMediaPlayer.setPlaylist?4(QMediaPlaylist) +QtMultimedia.QMediaPlayer.setNetworkConfigurations?4(unknown-type) +QtMultimedia.QMediaPlayer.mediaChanged?4(QMediaContent) +QtMultimedia.QMediaPlayer.currentMediaChanged?4(QMediaContent) +QtMultimedia.QMediaPlayer.stateChanged?4(QMediaPlayer.State) +QtMultimedia.QMediaPlayer.mediaStatusChanged?4(QMediaPlayer.MediaStatus) +QtMultimedia.QMediaPlayer.durationChanged?4(int) +QtMultimedia.QMediaPlayer.positionChanged?4(int) +QtMultimedia.QMediaPlayer.volumeChanged?4(int) +QtMultimedia.QMediaPlayer.mutedChanged?4(bool) +QtMultimedia.QMediaPlayer.audioAvailableChanged?4(bool) +QtMultimedia.QMediaPlayer.videoAvailableChanged?4(bool) +QtMultimedia.QMediaPlayer.bufferStatusChanged?4(int) +QtMultimedia.QMediaPlayer.seekableChanged?4(bool) +QtMultimedia.QMediaPlayer.playbackRateChanged?4(float) +QtMultimedia.QMediaPlayer.error?4(QMediaPlayer.Error) +QtMultimedia.QMediaPlayer.networkConfigurationChanged?4(QNetworkConfiguration) +QtMultimedia.QMediaPlayer.bind?4(QObject) -> bool +QtMultimedia.QMediaPlayer.unbind?4(QObject) +QtMultimedia.QMediaPlayer.audioRole?4() -> QAudio.Role +QtMultimedia.QMediaPlayer.setAudioRole?4(QAudio.Role) +QtMultimedia.QMediaPlayer.supportedAudioRoles?4() -> unknown-type +QtMultimedia.QMediaPlayer.audioRoleChanged?4(QAudio.Role) +QtMultimedia.QMediaPlayer.customAudioRole?4() -> QString +QtMultimedia.QMediaPlayer.setCustomAudioRole?4(QString) +QtMultimedia.QMediaPlayer.supportedCustomAudioRoles?4() -> QStringList +QtMultimedia.QMediaPlayer.customAudioRoleChanged?4(QString) +QtMultimedia.QMediaPlayer.Flags?1() +QtMultimedia.QMediaPlayer.Flags.__init__?1(self) +QtMultimedia.QMediaPlayer.Flags?1(int) +QtMultimedia.QMediaPlayer.Flags.__init__?1(self, int) +QtMultimedia.QMediaPlayer.Flags?1(QMediaPlayer.Flags) +QtMultimedia.QMediaPlayer.Flags.__init__?1(self, QMediaPlayer.Flags) +QtMultimedia.QMediaPlayerControl?1(QObject parent=None) +QtMultimedia.QMediaPlayerControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaPlayerControl.state?4() -> QMediaPlayer.State +QtMultimedia.QMediaPlayerControl.mediaStatus?4() -> QMediaPlayer.MediaStatus +QtMultimedia.QMediaPlayerControl.duration?4() -> int +QtMultimedia.QMediaPlayerControl.position?4() -> int +QtMultimedia.QMediaPlayerControl.setPosition?4(int) +QtMultimedia.QMediaPlayerControl.volume?4() -> int +QtMultimedia.QMediaPlayerControl.setVolume?4(int) +QtMultimedia.QMediaPlayerControl.isMuted?4() -> bool +QtMultimedia.QMediaPlayerControl.setMuted?4(bool) +QtMultimedia.QMediaPlayerControl.bufferStatus?4() -> int +QtMultimedia.QMediaPlayerControl.isAudioAvailable?4() -> bool +QtMultimedia.QMediaPlayerControl.isVideoAvailable?4() -> bool +QtMultimedia.QMediaPlayerControl.isSeekable?4() -> bool +QtMultimedia.QMediaPlayerControl.availablePlaybackRanges?4() -> QMediaTimeRange +QtMultimedia.QMediaPlayerControl.playbackRate?4() -> float +QtMultimedia.QMediaPlayerControl.setPlaybackRate?4(float) +QtMultimedia.QMediaPlayerControl.media?4() -> QMediaContent +QtMultimedia.QMediaPlayerControl.mediaStream?4() -> QIODevice +QtMultimedia.QMediaPlayerControl.setMedia?4(QMediaContent, QIODevice) +QtMultimedia.QMediaPlayerControl.play?4() +QtMultimedia.QMediaPlayerControl.pause?4() +QtMultimedia.QMediaPlayerControl.stop?4() +QtMultimedia.QMediaPlayerControl.mediaChanged?4(QMediaContent) +QtMultimedia.QMediaPlayerControl.durationChanged?4(int) +QtMultimedia.QMediaPlayerControl.positionChanged?4(int) +QtMultimedia.QMediaPlayerControl.stateChanged?4(QMediaPlayer.State) +QtMultimedia.QMediaPlayerControl.mediaStatusChanged?4(QMediaPlayer.MediaStatus) +QtMultimedia.QMediaPlayerControl.volumeChanged?4(int) +QtMultimedia.QMediaPlayerControl.mutedChanged?4(bool) +QtMultimedia.QMediaPlayerControl.audioAvailableChanged?4(bool) +QtMultimedia.QMediaPlayerControl.videoAvailableChanged?4(bool) +QtMultimedia.QMediaPlayerControl.bufferStatusChanged?4(int) +QtMultimedia.QMediaPlayerControl.seekableChanged?4(bool) +QtMultimedia.QMediaPlayerControl.availablePlaybackRangesChanged?4(QMediaTimeRange) +QtMultimedia.QMediaPlayerControl.playbackRateChanged?4(float) +QtMultimedia.QMediaPlayerControl.error?4(int, QString) +QtMultimedia.QMediaPlaylist.Error?10 +QtMultimedia.QMediaPlaylist.Error.NoError?10 +QtMultimedia.QMediaPlaylist.Error.FormatError?10 +QtMultimedia.QMediaPlaylist.Error.FormatNotSupportedError?10 +QtMultimedia.QMediaPlaylist.Error.NetworkError?10 +QtMultimedia.QMediaPlaylist.Error.AccessDeniedError?10 +QtMultimedia.QMediaPlaylist.PlaybackMode?10 +QtMultimedia.QMediaPlaylist.PlaybackMode.CurrentItemOnce?10 +QtMultimedia.QMediaPlaylist.PlaybackMode.CurrentItemInLoop?10 +QtMultimedia.QMediaPlaylist.PlaybackMode.Sequential?10 +QtMultimedia.QMediaPlaylist.PlaybackMode.Loop?10 +QtMultimedia.QMediaPlaylist.PlaybackMode.Random?10 +QtMultimedia.QMediaPlaylist?1(QObject parent=None) +QtMultimedia.QMediaPlaylist.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaPlaylist.mediaObject?4() -> QMediaObject +QtMultimedia.QMediaPlaylist.playbackMode?4() -> QMediaPlaylist.PlaybackMode +QtMultimedia.QMediaPlaylist.setPlaybackMode?4(QMediaPlaylist.PlaybackMode) +QtMultimedia.QMediaPlaylist.currentIndex?4() -> int +QtMultimedia.QMediaPlaylist.currentMedia?4() -> QMediaContent +QtMultimedia.QMediaPlaylist.nextIndex?4(int steps=1) -> int +QtMultimedia.QMediaPlaylist.previousIndex?4(int steps=1) -> int +QtMultimedia.QMediaPlaylist.media?4(int) -> QMediaContent +QtMultimedia.QMediaPlaylist.mediaCount?4() -> int +QtMultimedia.QMediaPlaylist.isEmpty?4() -> bool +QtMultimedia.QMediaPlaylist.isReadOnly?4() -> bool +QtMultimedia.QMediaPlaylist.addMedia?4(QMediaContent) -> bool +QtMultimedia.QMediaPlaylist.addMedia?4(unknown-type) -> bool +QtMultimedia.QMediaPlaylist.insertMedia?4(int, QMediaContent) -> bool +QtMultimedia.QMediaPlaylist.insertMedia?4(int, unknown-type) -> bool +QtMultimedia.QMediaPlaylist.removeMedia?4(int) -> bool +QtMultimedia.QMediaPlaylist.removeMedia?4(int, int) -> bool +QtMultimedia.QMediaPlaylist.clear?4() -> bool +QtMultimedia.QMediaPlaylist.load?4(QNetworkRequest, str format=None) +QtMultimedia.QMediaPlaylist.load?4(QUrl, str format=None) +QtMultimedia.QMediaPlaylist.load?4(QIODevice, str format=None) +QtMultimedia.QMediaPlaylist.save?4(QUrl, str format=None) -> bool +QtMultimedia.QMediaPlaylist.save?4(QIODevice, str) -> bool +QtMultimedia.QMediaPlaylist.error?4() -> QMediaPlaylist.Error +QtMultimedia.QMediaPlaylist.errorString?4() -> QString +QtMultimedia.QMediaPlaylist.moveMedia?4(int, int) -> bool +QtMultimedia.QMediaPlaylist.shuffle?4() +QtMultimedia.QMediaPlaylist.next?4() +QtMultimedia.QMediaPlaylist.previous?4() +QtMultimedia.QMediaPlaylist.setCurrentIndex?4(int) +QtMultimedia.QMediaPlaylist.currentIndexChanged?4(int) +QtMultimedia.QMediaPlaylist.playbackModeChanged?4(QMediaPlaylist.PlaybackMode) +QtMultimedia.QMediaPlaylist.currentMediaChanged?4(QMediaContent) +QtMultimedia.QMediaPlaylist.mediaAboutToBeInserted?4(int, int) +QtMultimedia.QMediaPlaylist.mediaInserted?4(int, int) +QtMultimedia.QMediaPlaylist.mediaAboutToBeRemoved?4(int, int) +QtMultimedia.QMediaPlaylist.mediaRemoved?4(int, int) +QtMultimedia.QMediaPlaylist.mediaChanged?4(int, int) +QtMultimedia.QMediaPlaylist.loaded?4() +QtMultimedia.QMediaPlaylist.loadFailed?4() +QtMultimedia.QMediaPlaylist.setMediaObject?4(QMediaObject) -> bool +QtMultimedia.QMediaRecorderControl?1(QObject parent=None) +QtMultimedia.QMediaRecorderControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaRecorderControl.outputLocation?4() -> QUrl +QtMultimedia.QMediaRecorderControl.setOutputLocation?4(QUrl) -> bool +QtMultimedia.QMediaRecorderControl.state?4() -> QMediaRecorder.State +QtMultimedia.QMediaRecorderControl.status?4() -> QMediaRecorder.Status +QtMultimedia.QMediaRecorderControl.duration?4() -> int +QtMultimedia.QMediaRecorderControl.isMuted?4() -> bool +QtMultimedia.QMediaRecorderControl.volume?4() -> float +QtMultimedia.QMediaRecorderControl.applySettings?4() +QtMultimedia.QMediaRecorderControl.stateChanged?4(QMediaRecorder.State) +QtMultimedia.QMediaRecorderControl.statusChanged?4(QMediaRecorder.Status) +QtMultimedia.QMediaRecorderControl.durationChanged?4(int) +QtMultimedia.QMediaRecorderControl.mutedChanged?4(bool) +QtMultimedia.QMediaRecorderControl.volumeChanged?4(float) +QtMultimedia.QMediaRecorderControl.actualLocationChanged?4(QUrl) +QtMultimedia.QMediaRecorderControl.error?4(int, QString) +QtMultimedia.QMediaRecorderControl.setState?4(QMediaRecorder.State) +QtMultimedia.QMediaRecorderControl.setMuted?4(bool) +QtMultimedia.QMediaRecorderControl.setVolume?4(float) +QtMultimedia.QMediaResource?1() +QtMultimedia.QMediaResource.__init__?1(self) +QtMultimedia.QMediaResource?1(QUrl, QString mimeType='') +QtMultimedia.QMediaResource.__init__?1(self, QUrl, QString mimeType='') +QtMultimedia.QMediaResource?1(QNetworkRequest, QString mimeType='') +QtMultimedia.QMediaResource.__init__?1(self, QNetworkRequest, QString mimeType='') +QtMultimedia.QMediaResource?1(QMediaResource) +QtMultimedia.QMediaResource.__init__?1(self, QMediaResource) +QtMultimedia.QMediaResource.isNull?4() -> bool +QtMultimedia.QMediaResource.url?4() -> QUrl +QtMultimedia.QMediaResource.request?4() -> QNetworkRequest +QtMultimedia.QMediaResource.mimeType?4() -> QString +QtMultimedia.QMediaResource.language?4() -> QString +QtMultimedia.QMediaResource.setLanguage?4(QString) +QtMultimedia.QMediaResource.audioCodec?4() -> QString +QtMultimedia.QMediaResource.setAudioCodec?4(QString) +QtMultimedia.QMediaResource.videoCodec?4() -> QString +QtMultimedia.QMediaResource.setVideoCodec?4(QString) +QtMultimedia.QMediaResource.dataSize?4() -> int +QtMultimedia.QMediaResource.setDataSize?4(int) +QtMultimedia.QMediaResource.audioBitRate?4() -> int +QtMultimedia.QMediaResource.setAudioBitRate?4(int) +QtMultimedia.QMediaResource.sampleRate?4() -> int +QtMultimedia.QMediaResource.setSampleRate?4(int) +QtMultimedia.QMediaResource.channelCount?4() -> int +QtMultimedia.QMediaResource.setChannelCount?4(int) +QtMultimedia.QMediaResource.videoBitRate?4() -> int +QtMultimedia.QMediaResource.setVideoBitRate?4(int) +QtMultimedia.QMediaResource.resolution?4() -> QSize +QtMultimedia.QMediaResource.setResolution?4(QSize) +QtMultimedia.QMediaResource.setResolution?4(int, int) +QtMultimedia.QMediaService?1(QObject) +QtMultimedia.QMediaService.__init__?1(self, QObject) +QtMultimedia.QMediaService.requestControl?4(str) -> QMediaControl +QtMultimedia.QMediaService.releaseControl?4(QMediaControl) +QtMultimedia.QMediaStreamsControl.StreamType?10 +QtMultimedia.QMediaStreamsControl.StreamType.UnknownStream?10 +QtMultimedia.QMediaStreamsControl.StreamType.VideoStream?10 +QtMultimedia.QMediaStreamsControl.StreamType.AudioStream?10 +QtMultimedia.QMediaStreamsControl.StreamType.SubPictureStream?10 +QtMultimedia.QMediaStreamsControl.StreamType.DataStream?10 +QtMultimedia.QMediaStreamsControl?1(QObject parent=None) +QtMultimedia.QMediaStreamsControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaStreamsControl.streamCount?4() -> int +QtMultimedia.QMediaStreamsControl.streamType?4(int) -> QMediaStreamsControl.StreamType +QtMultimedia.QMediaStreamsControl.metaData?4(int, QString) -> QVariant +QtMultimedia.QMediaStreamsControl.isActive?4(int) -> bool +QtMultimedia.QMediaStreamsControl.setActive?4(int, bool) +QtMultimedia.QMediaStreamsControl.streamsChanged?4() +QtMultimedia.QMediaStreamsControl.activeStreamsChanged?4() +QtMultimedia.QMediaTimeInterval?1() +QtMultimedia.QMediaTimeInterval.__init__?1(self) +QtMultimedia.QMediaTimeInterval?1(int, int) +QtMultimedia.QMediaTimeInterval.__init__?1(self, int, int) +QtMultimedia.QMediaTimeInterval?1(QMediaTimeInterval) +QtMultimedia.QMediaTimeInterval.__init__?1(self, QMediaTimeInterval) +QtMultimedia.QMediaTimeInterval.start?4() -> int +QtMultimedia.QMediaTimeInterval.end?4() -> int +QtMultimedia.QMediaTimeInterval.contains?4(int) -> bool +QtMultimedia.QMediaTimeInterval.isNormal?4() -> bool +QtMultimedia.QMediaTimeInterval.normalized?4() -> QMediaTimeInterval +QtMultimedia.QMediaTimeInterval.translated?4(int) -> QMediaTimeInterval +QtMultimedia.QMediaTimeRange?1() +QtMultimedia.QMediaTimeRange.__init__?1(self) +QtMultimedia.QMediaTimeRange?1(int, int) +QtMultimedia.QMediaTimeRange.__init__?1(self, int, int) +QtMultimedia.QMediaTimeRange?1(QMediaTimeInterval) +QtMultimedia.QMediaTimeRange.__init__?1(self, QMediaTimeInterval) +QtMultimedia.QMediaTimeRange?1(QMediaTimeRange) +QtMultimedia.QMediaTimeRange.__init__?1(self, QMediaTimeRange) +QtMultimedia.QMediaTimeRange.earliestTime?4() -> int +QtMultimedia.QMediaTimeRange.latestTime?4() -> int +QtMultimedia.QMediaTimeRange.intervals?4() -> unknown-type +QtMultimedia.QMediaTimeRange.isEmpty?4() -> bool +QtMultimedia.QMediaTimeRange.isContinuous?4() -> bool +QtMultimedia.QMediaTimeRange.contains?4(int) -> bool +QtMultimedia.QMediaTimeRange.addInterval?4(int, int) +QtMultimedia.QMediaTimeRange.addInterval?4(QMediaTimeInterval) +QtMultimedia.QMediaTimeRange.addTimeRange?4(QMediaTimeRange) +QtMultimedia.QMediaTimeRange.removeInterval?4(int, int) +QtMultimedia.QMediaTimeRange.removeInterval?4(QMediaTimeInterval) +QtMultimedia.QMediaTimeRange.removeTimeRange?4(QMediaTimeRange) +QtMultimedia.QMediaTimeRange.clear?4() +QtMultimedia.QMediaVideoProbeControl?1(QObject parent=None) +QtMultimedia.QMediaVideoProbeControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMediaVideoProbeControl.videoFrameProbed?4(QVideoFrame) +QtMultimedia.QMediaVideoProbeControl.flush?4() +QtMultimedia.QMetaDataReaderControl?1(QObject parent=None) +QtMultimedia.QMetaDataReaderControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMetaDataReaderControl.isMetaDataAvailable?4() -> bool +QtMultimedia.QMetaDataReaderControl.metaData?4(QString) -> QVariant +QtMultimedia.QMetaDataReaderControl.availableMetaData?4() -> QStringList +QtMultimedia.QMetaDataReaderControl.metaDataChanged?4() +QtMultimedia.QMetaDataReaderControl.metaDataChanged?4(QString, QVariant) +QtMultimedia.QMetaDataReaderControl.metaDataAvailableChanged?4(bool) +QtMultimedia.QMetaDataWriterControl?1(QObject parent=None) +QtMultimedia.QMetaDataWriterControl.__init__?1(self, QObject parent=None) +QtMultimedia.QMetaDataWriterControl.isWritable?4() -> bool +QtMultimedia.QMetaDataWriterControl.isMetaDataAvailable?4() -> bool +QtMultimedia.QMetaDataWriterControl.metaData?4(QString) -> QVariant +QtMultimedia.QMetaDataWriterControl.setMetaData?4(QString, QVariant) +QtMultimedia.QMetaDataWriterControl.availableMetaData?4() -> QStringList +QtMultimedia.QMetaDataWriterControl.metaDataChanged?4() +QtMultimedia.QMetaDataWriterControl.metaDataChanged?4(QString, QVariant) +QtMultimedia.QMetaDataWriterControl.writableChanged?4(bool) +QtMultimedia.QMetaDataWriterControl.metaDataAvailableChanged?4(bool) +QtMultimedia.QMultimedia.AvailabilityStatus?10 +QtMultimedia.QMultimedia.AvailabilityStatus.Available?10 +QtMultimedia.QMultimedia.AvailabilityStatus.ServiceMissing?10 +QtMultimedia.QMultimedia.AvailabilityStatus.Busy?10 +QtMultimedia.QMultimedia.AvailabilityStatus.ResourceError?10 +QtMultimedia.QMultimedia.EncodingMode?10 +QtMultimedia.QMultimedia.EncodingMode.ConstantQualityEncoding?10 +QtMultimedia.QMultimedia.EncodingMode.ConstantBitRateEncoding?10 +QtMultimedia.QMultimedia.EncodingMode.AverageBitRateEncoding?10 +QtMultimedia.QMultimedia.EncodingMode.TwoPassEncoding?10 +QtMultimedia.QMultimedia.EncodingQuality?10 +QtMultimedia.QMultimedia.EncodingQuality.VeryLowQuality?10 +QtMultimedia.QMultimedia.EncodingQuality.LowQuality?10 +QtMultimedia.QMultimedia.EncodingQuality.NormalQuality?10 +QtMultimedia.QMultimedia.EncodingQuality.HighQuality?10 +QtMultimedia.QMultimedia.EncodingQuality.VeryHighQuality?10 +QtMultimedia.QMultimedia.SupportEstimate?10 +QtMultimedia.QMultimedia.SupportEstimate.NotSupported?10 +QtMultimedia.QMultimedia.SupportEstimate.MaybeSupported?10 +QtMultimedia.QMultimedia.SupportEstimate.ProbablySupported?10 +QtMultimedia.QMultimedia.SupportEstimate.PreferredService?10 +QtMultimedia.QRadioData.ProgramType?10 +QtMultimedia.QRadioData.ProgramType.Undefined?10 +QtMultimedia.QRadioData.ProgramType.News?10 +QtMultimedia.QRadioData.ProgramType.CurrentAffairs?10 +QtMultimedia.QRadioData.ProgramType.Information?10 +QtMultimedia.QRadioData.ProgramType.Sport?10 +QtMultimedia.QRadioData.ProgramType.Education?10 +QtMultimedia.QRadioData.ProgramType.Drama?10 +QtMultimedia.QRadioData.ProgramType.Culture?10 +QtMultimedia.QRadioData.ProgramType.Science?10 +QtMultimedia.QRadioData.ProgramType.Varied?10 +QtMultimedia.QRadioData.ProgramType.PopMusic?10 +QtMultimedia.QRadioData.ProgramType.RockMusic?10 +QtMultimedia.QRadioData.ProgramType.EasyListening?10 +QtMultimedia.QRadioData.ProgramType.LightClassical?10 +QtMultimedia.QRadioData.ProgramType.SeriousClassical?10 +QtMultimedia.QRadioData.ProgramType.OtherMusic?10 +QtMultimedia.QRadioData.ProgramType.Weather?10 +QtMultimedia.QRadioData.ProgramType.Finance?10 +QtMultimedia.QRadioData.ProgramType.ChildrensProgrammes?10 +QtMultimedia.QRadioData.ProgramType.SocialAffairs?10 +QtMultimedia.QRadioData.ProgramType.Religion?10 +QtMultimedia.QRadioData.ProgramType.PhoneIn?10 +QtMultimedia.QRadioData.ProgramType.Travel?10 +QtMultimedia.QRadioData.ProgramType.Leisure?10 +QtMultimedia.QRadioData.ProgramType.JazzMusic?10 +QtMultimedia.QRadioData.ProgramType.CountryMusic?10 +QtMultimedia.QRadioData.ProgramType.NationalMusic?10 +QtMultimedia.QRadioData.ProgramType.OldiesMusic?10 +QtMultimedia.QRadioData.ProgramType.FolkMusic?10 +QtMultimedia.QRadioData.ProgramType.Documentary?10 +QtMultimedia.QRadioData.ProgramType.AlarmTest?10 +QtMultimedia.QRadioData.ProgramType.Alarm?10 +QtMultimedia.QRadioData.ProgramType.Talk?10 +QtMultimedia.QRadioData.ProgramType.ClassicRock?10 +QtMultimedia.QRadioData.ProgramType.AdultHits?10 +QtMultimedia.QRadioData.ProgramType.SoftRock?10 +QtMultimedia.QRadioData.ProgramType.Top40?10 +QtMultimedia.QRadioData.ProgramType.Soft?10 +QtMultimedia.QRadioData.ProgramType.Nostalgia?10 +QtMultimedia.QRadioData.ProgramType.Classical?10 +QtMultimedia.QRadioData.ProgramType.RhythmAndBlues?10 +QtMultimedia.QRadioData.ProgramType.SoftRhythmAndBlues?10 +QtMultimedia.QRadioData.ProgramType.Language?10 +QtMultimedia.QRadioData.ProgramType.ReligiousMusic?10 +QtMultimedia.QRadioData.ProgramType.ReligiousTalk?10 +QtMultimedia.QRadioData.ProgramType.Personality?10 +QtMultimedia.QRadioData.ProgramType.Public?10 +QtMultimedia.QRadioData.ProgramType.College?10 +QtMultimedia.QRadioData.Error?10 +QtMultimedia.QRadioData.Error.NoError?10 +QtMultimedia.QRadioData.Error.ResourceError?10 +QtMultimedia.QRadioData.Error.OpenError?10 +QtMultimedia.QRadioData.Error.OutOfRangeError?10 +QtMultimedia.QRadioData?1(QMediaObject, QObject parent=None) +QtMultimedia.QRadioData.__init__?1(self, QMediaObject, QObject parent=None) +QtMultimedia.QRadioData.mediaObject?4() -> QMediaObject +QtMultimedia.QRadioData.availability?4() -> QMultimedia.AvailabilityStatus +QtMultimedia.QRadioData.stationId?4() -> QString +QtMultimedia.QRadioData.programType?4() -> QRadioData.ProgramType +QtMultimedia.QRadioData.programTypeName?4() -> QString +QtMultimedia.QRadioData.stationName?4() -> QString +QtMultimedia.QRadioData.radioText?4() -> QString +QtMultimedia.QRadioData.isAlternativeFrequenciesEnabled?4() -> bool +QtMultimedia.QRadioData.error?4() -> QRadioData.Error +QtMultimedia.QRadioData.errorString?4() -> QString +QtMultimedia.QRadioData.setAlternativeFrequenciesEnabled?4(bool) +QtMultimedia.QRadioData.stationIdChanged?4(QString) +QtMultimedia.QRadioData.programTypeChanged?4(QRadioData.ProgramType) +QtMultimedia.QRadioData.programTypeNameChanged?4(QString) +QtMultimedia.QRadioData.stationNameChanged?4(QString) +QtMultimedia.QRadioData.radioTextChanged?4(QString) +QtMultimedia.QRadioData.alternativeFrequenciesEnabledChanged?4(bool) +QtMultimedia.QRadioData.error?4(QRadioData.Error) +QtMultimedia.QRadioData.setMediaObject?4(QMediaObject) -> bool +QtMultimedia.QRadioDataControl?1(QObject parent=None) +QtMultimedia.QRadioDataControl.__init__?1(self, QObject parent=None) +QtMultimedia.QRadioDataControl.stationId?4() -> QString +QtMultimedia.QRadioDataControl.programType?4() -> QRadioData.ProgramType +QtMultimedia.QRadioDataControl.programTypeName?4() -> QString +QtMultimedia.QRadioDataControl.stationName?4() -> QString +QtMultimedia.QRadioDataControl.radioText?4() -> QString +QtMultimedia.QRadioDataControl.setAlternativeFrequenciesEnabled?4(bool) +QtMultimedia.QRadioDataControl.isAlternativeFrequenciesEnabled?4() -> bool +QtMultimedia.QRadioDataControl.error?4() -> QRadioData.Error +QtMultimedia.QRadioDataControl.errorString?4() -> QString +QtMultimedia.QRadioDataControl.stationIdChanged?4(QString) +QtMultimedia.QRadioDataControl.programTypeChanged?4(QRadioData.ProgramType) +QtMultimedia.QRadioDataControl.programTypeNameChanged?4(QString) +QtMultimedia.QRadioDataControl.stationNameChanged?4(QString) +QtMultimedia.QRadioDataControl.radioTextChanged?4(QString) +QtMultimedia.QRadioDataControl.alternativeFrequenciesEnabledChanged?4(bool) +QtMultimedia.QRadioDataControl.error?4(QRadioData.Error) +QtMultimedia.QRadioTuner.SearchMode?10 +QtMultimedia.QRadioTuner.SearchMode.SearchFast?10 +QtMultimedia.QRadioTuner.SearchMode.SearchGetStationId?10 +QtMultimedia.QRadioTuner.StereoMode?10 +QtMultimedia.QRadioTuner.StereoMode.ForceStereo?10 +QtMultimedia.QRadioTuner.StereoMode.ForceMono?10 +QtMultimedia.QRadioTuner.StereoMode.Auto?10 +QtMultimedia.QRadioTuner.Error?10 +QtMultimedia.QRadioTuner.Error.NoError?10 +QtMultimedia.QRadioTuner.Error.ResourceError?10 +QtMultimedia.QRadioTuner.Error.OpenError?10 +QtMultimedia.QRadioTuner.Error.OutOfRangeError?10 +QtMultimedia.QRadioTuner.Band?10 +QtMultimedia.QRadioTuner.Band.AM?10 +QtMultimedia.QRadioTuner.Band.FM?10 +QtMultimedia.QRadioTuner.Band.SW?10 +QtMultimedia.QRadioTuner.Band.LW?10 +QtMultimedia.QRadioTuner.Band.FM2?10 +QtMultimedia.QRadioTuner.State?10 +QtMultimedia.QRadioTuner.State.ActiveState?10 +QtMultimedia.QRadioTuner.State.StoppedState?10 +QtMultimedia.QRadioTuner?1(QObject parent=None) +QtMultimedia.QRadioTuner.__init__?1(self, QObject parent=None) +QtMultimedia.QRadioTuner.availability?4() -> QMultimedia.AvailabilityStatus +QtMultimedia.QRadioTuner.state?4() -> QRadioTuner.State +QtMultimedia.QRadioTuner.band?4() -> QRadioTuner.Band +QtMultimedia.QRadioTuner.isBandSupported?4(QRadioTuner.Band) -> bool +QtMultimedia.QRadioTuner.frequency?4() -> int +QtMultimedia.QRadioTuner.frequencyStep?4(QRadioTuner.Band) -> int +QtMultimedia.QRadioTuner.frequencyRange?4(QRadioTuner.Band) -> unknown-type +QtMultimedia.QRadioTuner.isStereo?4() -> bool +QtMultimedia.QRadioTuner.setStereoMode?4(QRadioTuner.StereoMode) +QtMultimedia.QRadioTuner.stereoMode?4() -> QRadioTuner.StereoMode +QtMultimedia.QRadioTuner.signalStrength?4() -> int +QtMultimedia.QRadioTuner.volume?4() -> int +QtMultimedia.QRadioTuner.isMuted?4() -> bool +QtMultimedia.QRadioTuner.isSearching?4() -> bool +QtMultimedia.QRadioTuner.isAntennaConnected?4() -> bool +QtMultimedia.QRadioTuner.error?4() -> QRadioTuner.Error +QtMultimedia.QRadioTuner.errorString?4() -> QString +QtMultimedia.QRadioTuner.radioData?4() -> QRadioData +QtMultimedia.QRadioTuner.searchForward?4() +QtMultimedia.QRadioTuner.searchBackward?4() +QtMultimedia.QRadioTuner.searchAllStations?4(QRadioTuner.SearchMode searchMode=QRadioTuner.SearchFast) +QtMultimedia.QRadioTuner.cancelSearch?4() +QtMultimedia.QRadioTuner.setBand?4(QRadioTuner.Band) +QtMultimedia.QRadioTuner.setFrequency?4(int) +QtMultimedia.QRadioTuner.setVolume?4(int) +QtMultimedia.QRadioTuner.setMuted?4(bool) +QtMultimedia.QRadioTuner.start?4() +QtMultimedia.QRadioTuner.stop?4() +QtMultimedia.QRadioTuner.stateChanged?4(QRadioTuner.State) +QtMultimedia.QRadioTuner.bandChanged?4(QRadioTuner.Band) +QtMultimedia.QRadioTuner.frequencyChanged?4(int) +QtMultimedia.QRadioTuner.stereoStatusChanged?4(bool) +QtMultimedia.QRadioTuner.searchingChanged?4(bool) +QtMultimedia.QRadioTuner.signalStrengthChanged?4(int) +QtMultimedia.QRadioTuner.volumeChanged?4(int) +QtMultimedia.QRadioTuner.mutedChanged?4(bool) +QtMultimedia.QRadioTuner.stationFound?4(int, QString) +QtMultimedia.QRadioTuner.antennaConnectedChanged?4(bool) +QtMultimedia.QRadioTuner.error?4(QRadioTuner.Error) +QtMultimedia.QRadioTunerControl?1(QObject parent=None) +QtMultimedia.QRadioTunerControl.__init__?1(self, QObject parent=None) +QtMultimedia.QRadioTunerControl.state?4() -> QRadioTuner.State +QtMultimedia.QRadioTunerControl.band?4() -> QRadioTuner.Band +QtMultimedia.QRadioTunerControl.setBand?4(QRadioTuner.Band) +QtMultimedia.QRadioTunerControl.isBandSupported?4(QRadioTuner.Band) -> bool +QtMultimedia.QRadioTunerControl.frequency?4() -> int +QtMultimedia.QRadioTunerControl.frequencyStep?4(QRadioTuner.Band) -> int +QtMultimedia.QRadioTunerControl.frequencyRange?4(QRadioTuner.Band) -> unknown-type +QtMultimedia.QRadioTunerControl.setFrequency?4(int) +QtMultimedia.QRadioTunerControl.isStereo?4() -> bool +QtMultimedia.QRadioTunerControl.stereoMode?4() -> QRadioTuner.StereoMode +QtMultimedia.QRadioTunerControl.setStereoMode?4(QRadioTuner.StereoMode) +QtMultimedia.QRadioTunerControl.signalStrength?4() -> int +QtMultimedia.QRadioTunerControl.volume?4() -> int +QtMultimedia.QRadioTunerControl.setVolume?4(int) +QtMultimedia.QRadioTunerControl.isMuted?4() -> bool +QtMultimedia.QRadioTunerControl.setMuted?4(bool) +QtMultimedia.QRadioTunerControl.isSearching?4() -> bool +QtMultimedia.QRadioTunerControl.isAntennaConnected?4() -> bool +QtMultimedia.QRadioTunerControl.searchForward?4() +QtMultimedia.QRadioTunerControl.searchBackward?4() +QtMultimedia.QRadioTunerControl.searchAllStations?4(QRadioTuner.SearchMode searchMode=QRadioTuner.SearchFast) +QtMultimedia.QRadioTunerControl.cancelSearch?4() +QtMultimedia.QRadioTunerControl.start?4() +QtMultimedia.QRadioTunerControl.stop?4() +QtMultimedia.QRadioTunerControl.error?4() -> QRadioTuner.Error +QtMultimedia.QRadioTunerControl.errorString?4() -> QString +QtMultimedia.QRadioTunerControl.stateChanged?4(QRadioTuner.State) +QtMultimedia.QRadioTunerControl.bandChanged?4(QRadioTuner.Band) +QtMultimedia.QRadioTunerControl.frequencyChanged?4(int) +QtMultimedia.QRadioTunerControl.stereoStatusChanged?4(bool) +QtMultimedia.QRadioTunerControl.searchingChanged?4(bool) +QtMultimedia.QRadioTunerControl.signalStrengthChanged?4(int) +QtMultimedia.QRadioTunerControl.volumeChanged?4(int) +QtMultimedia.QRadioTunerControl.mutedChanged?4(bool) +QtMultimedia.QRadioTunerControl.error?4(QRadioTuner.Error) +QtMultimedia.QRadioTunerControl.stationFound?4(int, QString) +QtMultimedia.QRadioTunerControl.antennaConnectedChanged?4(bool) +QtMultimedia.QSound.Loop?10 +QtMultimedia.QSound.Loop.Infinite?10 +QtMultimedia.QSound?1(QString, QObject parent=None) +QtMultimedia.QSound.__init__?1(self, QString, QObject parent=None) +QtMultimedia.QSound.play?4(QString) +QtMultimedia.QSound.loops?4() -> int +QtMultimedia.QSound.loopsRemaining?4() -> int +QtMultimedia.QSound.setLoops?4(int) +QtMultimedia.QSound.fileName?4() -> QString +QtMultimedia.QSound.isFinished?4() -> bool +QtMultimedia.QSound.play?4() +QtMultimedia.QSound.stop?4() +QtMultimedia.QSoundEffect.Status?10 +QtMultimedia.QSoundEffect.Status.Null?10 +QtMultimedia.QSoundEffect.Status.Loading?10 +QtMultimedia.QSoundEffect.Status.Ready?10 +QtMultimedia.QSoundEffect.Status.Error?10 +QtMultimedia.QSoundEffect.Loop?10 +QtMultimedia.QSoundEffect.Loop.Infinite?10 +QtMultimedia.QSoundEffect?1(QObject parent=None) +QtMultimedia.QSoundEffect.__init__?1(self, QObject parent=None) +QtMultimedia.QSoundEffect?1(QAudioDeviceInfo, QObject parent=None) +QtMultimedia.QSoundEffect.__init__?1(self, QAudioDeviceInfo, QObject parent=None) +QtMultimedia.QSoundEffect.supportedMimeTypes?4() -> QStringList +QtMultimedia.QSoundEffect.source?4() -> QUrl +QtMultimedia.QSoundEffect.setSource?4(QUrl) +QtMultimedia.QSoundEffect.loopCount?4() -> int +QtMultimedia.QSoundEffect.loopsRemaining?4() -> int +QtMultimedia.QSoundEffect.setLoopCount?4(int) +QtMultimedia.QSoundEffect.volume?4() -> float +QtMultimedia.QSoundEffect.setVolume?4(float) +QtMultimedia.QSoundEffect.isMuted?4() -> bool +QtMultimedia.QSoundEffect.setMuted?4(bool) +QtMultimedia.QSoundEffect.isLoaded?4() -> bool +QtMultimedia.QSoundEffect.isPlaying?4() -> bool +QtMultimedia.QSoundEffect.status?4() -> QSoundEffect.Status +QtMultimedia.QSoundEffect.category?4() -> QString +QtMultimedia.QSoundEffect.setCategory?4(QString) +QtMultimedia.QSoundEffect.sourceChanged?4() +QtMultimedia.QSoundEffect.loopCountChanged?4() +QtMultimedia.QSoundEffect.loopsRemainingChanged?4() +QtMultimedia.QSoundEffect.volumeChanged?4() +QtMultimedia.QSoundEffect.mutedChanged?4() +QtMultimedia.QSoundEffect.loadedChanged?4() +QtMultimedia.QSoundEffect.playingChanged?4() +QtMultimedia.QSoundEffect.statusChanged?4() +QtMultimedia.QSoundEffect.categoryChanged?4() +QtMultimedia.QSoundEffect.play?4() +QtMultimedia.QSoundEffect.stop?4() +QtMultimedia.QVideoDeviceSelectorControl?1(QObject parent=None) +QtMultimedia.QVideoDeviceSelectorControl.__init__?1(self, QObject parent=None) +QtMultimedia.QVideoDeviceSelectorControl.deviceCount?4() -> int +QtMultimedia.QVideoDeviceSelectorControl.deviceName?4(int) -> QString +QtMultimedia.QVideoDeviceSelectorControl.deviceDescription?4(int) -> QString +QtMultimedia.QVideoDeviceSelectorControl.defaultDevice?4() -> int +QtMultimedia.QVideoDeviceSelectorControl.selectedDevice?4() -> int +QtMultimedia.QVideoDeviceSelectorControl.setSelectedDevice?4(int) +QtMultimedia.QVideoDeviceSelectorControl.selectedDeviceChanged?4(int) +QtMultimedia.QVideoDeviceSelectorControl.selectedDeviceChanged?4(QString) +QtMultimedia.QVideoDeviceSelectorControl.devicesChanged?4() +QtMultimedia.QVideoEncoderSettingsControl?1(QObject parent=None) +QtMultimedia.QVideoEncoderSettingsControl.__init__?1(self, QObject parent=None) +QtMultimedia.QVideoEncoderSettingsControl.supportedResolutions?4(QVideoEncoderSettings) -> (unknown-type, bool) +QtMultimedia.QVideoEncoderSettingsControl.supportedFrameRates?4(QVideoEncoderSettings) -> (unknown-type, bool) +QtMultimedia.QVideoEncoderSettingsControl.supportedVideoCodecs?4() -> QStringList +QtMultimedia.QVideoEncoderSettingsControl.videoCodecDescription?4(QString) -> QString +QtMultimedia.QVideoEncoderSettingsControl.videoSettings?4() -> QVideoEncoderSettings +QtMultimedia.QVideoEncoderSettingsControl.setVideoSettings?4(QVideoEncoderSettings) +QtMultimedia.QVideoFrame.PixelFormat?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_Invalid?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_ARGB32?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_ARGB32_Premultiplied?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_RGB32?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_RGB24?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_RGB565?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_RGB555?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_ARGB8565_Premultiplied?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_BGRA32?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_BGRA32_Premultiplied?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_BGR32?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_BGR24?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_BGR565?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_BGR555?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_BGRA5658_Premultiplied?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_AYUV444?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_AYUV444_Premultiplied?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_YUV444?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_YUV420P?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_YV12?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_UYVY?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_YUYV?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_NV12?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_NV21?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_IMC1?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_IMC2?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_IMC3?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_IMC4?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_Y8?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_Y16?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_Jpeg?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_CameraRaw?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_AdobeDng?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_ABGR32?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_YUV422P?10 +QtMultimedia.QVideoFrame.PixelFormat.Format_User?10 +QtMultimedia.QVideoFrame.FieldType?10 +QtMultimedia.QVideoFrame.FieldType.ProgressiveFrame?10 +QtMultimedia.QVideoFrame.FieldType.TopField?10 +QtMultimedia.QVideoFrame.FieldType.BottomField?10 +QtMultimedia.QVideoFrame.FieldType.InterlacedFrame?10 +QtMultimedia.QVideoFrame?1() +QtMultimedia.QVideoFrame.__init__?1(self) +QtMultimedia.QVideoFrame?1(QAbstractVideoBuffer, QSize, QVideoFrame.PixelFormat) +QtMultimedia.QVideoFrame.__init__?1(self, QAbstractVideoBuffer, QSize, QVideoFrame.PixelFormat) +QtMultimedia.QVideoFrame?1(int, QSize, int, QVideoFrame.PixelFormat) +QtMultimedia.QVideoFrame.__init__?1(self, int, QSize, int, QVideoFrame.PixelFormat) +QtMultimedia.QVideoFrame?1(QImage) +QtMultimedia.QVideoFrame.__init__?1(self, QImage) +QtMultimedia.QVideoFrame?1(QVideoFrame) +QtMultimedia.QVideoFrame.__init__?1(self, QVideoFrame) +QtMultimedia.QVideoFrame.isValid?4() -> bool +QtMultimedia.QVideoFrame.pixelFormat?4() -> QVideoFrame.PixelFormat +QtMultimedia.QVideoFrame.handleType?4() -> QAbstractVideoBuffer.HandleType +QtMultimedia.QVideoFrame.size?4() -> QSize +QtMultimedia.QVideoFrame.width?4() -> int +QtMultimedia.QVideoFrame.height?4() -> int +QtMultimedia.QVideoFrame.fieldType?4() -> QVideoFrame.FieldType +QtMultimedia.QVideoFrame.setFieldType?4(QVideoFrame.FieldType) +QtMultimedia.QVideoFrame.isMapped?4() -> bool +QtMultimedia.QVideoFrame.isReadable?4() -> bool +QtMultimedia.QVideoFrame.isWritable?4() -> bool +QtMultimedia.QVideoFrame.mapMode?4() -> QAbstractVideoBuffer.MapMode +QtMultimedia.QVideoFrame.map?4(QAbstractVideoBuffer.MapMode) -> bool +QtMultimedia.QVideoFrame.unmap?4() +QtMultimedia.QVideoFrame.bytesPerLine?4() -> int +QtMultimedia.QVideoFrame.bytesPerLine?4(int) -> int +QtMultimedia.QVideoFrame.bits?4() -> Any +QtMultimedia.QVideoFrame.bits?4(int) -> PyQt5.sip.voidptr +QtMultimedia.QVideoFrame.mappedBytes?4() -> int +QtMultimedia.QVideoFrame.handle?4() -> QVariant +QtMultimedia.QVideoFrame.startTime?4() -> int +QtMultimedia.QVideoFrame.setStartTime?4(int) +QtMultimedia.QVideoFrame.endTime?4() -> int +QtMultimedia.QVideoFrame.setEndTime?4(int) +QtMultimedia.QVideoFrame.pixelFormatFromImageFormat?4(QImage.Format) -> QVideoFrame.PixelFormat +QtMultimedia.QVideoFrame.imageFormatFromPixelFormat?4(QVideoFrame.PixelFormat) -> QImage.Format +QtMultimedia.QVideoFrame.availableMetaData?4() -> QVariantMap +QtMultimedia.QVideoFrame.metaData?4(QString) -> QVariant +QtMultimedia.QVideoFrame.setMetaData?4(QString, QVariant) +QtMultimedia.QVideoFrame.planeCount?4() -> int +QtMultimedia.QVideoFrame.buffer?4() -> QAbstractVideoBuffer +QtMultimedia.QVideoFrame.image?4() -> QImage +QtMultimedia.QVideoProbe?1(QObject parent=None) +QtMultimedia.QVideoProbe.__init__?1(self, QObject parent=None) +QtMultimedia.QVideoProbe.setSource?4(QMediaObject) -> bool +QtMultimedia.QVideoProbe.setSource?4(QMediaRecorder) -> bool +QtMultimedia.QVideoProbe.isActive?4() -> bool +QtMultimedia.QVideoProbe.videoFrameProbed?4(QVideoFrame) +QtMultimedia.QVideoProbe.flush?4() +QtMultimedia.QVideoRendererControl?1(QObject parent=None) +QtMultimedia.QVideoRendererControl.__init__?1(self, QObject parent=None) +QtMultimedia.QVideoRendererControl.surface?4() -> QAbstractVideoSurface +QtMultimedia.QVideoRendererControl.setSurface?4(QAbstractVideoSurface) +QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace?10 +QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace.YCbCr_Undefined?10 +QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace.YCbCr_BT601?10 +QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace.YCbCr_BT709?10 +QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace.YCbCr_xvYCC601?10 +QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace.YCbCr_xvYCC709?10 +QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace.YCbCr_JPEG?10 +QtMultimedia.QVideoSurfaceFormat.Direction?10 +QtMultimedia.QVideoSurfaceFormat.Direction.TopToBottom?10 +QtMultimedia.QVideoSurfaceFormat.Direction.BottomToTop?10 +QtMultimedia.QVideoSurfaceFormat?1() +QtMultimedia.QVideoSurfaceFormat.__init__?1(self) +QtMultimedia.QVideoSurfaceFormat?1(QSize, QVideoFrame.PixelFormat, QAbstractVideoBuffer.HandleType type=QAbstractVideoBuffer.NoHandle) +QtMultimedia.QVideoSurfaceFormat.__init__?1(self, QSize, QVideoFrame.PixelFormat, QAbstractVideoBuffer.HandleType type=QAbstractVideoBuffer.NoHandle) +QtMultimedia.QVideoSurfaceFormat?1(QVideoSurfaceFormat) +QtMultimedia.QVideoSurfaceFormat.__init__?1(self, QVideoSurfaceFormat) +QtMultimedia.QVideoSurfaceFormat.isValid?4() -> bool +QtMultimedia.QVideoSurfaceFormat.pixelFormat?4() -> QVideoFrame.PixelFormat +QtMultimedia.QVideoSurfaceFormat.handleType?4() -> QAbstractVideoBuffer.HandleType +QtMultimedia.QVideoSurfaceFormat.frameSize?4() -> QSize +QtMultimedia.QVideoSurfaceFormat.setFrameSize?4(QSize) +QtMultimedia.QVideoSurfaceFormat.setFrameSize?4(int, int) +QtMultimedia.QVideoSurfaceFormat.frameWidth?4() -> int +QtMultimedia.QVideoSurfaceFormat.frameHeight?4() -> int +QtMultimedia.QVideoSurfaceFormat.viewport?4() -> QRect +QtMultimedia.QVideoSurfaceFormat.setViewport?4(QRect) +QtMultimedia.QVideoSurfaceFormat.scanLineDirection?4() -> QVideoSurfaceFormat.Direction +QtMultimedia.QVideoSurfaceFormat.setScanLineDirection?4(QVideoSurfaceFormat.Direction) +QtMultimedia.QVideoSurfaceFormat.frameRate?4() -> float +QtMultimedia.QVideoSurfaceFormat.setFrameRate?4(float) +QtMultimedia.QVideoSurfaceFormat.pixelAspectRatio?4() -> QSize +QtMultimedia.QVideoSurfaceFormat.setPixelAspectRatio?4(QSize) +QtMultimedia.QVideoSurfaceFormat.setPixelAspectRatio?4(int, int) +QtMultimedia.QVideoSurfaceFormat.yCbCrColorSpace?4() -> QVideoSurfaceFormat.YCbCrColorSpace +QtMultimedia.QVideoSurfaceFormat.setYCbCrColorSpace?4(QVideoSurfaceFormat.YCbCrColorSpace) +QtMultimedia.QVideoSurfaceFormat.sizeHint?4() -> QSize +QtMultimedia.QVideoSurfaceFormat.propertyNames?4() -> unknown-type +QtMultimedia.QVideoSurfaceFormat.property?4(str) -> QVariant +QtMultimedia.QVideoSurfaceFormat.setProperty?4(str, QVariant) +QtMultimedia.QVideoSurfaceFormat.isMirrored?4() -> bool +QtMultimedia.QVideoSurfaceFormat.setMirrored?4(bool) +QtMultimedia.QVideoWindowControl?1(QObject parent=None) +QtMultimedia.QVideoWindowControl.__init__?1(self, QObject parent=None) +QtMultimedia.QVideoWindowControl.winId?4() -> quintptr +QtMultimedia.QVideoWindowControl.setWinId?4(quintptr) +QtMultimedia.QVideoWindowControl.displayRect?4() -> QRect +QtMultimedia.QVideoWindowControl.setDisplayRect?4(QRect) +QtMultimedia.QVideoWindowControl.isFullScreen?4() -> bool +QtMultimedia.QVideoWindowControl.setFullScreen?4(bool) +QtMultimedia.QVideoWindowControl.repaint?4() +QtMultimedia.QVideoWindowControl.nativeSize?4() -> QSize +QtMultimedia.QVideoWindowControl.aspectRatioMode?4() -> Qt.AspectRatioMode +QtMultimedia.QVideoWindowControl.setAspectRatioMode?4(Qt.AspectRatioMode) +QtMultimedia.QVideoWindowControl.brightness?4() -> int +QtMultimedia.QVideoWindowControl.setBrightness?4(int) +QtMultimedia.QVideoWindowControl.contrast?4() -> int +QtMultimedia.QVideoWindowControl.setContrast?4(int) +QtMultimedia.QVideoWindowControl.hue?4() -> int +QtMultimedia.QVideoWindowControl.setHue?4(int) +QtMultimedia.QVideoWindowControl.saturation?4() -> int +QtMultimedia.QVideoWindowControl.setSaturation?4(int) +QtMultimedia.QVideoWindowControl.fullScreenChanged?4(bool) +QtMultimedia.QVideoWindowControl.brightnessChanged?4(int) +QtMultimedia.QVideoWindowControl.contrastChanged?4(int) +QtMultimedia.QVideoWindowControl.hueChanged?4(int) +QtMultimedia.QVideoWindowControl.saturationChanged?4(int) +QtMultimedia.QVideoWindowControl.nativeSizeChanged?4() +QtMultimediaWidgets.QVideoWidget?1(QWidget parent=None) +QtMultimediaWidgets.QVideoWidget.__init__?1(self, QWidget parent=None) +QtMultimediaWidgets.QVideoWidget.mediaObject?4() -> QMediaObject +QtMultimediaWidgets.QVideoWidget.aspectRatioMode?4() -> Qt.AspectRatioMode +QtMultimediaWidgets.QVideoWidget.brightness?4() -> int +QtMultimediaWidgets.QVideoWidget.contrast?4() -> int +QtMultimediaWidgets.QVideoWidget.hue?4() -> int +QtMultimediaWidgets.QVideoWidget.saturation?4() -> int +QtMultimediaWidgets.QVideoWidget.sizeHint?4() -> QSize +QtMultimediaWidgets.QVideoWidget.setFullScreen?4(bool) +QtMultimediaWidgets.QVideoWidget.setAspectRatioMode?4(Qt.AspectRatioMode) +QtMultimediaWidgets.QVideoWidget.setBrightness?4(int) +QtMultimediaWidgets.QVideoWidget.setContrast?4(int) +QtMultimediaWidgets.QVideoWidget.setHue?4(int) +QtMultimediaWidgets.QVideoWidget.setSaturation?4(int) +QtMultimediaWidgets.QVideoWidget.fullScreenChanged?4(bool) +QtMultimediaWidgets.QVideoWidget.brightnessChanged?4(int) +QtMultimediaWidgets.QVideoWidget.contrastChanged?4(int) +QtMultimediaWidgets.QVideoWidget.hueChanged?4(int) +QtMultimediaWidgets.QVideoWidget.saturationChanged?4(int) +QtMultimediaWidgets.QVideoWidget.event?4(QEvent) -> bool +QtMultimediaWidgets.QVideoWidget.showEvent?4(QShowEvent) +QtMultimediaWidgets.QVideoWidget.hideEvent?4(QHideEvent) +QtMultimediaWidgets.QVideoWidget.resizeEvent?4(QResizeEvent) +QtMultimediaWidgets.QVideoWidget.moveEvent?4(QMoveEvent) +QtMultimediaWidgets.QVideoWidget.paintEvent?4(QPaintEvent) +QtMultimediaWidgets.QVideoWidget.setMediaObject?4(QMediaObject) -> bool +QtMultimediaWidgets.QVideoWidget.videoSurface?4() -> QAbstractVideoSurface +QtMultimediaWidgets.QCameraViewfinder?1(QWidget parent=None) +QtMultimediaWidgets.QCameraViewfinder.__init__?1(self, QWidget parent=None) +QtMultimediaWidgets.QCameraViewfinder.mediaObject?4() -> QMediaObject +QtMultimediaWidgets.QCameraViewfinder.setMediaObject?4(QMediaObject) -> bool +QtMultimediaWidgets.QGraphicsVideoItem?1(QGraphicsItem parent=None) +QtMultimediaWidgets.QGraphicsVideoItem.__init__?1(self, QGraphicsItem parent=None) +QtMultimediaWidgets.QGraphicsVideoItem.mediaObject?4() -> QMediaObject +QtMultimediaWidgets.QGraphicsVideoItem.aspectRatioMode?4() -> Qt.AspectRatioMode +QtMultimediaWidgets.QGraphicsVideoItem.setAspectRatioMode?4(Qt.AspectRatioMode) +QtMultimediaWidgets.QGraphicsVideoItem.offset?4() -> QPointF +QtMultimediaWidgets.QGraphicsVideoItem.setOffset?4(QPointF) +QtMultimediaWidgets.QGraphicsVideoItem.size?4() -> QSizeF +QtMultimediaWidgets.QGraphicsVideoItem.setSize?4(QSizeF) +QtMultimediaWidgets.QGraphicsVideoItem.nativeSize?4() -> QSizeF +QtMultimediaWidgets.QGraphicsVideoItem.boundingRect?4() -> QRectF +QtMultimediaWidgets.QGraphicsVideoItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtMultimediaWidgets.QGraphicsVideoItem.nativeSizeChanged?4(QSizeF) +QtMultimediaWidgets.QGraphicsVideoItem.timerEvent?4(QTimerEvent) +QtMultimediaWidgets.QGraphicsVideoItem.itemChange?4(QGraphicsItem.GraphicsItemChange, QVariant) -> QVariant +QtMultimediaWidgets.QGraphicsVideoItem.setMediaObject?4(QMediaObject) -> bool +QtMultimediaWidgets.QGraphicsVideoItem.videoSurface?4() -> QAbstractVideoSurface +QtMultimediaWidgets.QVideoWidgetControl?1(QObject parent=None) +QtMultimediaWidgets.QVideoWidgetControl.__init__?1(self, QObject parent=None) +QtMultimediaWidgets.QVideoWidgetControl.videoWidget?4() -> QWidget +QtMultimediaWidgets.QVideoWidgetControl.aspectRatioMode?4() -> Qt.AspectRatioMode +QtMultimediaWidgets.QVideoWidgetControl.setAspectRatioMode?4(Qt.AspectRatioMode) +QtMultimediaWidgets.QVideoWidgetControl.isFullScreen?4() -> bool +QtMultimediaWidgets.QVideoWidgetControl.setFullScreen?4(bool) +QtMultimediaWidgets.QVideoWidgetControl.brightness?4() -> int +QtMultimediaWidgets.QVideoWidgetControl.setBrightness?4(int) +QtMultimediaWidgets.QVideoWidgetControl.contrast?4() -> int +QtMultimediaWidgets.QVideoWidgetControl.setContrast?4(int) +QtMultimediaWidgets.QVideoWidgetControl.hue?4() -> int +QtMultimediaWidgets.QVideoWidgetControl.setHue?4(int) +QtMultimediaWidgets.QVideoWidgetControl.saturation?4() -> int +QtMultimediaWidgets.QVideoWidgetControl.setSaturation?4(int) +QtMultimediaWidgets.QVideoWidgetControl.fullScreenChanged?4(bool) +QtMultimediaWidgets.QVideoWidgetControl.brightnessChanged?4(int) +QtMultimediaWidgets.QVideoWidgetControl.contrastChanged?4(int) +QtMultimediaWidgets.QVideoWidgetControl.hueChanged?4(int) +QtMultimediaWidgets.QVideoWidgetControl.saturationChanged?4(int) +QtNfc.QNdefFilter?1() +QtNfc.QNdefFilter.__init__?1(self) +QtNfc.QNdefFilter?1(QNdefFilter) +QtNfc.QNdefFilter.__init__?1(self, QNdefFilter) +QtNfc.QNdefFilter.clear?4() +QtNfc.QNdefFilter.setOrderMatch?4(bool) +QtNfc.QNdefFilter.orderMatch?4() -> bool +QtNfc.QNdefFilter.appendRecord?4(QNdefRecord.TypeNameFormat, QByteArray, int min=1, int max=1) +QtNfc.QNdefFilter.appendRecord?4(QNdefFilter.Record) +QtNfc.QNdefFilter.recordCount?4() -> int +QtNfc.QNdefFilter.recordAt?4(int) -> QNdefFilter.Record +QtNfc.QNdefFilter.Record.maximum?7 +QtNfc.QNdefFilter.Record.minimum?7 +QtNfc.QNdefFilter.Record.type?7 +QtNfc.QNdefFilter.Record.typeNameFormat?7 +QtNfc.QNdefFilter.Record?1() +QtNfc.QNdefFilter.Record.__init__?1(self) +QtNfc.QNdefFilter.Record?1(QNdefFilter.Record) +QtNfc.QNdefFilter.Record.__init__?1(self, QNdefFilter.Record) +QtNfc.QNdefMessage?1() +QtNfc.QNdefMessage.__init__?1(self) +QtNfc.QNdefMessage?1(QNdefRecord) +QtNfc.QNdefMessage.__init__?1(self, QNdefRecord) +QtNfc.QNdefMessage?1(QNdefMessage) +QtNfc.QNdefMessage.__init__?1(self, QNdefMessage) +QtNfc.QNdefMessage?1(unknown-type) +QtNfc.QNdefMessage.__init__?1(self, unknown-type) +QtNfc.QNdefMessage.toByteArray?4() -> QByteArray +QtNfc.QNdefMessage.fromByteArray?4(QByteArray) -> QNdefMessage +QtNfc.QNdefRecord.TypeNameFormat?10 +QtNfc.QNdefRecord.TypeNameFormat.Empty?10 +QtNfc.QNdefRecord.TypeNameFormat.NfcRtd?10 +QtNfc.QNdefRecord.TypeNameFormat.Mime?10 +QtNfc.QNdefRecord.TypeNameFormat.Uri?10 +QtNfc.QNdefRecord.TypeNameFormat.ExternalRtd?10 +QtNfc.QNdefRecord.TypeNameFormat.Unknown?10 +QtNfc.QNdefRecord?1() +QtNfc.QNdefRecord.__init__?1(self) +QtNfc.QNdefRecord?1(QNdefRecord) +QtNfc.QNdefRecord.__init__?1(self, QNdefRecord) +QtNfc.QNdefRecord.setTypeNameFormat?4(QNdefRecord.TypeNameFormat) +QtNfc.QNdefRecord.typeNameFormat?4() -> QNdefRecord.TypeNameFormat +QtNfc.QNdefRecord.setType?4(QByteArray) +QtNfc.QNdefRecord.type?4() -> QByteArray +QtNfc.QNdefRecord.setId?4(QByteArray) +QtNfc.QNdefRecord.id?4() -> QByteArray +QtNfc.QNdefRecord.setPayload?4(QByteArray) +QtNfc.QNdefRecord.payload?4() -> QByteArray +QtNfc.QNdefRecord.isEmpty?4() -> bool +QtNfc.QNdefNfcIconRecord?1() +QtNfc.QNdefNfcIconRecord.__init__?1(self) +QtNfc.QNdefNfcIconRecord?1(QNdefRecord) +QtNfc.QNdefNfcIconRecord.__init__?1(self, QNdefRecord) +QtNfc.QNdefNfcIconRecord?1(QNdefNfcIconRecord) +QtNfc.QNdefNfcIconRecord.__init__?1(self, QNdefNfcIconRecord) +QtNfc.QNdefNfcIconRecord.setData?4(QByteArray) +QtNfc.QNdefNfcIconRecord.data?4() -> QByteArray +QtNfc.QNdefNfcSmartPosterRecord.Action?10 +QtNfc.QNdefNfcSmartPosterRecord.Action.UnspecifiedAction?10 +QtNfc.QNdefNfcSmartPosterRecord.Action.DoAction?10 +QtNfc.QNdefNfcSmartPosterRecord.Action.SaveAction?10 +QtNfc.QNdefNfcSmartPosterRecord.Action.EditAction?10 +QtNfc.QNdefNfcSmartPosterRecord?1() +QtNfc.QNdefNfcSmartPosterRecord.__init__?1(self) +QtNfc.QNdefNfcSmartPosterRecord?1(QNdefNfcSmartPosterRecord) +QtNfc.QNdefNfcSmartPosterRecord.__init__?1(self, QNdefNfcSmartPosterRecord) +QtNfc.QNdefNfcSmartPosterRecord?1(QNdefRecord) +QtNfc.QNdefNfcSmartPosterRecord.__init__?1(self, QNdefRecord) +QtNfc.QNdefNfcSmartPosterRecord.setPayload?4(QByteArray) +QtNfc.QNdefNfcSmartPosterRecord.hasTitle?4(QString locale='') -> bool +QtNfc.QNdefNfcSmartPosterRecord.hasAction?4() -> bool +QtNfc.QNdefNfcSmartPosterRecord.hasIcon?4(QByteArray mimetype=QByteArray()) -> bool +QtNfc.QNdefNfcSmartPosterRecord.hasSize?4() -> bool +QtNfc.QNdefNfcSmartPosterRecord.hasTypeInfo?4() -> bool +QtNfc.QNdefNfcSmartPosterRecord.titleCount?4() -> int +QtNfc.QNdefNfcSmartPosterRecord.title?4(QString locale='') -> QString +QtNfc.QNdefNfcSmartPosterRecord.titleRecord?4(int) -> QNdefNfcTextRecord +QtNfc.QNdefNfcSmartPosterRecord.titleRecords?4() -> unknown-type +QtNfc.QNdefNfcSmartPosterRecord.addTitle?4(QNdefNfcTextRecord) -> bool +QtNfc.QNdefNfcSmartPosterRecord.addTitle?4(QString, QString, QNdefNfcTextRecord.Encoding) -> bool +QtNfc.QNdefNfcSmartPosterRecord.removeTitle?4(QNdefNfcTextRecord) -> bool +QtNfc.QNdefNfcSmartPosterRecord.removeTitle?4(QString) -> bool +QtNfc.QNdefNfcSmartPosterRecord.setTitles?4(unknown-type) +QtNfc.QNdefNfcSmartPosterRecord.uri?4() -> QUrl +QtNfc.QNdefNfcSmartPosterRecord.uriRecord?4() -> QNdefNfcUriRecord +QtNfc.QNdefNfcSmartPosterRecord.setUri?4(QNdefNfcUriRecord) +QtNfc.QNdefNfcSmartPosterRecord.setUri?4(QUrl) +QtNfc.QNdefNfcSmartPosterRecord.action?4() -> QNdefNfcSmartPosterRecord.Action +QtNfc.QNdefNfcSmartPosterRecord.setAction?4(QNdefNfcSmartPosterRecord.Action) +QtNfc.QNdefNfcSmartPosterRecord.iconCount?4() -> int +QtNfc.QNdefNfcSmartPosterRecord.icon?4(QByteArray mimetype=QByteArray()) -> QByteArray +QtNfc.QNdefNfcSmartPosterRecord.iconRecord?4(int) -> QNdefNfcIconRecord +QtNfc.QNdefNfcSmartPosterRecord.iconRecords?4() -> unknown-type +QtNfc.QNdefNfcSmartPosterRecord.addIcon?4(QNdefNfcIconRecord) +QtNfc.QNdefNfcSmartPosterRecord.addIcon?4(QByteArray, QByteArray) +QtNfc.QNdefNfcSmartPosterRecord.removeIcon?4(QNdefNfcIconRecord) -> bool +QtNfc.QNdefNfcSmartPosterRecord.removeIcon?4(QByteArray) -> bool +QtNfc.QNdefNfcSmartPosterRecord.setIcons?4(unknown-type) +QtNfc.QNdefNfcSmartPosterRecord.size?4() -> int +QtNfc.QNdefNfcSmartPosterRecord.setSize?4(int) +QtNfc.QNdefNfcSmartPosterRecord.typeInfo?4() -> QByteArray +QtNfc.QNdefNfcSmartPosterRecord.setTypeInfo?4(QByteArray) +QtNfc.QNdefNfcTextRecord.Encoding?10 +QtNfc.QNdefNfcTextRecord.Encoding.Utf8?10 +QtNfc.QNdefNfcTextRecord.Encoding.Utf16?10 +QtNfc.QNdefNfcTextRecord?1() +QtNfc.QNdefNfcTextRecord.__init__?1(self) +QtNfc.QNdefNfcTextRecord?1(QNdefRecord) +QtNfc.QNdefNfcTextRecord.__init__?1(self, QNdefRecord) +QtNfc.QNdefNfcTextRecord?1(QNdefNfcTextRecord) +QtNfc.QNdefNfcTextRecord.__init__?1(self, QNdefNfcTextRecord) +QtNfc.QNdefNfcTextRecord.locale?4() -> QString +QtNfc.QNdefNfcTextRecord.setLocale?4(QString) +QtNfc.QNdefNfcTextRecord.text?4() -> QString +QtNfc.QNdefNfcTextRecord.setText?4(QString) +QtNfc.QNdefNfcTextRecord.encoding?4() -> QNdefNfcTextRecord.Encoding +QtNfc.QNdefNfcTextRecord.setEncoding?4(QNdefNfcTextRecord.Encoding) +QtNfc.QNdefNfcUriRecord?1() +QtNfc.QNdefNfcUriRecord.__init__?1(self) +QtNfc.QNdefNfcUriRecord?1(QNdefRecord) +QtNfc.QNdefNfcUriRecord.__init__?1(self, QNdefRecord) +QtNfc.QNdefNfcUriRecord?1(QNdefNfcUriRecord) +QtNfc.QNdefNfcUriRecord.__init__?1(self, QNdefNfcUriRecord) +QtNfc.QNdefNfcUriRecord.uri?4() -> QUrl +QtNfc.QNdefNfcUriRecord.setUri?4(QUrl) +QtNfc.QNearFieldManager.AdapterState?10 +QtNfc.QNearFieldManager.AdapterState.Offline?10 +QtNfc.QNearFieldManager.AdapterState.TurningOn?10 +QtNfc.QNearFieldManager.AdapterState.Online?10 +QtNfc.QNearFieldManager.AdapterState.TurningOff?10 +QtNfc.QNearFieldManager.TargetAccessMode?10 +QtNfc.QNearFieldManager.TargetAccessMode.NoTargetAccess?10 +QtNfc.QNearFieldManager.TargetAccessMode.NdefReadTargetAccess?10 +QtNfc.QNearFieldManager.TargetAccessMode.NdefWriteTargetAccess?10 +QtNfc.QNearFieldManager.TargetAccessMode.TagTypeSpecificTargetAccess?10 +QtNfc.QNearFieldManager?1(QObject parent=None) +QtNfc.QNearFieldManager.__init__?1(self, QObject parent=None) +QtNfc.QNearFieldManager.isAvailable?4() -> bool +QtNfc.QNearFieldManager.setTargetAccessModes?4(QNearFieldManager.TargetAccessModes) +QtNfc.QNearFieldManager.targetAccessModes?4() -> QNearFieldManager.TargetAccessModes +QtNfc.QNearFieldManager.startTargetDetection?4() -> bool +QtNfc.QNearFieldManager.stopTargetDetection?4() +QtNfc.QNearFieldManager.registerNdefMessageHandler?4(Any) -> int +QtNfc.QNearFieldManager.registerNdefMessageHandler?4(QNdefRecord.TypeNameFormat, QByteArray, Any) -> int +QtNfc.QNearFieldManager.registerNdefMessageHandler?4(QNdefFilter, Any) -> int +QtNfc.QNearFieldManager.unregisterNdefMessageHandler?4(int) -> bool +QtNfc.QNearFieldManager.targetDetected?4(QNearFieldTarget) +QtNfc.QNearFieldManager.targetLost?4(QNearFieldTarget) +QtNfc.QNearFieldManager.isSupported?4() -> bool +QtNfc.QNearFieldManager.adapterStateChanged?4(QNearFieldManager.AdapterState) +QtNfc.QNearFieldManager.TargetAccessModes?1() +QtNfc.QNearFieldManager.TargetAccessModes.__init__?1(self) +QtNfc.QNearFieldManager.TargetAccessModes?1(int) +QtNfc.QNearFieldManager.TargetAccessModes.__init__?1(self, int) +QtNfc.QNearFieldManager.TargetAccessModes?1(QNearFieldManager.TargetAccessModes) +QtNfc.QNearFieldManager.TargetAccessModes.__init__?1(self, QNearFieldManager.TargetAccessModes) +QtNfc.QNearFieldShareManager.ShareMode?10 +QtNfc.QNearFieldShareManager.ShareMode.NoShare?10 +QtNfc.QNearFieldShareManager.ShareMode.NdefShare?10 +QtNfc.QNearFieldShareManager.ShareMode.FileShare?10 +QtNfc.QNearFieldShareManager.ShareError?10 +QtNfc.QNearFieldShareManager.ShareError.NoError?10 +QtNfc.QNearFieldShareManager.ShareError.UnknownError?10 +QtNfc.QNearFieldShareManager.ShareError.InvalidShareContentError?10 +QtNfc.QNearFieldShareManager.ShareError.ShareCanceledError?10 +QtNfc.QNearFieldShareManager.ShareError.ShareInterruptedError?10 +QtNfc.QNearFieldShareManager.ShareError.ShareRejectedError?10 +QtNfc.QNearFieldShareManager.ShareError.UnsupportedShareModeError?10 +QtNfc.QNearFieldShareManager.ShareError.ShareAlreadyInProgressError?10 +QtNfc.QNearFieldShareManager.ShareError.SharePermissionDeniedError?10 +QtNfc.QNearFieldShareManager?1(QObject parent=None) +QtNfc.QNearFieldShareManager.__init__?1(self, QObject parent=None) +QtNfc.QNearFieldShareManager.supportedShareModes?4() -> QNearFieldShareManager.ShareModes +QtNfc.QNearFieldShareManager.setShareModes?4(QNearFieldShareManager.ShareModes) +QtNfc.QNearFieldShareManager.shareModes?4() -> QNearFieldShareManager.ShareModes +QtNfc.QNearFieldShareManager.shareError?4() -> QNearFieldShareManager.ShareError +QtNfc.QNearFieldShareManager.targetDetected?4(QNearFieldShareTarget) +QtNfc.QNearFieldShareManager.shareModesChanged?4(QNearFieldShareManager.ShareModes) +QtNfc.QNearFieldShareManager.error?4(QNearFieldShareManager.ShareError) +QtNfc.QNearFieldShareManager.ShareModes?1() +QtNfc.QNearFieldShareManager.ShareModes.__init__?1(self) +QtNfc.QNearFieldShareManager.ShareModes?1(int) +QtNfc.QNearFieldShareManager.ShareModes.__init__?1(self, int) +QtNfc.QNearFieldShareManager.ShareModes?1(QNearFieldShareManager.ShareModes) +QtNfc.QNearFieldShareManager.ShareModes.__init__?1(self, QNearFieldShareManager.ShareModes) +QtNfc.QNearFieldShareTarget.shareModes?4() -> QNearFieldShareManager.ShareModes +QtNfc.QNearFieldShareTarget.share?4(QNdefMessage) -> bool +QtNfc.QNearFieldShareTarget.share?4(unknown-type) -> bool +QtNfc.QNearFieldShareTarget.cancel?4() +QtNfc.QNearFieldShareTarget.isShareInProgress?4() -> bool +QtNfc.QNearFieldShareTarget.shareError?4() -> QNearFieldShareManager.ShareError +QtNfc.QNearFieldShareTarget.error?4(QNearFieldShareManager.ShareError) +QtNfc.QNearFieldShareTarget.shareFinished?4() +QtNfc.QNearFieldTarget.Error?10 +QtNfc.QNearFieldTarget.Error.NoError?10 +QtNfc.QNearFieldTarget.Error.UnknownError?10 +QtNfc.QNearFieldTarget.Error.UnsupportedError?10 +QtNfc.QNearFieldTarget.Error.TargetOutOfRangeError?10 +QtNfc.QNearFieldTarget.Error.NoResponseError?10 +QtNfc.QNearFieldTarget.Error.ChecksumMismatchError?10 +QtNfc.QNearFieldTarget.Error.InvalidParametersError?10 +QtNfc.QNearFieldTarget.Error.NdefReadError?10 +QtNfc.QNearFieldTarget.Error.NdefWriteError?10 +QtNfc.QNearFieldTarget.Error.CommandError?10 +QtNfc.QNearFieldTarget.AccessMethod?10 +QtNfc.QNearFieldTarget.AccessMethod.UnknownAccess?10 +QtNfc.QNearFieldTarget.AccessMethod.NdefAccess?10 +QtNfc.QNearFieldTarget.AccessMethod.TagTypeSpecificAccess?10 +QtNfc.QNearFieldTarget.AccessMethod.LlcpAccess?10 +QtNfc.QNearFieldTarget.Type?10 +QtNfc.QNearFieldTarget.Type.ProprietaryTag?10 +QtNfc.QNearFieldTarget.Type.NfcTagType1?10 +QtNfc.QNearFieldTarget.Type.NfcTagType2?10 +QtNfc.QNearFieldTarget.Type.NfcTagType3?10 +QtNfc.QNearFieldTarget.Type.NfcTagType4?10 +QtNfc.QNearFieldTarget.Type.MifareTag?10 +QtNfc.QNearFieldTarget?1(QObject parent=None) +QtNfc.QNearFieldTarget.__init__?1(self, QObject parent=None) +QtNfc.QNearFieldTarget.uid?4() -> QByteArray +QtNfc.QNearFieldTarget.url?4() -> QUrl +QtNfc.QNearFieldTarget.type?4() -> QNearFieldTarget.Type +QtNfc.QNearFieldTarget.accessMethods?4() -> QNearFieldTarget.AccessMethods +QtNfc.QNearFieldTarget.isProcessingCommand?4() -> bool +QtNfc.QNearFieldTarget.hasNdefMessage?4() -> bool +QtNfc.QNearFieldTarget.readNdefMessages?4() -> QNearFieldTarget.RequestId +QtNfc.QNearFieldTarget.writeNdefMessages?4(unknown-type) -> QNearFieldTarget.RequestId +QtNfc.QNearFieldTarget.sendCommand?4(QByteArray) -> QNearFieldTarget.RequestId +QtNfc.QNearFieldTarget.sendCommands?4(unknown-type) -> QNearFieldTarget.RequestId +QtNfc.QNearFieldTarget.waitForRequestCompleted?4(QNearFieldTarget.RequestId, int msecs=5000) -> bool +QtNfc.QNearFieldTarget.requestResponse?4(QNearFieldTarget.RequestId) -> QVariant +QtNfc.QNearFieldTarget.setResponseForRequest?4(QNearFieldTarget.RequestId, QVariant, bool emitRequestCompleted=True) +QtNfc.QNearFieldTarget.handleResponse?4(QNearFieldTarget.RequestId, QByteArray) -> bool +QtNfc.QNearFieldTarget.reportError?4(QNearFieldTarget.Error, QNearFieldTarget.RequestId) +QtNfc.QNearFieldTarget.disconnected?4() +QtNfc.QNearFieldTarget.ndefMessageRead?4(QNdefMessage) +QtNfc.QNearFieldTarget.ndefMessagesWritten?4() +QtNfc.QNearFieldTarget.requestCompleted?4(QNearFieldTarget.RequestId) +QtNfc.QNearFieldTarget.error?4(QNearFieldTarget.Error, QNearFieldTarget.RequestId) +QtNfc.QNearFieldTarget.keepConnection?4() -> bool +QtNfc.QNearFieldTarget.setKeepConnection?4(bool) -> bool +QtNfc.QNearFieldTarget.disconnect?4() -> bool +QtNfc.QNearFieldTarget.maxCommandLength?4() -> int +QtNfc.QNearFieldTarget.AccessMethods?1() +QtNfc.QNearFieldTarget.AccessMethods.__init__?1(self) +QtNfc.QNearFieldTarget.AccessMethods?1(int) +QtNfc.QNearFieldTarget.AccessMethods.__init__?1(self, int) +QtNfc.QNearFieldTarget.AccessMethods?1(QNearFieldTarget.AccessMethods) +QtNfc.QNearFieldTarget.AccessMethods.__init__?1(self, QNearFieldTarget.AccessMethods) +QtNfc.QNearFieldTarget.RequestId?1() +QtNfc.QNearFieldTarget.RequestId.__init__?1(self) +QtNfc.QNearFieldTarget.RequestId?1(QNearFieldTarget.RequestId) +QtNfc.QNearFieldTarget.RequestId.__init__?1(self, QNearFieldTarget.RequestId) +QtNfc.QNearFieldTarget.RequestId.isValid?4() -> bool +QtNfc.QNearFieldTarget.RequestId.refCount?4() -> int +QtNfc.QQmlNdefRecord.TypeNameFormat?10 +QtNfc.QQmlNdefRecord.TypeNameFormat.Empty?10 +QtNfc.QQmlNdefRecord.TypeNameFormat.NfcRtd?10 +QtNfc.QQmlNdefRecord.TypeNameFormat.Mime?10 +QtNfc.QQmlNdefRecord.TypeNameFormat.Uri?10 +QtNfc.QQmlNdefRecord.TypeNameFormat.ExternalRtd?10 +QtNfc.QQmlNdefRecord.TypeNameFormat.Unknown?10 +QtNfc.QQmlNdefRecord?1(QObject parent=None) +QtNfc.QQmlNdefRecord.__init__?1(self, QObject parent=None) +QtNfc.QQmlNdefRecord?1(QNdefRecord, QObject parent=None) +QtNfc.QQmlNdefRecord.__init__?1(self, QNdefRecord, QObject parent=None) +QtNfc.QQmlNdefRecord.type?4() -> QString +QtNfc.QQmlNdefRecord.setType?4(QString) +QtNfc.QQmlNdefRecord.setTypeNameFormat?4(QQmlNdefRecord.TypeNameFormat) +QtNfc.QQmlNdefRecord.typeNameFormat?4() -> QQmlNdefRecord.TypeNameFormat +QtNfc.QQmlNdefRecord.record?4() -> QNdefRecord +QtNfc.QQmlNdefRecord.setRecord?4(QNdefRecord) +QtNfc.QQmlNdefRecord.typeChanged?4() +QtNfc.QQmlNdefRecord.typeNameFormatChanged?4() +QtNfc.QQmlNdefRecord.recordChanged?4() +QtOpenGL.QGL.FormatOption?10 +QtOpenGL.QGL.FormatOption.DoubleBuffer?10 +QtOpenGL.QGL.FormatOption.DepthBuffer?10 +QtOpenGL.QGL.FormatOption.Rgba?10 +QtOpenGL.QGL.FormatOption.AlphaChannel?10 +QtOpenGL.QGL.FormatOption.AccumBuffer?10 +QtOpenGL.QGL.FormatOption.StencilBuffer?10 +QtOpenGL.QGL.FormatOption.StereoBuffers?10 +QtOpenGL.QGL.FormatOption.DirectRendering?10 +QtOpenGL.QGL.FormatOption.HasOverlay?10 +QtOpenGL.QGL.FormatOption.SampleBuffers?10 +QtOpenGL.QGL.FormatOption.SingleBuffer?10 +QtOpenGL.QGL.FormatOption.NoDepthBuffer?10 +QtOpenGL.QGL.FormatOption.ColorIndex?10 +QtOpenGL.QGL.FormatOption.NoAlphaChannel?10 +QtOpenGL.QGL.FormatOption.NoAccumBuffer?10 +QtOpenGL.QGL.FormatOption.NoStencilBuffer?10 +QtOpenGL.QGL.FormatOption.NoStereoBuffers?10 +QtOpenGL.QGL.FormatOption.IndirectRendering?10 +QtOpenGL.QGL.FormatOption.NoOverlay?10 +QtOpenGL.QGL.FormatOption.NoSampleBuffers?10 +QtOpenGL.QGL.FormatOption.DeprecatedFunctions?10 +QtOpenGL.QGL.FormatOption.NoDeprecatedFunctions?10 +QtOpenGL.QGL.FormatOptions?1() +QtOpenGL.QGL.FormatOptions.__init__?1(self) +QtOpenGL.QGL.FormatOptions?1(int) +QtOpenGL.QGL.FormatOptions.__init__?1(self, int) +QtOpenGL.QGL.FormatOptions?1(QGL.FormatOptions) +QtOpenGL.QGL.FormatOptions.__init__?1(self, QGL.FormatOptions) +QtOpenGL.QGLFormat.OpenGLContextProfile?10 +QtOpenGL.QGLFormat.OpenGLContextProfile.NoProfile?10 +QtOpenGL.QGLFormat.OpenGLContextProfile.CoreProfile?10 +QtOpenGL.QGLFormat.OpenGLContextProfile.CompatibilityProfile?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_None?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_1_1?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_1_2?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_1_3?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_1_4?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_1_5?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_2_0?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_2_1?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_3_0?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_3_1?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_3_2?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_3_3?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_4_0?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_4_1?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_4_2?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_Version_4_3?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_ES_Common_Version_1_0?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_ES_CommonLite_Version_1_0?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_ES_Common_Version_1_1?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_ES_CommonLite_Version_1_1?10 +QtOpenGL.QGLFormat.OpenGLVersionFlag.OpenGL_ES_Version_2_0?10 +QtOpenGL.QGLFormat?1() +QtOpenGL.QGLFormat.__init__?1(self) +QtOpenGL.QGLFormat?1(QGL.FormatOptions, int plane=0) +QtOpenGL.QGLFormat.__init__?1(self, QGL.FormatOptions, int plane=0) +QtOpenGL.QGLFormat?1(QGLFormat) +QtOpenGL.QGLFormat.__init__?1(self, QGLFormat) +QtOpenGL.QGLFormat.setDepthBufferSize?4(int) +QtOpenGL.QGLFormat.depthBufferSize?4() -> int +QtOpenGL.QGLFormat.setAccumBufferSize?4(int) +QtOpenGL.QGLFormat.accumBufferSize?4() -> int +QtOpenGL.QGLFormat.setAlphaBufferSize?4(int) +QtOpenGL.QGLFormat.alphaBufferSize?4() -> int +QtOpenGL.QGLFormat.setStencilBufferSize?4(int) +QtOpenGL.QGLFormat.stencilBufferSize?4() -> int +QtOpenGL.QGLFormat.setSampleBuffers?4(bool) +QtOpenGL.QGLFormat.setSamples?4(int) +QtOpenGL.QGLFormat.samples?4() -> int +QtOpenGL.QGLFormat.setDoubleBuffer?4(bool) +QtOpenGL.QGLFormat.setDepth?4(bool) +QtOpenGL.QGLFormat.setRgba?4(bool) +QtOpenGL.QGLFormat.setAlpha?4(bool) +QtOpenGL.QGLFormat.setAccum?4(bool) +QtOpenGL.QGLFormat.setStencil?4(bool) +QtOpenGL.QGLFormat.setStereo?4(bool) +QtOpenGL.QGLFormat.setDirectRendering?4(bool) +QtOpenGL.QGLFormat.setOverlay?4(bool) +QtOpenGL.QGLFormat.plane?4() -> int +QtOpenGL.QGLFormat.setPlane?4(int) +QtOpenGL.QGLFormat.setOption?4(QGL.FormatOptions) +QtOpenGL.QGLFormat.testOption?4(QGL.FormatOptions) -> bool +QtOpenGL.QGLFormat.defaultFormat?4() -> QGLFormat +QtOpenGL.QGLFormat.setDefaultFormat?4(QGLFormat) +QtOpenGL.QGLFormat.defaultOverlayFormat?4() -> QGLFormat +QtOpenGL.QGLFormat.setDefaultOverlayFormat?4(QGLFormat) +QtOpenGL.QGLFormat.hasOpenGL?4() -> bool +QtOpenGL.QGLFormat.hasOpenGLOverlays?4() -> bool +QtOpenGL.QGLFormat.doubleBuffer?4() -> bool +QtOpenGL.QGLFormat.depth?4() -> bool +QtOpenGL.QGLFormat.rgba?4() -> bool +QtOpenGL.QGLFormat.alpha?4() -> bool +QtOpenGL.QGLFormat.accum?4() -> bool +QtOpenGL.QGLFormat.stencil?4() -> bool +QtOpenGL.QGLFormat.stereo?4() -> bool +QtOpenGL.QGLFormat.directRendering?4() -> bool +QtOpenGL.QGLFormat.hasOverlay?4() -> bool +QtOpenGL.QGLFormat.sampleBuffers?4() -> bool +QtOpenGL.QGLFormat.setRedBufferSize?4(int) +QtOpenGL.QGLFormat.redBufferSize?4() -> int +QtOpenGL.QGLFormat.setGreenBufferSize?4(int) +QtOpenGL.QGLFormat.greenBufferSize?4() -> int +QtOpenGL.QGLFormat.setBlueBufferSize?4(int) +QtOpenGL.QGLFormat.blueBufferSize?4() -> int +QtOpenGL.QGLFormat.setSwapInterval?4(int) +QtOpenGL.QGLFormat.swapInterval?4() -> int +QtOpenGL.QGLFormat.openGLVersionFlags?4() -> QGLFormat.OpenGLVersionFlags +QtOpenGL.QGLFormat.setVersion?4(int, int) +QtOpenGL.QGLFormat.majorVersion?4() -> int +QtOpenGL.QGLFormat.minorVersion?4() -> int +QtOpenGL.QGLFormat.setProfile?4(QGLFormat.OpenGLContextProfile) +QtOpenGL.QGLFormat.profile?4() -> QGLFormat.OpenGLContextProfile +QtOpenGL.QGLFormat.OpenGLVersionFlags?1() +QtOpenGL.QGLFormat.OpenGLVersionFlags.__init__?1(self) +QtOpenGL.QGLFormat.OpenGLVersionFlags?1(int) +QtOpenGL.QGLFormat.OpenGLVersionFlags.__init__?1(self, int) +QtOpenGL.QGLFormat.OpenGLVersionFlags?1(QGLFormat.OpenGLVersionFlags) +QtOpenGL.QGLFormat.OpenGLVersionFlags.__init__?1(self, QGLFormat.OpenGLVersionFlags) +QtOpenGL.QGLContext.BindOption?10 +QtOpenGL.QGLContext.BindOption.NoBindOption?10 +QtOpenGL.QGLContext.BindOption.InvertedYBindOption?10 +QtOpenGL.QGLContext.BindOption.MipmapBindOption?10 +QtOpenGL.QGLContext.BindOption.PremultipliedAlphaBindOption?10 +QtOpenGL.QGLContext.BindOption.LinearFilteringBindOption?10 +QtOpenGL.QGLContext.BindOption.DefaultBindOption?10 +QtOpenGL.QGLContext?1(QGLFormat) +QtOpenGL.QGLContext.__init__?1(self, QGLFormat) +QtOpenGL.QGLContext.create?4(QGLContext shareContext=None) -> bool +QtOpenGL.QGLContext.isValid?4() -> bool +QtOpenGL.QGLContext.isSharing?4() -> bool +QtOpenGL.QGLContext.reset?4() +QtOpenGL.QGLContext.format?4() -> QGLFormat +QtOpenGL.QGLContext.requestedFormat?4() -> QGLFormat +QtOpenGL.QGLContext.setFormat?4(QGLFormat) +QtOpenGL.QGLContext.makeCurrent?4() +QtOpenGL.QGLContext.doneCurrent?4() +QtOpenGL.QGLContext.swapBuffers?4() +QtOpenGL.QGLContext.bindTexture?4(QImage, int target=GL_TEXTURE_2D, int format=GL_RGBA) -> int +QtOpenGL.QGLContext.bindTexture?4(QPixmap, int target=GL_TEXTURE_2D, int format=GL_RGBA) -> int +QtOpenGL.QGLContext.drawTexture?4(QRectF, int, int textureTarget=GL_TEXTURE_2D) +QtOpenGL.QGLContext.drawTexture?4(QPointF, int, int textureTarget=GL_TEXTURE_2D) +QtOpenGL.QGLContext.bindTexture?4(QString) -> int +QtOpenGL.QGLContext.deleteTexture?4(int) +QtOpenGL.QGLContext.setTextureCacheLimit?4(int) +QtOpenGL.QGLContext.textureCacheLimit?4() -> int +QtOpenGL.QGLContext.getProcAddress?4(QString) -> PyQt5.sip.voidptr +QtOpenGL.QGLContext.device?4() -> QPaintDevice +QtOpenGL.QGLContext.overlayTransparentColor?4() -> QColor +QtOpenGL.QGLContext.currentContext?4() -> QGLContext +QtOpenGL.QGLContext.chooseContext?4(QGLContext shareContext=None) -> bool +QtOpenGL.QGLContext.deviceIsPixmap?4() -> bool +QtOpenGL.QGLContext.windowCreated?4() -> bool +QtOpenGL.QGLContext.setWindowCreated?4(bool) +QtOpenGL.QGLContext.initialized?4() -> bool +QtOpenGL.QGLContext.setInitialized?4(bool) +QtOpenGL.QGLContext.areSharing?4(QGLContext, QGLContext) -> bool +QtOpenGL.QGLContext.bindTexture?4(QImage, int, int, QGLContext.BindOptions) -> int +QtOpenGL.QGLContext.bindTexture?4(QPixmap, int, int, QGLContext.BindOptions) -> int +QtOpenGL.QGLContext.moveToThread?4(QThread) +QtOpenGL.QGLContext.BindOptions?1() +QtOpenGL.QGLContext.BindOptions.__init__?1(self) +QtOpenGL.QGLContext.BindOptions?1(int) +QtOpenGL.QGLContext.BindOptions.__init__?1(self, int) +QtOpenGL.QGLContext.BindOptions?1(QGLContext.BindOptions) +QtOpenGL.QGLContext.BindOptions.__init__?1(self, QGLContext.BindOptions) +QtOpenGL.QGLWidget?1(QWidget parent=None, QGLWidget shareWidget=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtOpenGL.QGLWidget.__init__?1(self, QWidget parent=None, QGLWidget shareWidget=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtOpenGL.QGLWidget?1(QGLContext, QWidget parent=None, QGLWidget shareWidget=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtOpenGL.QGLWidget.__init__?1(self, QGLContext, QWidget parent=None, QGLWidget shareWidget=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtOpenGL.QGLWidget?1(QGLFormat, QWidget parent=None, QGLWidget shareWidget=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtOpenGL.QGLWidget.__init__?1(self, QGLFormat, QWidget parent=None, QGLWidget shareWidget=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtOpenGL.QGLWidget.qglColor?4(QColor) +QtOpenGL.QGLWidget.qglClearColor?4(QColor) +QtOpenGL.QGLWidget.isValid?4() -> bool +QtOpenGL.QGLWidget.isSharing?4() -> bool +QtOpenGL.QGLWidget.makeCurrent?4() +QtOpenGL.QGLWidget.doneCurrent?4() +QtOpenGL.QGLWidget.doubleBuffer?4() -> bool +QtOpenGL.QGLWidget.swapBuffers?4() +QtOpenGL.QGLWidget.format?4() -> QGLFormat +QtOpenGL.QGLWidget.context?4() -> QGLContext +QtOpenGL.QGLWidget.setContext?4(QGLContext, QGLContext shareContext=None, bool deleteOldContext=True) +QtOpenGL.QGLWidget.renderPixmap?4(int width=0, int height=0, bool useContext=False) -> QPixmap +QtOpenGL.QGLWidget.grabFrameBuffer?4(bool withAlpha=False) -> QImage +QtOpenGL.QGLWidget.makeOverlayCurrent?4() +QtOpenGL.QGLWidget.overlayContext?4() -> QGLContext +QtOpenGL.QGLWidget.convertToGLFormat?4(QImage) -> QImage +QtOpenGL.QGLWidget.renderText?4(int, int, QString, QFont font=QFont()) +QtOpenGL.QGLWidget.renderText?4(float, float, float, QString, QFont font=QFont()) +QtOpenGL.QGLWidget.paintEngine?4() -> QPaintEngine +QtOpenGL.QGLWidget.bindTexture?4(QImage, int target=GL_TEXTURE_2D, int format=GL_RGBA) -> int +QtOpenGL.QGLWidget.bindTexture?4(QPixmap, int target=GL_TEXTURE_2D, int format=GL_RGBA) -> int +QtOpenGL.QGLWidget.bindTexture?4(QString) -> int +QtOpenGL.QGLWidget.drawTexture?4(QRectF, int, int textureTarget=GL_TEXTURE_2D) +QtOpenGL.QGLWidget.drawTexture?4(QPointF, int, int textureTarget=GL_TEXTURE_2D) +QtOpenGL.QGLWidget.deleteTexture?4(int) +QtOpenGL.QGLWidget.updateGL?4() +QtOpenGL.QGLWidget.updateOverlayGL?4() +QtOpenGL.QGLWidget.event?4(QEvent) -> bool +QtOpenGL.QGLWidget.initializeGL?4() +QtOpenGL.QGLWidget.resizeGL?4(int, int) +QtOpenGL.QGLWidget.paintGL?4() +QtOpenGL.QGLWidget.initializeOverlayGL?4() +QtOpenGL.QGLWidget.resizeOverlayGL?4(int, int) +QtOpenGL.QGLWidget.paintOverlayGL?4() +QtOpenGL.QGLWidget.setAutoBufferSwap?4(bool) +QtOpenGL.QGLWidget.autoBufferSwap?4() -> bool +QtOpenGL.QGLWidget.paintEvent?4(QPaintEvent) +QtOpenGL.QGLWidget.resizeEvent?4(QResizeEvent) +QtOpenGL.QGLWidget.glInit?4() +QtOpenGL.QGLWidget.glDraw?4() +QtOpenGL.QGLWidget.bindTexture?4(QImage, int, int, QGLContext.BindOptions) -> int +QtOpenGL.QGLWidget.bindTexture?4(QPixmap, int, int, QGLContext.BindOptions) -> int +QtPositioning.QGeoAddress?1() +QtPositioning.QGeoAddress.__init__?1(self) +QtPositioning.QGeoAddress?1(QGeoAddress) +QtPositioning.QGeoAddress.__init__?1(self, QGeoAddress) +QtPositioning.QGeoAddress.text?4() -> QString +QtPositioning.QGeoAddress.setText?4(QString) +QtPositioning.QGeoAddress.country?4() -> QString +QtPositioning.QGeoAddress.setCountry?4(QString) +QtPositioning.QGeoAddress.countryCode?4() -> QString +QtPositioning.QGeoAddress.setCountryCode?4(QString) +QtPositioning.QGeoAddress.state?4() -> QString +QtPositioning.QGeoAddress.setState?4(QString) +QtPositioning.QGeoAddress.county?4() -> QString +QtPositioning.QGeoAddress.setCounty?4(QString) +QtPositioning.QGeoAddress.city?4() -> QString +QtPositioning.QGeoAddress.setCity?4(QString) +QtPositioning.QGeoAddress.district?4() -> QString +QtPositioning.QGeoAddress.setDistrict?4(QString) +QtPositioning.QGeoAddress.postalCode?4() -> QString +QtPositioning.QGeoAddress.setPostalCode?4(QString) +QtPositioning.QGeoAddress.street?4() -> QString +QtPositioning.QGeoAddress.setStreet?4(QString) +QtPositioning.QGeoAddress.isEmpty?4() -> bool +QtPositioning.QGeoAddress.clear?4() +QtPositioning.QGeoAddress.isTextGenerated?4() -> bool +QtPositioning.QGeoAreaMonitorInfo?1(QString name='') +QtPositioning.QGeoAreaMonitorInfo.__init__?1(self, QString name='') +QtPositioning.QGeoAreaMonitorInfo?1(QGeoAreaMonitorInfo) +QtPositioning.QGeoAreaMonitorInfo.__init__?1(self, QGeoAreaMonitorInfo) +QtPositioning.QGeoAreaMonitorInfo.name?4() -> QString +QtPositioning.QGeoAreaMonitorInfo.setName?4(QString) +QtPositioning.QGeoAreaMonitorInfo.identifier?4() -> QString +QtPositioning.QGeoAreaMonitorInfo.isValid?4() -> bool +QtPositioning.QGeoAreaMonitorInfo.area?4() -> QGeoShape +QtPositioning.QGeoAreaMonitorInfo.setArea?4(QGeoShape) +QtPositioning.QGeoAreaMonitorInfo.expiration?4() -> QDateTime +QtPositioning.QGeoAreaMonitorInfo.setExpiration?4(QDateTime) +QtPositioning.QGeoAreaMonitorInfo.isPersistent?4() -> bool +QtPositioning.QGeoAreaMonitorInfo.setPersistent?4(bool) +QtPositioning.QGeoAreaMonitorInfo.notificationParameters?4() -> QVariantMap +QtPositioning.QGeoAreaMonitorInfo.setNotificationParameters?4(QVariantMap) +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeature?10 +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeature.PersistentAreaMonitorFeature?10 +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeature.AnyAreaMonitorFeature?10 +QtPositioning.QGeoAreaMonitorSource.Error?10 +QtPositioning.QGeoAreaMonitorSource.Error.AccessError?10 +QtPositioning.QGeoAreaMonitorSource.Error.InsufficientPositionInfo?10 +QtPositioning.QGeoAreaMonitorSource.Error.UnknownSourceError?10 +QtPositioning.QGeoAreaMonitorSource.Error.NoError?10 +QtPositioning.QGeoAreaMonitorSource?1(QObject) +QtPositioning.QGeoAreaMonitorSource.__init__?1(self, QObject) +QtPositioning.QGeoAreaMonitorSource.createDefaultSource?4(QObject) -> QGeoAreaMonitorSource +QtPositioning.QGeoAreaMonitorSource.createSource?4(QString, QObject) -> QGeoAreaMonitorSource +QtPositioning.QGeoAreaMonitorSource.availableSources?4() -> QStringList +QtPositioning.QGeoAreaMonitorSource.setPositionInfoSource?4(QGeoPositionInfoSource) +QtPositioning.QGeoAreaMonitorSource.positionInfoSource?4() -> QGeoPositionInfoSource +QtPositioning.QGeoAreaMonitorSource.sourceName?4() -> QString +QtPositioning.QGeoAreaMonitorSource.error?4() -> QGeoAreaMonitorSource.Error +QtPositioning.QGeoAreaMonitorSource.supportedAreaMonitorFeatures?4() -> QGeoAreaMonitorSource.AreaMonitorFeatures +QtPositioning.QGeoAreaMonitorSource.startMonitoring?4(QGeoAreaMonitorInfo) -> bool +QtPositioning.QGeoAreaMonitorSource.stopMonitoring?4(QGeoAreaMonitorInfo) -> bool +QtPositioning.QGeoAreaMonitorSource.requestUpdate?4(QGeoAreaMonitorInfo, str) -> bool +QtPositioning.QGeoAreaMonitorSource.activeMonitors?4() -> unknown-type +QtPositioning.QGeoAreaMonitorSource.activeMonitors?4(QGeoShape) -> unknown-type +QtPositioning.QGeoAreaMonitorSource.areaEntered?4(QGeoAreaMonitorInfo, QGeoPositionInfo) +QtPositioning.QGeoAreaMonitorSource.areaExited?4(QGeoAreaMonitorInfo, QGeoPositionInfo) +QtPositioning.QGeoAreaMonitorSource.monitorExpired?4(QGeoAreaMonitorInfo) +QtPositioning.QGeoAreaMonitorSource.error?4(QGeoAreaMonitorSource.Error) +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeatures?1() +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeatures.__init__?1(self) +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeatures?1(int) +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeatures.__init__?1(self, int) +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeatures?1(QGeoAreaMonitorSource.AreaMonitorFeatures) +QtPositioning.QGeoAreaMonitorSource.AreaMonitorFeatures.__init__?1(self, QGeoAreaMonitorSource.AreaMonitorFeatures) +QtPositioning.QGeoShape.ShapeType?10 +QtPositioning.QGeoShape.ShapeType.UnknownType?10 +QtPositioning.QGeoShape.ShapeType.RectangleType?10 +QtPositioning.QGeoShape.ShapeType.CircleType?10 +QtPositioning.QGeoShape.ShapeType.PathType?10 +QtPositioning.QGeoShape.ShapeType.PolygonType?10 +QtPositioning.QGeoShape?1() +QtPositioning.QGeoShape.__init__?1(self) +QtPositioning.QGeoShape?1(QGeoShape) +QtPositioning.QGeoShape.__init__?1(self, QGeoShape) +QtPositioning.QGeoShape.type?4() -> QGeoShape.ShapeType +QtPositioning.QGeoShape.isValid?4() -> bool +QtPositioning.QGeoShape.isEmpty?4() -> bool +QtPositioning.QGeoShape.contains?4(QGeoCoordinate) -> bool +QtPositioning.QGeoShape.extendShape?4(QGeoCoordinate) +QtPositioning.QGeoShape.center?4() -> QGeoCoordinate +QtPositioning.QGeoShape.toString?4() -> QString +QtPositioning.QGeoShape.boundingGeoRectangle?4() -> QGeoRectangle +QtPositioning.QGeoCircle?1() +QtPositioning.QGeoCircle.__init__?1(self) +QtPositioning.QGeoCircle?1(QGeoCoordinate, float radius=-1) +QtPositioning.QGeoCircle.__init__?1(self, QGeoCoordinate, float radius=-1) +QtPositioning.QGeoCircle?1(QGeoCircle) +QtPositioning.QGeoCircle.__init__?1(self, QGeoCircle) +QtPositioning.QGeoCircle?1(QGeoShape) +QtPositioning.QGeoCircle.__init__?1(self, QGeoShape) +QtPositioning.QGeoCircle.setCenter?4(QGeoCoordinate) +QtPositioning.QGeoCircle.center?4() -> QGeoCoordinate +QtPositioning.QGeoCircle.setRadius?4(float) +QtPositioning.QGeoCircle.radius?4() -> float +QtPositioning.QGeoCircle.translate?4(float, float) +QtPositioning.QGeoCircle.translated?4(float, float) -> QGeoCircle +QtPositioning.QGeoCircle.toString?4() -> QString +QtPositioning.QGeoCircle.extendCircle?4(QGeoCoordinate) +QtPositioning.QGeoCoordinate.CoordinateFormat?10 +QtPositioning.QGeoCoordinate.CoordinateFormat.Degrees?10 +QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesWithHemisphere?10 +QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesMinutes?10 +QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesMinutesWithHemisphere?10 +QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesMinutesSeconds?10 +QtPositioning.QGeoCoordinate.CoordinateFormat.DegreesMinutesSecondsWithHemisphere?10 +QtPositioning.QGeoCoordinate.CoordinateType?10 +QtPositioning.QGeoCoordinate.CoordinateType.InvalidCoordinate?10 +QtPositioning.QGeoCoordinate.CoordinateType.Coordinate2D?10 +QtPositioning.QGeoCoordinate.CoordinateType.Coordinate3D?10 +QtPositioning.QGeoCoordinate?1() +QtPositioning.QGeoCoordinate.__init__?1(self) +QtPositioning.QGeoCoordinate?1(float, float) +QtPositioning.QGeoCoordinate.__init__?1(self, float, float) +QtPositioning.QGeoCoordinate?1(float, float, float) +QtPositioning.QGeoCoordinate.__init__?1(self, float, float, float) +QtPositioning.QGeoCoordinate?1(QGeoCoordinate) +QtPositioning.QGeoCoordinate.__init__?1(self, QGeoCoordinate) +QtPositioning.QGeoCoordinate.isValid?4() -> bool +QtPositioning.QGeoCoordinate.type?4() -> QGeoCoordinate.CoordinateType +QtPositioning.QGeoCoordinate.setLatitude?4(float) +QtPositioning.QGeoCoordinate.latitude?4() -> float +QtPositioning.QGeoCoordinate.setLongitude?4(float) +QtPositioning.QGeoCoordinate.longitude?4() -> float +QtPositioning.QGeoCoordinate.setAltitude?4(float) +QtPositioning.QGeoCoordinate.altitude?4() -> float +QtPositioning.QGeoCoordinate.distanceTo?4(QGeoCoordinate) -> float +QtPositioning.QGeoCoordinate.azimuthTo?4(QGeoCoordinate) -> float +QtPositioning.QGeoCoordinate.atDistanceAndAzimuth?4(float, float, float distanceUp=0) -> QGeoCoordinate +QtPositioning.QGeoCoordinate.toString?4(QGeoCoordinate.CoordinateFormat format=QGeoCoordinate.DegreesMinutesSecondsWithHemisphere) -> QString +QtPositioning.QGeoLocation?1() +QtPositioning.QGeoLocation.__init__?1(self) +QtPositioning.QGeoLocation?1(QGeoLocation) +QtPositioning.QGeoLocation.__init__?1(self, QGeoLocation) +QtPositioning.QGeoLocation.address?4() -> QGeoAddress +QtPositioning.QGeoLocation.setAddress?4(QGeoAddress) +QtPositioning.QGeoLocation.coordinate?4() -> QGeoCoordinate +QtPositioning.QGeoLocation.setCoordinate?4(QGeoCoordinate) +QtPositioning.QGeoLocation.boundingBox?4() -> QGeoRectangle +QtPositioning.QGeoLocation.setBoundingBox?4(QGeoRectangle) +QtPositioning.QGeoLocation.isEmpty?4() -> bool +QtPositioning.QGeoLocation.extendedAttributes?4() -> QVariantMap +QtPositioning.QGeoLocation.setExtendedAttributes?4(QVariantMap) +QtPositioning.QGeoPath?1() +QtPositioning.QGeoPath.__init__?1(self) +QtPositioning.QGeoPath?1(unknown-type, float width=0) +QtPositioning.QGeoPath.__init__?1(self, unknown-type, float width=0) +QtPositioning.QGeoPath?1(QGeoPath) +QtPositioning.QGeoPath.__init__?1(self, QGeoPath) +QtPositioning.QGeoPath?1(QGeoShape) +QtPositioning.QGeoPath.__init__?1(self, QGeoShape) +QtPositioning.QGeoPath.setPath?4(unknown-type) +QtPositioning.QGeoPath.path?4() -> unknown-type +QtPositioning.QGeoPath.setWidth?4(float) +QtPositioning.QGeoPath.width?4() -> float +QtPositioning.QGeoPath.translate?4(float, float) +QtPositioning.QGeoPath.translated?4(float, float) -> QGeoPath +QtPositioning.QGeoPath.length?4(int indexFrom=0, int indexTo=-1) -> float +QtPositioning.QGeoPath.addCoordinate?4(QGeoCoordinate) +QtPositioning.QGeoPath.insertCoordinate?4(int, QGeoCoordinate) +QtPositioning.QGeoPath.replaceCoordinate?4(int, QGeoCoordinate) +QtPositioning.QGeoPath.coordinateAt?4(int) -> QGeoCoordinate +QtPositioning.QGeoPath.containsCoordinate?4(QGeoCoordinate) -> bool +QtPositioning.QGeoPath.removeCoordinate?4(QGeoCoordinate) +QtPositioning.QGeoPath.removeCoordinate?4(int) +QtPositioning.QGeoPath.toString?4() -> QString +QtPositioning.QGeoPath.size?4() -> int +QtPositioning.QGeoPath.clearPath?4() +QtPositioning.QGeoPolygon?1() +QtPositioning.QGeoPolygon.__init__?1(self) +QtPositioning.QGeoPolygon?1(unknown-type) +QtPositioning.QGeoPolygon.__init__?1(self, unknown-type) +QtPositioning.QGeoPolygon?1(QGeoPolygon) +QtPositioning.QGeoPolygon.__init__?1(self, QGeoPolygon) +QtPositioning.QGeoPolygon?1(QGeoShape) +QtPositioning.QGeoPolygon.__init__?1(self, QGeoShape) +QtPositioning.QGeoPolygon.setPath?4(unknown-type) +QtPositioning.QGeoPolygon.path?4() -> unknown-type +QtPositioning.QGeoPolygon.translate?4(float, float) +QtPositioning.QGeoPolygon.translated?4(float, float) -> QGeoPolygon +QtPositioning.QGeoPolygon.length?4(int indexFrom=0, int indexTo=-1) -> float +QtPositioning.QGeoPolygon.size?4() -> int +QtPositioning.QGeoPolygon.addCoordinate?4(QGeoCoordinate) +QtPositioning.QGeoPolygon.insertCoordinate?4(int, QGeoCoordinate) +QtPositioning.QGeoPolygon.replaceCoordinate?4(int, QGeoCoordinate) +QtPositioning.QGeoPolygon.coordinateAt?4(int) -> QGeoCoordinate +QtPositioning.QGeoPolygon.containsCoordinate?4(QGeoCoordinate) -> bool +QtPositioning.QGeoPolygon.removeCoordinate?4(QGeoCoordinate) +QtPositioning.QGeoPolygon.removeCoordinate?4(int) +QtPositioning.QGeoPolygon.toString?4() -> QString +QtPositioning.QGeoPolygon.addHole?4(unknown-type) +QtPositioning.QGeoPolygon.addHole?4(QVariant) +QtPositioning.QGeoPolygon.hole?4(int) -> unknown-type +QtPositioning.QGeoPolygon.holePath?4(int) -> unknown-type +QtPositioning.QGeoPolygon.removeHole?4(int) +QtPositioning.QGeoPolygon.holesCount?4() -> int +QtPositioning.QGeoPolygon.setPerimeter?4(unknown-type) +QtPositioning.QGeoPolygon.perimeter?4() -> unknown-type +QtPositioning.QGeoPositionInfo.Attribute?10 +QtPositioning.QGeoPositionInfo.Attribute.Direction?10 +QtPositioning.QGeoPositionInfo.Attribute.GroundSpeed?10 +QtPositioning.QGeoPositionInfo.Attribute.VerticalSpeed?10 +QtPositioning.QGeoPositionInfo.Attribute.MagneticVariation?10 +QtPositioning.QGeoPositionInfo.Attribute.HorizontalAccuracy?10 +QtPositioning.QGeoPositionInfo.Attribute.VerticalAccuracy?10 +QtPositioning.QGeoPositionInfo?1() +QtPositioning.QGeoPositionInfo.__init__?1(self) +QtPositioning.QGeoPositionInfo?1(QGeoCoordinate, QDateTime) +QtPositioning.QGeoPositionInfo.__init__?1(self, QGeoCoordinate, QDateTime) +QtPositioning.QGeoPositionInfo?1(QGeoPositionInfo) +QtPositioning.QGeoPositionInfo.__init__?1(self, QGeoPositionInfo) +QtPositioning.QGeoPositionInfo.isValid?4() -> bool +QtPositioning.QGeoPositionInfo.setTimestamp?4(QDateTime) +QtPositioning.QGeoPositionInfo.timestamp?4() -> QDateTime +QtPositioning.QGeoPositionInfo.setCoordinate?4(QGeoCoordinate) +QtPositioning.QGeoPositionInfo.coordinate?4() -> QGeoCoordinate +QtPositioning.QGeoPositionInfo.setAttribute?4(QGeoPositionInfo.Attribute, float) +QtPositioning.QGeoPositionInfo.attribute?4(QGeoPositionInfo.Attribute) -> float +QtPositioning.QGeoPositionInfo.removeAttribute?4(QGeoPositionInfo.Attribute) +QtPositioning.QGeoPositionInfo.hasAttribute?4(QGeoPositionInfo.Attribute) -> bool +QtPositioning.QGeoPositionInfoSource.PositioningMethod?10 +QtPositioning.QGeoPositionInfoSource.PositioningMethod.NoPositioningMethods?10 +QtPositioning.QGeoPositionInfoSource.PositioningMethod.SatellitePositioningMethods?10 +QtPositioning.QGeoPositionInfoSource.PositioningMethod.NonSatellitePositioningMethods?10 +QtPositioning.QGeoPositionInfoSource.PositioningMethod.AllPositioningMethods?10 +QtPositioning.QGeoPositionInfoSource.Error?10 +QtPositioning.QGeoPositionInfoSource.Error.AccessError?10 +QtPositioning.QGeoPositionInfoSource.Error.ClosedError?10 +QtPositioning.QGeoPositionInfoSource.Error.UnknownSourceError?10 +QtPositioning.QGeoPositionInfoSource.Error.NoError?10 +QtPositioning.QGeoPositionInfoSource?1(QObject) +QtPositioning.QGeoPositionInfoSource.__init__?1(self, QObject) +QtPositioning.QGeoPositionInfoSource.setUpdateInterval?4(int) +QtPositioning.QGeoPositionInfoSource.updateInterval?4() -> int +QtPositioning.QGeoPositionInfoSource.setPreferredPositioningMethods?4(QGeoPositionInfoSource.PositioningMethods) +QtPositioning.QGeoPositionInfoSource.preferredPositioningMethods?4() -> QGeoPositionInfoSource.PositioningMethods +QtPositioning.QGeoPositionInfoSource.lastKnownPosition?4(bool fromSatellitePositioningMethodsOnly=False) -> QGeoPositionInfo +QtPositioning.QGeoPositionInfoSource.supportedPositioningMethods?4() -> QGeoPositionInfoSource.PositioningMethods +QtPositioning.QGeoPositionInfoSource.minimumUpdateInterval?4() -> int +QtPositioning.QGeoPositionInfoSource.sourceName?4() -> QString +QtPositioning.QGeoPositionInfoSource.createDefaultSource?4(QObject) -> QGeoPositionInfoSource +QtPositioning.QGeoPositionInfoSource.createDefaultSource?4(QVariantMap, QObject) -> QGeoPositionInfoSource +QtPositioning.QGeoPositionInfoSource.createSource?4(QString, QObject) -> QGeoPositionInfoSource +QtPositioning.QGeoPositionInfoSource.createSource?4(QString, QVariantMap, QObject) -> QGeoPositionInfoSource +QtPositioning.QGeoPositionInfoSource.availableSources?4() -> QStringList +QtPositioning.QGeoPositionInfoSource.error?4() -> QGeoPositionInfoSource.Error +QtPositioning.QGeoPositionInfoSource.startUpdates?4() +QtPositioning.QGeoPositionInfoSource.stopUpdates?4() +QtPositioning.QGeoPositionInfoSource.requestUpdate?4(int timeout=0) +QtPositioning.QGeoPositionInfoSource.positionUpdated?4(QGeoPositionInfo) +QtPositioning.QGeoPositionInfoSource.updateTimeout?4() +QtPositioning.QGeoPositionInfoSource.error?4(QGeoPositionInfoSource.Error) +QtPositioning.QGeoPositionInfoSource.supportedPositioningMethodsChanged?4() +QtPositioning.QGeoPositionInfoSource.setBackendProperty?4(QString, QVariant) -> bool +QtPositioning.QGeoPositionInfoSource.backendProperty?4(QString) -> QVariant +QtPositioning.QGeoPositionInfoSource.PositioningMethods?1() +QtPositioning.QGeoPositionInfoSource.PositioningMethods.__init__?1(self) +QtPositioning.QGeoPositionInfoSource.PositioningMethods?1(int) +QtPositioning.QGeoPositionInfoSource.PositioningMethods.__init__?1(self, int) +QtPositioning.QGeoPositionInfoSource.PositioningMethods?1(QGeoPositionInfoSource.PositioningMethods) +QtPositioning.QGeoPositionInfoSource.PositioningMethods.__init__?1(self, QGeoPositionInfoSource.PositioningMethods) +QtPositioning.QGeoRectangle?1() +QtPositioning.QGeoRectangle.__init__?1(self) +QtPositioning.QGeoRectangle?1(QGeoCoordinate, float, float) +QtPositioning.QGeoRectangle.__init__?1(self, QGeoCoordinate, float, float) +QtPositioning.QGeoRectangle?1(QGeoCoordinate, QGeoCoordinate) +QtPositioning.QGeoRectangle.__init__?1(self, QGeoCoordinate, QGeoCoordinate) +QtPositioning.QGeoRectangle?1(unknown-type) +QtPositioning.QGeoRectangle.__init__?1(self, unknown-type) +QtPositioning.QGeoRectangle?1(QGeoRectangle) +QtPositioning.QGeoRectangle.__init__?1(self, QGeoRectangle) +QtPositioning.QGeoRectangle?1(QGeoShape) +QtPositioning.QGeoRectangle.__init__?1(self, QGeoShape) +QtPositioning.QGeoRectangle.setTopLeft?4(QGeoCoordinate) +QtPositioning.QGeoRectangle.topLeft?4() -> QGeoCoordinate +QtPositioning.QGeoRectangle.setTopRight?4(QGeoCoordinate) +QtPositioning.QGeoRectangle.topRight?4() -> QGeoCoordinate +QtPositioning.QGeoRectangle.setBottomLeft?4(QGeoCoordinate) +QtPositioning.QGeoRectangle.bottomLeft?4() -> QGeoCoordinate +QtPositioning.QGeoRectangle.setBottomRight?4(QGeoCoordinate) +QtPositioning.QGeoRectangle.bottomRight?4() -> QGeoCoordinate +QtPositioning.QGeoRectangle.setCenter?4(QGeoCoordinate) +QtPositioning.QGeoRectangle.center?4() -> QGeoCoordinate +QtPositioning.QGeoRectangle.setWidth?4(float) +QtPositioning.QGeoRectangle.width?4() -> float +QtPositioning.QGeoRectangle.setHeight?4(float) +QtPositioning.QGeoRectangle.height?4() -> float +QtPositioning.QGeoRectangle.contains?4(QGeoRectangle) -> bool +QtPositioning.QGeoRectangle.intersects?4(QGeoRectangle) -> bool +QtPositioning.QGeoRectangle.translate?4(float, float) +QtPositioning.QGeoRectangle.translated?4(float, float) -> QGeoRectangle +QtPositioning.QGeoRectangle.united?4(QGeoRectangle) -> QGeoRectangle +QtPositioning.QGeoRectangle.toString?4() -> QString +QtPositioning.QGeoRectangle.extendRectangle?4(QGeoCoordinate) +QtPositioning.QGeoSatelliteInfo.SatelliteSystem?10 +QtPositioning.QGeoSatelliteInfo.SatelliteSystem.Undefined?10 +QtPositioning.QGeoSatelliteInfo.SatelliteSystem.GPS?10 +QtPositioning.QGeoSatelliteInfo.SatelliteSystem.GLONASS?10 +QtPositioning.QGeoSatelliteInfo.Attribute?10 +QtPositioning.QGeoSatelliteInfo.Attribute.Elevation?10 +QtPositioning.QGeoSatelliteInfo.Attribute.Azimuth?10 +QtPositioning.QGeoSatelliteInfo?1() +QtPositioning.QGeoSatelliteInfo.__init__?1(self) +QtPositioning.QGeoSatelliteInfo?1(QGeoSatelliteInfo) +QtPositioning.QGeoSatelliteInfo.__init__?1(self, QGeoSatelliteInfo) +QtPositioning.QGeoSatelliteInfo.setSatelliteSystem?4(QGeoSatelliteInfo.SatelliteSystem) +QtPositioning.QGeoSatelliteInfo.satelliteSystem?4() -> QGeoSatelliteInfo.SatelliteSystem +QtPositioning.QGeoSatelliteInfo.setSatelliteIdentifier?4(int) +QtPositioning.QGeoSatelliteInfo.satelliteIdentifier?4() -> int +QtPositioning.QGeoSatelliteInfo.setSignalStrength?4(int) +QtPositioning.QGeoSatelliteInfo.signalStrength?4() -> int +QtPositioning.QGeoSatelliteInfo.setAttribute?4(QGeoSatelliteInfo.Attribute, float) +QtPositioning.QGeoSatelliteInfo.attribute?4(QGeoSatelliteInfo.Attribute) -> float +QtPositioning.QGeoSatelliteInfo.removeAttribute?4(QGeoSatelliteInfo.Attribute) +QtPositioning.QGeoSatelliteInfo.hasAttribute?4(QGeoSatelliteInfo.Attribute) -> bool +QtPositioning.QGeoSatelliteInfoSource.Error?10 +QtPositioning.QGeoSatelliteInfoSource.Error.AccessError?10 +QtPositioning.QGeoSatelliteInfoSource.Error.ClosedError?10 +QtPositioning.QGeoSatelliteInfoSource.Error.NoError?10 +QtPositioning.QGeoSatelliteInfoSource.Error.UnknownSourceError?10 +QtPositioning.QGeoSatelliteInfoSource?1(QObject) +QtPositioning.QGeoSatelliteInfoSource.__init__?1(self, QObject) +QtPositioning.QGeoSatelliteInfoSource.createDefaultSource?4(QObject) -> QGeoSatelliteInfoSource +QtPositioning.QGeoSatelliteInfoSource.createDefaultSource?4(QVariantMap, QObject) -> QGeoSatelliteInfoSource +QtPositioning.QGeoSatelliteInfoSource.createSource?4(QString, QObject) -> QGeoSatelliteInfoSource +QtPositioning.QGeoSatelliteInfoSource.createSource?4(QString, QVariantMap, QObject) -> QGeoSatelliteInfoSource +QtPositioning.QGeoSatelliteInfoSource.availableSources?4() -> QStringList +QtPositioning.QGeoSatelliteInfoSource.sourceName?4() -> QString +QtPositioning.QGeoSatelliteInfoSource.setUpdateInterval?4(int) +QtPositioning.QGeoSatelliteInfoSource.updateInterval?4() -> int +QtPositioning.QGeoSatelliteInfoSource.minimumUpdateInterval?4() -> int +QtPositioning.QGeoSatelliteInfoSource.error?4() -> QGeoSatelliteInfoSource.Error +QtPositioning.QGeoSatelliteInfoSource.startUpdates?4() +QtPositioning.QGeoSatelliteInfoSource.stopUpdates?4() +QtPositioning.QGeoSatelliteInfoSource.requestUpdate?4(int timeout=0) +QtPositioning.QGeoSatelliteInfoSource.satellitesInViewUpdated?4(unknown-type) +QtPositioning.QGeoSatelliteInfoSource.satellitesInUseUpdated?4(unknown-type) +QtPositioning.QGeoSatelliteInfoSource.requestTimeout?4() +QtPositioning.QGeoSatelliteInfoSource.error?4(QGeoSatelliteInfoSource.Error) +QtPositioning.QNmeaPositionInfoSource.UpdateMode?10 +QtPositioning.QNmeaPositionInfoSource.UpdateMode.RealTimeMode?10 +QtPositioning.QNmeaPositionInfoSource.UpdateMode.SimulationMode?10 +QtPositioning.QNmeaPositionInfoSource?1(QNmeaPositionInfoSource.UpdateMode, QObject parent=None) +QtPositioning.QNmeaPositionInfoSource.__init__?1(self, QNmeaPositionInfoSource.UpdateMode, QObject parent=None) +QtPositioning.QNmeaPositionInfoSource.updateMode?4() -> QNmeaPositionInfoSource.UpdateMode +QtPositioning.QNmeaPositionInfoSource.setDevice?4(QIODevice) +QtPositioning.QNmeaPositionInfoSource.device?4() -> QIODevice +QtPositioning.QNmeaPositionInfoSource.setUpdateInterval?4(int) +QtPositioning.QNmeaPositionInfoSource.lastKnownPosition?4(bool fromSatellitePositioningMethodsOnly=False) -> QGeoPositionInfo +QtPositioning.QNmeaPositionInfoSource.supportedPositioningMethods?4() -> QGeoPositionInfoSource.PositioningMethods +QtPositioning.QNmeaPositionInfoSource.minimumUpdateInterval?4() -> int +QtPositioning.QNmeaPositionInfoSource.error?4() -> QGeoPositionInfoSource.Error +QtPositioning.QNmeaPositionInfoSource.startUpdates?4() +QtPositioning.QNmeaPositionInfoSource.stopUpdates?4() +QtPositioning.QNmeaPositionInfoSource.requestUpdate?4(int timeout=0) +QtPositioning.QNmeaPositionInfoSource.parsePosInfoFromNmeaData?4(bytes, int, QGeoPositionInfo) -> (bool, bool) +QtPositioning.QNmeaPositionInfoSource.setUserEquivalentRangeError?4(float) +QtPositioning.QNmeaPositionInfoSource.userEquivalentRangeError?4() -> float +QtLocation.QGeoCodeReply.Error?10 +QtLocation.QGeoCodeReply.Error.NoError?10 +QtLocation.QGeoCodeReply.Error.EngineNotSetError?10 +QtLocation.QGeoCodeReply.Error.CommunicationError?10 +QtLocation.QGeoCodeReply.Error.ParseError?10 +QtLocation.QGeoCodeReply.Error.UnsupportedOptionError?10 +QtLocation.QGeoCodeReply.Error.CombinationError?10 +QtLocation.QGeoCodeReply.Error.UnknownError?10 +QtLocation.QGeoCodeReply?1(QGeoCodeReply.Error, QString, QObject parent=None) +QtLocation.QGeoCodeReply.__init__?1(self, QGeoCodeReply.Error, QString, QObject parent=None) +QtLocation.QGeoCodeReply?1(QObject parent=None) +QtLocation.QGeoCodeReply.__init__?1(self, QObject parent=None) +QtLocation.QGeoCodeReply.isFinished?4() -> bool +QtLocation.QGeoCodeReply.error?4() -> QGeoCodeReply.Error +QtLocation.QGeoCodeReply.errorString?4() -> QString +QtLocation.QGeoCodeReply.viewport?4() -> QGeoShape +QtLocation.QGeoCodeReply.locations?4() -> unknown-type +QtLocation.QGeoCodeReply.limit?4() -> int +QtLocation.QGeoCodeReply.offset?4() -> int +QtLocation.QGeoCodeReply.abort?4() +QtLocation.QGeoCodeReply.aborted?4() +QtLocation.QGeoCodeReply.finished?4() +QtLocation.QGeoCodeReply.error?4(QGeoCodeReply.Error, QString errorString='') +QtLocation.QGeoCodeReply.setError?4(QGeoCodeReply.Error, QString) +QtLocation.QGeoCodeReply.setFinished?4(bool) +QtLocation.QGeoCodeReply.setViewport?4(QGeoShape) +QtLocation.QGeoCodeReply.addLocation?4(QGeoLocation) +QtLocation.QGeoCodeReply.setLocations?4(unknown-type) +QtLocation.QGeoCodeReply.setLimit?4(int) +QtLocation.QGeoCodeReply.setOffset?4(int) +QtLocation.QGeoCodingManager.managerName?4() -> QString +QtLocation.QGeoCodingManager.managerVersion?4() -> int +QtLocation.QGeoCodingManager.geocode?4(QGeoAddress, QGeoShape bounds=QGeoShape()) -> QGeoCodeReply +QtLocation.QGeoCodingManager.geocode?4(QString, int limit=-1, int offset=0, QGeoShape bounds=QGeoShape()) -> QGeoCodeReply +QtLocation.QGeoCodingManager.reverseGeocode?4(QGeoCoordinate, QGeoShape bounds=QGeoShape()) -> QGeoCodeReply +QtLocation.QGeoCodingManager.setLocale?4(QLocale) +QtLocation.QGeoCodingManager.locale?4() -> QLocale +QtLocation.QGeoCodingManager.finished?4(QGeoCodeReply) +QtLocation.QGeoCodingManager.error?4(QGeoCodeReply, QGeoCodeReply.Error, QString errorString='') +QtLocation.QGeoCodingManagerEngine?1(QVariantMap, QObject parent=None) +QtLocation.QGeoCodingManagerEngine.__init__?1(self, QVariantMap, QObject parent=None) +QtLocation.QGeoCodingManagerEngine.managerName?4() -> QString +QtLocation.QGeoCodingManagerEngine.managerVersion?4() -> int +QtLocation.QGeoCodingManagerEngine.geocode?4(QGeoAddress, QGeoShape) -> QGeoCodeReply +QtLocation.QGeoCodingManagerEngine.geocode?4(QString, int, int, QGeoShape) -> QGeoCodeReply +QtLocation.QGeoCodingManagerEngine.reverseGeocode?4(QGeoCoordinate, QGeoShape) -> QGeoCodeReply +QtLocation.QGeoCodingManagerEngine.setLocale?4(QLocale) +QtLocation.QGeoCodingManagerEngine.locale?4() -> QLocale +QtLocation.QGeoCodingManagerEngine.finished?4(QGeoCodeReply) +QtLocation.QGeoCodingManagerEngine.error?4(QGeoCodeReply, QGeoCodeReply.Error, QString errorString='') +QtLocation.QGeoManeuver.InstructionDirection?10 +QtLocation.QGeoManeuver.InstructionDirection.NoDirection?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionForward?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionBearRight?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionLightRight?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionRight?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionHardRight?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionUTurnRight?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionUTurnLeft?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionHardLeft?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionLeft?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionLightLeft?10 +QtLocation.QGeoManeuver.InstructionDirection.DirectionBearLeft?10 +QtLocation.QGeoManeuver?1() +QtLocation.QGeoManeuver.__init__?1(self) +QtLocation.QGeoManeuver?1(QGeoManeuver) +QtLocation.QGeoManeuver.__init__?1(self, QGeoManeuver) +QtLocation.QGeoManeuver.isValid?4() -> bool +QtLocation.QGeoManeuver.setPosition?4(QGeoCoordinate) +QtLocation.QGeoManeuver.position?4() -> QGeoCoordinate +QtLocation.QGeoManeuver.setInstructionText?4(QString) +QtLocation.QGeoManeuver.instructionText?4() -> QString +QtLocation.QGeoManeuver.setDirection?4(QGeoManeuver.InstructionDirection) +QtLocation.QGeoManeuver.direction?4() -> QGeoManeuver.InstructionDirection +QtLocation.QGeoManeuver.setTimeToNextInstruction?4(int) +QtLocation.QGeoManeuver.timeToNextInstruction?4() -> int +QtLocation.QGeoManeuver.setDistanceToNextInstruction?4(float) +QtLocation.QGeoManeuver.distanceToNextInstruction?4() -> float +QtLocation.QGeoManeuver.setWaypoint?4(QGeoCoordinate) +QtLocation.QGeoManeuver.waypoint?4() -> QGeoCoordinate +QtLocation.QGeoManeuver.setExtendedAttributes?4(QVariantMap) +QtLocation.QGeoManeuver.extendedAttributes?4() -> QVariantMap +QtLocation.QGeoRoute?1() +QtLocation.QGeoRoute.__init__?1(self) +QtLocation.QGeoRoute?1(QGeoRoute) +QtLocation.QGeoRoute.__init__?1(self, QGeoRoute) +QtLocation.QGeoRoute.setRouteId?4(QString) +QtLocation.QGeoRoute.routeId?4() -> QString +QtLocation.QGeoRoute.setRequest?4(QGeoRouteRequest) +QtLocation.QGeoRoute.request?4() -> QGeoRouteRequest +QtLocation.QGeoRoute.setBounds?4(QGeoRectangle) +QtLocation.QGeoRoute.bounds?4() -> QGeoRectangle +QtLocation.QGeoRoute.setFirstRouteSegment?4(QGeoRouteSegment) +QtLocation.QGeoRoute.firstRouteSegment?4() -> QGeoRouteSegment +QtLocation.QGeoRoute.setTravelTime?4(int) +QtLocation.QGeoRoute.travelTime?4() -> int +QtLocation.QGeoRoute.setDistance?4(float) +QtLocation.QGeoRoute.distance?4() -> float +QtLocation.QGeoRoute.setTravelMode?4(QGeoRouteRequest.TravelMode) +QtLocation.QGeoRoute.travelMode?4() -> QGeoRouteRequest.TravelMode +QtLocation.QGeoRoute.setPath?4(unknown-type) +QtLocation.QGeoRoute.path?4() -> unknown-type +QtLocation.QGeoRoute.setRouteLegs?4(unknown-type) +QtLocation.QGeoRoute.routeLegs?4() -> unknown-type +QtLocation.QGeoRoute.setExtendedAttributes?4(QVariantMap) +QtLocation.QGeoRoute.extendedAttributes?4() -> QVariantMap +QtLocation.QGeoRouteLeg?1() +QtLocation.QGeoRouteLeg.__init__?1(self) +QtLocation.QGeoRouteLeg?1(QGeoRouteLeg) +QtLocation.QGeoRouteLeg.__init__?1(self, QGeoRouteLeg) +QtLocation.QGeoRouteLeg.setLegIndex?4(int) +QtLocation.QGeoRouteLeg.legIndex?4() -> int +QtLocation.QGeoRouteLeg.setOverallRoute?4(QGeoRoute) +QtLocation.QGeoRouteLeg.overallRoute?4() -> QGeoRoute +QtLocation.QGeoRouteReply.Error?10 +QtLocation.QGeoRouteReply.Error.NoError?10 +QtLocation.QGeoRouteReply.Error.EngineNotSetError?10 +QtLocation.QGeoRouteReply.Error.CommunicationError?10 +QtLocation.QGeoRouteReply.Error.ParseError?10 +QtLocation.QGeoRouteReply.Error.UnsupportedOptionError?10 +QtLocation.QGeoRouteReply.Error.UnknownError?10 +QtLocation.QGeoRouteReply?1(QGeoRouteReply.Error, QString, QObject parent=None) +QtLocation.QGeoRouteReply.__init__?1(self, QGeoRouteReply.Error, QString, QObject parent=None) +QtLocation.QGeoRouteReply?1(QGeoRouteRequest, QObject parent=None) +QtLocation.QGeoRouteReply.__init__?1(self, QGeoRouteRequest, QObject parent=None) +QtLocation.QGeoRouteReply.isFinished?4() -> bool +QtLocation.QGeoRouteReply.error?4() -> QGeoRouteReply.Error +QtLocation.QGeoRouteReply.errorString?4() -> QString +QtLocation.QGeoRouteReply.request?4() -> QGeoRouteRequest +QtLocation.QGeoRouteReply.routes?4() -> unknown-type +QtLocation.QGeoRouteReply.abort?4() +QtLocation.QGeoRouteReply.aborted?4() +QtLocation.QGeoRouteReply.finished?4() +QtLocation.QGeoRouteReply.error?4(QGeoRouteReply.Error, QString errorString='') +QtLocation.QGeoRouteReply.setError?4(QGeoRouteReply.Error, QString) +QtLocation.QGeoRouteReply.setFinished?4(bool) +QtLocation.QGeoRouteReply.setRoutes?4(unknown-type) +QtLocation.QGeoRouteReply.addRoutes?4(unknown-type) +QtLocation.QGeoRouteRequest.ManeuverDetail?10 +QtLocation.QGeoRouteRequest.ManeuverDetail.NoManeuvers?10 +QtLocation.QGeoRouteRequest.ManeuverDetail.BasicManeuvers?10 +QtLocation.QGeoRouteRequest.SegmentDetail?10 +QtLocation.QGeoRouteRequest.SegmentDetail.NoSegmentData?10 +QtLocation.QGeoRouteRequest.SegmentDetail.BasicSegmentData?10 +QtLocation.QGeoRouteRequest.RouteOptimization?10 +QtLocation.QGeoRouteRequest.RouteOptimization.ShortestRoute?10 +QtLocation.QGeoRouteRequest.RouteOptimization.FastestRoute?10 +QtLocation.QGeoRouteRequest.RouteOptimization.MostEconomicRoute?10 +QtLocation.QGeoRouteRequest.RouteOptimization.MostScenicRoute?10 +QtLocation.QGeoRouteRequest.FeatureWeight?10 +QtLocation.QGeoRouteRequest.FeatureWeight.NeutralFeatureWeight?10 +QtLocation.QGeoRouteRequest.FeatureWeight.PreferFeatureWeight?10 +QtLocation.QGeoRouteRequest.FeatureWeight.RequireFeatureWeight?10 +QtLocation.QGeoRouteRequest.FeatureWeight.AvoidFeatureWeight?10 +QtLocation.QGeoRouteRequest.FeatureWeight.DisallowFeatureWeight?10 +QtLocation.QGeoRouteRequest.FeatureType?10 +QtLocation.QGeoRouteRequest.FeatureType.NoFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.TollFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.HighwayFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.PublicTransitFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.FerryFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.TunnelFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.DirtRoadFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.ParksFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.MotorPoolLaneFeature?10 +QtLocation.QGeoRouteRequest.FeatureType.TrafficFeature?10 +QtLocation.QGeoRouteRequest.TravelMode?10 +QtLocation.QGeoRouteRequest.TravelMode.CarTravel?10 +QtLocation.QGeoRouteRequest.TravelMode.PedestrianTravel?10 +QtLocation.QGeoRouteRequest.TravelMode.BicycleTravel?10 +QtLocation.QGeoRouteRequest.TravelMode.PublicTransitTravel?10 +QtLocation.QGeoRouteRequest.TravelMode.TruckTravel?10 +QtLocation.QGeoRouteRequest?1(unknown-type waypoints=[]) +QtLocation.QGeoRouteRequest.__init__?1(self, unknown-type waypoints=[]) +QtLocation.QGeoRouteRequest?1(QGeoCoordinate, QGeoCoordinate) +QtLocation.QGeoRouteRequest.__init__?1(self, QGeoCoordinate, QGeoCoordinate) +QtLocation.QGeoRouteRequest?1(QGeoRouteRequest) +QtLocation.QGeoRouteRequest.__init__?1(self, QGeoRouteRequest) +QtLocation.QGeoRouteRequest.setWaypoints?4(unknown-type) +QtLocation.QGeoRouteRequest.waypoints?4() -> unknown-type +QtLocation.QGeoRouteRequest.setExcludeAreas?4(unknown-type) +QtLocation.QGeoRouteRequest.excludeAreas?4() -> unknown-type +QtLocation.QGeoRouteRequest.setNumberAlternativeRoutes?4(int) +QtLocation.QGeoRouteRequest.numberAlternativeRoutes?4() -> int +QtLocation.QGeoRouteRequest.setTravelModes?4(QGeoRouteRequest.TravelModes) +QtLocation.QGeoRouteRequest.travelModes?4() -> QGeoRouteRequest.TravelModes +QtLocation.QGeoRouteRequest.setFeatureWeight?4(QGeoRouteRequest.FeatureType, QGeoRouteRequest.FeatureWeight) +QtLocation.QGeoRouteRequest.featureWeight?4(QGeoRouteRequest.FeatureType) -> QGeoRouteRequest.FeatureWeight +QtLocation.QGeoRouteRequest.featureTypes?4() -> unknown-type +QtLocation.QGeoRouteRequest.setRouteOptimization?4(QGeoRouteRequest.RouteOptimizations) +QtLocation.QGeoRouteRequest.routeOptimization?4() -> QGeoRouteRequest.RouteOptimizations +QtLocation.QGeoRouteRequest.setSegmentDetail?4(QGeoRouteRequest.SegmentDetail) +QtLocation.QGeoRouteRequest.segmentDetail?4() -> QGeoRouteRequest.SegmentDetail +QtLocation.QGeoRouteRequest.setManeuverDetail?4(QGeoRouteRequest.ManeuverDetail) +QtLocation.QGeoRouteRequest.maneuverDetail?4() -> QGeoRouteRequest.ManeuverDetail +QtLocation.QGeoRouteRequest.setWaypointsMetadata?4(unknown-type) +QtLocation.QGeoRouteRequest.waypointsMetadata?4() -> unknown-type +QtLocation.QGeoRouteRequest.setExtraParameters?4(QVariantMap) +QtLocation.QGeoRouteRequest.extraParameters?4() -> QVariantMap +QtLocation.QGeoRouteRequest.setDepartureTime?4(QDateTime) +QtLocation.QGeoRouteRequest.departureTime?4() -> QDateTime +QtLocation.QGeoRouteRequest.TravelModes?1() +QtLocation.QGeoRouteRequest.TravelModes.__init__?1(self) +QtLocation.QGeoRouteRequest.TravelModes?1(int) +QtLocation.QGeoRouteRequest.TravelModes.__init__?1(self, int) +QtLocation.QGeoRouteRequest.TravelModes?1(QGeoRouteRequest.TravelModes) +QtLocation.QGeoRouteRequest.TravelModes.__init__?1(self, QGeoRouteRequest.TravelModes) +QtLocation.QGeoRouteRequest.FeatureTypes?1() +QtLocation.QGeoRouteRequest.FeatureTypes.__init__?1(self) +QtLocation.QGeoRouteRequest.FeatureTypes?1(int) +QtLocation.QGeoRouteRequest.FeatureTypes.__init__?1(self, int) +QtLocation.QGeoRouteRequest.FeatureTypes?1(QGeoRouteRequest.FeatureTypes) +QtLocation.QGeoRouteRequest.FeatureTypes.__init__?1(self, QGeoRouteRequest.FeatureTypes) +QtLocation.QGeoRouteRequest.FeatureWeights?1() +QtLocation.QGeoRouteRequest.FeatureWeights.__init__?1(self) +QtLocation.QGeoRouteRequest.FeatureWeights?1(int) +QtLocation.QGeoRouteRequest.FeatureWeights.__init__?1(self, int) +QtLocation.QGeoRouteRequest.FeatureWeights?1(QGeoRouteRequest.FeatureWeights) +QtLocation.QGeoRouteRequest.FeatureWeights.__init__?1(self, QGeoRouteRequest.FeatureWeights) +QtLocation.QGeoRouteRequest.RouteOptimizations?1() +QtLocation.QGeoRouteRequest.RouteOptimizations.__init__?1(self) +QtLocation.QGeoRouteRequest.RouteOptimizations?1(int) +QtLocation.QGeoRouteRequest.RouteOptimizations.__init__?1(self, int) +QtLocation.QGeoRouteRequest.RouteOptimizations?1(QGeoRouteRequest.RouteOptimizations) +QtLocation.QGeoRouteRequest.RouteOptimizations.__init__?1(self, QGeoRouteRequest.RouteOptimizations) +QtLocation.QGeoRouteRequest.SegmentDetails?1() +QtLocation.QGeoRouteRequest.SegmentDetails.__init__?1(self) +QtLocation.QGeoRouteRequest.SegmentDetails?1(int) +QtLocation.QGeoRouteRequest.SegmentDetails.__init__?1(self, int) +QtLocation.QGeoRouteRequest.SegmentDetails?1(QGeoRouteRequest.SegmentDetails) +QtLocation.QGeoRouteRequest.SegmentDetails.__init__?1(self, QGeoRouteRequest.SegmentDetails) +QtLocation.QGeoRouteRequest.ManeuverDetails?1() +QtLocation.QGeoRouteRequest.ManeuverDetails.__init__?1(self) +QtLocation.QGeoRouteRequest.ManeuverDetails?1(int) +QtLocation.QGeoRouteRequest.ManeuverDetails.__init__?1(self, int) +QtLocation.QGeoRouteRequest.ManeuverDetails?1(QGeoRouteRequest.ManeuverDetails) +QtLocation.QGeoRouteRequest.ManeuverDetails.__init__?1(self, QGeoRouteRequest.ManeuverDetails) +QtLocation.QGeoRouteSegment?1() +QtLocation.QGeoRouteSegment.__init__?1(self) +QtLocation.QGeoRouteSegment?1(QGeoRouteSegment) +QtLocation.QGeoRouteSegment.__init__?1(self, QGeoRouteSegment) +QtLocation.QGeoRouteSegment.isValid?4() -> bool +QtLocation.QGeoRouteSegment.setNextRouteSegment?4(QGeoRouteSegment) +QtLocation.QGeoRouteSegment.nextRouteSegment?4() -> QGeoRouteSegment +QtLocation.QGeoRouteSegment.setTravelTime?4(int) +QtLocation.QGeoRouteSegment.travelTime?4() -> int +QtLocation.QGeoRouteSegment.setDistance?4(float) +QtLocation.QGeoRouteSegment.distance?4() -> float +QtLocation.QGeoRouteSegment.setPath?4(unknown-type) +QtLocation.QGeoRouteSegment.path?4() -> unknown-type +QtLocation.QGeoRouteSegment.setManeuver?4(QGeoManeuver) +QtLocation.QGeoRouteSegment.maneuver?4() -> QGeoManeuver +QtLocation.QGeoRouteSegment.isLegLastSegment?4() -> bool +QtLocation.QGeoRoutingManager.managerName?4() -> QString +QtLocation.QGeoRoutingManager.managerVersion?4() -> int +QtLocation.QGeoRoutingManager.calculateRoute?4(QGeoRouteRequest) -> QGeoRouteReply +QtLocation.QGeoRoutingManager.updateRoute?4(QGeoRoute, QGeoCoordinate) -> QGeoRouteReply +QtLocation.QGeoRoutingManager.supportedTravelModes?4() -> QGeoRouteRequest.TravelModes +QtLocation.QGeoRoutingManager.supportedFeatureTypes?4() -> QGeoRouteRequest.FeatureTypes +QtLocation.QGeoRoutingManager.supportedFeatureWeights?4() -> QGeoRouteRequest.FeatureWeights +QtLocation.QGeoRoutingManager.supportedRouteOptimizations?4() -> QGeoRouteRequest.RouteOptimizations +QtLocation.QGeoRoutingManager.supportedSegmentDetails?4() -> QGeoRouteRequest.SegmentDetails +QtLocation.QGeoRoutingManager.supportedManeuverDetails?4() -> QGeoRouteRequest.ManeuverDetails +QtLocation.QGeoRoutingManager.setLocale?4(QLocale) +QtLocation.QGeoRoutingManager.locale?4() -> QLocale +QtLocation.QGeoRoutingManager.setMeasurementSystem?4(QLocale.MeasurementSystem) +QtLocation.QGeoRoutingManager.measurementSystem?4() -> QLocale.MeasurementSystem +QtLocation.QGeoRoutingManager.finished?4(QGeoRouteReply) +QtLocation.QGeoRoutingManager.error?4(QGeoRouteReply, QGeoRouteReply.Error, QString errorString='') +QtLocation.QGeoRoutingManagerEngine?1(QVariantMap, QObject parent=None) +QtLocation.QGeoRoutingManagerEngine.__init__?1(self, QVariantMap, QObject parent=None) +QtLocation.QGeoRoutingManagerEngine.managerName?4() -> QString +QtLocation.QGeoRoutingManagerEngine.managerVersion?4() -> int +QtLocation.QGeoRoutingManagerEngine.calculateRoute?4(QGeoRouteRequest) -> QGeoRouteReply +QtLocation.QGeoRoutingManagerEngine.updateRoute?4(QGeoRoute, QGeoCoordinate) -> QGeoRouteReply +QtLocation.QGeoRoutingManagerEngine.supportedTravelModes?4() -> QGeoRouteRequest.TravelModes +QtLocation.QGeoRoutingManagerEngine.supportedFeatureTypes?4() -> QGeoRouteRequest.FeatureTypes +QtLocation.QGeoRoutingManagerEngine.supportedFeatureWeights?4() -> QGeoRouteRequest.FeatureWeights +QtLocation.QGeoRoutingManagerEngine.supportedRouteOptimizations?4() -> QGeoRouteRequest.RouteOptimizations +QtLocation.QGeoRoutingManagerEngine.supportedSegmentDetails?4() -> QGeoRouteRequest.SegmentDetails +QtLocation.QGeoRoutingManagerEngine.supportedManeuverDetails?4() -> QGeoRouteRequest.ManeuverDetails +QtLocation.QGeoRoutingManagerEngine.setLocale?4(QLocale) +QtLocation.QGeoRoutingManagerEngine.locale?4() -> QLocale +QtLocation.QGeoRoutingManagerEngine.setMeasurementSystem?4(QLocale.MeasurementSystem) +QtLocation.QGeoRoutingManagerEngine.measurementSystem?4() -> QLocale.MeasurementSystem +QtLocation.QGeoRoutingManagerEngine.finished?4(QGeoRouteReply) +QtLocation.QGeoRoutingManagerEngine.error?4(QGeoRouteReply, QGeoRouteReply.Error, QString errorString='') +QtLocation.QGeoRoutingManagerEngine.setSupportedTravelModes?4(QGeoRouteRequest.TravelModes) +QtLocation.QGeoRoutingManagerEngine.setSupportedFeatureTypes?4(QGeoRouteRequest.FeatureTypes) +QtLocation.QGeoRoutingManagerEngine.setSupportedFeatureWeights?4(QGeoRouteRequest.FeatureWeights) +QtLocation.QGeoRoutingManagerEngine.setSupportedRouteOptimizations?4(QGeoRouteRequest.RouteOptimizations) +QtLocation.QGeoRoutingManagerEngine.setSupportedSegmentDetails?4(QGeoRouteRequest.SegmentDetails) +QtLocation.QGeoRoutingManagerEngine.setSupportedManeuverDetails?4(QGeoRouteRequest.ManeuverDetails) +QtLocation.QGeoServiceProvider.NavigationFeature?10 +QtLocation.QGeoServiceProvider.NavigationFeature.NoNavigationFeatures?10 +QtLocation.QGeoServiceProvider.NavigationFeature.OnlineNavigationFeature?10 +QtLocation.QGeoServiceProvider.NavigationFeature.OfflineNavigationFeature?10 +QtLocation.QGeoServiceProvider.NavigationFeature.AnyNavigationFeatures?10 +QtLocation.QGeoServiceProvider.PlacesFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.NoPlacesFeatures?10 +QtLocation.QGeoServiceProvider.PlacesFeature.OnlinePlacesFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.OfflinePlacesFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.SavePlaceFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.RemovePlaceFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.SaveCategoryFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.RemoveCategoryFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.PlaceRecommendationsFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.SearchSuggestionsFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.LocalizedPlacesFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.NotificationsFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.PlaceMatchingFeature?10 +QtLocation.QGeoServiceProvider.PlacesFeature.AnyPlacesFeatures?10 +QtLocation.QGeoServiceProvider.MappingFeature?10 +QtLocation.QGeoServiceProvider.MappingFeature.NoMappingFeatures?10 +QtLocation.QGeoServiceProvider.MappingFeature.OnlineMappingFeature?10 +QtLocation.QGeoServiceProvider.MappingFeature.OfflineMappingFeature?10 +QtLocation.QGeoServiceProvider.MappingFeature.LocalizedMappingFeature?10 +QtLocation.QGeoServiceProvider.MappingFeature.AnyMappingFeatures?10 +QtLocation.QGeoServiceProvider.GeocodingFeature?10 +QtLocation.QGeoServiceProvider.GeocodingFeature.NoGeocodingFeatures?10 +QtLocation.QGeoServiceProvider.GeocodingFeature.OnlineGeocodingFeature?10 +QtLocation.QGeoServiceProvider.GeocodingFeature.OfflineGeocodingFeature?10 +QtLocation.QGeoServiceProvider.GeocodingFeature.ReverseGeocodingFeature?10 +QtLocation.QGeoServiceProvider.GeocodingFeature.LocalizedGeocodingFeature?10 +QtLocation.QGeoServiceProvider.GeocodingFeature.AnyGeocodingFeatures?10 +QtLocation.QGeoServiceProvider.RoutingFeature?10 +QtLocation.QGeoServiceProvider.RoutingFeature.NoRoutingFeatures?10 +QtLocation.QGeoServiceProvider.RoutingFeature.OnlineRoutingFeature?10 +QtLocation.QGeoServiceProvider.RoutingFeature.OfflineRoutingFeature?10 +QtLocation.QGeoServiceProvider.RoutingFeature.LocalizedRoutingFeature?10 +QtLocation.QGeoServiceProvider.RoutingFeature.RouteUpdatesFeature?10 +QtLocation.QGeoServiceProvider.RoutingFeature.AlternativeRoutesFeature?10 +QtLocation.QGeoServiceProvider.RoutingFeature.ExcludeAreasRoutingFeature?10 +QtLocation.QGeoServiceProvider.RoutingFeature.AnyRoutingFeatures?10 +QtLocation.QGeoServiceProvider.Error?10 +QtLocation.QGeoServiceProvider.Error.NoError?10 +QtLocation.QGeoServiceProvider.Error.NotSupportedError?10 +QtLocation.QGeoServiceProvider.Error.UnknownParameterError?10 +QtLocation.QGeoServiceProvider.Error.MissingRequiredParameterError?10 +QtLocation.QGeoServiceProvider.Error.ConnectionError?10 +QtLocation.QGeoServiceProvider.Error.LoaderError?10 +QtLocation.QGeoServiceProvider?1(QString, QVariantMap parameters={}, bool allowExperimental=False) +QtLocation.QGeoServiceProvider.__init__?1(self, QString, QVariantMap parameters={}, bool allowExperimental=False) +QtLocation.QGeoServiceProvider.availableServiceProviders?4() -> QStringList +QtLocation.QGeoServiceProvider.routingFeatures?4() -> QGeoServiceProvider.RoutingFeatures +QtLocation.QGeoServiceProvider.geocodingFeatures?4() -> QGeoServiceProvider.GeocodingFeatures +QtLocation.QGeoServiceProvider.mappingFeatures?4() -> QGeoServiceProvider.MappingFeatures +QtLocation.QGeoServiceProvider.placesFeatures?4() -> QGeoServiceProvider.PlacesFeatures +QtLocation.QGeoServiceProvider.geocodingManager?4() -> QGeoCodingManager +QtLocation.QGeoServiceProvider.routingManager?4() -> QGeoRoutingManager +QtLocation.QGeoServiceProvider.placeManager?4() -> QPlaceManager +QtLocation.QGeoServiceProvider.error?4() -> QGeoServiceProvider.Error +QtLocation.QGeoServiceProvider.errorString?4() -> QString +QtLocation.QGeoServiceProvider.setParameters?4(QVariantMap) +QtLocation.QGeoServiceProvider.setLocale?4(QLocale) +QtLocation.QGeoServiceProvider.setAllowExperimental?4(bool) +QtLocation.QGeoServiceProvider.navigationFeatures?4() -> QGeoServiceProvider.NavigationFeatures +QtLocation.QGeoServiceProvider.navigationManager?4() -> QNavigationManager +QtLocation.QGeoServiceProvider.mappingError?4() -> QGeoServiceProvider.Error +QtLocation.QGeoServiceProvider.mappingErrorString?4() -> QString +QtLocation.QGeoServiceProvider.geocodingError?4() -> QGeoServiceProvider.Error +QtLocation.QGeoServiceProvider.geocodingErrorString?4() -> QString +QtLocation.QGeoServiceProvider.routingError?4() -> QGeoServiceProvider.Error +QtLocation.QGeoServiceProvider.routingErrorString?4() -> QString +QtLocation.QGeoServiceProvider.placesError?4() -> QGeoServiceProvider.Error +QtLocation.QGeoServiceProvider.placesErrorString?4() -> QString +QtLocation.QGeoServiceProvider.navigationError?4() -> QGeoServiceProvider.Error +QtLocation.QGeoServiceProvider.navigationErrorString?4() -> QString +QtLocation.QGeoServiceProvider.RoutingFeatures?1() +QtLocation.QGeoServiceProvider.RoutingFeatures.__init__?1(self) +QtLocation.QGeoServiceProvider.RoutingFeatures?1(int) +QtLocation.QGeoServiceProvider.RoutingFeatures.__init__?1(self, int) +QtLocation.QGeoServiceProvider.RoutingFeatures?1(QGeoServiceProvider.RoutingFeatures) +QtLocation.QGeoServiceProvider.RoutingFeatures.__init__?1(self, QGeoServiceProvider.RoutingFeatures) +QtLocation.QGeoServiceProvider.GeocodingFeatures?1() +QtLocation.QGeoServiceProvider.GeocodingFeatures.__init__?1(self) +QtLocation.QGeoServiceProvider.GeocodingFeatures?1(int) +QtLocation.QGeoServiceProvider.GeocodingFeatures.__init__?1(self, int) +QtLocation.QGeoServiceProvider.GeocodingFeatures?1(QGeoServiceProvider.GeocodingFeatures) +QtLocation.QGeoServiceProvider.GeocodingFeatures.__init__?1(self, QGeoServiceProvider.GeocodingFeatures) +QtLocation.QGeoServiceProvider.MappingFeatures?1() +QtLocation.QGeoServiceProvider.MappingFeatures.__init__?1(self) +QtLocation.QGeoServiceProvider.MappingFeatures?1(int) +QtLocation.QGeoServiceProvider.MappingFeatures.__init__?1(self, int) +QtLocation.QGeoServiceProvider.MappingFeatures?1(QGeoServiceProvider.MappingFeatures) +QtLocation.QGeoServiceProvider.MappingFeatures.__init__?1(self, QGeoServiceProvider.MappingFeatures) +QtLocation.QGeoServiceProvider.PlacesFeatures?1() +QtLocation.QGeoServiceProvider.PlacesFeatures.__init__?1(self) +QtLocation.QGeoServiceProvider.PlacesFeatures?1(int) +QtLocation.QGeoServiceProvider.PlacesFeatures.__init__?1(self, int) +QtLocation.QGeoServiceProvider.PlacesFeatures?1(QGeoServiceProvider.PlacesFeatures) +QtLocation.QGeoServiceProvider.PlacesFeatures.__init__?1(self, QGeoServiceProvider.PlacesFeatures) +QtLocation.QGeoServiceProvider.NavigationFeatures?1() +QtLocation.QGeoServiceProvider.NavigationFeatures.__init__?1(self) +QtLocation.QGeoServiceProvider.NavigationFeatures?1(int) +QtLocation.QGeoServiceProvider.NavigationFeatures.__init__?1(self, int) +QtLocation.QGeoServiceProvider.NavigationFeatures?1(QGeoServiceProvider.NavigationFeatures) +QtLocation.QGeoServiceProvider.NavigationFeatures.__init__?1(self, QGeoServiceProvider.NavigationFeatures) +QtLocation.QLocation.Visibility?10 +QtLocation.QLocation.Visibility.UnspecifiedVisibility?10 +QtLocation.QLocation.Visibility.DeviceVisibility?10 +QtLocation.QLocation.Visibility.PrivateVisibility?10 +QtLocation.QLocation.Visibility.PublicVisibility?10 +QtLocation.QLocation.VisibilityScope?1() +QtLocation.QLocation.VisibilityScope.__init__?1(self) +QtLocation.QLocation.VisibilityScope?1(int) +QtLocation.QLocation.VisibilityScope.__init__?1(self, int) +QtLocation.QLocation.VisibilityScope?1(QLocation.VisibilityScope) +QtLocation.QLocation.VisibilityScope.__init__?1(self, QLocation.VisibilityScope) +QtLocation.QPlace?1() +QtLocation.QPlace.__init__?1(self) +QtLocation.QPlace?1(QPlace) +QtLocation.QPlace.__init__?1(self, QPlace) +QtLocation.QPlace.categories?4() -> unknown-type +QtLocation.QPlace.setCategory?4(QPlaceCategory) +QtLocation.QPlace.setCategories?4(unknown-type) +QtLocation.QPlace.location?4() -> QGeoLocation +QtLocation.QPlace.setLocation?4(QGeoLocation) +QtLocation.QPlace.ratings?4() -> QPlaceRatings +QtLocation.QPlace.setRatings?4(QPlaceRatings) +QtLocation.QPlace.supplier?4() -> QPlaceSupplier +QtLocation.QPlace.setSupplier?4(QPlaceSupplier) +QtLocation.QPlace.attribution?4() -> QString +QtLocation.QPlace.setAttribution?4(QString) +QtLocation.QPlace.icon?4() -> QPlaceIcon +QtLocation.QPlace.setIcon?4(QPlaceIcon) +QtLocation.QPlace.content?4(QPlaceContent.Type) -> unknown-type +QtLocation.QPlace.setContent?4(QPlaceContent.Type, unknown-type) +QtLocation.QPlace.insertContent?4(QPlaceContent.Type, unknown-type) +QtLocation.QPlace.totalContentCount?4(QPlaceContent.Type) -> int +QtLocation.QPlace.setTotalContentCount?4(QPlaceContent.Type, int) +QtLocation.QPlace.name?4() -> QString +QtLocation.QPlace.setName?4(QString) +QtLocation.QPlace.placeId?4() -> QString +QtLocation.QPlace.setPlaceId?4(QString) +QtLocation.QPlace.primaryPhone?4() -> QString +QtLocation.QPlace.primaryFax?4() -> QString +QtLocation.QPlace.primaryEmail?4() -> QString +QtLocation.QPlace.primaryWebsite?4() -> QUrl +QtLocation.QPlace.detailsFetched?4() -> bool +QtLocation.QPlace.setDetailsFetched?4(bool) +QtLocation.QPlace.extendedAttributeTypes?4() -> QStringList +QtLocation.QPlace.extendedAttribute?4(QString) -> QPlaceAttribute +QtLocation.QPlace.setExtendedAttribute?4(QString, QPlaceAttribute) +QtLocation.QPlace.removeExtendedAttribute?4(QString) +QtLocation.QPlace.contactTypes?4() -> QStringList +QtLocation.QPlace.contactDetails?4(QString) -> unknown-type +QtLocation.QPlace.setContactDetails?4(QString, unknown-type) +QtLocation.QPlace.appendContactDetail?4(QString, QPlaceContactDetail) +QtLocation.QPlace.removeContactDetails?4(QString) +QtLocation.QPlace.visibility?4() -> QLocation.Visibility +QtLocation.QPlace.setVisibility?4(QLocation.Visibility) +QtLocation.QPlace.isEmpty?4() -> bool +QtLocation.QPlaceAttribute.OpeningHours?7 +QtLocation.QPlaceAttribute.Payment?7 +QtLocation.QPlaceAttribute.Provider?7 +QtLocation.QPlaceAttribute?1() +QtLocation.QPlaceAttribute.__init__?1(self) +QtLocation.QPlaceAttribute?1(QPlaceAttribute) +QtLocation.QPlaceAttribute.__init__?1(self, QPlaceAttribute) +QtLocation.QPlaceAttribute.label?4() -> QString +QtLocation.QPlaceAttribute.setLabel?4(QString) +QtLocation.QPlaceAttribute.text?4() -> QString +QtLocation.QPlaceAttribute.setText?4(QString) +QtLocation.QPlaceAttribute.isEmpty?4() -> bool +QtLocation.QPlaceCategory?1() +QtLocation.QPlaceCategory.__init__?1(self) +QtLocation.QPlaceCategory?1(QPlaceCategory) +QtLocation.QPlaceCategory.__init__?1(self, QPlaceCategory) +QtLocation.QPlaceCategory.categoryId?4() -> QString +QtLocation.QPlaceCategory.setCategoryId?4(QString) +QtLocation.QPlaceCategory.name?4() -> QString +QtLocation.QPlaceCategory.setName?4(QString) +QtLocation.QPlaceCategory.visibility?4() -> QLocation.Visibility +QtLocation.QPlaceCategory.setVisibility?4(QLocation.Visibility) +QtLocation.QPlaceCategory.icon?4() -> QPlaceIcon +QtLocation.QPlaceCategory.setIcon?4(QPlaceIcon) +QtLocation.QPlaceCategory.isEmpty?4() -> bool +QtLocation.QPlaceContactDetail.Email?7 +QtLocation.QPlaceContactDetail.Fax?7 +QtLocation.QPlaceContactDetail.Phone?7 +QtLocation.QPlaceContactDetail.Website?7 +QtLocation.QPlaceContactDetail?1() +QtLocation.QPlaceContactDetail.__init__?1(self) +QtLocation.QPlaceContactDetail?1(QPlaceContactDetail) +QtLocation.QPlaceContactDetail.__init__?1(self, QPlaceContactDetail) +QtLocation.QPlaceContactDetail.label?4() -> QString +QtLocation.QPlaceContactDetail.setLabel?4(QString) +QtLocation.QPlaceContactDetail.value?4() -> QString +QtLocation.QPlaceContactDetail.setValue?4(QString) +QtLocation.QPlaceContactDetail.clear?4() +QtLocation.QPlaceContent.Type?10 +QtLocation.QPlaceContent.Type.NoType?10 +QtLocation.QPlaceContent.Type.ImageType?10 +QtLocation.QPlaceContent.Type.ReviewType?10 +QtLocation.QPlaceContent.Type.EditorialType?10 +QtLocation.QPlaceContent.Type.CustomType?10 +QtLocation.QPlaceContent?1() +QtLocation.QPlaceContent.__init__?1(self) +QtLocation.QPlaceContent?1(QPlaceContent) +QtLocation.QPlaceContent.__init__?1(self, QPlaceContent) +QtLocation.QPlaceContent.type?4() -> QPlaceContent.Type +QtLocation.QPlaceContent.supplier?4() -> QPlaceSupplier +QtLocation.QPlaceContent.setSupplier?4(QPlaceSupplier) +QtLocation.QPlaceContent.user?4() -> QPlaceUser +QtLocation.QPlaceContent.setUser?4(QPlaceUser) +QtLocation.QPlaceContent.attribution?4() -> QString +QtLocation.QPlaceContent.setAttribution?4(QString) +QtLocation.QPlaceReply.Type?10 +QtLocation.QPlaceReply.Type.Reply?10 +QtLocation.QPlaceReply.Type.DetailsReply?10 +QtLocation.QPlaceReply.Type.SearchReply?10 +QtLocation.QPlaceReply.Type.SearchSuggestionReply?10 +QtLocation.QPlaceReply.Type.ContentReply?10 +QtLocation.QPlaceReply.Type.IdReply?10 +QtLocation.QPlaceReply.Type.MatchReply?10 +QtLocation.QPlaceReply.Error?10 +QtLocation.QPlaceReply.Error.NoError?10 +QtLocation.QPlaceReply.Error.PlaceDoesNotExistError?10 +QtLocation.QPlaceReply.Error.CategoryDoesNotExistError?10 +QtLocation.QPlaceReply.Error.CommunicationError?10 +QtLocation.QPlaceReply.Error.ParseError?10 +QtLocation.QPlaceReply.Error.PermissionsError?10 +QtLocation.QPlaceReply.Error.UnsupportedError?10 +QtLocation.QPlaceReply.Error.BadArgumentError?10 +QtLocation.QPlaceReply.Error.CancelError?10 +QtLocation.QPlaceReply.Error.UnknownError?10 +QtLocation.QPlaceReply?1(QObject parent=None) +QtLocation.QPlaceReply.__init__?1(self, QObject parent=None) +QtLocation.QPlaceReply.isFinished?4() -> bool +QtLocation.QPlaceReply.type?4() -> QPlaceReply.Type +QtLocation.QPlaceReply.errorString?4() -> QString +QtLocation.QPlaceReply.error?4() -> QPlaceReply.Error +QtLocation.QPlaceReply.abort?4() +QtLocation.QPlaceReply.aborted?4() +QtLocation.QPlaceReply.finished?4() +QtLocation.QPlaceReply.error?4(QPlaceReply.Error, QString errorString='') +QtLocation.QPlaceReply.contentUpdated?4() +QtLocation.QPlaceReply.setFinished?4(bool) +QtLocation.QPlaceReply.setError?4(QPlaceReply.Error, QString) +QtLocation.QPlaceContentReply?1(QObject parent=None) +QtLocation.QPlaceContentReply.__init__?1(self, QObject parent=None) +QtLocation.QPlaceContentReply.type?4() -> QPlaceReply.Type +QtLocation.QPlaceContentReply.content?4() -> unknown-type +QtLocation.QPlaceContentReply.totalCount?4() -> int +QtLocation.QPlaceContentReply.request?4() -> QPlaceContentRequest +QtLocation.QPlaceContentReply.previousPageRequest?4() -> QPlaceContentRequest +QtLocation.QPlaceContentReply.nextPageRequest?4() -> QPlaceContentRequest +QtLocation.QPlaceContentReply.setContent?4(unknown-type) +QtLocation.QPlaceContentReply.setTotalCount?4(int) +QtLocation.QPlaceContentReply.setRequest?4(QPlaceContentRequest) +QtLocation.QPlaceContentReply.setPreviousPageRequest?4(QPlaceContentRequest) +QtLocation.QPlaceContentReply.setNextPageRequest?4(QPlaceContentRequest) +QtLocation.QPlaceContentRequest?1() +QtLocation.QPlaceContentRequest.__init__?1(self) +QtLocation.QPlaceContentRequest?1(QPlaceContentRequest) +QtLocation.QPlaceContentRequest.__init__?1(self, QPlaceContentRequest) +QtLocation.QPlaceContentRequest.contentType?4() -> QPlaceContent.Type +QtLocation.QPlaceContentRequest.setContentType?4(QPlaceContent.Type) +QtLocation.QPlaceContentRequest.placeId?4() -> QString +QtLocation.QPlaceContentRequest.setPlaceId?4(QString) +QtLocation.QPlaceContentRequest.contentContext?4() -> QVariant +QtLocation.QPlaceContentRequest.setContentContext?4(QVariant) +QtLocation.QPlaceContentRequest.limit?4() -> int +QtLocation.QPlaceContentRequest.setLimit?4(int) +QtLocation.QPlaceContentRequest.clear?4() +QtLocation.QPlaceDetailsReply?1(QObject parent=None) +QtLocation.QPlaceDetailsReply.__init__?1(self, QObject parent=None) +QtLocation.QPlaceDetailsReply.type?4() -> QPlaceReply.Type +QtLocation.QPlaceDetailsReply.place?4() -> QPlace +QtLocation.QPlaceDetailsReply.setPlace?4(QPlace) +QtLocation.QPlaceEditorial?1() +QtLocation.QPlaceEditorial.__init__?1(self) +QtLocation.QPlaceEditorial?1(QPlaceContent) +QtLocation.QPlaceEditorial.__init__?1(self, QPlaceContent) +QtLocation.QPlaceEditorial?1(QPlaceEditorial) +QtLocation.QPlaceEditorial.__init__?1(self, QPlaceEditorial) +QtLocation.QPlaceEditorial.text?4() -> QString +QtLocation.QPlaceEditorial.setText?4(QString) +QtLocation.QPlaceEditorial.title?4() -> QString +QtLocation.QPlaceEditorial.setTitle?4(QString) +QtLocation.QPlaceEditorial.language?4() -> QString +QtLocation.QPlaceEditorial.setLanguage?4(QString) +QtLocation.QPlaceIcon.SingleUrl?7 +QtLocation.QPlaceIcon?1() +QtLocation.QPlaceIcon.__init__?1(self) +QtLocation.QPlaceIcon?1(QPlaceIcon) +QtLocation.QPlaceIcon.__init__?1(self, QPlaceIcon) +QtLocation.QPlaceIcon.url?4(QSize size=QSize()) -> QUrl +QtLocation.QPlaceIcon.manager?4() -> QPlaceManager +QtLocation.QPlaceIcon.setManager?4(QPlaceManager) +QtLocation.QPlaceIcon.parameters?4() -> QVariantMap +QtLocation.QPlaceIcon.setParameters?4(QVariantMap) +QtLocation.QPlaceIcon.isEmpty?4() -> bool +QtLocation.QPlaceIdReply.OperationType?10 +QtLocation.QPlaceIdReply.OperationType.SavePlace?10 +QtLocation.QPlaceIdReply.OperationType.SaveCategory?10 +QtLocation.QPlaceIdReply.OperationType.RemovePlace?10 +QtLocation.QPlaceIdReply.OperationType.RemoveCategory?10 +QtLocation.QPlaceIdReply?1(QPlaceIdReply.OperationType, QObject parent=None) +QtLocation.QPlaceIdReply.__init__?1(self, QPlaceIdReply.OperationType, QObject parent=None) +QtLocation.QPlaceIdReply.type?4() -> QPlaceReply.Type +QtLocation.QPlaceIdReply.operationType?4() -> QPlaceIdReply.OperationType +QtLocation.QPlaceIdReply.id?4() -> QString +QtLocation.QPlaceIdReply.setId?4(QString) +QtLocation.QPlaceImage?1() +QtLocation.QPlaceImage.__init__?1(self) +QtLocation.QPlaceImage?1(QPlaceContent) +QtLocation.QPlaceImage.__init__?1(self, QPlaceContent) +QtLocation.QPlaceImage?1(QPlaceImage) +QtLocation.QPlaceImage.__init__?1(self, QPlaceImage) +QtLocation.QPlaceImage.url?4() -> QUrl +QtLocation.QPlaceImage.setUrl?4(QUrl) +QtLocation.QPlaceImage.imageId?4() -> QString +QtLocation.QPlaceImage.setImageId?4(QString) +QtLocation.QPlaceImage.mimeType?4() -> QString +QtLocation.QPlaceImage.setMimeType?4(QString) +QtLocation.QPlaceManager.managerName?4() -> QString +QtLocation.QPlaceManager.managerVersion?4() -> int +QtLocation.QPlaceManager.getPlaceDetails?4(QString) -> QPlaceDetailsReply +QtLocation.QPlaceManager.getPlaceContent?4(QPlaceContentRequest) -> QPlaceContentReply +QtLocation.QPlaceManager.search?4(QPlaceSearchRequest) -> QPlaceSearchReply +QtLocation.QPlaceManager.searchSuggestions?4(QPlaceSearchRequest) -> QPlaceSearchSuggestionReply +QtLocation.QPlaceManager.savePlace?4(QPlace) -> QPlaceIdReply +QtLocation.QPlaceManager.removePlace?4(QString) -> QPlaceIdReply +QtLocation.QPlaceManager.saveCategory?4(QPlaceCategory, QString parentId='') -> QPlaceIdReply +QtLocation.QPlaceManager.removeCategory?4(QString) -> QPlaceIdReply +QtLocation.QPlaceManager.initializeCategories?4() -> QPlaceReply +QtLocation.QPlaceManager.parentCategoryId?4(QString) -> QString +QtLocation.QPlaceManager.childCategoryIds?4(QString parentId='') -> QStringList +QtLocation.QPlaceManager.category?4(QString) -> QPlaceCategory +QtLocation.QPlaceManager.childCategories?4(QString parentId='') -> unknown-type +QtLocation.QPlaceManager.locales?4() -> unknown-type +QtLocation.QPlaceManager.setLocale?4(QLocale) +QtLocation.QPlaceManager.setLocales?4(unknown-type) +QtLocation.QPlaceManager.compatiblePlace?4(QPlace) -> QPlace +QtLocation.QPlaceManager.matchingPlaces?4(QPlaceMatchRequest) -> QPlaceMatchReply +QtLocation.QPlaceManager.finished?4(QPlaceReply) +QtLocation.QPlaceManager.error?4(QPlaceReply, QPlaceReply.Error, QString errorString='') +QtLocation.QPlaceManager.placeAdded?4(QString) +QtLocation.QPlaceManager.placeUpdated?4(QString) +QtLocation.QPlaceManager.placeRemoved?4(QString) +QtLocation.QPlaceManager.categoryAdded?4(QPlaceCategory, QString) +QtLocation.QPlaceManager.categoryUpdated?4(QPlaceCategory, QString) +QtLocation.QPlaceManager.categoryRemoved?4(QString, QString) +QtLocation.QPlaceManager.dataChanged?4() +QtLocation.QPlaceManagerEngine?1(QVariantMap, QObject parent=None) +QtLocation.QPlaceManagerEngine.__init__?1(self, QVariantMap, QObject parent=None) +QtLocation.QPlaceManagerEngine.managerName?4() -> QString +QtLocation.QPlaceManagerEngine.managerVersion?4() -> int +QtLocation.QPlaceManagerEngine.getPlaceDetails?4(QString) -> QPlaceDetailsReply +QtLocation.QPlaceManagerEngine.getPlaceContent?4(QPlaceContentRequest) -> QPlaceContentReply +QtLocation.QPlaceManagerEngine.search?4(QPlaceSearchRequest) -> QPlaceSearchReply +QtLocation.QPlaceManagerEngine.searchSuggestions?4(QPlaceSearchRequest) -> QPlaceSearchSuggestionReply +QtLocation.QPlaceManagerEngine.savePlace?4(QPlace) -> QPlaceIdReply +QtLocation.QPlaceManagerEngine.removePlace?4(QString) -> QPlaceIdReply +QtLocation.QPlaceManagerEngine.saveCategory?4(QPlaceCategory, QString) -> QPlaceIdReply +QtLocation.QPlaceManagerEngine.removeCategory?4(QString) -> QPlaceIdReply +QtLocation.QPlaceManagerEngine.initializeCategories?4() -> QPlaceReply +QtLocation.QPlaceManagerEngine.parentCategoryId?4(QString) -> QString +QtLocation.QPlaceManagerEngine.childCategoryIds?4(QString) -> QStringList +QtLocation.QPlaceManagerEngine.category?4(QString) -> QPlaceCategory +QtLocation.QPlaceManagerEngine.childCategories?4(QString) -> unknown-type +QtLocation.QPlaceManagerEngine.locales?4() -> unknown-type +QtLocation.QPlaceManagerEngine.setLocales?4(unknown-type) +QtLocation.QPlaceManagerEngine.constructIconUrl?4(QPlaceIcon, QSize) -> QUrl +QtLocation.QPlaceManagerEngine.compatiblePlace?4(QPlace) -> QPlace +QtLocation.QPlaceManagerEngine.matchingPlaces?4(QPlaceMatchRequest) -> QPlaceMatchReply +QtLocation.QPlaceManagerEngine.finished?4(QPlaceReply) +QtLocation.QPlaceManagerEngine.error?4(QPlaceReply, QPlaceReply.Error, QString errorString='') +QtLocation.QPlaceManagerEngine.placeAdded?4(QString) +QtLocation.QPlaceManagerEngine.placeUpdated?4(QString) +QtLocation.QPlaceManagerEngine.placeRemoved?4(QString) +QtLocation.QPlaceManagerEngine.categoryAdded?4(QPlaceCategory, QString) +QtLocation.QPlaceManagerEngine.categoryUpdated?4(QPlaceCategory, QString) +QtLocation.QPlaceManagerEngine.categoryRemoved?4(QString, QString) +QtLocation.QPlaceManagerEngine.dataChanged?4() +QtLocation.QPlaceManagerEngine.manager?4() -> QPlaceManager +QtLocation.QPlaceMatchReply?1(QObject parent=None) +QtLocation.QPlaceMatchReply.__init__?1(self, QObject parent=None) +QtLocation.QPlaceMatchReply.type?4() -> QPlaceReply.Type +QtLocation.QPlaceMatchReply.places?4() -> unknown-type +QtLocation.QPlaceMatchReply.request?4() -> QPlaceMatchRequest +QtLocation.QPlaceMatchReply.setPlaces?4(unknown-type) +QtLocation.QPlaceMatchReply.setRequest?4(QPlaceMatchRequest) +QtLocation.QPlaceMatchRequest.AlternativeId?7 +QtLocation.QPlaceMatchRequest?1() +QtLocation.QPlaceMatchRequest.__init__?1(self) +QtLocation.QPlaceMatchRequest?1(QPlaceMatchRequest) +QtLocation.QPlaceMatchRequest.__init__?1(self, QPlaceMatchRequest) +QtLocation.QPlaceMatchRequest.places?4() -> unknown-type +QtLocation.QPlaceMatchRequest.setPlaces?4(unknown-type) +QtLocation.QPlaceMatchRequest.setResults?4(unknown-type) +QtLocation.QPlaceMatchRequest.parameters?4() -> QVariantMap +QtLocation.QPlaceMatchRequest.setParameters?4(QVariantMap) +QtLocation.QPlaceMatchRequest.clear?4() +QtLocation.QPlaceSearchResult.SearchResultType?10 +QtLocation.QPlaceSearchResult.SearchResultType.UnknownSearchResult?10 +QtLocation.QPlaceSearchResult.SearchResultType.PlaceResult?10 +QtLocation.QPlaceSearchResult.SearchResultType.ProposedSearchResult?10 +QtLocation.QPlaceSearchResult?1() +QtLocation.QPlaceSearchResult.__init__?1(self) +QtLocation.QPlaceSearchResult?1(QPlaceSearchResult) +QtLocation.QPlaceSearchResult.__init__?1(self, QPlaceSearchResult) +QtLocation.QPlaceSearchResult.type?4() -> QPlaceSearchResult.SearchResultType +QtLocation.QPlaceSearchResult.title?4() -> QString +QtLocation.QPlaceSearchResult.setTitle?4(QString) +QtLocation.QPlaceSearchResult.icon?4() -> QPlaceIcon +QtLocation.QPlaceSearchResult.setIcon?4(QPlaceIcon) +QtLocation.QPlaceProposedSearchResult?1() +QtLocation.QPlaceProposedSearchResult.__init__?1(self) +QtLocation.QPlaceProposedSearchResult?1(QPlaceSearchResult) +QtLocation.QPlaceProposedSearchResult.__init__?1(self, QPlaceSearchResult) +QtLocation.QPlaceProposedSearchResult?1(QPlaceProposedSearchResult) +QtLocation.QPlaceProposedSearchResult.__init__?1(self, QPlaceProposedSearchResult) +QtLocation.QPlaceProposedSearchResult.searchRequest?4() -> QPlaceSearchRequest +QtLocation.QPlaceProposedSearchResult.setSearchRequest?4(QPlaceSearchRequest) +QtLocation.QPlaceRatings?1() +QtLocation.QPlaceRatings.__init__?1(self) +QtLocation.QPlaceRatings?1(QPlaceRatings) +QtLocation.QPlaceRatings.__init__?1(self, QPlaceRatings) +QtLocation.QPlaceRatings.average?4() -> float +QtLocation.QPlaceRatings.setAverage?4(float) +QtLocation.QPlaceRatings.count?4() -> int +QtLocation.QPlaceRatings.setCount?4(int) +QtLocation.QPlaceRatings.maximum?4() -> float +QtLocation.QPlaceRatings.setMaximum?4(float) +QtLocation.QPlaceRatings.isEmpty?4() -> bool +QtLocation.QPlaceResult?1() +QtLocation.QPlaceResult.__init__?1(self) +QtLocation.QPlaceResult?1(QPlaceSearchResult) +QtLocation.QPlaceResult.__init__?1(self, QPlaceSearchResult) +QtLocation.QPlaceResult?1(QPlaceResult) +QtLocation.QPlaceResult.__init__?1(self, QPlaceResult) +QtLocation.QPlaceResult.distance?4() -> float +QtLocation.QPlaceResult.setDistance?4(float) +QtLocation.QPlaceResult.place?4() -> QPlace +QtLocation.QPlaceResult.setPlace?4(QPlace) +QtLocation.QPlaceResult.isSponsored?4() -> bool +QtLocation.QPlaceResult.setSponsored?4(bool) +QtLocation.QPlaceReview?1() +QtLocation.QPlaceReview.__init__?1(self) +QtLocation.QPlaceReview?1(QPlaceContent) +QtLocation.QPlaceReview.__init__?1(self, QPlaceContent) +QtLocation.QPlaceReview?1(QPlaceReview) +QtLocation.QPlaceReview.__init__?1(self, QPlaceReview) +QtLocation.QPlaceReview.dateTime?4() -> QDateTime +QtLocation.QPlaceReview.setDateTime?4(QDateTime) +QtLocation.QPlaceReview.text?4() -> QString +QtLocation.QPlaceReview.setText?4(QString) +QtLocation.QPlaceReview.language?4() -> QString +QtLocation.QPlaceReview.setLanguage?4(QString) +QtLocation.QPlaceReview.rating?4() -> float +QtLocation.QPlaceReview.setRating?4(float) +QtLocation.QPlaceReview.reviewId?4() -> QString +QtLocation.QPlaceReview.setReviewId?4(QString) +QtLocation.QPlaceReview.title?4() -> QString +QtLocation.QPlaceReview.setTitle?4(QString) +QtLocation.QPlaceSearchReply?1(QObject parent=None) +QtLocation.QPlaceSearchReply.__init__?1(self, QObject parent=None) +QtLocation.QPlaceSearchReply.type?4() -> QPlaceReply.Type +QtLocation.QPlaceSearchReply.results?4() -> unknown-type +QtLocation.QPlaceSearchReply.request?4() -> QPlaceSearchRequest +QtLocation.QPlaceSearchReply.previousPageRequest?4() -> QPlaceSearchRequest +QtLocation.QPlaceSearchReply.nextPageRequest?4() -> QPlaceSearchRequest +QtLocation.QPlaceSearchReply.setResults?4(unknown-type) +QtLocation.QPlaceSearchReply.setRequest?4(QPlaceSearchRequest) +QtLocation.QPlaceSearchReply.setPreviousPageRequest?4(QPlaceSearchRequest) +QtLocation.QPlaceSearchReply.setNextPageRequest?4(QPlaceSearchRequest) +QtLocation.QPlaceSearchRequest.RelevanceHint?10 +QtLocation.QPlaceSearchRequest.RelevanceHint.UnspecifiedHint?10 +QtLocation.QPlaceSearchRequest.RelevanceHint.DistanceHint?10 +QtLocation.QPlaceSearchRequest.RelevanceHint.LexicalPlaceNameHint?10 +QtLocation.QPlaceSearchRequest?1() +QtLocation.QPlaceSearchRequest.__init__?1(self) +QtLocation.QPlaceSearchRequest?1(QPlaceSearchRequest) +QtLocation.QPlaceSearchRequest.__init__?1(self, QPlaceSearchRequest) +QtLocation.QPlaceSearchRequest.searchTerm?4() -> QString +QtLocation.QPlaceSearchRequest.setSearchTerm?4(QString) +QtLocation.QPlaceSearchRequest.categories?4() -> unknown-type +QtLocation.QPlaceSearchRequest.setCategory?4(QPlaceCategory) +QtLocation.QPlaceSearchRequest.setCategories?4(unknown-type) +QtLocation.QPlaceSearchRequest.searchArea?4() -> QGeoShape +QtLocation.QPlaceSearchRequest.setSearchArea?4(QGeoShape) +QtLocation.QPlaceSearchRequest.recommendationId?4() -> QString +QtLocation.QPlaceSearchRequest.setRecommendationId?4(QString) +QtLocation.QPlaceSearchRequest.searchContext?4() -> QVariant +QtLocation.QPlaceSearchRequest.setSearchContext?4(QVariant) +QtLocation.QPlaceSearchRequest.visibilityScope?4() -> QLocation.VisibilityScope +QtLocation.QPlaceSearchRequest.setVisibilityScope?4(QLocation.VisibilityScope) +QtLocation.QPlaceSearchRequest.relevanceHint?4() -> QPlaceSearchRequest.RelevanceHint +QtLocation.QPlaceSearchRequest.setRelevanceHint?4(QPlaceSearchRequest.RelevanceHint) +QtLocation.QPlaceSearchRequest.limit?4() -> int +QtLocation.QPlaceSearchRequest.setLimit?4(int) +QtLocation.QPlaceSearchRequest.clear?4() +QtLocation.QPlaceSearchSuggestionReply?1(QObject parent=None) +QtLocation.QPlaceSearchSuggestionReply.__init__?1(self, QObject parent=None) +QtLocation.QPlaceSearchSuggestionReply.suggestions?4() -> QStringList +QtLocation.QPlaceSearchSuggestionReply.type?4() -> QPlaceReply.Type +QtLocation.QPlaceSearchSuggestionReply.setSuggestions?4(QStringList) +QtLocation.QPlaceSupplier?1() +QtLocation.QPlaceSupplier.__init__?1(self) +QtLocation.QPlaceSupplier?1(QPlaceSupplier) +QtLocation.QPlaceSupplier.__init__?1(self, QPlaceSupplier) +QtLocation.QPlaceSupplier.name?4() -> QString +QtLocation.QPlaceSupplier.setName?4(QString) +QtLocation.QPlaceSupplier.supplierId?4() -> QString +QtLocation.QPlaceSupplier.setSupplierId?4(QString) +QtLocation.QPlaceSupplier.url?4() -> QUrl +QtLocation.QPlaceSupplier.setUrl?4(QUrl) +QtLocation.QPlaceSupplier.icon?4() -> QPlaceIcon +QtLocation.QPlaceSupplier.setIcon?4(QPlaceIcon) +QtLocation.QPlaceSupplier.isEmpty?4() -> bool +QtLocation.QPlaceUser?1() +QtLocation.QPlaceUser.__init__?1(self) +QtLocation.QPlaceUser?1(QPlaceUser) +QtLocation.QPlaceUser.__init__?1(self, QPlaceUser) +QtLocation.QPlaceUser.userId?4() -> QString +QtLocation.QPlaceUser.setUserId?4(QString) +QtLocation.QPlaceUser.name?4() -> QString +QtLocation.QPlaceUser.setName?4(QString) +QtPrintSupport.QAbstractPrintDialog.PrintDialogOption?10 +QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.None_?10 +QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintToFile?10 +QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintSelection?10 +QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintPageRange?10 +QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintCollateCopies?10 +QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintShowPageSize?10 +QtPrintSupport.QAbstractPrintDialog.PrintDialogOption.PrintCurrentPage?10 +QtPrintSupport.QAbstractPrintDialog.PrintRange?10 +QtPrintSupport.QAbstractPrintDialog.PrintRange.AllPages?10 +QtPrintSupport.QAbstractPrintDialog.PrintRange.Selection?10 +QtPrintSupport.QAbstractPrintDialog.PrintRange.PageRange?10 +QtPrintSupport.QAbstractPrintDialog.PrintRange.CurrentPage?10 +QtPrintSupport.QAbstractPrintDialog?1(QPrinter, QWidget parent=None) +QtPrintSupport.QAbstractPrintDialog.__init__?1(self, QPrinter, QWidget parent=None) +QtPrintSupport.QAbstractPrintDialog.exec_?4() -> int +QtPrintSupport.QAbstractPrintDialog.exec?4() -> int +QtPrintSupport.QAbstractPrintDialog.setPrintRange?4(QAbstractPrintDialog.PrintRange) +QtPrintSupport.QAbstractPrintDialog.printRange?4() -> QAbstractPrintDialog.PrintRange +QtPrintSupport.QAbstractPrintDialog.setMinMax?4(int, int) +QtPrintSupport.QAbstractPrintDialog.minPage?4() -> int +QtPrintSupport.QAbstractPrintDialog.maxPage?4() -> int +QtPrintSupport.QAbstractPrintDialog.setFromTo?4(int, int) +QtPrintSupport.QAbstractPrintDialog.fromPage?4() -> int +QtPrintSupport.QAbstractPrintDialog.toPage?4() -> int +QtPrintSupport.QAbstractPrintDialog.printer?4() -> QPrinter +QtPrintSupport.QAbstractPrintDialog.setOptionTabs?4(unknown-type) +QtPrintSupport.QAbstractPrintDialog.setEnabledOptions?4(QAbstractPrintDialog.PrintDialogOptions) +QtPrintSupport.QAbstractPrintDialog.enabledOptions?4() -> QAbstractPrintDialog.PrintDialogOptions +QtPrintSupport.QAbstractPrintDialog.PrintDialogOptions?1() +QtPrintSupport.QAbstractPrintDialog.PrintDialogOptions.__init__?1(self) +QtPrintSupport.QAbstractPrintDialog.PrintDialogOptions?1(int) +QtPrintSupport.QAbstractPrintDialog.PrintDialogOptions.__init__?1(self, int) +QtPrintSupport.QAbstractPrintDialog.PrintDialogOptions?1(QAbstractPrintDialog.PrintDialogOptions) +QtPrintSupport.QAbstractPrintDialog.PrintDialogOptions.__init__?1(self, QAbstractPrintDialog.PrintDialogOptions) +QtPrintSupport.QPageSetupDialog?1(QPrinter, QWidget parent=None) +QtPrintSupport.QPageSetupDialog.__init__?1(self, QPrinter, QWidget parent=None) +QtPrintSupport.QPageSetupDialog?1(QWidget parent=None) +QtPrintSupport.QPageSetupDialog.__init__?1(self, QWidget parent=None) +QtPrintSupport.QPageSetupDialog.setVisible?4(bool) +QtPrintSupport.QPageSetupDialog.exec_?4() -> int +QtPrintSupport.QPageSetupDialog.exec?4() -> int +QtPrintSupport.QPageSetupDialog.open?4() +QtPrintSupport.QPageSetupDialog.open?4(Any) +QtPrintSupport.QPageSetupDialog.done?4(int) +QtPrintSupport.QPageSetupDialog.printer?4() -> QPrinter +QtPrintSupport.QPrintDialog?1(QPrinter, QWidget parent=None) +QtPrintSupport.QPrintDialog.__init__?1(self, QPrinter, QWidget parent=None) +QtPrintSupport.QPrintDialog?1(QWidget parent=None) +QtPrintSupport.QPrintDialog.__init__?1(self, QWidget parent=None) +QtPrintSupport.QPrintDialog.exec_?4() -> int +QtPrintSupport.QPrintDialog.exec?4() -> int +QtPrintSupport.QPrintDialog.accept?4() +QtPrintSupport.QPrintDialog.done?4(int) +QtPrintSupport.QPrintDialog.setOption?4(QAbstractPrintDialog.PrintDialogOption, bool on=True) +QtPrintSupport.QPrintDialog.testOption?4(QAbstractPrintDialog.PrintDialogOption) -> bool +QtPrintSupport.QPrintDialog.setOptions?4(QAbstractPrintDialog.PrintDialogOptions) +QtPrintSupport.QPrintDialog.options?4() -> QAbstractPrintDialog.PrintDialogOptions +QtPrintSupport.QPrintDialog.setVisible?4(bool) +QtPrintSupport.QPrintDialog.open?4() +QtPrintSupport.QPrintDialog.open?4(Any) +QtPrintSupport.QPrintDialog.accepted?4() +QtPrintSupport.QPrintDialog.accepted?4(QPrinter) +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_CollateCopies?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_ColorMode?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_Creator?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_DocumentName?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_FullPage?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_NumberOfCopies?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_Orientation?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_OutputFileName?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PageOrder?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PageRect?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PageSize?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperRect?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperSource?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PrinterName?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PrinterProgram?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_Resolution?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_SelectionOption?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_SupportedResolutions?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_WindowsPageSize?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_FontEmbedding?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_Duplex?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperSources?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_CustomPaperSize?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PageMargins?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperSize?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_CopyCount?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_SupportsMultipleCopies?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_PaperName?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_QPageSize?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_QPageMargins?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_QPageLayout?10 +QtPrintSupport.QPrintEngine.PrintEnginePropertyKey.PPK_CustomBase?10 +QtPrintSupport.QPrintEngine?1() +QtPrintSupport.QPrintEngine.__init__?1(self) +QtPrintSupport.QPrintEngine?1(QPrintEngine) +QtPrintSupport.QPrintEngine.__init__?1(self, QPrintEngine) +QtPrintSupport.QPrintEngine.setProperty?4(QPrintEngine.PrintEnginePropertyKey, QVariant) +QtPrintSupport.QPrintEngine.property?4(QPrintEngine.PrintEnginePropertyKey) -> QVariant +QtPrintSupport.QPrintEngine.newPage?4() -> bool +QtPrintSupport.QPrintEngine.abort?4() -> bool +QtPrintSupport.QPrintEngine.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtPrintSupport.QPrintEngine.printerState?4() -> QPrinter.PrinterState +QtPrintSupport.QPrinter.DuplexMode?10 +QtPrintSupport.QPrinter.DuplexMode.DuplexNone?10 +QtPrintSupport.QPrinter.DuplexMode.DuplexAuto?10 +QtPrintSupport.QPrinter.DuplexMode.DuplexLongSide?10 +QtPrintSupport.QPrinter.DuplexMode.DuplexShortSide?10 +QtPrintSupport.QPrinter.Unit?10 +QtPrintSupport.QPrinter.Unit.Millimeter?10 +QtPrintSupport.QPrinter.Unit.Point?10 +QtPrintSupport.QPrinter.Unit.Inch?10 +QtPrintSupport.QPrinter.Unit.Pica?10 +QtPrintSupport.QPrinter.Unit.Didot?10 +QtPrintSupport.QPrinter.Unit.Cicero?10 +QtPrintSupport.QPrinter.Unit.DevicePixel?10 +QtPrintSupport.QPrinter.PrintRange?10 +QtPrintSupport.QPrinter.PrintRange.AllPages?10 +QtPrintSupport.QPrinter.PrintRange.Selection?10 +QtPrintSupport.QPrinter.PrintRange.PageRange?10 +QtPrintSupport.QPrinter.PrintRange.CurrentPage?10 +QtPrintSupport.QPrinter.OutputFormat?10 +QtPrintSupport.QPrinter.OutputFormat.NativeFormat?10 +QtPrintSupport.QPrinter.OutputFormat.PdfFormat?10 +QtPrintSupport.QPrinter.PrinterState?10 +QtPrintSupport.QPrinter.PrinterState.Idle?10 +QtPrintSupport.QPrinter.PrinterState.Active?10 +QtPrintSupport.QPrinter.PrinterState.Aborted?10 +QtPrintSupport.QPrinter.PrinterState.Error?10 +QtPrintSupport.QPrinter.PaperSource?10 +QtPrintSupport.QPrinter.PaperSource.OnlyOne?10 +QtPrintSupport.QPrinter.PaperSource.Lower?10 +QtPrintSupport.QPrinter.PaperSource.Middle?10 +QtPrintSupport.QPrinter.PaperSource.Manual?10 +QtPrintSupport.QPrinter.PaperSource.Envelope?10 +QtPrintSupport.QPrinter.PaperSource.EnvelopeManual?10 +QtPrintSupport.QPrinter.PaperSource.Auto?10 +QtPrintSupport.QPrinter.PaperSource.Tractor?10 +QtPrintSupport.QPrinter.PaperSource.SmallFormat?10 +QtPrintSupport.QPrinter.PaperSource.LargeFormat?10 +QtPrintSupport.QPrinter.PaperSource.LargeCapacity?10 +QtPrintSupport.QPrinter.PaperSource.Cassette?10 +QtPrintSupport.QPrinter.PaperSource.FormSource?10 +QtPrintSupport.QPrinter.PaperSource.MaxPageSource?10 +QtPrintSupport.QPrinter.PaperSource.Upper?10 +QtPrintSupport.QPrinter.PaperSource.CustomSource?10 +QtPrintSupport.QPrinter.PaperSource.LastPaperSource?10 +QtPrintSupport.QPrinter.ColorMode?10 +QtPrintSupport.QPrinter.ColorMode.GrayScale?10 +QtPrintSupport.QPrinter.ColorMode.Color?10 +QtPrintSupport.QPrinter.PageOrder?10 +QtPrintSupport.QPrinter.PageOrder.FirstPageFirst?10 +QtPrintSupport.QPrinter.PageOrder.LastPageFirst?10 +QtPrintSupport.QPrinter.Orientation?10 +QtPrintSupport.QPrinter.Orientation.Portrait?10 +QtPrintSupport.QPrinter.Orientation.Landscape?10 +QtPrintSupport.QPrinter.PrinterMode?10 +QtPrintSupport.QPrinter.PrinterMode.ScreenResolution?10 +QtPrintSupport.QPrinter.PrinterMode.PrinterResolution?10 +QtPrintSupport.QPrinter.PrinterMode.HighResolution?10 +QtPrintSupport.QPrinter?1(QPrinter.PrinterMode mode=QPrinter.ScreenResolution) +QtPrintSupport.QPrinter.__init__?1(self, QPrinter.PrinterMode mode=QPrinter.ScreenResolution) +QtPrintSupport.QPrinter?1(QPrinterInfo, QPrinter.PrinterMode mode=QPrinter.ScreenResolution) +QtPrintSupport.QPrinter.__init__?1(self, QPrinterInfo, QPrinter.PrinterMode mode=QPrinter.ScreenResolution) +QtPrintSupport.QPrinter.setOutputFormat?4(QPrinter.OutputFormat) +QtPrintSupport.QPrinter.outputFormat?4() -> QPrinter.OutputFormat +QtPrintSupport.QPrinter.setPrinterName?4(QString) +QtPrintSupport.QPrinter.printerName?4() -> QString +QtPrintSupport.QPrinter.isValid?4() -> bool +QtPrintSupport.QPrinter.setOutputFileName?4(QString) +QtPrintSupport.QPrinter.outputFileName?4() -> QString +QtPrintSupport.QPrinter.setPrintProgram?4(QString) +QtPrintSupport.QPrinter.printProgram?4() -> QString +QtPrintSupport.QPrinter.setDocName?4(QString) +QtPrintSupport.QPrinter.docName?4() -> QString +QtPrintSupport.QPrinter.setCreator?4(QString) +QtPrintSupport.QPrinter.creator?4() -> QString +QtPrintSupport.QPrinter.setOrientation?4(QPrinter.Orientation) +QtPrintSupport.QPrinter.orientation?4() -> QPrinter.Orientation +QtPrintSupport.QPrinter.setPageSizeMM?4(QSizeF) +QtPrintSupport.QPrinter.setPaperSize?4(QPagedPaintDevice.PageSize) +QtPrintSupport.QPrinter.paperSize?4() -> QPagedPaintDevice.PageSize +QtPrintSupport.QPrinter.setPaperSize?4(QSizeF, QPrinter.Unit) +QtPrintSupport.QPrinter.paperSize?4(QPrinter.Unit) -> QSizeF +QtPrintSupport.QPrinter.setPageOrder?4(QPrinter.PageOrder) +QtPrintSupport.QPrinter.pageOrder?4() -> QPrinter.PageOrder +QtPrintSupport.QPrinter.setResolution?4(int) +QtPrintSupport.QPrinter.resolution?4() -> int +QtPrintSupport.QPrinter.setColorMode?4(QPrinter.ColorMode) +QtPrintSupport.QPrinter.colorMode?4() -> QPrinter.ColorMode +QtPrintSupport.QPrinter.setCollateCopies?4(bool) +QtPrintSupport.QPrinter.collateCopies?4() -> bool +QtPrintSupport.QPrinter.setFullPage?4(bool) +QtPrintSupport.QPrinter.fullPage?4() -> bool +QtPrintSupport.QPrinter.setCopyCount?4(int) +QtPrintSupport.QPrinter.copyCount?4() -> int +QtPrintSupport.QPrinter.supportsMultipleCopies?4() -> bool +QtPrintSupport.QPrinter.setPaperSource?4(QPrinter.PaperSource) +QtPrintSupport.QPrinter.paperSource?4() -> QPrinter.PaperSource +QtPrintSupport.QPrinter.setDuplex?4(QPrinter.DuplexMode) +QtPrintSupport.QPrinter.duplex?4() -> QPrinter.DuplexMode +QtPrintSupport.QPrinter.supportedResolutions?4() -> unknown-type +QtPrintSupport.QPrinter.setFontEmbeddingEnabled?4(bool) +QtPrintSupport.QPrinter.fontEmbeddingEnabled?4() -> bool +QtPrintSupport.QPrinter.setDoubleSidedPrinting?4(bool) +QtPrintSupport.QPrinter.doubleSidedPrinting?4() -> bool +QtPrintSupport.QPrinter.paperRect?4() -> QRect +QtPrintSupport.QPrinter.pageRect?4() -> QRect +QtPrintSupport.QPrinter.paperRect?4(QPrinter.Unit) -> QRectF +QtPrintSupport.QPrinter.pageRect?4(QPrinter.Unit) -> QRectF +QtPrintSupport.QPrinter.printerSelectionOption?4() -> QString +QtPrintSupport.QPrinter.setPrinterSelectionOption?4(QString) +QtPrintSupport.QPrinter.newPage?4() -> bool +QtPrintSupport.QPrinter.abort?4() -> bool +QtPrintSupport.QPrinter.printerState?4() -> QPrinter.PrinterState +QtPrintSupport.QPrinter.paintEngine?4() -> QPaintEngine +QtPrintSupport.QPrinter.printEngine?4() -> QPrintEngine +QtPrintSupport.QPrinter.setFromTo?4(int, int) +QtPrintSupport.QPrinter.fromPage?4() -> int +QtPrintSupport.QPrinter.toPage?4() -> int +QtPrintSupport.QPrinter.setPrintRange?4(QPrinter.PrintRange) +QtPrintSupport.QPrinter.printRange?4() -> QPrinter.PrintRange +QtPrintSupport.QPrinter.setMargins?4(QPagedPaintDevice.Margins) +QtPrintSupport.QPrinter.setPageMargins?4(float, float, float, float, QPrinter.Unit) +QtPrintSupport.QPrinter.getPageMargins?4(QPrinter.Unit) -> (float, float, float, float) +QtPrintSupport.QPrinter.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtPrintSupport.QPrinter.setEngines?4(QPrintEngine, QPaintEngine) +QtPrintSupport.QPrinter.setPaperName?4(QString) +QtPrintSupport.QPrinter.paperName?4() -> QString +QtPrintSupport.QPrinter.setPdfVersion?4(QPagedPaintDevice.PdfVersion) +QtPrintSupport.QPrinter.pdfVersion?4() -> QPagedPaintDevice.PdfVersion +QtPrintSupport.QPrinterInfo?1() +QtPrintSupport.QPrinterInfo.__init__?1(self) +QtPrintSupport.QPrinterInfo?1(QPrinterInfo) +QtPrintSupport.QPrinterInfo.__init__?1(self, QPrinterInfo) +QtPrintSupport.QPrinterInfo?1(QPrinter) +QtPrintSupport.QPrinterInfo.__init__?1(self, QPrinter) +QtPrintSupport.QPrinterInfo.printerName?4() -> QString +QtPrintSupport.QPrinterInfo.isNull?4() -> bool +QtPrintSupport.QPrinterInfo.isDefault?4() -> bool +QtPrintSupport.QPrinterInfo.supportedPaperSizes?4() -> unknown-type +QtPrintSupport.QPrinterInfo.supportedSizesWithNames?4() -> unknown-type +QtPrintSupport.QPrinterInfo.availablePrinters?4() -> unknown-type +QtPrintSupport.QPrinterInfo.defaultPrinter?4() -> QPrinterInfo +QtPrintSupport.QPrinterInfo.description?4() -> QString +QtPrintSupport.QPrinterInfo.location?4() -> QString +QtPrintSupport.QPrinterInfo.makeAndModel?4() -> QString +QtPrintSupport.QPrinterInfo.printerInfo?4(QString) -> QPrinterInfo +QtPrintSupport.QPrinterInfo.isRemote?4() -> bool +QtPrintSupport.QPrinterInfo.state?4() -> QPrinter.PrinterState +QtPrintSupport.QPrinterInfo.supportedPageSizes?4() -> unknown-type +QtPrintSupport.QPrinterInfo.defaultPageSize?4() -> QPageSize +QtPrintSupport.QPrinterInfo.supportsCustomPageSizes?4() -> bool +QtPrintSupport.QPrinterInfo.minimumPhysicalPageSize?4() -> QPageSize +QtPrintSupport.QPrinterInfo.maximumPhysicalPageSize?4() -> QPageSize +QtPrintSupport.QPrinterInfo.supportedResolutions?4() -> unknown-type +QtPrintSupport.QPrinterInfo.availablePrinterNames?4() -> QStringList +QtPrintSupport.QPrinterInfo.defaultPrinterName?4() -> QString +QtPrintSupport.QPrinterInfo.defaultDuplexMode?4() -> QPrinter.DuplexMode +QtPrintSupport.QPrinterInfo.supportedDuplexModes?4() -> unknown-type +QtPrintSupport.QPrinterInfo.defaultColorMode?4() -> QPrinter.ColorMode +QtPrintSupport.QPrinterInfo.supportedColorModes?4() -> unknown-type +QtPrintSupport.QPrintPreviewDialog?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtPrintSupport.QPrintPreviewDialog.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtPrintSupport.QPrintPreviewDialog?1(QPrinter, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtPrintSupport.QPrintPreviewDialog.__init__?1(self, QPrinter, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtPrintSupport.QPrintPreviewDialog.setVisible?4(bool) +QtPrintSupport.QPrintPreviewDialog.open?4() +QtPrintSupport.QPrintPreviewDialog.open?4(Any) +QtPrintSupport.QPrintPreviewDialog.printer?4() -> QPrinter +QtPrintSupport.QPrintPreviewDialog.done?4(int) +QtPrintSupport.QPrintPreviewDialog.paintRequested?4(QPrinter) +QtPrintSupport.QPrintPreviewWidget.ZoomMode?10 +QtPrintSupport.QPrintPreviewWidget.ZoomMode.CustomZoom?10 +QtPrintSupport.QPrintPreviewWidget.ZoomMode.FitToWidth?10 +QtPrintSupport.QPrintPreviewWidget.ZoomMode.FitInView?10 +QtPrintSupport.QPrintPreviewWidget.ViewMode?10 +QtPrintSupport.QPrintPreviewWidget.ViewMode.SinglePageView?10 +QtPrintSupport.QPrintPreviewWidget.ViewMode.FacingPagesView?10 +QtPrintSupport.QPrintPreviewWidget.ViewMode.AllPagesView?10 +QtPrintSupport.QPrintPreviewWidget?1(QPrinter, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtPrintSupport.QPrintPreviewWidget.__init__?1(self, QPrinter, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtPrintSupport.QPrintPreviewWidget?1(QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtPrintSupport.QPrintPreviewWidget.__init__?1(self, QWidget parent=None, Qt.WindowFlags flags=Qt.WindowFlags()) +QtPrintSupport.QPrintPreviewWidget.zoomFactor?4() -> float +QtPrintSupport.QPrintPreviewWidget.orientation?4() -> QPrinter.Orientation +QtPrintSupport.QPrintPreviewWidget.viewMode?4() -> QPrintPreviewWidget.ViewMode +QtPrintSupport.QPrintPreviewWidget.zoomMode?4() -> QPrintPreviewWidget.ZoomMode +QtPrintSupport.QPrintPreviewWidget.currentPage?4() -> int +QtPrintSupport.QPrintPreviewWidget.setVisible?4(bool) +QtPrintSupport.QPrintPreviewWidget.print_?4() +QtPrintSupport.QPrintPreviewWidget.print?4() +QtPrintSupport.QPrintPreviewWidget.zoomIn?4(float factor=1.1) +QtPrintSupport.QPrintPreviewWidget.zoomOut?4(float factor=1.1) +QtPrintSupport.QPrintPreviewWidget.setZoomFactor?4(float) +QtPrintSupport.QPrintPreviewWidget.setOrientation?4(QPrinter.Orientation) +QtPrintSupport.QPrintPreviewWidget.setViewMode?4(QPrintPreviewWidget.ViewMode) +QtPrintSupport.QPrintPreviewWidget.setZoomMode?4(QPrintPreviewWidget.ZoomMode) +QtPrintSupport.QPrintPreviewWidget.setCurrentPage?4(int) +QtPrintSupport.QPrintPreviewWidget.fitToWidth?4() +QtPrintSupport.QPrintPreviewWidget.fitInView?4() +QtPrintSupport.QPrintPreviewWidget.setLandscapeOrientation?4() +QtPrintSupport.QPrintPreviewWidget.setPortraitOrientation?4() +QtPrintSupport.QPrintPreviewWidget.setSinglePageViewMode?4() +QtPrintSupport.QPrintPreviewWidget.setFacingPagesViewMode?4() +QtPrintSupport.QPrintPreviewWidget.setAllPagesViewMode?4() +QtPrintSupport.QPrintPreviewWidget.updatePreview?4() +QtPrintSupport.QPrintPreviewWidget.paintRequested?4(QPrinter) +QtPrintSupport.QPrintPreviewWidget.previewChanged?4() +QtPrintSupport.QPrintPreviewWidget.pageCount?4() -> int +QtQuick.QQuickItem.TransformOrigin?10 +QtQuick.QQuickItem.TransformOrigin.TopLeft?10 +QtQuick.QQuickItem.TransformOrigin.Top?10 +QtQuick.QQuickItem.TransformOrigin.TopRight?10 +QtQuick.QQuickItem.TransformOrigin.Left?10 +QtQuick.QQuickItem.TransformOrigin.Center?10 +QtQuick.QQuickItem.TransformOrigin.Right?10 +QtQuick.QQuickItem.TransformOrigin.BottomLeft?10 +QtQuick.QQuickItem.TransformOrigin.Bottom?10 +QtQuick.QQuickItem.TransformOrigin.BottomRight?10 +QtQuick.QQuickItem.ItemChange?10 +QtQuick.QQuickItem.ItemChange.ItemChildAddedChange?10 +QtQuick.QQuickItem.ItemChange.ItemChildRemovedChange?10 +QtQuick.QQuickItem.ItemChange.ItemSceneChange?10 +QtQuick.QQuickItem.ItemChange.ItemVisibleHasChanged?10 +QtQuick.QQuickItem.ItemChange.ItemParentHasChanged?10 +QtQuick.QQuickItem.ItemChange.ItemOpacityHasChanged?10 +QtQuick.QQuickItem.ItemChange.ItemActiveFocusHasChanged?10 +QtQuick.QQuickItem.ItemChange.ItemRotationHasChanged?10 +QtQuick.QQuickItem.ItemChange.ItemAntialiasingHasChanged?10 +QtQuick.QQuickItem.ItemChange.ItemDevicePixelRatioHasChanged?10 +QtQuick.QQuickItem.ItemChange.ItemEnabledHasChanged?10 +QtQuick.QQuickItem.Flag?10 +QtQuick.QQuickItem.Flag.ItemClipsChildrenToShape?10 +QtQuick.QQuickItem.Flag.ItemAcceptsInputMethod?10 +QtQuick.QQuickItem.Flag.ItemIsFocusScope?10 +QtQuick.QQuickItem.Flag.ItemHasContents?10 +QtQuick.QQuickItem.Flag.ItemAcceptsDrops?10 +QtQuick.QQuickItem?1(QQuickItem parent=None) +QtQuick.QQuickItem.__init__?1(self, QQuickItem parent=None) +QtQuick.QQuickItem.window?4() -> QQuickWindow +QtQuick.QQuickItem.parentItem?4() -> QQuickItem +QtQuick.QQuickItem.setParentItem?4(QQuickItem) +QtQuick.QQuickItem.stackBefore?4(QQuickItem) +QtQuick.QQuickItem.stackAfter?4(QQuickItem) +QtQuick.QQuickItem.childrenRect?4() -> QRectF +QtQuick.QQuickItem.childItems?4() -> unknown-type +QtQuick.QQuickItem.clip?4() -> bool +QtQuick.QQuickItem.setClip?4(bool) +QtQuick.QQuickItem.state?4() -> QString +QtQuick.QQuickItem.setState?4(QString) +QtQuick.QQuickItem.baselineOffset?4() -> float +QtQuick.QQuickItem.setBaselineOffset?4(float) +QtQuick.QQuickItem.x?4() -> float +QtQuick.QQuickItem.y?4() -> float +QtQuick.QQuickItem.setX?4(float) +QtQuick.QQuickItem.setY?4(float) +QtQuick.QQuickItem.width?4() -> float +QtQuick.QQuickItem.setWidth?4(float) +QtQuick.QQuickItem.resetWidth?4() +QtQuick.QQuickItem.setImplicitWidth?4(float) +QtQuick.QQuickItem.implicitWidth?4() -> float +QtQuick.QQuickItem.height?4() -> float +QtQuick.QQuickItem.setHeight?4(float) +QtQuick.QQuickItem.resetHeight?4() +QtQuick.QQuickItem.setImplicitHeight?4(float) +QtQuick.QQuickItem.implicitHeight?4() -> float +QtQuick.QQuickItem.transformOrigin?4() -> QQuickItem.TransformOrigin +QtQuick.QQuickItem.setTransformOrigin?4(QQuickItem.TransformOrigin) +QtQuick.QQuickItem.z?4() -> float +QtQuick.QQuickItem.setZ?4(float) +QtQuick.QQuickItem.rotation?4() -> float +QtQuick.QQuickItem.setRotation?4(float) +QtQuick.QQuickItem.scale?4() -> float +QtQuick.QQuickItem.setScale?4(float) +QtQuick.QQuickItem.opacity?4() -> float +QtQuick.QQuickItem.setOpacity?4(float) +QtQuick.QQuickItem.isVisible?4() -> bool +QtQuick.QQuickItem.setVisible?4(bool) +QtQuick.QQuickItem.isEnabled?4() -> bool +QtQuick.QQuickItem.setEnabled?4(bool) +QtQuick.QQuickItem.smooth?4() -> bool +QtQuick.QQuickItem.setSmooth?4(bool) +QtQuick.QQuickItem.antialiasing?4() -> bool +QtQuick.QQuickItem.setAntialiasing?4(bool) +QtQuick.QQuickItem.flags?4() -> QQuickItem.Flags +QtQuick.QQuickItem.setFlag?4(QQuickItem.Flag, bool enabled=True) +QtQuick.QQuickItem.setFlags?4(QQuickItem.Flags) +QtQuick.QQuickItem.hasActiveFocus?4() -> bool +QtQuick.QQuickItem.hasFocus?4() -> bool +QtQuick.QQuickItem.setFocus?4(bool) +QtQuick.QQuickItem.isFocusScope?4() -> bool +QtQuick.QQuickItem.scopedFocusItem?4() -> QQuickItem +QtQuick.QQuickItem.acceptedMouseButtons?4() -> Qt.MouseButtons +QtQuick.QQuickItem.setAcceptedMouseButtons?4(Qt.MouseButtons) +QtQuick.QQuickItem.acceptHoverEvents?4() -> bool +QtQuick.QQuickItem.setAcceptHoverEvents?4(bool) +QtQuick.QQuickItem.cursor?4() -> QCursor +QtQuick.QQuickItem.setCursor?4(QCursor) +QtQuick.QQuickItem.unsetCursor?4() +QtQuick.QQuickItem.grabMouse?4() +QtQuick.QQuickItem.ungrabMouse?4() +QtQuick.QQuickItem.keepMouseGrab?4() -> bool +QtQuick.QQuickItem.setKeepMouseGrab?4(bool) +QtQuick.QQuickItem.filtersChildMouseEvents?4() -> bool +QtQuick.QQuickItem.setFiltersChildMouseEvents?4(bool) +QtQuick.QQuickItem.grabTouchPoints?4(unknown-type) +QtQuick.QQuickItem.ungrabTouchPoints?4() +QtQuick.QQuickItem.keepTouchGrab?4() -> bool +QtQuick.QQuickItem.setKeepTouchGrab?4(bool) +QtQuick.QQuickItem.contains?4(QPointF) -> bool +QtQuick.QQuickItem.mapToItem?4(QQuickItem, QPointF) -> QPointF +QtQuick.QQuickItem.mapToScene?4(QPointF) -> QPointF +QtQuick.QQuickItem.mapRectToItem?4(QQuickItem, QRectF) -> QRectF +QtQuick.QQuickItem.mapRectToScene?4(QRectF) -> QRectF +QtQuick.QQuickItem.mapFromItem?4(QQuickItem, QPointF) -> QPointF +QtQuick.QQuickItem.mapFromScene?4(QPointF) -> QPointF +QtQuick.QQuickItem.mapRectFromItem?4(QQuickItem, QRectF) -> QRectF +QtQuick.QQuickItem.mapRectFromScene?4(QRectF) -> QRectF +QtQuick.QQuickItem.polish?4() +QtQuick.QQuickItem.forceActiveFocus?4() +QtQuick.QQuickItem.childAt?4(float, float) -> QQuickItem +QtQuick.QQuickItem.inputMethodQuery?4(Qt.InputMethodQuery) -> QVariant +QtQuick.QQuickItem.isTextureProvider?4() -> bool +QtQuick.QQuickItem.textureProvider?4() -> QSGTextureProvider +QtQuick.QQuickItem.update?4() +QtQuick.QQuickItem.event?4(QEvent) -> bool +QtQuick.QQuickItem.isComponentComplete?4() -> bool +QtQuick.QQuickItem.itemChange?4(QQuickItem.ItemChange, QQuickItem.ItemChangeData) +QtQuick.QQuickItem.updateInputMethod?4(Qt.InputMethodQueries queries=Qt.InputMethodQuery.ImQueryInput) +QtQuick.QQuickItem.widthValid?4() -> bool +QtQuick.QQuickItem.heightValid?4() -> bool +QtQuick.QQuickItem.classBegin?4() +QtQuick.QQuickItem.componentComplete?4() +QtQuick.QQuickItem.keyPressEvent?4(QKeyEvent) +QtQuick.QQuickItem.keyReleaseEvent?4(QKeyEvent) +QtQuick.QQuickItem.inputMethodEvent?4(QInputMethodEvent) +QtQuick.QQuickItem.focusInEvent?4(QFocusEvent) +QtQuick.QQuickItem.focusOutEvent?4(QFocusEvent) +QtQuick.QQuickItem.mousePressEvent?4(QMouseEvent) +QtQuick.QQuickItem.mouseMoveEvent?4(QMouseEvent) +QtQuick.QQuickItem.mouseReleaseEvent?4(QMouseEvent) +QtQuick.QQuickItem.mouseDoubleClickEvent?4(QMouseEvent) +QtQuick.QQuickItem.mouseUngrabEvent?4() +QtQuick.QQuickItem.touchUngrabEvent?4() +QtQuick.QQuickItem.wheelEvent?4(QWheelEvent) +QtQuick.QQuickItem.touchEvent?4(QTouchEvent) +QtQuick.QQuickItem.hoverEnterEvent?4(QHoverEvent) +QtQuick.QQuickItem.hoverMoveEvent?4(QHoverEvent) +QtQuick.QQuickItem.hoverLeaveEvent?4(QHoverEvent) +QtQuick.QQuickItem.dragEnterEvent?4(QDragEnterEvent) +QtQuick.QQuickItem.dragMoveEvent?4(QDragMoveEvent) +QtQuick.QQuickItem.dragLeaveEvent?4(QDragLeaveEvent) +QtQuick.QQuickItem.dropEvent?4(QDropEvent) +QtQuick.QQuickItem.childMouseEventFilter?4(QQuickItem, QEvent) -> bool +QtQuick.QQuickItem.geometryChanged?4(QRectF, QRectF) +QtQuick.QQuickItem.updatePaintNode?4(QSGNode, QQuickItem.UpdatePaintNodeData) -> QSGNode +QtQuick.QQuickItem.releaseResources?4() +QtQuick.QQuickItem.updatePolish?4() +QtQuick.QQuickItem.activeFocusOnTab?4() -> bool +QtQuick.QQuickItem.setActiveFocusOnTab?4(bool) +QtQuick.QQuickItem.setFocus?4(bool, Qt.FocusReason) +QtQuick.QQuickItem.forceActiveFocus?4(Qt.FocusReason) +QtQuick.QQuickItem.nextItemInFocusChain?4(bool forward=True) -> QQuickItem +QtQuick.QQuickItem.windowChanged?4(QQuickWindow) +QtQuick.QQuickItem.resetAntialiasing?4() +QtQuick.QQuickItem.grabToImage?4(QSize targetSize=QSize()) -> QQuickItemGrabResult +QtQuick.QQuickItem.isAncestorOf?4(QQuickItem) -> bool +QtQuick.QQuickItem.mapToGlobal?4(QPointF) -> QPointF +QtQuick.QQuickItem.mapFromGlobal?4(QPointF) -> QPointF +QtQuick.QQuickItem.size?4() -> QSizeF +QtQuick.QQuickItem.acceptTouchEvents?4() -> bool +QtQuick.QQuickItem.setAcceptTouchEvents?4(bool) +QtQuick.QQuickItem.containmentMask?4() -> QObject +QtQuick.QQuickItem.setContainmentMask?4(QObject) +QtQuick.QQuickItem.containmentMaskChanged?4() +QtQuick.QQuickFramebufferObject?1(QQuickItem parent=None) +QtQuick.QQuickFramebufferObject.__init__?1(self, QQuickItem parent=None) +QtQuick.QQuickFramebufferObject.textureFollowsItemSize?4() -> bool +QtQuick.QQuickFramebufferObject.setTextureFollowsItemSize?4(bool) +QtQuick.QQuickFramebufferObject.createRenderer?4() -> QQuickFramebufferObject.Renderer +QtQuick.QQuickFramebufferObject.geometryChanged?4(QRectF, QRectF) +QtQuick.QQuickFramebufferObject.updatePaintNode?4(QSGNode, QQuickItem.UpdatePaintNodeData) -> QSGNode +QtQuick.QQuickFramebufferObject.textureFollowsItemSizeChanged?4(bool) +QtQuick.QQuickFramebufferObject.isTextureProvider?4() -> bool +QtQuick.QQuickFramebufferObject.textureProvider?4() -> QSGTextureProvider +QtQuick.QQuickFramebufferObject.releaseResources?4() +QtQuick.QQuickFramebufferObject.mirrorVertically?4() -> bool +QtQuick.QQuickFramebufferObject.setMirrorVertically?4(bool) +QtQuick.QQuickFramebufferObject.mirrorVerticallyChanged?4(bool) +QtQuick.QQuickFramebufferObject.Renderer?1() +QtQuick.QQuickFramebufferObject.Renderer.__init__?1(self) +QtQuick.QQuickFramebufferObject.Renderer?1(QQuickFramebufferObject.Renderer) +QtQuick.QQuickFramebufferObject.Renderer.__init__?1(self, QQuickFramebufferObject.Renderer) +QtQuick.QQuickFramebufferObject.Renderer.render?4() +QtQuick.QQuickFramebufferObject.Renderer.createFramebufferObject?4(QSize) -> QOpenGLFramebufferObject +QtQuick.QQuickFramebufferObject.Renderer.synchronize?4(QQuickFramebufferObject) +QtQuick.QQuickFramebufferObject.Renderer.framebufferObject?4() -> QOpenGLFramebufferObject +QtQuick.QQuickFramebufferObject.Renderer.update?4() +QtQuick.QQuickFramebufferObject.Renderer.invalidateFramebufferObject?4() +QtQuick.QQuickTextureFactory?1() +QtQuick.QQuickTextureFactory.__init__?1(self) +QtQuick.QQuickTextureFactory.createTexture?4(QQuickWindow) -> QSGTexture +QtQuick.QQuickTextureFactory.textureSize?4() -> QSize +QtQuick.QQuickTextureFactory.textureByteCount?4() -> int +QtQuick.QQuickTextureFactory.image?4() -> QImage +QtQuick.QQuickTextureFactory.textureFactoryForImage?4(QImage) -> QQuickTextureFactory +QtQuick.QQuickImageProvider?1(QQmlImageProviderBase.ImageType, QQmlImageProviderBase.Flags flags=QQmlImageProviderBase.Flags()) +QtQuick.QQuickImageProvider.__init__?1(self, QQmlImageProviderBase.ImageType, QQmlImageProviderBase.Flags flags=QQmlImageProviderBase.Flags()) +QtQuick.QQuickImageProvider?1(QQuickImageProvider) +QtQuick.QQuickImageProvider.__init__?1(self, QQuickImageProvider) +QtQuick.QQuickImageProvider.imageType?4() -> QQmlImageProviderBase.ImageType +QtQuick.QQuickImageProvider.flags?4() -> QQmlImageProviderBase.Flags +QtQuick.QQuickImageProvider.requestImage?4(QString, QSize) -> (QImage, QSize) +QtQuick.QQuickImageProvider.requestPixmap?4(QString, QSize) -> (QPixmap, QSize) +QtQuick.QQuickImageProvider.requestTexture?4(QString, QSize) -> (QQuickTextureFactory, QSize) +QtQuick.QQuickImageResponse?1() +QtQuick.QQuickImageResponse.__init__?1(self) +QtQuick.QQuickImageResponse.textureFactory?4() -> QQuickTextureFactory +QtQuick.QQuickImageResponse.errorString?4() -> QString +QtQuick.QQuickImageResponse.cancel?4() +QtQuick.QQuickImageResponse.finished?4() +QtQuick.QQuickAsyncImageProvider?1() +QtQuick.QQuickAsyncImageProvider.__init__?1(self) +QtQuick.QQuickAsyncImageProvider?1(QQuickAsyncImageProvider) +QtQuick.QQuickAsyncImageProvider.__init__?1(self, QQuickAsyncImageProvider) +QtQuick.QQuickAsyncImageProvider.requestImageResponse?4(QString, QSize) -> QQuickImageResponse +QtQuick.QQuickItem.Flags?1() +QtQuick.QQuickItem.Flags.__init__?1(self) +QtQuick.QQuickItem.Flags?1(int) +QtQuick.QQuickItem.Flags.__init__?1(self, int) +QtQuick.QQuickItem.Flags?1(QQuickItem.Flags) +QtQuick.QQuickItem.Flags.__init__?1(self, QQuickItem.Flags) +QtQuick.QQuickItem.ItemChangeData.boolValue?7 +QtQuick.QQuickItem.ItemChangeData.item?7 +QtQuick.QQuickItem.ItemChangeData.realValue?7 +QtQuick.QQuickItem.ItemChangeData.window?7 +QtQuick.QQuickItem.ItemChangeData?1(QQuickItem) +QtQuick.QQuickItem.ItemChangeData.__init__?1(self, QQuickItem) +QtQuick.QQuickItem.ItemChangeData?1(QQuickWindow) +QtQuick.QQuickItem.ItemChangeData.__init__?1(self, QQuickWindow) +QtQuick.QQuickItem.ItemChangeData?1(float) +QtQuick.QQuickItem.ItemChangeData.__init__?1(self, float) +QtQuick.QQuickItem.ItemChangeData?1(bool) +QtQuick.QQuickItem.ItemChangeData.__init__?1(self, bool) +QtQuick.QQuickItem.ItemChangeData?1(QQuickItem.ItemChangeData) +QtQuick.QQuickItem.ItemChangeData.__init__?1(self, QQuickItem.ItemChangeData) +QtQuick.QQuickItem.UpdatePaintNodeData.transformNode?7 +QtQuick.QQuickItem.UpdatePaintNodeData?1(QQuickItem.UpdatePaintNodeData) +QtQuick.QQuickItem.UpdatePaintNodeData.__init__?1(self, QQuickItem.UpdatePaintNodeData) +QtQuick.QQuickItemGrabResult.image?4() -> QImage +QtQuick.QQuickItemGrabResult.url?4() -> QUrl +QtQuick.QQuickItemGrabResult.saveToFile?4(QString) -> bool +QtQuick.QQuickItemGrabResult.event?4(QEvent) -> bool +QtQuick.QQuickItemGrabResult.ready?4() +QtQuick.QQuickPaintedItem.PerformanceHint?10 +QtQuick.QQuickPaintedItem.PerformanceHint.FastFBOResizing?10 +QtQuick.QQuickPaintedItem.RenderTarget?10 +QtQuick.QQuickPaintedItem.RenderTarget.Image?10 +QtQuick.QQuickPaintedItem.RenderTarget.FramebufferObject?10 +QtQuick.QQuickPaintedItem.RenderTarget.InvertedYFramebufferObject?10 +QtQuick.QQuickPaintedItem?1(QQuickItem parent=None) +QtQuick.QQuickPaintedItem.__init__?1(self, QQuickItem parent=None) +QtQuick.QQuickPaintedItem.update?4(QRect rect=QRect()) +QtQuick.QQuickPaintedItem.opaquePainting?4() -> bool +QtQuick.QQuickPaintedItem.setOpaquePainting?4(bool) +QtQuick.QQuickPaintedItem.antialiasing?4() -> bool +QtQuick.QQuickPaintedItem.setAntialiasing?4(bool) +QtQuick.QQuickPaintedItem.mipmap?4() -> bool +QtQuick.QQuickPaintedItem.setMipmap?4(bool) +QtQuick.QQuickPaintedItem.performanceHints?4() -> QQuickPaintedItem.PerformanceHints +QtQuick.QQuickPaintedItem.setPerformanceHint?4(QQuickPaintedItem.PerformanceHint, bool enabled=True) +QtQuick.QQuickPaintedItem.setPerformanceHints?4(QQuickPaintedItem.PerformanceHints) +QtQuick.QQuickPaintedItem.contentsBoundingRect?4() -> QRectF +QtQuick.QQuickPaintedItem.contentsSize?4() -> QSize +QtQuick.QQuickPaintedItem.setContentsSize?4(QSize) +QtQuick.QQuickPaintedItem.resetContentsSize?4() +QtQuick.QQuickPaintedItem.contentsScale?4() -> float +QtQuick.QQuickPaintedItem.setContentsScale?4(float) +QtQuick.QQuickPaintedItem.fillColor?4() -> QColor +QtQuick.QQuickPaintedItem.setFillColor?4(QColor) +QtQuick.QQuickPaintedItem.renderTarget?4() -> QQuickPaintedItem.RenderTarget +QtQuick.QQuickPaintedItem.setRenderTarget?4(QQuickPaintedItem.RenderTarget) +QtQuick.QQuickPaintedItem.paint?4(QPainter) +QtQuick.QQuickPaintedItem.fillColorChanged?4() +QtQuick.QQuickPaintedItem.contentsSizeChanged?4() +QtQuick.QQuickPaintedItem.contentsScaleChanged?4() +QtQuick.QQuickPaintedItem.renderTargetChanged?4() +QtQuick.QQuickPaintedItem.updatePaintNode?4(QSGNode, QQuickItem.UpdatePaintNodeData) -> QSGNode +QtQuick.QQuickPaintedItem.isTextureProvider?4() -> bool +QtQuick.QQuickPaintedItem.textureProvider?4() -> QSGTextureProvider +QtQuick.QQuickPaintedItem.releaseResources?4() +QtQuick.QQuickPaintedItem.itemChange?4(QQuickItem.ItemChange, QQuickItem.ItemChangeData) +QtQuick.QQuickPaintedItem.textureSize?4() -> QSize +QtQuick.QQuickPaintedItem.setTextureSize?4(QSize) +QtQuick.QQuickPaintedItem.textureSizeChanged?4() +QtQuick.QQuickPaintedItem.PerformanceHints?1() +QtQuick.QQuickPaintedItem.PerformanceHints.__init__?1(self) +QtQuick.QQuickPaintedItem.PerformanceHints?1(int) +QtQuick.QQuickPaintedItem.PerformanceHints.__init__?1(self, int) +QtQuick.QQuickPaintedItem.PerformanceHints?1(QQuickPaintedItem.PerformanceHints) +QtQuick.QQuickPaintedItem.PerformanceHints.__init__?1(self, QQuickPaintedItem.PerformanceHints) +QtQuick.QQuickRenderControl?1(QObject parent=None) +QtQuick.QQuickRenderControl.__init__?1(self, QObject parent=None) +QtQuick.QQuickRenderControl.initialize?4(QOpenGLContext) +QtQuick.QQuickRenderControl.invalidate?4() +QtQuick.QQuickRenderControl.polishItems?4() +QtQuick.QQuickRenderControl.render?4() +QtQuick.QQuickRenderControl.sync?4() -> bool +QtQuick.QQuickRenderControl.grab?4() -> QImage +QtQuick.QQuickRenderControl.renderWindowFor?4(QQuickWindow, QPoint offset=None) -> QWindow +QtQuick.QQuickRenderControl.renderWindow?4(QPoint) -> QWindow +QtQuick.QQuickRenderControl.prepareThread?4(QThread) +QtQuick.QQuickRenderControl.renderRequested?4() +QtQuick.QQuickRenderControl.sceneChanged?4() +QtQuick.QQuickTextDocument?1(QQuickItem) +QtQuick.QQuickTextDocument.__init__?1(self, QQuickItem) +QtQuick.QQuickTextDocument.textDocument?4() -> QTextDocument +QtQuick.QQuickWindow.NativeObjectType?10 +QtQuick.QQuickWindow.NativeObjectType.NativeObjectTexture?10 +QtQuick.QQuickWindow.TextRenderType?10 +QtQuick.QQuickWindow.TextRenderType.QtTextRendering?10 +QtQuick.QQuickWindow.TextRenderType.NativeTextRendering?10 +QtQuick.QQuickWindow.RenderStage?10 +QtQuick.QQuickWindow.RenderStage.BeforeSynchronizingStage?10 +QtQuick.QQuickWindow.RenderStage.AfterSynchronizingStage?10 +QtQuick.QQuickWindow.RenderStage.BeforeRenderingStage?10 +QtQuick.QQuickWindow.RenderStage.AfterRenderingStage?10 +QtQuick.QQuickWindow.RenderStage.AfterSwapStage?10 +QtQuick.QQuickWindow.RenderStage.NoStage?10 +QtQuick.QQuickWindow.SceneGraphError?10 +QtQuick.QQuickWindow.SceneGraphError.ContextNotAvailable?10 +QtQuick.QQuickWindow.CreateTextureOption?10 +QtQuick.QQuickWindow.CreateTextureOption.TextureHasAlphaChannel?10 +QtQuick.QQuickWindow.CreateTextureOption.TextureHasMipmaps?10 +QtQuick.QQuickWindow.CreateTextureOption.TextureOwnsGLTexture?10 +QtQuick.QQuickWindow.CreateTextureOption.TextureCanUseAtlas?10 +QtQuick.QQuickWindow.CreateTextureOption.TextureIsOpaque?10 +QtQuick.QQuickWindow?1(QWindow parent=None) +QtQuick.QQuickWindow.__init__?1(self, QWindow parent=None) +QtQuick.QQuickWindow.contentItem?4() -> QQuickItem +QtQuick.QQuickWindow.activeFocusItem?4() -> QQuickItem +QtQuick.QQuickWindow.focusObject?4() -> QObject +QtQuick.QQuickWindow.mouseGrabberItem?4() -> QQuickItem +QtQuick.QQuickWindow.sendEvent?4(QQuickItem, QEvent) -> bool +QtQuick.QQuickWindow.grabWindow?4() -> QImage +QtQuick.QQuickWindow.setRenderTarget?4(QOpenGLFramebufferObject) +QtQuick.QQuickWindow.renderTarget?4() -> QOpenGLFramebufferObject +QtQuick.QQuickWindow.setRenderTarget?4(int, QSize) +QtQuick.QQuickWindow.renderTargetId?4() -> int +QtQuick.QQuickWindow.renderTargetSize?4() -> QSize +QtQuick.QQuickWindow.incubationController?4() -> QQmlIncubationController +QtQuick.QQuickWindow.createTextureFromImage?4(QImage) -> QSGTexture +QtQuick.QQuickWindow.createTextureFromImage?4(QImage, QQuickWindow.CreateTextureOptions) -> QSGTexture +QtQuick.QQuickWindow.createTextureFromId?4(int, QSize, QQuickWindow.CreateTextureOptions options=QQuickWindow.CreateTextureOption()) -> QSGTexture +QtQuick.QQuickWindow.createTextureFromNativeObject?4(QQuickWindow.NativeObjectType, PyQt5.sip.voidptr, int, QSize, QQuickWindow.CreateTextureOptions options=QQuickWindow.CreateTextureOption()) -> QSGTexture +QtQuick.QQuickWindow.setClearBeforeRendering?4(bool) +QtQuick.QQuickWindow.clearBeforeRendering?4() -> bool +QtQuick.QQuickWindow.setColor?4(QColor) +QtQuick.QQuickWindow.color?4() -> QColor +QtQuick.QQuickWindow.setPersistentOpenGLContext?4(bool) +QtQuick.QQuickWindow.isPersistentOpenGLContext?4() -> bool +QtQuick.QQuickWindow.setPersistentSceneGraph?4(bool) +QtQuick.QQuickWindow.isPersistentSceneGraph?4() -> bool +QtQuick.QQuickWindow.openglContext?4() -> QOpenGLContext +QtQuick.QQuickWindow.frameSwapped?4() +QtQuick.QQuickWindow.sceneGraphInitialized?4() +QtQuick.QQuickWindow.sceneGraphInvalidated?4() +QtQuick.QQuickWindow.beforeSynchronizing?4() +QtQuick.QQuickWindow.beforeRendering?4() +QtQuick.QQuickWindow.afterRendering?4() +QtQuick.QQuickWindow.colorChanged?4(QColor) +QtQuick.QQuickWindow.update?4() +QtQuick.QQuickWindow.releaseResources?4() +QtQuick.QQuickWindow.exposeEvent?4(QExposeEvent) +QtQuick.QQuickWindow.resizeEvent?4(QResizeEvent) +QtQuick.QQuickWindow.showEvent?4(QShowEvent) +QtQuick.QQuickWindow.hideEvent?4(QHideEvent) +QtQuick.QQuickWindow.focusInEvent?4(QFocusEvent) +QtQuick.QQuickWindow.focusOutEvent?4(QFocusEvent) +QtQuick.QQuickWindow.event?4(QEvent) -> bool +QtQuick.QQuickWindow.keyPressEvent?4(QKeyEvent) +QtQuick.QQuickWindow.keyReleaseEvent?4(QKeyEvent) +QtQuick.QQuickWindow.mousePressEvent?4(QMouseEvent) +QtQuick.QQuickWindow.mouseReleaseEvent?4(QMouseEvent) +QtQuick.QQuickWindow.mouseDoubleClickEvent?4(QMouseEvent) +QtQuick.QQuickWindow.mouseMoveEvent?4(QMouseEvent) +QtQuick.QQuickWindow.wheelEvent?4(QWheelEvent) +QtQuick.QQuickWindow.tabletEvent?4(QTabletEvent) +QtQuick.QQuickWindow.hasDefaultAlphaBuffer?4() -> bool +QtQuick.QQuickWindow.setDefaultAlphaBuffer?4(bool) +QtQuick.QQuickWindow.closing?4(QQuickCloseEvent) +QtQuick.QQuickWindow.activeFocusItemChanged?4() +QtQuick.QQuickWindow.resetOpenGLState?4() +QtQuick.QQuickWindow.openglContextCreated?4(QOpenGLContext) +QtQuick.QQuickWindow.afterSynchronizing?4() +QtQuick.QQuickWindow.afterAnimating?4() +QtQuick.QQuickWindow.sceneGraphAboutToStop?4() +QtQuick.QQuickWindow.sceneGraphError?4(QQuickWindow.SceneGraphError, QString) +QtQuick.QQuickWindow.scheduleRenderJob?4(QRunnable, QQuickWindow.RenderStage) +QtQuick.QQuickWindow.effectiveDevicePixelRatio?4() -> float +QtQuick.QQuickWindow.isSceneGraphInitialized?4() -> bool +QtQuick.QQuickWindow.rendererInterface?4() -> QSGRendererInterface +QtQuick.QQuickWindow.setSceneGraphBackend?4(QSGRendererInterface.GraphicsApi) +QtQuick.QQuickWindow.setSceneGraphBackend?4(QString) +QtQuick.QQuickWindow.createRectangleNode?4() -> QSGRectangleNode +QtQuick.QQuickWindow.createImageNode?4() -> QSGImageNode +QtQuick.QQuickWindow.sceneGraphBackend?4() -> QString +QtQuick.QQuickWindow.textRenderType?4() -> QQuickWindow.TextRenderType +QtQuick.QQuickWindow.setTextRenderType?4(QQuickWindow.TextRenderType) +QtQuick.QQuickWindow.beginExternalCommands?4() +QtQuick.QQuickWindow.endExternalCommands?4() +QtQuick.QQuickWindow.beforeRenderPassRecording?4() +QtQuick.QQuickWindow.afterRenderPassRecording?4() +QtQuick.QQuickView.Status?10 +QtQuick.QQuickView.Status.Null?10 +QtQuick.QQuickView.Status.Ready?10 +QtQuick.QQuickView.Status.Loading?10 +QtQuick.QQuickView.Status.Error?10 +QtQuick.QQuickView.ResizeMode?10 +QtQuick.QQuickView.ResizeMode.SizeViewToRootObject?10 +QtQuick.QQuickView.ResizeMode.SizeRootObjectToView?10 +QtQuick.QQuickView?1(QWindow parent=None) +QtQuick.QQuickView.__init__?1(self, QWindow parent=None) +QtQuick.QQuickView?1(QQmlEngine, QWindow) +QtQuick.QQuickView.__init__?1(self, QQmlEngine, QWindow) +QtQuick.QQuickView?1(QUrl, QWindow parent=None) +QtQuick.QQuickView.__init__?1(self, QUrl, QWindow parent=None) +QtQuick.QQuickView.source?4() -> QUrl +QtQuick.QQuickView.engine?4() -> QQmlEngine +QtQuick.QQuickView.rootContext?4() -> QQmlContext +QtQuick.QQuickView.rootObject?4() -> QQuickItem +QtQuick.QQuickView.resizeMode?4() -> QQuickView.ResizeMode +QtQuick.QQuickView.setResizeMode?4(QQuickView.ResizeMode) +QtQuick.QQuickView.status?4() -> QQuickView.Status +QtQuick.QQuickView.errors?4() -> unknown-type +QtQuick.QQuickView.initialSize?4() -> QSize +QtQuick.QQuickView.setSource?4(QUrl) +QtQuick.QQuickView.setInitialProperties?4(QVariantMap) +QtQuick.QQuickView.statusChanged?4(QQuickView.Status) +QtQuick.QQuickView.resizeEvent?4(QResizeEvent) +QtQuick.QQuickView.timerEvent?4(QTimerEvent) +QtQuick.QQuickView.keyPressEvent?4(QKeyEvent) +QtQuick.QQuickView.keyReleaseEvent?4(QKeyEvent) +QtQuick.QQuickView.mousePressEvent?4(QMouseEvent) +QtQuick.QQuickView.mouseReleaseEvent?4(QMouseEvent) +QtQuick.QQuickView.mouseMoveEvent?4(QMouseEvent) +QtQuick.QQuickWindow.CreateTextureOptions?1() +QtQuick.QQuickWindow.CreateTextureOptions.__init__?1(self) +QtQuick.QQuickWindow.CreateTextureOptions?1(int) +QtQuick.QQuickWindow.CreateTextureOptions.__init__?1(self, int) +QtQuick.QQuickWindow.CreateTextureOptions?1(QQuickWindow.CreateTextureOptions) +QtQuick.QQuickWindow.CreateTextureOptions.__init__?1(self, QQuickWindow.CreateTextureOptions) +QtQuick.QSGAbstractRenderer.MatrixTransformFlag?10 +QtQuick.QSGAbstractRenderer.MatrixTransformFlag.MatrixTransformFlipY?10 +QtQuick.QSGAbstractRenderer.ClearModeBit?10 +QtQuick.QSGAbstractRenderer.ClearModeBit.ClearColorBuffer?10 +QtQuick.QSGAbstractRenderer.ClearModeBit.ClearDepthBuffer?10 +QtQuick.QSGAbstractRenderer.ClearModeBit.ClearStencilBuffer?10 +QtQuick.QSGAbstractRenderer.setDeviceRect?4(QRect) +QtQuick.QSGAbstractRenderer.setDeviceRect?4(QSize) +QtQuick.QSGAbstractRenderer.deviceRect?4() -> QRect +QtQuick.QSGAbstractRenderer.setViewportRect?4(QRect) +QtQuick.QSGAbstractRenderer.setViewportRect?4(QSize) +QtQuick.QSGAbstractRenderer.viewportRect?4() -> QRect +QtQuick.QSGAbstractRenderer.setProjectionMatrixToRect?4(QRectF) +QtQuick.QSGAbstractRenderer.setProjectionMatrixToRect?4(QRectF, QSGAbstractRenderer.MatrixTransformFlags) +QtQuick.QSGAbstractRenderer.setProjectionMatrix?4(QMatrix4x4) +QtQuick.QSGAbstractRenderer.projectionMatrix?4() -> QMatrix4x4 +QtQuick.QSGAbstractRenderer.setClearColor?4(QColor) +QtQuick.QSGAbstractRenderer.clearColor?4() -> QColor +QtQuick.QSGAbstractRenderer.setClearMode?4(QSGAbstractRenderer.ClearMode) +QtQuick.QSGAbstractRenderer.clearMode?4() -> QSGAbstractRenderer.ClearMode +QtQuick.QSGAbstractRenderer.renderScene?4(int fboId=0) +QtQuick.QSGAbstractRenderer.sceneGraphChanged?4() +QtQuick.QSGAbstractRenderer.ClearMode?1() +QtQuick.QSGAbstractRenderer.ClearMode.__init__?1(self) +QtQuick.QSGAbstractRenderer.ClearMode?1(int) +QtQuick.QSGAbstractRenderer.ClearMode.__init__?1(self, int) +QtQuick.QSGAbstractRenderer.ClearMode?1(QSGAbstractRenderer.ClearMode) +QtQuick.QSGAbstractRenderer.ClearMode.__init__?1(self, QSGAbstractRenderer.ClearMode) +QtQuick.QSGAbstractRenderer.MatrixTransformFlags?1() +QtQuick.QSGAbstractRenderer.MatrixTransformFlags.__init__?1(self) +QtQuick.QSGAbstractRenderer.MatrixTransformFlags?1(int) +QtQuick.QSGAbstractRenderer.MatrixTransformFlags.__init__?1(self, int) +QtQuick.QSGAbstractRenderer.MatrixTransformFlags?1(QSGAbstractRenderer.MatrixTransformFlags) +QtQuick.QSGAbstractRenderer.MatrixTransformFlags.__init__?1(self, QSGAbstractRenderer.MatrixTransformFlags) +QtQuick.QSGEngine.CreateTextureOption?10 +QtQuick.QSGEngine.CreateTextureOption.TextureHasAlphaChannel?10 +QtQuick.QSGEngine.CreateTextureOption.TextureOwnsGLTexture?10 +QtQuick.QSGEngine.CreateTextureOption.TextureCanUseAtlas?10 +QtQuick.QSGEngine.CreateTextureOption.TextureIsOpaque?10 +QtQuick.QSGEngine?1(QObject parent=None) +QtQuick.QSGEngine.__init__?1(self, QObject parent=None) +QtQuick.QSGEngine.initialize?4(QOpenGLContext) +QtQuick.QSGEngine.invalidate?4() +QtQuick.QSGEngine.createRenderer?4() -> QSGAbstractRenderer +QtQuick.QSGEngine.createTextureFromImage?4(QImage, QSGEngine.CreateTextureOptions options=QSGEngine.CreateTextureOption()) -> QSGTexture +QtQuick.QSGEngine.createTextureFromId?4(int, QSize, QSGEngine.CreateTextureOptions options=QSGEngine.CreateTextureOption()) -> QSGTexture +QtQuick.QSGEngine.rendererInterface?4() -> QSGRendererInterface +QtQuick.QSGEngine.createRectangleNode?4() -> QSGRectangleNode +QtQuick.QSGEngine.createImageNode?4() -> QSGImageNode +QtQuick.QSGEngine.CreateTextureOptions?1() +QtQuick.QSGEngine.CreateTextureOptions.__init__?1(self) +QtQuick.QSGEngine.CreateTextureOptions?1(int) +QtQuick.QSGEngine.CreateTextureOptions.__init__?1(self, int) +QtQuick.QSGEngine.CreateTextureOptions?1(QSGEngine.CreateTextureOptions) +QtQuick.QSGEngine.CreateTextureOptions.__init__?1(self, QSGEngine.CreateTextureOptions) +QtQuick.QSGMaterial.Flag?10 +QtQuick.QSGMaterial.Flag.Blending?10 +QtQuick.QSGMaterial.Flag.RequiresDeterminant?10 +QtQuick.QSGMaterial.Flag.RequiresFullMatrixExceptTranslate?10 +QtQuick.QSGMaterial.Flag.RequiresFullMatrix?10 +QtQuick.QSGMaterial.Flag.CustomCompileStep?10 +QtQuick.QSGMaterial.Flag.SupportsRhiShader?10 +QtQuick.QSGMaterial.Flag.RhiShaderWanted?10 +QtQuick.QSGMaterial?1() +QtQuick.QSGMaterial.__init__?1(self) +QtQuick.QSGMaterial.type?4() -> QSGMaterialType +QtQuick.QSGMaterial.createShader?4() -> QSGMaterialShader +QtQuick.QSGMaterial.compare?4(QSGMaterial) -> int +QtQuick.QSGMaterial.flags?4() -> QSGMaterial.Flags +QtQuick.QSGMaterial.setFlag?4(QSGMaterial.Flags, bool enabled=True) +QtQuick.QSGFlatColorMaterial?1() +QtQuick.QSGFlatColorMaterial.__init__?1(self) +QtQuick.QSGFlatColorMaterial.type?4() -> QSGMaterialType +QtQuick.QSGFlatColorMaterial.createShader?4() -> QSGMaterialShader +QtQuick.QSGFlatColorMaterial.setColor?4(QColor) +QtQuick.QSGFlatColorMaterial.color?4() -> QColor +QtQuick.QSGFlatColorMaterial.compare?4(QSGMaterial) -> int +QtQuick.QSGGeometry.Type?10 +QtQuick.QSGGeometry.Type.ByteType?10 +QtQuick.QSGGeometry.Type.UnsignedByteType?10 +QtQuick.QSGGeometry.Type.ShortType?10 +QtQuick.QSGGeometry.Type.UnsignedShortType?10 +QtQuick.QSGGeometry.Type.IntType?10 +QtQuick.QSGGeometry.Type.UnsignedIntType?10 +QtQuick.QSGGeometry.Type.FloatType?10 +QtQuick.QSGGeometry.Type.Bytes2Type?10 +QtQuick.QSGGeometry.Type.Bytes3Type?10 +QtQuick.QSGGeometry.Type.Bytes4Type?10 +QtQuick.QSGGeometry.Type.DoubleType?10 +QtQuick.QSGGeometry.DrawingMode?10 +QtQuick.QSGGeometry.DrawingMode.DrawPoints?10 +QtQuick.QSGGeometry.DrawingMode.DrawLines?10 +QtQuick.QSGGeometry.DrawingMode.DrawLineLoop?10 +QtQuick.QSGGeometry.DrawingMode.DrawLineStrip?10 +QtQuick.QSGGeometry.DrawingMode.DrawTriangles?10 +QtQuick.QSGGeometry.DrawingMode.DrawTriangleStrip?10 +QtQuick.QSGGeometry.DrawingMode.DrawTriangleFan?10 +QtQuick.QSGGeometry.AttributeType?10 +QtQuick.QSGGeometry.AttributeType.UnknownAttribute?10 +QtQuick.QSGGeometry.AttributeType.PositionAttribute?10 +QtQuick.QSGGeometry.AttributeType.ColorAttribute?10 +QtQuick.QSGGeometry.AttributeType.TexCoordAttribute?10 +QtQuick.QSGGeometry.AttributeType.TexCoord1Attribute?10 +QtQuick.QSGGeometry.AttributeType.TexCoord2Attribute?10 +QtQuick.QSGGeometry.DataPattern?10 +QtQuick.QSGGeometry.DataPattern.AlwaysUploadPattern?10 +QtQuick.QSGGeometry.DataPattern.StreamPattern?10 +QtQuick.QSGGeometry.DataPattern.DynamicPattern?10 +QtQuick.QSGGeometry.DataPattern.StaticPattern?10 +QtQuick.GL_POINTS?10 +QtQuick.GL_LINES?10 +QtQuick.GL_LINE_LOOP?10 +QtQuick.GL_LINE_STRIP?10 +QtQuick.GL_TRIANGLES?10 +QtQuick.GL_TRIANGLE_STRIP?10 +QtQuick.GL_TRIANGLE_FAN?10 +QtQuick.GL_BYTE?10 +QtQuick.GL_DOUBLE?10 +QtQuick.GL_FLOAT?10 +QtQuick.GL_INT?10 +QtQuick.QSGGeometry?1(QSGGeometry.AttributeSet, int, int indexCount=0, int indexType=GL_UNSIGNED_SHORT) +QtQuick.QSGGeometry.__init__?1(self, QSGGeometry.AttributeSet, int, int indexCount=0, int indexType=GL_UNSIGNED_SHORT) +QtQuick.QSGGeometry.defaultAttributes_Point2D?4() -> QSGGeometry.AttributeSet +QtQuick.QSGGeometry.defaultAttributes_TexturedPoint2D?4() -> QSGGeometry.AttributeSet +QtQuick.QSGGeometry.defaultAttributes_ColoredPoint2D?4() -> QSGGeometry.AttributeSet +QtQuick.QSGGeometry.setDrawingMode?4(int) +QtQuick.QSGGeometry.drawingMode?4() -> int +QtQuick.QSGGeometry.allocate?4(int, int indexCount=0) +QtQuick.QSGGeometry.vertexCount?4() -> int +QtQuick.QSGGeometry.vertexData?4() -> PyQt5.sip.voidptr +QtQuick.QSGGeometry.indexType?4() -> int +QtQuick.QSGGeometry.indexCount?4() -> int +QtQuick.QSGGeometry.indexData?4() -> PyQt5.sip.voidptr +QtQuick.QSGGeometry.attributeCount?4() -> int +QtQuick.QSGGeometry.attributes?4() -> Any +QtQuick.QSGGeometry.sizeOfVertex?4() -> int +QtQuick.QSGGeometry.updateRectGeometry?4(QSGGeometry, QRectF) +QtQuick.QSGGeometry.updateTexturedRectGeometry?4(QSGGeometry, QRectF, QRectF) +QtQuick.QSGGeometry.setIndexDataPattern?4(QSGGeometry.DataPattern) +QtQuick.QSGGeometry.indexDataPattern?4() -> QSGGeometry.DataPattern +QtQuick.QSGGeometry.setVertexDataPattern?4(QSGGeometry.DataPattern) +QtQuick.QSGGeometry.vertexDataPattern?4() -> QSGGeometry.DataPattern +QtQuick.QSGGeometry.markIndexDataDirty?4() +QtQuick.QSGGeometry.markVertexDataDirty?4() +QtQuick.QSGGeometry.lineWidth?4() -> float +QtQuick.QSGGeometry.setLineWidth?4(float) +QtQuick.QSGGeometry.indexDataAsUInt?4() -> Any +QtQuick.QSGGeometry.indexDataAsUShort?4() -> Any +QtQuick.QSGGeometry.vertexDataAsPoint2D?4() -> Any +QtQuick.QSGGeometry.vertexDataAsTexturedPoint2D?4() -> Any +QtQuick.QSGGeometry.vertexDataAsColoredPoint2D?4() -> Any +QtQuick.QSGGeometry.sizeOfIndex?4() -> int +QtQuick.QSGGeometry.updateColoredRectGeometry?4(QSGGeometry, QRectF) +QtQuick.QSGGeometry.Attribute.attributeType?7 +QtQuick.QSGGeometry.Attribute.isVertexCoordinate?7 +QtQuick.QSGGeometry.Attribute.position?7 +QtQuick.QSGGeometry.Attribute.tupleSize?7 +QtQuick.QSGGeometry.Attribute.type?7 +QtQuick.QSGGeometry.Attribute?1() +QtQuick.QSGGeometry.Attribute.__init__?1(self) +QtQuick.QSGGeometry.Attribute?1(QSGGeometry.Attribute) +QtQuick.QSGGeometry.Attribute.__init__?1(self, QSGGeometry.Attribute) +QtQuick.QSGGeometry.Attribute.create?4(int, int, int, bool isPosition=False) -> QSGGeometry.Attribute +QtQuick.QSGGeometry.Attribute.createWithAttributeType?4(int, int, int, QSGGeometry.AttributeType) -> QSGGeometry.Attribute +QtQuick.QSGGeometry.AttributeSet.attributes?7 +QtQuick.QSGGeometry.AttributeSet.count?7 +QtQuick.QSGGeometry.AttributeSet.stride?7 +QtQuick.QSGGeometry.AttributeSet?1(Any, int stride=0) +QtQuick.QSGGeometry.AttributeSet.__init__?1(self, Any, int stride=0) +QtQuick.QSGGeometry.Point2D.x?7 +QtQuick.QSGGeometry.Point2D.y?7 +QtQuick.QSGGeometry.Point2D?1() +QtQuick.QSGGeometry.Point2D.__init__?1(self) +QtQuick.QSGGeometry.Point2D?1(QSGGeometry.Point2D) +QtQuick.QSGGeometry.Point2D.__init__?1(self, QSGGeometry.Point2D) +QtQuick.QSGGeometry.Point2D.set?4(float, float) +QtQuick.QSGGeometry.TexturedPoint2D.tx?7 +QtQuick.QSGGeometry.TexturedPoint2D.ty?7 +QtQuick.QSGGeometry.TexturedPoint2D.x?7 +QtQuick.QSGGeometry.TexturedPoint2D.y?7 +QtQuick.QSGGeometry.TexturedPoint2D?1() +QtQuick.QSGGeometry.TexturedPoint2D.__init__?1(self) +QtQuick.QSGGeometry.TexturedPoint2D?1(QSGGeometry.TexturedPoint2D) +QtQuick.QSGGeometry.TexturedPoint2D.__init__?1(self, QSGGeometry.TexturedPoint2D) +QtQuick.QSGGeometry.TexturedPoint2D.set?4(float, float, float, float) +QtQuick.QSGGeometry.ColoredPoint2D.a?7 +QtQuick.QSGGeometry.ColoredPoint2D.b?7 +QtQuick.QSGGeometry.ColoredPoint2D.g?7 +QtQuick.QSGGeometry.ColoredPoint2D.r?7 +QtQuick.QSGGeometry.ColoredPoint2D.x?7 +QtQuick.QSGGeometry.ColoredPoint2D.y?7 +QtQuick.QSGGeometry.ColoredPoint2D?1() +QtQuick.QSGGeometry.ColoredPoint2D.__init__?1(self) +QtQuick.QSGGeometry.ColoredPoint2D?1(QSGGeometry.ColoredPoint2D) +QtQuick.QSGGeometry.ColoredPoint2D.__init__?1(self, QSGGeometry.ColoredPoint2D) +QtQuick.QSGGeometry.ColoredPoint2D.set?4(float, float, int, int, int, int) +QtQuick.QSGNode.DirtyStateBit?10 +QtQuick.QSGNode.DirtyStateBit.DirtyMatrix?10 +QtQuick.QSGNode.DirtyStateBit.DirtyNodeAdded?10 +QtQuick.QSGNode.DirtyStateBit.DirtyNodeRemoved?10 +QtQuick.QSGNode.DirtyStateBit.DirtyGeometry?10 +QtQuick.QSGNode.DirtyStateBit.DirtyMaterial?10 +QtQuick.QSGNode.DirtyStateBit.DirtyOpacity?10 +QtQuick.QSGNode.Flag?10 +QtQuick.QSGNode.Flag.OwnedByParent?10 +QtQuick.QSGNode.Flag.UsePreprocess?10 +QtQuick.QSGNode.Flag.OwnsGeometry?10 +QtQuick.QSGNode.Flag.OwnsMaterial?10 +QtQuick.QSGNode.Flag.OwnsOpaqueMaterial?10 +QtQuick.QSGNode.NodeType?10 +QtQuick.QSGNode.NodeType.BasicNodeType?10 +QtQuick.QSGNode.NodeType.GeometryNodeType?10 +QtQuick.QSGNode.NodeType.TransformNodeType?10 +QtQuick.QSGNode.NodeType.ClipNodeType?10 +QtQuick.QSGNode.NodeType.OpacityNodeType?10 +QtQuick.QSGNode?1() +QtQuick.QSGNode.__init__?1(self) +QtQuick.QSGNode.parent?4() -> QSGNode +QtQuick.QSGNode.removeChildNode?4(QSGNode) +QtQuick.QSGNode.removeAllChildNodes?4() +QtQuick.QSGNode.prependChildNode?4(QSGNode) +QtQuick.QSGNode.appendChildNode?4(QSGNode) +QtQuick.QSGNode.insertChildNodeBefore?4(QSGNode, QSGNode) +QtQuick.QSGNode.insertChildNodeAfter?4(QSGNode, QSGNode) +QtQuick.QSGNode.childCount?4() -> int +QtQuick.QSGNode.childAtIndex?4(int) -> QSGNode +QtQuick.QSGNode.firstChild?4() -> QSGNode +QtQuick.QSGNode.lastChild?4() -> QSGNode +QtQuick.QSGNode.nextSibling?4() -> QSGNode +QtQuick.QSGNode.previousSibling?4() -> QSGNode +QtQuick.QSGNode.type?4() -> QSGNode.NodeType +QtQuick.QSGNode.markDirty?4(QSGNode.DirtyState) +QtQuick.QSGNode.isSubtreeBlocked?4() -> bool +QtQuick.QSGNode.flags?4() -> QSGNode.Flags +QtQuick.QSGNode.setFlag?4(QSGNode.Flag, bool enabled=True) +QtQuick.QSGNode.setFlags?4(QSGNode.Flags, bool enabled=True) +QtQuick.QSGNode.preprocess?4() +QtQuick.QSGBasicGeometryNode.setGeometry?4(QSGGeometry) +QtQuick.QSGBasicGeometryNode.geometry?4() -> QSGGeometry +QtQuick.QSGGeometryNode?1() +QtQuick.QSGGeometryNode.__init__?1(self) +QtQuick.QSGGeometryNode.setMaterial?4(QSGMaterial) +QtQuick.QSGGeometryNode.material?4() -> QSGMaterial +QtQuick.QSGGeometryNode.setOpaqueMaterial?4(QSGMaterial) +QtQuick.QSGGeometryNode.opaqueMaterial?4() -> QSGMaterial +QtQuick.QSGImageNode.TextureCoordinatesTransformFlag?10 +QtQuick.QSGImageNode.TextureCoordinatesTransformFlag.NoTransform?10 +QtQuick.QSGImageNode.TextureCoordinatesTransformFlag.MirrorHorizontally?10 +QtQuick.QSGImageNode.TextureCoordinatesTransformFlag.MirrorVertically?10 +QtQuick.QSGImageNode.setRect?4(QRectF) +QtQuick.QSGImageNode.setRect?4(float, float, float, float) +QtQuick.QSGImageNode.rect?4() -> QRectF +QtQuick.QSGImageNode.setSourceRect?4(QRectF) +QtQuick.QSGImageNode.setSourceRect?4(float, float, float, float) +QtQuick.QSGImageNode.sourceRect?4() -> QRectF +QtQuick.QSGImageNode.setTexture?4(QSGTexture) +QtQuick.QSGImageNode.texture?4() -> QSGTexture +QtQuick.QSGImageNode.setFiltering?4(QSGTexture.Filtering) +QtQuick.QSGImageNode.filtering?4() -> QSGTexture.Filtering +QtQuick.QSGImageNode.setMipmapFiltering?4(QSGTexture.Filtering) +QtQuick.QSGImageNode.mipmapFiltering?4() -> QSGTexture.Filtering +QtQuick.QSGImageNode.setTextureCoordinatesTransform?4(QSGImageNode.TextureCoordinatesTransformMode) +QtQuick.QSGImageNode.textureCoordinatesTransform?4() -> QSGImageNode.TextureCoordinatesTransformMode +QtQuick.QSGImageNode.setOwnsTexture?4(bool) +QtQuick.QSGImageNode.ownsTexture?4() -> bool +QtQuick.QSGImageNode.rebuildGeometry?4(QSGGeometry, QSGTexture, QRectF, QRectF, QSGImageNode.TextureCoordinatesTransformMode) +QtQuick.QSGImageNode.TextureCoordinatesTransformMode?1() +QtQuick.QSGImageNode.TextureCoordinatesTransformMode.__init__?1(self) +QtQuick.QSGImageNode.TextureCoordinatesTransformMode?1(int) +QtQuick.QSGImageNode.TextureCoordinatesTransformMode.__init__?1(self, int) +QtQuick.QSGImageNode.TextureCoordinatesTransformMode?1(QSGImageNode.TextureCoordinatesTransformMode) +QtQuick.QSGImageNode.TextureCoordinatesTransformMode.__init__?1(self, QSGImageNode.TextureCoordinatesTransformMode) +QtQuick.QSGMaterialShader?1() +QtQuick.QSGMaterialShader.__init__?1(self) +QtQuick.QSGMaterialShader.activate?4() +QtQuick.QSGMaterialShader.deactivate?4() +QtQuick.QSGMaterialShader.updateState?4(QSGMaterialShader.RenderState, QSGMaterial, QSGMaterial) +QtQuick.QSGMaterialShader.attributeNames?4() -> Any +QtQuick.QSGMaterialShader.program?4() -> QOpenGLShaderProgram +QtQuick.QSGMaterialShader.compile?4() +QtQuick.QSGMaterialShader.initialize?4() +QtQuick.QSGMaterialShader.vertexShader?4() -> str +QtQuick.QSGMaterialShader.fragmentShader?4() -> str +QtQuick.QSGMaterialShader.setShaderSourceFile?4(QOpenGLShader.ShaderType, QString) +QtQuick.QSGMaterialShader.setShaderSourceFiles?4(QOpenGLShader.ShaderType, QStringList) +QtQuick.QSGMaterialShader.RenderState.DirtyState?10 +QtQuick.QSGMaterialShader.RenderState.DirtyState.DirtyMatrix?10 +QtQuick.QSGMaterialShader.RenderState.DirtyState.DirtyOpacity?10 +QtQuick.QSGMaterialShader.RenderState.DirtyState.DirtyCachedMaterialData?10 +QtQuick.QSGMaterialShader.RenderState.DirtyState.DirtyAll?10 +QtQuick.QSGMaterialShader.RenderState?1() +QtQuick.QSGMaterialShader.RenderState.__init__?1(self) +QtQuick.QSGMaterialShader.RenderState?1(QSGMaterialShader.RenderState) +QtQuick.QSGMaterialShader.RenderState.__init__?1(self, QSGMaterialShader.RenderState) +QtQuick.QSGMaterialShader.RenderState.dirtyStates?4() -> QSGMaterialShader.RenderState.DirtyStates +QtQuick.QSGMaterialShader.RenderState.isMatrixDirty?4() -> bool +QtQuick.QSGMaterialShader.RenderState.isOpacityDirty?4() -> bool +QtQuick.QSGMaterialShader.RenderState.opacity?4() -> float +QtQuick.QSGMaterialShader.RenderState.combinedMatrix?4() -> QMatrix4x4 +QtQuick.QSGMaterialShader.RenderState.modelViewMatrix?4() -> QMatrix4x4 +QtQuick.QSGMaterialShader.RenderState.viewportRect?4() -> QRect +QtQuick.QSGMaterialShader.RenderState.deviceRect?4() -> QRect +QtQuick.QSGMaterialShader.RenderState.determinant?4() -> float +QtQuick.QSGMaterialShader.RenderState.context?4() -> QOpenGLContext +QtQuick.QSGMaterialShader.RenderState.projectionMatrix?4() -> QMatrix4x4 +QtQuick.QSGMaterialShader.RenderState.devicePixelRatio?4() -> float +QtQuick.QSGMaterialShader.RenderState.isCachedMaterialDataDirty?4() -> bool +QtQuick.QSGMaterialShader.RenderState.DirtyStates?1() +QtQuick.QSGMaterialShader.RenderState.DirtyStates.__init__?1(self) +QtQuick.QSGMaterialShader.RenderState.DirtyStates?1(int) +QtQuick.QSGMaterialShader.RenderState.DirtyStates.__init__?1(self, int) +QtQuick.QSGMaterialShader.RenderState.DirtyStates?1(QSGMaterialShader.RenderState.DirtyStates) +QtQuick.QSGMaterialShader.RenderState.DirtyStates.__init__?1(self, QSGMaterialShader.RenderState.DirtyStates) +QtQuick.QSGMaterialType?1() +QtQuick.QSGMaterialType.__init__?1(self) +QtQuick.QSGMaterialType?1(QSGMaterialType) +QtQuick.QSGMaterialType.__init__?1(self, QSGMaterialType) +QtQuick.QSGMaterial.Flags?1() +QtQuick.QSGMaterial.Flags.__init__?1(self) +QtQuick.QSGMaterial.Flags?1(int) +QtQuick.QSGMaterial.Flags.__init__?1(self, int) +QtQuick.QSGMaterial.Flags?1(QSGMaterial.Flags) +QtQuick.QSGMaterial.Flags.__init__?1(self, QSGMaterial.Flags) +QtQuick.QSGMaterialRhiShader.Flag?10 +QtQuick.QSGMaterialRhiShader.Flag.UpdatesGraphicsPipelineState?10 +QtQuick.QSGMaterialRhiShader?1() +QtQuick.QSGMaterialRhiShader.__init__?1(self) +QtQuick.QSGMaterialRhiShader.updateUniformData?4(QSGMaterialRhiShader.RenderState, QSGMaterial, QSGMaterial) -> bool +QtQuick.QSGMaterialRhiShader.updateSampledImage?4(QSGMaterialRhiShader.RenderState, int, QSGMaterial, QSGMaterial) -> QSGTexture +QtQuick.QSGMaterialRhiShader.updateGraphicsPipelineState?4(QSGMaterialRhiShader.RenderState, QSGMaterialRhiShader.GraphicsPipelineState, QSGMaterial, QSGMaterial) -> bool +QtQuick.QSGMaterialRhiShader.flags?4() -> QSGMaterialRhiShader.Flags +QtQuick.QSGMaterialRhiShader.setFlag?4(QSGMaterialRhiShader.Flags, bool on=True) +QtQuick.QSGMaterialRhiShader.RenderState?1() +QtQuick.QSGMaterialRhiShader.RenderState.__init__?1(self) +QtQuick.QSGMaterialRhiShader.RenderState?1(QSGMaterialRhiShader.RenderState) +QtQuick.QSGMaterialRhiShader.RenderState.__init__?1(self, QSGMaterialRhiShader.RenderState) +QtQuick.QSGMaterialRhiShader.RenderState.dirtyStates?4() -> QSGMaterialShader.RenderState.DirtyStates +QtQuick.QSGMaterialRhiShader.RenderState.isMatrixDirty?4() -> bool +QtQuick.QSGMaterialRhiShader.RenderState.isOpacityDirty?4() -> bool +QtQuick.QSGMaterialRhiShader.RenderState.opacity?4() -> float +QtQuick.QSGMaterialRhiShader.RenderState.combinedMatrix?4() -> QMatrix4x4 +QtQuick.QSGMaterialRhiShader.RenderState.modelViewMatrix?4() -> QMatrix4x4 +QtQuick.QSGMaterialRhiShader.RenderState.projectionMatrix?4() -> QMatrix4x4 +QtQuick.QSGMaterialRhiShader.RenderState.viewportRect?4() -> QRect +QtQuick.QSGMaterialRhiShader.RenderState.deviceRect?4() -> QRect +QtQuick.QSGMaterialRhiShader.RenderState.determinant?4() -> float +QtQuick.QSGMaterialRhiShader.RenderState.devicePixelRatio?4() -> float +QtQuick.QSGMaterialRhiShader.RenderState.uniformData?4() -> QByteArray +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.CullMode?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.CullMode.CullNone?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.CullMode.CullFront?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.CullMode.CullBack?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent.R?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent.G?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent.B?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent.A?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.Zero?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.One?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.SrcColor?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.OneMinusSrcColor?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.DstColor?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.OneMinusDstColor?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.SrcAlpha?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.OneMinusSrcAlpha?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.DstAlpha?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.OneMinusDstAlpha?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.ConstantColor?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.OneMinusConstantColor?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.ConstantAlpha?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.OneMinusConstantAlpha?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.SrcAlphaSaturate?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.Src1Color?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.OneMinusSrc1Color?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.Src1Alpha?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor.OneMinusSrc1Alpha?10 +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState?1() +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.__init__?1(self) +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState?1(QSGMaterialRhiShader.GraphicsPipelineState) +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.__init__?1(self, QSGMaterialRhiShader.GraphicsPipelineState) +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMask?1() +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMask.__init__?1(self) +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMask?1(int) +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMask.__init__?1(self, int) +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMask?1(QSGMaterialRhiShader.GraphicsPipelineState.ColorMask) +QtQuick.QSGMaterialRhiShader.GraphicsPipelineState.ColorMask.__init__?1(self, QSGMaterialRhiShader.GraphicsPipelineState.ColorMask) +QtQuick.QSGMaterialRhiShader.Flags?1() +QtQuick.QSGMaterialRhiShader.Flags.__init__?1(self) +QtQuick.QSGMaterialRhiShader.Flags?1(int) +QtQuick.QSGMaterialRhiShader.Flags.__init__?1(self, int) +QtQuick.QSGMaterialRhiShader.Flags?1(QSGMaterialRhiShader.Flags) +QtQuick.QSGMaterialRhiShader.Flags.__init__?1(self, QSGMaterialRhiShader.Flags) +QtQuick.QSGNode.Flags?1() +QtQuick.QSGNode.Flags.__init__?1(self) +QtQuick.QSGNode.Flags?1(int) +QtQuick.QSGNode.Flags.__init__?1(self, int) +QtQuick.QSGNode.Flags?1(QSGNode.Flags) +QtQuick.QSGNode.Flags.__init__?1(self, QSGNode.Flags) +QtQuick.QSGNode.DirtyState?1() +QtQuick.QSGNode.DirtyState.__init__?1(self) +QtQuick.QSGNode.DirtyState?1(int) +QtQuick.QSGNode.DirtyState.__init__?1(self, int) +QtQuick.QSGNode.DirtyState?1(QSGNode.DirtyState) +QtQuick.QSGNode.DirtyState.__init__?1(self, QSGNode.DirtyState) +QtQuick.QSGClipNode?1() +QtQuick.QSGClipNode.__init__?1(self) +QtQuick.QSGClipNode.setIsRectangular?4(bool) +QtQuick.QSGClipNode.isRectangular?4() -> bool +QtQuick.QSGClipNode.setClipRect?4(QRectF) +QtQuick.QSGClipNode.clipRect?4() -> QRectF +QtQuick.QSGTransformNode?1() +QtQuick.QSGTransformNode.__init__?1(self) +QtQuick.QSGTransformNode.setMatrix?4(QMatrix4x4) +QtQuick.QSGTransformNode.matrix?4() -> QMatrix4x4 +QtQuick.QSGOpacityNode?1() +QtQuick.QSGOpacityNode.__init__?1(self) +QtQuick.QSGOpacityNode.setOpacity?4(float) +QtQuick.QSGOpacityNode.opacity?4() -> float +QtQuick.QSGRectangleNode.setRect?4(QRectF) +QtQuick.QSGRectangleNode.setRect?4(float, float, float, float) +QtQuick.QSGRectangleNode.rect?4() -> QRectF +QtQuick.QSGRectangleNode.setColor?4(QColor) +QtQuick.QSGRectangleNode.color?4() -> QColor +QtQuick.QSGRendererInterface.ShaderSourceType?10 +QtQuick.QSGRendererInterface.ShaderSourceType.ShaderSourceString?10 +QtQuick.QSGRendererInterface.ShaderSourceType.ShaderSourceFile?10 +QtQuick.QSGRendererInterface.ShaderSourceType.ShaderByteCode?10 +QtQuick.QSGRendererInterface.ShaderCompilationType?10 +QtQuick.QSGRendererInterface.ShaderCompilationType.RuntimeCompilation?10 +QtQuick.QSGRendererInterface.ShaderCompilationType.OfflineCompilation?10 +QtQuick.QSGRendererInterface.ShaderType?10 +QtQuick.QSGRendererInterface.ShaderType.UnknownShadingLanguage?10 +QtQuick.QSGRendererInterface.ShaderType.GLSL?10 +QtQuick.QSGRendererInterface.ShaderType.HLSL?10 +QtQuick.QSGRendererInterface.ShaderType.RhiShader?10 +QtQuick.QSGRendererInterface.Resource?10 +QtQuick.QSGRendererInterface.Resource.DeviceResource?10 +QtQuick.QSGRendererInterface.Resource.CommandQueueResource?10 +QtQuick.QSGRendererInterface.Resource.CommandListResource?10 +QtQuick.QSGRendererInterface.Resource.PainterResource?10 +QtQuick.QSGRendererInterface.Resource.RhiResource?10 +QtQuick.QSGRendererInterface.Resource.PhysicalDeviceResource?10 +QtQuick.QSGRendererInterface.Resource.OpenGLContextResource?10 +QtQuick.QSGRendererInterface.Resource.DeviceContextResource?10 +QtQuick.QSGRendererInterface.Resource.CommandEncoderResource?10 +QtQuick.QSGRendererInterface.Resource.VulkanInstanceResource?10 +QtQuick.QSGRendererInterface.Resource.RenderPassResource?10 +QtQuick.QSGRendererInterface.GraphicsApi?10 +QtQuick.QSGRendererInterface.GraphicsApi.Unknown?10 +QtQuick.QSGRendererInterface.GraphicsApi.Software?10 +QtQuick.QSGRendererInterface.GraphicsApi.OpenGL?10 +QtQuick.QSGRendererInterface.GraphicsApi.Direct3D12?10 +QtQuick.QSGRendererInterface.GraphicsApi.OpenVG?10 +QtQuick.QSGRendererInterface.GraphicsApi.OpenGLRhi?10 +QtQuick.QSGRendererInterface.GraphicsApi.Direct3D11Rhi?10 +QtQuick.QSGRendererInterface.GraphicsApi.VulkanRhi?10 +QtQuick.QSGRendererInterface.GraphicsApi.MetalRhi?10 +QtQuick.QSGRendererInterface.GraphicsApi.NullRhi?10 +QtQuick.QSGRendererInterface.graphicsApi?4() -> QSGRendererInterface.GraphicsApi +QtQuick.QSGRendererInterface.getResource?4(QQuickWindow, QSGRendererInterface.Resource) -> PyQt5.sip.voidptr +QtQuick.QSGRendererInterface.getResource?4(QQuickWindow, str) -> PyQt5.sip.voidptr +QtQuick.QSGRendererInterface.shaderType?4() -> QSGRendererInterface.ShaderType +QtQuick.QSGRendererInterface.shaderCompilationType?4() -> QSGRendererInterface.ShaderCompilationTypes +QtQuick.QSGRendererInterface.shaderSourceType?4() -> QSGRendererInterface.ShaderSourceTypes +QtQuick.QSGRendererInterface.isApiRhiBased?4(QSGRendererInterface.GraphicsApi) -> bool +QtQuick.QSGRendererInterface.ShaderCompilationTypes?1() +QtQuick.QSGRendererInterface.ShaderCompilationTypes.__init__?1(self) +QtQuick.QSGRendererInterface.ShaderCompilationTypes?1(int) +QtQuick.QSGRendererInterface.ShaderCompilationTypes.__init__?1(self, int) +QtQuick.QSGRendererInterface.ShaderCompilationTypes?1(QSGRendererInterface.ShaderCompilationTypes) +QtQuick.QSGRendererInterface.ShaderCompilationTypes.__init__?1(self, QSGRendererInterface.ShaderCompilationTypes) +QtQuick.QSGRendererInterface.ShaderSourceTypes?1() +QtQuick.QSGRendererInterface.ShaderSourceTypes.__init__?1(self) +QtQuick.QSGRendererInterface.ShaderSourceTypes?1(int) +QtQuick.QSGRendererInterface.ShaderSourceTypes.__init__?1(self, int) +QtQuick.QSGRendererInterface.ShaderSourceTypes?1(QSGRendererInterface.ShaderSourceTypes) +QtQuick.QSGRendererInterface.ShaderSourceTypes.__init__?1(self, QSGRendererInterface.ShaderSourceTypes) +QtQuick.QSGRenderNode.RenderingFlag?10 +QtQuick.QSGRenderNode.RenderingFlag.BoundedRectRendering?10 +QtQuick.QSGRenderNode.RenderingFlag.DepthAwareRendering?10 +QtQuick.QSGRenderNode.RenderingFlag.OpaqueRendering?10 +QtQuick.QSGRenderNode.StateFlag?10 +QtQuick.QSGRenderNode.StateFlag.DepthState?10 +QtQuick.QSGRenderNode.StateFlag.StencilState?10 +QtQuick.QSGRenderNode.StateFlag.ScissorState?10 +QtQuick.QSGRenderNode.StateFlag.ColorState?10 +QtQuick.QSGRenderNode.StateFlag.BlendState?10 +QtQuick.QSGRenderNode.StateFlag.CullState?10 +QtQuick.QSGRenderNode.StateFlag.ViewportState?10 +QtQuick.QSGRenderNode.StateFlag.RenderTargetState?10 +QtQuick.QSGRenderNode?1() +QtQuick.QSGRenderNode.__init__?1(self) +QtQuick.QSGRenderNode.changedStates?4() -> QSGRenderNode.StateFlags +QtQuick.QSGRenderNode.render?4(QSGRenderNode.RenderState) +QtQuick.QSGRenderNode.releaseResources?4() +QtQuick.QSGRenderNode.flags?4() -> QSGRenderNode.RenderingFlags +QtQuick.QSGRenderNode.rect?4() -> QRectF +QtQuick.QSGRenderNode.matrix?4() -> QMatrix4x4 +QtQuick.QSGRenderNode.clipList?4() -> QSGClipNode +QtQuick.QSGRenderNode.inheritedOpacity?4() -> float +QtQuick.QSGRenderNode.StateFlags?1() +QtQuick.QSGRenderNode.StateFlags.__init__?1(self) +QtQuick.QSGRenderNode.StateFlags?1(int) +QtQuick.QSGRenderNode.StateFlags.__init__?1(self, int) +QtQuick.QSGRenderNode.StateFlags?1(QSGRenderNode.StateFlags) +QtQuick.QSGRenderNode.StateFlags.__init__?1(self, QSGRenderNode.StateFlags) +QtQuick.QSGRenderNode.RenderingFlags?1() +QtQuick.QSGRenderNode.RenderingFlags.__init__?1(self) +QtQuick.QSGRenderNode.RenderingFlags?1(int) +QtQuick.QSGRenderNode.RenderingFlags.__init__?1(self, int) +QtQuick.QSGRenderNode.RenderingFlags?1(QSGRenderNode.RenderingFlags) +QtQuick.QSGRenderNode.RenderingFlags.__init__?1(self, QSGRenderNode.RenderingFlags) +QtQuick.QSGRenderNode.RenderState.projectionMatrix?4() -> QMatrix4x4 +QtQuick.QSGRenderNode.RenderState.scissorRect?4() -> QRect +QtQuick.QSGRenderNode.RenderState.scissorEnabled?4() -> bool +QtQuick.QSGRenderNode.RenderState.stencilValue?4() -> int +QtQuick.QSGRenderNode.RenderState.stencilEnabled?4() -> bool +QtQuick.QSGRenderNode.RenderState.clipRegion?4() -> QRegion +QtQuick.QSGRenderNode.RenderState.get?4(str) -> PyQt5.sip.voidptr +QtQuick.QSGSimpleRectNode?1(QRectF, QColor) +QtQuick.QSGSimpleRectNode.__init__?1(self, QRectF, QColor) +QtQuick.QSGSimpleRectNode?1() +QtQuick.QSGSimpleRectNode.__init__?1(self) +QtQuick.QSGSimpleRectNode.setRect?4(QRectF) +QtQuick.QSGSimpleRectNode.setRect?4(float, float, float, float) +QtQuick.QSGSimpleRectNode.rect?4() -> QRectF +QtQuick.QSGSimpleRectNode.setColor?4(QColor) +QtQuick.QSGSimpleRectNode.color?4() -> QColor +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformFlag?10 +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformFlag.NoTransform?10 +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformFlag.MirrorHorizontally?10 +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformFlag.MirrorVertically?10 +QtQuick.QSGSimpleTextureNode?1() +QtQuick.QSGSimpleTextureNode.__init__?1(self) +QtQuick.QSGSimpleTextureNode.setRect?4(QRectF) +QtQuick.QSGSimpleTextureNode.setRect?4(float, float, float, float) +QtQuick.QSGSimpleTextureNode.rect?4() -> QRectF +QtQuick.QSGSimpleTextureNode.setTexture?4(QSGTexture) +QtQuick.QSGSimpleTextureNode.texture?4() -> QSGTexture +QtQuick.QSGSimpleTextureNode.setFiltering?4(QSGTexture.Filtering) +QtQuick.QSGSimpleTextureNode.filtering?4() -> QSGTexture.Filtering +QtQuick.QSGSimpleTextureNode.setTextureCoordinatesTransform?4(QSGSimpleTextureNode.TextureCoordinatesTransformMode) +QtQuick.QSGSimpleTextureNode.textureCoordinatesTransform?4() -> QSGSimpleTextureNode.TextureCoordinatesTransformMode +QtQuick.QSGSimpleTextureNode.setOwnsTexture?4(bool) +QtQuick.QSGSimpleTextureNode.ownsTexture?4() -> bool +QtQuick.QSGSimpleTextureNode.setSourceRect?4(QRectF) +QtQuick.QSGSimpleTextureNode.setSourceRect?4(float, float, float, float) +QtQuick.QSGSimpleTextureNode.sourceRect?4() -> QRectF +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformMode?1() +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformMode.__init__?1(self) +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformMode?1(int) +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformMode.__init__?1(self, int) +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformMode?1(QSGSimpleTextureNode.TextureCoordinatesTransformMode) +QtQuick.QSGSimpleTextureNode.TextureCoordinatesTransformMode.__init__?1(self, QSGSimpleTextureNode.TextureCoordinatesTransformMode) +QtQuick.QSGTexture.AnisotropyLevel?10 +QtQuick.QSGTexture.AnisotropyLevel.AnisotropyNone?10 +QtQuick.QSGTexture.AnisotropyLevel.Anisotropy2x?10 +QtQuick.QSGTexture.AnisotropyLevel.Anisotropy4x?10 +QtQuick.QSGTexture.AnisotropyLevel.Anisotropy8x?10 +QtQuick.QSGTexture.AnisotropyLevel.Anisotropy16x?10 +QtQuick.QSGTexture.Filtering?10 +QtQuick.QSGTexture.Filtering.None_?10 +QtQuick.QSGTexture.Filtering.Nearest?10 +QtQuick.QSGTexture.Filtering.Linear?10 +QtQuick.QSGTexture.WrapMode?10 +QtQuick.QSGTexture.WrapMode.Repeat?10 +QtQuick.QSGTexture.WrapMode.ClampToEdge?10 +QtQuick.QSGTexture.WrapMode.MirroredRepeat?10 +QtQuick.QSGTexture?1() +QtQuick.QSGTexture.__init__?1(self) +QtQuick.QSGTexture.textureId?4() -> int +QtQuick.QSGTexture.textureSize?4() -> QSize +QtQuick.QSGTexture.hasAlphaChannel?4() -> bool +QtQuick.QSGTexture.hasMipmaps?4() -> bool +QtQuick.QSGTexture.normalizedTextureSubRect?4() -> QRectF +QtQuick.QSGTexture.isAtlasTexture?4() -> bool +QtQuick.QSGTexture.removedFromAtlas?4() -> QSGTexture +QtQuick.QSGTexture.bind?4() +QtQuick.QSGTexture.updateBindOptions?4(bool force=False) +QtQuick.QSGTexture.setMipmapFiltering?4(QSGTexture.Filtering) +QtQuick.QSGTexture.mipmapFiltering?4() -> QSGTexture.Filtering +QtQuick.QSGTexture.setFiltering?4(QSGTexture.Filtering) +QtQuick.QSGTexture.filtering?4() -> QSGTexture.Filtering +QtQuick.QSGTexture.setHorizontalWrapMode?4(QSGTexture.WrapMode) +QtQuick.QSGTexture.horizontalWrapMode?4() -> QSGTexture.WrapMode +QtQuick.QSGTexture.setVerticalWrapMode?4(QSGTexture.WrapMode) +QtQuick.QSGTexture.verticalWrapMode?4() -> QSGTexture.WrapMode +QtQuick.QSGTexture.convertToNormalizedSourceRect?4(QRectF) -> QRectF +QtQuick.QSGTexture.setAnisotropyLevel?4(QSGTexture.AnisotropyLevel) +QtQuick.QSGTexture.anisotropyLevel?4() -> QSGTexture.AnisotropyLevel +QtQuick.QSGTexture.comparisonKey?4() -> int +QtQuick.QSGTexture.nativeTexture?4() -> QSGTexture.NativeTexture +QtQuick.QSGTexture.NativeTexture.layout?7 +QtQuick.QSGTexture.NativeTexture.object?7 +QtQuick.QSGTexture.NativeTexture?1() +QtQuick.QSGTexture.NativeTexture.__init__?1(self) +QtQuick.QSGTexture.NativeTexture?1(QSGTexture.NativeTexture) +QtQuick.QSGTexture.NativeTexture.__init__?1(self, QSGTexture.NativeTexture) +QtQuick.QSGDynamicTexture?1() +QtQuick.QSGDynamicTexture.__init__?1(self) +QtQuick.QSGDynamicTexture.updateTexture?4() -> bool +QtQuick.QSGOpaqueTextureMaterial?1() +QtQuick.QSGOpaqueTextureMaterial.__init__?1(self) +QtQuick.QSGOpaqueTextureMaterial.type?4() -> QSGMaterialType +QtQuick.QSGOpaqueTextureMaterial.createShader?4() -> QSGMaterialShader +QtQuick.QSGOpaqueTextureMaterial.compare?4(QSGMaterial) -> int +QtQuick.QSGOpaqueTextureMaterial.setTexture?4(QSGTexture) +QtQuick.QSGOpaqueTextureMaterial.texture?4() -> QSGTexture +QtQuick.QSGOpaqueTextureMaterial.setMipmapFiltering?4(QSGTexture.Filtering) +QtQuick.QSGOpaqueTextureMaterial.mipmapFiltering?4() -> QSGTexture.Filtering +QtQuick.QSGOpaqueTextureMaterial.setFiltering?4(QSGTexture.Filtering) +QtQuick.QSGOpaqueTextureMaterial.filtering?4() -> QSGTexture.Filtering +QtQuick.QSGOpaqueTextureMaterial.setHorizontalWrapMode?4(QSGTexture.WrapMode) +QtQuick.QSGOpaqueTextureMaterial.horizontalWrapMode?4() -> QSGTexture.WrapMode +QtQuick.QSGOpaqueTextureMaterial.setVerticalWrapMode?4(QSGTexture.WrapMode) +QtQuick.QSGOpaqueTextureMaterial.verticalWrapMode?4() -> QSGTexture.WrapMode +QtQuick.QSGOpaqueTextureMaterial.setAnisotropyLevel?4(QSGTexture.AnisotropyLevel) +QtQuick.QSGOpaqueTextureMaterial.anisotropyLevel?4() -> QSGTexture.AnisotropyLevel +QtQuick.QSGTextureMaterial?1() +QtQuick.QSGTextureMaterial.__init__?1(self) +QtQuick.QSGTextureMaterial.type?4() -> QSGMaterialType +QtQuick.QSGTextureMaterial.createShader?4() -> QSGMaterialShader +QtQuick.QSGTextureProvider?1() +QtQuick.QSGTextureProvider.__init__?1(self) +QtQuick.QSGTextureProvider.texture?4() -> QSGTexture +QtQuick.QSGTextureProvider.textureChanged?4() +QtQuick.QSGVertexColorMaterial?1() +QtQuick.QSGVertexColorMaterial.__init__?1(self) +QtQuick.QSGVertexColorMaterial.compare?4(QSGMaterial) -> int +QtQuick.QSGVertexColorMaterial.type?4() -> QSGMaterialType +QtQuick.QSGVertexColorMaterial.createShader?4() -> QSGMaterialShader +QtQuick3D.QQuick3D?1() +QtQuick3D.QQuick3D.__init__?1(self) +QtQuick3D.QQuick3D?1(QQuick3D) +QtQuick3D.QQuick3D.__init__?1(self, QQuick3D) +QtQuick3D.QQuick3D.idealSurfaceFormat?4(int samples=-1) -> QSurfaceFormat +QtQuick3D.QQuick3DObject?1(QQuick3DObject parent=None) +QtQuick3D.QQuick3DObject.__init__?1(self, QQuick3DObject parent=None) +QtQuick3D.QQuick3DObject.state?4() -> QString +QtQuick3D.QQuick3DObject.setState?4(QString) +QtQuick3D.QQuick3DObject.parentItem?4() -> QQuick3DObject +QtQuick3D.QQuick3DObject.setParentItem?4(QQuick3DObject) +QtQuick3D.QQuick3DObject.stateChanged?4() +QtQuick3D.QQuick3DObject.classBegin?4() +QtQuick3D.QQuick3DObject.componentComplete?4() +QtQuick3D.QQuick3DGeometry.PrimitiveType?10 +QtQuick3D.QQuick3DGeometry.PrimitiveType.Unknown?10 +QtQuick3D.QQuick3DGeometry.PrimitiveType.Points?10 +QtQuick3D.QQuick3DGeometry.PrimitiveType.LineStrip?10 +QtQuick3D.QQuick3DGeometry.PrimitiveType.Lines?10 +QtQuick3D.QQuick3DGeometry.PrimitiveType.TriangleStrip?10 +QtQuick3D.QQuick3DGeometry.PrimitiveType.TriangleFan?10 +QtQuick3D.QQuick3DGeometry.PrimitiveType.Triangles?10 +QtQuick3D.QQuick3DGeometry?1(QQuick3DObject parent=None) +QtQuick3D.QQuick3DGeometry.__init__?1(self, QQuick3DObject parent=None) +QtQuick3D.QQuick3DGeometry.name?4() -> QString +QtQuick3D.QQuick3DGeometry.vertexBuffer?4() -> QByteArray +QtQuick3D.QQuick3DGeometry.indexBuffer?4() -> QByteArray +QtQuick3D.QQuick3DGeometry.attributeCount?4() -> int +QtQuick3D.QQuick3DGeometry.attribute?4(int) -> QQuick3DGeometry.Attribute +QtQuick3D.QQuick3DGeometry.primitiveType?4() -> QQuick3DGeometry.PrimitiveType +QtQuick3D.QQuick3DGeometry.boundsMin?4() -> QVector3D +QtQuick3D.QQuick3DGeometry.boundsMax?4() -> QVector3D +QtQuick3D.QQuick3DGeometry.stride?4() -> int +QtQuick3D.QQuick3DGeometry.setVertexData?4(QByteArray) +QtQuick3D.QQuick3DGeometry.setIndexData?4(QByteArray) +QtQuick3D.QQuick3DGeometry.setStride?4(int) +QtQuick3D.QQuick3DGeometry.setBounds?4(QVector3D, QVector3D) +QtQuick3D.QQuick3DGeometry.setPrimitiveType?4(QQuick3DGeometry.PrimitiveType) +QtQuick3D.QQuick3DGeometry.addAttribute?4(QQuick3DGeometry.Attribute.Semantic, int, QQuick3DGeometry.Attribute.ComponentType) +QtQuick3D.QQuick3DGeometry.addAttribute?4(QQuick3DGeometry.Attribute) +QtQuick3D.QQuick3DGeometry.clear?4() +QtQuick3D.QQuick3DGeometry.setName?4(QString) +QtQuick3D.QQuick3DGeometry.nameChanged?4() +QtQuick3D.QQuick3DGeometry.Attribute.ComponentType?10 +QtQuick3D.QQuick3DGeometry.Attribute.ComponentType.DefaultType?10 +QtQuick3D.QQuick3DGeometry.Attribute.ComponentType.U16Type?10 +QtQuick3D.QQuick3DGeometry.Attribute.ComponentType.U32Type?10 +QtQuick3D.QQuick3DGeometry.Attribute.ComponentType.F32Type?10 +QtQuick3D.QQuick3DGeometry.Attribute.Semantic?10 +QtQuick3D.QQuick3DGeometry.Attribute.Semantic.UnknownSemantic?10 +QtQuick3D.QQuick3DGeometry.Attribute.Semantic.IndexSemantic?10 +QtQuick3D.QQuick3DGeometry.Attribute.Semantic.PositionSemantic?10 +QtQuick3D.QQuick3DGeometry.Attribute.Semantic.NormalSemantic?10 +QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TexCoordSemantic?10 +QtQuick3D.QQuick3DGeometry.Attribute.Semantic.TangentSemantic?10 +QtQuick3D.QQuick3DGeometry.Attribute.Semantic.BinormalSemantic?10 +QtQuick3D.QQuick3DGeometry.Attribute.componentType?7 +QtQuick3D.QQuick3DGeometry.Attribute.offset?7 +QtQuick3D.QQuick3DGeometry.Attribute.semantic?7 +QtQuick3D.QQuick3DGeometry.Attribute?1() +QtQuick3D.QQuick3DGeometry.Attribute.__init__?1(self) +QtQuick3D.QQuick3DGeometry.Attribute?1(QQuick3DGeometry.Attribute) +QtQuick3D.QQuick3DGeometry.Attribute.__init__?1(self, QQuick3DGeometry.Attribute) +QtQuickWidgets.QQuickWidget.Status?10 +QtQuickWidgets.QQuickWidget.Status.Null?10 +QtQuickWidgets.QQuickWidget.Status.Ready?10 +QtQuickWidgets.QQuickWidget.Status.Loading?10 +QtQuickWidgets.QQuickWidget.Status.Error?10 +QtQuickWidgets.QQuickWidget.ResizeMode?10 +QtQuickWidgets.QQuickWidget.ResizeMode.SizeViewToRootObject?10 +QtQuickWidgets.QQuickWidget.ResizeMode.SizeRootObjectToView?10 +QtQuickWidgets.QQuickWidget?1(QWidget parent=None) +QtQuickWidgets.QQuickWidget.__init__?1(self, QWidget parent=None) +QtQuickWidgets.QQuickWidget?1(QQmlEngine, QWidget) +QtQuickWidgets.QQuickWidget.__init__?1(self, QQmlEngine, QWidget) +QtQuickWidgets.QQuickWidget?1(QUrl, QWidget parent=None) +QtQuickWidgets.QQuickWidget.__init__?1(self, QUrl, QWidget parent=None) +QtQuickWidgets.QQuickWidget.source?4() -> QUrl +QtQuickWidgets.QQuickWidget.engine?4() -> QQmlEngine +QtQuickWidgets.QQuickWidget.rootContext?4() -> QQmlContext +QtQuickWidgets.QQuickWidget.rootObject?4() -> QQuickItem +QtQuickWidgets.QQuickWidget.resizeMode?4() -> QQuickWidget.ResizeMode +QtQuickWidgets.QQuickWidget.setResizeMode?4(QQuickWidget.ResizeMode) +QtQuickWidgets.QQuickWidget.status?4() -> QQuickWidget.Status +QtQuickWidgets.QQuickWidget.errors?4() -> unknown-type +QtQuickWidgets.QQuickWidget.sizeHint?4() -> QSize +QtQuickWidgets.QQuickWidget.initialSize?4() -> QSize +QtQuickWidgets.QQuickWidget.setFormat?4(QSurfaceFormat) +QtQuickWidgets.QQuickWidget.format?4() -> QSurfaceFormat +QtQuickWidgets.QQuickWidget.setSource?4(QUrl) +QtQuickWidgets.QQuickWidget.statusChanged?4(QQuickWidget.Status) +QtQuickWidgets.QQuickWidget.sceneGraphError?4(QQuickWindow.SceneGraphError, QString) +QtQuickWidgets.QQuickWidget.resizeEvent?4(QResizeEvent) +QtQuickWidgets.QQuickWidget.timerEvent?4(QTimerEvent) +QtQuickWidgets.QQuickWidget.keyPressEvent?4(QKeyEvent) +QtQuickWidgets.QQuickWidget.keyReleaseEvent?4(QKeyEvent) +QtQuickWidgets.QQuickWidget.mousePressEvent?4(QMouseEvent) +QtQuickWidgets.QQuickWidget.mouseReleaseEvent?4(QMouseEvent) +QtQuickWidgets.QQuickWidget.mouseMoveEvent?4(QMouseEvent) +QtQuickWidgets.QQuickWidget.mouseDoubleClickEvent?4(QMouseEvent) +QtQuickWidgets.QQuickWidget.showEvent?4(QShowEvent) +QtQuickWidgets.QQuickWidget.hideEvent?4(QHideEvent) +QtQuickWidgets.QQuickWidget.wheelEvent?4(QWheelEvent) +QtQuickWidgets.QQuickWidget.event?4(QEvent) -> bool +QtQuickWidgets.QQuickWidget.focusInEvent?4(QFocusEvent) +QtQuickWidgets.QQuickWidget.focusOutEvent?4(QFocusEvent) +QtQuickWidgets.QQuickWidget.dragEnterEvent?4(QDragEnterEvent) +QtQuickWidgets.QQuickWidget.dragMoveEvent?4(QDragMoveEvent) +QtQuickWidgets.QQuickWidget.dragLeaveEvent?4(QDragLeaveEvent) +QtQuickWidgets.QQuickWidget.dropEvent?4(QDropEvent) +QtQuickWidgets.QQuickWidget.paintEvent?4(QPaintEvent) +QtQuickWidgets.QQuickWidget.grabFramebuffer?4() -> QImage +QtQuickWidgets.QQuickWidget.setClearColor?4(QColor) +QtQuickWidgets.QQuickWidget.quickWindow?4() -> QQuickWindow +QtQuickWidgets.QQuickWidget.focusNextPrevChild?4(bool) -> bool +QtRemoteObjects.QAbstractItemModelReplica.selectionModel?4() -> QItemSelectionModel +QtRemoteObjects.QAbstractItemModelReplica.data?4(QModelIndex, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtRemoteObjects.QAbstractItemModelReplica.setData?4(QModelIndex, QVariant, int role=Qt.ItemDataRole.EditRole) -> bool +QtRemoteObjects.QAbstractItemModelReplica.parent?4(QModelIndex) -> QModelIndex +QtRemoteObjects.QAbstractItemModelReplica.index?4(int, int, QModelIndex parent=QModelIndex()) -> QModelIndex +QtRemoteObjects.QAbstractItemModelReplica.hasChildren?4(QModelIndex parent=QModelIndex()) -> bool +QtRemoteObjects.QAbstractItemModelReplica.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtRemoteObjects.QAbstractItemModelReplica.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtRemoteObjects.QAbstractItemModelReplica.headerData?4(int, Qt.Orientation, int) -> QVariant +QtRemoteObjects.QAbstractItemModelReplica.flags?4(QModelIndex) -> Qt.ItemFlags +QtRemoteObjects.QAbstractItemModelReplica.availableRoles?4() -> unknown-type +QtRemoteObjects.QAbstractItemModelReplica.roleNames?4() -> unknown-type +QtRemoteObjects.QAbstractItemModelReplica.isInitialized?4() -> bool +QtRemoteObjects.QAbstractItemModelReplica.hasData?4(QModelIndex, int) -> bool +QtRemoteObjects.QAbstractItemModelReplica.rootCacheSize?4() -> int +QtRemoteObjects.QAbstractItemModelReplica.setRootCacheSize?4(int) +QtRemoteObjects.QAbstractItemModelReplica.initialized?4() +QtRemoteObjects.QRemoteObjectReplica.State?10 +QtRemoteObjects.QRemoteObjectReplica.State.Uninitialized?10 +QtRemoteObjects.QRemoteObjectReplica.State.Default?10 +QtRemoteObjects.QRemoteObjectReplica.State.Valid?10 +QtRemoteObjects.QRemoteObjectReplica.State.Suspect?10 +QtRemoteObjects.QRemoteObjectReplica.State.SignatureMismatch?10 +QtRemoteObjects.QRemoteObjectReplica.isReplicaValid?4() -> bool +QtRemoteObjects.QRemoteObjectReplica.waitForSource?4(int timeout=30000) -> bool +QtRemoteObjects.QRemoteObjectReplica.isInitialized?4() -> bool +QtRemoteObjects.QRemoteObjectReplica.state?4() -> QRemoteObjectReplica.State +QtRemoteObjects.QRemoteObjectReplica.node?4() -> QRemoteObjectNode +QtRemoteObjects.QRemoteObjectReplica.setNode?4(QRemoteObjectNode) +QtRemoteObjects.QRemoteObjectReplica.initialized?4() +QtRemoteObjects.QRemoteObjectReplica.stateChanged?4(QRemoteObjectReplica.State, QRemoteObjectReplica.State) +QtRemoteObjects.QRemoteObjectReplica.notified?4() +QtRemoteObjects.QRemoteObjectAbstractPersistedStore?1(QObject parent=None) +QtRemoteObjects.QRemoteObjectAbstractPersistedStore.__init__?1(self, QObject parent=None) +QtRemoteObjects.QRemoteObjectAbstractPersistedStore.saveProperties?4(QString, QByteArray, unknown-type) +QtRemoteObjects.QRemoteObjectAbstractPersistedStore.restoreProperties?4(QString, QByteArray) -> unknown-type +QtRemoteObjects.QRemoteObjectNode.ErrorCode?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.NoError?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.RegistryNotAcquired?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.RegistryAlreadyHosted?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.NodeIsNoServer?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.ServerAlreadyCreated?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.UnintendedRegistryHosting?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.OperationNotValidOnClientNode?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.SourceNotRegistered?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.MissingObjectName?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.HostUrlInvalid?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.ProtocolMismatch?10 +QtRemoteObjects.QRemoteObjectNode.ErrorCode.ListenFailed?10 +QtRemoteObjects.QRemoteObjectNode?1(QObject parent=None) +QtRemoteObjects.QRemoteObjectNode.__init__?1(self, QObject parent=None) +QtRemoteObjects.QRemoteObjectNode?1(QUrl, QObject parent=None) +QtRemoteObjects.QRemoteObjectNode.__init__?1(self, QUrl, QObject parent=None) +QtRemoteObjects.QRemoteObjectNode.connectToNode?4(QUrl) -> bool +QtRemoteObjects.QRemoteObjectNode.addClientSideConnection?4(QIODevice) +QtRemoteObjects.QRemoteObjectNode.setName?4(QString) +QtRemoteObjects.QRemoteObjectNode.instances?4(QString) -> QStringList +QtRemoteObjects.QRemoteObjectNode.acquireDynamic?4(QString) -> QRemoteObjectDynamicReplica +QtRemoteObjects.QRemoteObjectNode.acquireModel?4(QString, QtRemoteObjects.InitialAction action=QtRemoteObjects.FetchRootSize, unknown-type rolesHint=[]) -> QAbstractItemModelReplica +QtRemoteObjects.QRemoteObjectNode.registryUrl?4() -> QUrl +QtRemoteObjects.QRemoteObjectNode.setRegistryUrl?4(QUrl) -> bool +QtRemoteObjects.QRemoteObjectNode.waitForRegistry?4(int timeout=30000) -> bool +QtRemoteObjects.QRemoteObjectNode.registry?4() -> QRemoteObjectRegistry +QtRemoteObjects.QRemoteObjectNode.persistedStore?4() -> QRemoteObjectAbstractPersistedStore +QtRemoteObjects.QRemoteObjectNode.setPersistedStore?4(QRemoteObjectAbstractPersistedStore) +QtRemoteObjects.QRemoteObjectNode.lastError?4() -> QRemoteObjectNode.ErrorCode +QtRemoteObjects.QRemoteObjectNode.heartbeatInterval?4() -> int +QtRemoteObjects.QRemoteObjectNode.setHeartbeatInterval?4(int) +QtRemoteObjects.QRemoteObjectNode.remoteObjectAdded?4(unknown-type) +QtRemoteObjects.QRemoteObjectNode.remoteObjectRemoved?4(unknown-type) +QtRemoteObjects.QRemoteObjectNode.error?4(QRemoteObjectNode.ErrorCode) +QtRemoteObjects.QRemoteObjectNode.heartbeatIntervalChanged?4(int) +QtRemoteObjects.QRemoteObjectNode.timerEvent?4(QTimerEvent) +QtRemoteObjects.QRemoteObjectHostBase.AllowedSchemas?10 +QtRemoteObjects.QRemoteObjectHostBase.AllowedSchemas.BuiltInSchemasOnly?10 +QtRemoteObjects.QRemoteObjectHostBase.AllowedSchemas.AllowExternalRegistration?10 +QtRemoteObjects.QRemoteObjectHostBase.setName?4(QString) +QtRemoteObjects.QRemoteObjectHostBase.enableRemoting?4(QObject, QString name='') -> bool +QtRemoteObjects.QRemoteObjectHostBase.enableRemoting?4(QAbstractItemModel, QString, unknown-type, QItemSelectionModel selectionModel=None) -> bool +QtRemoteObjects.QRemoteObjectHostBase.disableRemoting?4(QObject) -> bool +QtRemoteObjects.QRemoteObjectHostBase.addHostSideConnection?4(QIODevice) +QtRemoteObjects.QRemoteObjectHostBase.proxy?4(QUrl, QUrl hostUrl=QUrl()) -> bool +QtRemoteObjects.QRemoteObjectHostBase.reverseProxy?4() -> bool +QtRemoteObjects.QRemoteObjectHost?1(QObject parent=None) +QtRemoteObjects.QRemoteObjectHost.__init__?1(self, QObject parent=None) +QtRemoteObjects.QRemoteObjectHost?1(QUrl, QUrl registryAddress=QUrl(), QRemoteObjectHostBase.AllowedSchemas allowedSchemas=QRemoteObjectHostBase.BuiltInSchemasOnly, QObject parent=None) +QtRemoteObjects.QRemoteObjectHost.__init__?1(self, QUrl, QUrl registryAddress=QUrl(), QRemoteObjectHostBase.AllowedSchemas allowedSchemas=QRemoteObjectHostBase.BuiltInSchemasOnly, QObject parent=None) +QtRemoteObjects.QRemoteObjectHost?1(QUrl, QObject) +QtRemoteObjects.QRemoteObjectHost.__init__?1(self, QUrl, QObject) +QtRemoteObjects.QRemoteObjectHost.hostUrl?4() -> QUrl +QtRemoteObjects.QRemoteObjectHost.setHostUrl?4(QUrl, QRemoteObjectHostBase.AllowedSchemas allowedSchemas=QRemoteObjectHostBase.BuiltInSchemasOnly) -> bool +QtRemoteObjects.QRemoteObjectHost.hostUrlChanged?4() +QtRemoteObjects.QRemoteObjectRegistryHost?1(QUrl registryAddress=QUrl(), QObject parent=None) +QtRemoteObjects.QRemoteObjectRegistryHost.__init__?1(self, QUrl registryAddress=QUrl(), QObject parent=None) +QtRemoteObjects.QRemoteObjectRegistryHost.setRegistryUrl?4(QUrl) -> bool +QtRemoteObjects.QRemoteObjectRegistry.sourceLocations?4() -> unknown-type +QtRemoteObjects.QRemoteObjectRegistry.remoteObjectAdded?4(unknown-type) +QtRemoteObjects.QRemoteObjectRegistry.remoteObjectRemoved?4(unknown-type) +QtRemoteObjects.QRemoteObjectSourceLocationInfo.hostUrl?7 +QtRemoteObjects.QRemoteObjectSourceLocationInfo.typeName?7 +QtRemoteObjects.QRemoteObjectSourceLocationInfo?1() +QtRemoteObjects.QRemoteObjectSourceLocationInfo.__init__?1(self) +QtRemoteObjects.QRemoteObjectSourceLocationInfo?1(QString, QUrl) +QtRemoteObjects.QRemoteObjectSourceLocationInfo.__init__?1(self, QString, QUrl) +QtRemoteObjects.QRemoteObjectSourceLocationInfo?1(QRemoteObjectSourceLocationInfo) +QtRemoteObjects.QRemoteObjectSourceLocationInfo.__init__?1(self, QRemoteObjectSourceLocationInfo) +QtRemoteObjects.QtRemoteObjects.InitialAction?10 +QtRemoteObjects.QtRemoteObjects.InitialAction.FetchRootSize?10 +QtRemoteObjects.QtRemoteObjects.InitialAction.PrefetchData?10 +QtSensors.QSensorReading.timestamp?4() -> int +QtSensors.QSensorReading.setTimestamp?4(int) +QtSensors.QSensorReading.valueCount?4() -> int +QtSensors.QSensorReading.value?4(int) -> QVariant +QtSensors.QAccelerometerReading.x?4() -> float +QtSensors.QAccelerometerReading.setX?4(float) +QtSensors.QAccelerometerReading.y?4() -> float +QtSensors.QAccelerometerReading.setY?4(float) +QtSensors.QAccelerometerReading.z?4() -> float +QtSensors.QAccelerometerReading.setZ?4(float) +QtSensors.QSensorFilter?1() +QtSensors.QSensorFilter.__init__?1(self) +QtSensors.QSensorFilter?1(QSensorFilter) +QtSensors.QSensorFilter.__init__?1(self, QSensorFilter) +QtSensors.QSensorFilter.filter?4(QSensorReading) -> bool +QtSensors.QAccelerometerFilter?1() +QtSensors.QAccelerometerFilter.__init__?1(self) +QtSensors.QAccelerometerFilter?1(QAccelerometerFilter) +QtSensors.QAccelerometerFilter.__init__?1(self, QAccelerometerFilter) +QtSensors.QAccelerometerFilter.filter?4(QAccelerometerReading) -> bool +QtSensors.QSensor.AxesOrientationMode?10 +QtSensors.QSensor.AxesOrientationMode.FixedOrientation?10 +QtSensors.QSensor.AxesOrientationMode.AutomaticOrientation?10 +QtSensors.QSensor.AxesOrientationMode.UserOrientation?10 +QtSensors.QSensor.Feature?10 +QtSensors.QSensor.Feature.Buffering?10 +QtSensors.QSensor.Feature.AlwaysOn?10 +QtSensors.QSensor.Feature.GeoValues?10 +QtSensors.QSensor.Feature.FieldOfView?10 +QtSensors.QSensor.Feature.AccelerationMode?10 +QtSensors.QSensor.Feature.SkipDuplicates?10 +QtSensors.QSensor.Feature.AxesOrientation?10 +QtSensors.QSensor.Feature.PressureSensorTemperature?10 +QtSensors.QSensor?1(QByteArray, QObject parent=None) +QtSensors.QSensor.__init__?1(self, QByteArray, QObject parent=None) +QtSensors.QSensor.identifier?4() -> QByteArray +QtSensors.QSensor.setIdentifier?4(QByteArray) +QtSensors.QSensor.type?4() -> QByteArray +QtSensors.QSensor.connectToBackend?4() -> bool +QtSensors.QSensor.isConnectedToBackend?4() -> bool +QtSensors.QSensor.isBusy?4() -> bool +QtSensors.QSensor.setActive?4(bool) +QtSensors.QSensor.isActive?4() -> bool +QtSensors.QSensor.isAlwaysOn?4() -> bool +QtSensors.QSensor.setAlwaysOn?4(bool) +QtSensors.QSensor.skipDuplicates?4() -> bool +QtSensors.QSensor.setSkipDuplicates?4(bool) +QtSensors.QSensor.availableDataRates?4() -> unknown-type +QtSensors.QSensor.dataRate?4() -> int +QtSensors.QSensor.setDataRate?4(int) +QtSensors.QSensor.outputRanges?4() -> unknown-type +QtSensors.QSensor.outputRange?4() -> int +QtSensors.QSensor.setOutputRange?4(int) +QtSensors.QSensor.description?4() -> QString +QtSensors.QSensor.error?4() -> int +QtSensors.QSensor.addFilter?4(QSensorFilter) +QtSensors.QSensor.removeFilter?4(QSensorFilter) +QtSensors.QSensor.filters?4() -> unknown-type +QtSensors.QSensor.reading?4() -> QSensorReading +QtSensors.QSensor.sensorTypes?4() -> unknown-type +QtSensors.QSensor.sensorsForType?4(QByteArray) -> unknown-type +QtSensors.QSensor.defaultSensorForType?4(QByteArray) -> QByteArray +QtSensors.QSensor.isFeatureSupported?4(QSensor.Feature) -> bool +QtSensors.QSensor.axesOrientationMode?4() -> QSensor.AxesOrientationMode +QtSensors.QSensor.setAxesOrientationMode?4(QSensor.AxesOrientationMode) +QtSensors.QSensor.currentOrientation?4() -> int +QtSensors.QSensor.setCurrentOrientation?4(int) +QtSensors.QSensor.userOrientation?4() -> int +QtSensors.QSensor.setUserOrientation?4(int) +QtSensors.QSensor.maxBufferSize?4() -> int +QtSensors.QSensor.setMaxBufferSize?4(int) +QtSensors.QSensor.efficientBufferSize?4() -> int +QtSensors.QSensor.setEfficientBufferSize?4(int) +QtSensors.QSensor.bufferSize?4() -> int +QtSensors.QSensor.setBufferSize?4(int) +QtSensors.QSensor.start?4() -> bool +QtSensors.QSensor.stop?4() +QtSensors.QSensor.busyChanged?4() +QtSensors.QSensor.activeChanged?4() +QtSensors.QSensor.readingChanged?4() +QtSensors.QSensor.sensorError?4(int) +QtSensors.QSensor.availableSensorsChanged?4() +QtSensors.QSensor.alwaysOnChanged?4() +QtSensors.QSensor.dataRateChanged?4() +QtSensors.QSensor.skipDuplicatesChanged?4(bool) +QtSensors.QSensor.axesOrientationModeChanged?4(QSensor.AxesOrientationMode) +QtSensors.QSensor.currentOrientationChanged?4(int) +QtSensors.QSensor.userOrientationChanged?4(int) +QtSensors.QSensor.maxBufferSizeChanged?4(int) +QtSensors.QSensor.efficientBufferSizeChanged?4(int) +QtSensors.QSensor.bufferSizeChanged?4(int) +QtSensors.QAccelerometer.AccelerationMode?10 +QtSensors.QAccelerometer.AccelerationMode.Combined?10 +QtSensors.QAccelerometer.AccelerationMode.Gravity?10 +QtSensors.QAccelerometer.AccelerationMode.User?10 +QtSensors.QAccelerometer?1(QObject parent=None) +QtSensors.QAccelerometer.__init__?1(self, QObject parent=None) +QtSensors.QAccelerometer.accelerationMode?4() -> QAccelerometer.AccelerationMode +QtSensors.QAccelerometer.setAccelerationMode?4(QAccelerometer.AccelerationMode) +QtSensors.QAccelerometer.reading?4() -> QAccelerometerReading +QtSensors.QAccelerometer.accelerationModeChanged?4(QAccelerometer.AccelerationMode) +QtSensors.QAltimeterReading.altitude?4() -> float +QtSensors.QAltimeterReading.setAltitude?4(float) +QtSensors.QAltimeterFilter?1() +QtSensors.QAltimeterFilter.__init__?1(self) +QtSensors.QAltimeterFilter?1(QAltimeterFilter) +QtSensors.QAltimeterFilter.__init__?1(self, QAltimeterFilter) +QtSensors.QAltimeterFilter.filter?4(QAltimeterReading) -> bool +QtSensors.QAltimeter?1(QObject parent=None) +QtSensors.QAltimeter.__init__?1(self, QObject parent=None) +QtSensors.QAltimeter.reading?4() -> QAltimeterReading +QtSensors.QAmbientLightReading.LightLevel?10 +QtSensors.QAmbientLightReading.LightLevel.Undefined?10 +QtSensors.QAmbientLightReading.LightLevel.Dark?10 +QtSensors.QAmbientLightReading.LightLevel.Twilight?10 +QtSensors.QAmbientLightReading.LightLevel.Light?10 +QtSensors.QAmbientLightReading.LightLevel.Bright?10 +QtSensors.QAmbientLightReading.LightLevel.Sunny?10 +QtSensors.QAmbientLightReading.lightLevel?4() -> QAmbientLightReading.LightLevel +QtSensors.QAmbientLightReading.setLightLevel?4(QAmbientLightReading.LightLevel) +QtSensors.QAmbientLightFilter?1() +QtSensors.QAmbientLightFilter.__init__?1(self) +QtSensors.QAmbientLightFilter?1(QAmbientLightFilter) +QtSensors.QAmbientLightFilter.__init__?1(self, QAmbientLightFilter) +QtSensors.QAmbientLightFilter.filter?4(QAmbientLightReading) -> bool +QtSensors.QAmbientLightSensor?1(QObject parent=None) +QtSensors.QAmbientLightSensor.__init__?1(self, QObject parent=None) +QtSensors.QAmbientLightSensor.reading?4() -> QAmbientLightReading +QtSensors.QAmbientTemperatureReading.temperature?4() -> float +QtSensors.QAmbientTemperatureReading.setTemperature?4(float) +QtSensors.QAmbientTemperatureFilter?1() +QtSensors.QAmbientTemperatureFilter.__init__?1(self) +QtSensors.QAmbientTemperatureFilter?1(QAmbientTemperatureFilter) +QtSensors.QAmbientTemperatureFilter.__init__?1(self, QAmbientTemperatureFilter) +QtSensors.QAmbientTemperatureFilter.filter?4(QAmbientTemperatureReading) -> bool +QtSensors.QAmbientTemperatureSensor?1(QObject parent=None) +QtSensors.QAmbientTemperatureSensor.__init__?1(self, QObject parent=None) +QtSensors.QAmbientTemperatureSensor.reading?4() -> QAmbientTemperatureReading +QtSensors.QCompassReading.azimuth?4() -> float +QtSensors.QCompassReading.setAzimuth?4(float) +QtSensors.QCompassReading.calibrationLevel?4() -> float +QtSensors.QCompassReading.setCalibrationLevel?4(float) +QtSensors.QCompassFilter?1() +QtSensors.QCompassFilter.__init__?1(self) +QtSensors.QCompassFilter?1(QCompassFilter) +QtSensors.QCompassFilter.__init__?1(self, QCompassFilter) +QtSensors.QCompassFilter.filter?4(QCompassReading) -> bool +QtSensors.QCompass?1(QObject parent=None) +QtSensors.QCompass.__init__?1(self, QObject parent=None) +QtSensors.QCompass.reading?4() -> QCompassReading +QtSensors.QDistanceReading.distance?4() -> float +QtSensors.QDistanceReading.setDistance?4(float) +QtSensors.QDistanceFilter?1() +QtSensors.QDistanceFilter.__init__?1(self) +QtSensors.QDistanceFilter?1(QDistanceFilter) +QtSensors.QDistanceFilter.__init__?1(self, QDistanceFilter) +QtSensors.QDistanceFilter.filter?4(QDistanceReading) -> bool +QtSensors.QDistanceSensor?1(QObject parent=None) +QtSensors.QDistanceSensor.__init__?1(self, QObject parent=None) +QtSensors.QDistanceSensor.reading?4() -> QDistanceReading +QtSensors.QGyroscopeReading.x?4() -> float +QtSensors.QGyroscopeReading.setX?4(float) +QtSensors.QGyroscopeReading.y?4() -> float +QtSensors.QGyroscopeReading.setY?4(float) +QtSensors.QGyroscopeReading.z?4() -> float +QtSensors.QGyroscopeReading.setZ?4(float) +QtSensors.QGyroscopeFilter?1() +QtSensors.QGyroscopeFilter.__init__?1(self) +QtSensors.QGyroscopeFilter?1(QGyroscopeFilter) +QtSensors.QGyroscopeFilter.__init__?1(self, QGyroscopeFilter) +QtSensors.QGyroscopeFilter.filter?4(QGyroscopeReading) -> bool +QtSensors.QGyroscope?1(QObject parent=None) +QtSensors.QGyroscope.__init__?1(self, QObject parent=None) +QtSensors.QGyroscope.reading?4() -> QGyroscopeReading +QtSensors.QHolsterReading.holstered?4() -> bool +QtSensors.QHolsterReading.setHolstered?4(bool) +QtSensors.QHolsterFilter?1() +QtSensors.QHolsterFilter.__init__?1(self) +QtSensors.QHolsterFilter?1(QHolsterFilter) +QtSensors.QHolsterFilter.__init__?1(self, QHolsterFilter) +QtSensors.QHolsterFilter.filter?4(QHolsterReading) -> bool +QtSensors.QHolsterSensor?1(QObject parent=None) +QtSensors.QHolsterSensor.__init__?1(self, QObject parent=None) +QtSensors.QHolsterSensor.reading?4() -> QHolsterReading +QtSensors.QHumidityReading.relativeHumidity?4() -> float +QtSensors.QHumidityReading.setRelativeHumidity?4(float) +QtSensors.QHumidityReading.absoluteHumidity?4() -> float +QtSensors.QHumidityReading.setAbsoluteHumidity?4(float) +QtSensors.QHumidityFilter?1() +QtSensors.QHumidityFilter.__init__?1(self) +QtSensors.QHumidityFilter?1(QHumidityFilter) +QtSensors.QHumidityFilter.__init__?1(self, QHumidityFilter) +QtSensors.QHumidityFilter.filter?4(QHumidityReading) -> bool +QtSensors.QHumiditySensor?1(QObject parent=None) +QtSensors.QHumiditySensor.__init__?1(self, QObject parent=None) +QtSensors.QHumiditySensor.reading?4() -> QHumidityReading +QtSensors.QIRProximityReading.reflectance?4() -> float +QtSensors.QIRProximityReading.setReflectance?4(float) +QtSensors.QIRProximityFilter?1() +QtSensors.QIRProximityFilter.__init__?1(self) +QtSensors.QIRProximityFilter?1(QIRProximityFilter) +QtSensors.QIRProximityFilter.__init__?1(self, QIRProximityFilter) +QtSensors.QIRProximityFilter.filter?4(QIRProximityReading) -> bool +QtSensors.QIRProximitySensor?1(QObject parent=None) +QtSensors.QIRProximitySensor.__init__?1(self, QObject parent=None) +QtSensors.QIRProximitySensor.reading?4() -> QIRProximityReading +QtSensors.QLidReading.backLidClosed?4() -> bool +QtSensors.QLidReading.setBackLidClosed?4(bool) +QtSensors.QLidReading.frontLidClosed?4() -> bool +QtSensors.QLidReading.setFrontLidClosed?4(bool) +QtSensors.QLidReading.backLidChanged?4(bool) +QtSensors.QLidReading.frontLidChanged?4(bool) +QtSensors.QLidFilter?1() +QtSensors.QLidFilter.__init__?1(self) +QtSensors.QLidFilter?1(QLidFilter) +QtSensors.QLidFilter.__init__?1(self, QLidFilter) +QtSensors.QLidFilter.filter?4(QLidReading) -> bool +QtSensors.QLidSensor?1(QObject parent=None) +QtSensors.QLidSensor.__init__?1(self, QObject parent=None) +QtSensors.QLidSensor.reading?4() -> QLidReading +QtSensors.QLightReading.lux?4() -> float +QtSensors.QLightReading.setLux?4(float) +QtSensors.QLightFilter?1() +QtSensors.QLightFilter.__init__?1(self) +QtSensors.QLightFilter?1(QLightFilter) +QtSensors.QLightFilter.__init__?1(self, QLightFilter) +QtSensors.QLightFilter.filter?4(QLightReading) -> bool +QtSensors.QLightSensor?1(QObject parent=None) +QtSensors.QLightSensor.__init__?1(self, QObject parent=None) +QtSensors.QLightSensor.reading?4() -> QLightReading +QtSensors.QLightSensor.fieldOfView?4() -> float +QtSensors.QLightSensor.setFieldOfView?4(float) +QtSensors.QLightSensor.fieldOfViewChanged?4(float) +QtSensors.QMagnetometerReading.x?4() -> float +QtSensors.QMagnetometerReading.setX?4(float) +QtSensors.QMagnetometerReading.y?4() -> float +QtSensors.QMagnetometerReading.setY?4(float) +QtSensors.QMagnetometerReading.z?4() -> float +QtSensors.QMagnetometerReading.setZ?4(float) +QtSensors.QMagnetometerReading.calibrationLevel?4() -> float +QtSensors.QMagnetometerReading.setCalibrationLevel?4(float) +QtSensors.QMagnetometerFilter?1() +QtSensors.QMagnetometerFilter.__init__?1(self) +QtSensors.QMagnetometerFilter?1(QMagnetometerFilter) +QtSensors.QMagnetometerFilter.__init__?1(self, QMagnetometerFilter) +QtSensors.QMagnetometerFilter.filter?4(QMagnetometerReading) -> bool +QtSensors.QMagnetometer?1(QObject parent=None) +QtSensors.QMagnetometer.__init__?1(self, QObject parent=None) +QtSensors.QMagnetometer.reading?4() -> QMagnetometerReading +QtSensors.QMagnetometer.returnGeoValues?4() -> bool +QtSensors.QMagnetometer.setReturnGeoValues?4(bool) +QtSensors.QMagnetometer.returnGeoValuesChanged?4(bool) +QtSensors.QOrientationReading.Orientation?10 +QtSensors.QOrientationReading.Orientation.Undefined?10 +QtSensors.QOrientationReading.Orientation.TopUp?10 +QtSensors.QOrientationReading.Orientation.TopDown?10 +QtSensors.QOrientationReading.Orientation.LeftUp?10 +QtSensors.QOrientationReading.Orientation.RightUp?10 +QtSensors.QOrientationReading.Orientation.FaceUp?10 +QtSensors.QOrientationReading.Orientation.FaceDown?10 +QtSensors.QOrientationReading.orientation?4() -> QOrientationReading.Orientation +QtSensors.QOrientationReading.setOrientation?4(QOrientationReading.Orientation) +QtSensors.QOrientationFilter?1() +QtSensors.QOrientationFilter.__init__?1(self) +QtSensors.QOrientationFilter?1(QOrientationFilter) +QtSensors.QOrientationFilter.__init__?1(self, QOrientationFilter) +QtSensors.QOrientationFilter.filter?4(QOrientationReading) -> bool +QtSensors.QOrientationSensor?1(QObject parent=None) +QtSensors.QOrientationSensor.__init__?1(self, QObject parent=None) +QtSensors.QOrientationSensor.reading?4() -> QOrientationReading +QtSensors.QPressureReading.pressure?4() -> float +QtSensors.QPressureReading.setPressure?4(float) +QtSensors.QPressureReading.temperature?4() -> float +QtSensors.QPressureReading.setTemperature?4(float) +QtSensors.QPressureFilter?1() +QtSensors.QPressureFilter.__init__?1(self) +QtSensors.QPressureFilter?1(QPressureFilter) +QtSensors.QPressureFilter.__init__?1(self, QPressureFilter) +QtSensors.QPressureFilter.filter?4(QPressureReading) -> bool +QtSensors.QPressureSensor?1(QObject parent=None) +QtSensors.QPressureSensor.__init__?1(self, QObject parent=None) +QtSensors.QPressureSensor.reading?4() -> QPressureReading +QtSensors.QProximityReading.close?4() -> bool +QtSensors.QProximityReading.setClose?4(bool) +QtSensors.QProximityFilter?1() +QtSensors.QProximityFilter.__init__?1(self) +QtSensors.QProximityFilter?1(QProximityFilter) +QtSensors.QProximityFilter.__init__?1(self, QProximityFilter) +QtSensors.QProximityFilter.filter?4(QProximityReading) -> bool +QtSensors.QProximitySensor?1(QObject parent=None) +QtSensors.QProximitySensor.__init__?1(self, QObject parent=None) +QtSensors.QProximitySensor.reading?4() -> QProximityReading +QtSensors.qoutputrange.accuracy?7 +QtSensors.qoutputrange.maximum?7 +QtSensors.qoutputrange.minimum?7 +QtSensors.qoutputrange?1() +QtSensors.qoutputrange.__init__?1(self) +QtSensors.qoutputrange?1(qoutputrange) +QtSensors.qoutputrange.__init__?1(self, qoutputrange) +QtSensors.QTapReading.TapDirection?10 +QtSensors.QTapReading.TapDirection.Undefined?10 +QtSensors.QTapReading.TapDirection.X?10 +QtSensors.QTapReading.TapDirection.Y?10 +QtSensors.QTapReading.TapDirection.Z?10 +QtSensors.QTapReading.TapDirection.X_Pos?10 +QtSensors.QTapReading.TapDirection.Y_Pos?10 +QtSensors.QTapReading.TapDirection.Z_Pos?10 +QtSensors.QTapReading.TapDirection.X_Neg?10 +QtSensors.QTapReading.TapDirection.Y_Neg?10 +QtSensors.QTapReading.TapDirection.Z_Neg?10 +QtSensors.QTapReading.TapDirection.X_Both?10 +QtSensors.QTapReading.TapDirection.Y_Both?10 +QtSensors.QTapReading.TapDirection.Z_Both?10 +QtSensors.QTapReading.tapDirection?4() -> QTapReading.TapDirection +QtSensors.QTapReading.setTapDirection?4(QTapReading.TapDirection) +QtSensors.QTapReading.isDoubleTap?4() -> bool +QtSensors.QTapReading.setDoubleTap?4(bool) +QtSensors.QTapFilter?1() +QtSensors.QTapFilter.__init__?1(self) +QtSensors.QTapFilter?1(QTapFilter) +QtSensors.QTapFilter.__init__?1(self, QTapFilter) +QtSensors.QTapFilter.filter?4(QTapReading) -> bool +QtSensors.QTapSensor?1(QObject parent=None) +QtSensors.QTapSensor.__init__?1(self, QObject parent=None) +QtSensors.QTapSensor.reading?4() -> QTapReading +QtSensors.QTapSensor.returnDoubleTapEvents?4() -> bool +QtSensors.QTapSensor.setReturnDoubleTapEvents?4(bool) +QtSensors.QTapSensor.returnDoubleTapEventsChanged?4(bool) +QtSensors.QTiltReading.yRotation?4() -> float +QtSensors.QTiltReading.setYRotation?4(float) +QtSensors.QTiltReading.xRotation?4() -> float +QtSensors.QTiltReading.setXRotation?4(float) +QtSensors.QTiltFilter?1() +QtSensors.QTiltFilter.__init__?1(self) +QtSensors.QTiltFilter?1(QTiltFilter) +QtSensors.QTiltFilter.__init__?1(self, QTiltFilter) +QtSensors.QTiltFilter.filter?4(QTiltReading) -> bool +QtSensors.QTiltSensor?1(QObject parent=None) +QtSensors.QTiltSensor.__init__?1(self, QObject parent=None) +QtSensors.QTiltSensor.reading?4() -> QTiltReading +QtSensors.QTiltSensor.calibrate?4() +QtSensors.QRotationReading.x?4() -> float +QtSensors.QRotationReading.y?4() -> float +QtSensors.QRotationReading.z?4() -> float +QtSensors.QRotationReading.setFromEuler?4(float, float, float) +QtSensors.QRotationFilter?1() +QtSensors.QRotationFilter.__init__?1(self) +QtSensors.QRotationFilter?1(QRotationFilter) +QtSensors.QRotationFilter.__init__?1(self, QRotationFilter) +QtSensors.QRotationFilter.filter?4(QRotationReading) -> bool +QtSensors.QRotationSensor?1(QObject parent=None) +QtSensors.QRotationSensor.__init__?1(self, QObject parent=None) +QtSensors.QRotationSensor.reading?4() -> QRotationReading +QtSensors.QRotationSensor.hasZ?4() -> bool +QtSensors.QRotationSensor.setHasZ?4(bool) +QtSensors.QRotationSensor.hasZChanged?4(bool) +QtSerialPort.QSerialPort.SerialPortError?10 +QtSerialPort.QSerialPort.SerialPortError.NoError?10 +QtSerialPort.QSerialPort.SerialPortError.DeviceNotFoundError?10 +QtSerialPort.QSerialPort.SerialPortError.PermissionError?10 +QtSerialPort.QSerialPort.SerialPortError.OpenError?10 +QtSerialPort.QSerialPort.SerialPortError.ParityError?10 +QtSerialPort.QSerialPort.SerialPortError.FramingError?10 +QtSerialPort.QSerialPort.SerialPortError.BreakConditionError?10 +QtSerialPort.QSerialPort.SerialPortError.WriteError?10 +QtSerialPort.QSerialPort.SerialPortError.ReadError?10 +QtSerialPort.QSerialPort.SerialPortError.ResourceError?10 +QtSerialPort.QSerialPort.SerialPortError.UnsupportedOperationError?10 +QtSerialPort.QSerialPort.SerialPortError.TimeoutError?10 +QtSerialPort.QSerialPort.SerialPortError.NotOpenError?10 +QtSerialPort.QSerialPort.SerialPortError.UnknownError?10 +QtSerialPort.QSerialPort.DataErrorPolicy?10 +QtSerialPort.QSerialPort.DataErrorPolicy.SkipPolicy?10 +QtSerialPort.QSerialPort.DataErrorPolicy.PassZeroPolicy?10 +QtSerialPort.QSerialPort.DataErrorPolicy.IgnorePolicy?10 +QtSerialPort.QSerialPort.DataErrorPolicy.StopReceivingPolicy?10 +QtSerialPort.QSerialPort.DataErrorPolicy.UnknownPolicy?10 +QtSerialPort.QSerialPort.PinoutSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.NoSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.TransmittedDataSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.ReceivedDataSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.DataTerminalReadySignal?10 +QtSerialPort.QSerialPort.PinoutSignal.DataCarrierDetectSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.DataSetReadySignal?10 +QtSerialPort.QSerialPort.PinoutSignal.RingIndicatorSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.RequestToSendSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.ClearToSendSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.SecondaryTransmittedDataSignal?10 +QtSerialPort.QSerialPort.PinoutSignal.SecondaryReceivedDataSignal?10 +QtSerialPort.QSerialPort.FlowControl?10 +QtSerialPort.QSerialPort.FlowControl.NoFlowControl?10 +QtSerialPort.QSerialPort.FlowControl.HardwareControl?10 +QtSerialPort.QSerialPort.FlowControl.SoftwareControl?10 +QtSerialPort.QSerialPort.FlowControl.UnknownFlowControl?10 +QtSerialPort.QSerialPort.StopBits?10 +QtSerialPort.QSerialPort.StopBits.OneStop?10 +QtSerialPort.QSerialPort.StopBits.OneAndHalfStop?10 +QtSerialPort.QSerialPort.StopBits.TwoStop?10 +QtSerialPort.QSerialPort.StopBits.UnknownStopBits?10 +QtSerialPort.QSerialPort.Parity?10 +QtSerialPort.QSerialPort.Parity.NoParity?10 +QtSerialPort.QSerialPort.Parity.EvenParity?10 +QtSerialPort.QSerialPort.Parity.OddParity?10 +QtSerialPort.QSerialPort.Parity.SpaceParity?10 +QtSerialPort.QSerialPort.Parity.MarkParity?10 +QtSerialPort.QSerialPort.Parity.UnknownParity?10 +QtSerialPort.QSerialPort.DataBits?10 +QtSerialPort.QSerialPort.DataBits.Data5?10 +QtSerialPort.QSerialPort.DataBits.Data6?10 +QtSerialPort.QSerialPort.DataBits.Data7?10 +QtSerialPort.QSerialPort.DataBits.Data8?10 +QtSerialPort.QSerialPort.DataBits.UnknownDataBits?10 +QtSerialPort.QSerialPort.BaudRate?10 +QtSerialPort.QSerialPort.BaudRate.Baud1200?10 +QtSerialPort.QSerialPort.BaudRate.Baud2400?10 +QtSerialPort.QSerialPort.BaudRate.Baud4800?10 +QtSerialPort.QSerialPort.BaudRate.Baud9600?10 +QtSerialPort.QSerialPort.BaudRate.Baud19200?10 +QtSerialPort.QSerialPort.BaudRate.Baud38400?10 +QtSerialPort.QSerialPort.BaudRate.Baud57600?10 +QtSerialPort.QSerialPort.BaudRate.Baud115200?10 +QtSerialPort.QSerialPort.BaudRate.UnknownBaud?10 +QtSerialPort.QSerialPort.Direction?10 +QtSerialPort.QSerialPort.Direction.Input?10 +QtSerialPort.QSerialPort.Direction.Output?10 +QtSerialPort.QSerialPort.Direction.AllDirections?10 +QtSerialPort.QSerialPort?1(QObject parent=None) +QtSerialPort.QSerialPort.__init__?1(self, QObject parent=None) +QtSerialPort.QSerialPort?1(QString, QObject parent=None) +QtSerialPort.QSerialPort.__init__?1(self, QString, QObject parent=None) +QtSerialPort.QSerialPort?1(QSerialPortInfo, QObject parent=None) +QtSerialPort.QSerialPort.__init__?1(self, QSerialPortInfo, QObject parent=None) +QtSerialPort.QSerialPort.setPortName?4(QString) +QtSerialPort.QSerialPort.portName?4() -> QString +QtSerialPort.QSerialPort.setPort?4(QSerialPortInfo) +QtSerialPort.QSerialPort.open?4(QIODevice.OpenMode) -> bool +QtSerialPort.QSerialPort.close?4() +QtSerialPort.QSerialPort.setSettingsRestoredOnClose?4(bool) +QtSerialPort.QSerialPort.settingsRestoredOnClose?4() -> bool +QtSerialPort.QSerialPort.setBaudRate?4(int, QSerialPort.Directions dir=QSerialPort.AllDirections) -> bool +QtSerialPort.QSerialPort.baudRate?4(QSerialPort.Directions dir=QSerialPort.AllDirections) -> int +QtSerialPort.QSerialPort.setDataBits?4(QSerialPort.DataBits) -> bool +QtSerialPort.QSerialPort.dataBits?4() -> QSerialPort.DataBits +QtSerialPort.QSerialPort.setParity?4(QSerialPort.Parity) -> bool +QtSerialPort.QSerialPort.parity?4() -> QSerialPort.Parity +QtSerialPort.QSerialPort.setStopBits?4(QSerialPort.StopBits) -> bool +QtSerialPort.QSerialPort.stopBits?4() -> QSerialPort.StopBits +QtSerialPort.QSerialPort.setFlowControl?4(QSerialPort.FlowControl) -> bool +QtSerialPort.QSerialPort.flowControl?4() -> QSerialPort.FlowControl +QtSerialPort.QSerialPort.setDataTerminalReady?4(bool) -> bool +QtSerialPort.QSerialPort.isDataTerminalReady?4() -> bool +QtSerialPort.QSerialPort.setRequestToSend?4(bool) -> bool +QtSerialPort.QSerialPort.isRequestToSend?4() -> bool +QtSerialPort.QSerialPort.pinoutSignals?4() -> QSerialPort.PinoutSignals +QtSerialPort.QSerialPort.flush?4() -> bool +QtSerialPort.QSerialPort.clear?4(QSerialPort.Directions dir=QSerialPort.AllDirections) -> bool +QtSerialPort.QSerialPort.atEnd?4() -> bool +QtSerialPort.QSerialPort.setDataErrorPolicy?4(QSerialPort.DataErrorPolicy policy=QSerialPort.IgnorePolicy) -> bool +QtSerialPort.QSerialPort.dataErrorPolicy?4() -> QSerialPort.DataErrorPolicy +QtSerialPort.QSerialPort.error?4() -> QSerialPort.SerialPortError +QtSerialPort.QSerialPort.clearError?4() +QtSerialPort.QSerialPort.readBufferSize?4() -> int +QtSerialPort.QSerialPort.setReadBufferSize?4(int) +QtSerialPort.QSerialPort.isSequential?4() -> bool +QtSerialPort.QSerialPort.bytesAvailable?4() -> int +QtSerialPort.QSerialPort.bytesToWrite?4() -> int +QtSerialPort.QSerialPort.canReadLine?4() -> bool +QtSerialPort.QSerialPort.waitForReadyRead?4(int msecs=30000) -> bool +QtSerialPort.QSerialPort.waitForBytesWritten?4(int msecs=30000) -> bool +QtSerialPort.QSerialPort.sendBreak?4(int duration=0) -> bool +QtSerialPort.QSerialPort.setBreakEnabled?4(bool enabled=True) -> bool +QtSerialPort.QSerialPort.baudRateChanged?4(int, QSerialPort.Directions) +QtSerialPort.QSerialPort.dataBitsChanged?4(QSerialPort.DataBits) +QtSerialPort.QSerialPort.parityChanged?4(QSerialPort.Parity) +QtSerialPort.QSerialPort.stopBitsChanged?4(QSerialPort.StopBits) +QtSerialPort.QSerialPort.flowControlChanged?4(QSerialPort.FlowControl) +QtSerialPort.QSerialPort.dataErrorPolicyChanged?4(QSerialPort.DataErrorPolicy) +QtSerialPort.QSerialPort.dataTerminalReadyChanged?4(bool) +QtSerialPort.QSerialPort.requestToSendChanged?4(bool) +QtSerialPort.QSerialPort.error?4(QSerialPort.SerialPortError) +QtSerialPort.QSerialPort.settingsRestoredOnCloseChanged?4(bool) +QtSerialPort.QSerialPort.readData?4(int) -> Any +QtSerialPort.QSerialPort.readLineData?4(int) -> Any +QtSerialPort.QSerialPort.writeData?4(bytes) -> int +QtSerialPort.QSerialPort.handle?4() -> int +QtSerialPort.QSerialPort.isBreakEnabled?4() -> bool +QtSerialPort.QSerialPort.breakEnabledChanged?4(bool) +QtSerialPort.QSerialPort.errorOccurred?4(QSerialPort.SerialPortError) +QtSerialPort.QSerialPort.Directions?1() +QtSerialPort.QSerialPort.Directions.__init__?1(self) +QtSerialPort.QSerialPort.Directions?1(int) +QtSerialPort.QSerialPort.Directions.__init__?1(self, int) +QtSerialPort.QSerialPort.Directions?1(QSerialPort.Directions) +QtSerialPort.QSerialPort.Directions.__init__?1(self, QSerialPort.Directions) +QtSerialPort.QSerialPort.PinoutSignals?1() +QtSerialPort.QSerialPort.PinoutSignals.__init__?1(self) +QtSerialPort.QSerialPort.PinoutSignals?1(int) +QtSerialPort.QSerialPort.PinoutSignals.__init__?1(self, int) +QtSerialPort.QSerialPort.PinoutSignals?1(QSerialPort.PinoutSignals) +QtSerialPort.QSerialPort.PinoutSignals.__init__?1(self, QSerialPort.PinoutSignals) +QtSerialPort.QSerialPortInfo?1() +QtSerialPort.QSerialPortInfo.__init__?1(self) +QtSerialPort.QSerialPortInfo?1(QSerialPort) +QtSerialPort.QSerialPortInfo.__init__?1(self, QSerialPort) +QtSerialPort.QSerialPortInfo?1(QString) +QtSerialPort.QSerialPortInfo.__init__?1(self, QString) +QtSerialPort.QSerialPortInfo?1(QSerialPortInfo) +QtSerialPort.QSerialPortInfo.__init__?1(self, QSerialPortInfo) +QtSerialPort.QSerialPortInfo.swap?4(QSerialPortInfo) +QtSerialPort.QSerialPortInfo.portName?4() -> QString +QtSerialPort.QSerialPortInfo.systemLocation?4() -> QString +QtSerialPort.QSerialPortInfo.description?4() -> QString +QtSerialPort.QSerialPortInfo.manufacturer?4() -> QString +QtSerialPort.QSerialPortInfo.vendorIdentifier?4() -> int +QtSerialPort.QSerialPortInfo.productIdentifier?4() -> int +QtSerialPort.QSerialPortInfo.hasVendorIdentifier?4() -> bool +QtSerialPort.QSerialPortInfo.hasProductIdentifier?4() -> bool +QtSerialPort.QSerialPortInfo.isBusy?4() -> bool +QtSerialPort.QSerialPortInfo.isValid?4() -> bool +QtSerialPort.QSerialPortInfo.standardBaudRates?4() -> unknown-type +QtSerialPort.QSerialPortInfo.availablePorts?4() -> unknown-type +QtSerialPort.QSerialPortInfo.isNull?4() -> bool +QtSerialPort.QSerialPortInfo.serialNumber?4() -> QString +QtSql.QSqlDriverCreatorBase?1() +QtSql.QSqlDriverCreatorBase.__init__?1(self) +QtSql.QSqlDriverCreatorBase?1(QSqlDriverCreatorBase) +QtSql.QSqlDriverCreatorBase.__init__?1(self, QSqlDriverCreatorBase) +QtSql.QSqlDriverCreatorBase.createObject?4() -> QSqlDriver +QtSql.QSqlDatabase?1() +QtSql.QSqlDatabase.__init__?1(self) +QtSql.QSqlDatabase?1(QSqlDatabase) +QtSql.QSqlDatabase.__init__?1(self, QSqlDatabase) +QtSql.QSqlDatabase?1(QString) +QtSql.QSqlDatabase.__init__?1(self, QString) +QtSql.QSqlDatabase?1(QSqlDriver) +QtSql.QSqlDatabase.__init__?1(self, QSqlDriver) +QtSql.QSqlDatabase.open?4() -> bool +QtSql.QSqlDatabase.open?4(QString, QString) -> bool +QtSql.QSqlDatabase.close?4() +QtSql.QSqlDatabase.isOpen?4() -> bool +QtSql.QSqlDatabase.isOpenError?4() -> bool +QtSql.QSqlDatabase.tables?4(QSql.TableType type=QSql.Tables) -> QStringList +QtSql.QSqlDatabase.primaryIndex?4(QString) -> QSqlIndex +QtSql.QSqlDatabase.record?4(QString) -> QSqlRecord +QtSql.QSqlDatabase.exec_?4(QString query='') -> QSqlQuery +QtSql.QSqlDatabase.exec?4(QString query='') -> QSqlQuery +QtSql.QSqlDatabase.lastError?4() -> QSqlError +QtSql.QSqlDatabase.isValid?4() -> bool +QtSql.QSqlDatabase.transaction?4() -> bool +QtSql.QSqlDatabase.commit?4() -> bool +QtSql.QSqlDatabase.rollback?4() -> bool +QtSql.QSqlDatabase.setDatabaseName?4(QString) +QtSql.QSqlDatabase.setUserName?4(QString) +QtSql.QSqlDatabase.setPassword?4(QString) +QtSql.QSqlDatabase.setHostName?4(QString) +QtSql.QSqlDatabase.setPort?4(int) +QtSql.QSqlDatabase.setConnectOptions?4(QString options='') +QtSql.QSqlDatabase.databaseName?4() -> QString +QtSql.QSqlDatabase.userName?4() -> QString +QtSql.QSqlDatabase.password?4() -> QString +QtSql.QSqlDatabase.hostName?4() -> QString +QtSql.QSqlDatabase.driverName?4() -> QString +QtSql.QSqlDatabase.port?4() -> int +QtSql.QSqlDatabase.connectOptions?4() -> QString +QtSql.QSqlDatabase.connectionName?4() -> QString +QtSql.QSqlDatabase.driver?4() -> QSqlDriver +QtSql.QSqlDatabase.addDatabase?4(QString, QString connectionName='') -> QSqlDatabase +QtSql.QSqlDatabase.addDatabase?4(QSqlDriver, QString connectionName='') -> QSqlDatabase +QtSql.QSqlDatabase.cloneDatabase?4(QSqlDatabase, QString) -> QSqlDatabase +QtSql.QSqlDatabase.cloneDatabase?4(QString, QString) -> QSqlDatabase +QtSql.QSqlDatabase.database?4(QString connectionName='', bool open=True) -> QSqlDatabase +QtSql.QSqlDatabase.removeDatabase?4(QString) +QtSql.QSqlDatabase.contains?4(QString connectionName='') -> bool +QtSql.QSqlDatabase.drivers?4() -> QStringList +QtSql.QSqlDatabase.connectionNames?4() -> QStringList +QtSql.QSqlDatabase.registerSqlDriver?4(QString, QSqlDriverCreatorBase) +QtSql.QSqlDatabase.isDriverAvailable?4(QString) -> bool +QtSql.QSqlDatabase.setNumericalPrecisionPolicy?4(QSql.NumericalPrecisionPolicy) +QtSql.QSqlDatabase.numericalPrecisionPolicy?4() -> QSql.NumericalPrecisionPolicy +QtSql.QSqlDriver.DbmsType?10 +QtSql.QSqlDriver.DbmsType.UnknownDbms?10 +QtSql.QSqlDriver.DbmsType.MSSqlServer?10 +QtSql.QSqlDriver.DbmsType.MySqlServer?10 +QtSql.QSqlDriver.DbmsType.PostgreSQL?10 +QtSql.QSqlDriver.DbmsType.Oracle?10 +QtSql.QSqlDriver.DbmsType.Sybase?10 +QtSql.QSqlDriver.DbmsType.SQLite?10 +QtSql.QSqlDriver.DbmsType.Interbase?10 +QtSql.QSqlDriver.DbmsType.DB2?10 +QtSql.QSqlDriver.NotificationSource?10 +QtSql.QSqlDriver.NotificationSource.UnknownSource?10 +QtSql.QSqlDriver.NotificationSource.SelfSource?10 +QtSql.QSqlDriver.NotificationSource.OtherSource?10 +QtSql.QSqlDriver.IdentifierType?10 +QtSql.QSqlDriver.IdentifierType.FieldName?10 +QtSql.QSqlDriver.IdentifierType.TableName?10 +QtSql.QSqlDriver.StatementType?10 +QtSql.QSqlDriver.StatementType.WhereStatement?10 +QtSql.QSqlDriver.StatementType.SelectStatement?10 +QtSql.QSqlDriver.StatementType.UpdateStatement?10 +QtSql.QSqlDriver.StatementType.InsertStatement?10 +QtSql.QSqlDriver.StatementType.DeleteStatement?10 +QtSql.QSqlDriver.DriverFeature?10 +QtSql.QSqlDriver.DriverFeature.Transactions?10 +QtSql.QSqlDriver.DriverFeature.QuerySize?10 +QtSql.QSqlDriver.DriverFeature.BLOB?10 +QtSql.QSqlDriver.DriverFeature.Unicode?10 +QtSql.QSqlDriver.DriverFeature.PreparedQueries?10 +QtSql.QSqlDriver.DriverFeature.NamedPlaceholders?10 +QtSql.QSqlDriver.DriverFeature.PositionalPlaceholders?10 +QtSql.QSqlDriver.DriverFeature.LastInsertId?10 +QtSql.QSqlDriver.DriverFeature.BatchOperations?10 +QtSql.QSqlDriver.DriverFeature.SimpleLocking?10 +QtSql.QSqlDriver.DriverFeature.LowPrecisionNumbers?10 +QtSql.QSqlDriver.DriverFeature.EventNotifications?10 +QtSql.QSqlDriver.DriverFeature.FinishQuery?10 +QtSql.QSqlDriver.DriverFeature.MultipleResultSets?10 +QtSql.QSqlDriver?1(QObject parent=None) +QtSql.QSqlDriver.__init__?1(self, QObject parent=None) +QtSql.QSqlDriver.isOpen?4() -> bool +QtSql.QSqlDriver.isOpenError?4() -> bool +QtSql.QSqlDriver.beginTransaction?4() -> bool +QtSql.QSqlDriver.commitTransaction?4() -> bool +QtSql.QSqlDriver.rollbackTransaction?4() -> bool +QtSql.QSqlDriver.tables?4(QSql.TableType) -> QStringList +QtSql.QSqlDriver.primaryIndex?4(QString) -> QSqlIndex +QtSql.QSqlDriver.record?4(QString) -> QSqlRecord +QtSql.QSqlDriver.formatValue?4(QSqlField, bool trimStrings=False) -> QString +QtSql.QSqlDriver.escapeIdentifier?4(QString, QSqlDriver.IdentifierType) -> QString +QtSql.QSqlDriver.sqlStatement?4(QSqlDriver.StatementType, QString, QSqlRecord, bool) -> QString +QtSql.QSqlDriver.lastError?4() -> QSqlError +QtSql.QSqlDriver.handle?4() -> QVariant +QtSql.QSqlDriver.hasFeature?4(QSqlDriver.DriverFeature) -> bool +QtSql.QSqlDriver.close?4() +QtSql.QSqlDriver.createResult?4() -> QSqlResult +QtSql.QSqlDriver.open?4(QString, QString user='', QString password='', QString host='', int port=-1, QString options='') -> bool +QtSql.QSqlDriver.setOpen?4(bool) +QtSql.QSqlDriver.setOpenError?4(bool) +QtSql.QSqlDriver.setLastError?4(QSqlError) +QtSql.QSqlDriver.subscribeToNotification?4(QString) -> bool +QtSql.QSqlDriver.unsubscribeFromNotification?4(QString) -> bool +QtSql.QSqlDriver.subscribedToNotifications?4() -> QStringList +QtSql.QSqlDriver.notification?4(QString) +QtSql.QSqlDriver.notification?4(QString, QSqlDriver.NotificationSource, QVariant) +QtSql.QSqlDriver.isIdentifierEscaped?4(QString, QSqlDriver.IdentifierType) -> bool +QtSql.QSqlDriver.stripDelimiters?4(QString, QSqlDriver.IdentifierType) -> QString +QtSql.QSqlDriver.setNumericalPrecisionPolicy?4(QSql.NumericalPrecisionPolicy) +QtSql.QSqlDriver.numericalPrecisionPolicy?4() -> QSql.NumericalPrecisionPolicy +QtSql.QSqlDriver.dbmsType?4() -> QSqlDriver.DbmsType +QtSql.QSqlError.ErrorType?10 +QtSql.QSqlError.ErrorType.NoError?10 +QtSql.QSqlError.ErrorType.ConnectionError?10 +QtSql.QSqlError.ErrorType.StatementError?10 +QtSql.QSqlError.ErrorType.TransactionError?10 +QtSql.QSqlError.ErrorType.UnknownError?10 +QtSql.QSqlError?1(QString driverText='', QString databaseText='', QSqlError.ErrorType type=QSqlError.NoError, QString errorCode='') +QtSql.QSqlError.__init__?1(self, QString driverText='', QString databaseText='', QSqlError.ErrorType type=QSqlError.NoError, QString errorCode='') +QtSql.QSqlError?1(QString, QString, QSqlError.ErrorType, int) +QtSql.QSqlError.__init__?1(self, QString, QString, QSqlError.ErrorType, int) +QtSql.QSqlError?1(QSqlError) +QtSql.QSqlError.__init__?1(self, QSqlError) +QtSql.QSqlError.driverText?4() -> QString +QtSql.QSqlError.setDriverText?4(QString) +QtSql.QSqlError.databaseText?4() -> QString +QtSql.QSqlError.setDatabaseText?4(QString) +QtSql.QSqlError.type?4() -> QSqlError.ErrorType +QtSql.QSqlError.setType?4(QSqlError.ErrorType) +QtSql.QSqlError.number?4() -> int +QtSql.QSqlError.setNumber?4(int) +QtSql.QSqlError.text?4() -> QString +QtSql.QSqlError.isValid?4() -> bool +QtSql.QSqlError.nativeErrorCode?4() -> QString +QtSql.QSqlError.swap?4(QSqlError) +QtSql.QSqlField.RequiredStatus?10 +QtSql.QSqlField.RequiredStatus.Unknown?10 +QtSql.QSqlField.RequiredStatus.Optional?10 +QtSql.QSqlField.RequiredStatus.Required?10 +QtSql.QSqlField?1(QString fieldName='', QVariant.Type type=QVariant.Invalid) +QtSql.QSqlField.__init__?1(self, QString fieldName='', QVariant.Type type=QVariant.Invalid) +QtSql.QSqlField?1(QString, QVariant.Type, QString) +QtSql.QSqlField.__init__?1(self, QString, QVariant.Type, QString) +QtSql.QSqlField?1(QSqlField) +QtSql.QSqlField.__init__?1(self, QSqlField) +QtSql.QSqlField.setValue?4(QVariant) +QtSql.QSqlField.value?4() -> QVariant +QtSql.QSqlField.setName?4(QString) +QtSql.QSqlField.name?4() -> QString +QtSql.QSqlField.isNull?4() -> bool +QtSql.QSqlField.setReadOnly?4(bool) +QtSql.QSqlField.isReadOnly?4() -> bool +QtSql.QSqlField.clear?4() +QtSql.QSqlField.type?4() -> QVariant.Type +QtSql.QSqlField.isAutoValue?4() -> bool +QtSql.QSqlField.setType?4(QVariant.Type) +QtSql.QSqlField.setRequiredStatus?4(QSqlField.RequiredStatus) +QtSql.QSqlField.setRequired?4(bool) +QtSql.QSqlField.setLength?4(int) +QtSql.QSqlField.setPrecision?4(int) +QtSql.QSqlField.setDefaultValue?4(QVariant) +QtSql.QSqlField.setSqlType?4(int) +QtSql.QSqlField.setGenerated?4(bool) +QtSql.QSqlField.setAutoValue?4(bool) +QtSql.QSqlField.requiredStatus?4() -> QSqlField.RequiredStatus +QtSql.QSqlField.length?4() -> int +QtSql.QSqlField.precision?4() -> int +QtSql.QSqlField.defaultValue?4() -> QVariant +QtSql.QSqlField.typeID?4() -> int +QtSql.QSqlField.isGenerated?4() -> bool +QtSql.QSqlField.isValid?4() -> bool +QtSql.QSqlField.setTableName?4(QString) +QtSql.QSqlField.tableName?4() -> QString +QtSql.QSqlRecord?1() +QtSql.QSqlRecord.__init__?1(self) +QtSql.QSqlRecord?1(QSqlRecord) +QtSql.QSqlRecord.__init__?1(self, QSqlRecord) +QtSql.QSqlRecord.value?4(int) -> QVariant +QtSql.QSqlRecord.value?4(QString) -> QVariant +QtSql.QSqlRecord.setValue?4(int, QVariant) +QtSql.QSqlRecord.setValue?4(QString, QVariant) +QtSql.QSqlRecord.setNull?4(int) +QtSql.QSqlRecord.setNull?4(QString) +QtSql.QSqlRecord.isNull?4(int) -> bool +QtSql.QSqlRecord.isNull?4(QString) -> bool +QtSql.QSqlRecord.indexOf?4(QString) -> int +QtSql.QSqlRecord.fieldName?4(int) -> QString +QtSql.QSqlRecord.field?4(int) -> QSqlField +QtSql.QSqlRecord.field?4(QString) -> QSqlField +QtSql.QSqlRecord.isGenerated?4(int) -> bool +QtSql.QSqlRecord.isGenerated?4(QString) -> bool +QtSql.QSqlRecord.setGenerated?4(QString, bool) +QtSql.QSqlRecord.setGenerated?4(int, bool) +QtSql.QSqlRecord.append?4(QSqlField) +QtSql.QSqlRecord.replace?4(int, QSqlField) +QtSql.QSqlRecord.insert?4(int, QSqlField) +QtSql.QSqlRecord.remove?4(int) +QtSql.QSqlRecord.isEmpty?4() -> bool +QtSql.QSqlRecord.contains?4(QString) -> bool +QtSql.QSqlRecord.clear?4() +QtSql.QSqlRecord.clearValues?4() +QtSql.QSqlRecord.count?4() -> int +QtSql.QSqlRecord.keyValues?4(QSqlRecord) -> QSqlRecord +QtSql.QSqlIndex?1(QString cursorName='', QString name='') +QtSql.QSqlIndex.__init__?1(self, QString cursorName='', QString name='') +QtSql.QSqlIndex?1(QSqlIndex) +QtSql.QSqlIndex.__init__?1(self, QSqlIndex) +QtSql.QSqlIndex.setCursorName?4(QString) +QtSql.QSqlIndex.cursorName?4() -> QString +QtSql.QSqlIndex.setName?4(QString) +QtSql.QSqlIndex.name?4() -> QString +QtSql.QSqlIndex.append?4(QSqlField) +QtSql.QSqlIndex.append?4(QSqlField, bool) +QtSql.QSqlIndex.isDescending?4(int) -> bool +QtSql.QSqlIndex.setDescending?4(int, bool) +QtSql.QSqlQuery.BatchExecutionMode?10 +QtSql.QSqlQuery.BatchExecutionMode.ValuesAsRows?10 +QtSql.QSqlQuery.BatchExecutionMode.ValuesAsColumns?10 +QtSql.QSqlQuery?1(QSqlResult) +QtSql.QSqlQuery.__init__?1(self, QSqlResult) +QtSql.QSqlQuery?1(QString query='', QSqlDatabase db=QSqlDatabase()) +QtSql.QSqlQuery.__init__?1(self, QString query='', QSqlDatabase db=QSqlDatabase()) +QtSql.QSqlQuery?1(QSqlDatabase) +QtSql.QSqlQuery.__init__?1(self, QSqlDatabase) +QtSql.QSqlQuery?1(QSqlQuery) +QtSql.QSqlQuery.__init__?1(self, QSqlQuery) +QtSql.QSqlQuery.isValid?4() -> bool +QtSql.QSqlQuery.isActive?4() -> bool +QtSql.QSqlQuery.isNull?4(int) -> bool +QtSql.QSqlQuery.isNull?4(QString) -> bool +QtSql.QSqlQuery.at?4() -> int +QtSql.QSqlQuery.lastQuery?4() -> QString +QtSql.QSqlQuery.numRowsAffected?4() -> int +QtSql.QSqlQuery.lastError?4() -> QSqlError +QtSql.QSqlQuery.isSelect?4() -> bool +QtSql.QSqlQuery.size?4() -> int +QtSql.QSqlQuery.driver?4() -> QSqlDriver +QtSql.QSqlQuery.result?4() -> QSqlResult +QtSql.QSqlQuery.isForwardOnly?4() -> bool +QtSql.QSqlQuery.record?4() -> QSqlRecord +QtSql.QSqlQuery.setForwardOnly?4(bool) +QtSql.QSqlQuery.exec_?4(QString) -> bool +QtSql.QSqlQuery.exec?4(QString) -> bool +QtSql.QSqlQuery.value?4(int) -> QVariant +QtSql.QSqlQuery.value?4(QString) -> QVariant +QtSql.QSqlQuery.seek?4(int, bool relative=False) -> bool +QtSql.QSqlQuery.next?4() -> bool +QtSql.QSqlQuery.previous?4() -> bool +QtSql.QSqlQuery.first?4() -> bool +QtSql.QSqlQuery.last?4() -> bool +QtSql.QSqlQuery.clear?4() +QtSql.QSqlQuery.exec_?4() -> bool +QtSql.QSqlQuery.exec?4() -> bool +QtSql.QSqlQuery.execBatch?4(QSqlQuery.BatchExecutionMode mode=QSqlQuery.ValuesAsRows) -> bool +QtSql.QSqlQuery.prepare?4(QString) -> bool +QtSql.QSqlQuery.bindValue?4(QString, QVariant, QSql.ParamType type=QSql.In) +QtSql.QSqlQuery.bindValue?4(int, QVariant, QSql.ParamType type=QSql.In) +QtSql.QSqlQuery.addBindValue?4(QVariant, QSql.ParamType type=QSql.In) +QtSql.QSqlQuery.boundValue?4(QString) -> QVariant +QtSql.QSqlQuery.boundValue?4(int) -> QVariant +QtSql.QSqlQuery.boundValues?4() -> unknown-type +QtSql.QSqlQuery.executedQuery?4() -> QString +QtSql.QSqlQuery.lastInsertId?4() -> QVariant +QtSql.QSqlQuery.setNumericalPrecisionPolicy?4(QSql.NumericalPrecisionPolicy) +QtSql.QSqlQuery.numericalPrecisionPolicy?4() -> QSql.NumericalPrecisionPolicy +QtSql.QSqlQuery.finish?4() +QtSql.QSqlQuery.nextResult?4() -> bool +QtSql.QSqlQueryModel?1(QObject parent=None) +QtSql.QSqlQueryModel.__init__?1(self, QObject parent=None) +QtSql.QSqlQueryModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtSql.QSqlQueryModel.columnCount?4(QModelIndex parent=QModelIndex()) -> int +QtSql.QSqlQueryModel.record?4(int) -> QSqlRecord +QtSql.QSqlQueryModel.record?4() -> QSqlRecord +QtSql.QSqlQueryModel.data?4(QModelIndex, int role=Qt.DisplayRole) -> QVariant +QtSql.QSqlQueryModel.headerData?4(int, Qt.Orientation, int role=Qt.DisplayRole) -> QVariant +QtSql.QSqlQueryModel.setHeaderData?4(int, Qt.Orientation, QVariant, int role=Qt.EditRole) -> bool +QtSql.QSqlQueryModel.insertColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtSql.QSqlQueryModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtSql.QSqlQueryModel.setQuery?4(QSqlQuery) +QtSql.QSqlQueryModel.setQuery?4(QString, QSqlDatabase db=QSqlDatabase()) +QtSql.QSqlQueryModel.query?4() -> QSqlQuery +QtSql.QSqlQueryModel.clear?4() +QtSql.QSqlQueryModel.lastError?4() -> QSqlError +QtSql.QSqlQueryModel.fetchMore?4(QModelIndex parent=QModelIndex()) +QtSql.QSqlQueryModel.canFetchMore?4(QModelIndex parent=QModelIndex()) -> bool +QtSql.QSqlQueryModel.queryChange?4() +QtSql.QSqlQueryModel.indexInQuery?4(QModelIndex) -> QModelIndex +QtSql.QSqlQueryModel.setLastError?4(QSqlError) +QtSql.QSqlQueryModel.beginResetModel?4() +QtSql.QSqlQueryModel.endResetModel?4() +QtSql.QSqlQueryModel.beginInsertRows?4(QModelIndex, int, int) +QtSql.QSqlQueryModel.endInsertRows?4() +QtSql.QSqlQueryModel.beginRemoveRows?4(QModelIndex, int, int) +QtSql.QSqlQueryModel.endRemoveRows?4() +QtSql.QSqlQueryModel.beginInsertColumns?4(QModelIndex, int, int) +QtSql.QSqlQueryModel.endInsertColumns?4() +QtSql.QSqlQueryModel.beginRemoveColumns?4(QModelIndex, int, int) +QtSql.QSqlQueryModel.endRemoveColumns?4() +QtSql.QSqlQueryModel.roleNames?4() -> unknown-type +QtSql.QSqlRelationalDelegate?1(QObject parent=None) +QtSql.QSqlRelationalDelegate.__init__?1(self, QObject parent=None) +QtSql.QSqlRelationalDelegate.createEditor?4(QWidget, QStyleOptionViewItem, QModelIndex) -> QWidget +QtSql.QSqlRelationalDelegate.setModelData?4(QWidget, QAbstractItemModel, QModelIndex) +QtSql.QSqlRelationalDelegate.setEditorData?4(QWidget, QModelIndex) +QtSql.QSqlRelation?1() +QtSql.QSqlRelation.__init__?1(self) +QtSql.QSqlRelation?1(QString, QString, QString) +QtSql.QSqlRelation.__init__?1(self, QString, QString, QString) +QtSql.QSqlRelation?1(QSqlRelation) +QtSql.QSqlRelation.__init__?1(self, QSqlRelation) +QtSql.QSqlRelation.tableName?4() -> QString +QtSql.QSqlRelation.indexColumn?4() -> QString +QtSql.QSqlRelation.displayColumn?4() -> QString +QtSql.QSqlRelation.isValid?4() -> bool +QtSql.QSqlRelation.swap?4(QSqlRelation) +QtSql.QSqlTableModel.EditStrategy?10 +QtSql.QSqlTableModel.EditStrategy.OnFieldChange?10 +QtSql.QSqlTableModel.EditStrategy.OnRowChange?10 +QtSql.QSqlTableModel.EditStrategy.OnManualSubmit?10 +QtSql.QSqlTableModel?1(QObject parent=None, QSqlDatabase db=QSqlDatabase()) +QtSql.QSqlTableModel.__init__?1(self, QObject parent=None, QSqlDatabase db=QSqlDatabase()) +QtSql.QSqlTableModel.select?4() -> bool +QtSql.QSqlTableModel.setTable?4(QString) +QtSql.QSqlTableModel.tableName?4() -> QString +QtSql.QSqlTableModel.flags?4(QModelIndex) -> Qt.ItemFlags +QtSql.QSqlTableModel.data?4(QModelIndex, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtSql.QSqlTableModel.setData?4(QModelIndex, QVariant, int role=Qt.ItemDataRole.EditRole) -> bool +QtSql.QSqlTableModel.headerData?4(int, Qt.Orientation, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtSql.QSqlTableModel.isDirty?4(QModelIndex) -> bool +QtSql.QSqlTableModel.isDirty?4() -> bool +QtSql.QSqlTableModel.clear?4() +QtSql.QSqlTableModel.setEditStrategy?4(QSqlTableModel.EditStrategy) +QtSql.QSqlTableModel.editStrategy?4() -> QSqlTableModel.EditStrategy +QtSql.QSqlTableModel.primaryKey?4() -> QSqlIndex +QtSql.QSqlTableModel.database?4() -> QSqlDatabase +QtSql.QSqlTableModel.fieldIndex?4(QString) -> int +QtSql.QSqlTableModel.sort?4(int, Qt.SortOrder) +QtSql.QSqlTableModel.setSort?4(int, Qt.SortOrder) +QtSql.QSqlTableModel.filter?4() -> QString +QtSql.QSqlTableModel.setFilter?4(QString) +QtSql.QSqlTableModel.rowCount?4(QModelIndex parent=QModelIndex()) -> int +QtSql.QSqlTableModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtSql.QSqlTableModel.removeRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtSql.QSqlTableModel.insertRows?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtSql.QSqlTableModel.insertRecord?4(int, QSqlRecord) -> bool +QtSql.QSqlTableModel.setRecord?4(int, QSqlRecord) -> bool +QtSql.QSqlTableModel.revertRow?4(int) +QtSql.QSqlTableModel.submit?4() -> bool +QtSql.QSqlTableModel.revert?4() +QtSql.QSqlTableModel.submitAll?4() -> bool +QtSql.QSqlTableModel.revertAll?4() +QtSql.QSqlTableModel.primeInsert?4(int, QSqlRecord) +QtSql.QSqlTableModel.beforeInsert?4(QSqlRecord) +QtSql.QSqlTableModel.beforeUpdate?4(int, QSqlRecord) +QtSql.QSqlTableModel.beforeDelete?4(int) +QtSql.QSqlTableModel.updateRowInTable?4(int, QSqlRecord) -> bool +QtSql.QSqlTableModel.insertRowIntoTable?4(QSqlRecord) -> bool +QtSql.QSqlTableModel.deleteRowFromTable?4(int) -> bool +QtSql.QSqlTableModel.orderByClause?4() -> QString +QtSql.QSqlTableModel.selectStatement?4() -> QString +QtSql.QSqlTableModel.setPrimaryKey?4(QSqlIndex) +QtSql.QSqlTableModel.setQuery?4(QSqlQuery) +QtSql.QSqlTableModel.indexInQuery?4(QModelIndex) -> QModelIndex +QtSql.QSqlTableModel.selectRow?4(int) -> bool +QtSql.QSqlTableModel.record?4() -> QSqlRecord +QtSql.QSqlTableModel.record?4(int) -> QSqlRecord +QtSql.QSqlTableModel.primaryValues?4(int) -> QSqlRecord +QtSql.QSqlRelationalTableModel.JoinMode?10 +QtSql.QSqlRelationalTableModel.JoinMode.InnerJoin?10 +QtSql.QSqlRelationalTableModel.JoinMode.LeftJoin?10 +QtSql.QSqlRelationalTableModel?1(QObject parent=None, QSqlDatabase db=QSqlDatabase()) +QtSql.QSqlRelationalTableModel.__init__?1(self, QObject parent=None, QSqlDatabase db=QSqlDatabase()) +QtSql.QSqlRelationalTableModel.data?4(QModelIndex, int role=Qt.ItemDataRole.DisplayRole) -> QVariant +QtSql.QSqlRelationalTableModel.setData?4(QModelIndex, QVariant, int role=Qt.ItemDataRole.EditRole) -> bool +QtSql.QSqlRelationalTableModel.clear?4() +QtSql.QSqlRelationalTableModel.select?4() -> bool +QtSql.QSqlRelationalTableModel.setTable?4(QString) +QtSql.QSqlRelationalTableModel.setRelation?4(int, QSqlRelation) +QtSql.QSqlRelationalTableModel.relation?4(int) -> QSqlRelation +QtSql.QSqlRelationalTableModel.relationModel?4(int) -> QSqlTableModel +QtSql.QSqlRelationalTableModel.revertRow?4(int) +QtSql.QSqlRelationalTableModel.removeColumns?4(int, int, QModelIndex parent=QModelIndex()) -> bool +QtSql.QSqlRelationalTableModel.selectStatement?4() -> QString +QtSql.QSqlRelationalTableModel.updateRowInTable?4(int, QSqlRecord) -> bool +QtSql.QSqlRelationalTableModel.orderByClause?4() -> QString +QtSql.QSqlRelationalTableModel.insertRowIntoTable?4(QSqlRecord) -> bool +QtSql.QSqlRelationalTableModel.setJoinMode?4(QSqlRelationalTableModel.JoinMode) +QtSql.QSqlResult.BindingSyntax?10 +QtSql.QSqlResult.BindingSyntax.PositionalBinding?10 +QtSql.QSqlResult.BindingSyntax.NamedBinding?10 +QtSql.QSqlResult?1(QSqlDriver) +QtSql.QSqlResult.__init__?1(self, QSqlDriver) +QtSql.QSqlResult.handle?4() -> QVariant +QtSql.QSqlResult.at?4() -> int +QtSql.QSqlResult.lastQuery?4() -> QString +QtSql.QSqlResult.lastError?4() -> QSqlError +QtSql.QSqlResult.isValid?4() -> bool +QtSql.QSqlResult.isActive?4() -> bool +QtSql.QSqlResult.isSelect?4() -> bool +QtSql.QSqlResult.isForwardOnly?4() -> bool +QtSql.QSqlResult.driver?4() -> QSqlDriver +QtSql.QSqlResult.setAt?4(int) +QtSql.QSqlResult.setActive?4(bool) +QtSql.QSqlResult.setLastError?4(QSqlError) +QtSql.QSqlResult.setQuery?4(QString) +QtSql.QSqlResult.setSelect?4(bool) +QtSql.QSqlResult.setForwardOnly?4(bool) +QtSql.QSqlResult.exec_?4() -> bool +QtSql.QSqlResult.exec?4() -> bool +QtSql.QSqlResult.prepare?4(QString) -> bool +QtSql.QSqlResult.savePrepare?4(QString) -> bool +QtSql.QSqlResult.bindValue?4(int, QVariant, QSql.ParamType) +QtSql.QSqlResult.bindValue?4(QString, QVariant, QSql.ParamType) +QtSql.QSqlResult.addBindValue?4(QVariant, QSql.ParamType) +QtSql.QSqlResult.boundValue?4(QString) -> QVariant +QtSql.QSqlResult.boundValue?4(int) -> QVariant +QtSql.QSqlResult.bindValueType?4(QString) -> QSql.ParamType +QtSql.QSqlResult.bindValueType?4(int) -> QSql.ParamType +QtSql.QSqlResult.boundValueCount?4() -> int +QtSql.QSqlResult.boundValues?4() -> unknown-type +QtSql.QSqlResult.executedQuery?4() -> QString +QtSql.QSqlResult.boundValueName?4(int) -> QString +QtSql.QSqlResult.clear?4() +QtSql.QSqlResult.hasOutValues?4() -> bool +QtSql.QSqlResult.bindingSyntax?4() -> QSqlResult.BindingSyntax +QtSql.QSqlResult.data?4(int) -> QVariant +QtSql.QSqlResult.isNull?4(int) -> bool +QtSql.QSqlResult.reset?4(QString) -> bool +QtSql.QSqlResult.fetch?4(int) -> bool +QtSql.QSqlResult.fetchNext?4() -> bool +QtSql.QSqlResult.fetchPrevious?4() -> bool +QtSql.QSqlResult.fetchFirst?4() -> bool +QtSql.QSqlResult.fetchLast?4() -> bool +QtSql.QSqlResult.size?4() -> int +QtSql.QSqlResult.numRowsAffected?4() -> int +QtSql.QSqlResult.record?4() -> QSqlRecord +QtSql.QSqlResult.lastInsertId?4() -> QVariant +QtSql.QSql.NumericalPrecisionPolicy?10 +QtSql.QSql.NumericalPrecisionPolicy.LowPrecisionInt32?10 +QtSql.QSql.NumericalPrecisionPolicy.LowPrecisionInt64?10 +QtSql.QSql.NumericalPrecisionPolicy.LowPrecisionDouble?10 +QtSql.QSql.NumericalPrecisionPolicy.HighPrecision?10 +QtSql.QSql.TableType?10 +QtSql.QSql.TableType.Tables?10 +QtSql.QSql.TableType.SystemTables?10 +QtSql.QSql.TableType.Views?10 +QtSql.QSql.TableType.AllTables?10 +QtSql.QSql.ParamTypeFlag?10 +QtSql.QSql.ParamTypeFlag.In?10 +QtSql.QSql.ParamTypeFlag.Out?10 +QtSql.QSql.ParamTypeFlag.InOut?10 +QtSql.QSql.ParamTypeFlag.Binary?10 +QtSql.QSql.Location?10 +QtSql.QSql.Location.BeforeFirstRow?10 +QtSql.QSql.Location.AfterLastRow?10 +QtSql.QSql.ParamType?1() +QtSql.QSql.ParamType.__init__?1(self) +QtSql.QSql.ParamType?1(int) +QtSql.QSql.ParamType.__init__?1(self, int) +QtSql.QSql.ParamType?1(QSql.ParamType) +QtSql.QSql.ParamType.__init__?1(self, QSql.ParamType) +QtSvg.QGraphicsSvgItem?1(QGraphicsItem parent=None) +QtSvg.QGraphicsSvgItem.__init__?1(self, QGraphicsItem parent=None) +QtSvg.QGraphicsSvgItem?1(QString, QGraphicsItem parent=None) +QtSvg.QGraphicsSvgItem.__init__?1(self, QString, QGraphicsItem parent=None) +QtSvg.QGraphicsSvgItem.setSharedRenderer?4(QSvgRenderer) +QtSvg.QGraphicsSvgItem.renderer?4() -> QSvgRenderer +QtSvg.QGraphicsSvgItem.setElementId?4(QString) +QtSvg.QGraphicsSvgItem.elementId?4() -> QString +QtSvg.QGraphicsSvgItem.setMaximumCacheSize?4(QSize) +QtSvg.QGraphicsSvgItem.maximumCacheSize?4() -> QSize +QtSvg.QGraphicsSvgItem.boundingRect?4() -> QRectF +QtSvg.QGraphicsSvgItem.paint?4(QPainter, QStyleOptionGraphicsItem, QWidget widget=None) +QtSvg.QGraphicsSvgItem.type?4() -> int +QtSvg.QSvgGenerator?1() +QtSvg.QSvgGenerator.__init__?1(self) +QtSvg.QSvgGenerator.size?4() -> QSize +QtSvg.QSvgGenerator.setSize?4(QSize) +QtSvg.QSvgGenerator.fileName?4() -> QString +QtSvg.QSvgGenerator.setFileName?4(QString) +QtSvg.QSvgGenerator.outputDevice?4() -> QIODevice +QtSvg.QSvgGenerator.setOutputDevice?4(QIODevice) +QtSvg.QSvgGenerator.resolution?4() -> int +QtSvg.QSvgGenerator.setResolution?4(int) +QtSvg.QSvgGenerator.title?4() -> QString +QtSvg.QSvgGenerator.setTitle?4(QString) +QtSvg.QSvgGenerator.description?4() -> QString +QtSvg.QSvgGenerator.setDescription?4(QString) +QtSvg.QSvgGenerator.viewBox?4() -> QRect +QtSvg.QSvgGenerator.viewBoxF?4() -> QRectF +QtSvg.QSvgGenerator.setViewBox?4(QRect) +QtSvg.QSvgGenerator.setViewBox?4(QRectF) +QtSvg.QSvgGenerator.paintEngine?4() -> QPaintEngine +QtSvg.QSvgGenerator.metric?4(QPaintDevice.PaintDeviceMetric) -> int +QtSvg.QSvgRenderer?1(QObject parent=None) +QtSvg.QSvgRenderer.__init__?1(self, QObject parent=None) +QtSvg.QSvgRenderer?1(QString, QObject parent=None) +QtSvg.QSvgRenderer.__init__?1(self, QString, QObject parent=None) +QtSvg.QSvgRenderer?1(QByteArray, QObject parent=None) +QtSvg.QSvgRenderer.__init__?1(self, QByteArray, QObject parent=None) +QtSvg.QSvgRenderer?1(QXmlStreamReader, QObject parent=None) +QtSvg.QSvgRenderer.__init__?1(self, QXmlStreamReader, QObject parent=None) +QtSvg.QSvgRenderer.isValid?4() -> bool +QtSvg.QSvgRenderer.defaultSize?4() -> QSize +QtSvg.QSvgRenderer.elementExists?4(QString) -> bool +QtSvg.QSvgRenderer.viewBox?4() -> QRect +QtSvg.QSvgRenderer.viewBoxF?4() -> QRectF +QtSvg.QSvgRenderer.setViewBox?4(QRect) +QtSvg.QSvgRenderer.setViewBox?4(QRectF) +QtSvg.QSvgRenderer.animated?4() -> bool +QtSvg.QSvgRenderer.boundsOnElement?4(QString) -> QRectF +QtSvg.QSvgRenderer.framesPerSecond?4() -> int +QtSvg.QSvgRenderer.setFramesPerSecond?4(int) +QtSvg.QSvgRenderer.currentFrame?4() -> int +QtSvg.QSvgRenderer.setCurrentFrame?4(int) +QtSvg.QSvgRenderer.animationDuration?4() -> int +QtSvg.QSvgRenderer.load?4(QString) -> bool +QtSvg.QSvgRenderer.load?4(QByteArray) -> bool +QtSvg.QSvgRenderer.load?4(QXmlStreamReader) -> bool +QtSvg.QSvgRenderer.render?4(QPainter) +QtSvg.QSvgRenderer.render?4(QPainter, QRectF) +QtSvg.QSvgRenderer.render?4(QPainter, QString, QRectF bounds=QRectF()) +QtSvg.QSvgRenderer.repaintNeeded?4() +QtSvg.QSvgRenderer.aspectRatioMode?4() -> Qt.AspectRatioMode +QtSvg.QSvgRenderer.setAspectRatioMode?4(Qt.AspectRatioMode) +QtSvg.QSvgRenderer.transformForElement?4(QString) -> QTransform +QtSvg.QSvgWidget?1(QWidget parent=None) +QtSvg.QSvgWidget.__init__?1(self, QWidget parent=None) +QtSvg.QSvgWidget?1(QString, QWidget parent=None) +QtSvg.QSvgWidget.__init__?1(self, QString, QWidget parent=None) +QtSvg.QSvgWidget.renderer?4() -> QSvgRenderer +QtSvg.QSvgWidget.sizeHint?4() -> QSize +QtSvg.QSvgWidget.load?4(QString) +QtSvg.QSvgWidget.load?4(QByteArray) +QtSvg.QSvgWidget.paintEvent?4(QPaintEvent) +QtTest.QAbstractItemModelTester.FailureReportingMode?10 +QtTest.QAbstractItemModelTester.FailureReportingMode.QtTest?10 +QtTest.QAbstractItemModelTester.FailureReportingMode.Warning?10 +QtTest.QAbstractItemModelTester.FailureReportingMode.Fatal?10 +QtTest.QAbstractItemModelTester?1(QAbstractItemModel, QObject parent=None) +QtTest.QAbstractItemModelTester.__init__?1(self, QAbstractItemModel, QObject parent=None) +QtTest.QAbstractItemModelTester?1(QAbstractItemModel, QAbstractItemModelTester.FailureReportingMode, QObject parent=None) +QtTest.QAbstractItemModelTester.__init__?1(self, QAbstractItemModel, QAbstractItemModelTester.FailureReportingMode, QObject parent=None) +QtTest.QAbstractItemModelTester.model?4() -> QAbstractItemModel +QtTest.QAbstractItemModelTester.failureReportingMode?4() -> QAbstractItemModelTester.FailureReportingMode +QtTest.QSignalSpy?1(Any) +QtTest.QSignalSpy.__init__?1(self, Any) +QtTest.QSignalSpy?1(QObject, QMetaMethod) +QtTest.QSignalSpy.__init__?1(self, QObject, QMetaMethod) +QtTest.QSignalSpy.isValid?4() -> bool +QtTest.QSignalSpy.signal?4() -> QByteArray +QtTest.QSignalSpy.wait?4(int timeout=5000) -> bool +QtTest.QTest.KeyAction?10 +QtTest.QTest.KeyAction.Press?10 +QtTest.QTest.KeyAction.Release?10 +QtTest.QTest.KeyAction.Click?10 +QtTest.QTest.KeyAction.Shortcut?10 +QtTest.QTest.qSleep?4(int) +QtTest.QTest.keyClick?4(QWidget, Qt.Key, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyClick?4(QWidget, str, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyClicks?4(QWidget, QString, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyEvent?4(QTest.KeyAction, QWidget, Qt.Key, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyEvent?4(QTest.KeyAction, QWidget, str, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyPress?4(QWidget, Qt.Key, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyPress?4(QWidget, str, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyRelease?4(QWidget, Qt.Key, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyRelease?4(QWidget, str, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keySequence?4(QWidget, QKeySequence) +QtTest.QTest.keyEvent?4(QTest.KeyAction, QWindow, Qt.Key, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyEvent?4(QTest.KeyAction, QWindow, str, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyClick?4(QWindow, Qt.Key, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyClick?4(QWindow, str, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyPress?4(QWindow, Qt.Key, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyPress?4(QWindow, str, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyRelease?4(QWindow, Qt.Key, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keyRelease?4(QWindow, str, Qt.KeyboardModifiers modifier=Qt.NoModifier, int delay=-1) +QtTest.QTest.keySequence?4(QWindow, QKeySequence) +QtTest.QTest.mouseClick?4(QWidget, Qt.MouseButton, Qt.KeyboardModifiers modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mouseDClick?4(QWidget, Qt.MouseButton, Qt.KeyboardModifiers modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mouseMove?4(QWidget, QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mousePress?4(QWidget, Qt.MouseButton, Qt.KeyboardModifiers modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mouseRelease?4(QWidget, Qt.MouseButton, Qt.KeyboardModifiers modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mousePress?4(QWindow, Qt.MouseButton, Qt.KeyboardModifiers modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mouseRelease?4(QWindow, Qt.MouseButton, Qt.KeyboardModifiers modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mouseClick?4(QWindow, Qt.MouseButton, Qt.KeyboardModifiers modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mouseDClick?4(QWindow, Qt.MouseButton, Qt.KeyboardModifiers modifier=Qt.KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.mouseMove?4(QWindow, QPoint pos=QPoint(), int delay=-1) +QtTest.QTest.qWait?4(int) +QtTest.QTest.qWaitForWindowActive?4(QWindow, int timeout=5000) -> bool +QtTest.QTest.qWaitForWindowExposed?4(QWindow, int timeout=5000) -> bool +QtTest.QTest.qWaitForWindowActive?4(QWidget, int timeout=5000) -> bool +QtTest.QTest.qWaitForWindowExposed?4(QWidget, int timeout=5000) -> bool +QtTest.QTest.touchEvent?4(QWidget, QTouchDevice) -> QTest.QTouchEventSequence +QtTest.QTest.touchEvent?4(QWindow, QTouchDevice) -> QTest.QTouchEventSequence +QtTest.QTest.QTouchEventSequence?1(QTest.QTouchEventSequence) +QtTest.QTest.QTouchEventSequence.__init__?1(self, QTest.QTouchEventSequence) +QtTest.QTest.QTouchEventSequence.press?4(int, QPoint, QWindow window=None) -> QTest.QTouchEventSequence +QtTest.QTest.QTouchEventSequence.move?4(int, QPoint, QWindow window=None) -> QTest.QTouchEventSequence +QtTest.QTest.QTouchEventSequence.release?4(int, QPoint, QWindow window=None) -> QTest.QTouchEventSequence +QtTest.QTest.QTouchEventSequence.stationary?4(int) -> QTest.QTouchEventSequence +QtTest.QTest.QTouchEventSequence.press?4(int, QPoint, QWidget) -> QTest.QTouchEventSequence +QtTest.QTest.QTouchEventSequence.move?4(int, QPoint, QWidget) -> QTest.QTouchEventSequence +QtTest.QTest.QTouchEventSequence.release?4(int, QPoint, QWidget) -> QTest.QTouchEventSequence +QtTest.QTest.QTouchEventSequence.commit?4(bool processEvents=True) +QtTextToSpeech.QTextToSpeech.State?10 +QtTextToSpeech.QTextToSpeech.State.Ready?10 +QtTextToSpeech.QTextToSpeech.State.Speaking?10 +QtTextToSpeech.QTextToSpeech.State.Paused?10 +QtTextToSpeech.QTextToSpeech.State.BackendError?10 +QtTextToSpeech.QTextToSpeech?1(QObject parent=None) +QtTextToSpeech.QTextToSpeech.__init__?1(self, QObject parent=None) +QtTextToSpeech.QTextToSpeech?1(QString, QObject parent=None) +QtTextToSpeech.QTextToSpeech.__init__?1(self, QString, QObject parent=None) +QtTextToSpeech.QTextToSpeech.state?4() -> QTextToSpeech.State +QtTextToSpeech.QTextToSpeech.availableLocales?4() -> unknown-type +QtTextToSpeech.QTextToSpeech.locale?4() -> QLocale +QtTextToSpeech.QTextToSpeech.voice?4() -> QVoice +QtTextToSpeech.QTextToSpeech.availableVoices?4() -> unknown-type +QtTextToSpeech.QTextToSpeech.rate?4() -> float +QtTextToSpeech.QTextToSpeech.pitch?4() -> float +QtTextToSpeech.QTextToSpeech.volume?4() -> float +QtTextToSpeech.QTextToSpeech.availableEngines?4() -> QStringList +QtTextToSpeech.QTextToSpeech.say?4(QString) +QtTextToSpeech.QTextToSpeech.stop?4() +QtTextToSpeech.QTextToSpeech.pause?4() +QtTextToSpeech.QTextToSpeech.resume?4() +QtTextToSpeech.QTextToSpeech.setLocale?4(QLocale) +QtTextToSpeech.QTextToSpeech.setRate?4(float) +QtTextToSpeech.QTextToSpeech.setPitch?4(float) +QtTextToSpeech.QTextToSpeech.setVolume?4(float) +QtTextToSpeech.QTextToSpeech.setVoice?4(QVoice) +QtTextToSpeech.QTextToSpeech.stateChanged?4(QTextToSpeech.State) +QtTextToSpeech.QTextToSpeech.localeChanged?4(QLocale) +QtTextToSpeech.QTextToSpeech.rateChanged?4(float) +QtTextToSpeech.QTextToSpeech.pitchChanged?4(float) +QtTextToSpeech.QTextToSpeech.volumeChanged?4(float) +QtTextToSpeech.QTextToSpeech.volumeChanged?4(int) +QtTextToSpeech.QTextToSpeech.voiceChanged?4(QVoice) +QtTextToSpeech.QVoice.Age?10 +QtTextToSpeech.QVoice.Age.Child?10 +QtTextToSpeech.QVoice.Age.Teenager?10 +QtTextToSpeech.QVoice.Age.Adult?10 +QtTextToSpeech.QVoice.Age.Senior?10 +QtTextToSpeech.QVoice.Age.Other?10 +QtTextToSpeech.QVoice.Gender?10 +QtTextToSpeech.QVoice.Gender.Male?10 +QtTextToSpeech.QVoice.Gender.Female?10 +QtTextToSpeech.QVoice.Gender.Unknown?10 +QtTextToSpeech.QVoice?1() +QtTextToSpeech.QVoice.__init__?1(self) +QtTextToSpeech.QVoice?1(QVoice) +QtTextToSpeech.QVoice.__init__?1(self, QVoice) +QtTextToSpeech.QVoice.name?4() -> QString +QtTextToSpeech.QVoice.gender?4() -> QVoice.Gender +QtTextToSpeech.QVoice.age?4() -> QVoice.Age +QtTextToSpeech.QVoice.genderName?4(QVoice.Gender) -> QString +QtTextToSpeech.QVoice.ageName?4(QVoice.Age) -> QString +QtWebChannel.QWebChannel?1(QObject parent=None) +QtWebChannel.QWebChannel.__init__?1(self, QObject parent=None) +QtWebChannel.QWebChannel.registerObjects?4(unknown-type) +QtWebChannel.QWebChannel.registeredObjects?4() -> unknown-type +QtWebChannel.QWebChannel.registerObject?4(QString, QObject) +QtWebChannel.QWebChannel.deregisterObject?4(QObject) +QtWebChannel.QWebChannel.blockUpdates?4() -> bool +QtWebChannel.QWebChannel.setBlockUpdates?4(bool) +QtWebChannel.QWebChannel.blockUpdatesChanged?4(bool) +QtWebChannel.QWebChannel.connectTo?4(QWebChannelAbstractTransport) +QtWebChannel.QWebChannel.disconnectFrom?4(QWebChannelAbstractTransport) +QtWebChannel.QWebChannelAbstractTransport?1(QObject parent=None) +QtWebChannel.QWebChannelAbstractTransport.__init__?1(self, QObject parent=None) +QtWebChannel.QWebChannelAbstractTransport.sendMessage?4(QJsonObject) +QtWebChannel.QWebChannelAbstractTransport.messageReceived?4(QJsonObject, QWebChannelAbstractTransport) +QtWebSockets.QMaskGenerator?1(QObject parent=None) +QtWebSockets.QMaskGenerator.__init__?1(self, QObject parent=None) +QtWebSockets.QMaskGenerator.seed?4() -> bool +QtWebSockets.QMaskGenerator.nextMask?4() -> int +QtWebSockets.QWebSocket?1(QString origin='', QWebSocketProtocol.Version version=QWebSocketProtocol.VersionLatest, QObject parent=None) +QtWebSockets.QWebSocket.__init__?1(self, QString origin='', QWebSocketProtocol.Version version=QWebSocketProtocol.VersionLatest, QObject parent=None) +QtWebSockets.QWebSocket.abort?4() +QtWebSockets.QWebSocket.error?4() -> QAbstractSocket.SocketError +QtWebSockets.QWebSocket.errorString?4() -> QString +QtWebSockets.QWebSocket.flush?4() -> bool +QtWebSockets.QWebSocket.isValid?4() -> bool +QtWebSockets.QWebSocket.localAddress?4() -> QHostAddress +QtWebSockets.QWebSocket.localPort?4() -> int +QtWebSockets.QWebSocket.pauseMode?4() -> QAbstractSocket.PauseModes +QtWebSockets.QWebSocket.peerAddress?4() -> QHostAddress +QtWebSockets.QWebSocket.peerName?4() -> QString +QtWebSockets.QWebSocket.peerPort?4() -> int +QtWebSockets.QWebSocket.proxy?4() -> QNetworkProxy +QtWebSockets.QWebSocket.setProxy?4(QNetworkProxy) +QtWebSockets.QWebSocket.setMaskGenerator?4(QMaskGenerator) +QtWebSockets.QWebSocket.maskGenerator?4() -> QMaskGenerator +QtWebSockets.QWebSocket.readBufferSize?4() -> int +QtWebSockets.QWebSocket.setReadBufferSize?4(int) +QtWebSockets.QWebSocket.resume?4() +QtWebSockets.QWebSocket.setPauseMode?4(QAbstractSocket.PauseModes) +QtWebSockets.QWebSocket.state?4() -> QAbstractSocket.SocketState +QtWebSockets.QWebSocket.version?4() -> QWebSocketProtocol.Version +QtWebSockets.QWebSocket.resourceName?4() -> QString +QtWebSockets.QWebSocket.requestUrl?4() -> QUrl +QtWebSockets.QWebSocket.origin?4() -> QString +QtWebSockets.QWebSocket.closeCode?4() -> QWebSocketProtocol.CloseCode +QtWebSockets.QWebSocket.closeReason?4() -> QString +QtWebSockets.QWebSocket.sendTextMessage?4(QString) -> int +QtWebSockets.QWebSocket.sendBinaryMessage?4(QByteArray) -> int +QtWebSockets.QWebSocket.ignoreSslErrors?4(unknown-type) +QtWebSockets.QWebSocket.setSslConfiguration?4(QSslConfiguration) +QtWebSockets.QWebSocket.sslConfiguration?4() -> QSslConfiguration +QtWebSockets.QWebSocket.request?4() -> QNetworkRequest +QtWebSockets.QWebSocket.close?4(QWebSocketProtocol.CloseCode closeCode=QWebSocketProtocol.CloseCodeNormal, QString reason='') +QtWebSockets.QWebSocket.open?4(QUrl) +QtWebSockets.QWebSocket.open?4(QNetworkRequest) +QtWebSockets.QWebSocket.ping?4(QByteArray payload=QByteArray()) +QtWebSockets.QWebSocket.ignoreSslErrors?4() +QtWebSockets.QWebSocket.aboutToClose?4() +QtWebSockets.QWebSocket.connected?4() +QtWebSockets.QWebSocket.disconnected?4() +QtWebSockets.QWebSocket.stateChanged?4(QAbstractSocket.SocketState) +QtWebSockets.QWebSocket.proxyAuthenticationRequired?4(QNetworkProxy, QAuthenticator) +QtWebSockets.QWebSocket.readChannelFinished?4() +QtWebSockets.QWebSocket.textFrameReceived?4(QString, bool) +QtWebSockets.QWebSocket.binaryFrameReceived?4(QByteArray, bool) +QtWebSockets.QWebSocket.textMessageReceived?4(QString) +QtWebSockets.QWebSocket.binaryMessageReceived?4(QByteArray) +QtWebSockets.QWebSocket.error?4(QAbstractSocket.SocketError) +QtWebSockets.QWebSocket.pong?4(int, QByteArray) +QtWebSockets.QWebSocket.bytesWritten?4(int) +QtWebSockets.QWebSocket.sslErrors?4(unknown-type) +QtWebSockets.QWebSocket.preSharedKeyAuthenticationRequired?4(QSslPreSharedKeyAuthenticator) +QtWebSockets.QWebSocket.bytesToWrite?4() -> int +QtWebSockets.QWebSocket.setMaxAllowedIncomingFrameSize?4(int) +QtWebSockets.QWebSocket.maxAllowedIncomingFrameSize?4() -> int +QtWebSockets.QWebSocket.setMaxAllowedIncomingMessageSize?4(int) +QtWebSockets.QWebSocket.maxAllowedIncomingMessageSize?4() -> int +QtWebSockets.QWebSocket.maxIncomingMessageSize?4() -> int +QtWebSockets.QWebSocket.maxIncomingFrameSize?4() -> int +QtWebSockets.QWebSocket.setOutgoingFrameSize?4(int) +QtWebSockets.QWebSocket.outgoingFrameSize?4() -> int +QtWebSockets.QWebSocket.maxOutgoingFrameSize?4() -> int +QtWebSockets.QWebSocketCorsAuthenticator?1(QString) +QtWebSockets.QWebSocketCorsAuthenticator.__init__?1(self, QString) +QtWebSockets.QWebSocketCorsAuthenticator?1(QWebSocketCorsAuthenticator) +QtWebSockets.QWebSocketCorsAuthenticator.__init__?1(self, QWebSocketCorsAuthenticator) +QtWebSockets.QWebSocketCorsAuthenticator.swap?4(QWebSocketCorsAuthenticator) +QtWebSockets.QWebSocketCorsAuthenticator.origin?4() -> QString +QtWebSockets.QWebSocketCorsAuthenticator.setAllowed?4(bool) +QtWebSockets.QWebSocketCorsAuthenticator.allowed?4() -> bool +QtWebSockets.QWebSocketProtocol.CloseCode?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeNormal?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeGoingAway?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeProtocolError?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeDatatypeNotSupported?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeReserved1004?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeMissingStatusCode?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeAbnormalDisconnection?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeWrongDatatype?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodePolicyViolated?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeTooMuchData?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeMissingExtension?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeBadOperation?10 +QtWebSockets.QWebSocketProtocol.CloseCode.CloseCodeTlsHandshakeFailed?10 +QtWebSockets.QWebSocketProtocol.Version?10 +QtWebSockets.QWebSocketProtocol.Version.VersionUnknown?10 +QtWebSockets.QWebSocketProtocol.Version.Version0?10 +QtWebSockets.QWebSocketProtocol.Version.Version4?10 +QtWebSockets.QWebSocketProtocol.Version.Version5?10 +QtWebSockets.QWebSocketProtocol.Version.Version6?10 +QtWebSockets.QWebSocketProtocol.Version.Version7?10 +QtWebSockets.QWebSocketProtocol.Version.Version8?10 +QtWebSockets.QWebSocketProtocol.Version.Version13?10 +QtWebSockets.QWebSocketProtocol.Version.VersionLatest?10 +QtWebSockets.QWebSocketServer.SslMode?10 +QtWebSockets.QWebSocketServer.SslMode.SecureMode?10 +QtWebSockets.QWebSocketServer.SslMode.NonSecureMode?10 +QtWebSockets.QWebSocketServer?1(QString, QWebSocketServer.SslMode, QObject parent=None) +QtWebSockets.QWebSocketServer.__init__?1(self, QString, QWebSocketServer.SslMode, QObject parent=None) +QtWebSockets.QWebSocketServer.listen?4(QHostAddress address=QHostAddress.SpecialAddress.Any, int port=0) -> bool +QtWebSockets.QWebSocketServer.close?4() +QtWebSockets.QWebSocketServer.isListening?4() -> bool +QtWebSockets.QWebSocketServer.setMaxPendingConnections?4(int) +QtWebSockets.QWebSocketServer.maxPendingConnections?4() -> int +QtWebSockets.QWebSocketServer.serverPort?4() -> int +QtWebSockets.QWebSocketServer.serverAddress?4() -> QHostAddress +QtWebSockets.QWebSocketServer.secureMode?4() -> QWebSocketServer.SslMode +QtWebSockets.QWebSocketServer.setSocketDescriptor?4(int) -> bool +QtWebSockets.QWebSocketServer.socketDescriptor?4() -> int +QtWebSockets.QWebSocketServer.hasPendingConnections?4() -> bool +QtWebSockets.QWebSocketServer.nextPendingConnection?4() -> QWebSocket +QtWebSockets.QWebSocketServer.error?4() -> QWebSocketProtocol.CloseCode +QtWebSockets.QWebSocketServer.errorString?4() -> QString +QtWebSockets.QWebSocketServer.pauseAccepting?4() +QtWebSockets.QWebSocketServer.resumeAccepting?4() +QtWebSockets.QWebSocketServer.setServerName?4(QString) +QtWebSockets.QWebSocketServer.serverName?4() -> QString +QtWebSockets.QWebSocketServer.setProxy?4(QNetworkProxy) +QtWebSockets.QWebSocketServer.proxy?4() -> QNetworkProxy +QtWebSockets.QWebSocketServer.setSslConfiguration?4(QSslConfiguration) +QtWebSockets.QWebSocketServer.sslConfiguration?4() -> QSslConfiguration +QtWebSockets.QWebSocketServer.supportedVersions?4() -> unknown-type +QtWebSockets.QWebSocketServer.serverUrl?4() -> QUrl +QtWebSockets.QWebSocketServer.handleConnection?4(QTcpSocket) +QtWebSockets.QWebSocketServer.acceptError?4(QAbstractSocket.SocketError) +QtWebSockets.QWebSocketServer.serverError?4(QWebSocketProtocol.CloseCode) +QtWebSockets.QWebSocketServer.originAuthenticationRequired?4(QWebSocketCorsAuthenticator) +QtWebSockets.QWebSocketServer.newConnection?4() +QtWebSockets.QWebSocketServer.peerVerifyError?4(QSslError) +QtWebSockets.QWebSocketServer.sslErrors?4(unknown-type) +QtWebSockets.QWebSocketServer.closed?4() +QtWebSockets.QWebSocketServer.preSharedKeyAuthenticationRequired?4(QSslPreSharedKeyAuthenticator) +QtWebSockets.QWebSocketServer.setNativeDescriptor?4(qintptr) -> bool +QtWebSockets.QWebSocketServer.nativeDescriptor?4() -> qintptr +QtWebSockets.QWebSocketServer.setHandshakeTimeout?4(int) +QtWebSockets.QWebSocketServer.handshakeTimeoutMS?4() -> int +QtX11Extras.QX11Info?1(QX11Info) +QtX11Extras.QX11Info.__init__?1(self, QX11Info) +QtX11Extras.QX11Info.isPlatformX11?4() -> bool +QtX11Extras.QX11Info.appDpiX?4(int screen=-1) -> int +QtX11Extras.QX11Info.appDpiY?4(int screen=-1) -> int +QtX11Extras.QX11Info.appRootWindow?4(int screen=-1) -> int +QtX11Extras.QX11Info.appScreen?4() -> int +QtX11Extras.QX11Info.appTime?4() -> int +QtX11Extras.QX11Info.appUserTime?4() -> int +QtX11Extras.QX11Info.setAppTime?4(int) +QtX11Extras.QX11Info.setAppUserTime?4(int) +QtX11Extras.QX11Info.getTimestamp?4() -> int +QtX11Extras.QX11Info.nextStartupId?4() -> QByteArray +QtX11Extras.QX11Info.setNextStartupId?4(QByteArray) +QtX11Extras.QX11Info.display?4() -> Display +QtX11Extras.QX11Info.connection?4() -> xcb_connection_t +QtXml.QDomImplementation.InvalidDataPolicy?10 +QtXml.QDomImplementation.InvalidDataPolicy.AcceptInvalidChars?10 +QtXml.QDomImplementation.InvalidDataPolicy.DropInvalidChars?10 +QtXml.QDomImplementation.InvalidDataPolicy.ReturnNullNode?10 +QtXml.QDomImplementation?1() +QtXml.QDomImplementation.__init__?1(self) +QtXml.QDomImplementation?1(QDomImplementation) +QtXml.QDomImplementation.__init__?1(self, QDomImplementation) +QtXml.QDomImplementation.hasFeature?4(QString, QString) -> bool +QtXml.QDomImplementation.createDocumentType?4(QString, QString, QString) -> QDomDocumentType +QtXml.QDomImplementation.createDocument?4(QString, QString, QDomDocumentType) -> QDomDocument +QtXml.QDomImplementation.invalidDataPolicy?4() -> QDomImplementation.InvalidDataPolicy +QtXml.QDomImplementation.setInvalidDataPolicy?4(QDomImplementation.InvalidDataPolicy) +QtXml.QDomImplementation.isNull?4() -> bool +QtXml.QDomNode.EncodingPolicy?10 +QtXml.QDomNode.EncodingPolicy.EncodingFromDocument?10 +QtXml.QDomNode.EncodingPolicy.EncodingFromTextStream?10 +QtXml.QDomNode.NodeType?10 +QtXml.QDomNode.NodeType.ElementNode?10 +QtXml.QDomNode.NodeType.AttributeNode?10 +QtXml.QDomNode.NodeType.TextNode?10 +QtXml.QDomNode.NodeType.CDATASectionNode?10 +QtXml.QDomNode.NodeType.EntityReferenceNode?10 +QtXml.QDomNode.NodeType.EntityNode?10 +QtXml.QDomNode.NodeType.ProcessingInstructionNode?10 +QtXml.QDomNode.NodeType.CommentNode?10 +QtXml.QDomNode.NodeType.DocumentNode?10 +QtXml.QDomNode.NodeType.DocumentTypeNode?10 +QtXml.QDomNode.NodeType.DocumentFragmentNode?10 +QtXml.QDomNode.NodeType.NotationNode?10 +QtXml.QDomNode.NodeType.BaseNode?10 +QtXml.QDomNode.NodeType.CharacterDataNode?10 +QtXml.QDomNode?1() +QtXml.QDomNode.__init__?1(self) +QtXml.QDomNode?1(QDomNode) +QtXml.QDomNode.__init__?1(self, QDomNode) +QtXml.QDomNode.insertBefore?4(QDomNode, QDomNode) -> QDomNode +QtXml.QDomNode.insertAfter?4(QDomNode, QDomNode) -> QDomNode +QtXml.QDomNode.replaceChild?4(QDomNode, QDomNode) -> QDomNode +QtXml.QDomNode.removeChild?4(QDomNode) -> QDomNode +QtXml.QDomNode.appendChild?4(QDomNode) -> QDomNode +QtXml.QDomNode.hasChildNodes?4() -> bool +QtXml.QDomNode.cloneNode?4(bool deep=True) -> QDomNode +QtXml.QDomNode.normalize?4() +QtXml.QDomNode.isSupported?4(QString, QString) -> bool +QtXml.QDomNode.nodeName?4() -> QString +QtXml.QDomNode.nodeType?4() -> QDomNode.NodeType +QtXml.QDomNode.parentNode?4() -> QDomNode +QtXml.QDomNode.childNodes?4() -> QDomNodeList +QtXml.QDomNode.firstChild?4() -> QDomNode +QtXml.QDomNode.lastChild?4() -> QDomNode +QtXml.QDomNode.previousSibling?4() -> QDomNode +QtXml.QDomNode.nextSibling?4() -> QDomNode +QtXml.QDomNode.attributes?4() -> QDomNamedNodeMap +QtXml.QDomNode.ownerDocument?4() -> QDomDocument +QtXml.QDomNode.namespaceURI?4() -> QString +QtXml.QDomNode.localName?4() -> QString +QtXml.QDomNode.hasAttributes?4() -> bool +QtXml.QDomNode.nodeValue?4() -> QString +QtXml.QDomNode.setNodeValue?4(QString) +QtXml.QDomNode.prefix?4() -> QString +QtXml.QDomNode.setPrefix?4(QString) +QtXml.QDomNode.isAttr?4() -> bool +QtXml.QDomNode.isCDATASection?4() -> bool +QtXml.QDomNode.isDocumentFragment?4() -> bool +QtXml.QDomNode.isDocument?4() -> bool +QtXml.QDomNode.isDocumentType?4() -> bool +QtXml.QDomNode.isElement?4() -> bool +QtXml.QDomNode.isEntityReference?4() -> bool +QtXml.QDomNode.isText?4() -> bool +QtXml.QDomNode.isEntity?4() -> bool +QtXml.QDomNode.isNotation?4() -> bool +QtXml.QDomNode.isProcessingInstruction?4() -> bool +QtXml.QDomNode.isCharacterData?4() -> bool +QtXml.QDomNode.isComment?4() -> bool +QtXml.QDomNode.namedItem?4(QString) -> QDomNode +QtXml.QDomNode.isNull?4() -> bool +QtXml.QDomNode.clear?4() +QtXml.QDomNode.toAttr?4() -> QDomAttr +QtXml.QDomNode.toCDATASection?4() -> QDomCDATASection +QtXml.QDomNode.toDocumentFragment?4() -> QDomDocumentFragment +QtXml.QDomNode.toDocument?4() -> QDomDocument +QtXml.QDomNode.toDocumentType?4() -> QDomDocumentType +QtXml.QDomNode.toElement?4() -> QDomElement +QtXml.QDomNode.toEntityReference?4() -> QDomEntityReference +QtXml.QDomNode.toText?4() -> QDomText +QtXml.QDomNode.toEntity?4() -> QDomEntity +QtXml.QDomNode.toNotation?4() -> QDomNotation +QtXml.QDomNode.toProcessingInstruction?4() -> QDomProcessingInstruction +QtXml.QDomNode.toCharacterData?4() -> QDomCharacterData +QtXml.QDomNode.toComment?4() -> QDomComment +QtXml.QDomNode.save?4(QTextStream, int, QDomNode.EncodingPolicy=QDomNode.EncodingFromDocument) +QtXml.QDomNode.firstChildElement?4(QString tagName='') -> QDomElement +QtXml.QDomNode.lastChildElement?4(QString tagName='') -> QDomElement +QtXml.QDomNode.previousSiblingElement?4(QString tagName='') -> QDomElement +QtXml.QDomNode.nextSiblingElement?4(QString taName='') -> QDomElement +QtXml.QDomNode.lineNumber?4() -> int +QtXml.QDomNode.columnNumber?4() -> int +QtXml.QDomNodeList?1() +QtXml.QDomNodeList.__init__?1(self) +QtXml.QDomNodeList?1(QDomNodeList) +QtXml.QDomNodeList.__init__?1(self, QDomNodeList) +QtXml.QDomNodeList.item?4(int) -> QDomNode +QtXml.QDomNodeList.at?4(int) -> QDomNode +QtXml.QDomNodeList.length?4() -> int +QtXml.QDomNodeList.count?4() -> int +QtXml.QDomNodeList.size?4() -> int +QtXml.QDomNodeList.isEmpty?4() -> bool +QtXml.QDomDocumentType?1() +QtXml.QDomDocumentType.__init__?1(self) +QtXml.QDomDocumentType?1(QDomDocumentType) +QtXml.QDomDocumentType.__init__?1(self, QDomDocumentType) +QtXml.QDomDocumentType.name?4() -> QString +QtXml.QDomDocumentType.entities?4() -> QDomNamedNodeMap +QtXml.QDomDocumentType.notations?4() -> QDomNamedNodeMap +QtXml.QDomDocumentType.publicId?4() -> QString +QtXml.QDomDocumentType.systemId?4() -> QString +QtXml.QDomDocumentType.internalSubset?4() -> QString +QtXml.QDomDocumentType.nodeType?4() -> QDomNode.NodeType +QtXml.QDomDocument?1() +QtXml.QDomDocument.__init__?1(self) +QtXml.QDomDocument?1(QString) +QtXml.QDomDocument.__init__?1(self, QString) +QtXml.QDomDocument?1(QDomDocumentType) +QtXml.QDomDocument.__init__?1(self, QDomDocumentType) +QtXml.QDomDocument?1(QDomDocument) +QtXml.QDomDocument.__init__?1(self, QDomDocument) +QtXml.QDomDocument.createElement?4(QString) -> QDomElement +QtXml.QDomDocument.createDocumentFragment?4() -> QDomDocumentFragment +QtXml.QDomDocument.createTextNode?4(QString) -> QDomText +QtXml.QDomDocument.createComment?4(QString) -> QDomComment +QtXml.QDomDocument.createCDATASection?4(QString) -> QDomCDATASection +QtXml.QDomDocument.createProcessingInstruction?4(QString, QString) -> QDomProcessingInstruction +QtXml.QDomDocument.createAttribute?4(QString) -> QDomAttr +QtXml.QDomDocument.createEntityReference?4(QString) -> QDomEntityReference +QtXml.QDomDocument.elementsByTagName?4(QString) -> QDomNodeList +QtXml.QDomDocument.importNode?4(QDomNode, bool) -> QDomNode +QtXml.QDomDocument.createElementNS?4(QString, QString) -> QDomElement +QtXml.QDomDocument.createAttributeNS?4(QString, QString) -> QDomAttr +QtXml.QDomDocument.elementsByTagNameNS?4(QString, QString) -> QDomNodeList +QtXml.QDomDocument.elementById?4(QString) -> QDomElement +QtXml.QDomDocument.doctype?4() -> QDomDocumentType +QtXml.QDomDocument.implementation?4() -> QDomImplementation +QtXml.QDomDocument.documentElement?4() -> QDomElement +QtXml.QDomDocument.nodeType?4() -> QDomNode.NodeType +QtXml.QDomDocument.setContent?4(QByteArray, bool) -> (bool, QString, int, int) +QtXml.QDomDocument.setContent?4(QString, bool) -> (bool, QString, int, int) +QtXml.QDomDocument.setContent?4(QIODevice, bool) -> (bool, QString, int, int) +QtXml.QDomDocument.setContent?4(QXmlInputSource, bool) -> (bool, QString, int, int) +QtXml.QDomDocument.setContent?4(QByteArray) -> (bool, QString, int, int) +QtXml.QDomDocument.setContent?4(QString) -> (bool, QString, int, int) +QtXml.QDomDocument.setContent?4(QIODevice) -> (bool, QString, int, int) +QtXml.QDomDocument.setContent?4(QXmlInputSource, QXmlReader) -> (bool, QString, int, int) +QtXml.QDomDocument.setContent?4(QXmlStreamReader, bool) -> (bool, QString, int, int) +QtXml.QDomDocument.toString?4(int indent=1) -> QString +QtXml.QDomDocument.toByteArray?4(int indent=1) -> QByteArray +QtXml.QDomNamedNodeMap?1() +QtXml.QDomNamedNodeMap.__init__?1(self) +QtXml.QDomNamedNodeMap?1(QDomNamedNodeMap) +QtXml.QDomNamedNodeMap.__init__?1(self, QDomNamedNodeMap) +QtXml.QDomNamedNodeMap.namedItem?4(QString) -> QDomNode +QtXml.QDomNamedNodeMap.setNamedItem?4(QDomNode) -> QDomNode +QtXml.QDomNamedNodeMap.removeNamedItem?4(QString) -> QDomNode +QtXml.QDomNamedNodeMap.item?4(int) -> QDomNode +QtXml.QDomNamedNodeMap.namedItemNS?4(QString, QString) -> QDomNode +QtXml.QDomNamedNodeMap.setNamedItemNS?4(QDomNode) -> QDomNode +QtXml.QDomNamedNodeMap.removeNamedItemNS?4(QString, QString) -> QDomNode +QtXml.QDomNamedNodeMap.length?4() -> int +QtXml.QDomNamedNodeMap.count?4() -> int +QtXml.QDomNamedNodeMap.size?4() -> int +QtXml.QDomNamedNodeMap.isEmpty?4() -> bool +QtXml.QDomNamedNodeMap.contains?4(QString) -> bool +QtXml.QDomDocumentFragment?1() +QtXml.QDomDocumentFragment.__init__?1(self) +QtXml.QDomDocumentFragment?1(QDomDocumentFragment) +QtXml.QDomDocumentFragment.__init__?1(self, QDomDocumentFragment) +QtXml.QDomDocumentFragment.nodeType?4() -> QDomNode.NodeType +QtXml.QDomCharacterData?1() +QtXml.QDomCharacterData.__init__?1(self) +QtXml.QDomCharacterData?1(QDomCharacterData) +QtXml.QDomCharacterData.__init__?1(self, QDomCharacterData) +QtXml.QDomCharacterData.substringData?4(int, int) -> QString +QtXml.QDomCharacterData.appendData?4(QString) +QtXml.QDomCharacterData.insertData?4(int, QString) +QtXml.QDomCharacterData.deleteData?4(int, int) +QtXml.QDomCharacterData.replaceData?4(int, int, QString) +QtXml.QDomCharacterData.length?4() -> int +QtXml.QDomCharacterData.data?4() -> QString +QtXml.QDomCharacterData.setData?4(QString) +QtXml.QDomCharacterData.nodeType?4() -> QDomNode.NodeType +QtXml.QDomAttr?1() +QtXml.QDomAttr.__init__?1(self) +QtXml.QDomAttr?1(QDomAttr) +QtXml.QDomAttr.__init__?1(self, QDomAttr) +QtXml.QDomAttr.name?4() -> QString +QtXml.QDomAttr.specified?4() -> bool +QtXml.QDomAttr.ownerElement?4() -> QDomElement +QtXml.QDomAttr.value?4() -> QString +QtXml.QDomAttr.setValue?4(QString) +QtXml.QDomAttr.nodeType?4() -> QDomNode.NodeType +QtXml.QDomElement?1() +QtXml.QDomElement.__init__?1(self) +QtXml.QDomElement?1(QDomElement) +QtXml.QDomElement.__init__?1(self, QDomElement) +QtXml.QDomElement.attribute?4(QString, QString defaultValue='') -> QString +QtXml.QDomElement.setAttribute?4(QString, QString) +QtXml.QDomElement.setAttribute?4(QString, int) +QtXml.QDomElement.setAttribute?4(QString, int) +QtXml.QDomElement.setAttribute?4(QString, float) +QtXml.QDomElement.setAttribute?4(QString, int) +QtXml.QDomElement.removeAttribute?4(QString) +QtXml.QDomElement.attributeNode?4(QString) -> QDomAttr +QtXml.QDomElement.setAttributeNode?4(QDomAttr) -> QDomAttr +QtXml.QDomElement.removeAttributeNode?4(QDomAttr) -> QDomAttr +QtXml.QDomElement.elementsByTagName?4(QString) -> QDomNodeList +QtXml.QDomElement.hasAttribute?4(QString) -> bool +QtXml.QDomElement.attributeNS?4(QString, QString, QString defaultValue='') -> QString +QtXml.QDomElement.setAttributeNS?4(QString, QString, QString) +QtXml.QDomElement.setAttributeNS?4(QString, QString, int) +QtXml.QDomElement.setAttributeNS?4(QString, QString, int) +QtXml.QDomElement.setAttributeNS?4(QString, QString, float) +QtXml.QDomElement.setAttributeNS?4(QString, QString, int) +QtXml.QDomElement.removeAttributeNS?4(QString, QString) +QtXml.QDomElement.attributeNodeNS?4(QString, QString) -> QDomAttr +QtXml.QDomElement.setAttributeNodeNS?4(QDomAttr) -> QDomAttr +QtXml.QDomElement.elementsByTagNameNS?4(QString, QString) -> QDomNodeList +QtXml.QDomElement.hasAttributeNS?4(QString, QString) -> bool +QtXml.QDomElement.tagName?4() -> QString +QtXml.QDomElement.setTagName?4(QString) +QtXml.QDomElement.attributes?4() -> QDomNamedNodeMap +QtXml.QDomElement.nodeType?4() -> QDomNode.NodeType +QtXml.QDomElement.text?4() -> QString +QtXml.QDomText?1() +QtXml.QDomText.__init__?1(self) +QtXml.QDomText?1(QDomText) +QtXml.QDomText.__init__?1(self, QDomText) +QtXml.QDomText.splitText?4(int) -> QDomText +QtXml.QDomText.nodeType?4() -> QDomNode.NodeType +QtXml.QDomComment?1() +QtXml.QDomComment.__init__?1(self) +QtXml.QDomComment?1(QDomComment) +QtXml.QDomComment.__init__?1(self, QDomComment) +QtXml.QDomComment.nodeType?4() -> QDomNode.NodeType +QtXml.QDomCDATASection?1() +QtXml.QDomCDATASection.__init__?1(self) +QtXml.QDomCDATASection?1(QDomCDATASection) +QtXml.QDomCDATASection.__init__?1(self, QDomCDATASection) +QtXml.QDomCDATASection.nodeType?4() -> QDomNode.NodeType +QtXml.QDomNotation?1() +QtXml.QDomNotation.__init__?1(self) +QtXml.QDomNotation?1(QDomNotation) +QtXml.QDomNotation.__init__?1(self, QDomNotation) +QtXml.QDomNotation.publicId?4() -> QString +QtXml.QDomNotation.systemId?4() -> QString +QtXml.QDomNotation.nodeType?4() -> QDomNode.NodeType +QtXml.QDomEntity?1() +QtXml.QDomEntity.__init__?1(self) +QtXml.QDomEntity?1(QDomEntity) +QtXml.QDomEntity.__init__?1(self, QDomEntity) +QtXml.QDomEntity.publicId?4() -> QString +QtXml.QDomEntity.systemId?4() -> QString +QtXml.QDomEntity.notationName?4() -> QString +QtXml.QDomEntity.nodeType?4() -> QDomNode.NodeType +QtXml.QDomEntityReference?1() +QtXml.QDomEntityReference.__init__?1(self) +QtXml.QDomEntityReference?1(QDomEntityReference) +QtXml.QDomEntityReference.__init__?1(self, QDomEntityReference) +QtXml.QDomEntityReference.nodeType?4() -> QDomNode.NodeType +QtXml.QDomProcessingInstruction?1() +QtXml.QDomProcessingInstruction.__init__?1(self) +QtXml.QDomProcessingInstruction?1(QDomProcessingInstruction) +QtXml.QDomProcessingInstruction.__init__?1(self, QDomProcessingInstruction) +QtXml.QDomProcessingInstruction.target?4() -> QString +QtXml.QDomProcessingInstruction.data?4() -> QString +QtXml.QDomProcessingInstruction.setData?4(QString) +QtXml.QDomProcessingInstruction.nodeType?4() -> QDomNode.NodeType +QtXml.QXmlNamespaceSupport?1() +QtXml.QXmlNamespaceSupport.__init__?1(self) +QtXml.QXmlNamespaceSupport.setPrefix?4(QString, QString) +QtXml.QXmlNamespaceSupport.prefix?4(QString) -> QString +QtXml.QXmlNamespaceSupport.uri?4(QString) -> QString +QtXml.QXmlNamespaceSupport.splitName?4(QString, QString, QString) +QtXml.QXmlNamespaceSupport.processName?4(QString, bool, QString, QString) +QtXml.QXmlNamespaceSupport.prefixes?4() -> QStringList +QtXml.QXmlNamespaceSupport.prefixes?4(QString) -> QStringList +QtXml.QXmlNamespaceSupport.pushContext?4() +QtXml.QXmlNamespaceSupport.popContext?4() +QtXml.QXmlNamespaceSupport.reset?4() +QtXml.QXmlAttributes?1() +QtXml.QXmlAttributes.__init__?1(self) +QtXml.QXmlAttributes?1(QXmlAttributes) +QtXml.QXmlAttributes.__init__?1(self, QXmlAttributes) +QtXml.QXmlAttributes.index?4(QString) -> int +QtXml.QXmlAttributes.index?4(QString, QString) -> int +QtXml.QXmlAttributes.length?4() -> int +QtXml.QXmlAttributes.localName?4(int) -> QString +QtXml.QXmlAttributes.qName?4(int) -> QString +QtXml.QXmlAttributes.uri?4(int) -> QString +QtXml.QXmlAttributes.type?4(int) -> QString +QtXml.QXmlAttributes.type?4(QString) -> QString +QtXml.QXmlAttributes.type?4(QString, QString) -> QString +QtXml.QXmlAttributes.value?4(int) -> QString +QtXml.QXmlAttributes.value?4(QString) -> QString +QtXml.QXmlAttributes.value?4(QString, QString) -> QString +QtXml.QXmlAttributes.clear?4() +QtXml.QXmlAttributes.append?4(QString, QString, QString, QString) +QtXml.QXmlAttributes.count?4() -> int +QtXml.QXmlAttributes.swap?4(QXmlAttributes) +QtXml.QXmlInputSource.EndOfData?7 +QtXml.QXmlInputSource.EndOfDocument?7 +QtXml.QXmlInputSource?1() +QtXml.QXmlInputSource.__init__?1(self) +QtXml.QXmlInputSource?1(QIODevice) +QtXml.QXmlInputSource.__init__?1(self, QIODevice) +QtXml.QXmlInputSource?1(QXmlInputSource) +QtXml.QXmlInputSource.__init__?1(self, QXmlInputSource) +QtXml.QXmlInputSource.setData?4(QString) +QtXml.QXmlInputSource.setData?4(QByteArray) +QtXml.QXmlInputSource.fetchData?4() +QtXml.QXmlInputSource.data?4() -> QString +QtXml.QXmlInputSource.next?4() -> QChar +QtXml.QXmlInputSource.reset?4() +QtXml.QXmlInputSource.fromRawData?4(QByteArray, bool beginning=False) -> QString +QtXml.QXmlParseException?1(QString name='', int column=-1, int line=-1, QString publicId='', QString systemId='') +QtXml.QXmlParseException.__init__?1(self, QString name='', int column=-1, int line=-1, QString publicId='', QString systemId='') +QtXml.QXmlParseException?1(QXmlParseException) +QtXml.QXmlParseException.__init__?1(self, QXmlParseException) +QtXml.QXmlParseException.columnNumber?4() -> int +QtXml.QXmlParseException.lineNumber?4() -> int +QtXml.QXmlParseException.publicId?4() -> QString +QtXml.QXmlParseException.systemId?4() -> QString +QtXml.QXmlParseException.message?4() -> QString +QtXml.QXmlReader?1() +QtXml.QXmlReader.__init__?1(self) +QtXml.QXmlReader?1(QXmlReader) +QtXml.QXmlReader.__init__?1(self, QXmlReader) +QtXml.QXmlReader.feature?4(QString) -> (bool, bool) +QtXml.QXmlReader.setFeature?4(QString, bool) +QtXml.QXmlReader.hasFeature?4(QString) -> bool +QtXml.QXmlReader.property?4(QString) -> (PyQt5.sip.voidptr, bool) +QtXml.QXmlReader.setProperty?4(QString, PyQt5.sip.voidptr) +QtXml.QXmlReader.hasProperty?4(QString) -> bool +QtXml.QXmlReader.setEntityResolver?4(QXmlEntityResolver) +QtXml.QXmlReader.entityResolver?4() -> QXmlEntityResolver +QtXml.QXmlReader.setDTDHandler?4(QXmlDTDHandler) +QtXml.QXmlReader.DTDHandler?4() -> QXmlDTDHandler +QtXml.QXmlReader.setContentHandler?4(QXmlContentHandler) +QtXml.QXmlReader.contentHandler?4() -> QXmlContentHandler +QtXml.QXmlReader.setErrorHandler?4(QXmlErrorHandler) +QtXml.QXmlReader.errorHandler?4() -> QXmlErrorHandler +QtXml.QXmlReader.setLexicalHandler?4(QXmlLexicalHandler) +QtXml.QXmlReader.lexicalHandler?4() -> QXmlLexicalHandler +QtXml.QXmlReader.setDeclHandler?4(QXmlDeclHandler) +QtXml.QXmlReader.declHandler?4() -> QXmlDeclHandler +QtXml.QXmlReader.parse?4(QXmlInputSource) -> bool +QtXml.QXmlReader.parse?4(QXmlInputSource) -> bool +QtXml.QXmlSimpleReader?1() +QtXml.QXmlSimpleReader.__init__?1(self) +QtXml.QXmlSimpleReader.feature?4(QString) -> (bool, bool) +QtXml.QXmlSimpleReader.setFeature?4(QString, bool) +QtXml.QXmlSimpleReader.hasFeature?4(QString) -> bool +QtXml.QXmlSimpleReader.property?4(QString) -> (PyQt5.sip.voidptr, bool) +QtXml.QXmlSimpleReader.setProperty?4(QString, PyQt5.sip.voidptr) +QtXml.QXmlSimpleReader.hasProperty?4(QString) -> bool +QtXml.QXmlSimpleReader.setEntityResolver?4(QXmlEntityResolver) +QtXml.QXmlSimpleReader.entityResolver?4() -> QXmlEntityResolver +QtXml.QXmlSimpleReader.setDTDHandler?4(QXmlDTDHandler) +QtXml.QXmlSimpleReader.DTDHandler?4() -> QXmlDTDHandler +QtXml.QXmlSimpleReader.setContentHandler?4(QXmlContentHandler) +QtXml.QXmlSimpleReader.contentHandler?4() -> QXmlContentHandler +QtXml.QXmlSimpleReader.setErrorHandler?4(QXmlErrorHandler) +QtXml.QXmlSimpleReader.errorHandler?4() -> QXmlErrorHandler +QtXml.QXmlSimpleReader.setLexicalHandler?4(QXmlLexicalHandler) +QtXml.QXmlSimpleReader.lexicalHandler?4() -> QXmlLexicalHandler +QtXml.QXmlSimpleReader.setDeclHandler?4(QXmlDeclHandler) +QtXml.QXmlSimpleReader.declHandler?4() -> QXmlDeclHandler +QtXml.QXmlSimpleReader.parse?4(QXmlInputSource) -> bool +QtXml.QXmlSimpleReader.parse?4(QXmlInputSource, bool) -> bool +QtXml.QXmlSimpleReader.parseContinue?4() -> bool +QtXml.QXmlLocator?1() +QtXml.QXmlLocator.__init__?1(self) +QtXml.QXmlLocator?1(QXmlLocator) +QtXml.QXmlLocator.__init__?1(self, QXmlLocator) +QtXml.QXmlLocator.columnNumber?4() -> int +QtXml.QXmlLocator.lineNumber?4() -> int +QtXml.QXmlContentHandler?1() +QtXml.QXmlContentHandler.__init__?1(self) +QtXml.QXmlContentHandler?1(QXmlContentHandler) +QtXml.QXmlContentHandler.__init__?1(self, QXmlContentHandler) +QtXml.QXmlContentHandler.setDocumentLocator?4(QXmlLocator) +QtXml.QXmlContentHandler.startDocument?4() -> bool +QtXml.QXmlContentHandler.endDocument?4() -> bool +QtXml.QXmlContentHandler.startPrefixMapping?4(QString, QString) -> bool +QtXml.QXmlContentHandler.endPrefixMapping?4(QString) -> bool +QtXml.QXmlContentHandler.startElement?4(QString, QString, QString, QXmlAttributes) -> bool +QtXml.QXmlContentHandler.endElement?4(QString, QString, QString) -> bool +QtXml.QXmlContentHandler.characters?4(QString) -> bool +QtXml.QXmlContentHandler.ignorableWhitespace?4(QString) -> bool +QtXml.QXmlContentHandler.processingInstruction?4(QString, QString) -> bool +QtXml.QXmlContentHandler.skippedEntity?4(QString) -> bool +QtXml.QXmlContentHandler.errorString?4() -> QString +QtXml.QXmlErrorHandler?1() +QtXml.QXmlErrorHandler.__init__?1(self) +QtXml.QXmlErrorHandler?1(QXmlErrorHandler) +QtXml.QXmlErrorHandler.__init__?1(self, QXmlErrorHandler) +QtXml.QXmlErrorHandler.warning?4(QXmlParseException) -> bool +QtXml.QXmlErrorHandler.error?4(QXmlParseException) -> bool +QtXml.QXmlErrorHandler.fatalError?4(QXmlParseException) -> bool +QtXml.QXmlErrorHandler.errorString?4() -> QString +QtXml.QXmlDTDHandler?1() +QtXml.QXmlDTDHandler.__init__?1(self) +QtXml.QXmlDTDHandler?1(QXmlDTDHandler) +QtXml.QXmlDTDHandler.__init__?1(self, QXmlDTDHandler) +QtXml.QXmlDTDHandler.notationDecl?4(QString, QString, QString) -> bool +QtXml.QXmlDTDHandler.unparsedEntityDecl?4(QString, QString, QString, QString) -> bool +QtXml.QXmlDTDHandler.errorString?4() -> QString +QtXml.QXmlEntityResolver?1() +QtXml.QXmlEntityResolver.__init__?1(self) +QtXml.QXmlEntityResolver?1(QXmlEntityResolver) +QtXml.QXmlEntityResolver.__init__?1(self, QXmlEntityResolver) +QtXml.QXmlEntityResolver.resolveEntity?4(QString, QString) -> (bool, QXmlInputSource) +QtXml.QXmlEntityResolver.errorString?4() -> QString +QtXml.QXmlLexicalHandler?1() +QtXml.QXmlLexicalHandler.__init__?1(self) +QtXml.QXmlLexicalHandler?1(QXmlLexicalHandler) +QtXml.QXmlLexicalHandler.__init__?1(self, QXmlLexicalHandler) +QtXml.QXmlLexicalHandler.startDTD?4(QString, QString, QString) -> bool +QtXml.QXmlLexicalHandler.endDTD?4() -> bool +QtXml.QXmlLexicalHandler.startEntity?4(QString) -> bool +QtXml.QXmlLexicalHandler.endEntity?4(QString) -> bool +QtXml.QXmlLexicalHandler.startCDATA?4() -> bool +QtXml.QXmlLexicalHandler.endCDATA?4() -> bool +QtXml.QXmlLexicalHandler.comment?4(QString) -> bool +QtXml.QXmlLexicalHandler.errorString?4() -> QString +QtXml.QXmlDeclHandler?1() +QtXml.QXmlDeclHandler.__init__?1(self) +QtXml.QXmlDeclHandler?1(QXmlDeclHandler) +QtXml.QXmlDeclHandler.__init__?1(self, QXmlDeclHandler) +QtXml.QXmlDeclHandler.attributeDecl?4(QString, QString, QString, QString, QString) -> bool +QtXml.QXmlDeclHandler.internalEntityDecl?4(QString, QString) -> bool +QtXml.QXmlDeclHandler.externalEntityDecl?4(QString, QString, QString) -> bool +QtXml.QXmlDeclHandler.errorString?4() -> QString +QtXml.QXmlDefaultHandler?1() +QtXml.QXmlDefaultHandler.__init__?1(self) +QtXml.QXmlDefaultHandler.setDocumentLocator?4(QXmlLocator) +QtXml.QXmlDefaultHandler.startDocument?4() -> bool +QtXml.QXmlDefaultHandler.endDocument?4() -> bool +QtXml.QXmlDefaultHandler.startPrefixMapping?4(QString, QString) -> bool +QtXml.QXmlDefaultHandler.endPrefixMapping?4(QString) -> bool +QtXml.QXmlDefaultHandler.startElement?4(QString, QString, QString, QXmlAttributes) -> bool +QtXml.QXmlDefaultHandler.endElement?4(QString, QString, QString) -> bool +QtXml.QXmlDefaultHandler.characters?4(QString) -> bool +QtXml.QXmlDefaultHandler.ignorableWhitespace?4(QString) -> bool +QtXml.QXmlDefaultHandler.processingInstruction?4(QString, QString) -> bool +QtXml.QXmlDefaultHandler.skippedEntity?4(QString) -> bool +QtXml.QXmlDefaultHandler.warning?4(QXmlParseException) -> bool +QtXml.QXmlDefaultHandler.error?4(QXmlParseException) -> bool +QtXml.QXmlDefaultHandler.fatalError?4(QXmlParseException) -> bool +QtXml.QXmlDefaultHandler.notationDecl?4(QString, QString, QString) -> bool +QtXml.QXmlDefaultHandler.unparsedEntityDecl?4(QString, QString, QString, QString) -> bool +QtXml.QXmlDefaultHandler.resolveEntity?4(QString, QString) -> (bool, QXmlInputSource) +QtXml.QXmlDefaultHandler.startDTD?4(QString, QString, QString) -> bool +QtXml.QXmlDefaultHandler.endDTD?4() -> bool +QtXml.QXmlDefaultHandler.startEntity?4(QString) -> bool +QtXml.QXmlDefaultHandler.endEntity?4(QString) -> bool +QtXml.QXmlDefaultHandler.startCDATA?4() -> bool +QtXml.QXmlDefaultHandler.endCDATA?4() -> bool +QtXml.QXmlDefaultHandler.comment?4(QString) -> bool +QtXml.QXmlDefaultHandler.attributeDecl?4(QString, QString, QString, QString, QString) -> bool +QtXml.QXmlDefaultHandler.internalEntityDecl?4(QString, QString) -> bool +QtXml.QXmlDefaultHandler.externalEntityDecl?4(QString, QString, QString) -> bool +QtXml.QXmlDefaultHandler.errorString?4() -> QString +QtXmlPatterns.QAbstractMessageHandler?1(QObject parent=None) +QtXmlPatterns.QAbstractMessageHandler.__init__?1(self, QObject parent=None) +QtXmlPatterns.QAbstractMessageHandler.message?4(QtMsgType, QString, QUrl identifier=QUrl(), QSourceLocation sourceLocation=QSourceLocation()) +QtXmlPatterns.QAbstractMessageHandler.handleMessage?4(QtMsgType, QString, QUrl, QSourceLocation) +QtXmlPatterns.QAbstractUriResolver?1(QObject parent=None) +QtXmlPatterns.QAbstractUriResolver.__init__?1(self, QObject parent=None) +QtXmlPatterns.QAbstractUriResolver.resolve?4(QUrl, QUrl) -> QUrl +QtXmlPatterns.QXmlNodeModelIndex.DocumentOrder?10 +QtXmlPatterns.QXmlNodeModelIndex.DocumentOrder.Precedes?10 +QtXmlPatterns.QXmlNodeModelIndex.DocumentOrder.Is?10 +QtXmlPatterns.QXmlNodeModelIndex.DocumentOrder.Follows?10 +QtXmlPatterns.QXmlNodeModelIndex.NodeKind?10 +QtXmlPatterns.QXmlNodeModelIndex.NodeKind.Attribute?10 +QtXmlPatterns.QXmlNodeModelIndex.NodeKind.Comment?10 +QtXmlPatterns.QXmlNodeModelIndex.NodeKind.Document?10 +QtXmlPatterns.QXmlNodeModelIndex.NodeKind.Element?10 +QtXmlPatterns.QXmlNodeModelIndex.NodeKind.Namespace?10 +QtXmlPatterns.QXmlNodeModelIndex.NodeKind.ProcessingInstruction?10 +QtXmlPatterns.QXmlNodeModelIndex.NodeKind.Text?10 +QtXmlPatterns.QXmlNodeModelIndex?1() +QtXmlPatterns.QXmlNodeModelIndex.__init__?1(self) +QtXmlPatterns.QXmlNodeModelIndex?1(QXmlNodeModelIndex) +QtXmlPatterns.QXmlNodeModelIndex.__init__?1(self, QXmlNodeModelIndex) +QtXmlPatterns.QXmlNodeModelIndex.data?4() -> int +QtXmlPatterns.QXmlNodeModelIndex.internalPointer?4() -> Any +QtXmlPatterns.QXmlNodeModelIndex.model?4() -> QAbstractXmlNodeModel +QtXmlPatterns.QXmlNodeModelIndex.additionalData?4() -> int +QtXmlPatterns.QXmlNodeModelIndex.isNull?4() -> bool +QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis?10 +QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis.Parent?10 +QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis.FirstChild?10 +QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis.PreviousSibling?10 +QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis.NextSibling?10 +QtXmlPatterns.QAbstractXmlNodeModel?1() +QtXmlPatterns.QAbstractXmlNodeModel.__init__?1(self) +QtXmlPatterns.QAbstractXmlNodeModel.baseUri?4(QXmlNodeModelIndex) -> QUrl +QtXmlPatterns.QAbstractXmlNodeModel.documentUri?4(QXmlNodeModelIndex) -> QUrl +QtXmlPatterns.QAbstractXmlNodeModel.kind?4(QXmlNodeModelIndex) -> QXmlNodeModelIndex.NodeKind +QtXmlPatterns.QAbstractXmlNodeModel.compareOrder?4(QXmlNodeModelIndex, QXmlNodeModelIndex) -> QXmlNodeModelIndex.DocumentOrder +QtXmlPatterns.QAbstractXmlNodeModel.root?4(QXmlNodeModelIndex) -> QXmlNodeModelIndex +QtXmlPatterns.QAbstractXmlNodeModel.name?4(QXmlNodeModelIndex) -> QXmlName +QtXmlPatterns.QAbstractXmlNodeModel.stringValue?4(QXmlNodeModelIndex) -> QString +QtXmlPatterns.QAbstractXmlNodeModel.typedValue?4(QXmlNodeModelIndex) -> QVariant +QtXmlPatterns.QAbstractXmlNodeModel.namespaceBindings?4(QXmlNodeModelIndex) -> unknown-type +QtXmlPatterns.QAbstractXmlNodeModel.elementById?4(QXmlName) -> QXmlNodeModelIndex +QtXmlPatterns.QAbstractXmlNodeModel.nodesByIdref?4(QXmlName) -> unknown-type +QtXmlPatterns.QAbstractXmlNodeModel.sourceLocation?4(QXmlNodeModelIndex) -> QSourceLocation +QtXmlPatterns.QAbstractXmlNodeModel.nextFromSimpleAxis?4(QAbstractXmlNodeModel.SimpleAxis, QXmlNodeModelIndex) -> QXmlNodeModelIndex +QtXmlPatterns.QAbstractXmlNodeModel.attributes?4(QXmlNodeModelIndex) -> unknown-type +QtXmlPatterns.QAbstractXmlNodeModel.createIndex?4(int) -> QXmlNodeModelIndex +QtXmlPatterns.QAbstractXmlNodeModel.createIndex?4(int, int) -> QXmlNodeModelIndex +QtXmlPatterns.QAbstractXmlNodeModel.createIndex?4(Any, int additionalData=0) -> QXmlNodeModelIndex +QtXmlPatterns.QXmlItem?1() +QtXmlPatterns.QXmlItem.__init__?1(self) +QtXmlPatterns.QXmlItem?1(QXmlItem) +QtXmlPatterns.QXmlItem.__init__?1(self, QXmlItem) +QtXmlPatterns.QXmlItem?1(QXmlNodeModelIndex) +QtXmlPatterns.QXmlItem.__init__?1(self, QXmlNodeModelIndex) +QtXmlPatterns.QXmlItem?1(QVariant) +QtXmlPatterns.QXmlItem.__init__?1(self, QVariant) +QtXmlPatterns.QXmlItem.isNull?4() -> bool +QtXmlPatterns.QXmlItem.isNode?4() -> bool +QtXmlPatterns.QXmlItem.isAtomicValue?4() -> bool +QtXmlPatterns.QXmlItem.toAtomicValue?4() -> QVariant +QtXmlPatterns.QXmlItem.toNodeModelIndex?4() -> QXmlNodeModelIndex +QtXmlPatterns.QAbstractXmlReceiver?1() +QtXmlPatterns.QAbstractXmlReceiver.__init__?1(self) +QtXmlPatterns.QAbstractXmlReceiver.startElement?4(QXmlName) +QtXmlPatterns.QAbstractXmlReceiver.endElement?4() +QtXmlPatterns.QAbstractXmlReceiver.attribute?4(QXmlName, QStringRef) +QtXmlPatterns.QAbstractXmlReceiver.comment?4(QString) +QtXmlPatterns.QAbstractXmlReceiver.characters?4(QStringRef) +QtXmlPatterns.QAbstractXmlReceiver.startDocument?4() +QtXmlPatterns.QAbstractXmlReceiver.endDocument?4() +QtXmlPatterns.QAbstractXmlReceiver.processingInstruction?4(QXmlName, QString) +QtXmlPatterns.QAbstractXmlReceiver.atomicValue?4(QVariant) +QtXmlPatterns.QAbstractXmlReceiver.namespaceBinding?4(QXmlName) +QtXmlPatterns.QAbstractXmlReceiver.startOfSequence?4() +QtXmlPatterns.QAbstractXmlReceiver.endOfSequence?4() +QtXmlPatterns.QSimpleXmlNodeModel?1(QXmlNamePool) +QtXmlPatterns.QSimpleXmlNodeModel.__init__?1(self, QXmlNamePool) +QtXmlPatterns.QSimpleXmlNodeModel.baseUri?4(QXmlNodeModelIndex) -> QUrl +QtXmlPatterns.QSimpleXmlNodeModel.namePool?4() -> QXmlNamePool +QtXmlPatterns.QSimpleXmlNodeModel.namespaceBindings?4(QXmlNodeModelIndex) -> unknown-type +QtXmlPatterns.QSimpleXmlNodeModel.stringValue?4(QXmlNodeModelIndex) -> QString +QtXmlPatterns.QSimpleXmlNodeModel.elementById?4(QXmlName) -> QXmlNodeModelIndex +QtXmlPatterns.QSimpleXmlNodeModel.nodesByIdref?4(QXmlName) -> unknown-type +QtXmlPatterns.QSourceLocation?1() +QtXmlPatterns.QSourceLocation.__init__?1(self) +QtXmlPatterns.QSourceLocation?1(QSourceLocation) +QtXmlPatterns.QSourceLocation.__init__?1(self, QSourceLocation) +QtXmlPatterns.QSourceLocation?1(QUrl, int line=-1, int column=-1) +QtXmlPatterns.QSourceLocation.__init__?1(self, QUrl, int line=-1, int column=-1) +QtXmlPatterns.QSourceLocation.column?4() -> int +QtXmlPatterns.QSourceLocation.setColumn?4(int) +QtXmlPatterns.QSourceLocation.line?4() -> int +QtXmlPatterns.QSourceLocation.setLine?4(int) +QtXmlPatterns.QSourceLocation.uri?4() -> QUrl +QtXmlPatterns.QSourceLocation.setUri?4(QUrl) +QtXmlPatterns.QSourceLocation.isNull?4() -> bool +QtXmlPatterns.QXmlSerializer?1(QXmlQuery, QIODevice) +QtXmlPatterns.QXmlSerializer.__init__?1(self, QXmlQuery, QIODevice) +QtXmlPatterns.QXmlSerializer.namespaceBinding?4(QXmlName) +QtXmlPatterns.QXmlSerializer.characters?4(QStringRef) +QtXmlPatterns.QXmlSerializer.comment?4(QString) +QtXmlPatterns.QXmlSerializer.startElement?4(QXmlName) +QtXmlPatterns.QXmlSerializer.endElement?4() +QtXmlPatterns.QXmlSerializer.attribute?4(QXmlName, QStringRef) +QtXmlPatterns.QXmlSerializer.processingInstruction?4(QXmlName, QString) +QtXmlPatterns.QXmlSerializer.atomicValue?4(QVariant) +QtXmlPatterns.QXmlSerializer.startDocument?4() +QtXmlPatterns.QXmlSerializer.endDocument?4() +QtXmlPatterns.QXmlSerializer.startOfSequence?4() +QtXmlPatterns.QXmlSerializer.endOfSequence?4() +QtXmlPatterns.QXmlSerializer.outputDevice?4() -> QIODevice +QtXmlPatterns.QXmlSerializer.setCodec?4(QTextCodec) +QtXmlPatterns.QXmlSerializer.codec?4() -> QTextCodec +QtXmlPatterns.QXmlFormatter?1(QXmlQuery, QIODevice) +QtXmlPatterns.QXmlFormatter.__init__?1(self, QXmlQuery, QIODevice) +QtXmlPatterns.QXmlFormatter.characters?4(QStringRef) +QtXmlPatterns.QXmlFormatter.comment?4(QString) +QtXmlPatterns.QXmlFormatter.startElement?4(QXmlName) +QtXmlPatterns.QXmlFormatter.endElement?4() +QtXmlPatterns.QXmlFormatter.attribute?4(QXmlName, QStringRef) +QtXmlPatterns.QXmlFormatter.processingInstruction?4(QXmlName, QString) +QtXmlPatterns.QXmlFormatter.atomicValue?4(QVariant) +QtXmlPatterns.QXmlFormatter.startDocument?4() +QtXmlPatterns.QXmlFormatter.endDocument?4() +QtXmlPatterns.QXmlFormatter.startOfSequence?4() +QtXmlPatterns.QXmlFormatter.endOfSequence?4() +QtXmlPatterns.QXmlFormatter.indentationDepth?4() -> int +QtXmlPatterns.QXmlFormatter.setIndentationDepth?4(int) +QtXmlPatterns.QXmlName?1() +QtXmlPatterns.QXmlName.__init__?1(self) +QtXmlPatterns.QXmlName?1(QXmlNamePool, QString, QString namespaceUri='', QString prefix='') +QtXmlPatterns.QXmlName.__init__?1(self, QXmlNamePool, QString, QString namespaceUri='', QString prefix='') +QtXmlPatterns.QXmlName?1(QXmlName) +QtXmlPatterns.QXmlName.__init__?1(self, QXmlName) +QtXmlPatterns.QXmlName.namespaceUri?4(QXmlNamePool) -> QString +QtXmlPatterns.QXmlName.prefix?4(QXmlNamePool) -> QString +QtXmlPatterns.QXmlName.localName?4(QXmlNamePool) -> QString +QtXmlPatterns.QXmlName.toClarkName?4(QXmlNamePool) -> QString +QtXmlPatterns.QXmlName.isNull?4() -> bool +QtXmlPatterns.QXmlName.isNCName?4(QString) -> bool +QtXmlPatterns.QXmlName.fromClarkName?4(QString, QXmlNamePool) -> QXmlName +QtXmlPatterns.QXmlNamePool?1() +QtXmlPatterns.QXmlNamePool.__init__?1(self) +QtXmlPatterns.QXmlNamePool?1(QXmlNamePool) +QtXmlPatterns.QXmlNamePool.__init__?1(self, QXmlNamePool) +QtXmlPatterns.QXmlQuery.QueryLanguage?10 +QtXmlPatterns.QXmlQuery.QueryLanguage.XQuery10?10 +QtXmlPatterns.QXmlQuery.QueryLanguage.XSLT20?10 +QtXmlPatterns.QXmlQuery?1() +QtXmlPatterns.QXmlQuery.__init__?1(self) +QtXmlPatterns.QXmlQuery?1(QXmlQuery) +QtXmlPatterns.QXmlQuery.__init__?1(self, QXmlQuery) +QtXmlPatterns.QXmlQuery?1(QXmlNamePool) +QtXmlPatterns.QXmlQuery.__init__?1(self, QXmlNamePool) +QtXmlPatterns.QXmlQuery?1(QXmlQuery.QueryLanguage, QXmlNamePool pool=QXmlNamePool()) +QtXmlPatterns.QXmlQuery.__init__?1(self, QXmlQuery.QueryLanguage, QXmlNamePool pool=QXmlNamePool()) +QtXmlPatterns.QXmlQuery.setMessageHandler?4(QAbstractMessageHandler) +QtXmlPatterns.QXmlQuery.messageHandler?4() -> QAbstractMessageHandler +QtXmlPatterns.QXmlQuery.setQuery?4(QString, QUrl documentUri=QUrl()) +QtXmlPatterns.QXmlQuery.setQuery?4(QIODevice, QUrl documentUri=QUrl()) +QtXmlPatterns.QXmlQuery.setQuery?4(QUrl, QUrl baseUri=QUrl()) +QtXmlPatterns.QXmlQuery.namePool?4() -> QXmlNamePool +QtXmlPatterns.QXmlQuery.bindVariable?4(QXmlName, QXmlItem) +QtXmlPatterns.QXmlQuery.bindVariable?4(QXmlName, QIODevice) +QtXmlPatterns.QXmlQuery.bindVariable?4(QXmlName, QXmlQuery) +QtXmlPatterns.QXmlQuery.bindVariable?4(QString, QXmlItem) +QtXmlPatterns.QXmlQuery.bindVariable?4(QString, QIODevice) +QtXmlPatterns.QXmlQuery.bindVariable?4(QString, QXmlQuery) +QtXmlPatterns.QXmlQuery.isValid?4() -> bool +QtXmlPatterns.QXmlQuery.evaluateTo?4(QXmlResultItems) +QtXmlPatterns.QXmlQuery.evaluateTo?4(QAbstractXmlReceiver) -> bool +QtXmlPatterns.QXmlQuery.evaluateToStringList?4() -> Any +QtXmlPatterns.QXmlQuery.evaluateTo?4(QIODevice) -> bool +QtXmlPatterns.QXmlQuery.evaluateToString?4() -> Any +QtXmlPatterns.QXmlQuery.setUriResolver?4(QAbstractUriResolver) +QtXmlPatterns.QXmlQuery.uriResolver?4() -> QAbstractUriResolver +QtXmlPatterns.QXmlQuery.setFocus?4(QXmlItem) +QtXmlPatterns.QXmlQuery.setFocus?4(QUrl) -> bool +QtXmlPatterns.QXmlQuery.setFocus?4(QIODevice) -> bool +QtXmlPatterns.QXmlQuery.setFocus?4(QString) -> bool +QtXmlPatterns.QXmlQuery.setInitialTemplateName?4(QXmlName) +QtXmlPatterns.QXmlQuery.setInitialTemplateName?4(QString) +QtXmlPatterns.QXmlQuery.initialTemplateName?4() -> QXmlName +QtXmlPatterns.QXmlQuery.setNetworkAccessManager?4(QNetworkAccessManager) +QtXmlPatterns.QXmlQuery.networkAccessManager?4() -> QNetworkAccessManager +QtXmlPatterns.QXmlQuery.queryLanguage?4() -> QXmlQuery.QueryLanguage +QtXmlPatterns.QXmlResultItems?1() +QtXmlPatterns.QXmlResultItems.__init__?1(self) +QtXmlPatterns.QXmlResultItems.hasError?4() -> bool +QtXmlPatterns.QXmlResultItems.next?4() -> QXmlItem +QtXmlPatterns.QXmlResultItems.current?4() -> QXmlItem +QtXmlPatterns.QXmlSchema?1() +QtXmlPatterns.QXmlSchema.__init__?1(self) +QtXmlPatterns.QXmlSchema?1(QXmlSchema) +QtXmlPatterns.QXmlSchema.__init__?1(self, QXmlSchema) +QtXmlPatterns.QXmlSchema.load?4(QUrl) -> bool +QtXmlPatterns.QXmlSchema.load?4(QIODevice, QUrl documentUri=QUrl()) -> bool +QtXmlPatterns.QXmlSchema.load?4(QByteArray, QUrl documentUri=QUrl()) -> bool +QtXmlPatterns.QXmlSchema.isValid?4() -> bool +QtXmlPatterns.QXmlSchema.namePool?4() -> QXmlNamePool +QtXmlPatterns.QXmlSchema.documentUri?4() -> QUrl +QtXmlPatterns.QXmlSchema.setMessageHandler?4(QAbstractMessageHandler) +QtXmlPatterns.QXmlSchema.messageHandler?4() -> QAbstractMessageHandler +QtXmlPatterns.QXmlSchema.setUriResolver?4(QAbstractUriResolver) +QtXmlPatterns.QXmlSchema.uriResolver?4() -> QAbstractUriResolver +QtXmlPatterns.QXmlSchema.setNetworkAccessManager?4(QNetworkAccessManager) +QtXmlPatterns.QXmlSchema.networkAccessManager?4() -> QNetworkAccessManager +QtXmlPatterns.QXmlSchemaValidator?1() +QtXmlPatterns.QXmlSchemaValidator.__init__?1(self) +QtXmlPatterns.QXmlSchemaValidator?1(QXmlSchema) +QtXmlPatterns.QXmlSchemaValidator.__init__?1(self, QXmlSchema) +QtXmlPatterns.QXmlSchemaValidator.setSchema?4(QXmlSchema) +QtXmlPatterns.QXmlSchemaValidator.validate?4(QUrl) -> bool +QtXmlPatterns.QXmlSchemaValidator.validate?4(QIODevice, QUrl documentUri=QUrl()) -> bool +QtXmlPatterns.QXmlSchemaValidator.validate?4(QByteArray, QUrl documentUri=QUrl()) -> bool +QtXmlPatterns.QXmlSchemaValidator.namePool?4() -> QXmlNamePool +QtXmlPatterns.QXmlSchemaValidator.schema?4() -> QXmlSchema +QtXmlPatterns.QXmlSchemaValidator.setMessageHandler?4(QAbstractMessageHandler) +QtXmlPatterns.QXmlSchemaValidator.messageHandler?4() -> QAbstractMessageHandler +QtXmlPatterns.QXmlSchemaValidator.setUriResolver?4(QAbstractUriResolver) +QtXmlPatterns.QXmlSchemaValidator.uriResolver?4() -> QAbstractUriResolver +QtXmlPatterns.QXmlSchemaValidator.setNetworkAccessManager?4(QNetworkAccessManager) +QtXmlPatterns.QXmlSchemaValidator.networkAccessManager?4() -> QNetworkAccessManager diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_ar.qm b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_ar.qm new file mode 100644 index 0000000..33eda48 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_ar.qm differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_bg.qm b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_bg.qm new file mode 100644 index 0000000..ad48af7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_bg.qm differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_ca.qm b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_ca.qm new file mode 100644 index 0000000..ae86465 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_ca.qm differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_cs.qm b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_cs.qm new file mode 100644 index 0000000..40aec71 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_cs.qm differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_da.qm b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_da.qm new file mode 100644 index 0000000..eefbe64 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_da.qm differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_de.qm b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_de.qm new file mode 100644 index 0000000..2e94a25 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_de.qm differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_en.qm b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_en.qm new file mode 100644 index 0000000..be651ee --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/Qt5/translations/qt_en.qm @@ -0,0 +1 @@ + +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QBluetooth(PyQt5.sip.simplewrapper): + + class AttAccessConstraint(int): + AttAuthorizationRequired = ... # type: QBluetooth.AttAccessConstraint + AttAuthenticationRequired = ... # type: QBluetooth.AttAccessConstraint + AttEncryptionRequired = ... # type: QBluetooth.AttAccessConstraint + + class Security(int): + NoSecurity = ... # type: QBluetooth.Security + Authorization = ... # type: QBluetooth.Security + Authentication = ... # type: QBluetooth.Security + Encryption = ... # type: QBluetooth.Security + Secure = ... # type: QBluetooth.Security + + class SecurityFlags(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QBluetooth.SecurityFlags', 'QBluetooth.Security']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QBluetooth.SecurityFlags', 'QBluetooth.Security']) -> 'QBluetooth.SecurityFlags': ... + def __xor__(self, f: typing.Union['QBluetooth.SecurityFlags', 'QBluetooth.Security']) -> 'QBluetooth.SecurityFlags': ... + def __ior__(self, f: typing.Union['QBluetooth.SecurityFlags', 'QBluetooth.Security']) -> 'QBluetooth.SecurityFlags': ... + def __or__(self, f: typing.Union['QBluetooth.SecurityFlags', 'QBluetooth.Security']) -> 'QBluetooth.SecurityFlags': ... + def __iand__(self, f: typing.Union['QBluetooth.SecurityFlags', 'QBluetooth.Security']) -> 'QBluetooth.SecurityFlags': ... + def __and__(self, f: typing.Union['QBluetooth.SecurityFlags', 'QBluetooth.Security']) -> 'QBluetooth.SecurityFlags': ... + def __invert__(self) -> 'QBluetooth.SecurityFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class AttAccessConstraints(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QBluetooth.AttAccessConstraints', 'QBluetooth.AttAccessConstraint']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QBluetooth.AttAccessConstraints', 'QBluetooth.AttAccessConstraint']) -> 'QBluetooth.AttAccessConstraints': ... + def __xor__(self, f: typing.Union['QBluetooth.AttAccessConstraints', 'QBluetooth.AttAccessConstraint']) -> 'QBluetooth.AttAccessConstraints': ... + def __ior__(self, f: typing.Union['QBluetooth.AttAccessConstraints', 'QBluetooth.AttAccessConstraint']) -> 'QBluetooth.AttAccessConstraints': ... + def __or__(self, f: typing.Union['QBluetooth.AttAccessConstraints', 'QBluetooth.AttAccessConstraint']) -> 'QBluetooth.AttAccessConstraints': ... + def __iand__(self, f: typing.Union['QBluetooth.AttAccessConstraints', 'QBluetooth.AttAccessConstraint']) -> 'QBluetooth.AttAccessConstraints': ... + def __and__(self, f: typing.Union['QBluetooth.AttAccessConstraints', 'QBluetooth.AttAccessConstraint']) -> 'QBluetooth.AttAccessConstraints': ... + def __invert__(self) -> 'QBluetooth.AttAccessConstraints': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + +class QBluetoothAddress(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, address: int) -> None: ... + @typing.overload + def __init__(self, address: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, other: 'QBluetoothAddress') -> None: ... + + def __ge__(self, other: 'QBluetoothAddress') -> bool: ... + def toString(self) -> str: ... + def toUInt64(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __lt__(self, other: 'QBluetoothAddress') -> bool: ... + def clear(self) -> None: ... + def isNull(self) -> bool: ... + + +class QBluetoothDeviceDiscoveryAgent(QtCore.QObject): + + class DiscoveryMethod(int): + NoMethod = ... # type: QBluetoothDeviceDiscoveryAgent.DiscoveryMethod + ClassicMethod = ... # type: QBluetoothDeviceDiscoveryAgent.DiscoveryMethod + LowEnergyMethod = ... # type: QBluetoothDeviceDiscoveryAgent.DiscoveryMethod + + class InquiryType(int): + GeneralUnlimitedInquiry = ... # type: QBluetoothDeviceDiscoveryAgent.InquiryType + LimitedInquiry = ... # type: QBluetoothDeviceDiscoveryAgent.InquiryType + + class Error(int): + NoError = ... # type: QBluetoothDeviceDiscoveryAgent.Error + InputOutputError = ... # type: QBluetoothDeviceDiscoveryAgent.Error + PoweredOffError = ... # type: QBluetoothDeviceDiscoveryAgent.Error + InvalidBluetoothAdapterError = ... # type: QBluetoothDeviceDiscoveryAgent.Error + UnsupportedPlatformError = ... # type: QBluetoothDeviceDiscoveryAgent.Error + UnsupportedDiscoveryMethod = ... # type: QBluetoothDeviceDiscoveryAgent.Error + UnknownError = ... # type: QBluetoothDeviceDiscoveryAgent.Error + + class DiscoveryMethods(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QBluetoothDeviceDiscoveryAgent.DiscoveryMethods', 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QBluetoothDeviceDiscoveryAgent.DiscoveryMethods', 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod']) -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethods': ... + def __xor__(self, f: typing.Union['QBluetoothDeviceDiscoveryAgent.DiscoveryMethods', 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod']) -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethods': ... + def __ior__(self, f: typing.Union['QBluetoothDeviceDiscoveryAgent.DiscoveryMethods', 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod']) -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethods': ... + def __or__(self, f: typing.Union['QBluetoothDeviceDiscoveryAgent.DiscoveryMethods', 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod']) -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethods': ... + def __iand__(self, f: typing.Union['QBluetoothDeviceDiscoveryAgent.DiscoveryMethods', 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod']) -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethods': ... + def __and__(self, f: typing.Union['QBluetoothDeviceDiscoveryAgent.DiscoveryMethods', 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod']) -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethods': ... + def __invert__(self) -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethods': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, deviceAdapter: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + @staticmethod + def supportedDiscoveryMethods() -> 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethods': ... + def lowEnergyDiscoveryTimeout(self) -> int: ... + def setLowEnergyDiscoveryTimeout(self, msTimeout: int) -> None: ... + deviceUpdated: typing.ClassVar[QtCore.pyqtSignal] + canceled: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + deviceDiscovered: typing.ClassVar[QtCore.pyqtSignal] + def stop(self) -> None: ... + @typing.overload + def start(self) -> None: ... + @typing.overload + def start(self, method: typing.Union['QBluetoothDeviceDiscoveryAgent.DiscoveryMethods', 'QBluetoothDeviceDiscoveryAgent.DiscoveryMethod']) -> None: ... + def discoveredDevices(self) -> typing.List['QBluetoothDeviceInfo']: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def isActive(self) -> bool: ... + def setInquiryType(self, type: 'QBluetoothDeviceDiscoveryAgent.InquiryType') -> None: ... + def inquiryType(self) -> 'QBluetoothDeviceDiscoveryAgent.InquiryType': ... + + +class QBluetoothDeviceInfo(PyQt5.sip.wrapper): + + class Field(int): + None_ = ... # type: QBluetoothDeviceInfo.Field + RSSI = ... # type: QBluetoothDeviceInfo.Field + ManufacturerData = ... # type: QBluetoothDeviceInfo.Field + All = ... # type: QBluetoothDeviceInfo.Field + + class CoreConfiguration(int): + UnknownCoreConfiguration = ... # type: QBluetoothDeviceInfo.CoreConfiguration + LowEnergyCoreConfiguration = ... # type: QBluetoothDeviceInfo.CoreConfiguration + BaseRateCoreConfiguration = ... # type: QBluetoothDeviceInfo.CoreConfiguration + BaseRateAndLowEnergyCoreConfiguration = ... # type: QBluetoothDeviceInfo.CoreConfiguration + + class DataCompleteness(int): + DataComplete = ... # type: QBluetoothDeviceInfo.DataCompleteness + DataIncomplete = ... # type: QBluetoothDeviceInfo.DataCompleteness + DataUnavailable = ... # type: QBluetoothDeviceInfo.DataCompleteness + + class ServiceClass(int): + NoService = ... # type: QBluetoothDeviceInfo.ServiceClass + PositioningService = ... # type: QBluetoothDeviceInfo.ServiceClass + NetworkingService = ... # type: QBluetoothDeviceInfo.ServiceClass + RenderingService = ... # type: QBluetoothDeviceInfo.ServiceClass + CapturingService = ... # type: QBluetoothDeviceInfo.ServiceClass + ObjectTransferService = ... # type: QBluetoothDeviceInfo.ServiceClass + AudioService = ... # type: QBluetoothDeviceInfo.ServiceClass + TelephonyService = ... # type: QBluetoothDeviceInfo.ServiceClass + InformationService = ... # type: QBluetoothDeviceInfo.ServiceClass + AllServices = ... # type: QBluetoothDeviceInfo.ServiceClass + + class MinorHealthClass(int): + UncategorizedHealthDevice = ... # type: QBluetoothDeviceInfo.MinorHealthClass + HealthBloodPressureMonitor = ... # type: QBluetoothDeviceInfo.MinorHealthClass + HealthThermometer = ... # type: QBluetoothDeviceInfo.MinorHealthClass + HealthWeightScale = ... # type: QBluetoothDeviceInfo.MinorHealthClass + HealthGlucoseMeter = ... # type: QBluetoothDeviceInfo.MinorHealthClass + HealthPulseOximeter = ... # type: QBluetoothDeviceInfo.MinorHealthClass + HealthDataDisplay = ... # type: QBluetoothDeviceInfo.MinorHealthClass + HealthStepCounter = ... # type: QBluetoothDeviceInfo.MinorHealthClass + + class MinorToyClass(int): + UncategorizedToy = ... # type: QBluetoothDeviceInfo.MinorToyClass + ToyRobot = ... # type: QBluetoothDeviceInfo.MinorToyClass + ToyVehicle = ... # type: QBluetoothDeviceInfo.MinorToyClass + ToyDoll = ... # type: QBluetoothDeviceInfo.MinorToyClass + ToyController = ... # type: QBluetoothDeviceInfo.MinorToyClass + ToyGame = ... # type: QBluetoothDeviceInfo.MinorToyClass + + class MinorWearableClass(int): + UncategorizedWearableDevice = ... # type: QBluetoothDeviceInfo.MinorWearableClass + WearableWristWatch = ... # type: QBluetoothDeviceInfo.MinorWearableClass + WearablePager = ... # type: QBluetoothDeviceInfo.MinorWearableClass + WearableJacket = ... # type: QBluetoothDeviceInfo.MinorWearableClass + WearableHelmet = ... # type: QBluetoothDeviceInfo.MinorWearableClass + WearableGlasses = ... # type: QBluetoothDeviceInfo.MinorWearableClass + + class MinorImagingClass(int): + UncategorizedImagingDevice = ... # type: QBluetoothDeviceInfo.MinorImagingClass + ImageDisplay = ... # type: QBluetoothDeviceInfo.MinorImagingClass + ImageCamera = ... # type: QBluetoothDeviceInfo.MinorImagingClass + ImageScanner = ... # type: QBluetoothDeviceInfo.MinorImagingClass + ImagePrinter = ... # type: QBluetoothDeviceInfo.MinorImagingClass + + class MinorPeripheralClass(int): + UncategorizedPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + KeyboardPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + PointingDevicePeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + KeyboardWithPointingDevicePeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + JoystickPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + GamepadPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + RemoteControlPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + SensingDevicePeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + DigitizerTabletPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + CardReaderPeripheral = ... # type: QBluetoothDeviceInfo.MinorPeripheralClass + + class MinorAudioVideoClass(int): + UncategorizedAudioVideoDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + WearableHeadsetDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + HandsFreeDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + Microphone = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + Loudspeaker = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + Headphones = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + PortableAudioDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + CarAudio = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + SetTopBox = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + HiFiAudioDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + Vcr = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + VideoCamera = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + Camcorder = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + VideoMonitor = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + VideoDisplayAndLoudspeaker = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + VideoConferencing = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + GamingDevice = ... # type: QBluetoothDeviceInfo.MinorAudioVideoClass + + class MinorNetworkClass(int): + NetworkFullService = ... # type: QBluetoothDeviceInfo.MinorNetworkClass + NetworkLoadFactorOne = ... # type: QBluetoothDeviceInfo.MinorNetworkClass + NetworkLoadFactorTwo = ... # type: QBluetoothDeviceInfo.MinorNetworkClass + NetworkLoadFactorThree = ... # type: QBluetoothDeviceInfo.MinorNetworkClass + NetworkLoadFactorFour = ... # type: QBluetoothDeviceInfo.MinorNetworkClass + NetworkLoadFactorFive = ... # type: QBluetoothDeviceInfo.MinorNetworkClass + NetworkLoadFactorSix = ... # type: QBluetoothDeviceInfo.MinorNetworkClass + NetworkNoService = ... # type: QBluetoothDeviceInfo.MinorNetworkClass + + class MinorPhoneClass(int): + UncategorizedPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass + CellularPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass + CordlessPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass + SmartPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass + WiredModemOrVoiceGatewayPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass + CommonIsdnAccessPhone = ... # type: QBluetoothDeviceInfo.MinorPhoneClass + + class MinorComputerClass(int): + UncategorizedComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass + DesktopComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass + ServerComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass + LaptopComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass + HandheldClamShellComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass + HandheldComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass + WearableComputer = ... # type: QBluetoothDeviceInfo.MinorComputerClass + + class MinorMiscellaneousClass(int): + UncategorizedMiscellaneous = ... # type: QBluetoothDeviceInfo.MinorMiscellaneousClass + + class MajorDeviceClass(int): + MiscellaneousDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + ComputerDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + PhoneDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + LANAccessDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + NetworkDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + AudioVideoDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + PeripheralDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + ImagingDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + WearableDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + ToyDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + HealthDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + UncategorizedDevice = ... # type: QBluetoothDeviceInfo.MajorDeviceClass + + class ServiceClasses(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QBluetoothDeviceInfo.ServiceClasses', 'QBluetoothDeviceInfo.ServiceClass']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QBluetoothDeviceInfo.ServiceClasses', 'QBluetoothDeviceInfo.ServiceClass']) -> 'QBluetoothDeviceInfo.ServiceClasses': ... + def __xor__(self, f: typing.Union['QBluetoothDeviceInfo.ServiceClasses', 'QBluetoothDeviceInfo.ServiceClass']) -> 'QBluetoothDeviceInfo.ServiceClasses': ... + def __ior__(self, f: typing.Union['QBluetoothDeviceInfo.ServiceClasses', 'QBluetoothDeviceInfo.ServiceClass']) -> 'QBluetoothDeviceInfo.ServiceClasses': ... + def __or__(self, f: typing.Union['QBluetoothDeviceInfo.ServiceClasses', 'QBluetoothDeviceInfo.ServiceClass']) -> 'QBluetoothDeviceInfo.ServiceClasses': ... + def __iand__(self, f: typing.Union['QBluetoothDeviceInfo.ServiceClasses', 'QBluetoothDeviceInfo.ServiceClass']) -> 'QBluetoothDeviceInfo.ServiceClasses': ... + def __and__(self, f: typing.Union['QBluetoothDeviceInfo.ServiceClasses', 'QBluetoothDeviceInfo.ServiceClass']) -> 'QBluetoothDeviceInfo.ServiceClasses': ... + def __invert__(self) -> 'QBluetoothDeviceInfo.ServiceClasses': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class CoreConfigurations(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QBluetoothDeviceInfo.CoreConfigurations', 'QBluetoothDeviceInfo.CoreConfiguration']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QBluetoothDeviceInfo.CoreConfigurations', 'QBluetoothDeviceInfo.CoreConfiguration']) -> 'QBluetoothDeviceInfo.CoreConfigurations': ... + def __xor__(self, f: typing.Union['QBluetoothDeviceInfo.CoreConfigurations', 'QBluetoothDeviceInfo.CoreConfiguration']) -> 'QBluetoothDeviceInfo.CoreConfigurations': ... + def __ior__(self, f: typing.Union['QBluetoothDeviceInfo.CoreConfigurations', 'QBluetoothDeviceInfo.CoreConfiguration']) -> 'QBluetoothDeviceInfo.CoreConfigurations': ... + def __or__(self, f: typing.Union['QBluetoothDeviceInfo.CoreConfigurations', 'QBluetoothDeviceInfo.CoreConfiguration']) -> 'QBluetoothDeviceInfo.CoreConfigurations': ... + def __iand__(self, f: typing.Union['QBluetoothDeviceInfo.CoreConfigurations', 'QBluetoothDeviceInfo.CoreConfiguration']) -> 'QBluetoothDeviceInfo.CoreConfigurations': ... + def __and__(self, f: typing.Union['QBluetoothDeviceInfo.CoreConfigurations', 'QBluetoothDeviceInfo.CoreConfiguration']) -> 'QBluetoothDeviceInfo.CoreConfigurations': ... + def __invert__(self) -> 'QBluetoothDeviceInfo.CoreConfigurations': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class Fields(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QBluetoothDeviceInfo.Fields', 'QBluetoothDeviceInfo.Field']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QBluetoothDeviceInfo.Fields', 'QBluetoothDeviceInfo.Field']) -> 'QBluetoothDeviceInfo.Fields': ... + def __xor__(self, f: typing.Union['QBluetoothDeviceInfo.Fields', 'QBluetoothDeviceInfo.Field']) -> 'QBluetoothDeviceInfo.Fields': ... + def __ior__(self, f: typing.Union['QBluetoothDeviceInfo.Fields', 'QBluetoothDeviceInfo.Field']) -> 'QBluetoothDeviceInfo.Fields': ... + def __or__(self, f: typing.Union['QBluetoothDeviceInfo.Fields', 'QBluetoothDeviceInfo.Field']) -> 'QBluetoothDeviceInfo.Fields': ... + def __iand__(self, f: typing.Union['QBluetoothDeviceInfo.Fields', 'QBluetoothDeviceInfo.Field']) -> 'QBluetoothDeviceInfo.Fields': ... + def __and__(self, f: typing.Union['QBluetoothDeviceInfo.Fields', 'QBluetoothDeviceInfo.Field']) -> 'QBluetoothDeviceInfo.Fields': ... + def __invert__(self) -> 'QBluetoothDeviceInfo.Fields': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, address: QBluetoothAddress, name: typing.Optional[str], classOfDevice: int) -> None: ... + @typing.overload + def __init__(self, uuid: 'QBluetoothUuid', name: typing.Optional[str], classOfDevice: int) -> None: ... + @typing.overload + def __init__(self, other: 'QBluetoothDeviceInfo') -> None: ... + + def setManufacturerData(self, manufacturerId: int, data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + @typing.overload + def manufacturerData(self, manufacturerId: int) -> QtCore.QByteArray: ... + @typing.overload + def manufacturerData(self) -> typing.Dict[int, QtCore.QByteArray]: ... + def manufacturerIds(self) -> typing.List[int]: ... + def deviceUuid(self) -> 'QBluetoothUuid': ... + def setDeviceUuid(self, uuid: 'QBluetoothUuid') -> None: ... + def coreConfigurations(self) -> 'QBluetoothDeviceInfo.CoreConfigurations': ... + def setCoreConfigurations(self, coreConfigs: typing.Union['QBluetoothDeviceInfo.CoreConfigurations', 'QBluetoothDeviceInfo.CoreConfiguration']) -> None: ... + def serviceUuidsCompleteness(self) -> 'QBluetoothDeviceInfo.DataCompleteness': ... + def serviceUuids(self) -> typing.Tuple[typing.List['QBluetoothUuid'], typing.Optional['QBluetoothDeviceInfo.DataCompleteness']]: ... + @typing.overload + def setServiceUuids(self, uuids: typing.Iterable['QBluetoothUuid'], completeness: 'QBluetoothDeviceInfo.DataCompleteness') -> None: ... + @typing.overload + def setServiceUuids(self, uuids: typing.Iterable['QBluetoothUuid']) -> None: ... + def setRssi(self, signal: int) -> None: ... + def rssi(self) -> int: ... + def minorDeviceClass(self) -> int: ... + def majorDeviceClass(self) -> 'QBluetoothDeviceInfo.MajorDeviceClass': ... + def serviceClasses(self) -> 'QBluetoothDeviceInfo.ServiceClasses': ... + def name(self) -> str: ... + def address(self) -> QBluetoothAddress: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def setCached(self, cached: bool) -> None: ... + def isCached(self) -> bool: ... + def isValid(self) -> bool: ... + + +class QBluetoothHostInfo(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QBluetoothHostInfo') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def setName(self, name: typing.Optional[str]) -> None: ... + def name(self) -> str: ... + def setAddress(self, address: QBluetoothAddress) -> None: ... + def address(self) -> QBluetoothAddress: ... + + +class QBluetoothLocalDevice(QtCore.QObject): + + class Error(int): + NoError = ... # type: QBluetoothLocalDevice.Error + PairingError = ... # type: QBluetoothLocalDevice.Error + UnknownError = ... # type: QBluetoothLocalDevice.Error + + class HostMode(int): + HostPoweredOff = ... # type: QBluetoothLocalDevice.HostMode + HostConnectable = ... # type: QBluetoothLocalDevice.HostMode + HostDiscoverable = ... # type: QBluetoothLocalDevice.HostMode + HostDiscoverableLimitedInquiry = ... # type: QBluetoothLocalDevice.HostMode + + class Pairing(int): + Unpaired = ... # type: QBluetoothLocalDevice.Pairing + Paired = ... # type: QBluetoothLocalDevice.Pairing + AuthorizedPaired = ... # type: QBluetoothLocalDevice.Pairing + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, address: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + deviceDisconnected: typing.ClassVar[QtCore.pyqtSignal] + deviceConnected: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + pairingDisplayConfirmation: typing.ClassVar[QtCore.pyqtSignal] + pairingDisplayPinCode: typing.ClassVar[QtCore.pyqtSignal] + pairingFinished: typing.ClassVar[QtCore.pyqtSignal] + hostModeStateChanged: typing.ClassVar[QtCore.pyqtSignal] + def pairingConfirmation(self, confirmation: bool) -> None: ... + def connectedDevices(self) -> typing.List[QBluetoothAddress]: ... + @staticmethod + def allDevices() -> typing.List[QBluetoothHostInfo]: ... + def address(self) -> QBluetoothAddress: ... + def name(self) -> str: ... + def powerOn(self) -> None: ... + def hostMode(self) -> 'QBluetoothLocalDevice.HostMode': ... + def setHostMode(self, mode: 'QBluetoothLocalDevice.HostMode') -> None: ... + def pairingStatus(self, address: QBluetoothAddress) -> 'QBluetoothLocalDevice.Pairing': ... + def requestPairing(self, address: QBluetoothAddress, pairing: 'QBluetoothLocalDevice.Pairing') -> None: ... + def isValid(self) -> bool: ... + + +class QBluetoothServer(QtCore.QObject): + + class Error(int): + NoError = ... # type: QBluetoothServer.Error + UnknownError = ... # type: QBluetoothServer.Error + PoweredOffError = ... # type: QBluetoothServer.Error + InputOutputError = ... # type: QBluetoothServer.Error + ServiceAlreadyRegisteredError = ... # type: QBluetoothServer.Error + UnsupportedProtocolError = ... # type: QBluetoothServer.Error + + def __init__(self, serverType: 'QBluetoothServiceInfo.Protocol', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + newConnection: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + def serverType(self) -> 'QBluetoothServiceInfo.Protocol': ... + def securityFlags(self) -> QBluetooth.SecurityFlags: ... + def setSecurityFlags(self, security: typing.Union[QBluetooth.SecurityFlags, QBluetooth.Security]) -> None: ... + def serverPort(self) -> int: ... + def serverAddress(self) -> QBluetoothAddress: ... + def nextPendingConnection(self) -> typing.Optional['QBluetoothSocket']: ... + def hasPendingConnections(self) -> bool: ... + def maxPendingConnections(self) -> int: ... + def setMaxPendingConnections(self, numConnections: int) -> None: ... + def isListening(self) -> bool: ... + @typing.overload + def listen(self, address: QBluetoothAddress = ..., port: int = ...) -> bool: ... + @typing.overload + def listen(self, uuid: 'QBluetoothUuid', serviceName: typing.Optional[str] = ...) -> 'QBluetoothServiceInfo': ... + def close(self) -> None: ... + + +class QBluetoothServiceDiscoveryAgent(QtCore.QObject): + + class DiscoveryMode(int): + MinimalDiscovery = ... # type: QBluetoothServiceDiscoveryAgent.DiscoveryMode + FullDiscovery = ... # type: QBluetoothServiceDiscoveryAgent.DiscoveryMode + + class Error(int): + NoError = ... # type: QBluetoothServiceDiscoveryAgent.Error + InputOutputError = ... # type: QBluetoothServiceDiscoveryAgent.Error + PoweredOffError = ... # type: QBluetoothServiceDiscoveryAgent.Error + InvalidBluetoothAdapterError = ... # type: QBluetoothServiceDiscoveryAgent.Error + UnknownError = ... # type: QBluetoothServiceDiscoveryAgent.Error + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, deviceAdapter: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + canceled: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + serviceDiscovered: typing.ClassVar[QtCore.pyqtSignal] + def clear(self) -> None: ... + def stop(self) -> None: ... + def start(self, mode: 'QBluetoothServiceDiscoveryAgent.DiscoveryMode' = ...) -> None: ... + def remoteAddress(self) -> QBluetoothAddress: ... + def setRemoteAddress(self, address: QBluetoothAddress) -> bool: ... + def uuidFilter(self) -> typing.List['QBluetoothUuid']: ... + @typing.overload + def setUuidFilter(self, uuids: typing.Iterable['QBluetoothUuid']) -> None: ... + @typing.overload + def setUuidFilter(self, uuid: 'QBluetoothUuid') -> None: ... + def discoveredServices(self) -> typing.List['QBluetoothServiceInfo']: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def isActive(self) -> bool: ... + + +class QBluetoothServiceInfo(PyQt5.sip.wrapper): + + class Protocol(int): + UnknownProtocol = ... # type: QBluetoothServiceInfo.Protocol + L2capProtocol = ... # type: QBluetoothServiceInfo.Protocol + RfcommProtocol = ... # type: QBluetoothServiceInfo.Protocol + + class AttributeId(int): + ServiceRecordHandle = ... # type: QBluetoothServiceInfo.AttributeId + ServiceClassIds = ... # type: QBluetoothServiceInfo.AttributeId + ServiceRecordState = ... # type: QBluetoothServiceInfo.AttributeId + ServiceId = ... # type: QBluetoothServiceInfo.AttributeId + ProtocolDescriptorList = ... # type: QBluetoothServiceInfo.AttributeId + BrowseGroupList = ... # type: QBluetoothServiceInfo.AttributeId + LanguageBaseAttributeIdList = ... # type: QBluetoothServiceInfo.AttributeId + ServiceInfoTimeToLive = ... # type: QBluetoothServiceInfo.AttributeId + ServiceAvailability = ... # type: QBluetoothServiceInfo.AttributeId + BluetoothProfileDescriptorList = ... # type: QBluetoothServiceInfo.AttributeId + DocumentationUrl = ... # type: QBluetoothServiceInfo.AttributeId + ClientExecutableUrl = ... # type: QBluetoothServiceInfo.AttributeId + IconUrl = ... # type: QBluetoothServiceInfo.AttributeId + AdditionalProtocolDescriptorList = ... # type: QBluetoothServiceInfo.AttributeId + PrimaryLanguageBase = ... # type: QBluetoothServiceInfo.AttributeId + ServiceName = ... # type: QBluetoothServiceInfo.AttributeId + ServiceDescription = ... # type: QBluetoothServiceInfo.AttributeId + ServiceProvider = ... # type: QBluetoothServiceInfo.AttributeId + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QBluetoothServiceInfo') -> None: ... + + def serviceClassUuids(self) -> typing.List['QBluetoothUuid']: ... + def serviceUuid(self) -> 'QBluetoothUuid': ... + def setServiceUuid(self, uuid: 'QBluetoothUuid') -> None: ... + def serviceAvailability(self) -> int: ... + def setServiceAvailability(self, availability: int) -> None: ... + def serviceProvider(self) -> str: ... + def setServiceProvider(self, provider: typing.Optional[str]) -> None: ... + def serviceDescription(self) -> str: ... + def setServiceDescription(self, description: typing.Optional[str]) -> None: ... + def serviceName(self) -> str: ... + def setServiceName(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def setAttribute(self, attributeId: int, value: 'QBluetoothUuid') -> None: ... + @typing.overload + def setAttribute(self, attributeId: int, value: typing.Iterable[typing.Any]) -> None: ... + @typing.overload + def setAttribute(self, attributeId: int, value: typing.Any) -> None: ... + def unregisterService(self) -> bool: ... + def registerService(self, localAdapter: QBluetoothAddress = ...) -> bool: ... + def isRegistered(self) -> bool: ... + def protocolDescriptor(self, protocol: 'QBluetoothUuid.ProtocolUuid') -> typing.List[typing.Any]: ... + def serverChannel(self) -> int: ... + def protocolServiceMultiplexer(self) -> int: ... + def socketProtocol(self) -> 'QBluetoothServiceInfo.Protocol': ... + def removeAttribute(self, attributeId: int) -> None: ... + def contains(self, attributeId: int) -> bool: ... + def attributes(self) -> typing.List[int]: ... + def attribute(self, attributeId: int) -> typing.Any: ... + def device(self) -> QBluetoothDeviceInfo: ... + def setDevice(self, info: QBluetoothDeviceInfo) -> None: ... + def isComplete(self) -> bool: ... + def isValid(self) -> bool: ... + + +class QBluetoothSocket(QtCore.QIODevice): + + class SocketError(int): + NoSocketError = ... # type: QBluetoothSocket.SocketError + UnknownSocketError = ... # type: QBluetoothSocket.SocketError + HostNotFoundError = ... # type: QBluetoothSocket.SocketError + ServiceNotFoundError = ... # type: QBluetoothSocket.SocketError + NetworkError = ... # type: QBluetoothSocket.SocketError + UnsupportedProtocolError = ... # type: QBluetoothSocket.SocketError + OperationError = ... # type: QBluetoothSocket.SocketError + RemoteHostClosedError = ... # type: QBluetoothSocket.SocketError + + class SocketState(int): + UnconnectedState = ... # type: QBluetoothSocket.SocketState + ServiceLookupState = ... # type: QBluetoothSocket.SocketState + ConnectingState = ... # type: QBluetoothSocket.SocketState + ConnectedState = ... # type: QBluetoothSocket.SocketState + BoundState = ... # type: QBluetoothSocket.SocketState + ClosingState = ... # type: QBluetoothSocket.SocketState + ListeningState = ... # type: QBluetoothSocket.SocketState + + @typing.overload + def __init__(self, socketType: QBluetoothServiceInfo.Protocol, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def preferredSecurityFlags(self) -> QBluetooth.SecurityFlags: ... + def setPreferredSecurityFlags(self, flags: typing.Union[QBluetooth.SecurityFlags, QBluetooth.Security]) -> None: ... + def doDeviceDiscovery(self, service: QBluetoothServiceInfo, openMode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag]) -> None: ... + def setSocketError(self, error: 'QBluetoothSocket.SocketError') -> None: ... + def setSocketState(self, state: 'QBluetoothSocket.SocketState') -> None: ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readData(self, maxlen: int) -> bytes: ... + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + disconnected: typing.ClassVar[QtCore.pyqtSignal] + connected: typing.ClassVar[QtCore.pyqtSignal] + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def state(self) -> 'QBluetoothSocket.SocketState': ... + def socketType(self) -> QBluetoothServiceInfo.Protocol: ... + def socketDescriptor(self) -> int: ... + def setSocketDescriptor(self, socketDescriptor: int, socketType: QBluetoothServiceInfo.Protocol, state: 'QBluetoothSocket.SocketState' = ..., mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> bool: ... + def peerPort(self) -> int: ... + def peerAddress(self) -> QBluetoothAddress: ... + def peerName(self) -> str: ... + def localPort(self) -> int: ... + def localAddress(self) -> QBluetoothAddress: ... + def localName(self) -> str: ... + def disconnectFromService(self) -> None: ... + @typing.overload + def connectToService(self, service: QBluetoothServiceInfo, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> None: ... + @typing.overload + def connectToService(self, address: QBluetoothAddress, uuid: 'QBluetoothUuid', mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> None: ... + @typing.overload + def connectToService(self, address: QBluetoothAddress, port: int, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> None: ... + def canReadLine(self) -> bool: ... + def bytesToWrite(self) -> int: ... + def bytesAvailable(self) -> int: ... + def isSequential(self) -> bool: ... + def close(self) -> None: ... + def abort(self) -> None: ... + + +class QBluetoothTransferManager(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + finished: typing.ClassVar[QtCore.pyqtSignal] + def put(self, request: 'QBluetoothTransferRequest', data: typing.Optional[QtCore.QIODevice]) -> typing.Optional['QBluetoothTransferReply']: ... + + +class QBluetoothTransferReply(QtCore.QObject): + + class TransferError(int): + NoError = ... # type: QBluetoothTransferReply.TransferError + UnknownError = ... # type: QBluetoothTransferReply.TransferError + FileNotFoundError = ... # type: QBluetoothTransferReply.TransferError + HostNotFoundError = ... # type: QBluetoothTransferReply.TransferError + UserCanceledTransferError = ... # type: QBluetoothTransferReply.TransferError + IODeviceNotReadableError = ... # type: QBluetoothTransferReply.TransferError + ResourceBusyError = ... # type: QBluetoothTransferReply.TransferError + SessionError = ... # type: QBluetoothTransferReply.TransferError + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setRequest(self, request: 'QBluetoothTransferRequest') -> None: ... + def setManager(self, manager: typing.Optional[QBluetoothTransferManager]) -> None: ... + transferProgress: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + def abort(self) -> None: ... + def request(self) -> 'QBluetoothTransferRequest': ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def manager(self) -> typing.Optional[QBluetoothTransferManager]: ... + def isRunning(self) -> bool: ... + def isFinished(self) -> bool: ... + + +class QBluetoothTransferRequest(PyQt5.sip.wrapper): + + class Attribute(int): + DescriptionAttribute = ... # type: QBluetoothTransferRequest.Attribute + TimeAttribute = ... # type: QBluetoothTransferRequest.Attribute + TypeAttribute = ... # type: QBluetoothTransferRequest.Attribute + LengthAttribute = ... # type: QBluetoothTransferRequest.Attribute + NameAttribute = ... # type: QBluetoothTransferRequest.Attribute + + @typing.overload + def __init__(self, address: QBluetoothAddress = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QBluetoothTransferRequest') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def address(self) -> QBluetoothAddress: ... + def setAttribute(self, code: 'QBluetoothTransferRequest.Attribute', value: typing.Any) -> None: ... + def attribute(self, code: 'QBluetoothTransferRequest.Attribute', defaultValue: typing.Any = ...) -> typing.Any: ... + + +class QBluetoothUuid(QtCore.QUuid): + + class DescriptorType(int): + UnknownDescriptorType = ... # type: QBluetoothUuid.DescriptorType + CharacteristicExtendedProperties = ... # type: QBluetoothUuid.DescriptorType + CharacteristicUserDescription = ... # type: QBluetoothUuid.DescriptorType + ClientCharacteristicConfiguration = ... # type: QBluetoothUuid.DescriptorType + ServerCharacteristicConfiguration = ... # type: QBluetoothUuid.DescriptorType + CharacteristicPresentationFormat = ... # type: QBluetoothUuid.DescriptorType + CharacteristicAggregateFormat = ... # type: QBluetoothUuid.DescriptorType + ValidRange = ... # type: QBluetoothUuid.DescriptorType + ExternalReportReference = ... # type: QBluetoothUuid.DescriptorType + ReportReference = ... # type: QBluetoothUuid.DescriptorType + EnvironmentalSensingConfiguration = ... # type: QBluetoothUuid.DescriptorType + EnvironmentalSensingMeasurement = ... # type: QBluetoothUuid.DescriptorType + EnvironmentalSensingTriggerSetting = ... # type: QBluetoothUuid.DescriptorType + + class CharacteristicType(int): + DeviceName = ... # type: QBluetoothUuid.CharacteristicType + Appearance = ... # type: QBluetoothUuid.CharacteristicType + PeripheralPrivacyFlag = ... # type: QBluetoothUuid.CharacteristicType + ReconnectionAddress = ... # type: QBluetoothUuid.CharacteristicType + PeripheralPreferredConnectionParameters = ... # type: QBluetoothUuid.CharacteristicType + ServiceChanged = ... # type: QBluetoothUuid.CharacteristicType + AlertLevel = ... # type: QBluetoothUuid.CharacteristicType + TxPowerLevel = ... # type: QBluetoothUuid.CharacteristicType + DateTime = ... # type: QBluetoothUuid.CharacteristicType + DayOfWeek = ... # type: QBluetoothUuid.CharacteristicType + DayDateTime = ... # type: QBluetoothUuid.CharacteristicType + ExactTime256 = ... # type: QBluetoothUuid.CharacteristicType + DSTOffset = ... # type: QBluetoothUuid.CharacteristicType + TimeZone = ... # type: QBluetoothUuid.CharacteristicType + LocalTimeInformation = ... # type: QBluetoothUuid.CharacteristicType + TimeWithDST = ... # type: QBluetoothUuid.CharacteristicType + TimeAccuracy = ... # type: QBluetoothUuid.CharacteristicType + TimeSource = ... # type: QBluetoothUuid.CharacteristicType + ReferenceTimeInformation = ... # type: QBluetoothUuid.CharacteristicType + TimeUpdateControlPoint = ... # type: QBluetoothUuid.CharacteristicType + TimeUpdateState = ... # type: QBluetoothUuid.CharacteristicType + GlucoseMeasurement = ... # type: QBluetoothUuid.CharacteristicType + BatteryLevel = ... # type: QBluetoothUuid.CharacteristicType + TemperatureMeasurement = ... # type: QBluetoothUuid.CharacteristicType + TemperatureType = ... # type: QBluetoothUuid.CharacteristicType + IntermediateTemperature = ... # type: QBluetoothUuid.CharacteristicType + MeasurementInterval = ... # type: QBluetoothUuid.CharacteristicType + BootKeyboardInputReport = ... # type: QBluetoothUuid.CharacteristicType + SystemID = ... # type: QBluetoothUuid.CharacteristicType + ModelNumberString = ... # type: QBluetoothUuid.CharacteristicType + SerialNumberString = ... # type: QBluetoothUuid.CharacteristicType + FirmwareRevisionString = ... # type: QBluetoothUuid.CharacteristicType + HardwareRevisionString = ... # type: QBluetoothUuid.CharacteristicType + SoftwareRevisionString = ... # type: QBluetoothUuid.CharacteristicType + ManufacturerNameString = ... # type: QBluetoothUuid.CharacteristicType + IEEE1107320601RegulatoryCertificationDataList = ... # type: QBluetoothUuid.CharacteristicType + CurrentTime = ... # type: QBluetoothUuid.CharacteristicType + ScanRefresh = ... # type: QBluetoothUuid.CharacteristicType + BootKeyboardOutputReport = ... # type: QBluetoothUuid.CharacteristicType + BootMouseInputReport = ... # type: QBluetoothUuid.CharacteristicType + GlucoseMeasurementContext = ... # type: QBluetoothUuid.CharacteristicType + BloodPressureMeasurement = ... # type: QBluetoothUuid.CharacteristicType + IntermediateCuffPressure = ... # type: QBluetoothUuid.CharacteristicType + HeartRateMeasurement = ... # type: QBluetoothUuid.CharacteristicType + BodySensorLocation = ... # type: QBluetoothUuid.CharacteristicType + HeartRateControlPoint = ... # type: QBluetoothUuid.CharacteristicType + AlertStatus = ... # type: QBluetoothUuid.CharacteristicType + RingerControlPoint = ... # type: QBluetoothUuid.CharacteristicType + RingerSetting = ... # type: QBluetoothUuid.CharacteristicType + AlertCategoryIDBitMask = ... # type: QBluetoothUuid.CharacteristicType + AlertCategoryID = ... # type: QBluetoothUuid.CharacteristicType + AlertNotificationControlPoint = ... # type: QBluetoothUuid.CharacteristicType + UnreadAlertStatus = ... # type: QBluetoothUuid.CharacteristicType + NewAlert = ... # type: QBluetoothUuid.CharacteristicType + SupportedNewAlertCategory = ... # type: QBluetoothUuid.CharacteristicType + SupportedUnreadAlertCategory = ... # type: QBluetoothUuid.CharacteristicType + BloodPressureFeature = ... # type: QBluetoothUuid.CharacteristicType + HIDInformation = ... # type: QBluetoothUuid.CharacteristicType + ReportMap = ... # type: QBluetoothUuid.CharacteristicType + HIDControlPoint = ... # type: QBluetoothUuid.CharacteristicType + Report = ... # type: QBluetoothUuid.CharacteristicType + ProtocolMode = ... # type: QBluetoothUuid.CharacteristicType + ScanIntervalWindow = ... # type: QBluetoothUuid.CharacteristicType + PnPID = ... # type: QBluetoothUuid.CharacteristicType + GlucoseFeature = ... # type: QBluetoothUuid.CharacteristicType + RecordAccessControlPoint = ... # type: QBluetoothUuid.CharacteristicType + RSCMeasurement = ... # type: QBluetoothUuid.CharacteristicType + RSCFeature = ... # type: QBluetoothUuid.CharacteristicType + SCControlPoint = ... # type: QBluetoothUuid.CharacteristicType + CSCMeasurement = ... # type: QBluetoothUuid.CharacteristicType + CSCFeature = ... # type: QBluetoothUuid.CharacteristicType + SensorLocation = ... # type: QBluetoothUuid.CharacteristicType + CyclingPowerMeasurement = ... # type: QBluetoothUuid.CharacteristicType + CyclingPowerVector = ... # type: QBluetoothUuid.CharacteristicType + CyclingPowerFeature = ... # type: QBluetoothUuid.CharacteristicType + CyclingPowerControlPoint = ... # type: QBluetoothUuid.CharacteristicType + LocationAndSpeed = ... # type: QBluetoothUuid.CharacteristicType + Navigation = ... # type: QBluetoothUuid.CharacteristicType + PositionQuality = ... # type: QBluetoothUuid.CharacteristicType + LNFeature = ... # type: QBluetoothUuid.CharacteristicType + LNControlPoint = ... # type: QBluetoothUuid.CharacteristicType + MagneticDeclination = ... # type: QBluetoothUuid.CharacteristicType + Elevation = ... # type: QBluetoothUuid.CharacteristicType + Pressure = ... # type: QBluetoothUuid.CharacteristicType + Temperature = ... # type: QBluetoothUuid.CharacteristicType + Humidity = ... # type: QBluetoothUuid.CharacteristicType + TrueWindSpeed = ... # type: QBluetoothUuid.CharacteristicType + TrueWindDirection = ... # type: QBluetoothUuid.CharacteristicType + ApparentWindSpeed = ... # type: QBluetoothUuid.CharacteristicType + ApparentWindDirection = ... # type: QBluetoothUuid.CharacteristicType + GustFactor = ... # type: QBluetoothUuid.CharacteristicType + PollenConcentration = ... # type: QBluetoothUuid.CharacteristicType + UVIndex = ... # type: QBluetoothUuid.CharacteristicType + Irradiance = ... # type: QBluetoothUuid.CharacteristicType + Rainfall = ... # type: QBluetoothUuid.CharacteristicType + WindChill = ... # type: QBluetoothUuid.CharacteristicType + HeatIndex = ... # type: QBluetoothUuid.CharacteristicType + DewPoint = ... # type: QBluetoothUuid.CharacteristicType + DescriptorValueChanged = ... # type: QBluetoothUuid.CharacteristicType + AerobicHeartRateLowerLimit = ... # type: QBluetoothUuid.CharacteristicType + AerobicThreshold = ... # type: QBluetoothUuid.CharacteristicType + Age = ... # type: QBluetoothUuid.CharacteristicType + AnaerobicHeartRateLowerLimit = ... # type: QBluetoothUuid.CharacteristicType + AnaerobicHeartRateUpperLimit = ... # type: QBluetoothUuid.CharacteristicType + AnaerobicThreshold = ... # type: QBluetoothUuid.CharacteristicType + AerobicHeartRateUpperLimit = ... # type: QBluetoothUuid.CharacteristicType + DateOfBirth = ... # type: QBluetoothUuid.CharacteristicType + DateOfThresholdAssessment = ... # type: QBluetoothUuid.CharacteristicType + EmailAddress = ... # type: QBluetoothUuid.CharacteristicType + FatBurnHeartRateLowerLimit = ... # type: QBluetoothUuid.CharacteristicType + FatBurnHeartRateUpperLimit = ... # type: QBluetoothUuid.CharacteristicType + FirstName = ... # type: QBluetoothUuid.CharacteristicType + FiveZoneHeartRateLimits = ... # type: QBluetoothUuid.CharacteristicType + Gender = ... # type: QBluetoothUuid.CharacteristicType + HeartRateMax = ... # type: QBluetoothUuid.CharacteristicType + Height = ... # type: QBluetoothUuid.CharacteristicType + HipCircumference = ... # type: QBluetoothUuid.CharacteristicType + LastName = ... # type: QBluetoothUuid.CharacteristicType + MaximumRecommendedHeartRate = ... # type: QBluetoothUuid.CharacteristicType + RestingHeartRate = ... # type: QBluetoothUuid.CharacteristicType + SportTypeForAerobicAnaerobicThresholds = ... # type: QBluetoothUuid.CharacteristicType + ThreeZoneHeartRateLimits = ... # type: QBluetoothUuid.CharacteristicType + TwoZoneHeartRateLimits = ... # type: QBluetoothUuid.CharacteristicType + VO2Max = ... # type: QBluetoothUuid.CharacteristicType + WaistCircumference = ... # type: QBluetoothUuid.CharacteristicType + Weight = ... # type: QBluetoothUuid.CharacteristicType + DatabaseChangeIncrement = ... # type: QBluetoothUuid.CharacteristicType + UserIndex = ... # type: QBluetoothUuid.CharacteristicType + BodyCompositionFeature = ... # type: QBluetoothUuid.CharacteristicType + BodyCompositionMeasurement = ... # type: QBluetoothUuid.CharacteristicType + WeightMeasurement = ... # type: QBluetoothUuid.CharacteristicType + WeightScaleFeature = ... # type: QBluetoothUuid.CharacteristicType + UserControlPoint = ... # type: QBluetoothUuid.CharacteristicType + MagneticFluxDensity2D = ... # type: QBluetoothUuid.CharacteristicType + MagneticFluxDensity3D = ... # type: QBluetoothUuid.CharacteristicType + Language = ... # type: QBluetoothUuid.CharacteristicType + BarometricPressureTrend = ... # type: QBluetoothUuid.CharacteristicType + + class ServiceClassUuid(int): + ServiceDiscoveryServer = ... # type: QBluetoothUuid.ServiceClassUuid + BrowseGroupDescriptor = ... # type: QBluetoothUuid.ServiceClassUuid + PublicBrowseGroup = ... # type: QBluetoothUuid.ServiceClassUuid + SerialPort = ... # type: QBluetoothUuid.ServiceClassUuid + LANAccessUsingPPP = ... # type: QBluetoothUuid.ServiceClassUuid + DialupNetworking = ... # type: QBluetoothUuid.ServiceClassUuid + IrMCSync = ... # type: QBluetoothUuid.ServiceClassUuid + ObexObjectPush = ... # type: QBluetoothUuid.ServiceClassUuid + OBEXFileTransfer = ... # type: QBluetoothUuid.ServiceClassUuid + IrMCSyncCommand = ... # type: QBluetoothUuid.ServiceClassUuid + Headset = ... # type: QBluetoothUuid.ServiceClassUuid + AudioSource = ... # type: QBluetoothUuid.ServiceClassUuid + AudioSink = ... # type: QBluetoothUuid.ServiceClassUuid + AV_RemoteControlTarget = ... # type: QBluetoothUuid.ServiceClassUuid + AdvancedAudioDistribution = ... # type: QBluetoothUuid.ServiceClassUuid + AV_RemoteControl = ... # type: QBluetoothUuid.ServiceClassUuid + AV_RemoteControlController = ... # type: QBluetoothUuid.ServiceClassUuid + HeadsetAG = ... # type: QBluetoothUuid.ServiceClassUuid + PANU = ... # type: QBluetoothUuid.ServiceClassUuid + NAP = ... # type: QBluetoothUuid.ServiceClassUuid + GN = ... # type: QBluetoothUuid.ServiceClassUuid + DirectPrinting = ... # type: QBluetoothUuid.ServiceClassUuid + ReferencePrinting = ... # type: QBluetoothUuid.ServiceClassUuid + ImagingResponder = ... # type: QBluetoothUuid.ServiceClassUuid + ImagingAutomaticArchive = ... # type: QBluetoothUuid.ServiceClassUuid + ImagingReferenceObjects = ... # type: QBluetoothUuid.ServiceClassUuid + Handsfree = ... # type: QBluetoothUuid.ServiceClassUuid + HandsfreeAudioGateway = ... # type: QBluetoothUuid.ServiceClassUuid + DirectPrintingReferenceObjectsService = ... # type: QBluetoothUuid.ServiceClassUuid + ReflectedUI = ... # type: QBluetoothUuid.ServiceClassUuid + BasicPrinting = ... # type: QBluetoothUuid.ServiceClassUuid + PrintingStatus = ... # type: QBluetoothUuid.ServiceClassUuid + HumanInterfaceDeviceService = ... # type: QBluetoothUuid.ServiceClassUuid + HardcopyCableReplacement = ... # type: QBluetoothUuid.ServiceClassUuid + HCRPrint = ... # type: QBluetoothUuid.ServiceClassUuid + HCRScan = ... # type: QBluetoothUuid.ServiceClassUuid + SIMAccess = ... # type: QBluetoothUuid.ServiceClassUuid + PhonebookAccessPCE = ... # type: QBluetoothUuid.ServiceClassUuid + PhonebookAccessPSE = ... # type: QBluetoothUuid.ServiceClassUuid + PhonebookAccess = ... # type: QBluetoothUuid.ServiceClassUuid + HeadsetHS = ... # type: QBluetoothUuid.ServiceClassUuid + MessageAccessServer = ... # type: QBluetoothUuid.ServiceClassUuid + MessageNotificationServer = ... # type: QBluetoothUuid.ServiceClassUuid + MessageAccessProfile = ... # type: QBluetoothUuid.ServiceClassUuid + PnPInformation = ... # type: QBluetoothUuid.ServiceClassUuid + GenericNetworking = ... # type: QBluetoothUuid.ServiceClassUuid + GenericFileTransfer = ... # type: QBluetoothUuid.ServiceClassUuid + GenericAudio = ... # type: QBluetoothUuid.ServiceClassUuid + GenericTelephony = ... # type: QBluetoothUuid.ServiceClassUuid + VideoSource = ... # type: QBluetoothUuid.ServiceClassUuid + VideoSink = ... # type: QBluetoothUuid.ServiceClassUuid + VideoDistribution = ... # type: QBluetoothUuid.ServiceClassUuid + HDP = ... # type: QBluetoothUuid.ServiceClassUuid + HDPSource = ... # type: QBluetoothUuid.ServiceClassUuid + HDPSink = ... # type: QBluetoothUuid.ServiceClassUuid + BasicImage = ... # type: QBluetoothUuid.ServiceClassUuid + GNSS = ... # type: QBluetoothUuid.ServiceClassUuid + GNSSServer = ... # type: QBluetoothUuid.ServiceClassUuid + Display3D = ... # type: QBluetoothUuid.ServiceClassUuid + Glasses3D = ... # type: QBluetoothUuid.ServiceClassUuid + Synchronization3D = ... # type: QBluetoothUuid.ServiceClassUuid + MPSProfile = ... # type: QBluetoothUuid.ServiceClassUuid + MPSService = ... # type: QBluetoothUuid.ServiceClassUuid + GenericAccess = ... # type: QBluetoothUuid.ServiceClassUuid + GenericAttribute = ... # type: QBluetoothUuid.ServiceClassUuid + ImmediateAlert = ... # type: QBluetoothUuid.ServiceClassUuid + LinkLoss = ... # type: QBluetoothUuid.ServiceClassUuid + TxPower = ... # type: QBluetoothUuid.ServiceClassUuid + CurrentTimeService = ... # type: QBluetoothUuid.ServiceClassUuid + ReferenceTimeUpdateService = ... # type: QBluetoothUuid.ServiceClassUuid + NextDSTChangeService = ... # type: QBluetoothUuid.ServiceClassUuid + Glucose = ... # type: QBluetoothUuid.ServiceClassUuid + HealthThermometer = ... # type: QBluetoothUuid.ServiceClassUuid + DeviceInformation = ... # type: QBluetoothUuid.ServiceClassUuid + HeartRate = ... # type: QBluetoothUuid.ServiceClassUuid + PhoneAlertStatusService = ... # type: QBluetoothUuid.ServiceClassUuid + BatteryService = ... # type: QBluetoothUuid.ServiceClassUuid + BloodPressure = ... # type: QBluetoothUuid.ServiceClassUuid + AlertNotificationService = ... # type: QBluetoothUuid.ServiceClassUuid + HumanInterfaceDevice = ... # type: QBluetoothUuid.ServiceClassUuid + ScanParameters = ... # type: QBluetoothUuid.ServiceClassUuid + RunningSpeedAndCadence = ... # type: QBluetoothUuid.ServiceClassUuid + CyclingSpeedAndCadence = ... # type: QBluetoothUuid.ServiceClassUuid + CyclingPower = ... # type: QBluetoothUuid.ServiceClassUuid + LocationAndNavigation = ... # type: QBluetoothUuid.ServiceClassUuid + EnvironmentalSensing = ... # type: QBluetoothUuid.ServiceClassUuid + BodyComposition = ... # type: QBluetoothUuid.ServiceClassUuid + UserData = ... # type: QBluetoothUuid.ServiceClassUuid + WeightScale = ... # type: QBluetoothUuid.ServiceClassUuid + BondManagement = ... # type: QBluetoothUuid.ServiceClassUuid + ContinuousGlucoseMonitoring = ... # type: QBluetoothUuid.ServiceClassUuid + + class ProtocolUuid(int): + Sdp = ... # type: QBluetoothUuid.ProtocolUuid + Udp = ... # type: QBluetoothUuid.ProtocolUuid + Rfcomm = ... # type: QBluetoothUuid.ProtocolUuid + Tcp = ... # type: QBluetoothUuid.ProtocolUuid + TcsBin = ... # type: QBluetoothUuid.ProtocolUuid + TcsAt = ... # type: QBluetoothUuid.ProtocolUuid + Att = ... # type: QBluetoothUuid.ProtocolUuid + Obex = ... # type: QBluetoothUuid.ProtocolUuid + Ip = ... # type: QBluetoothUuid.ProtocolUuid + Ftp = ... # type: QBluetoothUuid.ProtocolUuid + Http = ... # type: QBluetoothUuid.ProtocolUuid + Wsp = ... # type: QBluetoothUuid.ProtocolUuid + Bnep = ... # type: QBluetoothUuid.ProtocolUuid + Upnp = ... # type: QBluetoothUuid.ProtocolUuid + Hidp = ... # type: QBluetoothUuid.ProtocolUuid + HardcopyControlChannel = ... # type: QBluetoothUuid.ProtocolUuid + HardcopyDataChannel = ... # type: QBluetoothUuid.ProtocolUuid + HardcopyNotification = ... # type: QBluetoothUuid.ProtocolUuid + Avctp = ... # type: QBluetoothUuid.ProtocolUuid + Avdtp = ... # type: QBluetoothUuid.ProtocolUuid + Cmtp = ... # type: QBluetoothUuid.ProtocolUuid + UdiCPlain = ... # type: QBluetoothUuid.ProtocolUuid + McapControlChannel = ... # type: QBluetoothUuid.ProtocolUuid + McapDataChannel = ... # type: QBluetoothUuid.ProtocolUuid + L2cap = ... # type: QBluetoothUuid.ProtocolUuid + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, uuid: 'QBluetoothUuid.ProtocolUuid') -> None: ... + @typing.overload + def __init__(self, uuid: 'QBluetoothUuid.ServiceClassUuid') -> None: ... + @typing.overload + def __init__(self, uuid: 'QBluetoothUuid.CharacteristicType') -> None: ... + @typing.overload + def __init__(self, uuid: 'QBluetoothUuid.DescriptorType') -> None: ... + @typing.overload + def __init__(self, uuid: int) -> None: ... + @typing.overload + def __init__(self, uuid: typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]) -> None: ... + @typing.overload + def __init__(self, uuid: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, uuid: 'QBluetoothUuid') -> None: ... + @typing.overload + def __init__(self, uuid: QtCore.QUuid) -> None: ... + + @staticmethod + def descriptorToString(uuid: 'QBluetoothUuid.DescriptorType') -> str: ... + @staticmethod + def characteristicToString(uuid: 'QBluetoothUuid.CharacteristicType') -> str: ... + @staticmethod + def protocolToString(uuid: 'QBluetoothUuid.ProtocolUuid') -> str: ... + @staticmethod + def serviceClassToString(uuid: 'QBluetoothUuid.ServiceClassUuid') -> str: ... + def toUInt128(self) -> typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]: ... + def toUInt32(self) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toUInt16(self) -> typing.Tuple[int, typing.Optional[bool]]: ... + def minimumSize(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QLowEnergyAdvertisingData(PyQt5.sip.wrapper): + + class Discoverability(int): + DiscoverabilityNone = ... # type: QLowEnergyAdvertisingData.Discoverability + DiscoverabilityLimited = ... # type: QLowEnergyAdvertisingData.Discoverability + DiscoverabilityGeneral = ... # type: QLowEnergyAdvertisingData.Discoverability + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QLowEnergyAdvertisingData') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def swap(self, other: 'QLowEnergyAdvertisingData') -> None: ... + def rawData(self) -> QtCore.QByteArray: ... + def setRawData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def services(self) -> typing.List[QBluetoothUuid]: ... + def setServices(self, services: typing.Iterable[QBluetoothUuid]) -> None: ... + def discoverability(self) -> 'QLowEnergyAdvertisingData.Discoverability': ... + def setDiscoverability(self, mode: 'QLowEnergyAdvertisingData.Discoverability') -> None: ... + def includePowerLevel(self) -> bool: ... + def setIncludePowerLevel(self, doInclude: bool) -> None: ... + def manufacturerData(self) -> QtCore.QByteArray: ... + def manufacturerId(self) -> int: ... + def setManufacturerData(self, id: int, data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + @staticmethod + def invalidManufacturerId() -> int: ... + def localName(self) -> str: ... + def setLocalName(self, name: typing.Optional[str]) -> None: ... + + +class QLowEnergyAdvertisingParameters(PyQt5.sip.wrapper): + + class FilterPolicy(int): + IgnoreWhiteList = ... # type: QLowEnergyAdvertisingParameters.FilterPolicy + UseWhiteListForScanning = ... # type: QLowEnergyAdvertisingParameters.FilterPolicy + UseWhiteListForConnecting = ... # type: QLowEnergyAdvertisingParameters.FilterPolicy + UseWhiteListForScanningAndConnecting = ... # type: QLowEnergyAdvertisingParameters.FilterPolicy + + class Mode(int): + AdvInd = ... # type: QLowEnergyAdvertisingParameters.Mode + AdvScanInd = ... # type: QLowEnergyAdvertisingParameters.Mode + AdvNonConnInd = ... # type: QLowEnergyAdvertisingParameters.Mode + + class AddressInfo(PyQt5.sip.wrapper): + + address = ... # type: QBluetoothAddress + type = ... # type: 'QLowEnergyController.RemoteAddressType' + + @typing.overload + def __init__(self, addr: QBluetoothAddress, t: 'QLowEnergyController.RemoteAddressType') -> None: ... + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QLowEnergyAdvertisingParameters.AddressInfo') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QLowEnergyAdvertisingParameters') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def swap(self, other: 'QLowEnergyAdvertisingParameters') -> None: ... + def maximumInterval(self) -> int: ... + def minimumInterval(self) -> int: ... + def setInterval(self, minimum: int, maximum: int) -> None: ... + def filterPolicy(self) -> 'QLowEnergyAdvertisingParameters.FilterPolicy': ... + def whiteList(self) -> typing.List['QLowEnergyAdvertisingParameters.AddressInfo']: ... + def setWhiteList(self, whiteList: typing.Iterable['QLowEnergyAdvertisingParameters.AddressInfo'], policy: 'QLowEnergyAdvertisingParameters.FilterPolicy') -> None: ... + def mode(self) -> 'QLowEnergyAdvertisingParameters.Mode': ... + def setMode(self, mode: 'QLowEnergyAdvertisingParameters.Mode') -> None: ... + + +class QLowEnergyCharacteristic(PyQt5.sip.wrapper): + + class PropertyType(int): + Unknown = ... # type: QLowEnergyCharacteristic.PropertyType + Broadcasting = ... # type: QLowEnergyCharacteristic.PropertyType + Read = ... # type: QLowEnergyCharacteristic.PropertyType + WriteNoResponse = ... # type: QLowEnergyCharacteristic.PropertyType + Write = ... # type: QLowEnergyCharacteristic.PropertyType + Notify = ... # type: QLowEnergyCharacteristic.PropertyType + Indicate = ... # type: QLowEnergyCharacteristic.PropertyType + WriteSigned = ... # type: QLowEnergyCharacteristic.PropertyType + ExtendedProperty = ... # type: QLowEnergyCharacteristic.PropertyType + + class PropertyTypes(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QLowEnergyCharacteristic.PropertyTypes', 'QLowEnergyCharacteristic.PropertyType']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QLowEnergyCharacteristic.PropertyTypes', 'QLowEnergyCharacteristic.PropertyType']) -> 'QLowEnergyCharacteristic.PropertyTypes': ... + def __xor__(self, f: typing.Union['QLowEnergyCharacteristic.PropertyTypes', 'QLowEnergyCharacteristic.PropertyType']) -> 'QLowEnergyCharacteristic.PropertyTypes': ... + def __ior__(self, f: typing.Union['QLowEnergyCharacteristic.PropertyTypes', 'QLowEnergyCharacteristic.PropertyType']) -> 'QLowEnergyCharacteristic.PropertyTypes': ... + def __or__(self, f: typing.Union['QLowEnergyCharacteristic.PropertyTypes', 'QLowEnergyCharacteristic.PropertyType']) -> 'QLowEnergyCharacteristic.PropertyTypes': ... + def __iand__(self, f: typing.Union['QLowEnergyCharacteristic.PropertyTypes', 'QLowEnergyCharacteristic.PropertyType']) -> 'QLowEnergyCharacteristic.PropertyTypes': ... + def __and__(self, f: typing.Union['QLowEnergyCharacteristic.PropertyTypes', 'QLowEnergyCharacteristic.PropertyType']) -> 'QLowEnergyCharacteristic.PropertyTypes': ... + def __invert__(self) -> 'QLowEnergyCharacteristic.PropertyTypes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QLowEnergyCharacteristic') -> None: ... + + def isValid(self) -> bool: ... + def descriptors(self) -> typing.List['QLowEnergyDescriptor']: ... + def descriptor(self, uuid: QBluetoothUuid) -> 'QLowEnergyDescriptor': ... + def handle(self) -> int: ... + def properties(self) -> 'QLowEnergyCharacteristic.PropertyTypes': ... + def value(self) -> QtCore.QByteArray: ... + def uuid(self) -> QBluetoothUuid: ... + def name(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QLowEnergyCharacteristicData(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QLowEnergyCharacteristicData') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def swap(self, other: 'QLowEnergyCharacteristicData') -> None: ... + def isValid(self) -> bool: ... + def maximumValueLength(self) -> int: ... + def minimumValueLength(self) -> int: ... + def setValueLength(self, minimum: int, maximum: int) -> None: ... + def writeConstraints(self) -> QBluetooth.AttAccessConstraints: ... + def setWriteConstraints(self, constraints: typing.Union[QBluetooth.AttAccessConstraints, QBluetooth.AttAccessConstraint]) -> None: ... + def readConstraints(self) -> QBluetooth.AttAccessConstraints: ... + def setReadConstraints(self, constraints: typing.Union[QBluetooth.AttAccessConstraints, QBluetooth.AttAccessConstraint]) -> None: ... + def addDescriptor(self, descriptor: 'QLowEnergyDescriptorData') -> None: ... + def setDescriptors(self, descriptors: typing.Iterable['QLowEnergyDescriptorData']) -> None: ... + def descriptors(self) -> typing.List['QLowEnergyDescriptorData']: ... + def setProperties(self, properties: typing.Union[QLowEnergyCharacteristic.PropertyTypes, QLowEnergyCharacteristic.PropertyType]) -> None: ... + def properties(self) -> QLowEnergyCharacteristic.PropertyTypes: ... + def setValue(self, value: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def value(self) -> QtCore.QByteArray: ... + def setUuid(self, uuid: QBluetoothUuid) -> None: ... + def uuid(self) -> QBluetoothUuid: ... + + +class QLowEnergyConnectionParameters(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QLowEnergyConnectionParameters') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def swap(self, other: 'QLowEnergyConnectionParameters') -> None: ... + def supervisionTimeout(self) -> int: ... + def setSupervisionTimeout(self, timeout: int) -> None: ... + def latency(self) -> int: ... + def setLatency(self, latency: int) -> None: ... + def maximumInterval(self) -> float: ... + def minimumInterval(self) -> float: ... + def setIntervalRange(self, minimum: float, maximum: float) -> None: ... + + +class QLowEnergyController(QtCore.QObject): + + class Role(int): + CentralRole = ... # type: QLowEnergyController.Role + PeripheralRole = ... # type: QLowEnergyController.Role + + class RemoteAddressType(int): + PublicAddress = ... # type: QLowEnergyController.RemoteAddressType + RandomAddress = ... # type: QLowEnergyController.RemoteAddressType + + class ControllerState(int): + UnconnectedState = ... # type: QLowEnergyController.ControllerState + ConnectingState = ... # type: QLowEnergyController.ControllerState + ConnectedState = ... # type: QLowEnergyController.ControllerState + DiscoveringState = ... # type: QLowEnergyController.ControllerState + DiscoveredState = ... # type: QLowEnergyController.ControllerState + ClosingState = ... # type: QLowEnergyController.ControllerState + AdvertisingState = ... # type: QLowEnergyController.ControllerState + + class Error(int): + NoError = ... # type: QLowEnergyController.Error + UnknownError = ... # type: QLowEnergyController.Error + UnknownRemoteDeviceError = ... # type: QLowEnergyController.Error + NetworkError = ... # type: QLowEnergyController.Error + InvalidBluetoothAdapterError = ... # type: QLowEnergyController.Error + ConnectionError = ... # type: QLowEnergyController.Error + AdvertisingError = ... # type: QLowEnergyController.Error + RemoteHostClosedError = ... # type: QLowEnergyController.Error + AuthorizationError = ... # type: QLowEnergyController.Error + + @typing.overload + def __init__(self, remoteDevice: QBluetoothDeviceInfo, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, remoteDevice: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, remoteDevice: QBluetoothAddress, localDevice: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def remoteDeviceUuid(self) -> QBluetoothUuid: ... + connectionUpdated: typing.ClassVar[QtCore.pyqtSignal] + def role(self) -> 'QLowEnergyController.Role': ... + def requestConnectionUpdate(self, parameters: QLowEnergyConnectionParameters) -> None: ... + def addService(self, service: 'QLowEnergyServiceData', parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyService']: ... + def stopAdvertising(self) -> None: ... + def startAdvertising(self, parameters: QLowEnergyAdvertisingParameters, advertisingData: QLowEnergyAdvertisingData, scanResponseData: QLowEnergyAdvertisingData = ...) -> None: ... + @staticmethod + def createPeripheral(parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyController']: ... + @typing.overload + @staticmethod + def createCentral(remoteDevice: QBluetoothDeviceInfo, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyController']: ... + @typing.overload + @staticmethod + def createCentral(remoteDevice: QBluetoothAddress, localDevice: QBluetoothAddress, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyController']: ... + discoveryFinished: typing.ClassVar[QtCore.pyqtSignal] + serviceDiscovered: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + disconnected: typing.ClassVar[QtCore.pyqtSignal] + connected: typing.ClassVar[QtCore.pyqtSignal] + def remoteName(self) -> str: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def createServiceObject(self, service: QBluetoothUuid, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QLowEnergyService']: ... + def services(self) -> typing.List[QBluetoothUuid]: ... + def discoverServices(self) -> None: ... + def disconnectFromDevice(self) -> None: ... + def connectToDevice(self) -> None: ... + def setRemoteAddressType(self, type: 'QLowEnergyController.RemoteAddressType') -> None: ... + def remoteAddressType(self) -> 'QLowEnergyController.RemoteAddressType': ... + def state(self) -> 'QLowEnergyController.ControllerState': ... + def remoteAddress(self) -> QBluetoothAddress: ... + def localAddress(self) -> QBluetoothAddress: ... + + +class QLowEnergyDescriptor(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QLowEnergyDescriptor') -> None: ... + + def type(self) -> QBluetoothUuid.DescriptorType: ... + def name(self) -> str: ... + def handle(self) -> int: ... + def uuid(self) -> QBluetoothUuid: ... + def value(self) -> QtCore.QByteArray: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QLowEnergyDescriptorData(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, uuid: QBluetoothUuid, value: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, other: 'QLowEnergyDescriptorData') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def swap(self, other: 'QLowEnergyDescriptorData') -> None: ... + def writeConstraints(self) -> QBluetooth.AttAccessConstraints: ... + def isWritable(self) -> bool: ... + def setWritePermissions(self, writable: bool, constraints: typing.Union[QBluetooth.AttAccessConstraints, QBluetooth.AttAccessConstraint] = ...) -> None: ... + def readConstraints(self) -> QBluetooth.AttAccessConstraints: ... + def isReadable(self) -> bool: ... + def setReadPermissions(self, readable: bool, constraints: typing.Union[QBluetooth.AttAccessConstraints, QBluetooth.AttAccessConstraint] = ...) -> None: ... + def isValid(self) -> bool: ... + def setUuid(self, uuid: QBluetoothUuid) -> None: ... + def uuid(self) -> QBluetoothUuid: ... + def setValue(self, value: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def value(self) -> QtCore.QByteArray: ... + + +class QLowEnergyService(QtCore.QObject): + + class WriteMode(int): + WriteWithResponse = ... # type: QLowEnergyService.WriteMode + WriteWithoutResponse = ... # type: QLowEnergyService.WriteMode + WriteSigned = ... # type: QLowEnergyService.WriteMode + + class ServiceState(int): + InvalidService = ... # type: QLowEnergyService.ServiceState + DiscoveryRequired = ... # type: QLowEnergyService.ServiceState + DiscoveringServices = ... # type: QLowEnergyService.ServiceState + ServiceDiscovered = ... # type: QLowEnergyService.ServiceState + LocalService = ... # type: QLowEnergyService.ServiceState + + class ServiceError(int): + NoError = ... # type: QLowEnergyService.ServiceError + OperationError = ... # type: QLowEnergyService.ServiceError + CharacteristicWriteError = ... # type: QLowEnergyService.ServiceError + DescriptorWriteError = ... # type: QLowEnergyService.ServiceError + CharacteristicReadError = ... # type: QLowEnergyService.ServiceError + DescriptorReadError = ... # type: QLowEnergyService.ServiceError + UnknownError = ... # type: QLowEnergyService.ServiceError + + class ServiceType(int): + PrimaryService = ... # type: QLowEnergyService.ServiceType + IncludedService = ... # type: QLowEnergyService.ServiceType + + class ServiceTypes(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QLowEnergyService.ServiceTypes', 'QLowEnergyService.ServiceType']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QLowEnergyService.ServiceTypes', 'QLowEnergyService.ServiceType']) -> 'QLowEnergyService.ServiceTypes': ... + def __xor__(self, f: typing.Union['QLowEnergyService.ServiceTypes', 'QLowEnergyService.ServiceType']) -> 'QLowEnergyService.ServiceTypes': ... + def __ior__(self, f: typing.Union['QLowEnergyService.ServiceTypes', 'QLowEnergyService.ServiceType']) -> 'QLowEnergyService.ServiceTypes': ... + def __or__(self, f: typing.Union['QLowEnergyService.ServiceTypes', 'QLowEnergyService.ServiceType']) -> 'QLowEnergyService.ServiceTypes': ... + def __iand__(self, f: typing.Union['QLowEnergyService.ServiceTypes', 'QLowEnergyService.ServiceType']) -> 'QLowEnergyService.ServiceTypes': ... + def __and__(self, f: typing.Union['QLowEnergyService.ServiceTypes', 'QLowEnergyService.ServiceType']) -> 'QLowEnergyService.ServiceTypes': ... + def __invert__(self) -> 'QLowEnergyService.ServiceTypes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + descriptorRead: typing.ClassVar[QtCore.pyqtSignal] + characteristicRead: typing.ClassVar[QtCore.pyqtSignal] + def readDescriptor(self, descriptor: QLowEnergyDescriptor) -> None: ... + def readCharacteristic(self, characteristic: QLowEnergyCharacteristic) -> None: ... + descriptorWritten: typing.ClassVar[QtCore.pyqtSignal] + characteristicWritten: typing.ClassVar[QtCore.pyqtSignal] + characteristicChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def writeDescriptor(self, descriptor: QLowEnergyDescriptor, newValue: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def writeCharacteristic(self, characteristic: QLowEnergyCharacteristic, newValue: typing.Union[QtCore.QByteArray, bytes, bytearray], mode: 'QLowEnergyService.WriteMode' = ...) -> None: ... + @typing.overload + def contains(self, characteristic: QLowEnergyCharacteristic) -> bool: ... + @typing.overload + def contains(self, descriptor: QLowEnergyDescriptor) -> bool: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def discoverDetails(self) -> None: ... + def serviceName(self) -> str: ... + def serviceUuid(self) -> QBluetoothUuid: ... + def characteristics(self) -> typing.List[QLowEnergyCharacteristic]: ... + def characteristic(self, uuid: QBluetoothUuid) -> QLowEnergyCharacteristic: ... + def state(self) -> 'QLowEnergyService.ServiceState': ... + def type(self) -> 'QLowEnergyService.ServiceTypes': ... + def includedServices(self) -> typing.List[QBluetoothUuid]: ... + + +class QLowEnergyServiceData(PyQt5.sip.wrapper): + + class ServiceType(int): + ServiceTypePrimary = ... # type: QLowEnergyServiceData.ServiceType + ServiceTypeSecondary = ... # type: QLowEnergyServiceData.ServiceType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QLowEnergyServiceData') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def swap(self, other: 'QLowEnergyServiceData') -> None: ... + def isValid(self) -> bool: ... + def addCharacteristic(self, characteristic: QLowEnergyCharacteristicData) -> None: ... + def setCharacteristics(self, characteristics: typing.Iterable[QLowEnergyCharacteristicData]) -> None: ... + def characteristics(self) -> typing.List[QLowEnergyCharacteristicData]: ... + def addIncludedService(self, service: typing.Optional[QLowEnergyService]) -> None: ... + def setIncludedServices(self, services: typing.Iterable[QLowEnergyService]) -> None: ... + def includedServices(self) -> typing.List[QLowEnergyService]: ... + def setUuid(self, uuid: QBluetoothUuid) -> None: ... + def uuid(self) -> QBluetoothUuid: ... + def setType(self, type: 'QLowEnergyServiceData.ServiceType') -> None: ... + def type(self) -> 'QLowEnergyServiceData.ServiceType': ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtCore.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtCore.abi3.so new file mode 100644 index 0000000..7b8214c Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtCore.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtCore.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtCore.pyi new file mode 100644 index 0000000..2490ccd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtCore.pyi @@ -0,0 +1,10026 @@ +# The PEP 484 type hints stub file for the QtCore module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +# Support for QDate, QDateTime and QTime. +import datetime + +# Support for Q_ENUM and Q_FLAG. +import enum + + +# Support for new-style signals and slots. +class pyqtSignal: + + signatures = ... # type: typing.Tuple[str, ...] + + def __init__(self, *types: typing.Any, name: str = ...) -> None: ... + + @typing.overload + def __get__(self, instance: None, owner: typing.Type['QObject']) -> 'pyqtSignal': ... + + @typing.overload + def __get__(self, instance: 'QObject', owner: typing.Type['QObject']) -> 'pyqtBoundSignal': ... + + + +class pyqtBoundSignal: + + signal = ... # type: str + + def __getitem__(self, key: object) -> 'pyqtBoundSignal': ... + + def connect(self, slot: 'PYQT_SLOT') -> 'QMetaObject.Connection': ... + + @typing.overload + def disconnect(self) -> None: ... + + @typing.overload + def disconnect(self, slot: typing.Union['PYQT_SLOT', 'QMetaObject.Connection']) -> None: ... + + def emit(self, *args: typing.Any) -> None: ... + + +FuncT = typing.TypeVar('FuncT', bound=typing.Callable) +def pyqtSlot(*types, name: typing.Optional[str] = ..., result: typing.Optional[str] = ...) -> typing.Callable[[FuncT], FuncT]: ... + + +# For QObject.findChild() and QObject.findChildren(). +QObjectT = typing.TypeVar('QObjectT', bound=QObject) + + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[pyqtSignal, pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., None], pyqtBoundSignal] + + +class QtMsgType(int): + QtDebugMsg = ... # type: QtMsgType + QtWarningMsg = ... # type: QtMsgType + QtCriticalMsg = ... # type: QtMsgType + QtFatalMsg = ... # type: QtMsgType + QtSystemMsg = ... # type: QtMsgType + QtInfoMsg = ... # type: QtMsgType + + +class QCborKnownTags(int): + DateTimeString = ... # type: QCborKnownTags + UnixTime_t = ... # type: QCborKnownTags + PositiveBignum = ... # type: QCborKnownTags + NegativeBignum = ... # type: QCborKnownTags + Decimal = ... # type: QCborKnownTags + Bigfloat = ... # type: QCborKnownTags + COSE_Encrypt0 = ... # type: QCborKnownTags + COSE_Mac0 = ... # type: QCborKnownTags + COSE_Sign1 = ... # type: QCborKnownTags + ExpectedBase64url = ... # type: QCborKnownTags + ExpectedBase64 = ... # type: QCborKnownTags + ExpectedBase16 = ... # type: QCborKnownTags + EncodedCbor = ... # type: QCborKnownTags + Url = ... # type: QCborKnownTags + Base64url = ... # type: QCborKnownTags + Base64 = ... # type: QCborKnownTags + RegularExpression = ... # type: QCborKnownTags + MimeMessage = ... # type: QCborKnownTags + Uuid = ... # type: QCborKnownTags + COSE_Encrypt = ... # type: QCborKnownTags + COSE_Mac = ... # type: QCborKnownTags + COSE_Sign = ... # type: QCborKnownTags + Signature = ... # type: QCborKnownTags + + +class QCborSimpleType(int): + False_ = ... # type: QCborSimpleType + True_ = ... # type: QCborSimpleType + Null = ... # type: QCborSimpleType + Undefined = ... # type: QCborSimpleType + + +class Qt(PyQt5.sip.simplewrapper): + + class HighDpiScaleFactorRoundingPolicy(int): + Round = ... # type: Qt.HighDpiScaleFactorRoundingPolicy + Ceil = ... # type: Qt.HighDpiScaleFactorRoundingPolicy + Floor = ... # type: Qt.HighDpiScaleFactorRoundingPolicy + RoundPreferFloor = ... # type: Qt.HighDpiScaleFactorRoundingPolicy + PassThrough = ... # type: Qt.HighDpiScaleFactorRoundingPolicy + + class ChecksumType(int): + ChecksumIso3309 = ... # type: Qt.ChecksumType + ChecksumItuV41 = ... # type: Qt.ChecksumType + + class EnterKeyType(int): + EnterKeyDefault = ... # type: Qt.EnterKeyType + EnterKeyReturn = ... # type: Qt.EnterKeyType + EnterKeyDone = ... # type: Qt.EnterKeyType + EnterKeyGo = ... # type: Qt.EnterKeyType + EnterKeySend = ... # type: Qt.EnterKeyType + EnterKeySearch = ... # type: Qt.EnterKeyType + EnterKeyNext = ... # type: Qt.EnterKeyType + EnterKeyPrevious = ... # type: Qt.EnterKeyType + + class ItemSelectionOperation(int): + ReplaceSelection = ... # type: Qt.ItemSelectionOperation + AddToSelection = ... # type: Qt.ItemSelectionOperation + + class TabFocusBehavior(int): + NoTabFocus = ... # type: Qt.TabFocusBehavior + TabFocusTextControls = ... # type: Qt.TabFocusBehavior + TabFocusListControls = ... # type: Qt.TabFocusBehavior + TabFocusAllControls = ... # type: Qt.TabFocusBehavior + + class MouseEventFlag(int): + MouseEventCreatedDoubleClick = ... # type: Qt.MouseEventFlag + + class MouseEventSource(int): + MouseEventNotSynthesized = ... # type: Qt.MouseEventSource + MouseEventSynthesizedBySystem = ... # type: Qt.MouseEventSource + MouseEventSynthesizedByQt = ... # type: Qt.MouseEventSource + MouseEventSynthesizedByApplication = ... # type: Qt.MouseEventSource + + class ScrollPhase(int): + ScrollBegin = ... # type: Qt.ScrollPhase + ScrollUpdate = ... # type: Qt.ScrollPhase + ScrollEnd = ... # type: Qt.ScrollPhase + NoScrollPhase = ... # type: Qt.ScrollPhase + ScrollMomentum = ... # type: Qt.ScrollPhase + + class NativeGestureType(int): + BeginNativeGesture = ... # type: Qt.NativeGestureType + EndNativeGesture = ... # type: Qt.NativeGestureType + PanNativeGesture = ... # type: Qt.NativeGestureType + ZoomNativeGesture = ... # type: Qt.NativeGestureType + SmartZoomNativeGesture = ... # type: Qt.NativeGestureType + RotateNativeGesture = ... # type: Qt.NativeGestureType + SwipeNativeGesture = ... # type: Qt.NativeGestureType + + class Edge(int): + TopEdge = ... # type: Qt.Edge + LeftEdge = ... # type: Qt.Edge + RightEdge = ... # type: Qt.Edge + BottomEdge = ... # type: Qt.Edge + + class ApplicationState(int): + ApplicationSuspended = ... # type: Qt.ApplicationState + ApplicationHidden = ... # type: Qt.ApplicationState + ApplicationInactive = ... # type: Qt.ApplicationState + ApplicationActive = ... # type: Qt.ApplicationState + + class HitTestAccuracy(int): + ExactHit = ... # type: Qt.HitTestAccuracy + FuzzyHit = ... # type: Qt.HitTestAccuracy + + class WhiteSpaceMode(int): + WhiteSpaceNormal = ... # type: Qt.WhiteSpaceMode + WhiteSpacePre = ... # type: Qt.WhiteSpaceMode + WhiteSpaceNoWrap = ... # type: Qt.WhiteSpaceMode + WhiteSpaceModeUndefined = ... # type: Qt.WhiteSpaceMode + + class FindChildOption(int): + FindDirectChildrenOnly = ... # type: Qt.FindChildOption + FindChildrenRecursively = ... # type: Qt.FindChildOption + + class ScreenOrientation(int): + PrimaryOrientation = ... # type: Qt.ScreenOrientation + PortraitOrientation = ... # type: Qt.ScreenOrientation + LandscapeOrientation = ... # type: Qt.ScreenOrientation + InvertedPortraitOrientation = ... # type: Qt.ScreenOrientation + InvertedLandscapeOrientation = ... # type: Qt.ScreenOrientation + + class CursorMoveStyle(int): + LogicalMoveStyle = ... # type: Qt.CursorMoveStyle + VisualMoveStyle = ... # type: Qt.CursorMoveStyle + + class NavigationMode(int): + NavigationModeNone = ... # type: Qt.NavigationMode + NavigationModeKeypadTabOrder = ... # type: Qt.NavigationMode + NavigationModeKeypadDirectional = ... # type: Qt.NavigationMode + NavigationModeCursorAuto = ... # type: Qt.NavigationMode + NavigationModeCursorForceVisible = ... # type: Qt.NavigationMode + + class GestureFlag(int): + DontStartGestureOnChildren = ... # type: Qt.GestureFlag + ReceivePartialGestures = ... # type: Qt.GestureFlag + IgnoredGesturesPropagateToParent = ... # type: Qt.GestureFlag + + class GestureType(int): + TapGesture = ... # type: Qt.GestureType + TapAndHoldGesture = ... # type: Qt.GestureType + PanGesture = ... # type: Qt.GestureType + PinchGesture = ... # type: Qt.GestureType + SwipeGesture = ... # type: Qt.GestureType + CustomGesture = ... # type: Qt.GestureType + + class GestureState(int): + GestureStarted = ... # type: Qt.GestureState + GestureUpdated = ... # type: Qt.GestureState + GestureFinished = ... # type: Qt.GestureState + GestureCanceled = ... # type: Qt.GestureState + + class TouchPointState(int): + TouchPointPressed = ... # type: Qt.TouchPointState + TouchPointMoved = ... # type: Qt.TouchPointState + TouchPointStationary = ... # type: Qt.TouchPointState + TouchPointReleased = ... # type: Qt.TouchPointState + + class CoordinateSystem(int): + DeviceCoordinates = ... # type: Qt.CoordinateSystem + LogicalCoordinates = ... # type: Qt.CoordinateSystem + + class AnchorPoint(int): + AnchorLeft = ... # type: Qt.AnchorPoint + AnchorHorizontalCenter = ... # type: Qt.AnchorPoint + AnchorRight = ... # type: Qt.AnchorPoint + AnchorTop = ... # type: Qt.AnchorPoint + AnchorVerticalCenter = ... # type: Qt.AnchorPoint + AnchorBottom = ... # type: Qt.AnchorPoint + + class InputMethodHint(int): + ImhNone = ... # type: Qt.InputMethodHint + ImhHiddenText = ... # type: Qt.InputMethodHint + ImhNoAutoUppercase = ... # type: Qt.InputMethodHint + ImhPreferNumbers = ... # type: Qt.InputMethodHint + ImhPreferUppercase = ... # type: Qt.InputMethodHint + ImhPreferLowercase = ... # type: Qt.InputMethodHint + ImhNoPredictiveText = ... # type: Qt.InputMethodHint + ImhDigitsOnly = ... # type: Qt.InputMethodHint + ImhFormattedNumbersOnly = ... # type: Qt.InputMethodHint + ImhUppercaseOnly = ... # type: Qt.InputMethodHint + ImhLowercaseOnly = ... # type: Qt.InputMethodHint + ImhDialableCharactersOnly = ... # type: Qt.InputMethodHint + ImhEmailCharactersOnly = ... # type: Qt.InputMethodHint + ImhUrlCharactersOnly = ... # type: Qt.InputMethodHint + ImhExclusiveInputMask = ... # type: Qt.InputMethodHint + ImhSensitiveData = ... # type: Qt.InputMethodHint + ImhDate = ... # type: Qt.InputMethodHint + ImhTime = ... # type: Qt.InputMethodHint + ImhPreferLatin = ... # type: Qt.InputMethodHint + ImhLatinOnly = ... # type: Qt.InputMethodHint + ImhMultiLine = ... # type: Qt.InputMethodHint + ImhNoEditMenu = ... # type: Qt.InputMethodHint + ImhNoTextHandles = ... # type: Qt.InputMethodHint + + class TileRule(int): + StretchTile = ... # type: Qt.TileRule + RepeatTile = ... # type: Qt.TileRule + RoundTile = ... # type: Qt.TileRule + + class WindowFrameSection(int): + NoSection = ... # type: Qt.WindowFrameSection + LeftSection = ... # type: Qt.WindowFrameSection + TopLeftSection = ... # type: Qt.WindowFrameSection + TopSection = ... # type: Qt.WindowFrameSection + TopRightSection = ... # type: Qt.WindowFrameSection + RightSection = ... # type: Qt.WindowFrameSection + BottomRightSection = ... # type: Qt.WindowFrameSection + BottomSection = ... # type: Qt.WindowFrameSection + BottomLeftSection = ... # type: Qt.WindowFrameSection + TitleBarArea = ... # type: Qt.WindowFrameSection + + class SizeHint(int): + MinimumSize = ... # type: Qt.SizeHint + PreferredSize = ... # type: Qt.SizeHint + MaximumSize = ... # type: Qt.SizeHint + MinimumDescent = ... # type: Qt.SizeHint + + class SizeMode(int): + AbsoluteSize = ... # type: Qt.SizeMode + RelativeSize = ... # type: Qt.SizeMode + + class EventPriority(int): + HighEventPriority = ... # type: Qt.EventPriority + NormalEventPriority = ... # type: Qt.EventPriority + LowEventPriority = ... # type: Qt.EventPriority + + class Axis(int): + XAxis = ... # type: Qt.Axis + YAxis = ... # type: Qt.Axis + ZAxis = ... # type: Qt.Axis + + class MaskMode(int): + MaskInColor = ... # type: Qt.MaskMode + MaskOutColor = ... # type: Qt.MaskMode + + class TextInteractionFlag(int): + NoTextInteraction = ... # type: Qt.TextInteractionFlag + TextSelectableByMouse = ... # type: Qt.TextInteractionFlag + TextSelectableByKeyboard = ... # type: Qt.TextInteractionFlag + LinksAccessibleByMouse = ... # type: Qt.TextInteractionFlag + LinksAccessibleByKeyboard = ... # type: Qt.TextInteractionFlag + TextEditable = ... # type: Qt.TextInteractionFlag + TextEditorInteraction = ... # type: Qt.TextInteractionFlag + TextBrowserInteraction = ... # type: Qt.TextInteractionFlag + + class ItemSelectionMode(int): + ContainsItemShape = ... # type: Qt.ItemSelectionMode + IntersectsItemShape = ... # type: Qt.ItemSelectionMode + ContainsItemBoundingRect = ... # type: Qt.ItemSelectionMode + IntersectsItemBoundingRect = ... # type: Qt.ItemSelectionMode + + class ApplicationAttribute(int): + AA_ImmediateWidgetCreation = ... # type: Qt.ApplicationAttribute + AA_MSWindowsUseDirect3DByDefault = ... # type: Qt.ApplicationAttribute + AA_DontShowIconsInMenus = ... # type: Qt.ApplicationAttribute + AA_NativeWindows = ... # type: Qt.ApplicationAttribute + AA_DontCreateNativeWidgetSiblings = ... # type: Qt.ApplicationAttribute + AA_MacPluginApplication = ... # type: Qt.ApplicationAttribute + AA_DontUseNativeMenuBar = ... # type: Qt.ApplicationAttribute + AA_MacDontSwapCtrlAndMeta = ... # type: Qt.ApplicationAttribute + AA_X11InitThreads = ... # type: Qt.ApplicationAttribute + AA_Use96Dpi = ... # type: Qt.ApplicationAttribute + AA_SynthesizeTouchForUnhandledMouseEvents = ... # type: Qt.ApplicationAttribute + AA_SynthesizeMouseForUnhandledTouchEvents = ... # type: Qt.ApplicationAttribute + AA_UseHighDpiPixmaps = ... # type: Qt.ApplicationAttribute + AA_ForceRasterWidgets = ... # type: Qt.ApplicationAttribute + AA_UseDesktopOpenGL = ... # type: Qt.ApplicationAttribute + AA_UseOpenGLES = ... # type: Qt.ApplicationAttribute + AA_UseSoftwareOpenGL = ... # type: Qt.ApplicationAttribute + AA_ShareOpenGLContexts = ... # type: Qt.ApplicationAttribute + AA_SetPalette = ... # type: Qt.ApplicationAttribute + AA_EnableHighDpiScaling = ... # type: Qt.ApplicationAttribute + AA_DisableHighDpiScaling = ... # type: Qt.ApplicationAttribute + AA_PluginApplication = ... # type: Qt.ApplicationAttribute + AA_UseStyleSheetPropagationInWidgetStyles = ... # type: Qt.ApplicationAttribute + AA_DontUseNativeDialogs = ... # type: Qt.ApplicationAttribute + AA_SynthesizeMouseForUnhandledTabletEvents = ... # type: Qt.ApplicationAttribute + AA_CompressHighFrequencyEvents = ... # type: Qt.ApplicationAttribute + AA_DontCheckOpenGLContextThreadAffinity = ... # type: Qt.ApplicationAttribute + AA_DisableShaderDiskCache = ... # type: Qt.ApplicationAttribute + AA_DontShowShortcutsInContextMenus = ... # type: Qt.ApplicationAttribute + AA_CompressTabletEvents = ... # type: Qt.ApplicationAttribute + AA_DisableWindowContextHelpButton = ... # type: Qt.ApplicationAttribute + AA_DisableSessionManager = ... # type: Qt.ApplicationAttribute + AA_DisableNativeVirtualKeyboard = ... # type: Qt.ApplicationAttribute + + class WindowModality(int): + NonModal = ... # type: Qt.WindowModality + WindowModal = ... # type: Qt.WindowModality + ApplicationModal = ... # type: Qt.WindowModality + + class MatchFlag(int): + MatchExactly = ... # type: Qt.MatchFlag + MatchFixedString = ... # type: Qt.MatchFlag + MatchContains = ... # type: Qt.MatchFlag + MatchStartsWith = ... # type: Qt.MatchFlag + MatchEndsWith = ... # type: Qt.MatchFlag + MatchRegExp = ... # type: Qt.MatchFlag + MatchWildcard = ... # type: Qt.MatchFlag + MatchCaseSensitive = ... # type: Qt.MatchFlag + MatchWrap = ... # type: Qt.MatchFlag + MatchRecursive = ... # type: Qt.MatchFlag + MatchRegularExpression = ... # type: Qt.MatchFlag + + class ItemFlag(int): + NoItemFlags = ... # type: Qt.ItemFlag + ItemIsSelectable = ... # type: Qt.ItemFlag + ItemIsEditable = ... # type: Qt.ItemFlag + ItemIsDragEnabled = ... # type: Qt.ItemFlag + ItemIsDropEnabled = ... # type: Qt.ItemFlag + ItemIsUserCheckable = ... # type: Qt.ItemFlag + ItemIsEnabled = ... # type: Qt.ItemFlag + ItemIsTristate = ... # type: Qt.ItemFlag + ItemNeverHasChildren = ... # type: Qt.ItemFlag + ItemIsUserTristate = ... # type: Qt.ItemFlag + ItemIsAutoTristate = ... # type: Qt.ItemFlag + + class ItemDataRole(int): + DisplayRole = ... # type: Qt.ItemDataRole + DecorationRole = ... # type: Qt.ItemDataRole + EditRole = ... # type: Qt.ItemDataRole + ToolTipRole = ... # type: Qt.ItemDataRole + StatusTipRole = ... # type: Qt.ItemDataRole + WhatsThisRole = ... # type: Qt.ItemDataRole + FontRole = ... # type: Qt.ItemDataRole + TextAlignmentRole = ... # type: Qt.ItemDataRole + BackgroundRole = ... # type: Qt.ItemDataRole + BackgroundColorRole = ... # type: Qt.ItemDataRole + ForegroundRole = ... # type: Qt.ItemDataRole + TextColorRole = ... # type: Qt.ItemDataRole + CheckStateRole = ... # type: Qt.ItemDataRole + AccessibleTextRole = ... # type: Qt.ItemDataRole + AccessibleDescriptionRole = ... # type: Qt.ItemDataRole + SizeHintRole = ... # type: Qt.ItemDataRole + InitialSortOrderRole = ... # type: Qt.ItemDataRole + UserRole = ... # type: Qt.ItemDataRole + + class CheckState(int): + Unchecked = ... # type: Qt.CheckState + PartiallyChecked = ... # type: Qt.CheckState + Checked = ... # type: Qt.CheckState + + class DropAction(int): + CopyAction = ... # type: Qt.DropAction + MoveAction = ... # type: Qt.DropAction + LinkAction = ... # type: Qt.DropAction + ActionMask = ... # type: Qt.DropAction + TargetMoveAction = ... # type: Qt.DropAction + IgnoreAction = ... # type: Qt.DropAction + + class LayoutDirection(int): + LeftToRight = ... # type: Qt.LayoutDirection + RightToLeft = ... # type: Qt.LayoutDirection + LayoutDirectionAuto = ... # type: Qt.LayoutDirection + + class ToolButtonStyle(int): + ToolButtonIconOnly = ... # type: Qt.ToolButtonStyle + ToolButtonTextOnly = ... # type: Qt.ToolButtonStyle + ToolButtonTextBesideIcon = ... # type: Qt.ToolButtonStyle + ToolButtonTextUnderIcon = ... # type: Qt.ToolButtonStyle + ToolButtonFollowStyle = ... # type: Qt.ToolButtonStyle + + class InputMethodQuery(int): + ImMicroFocus = ... # type: Qt.InputMethodQuery + ImFont = ... # type: Qt.InputMethodQuery + ImCursorPosition = ... # type: Qt.InputMethodQuery + ImSurroundingText = ... # type: Qt.InputMethodQuery + ImCurrentSelection = ... # type: Qt.InputMethodQuery + ImMaximumTextLength = ... # type: Qt.InputMethodQuery + ImAnchorPosition = ... # type: Qt.InputMethodQuery + ImEnabled = ... # type: Qt.InputMethodQuery + ImCursorRectangle = ... # type: Qt.InputMethodQuery + ImHints = ... # type: Qt.InputMethodQuery + ImPreferredLanguage = ... # type: Qt.InputMethodQuery + ImPlatformData = ... # type: Qt.InputMethodQuery + ImQueryInput = ... # type: Qt.InputMethodQuery + ImQueryAll = ... # type: Qt.InputMethodQuery + ImAbsolutePosition = ... # type: Qt.InputMethodQuery + ImTextBeforeCursor = ... # type: Qt.InputMethodQuery + ImTextAfterCursor = ... # type: Qt.InputMethodQuery + ImEnterKeyType = ... # type: Qt.InputMethodQuery + ImAnchorRectangle = ... # type: Qt.InputMethodQuery + ImInputItemClipRectangle = ... # type: Qt.InputMethodQuery + + class ContextMenuPolicy(int): + NoContextMenu = ... # type: Qt.ContextMenuPolicy + PreventContextMenu = ... # type: Qt.ContextMenuPolicy + DefaultContextMenu = ... # type: Qt.ContextMenuPolicy + ActionsContextMenu = ... # type: Qt.ContextMenuPolicy + CustomContextMenu = ... # type: Qt.ContextMenuPolicy + + class FocusReason(int): + MouseFocusReason = ... # type: Qt.FocusReason + TabFocusReason = ... # type: Qt.FocusReason + BacktabFocusReason = ... # type: Qt.FocusReason + ActiveWindowFocusReason = ... # type: Qt.FocusReason + PopupFocusReason = ... # type: Qt.FocusReason + ShortcutFocusReason = ... # type: Qt.FocusReason + MenuBarFocusReason = ... # type: Qt.FocusReason + OtherFocusReason = ... # type: Qt.FocusReason + NoFocusReason = ... # type: Qt.FocusReason + + class TransformationMode(int): + FastTransformation = ... # type: Qt.TransformationMode + SmoothTransformation = ... # type: Qt.TransformationMode + + class ClipOperation(int): + NoClip = ... # type: Qt.ClipOperation + ReplaceClip = ... # type: Qt.ClipOperation + IntersectClip = ... # type: Qt.ClipOperation + + class FillRule(int): + OddEvenFill = ... # type: Qt.FillRule + WindingFill = ... # type: Qt.FillRule + + class ShortcutContext(int): + WidgetShortcut = ... # type: Qt.ShortcutContext + WindowShortcut = ... # type: Qt.ShortcutContext + ApplicationShortcut = ... # type: Qt.ShortcutContext + WidgetWithChildrenShortcut = ... # type: Qt.ShortcutContext + + class ConnectionType(int): + AutoConnection = ... # type: Qt.ConnectionType + DirectConnection = ... # type: Qt.ConnectionType + QueuedConnection = ... # type: Qt.ConnectionType + BlockingQueuedConnection = ... # type: Qt.ConnectionType + UniqueConnection = ... # type: Qt.ConnectionType + + class Corner(int): + TopLeftCorner = ... # type: Qt.Corner + TopRightCorner = ... # type: Qt.Corner + BottomLeftCorner = ... # type: Qt.Corner + BottomRightCorner = ... # type: Qt.Corner + + class CaseSensitivity(int): + CaseInsensitive = ... # type: Qt.CaseSensitivity + CaseSensitive = ... # type: Qt.CaseSensitivity + + class ScrollBarPolicy(int): + ScrollBarAsNeeded = ... # type: Qt.ScrollBarPolicy + ScrollBarAlwaysOff = ... # type: Qt.ScrollBarPolicy + ScrollBarAlwaysOn = ... # type: Qt.ScrollBarPolicy + + class DayOfWeek(int): + Monday = ... # type: Qt.DayOfWeek + Tuesday = ... # type: Qt.DayOfWeek + Wednesday = ... # type: Qt.DayOfWeek + Thursday = ... # type: Qt.DayOfWeek + Friday = ... # type: Qt.DayOfWeek + Saturday = ... # type: Qt.DayOfWeek + Sunday = ... # type: Qt.DayOfWeek + + class TimeSpec(int): + LocalTime = ... # type: Qt.TimeSpec + UTC = ... # type: Qt.TimeSpec + OffsetFromUTC = ... # type: Qt.TimeSpec + TimeZone = ... # type: Qt.TimeSpec + + class DateFormat(int): + TextDate = ... # type: Qt.DateFormat + ISODate = ... # type: Qt.DateFormat + ISODateWithMs = ... # type: Qt.DateFormat + LocalDate = ... # type: Qt.DateFormat + SystemLocaleDate = ... # type: Qt.DateFormat + LocaleDate = ... # type: Qt.DateFormat + SystemLocaleShortDate = ... # type: Qt.DateFormat + SystemLocaleLongDate = ... # type: Qt.DateFormat + DefaultLocaleShortDate = ... # type: Qt.DateFormat + DefaultLocaleLongDate = ... # type: Qt.DateFormat + RFC2822Date = ... # type: Qt.DateFormat + + class ToolBarArea(int): + LeftToolBarArea = ... # type: Qt.ToolBarArea + RightToolBarArea = ... # type: Qt.ToolBarArea + TopToolBarArea = ... # type: Qt.ToolBarArea + BottomToolBarArea = ... # type: Qt.ToolBarArea + ToolBarArea_Mask = ... # type: Qt.ToolBarArea + AllToolBarAreas = ... # type: Qt.ToolBarArea + NoToolBarArea = ... # type: Qt.ToolBarArea + + class TimerType(int): + PreciseTimer = ... # type: Qt.TimerType + CoarseTimer = ... # type: Qt.TimerType + VeryCoarseTimer = ... # type: Qt.TimerType + + class DockWidgetArea(int): + LeftDockWidgetArea = ... # type: Qt.DockWidgetArea + RightDockWidgetArea = ... # type: Qt.DockWidgetArea + TopDockWidgetArea = ... # type: Qt.DockWidgetArea + BottomDockWidgetArea = ... # type: Qt.DockWidgetArea + DockWidgetArea_Mask = ... # type: Qt.DockWidgetArea + AllDockWidgetAreas = ... # type: Qt.DockWidgetArea + NoDockWidgetArea = ... # type: Qt.DockWidgetArea + + class AspectRatioMode(int): + IgnoreAspectRatio = ... # type: Qt.AspectRatioMode + KeepAspectRatio = ... # type: Qt.AspectRatioMode + KeepAspectRatioByExpanding = ... # type: Qt.AspectRatioMode + + class TextFormat(int): + PlainText = ... # type: Qt.TextFormat + RichText = ... # type: Qt.TextFormat + AutoText = ... # type: Qt.TextFormat + MarkdownText = ... # type: Qt.TextFormat + + class CursorShape(int): + ArrowCursor = ... # type: Qt.CursorShape + UpArrowCursor = ... # type: Qt.CursorShape + CrossCursor = ... # type: Qt.CursorShape + WaitCursor = ... # type: Qt.CursorShape + IBeamCursor = ... # type: Qt.CursorShape + SizeVerCursor = ... # type: Qt.CursorShape + SizeHorCursor = ... # type: Qt.CursorShape + SizeBDiagCursor = ... # type: Qt.CursorShape + SizeFDiagCursor = ... # type: Qt.CursorShape + SizeAllCursor = ... # type: Qt.CursorShape + BlankCursor = ... # type: Qt.CursorShape + SplitVCursor = ... # type: Qt.CursorShape + SplitHCursor = ... # type: Qt.CursorShape + PointingHandCursor = ... # type: Qt.CursorShape + ForbiddenCursor = ... # type: Qt.CursorShape + OpenHandCursor = ... # type: Qt.CursorShape + ClosedHandCursor = ... # type: Qt.CursorShape + WhatsThisCursor = ... # type: Qt.CursorShape + BusyCursor = ... # type: Qt.CursorShape + LastCursor = ... # type: Qt.CursorShape + BitmapCursor = ... # type: Qt.CursorShape + CustomCursor = ... # type: Qt.CursorShape + DragCopyCursor = ... # type: Qt.CursorShape + DragMoveCursor = ... # type: Qt.CursorShape + DragLinkCursor = ... # type: Qt.CursorShape + + class UIEffect(int): + UI_General = ... # type: Qt.UIEffect + UI_AnimateMenu = ... # type: Qt.UIEffect + UI_FadeMenu = ... # type: Qt.UIEffect + UI_AnimateCombo = ... # type: Qt.UIEffect + UI_AnimateTooltip = ... # type: Qt.UIEffect + UI_FadeTooltip = ... # type: Qt.UIEffect + UI_AnimateToolBox = ... # type: Qt.UIEffect + + class BrushStyle(int): + NoBrush = ... # type: Qt.BrushStyle + SolidPattern = ... # type: Qt.BrushStyle + Dense1Pattern = ... # type: Qt.BrushStyle + Dense2Pattern = ... # type: Qt.BrushStyle + Dense3Pattern = ... # type: Qt.BrushStyle + Dense4Pattern = ... # type: Qt.BrushStyle + Dense5Pattern = ... # type: Qt.BrushStyle + Dense6Pattern = ... # type: Qt.BrushStyle + Dense7Pattern = ... # type: Qt.BrushStyle + HorPattern = ... # type: Qt.BrushStyle + VerPattern = ... # type: Qt.BrushStyle + CrossPattern = ... # type: Qt.BrushStyle + BDiagPattern = ... # type: Qt.BrushStyle + FDiagPattern = ... # type: Qt.BrushStyle + DiagCrossPattern = ... # type: Qt.BrushStyle + LinearGradientPattern = ... # type: Qt.BrushStyle + RadialGradientPattern = ... # type: Qt.BrushStyle + ConicalGradientPattern = ... # type: Qt.BrushStyle + TexturePattern = ... # type: Qt.BrushStyle + + class PenJoinStyle(int): + MiterJoin = ... # type: Qt.PenJoinStyle + BevelJoin = ... # type: Qt.PenJoinStyle + RoundJoin = ... # type: Qt.PenJoinStyle + MPenJoinStyle = ... # type: Qt.PenJoinStyle + SvgMiterJoin = ... # type: Qt.PenJoinStyle + + class PenCapStyle(int): + FlatCap = ... # type: Qt.PenCapStyle + SquareCap = ... # type: Qt.PenCapStyle + RoundCap = ... # type: Qt.PenCapStyle + MPenCapStyle = ... # type: Qt.PenCapStyle + + class PenStyle(int): + NoPen = ... # type: Qt.PenStyle + SolidLine = ... # type: Qt.PenStyle + DashLine = ... # type: Qt.PenStyle + DotLine = ... # type: Qt.PenStyle + DashDotLine = ... # type: Qt.PenStyle + DashDotDotLine = ... # type: Qt.PenStyle + CustomDashLine = ... # type: Qt.PenStyle + MPenStyle = ... # type: Qt.PenStyle + + class ArrowType(int): + NoArrow = ... # type: Qt.ArrowType + UpArrow = ... # type: Qt.ArrowType + DownArrow = ... # type: Qt.ArrowType + LeftArrow = ... # type: Qt.ArrowType + RightArrow = ... # type: Qt.ArrowType + + class Key(int): + Key_Escape = ... # type: Qt.Key + Key_Tab = ... # type: Qt.Key + Key_Backtab = ... # type: Qt.Key + Key_Backspace = ... # type: Qt.Key + Key_Return = ... # type: Qt.Key + Key_Enter = ... # type: Qt.Key + Key_Insert = ... # type: Qt.Key + Key_Delete = ... # type: Qt.Key + Key_Pause = ... # type: Qt.Key + Key_Print = ... # type: Qt.Key + Key_SysReq = ... # type: Qt.Key + Key_Clear = ... # type: Qt.Key + Key_Home = ... # type: Qt.Key + Key_End = ... # type: Qt.Key + Key_Left = ... # type: Qt.Key + Key_Up = ... # type: Qt.Key + Key_Right = ... # type: Qt.Key + Key_Down = ... # type: Qt.Key + Key_PageUp = ... # type: Qt.Key + Key_PageDown = ... # type: Qt.Key + Key_Shift = ... # type: Qt.Key + Key_Control = ... # type: Qt.Key + Key_Meta = ... # type: Qt.Key + Key_Alt = ... # type: Qt.Key + Key_CapsLock = ... # type: Qt.Key + Key_NumLock = ... # type: Qt.Key + Key_ScrollLock = ... # type: Qt.Key + Key_F1 = ... # type: Qt.Key + Key_F2 = ... # type: Qt.Key + Key_F3 = ... # type: Qt.Key + Key_F4 = ... # type: Qt.Key + Key_F5 = ... # type: Qt.Key + Key_F6 = ... # type: Qt.Key + Key_F7 = ... # type: Qt.Key + Key_F8 = ... # type: Qt.Key + Key_F9 = ... # type: Qt.Key + Key_F10 = ... # type: Qt.Key + Key_F11 = ... # type: Qt.Key + Key_F12 = ... # type: Qt.Key + Key_F13 = ... # type: Qt.Key + Key_F14 = ... # type: Qt.Key + Key_F15 = ... # type: Qt.Key + Key_F16 = ... # type: Qt.Key + Key_F17 = ... # type: Qt.Key + Key_F18 = ... # type: Qt.Key + Key_F19 = ... # type: Qt.Key + Key_F20 = ... # type: Qt.Key + Key_F21 = ... # type: Qt.Key + Key_F22 = ... # type: Qt.Key + Key_F23 = ... # type: Qt.Key + Key_F24 = ... # type: Qt.Key + Key_F25 = ... # type: Qt.Key + Key_F26 = ... # type: Qt.Key + Key_F27 = ... # type: Qt.Key + Key_F28 = ... # type: Qt.Key + Key_F29 = ... # type: Qt.Key + Key_F30 = ... # type: Qt.Key + Key_F31 = ... # type: Qt.Key + Key_F32 = ... # type: Qt.Key + Key_F33 = ... # type: Qt.Key + Key_F34 = ... # type: Qt.Key + Key_F35 = ... # type: Qt.Key + Key_Super_L = ... # type: Qt.Key + Key_Super_R = ... # type: Qt.Key + Key_Menu = ... # type: Qt.Key + Key_Hyper_L = ... # type: Qt.Key + Key_Hyper_R = ... # type: Qt.Key + Key_Help = ... # type: Qt.Key + Key_Direction_L = ... # type: Qt.Key + Key_Direction_R = ... # type: Qt.Key + Key_Space = ... # type: Qt.Key + Key_Any = ... # type: Qt.Key + Key_Exclam = ... # type: Qt.Key + Key_QuoteDbl = ... # type: Qt.Key + Key_NumberSign = ... # type: Qt.Key + Key_Dollar = ... # type: Qt.Key + Key_Percent = ... # type: Qt.Key + Key_Ampersand = ... # type: Qt.Key + Key_Apostrophe = ... # type: Qt.Key + Key_ParenLeft = ... # type: Qt.Key + Key_ParenRight = ... # type: Qt.Key + Key_Asterisk = ... # type: Qt.Key + Key_Plus = ... # type: Qt.Key + Key_Comma = ... # type: Qt.Key + Key_Minus = ... # type: Qt.Key + Key_Period = ... # type: Qt.Key + Key_Slash = ... # type: Qt.Key + Key_0 = ... # type: Qt.Key + Key_1 = ... # type: Qt.Key + Key_2 = ... # type: Qt.Key + Key_3 = ... # type: Qt.Key + Key_4 = ... # type: Qt.Key + Key_5 = ... # type: Qt.Key + Key_6 = ... # type: Qt.Key + Key_7 = ... # type: Qt.Key + Key_8 = ... # type: Qt.Key + Key_9 = ... # type: Qt.Key + Key_Colon = ... # type: Qt.Key + Key_Semicolon = ... # type: Qt.Key + Key_Less = ... # type: Qt.Key + Key_Equal = ... # type: Qt.Key + Key_Greater = ... # type: Qt.Key + Key_Question = ... # type: Qt.Key + Key_At = ... # type: Qt.Key + Key_A = ... # type: Qt.Key + Key_B = ... # type: Qt.Key + Key_C = ... # type: Qt.Key + Key_D = ... # type: Qt.Key + Key_E = ... # type: Qt.Key + Key_F = ... # type: Qt.Key + Key_G = ... # type: Qt.Key + Key_H = ... # type: Qt.Key + Key_I = ... # type: Qt.Key + Key_J = ... # type: Qt.Key + Key_K = ... # type: Qt.Key + Key_L = ... # type: Qt.Key + Key_M = ... # type: Qt.Key + Key_N = ... # type: Qt.Key + Key_O = ... # type: Qt.Key + Key_P = ... # type: Qt.Key + Key_Q = ... # type: Qt.Key + Key_R = ... # type: Qt.Key + Key_S = ... # type: Qt.Key + Key_T = ... # type: Qt.Key + Key_U = ... # type: Qt.Key + Key_V = ... # type: Qt.Key + Key_W = ... # type: Qt.Key + Key_X = ... # type: Qt.Key + Key_Y = ... # type: Qt.Key + Key_Z = ... # type: Qt.Key + Key_BracketLeft = ... # type: Qt.Key + Key_Backslash = ... # type: Qt.Key + Key_BracketRight = ... # type: Qt.Key + Key_AsciiCircum = ... # type: Qt.Key + Key_Underscore = ... # type: Qt.Key + Key_QuoteLeft = ... # type: Qt.Key + Key_BraceLeft = ... # type: Qt.Key + Key_Bar = ... # type: Qt.Key + Key_BraceRight = ... # type: Qt.Key + Key_AsciiTilde = ... # type: Qt.Key + Key_nobreakspace = ... # type: Qt.Key + Key_exclamdown = ... # type: Qt.Key + Key_cent = ... # type: Qt.Key + Key_sterling = ... # type: Qt.Key + Key_currency = ... # type: Qt.Key + Key_yen = ... # type: Qt.Key + Key_brokenbar = ... # type: Qt.Key + Key_section = ... # type: Qt.Key + Key_diaeresis = ... # type: Qt.Key + Key_copyright = ... # type: Qt.Key + Key_ordfeminine = ... # type: Qt.Key + Key_guillemotleft = ... # type: Qt.Key + Key_notsign = ... # type: Qt.Key + Key_hyphen = ... # type: Qt.Key + Key_registered = ... # type: Qt.Key + Key_macron = ... # type: Qt.Key + Key_degree = ... # type: Qt.Key + Key_plusminus = ... # type: Qt.Key + Key_twosuperior = ... # type: Qt.Key + Key_threesuperior = ... # type: Qt.Key + Key_acute = ... # type: Qt.Key + Key_mu = ... # type: Qt.Key + Key_paragraph = ... # type: Qt.Key + Key_periodcentered = ... # type: Qt.Key + Key_cedilla = ... # type: Qt.Key + Key_onesuperior = ... # type: Qt.Key + Key_masculine = ... # type: Qt.Key + Key_guillemotright = ... # type: Qt.Key + Key_onequarter = ... # type: Qt.Key + Key_onehalf = ... # type: Qt.Key + Key_threequarters = ... # type: Qt.Key + Key_questiondown = ... # type: Qt.Key + Key_Agrave = ... # type: Qt.Key + Key_Aacute = ... # type: Qt.Key + Key_Acircumflex = ... # type: Qt.Key + Key_Atilde = ... # type: Qt.Key + Key_Adiaeresis = ... # type: Qt.Key + Key_Aring = ... # type: Qt.Key + Key_AE = ... # type: Qt.Key + Key_Ccedilla = ... # type: Qt.Key + Key_Egrave = ... # type: Qt.Key + Key_Eacute = ... # type: Qt.Key + Key_Ecircumflex = ... # type: Qt.Key + Key_Ediaeresis = ... # type: Qt.Key + Key_Igrave = ... # type: Qt.Key + Key_Iacute = ... # type: Qt.Key + Key_Icircumflex = ... # type: Qt.Key + Key_Idiaeresis = ... # type: Qt.Key + Key_ETH = ... # type: Qt.Key + Key_Ntilde = ... # type: Qt.Key + Key_Ograve = ... # type: Qt.Key + Key_Oacute = ... # type: Qt.Key + Key_Ocircumflex = ... # type: Qt.Key + Key_Otilde = ... # type: Qt.Key + Key_Odiaeresis = ... # type: Qt.Key + Key_multiply = ... # type: Qt.Key + Key_Ooblique = ... # type: Qt.Key + Key_Ugrave = ... # type: Qt.Key + Key_Uacute = ... # type: Qt.Key + Key_Ucircumflex = ... # type: Qt.Key + Key_Udiaeresis = ... # type: Qt.Key + Key_Yacute = ... # type: Qt.Key + Key_THORN = ... # type: Qt.Key + Key_ssharp = ... # type: Qt.Key + Key_division = ... # type: Qt.Key + Key_ydiaeresis = ... # type: Qt.Key + Key_AltGr = ... # type: Qt.Key + Key_Multi_key = ... # type: Qt.Key + Key_Codeinput = ... # type: Qt.Key + Key_SingleCandidate = ... # type: Qt.Key + Key_MultipleCandidate = ... # type: Qt.Key + Key_PreviousCandidate = ... # type: Qt.Key + Key_Mode_switch = ... # type: Qt.Key + Key_Kanji = ... # type: Qt.Key + Key_Muhenkan = ... # type: Qt.Key + Key_Henkan = ... # type: Qt.Key + Key_Romaji = ... # type: Qt.Key + Key_Hiragana = ... # type: Qt.Key + Key_Katakana = ... # type: Qt.Key + Key_Hiragana_Katakana = ... # type: Qt.Key + Key_Zenkaku = ... # type: Qt.Key + Key_Hankaku = ... # type: Qt.Key + Key_Zenkaku_Hankaku = ... # type: Qt.Key + Key_Touroku = ... # type: Qt.Key + Key_Massyo = ... # type: Qt.Key + Key_Kana_Lock = ... # type: Qt.Key + Key_Kana_Shift = ... # type: Qt.Key + Key_Eisu_Shift = ... # type: Qt.Key + Key_Eisu_toggle = ... # type: Qt.Key + Key_Hangul = ... # type: Qt.Key + Key_Hangul_Start = ... # type: Qt.Key + Key_Hangul_End = ... # type: Qt.Key + Key_Hangul_Hanja = ... # type: Qt.Key + Key_Hangul_Jamo = ... # type: Qt.Key + Key_Hangul_Romaja = ... # type: Qt.Key + Key_Hangul_Jeonja = ... # type: Qt.Key + Key_Hangul_Banja = ... # type: Qt.Key + Key_Hangul_PreHanja = ... # type: Qt.Key + Key_Hangul_PostHanja = ... # type: Qt.Key + Key_Hangul_Special = ... # type: Qt.Key + Key_Dead_Grave = ... # type: Qt.Key + Key_Dead_Acute = ... # type: Qt.Key + Key_Dead_Circumflex = ... # type: Qt.Key + Key_Dead_Tilde = ... # type: Qt.Key + Key_Dead_Macron = ... # type: Qt.Key + Key_Dead_Breve = ... # type: Qt.Key + Key_Dead_Abovedot = ... # type: Qt.Key + Key_Dead_Diaeresis = ... # type: Qt.Key + Key_Dead_Abovering = ... # type: Qt.Key + Key_Dead_Doubleacute = ... # type: Qt.Key + Key_Dead_Caron = ... # type: Qt.Key + Key_Dead_Cedilla = ... # type: Qt.Key + Key_Dead_Ogonek = ... # type: Qt.Key + Key_Dead_Iota = ... # type: Qt.Key + Key_Dead_Voiced_Sound = ... # type: Qt.Key + Key_Dead_Semivoiced_Sound = ... # type: Qt.Key + Key_Dead_Belowdot = ... # type: Qt.Key + Key_Dead_Hook = ... # type: Qt.Key + Key_Dead_Horn = ... # type: Qt.Key + Key_Back = ... # type: Qt.Key + Key_Forward = ... # type: Qt.Key + Key_Stop = ... # type: Qt.Key + Key_Refresh = ... # type: Qt.Key + Key_VolumeDown = ... # type: Qt.Key + Key_VolumeMute = ... # type: Qt.Key + Key_VolumeUp = ... # type: Qt.Key + Key_BassBoost = ... # type: Qt.Key + Key_BassUp = ... # type: Qt.Key + Key_BassDown = ... # type: Qt.Key + Key_TrebleUp = ... # type: Qt.Key + Key_TrebleDown = ... # type: Qt.Key + Key_MediaPlay = ... # type: Qt.Key + Key_MediaStop = ... # type: Qt.Key + Key_MediaPrevious = ... # type: Qt.Key + Key_MediaNext = ... # type: Qt.Key + Key_MediaRecord = ... # type: Qt.Key + Key_HomePage = ... # type: Qt.Key + Key_Favorites = ... # type: Qt.Key + Key_Search = ... # type: Qt.Key + Key_Standby = ... # type: Qt.Key + Key_OpenUrl = ... # type: Qt.Key + Key_LaunchMail = ... # type: Qt.Key + Key_LaunchMedia = ... # type: Qt.Key + Key_Launch0 = ... # type: Qt.Key + Key_Launch1 = ... # type: Qt.Key + Key_Launch2 = ... # type: Qt.Key + Key_Launch3 = ... # type: Qt.Key + Key_Launch4 = ... # type: Qt.Key + Key_Launch5 = ... # type: Qt.Key + Key_Launch6 = ... # type: Qt.Key + Key_Launch7 = ... # type: Qt.Key + Key_Launch8 = ... # type: Qt.Key + Key_Launch9 = ... # type: Qt.Key + Key_LaunchA = ... # type: Qt.Key + Key_LaunchB = ... # type: Qt.Key + Key_LaunchC = ... # type: Qt.Key + Key_LaunchD = ... # type: Qt.Key + Key_LaunchE = ... # type: Qt.Key + Key_LaunchF = ... # type: Qt.Key + Key_MediaLast = ... # type: Qt.Key + Key_Select = ... # type: Qt.Key + Key_Yes = ... # type: Qt.Key + Key_No = ... # type: Qt.Key + Key_Context1 = ... # type: Qt.Key + Key_Context2 = ... # type: Qt.Key + Key_Context3 = ... # type: Qt.Key + Key_Context4 = ... # type: Qt.Key + Key_Call = ... # type: Qt.Key + Key_Hangup = ... # type: Qt.Key + Key_Flip = ... # type: Qt.Key + Key_unknown = ... # type: Qt.Key + Key_Execute = ... # type: Qt.Key + Key_Printer = ... # type: Qt.Key + Key_Play = ... # type: Qt.Key + Key_Sleep = ... # type: Qt.Key + Key_Zoom = ... # type: Qt.Key + Key_Cancel = ... # type: Qt.Key + Key_MonBrightnessUp = ... # type: Qt.Key + Key_MonBrightnessDown = ... # type: Qt.Key + Key_KeyboardLightOnOff = ... # type: Qt.Key + Key_KeyboardBrightnessUp = ... # type: Qt.Key + Key_KeyboardBrightnessDown = ... # type: Qt.Key + Key_PowerOff = ... # type: Qt.Key + Key_WakeUp = ... # type: Qt.Key + Key_Eject = ... # type: Qt.Key + Key_ScreenSaver = ... # type: Qt.Key + Key_WWW = ... # type: Qt.Key + Key_Memo = ... # type: Qt.Key + Key_LightBulb = ... # type: Qt.Key + Key_Shop = ... # type: Qt.Key + Key_History = ... # type: Qt.Key + Key_AddFavorite = ... # type: Qt.Key + Key_HotLinks = ... # type: Qt.Key + Key_BrightnessAdjust = ... # type: Qt.Key + Key_Finance = ... # type: Qt.Key + Key_Community = ... # type: Qt.Key + Key_AudioRewind = ... # type: Qt.Key + Key_BackForward = ... # type: Qt.Key + Key_ApplicationLeft = ... # type: Qt.Key + Key_ApplicationRight = ... # type: Qt.Key + Key_Book = ... # type: Qt.Key + Key_CD = ... # type: Qt.Key + Key_Calculator = ... # type: Qt.Key + Key_ToDoList = ... # type: Qt.Key + Key_ClearGrab = ... # type: Qt.Key + Key_Close = ... # type: Qt.Key + Key_Copy = ... # type: Qt.Key + Key_Cut = ... # type: Qt.Key + Key_Display = ... # type: Qt.Key + Key_DOS = ... # type: Qt.Key + Key_Documents = ... # type: Qt.Key + Key_Excel = ... # type: Qt.Key + Key_Explorer = ... # type: Qt.Key + Key_Game = ... # type: Qt.Key + Key_Go = ... # type: Qt.Key + Key_iTouch = ... # type: Qt.Key + Key_LogOff = ... # type: Qt.Key + Key_Market = ... # type: Qt.Key + Key_Meeting = ... # type: Qt.Key + Key_MenuKB = ... # type: Qt.Key + Key_MenuPB = ... # type: Qt.Key + Key_MySites = ... # type: Qt.Key + Key_News = ... # type: Qt.Key + Key_OfficeHome = ... # type: Qt.Key + Key_Option = ... # type: Qt.Key + Key_Paste = ... # type: Qt.Key + Key_Phone = ... # type: Qt.Key + Key_Calendar = ... # type: Qt.Key + Key_Reply = ... # type: Qt.Key + Key_Reload = ... # type: Qt.Key + Key_RotateWindows = ... # type: Qt.Key + Key_RotationPB = ... # type: Qt.Key + Key_RotationKB = ... # type: Qt.Key + Key_Save = ... # type: Qt.Key + Key_Send = ... # type: Qt.Key + Key_Spell = ... # type: Qt.Key + Key_SplitScreen = ... # type: Qt.Key + Key_Support = ... # type: Qt.Key + Key_TaskPane = ... # type: Qt.Key + Key_Terminal = ... # type: Qt.Key + Key_Tools = ... # type: Qt.Key + Key_Travel = ... # type: Qt.Key + Key_Video = ... # type: Qt.Key + Key_Word = ... # type: Qt.Key + Key_Xfer = ... # type: Qt.Key + Key_ZoomIn = ... # type: Qt.Key + Key_ZoomOut = ... # type: Qt.Key + Key_Away = ... # type: Qt.Key + Key_Messenger = ... # type: Qt.Key + Key_WebCam = ... # type: Qt.Key + Key_MailForward = ... # type: Qt.Key + Key_Pictures = ... # type: Qt.Key + Key_Music = ... # type: Qt.Key + Key_Battery = ... # type: Qt.Key + Key_Bluetooth = ... # type: Qt.Key + Key_WLAN = ... # type: Qt.Key + Key_UWB = ... # type: Qt.Key + Key_AudioForward = ... # type: Qt.Key + Key_AudioRepeat = ... # type: Qt.Key + Key_AudioRandomPlay = ... # type: Qt.Key + Key_Subtitle = ... # type: Qt.Key + Key_AudioCycleTrack = ... # type: Qt.Key + Key_Time = ... # type: Qt.Key + Key_Hibernate = ... # type: Qt.Key + Key_View = ... # type: Qt.Key + Key_TopMenu = ... # type: Qt.Key + Key_PowerDown = ... # type: Qt.Key + Key_Suspend = ... # type: Qt.Key + Key_ContrastAdjust = ... # type: Qt.Key + Key_MediaPause = ... # type: Qt.Key + Key_MediaTogglePlayPause = ... # type: Qt.Key + Key_LaunchG = ... # type: Qt.Key + Key_LaunchH = ... # type: Qt.Key + Key_ToggleCallHangup = ... # type: Qt.Key + Key_VoiceDial = ... # type: Qt.Key + Key_LastNumberRedial = ... # type: Qt.Key + Key_Camera = ... # type: Qt.Key + Key_CameraFocus = ... # type: Qt.Key + Key_TouchpadToggle = ... # type: Qt.Key + Key_TouchpadOn = ... # type: Qt.Key + Key_TouchpadOff = ... # type: Qt.Key + Key_MicMute = ... # type: Qt.Key + Key_Red = ... # type: Qt.Key + Key_Green = ... # type: Qt.Key + Key_Yellow = ... # type: Qt.Key + Key_Blue = ... # type: Qt.Key + Key_ChannelUp = ... # type: Qt.Key + Key_ChannelDown = ... # type: Qt.Key + Key_Guide = ... # type: Qt.Key + Key_Info = ... # type: Qt.Key + Key_Settings = ... # type: Qt.Key + Key_Exit = ... # type: Qt.Key + Key_MicVolumeUp = ... # type: Qt.Key + Key_MicVolumeDown = ... # type: Qt.Key + Key_New = ... # type: Qt.Key + Key_Open = ... # type: Qt.Key + Key_Find = ... # type: Qt.Key + Key_Undo = ... # type: Qt.Key + Key_Redo = ... # type: Qt.Key + Key_Dead_Stroke = ... # type: Qt.Key + Key_Dead_Abovecomma = ... # type: Qt.Key + Key_Dead_Abovereversedcomma = ... # type: Qt.Key + Key_Dead_Doublegrave = ... # type: Qt.Key + Key_Dead_Belowring = ... # type: Qt.Key + Key_Dead_Belowmacron = ... # type: Qt.Key + Key_Dead_Belowcircumflex = ... # type: Qt.Key + Key_Dead_Belowtilde = ... # type: Qt.Key + Key_Dead_Belowbreve = ... # type: Qt.Key + Key_Dead_Belowdiaeresis = ... # type: Qt.Key + Key_Dead_Invertedbreve = ... # type: Qt.Key + Key_Dead_Belowcomma = ... # type: Qt.Key + Key_Dead_Currency = ... # type: Qt.Key + Key_Dead_a = ... # type: Qt.Key + Key_Dead_A = ... # type: Qt.Key + Key_Dead_e = ... # type: Qt.Key + Key_Dead_E = ... # type: Qt.Key + Key_Dead_i = ... # type: Qt.Key + Key_Dead_I = ... # type: Qt.Key + Key_Dead_o = ... # type: Qt.Key + Key_Dead_O = ... # type: Qt.Key + Key_Dead_u = ... # type: Qt.Key + Key_Dead_U = ... # type: Qt.Key + Key_Dead_Small_Schwa = ... # type: Qt.Key + Key_Dead_Capital_Schwa = ... # type: Qt.Key + Key_Dead_Greek = ... # type: Qt.Key + Key_Dead_Lowline = ... # type: Qt.Key + Key_Dead_Aboveverticalline = ... # type: Qt.Key + Key_Dead_Belowverticalline = ... # type: Qt.Key + Key_Dead_Longsolidusoverlay = ... # type: Qt.Key + + class BGMode(int): + TransparentMode = ... # type: Qt.BGMode + OpaqueMode = ... # type: Qt.BGMode + + class ImageConversionFlag(int): + AutoColor = ... # type: Qt.ImageConversionFlag + ColorOnly = ... # type: Qt.ImageConversionFlag + MonoOnly = ... # type: Qt.ImageConversionFlag + ThresholdAlphaDither = ... # type: Qt.ImageConversionFlag + OrderedAlphaDither = ... # type: Qt.ImageConversionFlag + DiffuseAlphaDither = ... # type: Qt.ImageConversionFlag + DiffuseDither = ... # type: Qt.ImageConversionFlag + OrderedDither = ... # type: Qt.ImageConversionFlag + ThresholdDither = ... # type: Qt.ImageConversionFlag + AutoDither = ... # type: Qt.ImageConversionFlag + PreferDither = ... # type: Qt.ImageConversionFlag + AvoidDither = ... # type: Qt.ImageConversionFlag + NoOpaqueDetection = ... # type: Qt.ImageConversionFlag + NoFormatConversion = ... # type: Qt.ImageConversionFlag + + class WidgetAttribute(int): + WA_Disabled = ... # type: Qt.WidgetAttribute + WA_UnderMouse = ... # type: Qt.WidgetAttribute + WA_MouseTracking = ... # type: Qt.WidgetAttribute + WA_OpaquePaintEvent = ... # type: Qt.WidgetAttribute + WA_StaticContents = ... # type: Qt.WidgetAttribute + WA_LaidOut = ... # type: Qt.WidgetAttribute + WA_PaintOnScreen = ... # type: Qt.WidgetAttribute + WA_NoSystemBackground = ... # type: Qt.WidgetAttribute + WA_UpdatesDisabled = ... # type: Qt.WidgetAttribute + WA_Mapped = ... # type: Qt.WidgetAttribute + WA_MacNoClickThrough = ... # type: Qt.WidgetAttribute + WA_InputMethodEnabled = ... # type: Qt.WidgetAttribute + WA_WState_Visible = ... # type: Qt.WidgetAttribute + WA_WState_Hidden = ... # type: Qt.WidgetAttribute + WA_ForceDisabled = ... # type: Qt.WidgetAttribute + WA_KeyCompression = ... # type: Qt.WidgetAttribute + WA_PendingMoveEvent = ... # type: Qt.WidgetAttribute + WA_PendingResizeEvent = ... # type: Qt.WidgetAttribute + WA_SetPalette = ... # type: Qt.WidgetAttribute + WA_SetFont = ... # type: Qt.WidgetAttribute + WA_SetCursor = ... # type: Qt.WidgetAttribute + WA_NoChildEventsFromChildren = ... # type: Qt.WidgetAttribute + WA_WindowModified = ... # type: Qt.WidgetAttribute + WA_Resized = ... # type: Qt.WidgetAttribute + WA_Moved = ... # type: Qt.WidgetAttribute + WA_PendingUpdate = ... # type: Qt.WidgetAttribute + WA_InvalidSize = ... # type: Qt.WidgetAttribute + WA_MacMetalStyle = ... # type: Qt.WidgetAttribute + WA_CustomWhatsThis = ... # type: Qt.WidgetAttribute + WA_LayoutOnEntireRect = ... # type: Qt.WidgetAttribute + WA_OutsideWSRange = ... # type: Qt.WidgetAttribute + WA_GrabbedShortcut = ... # type: Qt.WidgetAttribute + WA_TransparentForMouseEvents = ... # type: Qt.WidgetAttribute + WA_PaintUnclipped = ... # type: Qt.WidgetAttribute + WA_SetWindowIcon = ... # type: Qt.WidgetAttribute + WA_NoMouseReplay = ... # type: Qt.WidgetAttribute + WA_DeleteOnClose = ... # type: Qt.WidgetAttribute + WA_RightToLeft = ... # type: Qt.WidgetAttribute + WA_SetLayoutDirection = ... # type: Qt.WidgetAttribute + WA_NoChildEventsForParent = ... # type: Qt.WidgetAttribute + WA_ForceUpdatesDisabled = ... # type: Qt.WidgetAttribute + WA_WState_Created = ... # type: Qt.WidgetAttribute + WA_WState_CompressKeys = ... # type: Qt.WidgetAttribute + WA_WState_InPaintEvent = ... # type: Qt.WidgetAttribute + WA_WState_Reparented = ... # type: Qt.WidgetAttribute + WA_WState_ConfigPending = ... # type: Qt.WidgetAttribute + WA_WState_Polished = ... # type: Qt.WidgetAttribute + WA_WState_OwnSizePolicy = ... # type: Qt.WidgetAttribute + WA_WState_ExplicitShowHide = ... # type: Qt.WidgetAttribute + WA_MouseNoMask = ... # type: Qt.WidgetAttribute + WA_GroupLeader = ... # type: Qt.WidgetAttribute + WA_NoMousePropagation = ... # type: Qt.WidgetAttribute + WA_Hover = ... # type: Qt.WidgetAttribute + WA_InputMethodTransparent = ... # type: Qt.WidgetAttribute + WA_QuitOnClose = ... # type: Qt.WidgetAttribute + WA_KeyboardFocusChange = ... # type: Qt.WidgetAttribute + WA_AcceptDrops = ... # type: Qt.WidgetAttribute + WA_WindowPropagation = ... # type: Qt.WidgetAttribute + WA_NoX11EventCompression = ... # type: Qt.WidgetAttribute + WA_TintedBackground = ... # type: Qt.WidgetAttribute + WA_X11OpenGLOverlay = ... # type: Qt.WidgetAttribute + WA_AttributeCount = ... # type: Qt.WidgetAttribute + WA_AlwaysShowToolTips = ... # type: Qt.WidgetAttribute + WA_MacOpaqueSizeGrip = ... # type: Qt.WidgetAttribute + WA_SetStyle = ... # type: Qt.WidgetAttribute + WA_MacBrushedMetal = ... # type: Qt.WidgetAttribute + WA_SetLocale = ... # type: Qt.WidgetAttribute + WA_MacShowFocusRect = ... # type: Qt.WidgetAttribute + WA_MacNormalSize = ... # type: Qt.WidgetAttribute + WA_MacSmallSize = ... # type: Qt.WidgetAttribute + WA_MacMiniSize = ... # type: Qt.WidgetAttribute + WA_LayoutUsesWidgetRect = ... # type: Qt.WidgetAttribute + WA_StyledBackground = ... # type: Qt.WidgetAttribute + WA_MSWindowsUseDirect3D = ... # type: Qt.WidgetAttribute + WA_MacAlwaysShowToolWindow = ... # type: Qt.WidgetAttribute + WA_StyleSheet = ... # type: Qt.WidgetAttribute + WA_ShowWithoutActivating = ... # type: Qt.WidgetAttribute + WA_NativeWindow = ... # type: Qt.WidgetAttribute + WA_DontCreateNativeAncestors = ... # type: Qt.WidgetAttribute + WA_MacVariableSize = ... # type: Qt.WidgetAttribute + WA_DontShowOnScreen = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeDesktop = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeDock = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeToolBar = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeMenu = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeUtility = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeSplash = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeDialog = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeDropDownMenu = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypePopupMenu = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeToolTip = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeNotification = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeCombo = ... # type: Qt.WidgetAttribute + WA_X11NetWmWindowTypeDND = ... # type: Qt.WidgetAttribute + WA_MacFrameworkScaled = ... # type: Qt.WidgetAttribute + WA_TranslucentBackground = ... # type: Qt.WidgetAttribute + WA_AcceptTouchEvents = ... # type: Qt.WidgetAttribute + WA_TouchPadAcceptSingleTouchEvents = ... # type: Qt.WidgetAttribute + WA_X11DoNotAcceptFocus = ... # type: Qt.WidgetAttribute + WA_MacNoShadow = ... # type: Qt.WidgetAttribute + WA_AlwaysStackOnTop = ... # type: Qt.WidgetAttribute + WA_TabletTracking = ... # type: Qt.WidgetAttribute + WA_ContentsMarginsRespectsSafeArea = ... # type: Qt.WidgetAttribute + WA_StyleSheetTarget = ... # type: Qt.WidgetAttribute + + class WindowState(int): + WindowNoState = ... # type: Qt.WindowState + WindowMinimized = ... # type: Qt.WindowState + WindowMaximized = ... # type: Qt.WindowState + WindowFullScreen = ... # type: Qt.WindowState + WindowActive = ... # type: Qt.WindowState + + class WindowType(int): + Widget = ... # type: Qt.WindowType + Window = ... # type: Qt.WindowType + Dialog = ... # type: Qt.WindowType + Sheet = ... # type: Qt.WindowType + Drawer = ... # type: Qt.WindowType + Popup = ... # type: Qt.WindowType + Tool = ... # type: Qt.WindowType + ToolTip = ... # type: Qt.WindowType + SplashScreen = ... # type: Qt.WindowType + Desktop = ... # type: Qt.WindowType + SubWindow = ... # type: Qt.WindowType + WindowType_Mask = ... # type: Qt.WindowType + MSWindowsFixedSizeDialogHint = ... # type: Qt.WindowType + MSWindowsOwnDC = ... # type: Qt.WindowType + X11BypassWindowManagerHint = ... # type: Qt.WindowType + FramelessWindowHint = ... # type: Qt.WindowType + CustomizeWindowHint = ... # type: Qt.WindowType + WindowTitleHint = ... # type: Qt.WindowType + WindowSystemMenuHint = ... # type: Qt.WindowType + WindowMinimizeButtonHint = ... # type: Qt.WindowType + WindowMaximizeButtonHint = ... # type: Qt.WindowType + WindowMinMaxButtonsHint = ... # type: Qt.WindowType + WindowContextHelpButtonHint = ... # type: Qt.WindowType + WindowShadeButtonHint = ... # type: Qt.WindowType + WindowStaysOnTopHint = ... # type: Qt.WindowType + WindowStaysOnBottomHint = ... # type: Qt.WindowType + WindowCloseButtonHint = ... # type: Qt.WindowType + MacWindowToolBarButtonHint = ... # type: Qt.WindowType + BypassGraphicsProxyWidget = ... # type: Qt.WindowType + WindowTransparentForInput = ... # type: Qt.WindowType + WindowOverridesSystemGestures = ... # type: Qt.WindowType + WindowDoesNotAcceptFocus = ... # type: Qt.WindowType + NoDropShadowWindowHint = ... # type: Qt.WindowType + WindowFullscreenButtonHint = ... # type: Qt.WindowType + ForeignWindow = ... # type: Qt.WindowType + BypassWindowManagerHint = ... # type: Qt.WindowType + CoverWindow = ... # type: Qt.WindowType + MaximizeUsingFullscreenGeometryHint = ... # type: Qt.WindowType + + class TextElideMode(int): + ElideLeft = ... # type: Qt.TextElideMode + ElideRight = ... # type: Qt.TextElideMode + ElideMiddle = ... # type: Qt.TextElideMode + ElideNone = ... # type: Qt.TextElideMode + + class TextFlag(int): + TextSingleLine = ... # type: Qt.TextFlag + TextDontClip = ... # type: Qt.TextFlag + TextExpandTabs = ... # type: Qt.TextFlag + TextShowMnemonic = ... # type: Qt.TextFlag + TextWordWrap = ... # type: Qt.TextFlag + TextWrapAnywhere = ... # type: Qt.TextFlag + TextDontPrint = ... # type: Qt.TextFlag + TextIncludeTrailingSpaces = ... # type: Qt.TextFlag + TextHideMnemonic = ... # type: Qt.TextFlag + TextJustificationForced = ... # type: Qt.TextFlag + + class AlignmentFlag(int): + AlignLeft = ... # type: Qt.AlignmentFlag + AlignLeading = ... # type: Qt.AlignmentFlag + AlignRight = ... # type: Qt.AlignmentFlag + AlignTrailing = ... # type: Qt.AlignmentFlag + AlignHCenter = ... # type: Qt.AlignmentFlag + AlignJustify = ... # type: Qt.AlignmentFlag + AlignAbsolute = ... # type: Qt.AlignmentFlag + AlignHorizontal_Mask = ... # type: Qt.AlignmentFlag + AlignTop = ... # type: Qt.AlignmentFlag + AlignBottom = ... # type: Qt.AlignmentFlag + AlignVCenter = ... # type: Qt.AlignmentFlag + AlignVertical_Mask = ... # type: Qt.AlignmentFlag + AlignCenter = ... # type: Qt.AlignmentFlag + AlignBaseline = ... # type: Qt.AlignmentFlag + + class SortOrder(int): + AscendingOrder = ... # type: Qt.SortOrder + DescendingOrder = ... # type: Qt.SortOrder + + class FocusPolicy(int): + NoFocus = ... # type: Qt.FocusPolicy + TabFocus = ... # type: Qt.FocusPolicy + ClickFocus = ... # type: Qt.FocusPolicy + StrongFocus = ... # type: Qt.FocusPolicy + WheelFocus = ... # type: Qt.FocusPolicy + + class Orientation(int): + Horizontal = ... # type: Qt.Orientation + Vertical = ... # type: Qt.Orientation + + class MouseButton(int): + NoButton = ... # type: Qt.MouseButton + AllButtons = ... # type: Qt.MouseButton + LeftButton = ... # type: Qt.MouseButton + RightButton = ... # type: Qt.MouseButton + MidButton = ... # type: Qt.MouseButton + MiddleButton = ... # type: Qt.MouseButton + XButton1 = ... # type: Qt.MouseButton + XButton2 = ... # type: Qt.MouseButton + BackButton = ... # type: Qt.MouseButton + ExtraButton1 = ... # type: Qt.MouseButton + ForwardButton = ... # type: Qt.MouseButton + ExtraButton2 = ... # type: Qt.MouseButton + TaskButton = ... # type: Qt.MouseButton + ExtraButton3 = ... # type: Qt.MouseButton + ExtraButton4 = ... # type: Qt.MouseButton + ExtraButton5 = ... # type: Qt.MouseButton + ExtraButton6 = ... # type: Qt.MouseButton + ExtraButton7 = ... # type: Qt.MouseButton + ExtraButton8 = ... # type: Qt.MouseButton + ExtraButton9 = ... # type: Qt.MouseButton + ExtraButton10 = ... # type: Qt.MouseButton + ExtraButton11 = ... # type: Qt.MouseButton + ExtraButton12 = ... # type: Qt.MouseButton + ExtraButton13 = ... # type: Qt.MouseButton + ExtraButton14 = ... # type: Qt.MouseButton + ExtraButton15 = ... # type: Qt.MouseButton + ExtraButton16 = ... # type: Qt.MouseButton + ExtraButton17 = ... # type: Qt.MouseButton + ExtraButton18 = ... # type: Qt.MouseButton + ExtraButton19 = ... # type: Qt.MouseButton + ExtraButton20 = ... # type: Qt.MouseButton + ExtraButton21 = ... # type: Qt.MouseButton + ExtraButton22 = ... # type: Qt.MouseButton + ExtraButton23 = ... # type: Qt.MouseButton + ExtraButton24 = ... # type: Qt.MouseButton + + class Modifier(int): + META = ... # type: Qt.Modifier + SHIFT = ... # type: Qt.Modifier + CTRL = ... # type: Qt.Modifier + ALT = ... # type: Qt.Modifier + MODIFIER_MASK = ... # type: Qt.Modifier + UNICODE_ACCEL = ... # type: Qt.Modifier + + class KeyboardModifier(int): + NoModifier = ... # type: Qt.KeyboardModifier + ShiftModifier = ... # type: Qt.KeyboardModifier + ControlModifier = ... # type: Qt.KeyboardModifier + AltModifier = ... # type: Qt.KeyboardModifier + MetaModifier = ... # type: Qt.KeyboardModifier + KeypadModifier = ... # type: Qt.KeyboardModifier + GroupSwitchModifier = ... # type: Qt.KeyboardModifier + KeyboardModifierMask = ... # type: Qt.KeyboardModifier + + class GlobalColor(int): + color0 = ... # type: Qt.GlobalColor + color1 = ... # type: Qt.GlobalColor + black = ... # type: Qt.GlobalColor + white = ... # type: Qt.GlobalColor + darkGray = ... # type: Qt.GlobalColor + gray = ... # type: Qt.GlobalColor + lightGray = ... # type: Qt.GlobalColor + red = ... # type: Qt.GlobalColor + green = ... # type: Qt.GlobalColor + blue = ... # type: Qt.GlobalColor + cyan = ... # type: Qt.GlobalColor + magenta = ... # type: Qt.GlobalColor + yellow = ... # type: Qt.GlobalColor + darkRed = ... # type: Qt.GlobalColor + darkGreen = ... # type: Qt.GlobalColor + darkBlue = ... # type: Qt.GlobalColor + darkCyan = ... # type: Qt.GlobalColor + darkMagenta = ... # type: Qt.GlobalColor + darkYellow = ... # type: Qt.GlobalColor + transparent = ... # type: Qt.GlobalColor + + class KeyboardModifiers(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.KeyboardModifiers', 'Qt.KeyboardModifier']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.KeyboardModifiers', 'Qt.KeyboardModifier']) -> 'Qt.KeyboardModifiers': ... + def __xor__(self, f: typing.Union['Qt.KeyboardModifiers', 'Qt.KeyboardModifier']) -> 'Qt.KeyboardModifiers': ... + def __ior__(self, f: typing.Union['Qt.KeyboardModifiers', 'Qt.KeyboardModifier']) -> 'Qt.KeyboardModifiers': ... + def __or__(self, f: typing.Union['Qt.KeyboardModifiers', 'Qt.KeyboardModifier']) -> 'Qt.KeyboardModifiers': ... + def __iand__(self, f: typing.Union['Qt.KeyboardModifiers', 'Qt.KeyboardModifier']) -> 'Qt.KeyboardModifiers': ... + def __and__(self, f: typing.Union['Qt.KeyboardModifiers', 'Qt.KeyboardModifier']) -> 'Qt.KeyboardModifiers': ... + def __invert__(self) -> 'Qt.KeyboardModifiers': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class MouseButtons(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.MouseButtons', 'Qt.MouseButton']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.MouseButtons', 'Qt.MouseButton']) -> 'Qt.MouseButtons': ... + def __xor__(self, f: typing.Union['Qt.MouseButtons', 'Qt.MouseButton']) -> 'Qt.MouseButtons': ... + def __ior__(self, f: typing.Union['Qt.MouseButtons', 'Qt.MouseButton']) -> 'Qt.MouseButtons': ... + def __or__(self, f: typing.Union['Qt.MouseButtons', 'Qt.MouseButton']) -> 'Qt.MouseButtons': ... + def __iand__(self, f: typing.Union['Qt.MouseButtons', 'Qt.MouseButton']) -> 'Qt.MouseButtons': ... + def __and__(self, f: typing.Union['Qt.MouseButtons', 'Qt.MouseButton']) -> 'Qt.MouseButtons': ... + def __invert__(self) -> 'Qt.MouseButtons': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class Orientations(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.Orientations', 'Qt.Orientation']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.Orientations', 'Qt.Orientation']) -> 'Qt.Orientations': ... + def __xor__(self, f: typing.Union['Qt.Orientations', 'Qt.Orientation']) -> 'Qt.Orientations': ... + def __ior__(self, f: typing.Union['Qt.Orientations', 'Qt.Orientation']) -> 'Qt.Orientations': ... + def __or__(self, f: typing.Union['Qt.Orientations', 'Qt.Orientation']) -> 'Qt.Orientations': ... + def __iand__(self, f: typing.Union['Qt.Orientations', 'Qt.Orientation']) -> 'Qt.Orientations': ... + def __and__(self, f: typing.Union['Qt.Orientations', 'Qt.Orientation']) -> 'Qt.Orientations': ... + def __invert__(self) -> 'Qt.Orientations': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class Alignment(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.Alignment', 'Qt.AlignmentFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.Alignment', 'Qt.AlignmentFlag']) -> 'Qt.Alignment': ... + def __xor__(self, f: typing.Union['Qt.Alignment', 'Qt.AlignmentFlag']) -> 'Qt.Alignment': ... + def __ior__(self, f: typing.Union['Qt.Alignment', 'Qt.AlignmentFlag']) -> 'Qt.Alignment': ... + def __or__(self, f: typing.Union['Qt.Alignment', 'Qt.AlignmentFlag']) -> 'Qt.Alignment': ... + def __iand__(self, f: typing.Union['Qt.Alignment', 'Qt.AlignmentFlag']) -> 'Qt.Alignment': ... + def __and__(self, f: typing.Union['Qt.Alignment', 'Qt.AlignmentFlag']) -> 'Qt.Alignment': ... + def __invert__(self) -> 'Qt.Alignment': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class WindowFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.WindowFlags', 'Qt.WindowType']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.WindowFlags', 'Qt.WindowType']) -> 'Qt.WindowFlags': ... + def __xor__(self, f: typing.Union['Qt.WindowFlags', 'Qt.WindowType']) -> 'Qt.WindowFlags': ... + def __ior__(self, f: typing.Union['Qt.WindowFlags', 'Qt.WindowType']) -> 'Qt.WindowFlags': ... + def __or__(self, f: typing.Union['Qt.WindowFlags', 'Qt.WindowType']) -> 'Qt.WindowFlags': ... + def __iand__(self, f: typing.Union['Qt.WindowFlags', 'Qt.WindowType']) -> 'Qt.WindowFlags': ... + def __and__(self, f: typing.Union['Qt.WindowFlags', 'Qt.WindowType']) -> 'Qt.WindowFlags': ... + def __invert__(self) -> 'Qt.WindowFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class WindowStates(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.WindowStates', 'Qt.WindowState']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.WindowStates', 'Qt.WindowState']) -> 'Qt.WindowStates': ... + def __xor__(self, f: typing.Union['Qt.WindowStates', 'Qt.WindowState']) -> 'Qt.WindowStates': ... + def __ior__(self, f: typing.Union['Qt.WindowStates', 'Qt.WindowState']) -> 'Qt.WindowStates': ... + def __or__(self, f: typing.Union['Qt.WindowStates', 'Qt.WindowState']) -> 'Qt.WindowStates': ... + def __iand__(self, f: typing.Union['Qt.WindowStates', 'Qt.WindowState']) -> 'Qt.WindowStates': ... + def __and__(self, f: typing.Union['Qt.WindowStates', 'Qt.WindowState']) -> 'Qt.WindowStates': ... + def __invert__(self) -> 'Qt.WindowStates': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ImageConversionFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.ImageConversionFlags', 'Qt.ImageConversionFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.ImageConversionFlags', 'Qt.ImageConversionFlag']) -> 'Qt.ImageConversionFlags': ... + def __xor__(self, f: typing.Union['Qt.ImageConversionFlags', 'Qt.ImageConversionFlag']) -> 'Qt.ImageConversionFlags': ... + def __ior__(self, f: typing.Union['Qt.ImageConversionFlags', 'Qt.ImageConversionFlag']) -> 'Qt.ImageConversionFlags': ... + def __or__(self, f: typing.Union['Qt.ImageConversionFlags', 'Qt.ImageConversionFlag']) -> 'Qt.ImageConversionFlags': ... + def __iand__(self, f: typing.Union['Qt.ImageConversionFlags', 'Qt.ImageConversionFlag']) -> 'Qt.ImageConversionFlags': ... + def __and__(self, f: typing.Union['Qt.ImageConversionFlags', 'Qt.ImageConversionFlag']) -> 'Qt.ImageConversionFlags': ... + def __invert__(self) -> 'Qt.ImageConversionFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class DockWidgetAreas(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.DockWidgetAreas', 'Qt.DockWidgetArea']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.DockWidgetAreas', 'Qt.DockWidgetArea']) -> 'Qt.DockWidgetAreas': ... + def __xor__(self, f: typing.Union['Qt.DockWidgetAreas', 'Qt.DockWidgetArea']) -> 'Qt.DockWidgetAreas': ... + def __ior__(self, f: typing.Union['Qt.DockWidgetAreas', 'Qt.DockWidgetArea']) -> 'Qt.DockWidgetAreas': ... + def __or__(self, f: typing.Union['Qt.DockWidgetAreas', 'Qt.DockWidgetArea']) -> 'Qt.DockWidgetAreas': ... + def __iand__(self, f: typing.Union['Qt.DockWidgetAreas', 'Qt.DockWidgetArea']) -> 'Qt.DockWidgetAreas': ... + def __and__(self, f: typing.Union['Qt.DockWidgetAreas', 'Qt.DockWidgetArea']) -> 'Qt.DockWidgetAreas': ... + def __invert__(self) -> 'Qt.DockWidgetAreas': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ToolBarAreas(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.ToolBarAreas', 'Qt.ToolBarArea']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.ToolBarAreas', 'Qt.ToolBarArea']) -> 'Qt.ToolBarAreas': ... + def __xor__(self, f: typing.Union['Qt.ToolBarAreas', 'Qt.ToolBarArea']) -> 'Qt.ToolBarAreas': ... + def __ior__(self, f: typing.Union['Qt.ToolBarAreas', 'Qt.ToolBarArea']) -> 'Qt.ToolBarAreas': ... + def __or__(self, f: typing.Union['Qt.ToolBarAreas', 'Qt.ToolBarArea']) -> 'Qt.ToolBarAreas': ... + def __iand__(self, f: typing.Union['Qt.ToolBarAreas', 'Qt.ToolBarArea']) -> 'Qt.ToolBarAreas': ... + def __and__(self, f: typing.Union['Qt.ToolBarAreas', 'Qt.ToolBarArea']) -> 'Qt.ToolBarAreas': ... + def __invert__(self) -> 'Qt.ToolBarAreas': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class InputMethodQueries(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.InputMethodQueries', 'Qt.InputMethodQuery']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.InputMethodQueries', 'Qt.InputMethodQuery']) -> 'Qt.InputMethodQueries': ... + def __xor__(self, f: typing.Union['Qt.InputMethodQueries', 'Qt.InputMethodQuery']) -> 'Qt.InputMethodQueries': ... + def __ior__(self, f: typing.Union['Qt.InputMethodQueries', 'Qt.InputMethodQuery']) -> 'Qt.InputMethodQueries': ... + def __or__(self, f: typing.Union['Qt.InputMethodQueries', 'Qt.InputMethodQuery']) -> 'Qt.InputMethodQueries': ... + def __iand__(self, f: typing.Union['Qt.InputMethodQueries', 'Qt.InputMethodQuery']) -> 'Qt.InputMethodQueries': ... + def __and__(self, f: typing.Union['Qt.InputMethodQueries', 'Qt.InputMethodQuery']) -> 'Qt.InputMethodQueries': ... + def __invert__(self) -> 'Qt.InputMethodQueries': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class DropActions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.DropActions', 'Qt.DropAction']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.DropActions', 'Qt.DropAction']) -> 'Qt.DropActions': ... + def __xor__(self, f: typing.Union['Qt.DropActions', 'Qt.DropAction']) -> 'Qt.DropActions': ... + def __ior__(self, f: typing.Union['Qt.DropActions', 'Qt.DropAction']) -> 'Qt.DropActions': ... + def __or__(self, f: typing.Union['Qt.DropActions', 'Qt.DropAction']) -> 'Qt.DropActions': ... + def __iand__(self, f: typing.Union['Qt.DropActions', 'Qt.DropAction']) -> 'Qt.DropActions': ... + def __and__(self, f: typing.Union['Qt.DropActions', 'Qt.DropAction']) -> 'Qt.DropActions': ... + def __invert__(self) -> 'Qt.DropActions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ItemFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.ItemFlags', 'Qt.ItemFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.ItemFlags', 'Qt.ItemFlag']) -> 'Qt.ItemFlags': ... + def __xor__(self, f: typing.Union['Qt.ItemFlags', 'Qt.ItemFlag']) -> 'Qt.ItemFlags': ... + def __ior__(self, f: typing.Union['Qt.ItemFlags', 'Qt.ItemFlag']) -> 'Qt.ItemFlags': ... + def __or__(self, f: typing.Union['Qt.ItemFlags', 'Qt.ItemFlag']) -> 'Qt.ItemFlags': ... + def __iand__(self, f: typing.Union['Qt.ItemFlags', 'Qt.ItemFlag']) -> 'Qt.ItemFlags': ... + def __and__(self, f: typing.Union['Qt.ItemFlags', 'Qt.ItemFlag']) -> 'Qt.ItemFlags': ... + def __invert__(self) -> 'Qt.ItemFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class MatchFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.MatchFlags', 'Qt.MatchFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.MatchFlags', 'Qt.MatchFlag']) -> 'Qt.MatchFlags': ... + def __xor__(self, f: typing.Union['Qt.MatchFlags', 'Qt.MatchFlag']) -> 'Qt.MatchFlags': ... + def __ior__(self, f: typing.Union['Qt.MatchFlags', 'Qt.MatchFlag']) -> 'Qt.MatchFlags': ... + def __or__(self, f: typing.Union['Qt.MatchFlags', 'Qt.MatchFlag']) -> 'Qt.MatchFlags': ... + def __iand__(self, f: typing.Union['Qt.MatchFlags', 'Qt.MatchFlag']) -> 'Qt.MatchFlags': ... + def __and__(self, f: typing.Union['Qt.MatchFlags', 'Qt.MatchFlag']) -> 'Qt.MatchFlags': ... + def __invert__(self) -> 'Qt.MatchFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class TextInteractionFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.TextInteractionFlags', 'Qt.TextInteractionFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.TextInteractionFlags', 'Qt.TextInteractionFlag']) -> 'Qt.TextInteractionFlags': ... + def __xor__(self, f: typing.Union['Qt.TextInteractionFlags', 'Qt.TextInteractionFlag']) -> 'Qt.TextInteractionFlags': ... + def __ior__(self, f: typing.Union['Qt.TextInteractionFlags', 'Qt.TextInteractionFlag']) -> 'Qt.TextInteractionFlags': ... + def __or__(self, f: typing.Union['Qt.TextInteractionFlags', 'Qt.TextInteractionFlag']) -> 'Qt.TextInteractionFlags': ... + def __iand__(self, f: typing.Union['Qt.TextInteractionFlags', 'Qt.TextInteractionFlag']) -> 'Qt.TextInteractionFlags': ... + def __and__(self, f: typing.Union['Qt.TextInteractionFlags', 'Qt.TextInteractionFlag']) -> 'Qt.TextInteractionFlags': ... + def __invert__(self) -> 'Qt.TextInteractionFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class InputMethodHints(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.InputMethodHints', 'Qt.InputMethodHint']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.InputMethodHints', 'Qt.InputMethodHint']) -> 'Qt.InputMethodHints': ... + def __xor__(self, f: typing.Union['Qt.InputMethodHints', 'Qt.InputMethodHint']) -> 'Qt.InputMethodHints': ... + def __ior__(self, f: typing.Union['Qt.InputMethodHints', 'Qt.InputMethodHint']) -> 'Qt.InputMethodHints': ... + def __or__(self, f: typing.Union['Qt.InputMethodHints', 'Qt.InputMethodHint']) -> 'Qt.InputMethodHints': ... + def __iand__(self, f: typing.Union['Qt.InputMethodHints', 'Qt.InputMethodHint']) -> 'Qt.InputMethodHints': ... + def __and__(self, f: typing.Union['Qt.InputMethodHints', 'Qt.InputMethodHint']) -> 'Qt.InputMethodHints': ... + def __invert__(self) -> 'Qt.InputMethodHints': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class TouchPointStates(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.TouchPointStates', 'Qt.TouchPointState']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.TouchPointStates', 'Qt.TouchPointState']) -> 'Qt.TouchPointStates': ... + def __xor__(self, f: typing.Union['Qt.TouchPointStates', 'Qt.TouchPointState']) -> 'Qt.TouchPointStates': ... + def __ior__(self, f: typing.Union['Qt.TouchPointStates', 'Qt.TouchPointState']) -> 'Qt.TouchPointStates': ... + def __or__(self, f: typing.Union['Qt.TouchPointStates', 'Qt.TouchPointState']) -> 'Qt.TouchPointStates': ... + def __iand__(self, f: typing.Union['Qt.TouchPointStates', 'Qt.TouchPointState']) -> 'Qt.TouchPointStates': ... + def __and__(self, f: typing.Union['Qt.TouchPointStates', 'Qt.TouchPointState']) -> 'Qt.TouchPointStates': ... + def __invert__(self) -> 'Qt.TouchPointStates': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class GestureFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.GestureFlags', 'Qt.GestureFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.GestureFlags', 'Qt.GestureFlag']) -> 'Qt.GestureFlags': ... + def __xor__(self, f: typing.Union['Qt.GestureFlags', 'Qt.GestureFlag']) -> 'Qt.GestureFlags': ... + def __ior__(self, f: typing.Union['Qt.GestureFlags', 'Qt.GestureFlag']) -> 'Qt.GestureFlags': ... + def __or__(self, f: typing.Union['Qt.GestureFlags', 'Qt.GestureFlag']) -> 'Qt.GestureFlags': ... + def __iand__(self, f: typing.Union['Qt.GestureFlags', 'Qt.GestureFlag']) -> 'Qt.GestureFlags': ... + def __and__(self, f: typing.Union['Qt.GestureFlags', 'Qt.GestureFlag']) -> 'Qt.GestureFlags': ... + def __invert__(self) -> 'Qt.GestureFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ScreenOrientations(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.ScreenOrientations', 'Qt.ScreenOrientation']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.ScreenOrientations', 'Qt.ScreenOrientation']) -> 'Qt.ScreenOrientations': ... + def __xor__(self, f: typing.Union['Qt.ScreenOrientations', 'Qt.ScreenOrientation']) -> 'Qt.ScreenOrientations': ... + def __ior__(self, f: typing.Union['Qt.ScreenOrientations', 'Qt.ScreenOrientation']) -> 'Qt.ScreenOrientations': ... + def __or__(self, f: typing.Union['Qt.ScreenOrientations', 'Qt.ScreenOrientation']) -> 'Qt.ScreenOrientations': ... + def __iand__(self, f: typing.Union['Qt.ScreenOrientations', 'Qt.ScreenOrientation']) -> 'Qt.ScreenOrientations': ... + def __and__(self, f: typing.Union['Qt.ScreenOrientations', 'Qt.ScreenOrientation']) -> 'Qt.ScreenOrientations': ... + def __invert__(self) -> 'Qt.ScreenOrientations': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class FindChildOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.FindChildOptions', 'Qt.FindChildOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.FindChildOptions', 'Qt.FindChildOption']) -> 'Qt.FindChildOptions': ... + def __xor__(self, f: typing.Union['Qt.FindChildOptions', 'Qt.FindChildOption']) -> 'Qt.FindChildOptions': ... + def __ior__(self, f: typing.Union['Qt.FindChildOptions', 'Qt.FindChildOption']) -> 'Qt.FindChildOptions': ... + def __or__(self, f: typing.Union['Qt.FindChildOptions', 'Qt.FindChildOption']) -> 'Qt.FindChildOptions': ... + def __iand__(self, f: typing.Union['Qt.FindChildOptions', 'Qt.FindChildOption']) -> 'Qt.FindChildOptions': ... + def __and__(self, f: typing.Union['Qt.FindChildOptions', 'Qt.FindChildOption']) -> 'Qt.FindChildOptions': ... + def __invert__(self) -> 'Qt.FindChildOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ApplicationStates(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.ApplicationStates', 'Qt.ApplicationState']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.ApplicationStates', 'Qt.ApplicationState']) -> 'Qt.ApplicationStates': ... + def __xor__(self, f: typing.Union['Qt.ApplicationStates', 'Qt.ApplicationState']) -> 'Qt.ApplicationStates': ... + def __ior__(self, f: typing.Union['Qt.ApplicationStates', 'Qt.ApplicationState']) -> 'Qt.ApplicationStates': ... + def __or__(self, f: typing.Union['Qt.ApplicationStates', 'Qt.ApplicationState']) -> 'Qt.ApplicationStates': ... + def __iand__(self, f: typing.Union['Qt.ApplicationStates', 'Qt.ApplicationState']) -> 'Qt.ApplicationStates': ... + def __and__(self, f: typing.Union['Qt.ApplicationStates', 'Qt.ApplicationState']) -> 'Qt.ApplicationStates': ... + def __invert__(self) -> 'Qt.ApplicationStates': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class Edges(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.Edges', 'Qt.Edge']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.Edges', 'Qt.Edge']) -> 'Qt.Edges': ... + def __xor__(self, f: typing.Union['Qt.Edges', 'Qt.Edge']) -> 'Qt.Edges': ... + def __ior__(self, f: typing.Union['Qt.Edges', 'Qt.Edge']) -> 'Qt.Edges': ... + def __or__(self, f: typing.Union['Qt.Edges', 'Qt.Edge']) -> 'Qt.Edges': ... + def __iand__(self, f: typing.Union['Qt.Edges', 'Qt.Edge']) -> 'Qt.Edges': ... + def __and__(self, f: typing.Union['Qt.Edges', 'Qt.Edge']) -> 'Qt.Edges': ... + def __invert__(self) -> 'Qt.Edges': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class MouseEventFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['Qt.MouseEventFlags', 'Qt.MouseEventFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['Qt.MouseEventFlags', 'Qt.MouseEventFlag']) -> 'Qt.MouseEventFlags': ... + def __xor__(self, f: typing.Union['Qt.MouseEventFlags', 'Qt.MouseEventFlag']) -> 'Qt.MouseEventFlags': ... + def __ior__(self, f: typing.Union['Qt.MouseEventFlags', 'Qt.MouseEventFlag']) -> 'Qt.MouseEventFlags': ... + def __or__(self, f: typing.Union['Qt.MouseEventFlags', 'Qt.MouseEventFlag']) -> 'Qt.MouseEventFlags': ... + def __iand__(self, f: typing.Union['Qt.MouseEventFlags', 'Qt.MouseEventFlag']) -> 'Qt.MouseEventFlags': ... + def __and__(self, f: typing.Union['Qt.MouseEventFlags', 'Qt.MouseEventFlag']) -> 'Qt.MouseEventFlags': ... + def __invert__(self) -> 'Qt.MouseEventFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + +class QObject(PyQt5.sip.wrapper): + + staticMetaObject = ... # type: 'QMetaObject' + + def __init__(self, parent: typing.Optional['QObject'] = ...) -> None: ... + + @typing.overload + @staticmethod + def disconnect(a0: 'QMetaObject.Connection') -> bool: ... + @typing.overload + def disconnect(self) -> None: ... + def isSignalConnected(self, signal: 'QMetaMethod') -> bool: ... + def senderSignalIndex(self) -> int: ... + def disconnectNotify(self, signal: 'QMetaMethod') -> None: ... + def connectNotify(self, signal: 'QMetaMethod') -> None: ... + def customEvent(self, a0: typing.Optional['QEvent']) -> None: ... + def childEvent(self, a0: typing.Optional['QChildEvent']) -> None: ... + def timerEvent(self, a0: typing.Optional['QTimerEvent']) -> None: ... + def receivers(self, signal: PYQT_SIGNAL) -> int: ... + def sender(self) -> typing.Optional['QObject']: ... + def deleteLater(self) -> None: ... + def inherits(self, classname: typing.Optional[str]) -> bool: ... + def parent(self) -> typing.Optional['QObject']: ... + objectNameChanged: typing.ClassVar[pyqtSignal] + destroyed: typing.ClassVar[pyqtSignal] + def property(self, name: typing.Optional[str]) -> typing.Any: ... + def setProperty(self, name: typing.Optional[str], value: typing.Any) -> bool: ... + def dynamicPropertyNames(self) -> typing.List['QByteArray']: ... + def dumpObjectTree(self) -> None: ... + def dumpObjectInfo(self) -> None: ... + def removeEventFilter(self, a0: typing.Optional['QObject']) -> None: ... + def installEventFilter(self, a0: typing.Optional['QObject']) -> None: ... + def setParent(self, a0: typing.Optional['QObject']) -> None: ... + def children(self) -> typing.List['QObject']: ... + def killTimer(self, id: int) -> None: ... + def startTimer(self, interval: int, timerType: Qt.TimerType = ...) -> int: ... + def moveToThread(self, thread: typing.Optional['QThread']) -> None: ... + def thread(self) -> typing.Optional['QThread']: ... + def blockSignals(self, b: bool) -> bool: ... + def signalsBlocked(self) -> bool: ... + def isWindowType(self) -> bool: ... + def isWidgetType(self) -> bool: ... + def setObjectName(self, name: typing.Optional[str]) -> None: ... + def objectName(self) -> str: ... + @typing.overload + def findChildren(self, type: typing.Type[QObjectT], name: typing.Optional[str] = ..., options: typing.Union[Qt.FindChildOptions, Qt.FindChildOption] = ...) -> typing.List[QObjectT]: ... + @typing.overload + def findChildren(self, types: typing.Tuple[typing.Type[QObjectT], ...], name: typing.Optional[str] = ..., options: typing.Union[Qt.FindChildOptions, Qt.FindChildOption] = ...) -> typing.List[QObjectT]: ... + @typing.overload + def findChildren(self, type: typing.Type[QObjectT], regExp: 'QRegExp', options: typing.Union[Qt.FindChildOptions, Qt.FindChildOption] = ...) -> typing.List[QObjectT]: ... + @typing.overload + def findChildren(self, types: typing.Tuple[typing.Type[QObjectT], ...], regExp: 'QRegExp', options: typing.Union[Qt.FindChildOptions, Qt.FindChildOption] = ...) -> typing.List[QObjectT]: ... + @typing.overload + def findChildren(self, type: typing.Type[QObjectT], re: 'QRegularExpression', options: typing.Union[Qt.FindChildOptions, Qt.FindChildOption] = ...) -> typing.List[QObjectT]: ... + @typing.overload + def findChildren(self, types: typing.Tuple[typing.Type[QObjectT], ...], re: 'QRegularExpression', options: typing.Union[Qt.FindChildOptions, Qt.FindChildOption] = ...) -> typing.List[QObjectT]: ... + @typing.overload + def findChild(self, type: typing.Type[QObjectT], name: typing.Optional[str] = ..., options: typing.Union[Qt.FindChildOptions, Qt.FindChildOption] = ...) -> QObjectT: ... + @typing.overload + def findChild(self, types: typing.Tuple[typing.Type[QObjectT], ...], name: typing.Optional[str] = ..., options: typing.Union[Qt.FindChildOptions, Qt.FindChildOption] = ...) -> QObjectT: ... + def tr(self, sourceText: typing.Optional[str], disambiguation: typing.Optional[str] = ..., n: int = ...) -> str: ... + def eventFilter(self, a0: typing.Optional['QObject'], a1: typing.Optional['QEvent']) -> bool: ... + def event(self, a0: typing.Optional['QEvent']) -> bool: ... + def pyqtConfigure(self, a0: typing.Any) -> None: ... + def metaObject(self) -> typing.Optional['QMetaObject']: ... + + +class QAbstractAnimation(QObject): + + class DeletionPolicy(int): + KeepWhenStopped = ... # type: QAbstractAnimation.DeletionPolicy + DeleteWhenStopped = ... # type: QAbstractAnimation.DeletionPolicy + + class State(int): + Stopped = ... # type: QAbstractAnimation.State + Paused = ... # type: QAbstractAnimation.State + Running = ... # type: QAbstractAnimation.State + + class Direction(int): + Forward = ... # type: QAbstractAnimation.Direction + Backward = ... # type: QAbstractAnimation.Direction + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def updateDirection(self, direction: 'QAbstractAnimation.Direction') -> None: ... + def updateState(self, newState: 'QAbstractAnimation.State', oldState: 'QAbstractAnimation.State') -> None: ... + def updateCurrentTime(self, currentTime: int) -> None: ... + def event(self, event: typing.Optional['QEvent']) -> bool: ... + def setCurrentTime(self, msecs: int) -> None: ... + def stop(self) -> None: ... + def setPaused(self, a0: bool) -> None: ... + def resume(self) -> None: ... + def pause(self) -> None: ... + def start(self, policy: 'QAbstractAnimation.DeletionPolicy' = ...) -> None: ... + directionChanged: typing.ClassVar[pyqtSignal] + currentLoopChanged: typing.ClassVar[pyqtSignal] + stateChanged: typing.ClassVar[pyqtSignal] + finished: typing.ClassVar[pyqtSignal] + def totalDuration(self) -> int: ... + def duration(self) -> int: ... + def currentLoop(self) -> int: ... + def setLoopCount(self, loopCount: int) -> None: ... + def loopCount(self) -> int: ... + def currentLoopTime(self) -> int: ... + def currentTime(self) -> int: ... + def setDirection(self, direction: 'QAbstractAnimation.Direction') -> None: ... + def direction(self) -> 'QAbstractAnimation.Direction': ... + def group(self) -> typing.Optional['QAnimationGroup']: ... + def state(self) -> 'QAbstractAnimation.State': ... + + +class QAbstractEventDispatcher(QObject): + + class TimerInfo(PyQt5.sipsimplewrapper): + + interval = ... # type: int + timerId = ... # type: int + timerType = ... # type: Qt.TimerType + + @typing.overload + def __init__(self, id: int, i: int, t: Qt.TimerType) -> None: ... + @typing.overload + def __init__(self, a0: 'QAbstractEventDispatcher.TimerInfo') -> None: ... + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + awake: typing.ClassVar[pyqtSignal] + aboutToBlock: typing.ClassVar[pyqtSignal] + def filterNativeEvent(self, eventType: typing.Union['QByteArray', bytes, bytearray], message: typing.Optional[PyQt5.sip.voidptr]) -> typing.Tuple[bool, typing.Optional[int]]: ... + def removeNativeEventFilter(self, filterObj: typing.Optional['QAbstractNativeEventFilter']) -> None: ... + def installNativeEventFilter(self, filterObj: typing.Optional['QAbstractNativeEventFilter']) -> None: ... + def remainingTime(self, timerId: int) -> int: ... + def closingDown(self) -> None: ... + def startingUp(self) -> None: ... + def flush(self) -> None: ... + def interrupt(self) -> None: ... + def wakeUp(self) -> None: ... + def registeredTimers(self, object: typing.Optional[QObject]) -> typing.List['QAbstractEventDispatcher.TimerInfo']: ... + def unregisterTimers(self, object: typing.Optional[QObject]) -> bool: ... + def unregisterTimer(self, timerId: int) -> bool: ... + @typing.overload + def registerTimer(self, interval: int, timerType: Qt.TimerType, object: typing.Optional[QObject]) -> int: ... + @typing.overload + def registerTimer(self, timerId: int, interval: int, timerType: Qt.TimerType, object: typing.Optional[QObject]) -> None: ... + def unregisterSocketNotifier(self, notifier: typing.Optional['QSocketNotifier']) -> None: ... + def registerSocketNotifier(self, notifier: typing.Optional['QSocketNotifier']) -> None: ... + def hasPendingEvents(self) -> bool: ... + def processEvents(self, flags: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag']) -> bool: ... + @staticmethod + def instance(thread: typing.Optional['QThread'] = ...) -> typing.Optional['QAbstractEventDispatcher']: ... + + +class QModelIndex(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QModelIndex') -> None: ... + @typing.overload + def __init__(self, a0: 'QPersistentModelIndex') -> None: ... + + def __ge__(self, other: 'QModelIndex') -> bool: ... + def __hash__(self) -> int: ... + def __ne__(self, other: object): ... + def __lt__(self, other: 'QModelIndex') -> bool: ... + def __eq__(self, other: object): ... + def siblingAtRow(self, row: int) -> 'QModelIndex': ... + def siblingAtColumn(self, column: int) -> 'QModelIndex': ... + def sibling(self, arow: int, acolumn: int) -> 'QModelIndex': ... + def parent(self) -> 'QModelIndex': ... + def isValid(self) -> bool: ... + def model(self) -> typing.Optional['QAbstractItemModel']: ... + def internalId(self) -> int: ... + def internalPointer(self) -> typing.Any: ... + def flags(self) -> Qt.ItemFlags: ... + def data(self, role: int = ...) -> typing.Any: ... + def column(self) -> int: ... + def row(self) -> int: ... + def child(self, arow: int, acolumn: int) -> 'QModelIndex': ... + + +class QPersistentModelIndex(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, index: QModelIndex) -> None: ... + @typing.overload + def __init__(self, other: 'QPersistentModelIndex') -> None: ... + + def __ge__(self, other: 'QPersistentModelIndex') -> bool: ... + def __hash__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __lt__(self, other: 'QPersistentModelIndex') -> bool: ... + def swap(self, other: 'QPersistentModelIndex') -> None: ... + def isValid(self) -> bool: ... + def model(self) -> typing.Optional['QAbstractItemModel']: ... + def child(self, row: int, column: int) -> QModelIndex: ... + def sibling(self, row: int, column: int) -> QModelIndex: ... + def parent(self) -> QModelIndex: ... + def flags(self) -> Qt.ItemFlags: ... + def data(self, role: int = ...) -> typing.Any: ... + def column(self) -> int: ... + def row(self) -> int: ... + + +class QAbstractItemModel(QObject): + + class CheckIndexOption(int): + NoOption = ... # type: QAbstractItemModel.CheckIndexOption + IndexIsValid = ... # type: QAbstractItemModel.CheckIndexOption + DoNotUseParent = ... # type: QAbstractItemModel.CheckIndexOption + ParentIsInvalid = ... # type: QAbstractItemModel.CheckIndexOption + + class LayoutChangeHint(int): + NoLayoutChangeHint = ... # type: QAbstractItemModel.LayoutChangeHint + VerticalSortHint = ... # type: QAbstractItemModel.LayoutChangeHint + HorizontalSortHint = ... # type: QAbstractItemModel.LayoutChangeHint + + class CheckIndexOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QAbstractItemModel.CheckIndexOptions', 'QAbstractItemModel.CheckIndexOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QAbstractItemModel.CheckIndexOptions', 'QAbstractItemModel.CheckIndexOption']) -> 'QAbstractItemModel.CheckIndexOptions': ... + def __xor__(self, f: typing.Union['QAbstractItemModel.CheckIndexOptions', 'QAbstractItemModel.CheckIndexOption']) -> 'QAbstractItemModel.CheckIndexOptions': ... + def __ior__(self, f: typing.Union['QAbstractItemModel.CheckIndexOptions', 'QAbstractItemModel.CheckIndexOption']) -> 'QAbstractItemModel.CheckIndexOptions': ... + def __or__(self, f: typing.Union['QAbstractItemModel.CheckIndexOptions', 'QAbstractItemModel.CheckIndexOption']) -> 'QAbstractItemModel.CheckIndexOptions': ... + def __iand__(self, f: typing.Union['QAbstractItemModel.CheckIndexOptions', 'QAbstractItemModel.CheckIndexOption']) -> 'QAbstractItemModel.CheckIndexOptions': ... + def __and__(self, f: typing.Union['QAbstractItemModel.CheckIndexOptions', 'QAbstractItemModel.CheckIndexOption']) -> 'QAbstractItemModel.CheckIndexOptions': ... + def __invert__(self) -> 'QAbstractItemModel.CheckIndexOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def checkIndex(self, index: QModelIndex, options: typing.Union['QAbstractItemModel.CheckIndexOptions', 'QAbstractItemModel.CheckIndexOption'] = ...) -> bool: ... + def moveColumn(self, sourceParent: QModelIndex, sourceColumn: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def moveRow(self, sourceParent: QModelIndex, sourceRow: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def moveColumns(self, sourceParent: QModelIndex, sourceColumn: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def moveRows(self, sourceParent: QModelIndex, sourceRow: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def canDropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def resetInternalData(self) -> None: ... + def endResetModel(self) -> None: ... + def beginResetModel(self) -> None: ... + def endMoveColumns(self) -> None: ... + def beginMoveColumns(self, sourceParent: QModelIndex, sourceFirst: int, sourceLast: int, destinationParent: QModelIndex, destinationColumn: int) -> bool: ... + def endMoveRows(self) -> None: ... + def beginMoveRows(self, sourceParent: QModelIndex, sourceFirst: int, sourceLast: int, destinationParent: QModelIndex, destinationRow: int) -> bool: ... + columnsMoved: typing.ClassVar[pyqtSignal] + columnsAboutToBeMoved: typing.ClassVar[pyqtSignal] + rowsMoved: typing.ClassVar[pyqtSignal] + rowsAboutToBeMoved: typing.ClassVar[pyqtSignal] + def createIndex(self, row: int, column: int, object: typing.Any = ...) -> QModelIndex: ... + def roleNames(self) -> typing.Dict[int, 'QByteArray']: ... + def supportedDragActions(self) -> Qt.DropActions: ... + def removeColumn(self, column: int, parent: QModelIndex = ...) -> bool: ... + def removeRow(self, row: int, parent: QModelIndex = ...) -> bool: ... + def insertColumn(self, column: int, parent: QModelIndex = ...) -> bool: ... + def insertRow(self, row: int, parent: QModelIndex = ...) -> bool: ... + def changePersistentIndexList(self, from_: typing.Iterable[QModelIndex], to: typing.Iterable[QModelIndex]) -> None: ... + def changePersistentIndex(self, from_: QModelIndex, to: QModelIndex) -> None: ... + def persistentIndexList(self) -> typing.List[QModelIndex]: ... + def endRemoveColumns(self) -> None: ... + def beginRemoveColumns(self, parent: QModelIndex, first: int, last: int) -> None: ... + def endInsertColumns(self) -> None: ... + def beginInsertColumns(self, parent: QModelIndex, first: int, last: int) -> None: ... + def endRemoveRows(self) -> None: ... + def beginRemoveRows(self, parent: QModelIndex, first: int, last: int) -> None: ... + def endInsertRows(self) -> None: ... + def beginInsertRows(self, parent: QModelIndex, first: int, last: int) -> None: ... + def decodeData(self, row: int, column: int, parent: QModelIndex, stream: 'QDataStream') -> bool: ... + def encodeData(self, indexes: typing.Iterable[QModelIndex], stream: 'QDataStream') -> None: ... + def revert(self) -> None: ... + def submit(self) -> bool: ... + modelReset: typing.ClassVar[pyqtSignal] + modelAboutToBeReset: typing.ClassVar[pyqtSignal] + columnsRemoved: typing.ClassVar[pyqtSignal] + columnsAboutToBeRemoved: typing.ClassVar[pyqtSignal] + columnsInserted: typing.ClassVar[pyqtSignal] + columnsAboutToBeInserted: typing.ClassVar[pyqtSignal] + rowsRemoved: typing.ClassVar[pyqtSignal] + rowsAboutToBeRemoved: typing.ClassVar[pyqtSignal] + rowsInserted: typing.ClassVar[pyqtSignal] + rowsAboutToBeInserted: typing.ClassVar[pyqtSignal] + layoutChanged: typing.ClassVar[pyqtSignal] + layoutAboutToBeChanged: typing.ClassVar[pyqtSignal] + headerDataChanged: typing.ClassVar[pyqtSignal] + dataChanged: typing.ClassVar[pyqtSignal] + def span(self, index: QModelIndex) -> 'QSize': ... + def match(self, start: QModelIndex, role: int, value: typing.Any, hits: int = ..., flags: typing.Union[Qt.MatchFlags, Qt.MatchFlag] = ...) -> typing.List[QModelIndex]: ... + def buddy(self, index: QModelIndex) -> QModelIndex: ... + def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... + def flags(self, index: QModelIndex) -> Qt.ItemFlags: ... + def canFetchMore(self, parent: QModelIndex) -> bool: ... + def fetchMore(self, parent: QModelIndex) -> None: ... + def removeColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... + def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def supportedDropActions(self) -> Qt.DropActions: ... + def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def mimeData(self, indexes: typing.Iterable[QModelIndex]) -> typing.Optional['QMimeData']: ... + def mimeTypes(self) -> typing.List[str]: ... + def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... + def itemData(self, index: QModelIndex) -> typing.Dict[int, typing.Any]: ... + def setHeaderData(self, section: int, orientation: Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... + def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... + def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, index: QModelIndex, role: int = ...) -> typing.Any: ... + def hasChildren(self, parent: QModelIndex = ...) -> bool: ... + def columnCount(self, parent: QModelIndex = ...) -> int: ... + def rowCount(self, parent: QModelIndex = ...) -> int: ... + def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... + @typing.overload + def parent(self, child: QModelIndex) -> QModelIndex: ... + @typing.overload + def parent(self) -> typing.Optional[QObject]: ... + def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... + def hasIndex(self, row: int, column: int, parent: QModelIndex = ...) -> bool: ... + + +class QAbstractTableModel(QAbstractItemModel): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... + def parent(self) -> typing.Optional[QObject]: ... + def flags(self, index: QModelIndex) -> Qt.ItemFlags: ... + def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... + + +class QAbstractListModel(QAbstractItemModel): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... + def parent(self) -> typing.Optional[QObject]: ... + def flags(self, index: QModelIndex) -> Qt.ItemFlags: ... + def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def index(self, row: int, column: int = ..., parent: QModelIndex = ...) -> QModelIndex: ... + + +class QAbstractNativeEventFilter(PyQt5.sipsimplewrapper): + + def __init__(self) -> None: ... + + def nativeEventFilter(self, eventType: typing.Union['QByteArray', bytes, bytearray], message: typing.Optional[PyQt5.sip.voidptr]) -> typing.Tuple[bool, typing.Optional[int]]: ... + + +class QAbstractProxyModel(QAbstractItemModel): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def supportedDragActions(self) -> Qt.DropActions: ... + def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def canDropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + sourceModelChanged: typing.ClassVar[pyqtSignal] + def resetInternalData(self) -> None: ... + def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... + def supportedDropActions(self) -> Qt.DropActions: ... + def mimeTypes(self) -> typing.List[str]: ... + def mimeData(self, indexes: typing.Iterable[QModelIndex]) -> typing.Optional['QMimeData']: ... + def hasChildren(self, parent: QModelIndex = ...) -> bool: ... + def span(self, index: QModelIndex) -> 'QSize': ... + def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... + def fetchMore(self, parent: QModelIndex) -> None: ... + def canFetchMore(self, parent: QModelIndex) -> bool: ... + def buddy(self, index: QModelIndex) -> QModelIndex: ... + def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... + def flags(self, index: QModelIndex) -> Qt.ItemFlags: ... + def itemData(self, index: QModelIndex) -> typing.Dict[int, typing.Any]: ... + def setHeaderData(self, section: int, orientation: Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... + def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... + def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, proxyIndex: QModelIndex, role: int = ...) -> typing.Any: ... + def revert(self) -> None: ... + def submit(self) -> bool: ... + def mapSelectionFromSource(self, selection: 'QItemSelection') -> 'QItemSelection': ... + def mapSelectionToSource(self, selection: 'QItemSelection') -> 'QItemSelection': ... + def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... + def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... + def sourceModel(self) -> typing.Optional[QAbstractItemModel]: ... + def setSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... + + +class QAbstractState(QObject): + + def __init__(self, parent: typing.Optional['QState'] = ...) -> None: ... + + def event(self, e: typing.Optional['QEvent']) -> bool: ... + def onExit(self, event: typing.Optional['QEvent']) -> None: ... + def onEntry(self, event: typing.Optional['QEvent']) -> None: ... + exited: typing.ClassVar[pyqtSignal] + entered: typing.ClassVar[pyqtSignal] + activeChanged: typing.ClassVar[pyqtSignal] + def active(self) -> bool: ... + def machine(self) -> typing.Optional['QStateMachine']: ... + def parentState(self) -> typing.Optional['QState']: ... + + +class QAbstractTransition(QObject): + + class TransitionType(int): + ExternalTransition = ... # type: QAbstractTransition.TransitionType + InternalTransition = ... # type: QAbstractTransition.TransitionType + + def __init__(self, sourceState: typing.Optional['QState'] = ...) -> None: ... + + def setTransitionType(self, type: 'QAbstractTransition.TransitionType') -> None: ... + def transitionType(self) -> 'QAbstractTransition.TransitionType': ... + def event(self, e: typing.Optional['QEvent']) -> bool: ... + def onTransition(self, event: typing.Optional['QEvent']) -> None: ... + def eventTest(self, event: typing.Optional['QEvent']) -> bool: ... + targetStatesChanged: typing.ClassVar[pyqtSignal] + targetStateChanged: typing.ClassVar[pyqtSignal] + triggered: typing.ClassVar[pyqtSignal] + def animations(self) -> typing.List[QAbstractAnimation]: ... + def removeAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> None: ... + def addAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> None: ... + def machine(self) -> typing.Optional['QStateMachine']: ... + def setTargetStates(self, targets: typing.Iterable[QAbstractState]) -> None: ... + def targetStates(self) -> typing.List[QAbstractState]: ... + def setTargetState(self, target: typing.Optional[QAbstractState]) -> None: ... + def targetState(self) -> typing.Optional[QAbstractState]: ... + def sourceState(self) -> typing.Optional['QState']: ... + + +class QAnimationGroup(QAbstractAnimation): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def event(self, event: typing.Optional['QEvent']) -> bool: ... + def clear(self) -> None: ... + def takeAnimation(self, index: int) -> typing.Optional[QAbstractAnimation]: ... + def removeAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> None: ... + def insertAnimation(self, index: int, animation: typing.Optional[QAbstractAnimation]) -> None: ... + def addAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> None: ... + def indexOfAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> int: ... + def animationCount(self) -> int: ... + def animationAt(self, index: int) -> typing.Optional[QAbstractAnimation]: ... + + +class QBasicTimer(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QBasicTimer') -> None: ... + + def swap(self, other: 'QBasicTimer') -> None: ... + def stop(self) -> None: ... + @typing.overload + def start(self, msec: int, timerType: Qt.TimerType, obj: typing.Optional[QObject]) -> None: ... + @typing.overload + def start(self, msec: int, obj: typing.Optional[QObject]) -> None: ... + def timerId(self) -> int: ... + def isActive(self) -> bool: ... + + +class QBitArray(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, size: int, value: bool = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QBitArray') -> None: ... + + def __or__(self, a0: 'QBitArray') -> 'QBitArray': ... + def __and__(self, a0: 'QBitArray') -> 'QBitArray': ... + def __xor__(self, a0: 'QBitArray') -> 'QBitArray': ... + @staticmethod + def fromBits(data: typing.Optional[bytes], len: int) -> 'QBitArray': ... + def bits(self) -> bytes: ... + def swap(self, other: 'QBitArray') -> None: ... + def __hash__(self) -> int: ... + def at(self, i: int) -> bool: ... + def __getitem__(self, i: int) -> bool: ... + def toggleBit(self, i: int) -> bool: ... + def clearBit(self, i: int) -> None: ... + @typing.overload + def setBit(self, i: int) -> None: ... + @typing.overload + def setBit(self, i: int, val: bool) -> None: ... + def testBit(self, i: int) -> bool: ... + def truncate(self, pos: int) -> None: ... + @typing.overload + def fill(self, val: bool, first: int, last: int) -> None: ... + @typing.overload + def fill(self, value: bool, size: int = ...) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __invert__(self) -> 'QBitArray': ... + def __ixor__(self, a0: 'QBitArray') -> 'QBitArray': ... + def __ior__(self, a0: 'QBitArray') -> 'QBitArray': ... + def __iand__(self, a0: 'QBitArray') -> 'QBitArray': ... + def clear(self) -> None: ... + def isDetached(self) -> bool: ... + def detach(self) -> None: ... + def resize(self, size: int) -> None: ... + def isNull(self) -> bool: ... + def isEmpty(self) -> bool: ... + def __len__(self) -> int: ... + @typing.overload + def count(self) -> int: ... + @typing.overload + def count(self, on: bool) -> int: ... + def size(self) -> int: ... + + +class QIODevice(QObject): + + class OpenModeFlag(int): + NotOpen = ... # type: QIODevice.OpenModeFlag + ReadOnly = ... # type: QIODevice.OpenModeFlag + WriteOnly = ... # type: QIODevice.OpenModeFlag + ReadWrite = ... # type: QIODevice.OpenModeFlag + Append = ... # type: QIODevice.OpenModeFlag + Truncate = ... # type: QIODevice.OpenModeFlag + Text = ... # type: QIODevice.OpenModeFlag + Unbuffered = ... # type: QIODevice.OpenModeFlag + NewOnly = ... # type: QIODevice.OpenModeFlag + ExistingOnly = ... # type: QIODevice.OpenModeFlag + + class OpenMode(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> 'QIODevice.OpenMode': ... + def __xor__(self, f: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> 'QIODevice.OpenMode': ... + def __ior__(self, f: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> 'QIODevice.OpenMode': ... + def __or__(self, f: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> 'QIODevice.OpenMode': ... + def __iand__(self, f: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> 'QIODevice.OpenMode': ... + def __and__(self, f: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> 'QIODevice.OpenMode': ... + def __invert__(self) -> 'QIODevice.OpenMode': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QObject]) -> None: ... + + def skip(self, maxSize: int) -> int: ... + channelBytesWritten: typing.ClassVar[pyqtSignal] + channelReadyRead: typing.ClassVar[pyqtSignal] + def isTransactionStarted(self) -> bool: ... + def rollbackTransaction(self) -> None: ... + def commitTransaction(self) -> None: ... + def startTransaction(self) -> None: ... + def setCurrentWriteChannel(self, channel: int) -> None: ... + def currentWriteChannel(self) -> int: ... + def setCurrentReadChannel(self, channel: int) -> None: ... + def currentReadChannel(self) -> int: ... + def writeChannelCount(self) -> int: ... + def readChannelCount(self) -> int: ... + def setErrorString(self, errorString: typing.Optional[str]) -> None: ... + def setOpenMode(self, openMode: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> None: ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readLineData(self, maxlen: int) -> bytes: ... + def readData(self, maxlen: int) -> bytes: ... + readChannelFinished: typing.ClassVar[pyqtSignal] + aboutToClose: typing.ClassVar[pyqtSignal] + bytesWritten: typing.ClassVar[pyqtSignal] + readyRead: typing.ClassVar[pyqtSignal] + def errorString(self) -> str: ... + def getChar(self) -> typing.Tuple[bool, typing.Optional[bytes]]: ... + def putChar(self, c: str) -> bool: ... + def ungetChar(self, c: str) -> None: ... + def waitForBytesWritten(self, msecs: int) -> bool: ... + def waitForReadyRead(self, msecs: int) -> bool: ... + def write(self, data: typing.Union['QByteArray', bytes, bytearray]) -> int: ... + def peek(self, maxlen: int) -> 'QByteArray': ... + def canReadLine(self) -> bool: ... + def readLine(self, maxlen: int = ...) -> bytes: ... + def readAll(self) -> 'QByteArray': ... + def read(self, maxlen: int) -> bytes: ... + def bytesToWrite(self) -> int: ... + def bytesAvailable(self) -> int: ... + def reset(self) -> bool: ... + def atEnd(self) -> bool: ... + def seek(self, pos: int) -> bool: ... + def size(self) -> int: ... + def pos(self) -> int: ... + def close(self) -> None: ... + def open(self, mode: typing.Union['QIODevice.OpenMode', 'QIODevice.OpenModeFlag']) -> bool: ... + def isSequential(self) -> bool: ... + def isWritable(self) -> bool: ... + def isReadable(self) -> bool: ... + def isOpen(self) -> bool: ... + def isTextModeEnabled(self) -> bool: ... + def setTextModeEnabled(self, enabled: bool) -> None: ... + def openMode(self) -> 'QIODevice.OpenMode': ... + + +class QBuffer(QIODevice): + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, byteArray: typing.Optional['QByteArray'], parent: typing.Optional[QObject] = ...) -> None: ... + + def disconnectNotify(self, a0: 'QMetaMethod') -> None: ... + def connectNotify(self, a0: 'QMetaMethod') -> None: ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readData(self, maxlen: int) -> bytes: ... + def canReadLine(self) -> bool: ... + def atEnd(self) -> bool: ... + def seek(self, off: int) -> bool: ... + def pos(self) -> int: ... + def size(self) -> int: ... + def close(self) -> None: ... + def open(self, openMode: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag]) -> bool: ... + @typing.overload + def setData(self, data: typing.Union['QByteArray', bytes, bytearray]) -> None: ... + @typing.overload + def setData(self, adata: typing.Optional[PyQt5.sip.array[bytes]]) -> None: ... + def setBuffer(self, a: typing.Optional['QByteArray']) -> None: ... + def data(self) -> 'QByteArray': ... + def buffer(self) -> 'QByteArray': ... + + +class QByteArray(PyQt5.sipsimplewrapper): + + class Base64DecodingStatus(int): + Ok = ... # type: QByteArray.Base64DecodingStatus + IllegalInputLength = ... # type: QByteArray.Base64DecodingStatus + IllegalCharacter = ... # type: QByteArray.Base64DecodingStatus + IllegalPadding = ... # type: QByteArray.Base64DecodingStatus + + class Base64Option(int): + Base64Encoding = ... # type: QByteArray.Base64Option + Base64UrlEncoding = ... # type: QByteArray.Base64Option + KeepTrailingEquals = ... # type: QByteArray.Base64Option + OmitTrailingEquals = ... # type: QByteArray.Base64Option + IgnoreBase64DecodingErrors = ... # type: QByteArray.Base64Option + AbortOnBase64DecodingErrors = ... # type: QByteArray.Base64Option + + class Base64Options(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> 'QByteArray.Base64Options': ... + def __xor__(self, f: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> 'QByteArray.Base64Options': ... + def __ior__(self, f: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> 'QByteArray.Base64Options': ... + def __or__(self, f: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> 'QByteArray.Base64Options': ... + def __iand__(self, f: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> 'QByteArray.Base64Options': ... + def __and__(self, f: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> 'QByteArray.Base64Options': ... + def __invert__(self) -> 'QByteArray.Base64Options': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class FromBase64Result(PyQt5.sipsimplewrapper): + + decoded = ... # type: typing.Union['QByteArray', bytes, bytearray] + decodingStatus = ... # type: 'QByteArray.Base64DecodingStatus' + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QByteArray.FromBase64Result') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __hash__(self) -> int: ... + def __int__(self) -> bool: ... + def swap(self, other: 'QByteArray.FromBase64Result') -> None: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, size: int, c: str) -> None: ... + @typing.overload + def __init__(self, a: typing.Union['QByteArray', bytes, bytearray]) -> None: ... + + def __add__(self, a2: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @staticmethod + def fromBase64Encoding(base64: typing.Union['QByteArray', bytes, bytearray], options: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option'] = ...) -> 'QByteArray.FromBase64Result': ... + def isLower(self) -> bool: ... + def isUpper(self) -> bool: ... + def compare(self, a: typing.Union['QByteArray', bytes, bytearray], cs: Qt.CaseSensitivity = ...) -> int: ... + def chopped(self, len: int) -> 'QByteArray': ... + def swap(self, other: 'QByteArray') -> None: ... + def repeated(self, times: int) -> 'QByteArray': ... + @staticmethod + def fromPercentEncoding(input: typing.Union['QByteArray', bytes, bytearray], percent: str = ...) -> 'QByteArray': ... + def toPercentEncoding(self, exclude: typing.Union['QByteArray', bytes, bytearray] = ..., include: typing.Union['QByteArray', bytes, bytearray] = ..., percent: str = ...) -> 'QByteArray': ... + @typing.overload + def toHex(self) -> 'QByteArray': ... + @typing.overload + def toHex(self, separator: str) -> 'QByteArray': ... + def contains(self, a: typing.Union['QByteArray', bytes, bytearray]) -> bool: ... + def push_front(self, a: typing.Union['QByteArray', bytes, bytearray]) -> None: ... + def push_back(self, a: typing.Union['QByteArray', bytes, bytearray]) -> None: ... + def squeeze(self) -> None: ... + def reserve(self, size: int) -> None: ... + def capacity(self) -> int: ... + def data(self) -> bytes: ... + def isEmpty(self) -> bool: ... + def __imul__(self, m: int) -> 'QByteArray': ... + def __mul__(self, m: int) -> 'QByteArray': ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + def __contains__(self, a: typing.Union['QByteArray', bytes, bytearray]) -> int: ... + @typing.overload + def __getitem__(self, i: int) -> bytes: ... + @typing.overload + def __getitem__(self, slice: slice) -> 'QByteArray': ... + def at(self, i: int) -> bytes: ... + def size(self) -> int: ... + def isNull(self) -> bool: ... + def length(self) -> int: ... + def __len__(self) -> int: ... + @staticmethod + def fromHex(hexEncoded: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @staticmethod + def fromRawData(a0: typing.Optional[PyQt5.sip.array[bytes]]) -> 'QByteArray': ... + @typing.overload + @staticmethod + def fromBase64(base64: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @typing.overload + @staticmethod + def fromBase64(base64: typing.Union['QByteArray', bytes, bytearray], options: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> 'QByteArray': ... + @typing.overload + @staticmethod + def number(n: float, format: str = ..., precision: int = ...) -> 'QByteArray': ... + @typing.overload + @staticmethod + def number(n: int, base: int = ...) -> 'QByteArray': ... + @typing.overload + def setNum(self, n: float, format: str = ..., precision: int = ...) -> 'QByteArray': ... + @typing.overload + def setNum(self, n: int, base: int = ...) -> 'QByteArray': ... + @typing.overload + def toBase64(self) -> 'QByteArray': ... + @typing.overload + def toBase64(self, options: typing.Union['QByteArray.Base64Options', 'QByteArray.Base64Option']) -> 'QByteArray': ... + def toDouble(self) -> typing.Tuple[float, typing.Optional[bool]]: ... + def toFloat(self) -> typing.Tuple[float, typing.Optional[bool]]: ... + def toULongLong(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toLongLong(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toULong(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toLong(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toUInt(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toInt(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toUShort(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toShort(self, base: int = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + @typing.overload + def __ge__(self, s2: typing.Optional[str]) -> bool: ... + @typing.overload + def __ge__(self, a2: typing.Union['QByteArray', bytes, bytearray]) -> bool: ... + @typing.overload + def __le__(self, s2: typing.Optional[str]) -> bool: ... + @typing.overload + def __le__(self, a2: typing.Union['QByteArray', bytes, bytearray]) -> bool: ... + @typing.overload + def __gt__(self, s2: typing.Optional[str]) -> bool: ... + @typing.overload + def __gt__(self, a2: typing.Union['QByteArray', bytes, bytearray]) -> bool: ... + @typing.overload + def __lt__(self, s2: typing.Optional[str]) -> bool: ... + @typing.overload + def __lt__(self, a2: typing.Union['QByteArray', bytes, bytearray]) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @typing.overload + def __iadd__(self, a: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @typing.overload + def __iadd__(self, s: typing.Optional[str]) -> 'QByteArray': ... + def split(self, sep: str) -> typing.List['QByteArray']: ... + @typing.overload + def replace(self, index: int, len: int, s: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @typing.overload + def replace(self, before: typing.Union['QByteArray', bytes, bytearray], after: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @typing.overload + def replace(self, before: typing.Optional[str], after: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + def remove(self, index: int, len: int) -> 'QByteArray': ... + @typing.overload + def insert(self, i: int, a: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @typing.overload + def insert(self, i: int, s: typing.Optional[str]) -> 'QByteArray': ... + @typing.overload + def insert(self, i: int, count: int, c: bytes) -> 'QByteArray': ... + @typing.overload + def append(self, a: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @typing.overload + def append(self, s: typing.Optional[str]) -> 'QByteArray': ... + @typing.overload + def append(self, count: int, c: bytes) -> 'QByteArray': ... + @typing.overload + def prepend(self, a: typing.Union['QByteArray', bytes, bytearray]) -> 'QByteArray': ... + @typing.overload + def prepend(self, count: int, c: bytes) -> 'QByteArray': ... + def rightJustified(self, width: int, fill: str = ..., truncate: bool = ...) -> 'QByteArray': ... + def leftJustified(self, width: int, fill: str = ..., truncate: bool = ...) -> 'QByteArray': ... + def simplified(self) -> 'QByteArray': ... + def trimmed(self) -> 'QByteArray': ... + def toUpper(self) -> 'QByteArray': ... + def toLower(self) -> 'QByteArray': ... + def chop(self, n: int) -> None: ... + def truncate(self, pos: int) -> None: ... + def endsWith(self, a: typing.Union['QByteArray', bytes, bytearray]) -> bool: ... + def startsWith(self, a: typing.Union['QByteArray', bytes, bytearray]) -> bool: ... + def mid(self, pos: int, length: int = ...) -> 'QByteArray': ... + def right(self, len: int) -> 'QByteArray': ... + def left(self, len: int) -> 'QByteArray': ... + @typing.overload + def count(self, a: typing.Union['QByteArray', bytes, bytearray]) -> int: ... + @typing.overload + def count(self) -> int: ... + @typing.overload + def lastIndexOf(self, ba: typing.Union['QByteArray', bytes, bytearray], from_: int = ...) -> int: ... + @typing.overload + def lastIndexOf(self, str: typing.Optional[str], from_: int = ...) -> int: ... + @typing.overload + def indexOf(self, ba: typing.Union['QByteArray', bytes, bytearray], from_: int = ...) -> int: ... + @typing.overload + def indexOf(self, str: typing.Optional[str], from_: int = ...) -> int: ... + def clear(self) -> None: ... + def fill(self, ch: str, size: int = ...) -> 'QByteArray': ... + def resize(self, size: int) -> None: ... + + +class QByteArrayMatcher(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pattern: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, other: 'QByteArrayMatcher') -> None: ... + + def pattern(self) -> QByteArray: ... + def indexIn(self, ba: typing.Union[QByteArray, bytes, bytearray], from_: int = ...) -> int: ... + def setPattern(self, pattern: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + + +class QCalendar(PyQt5.sipsimplewrapper): + + class System(int): + Gregorian = ... # type: QCalendar.System + Julian = ... # type: QCalendar.System + Milankovic = ... # type: QCalendar.System + Jalali = ... # type: QCalendar.System + IslamicCivil = ... # type: QCalendar.System + + Unspecified = ... # type: int + + class YearMonthDay(PyQt5.sipsimplewrapper): + + day = ... # type: int + month = ... # type: int + year = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, year: int, month: int = ..., day: int = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QCalendar.YearMonthDay') -> None: ... + + def isValid(self) -> bool: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, system: 'QCalendar.System') -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: 'QCalendar') -> None: ... + + @staticmethod + def availableCalendars() -> typing.List[str]: ... + def dateTimeToString(self, format: typing.Optional[str], datetime: typing.Union['QDateTime', datetime.datetime], dateOnly: typing.Union['QDate', datetime.date], timeOnly: typing.Union['QTime', datetime.time], locale: 'QLocale') -> str: ... + def standaloneWeekDayName(self, locale: 'QLocale', day: int, format: 'QLocale.FormatType' = ...) -> str: ... + def weekDayName(self, locale: 'QLocale', day: int, format: 'QLocale.FormatType' = ...) -> str: ... + def standaloneMonthName(self, locale: 'QLocale', month: int, year: int = ..., format: 'QLocale.FormatType' = ...) -> str: ... + def monthName(self, locale: 'QLocale', month: int, year: int = ..., format: 'QLocale.FormatType' = ...) -> str: ... + def dayOfWeek(self, date: typing.Union['QDate', datetime.date]) -> int: ... + def partsFromDate(self, date: typing.Union['QDate', datetime.date]) -> 'QCalendar.YearMonthDay': ... + @typing.overload + def dateFromParts(self, year: int, month: int, day: int) -> 'QDate': ... + @typing.overload + def dateFromParts(self, parts: 'QCalendar.YearMonthDay') -> 'QDate': ... + def name(self) -> str: ... + def maximumMonthsInYear(self) -> int: ... + def minimumDaysInMonth(self) -> int: ... + def maximumDaysInMonth(self) -> int: ... + def hasYearZero(self) -> bool: ... + def isProleptic(self) -> bool: ... + def isSolar(self) -> bool: ... + def isLuniSolar(self) -> bool: ... + def isLunar(self) -> bool: ... + def isGregorian(self) -> bool: ... + def isLeapYear(self, year: int) -> bool: ... + def isDateValid(self, year: int, month: int, day: int) -> bool: ... + def monthsInYear(self, year: int) -> int: ... + def daysInYear(self, year: int) -> int: ... + def daysInMonth(self, month: int, year: int = ...) -> int: ... + + +class QCborError(PyQt5.sipsimplewrapper): + + class Code(int): + UnknownError = ... # type: QCborError.Code + AdvancePastEnd = ... # type: QCborError.Code + InputOutputError = ... # type: QCborError.Code + GarbageAtEnd = ... # type: QCborError.Code + EndOfFile = ... # type: QCborError.Code + UnexpectedBreak = ... # type: QCborError.Code + UnknownType = ... # type: QCborError.Code + IllegalType = ... # type: QCborError.Code + IllegalNumber = ... # type: QCborError.Code + IllegalSimpleType = ... # type: QCborError.Code + InvalidUtf8String = ... # type: QCborError.Code + DataTooLarge = ... # type: QCborError.Code + NestingTooDeep = ... # type: QCborError.Code + UnsupportedType = ... # type: QCborError.Code + NoError = ... # type: QCborError.Code + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QCborError') -> None: ... + + def toString(self) -> str: ... + def code(self) -> 'QCborError.Code': ... + + +class QCborStreamWriter(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, device: typing.Optional[QIODevice]) -> None: ... + @typing.overload + def __init__(self, data: typing.Optional[typing.Union[QByteArray, bytes, bytearray]]) -> None: ... + + def endMap(self) -> bool: ... + @typing.overload + def startMap(self) -> None: ... + @typing.overload + def startMap(self, count: int) -> None: ... + def endArray(self) -> bool: ... + @typing.overload + def startArray(self) -> None: ... + @typing.overload + def startArray(self, count: int) -> None: ... + def appendUndefined(self) -> None: ... + def appendNull(self) -> None: ... + @typing.overload + def append(self, st: QCborSimpleType) -> None: ... + @typing.overload + def append(self, tag: QCborKnownTags) -> None: ... + @typing.overload + def append(self, str: typing.Optional[str]) -> None: ... + @typing.overload + def append(self, ba: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def append(self, b: bool) -> None: ... + @typing.overload + def append(self, d: float) -> None: ... + @typing.overload + def append(self, a0: int) -> None: ... + def device(self) -> typing.Optional[QIODevice]: ... + def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... + + +class QCborStreamReader(PyQt5.sipsimplewrapper): + + class StringResultCode(int): + EndOfString = ... # type: QCborStreamReader.StringResultCode + Ok = ... # type: QCborStreamReader.StringResultCode + Error = ... # type: QCborStreamReader.StringResultCode + + class Type(int): + UnsignedInteger = ... # type: QCborStreamReader.Type + NegativeInteger = ... # type: QCborStreamReader.Type + ByteString = ... # type: QCborStreamReader.Type + ByteArray = ... # type: QCborStreamReader.Type + TextString = ... # type: QCborStreamReader.Type + String = ... # type: QCborStreamReader.Type + Array = ... # type: QCborStreamReader.Type + Map = ... # type: QCborStreamReader.Type + Tag = ... # type: QCborStreamReader.Type + SimpleType = ... # type: QCborStreamReader.Type + HalfFloat = ... # type: QCborStreamReader.Type + Float16 = ... # type: QCborStreamReader.Type + Float = ... # type: QCborStreamReader.Type + Double = ... # type: QCborStreamReader.Type + Invalid = ... # type: QCborStreamReader.Type + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, data: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QIODevice]) -> None: ... + + def toInteger(self) -> int: ... + def toDouble(self) -> float: ... + def toSimpleType(self) -> QCborSimpleType: ... + def toUnsignedInteger(self) -> int: ... + def toBool(self) -> bool: ... + def readByteArray(self) -> typing.Tuple[QByteArray, 'QCborStreamReader.StringResultCode']: ... + def readString(self) -> typing.Tuple[str, 'QCborStreamReader.StringResultCode']: ... + def leaveContainer(self) -> bool: ... + def enterContainer(self) -> bool: ... + def isContainer(self) -> bool: ... + def __len__(self) -> int: ... + def length(self) -> int: ... + def isLengthKnown(self) -> bool: ... + def isUndefined(self) -> bool: ... + def isNull(self) -> bool: ... + def isBool(self) -> bool: ... + def isTrue(self) -> bool: ... + def isFalse(self) -> bool: ... + def isInvalid(self) -> bool: ... + def isDouble(self) -> bool: ... + def isFloat(self) -> bool: ... + def isFloat16(self) -> bool: ... + @typing.overload + def isSimpleType(self) -> bool: ... + @typing.overload + def isSimpleType(self, st: QCborSimpleType) -> bool: ... + def isTag(self) -> bool: ... + def isMap(self) -> bool: ... + def isArray(self) -> bool: ... + def isString(self) -> bool: ... + def isByteArray(self) -> bool: ... + def isInteger(self) -> bool: ... + def isNegativeInteger(self) -> bool: ... + def isUnsignedInteger(self) -> bool: ... + def type(self) -> 'QCborStreamReader.Type': ... + def next(self, maxRecursion: int = ...) -> bool: ... + def hasNext(self) -> bool: ... + def parentContainerType(self) -> 'QCborStreamReader.Type': ... + def containerDepth(self) -> int: ... + def isValid(self) -> bool: ... + def currentOffset(self) -> int: ... + def lastError(self) -> QCborError: ... + def reset(self) -> None: ... + def clear(self) -> None: ... + def reparse(self) -> None: ... + def addData(self, data: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + def device(self) -> typing.Optional[QIODevice]: ... + def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... + + +class QCollatorSortKey(PyQt5.sipsimplewrapper): + + def __init__(self, other: 'QCollatorSortKey') -> None: ... + + def __ge__(self, rhs: 'QCollatorSortKey') -> bool: ... + def __lt__(self, rhs: 'QCollatorSortKey') -> bool: ... + def compare(self, key: 'QCollatorSortKey') -> int: ... + def swap(self, other: 'QCollatorSortKey') -> None: ... + + +class QCollator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, locale: 'QLocale' = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QCollator') -> None: ... + + def sortKey(self, string: typing.Optional[str]) -> QCollatorSortKey: ... + def compare(self, s1: typing.Optional[str], s2: typing.Optional[str]) -> int: ... + def ignorePunctuation(self) -> bool: ... + def setIgnorePunctuation(self, on: bool) -> None: ... + def numericMode(self) -> bool: ... + def setNumericMode(self, on: bool) -> None: ... + def setCaseSensitivity(self, cs: Qt.CaseSensitivity) -> None: ... + def caseSensitivity(self) -> Qt.CaseSensitivity: ... + def locale(self) -> 'QLocale': ... + def setLocale(self, locale: 'QLocale') -> None: ... + def swap(self, other: 'QCollator') -> None: ... + + +class QCommandLineOption(PyQt5.sipsimplewrapper): + + class Flag(int): + HiddenFromHelp = ... # type: QCommandLineOption.Flag + ShortOptionStyle = ... # type: QCommandLineOption.Flag + + class Flags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QCommandLineOption.Flags', 'QCommandLineOption.Flag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QCommandLineOption.Flags', 'QCommandLineOption.Flag']) -> 'QCommandLineOption.Flags': ... + def __xor__(self, f: typing.Union['QCommandLineOption.Flags', 'QCommandLineOption.Flag']) -> 'QCommandLineOption.Flags': ... + def __ior__(self, f: typing.Union['QCommandLineOption.Flags', 'QCommandLineOption.Flag']) -> 'QCommandLineOption.Flags': ... + def __or__(self, f: typing.Union['QCommandLineOption.Flags', 'QCommandLineOption.Flag']) -> 'QCommandLineOption.Flags': ... + def __iand__(self, f: typing.Union['QCommandLineOption.Flags', 'QCommandLineOption.Flag']) -> 'QCommandLineOption.Flags': ... + def __and__(self, f: typing.Union['QCommandLineOption.Flags', 'QCommandLineOption.Flag']) -> 'QCommandLineOption.Flags': ... + def __invert__(self) -> 'QCommandLineOption.Flags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, names: typing.Iterable[typing.Optional[str]]) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str], description: typing.Optional[str], valueName: typing.Optional[str] = ..., defaultValue: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, names: typing.Iterable[typing.Optional[str]], description: typing.Optional[str], valueName: typing.Optional[str] = ..., defaultValue: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QCommandLineOption') -> None: ... + + def setFlags(self, aflags: typing.Union['QCommandLineOption.Flags', 'QCommandLineOption.Flag']) -> None: ... + def flags(self) -> 'QCommandLineOption.Flags': ... + def isHidden(self) -> bool: ... + def setHidden(self, hidden: bool) -> None: ... + def defaultValues(self) -> typing.List[str]: ... + def setDefaultValues(self, defaultValues: typing.Iterable[typing.Optional[str]]) -> None: ... + def setDefaultValue(self, defaultValue: typing.Optional[str]) -> None: ... + def description(self) -> str: ... + def setDescription(self, description: typing.Optional[str]) -> None: ... + def valueName(self) -> str: ... + def setValueName(self, name: typing.Optional[str]) -> None: ... + def names(self) -> typing.List[str]: ... + def swap(self, other: 'QCommandLineOption') -> None: ... + + +class QCommandLineParser(PyQt5.sipsimplewrapper): + + class OptionsAfterPositionalArgumentsMode(int): + ParseAsOptions = ... # type: QCommandLineParser.OptionsAfterPositionalArgumentsMode + ParseAsPositionalArguments = ... # type: QCommandLineParser.OptionsAfterPositionalArgumentsMode + + class SingleDashWordOptionMode(int): + ParseAsCompactedShortOptions = ... # type: QCommandLineParser.SingleDashWordOptionMode + ParseAsLongOptions = ... # type: QCommandLineParser.SingleDashWordOptionMode + + def __init__(self) -> None: ... + + def setOptionsAfterPositionalArgumentsMode(self, mode: 'QCommandLineParser.OptionsAfterPositionalArgumentsMode') -> None: ... + def showVersion(self) -> None: ... + def addOptions(self, options: typing.Iterable[QCommandLineOption]) -> bool: ... + def helpText(self) -> str: ... + def showHelp(self, exitCode: int = ...) -> None: ... + def unknownOptionNames(self) -> typing.List[str]: ... + def optionNames(self) -> typing.List[str]: ... + def positionalArguments(self) -> typing.List[str]: ... + @typing.overload + def values(self, name: typing.Optional[str]) -> typing.List[str]: ... + @typing.overload + def values(self, option: QCommandLineOption) -> typing.List[str]: ... + @typing.overload + def value(self, name: typing.Optional[str]) -> str: ... + @typing.overload + def value(self, option: QCommandLineOption) -> str: ... + @typing.overload + def isSet(self, name: typing.Optional[str]) -> bool: ... + @typing.overload + def isSet(self, option: QCommandLineOption) -> bool: ... + def errorText(self) -> str: ... + def parse(self, arguments: typing.Iterable[typing.Optional[str]]) -> bool: ... + @typing.overload + def process(self, arguments: typing.Iterable[typing.Optional[str]]) -> None: ... + @typing.overload + def process(self, app: 'QCoreApplication') -> None: ... + def clearPositionalArguments(self) -> None: ... + def addPositionalArgument(self, name: typing.Optional[str], description: typing.Optional[str], syntax: typing.Optional[str] = ...) -> None: ... + def applicationDescription(self) -> str: ... + def setApplicationDescription(self, description: typing.Optional[str]) -> None: ... + def addHelpOption(self) -> QCommandLineOption: ... + def addVersionOption(self) -> QCommandLineOption: ... + def addOption(self, commandLineOption: QCommandLineOption) -> bool: ... + def setSingleDashWordOptionMode(self, parsingMode: 'QCommandLineParser.SingleDashWordOptionMode') -> None: ... + + +class QConcatenateTablesProxyModel(QAbstractItemModel): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def sourceModels(self) -> typing.List[QAbstractItemModel]: ... + def span(self, index: QModelIndex) -> 'QSize': ... + def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def canDropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def mimeData(self, indexes: typing.Iterable[QModelIndex]) -> typing.Optional['QMimeData']: ... + def mimeTypes(self) -> typing.List[str]: ... + def columnCount(self, parent: QModelIndex = ...) -> int: ... + def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... + def rowCount(self, parent: QModelIndex = ...) -> int: ... + def parent(self, index: QModelIndex) -> QModelIndex: ... + def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... + def flags(self, index: QModelIndex) -> Qt.ItemFlags: ... + def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... + def itemData(self, proxyIndex: QModelIndex) -> typing.Dict[int, typing.Any]: ... + def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, index: QModelIndex, role: int = ...) -> typing.Any: ... + def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... + def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... + def removeSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... + def addSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... + + +class QCoreApplication(QObject): + + def __init__(self, argv: typing.List[str]) -> None: ... + + def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... + def __enter__(self) -> typing.Any: ... + @staticmethod + def isSetuidAllowed() -> bool: ... + @staticmethod + def setSetuidAllowed(allow: bool) -> None: ... + def removeNativeEventFilter(self, filterObj: typing.Optional[QAbstractNativeEventFilter]) -> None: ... + def installNativeEventFilter(self, filterObj: typing.Optional[QAbstractNativeEventFilter]) -> None: ... + @staticmethod + def setQuitLockEnabled(enabled: bool) -> None: ... + @staticmethod + def isQuitLockEnabled() -> bool: ... + @staticmethod + def setEventDispatcher(eventDispatcher: typing.Optional[QAbstractEventDispatcher]) -> None: ... + @staticmethod + def eventDispatcher() -> typing.Optional[QAbstractEventDispatcher]: ... + @staticmethod + def applicationPid() -> int: ... + @staticmethod + def applicationVersion() -> str: ... + @staticmethod + def setApplicationVersion(version: typing.Optional[str]) -> None: ... + def event(self, a0: typing.Optional['QEvent']) -> bool: ... + aboutToQuit: typing.ClassVar[pyqtSignal] + @staticmethod + def quit() -> None: ... + @staticmethod + def testAttribute(attribute: Qt.ApplicationAttribute) -> bool: ... + @staticmethod + def setAttribute(attribute: Qt.ApplicationAttribute, on: bool = ...) -> None: ... + @staticmethod + def flush() -> None: ... + @staticmethod + def translate(context: typing.Optional[str], sourceText: typing.Optional[str], disambiguation: typing.Optional[str] = ..., n: int = ...) -> str: ... + @staticmethod + def removeTranslator(messageFile: typing.Optional['QTranslator']) -> bool: ... + @staticmethod + def installTranslator(messageFile: typing.Optional['QTranslator']) -> bool: ... + @staticmethod + def removeLibraryPath(a0: typing.Optional[str]) -> None: ... + @staticmethod + def addLibraryPath(a0: typing.Optional[str]) -> None: ... + @staticmethod + def libraryPaths() -> typing.List[str]: ... + @staticmethod + def setLibraryPaths(a0: typing.Iterable[typing.Optional[str]]) -> None: ... + @staticmethod + def applicationFilePath() -> str: ... + @staticmethod + def applicationDirPath() -> str: ... + @staticmethod + def closingDown() -> bool: ... + @staticmethod + def startingUp() -> bool: ... + def notify(self, a0: typing.Optional[QObject], a1: typing.Optional['QEvent']) -> bool: ... + @staticmethod + def hasPendingEvents() -> bool: ... + @staticmethod + def removePostedEvents(receiver: typing.Optional[QObject], eventType: int = ...) -> None: ... + @staticmethod + def sendPostedEvents(receiver: typing.Optional[QObject] = ..., eventType: int = ...) -> None: ... + @staticmethod + def postEvent(receiver: typing.Optional[QObject], event: typing.Optional['QEvent'], priority: int = ...) -> None: ... + @staticmethod + def sendEvent(receiver: typing.Optional[QObject], event: typing.Optional['QEvent']) -> bool: ... + @staticmethod + def exit(returnCode: int = ...) -> None: ... + @typing.overload + @staticmethod + def processEvents(flags: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag'] = ...) -> None: ... + @typing.overload + @staticmethod + def processEvents(flags: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag'], maxtime: int) -> None: ... + @staticmethod + def exec() -> int: ... + @staticmethod + def exec_() -> int: ... + @staticmethod + def instance() -> typing.Optional['QCoreApplication']: ... + @staticmethod + def arguments() -> typing.List[str]: ... + @staticmethod + def applicationName() -> str: ... + @staticmethod + def setApplicationName(application: typing.Optional[str]) -> None: ... + @staticmethod + def organizationName() -> str: ... + @staticmethod + def setOrganizationName(orgName: typing.Optional[str]) -> None: ... + @staticmethod + def organizationDomain() -> str: ... + @staticmethod + def setOrganizationDomain(orgDomain: typing.Optional[str]) -> None: ... + + +class QEvent(PyQt5.sip.wrapper): + + class Type(int): + None_ = ... # type: QEvent.Type + Timer = ... # type: QEvent.Type + MouseButtonPress = ... # type: QEvent.Type + MouseButtonRelease = ... # type: QEvent.Type + MouseButtonDblClick = ... # type: QEvent.Type + MouseMove = ... # type: QEvent.Type + KeyPress = ... # type: QEvent.Type + KeyRelease = ... # type: QEvent.Type + FocusIn = ... # type: QEvent.Type + FocusOut = ... # type: QEvent.Type + Enter = ... # type: QEvent.Type + Leave = ... # type: QEvent.Type + Paint = ... # type: QEvent.Type + Move = ... # type: QEvent.Type + Resize = ... # type: QEvent.Type + Show = ... # type: QEvent.Type + Hide = ... # type: QEvent.Type + Close = ... # type: QEvent.Type + ParentChange = ... # type: QEvent.Type + ParentAboutToChange = ... # type: QEvent.Type + ThreadChange = ... # type: QEvent.Type + WindowActivate = ... # type: QEvent.Type + WindowDeactivate = ... # type: QEvent.Type + ShowToParent = ... # type: QEvent.Type + HideToParent = ... # type: QEvent.Type + Wheel = ... # type: QEvent.Type + WindowTitleChange = ... # type: QEvent.Type + WindowIconChange = ... # type: QEvent.Type + ApplicationWindowIconChange = ... # type: QEvent.Type + ApplicationFontChange = ... # type: QEvent.Type + ApplicationLayoutDirectionChange = ... # type: QEvent.Type + ApplicationPaletteChange = ... # type: QEvent.Type + PaletteChange = ... # type: QEvent.Type + Clipboard = ... # type: QEvent.Type + MetaCall = ... # type: QEvent.Type + SockAct = ... # type: QEvent.Type + WinEventAct = ... # type: QEvent.Type + DeferredDelete = ... # type: QEvent.Type + DragEnter = ... # type: QEvent.Type + DragMove = ... # type: QEvent.Type + DragLeave = ... # type: QEvent.Type + Drop = ... # type: QEvent.Type + ChildAdded = ... # type: QEvent.Type + ChildPolished = ... # type: QEvent.Type + ChildRemoved = ... # type: QEvent.Type + PolishRequest = ... # type: QEvent.Type + Polish = ... # type: QEvent.Type + LayoutRequest = ... # type: QEvent.Type + UpdateRequest = ... # type: QEvent.Type + UpdateLater = ... # type: QEvent.Type + ContextMenu = ... # type: QEvent.Type + InputMethod = ... # type: QEvent.Type + TabletMove = ... # type: QEvent.Type + LocaleChange = ... # type: QEvent.Type + LanguageChange = ... # type: QEvent.Type + LayoutDirectionChange = ... # type: QEvent.Type + TabletPress = ... # type: QEvent.Type + TabletRelease = ... # type: QEvent.Type + OkRequest = ... # type: QEvent.Type + IconDrag = ... # type: QEvent.Type + FontChange = ... # type: QEvent.Type + EnabledChange = ... # type: QEvent.Type + ActivationChange = ... # type: QEvent.Type + StyleChange = ... # type: QEvent.Type + IconTextChange = ... # type: QEvent.Type + ModifiedChange = ... # type: QEvent.Type + MouseTrackingChange = ... # type: QEvent.Type + WindowBlocked = ... # type: QEvent.Type + WindowUnblocked = ... # type: QEvent.Type + WindowStateChange = ... # type: QEvent.Type + ToolTip = ... # type: QEvent.Type + WhatsThis = ... # type: QEvent.Type + StatusTip = ... # type: QEvent.Type + ActionChanged = ... # type: QEvent.Type + ActionAdded = ... # type: QEvent.Type + ActionRemoved = ... # type: QEvent.Type + FileOpen = ... # type: QEvent.Type + Shortcut = ... # type: QEvent.Type + ShortcutOverride = ... # type: QEvent.Type + WhatsThisClicked = ... # type: QEvent.Type + ToolBarChange = ... # type: QEvent.Type + ApplicationActivate = ... # type: QEvent.Type + ApplicationActivated = ... # type: QEvent.Type + ApplicationDeactivate = ... # type: QEvent.Type + ApplicationDeactivated = ... # type: QEvent.Type + QueryWhatsThis = ... # type: QEvent.Type + EnterWhatsThisMode = ... # type: QEvent.Type + LeaveWhatsThisMode = ... # type: QEvent.Type + ZOrderChange = ... # type: QEvent.Type + HoverEnter = ... # type: QEvent.Type + HoverLeave = ... # type: QEvent.Type + HoverMove = ... # type: QEvent.Type + GraphicsSceneMouseMove = ... # type: QEvent.Type + GraphicsSceneMousePress = ... # type: QEvent.Type + GraphicsSceneMouseRelease = ... # type: QEvent.Type + GraphicsSceneMouseDoubleClick = ... # type: QEvent.Type + GraphicsSceneContextMenu = ... # type: QEvent.Type + GraphicsSceneHoverEnter = ... # type: QEvent.Type + GraphicsSceneHoverMove = ... # type: QEvent.Type + GraphicsSceneHoverLeave = ... # type: QEvent.Type + GraphicsSceneHelp = ... # type: QEvent.Type + GraphicsSceneDragEnter = ... # type: QEvent.Type + GraphicsSceneDragMove = ... # type: QEvent.Type + GraphicsSceneDragLeave = ... # type: QEvent.Type + GraphicsSceneDrop = ... # type: QEvent.Type + GraphicsSceneWheel = ... # type: QEvent.Type + GraphicsSceneResize = ... # type: QEvent.Type + GraphicsSceneMove = ... # type: QEvent.Type + KeyboardLayoutChange = ... # type: QEvent.Type + DynamicPropertyChange = ... # type: QEvent.Type + TabletEnterProximity = ... # type: QEvent.Type + TabletLeaveProximity = ... # type: QEvent.Type + NonClientAreaMouseMove = ... # type: QEvent.Type + NonClientAreaMouseButtonPress = ... # type: QEvent.Type + NonClientAreaMouseButtonRelease = ... # type: QEvent.Type + NonClientAreaMouseButtonDblClick = ... # type: QEvent.Type + MacSizeChange = ... # type: QEvent.Type + ContentsRectChange = ... # type: QEvent.Type + CursorChange = ... # type: QEvent.Type + ToolTipChange = ... # type: QEvent.Type + GrabMouse = ... # type: QEvent.Type + UngrabMouse = ... # type: QEvent.Type + GrabKeyboard = ... # type: QEvent.Type + UngrabKeyboard = ... # type: QEvent.Type + StateMachineSignal = ... # type: QEvent.Type + StateMachineWrapped = ... # type: QEvent.Type + TouchBegin = ... # type: QEvent.Type + TouchUpdate = ... # type: QEvent.Type + TouchEnd = ... # type: QEvent.Type + NativeGesture = ... # type: QEvent.Type + RequestSoftwareInputPanel = ... # type: QEvent.Type + CloseSoftwareInputPanel = ... # type: QEvent.Type + WinIdChange = ... # type: QEvent.Type + Gesture = ... # type: QEvent.Type + GestureOverride = ... # type: QEvent.Type + FocusAboutToChange = ... # type: QEvent.Type + ScrollPrepare = ... # type: QEvent.Type + Scroll = ... # type: QEvent.Type + Expose = ... # type: QEvent.Type + InputMethodQuery = ... # type: QEvent.Type + OrientationChange = ... # type: QEvent.Type + TouchCancel = ... # type: QEvent.Type + PlatformPanel = ... # type: QEvent.Type + ApplicationStateChange = ... # type: QEvent.Type + ReadOnlyChange = ... # type: QEvent.Type + PlatformSurface = ... # type: QEvent.Type + TabletTrackingChange = ... # type: QEvent.Type + EnterEditFocus = ... # type: QEvent.Type + LeaveEditFocus = ... # type: QEvent.Type + User = ... # type: QEvent.Type + MaxUser = ... # type: QEvent.Type + + @typing.overload + def __init__(self, type: 'QEvent.Type') -> None: ... + @typing.overload + def __init__(self, other: 'QEvent') -> None: ... + + @staticmethod + def registerEventType(hint: int = ...) -> int: ... + def ignore(self) -> None: ... + def accept(self) -> None: ... + def isAccepted(self) -> bool: ... + def setAccepted(self, accepted: bool) -> None: ... + def spontaneous(self) -> bool: ... + def type(self) -> 'QEvent.Type': ... + + +class QTimerEvent(QEvent): + + @typing.overload + def __init__(self, timerId: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QTimerEvent') -> None: ... + + def timerId(self) -> int: ... + + +class QChildEvent(QEvent): + + @typing.overload + def __init__(self, type: QEvent.Type, child: typing.Optional[QObject]) -> None: ... + @typing.overload + def __init__(self, a0: 'QChildEvent') -> None: ... + + def removed(self) -> bool: ... + def polished(self) -> bool: ... + def added(self) -> bool: ... + def child(self) -> typing.Optional[QObject]: ... + + +class QDynamicPropertyChangeEvent(QEvent): + + @typing.overload + def __init__(self, name: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, a0: 'QDynamicPropertyChangeEvent') -> None: ... + + def propertyName(self) -> QByteArray: ... + + +class QCryptographicHash(PyQt5.sipsimplewrapper): + + class Algorithm(int): + Md4 = ... # type: QCryptographicHash.Algorithm + Md5 = ... # type: QCryptographicHash.Algorithm + Sha1 = ... # type: QCryptographicHash.Algorithm + Sha224 = ... # type: QCryptographicHash.Algorithm + Sha256 = ... # type: QCryptographicHash.Algorithm + Sha384 = ... # type: QCryptographicHash.Algorithm + Sha512 = ... # type: QCryptographicHash.Algorithm + Sha3_224 = ... # type: QCryptographicHash.Algorithm + Sha3_256 = ... # type: QCryptographicHash.Algorithm + Sha3_384 = ... # type: QCryptographicHash.Algorithm + Sha3_512 = ... # type: QCryptographicHash.Algorithm + Keccak_224 = ... # type: QCryptographicHash.Algorithm + Keccak_256 = ... # type: QCryptographicHash.Algorithm + Keccak_384 = ... # type: QCryptographicHash.Algorithm + Keccak_512 = ... # type: QCryptographicHash.Algorithm + + def __init__(self, method: 'QCryptographicHash.Algorithm') -> None: ... + + @staticmethod + def hashLength(method: 'QCryptographicHash.Algorithm') -> int: ... + @staticmethod + def hash(data: typing.Union[QByteArray, bytes, bytearray], method: 'QCryptographicHash.Algorithm') -> QByteArray: ... + def result(self) -> QByteArray: ... + @typing.overload + def addData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> None: ... + @typing.overload + def addData(self, data: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def addData(self, device: typing.Optional[QIODevice]) -> bool: ... + def reset(self) -> None: ... + + +class QDataStream(PyQt5.sipsimplewrapper): + + class FloatingPointPrecision(int): + SinglePrecision = ... # type: QDataStream.FloatingPointPrecision + DoublePrecision = ... # type: QDataStream.FloatingPointPrecision + + class Status(int): + Ok = ... # type: QDataStream.Status + ReadPastEnd = ... # type: QDataStream.Status + ReadCorruptData = ... # type: QDataStream.Status + WriteFailed = ... # type: QDataStream.Status + + class ByteOrder(int): + BigEndian = ... # type: QDataStream.ByteOrder + LittleEndian = ... # type: QDataStream.ByteOrder + + class Version(int): + Qt_1_0 = ... # type: QDataStream.Version + Qt_2_0 = ... # type: QDataStream.Version + Qt_2_1 = ... # type: QDataStream.Version + Qt_3_0 = ... # type: QDataStream.Version + Qt_3_1 = ... # type: QDataStream.Version + Qt_3_3 = ... # type: QDataStream.Version + Qt_4_0 = ... # type: QDataStream.Version + Qt_4_1 = ... # type: QDataStream.Version + Qt_4_2 = ... # type: QDataStream.Version + Qt_4_3 = ... # type: QDataStream.Version + Qt_4_4 = ... # type: QDataStream.Version + Qt_4_5 = ... # type: QDataStream.Version + Qt_4_6 = ... # type: QDataStream.Version + Qt_4_7 = ... # type: QDataStream.Version + Qt_4_8 = ... # type: QDataStream.Version + Qt_4_9 = ... # type: QDataStream.Version + Qt_5_0 = ... # type: QDataStream.Version + Qt_5_1 = ... # type: QDataStream.Version + Qt_5_2 = ... # type: QDataStream.Version + Qt_5_3 = ... # type: QDataStream.Version + Qt_5_4 = ... # type: QDataStream.Version + Qt_5_5 = ... # type: QDataStream.Version + Qt_5_6 = ... # type: QDataStream.Version + Qt_5_7 = ... # type: QDataStream.Version + Qt_5_8 = ... # type: QDataStream.Version + Qt_5_9 = ... # type: QDataStream.Version + Qt_5_10 = ... # type: QDataStream.Version + Qt_5_11 = ... # type: QDataStream.Version + Qt_5_12 = ... # type: QDataStream.Version + Qt_5_13 = ... # type: QDataStream.Version + Qt_5_14 = ... # type: QDataStream.Version + Qt_5_15 = ... # type: QDataStream.Version + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QIODevice]) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QByteArray], flags: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag]) -> None: ... + @typing.overload + def __init__(self, a0: QByteArray) -> None: ... + + @typing.overload + def __lshift__(self, a0: QBitArray) -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: QByteArray) -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QDate') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QTime') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QDateTime') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QEasingCurve') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QJsonDocument') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: typing.Optional['QJsonValue']) -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QLine') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QLineF') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QLocale') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QMargins') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QMarginsF') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QPoint') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QPointF') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QRect') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QRectF') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, regExp: 'QRegExp') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, re: 'QRegularExpression') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QSize') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QSizeF') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, tz: 'QTimeZone') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QUrl') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, a0: 'QUuid') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, p: typing.Optional['QVariant']) -> 'QDataStream': ... + @typing.overload + def __lshift__(self, p: 'QVariant.Type') -> 'QDataStream': ... + @typing.overload + def __lshift__(self, version: 'QVersionNumber') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: QBitArray) -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: QByteArray) -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QDate') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QTime') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QDateTime') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QEasingCurve') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QJsonDocument') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: typing.Optional['QJsonValue']) -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QLine') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QLineF') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QLocale') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QMargins') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QMarginsF') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QPoint') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QPointF') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QRect') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QRectF') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, regExp: 'QRegExp') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, re: 'QRegularExpression') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QSize') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QSizeF') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, tz: 'QTimeZone') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QUrl') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, a0: 'QUuid') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, p: typing.Optional['QVariant']) -> 'QDataStream': ... + @typing.overload + def __rshift__(self, p: 'QVariant.Type') -> 'QDataStream': ... + @typing.overload + def __rshift__(self, version: 'QVersionNumber') -> 'QDataStream': ... + def abortTransaction(self) -> None: ... + def rollbackTransaction(self) -> None: ... + def commitTransaction(self) -> bool: ... + def startTransaction(self) -> None: ... + def setFloatingPointPrecision(self, precision: 'QDataStream.FloatingPointPrecision') -> None: ... + def floatingPointPrecision(self) -> 'QDataStream.FloatingPointPrecision': ... + def writeRawData(self, a0: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def writeBytes(self, a0: typing.Optional[PyQt5.sip.array[bytes]]) -> 'QDataStream': ... + def readRawData(self, len: int) -> bytes: ... + def readBytes(self) -> bytes: ... + def writeQVariantHash(self, qvarhash: typing.Dict[typing.Optional[str], typing.Any]) -> None: ... + def readQVariantHash(self) -> typing.Dict[str, typing.Any]: ... + def writeQVariantMap(self, qvarmap: typing.Dict[str, typing.Any]) -> None: ... + def readQVariantMap(self) -> typing.Dict[str, typing.Any]: ... + def writeQVariantList(self, qvarlst: typing.Iterable[typing.Any]) -> None: ... + def readQVariantList(self) -> typing.List[typing.Any]: ... + def writeQVariant(self, qvar: typing.Any) -> None: ... + def readQVariant(self) -> typing.Any: ... + def writeQStringList(self, qstrlst: typing.Iterable[typing.Optional[str]]) -> None: ... + def readQStringList(self) -> typing.List[str]: ... + def writeQString(self, qstr: typing.Optional[str]) -> None: ... + def readQString(self) -> str: ... + def writeString(self, str: typing.Optional[bytes]) -> None: ... + def writeDouble(self, f: float) -> None: ... + def writeFloat(self, f: float) -> None: ... + def writeBool(self, i: bool) -> None: ... + def writeUInt64(self, i: int) -> None: ... + def writeInt64(self, i: int) -> None: ... + def writeUInt32(self, i: int) -> None: ... + def writeInt32(self, i: int) -> None: ... + def writeUInt16(self, i: int) -> None: ... + def writeInt16(self, i: int) -> None: ... + def writeUInt8(self, i: int) -> None: ... + def writeInt8(self, i: int) -> None: ... + def writeInt(self, i: int) -> None: ... + def readString(self) -> bytes: ... + def readDouble(self) -> float: ... + def readFloat(self) -> float: ... + def readBool(self) -> bool: ... + def readUInt64(self) -> int: ... + def readInt64(self) -> int: ... + def readUInt32(self) -> int: ... + def readInt32(self) -> int: ... + def readUInt16(self) -> int: ... + def readInt16(self) -> int: ... + def readUInt8(self) -> int: ... + def readInt8(self) -> int: ... + def readInt(self) -> int: ... + def skipRawData(self, len: int) -> int: ... + def setVersion(self, v: int) -> None: ... + def version(self) -> int: ... + def setByteOrder(self, a0: 'QDataStream.ByteOrder') -> None: ... + def byteOrder(self) -> 'QDataStream.ByteOrder': ... + def resetStatus(self) -> None: ... + def setStatus(self, status: 'QDataStream.Status') -> None: ... + def status(self) -> 'QDataStream.Status': ... + def atEnd(self) -> bool: ... + def setDevice(self, a0: typing.Optional[QIODevice]) -> None: ... + def device(self) -> typing.Optional[QIODevice]: ... + + +class QDate(PyQt5.sipsimplewrapper): + + class MonthNameType(int): + DateFormat = ... # type: QDate.MonthNameType + StandaloneFormat = ... # type: QDate.MonthNameType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, y: int, m: int, d: int) -> None: ... + @typing.overload + def __init__(self, y: int, m: int, d: int, cal: QCalendar) -> None: ... + @typing.overload + def __init__(self, a0: 'QDate') -> None: ... + + @typing.overload + def endOfDay(self, spec: Qt.TimeSpec = ..., offsetSeconds: int = ...) -> 'QDateTime': ... + @typing.overload + def endOfDay(self, zone: 'QTimeZone') -> 'QDateTime': ... + @typing.overload + def startOfDay(self, spec: Qt.TimeSpec = ..., offsetSeconds: int = ...) -> 'QDateTime': ... + @typing.overload + def startOfDay(self, zone: 'QTimeZone') -> 'QDateTime': ... + def getDate(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setDate(self, year: int, month: int, date: int) -> bool: ... + @typing.overload + def setDate(self, year: int, month: int, day: int, cal: QCalendar) -> bool: ... + def toJulianDay(self) -> int: ... + @staticmethod + def fromJulianDay(jd: int) -> 'QDate': ... + @staticmethod + def isLeapYear(year: int) -> bool: ... + @typing.overload + @staticmethod + def fromString(string: typing.Optional[str], format: Qt.DateFormat = ...) -> 'QDate': ... + @typing.overload + @staticmethod + def fromString(s: typing.Optional[str], format: typing.Optional[str]) -> 'QDate': ... + @typing.overload + @staticmethod + def fromString(s: typing.Optional[str], format: typing.Optional[str], cal: QCalendar) -> 'QDate': ... + @staticmethod + def currentDate() -> 'QDate': ... + def __ge__(self, other: typing.Union['QDate', datetime.date]) -> bool: ... + def __gt__(self, other: typing.Union['QDate', datetime.date]) -> bool: ... + def __le__(self, other: typing.Union['QDate', datetime.date]) -> bool: ... + def __lt__(self, other: typing.Union['QDate', datetime.date]) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def daysTo(self, a0: typing.Union['QDate', datetime.date]) -> int: ... + @typing.overload + def addYears(self, years: int) -> 'QDate': ... + @typing.overload + def addYears(self, years: int, cal: QCalendar) -> 'QDate': ... + @typing.overload + def addMonths(self, months: int) -> 'QDate': ... + @typing.overload + def addMonths(self, months: int, cal: QCalendar) -> 'QDate': ... + def addDays(self, days: int) -> 'QDate': ... + @typing.overload + def toString(self, format: Qt.DateFormat = ...) -> str: ... + @typing.overload + def toString(self, f: Qt.DateFormat, cal: QCalendar) -> str: ... + @typing.overload + def toString(self, format: typing.Optional[str]) -> str: ... + @typing.overload + def toString(self, format: typing.Optional[str], cal: QCalendar) -> str: ... + @staticmethod + def longDayName(weekday: int, type: 'QDate.MonthNameType' = ...) -> str: ... + @staticmethod + def longMonthName(month: int, type: 'QDate.MonthNameType' = ...) -> str: ... + @staticmethod + def shortDayName(weekday: int, type: 'QDate.MonthNameType' = ...) -> str: ... + @staticmethod + def shortMonthName(month: int, type: 'QDate.MonthNameType' = ...) -> str: ... + def weekNumber(self) -> typing.Tuple[int, typing.Optional[int]]: ... + @typing.overload + def daysInYear(self) -> int: ... + @typing.overload + def daysInYear(self, cal: QCalendar) -> int: ... + @typing.overload + def daysInMonth(self) -> int: ... + @typing.overload + def daysInMonth(self, cal: QCalendar) -> int: ... + @typing.overload + def dayOfYear(self) -> int: ... + @typing.overload + def dayOfYear(self, cal: QCalendar) -> int: ... + @typing.overload + def dayOfWeek(self) -> int: ... + @typing.overload + def dayOfWeek(self, cal: QCalendar) -> int: ... + @typing.overload + def day(self) -> int: ... + @typing.overload + def day(self, cal: QCalendar) -> int: ... + @typing.overload + def month(self) -> int: ... + @typing.overload + def month(self, cal: QCalendar) -> int: ... + @typing.overload + def year(self) -> int: ... + @typing.overload + def year(self, cal: QCalendar) -> int: ... + @typing.overload + def isValid(self) -> bool: ... + @typing.overload + @staticmethod + def isValid(y: int, m: int, d: int) -> bool: ... + def __bool__(self) -> int: ... + def isNull(self) -> bool: ... + def toPyDate(self) -> datetime.date: ... + def __hash__(self) -> int: ... + def __repr__(self) -> str: ... + + +class QTime(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, h: int, m: int, second: int = ..., msec: int = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QTime') -> None: ... + + def msecsSinceStartOfDay(self) -> int: ... + @staticmethod + def fromMSecsSinceStartOfDay(msecs: int) -> 'QTime': ... + def elapsed(self) -> int: ... + def restart(self) -> int: ... + def start(self) -> None: ... + @typing.overload + @staticmethod + def fromString(string: typing.Optional[str], format: Qt.DateFormat = ...) -> 'QTime': ... + @typing.overload + @staticmethod + def fromString(s: typing.Optional[str], format: typing.Optional[str]) -> 'QTime': ... + @staticmethod + def currentTime() -> 'QTime': ... + def __ge__(self, other: typing.Union['QTime', datetime.time]) -> bool: ... + def __gt__(self, other: typing.Union['QTime', datetime.time]) -> bool: ... + def __le__(self, other: typing.Union['QTime', datetime.time]) -> bool: ... + def __lt__(self, other: typing.Union['QTime', datetime.time]) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def msecsTo(self, a0: typing.Union['QTime', datetime.time]) -> int: ... + def addMSecs(self, ms: int) -> 'QTime': ... + def secsTo(self, a0: typing.Union['QTime', datetime.time]) -> int: ... + def addSecs(self, secs: int) -> 'QTime': ... + def setHMS(self, h: int, m: int, s: int, msec: int = ...) -> bool: ... + @typing.overload + def toString(self, format: Qt.DateFormat = ...) -> str: ... + @typing.overload + def toString(self, format: typing.Optional[str]) -> str: ... + def msec(self) -> int: ... + def second(self) -> int: ... + def minute(self) -> int: ... + def hour(self) -> int: ... + @typing.overload + def isValid(self) -> bool: ... + @typing.overload + @staticmethod + def isValid(h: int, m: int, s: int, msec: int = ...) -> bool: ... + def __bool__(self) -> int: ... + def isNull(self) -> bool: ... + def toPyTime(self) -> datetime.time: ... + def __hash__(self) -> int: ... + def __repr__(self) -> str: ... + + +class QDateTime(PyQt5.sipsimplewrapper): + + class YearRange(int): + First = ... # type: QDateTime.YearRange + Last = ... # type: QDateTime.YearRange + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: typing.Union['QDateTime', datetime.datetime]) -> None: ... + @typing.overload + def __init__(self, a0: typing.Union[QDate, datetime.date]) -> None: ... + @typing.overload + def __init__(self, date: typing.Union[QDate, datetime.date], time: typing.Union[QTime, datetime.time], timeSpec: Qt.TimeSpec = ...) -> None: ... + @typing.overload + def __init__(self, year: int, month: int, day: int, hour: int, minute: int, second: int = ..., msec: int = ..., timeSpec: int = ...) -> None: ... + @typing.overload + def __init__(self, date: typing.Union[QDate, datetime.date], time: typing.Union[QTime, datetime.time], spec: Qt.TimeSpec, offsetSeconds: int) -> None: ... + @typing.overload + def __init__(self, date: typing.Union[QDate, datetime.date], time: typing.Union[QTime, datetime.time], timeZone: 'QTimeZone') -> None: ... + + @staticmethod + def currentSecsSinceEpoch() -> int: ... + @typing.overload + @staticmethod + def fromSecsSinceEpoch(secs: int, spec: Qt.TimeSpec = ..., offsetSeconds: int = ...) -> 'QDateTime': ... + @typing.overload + @staticmethod + def fromSecsSinceEpoch(secs: int, timeZone: 'QTimeZone') -> 'QDateTime': ... + def setSecsSinceEpoch(self, secs: int) -> None: ... + def toSecsSinceEpoch(self) -> int: ... + def toTimeZone(self, toZone: 'QTimeZone') -> 'QDateTime': ... + def toOffsetFromUtc(self, offsetSeconds: int) -> 'QDateTime': ... + def setTimeZone(self, toZone: 'QTimeZone') -> None: ... + def setOffsetFromUtc(self, offsetSeconds: int) -> None: ... + def isDaylightTime(self) -> bool: ... + def timeZoneAbbreviation(self) -> str: ... + def timeZone(self) -> 'QTimeZone': ... + def offsetFromUtc(self) -> int: ... + def swap(self, other: 'QDateTime') -> None: ... + @staticmethod + def currentMSecsSinceEpoch() -> int: ... + @typing.overload + @staticmethod + def fromMSecsSinceEpoch(msecs: int) -> 'QDateTime': ... + @typing.overload + @staticmethod + def fromMSecsSinceEpoch(msecs: int, spec: Qt.TimeSpec, offsetSeconds: int = ...) -> 'QDateTime': ... + @typing.overload + @staticmethod + def fromMSecsSinceEpoch(msecs: int, timeZone: 'QTimeZone') -> 'QDateTime': ... + @staticmethod + def currentDateTimeUtc() -> 'QDateTime': ... + def msecsTo(self, a0: typing.Union['QDateTime', datetime.datetime]) -> int: ... + def setMSecsSinceEpoch(self, msecs: int) -> None: ... + def toMSecsSinceEpoch(self) -> int: ... + @typing.overload + @staticmethod + def fromTime_t(secsSince1Jan1970UTC: int) -> 'QDateTime': ... + @typing.overload + @staticmethod + def fromTime_t(secsSince1Jan1970UTC: int, spec: Qt.TimeSpec, offsetSeconds: int = ...) -> 'QDateTime': ... + @typing.overload + @staticmethod + def fromTime_t(secsSince1Jan1970UTC: int, timeZone: 'QTimeZone') -> 'QDateTime': ... + @typing.overload + @staticmethod + def fromString(string: typing.Optional[str], format: Qt.DateFormat = ...) -> 'QDateTime': ... + @typing.overload + @staticmethod + def fromString(s: typing.Optional[str], format: typing.Optional[str]) -> 'QDateTime': ... + @typing.overload + @staticmethod + def fromString(s: typing.Optional[str], format: typing.Optional[str], cal: QCalendar) -> 'QDateTime': ... + @staticmethod + def currentDateTime() -> 'QDateTime': ... + def __ge__(self, other: typing.Union['QDateTime', datetime.datetime]) -> bool: ... + def __gt__(self, other: typing.Union['QDateTime', datetime.datetime]) -> bool: ... + def __le__(self, other: typing.Union['QDateTime', datetime.datetime]) -> bool: ... + def __lt__(self, other: typing.Union['QDateTime', datetime.datetime]) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def secsTo(self, a0: typing.Union['QDateTime', datetime.datetime]) -> int: ... + def daysTo(self, a0: typing.Union['QDateTime', datetime.datetime]) -> int: ... + def toUTC(self) -> 'QDateTime': ... + def toLocalTime(self) -> 'QDateTime': ... + def toTimeSpec(self, spec: Qt.TimeSpec) -> 'QDateTime': ... + def addMSecs(self, msecs: int) -> 'QDateTime': ... + def addSecs(self, secs: int) -> 'QDateTime': ... + def addYears(self, years: int) -> 'QDateTime': ... + def addMonths(self, months: int) -> 'QDateTime': ... + def addDays(self, days: int) -> 'QDateTime': ... + @typing.overload + def toString(self, format: Qt.DateFormat = ...) -> str: ... + @typing.overload + def toString(self, format: typing.Optional[str]) -> str: ... + @typing.overload + def toString(self, format: typing.Optional[str], cal: QCalendar) -> str: ... + def setTime_t(self, secsSince1Jan1970UTC: int) -> None: ... + def setTimeSpec(self, spec: Qt.TimeSpec) -> None: ... + def setTime(self, time: typing.Union[QTime, datetime.time]) -> None: ... + def setDate(self, date: typing.Union[QDate, datetime.date]) -> None: ... + def toTime_t(self) -> int: ... + def timeSpec(self) -> Qt.TimeSpec: ... + def time(self) -> QTime: ... + def date(self) -> QDate: ... + def isValid(self) -> bool: ... + def __bool__(self) -> int: ... + def isNull(self) -> bool: ... + def toPyDateTime(self) -> datetime.datetime: ... + def __hash__(self) -> int: ... + def __repr__(self) -> str: ... + + +class QDeadlineTimer(PyQt5.sipsimplewrapper): + + class ForeverConstant(int): + Forever = ... # type: QDeadlineTimer.ForeverConstant + + @typing.overload + def __init__(self, type: Qt.TimerType = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QDeadlineTimer.ForeverConstant', type: Qt.TimerType = ...) -> None: ... + @typing.overload + def __init__(self, msecs: int, type: Qt.TimerType = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QDeadlineTimer') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __lt__(self, d2: 'QDeadlineTimer') -> bool: ... + def __le__(self, d2: 'QDeadlineTimer') -> bool: ... + def __gt__(self, d2: 'QDeadlineTimer') -> bool: ... + def __ge__(self, d2: 'QDeadlineTimer') -> bool: ... + def __add__(self, msecs: int) -> 'QDeadlineTimer': ... + def __radd__(self, msecs: int) -> 'QDeadlineTimer': ... + @typing.overload + def __sub__(self, msecs: int) -> 'QDeadlineTimer': ... + @typing.overload + def __sub__(self, dt2: 'QDeadlineTimer') -> int: ... + def __isub__(self, msecs: int) -> 'QDeadlineTimer': ... + def __iadd__(self, msecs: int) -> 'QDeadlineTimer': ... + @staticmethod + def current(type: Qt.TimerType = ...) -> 'QDeadlineTimer': ... + @staticmethod + def addNSecs(dt: 'QDeadlineTimer', nsecs: int) -> 'QDeadlineTimer': ... + def setPreciseDeadline(self, secs: int, nsecs: int = ..., type: Qt.TimerType = ...) -> None: ... + def setDeadline(self, msecs: int, type: Qt.TimerType = ...) -> None: ... + def deadlineNSecs(self) -> int: ... + def deadline(self) -> int: ... + def setPreciseRemainingTime(self, secs: int, nsecs: int = ..., type: Qt.TimerType = ...) -> None: ... + def setRemainingTime(self, msecs: int, type: Qt.TimerType = ...) -> None: ... + def remainingTimeNSecs(self) -> int: ... + def remainingTime(self) -> int: ... + def setTimerType(self, type: Qt.TimerType) -> None: ... + def timerType(self) -> Qt.TimerType: ... + def hasExpired(self) -> bool: ... + def isForever(self) -> bool: ... + def swap(self, other: 'QDeadlineTimer') -> None: ... + + +class QDir(PyQt5.sipsimplewrapper): + + class SortFlag(int): + Name = ... # type: QDir.SortFlag + Time = ... # type: QDir.SortFlag + Size = ... # type: QDir.SortFlag + Unsorted = ... # type: QDir.SortFlag + SortByMask = ... # type: QDir.SortFlag + DirsFirst = ... # type: QDir.SortFlag + Reversed = ... # type: QDir.SortFlag + IgnoreCase = ... # type: QDir.SortFlag + DirsLast = ... # type: QDir.SortFlag + LocaleAware = ... # type: QDir.SortFlag + Type = ... # type: QDir.SortFlag + NoSort = ... # type: QDir.SortFlag + + class Filter(int): + Dirs = ... # type: QDir.Filter + Files = ... # type: QDir.Filter + Drives = ... # type: QDir.Filter + NoSymLinks = ... # type: QDir.Filter + AllEntries = ... # type: QDir.Filter + TypeMask = ... # type: QDir.Filter + Readable = ... # type: QDir.Filter + Writable = ... # type: QDir.Filter + Executable = ... # type: QDir.Filter + PermissionMask = ... # type: QDir.Filter + Modified = ... # type: QDir.Filter + Hidden = ... # type: QDir.Filter + System = ... # type: QDir.Filter + AccessMask = ... # type: QDir.Filter + AllDirs = ... # type: QDir.Filter + CaseSensitive = ... # type: QDir.Filter + NoDotAndDotDot = ... # type: QDir.Filter + NoFilter = ... # type: QDir.Filter + NoDot = ... # type: QDir.Filter + NoDotDot = ... # type: QDir.Filter + + class Filters(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDir.Filters', 'QDir.Filter']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDir.Filters', 'QDir.Filter']) -> 'QDir.Filters': ... + def __xor__(self, f: typing.Union['QDir.Filters', 'QDir.Filter']) -> 'QDir.Filters': ... + def __ior__(self, f: typing.Union['QDir.Filters', 'QDir.Filter']) -> 'QDir.Filters': ... + def __or__(self, f: typing.Union['QDir.Filters', 'QDir.Filter']) -> 'QDir.Filters': ... + def __iand__(self, f: typing.Union['QDir.Filters', 'QDir.Filter']) -> 'QDir.Filters': ... + def __and__(self, f: typing.Union['QDir.Filters', 'QDir.Filter']) -> 'QDir.Filters': ... + def __invert__(self) -> 'QDir.Filters': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class SortFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDir.SortFlags', 'QDir.SortFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDir.SortFlags', 'QDir.SortFlag']) -> 'QDir.SortFlags': ... + def __xor__(self, f: typing.Union['QDir.SortFlags', 'QDir.SortFlag']) -> 'QDir.SortFlags': ... + def __ior__(self, f: typing.Union['QDir.SortFlags', 'QDir.SortFlag']) -> 'QDir.SortFlags': ... + def __or__(self, f: typing.Union['QDir.SortFlags', 'QDir.SortFlag']) -> 'QDir.SortFlags': ... + def __iand__(self, f: typing.Union['QDir.SortFlags', 'QDir.SortFlag']) -> 'QDir.SortFlags': ... + def __and__(self, f: typing.Union['QDir.SortFlags', 'QDir.SortFlag']) -> 'QDir.SortFlags': ... + def __invert__(self) -> 'QDir.SortFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, a0: 'QDir') -> None: ... + @typing.overload + def __init__(self, path: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, path: typing.Optional[str], nameFilter: typing.Optional[str], sort: 'QDir.SortFlags' = ..., filters: 'QDir.Filters' = ...) -> None: ... + + def isEmpty(self, filters: typing.Union['QDir.Filters', 'QDir.Filter'] = ...) -> bool: ... + @staticmethod + def listSeparator() -> str: ... + def swap(self, other: 'QDir') -> None: ... + def removeRecursively(self) -> bool: ... + @staticmethod + def searchPaths(prefix: typing.Optional[str]) -> typing.List[str]: ... + @staticmethod + def addSearchPath(prefix: typing.Optional[str], path: typing.Optional[str]) -> None: ... + @staticmethod + def setSearchPaths(prefix: typing.Optional[str], searchPaths: typing.Iterable[typing.Optional[str]]) -> None: ... + @staticmethod + def fromNativeSeparators(pathName: typing.Optional[str]) -> str: ... + @staticmethod + def toNativeSeparators(pathName: typing.Optional[str]) -> str: ... + @staticmethod + def cleanPath(path: typing.Optional[str]) -> str: ... + @typing.overload + @staticmethod + def match(filters: typing.Iterable[typing.Optional[str]], fileName: typing.Optional[str]) -> bool: ... + @typing.overload + @staticmethod + def match(filter: typing.Optional[str], fileName: typing.Optional[str]) -> bool: ... + @staticmethod + def tempPath() -> str: ... + @staticmethod + def temp() -> 'QDir': ... + @staticmethod + def rootPath() -> str: ... + @staticmethod + def root() -> 'QDir': ... + @staticmethod + def homePath() -> str: ... + @staticmethod + def home() -> 'QDir': ... + @staticmethod + def currentPath() -> str: ... + @staticmethod + def current() -> 'QDir': ... + @staticmethod + def setCurrent(path: typing.Optional[str]) -> bool: ... + @staticmethod + def separator() -> str: ... + @staticmethod + def drives() -> typing.List['QFileInfo']: ... + def refresh(self) -> None: ... + def rename(self, oldName: typing.Optional[str], newName: typing.Optional[str]) -> bool: ... + def remove(self, fileName: typing.Optional[str]) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def makeAbsolute(self) -> bool: ... + def isAbsolute(self) -> bool: ... + def isRelative(self) -> bool: ... + @staticmethod + def isAbsolutePath(path: typing.Optional[str]) -> bool: ... + @staticmethod + def isRelativePath(path: typing.Optional[str]) -> bool: ... + def isRoot(self) -> bool: ... + @typing.overload + def exists(self) -> bool: ... + @typing.overload + def exists(self, name: typing.Optional[str]) -> bool: ... + def isReadable(self) -> bool: ... + def rmpath(self, dirPath: typing.Optional[str]) -> bool: ... + def mkpath(self, dirPath: typing.Optional[str]) -> bool: ... + def rmdir(self, dirName: typing.Optional[str]) -> bool: ... + def mkdir(self, dirName: typing.Optional[str]) -> bool: ... + @typing.overload + def entryInfoList(self, filters: typing.Union['QDir.Filters', 'QDir.Filter'] = ..., sort: typing.Union['QDir.SortFlags', 'QDir.SortFlag'] = ...) -> typing.List['QFileInfo']: ... + @typing.overload + def entryInfoList(self, nameFilters: typing.Iterable[typing.Optional[str]], filters: typing.Union['QDir.Filters', 'QDir.Filter'] = ..., sort: typing.Union['QDir.SortFlags', 'QDir.SortFlag'] = ...) -> typing.List['QFileInfo']: ... + @typing.overload + def entryList(self, filters: typing.Union['QDir.Filters', 'QDir.Filter'] = ..., sort: typing.Union['QDir.SortFlags', 'QDir.SortFlag'] = ...) -> typing.List[str]: ... + @typing.overload + def entryList(self, nameFilters: typing.Iterable[typing.Optional[str]], filters: typing.Union['QDir.Filters', 'QDir.Filter'] = ..., sort: typing.Union['QDir.SortFlags', 'QDir.SortFlag'] = ...) -> typing.List[str]: ... + @staticmethod + def nameFiltersFromString(nameFilter: typing.Optional[str]) -> typing.List[str]: ... + def __contains__(self, a0: typing.Optional[str]) -> int: ... + @typing.overload + def __getitem__(self, a0: int) -> str: ... + @typing.overload + def __getitem__(self, a0: slice) -> typing.List[str]: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def setSorting(self, sort: typing.Union['QDir.SortFlags', 'QDir.SortFlag']) -> None: ... + def sorting(self) -> 'QDir.SortFlags': ... + def setFilter(self, filter: typing.Union['QDir.Filters', 'QDir.Filter']) -> None: ... + def filter(self) -> 'QDir.Filters': ... + def setNameFilters(self, nameFilters: typing.Iterable[typing.Optional[str]]) -> None: ... + def nameFilters(self) -> typing.List[str]: ... + def cdUp(self) -> bool: ... + def cd(self, dirName: typing.Optional[str]) -> bool: ... + def relativeFilePath(self, fileName: typing.Optional[str]) -> str: ... + def absoluteFilePath(self, fileName: typing.Optional[str]) -> str: ... + def filePath(self, fileName: typing.Optional[str]) -> str: ... + def dirName(self) -> str: ... + def canonicalPath(self) -> str: ... + def absolutePath(self) -> str: ... + def path(self) -> str: ... + def setPath(self, path: typing.Optional[str]) -> None: ... + + +class QDirIterator(PyQt5.sipsimplewrapper): + + class IteratorFlag(int): + NoIteratorFlags = ... # type: QDirIterator.IteratorFlag + FollowSymlinks = ... # type: QDirIterator.IteratorFlag + Subdirectories = ... # type: QDirIterator.IteratorFlag + + class IteratorFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDirIterator.IteratorFlags', 'QDirIterator.IteratorFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDirIterator.IteratorFlags', 'QDirIterator.IteratorFlag']) -> 'QDirIterator.IteratorFlags': ... + def __xor__(self, f: typing.Union['QDirIterator.IteratorFlags', 'QDirIterator.IteratorFlag']) -> 'QDirIterator.IteratorFlags': ... + def __ior__(self, f: typing.Union['QDirIterator.IteratorFlags', 'QDirIterator.IteratorFlag']) -> 'QDirIterator.IteratorFlags': ... + def __or__(self, f: typing.Union['QDirIterator.IteratorFlags', 'QDirIterator.IteratorFlag']) -> 'QDirIterator.IteratorFlags': ... + def __iand__(self, f: typing.Union['QDirIterator.IteratorFlags', 'QDirIterator.IteratorFlag']) -> 'QDirIterator.IteratorFlags': ... + def __and__(self, f: typing.Union['QDirIterator.IteratorFlags', 'QDirIterator.IteratorFlag']) -> 'QDirIterator.IteratorFlags': ... + def __invert__(self) -> 'QDirIterator.IteratorFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, dir: QDir, flags: 'QDirIterator.IteratorFlags' = ...) -> None: ... + @typing.overload + def __init__(self, path: typing.Optional[str], flags: 'QDirIterator.IteratorFlags' = ...) -> None: ... + @typing.overload + def __init__(self, path: typing.Optional[str], filters: QDir.Filters, flags: 'QDirIterator.IteratorFlags' = ...) -> None: ... + @typing.overload + def __init__(self, path: typing.Optional[str], nameFilters: typing.Iterable[typing.Optional[str]], filters: QDir.Filters = ..., flags: 'QDirIterator.IteratorFlags' = ...) -> None: ... + + def path(self) -> str: ... + def fileInfo(self) -> 'QFileInfo': ... + def filePath(self) -> str: ... + def fileName(self) -> str: ... + def hasNext(self) -> bool: ... + def next(self) -> str: ... + + +class QEasingCurve(PyQt5.sipsimplewrapper): + + class Type(int): + Linear = ... # type: QEasingCurve.Type + InQuad = ... # type: QEasingCurve.Type + OutQuad = ... # type: QEasingCurve.Type + InOutQuad = ... # type: QEasingCurve.Type + OutInQuad = ... # type: QEasingCurve.Type + InCubic = ... # type: QEasingCurve.Type + OutCubic = ... # type: QEasingCurve.Type + InOutCubic = ... # type: QEasingCurve.Type + OutInCubic = ... # type: QEasingCurve.Type + InQuart = ... # type: QEasingCurve.Type + OutQuart = ... # type: QEasingCurve.Type + InOutQuart = ... # type: QEasingCurve.Type + OutInQuart = ... # type: QEasingCurve.Type + InQuint = ... # type: QEasingCurve.Type + OutQuint = ... # type: QEasingCurve.Type + InOutQuint = ... # type: QEasingCurve.Type + OutInQuint = ... # type: QEasingCurve.Type + InSine = ... # type: QEasingCurve.Type + OutSine = ... # type: QEasingCurve.Type + InOutSine = ... # type: QEasingCurve.Type + OutInSine = ... # type: QEasingCurve.Type + InExpo = ... # type: QEasingCurve.Type + OutExpo = ... # type: QEasingCurve.Type + InOutExpo = ... # type: QEasingCurve.Type + OutInExpo = ... # type: QEasingCurve.Type + InCirc = ... # type: QEasingCurve.Type + OutCirc = ... # type: QEasingCurve.Type + InOutCirc = ... # type: QEasingCurve.Type + OutInCirc = ... # type: QEasingCurve.Type + InElastic = ... # type: QEasingCurve.Type + OutElastic = ... # type: QEasingCurve.Type + InOutElastic = ... # type: QEasingCurve.Type + OutInElastic = ... # type: QEasingCurve.Type + InBack = ... # type: QEasingCurve.Type + OutBack = ... # type: QEasingCurve.Type + InOutBack = ... # type: QEasingCurve.Type + OutInBack = ... # type: QEasingCurve.Type + InBounce = ... # type: QEasingCurve.Type + OutBounce = ... # type: QEasingCurve.Type + InOutBounce = ... # type: QEasingCurve.Type + OutInBounce = ... # type: QEasingCurve.Type + InCurve = ... # type: QEasingCurve.Type + OutCurve = ... # type: QEasingCurve.Type + SineCurve = ... # type: QEasingCurve.Type + CosineCurve = ... # type: QEasingCurve.Type + BezierSpline = ... # type: QEasingCurve.Type + TCBSpline = ... # type: QEasingCurve.Type + Custom = ... # type: QEasingCurve.Type + + @typing.overload + def __init__(self, type: 'QEasingCurve.Type' = ...) -> None: ... + @typing.overload + def __init__(self, other: typing.Union['QEasingCurve', 'QEasingCurve.Type']) -> None: ... + + def toCubicSpline(self) -> typing.List['QPointF']: ... + def addTCBSegment(self, nextPoint: typing.Union['QPointF', 'QPoint'], t: float, c: float, b: float) -> None: ... + def addCubicBezierSegment(self, c1: typing.Union['QPointF', 'QPoint'], c2: typing.Union['QPointF', 'QPoint'], endPoint: typing.Union['QPointF', 'QPoint']) -> None: ... + def swap(self, other: 'QEasingCurve') -> None: ... + def valueForProgress(self, progress: float) -> float: ... + def customType(self) -> typing.Callable[[float], float]: ... + def setCustomType(self, func: typing.Callable[[float], float]) -> None: ... + def setType(self, type: 'QEasingCurve.Type') -> None: ... + def type(self) -> 'QEasingCurve.Type': ... + def setOvershoot(self, overshoot: float) -> None: ... + def overshoot(self) -> float: ... + def setPeriod(self, period: float) -> None: ... + def period(self) -> float: ... + def setAmplitude(self, amplitude: float) -> None: ... + def amplitude(self) -> float: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QElapsedTimer(PyQt5.sipsimplewrapper): + + class ClockType(int): + SystemTime = ... # type: QElapsedTimer.ClockType + MonotonicClock = ... # type: QElapsedTimer.ClockType + TickCounter = ... # type: QElapsedTimer.ClockType + MachAbsoluteTime = ... # type: QElapsedTimer.ClockType + PerformanceCounter = ... # type: QElapsedTimer.ClockType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QElapsedTimer') -> None: ... + + def __ge__(self, v2: 'QElapsedTimer') -> bool: ... + def __lt__(self, v2: 'QElapsedTimer') -> bool: ... + def nsecsElapsed(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def secsTo(self, other: 'QElapsedTimer') -> int: ... + def msecsTo(self, other: 'QElapsedTimer') -> int: ... + def msecsSinceReference(self) -> int: ... + def hasExpired(self, timeout: int) -> bool: ... + def elapsed(self) -> int: ... + def isValid(self) -> bool: ... + def invalidate(self) -> None: ... + def restart(self) -> int: ... + def start(self) -> None: ... + @staticmethod + def isMonotonic() -> bool: ... + @staticmethod + def clockType() -> 'QElapsedTimer.ClockType': ... + + +class QEventLoop(QObject): + + class ProcessEventsFlag(int): + AllEvents = ... # type: QEventLoop.ProcessEventsFlag + ExcludeUserInputEvents = ... # type: QEventLoop.ProcessEventsFlag + ExcludeSocketNotifiers = ... # type: QEventLoop.ProcessEventsFlag + WaitForMoreEvents = ... # type: QEventLoop.ProcessEventsFlag + X11ExcludeTimers = ... # type: QEventLoop.ProcessEventsFlag + + class ProcessEventsFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag']) -> 'QEventLoop.ProcessEventsFlags': ... + def __xor__(self, f: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag']) -> 'QEventLoop.ProcessEventsFlags': ... + def __ior__(self, f: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag']) -> 'QEventLoop.ProcessEventsFlags': ... + def __or__(self, f: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag']) -> 'QEventLoop.ProcessEventsFlags': ... + def __iand__(self, f: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag']) -> 'QEventLoop.ProcessEventsFlags': ... + def __and__(self, f: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag']) -> 'QEventLoop.ProcessEventsFlags': ... + def __invert__(self) -> 'QEventLoop.ProcessEventsFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def event(self, event: typing.Optional[QEvent]) -> bool: ... + def quit(self) -> None: ... + def wakeUp(self) -> None: ... + def isRunning(self) -> bool: ... + def exit(self, returnCode: int = ...) -> None: ... + def exec(self, flags: 'QEventLoop.ProcessEventsFlags' = ...) -> int: ... + def exec_(self, flags: 'QEventLoop.ProcessEventsFlags' = ...) -> int: ... + @typing.overload + def processEvents(self, flags: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag'] = ...) -> bool: ... + @typing.overload + def processEvents(self, flags: typing.Union['QEventLoop.ProcessEventsFlags', 'QEventLoop.ProcessEventsFlag'], maximumTime: int) -> None: ... + + +class QEventLoopLocker(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, loop: typing.Optional[QEventLoop]) -> None: ... + @typing.overload + def __init__(self, thread: typing.Optional['QThread']) -> None: ... + + +class QEventTransition(QAbstractTransition): + + @typing.overload + def __init__(self, sourceState: typing.Optional['QState'] = ...) -> None: ... + @typing.overload + def __init__(self, object: typing.Optional[QObject], type: QEvent.Type, sourceState: typing.Optional['QState'] = ...) -> None: ... + + def event(self, e: typing.Optional[QEvent]) -> bool: ... + def onTransition(self, event: typing.Optional[QEvent]) -> None: ... + def eventTest(self, event: typing.Optional[QEvent]) -> bool: ... + def setEventType(self, type: QEvent.Type) -> None: ... + def eventType(self) -> QEvent.Type: ... + def setEventSource(self, object: typing.Optional[QObject]) -> None: ... + def eventSource(self) -> typing.Optional[QObject]: ... + + +class QFileDevice(QIODevice): + + class FileTime(int): + FileAccessTime = ... # type: QFileDevice.FileTime + FileBirthTime = ... # type: QFileDevice.FileTime + FileMetadataChangeTime = ... # type: QFileDevice.FileTime + FileModificationTime = ... # type: QFileDevice.FileTime + + class MemoryMapFlags(int): + NoOptions = ... # type: QFileDevice.MemoryMapFlags + MapPrivateOption = ... # type: QFileDevice.MemoryMapFlags + + class FileHandleFlag(int): + AutoCloseHandle = ... # type: QFileDevice.FileHandleFlag + DontCloseHandle = ... # type: QFileDevice.FileHandleFlag + + class Permission(int): + ReadOwner = ... # type: QFileDevice.Permission + WriteOwner = ... # type: QFileDevice.Permission + ExeOwner = ... # type: QFileDevice.Permission + ReadUser = ... # type: QFileDevice.Permission + WriteUser = ... # type: QFileDevice.Permission + ExeUser = ... # type: QFileDevice.Permission + ReadGroup = ... # type: QFileDevice.Permission + WriteGroup = ... # type: QFileDevice.Permission + ExeGroup = ... # type: QFileDevice.Permission + ReadOther = ... # type: QFileDevice.Permission + WriteOther = ... # type: QFileDevice.Permission + ExeOther = ... # type: QFileDevice.Permission + + class FileError(int): + NoError = ... # type: QFileDevice.FileError + ReadError = ... # type: QFileDevice.FileError + WriteError = ... # type: QFileDevice.FileError + FatalError = ... # type: QFileDevice.FileError + ResourceError = ... # type: QFileDevice.FileError + OpenError = ... # type: QFileDevice.FileError + AbortError = ... # type: QFileDevice.FileError + TimeOutError = ... # type: QFileDevice.FileError + UnspecifiedError = ... # type: QFileDevice.FileError + RemoveError = ... # type: QFileDevice.FileError + RenameError = ... # type: QFileDevice.FileError + PositionError = ... # type: QFileDevice.FileError + ResizeError = ... # type: QFileDevice.FileError + PermissionsError = ... # type: QFileDevice.FileError + CopyError = ... # type: QFileDevice.FileError + + class Permissions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QFileDevice.Permissions', 'QFileDevice.Permission']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QFileDevice.Permissions', 'QFileDevice.Permission']) -> 'QFileDevice.Permissions': ... + def __xor__(self, f: typing.Union['QFileDevice.Permissions', 'QFileDevice.Permission']) -> 'QFileDevice.Permissions': ... + def __ior__(self, f: typing.Union['QFileDevice.Permissions', 'QFileDevice.Permission']) -> 'QFileDevice.Permissions': ... + def __or__(self, f: typing.Union['QFileDevice.Permissions', 'QFileDevice.Permission']) -> 'QFileDevice.Permissions': ... + def __iand__(self, f: typing.Union['QFileDevice.Permissions', 'QFileDevice.Permission']) -> 'QFileDevice.Permissions': ... + def __and__(self, f: typing.Union['QFileDevice.Permissions', 'QFileDevice.Permission']) -> 'QFileDevice.Permissions': ... + def __invert__(self) -> 'QFileDevice.Permissions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class FileHandleFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QFileDevice.FileHandleFlags', 'QFileDevice.FileHandleFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QFileDevice.FileHandleFlags', 'QFileDevice.FileHandleFlag']) -> 'QFileDevice.FileHandleFlags': ... + def __xor__(self, f: typing.Union['QFileDevice.FileHandleFlags', 'QFileDevice.FileHandleFlag']) -> 'QFileDevice.FileHandleFlags': ... + def __ior__(self, f: typing.Union['QFileDevice.FileHandleFlags', 'QFileDevice.FileHandleFlag']) -> 'QFileDevice.FileHandleFlags': ... + def __or__(self, f: typing.Union['QFileDevice.FileHandleFlags', 'QFileDevice.FileHandleFlag']) -> 'QFileDevice.FileHandleFlags': ... + def __iand__(self, f: typing.Union['QFileDevice.FileHandleFlags', 'QFileDevice.FileHandleFlag']) -> 'QFileDevice.FileHandleFlags': ... + def __and__(self, f: typing.Union['QFileDevice.FileHandleFlags', 'QFileDevice.FileHandleFlag']) -> 'QFileDevice.FileHandleFlags': ... + def __invert__(self) -> 'QFileDevice.FileHandleFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def setFileTime(self, newDate: typing.Union[QDateTime, datetime.datetime], fileTime: 'QFileDevice.FileTime') -> bool: ... + def fileTime(self, time: 'QFileDevice.FileTime') -> QDateTime: ... + def readLineData(self, maxlen: int) -> bytes: ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readData(self, maxlen: int) -> bytes: ... + def unmap(self, address: typing.Optional[PyQt5.sip.voidptr]) -> bool: ... + def map(self, offset: int, size: int, flags: 'QFileDevice.MemoryMapFlags' = ...) -> typing.Optional[PyQt5.sip.voidptr]: ... + def setPermissions(self, permissionSpec: typing.Union['QFileDevice.Permissions', 'QFileDevice.Permission']) -> bool: ... + def permissions(self) -> 'QFileDevice.Permissions': ... + def resize(self, sz: int) -> bool: ... + def size(self) -> int: ... + def flush(self) -> bool: ... + def atEnd(self) -> bool: ... + def seek(self, offset: int) -> bool: ... + def pos(self) -> int: ... + def fileName(self) -> str: ... + def handle(self) -> int: ... + def isSequential(self) -> bool: ... + def close(self) -> None: ... + def unsetError(self) -> None: ... + def error(self) -> 'QFileDevice.FileError': ... + + +class QFile(QFileDevice): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QObject]) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str], parent: typing.Optional[QObject]) -> None: ... + + @typing.overload + def moveToTrash(self) -> bool: ... + @typing.overload + @staticmethod + def moveToTrash(fileName: typing.Optional[str]) -> typing.Tuple[bool, typing.Optional[str]]: ... + @typing.overload + def setPermissions(self, permissionSpec: typing.Union[QFileDevice.Permissions, QFileDevice.Permission]) -> bool: ... + @typing.overload + @staticmethod + def setPermissions(filename: typing.Optional[str], permissionSpec: typing.Union[QFileDevice.Permissions, QFileDevice.Permission]) -> bool: ... + @typing.overload + def permissions(self) -> QFileDevice.Permissions: ... + @typing.overload + @staticmethod + def permissions(filename: typing.Optional[str]) -> QFileDevice.Permissions: ... + @typing.overload + def resize(self, sz: int) -> bool: ... + @typing.overload + @staticmethod + def resize(filename: typing.Optional[str], sz: int) -> bool: ... + def size(self) -> int: ... + @typing.overload + def open(self, flags: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag]) -> bool: ... + @typing.overload + def open(self, fd: int, ioFlags: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag], handleFlags: typing.Union[QFileDevice.FileHandleFlags, QFileDevice.FileHandleFlag] = ...) -> bool: ... + @typing.overload + def copy(self, newName: typing.Optional[str]) -> bool: ... + @typing.overload + @staticmethod + def copy(fileName: typing.Optional[str], newName: typing.Optional[str]) -> bool: ... + @typing.overload + def link(self, newName: typing.Optional[str]) -> bool: ... + @typing.overload + @staticmethod + def link(oldname: typing.Optional[str], newName: typing.Optional[str]) -> bool: ... + @typing.overload + def rename(self, newName: typing.Optional[str]) -> bool: ... + @typing.overload + @staticmethod + def rename(oldName: typing.Optional[str], newName: typing.Optional[str]) -> bool: ... + @typing.overload + def remove(self) -> bool: ... + @typing.overload + @staticmethod + def remove(fileName: typing.Optional[str]) -> bool: ... + @typing.overload + def symLinkTarget(self) -> str: ... + @typing.overload + @staticmethod + def symLinkTarget(fileName: typing.Optional[str]) -> str: ... + @typing.overload + def exists(self) -> bool: ... + @typing.overload + @staticmethod + def exists(fileName: typing.Optional[str]) -> bool: ... + @typing.overload + @staticmethod + def decodeName(localFileName: typing.Union[QByteArray, bytes, bytearray]) -> str: ... + @typing.overload + @staticmethod + def decodeName(localFileName: typing.Optional[str]) -> str: ... + @staticmethod + def encodeName(fileName: typing.Optional[str]) -> QByteArray: ... + def setFileName(self, name: typing.Optional[str]) -> None: ... + def fileName(self) -> str: ... + + +class QFileInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, file: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, file: QFile) -> None: ... + @typing.overload + def __init__(self, dir: QDir, file: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, fileinfo: 'QFileInfo') -> None: ... + + def isJunction(self) -> bool: ... + def isShortcut(self) -> bool: ... + def isSymbolicLink(self) -> bool: ... + def fileTime(self, time: QFileDevice.FileTime) -> QDateTime: ... + def metadataChangeTime(self) -> QDateTime: ... + def birthTime(self) -> QDateTime: ... + def swap(self, other: 'QFileInfo') -> None: ... + def isNativePath(self) -> bool: ... + def isBundle(self) -> bool: ... + def bundleName(self) -> str: ... + def symLinkTarget(self) -> str: ... + def setCaching(self, on: bool) -> None: ... + def caching(self) -> bool: ... + def lastRead(self) -> QDateTime: ... + def lastModified(self) -> QDateTime: ... + def created(self) -> QDateTime: ... + def size(self) -> int: ... + def permissions(self) -> QFileDevice.Permissions: ... + def permission(self, permissions: typing.Union[QFileDevice.Permissions, QFileDevice.Permission]) -> bool: ... + def groupId(self) -> int: ... + def group(self) -> str: ... + def ownerId(self) -> int: ... + def owner(self) -> str: ... + def isRoot(self) -> bool: ... + def isSymLink(self) -> bool: ... + def isDir(self) -> bool: ... + def isFile(self) -> bool: ... + def makeAbsolute(self) -> bool: ... + def isAbsolute(self) -> bool: ... + def isRelative(self) -> bool: ... + def isHidden(self) -> bool: ... + def isExecutable(self) -> bool: ... + def isWritable(self) -> bool: ... + def isReadable(self) -> bool: ... + def absoluteDir(self) -> QDir: ... + def dir(self) -> QDir: ... + def canonicalPath(self) -> str: ... + def absolutePath(self) -> str: ... + def path(self) -> str: ... + def completeSuffix(self) -> str: ... + def suffix(self) -> str: ... + def completeBaseName(self) -> str: ... + def baseName(self) -> str: ... + def fileName(self) -> str: ... + def canonicalFilePath(self) -> str: ... + def absoluteFilePath(self) -> str: ... + def __fspath__(self) -> typing.Any: ... + def filePath(self) -> str: ... + def refresh(self) -> None: ... + @typing.overload + def exists(self) -> bool: ... + @typing.overload + @staticmethod + def exists(file: typing.Optional[str]) -> bool: ... + @typing.overload + def setFile(self, file: typing.Optional[str]) -> None: ... + @typing.overload + def setFile(self, file: QFile) -> None: ... + @typing.overload + def setFile(self, dir: QDir, file: typing.Optional[str]) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QFileSelector(QObject): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def allSelectors(self) -> typing.List[str]: ... + def setExtraSelectors(self, list: typing.Iterable[typing.Optional[str]]) -> None: ... + def extraSelectors(self) -> typing.List[str]: ... + @typing.overload + def select(self, filePath: typing.Optional[str]) -> str: ... + @typing.overload + def select(self, filePath: 'QUrl') -> 'QUrl': ... + + +class QFileSystemWatcher(QObject): + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, paths: typing.Iterable[typing.Optional[str]], parent: typing.Optional[QObject] = ...) -> None: ... + + fileChanged: typing.ClassVar[pyqtSignal] + directoryChanged: typing.ClassVar[pyqtSignal] + def removePaths(self, files: typing.Iterable[typing.Optional[str]]) -> typing.List[str]: ... + def removePath(self, file: typing.Optional[str]) -> bool: ... + def files(self) -> typing.List[str]: ... + def directories(self) -> typing.List[str]: ... + def addPaths(self, files: typing.Iterable[typing.Optional[str]]) -> typing.List[str]: ... + def addPath(self, file: typing.Optional[str]) -> bool: ... + + +class QFinalState(QAbstractState): + + def __init__(self, parent: typing.Optional['QState'] = ...) -> None: ... + + def event(self, e: typing.Optional[QEvent]) -> bool: ... + def onExit(self, event: typing.Optional[QEvent]) -> None: ... + def onEntry(self, event: typing.Optional[QEvent]) -> None: ... + + +class QHistoryState(QAbstractState): + + class HistoryType(int): + ShallowHistory = ... # type: QHistoryState.HistoryType + DeepHistory = ... # type: QHistoryState.HistoryType + + @typing.overload + def __init__(self, parent: typing.Optional['QState'] = ...) -> None: ... + @typing.overload + def __init__(self, type: 'QHistoryState.HistoryType', parent: typing.Optional['QState'] = ...) -> None: ... + + defaultTransitionChanged: typing.ClassVar[pyqtSignal] + def setDefaultTransition(self, transition: typing.Optional[QAbstractTransition]) -> None: ... + def defaultTransition(self) -> typing.Optional[QAbstractTransition]: ... + historyTypeChanged: typing.ClassVar[pyqtSignal] + defaultStateChanged: typing.ClassVar[pyqtSignal] + def event(self, e: typing.Optional[QEvent]) -> bool: ... + def onExit(self, event: typing.Optional[QEvent]) -> None: ... + def onEntry(self, event: typing.Optional[QEvent]) -> None: ... + def setHistoryType(self, type: 'QHistoryState.HistoryType') -> None: ... + def historyType(self) -> 'QHistoryState.HistoryType': ... + def setDefaultState(self, state: typing.Optional[QAbstractState]) -> None: ... + def defaultState(self) -> typing.Optional[QAbstractState]: ... + + +class QIdentityProxyModel(QAbstractProxyModel): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def moveColumns(self, sourceParent: QModelIndex, sourceColumn: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def moveRows(self, sourceParent: QModelIndex, sourceRow: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... + def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... + def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def removeColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... + def setSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... + def match(self, start: QModelIndex, role: int, value: typing.Any, hits: int = ..., flags: typing.Union[Qt.MatchFlags, Qt.MatchFlag] = ...) -> typing.List[QModelIndex]: ... + def mapSelectionToSource(self, selection: 'QItemSelection') -> 'QItemSelection': ... + def mapSelectionFromSource(self, selection: 'QItemSelection') -> 'QItemSelection': ... + def dropMimeData(self, data: typing.Optional['QMimeData'], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def rowCount(self, parent: QModelIndex = ...) -> int: ... + def parent(self, child: QModelIndex) -> QModelIndex: ... + def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... + def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... + def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... + def columnCount(self, parent: QModelIndex = ...) -> int: ... + + +class QItemSelectionRange(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QItemSelectionRange') -> None: ... + @typing.overload + def __init__(self, atopLeft: QModelIndex, abottomRight: QModelIndex) -> None: ... + @typing.overload + def __init__(self, index: QModelIndex) -> None: ... + + def __ge__(self, other: 'QItemSelectionRange') -> bool: ... + def swap(self, other: 'QItemSelectionRange') -> None: ... + def __lt__(self, other: 'QItemSelectionRange') -> bool: ... + def isEmpty(self) -> bool: ... + def __hash__(self) -> int: ... + def intersected(self, other: 'QItemSelectionRange') -> 'QItemSelectionRange': ... + def indexes(self) -> typing.List[QModelIndex]: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def intersects(self, other: 'QItemSelectionRange') -> bool: ... + @typing.overload + def contains(self, index: QModelIndex) -> bool: ... + @typing.overload + def contains(self, row: int, column: int, parentIndex: QModelIndex) -> bool: ... + def model(self) -> typing.Optional[QAbstractItemModel]: ... + def parent(self) -> QModelIndex: ... + def bottomRight(self) -> QPersistentModelIndex: ... + def topLeft(self) -> QPersistentModelIndex: ... + def height(self) -> int: ... + def width(self) -> int: ... + def right(self) -> int: ... + def bottom(self) -> int: ... + def left(self) -> int: ... + def top(self) -> int: ... + + +class QItemSelectionModel(QObject): + + class SelectionFlag(int): + NoUpdate = ... # type: QItemSelectionModel.SelectionFlag + Clear = ... # type: QItemSelectionModel.SelectionFlag + Select = ... # type: QItemSelectionModel.SelectionFlag + Deselect = ... # type: QItemSelectionModel.SelectionFlag + Toggle = ... # type: QItemSelectionModel.SelectionFlag + Current = ... # type: QItemSelectionModel.SelectionFlag + Rows = ... # type: QItemSelectionModel.SelectionFlag + Columns = ... # type: QItemSelectionModel.SelectionFlag + SelectCurrent = ... # type: QItemSelectionModel.SelectionFlag + ToggleCurrent = ... # type: QItemSelectionModel.SelectionFlag + ClearAndSelect = ... # type: QItemSelectionModel.SelectionFlag + + class SelectionFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> 'QItemSelectionModel.SelectionFlags': ... + def __xor__(self, f: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> 'QItemSelectionModel.SelectionFlags': ... + def __ior__(self, f: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> 'QItemSelectionModel.SelectionFlags': ... + def __or__(self, f: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> 'QItemSelectionModel.SelectionFlags': ... + def __iand__(self, f: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> 'QItemSelectionModel.SelectionFlags': ... + def __and__(self, f: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> 'QItemSelectionModel.SelectionFlags': ... + def __invert__(self) -> 'QItemSelectionModel.SelectionFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, model: typing.Optional[QAbstractItemModel] = ...) -> None: ... + @typing.overload + def __init__(self, model: typing.Optional[QAbstractItemModel], parent: typing.Optional[QObject]) -> None: ... + + modelChanged: typing.ClassVar[pyqtSignal] + def setModel(self, model: typing.Optional[QAbstractItemModel]) -> None: ... + def selectedColumns(self, row: int = ...) -> typing.List[QModelIndex]: ... + def selectedRows(self, column: int = ...) -> typing.List[QModelIndex]: ... + def hasSelection(self) -> bool: ... + def emitSelectionChanged(self, newSelection: 'QItemSelection', oldSelection: 'QItemSelection') -> None: ... + currentColumnChanged: typing.ClassVar[pyqtSignal] + currentRowChanged: typing.ClassVar[pyqtSignal] + currentChanged: typing.ClassVar[pyqtSignal] + selectionChanged: typing.ClassVar[pyqtSignal] + def clearCurrentIndex(self) -> None: ... + def setCurrentIndex(self, index: QModelIndex, command: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> None: ... + @typing.overload + def select(self, index: QModelIndex, command: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> None: ... + @typing.overload + def select(self, selection: 'QItemSelection', command: typing.Union['QItemSelectionModel.SelectionFlags', 'QItemSelectionModel.SelectionFlag']) -> None: ... + def reset(self) -> None: ... + def clearSelection(self) -> None: ... + def clear(self) -> None: ... + def model(self) -> typing.Optional[QAbstractItemModel]: ... + def selection(self) -> 'QItemSelection': ... + def selectedIndexes(self) -> typing.List[QModelIndex]: ... + def columnIntersectsSelection(self, column: int, parent: QModelIndex = ...) -> bool: ... + def rowIntersectsSelection(self, row: int, parent: QModelIndex = ...) -> bool: ... + def isColumnSelected(self, column: int, parent: QModelIndex = ...) -> bool: ... + def isRowSelected(self, row: int, parent: QModelIndex = ...) -> bool: ... + def isSelected(self, index: QModelIndex) -> bool: ... + def currentIndex(self) -> QModelIndex: ... + + +class QItemSelection(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, topLeft: QModelIndex, bottomRight: QModelIndex) -> None: ... + @typing.overload + def __init__(self, a0: 'QItemSelection') -> None: ... + + @typing.overload + def __iadd__(self, other: 'QItemSelection') -> 'QItemSelection': ... + @typing.overload + def __iadd__(self, value: QItemSelectionRange) -> 'QItemSelection': ... + def lastIndexOf(self, value: QItemSelectionRange, from_: int = ...) -> int: ... + def indexOf(self, value: QItemSelectionRange, from_: int = ...) -> int: ... + def last(self) -> QItemSelectionRange: ... + def first(self) -> QItemSelectionRange: ... + def __len__(self) -> int: ... + @typing.overload + def count(self, range: QItemSelectionRange) -> int: ... + @typing.overload + def count(self) -> int: ... + def swap(self, i: int, j: int) -> None: ... + def move(self, from_: int, to: int) -> None: ... + def takeLast(self) -> QItemSelectionRange: ... + def takeFirst(self) -> QItemSelectionRange: ... + def takeAt(self, i: int) -> QItemSelectionRange: ... + def removeAll(self, range: QItemSelectionRange) -> int: ... + def removeAt(self, i: int) -> None: ... + def replace(self, i: int, range: QItemSelectionRange) -> None: ... + def insert(self, i: int, range: QItemSelectionRange) -> None: ... + def prepend(self, range: QItemSelectionRange) -> None: ... + def append(self, range: QItemSelectionRange) -> None: ... + def isEmpty(self) -> bool: ... + def clear(self) -> None: ... + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + @typing.overload + def __getitem__(self, i: int) -> QItemSelectionRange: ... + @typing.overload + def __getitem__(self, slice: slice) -> 'QItemSelection': ... + @typing.overload + def __delitem__(self, i: int) -> None: ... + @typing.overload + def __delitem__(self, slice: slice) -> None: ... + @typing.overload + def __setitem__(self, i: int, range: QItemSelectionRange) -> None: ... + @typing.overload + def __setitem__(self, slice: slice, list: 'QItemSelection') -> None: ... + @staticmethod + def split(range: QItemSelectionRange, other: QItemSelectionRange, result: typing.Optional['QItemSelection']) -> None: ... + def merge(self, other: 'QItemSelection', command: typing.Union[QItemSelectionModel.SelectionFlags, QItemSelectionModel.SelectionFlag]) -> None: ... + def indexes(self) -> typing.List[QModelIndex]: ... + def __contains__(self, index: QModelIndex) -> int: ... + def contains(self, index: QModelIndex) -> bool: ... + def select(self, topLeft: QModelIndex, bottomRight: QModelIndex) -> None: ... + + +class QJsonParseError(PyQt5.sipsimplewrapper): + + class ParseError(int): + NoError = ... # type: QJsonParseError.ParseError + UnterminatedObject = ... # type: QJsonParseError.ParseError + MissingNameSeparator = ... # type: QJsonParseError.ParseError + UnterminatedArray = ... # type: QJsonParseError.ParseError + MissingValueSeparator = ... # type: QJsonParseError.ParseError + IllegalValue = ... # type: QJsonParseError.ParseError + TerminationByNumber = ... # type: QJsonParseError.ParseError + IllegalNumber = ... # type: QJsonParseError.ParseError + IllegalEscapeSequence = ... # type: QJsonParseError.ParseError + IllegalUTF8String = ... # type: QJsonParseError.ParseError + UnterminatedString = ... # type: QJsonParseError.ParseError + MissingObject = ... # type: QJsonParseError.ParseError + DeepNesting = ... # type: QJsonParseError.ParseError + DocumentTooLarge = ... # type: QJsonParseError.ParseError + GarbageAtEnd = ... # type: QJsonParseError.ParseError + + error = ... # type: 'QJsonParseError.ParseError' + offset = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QJsonParseError') -> None: ... + + def errorString(self) -> str: ... + + +class QJsonDocument(PyQt5.sipsimplewrapper): + + class JsonFormat(int): + Indented = ... # type: QJsonDocument.JsonFormat + Compact = ... # type: QJsonDocument.JsonFormat + + class DataValidation(int): + Validate = ... # type: QJsonDocument.DataValidation + BypassValidation = ... # type: QJsonDocument.DataValidation + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, object: typing.Dict[typing.Optional[str], typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> None: ... + @typing.overload + def __init__(self, array: typing.Iterable[typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> None: ... + @typing.overload + def __init__(self, other: 'QJsonDocument') -> None: ... + + @typing.overload + def __getitem__(self, key: typing.Optional[str]) -> typing.Optional['QJsonValue']: ... + @typing.overload + def __getitem__(self, i: int) -> typing.Optional['QJsonValue']: ... + def swap(self, other: 'QJsonDocument') -> None: ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def setArray(self, array: typing.Iterable[typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> None: ... + def setObject(self, object: typing.Dict[typing.Optional[str], typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> None: ... + def array(self) -> typing.List['QJsonValue']: ... + def object(self) -> typing.Dict[str, 'QJsonValue']: ... + def isObject(self) -> bool: ... + def isArray(self) -> bool: ... + def isEmpty(self) -> bool: ... + @typing.overload + def toJson(self) -> QByteArray: ... + @typing.overload + def toJson(self, format: 'QJsonDocument.JsonFormat') -> QByteArray: ... + @staticmethod + def fromJson(json: typing.Union[QByteArray, bytes, bytearray], error: typing.Optional[QJsonParseError] = ...) -> 'QJsonDocument': ... + def toVariant(self) -> typing.Any: ... + @staticmethod + def fromVariant(variant: typing.Any) -> 'QJsonDocument': ... + def toBinaryData(self) -> QByteArray: ... + @staticmethod + def fromBinaryData(data: typing.Union[QByteArray, bytes, bytearray], validation: 'QJsonDocument.DataValidation' = ...) -> 'QJsonDocument': ... + def rawData(self) -> typing.Tuple[typing.Optional[bytes], typing.Optional[int]]: ... + @staticmethod + def fromRawData(data: typing.Optional[bytes], size: int, validation: 'QJsonDocument.DataValidation' = ...) -> 'QJsonDocument': ... + + +class QJsonValue(PyQt5.sipsimplewrapper): + + class Type(int): + Null = ... # type: QJsonValue.Type + Bool = ... # type: QJsonValue.Type + Double = ... # type: QJsonValue.Type + String = ... # type: QJsonValue.Type + Array = ... # type: QJsonValue.Type + Object = ... # type: QJsonValue.Type + Undefined = ... # type: QJsonValue.Type + + @typing.overload + def __init__(self, type: 'QJsonValue.Type' = ...) -> None: ... + @typing.overload + def __init__(self, other: typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]) -> None: ... + + def __hash__(self) -> int: ... + @typing.overload + def __getitem__(self, key: typing.Optional[str]) -> typing.Optional['QJsonValue']: ... + @typing.overload + def __getitem__(self, i: int) -> typing.Optional['QJsonValue']: ... + def swap(self, other: typing.Optional['QJsonValue']) -> None: ... + @typing.overload + def toString(self) -> str: ... + @typing.overload + def toString(self, defaultValue: typing.Optional[str]) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @typing.overload + def toObject(self) -> typing.Dict[str, 'QJsonValue']: ... + @typing.overload + def toObject(self, defaultValue: typing.Dict[typing.Optional[str], typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> typing.Dict[str, 'QJsonValue']: ... + @typing.overload + def toArray(self) -> typing.List['QJsonValue']: ... + @typing.overload + def toArray(self, defaultValue: typing.Iterable[typing.Union['QJsonValue', 'QJsonValue.Type', typing.Iterable['QJsonValue'], typing.Dict[typing.Optional[str], 'QJsonValue'], bool, int, float, None, typing.Optional[str]]]) -> typing.List['QJsonValue']: ... + def toDouble(self, defaultValue: float = ...) -> float: ... + def toInt(self, defaultValue: int = ...) -> int: ... + def toBool(self, defaultValue: bool = ...) -> bool: ... + def isUndefined(self) -> bool: ... + def isObject(self) -> bool: ... + def isArray(self) -> bool: ... + def isString(self) -> bool: ... + def isDouble(self) -> bool: ... + def isBool(self) -> bool: ... + def isNull(self) -> bool: ... + def type(self) -> 'QJsonValue.Type': ... + def toVariant(self) -> typing.Any: ... + @staticmethod + def fromVariant(variant: typing.Any) -> typing.Optional['QJsonValue']: ... + + +class QLibrary(QObject): + + class LoadHint(int): + ResolveAllSymbolsHint = ... # type: QLibrary.LoadHint + ExportExternalSymbolsHint = ... # type: QLibrary.LoadHint + LoadArchiveMemberHint = ... # type: QLibrary.LoadHint + PreventUnloadHint = ... # type: QLibrary.LoadHint + DeepBindHint = ... # type: QLibrary.LoadHint + + class LoadHints(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QLibrary.LoadHints', 'QLibrary.LoadHint']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QLibrary.LoadHints', 'QLibrary.LoadHint']) -> 'QLibrary.LoadHints': ... + def __xor__(self, f: typing.Union['QLibrary.LoadHints', 'QLibrary.LoadHint']) -> 'QLibrary.LoadHints': ... + def __ior__(self, f: typing.Union['QLibrary.LoadHints', 'QLibrary.LoadHint']) -> 'QLibrary.LoadHints': ... + def __or__(self, f: typing.Union['QLibrary.LoadHints', 'QLibrary.LoadHint']) -> 'QLibrary.LoadHints': ... + def __iand__(self, f: typing.Union['QLibrary.LoadHints', 'QLibrary.LoadHint']) -> 'QLibrary.LoadHints': ... + def __and__(self, f: typing.Union['QLibrary.LoadHints', 'QLibrary.LoadHint']) -> 'QLibrary.LoadHints': ... + def __invert__(self) -> 'QLibrary.LoadHints': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], verNum: int, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], version: typing.Optional[str], parent: typing.Optional[QObject] = ...) -> None: ... + + def setLoadHints(self, hints: typing.Union['QLibrary.LoadHints', 'QLibrary.LoadHint']) -> None: ... + @typing.overload + def setFileNameAndVersion(self, fileName: typing.Optional[str], verNum: int) -> None: ... + @typing.overload + def setFileNameAndVersion(self, fileName: typing.Optional[str], version: typing.Optional[str]) -> None: ... + def setFileName(self, fileName: typing.Optional[str]) -> None: ... + @staticmethod + def isLibrary(fileName: typing.Optional[str]) -> bool: ... + def unload(self) -> bool: ... + @typing.overload + def resolve(self, symbol: typing.Optional[str]) -> typing.Optional[PyQt5.sip.voidptr]: ... + @typing.overload + @staticmethod + def resolve(fileName: typing.Optional[str], symbol: typing.Optional[str]) -> typing.Optional[PyQt5.sip.voidptr]: ... + @typing.overload + @staticmethod + def resolve(fileName: typing.Optional[str], verNum: int, symbol: typing.Optional[str]) -> typing.Optional[PyQt5.sip.voidptr]: ... + @typing.overload + @staticmethod + def resolve(fileName: typing.Optional[str], version: typing.Optional[str], symbol: typing.Optional[str]) -> typing.Optional[PyQt5.sip.voidptr]: ... + def loadHints(self) -> 'QLibrary.LoadHints': ... + def load(self) -> bool: ... + def isLoaded(self) -> bool: ... + def fileName(self) -> str: ... + def errorString(self) -> str: ... + + +class QLibraryInfo(PyQt5.sipsimplewrapper): + + class LibraryLocation(int): + PrefixPath = ... # type: QLibraryInfo.LibraryLocation + DocumentationPath = ... # type: QLibraryInfo.LibraryLocation + HeadersPath = ... # type: QLibraryInfo.LibraryLocation + LibrariesPath = ... # type: QLibraryInfo.LibraryLocation + BinariesPath = ... # type: QLibraryInfo.LibraryLocation + PluginsPath = ... # type: QLibraryInfo.LibraryLocation + DataPath = ... # type: QLibraryInfo.LibraryLocation + TranslationsPath = ... # type: QLibraryInfo.LibraryLocation + SettingsPath = ... # type: QLibraryInfo.LibraryLocation + ExamplesPath = ... # type: QLibraryInfo.LibraryLocation + ImportsPath = ... # type: QLibraryInfo.LibraryLocation + TestsPath = ... # type: QLibraryInfo.LibraryLocation + LibraryExecutablesPath = ... # type: QLibraryInfo.LibraryLocation + Qml2ImportsPath = ... # type: QLibraryInfo.LibraryLocation + ArchDataPath = ... # type: QLibraryInfo.LibraryLocation + + def __init__(self, a0: 'QLibraryInfo') -> None: ... + + @staticmethod + def version() -> 'QVersionNumber': ... + @staticmethod + def isDebugBuild() -> bool: ... + @staticmethod + def buildDate() -> QDate: ... + @staticmethod + def location(a0: 'QLibraryInfo.LibraryLocation') -> str: ... + @staticmethod + def licensedProducts() -> str: ... + @staticmethod + def licensee() -> str: ... + + +class QLine(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pt1_: 'QPoint', pt2_: 'QPoint') -> None: ... + @typing.overload + def __init__(self, x1pos: int, y1pos: int, x2pos: int, y2pos: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QLine') -> None: ... + + def center(self) -> 'QPoint': ... + def setLine(self, aX1: int, aY1: int, aX2: int, aY2: int) -> None: ... + def setPoints(self, aP1: 'QPoint', aP2: 'QPoint') -> None: ... + def setP2(self, aP2: 'QPoint') -> None: ... + def setP1(self, aP1: 'QPoint') -> None: ... + @typing.overload + def translated(self, p: 'QPoint') -> 'QLine': ... + @typing.overload + def translated(self, adx: int, ady: int) -> 'QLine': ... + def __eq__(self, other: object): ... + @typing.overload + def translate(self, point: 'QPoint') -> None: ... + @typing.overload + def translate(self, adx: int, ady: int) -> None: ... + def dy(self) -> int: ... + def dx(self) -> int: ... + def p2(self) -> 'QPoint': ... + def p1(self) -> 'QPoint': ... + def y2(self) -> int: ... + def x2(self) -> int: ... + def y1(self) -> int: ... + def x1(self) -> int: ... + def __bool__(self) -> int: ... + def isNull(self) -> bool: ... + def __repr__(self) -> str: ... + def __ne__(self, other: object): ... + + +class QLineF(PyQt5.sipsimplewrapper): + + class IntersectType(int): + NoIntersection = ... # type: QLineF.IntersectType + BoundedIntersection = ... # type: QLineF.IntersectType + UnboundedIntersection = ... # type: QLineF.IntersectType + + @typing.overload + def __init__(self, line: QLine) -> None: ... + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, apt1: typing.Union['QPointF', 'QPoint'], apt2: typing.Union['QPointF', 'QPoint']) -> None: ... + @typing.overload + def __init__(self, x1pos: float, y1pos: float, x2pos: float, y2pos: float) -> None: ... + @typing.overload + def __init__(self, a0: 'QLineF') -> None: ... + + def center(self) -> 'QPointF': ... + def setLine(self, aX1: float, aY1: float, aX2: float, aY2: float) -> None: ... + def setPoints(self, aP1: typing.Union['QPointF', 'QPoint'], aP2: typing.Union['QPointF', 'QPoint']) -> None: ... + def setP2(self, aP2: typing.Union['QPointF', 'QPoint']) -> None: ... + def setP1(self, aP1: typing.Union['QPointF', 'QPoint']) -> None: ... + @typing.overload + def translated(self, p: typing.Union['QPointF', 'QPoint']) -> 'QLineF': ... + @typing.overload + def translated(self, adx: float, ady: float) -> 'QLineF': ... + def angleTo(self, l: 'QLineF') -> float: ... + def setAngle(self, angle: float) -> None: ... + def angle(self) -> float: ... + @staticmethod + def fromPolar(length: float, angle: float) -> 'QLineF': ... + def __eq__(self, other: object): ... + def toLine(self) -> QLine: ... + def pointAt(self, t: float) -> 'QPointF': ... + def setLength(self, len: float) -> None: ... + @typing.overload + def translate(self, point: typing.Union['QPointF', 'QPoint']) -> None: ... + @typing.overload + def translate(self, adx: float, ady: float) -> None: ... + def normalVector(self) -> 'QLineF': ... + def dy(self) -> float: ... + def dx(self) -> float: ... + def p2(self) -> 'QPointF': ... + def p1(self) -> 'QPointF': ... + def y2(self) -> float: ... + def x2(self) -> float: ... + def y1(self) -> float: ... + def x1(self) -> float: ... + def __repr__(self) -> str: ... + def __ne__(self, other: object): ... + def intersects(self, l: 'QLineF') -> typing.Tuple['QLineF.IntersectType', typing.Optional['QPointF']]: ... + def intersect(self, l: 'QLineF', intersectionPoint: typing.Optional[typing.Union['QPointF', 'QPoint']]) -> 'QLineF.IntersectType': ... + def unitVector(self) -> 'QLineF': ... + def length(self) -> float: ... + def __bool__(self) -> int: ... + def isNull(self) -> bool: ... + + +class QLocale(PyQt5.sipsimplewrapper): + + class DataSizeFormat(int): + DataSizeIecFormat = ... # type: QLocale.DataSizeFormat + DataSizeTraditionalFormat = ... # type: QLocale.DataSizeFormat + DataSizeSIFormat = ... # type: QLocale.DataSizeFormat + + class FloatingPointPrecisionOption(int): + FloatingPointShortest = ... # type: QLocale.FloatingPointPrecisionOption + + class QuotationStyle(int): + StandardQuotation = ... # type: QLocale.QuotationStyle + AlternateQuotation = ... # type: QLocale.QuotationStyle + + class CurrencySymbolFormat(int): + CurrencyIsoCode = ... # type: QLocale.CurrencySymbolFormat + CurrencySymbol = ... # type: QLocale.CurrencySymbolFormat + CurrencyDisplayName = ... # type: QLocale.CurrencySymbolFormat + + class Script(int): + AnyScript = ... # type: QLocale.Script + ArabicScript = ... # type: QLocale.Script + CyrillicScript = ... # type: QLocale.Script + DeseretScript = ... # type: QLocale.Script + GurmukhiScript = ... # type: QLocale.Script + SimplifiedHanScript = ... # type: QLocale.Script + TraditionalHanScript = ... # type: QLocale.Script + LatinScript = ... # type: QLocale.Script + MongolianScript = ... # type: QLocale.Script + TifinaghScript = ... # type: QLocale.Script + SimplifiedChineseScript = ... # type: QLocale.Script + TraditionalChineseScript = ... # type: QLocale.Script + ArmenianScript = ... # type: QLocale.Script + BengaliScript = ... # type: QLocale.Script + CherokeeScript = ... # type: QLocale.Script + DevanagariScript = ... # type: QLocale.Script + EthiopicScript = ... # type: QLocale.Script + GeorgianScript = ... # type: QLocale.Script + GreekScript = ... # type: QLocale.Script + GujaratiScript = ... # type: QLocale.Script + HebrewScript = ... # type: QLocale.Script + JapaneseScript = ... # type: QLocale.Script + KhmerScript = ... # type: QLocale.Script + KannadaScript = ... # type: QLocale.Script + KoreanScript = ... # type: QLocale.Script + LaoScript = ... # type: QLocale.Script + MalayalamScript = ... # type: QLocale.Script + MyanmarScript = ... # type: QLocale.Script + OriyaScript = ... # type: QLocale.Script + TamilScript = ... # type: QLocale.Script + TeluguScript = ... # type: QLocale.Script + ThaanaScript = ... # type: QLocale.Script + ThaiScript = ... # type: QLocale.Script + TibetanScript = ... # type: QLocale.Script + SinhalaScript = ... # type: QLocale.Script + SyriacScript = ... # type: QLocale.Script + YiScript = ... # type: QLocale.Script + VaiScript = ... # type: QLocale.Script + AvestanScript = ... # type: QLocale.Script + BalineseScript = ... # type: QLocale.Script + BamumScript = ... # type: QLocale.Script + BatakScript = ... # type: QLocale.Script + BopomofoScript = ... # type: QLocale.Script + BrahmiScript = ... # type: QLocale.Script + BugineseScript = ... # type: QLocale.Script + BuhidScript = ... # type: QLocale.Script + CanadianAboriginalScript = ... # type: QLocale.Script + CarianScript = ... # type: QLocale.Script + ChakmaScript = ... # type: QLocale.Script + ChamScript = ... # type: QLocale.Script + CopticScript = ... # type: QLocale.Script + CypriotScript = ... # type: QLocale.Script + EgyptianHieroglyphsScript = ... # type: QLocale.Script + FraserScript = ... # type: QLocale.Script + GlagoliticScript = ... # type: QLocale.Script + GothicScript = ... # type: QLocale.Script + HanScript = ... # type: QLocale.Script + HangulScript = ... # type: QLocale.Script + HanunooScript = ... # type: QLocale.Script + ImperialAramaicScript = ... # type: QLocale.Script + InscriptionalPahlaviScript = ... # type: QLocale.Script + InscriptionalParthianScript = ... # type: QLocale.Script + JavaneseScript = ... # type: QLocale.Script + KaithiScript = ... # type: QLocale.Script + KatakanaScript = ... # type: QLocale.Script + KayahLiScript = ... # type: QLocale.Script + KharoshthiScript = ... # type: QLocale.Script + LannaScript = ... # type: QLocale.Script + LepchaScript = ... # type: QLocale.Script + LimbuScript = ... # type: QLocale.Script + LinearBScript = ... # type: QLocale.Script + LycianScript = ... # type: QLocale.Script + LydianScript = ... # type: QLocale.Script + MandaeanScript = ... # type: QLocale.Script + MeiteiMayekScript = ... # type: QLocale.Script + MeroiticScript = ... # type: QLocale.Script + MeroiticCursiveScript = ... # type: QLocale.Script + NkoScript = ... # type: QLocale.Script + NewTaiLueScript = ... # type: QLocale.Script + OghamScript = ... # type: QLocale.Script + OlChikiScript = ... # type: QLocale.Script + OldItalicScript = ... # type: QLocale.Script + OldPersianScript = ... # type: QLocale.Script + OldSouthArabianScript = ... # type: QLocale.Script + OrkhonScript = ... # type: QLocale.Script + OsmanyaScript = ... # type: QLocale.Script + PhagsPaScript = ... # type: QLocale.Script + PhoenicianScript = ... # type: QLocale.Script + PollardPhoneticScript = ... # type: QLocale.Script + RejangScript = ... # type: QLocale.Script + RunicScript = ... # type: QLocale.Script + SamaritanScript = ... # type: QLocale.Script + SaurashtraScript = ... # type: QLocale.Script + SharadaScript = ... # type: QLocale.Script + ShavianScript = ... # type: QLocale.Script + SoraSompengScript = ... # type: QLocale.Script + CuneiformScript = ... # type: QLocale.Script + SundaneseScript = ... # type: QLocale.Script + SylotiNagriScript = ... # type: QLocale.Script + TagalogScript = ... # type: QLocale.Script + TagbanwaScript = ... # type: QLocale.Script + TaiLeScript = ... # type: QLocale.Script + TaiVietScript = ... # type: QLocale.Script + TakriScript = ... # type: QLocale.Script + UgariticScript = ... # type: QLocale.Script + BrailleScript = ... # type: QLocale.Script + HiraganaScript = ... # type: QLocale.Script + CaucasianAlbanianScript = ... # type: QLocale.Script + BassaVahScript = ... # type: QLocale.Script + DuployanScript = ... # type: QLocale.Script + ElbasanScript = ... # type: QLocale.Script + GranthaScript = ... # type: QLocale.Script + PahawhHmongScript = ... # type: QLocale.Script + KhojkiScript = ... # type: QLocale.Script + LinearAScript = ... # type: QLocale.Script + MahajaniScript = ... # type: QLocale.Script + ManichaeanScript = ... # type: QLocale.Script + MendeKikakuiScript = ... # type: QLocale.Script + ModiScript = ... # type: QLocale.Script + MroScript = ... # type: QLocale.Script + OldNorthArabianScript = ... # type: QLocale.Script + NabataeanScript = ... # type: QLocale.Script + PalmyreneScript = ... # type: QLocale.Script + PauCinHauScript = ... # type: QLocale.Script + OldPermicScript = ... # type: QLocale.Script + PsalterPahlaviScript = ... # type: QLocale.Script + SiddhamScript = ... # type: QLocale.Script + KhudawadiScript = ... # type: QLocale.Script + TirhutaScript = ... # type: QLocale.Script + VarangKshitiScript = ... # type: QLocale.Script + AhomScript = ... # type: QLocale.Script + AnatolianHieroglyphsScript = ... # type: QLocale.Script + HatranScript = ... # type: QLocale.Script + MultaniScript = ... # type: QLocale.Script + OldHungarianScript = ... # type: QLocale.Script + SignWritingScript = ... # type: QLocale.Script + AdlamScript = ... # type: QLocale.Script + BhaiksukiScript = ... # type: QLocale.Script + MarchenScript = ... # type: QLocale.Script + NewaScript = ... # type: QLocale.Script + OsageScript = ... # type: QLocale.Script + TangutScript = ... # type: QLocale.Script + HanWithBopomofoScript = ... # type: QLocale.Script + JamoScript = ... # type: QLocale.Script + + class MeasurementSystem(int): + MetricSystem = ... # type: QLocale.MeasurementSystem + ImperialSystem = ... # type: QLocale.MeasurementSystem + ImperialUSSystem = ... # type: QLocale.MeasurementSystem + ImperialUKSystem = ... # type: QLocale.MeasurementSystem + + class FormatType(int): + LongFormat = ... # type: QLocale.FormatType + ShortFormat = ... # type: QLocale.FormatType + NarrowFormat = ... # type: QLocale.FormatType + + class NumberOption(int): + OmitGroupSeparator = ... # type: QLocale.NumberOption + RejectGroupSeparator = ... # type: QLocale.NumberOption + DefaultNumberOptions = ... # type: QLocale.NumberOption + OmitLeadingZeroInExponent = ... # type: QLocale.NumberOption + RejectLeadingZeroInExponent = ... # type: QLocale.NumberOption + IncludeTrailingZeroesAfterDot = ... # type: QLocale.NumberOption + RejectTrailingZeroesAfterDot = ... # type: QLocale.NumberOption + + class Country(int): + AnyCountry = ... # type: QLocale.Country + Afghanistan = ... # type: QLocale.Country + Albania = ... # type: QLocale.Country + Algeria = ... # type: QLocale.Country + AmericanSamoa = ... # type: QLocale.Country + Andorra = ... # type: QLocale.Country + Angola = ... # type: QLocale.Country + Anguilla = ... # type: QLocale.Country + Antarctica = ... # type: QLocale.Country + AntiguaAndBarbuda = ... # type: QLocale.Country + Argentina = ... # type: QLocale.Country + Armenia = ... # type: QLocale.Country + Aruba = ... # type: QLocale.Country + Australia = ... # type: QLocale.Country + Austria = ... # type: QLocale.Country + Azerbaijan = ... # type: QLocale.Country + Bahamas = ... # type: QLocale.Country + Bahrain = ... # type: QLocale.Country + Bangladesh = ... # type: QLocale.Country + Barbados = ... # type: QLocale.Country + Belarus = ... # type: QLocale.Country + Belgium = ... # type: QLocale.Country + Belize = ... # type: QLocale.Country + Benin = ... # type: QLocale.Country + Bermuda = ... # type: QLocale.Country + Bhutan = ... # type: QLocale.Country + Bolivia = ... # type: QLocale.Country + BosniaAndHerzegowina = ... # type: QLocale.Country + Botswana = ... # type: QLocale.Country + BouvetIsland = ... # type: QLocale.Country + Brazil = ... # type: QLocale.Country + BritishIndianOceanTerritory = ... # type: QLocale.Country + Bulgaria = ... # type: QLocale.Country + BurkinaFaso = ... # type: QLocale.Country + Burundi = ... # type: QLocale.Country + Cambodia = ... # type: QLocale.Country + Cameroon = ... # type: QLocale.Country + Canada = ... # type: QLocale.Country + CapeVerde = ... # type: QLocale.Country + CaymanIslands = ... # type: QLocale.Country + CentralAfricanRepublic = ... # type: QLocale.Country + Chad = ... # type: QLocale.Country + Chile = ... # type: QLocale.Country + China = ... # type: QLocale.Country + ChristmasIsland = ... # type: QLocale.Country + CocosIslands = ... # type: QLocale.Country + Colombia = ... # type: QLocale.Country + Comoros = ... # type: QLocale.Country + DemocraticRepublicOfCongo = ... # type: QLocale.Country + PeoplesRepublicOfCongo = ... # type: QLocale.Country + CookIslands = ... # type: QLocale.Country + CostaRica = ... # type: QLocale.Country + IvoryCoast = ... # type: QLocale.Country + Croatia = ... # type: QLocale.Country + Cuba = ... # type: QLocale.Country + Cyprus = ... # type: QLocale.Country + CzechRepublic = ... # type: QLocale.Country + Denmark = ... # type: QLocale.Country + Djibouti = ... # type: QLocale.Country + Dominica = ... # type: QLocale.Country + DominicanRepublic = ... # type: QLocale.Country + EastTimor = ... # type: QLocale.Country + Ecuador = ... # type: QLocale.Country + Egypt = ... # type: QLocale.Country + ElSalvador = ... # type: QLocale.Country + EquatorialGuinea = ... # type: QLocale.Country + Eritrea = ... # type: QLocale.Country + Estonia = ... # type: QLocale.Country + Ethiopia = ... # type: QLocale.Country + FalklandIslands = ... # type: QLocale.Country + FaroeIslands = ... # type: QLocale.Country + Finland = ... # type: QLocale.Country + France = ... # type: QLocale.Country + FrenchGuiana = ... # type: QLocale.Country + FrenchPolynesia = ... # type: QLocale.Country + FrenchSouthernTerritories = ... # type: QLocale.Country + Gabon = ... # type: QLocale.Country + Gambia = ... # type: QLocale.Country + Georgia = ... # type: QLocale.Country + Germany = ... # type: QLocale.Country + Ghana = ... # type: QLocale.Country + Gibraltar = ... # type: QLocale.Country + Greece = ... # type: QLocale.Country + Greenland = ... # type: QLocale.Country + Grenada = ... # type: QLocale.Country + Guadeloupe = ... # type: QLocale.Country + Guam = ... # type: QLocale.Country + Guatemala = ... # type: QLocale.Country + Guinea = ... # type: QLocale.Country + GuineaBissau = ... # type: QLocale.Country + Guyana = ... # type: QLocale.Country + Haiti = ... # type: QLocale.Country + HeardAndMcDonaldIslands = ... # type: QLocale.Country + Honduras = ... # type: QLocale.Country + HongKong = ... # type: QLocale.Country + Hungary = ... # type: QLocale.Country + Iceland = ... # type: QLocale.Country + India = ... # type: QLocale.Country + Indonesia = ... # type: QLocale.Country + Iran = ... # type: QLocale.Country + Iraq = ... # type: QLocale.Country + Ireland = ... # type: QLocale.Country + Israel = ... # type: QLocale.Country + Italy = ... # type: QLocale.Country + Jamaica = ... # type: QLocale.Country + Japan = ... # type: QLocale.Country + Jordan = ... # type: QLocale.Country + Kazakhstan = ... # type: QLocale.Country + Kenya = ... # type: QLocale.Country + Kiribati = ... # type: QLocale.Country + DemocraticRepublicOfKorea = ... # type: QLocale.Country + RepublicOfKorea = ... # type: QLocale.Country + Kuwait = ... # type: QLocale.Country + Kyrgyzstan = ... # type: QLocale.Country + Latvia = ... # type: QLocale.Country + Lebanon = ... # type: QLocale.Country + Lesotho = ... # type: QLocale.Country + Liberia = ... # type: QLocale.Country + Liechtenstein = ... # type: QLocale.Country + Lithuania = ... # type: QLocale.Country + Luxembourg = ... # type: QLocale.Country + Macau = ... # type: QLocale.Country + Macedonia = ... # type: QLocale.Country + Madagascar = ... # type: QLocale.Country + Malawi = ... # type: QLocale.Country + Malaysia = ... # type: QLocale.Country + Maldives = ... # type: QLocale.Country + Mali = ... # type: QLocale.Country + Malta = ... # type: QLocale.Country + MarshallIslands = ... # type: QLocale.Country + Martinique = ... # type: QLocale.Country + Mauritania = ... # type: QLocale.Country + Mauritius = ... # type: QLocale.Country + Mayotte = ... # type: QLocale.Country + Mexico = ... # type: QLocale.Country + Micronesia = ... # type: QLocale.Country + Moldova = ... # type: QLocale.Country + Monaco = ... # type: QLocale.Country + Mongolia = ... # type: QLocale.Country + Montserrat = ... # type: QLocale.Country + Morocco = ... # type: QLocale.Country + Mozambique = ... # type: QLocale.Country + Myanmar = ... # type: QLocale.Country + Namibia = ... # type: QLocale.Country + NauruCountry = ... # type: QLocale.Country + Nepal = ... # type: QLocale.Country + Netherlands = ... # type: QLocale.Country + NewCaledonia = ... # type: QLocale.Country + NewZealand = ... # type: QLocale.Country + Nicaragua = ... # type: QLocale.Country + Niger = ... # type: QLocale.Country + Nigeria = ... # type: QLocale.Country + Niue = ... # type: QLocale.Country + NorfolkIsland = ... # type: QLocale.Country + NorthernMarianaIslands = ... # type: QLocale.Country + Norway = ... # type: QLocale.Country + Oman = ... # type: QLocale.Country + Pakistan = ... # type: QLocale.Country + Palau = ... # type: QLocale.Country + Panama = ... # type: QLocale.Country + PapuaNewGuinea = ... # type: QLocale.Country + Paraguay = ... # type: QLocale.Country + Peru = ... # type: QLocale.Country + Philippines = ... # type: QLocale.Country + Pitcairn = ... # type: QLocale.Country + Poland = ... # type: QLocale.Country + Portugal = ... # type: QLocale.Country + PuertoRico = ... # type: QLocale.Country + Qatar = ... # type: QLocale.Country + Reunion = ... # type: QLocale.Country + Romania = ... # type: QLocale.Country + RussianFederation = ... # type: QLocale.Country + Rwanda = ... # type: QLocale.Country + SaintKittsAndNevis = ... # type: QLocale.Country + Samoa = ... # type: QLocale.Country + SanMarino = ... # type: QLocale.Country + SaoTomeAndPrincipe = ... # type: QLocale.Country + SaudiArabia = ... # type: QLocale.Country + Senegal = ... # type: QLocale.Country + Seychelles = ... # type: QLocale.Country + SierraLeone = ... # type: QLocale.Country + Singapore = ... # type: QLocale.Country + Slovakia = ... # type: QLocale.Country + Slovenia = ... # type: QLocale.Country + SolomonIslands = ... # type: QLocale.Country + Somalia = ... # type: QLocale.Country + SouthAfrica = ... # type: QLocale.Country + SouthGeorgiaAndTheSouthSandwichIslands = ... # type: QLocale.Country + Spain = ... # type: QLocale.Country + SriLanka = ... # type: QLocale.Country + Sudan = ... # type: QLocale.Country + Suriname = ... # type: QLocale.Country + SvalbardAndJanMayenIslands = ... # type: QLocale.Country + Swaziland = ... # type: QLocale.Country + Sweden = ... # type: QLocale.Country + Switzerland = ... # type: QLocale.Country + SyrianArabRepublic = ... # type: QLocale.Country + Taiwan = ... # type: QLocale.Country + Tajikistan = ... # type: QLocale.Country + Tanzania = ... # type: QLocale.Country + Thailand = ... # type: QLocale.Country + Togo = ... # type: QLocale.Country + Tokelau = ... # type: QLocale.Country + TrinidadAndTobago = ... # type: QLocale.Country + Tunisia = ... # type: QLocale.Country + Turkey = ... # type: QLocale.Country + Turkmenistan = ... # type: QLocale.Country + TurksAndCaicosIslands = ... # type: QLocale.Country + Tuvalu = ... # type: QLocale.Country + Uganda = ... # type: QLocale.Country + Ukraine = ... # type: QLocale.Country + UnitedArabEmirates = ... # type: QLocale.Country + UnitedKingdom = ... # type: QLocale.Country + UnitedStates = ... # type: QLocale.Country + UnitedStatesMinorOutlyingIslands = ... # type: QLocale.Country + Uruguay = ... # type: QLocale.Country + Uzbekistan = ... # type: QLocale.Country + Vanuatu = ... # type: QLocale.Country + VaticanCityState = ... # type: QLocale.Country + Venezuela = ... # type: QLocale.Country + BritishVirginIslands = ... # type: QLocale.Country + WallisAndFutunaIslands = ... # type: QLocale.Country + WesternSahara = ... # type: QLocale.Country + Yemen = ... # type: QLocale.Country + Zambia = ... # type: QLocale.Country + Zimbabwe = ... # type: QLocale.Country + Montenegro = ... # type: QLocale.Country + Serbia = ... # type: QLocale.Country + SaintBarthelemy = ... # type: QLocale.Country + SaintMartin = ... # type: QLocale.Country + LatinAmericaAndTheCaribbean = ... # type: QLocale.Country + LastCountry = ... # type: QLocale.Country + Brunei = ... # type: QLocale.Country + CongoKinshasa = ... # type: QLocale.Country + CongoBrazzaville = ... # type: QLocale.Country + Fiji = ... # type: QLocale.Country + Guernsey = ... # type: QLocale.Country + NorthKorea = ... # type: QLocale.Country + SouthKorea = ... # type: QLocale.Country + Laos = ... # type: QLocale.Country + Libya = ... # type: QLocale.Country + CuraSao = ... # type: QLocale.Country + PalestinianTerritories = ... # type: QLocale.Country + Russia = ... # type: QLocale.Country + SaintLucia = ... # type: QLocale.Country + SaintVincentAndTheGrenadines = ... # type: QLocale.Country + SaintHelena = ... # type: QLocale.Country + SaintPierreAndMiquelon = ... # type: QLocale.Country + Syria = ... # type: QLocale.Country + Tonga = ... # type: QLocale.Country + Vietnam = ... # type: QLocale.Country + UnitedStatesVirginIslands = ... # type: QLocale.Country + CanaryIslands = ... # type: QLocale.Country + ClippertonIsland = ... # type: QLocale.Country + AscensionIsland = ... # type: QLocale.Country + AlandIslands = ... # type: QLocale.Country + DiegoGarcia = ... # type: QLocale.Country + CeutaAndMelilla = ... # type: QLocale.Country + IsleOfMan = ... # type: QLocale.Country + Jersey = ... # type: QLocale.Country + TristanDaCunha = ... # type: QLocale.Country + SouthSudan = ... # type: QLocale.Country + Bonaire = ... # type: QLocale.Country + SintMaarten = ... # type: QLocale.Country + Kosovo = ... # type: QLocale.Country + TokelauCountry = ... # type: QLocale.Country + TuvaluCountry = ... # type: QLocale.Country + EuropeanUnion = ... # type: QLocale.Country + OutlyingOceania = ... # type: QLocale.Country + LatinAmerica = ... # type: QLocale.Country + World = ... # type: QLocale.Country + Europe = ... # type: QLocale.Country + + class Language(int): + C = ... # type: QLocale.Language + Abkhazian = ... # type: QLocale.Language + Afan = ... # type: QLocale.Language + Afar = ... # type: QLocale.Language + Afrikaans = ... # type: QLocale.Language + Albanian = ... # type: QLocale.Language + Amharic = ... # type: QLocale.Language + Arabic = ... # type: QLocale.Language + Armenian = ... # type: QLocale.Language + Assamese = ... # type: QLocale.Language + Aymara = ... # type: QLocale.Language + Azerbaijani = ... # type: QLocale.Language + Bashkir = ... # type: QLocale.Language + Basque = ... # type: QLocale.Language + Bengali = ... # type: QLocale.Language + Bhutani = ... # type: QLocale.Language + Bihari = ... # type: QLocale.Language + Bislama = ... # type: QLocale.Language + Breton = ... # type: QLocale.Language + Bulgarian = ... # type: QLocale.Language + Burmese = ... # type: QLocale.Language + Byelorussian = ... # type: QLocale.Language + Cambodian = ... # type: QLocale.Language + Catalan = ... # type: QLocale.Language + Chinese = ... # type: QLocale.Language + Corsican = ... # type: QLocale.Language + Croatian = ... # type: QLocale.Language + Czech = ... # type: QLocale.Language + Danish = ... # type: QLocale.Language + Dutch = ... # type: QLocale.Language + English = ... # type: QLocale.Language + Esperanto = ... # type: QLocale.Language + Estonian = ... # type: QLocale.Language + Faroese = ... # type: QLocale.Language + Finnish = ... # type: QLocale.Language + French = ... # type: QLocale.Language + Frisian = ... # type: QLocale.Language + Gaelic = ... # type: QLocale.Language + Galician = ... # type: QLocale.Language + Georgian = ... # type: QLocale.Language + German = ... # type: QLocale.Language + Greek = ... # type: QLocale.Language + Greenlandic = ... # type: QLocale.Language + Guarani = ... # type: QLocale.Language + Gujarati = ... # type: QLocale.Language + Hausa = ... # type: QLocale.Language + Hebrew = ... # type: QLocale.Language + Hindi = ... # type: QLocale.Language + Hungarian = ... # type: QLocale.Language + Icelandic = ... # type: QLocale.Language + Indonesian = ... # type: QLocale.Language + Interlingua = ... # type: QLocale.Language + Interlingue = ... # type: QLocale.Language + Inuktitut = ... # type: QLocale.Language + Inupiak = ... # type: QLocale.Language + Irish = ... # type: QLocale.Language + Italian = ... # type: QLocale.Language + Japanese = ... # type: QLocale.Language + Javanese = ... # type: QLocale.Language + Kannada = ... # type: QLocale.Language + Kashmiri = ... # type: QLocale.Language + Kazakh = ... # type: QLocale.Language + Kinyarwanda = ... # type: QLocale.Language + Kirghiz = ... # type: QLocale.Language + Korean = ... # type: QLocale.Language + Kurdish = ... # type: QLocale.Language + Kurundi = ... # type: QLocale.Language + Latin = ... # type: QLocale.Language + Latvian = ... # type: QLocale.Language + Lingala = ... # type: QLocale.Language + Lithuanian = ... # type: QLocale.Language + Macedonian = ... # type: QLocale.Language + Malagasy = ... # type: QLocale.Language + Malay = ... # type: QLocale.Language + Malayalam = ... # type: QLocale.Language + Maltese = ... # type: QLocale.Language + Maori = ... # type: QLocale.Language + Marathi = ... # type: QLocale.Language + Moldavian = ... # type: QLocale.Language + Mongolian = ... # type: QLocale.Language + NauruLanguage = ... # type: QLocale.Language + Nepali = ... # type: QLocale.Language + Norwegian = ... # type: QLocale.Language + Occitan = ... # type: QLocale.Language + Oriya = ... # type: QLocale.Language + Pashto = ... # type: QLocale.Language + Persian = ... # type: QLocale.Language + Polish = ... # type: QLocale.Language + Portuguese = ... # type: QLocale.Language + Punjabi = ... # type: QLocale.Language + Quechua = ... # type: QLocale.Language + RhaetoRomance = ... # type: QLocale.Language + Romanian = ... # type: QLocale.Language + Russian = ... # type: QLocale.Language + Samoan = ... # type: QLocale.Language + Sanskrit = ... # type: QLocale.Language + Serbian = ... # type: QLocale.Language + SerboCroatian = ... # type: QLocale.Language + Shona = ... # type: QLocale.Language + Sindhi = ... # type: QLocale.Language + Slovak = ... # type: QLocale.Language + Slovenian = ... # type: QLocale.Language + Somali = ... # type: QLocale.Language + Spanish = ... # type: QLocale.Language + Sundanese = ... # type: QLocale.Language + Swahili = ... # type: QLocale.Language + Swedish = ... # type: QLocale.Language + Tagalog = ... # type: QLocale.Language + Tajik = ... # type: QLocale.Language + Tamil = ... # type: QLocale.Language + Tatar = ... # type: QLocale.Language + Telugu = ... # type: QLocale.Language + Thai = ... # type: QLocale.Language + Tibetan = ... # type: QLocale.Language + Tigrinya = ... # type: QLocale.Language + Tsonga = ... # type: QLocale.Language + Turkish = ... # type: QLocale.Language + Turkmen = ... # type: QLocale.Language + Twi = ... # type: QLocale.Language + Uigur = ... # type: QLocale.Language + Ukrainian = ... # type: QLocale.Language + Urdu = ... # type: QLocale.Language + Uzbek = ... # type: QLocale.Language + Vietnamese = ... # type: QLocale.Language + Volapuk = ... # type: QLocale.Language + Welsh = ... # type: QLocale.Language + Wolof = ... # type: QLocale.Language + Xhosa = ... # type: QLocale.Language + Yiddish = ... # type: QLocale.Language + Yoruba = ... # type: QLocale.Language + Zhuang = ... # type: QLocale.Language + Zulu = ... # type: QLocale.Language + Bosnian = ... # type: QLocale.Language + Divehi = ... # type: QLocale.Language + Manx = ... # type: QLocale.Language + Cornish = ... # type: QLocale.Language + LastLanguage = ... # type: QLocale.Language + NorwegianBokmal = ... # type: QLocale.Language + NorwegianNynorsk = ... # type: QLocale.Language + Akan = ... # type: QLocale.Language + Konkani = ... # type: QLocale.Language + Ga = ... # type: QLocale.Language + Igbo = ... # type: QLocale.Language + Kamba = ... # type: QLocale.Language + Syriac = ... # type: QLocale.Language + Blin = ... # type: QLocale.Language + Geez = ... # type: QLocale.Language + Koro = ... # type: QLocale.Language + Sidamo = ... # type: QLocale.Language + Atsam = ... # type: QLocale.Language + Tigre = ... # type: QLocale.Language + Jju = ... # type: QLocale.Language + Friulian = ... # type: QLocale.Language + Venda = ... # type: QLocale.Language + Ewe = ... # type: QLocale.Language + Walamo = ... # type: QLocale.Language + Hawaiian = ... # type: QLocale.Language + Tyap = ... # type: QLocale.Language + Chewa = ... # type: QLocale.Language + Filipino = ... # type: QLocale.Language + SwissGerman = ... # type: QLocale.Language + SichuanYi = ... # type: QLocale.Language + Kpelle = ... # type: QLocale.Language + LowGerman = ... # type: QLocale.Language + SouthNdebele = ... # type: QLocale.Language + NorthernSotho = ... # type: QLocale.Language + NorthernSami = ... # type: QLocale.Language + Taroko = ... # type: QLocale.Language + Gusii = ... # type: QLocale.Language + Taita = ... # type: QLocale.Language + Fulah = ... # type: QLocale.Language + Kikuyu = ... # type: QLocale.Language + Samburu = ... # type: QLocale.Language + Sena = ... # type: QLocale.Language + NorthNdebele = ... # type: QLocale.Language + Rombo = ... # type: QLocale.Language + Tachelhit = ... # type: QLocale.Language + Kabyle = ... # type: QLocale.Language + Nyankole = ... # type: QLocale.Language + Bena = ... # type: QLocale.Language + Vunjo = ... # type: QLocale.Language + Bambara = ... # type: QLocale.Language + Embu = ... # type: QLocale.Language + Cherokee = ... # type: QLocale.Language + Morisyen = ... # type: QLocale.Language + Makonde = ... # type: QLocale.Language + Langi = ... # type: QLocale.Language + Ganda = ... # type: QLocale.Language + Bemba = ... # type: QLocale.Language + Kabuverdianu = ... # type: QLocale.Language + Meru = ... # type: QLocale.Language + Kalenjin = ... # type: QLocale.Language + Nama = ... # type: QLocale.Language + Machame = ... # type: QLocale.Language + Colognian = ... # type: QLocale.Language + Masai = ... # type: QLocale.Language + Soga = ... # type: QLocale.Language + Luyia = ... # type: QLocale.Language + Asu = ... # type: QLocale.Language + Teso = ... # type: QLocale.Language + Saho = ... # type: QLocale.Language + KoyraChiini = ... # type: QLocale.Language + Rwa = ... # type: QLocale.Language + Luo = ... # type: QLocale.Language + Chiga = ... # type: QLocale.Language + CentralMoroccoTamazight = ... # type: QLocale.Language + KoyraboroSenni = ... # type: QLocale.Language + Shambala = ... # type: QLocale.Language + AnyLanguage = ... # type: QLocale.Language + Rundi = ... # type: QLocale.Language + Bodo = ... # type: QLocale.Language + Aghem = ... # type: QLocale.Language + Basaa = ... # type: QLocale.Language + Zarma = ... # type: QLocale.Language + Duala = ... # type: QLocale.Language + JolaFonyi = ... # type: QLocale.Language + Ewondo = ... # type: QLocale.Language + Bafia = ... # type: QLocale.Language + LubaKatanga = ... # type: QLocale.Language + MakhuwaMeetto = ... # type: QLocale.Language + Mundang = ... # type: QLocale.Language + Kwasio = ... # type: QLocale.Language + Nuer = ... # type: QLocale.Language + Sakha = ... # type: QLocale.Language + Sangu = ... # type: QLocale.Language + CongoSwahili = ... # type: QLocale.Language + Tasawaq = ... # type: QLocale.Language + Vai = ... # type: QLocale.Language + Walser = ... # type: QLocale.Language + Yangben = ... # type: QLocale.Language + Oromo = ... # type: QLocale.Language + Dzongkha = ... # type: QLocale.Language + Belarusian = ... # type: QLocale.Language + Khmer = ... # type: QLocale.Language + Fijian = ... # type: QLocale.Language + WesternFrisian = ... # type: QLocale.Language + Lao = ... # type: QLocale.Language + Marshallese = ... # type: QLocale.Language + Romansh = ... # type: QLocale.Language + Sango = ... # type: QLocale.Language + Ossetic = ... # type: QLocale.Language + SouthernSotho = ... # type: QLocale.Language + Tswana = ... # type: QLocale.Language + Sinhala = ... # type: QLocale.Language + Swati = ... # type: QLocale.Language + Sardinian = ... # type: QLocale.Language + Tongan = ... # type: QLocale.Language + Tahitian = ... # type: QLocale.Language + Nyanja = ... # type: QLocale.Language + Avaric = ... # type: QLocale.Language + Chamorro = ... # type: QLocale.Language + Chechen = ... # type: QLocale.Language + Church = ... # type: QLocale.Language + Chuvash = ... # type: QLocale.Language + Cree = ... # type: QLocale.Language + Haitian = ... # type: QLocale.Language + Herero = ... # type: QLocale.Language + HiriMotu = ... # type: QLocale.Language + Kanuri = ... # type: QLocale.Language + Komi = ... # type: QLocale.Language + Kongo = ... # type: QLocale.Language + Kwanyama = ... # type: QLocale.Language + Limburgish = ... # type: QLocale.Language + Luxembourgish = ... # type: QLocale.Language + Navaho = ... # type: QLocale.Language + Ndonga = ... # type: QLocale.Language + Ojibwa = ... # type: QLocale.Language + Pali = ... # type: QLocale.Language + Walloon = ... # type: QLocale.Language + Avestan = ... # type: QLocale.Language + Asturian = ... # type: QLocale.Language + Ngomba = ... # type: QLocale.Language + Kako = ... # type: QLocale.Language + Meta = ... # type: QLocale.Language + Ngiemboon = ... # type: QLocale.Language + Uighur = ... # type: QLocale.Language + Aragonese = ... # type: QLocale.Language + Akkadian = ... # type: QLocale.Language + AncientEgyptian = ... # type: QLocale.Language + AncientGreek = ... # type: QLocale.Language + Aramaic = ... # type: QLocale.Language + Balinese = ... # type: QLocale.Language + Bamun = ... # type: QLocale.Language + BatakToba = ... # type: QLocale.Language + Buginese = ... # type: QLocale.Language + Buhid = ... # type: QLocale.Language + Carian = ... # type: QLocale.Language + Chakma = ... # type: QLocale.Language + ClassicalMandaic = ... # type: QLocale.Language + Coptic = ... # type: QLocale.Language + Dogri = ... # type: QLocale.Language + EasternCham = ... # type: QLocale.Language + EasternKayah = ... # type: QLocale.Language + Etruscan = ... # type: QLocale.Language + Gothic = ... # type: QLocale.Language + Hanunoo = ... # type: QLocale.Language + Ingush = ... # type: QLocale.Language + LargeFloweryMiao = ... # type: QLocale.Language + Lepcha = ... # type: QLocale.Language + Limbu = ... # type: QLocale.Language + Lisu = ... # type: QLocale.Language + Lu = ... # type: QLocale.Language + Lycian = ... # type: QLocale.Language + Lydian = ... # type: QLocale.Language + Mandingo = ... # type: QLocale.Language + Manipuri = ... # type: QLocale.Language + Meroitic = ... # type: QLocale.Language + NorthernThai = ... # type: QLocale.Language + OldIrish = ... # type: QLocale.Language + OldNorse = ... # type: QLocale.Language + OldPersian = ... # type: QLocale.Language + OldTurkish = ... # type: QLocale.Language + Pahlavi = ... # type: QLocale.Language + Parthian = ... # type: QLocale.Language + Phoenician = ... # type: QLocale.Language + PrakritLanguage = ... # type: QLocale.Language + Rejang = ... # type: QLocale.Language + Sabaean = ... # type: QLocale.Language + Samaritan = ... # type: QLocale.Language + Santali = ... # type: QLocale.Language + Saurashtra = ... # type: QLocale.Language + Sora = ... # type: QLocale.Language + Sylheti = ... # type: QLocale.Language + Tagbanwa = ... # type: QLocale.Language + TaiDam = ... # type: QLocale.Language + TaiNua = ... # type: QLocale.Language + Ugaritic = ... # type: QLocale.Language + Akoose = ... # type: QLocale.Language + Lakota = ... # type: QLocale.Language + StandardMoroccanTamazight = ... # type: QLocale.Language + Mapuche = ... # type: QLocale.Language + CentralKurdish = ... # type: QLocale.Language + LowerSorbian = ... # type: QLocale.Language + UpperSorbian = ... # type: QLocale.Language + Kenyang = ... # type: QLocale.Language + Mohawk = ... # type: QLocale.Language + Nko = ... # type: QLocale.Language + Prussian = ... # type: QLocale.Language + Kiche = ... # type: QLocale.Language + SouthernSami = ... # type: QLocale.Language + LuleSami = ... # type: QLocale.Language + InariSami = ... # type: QLocale.Language + SkoltSami = ... # type: QLocale.Language + Warlpiri = ... # type: QLocale.Language + ManichaeanMiddlePersian = ... # type: QLocale.Language + Mende = ... # type: QLocale.Language + AncientNorthArabian = ... # type: QLocale.Language + LinearA = ... # type: QLocale.Language + HmongNjua = ... # type: QLocale.Language + Ho = ... # type: QLocale.Language + Lezghian = ... # type: QLocale.Language + Bassa = ... # type: QLocale.Language + Mono = ... # type: QLocale.Language + TedimChin = ... # type: QLocale.Language + Maithili = ... # type: QLocale.Language + Ahom = ... # type: QLocale.Language + AmericanSignLanguage = ... # type: QLocale.Language + ArdhamagadhiPrakrit = ... # type: QLocale.Language + Bhojpuri = ... # type: QLocale.Language + HieroglyphicLuwian = ... # type: QLocale.Language + LiteraryChinese = ... # type: QLocale.Language + Mazanderani = ... # type: QLocale.Language + Mru = ... # type: QLocale.Language + Newari = ... # type: QLocale.Language + NorthernLuri = ... # type: QLocale.Language + Palauan = ... # type: QLocale.Language + Papiamento = ... # type: QLocale.Language + Saraiki = ... # type: QLocale.Language + TokelauLanguage = ... # type: QLocale.Language + TokPisin = ... # type: QLocale.Language + TuvaluLanguage = ... # type: QLocale.Language + UncodedLanguages = ... # type: QLocale.Language + Cantonese = ... # type: QLocale.Language + Osage = ... # type: QLocale.Language + Tangut = ... # type: QLocale.Language + Ido = ... # type: QLocale.Language + Lojban = ... # type: QLocale.Language + Sicilian = ... # type: QLocale.Language + SouthernKurdish = ... # type: QLocale.Language + WesternBalochi = ... # type: QLocale.Language + Cebuano = ... # type: QLocale.Language + Erzya = ... # type: QLocale.Language + Chickasaw = ... # type: QLocale.Language + Muscogee = ... # type: QLocale.Language + Silesian = ... # type: QLocale.Language + NigerianPidgin = ... # type: QLocale.Language + + class NumberOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QLocale.NumberOptions', 'QLocale.NumberOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QLocale.NumberOptions', 'QLocale.NumberOption']) -> 'QLocale.NumberOptions': ... + def __xor__(self, f: typing.Union['QLocale.NumberOptions', 'QLocale.NumberOption']) -> 'QLocale.NumberOptions': ... + def __ior__(self, f: typing.Union['QLocale.NumberOptions', 'QLocale.NumberOption']) -> 'QLocale.NumberOptions': ... + def __or__(self, f: typing.Union['QLocale.NumberOptions', 'QLocale.NumberOption']) -> 'QLocale.NumberOptions': ... + def __iand__(self, f: typing.Union['QLocale.NumberOptions', 'QLocale.NumberOption']) -> 'QLocale.NumberOptions': ... + def __and__(self, f: typing.Union['QLocale.NumberOptions', 'QLocale.NumberOption']) -> 'QLocale.NumberOptions': ... + def __invert__(self) -> 'QLocale.NumberOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class DataSizeFormats(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QLocale.DataSizeFormats', 'QLocale.DataSizeFormat']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QLocale.DataSizeFormats', 'QLocale.DataSizeFormat']) -> 'QLocale.DataSizeFormats': ... + def __xor__(self, f: typing.Union['QLocale.DataSizeFormats', 'QLocale.DataSizeFormat']) -> 'QLocale.DataSizeFormats': ... + def __ior__(self, f: typing.Union['QLocale.DataSizeFormats', 'QLocale.DataSizeFormat']) -> 'QLocale.DataSizeFormats': ... + def __or__(self, f: typing.Union['QLocale.DataSizeFormats', 'QLocale.DataSizeFormat']) -> 'QLocale.DataSizeFormats': ... + def __iand__(self, f: typing.Union['QLocale.DataSizeFormats', 'QLocale.DataSizeFormat']) -> 'QLocale.DataSizeFormats': ... + def __and__(self, f: typing.Union['QLocale.DataSizeFormats', 'QLocale.DataSizeFormat']) -> 'QLocale.DataSizeFormats': ... + def __invert__(self) -> 'QLocale.DataSizeFormats': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, language: 'QLocale.Language', country: 'QLocale.Country' = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QLocale') -> None: ... + @typing.overload + def __init__(self, language: 'QLocale.Language', script: 'QLocale.Script', country: 'QLocale.Country') -> None: ... + + def collation(self) -> 'QLocale': ... + def toULong(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toLong(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def formattedDataSize(self, bytes: int, precision: int = ..., format: typing.Union['QLocale.DataSizeFormats', 'QLocale.DataSizeFormat'] = ...) -> str: ... + def swap(self, other: 'QLocale') -> None: ... + def __hash__(self) -> int: ... + def createSeparatedList(self, list: typing.Iterable[typing.Optional[str]]) -> str: ... + def quoteString(self, str: typing.Optional[str], style: 'QLocale.QuotationStyle' = ...) -> str: ... + @staticmethod + def matchingLocales(language: 'QLocale.Language', script: 'QLocale.Script', country: 'QLocale.Country') -> typing.List['QLocale']: ... + @staticmethod + def scriptToString(script: 'QLocale.Script') -> str: ... + def uiLanguages(self) -> typing.List[str]: ... + @typing.overload + def toCurrencyString(self, value: float, symbol: typing.Optional[str] = ...) -> str: ... + @typing.overload + def toCurrencyString(self, value: float, symbol: typing.Optional[str], precision: int) -> str: ... + @typing.overload + def toCurrencyString(self, value: int, symbol: typing.Optional[str] = ...) -> str: ... + def currencySymbol(self, format: 'QLocale.CurrencySymbolFormat' = ...) -> str: ... + def toLower(self, str: typing.Optional[str]) -> str: ... + def toUpper(self, str: typing.Optional[str]) -> str: ... + def weekdays(self) -> typing.List[Qt.DayOfWeek]: ... + def firstDayOfWeek(self) -> Qt.DayOfWeek: ... + def nativeCountryName(self) -> str: ... + def nativeLanguageName(self) -> str: ... + def bcp47Name(self) -> str: ... + def script(self) -> 'QLocale.Script': ... + def textDirection(self) -> Qt.LayoutDirection: ... + def pmText(self) -> str: ... + def amText(self) -> str: ... + def standaloneDayName(self, a0: int, format: 'QLocale.FormatType' = ...) -> str: ... + def standaloneMonthName(self, a0: int, format: 'QLocale.FormatType' = ...) -> str: ... + def positiveSign(self) -> str: ... + def measurementSystem(self) -> 'QLocale.MeasurementSystem': ... + def numberOptions(self) -> 'QLocale.NumberOptions': ... + def setNumberOptions(self, options: typing.Union['QLocale.NumberOptions', 'QLocale.NumberOption']) -> None: ... + def dayName(self, a0: int, format: 'QLocale.FormatType' = ...) -> str: ... + def monthName(self, a0: int, format: 'QLocale.FormatType' = ...) -> str: ... + def exponential(self) -> str: ... + def negativeSign(self) -> str: ... + def zeroDigit(self) -> str: ... + def percent(self) -> str: ... + def groupSeparator(self) -> str: ... + def decimalPoint(self) -> str: ... + @typing.overload + def toDateTime(self, string: typing.Optional[str], format: 'QLocale.FormatType' = ...) -> QDateTime: ... + @typing.overload + def toDateTime(self, string: typing.Optional[str], format: typing.Optional[str]) -> QDateTime: ... + @typing.overload + def toDateTime(self, string: typing.Optional[str], format: 'QLocale.FormatType', cal: QCalendar) -> QDateTime: ... + @typing.overload + def toDateTime(self, string: typing.Optional[str], format: typing.Optional[str], cal: QCalendar) -> QDateTime: ... + @typing.overload + def toTime(self, string: typing.Optional[str], format: 'QLocale.FormatType' = ...) -> QTime: ... + @typing.overload + def toTime(self, string: typing.Optional[str], format: typing.Optional[str]) -> QTime: ... + @typing.overload + def toTime(self, string: typing.Optional[str], format: 'QLocale.FormatType', cal: QCalendar) -> QTime: ... + @typing.overload + def toTime(self, string: typing.Optional[str], format: typing.Optional[str], cal: QCalendar) -> QTime: ... + @typing.overload + def toDate(self, string: typing.Optional[str], format: 'QLocale.FormatType' = ...) -> QDate: ... + @typing.overload + def toDate(self, string: typing.Optional[str], format: typing.Optional[str]) -> QDate: ... + @typing.overload + def toDate(self, string: typing.Optional[str], format: 'QLocale.FormatType', cal: QCalendar) -> QDate: ... + @typing.overload + def toDate(self, string: typing.Optional[str], format: typing.Optional[str], cal: QCalendar) -> QDate: ... + def dateTimeFormat(self, format: 'QLocale.FormatType' = ...) -> str: ... + def timeFormat(self, format: 'QLocale.FormatType' = ...) -> str: ... + def dateFormat(self, format: 'QLocale.FormatType' = ...) -> str: ... + @staticmethod + def system() -> 'QLocale': ... + @staticmethod + def c() -> 'QLocale': ... + @staticmethod + def setDefault(locale: 'QLocale') -> None: ... + @staticmethod + def countryToString(country: 'QLocale.Country') -> str: ... + @staticmethod + def languageToString(language: 'QLocale.Language') -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @typing.overload + def toString(self, i: float, format: str = ..., precision: int = ...) -> str: ... + @typing.overload + def toString(self, dateTime: typing.Union[QDateTime, datetime.datetime], format: typing.Optional[str]) -> str: ... + @typing.overload + def toString(self, dateTime: typing.Union[QDateTime, datetime.datetime], formatStr: typing.Optional[str], cal: QCalendar) -> str: ... + @typing.overload + def toString(self, dateTime: typing.Union[QDateTime, datetime.datetime], format: 'QLocale.FormatType' = ...) -> str: ... + @typing.overload + def toString(self, dateTime: typing.Union[QDateTime, datetime.datetime], format: 'QLocale.FormatType', cal: QCalendar) -> str: ... + @typing.overload + def toString(self, date: typing.Union[QDate, datetime.date], formatStr: typing.Optional[str]) -> str: ... + @typing.overload + def toString(self, date: typing.Union[QDate, datetime.date], formatStr: typing.Optional[str], cal: QCalendar) -> str: ... + @typing.overload + def toString(self, date: typing.Union[QDate, datetime.date], format: 'QLocale.FormatType' = ...) -> str: ... + @typing.overload + def toString(self, date: typing.Union[QDate, datetime.date], format: 'QLocale.FormatType', cal: QCalendar) -> str: ... + @typing.overload + def toString(self, time: typing.Union[QTime, datetime.time], formatStr: typing.Optional[str]) -> str: ... + @typing.overload + def toString(self, time: typing.Union[QTime, datetime.time], format: 'QLocale.FormatType' = ...) -> str: ... + @typing.overload + def toString(self, i: int) -> str: ... + def toDouble(self, s: typing.Optional[str]) -> typing.Tuple[float, typing.Optional[bool]]: ... + def toFloat(self, s: typing.Optional[str]) -> typing.Tuple[float, typing.Optional[bool]]: ... + def toULongLong(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toLongLong(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toUInt(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toInt(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toUShort(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def toShort(self, s: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def name(self) -> str: ... + def country(self) -> 'QLocale.Country': ... + def language(self) -> 'QLocale.Language': ... + + +class QLockFile(PyQt5.sipsimplewrapper): + + class LockError(int): + NoError = ... # type: QLockFile.LockError + LockFailedError = ... # type: QLockFile.LockError + PermissionError = ... # type: QLockFile.LockError + UnknownError = ... # type: QLockFile.LockError + + def __init__(self, fileName: typing.Optional[str]) -> None: ... + + def error(self) -> 'QLockFile.LockError': ... + def removeStaleLockFile(self) -> bool: ... + def getLockInfo(self) -> typing.Tuple[bool, typing.Optional[int], typing.Optional[str], typing.Optional[str]]: ... + def isLocked(self) -> bool: ... + def staleLockTime(self) -> int: ... + def setStaleLockTime(self, a0: int) -> None: ... + def unlock(self) -> None: ... + def tryLock(self, timeout: int = ...) -> bool: ... + def lock(self) -> bool: ... + + +class QMessageLogContext(PyQt5.sipsimplewrapper): + + category = ... # type: str + file = ... # type: str + function = ... # type: str + line = ... # type: int + + +class QMessageLogger(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, file: typing.Optional[str], line: int, function: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, file: typing.Optional[str], line: int, function: typing.Optional[str], category: typing.Optional[str]) -> None: ... + + def info(self, msg: typing.Optional[str]) -> None: ... + def fatal(self, msg: typing.Optional[str]) -> None: ... + def critical(self, msg: typing.Optional[str]) -> None: ... + def warning(self, msg: typing.Optional[str]) -> None: ... + def debug(self, msg: typing.Optional[str]) -> None: ... + + +class QLoggingCategory(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, category: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, category: typing.Optional[str], severityLevel: QtMsgType) -> None: ... + + @staticmethod + def setFilterRules(rules: typing.Optional[str]) -> None: ... + @staticmethod + def defaultCategory() -> typing.Optional['QLoggingCategory']: ... + def __call__(self) -> 'QLoggingCategory': ... + def categoryName(self) -> typing.Optional[str]: ... + def isCriticalEnabled(self) -> bool: ... + def isWarningEnabled(self) -> bool: ... + def isInfoEnabled(self) -> bool: ... + def isDebugEnabled(self) -> bool: ... + def setEnabled(self, type: QtMsgType, enable: bool) -> None: ... + def isEnabled(self, type: QtMsgType) -> bool: ... + + +class QMargins(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, aleft: int, atop: int, aright: int, abottom: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QMargins') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + @typing.overload + def __add__(self, m2: 'QMargins') -> 'QMargins': ... + @typing.overload + def __add__(self, rhs: int) -> 'QMargins': ... + @typing.overload + def __add__(self, rectangle: 'QRect') -> 'QRect': ... + def __radd__(self, lhs: int) -> 'QMargins': ... + @typing.overload + def __sub__(self, m2: 'QMargins') -> 'QMargins': ... + @typing.overload + def __sub__(self, rhs: int) -> 'QMargins': ... + @typing.overload + def __mul__(self, factor: int) -> 'QMargins': ... + @typing.overload + def __mul__(self, factor: float) -> 'QMargins': ... + @typing.overload + def __truediv__(self, divisor: int) -> 'QMargins': ... + @typing.overload + def __truediv__(self, divisor: float) -> 'QMargins': ... + def __neg__(self) -> 'QMargins': ... + def __pos__(self) -> 'QMargins': ... + @typing.overload + def __itruediv__(self, divisor: int) -> 'QMargins': ... + @typing.overload + def __itruediv__(self, divisor: float) -> 'QMargins': ... + @typing.overload + def __imul__(self, factor: int) -> 'QMargins': ... + @typing.overload + def __imul__(self, factor: float) -> 'QMargins': ... + @typing.overload + def __isub__(self, margins: 'QMargins') -> 'QMargins': ... + @typing.overload + def __isub__(self, margin: int) -> 'QMargins': ... + @typing.overload + def __iadd__(self, margins: 'QMargins') -> 'QMargins': ... + @typing.overload + def __iadd__(self, margin: int) -> 'QMargins': ... + def setBottom(self, abottom: int) -> None: ... + def setRight(self, aright: int) -> None: ... + def setTop(self, atop: int) -> None: ... + def setLeft(self, aleft: int) -> None: ... + def bottom(self) -> int: ... + def right(self) -> int: ... + def top(self) -> int: ... + def left(self) -> int: ... + def isNull(self) -> bool: ... + + +class QMarginsF(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, aleft: float, atop: float, aright: float, abottom: float) -> None: ... + @typing.overload + def __init__(self, margins: QMargins) -> None: ... + @typing.overload + def __init__(self, a0: 'QMarginsF') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + @typing.overload + def __add__(self, rhs: 'QMarginsF') -> 'QMarginsF': ... + @typing.overload + def __add__(self, rhs: float) -> 'QMarginsF': ... + @typing.overload + def __add__(self, rhs: 'QRectF') -> 'QRectF': ... + def __radd__(self, lhs: float) -> 'QMarginsF': ... + @typing.overload + def __sub__(self, rhs: 'QMarginsF') -> 'QMarginsF': ... + @typing.overload + def __sub__(self, rhs: float) -> 'QMarginsF': ... + def __mul__(self, rhs: float) -> 'QMarginsF': ... + def __rmul__(self, lhs: float) -> 'QMarginsF': ... + def __truediv__(self, divisor: float) -> 'QMarginsF': ... + def __neg__(self) -> 'QMarginsF': ... + def __pos__(self) -> 'QMarginsF': ... + def toMargins(self) -> QMargins: ... + def __itruediv__(self, divisor: float) -> 'QMarginsF': ... + def __imul__(self, factor: float) -> 'QMarginsF': ... + @typing.overload + def __isub__(self, margins: 'QMarginsF') -> 'QMarginsF': ... + @typing.overload + def __isub__(self, subtrahend: float) -> 'QMarginsF': ... + @typing.overload + def __iadd__(self, margins: 'QMarginsF') -> 'QMarginsF': ... + @typing.overload + def __iadd__(self, addend: float) -> 'QMarginsF': ... + def setBottom(self, abottom: float) -> None: ... + def setRight(self, aright: float) -> None: ... + def setTop(self, atop: float) -> None: ... + def setLeft(self, aleft: float) -> None: ... + def bottom(self) -> float: ... + def right(self) -> float: ... + def top(self) -> float: ... + def left(self) -> float: ... + def isNull(self) -> bool: ... + + +class QMessageAuthenticationCode(PyQt5.sipsimplewrapper): + + def __init__(self, method: QCryptographicHash.Algorithm, key: typing.Union[QByteArray, bytes, bytearray] = ...) -> None: ... + + @staticmethod + def hash(message: typing.Union[QByteArray, bytes, bytearray], key: typing.Union[QByteArray, bytes, bytearray], method: QCryptographicHash.Algorithm) -> QByteArray: ... + def result(self) -> QByteArray: ... + @typing.overload + def addData(self, data: typing.Optional[str], length: int) -> None: ... + @typing.overload + def addData(self, data: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def addData(self, device: typing.Optional[QIODevice]) -> bool: ... + def setKey(self, key: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + def reset(self) -> None: ... + + +class QMetaMethod(PyQt5.sipsimplewrapper): + + class MethodType(int): + Method = ... # type: QMetaMethod.MethodType + Signal = ... # type: QMetaMethod.MethodType + Slot = ... # type: QMetaMethod.MethodType + Constructor = ... # type: QMetaMethod.MethodType + + class Access(int): + Private = ... # type: QMetaMethod.Access + Protected = ... # type: QMetaMethod.Access + Public = ... # type: QMetaMethod.Access + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QMetaMethod') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def parameterType(self, index: int) -> int: ... + def parameterCount(self) -> int: ... + def returnType(self) -> int: ... + def name(self) -> QByteArray: ... + def methodSignature(self) -> QByteArray: ... + def isValid(self) -> bool: ... + def methodIndex(self) -> int: ... + @typing.overload + def invoke(self, object: typing.Optional[QObject], connectionType: Qt.ConnectionType, returnValue: 'QGenericReturnArgument', value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... + @typing.overload + def invoke(self, object: typing.Optional[QObject], returnValue: 'QGenericReturnArgument', value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... + @typing.overload + def invoke(self, object: typing.Optional[QObject], connectionType: Qt.ConnectionType, value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... + @typing.overload + def invoke(self, object: typing.Optional[QObject], value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... + def methodType(self) -> 'QMetaMethod.MethodType': ... + def access(self) -> 'QMetaMethod.Access': ... + def tag(self) -> typing.Optional[str]: ... + def parameterNames(self) -> typing.List[QByteArray]: ... + def parameterTypes(self) -> typing.List[QByteArray]: ... + def typeName(self) -> typing.Optional[str]: ... + + +class QMetaEnum(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QMetaEnum') -> None: ... + + def enumName(self) -> typing.Optional[str]: ... + def isScoped(self) -> bool: ... + def isValid(self) -> bool: ... + def valueToKeys(self, value: int) -> QByteArray: ... + def keysToValue(self, keys: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def valueToKey(self, value: int) -> typing.Optional[str]: ... + def keyToValue(self, key: typing.Optional[str]) -> typing.Tuple[int, typing.Optional[bool]]: ... + def scope(self) -> typing.Optional[str]: ... + def value(self, index: int) -> int: ... + def key(self, index: int) -> typing.Optional[str]: ... + def keyCount(self) -> int: ... + def isFlag(self) -> bool: ... + def name(self) -> typing.Optional[str]: ... + + +class QMetaProperty(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QMetaProperty') -> None: ... + + def isRequired(self) -> bool: ... + def relativePropertyIndex(self) -> int: ... + def isFinal(self) -> bool: ... + def isConstant(self) -> bool: ... + def propertyIndex(self) -> int: ... + def notifySignalIndex(self) -> int: ... + def notifySignal(self) -> QMetaMethod: ... + def hasNotifySignal(self) -> bool: ... + def userType(self) -> int: ... + def isUser(self, object: typing.Optional[QObject] = ...) -> bool: ... + def isResettable(self) -> bool: ... + def isValid(self) -> bool: ... + def hasStdCppSet(self) -> bool: ... + def reset(self, obj: typing.Optional[QObject]) -> bool: ... + def write(self, obj: typing.Optional[QObject], value: typing.Any) -> bool: ... + def read(self, obj: typing.Optional[QObject]) -> typing.Any: ... + def enumerator(self) -> QMetaEnum: ... + def isEnumType(self) -> bool: ... + def isFlagType(self) -> bool: ... + def isStored(self, object: typing.Optional[QObject] = ...) -> bool: ... + def isScriptable(self, object: typing.Optional[QObject] = ...) -> bool: ... + def isDesignable(self, object: typing.Optional[QObject] = ...) -> bool: ... + def isWritable(self) -> bool: ... + def isReadable(self) -> bool: ... + def type(self) -> 'QVariant.Type': ... + def typeName(self) -> typing.Optional[str]: ... + def name(self) -> typing.Optional[str]: ... + + +class QMetaClassInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QMetaClassInfo') -> None: ... + + def value(self) -> typing.Optional[str]: ... + def name(self) -> typing.Optional[str]: ... + + +class QMetaType(PyQt5.sipsimplewrapper): + + class TypeFlag(int): + NeedsConstruction = ... # type: QMetaType.TypeFlag + NeedsDestruction = ... # type: QMetaType.TypeFlag + MovableType = ... # type: QMetaType.TypeFlag + PointerToQObject = ... # type: QMetaType.TypeFlag + IsEnumeration = ... # type: QMetaType.TypeFlag + + class Type(int): + UnknownType = ... # type: QMetaType.Type + Void = ... # type: QMetaType.Type + Bool = ... # type: QMetaType.Type + Int = ... # type: QMetaType.Type + UInt = ... # type: QMetaType.Type + LongLong = ... # type: QMetaType.Type + ULongLong = ... # type: QMetaType.Type + Double = ... # type: QMetaType.Type + QChar = ... # type: QMetaType.Type + QVariantMap = ... # type: QMetaType.Type + QVariantList = ... # type: QMetaType.Type + QVariantHash = ... # type: QMetaType.Type + QString = ... # type: QMetaType.Type + QStringList = ... # type: QMetaType.Type + QByteArray = ... # type: QMetaType.Type + QBitArray = ... # type: QMetaType.Type + QDate = ... # type: QMetaType.Type + QTime = ... # type: QMetaType.Type + QDateTime = ... # type: QMetaType.Type + QUrl = ... # type: QMetaType.Type + QLocale = ... # type: QMetaType.Type + QRect = ... # type: QMetaType.Type + QRectF = ... # type: QMetaType.Type + QSize = ... # type: QMetaType.Type + QSizeF = ... # type: QMetaType.Type + QLine = ... # type: QMetaType.Type + QLineF = ... # type: QMetaType.Type + QPoint = ... # type: QMetaType.Type + QPointF = ... # type: QMetaType.Type + QRegExp = ... # type: QMetaType.Type + LastCoreType = ... # type: QMetaType.Type + FirstGuiType = ... # type: QMetaType.Type + QFont = ... # type: QMetaType.Type + QPixmap = ... # type: QMetaType.Type + QBrush = ... # type: QMetaType.Type + QColor = ... # type: QMetaType.Type + QPalette = ... # type: QMetaType.Type + QIcon = ... # type: QMetaType.Type + QImage = ... # type: QMetaType.Type + QPolygon = ... # type: QMetaType.Type + QRegion = ... # type: QMetaType.Type + QBitmap = ... # type: QMetaType.Type + QCursor = ... # type: QMetaType.Type + QSizePolicy = ... # type: QMetaType.Type + QKeySequence = ... # type: QMetaType.Type + QPen = ... # type: QMetaType.Type + QTextLength = ... # type: QMetaType.Type + QTextFormat = ... # type: QMetaType.Type + QMatrix = ... # type: QMetaType.Type + QTransform = ... # type: QMetaType.Type + VoidStar = ... # type: QMetaType.Type + Long = ... # type: QMetaType.Type + Short = ... # type: QMetaType.Type + Char = ... # type: QMetaType.Type + ULong = ... # type: QMetaType.Type + UShort = ... # type: QMetaType.Type + UChar = ... # type: QMetaType.Type + Float = ... # type: QMetaType.Type + QObjectStar = ... # type: QMetaType.Type + QMatrix4x4 = ... # type: QMetaType.Type + QVector2D = ... # type: QMetaType.Type + QVector3D = ... # type: QMetaType.Type + QVector4D = ... # type: QMetaType.Type + QQuaternion = ... # type: QMetaType.Type + QEasingCurve = ... # type: QMetaType.Type + QVariant = ... # type: QMetaType.Type + QUuid = ... # type: QMetaType.Type + QModelIndex = ... # type: QMetaType.Type + QPolygonF = ... # type: QMetaType.Type + SChar = ... # type: QMetaType.Type + QRegularExpression = ... # type: QMetaType.Type + QJsonValue = ... # type: QMetaType.Type + QJsonObject = ... # type: QMetaType.Type + QJsonArray = ... # type: QMetaType.Type + QJsonDocument = ... # type: QMetaType.Type + QByteArrayList = ... # type: QMetaType.Type + QPersistentModelIndex = ... # type: QMetaType.Type + QCborSimpleType = ... # type: QMetaType.Type + QCborValue = ... # type: QMetaType.Type + QCborArray = ... # type: QMetaType.Type + QCborMap = ... # type: QMetaType.Type + QColorSpace = ... # type: QMetaType.Type + User = ... # type: QMetaType.Type + + class TypeFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QMetaType.TypeFlags', 'QMetaType.TypeFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QMetaType.TypeFlags', 'QMetaType.TypeFlag']) -> 'QMetaType.TypeFlags': ... + def __xor__(self, f: typing.Union['QMetaType.TypeFlags', 'QMetaType.TypeFlag']) -> 'QMetaType.TypeFlags': ... + def __ior__(self, f: typing.Union['QMetaType.TypeFlags', 'QMetaType.TypeFlag']) -> 'QMetaType.TypeFlags': ... + def __or__(self, f: typing.Union['QMetaType.TypeFlags', 'QMetaType.TypeFlag']) -> 'QMetaType.TypeFlags': ... + def __iand__(self, f: typing.Union['QMetaType.TypeFlags', 'QMetaType.TypeFlag']) -> 'QMetaType.TypeFlags': ... + def __and__(self, f: typing.Union['QMetaType.TypeFlags', 'QMetaType.TypeFlag']) -> 'QMetaType.TypeFlags': ... + def __invert__(self) -> 'QMetaType.TypeFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, type: int = ...) -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def name(self) -> QByteArray: ... + def id(self) -> int: ... + @staticmethod + def metaObjectForType(type: int) -> typing.Optional['QMetaObject']: ... + def isValid(self) -> bool: ... + def flags(self) -> 'QMetaType.TypeFlags': ... + @staticmethod + def typeFlags(type: int) -> 'QMetaType.TypeFlags': ... + @typing.overload + @staticmethod + def isRegistered(type: int) -> bool: ... + @typing.overload + def isRegistered(self) -> bool: ... + @staticmethod + def typeName(type: int) -> typing.Optional[str]: ... + @staticmethod + def type(typeName: typing.Optional[str]) -> int: ... + + +class QMimeData(QObject): + + def __init__(self) -> None: ... + + def retrieveData(self, mimetype: typing.Optional[str], preferredType: 'QVariant.Type') -> typing.Any: ... + def removeFormat(self, mimetype: typing.Optional[str]) -> None: ... + def clear(self) -> None: ... + def formats(self) -> typing.List[str]: ... + def hasFormat(self, mimetype: typing.Optional[str]) -> bool: ... + def setData(self, mimetype: typing.Optional[str], data: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + def data(self, mimetype: typing.Optional[str]) -> QByteArray: ... + def hasColor(self) -> bool: ... + def setColorData(self, color: typing.Any) -> None: ... + def colorData(self) -> typing.Any: ... + def hasImage(self) -> bool: ... + def setImageData(self, image: typing.Any) -> None: ... + def imageData(self) -> typing.Any: ... + def hasHtml(self) -> bool: ... + def setHtml(self, html: typing.Optional[str]) -> None: ... + def html(self) -> str: ... + def hasText(self) -> bool: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def text(self) -> str: ... + def hasUrls(self) -> bool: ... + def setUrls(self, urls: typing.Iterable['QUrl']) -> None: ... + def urls(self) -> typing.List['QUrl']: ... + + +class QMimeDatabase(PyQt5.sipsimplewrapper): + + class MatchMode(int): + MatchDefault = ... # type: QMimeDatabase.MatchMode + MatchExtension = ... # type: QMimeDatabase.MatchMode + MatchContent = ... # type: QMimeDatabase.MatchMode + + def __init__(self) -> None: ... + + def allMimeTypes(self) -> typing.List['QMimeType']: ... + def suffixForFileName(self, fileName: typing.Optional[str]) -> str: ... + @typing.overload + def mimeTypeForFileNameAndData(self, fileName: typing.Optional[str], device: typing.Optional[QIODevice]) -> 'QMimeType': ... + @typing.overload + def mimeTypeForFileNameAndData(self, fileName: typing.Optional[str], data: typing.Union[QByteArray, bytes, bytearray]) -> 'QMimeType': ... + def mimeTypeForUrl(self, url: 'QUrl') -> 'QMimeType': ... + @typing.overload + def mimeTypeForData(self, data: typing.Union[QByteArray, bytes, bytearray]) -> 'QMimeType': ... + @typing.overload + def mimeTypeForData(self, device: typing.Optional[QIODevice]) -> 'QMimeType': ... + def mimeTypesForFileName(self, fileName: typing.Optional[str]) -> typing.List['QMimeType']: ... + @typing.overload + def mimeTypeForFile(self, fileName: typing.Optional[str], mode: 'QMimeDatabase.MatchMode' = ...) -> 'QMimeType': ... + @typing.overload + def mimeTypeForFile(self, fileInfo: QFileInfo, mode: 'QMimeDatabase.MatchMode' = ...) -> 'QMimeType': ... + def mimeTypeForName(self, nameOrAlias: typing.Optional[str]) -> 'QMimeType': ... + + +class QMimeType(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMimeType') -> None: ... + + def __hash__(self) -> int: ... + def filterString(self) -> str: ... + def inherits(self, mimeTypeName: typing.Optional[str]) -> bool: ... + def preferredSuffix(self) -> str: ... + def suffixes(self) -> typing.List[str]: ... + def aliases(self) -> typing.List[str]: ... + def allAncestors(self) -> typing.List[str]: ... + def parentMimeTypes(self) -> typing.List[str]: ... + def globPatterns(self) -> typing.List[str]: ... + def iconName(self) -> str: ... + def genericIconName(self) -> str: ... + def comment(self) -> str: ... + def name(self) -> str: ... + def isDefault(self) -> bool: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def swap(self, other: 'QMimeType') -> None: ... + + +class QMutexLocker(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, m: typing.Optional['QMutex']) -> None: ... + @typing.overload + def __init__(self, m: typing.Optional['QRecursiveMutex']) -> None: ... + + def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... + def __enter__(self) -> typing.Any: ... + def mutex(self) -> typing.Optional['QMutex']: ... + def relock(self) -> None: ... + def unlock(self) -> None: ... + + +class QMutex(PyQt5.sipsimplewrapper): + + class RecursionMode(int): + NonRecursive = ... # type: QMutex.RecursionMode + Recursive = ... # type: QMutex.RecursionMode + + def __init__(self, mode: 'QMutex.RecursionMode' = ...) -> None: ... + + def isRecursive(self) -> bool: ... + def unlock(self) -> None: ... + def tryLock(self, timeout: int = ...) -> bool: ... + def lock(self) -> None: ... + + +class QRecursiveMutex(PyQt5.sipsimplewrapper): + + def __init__(self) -> None: ... + + +class QSignalBlocker(PyQt5.sipsimplewrapper): + + def __init__(self, o: typing.Optional[QObject]) -> None: ... + + def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... + def __enter__(self) -> typing.Any: ... + def unblock(self) -> None: ... + def reblock(self) -> None: ... + + +class QObjectCleanupHandler(QObject): + + def __init__(self) -> None: ... + + def clear(self) -> None: ... + def isEmpty(self) -> bool: ... + def remove(self, object: typing.Optional[QObject]) -> None: ... + def add(self, object: typing.Optional[QObject]) -> typing.Optional[QObject]: ... + + +class QMetaObject(PyQt5.sipsimplewrapper): + + class Connection(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMetaObject.Connection') -> None: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QMetaObject') -> None: ... + + def inherits(self, metaObject: typing.Optional['QMetaObject']) -> bool: ... + def constructor(self, index: int) -> QMetaMethod: ... + def indexOfConstructor(self, constructor: typing.Optional[str]) -> int: ... + def constructorCount(self) -> int: ... + @typing.overload + @staticmethod + def invokeMethod(obj: typing.Optional[QObject], member: typing.Optional[str], type: Qt.ConnectionType, ret: 'QGenericReturnArgument', value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... + @typing.overload + @staticmethod + def invokeMethod(obj: typing.Optional[QObject], member: typing.Optional[str], ret: 'QGenericReturnArgument', value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... + @typing.overload + @staticmethod + def invokeMethod(obj: typing.Optional[QObject], member: typing.Optional[str], type: Qt.ConnectionType, value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... + @typing.overload + @staticmethod + def invokeMethod(obj: typing.Optional[QObject], member: typing.Optional[str], value0: 'QGenericArgument' = ..., value1: 'QGenericArgument' = ..., value2: 'QGenericArgument' = ..., value3: 'QGenericArgument' = ..., value4: 'QGenericArgument' = ..., value5: 'QGenericArgument' = ..., value6: 'QGenericArgument' = ..., value7: 'QGenericArgument' = ..., value8: 'QGenericArgument' = ..., value9: 'QGenericArgument' = ...) -> typing.Any: ... + @staticmethod + def normalizedType(type: typing.Optional[str]) -> QByteArray: ... + @staticmethod + def normalizedSignature(method: typing.Optional[str]) -> QByteArray: ... + @staticmethod + def connectSlotsByName(o: typing.Optional[QObject]) -> None: ... + @typing.overload + @staticmethod + def checkConnectArgs(signal: typing.Optional[str], method: typing.Optional[str]) -> bool: ... + @typing.overload + @staticmethod + def checkConnectArgs(signal: QMetaMethod, method: QMetaMethod) -> bool: ... + def classInfo(self, index: int) -> QMetaClassInfo: ... + def property(self, index: int) -> QMetaProperty: ... + def enumerator(self, index: int) -> QMetaEnum: ... + def method(self, index: int) -> QMetaMethod: ... + def indexOfClassInfo(self, name: typing.Optional[str]) -> int: ... + def indexOfProperty(self, name: typing.Optional[str]) -> int: ... + def indexOfEnumerator(self, name: typing.Optional[str]) -> int: ... + def indexOfSlot(self, slot: typing.Optional[str]) -> int: ... + def indexOfSignal(self, signal: typing.Optional[str]) -> int: ... + def indexOfMethod(self, method: typing.Optional[str]) -> int: ... + def classInfoCount(self) -> int: ... + def propertyCount(self) -> int: ... + def enumeratorCount(self) -> int: ... + def methodCount(self) -> int: ... + def classInfoOffset(self) -> int: ... + def propertyOffset(self) -> int: ... + def enumeratorOffset(self) -> int: ... + def methodOffset(self) -> int: ... + def userProperty(self) -> QMetaProperty: ... + def superClass(self) -> typing.Optional['QMetaObject']: ... + def className(self) -> typing.Optional[str]: ... + + +class QGenericArgument(PyQt5.sipsimplewrapper): ... + + +class QGenericReturnArgument(PyQt5.sipsimplewrapper): ... + + +class QOperatingSystemVersion(PyQt5.sipsimplewrapper): + + class OSType(int): + Unknown = ... # type: QOperatingSystemVersion.OSType + Windows = ... # type: QOperatingSystemVersion.OSType + MacOS = ... # type: QOperatingSystemVersion.OSType + IOS = ... # type: QOperatingSystemVersion.OSType + TvOS = ... # type: QOperatingSystemVersion.OSType + WatchOS = ... # type: QOperatingSystemVersion.OSType + Android = ... # type: QOperatingSystemVersion.OSType + + AndroidJellyBean = ... # type: 'QOperatingSystemVersion' + AndroidJellyBean_MR1 = ... # type: 'QOperatingSystemVersion' + AndroidJellyBean_MR2 = ... # type: 'QOperatingSystemVersion' + AndroidKitKat = ... # type: 'QOperatingSystemVersion' + AndroidLollipop = ... # type: 'QOperatingSystemVersion' + AndroidLollipop_MR1 = ... # type: 'QOperatingSystemVersion' + AndroidMarshmallow = ... # type: 'QOperatingSystemVersion' + AndroidNougat = ... # type: 'QOperatingSystemVersion' + AndroidNougat_MR1 = ... # type: 'QOperatingSystemVersion' + AndroidOreo = ... # type: 'QOperatingSystemVersion' + MacOSBigSur = ... # type: 'QOperatingSystemVersion' + MacOSCatalina = ... # type: 'QOperatingSystemVersion' + MacOSHighSierra = ... # type: 'QOperatingSystemVersion' + MacOSMojave = ... # type: 'QOperatingSystemVersion' + MacOSSierra = ... # type: 'QOperatingSystemVersion' + OSXElCapitan = ... # type: 'QOperatingSystemVersion' + OSXMavericks = ... # type: 'QOperatingSystemVersion' + OSXYosemite = ... # type: 'QOperatingSystemVersion' + Windows10 = ... # type: 'QOperatingSystemVersion' + Windows7 = ... # type: 'QOperatingSystemVersion' + Windows8 = ... # type: 'QOperatingSystemVersion' + Windows8_1 = ... # type: 'QOperatingSystemVersion' + + @typing.overload + def __init__(self, osType: 'QOperatingSystemVersion.OSType', vmajor: int, vminor: int = ..., vmicro: int = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QOperatingSystemVersion') -> None: ... + + def __lt__(self, rhs: 'QOperatingSystemVersion') -> bool: ... + def __le__(self, rhs: 'QOperatingSystemVersion') -> bool: ... + def __gt__(self, rhs: 'QOperatingSystemVersion') -> bool: ... + def __ge__(self, rhs: 'QOperatingSystemVersion') -> bool: ... + def name(self) -> str: ... + def type(self) -> 'QOperatingSystemVersion.OSType': ... + def segmentCount(self) -> int: ... + def microVersion(self) -> int: ... + def minorVersion(self) -> int: ... + def majorVersion(self) -> int: ... + @staticmethod + def currentType() -> 'QOperatingSystemVersion.OSType': ... + @staticmethod + def current() -> 'QOperatingSystemVersion': ... + + +class QParallelAnimationGroup(QAnimationGroup): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def updateDirection(self, direction: QAbstractAnimation.Direction) -> None: ... + def updateState(self, newState: QAbstractAnimation.State, oldState: QAbstractAnimation.State) -> None: ... + def updateCurrentTime(self, currentTime: int) -> None: ... + def event(self, event: typing.Optional[QEvent]) -> bool: ... + def duration(self) -> int: ... + + +class QPauseAnimation(QAbstractAnimation): + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, msecs: int, parent: typing.Optional[QObject] = ...) -> None: ... + + def updateCurrentTime(self, a0: int) -> None: ... + def event(self, e: typing.Optional[QEvent]) -> bool: ... + def setDuration(self, msecs: int) -> None: ... + def duration(self) -> int: ... + + +class QVariantAnimation(QAbstractAnimation): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def interpolated(self, from_: typing.Any, to: typing.Any, progress: float) -> typing.Any: ... + def updateCurrentValue(self, value: typing.Any) -> None: ... + def updateState(self, newState: QAbstractAnimation.State, oldState: QAbstractAnimation.State) -> None: ... + def updateCurrentTime(self, a0: int) -> None: ... + def event(self, event: typing.Optional[QEvent]) -> bool: ... + valueChanged: typing.ClassVar[pyqtSignal] + def setEasingCurve(self, easing: typing.Union[QEasingCurve, QEasingCurve.Type]) -> None: ... + def easingCurve(self) -> QEasingCurve: ... + def setDuration(self, msecs: int) -> None: ... + def duration(self) -> int: ... + def currentValue(self) -> typing.Any: ... + def setKeyValues(self, values: typing.Iterable[typing.Tuple[float, typing.Any]]) -> None: ... + def keyValues(self) -> typing.List[typing.Tuple[float, typing.Any]]: ... + def setKeyValueAt(self, step: float, value: typing.Any) -> None: ... + def keyValueAt(self, step: float) -> typing.Any: ... + def setEndValue(self, value: typing.Any) -> None: ... + def endValue(self) -> typing.Any: ... + def setStartValue(self, value: typing.Any) -> None: ... + def startValue(self) -> typing.Any: ... + + +class QPropertyAnimation(QVariantAnimation): + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, target: typing.Optional[QObject], propertyName: typing.Union[QByteArray, bytes, bytearray], parent: typing.Optional[QObject] = ...) -> None: ... + + def updateState(self, newState: QAbstractAnimation.State, oldState: QAbstractAnimation.State) -> None: ... + def updateCurrentValue(self, value: typing.Any) -> None: ... + def event(self, event: typing.Optional[QEvent]) -> bool: ... + def setPropertyName(self, propertyName: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + def propertyName(self) -> QByteArray: ... + def setTargetObject(self, target: typing.Optional[QObject]) -> None: ... + def targetObject(self) -> typing.Optional[QObject]: ... + + +class QPluginLoader(QObject): + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], parent: typing.Optional[QObject] = ...) -> None: ... + + def loadHints(self) -> QLibrary.LoadHints: ... + def setLoadHints(self, loadHints: typing.Union[QLibrary.LoadHints, QLibrary.LoadHint]) -> None: ... + def errorString(self) -> str: ... + def fileName(self) -> str: ... + def setFileName(self, fileName: typing.Optional[str]) -> None: ... + def isLoaded(self) -> bool: ... + def unload(self) -> bool: ... + def load(self) -> bool: ... + @staticmethod + def staticInstances() -> typing.List[QObject]: ... + def instance(self) -> typing.Optional[QObject]: ... + + +class QPoint(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, xpos: int, ypos: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QPoint') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __add__(self, p2: 'QPoint') -> 'QPoint': ... + def __sub__(self, p2: 'QPoint') -> 'QPoint': ... + @typing.overload + def __mul__(self, c: int) -> 'QPoint': ... + @typing.overload + def __mul__(self, c: float) -> 'QPoint': ... + @typing.overload + def __rmul__(self, c: int) -> 'QPoint': ... + @typing.overload + def __rmul__(self, c: float) -> 'QPoint': ... + def __truediv__(self, c: float) -> 'QPoint': ... + def __neg__(self) -> 'QPoint': ... + def __pos__(self) -> 'QPoint': ... + def transposed(self) -> 'QPoint': ... + @staticmethod + def dotProduct(p1: 'QPoint', p2: 'QPoint') -> int: ... + def __itruediv__(self, c: float) -> 'QPoint': ... + @typing.overload + def __imul__(self, c: int) -> 'QPoint': ... + @typing.overload + def __imul__(self, c: float) -> 'QPoint': ... + def __isub__(self, p: 'QPoint') -> 'QPoint': ... + def __iadd__(self, p: 'QPoint') -> 'QPoint': ... + def setY(self, ypos: int) -> None: ... + def setX(self, xpos: int) -> None: ... + def y(self) -> int: ... + def x(self) -> int: ... + def __bool__(self) -> int: ... + def isNull(self) -> bool: ... + def __repr__(self) -> str: ... + def manhattanLength(self) -> int: ... + + +class QPointF(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, xpos: float, ypos: float) -> None: ... + @typing.overload + def __init__(self, p: QPoint) -> None: ... + @typing.overload + def __init__(self, a0: 'QPointF') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __add__(self, p2: typing.Union['QPointF', QPoint]) -> 'QPointF': ... + def __sub__(self, p2: typing.Union['QPointF', QPoint]) -> 'QPointF': ... + def __mul__(self, c: float) -> 'QPointF': ... + def __rmul__(self, c: float) -> 'QPointF': ... + def __truediv__(self, c: float) -> 'QPointF': ... + def __neg__(self) -> 'QPointF': ... + def __pos__(self) -> 'QPointF': ... + def transposed(self) -> 'QPointF': ... + @staticmethod + def dotProduct(p1: typing.Union['QPointF', QPoint], p2: typing.Union['QPointF', QPoint]) -> float: ... + def manhattanLength(self) -> float: ... + def toPoint(self) -> QPoint: ... + def __itruediv__(self, c: float) -> 'QPointF': ... + def __imul__(self, c: float) -> 'QPointF': ... + def __isub__(self, p: typing.Union['QPointF', QPoint]) -> 'QPointF': ... + def __iadd__(self, p: typing.Union['QPointF', QPoint]) -> 'QPointF': ... + def setY(self, ypos: float) -> None: ... + def setX(self, xpos: float) -> None: ... + def y(self) -> float: ... + def x(self) -> float: ... + def __bool__(self) -> int: ... + def isNull(self) -> bool: ... + def __repr__(self) -> str: ... + + +class QProcess(QIODevice): + + class InputChannelMode(int): + ManagedInputChannel = ... # type: QProcess.InputChannelMode + ForwardedInputChannel = ... # type: QProcess.InputChannelMode + + class ProcessChannelMode(int): + SeparateChannels = ... # type: QProcess.ProcessChannelMode + MergedChannels = ... # type: QProcess.ProcessChannelMode + ForwardedChannels = ... # type: QProcess.ProcessChannelMode + ForwardedOutputChannel = ... # type: QProcess.ProcessChannelMode + ForwardedErrorChannel = ... # type: QProcess.ProcessChannelMode + + class ProcessChannel(int): + StandardOutput = ... # type: QProcess.ProcessChannel + StandardError = ... # type: QProcess.ProcessChannel + + class ProcessState(int): + NotRunning = ... # type: QProcess.ProcessState + Starting = ... # type: QProcess.ProcessState + Running = ... # type: QProcess.ProcessState + + class ProcessError(int): + FailedToStart = ... # type: QProcess.ProcessError + Crashed = ... # type: QProcess.ProcessError + Timedout = ... # type: QProcess.ProcessError + ReadError = ... # type: QProcess.ProcessError + WriteError = ... # type: QProcess.ProcessError + UnknownError = ... # type: QProcess.ProcessError + + class ExitStatus(int): + NormalExit = ... # type: QProcess.ExitStatus + CrashExit = ... # type: QProcess.ExitStatus + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def processId(self) -> int: ... + @staticmethod + def nullDevice() -> str: ... + def setInputChannelMode(self, mode: 'QProcess.InputChannelMode') -> None: ... + def inputChannelMode(self) -> 'QProcess.InputChannelMode': ... + def open(self, mode: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag] = ...) -> bool: ... + def setArguments(self, arguments: typing.Iterable[typing.Optional[str]]) -> None: ... + def arguments(self) -> typing.List[str]: ... + def setProgram(self, program: typing.Optional[str]) -> None: ... + def program(self) -> str: ... + def processEnvironment(self) -> 'QProcessEnvironment': ... + def setProcessEnvironment(self, environment: 'QProcessEnvironment') -> None: ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readData(self, maxlen: int) -> bytes: ... + def setupChildProcess(self) -> None: ... + def setProcessState(self, state: 'QProcess.ProcessState') -> None: ... + errorOccurred: typing.ClassVar[pyqtSignal] + readyReadStandardError: typing.ClassVar[pyqtSignal] + readyReadStandardOutput: typing.ClassVar[pyqtSignal] + stateChanged: typing.ClassVar[pyqtSignal] + finished: typing.ClassVar[pyqtSignal] + started: typing.ClassVar[pyqtSignal] + def kill(self) -> None: ... + def terminate(self) -> None: ... + def setStandardOutputProcess(self, destination: typing.Optional['QProcess']) -> None: ... + def setStandardErrorFile(self, fileName: typing.Optional[str], mode: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag] = ...) -> None: ... + def setStandardOutputFile(self, fileName: typing.Optional[str], mode: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag] = ...) -> None: ... + def setStandardInputFile(self, fileName: typing.Optional[str]) -> None: ... + def setProcessChannelMode(self, mode: 'QProcess.ProcessChannelMode') -> None: ... + def processChannelMode(self) -> 'QProcess.ProcessChannelMode': ... + @staticmethod + def systemEnvironment() -> typing.List[str]: ... + @typing.overload + @staticmethod + def startDetached(program: typing.Optional[str], arguments: typing.Iterable[typing.Optional[str]], workingDirectory: typing.Optional[str]) -> typing.Tuple[bool, typing.Optional[int]]: ... + @typing.overload + @staticmethod + def startDetached(program: typing.Optional[str], arguments: typing.Iterable[typing.Optional[str]]) -> bool: ... + @typing.overload + @staticmethod + def startDetached(program: typing.Optional[str]) -> bool: ... + @typing.overload + def startDetached(self) -> typing.Tuple[bool, typing.Optional[int]]: ... + @typing.overload + @staticmethod + def execute(program: typing.Optional[str], arguments: typing.Iterable[typing.Optional[str]]) -> int: ... + @typing.overload + @staticmethod + def execute(program: typing.Optional[str]) -> int: ... + def atEnd(self) -> bool: ... + def close(self) -> None: ... + def canReadLine(self) -> bool: ... + def isSequential(self) -> bool: ... + def bytesToWrite(self) -> int: ... + def bytesAvailable(self) -> int: ... + def exitStatus(self) -> 'QProcess.ExitStatus': ... + def exitCode(self) -> int: ... + def readAllStandardError(self) -> QByteArray: ... + def readAllStandardOutput(self) -> QByteArray: ... + def waitForFinished(self, msecs: int = ...) -> bool: ... + def waitForBytesWritten(self, msecs: int = ...) -> bool: ... + def waitForReadyRead(self, msecs: int = ...) -> bool: ... + def waitForStarted(self, msecs: int = ...) -> bool: ... + def pid(self) -> int: ... + def state(self) -> 'QProcess.ProcessState': ... + error: typing.ClassVar[pyqtSignal] + def setWorkingDirectory(self, dir: typing.Optional[str]) -> None: ... + def workingDirectory(self) -> str: ... + def closeWriteChannel(self) -> None: ... + def closeReadChannel(self, channel: 'QProcess.ProcessChannel') -> None: ... + def setReadChannel(self, channel: 'QProcess.ProcessChannel') -> None: ... + def readChannel(self) -> 'QProcess.ProcessChannel': ... + @typing.overload + def start(self, program: typing.Optional[str], arguments: typing.Iterable[typing.Optional[str]], mode: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag] = ...) -> None: ... + @typing.overload + def start(self, command: typing.Optional[str], mode: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag] = ...) -> None: ... + @typing.overload + def start(self, mode: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag] = ...) -> None: ... + + +class QProcessEnvironment(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QProcessEnvironment') -> None: ... + + def swap(self, other: 'QProcessEnvironment') -> None: ... + def keys(self) -> typing.List[str]: ... + @staticmethod + def systemEnvironment() -> 'QProcessEnvironment': ... + def toStringList(self) -> typing.List[str]: ... + def value(self, name: typing.Optional[str], defaultValue: typing.Optional[str] = ...) -> str: ... + def remove(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def insert(self, name: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def insert(self, e: 'QProcessEnvironment') -> None: ... + def contains(self, name: typing.Optional[str]) -> bool: ... + def clear(self) -> None: ... + def isEmpty(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QRandomGenerator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, seed: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QRandomGenerator') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + @staticmethod + def securelySeeded() -> 'QRandomGenerator': ... + @staticmethod + def global_() -> typing.Optional['QRandomGenerator']: ... + @staticmethod + def system() -> typing.Optional['QRandomGenerator']: ... + @staticmethod + def max() -> int: ... + @staticmethod + def min() -> int: ... + def discard(self, z: int) -> None: ... + def seed(self, seed: int = ...) -> None: ... + def __call__(self) -> int: ... + @typing.overload + def bounded(self, highest: float) -> float: ... + @typing.overload + def bounded(self, highest: int) -> int: ... + @typing.overload + def bounded(self, lowest: int, highest: int) -> int: ... + def generateDouble(self) -> float: ... + def generate64(self) -> int: ... + def generate(self) -> int: ... + + +class QReadWriteLock(PyQt5.sipsimplewrapper): + + class RecursionMode(int): + NonRecursive = ... # type: QReadWriteLock.RecursionMode + Recursive = ... # type: QReadWriteLock.RecursionMode + + def __init__(self, recursionMode: 'QReadWriteLock.RecursionMode' = ...) -> None: ... + + def unlock(self) -> None: ... + @typing.overload + def tryLockForWrite(self) -> bool: ... + @typing.overload + def tryLockForWrite(self, timeout: int) -> bool: ... + def lockForWrite(self) -> None: ... + @typing.overload + def tryLockForRead(self) -> bool: ... + @typing.overload + def tryLockForRead(self, timeout: int) -> bool: ... + def lockForRead(self) -> None: ... + + +class QReadLocker(PyQt5.sipsimplewrapper): + + def __init__(self, areadWriteLock: typing.Optional[QReadWriteLock]) -> None: ... + + def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... + def __enter__(self) -> typing.Any: ... + def readWriteLock(self) -> typing.Optional[QReadWriteLock]: ... + def relock(self) -> None: ... + def unlock(self) -> None: ... + + +class QWriteLocker(PyQt5.sipsimplewrapper): + + def __init__(self, areadWriteLock: typing.Optional[QReadWriteLock]) -> None: ... + + def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... + def __enter__(self) -> typing.Any: ... + def readWriteLock(self) -> typing.Optional[QReadWriteLock]: ... + def relock(self) -> None: ... + def unlock(self) -> None: ... + + +class QRect(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, aleft: int, atop: int, awidth: int, aheight: int) -> None: ... + @typing.overload + def __init__(self, atopLeft: QPoint, abottomRight: QPoint) -> None: ... + @typing.overload + def __init__(self, atopLeft: QPoint, asize: 'QSize') -> None: ... + @typing.overload + def __init__(self, a0: 'QRect') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __add__(self, margins: QMargins) -> 'QRect': ... + def __sub__(self, rhs: QMargins) -> 'QRect': ... + def transposed(self) -> 'QRect': ... + def __isub__(self, margins: QMargins) -> 'QRect': ... + def __iadd__(self, margins: QMargins) -> 'QRect': ... + def marginsRemoved(self, margins: QMargins) -> 'QRect': ... + def marginsAdded(self, margins: QMargins) -> 'QRect': ... + def united(self, r: 'QRect') -> 'QRect': ... + def intersected(self, other: 'QRect') -> 'QRect': ... + def __iand__(self, r: 'QRect') -> 'QRect': ... + def __ior__(self, r: 'QRect') -> 'QRect': ... + def setSize(self, s: 'QSize') -> None: ... + def setHeight(self, h: int) -> None: ... + def setWidth(self, w: int) -> None: ... + def adjust(self, dx1: int, dy1: int, dx2: int, dy2: int) -> None: ... + def adjusted(self, xp1: int, yp1: int, xp2: int, yp2: int) -> 'QRect': ... + def setCoords(self, xp1: int, yp1: int, xp2: int, yp2: int) -> None: ... + def getCoords(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + def setRect(self, ax: int, ay: int, aw: int, ah: int) -> None: ... + def getRect(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + def moveBottomLeft(self, p: QPoint) -> None: ... + def moveTopRight(self, p: QPoint) -> None: ... + def moveBottomRight(self, p: QPoint) -> None: ... + def moveTopLeft(self, p: QPoint) -> None: ... + def moveBottom(self, pos: int) -> None: ... + def moveRight(self, pos: int) -> None: ... + def moveTop(self, pos: int) -> None: ... + def moveLeft(self, pos: int) -> None: ... + @typing.overload + def moveTo(self, ax: int, ay: int) -> None: ... + @typing.overload + def moveTo(self, p: QPoint) -> None: ... + @typing.overload + def translated(self, dx: int, dy: int) -> 'QRect': ... + @typing.overload + def translated(self, p: QPoint) -> 'QRect': ... + @typing.overload + def translate(self, dx: int, dy: int) -> None: ... + @typing.overload + def translate(self, p: QPoint) -> None: ... + def size(self) -> 'QSize': ... + def height(self) -> int: ... + def width(self) -> int: ... + def center(self) -> QPoint: ... + def bottomLeft(self) -> QPoint: ... + def topRight(self) -> QPoint: ... + def bottomRight(self) -> QPoint: ... + def topLeft(self) -> QPoint: ... + def setY(self, ay: int) -> None: ... + def setX(self, ax: int) -> None: ... + def setBottomLeft(self, p: QPoint) -> None: ... + def setTopRight(self, p: QPoint) -> None: ... + def setBottomRight(self, p: QPoint) -> None: ... + def setTopLeft(self, p: QPoint) -> None: ... + def setBottom(self, pos: int) -> None: ... + def setRight(self, pos: int) -> None: ... + def setTop(self, pos: int) -> None: ... + def setLeft(self, pos: int) -> None: ... + def y(self) -> int: ... + def x(self) -> int: ... + def bottom(self) -> int: ... + def right(self) -> int: ... + def top(self) -> int: ... + def left(self) -> int: ... + def __bool__(self) -> int: ... + def isValid(self) -> bool: ... + def isEmpty(self) -> bool: ... + def isNull(self) -> bool: ... + def __repr__(self) -> str: ... + def intersects(self, r: 'QRect') -> bool: ... + @typing.overload + def __contains__(self, p: QPoint) -> int: ... + @typing.overload + def __contains__(self, r: 'QRect') -> int: ... + @typing.overload + def contains(self, point: QPoint, proper: bool = ...) -> bool: ... + @typing.overload + def contains(self, rectangle: 'QRect', proper: bool = ...) -> bool: ... + @typing.overload + def contains(self, ax: int, ay: int, aproper: bool) -> bool: ... + @typing.overload + def contains(self, ax: int, ay: int) -> bool: ... + def __and__(self, r: 'QRect') -> 'QRect': ... + def __or__(self, r: 'QRect') -> 'QRect': ... + def moveCenter(self, p: QPoint) -> None: ... + def normalized(self) -> 'QRect': ... + + +class QRectF(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, atopLeft: typing.Union[QPointF, QPoint], asize: 'QSizeF') -> None: ... + @typing.overload + def __init__(self, atopLeft: typing.Union[QPointF, QPoint], abottomRight: typing.Union[QPointF, QPoint]) -> None: ... + @typing.overload + def __init__(self, aleft: float, atop: float, awidth: float, aheight: float) -> None: ... + @typing.overload + def __init__(self, r: QRect) -> None: ... + @typing.overload + def __init__(self, a0: 'QRectF') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __add__(self, rhs: QMarginsF) -> 'QRectF': ... + def __sub__(self, rhs: QMarginsF) -> 'QRectF': ... + def transposed(self) -> 'QRectF': ... + def __isub__(self, margins: QMarginsF) -> 'QRectF': ... + def __iadd__(self, margins: QMarginsF) -> 'QRectF': ... + def marginsRemoved(self, margins: QMarginsF) -> 'QRectF': ... + def marginsAdded(self, margins: QMarginsF) -> 'QRectF': ... + def toRect(self) -> QRect: ... + def toAlignedRect(self) -> QRect: ... + def united(self, r: 'QRectF') -> 'QRectF': ... + def intersected(self, r: 'QRectF') -> 'QRectF': ... + def __iand__(self, r: 'QRectF') -> 'QRectF': ... + def __ior__(self, r: 'QRectF') -> 'QRectF': ... + def setSize(self, s: 'QSizeF') -> None: ... + def setHeight(self, ah: float) -> None: ... + def setWidth(self, aw: float) -> None: ... + def adjusted(self, xp1: float, yp1: float, xp2: float, yp2: float) -> 'QRectF': ... + def adjust(self, xp1: float, yp1: float, xp2: float, yp2: float) -> None: ... + def setCoords(self, xp1: float, yp1: float, xp2: float, yp2: float) -> None: ... + def getCoords(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + def setRect(self, ax: float, ay: float, aaw: float, aah: float) -> None: ... + def getRect(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + @typing.overload + def translated(self, dx: float, dy: float) -> 'QRectF': ... + @typing.overload + def translated(self, p: typing.Union[QPointF, QPoint]) -> 'QRectF': ... + @typing.overload + def moveTo(self, ax: float, ay: float) -> None: ... + @typing.overload + def moveTo(self, p: typing.Union[QPointF, QPoint]) -> None: ... + @typing.overload + def translate(self, dx: float, dy: float) -> None: ... + @typing.overload + def translate(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def size(self) -> 'QSizeF': ... + def height(self) -> float: ... + def width(self) -> float: ... + def moveCenter(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def moveBottomRight(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def moveBottomLeft(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def moveTopRight(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def moveTopLeft(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def moveBottom(self, pos: float) -> None: ... + def moveRight(self, pos: float) -> None: ... + def moveTop(self, pos: float) -> None: ... + def moveLeft(self, pos: float) -> None: ... + def center(self) -> QPointF: ... + def setBottomRight(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def setBottomLeft(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def setTopRight(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def setTopLeft(self, p: typing.Union[QPointF, QPoint]) -> None: ... + def setBottom(self, pos: float) -> None: ... + def setTop(self, pos: float) -> None: ... + def setRight(self, pos: float) -> None: ... + def setLeft(self, pos: float) -> None: ... + def y(self) -> float: ... + def x(self) -> float: ... + def __bool__(self) -> int: ... + def isValid(self) -> bool: ... + def isEmpty(self) -> bool: ... + def isNull(self) -> bool: ... + def intersects(self, r: 'QRectF') -> bool: ... + @typing.overload + def __contains__(self, p: typing.Union[QPointF, QPoint]) -> int: ... + @typing.overload + def __contains__(self, r: 'QRectF') -> int: ... + @typing.overload + def contains(self, p: typing.Union[QPointF, QPoint]) -> bool: ... + @typing.overload + def contains(self, r: 'QRectF') -> bool: ... + @typing.overload + def contains(self, ax: float, ay: float) -> bool: ... + def __and__(self, r: 'QRectF') -> 'QRectF': ... + def __or__(self, r: 'QRectF') -> 'QRectF': ... + def bottomLeft(self) -> QPointF: ... + def topRight(self) -> QPointF: ... + def bottomRight(self) -> QPointF: ... + def topLeft(self) -> QPointF: ... + def setY(self, pos: float) -> None: ... + def setX(self, pos: float) -> None: ... + def bottom(self) -> float: ... + def right(self) -> float: ... + def top(self) -> float: ... + def left(self) -> float: ... + def normalized(self) -> 'QRectF': ... + def __repr__(self) -> str: ... + + +class QRegExp(PyQt5.sipsimplewrapper): + + class CaretMode(int): + CaretAtZero = ... # type: QRegExp.CaretMode + CaretAtOffset = ... # type: QRegExp.CaretMode + CaretWontMatch = ... # type: QRegExp.CaretMode + + class PatternSyntax(int): + RegExp = ... # type: QRegExp.PatternSyntax + RegExp2 = ... # type: QRegExp.PatternSyntax + Wildcard = ... # type: QRegExp.PatternSyntax + FixedString = ... # type: QRegExp.PatternSyntax + WildcardUnix = ... # type: QRegExp.PatternSyntax + W3CXmlSchema11 = ... # type: QRegExp.PatternSyntax + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pattern: typing.Optional[str], cs: Qt.CaseSensitivity = ..., syntax: 'QRegExp.PatternSyntax' = ...) -> None: ... + @typing.overload + def __init__(self, rx: 'QRegExp') -> None: ... + + def __hash__(self) -> int: ... + def swap(self, other: 'QRegExp') -> None: ... + def captureCount(self) -> int: ... + @staticmethod + def escape(str: typing.Optional[str]) -> str: ... + def errorString(self) -> str: ... + def pos(self, nth: int = ...) -> int: ... + def cap(self, nth: int = ...) -> str: ... + def capturedTexts(self) -> typing.List[str]: ... + def matchedLength(self) -> int: ... + def lastIndexIn(self, str: typing.Optional[str], offset: int = ..., caretMode: 'QRegExp.CaretMode' = ...) -> int: ... + def indexIn(self, str: typing.Optional[str], offset: int = ..., caretMode: 'QRegExp.CaretMode' = ...) -> int: ... + def exactMatch(self, str: typing.Optional[str]) -> bool: ... + def setMinimal(self, minimal: bool) -> None: ... + def isMinimal(self) -> bool: ... + def setPatternSyntax(self, syntax: 'QRegExp.PatternSyntax') -> None: ... + def patternSyntax(self) -> 'QRegExp.PatternSyntax': ... + def setCaseSensitivity(self, cs: Qt.CaseSensitivity) -> None: ... + def caseSensitivity(self) -> Qt.CaseSensitivity: ... + def setPattern(self, pattern: typing.Optional[str]) -> None: ... + def pattern(self) -> str: ... + def isValid(self) -> bool: ... + def isEmpty(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __repr__(self) -> str: ... + + +class QRegularExpression(PyQt5.sipsimplewrapper): + + class MatchOption(int): + NoMatchOption = ... # type: QRegularExpression.MatchOption + AnchoredMatchOption = ... # type: QRegularExpression.MatchOption + DontCheckSubjectStringMatchOption = ... # type: QRegularExpression.MatchOption + + class MatchType(int): + NormalMatch = ... # type: QRegularExpression.MatchType + PartialPreferCompleteMatch = ... # type: QRegularExpression.MatchType + PartialPreferFirstMatch = ... # type: QRegularExpression.MatchType + NoMatch = ... # type: QRegularExpression.MatchType + + class PatternOption(int): + NoPatternOption = ... # type: QRegularExpression.PatternOption + CaseInsensitiveOption = ... # type: QRegularExpression.PatternOption + DotMatchesEverythingOption = ... # type: QRegularExpression.PatternOption + MultilineOption = ... # type: QRegularExpression.PatternOption + ExtendedPatternSyntaxOption = ... # type: QRegularExpression.PatternOption + InvertedGreedinessOption = ... # type: QRegularExpression.PatternOption + DontCaptureOption = ... # type: QRegularExpression.PatternOption + UseUnicodePropertiesOption = ... # type: QRegularExpression.PatternOption + OptimizeOnFirstUsageOption = ... # type: QRegularExpression.PatternOption + DontAutomaticallyOptimizeOption = ... # type: QRegularExpression.PatternOption + + class PatternOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption']) -> 'QRegularExpression.PatternOptions': ... + def __xor__(self, f: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption']) -> 'QRegularExpression.PatternOptions': ... + def __ior__(self, f: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption']) -> 'QRegularExpression.PatternOptions': ... + def __or__(self, f: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption']) -> 'QRegularExpression.PatternOptions': ... + def __iand__(self, f: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption']) -> 'QRegularExpression.PatternOptions': ... + def __and__(self, f: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption']) -> 'QRegularExpression.PatternOptions': ... + def __invert__(self) -> 'QRegularExpression.PatternOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class MatchOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption']) -> 'QRegularExpression.MatchOptions': ... + def __xor__(self, f: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption']) -> 'QRegularExpression.MatchOptions': ... + def __ior__(self, f: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption']) -> 'QRegularExpression.MatchOptions': ... + def __or__(self, f: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption']) -> 'QRegularExpression.MatchOptions': ... + def __iand__(self, f: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption']) -> 'QRegularExpression.MatchOptions': ... + def __and__(self, f: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption']) -> 'QRegularExpression.MatchOptions': ... + def __invert__(self) -> 'QRegularExpression.MatchOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pattern: typing.Optional[str], options: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption'] = ...) -> None: ... + @typing.overload + def __init__(self, re: 'QRegularExpression') -> None: ... + + @staticmethod + def anchoredPattern(expression: typing.Optional[str]) -> str: ... + @staticmethod + def wildcardToRegularExpression(str: typing.Optional[str]) -> str: ... + def __hash__(self) -> int: ... + def optimize(self) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def namedCaptureGroups(self) -> typing.List[str]: ... + @staticmethod + def escape(str: typing.Optional[str]) -> str: ... + def globalMatch(self, subject: typing.Optional[str], offset: int = ..., matchType: 'QRegularExpression.MatchType' = ..., matchOptions: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption'] = ...) -> 'QRegularExpressionMatchIterator': ... + def match(self, subject: typing.Optional[str], offset: int = ..., matchType: 'QRegularExpression.MatchType' = ..., matchOptions: typing.Union['QRegularExpression.MatchOptions', 'QRegularExpression.MatchOption'] = ...) -> 'QRegularExpressionMatch': ... + def captureCount(self) -> int: ... + def errorString(self) -> str: ... + def patternErrorOffset(self) -> int: ... + def isValid(self) -> bool: ... + def setPattern(self, pattern: typing.Optional[str]) -> None: ... + def pattern(self) -> str: ... + def swap(self, re: 'QRegularExpression') -> None: ... + def __repr__(self) -> str: ... + def setPatternOptions(self, options: typing.Union['QRegularExpression.PatternOptions', 'QRegularExpression.PatternOption']) -> None: ... + def patternOptions(self) -> 'QRegularExpression.PatternOptions': ... + + +class QRegularExpressionMatch(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, match: 'QRegularExpressionMatch') -> None: ... + + @typing.overload + def capturedEnd(self, nth: int = ...) -> int: ... + @typing.overload + def capturedEnd(self, name: typing.Optional[str]) -> int: ... + @typing.overload + def capturedLength(self, nth: int = ...) -> int: ... + @typing.overload + def capturedLength(self, name: typing.Optional[str]) -> int: ... + @typing.overload + def capturedStart(self, nth: int = ...) -> int: ... + @typing.overload + def capturedStart(self, name: typing.Optional[str]) -> int: ... + def capturedTexts(self) -> typing.List[str]: ... + @typing.overload + def captured(self, nth: int = ...) -> str: ... + @typing.overload + def captured(self, name: typing.Optional[str]) -> str: ... + def lastCapturedIndex(self) -> int: ... + def isValid(self) -> bool: ... + def hasPartialMatch(self) -> bool: ... + def hasMatch(self) -> bool: ... + def matchOptions(self) -> QRegularExpression.MatchOptions: ... + def matchType(self) -> QRegularExpression.MatchType: ... + def regularExpression(self) -> QRegularExpression: ... + def swap(self, match: 'QRegularExpressionMatch') -> None: ... + + +class QRegularExpressionMatchIterator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, iterator: 'QRegularExpressionMatchIterator') -> None: ... + + def matchOptions(self) -> QRegularExpression.MatchOptions: ... + def matchType(self) -> QRegularExpression.MatchType: ... + def regularExpression(self) -> QRegularExpression: ... + def peekNext(self) -> QRegularExpressionMatch: ... + def next(self) -> QRegularExpressionMatch: ... + def hasNext(self) -> bool: ... + def isValid(self) -> bool: ... + def swap(self, iterator: 'QRegularExpressionMatchIterator') -> None: ... + + +class QResource(PyQt5.sipsimplewrapper): + + class Compression(int): + NoCompression = ... # type: QResource.Compression + ZlibCompression = ... # type: QResource.Compression + ZstdCompression = ... # type: QResource.Compression + + def __init__(self, fileName: typing.Optional[str] = ..., locale: QLocale = ...) -> None: ... + + def uncompressedData(self) -> QByteArray: ... + def uncompressedSize(self) -> int: ... + def compressionAlgorithm(self) -> 'QResource.Compression': ... + def lastModified(self) -> QDateTime: ... + def isFile(self) -> bool: ... + def isDir(self) -> bool: ... + def children(self) -> typing.List[str]: ... + @staticmethod + def unregisterResourceData(rccData: typing.Optional[bytes], mapRoot: typing.Optional[str] = ...) -> bool: ... + @staticmethod + def unregisterResource(rccFileName: typing.Optional[str], mapRoot: typing.Optional[str] = ...) -> bool: ... + @staticmethod + def registerResourceData(rccData: typing.Optional[bytes], mapRoot: typing.Optional[str] = ...) -> bool: ... + @staticmethod + def registerResource(rccFileName: typing.Optional[str], mapRoot: typing.Optional[str] = ...) -> bool: ... + def size(self) -> int: ... + def setLocale(self, locale: QLocale) -> None: ... + def setFileName(self, file: typing.Optional[str]) -> None: ... + def locale(self) -> QLocale: ... + def isValid(self) -> bool: ... + def isCompressed(self) -> bool: ... + def fileName(self) -> str: ... + def data(self) -> bytes: ... + def absoluteFilePath(self) -> str: ... + + +class QRunnable(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QRunnable') -> None: ... + + @staticmethod + def create(functionToRun: typing.Callable[[], None]) -> typing.Optional['QRunnable']: ... + def setAutoDelete(self, _autoDelete: bool) -> None: ... + def autoDelete(self) -> bool: ... + def run(self) -> None: ... + + +class QSaveFile(QFileDevice): + + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str], parent: typing.Optional[QObject]) -> None: ... + + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def directWriteFallback(self) -> bool: ... + def setDirectWriteFallback(self, enabled: bool) -> None: ... + def cancelWriting(self) -> None: ... + def commit(self) -> bool: ... + def open(self, flags: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag]) -> bool: ... + def setFileName(self, name: typing.Optional[str]) -> None: ... + def fileName(self) -> str: ... + + +class QSemaphore(PyQt5.sipsimplewrapper): + + def __init__(self, n: int = ...) -> None: ... + + def available(self) -> int: ... + def release(self, n: int = ...) -> None: ... + @typing.overload + def tryAcquire(self, n: int = ...) -> bool: ... + @typing.overload + def tryAcquire(self, n: int, timeout: int) -> bool: ... + def acquire(self, n: int = ...) -> None: ... + + +class QSemaphoreReleaser(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, sem: typing.Optional[QSemaphore], n: int = ...) -> None: ... + + def cancel(self) -> typing.Optional[QSemaphore]: ... + def semaphore(self) -> typing.Optional[QSemaphore]: ... + def swap(self, other: 'QSemaphoreReleaser') -> None: ... + + +class QSequentialAnimationGroup(QAnimationGroup): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def updateDirection(self, direction: QAbstractAnimation.Direction) -> None: ... + def updateState(self, newState: QAbstractAnimation.State, oldState: QAbstractAnimation.State) -> None: ... + def updateCurrentTime(self, a0: int) -> None: ... + def event(self, event: typing.Optional[QEvent]) -> bool: ... + currentAnimationChanged: typing.ClassVar[pyqtSignal] + def duration(self) -> int: ... + def currentAnimation(self) -> typing.Optional[QAbstractAnimation]: ... + def insertPause(self, index: int, msecs: int) -> typing.Optional[QPauseAnimation]: ... + def addPause(self, msecs: int) -> typing.Optional[QPauseAnimation]: ... + + +class QSettings(QObject): + + class Scope(int): + UserScope = ... # type: QSettings.Scope + SystemScope = ... # type: QSettings.Scope + + class Format(int): + NativeFormat = ... # type: QSettings.Format + IniFormat = ... # type: QSettings.Format + InvalidFormat = ... # type: QSettings.Format + + class Status(int): + NoError = ... # type: QSettings.Status + AccessError = ... # type: QSettings.Status + FormatError = ... # type: QSettings.Status + + @typing.overload + def __init__(self, organization: typing.Optional[str], application: typing.Optional[str] = ..., parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, scope: 'QSettings.Scope', organization: typing.Optional[str], application: typing.Optional[str] = ..., parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, format: 'QSettings.Format', scope: 'QSettings.Scope', organization: typing.Optional[str], application: typing.Optional[str] = ..., parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: 'QSettings.Format', parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, scope: 'QSettings.Scope', parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def event(self, event: typing.Optional[QEvent]) -> bool: ... + def setAtomicSyncRequired(self, enable: bool) -> None: ... + def isAtomicSyncRequired(self) -> bool: ... + def iniCodec(self) -> typing.Optional['QTextCodec']: ... + @typing.overload + def setIniCodec(self, codec: typing.Optional['QTextCodec']) -> None: ... + @typing.overload + def setIniCodec(self, codecName: typing.Optional[str]) -> None: ... + @staticmethod + def defaultFormat() -> 'QSettings.Format': ... + @staticmethod + def setDefaultFormat(format: 'QSettings.Format') -> None: ... + def applicationName(self) -> str: ... + def organizationName(self) -> str: ... + def scope(self) -> 'QSettings.Scope': ... + def format(self) -> 'QSettings.Format': ... + @staticmethod + def setPath(format: 'QSettings.Format', scope: 'QSettings.Scope', path: typing.Optional[str]) -> None: ... + def fileName(self) -> str: ... + def fallbacksEnabled(self) -> bool: ... + def setFallbacksEnabled(self, b: bool) -> None: ... + def contains(self, key: typing.Optional[str]) -> bool: ... + def remove(self, key: typing.Optional[str]) -> None: ... + def value(self, key: typing.Optional[str], defaultValue: typing.Any = ..., type: type = ...) -> typing.Any: ... + def setValue(self, key: typing.Optional[str], value: typing.Any) -> None: ... + def isWritable(self) -> bool: ... + def childGroups(self) -> typing.List[str]: ... + def childKeys(self) -> typing.List[str]: ... + def allKeys(self) -> typing.List[str]: ... + def setArrayIndex(self, i: int) -> None: ... + def endArray(self) -> None: ... + def beginWriteArray(self, prefix: typing.Optional[str], size: int = ...) -> None: ... + def beginReadArray(self, prefix: typing.Optional[str]) -> int: ... + def group(self) -> str: ... + def endGroup(self) -> None: ... + def beginGroup(self, prefix: typing.Optional[str]) -> None: ... + def status(self) -> 'QSettings.Status': ... + def sync(self) -> None: ... + def clear(self) -> None: ... + + +class QSharedMemory(QObject): + + class SharedMemoryError(int): + NoError = ... # type: QSharedMemory.SharedMemoryError + PermissionDenied = ... # type: QSharedMemory.SharedMemoryError + InvalidSize = ... # type: QSharedMemory.SharedMemoryError + KeyError = ... # type: QSharedMemory.SharedMemoryError + AlreadyExists = ... # type: QSharedMemory.SharedMemoryError + NotFound = ... # type: QSharedMemory.SharedMemoryError + LockError = ... # type: QSharedMemory.SharedMemoryError + OutOfResources = ... # type: QSharedMemory.SharedMemoryError + UnknownError = ... # type: QSharedMemory.SharedMemoryError + + class AccessMode(int): + ReadOnly = ... # type: QSharedMemory.AccessMode + ReadWrite = ... # type: QSharedMemory.AccessMode + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, key: typing.Optional[str], parent: typing.Optional[QObject] = ...) -> None: ... + + def nativeKey(self) -> str: ... + def setNativeKey(self, key: typing.Optional[str]) -> None: ... + def errorString(self) -> str: ... + def error(self) -> 'QSharedMemory.SharedMemoryError': ... + def unlock(self) -> bool: ... + def lock(self) -> bool: ... + def constData(self) -> PyQt5.sip.voidptr: ... + def data(self) -> PyQt5.sip.voidptr: ... + def detach(self) -> bool: ... + def isAttached(self) -> bool: ... + def attach(self, mode: 'QSharedMemory.AccessMode' = ...) -> bool: ... + def size(self) -> int: ... + def create(self, size: int, mode: 'QSharedMemory.AccessMode' = ...) -> bool: ... + def key(self) -> str: ... + def setKey(self, key: typing.Optional[str]) -> None: ... + + +class QSignalMapper(QObject): + + from PyQt5.QtWidgets import QWidget + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + @typing.overload + def map(self) -> None: ... + @typing.overload + def map(self, sender: typing.Optional[QObject]) -> None: ... + mappedObject: typing.ClassVar[pyqtSignal] + mappedWidget: typing.ClassVar[pyqtSignal] + mappedString: typing.ClassVar[pyqtSignal] + mappedInt: typing.ClassVar[pyqtSignal] + mapped: typing.ClassVar[pyqtSignal] + @typing.overload + def mapping(self, id: int) -> typing.Optional[QObject]: ... + @typing.overload + def mapping(self, text: typing.Optional[str]) -> typing.Optional[QObject]: ... + @typing.overload + def mapping(self, widget: typing.Optional[QWidget]) -> typing.Optional[QObject]: ... + @typing.overload + def mapping(self, object: typing.Optional[QObject]) -> typing.Optional[QObject]: ... + def removeMappings(self, sender: typing.Optional[QObject]) -> None: ... + @typing.overload + def setMapping(self, sender: typing.Optional[QObject], id: int) -> None: ... + @typing.overload + def setMapping(self, sender: typing.Optional[QObject], text: typing.Optional[str]) -> None: ... + @typing.overload + def setMapping(self, sender: typing.Optional[QObject], widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def setMapping(self, sender: typing.Optional[QObject], object: typing.Optional[QObject]) -> None: ... + + +class QSignalTransition(QAbstractTransition): + + @typing.overload + def __init__(self, sourceState: typing.Optional['QState'] = ...) -> None: ... + @typing.overload + def __init__(self, signal: pyqtBoundSignal, sourceState: typing.Optional['QState'] = ...) -> None: ... + + signalChanged: typing.ClassVar[pyqtSignal] + senderObjectChanged: typing.ClassVar[pyqtSignal] + def event(self, e: typing.Optional[QEvent]) -> bool: ... + def onTransition(self, event: typing.Optional[QEvent]) -> None: ... + def eventTest(self, event: typing.Optional[QEvent]) -> bool: ... + def setSignal(self, signal: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + def signal(self) -> QByteArray: ... + def setSenderObject(self, sender: typing.Optional[QObject]) -> None: ... + def senderObject(self) -> typing.Optional[QObject]: ... + + +class QSize(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, w: int, h: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QSize') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __add__(self, s2: 'QSize') -> 'QSize': ... + def __sub__(self, s2: 'QSize') -> 'QSize': ... + def __mul__(self, c: float) -> 'QSize': ... + def __rmul__(self, c: float) -> 'QSize': ... + def __truediv__(self, c: float) -> 'QSize': ... + def shrunkBy(self, m: QMargins) -> 'QSize': ... + def grownBy(self, m: QMargins) -> 'QSize': ... + def transposed(self) -> 'QSize': ... + @typing.overload + def scaled(self, s: 'QSize', mode: Qt.AspectRatioMode) -> 'QSize': ... + @typing.overload + def scaled(self, w: int, h: int, mode: Qt.AspectRatioMode) -> 'QSize': ... + def boundedTo(self, otherSize: 'QSize') -> 'QSize': ... + def expandedTo(self, otherSize: 'QSize') -> 'QSize': ... + def __itruediv__(self, c: float) -> 'QSize': ... + def __imul__(self, c: float) -> 'QSize': ... + def __isub__(self, s: 'QSize') -> 'QSize': ... + def __iadd__(self, s: 'QSize') -> 'QSize': ... + def setHeight(self, h: int) -> None: ... + def setWidth(self, w: int) -> None: ... + def height(self) -> int: ... + def width(self) -> int: ... + def __bool__(self) -> int: ... + def isValid(self) -> bool: ... + def isEmpty(self) -> bool: ... + def isNull(self) -> bool: ... + def __repr__(self) -> str: ... + @typing.overload + def scale(self, s: 'QSize', mode: Qt.AspectRatioMode) -> None: ... + @typing.overload + def scale(self, w: int, h: int, mode: Qt.AspectRatioMode) -> None: ... + def transpose(self) -> None: ... + + +class QSizeF(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, sz: QSize) -> None: ... + @typing.overload + def __init__(self, w: float, h: float) -> None: ... + @typing.overload + def __init__(self, a0: 'QSizeF') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __add__(self, s2: 'QSizeF') -> 'QSizeF': ... + def __sub__(self, s2: 'QSizeF') -> 'QSizeF': ... + def __mul__(self, c: float) -> 'QSizeF': ... + def __rmul__(self, c: float) -> 'QSizeF': ... + def __truediv__(self, c: float) -> 'QSizeF': ... + def shrunkBy(self, m: QMarginsF) -> 'QSizeF': ... + def grownBy(self, m: QMarginsF) -> 'QSizeF': ... + def transposed(self) -> 'QSizeF': ... + @typing.overload + def scaled(self, s: 'QSizeF', mode: Qt.AspectRatioMode) -> 'QSizeF': ... + @typing.overload + def scaled(self, w: float, h: float, mode: Qt.AspectRatioMode) -> 'QSizeF': ... + def toSize(self) -> QSize: ... + def boundedTo(self, otherSize: 'QSizeF') -> 'QSizeF': ... + def expandedTo(self, otherSize: 'QSizeF') -> 'QSizeF': ... + def __itruediv__(self, c: float) -> 'QSizeF': ... + def __imul__(self, c: float) -> 'QSizeF': ... + def __isub__(self, s: 'QSizeF') -> 'QSizeF': ... + def __iadd__(self, s: 'QSizeF') -> 'QSizeF': ... + def setHeight(self, h: float) -> None: ... + def setWidth(self, w: float) -> None: ... + def height(self) -> float: ... + def width(self) -> float: ... + def __bool__(self) -> int: ... + def isValid(self) -> bool: ... + def isEmpty(self) -> bool: ... + def isNull(self) -> bool: ... + def __repr__(self) -> str: ... + @typing.overload + def scale(self, s: 'QSizeF', mode: Qt.AspectRatioMode) -> None: ... + @typing.overload + def scale(self, w: float, h: float, mode: Qt.AspectRatioMode) -> None: ... + def transpose(self) -> None: ... + + +class QSocketNotifier(QObject): + + class Type(int): + Read = ... # type: QSocketNotifier.Type + Write = ... # type: QSocketNotifier.Type + Exception = ... # type: QSocketNotifier.Type + + def __init__(self, socket: PyQt5.sip.voidptr, a1: 'QSocketNotifier.Type', parent: typing.Optional[QObject] = ...) -> None: ... + + def event(self, a0: typing.Optional[QEvent]) -> bool: ... + activated: typing.ClassVar[pyqtSignal] + def setEnabled(self, a0: bool) -> None: ... + def isEnabled(self) -> bool: ... + def type(self) -> 'QSocketNotifier.Type': ... + def socket(self) -> PyQt5.sip.voidptr: ... + + +class QSortFilterProxyModel(QAbstractProxyModel): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + recursiveFilteringEnabledChanged: typing.ClassVar[pyqtSignal] + filterRoleChanged: typing.ClassVar[pyqtSignal] + sortRoleChanged: typing.ClassVar[pyqtSignal] + sortLocaleAwareChanged: typing.ClassVar[pyqtSignal] + sortCaseSensitivityChanged: typing.ClassVar[pyqtSignal] + filterCaseSensitivityChanged: typing.ClassVar[pyqtSignal] + dynamicSortFilterChanged: typing.ClassVar[pyqtSignal] + def invalidateFilter(self) -> None: ... + def setRecursiveFilteringEnabled(self, recursive: bool) -> None: ... + def isRecursiveFilteringEnabled(self) -> bool: ... + def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... + def setSortLocaleAware(self, on: bool) -> None: ... + def isSortLocaleAware(self) -> bool: ... + def supportedDropActions(self) -> Qt.DropActions: ... + def mimeTypes(self) -> typing.List[str]: ... + def setFilterRole(self, role: int) -> None: ... + def filterRole(self) -> int: ... + def sortOrder(self) -> Qt.SortOrder: ... + def sortColumn(self) -> int: ... + def setSortRole(self, role: int) -> None: ... + def sortRole(self) -> int: ... + def setDynamicSortFilter(self, enable: bool) -> None: ... + def dynamicSortFilter(self) -> bool: ... + def setSortCaseSensitivity(self, cs: Qt.CaseSensitivity) -> None: ... + def sortCaseSensitivity(self) -> Qt.CaseSensitivity: ... + def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... + def match(self, start: QModelIndex, role: int, value: typing.Any, hits: int = ..., flags: typing.Union[Qt.MatchFlags, Qt.MatchFlag] = ...) -> typing.List[QModelIndex]: ... + def span(self, index: QModelIndex) -> QSize: ... + def buddy(self, index: QModelIndex) -> QModelIndex: ... + def flags(self, index: QModelIndex) -> Qt.ItemFlags: ... + def canFetchMore(self, parent: QModelIndex) -> bool: ... + def fetchMore(self, parent: QModelIndex) -> None: ... + def removeColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... + def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def dropMimeData(self, data: typing.Optional[QMimeData], action: Qt.DropAction, row: int, column: int, parent: QModelIndex) -> bool: ... + def mimeData(self, indexes: typing.Iterable[QModelIndex]) -> typing.Optional[QMimeData]: ... + def setHeaderData(self, section: int, orientation: Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... + def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... + def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, index: QModelIndex, role: int = ...) -> typing.Any: ... + def hasChildren(self, parent: QModelIndex = ...) -> bool: ... + def columnCount(self, parent: QModelIndex = ...) -> int: ... + def rowCount(self, parent: QModelIndex = ...) -> int: ... + @typing.overload + def parent(self, child: QModelIndex) -> QModelIndex: ... + @typing.overload + def parent(self) -> typing.Optional[QObject]: ... + def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... + def lessThan(self, left: QModelIndex, right: QModelIndex) -> bool: ... + def filterAcceptsColumn(self, source_column: int, source_parent: QModelIndex) -> bool: ... + def filterAcceptsRow(self, source_row: int, source_parent: QModelIndex) -> bool: ... + def setFilterWildcard(self, pattern: typing.Optional[str]) -> None: ... + @typing.overload + def setFilterRegularExpression(self, regularExpression: QRegularExpression) -> None: ... + @typing.overload + def setFilterRegularExpression(self, pattern: typing.Optional[str]) -> None: ... + @typing.overload + def setFilterRegExp(self, regExp: QRegExp) -> None: ... + @typing.overload + def setFilterRegExp(self, pattern: typing.Optional[str]) -> None: ... + def setFilterFixedString(self, pattern: typing.Optional[str]) -> None: ... + def invalidate(self) -> None: ... + def setFilterCaseSensitivity(self, cs: Qt.CaseSensitivity) -> None: ... + def filterCaseSensitivity(self) -> Qt.CaseSensitivity: ... + def setFilterKeyColumn(self, column: int) -> None: ... + def filterKeyColumn(self) -> int: ... + def filterRegularExpression(self) -> QRegularExpression: ... + def filterRegExp(self) -> QRegExp: ... + def mapSelectionFromSource(self, sourceSelection: QItemSelection) -> QItemSelection: ... + def mapSelectionToSource(self, proxySelection: QItemSelection) -> QItemSelection: ... + def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... + def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... + def setSourceModel(self, sourceModel: typing.Optional[QAbstractItemModel]) -> None: ... + + +class QStandardPaths(PyQt5.sipsimplewrapper): + + class LocateOption(int): + LocateFile = ... # type: QStandardPaths.LocateOption + LocateDirectory = ... # type: QStandardPaths.LocateOption + + class StandardLocation(int): + DesktopLocation = ... # type: QStandardPaths.StandardLocation + DocumentsLocation = ... # type: QStandardPaths.StandardLocation + FontsLocation = ... # type: QStandardPaths.StandardLocation + ApplicationsLocation = ... # type: QStandardPaths.StandardLocation + MusicLocation = ... # type: QStandardPaths.StandardLocation + MoviesLocation = ... # type: QStandardPaths.StandardLocation + PicturesLocation = ... # type: QStandardPaths.StandardLocation + TempLocation = ... # type: QStandardPaths.StandardLocation + HomeLocation = ... # type: QStandardPaths.StandardLocation + DataLocation = ... # type: QStandardPaths.StandardLocation + CacheLocation = ... # type: QStandardPaths.StandardLocation + GenericDataLocation = ... # type: QStandardPaths.StandardLocation + RuntimeLocation = ... # type: QStandardPaths.StandardLocation + ConfigLocation = ... # type: QStandardPaths.StandardLocation + DownloadLocation = ... # type: QStandardPaths.StandardLocation + GenericCacheLocation = ... # type: QStandardPaths.StandardLocation + GenericConfigLocation = ... # type: QStandardPaths.StandardLocation + AppDataLocation = ... # type: QStandardPaths.StandardLocation + AppLocalDataLocation = ... # type: QStandardPaths.StandardLocation + AppConfigLocation = ... # type: QStandardPaths.StandardLocation + + class LocateOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStandardPaths.LocateOptions', 'QStandardPaths.LocateOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStandardPaths.LocateOptions', 'QStandardPaths.LocateOption']) -> 'QStandardPaths.LocateOptions': ... + def __xor__(self, f: typing.Union['QStandardPaths.LocateOptions', 'QStandardPaths.LocateOption']) -> 'QStandardPaths.LocateOptions': ... + def __ior__(self, f: typing.Union['QStandardPaths.LocateOptions', 'QStandardPaths.LocateOption']) -> 'QStandardPaths.LocateOptions': ... + def __or__(self, f: typing.Union['QStandardPaths.LocateOptions', 'QStandardPaths.LocateOption']) -> 'QStandardPaths.LocateOptions': ... + def __iand__(self, f: typing.Union['QStandardPaths.LocateOptions', 'QStandardPaths.LocateOption']) -> 'QStandardPaths.LocateOptions': ... + def __and__(self, f: typing.Union['QStandardPaths.LocateOptions', 'QStandardPaths.LocateOption']) -> 'QStandardPaths.LocateOptions': ... + def __invert__(self) -> 'QStandardPaths.LocateOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, a0: 'QStandardPaths') -> None: ... + + @staticmethod + def setTestModeEnabled(testMode: bool) -> None: ... + @staticmethod + def enableTestMode(testMode: bool) -> None: ... + @staticmethod + def findExecutable(executableName: typing.Optional[str], paths: typing.Iterable[typing.Optional[str]] = ...) -> str: ... + @staticmethod + def displayName(type: 'QStandardPaths.StandardLocation') -> str: ... + @staticmethod + def locateAll(type: 'QStandardPaths.StandardLocation', fileName: typing.Optional[str], options: 'QStandardPaths.LocateOptions' = ...) -> typing.List[str]: ... + @staticmethod + def locate(type: 'QStandardPaths.StandardLocation', fileName: typing.Optional[str], options: 'QStandardPaths.LocateOptions' = ...) -> str: ... + @staticmethod + def standardLocations(type: 'QStandardPaths.StandardLocation') -> typing.List[str]: ... + @staticmethod + def writableLocation(type: 'QStandardPaths.StandardLocation') -> str: ... + + +class QState(QAbstractState): + + class RestorePolicy(int): + DontRestoreProperties = ... # type: QState.RestorePolicy + RestoreProperties = ... # type: QState.RestorePolicy + + class ChildMode(int): + ExclusiveStates = ... # type: QState.ChildMode + ParallelStates = ... # type: QState.ChildMode + + @typing.overload + def __init__(self, parent: typing.Optional['QState'] = ...) -> None: ... + @typing.overload + def __init__(self, childMode: 'QState.ChildMode', parent: typing.Optional['QState'] = ...) -> None: ... + + errorStateChanged: typing.ClassVar[pyqtSignal] + initialStateChanged: typing.ClassVar[pyqtSignal] + childModeChanged: typing.ClassVar[pyqtSignal] + def event(self, e: typing.Optional[QEvent]) -> bool: ... + def onExit(self, event: typing.Optional[QEvent]) -> None: ... + def onEntry(self, event: typing.Optional[QEvent]) -> None: ... + propertiesAssigned: typing.ClassVar[pyqtSignal] + finished: typing.ClassVar[pyqtSignal] + def assignProperty(self, object: typing.Optional[QObject], name: typing.Optional[str], value: typing.Any) -> None: ... + def setChildMode(self, mode: 'QState.ChildMode') -> None: ... + def childMode(self) -> 'QState.ChildMode': ... + def setInitialState(self, state: typing.Optional[QAbstractState]) -> None: ... + def initialState(self) -> typing.Optional[QAbstractState]: ... + def transitions(self) -> typing.List[QAbstractTransition]: ... + def removeTransition(self, transition: typing.Optional[QAbstractTransition]) -> None: ... + @typing.overload + def addTransition(self, transition: typing.Optional[QAbstractTransition]) -> None: ... + @typing.overload + def addTransition(self, signal: pyqtBoundSignal, target: typing.Optional[QAbstractState]) -> typing.Optional[QSignalTransition]: ... + @typing.overload + def addTransition(self, target: typing.Optional[QAbstractState]) -> typing.Optional[QAbstractTransition]: ... + def setErrorState(self, state: typing.Optional[QAbstractState]) -> None: ... + def errorState(self) -> typing.Optional[QAbstractState]: ... + + +class QStateMachine(QState): + + class Error(int): + NoError = ... # type: QStateMachine.Error + NoInitialStateError = ... # type: QStateMachine.Error + NoDefaultStateInHistoryStateError = ... # type: QStateMachine.Error + NoCommonAncestorForTransitionError = ... # type: QStateMachine.Error + StateMachineChildModeSetToParallelError = ... # type: QStateMachine.Error + + class EventPriority(int): + NormalPriority = ... # type: QStateMachine.EventPriority + HighPriority = ... # type: QStateMachine.EventPriority + + class SignalEvent(QEvent): + + def arguments(self) -> typing.List[typing.Any]: ... + def signalIndex(self) -> int: ... + def sender(self) -> typing.Optional[QObject]: ... + + class WrappedEvent(QEvent): + + def event(self) -> typing.Optional[QEvent]: ... + def object(self) -> typing.Optional[QObject]: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, childMode: QState.ChildMode, parent: typing.Optional[QObject] = ...) -> None: ... + + def event(self, e: typing.Optional[QEvent]) -> bool: ... + def onExit(self, event: typing.Optional[QEvent]) -> None: ... + def onEntry(self, event: typing.Optional[QEvent]) -> None: ... + runningChanged: typing.ClassVar[pyqtSignal] + stopped: typing.ClassVar[pyqtSignal] + started: typing.ClassVar[pyqtSignal] + def setRunning(self, running: bool) -> None: ... + def stop(self) -> None: ... + def start(self) -> None: ... + def eventFilter(self, watched: typing.Optional[QObject], event: typing.Optional[QEvent]) -> bool: ... + def configuration(self) -> typing.Set[QAbstractState]: ... + def cancelDelayedEvent(self, id: int) -> bool: ... + def postDelayedEvent(self, event: typing.Optional[QEvent], delay: int) -> int: ... + def postEvent(self, event: typing.Optional[QEvent], priority: 'QStateMachine.EventPriority' = ...) -> None: ... + def setGlobalRestorePolicy(self, restorePolicy: QState.RestorePolicy) -> None: ... + def globalRestorePolicy(self) -> QState.RestorePolicy: ... + def removeDefaultAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> None: ... + def defaultAnimations(self) -> typing.List[QAbstractAnimation]: ... + def addDefaultAnimation(self, animation: typing.Optional[QAbstractAnimation]) -> None: ... + def setAnimated(self, enabled: bool) -> None: ... + def isAnimated(self) -> bool: ... + def isRunning(self) -> bool: ... + def clearError(self) -> None: ... + def errorString(self) -> str: ... + def error(self) -> 'QStateMachine.Error': ... + def removeState(self, state: typing.Optional[QAbstractState]) -> None: ... + def addState(self, state: typing.Optional[QAbstractState]) -> None: ... + + +class QStorageInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, path: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, dir: QDir) -> None: ... + @typing.overload + def __init__(self, other: 'QStorageInfo') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def subvolume(self) -> QByteArray: ... + def blockSize(self) -> int: ... + def isRoot(self) -> bool: ... + @staticmethod + def root() -> 'QStorageInfo': ... + @staticmethod + def mountedVolumes() -> typing.List['QStorageInfo']: ... + def refresh(self) -> None: ... + def isValid(self) -> bool: ... + def isReady(self) -> bool: ... + def isReadOnly(self) -> bool: ... + def bytesAvailable(self) -> int: ... + def bytesFree(self) -> int: ... + def bytesTotal(self) -> int: ... + def displayName(self) -> str: ... + def name(self) -> str: ... + def fileSystemType(self) -> QByteArray: ... + def device(self) -> QByteArray: ... + def rootPath(self) -> str: ... + def setPath(self, path: typing.Optional[str]) -> None: ... + def swap(self, other: 'QStorageInfo') -> None: ... + + +class QStringListModel(QAbstractListModel): + + @typing.overload + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + @typing.overload + def __init__(self, strings: typing.Iterable[typing.Optional[str]], parent: typing.Optional[QObject] = ...) -> None: ... + + def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... + def itemData(self, index: QModelIndex) -> typing.Dict[int, typing.Any]: ... + def moveRows(self, sourceParent: QModelIndex, sourceRow: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def sibling(self, row: int, column: int, idx: QModelIndex) -> QModelIndex: ... + def supportedDropActions(self) -> Qt.DropActions: ... + def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... + def setStringList(self, strings: typing.Iterable[typing.Optional[str]]) -> None: ... + def stringList(self) -> typing.List[str]: ... + def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def flags(self, index: QModelIndex) -> Qt.ItemFlags: ... + def setData(self, index: QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, index: QModelIndex, role: int) -> typing.Any: ... + def rowCount(self, parent: QModelIndex = ...) -> int: ... + + +class QSystemSemaphore(PyQt5.sipsimplewrapper): + + class SystemSemaphoreError(int): + NoError = ... # type: QSystemSemaphore.SystemSemaphoreError + PermissionDenied = ... # type: QSystemSemaphore.SystemSemaphoreError + KeyError = ... # type: QSystemSemaphore.SystemSemaphoreError + AlreadyExists = ... # type: QSystemSemaphore.SystemSemaphoreError + NotFound = ... # type: QSystemSemaphore.SystemSemaphoreError + OutOfResources = ... # type: QSystemSemaphore.SystemSemaphoreError + UnknownError = ... # type: QSystemSemaphore.SystemSemaphoreError + + class AccessMode(int): + Open = ... # type: QSystemSemaphore.AccessMode + Create = ... # type: QSystemSemaphore.AccessMode + + def __init__(self, key: typing.Optional[str], initialValue: int = ..., mode: 'QSystemSemaphore.AccessMode' = ...) -> None: ... + + def errorString(self) -> str: ... + def error(self) -> 'QSystemSemaphore.SystemSemaphoreError': ... + def release(self, n: int = ...) -> bool: ... + def acquire(self) -> bool: ... + def key(self) -> str: ... + def setKey(self, key: typing.Optional[str], initialValue: int = ..., mode: 'QSystemSemaphore.AccessMode' = ...) -> None: ... + + +class QTemporaryDir(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, templateName: typing.Optional[str]) -> None: ... + + def filePath(self, fileName: typing.Optional[str]) -> str: ... + def errorString(self) -> str: ... + def path(self) -> str: ... + def remove(self) -> bool: ... + def setAutoRemove(self, b: bool) -> None: ... + def autoRemove(self) -> bool: ... + def isValid(self) -> bool: ... + + +class QTemporaryFile(QFile): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, templateName: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QObject]) -> None: ... + @typing.overload + def __init__(self, templateName: typing.Optional[str], parent: typing.Optional[QObject]) -> None: ... + + def rename(self, newName: typing.Optional[str]) -> bool: ... + @typing.overload + @staticmethod + def createNativeFile(fileName: typing.Optional[str]) -> typing.Optional['QTemporaryFile']: ... + @typing.overload + @staticmethod + def createNativeFile(file: QFile) -> typing.Optional['QTemporaryFile']: ... + def setFileTemplate(self, name: typing.Optional[str]) -> None: ... + def fileTemplate(self) -> str: ... + def fileName(self) -> str: ... + @typing.overload + def open(self) -> bool: ... + @typing.overload + def open(self, flags: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag]) -> bool: ... + def setAutoRemove(self, b: bool) -> None: ... + def autoRemove(self) -> bool: ... + + +class QTextBoundaryFinder(PyQt5.sipsimplewrapper): + + class BoundaryType(int): + Grapheme = ... # type: QTextBoundaryFinder.BoundaryType + Word = ... # type: QTextBoundaryFinder.BoundaryType + Line = ... # type: QTextBoundaryFinder.BoundaryType + Sentence = ... # type: QTextBoundaryFinder.BoundaryType + + class BoundaryReason(int): + NotAtBoundary = ... # type: QTextBoundaryFinder.BoundaryReason + SoftHyphen = ... # type: QTextBoundaryFinder.BoundaryReason + BreakOpportunity = ... # type: QTextBoundaryFinder.BoundaryReason + StartOfItem = ... # type: QTextBoundaryFinder.BoundaryReason + EndOfItem = ... # type: QTextBoundaryFinder.BoundaryReason + MandatoryBreak = ... # type: QTextBoundaryFinder.BoundaryReason + + class BoundaryReasons(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextBoundaryFinder.BoundaryReasons', 'QTextBoundaryFinder.BoundaryReason']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextBoundaryFinder.BoundaryReasons', 'QTextBoundaryFinder.BoundaryReason']) -> 'QTextBoundaryFinder.BoundaryReasons': ... + def __xor__(self, f: typing.Union['QTextBoundaryFinder.BoundaryReasons', 'QTextBoundaryFinder.BoundaryReason']) -> 'QTextBoundaryFinder.BoundaryReasons': ... + def __ior__(self, f: typing.Union['QTextBoundaryFinder.BoundaryReasons', 'QTextBoundaryFinder.BoundaryReason']) -> 'QTextBoundaryFinder.BoundaryReasons': ... + def __or__(self, f: typing.Union['QTextBoundaryFinder.BoundaryReasons', 'QTextBoundaryFinder.BoundaryReason']) -> 'QTextBoundaryFinder.BoundaryReasons': ... + def __iand__(self, f: typing.Union['QTextBoundaryFinder.BoundaryReasons', 'QTextBoundaryFinder.BoundaryReason']) -> 'QTextBoundaryFinder.BoundaryReasons': ... + def __and__(self, f: typing.Union['QTextBoundaryFinder.BoundaryReasons', 'QTextBoundaryFinder.BoundaryReason']) -> 'QTextBoundaryFinder.BoundaryReasons': ... + def __invert__(self) -> 'QTextBoundaryFinder.BoundaryReasons': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QTextBoundaryFinder') -> None: ... + @typing.overload + def __init__(self, type: 'QTextBoundaryFinder.BoundaryType', string: typing.Optional[str]) -> None: ... + + def boundaryReasons(self) -> 'QTextBoundaryFinder.BoundaryReasons': ... + def isAtBoundary(self) -> bool: ... + def toPreviousBoundary(self) -> int: ... + def toNextBoundary(self) -> int: ... + def setPosition(self, position: int) -> None: ... + def position(self) -> int: ... + def toEnd(self) -> None: ... + def toStart(self) -> None: ... + def string(self) -> str: ... + def type(self) -> 'QTextBoundaryFinder.BoundaryType': ... + def isValid(self) -> bool: ... + + +class QTextCodec(PyQt5.sip.wrapper): + + class ConversionFlag(int): + DefaultConversion = ... # type: QTextCodec.ConversionFlag + ConvertInvalidToNull = ... # type: QTextCodec.ConversionFlag + IgnoreHeader = ... # type: QTextCodec.ConversionFlag + + class ConversionFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag']) -> 'QTextCodec.ConversionFlags': ... + def __xor__(self, f: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag']) -> 'QTextCodec.ConversionFlags': ... + def __ior__(self, f: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag']) -> 'QTextCodec.ConversionFlags': ... + def __or__(self, f: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag']) -> 'QTextCodec.ConversionFlags': ... + def __iand__(self, f: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag']) -> 'QTextCodec.ConversionFlags': ... + def __and__(self, f: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag']) -> 'QTextCodec.ConversionFlags': ... + def __invert__(self) -> 'QTextCodec.ConversionFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ConverterState(PyQt5.sipsimplewrapper): + + def __init__(self, flags: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag'] = ...) -> None: ... + + def __init__(self) -> None: ... + + def convertFromUnicode(self, in_: typing.Optional[PyQt5.sip.array[str]], state: typing.Optional['QTextCodec.ConverterState']) -> QByteArray: ... + def convertToUnicode(self, in_: typing.Optional[PyQt5.sip.array[bytes]], state: typing.Optional['QTextCodec.ConverterState']) -> str: ... + def mibEnum(self) -> int: ... + def aliases(self) -> typing.List[QByteArray]: ... + def name(self) -> QByteArray: ... + def fromUnicode(self, uc: typing.Optional[str]) -> QByteArray: ... + @typing.overload + def toUnicode(self, a0: typing.Union[QByteArray, bytes, bytearray]) -> str: ... + @typing.overload + def toUnicode(self, chars: typing.Optional[bytes]) -> str: ... + @typing.overload + def toUnicode(self, in_: typing.Optional[PyQt5.sip.array[bytes]], state: typing.Optional['QTextCodec.ConverterState'] = ...) -> str: ... + def canEncode(self, a0: typing.Optional[str]) -> bool: ... + def makeEncoder(self, flags: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag'] = ...) -> typing.Optional['QTextEncoder']: ... + def makeDecoder(self, flags: typing.Union['QTextCodec.ConversionFlags', 'QTextCodec.ConversionFlag'] = ...) -> typing.Optional['QTextDecoder']: ... + @staticmethod + def setCodecForLocale(c: typing.Optional['QTextCodec']) -> None: ... + @staticmethod + def codecForLocale() -> typing.Optional['QTextCodec']: ... + @staticmethod + def availableMibs() -> typing.List[int]: ... + @staticmethod + def availableCodecs() -> typing.List[QByteArray]: ... + @typing.overload + @staticmethod + def codecForUtfText(ba: typing.Union[QByteArray, bytes, bytearray]) -> typing.Optional['QTextCodec']: ... + @typing.overload + @staticmethod + def codecForUtfText(ba: typing.Union[QByteArray, bytes, bytearray], defaultCodec: typing.Optional['QTextCodec']) -> typing.Optional['QTextCodec']: ... + @typing.overload + @staticmethod + def codecForHtml(ba: typing.Union[QByteArray, bytes, bytearray]) -> typing.Optional['QTextCodec']: ... + @typing.overload + @staticmethod + def codecForHtml(ba: typing.Union[QByteArray, bytes, bytearray], defaultCodec: typing.Optional['QTextCodec']) -> typing.Optional['QTextCodec']: ... + @staticmethod + def codecForMib(mib: int) -> typing.Optional['QTextCodec']: ... + @typing.overload + @staticmethod + def codecForName(name: typing.Union[QByteArray, bytes, bytearray]) -> typing.Optional['QTextCodec']: ... + @typing.overload + @staticmethod + def codecForName(name: typing.Optional[str]) -> typing.Optional['QTextCodec']: ... + + +class QTextEncoder(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self, codec: typing.Optional[QTextCodec]) -> None: ... + @typing.overload + def __init__(self, codec: typing.Optional[QTextCodec], flags: typing.Union[QTextCodec.ConversionFlags, QTextCodec.ConversionFlag]) -> None: ... + + def fromUnicode(self, str: typing.Optional[str]) -> QByteArray: ... + + +class QTextDecoder(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self, codec: typing.Optional[QTextCodec]) -> None: ... + @typing.overload + def __init__(self, codec: typing.Optional[QTextCodec], flags: typing.Union[QTextCodec.ConversionFlags, QTextCodec.ConversionFlag]) -> None: ... + + @typing.overload + def toUnicode(self, chars: typing.Optional[PyQt5.sip.array[bytes]]) -> str: ... + @typing.overload + def toUnicode(self, ba: typing.Union[QByteArray, bytes, bytearray]) -> str: ... + + +class QTextStream(PyQt5.sipsimplewrapper): + + class Status(int): + Ok = ... # type: QTextStream.Status + ReadPastEnd = ... # type: QTextStream.Status + ReadCorruptData = ... # type: QTextStream.Status + WriteFailed = ... # type: QTextStream.Status + + class NumberFlag(int): + ShowBase = ... # type: QTextStream.NumberFlag + ForcePoint = ... # type: QTextStream.NumberFlag + ForceSign = ... # type: QTextStream.NumberFlag + UppercaseBase = ... # type: QTextStream.NumberFlag + UppercaseDigits = ... # type: QTextStream.NumberFlag + + class FieldAlignment(int): + AlignLeft = ... # type: QTextStream.FieldAlignment + AlignRight = ... # type: QTextStream.FieldAlignment + AlignCenter = ... # type: QTextStream.FieldAlignment + AlignAccountingStyle = ... # type: QTextStream.FieldAlignment + + class RealNumberNotation(int): + SmartNotation = ... # type: QTextStream.RealNumberNotation + FixedNotation = ... # type: QTextStream.RealNumberNotation + ScientificNotation = ... # type: QTextStream.RealNumberNotation + + class NumberFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextStream.NumberFlags', 'QTextStream.NumberFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextStream.NumberFlags', 'QTextStream.NumberFlag']) -> 'QTextStream.NumberFlags': ... + def __xor__(self, f: typing.Union['QTextStream.NumberFlags', 'QTextStream.NumberFlag']) -> 'QTextStream.NumberFlags': ... + def __ior__(self, f: typing.Union['QTextStream.NumberFlags', 'QTextStream.NumberFlag']) -> 'QTextStream.NumberFlags': ... + def __or__(self, f: typing.Union['QTextStream.NumberFlags', 'QTextStream.NumberFlag']) -> 'QTextStream.NumberFlags': ... + def __iand__(self, f: typing.Union['QTextStream.NumberFlags', 'QTextStream.NumberFlag']) -> 'QTextStream.NumberFlags': ... + def __and__(self, f: typing.Union['QTextStream.NumberFlags', 'QTextStream.NumberFlag']) -> 'QTextStream.NumberFlags': ... + def __invert__(self) -> 'QTextStream.NumberFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QIODevice]) -> None: ... + @typing.overload + def __init__(self, array: typing.Optional[QByteArray], mode: typing.Union[QIODevice.OpenMode, QIODevice.OpenModeFlag] = ...) -> None: ... + + def locale(self) -> QLocale: ... + def setLocale(self, locale: QLocale) -> None: ... + @typing.overload + def __lshift__(self, s: typing.Optional[str]) -> 'QTextStream': ... + @typing.overload + def __lshift__(self, array: typing.Union[QByteArray, bytes, bytearray]) -> 'QTextStream': ... + @typing.overload + def __lshift__(self, f: float) -> 'QTextStream': ... + @typing.overload + def __lshift__(self, i: int) -> 'QTextStream': ... + @typing.overload + def __lshift__(self, m: 'QTextStreamManipulator') -> 'QTextStream': ... + def __rshift__(self, array: QByteArray) -> 'QTextStream': ... + def pos(self) -> int: ... + def resetStatus(self) -> None: ... + def setStatus(self, status: 'QTextStream.Status') -> None: ... + def status(self) -> 'QTextStream.Status': ... + def realNumberPrecision(self) -> int: ... + def setRealNumberPrecision(self, precision: int) -> None: ... + def realNumberNotation(self) -> 'QTextStream.RealNumberNotation': ... + def setRealNumberNotation(self, notation: 'QTextStream.RealNumberNotation') -> None: ... + def integerBase(self) -> int: ... + def setIntegerBase(self, base: int) -> None: ... + def numberFlags(self) -> 'QTextStream.NumberFlags': ... + def setNumberFlags(self, flags: typing.Union['QTextStream.NumberFlags', 'QTextStream.NumberFlag']) -> None: ... + def fieldWidth(self) -> int: ... + def setFieldWidth(self, width: int) -> None: ... + def padChar(self) -> str: ... + def setPadChar(self, ch: str) -> None: ... + def fieldAlignment(self) -> 'QTextStream.FieldAlignment': ... + def setFieldAlignment(self, alignment: 'QTextStream.FieldAlignment') -> None: ... + def readAll(self) -> str: ... + def readLine(self, maxLength: int = ...) -> str: ... + def read(self, maxlen: int) -> str: ... + def skipWhiteSpace(self) -> None: ... + def seek(self, pos: int) -> bool: ... + def flush(self) -> None: ... + def reset(self) -> None: ... + def atEnd(self) -> bool: ... + def device(self) -> typing.Optional[QIODevice]: ... + def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... + def generateByteOrderMark(self) -> bool: ... + def setGenerateByteOrderMark(self, generate: bool) -> None: ... + def autoDetectUnicode(self) -> bool: ... + def setAutoDetectUnicode(self, enabled: bool) -> None: ... + def codec(self) -> typing.Optional[QTextCodec]: ... + @typing.overload + def setCodec(self, codec: typing.Optional[QTextCodec]) -> None: ... + @typing.overload + def setCodec(self, codecName: typing.Optional[str]) -> None: ... + + +class QTextStreamManipulator(PyQt5.sipsimplewrapper): ... + + +class QThread(QObject): + + class Priority(int): + IdlePriority = ... # type: QThread.Priority + LowestPriority = ... # type: QThread.Priority + LowPriority = ... # type: QThread.Priority + NormalPriority = ... # type: QThread.Priority + HighPriority = ... # type: QThread.Priority + HighestPriority = ... # type: QThread.Priority + TimeCriticalPriority = ... # type: QThread.Priority + InheritPriority = ... # type: QThread.Priority + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def loopLevel(self) -> int: ... + def isInterruptionRequested(self) -> bool: ... + def requestInterruption(self) -> None: ... + def setEventDispatcher(self, eventDispatcher: typing.Optional[QAbstractEventDispatcher]) -> None: ... + def eventDispatcher(self) -> typing.Optional[QAbstractEventDispatcher]: ... + @staticmethod + def usleep(a0: int) -> None: ... + @staticmethod + def msleep(a0: int) -> None: ... + @staticmethod + def sleep(a0: int) -> None: ... + def event(self, event: typing.Optional[QEvent]) -> bool: ... + @staticmethod + def setTerminationEnabled(enabled: bool = ...) -> None: ... + def exec(self) -> int: ... + def exec_(self) -> int: ... + def run(self) -> None: ... + finished: typing.ClassVar[pyqtSignal] + started: typing.ClassVar[pyqtSignal] + @typing.overload + def wait(self, msecs: int = ...) -> bool: ... + @typing.overload + def wait(self, deadline: QDeadlineTimer) -> bool: ... + def quit(self) -> None: ... + def terminate(self) -> None: ... + def start(self, priority: 'QThread.Priority' = ...) -> None: ... + def exit(self, returnCode: int = ...) -> None: ... + def stackSize(self) -> int: ... + def setStackSize(self, stackSize: int) -> None: ... + def priority(self) -> 'QThread.Priority': ... + def setPriority(self, priority: 'QThread.Priority') -> None: ... + def isRunning(self) -> bool: ... + def isFinished(self) -> bool: ... + @staticmethod + def yieldCurrentThread() -> None: ... + @staticmethod + def idealThreadCount() -> int: ... + @staticmethod + def currentThreadId() -> typing.Optional[PyQt5.sip.voidptr]: ... + @staticmethod + def currentThread() -> typing.Optional['QThread']: ... + + +class QThreadPool(QObject): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def contains(self, thread: typing.Optional[QThread]) -> bool: ... + def stackSize(self) -> int: ... + def setStackSize(self, stackSize: int) -> None: ... + def cancel(self, runnable: typing.Optional[QRunnable]) -> None: ... + def clear(self) -> None: ... + def waitForDone(self, msecs: int = ...) -> bool: ... + def releaseThread(self) -> None: ... + def reserveThread(self) -> None: ... + def activeThreadCount(self) -> int: ... + def setMaxThreadCount(self, maxThreadCount: int) -> None: ... + def maxThreadCount(self) -> int: ... + def setExpiryTimeout(self, expiryTimeout: int) -> None: ... + def expiryTimeout(self) -> int: ... + def tryTake(self, runnable: typing.Optional[QRunnable]) -> bool: ... + @typing.overload + def tryStart(self, runnable: typing.Optional[QRunnable]) -> bool: ... + @typing.overload + def tryStart(self, functionToRun: typing.Callable[[], None]) -> bool: ... + @typing.overload + def start(self, runnable: typing.Optional[QRunnable], priority: int = ...) -> None: ... + @typing.overload + def start(self, functionToRun: typing.Callable[[], None], priority: int = ...) -> None: ... + @staticmethod + def globalInstance() -> typing.Optional['QThreadPool']: ... + + +class QTimeLine(QObject): + + class State(int): + NotRunning = ... # type: QTimeLine.State + Paused = ... # type: QTimeLine.State + Running = ... # type: QTimeLine.State + + class Direction(int): + Forward = ... # type: QTimeLine.Direction + Backward = ... # type: QTimeLine.Direction + + class CurveShape(int): + EaseInCurve = ... # type: QTimeLine.CurveShape + EaseOutCurve = ... # type: QTimeLine.CurveShape + EaseInOutCurve = ... # type: QTimeLine.CurveShape + LinearCurve = ... # type: QTimeLine.CurveShape + SineCurve = ... # type: QTimeLine.CurveShape + CosineCurve = ... # type: QTimeLine.CurveShape + + def __init__(self, duration: int = ..., parent: typing.Optional[QObject] = ...) -> None: ... + + def setEasingCurve(self, curve: typing.Union[QEasingCurve, QEasingCurve.Type]) -> None: ... + def easingCurve(self) -> QEasingCurve: ... + def timerEvent(self, event: typing.Optional[QTimerEvent]) -> None: ... + valueChanged: typing.ClassVar[pyqtSignal] + stateChanged: typing.ClassVar[pyqtSignal] + frameChanged: typing.ClassVar[pyqtSignal] + finished: typing.ClassVar[pyqtSignal] + def toggleDirection(self) -> None: ... + def stop(self) -> None: ... + def start(self) -> None: ... + def setPaused(self, paused: bool) -> None: ... + def setCurrentTime(self, msec: int) -> None: ... + def resume(self) -> None: ... + def valueForTime(self, msec: int) -> float: ... + def frameForTime(self, msec: int) -> int: ... + def currentValue(self) -> float: ... + def currentFrame(self) -> int: ... + def currentTime(self) -> int: ... + def setCurveShape(self, shape: 'QTimeLine.CurveShape') -> None: ... + def curveShape(self) -> 'QTimeLine.CurveShape': ... + def setUpdateInterval(self, interval: int) -> None: ... + def updateInterval(self) -> int: ... + def setFrameRange(self, startFrame: int, endFrame: int) -> None: ... + def setEndFrame(self, frame: int) -> None: ... + def endFrame(self) -> int: ... + def setStartFrame(self, frame: int) -> None: ... + def startFrame(self) -> int: ... + def setDuration(self, duration: int) -> None: ... + def duration(self) -> int: ... + def setDirection(self, direction: 'QTimeLine.Direction') -> None: ... + def direction(self) -> 'QTimeLine.Direction': ... + def setLoopCount(self, count: int) -> None: ... + def loopCount(self) -> int: ... + def state(self) -> 'QTimeLine.State': ... + + +class QTimer(QObject): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def remainingTime(self) -> int: ... + def timerType(self) -> Qt.TimerType: ... + def setTimerType(self, atype: Qt.TimerType) -> None: ... + def timerEvent(self, a0: typing.Optional[QTimerEvent]) -> None: ... + timeout: typing.ClassVar[pyqtSignal] + def stop(self) -> None: ... + @typing.overload + def start(self, msec: int) -> None: ... + @typing.overload + def start(self) -> None: ... + @typing.overload + @staticmethod + def singleShot(msec: int, slot: PYQT_SLOT) -> None: ... + @typing.overload + @staticmethod + def singleShot(msec: int, timerType: Qt.TimerType, slot: PYQT_SLOT) -> None: ... + def setSingleShot(self, asingleShot: bool) -> None: ... + def isSingleShot(self) -> bool: ... + def interval(self) -> int: ... + def setInterval(self, msec: int) -> None: ... + def timerId(self) -> int: ... + def isActive(self) -> bool: ... + + +class QTimeZone(PyQt5.sipsimplewrapper): + + class NameType(int): + DefaultName = ... # type: QTimeZone.NameType + LongName = ... # type: QTimeZone.NameType + ShortName = ... # type: QTimeZone.NameType + OffsetName = ... # type: QTimeZone.NameType + + class TimeType(int): + StandardTime = ... # type: QTimeZone.TimeType + DaylightTime = ... # type: QTimeZone.TimeType + GenericTime = ... # type: QTimeZone.TimeType + + class OffsetData(PyQt5.sipsimplewrapper): + + abbreviation = ... # type: typing.Optional[str] + atUtc = ... # type: typing.Union[QDateTime, datetime.datetime] + daylightTimeOffset = ... # type: int + offsetFromUtc = ... # type: int + standardTimeOffset = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTimeZone.OffsetData') -> None: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, ianaId: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, offsetSeconds: int) -> None: ... + @typing.overload + def __init__(self, zoneId: typing.Union[QByteArray, bytes, bytearray], offsetSeconds: int, name: typing.Optional[str], abbreviation: typing.Optional[str], country: QLocale.Country = ..., comment: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QTimeZone') -> None: ... + + @staticmethod + def utc() -> 'QTimeZone': ... + @staticmethod + def systemTimeZone() -> 'QTimeZone': ... + @typing.overload + @staticmethod + def windowsIdToIanaIds(windowsId: typing.Union[QByteArray, bytes, bytearray]) -> typing.List[QByteArray]: ... + @typing.overload + @staticmethod + def windowsIdToIanaIds(windowsId: typing.Union[QByteArray, bytes, bytearray], country: QLocale.Country) -> typing.List[QByteArray]: ... + @typing.overload + @staticmethod + def windowsIdToDefaultIanaId(windowsId: typing.Union[QByteArray, bytes, bytearray]) -> QByteArray: ... + @typing.overload + @staticmethod + def windowsIdToDefaultIanaId(windowsId: typing.Union[QByteArray, bytes, bytearray], country: QLocale.Country) -> QByteArray: ... + @staticmethod + def ianaIdToWindowsId(ianaId: typing.Union[QByteArray, bytes, bytearray]) -> QByteArray: ... + @typing.overload + @staticmethod + def availableTimeZoneIds() -> typing.List[QByteArray]: ... + @typing.overload + @staticmethod + def availableTimeZoneIds(country: QLocale.Country) -> typing.List[QByteArray]: ... + @typing.overload + @staticmethod + def availableTimeZoneIds(offsetSeconds: int) -> typing.List[QByteArray]: ... + @staticmethod + def isTimeZoneIdAvailable(ianaId: typing.Union[QByteArray, bytes, bytearray]) -> bool: ... + @staticmethod + def systemTimeZoneId() -> QByteArray: ... + def transitions(self, fromDateTime: typing.Union[QDateTime, datetime.datetime], toDateTime: typing.Union[QDateTime, datetime.datetime]) -> typing.List['QTimeZone.OffsetData']: ... + def previousTransition(self, beforeDateTime: typing.Union[QDateTime, datetime.datetime]) -> 'QTimeZone.OffsetData': ... + def nextTransition(self, afterDateTime: typing.Union[QDateTime, datetime.datetime]) -> 'QTimeZone.OffsetData': ... + def hasTransitions(self) -> bool: ... + def offsetData(self, forDateTime: typing.Union[QDateTime, datetime.datetime]) -> 'QTimeZone.OffsetData': ... + def isDaylightTime(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> bool: ... + def hasDaylightTime(self) -> bool: ... + def daylightTimeOffset(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> int: ... + def standardTimeOffset(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> int: ... + def offsetFromUtc(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> int: ... + def abbreviation(self, atDateTime: typing.Union[QDateTime, datetime.datetime]) -> str: ... + @typing.overload + def displayName(self, atDateTime: typing.Union[QDateTime, datetime.datetime], nameType: 'QTimeZone.NameType' = ..., locale: QLocale = ...) -> str: ... + @typing.overload + def displayName(self, timeType: 'QTimeZone.TimeType', nameType: 'QTimeZone.NameType' = ..., locale: QLocale = ...) -> str: ... + def comment(self) -> str: ... + def country(self) -> QLocale.Country: ... + def id(self) -> QByteArray: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def swap(self, other: 'QTimeZone') -> None: ... + + +class QTranslator(QObject): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def filePath(self) -> str: ... + def language(self) -> str: ... + def loadFromData(self, data: typing.Optional[PyQt5.sip.array[bytes]], directory: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def load(self, fileName: typing.Optional[str], directory: typing.Optional[str] = ..., searchDelimiters: typing.Optional[str] = ..., suffix: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def load(self, locale: QLocale, fileName: typing.Optional[str], prefix: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., suffix: typing.Optional[str] = ...) -> bool: ... + def isEmpty(self) -> bool: ... + def translate(self, context: typing.Optional[str], sourceText: typing.Optional[str], disambiguation: typing.Optional[str] = ..., n: int = ...) -> str: ... + + +class QTransposeProxyModel(QAbstractProxyModel): + + def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ... + + def sort(self, column: int, order: Qt.SortOrder = ...) -> None: ... + def moveColumns(self, sourceParent: QModelIndex, sourceColumn: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def removeColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertColumns(self, column: int, count: int, parent: QModelIndex = ...) -> bool: ... + def moveRows(self, sourceParent: QModelIndex, sourceRow: int, count: int, destinationParent: QModelIndex, destinationChild: int) -> bool: ... + def removeRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def insertRows(self, row: int, count: int, parent: QModelIndex = ...) -> bool: ... + def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: ... + def parent(self, index: QModelIndex) -> QModelIndex: ... + def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex: ... + def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex: ... + def itemData(self, index: QModelIndex) -> typing.Dict[int, typing.Any]: ... + def span(self, index: QModelIndex) -> QSize: ... + def setItemData(self, index: QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... + def setHeaderData(self, section: int, orientation: Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... + def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any: ... + def columnCount(self, parent: QModelIndex = ...) -> int: ... + def rowCount(self, parent: QModelIndex = ...) -> int: ... + def setSourceModel(self, newSourceModel: typing.Optional[QAbstractItemModel]) -> None: ... + + +class QUrl(PyQt5.sipsimplewrapper): + + class UserInputResolutionOption(int): + DefaultResolution = ... # type: QUrl.UserInputResolutionOption + AssumeLocalFile = ... # type: QUrl.UserInputResolutionOption + + class ComponentFormattingOption(int): + PrettyDecoded = ... # type: QUrl.ComponentFormattingOption + EncodeSpaces = ... # type: QUrl.ComponentFormattingOption + EncodeUnicode = ... # type: QUrl.ComponentFormattingOption + EncodeDelimiters = ... # type: QUrl.ComponentFormattingOption + EncodeReserved = ... # type: QUrl.ComponentFormattingOption + DecodeReserved = ... # type: QUrl.ComponentFormattingOption + FullyEncoded = ... # type: QUrl.ComponentFormattingOption + FullyDecoded = ... # type: QUrl.ComponentFormattingOption + + class UrlFormattingOption(int): + None_ = ... # type: QUrl.UrlFormattingOption + RemoveScheme = ... # type: QUrl.UrlFormattingOption + RemovePassword = ... # type: QUrl.UrlFormattingOption + RemoveUserInfo = ... # type: QUrl.UrlFormattingOption + RemovePort = ... # type: QUrl.UrlFormattingOption + RemoveAuthority = ... # type: QUrl.UrlFormattingOption + RemovePath = ... # type: QUrl.UrlFormattingOption + RemoveQuery = ... # type: QUrl.UrlFormattingOption + RemoveFragment = ... # type: QUrl.UrlFormattingOption + PreferLocalFile = ... # type: QUrl.UrlFormattingOption + StripTrailingSlash = ... # type: QUrl.UrlFormattingOption + RemoveFilename = ... # type: QUrl.UrlFormattingOption + NormalizePathSegments = ... # type: QUrl.UrlFormattingOption + + class ParsingMode(int): + TolerantMode = ... # type: QUrl.ParsingMode + StrictMode = ... # type: QUrl.ParsingMode + DecodedMode = ... # type: QUrl.ParsingMode + + class FormattingOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: 'QUrl.FormattingOptions') -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __invert__(self) -> 'QUrl.FormattingOptions': ... + def __and__(self, mask: int) -> 'QUrl.FormattingOptions': ... + def __xor__(self, f: 'QUrl.FormattingOptions') -> 'QUrl.FormattingOptions': ... + def __or__(self, f: 'QUrl.FormattingOptions') -> 'QUrl.FormattingOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + def __ixor__(self, f: 'QUrl.FormattingOptions') -> 'QUrl.FormattingOptions': ... + def __ior__(self, f: 'QUrl.FormattingOptions') -> 'QUrl.FormattingOptions': ... + def __iand__(self, mask: int) -> 'QUrl.FormattingOptions': ... + + class ComponentFormattingOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption']) -> 'QUrl.ComponentFormattingOptions': ... + def __xor__(self, f: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption']) -> 'QUrl.ComponentFormattingOptions': ... + def __ior__(self, f: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption']) -> 'QUrl.ComponentFormattingOptions': ... + def __or__(self, f: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption']) -> 'QUrl.ComponentFormattingOptions': ... + def __iand__(self, f: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption']) -> 'QUrl.ComponentFormattingOptions': ... + def __and__(self, f: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption']) -> 'QUrl.ComponentFormattingOptions': ... + def __invert__(self) -> 'QUrl.ComponentFormattingOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class UserInputResolutionOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QUrl.UserInputResolutionOptions', 'QUrl.UserInputResolutionOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QUrl.UserInputResolutionOptions', 'QUrl.UserInputResolutionOption']) -> 'QUrl.UserInputResolutionOptions': ... + def __xor__(self, f: typing.Union['QUrl.UserInputResolutionOptions', 'QUrl.UserInputResolutionOption']) -> 'QUrl.UserInputResolutionOptions': ... + def __ior__(self, f: typing.Union['QUrl.UserInputResolutionOptions', 'QUrl.UserInputResolutionOption']) -> 'QUrl.UserInputResolutionOptions': ... + def __or__(self, f: typing.Union['QUrl.UserInputResolutionOptions', 'QUrl.UserInputResolutionOption']) -> 'QUrl.UserInputResolutionOptions': ... + def __iand__(self, f: typing.Union['QUrl.UserInputResolutionOptions', 'QUrl.UserInputResolutionOption']) -> 'QUrl.UserInputResolutionOptions': ... + def __and__(self, f: typing.Union['QUrl.UserInputResolutionOptions', 'QUrl.UserInputResolutionOption']) -> 'QUrl.UserInputResolutionOptions': ... + def __invert__(self) -> 'QUrl.UserInputResolutionOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, url: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + @typing.overload + def __init__(self, copy: 'QUrl') -> None: ... + + def __ge__(self, url: 'QUrl') -> bool: ... + def matches(self, url: 'QUrl', options: typing.Union['QUrl.FormattingOptions', 'QUrl.UrlFormattingOption', 'QUrl.ComponentFormattingOption']) -> bool: ... + def fileName(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def adjusted(self, options: typing.Union['QUrl.FormattingOptions', 'QUrl.UrlFormattingOption', 'QUrl.ComponentFormattingOption']) -> 'QUrl': ... + @staticmethod + def fromStringList(uris: typing.Iterable[typing.Optional[str]], mode: 'QUrl.ParsingMode' = ...) -> typing.List['QUrl']: ... + @staticmethod + def toStringList(uris: typing.Iterable['QUrl'], options: 'QUrl.FormattingOptions' = ...) -> typing.List[str]: ... + def query(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + @typing.overload + def setQuery(self, query: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + @typing.overload + def setQuery(self, query: 'QUrlQuery') -> None: ... + def toDisplayString(self, options: 'QUrl.FormattingOptions' = ...) -> str: ... + def isLocalFile(self) -> bool: ... + def topLevelDomain(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def swap(self, other: 'QUrl') -> None: ... + @typing.overload + @staticmethod + def fromUserInput(userInput: typing.Optional[str]) -> 'QUrl': ... + @typing.overload + @staticmethod + def fromUserInput(userInput: typing.Optional[str], workingDirectory: typing.Optional[str], options: typing.Union['QUrl.UserInputResolutionOptions', 'QUrl.UserInputResolutionOption'] = ...) -> 'QUrl': ... + @staticmethod + def setIdnWhitelist(a0: typing.Iterable[typing.Optional[str]]) -> None: ... + @staticmethod + def idnWhitelist() -> typing.List[str]: ... + @staticmethod + def toAce(a0: typing.Optional[str]) -> QByteArray: ... + @staticmethod + def fromAce(a0: typing.Union[QByteArray, bytes, bytearray]) -> str: ... + def errorString(self) -> str: ... + def hasFragment(self) -> bool: ... + def hasQuery(self) -> bool: ... + @staticmethod + def toPercentEncoding(input: typing.Optional[str], exclude: typing.Union[QByteArray, bytes, bytearray] = ..., include: typing.Union[QByteArray, bytes, bytearray] = ...) -> QByteArray: ... + @staticmethod + def fromPercentEncoding(a0: typing.Union[QByteArray, bytes, bytearray]) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __lt__(self, url: 'QUrl') -> bool: ... + def isDetached(self) -> bool: ... + def detach(self) -> None: ... + @staticmethod + def fromEncoded(u: typing.Union[QByteArray, bytes, bytearray], mode: 'QUrl.ParsingMode' = ...) -> 'QUrl': ... + def toEncoded(self, options: 'QUrl.FormattingOptions' = ...) -> QByteArray: ... + def toString(self, options: 'QUrl.FormattingOptions' = ...) -> str: ... + def toLocalFile(self) -> str: ... + @staticmethod + def fromLocalFile(localfile: typing.Optional[str]) -> 'QUrl': ... + def isParentOf(self, url: 'QUrl') -> bool: ... + def isRelative(self) -> bool: ... + def resolved(self, relative: 'QUrl') -> 'QUrl': ... + def fragment(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def setFragment(self, fragment: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + def path(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def setPath(self, path: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + def port(self, defaultPort: int = ...) -> int: ... + def setPort(self, port: int) -> None: ... + def host(self, a0: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def setHost(self, host: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + def password(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def setPassword(self, password: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + def userName(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def setUserName(self, userName: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + def userInfo(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def setUserInfo(self, userInfo: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + def authority(self, options: typing.Union['QUrl.ComponentFormattingOptions', 'QUrl.ComponentFormattingOption'] = ...) -> str: ... + def setAuthority(self, authority: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + def scheme(self) -> str: ... + def setScheme(self, scheme: typing.Optional[str]) -> None: ... + def clear(self) -> None: ... + def isEmpty(self) -> bool: ... + def isValid(self) -> bool: ... + def setUrl(self, url: typing.Optional[str], mode: 'QUrl.ParsingMode' = ...) -> None: ... + def url(self, options: 'QUrl.FormattingOptions' = ...) -> str: ... + def __repr__(self) -> str: ... + def __hash__(self) -> int: ... + + +class QUrlQuery(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, url: QUrl) -> None: ... + @typing.overload + def __init__(self, queryString: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, other: 'QUrlQuery') -> None: ... + + def __hash__(self) -> int: ... + @staticmethod + def defaultQueryPairDelimiter() -> str: ... + @staticmethod + def defaultQueryValueDelimiter() -> str: ... + def removeAllQueryItems(self, key: typing.Optional[str]) -> None: ... + def allQueryItemValues(self, key: typing.Optional[str], options: typing.Union[QUrl.ComponentFormattingOptions, QUrl.ComponentFormattingOption] = ...) -> typing.List[str]: ... + def queryItemValue(self, key: typing.Optional[str], options: typing.Union[QUrl.ComponentFormattingOptions, QUrl.ComponentFormattingOption] = ...) -> str: ... + def removeQueryItem(self, key: typing.Optional[str]) -> None: ... + def addQueryItem(self, key: typing.Optional[str], value: typing.Optional[str]) -> None: ... + def hasQueryItem(self, key: typing.Optional[str]) -> bool: ... + def queryItems(self, options: typing.Union[QUrl.ComponentFormattingOptions, QUrl.ComponentFormattingOption] = ...) -> typing.List[typing.Tuple[str, str]]: ... + def setQueryItems(self, query: typing.Iterable[typing.Tuple[typing.Optional[str], typing.Optional[str]]]) -> None: ... + def queryPairDelimiter(self) -> str: ... + def queryValueDelimiter(self) -> str: ... + def setQueryDelimiters(self, valueDelimiter: str, pairDelimiter: str) -> None: ... + def toString(self, options: typing.Union[QUrl.ComponentFormattingOptions, QUrl.ComponentFormattingOption] = ...) -> str: ... + def setQuery(self, queryString: typing.Optional[str]) -> None: ... + def query(self, options: typing.Union[QUrl.ComponentFormattingOptions, QUrl.ComponentFormattingOption] = ...) -> str: ... + def clear(self) -> None: ... + def isDetached(self) -> bool: ... + def isEmpty(self) -> bool: ... + def swap(self, other: 'QUrlQuery') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QUuid(PyQt5.sipsimplewrapper): + + class StringFormat(int): + WithBraces = ... # type: QUuid.StringFormat + WithoutBraces = ... # type: QUuid.StringFormat + Id128 = ... # type: QUuid.StringFormat + + class Version(int): + VerUnknown = ... # type: QUuid.Version + Time = ... # type: QUuid.Version + EmbeddedPOSIX = ... # type: QUuid.Version + Md5 = ... # type: QUuid.Version + Name = ... # type: QUuid.Version + Random = ... # type: QUuid.Version + Sha1 = ... # type: QUuid.Version + + class Variant(int): + VarUnknown = ... # type: QUuid.Variant + NCS = ... # type: QUuid.Variant + DCE = ... # type: QUuid.Variant + Microsoft = ... # type: QUuid.Variant + Reserved = ... # type: QUuid.Variant + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, l: int, w1: int, w2: int, b1: int, b2: int, b3: int, b4: int, b5: int, b6: int, b7: int, b8: int) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, a0: 'QUuid') -> None: ... + + def __le__(self, rhs: 'QUuid') -> bool: ... + def __ge__(self, rhs: 'QUuid') -> bool: ... + @staticmethod + def fromRfc4122(a0: typing.Union[QByteArray, bytes, bytearray]) -> 'QUuid': ... + def toRfc4122(self) -> QByteArray: ... + @typing.overload + def toByteArray(self) -> QByteArray: ... + @typing.overload + def toByteArray(self, mode: 'QUuid.StringFormat') -> QByteArray: ... + def version(self) -> 'QUuid.Version': ... + def variant(self) -> 'QUuid.Variant': ... + @typing.overload + @staticmethod + def createUuidV5(ns: 'QUuid', baseData: typing.Union[QByteArray, bytes, bytearray]) -> 'QUuid': ... + @typing.overload + @staticmethod + def createUuidV5(ns: 'QUuid', baseData: typing.Optional[str]) -> 'QUuid': ... + @typing.overload + @staticmethod + def createUuidV3(ns: 'QUuid', baseData: typing.Union[QByteArray, bytes, bytearray]) -> 'QUuid': ... + @typing.overload + @staticmethod + def createUuidV3(ns: 'QUuid', baseData: typing.Optional[str]) -> 'QUuid': ... + @staticmethod + def createUuid() -> 'QUuid': ... + def __gt__(self, other: 'QUuid') -> bool: ... + def __lt__(self, other: 'QUuid') -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isNull(self) -> bool: ... + @typing.overload + def toString(self) -> str: ... + @typing.overload + def toString(self, mode: 'QUuid.StringFormat') -> str: ... + def __repr__(self) -> str: ... + def __hash__(self) -> int: ... + + +class QVariant(PyQt5.sipsimplewrapper): + + class Type(int): + Invalid = ... # type: QVariant.Type + Bool = ... # type: QVariant.Type + Int = ... # type: QVariant.Type + UInt = ... # type: QVariant.Type + LongLong = ... # type: QVariant.Type + ULongLong = ... # type: QVariant.Type + Double = ... # type: QVariant.Type + Char = ... # type: QVariant.Type + Map = ... # type: QVariant.Type + List = ... # type: QVariant.Type + String = ... # type: QVariant.Type + StringList = ... # type: QVariant.Type + ByteArray = ... # type: QVariant.Type + BitArray = ... # type: QVariant.Type + Date = ... # type: QVariant.Type + Time = ... # type: QVariant.Type + DateTime = ... # type: QVariant.Type + Url = ... # type: QVariant.Type + Locale = ... # type: QVariant.Type + Rect = ... # type: QVariant.Type + RectF = ... # type: QVariant.Type + Size = ... # type: QVariant.Type + SizeF = ... # type: QVariant.Type + Line = ... # type: QVariant.Type + LineF = ... # type: QVariant.Type + Point = ... # type: QVariant.Type + PointF = ... # type: QVariant.Type + RegExp = ... # type: QVariant.Type + Font = ... # type: QVariant.Type + Pixmap = ... # type: QVariant.Type + Brush = ... # type: QVariant.Type + Color = ... # type: QVariant.Type + Palette = ... # type: QVariant.Type + Icon = ... # type: QVariant.Type + Image = ... # type: QVariant.Type + Polygon = ... # type: QVariant.Type + Region = ... # type: QVariant.Type + Bitmap = ... # type: QVariant.Type + Cursor = ... # type: QVariant.Type + SizePolicy = ... # type: QVariant.Type + KeySequence = ... # type: QVariant.Type + Pen = ... # type: QVariant.Type + TextLength = ... # type: QVariant.Type + TextFormat = ... # type: QVariant.Type + Matrix = ... # type: QVariant.Type + Transform = ... # type: QVariant.Type + Hash = ... # type: QVariant.Type + Matrix4x4 = ... # type: QVariant.Type + Vector2D = ... # type: QVariant.Type + Vector3D = ... # type: QVariant.Type + Vector4D = ... # type: QVariant.Type + Quaternion = ... # type: QVariant.Type + EasingCurve = ... # type: QVariant.Type + Uuid = ... # type: QVariant.Type + ModelIndex = ... # type: QVariant.Type + PolygonF = ... # type: QVariant.Type + RegularExpression = ... # type: QVariant.Type + PersistentModelIndex = ... # type: QVariant.Type + UserType = ... # type: QVariant.Type + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, type: 'QVariant.Type') -> None: ... + @typing.overload + def __init__(self, obj: typing.Any) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional['QVariant']) -> None: ... + + def __ge__(self, v: typing.Any) -> bool: ... + def __gt__(self, v: typing.Any) -> bool: ... + def __le__(self, v: typing.Any) -> bool: ... + def __lt__(self, v: typing.Any) -> bool: ... + def swap(self, other: typing.Optional['QVariant']) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @staticmethod + def nameToType(name: typing.Optional[str]) -> 'QVariant.Type': ... + @staticmethod + def typeToName(typeId: int) -> typing.Optional[str]: ... + def save(self, ds: QDataStream) -> None: ... + def load(self, ds: QDataStream) -> None: ... + def clear(self) -> None: ... + def isNull(self) -> bool: ... + def isValid(self) -> bool: ... + def convert(self, targetTypeId: int) -> bool: ... + def canConvert(self, targetTypeId: int) -> bool: ... + def typeName(self) -> typing.Optional[str]: ... + def userType(self) -> int: ... + def type(self) -> 'QVariant.Type': ... + def value(self) -> typing.Any: ... + + +class QVersionNumber(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, seg: typing.Iterable[int]) -> None: ... + @typing.overload + def __init__(self, maj: int) -> None: ... + @typing.overload + def __init__(self, maj: int, min: int) -> None: ... + @typing.overload + def __init__(self, maj: int, min: int, mic: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QVersionNumber') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __lt__(self, rhs: 'QVersionNumber') -> bool: ... + def __le__(self, rhs: 'QVersionNumber') -> bool: ... + def __gt__(self, rhs: 'QVersionNumber') -> bool: ... + def __ge__(self, rhs: 'QVersionNumber') -> bool: ... + def __hash__(self) -> int: ... + @staticmethod + def fromString(string: typing.Optional[str]) -> typing.Tuple['QVersionNumber', typing.Optional[int]]: ... + def toString(self) -> str: ... + @staticmethod + def commonPrefix(v1: 'QVersionNumber', v2: 'QVersionNumber') -> 'QVersionNumber': ... + @staticmethod + def compare(v1: 'QVersionNumber', v2: 'QVersionNumber') -> int: ... + def isPrefixOf(self, other: 'QVersionNumber') -> bool: ... + def segmentCount(self) -> int: ... + def segmentAt(self, index: int) -> int: ... + def segments(self) -> typing.List[int]: ... + def normalized(self) -> 'QVersionNumber': ... + def microVersion(self) -> int: ... + def minorVersion(self) -> int: ... + def majorVersion(self) -> int: ... + def isNormalized(self) -> bool: ... + def isNull(self) -> bool: ... + + +class QWaitCondition(PyQt5.sipsimplewrapper): + + def __init__(self) -> None: ... + + def wakeAll(self) -> None: ... + def wakeOne(self) -> None: ... + @typing.overload + def wait(self, mutex: typing.Optional[QMutex], msecs: int = ...) -> bool: ... + @typing.overload + def wait(self, lockedMutex: typing.Optional[QMutex], deadline: QDeadlineTimer) -> bool: ... + @typing.overload + def wait(self, readWriteLock: typing.Optional[QReadWriteLock], msecs: int = ...) -> bool: ... + @typing.overload + def wait(self, lockedReadWriteLock: typing.Optional[QReadWriteLock], deadline: QDeadlineTimer) -> bool: ... + + +class QXmlStreamAttribute(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, qualifiedName: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, namespaceUri: typing.Optional[str], name: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlStreamAttribute') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isDefault(self) -> bool: ... + def value(self) -> str: ... + def prefix(self) -> str: ... + def qualifiedName(self) -> str: ... + def name(self) -> str: ... + def namespaceUri(self) -> str: ... + + +class QXmlStreamAttributes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlStreamAttributes') -> None: ... + + def __contains__(self, value: QXmlStreamAttribute) -> int: ... + @typing.overload + def __delitem__(self, i: int) -> None: ... + @typing.overload + def __delitem__(self, slice: slice) -> None: ... + @typing.overload + def __setitem__(self, i: int, value: QXmlStreamAttribute) -> None: ... + @typing.overload + def __setitem__(self, slice: slice, list: 'QXmlStreamAttributes') -> None: ... + @typing.overload + def __getitem__(self, i: int) -> QXmlStreamAttribute: ... + @typing.overload + def __getitem__(self, slice: slice) -> 'QXmlStreamAttributes': ... + def __eq__(self, other: object): ... + @typing.overload + def __iadd__(self, other: 'QXmlStreamAttributes') -> 'QXmlStreamAttributes': ... + @typing.overload + def __iadd__(self, value: QXmlStreamAttribute) -> 'QXmlStreamAttributes': ... + def __ne__(self, other: object): ... + def size(self) -> int: ... + def replace(self, i: int, value: QXmlStreamAttribute) -> None: ... + @typing.overload + def remove(self, i: int) -> None: ... + @typing.overload + def remove(self, i: int, count: int) -> None: ... + def prepend(self, value: QXmlStreamAttribute) -> None: ... + def lastIndexOf(self, value: QXmlStreamAttribute, from_: int = ...) -> int: ... + def last(self) -> QXmlStreamAttribute: ... + def isEmpty(self) -> bool: ... + def insert(self, i: int, value: QXmlStreamAttribute) -> None: ... + def indexOf(self, value: QXmlStreamAttribute, from_: int = ...) -> int: ... + def first(self) -> QXmlStreamAttribute: ... + def fill(self, value: QXmlStreamAttribute, size: int = ...) -> None: ... + def data(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def __len__(self) -> int: ... + @typing.overload + def count(self, value: QXmlStreamAttribute) -> int: ... + @typing.overload + def count(self) -> int: ... + def contains(self, value: QXmlStreamAttribute) -> bool: ... + def clear(self) -> None: ... + def at(self, i: int) -> QXmlStreamAttribute: ... + @typing.overload + def hasAttribute(self, qualifiedName: typing.Optional[str]) -> bool: ... + @typing.overload + def hasAttribute(self, namespaceUri: typing.Optional[str], name: typing.Optional[str]) -> bool: ... + @typing.overload + def append(self, namespaceUri: typing.Optional[str], name: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def append(self, qualifiedName: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def append(self, attribute: QXmlStreamAttribute) -> None: ... + @typing.overload + def value(self, namespaceUri: typing.Optional[str], name: typing.Optional[str]) -> str: ... + @typing.overload + def value(self, qualifiedName: typing.Optional[str]) -> str: ... + + +class QXmlStreamNamespaceDeclaration(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlStreamNamespaceDeclaration') -> None: ... + @typing.overload + def __init__(self, prefix: typing.Optional[str], namespaceUri: typing.Optional[str]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def namespaceUri(self) -> str: ... + def prefix(self) -> str: ... + + +class QXmlStreamNotationDeclaration(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlStreamNotationDeclaration') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def publicId(self) -> str: ... + def systemId(self) -> str: ... + def name(self) -> str: ... + + +class QXmlStreamEntityDeclaration(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlStreamEntityDeclaration') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def value(self) -> str: ... + def publicId(self) -> str: ... + def systemId(self) -> str: ... + def notationName(self) -> str: ... + def name(self) -> str: ... + + +class QXmlStreamEntityResolver(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlStreamEntityResolver') -> None: ... + + def resolveUndeclaredEntity(self, name: typing.Optional[str]) -> str: ... + + +class QXmlStreamReader(PyQt5.sipsimplewrapper): + + class Error(int): + NoError = ... # type: QXmlStreamReader.Error + UnexpectedElementError = ... # type: QXmlStreamReader.Error + CustomError = ... # type: QXmlStreamReader.Error + NotWellFormedError = ... # type: QXmlStreamReader.Error + PrematureEndOfDocumentError = ... # type: QXmlStreamReader.Error + + class ReadElementTextBehaviour(int): + ErrorOnUnexpectedElement = ... # type: QXmlStreamReader.ReadElementTextBehaviour + IncludeChildElements = ... # type: QXmlStreamReader.ReadElementTextBehaviour + SkipChildElements = ... # type: QXmlStreamReader.ReadElementTextBehaviour + + class TokenType(int): + NoToken = ... # type: QXmlStreamReader.TokenType + Invalid = ... # type: QXmlStreamReader.TokenType + StartDocument = ... # type: QXmlStreamReader.TokenType + EndDocument = ... # type: QXmlStreamReader.TokenType + StartElement = ... # type: QXmlStreamReader.TokenType + EndElement = ... # type: QXmlStreamReader.TokenType + Characters = ... # type: QXmlStreamReader.TokenType + Comment = ... # type: QXmlStreamReader.TokenType + DTD = ... # type: QXmlStreamReader.TokenType + EntityReference = ... # type: QXmlStreamReader.TokenType + ProcessingInstruction = ... # type: QXmlStreamReader.TokenType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QIODevice]) -> None: ... + @typing.overload + def __init__(self, data: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, data: typing.Optional[str]) -> None: ... + + def setEntityExpansionLimit(self, limit: int) -> None: ... + def entityExpansionLimit(self) -> int: ... + def skipCurrentElement(self) -> None: ... + def readNextStartElement(self) -> bool: ... + def entityResolver(self) -> typing.Optional[QXmlStreamEntityResolver]: ... + def setEntityResolver(self, resolver: typing.Optional[QXmlStreamEntityResolver]) -> None: ... + def hasError(self) -> bool: ... + def error(self) -> 'QXmlStreamReader.Error': ... + def errorString(self) -> str: ... + def raiseError(self, message: typing.Optional[str] = ...) -> None: ... + def dtdSystemId(self) -> str: ... + def dtdPublicId(self) -> str: ... + def dtdName(self) -> str: ... + def entityDeclarations(self) -> typing.List[QXmlStreamEntityDeclaration]: ... + def notationDeclarations(self) -> typing.List[QXmlStreamNotationDeclaration]: ... + def addExtraNamespaceDeclarations(self, extraNamespaceDeclaractions: typing.Iterable[QXmlStreamNamespaceDeclaration]) -> None: ... + def addExtraNamespaceDeclaration(self, extraNamespaceDeclaraction: QXmlStreamNamespaceDeclaration) -> None: ... + def namespaceDeclarations(self) -> typing.List[QXmlStreamNamespaceDeclaration]: ... + def text(self) -> str: ... + def processingInstructionData(self) -> str: ... + def processingInstructionTarget(self) -> str: ... + def prefix(self) -> str: ... + def qualifiedName(self) -> str: ... + def namespaceUri(self) -> str: ... + def name(self) -> str: ... + def readElementText(self, behaviour: 'QXmlStreamReader.ReadElementTextBehaviour' = ...) -> str: ... + def attributes(self) -> QXmlStreamAttributes: ... + def characterOffset(self) -> int: ... + def columnNumber(self) -> int: ... + def lineNumber(self) -> int: ... + def documentEncoding(self) -> str: ... + def documentVersion(self) -> str: ... + def isStandaloneDocument(self) -> bool: ... + def isProcessingInstruction(self) -> bool: ... + def isEntityReference(self) -> bool: ... + def isDTD(self) -> bool: ... + def isComment(self) -> bool: ... + def isCDATA(self) -> bool: ... + def isWhitespace(self) -> bool: ... + def isCharacters(self) -> bool: ... + def isEndElement(self) -> bool: ... + def isStartElement(self) -> bool: ... + def isEndDocument(self) -> bool: ... + def isStartDocument(self) -> bool: ... + def namespaceProcessing(self) -> bool: ... + def setNamespaceProcessing(self, a0: bool) -> None: ... + def tokenString(self) -> str: ... + def tokenType(self) -> 'QXmlStreamReader.TokenType': ... + def readNext(self) -> 'QXmlStreamReader.TokenType': ... + def atEnd(self) -> bool: ... + def clear(self) -> None: ... + @typing.overload + def addData(self, data: typing.Union[QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def addData(self, data: typing.Optional[str]) -> None: ... + def device(self) -> typing.Optional[QIODevice]: ... + def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... + + +class QXmlStreamWriter(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QIODevice]) -> None: ... + @typing.overload + def __init__(self, array: typing.Optional[typing.Union[QByteArray, bytes, bytearray]]) -> None: ... + + def hasError(self) -> bool: ... + def writeCurrentToken(self, reader: QXmlStreamReader) -> None: ... + @typing.overload + def writeStartElement(self, qualifiedName: typing.Optional[str]) -> None: ... + @typing.overload + def writeStartElement(self, namespaceUri: typing.Optional[str], name: typing.Optional[str]) -> None: ... + @typing.overload + def writeStartDocument(self) -> None: ... + @typing.overload + def writeStartDocument(self, version: typing.Optional[str]) -> None: ... + @typing.overload + def writeStartDocument(self, version: typing.Optional[str], standalone: bool) -> None: ... + def writeProcessingInstruction(self, target: typing.Optional[str], data: typing.Optional[str] = ...) -> None: ... + def writeDefaultNamespace(self, namespaceUri: typing.Optional[str]) -> None: ... + def writeNamespace(self, namespaceUri: typing.Optional[str], prefix: typing.Optional[str] = ...) -> None: ... + def writeEntityReference(self, name: typing.Optional[str]) -> None: ... + def writeEndElement(self) -> None: ... + def writeEndDocument(self) -> None: ... + @typing.overload + def writeTextElement(self, qualifiedName: typing.Optional[str], text: typing.Optional[str]) -> None: ... + @typing.overload + def writeTextElement(self, namespaceUri: typing.Optional[str], name: typing.Optional[str], text: typing.Optional[str]) -> None: ... + @typing.overload + def writeEmptyElement(self, qualifiedName: typing.Optional[str]) -> None: ... + @typing.overload + def writeEmptyElement(self, namespaceUri: typing.Optional[str], name: typing.Optional[str]) -> None: ... + def writeDTD(self, dtd: typing.Optional[str]) -> None: ... + def writeComment(self, text: typing.Optional[str]) -> None: ... + def writeCharacters(self, text: typing.Optional[str]) -> None: ... + def writeCDATA(self, text: typing.Optional[str]) -> None: ... + def writeAttributes(self, attributes: QXmlStreamAttributes) -> None: ... + @typing.overload + def writeAttribute(self, qualifiedName: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def writeAttribute(self, namespaceUri: typing.Optional[str], name: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def writeAttribute(self, attribute: QXmlStreamAttribute) -> None: ... + def autoFormattingIndent(self) -> int: ... + def setAutoFormattingIndent(self, spaces: int) -> None: ... + def autoFormatting(self) -> bool: ... + def setAutoFormatting(self, a0: bool) -> None: ... + def codec(self) -> typing.Optional[QTextCodec]: ... + @typing.overload + def setCodec(self, codec: typing.Optional[QTextCodec]) -> None: ... + @typing.overload + def setCodec(self, codecName: typing.Optional[str]) -> None: ... + def device(self) -> typing.Optional[QIODevice]: ... + def setDevice(self, device: typing.Optional[QIODevice]) -> None: ... + + +class QSysInfo(PyQt5.sipsimplewrapper): + + class Endian(int): + BigEndian = ... # type: QSysInfo.Endian + LittleEndian = ... # type: QSysInfo.Endian + ByteOrder = ... # type: QSysInfo.Endian + + class Sizes(int): + WordSize = ... # type: QSysInfo.Sizes + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSysInfo') -> None: ... + + @staticmethod + def machineHostName() -> str: ... + @staticmethod + def productVersion() -> str: ... + @staticmethod + def productType() -> str: ... + @staticmethod + def prettyProductName() -> str: ... + @staticmethod + def kernelVersion() -> str: ... + @staticmethod + def kernelType() -> str: ... + @staticmethod + def currentCpuArchitecture() -> str: ... + @staticmethod + def buildCpuArchitecture() -> str: ... + @staticmethod + def buildAbi() -> str: ... + + +PYQT_VERSION = ... # type: int +PYQT_VERSION_STR = ... # type: str +QT_VERSION = ... # type: int +QT_VERSION_STR = ... # type: str + + +def qSetRealNumberPrecision(precision: int) -> QTextStreamManipulator: ... +def qSetPadChar(ch: str) -> QTextStreamManipulator: ... +def qSetFieldWidth(width: int) -> QTextStreamManipulator: ... +def ws(s: QTextStream) -> QTextStream: ... +def bom(s: QTextStream) -> QTextStream: ... +def reset(s: QTextStream) -> QTextStream: ... +def flush(s: QTextStream) -> QTextStream: ... +def endl(s: QTextStream) -> QTextStream: ... +def center(s: QTextStream) -> QTextStream: ... +def right(s: QTextStream) -> QTextStream: ... +def left(s: QTextStream) -> QTextStream: ... +def scientific(s: QTextStream) -> QTextStream: ... +def fixed(s: QTextStream) -> QTextStream: ... +def lowercasedigits(s: QTextStream) -> QTextStream: ... +def lowercasebase(s: QTextStream) -> QTextStream: ... +def uppercasedigits(s: QTextStream) -> QTextStream: ... +def uppercasebase(s: QTextStream) -> QTextStream: ... +def noforcepoint(s: QTextStream) -> QTextStream: ... +def noforcesign(s: QTextStream) -> QTextStream: ... +def noshowbase(s: QTextStream) -> QTextStream: ... +def forcepoint(s: QTextStream) -> QTextStream: ... +def forcesign(s: QTextStream) -> QTextStream: ... +def showbase(s: QTextStream) -> QTextStream: ... +def hex_(s: QTextStream) -> QTextStream: ... +def dec(s: QTextStream) -> QTextStream: ... +def oct_(s: QTextStream) -> QTextStream: ... +def bin_(s: QTextStream) -> QTextStream: ... +def Q_RETURN_ARG(type: typing.Any) -> QGenericReturnArgument: ... +def Q_ARG(type: typing.Any, data: typing.Any) -> QGenericArgument: ... +def QT_TRANSLATE_NOOP(a0: str, a1: str) -> str: ... +def QT_TR_NOOP_UTF8(a0: str) -> str: ... +def QT_TR_NOOP(a0: str) -> str: ... +def Q_FLAGS(*args: typing.Any) -> None: ... +def Q_FLAG(a0: typing.Union[type, enum.Enum]) -> None: ... +def Q_ENUMS(*args: typing.Any) -> None: ... +def Q_ENUM(a0: typing.Union[type, enum.Enum]) -> None: ... +def Q_CLASSINFO(name: typing.Optional[str], value: typing.Optional[str]) -> None: ... +def qFloatDistance(a: float, b: float) -> int: ... +def qQNaN() -> float: ... +def qSNaN() -> float: ... +def qInf() -> float: ... +def qIsNaN(d: float) -> bool: ... +def qIsFinite(d: float) -> bool: ... +def qIsInf(d: float) -> bool: ... +def qFormatLogMessage(type: QtMsgType, context: QMessageLogContext, buf: typing.Optional[str]) -> str: ... +def qSetMessagePattern(messagePattern: typing.Optional[str]) -> None: ... +def qInstallMessageHandler(a0: typing.Optional[typing.Callable[[QtMsgType, QMessageLogContext, typing.Optional[str]], None]]) -> typing.Optional[typing.Callable[[QtMsgType, QMessageLogContext, typing.Optional[str]], None]]: ... +def qWarning(msg: typing.Optional[str]) -> None: ... +def qInfo(msg: typing.Optional[str]) -> None: ... +def qFatal(msg: typing.Optional[str]) -> None: ... +@typing.overload +def qErrnoWarning(code: int, msg: typing.Optional[str]) -> None: ... +@typing.overload +def qErrnoWarning(msg: typing.Optional[str]) -> None: ... +def qDebug(msg: typing.Optional[str]) -> None: ... +def qCritical(msg: typing.Optional[str]) -> None: ... +def pyqtRestoreInputHook() -> None: ... +def pyqtRemoveInputHook() -> None: ... +def qAddPreRoutine(routine: typing.Callable[[], None]) -> None: ... +def qRemovePostRoutine(a0: typing.Callable[..., None]) -> None: ... +def qAddPostRoutine(a0: typing.Callable[..., None]) -> None: ... +@typing.overload +def qChecksum(s: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... +@typing.overload +def qChecksum(s: typing.Optional[PyQt5.sip.array[bytes]], standard: Qt.ChecksumType) -> int: ... +def qUncompress(data: typing.Union[QByteArray, bytes, bytearray]) -> QByteArray: ... +def qCompress(data: typing.Union[QByteArray, bytes, bytearray], compressionLevel: int = ...) -> QByteArray: ... +@typing.overload +def qEnvironmentVariable(varName: typing.Optional[str]) -> str: ... +@typing.overload +def qEnvironmentVariable(varName: typing.Optional[str], defaultValue: typing.Optional[str]) -> str: ... +def pyqtPickleProtocol() -> typing.Optional[int]: ... +def pyqtSetPickleProtocol(a0: typing.Optional[int]) -> None: ... +def qrand() -> int: ... +def qsrand(seed: int) -> None: ... +def qIsNull(d: float) -> bool: ... +def qFuzzyCompare(p1: float, p2: float) -> bool: ... +def qUnregisterResourceData(a0: int, a1: typing.Optional[bytes], a2: typing.Optional[bytes], a3: typing.Optional[bytes]) -> bool: ... +def qRegisterResourceData(a0: int, a1: typing.Optional[bytes], a2: typing.Optional[bytes], a3: typing.Optional[bytes]) -> bool: ... +def qSharedBuild() -> bool: ... +def qVersion() -> typing.Optional[str]: ... +def qRound64(d: float) -> int: ... +def qRound(d: float) -> int: ... +def qAbs(t: float) -> float: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtDBus.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtDBus.abi3.so new file mode 100644 index 0000000..11a9678 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtDBus.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtDBus.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtDBus.pyi new file mode 100644 index 0000000..e98faee --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtDBus.pyi @@ -0,0 +1,548 @@ +# The PEP 484 type hints stub file for the QtDBus module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QDBusAbstractAdaptor(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + def autoRelaySignals(self) -> bool: ... + def setAutoRelaySignals(self, enable: bool) -> None: ... + + +class QDBusAbstractInterface(QtCore.QObject): + + def __init__(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], connection: 'QDBusConnection', parent: typing.Optional[QtCore.QObject]) -> None: ... + + def disconnectNotify(self, signal: QtCore.QMetaMethod) -> None: ... + def connectNotify(self, signal: QtCore.QMetaMethod) -> None: ... + def asyncCallWithArgumentList(self, method: typing.Optional[str], args: typing.Iterable[typing.Any]) -> 'QDBusPendingCall': ... + def asyncCall(self, method: typing.Optional[str], arg1: typing.Any = ..., arg2: typing.Any = ..., arg3: typing.Any = ..., arg4: typing.Any = ..., arg5: typing.Any = ..., arg6: typing.Any = ..., arg7: typing.Any = ..., arg8: typing.Any = ...) -> 'QDBusPendingCall': ... + @typing.overload + def callWithCallback(self, method: typing.Optional[str], args: typing.Iterable[typing.Any], returnMethod: PYQT_SLOT, errorMethod: PYQT_SLOT) -> bool: ... + @typing.overload + def callWithCallback(self, method: typing.Optional[str], args: typing.Iterable[typing.Any], slot: PYQT_SLOT) -> bool: ... + def callWithArgumentList(self, mode: 'QDBus.CallMode', method: typing.Optional[str], args: typing.Iterable[typing.Any]) -> 'QDBusMessage': ... + @typing.overload + def call(self, method: typing.Optional[str], arg1: typing.Any = ..., arg2: typing.Any = ..., arg3: typing.Any = ..., arg4: typing.Any = ..., arg5: typing.Any = ..., arg6: typing.Any = ..., arg7: typing.Any = ..., arg8: typing.Any = ...) -> 'QDBusMessage': ... + @typing.overload + def call(self, mode: 'QDBus.CallMode', method: typing.Optional[str], arg1: typing.Any = ..., arg2: typing.Any = ..., arg3: typing.Any = ..., arg4: typing.Any = ..., arg5: typing.Any = ..., arg6: typing.Any = ..., arg7: typing.Any = ..., arg8: typing.Any = ...) -> 'QDBusMessage': ... + def timeout(self) -> int: ... + def setTimeout(self, timeout: int) -> None: ... + def lastError(self) -> 'QDBusError': ... + def interface(self) -> str: ... + def path(self) -> str: ... + def service(self) -> str: ... + def connection(self) -> 'QDBusConnection': ... + def isValid(self) -> bool: ... + + +class QDBusArgument(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QDBusArgument') -> None: ... + @typing.overload + def __init__(self, arg: typing.Any, id: int = ...) -> None: ... + + def swap(self, other: 'QDBusArgument') -> None: ... + def endMapEntry(self) -> None: ... + def beginMapEntry(self) -> None: ... + def endMap(self) -> None: ... + def beginMap(self, kid: int, vid: int) -> None: ... + def endArray(self) -> None: ... + def beginArray(self, id: int) -> None: ... + def endStructure(self) -> None: ... + def beginStructure(self) -> None: ... + def add(self, arg: typing.Any, id: int = ...) -> None: ... + + +class QDBus(PyQt5.sip.simplewrapper): + + class CallMode(int): + NoBlock = ... # type: QDBus.CallMode + Block = ... # type: QDBus.CallMode + BlockWithGui = ... # type: QDBus.CallMode + AutoDetect = ... # type: QDBus.CallMode + + +class QDBusConnection(PyQt5.sipsimplewrapper): + + class ConnectionCapability(int): + UnixFileDescriptorPassing = ... # type: QDBusConnection.ConnectionCapability + + class UnregisterMode(int): + UnregisterNode = ... # type: QDBusConnection.UnregisterMode + UnregisterTree = ... # type: QDBusConnection.UnregisterMode + + class RegisterOption(int): + ExportAdaptors = ... # type: QDBusConnection.RegisterOption + ExportScriptableSlots = ... # type: QDBusConnection.RegisterOption + ExportScriptableSignals = ... # type: QDBusConnection.RegisterOption + ExportScriptableProperties = ... # type: QDBusConnection.RegisterOption + ExportScriptableInvokables = ... # type: QDBusConnection.RegisterOption + ExportScriptableContents = ... # type: QDBusConnection.RegisterOption + ExportNonScriptableSlots = ... # type: QDBusConnection.RegisterOption + ExportNonScriptableSignals = ... # type: QDBusConnection.RegisterOption + ExportNonScriptableProperties = ... # type: QDBusConnection.RegisterOption + ExportNonScriptableInvokables = ... # type: QDBusConnection.RegisterOption + ExportNonScriptableContents = ... # type: QDBusConnection.RegisterOption + ExportAllSlots = ... # type: QDBusConnection.RegisterOption + ExportAllSignals = ... # type: QDBusConnection.RegisterOption + ExportAllProperties = ... # type: QDBusConnection.RegisterOption + ExportAllInvokables = ... # type: QDBusConnection.RegisterOption + ExportAllContents = ... # type: QDBusConnection.RegisterOption + ExportAllSignal = ... # type: QDBusConnection.RegisterOption + ExportChildObjects = ... # type: QDBusConnection.RegisterOption + + class BusType(int): + SessionBus = ... # type: QDBusConnection.BusType + SystemBus = ... # type: QDBusConnection.BusType + ActivationBus = ... # type: QDBusConnection.BusType + + class RegisterOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption']) -> 'QDBusConnection.RegisterOptions': ... + def __xor__(self, f: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption']) -> 'QDBusConnection.RegisterOptions': ... + def __ior__(self, f: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption']) -> 'QDBusConnection.RegisterOptions': ... + def __or__(self, f: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption']) -> 'QDBusConnection.RegisterOptions': ... + def __iand__(self, f: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption']) -> 'QDBusConnection.RegisterOptions': ... + def __and__(self, f: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption']) -> 'QDBusConnection.RegisterOptions': ... + def __invert__(self) -> 'QDBusConnection.RegisterOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ConnectionCapabilities(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDBusConnection.ConnectionCapabilities', 'QDBusConnection.ConnectionCapability']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDBusConnection.ConnectionCapabilities', 'QDBusConnection.ConnectionCapability']) -> 'QDBusConnection.ConnectionCapabilities': ... + def __xor__(self, f: typing.Union['QDBusConnection.ConnectionCapabilities', 'QDBusConnection.ConnectionCapability']) -> 'QDBusConnection.ConnectionCapabilities': ... + def __ior__(self, f: typing.Union['QDBusConnection.ConnectionCapabilities', 'QDBusConnection.ConnectionCapability']) -> 'QDBusConnection.ConnectionCapabilities': ... + def __or__(self, f: typing.Union['QDBusConnection.ConnectionCapabilities', 'QDBusConnection.ConnectionCapability']) -> 'QDBusConnection.ConnectionCapabilities': ... + def __iand__(self, f: typing.Union['QDBusConnection.ConnectionCapabilities', 'QDBusConnection.ConnectionCapability']) -> 'QDBusConnection.ConnectionCapabilities': ... + def __and__(self, f: typing.Union['QDBusConnection.ConnectionCapabilities', 'QDBusConnection.ConnectionCapability']) -> 'QDBusConnection.ConnectionCapabilities': ... + def __invert__(self) -> 'QDBusConnection.ConnectionCapabilities': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, other: 'QDBusConnection') -> None: ... + + def swap(self, other: 'QDBusConnection') -> None: ... + @staticmethod + def sender() -> 'QDBusConnection': ... + @staticmethod + def systemBus() -> 'QDBusConnection': ... + @staticmethod + def sessionBus() -> 'QDBusConnection': ... + @staticmethod + def localMachineId() -> QtCore.QByteArray: ... + @staticmethod + def disconnectFromPeer(name: typing.Optional[str]) -> None: ... + @staticmethod + def disconnectFromBus(name: typing.Optional[str]) -> None: ... + @staticmethod + def connectToPeer(address: typing.Optional[str], name: typing.Optional[str]) -> 'QDBusConnection': ... + @typing.overload + @staticmethod + def connectToBus(type: 'QDBusConnection.BusType', name: typing.Optional[str]) -> 'QDBusConnection': ... + @typing.overload + @staticmethod + def connectToBus(address: typing.Optional[str], name: typing.Optional[str]) -> 'QDBusConnection': ... + def interface(self) -> typing.Optional['QDBusConnectionInterface']: ... + def unregisterService(self, serviceName: typing.Optional[str]) -> bool: ... + def registerService(self, serviceName: typing.Optional[str]) -> bool: ... + def objectRegisteredAt(self, path: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... + def unregisterObject(self, path: typing.Optional[str], mode: 'QDBusConnection.UnregisterMode' = ...) -> None: ... + @typing.overload + def registerObject(self, path: typing.Optional[str], object: typing.Optional[QtCore.QObject], options: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption'] = ...) -> bool: ... + @typing.overload + def registerObject(self, path: typing.Optional[str], interface: typing.Optional[str], object: typing.Optional[QtCore.QObject], options: typing.Union['QDBusConnection.RegisterOptions', 'QDBusConnection.RegisterOption'] = ...) -> bool: ... + @typing.overload + def disconnect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... + @typing.overload + def disconnect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], signature: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... + @typing.overload + def disconnect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], argumentMatch: typing.Iterable[typing.Optional[str]], signature: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... + @typing.overload + def connect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... + @typing.overload + def connect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], signature: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... + @typing.overload + def connect(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str], argumentMatch: typing.Iterable[typing.Optional[str]], signature: typing.Optional[str], slot: PYQT_SLOT) -> bool: ... + def asyncCall(self, message: 'QDBusMessage', timeout: int = ...) -> 'QDBusPendingCall': ... + def call(self, message: 'QDBusMessage', mode: QDBus.CallMode = ..., timeout: int = ...) -> 'QDBusMessage': ... + def callWithCallback(self, message: 'QDBusMessage', returnMethod: PYQT_SLOT, errorMethod: PYQT_SLOT, timeout: int = ...) -> bool: ... + def send(self, message: 'QDBusMessage') -> bool: ... + def connectionCapabilities(self) -> 'QDBusConnection.ConnectionCapabilities': ... + def name(self) -> str: ... + def lastError(self) -> 'QDBusError': ... + def baseService(self) -> str: ... + def isConnected(self) -> bool: ... + + +class QDBusConnectionInterface(QDBusAbstractInterface): + + class RegisterServiceReply(int): + ServiceNotRegistered = ... # type: QDBusConnectionInterface.RegisterServiceReply + ServiceRegistered = ... # type: QDBusConnectionInterface.RegisterServiceReply + ServiceQueued = ... # type: QDBusConnectionInterface.RegisterServiceReply + + class ServiceReplacementOptions(int): + DontAllowReplacement = ... # type: QDBusConnectionInterface.ServiceReplacementOptions + AllowReplacement = ... # type: QDBusConnectionInterface.ServiceReplacementOptions + + class ServiceQueueOptions(int): + DontQueueService = ... # type: QDBusConnectionInterface.ServiceQueueOptions + QueueService = ... # type: QDBusConnectionInterface.ServiceQueueOptions + ReplaceExistingService = ... # type: QDBusConnectionInterface.ServiceQueueOptions + + def disconnectNotify(self, a0: QtCore.QMetaMethod) -> None: ... + def connectNotify(self, a0: QtCore.QMetaMethod) -> None: ... + callWithCallbackFailed: typing.ClassVar[QtCore.pyqtSignal] + serviceOwnerChanged: typing.ClassVar[QtCore.pyqtSignal] + serviceUnregistered: typing.ClassVar[QtCore.pyqtSignal] + serviceRegistered: typing.ClassVar[QtCore.pyqtSignal] + def startService(self, name: typing.Optional[str]) -> QDBusReply: ... + def serviceUid(self, serviceName: typing.Optional[str]) -> QDBusReply: ... + def servicePid(self, serviceName: typing.Optional[str]) -> QDBusReply: ... + def registerService(self, serviceName: typing.Optional[str], qoption: 'QDBusConnectionInterface.ServiceQueueOptions' = ..., roption: 'QDBusConnectionInterface.ServiceReplacementOptions' = ...) -> QDBusReply: ... + def unregisterService(self, serviceName: typing.Optional[str]) -> QDBusReply: ... + def serviceOwner(self, name: typing.Optional[str]) -> QDBusReply: ... + def isServiceRegistered(self, serviceName: typing.Optional[str]) -> QDBusReply: ... + def activatableServiceNames(self) -> QDBusReply: ... + def registeredServiceNames(self) -> QDBusReply: ... + + +class QDBusError(PyQt5.sipsimplewrapper): + + class ErrorType(int): + NoError = ... # type: QDBusError.ErrorType + Other = ... # type: QDBusError.ErrorType + Failed = ... # type: QDBusError.ErrorType + NoMemory = ... # type: QDBusError.ErrorType + ServiceUnknown = ... # type: QDBusError.ErrorType + NoReply = ... # type: QDBusError.ErrorType + BadAddress = ... # type: QDBusError.ErrorType + NotSupported = ... # type: QDBusError.ErrorType + LimitsExceeded = ... # type: QDBusError.ErrorType + AccessDenied = ... # type: QDBusError.ErrorType + NoServer = ... # type: QDBusError.ErrorType + Timeout = ... # type: QDBusError.ErrorType + NoNetwork = ... # type: QDBusError.ErrorType + AddressInUse = ... # type: QDBusError.ErrorType + Disconnected = ... # type: QDBusError.ErrorType + InvalidArgs = ... # type: QDBusError.ErrorType + UnknownMethod = ... # type: QDBusError.ErrorType + TimedOut = ... # type: QDBusError.ErrorType + InvalidSignature = ... # type: QDBusError.ErrorType + UnknownInterface = ... # type: QDBusError.ErrorType + InternalError = ... # type: QDBusError.ErrorType + UnknownObject = ... # type: QDBusError.ErrorType + InvalidService = ... # type: QDBusError.ErrorType + InvalidObjectPath = ... # type: QDBusError.ErrorType + InvalidInterface = ... # type: QDBusError.ErrorType + InvalidMember = ... # type: QDBusError.ErrorType + UnknownProperty = ... # type: QDBusError.ErrorType + PropertyReadOnly = ... # type: QDBusError.ErrorType + + def __init__(self, other: 'QDBusError') -> None: ... + + def swap(self, other: 'QDBusError') -> None: ... + @staticmethod + def errorString(error: 'QDBusError.ErrorType') -> str: ... + def isValid(self) -> bool: ... + def message(self) -> str: ... + def name(self) -> str: ... + def type(self) -> 'QDBusError.ErrorType': ... + + +class QDBusObjectPath(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, objectPath: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: 'QDBusObjectPath') -> None: ... + + def __ge__(self, rhs: 'QDBusObjectPath') -> bool: ... + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __lt__(self, rhs: 'QDBusObjectPath') -> bool: ... + def swap(self, other: 'QDBusObjectPath') -> None: ... + def __hash__(self) -> int: ... + def setPath(self, objectPath: typing.Optional[str]) -> None: ... + def path(self) -> str: ... + + +class QDBusSignature(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, dBusSignature: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: 'QDBusSignature') -> None: ... + + def __ge__(self, rhs: 'QDBusSignature') -> bool: ... + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __lt__(self, rhs: 'QDBusSignature') -> bool: ... + def swap(self, other: 'QDBusSignature') -> None: ... + def __hash__(self) -> int: ... + def setSignature(self, dBusSignature: typing.Optional[str]) -> None: ... + def signature(self) -> str: ... + + +class QDBusVariant(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, dBusVariant: typing.Any) -> None: ... + @typing.overload + def __init__(self, a0: 'QDBusVariant') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def swap(self, other: 'QDBusVariant') -> None: ... + def setVariant(self, dBusVariant: typing.Any) -> None: ... + def variant(self) -> typing.Any: ... + + +class QDBusInterface(QDBusAbstractInterface): + + def __init__(self, service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str] = ..., connection: QDBusConnection = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + +class QDBusMessage(PyQt5.sipsimplewrapper): + + class MessageType(int): + InvalidMessage = ... # type: QDBusMessage.MessageType + MethodCallMessage = ... # type: QDBusMessage.MessageType + ReplyMessage = ... # type: QDBusMessage.MessageType + ErrorMessage = ... # type: QDBusMessage.MessageType + SignalMessage = ... # type: QDBusMessage.MessageType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QDBusMessage') -> None: ... + + def isInteractiveAuthorizationAllowed(self) -> bool: ... + def setInteractiveAuthorizationAllowed(self, enable: bool) -> None: ... + @staticmethod + def createTargetedSignal(service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str]) -> 'QDBusMessage': ... + def swap(self, other: 'QDBusMessage') -> None: ... + def __lshift__(self, arg: typing.Any) -> 'QDBusMessage': ... + def arguments(self) -> typing.List[typing.Any]: ... + def setArguments(self, arguments: typing.Iterable[typing.Any]) -> None: ... + def autoStartService(self) -> bool: ... + def setAutoStartService(self, enable: bool) -> None: ... + def isDelayedReply(self) -> bool: ... + def setDelayedReply(self, enable: bool) -> None: ... + def isReplyRequired(self) -> bool: ... + def signature(self) -> str: ... + def type(self) -> 'QDBusMessage.MessageType': ... + def errorMessage(self) -> str: ... + def errorName(self) -> str: ... + def member(self) -> str: ... + def interface(self) -> str: ... + def path(self) -> str: ... + def service(self) -> str: ... + @typing.overload + def createErrorReply(self, name: typing.Optional[str], msg: typing.Optional[str]) -> 'QDBusMessage': ... + @typing.overload + def createErrorReply(self, error: QDBusError) -> 'QDBusMessage': ... + @typing.overload + def createErrorReply(self, type: QDBusError.ErrorType, msg: typing.Optional[str]) -> 'QDBusMessage': ... + @typing.overload + def createReply(self, arguments: typing.Iterable[typing.Any] = ...) -> 'QDBusMessage': ... + @typing.overload + def createReply(self, argument: typing.Any) -> 'QDBusMessage': ... + @typing.overload + @staticmethod + def createError(name: typing.Optional[str], msg: typing.Optional[str]) -> 'QDBusMessage': ... + @typing.overload + @staticmethod + def createError(error: QDBusError) -> 'QDBusMessage': ... + @typing.overload + @staticmethod + def createError(type: QDBusError.ErrorType, msg: typing.Optional[str]) -> 'QDBusMessage': ... + @staticmethod + def createMethodCall(service: typing.Optional[str], path: typing.Optional[str], interface: typing.Optional[str], method: typing.Optional[str]) -> 'QDBusMessage': ... + @staticmethod + def createSignal(path: typing.Optional[str], interface: typing.Optional[str], name: typing.Optional[str]) -> 'QDBusMessage': ... + + +class QDBusPendingCall(PyQt5.sipsimplewrapper): + + def __init__(self, other: 'QDBusPendingCall') -> None: ... + + def swap(self, other: 'QDBusPendingCall') -> None: ... + @staticmethod + def fromCompletedCall(message: QDBusMessage) -> 'QDBusPendingCall': ... + @staticmethod + def fromError(error: QDBusError) -> 'QDBusPendingCall': ... + + +class QDBusPendingCallWatcher(QtCore.QObject, QDBusPendingCall): + + def __init__(self, call: QDBusPendingCall, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + finished: typing.ClassVar[QtCore.pyqtSignal] + def waitForFinished(self) -> None: ... + def isFinished(self) -> bool: ... + + +class QDBusServiceWatcher(QtCore.QObject): + + class WatchModeFlag(int): + WatchForRegistration = ... # type: QDBusServiceWatcher.WatchModeFlag + WatchForUnregistration = ... # type: QDBusServiceWatcher.WatchModeFlag + WatchForOwnerChange = ... # type: QDBusServiceWatcher.WatchModeFlag + + class WatchMode(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag']) -> 'QDBusServiceWatcher.WatchMode': ... + def __xor__(self, f: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag']) -> 'QDBusServiceWatcher.WatchMode': ... + def __ior__(self, f: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag']) -> 'QDBusServiceWatcher.WatchMode': ... + def __or__(self, f: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag']) -> 'QDBusServiceWatcher.WatchMode': ... + def __iand__(self, f: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag']) -> 'QDBusServiceWatcher.WatchMode': ... + def __and__(self, f: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag']) -> 'QDBusServiceWatcher.WatchMode': ... + def __invert__(self) -> 'QDBusServiceWatcher.WatchMode': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, service: typing.Optional[str], connection: QDBusConnection, watchMode: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag'] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + serviceOwnerChanged: typing.ClassVar[QtCore.pyqtSignal] + serviceUnregistered: typing.ClassVar[QtCore.pyqtSignal] + serviceRegistered: typing.ClassVar[QtCore.pyqtSignal] + def setConnection(self, connection: QDBusConnection) -> None: ... + def connection(self) -> QDBusConnection: ... + def setWatchMode(self, mode: typing.Union['QDBusServiceWatcher.WatchMode', 'QDBusServiceWatcher.WatchModeFlag']) -> None: ... + def watchMode(self) -> 'QDBusServiceWatcher.WatchMode': ... + def removeWatchedService(self, service: typing.Optional[str]) -> bool: ... + def addWatchedService(self, newService: typing.Optional[str]) -> None: ... + def setWatchedServices(self, services: typing.Iterable[typing.Optional[str]]) -> None: ... + def watchedServices(self) -> typing.List[str]: ... + + +class QDBusUnixFileDescriptor(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, fileDescriptor: int) -> None: ... + @typing.overload + def __init__(self, other: 'QDBusUnixFileDescriptor') -> None: ... + + def swap(self, other: 'QDBusUnixFileDescriptor') -> None: ... + @staticmethod + def isSupported() -> bool: ... + def setFileDescriptor(self, fileDescriptor: int) -> None: ... + def fileDescriptor(self) -> int: ... + def isValid(self) -> bool: ... + + +class QDBusPendingReply(QDBusPendingCall): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QDBusPendingReply') -> None: ... + @typing.overload + def __init__(self, call: QDBusPendingCall) -> None: ... + @typing.overload + def __init__(self, reply: QDBusMessage) -> None: ... + + def value(self, type: typing.Any = ...) -> typing.Any: ... + def waitForFinished(self) -> None: ... + def reply(self) -> QDBusMessage: ... + def isValid(self) -> bool: ... + def isFinished(self) -> bool: ... + def isError(self) -> bool: ... + def error(self) -> QDBusError: ... + def argumentAt(self, index: int) -> typing.Any: ... + + +class QDBusReply(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, reply: QDBusMessage) -> None: ... + @typing.overload + def __init__(self, call: QDBusPendingCall) -> None: ... + @typing.overload + def __init__(self, error: QDBusError) -> None: ... + @typing.overload + def __init__(self, other: 'QDBusReply') -> None: ... + + def value(self, type: typing.Any = ...) -> typing.Any: ... + def isValid(self) -> bool: ... + def error(self) -> QDBusError: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtDesigner.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtDesigner.abi3.so new file mode 100644 index 0000000..ef99c0e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtDesigner.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtDesigner.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtDesigner.pyi new file mode 100644 index 0000000..c30394c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtDesigner.pyi @@ -0,0 +1,490 @@ +# The PEP 484 type hints stub file for the QtDesigner module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QDesignerActionEditorInterface(QtWidgets.QWidget): + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget], flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def setFormWindow(self, formWindow: typing.Optional['QDesignerFormWindowInterface']) -> None: ... + def unmanageAction(self, action: typing.Optional[QtWidgets.QAction]) -> None: ... + def manageAction(self, action: typing.Optional[QtWidgets.QAction]) -> None: ... + def core(self) -> typing.Optional['QDesignerFormEditorInterface']: ... + + +class QAbstractFormBuilder(PyQt5.sipsimplewrapper): + + def __init__(self) -> None: ... + + def errorString(self) -> str: ... + def workingDirectory(self) -> QtCore.QDir: ... + def setWorkingDirectory(self, directory: QtCore.QDir) -> None: ... + def save(self, dev: typing.Optional[QtCore.QIODevice], widget: typing.Optional[QtWidgets.QWidget]) -> None: ... + def load(self, device: typing.Optional[QtCore.QIODevice], parent: typing.Optional[QtWidgets.QWidget] = ...) -> typing.Optional[QtWidgets.QWidget]: ... + + +class QDesignerFormEditorInterface(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setActionEditor(self, actionEditor: typing.Optional[QDesignerActionEditorInterface]) -> None: ... + def setObjectInspector(self, objectInspector: typing.Optional['QDesignerObjectInspectorInterface']) -> None: ... + def setPropertyEditor(self, propertyEditor: typing.Optional['QDesignerPropertyEditorInterface']) -> None: ... + def setWidgetBox(self, widgetBox: typing.Optional['QDesignerWidgetBoxInterface']) -> None: ... + def actionEditor(self) -> typing.Optional[QDesignerActionEditorInterface]: ... + def formWindowManager(self) -> typing.Optional['QDesignerFormWindowManagerInterface']: ... + def objectInspector(self) -> typing.Optional['QDesignerObjectInspectorInterface']: ... + def propertyEditor(self) -> typing.Optional['QDesignerPropertyEditorInterface']: ... + def widgetBox(self) -> typing.Optional['QDesignerWidgetBoxInterface']: ... + def topLevel(self) -> typing.Optional[QtWidgets.QWidget]: ... + def extensionManager(self) -> typing.Optional['QExtensionManager']: ... + + +class QDesignerFormWindowInterface(QtWidgets.QWidget): + + class FeatureFlag(int): + EditFeature = ... # type: QDesignerFormWindowInterface.FeatureFlag + GridFeature = ... # type: QDesignerFormWindowInterface.FeatureFlag + TabOrderFeature = ... # type: QDesignerFormWindowInterface.FeatureFlag + DefaultFeature = ... # type: QDesignerFormWindowInterface.FeatureFlag + + class Feature(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> 'QDesignerFormWindowInterface.Feature': ... + def __xor__(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> 'QDesignerFormWindowInterface.Feature': ... + def __ior__(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> 'QDesignerFormWindowInterface.Feature': ... + def __or__(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> 'QDesignerFormWindowInterface.Feature': ... + def __iand__(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> 'QDesignerFormWindowInterface.Feature': ... + def __and__(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> 'QDesignerFormWindowInterface.Feature': ... + def __invert__(self) -> 'QDesignerFormWindowInterface.Feature': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def activateResourceFilePaths(self, paths: typing.Iterable[typing.Optional[str]]) -> typing.Tuple[typing.Optional[int], typing.Optional[str]]: ... + def formContainer(self) -> typing.Optional[QtWidgets.QWidget]: ... + def activeResourceFilePaths(self) -> typing.List[str]: ... + def checkContents(self) -> typing.List[str]: ... + objectRemoved: typing.ClassVar[QtCore.pyqtSignal] + widgetRemoved: typing.ClassVar[QtCore.pyqtSignal] + changed: typing.ClassVar[QtCore.pyqtSignal] + activated: typing.ClassVar[QtCore.pyqtSignal] + aboutToUnmanageWidget: typing.ClassVar[QtCore.pyqtSignal] + widgetUnmanaged: typing.ClassVar[QtCore.pyqtSignal] + widgetManaged: typing.ClassVar[QtCore.pyqtSignal] + resourceFilesChanged: typing.ClassVar[QtCore.pyqtSignal] + geometryChanged: typing.ClassVar[QtCore.pyqtSignal] + selectionChanged: typing.ClassVar[QtCore.pyqtSignal] + featureChanged: typing.ClassVar[QtCore.pyqtSignal] + fileNameChanged: typing.ClassVar[QtCore.pyqtSignal] + mainContainerChanged: typing.ClassVar[QtCore.pyqtSignal] + def setFileName(self, fileName: typing.Optional[str]) -> None: ... + def setGrid(self, grid: QtCore.QPoint) -> None: ... + def selectWidget(self, widget: typing.Optional[QtWidgets.QWidget], select: bool = ...) -> None: ... + def clearSelection(self, update: bool = ...) -> None: ... + def setDirty(self, dirty: bool) -> None: ... + def setFeatures(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> None: ... + def unmanageWidget(self, widget: typing.Optional[QtWidgets.QWidget]) -> None: ... + def manageWidget(self, widget: typing.Optional[QtWidgets.QWidget]) -> None: ... + def removeResourceFile(self, path: typing.Optional[str]) -> None: ... + def addResourceFile(self, path: typing.Optional[str]) -> None: ... + def resourceFiles(self) -> typing.List[str]: ... + def emitSelectionChanged(self) -> None: ... + @typing.overload + @staticmethod + def findFormWindow(w: typing.Optional[QtWidgets.QWidget]) -> typing.Optional['QDesignerFormWindowInterface']: ... + @typing.overload + @staticmethod + def findFormWindow(obj: typing.Optional[QtCore.QObject]) -> typing.Optional['QDesignerFormWindowInterface']: ... + def isDirty(self) -> bool: ... + def isManaged(self, widget: typing.Optional[QtWidgets.QWidget]) -> bool: ... + def setMainContainer(self, mainContainer: typing.Optional[QtWidgets.QWidget]) -> None: ... + def mainContainer(self) -> typing.Optional[QtWidgets.QWidget]: ... + def grid(self) -> QtCore.QPoint: ... + def cursor(self) -> typing.Optional['QDesignerFormWindowCursorInterface']: ... + def core(self) -> typing.Optional[QDesignerFormEditorInterface]: ... + def setIncludeHints(self, includeHints: typing.Iterable[typing.Optional[str]]) -> None: ... + def includeHints(self) -> typing.List[str]: ... + def setExportMacro(self, exportMacro: typing.Optional[str]) -> None: ... + def exportMacro(self) -> str: ... + def setPixmapFunction(self, pixmapFunction: typing.Optional[str]) -> None: ... + def pixmapFunction(self) -> str: ... + def setLayoutFunction(self, margin: typing.Optional[str], spacing: typing.Optional[str]) -> None: ... + def layoutFunction(self) -> typing.Tuple[typing.Optional[str], typing.Optional[str]]: ... + def setLayoutDefault(self, margin: int, spacing: int) -> None: ... + def layoutDefault(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int]]: ... + def setComment(self, comment: typing.Optional[str]) -> None: ... + def comment(self) -> str: ... + def setAuthor(self, author: typing.Optional[str]) -> None: ... + def author(self) -> str: ... + def hasFeature(self, f: typing.Union['QDesignerFormWindowInterface.Feature', 'QDesignerFormWindowInterface.FeatureFlag']) -> bool: ... + def features(self) -> 'QDesignerFormWindowInterface.Feature': ... + @typing.overload + def setContents(self, dev: typing.Optional[QtCore.QIODevice], errorMessage: typing.Optional[typing.Optional[str]] = ...) -> bool: ... + @typing.overload + def setContents(self, contents: typing.Optional[str]) -> bool: ... + def contents(self) -> str: ... + def absoluteDir(self) -> QtCore.QDir: ... + def fileName(self) -> str: ... + + +class QDesignerFormWindowCursorInterface(PyQt5.sipsimplewrapper): + + class MoveMode(int): + MoveAnchor = ... # type: QDesignerFormWindowCursorInterface.MoveMode + KeepAnchor = ... # type: QDesignerFormWindowCursorInterface.MoveMode + + class MoveOperation(int): + NoMove = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + Start = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + End = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + Next = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + Prev = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + Left = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + Right = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + Up = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + Down = ... # type: QDesignerFormWindowCursorInterface.MoveOperation + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDesignerFormWindowCursorInterface') -> None: ... + + def isWidgetSelected(self, widget: typing.Optional[QtWidgets.QWidget]) -> bool: ... + def resetWidgetProperty(self, widget: typing.Optional[QtWidgets.QWidget], name: typing.Optional[str]) -> None: ... + def setWidgetProperty(self, widget: typing.Optional[QtWidgets.QWidget], name: typing.Optional[str], value: typing.Any) -> None: ... + def setProperty(self, name: typing.Optional[str], value: typing.Any) -> None: ... + def selectedWidget(self, index: int) -> typing.Optional[QtWidgets.QWidget]: ... + def selectedWidgetCount(self) -> int: ... + def hasSelection(self) -> bool: ... + def widget(self, index: int) -> typing.Optional[QtWidgets.QWidget]: ... + def widgetCount(self) -> int: ... + def current(self) -> typing.Optional[QtWidgets.QWidget]: ... + def setPosition(self, pos: int, mode: 'QDesignerFormWindowCursorInterface.MoveMode' = ...) -> None: ... + def position(self) -> int: ... + def movePosition(self, op: 'QDesignerFormWindowCursorInterface.MoveOperation', mode: 'QDesignerFormWindowCursorInterface.MoveMode' = ...) -> bool: ... + def formWindow(self) -> typing.Optional[QDesignerFormWindowInterface]: ... + + +class QDesignerFormWindowManagerInterface(QtCore.QObject): + + class ActionGroup(int): + StyledPreviewActionGroup = ... # type: QDesignerFormWindowManagerInterface.ActionGroup + + class Action(int): + CutAction = ... # type: QDesignerFormWindowManagerInterface.Action + CopyAction = ... # type: QDesignerFormWindowManagerInterface.Action + PasteAction = ... # type: QDesignerFormWindowManagerInterface.Action + DeleteAction = ... # type: QDesignerFormWindowManagerInterface.Action + SelectAllAction = ... # type: QDesignerFormWindowManagerInterface.Action + LowerAction = ... # type: QDesignerFormWindowManagerInterface.Action + RaiseAction = ... # type: QDesignerFormWindowManagerInterface.Action + UndoAction = ... # type: QDesignerFormWindowManagerInterface.Action + RedoAction = ... # type: QDesignerFormWindowManagerInterface.Action + HorizontalLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action + VerticalLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action + SplitHorizontalAction = ... # type: QDesignerFormWindowManagerInterface.Action + SplitVerticalAction = ... # type: QDesignerFormWindowManagerInterface.Action + GridLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action + FormLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action + BreakLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action + AdjustSizeAction = ... # type: QDesignerFormWindowManagerInterface.Action + SimplifyLayoutAction = ... # type: QDesignerFormWindowManagerInterface.Action + DefaultPreviewAction = ... # type: QDesignerFormWindowManagerInterface.Action + FormWindowSettingsDialogAction = ... # type: QDesignerFormWindowManagerInterface.Action + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def showPluginDialog(self) -> None: ... + def closeAllPreviews(self) -> None: ... + def showPreview(self) -> None: ... + def actionGroup(self, actionGroup: 'QDesignerFormWindowManagerInterface.ActionGroup') -> typing.Optional[QtWidgets.QActionGroup]: ... + def action(self, action: 'QDesignerFormWindowManagerInterface.Action') -> typing.Optional[QtWidgets.QAction]: ... + def setActiveFormWindow(self, formWindow: typing.Optional[QDesignerFormWindowInterface]) -> None: ... + def removeFormWindow(self, formWindow: typing.Optional[QDesignerFormWindowInterface]) -> None: ... + def addFormWindow(self, formWindow: typing.Optional[QDesignerFormWindowInterface]) -> None: ... + formWindowSettingsChanged: typing.ClassVar[QtCore.pyqtSignal] + activeFormWindowChanged: typing.ClassVar[QtCore.pyqtSignal] + formWindowRemoved: typing.ClassVar[QtCore.pyqtSignal] + formWindowAdded: typing.ClassVar[QtCore.pyqtSignal] + def core(self) -> typing.Optional[QDesignerFormEditorInterface]: ... + def createFormWindow(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> typing.Optional[QDesignerFormWindowInterface]: ... + def formWindow(self, index: int) -> typing.Optional[QDesignerFormWindowInterface]: ... + def formWindowCount(self) -> int: ... + def activeFormWindow(self) -> typing.Optional[QDesignerFormWindowInterface]: ... + def actionSimplifyLayout(self) -> typing.Optional[QtWidgets.QAction]: ... + def actionFormLayout(self) -> typing.Optional[QtWidgets.QAction]: ... + + +class QDesignerObjectInspectorInterface(QtWidgets.QWidget): + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget], flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def setFormWindow(self, formWindow: typing.Optional[QDesignerFormWindowInterface]) -> None: ... + def core(self) -> typing.Optional[QDesignerFormEditorInterface]: ... + + +class QDesignerPropertyEditorInterface(QtWidgets.QWidget): + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget], flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def setReadOnly(self, readOnly: bool) -> None: ... + def setPropertyValue(self, name: typing.Optional[str], value: typing.Any, changed: bool = ...) -> None: ... + def setObject(self, object: typing.Optional[QtCore.QObject]) -> None: ... + propertyChanged: typing.ClassVar[QtCore.pyqtSignal] + def currentPropertyName(self) -> str: ... + def object(self) -> typing.Optional[QtCore.QObject]: ... + def isReadOnly(self) -> bool: ... + def core(self) -> typing.Optional[QDesignerFormEditorInterface]: ... + + +class QDesignerWidgetBoxInterface(QtWidgets.QWidget): + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def save(self) -> bool: ... + def load(self) -> bool: ... + def fileName(self) -> str: ... + def setFileName(self, file_name: typing.Optional[str]) -> None: ... + + +class QDesignerContainerExtension(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDesignerContainerExtension') -> None: ... + + def canRemove(self, index: int) -> bool: ... + def canAddWidget(self) -> bool: ... + def remove(self, index: int) -> None: ... + def insertWidget(self, index: int, widget: typing.Optional[QtWidgets.QWidget]) -> None: ... + def addWidget(self, widget: typing.Optional[QtWidgets.QWidget]) -> None: ... + def setCurrentIndex(self, index: int) -> None: ... + def currentIndex(self) -> int: ... + def widget(self, index: int) -> typing.Optional[QtWidgets.QWidget]: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + + +class QDesignerCustomWidgetInterface(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDesignerCustomWidgetInterface') -> None: ... + + def codeTemplate(self) -> str: ... + def domXml(self) -> str: ... + def initialize(self, core: typing.Optional[QDesignerFormEditorInterface]) -> None: ... + def isInitialized(self) -> bool: ... + def createWidget(self, parent: typing.Optional[QtWidgets.QWidget]) -> typing.Optional[QtWidgets.QWidget]: ... + def isContainer(self) -> bool: ... + def icon(self) -> QtGui.QIcon: ... + def includeFile(self) -> str: ... + def whatsThis(self) -> str: ... + def toolTip(self) -> str: ... + def group(self) -> str: ... + def name(self) -> str: ... + + +class QDesignerCustomWidgetCollectionInterface(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDesignerCustomWidgetCollectionInterface') -> None: ... + + def customWidgets(self) -> typing.List[QDesignerCustomWidgetInterface]: ... + + +class QAbstractExtensionFactory(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QAbstractExtensionFactory') -> None: ... + + def extension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... + + +class QExtensionFactory(QtCore.QObject, QAbstractExtensionFactory): + + def __init__(self, parent: typing.Optional['QExtensionManager'] = ...) -> None: ... + + def createExtension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str], parent: typing.Optional[QtCore.QObject]) -> typing.Optional[QtCore.QObject]: ... + def extensionManager(self) -> typing.Optional['QExtensionManager']: ... + def extension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... + + +class QAbstractExtensionManager(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QAbstractExtensionManager') -> None: ... + + def extension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... + def unregisterExtensions(self, factory: typing.Optional[QAbstractExtensionFactory], iid: typing.Optional[str]) -> None: ... + def registerExtensions(self, factory: typing.Optional[QAbstractExtensionFactory], iid: typing.Optional[str]) -> None: ... + + +class QFormBuilder(QAbstractFormBuilder): + + def __init__(self) -> None: ... + + def customWidgets(self) -> typing.List[QDesignerCustomWidgetInterface]: ... + def setPluginPath(self, pluginPaths: typing.Iterable[typing.Optional[str]]) -> None: ... + def addPluginPath(self, pluginPath: typing.Optional[str]) -> None: ... + def clearPluginPaths(self) -> None: ... + def pluginPaths(self) -> typing.List[str]: ... + + +class QDesignerMemberSheetExtension(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDesignerMemberSheetExtension') -> None: ... + + def parameterNames(self, index: int) -> typing.List[QtCore.QByteArray]: ... + def parameterTypes(self, index: int) -> typing.List[QtCore.QByteArray]: ... + def signature(self, index: int) -> str: ... + def declaredInClass(self, index: int) -> str: ... + def inheritedFromWidget(self, index: int) -> bool: ... + def isSlot(self, index: int) -> bool: ... + def isSignal(self, index: int) -> bool: ... + def setVisible(self, index: int, b: bool) -> None: ... + def isVisible(self, index: int) -> bool: ... + def setMemberGroup(self, index: int, group: typing.Optional[str]) -> None: ... + def memberGroup(self, index: int) -> str: ... + def memberName(self, index: int) -> str: ... + def indexOf(self, name: typing.Optional[str]) -> int: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + + +class QDesignerPropertySheetExtension(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDesignerPropertySheetExtension') -> None: ... + + def isEnabled(self, index: int) -> bool: ... + def setChanged(self, index: int, changed: bool) -> None: ... + def isChanged(self, index: int) -> bool: ... + def setProperty(self, index: int, value: typing.Any) -> None: ... + def property(self, index: int) -> typing.Any: ... + def setAttribute(self, index: int, b: bool) -> None: ... + def isAttribute(self, index: int) -> bool: ... + def setVisible(self, index: int, b: bool) -> None: ... + def isVisible(self, index: int) -> bool: ... + def reset(self, index: int) -> bool: ... + def hasReset(self, index: int) -> bool: ... + def setPropertyGroup(self, index: int, group: typing.Optional[str]) -> None: ... + def propertyGroup(self, index: int) -> str: ... + def propertyName(self, index: int) -> str: ... + def indexOf(self, name: typing.Optional[str]) -> int: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + + +class QExtensionManager(QtCore.QObject, QAbstractExtensionManager): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def extension(self, object: typing.Optional[QtCore.QObject], iid: typing.Optional[str]) -> typing.Optional[QtCore.QObject]: ... + def unregisterExtensions(self, factory: typing.Optional[QAbstractExtensionFactory], iid: typing.Optional[str] = ...) -> None: ... + def registerExtensions(self, factory: typing.Optional[QAbstractExtensionFactory], iid: typing.Optional[str] = ...) -> None: ... + + +class QDesignerTaskMenuExtension(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDesignerTaskMenuExtension') -> None: ... + + def preferredEditAction(self) -> typing.Optional[QtWidgets.QAction]: ... + def taskActions(self) -> typing.List[QtWidgets.QAction]: ... + + +class QPyDesignerCustomWidgetCollectionPlugin(QtCore.QObject, QDesignerCustomWidgetCollectionInterface): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + +class QPyDesignerMemberSheetExtension(QtCore.QObject, QDesignerMemberSheetExtension): + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + +class QPyDesignerTaskMenuExtension(QtCore.QObject, QDesignerTaskMenuExtension): + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + +class QPyDesignerContainerExtension(QtCore.QObject, QDesignerContainerExtension): + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + +class QPyDesignerCustomWidgetPlugin(QtCore.QObject, QDesignerCustomWidgetInterface): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + +class QPyDesignerPropertySheetExtension(QtCore.QObject, QDesignerPropertySheetExtension): + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtGui.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtGui.abi3.so new file mode 100644 index 0000000..89da260 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtGui.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtGui.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtGui.pyi new file mode 100644 index 0000000..ce5b9f6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtGui.pyi @@ -0,0 +1,9337 @@ +# The PEP 484 type hints stub file for the QtGui module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_SHADER_ATTRIBUTE_ARRAY = typing.Union[typing.Sequence['QVector2D'], + typing.Sequence['QVector3D'], typing.Sequence['QVector4D'], + typing.Sequence[typing.Sequence[float]]] +PYQT_SHADER_UNIFORM_VALUE_ARRAY = typing.Union[typing.Sequence['QVector2D'], + typing.Sequence['QVector3D'], typing.Sequence['QVector4D'], + typing.Sequence['QMatrix2x2'], typing.Sequence['QMatrix2x3'], + typing.Sequence['QMatrix2x4'], typing.Sequence['QMatrix3x2'], + typing.Sequence['QMatrix3x3'], typing.Sequence['QMatrix3x4'], + typing.Sequence['QMatrix4x2'], typing.Sequence['QMatrix4x3'], + typing.Sequence['QMatrix4x4'], typing.Sequence[typing.Sequence[float]]] + + +class QAbstractTextDocumentLayout(QtCore.QObject): + + class Selection(PyQt5.sipsimplewrapper): + + cursor = ... # type: 'QTextCursor' + format = ... # type: 'QTextCharFormat' + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QAbstractTextDocumentLayout.Selection') -> None: ... + + class PaintContext(PyQt5.sipsimplewrapper): + + clip = ... # type: QtCore.QRectF + cursorPosition = ... # type: int + palette = ... # type: 'QPalette' + selections = ... # type: typing.Iterable['QAbstractTextDocumentLayout.Selection'] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QAbstractTextDocumentLayout.PaintContext') -> None: ... + + def __init__(self, doc: typing.Optional['QTextDocument']) -> None: ... + + def blockWithMarkerAt(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> 'QTextBlock': ... + def formatAt(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> 'QTextFormat': ... + def imageAt(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> str: ... + def format(self, pos: int) -> 'QTextCharFormat': ... + def drawInlineObject(self, painter: typing.Optional['QPainter'], rect: QtCore.QRectF, object: 'QTextInlineObject', posInDocument: int, format: 'QTextFormat') -> None: ... + def positionInlineObject(self, item: 'QTextInlineObject', posInDocument: int, format: 'QTextFormat') -> None: ... + def resizeInlineObject(self, item: 'QTextInlineObject', posInDocument: int, format: 'QTextFormat') -> None: ... + def documentChanged(self, from_: int, charsRemoved: int, charsAdded: int) -> None: ... + updateBlock: typing.ClassVar[QtCore.pyqtSignal] + pageCountChanged: typing.ClassVar[QtCore.pyqtSignal] + documentSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + update: typing.ClassVar[QtCore.pyqtSignal] + def handlerForObject(self, objectType: int) -> typing.Optional['QTextObjectInterface']: ... + def unregisterHandler(self, objectType: int, component: typing.Optional[QtCore.QObject] = ...) -> None: ... + def registerHandler(self, objectType: int, component: typing.Optional[QtCore.QObject]) -> None: ... + def document(self) -> typing.Optional['QTextDocument']: ... + def paintDevice(self) -> typing.Optional['QPaintDevice']: ... + def setPaintDevice(self, device: typing.Optional['QPaintDevice']) -> None: ... + def blockBoundingRect(self, block: 'QTextBlock') -> QtCore.QRectF: ... + def frameBoundingRect(self, frame: typing.Optional['QTextFrame']) -> QtCore.QRectF: ... + def documentSize(self) -> QtCore.QSizeF: ... + def pageCount(self) -> int: ... + def anchorAt(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> str: ... + def hitTest(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint], accuracy: QtCore.Qt.HitTestAccuracy) -> int: ... + def draw(self, painter: typing.Optional['QPainter'], context: 'QAbstractTextDocumentLayout.PaintContext') -> None: ... + + +class QTextObjectInterface(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextObjectInterface') -> None: ... + + def drawObject(self, painter: typing.Optional['QPainter'], rect: QtCore.QRectF, doc: typing.Optional['QTextDocument'], posInDocument: int, format: 'QTextFormat') -> None: ... + def intrinsicSize(self, doc: typing.Optional['QTextDocument'], posInDocument: int, format: 'QTextFormat') -> QtCore.QSizeF: ... + + +class QBackingStore(PyQt5.sipsimplewrapper): + + def __init__(self, window: typing.Optional['QWindow']) -> None: ... + + def hasStaticContents(self) -> bool: ... + def staticContents(self) -> 'QRegion': ... + def setStaticContents(self, region: 'QRegion') -> None: ... + def endPaint(self) -> None: ... + def beginPaint(self, a0: 'QRegion') -> None: ... + def scroll(self, area: 'QRegion', dx: int, dy: int) -> bool: ... + def size(self) -> QtCore.QSize: ... + def resize(self, size: QtCore.QSize) -> None: ... + def flush(self, region: 'QRegion', window: typing.Optional['QWindow'] = ..., offset: QtCore.QPoint = ...) -> None: ... + def paintDevice(self) -> typing.Optional['QPaintDevice']: ... + def window(self) -> typing.Optional['QWindow']: ... + + +class QPaintDevice(PyQt5.sipsimplewrapper): + + class PaintDeviceMetric(int): + PdmWidth = ... # type: QPaintDevice.PaintDeviceMetric + PdmHeight = ... # type: QPaintDevice.PaintDeviceMetric + PdmWidthMM = ... # type: QPaintDevice.PaintDeviceMetric + PdmHeightMM = ... # type: QPaintDevice.PaintDeviceMetric + PdmNumColors = ... # type: QPaintDevice.PaintDeviceMetric + PdmDepth = ... # type: QPaintDevice.PaintDeviceMetric + PdmDpiX = ... # type: QPaintDevice.PaintDeviceMetric + PdmDpiY = ... # type: QPaintDevice.PaintDeviceMetric + PdmPhysicalDpiX = ... # type: QPaintDevice.PaintDeviceMetric + PdmPhysicalDpiY = ... # type: QPaintDevice.PaintDeviceMetric + PdmDevicePixelRatio = ... # type: QPaintDevice.PaintDeviceMetric + PdmDevicePixelRatioScaled = ... # type: QPaintDevice.PaintDeviceMetric + + def __init__(self) -> None: ... + + @staticmethod + def devicePixelRatioFScale() -> float: ... + def devicePixelRatioF(self) -> float: ... + def metric(self, metric: 'QPaintDevice.PaintDeviceMetric') -> int: ... + def devicePixelRatio(self) -> int: ... + def colorCount(self) -> int: ... + def paintingActive(self) -> bool: ... + def depth(self) -> int: ... + def physicalDpiY(self) -> int: ... + def physicalDpiX(self) -> int: ... + def logicalDpiY(self) -> int: ... + def logicalDpiX(self) -> int: ... + def heightMM(self) -> int: ... + def widthMM(self) -> int: ... + def height(self) -> int: ... + def width(self) -> int: ... + def paintEngine(self) -> typing.Optional['QPaintEngine']: ... + + +class QPixmap(QPaintDevice): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, w: int, h: int) -> None: ... + @typing.overload + def __init__(self, a0: QtCore.QSize) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: typing.Optional[str] = ..., flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> None: ... + @typing.overload + def __init__(self, xpm: typing.List[str]) -> None: ... + @typing.overload + def __init__(self, a0: 'QPixmap') -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def setDevicePixelRatio(self, scaleFactor: float) -> None: ... + def devicePixelRatio(self) -> float: ... + def swap(self, other: 'QPixmap') -> None: ... + @typing.overload + def scroll(self, dx: int, dy: int, rect: QtCore.QRect) -> typing.Optional['QRegion']: ... + @typing.overload + def scroll(self, dx: int, dy: int, x: int, y: int, width: int, height: int) -> typing.Optional['QRegion']: ... + def cacheKey(self) -> int: ... + @staticmethod + def trueMatrix(m: 'QTransform', w: int, h: int) -> 'QTransform': ... + def transformed(self, transform: 'QTransform', mode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... + def metric(self, a0: QPaintDevice.PaintDeviceMetric) -> int: ... + def paintEngine(self) -> typing.Optional['QPaintEngine']: ... + def isQBitmap(self) -> bool: ... + def detach(self) -> None: ... + @typing.overload + def copy(self, rect: QtCore.QRect = ...) -> 'QPixmap': ... + @typing.overload + def copy(self, ax: int, ay: int, awidth: int, aheight: int) -> 'QPixmap': ... + @typing.overload + def save(self, fileName: typing.Optional[str], format: typing.Optional[str] = ..., quality: int = ...) -> bool: ... + @typing.overload + def save(self, device: typing.Optional[QtCore.QIODevice], format: typing.Optional[str] = ..., quality: int = ...) -> bool: ... + @typing.overload + def loadFromData(self, buf: typing.Optional[PyQt5.sip.array[bytes]], format: typing.Optional[str] = ..., flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> bool: ... + @typing.overload + def loadFromData(self, buf: typing.Union[QtCore.QByteArray, bytes, bytearray], format: typing.Optional[str] = ..., flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> bool: ... + def load(self, fileName: typing.Optional[str], format: typing.Optional[str] = ..., flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> bool: ... + def convertFromImage(self, img: 'QImage', flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> bool: ... + @staticmethod + def fromImageReader(imageReader: typing.Optional['QImageReader'], flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> 'QPixmap': ... + @staticmethod + def fromImage(image: 'QImage', flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> 'QPixmap': ... + def toImage(self) -> 'QImage': ... + def scaledToHeight(self, height: int, mode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... + def scaledToWidth(self, width: int, mode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... + @typing.overload + def scaled(self, width: int, height: int, aspectRatioMode: QtCore.Qt.AspectRatioMode = ..., transformMode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... + @typing.overload + def scaled(self, size: QtCore.QSize, aspectRatioMode: QtCore.Qt.AspectRatioMode = ..., transformMode: QtCore.Qt.TransformationMode = ...) -> 'QPixmap': ... + def createMaskFromColor(self, maskColor: typing.Union['QColor', QtCore.Qt.GlobalColor], mode: QtCore.Qt.MaskMode = ...) -> 'QBitmap': ... + def createHeuristicMask(self, clipTight: bool = ...) -> 'QBitmap': ... + def hasAlphaChannel(self) -> bool: ... + def hasAlpha(self) -> bool: ... + def setMask(self, a0: 'QBitmap') -> None: ... + def mask(self) -> 'QBitmap': ... + def fill(self, color: typing.Union['QColor', QtCore.Qt.GlobalColor] = ...) -> None: ... + @staticmethod + def defaultDepth() -> int: ... + def depth(self) -> int: ... + def rect(self) -> QtCore.QRect: ... + def size(self) -> QtCore.QSize: ... + def height(self) -> int: ... + def width(self) -> int: ... + def devType(self) -> int: ... + def isNull(self) -> bool: ... + + +class QBitmap(QPixmap): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QBitmap') -> None: ... + @typing.overload + def __init__(self, a0: QPixmap) -> None: ... + @typing.overload + def __init__(self, w: int, h: int) -> None: ... + @typing.overload + def __init__(self, a0: QtCore.QSize) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def swap(self, other: 'QBitmap') -> None: ... + def transformed(self, matrix: 'QTransform') -> 'QBitmap': ... + @staticmethod + def fromData(size: QtCore.QSize, bits: typing.Optional[bytes], format: 'QImage.Format' = ...) -> 'QBitmap': ... + @staticmethod + def fromImage(image: 'QImage', flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> 'QBitmap': ... + def clear(self) -> None: ... + + +class QColor(PyQt5.sipsimplewrapper): + + class NameFormat(int): + HexRgb = ... # type: QColor.NameFormat + HexArgb = ... # type: QColor.NameFormat + + class Spec(int): + Invalid = ... # type: QColor.Spec + Rgb = ... # type: QColor.Spec + Hsv = ... # type: QColor.Spec + Cmyk = ... # type: QColor.Spec + Hsl = ... # type: QColor.Spec + ExtendedRgb = ... # type: QColor.Spec + + @typing.overload + def __init__(self, color: QtCore.Qt.GlobalColor) -> None: ... + @typing.overload + def __init__(self, rgb: int) -> None: ... + @typing.overload + def __init__(self, rgba64: 'QRgba64') -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, r: int, g: int, b: int, alpha: int = ...) -> None: ... + @typing.overload + def __init__(self, aname: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, acolor: typing.Union['QColor', QtCore.Qt.GlobalColor]) -> None: ... + + def toExtendedRgb(self) -> 'QColor': ... + @typing.overload + @staticmethod + def fromRgba64(r: int, g: int, b: int, alpha: int = ...) -> 'QColor': ... + @typing.overload + @staticmethod + def fromRgba64(rgba: 'QRgba64') -> 'QColor': ... + def setRgba64(self, rgba: 'QRgba64') -> None: ... + def rgba64(self) -> 'QRgba64': ... + @staticmethod + def isValidColor(name: typing.Optional[str]) -> bool: ... + @staticmethod + def fromHslF(h: float, s: float, l: float, alpha: float = ...) -> 'QColor': ... + @staticmethod + def fromHsl(h: int, s: int, l: int, alpha: int = ...) -> 'QColor': ... + def toHsl(self) -> 'QColor': ... + def setHslF(self, h: float, s: float, l: float, alpha: float = ...) -> None: ... + def getHslF(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + def setHsl(self, h: int, s: int, l: int, alpha: int = ...) -> None: ... + def getHsl(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + def lightnessF(self) -> float: ... + def hslSaturationF(self) -> float: ... + def hslHueF(self) -> float: ... + def lightness(self) -> int: ... + def hslSaturation(self) -> int: ... + def hslHue(self) -> int: ... + def hsvSaturationF(self) -> float: ... + def hsvHueF(self) -> float: ... + def hsvSaturation(self) -> int: ... + def hsvHue(self) -> int: ... + def darker(self, factor: int = ...) -> 'QColor': ... + def lighter(self, factor: int = ...) -> 'QColor': ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @staticmethod + def fromCmykF(c: float, m: float, y: float, k: float, alpha: float = ...) -> 'QColor': ... + @staticmethod + def fromCmyk(c: int, m: int, y: int, k: int, alpha: int = ...) -> 'QColor': ... + @staticmethod + def fromHsvF(h: float, s: float, v: float, alpha: float = ...) -> 'QColor': ... + @staticmethod + def fromHsv(h: int, s: int, v: int, alpha: int = ...) -> 'QColor': ... + @staticmethod + def fromRgbF(r: float, g: float, b: float, alpha: float = ...) -> 'QColor': ... + @staticmethod + def fromRgba(rgba: int) -> 'QColor': ... + @typing.overload + @staticmethod + def fromRgb(rgb: int) -> 'QColor': ... + @typing.overload + @staticmethod + def fromRgb(r: int, g: int, b: int, alpha: int = ...) -> 'QColor': ... + def convertTo(self, colorSpec: 'QColor.Spec') -> 'QColor': ... + def toCmyk(self) -> 'QColor': ... + def toHsv(self) -> 'QColor': ... + def toRgb(self) -> 'QColor': ... + def setCmykF(self, c: float, m: float, y: float, k: float, alpha: float = ...) -> None: ... + def getCmykF(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + def setCmyk(self, c: int, m: int, y: int, k: int, alpha: int = ...) -> None: ... + def getCmyk(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + def blackF(self) -> float: ... + def yellowF(self) -> float: ... + def magentaF(self) -> float: ... + def cyanF(self) -> float: ... + def black(self) -> int: ... + def yellow(self) -> int: ... + def magenta(self) -> int: ... + def cyan(self) -> int: ... + def setHsvF(self, h: float, s: float, v: float, alpha: float = ...) -> None: ... + def getHsvF(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + def setHsv(self, h: int, s: int, v: int, alpha: int = ...) -> None: ... + def getHsv(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + def valueF(self) -> float: ... + def saturationF(self) -> float: ... + def hueF(self) -> float: ... + def value(self) -> int: ... + def saturation(self) -> int: ... + def hue(self) -> int: ... + def rgb(self) -> int: ... + def setRgba(self, rgba: int) -> None: ... + def rgba(self) -> int: ... + def setRgbF(self, r: float, g: float, b: float, alpha: float = ...) -> None: ... + def getRgbF(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + @typing.overload + def setRgb(self, r: int, g: int, b: int, alpha: int = ...) -> None: ... + @typing.overload + def setRgb(self, rgb: int) -> None: ... + def getRgb(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + def setBlueF(self, blue: float) -> None: ... + def setGreenF(self, green: float) -> None: ... + def setRedF(self, red: float) -> None: ... + def blueF(self) -> float: ... + def greenF(self) -> float: ... + def redF(self) -> float: ... + def setBlue(self, blue: int) -> None: ... + def setGreen(self, green: int) -> None: ... + def setRed(self, red: int) -> None: ... + def blue(self) -> int: ... + def green(self) -> int: ... + def red(self) -> int: ... + def setAlphaF(self, alpha: float) -> None: ... + def alphaF(self) -> float: ... + def setAlpha(self, alpha: int) -> None: ... + def alpha(self) -> int: ... + def spec(self) -> 'QColor.Spec': ... + @staticmethod + def colorNames() -> typing.List[str]: ... + def setNamedColor(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def name(self) -> str: ... + @typing.overload + def name(self, format: 'QColor.NameFormat') -> str: ... + + +class QColorConstants(PyQt5.sip.simplewrapper): + + class Svg(PyQt5.sip.simplewrapper): + + aliceblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + antiquewhite = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + aqua = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + aquamarine = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + azure = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + beige = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + bisque = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + black = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + blanchedalmond = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + blue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + blueviolet = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + brown = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + burlywood = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + cadetblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + chartreuse = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + chocolate = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + coral = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + cornflowerblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + cornsilk = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + crimson = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + cyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkcyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkgoldenrod = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkgray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkgrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkkhaki = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkmagenta = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkolivegreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkorange = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkorchid = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkred = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darksalmon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkseagreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkslateblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkslategray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkslategrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkturquoise = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + darkviolet = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + deeppink = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + deepskyblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + dimgray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + dimgrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + dodgerblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + firebrick = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + floralwhite = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + forestgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + fuchsia = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + gainsboro = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + ghostwhite = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + gold = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + goldenrod = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + gray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + green = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + greenyellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + grey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + honeydew = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + hotpink = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + indianred = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + indigo = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + ivory = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + khaki = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lavender = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lavenderblush = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lawngreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lemonchiffon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightcoral = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightcyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightgoldenrodyellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightgray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightgrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightpink = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightsalmon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightseagreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightskyblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightslategray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightslategrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightsteelblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lightyellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + lime = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + limegreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + linen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + magenta = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + maroon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumaquamarine = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumorchid = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumpurple = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumseagreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumslateblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumspringgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumturquoise = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mediumvioletred = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + midnightblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mintcream = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + mistyrose = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + moccasin = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + navajowhite = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + navy = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + oldlace = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + olive = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + olivedrab = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + orange = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + orangered = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + orchid = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + palegoldenrod = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + palegreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + paleturquoise = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + palevioletred = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + papayawhip = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + peachpuff = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + peru = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + pink = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + plum = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + powderblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + purple = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + red = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + rosybrown = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + royalblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + saddlebrown = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + salmon = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + sandybrown = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + seagreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + seashell = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + sienna = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + silver = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + skyblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + slateblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + slategray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + slategrey = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + snow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + springgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + steelblue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + tan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + teal = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + thistle = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + tomato = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + turquoise = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + violet = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + wheat = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + white = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + whitesmoke = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + yellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + yellowgreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + + Black = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Blue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Color0 = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Color1 = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Cyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + DarkBlue = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + DarkCyan = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + DarkGray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + DarkGreen = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + DarkMagenta = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + DarkRed = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + DarkYellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Gray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Green = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + LightGray = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Magenta = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Red = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Transparent = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + White = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + Yellow = ... # type: typing.Union[QColor, QtCore.Qt.GlobalColor] + + +class QBrush(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, bs: QtCore.Qt.BrushStyle) -> None: ... + @typing.overload + def __init__(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor], style: QtCore.Qt.BrushStyle = ...) -> None: ... + @typing.overload + def __init__(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor], pixmap: QPixmap) -> None: ... + @typing.overload + def __init__(self, pixmap: QPixmap) -> None: ... + @typing.overload + def __init__(self, image: 'QImage') -> None: ... + @typing.overload + def __init__(self, brush: typing.Union['QBrush', typing.Union[QColor, QtCore.Qt.GlobalColor], 'QGradient']) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def swap(self, other: 'QBrush') -> None: ... + def transform(self) -> 'QTransform': ... + def setTransform(self, a0: 'QTransform') -> None: ... + def textureImage(self) -> 'QImage': ... + def setTextureImage(self, image: 'QImage') -> None: ... + def color(self) -> QColor: ... + def style(self) -> QtCore.Qt.BrushStyle: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isOpaque(self) -> bool: ... + def gradient(self) -> typing.Optional['QGradient']: ... + @typing.overload + def setColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def setColor(self, acolor: QtCore.Qt.GlobalColor) -> None: ... + def setTexture(self, pixmap: QPixmap) -> None: ... + def texture(self) -> QPixmap: ... + def setStyle(self, a0: QtCore.Qt.BrushStyle) -> None: ... + + +class QGradient(PyQt5.sipsimplewrapper): + + class Preset(int): + WarmFlame = ... # type: QGradient.Preset + NightFade = ... # type: QGradient.Preset + SpringWarmth = ... # type: QGradient.Preset + JuicyPeach = ... # type: QGradient.Preset + YoungPassion = ... # type: QGradient.Preset + LadyLips = ... # type: QGradient.Preset + SunnyMorning = ... # type: QGradient.Preset + RainyAshville = ... # type: QGradient.Preset + FrozenDreams = ... # type: QGradient.Preset + WinterNeva = ... # type: QGradient.Preset + DustyGrass = ... # type: QGradient.Preset + TemptingAzure = ... # type: QGradient.Preset + HeavyRain = ... # type: QGradient.Preset + AmyCrisp = ... # type: QGradient.Preset + MeanFruit = ... # type: QGradient.Preset + DeepBlue = ... # type: QGradient.Preset + RipeMalinka = ... # type: QGradient.Preset + CloudyKnoxville = ... # type: QGradient.Preset + MalibuBeach = ... # type: QGradient.Preset + NewLife = ... # type: QGradient.Preset + TrueSunset = ... # type: QGradient.Preset + MorpheusDen = ... # type: QGradient.Preset + RareWind = ... # type: QGradient.Preset + NearMoon = ... # type: QGradient.Preset + WildApple = ... # type: QGradient.Preset + SaintPetersburg = ... # type: QGradient.Preset + PlumPlate = ... # type: QGradient.Preset + EverlastingSky = ... # type: QGradient.Preset + HappyFisher = ... # type: QGradient.Preset + Blessing = ... # type: QGradient.Preset + SharpeyeEagle = ... # type: QGradient.Preset + LadogaBottom = ... # type: QGradient.Preset + LemonGate = ... # type: QGradient.Preset + ItmeoBranding = ... # type: QGradient.Preset + ZeusMiracle = ... # type: QGradient.Preset + OldHat = ... # type: QGradient.Preset + StarWine = ... # type: QGradient.Preset + HappyAcid = ... # type: QGradient.Preset + AwesomePine = ... # type: QGradient.Preset + NewYork = ... # type: QGradient.Preset + ShyRainbow = ... # type: QGradient.Preset + MixedHopes = ... # type: QGradient.Preset + FlyHigh = ... # type: QGradient.Preset + StrongBliss = ... # type: QGradient.Preset + FreshMilk = ... # type: QGradient.Preset + SnowAgain = ... # type: QGradient.Preset + FebruaryInk = ... # type: QGradient.Preset + KindSteel = ... # type: QGradient.Preset + SoftGrass = ... # type: QGradient.Preset + GrownEarly = ... # type: QGradient.Preset + SharpBlues = ... # type: QGradient.Preset + ShadyWater = ... # type: QGradient.Preset + DirtyBeauty = ... # type: QGradient.Preset + GreatWhale = ... # type: QGradient.Preset + TeenNotebook = ... # type: QGradient.Preset + PoliteRumors = ... # type: QGradient.Preset + SweetPeriod = ... # type: QGradient.Preset + WideMatrix = ... # type: QGradient.Preset + SoftCherish = ... # type: QGradient.Preset + RedSalvation = ... # type: QGradient.Preset + BurningSpring = ... # type: QGradient.Preset + NightParty = ... # type: QGradient.Preset + SkyGlider = ... # type: QGradient.Preset + HeavenPeach = ... # type: QGradient.Preset + PurpleDivision = ... # type: QGradient.Preset + AquaSplash = ... # type: QGradient.Preset + SpikyNaga = ... # type: QGradient.Preset + LoveKiss = ... # type: QGradient.Preset + CleanMirror = ... # type: QGradient.Preset + PremiumDark = ... # type: QGradient.Preset + ColdEvening = ... # type: QGradient.Preset + CochitiLake = ... # type: QGradient.Preset + SummerGames = ... # type: QGradient.Preset + PassionateBed = ... # type: QGradient.Preset + MountainRock = ... # type: QGradient.Preset + DesertHump = ... # type: QGradient.Preset + JungleDay = ... # type: QGradient.Preset + PhoenixStart = ... # type: QGradient.Preset + OctoberSilence = ... # type: QGradient.Preset + FarawayRiver = ... # type: QGradient.Preset + AlchemistLab = ... # type: QGradient.Preset + OverSun = ... # type: QGradient.Preset + PremiumWhite = ... # type: QGradient.Preset + MarsParty = ... # type: QGradient.Preset + EternalConstance = ... # type: QGradient.Preset + JapanBlush = ... # type: QGradient.Preset + SmilingRain = ... # type: QGradient.Preset + CloudyApple = ... # type: QGradient.Preset + BigMango = ... # type: QGradient.Preset + HealthyWater = ... # type: QGradient.Preset + AmourAmour = ... # type: QGradient.Preset + RiskyConcrete = ... # type: QGradient.Preset + StrongStick = ... # type: QGradient.Preset + ViciousStance = ... # type: QGradient.Preset + PaloAlto = ... # type: QGradient.Preset + HappyMemories = ... # type: QGradient.Preset + MidnightBloom = ... # type: QGradient.Preset + Crystalline = ... # type: QGradient.Preset + PartyBliss = ... # type: QGradient.Preset + ConfidentCloud = ... # type: QGradient.Preset + LeCocktail = ... # type: QGradient.Preset + RiverCity = ... # type: QGradient.Preset + FrozenBerry = ... # type: QGradient.Preset + ChildCare = ... # type: QGradient.Preset + FlyingLemon = ... # type: QGradient.Preset + NewRetrowave = ... # type: QGradient.Preset + HiddenJaguar = ... # type: QGradient.Preset + AboveTheSky = ... # type: QGradient.Preset + Nega = ... # type: QGradient.Preset + DenseWater = ... # type: QGradient.Preset + Seashore = ... # type: QGradient.Preset + MarbleWall = ... # type: QGradient.Preset + CheerfulCaramel = ... # type: QGradient.Preset + NightSky = ... # type: QGradient.Preset + MagicLake = ... # type: QGradient.Preset + YoungGrass = ... # type: QGradient.Preset + ColorfulPeach = ... # type: QGradient.Preset + GentleCare = ... # type: QGradient.Preset + PlumBath = ... # type: QGradient.Preset + HappyUnicorn = ... # type: QGradient.Preset + AfricanField = ... # type: QGradient.Preset + SolidStone = ... # type: QGradient.Preset + OrangeJuice = ... # type: QGradient.Preset + GlassWater = ... # type: QGradient.Preset + NorthMiracle = ... # type: QGradient.Preset + FruitBlend = ... # type: QGradient.Preset + MillenniumPine = ... # type: QGradient.Preset + HighFlight = ... # type: QGradient.Preset + MoleHall = ... # type: QGradient.Preset + SpaceShift = ... # type: QGradient.Preset + ForestInei = ... # type: QGradient.Preset + RoyalGarden = ... # type: QGradient.Preset + RichMetal = ... # type: QGradient.Preset + JuicyCake = ... # type: QGradient.Preset + SmartIndigo = ... # type: QGradient.Preset + SandStrike = ... # type: QGradient.Preset + NorseBeauty = ... # type: QGradient.Preset + AquaGuidance = ... # type: QGradient.Preset + SunVeggie = ... # type: QGradient.Preset + SeaLord = ... # type: QGradient.Preset + BlackSea = ... # type: QGradient.Preset + GrassShampoo = ... # type: QGradient.Preset + LandingAircraft = ... # type: QGradient.Preset + WitchDance = ... # type: QGradient.Preset + SleeplessNight = ... # type: QGradient.Preset + AngelCare = ... # type: QGradient.Preset + CrystalRiver = ... # type: QGradient.Preset + SoftLipstick = ... # type: QGradient.Preset + SaltMountain = ... # type: QGradient.Preset + PerfectWhite = ... # type: QGradient.Preset + FreshOasis = ... # type: QGradient.Preset + StrictNovember = ... # type: QGradient.Preset + MorningSalad = ... # type: QGradient.Preset + DeepRelief = ... # type: QGradient.Preset + SeaStrike = ... # type: QGradient.Preset + NightCall = ... # type: QGradient.Preset + SupremeSky = ... # type: QGradient.Preset + LightBlue = ... # type: QGradient.Preset + MindCrawl = ... # type: QGradient.Preset + LilyMeadow = ... # type: QGradient.Preset + SugarLollipop = ... # type: QGradient.Preset + SweetDessert = ... # type: QGradient.Preset + MagicRay = ... # type: QGradient.Preset + TeenParty = ... # type: QGradient.Preset + FrozenHeat = ... # type: QGradient.Preset + GagarinView = ... # type: QGradient.Preset + FabledSunset = ... # type: QGradient.Preset + PerfectBlue = ... # type: QGradient.Preset + NumPresets = ... # type: QGradient.Preset + + class Spread(int): + PadSpread = ... # type: QGradient.Spread + ReflectSpread = ... # type: QGradient.Spread + RepeatSpread = ... # type: QGradient.Spread + + class Type(int): + LinearGradient = ... # type: QGradient.Type + RadialGradient = ... # type: QGradient.Type + ConicalGradient = ... # type: QGradient.Type + NoGradient = ... # type: QGradient.Type + + class CoordinateMode(int): + LogicalMode = ... # type: QGradient.CoordinateMode + StretchToDeviceMode = ... # type: QGradient.CoordinateMode + ObjectBoundingMode = ... # type: QGradient.CoordinateMode + ObjectMode = ... # type: QGradient.CoordinateMode + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QGradient.Preset') -> None: ... + @typing.overload + def __init__(self, a0: 'QGradient') -> None: ... + + def setCoordinateMode(self, mode: 'QGradient.CoordinateMode') -> None: ... + def coordinateMode(self) -> 'QGradient.CoordinateMode': ... + def setSpread(self, aspread: 'QGradient.Spread') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def stops(self) -> typing.List[typing.Tuple[float, QColor]]: ... + def setStops(self, stops: typing.Iterable[typing.Tuple[float, typing.Union[QColor, QtCore.Qt.GlobalColor]]]) -> None: ... + def setColorAt(self, pos: float, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + def spread(self) -> 'QGradient.Spread': ... + def type(self) -> 'QGradient.Type': ... + + +class QLinearGradient(QGradient): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, start: typing.Union[QtCore.QPointF, QtCore.QPoint], finalStop: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, xStart: float, yStart: float, xFinalStop: float, yFinalStop: float) -> None: ... + @typing.overload + def __init__(self, a0: 'QLinearGradient') -> None: ... + + @typing.overload + def setFinalStop(self, stop: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setFinalStop(self, x: float, y: float) -> None: ... + @typing.overload + def setStart(self, start: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setStart(self, x: float, y: float) -> None: ... + def finalStop(self) -> QtCore.QPointF: ... + def start(self) -> QtCore.QPointF: ... + + +class QRadialGradient(QGradient): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, center: typing.Union[QtCore.QPointF, QtCore.QPoint], radius: float, focalPoint: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, center: typing.Union[QtCore.QPointF, QtCore.QPoint], centerRadius: float, focalPoint: typing.Union[QtCore.QPointF, QtCore.QPoint], focalRadius: float) -> None: ... + @typing.overload + def __init__(self, center: typing.Union[QtCore.QPointF, QtCore.QPoint], radius: float) -> None: ... + @typing.overload + def __init__(self, cx: float, cy: float, radius: float, fx: float, fy: float) -> None: ... + @typing.overload + def __init__(self, cx: float, cy: float, centerRadius: float, fx: float, fy: float, focalRadius: float) -> None: ... + @typing.overload + def __init__(self, cx: float, cy: float, radius: float) -> None: ... + @typing.overload + def __init__(self, a0: 'QRadialGradient') -> None: ... + + def setFocalRadius(self, radius: float) -> None: ... + def focalRadius(self) -> float: ... + def setCenterRadius(self, radius: float) -> None: ... + def centerRadius(self) -> float: ... + def setRadius(self, radius: float) -> None: ... + @typing.overload + def setFocalPoint(self, focalPoint: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setFocalPoint(self, x: float, y: float) -> None: ... + @typing.overload + def setCenter(self, center: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setCenter(self, x: float, y: float) -> None: ... + def radius(self) -> float: ... + def focalPoint(self) -> QtCore.QPointF: ... + def center(self) -> QtCore.QPointF: ... + + +class QConicalGradient(QGradient): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, center: typing.Union[QtCore.QPointF, QtCore.QPoint], startAngle: float) -> None: ... + @typing.overload + def __init__(self, cx: float, cy: float, startAngle: float) -> None: ... + @typing.overload + def __init__(self, a0: 'QConicalGradient') -> None: ... + + def setAngle(self, angle: float) -> None: ... + @typing.overload + def setCenter(self, center: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setCenter(self, x: float, y: float) -> None: ... + def angle(self) -> float: ... + def center(self) -> QtCore.QPointF: ... + + +class QClipboard(QtCore.QObject): + + class Mode(int): + Clipboard = ... # type: QClipboard.Mode + Selection = ... # type: QClipboard.Mode + FindBuffer = ... # type: QClipboard.Mode + + selectionChanged: typing.ClassVar[QtCore.pyqtSignal] + findBufferChanged: typing.ClassVar[QtCore.pyqtSignal] + dataChanged: typing.ClassVar[QtCore.pyqtSignal] + changed: typing.ClassVar[QtCore.pyqtSignal] + def setPixmap(self, a0: QPixmap, mode: 'QClipboard.Mode' = ...) -> None: ... + def setImage(self, a0: 'QImage', mode: 'QClipboard.Mode' = ...) -> None: ... + def pixmap(self, mode: 'QClipboard.Mode' = ...) -> QPixmap: ... + def image(self, mode: 'QClipboard.Mode' = ...) -> 'QImage': ... + def setMimeData(self, data: typing.Optional[QtCore.QMimeData], mode: 'QClipboard.Mode' = ...) -> None: ... + def mimeData(self, mode: 'QClipboard.Mode' = ...) -> typing.Optional[QtCore.QMimeData]: ... + def setText(self, a0: typing.Optional[str], mode: 'QClipboard.Mode' = ...) -> None: ... + @typing.overload + def text(self, mode: 'QClipboard.Mode' = ...) -> str: ... + @typing.overload + def text(self, subtype: typing.Optional[str], mode: 'QClipboard.Mode' = ...) -> typing.Tuple[str, str]: ... + def ownsSelection(self) -> bool: ... + def ownsFindBuffer(self) -> bool: ... + def ownsClipboard(self) -> bool: ... + def supportsSelection(self) -> bool: ... + def supportsFindBuffer(self) -> bool: ... + def clear(self, mode: 'QClipboard.Mode' = ...) -> None: ... + + +class QColorSpace(PyQt5.sipsimplewrapper): + + class TransferFunction(int): + Custom = ... # type: QColorSpace.TransferFunction + Linear = ... # type: QColorSpace.TransferFunction + Gamma = ... # type: QColorSpace.TransferFunction + SRgb = ... # type: QColorSpace.TransferFunction + ProPhotoRgb = ... # type: QColorSpace.TransferFunction + + class Primaries(int): + Custom = ... # type: QColorSpace.Primaries + SRgb = ... # type: QColorSpace.Primaries + AdobeRgb = ... # type: QColorSpace.Primaries + DciP3D65 = ... # type: QColorSpace.Primaries + ProPhotoRgb = ... # type: QColorSpace.Primaries + + class NamedColorSpace(int): + SRgb = ... # type: QColorSpace.NamedColorSpace + SRgbLinear = ... # type: QColorSpace.NamedColorSpace + AdobeRgb = ... # type: QColorSpace.NamedColorSpace + DisplayP3 = ... # type: QColorSpace.NamedColorSpace + ProPhotoRgb = ... # type: QColorSpace.NamedColorSpace + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, namedColorSpace: 'QColorSpace.NamedColorSpace') -> None: ... + @typing.overload + def __init__(self, primaries: 'QColorSpace.Primaries', fun: 'QColorSpace.TransferFunction', gamma: float = ...) -> None: ... + @typing.overload + def __init__(self, primaries: 'QColorSpace.Primaries', gamma: float) -> None: ... + @typing.overload + def __init__(self, whitePoint: typing.Union[QtCore.QPointF, QtCore.QPoint], redPoint: typing.Union[QtCore.QPointF, QtCore.QPoint], greenPoint: typing.Union[QtCore.QPointF, QtCore.QPoint], bluePoint: typing.Union[QtCore.QPointF, QtCore.QPoint], fun: 'QColorSpace.TransferFunction', gamma: float = ...) -> None: ... + @typing.overload + def __init__(self, colorSpace: 'QColorSpace') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def transformationToColorSpace(self, colorspace: 'QColorSpace') -> 'QColorTransform': ... + def iccProfile(self) -> QtCore.QByteArray: ... + @staticmethod + def fromIccProfile(iccProfile: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> 'QColorSpace': ... + def isValid(self) -> bool: ... + @typing.overload + def setPrimaries(self, primariesId: 'QColorSpace.Primaries') -> None: ... + @typing.overload + def setPrimaries(self, whitePoint: typing.Union[QtCore.QPointF, QtCore.QPoint], redPoint: typing.Union[QtCore.QPointF, QtCore.QPoint], greenPoint: typing.Union[QtCore.QPointF, QtCore.QPoint], bluePoint: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def withTransferFunction(self, transferFunction: 'QColorSpace.TransferFunction', gamma: float = ...) -> 'QColorSpace': ... + def setTransferFunction(self, transferFunction: 'QColorSpace.TransferFunction', gamma: float = ...) -> None: ... + def gamma(self) -> float: ... + def transferFunction(self) -> 'QColorSpace.TransferFunction': ... + def primaries(self) -> 'QColorSpace.Primaries': ... + def swap(self, colorSpace: 'QColorSpace') -> None: ... + + +class QColorTransform(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, colorTransform: 'QColorTransform') -> None: ... + + @typing.overload + def map(self, argb: int) -> int: ... + @typing.overload + def map(self, rgba64: 'QRgba64') -> 'QRgba64': ... + @typing.overload + def map(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> QColor: ... + def swap(self, other: 'QColorTransform') -> None: ... + + +class QCursor(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, bitmap: QBitmap, mask: QBitmap, hotX: int = ..., hotY: int = ...) -> None: ... + @typing.overload + def __init__(self, pixmap: QPixmap, hotX: int = ..., hotY: int = ...) -> None: ... + @typing.overload + def __init__(self, cursor: typing.Union['QCursor', QtCore.Qt.CursorShape]) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def swap(self, other: typing.Union['QCursor', QtCore.Qt.CursorShape]) -> None: ... + @typing.overload + @staticmethod + def setPos(x: int, y: int) -> None: ... + @typing.overload + @staticmethod + def setPos(p: QtCore.QPoint) -> None: ... + @typing.overload + @staticmethod + def setPos(screen: typing.Optional['QScreen'], x: int, y: int) -> None: ... + @typing.overload + @staticmethod + def setPos(screen: typing.Optional['QScreen'], p: QtCore.QPoint) -> None: ... + @typing.overload + @staticmethod + def pos() -> QtCore.QPoint: ... + @typing.overload + @staticmethod + def pos(screen: typing.Optional['QScreen']) -> QtCore.QPoint: ... + def hotSpot(self) -> QtCore.QPoint: ... + def pixmap(self) -> QPixmap: ... + def mask(self) -> typing.Optional[QBitmap]: ... + def bitmap(self) -> typing.Optional[QBitmap]: ... + def setShape(self, newShape: QtCore.Qt.CursorShape) -> None: ... + def shape(self) -> QtCore.Qt.CursorShape: ... + + +class QDesktopServices(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDesktopServices') -> None: ... + + @staticmethod + def unsetUrlHandler(scheme: typing.Optional[str]) -> None: ... + @typing.overload + @staticmethod + def setUrlHandler(scheme: typing.Optional[str], receiver: typing.Optional[QtCore.QObject], method: typing.Optional[str]) -> None: ... + @typing.overload + @staticmethod + def setUrlHandler(scheme: typing.Optional[str], method: typing.Callable[[QtCore.QUrl], None]) -> None: ... + @staticmethod + def openUrl(url: QtCore.QUrl) -> bool: ... + + +class QDrag(QtCore.QObject): + + def __init__(self, dragSource: typing.Optional[QtCore.QObject]) -> None: ... + + @staticmethod + def cancel() -> None: ... + def defaultAction(self) -> QtCore.Qt.DropAction: ... + def supportedActions(self) -> QtCore.Qt.DropActions: ... + def dragCursor(self, action: QtCore.Qt.DropAction) -> QPixmap: ... + targetChanged: typing.ClassVar[QtCore.pyqtSignal] + actionChanged: typing.ClassVar[QtCore.pyqtSignal] + def setDragCursor(self, cursor: QPixmap, action: QtCore.Qt.DropAction) -> None: ... + def target(self) -> typing.Optional[QtCore.QObject]: ... + def source(self) -> typing.Optional[QtCore.QObject]: ... + def hotSpot(self) -> QtCore.QPoint: ... + def setHotSpot(self, hotspot: QtCore.QPoint) -> None: ... + def pixmap(self) -> QPixmap: ... + def setPixmap(self, a0: QPixmap) -> None: ... + def mimeData(self) -> typing.Optional[QtCore.QMimeData]: ... + def setMimeData(self, data: typing.Optional[QtCore.QMimeData]) -> None: ... + @typing.overload + def exec(self, supportedActions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction] = ...) -> QtCore.Qt.DropAction: ... + @typing.overload + def exec(self, supportedActions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction], defaultDropAction: QtCore.Qt.DropAction) -> QtCore.Qt.DropAction: ... + @typing.overload + def exec_(self, supportedActions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction] = ...) -> QtCore.Qt.DropAction: ... + @typing.overload + def exec_(self, supportedActions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction], defaultDropAction: QtCore.Qt.DropAction) -> QtCore.Qt.DropAction: ... + + +class QInputEvent(QtCore.QEvent): + + def setTimestamp(self, atimestamp: int) -> None: ... + def timestamp(self) -> int: ... + def modifiers(self) -> QtCore.Qt.KeyboardModifiers: ... + + +class QMouseEvent(QInputEvent): + + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], button: QtCore.Qt.MouseButton, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> None: ... + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], button: QtCore.Qt.MouseButton, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> None: ... + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], windowPos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], button: QtCore.Qt.MouseButton, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> None: ... + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, localPos: typing.Union[QtCore.QPointF, QtCore.QPoint], windowPos: typing.Union[QtCore.QPointF, QtCore.QPoint], screenPos: typing.Union[QtCore.QPointF, QtCore.QPoint], button: QtCore.Qt.MouseButton, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], source: QtCore.Qt.MouseEventSource) -> None: ... + @typing.overload + def __init__(self, a0: 'QMouseEvent') -> None: ... + + def flags(self) -> QtCore.Qt.MouseEventFlags: ... + def source(self) -> QtCore.Qt.MouseEventSource: ... + def screenPos(self) -> QtCore.QPointF: ... + def windowPos(self) -> QtCore.QPointF: ... + def localPos(self) -> QtCore.QPointF: ... + def buttons(self) -> QtCore.Qt.MouseButtons: ... + def button(self) -> QtCore.Qt.MouseButton: ... + def globalY(self) -> int: ... + def globalX(self) -> int: ... + def y(self) -> int: ... + def x(self) -> int: ... + def globalPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + + +class QHoverEvent(QInputEvent): + + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], oldPos: typing.Union[QtCore.QPointF, QtCore.QPoint], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QHoverEvent') -> None: ... + + def oldPosF(self) -> QtCore.QPointF: ... + def posF(self) -> QtCore.QPointF: ... + def oldPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + + +class QWheelEvent(QInputEvent): + + @typing.overload + def __init__(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], pixelDelta: QtCore.QPoint, angleDelta: QtCore.QPoint, qt4Delta: int, qt4Orientation: QtCore.Qt.Orientation, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> None: ... + @typing.overload + def __init__(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], pixelDelta: QtCore.QPoint, angleDelta: QtCore.QPoint, qt4Delta: int, qt4Orientation: QtCore.Qt.Orientation, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], phase: QtCore.Qt.ScrollPhase) -> None: ... + @typing.overload + def __init__(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], pixelDelta: QtCore.QPoint, angleDelta: QtCore.QPoint, qt4Delta: int, qt4Orientation: QtCore.Qt.Orientation, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], phase: QtCore.Qt.ScrollPhase, source: QtCore.Qt.MouseEventSource) -> None: ... + @typing.overload + def __init__(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], pixelDelta: QtCore.QPoint, angleDelta: QtCore.QPoint, qt4Delta: int, qt4Orientation: QtCore.Qt.Orientation, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], phase: QtCore.Qt.ScrollPhase, source: QtCore.Qt.MouseEventSource, inverted: bool) -> None: ... + @typing.overload + def __init__(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], pixelDelta: QtCore.QPoint, angleDelta: QtCore.QPoint, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], phase: QtCore.Qt.ScrollPhase, inverted: bool, source: QtCore.Qt.MouseEventSource = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QWheelEvent') -> None: ... + + def globalPosition(self) -> QtCore.QPointF: ... + def position(self) -> QtCore.QPointF: ... + def inverted(self) -> bool: ... + def source(self) -> QtCore.Qt.MouseEventSource: ... + def phase(self) -> QtCore.Qt.ScrollPhase: ... + def globalPosF(self) -> QtCore.QPointF: ... + def posF(self) -> QtCore.QPointF: ... + def angleDelta(self) -> QtCore.QPoint: ... + def pixelDelta(self) -> QtCore.QPoint: ... + def buttons(self) -> QtCore.Qt.MouseButtons: ... + def globalY(self) -> int: ... + def globalX(self) -> int: ... + def y(self) -> int: ... + def x(self) -> int: ... + def globalPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + + +class QTabletEvent(QInputEvent): + + class PointerType(int): + UnknownPointer = ... # type: QTabletEvent.PointerType + Pen = ... # type: QTabletEvent.PointerType + Cursor = ... # type: QTabletEvent.PointerType + Eraser = ... # type: QTabletEvent.PointerType + + class TabletDevice(int): + NoDevice = ... # type: QTabletEvent.TabletDevice + Puck = ... # type: QTabletEvent.TabletDevice + Stylus = ... # type: QTabletEvent.TabletDevice + Airbrush = ... # type: QTabletEvent.TabletDevice + FourDMouse = ... # type: QTabletEvent.TabletDevice + XFreeEraser = ... # type: QTabletEvent.TabletDevice + RotationStylus = ... # type: QTabletEvent.TabletDevice + + @typing.overload + def __init__(self, t: QtCore.QEvent.Type, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], device: int, pointerType: int, pressure: float, xTilt: int, yTilt: int, tangentialPressure: float, rotation: float, z: int, keyState: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], uniqueID: int, button: QtCore.Qt.MouseButton, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton]) -> None: ... + @typing.overload + def __init__(self, t: QtCore.QEvent.Type, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], globalPos: typing.Union[QtCore.QPointF, QtCore.QPoint], device: int, pointerType: int, pressure: float, xTilt: int, yTilt: int, tangentialPressure: float, rotation: float, z: int, keyState: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], uniqueID: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QTabletEvent') -> None: ... + + def deviceType(self) -> 'QTabletEvent.TabletDevice': ... + def buttons(self) -> QtCore.Qt.MouseButtons: ... + def button(self) -> QtCore.Qt.MouseButton: ... + def globalPosF(self) -> QtCore.QPointF: ... + def posF(self) -> QtCore.QPointF: ... + def yTilt(self) -> int: ... + def xTilt(self) -> int: ... + def rotation(self) -> float: ... + def tangentialPressure(self) -> float: ... + def z(self) -> int: ... + def pressure(self) -> float: ... + def uniqueId(self) -> int: ... + def pointerType(self) -> 'QTabletEvent.PointerType': ... + def device(self) -> 'QTabletEvent.TabletDevice': ... + def hiResGlobalY(self) -> float: ... + def hiResGlobalX(self) -> float: ... + def globalY(self) -> int: ... + def globalX(self) -> int: ... + def y(self) -> int: ... + def x(self) -> int: ... + def globalPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + + +class QKeyEvent(QInputEvent): + + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, key: int, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], nativeScanCode: int, nativeVirtualKey: int, nativeModifiers: int, text: typing.Optional[str] = ..., autorep: bool = ..., count: int = ...) -> None: ... + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, key: int, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], text: typing.Optional[str] = ..., autorep: bool = ..., count: int = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QKeyEvent') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def nativeVirtualKey(self) -> int: ... + def nativeScanCode(self) -> int: ... + def nativeModifiers(self) -> int: ... + def matches(self, key: 'QKeySequence.StandardKey') -> bool: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def isAutoRepeat(self) -> bool: ... + def text(self) -> str: ... + def modifiers(self) -> QtCore.Qt.KeyboardModifiers: ... + def key(self) -> int: ... + + +class QFocusEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, reason: QtCore.Qt.FocusReason = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QFocusEvent') -> None: ... + + def reason(self) -> QtCore.Qt.FocusReason: ... + def lostFocus(self) -> bool: ... + def gotFocus(self) -> bool: ... + + +class QPaintEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, paintRegion: 'QRegion') -> None: ... + @typing.overload + def __init__(self, paintRect: QtCore.QRect) -> None: ... + @typing.overload + def __init__(self, a0: 'QPaintEvent') -> None: ... + + def region(self) -> 'QRegion': ... + def rect(self) -> QtCore.QRect: ... + + +class QMoveEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, pos: QtCore.QPoint, oldPos: QtCore.QPoint) -> None: ... + @typing.overload + def __init__(self, a0: 'QMoveEvent') -> None: ... + + def oldPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + + +class QResizeEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, size: QtCore.QSize, oldSize: QtCore.QSize) -> None: ... + @typing.overload + def __init__(self, a0: 'QResizeEvent') -> None: ... + + def oldSize(self) -> QtCore.QSize: ... + def size(self) -> QtCore.QSize: ... + + +class QCloseEvent(QtCore.QEvent): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QCloseEvent') -> None: ... + + +class QIconDragEvent(QtCore.QEvent): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QIconDragEvent') -> None: ... + + +class QShowEvent(QtCore.QEvent): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QShowEvent') -> None: ... + + +class QHideEvent(QtCore.QEvent): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QHideEvent') -> None: ... + + +class QContextMenuEvent(QInputEvent): + + class Reason(int): + Mouse = ... # type: QContextMenuEvent.Reason + Keyboard = ... # type: QContextMenuEvent.Reason + Other = ... # type: QContextMenuEvent.Reason + + @typing.overload + def __init__(self, reason: 'QContextMenuEvent.Reason', pos: QtCore.QPoint, globalPos: QtCore.QPoint, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> None: ... + @typing.overload + def __init__(self, reason: 'QContextMenuEvent.Reason', pos: QtCore.QPoint, globalPos: QtCore.QPoint) -> None: ... + @typing.overload + def __init__(self, reason: 'QContextMenuEvent.Reason', pos: QtCore.QPoint) -> None: ... + @typing.overload + def __init__(self, a0: 'QContextMenuEvent') -> None: ... + + def reason(self) -> 'QContextMenuEvent.Reason': ... + def globalPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + def globalY(self) -> int: ... + def globalX(self) -> int: ... + def y(self) -> int: ... + def x(self) -> int: ... + + +class QInputMethodEvent(QtCore.QEvent): + + class AttributeType(int): + TextFormat = ... # type: QInputMethodEvent.AttributeType + Cursor = ... # type: QInputMethodEvent.AttributeType + Language = ... # type: QInputMethodEvent.AttributeType + Ruby = ... # type: QInputMethodEvent.AttributeType + Selection = ... # type: QInputMethodEvent.AttributeType + + class Attribute(PyQt5.sipsimplewrapper): + + length = ... # type: int + start = ... # type: int + type = ... # type: 'QInputMethodEvent.AttributeType' + value = ... # type: typing.Any + + @typing.overload + def __init__(self, t: 'QInputMethodEvent.AttributeType', s: int, l: int, val: typing.Any) -> None: ... + @typing.overload + def __init__(self, typ: 'QInputMethodEvent.AttributeType', s: int, l: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QInputMethodEvent.Attribute') -> None: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, preeditText: typing.Optional[str], attributes: typing.Iterable['QInputMethodEvent.Attribute']) -> None: ... + @typing.overload + def __init__(self, other: 'QInputMethodEvent') -> None: ... + + def replacementLength(self) -> int: ... + def replacementStart(self) -> int: ... + def commitString(self) -> str: ... + def preeditString(self) -> str: ... + def attributes(self) -> typing.List['QInputMethodEvent.Attribute']: ... + def setCommitString(self, commitString: typing.Optional[str], from_: int = ..., length: int = ...) -> None: ... + + +class QInputMethodQueryEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, queries: typing.Union[QtCore.Qt.InputMethodQueries, QtCore.Qt.InputMethodQuery]) -> None: ... + @typing.overload + def __init__(self, a0: 'QInputMethodQueryEvent') -> None: ... + + def value(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def setValue(self, query: QtCore.Qt.InputMethodQuery, value: typing.Any) -> None: ... + def queries(self) -> QtCore.Qt.InputMethodQueries: ... + + +class QDropEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], actions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction], data: typing.Optional[QtCore.QMimeData], buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], type: QtCore.QEvent.Type = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QDropEvent') -> None: ... + + def mimeData(self) -> typing.Optional[QtCore.QMimeData]: ... + def source(self) -> typing.Optional[QtCore.QObject]: ... + def setDropAction(self, action: QtCore.Qt.DropAction) -> None: ... + def dropAction(self) -> QtCore.Qt.DropAction: ... + def acceptProposedAction(self) -> None: ... + def proposedAction(self) -> QtCore.Qt.DropAction: ... + def possibleActions(self) -> QtCore.Qt.DropActions: ... + def keyboardModifiers(self) -> QtCore.Qt.KeyboardModifiers: ... + def mouseButtons(self) -> QtCore.Qt.MouseButtons: ... + def posF(self) -> QtCore.QPointF: ... + def pos(self) -> QtCore.QPoint: ... + + +class QDragMoveEvent(QDropEvent): + + @typing.overload + def __init__(self, pos: QtCore.QPoint, actions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction], data: typing.Optional[QtCore.QMimeData], buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier], type: QtCore.QEvent.Type = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QDragMoveEvent') -> None: ... + + @typing.overload + def ignore(self) -> None: ... + @typing.overload + def ignore(self, r: QtCore.QRect) -> None: ... + @typing.overload + def accept(self) -> None: ... + @typing.overload + def accept(self, r: QtCore.QRect) -> None: ... + def answerRect(self) -> QtCore.QRect: ... + + +class QDragEnterEvent(QDragMoveEvent): + + @typing.overload + def __init__(self, pos: QtCore.QPoint, actions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction], data: typing.Optional[QtCore.QMimeData], buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton], modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> None: ... + @typing.overload + def __init__(self, a0: 'QDragEnterEvent') -> None: ... + + +class QDragLeaveEvent(QtCore.QEvent): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDragLeaveEvent') -> None: ... + + +class QHelpEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, type: QtCore.QEvent.Type, pos: QtCore.QPoint, globalPos: QtCore.QPoint) -> None: ... + @typing.overload + def __init__(self, a0: 'QHelpEvent') -> None: ... + + def globalPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + def globalY(self) -> int: ... + def globalX(self) -> int: ... + def y(self) -> int: ... + def x(self) -> int: ... + + +class QStatusTipEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, tip: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: 'QStatusTipEvent') -> None: ... + + def tip(self) -> str: ... + + +class QWhatsThisClickedEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, href: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: 'QWhatsThisClickedEvent') -> None: ... + + def href(self) -> str: ... + + +class QActionEvent(QtCore.QEvent): + + from PyQt5.QtWidgets import QAction + + @typing.overload + def __init__(self, type: int, action: typing.Optional[QAction], before: typing.Optional[QAction] = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QActionEvent') -> None: ... + + def before(self) -> typing.Optional[QAction]: ... + def action(self) -> typing.Optional[QAction]: ... + + +class QFileOpenEvent(QtCore.QEvent): + + def openFile(self, file: QtCore.QFile, flags: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag]) -> bool: ... + def url(self) -> QtCore.QUrl: ... + def file(self) -> str: ... + + +class QShortcutEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, key: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int], id: int, ambiguous: bool = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QShortcutEvent') -> None: ... + + def shortcutId(self) -> int: ... + def key(self) -> 'QKeySequence': ... + def isAmbiguous(self) -> bool: ... + + +class QWindowStateChangeEvent(QtCore.QEvent): + + def oldState(self) -> QtCore.Qt.WindowStates: ... + + +class QTouchEvent(QInputEvent): + + class TouchPoint(PyQt5.sipsimplewrapper): + + class InfoFlag(int): + Pen = ... # type: QTouchEvent.TouchPoint.InfoFlag + Token = ... # type: QTouchEvent.TouchPoint.InfoFlag + + class InfoFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTouchEvent.TouchPoint.InfoFlags', 'QTouchEvent.TouchPoint.InfoFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTouchEvent.TouchPoint.InfoFlags', 'QTouchEvent.TouchPoint.InfoFlag']) -> 'QTouchEvent.TouchPoint.InfoFlags': ... + def __xor__(self, f: typing.Union['QTouchEvent.TouchPoint.InfoFlags', 'QTouchEvent.TouchPoint.InfoFlag']) -> 'QTouchEvent.TouchPoint.InfoFlags': ... + def __ior__(self, f: typing.Union['QTouchEvent.TouchPoint.InfoFlags', 'QTouchEvent.TouchPoint.InfoFlag']) -> 'QTouchEvent.TouchPoint.InfoFlags': ... + def __or__(self, f: typing.Union['QTouchEvent.TouchPoint.InfoFlags', 'QTouchEvent.TouchPoint.InfoFlag']) -> 'QTouchEvent.TouchPoint.InfoFlags': ... + def __iand__(self, f: typing.Union['QTouchEvent.TouchPoint.InfoFlags', 'QTouchEvent.TouchPoint.InfoFlag']) -> 'QTouchEvent.TouchPoint.InfoFlags': ... + def __and__(self, f: typing.Union['QTouchEvent.TouchPoint.InfoFlags', 'QTouchEvent.TouchPoint.InfoFlag']) -> 'QTouchEvent.TouchPoint.InfoFlags': ... + def __invert__(self) -> 'QTouchEvent.TouchPoint.InfoFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def ellipseDiameters(self) -> QtCore.QSizeF: ... + def rotation(self) -> float: ... + def uniqueId(self) -> 'QPointingDeviceUniqueId': ... + def rawScreenPositions(self) -> typing.List[QtCore.QPointF]: ... + def flags(self) -> 'QTouchEvent.TouchPoint.InfoFlags': ... + def velocity(self) -> 'QVector2D': ... + def pressure(self) -> float: ... + def screenRect(self) -> QtCore.QRectF: ... + def sceneRect(self) -> QtCore.QRectF: ... + def rect(self) -> QtCore.QRectF: ... + def lastNormalizedPos(self) -> QtCore.QPointF: ... + def startNormalizedPos(self) -> QtCore.QPointF: ... + def normalizedPos(self) -> QtCore.QPointF: ... + def lastScreenPos(self) -> QtCore.QPointF: ... + def startScreenPos(self) -> QtCore.QPointF: ... + def screenPos(self) -> QtCore.QPointF: ... + def lastScenePos(self) -> QtCore.QPointF: ... + def startScenePos(self) -> QtCore.QPointF: ... + def scenePos(self) -> QtCore.QPointF: ... + def lastPos(self) -> QtCore.QPointF: ... + def startPos(self) -> QtCore.QPointF: ... + def pos(self) -> QtCore.QPointF: ... + def state(self) -> QtCore.Qt.TouchPointState: ... + def id(self) -> int: ... + + @typing.overload + def __init__(self, eventType: QtCore.QEvent.Type, device: typing.Optional['QTouchDevice'] = ..., modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., touchPointStates: typing.Union[QtCore.Qt.TouchPointStates, QtCore.Qt.TouchPointState] = ..., touchPoints: typing.Iterable['QTouchEvent.TouchPoint'] = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QTouchEvent') -> None: ... + + def setDevice(self, adevice: typing.Optional['QTouchDevice']) -> None: ... + def device(self) -> typing.Optional['QTouchDevice']: ... + def window(self) -> typing.Optional['QWindow']: ... + def touchPoints(self) -> typing.List['QTouchEvent.TouchPoint']: ... + def touchPointStates(self) -> QtCore.Qt.TouchPointStates: ... + def target(self) -> typing.Optional[QtCore.QObject]: ... + + +class QExposeEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, rgn: 'QRegion') -> None: ... + @typing.overload + def __init__(self, a0: 'QExposeEvent') -> None: ... + + def region(self) -> 'QRegion': ... + + +class QScrollPrepareEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, startPos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, a0: 'QScrollPrepareEvent') -> None: ... + + def setContentPos(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def setContentPosRange(self, rect: QtCore.QRectF) -> None: ... + def setViewportSize(self, size: QtCore.QSizeF) -> None: ... + def contentPos(self) -> QtCore.QPointF: ... + def contentPosRange(self) -> QtCore.QRectF: ... + def viewportSize(self) -> QtCore.QSizeF: ... + def startPos(self) -> QtCore.QPointF: ... + + +class QScrollEvent(QtCore.QEvent): + + class ScrollState(int): + ScrollStarted = ... # type: QScrollEvent.ScrollState + ScrollUpdated = ... # type: QScrollEvent.ScrollState + ScrollFinished = ... # type: QScrollEvent.ScrollState + + @typing.overload + def __init__(self, contentPos: typing.Union[QtCore.QPointF, QtCore.QPoint], overshoot: typing.Union[QtCore.QPointF, QtCore.QPoint], scrollState: 'QScrollEvent.ScrollState') -> None: ... + @typing.overload + def __init__(self, a0: 'QScrollEvent') -> None: ... + + def scrollState(self) -> 'QScrollEvent.ScrollState': ... + def overshootDistance(self) -> QtCore.QPointF: ... + def contentPos(self) -> QtCore.QPointF: ... + + +class QEnterEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, localPos: typing.Union[QtCore.QPointF, QtCore.QPoint], windowPos: typing.Union[QtCore.QPointF, QtCore.QPoint], screenPos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, a0: 'QEnterEvent') -> None: ... + + def screenPos(self) -> QtCore.QPointF: ... + def windowPos(self) -> QtCore.QPointF: ... + def localPos(self) -> QtCore.QPointF: ... + def globalY(self) -> int: ... + def globalX(self) -> int: ... + def y(self) -> int: ... + def x(self) -> int: ... + def globalPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + + +class QNativeGestureEvent(QInputEvent): + + @typing.overload + def __init__(self, type: QtCore.Qt.NativeGestureType, localPos: typing.Union[QtCore.QPointF, QtCore.QPoint], windowPos: typing.Union[QtCore.QPointF, QtCore.QPoint], screenPos: typing.Union[QtCore.QPointF, QtCore.QPoint], value: float, sequenceId: int, intArgument: int) -> None: ... + @typing.overload + def __init__(self, type: QtCore.Qt.NativeGestureType, dev: typing.Optional['QTouchDevice'], localPos: typing.Union[QtCore.QPointF, QtCore.QPoint], windowPos: typing.Union[QtCore.QPointF, QtCore.QPoint], screenPos: typing.Union[QtCore.QPointF, QtCore.QPoint], value: float, sequenceId: int, intArgument: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QNativeGestureEvent') -> None: ... + + def device(self) -> typing.Optional['QTouchDevice']: ... + def screenPos(self) -> QtCore.QPointF: ... + def windowPos(self) -> QtCore.QPointF: ... + def localPos(self) -> QtCore.QPointF: ... + def globalPos(self) -> QtCore.QPoint: ... + def pos(self) -> QtCore.QPoint: ... + def value(self) -> float: ... + def gestureType(self) -> QtCore.Qt.NativeGestureType: ... + + +class QPlatformSurfaceEvent(QtCore.QEvent): + + class SurfaceEventType(int): + SurfaceCreated = ... # type: QPlatformSurfaceEvent.SurfaceEventType + SurfaceAboutToBeDestroyed = ... # type: QPlatformSurfaceEvent.SurfaceEventType + + @typing.overload + def __init__(self, surfaceEventType: 'QPlatformSurfaceEvent.SurfaceEventType') -> None: ... + @typing.overload + def __init__(self, a0: 'QPlatformSurfaceEvent') -> None: ... + + def surfaceEventType(self) -> 'QPlatformSurfaceEvent.SurfaceEventType': ... + + +class QPointingDeviceUniqueId(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QPointingDeviceUniqueId') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __hash__(self) -> int: ... + def numericId(self) -> int: ... + def isValid(self) -> bool: ... + @staticmethod + def fromNumericId(id: int) -> 'QPointingDeviceUniqueId': ... + + +class QFont(PyQt5.sipsimplewrapper): + + class HintingPreference(int): + PreferDefaultHinting = ... # type: QFont.HintingPreference + PreferNoHinting = ... # type: QFont.HintingPreference + PreferVerticalHinting = ... # type: QFont.HintingPreference + PreferFullHinting = ... # type: QFont.HintingPreference + + class SpacingType(int): + PercentageSpacing = ... # type: QFont.SpacingType + AbsoluteSpacing = ... # type: QFont.SpacingType + + class Capitalization(int): + MixedCase = ... # type: QFont.Capitalization + AllUppercase = ... # type: QFont.Capitalization + AllLowercase = ... # type: QFont.Capitalization + SmallCaps = ... # type: QFont.Capitalization + Capitalize = ... # type: QFont.Capitalization + + class Stretch(int): + AnyStretch = ... # type: QFont.Stretch + UltraCondensed = ... # type: QFont.Stretch + ExtraCondensed = ... # type: QFont.Stretch + Condensed = ... # type: QFont.Stretch + SemiCondensed = ... # type: QFont.Stretch + Unstretched = ... # type: QFont.Stretch + SemiExpanded = ... # type: QFont.Stretch + Expanded = ... # type: QFont.Stretch + ExtraExpanded = ... # type: QFont.Stretch + UltraExpanded = ... # type: QFont.Stretch + + class Style(int): + StyleNormal = ... # type: QFont.Style + StyleItalic = ... # type: QFont.Style + StyleOblique = ... # type: QFont.Style + + class Weight(int): + Thin = ... # type: QFont.Weight + ExtraLight = ... # type: QFont.Weight + Light = ... # type: QFont.Weight + Normal = ... # type: QFont.Weight + Medium = ... # type: QFont.Weight + DemiBold = ... # type: QFont.Weight + Bold = ... # type: QFont.Weight + ExtraBold = ... # type: QFont.Weight + Black = ... # type: QFont.Weight + + class StyleStrategy(int): + PreferDefault = ... # type: QFont.StyleStrategy + PreferBitmap = ... # type: QFont.StyleStrategy + PreferDevice = ... # type: QFont.StyleStrategy + PreferOutline = ... # type: QFont.StyleStrategy + ForceOutline = ... # type: QFont.StyleStrategy + PreferMatch = ... # type: QFont.StyleStrategy + PreferQuality = ... # type: QFont.StyleStrategy + PreferAntialias = ... # type: QFont.StyleStrategy + NoAntialias = ... # type: QFont.StyleStrategy + NoSubpixelAntialias = ... # type: QFont.StyleStrategy + OpenGLCompatible = ... # type: QFont.StyleStrategy + NoFontMerging = ... # type: QFont.StyleStrategy + ForceIntegerMetrics = ... # type: QFont.StyleStrategy + PreferNoShaping = ... # type: QFont.StyleStrategy + + class StyleHint(int): + Helvetica = ... # type: QFont.StyleHint + SansSerif = ... # type: QFont.StyleHint + Times = ... # type: QFont.StyleHint + Serif = ... # type: QFont.StyleHint + Courier = ... # type: QFont.StyleHint + TypeWriter = ... # type: QFont.StyleHint + OldEnglish = ... # type: QFont.StyleHint + Decorative = ... # type: QFont.StyleHint + System = ... # type: QFont.StyleHint + AnyStyle = ... # type: QFont.StyleHint + Cursive = ... # type: QFont.StyleHint + Monospace = ... # type: QFont.StyleHint + Fantasy = ... # type: QFont.StyleHint + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, family: typing.Optional[str], pointSize: int = ..., weight: int = ..., italic: bool = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QFont', pd: typing.Optional[QPaintDevice]) -> None: ... + @typing.overload + def __init__(self, a0: 'QFont') -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def __ge__(self, a0: 'QFont') -> bool: ... + def setFamilies(self, a0: typing.Iterable[typing.Optional[str]]) -> None: ... + def families(self) -> typing.List[str]: ... + def __hash__(self) -> int: ... + def swap(self, other: 'QFont') -> None: ... + def hintingPreference(self) -> 'QFont.HintingPreference': ... + def setHintingPreference(self, hintingPreference: 'QFont.HintingPreference') -> None: ... + def setStyleName(self, styleName: typing.Optional[str]) -> None: ... + def styleName(self) -> str: ... + def capitalization(self) -> 'QFont.Capitalization': ... + def setCapitalization(self, a0: 'QFont.Capitalization') -> None: ... + def setWordSpacing(self, spacing: float) -> None: ... + def wordSpacing(self) -> float: ... + def setLetterSpacing(self, type: 'QFont.SpacingType', spacing: float) -> None: ... + def letterSpacingType(self) -> 'QFont.SpacingType': ... + def letterSpacing(self) -> float: ... + def setItalic(self, b: bool) -> None: ... + def italic(self) -> bool: ... + def setBold(self, enable: bool) -> None: ... + def bold(self) -> bool: ... + def resolve(self, a0: 'QFont') -> 'QFont': ... + def lastResortFont(self) -> str: ... + def lastResortFamily(self) -> str: ... + def defaultFamily(self) -> str: ... + @staticmethod + def cacheStatistics() -> None: ... + @staticmethod + def cleanup() -> None: ... + @staticmethod + def initialize() -> None: ... + @staticmethod + def removeSubstitutions(a0: typing.Optional[str]) -> None: ... + @staticmethod + def insertSubstitutions(a0: typing.Optional[str], a1: typing.Iterable[typing.Optional[str]]) -> None: ... + @staticmethod + def insertSubstitution(a0: typing.Optional[str], a1: typing.Optional[str]) -> None: ... + @staticmethod + def substitutions() -> typing.List[str]: ... + @staticmethod + def substitutes(a0: typing.Optional[str]) -> typing.List[str]: ... + @staticmethod + def substitute(a0: typing.Optional[str]) -> str: ... + def fromString(self, a0: typing.Optional[str]) -> bool: ... + def toString(self) -> str: ... + def key(self) -> str: ... + def rawName(self) -> str: ... + def setRawName(self, a0: typing.Optional[str]) -> None: ... + def isCopyOf(self, a0: 'QFont') -> bool: ... + def __lt__(self, a0: 'QFont') -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def exactMatch(self) -> bool: ... + def setRawMode(self, a0: bool) -> None: ... + def rawMode(self) -> bool: ... + def setStretch(self, a0: int) -> None: ... + def stretch(self) -> int: ... + def setStyleStrategy(self, s: 'QFont.StyleStrategy') -> None: ... + def setStyleHint(self, hint: 'QFont.StyleHint', strategy: 'QFont.StyleStrategy' = ...) -> None: ... + def styleStrategy(self) -> 'QFont.StyleStrategy': ... + def styleHint(self) -> 'QFont.StyleHint': ... + def setKerning(self, a0: bool) -> None: ... + def kerning(self) -> bool: ... + def setFixedPitch(self, a0: bool) -> None: ... + def fixedPitch(self) -> bool: ... + def setStrikeOut(self, a0: bool) -> None: ... + def strikeOut(self) -> bool: ... + def setOverline(self, a0: bool) -> None: ... + def overline(self) -> bool: ... + def setUnderline(self, a0: bool) -> None: ... + def underline(self) -> bool: ... + def style(self) -> 'QFont.Style': ... + def setStyle(self, style: 'QFont.Style') -> None: ... + def setWeight(self, a0: int) -> None: ... + def weight(self) -> int: ... + def setPixelSize(self, a0: int) -> None: ... + def pixelSize(self) -> int: ... + def setPointSizeF(self, a0: float) -> None: ... + def pointSizeF(self) -> float: ... + def setPointSize(self, a0: int) -> None: ... + def pointSize(self) -> int: ... + def setFamily(self, a0: typing.Optional[str]) -> None: ... + def family(self) -> str: ... + + +class QFontDatabase(PyQt5.sipsimplewrapper): + + class SystemFont(int): + GeneralFont = ... # type: QFontDatabase.SystemFont + FixedFont = ... # type: QFontDatabase.SystemFont + TitleFont = ... # type: QFontDatabase.SystemFont + SmallestReadableFont = ... # type: QFontDatabase.SystemFont + + class WritingSystem(int): + Any = ... # type: QFontDatabase.WritingSystem + Latin = ... # type: QFontDatabase.WritingSystem + Greek = ... # type: QFontDatabase.WritingSystem + Cyrillic = ... # type: QFontDatabase.WritingSystem + Armenian = ... # type: QFontDatabase.WritingSystem + Hebrew = ... # type: QFontDatabase.WritingSystem + Arabic = ... # type: QFontDatabase.WritingSystem + Syriac = ... # type: QFontDatabase.WritingSystem + Thaana = ... # type: QFontDatabase.WritingSystem + Devanagari = ... # type: QFontDatabase.WritingSystem + Bengali = ... # type: QFontDatabase.WritingSystem + Gurmukhi = ... # type: QFontDatabase.WritingSystem + Gujarati = ... # type: QFontDatabase.WritingSystem + Oriya = ... # type: QFontDatabase.WritingSystem + Tamil = ... # type: QFontDatabase.WritingSystem + Telugu = ... # type: QFontDatabase.WritingSystem + Kannada = ... # type: QFontDatabase.WritingSystem + Malayalam = ... # type: QFontDatabase.WritingSystem + Sinhala = ... # type: QFontDatabase.WritingSystem + Thai = ... # type: QFontDatabase.WritingSystem + Lao = ... # type: QFontDatabase.WritingSystem + Tibetan = ... # type: QFontDatabase.WritingSystem + Myanmar = ... # type: QFontDatabase.WritingSystem + Georgian = ... # type: QFontDatabase.WritingSystem + Khmer = ... # type: QFontDatabase.WritingSystem + SimplifiedChinese = ... # type: QFontDatabase.WritingSystem + TraditionalChinese = ... # type: QFontDatabase.WritingSystem + Japanese = ... # type: QFontDatabase.WritingSystem + Korean = ... # type: QFontDatabase.WritingSystem + Vietnamese = ... # type: QFontDatabase.WritingSystem + Other = ... # type: QFontDatabase.WritingSystem + Symbol = ... # type: QFontDatabase.WritingSystem + Ogham = ... # type: QFontDatabase.WritingSystem + Runic = ... # type: QFontDatabase.WritingSystem + Nko = ... # type: QFontDatabase.WritingSystem + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QFontDatabase') -> None: ... + + def isPrivateFamily(self, family: typing.Optional[str]) -> bool: ... + @staticmethod + def systemFont(type: 'QFontDatabase.SystemFont') -> QFont: ... + @staticmethod + def supportsThreadedFontRendering() -> bool: ... + @staticmethod + def removeAllApplicationFonts() -> bool: ... + @staticmethod + def removeApplicationFont(id: int) -> bool: ... + @staticmethod + def applicationFontFamilies(id: int) -> typing.List[str]: ... + @staticmethod + def addApplicationFontFromData(fontData: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> int: ... + @staticmethod + def addApplicationFont(fileName: typing.Optional[str]) -> int: ... + @staticmethod + def writingSystemSample(writingSystem: 'QFontDatabase.WritingSystem') -> str: ... + @staticmethod + def writingSystemName(writingSystem: 'QFontDatabase.WritingSystem') -> str: ... + def weight(self, family: typing.Optional[str], style: typing.Optional[str]) -> int: ... + def bold(self, family: typing.Optional[str], style: typing.Optional[str]) -> bool: ... + def italic(self, family: typing.Optional[str], style: typing.Optional[str]) -> bool: ... + def isFixedPitch(self, family: typing.Optional[str], style: typing.Optional[str] = ...) -> bool: ... + def isScalable(self, family: typing.Optional[str], style: typing.Optional[str] = ...) -> bool: ... + def isSmoothlyScalable(self, family: typing.Optional[str], style: typing.Optional[str] = ...) -> bool: ... + def isBitmapScalable(self, family: typing.Optional[str], style: typing.Optional[str] = ...) -> bool: ... + def font(self, family: typing.Optional[str], style: typing.Optional[str], pointSize: int) -> QFont: ... + @typing.overload + def styleString(self, font: QFont) -> str: ... + @typing.overload + def styleString(self, fontInfo: 'QFontInfo') -> str: ... + def smoothSizes(self, family: typing.Optional[str], style: typing.Optional[str]) -> typing.List[int]: ... + def pointSizes(self, family: typing.Optional[str], style: typing.Optional[str] = ...) -> typing.List[int]: ... + def styles(self, family: typing.Optional[str]) -> typing.List[str]: ... + def families(self, writingSystem: 'QFontDatabase.WritingSystem' = ...) -> typing.List[str]: ... + @typing.overload + def writingSystems(self) -> typing.List['QFontDatabase.WritingSystem']: ... + @typing.overload + def writingSystems(self, family: typing.Optional[str]) -> typing.List['QFontDatabase.WritingSystem']: ... + @staticmethod + def standardSizes() -> typing.List[int]: ... + + +class QFontInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, a0: QFont) -> None: ... + @typing.overload + def __init__(self, a0: 'QFontInfo') -> None: ... + + def swap(self, other: 'QFontInfo') -> None: ... + def styleName(self) -> str: ... + def exactMatch(self) -> bool: ... + def rawMode(self) -> bool: ... + def styleHint(self) -> QFont.StyleHint: ... + def fixedPitch(self) -> bool: ... + def bold(self) -> bool: ... + def weight(self) -> int: ... + def style(self) -> QFont.Style: ... + def italic(self) -> bool: ... + def pointSizeF(self) -> float: ... + def pointSize(self) -> int: ... + def pixelSize(self) -> int: ... + def family(self) -> str: ... + + +class QFontMetrics(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, a0: QFont) -> None: ... + @typing.overload + def __init__(self, a0: QFont, pd: typing.Optional[QPaintDevice]) -> None: ... + @typing.overload + def __init__(self, a0: 'QFontMetrics') -> None: ... + + def fontDpi(self) -> float: ... + def horizontalAdvance(self, a0: typing.Optional[str], length: int = ...) -> int: ... + def capHeight(self) -> int: ... + def swap(self, other: 'QFontMetrics') -> None: ... + def inFontUcs4(self, character: int) -> bool: ... + def tightBoundingRect(self, text: typing.Optional[str]) -> QtCore.QRect: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def elidedText(self, text: typing.Optional[str], mode: QtCore.Qt.TextElideMode, width: int, flags: int = ...) -> str: ... + def averageCharWidth(self) -> int: ... + def lineWidth(self) -> int: ... + def strikeOutPos(self) -> int: ... + def overlinePos(self) -> int: ... + def underlinePos(self) -> int: ... + def size(self, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QSize: ... + @typing.overload + def boundingRect(self, text: typing.Optional[str]) -> QtCore.QRect: ... + @typing.overload + def boundingRect(self, rect: QtCore.QRect, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QRect: ... + @typing.overload + def boundingRect(self, x: int, y: int, width: int, height: int, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QRect: ... + def boundingRectChar(self, a0: str) -> QtCore.QRect: ... + def width(self, text: typing.Optional[str], length: int = ...) -> int: ... + def widthChar(self, a0: str) -> int: ... + def rightBearing(self, a0: str) -> int: ... + def leftBearing(self, a0: str) -> int: ... + def inFont(self, a0: str) -> bool: ... + def xHeight(self) -> int: ... + def maxWidth(self) -> int: ... + def minRightBearing(self) -> int: ... + def minLeftBearing(self) -> int: ... + def lineSpacing(self) -> int: ... + def leading(self) -> int: ... + def height(self) -> int: ... + def descent(self) -> int: ... + def ascent(self) -> int: ... + + +class QFontMetricsF(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, a0: QFont) -> None: ... + @typing.overload + def __init__(self, a0: QFont, pd: typing.Optional[QPaintDevice]) -> None: ... + @typing.overload + def __init__(self, a0: QFontMetrics) -> None: ... + @typing.overload + def __init__(self, a0: 'QFontMetricsF') -> None: ... + + def fontDpi(self) -> float: ... + def horizontalAdvance(self, string: typing.Optional[str], length: int = ...) -> float: ... + def capHeight(self) -> float: ... + def swap(self, other: 'QFontMetricsF') -> None: ... + def inFontUcs4(self, character: int) -> bool: ... + def tightBoundingRect(self, text: typing.Optional[str]) -> QtCore.QRectF: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def elidedText(self, text: typing.Optional[str], mode: QtCore.Qt.TextElideMode, width: float, flags: int = ...) -> str: ... + def averageCharWidth(self) -> float: ... + def lineWidth(self) -> float: ... + def strikeOutPos(self) -> float: ... + def overlinePos(self) -> float: ... + def underlinePos(self) -> float: ... + def size(self, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QSizeF: ... + @typing.overload + def boundingRect(self, string: typing.Optional[str]) -> QtCore.QRectF: ... + @typing.overload + def boundingRect(self, rect: QtCore.QRectF, flags: int, text: typing.Optional[str], tabStops: int = ..., tabArray: typing.Optional[typing.List[int]] = ...) -> QtCore.QRectF: ... + def boundingRectChar(self, a0: str) -> QtCore.QRectF: ... + def width(self, string: typing.Optional[str]) -> float: ... + def widthChar(self, a0: str) -> float: ... + def rightBearing(self, a0: str) -> float: ... + def leftBearing(self, a0: str) -> float: ... + def inFont(self, a0: str) -> bool: ... + def xHeight(self) -> float: ... + def maxWidth(self) -> float: ... + def minRightBearing(self) -> float: ... + def minLeftBearing(self) -> float: ... + def lineSpacing(self) -> float: ... + def leading(self) -> float: ... + def height(self) -> float: ... + def descent(self) -> float: ... + def ascent(self) -> float: ... + + +class QMatrix4x3(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMatrix4x3') -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, a0: float) -> 'QMatrix4x3': ... + def __imul__(self, a0: float) -> 'QMatrix4x3': ... + def __isub__(self, a0: 'QMatrix4x3') -> 'QMatrix4x3': ... + def __iadd__(self, a0: 'QMatrix4x3') -> 'QMatrix4x3': ... + def transposed(self) -> 'QMatrix3x4': ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def copyDataTo(self) -> typing.List[float]: ... + def data(self) -> typing.List[float]: ... + def __repr__(self) -> str: ... + + +class QMatrix4x2(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMatrix4x2') -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, a0: float) -> 'QMatrix4x2': ... + def __imul__(self, a0: float) -> 'QMatrix4x2': ... + def __isub__(self, a0: 'QMatrix4x2') -> 'QMatrix4x2': ... + def __iadd__(self, a0: 'QMatrix4x2') -> 'QMatrix4x2': ... + def transposed(self) -> 'QMatrix2x4': ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def copyDataTo(self) -> typing.List[float]: ... + def data(self) -> typing.List[float]: ... + def __repr__(self) -> str: ... + + +class QMatrix3x4(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMatrix3x4') -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, a0: float) -> 'QMatrix3x4': ... + def __imul__(self, a0: float) -> 'QMatrix3x4': ... + def __isub__(self, a0: 'QMatrix3x4') -> 'QMatrix3x4': ... + def __iadd__(self, a0: 'QMatrix3x4') -> 'QMatrix3x4': ... + def transposed(self) -> QMatrix4x3: ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def copyDataTo(self) -> typing.List[float]: ... + def data(self) -> typing.List[float]: ... + def __repr__(self) -> str: ... + + +class QMatrix3x3(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMatrix3x3') -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, a0: float) -> 'QMatrix3x3': ... + def __imul__(self, a0: float) -> 'QMatrix3x3': ... + def __isub__(self, a0: 'QMatrix3x3') -> 'QMatrix3x3': ... + def __iadd__(self, a0: 'QMatrix3x3') -> 'QMatrix3x3': ... + def transposed(self) -> 'QMatrix3x3': ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def copyDataTo(self) -> typing.List[float]: ... + def data(self) -> typing.List[float]: ... + def __repr__(self) -> str: ... + + +class QMatrix3x2(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMatrix3x2') -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, a0: float) -> 'QMatrix3x2': ... + def __imul__(self, a0: float) -> 'QMatrix3x2': ... + def __isub__(self, a0: 'QMatrix3x2') -> 'QMatrix3x2': ... + def __iadd__(self, a0: 'QMatrix3x2') -> 'QMatrix3x2': ... + def transposed(self) -> 'QMatrix2x3': ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def copyDataTo(self) -> typing.List[float]: ... + def data(self) -> typing.List[float]: ... + def __repr__(self) -> str: ... + + +class QMatrix2x4(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMatrix2x4') -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, a0: float) -> 'QMatrix2x4': ... + def __imul__(self, a0: float) -> 'QMatrix2x4': ... + def __isub__(self, a0: 'QMatrix2x4') -> 'QMatrix2x4': ... + def __iadd__(self, a0: 'QMatrix2x4') -> 'QMatrix2x4': ... + def transposed(self) -> QMatrix4x2: ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def copyDataTo(self) -> typing.List[float]: ... + def data(self) -> typing.List[float]: ... + def __repr__(self) -> str: ... + + +class QMatrix2x3(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMatrix2x3') -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, a0: float) -> 'QMatrix2x3': ... + def __imul__(self, a0: float) -> 'QMatrix2x3': ... + def __isub__(self, a0: 'QMatrix2x3') -> 'QMatrix2x3': ... + def __iadd__(self, a0: 'QMatrix2x3') -> 'QMatrix2x3': ... + def transposed(self) -> QMatrix3x2: ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def copyDataTo(self) -> typing.List[float]: ... + def data(self) -> typing.List[float]: ... + def __repr__(self) -> str: ... + + +class QMatrix2x2(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QMatrix2x2') -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, a0: float) -> 'QMatrix2x2': ... + def __imul__(self, a0: float) -> 'QMatrix2x2': ... + def __isub__(self, a0: 'QMatrix2x2') -> 'QMatrix2x2': ... + def __iadd__(self, a0: 'QMatrix2x2') -> 'QMatrix2x2': ... + def transposed(self) -> 'QMatrix2x2': ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def copyDataTo(self) -> typing.List[float]: ... + def data(self) -> typing.List[float]: ... + def __repr__(self) -> str: ... + + +class QGlyphRun(PyQt5.sipsimplewrapper): + + class GlyphRunFlag(int): + Overline = ... # type: QGlyphRun.GlyphRunFlag + Underline = ... # type: QGlyphRun.GlyphRunFlag + StrikeOut = ... # type: QGlyphRun.GlyphRunFlag + RightToLeft = ... # type: QGlyphRun.GlyphRunFlag + SplitLigature = ... # type: QGlyphRun.GlyphRunFlag + + class GlyphRunFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGlyphRun.GlyphRunFlags', 'QGlyphRun.GlyphRunFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGlyphRun.GlyphRunFlags', 'QGlyphRun.GlyphRunFlag']) -> 'QGlyphRun.GlyphRunFlags': ... + def __xor__(self, f: typing.Union['QGlyphRun.GlyphRunFlags', 'QGlyphRun.GlyphRunFlag']) -> 'QGlyphRun.GlyphRunFlags': ... + def __ior__(self, f: typing.Union['QGlyphRun.GlyphRunFlags', 'QGlyphRun.GlyphRunFlag']) -> 'QGlyphRun.GlyphRunFlags': ... + def __or__(self, f: typing.Union['QGlyphRun.GlyphRunFlags', 'QGlyphRun.GlyphRunFlag']) -> 'QGlyphRun.GlyphRunFlags': ... + def __iand__(self, f: typing.Union['QGlyphRun.GlyphRunFlags', 'QGlyphRun.GlyphRunFlag']) -> 'QGlyphRun.GlyphRunFlags': ... + def __and__(self, f: typing.Union['QGlyphRun.GlyphRunFlags', 'QGlyphRun.GlyphRunFlag']) -> 'QGlyphRun.GlyphRunFlags': ... + def __invert__(self) -> 'QGlyphRun.GlyphRunFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGlyphRun') -> None: ... + + def swap(self, other: 'QGlyphRun') -> None: ... + def isEmpty(self) -> bool: ... + def boundingRect(self) -> QtCore.QRectF: ... + def setBoundingRect(self, boundingRect: QtCore.QRectF) -> None: ... + def flags(self) -> 'QGlyphRun.GlyphRunFlags': ... + def setFlags(self, flags: typing.Union['QGlyphRun.GlyphRunFlags', 'QGlyphRun.GlyphRunFlag']) -> None: ... + def setFlag(self, flag: 'QGlyphRun.GlyphRunFlag', enabled: bool = ...) -> None: ... + def isRightToLeft(self) -> bool: ... + def setRightToLeft(self, on: bool) -> None: ... + def strikeOut(self) -> bool: ... + def setStrikeOut(self, strikeOut: bool) -> None: ... + def underline(self) -> bool: ... + def setUnderline(self, underline: bool) -> None: ... + def overline(self) -> bool: ... + def setOverline(self, overline: bool) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def clear(self) -> None: ... + def setPositions(self, positions: typing.Iterable[typing.Union[QtCore.QPointF, QtCore.QPoint]]) -> None: ... + def positions(self) -> typing.List[QtCore.QPointF]: ... + def setGlyphIndexes(self, glyphIndexes: typing.Iterable[int]) -> None: ... + def glyphIndexes(self) -> typing.List[int]: ... + def setRawFont(self, rawFont: 'QRawFont') -> None: ... + def rawFont(self) -> 'QRawFont': ... + + +class QGuiApplication(QtCore.QCoreApplication): + + def __init__(self, argv: typing.List[str]) -> None: ... + + @staticmethod + def highDpiScaleFactorRoundingPolicy() -> QtCore.Qt.HighDpiScaleFactorRoundingPolicy: ... + @staticmethod + def setHighDpiScaleFactorRoundingPolicy(policy: QtCore.Qt.HighDpiScaleFactorRoundingPolicy) -> None: ... + fontChanged: typing.ClassVar[QtCore.pyqtSignal] + @staticmethod + def screenAt(point: QtCore.QPoint) -> typing.Optional['QScreen']: ... + @staticmethod + def desktopFileName() -> str: ... + @staticmethod + def setDesktopFileName(name: typing.Optional[str]) -> None: ... + primaryScreenChanged: typing.ClassVar[QtCore.pyqtSignal] + @staticmethod + def setFallbackSessionManagementEnabled(a0: bool) -> None: ... + @staticmethod + def isFallbackSessionManagementEnabled() -> bool: ... + paletteChanged: typing.ClassVar[QtCore.pyqtSignal] + layoutDirectionChanged: typing.ClassVar[QtCore.pyqtSignal] + screenRemoved: typing.ClassVar[QtCore.pyqtSignal] + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + @staticmethod + def windowIcon() -> 'QIcon': ... + @staticmethod + def setWindowIcon(icon: 'QIcon') -> None: ... + @staticmethod + def sync() -> None: ... + @staticmethod + def applicationState() -> QtCore.Qt.ApplicationState: ... + def isSavingSession(self) -> bool: ... + def sessionKey(self) -> str: ... + def sessionId(self) -> str: ... + def isSessionRestored(self) -> bool: ... + def devicePixelRatio(self) -> float: ... + @staticmethod + def inputMethod() -> typing.Optional['QInputMethod']: ... + @staticmethod + def styleHints() -> typing.Optional['QStyleHints']: ... + @staticmethod + def modalWindow() -> typing.Optional['QWindow']: ... + @staticmethod + def applicationDisplayName() -> str: ... + @staticmethod + def setApplicationDisplayName(name: typing.Optional[str]) -> None: ... + applicationDisplayNameChanged: typing.ClassVar[QtCore.pyqtSignal] + applicationStateChanged: typing.ClassVar[QtCore.pyqtSignal] + focusWindowChanged: typing.ClassVar[QtCore.pyqtSignal] + saveStateRequest: typing.ClassVar[QtCore.pyqtSignal] + commitDataRequest: typing.ClassVar[QtCore.pyqtSignal] + focusObjectChanged: typing.ClassVar[QtCore.pyqtSignal] + lastWindowClosed: typing.ClassVar[QtCore.pyqtSignal] + screenAdded: typing.ClassVar[QtCore.pyqtSignal] + fontDatabaseChanged: typing.ClassVar[QtCore.pyqtSignal] + def notify(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + @staticmethod + def exec() -> int: ... + @staticmethod + def exec_() -> int: ... + @staticmethod + def quitOnLastWindowClosed() -> bool: ... + @staticmethod + def setQuitOnLastWindowClosed(quit: bool) -> None: ... + @staticmethod + def desktopSettingsAware() -> bool: ... + @staticmethod + def setDesktopSettingsAware(on: bool) -> None: ... + @staticmethod + def isLeftToRight() -> bool: ... + @staticmethod + def isRightToLeft() -> bool: ... + @staticmethod + def layoutDirection() -> QtCore.Qt.LayoutDirection: ... + @staticmethod + def setLayoutDirection(direction: QtCore.Qt.LayoutDirection) -> None: ... + @staticmethod + def mouseButtons() -> QtCore.Qt.MouseButtons: ... + @staticmethod + def queryKeyboardModifiers() -> QtCore.Qt.KeyboardModifiers: ... + @staticmethod + def keyboardModifiers() -> QtCore.Qt.KeyboardModifiers: ... + @staticmethod + def setPalette(pal: 'QPalette') -> None: ... + @staticmethod + def palette() -> 'QPalette': ... + @staticmethod + def clipboard() -> typing.Optional[QClipboard]: ... + @staticmethod + def setFont(a0: QFont) -> None: ... + @staticmethod + def font() -> QFont: ... + @staticmethod + def restoreOverrideCursor() -> None: ... + @staticmethod + def changeOverrideCursor(a0: typing.Union[QCursor, QtCore.Qt.CursorShape]) -> None: ... + @staticmethod + def setOverrideCursor(a0: typing.Union[QCursor, QtCore.Qt.CursorShape]) -> None: ... + @staticmethod + def overrideCursor() -> typing.Optional[QCursor]: ... + @staticmethod + def screens() -> typing.List['QScreen']: ... + @staticmethod + def primaryScreen() -> typing.Optional['QScreen']: ... + @staticmethod + def focusObject() -> typing.Optional[QtCore.QObject]: ... + @staticmethod + def focusWindow() -> typing.Optional['QWindow']: ... + @staticmethod + def platformName() -> str: ... + @staticmethod + def topLevelAt(pos: QtCore.QPoint) -> typing.Optional['QWindow']: ... + @staticmethod + def topLevelWindows() -> typing.List['QWindow']: ... + @staticmethod + def allWindows() -> typing.List['QWindow']: ... + + +class QIcon(PyQt5.sip.wrapper): + + class State(int): + On = ... # type: QIcon.State + Off = ... # type: QIcon.State + + class Mode(int): + Normal = ... # type: QIcon.Mode + Disabled = ... # type: QIcon.Mode + Active = ... # type: QIcon.Mode + Selected = ... # type: QIcon.Mode + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pixmap: QPixmap) -> None: ... + @typing.overload + def __init__(self, other: 'QIcon') -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, engine: typing.Optional['QIconEngine']) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + @staticmethod + def setFallbackThemeName(name: typing.Optional[str]) -> None: ... + @staticmethod + def fallbackThemeName() -> str: ... + @staticmethod + def setFallbackSearchPaths(paths: typing.Iterable[typing.Optional[str]]) -> None: ... + @staticmethod + def fallbackSearchPaths() -> typing.List[str]: ... + def isMask(self) -> bool: ... + def setIsMask(self, isMask: bool) -> None: ... + def swap(self, other: 'QIcon') -> None: ... + def name(self) -> str: ... + @staticmethod + def setThemeName(path: typing.Optional[str]) -> None: ... + @staticmethod + def themeName() -> str: ... + @staticmethod + def setThemeSearchPaths(searchpath: typing.Iterable[typing.Optional[str]]) -> None: ... + @staticmethod + def themeSearchPaths() -> typing.List[str]: ... + @staticmethod + def hasThemeIcon(name: typing.Optional[str]) -> bool: ... + @typing.overload + @staticmethod + def fromTheme(name: typing.Optional[str]) -> 'QIcon': ... + @typing.overload + @staticmethod + def fromTheme(name: typing.Optional[str], fallback: 'QIcon') -> 'QIcon': ... + def cacheKey(self) -> int: ... + def addFile(self, fileName: typing.Optional[str], size: QtCore.QSize = ..., mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> None: ... + def addPixmap(self, pixmap: QPixmap, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> None: ... + def isDetached(self) -> bool: ... + def isNull(self) -> bool: ... + @typing.overload + def paint(self, painter: typing.Optional['QPainter'], rect: QtCore.QRect, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ..., mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> None: ... + @typing.overload + def paint(self, painter: typing.Optional['QPainter'], x: int, y: int, w: int, h: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ..., mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> None: ... + def availableSizes(self, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> typing.List[QtCore.QSize]: ... + @typing.overload + def actualSize(self, size: QtCore.QSize, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QtCore.QSize: ... + @typing.overload + def actualSize(self, window: typing.Optional['QWindow'], size: QtCore.QSize, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QtCore.QSize: ... + @typing.overload + def pixmap(self, size: QtCore.QSize, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QPixmap: ... + @typing.overload + def pixmap(self, w: int, h: int, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QPixmap: ... + @typing.overload + def pixmap(self, extent: int, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QPixmap: ... + @typing.overload + def pixmap(self, window: typing.Optional['QWindow'], size: QtCore.QSize, mode: 'QIcon.Mode' = ..., state: 'QIcon.State' = ...) -> QPixmap: ... + + +class QIconEngine(PyQt5.sip.wrapper): + + class IconEngineHook(int): + AvailableSizesHook = ... # type: QIconEngine.IconEngineHook + IconNameHook = ... # type: QIconEngine.IconEngineHook + IsNullHook = ... # type: QIconEngine.IconEngineHook + ScaledPixmapHook = ... # type: QIconEngine.IconEngineHook + + class AvailableSizesArgument(PyQt5.sipsimplewrapper): + + mode = ... # type: QIcon.Mode + sizes = ... # type: typing.Iterable[QtCore.QSize] + state = ... # type: QIcon.State + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QIconEngine.AvailableSizesArgument') -> None: ... + + class ScaledPixmapArgument(PyQt5.sipsimplewrapper): + + mode = ... # type: QIcon.Mode + pixmap = ... # type: QPixmap + scale = ... # type: float + size = ... # type: QtCore.QSize + state = ... # type: QIcon.State + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QIconEngine.ScaledPixmapArgument') -> None: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QIconEngine') -> None: ... + + def scaledPixmap(self, size: QtCore.QSize, mode: QIcon.Mode, state: QIcon.State, scale: float) -> QPixmap: ... + def isNull(self) -> bool: ... + def iconName(self) -> str: ... + def availableSizes(self, mode: QIcon.Mode = ..., state: QIcon.State = ...) -> typing.List[QtCore.QSize]: ... + def write(self, out: QtCore.QDataStream) -> bool: ... + def read(self, in_: QtCore.QDataStream) -> bool: ... + def clone(self) -> typing.Optional['QIconEngine']: ... + def key(self) -> str: ... + def addFile(self, fileName: typing.Optional[str], size: QtCore.QSize, mode: QIcon.Mode, state: QIcon.State) -> None: ... + def addPixmap(self, pixmap: QPixmap, mode: QIcon.Mode, state: QIcon.State) -> None: ... + def pixmap(self, size: QtCore.QSize, mode: QIcon.Mode, state: QIcon.State) -> QPixmap: ... + def actualSize(self, size: QtCore.QSize, mode: QIcon.Mode, state: QIcon.State) -> QtCore.QSize: ... + def paint(self, painter: typing.Optional['QPainter'], rect: QtCore.QRect, mode: QIcon.Mode, state: QIcon.State) -> None: ... + + +class QImage(QPaintDevice): + + class Format(int): + Format_Invalid = ... # type: QImage.Format + Format_Mono = ... # type: QImage.Format + Format_MonoLSB = ... # type: QImage.Format + Format_Indexed8 = ... # type: QImage.Format + Format_RGB32 = ... # type: QImage.Format + Format_ARGB32 = ... # type: QImage.Format + Format_ARGB32_Premultiplied = ... # type: QImage.Format + Format_RGB16 = ... # type: QImage.Format + Format_ARGB8565_Premultiplied = ... # type: QImage.Format + Format_RGB666 = ... # type: QImage.Format + Format_ARGB6666_Premultiplied = ... # type: QImage.Format + Format_RGB555 = ... # type: QImage.Format + Format_ARGB8555_Premultiplied = ... # type: QImage.Format + Format_RGB888 = ... # type: QImage.Format + Format_RGB444 = ... # type: QImage.Format + Format_ARGB4444_Premultiplied = ... # type: QImage.Format + Format_RGBX8888 = ... # type: QImage.Format + Format_RGBA8888 = ... # type: QImage.Format + Format_RGBA8888_Premultiplied = ... # type: QImage.Format + Format_BGR30 = ... # type: QImage.Format + Format_A2BGR30_Premultiplied = ... # type: QImage.Format + Format_RGB30 = ... # type: QImage.Format + Format_A2RGB30_Premultiplied = ... # type: QImage.Format + Format_Alpha8 = ... # type: QImage.Format + Format_Grayscale8 = ... # type: QImage.Format + Format_RGBX64 = ... # type: QImage.Format + Format_RGBA64 = ... # type: QImage.Format + Format_RGBA64_Premultiplied = ... # type: QImage.Format + Format_Grayscale16 = ... # type: QImage.Format + Format_BGR888 = ... # type: QImage.Format + + class InvertMode(int): + InvertRgb = ... # type: QImage.InvertMode + InvertRgba = ... # type: QImage.InvertMode + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, size: QtCore.QSize, format: 'QImage.Format') -> None: ... + @typing.overload + def __init__(self, width: int, height: int, format: 'QImage.Format') -> None: ... + @typing.overload + def __init__(self, data: typing.Optional[bytes], width: int, height: int, format: 'QImage.Format') -> None: ... + @typing.overload + def __init__(self, data: typing.Optional[PyQt5.sip.voidptr], width: int, height: int, format: 'QImage.Format') -> None: ... + @typing.overload + def __init__(self, data: typing.Optional[bytes], width: int, height: int, bytesPerLine: int, format: 'QImage.Format') -> None: ... + @typing.overload + def __init__(self, data: typing.Optional[PyQt5.sip.voidptr], width: int, height: int, bytesPerLine: int, format: 'QImage.Format') -> None: ... + @typing.overload + def __init__(self, xpm: typing.List[str]) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QImage') -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def applyColorTransform(self, transform: QColorTransform) -> None: ... + def setColorSpace(self, a0: QColorSpace) -> None: ... + def convertToColorSpace(self, a0: QColorSpace) -> None: ... + def convertedToColorSpace(self, a0: QColorSpace) -> 'QImage': ... + def colorSpace(self) -> QColorSpace: ... + def convertTo(self, f: 'QImage.Format', flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> None: ... + def sizeInBytes(self) -> int: ... + def reinterpretAsFormat(self, f: 'QImage.Format') -> bool: ... + @typing.overload + def setPixelColor(self, x: int, y: int, c: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def setPixelColor(self, pt: QtCore.QPoint, c: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def pixelColor(self, x: int, y: int) -> QColor: ... + @typing.overload + def pixelColor(self, pt: QtCore.QPoint) -> QColor: ... + @staticmethod + def toImageFormat(format: 'QPixelFormat') -> 'QImage.Format': ... + @staticmethod + def toPixelFormat(format: 'QImage.Format') -> 'QPixelFormat': ... + def pixelFormat(self) -> 'QPixelFormat': ... + def setDevicePixelRatio(self, scaleFactor: float) -> None: ... + def devicePixelRatio(self) -> float: ... + def swap(self, other: 'QImage') -> None: ... + def bitPlaneCount(self) -> int: ... + def byteCount(self) -> int: ... + def setColorCount(self, a0: int) -> None: ... + def colorCount(self) -> int: ... + def cacheKey(self) -> int: ... + @staticmethod + def trueMatrix(a0: 'QTransform', w: int, h: int) -> 'QTransform': ... + def transformed(self, matrix: 'QTransform', mode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... + def createMaskFromColor(self, color: int, mode: QtCore.Qt.MaskMode = ...) -> 'QImage': ... + def smoothScaled(self, w: int, h: int) -> 'QImage': ... + def metric(self, metric: QPaintDevice.PaintDeviceMetric) -> int: ... + def setText(self, key: typing.Optional[str], value: typing.Optional[str]) -> None: ... + def text(self, key: typing.Optional[str] = ...) -> str: ... + def textKeys(self) -> typing.List[str]: ... + def setOffset(self, a0: QtCore.QPoint) -> None: ... + def offset(self) -> QtCore.QPoint: ... + def setDotsPerMeterY(self, a0: int) -> None: ... + def setDotsPerMeterX(self, a0: int) -> None: ... + def dotsPerMeterY(self) -> int: ... + def dotsPerMeterX(self) -> int: ... + def paintEngine(self) -> typing.Optional['QPaintEngine']: ... + @typing.overload + @staticmethod + def fromData(data: typing.Optional[PyQt5.sip.array[bytes]], format: typing.Optional[str] = ...) -> 'QImage': ... + @typing.overload + @staticmethod + def fromData(data: typing.Union[QtCore.QByteArray, bytes, bytearray], format: typing.Optional[str] = ...) -> 'QImage': ... + @typing.overload + def save(self, fileName: typing.Optional[str], format: typing.Optional[str] = ..., quality: int = ...) -> bool: ... + @typing.overload + def save(self, device: typing.Optional[QtCore.QIODevice], format: typing.Optional[str] = ..., quality: int = ...) -> bool: ... + @typing.overload + def loadFromData(self, data: typing.Optional[PyQt5.sip.array[bytes]], format: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def loadFromData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray], format: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def load(self, device: typing.Optional[QtCore.QIODevice], format: typing.Optional[str]) -> bool: ... + @typing.overload + def load(self, fileName: typing.Optional[str], format: typing.Optional[str] = ...) -> bool: ... + def invertPixels(self, mode: 'QImage.InvertMode' = ...) -> None: ... + def rgbSwapped(self) -> 'QImage': ... + def mirrored(self, horizontal: bool = ..., vertical: bool = ...) -> 'QImage': ... + def scaledToHeight(self, height: int, mode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... + def scaledToWidth(self, width: int, mode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... + @typing.overload + def scaled(self, width: int, height: int, aspectRatioMode: QtCore.Qt.AspectRatioMode = ..., transformMode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... + @typing.overload + def scaled(self, size: QtCore.QSize, aspectRatioMode: QtCore.Qt.AspectRatioMode = ..., transformMode: QtCore.Qt.TransformationMode = ...) -> 'QImage': ... + def createHeuristicMask(self, clipTight: bool = ...) -> 'QImage': ... + def createAlphaMask(self, flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> 'QImage': ... + def setAlphaChannel(self, alphaChannel: 'QImage') -> None: ... + def hasAlphaChannel(self) -> bool: ... + @typing.overload + def fill(self, color: QtCore.Qt.GlobalColor) -> None: ... + @typing.overload + def fill(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def fill(self, pixel: int) -> None: ... + def setColorTable(self, colors: typing.Iterable[int]) -> None: ... + def colorTable(self) -> typing.List[int]: ... + @typing.overload + def setPixel(self, pt: QtCore.QPoint, index_or_rgb: int) -> None: ... + @typing.overload + def setPixel(self, x: int, y: int, index_or_rgb: int) -> None: ... + @typing.overload + def pixel(self, pt: QtCore.QPoint) -> int: ... + @typing.overload + def pixel(self, x: int, y: int) -> int: ... + @typing.overload + def pixelIndex(self, pt: QtCore.QPoint) -> int: ... + @typing.overload + def pixelIndex(self, x: int, y: int) -> int: ... + @typing.overload + def valid(self, pt: QtCore.QPoint) -> bool: ... + @typing.overload + def valid(self, x: int, y: int) -> bool: ... + def bytesPerLine(self) -> int: ... + def constScanLine(self, a0: int) -> typing.Optional[PyQt5.sip.voidptr]: ... + def scanLine(self, a0: int) -> typing.Optional[PyQt5.sip.voidptr]: ... + def constBits(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def bits(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def isGrayscale(self) -> bool: ... + def allGray(self) -> bool: ... + def setColor(self, i: int, c: int) -> None: ... + def color(self, i: int) -> int: ... + def depth(self) -> int: ... + def rect(self) -> QtCore.QRect: ... + def size(self) -> QtCore.QSize: ... + def height(self) -> int: ... + def width(self) -> int: ... + @typing.overload + def convertToFormat(self, f: 'QImage.Format', flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> 'QImage': ... + @typing.overload + def convertToFormat(self, f: 'QImage.Format', colorTable: typing.Iterable[int], flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> 'QImage': ... + def format(self) -> 'QImage.Format': ... + @typing.overload + def copy(self, rect: QtCore.QRect = ...) -> 'QImage': ... + @typing.overload + def copy(self, x: int, y: int, w: int, h: int) -> 'QImage': ... + def isDetached(self) -> bool: ... + def detach(self) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def devType(self) -> int: ... + def isNull(self) -> bool: ... + + +class QImageIOHandler(PyQt5.sipsimplewrapper): + + class Transformation(int): + TransformationNone = ... # type: QImageIOHandler.Transformation + TransformationMirror = ... # type: QImageIOHandler.Transformation + TransformationFlip = ... # type: QImageIOHandler.Transformation + TransformationRotate180 = ... # type: QImageIOHandler.Transformation + TransformationRotate90 = ... # type: QImageIOHandler.Transformation + TransformationMirrorAndRotate90 = ... # type: QImageIOHandler.Transformation + TransformationFlipAndRotate90 = ... # type: QImageIOHandler.Transformation + TransformationRotate270 = ... # type: QImageIOHandler.Transformation + + class ImageOption(int): + Size = ... # type: QImageIOHandler.ImageOption + ClipRect = ... # type: QImageIOHandler.ImageOption + Description = ... # type: QImageIOHandler.ImageOption + ScaledClipRect = ... # type: QImageIOHandler.ImageOption + ScaledSize = ... # type: QImageIOHandler.ImageOption + CompressionRatio = ... # type: QImageIOHandler.ImageOption + Gamma = ... # type: QImageIOHandler.ImageOption + Quality = ... # type: QImageIOHandler.ImageOption + Name = ... # type: QImageIOHandler.ImageOption + SubType = ... # type: QImageIOHandler.ImageOption + IncrementalReading = ... # type: QImageIOHandler.ImageOption + Endianness = ... # type: QImageIOHandler.ImageOption + Animation = ... # type: QImageIOHandler.ImageOption + BackgroundColor = ... # type: QImageIOHandler.ImageOption + SupportedSubTypes = ... # type: QImageIOHandler.ImageOption + OptimizedWrite = ... # type: QImageIOHandler.ImageOption + ProgressiveScanWrite = ... # type: QImageIOHandler.ImageOption + ImageTransformation = ... # type: QImageIOHandler.ImageOption + TransformedByDefault = ... # type: QImageIOHandler.ImageOption + + class Transformations(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QImageIOHandler.Transformations', 'QImageIOHandler.Transformation']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QImageIOHandler.Transformations', 'QImageIOHandler.Transformation']) -> 'QImageIOHandler.Transformations': ... + def __xor__(self, f: typing.Union['QImageIOHandler.Transformations', 'QImageIOHandler.Transformation']) -> 'QImageIOHandler.Transformations': ... + def __ior__(self, f: typing.Union['QImageIOHandler.Transformations', 'QImageIOHandler.Transformation']) -> 'QImageIOHandler.Transformations': ... + def __or__(self, f: typing.Union['QImageIOHandler.Transformations', 'QImageIOHandler.Transformation']) -> 'QImageIOHandler.Transformations': ... + def __iand__(self, f: typing.Union['QImageIOHandler.Transformations', 'QImageIOHandler.Transformation']) -> 'QImageIOHandler.Transformations': ... + def __and__(self, f: typing.Union['QImageIOHandler.Transformations', 'QImageIOHandler.Transformation']) -> 'QImageIOHandler.Transformations': ... + def __invert__(self) -> 'QImageIOHandler.Transformations': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self) -> None: ... + + def currentImageRect(self) -> QtCore.QRect: ... + def currentImageNumber(self) -> int: ... + def nextImageDelay(self) -> int: ... + def imageCount(self) -> int: ... + def loopCount(self) -> int: ... + def jumpToImage(self, imageNumber: int) -> bool: ... + def jumpToNextImage(self) -> bool: ... + def supportsOption(self, option: 'QImageIOHandler.ImageOption') -> bool: ... + def setOption(self, option: 'QImageIOHandler.ImageOption', value: typing.Any) -> None: ... + def option(self, option: 'QImageIOHandler.ImageOption') -> typing.Any: ... + def write(self, image: QImage) -> bool: ... + def read(self, image: typing.Optional[QImage]) -> bool: ... + def canRead(self) -> bool: ... + def format(self) -> QtCore.QByteArray: ... + def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def device(self) -> typing.Optional[QtCore.QIODevice]: ... + def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + + +class QImageReader(PyQt5.sipsimplewrapper): + + class ImageReaderError(int): + UnknownError = ... # type: QImageReader.ImageReaderError + FileNotFoundError = ... # type: QImageReader.ImageReaderError + DeviceError = ... # type: QImageReader.ImageReaderError + UnsupportedFormatError = ... # type: QImageReader.ImageReaderError + InvalidDataError = ... # type: QImageReader.ImageReaderError + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QtCore.QIODevice], format: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + + @staticmethod + def imageFormatsForMimeType(mimeType: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.List[QtCore.QByteArray]: ... + def gamma(self) -> float: ... + def setGamma(self, gamma: float) -> None: ... + def autoTransform(self) -> bool: ... + def setAutoTransform(self, enabled: bool) -> None: ... + def transformation(self) -> QImageIOHandler.Transformations: ... + def supportedSubTypes(self) -> typing.List[QtCore.QByteArray]: ... + def subType(self) -> QtCore.QByteArray: ... + @staticmethod + def supportedMimeTypes() -> typing.List[QtCore.QByteArray]: ... + def decideFormatFromContent(self) -> bool: ... + def setDecideFormatFromContent(self, ignored: bool) -> None: ... + def autoDetectImageFormat(self) -> bool: ... + def setAutoDetectImageFormat(self, enabled: bool) -> None: ... + def supportsOption(self, option: QImageIOHandler.ImageOption) -> bool: ... + def quality(self) -> int: ... + def setQuality(self, quality: int) -> None: ... + def supportsAnimation(self) -> bool: ... + def backgroundColor(self) -> QColor: ... + def setBackgroundColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + def text(self, key: typing.Optional[str]) -> str: ... + def textKeys(self) -> typing.List[str]: ... + @staticmethod + def supportedImageFormats() -> typing.List[QtCore.QByteArray]: ... + @typing.overload + @staticmethod + def imageFormat(fileName: typing.Optional[str]) -> QtCore.QByteArray: ... + @typing.overload + @staticmethod + def imageFormat(device: typing.Optional[QtCore.QIODevice]) -> QtCore.QByteArray: ... + @typing.overload + def imageFormat(self) -> QImage.Format: ... + def errorString(self) -> str: ... + def error(self) -> 'QImageReader.ImageReaderError': ... + def currentImageRect(self) -> QtCore.QRect: ... + def currentImageNumber(self) -> int: ... + def nextImageDelay(self) -> int: ... + def imageCount(self) -> int: ... + def loopCount(self) -> int: ... + def jumpToImage(self, imageNumber: int) -> bool: ... + def jumpToNextImage(self) -> bool: ... + @typing.overload + def read(self) -> QImage: ... + @typing.overload + def read(self, image: typing.Optional[QImage]) -> bool: ... + def canRead(self) -> bool: ... + def scaledClipRect(self) -> QtCore.QRect: ... + def setScaledClipRect(self, rect: QtCore.QRect) -> None: ... + def scaledSize(self) -> QtCore.QSize: ... + def setScaledSize(self, size: QtCore.QSize) -> None: ... + def clipRect(self) -> QtCore.QRect: ... + def setClipRect(self, rect: QtCore.QRect) -> None: ... + def size(self) -> QtCore.QSize: ... + def fileName(self) -> str: ... + def setFileName(self, fileName: typing.Optional[str]) -> None: ... + def device(self) -> typing.Optional[QtCore.QIODevice]: ... + def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + def format(self) -> QtCore.QByteArray: ... + def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + + +class QImageWriter(PyQt5.sipsimplewrapper): + + class ImageWriterError(int): + UnknownError = ... # type: QImageWriter.ImageWriterError + DeviceError = ... # type: QImageWriter.ImageWriterError + UnsupportedFormatError = ... # type: QImageWriter.ImageWriterError + InvalidImageError = ... # type: QImageWriter.ImageWriterError + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QtCore.QIODevice], format: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + + @staticmethod + def imageFormatsForMimeType(mimeType: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.List[QtCore.QByteArray]: ... + def setTransformation(self, orientation: typing.Union[QImageIOHandler.Transformations, QImageIOHandler.Transformation]) -> None: ... + def transformation(self) -> QImageIOHandler.Transformations: ... + def progressiveScanWrite(self) -> bool: ... + def setProgressiveScanWrite(self, progressive: bool) -> None: ... + def optimizedWrite(self) -> bool: ... + def setOptimizedWrite(self, optimize: bool) -> None: ... + def supportedSubTypes(self) -> typing.List[QtCore.QByteArray]: ... + def subType(self) -> QtCore.QByteArray: ... + def setSubType(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + @staticmethod + def supportedMimeTypes() -> typing.List[QtCore.QByteArray]: ... + def compression(self) -> int: ... + def setCompression(self, compression: int) -> None: ... + def supportsOption(self, option: QImageIOHandler.ImageOption) -> bool: ... + def setText(self, key: typing.Optional[str], text: typing.Optional[str]) -> None: ... + @staticmethod + def supportedImageFormats() -> typing.List[QtCore.QByteArray]: ... + def errorString(self) -> str: ... + def error(self) -> 'QImageWriter.ImageWriterError': ... + def write(self, image: QImage) -> bool: ... + def canWrite(self) -> bool: ... + def gamma(self) -> float: ... + def setGamma(self, gamma: float) -> None: ... + def quality(self) -> int: ... + def setQuality(self, quality: int) -> None: ... + def fileName(self) -> str: ... + def setFileName(self, fileName: typing.Optional[str]) -> None: ... + def device(self) -> typing.Optional[QtCore.QIODevice]: ... + def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + def format(self) -> QtCore.QByteArray: ... + def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + + +class QInputMethod(QtCore.QObject): + + class Action(int): + Click = ... # type: QInputMethod.Action + ContextMenu = ... # type: QInputMethod.Action + + inputItemClipRectangleChanged: typing.ClassVar[QtCore.pyqtSignal] + anchorRectangleChanged: typing.ClassVar[QtCore.pyqtSignal] + def inputItemClipRectangle(self) -> QtCore.QRectF: ... + def anchorRectangle(self) -> QtCore.QRectF: ... + inputDirectionChanged: typing.ClassVar[QtCore.pyqtSignal] + localeChanged: typing.ClassVar[QtCore.pyqtSignal] + animatingChanged: typing.ClassVar[QtCore.pyqtSignal] + visibleChanged: typing.ClassVar[QtCore.pyqtSignal] + keyboardRectangleChanged: typing.ClassVar[QtCore.pyqtSignal] + cursorRectangleChanged: typing.ClassVar[QtCore.pyqtSignal] + def invokeAction(self, a: 'QInputMethod.Action', cursorPosition: int) -> None: ... + def commit(self) -> None: ... + def reset(self) -> None: ... + def update(self, queries: typing.Union[QtCore.Qt.InputMethodQueries, QtCore.Qt.InputMethodQuery]) -> None: ... + def hide(self) -> None: ... + def show(self) -> None: ... + @staticmethod + def queryFocusObject(query: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... + def setInputItemRectangle(self, rect: QtCore.QRectF) -> None: ... + def inputItemRectangle(self) -> QtCore.QRectF: ... + def inputDirection(self) -> QtCore.Qt.LayoutDirection: ... + def locale(self) -> QtCore.QLocale: ... + def isAnimating(self) -> bool: ... + def setVisible(self, visible: bool) -> None: ... + def isVisible(self) -> bool: ... + def keyboardRectangle(self) -> QtCore.QRectF: ... + def cursorRectangle(self) -> QtCore.QRectF: ... + def setInputItemTransform(self, transform: 'QTransform') -> None: ... + def inputItemTransform(self) -> 'QTransform': ... + + +class QKeySequence(PyQt5.sipsimplewrapper): + + class StandardKey(int): + UnknownKey = ... # type: QKeySequence.StandardKey + HelpContents = ... # type: QKeySequence.StandardKey + WhatsThis = ... # type: QKeySequence.StandardKey + Open = ... # type: QKeySequence.StandardKey + Close = ... # type: QKeySequence.StandardKey + Save = ... # type: QKeySequence.StandardKey + New = ... # type: QKeySequence.StandardKey + Delete = ... # type: QKeySequence.StandardKey + Cut = ... # type: QKeySequence.StandardKey + Copy = ... # type: QKeySequence.StandardKey + Paste = ... # type: QKeySequence.StandardKey + Undo = ... # type: QKeySequence.StandardKey + Redo = ... # type: QKeySequence.StandardKey + Back = ... # type: QKeySequence.StandardKey + Forward = ... # type: QKeySequence.StandardKey + Refresh = ... # type: QKeySequence.StandardKey + ZoomIn = ... # type: QKeySequence.StandardKey + ZoomOut = ... # type: QKeySequence.StandardKey + Print = ... # type: QKeySequence.StandardKey + AddTab = ... # type: QKeySequence.StandardKey + NextChild = ... # type: QKeySequence.StandardKey + PreviousChild = ... # type: QKeySequence.StandardKey + Find = ... # type: QKeySequence.StandardKey + FindNext = ... # type: QKeySequence.StandardKey + FindPrevious = ... # type: QKeySequence.StandardKey + Replace = ... # type: QKeySequence.StandardKey + SelectAll = ... # type: QKeySequence.StandardKey + Bold = ... # type: QKeySequence.StandardKey + Italic = ... # type: QKeySequence.StandardKey + Underline = ... # type: QKeySequence.StandardKey + MoveToNextChar = ... # type: QKeySequence.StandardKey + MoveToPreviousChar = ... # type: QKeySequence.StandardKey + MoveToNextWord = ... # type: QKeySequence.StandardKey + MoveToPreviousWord = ... # type: QKeySequence.StandardKey + MoveToNextLine = ... # type: QKeySequence.StandardKey + MoveToPreviousLine = ... # type: QKeySequence.StandardKey + MoveToNextPage = ... # type: QKeySequence.StandardKey + MoveToPreviousPage = ... # type: QKeySequence.StandardKey + MoveToStartOfLine = ... # type: QKeySequence.StandardKey + MoveToEndOfLine = ... # type: QKeySequence.StandardKey + MoveToStartOfBlock = ... # type: QKeySequence.StandardKey + MoveToEndOfBlock = ... # type: QKeySequence.StandardKey + MoveToStartOfDocument = ... # type: QKeySequence.StandardKey + MoveToEndOfDocument = ... # type: QKeySequence.StandardKey + SelectNextChar = ... # type: QKeySequence.StandardKey + SelectPreviousChar = ... # type: QKeySequence.StandardKey + SelectNextWord = ... # type: QKeySequence.StandardKey + SelectPreviousWord = ... # type: QKeySequence.StandardKey + SelectNextLine = ... # type: QKeySequence.StandardKey + SelectPreviousLine = ... # type: QKeySequence.StandardKey + SelectNextPage = ... # type: QKeySequence.StandardKey + SelectPreviousPage = ... # type: QKeySequence.StandardKey + SelectStartOfLine = ... # type: QKeySequence.StandardKey + SelectEndOfLine = ... # type: QKeySequence.StandardKey + SelectStartOfBlock = ... # type: QKeySequence.StandardKey + SelectEndOfBlock = ... # type: QKeySequence.StandardKey + SelectStartOfDocument = ... # type: QKeySequence.StandardKey + SelectEndOfDocument = ... # type: QKeySequence.StandardKey + DeleteStartOfWord = ... # type: QKeySequence.StandardKey + DeleteEndOfWord = ... # type: QKeySequence.StandardKey + DeleteEndOfLine = ... # type: QKeySequence.StandardKey + InsertParagraphSeparator = ... # type: QKeySequence.StandardKey + InsertLineSeparator = ... # type: QKeySequence.StandardKey + SaveAs = ... # type: QKeySequence.StandardKey + Preferences = ... # type: QKeySequence.StandardKey + Quit = ... # type: QKeySequence.StandardKey + FullScreen = ... # type: QKeySequence.StandardKey + Deselect = ... # type: QKeySequence.StandardKey + DeleteCompleteLine = ... # type: QKeySequence.StandardKey + Backspace = ... # type: QKeySequence.StandardKey + Cancel = ... # type: QKeySequence.StandardKey + + class SequenceMatch(int): + NoMatch = ... # type: QKeySequence.SequenceMatch + PartialMatch = ... # type: QKeySequence.SequenceMatch + ExactMatch = ... # type: QKeySequence.SequenceMatch + + class SequenceFormat(int): + NativeText = ... # type: QKeySequence.SequenceFormat + PortableText = ... # type: QKeySequence.SequenceFormat + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, ks: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> None: ... + @typing.overload + def __init__(self, key: typing.Optional[str], format: 'QKeySequence.SequenceFormat' = ...) -> None: ... + @typing.overload + def __init__(self, k1: int, key2: int = ..., key3: int = ..., key4: int = ...) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def __hash__(self) -> int: ... + @staticmethod + def listToString(list: typing.Iterable[typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]], format: 'QKeySequence.SequenceFormat' = ...) -> str: ... + @staticmethod + def listFromString(str: typing.Optional[str], format: 'QKeySequence.SequenceFormat' = ...) -> typing.List['QKeySequence']: ... + @staticmethod + def keyBindings(key: 'QKeySequence.StandardKey') -> typing.List['QKeySequence']: ... + @staticmethod + def fromString(str: typing.Optional[str], format: 'QKeySequence.SequenceFormat' = ...) -> 'QKeySequence': ... + def toString(self, format: 'QKeySequence.SequenceFormat' = ...) -> str: ... + def swap(self, other: 'QKeySequence') -> None: ... + def isDetached(self) -> bool: ... + def __ge__(self, other: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> bool: ... + def __le__(self, other: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> bool: ... + def __gt__(self, other: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> bool: ... + def __lt__(self, ks: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __getitem__(self, i: int) -> int: ... + @staticmethod + def mnemonic(text: typing.Optional[str]) -> 'QKeySequence': ... + def matches(self, seq: typing.Union['QKeySequence', 'QKeySequence.StandardKey', typing.Optional[str], int]) -> 'QKeySequence.SequenceMatch': ... + def isEmpty(self) -> bool: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + + +class QMatrix4x4(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, values: typing.Sequence[float]) -> None: ... + @typing.overload + def __init__(self, m11: float, m12: float, m13: float, m14: float, m21: float, m22: float, m23: float, m24: float, m31: float, m32: float, m33: float, m34: float, m41: float, m42: float, m43: float, m44: float) -> None: ... + @typing.overload + def __init__(self, transform: 'QTransform') -> None: ... + @typing.overload + def __init__(self, a0: 'QMatrix4x4') -> None: ... + + def __truediv__(self, divisor: float) -> 'QMatrix4x4': ... + def __add__(self, m2: 'QMatrix4x4') -> 'QMatrix4x4': ... + def __sub__(self, m2: 'QMatrix4x4') -> 'QMatrix4x4': ... + @typing.overload + def __mul__(self, m2: 'QMatrix4x4') -> 'QMatrix4x4': ... + @typing.overload + def __mul__(self, vector: 'QVector3D') -> 'QVector3D': ... + @typing.overload + def __mul__(self, vector: 'QVector4D') -> 'QVector4D': ... + @typing.overload + def __mul__(self, point: QtCore.QPoint) -> QtCore.QPoint: ... + @typing.overload + def __mul__(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def __mul__(self, factor: float) -> 'QMatrix4x4': ... + def __rmul__(self, factor: float) -> 'QMatrix4x4': ... + def __matmul__(self, m2: 'QMatrix4x4') -> 'QMatrix4x4': ... + def __neg__(self) -> 'QMatrix4x4': ... + def isAffine(self) -> bool: ... + @typing.overload + def viewport(self, left: float, bottom: float, width: float, height: float, nearPlane: float = ..., farPlane: float = ...) -> None: ... + @typing.overload + def viewport(self, rect: QtCore.QRectF) -> None: ... + def mapVector(self, vector: 'QVector3D') -> 'QVector3D': ... + @typing.overload + def map(self, point: QtCore.QPoint) -> QtCore.QPoint: ... + @typing.overload + def map(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def map(self, point: 'QVector3D') -> 'QVector3D': ... + @typing.overload + def map(self, point: 'QVector4D') -> 'QVector4D': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __itruediv__(self, divisor: float) -> 'QMatrix4x4': ... + def __imatmul__(self, other: 'QMatrix4x4') -> 'QMatrix4x4': ... + @typing.overload + def __imul__(self, other: 'QMatrix4x4') -> 'QMatrix4x4': ... + @typing.overload + def __imul__(self, factor: float) -> 'QMatrix4x4': ... + def __isub__(self, other: 'QMatrix4x4') -> 'QMatrix4x4': ... + def __iadd__(self, other: 'QMatrix4x4') -> 'QMatrix4x4': ... + def fill(self, value: float) -> None: ... + def setToIdentity(self) -> None: ... + def isIdentity(self) -> bool: ... + def setRow(self, index: int, value: 'QVector4D') -> None: ... + def row(self, index: int) -> 'QVector4D': ... + def setColumn(self, index: int, value: 'QVector4D') -> None: ... + def column(self, index: int) -> 'QVector4D': ... + def __setitem__(self, a0: typing.Any, a1: float) -> None: ... + def __getitem__(self, a0: typing.Any) -> typing.Any: ... + def optimize(self) -> None: ... + def data(self) -> typing.List[float]: ... + @typing.overload + def mapRect(self, rect: QtCore.QRect) -> QtCore.QRect: ... + @typing.overload + def mapRect(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + @typing.overload + def toTransform(self) -> 'QTransform': ... + @typing.overload + def toTransform(self, distanceToPlane: float) -> 'QTransform': ... + def copyDataTo(self) -> typing.List[float]: ... + def lookAt(self, eye: 'QVector3D', center: 'QVector3D', up: 'QVector3D') -> None: ... + def perspective(self, angle: float, aspect: float, nearPlane: float, farPlane: float) -> None: ... + def frustum(self, left: float, right: float, bottom: float, top: float, nearPlane: float, farPlane: float) -> None: ... + @typing.overload + def ortho(self, rect: QtCore.QRect) -> None: ... + @typing.overload + def ortho(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def ortho(self, left: float, right: float, bottom: float, top: float, nearPlane: float, farPlane: float) -> None: ... + @typing.overload + def rotate(self, angle: float, vector: 'QVector3D') -> None: ... + @typing.overload + def rotate(self, angle: float, x: float, y: float, z: float = ...) -> None: ... + @typing.overload + def rotate(self, quaternion: 'QQuaternion') -> None: ... + @typing.overload + def translate(self, vector: 'QVector3D') -> None: ... + @typing.overload + def translate(self, x: float, y: float) -> None: ... + @typing.overload + def translate(self, x: float, y: float, z: float) -> None: ... + @typing.overload + def scale(self, vector: 'QVector3D') -> None: ... + @typing.overload + def scale(self, x: float, y: float) -> None: ... + @typing.overload + def scale(self, x: float, y: float, z: float) -> None: ... + @typing.overload + def scale(self, factor: float) -> None: ... + def normalMatrix(self) -> QMatrix3x3: ... + def transposed(self) -> 'QMatrix4x4': ... + def inverted(self) -> typing.Tuple['QMatrix4x4', typing.Optional[bool]]: ... + def determinant(self) -> float: ... + def __repr__(self) -> str: ... + + +class QMovie(QtCore.QObject): + + class CacheMode(int): + CacheNone = ... # type: QMovie.CacheMode + CacheAll = ... # type: QMovie.CacheMode + + class MovieState(int): + NotRunning = ... # type: QMovie.MovieState + Paused = ... # type: QMovie.MovieState + Running = ... # type: QMovie.MovieState + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QtCore.QIODevice], format: typing.Union[QtCore.QByteArray, bytes, bytearray] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: typing.Union[QtCore.QByteArray, bytes, bytearray] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def lastErrorString(self) -> str: ... + def lastError(self) -> QImageReader.ImageReaderError: ... + def stop(self) -> None: ... + def setPaused(self, paused: bool) -> None: ... + def jumpToNextFrame(self) -> bool: ... + def start(self) -> None: ... + frameChanged: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + updated: typing.ClassVar[QtCore.pyqtSignal] + resized: typing.ClassVar[QtCore.pyqtSignal] + started: typing.ClassVar[QtCore.pyqtSignal] + def setCacheMode(self, mode: 'QMovie.CacheMode') -> None: ... + def cacheMode(self) -> 'QMovie.CacheMode': ... + def setScaledSize(self, size: QtCore.QSize) -> None: ... + def scaledSize(self) -> QtCore.QSize: ... + def speed(self) -> int: ... + def setSpeed(self, percentSpeed: int) -> None: ... + def currentFrameNumber(self) -> int: ... + def nextFrameDelay(self) -> int: ... + def frameCount(self) -> int: ... + def loopCount(self) -> int: ... + def jumpToFrame(self, frameNumber: int) -> bool: ... + def isValid(self) -> bool: ... + def currentPixmap(self) -> QPixmap: ... + def currentImage(self) -> QImage: ... + def frameRect(self) -> QtCore.QRect: ... + def state(self) -> 'QMovie.MovieState': ... + def backgroundColor(self) -> QColor: ... + def setBackgroundColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + def format(self) -> QtCore.QByteArray: ... + def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def fileName(self) -> str: ... + def setFileName(self, fileName: typing.Optional[str]) -> None: ... + def device(self) -> typing.Optional[QtCore.QIODevice]: ... + def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + @staticmethod + def supportedFormats() -> typing.List[QtCore.QByteArray]: ... + + +class QSurface(PyQt5.sipsimplewrapper): + + class SurfaceType(int): + RasterSurface = ... # type: QSurface.SurfaceType + OpenGLSurface = ... # type: QSurface.SurfaceType + RasterGLSurface = ... # type: QSurface.SurfaceType + OpenVGSurface = ... # type: QSurface.SurfaceType + VulkanSurface = ... # type: QSurface.SurfaceType + MetalSurface = ... # type: QSurface.SurfaceType + + class SurfaceClass(int): + Window = ... # type: QSurface.SurfaceClass + Offscreen = ... # type: QSurface.SurfaceClass + + @typing.overload + def __init__(self, type: 'QSurface.SurfaceClass') -> None: ... + @typing.overload + def __init__(self, a0: 'QSurface') -> None: ... + + def supportsOpenGL(self) -> bool: ... + def size(self) -> QtCore.QSize: ... + def surfaceType(self) -> 'QSurface.SurfaceType': ... + def format(self) -> 'QSurfaceFormat': ... + def surfaceClass(self) -> 'QSurface.SurfaceClass': ... + + +class QOffscreenSurface(QtCore.QObject, QSurface): + + @typing.overload + def __init__(self, screen: typing.Optional['QScreen'] = ...) -> None: ... + @typing.overload + def __init__(self, screen: typing.Optional['QScreen'], parent: typing.Optional[QtCore.QObject]) -> None: ... + + def setNativeHandle(self, handle: typing.Optional[PyQt5.sip.voidptr]) -> None: ... + def nativeHandle(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + screenChanged: typing.ClassVar[QtCore.pyqtSignal] + def setScreen(self, screen: typing.Optional['QScreen']) -> None: ... + def screen(self) -> typing.Optional['QScreen']: ... + def size(self) -> QtCore.QSize: ... + def requestedFormat(self) -> 'QSurfaceFormat': ... + def format(self) -> 'QSurfaceFormat': ... + def setFormat(self, format: 'QSurfaceFormat') -> None: ... + def isValid(self) -> bool: ... + def destroy(self) -> None: ... + def create(self) -> None: ... + def surfaceType(self) -> QSurface.SurfaceType: ... + + +class QOpenGLBuffer(PyQt5.sipsimplewrapper): + + class RangeAccessFlag(int): + RangeRead = ... # type: QOpenGLBuffer.RangeAccessFlag + RangeWrite = ... # type: QOpenGLBuffer.RangeAccessFlag + RangeInvalidate = ... # type: QOpenGLBuffer.RangeAccessFlag + RangeInvalidateBuffer = ... # type: QOpenGLBuffer.RangeAccessFlag + RangeFlushExplicit = ... # type: QOpenGLBuffer.RangeAccessFlag + RangeUnsynchronized = ... # type: QOpenGLBuffer.RangeAccessFlag + + class Access(int): + ReadOnly = ... # type: QOpenGLBuffer.Access + WriteOnly = ... # type: QOpenGLBuffer.Access + ReadWrite = ... # type: QOpenGLBuffer.Access + + class UsagePattern(int): + StreamDraw = ... # type: QOpenGLBuffer.UsagePattern + StreamRead = ... # type: QOpenGLBuffer.UsagePattern + StreamCopy = ... # type: QOpenGLBuffer.UsagePattern + StaticDraw = ... # type: QOpenGLBuffer.UsagePattern + StaticRead = ... # type: QOpenGLBuffer.UsagePattern + StaticCopy = ... # type: QOpenGLBuffer.UsagePattern + DynamicDraw = ... # type: QOpenGLBuffer.UsagePattern + DynamicRead = ... # type: QOpenGLBuffer.UsagePattern + DynamicCopy = ... # type: QOpenGLBuffer.UsagePattern + + class Type(int): + VertexBuffer = ... # type: QOpenGLBuffer.Type + IndexBuffer = ... # type: QOpenGLBuffer.Type + PixelPackBuffer = ... # type: QOpenGLBuffer.Type + PixelUnpackBuffer = ... # type: QOpenGLBuffer.Type + + class RangeAccessFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QOpenGLBuffer.RangeAccessFlags', 'QOpenGLBuffer.RangeAccessFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QOpenGLBuffer.RangeAccessFlags', 'QOpenGLBuffer.RangeAccessFlag']) -> 'QOpenGLBuffer.RangeAccessFlags': ... + def __xor__(self, f: typing.Union['QOpenGLBuffer.RangeAccessFlags', 'QOpenGLBuffer.RangeAccessFlag']) -> 'QOpenGLBuffer.RangeAccessFlags': ... + def __ior__(self, f: typing.Union['QOpenGLBuffer.RangeAccessFlags', 'QOpenGLBuffer.RangeAccessFlag']) -> 'QOpenGLBuffer.RangeAccessFlags': ... + def __or__(self, f: typing.Union['QOpenGLBuffer.RangeAccessFlags', 'QOpenGLBuffer.RangeAccessFlag']) -> 'QOpenGLBuffer.RangeAccessFlags': ... + def __iand__(self, f: typing.Union['QOpenGLBuffer.RangeAccessFlags', 'QOpenGLBuffer.RangeAccessFlag']) -> 'QOpenGLBuffer.RangeAccessFlags': ... + def __and__(self, f: typing.Union['QOpenGLBuffer.RangeAccessFlags', 'QOpenGLBuffer.RangeAccessFlag']) -> 'QOpenGLBuffer.RangeAccessFlags': ... + def __invert__(self) -> 'QOpenGLBuffer.RangeAccessFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, type: 'QOpenGLBuffer.Type') -> None: ... + @typing.overload + def __init__(self, other: 'QOpenGLBuffer') -> None: ... + + def mapRange(self, offset: int, count: int, access: typing.Union['QOpenGLBuffer.RangeAccessFlags', 'QOpenGLBuffer.RangeAccessFlag']) -> typing.Optional[PyQt5.sip.voidptr]: ... + def unmap(self) -> bool: ... + def map(self, access: 'QOpenGLBuffer.Access') -> typing.Optional[PyQt5.sip.voidptr]: ... + @typing.overload + def allocate(self, data: typing.Optional[PyQt5.sip.voidptr], count: int) -> None: ... + @typing.overload + def allocate(self, count: int) -> None: ... + def write(self, offset: int, data: typing.Optional[PyQt5.sip.voidptr], count: int) -> None: ... + def read(self, offset: int, data: typing.Optional[PyQt5.sip.voidptr], count: int) -> bool: ... + def __len__(self) -> int: ... + def size(self) -> int: ... + def bufferId(self) -> int: ... + @typing.overload + def release(self) -> None: ... + @typing.overload + @staticmethod + def release(type: 'QOpenGLBuffer.Type') -> None: ... + def bind(self) -> bool: ... + def destroy(self) -> None: ... + def isCreated(self) -> bool: ... + def create(self) -> bool: ... + def setUsagePattern(self, value: 'QOpenGLBuffer.UsagePattern') -> None: ... + def usagePattern(self) -> 'QOpenGLBuffer.UsagePattern': ... + def type(self) -> 'QOpenGLBuffer.Type': ... + + +class QOpenGLContextGroup(QtCore.QObject): + + @staticmethod + def currentContextGroup() -> typing.Optional['QOpenGLContextGroup']: ... + def shares(self) -> typing.List['QOpenGLContext']: ... + + +class QOpenGLContext(QtCore.QObject): + + class OpenGLModuleType(int): + LibGL = ... # type: QOpenGLContext.OpenGLModuleType + LibGLES = ... # type: QOpenGLContext.OpenGLModuleType + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + @staticmethod + def globalShareContext() -> typing.Optional['QOpenGLContext']: ... + @staticmethod + def supportsThreadedOpenGL() -> bool: ... + def nativeHandle(self) -> typing.Any: ... + def setNativeHandle(self, handle: typing.Any) -> None: ... + def isOpenGLES(self) -> bool: ... + @staticmethod + def openGLModuleType() -> 'QOpenGLContext.OpenGLModuleType': ... + @staticmethod + def openGLModuleHandle() -> typing.Optional[PyQt5.sip.voidptr]: ... + def versionFunctions(self, versionProfile: typing.Optional['QOpenGLVersionProfile'] = ...) -> typing.Any: ... + aboutToBeDestroyed: typing.ClassVar[QtCore.pyqtSignal] + def hasExtension(self, extension: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def extensions(self) -> typing.Set[QtCore.QByteArray]: ... + @staticmethod + def areSharing(first: typing.Optional['QOpenGLContext'], second: typing.Optional['QOpenGLContext']) -> bool: ... + @staticmethod + def currentContext() -> typing.Optional['QOpenGLContext']: ... + def surface(self) -> typing.Optional[QSurface]: ... + def getProcAddress(self, procName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.Optional[PyQt5.sip.voidptr]: ... + def swapBuffers(self, surface: typing.Optional[QSurface]) -> None: ... + def doneCurrent(self) -> None: ... + def makeCurrent(self, surface: typing.Optional[QSurface]) -> bool: ... + def defaultFramebufferObject(self) -> int: ... + def screen(self) -> typing.Optional['QScreen']: ... + def shareGroup(self) -> typing.Optional[QOpenGLContextGroup]: ... + def shareContext(self) -> typing.Optional['QOpenGLContext']: ... + def format(self) -> 'QSurfaceFormat': ... + def isValid(self) -> bool: ... + def create(self) -> bool: ... + def setScreen(self, screen: typing.Optional['QScreen']) -> None: ... + def setShareContext(self, shareContext: typing.Optional['QOpenGLContext']) -> None: ... + def setFormat(self, format: 'QSurfaceFormat') -> None: ... + + +class QOpenGLVersionProfile(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, format: 'QSurfaceFormat') -> None: ... + @typing.overload + def __init__(self, other: 'QOpenGLVersionProfile') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def isValid(self) -> bool: ... + def isLegacyVersion(self) -> bool: ... + def hasProfiles(self) -> bool: ... + def setProfile(self, profile: 'QSurfaceFormat.OpenGLContextProfile') -> None: ... + def profile(self) -> 'QSurfaceFormat.OpenGLContextProfile': ... + def setVersion(self, majorVersion: int, minorVersion: int) -> None: ... + def version(self) -> typing.Tuple[int, int]: ... + + +class QOpenGLDebugMessage(PyQt5.sipsimplewrapper): + + class Severity(int): + InvalidSeverity = ... # type: QOpenGLDebugMessage.Severity + HighSeverity = ... # type: QOpenGLDebugMessage.Severity + MediumSeverity = ... # type: QOpenGLDebugMessage.Severity + LowSeverity = ... # type: QOpenGLDebugMessage.Severity + NotificationSeverity = ... # type: QOpenGLDebugMessage.Severity + AnySeverity = ... # type: QOpenGLDebugMessage.Severity + + class Type(int): + InvalidType = ... # type: QOpenGLDebugMessage.Type + ErrorType = ... # type: QOpenGLDebugMessage.Type + DeprecatedBehaviorType = ... # type: QOpenGLDebugMessage.Type + UndefinedBehaviorType = ... # type: QOpenGLDebugMessage.Type + PortabilityType = ... # type: QOpenGLDebugMessage.Type + PerformanceType = ... # type: QOpenGLDebugMessage.Type + OtherType = ... # type: QOpenGLDebugMessage.Type + MarkerType = ... # type: QOpenGLDebugMessage.Type + GroupPushType = ... # type: QOpenGLDebugMessage.Type + GroupPopType = ... # type: QOpenGLDebugMessage.Type + AnyType = ... # type: QOpenGLDebugMessage.Type + + class Source(int): + InvalidSource = ... # type: QOpenGLDebugMessage.Source + APISource = ... # type: QOpenGLDebugMessage.Source + WindowSystemSource = ... # type: QOpenGLDebugMessage.Source + ShaderCompilerSource = ... # type: QOpenGLDebugMessage.Source + ThirdPartySource = ... # type: QOpenGLDebugMessage.Source + ApplicationSource = ... # type: QOpenGLDebugMessage.Source + OtherSource = ... # type: QOpenGLDebugMessage.Source + AnySource = ... # type: QOpenGLDebugMessage.Source + + class Sources(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QOpenGLDebugMessage.Sources', 'QOpenGLDebugMessage.Source']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QOpenGLDebugMessage.Sources', 'QOpenGLDebugMessage.Source']) -> 'QOpenGLDebugMessage.Sources': ... + def __xor__(self, f: typing.Union['QOpenGLDebugMessage.Sources', 'QOpenGLDebugMessage.Source']) -> 'QOpenGLDebugMessage.Sources': ... + def __ior__(self, f: typing.Union['QOpenGLDebugMessage.Sources', 'QOpenGLDebugMessage.Source']) -> 'QOpenGLDebugMessage.Sources': ... + def __or__(self, f: typing.Union['QOpenGLDebugMessage.Sources', 'QOpenGLDebugMessage.Source']) -> 'QOpenGLDebugMessage.Sources': ... + def __iand__(self, f: typing.Union['QOpenGLDebugMessage.Sources', 'QOpenGLDebugMessage.Source']) -> 'QOpenGLDebugMessage.Sources': ... + def __and__(self, f: typing.Union['QOpenGLDebugMessage.Sources', 'QOpenGLDebugMessage.Source']) -> 'QOpenGLDebugMessage.Sources': ... + def __invert__(self) -> 'QOpenGLDebugMessage.Sources': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class Types(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QOpenGLDebugMessage.Types', 'QOpenGLDebugMessage.Type']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QOpenGLDebugMessage.Types', 'QOpenGLDebugMessage.Type']) -> 'QOpenGLDebugMessage.Types': ... + def __xor__(self, f: typing.Union['QOpenGLDebugMessage.Types', 'QOpenGLDebugMessage.Type']) -> 'QOpenGLDebugMessage.Types': ... + def __ior__(self, f: typing.Union['QOpenGLDebugMessage.Types', 'QOpenGLDebugMessage.Type']) -> 'QOpenGLDebugMessage.Types': ... + def __or__(self, f: typing.Union['QOpenGLDebugMessage.Types', 'QOpenGLDebugMessage.Type']) -> 'QOpenGLDebugMessage.Types': ... + def __iand__(self, f: typing.Union['QOpenGLDebugMessage.Types', 'QOpenGLDebugMessage.Type']) -> 'QOpenGLDebugMessage.Types': ... + def __and__(self, f: typing.Union['QOpenGLDebugMessage.Types', 'QOpenGLDebugMessage.Type']) -> 'QOpenGLDebugMessage.Types': ... + def __invert__(self) -> 'QOpenGLDebugMessage.Types': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class Severities(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QOpenGLDebugMessage.Severities', 'QOpenGLDebugMessage.Severity']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QOpenGLDebugMessage.Severities', 'QOpenGLDebugMessage.Severity']) -> 'QOpenGLDebugMessage.Severities': ... + def __xor__(self, f: typing.Union['QOpenGLDebugMessage.Severities', 'QOpenGLDebugMessage.Severity']) -> 'QOpenGLDebugMessage.Severities': ... + def __ior__(self, f: typing.Union['QOpenGLDebugMessage.Severities', 'QOpenGLDebugMessage.Severity']) -> 'QOpenGLDebugMessage.Severities': ... + def __or__(self, f: typing.Union['QOpenGLDebugMessage.Severities', 'QOpenGLDebugMessage.Severity']) -> 'QOpenGLDebugMessage.Severities': ... + def __iand__(self, f: typing.Union['QOpenGLDebugMessage.Severities', 'QOpenGLDebugMessage.Severity']) -> 'QOpenGLDebugMessage.Severities': ... + def __and__(self, f: typing.Union['QOpenGLDebugMessage.Severities', 'QOpenGLDebugMessage.Severity']) -> 'QOpenGLDebugMessage.Severities': ... + def __invert__(self) -> 'QOpenGLDebugMessage.Severities': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, debugMessage: 'QOpenGLDebugMessage') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @staticmethod + def createThirdPartyMessage(text: typing.Optional[str], id: int = ..., severity: 'QOpenGLDebugMessage.Severity' = ..., type: 'QOpenGLDebugMessage.Type' = ...) -> 'QOpenGLDebugMessage': ... + @staticmethod + def createApplicationMessage(text: typing.Optional[str], id: int = ..., severity: 'QOpenGLDebugMessage.Severity' = ..., type: 'QOpenGLDebugMessage.Type' = ...) -> 'QOpenGLDebugMessage': ... + def message(self) -> str: ... + def id(self) -> int: ... + def severity(self) -> 'QOpenGLDebugMessage.Severity': ... + def type(self) -> 'QOpenGLDebugMessage.Type': ... + def source(self) -> 'QOpenGLDebugMessage.Source': ... + def swap(self, debugMessage: 'QOpenGLDebugMessage') -> None: ... + + +class QOpenGLDebugLogger(QtCore.QObject): + + class LoggingMode(int): + AsynchronousLogging = ... # type: QOpenGLDebugLogger.LoggingMode + SynchronousLogging = ... # type: QOpenGLDebugLogger.LoggingMode + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + messageLogged: typing.ClassVar[QtCore.pyqtSignal] + def stopLogging(self) -> None: ... + def startLogging(self, loggingMode: 'QOpenGLDebugLogger.LoggingMode' = ...) -> None: ... + def logMessage(self, debugMessage: QOpenGLDebugMessage) -> None: ... + def loggedMessages(self) -> typing.List[QOpenGLDebugMessage]: ... + @typing.overload + def disableMessages(self, sources: typing.Union[QOpenGLDebugMessage.Sources, QOpenGLDebugMessage.Source] = ..., types: typing.Union[QOpenGLDebugMessage.Types, QOpenGLDebugMessage.Type] = ..., severities: typing.Union[QOpenGLDebugMessage.Severities, QOpenGLDebugMessage.Severity] = ...) -> None: ... + @typing.overload + def disableMessages(self, ids: typing.Iterable[int], sources: typing.Union[QOpenGLDebugMessage.Sources, QOpenGLDebugMessage.Source] = ..., types: typing.Union[QOpenGLDebugMessage.Types, QOpenGLDebugMessage.Type] = ...) -> None: ... + @typing.overload + def enableMessages(self, sources: typing.Union[QOpenGLDebugMessage.Sources, QOpenGLDebugMessage.Source] = ..., types: typing.Union[QOpenGLDebugMessage.Types, QOpenGLDebugMessage.Type] = ..., severities: typing.Union[QOpenGLDebugMessage.Severities, QOpenGLDebugMessage.Severity] = ...) -> None: ... + @typing.overload + def enableMessages(self, ids: typing.Iterable[int], sources: typing.Union[QOpenGLDebugMessage.Sources, QOpenGLDebugMessage.Source] = ..., types: typing.Union[QOpenGLDebugMessage.Types, QOpenGLDebugMessage.Type] = ...) -> None: ... + def popGroup(self) -> None: ... + def pushGroup(self, name: typing.Optional[str], id: int = ..., source: QOpenGLDebugMessage.Source = ...) -> None: ... + def maximumMessageLength(self) -> int: ... + def loggingMode(self) -> 'QOpenGLDebugLogger.LoggingMode': ... + def isLogging(self) -> bool: ... + def initialize(self) -> bool: ... + + +class QOpenGLFramebufferObject(PyQt5.sipsimplewrapper): + + class FramebufferRestorePolicy(int): + DontRestoreFramebufferBinding = ... # type: QOpenGLFramebufferObject.FramebufferRestorePolicy + RestoreFramebufferBindingToDefault = ... # type: QOpenGLFramebufferObject.FramebufferRestorePolicy + RestoreFrameBufferBinding = ... # type: QOpenGLFramebufferObject.FramebufferRestorePolicy + + class Attachment(int): + NoAttachment = ... # type: QOpenGLFramebufferObject.Attachment + CombinedDepthStencil = ... # type: QOpenGLFramebufferObject.Attachment + Depth = ... # type: QOpenGLFramebufferObject.Attachment + + @typing.overload + def __init__(self, size: QtCore.QSize, target: int = ...) -> None: ... + @typing.overload + def __init__(self, width: int, height: int, target: int = ...) -> None: ... + @typing.overload + def __init__(self, size: QtCore.QSize, attachment: 'QOpenGLFramebufferObject.Attachment', target: int = ..., internal_format: int = ...) -> None: ... + @typing.overload + def __init__(self, width: int, height: int, attachment: 'QOpenGLFramebufferObject.Attachment', target: int = ..., internal_format: int = ...) -> None: ... + @typing.overload + def __init__(self, size: QtCore.QSize, format: 'QOpenGLFramebufferObjectFormat') -> None: ... + @typing.overload + def __init__(self, width: int, height: int, format: 'QOpenGLFramebufferObjectFormat') -> None: ... + + def sizes(self) -> typing.List[QtCore.QSize]: ... + @typing.overload + def addColorAttachment(self, size: QtCore.QSize, internal_format: int = ...) -> None: ... + @typing.overload + def addColorAttachment(self, width: int, height: int, internal_format: int = ...) -> None: ... + @typing.overload + def takeTexture(self) -> int: ... + @typing.overload + def takeTexture(self, colorAttachmentIndex: int) -> int: ... + @typing.overload + @staticmethod + def blitFramebuffer(target: typing.Optional['QOpenGLFramebufferObject'], targetRect: QtCore.QRect, source: typing.Optional['QOpenGLFramebufferObject'], sourceRect: QtCore.QRect, buffers: int = ..., filter: int = ...) -> None: ... + @typing.overload + @staticmethod + def blitFramebuffer(target: typing.Optional['QOpenGLFramebufferObject'], source: typing.Optional['QOpenGLFramebufferObject'], buffers: int = ..., filter: int = ...) -> None: ... + @typing.overload + @staticmethod + def blitFramebuffer(target: typing.Optional['QOpenGLFramebufferObject'], targetRect: QtCore.QRect, source: typing.Optional['QOpenGLFramebufferObject'], sourceRect: QtCore.QRect, buffers: int, filter: int, readColorAttachmentIndex: int, drawColorAttachmentIndex: int) -> None: ... + @typing.overload + @staticmethod + def blitFramebuffer(target: typing.Optional['QOpenGLFramebufferObject'], targetRect: QtCore.QRect, source: typing.Optional['QOpenGLFramebufferObject'], sourceRect: QtCore.QRect, buffers: int, filter: int, readColorAttachmentIndex: int, drawColorAttachmentIndex: int, restorePolicy: 'QOpenGLFramebufferObject.FramebufferRestorePolicy') -> None: ... + @staticmethod + def hasOpenGLFramebufferBlit() -> bool: ... + @staticmethod + def hasOpenGLFramebufferObjects() -> bool: ... + @staticmethod + def bindDefault() -> bool: ... + def handle(self) -> int: ... + def setAttachment(self, attachment: 'QOpenGLFramebufferObject.Attachment') -> None: ... + def attachment(self) -> 'QOpenGLFramebufferObject.Attachment': ... + @typing.overload + def toImage(self) -> QImage: ... + @typing.overload + def toImage(self, flipped: bool) -> QImage: ... + @typing.overload + def toImage(self, flipped: bool, colorAttachmentIndex: int) -> QImage: ... + def size(self) -> QtCore.QSize: ... + def textures(self) -> typing.List[int]: ... + def texture(self) -> int: ... + def height(self) -> int: ... + def width(self) -> int: ... + def release(self) -> bool: ... + def bind(self) -> bool: ... + def isBound(self) -> bool: ... + def isValid(self) -> bool: ... + def format(self) -> 'QOpenGLFramebufferObjectFormat': ... + + +class QOpenGLFramebufferObjectFormat(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QOpenGLFramebufferObjectFormat') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def internalTextureFormat(self) -> int: ... + def setInternalTextureFormat(self, internalTextureFormat: int) -> None: ... + def textureTarget(self) -> int: ... + def setTextureTarget(self, target: int) -> None: ... + def attachment(self) -> QOpenGLFramebufferObject.Attachment: ... + def setAttachment(self, attachment: QOpenGLFramebufferObject.Attachment) -> None: ... + def mipmap(self) -> bool: ... + def setMipmap(self, enabled: bool) -> None: ... + def samples(self) -> int: ... + def setSamples(self, samples: int) -> None: ... + + +class QOpenGLPaintDevice(QPaintDevice): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, size: QtCore.QSize) -> None: ... + @typing.overload + def __init__(self, width: int, height: int) -> None: ... + + def metric(self, metric: QPaintDevice.PaintDeviceMetric) -> int: ... + def setDevicePixelRatio(self, devicePixelRatio: float) -> None: ... + def ensureActiveTarget(self) -> None: ... + def paintFlipped(self) -> bool: ... + def setPaintFlipped(self, flipped: bool) -> None: ... + def setDotsPerMeterY(self, a0: float) -> None: ... + def setDotsPerMeterX(self, a0: float) -> None: ... + def dotsPerMeterY(self) -> float: ... + def dotsPerMeterX(self) -> float: ... + def setSize(self, size: QtCore.QSize) -> None: ... + def size(self) -> QtCore.QSize: ... + def context(self) -> typing.Optional[QOpenGLContext]: ... + def paintEngine(self) -> typing.Optional['QPaintEngine']: ... + + +class QOpenGLPixelTransferOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QOpenGLPixelTransferOptions') -> None: ... + + def isSwapBytesEnabled(self) -> bool: ... + def setSwapBytesEnabled(self, swapBytes: bool) -> None: ... + def isLeastSignificantBitFirst(self) -> bool: ... + def setLeastSignificantByteFirst(self, lsbFirst: bool) -> None: ... + def rowLength(self) -> int: ... + def setRowLength(self, rowLength: int) -> None: ... + def imageHeight(self) -> int: ... + def setImageHeight(self, imageHeight: int) -> None: ... + def skipPixels(self) -> int: ... + def setSkipPixels(self, skipPixels: int) -> None: ... + def skipRows(self) -> int: ... + def setSkipRows(self, skipRows: int) -> None: ... + def skipImages(self) -> int: ... + def setSkipImages(self, skipImages: int) -> None: ... + def alignment(self) -> int: ... + def setAlignment(self, alignment: int) -> None: ... + def swap(self, other: 'QOpenGLPixelTransferOptions') -> None: ... + + +class QOpenGLShader(QtCore.QObject): + + class ShaderTypeBit(int): + Vertex = ... # type: QOpenGLShader.ShaderTypeBit + Fragment = ... # type: QOpenGLShader.ShaderTypeBit + Geometry = ... # type: QOpenGLShader.ShaderTypeBit + TessellationControl = ... # type: QOpenGLShader.ShaderTypeBit + TessellationEvaluation = ... # type: QOpenGLShader.ShaderTypeBit + Compute = ... # type: QOpenGLShader.ShaderTypeBit + + class ShaderType(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit']) -> 'QOpenGLShader.ShaderType': ... + def __xor__(self, f: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit']) -> 'QOpenGLShader.ShaderType': ... + def __ior__(self, f: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit']) -> 'QOpenGLShader.ShaderType': ... + def __or__(self, f: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit']) -> 'QOpenGLShader.ShaderType': ... + def __iand__(self, f: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit']) -> 'QOpenGLShader.ShaderType': ... + def __and__(self, f: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit']) -> 'QOpenGLShader.ShaderType': ... + def __invert__(self) -> 'QOpenGLShader.ShaderType': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, type: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit'], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + @staticmethod + def hasOpenGLShaders(type: typing.Union['QOpenGLShader.ShaderType', 'QOpenGLShader.ShaderTypeBit'], context: typing.Optional[QOpenGLContext] = ...) -> bool: ... + def shaderId(self) -> int: ... + def log(self) -> str: ... + def isCompiled(self) -> bool: ... + def sourceCode(self) -> QtCore.QByteArray: ... + def compileSourceFile(self, fileName: typing.Optional[str]) -> bool: ... + @typing.overload + def compileSourceCode(self, source: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + @typing.overload + def compileSourceCode(self, source: typing.Optional[str]) -> bool: ... + def shaderType(self) -> 'QOpenGLShader.ShaderType': ... + + +class QOpenGLShaderProgram(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def addCacheableShaderFromSourceFile(self, type: typing.Union[QOpenGLShader.ShaderType, QOpenGLShader.ShaderTypeBit], fileName: typing.Optional[str]) -> bool: ... + @typing.overload + def addCacheableShaderFromSourceCode(self, type: typing.Union[QOpenGLShader.ShaderType, QOpenGLShader.ShaderTypeBit], source: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + @typing.overload + def addCacheableShaderFromSourceCode(self, type: typing.Union[QOpenGLShader.ShaderType, QOpenGLShader.ShaderTypeBit], source: typing.Optional[str]) -> bool: ... + def create(self) -> bool: ... + def defaultInnerTessellationLevels(self) -> typing.List[float]: ... + def setDefaultInnerTessellationLevels(self, levels: typing.Iterable[float]) -> None: ... + def defaultOuterTessellationLevels(self) -> typing.List[float]: ... + def setDefaultOuterTessellationLevels(self, levels: typing.Iterable[float]) -> None: ... + def patchVertexCount(self) -> int: ... + def setPatchVertexCount(self, count: int) -> None: ... + def maxGeometryOutputVertices(self) -> int: ... + @staticmethod + def hasOpenGLShaderPrograms(context: typing.Optional[QOpenGLContext] = ...) -> bool: ... + @typing.overload + def setUniformValueArray(self, location: int, values: PYQT_SHADER_UNIFORM_VALUE_ARRAY) -> None: ... + @typing.overload + def setUniformValueArray(self, name: typing.Optional[str], values: PYQT_SHADER_UNIFORM_VALUE_ARRAY) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: int) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: float) -> None: ... + @typing.overload + def setUniformValue(self, location: int, x: float, y: float) -> None: ... + @typing.overload + def setUniformValue(self, location: int, x: float, y: float, z: float) -> None: ... + @typing.overload + def setUniformValue(self, location: int, x: float, y: float, z: float, w: float) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: 'QVector2D') -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: 'QVector3D') -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: 'QVector4D') -> None: ... + @typing.overload + def setUniformValue(self, location: int, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def setUniformValue(self, location: int, point: QtCore.QPoint) -> None: ... + @typing.overload + def setUniformValue(self, location: int, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setUniformValue(self, location: int, size: QtCore.QSize) -> None: ... + @typing.overload + def setUniformValue(self, location: int, size: QtCore.QSizeF) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix2x2) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix2x3) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix2x4) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix3x2) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix3x3) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix3x4) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix4x2) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix4x3) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: QMatrix4x4) -> None: ... + @typing.overload + def setUniformValue(self, location: int, value: 'QTransform') -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: int) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: float) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], x: float, y: float) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], x: float, y: float, z: float) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], x: float, y: float, z: float, w: float) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: 'QVector2D') -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: 'QVector3D') -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: 'QVector4D') -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], point: QtCore.QPoint) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], size: QtCore.QSize) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], size: QtCore.QSizeF) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix2x2) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix2x3) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix2x4) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix3x2) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix3x3) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix3x4) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix4x2) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix4x3) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: QMatrix4x4) -> None: ... + @typing.overload + def setUniformValue(self, name: typing.Optional[str], value: 'QTransform') -> None: ... + @typing.overload + def uniformLocation(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> int: ... + @typing.overload + def uniformLocation(self, name: typing.Optional[str]) -> int: ... + @typing.overload + def disableAttributeArray(self, location: int) -> None: ... + @typing.overload + def disableAttributeArray(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def enableAttributeArray(self, location: int) -> None: ... + @typing.overload + def enableAttributeArray(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def setAttributeBuffer(self, location: int, type: int, offset: int, tupleSize: int, stride: int = ...) -> None: ... + @typing.overload + def setAttributeBuffer(self, name: typing.Optional[str], type: int, offset: int, tupleSize: int, stride: int = ...) -> None: ... + @typing.overload + def setAttributeArray(self, location: int, values: PYQT_SHADER_ATTRIBUTE_ARRAY) -> None: ... + @typing.overload + def setAttributeArray(self, name: typing.Optional[str], values: PYQT_SHADER_ATTRIBUTE_ARRAY) -> None: ... + @typing.overload + def setAttributeValue(self, location: int, value: float) -> None: ... + @typing.overload + def setAttributeValue(self, location: int, x: float, y: float) -> None: ... + @typing.overload + def setAttributeValue(self, location: int, x: float, y: float, z: float) -> None: ... + @typing.overload + def setAttributeValue(self, location: int, x: float, y: float, z: float, w: float) -> None: ... + @typing.overload + def setAttributeValue(self, location: int, value: 'QVector2D') -> None: ... + @typing.overload + def setAttributeValue(self, location: int, value: 'QVector3D') -> None: ... + @typing.overload + def setAttributeValue(self, location: int, value: 'QVector4D') -> None: ... + @typing.overload + def setAttributeValue(self, location: int, value: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def setAttributeValue(self, name: typing.Optional[str], value: float) -> None: ... + @typing.overload + def setAttributeValue(self, name: typing.Optional[str], x: float, y: float) -> None: ... + @typing.overload + def setAttributeValue(self, name: typing.Optional[str], x: float, y: float, z: float) -> None: ... + @typing.overload + def setAttributeValue(self, name: typing.Optional[str], x: float, y: float, z: float, w: float) -> None: ... + @typing.overload + def setAttributeValue(self, name: typing.Optional[str], value: 'QVector2D') -> None: ... + @typing.overload + def setAttributeValue(self, name: typing.Optional[str], value: 'QVector3D') -> None: ... + @typing.overload + def setAttributeValue(self, name: typing.Optional[str], value: 'QVector4D') -> None: ... + @typing.overload + def setAttributeValue(self, name: typing.Optional[str], value: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def attributeLocation(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> int: ... + @typing.overload + def attributeLocation(self, name: typing.Optional[str]) -> int: ... + @typing.overload + def bindAttributeLocation(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray], location: int) -> None: ... + @typing.overload + def bindAttributeLocation(self, name: typing.Optional[str], location: int) -> None: ... + def programId(self) -> int: ... + def release(self) -> None: ... + def bind(self) -> bool: ... + def log(self) -> str: ... + def isLinked(self) -> bool: ... + def link(self) -> bool: ... + def removeAllShaders(self) -> None: ... + def addShaderFromSourceFile(self, type: typing.Union[QOpenGLShader.ShaderType, QOpenGLShader.ShaderTypeBit], fileName: typing.Optional[str]) -> bool: ... + @typing.overload + def addShaderFromSourceCode(self, type: typing.Union[QOpenGLShader.ShaderType, QOpenGLShader.ShaderTypeBit], source: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + @typing.overload + def addShaderFromSourceCode(self, type: typing.Union[QOpenGLShader.ShaderType, QOpenGLShader.ShaderTypeBit], source: typing.Optional[str]) -> bool: ... + def shaders(self) -> typing.List[QOpenGLShader]: ... + def removeShader(self, shader: typing.Optional[QOpenGLShader]) -> None: ... + def addShader(self, shader: typing.Optional[QOpenGLShader]) -> bool: ... + + +class QOpenGLTexture(PyQt5.sipsimplewrapper): + + class ComparisonMode(int): + CompareRefToTexture = ... # type: QOpenGLTexture.ComparisonMode + CompareNone = ... # type: QOpenGLTexture.ComparisonMode + + class ComparisonFunction(int): + CompareLessEqual = ... # type: QOpenGLTexture.ComparisonFunction + CompareGreaterEqual = ... # type: QOpenGLTexture.ComparisonFunction + CompareLess = ... # type: QOpenGLTexture.ComparisonFunction + CompareGreater = ... # type: QOpenGLTexture.ComparisonFunction + CompareEqual = ... # type: QOpenGLTexture.ComparisonFunction + CommpareNotEqual = ... # type: QOpenGLTexture.ComparisonFunction + CompareAlways = ... # type: QOpenGLTexture.ComparisonFunction + CompareNever = ... # type: QOpenGLTexture.ComparisonFunction + + class CoordinateDirection(int): + DirectionS = ... # type: QOpenGLTexture.CoordinateDirection + DirectionT = ... # type: QOpenGLTexture.CoordinateDirection + DirectionR = ... # type: QOpenGLTexture.CoordinateDirection + + class WrapMode(int): + Repeat = ... # type: QOpenGLTexture.WrapMode + MirroredRepeat = ... # type: QOpenGLTexture.WrapMode + ClampToEdge = ... # type: QOpenGLTexture.WrapMode + ClampToBorder = ... # type: QOpenGLTexture.WrapMode + + class Filter(int): + Nearest = ... # type: QOpenGLTexture.Filter + Linear = ... # type: QOpenGLTexture.Filter + NearestMipMapNearest = ... # type: QOpenGLTexture.Filter + NearestMipMapLinear = ... # type: QOpenGLTexture.Filter + LinearMipMapNearest = ... # type: QOpenGLTexture.Filter + LinearMipMapLinear = ... # type: QOpenGLTexture.Filter + + class DepthStencilMode(int): + DepthMode = ... # type: QOpenGLTexture.DepthStencilMode + StencilMode = ... # type: QOpenGLTexture.DepthStencilMode + + class SwizzleValue(int): + RedValue = ... # type: QOpenGLTexture.SwizzleValue + GreenValue = ... # type: QOpenGLTexture.SwizzleValue + BlueValue = ... # type: QOpenGLTexture.SwizzleValue + AlphaValue = ... # type: QOpenGLTexture.SwizzleValue + ZeroValue = ... # type: QOpenGLTexture.SwizzleValue + OneValue = ... # type: QOpenGLTexture.SwizzleValue + + class SwizzleComponent(int): + SwizzleRed = ... # type: QOpenGLTexture.SwizzleComponent + SwizzleGreen = ... # type: QOpenGLTexture.SwizzleComponent + SwizzleBlue = ... # type: QOpenGLTexture.SwizzleComponent + SwizzleAlpha = ... # type: QOpenGLTexture.SwizzleComponent + + class Feature(int): + ImmutableStorage = ... # type: QOpenGLTexture.Feature + ImmutableMultisampleStorage = ... # type: QOpenGLTexture.Feature + TextureRectangle = ... # type: QOpenGLTexture.Feature + TextureArrays = ... # type: QOpenGLTexture.Feature + Texture3D = ... # type: QOpenGLTexture.Feature + TextureMultisample = ... # type: QOpenGLTexture.Feature + TextureBuffer = ... # type: QOpenGLTexture.Feature + TextureCubeMapArrays = ... # type: QOpenGLTexture.Feature + Swizzle = ... # type: QOpenGLTexture.Feature + StencilTexturing = ... # type: QOpenGLTexture.Feature + AnisotropicFiltering = ... # type: QOpenGLTexture.Feature + NPOTTextures = ... # type: QOpenGLTexture.Feature + NPOTTextureRepeat = ... # type: QOpenGLTexture.Feature + Texture1D = ... # type: QOpenGLTexture.Feature + TextureComparisonOperators = ... # type: QOpenGLTexture.Feature + TextureMipMapLevel = ... # type: QOpenGLTexture.Feature + + class PixelType(int): + NoPixelType = ... # type: QOpenGLTexture.PixelType + Int8 = ... # type: QOpenGLTexture.PixelType + UInt8 = ... # type: QOpenGLTexture.PixelType + Int16 = ... # type: QOpenGLTexture.PixelType + UInt16 = ... # type: QOpenGLTexture.PixelType + Int32 = ... # type: QOpenGLTexture.PixelType + UInt32 = ... # type: QOpenGLTexture.PixelType + Float16 = ... # type: QOpenGLTexture.PixelType + Float16OES = ... # type: QOpenGLTexture.PixelType + Float32 = ... # type: QOpenGLTexture.PixelType + UInt32_RGB9_E5 = ... # type: QOpenGLTexture.PixelType + UInt32_RG11B10F = ... # type: QOpenGLTexture.PixelType + UInt8_RG3B2 = ... # type: QOpenGLTexture.PixelType + UInt8_RG3B2_Rev = ... # type: QOpenGLTexture.PixelType + UInt16_RGB5A1 = ... # type: QOpenGLTexture.PixelType + UInt16_RGB5A1_Rev = ... # type: QOpenGLTexture.PixelType + UInt16_R5G6B5 = ... # type: QOpenGLTexture.PixelType + UInt16_R5G6B5_Rev = ... # type: QOpenGLTexture.PixelType + UInt16_RGBA4 = ... # type: QOpenGLTexture.PixelType + UInt16_RGBA4_Rev = ... # type: QOpenGLTexture.PixelType + UInt32_RGB10A2 = ... # type: QOpenGLTexture.PixelType + UInt32_RGB10A2_Rev = ... # type: QOpenGLTexture.PixelType + UInt32_RGBA8 = ... # type: QOpenGLTexture.PixelType + UInt32_RGBA8_Rev = ... # type: QOpenGLTexture.PixelType + UInt32_D24S8 = ... # type: QOpenGLTexture.PixelType + Float32_D32_UInt32_S8_X24 = ... # type: QOpenGLTexture.PixelType + + class PixelFormat(int): + NoSourceFormat = ... # type: QOpenGLTexture.PixelFormat + Red = ... # type: QOpenGLTexture.PixelFormat + RG = ... # type: QOpenGLTexture.PixelFormat + RGB = ... # type: QOpenGLTexture.PixelFormat + BGR = ... # type: QOpenGLTexture.PixelFormat + RGBA = ... # type: QOpenGLTexture.PixelFormat + BGRA = ... # type: QOpenGLTexture.PixelFormat + Red_Integer = ... # type: QOpenGLTexture.PixelFormat + RG_Integer = ... # type: QOpenGLTexture.PixelFormat + RGB_Integer = ... # type: QOpenGLTexture.PixelFormat + BGR_Integer = ... # type: QOpenGLTexture.PixelFormat + RGBA_Integer = ... # type: QOpenGLTexture.PixelFormat + BGRA_Integer = ... # type: QOpenGLTexture.PixelFormat + Depth = ... # type: QOpenGLTexture.PixelFormat + DepthStencil = ... # type: QOpenGLTexture.PixelFormat + Alpha = ... # type: QOpenGLTexture.PixelFormat + Luminance = ... # type: QOpenGLTexture.PixelFormat + LuminanceAlpha = ... # type: QOpenGLTexture.PixelFormat + Stencil = ... # type: QOpenGLTexture.PixelFormat + + class CubeMapFace(int): + CubeMapPositiveX = ... # type: QOpenGLTexture.CubeMapFace + CubeMapNegativeX = ... # type: QOpenGLTexture.CubeMapFace + CubeMapPositiveY = ... # type: QOpenGLTexture.CubeMapFace + CubeMapNegativeY = ... # type: QOpenGLTexture.CubeMapFace + CubeMapPositiveZ = ... # type: QOpenGLTexture.CubeMapFace + CubeMapNegativeZ = ... # type: QOpenGLTexture.CubeMapFace + + class TextureFormat(int): + NoFormat = ... # type: QOpenGLTexture.TextureFormat + R8_UNorm = ... # type: QOpenGLTexture.TextureFormat + RG8_UNorm = ... # type: QOpenGLTexture.TextureFormat + RGB8_UNorm = ... # type: QOpenGLTexture.TextureFormat + RGBA8_UNorm = ... # type: QOpenGLTexture.TextureFormat + R16_UNorm = ... # type: QOpenGLTexture.TextureFormat + RG16_UNorm = ... # type: QOpenGLTexture.TextureFormat + RGB16_UNorm = ... # type: QOpenGLTexture.TextureFormat + RGBA16_UNorm = ... # type: QOpenGLTexture.TextureFormat + R8_SNorm = ... # type: QOpenGLTexture.TextureFormat + RG8_SNorm = ... # type: QOpenGLTexture.TextureFormat + RGB8_SNorm = ... # type: QOpenGLTexture.TextureFormat + RGBA8_SNorm = ... # type: QOpenGLTexture.TextureFormat + R16_SNorm = ... # type: QOpenGLTexture.TextureFormat + RG16_SNorm = ... # type: QOpenGLTexture.TextureFormat + RGB16_SNorm = ... # type: QOpenGLTexture.TextureFormat + RGBA16_SNorm = ... # type: QOpenGLTexture.TextureFormat + R8U = ... # type: QOpenGLTexture.TextureFormat + RG8U = ... # type: QOpenGLTexture.TextureFormat + RGB8U = ... # type: QOpenGLTexture.TextureFormat + RGBA8U = ... # type: QOpenGLTexture.TextureFormat + R16U = ... # type: QOpenGLTexture.TextureFormat + RG16U = ... # type: QOpenGLTexture.TextureFormat + RGB16U = ... # type: QOpenGLTexture.TextureFormat + RGBA16U = ... # type: QOpenGLTexture.TextureFormat + R32U = ... # type: QOpenGLTexture.TextureFormat + RG32U = ... # type: QOpenGLTexture.TextureFormat + RGB32U = ... # type: QOpenGLTexture.TextureFormat + RGBA32U = ... # type: QOpenGLTexture.TextureFormat + R8I = ... # type: QOpenGLTexture.TextureFormat + RG8I = ... # type: QOpenGLTexture.TextureFormat + RGB8I = ... # type: QOpenGLTexture.TextureFormat + RGBA8I = ... # type: QOpenGLTexture.TextureFormat + R16I = ... # type: QOpenGLTexture.TextureFormat + RG16I = ... # type: QOpenGLTexture.TextureFormat + RGB16I = ... # type: QOpenGLTexture.TextureFormat + RGBA16I = ... # type: QOpenGLTexture.TextureFormat + R32I = ... # type: QOpenGLTexture.TextureFormat + RG32I = ... # type: QOpenGLTexture.TextureFormat + RGB32I = ... # type: QOpenGLTexture.TextureFormat + RGBA32I = ... # type: QOpenGLTexture.TextureFormat + R16F = ... # type: QOpenGLTexture.TextureFormat + RG16F = ... # type: QOpenGLTexture.TextureFormat + RGB16F = ... # type: QOpenGLTexture.TextureFormat + RGBA16F = ... # type: QOpenGLTexture.TextureFormat + R32F = ... # type: QOpenGLTexture.TextureFormat + RG32F = ... # type: QOpenGLTexture.TextureFormat + RGB32F = ... # type: QOpenGLTexture.TextureFormat + RGBA32F = ... # type: QOpenGLTexture.TextureFormat + RGB9E5 = ... # type: QOpenGLTexture.TextureFormat + RG11B10F = ... # type: QOpenGLTexture.TextureFormat + RG3B2 = ... # type: QOpenGLTexture.TextureFormat + R5G6B5 = ... # type: QOpenGLTexture.TextureFormat + RGB5A1 = ... # type: QOpenGLTexture.TextureFormat + RGBA4 = ... # type: QOpenGLTexture.TextureFormat + RGB10A2 = ... # type: QOpenGLTexture.TextureFormat + D16 = ... # type: QOpenGLTexture.TextureFormat + D24 = ... # type: QOpenGLTexture.TextureFormat + D24S8 = ... # type: QOpenGLTexture.TextureFormat + D32 = ... # type: QOpenGLTexture.TextureFormat + D32F = ... # type: QOpenGLTexture.TextureFormat + D32FS8X24 = ... # type: QOpenGLTexture.TextureFormat + RGB_DXT1 = ... # type: QOpenGLTexture.TextureFormat + RGBA_DXT1 = ... # type: QOpenGLTexture.TextureFormat + RGBA_DXT3 = ... # type: QOpenGLTexture.TextureFormat + RGBA_DXT5 = ... # type: QOpenGLTexture.TextureFormat + R_ATI1N_UNorm = ... # type: QOpenGLTexture.TextureFormat + R_ATI1N_SNorm = ... # type: QOpenGLTexture.TextureFormat + RG_ATI2N_UNorm = ... # type: QOpenGLTexture.TextureFormat + RG_ATI2N_SNorm = ... # type: QOpenGLTexture.TextureFormat + RGB_BP_UNSIGNED_FLOAT = ... # type: QOpenGLTexture.TextureFormat + RGB_BP_SIGNED_FLOAT = ... # type: QOpenGLTexture.TextureFormat + RGB_BP_UNorm = ... # type: QOpenGLTexture.TextureFormat + SRGB8 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8 = ... # type: QOpenGLTexture.TextureFormat + SRGB_DXT1 = ... # type: QOpenGLTexture.TextureFormat + SRGB_Alpha_DXT1 = ... # type: QOpenGLTexture.TextureFormat + SRGB_Alpha_DXT3 = ... # type: QOpenGLTexture.TextureFormat + SRGB_Alpha_DXT5 = ... # type: QOpenGLTexture.TextureFormat + SRGB_BP_UNorm = ... # type: QOpenGLTexture.TextureFormat + DepthFormat = ... # type: QOpenGLTexture.TextureFormat + AlphaFormat = ... # type: QOpenGLTexture.TextureFormat + RGBFormat = ... # type: QOpenGLTexture.TextureFormat + RGBAFormat = ... # type: QOpenGLTexture.TextureFormat + LuminanceFormat = ... # type: QOpenGLTexture.TextureFormat + LuminanceAlphaFormat = ... # type: QOpenGLTexture.TextureFormat + S8 = ... # type: QOpenGLTexture.TextureFormat + R11_EAC_UNorm = ... # type: QOpenGLTexture.TextureFormat + R11_EAC_SNorm = ... # type: QOpenGLTexture.TextureFormat + RG11_EAC_UNorm = ... # type: QOpenGLTexture.TextureFormat + RG11_EAC_SNorm = ... # type: QOpenGLTexture.TextureFormat + RGB8_ETC2 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_ETC2 = ... # type: QOpenGLTexture.TextureFormat + RGB8_PunchThrough_Alpha1_ETC2 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_PunchThrough_Alpha1_ETC2 = ... # type: QOpenGLTexture.TextureFormat + RGBA8_ETC2_EAC = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ETC2_EAC = ... # type: QOpenGLTexture.TextureFormat + RGB8_ETC1 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_4x4 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_5x4 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_5x5 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_6x5 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_6x6 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_8x5 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_8x6 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_8x8 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_10x5 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_10x6 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_10x8 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_10x10 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_12x10 = ... # type: QOpenGLTexture.TextureFormat + RGBA_ASTC_12x12 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_4x4 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_5x4 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_5x5 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_6x5 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_6x6 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_8x5 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_8x6 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_8x8 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_10x5 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_10x6 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_10x8 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_10x10 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_12x10 = ... # type: QOpenGLTexture.TextureFormat + SRGB8_Alpha8_ASTC_12x12 = ... # type: QOpenGLTexture.TextureFormat + + class TextureUnitReset(int): + ResetTextureUnit = ... # type: QOpenGLTexture.TextureUnitReset + DontResetTextureUnit = ... # type: QOpenGLTexture.TextureUnitReset + + class MipMapGeneration(int): + GenerateMipMaps = ... # type: QOpenGLTexture.MipMapGeneration + DontGenerateMipMaps = ... # type: QOpenGLTexture.MipMapGeneration + + class BindingTarget(int): + BindingTarget1D = ... # type: QOpenGLTexture.BindingTarget + BindingTarget1DArray = ... # type: QOpenGLTexture.BindingTarget + BindingTarget2D = ... # type: QOpenGLTexture.BindingTarget + BindingTarget2DArray = ... # type: QOpenGLTexture.BindingTarget + BindingTarget3D = ... # type: QOpenGLTexture.BindingTarget + BindingTargetCubeMap = ... # type: QOpenGLTexture.BindingTarget + BindingTargetCubeMapArray = ... # type: QOpenGLTexture.BindingTarget + BindingTarget2DMultisample = ... # type: QOpenGLTexture.BindingTarget + BindingTarget2DMultisampleArray = ... # type: QOpenGLTexture.BindingTarget + BindingTargetRectangle = ... # type: QOpenGLTexture.BindingTarget + BindingTargetBuffer = ... # type: QOpenGLTexture.BindingTarget + + class Target(int): + Target1D = ... # type: QOpenGLTexture.Target + Target1DArray = ... # type: QOpenGLTexture.Target + Target2D = ... # type: QOpenGLTexture.Target + Target2DArray = ... # type: QOpenGLTexture.Target + Target3D = ... # type: QOpenGLTexture.Target + TargetCubeMap = ... # type: QOpenGLTexture.Target + TargetCubeMapArray = ... # type: QOpenGLTexture.Target + Target2DMultisample = ... # type: QOpenGLTexture.Target + Target2DMultisampleArray = ... # type: QOpenGLTexture.Target + TargetRectangle = ... # type: QOpenGLTexture.Target + TargetBuffer = ... # type: QOpenGLTexture.Target + + class Features(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QOpenGLTexture.Features', 'QOpenGLTexture.Feature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QOpenGLTexture.Features', 'QOpenGLTexture.Feature']) -> 'QOpenGLTexture.Features': ... + def __xor__(self, f: typing.Union['QOpenGLTexture.Features', 'QOpenGLTexture.Feature']) -> 'QOpenGLTexture.Features': ... + def __ior__(self, f: typing.Union['QOpenGLTexture.Features', 'QOpenGLTexture.Feature']) -> 'QOpenGLTexture.Features': ... + def __or__(self, f: typing.Union['QOpenGLTexture.Features', 'QOpenGLTexture.Feature']) -> 'QOpenGLTexture.Features': ... + def __iand__(self, f: typing.Union['QOpenGLTexture.Features', 'QOpenGLTexture.Feature']) -> 'QOpenGLTexture.Features': ... + def __and__(self, f: typing.Union['QOpenGLTexture.Features', 'QOpenGLTexture.Feature']) -> 'QOpenGLTexture.Features': ... + def __invert__(self) -> 'QOpenGLTexture.Features': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, target: 'QOpenGLTexture.Target') -> None: ... + @typing.overload + def __init__(self, image: QImage, genMipMaps: 'QOpenGLTexture.MipMapGeneration' = ...) -> None: ... + + def comparisonMode(self) -> 'QOpenGLTexture.ComparisonMode': ... + def setComparisonMode(self, mode: 'QOpenGLTexture.ComparisonMode') -> None: ... + def comparisonFunction(self) -> 'QOpenGLTexture.ComparisonFunction': ... + def setComparisonFunction(self, function: 'QOpenGLTexture.ComparisonFunction') -> None: ... + def isFixedSamplePositions(self) -> bool: ... + def setFixedSamplePositions(self, fixed: bool) -> None: ... + def samples(self) -> int: ... + def setSamples(self, samples: int) -> None: ... + def target(self) -> 'QOpenGLTexture.Target': ... + def levelofDetailBias(self) -> float: ... + def setLevelofDetailBias(self, bias: float) -> None: ... + def levelOfDetailRange(self) -> typing.Tuple[float, float]: ... + def setLevelOfDetailRange(self, min: float, max: float) -> None: ... + def maximumLevelOfDetail(self) -> float: ... + def setMaximumLevelOfDetail(self, value: float) -> None: ... + def minimumLevelOfDetail(self) -> float: ... + def setMinimumLevelOfDetail(self, value: float) -> None: ... + def borderColor(self) -> QColor: ... + def setBorderColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + def wrapMode(self, direction: 'QOpenGLTexture.CoordinateDirection') -> 'QOpenGLTexture.WrapMode': ... + @typing.overload + def setWrapMode(self, mode: 'QOpenGLTexture.WrapMode') -> None: ... + @typing.overload + def setWrapMode(self, direction: 'QOpenGLTexture.CoordinateDirection', mode: 'QOpenGLTexture.WrapMode') -> None: ... + def maximumAnisotropy(self) -> float: ... + def setMaximumAnisotropy(self, anisotropy: float) -> None: ... + def minMagFilters(self) -> typing.Tuple['QOpenGLTexture.Filter', 'QOpenGLTexture.Filter']: ... + def setMinMagFilters(self, minificationFilter: 'QOpenGLTexture.Filter', magnificationFilter: 'QOpenGLTexture.Filter') -> None: ... + def magnificationFilter(self) -> 'QOpenGLTexture.Filter': ... + def setMagnificationFilter(self, filter: 'QOpenGLTexture.Filter') -> None: ... + def minificationFilter(self) -> 'QOpenGLTexture.Filter': ... + def setMinificationFilter(self, filter: 'QOpenGLTexture.Filter') -> None: ... + def depthStencilMode(self) -> 'QOpenGLTexture.DepthStencilMode': ... + def setDepthStencilMode(self, mode: 'QOpenGLTexture.DepthStencilMode') -> None: ... + def swizzleMask(self, component: 'QOpenGLTexture.SwizzleComponent') -> 'QOpenGLTexture.SwizzleValue': ... + @typing.overload + def setSwizzleMask(self, component: 'QOpenGLTexture.SwizzleComponent', value: 'QOpenGLTexture.SwizzleValue') -> None: ... + @typing.overload + def setSwizzleMask(self, r: 'QOpenGLTexture.SwizzleValue', g: 'QOpenGLTexture.SwizzleValue', b: 'QOpenGLTexture.SwizzleValue', a: 'QOpenGLTexture.SwizzleValue') -> None: ... + @typing.overload + def generateMipMaps(self) -> None: ... + @typing.overload + def generateMipMaps(self, baseLevel: int, resetBaseLevel: bool = ...) -> None: ... + def isAutoMipMapGenerationEnabled(self) -> bool: ... + def setAutoMipMapGenerationEnabled(self, enabled: bool) -> None: ... + def mipLevelRange(self) -> typing.Tuple[int, int]: ... + def setMipLevelRange(self, baseLevel: int, maxLevel: int) -> None: ... + def mipMaxLevel(self) -> int: ... + def setMipMaxLevel(self, maxLevel: int) -> None: ... + def mipBaseLevel(self) -> int: ... + def setMipBaseLevel(self, baseLevel: int) -> None: ... + @staticmethod + def hasFeature(feature: 'QOpenGLTexture.Feature') -> bool: ... + @typing.overload + def setCompressedData(self, mipLevel: int, layer: int, cubeFace: 'QOpenGLTexture.CubeMapFace', dataSize: int, data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setCompressedData(self, mipLevel: int, layer: int, dataSize: int, data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setCompressedData(self, mipLevel: int, dataSize: int, data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setCompressedData(self, dataSize: int, data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setCompressedData(self, mipLevel: int, layer: int, layerCount: int, cubeFace: 'QOpenGLTexture.CubeMapFace', dataSize: int, data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, mipLevel: int, layer: int, cubeFace: 'QOpenGLTexture.CubeMapFace', sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, mipLevel: int, layer: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, mipLevel: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, image: QImage, genMipMaps: 'QOpenGLTexture.MipMapGeneration' = ...) -> None: ... + @typing.overload + def setData(self, mipLevel: int, layer: int, layerCount: int, cubeFace: 'QOpenGLTexture.CubeMapFace', sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, mipLevel: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, mipLevel: int, layer: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, mipLevel: int, layer: int, cubeFace: 'QOpenGLTexture.CubeMapFace', sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + @typing.overload + def setData(self, xOffset: int, yOffset: int, zOffset: int, width: int, height: int, depth: int, mipLevel: int, layer: int, cubeFace: 'QOpenGLTexture.CubeMapFace', layerCount: int, sourceFormat: 'QOpenGLTexture.PixelFormat', sourceType: 'QOpenGLTexture.PixelType', data: typing.Optional[PyQt5.sip.voidptr], options: typing.Optional[QOpenGLPixelTransferOptions] = ...) -> None: ... + def isTextureView(self) -> bool: ... + def createTextureView(self, target: 'QOpenGLTexture.Target', viewFormat: 'QOpenGLTexture.TextureFormat', minimumMipmapLevel: int, maximumMipmapLevel: int, minimumLayer: int, maximumLayer: int) -> typing.Optional['QOpenGLTexture']: ... + def isStorageAllocated(self) -> bool: ... + @typing.overload + def allocateStorage(self) -> None: ... + @typing.overload + def allocateStorage(self, pixelFormat: 'QOpenGLTexture.PixelFormat', pixelType: 'QOpenGLTexture.PixelType') -> None: ... + def faces(self) -> int: ... + def layers(self) -> int: ... + def setLayers(self, layers: int) -> None: ... + def maximumMipLevels(self) -> int: ... + def mipLevels(self) -> int: ... + def setMipLevels(self, levels: int) -> None: ... + def depth(self) -> int: ... + def height(self) -> int: ... + def width(self) -> int: ... + def setSize(self, width: int, height: int = ..., depth: int = ...) -> None: ... + def format(self) -> 'QOpenGLTexture.TextureFormat': ... + def setFormat(self, format: 'QOpenGLTexture.TextureFormat') -> None: ... + @typing.overload + @staticmethod + def boundTextureId(target: 'QOpenGLTexture.BindingTarget') -> int: ... + @typing.overload + @staticmethod + def boundTextureId(unit: int, target: 'QOpenGLTexture.BindingTarget') -> int: ... + @typing.overload + def isBound(self) -> bool: ... + @typing.overload + def isBound(self, unit: int) -> bool: ... + @typing.overload + def release(self) -> None: ... + @typing.overload + def release(self, unit: int, reset: 'QOpenGLTexture.TextureUnitReset' = ...) -> None: ... + @typing.overload + def bind(self) -> None: ... + @typing.overload + def bind(self, unit: int, reset: 'QOpenGLTexture.TextureUnitReset' = ...) -> None: ... + def textureId(self) -> int: ... + def isCreated(self) -> bool: ... + def destroy(self) -> None: ... + def create(self) -> bool: ... + + +class QOpenGLTextureBlitter(PyQt5.sipsimplewrapper): + + class Origin(int): + OriginBottomLeft = ... # type: QOpenGLTextureBlitter.Origin + OriginTopLeft = ... # type: QOpenGLTextureBlitter.Origin + + def __init__(self) -> None: ... + + @staticmethod + def sourceTransform(subTexture: QtCore.QRectF, textureSize: QtCore.QSize, origin: 'QOpenGLTextureBlitter.Origin') -> QMatrix3x3: ... + @staticmethod + def targetTransform(target: QtCore.QRectF, viewport: QtCore.QRect) -> QMatrix4x4: ... + @typing.overload + def blit(self, texture: int, targetTransform: QMatrix4x4, sourceOrigin: 'QOpenGLTextureBlitter.Origin') -> None: ... + @typing.overload + def blit(self, texture: int, targetTransform: QMatrix4x4, sourceTransform: QMatrix3x3) -> None: ... + def setOpacity(self, opacity: float) -> None: ... + def setRedBlueSwizzle(self, swizzle: bool) -> None: ... + def release(self) -> None: ... + def bind(self, target: int = ...) -> None: ... + def supportsExternalOESTarget(self) -> bool: ... + def destroy(self) -> None: ... + def isCreated(self) -> bool: ... + def create(self) -> bool: ... + + +class QOpenGLTimerQuery(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def waitForResult(self) -> int: ... + def isResultAvailable(self) -> bool: ... + def recordTimestamp(self) -> None: ... + def waitForTimestamp(self) -> int: ... + def end(self) -> None: ... + def begin(self) -> None: ... + def objectId(self) -> int: ... + def isCreated(self) -> bool: ... + def destroy(self) -> None: ... + def create(self) -> bool: ... + + +class QOpenGLTimeMonitor(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reset(self) -> None: ... + def waitForIntervals(self) -> typing.List[int]: ... + def waitForSamples(self) -> typing.List[int]: ... + def isResultAvailable(self) -> bool: ... + def recordSample(self) -> int: ... + def objectIds(self) -> typing.List[int]: ... + def isCreated(self) -> bool: ... + def destroy(self) -> None: ... + def create(self) -> bool: ... + def sampleCount(self) -> int: ... + def setSampleCount(self, sampleCount: int) -> None: ... + + +class QAbstractOpenGLFunctions(PyQt5.sip.wrapper): ... + + +class QOpenGLVertexArrayObject(QtCore.QObject): + + class Binder(PyQt5.sipsimplewrapper): + + def __init__(self, v: typing.Optional['QOpenGLVertexArrayObject']) -> None: ... + + def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... + def __enter__(self) -> typing.Any: ... + def rebind(self) -> None: ... + def release(self) -> None: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def release(self) -> None: ... + def bind(self) -> None: ... + def objectId(self) -> int: ... + def isCreated(self) -> bool: ... + def destroy(self) -> None: ... + def create(self) -> bool: ... + + +class QWindow(QtCore.QObject, QSurface): + + class Visibility(int): + Hidden = ... # type: QWindow.Visibility + AutomaticVisibility = ... # type: QWindow.Visibility + Windowed = ... # type: QWindow.Visibility + Minimized = ... # type: QWindow.Visibility + Maximized = ... # type: QWindow.Visibility + FullScreen = ... # type: QWindow.Visibility + + class AncestorMode(int): + ExcludeTransients = ... # type: QWindow.AncestorMode + IncludeTransients = ... # type: QWindow.AncestorMode + + @typing.overload + def __init__(self, screen: typing.Optional['QScreen'] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional['QWindow']) -> None: ... + + def startSystemMove(self) -> bool: ... + def startSystemResize(self, edges: typing.Union[QtCore.Qt.Edges, QtCore.Qt.Edge]) -> bool: ... + def setWindowStates(self, states: typing.Union[QtCore.Qt.WindowStates, QtCore.Qt.WindowState]) -> None: ... + def windowStates(self) -> QtCore.Qt.WindowStates: ... + def setFlag(self, a0: QtCore.Qt.WindowType, on: bool = ...) -> None: ... + opacityChanged: typing.ClassVar[QtCore.pyqtSignal] + activeChanged: typing.ClassVar[QtCore.pyqtSignal] + visibilityChanged: typing.ClassVar[QtCore.pyqtSignal] + @staticmethod + def fromWinId(id: PyQt5.sip.voidptr) -> typing.Optional['QWindow']: ... + def mask(self) -> 'QRegion': ... + def setMask(self, region: 'QRegion') -> None: ... + def opacity(self) -> float: ... + def setVisibility(self, v: 'QWindow.Visibility') -> None: ... + def visibility(self) -> 'QWindow.Visibility': ... + def tabletEvent(self, a0: typing.Optional[QTabletEvent]) -> None: ... + def touchEvent(self, a0: typing.Optional[QTouchEvent]) -> None: ... + def wheelEvent(self, a0: typing.Optional[QWheelEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QMouseEvent]) -> None: ... + def mouseDoubleClickEvent(self, a0: typing.Optional[QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QMouseEvent]) -> None: ... + def keyReleaseEvent(self, a0: typing.Optional[QKeyEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QKeyEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def hideEvent(self, a0: typing.Optional[QHideEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QShowEvent]) -> None: ... + def focusOutEvent(self, a0: typing.Optional[QFocusEvent]) -> None: ... + def focusInEvent(self, a0: typing.Optional[QFocusEvent]) -> None: ... + def moveEvent(self, a0: typing.Optional[QMoveEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QResizeEvent]) -> None: ... + def exposeEvent(self, a0: typing.Optional[QExposeEvent]) -> None: ... + windowTitleChanged: typing.ClassVar[QtCore.pyqtSignal] + focusObjectChanged: typing.ClassVar[QtCore.pyqtSignal] + contentOrientationChanged: typing.ClassVar[QtCore.pyqtSignal] + visibleChanged: typing.ClassVar[QtCore.pyqtSignal] + maximumHeightChanged: typing.ClassVar[QtCore.pyqtSignal] + maximumWidthChanged: typing.ClassVar[QtCore.pyqtSignal] + minimumHeightChanged: typing.ClassVar[QtCore.pyqtSignal] + minimumWidthChanged: typing.ClassVar[QtCore.pyqtSignal] + heightChanged: typing.ClassVar[QtCore.pyqtSignal] + widthChanged: typing.ClassVar[QtCore.pyqtSignal] + yChanged: typing.ClassVar[QtCore.pyqtSignal] + xChanged: typing.ClassVar[QtCore.pyqtSignal] + windowStateChanged: typing.ClassVar[QtCore.pyqtSignal] + modalityChanged: typing.ClassVar[QtCore.pyqtSignal] + screenChanged: typing.ClassVar[QtCore.pyqtSignal] + def requestUpdate(self) -> None: ... + def alert(self, msec: int) -> None: ... + def setMaximumHeight(self, h: int) -> None: ... + def setMaximumWidth(self, w: int) -> None: ... + def setMinimumHeight(self, h: int) -> None: ... + def setMinimumWidth(self, w: int) -> None: ... + def setHeight(self, arg: int) -> None: ... + def setWidth(self, arg: int) -> None: ... + def setY(self, arg: int) -> None: ... + def setX(self, arg: int) -> None: ... + def setTitle(self, a0: typing.Optional[str]) -> None: ... + def lower(self) -> None: ... + def raise_(self) -> None: ... + def close(self) -> bool: ... + def showNormal(self) -> None: ... + def showFullScreen(self) -> None: ... + def showMaximized(self) -> None: ... + def showMinimized(self) -> None: ... + def hide(self) -> None: ... + def show(self) -> None: ... + def setVisible(self, visible: bool) -> None: ... + def unsetCursor(self) -> None: ... + def setCursor(self, a0: typing.Union[QCursor, QtCore.Qt.CursorShape]) -> None: ... + def cursor(self) -> QCursor: ... + def mapFromGlobal(self, pos: QtCore.QPoint) -> QtCore.QPoint: ... + def mapToGlobal(self, pos: QtCore.QPoint) -> QtCore.QPoint: ... + def focusObject(self) -> typing.Optional[QtCore.QObject]: ... + def setScreen(self, screen: typing.Optional['QScreen']) -> None: ... + def screen(self) -> typing.Optional['QScreen']: ... + def setMouseGrabEnabled(self, grab: bool) -> bool: ... + def setKeyboardGrabEnabled(self, grab: bool) -> bool: ... + def destroy(self) -> None: ... + def icon(self) -> QIcon: ... + def setIcon(self, icon: QIcon) -> None: ... + def filePath(self) -> str: ... + def setFilePath(self, filePath: typing.Optional[str]) -> None: ... + @typing.overload + def resize(self, newSize: QtCore.QSize) -> None: ... + @typing.overload + def resize(self, w: int, h: int) -> None: ... + @typing.overload + def setPosition(self, pt: QtCore.QPoint) -> None: ... + @typing.overload + def setPosition(self, posx: int, posy: int) -> None: ... + def position(self) -> QtCore.QPoint: ... + def size(self) -> QtCore.QSize: ... + def y(self) -> int: ... + def x(self) -> int: ... + def height(self) -> int: ... + def width(self) -> int: ... + def setFramePosition(self, point: QtCore.QPoint) -> None: ... + def framePosition(self) -> QtCore.QPoint: ... + def frameGeometry(self) -> QtCore.QRect: ... + def frameMargins(self) -> QtCore.QMargins: ... + def geometry(self) -> QtCore.QRect: ... + @typing.overload + def setGeometry(self, posx: int, posy: int, w: int, h: int) -> None: ... + @typing.overload + def setGeometry(self, rect: QtCore.QRect) -> None: ... + def setSizeIncrement(self, size: QtCore.QSize) -> None: ... + def setBaseSize(self, size: QtCore.QSize) -> None: ... + def setMaximumSize(self, size: QtCore.QSize) -> None: ... + def setMinimumSize(self, size: QtCore.QSize) -> None: ... + def sizeIncrement(self) -> QtCore.QSize: ... + def baseSize(self) -> QtCore.QSize: ... + def maximumSize(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def maximumHeight(self) -> int: ... + def maximumWidth(self) -> int: ... + def minimumHeight(self) -> int: ... + def minimumWidth(self) -> int: ... + def isExposed(self) -> bool: ... + def isAncestorOf(self, child: typing.Optional['QWindow'], mode: 'QWindow.AncestorMode' = ...) -> bool: ... + def transientParent(self) -> typing.Optional['QWindow']: ... + def setTransientParent(self, parent: typing.Optional['QWindow']) -> None: ... + def setWindowState(self, state: QtCore.Qt.WindowState) -> None: ... + def windowState(self) -> QtCore.Qt.WindowState: ... + def devicePixelRatio(self) -> float: ... + def contentOrientation(self) -> QtCore.Qt.ScreenOrientation: ... + def reportContentOrientationChange(self, orientation: QtCore.Qt.ScreenOrientation) -> None: ... + def isActive(self) -> bool: ... + def requestActivate(self) -> None: ... + def setOpacity(self, level: float) -> None: ... + def title(self) -> str: ... + def type(self) -> QtCore.Qt.WindowType: ... + def flags(self) -> QtCore.Qt.WindowFlags: ... + def setFlags(self, flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType]) -> None: ... + def requestedFormat(self) -> 'QSurfaceFormat': ... + def format(self) -> 'QSurfaceFormat': ... + def setFormat(self, format: 'QSurfaceFormat') -> None: ... + def setModality(self, modality: QtCore.Qt.WindowModality) -> None: ... + def modality(self) -> QtCore.Qt.WindowModality: ... + def isModal(self) -> bool: ... + def isTopLevel(self) -> bool: ... + def setParent(self, parent: typing.Optional['QWindow']) -> None: ... + @typing.overload + def parent(self) -> typing.Optional['QWindow']: ... + @typing.overload + def parent(self, mode: 'QWindow.AncestorMode') -> typing.Optional['QWindow']: ... + def winId(self) -> PyQt5.sip.voidptr: ... + def create(self) -> None: ... + def isVisible(self) -> bool: ... + def surfaceType(self) -> QSurface.SurfaceType: ... + def setSurfaceType(self, surfaceType: QSurface.SurfaceType) -> None: ... + + +class QPaintDeviceWindow(QWindow, QPaintDevice): + + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def exposeEvent(self, a0: typing.Optional[QExposeEvent]) -> None: ... + def metric(self, metric: QPaintDevice.PaintDeviceMetric) -> int: ... + def paintEvent(self, event: typing.Optional[QPaintEvent]) -> None: ... + @typing.overload + def update(self, rect: QtCore.QRect) -> None: ... + @typing.overload + def update(self, region: 'QRegion') -> None: ... + @typing.overload + def update(self) -> None: ... + + +class QOpenGLWindow(QPaintDeviceWindow): + + class UpdateBehavior(int): + NoPartialUpdate = ... # type: QOpenGLWindow.UpdateBehavior + PartialUpdateBlit = ... # type: QOpenGLWindow.UpdateBehavior + PartialUpdateBlend = ... # type: QOpenGLWindow.UpdateBehavior + + @typing.overload + def __init__(self, updateBehavior: 'QOpenGLWindow.UpdateBehavior' = ..., parent: typing.Optional[QWindow] = ...) -> None: ... + @typing.overload + def __init__(self, shareContext: typing.Optional[QOpenGLContext], updateBehavior: 'QOpenGLWindow.UpdateBehavior' = ..., parent: typing.Optional[QWindow] = ...) -> None: ... + + def metric(self, metric: QPaintDevice.PaintDeviceMetric) -> int: ... + def resizeEvent(self, event: typing.Optional[QResizeEvent]) -> None: ... + def paintEvent(self, event: typing.Optional[QPaintEvent]) -> None: ... + def paintOverGL(self) -> None: ... + def paintUnderGL(self) -> None: ... + def paintGL(self) -> None: ... + def resizeGL(self, w: int, h: int) -> None: ... + def initializeGL(self) -> None: ... + frameSwapped: typing.ClassVar[QtCore.pyqtSignal] + def shareContext(self) -> typing.Optional[QOpenGLContext]: ... + def grabFramebuffer(self) -> QImage: ... + def defaultFramebufferObject(self) -> int: ... + def context(self) -> typing.Optional[QOpenGLContext]: ... + def doneCurrent(self) -> None: ... + def makeCurrent(self) -> None: ... + def isValid(self) -> bool: ... + def updateBehavior(self) -> 'QOpenGLWindow.UpdateBehavior': ... + + +class QPagedPaintDevice(QPaintDevice): + + class PdfVersion(int): + PdfVersion_1_4 = ... # type: QPagedPaintDevice.PdfVersion + PdfVersion_A1b = ... # type: QPagedPaintDevice.PdfVersion + PdfVersion_1_6 = ... # type: QPagedPaintDevice.PdfVersion + + class PageSize(int): + A4 = ... # type: QPagedPaintDevice.PageSize + B5 = ... # type: QPagedPaintDevice.PageSize + Letter = ... # type: QPagedPaintDevice.PageSize + Legal = ... # type: QPagedPaintDevice.PageSize + Executive = ... # type: QPagedPaintDevice.PageSize + A0 = ... # type: QPagedPaintDevice.PageSize + A1 = ... # type: QPagedPaintDevice.PageSize + A2 = ... # type: QPagedPaintDevice.PageSize + A3 = ... # type: QPagedPaintDevice.PageSize + A5 = ... # type: QPagedPaintDevice.PageSize + A6 = ... # type: QPagedPaintDevice.PageSize + A7 = ... # type: QPagedPaintDevice.PageSize + A8 = ... # type: QPagedPaintDevice.PageSize + A9 = ... # type: QPagedPaintDevice.PageSize + B0 = ... # type: QPagedPaintDevice.PageSize + B1 = ... # type: QPagedPaintDevice.PageSize + B10 = ... # type: QPagedPaintDevice.PageSize + B2 = ... # type: QPagedPaintDevice.PageSize + B3 = ... # type: QPagedPaintDevice.PageSize + B4 = ... # type: QPagedPaintDevice.PageSize + B6 = ... # type: QPagedPaintDevice.PageSize + B7 = ... # type: QPagedPaintDevice.PageSize + B8 = ... # type: QPagedPaintDevice.PageSize + B9 = ... # type: QPagedPaintDevice.PageSize + C5E = ... # type: QPagedPaintDevice.PageSize + Comm10E = ... # type: QPagedPaintDevice.PageSize + DLE = ... # type: QPagedPaintDevice.PageSize + Folio = ... # type: QPagedPaintDevice.PageSize + Ledger = ... # type: QPagedPaintDevice.PageSize + Tabloid = ... # type: QPagedPaintDevice.PageSize + Custom = ... # type: QPagedPaintDevice.PageSize + A10 = ... # type: QPagedPaintDevice.PageSize + A3Extra = ... # type: QPagedPaintDevice.PageSize + A4Extra = ... # type: QPagedPaintDevice.PageSize + A4Plus = ... # type: QPagedPaintDevice.PageSize + A4Small = ... # type: QPagedPaintDevice.PageSize + A5Extra = ... # type: QPagedPaintDevice.PageSize + B5Extra = ... # type: QPagedPaintDevice.PageSize + JisB0 = ... # type: QPagedPaintDevice.PageSize + JisB1 = ... # type: QPagedPaintDevice.PageSize + JisB2 = ... # type: QPagedPaintDevice.PageSize + JisB3 = ... # type: QPagedPaintDevice.PageSize + JisB4 = ... # type: QPagedPaintDevice.PageSize + JisB5 = ... # type: QPagedPaintDevice.PageSize + JisB6 = ... # type: QPagedPaintDevice.PageSize + JisB7 = ... # type: QPagedPaintDevice.PageSize + JisB8 = ... # type: QPagedPaintDevice.PageSize + JisB9 = ... # type: QPagedPaintDevice.PageSize + JisB10 = ... # type: QPagedPaintDevice.PageSize + AnsiC = ... # type: QPagedPaintDevice.PageSize + AnsiD = ... # type: QPagedPaintDevice.PageSize + AnsiE = ... # type: QPagedPaintDevice.PageSize + LegalExtra = ... # type: QPagedPaintDevice.PageSize + LetterExtra = ... # type: QPagedPaintDevice.PageSize + LetterPlus = ... # type: QPagedPaintDevice.PageSize + LetterSmall = ... # type: QPagedPaintDevice.PageSize + TabloidExtra = ... # type: QPagedPaintDevice.PageSize + ArchA = ... # type: QPagedPaintDevice.PageSize + ArchB = ... # type: QPagedPaintDevice.PageSize + ArchC = ... # type: QPagedPaintDevice.PageSize + ArchD = ... # type: QPagedPaintDevice.PageSize + ArchE = ... # type: QPagedPaintDevice.PageSize + Imperial7x9 = ... # type: QPagedPaintDevice.PageSize + Imperial8x10 = ... # type: QPagedPaintDevice.PageSize + Imperial9x11 = ... # type: QPagedPaintDevice.PageSize + Imperial9x12 = ... # type: QPagedPaintDevice.PageSize + Imperial10x11 = ... # type: QPagedPaintDevice.PageSize + Imperial10x13 = ... # type: QPagedPaintDevice.PageSize + Imperial10x14 = ... # type: QPagedPaintDevice.PageSize + Imperial12x11 = ... # type: QPagedPaintDevice.PageSize + Imperial15x11 = ... # type: QPagedPaintDevice.PageSize + ExecutiveStandard = ... # type: QPagedPaintDevice.PageSize + Note = ... # type: QPagedPaintDevice.PageSize + Quarto = ... # type: QPagedPaintDevice.PageSize + Statement = ... # type: QPagedPaintDevice.PageSize + SuperA = ... # type: QPagedPaintDevice.PageSize + SuperB = ... # type: QPagedPaintDevice.PageSize + Postcard = ... # type: QPagedPaintDevice.PageSize + DoublePostcard = ... # type: QPagedPaintDevice.PageSize + Prc16K = ... # type: QPagedPaintDevice.PageSize + Prc32K = ... # type: QPagedPaintDevice.PageSize + Prc32KBig = ... # type: QPagedPaintDevice.PageSize + FanFoldUS = ... # type: QPagedPaintDevice.PageSize + FanFoldGerman = ... # type: QPagedPaintDevice.PageSize + FanFoldGermanLegal = ... # type: QPagedPaintDevice.PageSize + EnvelopeB4 = ... # type: QPagedPaintDevice.PageSize + EnvelopeB5 = ... # type: QPagedPaintDevice.PageSize + EnvelopeB6 = ... # type: QPagedPaintDevice.PageSize + EnvelopeC0 = ... # type: QPagedPaintDevice.PageSize + EnvelopeC1 = ... # type: QPagedPaintDevice.PageSize + EnvelopeC2 = ... # type: QPagedPaintDevice.PageSize + EnvelopeC3 = ... # type: QPagedPaintDevice.PageSize + EnvelopeC4 = ... # type: QPagedPaintDevice.PageSize + EnvelopeC6 = ... # type: QPagedPaintDevice.PageSize + EnvelopeC65 = ... # type: QPagedPaintDevice.PageSize + EnvelopeC7 = ... # type: QPagedPaintDevice.PageSize + Envelope9 = ... # type: QPagedPaintDevice.PageSize + Envelope11 = ... # type: QPagedPaintDevice.PageSize + Envelope12 = ... # type: QPagedPaintDevice.PageSize + Envelope14 = ... # type: QPagedPaintDevice.PageSize + EnvelopeMonarch = ... # type: QPagedPaintDevice.PageSize + EnvelopePersonal = ... # type: QPagedPaintDevice.PageSize + EnvelopeChou3 = ... # type: QPagedPaintDevice.PageSize + EnvelopeChou4 = ... # type: QPagedPaintDevice.PageSize + EnvelopeInvite = ... # type: QPagedPaintDevice.PageSize + EnvelopeItalian = ... # type: QPagedPaintDevice.PageSize + EnvelopeKaku2 = ... # type: QPagedPaintDevice.PageSize + EnvelopeKaku3 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc1 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc2 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc3 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc4 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc5 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc6 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc7 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc8 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc9 = ... # type: QPagedPaintDevice.PageSize + EnvelopePrc10 = ... # type: QPagedPaintDevice.PageSize + EnvelopeYou4 = ... # type: QPagedPaintDevice.PageSize + NPaperSize = ... # type: QPagedPaintDevice.PageSize + AnsiA = ... # type: QPagedPaintDevice.PageSize + AnsiB = ... # type: QPagedPaintDevice.PageSize + EnvelopeC5 = ... # type: QPagedPaintDevice.PageSize + EnvelopeDL = ... # type: QPagedPaintDevice.PageSize + Envelope10 = ... # type: QPagedPaintDevice.PageSize + LastPageSize = ... # type: QPagedPaintDevice.PageSize + + class Margins(PyQt5.sipsimplewrapper): + + bottom = ... # type: float + left = ... # type: float + right = ... # type: float + top = ... # type: float + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QPagedPaintDevice.Margins') -> None: ... + + def __init__(self) -> None: ... + + def pageLayout(self) -> 'QPageLayout': ... + @typing.overload + def setPageMargins(self, margins: QtCore.QMarginsF) -> bool: ... + @typing.overload + def setPageMargins(self, margins: QtCore.QMarginsF, units: 'QPageLayout.Unit') -> bool: ... + def setPageOrientation(self, orientation: 'QPageLayout.Orientation') -> bool: ... + def setPageLayout(self, pageLayout: 'QPageLayout') -> bool: ... + def margins(self) -> 'QPagedPaintDevice.Margins': ... + def setMargins(self, margins: 'QPagedPaintDevice.Margins') -> None: ... + def pageSizeMM(self) -> QtCore.QSizeF: ... + def setPageSizeMM(self, size: QtCore.QSizeF) -> None: ... + def pageSize(self) -> 'QPagedPaintDevice.PageSize': ... + @typing.overload + def setPageSize(self, size: 'QPagedPaintDevice.PageSize') -> None: ... + @typing.overload + def setPageSize(self, pageSize: 'QPageSize') -> bool: ... + def newPage(self) -> bool: ... + + +class QPageLayout(PyQt5.sipsimplewrapper): + + class Mode(int): + StandardMode = ... # type: QPageLayout.Mode + FullPageMode = ... # type: QPageLayout.Mode + + class Orientation(int): + Portrait = ... # type: QPageLayout.Orientation + Landscape = ... # type: QPageLayout.Orientation + + class Unit(int): + Millimeter = ... # type: QPageLayout.Unit + Point = ... # type: QPageLayout.Unit + Inch = ... # type: QPageLayout.Unit + Pica = ... # type: QPageLayout.Unit + Didot = ... # type: QPageLayout.Unit + Cicero = ... # type: QPageLayout.Unit + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pageSize: 'QPageSize', orientation: 'QPageLayout.Orientation', margins: QtCore.QMarginsF, units: 'QPageLayout.Unit' = ..., minMargins: QtCore.QMarginsF = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QPageLayout') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def paintRectPixels(self, resolution: int) -> QtCore.QRect: ... + def paintRectPoints(self) -> QtCore.QRect: ... + @typing.overload + def paintRect(self) -> QtCore.QRectF: ... + @typing.overload + def paintRect(self, units: 'QPageLayout.Unit') -> QtCore.QRectF: ... + def fullRectPixels(self, resolution: int) -> QtCore.QRect: ... + def fullRectPoints(self) -> QtCore.QRect: ... + @typing.overload + def fullRect(self) -> QtCore.QRectF: ... + @typing.overload + def fullRect(self, units: 'QPageLayout.Unit') -> QtCore.QRectF: ... + def maximumMargins(self) -> QtCore.QMarginsF: ... + def minimumMargins(self) -> QtCore.QMarginsF: ... + def setMinimumMargins(self, minMargins: QtCore.QMarginsF) -> None: ... + def marginsPixels(self, resolution: int) -> QtCore.QMargins: ... + def marginsPoints(self) -> QtCore.QMargins: ... + @typing.overload + def margins(self) -> QtCore.QMarginsF: ... + @typing.overload + def margins(self, units: 'QPageLayout.Unit') -> QtCore.QMarginsF: ... + def setBottomMargin(self, bottomMargin: float) -> bool: ... + def setTopMargin(self, topMargin: float) -> bool: ... + def setRightMargin(self, rightMargin: float) -> bool: ... + def setLeftMargin(self, leftMargin: float) -> bool: ... + def setMargins(self, margins: QtCore.QMarginsF) -> bool: ... + def units(self) -> 'QPageLayout.Unit': ... + def setUnits(self, units: 'QPageLayout.Unit') -> None: ... + def orientation(self) -> 'QPageLayout.Orientation': ... + def setOrientation(self, orientation: 'QPageLayout.Orientation') -> None: ... + def pageSize(self) -> 'QPageSize': ... + def setPageSize(self, pageSize: 'QPageSize', minMargins: QtCore.QMarginsF = ...) -> None: ... + def mode(self) -> 'QPageLayout.Mode': ... + def setMode(self, mode: 'QPageLayout.Mode') -> None: ... + def isValid(self) -> bool: ... + def isEquivalentTo(self, other: 'QPageLayout') -> bool: ... + def swap(self, other: 'QPageLayout') -> None: ... + + +class QPageSize(PyQt5.sipsimplewrapper): + + class SizeMatchPolicy(int): + FuzzyMatch = ... # type: QPageSize.SizeMatchPolicy + FuzzyOrientationMatch = ... # type: QPageSize.SizeMatchPolicy + ExactMatch = ... # type: QPageSize.SizeMatchPolicy + + class Unit(int): + Millimeter = ... # type: QPageSize.Unit + Point = ... # type: QPageSize.Unit + Inch = ... # type: QPageSize.Unit + Pica = ... # type: QPageSize.Unit + Didot = ... # type: QPageSize.Unit + Cicero = ... # type: QPageSize.Unit + + class PageSizeId(int): + A4 = ... # type: QPageSize.PageSizeId + B5 = ... # type: QPageSize.PageSizeId + Letter = ... # type: QPageSize.PageSizeId + Legal = ... # type: QPageSize.PageSizeId + Executive = ... # type: QPageSize.PageSizeId + A0 = ... # type: QPageSize.PageSizeId + A1 = ... # type: QPageSize.PageSizeId + A2 = ... # type: QPageSize.PageSizeId + A3 = ... # type: QPageSize.PageSizeId + A5 = ... # type: QPageSize.PageSizeId + A6 = ... # type: QPageSize.PageSizeId + A7 = ... # type: QPageSize.PageSizeId + A8 = ... # type: QPageSize.PageSizeId + A9 = ... # type: QPageSize.PageSizeId + B0 = ... # type: QPageSize.PageSizeId + B1 = ... # type: QPageSize.PageSizeId + B10 = ... # type: QPageSize.PageSizeId + B2 = ... # type: QPageSize.PageSizeId + B3 = ... # type: QPageSize.PageSizeId + B4 = ... # type: QPageSize.PageSizeId + B6 = ... # type: QPageSize.PageSizeId + B7 = ... # type: QPageSize.PageSizeId + B8 = ... # type: QPageSize.PageSizeId + B9 = ... # type: QPageSize.PageSizeId + C5E = ... # type: QPageSize.PageSizeId + Comm10E = ... # type: QPageSize.PageSizeId + DLE = ... # type: QPageSize.PageSizeId + Folio = ... # type: QPageSize.PageSizeId + Ledger = ... # type: QPageSize.PageSizeId + Tabloid = ... # type: QPageSize.PageSizeId + Custom = ... # type: QPageSize.PageSizeId + A10 = ... # type: QPageSize.PageSizeId + A3Extra = ... # type: QPageSize.PageSizeId + A4Extra = ... # type: QPageSize.PageSizeId + A4Plus = ... # type: QPageSize.PageSizeId + A4Small = ... # type: QPageSize.PageSizeId + A5Extra = ... # type: QPageSize.PageSizeId + B5Extra = ... # type: QPageSize.PageSizeId + JisB0 = ... # type: QPageSize.PageSizeId + JisB1 = ... # type: QPageSize.PageSizeId + JisB2 = ... # type: QPageSize.PageSizeId + JisB3 = ... # type: QPageSize.PageSizeId + JisB4 = ... # type: QPageSize.PageSizeId + JisB5 = ... # type: QPageSize.PageSizeId + JisB6 = ... # type: QPageSize.PageSizeId + JisB7 = ... # type: QPageSize.PageSizeId + JisB8 = ... # type: QPageSize.PageSizeId + JisB9 = ... # type: QPageSize.PageSizeId + JisB10 = ... # type: QPageSize.PageSizeId + AnsiC = ... # type: QPageSize.PageSizeId + AnsiD = ... # type: QPageSize.PageSizeId + AnsiE = ... # type: QPageSize.PageSizeId + LegalExtra = ... # type: QPageSize.PageSizeId + LetterExtra = ... # type: QPageSize.PageSizeId + LetterPlus = ... # type: QPageSize.PageSizeId + LetterSmall = ... # type: QPageSize.PageSizeId + TabloidExtra = ... # type: QPageSize.PageSizeId + ArchA = ... # type: QPageSize.PageSizeId + ArchB = ... # type: QPageSize.PageSizeId + ArchC = ... # type: QPageSize.PageSizeId + ArchD = ... # type: QPageSize.PageSizeId + ArchE = ... # type: QPageSize.PageSizeId + Imperial7x9 = ... # type: QPageSize.PageSizeId + Imperial8x10 = ... # type: QPageSize.PageSizeId + Imperial9x11 = ... # type: QPageSize.PageSizeId + Imperial9x12 = ... # type: QPageSize.PageSizeId + Imperial10x11 = ... # type: QPageSize.PageSizeId + Imperial10x13 = ... # type: QPageSize.PageSizeId + Imperial10x14 = ... # type: QPageSize.PageSizeId + Imperial12x11 = ... # type: QPageSize.PageSizeId + Imperial15x11 = ... # type: QPageSize.PageSizeId + ExecutiveStandard = ... # type: QPageSize.PageSizeId + Note = ... # type: QPageSize.PageSizeId + Quarto = ... # type: QPageSize.PageSizeId + Statement = ... # type: QPageSize.PageSizeId + SuperA = ... # type: QPageSize.PageSizeId + SuperB = ... # type: QPageSize.PageSizeId + Postcard = ... # type: QPageSize.PageSizeId + DoublePostcard = ... # type: QPageSize.PageSizeId + Prc16K = ... # type: QPageSize.PageSizeId + Prc32K = ... # type: QPageSize.PageSizeId + Prc32KBig = ... # type: QPageSize.PageSizeId + FanFoldUS = ... # type: QPageSize.PageSizeId + FanFoldGerman = ... # type: QPageSize.PageSizeId + FanFoldGermanLegal = ... # type: QPageSize.PageSizeId + EnvelopeB4 = ... # type: QPageSize.PageSizeId + EnvelopeB5 = ... # type: QPageSize.PageSizeId + EnvelopeB6 = ... # type: QPageSize.PageSizeId + EnvelopeC0 = ... # type: QPageSize.PageSizeId + EnvelopeC1 = ... # type: QPageSize.PageSizeId + EnvelopeC2 = ... # type: QPageSize.PageSizeId + EnvelopeC3 = ... # type: QPageSize.PageSizeId + EnvelopeC4 = ... # type: QPageSize.PageSizeId + EnvelopeC6 = ... # type: QPageSize.PageSizeId + EnvelopeC65 = ... # type: QPageSize.PageSizeId + EnvelopeC7 = ... # type: QPageSize.PageSizeId + Envelope9 = ... # type: QPageSize.PageSizeId + Envelope11 = ... # type: QPageSize.PageSizeId + Envelope12 = ... # type: QPageSize.PageSizeId + Envelope14 = ... # type: QPageSize.PageSizeId + EnvelopeMonarch = ... # type: QPageSize.PageSizeId + EnvelopePersonal = ... # type: QPageSize.PageSizeId + EnvelopeChou3 = ... # type: QPageSize.PageSizeId + EnvelopeChou4 = ... # type: QPageSize.PageSizeId + EnvelopeInvite = ... # type: QPageSize.PageSizeId + EnvelopeItalian = ... # type: QPageSize.PageSizeId + EnvelopeKaku2 = ... # type: QPageSize.PageSizeId + EnvelopeKaku3 = ... # type: QPageSize.PageSizeId + EnvelopePrc1 = ... # type: QPageSize.PageSizeId + EnvelopePrc2 = ... # type: QPageSize.PageSizeId + EnvelopePrc3 = ... # type: QPageSize.PageSizeId + EnvelopePrc4 = ... # type: QPageSize.PageSizeId + EnvelopePrc5 = ... # type: QPageSize.PageSizeId + EnvelopePrc6 = ... # type: QPageSize.PageSizeId + EnvelopePrc7 = ... # type: QPageSize.PageSizeId + EnvelopePrc8 = ... # type: QPageSize.PageSizeId + EnvelopePrc9 = ... # type: QPageSize.PageSizeId + EnvelopePrc10 = ... # type: QPageSize.PageSizeId + EnvelopeYou4 = ... # type: QPageSize.PageSizeId + NPageSize = ... # type: QPageSize.PageSizeId + NPaperSize = ... # type: QPageSize.PageSizeId + AnsiA = ... # type: QPageSize.PageSizeId + AnsiB = ... # type: QPageSize.PageSizeId + EnvelopeC5 = ... # type: QPageSize.PageSizeId + EnvelopeDL = ... # type: QPageSize.PageSizeId + Envelope10 = ... # type: QPageSize.PageSizeId + LastPageSize = ... # type: QPageSize.PageSizeId + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pageSizeId: 'QPageSize.PageSizeId') -> None: ... + @typing.overload + def __init__(self, pointSize: QtCore.QSize, name: typing.Optional[str] = ..., matchPolicy: 'QPageSize.SizeMatchPolicy' = ...) -> None: ... + @typing.overload + def __init__(self, size: QtCore.QSizeF, units: 'QPageSize.Unit', name: typing.Optional[str] = ..., matchPolicy: 'QPageSize.SizeMatchPolicy' = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QPageSize') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def rectPixels(self, resolution: int) -> QtCore.QRect: ... + def rectPoints(self) -> QtCore.QRect: ... + def rect(self, units: 'QPageSize.Unit') -> QtCore.QRectF: ... + @typing.overload + def sizePixels(self, resolution: int) -> QtCore.QSize: ... + @typing.overload + @staticmethod + def sizePixels(pageSizeId: 'QPageSize.PageSizeId', resolution: int) -> QtCore.QSize: ... + @typing.overload + def sizePoints(self) -> QtCore.QSize: ... + @typing.overload + @staticmethod + def sizePoints(pageSizeId: 'QPageSize.PageSizeId') -> QtCore.QSize: ... + @typing.overload + def size(self, units: 'QPageSize.Unit') -> QtCore.QSizeF: ... + @typing.overload + @staticmethod + def size(pageSizeId: 'QPageSize.PageSizeId', units: 'QPageSize.Unit') -> QtCore.QSizeF: ... + @typing.overload + def definitionUnits(self) -> 'QPageSize.Unit': ... + @typing.overload + @staticmethod + def definitionUnits(pageSizeId: 'QPageSize.PageSizeId') -> 'QPageSize.Unit': ... + @typing.overload + def definitionSize(self) -> QtCore.QSizeF: ... + @typing.overload + @staticmethod + def definitionSize(pageSizeId: 'QPageSize.PageSizeId') -> QtCore.QSizeF: ... + @typing.overload + def windowsId(self) -> int: ... + @typing.overload + @staticmethod + def windowsId(pageSizeId: 'QPageSize.PageSizeId') -> int: ... + @typing.overload + def id(self) -> 'QPageSize.PageSizeId': ... + @typing.overload + @staticmethod + def id(pointSize: QtCore.QSize, matchPolicy: 'QPageSize.SizeMatchPolicy' = ...) -> 'QPageSize.PageSizeId': ... + @typing.overload + @staticmethod + def id(size: QtCore.QSizeF, units: 'QPageSize.Unit', matchPolicy: 'QPageSize.SizeMatchPolicy' = ...) -> 'QPageSize.PageSizeId': ... + @typing.overload + @staticmethod + def id(windowsId: int) -> 'QPageSize.PageSizeId': ... + @typing.overload + def name(self) -> str: ... + @typing.overload + @staticmethod + def name(pageSizeId: 'QPageSize.PageSizeId') -> str: ... + @typing.overload + def key(self) -> str: ... + @typing.overload + @staticmethod + def key(pageSizeId: 'QPageSize.PageSizeId') -> str: ... + def isValid(self) -> bool: ... + def isEquivalentTo(self, other: 'QPageSize') -> bool: ... + def swap(self, other: 'QPageSize') -> None: ... + + +class QPainter(PyQt5.sipsimplewrapper): + + class PixmapFragmentHint(int): + OpaqueHint = ... # type: QPainter.PixmapFragmentHint + + class CompositionMode(int): + CompositionMode_SourceOver = ... # type: QPainter.CompositionMode + CompositionMode_DestinationOver = ... # type: QPainter.CompositionMode + CompositionMode_Clear = ... # type: QPainter.CompositionMode + CompositionMode_Source = ... # type: QPainter.CompositionMode + CompositionMode_Destination = ... # type: QPainter.CompositionMode + CompositionMode_SourceIn = ... # type: QPainter.CompositionMode + CompositionMode_DestinationIn = ... # type: QPainter.CompositionMode + CompositionMode_SourceOut = ... # type: QPainter.CompositionMode + CompositionMode_DestinationOut = ... # type: QPainter.CompositionMode + CompositionMode_SourceAtop = ... # type: QPainter.CompositionMode + CompositionMode_DestinationAtop = ... # type: QPainter.CompositionMode + CompositionMode_Xor = ... # type: QPainter.CompositionMode + CompositionMode_Plus = ... # type: QPainter.CompositionMode + CompositionMode_Multiply = ... # type: QPainter.CompositionMode + CompositionMode_Screen = ... # type: QPainter.CompositionMode + CompositionMode_Overlay = ... # type: QPainter.CompositionMode + CompositionMode_Darken = ... # type: QPainter.CompositionMode + CompositionMode_Lighten = ... # type: QPainter.CompositionMode + CompositionMode_ColorDodge = ... # type: QPainter.CompositionMode + CompositionMode_ColorBurn = ... # type: QPainter.CompositionMode + CompositionMode_HardLight = ... # type: QPainter.CompositionMode + CompositionMode_SoftLight = ... # type: QPainter.CompositionMode + CompositionMode_Difference = ... # type: QPainter.CompositionMode + CompositionMode_Exclusion = ... # type: QPainter.CompositionMode + RasterOp_SourceOrDestination = ... # type: QPainter.CompositionMode + RasterOp_SourceAndDestination = ... # type: QPainter.CompositionMode + RasterOp_SourceXorDestination = ... # type: QPainter.CompositionMode + RasterOp_NotSourceAndNotDestination = ... # type: QPainter.CompositionMode + RasterOp_NotSourceOrNotDestination = ... # type: QPainter.CompositionMode + RasterOp_NotSourceXorDestination = ... # type: QPainter.CompositionMode + RasterOp_NotSource = ... # type: QPainter.CompositionMode + RasterOp_NotSourceAndDestination = ... # type: QPainter.CompositionMode + RasterOp_SourceAndNotDestination = ... # type: QPainter.CompositionMode + RasterOp_NotSourceOrDestination = ... # type: QPainter.CompositionMode + RasterOp_SourceOrNotDestination = ... # type: QPainter.CompositionMode + RasterOp_ClearDestination = ... # type: QPainter.CompositionMode + RasterOp_SetDestination = ... # type: QPainter.CompositionMode + RasterOp_NotDestination = ... # type: QPainter.CompositionMode + + class RenderHint(int): + Antialiasing = ... # type: QPainter.RenderHint + TextAntialiasing = ... # type: QPainter.RenderHint + SmoothPixmapTransform = ... # type: QPainter.RenderHint + HighQualityAntialiasing = ... # type: QPainter.RenderHint + NonCosmeticDefaultPen = ... # type: QPainter.RenderHint + Qt4CompatiblePainting = ... # type: QPainter.RenderHint + LosslessImageRendering = ... # type: QPainter.RenderHint + + class RenderHints(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QPainter.RenderHints', 'QPainter.RenderHint']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QPainter.RenderHints', 'QPainter.RenderHint']) -> 'QPainter.RenderHints': ... + def __xor__(self, f: typing.Union['QPainter.RenderHints', 'QPainter.RenderHint']) -> 'QPainter.RenderHints': ... + def __ior__(self, f: typing.Union['QPainter.RenderHints', 'QPainter.RenderHint']) -> 'QPainter.RenderHints': ... + def __or__(self, f: typing.Union['QPainter.RenderHints', 'QPainter.RenderHint']) -> 'QPainter.RenderHints': ... + def __iand__(self, f: typing.Union['QPainter.RenderHints', 'QPainter.RenderHint']) -> 'QPainter.RenderHints': ... + def __and__(self, f: typing.Union['QPainter.RenderHints', 'QPainter.RenderHint']) -> 'QPainter.RenderHints': ... + def __invert__(self) -> 'QPainter.RenderHints': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class PixmapFragment(PyQt5.sipsimplewrapper): + + height = ... # type: float + opacity = ... # type: float + rotation = ... # type: float + scaleX = ... # type: float + scaleY = ... # type: float + sourceLeft = ... # type: float + sourceTop = ... # type: float + width = ... # type: float + x = ... # type: float + y = ... # type: float + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QPainter.PixmapFragment') -> None: ... + + @staticmethod + def create(pos: typing.Union[QtCore.QPointF, QtCore.QPoint], sourceRect: QtCore.QRectF, scaleX: float = ..., scaleY: float = ..., rotation: float = ..., opacity: float = ...) -> 'QPainter.PixmapFragment': ... + + class PixmapFragmentHints(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QPainter.PixmapFragmentHints', 'QPainter.PixmapFragmentHint']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QPainter.PixmapFragmentHints', 'QPainter.PixmapFragmentHint']) -> 'QPainter.PixmapFragmentHints': ... + def __xor__(self, f: typing.Union['QPainter.PixmapFragmentHints', 'QPainter.PixmapFragmentHint']) -> 'QPainter.PixmapFragmentHints': ... + def __ior__(self, f: typing.Union['QPainter.PixmapFragmentHints', 'QPainter.PixmapFragmentHint']) -> 'QPainter.PixmapFragmentHints': ... + def __or__(self, f: typing.Union['QPainter.PixmapFragmentHints', 'QPainter.PixmapFragmentHint']) -> 'QPainter.PixmapFragmentHints': ... + def __iand__(self, f: typing.Union['QPainter.PixmapFragmentHints', 'QPainter.PixmapFragmentHint']) -> 'QPainter.PixmapFragmentHints': ... + def __and__(self, f: typing.Union['QPainter.PixmapFragmentHints', 'QPainter.PixmapFragmentHint']) -> 'QPainter.PixmapFragmentHints': ... + def __invert__(self) -> 'QPainter.PixmapFragmentHints': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QPaintDevice]) -> None: ... + + def drawGlyphRun(self, position: typing.Union[QtCore.QPointF, QtCore.QPoint], glyphRun: QGlyphRun) -> None: ... + def clipBoundingRect(self) -> QtCore.QRectF: ... + @typing.overload + def drawStaticText(self, topLeftPosition: typing.Union[QtCore.QPointF, QtCore.QPoint], staticText: 'QStaticText') -> None: ... + @typing.overload + def drawStaticText(self, p: QtCore.QPoint, staticText: 'QStaticText') -> None: ... + @typing.overload + def drawStaticText(self, x: int, y: int, staticText: 'QStaticText') -> None: ... + def drawPixmapFragments(self, fragments: typing.Optional[PyQt5.sip.array['QPainter.PixmapFragment']], pixmap: QPixmap, hints: 'QPainter.PixmapFragmentHints' = ...) -> None: ... + def endNativePainting(self) -> None: ... + def beginNativePainting(self) -> None: ... + @typing.overload + def drawRoundedRect(self, rect: QtCore.QRectF, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... + @typing.overload + def drawRoundedRect(self, x: int, y: int, w: int, h: int, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... + @typing.overload + def drawRoundedRect(self, rect: QtCore.QRect, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... + def testRenderHint(self, hint: 'QPainter.RenderHint') -> bool: ... + def combinedTransform(self) -> 'QTransform': ... + def worldTransform(self) -> 'QTransform': ... + def setWorldTransform(self, matrix: 'QTransform', combine: bool = ...) -> None: ... + def resetTransform(self) -> None: ... + def deviceTransform(self) -> 'QTransform': ... + def transform(self) -> 'QTransform': ... + def setTransform(self, transform: 'QTransform', combine: bool = ...) -> None: ... + def setWorldMatrixEnabled(self, enabled: bool) -> None: ... + def worldMatrixEnabled(self) -> bool: ... + def setOpacity(self, opacity: float) -> None: ... + def opacity(self) -> float: ... + @typing.overload + def drawImage(self, r: QtCore.QRectF, image: QImage) -> None: ... + @typing.overload + def drawImage(self, r: QtCore.QRect, image: QImage) -> None: ... + @typing.overload + def drawImage(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint], image: QImage) -> None: ... + @typing.overload + def drawImage(self, p: QtCore.QPoint, image: QImage) -> None: ... + @typing.overload + def drawImage(self, x: int, y: int, image: QImage, sx: int = ..., sy: int = ..., sw: int = ..., sh: int = ..., flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> None: ... + @typing.overload + def drawImage(self, targetRect: QtCore.QRectF, image: QImage, sourceRect: QtCore.QRectF, flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> None: ... + @typing.overload + def drawImage(self, targetRect: QtCore.QRect, image: QImage, sourceRect: QtCore.QRect, flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> None: ... + @typing.overload + def drawImage(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint], image: QImage, sr: QtCore.QRectF, flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> None: ... + @typing.overload + def drawImage(self, p: QtCore.QPoint, image: QImage, sr: QtCore.QRect, flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> None: ... + @typing.overload + def drawPoint(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def drawPoint(self, x: int, y: int) -> None: ... + @typing.overload + def drawPoint(self, p: QtCore.QPoint) -> None: ... + @typing.overload + def drawRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def drawRect(self, x: int, y: int, w: int, h: int) -> None: ... + @typing.overload + def drawRect(self, r: QtCore.QRect) -> None: ... + @typing.overload + def drawLine(self, l: QtCore.QLineF) -> None: ... + @typing.overload + def drawLine(self, line: QtCore.QLine) -> None: ... + @typing.overload + def drawLine(self, x1: int, y1: int, x2: int, y2: int) -> None: ... + @typing.overload + def drawLine(self, p1: QtCore.QPoint, p2: QtCore.QPoint) -> None: ... + @typing.overload + def drawLine(self, p1: typing.Union[QtCore.QPointF, QtCore.QPoint], p2: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def paintEngine(self) -> typing.Optional['QPaintEngine']: ... + def setRenderHints(self, hints: typing.Union['QPainter.RenderHints', 'QPainter.RenderHint'], on: bool = ...) -> None: ... + def renderHints(self) -> 'QPainter.RenderHints': ... + def setRenderHint(self, hint: 'QPainter.RenderHint', on: bool = ...) -> None: ... + @typing.overload + def eraseRect(self, a0: QtCore.QRectF) -> None: ... + @typing.overload + def eraseRect(self, rect: QtCore.QRect) -> None: ... + @typing.overload + def eraseRect(self, x: int, y: int, w: int, h: int) -> None: ... + @typing.overload + def fillRect(self, a0: QtCore.QRectF, a1: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def fillRect(self, a0: QtCore.QRect, a1: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def fillRect(self, x: int, y: int, w: int, h: int, b: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def fillRect(self, a0: QtCore.QRectF, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def fillRect(self, a0: QtCore.QRect, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def fillRect(self, x: int, y: int, w: int, h: int, b: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def fillRect(self, x: int, y: int, w: int, h: int, c: QtCore.Qt.GlobalColor) -> None: ... + @typing.overload + def fillRect(self, r: QtCore.QRect, c: QtCore.Qt.GlobalColor) -> None: ... + @typing.overload + def fillRect(self, r: QtCore.QRectF, c: QtCore.Qt.GlobalColor) -> None: ... + @typing.overload + def fillRect(self, x: int, y: int, w: int, h: int, style: QtCore.Qt.BrushStyle) -> None: ... + @typing.overload + def fillRect(self, r: QtCore.QRect, style: QtCore.Qt.BrushStyle) -> None: ... + @typing.overload + def fillRect(self, r: QtCore.QRectF, style: QtCore.Qt.BrushStyle) -> None: ... + @typing.overload + def fillRect(self, x: int, y: int, w: int, h: int, preset: QGradient.Preset) -> None: ... + @typing.overload + def fillRect(self, r: QtCore.QRect, preset: QGradient.Preset) -> None: ... + @typing.overload + def fillRect(self, r: QtCore.QRectF, preset: QGradient.Preset) -> None: ... + @typing.overload + def boundingRect(self, rect: QtCore.QRectF, flags: int, text: typing.Optional[str]) -> QtCore.QRectF: ... + @typing.overload + def boundingRect(self, rect: QtCore.QRect, flags: int, text: typing.Optional[str]) -> QtCore.QRect: ... + @typing.overload + def boundingRect(self, rectangle: QtCore.QRectF, text: typing.Optional[str], option: 'QTextOption' = ...) -> QtCore.QRectF: ... + @typing.overload + def boundingRect(self, x: int, y: int, w: int, h: int, flags: int, text: typing.Optional[str]) -> QtCore.QRect: ... + @typing.overload + def drawText(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint], s: typing.Optional[str]) -> None: ... + @typing.overload + def drawText(self, rectangle: QtCore.QRectF, flags: int, text: typing.Optional[str]) -> typing.Optional[QtCore.QRectF]: ... + @typing.overload + def drawText(self, rectangle: QtCore.QRect, flags: int, text: typing.Optional[str]) -> typing.Optional[QtCore.QRect]: ... + @typing.overload + def drawText(self, rectangle: QtCore.QRectF, text: typing.Optional[str], option: 'QTextOption' = ...) -> None: ... + @typing.overload + def drawText(self, p: QtCore.QPoint, s: typing.Optional[str]) -> None: ... + @typing.overload + def drawText(self, x: int, y: int, width: int, height: int, flags: int, text: typing.Optional[str]) -> typing.Optional[QtCore.QRect]: ... + @typing.overload + def drawText(self, x: int, y: int, s: typing.Optional[str]) -> None: ... + def layoutDirection(self) -> QtCore.Qt.LayoutDirection: ... + def setLayoutDirection(self, direction: QtCore.Qt.LayoutDirection) -> None: ... + @typing.overload + def drawPixmap(self, targetRect: QtCore.QRectF, pixmap: QPixmap, sourceRect: QtCore.QRectF) -> None: ... + @typing.overload + def drawPixmap(self, targetRect: QtCore.QRect, pixmap: QPixmap, sourceRect: QtCore.QRect) -> None: ... + @typing.overload + def drawPixmap(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint], pm: QPixmap) -> None: ... + @typing.overload + def drawPixmap(self, p: QtCore.QPoint, pm: QPixmap) -> None: ... + @typing.overload + def drawPixmap(self, r: QtCore.QRect, pm: QPixmap) -> None: ... + @typing.overload + def drawPixmap(self, x: int, y: int, pm: QPixmap) -> None: ... + @typing.overload + def drawPixmap(self, x: int, y: int, w: int, h: int, pm: QPixmap) -> None: ... + @typing.overload + def drawPixmap(self, x: int, y: int, w: int, h: int, pm: QPixmap, sx: int, sy: int, sw: int, sh: int) -> None: ... + @typing.overload + def drawPixmap(self, x: int, y: int, pm: QPixmap, sx: int, sy: int, sw: int, sh: int) -> None: ... + @typing.overload + def drawPixmap(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint], pm: QPixmap, sr: QtCore.QRectF) -> None: ... + @typing.overload + def drawPixmap(self, p: QtCore.QPoint, pm: QPixmap, sr: QtCore.QRect) -> None: ... + @typing.overload + def drawPicture(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint], picture: 'QPicture') -> None: ... + @typing.overload + def drawPicture(self, x: int, y: int, p: 'QPicture') -> None: ... + @typing.overload + def drawPicture(self, pt: QtCore.QPoint, p: 'QPicture') -> None: ... + @typing.overload + def drawTiledPixmap(self, rectangle: QtCore.QRectF, pixmap: QPixmap, pos: typing.Union[QtCore.QPointF, QtCore.QPoint] = ...) -> None: ... + @typing.overload + def drawTiledPixmap(self, rectangle: QtCore.QRect, pixmap: QPixmap, pos: QtCore.QPoint = ...) -> None: ... + @typing.overload + def drawTiledPixmap(self, x: int, y: int, width: int, height: int, pixmap: QPixmap, sx: int = ..., sy: int = ...) -> None: ... + @typing.overload + def drawChord(self, rect: QtCore.QRectF, a: int, alen: int) -> None: ... + @typing.overload + def drawChord(self, rect: QtCore.QRect, a: int, alen: int) -> None: ... + @typing.overload + def drawChord(self, x: int, y: int, w: int, h: int, a: int, alen: int) -> None: ... + @typing.overload + def drawPie(self, rect: QtCore.QRectF, a: int, alen: int) -> None: ... + @typing.overload + def drawPie(self, rect: QtCore.QRect, a: int, alen: int) -> None: ... + @typing.overload + def drawPie(self, x: int, y: int, w: int, h: int, a: int, alen: int) -> None: ... + @typing.overload + def drawArc(self, rect: QtCore.QRectF, a: int, alen: int) -> None: ... + @typing.overload + def drawArc(self, r: QtCore.QRect, a: int, alen: int) -> None: ... + @typing.overload + def drawArc(self, x: int, y: int, w: int, h: int, a: int, alen: int) -> None: ... + @typing.overload + def drawConvexPolygon(self, poly: 'QPolygonF') -> None: ... + @typing.overload + def drawConvexPolygon(self, poly: 'QPolygon') -> None: ... + @typing.overload + def drawConvexPolygon(self, points: typing.Optional[PyQt5.sip.array[typing.Union[QtCore.QPointF, QtCore.QPoint]]]) -> None: ... + @typing.overload + def drawConvexPolygon(self, point: typing.Optional[typing.Union[QtCore.QPointF, QtCore.QPoint]], *args: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def drawConvexPolygon(self, points: typing.Optional[PyQt5.sip.array[QtCore.QPoint]]) -> None: ... + @typing.overload + def drawConvexPolygon(self, point: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... + @typing.overload + def drawPolygon(self, points: 'QPolygonF', fillRule: QtCore.Qt.FillRule = ...) -> None: ... + @typing.overload + def drawPolygon(self, points: 'QPolygon', fillRule: QtCore.Qt.FillRule = ...) -> None: ... + @typing.overload + def drawPolygon(self, points: typing.Optional[PyQt5.sip.array[typing.Union[QtCore.QPointF, QtCore.QPoint]]], fillRule: QtCore.Qt.FillRule = ...) -> None: ... + @typing.overload + def drawPolygon(self, point: typing.Optional[typing.Union[QtCore.QPointF, QtCore.QPoint]], *args: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def drawPolygon(self, points: typing.Optional[PyQt5.sip.array[QtCore.QPoint]], fillRule: QtCore.Qt.FillRule = ...) -> None: ... + @typing.overload + def drawPolygon(self, point: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... + @typing.overload + def drawPolyline(self, polyline: 'QPolygonF') -> None: ... + @typing.overload + def drawPolyline(self, polyline: 'QPolygon') -> None: ... + @typing.overload + def drawPolyline(self, points: typing.Optional[PyQt5.sip.array[typing.Union[QtCore.QPointF, QtCore.QPoint]]]) -> None: ... + @typing.overload + def drawPolyline(self, point: typing.Optional[typing.Union[QtCore.QPointF, QtCore.QPoint]], *args: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def drawPolyline(self, points: typing.Optional[PyQt5.sip.array[QtCore.QPoint]]) -> None: ... + @typing.overload + def drawPolyline(self, point: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... + @typing.overload + def drawEllipse(self, r: QtCore.QRectF) -> None: ... + @typing.overload + def drawEllipse(self, r: QtCore.QRect) -> None: ... + @typing.overload + def drawEllipse(self, x: int, y: int, w: int, h: int) -> None: ... + @typing.overload + def drawEllipse(self, center: typing.Union[QtCore.QPointF, QtCore.QPoint], rx: float, ry: float) -> None: ... + @typing.overload + def drawEllipse(self, center: QtCore.QPoint, rx: int, ry: int) -> None: ... + @typing.overload + def drawRects(self, rects: typing.Optional[PyQt5.sip.array[QtCore.QRectF]]) -> None: ... + @typing.overload + def drawRects(self, rect: typing.Optional[QtCore.QRectF], *args: QtCore.QRectF) -> None: ... + @typing.overload + def drawRects(self, rects: typing.Optional[PyQt5.sip.array[QtCore.QRect]]) -> None: ... + @typing.overload + def drawRects(self, rect: typing.Optional[QtCore.QRect], *args: QtCore.QRect) -> None: ... + @typing.overload + def drawLines(self, lines: typing.Optional[PyQt5.sip.array[QtCore.QLineF]]) -> None: ... + @typing.overload + def drawLines(self, line: typing.Optional[QtCore.QLineF], *args: QtCore.QLineF) -> None: ... + @typing.overload + def drawLines(self, pointPairs: typing.Optional[PyQt5.sip.array[typing.Union[QtCore.QPointF, QtCore.QPoint]]]) -> None: ... + @typing.overload + def drawLines(self, pointPair: typing.Optional[typing.Union[QtCore.QPointF, QtCore.QPoint]], *args: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def drawLines(self, lines: typing.Optional[PyQt5.sip.array[QtCore.QLine]]) -> None: ... + @typing.overload + def drawLines(self, line: typing.Optional[QtCore.QLine], *args: QtCore.QLine) -> None: ... + @typing.overload + def drawLines(self, pointPairs: typing.Optional[PyQt5.sip.array[QtCore.QPoint]]) -> None: ... + @typing.overload + def drawLines(self, pointPair: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... + @typing.overload + def drawPoints(self, points: 'QPolygonF') -> None: ... + @typing.overload + def drawPoints(self, points: 'QPolygon') -> None: ... + @typing.overload + def drawPoints(self, points: typing.Optional[PyQt5.sip.array[typing.Union[QtCore.QPointF, QtCore.QPoint]]]) -> None: ... + @typing.overload + def drawPoints(self, point: typing.Optional[typing.Union[QtCore.QPointF, QtCore.QPoint]], *args: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def drawPoints(self, points: typing.Optional[PyQt5.sip.array[QtCore.QPoint]]) -> None: ... + @typing.overload + def drawPoints(self, point: typing.Optional[QtCore.QPoint], *args: QtCore.QPoint) -> None: ... + def drawPath(self, path: 'QPainterPath') -> None: ... + def fillPath(self, path: 'QPainterPath', brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def strokePath(self, path: 'QPainterPath', pen: typing.Union['QPen', typing.Union[QColor, QtCore.Qt.GlobalColor]]) -> None: ... + def viewTransformEnabled(self) -> bool: ... + def setViewTransformEnabled(self, enable: bool) -> None: ... + @typing.overload + def setViewport(self, viewport: QtCore.QRect) -> None: ... + @typing.overload + def setViewport(self, x: int, y: int, w: int, h: int) -> None: ... + def viewport(self) -> QtCore.QRect: ... + @typing.overload + def setWindow(self, window: QtCore.QRect) -> None: ... + @typing.overload + def setWindow(self, x: int, y: int, w: int, h: int) -> None: ... + def window(self) -> QtCore.QRect: ... + @typing.overload + def translate(self, offset: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def translate(self, dx: float, dy: float) -> None: ... + @typing.overload + def translate(self, offset: QtCore.QPoint) -> None: ... + def rotate(self, a: float) -> None: ... + def shear(self, sh: float, sv: float) -> None: ... + def scale(self, sx: float, sy: float) -> None: ... + def restore(self) -> None: ... + def save(self) -> None: ... + def hasClipping(self) -> bool: ... + def setClipping(self, enable: bool) -> None: ... + def setClipPath(self, path: 'QPainterPath', operation: QtCore.Qt.ClipOperation = ...) -> None: ... + def setClipRegion(self, region: 'QRegion', operation: QtCore.Qt.ClipOperation = ...) -> None: ... + @typing.overload + def setClipRect(self, rectangle: QtCore.QRectF, operation: QtCore.Qt.ClipOperation = ...) -> None: ... + @typing.overload + def setClipRect(self, x: int, y: int, width: int, height: int, operation: QtCore.Qt.ClipOperation = ...) -> None: ... + @typing.overload + def setClipRect(self, rectangle: QtCore.QRect, operation: QtCore.Qt.ClipOperation = ...) -> None: ... + def clipPath(self) -> 'QPainterPath': ... + def clipRegion(self) -> 'QRegion': ... + def background(self) -> QBrush: ... + def setBackground(self, bg: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def setBrushOrigin(self, a0: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setBrushOrigin(self, x: int, y: int) -> None: ... + @typing.overload + def setBrushOrigin(self, p: QtCore.QPoint) -> None: ... + def brushOrigin(self) -> QtCore.QPoint: ... + def backgroundMode(self) -> QtCore.Qt.BGMode: ... + def setBackgroundMode(self, mode: QtCore.Qt.BGMode) -> None: ... + def brush(self) -> QBrush: ... + @typing.overload + def setBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def setBrush(self, style: QtCore.Qt.BrushStyle) -> None: ... + def pen(self) -> 'QPen': ... + @typing.overload + def setPen(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def setPen(self, pen: typing.Union['QPen', typing.Union[QColor, QtCore.Qt.GlobalColor]]) -> None: ... + @typing.overload + def setPen(self, style: QtCore.Qt.PenStyle) -> None: ... + def fontInfo(self) -> QFontInfo: ... + def fontMetrics(self) -> QFontMetrics: ... + def setFont(self, f: QFont) -> None: ... + def font(self) -> QFont: ... + def compositionMode(self) -> 'QPainter.CompositionMode': ... + def setCompositionMode(self, mode: 'QPainter.CompositionMode') -> None: ... + def isActive(self) -> bool: ... + def end(self) -> bool: ... + def begin(self, a0: typing.Optional[QPaintDevice]) -> bool: ... + def device(self) -> typing.Optional[QPaintDevice]: ... + def __exit__(self, type: typing.Any, value: typing.Any, traceback: typing.Any) -> None: ... + def __enter__(self) -> typing.Any: ... + + +class QTextItem(PyQt5.sipsimplewrapper): + + class RenderFlag(int): + RightToLeft = ... # type: QTextItem.RenderFlag + Overline = ... # type: QTextItem.RenderFlag + Underline = ... # type: QTextItem.RenderFlag + StrikeOut = ... # type: QTextItem.RenderFlag + + class RenderFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextItem.RenderFlags', 'QTextItem.RenderFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextItem.RenderFlags', 'QTextItem.RenderFlag']) -> 'QTextItem.RenderFlags': ... + def __xor__(self, f: typing.Union['QTextItem.RenderFlags', 'QTextItem.RenderFlag']) -> 'QTextItem.RenderFlags': ... + def __ior__(self, f: typing.Union['QTextItem.RenderFlags', 'QTextItem.RenderFlag']) -> 'QTextItem.RenderFlags': ... + def __or__(self, f: typing.Union['QTextItem.RenderFlags', 'QTextItem.RenderFlag']) -> 'QTextItem.RenderFlags': ... + def __iand__(self, f: typing.Union['QTextItem.RenderFlags', 'QTextItem.RenderFlag']) -> 'QTextItem.RenderFlags': ... + def __and__(self, f: typing.Union['QTextItem.RenderFlags', 'QTextItem.RenderFlag']) -> 'QTextItem.RenderFlags': ... + def __invert__(self) -> 'QTextItem.RenderFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextItem') -> None: ... + + def font(self) -> QFont: ... + def text(self) -> str: ... + def renderFlags(self) -> 'QTextItem.RenderFlags': ... + def width(self) -> float: ... + def ascent(self) -> float: ... + def descent(self) -> float: ... + + +class QPaintEngine(PyQt5.sipsimplewrapper): + + class Type(int): + X11 = ... # type: QPaintEngine.Type + Windows = ... # type: QPaintEngine.Type + QuickDraw = ... # type: QPaintEngine.Type + CoreGraphics = ... # type: QPaintEngine.Type + MacPrinter = ... # type: QPaintEngine.Type + QWindowSystem = ... # type: QPaintEngine.Type + PostScript = ... # type: QPaintEngine.Type + OpenGL = ... # type: QPaintEngine.Type + Picture = ... # type: QPaintEngine.Type + SVG = ... # type: QPaintEngine.Type + Raster = ... # type: QPaintEngine.Type + Direct3D = ... # type: QPaintEngine.Type + Pdf = ... # type: QPaintEngine.Type + OpenVG = ... # type: QPaintEngine.Type + OpenGL2 = ... # type: QPaintEngine.Type + PaintBuffer = ... # type: QPaintEngine.Type + Blitter = ... # type: QPaintEngine.Type + Direct2D = ... # type: QPaintEngine.Type + User = ... # type: QPaintEngine.Type + MaxUser = ... # type: QPaintEngine.Type + + class PolygonDrawMode(int): + OddEvenMode = ... # type: QPaintEngine.PolygonDrawMode + WindingMode = ... # type: QPaintEngine.PolygonDrawMode + ConvexMode = ... # type: QPaintEngine.PolygonDrawMode + PolylineMode = ... # type: QPaintEngine.PolygonDrawMode + + class DirtyFlag(int): + DirtyPen = ... # type: QPaintEngine.DirtyFlag + DirtyBrush = ... # type: QPaintEngine.DirtyFlag + DirtyBrushOrigin = ... # type: QPaintEngine.DirtyFlag + DirtyFont = ... # type: QPaintEngine.DirtyFlag + DirtyBackground = ... # type: QPaintEngine.DirtyFlag + DirtyBackgroundMode = ... # type: QPaintEngine.DirtyFlag + DirtyTransform = ... # type: QPaintEngine.DirtyFlag + DirtyClipRegion = ... # type: QPaintEngine.DirtyFlag + DirtyClipPath = ... # type: QPaintEngine.DirtyFlag + DirtyHints = ... # type: QPaintEngine.DirtyFlag + DirtyCompositionMode = ... # type: QPaintEngine.DirtyFlag + DirtyClipEnabled = ... # type: QPaintEngine.DirtyFlag + DirtyOpacity = ... # type: QPaintEngine.DirtyFlag + AllDirty = ... # type: QPaintEngine.DirtyFlag + + class PaintEngineFeature(int): + PrimitiveTransform = ... # type: QPaintEngine.PaintEngineFeature + PatternTransform = ... # type: QPaintEngine.PaintEngineFeature + PixmapTransform = ... # type: QPaintEngine.PaintEngineFeature + PatternBrush = ... # type: QPaintEngine.PaintEngineFeature + LinearGradientFill = ... # type: QPaintEngine.PaintEngineFeature + RadialGradientFill = ... # type: QPaintEngine.PaintEngineFeature + ConicalGradientFill = ... # type: QPaintEngine.PaintEngineFeature + AlphaBlend = ... # type: QPaintEngine.PaintEngineFeature + PorterDuff = ... # type: QPaintEngine.PaintEngineFeature + PainterPaths = ... # type: QPaintEngine.PaintEngineFeature + Antialiasing = ... # type: QPaintEngine.PaintEngineFeature + BrushStroke = ... # type: QPaintEngine.PaintEngineFeature + ConstantOpacity = ... # type: QPaintEngine.PaintEngineFeature + MaskedBrush = ... # type: QPaintEngine.PaintEngineFeature + PaintOutsidePaintEvent = ... # type: QPaintEngine.PaintEngineFeature + PerspectiveTransform = ... # type: QPaintEngine.PaintEngineFeature + BlendModes = ... # type: QPaintEngine.PaintEngineFeature + ObjectBoundingModeGradients = ... # type: QPaintEngine.PaintEngineFeature + RasterOpModes = ... # type: QPaintEngine.PaintEngineFeature + AllFeatures = ... # type: QPaintEngine.PaintEngineFeature + + class PaintEngineFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature']) -> 'QPaintEngine.PaintEngineFeatures': ... + def __xor__(self, f: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature']) -> 'QPaintEngine.PaintEngineFeatures': ... + def __ior__(self, f: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature']) -> 'QPaintEngine.PaintEngineFeatures': ... + def __or__(self, f: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature']) -> 'QPaintEngine.PaintEngineFeatures': ... + def __iand__(self, f: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature']) -> 'QPaintEngine.PaintEngineFeatures': ... + def __and__(self, f: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature']) -> 'QPaintEngine.PaintEngineFeatures': ... + def __invert__(self) -> 'QPaintEngine.PaintEngineFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class DirtyFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QPaintEngine.DirtyFlags', 'QPaintEngine.DirtyFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QPaintEngine.DirtyFlags', 'QPaintEngine.DirtyFlag']) -> 'QPaintEngine.DirtyFlags': ... + def __xor__(self, f: typing.Union['QPaintEngine.DirtyFlags', 'QPaintEngine.DirtyFlag']) -> 'QPaintEngine.DirtyFlags': ... + def __ior__(self, f: typing.Union['QPaintEngine.DirtyFlags', 'QPaintEngine.DirtyFlag']) -> 'QPaintEngine.DirtyFlags': ... + def __or__(self, f: typing.Union['QPaintEngine.DirtyFlags', 'QPaintEngine.DirtyFlag']) -> 'QPaintEngine.DirtyFlags': ... + def __iand__(self, f: typing.Union['QPaintEngine.DirtyFlags', 'QPaintEngine.DirtyFlag']) -> 'QPaintEngine.DirtyFlags': ... + def __and__(self, f: typing.Union['QPaintEngine.DirtyFlags', 'QPaintEngine.DirtyFlag']) -> 'QPaintEngine.DirtyFlags': ... + def __invert__(self) -> 'QPaintEngine.DirtyFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, features: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature'] = ...) -> None: ... + + def hasFeature(self, feature: typing.Union['QPaintEngine.PaintEngineFeatures', 'QPaintEngine.PaintEngineFeature']) -> bool: ... + def painter(self) -> typing.Optional[QPainter]: ... + def type(self) -> 'QPaintEngine.Type': ... + def paintDevice(self) -> typing.Optional[QPaintDevice]: ... + def setPaintDevice(self, device: typing.Optional[QPaintDevice]) -> None: ... + def drawImage(self, r: QtCore.QRectF, pm: QImage, sr: QtCore.QRectF, flags: typing.Union[QtCore.Qt.ImageConversionFlags, QtCore.Qt.ImageConversionFlag] = ...) -> None: ... + def drawTiledPixmap(self, r: QtCore.QRectF, pixmap: QPixmap, s: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def drawTextItem(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint], textItem: QTextItem) -> None: ... + def drawPixmap(self, r: QtCore.QRectF, pm: QPixmap, sr: QtCore.QRectF) -> None: ... + @typing.overload + def drawPolygon(self, points: typing.Optional[PyQt5.sip.array[typing.Union[QtCore.QPointF, QtCore.QPoint]]], mode: 'QPaintEngine.PolygonDrawMode') -> None: ... + @typing.overload + def drawPolygon(self, points: typing.Optional[PyQt5.sip.array[QtCore.QPoint]], mode: 'QPaintEngine.PolygonDrawMode') -> None: ... + @typing.overload + def drawPoints(self, points: typing.Optional[PyQt5.sip.array[typing.Union[QtCore.QPointF, QtCore.QPoint]]]) -> None: ... + @typing.overload + def drawPoints(self, points: typing.Optional[PyQt5.sip.array[QtCore.QPoint]]) -> None: ... + def drawPath(self, path: 'QPainterPath') -> None: ... + @typing.overload + def drawEllipse(self, r: QtCore.QRectF) -> None: ... + @typing.overload + def drawEllipse(self, r: QtCore.QRect) -> None: ... + @typing.overload + def drawLines(self, lines: typing.Optional[PyQt5.sip.array[QtCore.QLine]]) -> None: ... + @typing.overload + def drawLines(self, lines: typing.Optional[PyQt5.sip.array[QtCore.QLineF]]) -> None: ... + @typing.overload + def drawRects(self, rects: typing.Optional[PyQt5.sip.array[QtCore.QRect]]) -> None: ... + @typing.overload + def drawRects(self, rects: typing.Optional[PyQt5.sip.array[QtCore.QRectF]]) -> None: ... + def updateState(self, state: 'QPaintEngineState') -> None: ... + def end(self) -> bool: ... + def begin(self, pdev: typing.Optional[QPaintDevice]) -> bool: ... + def setActive(self, newState: bool) -> None: ... + def isActive(self) -> bool: ... + + +class QPaintEngineState(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QPaintEngineState') -> None: ... + + def penNeedsResolving(self) -> bool: ... + def brushNeedsResolving(self) -> bool: ... + def transform(self) -> 'QTransform': ... + def painter(self) -> typing.Optional[QPainter]: ... + def compositionMode(self) -> QPainter.CompositionMode: ... + def renderHints(self) -> QPainter.RenderHints: ... + def isClipEnabled(self) -> bool: ... + def clipPath(self) -> 'QPainterPath': ... + def clipRegion(self) -> 'QRegion': ... + def clipOperation(self) -> QtCore.Qt.ClipOperation: ... + def opacity(self) -> float: ... + def font(self) -> QFont: ... + def backgroundMode(self) -> QtCore.Qt.BGMode: ... + def backgroundBrush(self) -> QBrush: ... + def brushOrigin(self) -> QtCore.QPointF: ... + def brush(self) -> QBrush: ... + def pen(self) -> 'QPen': ... + def state(self) -> QPaintEngine.DirtyFlags: ... + + +class QPainterPath(PyQt5.sipsimplewrapper): + + class ElementType(int): + MoveToElement = ... # type: QPainterPath.ElementType + LineToElement = ... # type: QPainterPath.ElementType + CurveToElement = ... # type: QPainterPath.ElementType + CurveToDataElement = ... # type: QPainterPath.ElementType + + class Element(PyQt5.sipsimplewrapper): + + type = ... # type: 'QPainterPath.ElementType' + x = ... # type: float + y = ... # type: float + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QPainterPath.Element') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isCurveTo(self) -> bool: ... + def isLineTo(self) -> bool: ... + def isMoveTo(self) -> bool: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, startPoint: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, other: 'QPainterPath') -> None: ... + + def __mul__(self, m: 'QTransform') -> 'QPainterPath': ... + def capacity(self) -> int: ... + def reserve(self, size: int) -> None: ... + def clear(self) -> None: ... + def swap(self, other: 'QPainterPath') -> None: ... + @typing.overload + def translated(self, dx: float, dy: float) -> 'QPainterPath': ... + @typing.overload + def translated(self, offset: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> 'QPainterPath': ... + @typing.overload + def translate(self, dx: float, dy: float) -> None: ... + @typing.overload + def translate(self, offset: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def __isub__(self, other: 'QPainterPath') -> 'QPainterPath': ... + def __iadd__(self, other: 'QPainterPath') -> 'QPainterPath': ... + def __ior__(self, other: 'QPainterPath') -> 'QPainterPath': ... + def __iand__(self, other: 'QPainterPath') -> 'QPainterPath': ... + def __sub__(self, other: 'QPainterPath') -> 'QPainterPath': ... + def __add__(self, other: 'QPainterPath') -> 'QPainterPath': ... + def __or__(self, other: 'QPainterPath') -> 'QPainterPath': ... + def __and__(self, other: 'QPainterPath') -> 'QPainterPath': ... + def simplified(self) -> 'QPainterPath': ... + @typing.overload + def addRoundedRect(self, rect: QtCore.QRectF, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... + @typing.overload + def addRoundedRect(self, x: float, y: float, w: float, h: float, xRadius: float, yRadius: float, mode: QtCore.Qt.SizeMode = ...) -> None: ... + def subtracted(self, r: 'QPainterPath') -> 'QPainterPath': ... + def intersected(self, r: 'QPainterPath') -> 'QPainterPath': ... + def united(self, r: 'QPainterPath') -> 'QPainterPath': ... + def slopeAtPercent(self, t: float) -> float: ... + def angleAtPercent(self, t: float) -> float: ... + def pointAtPercent(self, t: float) -> QtCore.QPointF: ... + def percentAtLength(self, t: float) -> float: ... + def length(self) -> float: ... + def setElementPositionAt(self, i: int, x: float, y: float) -> None: ... + def elementAt(self, i: int) -> 'QPainterPath.Element': ... + def elementCount(self) -> int: ... + def isEmpty(self) -> bool: ... + @typing.overload + def arcMoveTo(self, rect: QtCore.QRectF, angle: float) -> None: ... + @typing.overload + def arcMoveTo(self, x: float, y: float, w: float, h: float, angle: float) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @typing.overload + def toFillPolygon(self) -> 'QPolygonF': ... + @typing.overload + def toFillPolygon(self, matrix: 'QTransform') -> 'QPolygonF': ... + @typing.overload + def toFillPolygons(self) -> typing.List['QPolygonF']: ... + @typing.overload + def toFillPolygons(self, matrix: 'QTransform') -> typing.List['QPolygonF']: ... + @typing.overload + def toSubpathPolygons(self) -> typing.List['QPolygonF']: ... + @typing.overload + def toSubpathPolygons(self, matrix: 'QTransform') -> typing.List['QPolygonF']: ... + def toReversed(self) -> 'QPainterPath': ... + def setFillRule(self, fillRule: QtCore.Qt.FillRule) -> None: ... + def fillRule(self) -> QtCore.Qt.FillRule: ... + def controlPointRect(self) -> QtCore.QRectF: ... + def boundingRect(self) -> QtCore.QRectF: ... + @typing.overload + def intersects(self, rect: QtCore.QRectF) -> bool: ... + @typing.overload + def intersects(self, p: 'QPainterPath') -> bool: ... + @typing.overload + def contains(self, pt: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + @typing.overload + def contains(self, rect: QtCore.QRectF) -> bool: ... + @typing.overload + def contains(self, p: 'QPainterPath') -> bool: ... + def connectPath(self, path: 'QPainterPath') -> None: ... + def addRegion(self, region: 'QRegion') -> None: ... + def addPath(self, path: 'QPainterPath') -> None: ... + @typing.overload + def addText(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint], f: QFont, text: typing.Optional[str]) -> None: ... + @typing.overload + def addText(self, x: float, y: float, f: QFont, text: typing.Optional[str]) -> None: ... + def addPolygon(self, polygon: 'QPolygonF') -> None: ... + @typing.overload + def addEllipse(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def addEllipse(self, x: float, y: float, w: float, h: float) -> None: ... + @typing.overload + def addEllipse(self, center: typing.Union[QtCore.QPointF, QtCore.QPoint], rx: float, ry: float) -> None: ... + @typing.overload + def addRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def addRect(self, x: float, y: float, w: float, h: float) -> None: ... + def currentPosition(self) -> QtCore.QPointF: ... + @typing.overload + def quadTo(self, ctrlPt: typing.Union[QtCore.QPointF, QtCore.QPoint], endPt: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def quadTo(self, ctrlPtx: float, ctrlPty: float, endPtx: float, endPty: float) -> None: ... + @typing.overload + def cubicTo(self, ctrlPt1: typing.Union[QtCore.QPointF, QtCore.QPoint], ctrlPt2: typing.Union[QtCore.QPointF, QtCore.QPoint], endPt: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def cubicTo(self, ctrlPt1x: float, ctrlPt1y: float, ctrlPt2x: float, ctrlPt2y: float, endPtx: float, endPty: float) -> None: ... + @typing.overload + def arcTo(self, rect: QtCore.QRectF, startAngle: float, arcLength: float) -> None: ... + @typing.overload + def arcTo(self, x: float, y: float, w: float, h: float, startAngle: float, arcLenght: float) -> None: ... + @typing.overload + def lineTo(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def lineTo(self, x: float, y: float) -> None: ... + @typing.overload + def moveTo(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def moveTo(self, x: float, y: float) -> None: ... + def closeSubpath(self) -> None: ... + + +class QPainterPathStroker(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pen: typing.Union['QPen', typing.Union[QColor, QtCore.Qt.GlobalColor]]) -> None: ... + + def dashOffset(self) -> float: ... + def setDashOffset(self, offset: float) -> None: ... + def createStroke(self, path: QPainterPath) -> QPainterPath: ... + def dashPattern(self) -> typing.List[float]: ... + @typing.overload + def setDashPattern(self, a0: QtCore.Qt.PenStyle) -> None: ... + @typing.overload + def setDashPattern(self, dashPattern: typing.Iterable[float]) -> None: ... + def curveThreshold(self) -> float: ... + def setCurveThreshold(self, threshold: float) -> None: ... + def miterLimit(self) -> float: ... + def setMiterLimit(self, length: float) -> None: ... + def joinStyle(self) -> QtCore.Qt.PenJoinStyle: ... + def setJoinStyle(self, style: QtCore.Qt.PenJoinStyle) -> None: ... + def capStyle(self) -> QtCore.Qt.PenCapStyle: ... + def setCapStyle(self, style: QtCore.Qt.PenCapStyle) -> None: ... + def width(self) -> float: ... + def setWidth(self, width: float) -> None: ... + + +class QPalette(PyQt5.sipsimplewrapper): + + class ColorRole(int): + WindowText = ... # type: QPalette.ColorRole + Foreground = ... # type: QPalette.ColorRole + Button = ... # type: QPalette.ColorRole + Light = ... # type: QPalette.ColorRole + Midlight = ... # type: QPalette.ColorRole + Dark = ... # type: QPalette.ColorRole + Mid = ... # type: QPalette.ColorRole + Text = ... # type: QPalette.ColorRole + BrightText = ... # type: QPalette.ColorRole + ButtonText = ... # type: QPalette.ColorRole + Base = ... # type: QPalette.ColorRole + Window = ... # type: QPalette.ColorRole + Background = ... # type: QPalette.ColorRole + Shadow = ... # type: QPalette.ColorRole + Highlight = ... # type: QPalette.ColorRole + HighlightedText = ... # type: QPalette.ColorRole + Link = ... # type: QPalette.ColorRole + LinkVisited = ... # type: QPalette.ColorRole + AlternateBase = ... # type: QPalette.ColorRole + ToolTipBase = ... # type: QPalette.ColorRole + ToolTipText = ... # type: QPalette.ColorRole + PlaceholderText = ... # type: QPalette.ColorRole + NoRole = ... # type: QPalette.ColorRole + NColorRoles = ... # type: QPalette.ColorRole + + class ColorGroup(int): + Active = ... # type: QPalette.ColorGroup + Disabled = ... # type: QPalette.ColorGroup + Inactive = ... # type: QPalette.ColorGroup + NColorGroups = ... # type: QPalette.ColorGroup + Current = ... # type: QPalette.ColorGroup + All = ... # type: QPalette.ColorGroup + Normal = ... # type: QPalette.ColorGroup + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, button: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def __init__(self, button: QtCore.Qt.GlobalColor) -> None: ... + @typing.overload + def __init__(self, button: typing.Union[QColor, QtCore.Qt.GlobalColor], background: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def __init__(self, foreground: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], button: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], light: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], dark: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], mid: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], text: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], bright_text: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], base: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], background: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def __init__(self, palette: 'QPalette') -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def swap(self, other: 'QPalette') -> None: ... + def cacheKey(self) -> int: ... + def isBrushSet(self, cg: 'QPalette.ColorGroup', cr: 'QPalette.ColorRole') -> bool: ... + @typing.overload + def setColor(self, acg: 'QPalette.ColorGroup', acr: 'QPalette.ColorRole', acolor: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def setColor(self, acr: 'QPalette.ColorRole', acolor: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def resolve(self, a0: 'QPalette') -> 'QPalette': ... + @typing.overload + def resolve(self) -> int: ... + @typing.overload + def resolve(self, mask: int) -> None: ... + def isCopyOf(self, p: 'QPalette') -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def placeholderText(self) -> QBrush: ... + def toolTipText(self) -> QBrush: ... + def toolTipBase(self) -> QBrush: ... + def linkVisited(self) -> QBrush: ... + def link(self) -> QBrush: ... + def highlightedText(self) -> QBrush: ... + def highlight(self) -> QBrush: ... + def shadow(self) -> QBrush: ... + def buttonText(self) -> QBrush: ... + def brightText(self) -> QBrush: ... + def midlight(self) -> QBrush: ... + def window(self) -> QBrush: ... + def alternateBase(self) -> QBrush: ... + def base(self) -> QBrush: ... + def text(self) -> QBrush: ... + def mid(self) -> QBrush: ... + def dark(self) -> QBrush: ... + def light(self) -> QBrush: ... + def button(self) -> QBrush: ... + def windowText(self) -> QBrush: ... + def isEqual(self, cr1: 'QPalette.ColorGroup', cr2: 'QPalette.ColorGroup') -> bool: ... + def setColorGroup(self, cr: 'QPalette.ColorGroup', foreground: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], button: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], light: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], dark: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], mid: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], text: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], bright_text: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], base: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], background: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def setBrush(self, cg: 'QPalette.ColorGroup', cr: 'QPalette.ColorRole', brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def setBrush(self, acr: 'QPalette.ColorRole', abrush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + @typing.overload + def brush(self, cg: 'QPalette.ColorGroup', cr: 'QPalette.ColorRole') -> QBrush: ... + @typing.overload + def brush(self, cr: 'QPalette.ColorRole') -> QBrush: ... + @typing.overload + def color(self, cg: 'QPalette.ColorGroup', cr: 'QPalette.ColorRole') -> QColor: ... + @typing.overload + def color(self, cr: 'QPalette.ColorRole') -> QColor: ... + def setCurrentColorGroup(self, cg: 'QPalette.ColorGroup') -> None: ... + def currentColorGroup(self) -> 'QPalette.ColorGroup': ... + + +class QPdfWriter(QtCore.QObject, QPagedPaintDevice): + + @typing.overload + def __init__(self, filename: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + + def addFileAttachment(self, fileName: typing.Optional[str], data: typing.Union[QtCore.QByteArray, bytes, bytearray], mimeType: typing.Optional[str] = ...) -> None: ... + def documentXmpMetadata(self) -> QtCore.QByteArray: ... + def setDocumentXmpMetadata(self, xmpMetadata: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def pdfVersion(self) -> QPagedPaintDevice.PdfVersion: ... + def setPdfVersion(self, version: QPagedPaintDevice.PdfVersion) -> None: ... + def resolution(self) -> int: ... + def setResolution(self, resolution: int) -> None: ... + def metric(self, id: QPaintDevice.PaintDeviceMetric) -> int: ... + def paintEngine(self) -> typing.Optional[QPaintEngine]: ... + def setMargins(self, m: QPagedPaintDevice.Margins) -> None: ... + def setPageSizeMM(self, size: QtCore.QSizeF) -> None: ... + @typing.overload + def setPageSize(self, size: QPagedPaintDevice.PageSize) -> None: ... + @typing.overload + def setPageSize(self, pageSize: QPageSize) -> bool: ... + def newPage(self) -> bool: ... + def setCreator(self, creator: typing.Optional[str]) -> None: ... + def creator(self) -> str: ... + def setTitle(self, title: typing.Optional[str]) -> None: ... + def title(self) -> str: ... + + +class QPen(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: QtCore.Qt.PenStyle) -> None: ... + @typing.overload + def __init__(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient], width: float, style: QtCore.Qt.PenStyle = ..., cap: QtCore.Qt.PenCapStyle = ..., join: QtCore.Qt.PenJoinStyle = ...) -> None: ... + @typing.overload + def __init__(self, pen: typing.Union['QPen', typing.Union[QColor, QtCore.Qt.GlobalColor]]) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def swap(self, other: 'QPen') -> None: ... + def setCosmetic(self, cosmetic: bool) -> None: ... + def isCosmetic(self) -> bool: ... + def setDashOffset(self, doffset: float) -> None: ... + def dashOffset(self) -> float: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def setMiterLimit(self, limit: float) -> None: ... + def miterLimit(self) -> float: ... + def setDashPattern(self, pattern: typing.Iterable[float]) -> None: ... + def dashPattern(self) -> typing.List[float]: ... + def setJoinStyle(self, pcs: QtCore.Qt.PenJoinStyle) -> None: ... + def joinStyle(self) -> QtCore.Qt.PenJoinStyle: ... + def setCapStyle(self, pcs: QtCore.Qt.PenCapStyle) -> None: ... + def capStyle(self) -> QtCore.Qt.PenCapStyle: ... + def isSolid(self) -> bool: ... + def setBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def brush(self) -> QBrush: ... + def setColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + def color(self) -> QColor: ... + def setWidth(self, width: int) -> None: ... + def width(self) -> int: ... + def setWidthF(self, width: float) -> None: ... + def widthF(self) -> float: ... + def setStyle(self, a0: QtCore.Qt.PenStyle) -> None: ... + def style(self) -> QtCore.Qt.PenStyle: ... + + +class QPicture(QPaintDevice): + + @typing.overload + def __init__(self, formatVersion: int = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QPicture') -> None: ... + + def swap(self, other: 'QPicture') -> None: ... + def metric(self, m: QPaintDevice.PaintDeviceMetric) -> int: ... + def paintEngine(self) -> typing.Optional[QPaintEngine]: ... + def isDetached(self) -> bool: ... + def detach(self) -> None: ... + def setBoundingRect(self, r: QtCore.QRect) -> None: ... + def boundingRect(self) -> QtCore.QRect: ... + @typing.overload + def save(self, dev: typing.Optional[QtCore.QIODevice], format: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def save(self, fileName: typing.Optional[str], format: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def load(self, dev: typing.Optional[QtCore.QIODevice], format: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def load(self, fileName: typing.Optional[str], format: typing.Optional[str] = ...) -> bool: ... + def play(self, p: typing.Optional[QPainter]) -> bool: ... + def setData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> None: ... + def data(self) -> typing.Optional[bytes]: ... + def size(self) -> int: ... + def devType(self) -> int: ... + def isNull(self) -> bool: ... + + +class QPictureIO(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, ioDevice: typing.Optional[QtCore.QIODevice], format: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: typing.Optional[str]) -> None: ... + + @staticmethod + def defineIOHandler(format: typing.Optional[str], header: typing.Optional[str], flags: typing.Optional[str], read_picture: typing.Optional[typing.Callable[['QPictureIO'], None]], write_picture: typing.Optional[typing.Callable[['QPictureIO'], None]]) -> None: ... + @staticmethod + def outputFormats() -> typing.List[QtCore.QByteArray]: ... + @staticmethod + def inputFormats() -> typing.List[QtCore.QByteArray]: ... + @typing.overload + @staticmethod + def pictureFormat(fileName: typing.Optional[str]) -> QtCore.QByteArray: ... + @typing.overload + @staticmethod + def pictureFormat(a0: typing.Optional[QtCore.QIODevice]) -> QtCore.QByteArray: ... + def write(self) -> bool: ... + def read(self) -> bool: ... + def setGamma(self, a0: float) -> None: ... + def setParameters(self, a0: typing.Optional[str]) -> None: ... + def setDescription(self, a0: typing.Optional[str]) -> None: ... + def setQuality(self, a0: int) -> None: ... + def setFileName(self, a0: typing.Optional[str]) -> None: ... + def setIODevice(self, a0: typing.Optional[QtCore.QIODevice]) -> None: ... + def setFormat(self, a0: typing.Optional[str]) -> None: ... + def setStatus(self, a0: int) -> None: ... + def setPicture(self, a0: QPicture) -> None: ... + def gamma(self) -> float: ... + def parameters(self) -> typing.Optional[str]: ... + def description(self) -> str: ... + def quality(self) -> int: ... + def fileName(self) -> str: ... + def ioDevice(self) -> typing.Optional[QtCore.QIODevice]: ... + def format(self) -> typing.Optional[str]: ... + def status(self) -> int: ... + def picture(self) -> QPicture: ... + + +class QPixelFormat(PyQt5.sipsimplewrapper): + + class ByteOrder(int): + LittleEndian = ... # type: QPixelFormat.ByteOrder + BigEndian = ... # type: QPixelFormat.ByteOrder + CurrentSystemEndian = ... # type: QPixelFormat.ByteOrder + + class YUVLayout(int): + YUV444 = ... # type: QPixelFormat.YUVLayout + YUV422 = ... # type: QPixelFormat.YUVLayout + YUV411 = ... # type: QPixelFormat.YUVLayout + YUV420P = ... # type: QPixelFormat.YUVLayout + YUV420SP = ... # type: QPixelFormat.YUVLayout + YV12 = ... # type: QPixelFormat.YUVLayout + UYVY = ... # type: QPixelFormat.YUVLayout + YUYV = ... # type: QPixelFormat.YUVLayout + NV12 = ... # type: QPixelFormat.YUVLayout + NV21 = ... # type: QPixelFormat.YUVLayout + IMC1 = ... # type: QPixelFormat.YUVLayout + IMC2 = ... # type: QPixelFormat.YUVLayout + IMC3 = ... # type: QPixelFormat.YUVLayout + IMC4 = ... # type: QPixelFormat.YUVLayout + Y8 = ... # type: QPixelFormat.YUVLayout + Y16 = ... # type: QPixelFormat.YUVLayout + + class TypeInterpretation(int): + UnsignedInteger = ... # type: QPixelFormat.TypeInterpretation + UnsignedShort = ... # type: QPixelFormat.TypeInterpretation + UnsignedByte = ... # type: QPixelFormat.TypeInterpretation + FloatingPoint = ... # type: QPixelFormat.TypeInterpretation + + class AlphaPremultiplied(int): + NotPremultiplied = ... # type: QPixelFormat.AlphaPremultiplied + Premultiplied = ... # type: QPixelFormat.AlphaPremultiplied + + class AlphaPosition(int): + AtBeginning = ... # type: QPixelFormat.AlphaPosition + AtEnd = ... # type: QPixelFormat.AlphaPosition + + class AlphaUsage(int): + UsesAlpha = ... # type: QPixelFormat.AlphaUsage + IgnoresAlpha = ... # type: QPixelFormat.AlphaUsage + + class ColorModel(int): + RGB = ... # type: QPixelFormat.ColorModel + BGR = ... # type: QPixelFormat.ColorModel + Indexed = ... # type: QPixelFormat.ColorModel + Grayscale = ... # type: QPixelFormat.ColorModel + CMYK = ... # type: QPixelFormat.ColorModel + HSL = ... # type: QPixelFormat.ColorModel + HSV = ... # type: QPixelFormat.ColorModel + YUV = ... # type: QPixelFormat.ColorModel + Alpha = ... # type: QPixelFormat.ColorModel + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, mdl: 'QPixelFormat.ColorModel', firstSize: int, secondSize: int, thirdSize: int, fourthSize: int, fifthSize: int, alfa: int, usage: 'QPixelFormat.AlphaUsage', position: 'QPixelFormat.AlphaPosition', premult: 'QPixelFormat.AlphaPremultiplied', typeInterp: 'QPixelFormat.TypeInterpretation', byteOrder: 'QPixelFormat.ByteOrder' = ..., subEnum: int = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QPixelFormat') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def subEnum(self) -> int: ... + def yuvLayout(self) -> 'QPixelFormat.YUVLayout': ... + def byteOrder(self) -> 'QPixelFormat.ByteOrder': ... + def typeInterpretation(self) -> 'QPixelFormat.TypeInterpretation': ... + def premultiplied(self) -> 'QPixelFormat.AlphaPremultiplied': ... + def alphaPosition(self) -> 'QPixelFormat.AlphaPosition': ... + def alphaUsage(self) -> 'QPixelFormat.AlphaUsage': ... + def bitsPerPixel(self) -> int: ... + def alphaSize(self) -> int: ... + def brightnessSize(self) -> int: ... + def lightnessSize(self) -> int: ... + def saturationSize(self) -> int: ... + def hueSize(self) -> int: ... + def blackSize(self) -> int: ... + def yellowSize(self) -> int: ... + def magentaSize(self) -> int: ... + def cyanSize(self) -> int: ... + def blueSize(self) -> int: ... + def greenSize(self) -> int: ... + def redSize(self) -> int: ... + def channelCount(self) -> int: ... + def colorModel(self) -> 'QPixelFormat.ColorModel': ... + + +class QPixmapCache(PyQt5.sipsimplewrapper): + + class Key(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPixmapCache.Key') -> None: ... + + def isValid(self) -> bool: ... + def swap(self, other: 'QPixmapCache.Key') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QPixmapCache') -> None: ... + + @staticmethod + def setCacheLimit(a0: int) -> None: ... + @staticmethod + def replace(key: 'QPixmapCache.Key', pixmap: QPixmap) -> bool: ... + @typing.overload + @staticmethod + def remove(key: typing.Optional[str]) -> None: ... + @typing.overload + @staticmethod + def remove(key: 'QPixmapCache.Key') -> None: ... + @typing.overload + @staticmethod + def insert(key: typing.Optional[str], a1: QPixmap) -> bool: ... + @typing.overload + @staticmethod + def insert(pixmap: QPixmap) -> 'QPixmapCache.Key': ... + @typing.overload + @staticmethod + def find(key: typing.Optional[str]) -> QPixmap: ... + @typing.overload + @staticmethod + def find(key: 'QPixmapCache.Key') -> QPixmap: ... + @staticmethod + def clear() -> None: ... + @staticmethod + def cacheLimit() -> int: ... + + +class QPolygon(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a: 'QPolygon') -> None: ... + @typing.overload + def __init__(self, points: typing.List[int]) -> None: ... + @typing.overload + def __init__(self, v: typing.Iterable[QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, rectangle: QtCore.QRect, closed: bool = ...) -> None: ... + @typing.overload + def __init__(self, asize: int) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def __mul__(self, m: 'QTransform') -> 'QPolygon': ... + def intersects(self, r: 'QPolygon') -> bool: ... + def swap(self, other: 'QPolygon') -> None: ... + def __contains__(self, value: QtCore.QPoint) -> int: ... + @typing.overload + def __delitem__(self, i: int) -> None: ... + @typing.overload + def __delitem__(self, slice: slice) -> None: ... + @typing.overload + def __setitem__(self, i: int, value: QtCore.QPoint) -> None: ... + @typing.overload + def __setitem__(self, slice: slice, list: 'QPolygon') -> None: ... + @typing.overload + def __getitem__(self, i: int) -> QtCore.QPoint: ... + @typing.overload + def __getitem__(self, slice: slice) -> 'QPolygon': ... + def __lshift__(self, value: QtCore.QPoint) -> typing.Any: ... + def __eq__(self, other: object): ... + @typing.overload + def __iadd__(self, other: 'QPolygon') -> 'QPolygon': ... + @typing.overload + def __iadd__(self, value: QtCore.QPoint) -> 'QPolygon': ... + def __add__(self, other: 'QPolygon') -> 'QPolygon': ... + def __ne__(self, other: object): ... + @typing.overload + def value(self, i: int) -> QtCore.QPoint: ... + @typing.overload + def value(self, i: int, defaultValue: QtCore.QPoint) -> QtCore.QPoint: ... + def size(self) -> int: ... + def replace(self, i: int, value: QtCore.QPoint) -> None: ... + @typing.overload + def remove(self, i: int) -> None: ... + @typing.overload + def remove(self, i: int, count: int) -> None: ... + def prepend(self, value: QtCore.QPoint) -> None: ... + def mid(self, pos: int, length: int = ...) -> 'QPolygon': ... + def lastIndexOf(self, value: QtCore.QPoint, from_: int = ...) -> int: ... + def last(self) -> QtCore.QPoint: ... + def isEmpty(self) -> bool: ... + def insert(self, i: int, value: QtCore.QPoint) -> None: ... + def indexOf(self, value: QtCore.QPoint, from_: int = ...) -> int: ... + def first(self) -> QtCore.QPoint: ... + def fill(self, value: QtCore.QPoint, size: int = ...) -> None: ... + def data(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def __len__(self) -> int: ... + @typing.overload + def count(self, value: QtCore.QPoint) -> int: ... + @typing.overload + def count(self) -> int: ... + def contains(self, value: QtCore.QPoint) -> bool: ... + def clear(self) -> None: ... + def at(self, i: int) -> QtCore.QPoint: ... + def append(self, value: QtCore.QPoint) -> None: ... + @typing.overload + def translated(self, dx: int, dy: int) -> 'QPolygon': ... + @typing.overload + def translated(self, offset: QtCore.QPoint) -> 'QPolygon': ... + def subtracted(self, r: 'QPolygon') -> 'QPolygon': ... + def intersected(self, r: 'QPolygon') -> 'QPolygon': ... + def united(self, r: 'QPolygon') -> 'QPolygon': ... + def containsPoint(self, pt: QtCore.QPoint, fillRule: QtCore.Qt.FillRule) -> bool: ... + @typing.overload + def setPoint(self, index: int, pt: QtCore.QPoint) -> None: ... + @typing.overload + def setPoint(self, index: int, x: int, y: int) -> None: ... + @typing.overload + def putPoints(self, index: int, firstx: int, firsty: int, *args: int) -> None: ... + @typing.overload + def putPoints(self, index: int, nPoints: int, fromPolygon: 'QPolygon', from_: int = ...) -> None: ... + @typing.overload + def setPoints(self, points: typing.List[int]) -> None: ... + @typing.overload + def setPoints(self, firstx: int, firsty: int, *args: int) -> None: ... + def point(self, index: int) -> QtCore.QPoint: ... + def boundingRect(self) -> QtCore.QRect: ... + @typing.overload + def translate(self, dx: int, dy: int) -> None: ... + @typing.overload + def translate(self, offset: QtCore.QPoint) -> None: ... + + +class QPolygonF(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a: 'QPolygonF') -> None: ... + @typing.overload + def __init__(self, v: typing.Iterable[typing.Union[QtCore.QPointF, QtCore.QPoint]]) -> None: ... + @typing.overload + def __init__(self, r: QtCore.QRectF) -> None: ... + @typing.overload + def __init__(self, a: QPolygon) -> None: ... + @typing.overload + def __init__(self, asize: int) -> None: ... + + def __mul__(self, m: 'QTransform') -> 'QPolygonF': ... + def intersects(self, r: 'QPolygonF') -> bool: ... + def swap(self, other: 'QPolygonF') -> None: ... + def __contains__(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> int: ... + @typing.overload + def __delitem__(self, i: int) -> None: ... + @typing.overload + def __delitem__(self, slice: slice) -> None: ... + @typing.overload + def __setitem__(self, i: int, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __setitem__(self, slice: slice, list: 'QPolygonF') -> None: ... + @typing.overload + def __getitem__(self, i: int) -> QtCore.QPointF: ... + @typing.overload + def __getitem__(self, slice: slice) -> 'QPolygonF': ... + def __lshift__(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> typing.Any: ... + def __eq__(self, other: object): ... + @typing.overload + def __iadd__(self, other: 'QPolygonF') -> 'QPolygonF': ... + @typing.overload + def __iadd__(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> 'QPolygonF': ... + def __add__(self, other: 'QPolygonF') -> 'QPolygonF': ... + def __ne__(self, other: object): ... + @typing.overload + def value(self, i: int) -> QtCore.QPointF: ... + @typing.overload + def value(self, i: int, defaultValue: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + def size(self) -> int: ... + def replace(self, i: int, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def remove(self, i: int) -> None: ... + @typing.overload + def remove(self, i: int, count: int) -> None: ... + def prepend(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def mid(self, pos: int, length: int = ...) -> 'QPolygonF': ... + def lastIndexOf(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint], from_: int = ...) -> int: ... + def last(self) -> QtCore.QPointF: ... + def isEmpty(self) -> bool: ... + def insert(self, i: int, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def indexOf(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint], from_: int = ...) -> int: ... + def first(self) -> QtCore.QPointF: ... + def fill(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint], size: int = ...) -> None: ... + def data(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def __len__(self) -> int: ... + @typing.overload + def count(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> int: ... + @typing.overload + def count(self) -> int: ... + def contains(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def clear(self) -> None: ... + def at(self, i: int) -> QtCore.QPointF: ... + def append(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def translated(self, offset: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> 'QPolygonF': ... + @typing.overload + def translated(self, dx: float, dy: float) -> 'QPolygonF': ... + def subtracted(self, r: 'QPolygonF') -> 'QPolygonF': ... + def intersected(self, r: 'QPolygonF') -> 'QPolygonF': ... + def united(self, r: 'QPolygonF') -> 'QPolygonF': ... + def containsPoint(self, pt: typing.Union[QtCore.QPointF, QtCore.QPoint], fillRule: QtCore.Qt.FillRule) -> bool: ... + def boundingRect(self) -> QtCore.QRectF: ... + def isClosed(self) -> bool: ... + def toPolygon(self) -> QPolygon: ... + @typing.overload + def translate(self, offset: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def translate(self, dx: float, dy: float) -> None: ... + + +class QQuaternion(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, aScalar: float, xpos: float, ypos: float, zpos: float) -> None: ... + @typing.overload + def __init__(self, aScalar: float, aVector: 'QVector3D') -> None: ... + @typing.overload + def __init__(self, aVector: 'QVector4D') -> None: ... + @typing.overload + def __init__(self, a0: 'QQuaternion') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __truediv__(self, divisor: float) -> 'QQuaternion': ... + def __add__(self, q2: 'QQuaternion') -> 'QQuaternion': ... + def __sub__(self, q2: 'QQuaternion') -> 'QQuaternion': ... + @typing.overload + def __mul__(self, q2: 'QQuaternion') -> 'QQuaternion': ... + @typing.overload + def __mul__(self, factor: float) -> 'QQuaternion': ... + @typing.overload + def __mul__(self, vec: 'QVector3D') -> 'QVector3D': ... + def __rmul__(self, factor: float) -> 'QQuaternion': ... + def __neg__(self) -> 'QQuaternion': ... + def toEulerAngles(self) -> 'QVector3D': ... + def conjugated(self) -> 'QQuaternion': ... + def inverted(self) -> 'QQuaternion': ... + @staticmethod + def dotProduct(q1: 'QQuaternion', q2: 'QQuaternion') -> float: ... + @staticmethod + def rotationTo(from_: 'QVector3D', to: 'QVector3D') -> 'QQuaternion': ... + @staticmethod + def fromDirection(direction: 'QVector3D', up: 'QVector3D') -> 'QQuaternion': ... + @staticmethod + def fromAxes(xAxis: 'QVector3D', yAxis: 'QVector3D', zAxis: 'QVector3D') -> 'QQuaternion': ... + def getAxes(self) -> typing.Tuple[typing.Optional['QVector3D'], typing.Optional['QVector3D'], typing.Optional['QVector3D']]: ... + @staticmethod + def fromRotationMatrix(rot3x3: QMatrix3x3) -> 'QQuaternion': ... + def toRotationMatrix(self) -> QMatrix3x3: ... + @typing.overload + @staticmethod + def fromEulerAngles(pitch: float, yaw: float, roll: float) -> 'QQuaternion': ... + @typing.overload + @staticmethod + def fromEulerAngles(eulerAngles: 'QVector3D') -> 'QQuaternion': ... + def getEulerAngles(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + def getAxisAndAngle(self) -> typing.Tuple[typing.Optional['QVector3D'], typing.Optional[float]]: ... + def toVector4D(self) -> 'QVector4D': ... + def vector(self) -> 'QVector3D': ... + @typing.overload + def setVector(self, aVector: 'QVector3D') -> None: ... + @typing.overload + def setVector(self, aX: float, aY: float, aZ: float) -> None: ... + def __itruediv__(self, divisor: float) -> 'QQuaternion': ... + @typing.overload + def __imul__(self, factor: float) -> 'QQuaternion': ... + @typing.overload + def __imul__(self, quaternion: 'QQuaternion') -> 'QQuaternion': ... + def __isub__(self, quaternion: 'QQuaternion') -> 'QQuaternion': ... + def __iadd__(self, quaternion: 'QQuaternion') -> 'QQuaternion': ... + def conjugate(self) -> 'QQuaternion': ... + def setScalar(self, aScalar: float) -> None: ... + def setZ(self, aZ: float) -> None: ... + def setY(self, aY: float) -> None: ... + def setX(self, aX: float) -> None: ... + def scalar(self) -> float: ... + def z(self) -> float: ... + def y(self) -> float: ... + def x(self) -> float: ... + def isIdentity(self) -> bool: ... + def isNull(self) -> bool: ... + @staticmethod + def nlerp(q1: 'QQuaternion', q2: 'QQuaternion', t: float) -> 'QQuaternion': ... + @staticmethod + def slerp(q1: 'QQuaternion', q2: 'QQuaternion', t: float) -> 'QQuaternion': ... + @typing.overload + @staticmethod + def fromAxisAndAngle(axis: 'QVector3D', angle: float) -> 'QQuaternion': ... + @typing.overload + @staticmethod + def fromAxisAndAngle(x: float, y: float, z: float, angle: float) -> 'QQuaternion': ... + def rotatedVector(self, vector: 'QVector3D') -> 'QVector3D': ... + def normalize(self) -> None: ... + def normalized(self) -> 'QQuaternion': ... + def lengthSquared(self) -> float: ... + def length(self) -> float: ... + def __repr__(self) -> str: ... + + +class QRasterWindow(QPaintDeviceWindow): + + def __init__(self, parent: typing.Optional[QWindow] = ...) -> None: ... + + def metric(self, metric: QPaintDevice.PaintDeviceMetric) -> int: ... + + +class QRawFont(PyQt5.sipsimplewrapper): + + class LayoutFlag(int): + SeparateAdvances = ... # type: QRawFont.LayoutFlag + KernedAdvances = ... # type: QRawFont.LayoutFlag + UseDesignMetrics = ... # type: QRawFont.LayoutFlag + + class AntialiasingType(int): + PixelAntialiasing = ... # type: QRawFont.AntialiasingType + SubPixelAntialiasing = ... # type: QRawFont.AntialiasingType + + class LayoutFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QRawFont.LayoutFlags', 'QRawFont.LayoutFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QRawFont.LayoutFlags', 'QRawFont.LayoutFlag']) -> 'QRawFont.LayoutFlags': ... + def __xor__(self, f: typing.Union['QRawFont.LayoutFlags', 'QRawFont.LayoutFlag']) -> 'QRawFont.LayoutFlags': ... + def __ior__(self, f: typing.Union['QRawFont.LayoutFlags', 'QRawFont.LayoutFlag']) -> 'QRawFont.LayoutFlags': ... + def __or__(self, f: typing.Union['QRawFont.LayoutFlags', 'QRawFont.LayoutFlag']) -> 'QRawFont.LayoutFlags': ... + def __iand__(self, f: typing.Union['QRawFont.LayoutFlags', 'QRawFont.LayoutFlag']) -> 'QRawFont.LayoutFlags': ... + def __and__(self, f: typing.Union['QRawFont.LayoutFlags', 'QRawFont.LayoutFlag']) -> 'QRawFont.LayoutFlags': ... + def __invert__(self) -> 'QRawFont.LayoutFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], pixelSize: float, hintingPreference: QFont.HintingPreference = ...) -> None: ... + @typing.overload + def __init__(self, fontData: typing.Union[QtCore.QByteArray, bytes, bytearray], pixelSize: float, hintingPreference: QFont.HintingPreference = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QRawFont') -> None: ... + + def __hash__(self) -> int: ... + def capHeight(self) -> float: ... + def swap(self, other: 'QRawFont') -> None: ... + def underlinePosition(self) -> float: ... + def lineThickness(self) -> float: ... + def boundingRect(self, glyphIndex: int) -> QtCore.QRectF: ... + @staticmethod + def fromFont(font: QFont, writingSystem: QFontDatabase.WritingSystem = ...) -> 'QRawFont': ... + def fontTable(self, tagName: typing.Optional[str]) -> QtCore.QByteArray: ... + def supportedWritingSystems(self) -> typing.List[QFontDatabase.WritingSystem]: ... + @typing.overload + def supportsCharacter(self, ucs4: int) -> bool: ... + @typing.overload + def supportsCharacter(self, character: str) -> bool: ... + def loadFromData(self, fontData: typing.Union[QtCore.QByteArray, bytes, bytearray], pixelSize: float, hintingPreference: QFont.HintingPreference) -> None: ... + def loadFromFile(self, fileName: typing.Optional[str], pixelSize: float, hintingPreference: QFont.HintingPreference) -> None: ... + def unitsPerEm(self) -> float: ... + def maxCharWidth(self) -> float: ... + def averageCharWidth(self) -> float: ... + def xHeight(self) -> float: ... + def leading(self) -> float: ... + def descent(self) -> float: ... + def ascent(self) -> float: ... + def hintingPreference(self) -> QFont.HintingPreference: ... + def pixelSize(self) -> float: ... + def setPixelSize(self, pixelSize: float) -> None: ... + def pathForGlyph(self, glyphIndex: int) -> QPainterPath: ... + def alphaMapForGlyph(self, glyphIndex: int, antialiasingType: 'QRawFont.AntialiasingType' = ..., transform: 'QTransform' = ...) -> QImage: ... + @typing.overload + def advancesForGlyphIndexes(self, glyphIndexes: typing.Iterable[int]) -> typing.List[QtCore.QPointF]: ... + @typing.overload + def advancesForGlyphIndexes(self, glyphIndexes: typing.Iterable[int], layoutFlags: typing.Union['QRawFont.LayoutFlags', 'QRawFont.LayoutFlag']) -> typing.List[QtCore.QPointF]: ... + def glyphIndexesForString(self, text: typing.Optional[str]) -> typing.List[int]: ... + def weight(self) -> int: ... + def style(self) -> QFont.Style: ... + def styleName(self) -> str: ... + def familyName(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isValid(self) -> bool: ... + + +class QRegion(PyQt5.sipsimplewrapper): + + class RegionType(int): + Rectangle = ... # type: QRegion.RegionType + Ellipse = ... # type: QRegion.RegionType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: int, y: int, w: int, h: int, type: 'QRegion.RegionType' = ...) -> None: ... + @typing.overload + def __init__(self, r: QtCore.QRect, type: 'QRegion.RegionType' = ...) -> None: ... + @typing.overload + def __init__(self, a: QPolygon, fillRule: QtCore.Qt.FillRule = ...) -> None: ... + @typing.overload + def __init__(self, bitmap: QBitmap) -> None: ... + @typing.overload + def __init__(self, region: 'QRegion') -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def __mul__(self, m: 'QTransform') -> 'QRegion': ... + def isNull(self) -> bool: ... + def swap(self, other: 'QRegion') -> None: ... + def rectCount(self) -> int: ... + @typing.overload + def intersects(self, r: 'QRegion') -> bool: ... + @typing.overload + def intersects(self, r: QtCore.QRect) -> bool: ... + def xored(self, r: 'QRegion') -> 'QRegion': ... + def subtracted(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def intersected(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def intersected(self, r: QtCore.QRect) -> 'QRegion': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, r: 'QRegion') -> 'QRegion': ... + def __isub__(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def __iand__(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def __iand__(self, r: QtCore.QRect) -> 'QRegion': ... + @typing.overload + def __iadd__(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def __iadd__(self, r: QtCore.QRect) -> 'QRegion': ... + def __ior__(self, r: 'QRegion') -> 'QRegion': ... + def __xor__(self, r: 'QRegion') -> 'QRegion': ... + def __sub__(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def __and__(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def __and__(self, r: QtCore.QRect) -> 'QRegion': ... + @typing.overload + def __add__(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def __add__(self, r: QtCore.QRect) -> 'QRegion': ... + def setRects(self, a0: typing.Iterable[QtCore.QRect]) -> None: ... + def __or__(self, r: 'QRegion') -> 'QRegion': ... + def rects(self) -> typing.List[QtCore.QRect]: ... + def boundingRect(self) -> QtCore.QRect: ... + @typing.overload + def united(self, r: 'QRegion') -> 'QRegion': ... + @typing.overload + def united(self, r: QtCore.QRect) -> 'QRegion': ... + @typing.overload + def translated(self, dx: int, dy: int) -> 'QRegion': ... + @typing.overload + def translated(self, p: QtCore.QPoint) -> 'QRegion': ... + @typing.overload + def translate(self, dx: int, dy: int) -> None: ... + @typing.overload + def translate(self, p: QtCore.QPoint) -> None: ... + @typing.overload + def __contains__(self, p: QtCore.QPoint) -> int: ... + @typing.overload + def __contains__(self, r: QtCore.QRect) -> int: ... + @typing.overload + def contains(self, p: QtCore.QPoint) -> bool: ... + @typing.overload + def contains(self, r: QtCore.QRect) -> bool: ... + def __bool__(self) -> int: ... + def isEmpty(self) -> bool: ... + + +class QRgba64(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QRgba64') -> None: ... + + def __int__(self) -> int: ... + def unpremultiplied(self) -> 'QRgba64': ... + def premultiplied(self) -> 'QRgba64': ... + def toRgb16(self) -> int: ... + def toArgb32(self) -> int: ... + def alpha8(self) -> int: ... + def blue8(self) -> int: ... + def green8(self) -> int: ... + def red8(self) -> int: ... + def setAlpha(self, _alpha: int) -> None: ... + def setBlue(self, _blue: int) -> None: ... + def setGreen(self, _green: int) -> None: ... + def setRed(self, _red: int) -> None: ... + def alpha(self) -> int: ... + def blue(self) -> int: ... + def green(self) -> int: ... + def red(self) -> int: ... + def isTransparent(self) -> bool: ... + def isOpaque(self) -> bool: ... + @staticmethod + def fromArgb32(rgb: int) -> 'QRgba64': ... + @staticmethod + def fromRgba(red: int, green: int, blue: int, alpha: int) -> 'QRgba64': ... + @typing.overload + @staticmethod + def fromRgba64(c: int) -> 'QRgba64': ... + @typing.overload + @staticmethod + def fromRgba64(red: int, green: int, blue: int, alpha: int) -> 'QRgba64': ... + + +class QScreen(QtCore.QObject): + + def virtualSiblingAt(self, point: QtCore.QPoint) -> typing.Optional['QScreen']: ... + def serialNumber(self) -> str: ... + def model(self) -> str: ... + def manufacturer(self) -> str: ... + availableGeometryChanged: typing.ClassVar[QtCore.pyqtSignal] + virtualGeometryChanged: typing.ClassVar[QtCore.pyqtSignal] + physicalSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + refreshRateChanged: typing.ClassVar[QtCore.pyqtSignal] + orientationChanged: typing.ClassVar[QtCore.pyqtSignal] + primaryOrientationChanged: typing.ClassVar[QtCore.pyqtSignal] + logicalDotsPerInchChanged: typing.ClassVar[QtCore.pyqtSignal] + physicalDotsPerInchChanged: typing.ClassVar[QtCore.pyqtSignal] + geometryChanged: typing.ClassVar[QtCore.pyqtSignal] + def devicePixelRatio(self) -> float: ... + def refreshRate(self) -> float: ... + def grabWindow(self, window: PyQt5.sip.voidptr, x: int = ..., y: int = ..., width: int = ..., height: int = ...) -> QPixmap: ... + def isLandscape(self, orientation: QtCore.Qt.ScreenOrientation) -> bool: ... + def isPortrait(self, orientation: QtCore.Qt.ScreenOrientation) -> bool: ... + def mapBetween(self, a: QtCore.Qt.ScreenOrientation, b: QtCore.Qt.ScreenOrientation, rect: QtCore.QRect) -> QtCore.QRect: ... + def transformBetween(self, a: QtCore.Qt.ScreenOrientation, b: QtCore.Qt.ScreenOrientation, target: QtCore.QRect) -> 'QTransform': ... + def angleBetween(self, a: QtCore.Qt.ScreenOrientation, b: QtCore.Qt.ScreenOrientation) -> int: ... + def setOrientationUpdateMask(self, mask: typing.Union[QtCore.Qt.ScreenOrientations, QtCore.Qt.ScreenOrientation]) -> None: ... + def orientationUpdateMask(self) -> QtCore.Qt.ScreenOrientations: ... + def orientation(self) -> QtCore.Qt.ScreenOrientation: ... + def primaryOrientation(self) -> QtCore.Qt.ScreenOrientation: ... + def nativeOrientation(self) -> QtCore.Qt.ScreenOrientation: ... + def availableVirtualGeometry(self) -> QtCore.QRect: ... + def availableVirtualSize(self) -> QtCore.QSize: ... + def virtualGeometry(self) -> QtCore.QRect: ... + def virtualSize(self) -> QtCore.QSize: ... + def virtualSiblings(self) -> typing.List['QScreen']: ... + def availableGeometry(self) -> QtCore.QRect: ... + def availableSize(self) -> QtCore.QSize: ... + def logicalDotsPerInch(self) -> float: ... + def logicalDotsPerInchY(self) -> float: ... + def logicalDotsPerInchX(self) -> float: ... + def physicalDotsPerInch(self) -> float: ... + def physicalDotsPerInchY(self) -> float: ... + def physicalDotsPerInchX(self) -> float: ... + def physicalSize(self) -> QtCore.QSizeF: ... + def geometry(self) -> QtCore.QRect: ... + def size(self) -> QtCore.QSize: ... + def depth(self) -> int: ... + def name(self) -> str: ... + + +class QSessionManager(QtCore.QObject): + + class RestartHint(int): + RestartIfRunning = ... # type: QSessionManager.RestartHint + RestartAnyway = ... # type: QSessionManager.RestartHint + RestartImmediately = ... # type: QSessionManager.RestartHint + RestartNever = ... # type: QSessionManager.RestartHint + + def requestPhase2(self) -> None: ... + def isPhase2(self) -> bool: ... + @typing.overload + def setManagerProperty(self, name: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def setManagerProperty(self, name: typing.Optional[str], value: typing.Iterable[typing.Optional[str]]) -> None: ... + def discardCommand(self) -> typing.List[str]: ... + def setDiscardCommand(self, a0: typing.Iterable[typing.Optional[str]]) -> None: ... + def restartCommand(self) -> typing.List[str]: ... + def setRestartCommand(self, a0: typing.Iterable[typing.Optional[str]]) -> None: ... + def restartHint(self) -> 'QSessionManager.RestartHint': ... + def setRestartHint(self, a0: 'QSessionManager.RestartHint') -> None: ... + def cancel(self) -> None: ... + def release(self) -> None: ... + def allowsErrorInteraction(self) -> bool: ... + def allowsInteraction(self) -> bool: ... + def sessionKey(self) -> str: ... + def sessionId(self) -> str: ... + + +class QStandardItemModel(QtCore.QAbstractItemModel): + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, rows: int, columns: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def clearItemData(self, index: QtCore.QModelIndex) -> bool: ... + itemChanged: typing.ClassVar[QtCore.pyqtSignal] + def setItemRoleNames(self, roleNames: typing.Dict[int, typing.Union[QtCore.QByteArray, bytes, bytearray]]) -> None: ... + def sibling(self, row: int, column: int, idx: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + def dropMimeData(self, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction, row: int, column: int, parent: QtCore.QModelIndex) -> bool: ... + def mimeData(self, indexes: typing.Iterable[QtCore.QModelIndex]) -> typing.Optional[QtCore.QMimeData]: ... + def mimeTypes(self) -> typing.List[str]: ... + def setSortRole(self, role: int) -> None: ... + def sortRole(self) -> int: ... + def findItems(self, text: typing.Optional[str], flags: typing.Union[QtCore.Qt.MatchFlags, QtCore.Qt.MatchFlag] = ..., column: int = ...) -> typing.List['QStandardItem']: ... + def setItemPrototype(self, item: typing.Optional['QStandardItem']) -> None: ... + def itemPrototype(self) -> typing.Optional['QStandardItem']: ... + def takeVerticalHeaderItem(self, row: int) -> typing.Optional['QStandardItem']: ... + def takeHorizontalHeaderItem(self, column: int) -> typing.Optional['QStandardItem']: ... + def takeColumn(self, column: int) -> typing.List['QStandardItem']: ... + def takeRow(self, row: int) -> typing.List['QStandardItem']: ... + def takeItem(self, row: int, column: int = ...) -> typing.Optional['QStandardItem']: ... + @typing.overload + def insertColumn(self, column: int, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def insertColumn(self, column: int, parent: QtCore.QModelIndex = ...) -> bool: ... + @typing.overload + def insertRow(self, row: int, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def insertRow(self, arow: int, aitem: typing.Optional['QStandardItem']) -> None: ... + @typing.overload + def insertRow(self, row: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def appendColumn(self, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def appendRow(self, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def appendRow(self, aitem: typing.Optional['QStandardItem']) -> None: ... + def setColumnCount(self, columns: int) -> None: ... + def setRowCount(self, rows: int) -> None: ... + def setVerticalHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... + def setHorizontalHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... + def setVerticalHeaderItem(self, row: int, item: typing.Optional['QStandardItem']) -> None: ... + def verticalHeaderItem(self, row: int) -> typing.Optional['QStandardItem']: ... + def setHorizontalHeaderItem(self, column: int, item: typing.Optional['QStandardItem']) -> None: ... + def horizontalHeaderItem(self, column: int) -> typing.Optional['QStandardItem']: ... + def invisibleRootItem(self) -> typing.Optional['QStandardItem']: ... + @typing.overload + def setItem(self, row: int, column: int, item: typing.Optional['QStandardItem']) -> None: ... + @typing.overload + def setItem(self, arow: int, aitem: typing.Optional['QStandardItem']) -> None: ... + def item(self, row: int, column: int = ...) -> typing.Optional['QStandardItem']: ... + def indexFromItem(self, item: typing.Optional['QStandardItem']) -> QtCore.QModelIndex: ... + def itemFromIndex(self, index: QtCore.QModelIndex) -> typing.Optional['QStandardItem']: ... + def sort(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... + def setItemData(self, index: QtCore.QModelIndex, roles: typing.Dict[int, typing.Any]) -> bool: ... + def itemData(self, index: QtCore.QModelIndex) -> typing.Dict[int, typing.Any]: ... + def supportedDropActions(self) -> QtCore.Qt.DropActions: ... + def clear(self) -> None: ... + def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlags: ... + def removeColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def removeRows(self, row: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def insertColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def insertRows(self, row: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def setHeaderData(self, section: int, orientation: QtCore.Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... + def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... + def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, index: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... + def hasChildren(self, parent: QtCore.QModelIndex = ...) -> bool: ... + def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + @typing.overload + def parent(self, child: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + @typing.overload + def parent(self) -> typing.Optional[QtCore.QObject]: ... + def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... + + +class QStandardItem(PyQt5.sip.wrapper): + + class ItemType(int): + Type = ... # type: QStandardItem.ItemType + UserType = ... # type: QStandardItem.ItemType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, icon: QIcon, text: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, rows: int, columns: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QStandardItem') -> None: ... + + def __ge__(self, other: 'QStandardItem') -> bool: ... + def clearData(self) -> None: ... + def setUserTristate(self, tristate: bool) -> None: ... + def isUserTristate(self) -> bool: ... + def setAutoTristate(self, tristate: bool) -> None: ... + def isAutoTristate(self) -> bool: ... + def emitDataChanged(self) -> None: ... + def appendRows(self, items: typing.Iterable['QStandardItem']) -> None: ... + def appendColumn(self, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def appendRow(self, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def appendRow(self, aitem: typing.Optional['QStandardItem']) -> None: ... + def setAccessibleDescription(self, aaccessibleDescription: typing.Optional[str]) -> None: ... + def setAccessibleText(self, aaccessibleText: typing.Optional[str]) -> None: ... + def setCheckState(self, acheckState: QtCore.Qt.CheckState) -> None: ... + def setForeground(self, abrush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def setBackground(self, abrush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def setTextAlignment(self, atextAlignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def setFont(self, afont: QFont) -> None: ... + def setSizeHint(self, asizeHint: QtCore.QSize) -> None: ... + def setWhatsThis(self, awhatsThis: typing.Optional[str]) -> None: ... + def setStatusTip(self, astatusTip: typing.Optional[str]) -> None: ... + def setToolTip(self, atoolTip: typing.Optional[str]) -> None: ... + def setIcon(self, aicon: QIcon) -> None: ... + def setText(self, atext: typing.Optional[str]) -> None: ... + def __lt__(self, other: 'QStandardItem') -> bool: ... + def write(self, out: QtCore.QDataStream) -> None: ... + def read(self, in_: QtCore.QDataStream) -> None: ... + def type(self) -> int: ... + def clone(self) -> typing.Optional['QStandardItem']: ... + def sortChildren(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... + def takeColumn(self, column: int) -> typing.List['QStandardItem']: ... + def takeRow(self, row: int) -> typing.List['QStandardItem']: ... + def takeChild(self, row: int, column: int = ...) -> typing.Optional['QStandardItem']: ... + def removeColumns(self, column: int, count: int) -> None: ... + def removeRows(self, row: int, count: int) -> None: ... + def removeColumn(self, column: int) -> None: ... + def removeRow(self, row: int) -> None: ... + def insertColumns(self, column: int, count: int) -> None: ... + def insertColumn(self, column: int, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def insertRows(self, row: int, count: int) -> None: ... + @typing.overload + def insertRows(self, row: int, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def insertRow(self, row: int, items: typing.Iterable['QStandardItem']) -> None: ... + @typing.overload + def insertRow(self, arow: int, aitem: typing.Optional['QStandardItem']) -> None: ... + @typing.overload + def setChild(self, row: int, column: int, item: typing.Optional['QStandardItem']) -> None: ... + @typing.overload + def setChild(self, arow: int, aitem: typing.Optional['QStandardItem']) -> None: ... + def child(self, row: int, column: int = ...) -> typing.Optional['QStandardItem']: ... + def hasChildren(self) -> bool: ... + def setColumnCount(self, columns: int) -> None: ... + def columnCount(self) -> int: ... + def setRowCount(self, rows: int) -> None: ... + def rowCount(self) -> int: ... + def model(self) -> typing.Optional[QStandardItemModel]: ... + def index(self) -> QtCore.QModelIndex: ... + def column(self) -> int: ... + def row(self) -> int: ... + def parent(self) -> typing.Optional['QStandardItem']: ... + def setDropEnabled(self, dropEnabled: bool) -> None: ... + def isDropEnabled(self) -> bool: ... + def setDragEnabled(self, dragEnabled: bool) -> None: ... + def isDragEnabled(self) -> bool: ... + def setTristate(self, tristate: bool) -> None: ... + def isTristate(self) -> bool: ... + def setCheckable(self, checkable: bool) -> None: ... + def isCheckable(self) -> bool: ... + def setSelectable(self, selectable: bool) -> None: ... + def isSelectable(self) -> bool: ... + def setEditable(self, editable: bool) -> None: ... + def isEditable(self) -> bool: ... + def setEnabled(self, enabled: bool) -> None: ... + def isEnabled(self) -> bool: ... + def setFlags(self, flags: typing.Union[QtCore.Qt.ItemFlags, QtCore.Qt.ItemFlag]) -> None: ... + def flags(self) -> QtCore.Qt.ItemFlags: ... + def accessibleDescription(self) -> str: ... + def accessibleText(self) -> str: ... + def checkState(self) -> QtCore.Qt.CheckState: ... + def foreground(self) -> QBrush: ... + def background(self) -> QBrush: ... + def textAlignment(self) -> QtCore.Qt.Alignment: ... + def font(self) -> QFont: ... + def sizeHint(self) -> QtCore.QSize: ... + def whatsThis(self) -> str: ... + def statusTip(self) -> str: ... + def toolTip(self) -> str: ... + def icon(self) -> QIcon: ... + def text(self) -> str: ... + def setData(self, value: typing.Any, role: int = ...) -> None: ... + def data(self, role: int = ...) -> typing.Any: ... + + +class QStaticText(PyQt5.sipsimplewrapper): + + class PerformanceHint(int): + ModerateCaching = ... # type: QStaticText.PerformanceHint + AggressiveCaching = ... # type: QStaticText.PerformanceHint + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, other: 'QStaticText') -> None: ... + + def swap(self, other: 'QStaticText') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def performanceHint(self) -> 'QStaticText.PerformanceHint': ... + def setPerformanceHint(self, performanceHint: 'QStaticText.PerformanceHint') -> None: ... + def prepare(self, matrix: 'QTransform' = ..., font: QFont = ...) -> None: ... + def size(self) -> QtCore.QSizeF: ... + def textOption(self) -> 'QTextOption': ... + def setTextOption(self, textOption: 'QTextOption') -> None: ... + def textWidth(self) -> float: ... + def setTextWidth(self, textWidth: float) -> None: ... + def textFormat(self) -> QtCore.Qt.TextFormat: ... + def setTextFormat(self, textFormat: QtCore.Qt.TextFormat) -> None: ... + def text(self) -> str: ... + def setText(self, text: typing.Optional[str]) -> None: ... + + +class QStyleHints(QtCore.QObject): + + def touchDoubleTapDistance(self) -> int: ... + def mouseDoubleClickDistance(self) -> int: ... + showShortcutsInContextMenusChanged: typing.ClassVar[QtCore.pyqtSignal] + def setShowShortcutsInContextMenus(self, showShortcutsInContextMenus: bool) -> None: ... + mouseQuickSelectionThresholdChanged: typing.ClassVar[QtCore.pyqtSignal] + def mouseQuickSelectionThreshold(self) -> int: ... + def showShortcutsInContextMenus(self) -> bool: ... + wheelScrollLinesChanged: typing.ClassVar[QtCore.pyqtSignal] + def wheelScrollLines(self) -> int: ... + useHoverEffectsChanged: typing.ClassVar[QtCore.pyqtSignal] + def setUseHoverEffects(self, useHoverEffects: bool) -> None: ... + def useHoverEffects(self) -> bool: ... + def showIsMaximized(self) -> bool: ... + tabFocusBehaviorChanged: typing.ClassVar[QtCore.pyqtSignal] + mousePressAndHoldIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] + startDragTimeChanged: typing.ClassVar[QtCore.pyqtSignal] + startDragDistanceChanged: typing.ClassVar[QtCore.pyqtSignal] + mouseDoubleClickIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] + keyboardInputIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] + cursorFlashTimeChanged: typing.ClassVar[QtCore.pyqtSignal] + def singleClickActivation(self) -> bool: ... + def tabFocusBehavior(self) -> QtCore.Qt.TabFocusBehavior: ... + def mousePressAndHoldInterval(self) -> int: ... + def setFocusOnTouchRelease(self) -> bool: ... + def passwordMaskCharacter(self) -> str: ... + def useRtlExtensions(self) -> bool: ... + def fontSmoothingGamma(self) -> float: ... + def passwordMaskDelay(self) -> int: ... + def showIsFullScreen(self) -> bool: ... + def cursorFlashTime(self) -> int: ... + def keyboardAutoRepeatRate(self) -> int: ... + def keyboardInputInterval(self) -> int: ... + def startDragVelocity(self) -> int: ... + def startDragTime(self) -> int: ... + def startDragDistance(self) -> int: ... + def mouseDoubleClickInterval(self) -> int: ... + + +class QSurfaceFormat(PyQt5.sipsimplewrapper): + + class ColorSpace(int): + DefaultColorSpace = ... # type: QSurfaceFormat.ColorSpace + sRGBColorSpace = ... # type: QSurfaceFormat.ColorSpace + + class OpenGLContextProfile(int): + NoProfile = ... # type: QSurfaceFormat.OpenGLContextProfile + CoreProfile = ... # type: QSurfaceFormat.OpenGLContextProfile + CompatibilityProfile = ... # type: QSurfaceFormat.OpenGLContextProfile + + class RenderableType(int): + DefaultRenderableType = ... # type: QSurfaceFormat.RenderableType + OpenGL = ... # type: QSurfaceFormat.RenderableType + OpenGLES = ... # type: QSurfaceFormat.RenderableType + OpenVG = ... # type: QSurfaceFormat.RenderableType + + class SwapBehavior(int): + DefaultSwapBehavior = ... # type: QSurfaceFormat.SwapBehavior + SingleBuffer = ... # type: QSurfaceFormat.SwapBehavior + DoubleBuffer = ... # type: QSurfaceFormat.SwapBehavior + TripleBuffer = ... # type: QSurfaceFormat.SwapBehavior + + class FormatOption(int): + StereoBuffers = ... # type: QSurfaceFormat.FormatOption + DebugContext = ... # type: QSurfaceFormat.FormatOption + DeprecatedFunctions = ... # type: QSurfaceFormat.FormatOption + ResetNotification = ... # type: QSurfaceFormat.FormatOption + + class FormatOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> 'QSurfaceFormat.FormatOptions': ... + def __xor__(self, f: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> 'QSurfaceFormat.FormatOptions': ... + def __ior__(self, f: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> 'QSurfaceFormat.FormatOptions': ... + def __or__(self, f: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> 'QSurfaceFormat.FormatOptions': ... + def __iand__(self, f: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> 'QSurfaceFormat.FormatOptions': ... + def __and__(self, f: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> 'QSurfaceFormat.FormatOptions': ... + def __invert__(self) -> 'QSurfaceFormat.FormatOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, options: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> None: ... + @typing.overload + def __init__(self, other: 'QSurfaceFormat') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def setColorSpace(self, colorSpace: 'QSurfaceFormat.ColorSpace') -> None: ... + def colorSpace(self) -> 'QSurfaceFormat.ColorSpace': ... + @staticmethod + def defaultFormat() -> 'QSurfaceFormat': ... + @staticmethod + def setDefaultFormat(format: 'QSurfaceFormat') -> None: ... + def setSwapInterval(self, interval: int) -> None: ... + def swapInterval(self) -> int: ... + def options(self) -> 'QSurfaceFormat.FormatOptions': ... + def setOptions(self, options: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> None: ... + def setVersion(self, major: int, minor: int) -> None: ... + def version(self) -> typing.Tuple[int, int]: ... + def stereo(self) -> bool: ... + @typing.overload + def testOption(self, opt: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> bool: ... + @typing.overload + def testOption(self, option: 'QSurfaceFormat.FormatOption') -> bool: ... + @typing.overload + def setOption(self, opt: typing.Union['QSurfaceFormat.FormatOptions', 'QSurfaceFormat.FormatOption']) -> None: ... + @typing.overload + def setOption(self, option: 'QSurfaceFormat.FormatOption', on: bool = ...) -> None: ... + def setStereo(self, enable: bool) -> None: ... + def minorVersion(self) -> int: ... + def setMinorVersion(self, minorVersion: int) -> None: ... + def majorVersion(self) -> int: ... + def setMajorVersion(self, majorVersion: int) -> None: ... + def renderableType(self) -> 'QSurfaceFormat.RenderableType': ... + def setRenderableType(self, type: 'QSurfaceFormat.RenderableType') -> None: ... + def profile(self) -> 'QSurfaceFormat.OpenGLContextProfile': ... + def setProfile(self, profile: 'QSurfaceFormat.OpenGLContextProfile') -> None: ... + def hasAlpha(self) -> bool: ... + def swapBehavior(self) -> 'QSurfaceFormat.SwapBehavior': ... + def setSwapBehavior(self, behavior: 'QSurfaceFormat.SwapBehavior') -> None: ... + def samples(self) -> int: ... + def setSamples(self, numSamples: int) -> None: ... + def alphaBufferSize(self) -> int: ... + def setAlphaBufferSize(self, size: int) -> None: ... + def blueBufferSize(self) -> int: ... + def setBlueBufferSize(self, size: int) -> None: ... + def greenBufferSize(self) -> int: ... + def setGreenBufferSize(self, size: int) -> None: ... + def redBufferSize(self) -> int: ... + def setRedBufferSize(self, size: int) -> None: ... + def stencilBufferSize(self) -> int: ... + def setStencilBufferSize(self, size: int) -> None: ... + def depthBufferSize(self) -> int: ... + def setDepthBufferSize(self, size: int) -> None: ... + + +class QSyntaxHighlighter(QtCore.QObject): + + @typing.overload + def __init__(self, parent: typing.Optional['QTextDocument']) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + def currentBlock(self) -> 'QTextBlock': ... + def currentBlockUserData(self) -> typing.Optional['QTextBlockUserData']: ... + def setCurrentBlockUserData(self, data: typing.Optional['QTextBlockUserData']) -> None: ... + def setCurrentBlockState(self, newState: int) -> None: ... + def currentBlockState(self) -> int: ... + def previousBlockState(self) -> int: ... + def format(self, pos: int) -> 'QTextCharFormat': ... + @typing.overload + def setFormat(self, start: int, count: int, format: 'QTextCharFormat') -> None: ... + @typing.overload + def setFormat(self, start: int, count: int, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def setFormat(self, start: int, count: int, font: QFont) -> None: ... + def highlightBlock(self, text: typing.Optional[str]) -> None: ... + def rehighlightBlock(self, block: 'QTextBlock') -> None: ... + def rehighlight(self) -> None: ... + def document(self) -> typing.Optional['QTextDocument']: ... + def setDocument(self, doc: typing.Optional['QTextDocument']) -> None: ... + + +class QTextCursor(PyQt5.sipsimplewrapper): + + class SelectionType(int): + WordUnderCursor = ... # type: QTextCursor.SelectionType + LineUnderCursor = ... # type: QTextCursor.SelectionType + BlockUnderCursor = ... # type: QTextCursor.SelectionType + Document = ... # type: QTextCursor.SelectionType + + class MoveOperation(int): + NoMove = ... # type: QTextCursor.MoveOperation + Start = ... # type: QTextCursor.MoveOperation + Up = ... # type: QTextCursor.MoveOperation + StartOfLine = ... # type: QTextCursor.MoveOperation + StartOfBlock = ... # type: QTextCursor.MoveOperation + StartOfWord = ... # type: QTextCursor.MoveOperation + PreviousBlock = ... # type: QTextCursor.MoveOperation + PreviousCharacter = ... # type: QTextCursor.MoveOperation + PreviousWord = ... # type: QTextCursor.MoveOperation + Left = ... # type: QTextCursor.MoveOperation + WordLeft = ... # type: QTextCursor.MoveOperation + End = ... # type: QTextCursor.MoveOperation + Down = ... # type: QTextCursor.MoveOperation + EndOfLine = ... # type: QTextCursor.MoveOperation + EndOfWord = ... # type: QTextCursor.MoveOperation + EndOfBlock = ... # type: QTextCursor.MoveOperation + NextBlock = ... # type: QTextCursor.MoveOperation + NextCharacter = ... # type: QTextCursor.MoveOperation + NextWord = ... # type: QTextCursor.MoveOperation + Right = ... # type: QTextCursor.MoveOperation + WordRight = ... # type: QTextCursor.MoveOperation + NextCell = ... # type: QTextCursor.MoveOperation + PreviousCell = ... # type: QTextCursor.MoveOperation + NextRow = ... # type: QTextCursor.MoveOperation + PreviousRow = ... # type: QTextCursor.MoveOperation + + class MoveMode(int): + MoveAnchor = ... # type: QTextCursor.MoveMode + KeepAnchor = ... # type: QTextCursor.MoveMode + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, document: typing.Optional['QTextDocument']) -> None: ... + @typing.overload + def __init__(self, frame: typing.Optional['QTextFrame']) -> None: ... + @typing.overload + def __init__(self, block: 'QTextBlock') -> None: ... + @typing.overload + def __init__(self, cursor: 'QTextCursor') -> None: ... + + def swap(self, other: 'QTextCursor') -> None: ... + def keepPositionOnInsert(self) -> bool: ... + def setKeepPositionOnInsert(self, b: bool) -> None: ... + def verticalMovementX(self) -> int: ... + def setVerticalMovementX(self, x: int) -> None: ... + def positionInBlock(self) -> int: ... + def document(self) -> typing.Optional['QTextDocument']: ... + def setVisualNavigation(self, b: bool) -> None: ... + def visualNavigation(self) -> bool: ... + def isCopyOf(self, other: 'QTextCursor') -> bool: ... + def __gt__(self, rhs: 'QTextCursor') -> bool: ... + def __ge__(self, rhs: 'QTextCursor') -> bool: ... + def __eq__(self, other: object): ... + def __le__(self, rhs: 'QTextCursor') -> bool: ... + def __lt__(self, rhs: 'QTextCursor') -> bool: ... + def __ne__(self, other: object): ... + def columnNumber(self) -> int: ... + def blockNumber(self) -> int: ... + def endEditBlock(self) -> None: ... + def joinPreviousEditBlock(self) -> None: ... + def beginEditBlock(self) -> None: ... + @typing.overload + def insertImage(self, format: 'QTextImageFormat') -> None: ... + @typing.overload + def insertImage(self, format: 'QTextImageFormat', alignment: 'QTextFrameFormat.Position') -> None: ... + @typing.overload + def insertImage(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def insertImage(self, image: QImage, name: typing.Optional[str] = ...) -> None: ... + def insertHtml(self, html: typing.Optional[str]) -> None: ... + def insertFragment(self, fragment: 'QTextDocumentFragment') -> None: ... + def currentFrame(self) -> typing.Optional['QTextFrame']: ... + def insertFrame(self, format: 'QTextFrameFormat') -> typing.Optional['QTextFrame']: ... + def currentTable(self) -> typing.Optional['QTextTable']: ... + @typing.overload + def insertTable(self, rows: int, cols: int, format: 'QTextTableFormat') -> typing.Optional['QTextTable']: ... + @typing.overload + def insertTable(self, rows: int, cols: int) -> typing.Optional['QTextTable']: ... + def currentList(self) -> typing.Optional['QTextList']: ... + @typing.overload + def createList(self, format: 'QTextListFormat') -> typing.Optional['QTextList']: ... + @typing.overload + def createList(self, style: 'QTextListFormat.Style') -> typing.Optional['QTextList']: ... + @typing.overload + def insertList(self, format: 'QTextListFormat') -> typing.Optional['QTextList']: ... + @typing.overload + def insertList(self, style: 'QTextListFormat.Style') -> typing.Optional['QTextList']: ... + @typing.overload + def insertBlock(self) -> None: ... + @typing.overload + def insertBlock(self, format: 'QTextBlockFormat') -> None: ... + @typing.overload + def insertBlock(self, format: 'QTextBlockFormat', charFormat: 'QTextCharFormat') -> None: ... + def atEnd(self) -> bool: ... + def atStart(self) -> bool: ... + def atBlockEnd(self) -> bool: ... + def atBlockStart(self) -> bool: ... + def mergeBlockCharFormat(self, modifier: 'QTextCharFormat') -> None: ... + def setBlockCharFormat(self, format: 'QTextCharFormat') -> None: ... + def blockCharFormat(self) -> 'QTextCharFormat': ... + def mergeBlockFormat(self, modifier: 'QTextBlockFormat') -> None: ... + def setBlockFormat(self, format: 'QTextBlockFormat') -> None: ... + def blockFormat(self) -> 'QTextBlockFormat': ... + def mergeCharFormat(self, modifier: 'QTextCharFormat') -> None: ... + def setCharFormat(self, format: 'QTextCharFormat') -> None: ... + def charFormat(self) -> 'QTextCharFormat': ... + def block(self) -> 'QTextBlock': ... + def selectedTableCells(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + def selection(self) -> 'QTextDocumentFragment': ... + def selectedText(self) -> str: ... + def selectionEnd(self) -> int: ... + def selectionStart(self) -> int: ... + def clearSelection(self) -> None: ... + def removeSelectedText(self) -> None: ... + def hasComplexSelection(self) -> bool: ... + def hasSelection(self) -> bool: ... + def select(self, selection: 'QTextCursor.SelectionType') -> None: ... + def deletePreviousChar(self) -> None: ... + def deleteChar(self) -> None: ... + def movePosition(self, op: 'QTextCursor.MoveOperation', mode: 'QTextCursor.MoveMode' = ..., n: int = ...) -> bool: ... + @typing.overload + def insertText(self, text: typing.Optional[str]) -> None: ... + @typing.overload + def insertText(self, text: typing.Optional[str], format: 'QTextCharFormat') -> None: ... + def anchor(self) -> int: ... + def position(self) -> int: ... + def setPosition(self, pos: int, mode: 'QTextCursor.MoveMode' = ...) -> None: ... + def isNull(self) -> bool: ... + + +class QTextDocument(QtCore.QObject): + + class MarkdownFeature(int): + MarkdownNoHTML = ... # type: QTextDocument.MarkdownFeature + MarkdownDialectCommonMark = ... # type: QTextDocument.MarkdownFeature + MarkdownDialectGitHub = ... # type: QTextDocument.MarkdownFeature + + class Stacks(int): + UndoStack = ... # type: QTextDocument.Stacks + RedoStack = ... # type: QTextDocument.Stacks + UndoAndRedoStacks = ... # type: QTextDocument.Stacks + + class ResourceType(int): + UnknownResource = ... # type: QTextDocument.ResourceType + HtmlResource = ... # type: QTextDocument.ResourceType + ImageResource = ... # type: QTextDocument.ResourceType + StyleSheetResource = ... # type: QTextDocument.ResourceType + MarkdownResource = ... # type: QTextDocument.ResourceType + UserResource = ... # type: QTextDocument.ResourceType + + class FindFlag(int): + FindBackward = ... # type: QTextDocument.FindFlag + FindCaseSensitively = ... # type: QTextDocument.FindFlag + FindWholeWords = ... # type: QTextDocument.FindFlag + + class MetaInformation(int): + DocumentTitle = ... # type: QTextDocument.MetaInformation + DocumentUrl = ... # type: QTextDocument.MetaInformation + + class FindFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextDocument.FindFlags', 'QTextDocument.FindFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextDocument.FindFlags', 'QTextDocument.FindFlag']) -> 'QTextDocument.FindFlags': ... + def __xor__(self, f: typing.Union['QTextDocument.FindFlags', 'QTextDocument.FindFlag']) -> 'QTextDocument.FindFlags': ... + def __ior__(self, f: typing.Union['QTextDocument.FindFlags', 'QTextDocument.FindFlag']) -> 'QTextDocument.FindFlags': ... + def __or__(self, f: typing.Union['QTextDocument.FindFlags', 'QTextDocument.FindFlag']) -> 'QTextDocument.FindFlags': ... + def __iand__(self, f: typing.Union['QTextDocument.FindFlags', 'QTextDocument.FindFlag']) -> 'QTextDocument.FindFlags': ... + def __and__(self, f: typing.Union['QTextDocument.FindFlags', 'QTextDocument.FindFlag']) -> 'QTextDocument.FindFlags': ... + def __invert__(self) -> 'QTextDocument.FindFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class MarkdownFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature']) -> 'QTextDocument.MarkdownFeatures': ... + def __xor__(self, f: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature']) -> 'QTextDocument.MarkdownFeatures': ... + def __ior__(self, f: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature']) -> 'QTextDocument.MarkdownFeatures': ... + def __or__(self, f: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature']) -> 'QTextDocument.MarkdownFeatures': ... + def __iand__(self, f: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature']) -> 'QTextDocument.MarkdownFeatures': ... + def __and__(self, f: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature']) -> 'QTextDocument.MarkdownFeatures': ... + def __invert__(self) -> 'QTextDocument.MarkdownFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setMarkdown(self, markdown: typing.Optional[str], features: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature'] = ...) -> None: ... + def toMarkdown(self, features: typing.Union['QTextDocument.MarkdownFeatures', 'QTextDocument.MarkdownFeature'] = ...) -> str: ... + def toRawText(self) -> str: ... + baseUrlChanged: typing.ClassVar[QtCore.pyqtSignal] + def setBaseUrl(self, url: QtCore.QUrl) -> None: ... + def baseUrl(self) -> QtCore.QUrl: ... + def setDefaultCursorMoveStyle(self, style: QtCore.Qt.CursorMoveStyle) -> None: ... + def defaultCursorMoveStyle(self) -> QtCore.Qt.CursorMoveStyle: ... + def clearUndoRedoStacks(self, stacks: 'QTextDocument.Stacks' = ...) -> None: ... + def availableRedoSteps(self) -> int: ... + def availableUndoSteps(self) -> int: ... + def characterCount(self) -> int: ... + def lineCount(self) -> int: ... + def setDocumentMargin(self, margin: float) -> None: ... + def documentMargin(self) -> float: ... + def characterAt(self, pos: int) -> str: ... + documentLayoutChanged: typing.ClassVar[QtCore.pyqtSignal] + undoCommandAdded: typing.ClassVar[QtCore.pyqtSignal] + def setIndentWidth(self, width: float) -> None: ... + def indentWidth(self) -> float: ... + def lastBlock(self) -> 'QTextBlock': ... + def firstBlock(self) -> 'QTextBlock': ... + def findBlockByLineNumber(self, blockNumber: int) -> 'QTextBlock': ... + def findBlockByNumber(self, blockNumber: int) -> 'QTextBlock': ... + def revision(self) -> int: ... + def setDefaultTextOption(self, option: 'QTextOption') -> None: ... + def defaultTextOption(self) -> 'QTextOption': ... + def setMaximumBlockCount(self, maximum: int) -> None: ... + def maximumBlockCount(self) -> int: ... + def defaultStyleSheet(self) -> str: ... + def setDefaultStyleSheet(self, sheet: typing.Optional[str]) -> None: ... + def blockCount(self) -> int: ... + def size(self) -> QtCore.QSizeF: ... + def adjustSize(self) -> None: ... + def idealWidth(self) -> float: ... + def textWidth(self) -> float: ... + def setTextWidth(self, width: float) -> None: ... + def drawContents(self, p: typing.Optional[QPainter], rect: QtCore.QRectF = ...) -> None: ... + def loadResource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... + def createObject(self, f: 'QTextFormat') -> typing.Optional['QTextObject']: ... + def setModified(self, on: bool = ...) -> None: ... + @typing.overload + def redo(self) -> None: ... + @typing.overload + def redo(self, cursor: typing.Optional[QTextCursor]) -> None: ... + @typing.overload + def undo(self) -> None: ... + @typing.overload + def undo(self, cursor: typing.Optional[QTextCursor]) -> None: ... + undoAvailable: typing.ClassVar[QtCore.pyqtSignal] + redoAvailable: typing.ClassVar[QtCore.pyqtSignal] + modificationChanged: typing.ClassVar[QtCore.pyqtSignal] + cursorPositionChanged: typing.ClassVar[QtCore.pyqtSignal] + contentsChanged: typing.ClassVar[QtCore.pyqtSignal] + contentsChange: typing.ClassVar[QtCore.pyqtSignal] + blockCountChanged: typing.ClassVar[QtCore.pyqtSignal] + def useDesignMetrics(self) -> bool: ... + def setUseDesignMetrics(self, b: bool) -> None: ... + def markContentsDirty(self, from_: int, length: int) -> None: ... + def allFormats(self) -> typing.List['QTextFormat']: ... + def addResource(self, type: int, name: QtCore.QUrl, resource: typing.Any) -> None: ... + def resource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... + def print(self, printer: typing.Optional[QPagedPaintDevice]) -> None: ... + def print_(self, printer: typing.Optional[QPagedPaintDevice]) -> None: ... + def isModified(self) -> bool: ... + def pageCount(self) -> int: ... + def defaultFont(self) -> QFont: ... + def setDefaultFont(self, font: QFont) -> None: ... + def pageSize(self) -> QtCore.QSizeF: ... + def setPageSize(self, size: QtCore.QSizeF) -> None: ... + def end(self) -> 'QTextBlock': ... + def begin(self) -> 'QTextBlock': ... + def findBlock(self, pos: int) -> 'QTextBlock': ... + def objectForFormat(self, a0: 'QTextFormat') -> typing.Optional['QTextObject']: ... + def object(self, objectIndex: int) -> typing.Optional['QTextObject']: ... + def rootFrame(self) -> typing.Optional['QTextFrame']: ... + @typing.overload + def find(self, subString: typing.Optional[str], position: int = ..., options: 'QTextDocument.FindFlags' = ...) -> QTextCursor: ... + @typing.overload + def find(self, expr: QtCore.QRegExp, position: int = ..., options: 'QTextDocument.FindFlags' = ...) -> QTextCursor: ... + @typing.overload + def find(self, expr: QtCore.QRegularExpression, position: int = ..., options: 'QTextDocument.FindFlags' = ...) -> QTextCursor: ... + @typing.overload + def find(self, subString: typing.Optional[str], cursor: QTextCursor, options: 'QTextDocument.FindFlags' = ...) -> QTextCursor: ... + @typing.overload + def find(self, expr: QtCore.QRegExp, cursor: QTextCursor, options: 'QTextDocument.FindFlags' = ...) -> QTextCursor: ... + @typing.overload + def find(self, expr: QtCore.QRegularExpression, cursor: QTextCursor, options: 'QTextDocument.FindFlags' = ...) -> QTextCursor: ... + def setPlainText(self, text: typing.Optional[str]) -> None: ... + def toPlainText(self) -> str: ... + def setHtml(self, html: typing.Optional[str]) -> None: ... + def toHtml(self, encoding: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> str: ... + def metaInformation(self, info: 'QTextDocument.MetaInformation') -> str: ... + def setMetaInformation(self, info: 'QTextDocument.MetaInformation', a1: typing.Optional[str]) -> None: ... + def documentLayout(self) -> typing.Optional[QAbstractTextDocumentLayout]: ... + def setDocumentLayout(self, layout: typing.Optional[QAbstractTextDocumentLayout]) -> None: ... + def isRedoAvailable(self) -> bool: ... + def isUndoAvailable(self) -> bool: ... + def isUndoRedoEnabled(self) -> bool: ... + def setUndoRedoEnabled(self, enable: bool) -> None: ... + def clear(self) -> None: ... + def isEmpty(self) -> bool: ... + def clone(self, parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional['QTextDocument']: ... + + +class QTextDocumentFragment(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, document: typing.Optional[QTextDocument]) -> None: ... + @typing.overload + def __init__(self, range: QTextCursor) -> None: ... + @typing.overload + def __init__(self, rhs: 'QTextDocumentFragment') -> None: ... + + @typing.overload + @staticmethod + def fromHtml(html: typing.Optional[str]) -> 'QTextDocumentFragment': ... + @typing.overload + @staticmethod + def fromHtml(html: typing.Optional[str], resourceProvider: typing.Optional[QTextDocument]) -> 'QTextDocumentFragment': ... + @staticmethod + def fromPlainText(plainText: typing.Optional[str]) -> 'QTextDocumentFragment': ... + def toHtml(self, encoding: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> str: ... + def toPlainText(self) -> str: ... + def isEmpty(self) -> bool: ... + + +class QTextDocumentWriter(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QtCore.QIODevice], format: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], format: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + + @staticmethod + def supportedDocumentFormats() -> typing.List[QtCore.QByteArray]: ... + def codec(self) -> typing.Optional[QtCore.QTextCodec]: ... + def setCodec(self, codec: typing.Optional[QtCore.QTextCodec]) -> None: ... + @typing.overload + def write(self, document: typing.Optional[QTextDocument]) -> bool: ... + @typing.overload + def write(self, fragment: QTextDocumentFragment) -> bool: ... + def fileName(self) -> str: ... + def setFileName(self, fileName: typing.Optional[str]) -> None: ... + def device(self) -> typing.Optional[QtCore.QIODevice]: ... + def setDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + def format(self) -> QtCore.QByteArray: ... + def setFormat(self, format: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + + +class QTextLength(PyQt5.sipsimplewrapper): + + class Type(int): + VariableLength = ... # type: QTextLength.Type + FixedLength = ... # type: QTextLength.Type + PercentageLength = ... # type: QTextLength.Type + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, atype: 'QTextLength.Type', avalue: float) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextLength') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def rawValue(self) -> float: ... + def value(self, maximumLength: float) -> float: ... + def type(self) -> 'QTextLength.Type': ... + + +class QTextFormat(PyQt5.sipsimplewrapper): + + class Property(int): + ObjectIndex = ... # type: QTextFormat.Property + CssFloat = ... # type: QTextFormat.Property + LayoutDirection = ... # type: QTextFormat.Property + OutlinePen = ... # type: QTextFormat.Property + BackgroundBrush = ... # type: QTextFormat.Property + ForegroundBrush = ... # type: QTextFormat.Property + BlockAlignment = ... # type: QTextFormat.Property + BlockTopMargin = ... # type: QTextFormat.Property + BlockBottomMargin = ... # type: QTextFormat.Property + BlockLeftMargin = ... # type: QTextFormat.Property + BlockRightMargin = ... # type: QTextFormat.Property + TextIndent = ... # type: QTextFormat.Property + BlockIndent = ... # type: QTextFormat.Property + BlockNonBreakableLines = ... # type: QTextFormat.Property + BlockTrailingHorizontalRulerWidth = ... # type: QTextFormat.Property + FontFamily = ... # type: QTextFormat.Property + FontPointSize = ... # type: QTextFormat.Property + FontSizeAdjustment = ... # type: QTextFormat.Property + FontSizeIncrement = ... # type: QTextFormat.Property + FontWeight = ... # type: QTextFormat.Property + FontItalic = ... # type: QTextFormat.Property + FontUnderline = ... # type: QTextFormat.Property + FontOverline = ... # type: QTextFormat.Property + FontStrikeOut = ... # type: QTextFormat.Property + FontFixedPitch = ... # type: QTextFormat.Property + FontPixelSize = ... # type: QTextFormat.Property + TextUnderlineColor = ... # type: QTextFormat.Property + TextVerticalAlignment = ... # type: QTextFormat.Property + TextOutline = ... # type: QTextFormat.Property + IsAnchor = ... # type: QTextFormat.Property + AnchorHref = ... # type: QTextFormat.Property + AnchorName = ... # type: QTextFormat.Property + ObjectType = ... # type: QTextFormat.Property + ListStyle = ... # type: QTextFormat.Property + ListIndent = ... # type: QTextFormat.Property + FrameBorder = ... # type: QTextFormat.Property + FrameMargin = ... # type: QTextFormat.Property + FramePadding = ... # type: QTextFormat.Property + FrameWidth = ... # type: QTextFormat.Property + FrameHeight = ... # type: QTextFormat.Property + TableColumns = ... # type: QTextFormat.Property + TableColumnWidthConstraints = ... # type: QTextFormat.Property + TableCellSpacing = ... # type: QTextFormat.Property + TableCellPadding = ... # type: QTextFormat.Property + TableCellRowSpan = ... # type: QTextFormat.Property + TableCellColumnSpan = ... # type: QTextFormat.Property + ImageName = ... # type: QTextFormat.Property + ImageWidth = ... # type: QTextFormat.Property + ImageHeight = ... # type: QTextFormat.Property + TextUnderlineStyle = ... # type: QTextFormat.Property + TableHeaderRowCount = ... # type: QTextFormat.Property + FullWidthSelection = ... # type: QTextFormat.Property + PageBreakPolicy = ... # type: QTextFormat.Property + TextToolTip = ... # type: QTextFormat.Property + FrameTopMargin = ... # type: QTextFormat.Property + FrameBottomMargin = ... # type: QTextFormat.Property + FrameLeftMargin = ... # type: QTextFormat.Property + FrameRightMargin = ... # type: QTextFormat.Property + FrameBorderBrush = ... # type: QTextFormat.Property + FrameBorderStyle = ... # type: QTextFormat.Property + BackgroundImageUrl = ... # type: QTextFormat.Property + TabPositions = ... # type: QTextFormat.Property + FirstFontProperty = ... # type: QTextFormat.Property + FontCapitalization = ... # type: QTextFormat.Property + FontLetterSpacing = ... # type: QTextFormat.Property + FontWordSpacing = ... # type: QTextFormat.Property + LastFontProperty = ... # type: QTextFormat.Property + TableCellTopPadding = ... # type: QTextFormat.Property + TableCellBottomPadding = ... # type: QTextFormat.Property + TableCellLeftPadding = ... # type: QTextFormat.Property + TableCellRightPadding = ... # type: QTextFormat.Property + FontStyleHint = ... # type: QTextFormat.Property + FontStyleStrategy = ... # type: QTextFormat.Property + FontKerning = ... # type: QTextFormat.Property + LineHeight = ... # type: QTextFormat.Property + LineHeightType = ... # type: QTextFormat.Property + FontHintingPreference = ... # type: QTextFormat.Property + ListNumberPrefix = ... # type: QTextFormat.Property + ListNumberSuffix = ... # type: QTextFormat.Property + FontStretch = ... # type: QTextFormat.Property + FontLetterSpacingType = ... # type: QTextFormat.Property + HeadingLevel = ... # type: QTextFormat.Property + ImageQuality = ... # type: QTextFormat.Property + FontFamilies = ... # type: QTextFormat.Property + FontStyleName = ... # type: QTextFormat.Property + BlockQuoteLevel = ... # type: QTextFormat.Property + BlockCodeLanguage = ... # type: QTextFormat.Property + BlockCodeFence = ... # type: QTextFormat.Property + BlockMarker = ... # type: QTextFormat.Property + TableBorderCollapse = ... # type: QTextFormat.Property + TableCellTopBorder = ... # type: QTextFormat.Property + TableCellBottomBorder = ... # type: QTextFormat.Property + TableCellLeftBorder = ... # type: QTextFormat.Property + TableCellRightBorder = ... # type: QTextFormat.Property + TableCellTopBorderStyle = ... # type: QTextFormat.Property + TableCellBottomBorderStyle = ... # type: QTextFormat.Property + TableCellLeftBorderStyle = ... # type: QTextFormat.Property + TableCellRightBorderStyle = ... # type: QTextFormat.Property + TableCellTopBorderBrush = ... # type: QTextFormat.Property + TableCellBottomBorderBrush = ... # type: QTextFormat.Property + TableCellLeftBorderBrush = ... # type: QTextFormat.Property + TableCellRightBorderBrush = ... # type: QTextFormat.Property + ImageTitle = ... # type: QTextFormat.Property + ImageAltText = ... # type: QTextFormat.Property + UserProperty = ... # type: QTextFormat.Property + + class PageBreakFlag(int): + PageBreak_Auto = ... # type: QTextFormat.PageBreakFlag + PageBreak_AlwaysBefore = ... # type: QTextFormat.PageBreakFlag + PageBreak_AlwaysAfter = ... # type: QTextFormat.PageBreakFlag + + class ObjectTypes(int): + NoObject = ... # type: QTextFormat.ObjectTypes + ImageObject = ... # type: QTextFormat.ObjectTypes + TableObject = ... # type: QTextFormat.ObjectTypes + TableCellObject = ... # type: QTextFormat.ObjectTypes + UserObject = ... # type: QTextFormat.ObjectTypes + + class FormatType(int): + InvalidFormat = ... # type: QTextFormat.FormatType + BlockFormat = ... # type: QTextFormat.FormatType + CharFormat = ... # type: QTextFormat.FormatType + ListFormat = ... # type: QTextFormat.FormatType + TableFormat = ... # type: QTextFormat.FormatType + FrameFormat = ... # type: QTextFormat.FormatType + UserFormat = ... # type: QTextFormat.FormatType + + class PageBreakFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextFormat.PageBreakFlags', 'QTextFormat.PageBreakFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextFormat.PageBreakFlags', 'QTextFormat.PageBreakFlag']) -> 'QTextFormat.PageBreakFlags': ... + def __xor__(self, f: typing.Union['QTextFormat.PageBreakFlags', 'QTextFormat.PageBreakFlag']) -> 'QTextFormat.PageBreakFlags': ... + def __ior__(self, f: typing.Union['QTextFormat.PageBreakFlags', 'QTextFormat.PageBreakFlag']) -> 'QTextFormat.PageBreakFlags': ... + def __or__(self, f: typing.Union['QTextFormat.PageBreakFlags', 'QTextFormat.PageBreakFlag']) -> 'QTextFormat.PageBreakFlags': ... + def __iand__(self, f: typing.Union['QTextFormat.PageBreakFlags', 'QTextFormat.PageBreakFlag']) -> 'QTextFormat.PageBreakFlags': ... + def __and__(self, f: typing.Union['QTextFormat.PageBreakFlags', 'QTextFormat.PageBreakFlag']) -> 'QTextFormat.PageBreakFlags': ... + def __invert__(self) -> 'QTextFormat.PageBreakFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, type: int) -> None: ... + @typing.overload + def __init__(self, rhs: 'QTextFormat') -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + + def isEmpty(self) -> bool: ... + def swap(self, other: 'QTextFormat') -> None: ... + def toTableCellFormat(self) -> 'QTextTableCellFormat': ... + def isTableCellFormat(self) -> bool: ... + def propertyCount(self) -> int: ... + def setObjectType(self, atype: int) -> None: ... + def clearForeground(self) -> None: ... + def foreground(self) -> QBrush: ... + def setForeground(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def clearBackground(self) -> None: ... + def background(self) -> QBrush: ... + def setBackground(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def layoutDirection(self) -> QtCore.Qt.LayoutDirection: ... + def setLayoutDirection(self, direction: QtCore.Qt.LayoutDirection) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def toImageFormat(self) -> 'QTextImageFormat': ... + def toFrameFormat(self) -> 'QTextFrameFormat': ... + def toTableFormat(self) -> 'QTextTableFormat': ... + def toListFormat(self) -> 'QTextListFormat': ... + def toCharFormat(self) -> 'QTextCharFormat': ... + def toBlockFormat(self) -> 'QTextBlockFormat': ... + def isTableFormat(self) -> bool: ... + def isImageFormat(self) -> bool: ... + def isFrameFormat(self) -> bool: ... + def isListFormat(self) -> bool: ... + def isBlockFormat(self) -> bool: ... + def isCharFormat(self) -> bool: ... + def objectType(self) -> int: ... + def properties(self) -> typing.Dict[int, typing.Any]: ... + def lengthVectorProperty(self, propertyId: int) -> typing.List[QTextLength]: ... + def lengthProperty(self, propertyId: int) -> QTextLength: ... + def brushProperty(self, propertyId: int) -> QBrush: ... + def penProperty(self, propertyId: int) -> QPen: ... + def colorProperty(self, propertyId: int) -> QColor: ... + def stringProperty(self, propertyId: int) -> str: ... + def doubleProperty(self, propertyId: int) -> float: ... + def intProperty(self, propertyId: int) -> int: ... + def boolProperty(self, propertyId: int) -> bool: ... + def hasProperty(self, propertyId: int) -> bool: ... + def clearProperty(self, propertyId: int) -> None: ... + @typing.overload + def setProperty(self, propertyId: int, value: typing.Any) -> None: ... + @typing.overload + def setProperty(self, propertyId: int, lengths: typing.Iterable[QTextLength]) -> None: ... + def property(self, propertyId: int) -> typing.Any: ... + def setObjectIndex(self, object: int) -> None: ... + def objectIndex(self) -> int: ... + def type(self) -> int: ... + def isValid(self) -> bool: ... + def merge(self, other: 'QTextFormat') -> None: ... + + +class QTextCharFormat(QTextFormat): + + class FontPropertiesInheritanceBehavior(int): + FontPropertiesSpecifiedOnly = ... # type: QTextCharFormat.FontPropertiesInheritanceBehavior + FontPropertiesAll = ... # type: QTextCharFormat.FontPropertiesInheritanceBehavior + + class UnderlineStyle(int): + NoUnderline = ... # type: QTextCharFormat.UnderlineStyle + SingleUnderline = ... # type: QTextCharFormat.UnderlineStyle + DashUnderline = ... # type: QTextCharFormat.UnderlineStyle + DotLine = ... # type: QTextCharFormat.UnderlineStyle + DashDotLine = ... # type: QTextCharFormat.UnderlineStyle + DashDotDotLine = ... # type: QTextCharFormat.UnderlineStyle + WaveUnderline = ... # type: QTextCharFormat.UnderlineStyle + SpellCheckUnderline = ... # type: QTextCharFormat.UnderlineStyle + + class VerticalAlignment(int): + AlignNormal = ... # type: QTextCharFormat.VerticalAlignment + AlignSuperScript = ... # type: QTextCharFormat.VerticalAlignment + AlignSubScript = ... # type: QTextCharFormat.VerticalAlignment + AlignMiddle = ... # type: QTextCharFormat.VerticalAlignment + AlignTop = ... # type: QTextCharFormat.VerticalAlignment + AlignBottom = ... # type: QTextCharFormat.VerticalAlignment + AlignBaseline = ... # type: QTextCharFormat.VerticalAlignment + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextCharFormat') -> None: ... + + def fontStyleName(self) -> typing.Any: ... + def setFontStyleName(self, styleName: typing.Optional[str]) -> None: ... + def fontFamilies(self) -> typing.Any: ... + def setFontFamilies(self, families: typing.Iterable[typing.Optional[str]]) -> None: ... + def fontLetterSpacingType(self) -> QFont.SpacingType: ... + def setFontLetterSpacingType(self, letterSpacingType: QFont.SpacingType) -> None: ... + def setFontStretch(self, factor: int) -> None: ... + def fontStretch(self) -> int: ... + def fontHintingPreference(self) -> QFont.HintingPreference: ... + def setFontHintingPreference(self, hintingPreference: QFont.HintingPreference) -> None: ... + def fontKerning(self) -> bool: ... + def setFontKerning(self, enable: bool) -> None: ... + def fontStyleStrategy(self) -> QFont.StyleStrategy: ... + def fontStyleHint(self) -> QFont.StyleHint: ... + def setFontStyleStrategy(self, strategy: QFont.StyleStrategy) -> None: ... + def setFontStyleHint(self, hint: QFont.StyleHint, strategy: QFont.StyleStrategy = ...) -> None: ... + def fontWordSpacing(self) -> float: ... + def setFontWordSpacing(self, spacing: float) -> None: ... + def fontLetterSpacing(self) -> float: ... + def setFontLetterSpacing(self, spacing: float) -> None: ... + def fontCapitalization(self) -> QFont.Capitalization: ... + def setFontCapitalization(self, capitalization: QFont.Capitalization) -> None: ... + def anchorNames(self) -> typing.List[str]: ... + def setAnchorNames(self, names: typing.Iterable[typing.Optional[str]]) -> None: ... + def toolTip(self) -> str: ... + def setToolTip(self, tip: typing.Optional[str]) -> None: ... + def underlineStyle(self) -> 'QTextCharFormat.UnderlineStyle': ... + def setUnderlineStyle(self, style: 'QTextCharFormat.UnderlineStyle') -> None: ... + def textOutline(self) -> QPen: ... + def setTextOutline(self, pen: typing.Union[QPen, typing.Union[QColor, QtCore.Qt.GlobalColor]]) -> None: ... + def setTableCellColumnSpan(self, atableCellColumnSpan: int) -> None: ... + def setTableCellRowSpan(self, atableCellRowSpan: int) -> None: ... + def tableCellColumnSpan(self) -> int: ... + def tableCellRowSpan(self) -> int: ... + def anchorHref(self) -> str: ... + def setAnchorHref(self, value: typing.Optional[str]) -> None: ... + def isAnchor(self) -> bool: ... + def setAnchor(self, anchor: bool) -> None: ... + def verticalAlignment(self) -> 'QTextCharFormat.VerticalAlignment': ... + def setVerticalAlignment(self, alignment: 'QTextCharFormat.VerticalAlignment') -> None: ... + def fontFixedPitch(self) -> bool: ... + def setFontFixedPitch(self, fixedPitch: bool) -> None: ... + def underlineColor(self) -> QColor: ... + def setUnderlineColor(self, color: typing.Union[QColor, QtCore.Qt.GlobalColor]) -> None: ... + def fontStrikeOut(self) -> bool: ... + def setFontStrikeOut(self, strikeOut: bool) -> None: ... + def fontOverline(self) -> bool: ... + def setFontOverline(self, overline: bool) -> None: ... + def fontUnderline(self) -> bool: ... + def setFontUnderline(self, underline: bool) -> None: ... + def fontItalic(self) -> bool: ... + def setFontItalic(self, italic: bool) -> None: ... + def fontWeight(self) -> int: ... + def setFontWeight(self, weight: int) -> None: ... + def fontPointSize(self) -> float: ... + def setFontPointSize(self, size: float) -> None: ... + def fontFamily(self) -> str: ... + def setFontFamily(self, family: typing.Optional[str]) -> None: ... + def font(self) -> QFont: ... + @typing.overload + def setFont(self, font: QFont) -> None: ... + @typing.overload + def setFont(self, font: QFont, behavior: 'QTextCharFormat.FontPropertiesInheritanceBehavior') -> None: ... + def isValid(self) -> bool: ... + + +class QTextBlockFormat(QTextFormat): + + class MarkerType(int): + NoMarker = ... # type: QTextBlockFormat.MarkerType + Unchecked = ... # type: QTextBlockFormat.MarkerType + Checked = ... # type: QTextBlockFormat.MarkerType + + class LineHeightTypes(int): + SingleHeight = ... # type: QTextBlockFormat.LineHeightTypes + ProportionalHeight = ... # type: QTextBlockFormat.LineHeightTypes + FixedHeight = ... # type: QTextBlockFormat.LineHeightTypes + MinimumHeight = ... # type: QTextBlockFormat.LineHeightTypes + LineDistanceHeight = ... # type: QTextBlockFormat.LineHeightTypes + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextBlockFormat') -> None: ... + + def marker(self) -> 'QTextBlockFormat.MarkerType': ... + def setMarker(self, marker: 'QTextBlockFormat.MarkerType') -> None: ... + def headingLevel(self) -> int: ... + def setHeadingLevel(self, alevel: int) -> None: ... + def lineHeightType(self) -> int: ... + @typing.overload + def lineHeight(self) -> float: ... + @typing.overload + def lineHeight(self, scriptLineHeight: float, scaling: float = ...) -> float: ... + def setLineHeight(self, height: float, heightType: int) -> None: ... + def tabPositions(self) -> typing.List['QTextOption.Tab']: ... + def setTabPositions(self, tabs: typing.Iterable['QTextOption.Tab']) -> None: ... + def pageBreakPolicy(self) -> QTextFormat.PageBreakFlags: ... + def setPageBreakPolicy(self, flags: typing.Union[QTextFormat.PageBreakFlags, QTextFormat.PageBreakFlag]) -> None: ... + def setIndent(self, aindent: int) -> None: ... + def setAlignment(self, aalignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def nonBreakableLines(self) -> bool: ... + def setNonBreakableLines(self, b: bool) -> None: ... + def indent(self) -> int: ... + def textIndent(self) -> float: ... + def setTextIndent(self, margin: float) -> None: ... + def rightMargin(self) -> float: ... + def setRightMargin(self, margin: float) -> None: ... + def leftMargin(self) -> float: ... + def setLeftMargin(self, margin: float) -> None: ... + def bottomMargin(self) -> float: ... + def setBottomMargin(self, margin: float) -> None: ... + def topMargin(self) -> float: ... + def setTopMargin(self, margin: float) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def isValid(self) -> bool: ... + + +class QTextListFormat(QTextFormat): + + class Style(int): + ListDisc = ... # type: QTextListFormat.Style + ListCircle = ... # type: QTextListFormat.Style + ListSquare = ... # type: QTextListFormat.Style + ListDecimal = ... # type: QTextListFormat.Style + ListLowerAlpha = ... # type: QTextListFormat.Style + ListUpperAlpha = ... # type: QTextListFormat.Style + ListLowerRoman = ... # type: QTextListFormat.Style + ListUpperRoman = ... # type: QTextListFormat.Style + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextListFormat') -> None: ... + + def setNumberSuffix(self, ns: typing.Optional[str]) -> None: ... + def setNumberPrefix(self, np: typing.Optional[str]) -> None: ... + def numberSuffix(self) -> str: ... + def numberPrefix(self) -> str: ... + def setIndent(self, aindent: int) -> None: ... + def setStyle(self, astyle: 'QTextListFormat.Style') -> None: ... + def indent(self) -> int: ... + def style(self) -> 'QTextListFormat.Style': ... + def isValid(self) -> bool: ... + + +class QTextImageFormat(QTextCharFormat): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextImageFormat') -> None: ... + + def setQuality(self, quality: int = ...) -> None: ... + def setHeight(self, aheight: float) -> None: ... + def setWidth(self, awidth: float) -> None: ... + def setName(self, aname: typing.Optional[str]) -> None: ... + def quality(self) -> int: ... + def height(self) -> float: ... + def width(self) -> float: ... + def name(self) -> str: ... + def isValid(self) -> bool: ... + + +class QTextFrameFormat(QTextFormat): + + class BorderStyle(int): + BorderStyle_None = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_Dotted = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_Dashed = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_Solid = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_Double = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_DotDash = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_DotDotDash = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_Groove = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_Ridge = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_Inset = ... # type: QTextFrameFormat.BorderStyle + BorderStyle_Outset = ... # type: QTextFrameFormat.BorderStyle + + class Position(int): + InFlow = ... # type: QTextFrameFormat.Position + FloatLeft = ... # type: QTextFrameFormat.Position + FloatRight = ... # type: QTextFrameFormat.Position + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextFrameFormat') -> None: ... + + def setRightMargin(self, amargin: float) -> None: ... + def setLeftMargin(self, amargin: float) -> None: ... + def setBottomMargin(self, amargin: float) -> None: ... + def setTopMargin(self, amargin: float) -> None: ... + def rightMargin(self) -> float: ... + def leftMargin(self) -> float: ... + def bottomMargin(self) -> float: ... + def topMargin(self) -> float: ... + def borderStyle(self) -> 'QTextFrameFormat.BorderStyle': ... + def setBorderStyle(self, style: 'QTextFrameFormat.BorderStyle') -> None: ... + def borderBrush(self) -> QBrush: ... + def setBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def pageBreakPolicy(self) -> QTextFormat.PageBreakFlags: ... + def setPageBreakPolicy(self, flags: typing.Union[QTextFormat.PageBreakFlags, QTextFormat.PageBreakFlag]) -> None: ... + @typing.overload + def setHeight(self, aheight: float) -> None: ... + @typing.overload + def setHeight(self, aheight: QTextLength) -> None: ... + def setPadding(self, apadding: float) -> None: ... + def setMargin(self, amargin: float) -> None: ... + def setBorder(self, aborder: float) -> None: ... + def height(self) -> QTextLength: ... + def width(self) -> QTextLength: ... + @typing.overload + def setWidth(self, length: QTextLength) -> None: ... + @typing.overload + def setWidth(self, awidth: float) -> None: ... + def padding(self) -> float: ... + def margin(self) -> float: ... + def border(self) -> float: ... + def position(self) -> 'QTextFrameFormat.Position': ... + def setPosition(self, f: 'QTextFrameFormat.Position') -> None: ... + def isValid(self) -> bool: ... + + +class QTextTableFormat(QTextFrameFormat): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextTableFormat') -> None: ... + + def borderCollapse(self) -> bool: ... + def setBorderCollapse(self, borderCollapse: bool) -> None: ... + def headerRowCount(self) -> int: ... + def setHeaderRowCount(self, count: int) -> None: ... + def setAlignment(self, aalignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def setCellPadding(self, apadding: float) -> None: ... + def setColumns(self, acolumns: int) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def cellPadding(self) -> float: ... + def setCellSpacing(self, spacing: float) -> None: ... + def cellSpacing(self) -> float: ... + def clearColumnWidthConstraints(self) -> None: ... + def columnWidthConstraints(self) -> typing.List[QTextLength]: ... + def setColumnWidthConstraints(self, constraints: typing.Iterable[QTextLength]) -> None: ... + def columns(self) -> int: ... + def isValid(self) -> bool: ... + + +class QTextTableCellFormat(QTextCharFormat): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextTableCellFormat') -> None: ... + + def setBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def rightBorderBrush(self) -> QBrush: ... + def setRightBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def leftBorderBrush(self) -> QBrush: ... + def setLeftBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def bottomBorderBrush(self) -> QBrush: ... + def setBottomBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def topBorderBrush(self) -> QBrush: ... + def setTopBorderBrush(self, brush: typing.Union[QBrush, typing.Union[QColor, QtCore.Qt.GlobalColor], QGradient]) -> None: ... + def setBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... + def rightBorderStyle(self) -> QTextFrameFormat.BorderStyle: ... + def setRightBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... + def leftBorderStyle(self) -> QTextFrameFormat.BorderStyle: ... + def setLeftBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... + def bottomBorderStyle(self) -> QTextFrameFormat.BorderStyle: ... + def setBottomBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... + def topBorderStyle(self) -> QTextFrameFormat.BorderStyle: ... + def setTopBorderStyle(self, style: QTextFrameFormat.BorderStyle) -> None: ... + def setBorder(self, width: float) -> None: ... + def rightBorder(self) -> float: ... + def setRightBorder(self, width: float) -> None: ... + def leftBorder(self) -> float: ... + def setLeftBorder(self, width: float) -> None: ... + def bottomBorder(self) -> float: ... + def setBottomBorder(self, width: float) -> None: ... + def topBorder(self) -> float: ... + def setTopBorder(self, width: float) -> None: ... + def setPadding(self, padding: float) -> None: ... + def rightPadding(self) -> float: ... + def setRightPadding(self, padding: float) -> None: ... + def leftPadding(self) -> float: ... + def setLeftPadding(self, padding: float) -> None: ... + def bottomPadding(self) -> float: ... + def setBottomPadding(self, padding: float) -> None: ... + def topPadding(self) -> float: ... + def setTopPadding(self, padding: float) -> None: ... + def isValid(self) -> bool: ... + + +class QTextInlineObject(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextInlineObject') -> None: ... + + def format(self) -> QTextFormat: ... + def formatIndex(self) -> int: ... + def textPosition(self) -> int: ... + def setDescent(self, d: float) -> None: ... + def setAscent(self, a: float) -> None: ... + def setWidth(self, w: float) -> None: ... + def textDirection(self) -> QtCore.Qt.LayoutDirection: ... + def height(self) -> float: ... + def descent(self) -> float: ... + def ascent(self) -> float: ... + def width(self) -> float: ... + def rect(self) -> QtCore.QRectF: ... + def isValid(self) -> bool: ... + + +class QTextLayout(PyQt5.sipsimplewrapper): + + class CursorMode(int): + SkipCharacters = ... # type: QTextLayout.CursorMode + SkipWords = ... # type: QTextLayout.CursorMode + + class FormatRange(PyQt5.sipsimplewrapper): + + format = ... # type: QTextCharFormat + length = ... # type: int + start = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextLayout.FormatRange') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], font: QFont, paintDevice: typing.Optional[QPaintDevice] = ...) -> None: ... + @typing.overload + def __init__(self, b: 'QTextBlock') -> None: ... + + def clearFormats(self) -> None: ... + def formats(self) -> typing.List['QTextLayout.FormatRange']: ... + def setFormats(self, overrides: typing.Iterable['QTextLayout.FormatRange']) -> None: ... + def glyphRuns(self, from_: int = ..., length: int = ...) -> typing.List[QGlyphRun]: ... + def rightCursorPosition(self, oldPos: int) -> int: ... + def leftCursorPosition(self, oldPos: int) -> int: ... + def cursorMoveStyle(self) -> QtCore.Qt.CursorMoveStyle: ... + def setCursorMoveStyle(self, style: QtCore.Qt.CursorMoveStyle) -> None: ... + def clearLayout(self) -> None: ... + def maximumWidth(self) -> float: ... + def minimumWidth(self) -> float: ... + def boundingRect(self) -> QtCore.QRectF: ... + def setPosition(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def position(self) -> QtCore.QPointF: ... + @typing.overload + def drawCursor(self, p: typing.Optional[QPainter], pos: typing.Union[QtCore.QPointF, QtCore.QPoint], cursorPosition: int) -> None: ... + @typing.overload + def drawCursor(self, p: typing.Optional[QPainter], pos: typing.Union[QtCore.QPointF, QtCore.QPoint], cursorPosition: int, width: int) -> None: ... + def draw(self, p: typing.Optional[QPainter], pos: typing.Union[QtCore.QPointF, QtCore.QPoint], selections: typing.Iterable['QTextLayout.FormatRange'] = ..., clip: QtCore.QRectF = ...) -> None: ... + def previousCursorPosition(self, oldPos: int, mode: 'QTextLayout.CursorMode' = ...) -> int: ... + def nextCursorPosition(self, oldPos: int, mode: 'QTextLayout.CursorMode' = ...) -> int: ... + def isValidCursorPosition(self, pos: int) -> bool: ... + def lineForTextPosition(self, pos: int) -> 'QTextLine': ... + def lineAt(self, i: int) -> 'QTextLine': ... + def lineCount(self) -> int: ... + def createLine(self) -> 'QTextLine': ... + def endLayout(self) -> None: ... + def beginLayout(self) -> None: ... + def cacheEnabled(self) -> bool: ... + def setCacheEnabled(self, enable: bool) -> None: ... + def clearAdditionalFormats(self) -> None: ... + def additionalFormats(self) -> typing.List['QTextLayout.FormatRange']: ... + def setAdditionalFormats(self, overrides: typing.Iterable['QTextLayout.FormatRange']) -> None: ... + def preeditAreaText(self) -> str: ... + def preeditAreaPosition(self) -> int: ... + def setPreeditArea(self, position: int, text: typing.Optional[str]) -> None: ... + def textOption(self) -> 'QTextOption': ... + def setTextOption(self, option: 'QTextOption') -> None: ... + def text(self) -> str: ... + def setText(self, string: typing.Optional[str]) -> None: ... + def font(self) -> QFont: ... + def setFont(self, f: QFont) -> None: ... + + +class QTextLine(PyQt5.sipsimplewrapper): + + class CursorPosition(int): + CursorBetweenCharacters = ... # type: QTextLine.CursorPosition + CursorOnCharacter = ... # type: QTextLine.CursorPosition + + class Edge(int): + Leading = ... # type: QTextLine.Edge + Trailing = ... # type: QTextLine.Edge + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextLine') -> None: ... + + def glyphRuns(self, from_: int = ..., length: int = ...) -> typing.List[QGlyphRun]: ... + def horizontalAdvance(self) -> float: ... + def leadingIncluded(self) -> bool: ... + def setLeadingIncluded(self, included: bool) -> None: ... + def leading(self) -> float: ... + def position(self) -> QtCore.QPointF: ... + def draw(self, painter: typing.Optional[QPainter], position: typing.Union[QtCore.QPointF, QtCore.QPoint], selection: typing.Optional[QTextLayout.FormatRange] = ...) -> None: ... + def lineNumber(self) -> int: ... + def textLength(self) -> int: ... + def textStart(self) -> int: ... + def setPosition(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setNumColumns(self, columns: int) -> None: ... + @typing.overload + def setNumColumns(self, columns: int, alignmentWidth: float) -> None: ... + def setLineWidth(self, width: float) -> None: ... + def xToCursor(self, x: float, edge: 'QTextLine.CursorPosition' = ...) -> int: ... + def cursorToX(self, cursorPos: typing.Optional[int], edge: 'QTextLine.Edge' = ...) -> typing.Tuple[float, typing.Optional[int]]: ... + def naturalTextRect(self) -> QtCore.QRectF: ... + def naturalTextWidth(self) -> float: ... + def height(self) -> float: ... + def descent(self) -> float: ... + def ascent(self) -> float: ... + def width(self) -> float: ... + def y(self) -> float: ... + def x(self) -> float: ... + def rect(self) -> QtCore.QRectF: ... + def isValid(self) -> bool: ... + + +class QTextObject(QtCore.QObject): + + def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... + + def objectIndex(self) -> int: ... + def document(self) -> typing.Optional[QTextDocument]: ... + def formatIndex(self) -> int: ... + def format(self) -> QTextFormat: ... + def setFormat(self, format: QTextFormat) -> None: ... + + +class QTextBlockGroup(QTextObject): + + def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... + + def blockList(self) -> typing.List['QTextBlock']: ... + def blockFormatChanged(self, block: 'QTextBlock') -> None: ... + def blockRemoved(self, block: 'QTextBlock') -> None: ... + def blockInserted(self, block: 'QTextBlock') -> None: ... + + +class QTextList(QTextBlockGroup): + + def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... + + def setFormat(self, aformat: QTextListFormat) -> None: ... + def format(self) -> QTextListFormat: ... + def add(self, block: 'QTextBlock') -> None: ... + def remove(self, a0: 'QTextBlock') -> None: ... + def removeItem(self, i: int) -> None: ... + def itemText(self, a0: 'QTextBlock') -> str: ... + def itemNumber(self, a0: 'QTextBlock') -> int: ... + def item(self, i: int) -> 'QTextBlock': ... + def __len__(self) -> int: ... + def count(self) -> int: ... + + +class QTextFrame(QTextObject): + + class iterator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, o: 'QTextFrame.iterator') -> None: ... + + def __isub__(self, a0: int) -> 'QTextFrame.iterator': ... + def __iadd__(self, a0: int) -> 'QTextFrame.iterator': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def atEnd(self) -> bool: ... + def currentBlock(self) -> 'QTextBlock': ... + def currentFrame(self) -> typing.Optional['QTextFrame']: ... + def parentFrame(self) -> typing.Optional['QTextFrame']: ... + + def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... + + def setFrameFormat(self, aformat: QTextFrameFormat) -> None: ... + def end(self) -> 'QTextFrame.iterator': ... + def begin(self) -> 'QTextFrame.iterator': ... + def parentFrame(self) -> typing.Optional['QTextFrame']: ... + def childFrames(self) -> typing.List['QTextFrame']: ... + def lastPosition(self) -> int: ... + def firstPosition(self) -> int: ... + def lastCursorPosition(self) -> QTextCursor: ... + def firstCursorPosition(self) -> QTextCursor: ... + def frameFormat(self) -> QTextFrameFormat: ... + + +class QTextBlock(PyQt5.sip.wrapper): + + class iterator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, o: 'QTextBlock.iterator') -> None: ... + + def __isub__(self, a0: int) -> 'QTextBlock.iterator': ... + def __iadd__(self, a0: int) -> 'QTextBlock.iterator': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def atEnd(self) -> bool: ... + def fragment(self) -> 'QTextFragment': ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, o: 'QTextBlock') -> None: ... + + def __ge__(self, o: 'QTextBlock') -> bool: ... + def textFormats(self) -> typing.List[QTextLayout.FormatRange]: ... + def textDirection(self) -> QtCore.Qt.LayoutDirection: ... + def lineCount(self) -> int: ... + def setLineCount(self, count: int) -> None: ... + def firstLineNumber(self) -> int: ... + def blockNumber(self) -> int: ... + def setVisible(self, visible: bool) -> None: ... + def isVisible(self) -> bool: ... + def setRevision(self, rev: int) -> None: ... + def revision(self) -> int: ... + def clearLayout(self) -> None: ... + def setUserState(self, state: int) -> None: ... + def userState(self) -> int: ... + def setUserData(self, data: typing.Optional['QTextBlockUserData']) -> None: ... + def userData(self) -> typing.Optional['QTextBlockUserData']: ... + def previous(self) -> 'QTextBlock': ... + def next(self) -> 'QTextBlock': ... + def end(self) -> 'QTextBlock.iterator': ... + def begin(self) -> 'QTextBlock.iterator': ... + def textList(self) -> typing.Optional[QTextList]: ... + def document(self) -> typing.Optional[QTextDocument]: ... + def text(self) -> str: ... + def charFormatIndex(self) -> int: ... + def charFormat(self) -> QTextCharFormat: ... + def blockFormatIndex(self) -> int: ... + def blockFormat(self) -> QTextBlockFormat: ... + def layout(self) -> typing.Optional[QTextLayout]: ... + def contains(self, position: int) -> bool: ... + def length(self) -> int: ... + def position(self) -> int: ... + def __lt__(self, o: 'QTextBlock') -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isValid(self) -> bool: ... + + +class QTextFragment(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, o: 'QTextFragment') -> None: ... + + def __ge__(self, o: 'QTextFragment') -> bool: ... + def glyphRuns(self, from_: int = ..., length: int = ...) -> typing.List[QGlyphRun]: ... + def text(self) -> str: ... + def charFormatIndex(self) -> int: ... + def charFormat(self) -> QTextCharFormat: ... + def contains(self, position: int) -> bool: ... + def length(self) -> int: ... + def position(self) -> int: ... + def __lt__(self, o: 'QTextFragment') -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isValid(self) -> bool: ... + + +class QTextBlockUserData(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextBlockUserData') -> None: ... + + +class QTextOption(PyQt5.sipsimplewrapper): + + class TabType(int): + LeftTab = ... # type: QTextOption.TabType + RightTab = ... # type: QTextOption.TabType + CenterTab = ... # type: QTextOption.TabType + DelimiterTab = ... # type: QTextOption.TabType + + class Flag(int): + IncludeTrailingSpaces = ... # type: QTextOption.Flag + ShowTabsAndSpaces = ... # type: QTextOption.Flag + ShowLineAndParagraphSeparators = ... # type: QTextOption.Flag + AddSpaceForLineAndParagraphSeparators = ... # type: QTextOption.Flag + SuppressColors = ... # type: QTextOption.Flag + ShowDocumentTerminator = ... # type: QTextOption.Flag + + class WrapMode(int): + NoWrap = ... # type: QTextOption.WrapMode + WordWrap = ... # type: QTextOption.WrapMode + ManualWrap = ... # type: QTextOption.WrapMode + WrapAnywhere = ... # type: QTextOption.WrapMode + WrapAtWordBoundaryOrAnywhere = ... # type: QTextOption.WrapMode + + class Flags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextOption.Flags', 'QTextOption.Flag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextOption.Flags', 'QTextOption.Flag']) -> 'QTextOption.Flags': ... + def __xor__(self, f: typing.Union['QTextOption.Flags', 'QTextOption.Flag']) -> 'QTextOption.Flags': ... + def __ior__(self, f: typing.Union['QTextOption.Flags', 'QTextOption.Flag']) -> 'QTextOption.Flags': ... + def __or__(self, f: typing.Union['QTextOption.Flags', 'QTextOption.Flag']) -> 'QTextOption.Flags': ... + def __iand__(self, f: typing.Union['QTextOption.Flags', 'QTextOption.Flag']) -> 'QTextOption.Flags': ... + def __and__(self, f: typing.Union['QTextOption.Flags', 'QTextOption.Flag']) -> 'QTextOption.Flags': ... + def __invert__(self) -> 'QTextOption.Flags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class Tab(PyQt5.sipsimplewrapper): + + delimiter = ... # type: str + position = ... # type: float + type = ... # type: 'QTextOption.TabType' + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, pos: float, tabType: 'QTextOption.TabType', delim: str = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextOption.Tab') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + @typing.overload + def __init__(self, o: 'QTextOption') -> None: ... + + def tabStopDistance(self) -> float: ... + def setTabStopDistance(self, tabStopDistance: float) -> None: ... + def tabs(self) -> typing.List['QTextOption.Tab']: ... + def setTabs(self, tabStops: typing.Iterable['QTextOption.Tab']) -> None: ... + def setTabStop(self, atabStop: float) -> None: ... + def setFlags(self, flags: typing.Union['QTextOption.Flags', 'QTextOption.Flag']) -> None: ... + def setAlignment(self, aalignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def useDesignMetrics(self) -> bool: ... + def setUseDesignMetrics(self, b: bool) -> None: ... + def tabArray(self) -> typing.List[float]: ... + def setTabArray(self, tabStops: typing.Iterable[float]) -> None: ... + def tabStop(self) -> float: ... + def flags(self) -> 'QTextOption.Flags': ... + def wrapMode(self) -> 'QTextOption.WrapMode': ... + def setWrapMode(self, wrap: 'QTextOption.WrapMode') -> None: ... + def textDirection(self) -> QtCore.Qt.LayoutDirection: ... + def setTextDirection(self, aDirection: QtCore.Qt.LayoutDirection) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + + +class QTextTableCell(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, o: 'QTextTableCell') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def tableCellFormatIndex(self) -> int: ... + def lastCursorPosition(self) -> QTextCursor: ... + def firstCursorPosition(self) -> QTextCursor: ... + def isValid(self) -> bool: ... + def columnSpan(self) -> int: ... + def rowSpan(self) -> int: ... + def column(self) -> int: ... + def row(self) -> int: ... + def setFormat(self, format: QTextCharFormat) -> None: ... + def format(self) -> QTextCharFormat: ... + + +class QTextTable(QTextFrame): + + def __init__(self, doc: typing.Optional[QTextDocument]) -> None: ... + + def appendColumns(self, count: int) -> None: ... + def appendRows(self, count: int) -> None: ... + def setFormat(self, aformat: QTextTableFormat) -> None: ... + def format(self) -> QTextTableFormat: ... + def rowEnd(self, c: QTextCursor) -> QTextCursor: ... + def rowStart(self, c: QTextCursor) -> QTextCursor: ... + @typing.overload + def cellAt(self, row: int, col: int) -> QTextTableCell: ... + @typing.overload + def cellAt(self, position: int) -> QTextTableCell: ... + @typing.overload + def cellAt(self, c: QTextCursor) -> QTextTableCell: ... + def columns(self) -> int: ... + def rows(self) -> int: ... + def splitCell(self, row: int, col: int, numRows: int, numCols: int) -> None: ... + @typing.overload + def mergeCells(self, row: int, col: int, numRows: int, numCols: int) -> None: ... + @typing.overload + def mergeCells(self, cursor: QTextCursor) -> None: ... + def removeColumns(self, pos: int, num: int) -> None: ... + def removeRows(self, pos: int, num: int) -> None: ... + def insertColumns(self, pos: int, num: int) -> None: ... + def insertRows(self, pos: int, num: int) -> None: ... + def resize(self, rows: int, cols: int) -> None: ... + + +class QTouchDevice(PyQt5.sipsimplewrapper): + + class CapabilityFlag(int): + Position = ... # type: QTouchDevice.CapabilityFlag + Area = ... # type: QTouchDevice.CapabilityFlag + Pressure = ... # type: QTouchDevice.CapabilityFlag + Velocity = ... # type: QTouchDevice.CapabilityFlag + RawPositions = ... # type: QTouchDevice.CapabilityFlag + NormalizedPosition = ... # type: QTouchDevice.CapabilityFlag + MouseEmulation = ... # type: QTouchDevice.CapabilityFlag + + class DeviceType(int): + TouchScreen = ... # type: QTouchDevice.DeviceType + TouchPad = ... # type: QTouchDevice.DeviceType + + class Capabilities(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTouchDevice.Capabilities', 'QTouchDevice.CapabilityFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTouchDevice.Capabilities', 'QTouchDevice.CapabilityFlag']) -> 'QTouchDevice.Capabilities': ... + def __xor__(self, f: typing.Union['QTouchDevice.Capabilities', 'QTouchDevice.CapabilityFlag']) -> 'QTouchDevice.Capabilities': ... + def __ior__(self, f: typing.Union['QTouchDevice.Capabilities', 'QTouchDevice.CapabilityFlag']) -> 'QTouchDevice.Capabilities': ... + def __or__(self, f: typing.Union['QTouchDevice.Capabilities', 'QTouchDevice.CapabilityFlag']) -> 'QTouchDevice.Capabilities': ... + def __iand__(self, f: typing.Union['QTouchDevice.Capabilities', 'QTouchDevice.CapabilityFlag']) -> 'QTouchDevice.Capabilities': ... + def __and__(self, f: typing.Union['QTouchDevice.Capabilities', 'QTouchDevice.CapabilityFlag']) -> 'QTouchDevice.Capabilities': ... + def __invert__(self) -> 'QTouchDevice.Capabilities': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTouchDevice') -> None: ... + + def setMaximumTouchPoints(self, max: int) -> None: ... + def maximumTouchPoints(self) -> int: ... + def setCapabilities(self, caps: typing.Union['QTouchDevice.Capabilities', 'QTouchDevice.CapabilityFlag']) -> None: ... + def setType(self, devType: 'QTouchDevice.DeviceType') -> None: ... + def setName(self, name: typing.Optional[str]) -> None: ... + def capabilities(self) -> 'QTouchDevice.Capabilities': ... + def type(self) -> 'QTouchDevice.DeviceType': ... + def name(self) -> str: ... + @staticmethod + def devices() -> typing.List['QTouchDevice']: ... + + +class QTransform(PyQt5.sipsimplewrapper): + + class TransformationType(int): + TxNone = ... # type: QTransform.TransformationType + TxTranslate = ... # type: QTransform.TransformationType + TxScale = ... # type: QTransform.TransformationType + TxRotate = ... # type: QTransform.TransformationType + TxShear = ... # type: QTransform.TransformationType + TxProject = ... # type: QTransform.TransformationType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, m11: float, m12: float, m13: float, m21: float, m22: float, m23: float, m31: float, m32: float, m33: float = ...) -> None: ... + @typing.overload + def __init__(self, h11: float, h12: float, h13: float, h21: float, h22: float, h23: float) -> None: ... + @typing.overload + def __init__(self, other: 'QTransform') -> None: ... + + def __truediv__(self, n: float) -> 'QTransform': ... + def __add__(self, n: float) -> 'QTransform': ... + def __sub__(self, n: float) -> 'QTransform': ... + def __hash__(self) -> int: ... + def __isub__(self, num: float) -> 'QTransform': ... + def __iadd__(self, num: float) -> 'QTransform': ... + def __itruediv__(self, div: float) -> 'QTransform': ... + @staticmethod + def fromScale(dx: float, dy: float) -> 'QTransform': ... + @staticmethod + def fromTranslate(dx: float, dy: float) -> 'QTransform': ... + def dy(self) -> float: ... + def dx(self) -> float: ... + def m33(self) -> float: ... + def m32(self) -> float: ... + def m31(self) -> float: ... + def m23(self) -> float: ... + def m22(self) -> float: ... + def m21(self) -> float: ... + def m13(self) -> float: ... + def m12(self) -> float: ... + def m11(self) -> float: ... + def determinant(self) -> float: ... + def isTranslating(self) -> bool: ... + def isRotating(self) -> bool: ... + def isScaling(self) -> bool: ... + def isInvertible(self) -> bool: ... + def isIdentity(self) -> bool: ... + def isAffine(self) -> bool: ... + @typing.overload + def mapRect(self, a0: QtCore.QRect) -> QtCore.QRect: ... + @typing.overload + def mapRect(self, a0: QtCore.QRectF) -> QtCore.QRectF: ... + def mapToPolygon(self, r: QtCore.QRect) -> QPolygon: ... + @typing.overload + def map(self, x: int, y: int) -> typing.Tuple[typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def map(self, x: float, y: float) -> typing.Tuple[typing.Optional[float], typing.Optional[float]]: ... + @typing.overload + def map(self, p: QtCore.QPoint) -> QtCore.QPoint: ... + @typing.overload + def map(self, p: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def map(self, l: QtCore.QLine) -> QtCore.QLine: ... + @typing.overload + def map(self, l: QtCore.QLineF) -> QtCore.QLineF: ... + @typing.overload + def map(self, a: QPolygonF) -> QPolygonF: ... + @typing.overload + def map(self, a: QPolygon) -> QPolygon: ... + @typing.overload + def map(self, r: QRegion) -> QRegion: ... + @typing.overload + def map(self, p: QPainterPath) -> QPainterPath: ... + def reset(self) -> None: ... + def __matmul__(self, o: 'QTransform') -> 'QTransform': ... + @typing.overload + def __mul__(self, o: 'QTransform') -> 'QTransform': ... + @typing.overload + def __mul__(self, n: float) -> 'QTransform': ... + def __imatmul__(self, a0: 'QTransform') -> 'QTransform': ... + @typing.overload + def __imul__(self, a0: 'QTransform') -> 'QTransform': ... + @typing.overload + def __imul__(self, num: float) -> 'QTransform': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @staticmethod + def quadToQuad(one: QPolygonF, two: QPolygonF, result: 'QTransform') -> bool: ... + @staticmethod + def quadToSquare(quad: QPolygonF, result: 'QTransform') -> bool: ... + @staticmethod + def squareToQuad(square: QPolygonF, result: 'QTransform') -> bool: ... + def rotateRadians(self, angle: float, axis: QtCore.Qt.Axis = ...) -> 'QTransform': ... + def rotate(self, angle: float, axis: QtCore.Qt.Axis = ...) -> 'QTransform': ... + def shear(self, sh: float, sv: float) -> 'QTransform': ... + def scale(self, sx: float, sy: float) -> 'QTransform': ... + def translate(self, dx: float, dy: float) -> 'QTransform': ... + def transposed(self) -> 'QTransform': ... + def adjoint(self) -> 'QTransform': ... + def inverted(self) -> typing.Tuple['QTransform', typing.Optional[bool]]: ... + def setMatrix(self, m11: float, m12: float, m13: float, m21: float, m22: float, m23: float, m31: float, m32: float, m33: float) -> None: ... + def type(self) -> 'QTransform.TransformationType': ... + + +class QValidator(QtCore.QObject): + + class State(int): + Invalid = ... # type: QValidator.State + Intermediate = ... # type: QValidator.State + Acceptable = ... # type: QValidator.State + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + changed: typing.ClassVar[QtCore.pyqtSignal] + def locale(self) -> QtCore.QLocale: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + def fixup(self, a0: typing.Optional[str]) -> str: ... + def validate(self, a0: typing.Optional[str], a1: int) -> typing.Tuple['QValidator.State', str, int]: ... + + +class QIntValidator(QValidator): + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, bottom: int, top: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def top(self) -> int: ... + def bottom(self) -> int: ... + def setRange(self, bottom: int, top: int) -> None: ... + def setTop(self, a0: int) -> None: ... + def setBottom(self, a0: int) -> None: ... + def fixup(self, input: typing.Optional[str]) -> str: ... + def validate(self, a0: typing.Optional[str], a1: int) -> typing.Tuple[QValidator.State, str, int]: ... + + +class QDoubleValidator(QValidator): + + class Notation(int): + StandardNotation = ... # type: QDoubleValidator.Notation + ScientificNotation = ... # type: QDoubleValidator.Notation + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, bottom: float, top: float, decimals: int, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def notation(self) -> 'QDoubleValidator.Notation': ... + def setNotation(self, a0: 'QDoubleValidator.Notation') -> None: ... + def decimals(self) -> int: ... + def top(self) -> float: ... + def bottom(self) -> float: ... + def setDecimals(self, a0: int) -> None: ... + def setTop(self, a0: float) -> None: ... + def setBottom(self, a0: float) -> None: ... + def setRange(self, minimum: float, maximum: float, decimals: int = ...) -> None: ... + def validate(self, a0: typing.Optional[str], a1: int) -> typing.Tuple[QValidator.State, str, int]: ... + + +class QRegExpValidator(QValidator): + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, rx: QtCore.QRegExp, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def regExp(self) -> QtCore.QRegExp: ... + def setRegExp(self, rx: QtCore.QRegExp) -> None: ... + def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QValidator.State, str, int]: ... + + +class QRegularExpressionValidator(QValidator): + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, re: QtCore.QRegularExpression, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setRegularExpression(self, re: QtCore.QRegularExpression) -> None: ... + def regularExpression(self) -> QtCore.QRegularExpression: ... + def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QValidator.State, str, int]: ... + + +class QVector2D(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, xpos: float, ypos: float) -> None: ... + @typing.overload + def __init__(self, point: QtCore.QPoint) -> None: ... + @typing.overload + def __init__(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, vector: 'QVector3D') -> None: ... + @typing.overload + def __init__(self, vector: 'QVector4D') -> None: ... + @typing.overload + def __init__(self, a0: 'QVector2D') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + @typing.overload + def __truediv__(self, divisor: float) -> 'QVector2D': ... + @typing.overload + def __truediv__(self, divisor: 'QVector2D') -> 'QVector2D': ... + def __add__(self, v2: 'QVector2D') -> 'QVector2D': ... + def __sub__(self, v2: 'QVector2D') -> 'QVector2D': ... + @typing.overload + def __mul__(self, factor: float) -> 'QVector2D': ... + @typing.overload + def __mul__(self, v2: 'QVector2D') -> 'QVector2D': ... + def __rmul__(self, factor: float) -> 'QVector2D': ... + def __neg__(self) -> 'QVector2D': ... + def __getitem__(self, i: int) -> float: ... + def distanceToLine(self, point: 'QVector2D', direction: 'QVector2D') -> float: ... + def distanceToPoint(self, point: 'QVector2D') -> float: ... + def toPointF(self) -> QtCore.QPointF: ... + def toPoint(self) -> QtCore.QPoint: ... + @typing.overload + def __itruediv__(self, divisor: float) -> 'QVector2D': ... + @typing.overload + def __itruediv__(self, vector: 'QVector2D') -> 'QVector2D': ... + @typing.overload + def __imul__(self, factor: float) -> 'QVector2D': ... + @typing.overload + def __imul__(self, vector: 'QVector2D') -> 'QVector2D': ... + def __isub__(self, vector: 'QVector2D') -> 'QVector2D': ... + def __iadd__(self, vector: 'QVector2D') -> 'QVector2D': ... + def setY(self, aY: float) -> None: ... + def setX(self, aX: float) -> None: ... + def y(self) -> float: ... + def x(self) -> float: ... + def isNull(self) -> bool: ... + def toVector4D(self) -> 'QVector4D': ... + def toVector3D(self) -> 'QVector3D': ... + @staticmethod + def dotProduct(v1: 'QVector2D', v2: 'QVector2D') -> float: ... + def normalize(self) -> None: ... + def normalized(self) -> 'QVector2D': ... + def lengthSquared(self) -> float: ... + def length(self) -> float: ... + def __repr__(self) -> str: ... + + +class QVector3D(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, xpos: float, ypos: float, zpos: float) -> None: ... + @typing.overload + def __init__(self, point: QtCore.QPoint) -> None: ... + @typing.overload + def __init__(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, vector: QVector2D) -> None: ... + @typing.overload + def __init__(self, vector: QVector2D, zpos: float) -> None: ... + @typing.overload + def __init__(self, vector: 'QVector4D') -> None: ... + @typing.overload + def __init__(self, a0: 'QVector3D') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + @typing.overload + def __truediv__(self, divisor: float) -> 'QVector3D': ... + @typing.overload + def __truediv__(self, divisor: 'QVector3D') -> 'QVector3D': ... + def __add__(self, v2: 'QVector3D') -> 'QVector3D': ... + def __sub__(self, v2: 'QVector3D') -> 'QVector3D': ... + @typing.overload + def __mul__(self, matrix: QMatrix4x4) -> 'QVector3D': ... + @typing.overload + def __mul__(self, factor: float) -> 'QVector3D': ... + @typing.overload + def __mul__(self, v2: 'QVector3D') -> 'QVector3D': ... + def __rmul__(self, factor: float) -> 'QVector3D': ... + def __neg__(self) -> 'QVector3D': ... + def unproject(self, modelView: QMatrix4x4, projection: QMatrix4x4, viewport: QtCore.QRect) -> 'QVector3D': ... + def project(self, modelView: QMatrix4x4, projection: QMatrix4x4, viewport: QtCore.QRect) -> 'QVector3D': ... + def __getitem__(self, i: int) -> float: ... + def distanceToPoint(self, point: 'QVector3D') -> float: ... + def toPointF(self) -> QtCore.QPointF: ... + def toPoint(self) -> QtCore.QPoint: ... + @typing.overload + def __itruediv__(self, divisor: float) -> 'QVector3D': ... + @typing.overload + def __itruediv__(self, vector: 'QVector3D') -> 'QVector3D': ... + @typing.overload + def __imul__(self, factor: float) -> 'QVector3D': ... + @typing.overload + def __imul__(self, vector: 'QVector3D') -> 'QVector3D': ... + def __isub__(self, vector: 'QVector3D') -> 'QVector3D': ... + def __iadd__(self, vector: 'QVector3D') -> 'QVector3D': ... + def setZ(self, aZ: float) -> None: ... + def setY(self, aY: float) -> None: ... + def setX(self, aX: float) -> None: ... + def z(self) -> float: ... + def y(self) -> float: ... + def x(self) -> float: ... + def isNull(self) -> bool: ... + def toVector4D(self) -> 'QVector4D': ... + def toVector2D(self) -> QVector2D: ... + def distanceToLine(self, point: 'QVector3D', direction: 'QVector3D') -> float: ... + @typing.overload + def distanceToPlane(self, plane: 'QVector3D', normal: 'QVector3D') -> float: ... + @typing.overload + def distanceToPlane(self, plane1: 'QVector3D', plane2: 'QVector3D', plane3: 'QVector3D') -> float: ... + @typing.overload + @staticmethod + def normal(v1: 'QVector3D', v2: 'QVector3D') -> 'QVector3D': ... + @typing.overload + @staticmethod + def normal(v1: 'QVector3D', v2: 'QVector3D', v3: 'QVector3D') -> 'QVector3D': ... + @staticmethod + def crossProduct(v1: 'QVector3D', v2: 'QVector3D') -> 'QVector3D': ... + @staticmethod + def dotProduct(v1: 'QVector3D', v2: 'QVector3D') -> float: ... + def normalize(self) -> None: ... + def normalized(self) -> 'QVector3D': ... + def lengthSquared(self) -> float: ... + def length(self) -> float: ... + def __repr__(self) -> str: ... + + +class QVector4D(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, xpos: float, ypos: float, zpos: float, wpos: float) -> None: ... + @typing.overload + def __init__(self, point: QtCore.QPoint) -> None: ... + @typing.overload + def __init__(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def __init__(self, vector: QVector2D) -> None: ... + @typing.overload + def __init__(self, vector: QVector2D, zpos: float, wpos: float) -> None: ... + @typing.overload + def __init__(self, vector: QVector3D) -> None: ... + @typing.overload + def __init__(self, vector: QVector3D, wpos: float) -> None: ... + @typing.overload + def __init__(self, a0: 'QVector4D') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + @typing.overload + def __truediv__(self, divisor: float) -> 'QVector4D': ... + @typing.overload + def __truediv__(self, divisor: 'QVector4D') -> 'QVector4D': ... + def __add__(self, v2: 'QVector4D') -> 'QVector4D': ... + def __sub__(self, v2: 'QVector4D') -> 'QVector4D': ... + @typing.overload + def __mul__(self, matrix: QMatrix4x4) -> 'QVector4D': ... + @typing.overload + def __mul__(self, factor: float) -> 'QVector4D': ... + @typing.overload + def __mul__(self, v2: 'QVector4D') -> 'QVector4D': ... + def __rmul__(self, factor: float) -> 'QVector4D': ... + def __neg__(self) -> 'QVector4D': ... + def __getitem__(self, i: int) -> float: ... + def toPointF(self) -> QtCore.QPointF: ... + def toPoint(self) -> QtCore.QPoint: ... + @typing.overload + def __itruediv__(self, divisor: float) -> 'QVector4D': ... + @typing.overload + def __itruediv__(self, vector: 'QVector4D') -> 'QVector4D': ... + @typing.overload + def __imul__(self, factor: float) -> 'QVector4D': ... + @typing.overload + def __imul__(self, vector: 'QVector4D') -> 'QVector4D': ... + def __isub__(self, vector: 'QVector4D') -> 'QVector4D': ... + def __iadd__(self, vector: 'QVector4D') -> 'QVector4D': ... + def setW(self, aW: float) -> None: ... + def setZ(self, aZ: float) -> None: ... + def setY(self, aY: float) -> None: ... + def setX(self, aX: float) -> None: ... + def w(self) -> float: ... + def z(self) -> float: ... + def y(self) -> float: ... + def x(self) -> float: ... + def isNull(self) -> bool: ... + def toVector3DAffine(self) -> QVector3D: ... + def toVector3D(self) -> QVector3D: ... + def toVector2DAffine(self) -> QVector2D: ... + def toVector2D(self) -> QVector2D: ... + @staticmethod + def dotProduct(v1: 'QVector4D', v2: 'QVector4D') -> float: ... + def normalize(self) -> None: ... + def normalized(self) -> 'QVector4D': ... + def lengthSquared(self) -> float: ... + def length(self) -> float: ... + def __repr__(self) -> str: ... + + +def qIsGray(rgb: int) -> bool: ... +@typing.overload +def qGray(r: int, g: int, b: int) -> int: ... +@typing.overload +def qGray(rgb: int) -> int: ... +def qRgba(r: int, g: int, b: int, a: int) -> int: ... +def qRgb(r: int, g: int, b: int) -> int: ... +@typing.overload +def qAlpha(rgb: QRgba64) -> int: ... +@typing.overload +def qAlpha(rgb: int) -> int: ... +@typing.overload +def qBlue(rgb: QRgba64) -> int: ... +@typing.overload +def qBlue(rgb: int) -> int: ... +@typing.overload +def qGreen(rgb: QRgba64) -> int: ... +@typing.overload +def qGreen(rgb: int) -> int: ... +@typing.overload +def qRed(rgb: QRgba64) -> int: ... +@typing.overload +def qRed(rgb: int) -> int: ... +@typing.overload +def qUnpremultiply(c: QRgba64) -> QRgba64: ... +@typing.overload +def qUnpremultiply(p: int) -> int: ... +@typing.overload +def qPremultiply(c: QRgba64) -> QRgba64: ... +@typing.overload +def qPremultiply(x: int) -> int: ... +@typing.overload +def qRgba64(r: int, g: int, b: int, a: int) -> QRgba64: ... +@typing.overload +def qRgba64(c: int) -> QRgba64: ... +def qPixelFormatAlpha(channelSize: int, typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... +def qPixelFormatYuv(layout: QPixelFormat.YUVLayout, alphaSize: int = ..., alphaUsage: QPixelFormat.AlphaUsage = ..., alphaPosition: QPixelFormat.AlphaPosition = ..., premultiplied: QPixelFormat.AlphaPremultiplied = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ..., byteOrder: QPixelFormat.ByteOrder = ...) -> QPixelFormat: ... +def qPixelFormatHsv(channelSize: int, alphaSize: int = ..., alphaUsage: QPixelFormat.AlphaUsage = ..., alphaPosition: QPixelFormat.AlphaPosition = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... +def qPixelFormatHsl(channelSize: int, alphaSize: int = ..., alphaUsage: QPixelFormat.AlphaUsage = ..., alphaPosition: QPixelFormat.AlphaPosition = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... +def qPixelFormatCmyk(channelSize: int, alphaSize: int = ..., alphaUsage: QPixelFormat.AlphaUsage = ..., alphaPosition: QPixelFormat.AlphaPosition = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... +def qPixelFormatGrayscale(channelSize: int, typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... +def qPixelFormatRgba(red: int, green: int, blue: int, alfa: int, usage: QPixelFormat.AlphaUsage, position: QPixelFormat.AlphaPosition, premultiplied: QPixelFormat.AlphaPremultiplied = ..., typeInterpretation: QPixelFormat.TypeInterpretation = ...) -> QPixelFormat: ... +@typing.overload +def qFuzzyCompare(m1: QMatrix4x4, m2: QMatrix4x4) -> bool: ... +@typing.overload +def qFuzzyCompare(q1: QQuaternion, q2: QQuaternion) -> bool: ... +@typing.overload +def qFuzzyCompare(t1: QTransform, t2: QTransform) -> bool: ... +@typing.overload +def qFuzzyCompare(v1: QVector2D, v2: QVector2D) -> bool: ... +@typing.overload +def qFuzzyCompare(v1: QVector3D, v2: QVector3D) -> bool: ... +@typing.overload +def qFuzzyCompare(v1: QVector4D, v2: QVector4D) -> bool: ... +def qt_set_sequence_auto_mnemonic(b: bool) -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtHelp.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtHelp.abi3.so new file mode 100644 index 0000000..2fdcaeb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtHelp.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtHelp.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtHelp.pyi new file mode 100644 index 0000000..2de8491 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtHelp.pyi @@ -0,0 +1,314 @@ +# The PEP 484 type hints stub file for the QtHelp module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QCompressedHelpInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QCompressedHelpInfo') -> None: ... + + def isNull(self) -> bool: ... + @staticmethod + def fromCompressedHelpFile(documentationFileName: typing.Optional[str]) -> 'QCompressedHelpInfo': ... + def version(self) -> QtCore.QVersionNumber: ... + def component(self) -> str: ... + def namespaceName(self) -> str: ... + def swap(self, other: 'QCompressedHelpInfo') -> None: ... + + +class QHelpContentItem(PyQt5.sipsimplewrapper): + + def childPosition(self, child: typing.Optional['QHelpContentItem']) -> int: ... + def parent(self) -> typing.Optional['QHelpContentItem']: ... + def row(self) -> int: ... + def url(self) -> QtCore.QUrl: ... + def title(self) -> str: ... + def childCount(self) -> int: ... + def child(self, row: int) -> typing.Optional['QHelpContentItem']: ... + + +class QHelpContentModel(QtCore.QAbstractItemModel): + + contentsCreated: typing.ClassVar[QtCore.pyqtSignal] + contentsCreationStarted: typing.ClassVar[QtCore.pyqtSignal] + def isCreatingContents(self) -> bool: ... + def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def parent(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... + def data(self, index: QtCore.QModelIndex, role: int) -> typing.Any: ... + def contentItemAt(self, index: QtCore.QModelIndex) -> typing.Optional[QHelpContentItem]: ... + def createContents(self, customFilterName: typing.Optional[str]) -> None: ... + + +class QHelpContentWidget(QtWidgets.QTreeView): + + linkActivated: typing.ClassVar[QtCore.pyqtSignal] + def indexOf(self, link: QtCore.QUrl) -> QtCore.QModelIndex: ... + + +class QHelpEngineCore(QtCore.QObject): + + def __init__(self, collectionFile: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + @typing.overload + def documentsForKeyword(self, keyword: typing.Optional[str]) -> typing.List['QHelpLink']: ... + @typing.overload + def documentsForKeyword(self, keyword: typing.Optional[str], filterName: typing.Optional[str]) -> typing.List['QHelpLink']: ... + @typing.overload + def documentsForIdentifier(self, id: typing.Optional[str]) -> typing.List['QHelpLink']: ... + @typing.overload + def documentsForIdentifier(self, id: typing.Optional[str], filterName: typing.Optional[str]) -> typing.List['QHelpLink']: ... + def usesFilterEngine(self) -> bool: ... + def setUsesFilterEngine(self, uses: bool) -> None: ... + def filterEngine(self) -> typing.Optional['QHelpFilterEngine']: ... + readersAboutToBeInvalidated: typing.ClassVar[QtCore.pyqtSignal] + warning: typing.ClassVar[QtCore.pyqtSignal] + currentFilterChanged: typing.ClassVar[QtCore.pyqtSignal] + setupFinished: typing.ClassVar[QtCore.pyqtSignal] + setupStarted: typing.ClassVar[QtCore.pyqtSignal] + def setAutoSaveFilter(self, save: bool) -> None: ... + def autoSaveFilter(self) -> bool: ... + def error(self) -> str: ... + @staticmethod + def metaData(documentationFileName: typing.Optional[str], name: typing.Optional[str]) -> typing.Any: ... + def setCustomValue(self, key: typing.Optional[str], value: typing.Any) -> bool: ... + def customValue(self, key: typing.Optional[str], defaultValue: typing.Any = ...) -> typing.Any: ... + def removeCustomValue(self, key: typing.Optional[str]) -> bool: ... + def linksForKeyword(self, keyword: typing.Optional[str]) -> typing.Dict[str, QtCore.QUrl]: ... + def linksForIdentifier(self, id: typing.Optional[str]) -> typing.Dict[str, QtCore.QUrl]: ... + def fileData(self, url: QtCore.QUrl) -> QtCore.QByteArray: ... + def findFile(self, url: QtCore.QUrl) -> QtCore.QUrl: ... + @typing.overload + def files(self, namespaceName: typing.Optional[str], filterAttributes: typing.Iterable[typing.Optional[str]], extensionFilter: typing.Optional[str] = ...) -> typing.List[QtCore.QUrl]: ... + @typing.overload + def files(self, namespaceName: typing.Optional[str], filterName: typing.Optional[str], extensionFilter: typing.Optional[str] = ...) -> typing.List[QtCore.QUrl]: ... + def filterAttributeSets(self, namespaceName: typing.Optional[str]) -> typing.List[typing.List[str]]: ... + def registeredDocumentations(self) -> typing.List[str]: ... + def setCurrentFilter(self, filterName: typing.Optional[str]) -> None: ... + def currentFilter(self) -> str: ... + @typing.overload + def filterAttributes(self) -> typing.List[str]: ... + @typing.overload + def filterAttributes(self, filterName: typing.Optional[str]) -> typing.List[str]: ... + def addCustomFilter(self, filterName: typing.Optional[str], attributes: typing.Iterable[typing.Optional[str]]) -> bool: ... + def removeCustomFilter(self, filterName: typing.Optional[str]) -> bool: ... + def customFilters(self) -> typing.List[str]: ... + def documentationFileName(self, namespaceName: typing.Optional[str]) -> str: ... + def unregisterDocumentation(self, namespaceName: typing.Optional[str]) -> bool: ... + def registerDocumentation(self, documentationFileName: typing.Optional[str]) -> bool: ... + @staticmethod + def namespaceName(documentationFileName: typing.Optional[str]) -> str: ... + def copyCollectionFile(self, fileName: typing.Optional[str]) -> bool: ... + def setCollectionFile(self, fileName: typing.Optional[str]) -> None: ... + def collectionFile(self) -> str: ... + def setupData(self) -> bool: ... + + +class QHelpEngine(QHelpEngineCore): + + def __init__(self, collectionFile: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def searchEngine(self) -> typing.Optional['QHelpSearchEngine']: ... + def indexWidget(self) -> typing.Optional['QHelpIndexWidget']: ... + def contentWidget(self) -> typing.Optional[QHelpContentWidget]: ... + def indexModel(self) -> typing.Optional['QHelpIndexModel']: ... + def contentModel(self) -> typing.Optional[QHelpContentModel]: ... + + +class QHelpFilterData(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QHelpFilterData') -> None: ... + + def __ne__(self, other: object): ... + def versions(self) -> typing.List[QtCore.QVersionNumber]: ... + def components(self) -> typing.List[str]: ... + def setVersions(self, versions: typing.Iterable[QtCore.QVersionNumber]) -> None: ... + def setComponents(self, components: typing.Iterable[typing.Optional[str]]) -> None: ... + def swap(self, other: 'QHelpFilterData') -> None: ... + def __eq__(self, other: object): ... + + +class QHelpFilterEngine(QtCore.QObject): + + @typing.overload + def indices(self) -> typing.List[str]: ... + @typing.overload + def indices(self, filterName: typing.Optional[str]) -> typing.List[str]: ... + def availableVersions(self) -> typing.List[QtCore.QVersionNumber]: ... + filterActivated: typing.ClassVar[QtCore.pyqtSignal] + def namespacesForFilter(self, filterName: typing.Optional[str]) -> typing.List[str]: ... + def removeFilter(self, filterName: typing.Optional[str]) -> bool: ... + def setFilterData(self, filterName: typing.Optional[str], filterData: QHelpFilterData) -> bool: ... + def filterData(self, filterName: typing.Optional[str]) -> QHelpFilterData: ... + def availableComponents(self) -> typing.List[str]: ... + def setActiveFilter(self, filterName: typing.Optional[str]) -> bool: ... + def activeFilter(self) -> str: ... + def filters(self) -> typing.List[str]: ... + def namespaceToVersion(self) -> typing.Dict[str, QtCore.QVersionNumber]: ... + def namespaceToComponent(self) -> typing.Dict[str, str]: ... + + +class QHelpFilterSettingsWidget(QtWidgets.QWidget): + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + def applySettings(self, filterEngine: typing.Optional[QHelpFilterEngine]) -> bool: ... + def readSettings(self, filterEngine: typing.Optional[QHelpFilterEngine]) -> None: ... + def setAvailableVersions(self, versions: typing.Iterable[QtCore.QVersionNumber]) -> None: ... + def setAvailableComponents(self, components: typing.Iterable[typing.Optional[str]]) -> None: ... + + +class QHelpIndexModel(QtCore.QStringListModel): + + indexCreated: typing.ClassVar[QtCore.pyqtSignal] + indexCreationStarted: typing.ClassVar[QtCore.pyqtSignal] + def isCreatingIndex(self) -> bool: ... + def linksForKeyword(self, keyword: typing.Optional[str]) -> typing.Dict[str, QtCore.QUrl]: ... + def filter(self, filter: typing.Optional[str], wildcard: typing.Optional[str] = ...) -> QtCore.QModelIndex: ... + def createIndex(self, customFilterName: typing.Optional[str]) -> None: ... + def helpEngine(self) -> typing.Optional[QHelpEngineCore]: ... + + +class QHelpIndexWidget(QtWidgets.QListView): + + documentsActivated: typing.ClassVar[QtCore.pyqtSignal] + documentActivated: typing.ClassVar[QtCore.pyqtSignal] + def activateCurrentItem(self) -> None: ... + def filterIndices(self, filter: typing.Optional[str], wildcard: typing.Optional[str] = ...) -> None: ... + linksActivated: typing.ClassVar[QtCore.pyqtSignal] + linkActivated: typing.ClassVar[QtCore.pyqtSignal] + + +class QHelpLink(PyQt5.sipsimplewrapper): + + title = ... # type: typing.Optional[str] + url = ... # type: QtCore.QUrl + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QHelpLink') -> None: ... + + +class QHelpSearchQuery(PyQt5.sipsimplewrapper): + + class FieldName(int): + DEFAULT = ... # type: QHelpSearchQuery.FieldName + FUZZY = ... # type: QHelpSearchQuery.FieldName + WITHOUT = ... # type: QHelpSearchQuery.FieldName + PHRASE = ... # type: QHelpSearchQuery.FieldName + ALL = ... # type: QHelpSearchQuery.FieldName + ATLEAST = ... # type: QHelpSearchQuery.FieldName + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, field: 'QHelpSearchQuery.FieldName', wordList: typing.Iterable[typing.Optional[str]]) -> None: ... + @typing.overload + def __init__(self, a0: 'QHelpSearchQuery') -> None: ... + + +class QHelpSearchEngine(QtCore.QObject): + + def __init__(self, helpEngine: typing.Optional[QHelpEngineCore], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def searchInput(self) -> str: ... + def searchResults(self, start: int, end: int) -> typing.List['QHelpSearchResult']: ... + def searchResultCount(self) -> int: ... + searchingFinished: typing.ClassVar[QtCore.pyqtSignal] + searchingStarted: typing.ClassVar[QtCore.pyqtSignal] + indexingFinished: typing.ClassVar[QtCore.pyqtSignal] + indexingStarted: typing.ClassVar[QtCore.pyqtSignal] + def cancelSearching(self) -> None: ... + @typing.overload + def search(self, queryList: typing.Iterable[QHelpSearchQuery]) -> None: ... + @typing.overload + def search(self, searchInput: typing.Optional[str]) -> None: ... + def cancelIndexing(self) -> None: ... + def reindexDocumentation(self) -> None: ... + def hits(self, start: int, end: int) -> typing.List[typing.Tuple[str, str]]: ... + def hitCount(self) -> int: ... + def resultWidget(self) -> typing.Optional['QHelpSearchResultWidget']: ... + def queryWidget(self) -> typing.Optional['QHelpSearchQueryWidget']: ... + def query(self) -> typing.List[QHelpSearchQuery]: ... + + +class QHelpSearchResult(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QHelpSearchResult') -> None: ... + @typing.overload + def __init__(self, url: QtCore.QUrl, title: typing.Optional[str], snippet: typing.Optional[str]) -> None: ... + + def snippet(self) -> str: ... + def url(self) -> QtCore.QUrl: ... + def title(self) -> str: ... + + +class QHelpSearchQueryWidget(QtWidgets.QWidget): + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + def setSearchInput(self, searchInput: typing.Optional[str]) -> None: ... + def searchInput(self) -> str: ... + def setCompactMode(self, on: bool) -> None: ... + def isCompactMode(self) -> bool: ... + search: typing.ClassVar[QtCore.pyqtSignal] + def collapseExtendedSearch(self) -> None: ... + def expandExtendedSearch(self) -> None: ... + def setQuery(self, queryList: typing.Iterable[QHelpSearchQuery]) -> None: ... + def query(self) -> typing.List[QHelpSearchQuery]: ... + + +class QHelpSearchResultWidget(QtWidgets.QWidget): + + requestShowLink: typing.ClassVar[QtCore.pyqtSignal] + def linkAt(self, point: QtCore.QPoint) -> QtCore.QUrl: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtLocation.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtLocation.abi3.so new file mode 100644 index 0000000..8997c6f Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtLocation.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtLocation.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtLocation.pyi new file mode 100644 index 0000000..f4803ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtLocation.pyi @@ -0,0 +1,1285 @@ +# The PEP 484 type hints stub file for the QtLocation module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtPositioning + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QGeoCodeReply(QtCore.QObject): + + class Error(int): + NoError = ... # type: QGeoCodeReply.Error + EngineNotSetError = ... # type: QGeoCodeReply.Error + CommunicationError = ... # type: QGeoCodeReply.Error + ParseError = ... # type: QGeoCodeReply.Error + UnsupportedOptionError = ... # type: QGeoCodeReply.Error + CombinationError = ... # type: QGeoCodeReply.Error + UnknownError = ... # type: QGeoCodeReply.Error + + @typing.overload + def __init__(self, error: 'QGeoCodeReply.Error', errorString: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setOffset(self, offset: int) -> None: ... + def setLimit(self, limit: int) -> None: ... + def setLocations(self, locations: typing.Iterable[QtPositioning.QGeoLocation]) -> None: ... + def addLocation(self, location: QtPositioning.QGeoLocation) -> None: ... + def setViewport(self, viewport: QtPositioning.QGeoShape) -> None: ... + def setFinished(self, finished: bool) -> None: ... + def setError(self, error: 'QGeoCodeReply.Error', errorString: typing.Optional[str]) -> None: ... + finished: typing.ClassVar[QtCore.pyqtSignal] + aborted: typing.ClassVar[QtCore.pyqtSignal] + def abort(self) -> None: ... + def offset(self) -> int: ... + def limit(self) -> int: ... + def locations(self) -> typing.List[QtPositioning.QGeoLocation]: ... + def viewport(self) -> QtPositioning.QGeoShape: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def isFinished(self) -> bool: ... + + +class QGeoCodingManager(QtCore.QObject): + + error: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + def locale(self) -> QtCore.QLocale: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + def reverseGeocode(self, coordinate: QtPositioning.QGeoCoordinate, bounds: QtPositioning.QGeoShape = ...) -> typing.Optional[QGeoCodeReply]: ... + @typing.overload + def geocode(self, address: QtPositioning.QGeoAddress, bounds: QtPositioning.QGeoShape = ...) -> typing.Optional[QGeoCodeReply]: ... + @typing.overload + def geocode(self, searchString: typing.Optional[str], limit: int = ..., offset: int = ..., bounds: QtPositioning.QGeoShape = ...) -> typing.Optional[QGeoCodeReply]: ... + def managerVersion(self) -> int: ... + def managerName(self) -> str: ... + + +class QGeoCodingManagerEngine(QtCore.QObject): + + def __init__(self, parameters: typing.Dict[str, typing.Any], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + error: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + def locale(self) -> QtCore.QLocale: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + def reverseGeocode(self, coordinate: QtPositioning.QGeoCoordinate, bounds: QtPositioning.QGeoShape) -> typing.Optional[QGeoCodeReply]: ... + @typing.overload + def geocode(self, address: QtPositioning.QGeoAddress, bounds: QtPositioning.QGeoShape) -> typing.Optional[QGeoCodeReply]: ... + @typing.overload + def geocode(self, address: typing.Optional[str], limit: int, offset: int, bounds: QtPositioning.QGeoShape) -> typing.Optional[QGeoCodeReply]: ... + def managerVersion(self) -> int: ... + def managerName(self) -> str: ... + + +class QGeoManeuver(PyQt5.sipsimplewrapper): + + class InstructionDirection(int): + NoDirection = ... # type: QGeoManeuver.InstructionDirection + DirectionForward = ... # type: QGeoManeuver.InstructionDirection + DirectionBearRight = ... # type: QGeoManeuver.InstructionDirection + DirectionLightRight = ... # type: QGeoManeuver.InstructionDirection + DirectionRight = ... # type: QGeoManeuver.InstructionDirection + DirectionHardRight = ... # type: QGeoManeuver.InstructionDirection + DirectionUTurnRight = ... # type: QGeoManeuver.InstructionDirection + DirectionUTurnLeft = ... # type: QGeoManeuver.InstructionDirection + DirectionHardLeft = ... # type: QGeoManeuver.InstructionDirection + DirectionLeft = ... # type: QGeoManeuver.InstructionDirection + DirectionLightLeft = ... # type: QGeoManeuver.InstructionDirection + DirectionBearLeft = ... # type: QGeoManeuver.InstructionDirection + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoManeuver') -> None: ... + + def extendedAttributes(self) -> typing.Dict[str, typing.Any]: ... + def setExtendedAttributes(self, extendedAttributes: typing.Dict[str, typing.Any]) -> None: ... + def waypoint(self) -> QtPositioning.QGeoCoordinate: ... + def setWaypoint(self, coordinate: QtPositioning.QGeoCoordinate) -> None: ... + def distanceToNextInstruction(self) -> float: ... + def setDistanceToNextInstruction(self, distance: float) -> None: ... + def timeToNextInstruction(self) -> int: ... + def setTimeToNextInstruction(self, secs: int) -> None: ... + def direction(self) -> 'QGeoManeuver.InstructionDirection': ... + def setDirection(self, direction: 'QGeoManeuver.InstructionDirection') -> None: ... + def instructionText(self) -> str: ... + def setInstructionText(self, instructionText: typing.Optional[str]) -> None: ... + def position(self) -> QtPositioning.QGeoCoordinate: ... + def setPosition(self, position: QtPositioning.QGeoCoordinate) -> None: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoRoute(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoRoute') -> None: ... + + def extendedAttributes(self) -> typing.Dict[str, typing.Any]: ... + def setExtendedAttributes(self, extendedAttributes: typing.Dict[str, typing.Any]) -> None: ... + def routeLegs(self) -> typing.List['QGeoRouteLeg']: ... + def setRouteLegs(self, legs: typing.Iterable['QGeoRouteLeg']) -> None: ... + def path(self) -> typing.List[QtPositioning.QGeoCoordinate]: ... + def setPath(self, path: typing.Iterable[QtPositioning.QGeoCoordinate]) -> None: ... + def travelMode(self) -> 'QGeoRouteRequest.TravelMode': ... + def setTravelMode(self, mode: 'QGeoRouteRequest.TravelMode') -> None: ... + def distance(self) -> float: ... + def setDistance(self, distance: float) -> None: ... + def travelTime(self) -> int: ... + def setTravelTime(self, secs: int) -> None: ... + def firstRouteSegment(self) -> 'QGeoRouteSegment': ... + def setFirstRouteSegment(self, routeSegment: 'QGeoRouteSegment') -> None: ... + def bounds(self) -> QtPositioning.QGeoRectangle: ... + def setBounds(self, bounds: QtPositioning.QGeoRectangle) -> None: ... + def request(self) -> 'QGeoRouteRequest': ... + def setRequest(self, request: 'QGeoRouteRequest') -> None: ... + def routeId(self) -> str: ... + def setRouteId(self, id: typing.Optional[str]) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoRouteLeg(QGeoRoute): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoRouteLeg') -> None: ... + + def overallRoute(self) -> QGeoRoute: ... + def setOverallRoute(self, route: QGeoRoute) -> None: ... + def legIndex(self) -> int: ... + def setLegIndex(self, idx: int) -> None: ... + + +class QGeoRouteReply(QtCore.QObject): + + class Error(int): + NoError = ... # type: QGeoRouteReply.Error + EngineNotSetError = ... # type: QGeoRouteReply.Error + CommunicationError = ... # type: QGeoRouteReply.Error + ParseError = ... # type: QGeoRouteReply.Error + UnsupportedOptionError = ... # type: QGeoRouteReply.Error + UnknownError = ... # type: QGeoRouteReply.Error + + @typing.overload + def __init__(self, error: 'QGeoRouteReply.Error', errorString: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, request: 'QGeoRouteRequest', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def addRoutes(self, routes: typing.Iterable[QGeoRoute]) -> None: ... + def setRoutes(self, routes: typing.Iterable[QGeoRoute]) -> None: ... + def setFinished(self, finished: bool) -> None: ... + def setError(self, error: 'QGeoRouteReply.Error', errorString: typing.Optional[str]) -> None: ... + finished: typing.ClassVar[QtCore.pyqtSignal] + aborted: typing.ClassVar[QtCore.pyqtSignal] + def abort(self) -> None: ... + def routes(self) -> typing.List[QGeoRoute]: ... + def request(self) -> 'QGeoRouteRequest': ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def isFinished(self) -> bool: ... + + +class QGeoRouteRequest(PyQt5.sipsimplewrapper): + + class ManeuverDetail(int): + NoManeuvers = ... # type: QGeoRouteRequest.ManeuverDetail + BasicManeuvers = ... # type: QGeoRouteRequest.ManeuverDetail + + class SegmentDetail(int): + NoSegmentData = ... # type: QGeoRouteRequest.SegmentDetail + BasicSegmentData = ... # type: QGeoRouteRequest.SegmentDetail + + class RouteOptimization(int): + ShortestRoute = ... # type: QGeoRouteRequest.RouteOptimization + FastestRoute = ... # type: QGeoRouteRequest.RouteOptimization + MostEconomicRoute = ... # type: QGeoRouteRequest.RouteOptimization + MostScenicRoute = ... # type: QGeoRouteRequest.RouteOptimization + + class FeatureWeight(int): + NeutralFeatureWeight = ... # type: QGeoRouteRequest.FeatureWeight + PreferFeatureWeight = ... # type: QGeoRouteRequest.FeatureWeight + RequireFeatureWeight = ... # type: QGeoRouteRequest.FeatureWeight + AvoidFeatureWeight = ... # type: QGeoRouteRequest.FeatureWeight + DisallowFeatureWeight = ... # type: QGeoRouteRequest.FeatureWeight + + class FeatureType(int): + NoFeature = ... # type: QGeoRouteRequest.FeatureType + TollFeature = ... # type: QGeoRouteRequest.FeatureType + HighwayFeature = ... # type: QGeoRouteRequest.FeatureType + PublicTransitFeature = ... # type: QGeoRouteRequest.FeatureType + FerryFeature = ... # type: QGeoRouteRequest.FeatureType + TunnelFeature = ... # type: QGeoRouteRequest.FeatureType + DirtRoadFeature = ... # type: QGeoRouteRequest.FeatureType + ParksFeature = ... # type: QGeoRouteRequest.FeatureType + MotorPoolLaneFeature = ... # type: QGeoRouteRequest.FeatureType + TrafficFeature = ... # type: QGeoRouteRequest.FeatureType + + class TravelMode(int): + CarTravel = ... # type: QGeoRouteRequest.TravelMode + PedestrianTravel = ... # type: QGeoRouteRequest.TravelMode + BicycleTravel = ... # type: QGeoRouteRequest.TravelMode + PublicTransitTravel = ... # type: QGeoRouteRequest.TravelMode + TruckTravel = ... # type: QGeoRouteRequest.TravelMode + + class TravelModes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoRouteRequest.TravelModes', 'QGeoRouteRequest.TravelMode']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoRouteRequest.TravelModes', 'QGeoRouteRequest.TravelMode']) -> 'QGeoRouteRequest.TravelModes': ... + def __xor__(self, f: typing.Union['QGeoRouteRequest.TravelModes', 'QGeoRouteRequest.TravelMode']) -> 'QGeoRouteRequest.TravelModes': ... + def __ior__(self, f: typing.Union['QGeoRouteRequest.TravelModes', 'QGeoRouteRequest.TravelMode']) -> 'QGeoRouteRequest.TravelModes': ... + def __or__(self, f: typing.Union['QGeoRouteRequest.TravelModes', 'QGeoRouteRequest.TravelMode']) -> 'QGeoRouteRequest.TravelModes': ... + def __iand__(self, f: typing.Union['QGeoRouteRequest.TravelModes', 'QGeoRouteRequest.TravelMode']) -> 'QGeoRouteRequest.TravelModes': ... + def __and__(self, f: typing.Union['QGeoRouteRequest.TravelModes', 'QGeoRouteRequest.TravelMode']) -> 'QGeoRouteRequest.TravelModes': ... + def __invert__(self) -> 'QGeoRouteRequest.TravelModes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class FeatureTypes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoRouteRequest.FeatureTypes', 'QGeoRouteRequest.FeatureType']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoRouteRequest.FeatureTypes', 'QGeoRouteRequest.FeatureType']) -> 'QGeoRouteRequest.FeatureTypes': ... + def __xor__(self, f: typing.Union['QGeoRouteRequest.FeatureTypes', 'QGeoRouteRequest.FeatureType']) -> 'QGeoRouteRequest.FeatureTypes': ... + def __ior__(self, f: typing.Union['QGeoRouteRequest.FeatureTypes', 'QGeoRouteRequest.FeatureType']) -> 'QGeoRouteRequest.FeatureTypes': ... + def __or__(self, f: typing.Union['QGeoRouteRequest.FeatureTypes', 'QGeoRouteRequest.FeatureType']) -> 'QGeoRouteRequest.FeatureTypes': ... + def __iand__(self, f: typing.Union['QGeoRouteRequest.FeatureTypes', 'QGeoRouteRequest.FeatureType']) -> 'QGeoRouteRequest.FeatureTypes': ... + def __and__(self, f: typing.Union['QGeoRouteRequest.FeatureTypes', 'QGeoRouteRequest.FeatureType']) -> 'QGeoRouteRequest.FeatureTypes': ... + def __invert__(self) -> 'QGeoRouteRequest.FeatureTypes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class FeatureWeights(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoRouteRequest.FeatureWeights', 'QGeoRouteRequest.FeatureWeight']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoRouteRequest.FeatureWeights', 'QGeoRouteRequest.FeatureWeight']) -> 'QGeoRouteRequest.FeatureWeights': ... + def __xor__(self, f: typing.Union['QGeoRouteRequest.FeatureWeights', 'QGeoRouteRequest.FeatureWeight']) -> 'QGeoRouteRequest.FeatureWeights': ... + def __ior__(self, f: typing.Union['QGeoRouteRequest.FeatureWeights', 'QGeoRouteRequest.FeatureWeight']) -> 'QGeoRouteRequest.FeatureWeights': ... + def __or__(self, f: typing.Union['QGeoRouteRequest.FeatureWeights', 'QGeoRouteRequest.FeatureWeight']) -> 'QGeoRouteRequest.FeatureWeights': ... + def __iand__(self, f: typing.Union['QGeoRouteRequest.FeatureWeights', 'QGeoRouteRequest.FeatureWeight']) -> 'QGeoRouteRequest.FeatureWeights': ... + def __and__(self, f: typing.Union['QGeoRouteRequest.FeatureWeights', 'QGeoRouteRequest.FeatureWeight']) -> 'QGeoRouteRequest.FeatureWeights': ... + def __invert__(self) -> 'QGeoRouteRequest.FeatureWeights': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class RouteOptimizations(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoRouteRequest.RouteOptimizations', 'QGeoRouteRequest.RouteOptimization']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoRouteRequest.RouteOptimizations', 'QGeoRouteRequest.RouteOptimization']) -> 'QGeoRouteRequest.RouteOptimizations': ... + def __xor__(self, f: typing.Union['QGeoRouteRequest.RouteOptimizations', 'QGeoRouteRequest.RouteOptimization']) -> 'QGeoRouteRequest.RouteOptimizations': ... + def __ior__(self, f: typing.Union['QGeoRouteRequest.RouteOptimizations', 'QGeoRouteRequest.RouteOptimization']) -> 'QGeoRouteRequest.RouteOptimizations': ... + def __or__(self, f: typing.Union['QGeoRouteRequest.RouteOptimizations', 'QGeoRouteRequest.RouteOptimization']) -> 'QGeoRouteRequest.RouteOptimizations': ... + def __iand__(self, f: typing.Union['QGeoRouteRequest.RouteOptimizations', 'QGeoRouteRequest.RouteOptimization']) -> 'QGeoRouteRequest.RouteOptimizations': ... + def __and__(self, f: typing.Union['QGeoRouteRequest.RouteOptimizations', 'QGeoRouteRequest.RouteOptimization']) -> 'QGeoRouteRequest.RouteOptimizations': ... + def __invert__(self) -> 'QGeoRouteRequest.RouteOptimizations': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class SegmentDetails(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoRouteRequest.SegmentDetails', 'QGeoRouteRequest.SegmentDetail']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoRouteRequest.SegmentDetails', 'QGeoRouteRequest.SegmentDetail']) -> 'QGeoRouteRequest.SegmentDetails': ... + def __xor__(self, f: typing.Union['QGeoRouteRequest.SegmentDetails', 'QGeoRouteRequest.SegmentDetail']) -> 'QGeoRouteRequest.SegmentDetails': ... + def __ior__(self, f: typing.Union['QGeoRouteRequest.SegmentDetails', 'QGeoRouteRequest.SegmentDetail']) -> 'QGeoRouteRequest.SegmentDetails': ... + def __or__(self, f: typing.Union['QGeoRouteRequest.SegmentDetails', 'QGeoRouteRequest.SegmentDetail']) -> 'QGeoRouteRequest.SegmentDetails': ... + def __iand__(self, f: typing.Union['QGeoRouteRequest.SegmentDetails', 'QGeoRouteRequest.SegmentDetail']) -> 'QGeoRouteRequest.SegmentDetails': ... + def __and__(self, f: typing.Union['QGeoRouteRequest.SegmentDetails', 'QGeoRouteRequest.SegmentDetail']) -> 'QGeoRouteRequest.SegmentDetails': ... + def __invert__(self) -> 'QGeoRouteRequest.SegmentDetails': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ManeuverDetails(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoRouteRequest.ManeuverDetails', 'QGeoRouteRequest.ManeuverDetail']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoRouteRequest.ManeuverDetails', 'QGeoRouteRequest.ManeuverDetail']) -> 'QGeoRouteRequest.ManeuverDetails': ... + def __xor__(self, f: typing.Union['QGeoRouteRequest.ManeuverDetails', 'QGeoRouteRequest.ManeuverDetail']) -> 'QGeoRouteRequest.ManeuverDetails': ... + def __ior__(self, f: typing.Union['QGeoRouteRequest.ManeuverDetails', 'QGeoRouteRequest.ManeuverDetail']) -> 'QGeoRouteRequest.ManeuverDetails': ... + def __or__(self, f: typing.Union['QGeoRouteRequest.ManeuverDetails', 'QGeoRouteRequest.ManeuverDetail']) -> 'QGeoRouteRequest.ManeuverDetails': ... + def __iand__(self, f: typing.Union['QGeoRouteRequest.ManeuverDetails', 'QGeoRouteRequest.ManeuverDetail']) -> 'QGeoRouteRequest.ManeuverDetails': ... + def __and__(self, f: typing.Union['QGeoRouteRequest.ManeuverDetails', 'QGeoRouteRequest.ManeuverDetail']) -> 'QGeoRouteRequest.ManeuverDetails': ... + def __invert__(self) -> 'QGeoRouteRequest.ManeuverDetails': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, waypoints: typing.Iterable[QtPositioning.QGeoCoordinate] = ...) -> None: ... + @typing.overload + def __init__(self, origin: QtPositioning.QGeoCoordinate, destination: QtPositioning.QGeoCoordinate) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoRouteRequest') -> None: ... + + def departureTime(self) -> QtCore.QDateTime: ... + def setDepartureTime(self, departureTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def extraParameters(self) -> typing.Dict[str, typing.Any]: ... + def setExtraParameters(self, extraParameters: typing.Dict[str, typing.Any]) -> None: ... + def waypointsMetadata(self) -> typing.List[typing.Dict[str, typing.Any]]: ... + def setWaypointsMetadata(self, waypointMetadata: typing.Iterable[typing.Dict[str, typing.Any]]) -> None: ... + def maneuverDetail(self) -> 'QGeoRouteRequest.ManeuverDetail': ... + def setManeuverDetail(self, maneuverDetail: 'QGeoRouteRequest.ManeuverDetail') -> None: ... + def segmentDetail(self) -> 'QGeoRouteRequest.SegmentDetail': ... + def setSegmentDetail(self, segmentDetail: 'QGeoRouteRequest.SegmentDetail') -> None: ... + def routeOptimization(self) -> 'QGeoRouteRequest.RouteOptimizations': ... + def setRouteOptimization(self, optimization: typing.Union['QGeoRouteRequest.RouteOptimizations', 'QGeoRouteRequest.RouteOptimization']) -> None: ... + def featureTypes(self) -> typing.List['QGeoRouteRequest.FeatureType']: ... + def featureWeight(self, featureType: 'QGeoRouteRequest.FeatureType') -> 'QGeoRouteRequest.FeatureWeight': ... + def setFeatureWeight(self, featureType: 'QGeoRouteRequest.FeatureType', featureWeight: 'QGeoRouteRequest.FeatureWeight') -> None: ... + def travelModes(self) -> 'QGeoRouteRequest.TravelModes': ... + def setTravelModes(self, travelModes: typing.Union['QGeoRouteRequest.TravelModes', 'QGeoRouteRequest.TravelMode']) -> None: ... + def numberAlternativeRoutes(self) -> int: ... + def setNumberAlternativeRoutes(self, alternatives: int) -> None: ... + def excludeAreas(self) -> typing.List[QtPositioning.QGeoRectangle]: ... + def setExcludeAreas(self, areas: typing.Iterable[QtPositioning.QGeoRectangle]) -> None: ... + def waypoints(self) -> typing.List[QtPositioning.QGeoCoordinate]: ... + def setWaypoints(self, waypoints: typing.Iterable[QtPositioning.QGeoCoordinate]) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoRouteSegment(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoRouteSegment') -> None: ... + + def isLegLastSegment(self) -> bool: ... + def maneuver(self) -> QGeoManeuver: ... + def setManeuver(self, maneuver: QGeoManeuver) -> None: ... + def path(self) -> typing.List[QtPositioning.QGeoCoordinate]: ... + def setPath(self, path: typing.Iterable[QtPositioning.QGeoCoordinate]) -> None: ... + def distance(self) -> float: ... + def setDistance(self, distance: float) -> None: ... + def travelTime(self) -> int: ... + def setTravelTime(self, secs: int) -> None: ... + def nextRouteSegment(self) -> 'QGeoRouteSegment': ... + def setNextRouteSegment(self, routeSegment: 'QGeoRouteSegment') -> None: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoRoutingManager(QtCore.QObject): + + error: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + def measurementSystem(self) -> QtCore.QLocale.MeasurementSystem: ... + def setMeasurementSystem(self, system: QtCore.QLocale.MeasurementSystem) -> None: ... + def locale(self) -> QtCore.QLocale: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + def supportedManeuverDetails(self) -> QGeoRouteRequest.ManeuverDetails: ... + def supportedSegmentDetails(self) -> QGeoRouteRequest.SegmentDetails: ... + def supportedRouteOptimizations(self) -> QGeoRouteRequest.RouteOptimizations: ... + def supportedFeatureWeights(self) -> QGeoRouteRequest.FeatureWeights: ... + def supportedFeatureTypes(self) -> QGeoRouteRequest.FeatureTypes: ... + def supportedTravelModes(self) -> QGeoRouteRequest.TravelModes: ... + def updateRoute(self, route: QGeoRoute, position: QtPositioning.QGeoCoordinate) -> typing.Optional[QGeoRouteReply]: ... + def calculateRoute(self, request: QGeoRouteRequest) -> typing.Optional[QGeoRouteReply]: ... + def managerVersion(self) -> int: ... + def managerName(self) -> str: ... + + +class QGeoRoutingManagerEngine(QtCore.QObject): + + def __init__(self, parameters: typing.Dict[str, typing.Any], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setSupportedManeuverDetails(self, maneuverDetails: typing.Union[QGeoRouteRequest.ManeuverDetails, QGeoRouteRequest.ManeuverDetail]) -> None: ... + def setSupportedSegmentDetails(self, segmentDetails: typing.Union[QGeoRouteRequest.SegmentDetails, QGeoRouteRequest.SegmentDetail]) -> None: ... + def setSupportedRouteOptimizations(self, optimizations: typing.Union[QGeoRouteRequest.RouteOptimizations, QGeoRouteRequest.RouteOptimization]) -> None: ... + def setSupportedFeatureWeights(self, featureWeights: typing.Union[QGeoRouteRequest.FeatureWeights, QGeoRouteRequest.FeatureWeight]) -> None: ... + def setSupportedFeatureTypes(self, featureTypes: typing.Union[QGeoRouteRequest.FeatureTypes, QGeoRouteRequest.FeatureType]) -> None: ... + def setSupportedTravelModes(self, travelModes: typing.Union[QGeoRouteRequest.TravelModes, QGeoRouteRequest.TravelMode]) -> None: ... + error: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + def measurementSystem(self) -> QtCore.QLocale.MeasurementSystem: ... + def setMeasurementSystem(self, system: QtCore.QLocale.MeasurementSystem) -> None: ... + def locale(self) -> QtCore.QLocale: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + def supportedManeuverDetails(self) -> QGeoRouteRequest.ManeuverDetails: ... + def supportedSegmentDetails(self) -> QGeoRouteRequest.SegmentDetails: ... + def supportedRouteOptimizations(self) -> QGeoRouteRequest.RouteOptimizations: ... + def supportedFeatureWeights(self) -> QGeoRouteRequest.FeatureWeights: ... + def supportedFeatureTypes(self) -> QGeoRouteRequest.FeatureTypes: ... + def supportedTravelModes(self) -> QGeoRouteRequest.TravelModes: ... + def updateRoute(self, route: QGeoRoute, position: QtPositioning.QGeoCoordinate) -> typing.Optional[QGeoRouteReply]: ... + def calculateRoute(self, request: QGeoRouteRequest) -> typing.Optional[QGeoRouteReply]: ... + def managerVersion(self) -> int: ... + def managerName(self) -> str: ... + + +class QNavigationManager(PyQt5.sipsimplewrapper): ... + + +class QGeoServiceProvider(QtCore.QObject): + + class NavigationFeature(int): + NoNavigationFeatures = ... # type: QGeoServiceProvider.NavigationFeature + OnlineNavigationFeature = ... # type: QGeoServiceProvider.NavigationFeature + OfflineNavigationFeature = ... # type: QGeoServiceProvider.NavigationFeature + AnyNavigationFeatures = ... # type: QGeoServiceProvider.NavigationFeature + + class PlacesFeature(int): + NoPlacesFeatures = ... # type: QGeoServiceProvider.PlacesFeature + OnlinePlacesFeature = ... # type: QGeoServiceProvider.PlacesFeature + OfflinePlacesFeature = ... # type: QGeoServiceProvider.PlacesFeature + SavePlaceFeature = ... # type: QGeoServiceProvider.PlacesFeature + RemovePlaceFeature = ... # type: QGeoServiceProvider.PlacesFeature + SaveCategoryFeature = ... # type: QGeoServiceProvider.PlacesFeature + RemoveCategoryFeature = ... # type: QGeoServiceProvider.PlacesFeature + PlaceRecommendationsFeature = ... # type: QGeoServiceProvider.PlacesFeature + SearchSuggestionsFeature = ... # type: QGeoServiceProvider.PlacesFeature + LocalizedPlacesFeature = ... # type: QGeoServiceProvider.PlacesFeature + NotificationsFeature = ... # type: QGeoServiceProvider.PlacesFeature + PlaceMatchingFeature = ... # type: QGeoServiceProvider.PlacesFeature + AnyPlacesFeatures = ... # type: QGeoServiceProvider.PlacesFeature + + class MappingFeature(int): + NoMappingFeatures = ... # type: QGeoServiceProvider.MappingFeature + OnlineMappingFeature = ... # type: QGeoServiceProvider.MappingFeature + OfflineMappingFeature = ... # type: QGeoServiceProvider.MappingFeature + LocalizedMappingFeature = ... # type: QGeoServiceProvider.MappingFeature + AnyMappingFeatures = ... # type: QGeoServiceProvider.MappingFeature + + class GeocodingFeature(int): + NoGeocodingFeatures = ... # type: QGeoServiceProvider.GeocodingFeature + OnlineGeocodingFeature = ... # type: QGeoServiceProvider.GeocodingFeature + OfflineGeocodingFeature = ... # type: QGeoServiceProvider.GeocodingFeature + ReverseGeocodingFeature = ... # type: QGeoServiceProvider.GeocodingFeature + LocalizedGeocodingFeature = ... # type: QGeoServiceProvider.GeocodingFeature + AnyGeocodingFeatures = ... # type: QGeoServiceProvider.GeocodingFeature + + class RoutingFeature(int): + NoRoutingFeatures = ... # type: QGeoServiceProvider.RoutingFeature + OnlineRoutingFeature = ... # type: QGeoServiceProvider.RoutingFeature + OfflineRoutingFeature = ... # type: QGeoServiceProvider.RoutingFeature + LocalizedRoutingFeature = ... # type: QGeoServiceProvider.RoutingFeature + RouteUpdatesFeature = ... # type: QGeoServiceProvider.RoutingFeature + AlternativeRoutesFeature = ... # type: QGeoServiceProvider.RoutingFeature + ExcludeAreasRoutingFeature = ... # type: QGeoServiceProvider.RoutingFeature + AnyRoutingFeatures = ... # type: QGeoServiceProvider.RoutingFeature + + class Error(int): + NoError = ... # type: QGeoServiceProvider.Error + NotSupportedError = ... # type: QGeoServiceProvider.Error + UnknownParameterError = ... # type: QGeoServiceProvider.Error + MissingRequiredParameterError = ... # type: QGeoServiceProvider.Error + ConnectionError = ... # type: QGeoServiceProvider.Error + LoaderError = ... # type: QGeoServiceProvider.Error + + class RoutingFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoServiceProvider.RoutingFeatures', 'QGeoServiceProvider.RoutingFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoServiceProvider.RoutingFeatures', 'QGeoServiceProvider.RoutingFeature']) -> 'QGeoServiceProvider.RoutingFeatures': ... + def __xor__(self, f: typing.Union['QGeoServiceProvider.RoutingFeatures', 'QGeoServiceProvider.RoutingFeature']) -> 'QGeoServiceProvider.RoutingFeatures': ... + def __ior__(self, f: typing.Union['QGeoServiceProvider.RoutingFeatures', 'QGeoServiceProvider.RoutingFeature']) -> 'QGeoServiceProvider.RoutingFeatures': ... + def __or__(self, f: typing.Union['QGeoServiceProvider.RoutingFeatures', 'QGeoServiceProvider.RoutingFeature']) -> 'QGeoServiceProvider.RoutingFeatures': ... + def __iand__(self, f: typing.Union['QGeoServiceProvider.RoutingFeatures', 'QGeoServiceProvider.RoutingFeature']) -> 'QGeoServiceProvider.RoutingFeatures': ... + def __and__(self, f: typing.Union['QGeoServiceProvider.RoutingFeatures', 'QGeoServiceProvider.RoutingFeature']) -> 'QGeoServiceProvider.RoutingFeatures': ... + def __invert__(self) -> 'QGeoServiceProvider.RoutingFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class GeocodingFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoServiceProvider.GeocodingFeatures', 'QGeoServiceProvider.GeocodingFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoServiceProvider.GeocodingFeatures', 'QGeoServiceProvider.GeocodingFeature']) -> 'QGeoServiceProvider.GeocodingFeatures': ... + def __xor__(self, f: typing.Union['QGeoServiceProvider.GeocodingFeatures', 'QGeoServiceProvider.GeocodingFeature']) -> 'QGeoServiceProvider.GeocodingFeatures': ... + def __ior__(self, f: typing.Union['QGeoServiceProvider.GeocodingFeatures', 'QGeoServiceProvider.GeocodingFeature']) -> 'QGeoServiceProvider.GeocodingFeatures': ... + def __or__(self, f: typing.Union['QGeoServiceProvider.GeocodingFeatures', 'QGeoServiceProvider.GeocodingFeature']) -> 'QGeoServiceProvider.GeocodingFeatures': ... + def __iand__(self, f: typing.Union['QGeoServiceProvider.GeocodingFeatures', 'QGeoServiceProvider.GeocodingFeature']) -> 'QGeoServiceProvider.GeocodingFeatures': ... + def __and__(self, f: typing.Union['QGeoServiceProvider.GeocodingFeatures', 'QGeoServiceProvider.GeocodingFeature']) -> 'QGeoServiceProvider.GeocodingFeatures': ... + def __invert__(self) -> 'QGeoServiceProvider.GeocodingFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class MappingFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoServiceProvider.MappingFeatures', 'QGeoServiceProvider.MappingFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoServiceProvider.MappingFeatures', 'QGeoServiceProvider.MappingFeature']) -> 'QGeoServiceProvider.MappingFeatures': ... + def __xor__(self, f: typing.Union['QGeoServiceProvider.MappingFeatures', 'QGeoServiceProvider.MappingFeature']) -> 'QGeoServiceProvider.MappingFeatures': ... + def __ior__(self, f: typing.Union['QGeoServiceProvider.MappingFeatures', 'QGeoServiceProvider.MappingFeature']) -> 'QGeoServiceProvider.MappingFeatures': ... + def __or__(self, f: typing.Union['QGeoServiceProvider.MappingFeatures', 'QGeoServiceProvider.MappingFeature']) -> 'QGeoServiceProvider.MappingFeatures': ... + def __iand__(self, f: typing.Union['QGeoServiceProvider.MappingFeatures', 'QGeoServiceProvider.MappingFeature']) -> 'QGeoServiceProvider.MappingFeatures': ... + def __and__(self, f: typing.Union['QGeoServiceProvider.MappingFeatures', 'QGeoServiceProvider.MappingFeature']) -> 'QGeoServiceProvider.MappingFeatures': ... + def __invert__(self) -> 'QGeoServiceProvider.MappingFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class PlacesFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoServiceProvider.PlacesFeatures', 'QGeoServiceProvider.PlacesFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoServiceProvider.PlacesFeatures', 'QGeoServiceProvider.PlacesFeature']) -> 'QGeoServiceProvider.PlacesFeatures': ... + def __xor__(self, f: typing.Union['QGeoServiceProvider.PlacesFeatures', 'QGeoServiceProvider.PlacesFeature']) -> 'QGeoServiceProvider.PlacesFeatures': ... + def __ior__(self, f: typing.Union['QGeoServiceProvider.PlacesFeatures', 'QGeoServiceProvider.PlacesFeature']) -> 'QGeoServiceProvider.PlacesFeatures': ... + def __or__(self, f: typing.Union['QGeoServiceProvider.PlacesFeatures', 'QGeoServiceProvider.PlacesFeature']) -> 'QGeoServiceProvider.PlacesFeatures': ... + def __iand__(self, f: typing.Union['QGeoServiceProvider.PlacesFeatures', 'QGeoServiceProvider.PlacesFeature']) -> 'QGeoServiceProvider.PlacesFeatures': ... + def __and__(self, f: typing.Union['QGeoServiceProvider.PlacesFeatures', 'QGeoServiceProvider.PlacesFeature']) -> 'QGeoServiceProvider.PlacesFeatures': ... + def __invert__(self) -> 'QGeoServiceProvider.PlacesFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class NavigationFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoServiceProvider.NavigationFeatures', 'QGeoServiceProvider.NavigationFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoServiceProvider.NavigationFeatures', 'QGeoServiceProvider.NavigationFeature']) -> 'QGeoServiceProvider.NavigationFeatures': ... + def __xor__(self, f: typing.Union['QGeoServiceProvider.NavigationFeatures', 'QGeoServiceProvider.NavigationFeature']) -> 'QGeoServiceProvider.NavigationFeatures': ... + def __ior__(self, f: typing.Union['QGeoServiceProvider.NavigationFeatures', 'QGeoServiceProvider.NavigationFeature']) -> 'QGeoServiceProvider.NavigationFeatures': ... + def __or__(self, f: typing.Union['QGeoServiceProvider.NavigationFeatures', 'QGeoServiceProvider.NavigationFeature']) -> 'QGeoServiceProvider.NavigationFeatures': ... + def __iand__(self, f: typing.Union['QGeoServiceProvider.NavigationFeatures', 'QGeoServiceProvider.NavigationFeature']) -> 'QGeoServiceProvider.NavigationFeatures': ... + def __and__(self, f: typing.Union['QGeoServiceProvider.NavigationFeatures', 'QGeoServiceProvider.NavigationFeature']) -> 'QGeoServiceProvider.NavigationFeatures': ... + def __invert__(self) -> 'QGeoServiceProvider.NavigationFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, providerName: typing.Optional[str], parameters: typing.Dict[str, typing.Any] = ..., allowExperimental: bool = ...) -> None: ... + + def navigationErrorString(self) -> str: ... + def navigationError(self) -> 'QGeoServiceProvider.Error': ... + def placesErrorString(self) -> str: ... + def placesError(self) -> 'QGeoServiceProvider.Error': ... + def routingErrorString(self) -> str: ... + def routingError(self) -> 'QGeoServiceProvider.Error': ... + def geocodingErrorString(self) -> str: ... + def geocodingError(self) -> 'QGeoServiceProvider.Error': ... + def mappingErrorString(self) -> str: ... + def mappingError(self) -> 'QGeoServiceProvider.Error': ... + def navigationManager(self) -> typing.Optional[QNavigationManager]: ... + def navigationFeatures(self) -> 'QGeoServiceProvider.NavigationFeatures': ... + def setAllowExperimental(self, allow: bool) -> None: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + def setParameters(self, parameters: typing.Dict[str, typing.Any]) -> None: ... + def errorString(self) -> str: ... + def error(self) -> 'QGeoServiceProvider.Error': ... + def placeManager(self) -> typing.Optional['QPlaceManager']: ... + def routingManager(self) -> typing.Optional[QGeoRoutingManager]: ... + def geocodingManager(self) -> typing.Optional[QGeoCodingManager]: ... + def placesFeatures(self) -> 'QGeoServiceProvider.PlacesFeatures': ... + def mappingFeatures(self) -> 'QGeoServiceProvider.MappingFeatures': ... + def geocodingFeatures(self) -> 'QGeoServiceProvider.GeocodingFeatures': ... + def routingFeatures(self) -> 'QGeoServiceProvider.RoutingFeatures': ... + @staticmethod + def availableServiceProviders() -> typing.List[str]: ... + + +class QLocation(PyQt5.sip.simplewrapper): + + class Visibility(int): + UnspecifiedVisibility = ... # type: QLocation.Visibility + DeviceVisibility = ... # type: QLocation.Visibility + PrivateVisibility = ... # type: QLocation.Visibility + PublicVisibility = ... # type: QLocation.Visibility + + class VisibilityScope(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QLocation.VisibilityScope', 'QLocation.Visibility']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QLocation.VisibilityScope', 'QLocation.Visibility']) -> 'QLocation.VisibilityScope': ... + def __xor__(self, f: typing.Union['QLocation.VisibilityScope', 'QLocation.Visibility']) -> 'QLocation.VisibilityScope': ... + def __ior__(self, f: typing.Union['QLocation.VisibilityScope', 'QLocation.Visibility']) -> 'QLocation.VisibilityScope': ... + def __or__(self, f: typing.Union['QLocation.VisibilityScope', 'QLocation.Visibility']) -> 'QLocation.VisibilityScope': ... + def __iand__(self, f: typing.Union['QLocation.VisibilityScope', 'QLocation.Visibility']) -> 'QLocation.VisibilityScope': ... + def __and__(self, f: typing.Union['QLocation.VisibilityScope', 'QLocation.Visibility']) -> 'QLocation.VisibilityScope': ... + def __invert__(self) -> 'QLocation.VisibilityScope': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + +class QPlace(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlace') -> None: ... + + def isEmpty(self) -> bool: ... + def setVisibility(self, visibility: QLocation.Visibility) -> None: ... + def visibility(self) -> QLocation.Visibility: ... + def removeContactDetails(self, contactType: typing.Optional[str]) -> None: ... + def appendContactDetail(self, contactType: typing.Optional[str], detail: 'QPlaceContactDetail') -> None: ... + def setContactDetails(self, contactType: typing.Optional[str], details: typing.Iterable['QPlaceContactDetail']) -> None: ... + def contactDetails(self, contactType: typing.Optional[str]) -> typing.List['QPlaceContactDetail']: ... + def contactTypes(self) -> typing.List[str]: ... + def removeExtendedAttribute(self, attributeType: typing.Optional[str]) -> None: ... + def setExtendedAttribute(self, attributeType: typing.Optional[str], attribute: 'QPlaceAttribute') -> None: ... + def extendedAttribute(self, attributeType: typing.Optional[str]) -> 'QPlaceAttribute': ... + def extendedAttributeTypes(self) -> typing.List[str]: ... + def setDetailsFetched(self, fetched: bool) -> None: ... + def detailsFetched(self) -> bool: ... + def primaryWebsite(self) -> QtCore.QUrl: ... + def primaryEmail(self) -> str: ... + def primaryFax(self) -> str: ... + def primaryPhone(self) -> str: ... + def setPlaceId(self, identifier: typing.Optional[str]) -> None: ... + def placeId(self) -> str: ... + def setName(self, name: typing.Optional[str]) -> None: ... + def name(self) -> str: ... + def setTotalContentCount(self, type: 'QPlaceContent.Type', total: int) -> None: ... + def totalContentCount(self, type: 'QPlaceContent.Type') -> int: ... + def insertContent(self, type: 'QPlaceContent.Type', content: typing.Dict[int, 'QPlaceContent']) -> None: ... + def setContent(self, type: 'QPlaceContent.Type', content: typing.Dict[int, 'QPlaceContent']) -> None: ... + def content(self, type: 'QPlaceContent.Type') -> typing.Dict[int, 'QPlaceContent']: ... + def setIcon(self, icon: 'QPlaceIcon') -> None: ... + def icon(self) -> 'QPlaceIcon': ... + def setAttribution(self, attribution: typing.Optional[str]) -> None: ... + def attribution(self) -> str: ... + def setSupplier(self, supplier: 'QPlaceSupplier') -> None: ... + def supplier(self) -> 'QPlaceSupplier': ... + def setRatings(self, ratings: 'QPlaceRatings') -> None: ... + def ratings(self) -> 'QPlaceRatings': ... + def setLocation(self, location: QtPositioning.QGeoLocation) -> None: ... + def location(self) -> QtPositioning.QGeoLocation: ... + def setCategories(self, categories: typing.Iterable['QPlaceCategory']) -> None: ... + def setCategory(self, category: 'QPlaceCategory') -> None: ... + def categories(self) -> typing.List['QPlaceCategory']: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceAttribute(PyQt5.sipsimplewrapper): + + OpeningHours = ... # type: typing.Optional[str] + Payment = ... # type: typing.Optional[str] + Provider = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceAttribute') -> None: ... + + def isEmpty(self) -> bool: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def text(self) -> str: ... + def setLabel(self, label: typing.Optional[str]) -> None: ... + def label(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceCategory(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceCategory') -> None: ... + + def isEmpty(self) -> bool: ... + def setIcon(self, icon: 'QPlaceIcon') -> None: ... + def icon(self) -> 'QPlaceIcon': ... + def setVisibility(self, visibility: QLocation.Visibility) -> None: ... + def visibility(self) -> QLocation.Visibility: ... + def setName(self, name: typing.Optional[str]) -> None: ... + def name(self) -> str: ... + def setCategoryId(self, identifier: typing.Optional[str]) -> None: ... + def categoryId(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceContactDetail(PyQt5.sipsimplewrapper): + + Email = ... # type: typing.Optional[str] + Fax = ... # type: typing.Optional[str] + Phone = ... # type: typing.Optional[str] + Website = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceContactDetail') -> None: ... + + def clear(self) -> None: ... + def setValue(self, value: typing.Optional[str]) -> None: ... + def value(self) -> str: ... + def setLabel(self, label: typing.Optional[str]) -> None: ... + def label(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceContent(PyQt5.sipsimplewrapper): + + class Type(int): + NoType = ... # type: QPlaceContent.Type + ImageType = ... # type: QPlaceContent.Type + ReviewType = ... # type: QPlaceContent.Type + EditorialType = ... # type: QPlaceContent.Type + CustomType = ... # type: QPlaceContent.Type + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceContent') -> None: ... + + def setAttribution(self, attribution: typing.Optional[str]) -> None: ... + def attribution(self) -> str: ... + def setUser(self, user: 'QPlaceUser') -> None: ... + def user(self) -> 'QPlaceUser': ... + def setSupplier(self, supplier: 'QPlaceSupplier') -> None: ... + def supplier(self) -> 'QPlaceSupplier': ... + def type(self) -> 'QPlaceContent.Type': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceReply(QtCore.QObject): + + class Type(int): + Reply = ... # type: QPlaceReply.Type + DetailsReply = ... # type: QPlaceReply.Type + SearchReply = ... # type: QPlaceReply.Type + SearchSuggestionReply = ... # type: QPlaceReply.Type + ContentReply = ... # type: QPlaceReply.Type + IdReply = ... # type: QPlaceReply.Type + MatchReply = ... # type: QPlaceReply.Type + + class Error(int): + NoError = ... # type: QPlaceReply.Error + PlaceDoesNotExistError = ... # type: QPlaceReply.Error + CategoryDoesNotExistError = ... # type: QPlaceReply.Error + CommunicationError = ... # type: QPlaceReply.Error + ParseError = ... # type: QPlaceReply.Error + PermissionsError = ... # type: QPlaceReply.Error + UnsupportedError = ... # type: QPlaceReply.Error + BadArgumentError = ... # type: QPlaceReply.Error + CancelError = ... # type: QPlaceReply.Error + UnknownError = ... # type: QPlaceReply.Error + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setError(self, error: 'QPlaceReply.Error', errorString: typing.Optional[str]) -> None: ... + def setFinished(self, finished: bool) -> None: ... + contentUpdated: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + aborted: typing.ClassVar[QtCore.pyqtSignal] + def abort(self) -> None: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def errorString(self) -> str: ... + def type(self) -> 'QPlaceReply.Type': ... + def isFinished(self) -> bool: ... + + +class QPlaceContentReply(QPlaceReply): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setNextPageRequest(self, next: 'QPlaceContentRequest') -> None: ... + def setPreviousPageRequest(self, previous: 'QPlaceContentRequest') -> None: ... + def setRequest(self, request: 'QPlaceContentRequest') -> None: ... + def setTotalCount(self, total: int) -> None: ... + def setContent(self, content: typing.Dict[int, QPlaceContent]) -> None: ... + def nextPageRequest(self) -> 'QPlaceContentRequest': ... + def previousPageRequest(self) -> 'QPlaceContentRequest': ... + def request(self) -> 'QPlaceContentRequest': ... + def totalCount(self) -> int: ... + def content(self) -> typing.Dict[int, QPlaceContent]: ... + def type(self) -> QPlaceReply.Type: ... + + +class QPlaceContentRequest(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceContentRequest') -> None: ... + + def clear(self) -> None: ... + def setLimit(self, limit: int) -> None: ... + def limit(self) -> int: ... + def setContentContext(self, context: typing.Any) -> None: ... + def contentContext(self) -> typing.Any: ... + def setPlaceId(self, identifier: typing.Optional[str]) -> None: ... + def placeId(self) -> str: ... + def setContentType(self, type: QPlaceContent.Type) -> None: ... + def contentType(self) -> QPlaceContent.Type: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceDetailsReply(QPlaceReply): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setPlace(self, place: QPlace) -> None: ... + def place(self) -> QPlace: ... + def type(self) -> QPlaceReply.Type: ... + + +class QPlaceEditorial(QPlaceContent): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: QPlaceContent) -> None: ... + @typing.overload + def __init__(self, a0: 'QPlaceEditorial') -> None: ... + + def setLanguage(self, data: typing.Optional[str]) -> None: ... + def language(self) -> str: ... + def setTitle(self, data: typing.Optional[str]) -> None: ... + def title(self) -> str: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def text(self) -> str: ... + + +class QPlaceIcon(PyQt5.sipsimplewrapper): + + SingleUrl = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceIcon') -> None: ... + + def isEmpty(self) -> bool: ... + def setParameters(self, parameters: typing.Dict[str, typing.Any]) -> None: ... + def parameters(self) -> typing.Dict[str, typing.Any]: ... + def setManager(self, manager: typing.Optional['QPlaceManager']) -> None: ... + def manager(self) -> typing.Optional['QPlaceManager']: ... + def url(self, size: QtCore.QSize = ...) -> QtCore.QUrl: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceIdReply(QPlaceReply): + + class OperationType(int): + SavePlace = ... # type: QPlaceIdReply.OperationType + SaveCategory = ... # type: QPlaceIdReply.OperationType + RemovePlace = ... # type: QPlaceIdReply.OperationType + RemoveCategory = ... # type: QPlaceIdReply.OperationType + + def __init__(self, operationType: 'QPlaceIdReply.OperationType', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setId(self, identifier: typing.Optional[str]) -> None: ... + def id(self) -> str: ... + def operationType(self) -> 'QPlaceIdReply.OperationType': ... + def type(self) -> QPlaceReply.Type: ... + + +class QPlaceImage(QPlaceContent): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: QPlaceContent) -> None: ... + @typing.overload + def __init__(self, a0: 'QPlaceImage') -> None: ... + + def setMimeType(self, data: typing.Optional[str]) -> None: ... + def mimeType(self) -> str: ... + def setImageId(self, identifier: typing.Optional[str]) -> None: ... + def imageId(self) -> str: ... + def setUrl(self, url: QtCore.QUrl) -> None: ... + def url(self) -> QtCore.QUrl: ... + + +class QPlaceManager(QtCore.QObject): + + dataChanged: typing.ClassVar[QtCore.pyqtSignal] + categoryRemoved: typing.ClassVar[QtCore.pyqtSignal] + categoryUpdated: typing.ClassVar[QtCore.pyqtSignal] + categoryAdded: typing.ClassVar[QtCore.pyqtSignal] + placeRemoved: typing.ClassVar[QtCore.pyqtSignal] + placeUpdated: typing.ClassVar[QtCore.pyqtSignal] + placeAdded: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + def matchingPlaces(self, request: 'QPlaceMatchRequest') -> typing.Optional['QPlaceMatchReply']: ... + def compatiblePlace(self, place: QPlace) -> QPlace: ... + def setLocales(self, locale: typing.Iterable[QtCore.QLocale]) -> None: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + def locales(self) -> typing.List[QtCore.QLocale]: ... + def childCategories(self, parentId: typing.Optional[str] = ...) -> typing.List[QPlaceCategory]: ... + def category(self, categoryId: typing.Optional[str]) -> QPlaceCategory: ... + def childCategoryIds(self, parentId: typing.Optional[str] = ...) -> typing.List[str]: ... + def parentCategoryId(self, categoryId: typing.Optional[str]) -> str: ... + def initializeCategories(self) -> typing.Optional[QPlaceReply]: ... + def removeCategory(self, categoryId: typing.Optional[str]) -> typing.Optional[QPlaceIdReply]: ... + def saveCategory(self, category: QPlaceCategory, parentId: typing.Optional[str] = ...) -> typing.Optional[QPlaceIdReply]: ... + def removePlace(self, placeId: typing.Optional[str]) -> typing.Optional[QPlaceIdReply]: ... + def savePlace(self, place: QPlace) -> typing.Optional[QPlaceIdReply]: ... + def searchSuggestions(self, request: 'QPlaceSearchRequest') -> typing.Optional['QPlaceSearchSuggestionReply']: ... + def search(self, query: 'QPlaceSearchRequest') -> typing.Optional['QPlaceSearchReply']: ... + def getPlaceContent(self, request: QPlaceContentRequest) -> typing.Optional[QPlaceContentReply]: ... + def getPlaceDetails(self, placeId: typing.Optional[str]) -> typing.Optional[QPlaceDetailsReply]: ... + def managerVersion(self) -> int: ... + def managerName(self) -> str: ... + + +class QPlaceManagerEngine(QtCore.QObject): + + def __init__(self, parameters: typing.Dict[str, typing.Any], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def manager(self) -> typing.Optional[QPlaceManager]: ... + dataChanged: typing.ClassVar[QtCore.pyqtSignal] + categoryRemoved: typing.ClassVar[QtCore.pyqtSignal] + categoryUpdated: typing.ClassVar[QtCore.pyqtSignal] + categoryAdded: typing.ClassVar[QtCore.pyqtSignal] + placeRemoved: typing.ClassVar[QtCore.pyqtSignal] + placeUpdated: typing.ClassVar[QtCore.pyqtSignal] + placeAdded: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + def matchingPlaces(self, request: 'QPlaceMatchRequest') -> typing.Optional['QPlaceMatchReply']: ... + def compatiblePlace(self, original: QPlace) -> QPlace: ... + def constructIconUrl(self, icon: QPlaceIcon, size: QtCore.QSize) -> QtCore.QUrl: ... + def setLocales(self, locales: typing.Iterable[QtCore.QLocale]) -> None: ... + def locales(self) -> typing.List[QtCore.QLocale]: ... + def childCategories(self, parentId: typing.Optional[str]) -> typing.List[QPlaceCategory]: ... + def category(self, categoryId: typing.Optional[str]) -> QPlaceCategory: ... + def childCategoryIds(self, categoryId: typing.Optional[str]) -> typing.List[str]: ... + def parentCategoryId(self, categoryId: typing.Optional[str]) -> str: ... + def initializeCategories(self) -> typing.Optional[QPlaceReply]: ... + def removeCategory(self, categoryId: typing.Optional[str]) -> typing.Optional[QPlaceIdReply]: ... + def saveCategory(self, category: QPlaceCategory, parentId: typing.Optional[str]) -> typing.Optional[QPlaceIdReply]: ... + def removePlace(self, placeId: typing.Optional[str]) -> typing.Optional[QPlaceIdReply]: ... + def savePlace(self, place: QPlace) -> typing.Optional[QPlaceIdReply]: ... + def searchSuggestions(self, request: 'QPlaceSearchRequest') -> typing.Optional['QPlaceSearchSuggestionReply']: ... + def search(self, request: 'QPlaceSearchRequest') -> typing.Optional['QPlaceSearchReply']: ... + def getPlaceContent(self, request: QPlaceContentRequest) -> typing.Optional[QPlaceContentReply]: ... + def getPlaceDetails(self, placeId: typing.Optional[str]) -> typing.Optional[QPlaceDetailsReply]: ... + def managerVersion(self) -> int: ... + def managerName(self) -> str: ... + + +class QPlaceMatchReply(QPlaceReply): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setRequest(self, request: 'QPlaceMatchRequest') -> None: ... + def setPlaces(self, results: typing.Iterable[QPlace]) -> None: ... + def request(self) -> 'QPlaceMatchRequest': ... + def places(self) -> typing.List[QPlace]: ... + def type(self) -> QPlaceReply.Type: ... + + +class QPlaceMatchRequest(PyQt5.sipsimplewrapper): + + AlternativeId = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceMatchRequest') -> None: ... + + def clear(self) -> None: ... + def setParameters(self, parameters: typing.Dict[str, typing.Any]) -> None: ... + def parameters(self) -> typing.Dict[str, typing.Any]: ... + def setResults(self, results: typing.Iterable['QPlaceSearchResult']) -> None: ... + def setPlaces(self, places: typing.Iterable[QPlace]) -> None: ... + def places(self) -> typing.List[QPlace]: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceSearchResult(PyQt5.sipsimplewrapper): + + class SearchResultType(int): + UnknownSearchResult = ... # type: QPlaceSearchResult.SearchResultType + PlaceResult = ... # type: QPlaceSearchResult.SearchResultType + ProposedSearchResult = ... # type: QPlaceSearchResult.SearchResultType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceSearchResult') -> None: ... + + def setIcon(self, icon: QPlaceIcon) -> None: ... + def icon(self) -> QPlaceIcon: ... + def setTitle(self, title: typing.Optional[str]) -> None: ... + def title(self) -> str: ... + def type(self) -> 'QPlaceSearchResult.SearchResultType': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceProposedSearchResult(QPlaceSearchResult): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: QPlaceSearchResult) -> None: ... + @typing.overload + def __init__(self, a0: 'QPlaceProposedSearchResult') -> None: ... + + def setSearchRequest(self, request: 'QPlaceSearchRequest') -> None: ... + def searchRequest(self) -> 'QPlaceSearchRequest': ... + + +class QPlaceRatings(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceRatings') -> None: ... + + def isEmpty(self) -> bool: ... + def setMaximum(self, max: float) -> None: ... + def maximum(self) -> float: ... + def setCount(self, count: int) -> None: ... + def count(self) -> int: ... + def setAverage(self, average: float) -> None: ... + def average(self) -> float: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceResult(QPlaceSearchResult): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: QPlaceSearchResult) -> None: ... + @typing.overload + def __init__(self, a0: 'QPlaceResult') -> None: ... + + def setSponsored(self, sponsored: bool) -> None: ... + def isSponsored(self) -> bool: ... + def setPlace(self, place: QPlace) -> None: ... + def place(self) -> QPlace: ... + def setDistance(self, distance: float) -> None: ... + def distance(self) -> float: ... + + +class QPlaceReview(QPlaceContent): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: QPlaceContent) -> None: ... + @typing.overload + def __init__(self, a0: 'QPlaceReview') -> None: ... + + def setTitle(self, data: typing.Optional[str]) -> None: ... + def title(self) -> str: ... + def setReviewId(self, identifier: typing.Optional[str]) -> None: ... + def reviewId(self) -> str: ... + def setRating(self, data: float) -> None: ... + def rating(self) -> float: ... + def setLanguage(self, data: typing.Optional[str]) -> None: ... + def language(self) -> str: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def text(self) -> str: ... + def setDateTime(self, dt: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def dateTime(self) -> QtCore.QDateTime: ... + + +class QPlaceSearchReply(QPlaceReply): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setNextPageRequest(self, next: 'QPlaceSearchRequest') -> None: ... + def setPreviousPageRequest(self, previous: 'QPlaceSearchRequest') -> None: ... + def setRequest(self, request: 'QPlaceSearchRequest') -> None: ... + def setResults(self, results: typing.Iterable[QPlaceSearchResult]) -> None: ... + def nextPageRequest(self) -> 'QPlaceSearchRequest': ... + def previousPageRequest(self) -> 'QPlaceSearchRequest': ... + def request(self) -> 'QPlaceSearchRequest': ... + def results(self) -> typing.List[QPlaceSearchResult]: ... + def type(self) -> QPlaceReply.Type: ... + + +class QPlaceSearchRequest(PyQt5.sipsimplewrapper): + + class RelevanceHint(int): + UnspecifiedHint = ... # type: QPlaceSearchRequest.RelevanceHint + DistanceHint = ... # type: QPlaceSearchRequest.RelevanceHint + LexicalPlaceNameHint = ... # type: QPlaceSearchRequest.RelevanceHint + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceSearchRequest') -> None: ... + + def clear(self) -> None: ... + def setLimit(self, limit: int) -> None: ... + def limit(self) -> int: ... + def setRelevanceHint(self, hint: 'QPlaceSearchRequest.RelevanceHint') -> None: ... + def relevanceHint(self) -> 'QPlaceSearchRequest.RelevanceHint': ... + def setVisibilityScope(self, visibilityScopes: typing.Union[QLocation.VisibilityScope, QLocation.Visibility]) -> None: ... + def visibilityScope(self) -> QLocation.VisibilityScope: ... + def setSearchContext(self, context: typing.Any) -> None: ... + def searchContext(self) -> typing.Any: ... + def setRecommendationId(self, recommendationId: typing.Optional[str]) -> None: ... + def recommendationId(self) -> str: ... + def setSearchArea(self, area: QtPositioning.QGeoShape) -> None: ... + def searchArea(self) -> QtPositioning.QGeoShape: ... + def setCategories(self, categories: typing.Iterable[QPlaceCategory]) -> None: ... + def setCategory(self, category: QPlaceCategory) -> None: ... + def categories(self) -> typing.List[QPlaceCategory]: ... + def setSearchTerm(self, term: typing.Optional[str]) -> None: ... + def searchTerm(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceSearchSuggestionReply(QPlaceReply): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setSuggestions(self, suggestions: typing.Iterable[typing.Optional[str]]) -> None: ... + def type(self) -> QPlaceReply.Type: ... + def suggestions(self) -> typing.List[str]: ... + + +class QPlaceSupplier(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceSupplier') -> None: ... + + def isEmpty(self) -> bool: ... + def setIcon(self, icon: QPlaceIcon) -> None: ... + def icon(self) -> QPlaceIcon: ... + def setUrl(self, data: QtCore.QUrl) -> None: ... + def url(self) -> QtCore.QUrl: ... + def setSupplierId(self, identifier: typing.Optional[str]) -> None: ... + def supplierId(self) -> str: ... + def setName(self, data: typing.Optional[str]) -> None: ... + def name(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QPlaceUser(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QPlaceUser') -> None: ... + + def setName(self, name: typing.Optional[str]) -> None: ... + def name(self) -> str: ... + def setUserId(self, identifier: typing.Optional[str]) -> None: ... + def userId(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtMultimedia.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtMultimedia.abi3.so new file mode 100644 index 0000000..0b46be5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtMultimedia.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtMultimedia.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtMultimedia.pyi new file mode 100644 index 0000000..61cf9c8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtMultimedia.pyi @@ -0,0 +1,2588 @@ +# The PEP 484 type hints stub file for the QtMultimedia module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtNetwork + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QAbstractVideoBuffer(PyQt5.sipsimplewrapper): + + class MapMode(int): + NotMapped = ... # type: QAbstractVideoBuffer.MapMode + ReadOnly = ... # type: QAbstractVideoBuffer.MapMode + WriteOnly = ... # type: QAbstractVideoBuffer.MapMode + ReadWrite = ... # type: QAbstractVideoBuffer.MapMode + + class HandleType(int): + NoHandle = ... # type: QAbstractVideoBuffer.HandleType + GLTextureHandle = ... # type: QAbstractVideoBuffer.HandleType + XvShmImageHandle = ... # type: QAbstractVideoBuffer.HandleType + CoreImageHandle = ... # type: QAbstractVideoBuffer.HandleType + QPixmapHandle = ... # type: QAbstractVideoBuffer.HandleType + EGLImageHandle = ... # type: QAbstractVideoBuffer.HandleType + UserHandle = ... # type: QAbstractVideoBuffer.HandleType + + def __init__(self, type: 'QAbstractVideoBuffer.HandleType') -> None: ... + + def release(self) -> None: ... + def handle(self) -> typing.Any: ... + def unmap(self) -> None: ... + def map(self, mode: 'QAbstractVideoBuffer.MapMode') -> typing.Tuple[PyQt5.sip.voidptr, typing.Optional[int], typing.Optional[int]]: ... + def mapMode(self) -> 'QAbstractVideoBuffer.MapMode': ... + def handleType(self) -> 'QAbstractVideoBuffer.HandleType': ... + + +class QVideoFilterRunnable(PyQt5.sipsimplewrapper): + + class RunFlag(int): + LastInChain = ... # type: QVideoFilterRunnable.RunFlag + + class RunFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QVideoFilterRunnable.RunFlags', 'QVideoFilterRunnable.RunFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QVideoFilterRunnable.RunFlags', 'QVideoFilterRunnable.RunFlag']) -> 'QVideoFilterRunnable.RunFlags': ... + def __xor__(self, f: typing.Union['QVideoFilterRunnable.RunFlags', 'QVideoFilterRunnable.RunFlag']) -> 'QVideoFilterRunnable.RunFlags': ... + def __ior__(self, f: typing.Union['QVideoFilterRunnable.RunFlags', 'QVideoFilterRunnable.RunFlag']) -> 'QVideoFilterRunnable.RunFlags': ... + def __or__(self, f: typing.Union['QVideoFilterRunnable.RunFlags', 'QVideoFilterRunnable.RunFlag']) -> 'QVideoFilterRunnable.RunFlags': ... + def __iand__(self, f: typing.Union['QVideoFilterRunnable.RunFlags', 'QVideoFilterRunnable.RunFlag']) -> 'QVideoFilterRunnable.RunFlags': ... + def __and__(self, f: typing.Union['QVideoFilterRunnable.RunFlags', 'QVideoFilterRunnable.RunFlag']) -> 'QVideoFilterRunnable.RunFlags': ... + def __invert__(self) -> 'QVideoFilterRunnable.RunFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QVideoFilterRunnable') -> None: ... + + def run(self, input: typing.Optional['QVideoFrame'], surfaceFormat: 'QVideoSurfaceFormat', flags: typing.Union['QVideoFilterRunnable.RunFlags', 'QVideoFilterRunnable.RunFlag']) -> 'QVideoFrame': ... + + +class QAbstractVideoFilter(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + activeChanged: typing.ClassVar[QtCore.pyqtSignal] + def createFilterRunnable(self) -> typing.Optional[QVideoFilterRunnable]: ... + def isActive(self) -> bool: ... + + +class QAbstractVideoSurface(QtCore.QObject): + + class Error(int): + NoError = ... # type: QAbstractVideoSurface.Error + UnsupportedFormatError = ... # type: QAbstractVideoSurface.Error + IncorrectFormatError = ... # type: QAbstractVideoSurface.Error + StoppedError = ... # type: QAbstractVideoSurface.Error + ResourceError = ... # type: QAbstractVideoSurface.Error + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + nativeResolutionChanged: typing.ClassVar[QtCore.pyqtSignal] + def setNativeResolution(self, resolution: QtCore.QSize) -> None: ... + def nativeResolution(self) -> QtCore.QSize: ... + def setError(self, error: 'QAbstractVideoSurface.Error') -> None: ... + supportedFormatsChanged: typing.ClassVar[QtCore.pyqtSignal] + surfaceFormatChanged: typing.ClassVar[QtCore.pyqtSignal] + activeChanged: typing.ClassVar[QtCore.pyqtSignal] + def error(self) -> 'QAbstractVideoSurface.Error': ... + def present(self, frame: 'QVideoFrame') -> bool: ... + def isActive(self) -> bool: ... + def stop(self) -> None: ... + def start(self, format: 'QVideoSurfaceFormat') -> bool: ... + def surfaceFormat(self) -> 'QVideoSurfaceFormat': ... + def nearestFormat(self, format: 'QVideoSurfaceFormat') -> 'QVideoSurfaceFormat': ... + def isFormatSupported(self, format: 'QVideoSurfaceFormat') -> bool: ... + def supportedPixelFormats(self, type: QAbstractVideoBuffer.HandleType = ...) -> typing.List['QVideoFrame.PixelFormat']: ... + + +class QAudio(PyQt5.sip.simplewrapper): + + class VolumeScale(int): + LinearVolumeScale = ... # type: QAudio.VolumeScale + CubicVolumeScale = ... # type: QAudio.VolumeScale + LogarithmicVolumeScale = ... # type: QAudio.VolumeScale + DecibelVolumeScale = ... # type: QAudio.VolumeScale + + class Role(int): + UnknownRole = ... # type: QAudio.Role + MusicRole = ... # type: QAudio.Role + VideoRole = ... # type: QAudio.Role + VoiceCommunicationRole = ... # type: QAudio.Role + AlarmRole = ... # type: QAudio.Role + NotificationRole = ... # type: QAudio.Role + RingtoneRole = ... # type: QAudio.Role + AccessibilityRole = ... # type: QAudio.Role + SonificationRole = ... # type: QAudio.Role + GameRole = ... # type: QAudio.Role + CustomRole = ... # type: QAudio.Role + + class Mode(int): + AudioInput = ... # type: QAudio.Mode + AudioOutput = ... # type: QAudio.Mode + + class State(int): + ActiveState = ... # type: QAudio.State + SuspendedState = ... # type: QAudio.State + StoppedState = ... # type: QAudio.State + IdleState = ... # type: QAudio.State + InterruptedState = ... # type: QAudio.State + + class Error(int): + NoError = ... # type: QAudio.Error + OpenError = ... # type: QAudio.Error + IOError = ... # type: QAudio.Error + UnderrunError = ... # type: QAudio.Error + FatalError = ... # type: QAudio.Error + + def convertVolume(self, volume: float, from_: 'QAudio.VolumeScale', to: 'QAudio.VolumeScale') -> float: ... + + +class QAudioBuffer(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray], format: 'QAudioFormat', startTime: int = ...) -> None: ... + @typing.overload + def __init__(self, numFrames: int, format: 'QAudioFormat', startTime: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QAudioBuffer') -> None: ... + + def data(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def constData(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def startTime(self) -> int: ... + def duration(self) -> int: ... + def byteCount(self) -> int: ... + def sampleCount(self) -> int: ... + def frameCount(self) -> int: ... + def format(self) -> 'QAudioFormat': ... + def isValid(self) -> bool: ... + + +class QMediaObject(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject], service: typing.Optional['QMediaService']) -> None: ... + + def removePropertyWatch(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def addPropertyWatch(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + availabilityChanged: typing.ClassVar[QtCore.pyqtSignal] + metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] + metaDataAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + notifyIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] + def availableMetaData(self) -> typing.List[str]: ... + def metaData(self, key: typing.Optional[str]) -> typing.Any: ... + def isMetaDataAvailable(self) -> bool: ... + def unbind(self, a0: typing.Optional[QtCore.QObject]) -> None: ... + def bind(self, a0: typing.Optional[QtCore.QObject]) -> bool: ... + def setNotifyInterval(self, milliSeconds: int) -> None: ... + def notifyInterval(self) -> int: ... + def service(self) -> typing.Optional['QMediaService']: ... + def availability(self) -> 'QMultimedia.AvailabilityStatus': ... + def isAvailable(self) -> bool: ... + + +class QAudioDecoder(QMediaObject): + + class Error(int): + NoError = ... # type: QAudioDecoder.Error + ResourceError = ... # type: QAudioDecoder.Error + FormatError = ... # type: QAudioDecoder.Error + AccessDeniedError = ... # type: QAudioDecoder.Error + ServiceMissingError = ... # type: QAudioDecoder.Error + + class State(int): + StoppedState = ... # type: QAudioDecoder.State + DecodingState = ... # type: QAudioDecoder.State + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def unbind(self, a0: typing.Optional[QtCore.QObject]) -> None: ... + def bind(self, a0: typing.Optional[QtCore.QObject]) -> bool: ... + durationChanged: typing.ClassVar[QtCore.pyqtSignal] + positionChanged: typing.ClassVar[QtCore.pyqtSignal] + sourceChanged: typing.ClassVar[QtCore.pyqtSignal] + formatChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + bufferReady: typing.ClassVar[QtCore.pyqtSignal] + bufferAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + def stop(self) -> None: ... + def start(self) -> None: ... + def duration(self) -> int: ... + def position(self) -> int: ... + def bufferAvailable(self) -> bool: ... + def read(self) -> QAudioBuffer: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def setAudioFormat(self, format: 'QAudioFormat') -> None: ... + def audioFormat(self) -> 'QAudioFormat': ... + def setSourceDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + def sourceDevice(self) -> typing.Optional[QtCore.QIODevice]: ... + def setSourceFilename(self, fileName: typing.Optional[str]) -> None: ... + def sourceFilename(self) -> str: ... + def state(self) -> 'QAudioDecoder.State': ... + @staticmethod + def hasSupport(mimeType: typing.Optional[str], codecs: typing.Iterable[typing.Optional[str]] = ...) -> 'QMultimedia.SupportEstimate': ... + + +class QMediaControl(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + +class QAudioDecoderControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + durationChanged: typing.ClassVar[QtCore.pyqtSignal] + positionChanged: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + bufferAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + bufferReady: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + sourceChanged: typing.ClassVar[QtCore.pyqtSignal] + formatChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def duration(self) -> int: ... + def position(self) -> int: ... + def bufferAvailable(self) -> bool: ... + def read(self) -> QAudioBuffer: ... + def setAudioFormat(self, format: 'QAudioFormat') -> None: ... + def audioFormat(self) -> 'QAudioFormat': ... + def stop(self) -> None: ... + def start(self) -> None: ... + def setSourceDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + def sourceDevice(self) -> typing.Optional[QtCore.QIODevice]: ... + def setSourceFilename(self, fileName: typing.Optional[str]) -> None: ... + def sourceFilename(self) -> str: ... + def state(self) -> QAudioDecoder.State: ... + + +class QAudioDeviceInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QAudioDeviceInfo') -> None: ... + + def realm(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def supportedChannelCounts(self) -> typing.List[int]: ... + def supportedSampleRates(self) -> typing.List[int]: ... + @staticmethod + def availableDevices(mode: QAudio.Mode) -> typing.List['QAudioDeviceInfo']: ... + @staticmethod + def defaultOutputDevice() -> 'QAudioDeviceInfo': ... + @staticmethod + def defaultInputDevice() -> 'QAudioDeviceInfo': ... + def supportedSampleTypes(self) -> typing.List['QAudioFormat.SampleType']: ... + def supportedByteOrders(self) -> typing.List['QAudioFormat.Endian']: ... + def supportedSampleSizes(self) -> typing.List[int]: ... + def supportedCodecs(self) -> typing.List[str]: ... + def nearestFormat(self, format: 'QAudioFormat') -> 'QAudioFormat': ... + def preferredFormat(self) -> 'QAudioFormat': ... + def isFormatSupported(self, format: 'QAudioFormat') -> bool: ... + def deviceName(self) -> str: ... + def isNull(self) -> bool: ... + + +class QAudioEncoderSettingsControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setAudioSettings(self, settings: 'QAudioEncoderSettings') -> None: ... + def audioSettings(self) -> 'QAudioEncoderSettings': ... + def supportedSampleRates(self, settings: 'QAudioEncoderSettings') -> typing.Tuple[typing.List[int], typing.Optional[bool]]: ... + def codecDescription(self, codecName: typing.Optional[str]) -> str: ... + def supportedAudioCodecs(self) -> typing.List[str]: ... + + +class QAudioFormat(PyQt5.sipsimplewrapper): + + class Endian(int): + BigEndian = ... # type: QAudioFormat.Endian + LittleEndian = ... # type: QAudioFormat.Endian + + class SampleType(int): + Unknown = ... # type: QAudioFormat.SampleType + SignedInt = ... # type: QAudioFormat.SampleType + UnSignedInt = ... # type: QAudioFormat.SampleType + Float = ... # type: QAudioFormat.SampleType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QAudioFormat') -> None: ... + + def bytesPerFrame(self) -> int: ... + def durationForFrames(self, frameCount: int) -> int: ... + def framesForDuration(self, duration: int) -> int: ... + def framesForBytes(self, byteCount: int) -> int: ... + def bytesForFrames(self, frameCount: int) -> int: ... + def durationForBytes(self, byteCount: int) -> int: ... + def bytesForDuration(self, duration: int) -> int: ... + def channelCount(self) -> int: ... + def setChannelCount(self, channelCount: int) -> None: ... + def sampleRate(self) -> int: ... + def setSampleRate(self, sampleRate: int) -> None: ... + def sampleType(self) -> 'QAudioFormat.SampleType': ... + def setSampleType(self, sampleType: 'QAudioFormat.SampleType') -> None: ... + def byteOrder(self) -> 'QAudioFormat.Endian': ... + def setByteOrder(self, byteOrder: 'QAudioFormat.Endian') -> None: ... + def codec(self) -> str: ... + def setCodec(self, codec: typing.Optional[str]) -> None: ... + def sampleSize(self) -> int: ... + def setSampleSize(self, sampleSize: int) -> None: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QAudioInput(QtCore.QObject): + + @typing.overload + def __init__(self, format: QAudioFormat = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, audioDevice: QAudioDeviceInfo, format: QAudioFormat = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def volume(self) -> float: ... + def setVolume(self, volume: float) -> None: ... + notify: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def state(self) -> QAudio.State: ... + def error(self) -> QAudio.Error: ... + def elapsedUSecs(self) -> int: ... + def processedUSecs(self) -> int: ... + def notifyInterval(self) -> int: ... + def setNotifyInterval(self, milliSeconds: int) -> None: ... + def periodSize(self) -> int: ... + def bytesReady(self) -> int: ... + def bufferSize(self) -> int: ... + def setBufferSize(self, bytes: int) -> None: ... + def resume(self) -> None: ... + def suspend(self) -> None: ... + def reset(self) -> None: ... + def stop(self) -> None: ... + @typing.overload + def start(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + @typing.overload + def start(self) -> typing.Optional[QtCore.QIODevice]: ... + def format(self) -> QAudioFormat: ... + + +class QAudioInputSelectorControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + availableInputsChanged: typing.ClassVar[QtCore.pyqtSignal] + activeInputChanged: typing.ClassVar[QtCore.pyqtSignal] + def setActiveInput(self, name: typing.Optional[str]) -> None: ... + def activeInput(self) -> str: ... + def defaultInput(self) -> str: ... + def inputDescription(self, name: typing.Optional[str]) -> str: ... + def availableInputs(self) -> typing.List[str]: ... + + +class QAudioOutput(QtCore.QObject): + + @typing.overload + def __init__(self, format: QAudioFormat = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, audioDevice: QAudioDeviceInfo, format: QAudioFormat = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setCategory(self, category: typing.Optional[str]) -> None: ... + def category(self) -> str: ... + def volume(self) -> float: ... + def setVolume(self, a0: float) -> None: ... + notify: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def state(self) -> QAudio.State: ... + def error(self) -> QAudio.Error: ... + def elapsedUSecs(self) -> int: ... + def processedUSecs(self) -> int: ... + def notifyInterval(self) -> int: ... + def setNotifyInterval(self, milliSeconds: int) -> None: ... + def periodSize(self) -> int: ... + def bytesFree(self) -> int: ... + def bufferSize(self) -> int: ... + def setBufferSize(self, bytes: int) -> None: ... + def resume(self) -> None: ... + def suspend(self) -> None: ... + def reset(self) -> None: ... + def stop(self) -> None: ... + @typing.overload + def start(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + @typing.overload + def start(self) -> typing.Optional[QtCore.QIODevice]: ... + def format(self) -> QAudioFormat: ... + + +class QAudioOutputSelectorControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + availableOutputsChanged: typing.ClassVar[QtCore.pyqtSignal] + activeOutputChanged: typing.ClassVar[QtCore.pyqtSignal] + def setActiveOutput(self, name: typing.Optional[str]) -> None: ... + def activeOutput(self) -> str: ... + def defaultOutput(self) -> str: ... + def outputDescription(self, name: typing.Optional[str]) -> str: ... + def availableOutputs(self) -> typing.List[str]: ... + + +class QAudioProbe(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + flush: typing.ClassVar[QtCore.pyqtSignal] + audioBufferProbed: typing.ClassVar[QtCore.pyqtSignal] + def isActive(self) -> bool: ... + @typing.overload + def setSource(self, source: typing.Optional[QMediaObject]) -> bool: ... + @typing.overload + def setSource(self, source: typing.Optional['QMediaRecorder']) -> bool: ... + + +class QMediaBindableInterface(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QMediaBindableInterface') -> None: ... + + def setMediaObject(self, object: typing.Optional[QMediaObject]) -> bool: ... + def mediaObject(self) -> typing.Optional[QMediaObject]: ... + + +class QMediaRecorder(QtCore.QObject, QMediaBindableInterface): + + class Error(int): + NoError = ... # type: QMediaRecorder.Error + ResourceError = ... # type: QMediaRecorder.Error + FormatError = ... # type: QMediaRecorder.Error + OutOfSpaceError = ... # type: QMediaRecorder.Error + + class Status(int): + UnavailableStatus = ... # type: QMediaRecorder.Status + UnloadedStatus = ... # type: QMediaRecorder.Status + LoadingStatus = ... # type: QMediaRecorder.Status + LoadedStatus = ... # type: QMediaRecorder.Status + StartingStatus = ... # type: QMediaRecorder.Status + RecordingStatus = ... # type: QMediaRecorder.Status + PausedStatus = ... # type: QMediaRecorder.Status + FinalizingStatus = ... # type: QMediaRecorder.Status + + class State(int): + StoppedState = ... # type: QMediaRecorder.State + RecordingState = ... # type: QMediaRecorder.State + PausedState = ... # type: QMediaRecorder.State + + def __init__(self, mediaObject: typing.Optional[QMediaObject], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setMediaObject(self, object: typing.Optional[QMediaObject]) -> bool: ... + availabilityChanged: typing.ClassVar[QtCore.pyqtSignal] + metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] + metaDataWritableChanged: typing.ClassVar[QtCore.pyqtSignal] + metaDataAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + actualLocationChanged: typing.ClassVar[QtCore.pyqtSignal] + volumeChanged: typing.ClassVar[QtCore.pyqtSignal] + mutedChanged: typing.ClassVar[QtCore.pyqtSignal] + durationChanged: typing.ClassVar[QtCore.pyqtSignal] + statusChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def setVolume(self, volume: float) -> None: ... + def setMuted(self, muted: bool) -> None: ... + def stop(self) -> None: ... + def pause(self) -> None: ... + def record(self) -> None: ... + def availableMetaData(self) -> typing.List[str]: ... + def setMetaData(self, key: typing.Optional[str], value: typing.Any) -> None: ... + def metaData(self, key: typing.Optional[str]) -> typing.Any: ... + def isMetaDataWritable(self) -> bool: ... + def isMetaDataAvailable(self) -> bool: ... + def setEncodingSettings(self, audio: 'QAudioEncoderSettings', video: 'QVideoEncoderSettings' = ..., container: typing.Optional[str] = ...) -> None: ... + def setContainerFormat(self, container: typing.Optional[str]) -> None: ... + def setVideoSettings(self, videoSettings: 'QVideoEncoderSettings') -> None: ... + def setAudioSettings(self, audioSettings: 'QAudioEncoderSettings') -> None: ... + def containerFormat(self) -> str: ... + def videoSettings(self) -> 'QVideoEncoderSettings': ... + def audioSettings(self) -> 'QAudioEncoderSettings': ... + def supportedFrameRates(self, settings: 'QVideoEncoderSettings' = ...) -> typing.Tuple[typing.List[float], typing.Optional[bool]]: ... + def supportedResolutions(self, settings: 'QVideoEncoderSettings' = ...) -> typing.Tuple[typing.List[QtCore.QSize], typing.Optional[bool]]: ... + def videoCodecDescription(self, codecName: typing.Optional[str]) -> str: ... + def supportedVideoCodecs(self) -> typing.List[str]: ... + def supportedAudioSampleRates(self, settings: 'QAudioEncoderSettings' = ...) -> typing.Tuple[typing.List[int], typing.Optional[bool]]: ... + def audioCodecDescription(self, codecName: typing.Optional[str]) -> str: ... + def supportedAudioCodecs(self) -> typing.List[str]: ... + def containerDescription(self, format: typing.Optional[str]) -> str: ... + def supportedContainers(self) -> typing.List[str]: ... + def volume(self) -> float: ... + def isMuted(self) -> bool: ... + def duration(self) -> int: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def status(self) -> 'QMediaRecorder.Status': ... + def state(self) -> 'QMediaRecorder.State': ... + def actualLocation(self) -> QtCore.QUrl: ... + def setOutputLocation(self, location: QtCore.QUrl) -> bool: ... + def outputLocation(self) -> QtCore.QUrl: ... + def availability(self) -> 'QMultimedia.AvailabilityStatus': ... + def isAvailable(self) -> bool: ... + def mediaObject(self) -> typing.Optional[QMediaObject]: ... + + +class QAudioRecorder(QMediaRecorder): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + availableAudioInputsChanged: typing.ClassVar[QtCore.pyqtSignal] + audioInputChanged: typing.ClassVar[QtCore.pyqtSignal] + def setAudioInput(self, name: typing.Optional[str]) -> None: ... + def audioInput(self) -> str: ... + def audioInputDescription(self, name: typing.Optional[str]) -> str: ... + def defaultAudioInput(self) -> str: ... + def audioInputs(self) -> typing.List[str]: ... + + +class QAudioRoleControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + audioRoleChanged: typing.ClassVar[QtCore.pyqtSignal] + def supportedAudioRoles(self) -> typing.List[QAudio.Role]: ... + def setAudioRole(self, role: QAudio.Role) -> None: ... + def audioRole(self) -> QAudio.Role: ... + + +class QCamera(QMediaObject): + + class Position(int): + UnspecifiedPosition = ... # type: QCamera.Position + BackFace = ... # type: QCamera.Position + FrontFace = ... # type: QCamera.Position + + class LockType(int): + NoLock = ... # type: QCamera.LockType + LockExposure = ... # type: QCamera.LockType + LockWhiteBalance = ... # type: QCamera.LockType + LockFocus = ... # type: QCamera.LockType + + class LockChangeReason(int): + UserRequest = ... # type: QCamera.LockChangeReason + LockAcquired = ... # type: QCamera.LockChangeReason + LockFailed = ... # type: QCamera.LockChangeReason + LockLost = ... # type: QCamera.LockChangeReason + LockTemporaryLost = ... # type: QCamera.LockChangeReason + + class LockStatus(int): + Unlocked = ... # type: QCamera.LockStatus + Searching = ... # type: QCamera.LockStatus + Locked = ... # type: QCamera.LockStatus + + class Error(int): + NoError = ... # type: QCamera.Error + CameraError = ... # type: QCamera.Error + InvalidRequestError = ... # type: QCamera.Error + ServiceMissingError = ... # type: QCamera.Error + NotSupportedFeatureError = ... # type: QCamera.Error + + class CaptureMode(int): + CaptureViewfinder = ... # type: QCamera.CaptureMode + CaptureStillImage = ... # type: QCamera.CaptureMode + CaptureVideo = ... # type: QCamera.CaptureMode + + class State(int): + UnloadedState = ... # type: QCamera.State + LoadedState = ... # type: QCamera.State + ActiveState = ... # type: QCamera.State + + class Status(int): + UnavailableStatus = ... # type: QCamera.Status + UnloadedStatus = ... # type: QCamera.Status + LoadingStatus = ... # type: QCamera.Status + UnloadingStatus = ... # type: QCamera.Status + LoadedStatus = ... # type: QCamera.Status + StandbyStatus = ... # type: QCamera.Status + StartingStatus = ... # type: QCamera.Status + StoppingStatus = ... # type: QCamera.Status + ActiveStatus = ... # type: QCamera.Status + + class CaptureModes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> 'QCamera.CaptureModes': ... + def __xor__(self, f: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> 'QCamera.CaptureModes': ... + def __ior__(self, f: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> 'QCamera.CaptureModes': ... + def __or__(self, f: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> 'QCamera.CaptureModes': ... + def __iand__(self, f: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> 'QCamera.CaptureModes': ... + def __and__(self, f: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> 'QCamera.CaptureModes': ... + def __invert__(self) -> 'QCamera.CaptureModes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class LockTypes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> 'QCamera.LockTypes': ... + def __xor__(self, f: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> 'QCamera.LockTypes': ... + def __ior__(self, f: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> 'QCamera.LockTypes': ... + def __or__(self, f: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> 'QCamera.LockTypes': ... + def __iand__(self, f: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> 'QCamera.LockTypes': ... + def __and__(self, f: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> 'QCamera.LockTypes': ... + def __invert__(self) -> 'QCamera.LockTypes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class FrameRateRange(PyQt5.sipsimplewrapper): + + maximumFrameRate = ... # type: float + minimumFrameRate = ... # type: float + + @typing.overload + def __init__(self, minimum: float, maximum: float) -> None: ... + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QCamera.FrameRateRange') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, device: typing.Union[QtCore.QByteArray, bytes, bytearray], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, cameraInfo: 'QCameraInfo', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, position: 'QCamera.Position', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def supportedViewfinderPixelFormats(self, settings: 'QCameraViewfinderSettings' = ...) -> typing.List['QVideoFrame.PixelFormat']: ... + def supportedViewfinderFrameRateRanges(self, settings: 'QCameraViewfinderSettings' = ...) -> typing.List['QCamera.FrameRateRange']: ... + def supportedViewfinderResolutions(self, settings: 'QCameraViewfinderSettings' = ...) -> typing.List[QtCore.QSize]: ... + def supportedViewfinderSettings(self, settings: 'QCameraViewfinderSettings' = ...) -> typing.List['QCameraViewfinderSettings']: ... + def setViewfinderSettings(self, settings: 'QCameraViewfinderSettings') -> None: ... + def viewfinderSettings(self) -> 'QCameraViewfinderSettings': ... + errorOccurred: typing.ClassVar[QtCore.pyqtSignal] + lockStatusChanged: typing.ClassVar[QtCore.pyqtSignal] + lockFailed: typing.ClassVar[QtCore.pyqtSignal] + locked: typing.ClassVar[QtCore.pyqtSignal] + statusChanged: typing.ClassVar[QtCore.pyqtSignal] + captureModeChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def unlock(self) -> None: ... + @typing.overload + def unlock(self, locks: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> None: ... + @typing.overload + def searchAndLock(self) -> None: ... + @typing.overload + def searchAndLock(self, locks: typing.Union['QCamera.LockTypes', 'QCamera.LockType']) -> None: ... + def stop(self) -> None: ... + def start(self) -> None: ... + def unload(self) -> None: ... + def load(self) -> None: ... + def setCaptureMode(self, mode: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> None: ... + @typing.overload + def lockStatus(self) -> 'QCamera.LockStatus': ... + @typing.overload + def lockStatus(self, lock: 'QCamera.LockType') -> 'QCamera.LockStatus': ... + def requestedLocks(self) -> 'QCamera.LockTypes': ... + def supportedLocks(self) -> 'QCamera.LockTypes': ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def setViewfinder(self, viewfinder: typing.Optional[QVideoWidget]) -> None: ... + @typing.overload + def setViewfinder(self, viewfinder: typing.Optional[QGraphicsVideoItem]) -> None: ... + @typing.overload + def setViewfinder(self, surface: typing.Optional[QAbstractVideoSurface]) -> None: ... + def imageProcessing(self) -> typing.Optional['QCameraImageProcessing']: ... + def focus(self) -> typing.Optional['QCameraFocus']: ... + def exposure(self) -> typing.Optional['QCameraExposure']: ... + def isCaptureModeSupported(self, mode: typing.Union['QCamera.CaptureModes', 'QCamera.CaptureMode']) -> bool: ... + def captureMode(self) -> 'QCamera.CaptureModes': ... + def status(self) -> 'QCamera.Status': ... + def state(self) -> 'QCamera.State': ... + def availability(self) -> 'QMultimedia.AvailabilityStatus': ... + @staticmethod + def deviceDescription(device: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> str: ... + @staticmethod + def availableDevices() -> typing.List[QtCore.QByteArray]: ... + + +class QCameraCaptureBufferFormatControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + bufferFormatChanged: typing.ClassVar[QtCore.pyqtSignal] + def setBufferFormat(self, format: 'QVideoFrame.PixelFormat') -> None: ... + def bufferFormat(self) -> 'QVideoFrame.PixelFormat': ... + def supportedBufferFormats(self) -> typing.List['QVideoFrame.PixelFormat']: ... + + +class QCameraCaptureDestinationControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + captureDestinationChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCaptureDestination(self, destination: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> None: ... + def captureDestination(self) -> 'QCameraImageCapture.CaptureDestinations': ... + def isCaptureDestinationSupported(self, destination: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> bool: ... + + +class QCameraControl(QMediaControl): + + class PropertyChangeType(int): + CaptureMode = ... # type: QCameraControl.PropertyChangeType + ImageEncodingSettings = ... # type: QCameraControl.PropertyChangeType + VideoEncodingSettings = ... # type: QCameraControl.PropertyChangeType + Viewfinder = ... # type: QCameraControl.PropertyChangeType + ViewfinderSettings = ... # type: QCameraControl.PropertyChangeType + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + captureModeChanged: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + statusChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def canChangeProperty(self, changeType: 'QCameraControl.PropertyChangeType', status: QCamera.Status) -> bool: ... + def isCaptureModeSupported(self, mode: typing.Union[QCamera.CaptureModes, QCamera.CaptureMode]) -> bool: ... + def setCaptureMode(self, a0: typing.Union[QCamera.CaptureModes, QCamera.CaptureMode]) -> None: ... + def captureMode(self) -> QCamera.CaptureModes: ... + def status(self) -> QCamera.Status: ... + def setState(self, state: QCamera.State) -> None: ... + def state(self) -> QCamera.State: ... + + +class QCameraExposure(QtCore.QObject): + + class MeteringMode(int): + MeteringMatrix = ... # type: QCameraExposure.MeteringMode + MeteringAverage = ... # type: QCameraExposure.MeteringMode + MeteringSpot = ... # type: QCameraExposure.MeteringMode + + class ExposureMode(int): + ExposureAuto = ... # type: QCameraExposure.ExposureMode + ExposureManual = ... # type: QCameraExposure.ExposureMode + ExposurePortrait = ... # type: QCameraExposure.ExposureMode + ExposureNight = ... # type: QCameraExposure.ExposureMode + ExposureBacklight = ... # type: QCameraExposure.ExposureMode + ExposureSpotlight = ... # type: QCameraExposure.ExposureMode + ExposureSports = ... # type: QCameraExposure.ExposureMode + ExposureSnow = ... # type: QCameraExposure.ExposureMode + ExposureBeach = ... # type: QCameraExposure.ExposureMode + ExposureLargeAperture = ... # type: QCameraExposure.ExposureMode + ExposureSmallAperture = ... # type: QCameraExposure.ExposureMode + ExposureAction = ... # type: QCameraExposure.ExposureMode + ExposureLandscape = ... # type: QCameraExposure.ExposureMode + ExposureNightPortrait = ... # type: QCameraExposure.ExposureMode + ExposureTheatre = ... # type: QCameraExposure.ExposureMode + ExposureSunset = ... # type: QCameraExposure.ExposureMode + ExposureSteadyPhoto = ... # type: QCameraExposure.ExposureMode + ExposureFireworks = ... # type: QCameraExposure.ExposureMode + ExposureParty = ... # type: QCameraExposure.ExposureMode + ExposureCandlelight = ... # type: QCameraExposure.ExposureMode + ExposureBarcode = ... # type: QCameraExposure.ExposureMode + ExposureModeVendor = ... # type: QCameraExposure.ExposureMode + + class FlashMode(int): + FlashAuto = ... # type: QCameraExposure.FlashMode + FlashOff = ... # type: QCameraExposure.FlashMode + FlashOn = ... # type: QCameraExposure.FlashMode + FlashRedEyeReduction = ... # type: QCameraExposure.FlashMode + FlashFill = ... # type: QCameraExposure.FlashMode + FlashTorch = ... # type: QCameraExposure.FlashMode + FlashVideoLight = ... # type: QCameraExposure.FlashMode + FlashSlowSyncFrontCurtain = ... # type: QCameraExposure.FlashMode + FlashSlowSyncRearCurtain = ... # type: QCameraExposure.FlashMode + FlashManual = ... # type: QCameraExposure.FlashMode + + class FlashModes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> 'QCameraExposure.FlashModes': ... + def __xor__(self, f: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> 'QCameraExposure.FlashModes': ... + def __ior__(self, f: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> 'QCameraExposure.FlashModes': ... + def __or__(self, f: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> 'QCameraExposure.FlashModes': ... + def __iand__(self, f: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> 'QCameraExposure.FlashModes': ... + def __and__(self, f: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> 'QCameraExposure.FlashModes': ... + def __invert__(self) -> 'QCameraExposure.FlashModes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + exposureCompensationChanged: typing.ClassVar[QtCore.pyqtSignal] + isoSensitivityChanged: typing.ClassVar[QtCore.pyqtSignal] + shutterSpeedRangeChanged: typing.ClassVar[QtCore.pyqtSignal] + shutterSpeedChanged: typing.ClassVar[QtCore.pyqtSignal] + apertureRangeChanged: typing.ClassVar[QtCore.pyqtSignal] + apertureChanged: typing.ClassVar[QtCore.pyqtSignal] + flashReady: typing.ClassVar[QtCore.pyqtSignal] + def setAutoShutterSpeed(self) -> None: ... + def setManualShutterSpeed(self, seconds: float) -> None: ... + def setAutoAperture(self) -> None: ... + def setManualAperture(self, aperture: float) -> None: ... + def setAutoIsoSensitivity(self) -> None: ... + def setManualIsoSensitivity(self, iso: int) -> None: ... + def setExposureCompensation(self, ev: float) -> None: ... + def setMeteringMode(self, mode: 'QCameraExposure.MeteringMode') -> None: ... + def setExposureMode(self, mode: 'QCameraExposure.ExposureMode') -> None: ... + def setFlashMode(self, mode: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> None: ... + def supportedShutterSpeeds(self) -> typing.Tuple[typing.List[float], typing.Optional[bool]]: ... + def supportedApertures(self) -> typing.Tuple[typing.List[float], typing.Optional[bool]]: ... + def supportedIsoSensitivities(self) -> typing.Tuple[typing.List[int], typing.Optional[bool]]: ... + def requestedShutterSpeed(self) -> float: ... + def requestedAperture(self) -> float: ... + def requestedIsoSensitivity(self) -> int: ... + def shutterSpeed(self) -> float: ... + def aperture(self) -> float: ... + def isoSensitivity(self) -> int: ... + def setSpotMeteringPoint(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def spotMeteringPoint(self) -> QtCore.QPointF: ... + def isMeteringModeSupported(self, mode: 'QCameraExposure.MeteringMode') -> bool: ... + def meteringMode(self) -> 'QCameraExposure.MeteringMode': ... + def exposureCompensation(self) -> float: ... + def isExposureModeSupported(self, mode: 'QCameraExposure.ExposureMode') -> bool: ... + def exposureMode(self) -> 'QCameraExposure.ExposureMode': ... + def isFlashReady(self) -> bool: ... + def isFlashModeSupported(self, mode: typing.Union['QCameraExposure.FlashModes', 'QCameraExposure.FlashMode']) -> bool: ... + def flashMode(self) -> 'QCameraExposure.FlashModes': ... + def isAvailable(self) -> bool: ... + + +class QCameraExposureControl(QMediaControl): + + class ExposureParameter(int): + ISO = ... # type: QCameraExposureControl.ExposureParameter + Aperture = ... # type: QCameraExposureControl.ExposureParameter + ShutterSpeed = ... # type: QCameraExposureControl.ExposureParameter + ExposureCompensation = ... # type: QCameraExposureControl.ExposureParameter + FlashPower = ... # type: QCameraExposureControl.ExposureParameter + FlashCompensation = ... # type: QCameraExposureControl.ExposureParameter + TorchPower = ... # type: QCameraExposureControl.ExposureParameter + SpotMeteringPoint = ... # type: QCameraExposureControl.ExposureParameter + ExposureMode = ... # type: QCameraExposureControl.ExposureParameter + MeteringMode = ... # type: QCameraExposureControl.ExposureParameter + ExtendedExposureParameter = ... # type: QCameraExposureControl.ExposureParameter + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + parameterRangeChanged: typing.ClassVar[QtCore.pyqtSignal] + actualValueChanged: typing.ClassVar[QtCore.pyqtSignal] + requestedValueChanged: typing.ClassVar[QtCore.pyqtSignal] + def setValue(self, parameter: 'QCameraExposureControl.ExposureParameter', value: typing.Any) -> bool: ... + def actualValue(self, parameter: 'QCameraExposureControl.ExposureParameter') -> typing.Any: ... + def requestedValue(self, parameter: 'QCameraExposureControl.ExposureParameter') -> typing.Any: ... + def supportedParameterRange(self, parameter: 'QCameraExposureControl.ExposureParameter') -> typing.Tuple[typing.List[typing.Any], typing.Optional[bool]]: ... + def isParameterSupported(self, parameter: 'QCameraExposureControl.ExposureParameter') -> bool: ... + + +class QCameraFeedbackControl(QMediaControl): + + class EventType(int): + ViewfinderStarted = ... # type: QCameraFeedbackControl.EventType + ViewfinderStopped = ... # type: QCameraFeedbackControl.EventType + ImageCaptured = ... # type: QCameraFeedbackControl.EventType + ImageSaved = ... # type: QCameraFeedbackControl.EventType + ImageError = ... # type: QCameraFeedbackControl.EventType + RecordingStarted = ... # type: QCameraFeedbackControl.EventType + RecordingInProgress = ... # type: QCameraFeedbackControl.EventType + RecordingStopped = ... # type: QCameraFeedbackControl.EventType + AutoFocusInProgress = ... # type: QCameraFeedbackControl.EventType + AutoFocusLocked = ... # type: QCameraFeedbackControl.EventType + AutoFocusFailed = ... # type: QCameraFeedbackControl.EventType + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setEventFeedbackSound(self, a0: 'QCameraFeedbackControl.EventType', filePath: typing.Optional[str]) -> bool: ... + def resetEventFeedback(self, a0: 'QCameraFeedbackControl.EventType') -> None: ... + def setEventFeedbackEnabled(self, a0: 'QCameraFeedbackControl.EventType', a1: bool) -> bool: ... + def isEventFeedbackEnabled(self, a0: 'QCameraFeedbackControl.EventType') -> bool: ... + def isEventFeedbackLocked(self, a0: 'QCameraFeedbackControl.EventType') -> bool: ... + + +class QCameraFlashControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + flashReady: typing.ClassVar[QtCore.pyqtSignal] + def isFlashReady(self) -> bool: ... + def isFlashModeSupported(self, mode: typing.Union[QCameraExposure.FlashModes, QCameraExposure.FlashMode]) -> bool: ... + def setFlashMode(self, mode: typing.Union[QCameraExposure.FlashModes, QCameraExposure.FlashMode]) -> None: ... + def flashMode(self) -> QCameraExposure.FlashModes: ... + + +class QCameraFocusZone(PyQt5.sipsimplewrapper): + + class FocusZoneStatus(int): + Invalid = ... # type: QCameraFocusZone.FocusZoneStatus + Unused = ... # type: QCameraFocusZone.FocusZoneStatus + Selected = ... # type: QCameraFocusZone.FocusZoneStatus + Focused = ... # type: QCameraFocusZone.FocusZoneStatus + + def __init__(self, other: 'QCameraFocusZone') -> None: ... + + def status(self) -> 'QCameraFocusZone.FocusZoneStatus': ... + def area(self) -> QtCore.QRectF: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QCameraFocus(QtCore.QObject): + + class FocusPointMode(int): + FocusPointAuto = ... # type: QCameraFocus.FocusPointMode + FocusPointCenter = ... # type: QCameraFocus.FocusPointMode + FocusPointFaceDetection = ... # type: QCameraFocus.FocusPointMode + FocusPointCustom = ... # type: QCameraFocus.FocusPointMode + + class FocusMode(int): + ManualFocus = ... # type: QCameraFocus.FocusMode + HyperfocalFocus = ... # type: QCameraFocus.FocusMode + InfinityFocus = ... # type: QCameraFocus.FocusMode + AutoFocus = ... # type: QCameraFocus.FocusMode + ContinuousFocus = ... # type: QCameraFocus.FocusMode + MacroFocus = ... # type: QCameraFocus.FocusMode + + class FocusModes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> 'QCameraFocus.FocusModes': ... + def __xor__(self, f: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> 'QCameraFocus.FocusModes': ... + def __ior__(self, f: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> 'QCameraFocus.FocusModes': ... + def __or__(self, f: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> 'QCameraFocus.FocusModes': ... + def __iand__(self, f: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> 'QCameraFocus.FocusModes': ... + def __and__(self, f: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> 'QCameraFocus.FocusModes': ... + def __invert__(self) -> 'QCameraFocus.FocusModes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + maximumDigitalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + maximumOpticalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + focusZonesChanged: typing.ClassVar[QtCore.pyqtSignal] + digitalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + opticalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + def zoomTo(self, opticalZoom: float, digitalZoom: float) -> None: ... + def digitalZoom(self) -> float: ... + def opticalZoom(self) -> float: ... + def maximumDigitalZoom(self) -> float: ... + def maximumOpticalZoom(self) -> float: ... + def focusZones(self) -> typing.List[QCameraFocusZone]: ... + def setCustomFocusPoint(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def customFocusPoint(self) -> QtCore.QPointF: ... + def isFocusPointModeSupported(self, a0: 'QCameraFocus.FocusPointMode') -> bool: ... + def setFocusPointMode(self, mode: 'QCameraFocus.FocusPointMode') -> None: ... + def focusPointMode(self) -> 'QCameraFocus.FocusPointMode': ... + def isFocusModeSupported(self, mode: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> bool: ... + def setFocusMode(self, mode: typing.Union['QCameraFocus.FocusModes', 'QCameraFocus.FocusMode']) -> None: ... + def focusMode(self) -> 'QCameraFocus.FocusModes': ... + def isAvailable(self) -> bool: ... + + +class QCameraFocusControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + focusZonesChanged: typing.ClassVar[QtCore.pyqtSignal] + customFocusPointChanged: typing.ClassVar[QtCore.pyqtSignal] + focusPointModeChanged: typing.ClassVar[QtCore.pyqtSignal] + focusModeChanged: typing.ClassVar[QtCore.pyqtSignal] + def focusZones(self) -> typing.List[QCameraFocusZone]: ... + def setCustomFocusPoint(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def customFocusPoint(self) -> QtCore.QPointF: ... + def isFocusPointModeSupported(self, mode: QCameraFocus.FocusPointMode) -> bool: ... + def setFocusPointMode(self, mode: QCameraFocus.FocusPointMode) -> None: ... + def focusPointMode(self) -> QCameraFocus.FocusPointMode: ... + def isFocusModeSupported(self, mode: typing.Union[QCameraFocus.FocusModes, QCameraFocus.FocusMode]) -> bool: ... + def setFocusMode(self, mode: typing.Union[QCameraFocus.FocusModes, QCameraFocus.FocusMode]) -> None: ... + def focusMode(self) -> QCameraFocus.FocusModes: ... + + +class QCameraImageCapture(QtCore.QObject, QMediaBindableInterface): + + class CaptureDestination(int): + CaptureToFile = ... # type: QCameraImageCapture.CaptureDestination + CaptureToBuffer = ... # type: QCameraImageCapture.CaptureDestination + + class DriveMode(int): + SingleImageCapture = ... # type: QCameraImageCapture.DriveMode + + class Error(int): + NoError = ... # type: QCameraImageCapture.Error + NotReadyError = ... # type: QCameraImageCapture.Error + ResourceError = ... # type: QCameraImageCapture.Error + OutOfSpaceError = ... # type: QCameraImageCapture.Error + NotSupportedFeatureError = ... # type: QCameraImageCapture.Error + FormatError = ... # type: QCameraImageCapture.Error + + class CaptureDestinations(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> 'QCameraImageCapture.CaptureDestinations': ... + def __xor__(self, f: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> 'QCameraImageCapture.CaptureDestinations': ... + def __ior__(self, f: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> 'QCameraImageCapture.CaptureDestinations': ... + def __or__(self, f: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> 'QCameraImageCapture.CaptureDestinations': ... + def __iand__(self, f: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> 'QCameraImageCapture.CaptureDestinations': ... + def __and__(self, f: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> 'QCameraImageCapture.CaptureDestinations': ... + def __invert__(self) -> 'QCameraImageCapture.CaptureDestinations': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, mediaObject: typing.Optional[QMediaObject], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setMediaObject(self, a0: typing.Optional[QMediaObject]) -> bool: ... + imageSaved: typing.ClassVar[QtCore.pyqtSignal] + imageAvailable: typing.ClassVar[QtCore.pyqtSignal] + imageMetadataAvailable: typing.ClassVar[QtCore.pyqtSignal] + imageCaptured: typing.ClassVar[QtCore.pyqtSignal] + imageExposed: typing.ClassVar[QtCore.pyqtSignal] + captureDestinationChanged: typing.ClassVar[QtCore.pyqtSignal] + bufferFormatChanged: typing.ClassVar[QtCore.pyqtSignal] + readyForCaptureChanged: typing.ClassVar[QtCore.pyqtSignal] + def cancelCapture(self) -> None: ... + def capture(self, file: typing.Optional[str] = ...) -> int: ... + def setCaptureDestination(self, destination: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> None: ... + def captureDestination(self) -> 'QCameraImageCapture.CaptureDestinations': ... + def isCaptureDestinationSupported(self, destination: typing.Union['QCameraImageCapture.CaptureDestinations', 'QCameraImageCapture.CaptureDestination']) -> bool: ... + def setBufferFormat(self, format: 'QVideoFrame.PixelFormat') -> None: ... + def bufferFormat(self) -> 'QVideoFrame.PixelFormat': ... + def supportedBufferFormats(self) -> typing.List['QVideoFrame.PixelFormat']: ... + def setEncodingSettings(self, settings: 'QImageEncoderSettings') -> None: ... + def encodingSettings(self) -> 'QImageEncoderSettings': ... + def supportedResolutions(self, settings: 'QImageEncoderSettings' = ...) -> typing.Tuple[typing.List[QtCore.QSize], typing.Optional[bool]]: ... + def imageCodecDescription(self, codecName: typing.Optional[str]) -> str: ... + def supportedImageCodecs(self) -> typing.List[str]: ... + def isReadyForCapture(self) -> bool: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def mediaObject(self) -> typing.Optional[QMediaObject]: ... + def availability(self) -> 'QMultimedia.AvailabilityStatus': ... + def isAvailable(self) -> bool: ... + + +class QCameraImageCaptureControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + error: typing.ClassVar[QtCore.pyqtSignal] + imageSaved: typing.ClassVar[QtCore.pyqtSignal] + imageAvailable: typing.ClassVar[QtCore.pyqtSignal] + imageMetadataAvailable: typing.ClassVar[QtCore.pyqtSignal] + imageCaptured: typing.ClassVar[QtCore.pyqtSignal] + imageExposed: typing.ClassVar[QtCore.pyqtSignal] + readyForCaptureChanged: typing.ClassVar[QtCore.pyqtSignal] + def cancelCapture(self) -> None: ... + def capture(self, fileName: typing.Optional[str]) -> int: ... + def setDriveMode(self, mode: QCameraImageCapture.DriveMode) -> None: ... + def driveMode(self) -> QCameraImageCapture.DriveMode: ... + def isReadyForCapture(self) -> bool: ... + + +class QCameraImageProcessing(QtCore.QObject): + + class ColorFilter(int): + ColorFilterNone = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterGrayscale = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterNegative = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterSolarize = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterSepia = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterPosterize = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterWhiteboard = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterBlackboard = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterAqua = ... # type: QCameraImageProcessing.ColorFilter + ColorFilterVendor = ... # type: QCameraImageProcessing.ColorFilter + + class WhiteBalanceMode(int): + WhiteBalanceAuto = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceManual = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceSunlight = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceCloudy = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceShade = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceTungsten = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceFluorescent = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceFlash = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceSunset = ... # type: QCameraImageProcessing.WhiteBalanceMode + WhiteBalanceVendor = ... # type: QCameraImageProcessing.WhiteBalanceMode + + def setBrightness(self, value: float) -> None: ... + def brightness(self) -> float: ... + def isColorFilterSupported(self, filter: 'QCameraImageProcessing.ColorFilter') -> bool: ... + def setColorFilter(self, filter: 'QCameraImageProcessing.ColorFilter') -> None: ... + def colorFilter(self) -> 'QCameraImageProcessing.ColorFilter': ... + def setDenoisingLevel(self, value: float) -> None: ... + def denoisingLevel(self) -> float: ... + def setSharpeningLevel(self, value: float) -> None: ... + def sharpeningLevel(self) -> float: ... + def setSaturation(self, value: float) -> None: ... + def saturation(self) -> float: ... + def setContrast(self, value: float) -> None: ... + def contrast(self) -> float: ... + def setManualWhiteBalance(self, colorTemperature: float) -> None: ... + def manualWhiteBalance(self) -> float: ... + def isWhiteBalanceModeSupported(self, mode: 'QCameraImageProcessing.WhiteBalanceMode') -> bool: ... + def setWhiteBalanceMode(self, mode: 'QCameraImageProcessing.WhiteBalanceMode') -> None: ... + def whiteBalanceMode(self) -> 'QCameraImageProcessing.WhiteBalanceMode': ... + def isAvailable(self) -> bool: ... + + +class QCameraImageProcessingControl(QMediaControl): + + class ProcessingParameter(int): + WhiteBalancePreset = ... # type: QCameraImageProcessingControl.ProcessingParameter + ColorTemperature = ... # type: QCameraImageProcessingControl.ProcessingParameter + Contrast = ... # type: QCameraImageProcessingControl.ProcessingParameter + Saturation = ... # type: QCameraImageProcessingControl.ProcessingParameter + Brightness = ... # type: QCameraImageProcessingControl.ProcessingParameter + Sharpening = ... # type: QCameraImageProcessingControl.ProcessingParameter + Denoising = ... # type: QCameraImageProcessingControl.ProcessingParameter + ContrastAdjustment = ... # type: QCameraImageProcessingControl.ProcessingParameter + SaturationAdjustment = ... # type: QCameraImageProcessingControl.ProcessingParameter + BrightnessAdjustment = ... # type: QCameraImageProcessingControl.ProcessingParameter + SharpeningAdjustment = ... # type: QCameraImageProcessingControl.ProcessingParameter + DenoisingAdjustment = ... # type: QCameraImageProcessingControl.ProcessingParameter + ColorFilter = ... # type: QCameraImageProcessingControl.ProcessingParameter + ExtendedParameter = ... # type: QCameraImageProcessingControl.ProcessingParameter + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setParameter(self, parameter: 'QCameraImageProcessingControl.ProcessingParameter', value: typing.Any) -> None: ... + def parameter(self, parameter: 'QCameraImageProcessingControl.ProcessingParameter') -> typing.Any: ... + def isParameterValueSupported(self, parameter: 'QCameraImageProcessingControl.ProcessingParameter', value: typing.Any) -> bool: ... + def isParameterSupported(self, a0: 'QCameraImageProcessingControl.ProcessingParameter') -> bool: ... + + +class QCameraInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + @typing.overload + def __init__(self, camera: QCamera) -> None: ... + @typing.overload + def __init__(self, other: 'QCameraInfo') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @staticmethod + def availableCameras(position: QCamera.Position = ...) -> typing.List['QCameraInfo']: ... + @staticmethod + def defaultCamera() -> 'QCameraInfo': ... + def orientation(self) -> int: ... + def position(self) -> QCamera.Position: ... + def description(self) -> str: ... + def deviceName(self) -> str: ... + def isNull(self) -> bool: ... + + +class QCameraInfoControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def cameraOrientation(self, deviceName: typing.Optional[str]) -> int: ... + def cameraPosition(self, deviceName: typing.Optional[str]) -> QCamera.Position: ... + + +class QCameraLocksControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + lockStatusChanged: typing.ClassVar[QtCore.pyqtSignal] + def unlock(self, locks: typing.Union[QCamera.LockTypes, QCamera.LockType]) -> None: ... + def searchAndLock(self, locks: typing.Union[QCamera.LockTypes, QCamera.LockType]) -> None: ... + def lockStatus(self, lock: QCamera.LockType) -> QCamera.LockStatus: ... + def supportedLocks(self) -> QCamera.LockTypes: ... + + +class QCameraViewfinderSettings(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QCameraViewfinderSettings') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + @typing.overload + def setPixelAspectRatio(self, ratio: QtCore.QSize) -> None: ... + @typing.overload + def setPixelAspectRatio(self, horizontal: int, vertical: int) -> None: ... + def pixelAspectRatio(self) -> QtCore.QSize: ... + def setPixelFormat(self, format: 'QVideoFrame.PixelFormat') -> None: ... + def pixelFormat(self) -> 'QVideoFrame.PixelFormat': ... + def setMaximumFrameRate(self, rate: float) -> None: ... + def maximumFrameRate(self) -> float: ... + def setMinimumFrameRate(self, rate: float) -> None: ... + def minimumFrameRate(self) -> float: ... + @typing.overload + def setResolution(self, a0: QtCore.QSize) -> None: ... + @typing.overload + def setResolution(self, width: int, height: int) -> None: ... + def resolution(self) -> QtCore.QSize: ... + def isNull(self) -> bool: ... + def swap(self, other: 'QCameraViewfinderSettings') -> None: ... + + +class QCameraViewfinderSettingsControl(QMediaControl): + + class ViewfinderParameter(int): + Resolution = ... # type: QCameraViewfinderSettingsControl.ViewfinderParameter + PixelAspectRatio = ... # type: QCameraViewfinderSettingsControl.ViewfinderParameter + MinimumFrameRate = ... # type: QCameraViewfinderSettingsControl.ViewfinderParameter + MaximumFrameRate = ... # type: QCameraViewfinderSettingsControl.ViewfinderParameter + PixelFormat = ... # type: QCameraViewfinderSettingsControl.ViewfinderParameter + UserParameter = ... # type: QCameraViewfinderSettingsControl.ViewfinderParameter + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setViewfinderParameter(self, parameter: 'QCameraViewfinderSettingsControl.ViewfinderParameter', value: typing.Any) -> None: ... + def viewfinderParameter(self, parameter: 'QCameraViewfinderSettingsControl.ViewfinderParameter') -> typing.Any: ... + def isViewfinderParameterSupported(self, parameter: 'QCameraViewfinderSettingsControl.ViewfinderParameter') -> bool: ... + + +class QCameraViewfinderSettingsControl2(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setViewfinderSettings(self, settings: QCameraViewfinderSettings) -> None: ... + def viewfinderSettings(self) -> QCameraViewfinderSettings: ... + def supportedViewfinderSettings(self) -> typing.List[QCameraViewfinderSettings]: ... + + +class QCameraZoomControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + currentDigitalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + currentOpticalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + requestedDigitalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + requestedOpticalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + maximumDigitalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + maximumOpticalZoomChanged: typing.ClassVar[QtCore.pyqtSignal] + def zoomTo(self, optical: float, digital: float) -> None: ... + def currentDigitalZoom(self) -> float: ... + def currentOpticalZoom(self) -> float: ... + def requestedDigitalZoom(self) -> float: ... + def requestedOpticalZoom(self) -> float: ... + def maximumDigitalZoom(self) -> float: ... + def maximumOpticalZoom(self) -> float: ... + + +class QCustomAudioRoleControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + customAudioRoleChanged: typing.ClassVar[QtCore.pyqtSignal] + def supportedCustomAudioRoles(self) -> typing.List[str]: ... + def setCustomAudioRole(self, role: typing.Optional[str]) -> None: ... + def customAudioRole(self) -> str: ... + + +class QImageEncoderControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setImageSettings(self, settings: 'QImageEncoderSettings') -> None: ... + def imageSettings(self) -> 'QImageEncoderSettings': ... + def supportedResolutions(self, settings: 'QImageEncoderSettings') -> typing.Tuple[typing.List[QtCore.QSize], typing.Optional[bool]]: ... + def imageCodecDescription(self, codec: typing.Optional[str]) -> str: ... + def supportedImageCodecs(self) -> typing.List[str]: ... + + +class QMediaAudioProbeControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + flush: typing.ClassVar[QtCore.pyqtSignal] + audioBufferProbed: typing.ClassVar[QtCore.pyqtSignal] + + +class QMediaAvailabilityControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + availabilityChanged: typing.ClassVar[QtCore.pyqtSignal] + def availability(self) -> 'QMultimedia.AvailabilityStatus': ... + + +class QMediaContainerControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def containerDescription(self, formatMimeType: typing.Optional[str]) -> str: ... + def setContainerFormat(self, format: typing.Optional[str]) -> None: ... + def containerFormat(self) -> str: ... + def supportedContainers(self) -> typing.List[str]: ... + + +class QMediaContent(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, contentUrl: QtCore.QUrl) -> None: ... + @typing.overload + def __init__(self, contentRequest: QtNetwork.QNetworkRequest) -> None: ... + @typing.overload + def __init__(self, contentResource: 'QMediaResource') -> None: ... + @typing.overload + def __init__(self, resources: typing.Iterable['QMediaResource']) -> None: ... + @typing.overload + def __init__(self, other: 'QMediaContent') -> None: ... + @typing.overload + def __init__(self, playlist: typing.Optional['QMediaPlaylist'], contentUrl: QtCore.QUrl = ...) -> None: ... + + def request(self) -> QtNetwork.QNetworkRequest: ... + def playlist(self) -> typing.Optional['QMediaPlaylist']: ... + def resources(self) -> typing.List['QMediaResource']: ... + def canonicalResource(self) -> 'QMediaResource': ... + def canonicalRequest(self) -> QtNetwork.QNetworkRequest: ... + def canonicalUrl(self) -> QtCore.QUrl: ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QAudioEncoderSettings(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QAudioEncoderSettings') -> None: ... + + def setEncodingOptions(self, options: typing.Dict[str, typing.Any]) -> None: ... + def setEncodingOption(self, option: typing.Optional[str], value: typing.Any) -> None: ... + def encodingOptions(self) -> typing.Dict[str, typing.Any]: ... + def encodingOption(self, option: typing.Optional[str]) -> typing.Any: ... + def setQuality(self, quality: 'QMultimedia.EncodingQuality') -> None: ... + def quality(self) -> 'QMultimedia.EncodingQuality': ... + def setSampleRate(self, rate: int) -> None: ... + def sampleRate(self) -> int: ... + def setChannelCount(self, channels: int) -> None: ... + def channelCount(self) -> int: ... + def setBitRate(self, bitrate: int) -> None: ... + def bitRate(self) -> int: ... + def setCodec(self, codec: typing.Optional[str]) -> None: ... + def codec(self) -> str: ... + def setEncodingMode(self, a0: 'QMultimedia.EncodingMode') -> None: ... + def encodingMode(self) -> 'QMultimedia.EncodingMode': ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QVideoEncoderSettings(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QVideoEncoderSettings') -> None: ... + + def setEncodingOptions(self, options: typing.Dict[str, typing.Any]) -> None: ... + def setEncodingOption(self, option: typing.Optional[str], value: typing.Any) -> None: ... + def encodingOptions(self) -> typing.Dict[str, typing.Any]: ... + def encodingOption(self, option: typing.Optional[str]) -> typing.Any: ... + def setQuality(self, quality: 'QMultimedia.EncodingQuality') -> None: ... + def quality(self) -> 'QMultimedia.EncodingQuality': ... + def setBitRate(self, bitrate: int) -> None: ... + def bitRate(self) -> int: ... + def setFrameRate(self, rate: float) -> None: ... + def frameRate(self) -> float: ... + @typing.overload + def setResolution(self, a0: QtCore.QSize) -> None: ... + @typing.overload + def setResolution(self, width: int, height: int) -> None: ... + def resolution(self) -> QtCore.QSize: ... + def setCodec(self, a0: typing.Optional[str]) -> None: ... + def codec(self) -> str: ... + def setEncodingMode(self, a0: 'QMultimedia.EncodingMode') -> None: ... + def encodingMode(self) -> 'QMultimedia.EncodingMode': ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QImageEncoderSettings(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QImageEncoderSettings') -> None: ... + + def setEncodingOptions(self, options: typing.Dict[str, typing.Any]) -> None: ... + def setEncodingOption(self, option: typing.Optional[str], value: typing.Any) -> None: ... + def encodingOptions(self) -> typing.Dict[str, typing.Any]: ... + def encodingOption(self, option: typing.Optional[str]) -> typing.Any: ... + def setQuality(self, quality: 'QMultimedia.EncodingQuality') -> None: ... + def quality(self) -> 'QMultimedia.EncodingQuality': ... + @typing.overload + def setResolution(self, a0: QtCore.QSize) -> None: ... + @typing.overload + def setResolution(self, width: int, height: int) -> None: ... + def resolution(self) -> QtCore.QSize: ... + def setCodec(self, a0: typing.Optional[str]) -> None: ... + def codec(self) -> str: ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QMediaGaplessPlaybackControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + advancedToNextMedia: typing.ClassVar[QtCore.pyqtSignal] + nextMediaChanged: typing.ClassVar[QtCore.pyqtSignal] + crossfadeTimeChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCrossfadeTime(self, crossfadeTime: float) -> None: ... + def crossfadeTime(self) -> float: ... + def isCrossfadeSupported(self) -> bool: ... + def setNextMedia(self, media: QMediaContent) -> None: ... + def nextMedia(self) -> QMediaContent: ... + + +class QMediaMetaData(PyQt5.sip.simplewrapper): + + AlbumArtist = ... # type: typing.Optional[str] + AlbumTitle = ... # type: typing.Optional[str] + AudioBitRate = ... # type: typing.Optional[str] + AudioCodec = ... # type: typing.Optional[str] + Author = ... # type: typing.Optional[str] + AverageLevel = ... # type: typing.Optional[str] + CameraManufacturer = ... # type: typing.Optional[str] + CameraModel = ... # type: typing.Optional[str] + Category = ... # type: typing.Optional[str] + ChannelCount = ... # type: typing.Optional[str] + ChapterNumber = ... # type: typing.Optional[str] + Comment = ... # type: typing.Optional[str] + Composer = ... # type: typing.Optional[str] + Conductor = ... # type: typing.Optional[str] + Contrast = ... # type: typing.Optional[str] + ContributingArtist = ... # type: typing.Optional[str] + Copyright = ... # type: typing.Optional[str] + CoverArtImage = ... # type: typing.Optional[str] + CoverArtUrlLarge = ... # type: typing.Optional[str] + CoverArtUrlSmall = ... # type: typing.Optional[str] + Date = ... # type: typing.Optional[str] + DateTimeDigitized = ... # type: typing.Optional[str] + DateTimeOriginal = ... # type: typing.Optional[str] + Description = ... # type: typing.Optional[str] + DeviceSettingDescription = ... # type: typing.Optional[str] + DigitalZoomRatio = ... # type: typing.Optional[str] + Director = ... # type: typing.Optional[str] + Duration = ... # type: typing.Optional[str] + Event = ... # type: typing.Optional[str] + ExposureBiasValue = ... # type: typing.Optional[str] + ExposureMode = ... # type: typing.Optional[str] + ExposureProgram = ... # type: typing.Optional[str] + ExposureTime = ... # type: typing.Optional[str] + FNumber = ... # type: typing.Optional[str] + Flash = ... # type: typing.Optional[str] + FocalLength = ... # type: typing.Optional[str] + FocalLengthIn35mmFilm = ... # type: typing.Optional[str] + GPSAltitude = ... # type: typing.Optional[str] + GPSAreaInformation = ... # type: typing.Optional[str] + GPSDOP = ... # type: typing.Optional[str] + GPSImgDirection = ... # type: typing.Optional[str] + GPSImgDirectionRef = ... # type: typing.Optional[str] + GPSLatitude = ... # type: typing.Optional[str] + GPSLongitude = ... # type: typing.Optional[str] + GPSMapDatum = ... # type: typing.Optional[str] + GPSProcessingMethod = ... # type: typing.Optional[str] + GPSSatellites = ... # type: typing.Optional[str] + GPSSpeed = ... # type: typing.Optional[str] + GPSStatus = ... # type: typing.Optional[str] + GPSTimeStamp = ... # type: typing.Optional[str] + GPSTrack = ... # type: typing.Optional[str] + GPSTrackRef = ... # type: typing.Optional[str] + GainControl = ... # type: typing.Optional[str] + Genre = ... # type: typing.Optional[str] + ISOSpeedRatings = ... # type: typing.Optional[str] + Keywords = ... # type: typing.Optional[str] + Language = ... # type: typing.Optional[str] + LeadPerformer = ... # type: typing.Optional[str] + LightSource = ... # type: typing.Optional[str] + Lyrics = ... # type: typing.Optional[str] + MediaType = ... # type: typing.Optional[str] + MeteringMode = ... # type: typing.Optional[str] + Mood = ... # type: typing.Optional[str] + Orientation = ... # type: typing.Optional[str] + ParentalRating = ... # type: typing.Optional[str] + PeakValue = ... # type: typing.Optional[str] + PixelAspectRatio = ... # type: typing.Optional[str] + PosterImage = ... # type: typing.Optional[str] + PosterUrl = ... # type: typing.Optional[str] + Publisher = ... # type: typing.Optional[str] + RatingOrganization = ... # type: typing.Optional[str] + Resolution = ... # type: typing.Optional[str] + SampleRate = ... # type: typing.Optional[str] + Saturation = ... # type: typing.Optional[str] + SceneCaptureType = ... # type: typing.Optional[str] + Sharpness = ... # type: typing.Optional[str] + Size = ... # type: typing.Optional[str] + SubTitle = ... # type: typing.Optional[str] + Subject = ... # type: typing.Optional[str] + SubjectDistance = ... # type: typing.Optional[str] + ThumbnailImage = ... # type: typing.Optional[str] + Title = ... # type: typing.Optional[str] + TrackCount = ... # type: typing.Optional[str] + TrackNumber = ... # type: typing.Optional[str] + UserRating = ... # type: typing.Optional[str] + VideoBitRate = ... # type: typing.Optional[str] + VideoCodec = ... # type: typing.Optional[str] + VideoFrameRate = ... # type: typing.Optional[str] + WhiteBalance = ... # type: typing.Optional[str] + Writer = ... # type: typing.Optional[str] + Year = ... # type: typing.Optional[str] + + +class QMediaNetworkAccessControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + configurationChanged: typing.ClassVar[QtCore.pyqtSignal] + def currentConfiguration(self) -> QtNetwork.QNetworkConfiguration: ... + def setConfigurations(self, configuration: typing.Iterable[QtNetwork.QNetworkConfiguration]) -> None: ... + + +class QMediaPlayer(QMediaObject): + + class Error(int): + NoError = ... # type: QMediaPlayer.Error + ResourceError = ... # type: QMediaPlayer.Error + FormatError = ... # type: QMediaPlayer.Error + NetworkError = ... # type: QMediaPlayer.Error + AccessDeniedError = ... # type: QMediaPlayer.Error + ServiceMissingError = ... # type: QMediaPlayer.Error + + class Flag(int): + LowLatency = ... # type: QMediaPlayer.Flag + StreamPlayback = ... # type: QMediaPlayer.Flag + VideoSurface = ... # type: QMediaPlayer.Flag + + class MediaStatus(int): + UnknownMediaStatus = ... # type: QMediaPlayer.MediaStatus + NoMedia = ... # type: QMediaPlayer.MediaStatus + LoadingMedia = ... # type: QMediaPlayer.MediaStatus + LoadedMedia = ... # type: QMediaPlayer.MediaStatus + StalledMedia = ... # type: QMediaPlayer.MediaStatus + BufferingMedia = ... # type: QMediaPlayer.MediaStatus + BufferedMedia = ... # type: QMediaPlayer.MediaStatus + EndOfMedia = ... # type: QMediaPlayer.MediaStatus + InvalidMedia = ... # type: QMediaPlayer.MediaStatus + + class State(int): + StoppedState = ... # type: QMediaPlayer.State + PlayingState = ... # type: QMediaPlayer.State + PausedState = ... # type: QMediaPlayer.State + + class Flags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag']) -> 'QMediaPlayer.Flags': ... + def __xor__(self, f: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag']) -> 'QMediaPlayer.Flags': ... + def __ior__(self, f: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag']) -> 'QMediaPlayer.Flags': ... + def __or__(self, f: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag']) -> 'QMediaPlayer.Flags': ... + def __iand__(self, f: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag']) -> 'QMediaPlayer.Flags': ... + def __and__(self, f: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag']) -> 'QMediaPlayer.Flags': ... + def __invert__(self) -> 'QMediaPlayer.Flags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ..., flags: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag'] = ...) -> None: ... + + customAudioRoleChanged: typing.ClassVar[QtCore.pyqtSignal] + def supportedCustomAudioRoles(self) -> typing.List[str]: ... + def setCustomAudioRole(self, audioRole: typing.Optional[str]) -> None: ... + def customAudioRole(self) -> str: ... + audioRoleChanged: typing.ClassVar[QtCore.pyqtSignal] + def supportedAudioRoles(self) -> typing.List[QAudio.Role]: ... + def setAudioRole(self, audioRole: QAudio.Role) -> None: ... + def audioRole(self) -> QAudio.Role: ... + def unbind(self, a0: typing.Optional[QtCore.QObject]) -> None: ... + def bind(self, a0: typing.Optional[QtCore.QObject]) -> bool: ... + networkConfigurationChanged: typing.ClassVar[QtCore.pyqtSignal] + playbackRateChanged: typing.ClassVar[QtCore.pyqtSignal] + seekableChanged: typing.ClassVar[QtCore.pyqtSignal] + bufferStatusChanged: typing.ClassVar[QtCore.pyqtSignal] + videoAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + audioAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + mutedChanged: typing.ClassVar[QtCore.pyqtSignal] + volumeChanged: typing.ClassVar[QtCore.pyqtSignal] + positionChanged: typing.ClassVar[QtCore.pyqtSignal] + durationChanged: typing.ClassVar[QtCore.pyqtSignal] + mediaStatusChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + currentMediaChanged: typing.ClassVar[QtCore.pyqtSignal] + mediaChanged: typing.ClassVar[QtCore.pyqtSignal] + def setNetworkConfigurations(self, configurations: typing.Iterable[QtNetwork.QNetworkConfiguration]) -> None: ... + def setPlaylist(self, playlist: typing.Optional['QMediaPlaylist']) -> None: ... + def setMedia(self, media: QMediaContent, stream: typing.Optional[QtCore.QIODevice] = ...) -> None: ... + def setPlaybackRate(self, rate: float) -> None: ... + def setMuted(self, muted: bool) -> None: ... + def setVolume(self, volume: int) -> None: ... + def setPosition(self, position: int) -> None: ... + def stop(self) -> None: ... + def pause(self) -> None: ... + def play(self) -> None: ... + def availability(self) -> 'QMultimedia.AvailabilityStatus': ... + def currentNetworkConfiguration(self) -> QtNetwork.QNetworkConfiguration: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def playbackRate(self) -> float: ... + def isSeekable(self) -> bool: ... + def bufferStatus(self) -> int: ... + def isVideoAvailable(self) -> bool: ... + def isAudioAvailable(self) -> bool: ... + def isMuted(self) -> bool: ... + def volume(self) -> int: ... + def position(self) -> int: ... + def duration(self) -> int: ... + def mediaStatus(self) -> 'QMediaPlayer.MediaStatus': ... + def state(self) -> 'QMediaPlayer.State': ... + def currentMedia(self) -> QMediaContent: ... + def playlist(self) -> typing.Optional['QMediaPlaylist']: ... + def mediaStream(self) -> typing.Optional[QtCore.QIODevice]: ... + def media(self) -> QMediaContent: ... + @typing.overload + def setVideoOutput(self, a0: typing.Optional[QVideoWidget]) -> None: ... + @typing.overload + def setVideoOutput(self, a0: typing.Optional[QGraphicsVideoItem]) -> None: ... + @typing.overload + def setVideoOutput(self, surface: typing.Optional[QAbstractVideoSurface]) -> None: ... + @typing.overload + def setVideoOutput(self, surfaces: typing.Iterable[QAbstractVideoSurface]) -> None: ... + @staticmethod + def supportedMimeTypes(flags: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag'] = ...) -> typing.List[str]: ... + @staticmethod + def hasSupport(mimeType: typing.Optional[str], codecs: typing.Iterable[typing.Optional[str]] = ..., flags: typing.Union['QMediaPlayer.Flags', 'QMediaPlayer.Flag'] = ...) -> 'QMultimedia.SupportEstimate': ... + + +class QMediaPlayerControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + error: typing.ClassVar[QtCore.pyqtSignal] + playbackRateChanged: typing.ClassVar[QtCore.pyqtSignal] + availablePlaybackRangesChanged: typing.ClassVar[QtCore.pyqtSignal] + seekableChanged: typing.ClassVar[QtCore.pyqtSignal] + bufferStatusChanged: typing.ClassVar[QtCore.pyqtSignal] + videoAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + audioAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + mutedChanged: typing.ClassVar[QtCore.pyqtSignal] + volumeChanged: typing.ClassVar[QtCore.pyqtSignal] + mediaStatusChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + positionChanged: typing.ClassVar[QtCore.pyqtSignal] + durationChanged: typing.ClassVar[QtCore.pyqtSignal] + mediaChanged: typing.ClassVar[QtCore.pyqtSignal] + def stop(self) -> None: ... + def pause(self) -> None: ... + def play(self) -> None: ... + def setMedia(self, media: QMediaContent, stream: typing.Optional[QtCore.QIODevice]) -> None: ... + def mediaStream(self) -> typing.Optional[QtCore.QIODevice]: ... + def media(self) -> QMediaContent: ... + def setPlaybackRate(self, rate: float) -> None: ... + def playbackRate(self) -> float: ... + def availablePlaybackRanges(self) -> 'QMediaTimeRange': ... + def isSeekable(self) -> bool: ... + def isVideoAvailable(self) -> bool: ... + def isAudioAvailable(self) -> bool: ... + def bufferStatus(self) -> int: ... + def setMuted(self, mute: bool) -> None: ... + def isMuted(self) -> bool: ... + def setVolume(self, volume: int) -> None: ... + def volume(self) -> int: ... + def setPosition(self, position: int) -> None: ... + def position(self) -> int: ... + def duration(self) -> int: ... + def mediaStatus(self) -> QMediaPlayer.MediaStatus: ... + def state(self) -> QMediaPlayer.State: ... + + +class QMediaPlaylist(QtCore.QObject, QMediaBindableInterface): + + class Error(int): + NoError = ... # type: QMediaPlaylist.Error + FormatError = ... # type: QMediaPlaylist.Error + FormatNotSupportedError = ... # type: QMediaPlaylist.Error + NetworkError = ... # type: QMediaPlaylist.Error + AccessDeniedError = ... # type: QMediaPlaylist.Error + + class PlaybackMode(int): + CurrentItemOnce = ... # type: QMediaPlaylist.PlaybackMode + CurrentItemInLoop = ... # type: QMediaPlaylist.PlaybackMode + Sequential = ... # type: QMediaPlaylist.PlaybackMode + Loop = ... # type: QMediaPlaylist.PlaybackMode + Random = ... # type: QMediaPlaylist.PlaybackMode + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setMediaObject(self, object: typing.Optional[QMediaObject]) -> bool: ... + loadFailed: typing.ClassVar[QtCore.pyqtSignal] + loaded: typing.ClassVar[QtCore.pyqtSignal] + mediaChanged: typing.ClassVar[QtCore.pyqtSignal] + mediaRemoved: typing.ClassVar[QtCore.pyqtSignal] + mediaAboutToBeRemoved: typing.ClassVar[QtCore.pyqtSignal] + mediaInserted: typing.ClassVar[QtCore.pyqtSignal] + mediaAboutToBeInserted: typing.ClassVar[QtCore.pyqtSignal] + currentMediaChanged: typing.ClassVar[QtCore.pyqtSignal] + playbackModeChanged: typing.ClassVar[QtCore.pyqtSignal] + currentIndexChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCurrentIndex(self, index: int) -> None: ... + def previous(self) -> None: ... + def next(self) -> None: ... + def shuffle(self) -> None: ... + def moveMedia(self, from_: int, to: int) -> bool: ... + def errorString(self) -> str: ... + def error(self) -> 'QMediaPlaylist.Error': ... + @typing.overload + def save(self, location: QtCore.QUrl, format: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def save(self, device: typing.Optional[QtCore.QIODevice], format: typing.Optional[str]) -> bool: ... + @typing.overload + def load(self, request: QtNetwork.QNetworkRequest, format: typing.Optional[str] = ...) -> None: ... + @typing.overload + def load(self, location: QtCore.QUrl, format: typing.Optional[str] = ...) -> None: ... + @typing.overload + def load(self, device: typing.Optional[QtCore.QIODevice], format: typing.Optional[str] = ...) -> None: ... + def clear(self) -> bool: ... + @typing.overload + def removeMedia(self, pos: int) -> bool: ... + @typing.overload + def removeMedia(self, start: int, end: int) -> bool: ... + @typing.overload + def insertMedia(self, index: int, content: QMediaContent) -> bool: ... + @typing.overload + def insertMedia(self, index: int, items: typing.Iterable[QMediaContent]) -> bool: ... + @typing.overload + def addMedia(self, content: QMediaContent) -> bool: ... + @typing.overload + def addMedia(self, items: typing.Iterable[QMediaContent]) -> bool: ... + def isReadOnly(self) -> bool: ... + def isEmpty(self) -> bool: ... + def mediaCount(self) -> int: ... + def media(self, index: int) -> QMediaContent: ... + def previousIndex(self, steps: int = ...) -> int: ... + def nextIndex(self, steps: int = ...) -> int: ... + def currentMedia(self) -> QMediaContent: ... + def currentIndex(self) -> int: ... + def setPlaybackMode(self, mode: 'QMediaPlaylist.PlaybackMode') -> None: ... + def playbackMode(self) -> 'QMediaPlaylist.PlaybackMode': ... + def mediaObject(self) -> typing.Optional[QMediaObject]: ... + + +class QMediaRecorderControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setVolume(self, volume: float) -> None: ... + def setMuted(self, muted: bool) -> None: ... + def setState(self, state: QMediaRecorder.State) -> None: ... + error: typing.ClassVar[QtCore.pyqtSignal] + actualLocationChanged: typing.ClassVar[QtCore.pyqtSignal] + volumeChanged: typing.ClassVar[QtCore.pyqtSignal] + mutedChanged: typing.ClassVar[QtCore.pyqtSignal] + durationChanged: typing.ClassVar[QtCore.pyqtSignal] + statusChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def applySettings(self) -> None: ... + def volume(self) -> float: ... + def isMuted(self) -> bool: ... + def duration(self) -> int: ... + def status(self) -> QMediaRecorder.Status: ... + def state(self) -> QMediaRecorder.State: ... + def setOutputLocation(self, location: QtCore.QUrl) -> bool: ... + def outputLocation(self) -> QtCore.QUrl: ... + + +class QMediaResource(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, url: QtCore.QUrl, mimeType: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, request: QtNetwork.QNetworkRequest, mimeType: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QMediaResource') -> None: ... + + @typing.overload + def setResolution(self, resolution: QtCore.QSize) -> None: ... + @typing.overload + def setResolution(self, width: int, height: int) -> None: ... + def resolution(self) -> QtCore.QSize: ... + def setVideoBitRate(self, rate: int) -> None: ... + def videoBitRate(self) -> int: ... + def setChannelCount(self, channels: int) -> None: ... + def channelCount(self) -> int: ... + def setSampleRate(self, frequency: int) -> None: ... + def sampleRate(self) -> int: ... + def setAudioBitRate(self, rate: int) -> None: ... + def audioBitRate(self) -> int: ... + def setDataSize(self, size: int) -> None: ... + def dataSize(self) -> int: ... + def setVideoCodec(self, codec: typing.Optional[str]) -> None: ... + def videoCodec(self) -> str: ... + def setAudioCodec(self, codec: typing.Optional[str]) -> None: ... + def audioCodec(self) -> str: ... + def setLanguage(self, language: typing.Optional[str]) -> None: ... + def language(self) -> str: ... + def mimeType(self) -> str: ... + def request(self) -> QtNetwork.QNetworkRequest: ... + def url(self) -> QtCore.QUrl: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isNull(self) -> bool: ... + + +class QMediaService(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + def releaseControl(self, control: typing.Optional[QMediaControl]) -> None: ... + def requestControl(self, name: typing.Optional[str]) -> typing.Optional[QMediaControl]: ... + + +class QMediaStreamsControl(QMediaControl): + + class StreamType(int): + UnknownStream = ... # type: QMediaStreamsControl.StreamType + VideoStream = ... # type: QMediaStreamsControl.StreamType + AudioStream = ... # type: QMediaStreamsControl.StreamType + SubPictureStream = ... # type: QMediaStreamsControl.StreamType + DataStream = ... # type: QMediaStreamsControl.StreamType + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + activeStreamsChanged: typing.ClassVar[QtCore.pyqtSignal] + streamsChanged: typing.ClassVar[QtCore.pyqtSignal] + def setActive(self, streamNumber: int, state: bool) -> None: ... + def isActive(self, streamNumber: int) -> bool: ... + def metaData(self, streamNumber: int, key: typing.Optional[str]) -> typing.Any: ... + def streamType(self, streamNumber: int) -> 'QMediaStreamsControl.StreamType': ... + def streamCount(self) -> int: ... + + +class QMediaTimeInterval(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, start: int, end: int) -> None: ... + @typing.overload + def __init__(self, a0: 'QMediaTimeInterval') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def translated(self, offset: int) -> 'QMediaTimeInterval': ... + def normalized(self) -> 'QMediaTimeInterval': ... + def isNormal(self) -> bool: ... + def contains(self, time: int) -> bool: ... + def end(self) -> int: ... + def start(self) -> int: ... + + +class QMediaTimeRange(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, start: int, end: int) -> None: ... + @typing.overload + def __init__(self, a0: QMediaTimeInterval) -> None: ... + @typing.overload + def __init__(self, range: 'QMediaTimeRange') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __add__(self, a0: 'QMediaTimeRange') -> 'QMediaTimeRange': ... + def __sub__(self, a0: 'QMediaTimeRange') -> 'QMediaTimeRange': ... + def clear(self) -> None: ... + @typing.overload + def __isub__(self, a0: 'QMediaTimeRange') -> 'QMediaTimeRange': ... + @typing.overload + def __isub__(self, a0: QMediaTimeInterval) -> 'QMediaTimeRange': ... + @typing.overload + def __iadd__(self, a0: 'QMediaTimeRange') -> 'QMediaTimeRange': ... + @typing.overload + def __iadd__(self, a0: QMediaTimeInterval) -> 'QMediaTimeRange': ... + def removeTimeRange(self, a0: 'QMediaTimeRange') -> None: ... + @typing.overload + def removeInterval(self, start: int, end: int) -> None: ... + @typing.overload + def removeInterval(self, interval: QMediaTimeInterval) -> None: ... + def addTimeRange(self, a0: 'QMediaTimeRange') -> None: ... + @typing.overload + def addInterval(self, start: int, end: int) -> None: ... + @typing.overload + def addInterval(self, interval: QMediaTimeInterval) -> None: ... + def contains(self, time: int) -> bool: ... + def isContinuous(self) -> bool: ... + def isEmpty(self) -> bool: ... + def intervals(self) -> typing.List[QMediaTimeInterval]: ... + def latestTime(self) -> int: ... + def earliestTime(self) -> int: ... + + +class QMediaVideoProbeControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + flush: typing.ClassVar[QtCore.pyqtSignal] + videoFrameProbed: typing.ClassVar[QtCore.pyqtSignal] + + +class QMetaDataReaderControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + metaDataAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] + def availableMetaData(self) -> typing.List[str]: ... + def metaData(self, key: typing.Optional[str]) -> typing.Any: ... + def isMetaDataAvailable(self) -> bool: ... + + +class QMetaDataWriterControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + metaDataAvailableChanged: typing.ClassVar[QtCore.pyqtSignal] + writableChanged: typing.ClassVar[QtCore.pyqtSignal] + metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] + def availableMetaData(self) -> typing.List[str]: ... + def setMetaData(self, key: typing.Optional[str], value: typing.Any) -> None: ... + def metaData(self, key: typing.Optional[str]) -> typing.Any: ... + def isMetaDataAvailable(self) -> bool: ... + def isWritable(self) -> bool: ... + + +class QMultimedia(PyQt5.sip.simplewrapper): + + class AvailabilityStatus(int): + Available = ... # type: QMultimedia.AvailabilityStatus + ServiceMissing = ... # type: QMultimedia.AvailabilityStatus + Busy = ... # type: QMultimedia.AvailabilityStatus + ResourceError = ... # type: QMultimedia.AvailabilityStatus + + class EncodingMode(int): + ConstantQualityEncoding = ... # type: QMultimedia.EncodingMode + ConstantBitRateEncoding = ... # type: QMultimedia.EncodingMode + AverageBitRateEncoding = ... # type: QMultimedia.EncodingMode + TwoPassEncoding = ... # type: QMultimedia.EncodingMode + + class EncodingQuality(int): + VeryLowQuality = ... # type: QMultimedia.EncodingQuality + LowQuality = ... # type: QMultimedia.EncodingQuality + NormalQuality = ... # type: QMultimedia.EncodingQuality + HighQuality = ... # type: QMultimedia.EncodingQuality + VeryHighQuality = ... # type: QMultimedia.EncodingQuality + + class SupportEstimate(int): + NotSupported = ... # type: QMultimedia.SupportEstimate + MaybeSupported = ... # type: QMultimedia.SupportEstimate + ProbablySupported = ... # type: QMultimedia.SupportEstimate + PreferredService = ... # type: QMultimedia.SupportEstimate + + +class QRadioData(QtCore.QObject, QMediaBindableInterface): + + class ProgramType(int): + Undefined = ... # type: QRadioData.ProgramType + News = ... # type: QRadioData.ProgramType + CurrentAffairs = ... # type: QRadioData.ProgramType + Information = ... # type: QRadioData.ProgramType + Sport = ... # type: QRadioData.ProgramType + Education = ... # type: QRadioData.ProgramType + Drama = ... # type: QRadioData.ProgramType + Culture = ... # type: QRadioData.ProgramType + Science = ... # type: QRadioData.ProgramType + Varied = ... # type: QRadioData.ProgramType + PopMusic = ... # type: QRadioData.ProgramType + RockMusic = ... # type: QRadioData.ProgramType + EasyListening = ... # type: QRadioData.ProgramType + LightClassical = ... # type: QRadioData.ProgramType + SeriousClassical = ... # type: QRadioData.ProgramType + OtherMusic = ... # type: QRadioData.ProgramType + Weather = ... # type: QRadioData.ProgramType + Finance = ... # type: QRadioData.ProgramType + ChildrensProgrammes = ... # type: QRadioData.ProgramType + SocialAffairs = ... # type: QRadioData.ProgramType + Religion = ... # type: QRadioData.ProgramType + PhoneIn = ... # type: QRadioData.ProgramType + Travel = ... # type: QRadioData.ProgramType + Leisure = ... # type: QRadioData.ProgramType + JazzMusic = ... # type: QRadioData.ProgramType + CountryMusic = ... # type: QRadioData.ProgramType + NationalMusic = ... # type: QRadioData.ProgramType + OldiesMusic = ... # type: QRadioData.ProgramType + FolkMusic = ... # type: QRadioData.ProgramType + Documentary = ... # type: QRadioData.ProgramType + AlarmTest = ... # type: QRadioData.ProgramType + Alarm = ... # type: QRadioData.ProgramType + Talk = ... # type: QRadioData.ProgramType + ClassicRock = ... # type: QRadioData.ProgramType + AdultHits = ... # type: QRadioData.ProgramType + SoftRock = ... # type: QRadioData.ProgramType + Top40 = ... # type: QRadioData.ProgramType + Soft = ... # type: QRadioData.ProgramType + Nostalgia = ... # type: QRadioData.ProgramType + Classical = ... # type: QRadioData.ProgramType + RhythmAndBlues = ... # type: QRadioData.ProgramType + SoftRhythmAndBlues = ... # type: QRadioData.ProgramType + Language = ... # type: QRadioData.ProgramType + ReligiousMusic = ... # type: QRadioData.ProgramType + ReligiousTalk = ... # type: QRadioData.ProgramType + Personality = ... # type: QRadioData.ProgramType + Public = ... # type: QRadioData.ProgramType + College = ... # type: QRadioData.ProgramType + + class Error(int): + NoError = ... # type: QRadioData.Error + ResourceError = ... # type: QRadioData.Error + OpenError = ... # type: QRadioData.Error + OutOfRangeError = ... # type: QRadioData.Error + + def __init__(self, mediaObject: typing.Optional[QMediaObject], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setMediaObject(self, a0: typing.Optional[QMediaObject]) -> bool: ... + alternativeFrequenciesEnabledChanged: typing.ClassVar[QtCore.pyqtSignal] + radioTextChanged: typing.ClassVar[QtCore.pyqtSignal] + stationNameChanged: typing.ClassVar[QtCore.pyqtSignal] + programTypeNameChanged: typing.ClassVar[QtCore.pyqtSignal] + programTypeChanged: typing.ClassVar[QtCore.pyqtSignal] + stationIdChanged: typing.ClassVar[QtCore.pyqtSignal] + def setAlternativeFrequenciesEnabled(self, enabled: bool) -> None: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def isAlternativeFrequenciesEnabled(self) -> bool: ... + def radioText(self) -> str: ... + def stationName(self) -> str: ... + def programTypeName(self) -> str: ... + def programType(self) -> 'QRadioData.ProgramType': ... + def stationId(self) -> str: ... + def availability(self) -> QMultimedia.AvailabilityStatus: ... + def mediaObject(self) -> typing.Optional[QMediaObject]: ... + + +class QRadioDataControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + alternativeFrequenciesEnabledChanged: typing.ClassVar[QtCore.pyqtSignal] + radioTextChanged: typing.ClassVar[QtCore.pyqtSignal] + stationNameChanged: typing.ClassVar[QtCore.pyqtSignal] + programTypeNameChanged: typing.ClassVar[QtCore.pyqtSignal] + programTypeChanged: typing.ClassVar[QtCore.pyqtSignal] + stationIdChanged: typing.ClassVar[QtCore.pyqtSignal] + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def isAlternativeFrequenciesEnabled(self) -> bool: ... + def setAlternativeFrequenciesEnabled(self, enabled: bool) -> None: ... + def radioText(self) -> str: ... + def stationName(self) -> str: ... + def programTypeName(self) -> str: ... + def programType(self) -> QRadioData.ProgramType: ... + def stationId(self) -> str: ... + + +class QRadioTuner(QMediaObject): + + class SearchMode(int): + SearchFast = ... # type: QRadioTuner.SearchMode + SearchGetStationId = ... # type: QRadioTuner.SearchMode + + class StereoMode(int): + ForceStereo = ... # type: QRadioTuner.StereoMode + ForceMono = ... # type: QRadioTuner.StereoMode + Auto = ... # type: QRadioTuner.StereoMode + + class Error(int): + NoError = ... # type: QRadioTuner.Error + ResourceError = ... # type: QRadioTuner.Error + OpenError = ... # type: QRadioTuner.Error + OutOfRangeError = ... # type: QRadioTuner.Error + + class Band(int): + AM = ... # type: QRadioTuner.Band + FM = ... # type: QRadioTuner.Band + SW = ... # type: QRadioTuner.Band + LW = ... # type: QRadioTuner.Band + FM2 = ... # type: QRadioTuner.Band + + class State(int): + ActiveState = ... # type: QRadioTuner.State + StoppedState = ... # type: QRadioTuner.State + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + antennaConnectedChanged: typing.ClassVar[QtCore.pyqtSignal] + stationFound: typing.ClassVar[QtCore.pyqtSignal] + mutedChanged: typing.ClassVar[QtCore.pyqtSignal] + volumeChanged: typing.ClassVar[QtCore.pyqtSignal] + signalStrengthChanged: typing.ClassVar[QtCore.pyqtSignal] + searchingChanged: typing.ClassVar[QtCore.pyqtSignal] + stereoStatusChanged: typing.ClassVar[QtCore.pyqtSignal] + frequencyChanged: typing.ClassVar[QtCore.pyqtSignal] + bandChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def stop(self) -> None: ... + def start(self) -> None: ... + def setMuted(self, muted: bool) -> None: ... + def setVolume(self, volume: int) -> None: ... + def setFrequency(self, frequency: int) -> None: ... + def setBand(self, band: 'QRadioTuner.Band') -> None: ... + def cancelSearch(self) -> None: ... + def searchAllStations(self, searchMode: 'QRadioTuner.SearchMode' = ...) -> None: ... + def searchBackward(self) -> None: ... + def searchForward(self) -> None: ... + def radioData(self) -> typing.Optional[QRadioData]: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def isAntennaConnected(self) -> bool: ... + def isSearching(self) -> bool: ... + def isMuted(self) -> bool: ... + def volume(self) -> int: ... + def signalStrength(self) -> int: ... + def stereoMode(self) -> 'QRadioTuner.StereoMode': ... + def setStereoMode(self, mode: 'QRadioTuner.StereoMode') -> None: ... + def isStereo(self) -> bool: ... + def frequencyRange(self, band: 'QRadioTuner.Band') -> typing.Tuple[int, int]: ... + def frequencyStep(self, band: 'QRadioTuner.Band') -> int: ... + def frequency(self) -> int: ... + def isBandSupported(self, b: 'QRadioTuner.Band') -> bool: ... + def band(self) -> 'QRadioTuner.Band': ... + def state(self) -> 'QRadioTuner.State': ... + def availability(self) -> QMultimedia.AvailabilityStatus: ... + + +class QRadioTunerControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + antennaConnectedChanged: typing.ClassVar[QtCore.pyqtSignal] + stationFound: typing.ClassVar[QtCore.pyqtSignal] + mutedChanged: typing.ClassVar[QtCore.pyqtSignal] + volumeChanged: typing.ClassVar[QtCore.pyqtSignal] + signalStrengthChanged: typing.ClassVar[QtCore.pyqtSignal] + searchingChanged: typing.ClassVar[QtCore.pyqtSignal] + stereoStatusChanged: typing.ClassVar[QtCore.pyqtSignal] + frequencyChanged: typing.ClassVar[QtCore.pyqtSignal] + bandChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def stop(self) -> None: ... + def start(self) -> None: ... + def cancelSearch(self) -> None: ... + def searchAllStations(self, searchMode: QRadioTuner.SearchMode = ...) -> None: ... + def searchBackward(self) -> None: ... + def searchForward(self) -> None: ... + def isAntennaConnected(self) -> bool: ... + def isSearching(self) -> bool: ... + def setMuted(self, muted: bool) -> None: ... + def isMuted(self) -> bool: ... + def setVolume(self, volume: int) -> None: ... + def volume(self) -> int: ... + def signalStrength(self) -> int: ... + def setStereoMode(self, mode: QRadioTuner.StereoMode) -> None: ... + def stereoMode(self) -> QRadioTuner.StereoMode: ... + def isStereo(self) -> bool: ... + def setFrequency(self, frequency: int) -> None: ... + def frequencyRange(self, b: QRadioTuner.Band) -> typing.Tuple[int, int]: ... + def frequencyStep(self, b: QRadioTuner.Band) -> int: ... + def frequency(self) -> int: ... + def isBandSupported(self, b: QRadioTuner.Band) -> bool: ... + def setBand(self, b: QRadioTuner.Band) -> None: ... + def band(self) -> QRadioTuner.Band: ... + def state(self) -> QRadioTuner.State: ... + + +class QSound(QtCore.QObject): + + class Loop(int): + Infinite = ... # type: QSound.Loop + + def __init__(self, filename: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def stop(self) -> None: ... + def isFinished(self) -> bool: ... + def fileName(self) -> str: ... + def setLoops(self, a0: int) -> None: ... + def loopsRemaining(self) -> int: ... + def loops(self) -> int: ... + @typing.overload + @staticmethod + def play(filename: typing.Optional[str]) -> None: ... + @typing.overload + def play(self) -> None: ... + + +class QSoundEffect(QtCore.QObject): + + class Status(int): + Null = ... # type: QSoundEffect.Status + Loading = ... # type: QSoundEffect.Status + Ready = ... # type: QSoundEffect.Status + Error = ... # type: QSoundEffect.Status + + class Loop(int): + Infinite = ... # type: QSoundEffect.Loop + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, audioDevice: QAudioDeviceInfo, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def stop(self) -> None: ... + def play(self) -> None: ... + categoryChanged: typing.ClassVar[QtCore.pyqtSignal] + statusChanged: typing.ClassVar[QtCore.pyqtSignal] + playingChanged: typing.ClassVar[QtCore.pyqtSignal] + loadedChanged: typing.ClassVar[QtCore.pyqtSignal] + mutedChanged: typing.ClassVar[QtCore.pyqtSignal] + volumeChanged: typing.ClassVar[QtCore.pyqtSignal] + loopsRemainingChanged: typing.ClassVar[QtCore.pyqtSignal] + loopCountChanged: typing.ClassVar[QtCore.pyqtSignal] + sourceChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCategory(self, category: typing.Optional[str]) -> None: ... + def category(self) -> str: ... + def status(self) -> 'QSoundEffect.Status': ... + def isPlaying(self) -> bool: ... + def isLoaded(self) -> bool: ... + def setMuted(self, muted: bool) -> None: ... + def isMuted(self) -> bool: ... + def setVolume(self, volume: float) -> None: ... + def volume(self) -> float: ... + def setLoopCount(self, loopCount: int) -> None: ... + def loopsRemaining(self) -> int: ... + def loopCount(self) -> int: ... + def setSource(self, url: QtCore.QUrl) -> None: ... + def source(self) -> QtCore.QUrl: ... + @staticmethod + def supportedMimeTypes() -> typing.List[str]: ... + + +class QVideoDeviceSelectorControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + devicesChanged: typing.ClassVar[QtCore.pyqtSignal] + selectedDeviceChanged: typing.ClassVar[QtCore.pyqtSignal] + def setSelectedDevice(self, index: int) -> None: ... + def selectedDevice(self) -> int: ... + def defaultDevice(self) -> int: ... + def deviceDescription(self, index: int) -> str: ... + def deviceName(self, index: int) -> str: ... + def deviceCount(self) -> int: ... + + +class QVideoEncoderSettingsControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setVideoSettings(self, settings: QVideoEncoderSettings) -> None: ... + def videoSettings(self) -> QVideoEncoderSettings: ... + def videoCodecDescription(self, codec: typing.Optional[str]) -> str: ... + def supportedVideoCodecs(self) -> typing.List[str]: ... + def supportedFrameRates(self, settings: QVideoEncoderSettings) -> typing.Tuple[typing.List[float], typing.Optional[bool]]: ... + def supportedResolutions(self, settings: QVideoEncoderSettings) -> typing.Tuple[typing.List[QtCore.QSize], typing.Optional[bool]]: ... + + +class QVideoFrame(PyQt5.sipsimplewrapper): + + class PixelFormat(int): + Format_Invalid = ... # type: QVideoFrame.PixelFormat + Format_ARGB32 = ... # type: QVideoFrame.PixelFormat + Format_ARGB32_Premultiplied = ... # type: QVideoFrame.PixelFormat + Format_RGB32 = ... # type: QVideoFrame.PixelFormat + Format_RGB24 = ... # type: QVideoFrame.PixelFormat + Format_RGB565 = ... # type: QVideoFrame.PixelFormat + Format_RGB555 = ... # type: QVideoFrame.PixelFormat + Format_ARGB8565_Premultiplied = ... # type: QVideoFrame.PixelFormat + Format_BGRA32 = ... # type: QVideoFrame.PixelFormat + Format_BGRA32_Premultiplied = ... # type: QVideoFrame.PixelFormat + Format_BGR32 = ... # type: QVideoFrame.PixelFormat + Format_BGR24 = ... # type: QVideoFrame.PixelFormat + Format_BGR565 = ... # type: QVideoFrame.PixelFormat + Format_BGR555 = ... # type: QVideoFrame.PixelFormat + Format_BGRA5658_Premultiplied = ... # type: QVideoFrame.PixelFormat + Format_AYUV444 = ... # type: QVideoFrame.PixelFormat + Format_AYUV444_Premultiplied = ... # type: QVideoFrame.PixelFormat + Format_YUV444 = ... # type: QVideoFrame.PixelFormat + Format_YUV420P = ... # type: QVideoFrame.PixelFormat + Format_YV12 = ... # type: QVideoFrame.PixelFormat + Format_UYVY = ... # type: QVideoFrame.PixelFormat + Format_YUYV = ... # type: QVideoFrame.PixelFormat + Format_NV12 = ... # type: QVideoFrame.PixelFormat + Format_NV21 = ... # type: QVideoFrame.PixelFormat + Format_IMC1 = ... # type: QVideoFrame.PixelFormat + Format_IMC2 = ... # type: QVideoFrame.PixelFormat + Format_IMC3 = ... # type: QVideoFrame.PixelFormat + Format_IMC4 = ... # type: QVideoFrame.PixelFormat + Format_Y8 = ... # type: QVideoFrame.PixelFormat + Format_Y16 = ... # type: QVideoFrame.PixelFormat + Format_Jpeg = ... # type: QVideoFrame.PixelFormat + Format_CameraRaw = ... # type: QVideoFrame.PixelFormat + Format_AdobeDng = ... # type: QVideoFrame.PixelFormat + Format_ABGR32 = ... # type: QVideoFrame.PixelFormat + Format_YUV422P = ... # type: QVideoFrame.PixelFormat + Format_User = ... # type: QVideoFrame.PixelFormat + + class FieldType(int): + ProgressiveFrame = ... # type: QVideoFrame.FieldType + TopField = ... # type: QVideoFrame.FieldType + BottomField = ... # type: QVideoFrame.FieldType + InterlacedFrame = ... # type: QVideoFrame.FieldType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, buffer: typing.Optional[QAbstractVideoBuffer], size: QtCore.QSize, format: 'QVideoFrame.PixelFormat') -> None: ... + @typing.overload + def __init__(self, bytes: int, size: QtCore.QSize, bytesPerLine: int, format: 'QVideoFrame.PixelFormat') -> None: ... + @typing.overload + def __init__(self, image: QtGui.QImage) -> None: ... + @typing.overload + def __init__(self, other: 'QVideoFrame') -> None: ... + + def image(self) -> QtGui.QImage: ... + def buffer(self) -> typing.Optional[QAbstractVideoBuffer]: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def planeCount(self) -> int: ... + def setMetaData(self, key: typing.Optional[str], value: typing.Any) -> None: ... + def metaData(self, key: typing.Optional[str]) -> typing.Any: ... + def availableMetaData(self) -> typing.Dict[str, typing.Any]: ... + @staticmethod + def imageFormatFromPixelFormat(format: 'QVideoFrame.PixelFormat') -> QtGui.QImage.Format: ... + @staticmethod + def pixelFormatFromImageFormat(format: QtGui.QImage.Format) -> 'QVideoFrame.PixelFormat': ... + def setEndTime(self, time: int) -> None: ... + def endTime(self) -> int: ... + def setStartTime(self, time: int) -> None: ... + def startTime(self) -> int: ... + def handle(self) -> typing.Any: ... + def mappedBytes(self) -> int: ... + @typing.overload + def bits(self) -> PyQt5.sip.voidptr: ... + @typing.overload + def bits(self, plane: int) -> typing.Optional[PyQt5.sip.voidptr]: ... + @typing.overload + def bytesPerLine(self) -> int: ... + @typing.overload + def bytesPerLine(self, plane: int) -> int: ... + def unmap(self) -> None: ... + def map(self, mode: QAbstractVideoBuffer.MapMode) -> bool: ... + def mapMode(self) -> QAbstractVideoBuffer.MapMode: ... + def isWritable(self) -> bool: ... + def isReadable(self) -> bool: ... + def isMapped(self) -> bool: ... + def setFieldType(self, a0: 'QVideoFrame.FieldType') -> None: ... + def fieldType(self) -> 'QVideoFrame.FieldType': ... + def height(self) -> int: ... + def width(self) -> int: ... + def size(self) -> QtCore.QSize: ... + def handleType(self) -> QAbstractVideoBuffer.HandleType: ... + def pixelFormat(self) -> 'QVideoFrame.PixelFormat': ... + def isValid(self) -> bool: ... + + +class QVideoProbe(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + flush: typing.ClassVar[QtCore.pyqtSignal] + videoFrameProbed: typing.ClassVar[QtCore.pyqtSignal] + def isActive(self) -> bool: ... + @typing.overload + def setSource(self, source: typing.Optional[QMediaObject]) -> bool: ... + @typing.overload + def setSource(self, source: typing.Optional[QMediaRecorder]) -> bool: ... + + +class QVideoRendererControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setSurface(self, surface: typing.Optional[QAbstractVideoSurface]) -> None: ... + def surface(self) -> typing.Optional[QAbstractVideoSurface]: ... + + +class QVideoSurfaceFormat(PyQt5.sipsimplewrapper): + + class YCbCrColorSpace(int): + YCbCr_Undefined = ... # type: QVideoSurfaceFormat.YCbCrColorSpace + YCbCr_BT601 = ... # type: QVideoSurfaceFormat.YCbCrColorSpace + YCbCr_BT709 = ... # type: QVideoSurfaceFormat.YCbCrColorSpace + YCbCr_xvYCC601 = ... # type: QVideoSurfaceFormat.YCbCrColorSpace + YCbCr_xvYCC709 = ... # type: QVideoSurfaceFormat.YCbCrColorSpace + YCbCr_JPEG = ... # type: QVideoSurfaceFormat.YCbCrColorSpace + + class Direction(int): + TopToBottom = ... # type: QVideoSurfaceFormat.Direction + BottomToTop = ... # type: QVideoSurfaceFormat.Direction + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, size: QtCore.QSize, format: QVideoFrame.PixelFormat, type: QAbstractVideoBuffer.HandleType = ...) -> None: ... + @typing.overload + def __init__(self, format: 'QVideoSurfaceFormat') -> None: ... + + def setMirrored(self, mirrored: bool) -> None: ... + def isMirrored(self) -> bool: ... + def setProperty(self, name: typing.Optional[str], value: typing.Any) -> None: ... + def property(self, name: typing.Optional[str]) -> typing.Any: ... + def propertyNames(self) -> typing.List[QtCore.QByteArray]: ... + def sizeHint(self) -> QtCore.QSize: ... + def setYCbCrColorSpace(self, colorSpace: 'QVideoSurfaceFormat.YCbCrColorSpace') -> None: ... + def yCbCrColorSpace(self) -> 'QVideoSurfaceFormat.YCbCrColorSpace': ... + @typing.overload + def setPixelAspectRatio(self, ratio: QtCore.QSize) -> None: ... + @typing.overload + def setPixelAspectRatio(self, width: int, height: int) -> None: ... + def pixelAspectRatio(self) -> QtCore.QSize: ... + def setFrameRate(self, rate: float) -> None: ... + def frameRate(self) -> float: ... + def setScanLineDirection(self, direction: 'QVideoSurfaceFormat.Direction') -> None: ... + def scanLineDirection(self) -> 'QVideoSurfaceFormat.Direction': ... + def setViewport(self, viewport: QtCore.QRect) -> None: ... + def viewport(self) -> QtCore.QRect: ... + def frameHeight(self) -> int: ... + def frameWidth(self) -> int: ... + @typing.overload + def setFrameSize(self, size: QtCore.QSize) -> None: ... + @typing.overload + def setFrameSize(self, width: int, height: int) -> None: ... + def frameSize(self) -> QtCore.QSize: ... + def handleType(self) -> QAbstractVideoBuffer.HandleType: ... + def pixelFormat(self) -> QVideoFrame.PixelFormat: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QVideoWindowControl(QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + nativeSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + saturationChanged: typing.ClassVar[QtCore.pyqtSignal] + hueChanged: typing.ClassVar[QtCore.pyqtSignal] + contrastChanged: typing.ClassVar[QtCore.pyqtSignal] + brightnessChanged: typing.ClassVar[QtCore.pyqtSignal] + fullScreenChanged: typing.ClassVar[QtCore.pyqtSignal] + def setSaturation(self, saturation: int) -> None: ... + def saturation(self) -> int: ... + def setHue(self, hue: int) -> None: ... + def hue(self) -> int: ... + def setContrast(self, contrast: int) -> None: ... + def contrast(self) -> int: ... + def setBrightness(self, brightness: int) -> None: ... + def brightness(self) -> int: ... + def setAspectRatioMode(self, mode: QtCore.Qt.AspectRatioMode) -> None: ... + def aspectRatioMode(self) -> QtCore.Qt.AspectRatioMode: ... + def nativeSize(self) -> QtCore.QSize: ... + def repaint(self) -> None: ... + def setFullScreen(self, fullScreen: bool) -> None: ... + def isFullScreen(self) -> bool: ... + def setDisplayRect(self, rect: QtCore.QRect) -> None: ... + def displayRect(self) -> QtCore.QRect: ... + def setWinId(self, id: PyQt5.sip.voidptr) -> None: ... + def winId(self) -> PyQt5.sip.voidptr: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtMultimediaWidgets.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtMultimediaWidgets.abi3.so new file mode 100644 index 0000000..5c47c78 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtMultimediaWidgets.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtMultimediaWidgets.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtMultimediaWidgets.pyi new file mode 100644 index 0000000..6dc7f3a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtMultimediaWidgets.pyi @@ -0,0 +1,129 @@ +# The PEP 484 type hints stub file for the QtMultimediaWidgets module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtNetwork +from PyQt5 import QtMultimedia +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QVideoWidget(QtWidgets.QWidget, QtMultimedia.QMediaBindableInterface): + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + def videoSurface(self) -> typing.Optional[QtMultimedia.QAbstractVideoSurface]: ... + def setMediaObject(self, object: typing.Optional[QtMultimedia.QMediaObject]) -> bool: ... + def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def moveEvent(self, event: typing.Optional[QtGui.QMoveEvent]) -> None: ... + def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def hideEvent(self, event: typing.Optional[QtGui.QHideEvent]) -> None: ... + def showEvent(self, event: typing.Optional[QtGui.QShowEvent]) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + saturationChanged: typing.ClassVar[QtCore.pyqtSignal] + hueChanged: typing.ClassVar[QtCore.pyqtSignal] + contrastChanged: typing.ClassVar[QtCore.pyqtSignal] + brightnessChanged: typing.ClassVar[QtCore.pyqtSignal] + fullScreenChanged: typing.ClassVar[QtCore.pyqtSignal] + def setSaturation(self, saturation: int) -> None: ... + def setHue(self, hue: int) -> None: ... + def setContrast(self, contrast: int) -> None: ... + def setBrightness(self, brightness: int) -> None: ... + def setAspectRatioMode(self, mode: QtCore.Qt.AspectRatioMode) -> None: ... + def setFullScreen(self, fullScreen: bool) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def saturation(self) -> int: ... + def hue(self) -> int: ... + def contrast(self) -> int: ... + def brightness(self) -> int: ... + def aspectRatioMode(self) -> QtCore.Qt.AspectRatioMode: ... + def mediaObject(self) -> typing.Optional[QtMultimedia.QMediaObject]: ... + + +class QCameraViewfinder(QVideoWidget): + + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + def setMediaObject(self, object: typing.Optional[QtMultimedia.QMediaObject]) -> bool: ... + def mediaObject(self) -> typing.Optional[QtMultimedia.QMediaObject]: ... + + +class QGraphicsVideoItem(QtWidgets.QGraphicsObject, QtMultimedia.QMediaBindableInterface): + + def __init__(self, parent: typing.Optional[QtWidgets.QGraphicsItem] = ...) -> None: ... + + def videoSurface(self) -> typing.Optional[QtMultimedia.QAbstractVideoSurface]: ... + def setMediaObject(self, object: typing.Optional[QtMultimedia.QMediaObject]) -> bool: ... + def itemChange(self, change: QtWidgets.QGraphicsItem.GraphicsItemChange, value: typing.Any) -> typing.Any: ... + def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... + nativeSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional[QtWidgets.QStyleOptionGraphicsItem], widget: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + def boundingRect(self) -> QtCore.QRectF: ... + def nativeSize(self) -> QtCore.QSizeF: ... + def setSize(self, size: QtCore.QSizeF) -> None: ... + def size(self) -> QtCore.QSizeF: ... + def setOffset(self, offset: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def offset(self) -> QtCore.QPointF: ... + def setAspectRatioMode(self, mode: QtCore.Qt.AspectRatioMode) -> None: ... + def aspectRatioMode(self) -> QtCore.Qt.AspectRatioMode: ... + def mediaObject(self) -> typing.Optional[QtMultimedia.QMediaObject]: ... + + +class QVideoWidgetControl(QtMultimedia.QMediaControl): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + saturationChanged: typing.ClassVar[QtCore.pyqtSignal] + hueChanged: typing.ClassVar[QtCore.pyqtSignal] + contrastChanged: typing.ClassVar[QtCore.pyqtSignal] + brightnessChanged: typing.ClassVar[QtCore.pyqtSignal] + fullScreenChanged: typing.ClassVar[QtCore.pyqtSignal] + def setSaturation(self, saturation: int) -> None: ... + def saturation(self) -> int: ... + def setHue(self, hue: int) -> None: ... + def hue(self) -> int: ... + def setContrast(self, contrast: int) -> None: ... + def contrast(self) -> int: ... + def setBrightness(self, brightness: int) -> None: ... + def brightness(self) -> int: ... + def setFullScreen(self, fullScreen: bool) -> None: ... + def isFullScreen(self) -> bool: ... + def setAspectRatioMode(self, mode: QtCore.Qt.AspectRatioMode) -> None: ... + def aspectRatioMode(self) -> QtCore.Qt.AspectRatioMode: ... + def videoWidget(self) -> typing.Optional[QtWidgets.QWidget]: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtNetwork.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtNetwork.abi3.so new file mode 100644 index 0000000..372c683 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtNetwork.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtNetwork.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtNetwork.pyi new file mode 100644 index 0000000..ce0f459 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtNetwork.pyi @@ -0,0 +1,2201 @@ +# The PEP 484 type hints stub file for the QtNetwork module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QOcspRevocationReason(int): + None_ = ... # type: QOcspRevocationReason + Unspecified = ... # type: QOcspRevocationReason + KeyCompromise = ... # type: QOcspRevocationReason + CACompromise = ... # type: QOcspRevocationReason + AffiliationChanged = ... # type: QOcspRevocationReason + Superseded = ... # type: QOcspRevocationReason + CessationOfOperation = ... # type: QOcspRevocationReason + CertificateHold = ... # type: QOcspRevocationReason + RemoveFromCRL = ... # type: QOcspRevocationReason + + +class QOcspCertificateStatus(int): + Good = ... # type: QOcspCertificateStatus + Revoked = ... # type: QOcspCertificateStatus + Unknown = ... # type: QOcspCertificateStatus + + +class QNetworkCacheMetaData(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkCacheMetaData') -> None: ... + + def swap(self, other: 'QNetworkCacheMetaData') -> None: ... + def setAttributes(self, attributes: typing.Dict['QNetworkRequest.Attribute', typing.Any]) -> None: ... + def attributes(self) -> typing.Dict['QNetworkRequest.Attribute', typing.Any]: ... + def setSaveToDisk(self, allow: bool) -> None: ... + def saveToDisk(self) -> bool: ... + def setExpirationDate(self, dateTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def expirationDate(self) -> QtCore.QDateTime: ... + def setLastModified(self, dateTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def lastModified(self) -> QtCore.QDateTime: ... + def setRawHeaders(self, headers: typing.Iterable[typing.Tuple[typing.Union[QtCore.QByteArray, bytes, bytearray], typing.Union[QtCore.QByteArray, bytes, bytearray]]]) -> None: ... + def rawHeaders(self) -> typing.List[typing.Tuple[QtCore.QByteArray, QtCore.QByteArray]]: ... + def setUrl(self, url: QtCore.QUrl) -> None: ... + def url(self) -> QtCore.QUrl: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QAbstractNetworkCache(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def clear(self) -> None: ... + def insert(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + def prepare(self, metaData: QNetworkCacheMetaData) -> typing.Optional[QtCore.QIODevice]: ... + def cacheSize(self) -> int: ... + def remove(self, url: QtCore.QUrl) -> bool: ... + def data(self, url: QtCore.QUrl) -> typing.Optional[QtCore.QIODevice]: ... + def updateMetaData(self, metaData: QNetworkCacheMetaData) -> None: ... + def metaData(self, url: QtCore.QUrl) -> QNetworkCacheMetaData: ... + + +class QAbstractSocket(QtCore.QIODevice): + + class PauseMode(int): + PauseNever = ... # type: QAbstractSocket.PauseMode + PauseOnSslErrors = ... # type: QAbstractSocket.PauseMode + + class BindFlag(int): + DefaultForPlatform = ... # type: QAbstractSocket.BindFlag + ShareAddress = ... # type: QAbstractSocket.BindFlag + DontShareAddress = ... # type: QAbstractSocket.BindFlag + ReuseAddressHint = ... # type: QAbstractSocket.BindFlag + + class SocketOption(int): + LowDelayOption = ... # type: QAbstractSocket.SocketOption + KeepAliveOption = ... # type: QAbstractSocket.SocketOption + MulticastTtlOption = ... # type: QAbstractSocket.SocketOption + MulticastLoopbackOption = ... # type: QAbstractSocket.SocketOption + TypeOfServiceOption = ... # type: QAbstractSocket.SocketOption + SendBufferSizeSocketOption = ... # type: QAbstractSocket.SocketOption + ReceiveBufferSizeSocketOption = ... # type: QAbstractSocket.SocketOption + PathMtuSocketOption = ... # type: QAbstractSocket.SocketOption + + class SocketState(int): + UnconnectedState = ... # type: QAbstractSocket.SocketState + HostLookupState = ... # type: QAbstractSocket.SocketState + ConnectingState = ... # type: QAbstractSocket.SocketState + ConnectedState = ... # type: QAbstractSocket.SocketState + BoundState = ... # type: QAbstractSocket.SocketState + ListeningState = ... # type: QAbstractSocket.SocketState + ClosingState = ... # type: QAbstractSocket.SocketState + + class SocketError(int): + ConnectionRefusedError = ... # type: QAbstractSocket.SocketError + RemoteHostClosedError = ... # type: QAbstractSocket.SocketError + HostNotFoundError = ... # type: QAbstractSocket.SocketError + SocketAccessError = ... # type: QAbstractSocket.SocketError + SocketResourceError = ... # type: QAbstractSocket.SocketError + SocketTimeoutError = ... # type: QAbstractSocket.SocketError + DatagramTooLargeError = ... # type: QAbstractSocket.SocketError + NetworkError = ... # type: QAbstractSocket.SocketError + AddressInUseError = ... # type: QAbstractSocket.SocketError + SocketAddressNotAvailableError = ... # type: QAbstractSocket.SocketError + UnsupportedSocketOperationError = ... # type: QAbstractSocket.SocketError + UnfinishedSocketOperationError = ... # type: QAbstractSocket.SocketError + ProxyAuthenticationRequiredError = ... # type: QAbstractSocket.SocketError + SslHandshakeFailedError = ... # type: QAbstractSocket.SocketError + ProxyConnectionRefusedError = ... # type: QAbstractSocket.SocketError + ProxyConnectionClosedError = ... # type: QAbstractSocket.SocketError + ProxyConnectionTimeoutError = ... # type: QAbstractSocket.SocketError + ProxyNotFoundError = ... # type: QAbstractSocket.SocketError + ProxyProtocolError = ... # type: QAbstractSocket.SocketError + OperationError = ... # type: QAbstractSocket.SocketError + SslInternalError = ... # type: QAbstractSocket.SocketError + SslInvalidUserDataError = ... # type: QAbstractSocket.SocketError + TemporaryError = ... # type: QAbstractSocket.SocketError + UnknownSocketError = ... # type: QAbstractSocket.SocketError + + class NetworkLayerProtocol(int): + IPv4Protocol = ... # type: QAbstractSocket.NetworkLayerProtocol + IPv6Protocol = ... # type: QAbstractSocket.NetworkLayerProtocol + AnyIPProtocol = ... # type: QAbstractSocket.NetworkLayerProtocol + UnknownNetworkLayerProtocol = ... # type: QAbstractSocket.NetworkLayerProtocol + + class SocketType(int): + TcpSocket = ... # type: QAbstractSocket.SocketType + UdpSocket = ... # type: QAbstractSocket.SocketType + SctpSocket = ... # type: QAbstractSocket.SocketType + UnknownSocketType = ... # type: QAbstractSocket.SocketType + + class BindMode(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag']) -> 'QAbstractSocket.BindMode': ... + def __xor__(self, f: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag']) -> 'QAbstractSocket.BindMode': ... + def __ior__(self, f: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag']) -> 'QAbstractSocket.BindMode': ... + def __or__(self, f: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag']) -> 'QAbstractSocket.BindMode': ... + def __iand__(self, f: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag']) -> 'QAbstractSocket.BindMode': ... + def __and__(self, f: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag']) -> 'QAbstractSocket.BindMode': ... + def __invert__(self) -> 'QAbstractSocket.BindMode': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class PauseModes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QAbstractSocket.PauseModes', 'QAbstractSocket.PauseMode']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QAbstractSocket.PauseModes', 'QAbstractSocket.PauseMode']) -> 'QAbstractSocket.PauseModes': ... + def __xor__(self, f: typing.Union['QAbstractSocket.PauseModes', 'QAbstractSocket.PauseMode']) -> 'QAbstractSocket.PauseModes': ... + def __ior__(self, f: typing.Union['QAbstractSocket.PauseModes', 'QAbstractSocket.PauseMode']) -> 'QAbstractSocket.PauseModes': ... + def __or__(self, f: typing.Union['QAbstractSocket.PauseModes', 'QAbstractSocket.PauseMode']) -> 'QAbstractSocket.PauseModes': ... + def __iand__(self, f: typing.Union['QAbstractSocket.PauseModes', 'QAbstractSocket.PauseMode']) -> 'QAbstractSocket.PauseModes': ... + def __and__(self, f: typing.Union['QAbstractSocket.PauseModes', 'QAbstractSocket.PauseMode']) -> 'QAbstractSocket.PauseModes': ... + def __invert__(self) -> 'QAbstractSocket.PauseModes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, socketType: 'QAbstractSocket.SocketType', parent: typing.Optional[QtCore.QObject]) -> None: ... + + def setProtocolTag(self, tag: typing.Optional[str]) -> None: ... + def protocolTag(self) -> str: ... + @typing.overload + def bind(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], port: int = ..., mode: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag'] = ...) -> bool: ... + @typing.overload + def bind(self, port: int = ..., mode: typing.Union['QAbstractSocket.BindMode', 'QAbstractSocket.BindFlag'] = ...) -> bool: ... + def setPauseMode(self, pauseMode: typing.Union['QAbstractSocket.PauseModes', 'QAbstractSocket.PauseMode']) -> None: ... + def pauseMode(self) -> 'QAbstractSocket.PauseModes': ... + def resume(self) -> None: ... + def socketOption(self, option: 'QAbstractSocket.SocketOption') -> typing.Any: ... + def setSocketOption(self, option: 'QAbstractSocket.SocketOption', value: typing.Any) -> None: ... + def setPeerName(self, name: typing.Optional[str]) -> None: ... + def setPeerAddress(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress']) -> None: ... + def setPeerPort(self, port: int) -> None: ... + def setLocalAddress(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress']) -> None: ... + def setLocalPort(self, port: int) -> None: ... + def setSocketError(self, socketError: 'QAbstractSocket.SocketError') -> None: ... + def setSocketState(self, state: 'QAbstractSocket.SocketState') -> None: ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readLineData(self, maxlen: int) -> bytes: ... + def readData(self, maxlen: int) -> bytes: ... + proxyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + errorOccurred: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + disconnected: typing.ClassVar[QtCore.pyqtSignal] + connected: typing.ClassVar[QtCore.pyqtSignal] + hostFound: typing.ClassVar[QtCore.pyqtSignal] + def proxy(self) -> 'QNetworkProxy': ... + def setProxy(self, networkProxy: 'QNetworkProxy') -> None: ... + def waitForDisconnected(self, msecs: int = ...) -> bool: ... + def waitForBytesWritten(self, msecs: int = ...) -> bool: ... + def waitForReadyRead(self, msecs: int = ...) -> bool: ... + def waitForConnected(self, msecs: int = ...) -> bool: ... + def flush(self) -> bool: ... + def atEnd(self) -> bool: ... + def isSequential(self) -> bool: ... + def close(self) -> None: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def state(self) -> 'QAbstractSocket.SocketState': ... + def socketType(self) -> 'QAbstractSocket.SocketType': ... + def socketDescriptor(self) -> PyQt5.sip.voidptr: ... + def setSocketDescriptor(self, socketDescriptor: PyQt5.sip.voidptr, state: 'QAbstractSocket.SocketState' = ..., mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> bool: ... + def abort(self) -> None: ... + def setReadBufferSize(self, size: int) -> None: ... + def readBufferSize(self) -> int: ... + def peerName(self) -> str: ... + def peerAddress(self) -> 'QHostAddress': ... + def peerPort(self) -> int: ... + def localAddress(self) -> 'QHostAddress': ... + def localPort(self) -> int: ... + def canReadLine(self) -> bool: ... + def bytesToWrite(self) -> int: ... + def bytesAvailable(self) -> int: ... + def isValid(self) -> bool: ... + def disconnectFromHost(self) -> None: ... + @typing.overload + def connectToHost(self, hostName: typing.Optional[str], port: int, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ..., protocol: 'QAbstractSocket.NetworkLayerProtocol' = ...) -> None: ... + @typing.overload + def connectToHost(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], port: int, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> None: ... + + +class QAuthenticator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QAuthenticator') -> None: ... + + def setOption(self, opt: typing.Optional[str], value: typing.Any) -> None: ... + def options(self) -> typing.Dict[str, typing.Any]: ... + def option(self, opt: typing.Optional[str]) -> typing.Any: ... + def isNull(self) -> bool: ... + def realm(self) -> str: ... + def setPassword(self, password: typing.Optional[str]) -> None: ... + def password(self) -> str: ... + def setUser(self, user: typing.Optional[str]) -> None: ... + def user(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QDnsDomainNameRecord(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QDnsDomainNameRecord') -> None: ... + + def value(self) -> str: ... + def timeToLive(self) -> int: ... + def name(self) -> str: ... + def swap(self, other: 'QDnsDomainNameRecord') -> None: ... + + +class QDnsHostAddressRecord(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QDnsHostAddressRecord') -> None: ... + + def value(self) -> 'QHostAddress': ... + def timeToLive(self) -> int: ... + def name(self) -> str: ... + def swap(self, other: 'QDnsHostAddressRecord') -> None: ... + + +class QDnsMailExchangeRecord(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QDnsMailExchangeRecord') -> None: ... + + def timeToLive(self) -> int: ... + def preference(self) -> int: ... + def name(self) -> str: ... + def exchange(self) -> str: ... + def swap(self, other: 'QDnsMailExchangeRecord') -> None: ... + + +class QDnsServiceRecord(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QDnsServiceRecord') -> None: ... + + def weight(self) -> int: ... + def timeToLive(self) -> int: ... + def target(self) -> str: ... + def priority(self) -> int: ... + def port(self) -> int: ... + def name(self) -> str: ... + def swap(self, other: 'QDnsServiceRecord') -> None: ... + + +class QDnsTextRecord(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QDnsTextRecord') -> None: ... + + def values(self) -> typing.List[QtCore.QByteArray]: ... + def timeToLive(self) -> int: ... + def name(self) -> str: ... + def swap(self, other: 'QDnsTextRecord') -> None: ... + + +class QDnsLookup(QtCore.QObject): + + class Type(int): + A = ... # type: QDnsLookup.Type + AAAA = ... # type: QDnsLookup.Type + ANY = ... # type: QDnsLookup.Type + CNAME = ... # type: QDnsLookup.Type + MX = ... # type: QDnsLookup.Type + NS = ... # type: QDnsLookup.Type + PTR = ... # type: QDnsLookup.Type + SRV = ... # type: QDnsLookup.Type + TXT = ... # type: QDnsLookup.Type + + class Error(int): + NoError = ... # type: QDnsLookup.Error + ResolverError = ... # type: QDnsLookup.Error + OperationCancelledError = ... # type: QDnsLookup.Error + InvalidRequestError = ... # type: QDnsLookup.Error + InvalidReplyError = ... # type: QDnsLookup.Error + ServerFailureError = ... # type: QDnsLookup.Error + ServerRefusedError = ... # type: QDnsLookup.Error + NotFoundError = ... # type: QDnsLookup.Error + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, type: 'QDnsLookup.Type', name: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, type: 'QDnsLookup.Type', name: typing.Optional[str], nameserver: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + nameserverChanged: typing.ClassVar[QtCore.pyqtSignal] + def setNameserver(self, nameserver: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress']) -> None: ... + def nameserver(self) -> 'QHostAddress': ... + typeChanged: typing.ClassVar[QtCore.pyqtSignal] + nameChanged: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + def lookup(self) -> None: ... + def abort(self) -> None: ... + def textRecords(self) -> typing.List[QDnsTextRecord]: ... + def serviceRecords(self) -> typing.List[QDnsServiceRecord]: ... + def pointerRecords(self) -> typing.List[QDnsDomainNameRecord]: ... + def nameServerRecords(self) -> typing.List[QDnsDomainNameRecord]: ... + def mailExchangeRecords(self) -> typing.List[QDnsMailExchangeRecord]: ... + def hostAddressRecords(self) -> typing.List[QDnsHostAddressRecord]: ... + def canonicalNameRecords(self) -> typing.List[QDnsDomainNameRecord]: ... + def setType(self, a0: 'QDnsLookup.Type') -> None: ... + def type(self) -> 'QDnsLookup.Type': ... + def setName(self, name: typing.Optional[str]) -> None: ... + def name(self) -> str: ... + def isFinished(self) -> bool: ... + def errorString(self) -> str: ... + def error(self) -> 'QDnsLookup.Error': ... + + +class QHostAddress(PyQt5.sipsimplewrapper): + + class ConversionModeFlag(int): + ConvertV4MappedToIPv4 = ... # type: QHostAddress.ConversionModeFlag + ConvertV4CompatToIPv4 = ... # type: QHostAddress.ConversionModeFlag + ConvertUnspecifiedAddress = ... # type: QHostAddress.ConversionModeFlag + ConvertLocalHost = ... # type: QHostAddress.ConversionModeFlag + TolerantConversion = ... # type: QHostAddress.ConversionModeFlag + StrictConversion = ... # type: QHostAddress.ConversionModeFlag + + class SpecialAddress(int): + Null = ... # type: QHostAddress.SpecialAddress + Broadcast = ... # type: QHostAddress.SpecialAddress + LocalHost = ... # type: QHostAddress.SpecialAddress + LocalHostIPv6 = ... # type: QHostAddress.SpecialAddress + AnyIPv4 = ... # type: QHostAddress.SpecialAddress + AnyIPv6 = ... # type: QHostAddress.SpecialAddress + Any = ... # type: QHostAddress.SpecialAddress + + class ConversionMode(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QHostAddress.ConversionMode', 'QHostAddress.ConversionModeFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QHostAddress.ConversionMode', 'QHostAddress.ConversionModeFlag']) -> 'QHostAddress.ConversionMode': ... + def __xor__(self, f: typing.Union['QHostAddress.ConversionMode', 'QHostAddress.ConversionModeFlag']) -> 'QHostAddress.ConversionMode': ... + def __ior__(self, f: typing.Union['QHostAddress.ConversionMode', 'QHostAddress.ConversionModeFlag']) -> 'QHostAddress.ConversionMode': ... + def __or__(self, f: typing.Union['QHostAddress.ConversionMode', 'QHostAddress.ConversionModeFlag']) -> 'QHostAddress.ConversionMode': ... + def __iand__(self, f: typing.Union['QHostAddress.ConversionMode', 'QHostAddress.ConversionModeFlag']) -> 'QHostAddress.ConversionMode': ... + def __and__(self, f: typing.Union['QHostAddress.ConversionMode', 'QHostAddress.ConversionModeFlag']) -> 'QHostAddress.ConversionMode': ... + def __invert__(self) -> 'QHostAddress.ConversionMode': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, address: 'QHostAddress.SpecialAddress') -> None: ... + @typing.overload + def __init__(self, ip4Addr: int) -> None: ... + @typing.overload + def __init__(self, address: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, ip6Addr: typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]) -> None: ... + @typing.overload + def __init__(self, copy: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress']) -> None: ... + + def isBroadcast(self) -> bool: ... + def isUniqueLocalUnicast(self) -> bool: ... + def isSiteLocal(self) -> bool: ... + def isLinkLocal(self) -> bool: ... + def isGlobal(self) -> bool: ... + def isEqual(self, address: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], mode: typing.Union['QHostAddress.ConversionMode', 'QHostAddress.ConversionModeFlag'] = ...) -> bool: ... + def isMulticast(self) -> bool: ... + def swap(self, other: 'QHostAddress') -> None: ... + @staticmethod + def parseSubnet(subnet: typing.Optional[str]) -> typing.Tuple['QHostAddress', int]: ... + def isLoopback(self) -> bool: ... + @typing.overload + def isInSubnet(self, subnet: typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], netmask: int) -> bool: ... + @typing.overload + def isInSubnet(self, subnet: typing.Tuple[typing.Union['QHostAddress', 'QHostAddress.SpecialAddress'], int]) -> bool: ... + def __hash__(self) -> int: ... + def clear(self) -> None: ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def setScopeId(self, id: typing.Optional[str]) -> None: ... + def scopeId(self) -> str: ... + def toString(self) -> str: ... + def toIPv6Address(self) -> typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]: ... + def toIPv4Address(self) -> int: ... + def protocol(self) -> QAbstractSocket.NetworkLayerProtocol: ... + @typing.overload + def setAddress(self, address: 'QHostAddress.SpecialAddress') -> None: ... + @typing.overload + def setAddress(self, ip4Addr: int) -> None: ... + @typing.overload + def setAddress(self, address: typing.Optional[str]) -> bool: ... + @typing.overload + def setAddress(self, ip6Addr: typing.Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]) -> None: ... + + +class QHostInfo(PyQt5.sipsimplewrapper): + + class HostInfoError(int): + NoError = ... # type: QHostInfo.HostInfoError + HostNotFound = ... # type: QHostInfo.HostInfoError + UnknownError = ... # type: QHostInfo.HostInfoError + + @typing.overload + def __init__(self, id: int = ...) -> None: ... + @typing.overload + def __init__(self, d: 'QHostInfo') -> None: ... + + def swap(self, other: 'QHostInfo') -> None: ... + @staticmethod + def localDomainName() -> str: ... + @staticmethod + def localHostName() -> str: ... + @staticmethod + def fromName(name: typing.Optional[str]) -> 'QHostInfo': ... + @staticmethod + def abortHostLookup(lookupId: int) -> None: ... + @staticmethod + def lookupHost(name: typing.Optional[str], slot: PYQT_SLOT) -> int: ... + def lookupId(self) -> int: ... + def setLookupId(self, id: int) -> None: ... + def setErrorString(self, errorString: typing.Optional[str]) -> None: ... + def errorString(self) -> str: ... + def setError(self, error: 'QHostInfo.HostInfoError') -> None: ... + def error(self) -> 'QHostInfo.HostInfoError': ... + def setAddresses(self, addresses: typing.Iterable[typing.Union[QHostAddress, QHostAddress.SpecialAddress]]) -> None: ... + def addresses(self) -> typing.List[QHostAddress]: ... + def setHostName(self, name: typing.Optional[str]) -> None: ... + def hostName(self) -> str: ... + + +class QHstsPolicy(PyQt5.sipsimplewrapper): + + class PolicyFlag(int): + IncludeSubDomains = ... # type: QHstsPolicy.PolicyFlag + + class PolicyFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QHstsPolicy.PolicyFlags', 'QHstsPolicy.PolicyFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QHstsPolicy.PolicyFlags', 'QHstsPolicy.PolicyFlag']) -> 'QHstsPolicy.PolicyFlags': ... + def __xor__(self, f: typing.Union['QHstsPolicy.PolicyFlags', 'QHstsPolicy.PolicyFlag']) -> 'QHstsPolicy.PolicyFlags': ... + def __ior__(self, f: typing.Union['QHstsPolicy.PolicyFlags', 'QHstsPolicy.PolicyFlag']) -> 'QHstsPolicy.PolicyFlags': ... + def __or__(self, f: typing.Union['QHstsPolicy.PolicyFlags', 'QHstsPolicy.PolicyFlag']) -> 'QHstsPolicy.PolicyFlags': ... + def __iand__(self, f: typing.Union['QHstsPolicy.PolicyFlags', 'QHstsPolicy.PolicyFlag']) -> 'QHstsPolicy.PolicyFlags': ... + def __and__(self, f: typing.Union['QHstsPolicy.PolicyFlags', 'QHstsPolicy.PolicyFlag']) -> 'QHstsPolicy.PolicyFlags': ... + def __invert__(self) -> 'QHstsPolicy.PolicyFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, expiry: typing.Union[QtCore.QDateTime, datetime.datetime], flags: typing.Union['QHstsPolicy.PolicyFlags', 'QHstsPolicy.PolicyFlag'], host: typing.Optional[str], mode: QtCore.QUrl.ParsingMode = ...) -> None: ... + @typing.overload + def __init__(self, rhs: 'QHstsPolicy') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def isExpired(self) -> bool: ... + def includesSubDomains(self) -> bool: ... + def setIncludesSubDomains(self, include: bool) -> None: ... + def expiry(self) -> QtCore.QDateTime: ... + def setExpiry(self, expiry: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def host(self, options: typing.Union[QtCore.QUrl.ComponentFormattingOptions, QtCore.QUrl.ComponentFormattingOption] = ...) -> str: ... + def setHost(self, host: typing.Optional[str], mode: QtCore.QUrl.ParsingMode = ...) -> None: ... + def swap(self, other: 'QHstsPolicy') -> None: ... + + +class QHttp2Configuration(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QHttp2Configuration') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def swap(self, other: 'QHttp2Configuration') -> None: ... + def maxFrameSize(self) -> int: ... + def setMaxFrameSize(self, size: int) -> bool: ... + def streamReceiveWindowSize(self) -> int: ... + def setStreamReceiveWindowSize(self, size: int) -> bool: ... + def sessionReceiveWindowSize(self) -> int: ... + def setSessionReceiveWindowSize(self, size: int) -> bool: ... + def huffmanCompressionEnabled(self) -> bool: ... + def setHuffmanCompressionEnabled(self, enable: bool) -> None: ... + def serverPushEnabled(self) -> bool: ... + def setServerPushEnabled(self, enable: bool) -> None: ... + + +class QHttpPart(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QHttpPart') -> None: ... + + def swap(self, other: 'QHttpPart') -> None: ... + def setBodyDevice(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + def setBody(self, body: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def setRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray], headerValue: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def setHeader(self, header: 'QNetworkRequest.KnownHeaders', value: typing.Any) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QHttpMultiPart(QtCore.QObject): + + class ContentType(int): + MixedType = ... # type: QHttpMultiPart.ContentType + RelatedType = ... # type: QHttpMultiPart.ContentType + FormDataType = ... # type: QHttpMultiPart.ContentType + AlternativeType = ... # type: QHttpMultiPart.ContentType + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, contentType: 'QHttpMultiPart.ContentType', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setBoundary(self, boundary: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def boundary(self) -> QtCore.QByteArray: ... + def setContentType(self, contentType: 'QHttpMultiPart.ContentType') -> None: ... + def append(self, httpPart: QHttpPart) -> None: ... + + +class QLocalServer(QtCore.QObject): + + class SocketOption(int): + UserAccessOption = ... # type: QLocalServer.SocketOption + GroupAccessOption = ... # type: QLocalServer.SocketOption + OtherAccessOption = ... # type: QLocalServer.SocketOption + WorldAccessOption = ... # type: QLocalServer.SocketOption + + class SocketOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QLocalServer.SocketOptions', 'QLocalServer.SocketOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QLocalServer.SocketOptions', 'QLocalServer.SocketOption']) -> 'QLocalServer.SocketOptions': ... + def __xor__(self, f: typing.Union['QLocalServer.SocketOptions', 'QLocalServer.SocketOption']) -> 'QLocalServer.SocketOptions': ... + def __ior__(self, f: typing.Union['QLocalServer.SocketOptions', 'QLocalServer.SocketOption']) -> 'QLocalServer.SocketOptions': ... + def __or__(self, f: typing.Union['QLocalServer.SocketOptions', 'QLocalServer.SocketOption']) -> 'QLocalServer.SocketOptions': ... + def __iand__(self, f: typing.Union['QLocalServer.SocketOptions', 'QLocalServer.SocketOption']) -> 'QLocalServer.SocketOptions': ... + def __and__(self, f: typing.Union['QLocalServer.SocketOptions', 'QLocalServer.SocketOption']) -> 'QLocalServer.SocketOptions': ... + def __invert__(self) -> 'QLocalServer.SocketOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def socketDescriptor(self) -> PyQt5.sip.voidptr: ... + def socketOptions(self) -> 'QLocalServer.SocketOptions': ... + def setSocketOptions(self, options: typing.Union['QLocalServer.SocketOptions', 'QLocalServer.SocketOption']) -> None: ... + def incomingConnection(self, socketDescriptor: PyQt5.sip.voidptr) -> None: ... + newConnection: typing.ClassVar[QtCore.pyqtSignal] + @staticmethod + def removeServer(name: typing.Optional[str]) -> bool: ... + def waitForNewConnection(self, msecs: int = ...) -> typing.Tuple[bool, typing.Optional[bool]]: ... + def setMaxPendingConnections(self, numConnections: int) -> None: ... + def serverError(self) -> QAbstractSocket.SocketError: ... + def fullServerName(self) -> str: ... + def serverName(self) -> str: ... + def nextPendingConnection(self) -> typing.Optional['QLocalSocket']: ... + def maxPendingConnections(self) -> int: ... + @typing.overload + def listen(self, name: typing.Optional[str]) -> bool: ... + @typing.overload + def listen(self, socketDescriptor: PyQt5.sip.voidptr) -> bool: ... + def isListening(self) -> bool: ... + def hasPendingConnections(self) -> bool: ... + def errorString(self) -> str: ... + def close(self) -> None: ... + + +class QLocalSocket(QtCore.QIODevice): + + class LocalSocketState(int): + UnconnectedState = ... # type: QLocalSocket.LocalSocketState + ConnectingState = ... # type: QLocalSocket.LocalSocketState + ConnectedState = ... # type: QLocalSocket.LocalSocketState + ClosingState = ... # type: QLocalSocket.LocalSocketState + + class LocalSocketError(int): + ConnectionRefusedError = ... # type: QLocalSocket.LocalSocketError + PeerClosedError = ... # type: QLocalSocket.LocalSocketError + ServerNotFoundError = ... # type: QLocalSocket.LocalSocketError + SocketAccessError = ... # type: QLocalSocket.LocalSocketError + SocketResourceError = ... # type: QLocalSocket.LocalSocketError + SocketTimeoutError = ... # type: QLocalSocket.LocalSocketError + DatagramTooLargeError = ... # type: QLocalSocket.LocalSocketError + ConnectionError = ... # type: QLocalSocket.LocalSocketError + UnsupportedSocketOperationError = ... # type: QLocalSocket.LocalSocketError + OperationError = ... # type: QLocalSocket.LocalSocketError + UnknownSocketError = ... # type: QLocalSocket.LocalSocketError + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def writeData(self, a0: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readData(self, maxlen: int) -> bytes: ... + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + errorOccurred: typing.ClassVar[QtCore.pyqtSignal] + disconnected: typing.ClassVar[QtCore.pyqtSignal] + connected: typing.ClassVar[QtCore.pyqtSignal] + def waitForReadyRead(self, msecs: int = ...) -> bool: ... + def waitForDisconnected(self, msecs: int = ...) -> bool: ... + def waitForConnected(self, msecs: int = ...) -> bool: ... + def waitForBytesWritten(self, msecs: int = ...) -> bool: ... + def state(self) -> 'QLocalSocket.LocalSocketState': ... + def socketDescriptor(self) -> PyQt5.sip.voidptr: ... + def setSocketDescriptor(self, socketDescriptor: PyQt5.sip.voidptr, state: 'QLocalSocket.LocalSocketState' = ..., mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> bool: ... + def setReadBufferSize(self, size: int) -> None: ... + def readBufferSize(self) -> int: ... + def isValid(self) -> bool: ... + def flush(self) -> bool: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def close(self) -> None: ... + def canReadLine(self) -> bool: ... + def bytesToWrite(self) -> int: ... + def bytesAvailable(self) -> int: ... + def isSequential(self) -> bool: ... + def abort(self) -> None: ... + def fullServerName(self) -> str: ... + def setServerName(self, name: typing.Optional[str]) -> None: ... + def serverName(self) -> str: ... + def open(self, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> bool: ... + def disconnectFromServer(self) -> None: ... + @typing.overload + def connectToServer(self, name: typing.Optional[str], mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> None: ... + @typing.overload + def connectToServer(self, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> None: ... + + +class QNetworkAccessManager(QtCore.QObject): + + class NetworkAccessibility(int): + UnknownAccessibility = ... # type: QNetworkAccessManager.NetworkAccessibility + NotAccessible = ... # type: QNetworkAccessManager.NetworkAccessibility + Accessible = ... # type: QNetworkAccessManager.NetworkAccessibility + + class Operation(int): + HeadOperation = ... # type: QNetworkAccessManager.Operation + GetOperation = ... # type: QNetworkAccessManager.Operation + PutOperation = ... # type: QNetworkAccessManager.Operation + PostOperation = ... # type: QNetworkAccessManager.Operation + DeleteOperation = ... # type: QNetworkAccessManager.Operation + CustomOperation = ... # type: QNetworkAccessManager.Operation + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setTransferTimeout(self, timeout: int = ...) -> None: ... + def transferTimeout(self) -> int: ... + def setAutoDeleteReplies(self, autoDelete: bool) -> None: ... + def autoDeleteReplies(self) -> bool: ... + def isStrictTransportSecurityStoreEnabled(self) -> bool: ... + def enableStrictTransportSecurityStore(self, enabled: bool, storeDir: typing.Optional[str] = ...) -> None: ... + def redirectPolicy(self) -> 'QNetworkRequest.RedirectPolicy': ... + def setRedirectPolicy(self, policy: 'QNetworkRequest.RedirectPolicy') -> None: ... + def strictTransportSecurityHosts(self) -> typing.List[QHstsPolicy]: ... + def addStrictTransportSecurityHosts(self, knownHosts: typing.Iterable[QHstsPolicy]) -> None: ... + def isStrictTransportSecurityEnabled(self) -> bool: ... + def setStrictTransportSecurityEnabled(self, enabled: bool) -> None: ... + def clearConnectionCache(self) -> None: ... + def supportedSchemesImplementation(self) -> typing.List[str]: ... + def connectToHost(self, hostName: typing.Optional[str], port: int = ...) -> None: ... + @typing.overload + def connectToHostEncrypted(self, hostName: typing.Optional[str], port: int = ..., sslConfiguration: 'QSslConfiguration' = ...) -> None: ... + @typing.overload + def connectToHostEncrypted(self, hostName: typing.Optional[str], port: int, sslConfiguration: 'QSslConfiguration', peerName: typing.Optional[str]) -> None: ... + def supportedSchemes(self) -> typing.List[str]: ... + def clearAccessCache(self) -> None: ... + def networkAccessible(self) -> 'QNetworkAccessManager.NetworkAccessibility': ... + def setNetworkAccessible(self, accessible: 'QNetworkAccessManager.NetworkAccessibility') -> None: ... + def activeConfiguration(self) -> 'QNetworkConfiguration': ... + def configuration(self) -> 'QNetworkConfiguration': ... + def setConfiguration(self, config: 'QNetworkConfiguration') -> None: ... + @typing.overload + def sendCustomRequest(self, request: 'QNetworkRequest', verb: typing.Union[QtCore.QByteArray, bytes, bytearray], data: typing.Optional[QtCore.QIODevice] = ...) -> typing.Optional['QNetworkReply']: ... + @typing.overload + def sendCustomRequest(self, request: 'QNetworkRequest', verb: typing.Union[QtCore.QByteArray, bytes, bytearray], data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.Optional['QNetworkReply']: ... + @typing.overload + def sendCustomRequest(self, request: 'QNetworkRequest', verb: typing.Union[QtCore.QByteArray, bytes, bytearray], multiPart: typing.Optional[QHttpMultiPart]) -> typing.Optional['QNetworkReply']: ... + def deleteResource(self, request: 'QNetworkRequest') -> typing.Optional['QNetworkReply']: ... + def setCache(self, cache: typing.Optional[QAbstractNetworkCache]) -> None: ... + def cache(self) -> typing.Optional[QAbstractNetworkCache]: ... + def setProxyFactory(self, factory: typing.Optional['QNetworkProxyFactory']) -> None: ... + def proxyFactory(self) -> typing.Optional['QNetworkProxyFactory']: ... + def createRequest(self, op: 'QNetworkAccessManager.Operation', request: 'QNetworkRequest', device: typing.Optional[QtCore.QIODevice] = ...) -> 'QNetworkReply': ... + preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + networkAccessibleChanged: typing.ClassVar[QtCore.pyqtSignal] + sslErrors: typing.ClassVar[QtCore.pyqtSignal] + encrypted: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + authenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + proxyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def put(self, request: 'QNetworkRequest', data: typing.Optional[QtCore.QIODevice]) -> typing.Optional['QNetworkReply']: ... + @typing.overload + def put(self, request: 'QNetworkRequest', data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.Optional['QNetworkReply']: ... + @typing.overload + def put(self, request: 'QNetworkRequest', multiPart: typing.Optional[QHttpMultiPart]) -> typing.Optional['QNetworkReply']: ... + @typing.overload + def post(self, request: 'QNetworkRequest', data: typing.Optional[QtCore.QIODevice]) -> typing.Optional['QNetworkReply']: ... + @typing.overload + def post(self, request: 'QNetworkRequest', data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.Optional['QNetworkReply']: ... + @typing.overload + def post(self, request: 'QNetworkRequest', multiPart: typing.Optional[QHttpMultiPart]) -> typing.Optional['QNetworkReply']: ... + def get(self, request: 'QNetworkRequest') -> typing.Optional['QNetworkReply']: ... + def head(self, request: 'QNetworkRequest') -> typing.Optional['QNetworkReply']: ... + def setCookieJar(self, cookieJar: typing.Optional['QNetworkCookieJar']) -> None: ... + def cookieJar(self) -> typing.Optional['QNetworkCookieJar']: ... + def setProxy(self, proxy: 'QNetworkProxy') -> None: ... + def proxy(self) -> 'QNetworkProxy': ... + + +class QNetworkConfigurationManager(QtCore.QObject): + + class Capability(int): + CanStartAndStopInterfaces = ... # type: QNetworkConfigurationManager.Capability + DirectConnectionRouting = ... # type: QNetworkConfigurationManager.Capability + SystemSessionSupport = ... # type: QNetworkConfigurationManager.Capability + ApplicationLevelRoaming = ... # type: QNetworkConfigurationManager.Capability + ForcedRoaming = ... # type: QNetworkConfigurationManager.Capability + DataStatistics = ... # type: QNetworkConfigurationManager.Capability + NetworkSessionRequired = ... # type: QNetworkConfigurationManager.Capability + + class Capabilities(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QNetworkConfigurationManager.Capabilities', 'QNetworkConfigurationManager.Capability']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QNetworkConfigurationManager.Capabilities', 'QNetworkConfigurationManager.Capability']) -> 'QNetworkConfigurationManager.Capabilities': ... + def __xor__(self, f: typing.Union['QNetworkConfigurationManager.Capabilities', 'QNetworkConfigurationManager.Capability']) -> 'QNetworkConfigurationManager.Capabilities': ... + def __ior__(self, f: typing.Union['QNetworkConfigurationManager.Capabilities', 'QNetworkConfigurationManager.Capability']) -> 'QNetworkConfigurationManager.Capabilities': ... + def __or__(self, f: typing.Union['QNetworkConfigurationManager.Capabilities', 'QNetworkConfigurationManager.Capability']) -> 'QNetworkConfigurationManager.Capabilities': ... + def __iand__(self, f: typing.Union['QNetworkConfigurationManager.Capabilities', 'QNetworkConfigurationManager.Capability']) -> 'QNetworkConfigurationManager.Capabilities': ... + def __and__(self, f: typing.Union['QNetworkConfigurationManager.Capabilities', 'QNetworkConfigurationManager.Capability']) -> 'QNetworkConfigurationManager.Capabilities': ... + def __invert__(self) -> 'QNetworkConfigurationManager.Capabilities': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + updateCompleted: typing.ClassVar[QtCore.pyqtSignal] + onlineStateChanged: typing.ClassVar[QtCore.pyqtSignal] + configurationChanged: typing.ClassVar[QtCore.pyqtSignal] + configurationRemoved: typing.ClassVar[QtCore.pyqtSignal] + configurationAdded: typing.ClassVar[QtCore.pyqtSignal] + def isOnline(self) -> bool: ... + def updateConfigurations(self) -> None: ... + def configurationFromIdentifier(self, identifier: typing.Optional[str]) -> 'QNetworkConfiguration': ... + def allConfigurations(self, flags: typing.Union['QNetworkConfiguration.StateFlags', 'QNetworkConfiguration.StateFlag'] = ...) -> typing.List['QNetworkConfiguration']: ... + def defaultConfiguration(self) -> 'QNetworkConfiguration': ... + def capabilities(self) -> 'QNetworkConfigurationManager.Capabilities': ... + + +class QNetworkConfiguration(PyQt5.sipsimplewrapper): + + class BearerType(int): + BearerUnknown = ... # type: QNetworkConfiguration.BearerType + BearerEthernet = ... # type: QNetworkConfiguration.BearerType + BearerWLAN = ... # type: QNetworkConfiguration.BearerType + Bearer2G = ... # type: QNetworkConfiguration.BearerType + BearerCDMA2000 = ... # type: QNetworkConfiguration.BearerType + BearerWCDMA = ... # type: QNetworkConfiguration.BearerType + BearerHSPA = ... # type: QNetworkConfiguration.BearerType + BearerBluetooth = ... # type: QNetworkConfiguration.BearerType + BearerWiMAX = ... # type: QNetworkConfiguration.BearerType + BearerEVDO = ... # type: QNetworkConfiguration.BearerType + BearerLTE = ... # type: QNetworkConfiguration.BearerType + Bearer3G = ... # type: QNetworkConfiguration.BearerType + Bearer4G = ... # type: QNetworkConfiguration.BearerType + + class StateFlag(int): + Undefined = ... # type: QNetworkConfiguration.StateFlag + Defined = ... # type: QNetworkConfiguration.StateFlag + Discovered = ... # type: QNetworkConfiguration.StateFlag + Active = ... # type: QNetworkConfiguration.StateFlag + + class Purpose(int): + UnknownPurpose = ... # type: QNetworkConfiguration.Purpose + PublicPurpose = ... # type: QNetworkConfiguration.Purpose + PrivatePurpose = ... # type: QNetworkConfiguration.Purpose + ServiceSpecificPurpose = ... # type: QNetworkConfiguration.Purpose + + class Type(int): + InternetAccessPoint = ... # type: QNetworkConfiguration.Type + ServiceNetwork = ... # type: QNetworkConfiguration.Type + UserChoice = ... # type: QNetworkConfiguration.Type + Invalid = ... # type: QNetworkConfiguration.Type + + class StateFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QNetworkConfiguration.StateFlags', 'QNetworkConfiguration.StateFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QNetworkConfiguration.StateFlags', 'QNetworkConfiguration.StateFlag']) -> 'QNetworkConfiguration.StateFlags': ... + def __xor__(self, f: typing.Union['QNetworkConfiguration.StateFlags', 'QNetworkConfiguration.StateFlag']) -> 'QNetworkConfiguration.StateFlags': ... + def __ior__(self, f: typing.Union['QNetworkConfiguration.StateFlags', 'QNetworkConfiguration.StateFlag']) -> 'QNetworkConfiguration.StateFlags': ... + def __or__(self, f: typing.Union['QNetworkConfiguration.StateFlags', 'QNetworkConfiguration.StateFlag']) -> 'QNetworkConfiguration.StateFlags': ... + def __iand__(self, f: typing.Union['QNetworkConfiguration.StateFlags', 'QNetworkConfiguration.StateFlag']) -> 'QNetworkConfiguration.StateFlags': ... + def __and__(self, f: typing.Union['QNetworkConfiguration.StateFlags', 'QNetworkConfiguration.StateFlag']) -> 'QNetworkConfiguration.StateFlags': ... + def __invert__(self) -> 'QNetworkConfiguration.StateFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkConfiguration') -> None: ... + + def setConnectTimeout(self, timeout: int) -> bool: ... + def connectTimeout(self) -> int: ... + def swap(self, other: 'QNetworkConfiguration') -> None: ... + def isValid(self) -> bool: ... + def name(self) -> str: ... + def children(self) -> typing.List['QNetworkConfiguration']: ... + def isRoamingAvailable(self) -> bool: ... + def identifier(self) -> str: ... + def bearerTypeFamily(self) -> 'QNetworkConfiguration.BearerType': ... + def bearerTypeName(self) -> str: ... + def bearerType(self) -> 'QNetworkConfiguration.BearerType': ... + def purpose(self) -> 'QNetworkConfiguration.Purpose': ... + def type(self) -> 'QNetworkConfiguration.Type': ... + def state(self) -> 'QNetworkConfiguration.StateFlags': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QNetworkCookie(PyQt5.sipsimplewrapper): + + class RawForm(int): + NameAndValueOnly = ... # type: QNetworkCookie.RawForm + Full = ... # type: QNetworkCookie.RawForm + + @typing.overload + def __init__(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray] = ..., value: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkCookie') -> None: ... + + def normalize(self, url: QtCore.QUrl) -> None: ... + def hasSameIdentifier(self, other: 'QNetworkCookie') -> bool: ... + def swap(self, other: 'QNetworkCookie') -> None: ... + def setHttpOnly(self, enable: bool) -> None: ... + def isHttpOnly(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @staticmethod + def parseCookies(cookieString: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.List['QNetworkCookie']: ... + def toRawForm(self, form: 'QNetworkCookie.RawForm' = ...) -> QtCore.QByteArray: ... + def setValue(self, value: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def value(self) -> QtCore.QByteArray: ... + def setName(self, cookieName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def name(self) -> QtCore.QByteArray: ... + def setPath(self, path: typing.Optional[str]) -> None: ... + def path(self) -> str: ... + def setDomain(self, domain: typing.Optional[str]) -> None: ... + def domain(self) -> str: ... + def setExpirationDate(self, date: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def expirationDate(self) -> QtCore.QDateTime: ... + def isSessionCookie(self) -> bool: ... + def setSecure(self, enable: bool) -> None: ... + def isSecure(self) -> bool: ... + + +class QNetworkCookieJar(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def validateCookie(self, cookie: QNetworkCookie, url: QtCore.QUrl) -> bool: ... + def allCookies(self) -> typing.List[QNetworkCookie]: ... + def setAllCookies(self, cookieList: typing.Iterable[QNetworkCookie]) -> None: ... + def deleteCookie(self, cookie: QNetworkCookie) -> bool: ... + def updateCookie(self, cookie: QNetworkCookie) -> bool: ... + def insertCookie(self, cookie: QNetworkCookie) -> bool: ... + def setCookiesFromUrl(self, cookieList: typing.Iterable[QNetworkCookie], url: QtCore.QUrl) -> bool: ... + def cookiesForUrl(self, url: QtCore.QUrl) -> typing.List[QNetworkCookie]: ... + + +class QNetworkDatagram(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray], destinationAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress] = ..., port: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkDatagram') -> None: ... + + def makeReply(self, payload: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> 'QNetworkDatagram': ... + def setData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def data(self) -> QtCore.QByteArray: ... + def setHopLimit(self, count: int) -> None: ... + def hopLimit(self) -> int: ... + def setDestination(self, address: typing.Union[QHostAddress, QHostAddress.SpecialAddress], port: int) -> None: ... + def setSender(self, address: typing.Union[QHostAddress, QHostAddress.SpecialAddress], port: int = ...) -> None: ... + def destinationPort(self) -> int: ... + def senderPort(self) -> int: ... + def destinationAddress(self) -> QHostAddress: ... + def senderAddress(self) -> QHostAddress: ... + def setInterfaceIndex(self, index: int) -> None: ... + def interfaceIndex(self) -> int: ... + def isNull(self) -> bool: ... + def isValid(self) -> bool: ... + def clear(self) -> None: ... + def swap(self, other: 'QNetworkDatagram') -> None: ... + + +class QNetworkDiskCache(QAbstractNetworkCache): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def expire(self) -> int: ... + def clear(self) -> None: ... + def fileMetaData(self, fileName: typing.Optional[str]) -> QNetworkCacheMetaData: ... + def insert(self, device: typing.Optional[QtCore.QIODevice]) -> None: ... + def prepare(self, metaData: QNetworkCacheMetaData) -> typing.Optional[QtCore.QIODevice]: ... + def remove(self, url: QtCore.QUrl) -> bool: ... + def data(self, url: QtCore.QUrl) -> typing.Optional[QtCore.QIODevice]: ... + def updateMetaData(self, metaData: QNetworkCacheMetaData) -> None: ... + def metaData(self, url: QtCore.QUrl) -> QNetworkCacheMetaData: ... + def cacheSize(self) -> int: ... + def setMaximumCacheSize(self, size: int) -> None: ... + def maximumCacheSize(self) -> int: ... + def setCacheDirectory(self, cacheDir: typing.Optional[str]) -> None: ... + def cacheDirectory(self) -> str: ... + + +class QNetworkAddressEntry(PyQt5.sipsimplewrapper): + + class DnsEligibilityStatus(int): + DnsEligibilityUnknown = ... # type: QNetworkAddressEntry.DnsEligibilityStatus + DnsIneligible = ... # type: QNetworkAddressEntry.DnsEligibilityStatus + DnsEligible = ... # type: QNetworkAddressEntry.DnsEligibilityStatus + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkAddressEntry') -> None: ... + + def isTemporary(self) -> bool: ... + def isPermanent(self) -> bool: ... + def clearAddressLifetime(self) -> None: ... + def setAddressLifetime(self, preferred: QtCore.QDeadlineTimer, validity: QtCore.QDeadlineTimer) -> None: ... + def validityLifetime(self) -> QtCore.QDeadlineTimer: ... + def preferredLifetime(self) -> QtCore.QDeadlineTimer: ... + def isLifetimeKnown(self) -> bool: ... + def setDnsEligibility(self, status: 'QNetworkAddressEntry.DnsEligibilityStatus') -> None: ... + def dnsEligibility(self) -> 'QNetworkAddressEntry.DnsEligibilityStatus': ... + def swap(self, other: 'QNetworkAddressEntry') -> None: ... + def setPrefixLength(self, length: int) -> None: ... + def prefixLength(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def setBroadcast(self, newBroadcast: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> None: ... + def broadcast(self) -> QHostAddress: ... + def setNetmask(self, newNetmask: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> None: ... + def netmask(self) -> QHostAddress: ... + def setIp(self, newIp: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> None: ... + def ip(self) -> QHostAddress: ... + + +class QNetworkInterface(PyQt5.sipsimplewrapper): + + class InterfaceType(int): + Unknown = ... # type: QNetworkInterface.InterfaceType + Loopback = ... # type: QNetworkInterface.InterfaceType + Virtual = ... # type: QNetworkInterface.InterfaceType + Ethernet = ... # type: QNetworkInterface.InterfaceType + Slip = ... # type: QNetworkInterface.InterfaceType + CanBus = ... # type: QNetworkInterface.InterfaceType + Ppp = ... # type: QNetworkInterface.InterfaceType + Fddi = ... # type: QNetworkInterface.InterfaceType + Wifi = ... # type: QNetworkInterface.InterfaceType + Ieee80211 = ... # type: QNetworkInterface.InterfaceType + Phonet = ... # type: QNetworkInterface.InterfaceType + Ieee802154 = ... # type: QNetworkInterface.InterfaceType + SixLoWPAN = ... # type: QNetworkInterface.InterfaceType + Ieee80216 = ... # type: QNetworkInterface.InterfaceType + Ieee1394 = ... # type: QNetworkInterface.InterfaceType + + class InterfaceFlag(int): + IsUp = ... # type: QNetworkInterface.InterfaceFlag + IsRunning = ... # type: QNetworkInterface.InterfaceFlag + CanBroadcast = ... # type: QNetworkInterface.InterfaceFlag + IsLoopBack = ... # type: QNetworkInterface.InterfaceFlag + IsPointToPoint = ... # type: QNetworkInterface.InterfaceFlag + CanMulticast = ... # type: QNetworkInterface.InterfaceFlag + + class InterfaceFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QNetworkInterface.InterfaceFlags', 'QNetworkInterface.InterfaceFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QNetworkInterface.InterfaceFlags', 'QNetworkInterface.InterfaceFlag']) -> 'QNetworkInterface.InterfaceFlags': ... + def __xor__(self, f: typing.Union['QNetworkInterface.InterfaceFlags', 'QNetworkInterface.InterfaceFlag']) -> 'QNetworkInterface.InterfaceFlags': ... + def __ior__(self, f: typing.Union['QNetworkInterface.InterfaceFlags', 'QNetworkInterface.InterfaceFlag']) -> 'QNetworkInterface.InterfaceFlags': ... + def __or__(self, f: typing.Union['QNetworkInterface.InterfaceFlags', 'QNetworkInterface.InterfaceFlag']) -> 'QNetworkInterface.InterfaceFlags': ... + def __iand__(self, f: typing.Union['QNetworkInterface.InterfaceFlags', 'QNetworkInterface.InterfaceFlag']) -> 'QNetworkInterface.InterfaceFlags': ... + def __and__(self, f: typing.Union['QNetworkInterface.InterfaceFlags', 'QNetworkInterface.InterfaceFlag']) -> 'QNetworkInterface.InterfaceFlags': ... + def __invert__(self) -> 'QNetworkInterface.InterfaceFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkInterface') -> None: ... + + def maximumTransmissionUnit(self) -> int: ... + def type(self) -> 'QNetworkInterface.InterfaceType': ... + @staticmethod + def interfaceNameFromIndex(index: int) -> str: ... + @staticmethod + def interfaceIndexFromName(name: typing.Optional[str]) -> int: ... + def swap(self, other: 'QNetworkInterface') -> None: ... + def humanReadableName(self) -> str: ... + def index(self) -> int: ... + @staticmethod + def allAddresses() -> typing.List[QHostAddress]: ... + @staticmethod + def allInterfaces() -> typing.List['QNetworkInterface']: ... + @staticmethod + def interfaceFromIndex(index: int) -> 'QNetworkInterface': ... + @staticmethod + def interfaceFromName(name: typing.Optional[str]) -> 'QNetworkInterface': ... + def addressEntries(self) -> typing.List[QNetworkAddressEntry]: ... + def hardwareAddress(self) -> str: ... + def flags(self) -> 'QNetworkInterface.InterfaceFlags': ... + def name(self) -> str: ... + def isValid(self) -> bool: ... + + +class QNetworkProxy(PyQt5.sipsimplewrapper): + + class Capability(int): + TunnelingCapability = ... # type: QNetworkProxy.Capability + ListeningCapability = ... # type: QNetworkProxy.Capability + UdpTunnelingCapability = ... # type: QNetworkProxy.Capability + CachingCapability = ... # type: QNetworkProxy.Capability + HostNameLookupCapability = ... # type: QNetworkProxy.Capability + SctpTunnelingCapability = ... # type: QNetworkProxy.Capability + SctpListeningCapability = ... # type: QNetworkProxy.Capability + + class ProxyType(int): + DefaultProxy = ... # type: QNetworkProxy.ProxyType + Socks5Proxy = ... # type: QNetworkProxy.ProxyType + NoProxy = ... # type: QNetworkProxy.ProxyType + HttpProxy = ... # type: QNetworkProxy.ProxyType + HttpCachingProxy = ... # type: QNetworkProxy.ProxyType + FtpCachingProxy = ... # type: QNetworkProxy.ProxyType + + class Capabilities(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QNetworkProxy.Capabilities', 'QNetworkProxy.Capability']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QNetworkProxy.Capabilities', 'QNetworkProxy.Capability']) -> 'QNetworkProxy.Capabilities': ... + def __xor__(self, f: typing.Union['QNetworkProxy.Capabilities', 'QNetworkProxy.Capability']) -> 'QNetworkProxy.Capabilities': ... + def __ior__(self, f: typing.Union['QNetworkProxy.Capabilities', 'QNetworkProxy.Capability']) -> 'QNetworkProxy.Capabilities': ... + def __or__(self, f: typing.Union['QNetworkProxy.Capabilities', 'QNetworkProxy.Capability']) -> 'QNetworkProxy.Capabilities': ... + def __iand__(self, f: typing.Union['QNetworkProxy.Capabilities', 'QNetworkProxy.Capability']) -> 'QNetworkProxy.Capabilities': ... + def __and__(self, f: typing.Union['QNetworkProxy.Capabilities', 'QNetworkProxy.Capability']) -> 'QNetworkProxy.Capabilities': ... + def __invert__(self) -> 'QNetworkProxy.Capabilities': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, type: 'QNetworkProxy.ProxyType', hostName: typing.Optional[str] = ..., port: int = ..., user: typing.Optional[str] = ..., password: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkProxy') -> None: ... + + def setRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray], value: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def rawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> QtCore.QByteArray: ... + def rawHeaderList(self) -> typing.List[QtCore.QByteArray]: ... + def hasRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def setHeader(self, header: 'QNetworkRequest.KnownHeaders', value: typing.Any) -> None: ... + def header(self, header: 'QNetworkRequest.KnownHeaders') -> typing.Any: ... + def swap(self, other: 'QNetworkProxy') -> None: ... + def capabilities(self) -> 'QNetworkProxy.Capabilities': ... + def setCapabilities(self, capab: typing.Union['QNetworkProxy.Capabilities', 'QNetworkProxy.Capability']) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isTransparentProxy(self) -> bool: ... + def isCachingProxy(self) -> bool: ... + @staticmethod + def applicationProxy() -> 'QNetworkProxy': ... + @staticmethod + def setApplicationProxy(proxy: 'QNetworkProxy') -> None: ... + def port(self) -> int: ... + def setPort(self, port: int) -> None: ... + def hostName(self) -> str: ... + def setHostName(self, hostName: typing.Optional[str]) -> None: ... + def password(self) -> str: ... + def setPassword(self, password: typing.Optional[str]) -> None: ... + def user(self) -> str: ... + def setUser(self, userName: typing.Optional[str]) -> None: ... + def type(self) -> 'QNetworkProxy.ProxyType': ... + def setType(self, type: 'QNetworkProxy.ProxyType') -> None: ... + + +class QNetworkProxyQuery(PyQt5.sipsimplewrapper): + + class QueryType(int): + TcpSocket = ... # type: QNetworkProxyQuery.QueryType + UdpSocket = ... # type: QNetworkProxyQuery.QueryType + TcpServer = ... # type: QNetworkProxyQuery.QueryType + UrlRequest = ... # type: QNetworkProxyQuery.QueryType + SctpSocket = ... # type: QNetworkProxyQuery.QueryType + SctpServer = ... # type: QNetworkProxyQuery.QueryType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, requestUrl: QtCore.QUrl, type: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... + @typing.overload + def __init__(self, hostname: typing.Optional[str], port: int, protocolTag: typing.Optional[str] = ..., type: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... + @typing.overload + def __init__(self, bindPort: int, protocolTag: typing.Optional[str] = ..., type: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... + @typing.overload + def __init__(self, networkConfiguration: QNetworkConfiguration, requestUrl: QtCore.QUrl, queryType: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... + @typing.overload + def __init__(self, networkConfiguration: QNetworkConfiguration, hostname: typing.Optional[str], port: int, protocolTag: typing.Optional[str] = ..., type: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... + @typing.overload + def __init__(self, networkConfiguration: QNetworkConfiguration, bindPort: int, protocolTag: typing.Optional[str] = ..., type: 'QNetworkProxyQuery.QueryType' = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkProxyQuery') -> None: ... + + def swap(self, other: 'QNetworkProxyQuery') -> None: ... + def setNetworkConfiguration(self, networkConfiguration: QNetworkConfiguration) -> None: ... + def networkConfiguration(self) -> QNetworkConfiguration: ... + def setUrl(self, url: QtCore.QUrl) -> None: ... + def url(self) -> QtCore.QUrl: ... + def setProtocolTag(self, protocolTag: typing.Optional[str]) -> None: ... + def protocolTag(self) -> str: ... + def setLocalPort(self, port: int) -> None: ... + def localPort(self) -> int: ... + def setPeerHostName(self, hostname: typing.Optional[str]) -> None: ... + def peerHostName(self) -> str: ... + def setPeerPort(self, port: int) -> None: ... + def peerPort(self) -> int: ... + def setQueryType(self, type: 'QNetworkProxyQuery.QueryType') -> None: ... + def queryType(self) -> 'QNetworkProxyQuery.QueryType': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QNetworkProxyFactory(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QNetworkProxyFactory') -> None: ... + + @staticmethod + def usesSystemConfiguration() -> bool: ... + @staticmethod + def setUseSystemConfiguration(enable: bool) -> None: ... + @staticmethod + def systemProxyForQuery(query: QNetworkProxyQuery = ...) -> typing.List[QNetworkProxy]: ... + @staticmethod + def proxyForQuery(query: QNetworkProxyQuery) -> typing.List[QNetworkProxy]: ... + @staticmethod + def setApplicationProxyFactory(factory: typing.Optional['QNetworkProxyFactory']) -> None: ... + def queryProxy(self, query: QNetworkProxyQuery = ...) -> typing.List[QNetworkProxy]: ... + + +class QNetworkReply(QtCore.QIODevice): + + class NetworkError(int): + NoError = ... # type: QNetworkReply.NetworkError + ConnectionRefusedError = ... # type: QNetworkReply.NetworkError + RemoteHostClosedError = ... # type: QNetworkReply.NetworkError + HostNotFoundError = ... # type: QNetworkReply.NetworkError + TimeoutError = ... # type: QNetworkReply.NetworkError + OperationCanceledError = ... # type: QNetworkReply.NetworkError + SslHandshakeFailedError = ... # type: QNetworkReply.NetworkError + UnknownNetworkError = ... # type: QNetworkReply.NetworkError + ProxyConnectionRefusedError = ... # type: QNetworkReply.NetworkError + ProxyConnectionClosedError = ... # type: QNetworkReply.NetworkError + ProxyNotFoundError = ... # type: QNetworkReply.NetworkError + ProxyTimeoutError = ... # type: QNetworkReply.NetworkError + ProxyAuthenticationRequiredError = ... # type: QNetworkReply.NetworkError + UnknownProxyError = ... # type: QNetworkReply.NetworkError + ContentAccessDenied = ... # type: QNetworkReply.NetworkError + ContentOperationNotPermittedError = ... # type: QNetworkReply.NetworkError + ContentNotFoundError = ... # type: QNetworkReply.NetworkError + AuthenticationRequiredError = ... # type: QNetworkReply.NetworkError + UnknownContentError = ... # type: QNetworkReply.NetworkError + ProtocolUnknownError = ... # type: QNetworkReply.NetworkError + ProtocolInvalidOperationError = ... # type: QNetworkReply.NetworkError + ProtocolFailure = ... # type: QNetworkReply.NetworkError + ContentReSendError = ... # type: QNetworkReply.NetworkError + TemporaryNetworkFailureError = ... # type: QNetworkReply.NetworkError + NetworkSessionFailedError = ... # type: QNetworkReply.NetworkError + BackgroundRequestNotAllowedError = ... # type: QNetworkReply.NetworkError + ContentConflictError = ... # type: QNetworkReply.NetworkError + ContentGoneError = ... # type: QNetworkReply.NetworkError + InternalServerError = ... # type: QNetworkReply.NetworkError + OperationNotImplementedError = ... # type: QNetworkReply.NetworkError + ServiceUnavailableError = ... # type: QNetworkReply.NetworkError + UnknownServerError = ... # type: QNetworkReply.NetworkError + TooManyRedirectsError = ... # type: QNetworkReply.NetworkError + InsecureRedirectError = ... # type: QNetworkReply.NetworkError + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def ignoreSslErrorsImplementation(self, a0: typing.Iterable['QSslError']) -> None: ... + def setSslConfigurationImplementation(self, a0: 'QSslConfiguration') -> None: ... + def sslConfigurationImplementation(self, a0: 'QSslConfiguration') -> None: ... + def rawHeaderPairs(self) -> typing.List[typing.Tuple[QtCore.QByteArray, QtCore.QByteArray]]: ... + def isRunning(self) -> bool: ... + def isFinished(self) -> bool: ... + def setFinished(self, finished: bool) -> None: ... + def setAttribute(self, code: 'QNetworkRequest.Attribute', value: typing.Any) -> None: ... + def setRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray], value: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def setHeader(self, header: 'QNetworkRequest.KnownHeaders', value: typing.Any) -> None: ... + def setUrl(self, url: QtCore.QUrl) -> None: ... + def setError(self, errorCode: 'QNetworkReply.NetworkError', errorString: typing.Optional[str]) -> None: ... + def setRequest(self, request: 'QNetworkRequest') -> None: ... + def setOperation(self, operation: QNetworkAccessManager.Operation) -> None: ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + redirectAllowed: typing.ClassVar[QtCore.pyqtSignal] + redirected: typing.ClassVar[QtCore.pyqtSignal] + preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + downloadProgress: typing.ClassVar[QtCore.pyqtSignal] + uploadProgress: typing.ClassVar[QtCore.pyqtSignal] + sslErrors: typing.ClassVar[QtCore.pyqtSignal] + errorOccurred: typing.ClassVar[QtCore.pyqtSignal] + encrypted: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + metaDataChanged: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def ignoreSslErrors(self) -> None: ... + @typing.overload + def ignoreSslErrors(self, errors: typing.Iterable['QSslError']) -> None: ... + def setSslConfiguration(self, configuration: 'QSslConfiguration') -> None: ... + def sslConfiguration(self) -> 'QSslConfiguration': ... + def attribute(self, code: 'QNetworkRequest.Attribute') -> typing.Any: ... + def rawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> QtCore.QByteArray: ... + def rawHeaderList(self) -> typing.List[QtCore.QByteArray]: ... + def hasRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def header(self, header: 'QNetworkRequest.KnownHeaders') -> typing.Any: ... + def url(self) -> QtCore.QUrl: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def request(self) -> 'QNetworkRequest': ... + def operation(self) -> QNetworkAccessManager.Operation: ... + def manager(self) -> typing.Optional[QNetworkAccessManager]: ... + def setReadBufferSize(self, size: int) -> None: ... + def readBufferSize(self) -> int: ... + def isSequential(self) -> bool: ... + def close(self) -> None: ... + def abort(self) -> None: ... + + +class QNetworkRequest(PyQt5.sipsimplewrapper): + + class TransferTimeoutConstant(int): + DefaultTransferTimeoutConstant = ... # type: QNetworkRequest.TransferTimeoutConstant + + class RedirectPolicy(int): + ManualRedirectPolicy = ... # type: QNetworkRequest.RedirectPolicy + NoLessSafeRedirectPolicy = ... # type: QNetworkRequest.RedirectPolicy + SameOriginRedirectPolicy = ... # type: QNetworkRequest.RedirectPolicy + UserVerifiedRedirectPolicy = ... # type: QNetworkRequest.RedirectPolicy + + class Priority(int): + HighPriority = ... # type: QNetworkRequest.Priority + NormalPriority = ... # type: QNetworkRequest.Priority + LowPriority = ... # type: QNetworkRequest.Priority + + class LoadControl(int): + Automatic = ... # type: QNetworkRequest.LoadControl + Manual = ... # type: QNetworkRequest.LoadControl + + class CacheLoadControl(int): + AlwaysNetwork = ... # type: QNetworkRequest.CacheLoadControl + PreferNetwork = ... # type: QNetworkRequest.CacheLoadControl + PreferCache = ... # type: QNetworkRequest.CacheLoadControl + AlwaysCache = ... # type: QNetworkRequest.CacheLoadControl + + class Attribute(int): + HttpStatusCodeAttribute = ... # type: QNetworkRequest.Attribute + HttpReasonPhraseAttribute = ... # type: QNetworkRequest.Attribute + RedirectionTargetAttribute = ... # type: QNetworkRequest.Attribute + ConnectionEncryptedAttribute = ... # type: QNetworkRequest.Attribute + CacheLoadControlAttribute = ... # type: QNetworkRequest.Attribute + CacheSaveControlAttribute = ... # type: QNetworkRequest.Attribute + SourceIsFromCacheAttribute = ... # type: QNetworkRequest.Attribute + DoNotBufferUploadDataAttribute = ... # type: QNetworkRequest.Attribute + HttpPipeliningAllowedAttribute = ... # type: QNetworkRequest.Attribute + HttpPipeliningWasUsedAttribute = ... # type: QNetworkRequest.Attribute + CustomVerbAttribute = ... # type: QNetworkRequest.Attribute + CookieLoadControlAttribute = ... # type: QNetworkRequest.Attribute + AuthenticationReuseAttribute = ... # type: QNetworkRequest.Attribute + CookieSaveControlAttribute = ... # type: QNetworkRequest.Attribute + BackgroundRequestAttribute = ... # type: QNetworkRequest.Attribute + SpdyAllowedAttribute = ... # type: QNetworkRequest.Attribute + SpdyWasUsedAttribute = ... # type: QNetworkRequest.Attribute + EmitAllUploadProgressSignalsAttribute = ... # type: QNetworkRequest.Attribute + FollowRedirectsAttribute = ... # type: QNetworkRequest.Attribute + HTTP2AllowedAttribute = ... # type: QNetworkRequest.Attribute + Http2AllowedAttribute = ... # type: QNetworkRequest.Attribute + HTTP2WasUsedAttribute = ... # type: QNetworkRequest.Attribute + Http2WasUsedAttribute = ... # type: QNetworkRequest.Attribute + OriginalContentLengthAttribute = ... # type: QNetworkRequest.Attribute + RedirectPolicyAttribute = ... # type: QNetworkRequest.Attribute + Http2DirectAttribute = ... # type: QNetworkRequest.Attribute + AutoDeleteReplyOnFinishAttribute = ... # type: QNetworkRequest.Attribute + User = ... # type: QNetworkRequest.Attribute + UserMax = ... # type: QNetworkRequest.Attribute + + class KnownHeaders(int): + ContentTypeHeader = ... # type: QNetworkRequest.KnownHeaders + ContentLengthHeader = ... # type: QNetworkRequest.KnownHeaders + LocationHeader = ... # type: QNetworkRequest.KnownHeaders + LastModifiedHeader = ... # type: QNetworkRequest.KnownHeaders + CookieHeader = ... # type: QNetworkRequest.KnownHeaders + SetCookieHeader = ... # type: QNetworkRequest.KnownHeaders + ContentDispositionHeader = ... # type: QNetworkRequest.KnownHeaders + UserAgentHeader = ... # type: QNetworkRequest.KnownHeaders + ServerHeader = ... # type: QNetworkRequest.KnownHeaders + IfModifiedSinceHeader = ... # type: QNetworkRequest.KnownHeaders + ETagHeader = ... # type: QNetworkRequest.KnownHeaders + IfMatchHeader = ... # type: QNetworkRequest.KnownHeaders + IfNoneMatchHeader = ... # type: QNetworkRequest.KnownHeaders + + @typing.overload + def __init__(self, url: QtCore.QUrl = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QNetworkRequest') -> None: ... + + def setTransferTimeout(self, timeout: int = ...) -> None: ... + def transferTimeout(self) -> int: ... + def setHttp2Configuration(self, configuration: QHttp2Configuration) -> None: ... + def http2Configuration(self) -> QHttp2Configuration: ... + def setPeerVerifyName(self, peerName: typing.Optional[str]) -> None: ... + def peerVerifyName(self) -> str: ... + def setMaximumRedirectsAllowed(self, maximumRedirectsAllowed: int) -> None: ... + def maximumRedirectsAllowed(self) -> int: ... + def swap(self, other: 'QNetworkRequest') -> None: ... + def setPriority(self, priority: 'QNetworkRequest.Priority') -> None: ... + def priority(self) -> 'QNetworkRequest.Priority': ... + def originatingObject(self) -> typing.Optional[QtCore.QObject]: ... + def setOriginatingObject(self, object: typing.Optional[QtCore.QObject]) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def setSslConfiguration(self, configuration: 'QSslConfiguration') -> None: ... + def sslConfiguration(self) -> 'QSslConfiguration': ... + def setAttribute(self, code: 'QNetworkRequest.Attribute', value: typing.Any) -> None: ... + def attribute(self, code: 'QNetworkRequest.Attribute', defaultValue: typing.Any = ...) -> typing.Any: ... + def setRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray], value: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def rawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> QtCore.QByteArray: ... + def rawHeaderList(self) -> typing.List[QtCore.QByteArray]: ... + def hasRawHeader(self, headerName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def setHeader(self, header: 'QNetworkRequest.KnownHeaders', value: typing.Any) -> None: ... + def header(self, header: 'QNetworkRequest.KnownHeaders') -> typing.Any: ... + def setUrl(self, url: QtCore.QUrl) -> None: ... + def url(self) -> QtCore.QUrl: ... + + +class QNetworkSession(QtCore.QObject): + + class UsagePolicy(int): + NoPolicy = ... # type: QNetworkSession.UsagePolicy + NoBackgroundTrafficPolicy = ... # type: QNetworkSession.UsagePolicy + + class SessionError(int): + UnknownSessionError = ... # type: QNetworkSession.SessionError + SessionAbortedError = ... # type: QNetworkSession.SessionError + RoamingError = ... # type: QNetworkSession.SessionError + OperationNotSupportedError = ... # type: QNetworkSession.SessionError + InvalidConfigurationError = ... # type: QNetworkSession.SessionError + + class State(int): + Invalid = ... # type: QNetworkSession.State + NotAvailable = ... # type: QNetworkSession.State + Connecting = ... # type: QNetworkSession.State + Connected = ... # type: QNetworkSession.State + Closing = ... # type: QNetworkSession.State + Disconnected = ... # type: QNetworkSession.State + Roaming = ... # type: QNetworkSession.State + + class UsagePolicies(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QNetworkSession.UsagePolicies', 'QNetworkSession.UsagePolicy']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QNetworkSession.UsagePolicies', 'QNetworkSession.UsagePolicy']) -> 'QNetworkSession.UsagePolicies': ... + def __xor__(self, f: typing.Union['QNetworkSession.UsagePolicies', 'QNetworkSession.UsagePolicy']) -> 'QNetworkSession.UsagePolicies': ... + def __ior__(self, f: typing.Union['QNetworkSession.UsagePolicies', 'QNetworkSession.UsagePolicy']) -> 'QNetworkSession.UsagePolicies': ... + def __or__(self, f: typing.Union['QNetworkSession.UsagePolicies', 'QNetworkSession.UsagePolicy']) -> 'QNetworkSession.UsagePolicies': ... + def __iand__(self, f: typing.Union['QNetworkSession.UsagePolicies', 'QNetworkSession.UsagePolicy']) -> 'QNetworkSession.UsagePolicies': ... + def __and__(self, f: typing.Union['QNetworkSession.UsagePolicies', 'QNetworkSession.UsagePolicy']) -> 'QNetworkSession.UsagePolicies': ... + def __invert__(self) -> 'QNetworkSession.UsagePolicies': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, connConfig: QNetworkConfiguration, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + usagePoliciesChanged: typing.ClassVar[QtCore.pyqtSignal] + def usagePolicies(self) -> 'QNetworkSession.UsagePolicies': ... + def disconnectNotify(self, signal: QtCore.QMetaMethod) -> None: ... + def connectNotify(self, signal: QtCore.QMetaMethod) -> None: ... + newConfigurationActivated: typing.ClassVar[QtCore.pyqtSignal] + preferredConfigurationChanged: typing.ClassVar[QtCore.pyqtSignal] + closed: typing.ClassVar[QtCore.pyqtSignal] + opened: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def reject(self) -> None: ... + def accept(self) -> None: ... + def ignore(self) -> None: ... + def migrate(self) -> None: ... + def stop(self) -> None: ... + def close(self) -> None: ... + def open(self) -> None: ... + def waitForOpened(self, msecs: int = ...) -> bool: ... + def activeTime(self) -> int: ... + def bytesReceived(self) -> int: ... + def bytesWritten(self) -> int: ... + def setSessionProperty(self, key: typing.Optional[str], value: typing.Any) -> None: ... + def sessionProperty(self, key: typing.Optional[str]) -> typing.Any: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def state(self) -> 'QNetworkSession.State': ... + def interface(self) -> QNetworkInterface: ... + def configuration(self) -> QNetworkConfiguration: ... + def isOpen(self) -> bool: ... + + +class QOcspResponse(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QOcspResponse') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __hash__(self) -> int: ... + def swap(self, other: 'QOcspResponse') -> None: ... + def subject(self) -> 'QSslCertificate': ... + def responder(self) -> 'QSslCertificate': ... + def revocationReason(self) -> QOcspRevocationReason: ... + def certificateStatus(self) -> QOcspCertificateStatus: ... + + +class QPasswordDigestor(PyQt5.sip.simplewrapper): + + def deriveKeyPbkdf2(self, algorithm: QtCore.QCryptographicHash.Algorithm, password: typing.Union[QtCore.QByteArray, bytes, bytearray], salt: typing.Union[QtCore.QByteArray, bytes, bytearray], iterations: int, dkLen: int) -> QtCore.QByteArray: ... + def deriveKeyPbkdf1(self, algorithm: QtCore.QCryptographicHash.Algorithm, password: typing.Union[QtCore.QByteArray, bytes, bytearray], salt: typing.Union[QtCore.QByteArray, bytes, bytearray], iterations: int, dkLen: int) -> QtCore.QByteArray: ... + + +class QSsl(PyQt5.sip.simplewrapper): + + class SslOption(int): + SslOptionDisableEmptyFragments = ... # type: QSsl.SslOption + SslOptionDisableSessionTickets = ... # type: QSsl.SslOption + SslOptionDisableCompression = ... # type: QSsl.SslOption + SslOptionDisableServerNameIndication = ... # type: QSsl.SslOption + SslOptionDisableLegacyRenegotiation = ... # type: QSsl.SslOption + SslOptionDisableSessionSharing = ... # type: QSsl.SslOption + SslOptionDisableSessionPersistence = ... # type: QSsl.SslOption + SslOptionDisableServerCipherPreference = ... # type: QSsl.SslOption + + class SslProtocol(int): + UnknownProtocol = ... # type: QSsl.SslProtocol + SslV3 = ... # type: QSsl.SslProtocol + SslV2 = ... # type: QSsl.SslProtocol + TlsV1_0 = ... # type: QSsl.SslProtocol + TlsV1_0OrLater = ... # type: QSsl.SslProtocol + TlsV1_1 = ... # type: QSsl.SslProtocol + TlsV1_1OrLater = ... # type: QSsl.SslProtocol + TlsV1_2 = ... # type: QSsl.SslProtocol + TlsV1_2OrLater = ... # type: QSsl.SslProtocol + AnyProtocol = ... # type: QSsl.SslProtocol + TlsV1SslV3 = ... # type: QSsl.SslProtocol + SecureProtocols = ... # type: QSsl.SslProtocol + DtlsV1_0 = ... # type: QSsl.SslProtocol + DtlsV1_0OrLater = ... # type: QSsl.SslProtocol + DtlsV1_2 = ... # type: QSsl.SslProtocol + DtlsV1_2OrLater = ... # type: QSsl.SslProtocol + TlsV1_3 = ... # type: QSsl.SslProtocol + TlsV1_3OrLater = ... # type: QSsl.SslProtocol + + class AlternativeNameEntryType(int): + EmailEntry = ... # type: QSsl.AlternativeNameEntryType + DnsEntry = ... # type: QSsl.AlternativeNameEntryType + IpAddressEntry = ... # type: QSsl.AlternativeNameEntryType + + class KeyAlgorithm(int): + Opaque = ... # type: QSsl.KeyAlgorithm + Rsa = ... # type: QSsl.KeyAlgorithm + Dsa = ... # type: QSsl.KeyAlgorithm + Ec = ... # type: QSsl.KeyAlgorithm + Dh = ... # type: QSsl.KeyAlgorithm + + class EncodingFormat(int): + Pem = ... # type: QSsl.EncodingFormat + Der = ... # type: QSsl.EncodingFormat + + class KeyType(int): + PrivateKey = ... # type: QSsl.KeyType + PublicKey = ... # type: QSsl.KeyType + + class SslOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSsl.SslOptions', 'QSsl.SslOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSsl.SslOptions', 'QSsl.SslOption']) -> 'QSsl.SslOptions': ... + def __xor__(self, f: typing.Union['QSsl.SslOptions', 'QSsl.SslOption']) -> 'QSsl.SslOptions': ... + def __ior__(self, f: typing.Union['QSsl.SslOptions', 'QSsl.SslOption']) -> 'QSsl.SslOptions': ... + def __or__(self, f: typing.Union['QSsl.SslOptions', 'QSsl.SslOption']) -> 'QSsl.SslOptions': ... + def __iand__(self, f: typing.Union['QSsl.SslOptions', 'QSsl.SslOption']) -> 'QSsl.SslOptions': ... + def __and__(self, f: typing.Union['QSsl.SslOptions', 'QSsl.SslOption']) -> 'QSsl.SslOptions': ... + def __invert__(self) -> 'QSsl.SslOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + +class QSslCertificate(PyQt5.sipsimplewrapper): + + class PatternSyntax(int): + RegularExpression = ... # type: QSslCertificate.PatternSyntax + Wildcard = ... # type: QSslCertificate.PatternSyntax + FixedString = ... # type: QSslCertificate.PatternSyntax + + class SubjectInfo(int): + Organization = ... # type: QSslCertificate.SubjectInfo + CommonName = ... # type: QSslCertificate.SubjectInfo + LocalityName = ... # type: QSslCertificate.SubjectInfo + OrganizationalUnitName = ... # type: QSslCertificate.SubjectInfo + CountryName = ... # type: QSslCertificate.SubjectInfo + StateOrProvinceName = ... # type: QSslCertificate.SubjectInfo + DistinguishedNameQualifier = ... # type: QSslCertificate.SubjectInfo + SerialNumber = ... # type: QSslCertificate.SubjectInfo + EmailAddress = ... # type: QSslCertificate.SubjectInfo + + @typing.overload + def __init__(self, device: typing.Optional[QtCore.QIODevice], format: QSsl.EncodingFormat = ...) -> None: ... + @typing.overload + def __init__(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray] = ..., format: QSsl.EncodingFormat = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QSslCertificate') -> None: ... + + def subjectDisplayName(self) -> str: ... + def issuerDisplayName(self) -> str: ... + @staticmethod + def importPkcs12(device: typing.Optional[QtCore.QIODevice], key: typing.Optional['QSslKey'], certificate: typing.Optional['QSslCertificate'], caCertificates: typing.Optional[typing.Iterable['QSslCertificate']] = ..., passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> bool: ... + def __hash__(self) -> int: ... + def isSelfSigned(self) -> bool: ... + @staticmethod + def verify(certificateChain: typing.Iterable['QSslCertificate'], hostName: typing.Optional[str] = ...) -> typing.List['QSslError']: ... + def toText(self) -> str: ... + def extensions(self) -> typing.List['QSslCertificateExtension']: ... + def issuerInfoAttributes(self) -> typing.List[QtCore.QByteArray]: ... + def subjectInfoAttributes(self) -> typing.List[QtCore.QByteArray]: ... + def isBlacklisted(self) -> bool: ... + def swap(self, other: 'QSslCertificate') -> None: ... + def handle(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + @staticmethod + def fromData(data: typing.Union[QtCore.QByteArray, bytes, bytearray], format: QSsl.EncodingFormat = ...) -> typing.List['QSslCertificate']: ... + @staticmethod + def fromDevice(device: typing.Optional[QtCore.QIODevice], format: QSsl.EncodingFormat = ...) -> typing.List['QSslCertificate']: ... + @staticmethod + def fromPath(path: typing.Optional[str], format: QSsl.EncodingFormat = ..., syntax: QtCore.QRegExp.PatternSyntax = ...) -> typing.List['QSslCertificate']: ... + def toDer(self) -> QtCore.QByteArray: ... + def toPem(self) -> QtCore.QByteArray: ... + def publicKey(self) -> 'QSslKey': ... + def expiryDate(self) -> QtCore.QDateTime: ... + def effectiveDate(self) -> QtCore.QDateTime: ... + def subjectAlternativeNames(self) -> typing.Dict[QSsl.AlternativeNameEntryType, typing.List[str]]: ... + @typing.overload + def subjectInfo(self, info: 'QSslCertificate.SubjectInfo') -> typing.List[str]: ... + @typing.overload + def subjectInfo(self, attribute: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.List[str]: ... + @typing.overload + def issuerInfo(self, info: 'QSslCertificate.SubjectInfo') -> typing.List[str]: ... + @typing.overload + def issuerInfo(self, attribute: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.List[str]: ... + def digest(self, algorithm: QtCore.QCryptographicHash.Algorithm = ...) -> QtCore.QByteArray: ... + def serialNumber(self) -> QtCore.QByteArray: ... + def version(self) -> QtCore.QByteArray: ... + def clear(self) -> None: ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QSslCertificateExtension(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QSslCertificateExtension') -> None: ... + + def isSupported(self) -> bool: ... + def isCritical(self) -> bool: ... + def value(self) -> typing.Any: ... + def name(self) -> str: ... + def oid(self) -> str: ... + def swap(self, other: 'QSslCertificateExtension') -> None: ... + + +class QSslCipher(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str], protocol: QSsl.SslProtocol) -> None: ... + @typing.overload + def __init__(self, other: 'QSslCipher') -> None: ... + + def swap(self, other: 'QSslCipher') -> None: ... + def protocol(self) -> QSsl.SslProtocol: ... + def protocolString(self) -> str: ... + def encryptionMethod(self) -> str: ... + def authenticationMethod(self) -> str: ... + def keyExchangeMethod(self) -> str: ... + def usedBits(self) -> int: ... + def supportedBits(self) -> int: ... + def name(self) -> str: ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QSslConfiguration(PyQt5.sipsimplewrapper): + + class NextProtocolNegotiationStatus(int): + NextProtocolNegotiationNone = ... # type: QSslConfiguration.NextProtocolNegotiationStatus + NextProtocolNegotiationNegotiated = ... # type: QSslConfiguration.NextProtocolNegotiationStatus + NextProtocolNegotiationUnsupported = ... # type: QSslConfiguration.NextProtocolNegotiationStatus + + NextProtocolHttp1_1 = ... # type: bytes + NextProtocolSpdy3_0 = ... # type: bytes + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QSslConfiguration') -> None: ... + + @typing.overload + def addCaCertificates(self, path: typing.Optional[str], format: QSsl.EncodingFormat = ..., syntax: QSslCertificate.PatternSyntax = ...) -> bool: ... + @typing.overload + def addCaCertificates(self, certificates: typing.Iterable[QSslCertificate]) -> None: ... + def addCaCertificate(self, certificate: QSslCertificate) -> None: ... + def ocspStaplingEnabled(self) -> bool: ... + def setOcspStaplingEnabled(self, enable: bool) -> None: ... + def setBackendConfiguration(self, backendConfiguration: typing.Dict[typing.Union[QtCore.QByteArray, bytes, bytearray], typing.Any] = ...) -> None: ... + def setBackendConfigurationOption(self, name: typing.Union[QtCore.QByteArray, bytes, bytearray], value: typing.Any) -> None: ... + def backendConfiguration(self) -> typing.Dict[QtCore.QByteArray, typing.Any]: ... + def setDiffieHellmanParameters(self, dhparams: 'QSslDiffieHellmanParameters') -> None: ... + def diffieHellmanParameters(self) -> 'QSslDiffieHellmanParameters': ... + def setPreSharedKeyIdentityHint(self, hint: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def preSharedKeyIdentityHint(self) -> QtCore.QByteArray: ... + def ephemeralServerKey(self) -> 'QSslKey': ... + @staticmethod + def supportedEllipticCurves() -> typing.List['QSslEllipticCurve']: ... + def setEllipticCurves(self, curves: typing.Iterable['QSslEllipticCurve']) -> None: ... + def ellipticCurves(self) -> typing.List['QSslEllipticCurve']: ... + @staticmethod + def systemCaCertificates() -> typing.List[QSslCertificate]: ... + @staticmethod + def supportedCiphers() -> typing.List[QSslCipher]: ... + def sessionProtocol(self) -> QSsl.SslProtocol: ... + def nextProtocolNegotiationStatus(self) -> 'QSslConfiguration.NextProtocolNegotiationStatus': ... + def nextNegotiatedProtocol(self) -> QtCore.QByteArray: ... + def allowedNextProtocols(self) -> typing.List[QtCore.QByteArray]: ... + def setAllowedNextProtocols(self, protocols: typing.Iterable[typing.Union[QtCore.QByteArray, bytes, bytearray]]) -> None: ... + def sessionTicketLifeTimeHint(self) -> int: ... + def setSessionTicket(self, sessionTicket: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def sessionTicket(self) -> QtCore.QByteArray: ... + def setLocalCertificateChain(self, localChain: typing.Iterable[QSslCertificate]) -> None: ... + def localCertificateChain(self) -> typing.List[QSslCertificate]: ... + def swap(self, other: 'QSslConfiguration') -> None: ... + def testSslOption(self, option: QSsl.SslOption) -> bool: ... + def setSslOption(self, option: QSsl.SslOption, on: bool) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + @staticmethod + def setDefaultConfiguration(configuration: 'QSslConfiguration') -> None: ... + @staticmethod + def defaultConfiguration() -> 'QSslConfiguration': ... + def setCaCertificates(self, certificates: typing.Iterable[QSslCertificate]) -> None: ... + def caCertificates(self) -> typing.List[QSslCertificate]: ... + def setCiphers(self, ciphers: typing.Iterable[QSslCipher]) -> None: ... + def ciphers(self) -> typing.List[QSslCipher]: ... + def setPrivateKey(self, key: 'QSslKey') -> None: ... + def privateKey(self) -> 'QSslKey': ... + def sessionCipher(self) -> QSslCipher: ... + def peerCertificateChain(self) -> typing.List[QSslCertificate]: ... + def peerCertificate(self) -> QSslCertificate: ... + def setLocalCertificate(self, certificate: QSslCertificate) -> None: ... + def localCertificate(self) -> QSslCertificate: ... + def setPeerVerifyDepth(self, depth: int) -> None: ... + def peerVerifyDepth(self) -> int: ... + def setPeerVerifyMode(self, mode: 'QSslSocket.PeerVerifyMode') -> None: ... + def peerVerifyMode(self) -> 'QSslSocket.PeerVerifyMode': ... + def setProtocol(self, protocol: QSsl.SslProtocol) -> None: ... + def protocol(self) -> QSsl.SslProtocol: ... + def isNull(self) -> bool: ... + + +class QSslDiffieHellmanParameters(PyQt5.sipsimplewrapper): + + class Error(int): + NoError = ... # type: QSslDiffieHellmanParameters.Error + InvalidInputDataError = ... # type: QSslDiffieHellmanParameters.Error + UnsafeParametersError = ... # type: QSslDiffieHellmanParameters.Error + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QSslDiffieHellmanParameters') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __hash__(self) -> int: ... + def errorString(self) -> str: ... + def error(self) -> 'QSslDiffieHellmanParameters.Error': ... + def isValid(self) -> bool: ... + def isEmpty(self) -> bool: ... + @typing.overload + @staticmethod + def fromEncoded(encoded: typing.Union[QtCore.QByteArray, bytes, bytearray], encoding: QSsl.EncodingFormat = ...) -> 'QSslDiffieHellmanParameters': ... + @typing.overload + @staticmethod + def fromEncoded(device: typing.Optional[QtCore.QIODevice], encoding: QSsl.EncodingFormat = ...) -> 'QSslDiffieHellmanParameters': ... + @staticmethod + def defaultParameters() -> 'QSslDiffieHellmanParameters': ... + def swap(self, other: 'QSslDiffieHellmanParameters') -> None: ... + + +class QSslEllipticCurve(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSslEllipticCurve') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def __hash__(self) -> int: ... + def isTlsNamedCurve(self) -> bool: ... + def isValid(self) -> bool: ... + def longName(self) -> str: ... + def shortName(self) -> str: ... + @staticmethod + def fromLongName(name: typing.Optional[str]) -> 'QSslEllipticCurve': ... + @staticmethod + def fromShortName(name: typing.Optional[str]) -> 'QSslEllipticCurve': ... + + +class QSslError(PyQt5.sipsimplewrapper): + + class SslError(int): + UnspecifiedError = ... # type: QSslError.SslError + NoError = ... # type: QSslError.SslError + UnableToGetIssuerCertificate = ... # type: QSslError.SslError + UnableToDecryptCertificateSignature = ... # type: QSslError.SslError + UnableToDecodeIssuerPublicKey = ... # type: QSslError.SslError + CertificateSignatureFailed = ... # type: QSslError.SslError + CertificateNotYetValid = ... # type: QSslError.SslError + CertificateExpired = ... # type: QSslError.SslError + InvalidNotBeforeField = ... # type: QSslError.SslError + InvalidNotAfterField = ... # type: QSslError.SslError + SelfSignedCertificate = ... # type: QSslError.SslError + SelfSignedCertificateInChain = ... # type: QSslError.SslError + UnableToGetLocalIssuerCertificate = ... # type: QSslError.SslError + UnableToVerifyFirstCertificate = ... # type: QSslError.SslError + CertificateRevoked = ... # type: QSslError.SslError + InvalidCaCertificate = ... # type: QSslError.SslError + PathLengthExceeded = ... # type: QSslError.SslError + InvalidPurpose = ... # type: QSslError.SslError + CertificateUntrusted = ... # type: QSslError.SslError + CertificateRejected = ... # type: QSslError.SslError + SubjectIssuerMismatch = ... # type: QSslError.SslError + AuthorityIssuerSerialNumberMismatch = ... # type: QSslError.SslError + NoPeerCertificate = ... # type: QSslError.SslError + HostNameMismatch = ... # type: QSslError.SslError + NoSslSupport = ... # type: QSslError.SslError + CertificateBlacklisted = ... # type: QSslError.SslError + CertificateStatusUnknown = ... # type: QSslError.SslError + OcspNoResponseFound = ... # type: QSslError.SslError + OcspMalformedRequest = ... # type: QSslError.SslError + OcspMalformedResponse = ... # type: QSslError.SslError + OcspInternalError = ... # type: QSslError.SslError + OcspTryLater = ... # type: QSslError.SslError + OcspSigRequred = ... # type: QSslError.SslError + OcspUnauthorized = ... # type: QSslError.SslError + OcspResponseCannotBeTrusted = ... # type: QSslError.SslError + OcspResponseCertIdUnknown = ... # type: QSslError.SslError + OcspResponseExpired = ... # type: QSslError.SslError + OcspStatusUnknown = ... # type: QSslError.SslError + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, error: 'QSslError.SslError') -> None: ... + @typing.overload + def __init__(self, error: 'QSslError.SslError', certificate: QSslCertificate) -> None: ... + @typing.overload + def __init__(self, other: 'QSslError') -> None: ... + + def __hash__(self) -> int: ... + def swap(self, other: 'QSslError') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def certificate(self) -> QSslCertificate: ... + def errorString(self) -> str: ... + def error(self) -> 'QSslError.SslError': ... + + +class QSslKey(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, encoded: typing.Union[QtCore.QByteArray, bytes, bytearray], algorithm: QSsl.KeyAlgorithm, encoding: QSsl.EncodingFormat = ..., type: QSsl.KeyType = ..., passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + @typing.overload + def __init__(self, device: typing.Optional[QtCore.QIODevice], algorithm: QSsl.KeyAlgorithm, encoding: QSsl.EncodingFormat = ..., type: QSsl.KeyType = ..., passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + @typing.overload + def __init__(self, handle: typing.Optional[PyQt5.sip.voidptr], type: QSsl.KeyType = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QSslKey') -> None: ... + + def swap(self, other: 'QSslKey') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def handle(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def toDer(self, passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> QtCore.QByteArray: ... + def toPem(self, passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> QtCore.QByteArray: ... + def algorithm(self) -> QSsl.KeyAlgorithm: ... + def type(self) -> QSsl.KeyType: ... + def length(self) -> int: ... + def clear(self) -> None: ... + def isNull(self) -> bool: ... + + +class QSslPreSharedKeyAuthenticator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, authenticator: 'QSslPreSharedKeyAuthenticator') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def maximumPreSharedKeyLength(self) -> int: ... + def preSharedKey(self) -> QtCore.QByteArray: ... + def setPreSharedKey(self, preSharedKey: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def maximumIdentityLength(self) -> int: ... + def identity(self) -> QtCore.QByteArray: ... + def setIdentity(self, identity: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def identityHint(self) -> QtCore.QByteArray: ... + def swap(self, authenticator: 'QSslPreSharedKeyAuthenticator') -> None: ... + + +class QTcpSocket(QAbstractSocket): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + +class QSslSocket(QTcpSocket): + + class PeerVerifyMode(int): + VerifyNone = ... # type: QSslSocket.PeerVerifyMode + QueryPeer = ... # type: QSslSocket.PeerVerifyMode + VerifyPeer = ... # type: QSslSocket.PeerVerifyMode + AutoVerifyPeer = ... # type: QSslSocket.PeerVerifyMode + + class SslMode(int): + UnencryptedMode = ... # type: QSslSocket.SslMode + SslClientMode = ... # type: QSslSocket.SslMode + SslServerMode = ... # type: QSslSocket.SslMode + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + newSessionTicketReceived: typing.ClassVar[QtCore.pyqtSignal] + def sslHandshakeErrors(self) -> typing.List[QSslError]: ... + def ocspResponses(self) -> typing.List[QOcspResponse]: ... + @staticmethod + def sslLibraryBuildVersionString() -> str: ... + @staticmethod + def sslLibraryBuildVersionNumber() -> int: ... + def sessionProtocol(self) -> QSsl.SslProtocol: ... + def localCertificateChain(self) -> typing.List[QSslCertificate]: ... + def setLocalCertificateChain(self, localChain: typing.Iterable[QSslCertificate]) -> None: ... + @staticmethod + def sslLibraryVersionString() -> str: ... + @staticmethod + def sslLibraryVersionNumber() -> int: ... + def disconnectFromHost(self) -> None: ... + def connectToHost(self, hostName: typing.Optional[str], port: int, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ..., protocol: QAbstractSocket.NetworkLayerProtocol = ...) -> None: ... + def resume(self) -> None: ... + def setPeerVerifyName(self, hostName: typing.Optional[str]) -> None: ... + def peerVerifyName(self) -> str: ... + def socketOption(self, option: QAbstractSocket.SocketOption) -> typing.Any: ... + def setSocketOption(self, option: QAbstractSocket.SocketOption, value: typing.Any) -> None: ... + encryptedBytesWritten: typing.ClassVar[QtCore.pyqtSignal] + peerVerifyError: typing.ClassVar[QtCore.pyqtSignal] + def setSslConfiguration(self, config: QSslConfiguration) -> None: ... + def sslConfiguration(self) -> QSslConfiguration: ... + def encryptedBytesToWrite(self) -> int: ... + def encryptedBytesAvailable(self) -> int: ... + def setReadBufferSize(self, size: int) -> None: ... + def setPeerVerifyDepth(self, depth: int) -> None: ... + def peerVerifyDepth(self) -> int: ... + def setPeerVerifyMode(self, mode: 'QSslSocket.PeerVerifyMode') -> None: ... + def peerVerifyMode(self) -> 'QSslSocket.PeerVerifyMode': ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readData(self, maxlen: int) -> bytes: ... + preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + modeChanged: typing.ClassVar[QtCore.pyqtSignal] + encrypted: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def ignoreSslErrors(self) -> None: ... + @typing.overload + def ignoreSslErrors(self, errors: typing.Iterable[QSslError]) -> None: ... + def startServerEncryption(self) -> None: ... + def startClientEncryption(self) -> None: ... + @staticmethod + def supportsSsl() -> bool: ... + sslErrors: typing.ClassVar[QtCore.pyqtSignal] + def waitForDisconnected(self, msecs: int = ...) -> bool: ... + def waitForBytesWritten(self, msecs: int = ...) -> bool: ... + def waitForReadyRead(self, msecs: int = ...) -> bool: ... + def waitForEncrypted(self, msecs: int = ...) -> bool: ... + def waitForConnected(self, msecs: int = ...) -> bool: ... + @staticmethod + def systemCaCertificates() -> typing.List[QSslCertificate]: ... + @staticmethod + def defaultCaCertificates() -> typing.List[QSslCertificate]: ... + @staticmethod + def setDefaultCaCertificates(certificates: typing.Iterable[QSslCertificate]) -> None: ... + @staticmethod + def addDefaultCaCertificate(certificate: QSslCertificate) -> None: ... + @typing.overload + @staticmethod + def addDefaultCaCertificates(path: typing.Optional[str], format: QSsl.EncodingFormat = ..., syntax: QtCore.QRegExp.PatternSyntax = ...) -> bool: ... + @typing.overload + @staticmethod + def addDefaultCaCertificates(certificates: typing.Iterable[QSslCertificate]) -> None: ... + def caCertificates(self) -> typing.List[QSslCertificate]: ... + def setCaCertificates(self, certificates: typing.Iterable[QSslCertificate]) -> None: ... + def addCaCertificate(self, certificate: QSslCertificate) -> None: ... + @typing.overload + def addCaCertificates(self, path: typing.Optional[str], format: QSsl.EncodingFormat = ..., syntax: QtCore.QRegExp.PatternSyntax = ...) -> bool: ... + @typing.overload + def addCaCertificates(self, certificates: typing.Iterable[QSslCertificate]) -> None: ... + @staticmethod + def supportedCiphers() -> typing.List[QSslCipher]: ... + @staticmethod + def defaultCiphers() -> typing.List[QSslCipher]: ... + @staticmethod + def setDefaultCiphers(ciphers: typing.Iterable[QSslCipher]) -> None: ... + @typing.overload + def setCiphers(self, ciphers: typing.Iterable[QSslCipher]) -> None: ... + @typing.overload + def setCiphers(self, ciphers: typing.Optional[str]) -> None: ... + def ciphers(self) -> typing.List[QSslCipher]: ... + def privateKey(self) -> QSslKey: ... + @typing.overload + def setPrivateKey(self, key: QSslKey) -> None: ... + @typing.overload + def setPrivateKey(self, fileName: typing.Optional[str], algorithm: QSsl.KeyAlgorithm = ..., format: QSsl.EncodingFormat = ..., passPhrase: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + def sessionCipher(self) -> QSslCipher: ... + def peerCertificateChain(self) -> typing.List[QSslCertificate]: ... + def peerCertificate(self) -> QSslCertificate: ... + def localCertificate(self) -> QSslCertificate: ... + @typing.overload + def setLocalCertificate(self, certificate: QSslCertificate) -> None: ... + @typing.overload + def setLocalCertificate(self, path: typing.Optional[str], format: QSsl.EncodingFormat = ...) -> None: ... + def abort(self) -> None: ... + def flush(self) -> bool: ... + def atEnd(self) -> bool: ... + def close(self) -> None: ... + def canReadLine(self) -> bool: ... + def bytesToWrite(self) -> int: ... + def bytesAvailable(self) -> int: ... + def setProtocol(self, protocol: QSsl.SslProtocol) -> None: ... + def protocol(self) -> QSsl.SslProtocol: ... + def isEncrypted(self) -> bool: ... + def mode(self) -> 'QSslSocket.SslMode': ... + def setSocketDescriptor(self, socketDescriptor: PyQt5.sip.voidptr, state: QAbstractSocket.SocketState = ..., mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ...) -> bool: ... + @typing.overload + def connectToHostEncrypted(self, hostName: typing.Optional[str], port: int, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ..., protocol: QAbstractSocket.NetworkLayerProtocol = ...) -> None: ... + @typing.overload + def connectToHostEncrypted(self, hostName: typing.Optional[str], port: int, sslPeerName: typing.Optional[str], mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag] = ..., protocol: QAbstractSocket.NetworkLayerProtocol = ...) -> None: ... + + +class QTcpServer(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + acceptError: typing.ClassVar[QtCore.pyqtSignal] + newConnection: typing.ClassVar[QtCore.pyqtSignal] + def addPendingConnection(self, socket: typing.Optional[QTcpSocket]) -> None: ... + def incomingConnection(self, handle: PyQt5.sip.voidptr) -> None: ... + def resumeAccepting(self) -> None: ... + def pauseAccepting(self) -> None: ... + def proxy(self) -> QNetworkProxy: ... + def setProxy(self, networkProxy: QNetworkProxy) -> None: ... + def errorString(self) -> str: ... + def serverError(self) -> QAbstractSocket.SocketError: ... + def nextPendingConnection(self) -> typing.Optional[QTcpSocket]: ... + def hasPendingConnections(self) -> bool: ... + def waitForNewConnection(self, msecs: int = ...) -> typing.Tuple[bool, typing.Optional[bool]]: ... + def setSocketDescriptor(self, socketDescriptor: PyQt5.sip.voidptr) -> bool: ... + def socketDescriptor(self) -> PyQt5.sip.voidptr: ... + def serverAddress(self) -> QHostAddress: ... + def serverPort(self) -> int: ... + def maxPendingConnections(self) -> int: ... + def setMaxPendingConnections(self, numConnections: int) -> None: ... + def isListening(self) -> bool: ... + def close(self) -> None: ... + def listen(self, address: typing.Union[QHostAddress, QHostAddress.SpecialAddress] = ..., port: int = ...) -> bool: ... + + +class QUdpSocket(QAbstractSocket): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def receiveDatagram(self, maxSize: int = ...) -> QNetworkDatagram: ... + def setMulticastInterface(self, iface: QNetworkInterface) -> None: ... + def multicastInterface(self) -> QNetworkInterface: ... + @typing.overload + def leaveMulticastGroup(self, groupAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> bool: ... + @typing.overload + def leaveMulticastGroup(self, groupAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress], iface: QNetworkInterface) -> bool: ... + @typing.overload + def joinMulticastGroup(self, groupAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress]) -> bool: ... + @typing.overload + def joinMulticastGroup(self, groupAddress: typing.Union[QHostAddress, QHostAddress.SpecialAddress], iface: QNetworkInterface) -> bool: ... + @typing.overload + def writeDatagram(self, data: typing.Optional[PyQt5.sip.array[bytes]], host: typing.Union[QHostAddress, QHostAddress.SpecialAddress], port: int) -> int: ... + @typing.overload + def writeDatagram(self, datagram: typing.Union[QtCore.QByteArray, bytes, bytearray], host: typing.Union[QHostAddress, QHostAddress.SpecialAddress], port: int) -> int: ... + @typing.overload + def writeDatagram(self, datagram: QNetworkDatagram) -> int: ... + def readDatagram(self, maxlen: int) -> typing.Tuple[bytes, typing.Optional[QHostAddress], typing.Optional[int]]: ... + def pendingDatagramSize(self) -> int: ... + def hasPendingDatagrams(self) -> bool: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtNfc.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtNfc.abi3.so new file mode 100644 index 0000000..58277d2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtNfc.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtNfc.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtNfc.pyi new file mode 100644 index 0000000..61ddb9a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtNfc.pyi @@ -0,0 +1,461 @@ +# The PEP 484 type hints stub file for the QtNfc module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QNdefFilter(PyQt5.sipsimplewrapper): + + class Record(PyQt5.sipsimplewrapper): + + maximum = ... # type: int + minimum = ... # type: int + type = ... # type: typing.Union[QtCore.QByteArray, bytes, bytearray] + typeNameFormat = ... # type: 'QNdefRecord.TypeNameFormat' + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QNdefFilter.Record') -> None: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QNdefFilter') -> None: ... + + def recordAt(self, i: int) -> 'QNdefFilter.Record': ... + def __len__(self) -> int: ... + def recordCount(self) -> int: ... + @typing.overload + def appendRecord(self, typeNameFormat: 'QNdefRecord.TypeNameFormat', type: typing.Union[QtCore.QByteArray, bytes, bytearray], min: int = ..., max: int = ...) -> None: ... + @typing.overload + def appendRecord(self, record: 'QNdefFilter.Record') -> None: ... + def orderMatch(self) -> bool: ... + def setOrderMatch(self, on: bool) -> None: ... + def clear(self) -> None: ... + + +class QNdefMessage(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, record: 'QNdefRecord') -> None: ... + @typing.overload + def __init__(self, message: 'QNdefMessage') -> None: ... + @typing.overload + def __init__(self, records: typing.Iterable['QNdefRecord']) -> None: ... + + def __ne__(self, other: object): ... + @staticmethod + def fromByteArray(message: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> 'QNdefMessage': ... + def __delitem__(self, i: int) -> None: ... + def __setitem__(self, i: int, value: 'QNdefRecord') -> None: ... + def __getitem__(self, i: int) -> 'QNdefRecord': ... + def __len__(self) -> int: ... + def toByteArray(self) -> QtCore.QByteArray: ... + def __eq__(self, other: object): ... + + +class QNdefRecord(PyQt5.sipsimplewrapper): + + class TypeNameFormat(int): + Empty = ... # type: QNdefRecord.TypeNameFormat + NfcRtd = ... # type: QNdefRecord.TypeNameFormat + Mime = ... # type: QNdefRecord.TypeNameFormat + Uri = ... # type: QNdefRecord.TypeNameFormat + ExternalRtd = ... # type: QNdefRecord.TypeNameFormat + Unknown = ... # type: QNdefRecord.TypeNameFormat + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QNdefRecord') -> None: ... + + def __hash__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isEmpty(self) -> bool: ... + def payload(self) -> QtCore.QByteArray: ... + def setPayload(self, payload: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def id(self) -> QtCore.QByteArray: ... + def setId(self, id: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def type(self) -> QtCore.QByteArray: ... + def setType(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def typeNameFormat(self) -> 'QNdefRecord.TypeNameFormat': ... + def setTypeNameFormat(self, typeNameFormat: 'QNdefRecord.TypeNameFormat') -> None: ... + + +class QNdefNfcIconRecord(QNdefRecord): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: QNdefRecord) -> None: ... + @typing.overload + def __init__(self, a0: 'QNdefNfcIconRecord') -> None: ... + + def data(self) -> QtCore.QByteArray: ... + def setData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + + +class QNdefNfcSmartPosterRecord(QNdefRecord): + + class Action(int): + UnspecifiedAction = ... # type: QNdefNfcSmartPosterRecord.Action + DoAction = ... # type: QNdefNfcSmartPosterRecord.Action + SaveAction = ... # type: QNdefNfcSmartPosterRecord.Action + EditAction = ... # type: QNdefNfcSmartPosterRecord.Action + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QNdefNfcSmartPosterRecord') -> None: ... + @typing.overload + def __init__(self, other: QNdefRecord) -> None: ... + + def setTypeInfo(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def typeInfo(self) -> QtCore.QByteArray: ... + def setSize(self, size: int) -> None: ... + def size(self) -> int: ... + def setIcons(self, icons: typing.Iterable[QNdefNfcIconRecord]) -> None: ... + @typing.overload + def removeIcon(self, icon: QNdefNfcIconRecord) -> bool: ... + @typing.overload + def removeIcon(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + @typing.overload + def addIcon(self, icon: QNdefNfcIconRecord) -> None: ... + @typing.overload + def addIcon(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray], data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def iconRecords(self) -> typing.List[QNdefNfcIconRecord]: ... + def iconRecord(self, index: int) -> QNdefNfcIconRecord: ... + def icon(self, mimetype: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> QtCore.QByteArray: ... + def iconCount(self) -> int: ... + def setAction(self, act: 'QNdefNfcSmartPosterRecord.Action') -> None: ... + def action(self) -> 'QNdefNfcSmartPosterRecord.Action': ... + @typing.overload + def setUri(self, url: 'QNdefNfcUriRecord') -> None: ... + @typing.overload + def setUri(self, url: QtCore.QUrl) -> None: ... + def uriRecord(self) -> 'QNdefNfcUriRecord': ... + def uri(self) -> QtCore.QUrl: ... + def setTitles(self, titles: typing.Iterable['QNdefNfcTextRecord']) -> None: ... + @typing.overload + def removeTitle(self, text: 'QNdefNfcTextRecord') -> bool: ... + @typing.overload + def removeTitle(self, locale: typing.Optional[str]) -> bool: ... + @typing.overload + def addTitle(self, text: 'QNdefNfcTextRecord') -> bool: ... + @typing.overload + def addTitle(self, text: typing.Optional[str], locale: typing.Optional[str], encoding: 'QNdefNfcTextRecord.Encoding') -> bool: ... + def titleRecords(self) -> typing.List['QNdefNfcTextRecord']: ... + def titleRecord(self, index: int) -> 'QNdefNfcTextRecord': ... + def title(self, locale: typing.Optional[str] = ...) -> str: ... + def titleCount(self) -> int: ... + def hasTypeInfo(self) -> bool: ... + def hasSize(self) -> bool: ... + def hasIcon(self, mimetype: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> bool: ... + def hasAction(self) -> bool: ... + def hasTitle(self, locale: typing.Optional[str] = ...) -> bool: ... + def setPayload(self, payload: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + + +class QNdefNfcTextRecord(QNdefRecord): + + class Encoding(int): + Utf8 = ... # type: QNdefNfcTextRecord.Encoding + Utf16 = ... # type: QNdefNfcTextRecord.Encoding + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: QNdefRecord) -> None: ... + @typing.overload + def __init__(self, a0: 'QNdefNfcTextRecord') -> None: ... + + def setEncoding(self, encoding: 'QNdefNfcTextRecord.Encoding') -> None: ... + def encoding(self) -> 'QNdefNfcTextRecord.Encoding': ... + def setText(self, text: typing.Optional[str]) -> None: ... + def text(self) -> str: ... + def setLocale(self, locale: typing.Optional[str]) -> None: ... + def locale(self) -> str: ... + + +class QNdefNfcUriRecord(QNdefRecord): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: QNdefRecord) -> None: ... + @typing.overload + def __init__(self, a0: 'QNdefNfcUriRecord') -> None: ... + + def setUri(self, uri: QtCore.QUrl) -> None: ... + def uri(self) -> QtCore.QUrl: ... + + +class QNearFieldManager(QtCore.QObject): + + class AdapterState(int): + Offline = ... # type: QNearFieldManager.AdapterState + TurningOn = ... # type: QNearFieldManager.AdapterState + Online = ... # type: QNearFieldManager.AdapterState + TurningOff = ... # type: QNearFieldManager.AdapterState + + class TargetAccessMode(int): + NoTargetAccess = ... # type: QNearFieldManager.TargetAccessMode + NdefReadTargetAccess = ... # type: QNearFieldManager.TargetAccessMode + NdefWriteTargetAccess = ... # type: QNearFieldManager.TargetAccessMode + TagTypeSpecificTargetAccess = ... # type: QNearFieldManager.TargetAccessMode + + class TargetAccessModes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QNearFieldManager.TargetAccessModes', 'QNearFieldManager.TargetAccessMode']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QNearFieldManager.TargetAccessModes', 'QNearFieldManager.TargetAccessMode']) -> 'QNearFieldManager.TargetAccessModes': ... + def __xor__(self, f: typing.Union['QNearFieldManager.TargetAccessModes', 'QNearFieldManager.TargetAccessMode']) -> 'QNearFieldManager.TargetAccessModes': ... + def __ior__(self, f: typing.Union['QNearFieldManager.TargetAccessModes', 'QNearFieldManager.TargetAccessMode']) -> 'QNearFieldManager.TargetAccessModes': ... + def __or__(self, f: typing.Union['QNearFieldManager.TargetAccessModes', 'QNearFieldManager.TargetAccessMode']) -> 'QNearFieldManager.TargetAccessModes': ... + def __iand__(self, f: typing.Union['QNearFieldManager.TargetAccessModes', 'QNearFieldManager.TargetAccessMode']) -> 'QNearFieldManager.TargetAccessModes': ... + def __and__(self, f: typing.Union['QNearFieldManager.TargetAccessModes', 'QNearFieldManager.TargetAccessMode']) -> 'QNearFieldManager.TargetAccessModes': ... + def __invert__(self) -> 'QNearFieldManager.TargetAccessModes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + adapterStateChanged: typing.ClassVar[QtCore.pyqtSignal] + def isSupported(self) -> bool: ... + targetLost: typing.ClassVar[QtCore.pyqtSignal] + targetDetected: typing.ClassVar[QtCore.pyqtSignal] + def unregisterNdefMessageHandler(self, handlerId: int) -> bool: ... + @typing.overload + def registerNdefMessageHandler(self, slot: PYQT_SLOT) -> int: ... + @typing.overload + def registerNdefMessageHandler(self, typeNameFormat: QNdefRecord.TypeNameFormat, type: typing.Union[QtCore.QByteArray, bytes, bytearray], slot: PYQT_SLOT) -> int: ... + @typing.overload + def registerNdefMessageHandler(self, filter: QNdefFilter, slot: PYQT_SLOT) -> int: ... + def stopTargetDetection(self) -> None: ... + def startTargetDetection(self) -> bool: ... + def targetAccessModes(self) -> 'QNearFieldManager.TargetAccessModes': ... + def setTargetAccessModes(self, accessModes: typing.Union['QNearFieldManager.TargetAccessModes', 'QNearFieldManager.TargetAccessMode']) -> None: ... + def isAvailable(self) -> bool: ... + + +class QNearFieldShareManager(QtCore.QObject): + + class ShareMode(int): + NoShare = ... # type: QNearFieldShareManager.ShareMode + NdefShare = ... # type: QNearFieldShareManager.ShareMode + FileShare = ... # type: QNearFieldShareManager.ShareMode + + class ShareError(int): + NoError = ... # type: QNearFieldShareManager.ShareError + UnknownError = ... # type: QNearFieldShareManager.ShareError + InvalidShareContentError = ... # type: QNearFieldShareManager.ShareError + ShareCanceledError = ... # type: QNearFieldShareManager.ShareError + ShareInterruptedError = ... # type: QNearFieldShareManager.ShareError + ShareRejectedError = ... # type: QNearFieldShareManager.ShareError + UnsupportedShareModeError = ... # type: QNearFieldShareManager.ShareError + ShareAlreadyInProgressError = ... # type: QNearFieldShareManager.ShareError + SharePermissionDeniedError = ... # type: QNearFieldShareManager.ShareError + + class ShareModes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QNearFieldShareManager.ShareModes', 'QNearFieldShareManager.ShareMode']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QNearFieldShareManager.ShareModes', 'QNearFieldShareManager.ShareMode']) -> 'QNearFieldShareManager.ShareModes': ... + def __xor__(self, f: typing.Union['QNearFieldShareManager.ShareModes', 'QNearFieldShareManager.ShareMode']) -> 'QNearFieldShareManager.ShareModes': ... + def __ior__(self, f: typing.Union['QNearFieldShareManager.ShareModes', 'QNearFieldShareManager.ShareMode']) -> 'QNearFieldShareManager.ShareModes': ... + def __or__(self, f: typing.Union['QNearFieldShareManager.ShareModes', 'QNearFieldShareManager.ShareMode']) -> 'QNearFieldShareManager.ShareModes': ... + def __iand__(self, f: typing.Union['QNearFieldShareManager.ShareModes', 'QNearFieldShareManager.ShareMode']) -> 'QNearFieldShareManager.ShareModes': ... + def __and__(self, f: typing.Union['QNearFieldShareManager.ShareModes', 'QNearFieldShareManager.ShareMode']) -> 'QNearFieldShareManager.ShareModes': ... + def __invert__(self) -> 'QNearFieldShareManager.ShareModes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + error: typing.ClassVar[QtCore.pyqtSignal] + shareModesChanged: typing.ClassVar[QtCore.pyqtSignal] + targetDetected: typing.ClassVar[QtCore.pyqtSignal] + def shareError(self) -> 'QNearFieldShareManager.ShareError': ... + def shareModes(self) -> 'QNearFieldShareManager.ShareModes': ... + def setShareModes(self, modes: typing.Union['QNearFieldShareManager.ShareModes', 'QNearFieldShareManager.ShareMode']) -> None: ... + @staticmethod + def supportedShareModes() -> 'QNearFieldShareManager.ShareModes': ... + + +class QNearFieldShareTarget(QtCore.QObject): + + shareFinished: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + def shareError(self) -> QNearFieldShareManager.ShareError: ... + def isShareInProgress(self) -> bool: ... + def cancel(self) -> None: ... + @typing.overload + def share(self, message: QNdefMessage) -> bool: ... + @typing.overload + def share(self, files: typing.Iterable[QtCore.QFileInfo]) -> bool: ... + def shareModes(self) -> QNearFieldShareManager.ShareModes: ... + + +class QNearFieldTarget(QtCore.QObject): + + class Error(int): + NoError = ... # type: QNearFieldTarget.Error + UnknownError = ... # type: QNearFieldTarget.Error + UnsupportedError = ... # type: QNearFieldTarget.Error + TargetOutOfRangeError = ... # type: QNearFieldTarget.Error + NoResponseError = ... # type: QNearFieldTarget.Error + ChecksumMismatchError = ... # type: QNearFieldTarget.Error + InvalidParametersError = ... # type: QNearFieldTarget.Error + NdefReadError = ... # type: QNearFieldTarget.Error + NdefWriteError = ... # type: QNearFieldTarget.Error + CommandError = ... # type: QNearFieldTarget.Error + + class AccessMethod(int): + UnknownAccess = ... # type: QNearFieldTarget.AccessMethod + NdefAccess = ... # type: QNearFieldTarget.AccessMethod + TagTypeSpecificAccess = ... # type: QNearFieldTarget.AccessMethod + LlcpAccess = ... # type: QNearFieldTarget.AccessMethod + + class Type(int): + ProprietaryTag = ... # type: QNearFieldTarget.Type + NfcTagType1 = ... # type: QNearFieldTarget.Type + NfcTagType2 = ... # type: QNearFieldTarget.Type + NfcTagType3 = ... # type: QNearFieldTarget.Type + NfcTagType4 = ... # type: QNearFieldTarget.Type + MifareTag = ... # type: QNearFieldTarget.Type + + class AccessMethods(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QNearFieldTarget.AccessMethods', 'QNearFieldTarget.AccessMethod']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QNearFieldTarget.AccessMethods', 'QNearFieldTarget.AccessMethod']) -> 'QNearFieldTarget.AccessMethods': ... + def __xor__(self, f: typing.Union['QNearFieldTarget.AccessMethods', 'QNearFieldTarget.AccessMethod']) -> 'QNearFieldTarget.AccessMethods': ... + def __ior__(self, f: typing.Union['QNearFieldTarget.AccessMethods', 'QNearFieldTarget.AccessMethod']) -> 'QNearFieldTarget.AccessMethods': ... + def __or__(self, f: typing.Union['QNearFieldTarget.AccessMethods', 'QNearFieldTarget.AccessMethod']) -> 'QNearFieldTarget.AccessMethods': ... + def __iand__(self, f: typing.Union['QNearFieldTarget.AccessMethods', 'QNearFieldTarget.AccessMethod']) -> 'QNearFieldTarget.AccessMethods': ... + def __and__(self, f: typing.Union['QNearFieldTarget.AccessMethods', 'QNearFieldTarget.AccessMethod']) -> 'QNearFieldTarget.AccessMethods': ... + def __invert__(self) -> 'QNearFieldTarget.AccessMethods': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class RequestId(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QNearFieldTarget.RequestId') -> None: ... + + def __ge__(self, other: 'QNearFieldTarget.RequestId') -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __lt__(self, other: 'QNearFieldTarget.RequestId') -> bool: ... + def refCount(self) -> int: ... + def isValid(self) -> bool: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def maxCommandLength(self) -> int: ... + def disconnect(self) -> bool: ... + def setKeepConnection(self, isPersistent: bool) -> bool: ... + def keepConnection(self) -> bool: ... + error: typing.ClassVar[QtCore.pyqtSignal] + requestCompleted: typing.ClassVar[QtCore.pyqtSignal] + ndefMessagesWritten: typing.ClassVar[QtCore.pyqtSignal] + ndefMessageRead: typing.ClassVar[QtCore.pyqtSignal] + disconnected: typing.ClassVar[QtCore.pyqtSignal] + def reportError(self, error: 'QNearFieldTarget.Error', id: 'QNearFieldTarget.RequestId') -> None: ... + def handleResponse(self, id: 'QNearFieldTarget.RequestId', response: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def setResponseForRequest(self, id: 'QNearFieldTarget.RequestId', response: typing.Any, emitRequestCompleted: bool = ...) -> None: ... + def requestResponse(self, id: 'QNearFieldTarget.RequestId') -> typing.Any: ... + def waitForRequestCompleted(self, id: 'QNearFieldTarget.RequestId', msecs: int = ...) -> bool: ... + def sendCommands(self, commands: typing.Iterable[typing.Union[QtCore.QByteArray, bytes, bytearray]]) -> 'QNearFieldTarget.RequestId': ... + def sendCommand(self, command: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> 'QNearFieldTarget.RequestId': ... + def writeNdefMessages(self, messages: typing.Iterable[QNdefMessage]) -> 'QNearFieldTarget.RequestId': ... + def readNdefMessages(self) -> 'QNearFieldTarget.RequestId': ... + def hasNdefMessage(self) -> bool: ... + def isProcessingCommand(self) -> bool: ... + def accessMethods(self) -> 'QNearFieldTarget.AccessMethods': ... + def type(self) -> 'QNearFieldTarget.Type': ... + def url(self) -> QtCore.QUrl: ... + def uid(self) -> QtCore.QByteArray: ... + + +class QQmlNdefRecord(QtCore.QObject): + + class TypeNameFormat(int): + Empty = ... # type: QQmlNdefRecord.TypeNameFormat + NfcRtd = ... # type: QQmlNdefRecord.TypeNameFormat + Mime = ... # type: QQmlNdefRecord.TypeNameFormat + Uri = ... # type: QQmlNdefRecord.TypeNameFormat + ExternalRtd = ... # type: QQmlNdefRecord.TypeNameFormat + Unknown = ... # type: QQmlNdefRecord.TypeNameFormat + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, record: QNdefRecord, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + recordChanged: typing.ClassVar[QtCore.pyqtSignal] + typeNameFormatChanged: typing.ClassVar[QtCore.pyqtSignal] + typeChanged: typing.ClassVar[QtCore.pyqtSignal] + def setRecord(self, record: QNdefRecord) -> None: ... + def record(self) -> QNdefRecord: ... + def typeNameFormat(self) -> 'QQmlNdefRecord.TypeNameFormat': ... + def setTypeNameFormat(self, typeNameFormat: 'QQmlNdefRecord.TypeNameFormat') -> None: ... + def setType(self, t: typing.Optional[str]) -> None: ... + def type(self) -> str: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtOpenGL.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtOpenGL.abi3.so new file mode 100644 index 0000000..4bc0b72 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtOpenGL.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtOpenGL.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtOpenGL.pyi new file mode 100644 index 0000000..aab44a5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtOpenGL.pyi @@ -0,0 +1,354 @@ +# The PEP 484 type hints stub file for the QtOpenGL module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QGL(PyQt5.sip.simplewrapper): + + class FormatOption(int): + DoubleBuffer = ... # type: QGL.FormatOption + DepthBuffer = ... # type: QGL.FormatOption + Rgba = ... # type: QGL.FormatOption + AlphaChannel = ... # type: QGL.FormatOption + AccumBuffer = ... # type: QGL.FormatOption + StencilBuffer = ... # type: QGL.FormatOption + StereoBuffers = ... # type: QGL.FormatOption + DirectRendering = ... # type: QGL.FormatOption + HasOverlay = ... # type: QGL.FormatOption + SampleBuffers = ... # type: QGL.FormatOption + SingleBuffer = ... # type: QGL.FormatOption + NoDepthBuffer = ... # type: QGL.FormatOption + ColorIndex = ... # type: QGL.FormatOption + NoAlphaChannel = ... # type: QGL.FormatOption + NoAccumBuffer = ... # type: QGL.FormatOption + NoStencilBuffer = ... # type: QGL.FormatOption + NoStereoBuffers = ... # type: QGL.FormatOption + IndirectRendering = ... # type: QGL.FormatOption + NoOverlay = ... # type: QGL.FormatOption + NoSampleBuffers = ... # type: QGL.FormatOption + DeprecatedFunctions = ... # type: QGL.FormatOption + NoDeprecatedFunctions = ... # type: QGL.FormatOption + + class FormatOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGL.FormatOptions', 'QGL.FormatOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGL.FormatOptions', 'QGL.FormatOption']) -> 'QGL.FormatOptions': ... + def __xor__(self, f: typing.Union['QGL.FormatOptions', 'QGL.FormatOption']) -> 'QGL.FormatOptions': ... + def __ior__(self, f: typing.Union['QGL.FormatOptions', 'QGL.FormatOption']) -> 'QGL.FormatOptions': ... + def __or__(self, f: typing.Union['QGL.FormatOptions', 'QGL.FormatOption']) -> 'QGL.FormatOptions': ... + def __iand__(self, f: typing.Union['QGL.FormatOptions', 'QGL.FormatOption']) -> 'QGL.FormatOptions': ... + def __and__(self, f: typing.Union['QGL.FormatOptions', 'QGL.FormatOption']) -> 'QGL.FormatOptions': ... + def __invert__(self) -> 'QGL.FormatOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + +class QGLFormat(PyQt5.sipsimplewrapper): + + class OpenGLContextProfile(int): + NoProfile = ... # type: QGLFormat.OpenGLContextProfile + CoreProfile = ... # type: QGLFormat.OpenGLContextProfile + CompatibilityProfile = ... # type: QGLFormat.OpenGLContextProfile + + class OpenGLVersionFlag(int): + OpenGL_Version_None = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_1_1 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_1_2 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_1_3 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_1_4 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_1_5 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_2_0 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_2_1 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_3_0 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_3_1 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_3_2 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_3_3 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_4_0 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_4_1 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_4_2 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_Version_4_3 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_ES_Common_Version_1_0 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_ES_CommonLite_Version_1_0 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_ES_Common_Version_1_1 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_ES_CommonLite_Version_1_1 = ... # type: QGLFormat.OpenGLVersionFlag + OpenGL_ES_Version_2_0 = ... # type: QGLFormat.OpenGLVersionFlag + + class OpenGLVersionFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGLFormat.OpenGLVersionFlags', 'QGLFormat.OpenGLVersionFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGLFormat.OpenGLVersionFlags', 'QGLFormat.OpenGLVersionFlag']) -> 'QGLFormat.OpenGLVersionFlags': ... + def __xor__(self, f: typing.Union['QGLFormat.OpenGLVersionFlags', 'QGLFormat.OpenGLVersionFlag']) -> 'QGLFormat.OpenGLVersionFlags': ... + def __ior__(self, f: typing.Union['QGLFormat.OpenGLVersionFlags', 'QGLFormat.OpenGLVersionFlag']) -> 'QGLFormat.OpenGLVersionFlags': ... + def __or__(self, f: typing.Union['QGLFormat.OpenGLVersionFlags', 'QGLFormat.OpenGLVersionFlag']) -> 'QGLFormat.OpenGLVersionFlags': ... + def __iand__(self, f: typing.Union['QGLFormat.OpenGLVersionFlags', 'QGLFormat.OpenGLVersionFlag']) -> 'QGLFormat.OpenGLVersionFlags': ... + def __and__(self, f: typing.Union['QGLFormat.OpenGLVersionFlags', 'QGLFormat.OpenGLVersionFlag']) -> 'QGLFormat.OpenGLVersionFlags': ... + def __invert__(self) -> 'QGLFormat.OpenGLVersionFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, options: typing.Union[QGL.FormatOptions, QGL.FormatOption], plane: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QGLFormat') -> None: ... + + def __eq__(self, other: object): ... + def __ne__(self, other: object): ... + def profile(self) -> 'QGLFormat.OpenGLContextProfile': ... + def setProfile(self, profile: 'QGLFormat.OpenGLContextProfile') -> None: ... + def minorVersion(self) -> int: ... + def majorVersion(self) -> int: ... + def setVersion(self, major: int, minor: int) -> None: ... + @staticmethod + def openGLVersionFlags() -> 'QGLFormat.OpenGLVersionFlags': ... + def swapInterval(self) -> int: ... + def setSwapInterval(self, interval: int) -> None: ... + def blueBufferSize(self) -> int: ... + def setBlueBufferSize(self, size: int) -> None: ... + def greenBufferSize(self) -> int: ... + def setGreenBufferSize(self, size: int) -> None: ... + def redBufferSize(self) -> int: ... + def setRedBufferSize(self, size: int) -> None: ... + def sampleBuffers(self) -> bool: ... + def hasOverlay(self) -> bool: ... + def directRendering(self) -> bool: ... + def stereo(self) -> bool: ... + def stencil(self) -> bool: ... + def accum(self) -> bool: ... + def alpha(self) -> bool: ... + def rgba(self) -> bool: ... + def depth(self) -> bool: ... + def doubleBuffer(self) -> bool: ... + @staticmethod + def hasOpenGLOverlays() -> bool: ... + @staticmethod + def hasOpenGL() -> bool: ... + @staticmethod + def setDefaultOverlayFormat(f: 'QGLFormat') -> None: ... + @staticmethod + def defaultOverlayFormat() -> 'QGLFormat': ... + @staticmethod + def setDefaultFormat(f: 'QGLFormat') -> None: ... + @staticmethod + def defaultFormat() -> 'QGLFormat': ... + def testOption(self, opt: typing.Union[QGL.FormatOptions, QGL.FormatOption]) -> bool: ... + def setOption(self, opt: typing.Union[QGL.FormatOptions, QGL.FormatOption]) -> None: ... + def setPlane(self, plane: int) -> None: ... + def plane(self) -> int: ... + def setOverlay(self, enable: bool) -> None: ... + def setDirectRendering(self, enable: bool) -> None: ... + def setStereo(self, enable: bool) -> None: ... + def setStencil(self, enable: bool) -> None: ... + def setAccum(self, enable: bool) -> None: ... + def setAlpha(self, enable: bool) -> None: ... + def setRgba(self, enable: bool) -> None: ... + def setDepth(self, enable: bool) -> None: ... + def setDoubleBuffer(self, enable: bool) -> None: ... + def samples(self) -> int: ... + def setSamples(self, numSamples: int) -> None: ... + def setSampleBuffers(self, enable: bool) -> None: ... + def stencilBufferSize(self) -> int: ... + def setStencilBufferSize(self, size: int) -> None: ... + def alphaBufferSize(self) -> int: ... + def setAlphaBufferSize(self, size: int) -> None: ... + def accumBufferSize(self) -> int: ... + def setAccumBufferSize(self, size: int) -> None: ... + def depthBufferSize(self) -> int: ... + def setDepthBufferSize(self, size: int) -> None: ... + + +class QGLContext(PyQt5.sip.wrapper): + + class BindOption(int): + NoBindOption = ... # type: QGLContext.BindOption + InvertedYBindOption = ... # type: QGLContext.BindOption + MipmapBindOption = ... # type: QGLContext.BindOption + PremultipliedAlphaBindOption = ... # type: QGLContext.BindOption + LinearFilteringBindOption = ... # type: QGLContext.BindOption + DefaultBindOption = ... # type: QGLContext.BindOption + + class BindOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> 'QGLContext.BindOptions': ... + def __xor__(self, f: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> 'QGLContext.BindOptions': ... + def __ior__(self, f: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> 'QGLContext.BindOptions': ... + def __or__(self, f: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> 'QGLContext.BindOptions': ... + def __iand__(self, f: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> 'QGLContext.BindOptions': ... + def __and__(self, f: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> 'QGLContext.BindOptions': ... + def __invert__(self) -> 'QGLContext.BindOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, format: QGLFormat) -> None: ... + + def moveToThread(self, thread: typing.Optional[QtCore.QThread]) -> None: ... + @staticmethod + def areSharing(context1: typing.Optional['QGLContext'], context2: typing.Optional['QGLContext']) -> bool: ... + def setInitialized(self, on: bool) -> None: ... + def initialized(self) -> bool: ... + def setWindowCreated(self, on: bool) -> None: ... + def windowCreated(self) -> bool: ... + def deviceIsPixmap(self) -> bool: ... + def chooseContext(self, shareContext: typing.Optional['QGLContext'] = ...) -> bool: ... + @staticmethod + def currentContext() -> typing.Optional['QGLContext']: ... + def overlayTransparentColor(self) -> QtGui.QColor: ... + def device(self) -> typing.Optional[QtGui.QPaintDevice]: ... + def getProcAddress(self, proc: typing.Optional[str]) -> typing.Optional[PyQt5.sip.voidptr]: ... + @staticmethod + def textureCacheLimit() -> int: ... + @staticmethod + def setTextureCacheLimit(size: int) -> None: ... + def deleteTexture(self, tx_id: int) -> None: ... + @typing.overload + def drawTexture(self, target: QtCore.QRectF, textureId: int, textureTarget: int = ...) -> None: ... + @typing.overload + def drawTexture(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint], textureId: int, textureTarget: int = ...) -> None: ... + @typing.overload + def bindTexture(self, image: QtGui.QImage, target: int = ..., format: int = ...) -> int: ... + @typing.overload + def bindTexture(self, pixmap: QtGui.QPixmap, target: int = ..., format: int = ...) -> int: ... + @typing.overload + def bindTexture(self, fileName: typing.Optional[str]) -> int: ... + @typing.overload + def bindTexture(self, image: QtGui.QImage, target: int, format: int, options: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> int: ... + @typing.overload + def bindTexture(self, pixmap: QtGui.QPixmap, target: int, format: int, options: typing.Union['QGLContext.BindOptions', 'QGLContext.BindOption']) -> int: ... + def swapBuffers(self) -> None: ... + def doneCurrent(self) -> None: ... + def makeCurrent(self) -> None: ... + def setFormat(self, format: QGLFormat) -> None: ... + def requestedFormat(self) -> QGLFormat: ... + def format(self) -> QGLFormat: ... + def reset(self) -> None: ... + def isSharing(self) -> bool: ... + def isValid(self) -> bool: ... + def create(self, shareContext: typing.Optional['QGLContext'] = ...) -> bool: ... + + +class QGLWidget(QtWidgets.QWidget): + + @typing.overload + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., shareWidget: typing.Optional['QGLWidget'] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, context: typing.Optional[QGLContext], parent: typing.Optional[QtWidgets.QWidget] = ..., shareWidget: typing.Optional['QGLWidget'] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, format: QGLFormat, parent: typing.Optional[QtWidgets.QWidget] = ..., shareWidget: typing.Optional['QGLWidget'] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def glDraw(self) -> None: ... + def glInit(self) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def autoBufferSwap(self) -> bool: ... + def setAutoBufferSwap(self, on: bool) -> None: ... + def paintOverlayGL(self) -> None: ... + def resizeOverlayGL(self, w: int, h: int) -> None: ... + def initializeOverlayGL(self) -> None: ... + def paintGL(self) -> None: ... + def resizeGL(self, w: int, h: int) -> None: ... + def initializeGL(self) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def updateOverlayGL(self) -> None: ... + def updateGL(self) -> None: ... + def deleteTexture(self, tx_id: int) -> None: ... + @typing.overload + def drawTexture(self, target: QtCore.QRectF, textureId: int, textureTarget: int = ...) -> None: ... + @typing.overload + def drawTexture(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint], textureId: int, textureTarget: int = ...) -> None: ... + @typing.overload + def bindTexture(self, image: QtGui.QImage, target: int = ..., format: int = ...) -> int: ... + @typing.overload + def bindTexture(self, pixmap: QtGui.QPixmap, target: int = ..., format: int = ...) -> int: ... + @typing.overload + def bindTexture(self, fileName: typing.Optional[str]) -> int: ... + @typing.overload + def bindTexture(self, image: QtGui.QImage, target: int, format: int, options: typing.Union[QGLContext.BindOptions, QGLContext.BindOption]) -> int: ... + @typing.overload + def bindTexture(self, pixmap: QtGui.QPixmap, target: int, format: int, options: typing.Union[QGLContext.BindOptions, QGLContext.BindOption]) -> int: ... + def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... + @typing.overload + def renderText(self, x: int, y: int, str: typing.Optional[str], font: QtGui.QFont = ...) -> None: ... + @typing.overload + def renderText(self, x: float, y: float, z: float, str: typing.Optional[str], font: QtGui.QFont = ...) -> None: ... + @staticmethod + def convertToGLFormat(img: QtGui.QImage) -> QtGui.QImage: ... + def overlayContext(self) -> typing.Optional[QGLContext]: ... + def makeOverlayCurrent(self) -> None: ... + def grabFrameBuffer(self, withAlpha: bool = ...) -> QtGui.QImage: ... + def renderPixmap(self, width: int = ..., height: int = ..., useContext: bool = ...) -> QtGui.QPixmap: ... + def setContext(self, context: typing.Optional[QGLContext], shareContext: typing.Optional[QGLContext] = ..., deleteOldContext: bool = ...) -> None: ... + def context(self) -> typing.Optional[QGLContext]: ... + def format(self) -> QGLFormat: ... + def swapBuffers(self) -> None: ... + def doubleBuffer(self) -> bool: ... + def doneCurrent(self) -> None: ... + def makeCurrent(self) -> None: ... + def isSharing(self) -> bool: ... + def isValid(self) -> bool: ... + def qglClearColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def qglColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtPositioning.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtPositioning.abi3.so new file mode 100644 index 0000000..1a9de55 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtPositioning.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtPositioning.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtPositioning.pyi new file mode 100644 index 0000000..cc9fa83 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtPositioning.pyi @@ -0,0 +1,565 @@ +# The PEP 484 type hints stub file for the QtPositioning module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QGeoAddress(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoAddress') -> None: ... + + def isTextGenerated(self) -> bool: ... + def clear(self) -> None: ... + def isEmpty(self) -> bool: ... + def setStreet(self, street: typing.Optional[str]) -> None: ... + def street(self) -> str: ... + def setPostalCode(self, postalCode: typing.Optional[str]) -> None: ... + def postalCode(self) -> str: ... + def setDistrict(self, district: typing.Optional[str]) -> None: ... + def district(self) -> str: ... + def setCity(self, city: typing.Optional[str]) -> None: ... + def city(self) -> str: ... + def setCounty(self, county: typing.Optional[str]) -> None: ... + def county(self) -> str: ... + def setState(self, state: typing.Optional[str]) -> None: ... + def state(self) -> str: ... + def setCountryCode(self, countryCode: typing.Optional[str]) -> None: ... + def countryCode(self) -> str: ... + def setCountry(self, country: typing.Optional[str]) -> None: ... + def country(self) -> str: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def text(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoAreaMonitorInfo(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self, name: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoAreaMonitorInfo') -> None: ... + + def setNotificationParameters(self, parameters: typing.Dict[str, typing.Any]) -> None: ... + def notificationParameters(self) -> typing.Dict[str, typing.Any]: ... + def setPersistent(self, isPersistent: bool) -> None: ... + def isPersistent(self) -> bool: ... + def setExpiration(self, expiry: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def expiration(self) -> QtCore.QDateTime: ... + def setArea(self, newShape: 'QGeoShape') -> None: ... + def area(self) -> 'QGeoShape': ... + def isValid(self) -> bool: ... + def identifier(self) -> str: ... + def setName(self, name: typing.Optional[str]) -> None: ... + def name(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoAreaMonitorSource(QtCore.QObject): + + class AreaMonitorFeature(int): + PersistentAreaMonitorFeature = ... # type: QGeoAreaMonitorSource.AreaMonitorFeature + AnyAreaMonitorFeature = ... # type: QGeoAreaMonitorSource.AreaMonitorFeature + + class Error(int): + AccessError = ... # type: QGeoAreaMonitorSource.Error + InsufficientPositionInfo = ... # type: QGeoAreaMonitorSource.Error + UnknownSourceError = ... # type: QGeoAreaMonitorSource.Error + NoError = ... # type: QGeoAreaMonitorSource.Error + + class AreaMonitorFeatures(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoAreaMonitorSource.AreaMonitorFeatures', 'QGeoAreaMonitorSource.AreaMonitorFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoAreaMonitorSource.AreaMonitorFeatures', 'QGeoAreaMonitorSource.AreaMonitorFeature']) -> 'QGeoAreaMonitorSource.AreaMonitorFeatures': ... + def __xor__(self, f: typing.Union['QGeoAreaMonitorSource.AreaMonitorFeatures', 'QGeoAreaMonitorSource.AreaMonitorFeature']) -> 'QGeoAreaMonitorSource.AreaMonitorFeatures': ... + def __ior__(self, f: typing.Union['QGeoAreaMonitorSource.AreaMonitorFeatures', 'QGeoAreaMonitorSource.AreaMonitorFeature']) -> 'QGeoAreaMonitorSource.AreaMonitorFeatures': ... + def __or__(self, f: typing.Union['QGeoAreaMonitorSource.AreaMonitorFeatures', 'QGeoAreaMonitorSource.AreaMonitorFeature']) -> 'QGeoAreaMonitorSource.AreaMonitorFeatures': ... + def __iand__(self, f: typing.Union['QGeoAreaMonitorSource.AreaMonitorFeatures', 'QGeoAreaMonitorSource.AreaMonitorFeature']) -> 'QGeoAreaMonitorSource.AreaMonitorFeatures': ... + def __and__(self, f: typing.Union['QGeoAreaMonitorSource.AreaMonitorFeatures', 'QGeoAreaMonitorSource.AreaMonitorFeature']) -> 'QGeoAreaMonitorSource.AreaMonitorFeatures': ... + def __invert__(self) -> 'QGeoAreaMonitorSource.AreaMonitorFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + monitorExpired: typing.ClassVar[QtCore.pyqtSignal] + areaExited: typing.ClassVar[QtCore.pyqtSignal] + areaEntered: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def activeMonitors(self) -> typing.List[QGeoAreaMonitorInfo]: ... + @typing.overload + def activeMonitors(self, lookupArea: 'QGeoShape') -> typing.List[QGeoAreaMonitorInfo]: ... + def requestUpdate(self, monitor: QGeoAreaMonitorInfo, signal: typing.Optional[str]) -> bool: ... + def stopMonitoring(self, monitor: QGeoAreaMonitorInfo) -> bool: ... + def startMonitoring(self, monitor: QGeoAreaMonitorInfo) -> bool: ... + def supportedAreaMonitorFeatures(self) -> 'QGeoAreaMonitorSource.AreaMonitorFeatures': ... + error: typing.ClassVar[QtCore.pyqtSignal] + def sourceName(self) -> str: ... + def positionInfoSource(self) -> typing.Optional['QGeoPositionInfoSource']: ... + def setPositionInfoSource(self, source: typing.Optional['QGeoPositionInfoSource']) -> None: ... + @staticmethod + def availableSources() -> typing.List[str]: ... + @staticmethod + def createSource(sourceName: typing.Optional[str], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoAreaMonitorSource']: ... + @staticmethod + def createDefaultSource(parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoAreaMonitorSource']: ... + + +class QGeoShape(PyQt5.sip.wrapper): + + class ShapeType(int): + UnknownType = ... # type: QGeoShape.ShapeType + RectangleType = ... # type: QGeoShape.ShapeType + CircleType = ... # type: QGeoShape.ShapeType + PathType = ... # type: QGeoShape.ShapeType + PolygonType = ... # type: QGeoShape.ShapeType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoShape') -> None: ... + + def boundingGeoRectangle(self) -> 'QGeoRectangle': ... + def toString(self) -> str: ... + def center(self) -> 'QGeoCoordinate': ... + def extendShape(self, coordinate: 'QGeoCoordinate') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def contains(self, coordinate: 'QGeoCoordinate') -> bool: ... + def isEmpty(self) -> bool: ... + def isValid(self) -> bool: ... + def type(self) -> 'QGeoShape.ShapeType': ... + + +class QGeoCircle(QGeoShape): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, center: 'QGeoCoordinate', radius: float = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoCircle') -> None: ... + @typing.overload + def __init__(self, other: QGeoShape) -> None: ... + + def extendCircle(self, coordinate: 'QGeoCoordinate') -> None: ... + def toString(self) -> str: ... + def translated(self, degreesLatitude: float, degreesLongitude: float) -> 'QGeoCircle': ... + def translate(self, degreesLatitude: float, degreesLongitude: float) -> None: ... + def radius(self) -> float: ... + def setRadius(self, radius: float) -> None: ... + def center(self) -> 'QGeoCoordinate': ... + def setCenter(self, center: 'QGeoCoordinate') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoCoordinate(PyQt5.sip.wrapper): + + class CoordinateFormat(int): + Degrees = ... # type: QGeoCoordinate.CoordinateFormat + DegreesWithHemisphere = ... # type: QGeoCoordinate.CoordinateFormat + DegreesMinutes = ... # type: QGeoCoordinate.CoordinateFormat + DegreesMinutesWithHemisphere = ... # type: QGeoCoordinate.CoordinateFormat + DegreesMinutesSeconds = ... # type: QGeoCoordinate.CoordinateFormat + DegreesMinutesSecondsWithHemisphere = ... # type: QGeoCoordinate.CoordinateFormat + + class CoordinateType(int): + InvalidCoordinate = ... # type: QGeoCoordinate.CoordinateType + Coordinate2D = ... # type: QGeoCoordinate.CoordinateType + Coordinate3D = ... # type: QGeoCoordinate.CoordinateType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, latitude: float, longitude: float) -> None: ... + @typing.overload + def __init__(self, latitude: float, longitude: float, altitude: float) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoCoordinate') -> None: ... + + def __hash__(self) -> int: ... + def toString(self, format: 'QGeoCoordinate.CoordinateFormat' = ...) -> str: ... + def atDistanceAndAzimuth(self, distance: float, azimuth: float, distanceUp: float = ...) -> 'QGeoCoordinate': ... + def azimuthTo(self, other: 'QGeoCoordinate') -> float: ... + def distanceTo(self, other: 'QGeoCoordinate') -> float: ... + def altitude(self) -> float: ... + def setAltitude(self, altitude: float) -> None: ... + def longitude(self) -> float: ... + def setLongitude(self, longitude: float) -> None: ... + def latitude(self) -> float: ... + def setLatitude(self, latitude: float) -> None: ... + def type(self) -> 'QGeoCoordinate.CoordinateType': ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoLocation(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoLocation') -> None: ... + + def setExtendedAttributes(self, data: typing.Dict[str, typing.Any]) -> None: ... + def extendedAttributes(self) -> typing.Dict[str, typing.Any]: ... + def isEmpty(self) -> bool: ... + def setBoundingBox(self, box: 'QGeoRectangle') -> None: ... + def boundingBox(self) -> 'QGeoRectangle': ... + def setCoordinate(self, position: QGeoCoordinate) -> None: ... + def coordinate(self) -> QGeoCoordinate: ... + def setAddress(self, address: QGeoAddress) -> None: ... + def address(self) -> QGeoAddress: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoPath(QGeoShape): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, path: typing.Iterable[QGeoCoordinate], width: float = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoPath') -> None: ... + @typing.overload + def __init__(self, other: QGeoShape) -> None: ... + + def clearPath(self) -> None: ... + def size(self) -> int: ... + def toString(self) -> str: ... + @typing.overload + def removeCoordinate(self, coordinate: QGeoCoordinate) -> None: ... + @typing.overload + def removeCoordinate(self, index: int) -> None: ... + def containsCoordinate(self, coordinate: QGeoCoordinate) -> bool: ... + def coordinateAt(self, index: int) -> QGeoCoordinate: ... + def replaceCoordinate(self, index: int, coordinate: QGeoCoordinate) -> None: ... + def insertCoordinate(self, index: int, coordinate: QGeoCoordinate) -> None: ... + def addCoordinate(self, coordinate: QGeoCoordinate) -> None: ... + def length(self, indexFrom: int = ..., indexTo: int = ...) -> float: ... + def translated(self, degreesLatitude: float, degreesLongitude: float) -> 'QGeoPath': ... + def translate(self, degreesLatitude: float, degreesLongitude: float) -> None: ... + def width(self) -> float: ... + def setWidth(self, width: float) -> None: ... + def path(self) -> typing.List[QGeoCoordinate]: ... + def setPath(self, path: typing.Iterable[QGeoCoordinate]) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoPolygon(QGeoShape): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, path: typing.Iterable[QGeoCoordinate]) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoPolygon') -> None: ... + @typing.overload + def __init__(self, other: QGeoShape) -> None: ... + + def perimeter(self) -> typing.List[typing.Any]: ... + def setPerimeter(self, path: typing.Iterable[typing.Any]) -> None: ... + def holesCount(self) -> int: ... + def removeHole(self, index: int) -> None: ... + def holePath(self, index: int) -> typing.List[QGeoCoordinate]: ... + def hole(self, index: int) -> typing.List[typing.Any]: ... + @typing.overload + def addHole(self, holePath: typing.Iterable[QGeoCoordinate]) -> None: ... + @typing.overload + def addHole(self, holePath: typing.Any) -> None: ... + def toString(self) -> str: ... + @typing.overload + def removeCoordinate(self, coordinate: QGeoCoordinate) -> None: ... + @typing.overload + def removeCoordinate(self, index: int) -> None: ... + def containsCoordinate(self, coordinate: QGeoCoordinate) -> bool: ... + def coordinateAt(self, index: int) -> QGeoCoordinate: ... + def replaceCoordinate(self, index: int, coordinate: QGeoCoordinate) -> None: ... + def insertCoordinate(self, index: int, coordinate: QGeoCoordinate) -> None: ... + def addCoordinate(self, coordinate: QGeoCoordinate) -> None: ... + def size(self) -> int: ... + def length(self, indexFrom: int = ..., indexTo: int = ...) -> float: ... + def translated(self, degreesLatitude: float, degreesLongitude: float) -> 'QGeoPolygon': ... + def translate(self, degreesLatitude: float, degreesLongitude: float) -> None: ... + def path(self) -> typing.List[QGeoCoordinate]: ... + def setPath(self, path: typing.Iterable[QGeoCoordinate]) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoPositionInfo(PyQt5.sip.wrapper): + + class Attribute(int): + Direction = ... # type: QGeoPositionInfo.Attribute + GroundSpeed = ... # type: QGeoPositionInfo.Attribute + VerticalSpeed = ... # type: QGeoPositionInfo.Attribute + MagneticVariation = ... # type: QGeoPositionInfo.Attribute + HorizontalAccuracy = ... # type: QGeoPositionInfo.Attribute + VerticalAccuracy = ... # type: QGeoPositionInfo.Attribute + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, coordinate: QGeoCoordinate, updateTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoPositionInfo') -> None: ... + + def hasAttribute(self, attribute: 'QGeoPositionInfo.Attribute') -> bool: ... + def removeAttribute(self, attribute: 'QGeoPositionInfo.Attribute') -> None: ... + def attribute(self, attribute: 'QGeoPositionInfo.Attribute') -> float: ... + def setAttribute(self, attribute: 'QGeoPositionInfo.Attribute', value: float) -> None: ... + def coordinate(self) -> QGeoCoordinate: ... + def setCoordinate(self, coordinate: QGeoCoordinate) -> None: ... + def timestamp(self) -> QtCore.QDateTime: ... + def setTimestamp(self, timestamp: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def isValid(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoPositionInfoSource(QtCore.QObject): + + class PositioningMethod(int): + NoPositioningMethods = ... # type: QGeoPositionInfoSource.PositioningMethod + SatellitePositioningMethods = ... # type: QGeoPositionInfoSource.PositioningMethod + NonSatellitePositioningMethods = ... # type: QGeoPositionInfoSource.PositioningMethod + AllPositioningMethods = ... # type: QGeoPositionInfoSource.PositioningMethod + + class Error(int): + AccessError = ... # type: QGeoPositionInfoSource.Error + ClosedError = ... # type: QGeoPositionInfoSource.Error + UnknownSourceError = ... # type: QGeoPositionInfoSource.Error + NoError = ... # type: QGeoPositionInfoSource.Error + + class PositioningMethods(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGeoPositionInfoSource.PositioningMethods', 'QGeoPositionInfoSource.PositioningMethod']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGeoPositionInfoSource.PositioningMethods', 'QGeoPositionInfoSource.PositioningMethod']) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def __xor__(self, f: typing.Union['QGeoPositionInfoSource.PositioningMethods', 'QGeoPositionInfoSource.PositioningMethod']) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def __ior__(self, f: typing.Union['QGeoPositionInfoSource.PositioningMethods', 'QGeoPositionInfoSource.PositioningMethod']) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def __or__(self, f: typing.Union['QGeoPositionInfoSource.PositioningMethods', 'QGeoPositionInfoSource.PositioningMethod']) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def __iand__(self, f: typing.Union['QGeoPositionInfoSource.PositioningMethods', 'QGeoPositionInfoSource.PositioningMethod']) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def __and__(self, f: typing.Union['QGeoPositionInfoSource.PositioningMethods', 'QGeoPositionInfoSource.PositioningMethod']) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def __invert__(self) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + def backendProperty(self, name: typing.Optional[str]) -> typing.Any: ... + def setBackendProperty(self, name: typing.Optional[str], value: typing.Any) -> bool: ... + supportedPositioningMethodsChanged: typing.ClassVar[QtCore.pyqtSignal] + updateTimeout: typing.ClassVar[QtCore.pyqtSignal] + positionUpdated: typing.ClassVar[QtCore.pyqtSignal] + def requestUpdate(self, timeout: int = ...) -> None: ... + def stopUpdates(self) -> None: ... + def startUpdates(self) -> None: ... + error: typing.ClassVar[QtCore.pyqtSignal] + @staticmethod + def availableSources() -> typing.List[str]: ... + @typing.overload + @staticmethod + def createSource(sourceName: typing.Optional[str], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoPositionInfoSource']: ... + @typing.overload + @staticmethod + def createSource(sourceName: typing.Optional[str], parameters: typing.Dict[str, typing.Any], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoPositionInfoSource']: ... + @typing.overload + @staticmethod + def createDefaultSource(parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoPositionInfoSource']: ... + @typing.overload + @staticmethod + def createDefaultSource(parameters: typing.Dict[str, typing.Any], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoPositionInfoSource']: ... + def sourceName(self) -> str: ... + def minimumUpdateInterval(self) -> int: ... + def supportedPositioningMethods(self) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def lastKnownPosition(self, fromSatellitePositioningMethodsOnly: bool = ...) -> QGeoPositionInfo: ... + def preferredPositioningMethods(self) -> 'QGeoPositionInfoSource.PositioningMethods': ... + def setPreferredPositioningMethods(self, methods: typing.Union['QGeoPositionInfoSource.PositioningMethods', 'QGeoPositionInfoSource.PositioningMethod']) -> None: ... + def updateInterval(self) -> int: ... + def setUpdateInterval(self, msec: int) -> None: ... + + +class QGeoRectangle(QGeoShape): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, center: QGeoCoordinate, degreesWidth: float, degreesHeight: float) -> None: ... + @typing.overload + def __init__(self, topLeft: QGeoCoordinate, bottomRight: QGeoCoordinate) -> None: ... + @typing.overload + def __init__(self, coordinates: typing.Iterable[QGeoCoordinate]) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoRectangle') -> None: ... + @typing.overload + def __init__(self, other: QGeoShape) -> None: ... + + def extendRectangle(self, coordinate: QGeoCoordinate) -> None: ... + def toString(self) -> str: ... + def __or__(self, rectangle: 'QGeoRectangle') -> 'QGeoRectangle': ... + def __ior__(self, rectangle: 'QGeoRectangle') -> 'QGeoRectangle': ... + def united(self, rectangle: 'QGeoRectangle') -> 'QGeoRectangle': ... + def translated(self, degreesLatitude: float, degreesLongitude: float) -> 'QGeoRectangle': ... + def translate(self, degreesLatitude: float, degreesLongitude: float) -> None: ... + def intersects(self, rectangle: 'QGeoRectangle') -> bool: ... + def contains(self, rectangle: 'QGeoRectangle') -> bool: ... + def height(self) -> float: ... + def setHeight(self, degreesHeight: float) -> None: ... + def width(self) -> float: ... + def setWidth(self, degreesWidth: float) -> None: ... + def center(self) -> QGeoCoordinate: ... + def setCenter(self, center: QGeoCoordinate) -> None: ... + def bottomRight(self) -> QGeoCoordinate: ... + def setBottomRight(self, bottomRight: QGeoCoordinate) -> None: ... + def bottomLeft(self) -> QGeoCoordinate: ... + def setBottomLeft(self, bottomLeft: QGeoCoordinate) -> None: ... + def topRight(self) -> QGeoCoordinate: ... + def setTopRight(self, topRight: QGeoCoordinate) -> None: ... + def topLeft(self) -> QGeoCoordinate: ... + def setTopLeft(self, topLeft: QGeoCoordinate) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoSatelliteInfo(PyQt5.sip.wrapper): + + class SatelliteSystem(int): + Undefined = ... # type: QGeoSatelliteInfo.SatelliteSystem + GPS = ... # type: QGeoSatelliteInfo.SatelliteSystem + GLONASS = ... # type: QGeoSatelliteInfo.SatelliteSystem + + class Attribute(int): + Elevation = ... # type: QGeoSatelliteInfo.Attribute + Azimuth = ... # type: QGeoSatelliteInfo.Attribute + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QGeoSatelliteInfo') -> None: ... + + def hasAttribute(self, attribute: 'QGeoSatelliteInfo.Attribute') -> bool: ... + def removeAttribute(self, attribute: 'QGeoSatelliteInfo.Attribute') -> None: ... + def attribute(self, attribute: 'QGeoSatelliteInfo.Attribute') -> float: ... + def setAttribute(self, attribute: 'QGeoSatelliteInfo.Attribute', value: float) -> None: ... + def signalStrength(self) -> int: ... + def setSignalStrength(self, signalStrength: int) -> None: ... + def satelliteIdentifier(self) -> int: ... + def setSatelliteIdentifier(self, satId: int) -> None: ... + def satelliteSystem(self) -> 'QGeoSatelliteInfo.SatelliteSystem': ... + def setSatelliteSystem(self, system: 'QGeoSatelliteInfo.SatelliteSystem') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QGeoSatelliteInfoSource(QtCore.QObject): + + class Error(int): + AccessError = ... # type: QGeoSatelliteInfoSource.Error + ClosedError = ... # type: QGeoSatelliteInfoSource.Error + NoError = ... # type: QGeoSatelliteInfoSource.Error + UnknownSourceError = ... # type: QGeoSatelliteInfoSource.Error + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + requestTimeout: typing.ClassVar[QtCore.pyqtSignal] + satellitesInUseUpdated: typing.ClassVar[QtCore.pyqtSignal] + satellitesInViewUpdated: typing.ClassVar[QtCore.pyqtSignal] + def requestUpdate(self, timeout: int = ...) -> None: ... + def stopUpdates(self) -> None: ... + def startUpdates(self) -> None: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def minimumUpdateInterval(self) -> int: ... + def updateInterval(self) -> int: ... + def setUpdateInterval(self, msec: int) -> None: ... + def sourceName(self) -> str: ... + @staticmethod + def availableSources() -> typing.List[str]: ... + @typing.overload + @staticmethod + def createSource(sourceName: typing.Optional[str], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoSatelliteInfoSource']: ... + @typing.overload + @staticmethod + def createSource(sourceName: typing.Optional[str], parameters: typing.Dict[str, typing.Any], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoSatelliteInfoSource']: ... + @typing.overload + @staticmethod + def createDefaultSource(parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoSatelliteInfoSource']: ... + @typing.overload + @staticmethod + def createDefaultSource(parameters: typing.Dict[str, typing.Any], parent: typing.Optional[QtCore.QObject]) -> typing.Optional['QGeoSatelliteInfoSource']: ... + + +class QNmeaPositionInfoSource(QGeoPositionInfoSource): + + class UpdateMode(int): + RealTimeMode = ... # type: QNmeaPositionInfoSource.UpdateMode + SimulationMode = ... # type: QNmeaPositionInfoSource.UpdateMode + + def __init__(self, updateMode: 'QNmeaPositionInfoSource.UpdateMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def userEquivalentRangeError(self) -> float: ... + def setUserEquivalentRangeError(self, uere: float) -> None: ... + def parsePosInfoFromNmeaData(self, data: typing.Optional[bytes], size: int, posInfo: typing.Optional[QGeoPositionInfo]) -> typing.Tuple[bool, typing.Optional[bool]]: ... + def requestUpdate(self, timeout: int = ...) -> None: ... + def stopUpdates(self) -> None: ... + def startUpdates(self) -> None: ... + def error(self) -> QGeoPositionInfoSource.Error: ... + def minimumUpdateInterval(self) -> int: ... + def supportedPositioningMethods(self) -> QGeoPositionInfoSource.PositioningMethods: ... + def lastKnownPosition(self, fromSatellitePositioningMethodsOnly: bool = ...) -> QGeoPositionInfo: ... + def setUpdateInterval(self, msec: int) -> None: ... + def device(self) -> typing.Optional[QtCore.QIODevice]: ... + def setDevice(self, source: typing.Optional[QtCore.QIODevice]) -> None: ... + def updateMode(self) -> 'QNmeaPositionInfoSource.UpdateMode': ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtPrintSupport.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtPrintSupport.abi3.so new file mode 100644 index 0000000..b72f97e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtPrintSupport.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtPrintSupport.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtPrintSupport.pyi new file mode 100644 index 0000000..781bb54 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtPrintSupport.pyi @@ -0,0 +1,442 @@ +# The PEP 484 type hints stub file for the QtPrintSupport module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QAbstractPrintDialog(QtWidgets.QDialog): + + class PrintDialogOption(int): + None_ = ... # type: QAbstractPrintDialog.PrintDialogOption + PrintToFile = ... # type: QAbstractPrintDialog.PrintDialogOption + PrintSelection = ... # type: QAbstractPrintDialog.PrintDialogOption + PrintPageRange = ... # type: QAbstractPrintDialog.PrintDialogOption + PrintCollateCopies = ... # type: QAbstractPrintDialog.PrintDialogOption + PrintShowPageSize = ... # type: QAbstractPrintDialog.PrintDialogOption + PrintCurrentPage = ... # type: QAbstractPrintDialog.PrintDialogOption + + class PrintRange(int): + AllPages = ... # type: QAbstractPrintDialog.PrintRange + Selection = ... # type: QAbstractPrintDialog.PrintRange + PageRange = ... # type: QAbstractPrintDialog.PrintRange + CurrentPage = ... # type: QAbstractPrintDialog.PrintRange + + class PrintDialogOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QAbstractPrintDialog.PrintDialogOptions', 'QAbstractPrintDialog.PrintDialogOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QAbstractPrintDialog.PrintDialogOptions', 'QAbstractPrintDialog.PrintDialogOption']) -> 'QAbstractPrintDialog.PrintDialogOptions': ... + def __xor__(self, f: typing.Union['QAbstractPrintDialog.PrintDialogOptions', 'QAbstractPrintDialog.PrintDialogOption']) -> 'QAbstractPrintDialog.PrintDialogOptions': ... + def __ior__(self, f: typing.Union['QAbstractPrintDialog.PrintDialogOptions', 'QAbstractPrintDialog.PrintDialogOption']) -> 'QAbstractPrintDialog.PrintDialogOptions': ... + def __or__(self, f: typing.Union['QAbstractPrintDialog.PrintDialogOptions', 'QAbstractPrintDialog.PrintDialogOption']) -> 'QAbstractPrintDialog.PrintDialogOptions': ... + def __iand__(self, f: typing.Union['QAbstractPrintDialog.PrintDialogOptions', 'QAbstractPrintDialog.PrintDialogOption']) -> 'QAbstractPrintDialog.PrintDialogOptions': ... + def __and__(self, f: typing.Union['QAbstractPrintDialog.PrintDialogOptions', 'QAbstractPrintDialog.PrintDialogOption']) -> 'QAbstractPrintDialog.PrintDialogOptions': ... + def __invert__(self) -> 'QAbstractPrintDialog.PrintDialogOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, printer: typing.Optional['QPrinter'], parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + def enabledOptions(self) -> 'QAbstractPrintDialog.PrintDialogOptions': ... + def setEnabledOptions(self, options: typing.Union['QAbstractPrintDialog.PrintDialogOptions', 'QAbstractPrintDialog.PrintDialogOption']) -> None: ... + def setOptionTabs(self, tabs: typing.Iterable[QtWidgets.QWidget]) -> None: ... + def printer(self) -> typing.Optional['QPrinter']: ... + def toPage(self) -> int: ... + def fromPage(self) -> int: ... + def setFromTo(self, fromPage: int, toPage: int) -> None: ... + def maxPage(self) -> int: ... + def minPage(self) -> int: ... + def setMinMax(self, min: int, max: int) -> None: ... + def printRange(self) -> 'QAbstractPrintDialog.PrintRange': ... + def setPrintRange(self, range: 'QAbstractPrintDialog.PrintRange') -> None: ... + def exec(self) -> int: ... + def exec_(self) -> int: ... + + +class QPageSetupDialog(QtWidgets.QDialog): + + @typing.overload + def __init__(self, printer: typing.Optional['QPrinter'], parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + def printer(self) -> typing.Optional['QPrinter']: ... + def done(self, result: int) -> None: ... + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def exec(self) -> int: ... + def exec_(self) -> int: ... + def setVisible(self, visible: bool) -> None: ... + + +class QPrintDialog(QAbstractPrintDialog): + + @typing.overload + def __init__(self, printer: typing.Optional['QPrinter'], parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + accepted: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def setVisible(self, visible: bool) -> None: ... + def options(self) -> QAbstractPrintDialog.PrintDialogOptions: ... + def setOptions(self, options: typing.Union[QAbstractPrintDialog.PrintDialogOptions, QAbstractPrintDialog.PrintDialogOption]) -> None: ... + def testOption(self, option: QAbstractPrintDialog.PrintDialogOption) -> bool: ... + def setOption(self, option: QAbstractPrintDialog.PrintDialogOption, on: bool = ...) -> None: ... + def done(self, result: int) -> None: ... + def accept(self) -> None: ... + def exec(self) -> int: ... + def exec_(self) -> int: ... + + +class QPrintEngine(PyQt5.sipsimplewrapper): + + class PrintEnginePropertyKey(int): + PPK_CollateCopies = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_ColorMode = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_Creator = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_DocumentName = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_FullPage = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_NumberOfCopies = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_Orientation = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_OutputFileName = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PageOrder = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PageRect = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PageSize = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PaperRect = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PaperSource = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PrinterName = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PrinterProgram = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_Resolution = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_SelectionOption = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_SupportedResolutions = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_WindowsPageSize = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_FontEmbedding = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_Duplex = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PaperSources = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_CustomPaperSize = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PageMargins = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PaperSize = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_CopyCount = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_SupportsMultipleCopies = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_PaperName = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_QPageSize = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_QPageMargins = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_QPageLayout = ... # type: QPrintEngine.PrintEnginePropertyKey + PPK_CustomBase = ... # type: QPrintEngine.PrintEnginePropertyKey + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QPrintEngine') -> None: ... + + def printerState(self) -> 'QPrinter.PrinterState': ... + def metric(self, a0: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... + def abort(self) -> bool: ... + def newPage(self) -> bool: ... + def property(self, key: 'QPrintEngine.PrintEnginePropertyKey') -> typing.Any: ... + def setProperty(self, key: 'QPrintEngine.PrintEnginePropertyKey', value: typing.Any) -> None: ... + + +class QPrinter(QtGui.QPagedPaintDevice): + + class DuplexMode(int): + DuplexNone = ... # type: QPrinter.DuplexMode + DuplexAuto = ... # type: QPrinter.DuplexMode + DuplexLongSide = ... # type: QPrinter.DuplexMode + DuplexShortSide = ... # type: QPrinter.DuplexMode + + class Unit(int): + Millimeter = ... # type: QPrinter.Unit + Point = ... # type: QPrinter.Unit + Inch = ... # type: QPrinter.Unit + Pica = ... # type: QPrinter.Unit + Didot = ... # type: QPrinter.Unit + Cicero = ... # type: QPrinter.Unit + DevicePixel = ... # type: QPrinter.Unit + + class PrintRange(int): + AllPages = ... # type: QPrinter.PrintRange + Selection = ... # type: QPrinter.PrintRange + PageRange = ... # type: QPrinter.PrintRange + CurrentPage = ... # type: QPrinter.PrintRange + + class OutputFormat(int): + NativeFormat = ... # type: QPrinter.OutputFormat + PdfFormat = ... # type: QPrinter.OutputFormat + + class PrinterState(int): + Idle = ... # type: QPrinter.PrinterState + Active = ... # type: QPrinter.PrinterState + Aborted = ... # type: QPrinter.PrinterState + Error = ... # type: QPrinter.PrinterState + + class PaperSource(int): + OnlyOne = ... # type: QPrinter.PaperSource + Lower = ... # type: QPrinter.PaperSource + Middle = ... # type: QPrinter.PaperSource + Manual = ... # type: QPrinter.PaperSource + Envelope = ... # type: QPrinter.PaperSource + EnvelopeManual = ... # type: QPrinter.PaperSource + Auto = ... # type: QPrinter.PaperSource + Tractor = ... # type: QPrinter.PaperSource + SmallFormat = ... # type: QPrinter.PaperSource + LargeFormat = ... # type: QPrinter.PaperSource + LargeCapacity = ... # type: QPrinter.PaperSource + Cassette = ... # type: QPrinter.PaperSource + FormSource = ... # type: QPrinter.PaperSource + MaxPageSource = ... # type: QPrinter.PaperSource + Upper = ... # type: QPrinter.PaperSource + CustomSource = ... # type: QPrinter.PaperSource + LastPaperSource = ... # type: QPrinter.PaperSource + + class ColorMode(int): + GrayScale = ... # type: QPrinter.ColorMode + Color = ... # type: QPrinter.ColorMode + + class PageOrder(int): + FirstPageFirst = ... # type: QPrinter.PageOrder + LastPageFirst = ... # type: QPrinter.PageOrder + + class Orientation(int): + Portrait = ... # type: QPrinter.Orientation + Landscape = ... # type: QPrinter.Orientation + + class PrinterMode(int): + ScreenResolution = ... # type: QPrinter.PrinterMode + PrinterResolution = ... # type: QPrinter.PrinterMode + HighResolution = ... # type: QPrinter.PrinterMode + + @typing.overload + def __init__(self, mode: 'QPrinter.PrinterMode' = ...) -> None: ... + @typing.overload + def __init__(self, printer: 'QPrinterInfo', mode: 'QPrinter.PrinterMode' = ...) -> None: ... + + def pdfVersion(self) -> QtGui.QPagedPaintDevice.PdfVersion: ... + def setPdfVersion(self, version: QtGui.QPagedPaintDevice.PdfVersion) -> None: ... + def paperName(self) -> str: ... + def setPaperName(self, paperName: typing.Optional[str]) -> None: ... + def setEngines(self, printEngine: typing.Optional[QPrintEngine], paintEngine: typing.Optional[QtGui.QPaintEngine]) -> None: ... + def metric(self, a0: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... + def getPageMargins(self, unit: 'QPrinter.Unit') -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + def setPageMargins(self, left: float, top: float, right: float, bottom: float, unit: 'QPrinter.Unit') -> None: ... + def setMargins(self, m: QtGui.QPagedPaintDevice.Margins) -> None: ... + def printRange(self) -> 'QPrinter.PrintRange': ... + def setPrintRange(self, range: 'QPrinter.PrintRange') -> None: ... + def toPage(self) -> int: ... + def fromPage(self) -> int: ... + def setFromTo(self, fromPage: int, toPage: int) -> None: ... + def printEngine(self) -> typing.Optional[QPrintEngine]: ... + def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... + def printerState(self) -> 'QPrinter.PrinterState': ... + def abort(self) -> bool: ... + def newPage(self) -> bool: ... + def setPrinterSelectionOption(self, a0: typing.Optional[str]) -> None: ... + def printerSelectionOption(self) -> str: ... + @typing.overload + def pageRect(self) -> QtCore.QRect: ... + @typing.overload + def pageRect(self, a0: 'QPrinter.Unit') -> QtCore.QRectF: ... + @typing.overload + def paperRect(self) -> QtCore.QRect: ... + @typing.overload + def paperRect(self, a0: 'QPrinter.Unit') -> QtCore.QRectF: ... + def doubleSidedPrinting(self) -> bool: ... + def setDoubleSidedPrinting(self, enable: bool) -> None: ... + def fontEmbeddingEnabled(self) -> bool: ... + def setFontEmbeddingEnabled(self, enable: bool) -> None: ... + def supportedResolutions(self) -> typing.List[int]: ... + def duplex(self) -> 'QPrinter.DuplexMode': ... + def setDuplex(self, duplex: 'QPrinter.DuplexMode') -> None: ... + def paperSource(self) -> 'QPrinter.PaperSource': ... + def setPaperSource(self, a0: 'QPrinter.PaperSource') -> None: ... + def supportsMultipleCopies(self) -> bool: ... + def copyCount(self) -> int: ... + def setCopyCount(self, a0: int) -> None: ... + def fullPage(self) -> bool: ... + def setFullPage(self, a0: bool) -> None: ... + def collateCopies(self) -> bool: ... + def setCollateCopies(self, collate: bool) -> None: ... + def colorMode(self) -> 'QPrinter.ColorMode': ... + def setColorMode(self, a0: 'QPrinter.ColorMode') -> None: ... + def resolution(self) -> int: ... + def setResolution(self, a0: int) -> None: ... + def pageOrder(self) -> 'QPrinter.PageOrder': ... + def setPageOrder(self, a0: 'QPrinter.PageOrder') -> None: ... + @typing.overload + def paperSize(self) -> QtGui.QPagedPaintDevice.PageSize: ... + @typing.overload + def paperSize(self, unit: 'QPrinter.Unit') -> QtCore.QSizeF: ... + @typing.overload + def setPaperSize(self, a0: QtGui.QPagedPaintDevice.PageSize) -> None: ... + @typing.overload + def setPaperSize(self, paperSize: QtCore.QSizeF, unit: 'QPrinter.Unit') -> None: ... + def setPageSizeMM(self, size: QtCore.QSizeF) -> None: ... + def orientation(self) -> 'QPrinter.Orientation': ... + def setOrientation(self, a0: 'QPrinter.Orientation') -> None: ... + def creator(self) -> str: ... + def setCreator(self, a0: typing.Optional[str]) -> None: ... + def docName(self) -> str: ... + def setDocName(self, a0: typing.Optional[str]) -> None: ... + def printProgram(self) -> str: ... + def setPrintProgram(self, a0: typing.Optional[str]) -> None: ... + def outputFileName(self) -> str: ... + def setOutputFileName(self, a0: typing.Optional[str]) -> None: ... + def isValid(self) -> bool: ... + def printerName(self) -> str: ... + def setPrinterName(self, a0: typing.Optional[str]) -> None: ... + def outputFormat(self) -> 'QPrinter.OutputFormat': ... + def setOutputFormat(self, format: 'QPrinter.OutputFormat') -> None: ... + + +class QPrinterInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, src: 'QPrinterInfo') -> None: ... + @typing.overload + def __init__(self, printer: QPrinter) -> None: ... + + def supportedColorModes(self) -> typing.List[QPrinter.ColorMode]: ... + def defaultColorMode(self) -> QPrinter.ColorMode: ... + def supportedDuplexModes(self) -> typing.List[QPrinter.DuplexMode]: ... + def defaultDuplexMode(self) -> QPrinter.DuplexMode: ... + @staticmethod + def defaultPrinterName() -> str: ... + @staticmethod + def availablePrinterNames() -> typing.List[str]: ... + def supportedResolutions(self) -> typing.List[int]: ... + def maximumPhysicalPageSize(self) -> QtGui.QPageSize: ... + def minimumPhysicalPageSize(self) -> QtGui.QPageSize: ... + def supportsCustomPageSizes(self) -> bool: ... + def defaultPageSize(self) -> QtGui.QPageSize: ... + def supportedPageSizes(self) -> typing.List[QtGui.QPageSize]: ... + def state(self) -> QPrinter.PrinterState: ... + def isRemote(self) -> bool: ... + @staticmethod + def printerInfo(printerName: typing.Optional[str]) -> 'QPrinterInfo': ... + def makeAndModel(self) -> str: ... + def location(self) -> str: ... + def description(self) -> str: ... + @staticmethod + def defaultPrinter() -> 'QPrinterInfo': ... + @staticmethod + def availablePrinters() -> typing.List['QPrinterInfo']: ... + def supportedSizesWithNames(self) -> typing.List[typing.Tuple[str, QtCore.QSizeF]]: ... + def supportedPaperSizes(self) -> typing.List[QtGui.QPagedPaintDevice.PageSize]: ... + def isDefault(self) -> bool: ... + def isNull(self) -> bool: ... + def printerName(self) -> str: ... + + +class QPrintPreviewDialog(QtWidgets.QDialog): + + @typing.overload + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, printer: typing.Optional[QPrinter], parent: typing.Optional[QtWidgets.QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + paintRequested: typing.ClassVar[QtCore.pyqtSignal] + def done(self, result: int) -> None: ... + def printer(self) -> typing.Optional[QPrinter]: ... + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def setVisible(self, visible: bool) -> None: ... + + +class QPrintPreviewWidget(QtWidgets.QWidget): + + class ZoomMode(int): + CustomZoom = ... # type: QPrintPreviewWidget.ZoomMode + FitToWidth = ... # type: QPrintPreviewWidget.ZoomMode + FitInView = ... # type: QPrintPreviewWidget.ZoomMode + + class ViewMode(int): + SinglePageView = ... # type: QPrintPreviewWidget.ViewMode + FacingPagesView = ... # type: QPrintPreviewWidget.ViewMode + AllPagesView = ... # type: QPrintPreviewWidget.ViewMode + + @typing.overload + def __init__(self, printer: typing.Optional[QPrinter], parent: typing.Optional[QtWidgets.QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def pageCount(self) -> int: ... + previewChanged: typing.ClassVar[QtCore.pyqtSignal] + paintRequested: typing.ClassVar[QtCore.pyqtSignal] + def updatePreview(self) -> None: ... + def setAllPagesViewMode(self) -> None: ... + def setFacingPagesViewMode(self) -> None: ... + def setSinglePageViewMode(self) -> None: ... + def setPortraitOrientation(self) -> None: ... + def setLandscapeOrientation(self) -> None: ... + def fitInView(self) -> None: ... + def fitToWidth(self) -> None: ... + def setCurrentPage(self, pageNumber: int) -> None: ... + def setZoomMode(self, zoomMode: 'QPrintPreviewWidget.ZoomMode') -> None: ... + def setViewMode(self, viewMode: 'QPrintPreviewWidget.ViewMode') -> None: ... + def setOrientation(self, orientation: QPrinter.Orientation) -> None: ... + def setZoomFactor(self, zoomFactor: float) -> None: ... + def zoomOut(self, factor: float = ...) -> None: ... + def zoomIn(self, factor: float = ...) -> None: ... + def print(self) -> None: ... + def print_(self) -> None: ... + def setVisible(self, visible: bool) -> None: ... + def currentPage(self) -> int: ... + def zoomMode(self) -> 'QPrintPreviewWidget.ZoomMode': ... + def viewMode(self) -> 'QPrintPreviewWidget.ViewMode': ... + def orientation(self) -> QPrinter.Orientation: ... + def zoomFactor(self) -> float: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtQml.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtQml.abi3.so new file mode 100644 index 0000000..57c8059 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtQml.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtQml.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtQml.pyi new file mode 100644 index 0000000..06d57e5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtQml.pyi @@ -0,0 +1,685 @@ +# The PEP 484 type hints stub file for the QtQml module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtNetwork + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QJSEngine(QtCore.QObject): + + class Extension(int): + TranslationExtension = ... # type: QJSEngine.Extension + ConsoleExtension = ... # type: QJSEngine.Extension + GarbageCollectionExtension = ... # type: QJSEngine.Extension + AllExtensions = ... # type: QJSEngine.Extension + + class Extensions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QJSEngine.Extensions', 'QJSEngine.Extension']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QJSEngine.Extensions', 'QJSEngine.Extension']) -> 'QJSEngine.Extensions': ... + def __xor__(self, f: typing.Union['QJSEngine.Extensions', 'QJSEngine.Extension']) -> 'QJSEngine.Extensions': ... + def __ior__(self, f: typing.Union['QJSEngine.Extensions', 'QJSEngine.Extension']) -> 'QJSEngine.Extensions': ... + def __or__(self, f: typing.Union['QJSEngine.Extensions', 'QJSEngine.Extension']) -> 'QJSEngine.Extensions': ... + def __iand__(self, f: typing.Union['QJSEngine.Extensions', 'QJSEngine.Extension']) -> 'QJSEngine.Extensions': ... + def __and__(self, f: typing.Union['QJSEngine.Extensions', 'QJSEngine.Extension']) -> 'QJSEngine.Extensions': ... + def __invert__(self) -> 'QJSEngine.Extensions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + uiLanguageChanged: typing.ClassVar[QtCore.pyqtSignal] + def setUiLanguage(self, language: typing.Optional[str]) -> None: ... + def uiLanguage(self) -> str: ... + def isInterrupted(self) -> bool: ... + def setInterrupted(self, interrupted: bool) -> None: ... + @typing.overload + def throwError(self, message: typing.Optional[str]) -> None: ... + @typing.overload + def throwError(self, errorType: 'QJSValue.ErrorType', message: typing.Optional[str] = ...) -> None: ... + def newErrorObject(self, errorType: 'QJSValue.ErrorType', message: typing.Optional[str] = ...) -> 'QJSValue': ... + def importModule(self, fileName: typing.Optional[str]) -> 'QJSValue': ... + def newQMetaObject(self, metaObject: typing.Optional[QtCore.QMetaObject]) -> 'QJSValue': ... + def installExtensions(self, extensions: typing.Union['QJSEngine.Extensions', 'QJSEngine.Extension'], object: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]] = ...) -> None: ... + def installTranslatorFunctions(self, object: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]] = ...) -> None: ... + def collectGarbage(self) -> None: ... + def newQObject(self, object: typing.Optional[QtCore.QObject]) -> 'QJSValue': ... + def newArray(self, length: int = ...) -> 'QJSValue': ... + def newObject(self) -> 'QJSValue': ... + def evaluate(self, program: typing.Optional[str], fileName: typing.Optional[str] = ..., lineNumber: int = ...) -> 'QJSValue': ... + def globalObject(self) -> 'QJSValue': ... + + +class QJSValue(PyQt5.sipsimplewrapper): + + class ErrorType(int): + GenericError = ... # type: QJSValue.ErrorType + EvalError = ... # type: QJSValue.ErrorType + RangeError = ... # type: QJSValue.ErrorType + ReferenceError = ... # type: QJSValue.ErrorType + SyntaxError = ... # type: QJSValue.ErrorType + TypeError = ... # type: QJSValue.ErrorType + URIError = ... # type: QJSValue.ErrorType + + class SpecialValue(int): + NullValue = ... # type: QJSValue.SpecialValue + UndefinedValue = ... # type: QJSValue.SpecialValue + + @typing.overload + def __init__(self, value: 'QJSValue.SpecialValue' = ...) -> None: ... + @typing.overload + def __init__(self, other: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... + + def errorType(self) -> 'QJSValue.ErrorType': ... + def callAsConstructor(self, args: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... + def callWithInstance(self, instance: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]], args: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... + def call(self, args: typing.Iterable[typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]] = ...) -> 'QJSValue': ... + def isCallable(self) -> bool: ... + def deleteProperty(self, name: typing.Optional[str]) -> bool: ... + def hasOwnProperty(self, name: typing.Optional[str]) -> bool: ... + def hasProperty(self, name: typing.Optional[str]) -> bool: ... + @typing.overload + def setProperty(self, name: typing.Optional[str], value: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... + @typing.overload + def setProperty(self, arrayIndex: int, value: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... + @typing.overload + def property(self, name: typing.Optional[str]) -> 'QJSValue': ... + @typing.overload + def property(self, arrayIndex: int) -> 'QJSValue': ... + def setPrototype(self, prototype: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> None: ... + def prototype(self) -> 'QJSValue': ... + def strictlyEquals(self, other: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> bool: ... + def equals(self, other: typing.Union['QJSValue', 'QJSValue.SpecialValue', bool, int, float, typing.Optional[str]]) -> bool: ... + def toDateTime(self) -> QtCore.QDateTime: ... + def toQObject(self) -> typing.Optional[QtCore.QObject]: ... + def toVariant(self) -> typing.Any: ... + def toBool(self) -> bool: ... + def toUInt(self) -> int: ... + def toInt(self) -> int: ... + def toNumber(self) -> float: ... + def toString(self) -> str: ... + def isError(self) -> bool: ... + def isArray(self) -> bool: ... + def isRegExp(self) -> bool: ... + def isDate(self) -> bool: ... + def isObject(self) -> bool: ... + def isQObject(self) -> bool: ... + def isVariant(self) -> bool: ... + def isUndefined(self) -> bool: ... + def isString(self) -> bool: ... + def isNull(self) -> bool: ... + def isNumber(self) -> bool: ... + def isBool(self) -> bool: ... + + +class QJSValueIterator(PyQt5.sipsimplewrapper): + + def __init__(self, value: typing.Union[QJSValue, QJSValue.SpecialValue, bool, int, float, typing.Optional[str]]) -> None: ... + + def value(self) -> QJSValue: ... + def name(self) -> str: ... + def next(self) -> bool: ... + def hasNext(self) -> bool: ... + + +class QQmlAbstractUrlInterceptor(PyQt5.sipsimplewrapper): + + class DataType(int): + QmlFile = ... # type: QQmlAbstractUrlInterceptor.DataType + JavaScriptFile = ... # type: QQmlAbstractUrlInterceptor.DataType + QmldirFile = ... # type: QQmlAbstractUrlInterceptor.DataType + UrlString = ... # type: QQmlAbstractUrlInterceptor.DataType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlAbstractUrlInterceptor') -> None: ... + + def intercept(self, path: QtCore.QUrl, type: 'QQmlAbstractUrlInterceptor.DataType') -> QtCore.QUrl: ... + + +class QQmlEngine(QJSEngine): + + class ObjectOwnership(int): + CppOwnership = ... # type: QQmlEngine.ObjectOwnership + JavaScriptOwnership = ... # type: QQmlEngine.ObjectOwnership + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def singletonInstance(self, qmlTypeId: int) -> QtCore.QObject: ... + def retranslate(self) -> None: ... + def offlineStorageDatabaseFilePath(self, databaseName: typing.Optional[str]) -> str: ... + exit: typing.ClassVar[QtCore.pyqtSignal] + warnings: typing.ClassVar[QtCore.pyqtSignal] + quit: typing.ClassVar[QtCore.pyqtSignal] + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + @staticmethod + def objectOwnership(a0: typing.Optional[QtCore.QObject]) -> 'QQmlEngine.ObjectOwnership': ... + @staticmethod + def setObjectOwnership(a0: typing.Optional[QtCore.QObject], a1: 'QQmlEngine.ObjectOwnership') -> None: ... + @staticmethod + def setContextForObject(a0: typing.Optional[QtCore.QObject], a1: typing.Optional['QQmlContext']) -> None: ... + @staticmethod + def contextForObject(a0: typing.Optional[QtCore.QObject]) -> typing.Optional['QQmlContext']: ... + def setOutputWarningsToStandardError(self, a0: bool) -> None: ... + def outputWarningsToStandardError(self) -> bool: ... + def setBaseUrl(self, a0: QtCore.QUrl) -> None: ... + def baseUrl(self) -> QtCore.QUrl: ... + def offlineStoragePath(self) -> str: ... + def setOfflineStoragePath(self, dir: typing.Optional[str]) -> None: ... + def incubationController(self) -> typing.Optional['QQmlIncubationController']: ... + def setIncubationController(self, a0: typing.Optional['QQmlIncubationController']) -> None: ... + def removeImageProvider(self, id: typing.Optional[str]) -> None: ... + def imageProvider(self, id: typing.Optional[str]) -> typing.Optional['QQmlImageProviderBase']: ... + def addImageProvider(self, id: typing.Optional[str], a1: typing.Optional['QQmlImageProviderBase']) -> None: ... + def networkAccessManager(self) -> typing.Optional[QtNetwork.QNetworkAccessManager]: ... + def networkAccessManagerFactory(self) -> typing.Optional['QQmlNetworkAccessManagerFactory']: ... + def setNetworkAccessManagerFactory(self, a0: typing.Optional['QQmlNetworkAccessManagerFactory']) -> None: ... + def importPlugin(self, filePath: typing.Optional[str], uri: typing.Optional[str], errors: typing.Optional[typing.Iterable['QQmlError']]) -> bool: ... + def addNamedBundle(self, name: typing.Optional[str], fileName: typing.Optional[str]) -> bool: ... + def addPluginPath(self, dir: typing.Optional[str]) -> None: ... + def setPluginPathList(self, paths: typing.Iterable[typing.Optional[str]]) -> None: ... + def pluginPathList(self) -> typing.List[str]: ... + def addImportPath(self, dir: typing.Optional[str]) -> None: ... + def setImportPathList(self, paths: typing.Iterable[typing.Optional[str]]) -> None: ... + def importPathList(self) -> typing.List[str]: ... + def trimComponentCache(self) -> None: ... + def clearComponentCache(self) -> None: ... + def rootContext(self) -> typing.Optional['QQmlContext']: ... + + +class QQmlApplicationEngine(QQmlEngine): + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, url: QtCore.QUrl, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, filePath: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + objectCreated: typing.ClassVar[QtCore.pyqtSignal] + def setInitialProperties(self, initialProperties: typing.Dict[str, typing.Any]) -> None: ... + def loadData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray], url: QtCore.QUrl = ...) -> None: ... + @typing.overload + def load(self, url: QtCore.QUrl) -> None: ... + @typing.overload + def load(self, filePath: typing.Optional[str]) -> None: ... + def rootObjects(self) -> typing.List[QtCore.QObject]: ... + + +class QQmlComponent(QtCore.QObject): + + class Status(int): + Null = ... # type: QQmlComponent.Status + Ready = ... # type: QQmlComponent.Status + Loading = ... # type: QQmlComponent.Status + Error = ... # type: QQmlComponent.Status + + class CompilationMode(int): + PreferSynchronous = ... # type: QQmlComponent.CompilationMode + Asynchronous = ... # type: QQmlComponent.CompilationMode + + @typing.overload + def __init__(self, a0: typing.Optional[QQmlEngine], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QQmlEngine], fileName: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QQmlEngine], fileName: typing.Optional[str], mode: 'QQmlComponent.CompilationMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QQmlEngine], url: QtCore.QUrl, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QQmlEngine], url: QtCore.QUrl, mode: 'QQmlComponent.CompilationMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setInitialProperties(self, component: typing.Optional[QtCore.QObject], properties: typing.Dict[str, typing.Any]) -> None: ... + def engine(self) -> typing.Optional[QQmlEngine]: ... + progressChanged: typing.ClassVar[QtCore.pyqtSignal] + statusChanged: typing.ClassVar[QtCore.pyqtSignal] + def setData(self, a0: typing.Union[QtCore.QByteArray, bytes, bytearray], baseUrl: QtCore.QUrl) -> None: ... + @typing.overload + def loadUrl(self, url: QtCore.QUrl) -> None: ... + @typing.overload + def loadUrl(self, url: QtCore.QUrl, mode: 'QQmlComponent.CompilationMode') -> None: ... + def creationContext(self) -> typing.Optional['QQmlContext']: ... + def completeCreate(self) -> None: ... + def beginCreate(self, a0: typing.Optional['QQmlContext']) -> typing.Optional[QtCore.QObject]: ... + def createWithInitialProperties(self, initialProperties: typing.Dict[str, typing.Any], context: typing.Optional['QQmlContext'] = ...) -> typing.Optional[QtCore.QObject]: ... + @typing.overload + def create(self, context: typing.Optional['QQmlContext'] = ...) -> typing.Optional[QtCore.QObject]: ... + @typing.overload + def create(self, a0: 'QQmlIncubator', context: typing.Optional['QQmlContext'] = ..., forContext: typing.Optional['QQmlContext'] = ...) -> None: ... + def url(self) -> QtCore.QUrl: ... + def progress(self) -> float: ... + def errors(self) -> typing.List['QQmlError']: ... + def isLoading(self) -> bool: ... + def isError(self) -> bool: ... + def isReady(self) -> bool: ... + def isNull(self) -> bool: ... + def status(self) -> 'QQmlComponent.Status': ... + + +class QQmlContext(QtCore.QObject): + + class PropertyPair(PyQt5.sipsimplewrapper): + + name = ... # type: typing.Optional[str] + value = ... # type: typing.Any + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlContext.PropertyPair') -> None: ... + + @typing.overload + def __init__(self, engine: typing.Optional[QQmlEngine], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, parentContext: typing.Optional['QQmlContext'], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setContextProperties(self, properties: typing.Iterable['QQmlContext.PropertyPair']) -> None: ... + def baseUrl(self) -> QtCore.QUrl: ... + def setBaseUrl(self, a0: QtCore.QUrl) -> None: ... + def resolvedUrl(self, a0: QtCore.QUrl) -> QtCore.QUrl: ... + def nameForObject(self, a0: typing.Optional[QtCore.QObject]) -> str: ... + @typing.overload + def setContextProperty(self, a0: typing.Optional[str], a1: typing.Optional[QtCore.QObject]) -> None: ... + @typing.overload + def setContextProperty(self, a0: typing.Optional[str], a1: typing.Any) -> None: ... + def contextProperty(self, a0: typing.Optional[str]) -> typing.Any: ... + def setContextObject(self, a0: typing.Optional[QtCore.QObject]) -> None: ... + def contextObject(self) -> typing.Optional[QtCore.QObject]: ... + def parentContext(self) -> typing.Optional['QQmlContext']: ... + def engine(self) -> typing.Optional[QQmlEngine]: ... + def isValid(self) -> bool: ... + + +class QQmlImageProviderBase(PyQt5.sip.wrapper): + + class Flag(int): + ForceAsynchronousImageLoading = ... # type: QQmlImageProviderBase.Flag + + class ImageType(int): + Image = ... # type: QQmlImageProviderBase.ImageType + Pixmap = ... # type: QQmlImageProviderBase.ImageType + Texture = ... # type: QQmlImageProviderBase.ImageType + ImageResponse = ... # type: QQmlImageProviderBase.ImageType + + class Flags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QQmlImageProviderBase.Flags', 'QQmlImageProviderBase.Flag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QQmlImageProviderBase.Flags', 'QQmlImageProviderBase.Flag']) -> 'QQmlImageProviderBase.Flags': ... + def __xor__(self, f: typing.Union['QQmlImageProviderBase.Flags', 'QQmlImageProviderBase.Flag']) -> 'QQmlImageProviderBase.Flags': ... + def __ior__(self, f: typing.Union['QQmlImageProviderBase.Flags', 'QQmlImageProviderBase.Flag']) -> 'QQmlImageProviderBase.Flags': ... + def __or__(self, f: typing.Union['QQmlImageProviderBase.Flags', 'QQmlImageProviderBase.Flag']) -> 'QQmlImageProviderBase.Flags': ... + def __iand__(self, f: typing.Union['QQmlImageProviderBase.Flags', 'QQmlImageProviderBase.Flag']) -> 'QQmlImageProviderBase.Flags': ... + def __and__(self, f: typing.Union['QQmlImageProviderBase.Flags', 'QQmlImageProviderBase.Flag']) -> 'QQmlImageProviderBase.Flags': ... + def __invert__(self) -> 'QQmlImageProviderBase.Flags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, a0: 'QQmlImageProviderBase') -> None: ... + + def flags(self) -> 'QQmlImageProviderBase.Flags': ... + def imageType(self) -> 'QQmlImageProviderBase.ImageType': ... + + +class QQmlError(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlError') -> None: ... + + def setMessageType(self, messageType: QtCore.QtMsgType) -> None: ... + def messageType(self) -> QtCore.QtMsgType: ... + def setObject(self, a0: typing.Optional[QtCore.QObject]) -> None: ... + def object(self) -> typing.Optional[QtCore.QObject]: ... + def toString(self) -> str: ... + def setColumn(self, a0: int) -> None: ... + def column(self) -> int: ... + def setLine(self, a0: int) -> None: ... + def line(self) -> int: ... + def setDescription(self, a0: typing.Optional[str]) -> None: ... + def description(self) -> str: ... + def setUrl(self, a0: QtCore.QUrl) -> None: ... + def url(self) -> QtCore.QUrl: ... + def isValid(self) -> bool: ... + + +class QQmlExpression(QtCore.QObject): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QQmlContext], a1: typing.Optional[QtCore.QObject], a2: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlScriptString', context: typing.Optional[QQmlContext] = ..., scope: typing.Optional[QtCore.QObject] = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + valueChanged: typing.ClassVar[QtCore.pyqtSignal] + def evaluate(self) -> typing.Tuple[typing.Any, typing.Optional[bool]]: ... + def error(self) -> QQmlError: ... + def clearError(self) -> None: ... + def hasError(self) -> bool: ... + def scopeObject(self) -> typing.Optional[QtCore.QObject]: ... + def setSourceLocation(self, fileName: typing.Optional[str], line: int, column: int = ...) -> None: ... + def columnNumber(self) -> int: ... + def lineNumber(self) -> int: ... + def sourceFile(self) -> str: ... + def setNotifyOnValueChanged(self, a0: bool) -> None: ... + def notifyOnValueChanged(self) -> bool: ... + def setExpression(self, a0: typing.Optional[str]) -> None: ... + def expression(self) -> str: ... + def context(self) -> typing.Optional[QQmlContext]: ... + def engine(self) -> typing.Optional[QQmlEngine]: ... + + +class QQmlExtensionPlugin(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def baseUrl(self) -> QtCore.QUrl: ... + def initializeEngine(self, engine: typing.Optional[QQmlEngine], uri: typing.Optional[str]) -> None: ... + def registerTypes(self, uri: typing.Optional[str]) -> None: ... + + +class QQmlEngineExtensionPlugin(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def initializeEngine(self, engine: typing.Optional[QQmlEngine], uri: typing.Optional[str]) -> None: ... + + +class QQmlFileSelector(QtCore.QObject): + + def __init__(self, engine: typing.Optional[QQmlEngine], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def selector(self) -> typing.Optional[QtCore.QFileSelector]: ... + @staticmethod + def get(a0: typing.Optional[QQmlEngine]) -> typing.Optional['QQmlFileSelector']: ... + def setExtraSelectors(self, strings: typing.Iterable[typing.Optional[str]]) -> None: ... + def setSelector(self, selector: typing.Optional[QtCore.QFileSelector]) -> None: ... + + +class QQmlIncubator(PyQt5.sipsimplewrapper): + + class Status(int): + Null = ... # type: QQmlIncubator.Status + Ready = ... # type: QQmlIncubator.Status + Loading = ... # type: QQmlIncubator.Status + Error = ... # type: QQmlIncubator.Status + + class IncubationMode(int): + Asynchronous = ... # type: QQmlIncubator.IncubationMode + AsynchronousIfNested = ... # type: QQmlIncubator.IncubationMode + Synchronous = ... # type: QQmlIncubator.IncubationMode + + def __init__(self, mode: 'QQmlIncubator.IncubationMode' = ...) -> None: ... + + def setInitialState(self, a0: typing.Optional[QtCore.QObject]) -> None: ... + def statusChanged(self, a0: 'QQmlIncubator.Status') -> None: ... + def setInitialProperties(self, initialProperties: typing.Dict[str, typing.Any]) -> None: ... + def object(self) -> typing.Optional[QtCore.QObject]: ... + def status(self) -> 'QQmlIncubator.Status': ... + def incubationMode(self) -> 'QQmlIncubator.IncubationMode': ... + def errors(self) -> typing.List[QQmlError]: ... + def isLoading(self) -> bool: ... + def isError(self) -> bool: ... + def isReady(self) -> bool: ... + def isNull(self) -> bool: ... + def forceCompletion(self) -> None: ... + def clear(self) -> None: ... + + +class QQmlIncubationController(PyQt5.sipsimplewrapper): + + def __init__(self) -> None: ... + + def incubatingObjectCountChanged(self, a0: int) -> None: ... + def incubateFor(self, msecs: int) -> None: ... + def incubatingObjectCount(self) -> int: ... + def engine(self) -> typing.Optional[QQmlEngine]: ... + + +class QQmlListReference(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QtCore.QObject], property: typing.Optional[str], engine: typing.Optional[QQmlEngine] = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlListReference') -> None: ... + + def removeLast(self) -> bool: ... + def replace(self, a0: int, a1: typing.Optional[QtCore.QObject]) -> bool: ... + def canRemoveLast(self) -> bool: ... + def canReplace(self) -> bool: ... + def count(self) -> int: ... + def clear(self) -> bool: ... + def at(self, a0: int) -> typing.Optional[QtCore.QObject]: ... + def append(self, a0: typing.Optional[QtCore.QObject]) -> bool: ... + def isReadable(self) -> bool: ... + def isManipulable(self) -> bool: ... + def canCount(self) -> bool: ... + def canClear(self) -> bool: ... + def canAt(self) -> bool: ... + def canAppend(self) -> bool: ... + def listElementType(self) -> typing.Optional[QtCore.QMetaObject]: ... + def object(self) -> typing.Optional[QtCore.QObject]: ... + def isValid(self) -> bool: ... + + +class QQmlNetworkAccessManagerFactory(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlNetworkAccessManagerFactory') -> None: ... + + def create(self, parent: typing.Optional[QtCore.QObject]) -> typing.Optional[QtNetwork.QNetworkAccessManager]: ... + + +class QQmlParserStatus(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlParserStatus') -> None: ... + + def componentComplete(self) -> None: ... + def classBegin(self) -> None: ... + + +class QQmlProperty(PyQt5.sipsimplewrapper): + + class Type(int): + Invalid = ... # type: QQmlProperty.Type + Property = ... # type: QQmlProperty.Type + SignalProperty = ... # type: QQmlProperty.Type + + class PropertyTypeCategory(int): + InvalidCategory = ... # type: QQmlProperty.PropertyTypeCategory + List = ... # type: QQmlProperty.PropertyTypeCategory + Object = ... # type: QQmlProperty.PropertyTypeCategory + Normal = ... # type: QQmlProperty.PropertyTypeCategory + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QtCore.QObject]) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QQmlContext]) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QQmlEngine]) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Optional[QQmlContext]) -> None: ... + @typing.overload + def __init__(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Optional[QQmlEngine]) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlProperty') -> None: ... + + def __ne__(self, other: object): ... + def method(self) -> QtCore.QMetaMethod: ... + def property(self) -> QtCore.QMetaProperty: ... + def index(self) -> int: ... + def object(self) -> typing.Optional[QtCore.QObject]: ... + def isResettable(self) -> bool: ... + def isDesignable(self) -> bool: ... + def isWritable(self) -> bool: ... + @typing.overload + def connectNotifySignal(self, slot: PYQT_SLOT) -> bool: ... + @typing.overload + def connectNotifySignal(self, dest: typing.Optional[QtCore.QObject], method: int) -> bool: ... + def needsNotifySignal(self) -> bool: ... + def hasNotifySignal(self) -> bool: ... + def reset(self) -> bool: ... + @typing.overload + def write(self, a0: typing.Any) -> bool: ... + @typing.overload + @staticmethod + def write(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Any) -> bool: ... + @typing.overload + @staticmethod + def write(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Any, a3: typing.Optional[QQmlContext]) -> bool: ... + @typing.overload + @staticmethod + def write(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Any, a3: typing.Optional[QQmlEngine]) -> bool: ... + @typing.overload + def read(self) -> typing.Any: ... + @typing.overload + @staticmethod + def read(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str]) -> typing.Any: ... + @typing.overload + @staticmethod + def read(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Optional[QQmlContext]) -> typing.Any: ... + @typing.overload + @staticmethod + def read(a0: typing.Optional[QtCore.QObject], a1: typing.Optional[str], a2: typing.Optional[QQmlEngine]) -> typing.Any: ... + def name(self) -> str: ... + def propertyTypeName(self) -> typing.Optional[str]: ... + def propertyTypeCategory(self) -> 'QQmlProperty.PropertyTypeCategory': ... + def propertyType(self) -> int: ... + def isSignalProperty(self) -> bool: ... + def isProperty(self) -> bool: ... + def isValid(self) -> bool: ... + def type(self) -> 'QQmlProperty.Type': ... + def __eq__(self, other: object): ... + def __hash__(self) -> int: ... + + +class QQmlPropertyMap(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def updateValue(self, key: typing.Optional[str], input: typing.Any) -> typing.Any: ... + valueChanged: typing.ClassVar[QtCore.pyqtSignal] + def __getitem__(self, key: typing.Optional[str]) -> typing.Any: ... + def contains(self, key: typing.Optional[str]) -> bool: ... + def isEmpty(self) -> bool: ... + def __len__(self) -> int: ... + def size(self) -> int: ... + def count(self) -> int: ... + def keys(self) -> typing.List[str]: ... + def clear(self, key: typing.Optional[str]) -> None: ... + def insert(self, key: typing.Optional[str], value: typing.Any) -> None: ... + def value(self, key: typing.Optional[str]) -> typing.Any: ... + + +class QQmlPropertyValueSource(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlPropertyValueSource') -> None: ... + + def setTarget(self, a0: QQmlProperty) -> None: ... + + +class QQmlScriptString(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQmlScriptString') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def booleanLiteral(self) -> typing.Tuple[bool, typing.Optional[bool]]: ... + def numberLiteral(self) -> typing.Tuple[float, typing.Optional[bool]]: ... + def stringLiteral(self) -> str: ... + def isNullLiteral(self) -> bool: ... + def isUndefinedLiteral(self) -> bool: ... + def isEmpty(self) -> bool: ... + + +@typing.overload +def qmlRegisterUncreatableType(a0: type, uri: typing.Optional[str], major: int, minor: int, qmlName: typing.Optional[str], reason: typing.Optional[str]) -> int: ... +@typing.overload +def qmlRegisterUncreatableType(a0: type, revision: int, uri: typing.Optional[str], major: int, minor: int, qmlName: typing.Optional[str], reason: typing.Optional[str]) -> int: ... +@typing.overload +def qmlRegisterType(url: QtCore.QUrl, uri: typing.Optional[str], major: int, minor: int, qmlName: typing.Optional[str]) -> int: ... +@typing.overload +def qmlRegisterType(a0: type, attachedProperties: type = ...) -> int: ... +@typing.overload +def qmlRegisterType(a0: type, uri: typing.Optional[str], major: int, minor: int, qmlName: typing.Optional[str], attachedProperties: type = ...) -> int: ... +@typing.overload +def qmlRegisterType(a0: type, revision: int, uri: typing.Optional[str], major: int, minor: int, qmlName: typing.Optional[str], attachedProperties: type = ...) -> int: ... +@typing.overload +def qmlRegisterSingletonType(url: QtCore.QUrl, uri: typing.Optional[str], major: int, minor: int, qmlName: typing.Optional[str]) -> int: ... +@typing.overload +def qmlRegisterSingletonType(a0: type, uri: typing.Optional[str], major: int, minor: int, typeName: typing.Optional[str], factory: typing.Callable[[QQmlEngine, QJSEngine], typing.Any]) -> int: ... +def qmlRegisterRevision(a0: type, revision: int, uri: typing.Optional[str], major: int, minor: int, attachedProperties: type = ...) -> int: ... +def qmlAttachedPropertiesObject(a0: type, object: typing.Optional[QtCore.QObject], create: bool = ...) -> typing.Optional[QtCore.QObject]: ... +def qjsEngine(a0: typing.Optional[QtCore.QObject]) -> typing.Optional[QJSEngine]: ... +def qmlTypeId(uri: typing.Optional[str], versionMajor: int, versionMinor: int, qmlName: typing.Optional[str]) -> int: ... +def qmlClearTypeRegistrations() -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtQuick.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtQuick.abi3.so new file mode 100644 index 0000000..ff5c6de Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtQuick.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtQuick.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtQuick.pyi new file mode 100644 index 0000000..2aa2db6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtQuick.pyi @@ -0,0 +1,1691 @@ +# The PEP 484 type hints stub file for the QtQuick module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtNetwork +from PyQt5 import QtQml + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QQuickItem(QtCore.QObject, QtQml.QQmlParserStatus): + + class TransformOrigin(int): + TopLeft = ... # type: QQuickItem.TransformOrigin + Top = ... # type: QQuickItem.TransformOrigin + TopRight = ... # type: QQuickItem.TransformOrigin + Left = ... # type: QQuickItem.TransformOrigin + Center = ... # type: QQuickItem.TransformOrigin + Right = ... # type: QQuickItem.TransformOrigin + BottomLeft = ... # type: QQuickItem.TransformOrigin + Bottom = ... # type: QQuickItem.TransformOrigin + BottomRight = ... # type: QQuickItem.TransformOrigin + + class ItemChange(int): + ItemChildAddedChange = ... # type: QQuickItem.ItemChange + ItemChildRemovedChange = ... # type: QQuickItem.ItemChange + ItemSceneChange = ... # type: QQuickItem.ItemChange + ItemVisibleHasChanged = ... # type: QQuickItem.ItemChange + ItemParentHasChanged = ... # type: QQuickItem.ItemChange + ItemOpacityHasChanged = ... # type: QQuickItem.ItemChange + ItemActiveFocusHasChanged = ... # type: QQuickItem.ItemChange + ItemRotationHasChanged = ... # type: QQuickItem.ItemChange + ItemAntialiasingHasChanged = ... # type: QQuickItem.ItemChange + ItemDevicePixelRatioHasChanged = ... # type: QQuickItem.ItemChange + ItemEnabledHasChanged = ... # type: QQuickItem.ItemChange + + class Flag(int): + ItemClipsChildrenToShape = ... # type: QQuickItem.Flag + ItemAcceptsInputMethod = ... # type: QQuickItem.Flag + ItemIsFocusScope = ... # type: QQuickItem.Flag + ItemHasContents = ... # type: QQuickItem.Flag + ItemAcceptsDrops = ... # type: QQuickItem.Flag + + class Flags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QQuickItem.Flags', 'QQuickItem.Flag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QQuickItem.Flags', 'QQuickItem.Flag']) -> 'QQuickItem.Flags': ... + def __xor__(self, f: typing.Union['QQuickItem.Flags', 'QQuickItem.Flag']) -> 'QQuickItem.Flags': ... + def __ior__(self, f: typing.Union['QQuickItem.Flags', 'QQuickItem.Flag']) -> 'QQuickItem.Flags': ... + def __or__(self, f: typing.Union['QQuickItem.Flags', 'QQuickItem.Flag']) -> 'QQuickItem.Flags': ... + def __iand__(self, f: typing.Union['QQuickItem.Flags', 'QQuickItem.Flag']) -> 'QQuickItem.Flags': ... + def __and__(self, f: typing.Union['QQuickItem.Flags', 'QQuickItem.Flag']) -> 'QQuickItem.Flags': ... + def __invert__(self) -> 'QQuickItem.Flags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ItemChangeData(PyQt5.sipsimplewrapper): + + boolValue = ... # type: bool + item = ... # type: 'QQuickItem' + realValue = ... # type: float + window = ... # type: 'QQuickWindow' + + @typing.overload + def __init__(self, v: typing.Optional['QQuickItem']) -> None: ... + @typing.overload + def __init__(self, v: typing.Optional['QQuickWindow']) -> None: ... + @typing.overload + def __init__(self, v: float) -> None: ... + @typing.overload + def __init__(self, v: bool) -> None: ... + @typing.overload + def __init__(self, a0: 'QQuickItem.ItemChangeData') -> None: ... + + class UpdatePaintNodeData(PyQt5.sipsimplewrapper): + + transformNode = ... # type: 'QSGTransformNode' + + def __init__(self, a0: 'QQuickItem.UpdatePaintNodeData') -> None: ... + + def __init__(self, parent: typing.Optional['QQuickItem'] = ...) -> None: ... + + containmentMaskChanged: typing.ClassVar[QtCore.pyqtSignal] + def setContainmentMask(self, mask: typing.Optional[QtCore.QObject]) -> None: ... + def containmentMask(self) -> typing.Optional[QtCore.QObject]: ... + def setAcceptTouchEvents(self, accept: bool) -> None: ... + def acceptTouchEvents(self) -> bool: ... + def size(self) -> QtCore.QSizeF: ... + def mapFromGlobal(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + def mapToGlobal(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + def isAncestorOf(self, child: typing.Optional['QQuickItem']) -> bool: ... + def grabToImage(self, targetSize: QtCore.QSize = ...) -> typing.Optional['QQuickItemGrabResult']: ... + def resetAntialiasing(self) -> None: ... + windowChanged: typing.ClassVar[QtCore.pyqtSignal] + def nextItemInFocusChain(self, forward: bool = ...) -> typing.Optional['QQuickItem']: ... + def setActiveFocusOnTab(self, a0: bool) -> None: ... + def activeFocusOnTab(self) -> bool: ... + def updatePolish(self) -> None: ... + def releaseResources(self) -> None: ... + def updatePaintNode(self, a0: typing.Optional['QSGNode'], a1: typing.Optional['QQuickItem.UpdatePaintNodeData']) -> typing.Optional['QSGNode']: ... + def geometryChanged(self, newGeometry: QtCore.QRectF, oldGeometry: QtCore.QRectF) -> None: ... + def childMouseEventFilter(self, a0: typing.Optional['QQuickItem'], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragLeaveEvent(self, a0: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragMoveEvent(self, a0: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def hoverLeaveEvent(self, event: typing.Optional[QtGui.QHoverEvent]) -> None: ... + def hoverMoveEvent(self, event: typing.Optional[QtGui.QHoverEvent]) -> None: ... + def hoverEnterEvent(self, event: typing.Optional[QtGui.QHoverEvent]) -> None: ... + def touchEvent(self, event: typing.Optional[QtGui.QTouchEvent]) -> None: ... + def wheelEvent(self, event: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def touchUngrabEvent(self) -> None: ... + def mouseUngrabEvent(self) -> None: ... + def mouseDoubleClickEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def componentComplete(self) -> None: ... + def classBegin(self) -> None: ... + def heightValid(self) -> bool: ... + def widthValid(self) -> bool: ... + def updateInputMethod(self, queries: typing.Union[QtCore.Qt.InputMethodQueries, QtCore.Qt.InputMethodQuery] = ...) -> None: ... + def itemChange(self, a0: 'QQuickItem.ItemChange', a1: 'QQuickItem.ItemChangeData') -> None: ... + def isComponentComplete(self) -> bool: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def update(self) -> None: ... + def textureProvider(self) -> typing.Optional['QSGTextureProvider']: ... + def isTextureProvider(self) -> bool: ... + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def childAt(self, x: float, y: float) -> typing.Optional['QQuickItem']: ... + @typing.overload + def forceActiveFocus(self) -> None: ... + @typing.overload + def forceActiveFocus(self, reason: QtCore.Qt.FocusReason) -> None: ... + def polish(self) -> None: ... + def mapRectFromScene(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + def mapRectFromItem(self, item: typing.Optional['QQuickItem'], rect: QtCore.QRectF) -> QtCore.QRectF: ... + def mapFromScene(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + def mapFromItem(self, item: typing.Optional['QQuickItem'], point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + def mapRectToScene(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + def mapRectToItem(self, item: typing.Optional['QQuickItem'], rect: QtCore.QRectF) -> QtCore.QRectF: ... + def mapToScene(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + def mapToItem(self, item: typing.Optional['QQuickItem'], point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def setKeepTouchGrab(self, a0: bool) -> None: ... + def keepTouchGrab(self) -> bool: ... + def ungrabTouchPoints(self) -> None: ... + def grabTouchPoints(self, ids: typing.Iterable[int]) -> None: ... + def setFiltersChildMouseEvents(self, filter: bool) -> None: ... + def filtersChildMouseEvents(self) -> bool: ... + def setKeepMouseGrab(self, a0: bool) -> None: ... + def keepMouseGrab(self) -> bool: ... + def ungrabMouse(self) -> None: ... + def grabMouse(self) -> None: ... + def unsetCursor(self) -> None: ... + def setCursor(self, cursor: typing.Union[QtGui.QCursor, QtCore.Qt.CursorShape]) -> None: ... + def cursor(self) -> QtGui.QCursor: ... + def setAcceptHoverEvents(self, enabled: bool) -> None: ... + def acceptHoverEvents(self) -> bool: ... + def setAcceptedMouseButtons(self, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton]) -> None: ... + def acceptedMouseButtons(self) -> QtCore.Qt.MouseButtons: ... + def scopedFocusItem(self) -> typing.Optional['QQuickItem']: ... + def isFocusScope(self) -> bool: ... + @typing.overload + def setFocus(self, a0: bool) -> None: ... + @typing.overload + def setFocus(self, focus: bool, reason: QtCore.Qt.FocusReason) -> None: ... + def hasFocus(self) -> bool: ... + def hasActiveFocus(self) -> bool: ... + def setFlags(self, flags: typing.Union['QQuickItem.Flags', 'QQuickItem.Flag']) -> None: ... + def setFlag(self, flag: 'QQuickItem.Flag', enabled: bool = ...) -> None: ... + def flags(self) -> 'QQuickItem.Flags': ... + def setAntialiasing(self, a0: bool) -> None: ... + def antialiasing(self) -> bool: ... + def setSmooth(self, a0: bool) -> None: ... + def smooth(self) -> bool: ... + def setEnabled(self, a0: bool) -> None: ... + def isEnabled(self) -> bool: ... + def setVisible(self, a0: bool) -> None: ... + def isVisible(self) -> bool: ... + def setOpacity(self, a0: float) -> None: ... + def opacity(self) -> float: ... + def setScale(self, a0: float) -> None: ... + def scale(self) -> float: ... + def setRotation(self, a0: float) -> None: ... + def rotation(self) -> float: ... + def setZ(self, a0: float) -> None: ... + def z(self) -> float: ... + def setTransformOrigin(self, a0: 'QQuickItem.TransformOrigin') -> None: ... + def transformOrigin(self) -> 'QQuickItem.TransformOrigin': ... + def implicitHeight(self) -> float: ... + def setImplicitHeight(self, a0: float) -> None: ... + def resetHeight(self) -> None: ... + def setHeight(self, a0: float) -> None: ... + def height(self) -> float: ... + def implicitWidth(self) -> float: ... + def setImplicitWidth(self, a0: float) -> None: ... + def resetWidth(self) -> None: ... + def setWidth(self, a0: float) -> None: ... + def width(self) -> float: ... + def setY(self, a0: float) -> None: ... + def setX(self, a0: float) -> None: ... + def y(self) -> float: ... + def x(self) -> float: ... + def setBaselineOffset(self, a0: float) -> None: ... + def baselineOffset(self) -> float: ... + def setState(self, a0: typing.Optional[str]) -> None: ... + def state(self) -> str: ... + def setClip(self, a0: bool) -> None: ... + def clip(self) -> bool: ... + def childItems(self) -> typing.List['QQuickItem']: ... + def childrenRect(self) -> QtCore.QRectF: ... + def stackAfter(self, a0: typing.Optional['QQuickItem']) -> None: ... + def stackBefore(self, a0: typing.Optional['QQuickItem']) -> None: ... + def setParentItem(self, parent: typing.Optional['QQuickItem']) -> None: ... + def parentItem(self) -> typing.Optional['QQuickItem']: ... + def window(self) -> typing.Optional['QQuickWindow']: ... + + +class QQuickFramebufferObject(QQuickItem): + + class Renderer(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQuickFramebufferObject.Renderer') -> None: ... + + def invalidateFramebufferObject(self) -> None: ... + def update(self) -> None: ... + def framebufferObject(self) -> typing.Optional[QtGui.QOpenGLFramebufferObject]: ... + def synchronize(self, a0: typing.Optional['QQuickFramebufferObject']) -> None: ... + def createFramebufferObject(self, size: QtCore.QSize) -> typing.Optional[QtGui.QOpenGLFramebufferObject]: ... + def render(self) -> None: ... + + def __init__(self, parent: typing.Optional[QQuickItem] = ...) -> None: ... + + mirrorVerticallyChanged: typing.ClassVar[QtCore.pyqtSignal] + def setMirrorVertically(self, enable: bool) -> None: ... + def mirrorVertically(self) -> bool: ... + def releaseResources(self) -> None: ... + def textureProvider(self) -> typing.Optional['QSGTextureProvider']: ... + def isTextureProvider(self) -> bool: ... + textureFollowsItemSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + def updatePaintNode(self, a0: typing.Optional['QSGNode'], a1: typing.Optional[QQuickItem.UpdatePaintNodeData]) -> typing.Optional['QSGNode']: ... + def geometryChanged(self, newGeometry: QtCore.QRectF, oldGeometry: QtCore.QRectF) -> None: ... + def createRenderer(self) -> typing.Optional['QQuickFramebufferObject.Renderer']: ... + def setTextureFollowsItemSize(self, follows: bool) -> None: ... + def textureFollowsItemSize(self) -> bool: ... + + +class QQuickTextureFactory(QtCore.QObject): + + def __init__(self) -> None: ... + + @staticmethod + def textureFactoryForImage(image: QtGui.QImage) -> typing.Optional['QQuickTextureFactory']: ... + def image(self) -> QtGui.QImage: ... + def textureByteCount(self) -> int: ... + def textureSize(self) -> QtCore.QSize: ... + def createTexture(self, window: typing.Optional['QQuickWindow']) -> typing.Optional['QSGTexture']: ... + + +class QQuickImageProvider(QtQml.QQmlImageProviderBase): + + @typing.overload + def __init__(self, type: QtQml.QQmlImageProviderBase.ImageType, flags: typing.Union[QtQml.QQmlImageProviderBase.Flags, QtQml.QQmlImageProviderBase.Flag] = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QQuickImageProvider') -> None: ... + + def requestTexture(self, id: typing.Optional[str], requestedSize: QtCore.QSize) -> typing.Tuple[typing.Optional[QQuickTextureFactory], typing.Optional[QtCore.QSize]]: ... + def requestPixmap(self, id: typing.Optional[str], requestedSize: QtCore.QSize) -> typing.Tuple[QtGui.QPixmap, typing.Optional[QtCore.QSize]]: ... + def requestImage(self, id: typing.Optional[str], requestedSize: QtCore.QSize) -> typing.Tuple[QtGui.QImage, typing.Optional[QtCore.QSize]]: ... + def flags(self) -> QtQml.QQmlImageProviderBase.Flags: ... + def imageType(self) -> QtQml.QQmlImageProviderBase.ImageType: ... + + +class QQuickImageResponse(QtCore.QObject): + + def __init__(self) -> None: ... + + finished: typing.ClassVar[QtCore.pyqtSignal] + def cancel(self) -> None: ... + def errorString(self) -> str: ... + def textureFactory(self) -> typing.Optional[QQuickTextureFactory]: ... + + +class QQuickAsyncImageProvider(QQuickImageProvider): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQuickAsyncImageProvider') -> None: ... + + def requestImageResponse(self, id: typing.Optional[str], requestedSize: QtCore.QSize) -> typing.Optional[QQuickImageResponse]: ... + + +class QQuickItemGrabResult(QtCore.QObject): + + ready: typing.ClassVar[QtCore.pyqtSignal] + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def saveToFile(self, fileName: typing.Optional[str]) -> bool: ... + def url(self) -> QtCore.QUrl: ... + def image(self) -> QtGui.QImage: ... + + +class QQuickPaintedItem(QQuickItem): + + class PerformanceHint(int): + FastFBOResizing = ... # type: QQuickPaintedItem.PerformanceHint + + class RenderTarget(int): + Image = ... # type: QQuickPaintedItem.RenderTarget + FramebufferObject = ... # type: QQuickPaintedItem.RenderTarget + InvertedYFramebufferObject = ... # type: QQuickPaintedItem.RenderTarget + + class PerformanceHints(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QQuickPaintedItem.PerformanceHints', 'QQuickPaintedItem.PerformanceHint']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QQuickPaintedItem.PerformanceHints', 'QQuickPaintedItem.PerformanceHint']) -> 'QQuickPaintedItem.PerformanceHints': ... + def __xor__(self, f: typing.Union['QQuickPaintedItem.PerformanceHints', 'QQuickPaintedItem.PerformanceHint']) -> 'QQuickPaintedItem.PerformanceHints': ... + def __ior__(self, f: typing.Union['QQuickPaintedItem.PerformanceHints', 'QQuickPaintedItem.PerformanceHint']) -> 'QQuickPaintedItem.PerformanceHints': ... + def __or__(self, f: typing.Union['QQuickPaintedItem.PerformanceHints', 'QQuickPaintedItem.PerformanceHint']) -> 'QQuickPaintedItem.PerformanceHints': ... + def __iand__(self, f: typing.Union['QQuickPaintedItem.PerformanceHints', 'QQuickPaintedItem.PerformanceHint']) -> 'QQuickPaintedItem.PerformanceHints': ... + def __and__(self, f: typing.Union['QQuickPaintedItem.PerformanceHints', 'QQuickPaintedItem.PerformanceHint']) -> 'QQuickPaintedItem.PerformanceHints': ... + def __invert__(self) -> 'QQuickPaintedItem.PerformanceHints': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QQuickItem] = ...) -> None: ... + + textureSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + def setTextureSize(self, size: QtCore.QSize) -> None: ... + def textureSize(self) -> QtCore.QSize: ... + def itemChange(self, a0: QQuickItem.ItemChange, a1: QQuickItem.ItemChangeData) -> None: ... + def releaseResources(self) -> None: ... + def textureProvider(self) -> typing.Optional['QSGTextureProvider']: ... + def isTextureProvider(self) -> bool: ... + def updatePaintNode(self, a0: typing.Optional['QSGNode'], a1: typing.Optional[QQuickItem.UpdatePaintNodeData]) -> typing.Optional['QSGNode']: ... + renderTargetChanged: typing.ClassVar[QtCore.pyqtSignal] + contentsScaleChanged: typing.ClassVar[QtCore.pyqtSignal] + contentsSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + fillColorChanged: typing.ClassVar[QtCore.pyqtSignal] + def paint(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + def setRenderTarget(self, target: 'QQuickPaintedItem.RenderTarget') -> None: ... + def renderTarget(self) -> 'QQuickPaintedItem.RenderTarget': ... + def setFillColor(self, a0: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def fillColor(self) -> QtGui.QColor: ... + def setContentsScale(self, a0: float) -> None: ... + def contentsScale(self) -> float: ... + def resetContentsSize(self) -> None: ... + def setContentsSize(self, a0: QtCore.QSize) -> None: ... + def contentsSize(self) -> QtCore.QSize: ... + def contentsBoundingRect(self) -> QtCore.QRectF: ... + def setPerformanceHints(self, hints: typing.Union['QQuickPaintedItem.PerformanceHints', 'QQuickPaintedItem.PerformanceHint']) -> None: ... + def setPerformanceHint(self, hint: 'QQuickPaintedItem.PerformanceHint', enabled: bool = ...) -> None: ... + def performanceHints(self) -> 'QQuickPaintedItem.PerformanceHints': ... + def setMipmap(self, enable: bool) -> None: ... + def mipmap(self) -> bool: ... + def setAntialiasing(self, enable: bool) -> None: ... + def antialiasing(self) -> bool: ... + def setOpaquePainting(self, opaque: bool) -> None: ... + def opaquePainting(self) -> bool: ... + def update(self, rect: QtCore.QRect = ...) -> None: ... + + +class QQuickRenderControl(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + sceneChanged: typing.ClassVar[QtCore.pyqtSignal] + renderRequested: typing.ClassVar[QtCore.pyqtSignal] + def prepareThread(self, targetThread: typing.Optional[QtCore.QThread]) -> None: ... + def renderWindow(self, offset: typing.Optional[QtCore.QPoint]) -> typing.Optional[QtGui.QWindow]: ... + @staticmethod + def renderWindowFor(win: typing.Optional['QQuickWindow'], offset: typing.Optional[QtCore.QPoint] = ...) -> typing.Optional[QtGui.QWindow]: ... + def grab(self) -> QtGui.QImage: ... + def sync(self) -> bool: ... + def render(self) -> None: ... + def polishItems(self) -> None: ... + def invalidate(self) -> None: ... + def initialize(self, gl: typing.Optional[QtGui.QOpenGLContext]) -> None: ... + + +class QQuickTextDocument(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QQuickItem]) -> None: ... + + def textDocument(self) -> typing.Optional[QtGui.QTextDocument]: ... + + +class QQuickWindow(QtGui.QWindow): + + class NativeObjectType(int): + NativeObjectTexture = ... # type: QQuickWindow.NativeObjectType + + class TextRenderType(int): + QtTextRendering = ... # type: QQuickWindow.TextRenderType + NativeTextRendering = ... # type: QQuickWindow.TextRenderType + + class RenderStage(int): + BeforeSynchronizingStage = ... # type: QQuickWindow.RenderStage + AfterSynchronizingStage = ... # type: QQuickWindow.RenderStage + BeforeRenderingStage = ... # type: QQuickWindow.RenderStage + AfterRenderingStage = ... # type: QQuickWindow.RenderStage + AfterSwapStage = ... # type: QQuickWindow.RenderStage + NoStage = ... # type: QQuickWindow.RenderStage + + class SceneGraphError(int): + ContextNotAvailable = ... # type: QQuickWindow.SceneGraphError + + class CreateTextureOption(int): + TextureHasAlphaChannel = ... # type: QQuickWindow.CreateTextureOption + TextureHasMipmaps = ... # type: QQuickWindow.CreateTextureOption + TextureOwnsGLTexture = ... # type: QQuickWindow.CreateTextureOption + TextureCanUseAtlas = ... # type: QQuickWindow.CreateTextureOption + TextureIsOpaque = ... # type: QQuickWindow.CreateTextureOption + + class CreateTextureOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption']) -> 'QQuickWindow.CreateTextureOptions': ... + def __xor__(self, f: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption']) -> 'QQuickWindow.CreateTextureOptions': ... + def __ior__(self, f: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption']) -> 'QQuickWindow.CreateTextureOptions': ... + def __or__(self, f: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption']) -> 'QQuickWindow.CreateTextureOptions': ... + def __iand__(self, f: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption']) -> 'QQuickWindow.CreateTextureOptions': ... + def __and__(self, f: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption']) -> 'QQuickWindow.CreateTextureOptions': ... + def __invert__(self) -> 'QQuickWindow.CreateTextureOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... + + afterRenderPassRecording: typing.ClassVar[QtCore.pyqtSignal] + beforeRenderPassRecording: typing.ClassVar[QtCore.pyqtSignal] + def endExternalCommands(self) -> None: ... + def beginExternalCommands(self) -> None: ... + @staticmethod + def setTextRenderType(renderType: 'QQuickWindow.TextRenderType') -> None: ... + @staticmethod + def textRenderType() -> 'QQuickWindow.TextRenderType': ... + @staticmethod + def sceneGraphBackend() -> str: ... + def createImageNode(self) -> typing.Optional['QSGImageNode']: ... + def createRectangleNode(self) -> typing.Optional['QSGRectangleNode']: ... + @typing.overload + @staticmethod + def setSceneGraphBackend(api: 'QSGRendererInterface.GraphicsApi') -> None: ... + @typing.overload + @staticmethod + def setSceneGraphBackend(backend: typing.Optional[str]) -> None: ... + def rendererInterface(self) -> typing.Optional['QSGRendererInterface']: ... + def isSceneGraphInitialized(self) -> bool: ... + def effectiveDevicePixelRatio(self) -> float: ... + def scheduleRenderJob(self, job: typing.Optional[QtCore.QRunnable], schedule: 'QQuickWindow.RenderStage') -> None: ... + sceneGraphError: typing.ClassVar[QtCore.pyqtSignal] + sceneGraphAboutToStop: typing.ClassVar[QtCore.pyqtSignal] + afterAnimating: typing.ClassVar[QtCore.pyqtSignal] + afterSynchronizing: typing.ClassVar[QtCore.pyqtSignal] + openglContextCreated: typing.ClassVar[QtCore.pyqtSignal] + def resetOpenGLState(self) -> None: ... + activeFocusItemChanged: typing.ClassVar[QtCore.pyqtSignal] + closing: typing.ClassVar[QtCore.pyqtSignal] + @staticmethod + def setDefaultAlphaBuffer(useAlpha: bool) -> None: ... + @staticmethod + def hasDefaultAlphaBuffer() -> bool: ... + def tabletEvent(self, a0: typing.Optional[QtGui.QTabletEvent]) -> None: ... + def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def exposeEvent(self, a0: typing.Optional[QtGui.QExposeEvent]) -> None: ... + def releaseResources(self) -> None: ... + def update(self) -> None: ... + colorChanged: typing.ClassVar[QtCore.pyqtSignal] + afterRendering: typing.ClassVar[QtCore.pyqtSignal] + beforeRendering: typing.ClassVar[QtCore.pyqtSignal] + beforeSynchronizing: typing.ClassVar[QtCore.pyqtSignal] + sceneGraphInvalidated: typing.ClassVar[QtCore.pyqtSignal] + sceneGraphInitialized: typing.ClassVar[QtCore.pyqtSignal] + frameSwapped: typing.ClassVar[QtCore.pyqtSignal] + def openglContext(self) -> typing.Optional[QtGui.QOpenGLContext]: ... + def isPersistentSceneGraph(self) -> bool: ... + def setPersistentSceneGraph(self, persistent: bool) -> None: ... + def isPersistentOpenGLContext(self) -> bool: ... + def setPersistentOpenGLContext(self, persistent: bool) -> None: ... + def color(self) -> QtGui.QColor: ... + def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def clearBeforeRendering(self) -> bool: ... + def setClearBeforeRendering(self, enabled: bool) -> None: ... + def createTextureFromNativeObject(self, type: 'QQuickWindow.NativeObjectType', nativeObjectPtr: typing.Optional[PyQt5.sip.voidptr], nativeLayout: int, size: QtCore.QSize, options: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption'] = ...) -> typing.Optional['QSGTexture']: ... + def createTextureFromId(self, id: int, size: QtCore.QSize, options: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption'] = ...) -> typing.Optional['QSGTexture']: ... + @typing.overload + def createTextureFromImage(self, image: QtGui.QImage) -> typing.Optional['QSGTexture']: ... + @typing.overload + def createTextureFromImage(self, image: QtGui.QImage, options: typing.Union['QQuickWindow.CreateTextureOptions', 'QQuickWindow.CreateTextureOption']) -> typing.Optional['QSGTexture']: ... + def incubationController(self) -> typing.Optional[QtQml.QQmlIncubationController]: ... + def renderTargetSize(self) -> QtCore.QSize: ... + def renderTargetId(self) -> int: ... + def renderTarget(self) -> typing.Optional[QtGui.QOpenGLFramebufferObject]: ... + @typing.overload + def setRenderTarget(self, fbo: typing.Optional[QtGui.QOpenGLFramebufferObject]) -> None: ... + @typing.overload + def setRenderTarget(self, fboId: int, size: QtCore.QSize) -> None: ... + def grabWindow(self) -> QtGui.QImage: ... + def sendEvent(self, a0: typing.Optional[QQuickItem], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def mouseGrabberItem(self) -> typing.Optional[QQuickItem]: ... + def focusObject(self) -> typing.Optional[QtCore.QObject]: ... + def activeFocusItem(self) -> typing.Optional[QQuickItem]: ... + def contentItem(self) -> typing.Optional[QQuickItem]: ... + + +class QQuickView(QQuickWindow): + + class Status(int): + Null = ... # type: QQuickView.Status + Ready = ... # type: QQuickView.Status + Loading = ... # type: QQuickView.Status + Error = ... # type: QQuickView.Status + + class ResizeMode(int): + SizeViewToRootObject = ... # type: QQuickView.ResizeMode + SizeRootObjectToView = ... # type: QQuickView.ResizeMode + + @typing.overload + def __init__(self, parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... + @typing.overload + def __init__(self, engine: typing.Optional[QtQml.QQmlEngine], parent: typing.Optional[QtGui.QWindow]) -> None: ... + @typing.overload + def __init__(self, source: QtCore.QUrl, parent: typing.Optional[QtGui.QWindow] = ...) -> None: ... + + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + statusChanged: typing.ClassVar[QtCore.pyqtSignal] + def setInitialProperties(self, initialProperties: typing.Dict[str, typing.Any]) -> None: ... + def setSource(self, a0: QtCore.QUrl) -> None: ... + def initialSize(self) -> QtCore.QSize: ... + def errors(self) -> typing.List[QtQml.QQmlError]: ... + def status(self) -> 'QQuickView.Status': ... + def setResizeMode(self, a0: 'QQuickView.ResizeMode') -> None: ... + def resizeMode(self) -> 'QQuickView.ResizeMode': ... + def rootObject(self) -> typing.Optional[QQuickItem]: ... + def rootContext(self) -> typing.Optional[QtQml.QQmlContext]: ... + def engine(self) -> typing.Optional[QtQml.QQmlEngine]: ... + def source(self) -> QtCore.QUrl: ... + + +class QQuickCloseEvent(PyQt5.sipsimplewrapper): ... + + +class QSGAbstractRenderer(QtCore.QObject): + + class MatrixTransformFlag(int): + MatrixTransformFlipY = ... # type: QSGAbstractRenderer.MatrixTransformFlag + + class ClearModeBit(int): + ClearColorBuffer = ... # type: QSGAbstractRenderer.ClearModeBit + ClearDepthBuffer = ... # type: QSGAbstractRenderer.ClearModeBit + ClearStencilBuffer = ... # type: QSGAbstractRenderer.ClearModeBit + + class ClearMode(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGAbstractRenderer.ClearMode', 'QSGAbstractRenderer.ClearModeBit']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGAbstractRenderer.ClearMode', 'QSGAbstractRenderer.ClearModeBit']) -> 'QSGAbstractRenderer.ClearMode': ... + def __xor__(self, f: typing.Union['QSGAbstractRenderer.ClearMode', 'QSGAbstractRenderer.ClearModeBit']) -> 'QSGAbstractRenderer.ClearMode': ... + def __ior__(self, f: typing.Union['QSGAbstractRenderer.ClearMode', 'QSGAbstractRenderer.ClearModeBit']) -> 'QSGAbstractRenderer.ClearMode': ... + def __or__(self, f: typing.Union['QSGAbstractRenderer.ClearMode', 'QSGAbstractRenderer.ClearModeBit']) -> 'QSGAbstractRenderer.ClearMode': ... + def __iand__(self, f: typing.Union['QSGAbstractRenderer.ClearMode', 'QSGAbstractRenderer.ClearModeBit']) -> 'QSGAbstractRenderer.ClearMode': ... + def __and__(self, f: typing.Union['QSGAbstractRenderer.ClearMode', 'QSGAbstractRenderer.ClearModeBit']) -> 'QSGAbstractRenderer.ClearMode': ... + def __invert__(self) -> 'QSGAbstractRenderer.ClearMode': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class MatrixTransformFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGAbstractRenderer.MatrixTransformFlags', 'QSGAbstractRenderer.MatrixTransformFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGAbstractRenderer.MatrixTransformFlags', 'QSGAbstractRenderer.MatrixTransformFlag']) -> 'QSGAbstractRenderer.MatrixTransformFlags': ... + def __xor__(self, f: typing.Union['QSGAbstractRenderer.MatrixTransformFlags', 'QSGAbstractRenderer.MatrixTransformFlag']) -> 'QSGAbstractRenderer.MatrixTransformFlags': ... + def __ior__(self, f: typing.Union['QSGAbstractRenderer.MatrixTransformFlags', 'QSGAbstractRenderer.MatrixTransformFlag']) -> 'QSGAbstractRenderer.MatrixTransformFlags': ... + def __or__(self, f: typing.Union['QSGAbstractRenderer.MatrixTransformFlags', 'QSGAbstractRenderer.MatrixTransformFlag']) -> 'QSGAbstractRenderer.MatrixTransformFlags': ... + def __iand__(self, f: typing.Union['QSGAbstractRenderer.MatrixTransformFlags', 'QSGAbstractRenderer.MatrixTransformFlag']) -> 'QSGAbstractRenderer.MatrixTransformFlags': ... + def __and__(self, f: typing.Union['QSGAbstractRenderer.MatrixTransformFlags', 'QSGAbstractRenderer.MatrixTransformFlag']) -> 'QSGAbstractRenderer.MatrixTransformFlags': ... + def __invert__(self) -> 'QSGAbstractRenderer.MatrixTransformFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + sceneGraphChanged: typing.ClassVar[QtCore.pyqtSignal] + def renderScene(self, fboId: int = ...) -> None: ... + def clearMode(self) -> 'QSGAbstractRenderer.ClearMode': ... + def setClearMode(self, mode: typing.Union['QSGAbstractRenderer.ClearMode', 'QSGAbstractRenderer.ClearModeBit']) -> None: ... + def clearColor(self) -> QtGui.QColor: ... + def setClearColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def projectionMatrix(self) -> QtGui.QMatrix4x4: ... + def setProjectionMatrix(self, matrix: QtGui.QMatrix4x4) -> None: ... + @typing.overload + def setProjectionMatrixToRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setProjectionMatrixToRect(self, rect: QtCore.QRectF, flags: typing.Union['QSGAbstractRenderer.MatrixTransformFlags', 'QSGAbstractRenderer.MatrixTransformFlag']) -> None: ... + def viewportRect(self) -> QtCore.QRect: ... + @typing.overload + def setViewportRect(self, rect: QtCore.QRect) -> None: ... + @typing.overload + def setViewportRect(self, size: QtCore.QSize) -> None: ... + def deviceRect(self) -> QtCore.QRect: ... + @typing.overload + def setDeviceRect(self, rect: QtCore.QRect) -> None: ... + @typing.overload + def setDeviceRect(self, size: QtCore.QSize) -> None: ... + + +class QSGEngine(QtCore.QObject): + + class CreateTextureOption(int): + TextureHasAlphaChannel = ... # type: QSGEngine.CreateTextureOption + TextureOwnsGLTexture = ... # type: QSGEngine.CreateTextureOption + TextureCanUseAtlas = ... # type: QSGEngine.CreateTextureOption + TextureIsOpaque = ... # type: QSGEngine.CreateTextureOption + + class CreateTextureOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption']) -> 'QSGEngine.CreateTextureOptions': ... + def __xor__(self, f: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption']) -> 'QSGEngine.CreateTextureOptions': ... + def __ior__(self, f: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption']) -> 'QSGEngine.CreateTextureOptions': ... + def __or__(self, f: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption']) -> 'QSGEngine.CreateTextureOptions': ... + def __iand__(self, f: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption']) -> 'QSGEngine.CreateTextureOptions': ... + def __and__(self, f: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption']) -> 'QSGEngine.CreateTextureOptions': ... + def __invert__(self) -> 'QSGEngine.CreateTextureOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def createImageNode(self) -> typing.Optional['QSGImageNode']: ... + def createRectangleNode(self) -> typing.Optional['QSGRectangleNode']: ... + def rendererInterface(self) -> typing.Optional['QSGRendererInterface']: ... + def createTextureFromId(self, id: int, size: QtCore.QSize, options: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption'] = ...) -> typing.Optional['QSGTexture']: ... + def createTextureFromImage(self, image: QtGui.QImage, options: typing.Union['QSGEngine.CreateTextureOptions', 'QSGEngine.CreateTextureOption'] = ...) -> typing.Optional['QSGTexture']: ... + def createRenderer(self) -> typing.Optional[QSGAbstractRenderer]: ... + def invalidate(self) -> None: ... + def initialize(self, context: typing.Optional[QtGui.QOpenGLContext]) -> None: ... + + +class QSGMaterial(PyQt5.sip.wrapper): + + class Flag(int): + Blending = ... # type: QSGMaterial.Flag + RequiresDeterminant = ... # type: QSGMaterial.Flag + RequiresFullMatrixExceptTranslate = ... # type: QSGMaterial.Flag + RequiresFullMatrix = ... # type: QSGMaterial.Flag + CustomCompileStep = ... # type: QSGMaterial.Flag + SupportsRhiShader = ... # type: QSGMaterial.Flag + RhiShaderWanted = ... # type: QSGMaterial.Flag + + class Flags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGMaterial.Flags', 'QSGMaterial.Flag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGMaterial.Flags', 'QSGMaterial.Flag']) -> 'QSGMaterial.Flags': ... + def __xor__(self, f: typing.Union['QSGMaterial.Flags', 'QSGMaterial.Flag']) -> 'QSGMaterial.Flags': ... + def __ior__(self, f: typing.Union['QSGMaterial.Flags', 'QSGMaterial.Flag']) -> 'QSGMaterial.Flags': ... + def __or__(self, f: typing.Union['QSGMaterial.Flags', 'QSGMaterial.Flag']) -> 'QSGMaterial.Flags': ... + def __iand__(self, f: typing.Union['QSGMaterial.Flags', 'QSGMaterial.Flag']) -> 'QSGMaterial.Flags': ... + def __and__(self, f: typing.Union['QSGMaterial.Flags', 'QSGMaterial.Flag']) -> 'QSGMaterial.Flags': ... + def __invert__(self) -> 'QSGMaterial.Flags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self) -> None: ... + + def setFlag(self, flags: typing.Union['QSGMaterial.Flags', 'QSGMaterial.Flag'], enabled: bool = ...) -> None: ... + def flags(self) -> 'QSGMaterial.Flags': ... + def compare(self, other: typing.Optional['QSGMaterial']) -> int: ... + def createShader(self) -> typing.Optional['QSGMaterialShader']: ... + def type(self) -> typing.Optional['QSGMaterialType']: ... + + +class QSGFlatColorMaterial(QSGMaterial): + + def __init__(self) -> None: ... + + def compare(self, other: typing.Optional[QSGMaterial]) -> int: ... + def color(self) -> QtGui.QColor: ... + def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def createShader(self) -> typing.Optional['QSGMaterialShader']: ... + def type(self) -> typing.Optional['QSGMaterialType']: ... + + +class QSGGeometry(PyQt5.sip.wrapper): + + class Type(int): + ByteType = ... # type: QSGGeometry.Type + UnsignedByteType = ... # type: QSGGeometry.Type + ShortType = ... # type: QSGGeometry.Type + UnsignedShortType = ... # type: QSGGeometry.Type + IntType = ... # type: QSGGeometry.Type + UnsignedIntType = ... # type: QSGGeometry.Type + FloatType = ... # type: QSGGeometry.Type + Bytes2Type = ... # type: QSGGeometry.Type + Bytes3Type = ... # type: QSGGeometry.Type + Bytes4Type = ... # type: QSGGeometry.Type + DoubleType = ... # type: QSGGeometry.Type + + class DrawingMode(int): + DrawPoints = ... # type: QSGGeometry.DrawingMode + DrawLines = ... # type: QSGGeometry.DrawingMode + DrawLineLoop = ... # type: QSGGeometry.DrawingMode + DrawLineStrip = ... # type: QSGGeometry.DrawingMode + DrawTriangles = ... # type: QSGGeometry.DrawingMode + DrawTriangleStrip = ... # type: QSGGeometry.DrawingMode + DrawTriangleFan = ... # type: QSGGeometry.DrawingMode + + class AttributeType(int): + UnknownAttribute = ... # type: QSGGeometry.AttributeType + PositionAttribute = ... # type: QSGGeometry.AttributeType + ColorAttribute = ... # type: QSGGeometry.AttributeType + TexCoordAttribute = ... # type: QSGGeometry.AttributeType + TexCoord1Attribute = ... # type: QSGGeometry.AttributeType + TexCoord2Attribute = ... # type: QSGGeometry.AttributeType + + class DataPattern(int): + AlwaysUploadPattern = ... # type: QSGGeometry.DataPattern + StreamPattern = ... # type: QSGGeometry.DataPattern + DynamicPattern = ... # type: QSGGeometry.DataPattern + StaticPattern = ... # type: QSGGeometry.DataPattern + + GL_POINTS = ... # type: int + GL_LINES = ... # type: int + GL_LINE_LOOP = ... # type: int + GL_LINE_STRIP = ... # type: int + GL_TRIANGLES = ... # type: int + GL_TRIANGLE_STRIP = ... # type: int + GL_TRIANGLE_FAN = ... # type: int + + GL_BYTE = ... # type: int + GL_DOUBLE = ... # type: int + GL_FLOAT = ... # type: int + GL_INT = ... # type: int + + class Attribute(PyQt5.sipsimplewrapper): + + attributeType = ... # type: 'QSGGeometry.AttributeType' + isVertexCoordinate = ... # type: int + position = ... # type: int + tupleSize = ... # type: int + type = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGGeometry.Attribute') -> None: ... + + @staticmethod + def createWithAttributeType(pos: int, tupleSize: int, primitiveType: int, attributeType: 'QSGGeometry.AttributeType') -> 'QSGGeometry.Attribute': ... + @staticmethod + def create(pos: int, tupleSize: int, primitiveType: int, isPosition: bool = ...) -> 'QSGGeometry.Attribute': ... + + class AttributeSet(PyQt5.sipsimplewrapper): + + attributes = ... # type: PyQt5.sip.array + count = ... # type: int + stride = ... # type: int + + def __init__(self, attributes: typing.Iterable['QSGGeometry.Attribute'], stride: int = ...) -> None: ... + + class Point2D(PyQt5.sipsimplewrapper): + + x = ... # type: float + y = ... # type: float + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGGeometry.Point2D') -> None: ... + + def set(self, nx: float, ny: float) -> None: ... + + class TexturedPoint2D(PyQt5.sipsimplewrapper): + + tx = ... # type: float + ty = ... # type: float + x = ... # type: float + y = ... # type: float + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGGeometry.TexturedPoint2D') -> None: ... + + def set(self, nx: float, ny: float, ntx: float, nty: float) -> None: ... + + class ColoredPoint2D(PyQt5.sipsimplewrapper): + + a = ... # type: int + b = ... # type: int + g = ... # type: int + r = ... # type: int + x = ... # type: float + y = ... # type: float + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGGeometry.ColoredPoint2D') -> None: ... + + def set(self, nx: float, ny: float, nr: int, ng: int, nb: int, na: int) -> None: ... + + def __init__(self, attribs: 'QSGGeometry.AttributeSet', vertexCount: int, indexCount: int = ..., indexType: int = ...) -> None: ... + + @staticmethod + def updateColoredRectGeometry(g: typing.Optional['QSGGeometry'], rect: QtCore.QRectF) -> None: ... + def sizeOfIndex(self) -> int: ... + def vertexDataAsColoredPoint2D(self) -> PyQt5.sip.array: ... + def vertexDataAsTexturedPoint2D(self) -> PyQt5.sip.array: ... + def vertexDataAsPoint2D(self) -> PyQt5.sip.array: ... + def indexDataAsUShort(self) -> PyQt5.sip.array: ... + def indexDataAsUInt(self) -> PyQt5.sip.array: ... + def setLineWidth(self, w: float) -> None: ... + def lineWidth(self) -> float: ... + def markVertexDataDirty(self) -> None: ... + def markIndexDataDirty(self) -> None: ... + def vertexDataPattern(self) -> 'QSGGeometry.DataPattern': ... + def setVertexDataPattern(self, p: 'QSGGeometry.DataPattern') -> None: ... + def indexDataPattern(self) -> 'QSGGeometry.DataPattern': ... + def setIndexDataPattern(self, p: 'QSGGeometry.DataPattern') -> None: ... + @staticmethod + def updateTexturedRectGeometry(g: typing.Optional['QSGGeometry'], rect: QtCore.QRectF, sourceRect: QtCore.QRectF) -> None: ... + @staticmethod + def updateRectGeometry(g: typing.Optional['QSGGeometry'], rect: QtCore.QRectF) -> None: ... + def sizeOfVertex(self) -> int: ... + def attributes(self) -> PyQt5.sip.array: ... + def attributeCount(self) -> int: ... + def indexData(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def indexCount(self) -> int: ... + def indexType(self) -> int: ... + def vertexData(self) -> typing.Optional[PyQt5.sip.voidptr]: ... + def vertexCount(self) -> int: ... + def allocate(self, vertexCount: int, indexCount: int = ...) -> None: ... + def drawingMode(self) -> int: ... + def setDrawingMode(self, mode: int) -> None: ... + @staticmethod + def defaultAttributes_ColoredPoint2D() -> 'QSGGeometry.AttributeSet': ... + @staticmethod + def defaultAttributes_TexturedPoint2D() -> 'QSGGeometry.AttributeSet': ... + @staticmethod + def defaultAttributes_Point2D() -> 'QSGGeometry.AttributeSet': ... + + +class QSGNode(PyQt5.sip.wrapper): + + class DirtyStateBit(int): + DirtyMatrix = ... # type: QSGNode.DirtyStateBit + DirtyNodeAdded = ... # type: QSGNode.DirtyStateBit + DirtyNodeRemoved = ... # type: QSGNode.DirtyStateBit + DirtyGeometry = ... # type: QSGNode.DirtyStateBit + DirtyMaterial = ... # type: QSGNode.DirtyStateBit + DirtyOpacity = ... # type: QSGNode.DirtyStateBit + + class Flag(int): + OwnedByParent = ... # type: QSGNode.Flag + UsePreprocess = ... # type: QSGNode.Flag + OwnsGeometry = ... # type: QSGNode.Flag + OwnsMaterial = ... # type: QSGNode.Flag + OwnsOpaqueMaterial = ... # type: QSGNode.Flag + + class NodeType(int): + BasicNodeType = ... # type: QSGNode.NodeType + GeometryNodeType = ... # type: QSGNode.NodeType + TransformNodeType = ... # type: QSGNode.NodeType + ClipNodeType = ... # type: QSGNode.NodeType + OpacityNodeType = ... # type: QSGNode.NodeType + + class Flags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGNode.Flags', 'QSGNode.Flag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGNode.Flags', 'QSGNode.Flag']) -> 'QSGNode.Flags': ... + def __xor__(self, f: typing.Union['QSGNode.Flags', 'QSGNode.Flag']) -> 'QSGNode.Flags': ... + def __ior__(self, f: typing.Union['QSGNode.Flags', 'QSGNode.Flag']) -> 'QSGNode.Flags': ... + def __or__(self, f: typing.Union['QSGNode.Flags', 'QSGNode.Flag']) -> 'QSGNode.Flags': ... + def __iand__(self, f: typing.Union['QSGNode.Flags', 'QSGNode.Flag']) -> 'QSGNode.Flags': ... + def __and__(self, f: typing.Union['QSGNode.Flags', 'QSGNode.Flag']) -> 'QSGNode.Flags': ... + def __invert__(self) -> 'QSGNode.Flags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class DirtyState(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGNode.DirtyState', 'QSGNode.DirtyStateBit']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGNode.DirtyState', 'QSGNode.DirtyStateBit']) -> 'QSGNode.DirtyState': ... + def __xor__(self, f: typing.Union['QSGNode.DirtyState', 'QSGNode.DirtyStateBit']) -> 'QSGNode.DirtyState': ... + def __ior__(self, f: typing.Union['QSGNode.DirtyState', 'QSGNode.DirtyStateBit']) -> 'QSGNode.DirtyState': ... + def __or__(self, f: typing.Union['QSGNode.DirtyState', 'QSGNode.DirtyStateBit']) -> 'QSGNode.DirtyState': ... + def __iand__(self, f: typing.Union['QSGNode.DirtyState', 'QSGNode.DirtyStateBit']) -> 'QSGNode.DirtyState': ... + def __and__(self, f: typing.Union['QSGNode.DirtyState', 'QSGNode.DirtyStateBit']) -> 'QSGNode.DirtyState': ... + def __invert__(self) -> 'QSGNode.DirtyState': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self) -> None: ... + + def preprocess(self) -> None: ... + def setFlags(self, a0: typing.Union['QSGNode.Flags', 'QSGNode.Flag'], enabled: bool = ...) -> None: ... + def setFlag(self, a0: 'QSGNode.Flag', enabled: bool = ...) -> None: ... + def flags(self) -> 'QSGNode.Flags': ... + def isSubtreeBlocked(self) -> bool: ... + def markDirty(self, bits: typing.Union['QSGNode.DirtyState', 'QSGNode.DirtyStateBit']) -> None: ... + def type(self) -> 'QSGNode.NodeType': ... + def previousSibling(self) -> typing.Optional['QSGNode']: ... + def nextSibling(self) -> typing.Optional['QSGNode']: ... + def lastChild(self) -> typing.Optional['QSGNode']: ... + def firstChild(self) -> typing.Optional['QSGNode']: ... + def childAtIndex(self, i: int) -> typing.Optional['QSGNode']: ... + def __len__(self) -> int: ... + def childCount(self) -> int: ... + def insertChildNodeAfter(self, node: typing.Optional['QSGNode'], after: typing.Optional['QSGNode']) -> None: ... + def insertChildNodeBefore(self, node: typing.Optional['QSGNode'], before: typing.Optional['QSGNode']) -> None: ... + def appendChildNode(self, node: typing.Optional['QSGNode']) -> None: ... + def prependChildNode(self, node: typing.Optional['QSGNode']) -> None: ... + def removeAllChildNodes(self) -> None: ... + def removeChildNode(self, node: typing.Optional['QSGNode']) -> None: ... + def parent(self) -> typing.Optional['QSGNode']: ... + + +class QSGBasicGeometryNode(QSGNode): + + def geometry(self) -> typing.Optional[QSGGeometry]: ... + def setGeometry(self, geometry: typing.Optional[QSGGeometry]) -> None: ... + + +class QSGGeometryNode(QSGBasicGeometryNode): + + def __init__(self) -> None: ... + + def opaqueMaterial(self) -> typing.Optional[QSGMaterial]: ... + def setOpaqueMaterial(self, material: typing.Optional[QSGMaterial]) -> None: ... + def material(self) -> typing.Optional[QSGMaterial]: ... + def setMaterial(self, material: typing.Optional[QSGMaterial]) -> None: ... + + +class QSGImageNode(QSGGeometryNode): + + class TextureCoordinatesTransformFlag(int): + NoTransform = ... # type: QSGImageNode.TextureCoordinatesTransformFlag + MirrorHorizontally = ... # type: QSGImageNode.TextureCoordinatesTransformFlag + MirrorVertically = ... # type: QSGImageNode.TextureCoordinatesTransformFlag + + class TextureCoordinatesTransformMode(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> 'QSGImageNode.TextureCoordinatesTransformMode': ... + def __xor__(self, f: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> 'QSGImageNode.TextureCoordinatesTransformMode': ... + def __ior__(self, f: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> 'QSGImageNode.TextureCoordinatesTransformMode': ... + def __or__(self, f: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> 'QSGImageNode.TextureCoordinatesTransformMode': ... + def __iand__(self, f: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> 'QSGImageNode.TextureCoordinatesTransformMode': ... + def __and__(self, f: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> 'QSGImageNode.TextureCoordinatesTransformMode': ... + def __invert__(self) -> 'QSGImageNode.TextureCoordinatesTransformMode': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @staticmethod + def rebuildGeometry(g: typing.Optional[QSGGeometry], texture: typing.Optional['QSGTexture'], rect: QtCore.QRectF, sourceRect: QtCore.QRectF, texCoordMode: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> None: ... + def ownsTexture(self) -> bool: ... + def setOwnsTexture(self, owns: bool) -> None: ... + def textureCoordinatesTransform(self) -> 'QSGImageNode.TextureCoordinatesTransformMode': ... + def setTextureCoordinatesTransform(self, mode: typing.Union['QSGImageNode.TextureCoordinatesTransformMode', 'QSGImageNode.TextureCoordinatesTransformFlag']) -> None: ... + def mipmapFiltering(self) -> 'QSGTexture.Filtering': ... + def setMipmapFiltering(self, filtering: 'QSGTexture.Filtering') -> None: ... + def filtering(self) -> 'QSGTexture.Filtering': ... + def setFiltering(self, filtering: 'QSGTexture.Filtering') -> None: ... + def texture(self) -> typing.Optional['QSGTexture']: ... + def setTexture(self, texture: typing.Optional['QSGTexture']) -> None: ... + def sourceRect(self) -> QtCore.QRectF: ... + @typing.overload + def setSourceRect(self, r: QtCore.QRectF) -> None: ... + @typing.overload + def setSourceRect(self, x: float, y: float, w: float, h: float) -> None: ... + def rect(self) -> QtCore.QRectF: ... + @typing.overload + def setRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setRect(self, x: float, y: float, w: float, h: float) -> None: ... + + +class QSGMaterialShader(PyQt5.sip.wrapper): + + class RenderState(PyQt5.sipsimplewrapper): + + class DirtyState(int): + DirtyMatrix = ... # type: QSGMaterialShader.RenderState.DirtyState + DirtyOpacity = ... # type: QSGMaterialShader.RenderState.DirtyState + DirtyCachedMaterialData = ... # type: QSGMaterialShader.RenderState.DirtyState + DirtyAll = ... # type: QSGMaterialShader.RenderState.DirtyState + + class DirtyStates(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGMaterialShader.RenderState.DirtyStates', 'QSGMaterialShader.RenderState.DirtyState']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGMaterialShader.RenderState.DirtyStates', 'QSGMaterialShader.RenderState.DirtyState']) -> 'QSGMaterialShader.RenderState.DirtyStates': ... + def __xor__(self, f: typing.Union['QSGMaterialShader.RenderState.DirtyStates', 'QSGMaterialShader.RenderState.DirtyState']) -> 'QSGMaterialShader.RenderState.DirtyStates': ... + def __ior__(self, f: typing.Union['QSGMaterialShader.RenderState.DirtyStates', 'QSGMaterialShader.RenderState.DirtyState']) -> 'QSGMaterialShader.RenderState.DirtyStates': ... + def __or__(self, f: typing.Union['QSGMaterialShader.RenderState.DirtyStates', 'QSGMaterialShader.RenderState.DirtyState']) -> 'QSGMaterialShader.RenderState.DirtyStates': ... + def __iand__(self, f: typing.Union['QSGMaterialShader.RenderState.DirtyStates', 'QSGMaterialShader.RenderState.DirtyState']) -> 'QSGMaterialShader.RenderState.DirtyStates': ... + def __and__(self, f: typing.Union['QSGMaterialShader.RenderState.DirtyStates', 'QSGMaterialShader.RenderState.DirtyState']) -> 'QSGMaterialShader.RenderState.DirtyStates': ... + def __invert__(self) -> 'QSGMaterialShader.RenderState.DirtyStates': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGMaterialShader.RenderState') -> None: ... + + def isCachedMaterialDataDirty(self) -> bool: ... + def devicePixelRatio(self) -> float: ... + def projectionMatrix(self) -> QtGui.QMatrix4x4: ... + def context(self) -> typing.Optional[QtGui.QOpenGLContext]: ... + def determinant(self) -> float: ... + def deviceRect(self) -> QtCore.QRect: ... + def viewportRect(self) -> QtCore.QRect: ... + def modelViewMatrix(self) -> QtGui.QMatrix4x4: ... + def combinedMatrix(self) -> QtGui.QMatrix4x4: ... + def opacity(self) -> float: ... + def isOpacityDirty(self) -> bool: ... + def isMatrixDirty(self) -> bool: ... + def dirtyStates(self) -> 'QSGMaterialShader.RenderState.DirtyStates': ... + + def __init__(self) -> None: ... + + def setShaderSourceFiles(self, type: typing.Union[QtGui.QOpenGLShader.ShaderType, QtGui.QOpenGLShader.ShaderTypeBit], sourceFiles: typing.Iterable[typing.Optional[str]]) -> None: ... + def setShaderSourceFile(self, type: typing.Union[QtGui.QOpenGLShader.ShaderType, QtGui.QOpenGLShader.ShaderTypeBit], sourceFile: typing.Optional[str]) -> None: ... + def fragmentShader(self) -> typing.Optional[str]: ... + def vertexShader(self) -> typing.Optional[str]: ... + def initialize(self) -> None: ... + def compile(self) -> None: ... + def program(self) -> typing.Optional[QtGui.QOpenGLShaderProgram]: ... + def attributeNames(self) -> typing.List[str]: ... + def updateState(self, state: 'QSGMaterialShader.RenderState', newMaterial: typing.Optional[QSGMaterial], oldMaterial: typing.Optional[QSGMaterial]) -> None: ... + def deactivate(self) -> None: ... + def activate(self) -> None: ... + + +class QSGMaterialType(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGMaterialType') -> None: ... + + +class QSGMaterialRhiShader(QSGMaterialShader): + + class Flag(int): + UpdatesGraphicsPipelineState = ... # type: QSGMaterialRhiShader.Flag + + class RenderState(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGMaterialRhiShader.RenderState') -> None: ... + + def uniformData(self) -> typing.Optional[QtCore.QByteArray]: ... + def devicePixelRatio(self) -> float: ... + def determinant(self) -> float: ... + def deviceRect(self) -> QtCore.QRect: ... + def viewportRect(self) -> QtCore.QRect: ... + def projectionMatrix(self) -> QtGui.QMatrix4x4: ... + def modelViewMatrix(self) -> QtGui.QMatrix4x4: ... + def combinedMatrix(self) -> QtGui.QMatrix4x4: ... + def opacity(self) -> float: ... + def isOpacityDirty(self) -> bool: ... + def isMatrixDirty(self) -> bool: ... + def dirtyStates(self) -> QSGMaterialShader.RenderState.DirtyStates: ... + + class GraphicsPipelineState(PyQt5.sipsimplewrapper): + + class CullMode(int): + CullNone = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.CullMode + CullFront = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.CullMode + CullBack = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.CullMode + + class ColorMaskComponent(int): + R = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent + G = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent + B = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent + A = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent + + class BlendFactor(int): + Zero = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + One = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + SrcColor = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + OneMinusSrcColor = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + DstColor = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + OneMinusDstColor = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + SrcAlpha = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + OneMinusSrcAlpha = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + DstAlpha = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + OneMinusDstAlpha = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + ConstantColor = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + OneMinusConstantColor = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + ConstantAlpha = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + OneMinusConstantAlpha = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + SrcAlphaSaturate = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + Src1Color = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + OneMinusSrc1Color = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + Src1Alpha = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + OneMinusSrc1Alpha = ... # type: QSGMaterialRhiShader.GraphicsPipelineState.BlendFactor + + class ColorMask(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGMaterialRhiShader.GraphicsPipelineState.ColorMask', 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGMaterialRhiShader.GraphicsPipelineState.ColorMask', 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent']) -> 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMask': ... + def __xor__(self, f: typing.Union['QSGMaterialRhiShader.GraphicsPipelineState.ColorMask', 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent']) -> 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMask': ... + def __ior__(self, f: typing.Union['QSGMaterialRhiShader.GraphicsPipelineState.ColorMask', 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent']) -> 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMask': ... + def __or__(self, f: typing.Union['QSGMaterialRhiShader.GraphicsPipelineState.ColorMask', 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent']) -> 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMask': ... + def __iand__(self, f: typing.Union['QSGMaterialRhiShader.GraphicsPipelineState.ColorMask', 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent']) -> 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMask': ... + def __and__(self, f: typing.Union['QSGMaterialRhiShader.GraphicsPipelineState.ColorMask', 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMaskComponent']) -> 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMask': ... + def __invert__(self) -> 'QSGMaterialRhiShader.GraphicsPipelineState.ColorMask': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGMaterialRhiShader.GraphicsPipelineState') -> None: ... + + class Flags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGMaterialRhiShader.Flags', 'QSGMaterialRhiShader.Flag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGMaterialRhiShader.Flags', 'QSGMaterialRhiShader.Flag']) -> 'QSGMaterialRhiShader.Flags': ... + def __xor__(self, f: typing.Union['QSGMaterialRhiShader.Flags', 'QSGMaterialRhiShader.Flag']) -> 'QSGMaterialRhiShader.Flags': ... + def __ior__(self, f: typing.Union['QSGMaterialRhiShader.Flags', 'QSGMaterialRhiShader.Flag']) -> 'QSGMaterialRhiShader.Flags': ... + def __or__(self, f: typing.Union['QSGMaterialRhiShader.Flags', 'QSGMaterialRhiShader.Flag']) -> 'QSGMaterialRhiShader.Flags': ... + def __iand__(self, f: typing.Union['QSGMaterialRhiShader.Flags', 'QSGMaterialRhiShader.Flag']) -> 'QSGMaterialRhiShader.Flags': ... + def __and__(self, f: typing.Union['QSGMaterialRhiShader.Flags', 'QSGMaterialRhiShader.Flag']) -> 'QSGMaterialRhiShader.Flags': ... + def __invert__(self) -> 'QSGMaterialRhiShader.Flags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self) -> None: ... + + def setFlag(self, flags: typing.Union['QSGMaterialRhiShader.Flags', 'QSGMaterialRhiShader.Flag'], on: bool = ...) -> None: ... + def flags(self) -> 'QSGMaterialRhiShader.Flags': ... + def updateGraphicsPipelineState(self, state: 'QSGMaterialRhiShader.RenderState', ps: typing.Optional['QSGMaterialRhiShader.GraphicsPipelineState'], newMaterial: typing.Optional[QSGMaterial], oldMaterial: typing.Optional[QSGMaterial]) -> bool: ... + def updateSampledImage(self, state: 'QSGMaterialRhiShader.RenderState', binding: int, newMaterial: typing.Optional[QSGMaterial], oldMaterial: typing.Optional[QSGMaterial]) -> typing.Optional['QSGTexture']: ... + def updateUniformData(self, state: 'QSGMaterialRhiShader.RenderState', newMaterial: typing.Optional[QSGMaterial], oldMaterial: typing.Optional[QSGMaterial]) -> bool: ... + + +class QSGClipNode(QSGBasicGeometryNode): + + def __init__(self) -> None: ... + + def clipRect(self) -> QtCore.QRectF: ... + def setClipRect(self, a0: QtCore.QRectF) -> None: ... + def isRectangular(self) -> bool: ... + def setIsRectangular(self, rectHint: bool) -> None: ... + + +class QSGTransformNode(QSGNode): + + def __init__(self) -> None: ... + + def matrix(self) -> QtGui.QMatrix4x4: ... + def setMatrix(self, matrix: QtGui.QMatrix4x4) -> None: ... + + +class QSGOpacityNode(QSGNode): + + def __init__(self) -> None: ... + + def opacity(self) -> float: ... + def setOpacity(self, opacity: float) -> None: ... + + +class QSGRectangleNode(QSGGeometryNode): + + def color(self) -> QtGui.QColor: ... + def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def rect(self) -> QtCore.QRectF: ... + @typing.overload + def setRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setRect(self, x: float, y: float, w: float, h: float) -> None: ... + + +class QSGRendererInterface(PyQt5.sipsimplewrapper): + + class ShaderSourceType(int): + ShaderSourceString = ... # type: QSGRendererInterface.ShaderSourceType + ShaderSourceFile = ... # type: QSGRendererInterface.ShaderSourceType + ShaderByteCode = ... # type: QSGRendererInterface.ShaderSourceType + + class ShaderCompilationType(int): + RuntimeCompilation = ... # type: QSGRendererInterface.ShaderCompilationType + OfflineCompilation = ... # type: QSGRendererInterface.ShaderCompilationType + + class ShaderType(int): + UnknownShadingLanguage = ... # type: QSGRendererInterface.ShaderType + GLSL = ... # type: QSGRendererInterface.ShaderType + HLSL = ... # type: QSGRendererInterface.ShaderType + RhiShader = ... # type: QSGRendererInterface.ShaderType + + class Resource(int): + DeviceResource = ... # type: QSGRendererInterface.Resource + CommandQueueResource = ... # type: QSGRendererInterface.Resource + CommandListResource = ... # type: QSGRendererInterface.Resource + PainterResource = ... # type: QSGRendererInterface.Resource + RhiResource = ... # type: QSGRendererInterface.Resource + PhysicalDeviceResource = ... # type: QSGRendererInterface.Resource + OpenGLContextResource = ... # type: QSGRendererInterface.Resource + DeviceContextResource = ... # type: QSGRendererInterface.Resource + CommandEncoderResource = ... # type: QSGRendererInterface.Resource + VulkanInstanceResource = ... # type: QSGRendererInterface.Resource + RenderPassResource = ... # type: QSGRendererInterface.Resource + + class GraphicsApi(int): + Unknown = ... # type: QSGRendererInterface.GraphicsApi + Software = ... # type: QSGRendererInterface.GraphicsApi + OpenGL = ... # type: QSGRendererInterface.GraphicsApi + Direct3D12 = ... # type: QSGRendererInterface.GraphicsApi + OpenVG = ... # type: QSGRendererInterface.GraphicsApi + OpenGLRhi = ... # type: QSGRendererInterface.GraphicsApi + Direct3D11Rhi = ... # type: QSGRendererInterface.GraphicsApi + VulkanRhi = ... # type: QSGRendererInterface.GraphicsApi + MetalRhi = ... # type: QSGRendererInterface.GraphicsApi + NullRhi = ... # type: QSGRendererInterface.GraphicsApi + + class ShaderCompilationTypes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGRendererInterface.ShaderCompilationTypes', 'QSGRendererInterface.ShaderCompilationType']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGRendererInterface.ShaderCompilationTypes', 'QSGRendererInterface.ShaderCompilationType']) -> 'QSGRendererInterface.ShaderCompilationTypes': ... + def __xor__(self, f: typing.Union['QSGRendererInterface.ShaderCompilationTypes', 'QSGRendererInterface.ShaderCompilationType']) -> 'QSGRendererInterface.ShaderCompilationTypes': ... + def __ior__(self, f: typing.Union['QSGRendererInterface.ShaderCompilationTypes', 'QSGRendererInterface.ShaderCompilationType']) -> 'QSGRendererInterface.ShaderCompilationTypes': ... + def __or__(self, f: typing.Union['QSGRendererInterface.ShaderCompilationTypes', 'QSGRendererInterface.ShaderCompilationType']) -> 'QSGRendererInterface.ShaderCompilationTypes': ... + def __iand__(self, f: typing.Union['QSGRendererInterface.ShaderCompilationTypes', 'QSGRendererInterface.ShaderCompilationType']) -> 'QSGRendererInterface.ShaderCompilationTypes': ... + def __and__(self, f: typing.Union['QSGRendererInterface.ShaderCompilationTypes', 'QSGRendererInterface.ShaderCompilationType']) -> 'QSGRendererInterface.ShaderCompilationTypes': ... + def __invert__(self) -> 'QSGRendererInterface.ShaderCompilationTypes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class ShaderSourceTypes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGRendererInterface.ShaderSourceTypes', 'QSGRendererInterface.ShaderSourceType']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGRendererInterface.ShaderSourceTypes', 'QSGRendererInterface.ShaderSourceType']) -> 'QSGRendererInterface.ShaderSourceTypes': ... + def __xor__(self, f: typing.Union['QSGRendererInterface.ShaderSourceTypes', 'QSGRendererInterface.ShaderSourceType']) -> 'QSGRendererInterface.ShaderSourceTypes': ... + def __ior__(self, f: typing.Union['QSGRendererInterface.ShaderSourceTypes', 'QSGRendererInterface.ShaderSourceType']) -> 'QSGRendererInterface.ShaderSourceTypes': ... + def __or__(self, f: typing.Union['QSGRendererInterface.ShaderSourceTypes', 'QSGRendererInterface.ShaderSourceType']) -> 'QSGRendererInterface.ShaderSourceTypes': ... + def __iand__(self, f: typing.Union['QSGRendererInterface.ShaderSourceTypes', 'QSGRendererInterface.ShaderSourceType']) -> 'QSGRendererInterface.ShaderSourceTypes': ... + def __and__(self, f: typing.Union['QSGRendererInterface.ShaderSourceTypes', 'QSGRendererInterface.ShaderSourceType']) -> 'QSGRendererInterface.ShaderSourceTypes': ... + def __invert__(self) -> 'QSGRendererInterface.ShaderSourceTypes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @staticmethod + def isApiRhiBased(api: 'QSGRendererInterface.GraphicsApi') -> bool: ... + def shaderSourceType(self) -> 'QSGRendererInterface.ShaderSourceTypes': ... + def shaderCompilationType(self) -> 'QSGRendererInterface.ShaderCompilationTypes': ... + def shaderType(self) -> 'QSGRendererInterface.ShaderType': ... + @typing.overload + def getResource(self, window: typing.Optional[QQuickWindow], resource: 'QSGRendererInterface.Resource') -> typing.Optional[PyQt5.sip.voidptr]: ... + @typing.overload + def getResource(self, window: typing.Optional[QQuickWindow], resource: typing.Optional[str]) -> typing.Optional[PyQt5.sip.voidptr]: ... + def graphicsApi(self) -> 'QSGRendererInterface.GraphicsApi': ... + + +class QSGRenderNode(QSGNode): + + class RenderingFlag(int): + BoundedRectRendering = ... # type: QSGRenderNode.RenderingFlag + DepthAwareRendering = ... # type: QSGRenderNode.RenderingFlag + OpaqueRendering = ... # type: QSGRenderNode.RenderingFlag + + class StateFlag(int): + DepthState = ... # type: QSGRenderNode.StateFlag + StencilState = ... # type: QSGRenderNode.StateFlag + ScissorState = ... # type: QSGRenderNode.StateFlag + ColorState = ... # type: QSGRenderNode.StateFlag + BlendState = ... # type: QSGRenderNode.StateFlag + CullState = ... # type: QSGRenderNode.StateFlag + ViewportState = ... # type: QSGRenderNode.StateFlag + RenderTargetState = ... # type: QSGRenderNode.StateFlag + + class StateFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGRenderNode.StateFlags', 'QSGRenderNode.StateFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGRenderNode.StateFlags', 'QSGRenderNode.StateFlag']) -> 'QSGRenderNode.StateFlags': ... + def __xor__(self, f: typing.Union['QSGRenderNode.StateFlags', 'QSGRenderNode.StateFlag']) -> 'QSGRenderNode.StateFlags': ... + def __ior__(self, f: typing.Union['QSGRenderNode.StateFlags', 'QSGRenderNode.StateFlag']) -> 'QSGRenderNode.StateFlags': ... + def __or__(self, f: typing.Union['QSGRenderNode.StateFlags', 'QSGRenderNode.StateFlag']) -> 'QSGRenderNode.StateFlags': ... + def __iand__(self, f: typing.Union['QSGRenderNode.StateFlags', 'QSGRenderNode.StateFlag']) -> 'QSGRenderNode.StateFlags': ... + def __and__(self, f: typing.Union['QSGRenderNode.StateFlags', 'QSGRenderNode.StateFlag']) -> 'QSGRenderNode.StateFlags': ... + def __invert__(self) -> 'QSGRenderNode.StateFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class RenderingFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGRenderNode.RenderingFlags', 'QSGRenderNode.RenderingFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGRenderNode.RenderingFlags', 'QSGRenderNode.RenderingFlag']) -> 'QSGRenderNode.RenderingFlags': ... + def __xor__(self, f: typing.Union['QSGRenderNode.RenderingFlags', 'QSGRenderNode.RenderingFlag']) -> 'QSGRenderNode.RenderingFlags': ... + def __ior__(self, f: typing.Union['QSGRenderNode.RenderingFlags', 'QSGRenderNode.RenderingFlag']) -> 'QSGRenderNode.RenderingFlags': ... + def __or__(self, f: typing.Union['QSGRenderNode.RenderingFlags', 'QSGRenderNode.RenderingFlag']) -> 'QSGRenderNode.RenderingFlags': ... + def __iand__(self, f: typing.Union['QSGRenderNode.RenderingFlags', 'QSGRenderNode.RenderingFlag']) -> 'QSGRenderNode.RenderingFlags': ... + def __and__(self, f: typing.Union['QSGRenderNode.RenderingFlags', 'QSGRenderNode.RenderingFlag']) -> 'QSGRenderNode.RenderingFlags': ... + def __invert__(self) -> 'QSGRenderNode.RenderingFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class RenderState(PyQt5.sipsimplewrapper): + + def get(self, state: typing.Optional[str]) -> typing.Optional[PyQt5.sip.voidptr]: ... + def clipRegion(self) -> typing.Optional[QtGui.QRegion]: ... + def stencilEnabled(self) -> bool: ... + def stencilValue(self) -> int: ... + def scissorEnabled(self) -> bool: ... + def scissorRect(self) -> QtCore.QRect: ... + def projectionMatrix(self) -> typing.Optional[QtGui.QMatrix4x4]: ... + + def __init__(self) -> None: ... + + def inheritedOpacity(self) -> float: ... + def clipList(self) -> typing.Optional[QSGClipNode]: ... + def matrix(self) -> typing.Optional[QtGui.QMatrix4x4]: ... + def rect(self) -> QtCore.QRectF: ... + def flags(self) -> 'QSGRenderNode.RenderingFlags': ... + def releaseResources(self) -> None: ... + def render(self, state: typing.Optional['QSGRenderNode.RenderState']) -> None: ... + def changedStates(self) -> 'QSGRenderNode.StateFlags': ... + + +class QSGSimpleRectNode(QSGGeometryNode): + + @typing.overload + def __init__(self, rect: QtCore.QRectF, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + @typing.overload + def __init__(self) -> None: ... + + def color(self) -> QtGui.QColor: ... + def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def rect(self) -> QtCore.QRectF: ... + @typing.overload + def setRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setRect(self, x: float, y: float, w: float, h: float) -> None: ... + + +class QSGSimpleTextureNode(QSGGeometryNode): + + class TextureCoordinatesTransformFlag(int): + NoTransform = ... # type: QSGSimpleTextureNode.TextureCoordinatesTransformFlag + MirrorHorizontally = ... # type: QSGSimpleTextureNode.TextureCoordinatesTransformFlag + MirrorVertically = ... # type: QSGSimpleTextureNode.TextureCoordinatesTransformFlag + + class TextureCoordinatesTransformMode(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSGSimpleTextureNode.TextureCoordinatesTransformMode', 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSGSimpleTextureNode.TextureCoordinatesTransformMode', 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag']) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformMode': ... + def __xor__(self, f: typing.Union['QSGSimpleTextureNode.TextureCoordinatesTransformMode', 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag']) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformMode': ... + def __ior__(self, f: typing.Union['QSGSimpleTextureNode.TextureCoordinatesTransformMode', 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag']) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformMode': ... + def __or__(self, f: typing.Union['QSGSimpleTextureNode.TextureCoordinatesTransformMode', 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag']) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformMode': ... + def __iand__(self, f: typing.Union['QSGSimpleTextureNode.TextureCoordinatesTransformMode', 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag']) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformMode': ... + def __and__(self, f: typing.Union['QSGSimpleTextureNode.TextureCoordinatesTransformMode', 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag']) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformMode': ... + def __invert__(self) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformMode': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self) -> None: ... + + def sourceRect(self) -> QtCore.QRectF: ... + @typing.overload + def setSourceRect(self, r: QtCore.QRectF) -> None: ... + @typing.overload + def setSourceRect(self, x: float, y: float, w: float, h: float) -> None: ... + def ownsTexture(self) -> bool: ... + def setOwnsTexture(self, owns: bool) -> None: ... + def textureCoordinatesTransform(self) -> 'QSGSimpleTextureNode.TextureCoordinatesTransformMode': ... + def setTextureCoordinatesTransform(self, mode: typing.Union['QSGSimpleTextureNode.TextureCoordinatesTransformMode', 'QSGSimpleTextureNode.TextureCoordinatesTransformFlag']) -> None: ... + def filtering(self) -> 'QSGTexture.Filtering': ... + def setFiltering(self, filtering: 'QSGTexture.Filtering') -> None: ... + def texture(self) -> typing.Optional['QSGTexture']: ... + def setTexture(self, texture: typing.Optional['QSGTexture']) -> None: ... + def rect(self) -> QtCore.QRectF: ... + @typing.overload + def setRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setRect(self, x: float, y: float, w: float, h: float) -> None: ... + + +class QSGTexture(QtCore.QObject): + + class AnisotropyLevel(int): + AnisotropyNone = ... # type: QSGTexture.AnisotropyLevel + Anisotropy2x = ... # type: QSGTexture.AnisotropyLevel + Anisotropy4x = ... # type: QSGTexture.AnisotropyLevel + Anisotropy8x = ... # type: QSGTexture.AnisotropyLevel + Anisotropy16x = ... # type: QSGTexture.AnisotropyLevel + + class Filtering(int): + None_ = ... # type: QSGTexture.Filtering + Nearest = ... # type: QSGTexture.Filtering + Linear = ... # type: QSGTexture.Filtering + + class WrapMode(int): + Repeat = ... # type: QSGTexture.WrapMode + ClampToEdge = ... # type: QSGTexture.WrapMode + MirroredRepeat = ... # type: QSGTexture.WrapMode + + class NativeTexture(PyQt5.sipsimplewrapper): + + layout = ... # type: int + object = ... # type: PyQt5.sip.voidptr + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSGTexture.NativeTexture') -> None: ... + + def __init__(self) -> None: ... + + def nativeTexture(self) -> 'QSGTexture.NativeTexture': ... + def comparisonKey(self) -> int: ... + def anisotropyLevel(self) -> 'QSGTexture.AnisotropyLevel': ... + def setAnisotropyLevel(self, level: 'QSGTexture.AnisotropyLevel') -> None: ... + def convertToNormalizedSourceRect(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + def verticalWrapMode(self) -> 'QSGTexture.WrapMode': ... + def setVerticalWrapMode(self, vwrap: 'QSGTexture.WrapMode') -> None: ... + def horizontalWrapMode(self) -> 'QSGTexture.WrapMode': ... + def setHorizontalWrapMode(self, hwrap: 'QSGTexture.WrapMode') -> None: ... + def filtering(self) -> 'QSGTexture.Filtering': ... + def setFiltering(self, filter: 'QSGTexture.Filtering') -> None: ... + def mipmapFiltering(self) -> 'QSGTexture.Filtering': ... + def setMipmapFiltering(self, filter: 'QSGTexture.Filtering') -> None: ... + def updateBindOptions(self, force: bool = ...) -> None: ... + def bind(self) -> None: ... + def removedFromAtlas(self) -> typing.Optional['QSGTexture']: ... + def isAtlasTexture(self) -> bool: ... + def normalizedTextureSubRect(self) -> QtCore.QRectF: ... + def hasMipmaps(self) -> bool: ... + def hasAlphaChannel(self) -> bool: ... + def textureSize(self) -> QtCore.QSize: ... + def textureId(self) -> int: ... + + +class QSGDynamicTexture(QSGTexture): + + def __init__(self) -> None: ... + + def updateTexture(self) -> bool: ... + + +class QSGOpaqueTextureMaterial(QSGMaterial): + + def __init__(self) -> None: ... + + def anisotropyLevel(self) -> QSGTexture.AnisotropyLevel: ... + def setAnisotropyLevel(self, level: QSGTexture.AnisotropyLevel) -> None: ... + def verticalWrapMode(self) -> QSGTexture.WrapMode: ... + def setVerticalWrapMode(self, mode: QSGTexture.WrapMode) -> None: ... + def horizontalWrapMode(self) -> QSGTexture.WrapMode: ... + def setHorizontalWrapMode(self, mode: QSGTexture.WrapMode) -> None: ... + def filtering(self) -> QSGTexture.Filtering: ... + def setFiltering(self, filtering: QSGTexture.Filtering) -> None: ... + def mipmapFiltering(self) -> QSGTexture.Filtering: ... + def setMipmapFiltering(self, filtering: QSGTexture.Filtering) -> None: ... + def texture(self) -> typing.Optional[QSGTexture]: ... + def setTexture(self, texture: typing.Optional[QSGTexture]) -> None: ... + def compare(self, other: typing.Optional[QSGMaterial]) -> int: ... + def createShader(self) -> typing.Optional[QSGMaterialShader]: ... + def type(self) -> typing.Optional[QSGMaterialType]: ... + + +class QSGTextureMaterial(QSGOpaqueTextureMaterial): + + def __init__(self) -> None: ... + + def createShader(self) -> typing.Optional[QSGMaterialShader]: ... + def type(self) -> typing.Optional[QSGMaterialType]: ... + + +class QSGTextureProvider(QtCore.QObject): + + def __init__(self) -> None: ... + + textureChanged: typing.ClassVar[QtCore.pyqtSignal] + def texture(self) -> typing.Optional[QSGTexture]: ... + + +class QSGVertexColorMaterial(QSGMaterial): + + def __init__(self) -> None: ... + + def createShader(self) -> typing.Optional[QSGMaterialShader]: ... + def type(self) -> typing.Optional[QSGMaterialType]: ... + def compare(self, other: typing.Optional[QSGMaterial]) -> int: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtQuick3D.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtQuick3D.abi3.so new file mode 100644 index 0000000..ea13083 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtQuick3D.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtQuick3D.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtQuick3D.pyi new file mode 100644 index 0000000..5b0c9ac --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtQuick3D.pyi @@ -0,0 +1,129 @@ +# The PEP 484 type hints stub file for the QtQuick3D module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtNetwork +from PyQt5 import QtQml + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QQuick3D(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQuick3D') -> None: ... + + @staticmethod + def idealSurfaceFormat(samples: int = ...) -> QtGui.QSurfaceFormat: ... + + +class QQuick3DObject(QtCore.QObject, QtQml.QQmlParserStatus): + + def __init__(self, parent: typing.Optional['QQuick3DObject'] = ...) -> None: ... + + def componentComplete(self) -> None: ... + def classBegin(self) -> None: ... + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def setParentItem(self, parentItem: typing.Optional['QQuick3DObject']) -> None: ... + def parentItem(self) -> typing.Optional['QQuick3DObject']: ... + def setState(self, state: typing.Optional[str]) -> None: ... + def state(self) -> str: ... + + +class QQuick3DGeometry(QQuick3DObject): + + class PrimitiveType(int): + Unknown = ... # type: QQuick3DGeometry.PrimitiveType + Points = ... # type: QQuick3DGeometry.PrimitiveType + LineStrip = ... # type: QQuick3DGeometry.PrimitiveType + Lines = ... # type: QQuick3DGeometry.PrimitiveType + TriangleStrip = ... # type: QQuick3DGeometry.PrimitiveType + TriangleFan = ... # type: QQuick3DGeometry.PrimitiveType + Triangles = ... # type: QQuick3DGeometry.PrimitiveType + + class Attribute(PyQt5.sipsimplewrapper): + + class ComponentType(int): + DefaultType = ... # type: QQuick3DGeometry.Attribute.ComponentType + U16Type = ... # type: QQuick3DGeometry.Attribute.ComponentType + U32Type = ... # type: QQuick3DGeometry.Attribute.ComponentType + F32Type = ... # type: QQuick3DGeometry.Attribute.ComponentType + + class Semantic(int): + UnknownSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic + IndexSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic + PositionSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic + NormalSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic + TexCoordSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic + TangentSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic + BinormalSemantic = ... # type: QQuick3DGeometry.Attribute.Semantic + + componentType = ... # type: 'QQuick3DGeometry.Attribute.ComponentType' + offset = ... # type: int + semantic = ... # type: 'QQuick3DGeometry.Attribute.Semantic' + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QQuick3DGeometry.Attribute') -> None: ... + + def __init__(self, parent: typing.Optional[QQuick3DObject] = ...) -> None: ... + + nameChanged: typing.ClassVar[QtCore.pyqtSignal] + def setName(self, name: typing.Optional[str]) -> None: ... + def clear(self) -> None: ... + @typing.overload + def addAttribute(self, semantic: 'QQuick3DGeometry.Attribute.Semantic', offset: int, componentType: 'QQuick3DGeometry.Attribute.ComponentType') -> None: ... + @typing.overload + def addAttribute(self, att: 'QQuick3DGeometry.Attribute') -> None: ... + def setPrimitiveType(self, type: 'QQuick3DGeometry.PrimitiveType') -> None: ... + def setBounds(self, min: QtGui.QVector3D, max: QtGui.QVector3D) -> None: ... + def setStride(self, stride: int) -> None: ... + def setIndexData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def setVertexData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def stride(self) -> int: ... + def boundsMax(self) -> QtGui.QVector3D: ... + def boundsMin(self) -> QtGui.QVector3D: ... + def primitiveType(self) -> 'QQuick3DGeometry.PrimitiveType': ... + def attribute(self, index: int) -> 'QQuick3DGeometry.Attribute': ... + def attributeCount(self) -> int: ... + def indexBuffer(self) -> QtCore.QByteArray: ... + def vertexBuffer(self) -> QtCore.QByteArray: ... + def name(self) -> str: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtQuickWidgets.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtQuickWidgets.abi3.so new file mode 100644 index 0000000..1a6e215 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtQuickWidgets.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtQuickWidgets.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtQuickWidgets.pyi new file mode 100644 index 0000000..1a5d4dd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtQuickWidgets.pyi @@ -0,0 +1,104 @@ +# The PEP 484 type hints stub file for the QtQuickWidgets module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtNetwork +from PyQt5 import QtQml +from PyQt5 import QtQuick +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QQuickWidget(QtWidgets.QWidget): + + class Status(int): + Null = ... # type: QQuickWidget.Status + Ready = ... # type: QQuickWidget.Status + Loading = ... # type: QQuickWidget.Status + Error = ... # type: QQuickWidget.Status + + class ResizeMode(int): + SizeViewToRootObject = ... # type: QQuickWidget.ResizeMode + SizeRootObjectToView = ... # type: QQuickWidget.ResizeMode + + @typing.overload + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, engine: typing.Optional[QtQml.QQmlEngine], parent: typing.Optional[QtWidgets.QWidget]) -> None: ... + @typing.overload + def __init__(self, source: QtCore.QUrl, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + def focusNextPrevChild(self, next: bool) -> bool: ... + def quickWindow(self) -> typing.Optional[QtQuick.QQuickWindow]: ... + def setClearColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def grabFramebuffer(self) -> QtGui.QImage: ... + def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragLeaveEvent(self, a0: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragMoveEvent(self, a0: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + sceneGraphError: typing.ClassVar[QtCore.pyqtSignal] + statusChanged: typing.ClassVar[QtCore.pyqtSignal] + def setSource(self, a0: QtCore.QUrl) -> None: ... + def format(self) -> QtGui.QSurfaceFormat: ... + def setFormat(self, format: QtGui.QSurfaceFormat) -> None: ... + def initialSize(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def errors(self) -> typing.List[QtQml.QQmlError]: ... + def status(self) -> 'QQuickWidget.Status': ... + def setResizeMode(self, a0: 'QQuickWidget.ResizeMode') -> None: ... + def resizeMode(self) -> 'QQuickWidget.ResizeMode': ... + def rootObject(self) -> typing.Optional[QtQuick.QQuickItem]: ... + def rootContext(self) -> typing.Optional[QtQml.QQmlContext]: ... + def engine(self) -> typing.Optional[QtQml.QQmlEngine]: ... + def source(self) -> QtCore.QUrl: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtRemoteObjects.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtRemoteObjects.abi3.so new file mode 100644 index 0000000..779ab1b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtRemoteObjects.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtRemoteObjects.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtRemoteObjects.pyi new file mode 100644 index 0000000..9bb70ef --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtRemoteObjects.pyi @@ -0,0 +1,197 @@ +# The PEP 484 type hints stub file for the QtRemoteObjects module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QAbstractItemModelReplica(QtCore.QAbstractItemModel): + + initialized: typing.ClassVar[QtCore.pyqtSignal] + def setRootCacheSize(self, rootCacheSize: int) -> None: ... + def rootCacheSize(self) -> int: ... + def hasData(self, index: QtCore.QModelIndex, role: int) -> bool: ... + def isInitialized(self) -> bool: ... + def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... + def availableRoles(self) -> typing.List[int]: ... + def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlags: ... + def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int) -> typing.Any: ... + def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def hasChildren(self, parent: QtCore.QModelIndex = ...) -> bool: ... + def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... + def parent(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, index: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... + def selectionModel(self) -> typing.Optional[QtCore.QItemSelectionModel]: ... + + +class QRemoteObjectReplica(QtCore.QObject): + + class State(int): + Uninitialized = ... # type: QRemoteObjectReplica.State + Default = ... # type: QRemoteObjectReplica.State + Valid = ... # type: QRemoteObjectReplica.State + Suspect = ... # type: QRemoteObjectReplica.State + SignatureMismatch = ... # type: QRemoteObjectReplica.State + + notified: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + initialized: typing.ClassVar[QtCore.pyqtSignal] + def setNode(self, node: typing.Optional['QRemoteObjectNode']) -> None: ... + def node(self) -> typing.Optional['QRemoteObjectNode']: ... + def state(self) -> 'QRemoteObjectReplica.State': ... + def isInitialized(self) -> bool: ... + def waitForSource(self, timeout: int = ...) -> bool: ... + def isReplicaValid(self) -> bool: ... + + +class QRemoteObjectDynamicReplica(QRemoteObjectReplica): ... + + +class QRemoteObjectAbstractPersistedStore(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def restoreProperties(self, repName: typing.Optional[str], repSig: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.List[typing.Any]: ... + def saveProperties(self, repName: typing.Optional[str], repSig: typing.Union[QtCore.QByteArray, bytes, bytearray], values: typing.Iterable[typing.Any]) -> None: ... + + +class QRemoteObjectNode(QtCore.QObject): + + class ErrorCode(int): + NoError = ... # type: QRemoteObjectNode.ErrorCode + RegistryNotAcquired = ... # type: QRemoteObjectNode.ErrorCode + RegistryAlreadyHosted = ... # type: QRemoteObjectNode.ErrorCode + NodeIsNoServer = ... # type: QRemoteObjectNode.ErrorCode + ServerAlreadyCreated = ... # type: QRemoteObjectNode.ErrorCode + UnintendedRegistryHosting = ... # type: QRemoteObjectNode.ErrorCode + OperationNotValidOnClientNode = ... # type: QRemoteObjectNode.ErrorCode + SourceNotRegistered = ... # type: QRemoteObjectNode.ErrorCode + MissingObjectName = ... # type: QRemoteObjectNode.ErrorCode + HostUrlInvalid = ... # type: QRemoteObjectNode.ErrorCode + ProtocolMismatch = ... # type: QRemoteObjectNode.ErrorCode + ListenFailed = ... # type: QRemoteObjectNode.ErrorCode + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, registryAddress: QtCore.QUrl, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... + heartbeatIntervalChanged: typing.ClassVar[QtCore.pyqtSignal] + error: typing.ClassVar[QtCore.pyqtSignal] + remoteObjectRemoved: typing.ClassVar[QtCore.pyqtSignal] + remoteObjectAdded: typing.ClassVar[QtCore.pyqtSignal] + def setHeartbeatInterval(self, interval: int) -> None: ... + def heartbeatInterval(self) -> int: ... + def lastError(self) -> 'QRemoteObjectNode.ErrorCode': ... + def setPersistedStore(self, persistedStore: typing.Optional[QRemoteObjectAbstractPersistedStore]) -> None: ... + def persistedStore(self) -> typing.Optional[QRemoteObjectAbstractPersistedStore]: ... + def registry(self) -> typing.Optional['QRemoteObjectRegistry']: ... + def waitForRegistry(self, timeout: int = ...) -> bool: ... + def setRegistryUrl(self, registryAddress: QtCore.QUrl) -> bool: ... + def registryUrl(self) -> QtCore.QUrl: ... + def acquireModel(self, name: typing.Optional[str], action: 'QtRemoteObjects.InitialAction' = ..., rolesHint: typing.Iterable[int] = ...) -> typing.Optional[QAbstractItemModelReplica]: ... + def acquireDynamic(self, name: typing.Optional[str]) -> typing.Optional[QRemoteObjectDynamicReplica]: ... + def instances(self, typeName: typing.Optional[str]) -> typing.List[str]: ... + def setName(self, name: typing.Optional[str]) -> None: ... + def addClientSideConnection(self, ioDevice: typing.Optional[QtCore.QIODevice]) -> None: ... + def connectToNode(self, address: QtCore.QUrl) -> bool: ... + + +class QRemoteObjectHostBase(QRemoteObjectNode): + + class AllowedSchemas(int): + BuiltInSchemasOnly = ... # type: QRemoteObjectHostBase.AllowedSchemas + AllowExternalRegistration = ... # type: QRemoteObjectHostBase.AllowedSchemas + + def reverseProxy(self) -> bool: ... + def proxy(self, registryUrl: QtCore.QUrl, hostUrl: QtCore.QUrl = ...) -> bool: ... + def addHostSideConnection(self, ioDevice: typing.Optional[QtCore.QIODevice]) -> None: ... + def disableRemoting(self, remoteObject: typing.Optional[QtCore.QObject]) -> bool: ... + @typing.overload + def enableRemoting(self, object: typing.Optional[QtCore.QObject], name: typing.Optional[str] = ...) -> bool: ... + @typing.overload + def enableRemoting(self, model: typing.Optional[QtCore.QAbstractItemModel], name: typing.Optional[str], roles: typing.Iterable[int], selectionModel: typing.Optional[QtCore.QItemSelectionModel] = ...) -> bool: ... + def setName(self, name: typing.Optional[str]) -> None: ... + + +class QRemoteObjectHost(QRemoteObjectHostBase): + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, address: QtCore.QUrl, registryAddress: QtCore.QUrl = ..., allowedSchemas: QRemoteObjectHostBase.AllowedSchemas = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, address: QtCore.QUrl, parent: typing.Optional[QtCore.QObject]) -> None: ... + + hostUrlChanged: typing.ClassVar[QtCore.pyqtSignal] + def setHostUrl(self, hostAddress: QtCore.QUrl, allowedSchemas: QRemoteObjectHostBase.AllowedSchemas = ...) -> bool: ... + def hostUrl(self) -> QtCore.QUrl: ... + + +class QRemoteObjectRegistryHost(QRemoteObjectHostBase): + + def __init__(self, registryAddress: QtCore.QUrl = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setRegistryUrl(self, registryUrl: QtCore.QUrl) -> bool: ... + + +class QRemoteObjectRegistry(QRemoteObjectReplica): + + remoteObjectRemoved: typing.ClassVar[QtCore.pyqtSignal] + remoteObjectAdded: typing.ClassVar[QtCore.pyqtSignal] + def sourceLocations(self) -> typing.Dict[str, 'QRemoteObjectSourceLocationInfo']: ... + + +class QRemoteObjectSourceLocationInfo(PyQt5.sipsimplewrapper): + + hostUrl = ... # type: QtCore.QUrl + typeName = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, typeName_: typing.Optional[str], hostUrl_: QtCore.QUrl) -> None: ... + @typing.overload + def __init__(self, a0: 'QRemoteObjectSourceLocationInfo') -> None: ... + + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QtRemoteObjects(PyQt5.sip.simplewrapper): + + class InitialAction(int): + FetchRootSize = ... # type: QtRemoteObjects.InitialAction + PrefetchData = ... # type: QtRemoteObjects.InitialAction diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtSensors.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtSensors.abi3.so new file mode 100644 index 0000000..2d92989 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtSensors.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtSensors.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtSensors.pyi new file mode 100644 index 0000000..dc1b720 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtSensors.pyi @@ -0,0 +1,664 @@ +# The PEP 484 type hints stub file for the QtSensors module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QSensorReading(QtCore.QObject): + + def value(self, index: int) -> typing.Any: ... + def valueCount(self) -> int: ... + def setTimestamp(self, timestamp: int) -> None: ... + def timestamp(self) -> int: ... + + +class QAccelerometerReading(QSensorReading): + + def setZ(self, z: float) -> None: ... + def z(self) -> float: ... + def setY(self, y: float) -> None: ... + def y(self) -> float: ... + def setX(self, x: float) -> None: ... + def x(self) -> float: ... + + +class QSensorFilter(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSensorFilter') -> None: ... + + def filter(self, reading: typing.Optional[QSensorReading]) -> bool: ... + + +class QAccelerometerFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QAccelerometerFilter') -> None: ... + + def filter(self, reading: typing.Optional[QAccelerometerReading]) -> bool: ... + + +class QSensor(QtCore.QObject): + + class AxesOrientationMode(int): + FixedOrientation = ... # type: QSensor.AxesOrientationMode + AutomaticOrientation = ... # type: QSensor.AxesOrientationMode + UserOrientation = ... # type: QSensor.AxesOrientationMode + + class Feature(int): + Buffering = ... # type: QSensor.Feature + AlwaysOn = ... # type: QSensor.Feature + GeoValues = ... # type: QSensor.Feature + FieldOfView = ... # type: QSensor.Feature + AccelerationMode = ... # type: QSensor.Feature + SkipDuplicates = ... # type: QSensor.Feature + AxesOrientation = ... # type: QSensor.Feature + PressureSensorTemperature = ... # type: QSensor.Feature + + def __init__(self, type: typing.Union[QtCore.QByteArray, bytes, bytearray], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + bufferSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + efficientBufferSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + maxBufferSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + userOrientationChanged: typing.ClassVar[QtCore.pyqtSignal] + currentOrientationChanged: typing.ClassVar[QtCore.pyqtSignal] + axesOrientationModeChanged: typing.ClassVar[QtCore.pyqtSignal] + skipDuplicatesChanged: typing.ClassVar[QtCore.pyqtSignal] + dataRateChanged: typing.ClassVar[QtCore.pyqtSignal] + alwaysOnChanged: typing.ClassVar[QtCore.pyqtSignal] + availableSensorsChanged: typing.ClassVar[QtCore.pyqtSignal] + sensorError: typing.ClassVar[QtCore.pyqtSignal] + readingChanged: typing.ClassVar[QtCore.pyqtSignal] + activeChanged: typing.ClassVar[QtCore.pyqtSignal] + busyChanged: typing.ClassVar[QtCore.pyqtSignal] + def stop(self) -> None: ... + def start(self) -> bool: ... + def setBufferSize(self, bufferSize: int) -> None: ... + def bufferSize(self) -> int: ... + def setEfficientBufferSize(self, efficientBufferSize: int) -> None: ... + def efficientBufferSize(self) -> int: ... + def setMaxBufferSize(self, maxBufferSize: int) -> None: ... + def maxBufferSize(self) -> int: ... + def setUserOrientation(self, userOrientation: int) -> None: ... + def userOrientation(self) -> int: ... + def setCurrentOrientation(self, currentOrientation: int) -> None: ... + def currentOrientation(self) -> int: ... + def setAxesOrientationMode(self, axesOrientationMode: 'QSensor.AxesOrientationMode') -> None: ... + def axesOrientationMode(self) -> 'QSensor.AxesOrientationMode': ... + def isFeatureSupported(self, feature: 'QSensor.Feature') -> bool: ... + @staticmethod + def defaultSensorForType(type: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> QtCore.QByteArray: ... + @staticmethod + def sensorsForType(type: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.List[QtCore.QByteArray]: ... + @staticmethod + def sensorTypes() -> typing.List[QtCore.QByteArray]: ... + def reading(self) -> typing.Optional[QSensorReading]: ... + def filters(self) -> typing.List[QSensorFilter]: ... + def removeFilter(self, filter: typing.Optional[QSensorFilter]) -> None: ... + def addFilter(self, filter: typing.Optional[QSensorFilter]) -> None: ... + def error(self) -> int: ... + def description(self) -> str: ... + def setOutputRange(self, index: int) -> None: ... + def outputRange(self) -> int: ... + def outputRanges(self) -> typing.List['qoutputrange']: ... + def setDataRate(self, rate: int) -> None: ... + def dataRate(self) -> int: ... + def availableDataRates(self) -> typing.List[typing.Tuple[int, int]]: ... + def setSkipDuplicates(self, skipDuplicates: bool) -> None: ... + def skipDuplicates(self) -> bool: ... + def setAlwaysOn(self, alwaysOn: bool) -> None: ... + def isAlwaysOn(self) -> bool: ... + def isActive(self) -> bool: ... + def setActive(self, active: bool) -> None: ... + def isBusy(self) -> bool: ... + def isConnectedToBackend(self) -> bool: ... + def connectToBackend(self) -> bool: ... + def type(self) -> QtCore.QByteArray: ... + def setIdentifier(self, identifier: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def identifier(self) -> QtCore.QByteArray: ... + + +class QAccelerometer(QSensor): + + class AccelerationMode(int): + Combined = ... # type: QAccelerometer.AccelerationMode + Gravity = ... # type: QAccelerometer.AccelerationMode + User = ... # type: QAccelerometer.AccelerationMode + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + accelerationModeChanged: typing.ClassVar[QtCore.pyqtSignal] + def reading(self) -> typing.Optional[QAccelerometerReading]: ... + def setAccelerationMode(self, accelerationMode: 'QAccelerometer.AccelerationMode') -> None: ... + def accelerationMode(self) -> 'QAccelerometer.AccelerationMode': ... + + +class QAltimeterReading(QSensorReading): + + def setAltitude(self, altitude: float) -> None: ... + def altitude(self) -> float: ... + + +class QAltimeterFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QAltimeterFilter') -> None: ... + + def filter(self, reading: typing.Optional[QAltimeterReading]) -> bool: ... + + +class QAltimeter(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QAltimeterReading]: ... + + +class QAmbientLightReading(QSensorReading): + + class LightLevel(int): + Undefined = ... # type: QAmbientLightReading.LightLevel + Dark = ... # type: QAmbientLightReading.LightLevel + Twilight = ... # type: QAmbientLightReading.LightLevel + Light = ... # type: QAmbientLightReading.LightLevel + Bright = ... # type: QAmbientLightReading.LightLevel + Sunny = ... # type: QAmbientLightReading.LightLevel + + def setLightLevel(self, lightLevel: 'QAmbientLightReading.LightLevel') -> None: ... + def lightLevel(self) -> 'QAmbientLightReading.LightLevel': ... + + +class QAmbientLightFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QAmbientLightFilter') -> None: ... + + def filter(self, reading: typing.Optional[QAmbientLightReading]) -> bool: ... + + +class QAmbientLightSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QAmbientLightReading]: ... + + +class QAmbientTemperatureReading(QSensorReading): + + def setTemperature(self, temperature: float) -> None: ... + def temperature(self) -> float: ... + + +class QAmbientTemperatureFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QAmbientTemperatureFilter') -> None: ... + + def filter(self, reading: typing.Optional[QAmbientTemperatureReading]) -> bool: ... + + +class QAmbientTemperatureSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QAmbientTemperatureReading]: ... + + +class QCompassReading(QSensorReading): + + def setCalibrationLevel(self, calibrationLevel: float) -> None: ... + def calibrationLevel(self) -> float: ... + def setAzimuth(self, azimuth: float) -> None: ... + def azimuth(self) -> float: ... + + +class QCompassFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QCompassFilter') -> None: ... + + def filter(self, reading: typing.Optional[QCompassReading]) -> bool: ... + + +class QCompass(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QCompassReading]: ... + + +class QDistanceReading(QSensorReading): + + def setDistance(self, distance: float) -> None: ... + def distance(self) -> float: ... + + +class QDistanceFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDistanceFilter') -> None: ... + + def filter(self, reading: typing.Optional[QDistanceReading]) -> bool: ... + + +class QDistanceSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QDistanceReading]: ... + + +class QGyroscopeReading(QSensorReading): + + def setZ(self, z: float) -> None: ... + def z(self) -> float: ... + def setY(self, y: float) -> None: ... + def y(self) -> float: ... + def setX(self, x: float) -> None: ... + def x(self) -> float: ... + + +class QGyroscopeFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QGyroscopeFilter') -> None: ... + + def filter(self, reading: typing.Optional[QGyroscopeReading]) -> bool: ... + + +class QGyroscope(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QGyroscopeReading]: ... + + +class QHolsterReading(QSensorReading): + + def setHolstered(self, holstered: bool) -> None: ... + def holstered(self) -> bool: ... + + +class QHolsterFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QHolsterFilter') -> None: ... + + def filter(self, reading: typing.Optional[QHolsterReading]) -> bool: ... + + +class QHolsterSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QHolsterReading]: ... + + +class QHumidityReading(QSensorReading): + + def setAbsoluteHumidity(self, value: float) -> None: ... + def absoluteHumidity(self) -> float: ... + def setRelativeHumidity(self, percent: float) -> None: ... + def relativeHumidity(self) -> float: ... + + +class QHumidityFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QHumidityFilter') -> None: ... + + def filter(self, reading: typing.Optional[QHumidityReading]) -> bool: ... + + +class QHumiditySensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QHumidityReading]: ... + + +class QIRProximityReading(QSensorReading): + + def setReflectance(self, reflectance: float) -> None: ... + def reflectance(self) -> float: ... + + +class QIRProximityFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QIRProximityFilter') -> None: ... + + def filter(self, reading: typing.Optional[QIRProximityReading]) -> bool: ... + + +class QIRProximitySensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QIRProximityReading]: ... + + +class QLidReading(QSensorReading): + + frontLidChanged: typing.ClassVar[QtCore.pyqtSignal] + backLidChanged: typing.ClassVar[QtCore.pyqtSignal] + def setFrontLidClosed(self, closed: bool) -> None: ... + def frontLidClosed(self) -> bool: ... + def setBackLidClosed(self, closed: bool) -> None: ... + def backLidClosed(self) -> bool: ... + + +class QLidFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QLidFilter') -> None: ... + + def filter(self, reading: typing.Optional[QLidReading]) -> bool: ... + + +class QLidSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QLidReading]: ... + + +class QLightReading(QSensorReading): + + def setLux(self, lux: float) -> None: ... + def lux(self) -> float: ... + + +class QLightFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QLightFilter') -> None: ... + + def filter(self, reading: typing.Optional[QLightReading]) -> bool: ... + + +class QLightSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + fieldOfViewChanged: typing.ClassVar[QtCore.pyqtSignal] + def setFieldOfView(self, fieldOfView: float) -> None: ... + def fieldOfView(self) -> float: ... + def reading(self) -> typing.Optional[QLightReading]: ... + + +class QMagnetometerReading(QSensorReading): + + def setCalibrationLevel(self, calibrationLevel: float) -> None: ... + def calibrationLevel(self) -> float: ... + def setZ(self, z: float) -> None: ... + def z(self) -> float: ... + def setY(self, y: float) -> None: ... + def y(self) -> float: ... + def setX(self, x: float) -> None: ... + def x(self) -> float: ... + + +class QMagnetometerFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QMagnetometerFilter') -> None: ... + + def filter(self, reading: typing.Optional[QMagnetometerReading]) -> bool: ... + + +class QMagnetometer(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + returnGeoValuesChanged: typing.ClassVar[QtCore.pyqtSignal] + def setReturnGeoValues(self, returnGeoValues: bool) -> None: ... + def returnGeoValues(self) -> bool: ... + def reading(self) -> typing.Optional[QMagnetometerReading]: ... + + +class QOrientationReading(QSensorReading): + + class Orientation(int): + Undefined = ... # type: QOrientationReading.Orientation + TopUp = ... # type: QOrientationReading.Orientation + TopDown = ... # type: QOrientationReading.Orientation + LeftUp = ... # type: QOrientationReading.Orientation + RightUp = ... # type: QOrientationReading.Orientation + FaceUp = ... # type: QOrientationReading.Orientation + FaceDown = ... # type: QOrientationReading.Orientation + + def setOrientation(self, orientation: 'QOrientationReading.Orientation') -> None: ... + def orientation(self) -> 'QOrientationReading.Orientation': ... + + +class QOrientationFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QOrientationFilter') -> None: ... + + def filter(self, reading: typing.Optional[QOrientationReading]) -> bool: ... + + +class QOrientationSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QOrientationReading]: ... + + +class QPressureReading(QSensorReading): + + def setTemperature(self, temperature: float) -> None: ... + def temperature(self) -> float: ... + def setPressure(self, pressure: float) -> None: ... + def pressure(self) -> float: ... + + +class QPressureFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QPressureFilter') -> None: ... + + def filter(self, reading: typing.Optional[QPressureReading]) -> bool: ... + + +class QPressureSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QPressureReading]: ... + + +class QProximityReading(QSensorReading): + + def setClose(self, close: bool) -> None: ... + def close(self) -> bool: ... + + +class QProximityFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QProximityFilter') -> None: ... + + def filter(self, reading: typing.Optional[QProximityReading]) -> bool: ... + + +class QProximitySensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def reading(self) -> typing.Optional[QProximityReading]: ... + + +class qoutputrange(PyQt5.sipsimplewrapper): + + accuracy = ... # type: float + maximum = ... # type: float + minimum = ... # type: float + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'qoutputrange') -> None: ... + + +class QTapReading(QSensorReading): + + class TapDirection(int): + Undefined = ... # type: QTapReading.TapDirection + X = ... # type: QTapReading.TapDirection + Y = ... # type: QTapReading.TapDirection + Z = ... # type: QTapReading.TapDirection + X_Pos = ... # type: QTapReading.TapDirection + Y_Pos = ... # type: QTapReading.TapDirection + Z_Pos = ... # type: QTapReading.TapDirection + X_Neg = ... # type: QTapReading.TapDirection + Y_Neg = ... # type: QTapReading.TapDirection + Z_Neg = ... # type: QTapReading.TapDirection + X_Both = ... # type: QTapReading.TapDirection + Y_Both = ... # type: QTapReading.TapDirection + Z_Both = ... # type: QTapReading.TapDirection + + def setDoubleTap(self, doubleTap: bool) -> None: ... + def isDoubleTap(self) -> bool: ... + def setTapDirection(self, tapDirection: 'QTapReading.TapDirection') -> None: ... + def tapDirection(self) -> 'QTapReading.TapDirection': ... + + +class QTapFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTapFilter') -> None: ... + + def filter(self, reading: typing.Optional[QTapReading]) -> bool: ... + + +class QTapSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + returnDoubleTapEventsChanged: typing.ClassVar[QtCore.pyqtSignal] + def setReturnDoubleTapEvents(self, returnDoubleTapEvents: bool) -> None: ... + def returnDoubleTapEvents(self) -> bool: ... + def reading(self) -> typing.Optional[QTapReading]: ... + + +class QTiltReading(QSensorReading): + + def setXRotation(self, x: float) -> None: ... + def xRotation(self) -> float: ... + def setYRotation(self, y: float) -> None: ... + def yRotation(self) -> float: ... + + +class QTiltFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTiltFilter') -> None: ... + + def filter(self, reading: typing.Optional[QTiltReading]) -> bool: ... + + +class QTiltSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def calibrate(self) -> None: ... + def reading(self) -> typing.Optional[QTiltReading]: ... + + +class QRotationReading(QSensorReading): + + def setFromEuler(self, x: float, y: float, z: float) -> None: ... + def z(self) -> float: ... + def y(self) -> float: ... + def x(self) -> float: ... + + +class QRotationFilter(QSensorFilter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QRotationFilter') -> None: ... + + def filter(self, reading: typing.Optional[QRotationReading]) -> bool: ... + + +class QRotationSensor(QSensor): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + hasZChanged: typing.ClassVar[QtCore.pyqtSignal] + def setHasZ(self, hasZ: bool) -> None: ... + def hasZ(self) -> bool: ... + def reading(self) -> typing.Optional[QRotationReading]: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtSerialPort.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtSerialPort.abi3.so new file mode 100644 index 0000000..3626411 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtSerialPort.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtSerialPort.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtSerialPort.pyi new file mode 100644 index 0000000..0ee2c28 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtSerialPort.pyi @@ -0,0 +1,251 @@ +# The PEP 484 type hints stub file for the QtSerialPort module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QSerialPort(QtCore.QIODevice): + + class SerialPortError(int): + NoError = ... # type: QSerialPort.SerialPortError + DeviceNotFoundError = ... # type: QSerialPort.SerialPortError + PermissionError = ... # type: QSerialPort.SerialPortError + OpenError = ... # type: QSerialPort.SerialPortError + ParityError = ... # type: QSerialPort.SerialPortError + FramingError = ... # type: QSerialPort.SerialPortError + BreakConditionError = ... # type: QSerialPort.SerialPortError + WriteError = ... # type: QSerialPort.SerialPortError + ReadError = ... # type: QSerialPort.SerialPortError + ResourceError = ... # type: QSerialPort.SerialPortError + UnsupportedOperationError = ... # type: QSerialPort.SerialPortError + TimeoutError = ... # type: QSerialPort.SerialPortError + NotOpenError = ... # type: QSerialPort.SerialPortError + UnknownError = ... # type: QSerialPort.SerialPortError + + class DataErrorPolicy(int): + SkipPolicy = ... # type: QSerialPort.DataErrorPolicy + PassZeroPolicy = ... # type: QSerialPort.DataErrorPolicy + IgnorePolicy = ... # type: QSerialPort.DataErrorPolicy + StopReceivingPolicy = ... # type: QSerialPort.DataErrorPolicy + UnknownPolicy = ... # type: QSerialPort.DataErrorPolicy + + class PinoutSignal(int): + NoSignal = ... # type: QSerialPort.PinoutSignal + TransmittedDataSignal = ... # type: QSerialPort.PinoutSignal + ReceivedDataSignal = ... # type: QSerialPort.PinoutSignal + DataTerminalReadySignal = ... # type: QSerialPort.PinoutSignal + DataCarrierDetectSignal = ... # type: QSerialPort.PinoutSignal + DataSetReadySignal = ... # type: QSerialPort.PinoutSignal + RingIndicatorSignal = ... # type: QSerialPort.PinoutSignal + RequestToSendSignal = ... # type: QSerialPort.PinoutSignal + ClearToSendSignal = ... # type: QSerialPort.PinoutSignal + SecondaryTransmittedDataSignal = ... # type: QSerialPort.PinoutSignal + SecondaryReceivedDataSignal = ... # type: QSerialPort.PinoutSignal + + class FlowControl(int): + NoFlowControl = ... # type: QSerialPort.FlowControl + HardwareControl = ... # type: QSerialPort.FlowControl + SoftwareControl = ... # type: QSerialPort.FlowControl + UnknownFlowControl = ... # type: QSerialPort.FlowControl + + class StopBits(int): + OneStop = ... # type: QSerialPort.StopBits + OneAndHalfStop = ... # type: QSerialPort.StopBits + TwoStop = ... # type: QSerialPort.StopBits + UnknownStopBits = ... # type: QSerialPort.StopBits + + class Parity(int): + NoParity = ... # type: QSerialPort.Parity + EvenParity = ... # type: QSerialPort.Parity + OddParity = ... # type: QSerialPort.Parity + SpaceParity = ... # type: QSerialPort.Parity + MarkParity = ... # type: QSerialPort.Parity + UnknownParity = ... # type: QSerialPort.Parity + + class DataBits(int): + Data5 = ... # type: QSerialPort.DataBits + Data6 = ... # type: QSerialPort.DataBits + Data7 = ... # type: QSerialPort.DataBits + Data8 = ... # type: QSerialPort.DataBits + UnknownDataBits = ... # type: QSerialPort.DataBits + + class BaudRate(int): + Baud1200 = ... # type: QSerialPort.BaudRate + Baud2400 = ... # type: QSerialPort.BaudRate + Baud4800 = ... # type: QSerialPort.BaudRate + Baud9600 = ... # type: QSerialPort.BaudRate + Baud19200 = ... # type: QSerialPort.BaudRate + Baud38400 = ... # type: QSerialPort.BaudRate + Baud57600 = ... # type: QSerialPort.BaudRate + Baud115200 = ... # type: QSerialPort.BaudRate + UnknownBaud = ... # type: QSerialPort.BaudRate + + class Direction(int): + Input = ... # type: QSerialPort.Direction + Output = ... # type: QSerialPort.Direction + AllDirections = ... # type: QSerialPort.Direction + + class Directions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction']) -> 'QSerialPort.Directions': ... + def __xor__(self, f: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction']) -> 'QSerialPort.Directions': ... + def __ior__(self, f: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction']) -> 'QSerialPort.Directions': ... + def __or__(self, f: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction']) -> 'QSerialPort.Directions': ... + def __iand__(self, f: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction']) -> 'QSerialPort.Directions': ... + def __and__(self, f: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction']) -> 'QSerialPort.Directions': ... + def __invert__(self) -> 'QSerialPort.Directions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class PinoutSignals(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSerialPort.PinoutSignals', 'QSerialPort.PinoutSignal']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSerialPort.PinoutSignals', 'QSerialPort.PinoutSignal']) -> 'QSerialPort.PinoutSignals': ... + def __xor__(self, f: typing.Union['QSerialPort.PinoutSignals', 'QSerialPort.PinoutSignal']) -> 'QSerialPort.PinoutSignals': ... + def __ior__(self, f: typing.Union['QSerialPort.PinoutSignals', 'QSerialPort.PinoutSignal']) -> 'QSerialPort.PinoutSignals': ... + def __or__(self, f: typing.Union['QSerialPort.PinoutSignals', 'QSerialPort.PinoutSignal']) -> 'QSerialPort.PinoutSignals': ... + def __iand__(self, f: typing.Union['QSerialPort.PinoutSignals', 'QSerialPort.PinoutSignal']) -> 'QSerialPort.PinoutSignals': ... + def __and__(self, f: typing.Union['QSerialPort.PinoutSignals', 'QSerialPort.PinoutSignal']) -> 'QSerialPort.PinoutSignals': ... + def __invert__(self) -> 'QSerialPort.PinoutSignals': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, info: 'QSerialPortInfo', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + errorOccurred: typing.ClassVar[QtCore.pyqtSignal] + breakEnabledChanged: typing.ClassVar[QtCore.pyqtSignal] + def isBreakEnabled(self) -> bool: ... + def handle(self) -> int: ... + def writeData(self, data: typing.Optional[PyQt5.sip.array[bytes]]) -> int: ... + def readLineData(self, maxlen: int) -> bytes: ... + def readData(self, maxlen: int) -> bytes: ... + settingsRestoredOnCloseChanged: typing.ClassVar[QtCore.pyqtSignal] + requestToSendChanged: typing.ClassVar[QtCore.pyqtSignal] + dataTerminalReadyChanged: typing.ClassVar[QtCore.pyqtSignal] + dataErrorPolicyChanged: typing.ClassVar[QtCore.pyqtSignal] + flowControlChanged: typing.ClassVar[QtCore.pyqtSignal] + stopBitsChanged: typing.ClassVar[QtCore.pyqtSignal] + parityChanged: typing.ClassVar[QtCore.pyqtSignal] + dataBitsChanged: typing.ClassVar[QtCore.pyqtSignal] + baudRateChanged: typing.ClassVar[QtCore.pyqtSignal] + def setBreakEnabled(self, enabled: bool = ...) -> bool: ... + def sendBreak(self, duration: int = ...) -> bool: ... + def waitForBytesWritten(self, msecs: int = ...) -> bool: ... + def waitForReadyRead(self, msecs: int = ...) -> bool: ... + def canReadLine(self) -> bool: ... + def bytesToWrite(self) -> int: ... + def bytesAvailable(self) -> int: ... + def isSequential(self) -> bool: ... + def setReadBufferSize(self, size: int) -> None: ... + def readBufferSize(self) -> int: ... + def clearError(self) -> None: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def dataErrorPolicy(self) -> 'QSerialPort.DataErrorPolicy': ... + def setDataErrorPolicy(self, policy: 'QSerialPort.DataErrorPolicy' = ...) -> bool: ... + def atEnd(self) -> bool: ... + def clear(self, dir: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction'] = ...) -> bool: ... + def flush(self) -> bool: ... + def pinoutSignals(self) -> 'QSerialPort.PinoutSignals': ... + def isRequestToSend(self) -> bool: ... + def setRequestToSend(self, set: bool) -> bool: ... + def isDataTerminalReady(self) -> bool: ... + def setDataTerminalReady(self, set: bool) -> bool: ... + def flowControl(self) -> 'QSerialPort.FlowControl': ... + def setFlowControl(self, flow: 'QSerialPort.FlowControl') -> bool: ... + def stopBits(self) -> 'QSerialPort.StopBits': ... + def setStopBits(self, stopBits: 'QSerialPort.StopBits') -> bool: ... + def parity(self) -> 'QSerialPort.Parity': ... + def setParity(self, parity: 'QSerialPort.Parity') -> bool: ... + def dataBits(self) -> 'QSerialPort.DataBits': ... + def setDataBits(self, dataBits: 'QSerialPort.DataBits') -> bool: ... + def baudRate(self, dir: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction'] = ...) -> int: ... + def setBaudRate(self, baudRate: int, dir: typing.Union['QSerialPort.Directions', 'QSerialPort.Direction'] = ...) -> bool: ... + def settingsRestoredOnClose(self) -> bool: ... + def setSettingsRestoredOnClose(self, restore: bool) -> None: ... + def close(self) -> None: ... + def open(self, mode: typing.Union[QtCore.QIODevice.OpenMode, QtCore.QIODevice.OpenModeFlag]) -> bool: ... + def setPort(self, info: 'QSerialPortInfo') -> None: ... + def portName(self) -> str: ... + def setPortName(self, name: typing.Optional[str]) -> None: ... + + +class QSerialPortInfo(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, port: QSerialPort) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, other: 'QSerialPortInfo') -> None: ... + + def serialNumber(self) -> str: ... + def isNull(self) -> bool: ... + @staticmethod + def availablePorts() -> typing.List['QSerialPortInfo']: ... + @staticmethod + def standardBaudRates() -> typing.List[int]: ... + def isValid(self) -> bool: ... + def isBusy(self) -> bool: ... + def hasProductIdentifier(self) -> bool: ... + def hasVendorIdentifier(self) -> bool: ... + def productIdentifier(self) -> int: ... + def vendorIdentifier(self) -> int: ... + def manufacturer(self) -> str: ... + def description(self) -> str: ... + def systemLocation(self) -> str: ... + def portName(self) -> str: ... + def swap(self, other: 'QSerialPortInfo') -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtSql.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtSql.abi3.so new file mode 100644 index 0000000..c6437d7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtSql.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtSql.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtSql.pyi new file mode 100644 index 0000000..c27b939 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtSql.pyi @@ -0,0 +1,680 @@ +# The PEP 484 type hints stub file for the QtSql module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QSqlDriverCreatorBase(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QSqlDriverCreatorBase') -> None: ... + + def createObject(self) -> typing.Optional['QSqlDriver']: ... + + +class QSqlDatabase(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QSqlDatabase') -> None: ... + @typing.overload + def __init__(self, type: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, driver: typing.Optional['QSqlDriver']) -> None: ... + + def numericalPrecisionPolicy(self) -> 'QSql.NumericalPrecisionPolicy': ... + def setNumericalPrecisionPolicy(self, precisionPolicy: 'QSql.NumericalPrecisionPolicy') -> None: ... + @staticmethod + def isDriverAvailable(name: typing.Optional[str]) -> bool: ... + @staticmethod + def registerSqlDriver(name: typing.Optional[str], creator: typing.Optional[QSqlDriverCreatorBase]) -> None: ... + @staticmethod + def connectionNames() -> typing.List[str]: ... + @staticmethod + def drivers() -> typing.List[str]: ... + @staticmethod + def contains(connectionName: typing.Optional[str] = ...) -> bool: ... + @staticmethod + def removeDatabase(connectionName: typing.Optional[str]) -> None: ... + @staticmethod + def database(connectionName: typing.Optional[str] = ..., open: bool = ...) -> 'QSqlDatabase': ... + @typing.overload + @staticmethod + def cloneDatabase(other: 'QSqlDatabase', connectionName: typing.Optional[str]) -> 'QSqlDatabase': ... + @typing.overload + @staticmethod + def cloneDatabase(other: typing.Optional[str], connectionName: typing.Optional[str]) -> 'QSqlDatabase': ... + @typing.overload + @staticmethod + def addDatabase(type: typing.Optional[str], connectionName: typing.Optional[str] = ...) -> 'QSqlDatabase': ... + @typing.overload + @staticmethod + def addDatabase(driver: typing.Optional['QSqlDriver'], connectionName: typing.Optional[str] = ...) -> 'QSqlDatabase': ... + def driver(self) -> typing.Optional['QSqlDriver']: ... + def connectionName(self) -> str: ... + def connectOptions(self) -> str: ... + def port(self) -> int: ... + def driverName(self) -> str: ... + def hostName(self) -> str: ... + def password(self) -> str: ... + def userName(self) -> str: ... + def databaseName(self) -> str: ... + def setConnectOptions(self, options: typing.Optional[str] = ...) -> None: ... + def setPort(self, p: int) -> None: ... + def setHostName(self, host: typing.Optional[str]) -> None: ... + def setPassword(self, password: typing.Optional[str]) -> None: ... + def setUserName(self, name: typing.Optional[str]) -> None: ... + def setDatabaseName(self, name: typing.Optional[str]) -> None: ... + def rollback(self) -> bool: ... + def commit(self) -> bool: ... + def transaction(self) -> bool: ... + def isValid(self) -> bool: ... + def lastError(self) -> 'QSqlError': ... + def exec(self, query: typing.Optional[str] = ...) -> 'QSqlQuery': ... + def exec_(self, query: typing.Optional[str] = ...) -> 'QSqlQuery': ... + def record(self, tablename: typing.Optional[str]) -> 'QSqlRecord': ... + def primaryIndex(self, tablename: typing.Optional[str]) -> 'QSqlIndex': ... + def tables(self, type: 'QSql.TableType' = ...) -> typing.List[str]: ... + def isOpenError(self) -> bool: ... + def isOpen(self) -> bool: ... + def close(self) -> None: ... + @typing.overload + def open(self) -> bool: ... + @typing.overload + def open(self, user: typing.Optional[str], password: typing.Optional[str]) -> bool: ... + + +class QSqlDriver(QtCore.QObject): + + class DbmsType(int): + UnknownDbms = ... # type: QSqlDriver.DbmsType + MSSqlServer = ... # type: QSqlDriver.DbmsType + MySqlServer = ... # type: QSqlDriver.DbmsType + PostgreSQL = ... # type: QSqlDriver.DbmsType + Oracle = ... # type: QSqlDriver.DbmsType + Sybase = ... # type: QSqlDriver.DbmsType + SQLite = ... # type: QSqlDriver.DbmsType + Interbase = ... # type: QSqlDriver.DbmsType + DB2 = ... # type: QSqlDriver.DbmsType + + class NotificationSource(int): + UnknownSource = ... # type: QSqlDriver.NotificationSource + SelfSource = ... # type: QSqlDriver.NotificationSource + OtherSource = ... # type: QSqlDriver.NotificationSource + + class IdentifierType(int): + FieldName = ... # type: QSqlDriver.IdentifierType + TableName = ... # type: QSqlDriver.IdentifierType + + class StatementType(int): + WhereStatement = ... # type: QSqlDriver.StatementType + SelectStatement = ... # type: QSqlDriver.StatementType + UpdateStatement = ... # type: QSqlDriver.StatementType + InsertStatement = ... # type: QSqlDriver.StatementType + DeleteStatement = ... # type: QSqlDriver.StatementType + + class DriverFeature(int): + Transactions = ... # type: QSqlDriver.DriverFeature + QuerySize = ... # type: QSqlDriver.DriverFeature + BLOB = ... # type: QSqlDriver.DriverFeature + Unicode = ... # type: QSqlDriver.DriverFeature + PreparedQueries = ... # type: QSqlDriver.DriverFeature + NamedPlaceholders = ... # type: QSqlDriver.DriverFeature + PositionalPlaceholders = ... # type: QSqlDriver.DriverFeature + LastInsertId = ... # type: QSqlDriver.DriverFeature + BatchOperations = ... # type: QSqlDriver.DriverFeature + SimpleLocking = ... # type: QSqlDriver.DriverFeature + LowPrecisionNumbers = ... # type: QSqlDriver.DriverFeature + EventNotifications = ... # type: QSqlDriver.DriverFeature + FinishQuery = ... # type: QSqlDriver.DriverFeature + MultipleResultSets = ... # type: QSqlDriver.DriverFeature + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def dbmsType(self) -> 'QSqlDriver.DbmsType': ... + def numericalPrecisionPolicy(self) -> 'QSql.NumericalPrecisionPolicy': ... + def setNumericalPrecisionPolicy(self, precisionPolicy: 'QSql.NumericalPrecisionPolicy') -> None: ... + def stripDelimiters(self, identifier: typing.Optional[str], type: 'QSqlDriver.IdentifierType') -> str: ... + def isIdentifierEscaped(self, identifier: typing.Optional[str], type: 'QSqlDriver.IdentifierType') -> bool: ... + notification: typing.ClassVar[QtCore.pyqtSignal] + def subscribedToNotifications(self) -> typing.List[str]: ... + def unsubscribeFromNotification(self, name: typing.Optional[str]) -> bool: ... + def subscribeToNotification(self, name: typing.Optional[str]) -> bool: ... + def setLastError(self, e: 'QSqlError') -> None: ... + def setOpenError(self, e: bool) -> None: ... + def setOpen(self, o: bool) -> None: ... + def open(self, db: typing.Optional[str], user: typing.Optional[str] = ..., password: typing.Optional[str] = ..., host: typing.Optional[str] = ..., port: int = ..., options: typing.Optional[str] = ...) -> bool: ... + def createResult(self) -> typing.Optional['QSqlResult']: ... + def close(self) -> None: ... + def hasFeature(self, f: 'QSqlDriver.DriverFeature') -> bool: ... + def handle(self) -> typing.Any: ... + def lastError(self) -> 'QSqlError': ... + def sqlStatement(self, type: 'QSqlDriver.StatementType', tableName: typing.Optional[str], rec: 'QSqlRecord', preparedStatement: bool) -> str: ... + def escapeIdentifier(self, identifier: typing.Optional[str], type: 'QSqlDriver.IdentifierType') -> str: ... + def formatValue(self, field: 'QSqlField', trimStrings: bool = ...) -> str: ... + def record(self, tableName: typing.Optional[str]) -> 'QSqlRecord': ... + def primaryIndex(self, tableName: typing.Optional[str]) -> 'QSqlIndex': ... + def tables(self, tableType: 'QSql.TableType') -> typing.List[str]: ... + def rollbackTransaction(self) -> bool: ... + def commitTransaction(self) -> bool: ... + def beginTransaction(self) -> bool: ... + def isOpenError(self) -> bool: ... + def isOpen(self) -> bool: ... + + +class QSqlError(PyQt5.sipsimplewrapper): + + class ErrorType(int): + NoError = ... # type: QSqlError.ErrorType + ConnectionError = ... # type: QSqlError.ErrorType + StatementError = ... # type: QSqlError.ErrorType + TransactionError = ... # type: QSqlError.ErrorType + UnknownError = ... # type: QSqlError.ErrorType + + @typing.overload + def __init__(self, driverText: typing.Optional[str] = ..., databaseText: typing.Optional[str] = ..., type: 'QSqlError.ErrorType' = ..., errorCode: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, driverText: typing.Optional[str], databaseText: typing.Optional[str], type: 'QSqlError.ErrorType', number: int) -> None: ... + @typing.overload + def __init__(self, other: 'QSqlError') -> None: ... + + def swap(self, other: 'QSqlError') -> None: ... + def nativeErrorCode(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def isValid(self) -> bool: ... + def text(self) -> str: ... + def setNumber(self, number: int) -> None: ... + def number(self) -> int: ... + def setType(self, type: 'QSqlError.ErrorType') -> None: ... + def type(self) -> 'QSqlError.ErrorType': ... + def setDatabaseText(self, databaseText: typing.Optional[str]) -> None: ... + def databaseText(self) -> str: ... + def setDriverText(self, driverText: typing.Optional[str]) -> None: ... + def driverText(self) -> str: ... + + +class QSqlField(PyQt5.sipsimplewrapper): + + class RequiredStatus(int): + Unknown = ... # type: QSqlField.RequiredStatus + Optional = ... # type: QSqlField.RequiredStatus + Required = ... # type: QSqlField.RequiredStatus + + @typing.overload + def __init__(self, fieldName: typing.Optional[str] = ..., type: QtCore.QVariant.Type = ...) -> None: ... + @typing.overload + def __init__(self, fieldName: typing.Optional[str], type: QtCore.QVariant.Type, tableName: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, other: 'QSqlField') -> None: ... + + def tableName(self) -> str: ... + def setTableName(self, tableName: typing.Optional[str]) -> None: ... + def isValid(self) -> bool: ... + def isGenerated(self) -> bool: ... + def typeID(self) -> int: ... + def defaultValue(self) -> typing.Any: ... + def precision(self) -> int: ... + def length(self) -> int: ... + def requiredStatus(self) -> 'QSqlField.RequiredStatus': ... + def setAutoValue(self, autoVal: bool) -> None: ... + def setGenerated(self, gen: bool) -> None: ... + def setSqlType(self, type: int) -> None: ... + def setDefaultValue(self, value: typing.Any) -> None: ... + def setPrecision(self, precision: int) -> None: ... + def setLength(self, fieldLength: int) -> None: ... + def setRequired(self, required: bool) -> None: ... + def setRequiredStatus(self, status: 'QSqlField.RequiredStatus') -> None: ... + def setType(self, type: QtCore.QVariant.Type) -> None: ... + def isAutoValue(self) -> bool: ... + def type(self) -> QtCore.QVariant.Type: ... + def clear(self) -> None: ... + def isReadOnly(self) -> bool: ... + def setReadOnly(self, readOnly: bool) -> None: ... + def isNull(self) -> bool: ... + def name(self) -> str: ... + def setName(self, name: typing.Optional[str]) -> None: ... + def value(self) -> typing.Any: ... + def setValue(self, value: typing.Any) -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QSqlRecord(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QSqlRecord') -> None: ... + + def keyValues(self, keyFields: 'QSqlRecord') -> 'QSqlRecord': ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def clearValues(self) -> None: ... + def clear(self) -> None: ... + def contains(self, name: typing.Optional[str]) -> bool: ... + def isEmpty(self) -> bool: ... + def remove(self, pos: int) -> None: ... + def insert(self, pos: int, field: QSqlField) -> None: ... + def replace(self, pos: int, field: QSqlField) -> None: ... + def append(self, field: QSqlField) -> None: ... + @typing.overload + def setGenerated(self, name: typing.Optional[str], generated: bool) -> None: ... + @typing.overload + def setGenerated(self, i: int, generated: bool) -> None: ... + @typing.overload + def isGenerated(self, i: int) -> bool: ... + @typing.overload + def isGenerated(self, name: typing.Optional[str]) -> bool: ... + @typing.overload + def field(self, i: int) -> QSqlField: ... + @typing.overload + def field(self, name: typing.Optional[str]) -> QSqlField: ... + def fieldName(self, i: int) -> str: ... + def indexOf(self, name: typing.Optional[str]) -> int: ... + @typing.overload + def isNull(self, i: int) -> bool: ... + @typing.overload + def isNull(self, name: typing.Optional[str]) -> bool: ... + @typing.overload + def setNull(self, i: int) -> None: ... + @typing.overload + def setNull(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def setValue(self, i: int, val: typing.Any) -> None: ... + @typing.overload + def setValue(self, name: typing.Optional[str], val: typing.Any) -> None: ... + @typing.overload + def value(self, i: int) -> typing.Any: ... + @typing.overload + def value(self, name: typing.Optional[str]) -> typing.Any: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QSqlIndex(QSqlRecord): + + @typing.overload + def __init__(self, cursorName: typing.Optional[str] = ..., name: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QSqlIndex') -> None: ... + + def setDescending(self, i: int, desc: bool) -> None: ... + def isDescending(self, i: int) -> bool: ... + @typing.overload + def append(self, field: QSqlField) -> None: ... + @typing.overload + def append(self, field: QSqlField, desc: bool) -> None: ... + def name(self) -> str: ... + def setName(self, name: typing.Optional[str]) -> None: ... + def cursorName(self) -> str: ... + def setCursorName(self, cursorName: typing.Optional[str]) -> None: ... + + +class QSqlQuery(PyQt5.sipsimplewrapper): + + class BatchExecutionMode(int): + ValuesAsRows = ... # type: QSqlQuery.BatchExecutionMode + ValuesAsColumns = ... # type: QSqlQuery.BatchExecutionMode + + @typing.overload + def __init__(self, r: typing.Optional['QSqlResult']) -> None: ... + @typing.overload + def __init__(self, query: typing.Optional[str] = ..., db: QSqlDatabase = ...) -> None: ... + @typing.overload + def __init__(self, db: QSqlDatabase) -> None: ... + @typing.overload + def __init__(self, other: 'QSqlQuery') -> None: ... + + def nextResult(self) -> bool: ... + def finish(self) -> None: ... + def numericalPrecisionPolicy(self) -> 'QSql.NumericalPrecisionPolicy': ... + def setNumericalPrecisionPolicy(self, precisionPolicy: 'QSql.NumericalPrecisionPolicy') -> None: ... + def lastInsertId(self) -> typing.Any: ... + def executedQuery(self) -> str: ... + def boundValues(self) -> typing.Dict[str, typing.Any]: ... + @typing.overload + def boundValue(self, placeholder: typing.Optional[str]) -> typing.Any: ... + @typing.overload + def boundValue(self, pos: int) -> typing.Any: ... + def addBindValue(self, val: typing.Any, type: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag'] = ...) -> None: ... + @typing.overload + def bindValue(self, placeholder: typing.Optional[str], val: typing.Any, type: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag'] = ...) -> None: ... + @typing.overload + def bindValue(self, pos: int, val: typing.Any, type: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag'] = ...) -> None: ... + def prepare(self, query: typing.Optional[str]) -> bool: ... + def execBatch(self, mode: 'QSqlQuery.BatchExecutionMode' = ...) -> bool: ... + def clear(self) -> None: ... + def last(self) -> bool: ... + def first(self) -> bool: ... + def previous(self) -> bool: ... + def next(self) -> bool: ... + def seek(self, index: int, relative: bool = ...) -> bool: ... + @typing.overload + def value(self, i: int) -> typing.Any: ... + @typing.overload + def value(self, name: typing.Optional[str]) -> typing.Any: ... + @typing.overload + def exec(self, query: typing.Optional[str]) -> bool: ... + @typing.overload + def exec(self) -> bool: ... + @typing.overload + def exec_(self, query: typing.Optional[str]) -> bool: ... + @typing.overload + def exec_(self) -> bool: ... + def setForwardOnly(self, forward: bool) -> None: ... + def record(self) -> QSqlRecord: ... + def isForwardOnly(self) -> bool: ... + def result(self) -> typing.Optional['QSqlResult']: ... + def driver(self) -> typing.Optional[QSqlDriver]: ... + def size(self) -> int: ... + def isSelect(self) -> bool: ... + def lastError(self) -> QSqlError: ... + def numRowsAffected(self) -> int: ... + def lastQuery(self) -> str: ... + def at(self) -> int: ... + @typing.overload + def isNull(self, field: int) -> bool: ... + @typing.overload + def isNull(self, name: typing.Optional[str]) -> bool: ... + def isActive(self) -> bool: ... + def isValid(self) -> bool: ... + + +class QSqlQueryModel(QtCore.QAbstractTableModel): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def roleNames(self) -> typing.Dict[int, QtCore.QByteArray]: ... + def endRemoveColumns(self) -> None: ... + def beginRemoveColumns(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... + def endInsertColumns(self) -> None: ... + def beginInsertColumns(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... + def endRemoveRows(self) -> None: ... + def beginRemoveRows(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... + def endInsertRows(self) -> None: ... + def beginInsertRows(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... + def endResetModel(self) -> None: ... + def beginResetModel(self) -> None: ... + def setLastError(self, error: QSqlError) -> None: ... + def indexInQuery(self, item: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + def queryChange(self) -> None: ... + def canFetchMore(self, parent: QtCore.QModelIndex = ...) -> bool: ... + def fetchMore(self, parent: QtCore.QModelIndex = ...) -> None: ... + def lastError(self) -> QSqlError: ... + def clear(self) -> None: ... + def query(self) -> QSqlQuery: ... + @typing.overload + def setQuery(self, query: QSqlQuery) -> None: ... + @typing.overload + def setQuery(self, query: typing.Optional[str], db: QSqlDatabase = ...) -> None: ... + def removeColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def insertColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def setHeaderData(self, section: int, orientation: QtCore.Qt.Orientation, value: typing.Any, role: int = ...) -> bool: ... + def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... + def data(self, item: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... + @typing.overload + def record(self, row: int) -> QSqlRecord: ... + @typing.overload + def record(self) -> QSqlRecord: ... + def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + + +class QSqlRelationalDelegate(QtWidgets.QItemDelegate): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setEditorData(self, editor: typing.Optional[QtWidgets.QWidget], index: QtCore.QModelIndex) -> None: ... + def setModelData(self, editor: typing.Optional[QtWidgets.QWidget], model: typing.Optional[QtCore.QAbstractItemModel], index: QtCore.QModelIndex) -> None: ... + def createEditor(self, parent: typing.Optional[QtWidgets.QWidget], option: QtWidgets.QStyleOptionViewItem, index: QtCore.QModelIndex) -> typing.Optional[QtWidgets.QWidget]: ... + + +class QSqlRelation(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, aTableName: typing.Optional[str], indexCol: typing.Optional[str], displayCol: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, a0: 'QSqlRelation') -> None: ... + + def swap(self, other: 'QSqlRelation') -> None: ... + def isValid(self) -> bool: ... + def displayColumn(self) -> str: ... + def indexColumn(self) -> str: ... + def tableName(self) -> str: ... + + +class QSqlTableModel(QSqlQueryModel): + + class EditStrategy(int): + OnFieldChange = ... # type: QSqlTableModel.EditStrategy + OnRowChange = ... # type: QSqlTableModel.EditStrategy + OnManualSubmit = ... # type: QSqlTableModel.EditStrategy + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ..., db: QSqlDatabase = ...) -> None: ... + + def primaryValues(self, row: int) -> QSqlRecord: ... + @typing.overload + def record(self) -> QSqlRecord: ... + @typing.overload + def record(self, row: int) -> QSqlRecord: ... + def selectRow(self, row: int) -> bool: ... + def indexInQuery(self, item: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + def setQuery(self, query: QSqlQuery) -> None: ... + def setPrimaryKey(self, key: QSqlIndex) -> None: ... + def selectStatement(self) -> str: ... + def orderByClause(self) -> str: ... + def deleteRowFromTable(self, row: int) -> bool: ... + def insertRowIntoTable(self, values: QSqlRecord) -> bool: ... + def updateRowInTable(self, row: int, values: QSqlRecord) -> bool: ... + beforeDelete: typing.ClassVar[QtCore.pyqtSignal] + beforeUpdate: typing.ClassVar[QtCore.pyqtSignal] + beforeInsert: typing.ClassVar[QtCore.pyqtSignal] + primeInsert: typing.ClassVar[QtCore.pyqtSignal] + def revertAll(self) -> None: ... + def submitAll(self) -> bool: ... + def revert(self) -> None: ... + def submit(self) -> bool: ... + def revertRow(self, row: int) -> None: ... + def setRecord(self, row: int, record: QSqlRecord) -> bool: ... + def insertRecord(self, row: int, record: QSqlRecord) -> bool: ... + def insertRows(self, row: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def removeRows(self, row: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def removeColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def setFilter(self, filter: typing.Optional[str]) -> None: ... + def filter(self) -> str: ... + def setSort(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... + def sort(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... + def fieldIndex(self, fieldName: typing.Optional[str]) -> int: ... + def database(self) -> QSqlDatabase: ... + def primaryKey(self) -> QSqlIndex: ... + def editStrategy(self) -> 'QSqlTableModel.EditStrategy': ... + def setEditStrategy(self, strategy: 'QSqlTableModel.EditStrategy') -> None: ... + def clear(self) -> None: ... + @typing.overload + def isDirty(self, index: QtCore.QModelIndex) -> bool: ... + @typing.overload + def isDirty(self) -> bool: ... + def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... + def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, idx: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... + def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlags: ... + def tableName(self) -> str: ... + def setTable(self, tableName: typing.Optional[str]) -> None: ... + def select(self) -> bool: ... + + +class QSqlRelationalTableModel(QSqlTableModel): + + class JoinMode(int): + InnerJoin = ... # type: QSqlRelationalTableModel.JoinMode + LeftJoin = ... # type: QSqlRelationalTableModel.JoinMode + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ..., db: QSqlDatabase = ...) -> None: ... + + def setJoinMode(self, joinMode: 'QSqlRelationalTableModel.JoinMode') -> None: ... + def insertRowIntoTable(self, values: QSqlRecord) -> bool: ... + def orderByClause(self) -> str: ... + def updateRowInTable(self, row: int, values: QSqlRecord) -> bool: ... + def selectStatement(self) -> str: ... + def removeColumns(self, column: int, count: int, parent: QtCore.QModelIndex = ...) -> bool: ... + def revertRow(self, row: int) -> None: ... + def relationModel(self, column: int) -> typing.Optional[QSqlTableModel]: ... + def relation(self, column: int) -> QSqlRelation: ... + def setRelation(self, column: int, relation: QSqlRelation) -> None: ... + def setTable(self, tableName: typing.Optional[str]) -> None: ... + def select(self) -> bool: ... + def clear(self) -> None: ... + def setData(self, item: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, item: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... + + +class QSqlResult(PyQt5.sip.wrapper): + + class BindingSyntax(int): + PositionalBinding = ... # type: QSqlResult.BindingSyntax + NamedBinding = ... # type: QSqlResult.BindingSyntax + + def __init__(self, db: typing.Optional[QSqlDriver]) -> None: ... + + def lastInsertId(self) -> typing.Any: ... + def record(self) -> QSqlRecord: ... + def numRowsAffected(self) -> int: ... + def size(self) -> int: ... + def fetchLast(self) -> bool: ... + def fetchFirst(self) -> bool: ... + def fetchPrevious(self) -> bool: ... + def fetchNext(self) -> bool: ... + def fetch(self, i: int) -> bool: ... + def reset(self, sqlquery: typing.Optional[str]) -> bool: ... + def isNull(self, i: int) -> bool: ... + def data(self, i: int) -> typing.Any: ... + def bindingSyntax(self) -> 'QSqlResult.BindingSyntax': ... + def hasOutValues(self) -> bool: ... + def clear(self) -> None: ... + def boundValueName(self, pos: int) -> str: ... + def executedQuery(self) -> str: ... + def boundValues(self) -> typing.List[typing.Any]: ... + def boundValueCount(self) -> int: ... + @typing.overload + def bindValueType(self, placeholder: typing.Optional[str]) -> 'QSql.ParamType': ... + @typing.overload + def bindValueType(self, pos: int) -> 'QSql.ParamType': ... + @typing.overload + def boundValue(self, placeholder: typing.Optional[str]) -> typing.Any: ... + @typing.overload + def boundValue(self, pos: int) -> typing.Any: ... + def addBindValue(self, val: typing.Any, type: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> None: ... + @typing.overload + def bindValue(self, pos: int, val: typing.Any, type: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> None: ... + @typing.overload + def bindValue(self, placeholder: typing.Optional[str], val: typing.Any, type: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> None: ... + def savePrepare(self, sqlquery: typing.Optional[str]) -> bool: ... + def prepare(self, query: typing.Optional[str]) -> bool: ... + def exec(self) -> bool: ... + def exec_(self) -> bool: ... + def setForwardOnly(self, forward: bool) -> None: ... + def setSelect(self, s: bool) -> None: ... + def setQuery(self, query: typing.Optional[str]) -> None: ... + def setLastError(self, e: QSqlError) -> None: ... + def setActive(self, a: bool) -> None: ... + def setAt(self, at: int) -> None: ... + def driver(self) -> typing.Optional[QSqlDriver]: ... + def isForwardOnly(self) -> bool: ... + def isSelect(self) -> bool: ... + def isActive(self) -> bool: ... + def isValid(self) -> bool: ... + def lastError(self) -> QSqlError: ... + def lastQuery(self) -> str: ... + def at(self) -> int: ... + def handle(self) -> typing.Any: ... + + +class QSql(PyQt5.sip.simplewrapper): + + class NumericalPrecisionPolicy(int): + LowPrecisionInt32 = ... # type: QSql.NumericalPrecisionPolicy + LowPrecisionInt64 = ... # type: QSql.NumericalPrecisionPolicy + LowPrecisionDouble = ... # type: QSql.NumericalPrecisionPolicy + HighPrecision = ... # type: QSql.NumericalPrecisionPolicy + + class TableType(int): + Tables = ... # type: QSql.TableType + SystemTables = ... # type: QSql.TableType + Views = ... # type: QSql.TableType + AllTables = ... # type: QSql.TableType + + class ParamTypeFlag(int): + In = ... # type: QSql.ParamTypeFlag + Out = ... # type: QSql.ParamTypeFlag + InOut = ... # type: QSql.ParamTypeFlag + Binary = ... # type: QSql.ParamTypeFlag + + class Location(int): + BeforeFirstRow = ... # type: QSql.Location + AfterLastRow = ... # type: QSql.Location + + class ParamType(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> 'QSql.ParamType': ... + def __xor__(self, f: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> 'QSql.ParamType': ... + def __ior__(self, f: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> 'QSql.ParamType': ... + def __or__(self, f: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> 'QSql.ParamType': ... + def __iand__(self, f: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> 'QSql.ParamType': ... + def __and__(self, f: typing.Union['QSql.ParamType', 'QSql.ParamTypeFlag']) -> 'QSql.ParamType': ... + def __invert__(self) -> 'QSql.ParamType': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtSvg.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtSvg.abi3.so new file mode 100644 index 0000000..d0300a0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtSvg.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtSvg.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtSvg.pyi new file mode 100644 index 0000000..31a2259 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtSvg.pyi @@ -0,0 +1,147 @@ +# The PEP 484 type hints stub file for the QtSvg module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QGraphicsSvgItem(QtWidgets.QGraphicsObject): + + @typing.overload + def __init__(self, parent: typing.Optional[QtWidgets.QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, fileName: typing.Optional[str], parent: typing.Optional[QtWidgets.QGraphicsItem] = ...) -> None: ... + + def type(self) -> int: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional[QtWidgets.QStyleOptionGraphicsItem], widget: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + def boundingRect(self) -> QtCore.QRectF: ... + def maximumCacheSize(self) -> QtCore.QSize: ... + def setMaximumCacheSize(self, size: QtCore.QSize) -> None: ... + def elementId(self) -> str: ... + def setElementId(self, id: typing.Optional[str]) -> None: ... + def renderer(self) -> typing.Optional['QSvgRenderer']: ... + def setSharedRenderer(self, renderer: typing.Optional['QSvgRenderer']) -> None: ... + + +class QSvgGenerator(QtGui.QPaintDevice): + + def __init__(self) -> None: ... + + def metric(self, metric: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... + def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... + @typing.overload + def setViewBox(self, viewBox: QtCore.QRect) -> None: ... + @typing.overload + def setViewBox(self, viewBox: QtCore.QRectF) -> None: ... + def viewBoxF(self) -> QtCore.QRectF: ... + def viewBox(self) -> QtCore.QRect: ... + def setDescription(self, description: typing.Optional[str]) -> None: ... + def description(self) -> str: ... + def setTitle(self, title: typing.Optional[str]) -> None: ... + def title(self) -> str: ... + def setResolution(self, resolution: int) -> None: ... + def resolution(self) -> int: ... + def setOutputDevice(self, outputDevice: typing.Optional[QtCore.QIODevice]) -> None: ... + def outputDevice(self) -> typing.Optional[QtCore.QIODevice]: ... + def setFileName(self, fileName: typing.Optional[str]) -> None: ... + def fileName(self) -> str: ... + def setSize(self, size: QtCore.QSize) -> None: ... + def size(self) -> QtCore.QSize: ... + + +class QSvgRenderer(QtCore.QObject): + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, filename: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, contents: typing.Union[QtCore.QByteArray, bytes, bytearray], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, contents: typing.Optional[QtCore.QXmlStreamReader], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def transformForElement(self, id: typing.Optional[str]) -> QtGui.QTransform: ... + def setAspectRatioMode(self, mode: QtCore.Qt.AspectRatioMode) -> None: ... + def aspectRatioMode(self) -> QtCore.Qt.AspectRatioMode: ... + repaintNeeded: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def render(self, p: typing.Optional[QtGui.QPainter]) -> None: ... + @typing.overload + def render(self, p: typing.Optional[QtGui.QPainter], bounds: QtCore.QRectF) -> None: ... + @typing.overload + def render(self, painter: typing.Optional[QtGui.QPainter], elementId: typing.Optional[str], bounds: QtCore.QRectF = ...) -> None: ... + @typing.overload + def load(self, filename: typing.Optional[str]) -> bool: ... + @typing.overload + def load(self, contents: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + @typing.overload + def load(self, contents: typing.Optional[QtCore.QXmlStreamReader]) -> bool: ... + def animationDuration(self) -> int: ... + def setCurrentFrame(self, a0: int) -> None: ... + def currentFrame(self) -> int: ... + def setFramesPerSecond(self, num: int) -> None: ... + def framesPerSecond(self) -> int: ... + def boundsOnElement(self, id: typing.Optional[str]) -> QtCore.QRectF: ... + def animated(self) -> bool: ... + @typing.overload + def setViewBox(self, viewbox: QtCore.QRect) -> None: ... + @typing.overload + def setViewBox(self, viewbox: QtCore.QRectF) -> None: ... + def viewBoxF(self) -> QtCore.QRectF: ... + def viewBox(self) -> QtCore.QRect: ... + def elementExists(self, id: typing.Optional[str]) -> bool: ... + def defaultSize(self) -> QtCore.QSize: ... + def isValid(self) -> bool: ... + + +class QSvgWidget(QtWidgets.QWidget): + + @typing.overload + def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, file: typing.Optional[str], parent: typing.Optional[QtWidgets.QWidget] = ...) -> None: ... + + def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... + @typing.overload + def load(self, file: typing.Optional[str]) -> None: ... + @typing.overload + def load(self, contents: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def renderer(self) -> typing.Optional[QSvgRenderer]: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtTest.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtTest.abi3.so new file mode 100644 index 0000000..88f9dfb Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtTest.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtTest.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtTest.pyi new file mode 100644 index 0000000..722fefa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtTest.pyi @@ -0,0 +1,174 @@ +# The PEP 484 type hints stub file for the QtTest module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtWidgets + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QAbstractItemModelTester(QtCore.QObject): + + class FailureReportingMode(int): + QtTest = ... # type: QAbstractItemModelTester.FailureReportingMode + Warning = ... # type: QAbstractItemModelTester.FailureReportingMode + Fatal = ... # type: QAbstractItemModelTester.FailureReportingMode + + @typing.overload + def __init__(self, model: typing.Optional[QtCore.QAbstractItemModel], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, model: typing.Optional[QtCore.QAbstractItemModel], mode: 'QAbstractItemModelTester.FailureReportingMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def failureReportingMode(self) -> 'QAbstractItemModelTester.FailureReportingMode': ... + def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... + + +class QSignalSpy(QtCore.QObject): + + @typing.overload + def __init__(self, signal: pyqtBoundSignal) -> None: ... + @typing.overload + def __init__(self, obj: typing.Optional[QtCore.QObject], signal: QtCore.QMetaMethod) -> None: ... + + def __delitem__(self, i: int) -> None: ... + def __setitem__(self, i: int, value: typing.Iterable[typing.Any]) -> None: ... + def __getitem__(self, i: int) -> typing.List[typing.Any]: ... + def __len__(self) -> int: ... + def wait(self, timeout: int = ...) -> bool: ... + def signal(self) -> QtCore.QByteArray: ... + def isValid(self) -> bool: ... + + +class QTest(PyQt5.sip.simplewrapper): + + class KeyAction(int): + Press = ... # type: QTest.KeyAction + Release = ... # type: QTest.KeyAction + Click = ... # type: QTest.KeyAction + Shortcut = ... # type: QTest.KeyAction + + class QTouchEventSequence(PyQt5.sipsimplewrapper): + + def __init__(self, a0: 'QTest.QTouchEventSequence') -> None: ... + + def commit(self, processEvents: bool = ...) -> None: ... + def stationary(self, touchId: int) -> 'QTest.QTouchEventSequence': ... + @typing.overload + def release(self, touchId: int, pt: QtCore.QPoint, window: typing.Optional[QtGui.QWindow] = ...) -> 'QTest.QTouchEventSequence': ... + @typing.overload + def release(self, touchId: int, pt: QtCore.QPoint, widget: typing.Optional[QtWidgets.QWidget]) -> 'QTest.QTouchEventSequence': ... + @typing.overload + def move(self, touchId: int, pt: QtCore.QPoint, window: typing.Optional[QtGui.QWindow] = ...) -> 'QTest.QTouchEventSequence': ... + @typing.overload + def move(self, touchId: int, pt: QtCore.QPoint, widget: typing.Optional[QtWidgets.QWidget]) -> 'QTest.QTouchEventSequence': ... + @typing.overload + def press(self, touchId: int, pt: QtCore.QPoint, window: typing.Optional[QtGui.QWindow] = ...) -> 'QTest.QTouchEventSequence': ... + @typing.overload + def press(self, touchId: int, pt: QtCore.QPoint, widget: typing.Optional[QtWidgets.QWidget]) -> 'QTest.QTouchEventSequence': ... + + @typing.overload + def touchEvent(self, widget: typing.Optional[QtWidgets.QWidget], device: typing.Optional[QtGui.QTouchDevice]) -> 'QTest.QTouchEventSequence': ... + @typing.overload + def touchEvent(self, window: typing.Optional[QtGui.QWindow], device: typing.Optional[QtGui.QTouchDevice]) -> 'QTest.QTouchEventSequence': ... + @typing.overload + def qWaitForWindowExposed(self, window: typing.Optional[QtGui.QWindow], timeout: int = ...) -> bool: ... + @typing.overload + def qWaitForWindowExposed(self, widget: typing.Optional[QtWidgets.QWidget], timeout: int = ...) -> bool: ... + @typing.overload + def qWaitForWindowActive(self, window: typing.Optional[QtGui.QWindow], timeout: int = ...) -> bool: ... + @typing.overload + def qWaitForWindowActive(self, widget: typing.Optional[QtWidgets.QWidget], timeout: int = ...) -> bool: ... + def qWait(self, ms: int) -> None: ... + @typing.overload + def mouseRelease(self, widget: typing.Optional[QtWidgets.QWidget], button: QtCore.Qt.MouseButton, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mouseRelease(self, window: typing.Optional[QtGui.QWindow], button: QtCore.Qt.MouseButton, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mousePress(self, widget: typing.Optional[QtWidgets.QWidget], button: QtCore.Qt.MouseButton, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mousePress(self, window: typing.Optional[QtGui.QWindow], button: QtCore.Qt.MouseButton, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mouseMove(self, widget: typing.Optional[QtWidgets.QWidget], pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mouseMove(self, window: typing.Optional[QtGui.QWindow], pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mouseDClick(self, widget: typing.Optional[QtWidgets.QWidget], button: QtCore.Qt.MouseButton, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mouseDClick(self, window: typing.Optional[QtGui.QWindow], button: QtCore.Qt.MouseButton, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mouseClick(self, widget: typing.Optional[QtWidgets.QWidget], button: QtCore.Qt.MouseButton, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def mouseClick(self, window: typing.Optional[QtGui.QWindow], button: QtCore.Qt.MouseButton, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., pos: QtCore.QPoint = ..., delay: int = ...) -> None: ... + @typing.overload + def keySequence(self, widget: typing.Optional[QtWidgets.QWidget], keySequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... + @typing.overload + def keySequence(self, window: typing.Optional[QtGui.QWindow], keySequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... + @typing.overload + def keyRelease(self, widget: typing.Optional[QtWidgets.QWidget], key: QtCore.Qt.Key, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyRelease(self, widget: typing.Optional[QtWidgets.QWidget], key: str, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyRelease(self, window: typing.Optional[QtGui.QWindow], key: QtCore.Qt.Key, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyRelease(self, window: typing.Optional[QtGui.QWindow], key: str, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyPress(self, widget: typing.Optional[QtWidgets.QWidget], key: QtCore.Qt.Key, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyPress(self, widget: typing.Optional[QtWidgets.QWidget], key: str, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyPress(self, window: typing.Optional[QtGui.QWindow], key: QtCore.Qt.Key, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyPress(self, window: typing.Optional[QtGui.QWindow], key: str, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyEvent(self, action: 'QTest.KeyAction', widget: typing.Optional[QtWidgets.QWidget], key: QtCore.Qt.Key, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyEvent(self, action: 'QTest.KeyAction', widget: typing.Optional[QtWidgets.QWidget], ascii: str, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyEvent(self, action: 'QTest.KeyAction', window: typing.Optional[QtGui.QWindow], key: QtCore.Qt.Key, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyEvent(self, action: 'QTest.KeyAction', window: typing.Optional[QtGui.QWindow], ascii: str, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + def keyClicks(self, widget: typing.Optional[QtWidgets.QWidget], sequence: typing.Optional[str], modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyClick(self, widget: typing.Optional[QtWidgets.QWidget], key: QtCore.Qt.Key, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyClick(self, widget: typing.Optional[QtWidgets.QWidget], key: str, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyClick(self, window: typing.Optional[QtGui.QWindow], key: QtCore.Qt.Key, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + @typing.overload + def keyClick(self, window: typing.Optional[QtGui.QWindow], key: str, modifier: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier] = ..., delay: int = ...) -> None: ... + def qSleep(self, ms: int) -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtTextToSpeech.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtTextToSpeech.abi3.so new file mode 100644 index 0000000..b5e29b9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtTextToSpeech.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtTextToSpeech.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtTextToSpeech.pyi new file mode 100644 index 0000000..5ae2219 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtTextToSpeech.pyi @@ -0,0 +1,104 @@ +# The PEP 484 type hints stub file for the QtTextToSpeech module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QTextToSpeech(QtCore.QObject): + + class State(int): + Ready = ... # type: QTextToSpeech.State + Speaking = ... # type: QTextToSpeech.State + Paused = ... # type: QTextToSpeech.State + BackendError = ... # type: QTextToSpeech.State + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, engine: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + voiceChanged: typing.ClassVar[QtCore.pyqtSignal] + volumeChanged: typing.ClassVar[QtCore.pyqtSignal] + pitchChanged: typing.ClassVar[QtCore.pyqtSignal] + rateChanged: typing.ClassVar[QtCore.pyqtSignal] + localeChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def setVoice(self, voice: 'QVoice') -> None: ... + def setVolume(self, volume: float) -> None: ... + def setPitch(self, pitch: float) -> None: ... + def setRate(self, rate: float) -> None: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + def resume(self) -> None: ... + def pause(self) -> None: ... + def stop(self) -> None: ... + def say(self, text: typing.Optional[str]) -> None: ... + @staticmethod + def availableEngines() -> typing.List[str]: ... + def volume(self) -> float: ... + def pitch(self) -> float: ... + def rate(self) -> float: ... + def availableVoices(self) -> typing.List['QVoice']: ... + def voice(self) -> 'QVoice': ... + def locale(self) -> QtCore.QLocale: ... + def availableLocales(self) -> typing.List[QtCore.QLocale]: ... + def state(self) -> 'QTextToSpeech.State': ... + + +class QVoice(PyQt5.sipsimplewrapper): + + class Age(int): + Child = ... # type: QVoice.Age + Teenager = ... # type: QVoice.Age + Adult = ... # type: QVoice.Age + Senior = ... # type: QVoice.Age + Other = ... # type: QVoice.Age + + class Gender(int): + Male = ... # type: QVoice.Gender + Female = ... # type: QVoice.Gender + Unknown = ... # type: QVoice.Gender + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QVoice') -> None: ... + + @staticmethod + def ageName(age: 'QVoice.Age') -> str: ... + @staticmethod + def genderName(gender: 'QVoice.Gender') -> str: ... + def age(self) -> 'QVoice.Age': ... + def gender(self) -> 'QVoice.Gender': ... + def name(self) -> str: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtWebChannel.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtWebChannel.abi3.so new file mode 100644 index 0000000..1ef5638 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtWebChannel.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtWebChannel.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtWebChannel.pyi new file mode 100644 index 0000000..dfc763b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtWebChannel.pyi @@ -0,0 +1,57 @@ +# The PEP 484 type hints stub file for the QtWebChannel module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QWebChannel(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def disconnectFrom(self, transport: typing.Optional['QWebChannelAbstractTransport']) -> None: ... + def connectTo(self, transport: typing.Optional['QWebChannelAbstractTransport']) -> None: ... + blockUpdatesChanged: typing.ClassVar[QtCore.pyqtSignal] + def setBlockUpdates(self, block: bool) -> None: ... + def blockUpdates(self) -> bool: ... + def deregisterObject(self, object: typing.Optional[QtCore.QObject]) -> None: ... + def registerObject(self, id: typing.Optional[str], object: typing.Optional[QtCore.QObject]) -> None: ... + def registeredObjects(self) -> typing.Dict[str, QtCore.QObject]: ... + def registerObjects(self, objects: typing.Dict[typing.Optional[str], QtCore.QObject]) -> None: ... + + +class QWebChannelAbstractTransport(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + messageReceived: typing.ClassVar[QtCore.pyqtSignal] + def sendMessage(self, message: typing.Dict[typing.Optional[str], typing.Union[QtCore.QJsonValue, QtCore.QJsonValue.Type, typing.Iterable[QtCore.QJsonValue], typing.Dict[typing.Optional[str], QtCore.QJsonValue], bool, int, float, None, typing.Optional[str]]]) -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtWebSockets.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtWebSockets.abi3.so new file mode 100644 index 0000000..94c8dd4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtWebSockets.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtWebSockets.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtWebSockets.pyi new file mode 100644 index 0000000..8ab6052 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtWebSockets.pyi @@ -0,0 +1,206 @@ +# The PEP 484 type hints stub file for the QtWebSockets module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtNetwork + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QMaskGenerator(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def nextMask(self) -> int: ... + def seed(self) -> bool: ... + + +class QWebSocket(QtCore.QObject): + + def __init__(self, origin: typing.Optional[str] = ..., version: 'QWebSocketProtocol.Version' = ..., parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + @staticmethod + def maxOutgoingFrameSize() -> int: ... + def outgoingFrameSize(self) -> int: ... + def setOutgoingFrameSize(self, outgoingFrameSize: int) -> None: ... + @staticmethod + def maxIncomingFrameSize() -> int: ... + @staticmethod + def maxIncomingMessageSize() -> int: ... + def maxAllowedIncomingMessageSize(self) -> int: ... + def setMaxAllowedIncomingMessageSize(self, maxAllowedIncomingMessageSize: int) -> None: ... + def maxAllowedIncomingFrameSize(self) -> int: ... + def setMaxAllowedIncomingFrameSize(self, maxAllowedIncomingFrameSize: int) -> None: ... + def bytesToWrite(self) -> int: ... + preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + sslErrors: typing.ClassVar[QtCore.pyqtSignal] + bytesWritten: typing.ClassVar[QtCore.pyqtSignal] + pong: typing.ClassVar[QtCore.pyqtSignal] + binaryMessageReceived: typing.ClassVar[QtCore.pyqtSignal] + textMessageReceived: typing.ClassVar[QtCore.pyqtSignal] + binaryFrameReceived: typing.ClassVar[QtCore.pyqtSignal] + textFrameReceived: typing.ClassVar[QtCore.pyqtSignal] + readChannelFinished: typing.ClassVar[QtCore.pyqtSignal] + proxyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + disconnected: typing.ClassVar[QtCore.pyqtSignal] + connected: typing.ClassVar[QtCore.pyqtSignal] + aboutToClose: typing.ClassVar[QtCore.pyqtSignal] + def ping(self, payload: typing.Union[QtCore.QByteArray, bytes, bytearray] = ...) -> None: ... + @typing.overload + def open(self, url: QtCore.QUrl) -> None: ... + @typing.overload + def open(self, request: QtNetwork.QNetworkRequest) -> None: ... + def close(self, closeCode: 'QWebSocketProtocol.CloseCode' = ..., reason: typing.Optional[str] = ...) -> None: ... + def request(self) -> QtNetwork.QNetworkRequest: ... + def sslConfiguration(self) -> QtNetwork.QSslConfiguration: ... + def setSslConfiguration(self, sslConfiguration: QtNetwork.QSslConfiguration) -> None: ... + @typing.overload + def ignoreSslErrors(self, errors: typing.Iterable[QtNetwork.QSslError]) -> None: ... + @typing.overload + def ignoreSslErrors(self) -> None: ... + def sendBinaryMessage(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> int: ... + def sendTextMessage(self, message: typing.Optional[str]) -> int: ... + def closeReason(self) -> str: ... + def closeCode(self) -> 'QWebSocketProtocol.CloseCode': ... + def origin(self) -> str: ... + def requestUrl(self) -> QtCore.QUrl: ... + def resourceName(self) -> str: ... + def version(self) -> 'QWebSocketProtocol.Version': ... + def state(self) -> QtNetwork.QAbstractSocket.SocketState: ... + def setPauseMode(self, pauseMode: typing.Union[QtNetwork.QAbstractSocket.PauseModes, QtNetwork.QAbstractSocket.PauseMode]) -> None: ... + def resume(self) -> None: ... + def setReadBufferSize(self, size: int) -> None: ... + def readBufferSize(self) -> int: ... + def maskGenerator(self) -> typing.Optional[QMaskGenerator]: ... + def setMaskGenerator(self, maskGenerator: typing.Optional[QMaskGenerator]) -> None: ... + def setProxy(self, networkProxy: QtNetwork.QNetworkProxy) -> None: ... + def proxy(self) -> QtNetwork.QNetworkProxy: ... + def peerPort(self) -> int: ... + def peerName(self) -> str: ... + def peerAddress(self) -> QtNetwork.QHostAddress: ... + def pauseMode(self) -> QtNetwork.QAbstractSocket.PauseModes: ... + def localPort(self) -> int: ... + def localAddress(self) -> QtNetwork.QHostAddress: ... + def isValid(self) -> bool: ... + def flush(self) -> bool: ... + def errorString(self) -> str: ... + error: typing.ClassVar[QtCore.pyqtSignal] + def abort(self) -> None: ... + + +class QWebSocketCorsAuthenticator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, origin: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, other: 'QWebSocketCorsAuthenticator') -> None: ... + + def allowed(self) -> bool: ... + def setAllowed(self, allowed: bool) -> None: ... + def origin(self) -> str: ... + def swap(self, other: 'QWebSocketCorsAuthenticator') -> None: ... + + +class QWebSocketProtocol(PyQt5.sip.simplewrapper): + + class CloseCode(int): + CloseCodeNormal = ... # type: QWebSocketProtocol.CloseCode + CloseCodeGoingAway = ... # type: QWebSocketProtocol.CloseCode + CloseCodeProtocolError = ... # type: QWebSocketProtocol.CloseCode + CloseCodeDatatypeNotSupported = ... # type: QWebSocketProtocol.CloseCode + CloseCodeReserved1004 = ... # type: QWebSocketProtocol.CloseCode + CloseCodeMissingStatusCode = ... # type: QWebSocketProtocol.CloseCode + CloseCodeAbnormalDisconnection = ... # type: QWebSocketProtocol.CloseCode + CloseCodeWrongDatatype = ... # type: QWebSocketProtocol.CloseCode + CloseCodePolicyViolated = ... # type: QWebSocketProtocol.CloseCode + CloseCodeTooMuchData = ... # type: QWebSocketProtocol.CloseCode + CloseCodeMissingExtension = ... # type: QWebSocketProtocol.CloseCode + CloseCodeBadOperation = ... # type: QWebSocketProtocol.CloseCode + CloseCodeTlsHandshakeFailed = ... # type: QWebSocketProtocol.CloseCode + + class Version(int): + VersionUnknown = ... # type: QWebSocketProtocol.Version + Version0 = ... # type: QWebSocketProtocol.Version + Version4 = ... # type: QWebSocketProtocol.Version + Version5 = ... # type: QWebSocketProtocol.Version + Version6 = ... # type: QWebSocketProtocol.Version + Version7 = ... # type: QWebSocketProtocol.Version + Version8 = ... # type: QWebSocketProtocol.Version + Version13 = ... # type: QWebSocketProtocol.Version + VersionLatest = ... # type: QWebSocketProtocol.Version + + +class QWebSocketServer(QtCore.QObject): + + class SslMode(int): + SecureMode = ... # type: QWebSocketServer.SslMode + NonSecureMode = ... # type: QWebSocketServer.SslMode + + def __init__(self, serverName: typing.Optional[str], secureMode: 'QWebSocketServer.SslMode', parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def handshakeTimeoutMS(self) -> int: ... + def setHandshakeTimeout(self, msec: int) -> None: ... + def nativeDescriptor(self) -> PyQt5.sip.voidptr: ... + def setNativeDescriptor(self, descriptor: PyQt5.sip.voidptr) -> bool: ... + preSharedKeyAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + closed: typing.ClassVar[QtCore.pyqtSignal] + sslErrors: typing.ClassVar[QtCore.pyqtSignal] + peerVerifyError: typing.ClassVar[QtCore.pyqtSignal] + newConnection: typing.ClassVar[QtCore.pyqtSignal] + originAuthenticationRequired: typing.ClassVar[QtCore.pyqtSignal] + serverError: typing.ClassVar[QtCore.pyqtSignal] + acceptError: typing.ClassVar[QtCore.pyqtSignal] + def handleConnection(self, socket: typing.Optional[QtNetwork.QTcpSocket]) -> None: ... + def serverUrl(self) -> QtCore.QUrl: ... + def supportedVersions(self) -> typing.List[QWebSocketProtocol.Version]: ... + def sslConfiguration(self) -> QtNetwork.QSslConfiguration: ... + def setSslConfiguration(self, sslConfiguration: QtNetwork.QSslConfiguration) -> None: ... + def proxy(self) -> QtNetwork.QNetworkProxy: ... + def setProxy(self, networkProxy: QtNetwork.QNetworkProxy) -> None: ... + def serverName(self) -> str: ... + def setServerName(self, serverName: typing.Optional[str]) -> None: ... + def resumeAccepting(self) -> None: ... + def pauseAccepting(self) -> None: ... + def errorString(self) -> str: ... + def error(self) -> QWebSocketProtocol.CloseCode: ... + def nextPendingConnection(self) -> typing.Optional[QWebSocket]: ... + def hasPendingConnections(self) -> bool: ... + def socketDescriptor(self) -> int: ... + def setSocketDescriptor(self, socketDescriptor: int) -> bool: ... + def secureMode(self) -> 'QWebSocketServer.SslMode': ... + def serverAddress(self) -> QtNetwork.QHostAddress: ... + def serverPort(self) -> int: ... + def maxPendingConnections(self) -> int: ... + def setMaxPendingConnections(self, numConnections: int) -> None: ... + def isListening(self) -> bool: ... + def close(self) -> None: ... + def listen(self, address: typing.Union[QtNetwork.QHostAddress, QtNetwork.QHostAddress.SpecialAddress] = ..., port: int = ...) -> bool: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtWidgets.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtWidgets.abi3.so new file mode 100644 index 0000000..7a88dae Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtWidgets.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtWidgets.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtWidgets.pyi new file mode 100644 index 0000000..ec34996 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtWidgets.pyi @@ -0,0 +1,10118 @@ +# The PEP 484 type hints stub file for the QtWidgets module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtGui + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] + + +class QWidget(QtCore.QObject, QtGui.QPaintDevice): + + class RenderFlag(int): + DrawWindowBackground = ... # type: QWidget.RenderFlag + DrawChildren = ... # type: QWidget.RenderFlag + IgnoreMask = ... # type: QWidget.RenderFlag + + class RenderFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag']) -> 'QWidget.RenderFlags': ... + def __xor__(self, f: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag']) -> 'QWidget.RenderFlags': ... + def __ior__(self, f: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag']) -> 'QWidget.RenderFlags': ... + def __or__(self, f: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag']) -> 'QWidget.RenderFlags': ... + def __iand__(self, f: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag']) -> 'QWidget.RenderFlags': ... + def __and__(self, f: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag']) -> 'QWidget.RenderFlags': ... + def __invert__(self) -> 'QWidget.RenderFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional['QWidget'] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def screen(self) -> typing.Optional[QtGui.QScreen]: ... + def setWindowFlag(self, a0: QtCore.Qt.WindowType, on: bool = ...) -> None: ... + def hasTabletTracking(self) -> bool: ... + def setTabletTracking(self, enable: bool) -> None: ... + windowIconTextChanged: typing.ClassVar[QtCore.pyqtSignal] + windowIconChanged: typing.ClassVar[QtCore.pyqtSignal] + windowTitleChanged: typing.ClassVar[QtCore.pyqtSignal] + def toolTipDuration(self) -> int: ... + def setToolTipDuration(self, msec: int) -> None: ... + def initPainter(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + def sharedPainter(self) -> typing.Optional[QtGui.QPainter]: ... + def nativeEvent(self, eventType: typing.Union[QtCore.QByteArray, bytes, bytearray], message: typing.Optional[PyQt5.sip.voidptr]) -> typing.Tuple[bool, typing.Optional[int]]: ... + def windowHandle(self) -> typing.Optional[QtGui.QWindow]: ... + @staticmethod + def createWindowContainer(window: typing.Optional[QtGui.QWindow], parent: typing.Optional['QWidget'] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> 'QWidget': ... + def grab(self, rectangle: QtCore.QRect = ...) -> QtGui.QPixmap: ... + def hasHeightForWidth(self) -> bool: ... + def setInputMethodHints(self, hints: typing.Union[QtCore.Qt.InputMethodHints, QtCore.Qt.InputMethodHint]) -> None: ... + def inputMethodHints(self) -> QtCore.Qt.InputMethodHints: ... + def previousInFocusChain(self) -> typing.Optional['QWidget']: ... + def contentsMargins(self) -> QtCore.QMargins: ... + def ungrabGesture(self, type: QtCore.Qt.GestureType) -> None: ... + def grabGesture(self, type: QtCore.Qt.GestureType, flags: typing.Union[QtCore.Qt.GestureFlags, QtCore.Qt.GestureFlag] = ...) -> None: ... + def setGraphicsEffect(self, effect: typing.Optional['QGraphicsEffect']) -> None: ... + def graphicsEffect(self) -> typing.Optional['QGraphicsEffect']: ... + def graphicsProxyWidget(self) -> typing.Optional['QGraphicsProxyWidget']: ... + def windowFilePath(self) -> str: ... + def setWindowFilePath(self, filePath: typing.Optional[str]) -> None: ... + def nativeParentWidget(self) -> typing.Optional['QWidget']: ... + def effectiveWinId(self) -> PyQt5.sip.voidptr: ... + def unsetLocale(self) -> None: ... + def locale(self) -> QtCore.QLocale: ... + def setLocale(self, locale: QtCore.QLocale) -> None: ... + @typing.overload + def render(self, target: typing.Optional[QtGui.QPaintDevice], targetOffset: QtCore.QPoint = ..., sourceRegion: QtGui.QRegion = ..., flags: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag'] = ...) -> None: ... + @typing.overload + def render(self, painter: typing.Optional[QtGui.QPainter], targetOffset: QtCore.QPoint = ..., sourceRegion: QtGui.QRegion = ..., flags: typing.Union['QWidget.RenderFlags', 'QWidget.RenderFlag'] = ...) -> None: ... + def restoreGeometry(self, geometry: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def saveGeometry(self) -> QtCore.QByteArray: ... + def setShortcutAutoRepeat(self, id: int, enabled: bool = ...) -> None: ... + def styleSheet(self) -> str: ... + def setStyleSheet(self, styleSheet: typing.Optional[str]) -> None: ... + def setAutoFillBackground(self, enabled: bool) -> None: ... + def autoFillBackground(self) -> bool: ... + def setWindowModality(self, windowModality: QtCore.Qt.WindowModality) -> None: ... + def windowModality(self) -> QtCore.Qt.WindowModality: ... + def testAttribute(self, attribute: QtCore.Qt.WidgetAttribute) -> bool: ... + def parentWidget(self) -> typing.Optional['QWidget']: ... + def height(self) -> int: ... + def width(self) -> int: ... + def size(self) -> QtCore.QSize: ... + def geometry(self) -> QtCore.QRect: ... + def rect(self) -> QtCore.QRect: ... + def isHidden(self) -> bool: ... + def isVisible(self) -> bool: ... + def updatesEnabled(self) -> bool: ... + def underMouse(self) -> bool: ... + def hasMouseTracking(self) -> bool: ... + def setMouseTracking(self, enable: bool) -> None: ... + def fontInfo(self) -> QtGui.QFontInfo: ... + def fontMetrics(self) -> QtGui.QFontMetrics: ... + def font(self) -> QtGui.QFont: ... + def maximumHeight(self) -> int: ... + def maximumWidth(self) -> int: ... + def minimumHeight(self) -> int: ... + def minimumWidth(self) -> int: ... + def isModal(self) -> bool: ... + def isEnabled(self) -> bool: ... + def isWindow(self) -> bool: ... + def winId(self) -> PyQt5.sip.voidptr: ... + def windowFlags(self) -> QtCore.Qt.WindowFlags: ... + def windowType(self) -> QtCore.Qt.WindowType: ... + def focusPreviousChild(self) -> bool: ... + def focusNextChild(self) -> bool: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def destroy(self, destroyWindow: bool = ..., destroySubWindows: bool = ...) -> None: ... + def create(self, window: PyQt5.sip.voidptr = ..., initializeWindow: bool = ..., destroyOldWindow: bool = ...) -> None: ... + def updateMicroFocus(self) -> None: ... + def inputMethodQuery(self, a0: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def metric(self, a0: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragLeaveEvent(self, a0: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragMoveEvent(self, a0: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def actionEvent(self, a0: typing.Optional[QtGui.QActionEvent]) -> None: ... + def tabletEvent(self, a0: typing.Optional[QtGui.QTabletEvent]) -> None: ... + def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def moveEvent(self, a0: typing.Optional[QtGui.QMoveEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def leaveEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def enterEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + customContextMenuRequested: typing.ClassVar[QtCore.pyqtSignal] + def isAncestorOf(self, child: typing.Optional['QWidget']) -> bool: ... + def ensurePolished(self) -> None: ... + def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... + def setAttribute(self, attribute: QtCore.Qt.WidgetAttribute, on: bool = ...) -> None: ... + @typing.overload + def childAt(self, p: QtCore.QPoint) -> typing.Optional['QWidget']: ... + @typing.overload + def childAt(self, ax: int, ay: int) -> typing.Optional['QWidget']: ... + @staticmethod + def find(a0: PyQt5.sip.voidptr) -> typing.Optional['QWidget']: ... + def overrideWindowFlags(self, type: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType]) -> None: ... + def setWindowFlags(self, type: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType]) -> None: ... + def actions(self) -> typing.List['QAction']: ... + def removeAction(self, action: typing.Optional['QAction']) -> None: ... + def insertActions(self, before: typing.Optional['QAction'], actions: typing.Iterable['QAction']) -> None: ... + def insertAction(self, before: typing.Optional['QAction'], action: typing.Optional['QAction']) -> None: ... + def addActions(self, actions: typing.Iterable['QAction']) -> None: ... + def addAction(self, action: typing.Optional['QAction']) -> None: ... + def setAcceptDrops(self, on: bool) -> None: ... + def acceptDrops(self) -> bool: ... + def nextInFocusChain(self) -> typing.Optional['QWidget']: ... + def focusWidget(self) -> typing.Optional['QWidget']: ... + @typing.overload + def scroll(self, dx: int, dy: int) -> None: ... + @typing.overload + def scroll(self, dx: int, dy: int, a2: QtCore.QRect) -> None: ... + @typing.overload + def setParent(self, parent: typing.Optional['QWidget']) -> None: ... + @typing.overload + def setParent(self, parent: typing.Optional['QWidget'], f: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType]) -> None: ... + def updateGeometry(self) -> None: ... + def setLayout(self, a0: typing.Optional['QLayout']) -> None: ... + def layout(self) -> typing.Optional['QLayout']: ... + def contentsRect(self) -> QtCore.QRect: ... + def getContentsMargins(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContentsMargins(self, left: int, top: int, right: int, bottom: int) -> None: ... + @typing.overload + def setContentsMargins(self, margins: QtCore.QMargins) -> None: ... + def visibleRegion(self) -> QtGui.QRegion: ... + def heightForWidth(self, a0: int) -> int: ... + @typing.overload + def setSizePolicy(self, a0: 'QSizePolicy') -> None: ... + @typing.overload + def setSizePolicy(self, hor: 'QSizePolicy.Policy', ver: 'QSizePolicy.Policy') -> None: ... + def sizePolicy(self) -> 'QSizePolicy': ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def overrideWindowState(self, state: typing.Union[QtCore.Qt.WindowStates, QtCore.Qt.WindowState]) -> None: ... + def setWindowState(self, state: typing.Union[QtCore.Qt.WindowStates, QtCore.Qt.WindowState]) -> None: ... + def windowState(self) -> QtCore.Qt.WindowStates: ... + def isFullScreen(self) -> bool: ... + def isMaximized(self) -> bool: ... + def isMinimized(self) -> bool: ... + def isVisibleTo(self, a0: typing.Optional['QWidget']) -> bool: ... + def adjustSize(self) -> None: ... + @typing.overload + def setGeometry(self, a0: QtCore.QRect) -> None: ... + @typing.overload + def setGeometry(self, ax: int, ay: int, aw: int, ah: int) -> None: ... + @typing.overload + def resize(self, a0: QtCore.QSize) -> None: ... + @typing.overload + def resize(self, w: int, h: int) -> None: ... + @typing.overload + def move(self, a0: QtCore.QPoint) -> None: ... + @typing.overload + def move(self, ax: int, ay: int) -> None: ... + def stackUnder(self, a0: typing.Optional['QWidget']) -> None: ... + def lower(self) -> None: ... + def raise_(self) -> None: ... + def close(self) -> bool: ... + def showNormal(self) -> None: ... + def showFullScreen(self) -> None: ... + def showMaximized(self) -> None: ... + def showMinimized(self) -> None: ... + def hide(self) -> None: ... + def show(self) -> None: ... + def setHidden(self, hidden: bool) -> None: ... + def setVisible(self, visible: bool) -> None: ... + @typing.overload + def repaint(self) -> None: ... + @typing.overload + def repaint(self, x: int, y: int, w: int, h: int) -> None: ... + @typing.overload + def repaint(self, a0: QtCore.QRect) -> None: ... + @typing.overload + def repaint(self, a0: QtGui.QRegion) -> None: ... + @typing.overload + def update(self) -> None: ... + @typing.overload + def update(self, a0: QtCore.QRect) -> None: ... + @typing.overload + def update(self, a0: QtGui.QRegion) -> None: ... + @typing.overload + def update(self, ax: int, ay: int, aw: int, ah: int) -> None: ... + def setUpdatesEnabled(self, enable: bool) -> None: ... + @staticmethod + def keyboardGrabber() -> typing.Optional['QWidget']: ... + @staticmethod + def mouseGrabber() -> typing.Optional['QWidget']: ... + def setShortcutEnabled(self, id: int, enabled: bool = ...) -> None: ... + def releaseShortcut(self, id: int) -> None: ... + def grabShortcut(self, key: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], context: QtCore.Qt.ShortcutContext = ...) -> int: ... + def releaseKeyboard(self) -> None: ... + def grabKeyboard(self) -> None: ... + def releaseMouse(self) -> None: ... + @typing.overload + def grabMouse(self) -> None: ... + @typing.overload + def grabMouse(self, a0: typing.Union[QtGui.QCursor, QtCore.Qt.CursorShape]) -> None: ... + def setContextMenuPolicy(self, policy: QtCore.Qt.ContextMenuPolicy) -> None: ... + def contextMenuPolicy(self) -> QtCore.Qt.ContextMenuPolicy: ... + def focusProxy(self) -> typing.Optional['QWidget']: ... + def setFocusProxy(self, a0: typing.Optional['QWidget']) -> None: ... + @staticmethod + def setTabOrder(a0: typing.Optional['QWidget'], a1: typing.Optional['QWidget']) -> None: ... + def hasFocus(self) -> bool: ... + def setFocusPolicy(self, policy: QtCore.Qt.FocusPolicy) -> None: ... + def focusPolicy(self) -> QtCore.Qt.FocusPolicy: ... + def clearFocus(self) -> None: ... + def activateWindow(self) -> None: ... + def isActiveWindow(self) -> bool: ... + @typing.overload + def setFocus(self) -> None: ... + @typing.overload + def setFocus(self, reason: QtCore.Qt.FocusReason) -> None: ... + def isLeftToRight(self) -> bool: ... + def isRightToLeft(self) -> bool: ... + def unsetLayoutDirection(self) -> None: ... + def layoutDirection(self) -> QtCore.Qt.LayoutDirection: ... + def setLayoutDirection(self, direction: QtCore.Qt.LayoutDirection) -> None: ... + def setAccessibleDescription(self, description: typing.Optional[str]) -> None: ... + def accessibleDescription(self) -> str: ... + def setAccessibleName(self, name: typing.Optional[str]) -> None: ... + def accessibleName(self) -> str: ... + def whatsThis(self) -> str: ... + def setWhatsThis(self, a0: typing.Optional[str]) -> None: ... + def statusTip(self) -> str: ... + def setStatusTip(self, a0: typing.Optional[str]) -> None: ... + def toolTip(self) -> str: ... + def setToolTip(self, a0: typing.Optional[str]) -> None: ... + def isWindowModified(self) -> bool: ... + def windowOpacity(self) -> float: ... + def setWindowOpacity(self, level: float) -> None: ... + def windowRole(self) -> str: ... + def setWindowRole(self, a0: typing.Optional[str]) -> None: ... + def windowIconText(self) -> str: ... + def setWindowIconText(self, a0: typing.Optional[str]) -> None: ... + def windowIcon(self) -> QtGui.QIcon: ... + def setWindowIcon(self, icon: QtGui.QIcon) -> None: ... + def windowTitle(self) -> str: ... + def setWindowTitle(self, a0: typing.Optional[str]) -> None: ... + def clearMask(self) -> None: ... + def mask(self) -> QtGui.QRegion: ... + @typing.overload + def setMask(self, a0: QtGui.QBitmap) -> None: ... + @typing.overload + def setMask(self, a0: QtGui.QRegion) -> None: ... + def unsetCursor(self) -> None: ... + def setCursor(self, a0: typing.Union[QtGui.QCursor, QtCore.Qt.CursorShape]) -> None: ... + def cursor(self) -> QtGui.QCursor: ... + def setFont(self, a0: QtGui.QFont) -> None: ... + def foregroundRole(self) -> QtGui.QPalette.ColorRole: ... + def setForegroundRole(self, a0: QtGui.QPalette.ColorRole) -> None: ... + def backgroundRole(self) -> QtGui.QPalette.ColorRole: ... + def setBackgroundRole(self, a0: QtGui.QPalette.ColorRole) -> None: ... + def setPalette(self, a0: QtGui.QPalette) -> None: ... + def palette(self) -> QtGui.QPalette: ... + def window(self) -> typing.Optional['QWidget']: ... + def mapFrom(self, a0: typing.Optional['QWidget'], a1: QtCore.QPoint) -> QtCore.QPoint: ... + def mapTo(self, a0: typing.Optional['QWidget'], a1: QtCore.QPoint) -> QtCore.QPoint: ... + def mapFromParent(self, a0: QtCore.QPoint) -> QtCore.QPoint: ... + def mapToParent(self, a0: QtCore.QPoint) -> QtCore.QPoint: ... + def mapFromGlobal(self, a0: QtCore.QPoint) -> QtCore.QPoint: ... + def mapToGlobal(self, a0: QtCore.QPoint) -> QtCore.QPoint: ... + def setFixedHeight(self, h: int) -> None: ... + def setFixedWidth(self, w: int) -> None: ... + @typing.overload + def setFixedSize(self, a0: QtCore.QSize) -> None: ... + @typing.overload + def setFixedSize(self, w: int, h: int) -> None: ... + @typing.overload + def setBaseSize(self, basew: int, baseh: int) -> None: ... + @typing.overload + def setBaseSize(self, s: QtCore.QSize) -> None: ... + def baseSize(self) -> QtCore.QSize: ... + @typing.overload + def setSizeIncrement(self, w: int, h: int) -> None: ... + @typing.overload + def setSizeIncrement(self, s: QtCore.QSize) -> None: ... + def sizeIncrement(self) -> QtCore.QSize: ... + def setMaximumHeight(self, maxh: int) -> None: ... + def setMaximumWidth(self, maxw: int) -> None: ... + def setMinimumHeight(self, minh: int) -> None: ... + def setMinimumWidth(self, minw: int) -> None: ... + @typing.overload + def setMaximumSize(self, maxw: int, maxh: int) -> None: ... + @typing.overload + def setMaximumSize(self, s: QtCore.QSize) -> None: ... + @typing.overload + def setMinimumSize(self, minw: int, minh: int) -> None: ... + @typing.overload + def setMinimumSize(self, s: QtCore.QSize) -> None: ... + def maximumSize(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def childrenRegion(self) -> QtGui.QRegion: ... + def childrenRect(self) -> QtCore.QRect: ... + def frameSize(self) -> QtCore.QSize: ... + def pos(self) -> QtCore.QPoint: ... + def y(self) -> int: ... + def x(self) -> int: ... + def normalGeometry(self) -> QtCore.QRect: ... + def frameGeometry(self) -> QtCore.QRect: ... + def setWindowModified(self, a0: bool) -> None: ... + def setDisabled(self, a0: bool) -> None: ... + def setEnabled(self, a0: bool) -> None: ... + def isEnabledTo(self, a0: typing.Optional['QWidget']) -> bool: ... + def setStyle(self, a0: typing.Optional['QStyle']) -> None: ... + def style(self) -> typing.Optional['QStyle']: ... + def devType(self) -> int: ... + + +class QAbstractButton(QWidget): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def nextCheckState(self) -> None: ... + def checkStateSet(self) -> None: ... + def hitButton(self, pos: QtCore.QPoint) -> bool: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + toggled: typing.ClassVar[QtCore.pyqtSignal] + clicked: typing.ClassVar[QtCore.pyqtSignal] + released: typing.ClassVar[QtCore.pyqtSignal] + pressed: typing.ClassVar[QtCore.pyqtSignal] + def setChecked(self, a0: bool) -> None: ... + def toggle(self) -> None: ... + def click(self) -> None: ... + def animateClick(self, msecs: int = ...) -> None: ... + def setIconSize(self, size: QtCore.QSize) -> None: ... + def group(self) -> typing.Optional['QButtonGroup']: ... + def autoExclusive(self) -> bool: ... + def setAutoExclusive(self, a0: bool) -> None: ... + def autoRepeat(self) -> bool: ... + def setAutoRepeat(self, a0: bool) -> None: ... + def isDown(self) -> bool: ... + def setDown(self, a0: bool) -> None: ... + def isChecked(self) -> bool: ... + def isCheckable(self) -> bool: ... + def setCheckable(self, a0: bool) -> None: ... + def shortcut(self) -> QtGui.QKeySequence: ... + def setShortcut(self, key: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... + def iconSize(self) -> QtCore.QSize: ... + def icon(self) -> QtGui.QIcon: ... + def setIcon(self, icon: QtGui.QIcon) -> None: ... + def text(self) -> str: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def autoRepeatInterval(self) -> int: ... + def setAutoRepeatInterval(self, a0: int) -> None: ... + def autoRepeatDelay(self) -> int: ... + def setAutoRepeatDelay(self, a0: int) -> None: ... + + +class QAbstractItemDelegate(QtCore.QObject): + + class EndEditHint(int): + NoHint = ... # type: QAbstractItemDelegate.EndEditHint + EditNextItem = ... # type: QAbstractItemDelegate.EndEditHint + EditPreviousItem = ... # type: QAbstractItemDelegate.EndEditHint + SubmitModelCache = ... # type: QAbstractItemDelegate.EndEditHint + RevertModelCache = ... # type: QAbstractItemDelegate.EndEditHint + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + sizeHintChanged: typing.ClassVar[QtCore.pyqtSignal] + closeEditor: typing.ClassVar[QtCore.pyqtSignal] + commitData: typing.ClassVar[QtCore.pyqtSignal] + def helpEvent(self, event: typing.Optional[QtGui.QHelpEvent], view: typing.Optional['QAbstractItemView'], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> bool: ... + def editorEvent(self, event: typing.Optional[QtCore.QEvent], model: typing.Optional[QtCore.QAbstractItemModel], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> bool: ... + def destroyEditor(self, editor: typing.Optional[QWidget], index: QtCore.QModelIndex) -> None: ... + def updateEditorGeometry(self, editor: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... + def setModelData(self, editor: typing.Optional[QWidget], model: typing.Optional[QtCore.QAbstractItemModel], index: QtCore.QModelIndex) -> None: ... + def setEditorData(self, editor: typing.Optional[QWidget], index: QtCore.QModelIndex) -> None: ... + def createEditor(self, parent: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> typing.Optional[QWidget]: ... + def sizeHint(self, option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> QtCore.QSize: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... + + +class QFrame(QWidget): + + class StyleMask(int): + Shadow_Mask = ... # type: QFrame.StyleMask + Shape_Mask = ... # type: QFrame.StyleMask + + class Shape(int): + NoFrame = ... # type: QFrame.Shape + Box = ... # type: QFrame.Shape + Panel = ... # type: QFrame.Shape + WinPanel = ... # type: QFrame.Shape + HLine = ... # type: QFrame.Shape + VLine = ... # type: QFrame.Shape + StyledPanel = ... # type: QFrame.Shape + + class Shadow(int): + Plain = ... # type: QFrame.Shadow + Raised = ... # type: QFrame.Shadow + Sunken = ... # type: QFrame.Shadow + + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def initStyleOption(self, option: typing.Optional['QStyleOptionFrame']) -> None: ... + def drawFrame(self, a0: typing.Optional[QtGui.QPainter]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def setFrameRect(self, a0: QtCore.QRect) -> None: ... + def frameRect(self) -> QtCore.QRect: ... + def setMidLineWidth(self, a0: int) -> None: ... + def midLineWidth(self) -> int: ... + def setLineWidth(self, a0: int) -> None: ... + def lineWidth(self) -> int: ... + def setFrameShadow(self, a0: 'QFrame.Shadow') -> None: ... + def frameShadow(self) -> 'QFrame.Shadow': ... + def setFrameShape(self, a0: 'QFrame.Shape') -> None: ... + def frameShape(self) -> 'QFrame.Shape': ... + def sizeHint(self) -> QtCore.QSize: ... + def frameWidth(self) -> int: ... + def setFrameStyle(self, a0: int) -> None: ... + def frameStyle(self) -> int: ... + + +class QAbstractScrollArea(QFrame): + + class SizeAdjustPolicy(int): + AdjustIgnored = ... # type: QAbstractScrollArea.SizeAdjustPolicy + AdjustToContentsOnFirstShow = ... # type: QAbstractScrollArea.SizeAdjustPolicy + AdjustToContents = ... # type: QAbstractScrollArea.SizeAdjustPolicy + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def setSizeAdjustPolicy(self, policy: 'QAbstractScrollArea.SizeAdjustPolicy') -> None: ... + def sizeAdjustPolicy(self) -> 'QAbstractScrollArea.SizeAdjustPolicy': ... + def setupViewport(self, viewport: typing.Optional[QWidget]) -> None: ... + def setViewport(self, widget: typing.Optional[QWidget]) -> None: ... + def scrollBarWidgets(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> typing.List[QWidget]: ... + def addScrollBarWidget(self, widget: typing.Optional[QWidget], alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def setCornerWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def cornerWidget(self) -> typing.Optional[QWidget]: ... + def setHorizontalScrollBar(self, scrollbar: typing.Optional['QScrollBar']) -> None: ... + def setVerticalScrollBar(self, scrollbar: typing.Optional['QScrollBar']) -> None: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragLeaveEvent(self, a0: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragMoveEvent(self, a0: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def viewportEvent(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def viewportSizeHint(self) -> QtCore.QSize: ... + def viewportMargins(self) -> QtCore.QMargins: ... + @typing.overload + def setViewportMargins(self, left: int, top: int, right: int, bottom: int) -> None: ... + @typing.overload + def setViewportMargins(self, margins: QtCore.QMargins) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def maximumViewportSize(self) -> QtCore.QSize: ... + def viewport(self) -> typing.Optional[QWidget]: ... + def horizontalScrollBar(self) -> typing.Optional['QScrollBar']: ... + def setHorizontalScrollBarPolicy(self, a0: QtCore.Qt.ScrollBarPolicy) -> None: ... + def horizontalScrollBarPolicy(self) -> QtCore.Qt.ScrollBarPolicy: ... + def verticalScrollBar(self) -> typing.Optional['QScrollBar']: ... + def setVerticalScrollBarPolicy(self, a0: QtCore.Qt.ScrollBarPolicy) -> None: ... + def verticalScrollBarPolicy(self) -> QtCore.Qt.ScrollBarPolicy: ... + + +class QAbstractItemView(QAbstractScrollArea): + + class DropIndicatorPosition(int): + OnItem = ... # type: QAbstractItemView.DropIndicatorPosition + AboveItem = ... # type: QAbstractItemView.DropIndicatorPosition + BelowItem = ... # type: QAbstractItemView.DropIndicatorPosition + OnViewport = ... # type: QAbstractItemView.DropIndicatorPosition + + class State(int): + NoState = ... # type: QAbstractItemView.State + DraggingState = ... # type: QAbstractItemView.State + DragSelectingState = ... # type: QAbstractItemView.State + EditingState = ... # type: QAbstractItemView.State + ExpandingState = ... # type: QAbstractItemView.State + CollapsingState = ... # type: QAbstractItemView.State + AnimatingState = ... # type: QAbstractItemView.State + + class CursorAction(int): + MoveUp = ... # type: QAbstractItemView.CursorAction + MoveDown = ... # type: QAbstractItemView.CursorAction + MoveLeft = ... # type: QAbstractItemView.CursorAction + MoveRight = ... # type: QAbstractItemView.CursorAction + MoveHome = ... # type: QAbstractItemView.CursorAction + MoveEnd = ... # type: QAbstractItemView.CursorAction + MovePageUp = ... # type: QAbstractItemView.CursorAction + MovePageDown = ... # type: QAbstractItemView.CursorAction + MoveNext = ... # type: QAbstractItemView.CursorAction + MovePrevious = ... # type: QAbstractItemView.CursorAction + + class SelectionMode(int): + NoSelection = ... # type: QAbstractItemView.SelectionMode + SingleSelection = ... # type: QAbstractItemView.SelectionMode + MultiSelection = ... # type: QAbstractItemView.SelectionMode + ExtendedSelection = ... # type: QAbstractItemView.SelectionMode + ContiguousSelection = ... # type: QAbstractItemView.SelectionMode + + class SelectionBehavior(int): + SelectItems = ... # type: QAbstractItemView.SelectionBehavior + SelectRows = ... # type: QAbstractItemView.SelectionBehavior + SelectColumns = ... # type: QAbstractItemView.SelectionBehavior + + class ScrollMode(int): + ScrollPerItem = ... # type: QAbstractItemView.ScrollMode + ScrollPerPixel = ... # type: QAbstractItemView.ScrollMode + + class ScrollHint(int): + EnsureVisible = ... # type: QAbstractItemView.ScrollHint + PositionAtTop = ... # type: QAbstractItemView.ScrollHint + PositionAtBottom = ... # type: QAbstractItemView.ScrollHint + PositionAtCenter = ... # type: QAbstractItemView.ScrollHint + + class EditTrigger(int): + NoEditTriggers = ... # type: QAbstractItemView.EditTrigger + CurrentChanged = ... # type: QAbstractItemView.EditTrigger + DoubleClicked = ... # type: QAbstractItemView.EditTrigger + SelectedClicked = ... # type: QAbstractItemView.EditTrigger + EditKeyPressed = ... # type: QAbstractItemView.EditTrigger + AnyKeyPressed = ... # type: QAbstractItemView.EditTrigger + AllEditTriggers = ... # type: QAbstractItemView.EditTrigger + + class DragDropMode(int): + NoDragDrop = ... # type: QAbstractItemView.DragDropMode + DragOnly = ... # type: QAbstractItemView.DragDropMode + DropOnly = ... # type: QAbstractItemView.DragDropMode + DragDrop = ... # type: QAbstractItemView.DragDropMode + InternalMove = ... # type: QAbstractItemView.DragDropMode + + class EditTriggers(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QAbstractItemView.EditTriggers', 'QAbstractItemView.EditTrigger']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QAbstractItemView.EditTriggers', 'QAbstractItemView.EditTrigger']) -> 'QAbstractItemView.EditTriggers': ... + def __xor__(self, f: typing.Union['QAbstractItemView.EditTriggers', 'QAbstractItemView.EditTrigger']) -> 'QAbstractItemView.EditTriggers': ... + def __ior__(self, f: typing.Union['QAbstractItemView.EditTriggers', 'QAbstractItemView.EditTrigger']) -> 'QAbstractItemView.EditTriggers': ... + def __or__(self, f: typing.Union['QAbstractItemView.EditTriggers', 'QAbstractItemView.EditTrigger']) -> 'QAbstractItemView.EditTriggers': ... + def __iand__(self, f: typing.Union['QAbstractItemView.EditTriggers', 'QAbstractItemView.EditTrigger']) -> 'QAbstractItemView.EditTriggers': ... + def __and__(self, f: typing.Union['QAbstractItemView.EditTriggers', 'QAbstractItemView.EditTrigger']) -> 'QAbstractItemView.EditTriggers': ... + def __invert__(self) -> 'QAbstractItemView.EditTriggers': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def isPersistentEditorOpen(self, index: QtCore.QModelIndex) -> bool: ... + def resetHorizontalScrollMode(self) -> None: ... + def resetVerticalScrollMode(self) -> None: ... + def defaultDropAction(self) -> QtCore.Qt.DropAction: ... + def setDefaultDropAction(self, dropAction: QtCore.Qt.DropAction) -> None: ... + def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def viewportSizeHint(self) -> QtCore.QSize: ... + def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def autoScrollMargin(self) -> int: ... + def setAutoScrollMargin(self, margin: int) -> None: ... + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def itemDelegateForColumn(self, column: int) -> typing.Optional[QAbstractItemDelegate]: ... + def setItemDelegateForColumn(self, column: int, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... + def itemDelegateForRow(self, row: int) -> typing.Optional[QAbstractItemDelegate]: ... + def setItemDelegateForRow(self, row: int, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... + def dragDropMode(self) -> 'QAbstractItemView.DragDropMode': ... + def setDragDropMode(self, behavior: 'QAbstractItemView.DragDropMode') -> None: ... + def dragDropOverwriteMode(self) -> bool: ... + def setDragDropOverwriteMode(self, overwrite: bool) -> None: ... + def horizontalScrollMode(self) -> 'QAbstractItemView.ScrollMode': ... + def setHorizontalScrollMode(self, mode: 'QAbstractItemView.ScrollMode') -> None: ... + def verticalScrollMode(self) -> 'QAbstractItemView.ScrollMode': ... + def setVerticalScrollMode(self, mode: 'QAbstractItemView.ScrollMode') -> None: ... + def dropIndicatorPosition(self) -> 'QAbstractItemView.DropIndicatorPosition': ... + def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def dropEvent(self, e: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragEnterEvent(self, e: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def viewportEvent(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def dirtyRegionOffset(self) -> QtCore.QPoint: ... + def setDirtyRegion(self, region: QtGui.QRegion) -> None: ... + def scrollDirtyRegion(self, dx: int, dy: int) -> None: ... + def executeDelayedItemsLayout(self) -> None: ... + def scheduleDelayedItemsLayout(self) -> None: ... + def setState(self, state: 'QAbstractItemView.State') -> None: ... + def state(self) -> 'QAbstractItemView.State': ... + def viewOptions(self) -> 'QStyleOptionViewItem': ... + def startDrag(self, supportedActions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction]) -> None: ... + def selectionCommand(self, index: QtCore.QModelIndex, event: typing.Optional[QtCore.QEvent] = ...) -> QtCore.QItemSelectionModel.SelectionFlags: ... + def selectedIndexes(self) -> typing.List[QtCore.QModelIndex]: ... + def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... + def setSelection(self, rect: QtCore.QRect, command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... + def verticalOffset(self) -> int: ... + def horizontalOffset(self) -> int: ... + def moveCursor(self, cursorAction: 'QAbstractItemView.CursorAction', modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> QtCore.QModelIndex: ... + iconSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + viewportEntered: typing.ClassVar[QtCore.pyqtSignal] + entered: typing.ClassVar[QtCore.pyqtSignal] + activated: typing.ClassVar[QtCore.pyqtSignal] + doubleClicked: typing.ClassVar[QtCore.pyqtSignal] + clicked: typing.ClassVar[QtCore.pyqtSignal] + pressed: typing.ClassVar[QtCore.pyqtSignal] + def editorDestroyed(self, editor: typing.Optional[QtCore.QObject]) -> None: ... + def commitData(self, editor: typing.Optional[QWidget]) -> None: ... + def closeEditor(self, editor: typing.Optional[QWidget], hint: QAbstractItemDelegate.EndEditHint) -> None: ... + def horizontalScrollbarValueChanged(self, value: int) -> None: ... + def verticalScrollbarValueChanged(self, value: int) -> None: ... + def horizontalScrollbarAction(self, action: int) -> None: ... + def verticalScrollbarAction(self, action: int) -> None: ... + def updateGeometries(self) -> None: ... + def updateEditorGeometries(self) -> None: ... + def updateEditorData(self) -> None: ... + def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... + def selectionChanged(self, selected: QtCore.QItemSelection, deselected: QtCore.QItemSelection) -> None: ... + def rowsAboutToBeRemoved(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... + def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... + def dataChanged(self, topLeft: QtCore.QModelIndex, bottomRight: QtCore.QModelIndex, roles: typing.Iterable[int] = ...) -> None: ... + @typing.overload + def update(self) -> None: ... + @typing.overload + def update(self, index: QtCore.QModelIndex) -> None: ... + def scrollToBottom(self) -> None: ... + def scrollToTop(self) -> None: ... + def setCurrentIndex(self, index: QtCore.QModelIndex) -> None: ... + def clearSelection(self) -> None: ... + @typing.overload + def edit(self, index: QtCore.QModelIndex) -> None: ... + @typing.overload + def edit(self, index: QtCore.QModelIndex, trigger: 'QAbstractItemView.EditTrigger', event: typing.Optional[QtCore.QEvent]) -> bool: ... + def selectAll(self) -> None: ... + def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... + def reset(self) -> None: ... + def indexWidget(self, index: QtCore.QModelIndex) -> typing.Optional[QWidget]: ... + def setIndexWidget(self, index: QtCore.QModelIndex, widget: typing.Optional[QWidget]) -> None: ... + def closePersistentEditor(self, index: QtCore.QModelIndex) -> None: ... + def openPersistentEditor(self, index: QtCore.QModelIndex) -> None: ... + def sizeHintForColumn(self, column: int) -> int: ... + def sizeHintForRow(self, row: int) -> int: ... + def sizeHintForIndex(self, index: QtCore.QModelIndex) -> QtCore.QSize: ... + def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... + def scrollTo(self, index: QtCore.QModelIndex, hint: 'QAbstractItemView.ScrollHint' = ...) -> None: ... + def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... + def keyboardSearch(self, search: typing.Optional[str]) -> None: ... + def textElideMode(self) -> QtCore.Qt.TextElideMode: ... + def setTextElideMode(self, mode: QtCore.Qt.TextElideMode) -> None: ... + def iconSize(self) -> QtCore.QSize: ... + def setIconSize(self, size: QtCore.QSize) -> None: ... + def alternatingRowColors(self) -> bool: ... + def setAlternatingRowColors(self, enable: bool) -> None: ... + def dragEnabled(self) -> bool: ... + def setDragEnabled(self, enable: bool) -> None: ... + def showDropIndicator(self) -> bool: ... + def setDropIndicatorShown(self, enable: bool) -> None: ... + def tabKeyNavigation(self) -> bool: ... + def setTabKeyNavigation(self, enable: bool) -> None: ... + def hasAutoScroll(self) -> bool: ... + def setAutoScroll(self, enable: bool) -> None: ... + def editTriggers(self) -> 'QAbstractItemView.EditTriggers': ... + def setEditTriggers(self, triggers: typing.Union['QAbstractItemView.EditTriggers', 'QAbstractItemView.EditTrigger']) -> None: ... + def rootIndex(self) -> QtCore.QModelIndex: ... + def currentIndex(self) -> QtCore.QModelIndex: ... + def selectionBehavior(self) -> 'QAbstractItemView.SelectionBehavior': ... + def setSelectionBehavior(self, behavior: 'QAbstractItemView.SelectionBehavior') -> None: ... + def selectionMode(self) -> 'QAbstractItemView.SelectionMode': ... + def setSelectionMode(self, mode: 'QAbstractItemView.SelectionMode') -> None: ... + @typing.overload + def itemDelegate(self) -> typing.Optional[QAbstractItemDelegate]: ... + @typing.overload + def itemDelegate(self, index: QtCore.QModelIndex) -> typing.Optional[QAbstractItemDelegate]: ... + def setItemDelegate(self, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... + def selectionModel(self) -> typing.Optional[QtCore.QItemSelectionModel]: ... + def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... + def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... + def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... + + +class QAbstractSlider(QWidget): + + class SliderChange(int): + SliderRangeChange = ... # type: QAbstractSlider.SliderChange + SliderOrientationChange = ... # type: QAbstractSlider.SliderChange + SliderStepsChange = ... # type: QAbstractSlider.SliderChange + SliderValueChange = ... # type: QAbstractSlider.SliderChange + + class SliderAction(int): + SliderNoAction = ... # type: QAbstractSlider.SliderAction + SliderSingleStepAdd = ... # type: QAbstractSlider.SliderAction + SliderSingleStepSub = ... # type: QAbstractSlider.SliderAction + SliderPageStepAdd = ... # type: QAbstractSlider.SliderAction + SliderPageStepSub = ... # type: QAbstractSlider.SliderAction + SliderToMinimum = ... # type: QAbstractSlider.SliderAction + SliderToMaximum = ... # type: QAbstractSlider.SliderAction + SliderMove = ... # type: QAbstractSlider.SliderAction + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def keyPressEvent(self, ev: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def sliderChange(self, change: 'QAbstractSlider.SliderChange') -> None: ... + def repeatAction(self) -> 'QAbstractSlider.SliderAction': ... + def setRepeatAction(self, action: 'QAbstractSlider.SliderAction', thresholdTime: int = ..., repeatTime: int = ...) -> None: ... + actionTriggered: typing.ClassVar[QtCore.pyqtSignal] + rangeChanged: typing.ClassVar[QtCore.pyqtSignal] + sliderReleased: typing.ClassVar[QtCore.pyqtSignal] + sliderMoved: typing.ClassVar[QtCore.pyqtSignal] + sliderPressed: typing.ClassVar[QtCore.pyqtSignal] + valueChanged: typing.ClassVar[QtCore.pyqtSignal] + def setOrientation(self, a0: QtCore.Qt.Orientation) -> None: ... + def setValue(self, a0: int) -> None: ... + def triggerAction(self, action: 'QAbstractSlider.SliderAction') -> None: ... + def value(self) -> int: ... + def invertedControls(self) -> bool: ... + def setInvertedControls(self, a0: bool) -> None: ... + def invertedAppearance(self) -> bool: ... + def setInvertedAppearance(self, a0: bool) -> None: ... + def sliderPosition(self) -> int: ... + def setSliderPosition(self, a0: int) -> None: ... + def isSliderDown(self) -> bool: ... + def setSliderDown(self, a0: bool) -> None: ... + def hasTracking(self) -> bool: ... + def setTracking(self, enable: bool) -> None: ... + def pageStep(self) -> int: ... + def setPageStep(self, a0: int) -> None: ... + def singleStep(self) -> int: ... + def setSingleStep(self, a0: int) -> None: ... + def setRange(self, min: int, max: int) -> None: ... + def maximum(self) -> int: ... + def setMaximum(self, a0: int) -> None: ... + def minimum(self) -> int: ... + def setMinimum(self, a0: int) -> None: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + + +class QAbstractSpinBox(QWidget): + + class StepType(int): + DefaultStepType = ... # type: QAbstractSpinBox.StepType + AdaptiveDecimalStepType = ... # type: QAbstractSpinBox.StepType + + class CorrectionMode(int): + CorrectToPreviousValue = ... # type: QAbstractSpinBox.CorrectionMode + CorrectToNearestValue = ... # type: QAbstractSpinBox.CorrectionMode + + class ButtonSymbols(int): + UpDownArrows = ... # type: QAbstractSpinBox.ButtonSymbols + PlusMinus = ... # type: QAbstractSpinBox.ButtonSymbols + NoButtons = ... # type: QAbstractSpinBox.ButtonSymbols + + class StepEnabledFlag(int): + StepNone = ... # type: QAbstractSpinBox.StepEnabledFlag + StepUpEnabled = ... # type: QAbstractSpinBox.StepEnabledFlag + StepDownEnabled = ... # type: QAbstractSpinBox.StepEnabledFlag + + class StepEnabled(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QAbstractSpinBox.StepEnabled', 'QAbstractSpinBox.StepEnabledFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QAbstractSpinBox.StepEnabled', 'QAbstractSpinBox.StepEnabledFlag']) -> 'QAbstractSpinBox.StepEnabled': ... + def __xor__(self, f: typing.Union['QAbstractSpinBox.StepEnabled', 'QAbstractSpinBox.StepEnabledFlag']) -> 'QAbstractSpinBox.StepEnabled': ... + def __ior__(self, f: typing.Union['QAbstractSpinBox.StepEnabled', 'QAbstractSpinBox.StepEnabledFlag']) -> 'QAbstractSpinBox.StepEnabled': ... + def __or__(self, f: typing.Union['QAbstractSpinBox.StepEnabled', 'QAbstractSpinBox.StepEnabledFlag']) -> 'QAbstractSpinBox.StepEnabled': ... + def __iand__(self, f: typing.Union['QAbstractSpinBox.StepEnabled', 'QAbstractSpinBox.StepEnabledFlag']) -> 'QAbstractSpinBox.StepEnabled': ... + def __and__(self, f: typing.Union['QAbstractSpinBox.StepEnabled', 'QAbstractSpinBox.StepEnabledFlag']) -> 'QAbstractSpinBox.StepEnabled': ... + def __invert__(self) -> 'QAbstractSpinBox.StepEnabled': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def isGroupSeparatorShown(self) -> bool: ... + def setGroupSeparatorShown(self, shown: bool) -> None: ... + def inputMethodQuery(self, a0: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def keyboardTracking(self) -> bool: ... + def setKeyboardTracking(self, kt: bool) -> None: ... + def isAccelerated(self) -> bool: ... + def setAccelerated(self, on: bool) -> None: ... + def hasAcceptableInput(self) -> bool: ... + def correctionMode(self) -> 'QAbstractSpinBox.CorrectionMode': ... + def setCorrectionMode(self, cm: 'QAbstractSpinBox.CorrectionMode') -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionSpinBox']) -> None: ... + def stepEnabled(self) -> 'QAbstractSpinBox.StepEnabled': ... + def setLineEdit(self, e: typing.Optional['QLineEdit']) -> None: ... + def lineEdit(self) -> typing.Optional['QLineEdit']: ... + def showEvent(self, e: typing.Optional[QtGui.QShowEvent]) -> None: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def hideEvent(self, e: typing.Optional[QtGui.QHideEvent]) -> None: ... + def closeEvent(self, e: typing.Optional[QtGui.QCloseEvent]) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + def contextMenuEvent(self, e: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... + editingFinished: typing.ClassVar[QtCore.pyqtSignal] + def clear(self) -> None: ... + def selectAll(self) -> None: ... + def stepDown(self) -> None: ... + def stepUp(self) -> None: ... + def stepBy(self, steps: int) -> None: ... + def fixup(self, input: typing.Optional[str]) -> str: ... + def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QtGui.QValidator.State, str, int]: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def interpretText(self) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def hasFrame(self) -> bool: ... + def setFrame(self, a0: bool) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def setAlignment(self, flag: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def isReadOnly(self) -> bool: ... + def setReadOnly(self, r: bool) -> None: ... + def setWrapping(self, w: bool) -> None: ... + def wrapping(self) -> bool: ... + def setSpecialValueText(self, s: typing.Optional[str]) -> None: ... + def specialValueText(self) -> str: ... + def text(self) -> str: ... + def setButtonSymbols(self, bs: 'QAbstractSpinBox.ButtonSymbols') -> None: ... + def buttonSymbols(self) -> 'QAbstractSpinBox.ButtonSymbols': ... + + +class QAction(QtCore.QObject): + + class Priority(int): + LowPriority = ... # type: QAction.Priority + NormalPriority = ... # type: QAction.Priority + HighPriority = ... # type: QAction.Priority + + class MenuRole(int): + NoRole = ... # type: QAction.MenuRole + TextHeuristicRole = ... # type: QAction.MenuRole + ApplicationSpecificRole = ... # type: QAction.MenuRole + AboutQtRole = ... # type: QAction.MenuRole + AboutRole = ... # type: QAction.MenuRole + PreferencesRole = ... # type: QAction.MenuRole + QuitRole = ... # type: QAction.MenuRole + + class ActionEvent(int): + Trigger = ... # type: QAction.ActionEvent + Hover = ... # type: QAction.ActionEvent + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, icon: QtGui.QIcon, text: typing.Optional[str], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def isShortcutVisibleInContextMenu(self) -> bool: ... + def setShortcutVisibleInContextMenu(self, show: bool) -> None: ... + def priority(self) -> 'QAction.Priority': ... + def setPriority(self, priority: 'QAction.Priority') -> None: ... + def isIconVisibleInMenu(self) -> bool: ... + def setIconVisibleInMenu(self, visible: bool) -> None: ... + def associatedGraphicsWidgets(self) -> typing.List['QGraphicsWidget']: ... + def associatedWidgets(self) -> typing.List[QWidget]: ... + def menuRole(self) -> 'QAction.MenuRole': ... + def setMenuRole(self, menuRole: 'QAction.MenuRole') -> None: ... + def autoRepeat(self) -> bool: ... + def setAutoRepeat(self, a0: bool) -> None: ... + def shortcuts(self) -> typing.List[QtGui.QKeySequence]: ... + @typing.overload + def setShortcuts(self, shortcuts: typing.Iterable[typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]]) -> None: ... + @typing.overload + def setShortcuts(self, a0: QtGui.QKeySequence.StandardKey) -> None: ... + toggled: typing.ClassVar[QtCore.pyqtSignal] + hovered: typing.ClassVar[QtCore.pyqtSignal] + triggered: typing.ClassVar[QtCore.pyqtSignal] + changed: typing.ClassVar[QtCore.pyqtSignal] + def setVisible(self, a0: bool) -> None: ... + def setDisabled(self, b: bool) -> None: ... + def setEnabled(self, a0: bool) -> None: ... + def toggle(self) -> None: ... + def setChecked(self, a0: bool) -> None: ... + def hover(self) -> None: ... + def trigger(self) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def parentWidget(self) -> typing.Optional[QWidget]: ... + def showStatusText(self, widget: typing.Optional[QWidget] = ...) -> bool: ... + def activate(self, event: 'QAction.ActionEvent') -> None: ... + def isVisible(self) -> bool: ... + def isEnabled(self) -> bool: ... + def isChecked(self) -> bool: ... + def setData(self, var: typing.Any) -> None: ... + def data(self) -> typing.Any: ... + def isCheckable(self) -> bool: ... + def setCheckable(self, a0: bool) -> None: ... + def font(self) -> QtGui.QFont: ... + def setFont(self, font: QtGui.QFont) -> None: ... + def shortcutContext(self) -> QtCore.Qt.ShortcutContext: ... + def setShortcutContext(self, context: QtCore.Qt.ShortcutContext) -> None: ... + def shortcut(self) -> QtGui.QKeySequence: ... + def setShortcut(self, shortcut: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... + def isSeparator(self) -> bool: ... + def setSeparator(self, b: bool) -> None: ... + def setMenu(self, menu: typing.Optional['QMenu']) -> None: ... + def menu(self) -> typing.Optional['QMenu']: ... + def whatsThis(self) -> str: ... + def setWhatsThis(self, what: typing.Optional[str]) -> None: ... + def statusTip(self) -> str: ... + def setStatusTip(self, statusTip: typing.Optional[str]) -> None: ... + def toolTip(self) -> str: ... + def setToolTip(self, tip: typing.Optional[str]) -> None: ... + def iconText(self) -> str: ... + def setIconText(self, text: typing.Optional[str]) -> None: ... + def text(self) -> str: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def icon(self) -> QtGui.QIcon: ... + def setIcon(self, icon: QtGui.QIcon) -> None: ... + def actionGroup(self) -> typing.Optional['QActionGroup']: ... + def setActionGroup(self, group: typing.Optional['QActionGroup']) -> None: ... + + +class QActionGroup(QtCore.QObject): + + class ExclusionPolicy(int): + None_ = ... # type: QActionGroup.ExclusionPolicy + Exclusive = ... # type: QActionGroup.ExclusionPolicy + ExclusiveOptional = ... # type: QActionGroup.ExclusionPolicy + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + def setExclusionPolicy(self, policy: 'QActionGroup.ExclusionPolicy') -> None: ... + def exclusionPolicy(self) -> 'QActionGroup.ExclusionPolicy': ... + hovered: typing.ClassVar[QtCore.pyqtSignal] + triggered: typing.ClassVar[QtCore.pyqtSignal] + def setExclusive(self, a0: bool) -> None: ... + def setVisible(self, a0: bool) -> None: ... + def setDisabled(self, b: bool) -> None: ... + def setEnabled(self, a0: bool) -> None: ... + def isVisible(self) -> bool: ... + def isEnabled(self) -> bool: ... + def isExclusive(self) -> bool: ... + def checkedAction(self) -> typing.Optional[QAction]: ... + def actions(self) -> typing.List[QAction]: ... + def removeAction(self, a: typing.Optional[QAction]) -> None: ... + @typing.overload + def addAction(self, a: typing.Optional[QAction]) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + + +class QApplication(QtGui.QGuiApplication): + + class ColorSpec(int): + NormalColor = ... # type: QApplication.ColorSpec + CustomColor = ... # type: QApplication.ColorSpec + ManyColor = ... # type: QApplication.ColorSpec + + def __init__(self, argv: typing.List[str]) -> None: ... + + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def setStyleSheet(self, sheet: typing.Optional[str]) -> None: ... + def setAutoSipEnabled(self, enabled: bool) -> None: ... + @staticmethod + def closeAllWindows() -> None: ... + @staticmethod + def aboutQt() -> None: ... + focusChanged: typing.ClassVar[QtCore.pyqtSignal] + def styleSheet(self) -> str: ... + def autoSipEnabled(self) -> bool: ... + def notify(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + @staticmethod + def exec() -> int: ... + @staticmethod + def exec_() -> int: ... + @staticmethod + def setEffectEnabled(a0: QtCore.Qt.UIEffect, enabled: bool = ...) -> None: ... + @staticmethod + def isEffectEnabled(a0: QtCore.Qt.UIEffect) -> bool: ... + @staticmethod + def startDragDistance() -> int: ... + @staticmethod + def setStartDragDistance(l: int) -> None: ... + @staticmethod + def startDragTime() -> int: ... + @staticmethod + def setStartDragTime(ms: int) -> None: ... + @staticmethod + def globalStrut() -> QtCore.QSize: ... + @staticmethod + def setGlobalStrut(a0: QtCore.QSize) -> None: ... + @staticmethod + def wheelScrollLines() -> int: ... + @staticmethod + def setWheelScrollLines(a0: int) -> None: ... + @staticmethod + def keyboardInputInterval() -> int: ... + @staticmethod + def setKeyboardInputInterval(a0: int) -> None: ... + @staticmethod + def doubleClickInterval() -> int: ... + @staticmethod + def setDoubleClickInterval(a0: int) -> None: ... + @staticmethod + def cursorFlashTime() -> int: ... + @staticmethod + def setCursorFlashTime(a0: int) -> None: ... + @staticmethod + def alert(widget: typing.Optional[QWidget], msecs: int = ...) -> None: ... + @staticmethod + def beep() -> None: ... + @typing.overload + @staticmethod + def topLevelAt(p: QtCore.QPoint) -> typing.Optional[QWidget]: ... + @typing.overload + @staticmethod + def topLevelAt(x: int, y: int) -> typing.Optional[QWidget]: ... + @typing.overload + @staticmethod + def widgetAt(p: QtCore.QPoint) -> typing.Optional[QWidget]: ... + @typing.overload + @staticmethod + def widgetAt(x: int, y: int) -> typing.Optional[QWidget]: ... + @staticmethod + def setActiveWindow(act: typing.Optional[QWidget]) -> None: ... + @staticmethod + def activeWindow() -> typing.Optional[QWidget]: ... + @staticmethod + def focusWidget() -> typing.Optional[QWidget]: ... + @staticmethod + def activeModalWidget() -> typing.Optional[QWidget]: ... + @staticmethod + def activePopupWidget() -> typing.Optional[QWidget]: ... + @staticmethod + def desktop() -> typing.Optional['QDesktopWidget']: ... + @staticmethod + def topLevelWidgets() -> typing.List[QWidget]: ... + @staticmethod + def allWidgets() -> typing.List[QWidget]: ... + @staticmethod + def windowIcon() -> QtGui.QIcon: ... + @staticmethod + def setWindowIcon(icon: QtGui.QIcon) -> None: ... + @staticmethod + def fontMetrics() -> QtGui.QFontMetrics: ... + @staticmethod + def setFont(a0: QtGui.QFont, className: typing.Optional[str] = ...) -> None: ... + @typing.overload + @staticmethod + def font() -> QtGui.QFont: ... + @typing.overload + @staticmethod + def font(a0: typing.Optional[QWidget]) -> QtGui.QFont: ... + @typing.overload + @staticmethod + def font(className: typing.Optional[str]) -> QtGui.QFont: ... + @staticmethod + def setPalette(a0: QtGui.QPalette, className: typing.Optional[str] = ...) -> None: ... + @typing.overload + @staticmethod + def palette() -> QtGui.QPalette: ... + @typing.overload + @staticmethod + def palette(a0: typing.Optional[QWidget]) -> QtGui.QPalette: ... + @typing.overload + @staticmethod + def palette(className: typing.Optional[str]) -> QtGui.QPalette: ... + @staticmethod + def setColorSpec(a0: int) -> None: ... + @staticmethod + def colorSpec() -> int: ... + @typing.overload + @staticmethod + def setStyle(a0: typing.Optional['QStyle']) -> None: ... + @typing.overload + @staticmethod + def setStyle(a0: typing.Optional[str]) -> typing.Optional['QStyle']: ... + @staticmethod + def style() -> typing.Optional['QStyle']: ... + + +class QLayoutItem(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QLayoutItem') -> None: ... + + def controlTypes(self) -> 'QSizePolicy.ControlTypes': ... + def setAlignment(self, a: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def spacerItem(self) -> typing.Optional['QSpacerItem']: ... + def layout(self) -> typing.Optional['QLayout']: ... + def widget(self) -> typing.Optional[QWidget]: ... + def invalidate(self) -> None: ... + def minimumHeightForWidth(self, a0: int) -> int: ... + def heightForWidth(self, a0: int) -> int: ... + def hasHeightForWidth(self) -> bool: ... + def isEmpty(self) -> bool: ... + def geometry(self) -> QtCore.QRect: ... + def setGeometry(self, a0: QtCore.QRect) -> None: ... + def expandingDirections(self) -> QtCore.Qt.Orientations: ... + def maximumSize(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QLayout(QtCore.QObject, QLayoutItem): + + class SizeConstraint(int): + SetDefaultConstraint = ... # type: QLayout.SizeConstraint + SetNoConstraint = ... # type: QLayout.SizeConstraint + SetMinimumSize = ... # type: QLayout.SizeConstraint + SetFixedSize = ... # type: QLayout.SizeConstraint + SetMaximumSize = ... # type: QLayout.SizeConstraint + SetMinAndMaxSize = ... # type: QLayout.SizeConstraint + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget]) -> None: ... + @typing.overload + def __init__(self) -> None: ... + + def replaceWidget(self, from_: typing.Optional[QWidget], to: typing.Optional[QWidget], options: typing.Union[QtCore.Qt.FindChildOptions, QtCore.Qt.FindChildOption] = ...) -> typing.Optional[QLayoutItem]: ... + def controlTypes(self) -> 'QSizePolicy.ControlTypes': ... + def contentsMargins(self) -> QtCore.QMargins: ... + def contentsRect(self) -> QtCore.QRect: ... + def getContentsMargins(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContentsMargins(self, left: int, top: int, right: int, bottom: int) -> None: ... + @typing.overload + def setContentsMargins(self, margins: QtCore.QMargins) -> None: ... + def alignmentRect(self, a0: QtCore.QRect) -> QtCore.QRect: ... + def addChildWidget(self, w: typing.Optional[QWidget]) -> None: ... + def addChildLayout(self, l: typing.Optional['QLayout']) -> None: ... + def childEvent(self, e: typing.Optional[QtCore.QChildEvent]) -> None: ... + def widgetEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + @staticmethod + def closestAcceptableSize(w: typing.Optional[QWidget], s: QtCore.QSize) -> QtCore.QSize: ... + def isEnabled(self) -> bool: ... + def setEnabled(self, a0: bool) -> None: ... + def layout(self) -> typing.Optional['QLayout']: ... + def totalSizeHint(self) -> QtCore.QSize: ... + def totalMaximumSize(self) -> QtCore.QSize: ... + def totalMinimumSize(self) -> QtCore.QSize: ... + def totalHeightForWidth(self, w: int) -> int: ... + def isEmpty(self) -> bool: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + @typing.overload + def indexOf(self, a0: typing.Optional[QWidget]) -> int: ... + @typing.overload + def indexOf(self, a0: typing.Optional[QLayoutItem]) -> int: ... + def takeAt(self, index: int) -> typing.Optional[QLayoutItem]: ... + def itemAt(self, index: int) -> typing.Optional[QLayoutItem]: ... + def setGeometry(self, a0: QtCore.QRect) -> None: ... + def maximumSize(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def expandingDirections(self) -> QtCore.Qt.Orientations: ... + def removeItem(self, a0: typing.Optional[QLayoutItem]) -> None: ... + def removeWidget(self, w: typing.Optional[QWidget]) -> None: ... + def addItem(self, a0: typing.Optional[QLayoutItem]) -> None: ... + def addWidget(self, w: typing.Optional[QWidget]) -> None: ... + def update(self) -> None: ... + def activate(self) -> bool: ... + def geometry(self) -> QtCore.QRect: ... + def invalidate(self) -> None: ... + def parentWidget(self) -> typing.Optional[QWidget]: ... + def menuBar(self) -> typing.Optional[QWidget]: ... + def setMenuBar(self, w: typing.Optional[QWidget]) -> None: ... + def sizeConstraint(self) -> 'QLayout.SizeConstraint': ... + def setSizeConstraint(self, a0: 'QLayout.SizeConstraint') -> None: ... + @typing.overload + def setAlignment(self, w: typing.Optional[QWidget], alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> bool: ... + @typing.overload + def setAlignment(self, l: typing.Optional['QLayout'], alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> bool: ... + @typing.overload + def setAlignment(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def setSpacing(self, a0: int) -> None: ... + def spacing(self) -> int: ... + + +class QBoxLayout(QLayout): + + class Direction(int): + LeftToRight = ... # type: QBoxLayout.Direction + RightToLeft = ... # type: QBoxLayout.Direction + TopToBottom = ... # type: QBoxLayout.Direction + BottomToTop = ... # type: QBoxLayout.Direction + Down = ... # type: QBoxLayout.Direction + Up = ... # type: QBoxLayout.Direction + + def __init__(self, direction: 'QBoxLayout.Direction', parent: typing.Optional[QWidget] = ...) -> None: ... + + def insertItem(self, index: int, a1: typing.Optional[QLayoutItem]) -> None: ... + def stretch(self, index: int) -> int: ... + def setStretch(self, index: int, stretch: int) -> None: ... + def insertSpacerItem(self, index: int, spacerItem: typing.Optional['QSpacerItem']) -> None: ... + def addSpacerItem(self, spacerItem: typing.Optional['QSpacerItem']) -> None: ... + def setSpacing(self, spacing: int) -> None: ... + def spacing(self) -> int: ... + def setGeometry(self, a0: QtCore.QRect) -> None: ... + def count(self) -> int: ... + def takeAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... + def itemAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... + def invalidate(self) -> None: ... + def expandingDirections(self) -> QtCore.Qt.Orientations: ... + def minimumHeightForWidth(self, a0: int) -> int: ... + def heightForWidth(self, a0: int) -> int: ... + def hasHeightForWidth(self) -> bool: ... + def maximumSize(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + @typing.overload + def setStretchFactor(self, w: typing.Optional[QWidget], stretch: int) -> bool: ... + @typing.overload + def setStretchFactor(self, l: typing.Optional[QLayout], stretch: int) -> bool: ... + def insertLayout(self, index: int, layout: typing.Optional[QLayout], stretch: int = ...) -> None: ... + def insertWidget(self, index: int, widget: typing.Optional[QWidget], stretch: int = ..., alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + def insertStretch(self, index: int, stretch: int = ...) -> None: ... + def insertSpacing(self, index: int, size: int) -> None: ... + def addItem(self, a0: typing.Optional[QLayoutItem]) -> None: ... + def addStrut(self, a0: int) -> None: ... + def addLayout(self, layout: typing.Optional[QLayout], stretch: int = ...) -> None: ... + def addWidget(self, a0: typing.Optional[QWidget], stretch: int = ..., alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + def addStretch(self, stretch: int = ...) -> None: ... + def addSpacing(self, size: int) -> None: ... + def setDirection(self, a0: 'QBoxLayout.Direction') -> None: ... + def direction(self) -> 'QBoxLayout.Direction': ... + + +class QHBoxLayout(QBoxLayout): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QWidget]) -> None: ... + + +class QVBoxLayout(QBoxLayout): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QWidget]) -> None: ... + + +class QButtonGroup(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + idToggled: typing.ClassVar[QtCore.pyqtSignal] + idReleased: typing.ClassVar[QtCore.pyqtSignal] + idPressed: typing.ClassVar[QtCore.pyqtSignal] + idClicked: typing.ClassVar[QtCore.pyqtSignal] + buttonToggled: typing.ClassVar[QtCore.pyqtSignal] + buttonReleased: typing.ClassVar[QtCore.pyqtSignal] + buttonPressed: typing.ClassVar[QtCore.pyqtSignal] + buttonClicked: typing.ClassVar[QtCore.pyqtSignal] + def checkedId(self) -> int: ... + def id(self, button: typing.Optional[QAbstractButton]) -> int: ... + def setId(self, button: typing.Optional[QAbstractButton], id: int) -> None: ... + def checkedButton(self) -> typing.Optional[QAbstractButton]: ... + def button(self, id: int) -> typing.Optional[QAbstractButton]: ... + def buttons(self) -> typing.List[QAbstractButton]: ... + def removeButton(self, a0: typing.Optional[QAbstractButton]) -> None: ... + def addButton(self, a0: typing.Optional[QAbstractButton], id: int = ...) -> None: ... + def exclusive(self) -> bool: ... + def setExclusive(self, a0: bool) -> None: ... + + +class QCalendarWidget(QWidget): + + class SelectionMode(int): + NoSelection = ... # type: QCalendarWidget.SelectionMode + SingleSelection = ... # type: QCalendarWidget.SelectionMode + + class VerticalHeaderFormat(int): + NoVerticalHeader = ... # type: QCalendarWidget.VerticalHeaderFormat + ISOWeekNumbers = ... # type: QCalendarWidget.VerticalHeaderFormat + + class HorizontalHeaderFormat(int): + NoHorizontalHeader = ... # type: QCalendarWidget.HorizontalHeaderFormat + SingleLetterDayNames = ... # type: QCalendarWidget.HorizontalHeaderFormat + ShortDayNames = ... # type: QCalendarWidget.HorizontalHeaderFormat + LongDayNames = ... # type: QCalendarWidget.HorizontalHeaderFormat + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def setCalendar(self, calendar: QtCore.QCalendar) -> None: ... + def calendar(self) -> QtCore.QCalendar: ... + def setNavigationBarVisible(self, visible: bool) -> None: ... + def setDateEditAcceptDelay(self, delay: int) -> None: ... + def dateEditAcceptDelay(self) -> int: ... + def setDateEditEnabled(self, enable: bool) -> None: ... + def isDateEditEnabled(self) -> bool: ... + def isNavigationBarVisible(self) -> bool: ... + selectionChanged: typing.ClassVar[QtCore.pyqtSignal] + currentPageChanged: typing.ClassVar[QtCore.pyqtSignal] + clicked: typing.ClassVar[QtCore.pyqtSignal] + activated: typing.ClassVar[QtCore.pyqtSignal] + def showToday(self) -> None: ... + def showSelectedDate(self) -> None: ... + def showPreviousYear(self) -> None: ... + def showPreviousMonth(self) -> None: ... + def showNextYear(self) -> None: ... + def showNextMonth(self) -> None: ... + def setSelectedDate(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def setDateRange(self, min: typing.Union[QtCore.QDate, datetime.date], max: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def setCurrentPage(self, year: int, month: int) -> None: ... + def paintCell(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def eventFilter(self, watched: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def updateCells(self) -> None: ... + def updateCell(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def setDateTextFormat(self, date: typing.Union[QtCore.QDate, datetime.date], color: QtGui.QTextCharFormat) -> None: ... + @typing.overload + def dateTextFormat(self) -> typing.Dict[QtCore.QDate, QtGui.QTextCharFormat]: ... + @typing.overload + def dateTextFormat(self, date: typing.Union[QtCore.QDate, datetime.date]) -> QtGui.QTextCharFormat: ... + def setWeekdayTextFormat(self, dayOfWeek: QtCore.Qt.DayOfWeek, format: QtGui.QTextCharFormat) -> None: ... + def weekdayTextFormat(self, dayOfWeek: QtCore.Qt.DayOfWeek) -> QtGui.QTextCharFormat: ... + def setHeaderTextFormat(self, format: QtGui.QTextCharFormat) -> None: ... + def headerTextFormat(self) -> QtGui.QTextCharFormat: ... + def setVerticalHeaderFormat(self, format: 'QCalendarWidget.VerticalHeaderFormat') -> None: ... + def verticalHeaderFormat(self) -> 'QCalendarWidget.VerticalHeaderFormat': ... + def setHorizontalHeaderFormat(self, format: 'QCalendarWidget.HorizontalHeaderFormat') -> None: ... + def horizontalHeaderFormat(self) -> 'QCalendarWidget.HorizontalHeaderFormat': ... + def setSelectionMode(self, mode: 'QCalendarWidget.SelectionMode') -> None: ... + def selectionMode(self) -> 'QCalendarWidget.SelectionMode': ... + def setGridVisible(self, show: bool) -> None: ... + def isGridVisible(self) -> bool: ... + def setFirstDayOfWeek(self, dayOfWeek: QtCore.Qt.DayOfWeek) -> None: ... + def firstDayOfWeek(self) -> QtCore.Qt.DayOfWeek: ... + def setMaximumDate(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def maximumDate(self) -> QtCore.QDate: ... + def setMinimumDate(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def minimumDate(self) -> QtCore.QDate: ... + def monthShown(self) -> int: ... + def yearShown(self) -> int: ... + def selectedDate(self) -> QtCore.QDate: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QCheckBox(QAbstractButton): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + def initStyleOption(self, option: typing.Optional['QStyleOptionButton']) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def nextCheckState(self) -> None: ... + def checkStateSet(self) -> None: ... + def hitButton(self, pos: QtCore.QPoint) -> bool: ... + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def minimumSizeHint(self) -> QtCore.QSize: ... + def setCheckState(self, state: QtCore.Qt.CheckState) -> None: ... + def checkState(self) -> QtCore.Qt.CheckState: ... + def isTristate(self) -> bool: ... + def setTristate(self, on: bool = ...) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QDialog(QWidget): + + class DialogCode(int): + Rejected = ... # type: QDialog.DialogCode + Accepted = ... # type: QDialog.DialogCode + + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + rejected: typing.ClassVar[QtCore.pyqtSignal] + finished: typing.ClassVar[QtCore.pyqtSignal] + accepted: typing.ClassVar[QtCore.pyqtSignal] + def open(self) -> None: ... + def reject(self) -> None: ... + def accept(self) -> None: ... + def done(self, a0: int) -> None: ... + def exec(self) -> int: ... + def exec_(self) -> int: ... + def setResult(self, r: int) -> None: ... + def setModal(self, modal: bool) -> None: ... + def isSizeGripEnabled(self) -> bool: ... + def setSizeGripEnabled(self, a0: bool) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def setVisible(self, visible: bool) -> None: ... + def result(self) -> int: ... + + +class QColorDialog(QDialog): + + class ColorDialogOption(int): + ShowAlphaChannel = ... # type: QColorDialog.ColorDialogOption + NoButtons = ... # type: QColorDialog.ColorDialogOption + DontUseNativeDialog = ... # type: QColorDialog.ColorDialogOption + + class ColorDialogOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption']) -> 'QColorDialog.ColorDialogOptions': ... + def __xor__(self, f: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption']) -> 'QColorDialog.ColorDialogOptions': ... + def __ior__(self, f: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption']) -> 'QColorDialog.ColorDialogOptions': ... + def __or__(self, f: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption']) -> 'QColorDialog.ColorDialogOptions': ... + def __iand__(self, f: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption']) -> 'QColorDialog.ColorDialogOptions': ... + def __and__(self, f: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption']) -> 'QColorDialog.ColorDialogOptions': ... + def __invert__(self) -> 'QColorDialog.ColorDialogOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, initial: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], parent: typing.Optional[QWidget] = ...) -> None: ... + + def setVisible(self, visible: bool) -> None: ... + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def options(self) -> 'QColorDialog.ColorDialogOptions': ... + def setOptions(self, options: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption']) -> None: ... + def testOption(self, option: 'QColorDialog.ColorDialogOption') -> bool: ... + def setOption(self, option: 'QColorDialog.ColorDialogOption', on: bool = ...) -> None: ... + def selectedColor(self) -> QtGui.QColor: ... + def currentColor(self) -> QtGui.QColor: ... + def setCurrentColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def done(self, result: int) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + currentColorChanged: typing.ClassVar[QtCore.pyqtSignal] + colorSelected: typing.ClassVar[QtCore.pyqtSignal] + @staticmethod + def setStandardColor(index: int, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + @staticmethod + def standardColor(index: int) -> QtGui.QColor: ... + @staticmethod + def setCustomColor(index: int, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + @staticmethod + def customColor(index: int) -> QtGui.QColor: ... + @staticmethod + def customCount() -> int: ... + @staticmethod + def getColor(initial: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor] = ..., parent: typing.Optional[QWidget] = ..., title: typing.Optional[str] = ..., options: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption'] = ...) -> QtGui.QColor: ... + + +class QColumnView(QAbstractItemView): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... + def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def verticalOffset(self) -> int: ... + def horizontalOffset(self) -> int: ... + def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... + def setSelection(self, rect: QtCore.QRect, command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def moveCursor(self, cursorAction: QAbstractItemView.CursorAction, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> QtCore.QModelIndex: ... + def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... + def initializeColumn(self, column: typing.Optional[QAbstractItemView]) -> None: ... + def createColumn(self, rootIndex: QtCore.QModelIndex) -> typing.Optional[QAbstractItemView]: ... + updatePreviewWidget: typing.ClassVar[QtCore.pyqtSignal] + def selectAll(self) -> None: ... + def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... + def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... + def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... + def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... + def sizeHint(self) -> QtCore.QSize: ... + def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint = ...) -> None: ... + def indexAt(self, point: QtCore.QPoint) -> QtCore.QModelIndex: ... + def setResizeGripsVisible(self, visible: bool) -> None: ... + def setPreviewWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def setColumnWidths(self, list: typing.Iterable[int]) -> None: ... + def resizeGripsVisible(self) -> bool: ... + def previewWidget(self) -> typing.Optional[QWidget]: ... + def columnWidths(self) -> typing.List[int]: ... + + +class QComboBox(QWidget): + + class SizeAdjustPolicy(int): + AdjustToContents = ... # type: QComboBox.SizeAdjustPolicy + AdjustToContentsOnFirstShow = ... # type: QComboBox.SizeAdjustPolicy + AdjustToMinimumContentsLength = ... # type: QComboBox.SizeAdjustPolicy + AdjustToMinimumContentsLengthWithIcon = ... # type: QComboBox.SizeAdjustPolicy + + class InsertPolicy(int): + NoInsert = ... # type: QComboBox.InsertPolicy + InsertAtTop = ... # type: QComboBox.InsertPolicy + InsertAtCurrent = ... # type: QComboBox.InsertPolicy + InsertAtBottom = ... # type: QComboBox.InsertPolicy + InsertAfterCurrent = ... # type: QComboBox.InsertPolicy + InsertBeforeCurrent = ... # type: QComboBox.InsertPolicy + InsertAlphabetically = ... # type: QComboBox.InsertPolicy + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def placeholderText(self) -> str: ... + def setPlaceholderText(self, placeholderText: typing.Optional[str]) -> None: ... + textHighlighted: typing.ClassVar[QtCore.pyqtSignal] + textActivated: typing.ClassVar[QtCore.pyqtSignal] + def currentData(self, role: int = ...) -> typing.Any: ... + @typing.overload + def inputMethodQuery(self, a0: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + @typing.overload + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... + def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def contextMenuEvent(self, e: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def hideEvent(self, e: typing.Optional[QtGui.QHideEvent]) -> None: ... + def showEvent(self, e: typing.Optional[QtGui.QShowEvent]) -> None: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionComboBox']) -> None: ... + highlighted: typing.ClassVar[QtCore.pyqtSignal] + currentTextChanged: typing.ClassVar[QtCore.pyqtSignal] + currentIndexChanged: typing.ClassVar[QtCore.pyqtSignal] + activated: typing.ClassVar[QtCore.pyqtSignal] + editTextChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCurrentText(self, text: typing.Optional[str]) -> None: ... + def setEditText(self, text: typing.Optional[str]) -> None: ... + def clearEditText(self) -> None: ... + def clear(self) -> None: ... + def insertSeparator(self, index: int) -> None: ... + def completer(self) -> typing.Optional['QCompleter']: ... + def setCompleter(self, c: typing.Optional['QCompleter']) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def hidePopup(self) -> None: ... + def showPopup(self) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def setView(self, itemView: typing.Optional[QAbstractItemView]) -> None: ... + def view(self) -> typing.Optional[QAbstractItemView]: ... + def setItemData(self, index: int, value: typing.Any, role: int = ...) -> None: ... + def setItemIcon(self, index: int, icon: QtGui.QIcon) -> None: ... + def setItemText(self, index: int, text: typing.Optional[str]) -> None: ... + def removeItem(self, index: int) -> None: ... + def insertItems(self, index: int, texts: typing.Iterable[typing.Optional[str]]) -> None: ... + @typing.overload + def insertItem(self, index: int, text: typing.Optional[str], userData: typing.Any = ...) -> None: ... + @typing.overload + def insertItem(self, index: int, icon: QtGui.QIcon, text: typing.Optional[str], userData: typing.Any = ...) -> None: ... + @typing.overload + def addItem(self, text: typing.Optional[str], userData: typing.Any = ...) -> None: ... + @typing.overload + def addItem(self, icon: QtGui.QIcon, text: typing.Optional[str], userData: typing.Any = ...) -> None: ... + def addItems(self, texts: typing.Iterable[typing.Optional[str]]) -> None: ... + def itemData(self, index: int, role: int = ...) -> typing.Any: ... + def itemIcon(self, index: int) -> QtGui.QIcon: ... + def itemText(self, index: int) -> str: ... + def currentText(self) -> str: ... + def setCurrentIndex(self, index: int) -> None: ... + def currentIndex(self) -> int: ... + def setModelColumn(self, visibleColumn: int) -> None: ... + def modelColumn(self) -> int: ... + def setRootModelIndex(self, index: QtCore.QModelIndex) -> None: ... + def rootModelIndex(self) -> QtCore.QModelIndex: ... + def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... + def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... + def setItemDelegate(self, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... + def itemDelegate(self) -> typing.Optional[QAbstractItemDelegate]: ... + def validator(self) -> typing.Optional[QtGui.QValidator]: ... + def setValidator(self, v: typing.Optional[QtGui.QValidator]) -> None: ... + def lineEdit(self) -> typing.Optional['QLineEdit']: ... + def setLineEdit(self, edit: typing.Optional['QLineEdit']) -> None: ... + def setEditable(self, editable: bool) -> None: ... + def isEditable(self) -> bool: ... + def setIconSize(self, size: QtCore.QSize) -> None: ... + def iconSize(self) -> QtCore.QSize: ... + def setMinimumContentsLength(self, characters: int) -> None: ... + def minimumContentsLength(self) -> int: ... + def setSizeAdjustPolicy(self, policy: 'QComboBox.SizeAdjustPolicy') -> None: ... + def sizeAdjustPolicy(self) -> 'QComboBox.SizeAdjustPolicy': ... + def setInsertPolicy(self, policy: 'QComboBox.InsertPolicy') -> None: ... + def insertPolicy(self) -> 'QComboBox.InsertPolicy': ... + def findData(self, data: typing.Any, role: int = ..., flags: typing.Union[QtCore.Qt.MatchFlags, QtCore.Qt.MatchFlag] = ...) -> int: ... + def findText(self, text: typing.Optional[str], flags: typing.Union[QtCore.Qt.MatchFlags, QtCore.Qt.MatchFlag] = ...) -> int: ... + def hasFrame(self) -> bool: ... + def setFrame(self, a0: bool) -> None: ... + def setDuplicatesEnabled(self, enable: bool) -> None: ... + def duplicatesEnabled(self) -> bool: ... + def maxCount(self) -> int: ... + def setMaxCount(self, max: int) -> None: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def setMaxVisibleItems(self, maxItems: int) -> None: ... + def maxVisibleItems(self) -> int: ... + + +class QPushButton(QAbstractButton): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, icon: QtGui.QIcon, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + def hitButton(self, pos: QtCore.QPoint) -> bool: ... + def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionButton']) -> None: ... + def showMenu(self) -> None: ... + def isFlat(self) -> bool: ... + def setFlat(self, a0: bool) -> None: ... + def menu(self) -> typing.Optional['QMenu']: ... + def setMenu(self, menu: typing.Optional['QMenu']) -> None: ... + def setDefault(self, a0: bool) -> None: ... + def isDefault(self) -> bool: ... + def setAutoDefault(self, a0: bool) -> None: ... + def autoDefault(self) -> bool: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QCommandLinkButton(QPushButton): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], description: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def heightForWidth(self, a0: int) -> int: ... + def sizeHint(self) -> QtCore.QSize: ... + def setDescription(self, description: typing.Optional[str]) -> None: ... + def description(self) -> str: ... + + +class QStyle(QtCore.QObject): + + class RequestSoftwareInputPanel(int): + RSIP_OnMouseClickAndAlreadyFocused = ... # type: QStyle.RequestSoftwareInputPanel + RSIP_OnMouseClick = ... # type: QStyle.RequestSoftwareInputPanel + + class StandardPixmap(int): + SP_TitleBarMenuButton = ... # type: QStyle.StandardPixmap + SP_TitleBarMinButton = ... # type: QStyle.StandardPixmap + SP_TitleBarMaxButton = ... # type: QStyle.StandardPixmap + SP_TitleBarCloseButton = ... # type: QStyle.StandardPixmap + SP_TitleBarNormalButton = ... # type: QStyle.StandardPixmap + SP_TitleBarShadeButton = ... # type: QStyle.StandardPixmap + SP_TitleBarUnshadeButton = ... # type: QStyle.StandardPixmap + SP_TitleBarContextHelpButton = ... # type: QStyle.StandardPixmap + SP_DockWidgetCloseButton = ... # type: QStyle.StandardPixmap + SP_MessageBoxInformation = ... # type: QStyle.StandardPixmap + SP_MessageBoxWarning = ... # type: QStyle.StandardPixmap + SP_MessageBoxCritical = ... # type: QStyle.StandardPixmap + SP_MessageBoxQuestion = ... # type: QStyle.StandardPixmap + SP_DesktopIcon = ... # type: QStyle.StandardPixmap + SP_TrashIcon = ... # type: QStyle.StandardPixmap + SP_ComputerIcon = ... # type: QStyle.StandardPixmap + SP_DriveFDIcon = ... # type: QStyle.StandardPixmap + SP_DriveHDIcon = ... # type: QStyle.StandardPixmap + SP_DriveCDIcon = ... # type: QStyle.StandardPixmap + SP_DriveDVDIcon = ... # type: QStyle.StandardPixmap + SP_DriveNetIcon = ... # type: QStyle.StandardPixmap + SP_DirOpenIcon = ... # type: QStyle.StandardPixmap + SP_DirClosedIcon = ... # type: QStyle.StandardPixmap + SP_DirLinkIcon = ... # type: QStyle.StandardPixmap + SP_FileIcon = ... # type: QStyle.StandardPixmap + SP_FileLinkIcon = ... # type: QStyle.StandardPixmap + SP_ToolBarHorizontalExtensionButton = ... # type: QStyle.StandardPixmap + SP_ToolBarVerticalExtensionButton = ... # type: QStyle.StandardPixmap + SP_FileDialogStart = ... # type: QStyle.StandardPixmap + SP_FileDialogEnd = ... # type: QStyle.StandardPixmap + SP_FileDialogToParent = ... # type: QStyle.StandardPixmap + SP_FileDialogNewFolder = ... # type: QStyle.StandardPixmap + SP_FileDialogDetailedView = ... # type: QStyle.StandardPixmap + SP_FileDialogInfoView = ... # type: QStyle.StandardPixmap + SP_FileDialogContentsView = ... # type: QStyle.StandardPixmap + SP_FileDialogListView = ... # type: QStyle.StandardPixmap + SP_FileDialogBack = ... # type: QStyle.StandardPixmap + SP_DirIcon = ... # type: QStyle.StandardPixmap + SP_DialogOkButton = ... # type: QStyle.StandardPixmap + SP_DialogCancelButton = ... # type: QStyle.StandardPixmap + SP_DialogHelpButton = ... # type: QStyle.StandardPixmap + SP_DialogOpenButton = ... # type: QStyle.StandardPixmap + SP_DialogSaveButton = ... # type: QStyle.StandardPixmap + SP_DialogCloseButton = ... # type: QStyle.StandardPixmap + SP_DialogApplyButton = ... # type: QStyle.StandardPixmap + SP_DialogResetButton = ... # type: QStyle.StandardPixmap + SP_DialogDiscardButton = ... # type: QStyle.StandardPixmap + SP_DialogYesButton = ... # type: QStyle.StandardPixmap + SP_DialogNoButton = ... # type: QStyle.StandardPixmap + SP_ArrowUp = ... # type: QStyle.StandardPixmap + SP_ArrowDown = ... # type: QStyle.StandardPixmap + SP_ArrowLeft = ... # type: QStyle.StandardPixmap + SP_ArrowRight = ... # type: QStyle.StandardPixmap + SP_ArrowBack = ... # type: QStyle.StandardPixmap + SP_ArrowForward = ... # type: QStyle.StandardPixmap + SP_DirHomeIcon = ... # type: QStyle.StandardPixmap + SP_CommandLink = ... # type: QStyle.StandardPixmap + SP_VistaShield = ... # type: QStyle.StandardPixmap + SP_BrowserReload = ... # type: QStyle.StandardPixmap + SP_BrowserStop = ... # type: QStyle.StandardPixmap + SP_MediaPlay = ... # type: QStyle.StandardPixmap + SP_MediaStop = ... # type: QStyle.StandardPixmap + SP_MediaPause = ... # type: QStyle.StandardPixmap + SP_MediaSkipForward = ... # type: QStyle.StandardPixmap + SP_MediaSkipBackward = ... # type: QStyle.StandardPixmap + SP_MediaSeekForward = ... # type: QStyle.StandardPixmap + SP_MediaSeekBackward = ... # type: QStyle.StandardPixmap + SP_MediaVolume = ... # type: QStyle.StandardPixmap + SP_MediaVolumeMuted = ... # type: QStyle.StandardPixmap + SP_DirLinkOpenIcon = ... # type: QStyle.StandardPixmap + SP_LineEditClearButton = ... # type: QStyle.StandardPixmap + SP_DialogYesToAllButton = ... # type: QStyle.StandardPixmap + SP_DialogNoToAllButton = ... # type: QStyle.StandardPixmap + SP_DialogSaveAllButton = ... # type: QStyle.StandardPixmap + SP_DialogAbortButton = ... # type: QStyle.StandardPixmap + SP_DialogRetryButton = ... # type: QStyle.StandardPixmap + SP_DialogIgnoreButton = ... # type: QStyle.StandardPixmap + SP_RestoreDefaultsButton = ... # type: QStyle.StandardPixmap + SP_CustomBase = ... # type: QStyle.StandardPixmap + + class StyleHint(int): + SH_EtchDisabledText = ... # type: QStyle.StyleHint + SH_DitherDisabledText = ... # type: QStyle.StyleHint + SH_ScrollBar_MiddleClickAbsolutePosition = ... # type: QStyle.StyleHint + SH_ScrollBar_ScrollWhenPointerLeavesControl = ... # type: QStyle.StyleHint + SH_TabBar_SelectMouseType = ... # type: QStyle.StyleHint + SH_TabBar_Alignment = ... # type: QStyle.StyleHint + SH_Header_ArrowAlignment = ... # type: QStyle.StyleHint + SH_Slider_SnapToValue = ... # type: QStyle.StyleHint + SH_Slider_SloppyKeyEvents = ... # type: QStyle.StyleHint + SH_ProgressDialog_CenterCancelButton = ... # type: QStyle.StyleHint + SH_ProgressDialog_TextLabelAlignment = ... # type: QStyle.StyleHint + SH_PrintDialog_RightAlignButtons = ... # type: QStyle.StyleHint + SH_MainWindow_SpaceBelowMenuBar = ... # type: QStyle.StyleHint + SH_FontDialog_SelectAssociatedText = ... # type: QStyle.StyleHint + SH_Menu_AllowActiveAndDisabled = ... # type: QStyle.StyleHint + SH_Menu_SpaceActivatesItem = ... # type: QStyle.StyleHint + SH_Menu_SubMenuPopupDelay = ... # type: QStyle.StyleHint + SH_ScrollView_FrameOnlyAroundContents = ... # type: QStyle.StyleHint + SH_MenuBar_AltKeyNavigation = ... # type: QStyle.StyleHint + SH_ComboBox_ListMouseTracking = ... # type: QStyle.StyleHint + SH_Menu_MouseTracking = ... # type: QStyle.StyleHint + SH_MenuBar_MouseTracking = ... # type: QStyle.StyleHint + SH_ItemView_ChangeHighlightOnFocus = ... # type: QStyle.StyleHint + SH_Widget_ShareActivation = ... # type: QStyle.StyleHint + SH_Workspace_FillSpaceOnMaximize = ... # type: QStyle.StyleHint + SH_ComboBox_Popup = ... # type: QStyle.StyleHint + SH_TitleBar_NoBorder = ... # type: QStyle.StyleHint + SH_ScrollBar_StopMouseOverSlider = ... # type: QStyle.StyleHint + SH_BlinkCursorWhenTextSelected = ... # type: QStyle.StyleHint + SH_RichText_FullWidthSelection = ... # type: QStyle.StyleHint + SH_Menu_Scrollable = ... # type: QStyle.StyleHint + SH_GroupBox_TextLabelVerticalAlignment = ... # type: QStyle.StyleHint + SH_GroupBox_TextLabelColor = ... # type: QStyle.StyleHint + SH_Menu_SloppySubMenus = ... # type: QStyle.StyleHint + SH_Table_GridLineColor = ... # type: QStyle.StyleHint + SH_LineEdit_PasswordCharacter = ... # type: QStyle.StyleHint + SH_DialogButtons_DefaultButton = ... # type: QStyle.StyleHint + SH_ToolBox_SelectedPageTitleBold = ... # type: QStyle.StyleHint + SH_TabBar_PreferNoArrows = ... # type: QStyle.StyleHint + SH_ScrollBar_LeftClickAbsolutePosition = ... # type: QStyle.StyleHint + SH_UnderlineShortcut = ... # type: QStyle.StyleHint + SH_SpinBox_AnimateButton = ... # type: QStyle.StyleHint + SH_SpinBox_KeyPressAutoRepeatRate = ... # type: QStyle.StyleHint + SH_SpinBox_ClickAutoRepeatRate = ... # type: QStyle.StyleHint + SH_Menu_FillScreenWithScroll = ... # type: QStyle.StyleHint + SH_ToolTipLabel_Opacity = ... # type: QStyle.StyleHint + SH_DrawMenuBarSeparator = ... # type: QStyle.StyleHint + SH_TitleBar_ModifyNotification = ... # type: QStyle.StyleHint + SH_Button_FocusPolicy = ... # type: QStyle.StyleHint + SH_MessageBox_UseBorderForButtonSpacing = ... # type: QStyle.StyleHint + SH_TitleBar_AutoRaise = ... # type: QStyle.StyleHint + SH_ToolButton_PopupDelay = ... # type: QStyle.StyleHint + SH_FocusFrame_Mask = ... # type: QStyle.StyleHint + SH_RubberBand_Mask = ... # type: QStyle.StyleHint + SH_WindowFrame_Mask = ... # type: QStyle.StyleHint + SH_SpinControls_DisableOnBounds = ... # type: QStyle.StyleHint + SH_Dial_BackgroundRole = ... # type: QStyle.StyleHint + SH_ComboBox_LayoutDirection = ... # type: QStyle.StyleHint + SH_ItemView_EllipsisLocation = ... # type: QStyle.StyleHint + SH_ItemView_ShowDecorationSelected = ... # type: QStyle.StyleHint + SH_ItemView_ActivateItemOnSingleClick = ... # type: QStyle.StyleHint + SH_ScrollBar_ContextMenu = ... # type: QStyle.StyleHint + SH_ScrollBar_RollBetweenButtons = ... # type: QStyle.StyleHint + SH_Slider_StopMouseOverSlider = ... # type: QStyle.StyleHint + SH_Slider_AbsoluteSetButtons = ... # type: QStyle.StyleHint + SH_Slider_PageSetButtons = ... # type: QStyle.StyleHint + SH_Menu_KeyboardSearch = ... # type: QStyle.StyleHint + SH_TabBar_ElideMode = ... # type: QStyle.StyleHint + SH_DialogButtonLayout = ... # type: QStyle.StyleHint + SH_ComboBox_PopupFrameStyle = ... # type: QStyle.StyleHint + SH_MessageBox_TextInteractionFlags = ... # type: QStyle.StyleHint + SH_DialogButtonBox_ButtonsHaveIcons = ... # type: QStyle.StyleHint + SH_SpellCheckUnderlineStyle = ... # type: QStyle.StyleHint + SH_MessageBox_CenterButtons = ... # type: QStyle.StyleHint + SH_Menu_SelectionWrap = ... # type: QStyle.StyleHint + SH_ItemView_MovementWithoutUpdatingSelection = ... # type: QStyle.StyleHint + SH_ToolTip_Mask = ... # type: QStyle.StyleHint + SH_FocusFrame_AboveWidget = ... # type: QStyle.StyleHint + SH_TextControl_FocusIndicatorTextCharFormat = ... # type: QStyle.StyleHint + SH_WizardStyle = ... # type: QStyle.StyleHint + SH_ItemView_ArrowKeysNavigateIntoChildren = ... # type: QStyle.StyleHint + SH_Menu_Mask = ... # type: QStyle.StyleHint + SH_Menu_FlashTriggeredItem = ... # type: QStyle.StyleHint + SH_Menu_FadeOutOnHide = ... # type: QStyle.StyleHint + SH_SpinBox_ClickAutoRepeatThreshold = ... # type: QStyle.StyleHint + SH_ItemView_PaintAlternatingRowColorsForEmptyArea = ... # type: QStyle.StyleHint + SH_FormLayoutWrapPolicy = ... # type: QStyle.StyleHint + SH_TabWidget_DefaultTabPosition = ... # type: QStyle.StyleHint + SH_ToolBar_Movable = ... # type: QStyle.StyleHint + SH_FormLayoutFieldGrowthPolicy = ... # type: QStyle.StyleHint + SH_FormLayoutFormAlignment = ... # type: QStyle.StyleHint + SH_FormLayoutLabelAlignment = ... # type: QStyle.StyleHint + SH_ItemView_DrawDelegateFrame = ... # type: QStyle.StyleHint + SH_TabBar_CloseButtonPosition = ... # type: QStyle.StyleHint + SH_DockWidget_ButtonsHaveFrame = ... # type: QStyle.StyleHint + SH_ToolButtonStyle = ... # type: QStyle.StyleHint + SH_RequestSoftwareInputPanel = ... # type: QStyle.StyleHint + SH_ListViewExpand_SelectMouseType = ... # type: QStyle.StyleHint + SH_ScrollBar_Transient = ... # type: QStyle.StyleHint + SH_Menu_SupportsSections = ... # type: QStyle.StyleHint + SH_ToolTip_WakeUpDelay = ... # type: QStyle.StyleHint + SH_ToolTip_FallAsleepDelay = ... # type: QStyle.StyleHint + SH_Widget_Animate = ... # type: QStyle.StyleHint + SH_Splitter_OpaqueResize = ... # type: QStyle.StyleHint + SH_LineEdit_PasswordMaskDelay = ... # type: QStyle.StyleHint + SH_TabBar_ChangeCurrentDelay = ... # type: QStyle.StyleHint + SH_Menu_SubMenuUniDirection = ... # type: QStyle.StyleHint + SH_Menu_SubMenuUniDirectionFailCount = ... # type: QStyle.StyleHint + SH_Menu_SubMenuSloppySelectOtherActions = ... # type: QStyle.StyleHint + SH_Menu_SubMenuSloppyCloseTimeout = ... # type: QStyle.StyleHint + SH_Menu_SubMenuResetWhenReenteringParent = ... # type: QStyle.StyleHint + SH_Menu_SubMenuDontStartSloppyOnLeave = ... # type: QStyle.StyleHint + SH_ItemView_ScrollMode = ... # type: QStyle.StyleHint + SH_TitleBar_ShowToolTipsOnButtons = ... # type: QStyle.StyleHint + SH_Widget_Animation_Duration = ... # type: QStyle.StyleHint + SH_ComboBox_AllowWheelScrolling = ... # type: QStyle.StyleHint + SH_SpinBox_ButtonsInsideFrame = ... # type: QStyle.StyleHint + SH_SpinBox_StepModifier = ... # type: QStyle.StyleHint + SH_CustomBase = ... # type: QStyle.StyleHint + + class ContentsType(int): + CT_PushButton = ... # type: QStyle.ContentsType + CT_CheckBox = ... # type: QStyle.ContentsType + CT_RadioButton = ... # type: QStyle.ContentsType + CT_ToolButton = ... # type: QStyle.ContentsType + CT_ComboBox = ... # type: QStyle.ContentsType + CT_Splitter = ... # type: QStyle.ContentsType + CT_ProgressBar = ... # type: QStyle.ContentsType + CT_MenuItem = ... # type: QStyle.ContentsType + CT_MenuBarItem = ... # type: QStyle.ContentsType + CT_MenuBar = ... # type: QStyle.ContentsType + CT_Menu = ... # type: QStyle.ContentsType + CT_TabBarTab = ... # type: QStyle.ContentsType + CT_Slider = ... # type: QStyle.ContentsType + CT_ScrollBar = ... # type: QStyle.ContentsType + CT_LineEdit = ... # type: QStyle.ContentsType + CT_SpinBox = ... # type: QStyle.ContentsType + CT_SizeGrip = ... # type: QStyle.ContentsType + CT_TabWidget = ... # type: QStyle.ContentsType + CT_DialogButtons = ... # type: QStyle.ContentsType + CT_HeaderSection = ... # type: QStyle.ContentsType + CT_GroupBox = ... # type: QStyle.ContentsType + CT_MdiControls = ... # type: QStyle.ContentsType + CT_ItemViewItem = ... # type: QStyle.ContentsType + CT_CustomBase = ... # type: QStyle.ContentsType + + class PixelMetric(int): + PM_ButtonMargin = ... # type: QStyle.PixelMetric + PM_ButtonDefaultIndicator = ... # type: QStyle.PixelMetric + PM_MenuButtonIndicator = ... # type: QStyle.PixelMetric + PM_ButtonShiftHorizontal = ... # type: QStyle.PixelMetric + PM_ButtonShiftVertical = ... # type: QStyle.PixelMetric + PM_DefaultFrameWidth = ... # type: QStyle.PixelMetric + PM_SpinBoxFrameWidth = ... # type: QStyle.PixelMetric + PM_ComboBoxFrameWidth = ... # type: QStyle.PixelMetric + PM_MaximumDragDistance = ... # type: QStyle.PixelMetric + PM_ScrollBarExtent = ... # type: QStyle.PixelMetric + PM_ScrollBarSliderMin = ... # type: QStyle.PixelMetric + PM_SliderThickness = ... # type: QStyle.PixelMetric + PM_SliderControlThickness = ... # type: QStyle.PixelMetric + PM_SliderLength = ... # type: QStyle.PixelMetric + PM_SliderTickmarkOffset = ... # type: QStyle.PixelMetric + PM_SliderSpaceAvailable = ... # type: QStyle.PixelMetric + PM_DockWidgetSeparatorExtent = ... # type: QStyle.PixelMetric + PM_DockWidgetHandleExtent = ... # type: QStyle.PixelMetric + PM_DockWidgetFrameWidth = ... # type: QStyle.PixelMetric + PM_TabBarTabOverlap = ... # type: QStyle.PixelMetric + PM_TabBarTabHSpace = ... # type: QStyle.PixelMetric + PM_TabBarTabVSpace = ... # type: QStyle.PixelMetric + PM_TabBarBaseHeight = ... # type: QStyle.PixelMetric + PM_TabBarBaseOverlap = ... # type: QStyle.PixelMetric + PM_ProgressBarChunkWidth = ... # type: QStyle.PixelMetric + PM_SplitterWidth = ... # type: QStyle.PixelMetric + PM_TitleBarHeight = ... # type: QStyle.PixelMetric + PM_MenuScrollerHeight = ... # type: QStyle.PixelMetric + PM_MenuHMargin = ... # type: QStyle.PixelMetric + PM_MenuVMargin = ... # type: QStyle.PixelMetric + PM_MenuPanelWidth = ... # type: QStyle.PixelMetric + PM_MenuTearoffHeight = ... # type: QStyle.PixelMetric + PM_MenuDesktopFrameWidth = ... # type: QStyle.PixelMetric + PM_MenuBarPanelWidth = ... # type: QStyle.PixelMetric + PM_MenuBarItemSpacing = ... # type: QStyle.PixelMetric + PM_MenuBarVMargin = ... # type: QStyle.PixelMetric + PM_MenuBarHMargin = ... # type: QStyle.PixelMetric + PM_IndicatorWidth = ... # type: QStyle.PixelMetric + PM_IndicatorHeight = ... # type: QStyle.PixelMetric + PM_ExclusiveIndicatorWidth = ... # type: QStyle.PixelMetric + PM_ExclusiveIndicatorHeight = ... # type: QStyle.PixelMetric + PM_DialogButtonsSeparator = ... # type: QStyle.PixelMetric + PM_DialogButtonsButtonWidth = ... # type: QStyle.PixelMetric + PM_DialogButtonsButtonHeight = ... # type: QStyle.PixelMetric + PM_MdiSubWindowFrameWidth = ... # type: QStyle.PixelMetric + PM_MDIFrameWidth = ... # type: QStyle.PixelMetric + PM_MdiSubWindowMinimizedWidth = ... # type: QStyle.PixelMetric + PM_MDIMinimizedWidth = ... # type: QStyle.PixelMetric + PM_HeaderMargin = ... # type: QStyle.PixelMetric + PM_HeaderMarkSize = ... # type: QStyle.PixelMetric + PM_HeaderGripMargin = ... # type: QStyle.PixelMetric + PM_TabBarTabShiftHorizontal = ... # type: QStyle.PixelMetric + PM_TabBarTabShiftVertical = ... # type: QStyle.PixelMetric + PM_TabBarScrollButtonWidth = ... # type: QStyle.PixelMetric + PM_ToolBarFrameWidth = ... # type: QStyle.PixelMetric + PM_ToolBarHandleExtent = ... # type: QStyle.PixelMetric + PM_ToolBarItemSpacing = ... # type: QStyle.PixelMetric + PM_ToolBarItemMargin = ... # type: QStyle.PixelMetric + PM_ToolBarSeparatorExtent = ... # type: QStyle.PixelMetric + PM_ToolBarExtensionExtent = ... # type: QStyle.PixelMetric + PM_SpinBoxSliderHeight = ... # type: QStyle.PixelMetric + PM_DefaultTopLevelMargin = ... # type: QStyle.PixelMetric + PM_DefaultChildMargin = ... # type: QStyle.PixelMetric + PM_DefaultLayoutSpacing = ... # type: QStyle.PixelMetric + PM_ToolBarIconSize = ... # type: QStyle.PixelMetric + PM_ListViewIconSize = ... # type: QStyle.PixelMetric + PM_IconViewIconSize = ... # type: QStyle.PixelMetric + PM_SmallIconSize = ... # type: QStyle.PixelMetric + PM_LargeIconSize = ... # type: QStyle.PixelMetric + PM_FocusFrameVMargin = ... # type: QStyle.PixelMetric + PM_FocusFrameHMargin = ... # type: QStyle.PixelMetric + PM_ToolTipLabelFrameWidth = ... # type: QStyle.PixelMetric + PM_CheckBoxLabelSpacing = ... # type: QStyle.PixelMetric + PM_TabBarIconSize = ... # type: QStyle.PixelMetric + PM_SizeGripSize = ... # type: QStyle.PixelMetric + PM_DockWidgetTitleMargin = ... # type: QStyle.PixelMetric + PM_MessageBoxIconSize = ... # type: QStyle.PixelMetric + PM_ButtonIconSize = ... # type: QStyle.PixelMetric + PM_DockWidgetTitleBarButtonMargin = ... # type: QStyle.PixelMetric + PM_RadioButtonLabelSpacing = ... # type: QStyle.PixelMetric + PM_LayoutLeftMargin = ... # type: QStyle.PixelMetric + PM_LayoutTopMargin = ... # type: QStyle.PixelMetric + PM_LayoutRightMargin = ... # type: QStyle.PixelMetric + PM_LayoutBottomMargin = ... # type: QStyle.PixelMetric + PM_LayoutHorizontalSpacing = ... # type: QStyle.PixelMetric + PM_LayoutVerticalSpacing = ... # type: QStyle.PixelMetric + PM_TabBar_ScrollButtonOverlap = ... # type: QStyle.PixelMetric + PM_TextCursorWidth = ... # type: QStyle.PixelMetric + PM_TabCloseIndicatorWidth = ... # type: QStyle.PixelMetric + PM_TabCloseIndicatorHeight = ... # type: QStyle.PixelMetric + PM_ScrollView_ScrollBarSpacing = ... # type: QStyle.PixelMetric + PM_SubMenuOverlap = ... # type: QStyle.PixelMetric + PM_ScrollView_ScrollBarOverlap = ... # type: QStyle.PixelMetric + PM_TreeViewIndentation = ... # type: QStyle.PixelMetric + PM_HeaderDefaultSectionSizeHorizontal = ... # type: QStyle.PixelMetric + PM_HeaderDefaultSectionSizeVertical = ... # type: QStyle.PixelMetric + PM_TitleBarButtonIconSize = ... # type: QStyle.PixelMetric + PM_TitleBarButtonSize = ... # type: QStyle.PixelMetric + PM_CustomBase = ... # type: QStyle.PixelMetric + + class SubControl(int): + SC_None = ... # type: QStyle.SubControl + SC_ScrollBarAddLine = ... # type: QStyle.SubControl + SC_ScrollBarSubLine = ... # type: QStyle.SubControl + SC_ScrollBarAddPage = ... # type: QStyle.SubControl + SC_ScrollBarSubPage = ... # type: QStyle.SubControl + SC_ScrollBarFirst = ... # type: QStyle.SubControl + SC_ScrollBarLast = ... # type: QStyle.SubControl + SC_ScrollBarSlider = ... # type: QStyle.SubControl + SC_ScrollBarGroove = ... # type: QStyle.SubControl + SC_SpinBoxUp = ... # type: QStyle.SubControl + SC_SpinBoxDown = ... # type: QStyle.SubControl + SC_SpinBoxFrame = ... # type: QStyle.SubControl + SC_SpinBoxEditField = ... # type: QStyle.SubControl + SC_ComboBoxFrame = ... # type: QStyle.SubControl + SC_ComboBoxEditField = ... # type: QStyle.SubControl + SC_ComboBoxArrow = ... # type: QStyle.SubControl + SC_ComboBoxListBoxPopup = ... # type: QStyle.SubControl + SC_SliderGroove = ... # type: QStyle.SubControl + SC_SliderHandle = ... # type: QStyle.SubControl + SC_SliderTickmarks = ... # type: QStyle.SubControl + SC_ToolButton = ... # type: QStyle.SubControl + SC_ToolButtonMenu = ... # type: QStyle.SubControl + SC_TitleBarSysMenu = ... # type: QStyle.SubControl + SC_TitleBarMinButton = ... # type: QStyle.SubControl + SC_TitleBarMaxButton = ... # type: QStyle.SubControl + SC_TitleBarCloseButton = ... # type: QStyle.SubControl + SC_TitleBarNormalButton = ... # type: QStyle.SubControl + SC_TitleBarShadeButton = ... # type: QStyle.SubControl + SC_TitleBarUnshadeButton = ... # type: QStyle.SubControl + SC_TitleBarContextHelpButton = ... # type: QStyle.SubControl + SC_TitleBarLabel = ... # type: QStyle.SubControl + SC_DialGroove = ... # type: QStyle.SubControl + SC_DialHandle = ... # type: QStyle.SubControl + SC_DialTickmarks = ... # type: QStyle.SubControl + SC_GroupBoxCheckBox = ... # type: QStyle.SubControl + SC_GroupBoxLabel = ... # type: QStyle.SubControl + SC_GroupBoxContents = ... # type: QStyle.SubControl + SC_GroupBoxFrame = ... # type: QStyle.SubControl + SC_MdiMinButton = ... # type: QStyle.SubControl + SC_MdiNormalButton = ... # type: QStyle.SubControl + SC_MdiCloseButton = ... # type: QStyle.SubControl + SC_CustomBase = ... # type: QStyle.SubControl + SC_All = ... # type: QStyle.SubControl + + class ComplexControl(int): + CC_SpinBox = ... # type: QStyle.ComplexControl + CC_ComboBox = ... # type: QStyle.ComplexControl + CC_ScrollBar = ... # type: QStyle.ComplexControl + CC_Slider = ... # type: QStyle.ComplexControl + CC_ToolButton = ... # type: QStyle.ComplexControl + CC_TitleBar = ... # type: QStyle.ComplexControl + CC_Dial = ... # type: QStyle.ComplexControl + CC_GroupBox = ... # type: QStyle.ComplexControl + CC_MdiControls = ... # type: QStyle.ComplexControl + CC_CustomBase = ... # type: QStyle.ComplexControl + + class SubElement(int): + SE_PushButtonContents = ... # type: QStyle.SubElement + SE_PushButtonFocusRect = ... # type: QStyle.SubElement + SE_CheckBoxIndicator = ... # type: QStyle.SubElement + SE_CheckBoxContents = ... # type: QStyle.SubElement + SE_CheckBoxFocusRect = ... # type: QStyle.SubElement + SE_CheckBoxClickRect = ... # type: QStyle.SubElement + SE_RadioButtonIndicator = ... # type: QStyle.SubElement + SE_RadioButtonContents = ... # type: QStyle.SubElement + SE_RadioButtonFocusRect = ... # type: QStyle.SubElement + SE_RadioButtonClickRect = ... # type: QStyle.SubElement + SE_ComboBoxFocusRect = ... # type: QStyle.SubElement + SE_SliderFocusRect = ... # type: QStyle.SubElement + SE_ProgressBarGroove = ... # type: QStyle.SubElement + SE_ProgressBarContents = ... # type: QStyle.SubElement + SE_ProgressBarLabel = ... # type: QStyle.SubElement + SE_ToolBoxTabContents = ... # type: QStyle.SubElement + SE_HeaderLabel = ... # type: QStyle.SubElement + SE_HeaderArrow = ... # type: QStyle.SubElement + SE_TabWidgetTabBar = ... # type: QStyle.SubElement + SE_TabWidgetTabPane = ... # type: QStyle.SubElement + SE_TabWidgetTabContents = ... # type: QStyle.SubElement + SE_TabWidgetLeftCorner = ... # type: QStyle.SubElement + SE_TabWidgetRightCorner = ... # type: QStyle.SubElement + SE_ViewItemCheckIndicator = ... # type: QStyle.SubElement + SE_TabBarTearIndicator = ... # type: QStyle.SubElement + SE_TreeViewDisclosureItem = ... # type: QStyle.SubElement + SE_LineEditContents = ... # type: QStyle.SubElement + SE_FrameContents = ... # type: QStyle.SubElement + SE_DockWidgetCloseButton = ... # type: QStyle.SubElement + SE_DockWidgetFloatButton = ... # type: QStyle.SubElement + SE_DockWidgetTitleBarText = ... # type: QStyle.SubElement + SE_DockWidgetIcon = ... # type: QStyle.SubElement + SE_CheckBoxLayoutItem = ... # type: QStyle.SubElement + SE_ComboBoxLayoutItem = ... # type: QStyle.SubElement + SE_DateTimeEditLayoutItem = ... # type: QStyle.SubElement + SE_DialogButtonBoxLayoutItem = ... # type: QStyle.SubElement + SE_LabelLayoutItem = ... # type: QStyle.SubElement + SE_ProgressBarLayoutItem = ... # type: QStyle.SubElement + SE_PushButtonLayoutItem = ... # type: QStyle.SubElement + SE_RadioButtonLayoutItem = ... # type: QStyle.SubElement + SE_SliderLayoutItem = ... # type: QStyle.SubElement + SE_SpinBoxLayoutItem = ... # type: QStyle.SubElement + SE_ToolButtonLayoutItem = ... # type: QStyle.SubElement + SE_FrameLayoutItem = ... # type: QStyle.SubElement + SE_GroupBoxLayoutItem = ... # type: QStyle.SubElement + SE_TabWidgetLayoutItem = ... # type: QStyle.SubElement + SE_ItemViewItemCheckIndicator = ... # type: QStyle.SubElement + SE_ItemViewItemDecoration = ... # type: QStyle.SubElement + SE_ItemViewItemText = ... # type: QStyle.SubElement + SE_ItemViewItemFocusRect = ... # type: QStyle.SubElement + SE_TabBarTabLeftButton = ... # type: QStyle.SubElement + SE_TabBarTabRightButton = ... # type: QStyle.SubElement + SE_TabBarTabText = ... # type: QStyle.SubElement + SE_ShapedFrameContents = ... # type: QStyle.SubElement + SE_ToolBarHandle = ... # type: QStyle.SubElement + SE_TabBarTearIndicatorLeft = ... # type: QStyle.SubElement + SE_TabBarScrollLeftButton = ... # type: QStyle.SubElement + SE_TabBarScrollRightButton = ... # type: QStyle.SubElement + SE_TabBarTearIndicatorRight = ... # type: QStyle.SubElement + SE_PushButtonBevel = ... # type: QStyle.SubElement + SE_CustomBase = ... # type: QStyle.SubElement + + class ControlElement(int): + CE_PushButton = ... # type: QStyle.ControlElement + CE_PushButtonBevel = ... # type: QStyle.ControlElement + CE_PushButtonLabel = ... # type: QStyle.ControlElement + CE_CheckBox = ... # type: QStyle.ControlElement + CE_CheckBoxLabel = ... # type: QStyle.ControlElement + CE_RadioButton = ... # type: QStyle.ControlElement + CE_RadioButtonLabel = ... # type: QStyle.ControlElement + CE_TabBarTab = ... # type: QStyle.ControlElement + CE_TabBarTabShape = ... # type: QStyle.ControlElement + CE_TabBarTabLabel = ... # type: QStyle.ControlElement + CE_ProgressBar = ... # type: QStyle.ControlElement + CE_ProgressBarGroove = ... # type: QStyle.ControlElement + CE_ProgressBarContents = ... # type: QStyle.ControlElement + CE_ProgressBarLabel = ... # type: QStyle.ControlElement + CE_MenuItem = ... # type: QStyle.ControlElement + CE_MenuScroller = ... # type: QStyle.ControlElement + CE_MenuVMargin = ... # type: QStyle.ControlElement + CE_MenuHMargin = ... # type: QStyle.ControlElement + CE_MenuTearoff = ... # type: QStyle.ControlElement + CE_MenuEmptyArea = ... # type: QStyle.ControlElement + CE_MenuBarItem = ... # type: QStyle.ControlElement + CE_MenuBarEmptyArea = ... # type: QStyle.ControlElement + CE_ToolButtonLabel = ... # type: QStyle.ControlElement + CE_Header = ... # type: QStyle.ControlElement + CE_HeaderSection = ... # type: QStyle.ControlElement + CE_HeaderLabel = ... # type: QStyle.ControlElement + CE_ToolBoxTab = ... # type: QStyle.ControlElement + CE_SizeGrip = ... # type: QStyle.ControlElement + CE_Splitter = ... # type: QStyle.ControlElement + CE_RubberBand = ... # type: QStyle.ControlElement + CE_DockWidgetTitle = ... # type: QStyle.ControlElement + CE_ScrollBarAddLine = ... # type: QStyle.ControlElement + CE_ScrollBarSubLine = ... # type: QStyle.ControlElement + CE_ScrollBarAddPage = ... # type: QStyle.ControlElement + CE_ScrollBarSubPage = ... # type: QStyle.ControlElement + CE_ScrollBarSlider = ... # type: QStyle.ControlElement + CE_ScrollBarFirst = ... # type: QStyle.ControlElement + CE_ScrollBarLast = ... # type: QStyle.ControlElement + CE_FocusFrame = ... # type: QStyle.ControlElement + CE_ComboBoxLabel = ... # type: QStyle.ControlElement + CE_ToolBar = ... # type: QStyle.ControlElement + CE_ToolBoxTabShape = ... # type: QStyle.ControlElement + CE_ToolBoxTabLabel = ... # type: QStyle.ControlElement + CE_HeaderEmptyArea = ... # type: QStyle.ControlElement + CE_ColumnViewGrip = ... # type: QStyle.ControlElement + CE_ItemViewItem = ... # type: QStyle.ControlElement + CE_ShapedFrame = ... # type: QStyle.ControlElement + CE_CustomBase = ... # type: QStyle.ControlElement + + class PrimitiveElement(int): + PE_Frame = ... # type: QStyle.PrimitiveElement + PE_FrameDefaultButton = ... # type: QStyle.PrimitiveElement + PE_FrameDockWidget = ... # type: QStyle.PrimitiveElement + PE_FrameFocusRect = ... # type: QStyle.PrimitiveElement + PE_FrameGroupBox = ... # type: QStyle.PrimitiveElement + PE_FrameLineEdit = ... # type: QStyle.PrimitiveElement + PE_FrameMenu = ... # type: QStyle.PrimitiveElement + PE_FrameStatusBar = ... # type: QStyle.PrimitiveElement + PE_FrameTabWidget = ... # type: QStyle.PrimitiveElement + PE_FrameWindow = ... # type: QStyle.PrimitiveElement + PE_FrameButtonBevel = ... # type: QStyle.PrimitiveElement + PE_FrameButtonTool = ... # type: QStyle.PrimitiveElement + PE_FrameTabBarBase = ... # type: QStyle.PrimitiveElement + PE_PanelButtonCommand = ... # type: QStyle.PrimitiveElement + PE_PanelButtonBevel = ... # type: QStyle.PrimitiveElement + PE_PanelButtonTool = ... # type: QStyle.PrimitiveElement + PE_PanelMenuBar = ... # type: QStyle.PrimitiveElement + PE_PanelToolBar = ... # type: QStyle.PrimitiveElement + PE_PanelLineEdit = ... # type: QStyle.PrimitiveElement + PE_IndicatorArrowDown = ... # type: QStyle.PrimitiveElement + PE_IndicatorArrowLeft = ... # type: QStyle.PrimitiveElement + PE_IndicatorArrowRight = ... # type: QStyle.PrimitiveElement + PE_IndicatorArrowUp = ... # type: QStyle.PrimitiveElement + PE_IndicatorBranch = ... # type: QStyle.PrimitiveElement + PE_IndicatorButtonDropDown = ... # type: QStyle.PrimitiveElement + PE_IndicatorViewItemCheck = ... # type: QStyle.PrimitiveElement + PE_IndicatorCheckBox = ... # type: QStyle.PrimitiveElement + PE_IndicatorDockWidgetResizeHandle = ... # type: QStyle.PrimitiveElement + PE_IndicatorHeaderArrow = ... # type: QStyle.PrimitiveElement + PE_IndicatorMenuCheckMark = ... # type: QStyle.PrimitiveElement + PE_IndicatorProgressChunk = ... # type: QStyle.PrimitiveElement + PE_IndicatorRadioButton = ... # type: QStyle.PrimitiveElement + PE_IndicatorSpinDown = ... # type: QStyle.PrimitiveElement + PE_IndicatorSpinMinus = ... # type: QStyle.PrimitiveElement + PE_IndicatorSpinPlus = ... # type: QStyle.PrimitiveElement + PE_IndicatorSpinUp = ... # type: QStyle.PrimitiveElement + PE_IndicatorToolBarHandle = ... # type: QStyle.PrimitiveElement + PE_IndicatorToolBarSeparator = ... # type: QStyle.PrimitiveElement + PE_PanelTipLabel = ... # type: QStyle.PrimitiveElement + PE_IndicatorTabTear = ... # type: QStyle.PrimitiveElement + PE_PanelScrollAreaCorner = ... # type: QStyle.PrimitiveElement + PE_Widget = ... # type: QStyle.PrimitiveElement + PE_IndicatorColumnViewArrow = ... # type: QStyle.PrimitiveElement + PE_FrameStatusBarItem = ... # type: QStyle.PrimitiveElement + PE_IndicatorItemViewItemCheck = ... # type: QStyle.PrimitiveElement + PE_IndicatorItemViewItemDrop = ... # type: QStyle.PrimitiveElement + PE_PanelItemViewItem = ... # type: QStyle.PrimitiveElement + PE_PanelItemViewRow = ... # type: QStyle.PrimitiveElement + PE_PanelStatusBar = ... # type: QStyle.PrimitiveElement + PE_IndicatorTabClose = ... # type: QStyle.PrimitiveElement + PE_PanelMenu = ... # type: QStyle.PrimitiveElement + PE_IndicatorTabTearLeft = ... # type: QStyle.PrimitiveElement + PE_IndicatorTabTearRight = ... # type: QStyle.PrimitiveElement + PE_CustomBase = ... # type: QStyle.PrimitiveElement + + class StateFlag(int): + State_None = ... # type: QStyle.StateFlag + State_Enabled = ... # type: QStyle.StateFlag + State_Raised = ... # type: QStyle.StateFlag + State_Sunken = ... # type: QStyle.StateFlag + State_Off = ... # type: QStyle.StateFlag + State_NoChange = ... # type: QStyle.StateFlag + State_On = ... # type: QStyle.StateFlag + State_DownArrow = ... # type: QStyle.StateFlag + State_Horizontal = ... # type: QStyle.StateFlag + State_HasFocus = ... # type: QStyle.StateFlag + State_Top = ... # type: QStyle.StateFlag + State_Bottom = ... # type: QStyle.StateFlag + State_FocusAtBorder = ... # type: QStyle.StateFlag + State_AutoRaise = ... # type: QStyle.StateFlag + State_MouseOver = ... # type: QStyle.StateFlag + State_UpArrow = ... # type: QStyle.StateFlag + State_Selected = ... # type: QStyle.StateFlag + State_Active = ... # type: QStyle.StateFlag + State_Open = ... # type: QStyle.StateFlag + State_Children = ... # type: QStyle.StateFlag + State_Item = ... # type: QStyle.StateFlag + State_Sibling = ... # type: QStyle.StateFlag + State_Editing = ... # type: QStyle.StateFlag + State_KeyboardFocusChange = ... # type: QStyle.StateFlag + State_ReadOnly = ... # type: QStyle.StateFlag + State_Window = ... # type: QStyle.StateFlag + State_Small = ... # type: QStyle.StateFlag + State_Mini = ... # type: QStyle.StateFlag + + class State(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyle.State', 'QStyle.StateFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyle.State', 'QStyle.StateFlag']) -> 'QStyle.State': ... + def __xor__(self, f: typing.Union['QStyle.State', 'QStyle.StateFlag']) -> 'QStyle.State': ... + def __ior__(self, f: typing.Union['QStyle.State', 'QStyle.StateFlag']) -> 'QStyle.State': ... + def __or__(self, f: typing.Union['QStyle.State', 'QStyle.StateFlag']) -> 'QStyle.State': ... + def __iand__(self, f: typing.Union['QStyle.State', 'QStyle.StateFlag']) -> 'QStyle.State': ... + def __and__(self, f: typing.Union['QStyle.State', 'QStyle.StateFlag']) -> 'QStyle.State': ... + def __invert__(self) -> 'QStyle.State': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class SubControls(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyle.SubControls', 'QStyle.SubControl']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyle.SubControls', 'QStyle.SubControl']) -> 'QStyle.SubControls': ... + def __xor__(self, f: typing.Union['QStyle.SubControls', 'QStyle.SubControl']) -> 'QStyle.SubControls': ... + def __ior__(self, f: typing.Union['QStyle.SubControls', 'QStyle.SubControl']) -> 'QStyle.SubControls': ... + def __or__(self, f: typing.Union['QStyle.SubControls', 'QStyle.SubControl']) -> 'QStyle.SubControls': ... + def __iand__(self, f: typing.Union['QStyle.SubControls', 'QStyle.SubControl']) -> 'QStyle.SubControls': ... + def __and__(self, f: typing.Union['QStyle.SubControls', 'QStyle.SubControl']) -> 'QStyle.SubControls': ... + def __invert__(self) -> 'QStyle.SubControls': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self) -> None: ... + + def proxy(self) -> typing.Optional['QStyle']: ... + def combinedLayoutSpacing(self, controls1: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType'], controls2: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType'], orientation: QtCore.Qt.Orientation, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... + def layoutSpacing(self, control1: 'QSizePolicy.ControlType', control2: 'QSizePolicy.ControlType', orientation: QtCore.Qt.Orientation, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... + @staticmethod + def alignedRect(direction: QtCore.Qt.LayoutDirection, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag], size: QtCore.QSize, rectangle: QtCore.QRect) -> QtCore.QRect: ... + @staticmethod + def visualAlignment(direction: QtCore.Qt.LayoutDirection, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> QtCore.Qt.Alignment: ... + @staticmethod + def sliderValueFromPosition(min: int, max: int, position: int, span: int, upsideDown: bool = ...) -> int: ... + @staticmethod + def sliderPositionFromValue(min: int, max: int, logicalValue: int, span: int, upsideDown: bool = ...) -> int: ... + @staticmethod + def visualPos(direction: QtCore.Qt.LayoutDirection, boundingRect: QtCore.QRect, logicalPos: QtCore.QPoint) -> QtCore.QPoint: ... + @staticmethod + def visualRect(direction: QtCore.Qt.LayoutDirection, boundingRect: QtCore.QRect, logicalRect: QtCore.QRect) -> QtCore.QRect: ... + def generatedIconPixmap(self, iconMode: QtGui.QIcon.Mode, pixmap: QtGui.QPixmap, opt: typing.Optional['QStyleOption']) -> QtGui.QPixmap: ... + def standardIcon(self, standardIcon: 'QStyle.StandardPixmap', option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QIcon: ... + def standardPixmap(self, standardPixmap: 'QStyle.StandardPixmap', option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QPixmap: ... + def styleHint(self, stylehint: 'QStyle.StyleHint', option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ..., returnData: typing.Optional['QStyleHintReturn'] = ...) -> int: ... + def sizeFromContents(self, ct: 'QStyle.ContentsType', opt: typing.Optional['QStyleOption'], contentsSize: QtCore.QSize, widget: typing.Optional[QWidget] = ...) -> QtCore.QSize: ... + def pixelMetric(self, metric: 'QStyle.PixelMetric', option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... + def subControlRect(self, cc: 'QStyle.ComplexControl', opt: typing.Optional['QStyleOptionComplex'], sc: 'QStyle.SubControl', widget: typing.Optional[QWidget] = ...) -> QtCore.QRect: ... + def hitTestComplexControl(self, cc: 'QStyle.ComplexControl', opt: typing.Optional['QStyleOptionComplex'], pt: QtCore.QPoint, widget: typing.Optional[QWidget] = ...) -> 'QStyle.SubControl': ... + def drawComplexControl(self, cc: 'QStyle.ComplexControl', opt: typing.Optional['QStyleOptionComplex'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + def subElementRect(self, subElement: 'QStyle.SubElement', option: typing.Optional['QStyleOption'], widget: typing.Optional[QWidget] = ...) -> QtCore.QRect: ... + def drawControl(self, element: 'QStyle.ControlElement', opt: typing.Optional['QStyleOption'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + def drawPrimitive(self, pe: 'QStyle.PrimitiveElement', opt: typing.Optional['QStyleOption'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + def standardPalette(self) -> QtGui.QPalette: ... + def drawItemPixmap(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, alignment: int, pixmap: QtGui.QPixmap) -> None: ... + def drawItemText(self, painter: typing.Optional[QtGui.QPainter], rectangle: QtCore.QRect, alignment: int, palette: QtGui.QPalette, enabled: bool, text: typing.Optional[str], textRole: QtGui.QPalette.ColorRole = ...) -> None: ... + def itemPixmapRect(self, r: QtCore.QRect, flags: int, pixmap: QtGui.QPixmap) -> QtCore.QRect: ... + def itemTextRect(self, fm: QtGui.QFontMetrics, r: QtCore.QRect, flags: int, enabled: bool, text: typing.Optional[str]) -> QtCore.QRect: ... + @typing.overload + def unpolish(self, a0: typing.Optional[QWidget]) -> None: ... + @typing.overload + def unpolish(self, a0: typing.Optional[QApplication]) -> None: ... + @typing.overload + def polish(self, a0: typing.Optional[QWidget]) -> None: ... + @typing.overload + def polish(self, a0: typing.Optional[QApplication]) -> None: ... + @typing.overload + def polish(self, a0: QtGui.QPalette) -> QtGui.QPalette: ... + + +class QCommonStyle(QStyle): + + def __init__(self) -> None: ... + + def layoutSpacing(self, control1: 'QSizePolicy.ControlType', control2: 'QSizePolicy.ControlType', orientation: QtCore.Qt.Orientation, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... + def standardIcon(self, standardIcon: QStyle.StandardPixmap, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QIcon: ... + def generatedIconPixmap(self, iconMode: QtGui.QIcon.Mode, pixmap: QtGui.QPixmap, opt: typing.Optional['QStyleOption']) -> QtGui.QPixmap: ... + def standardPixmap(self, sp: QStyle.StandardPixmap, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QPixmap: ... + def styleHint(self, sh: QStyle.StyleHint, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ..., returnData: typing.Optional['QStyleHintReturn'] = ...) -> int: ... + def pixelMetric(self, m: QStyle.PixelMetric, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... + def sizeFromContents(self, ct: QStyle.ContentsType, opt: typing.Optional['QStyleOption'], contentsSize: QtCore.QSize, widget: typing.Optional[QWidget] = ...) -> QtCore.QSize: ... + def subControlRect(self, cc: QStyle.ComplexControl, opt: typing.Optional['QStyleOptionComplex'], sc: QStyle.SubControl, widget: typing.Optional[QWidget] = ...) -> QtCore.QRect: ... + def hitTestComplexControl(self, cc: QStyle.ComplexControl, opt: typing.Optional['QStyleOptionComplex'], pt: QtCore.QPoint, widget: typing.Optional[QWidget] = ...) -> QStyle.SubControl: ... + def drawComplexControl(self, cc: QStyle.ComplexControl, opt: typing.Optional['QStyleOptionComplex'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + def subElementRect(self, r: QStyle.SubElement, opt: typing.Optional['QStyleOption'], widget: typing.Optional[QWidget] = ...) -> QtCore.QRect: ... + def drawControl(self, element: QStyle.ControlElement, opt: typing.Optional['QStyleOption'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + def drawPrimitive(self, pe: QStyle.PrimitiveElement, opt: typing.Optional['QStyleOption'], p: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def unpolish(self, widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def unpolish(self, application: typing.Optional[QApplication]) -> None: ... + @typing.overload + def polish(self, widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def polish(self, app: typing.Optional[QApplication]) -> None: ... + @typing.overload + def polish(self, a0: QtGui.QPalette) -> QtGui.QPalette: ... + + +class QCompleter(QtCore.QObject): + + class ModelSorting(int): + UnsortedModel = ... # type: QCompleter.ModelSorting + CaseSensitivelySortedModel = ... # type: QCompleter.ModelSorting + CaseInsensitivelySortedModel = ... # type: QCompleter.ModelSorting + + class CompletionMode(int): + PopupCompletion = ... # type: QCompleter.CompletionMode + UnfilteredPopupCompletion = ... # type: QCompleter.CompletionMode + InlineCompletion = ... # type: QCompleter.CompletionMode + + @typing.overload + def __init__(self, model: typing.Optional[QtCore.QAbstractItemModel], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, list: typing.Iterable[typing.Optional[str]], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def filterMode(self) -> QtCore.Qt.MatchFlags: ... + def setFilterMode(self, filterMode: typing.Union[QtCore.Qt.MatchFlags, QtCore.Qt.MatchFlag]) -> None: ... + def setMaxVisibleItems(self, maxItems: int) -> None: ... + def maxVisibleItems(self) -> int: ... + highlighted: typing.ClassVar[QtCore.pyqtSignal] + activated: typing.ClassVar[QtCore.pyqtSignal] + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def eventFilter(self, o: typing.Optional[QtCore.QObject], e: typing.Optional[QtCore.QEvent]) -> bool: ... + def setWrapAround(self, wrap: bool) -> None: ... + def setCompletionPrefix(self, prefix: typing.Optional[str]) -> None: ... + def complete(self, rect: QtCore.QRect = ...) -> None: ... + def wrapAround(self) -> bool: ... + def splitPath(self, path: typing.Optional[str]) -> typing.List[str]: ... + def pathFromIndex(self, index: QtCore.QModelIndex) -> str: ... + def completionPrefix(self) -> str: ... + def completionModel(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... + def currentCompletion(self) -> str: ... + def currentIndex(self) -> QtCore.QModelIndex: ... + def currentRow(self) -> int: ... + def setCurrentRow(self, row: int) -> bool: ... + def completionCount(self) -> int: ... + def completionRole(self) -> int: ... + def setCompletionRole(self, role: int) -> None: ... + def completionColumn(self) -> int: ... + def setCompletionColumn(self, column: int) -> None: ... + def modelSorting(self) -> 'QCompleter.ModelSorting': ... + def setModelSorting(self, sorting: 'QCompleter.ModelSorting') -> None: ... + def caseSensitivity(self) -> QtCore.Qt.CaseSensitivity: ... + def setCaseSensitivity(self, caseSensitivity: QtCore.Qt.CaseSensitivity) -> None: ... + def setPopup(self, popup: typing.Optional[QAbstractItemView]) -> None: ... + def popup(self) -> typing.Optional[QAbstractItemView]: ... + def completionMode(self) -> 'QCompleter.CompletionMode': ... + def setCompletionMode(self, mode: 'QCompleter.CompletionMode') -> None: ... + def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... + def setModel(self, c: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... + def widget(self) -> typing.Optional[QWidget]: ... + def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... + + +class QDataWidgetMapper(QtCore.QObject): + + class SubmitPolicy(int): + AutoSubmit = ... # type: QDataWidgetMapper.SubmitPolicy + ManualSubmit = ... # type: QDataWidgetMapper.SubmitPolicy + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + currentIndexChanged: typing.ClassVar[QtCore.pyqtSignal] + def toPrevious(self) -> None: ... + def toNext(self) -> None: ... + def toLast(self) -> None: ... + def toFirst(self) -> None: ... + def submit(self) -> bool: ... + def setCurrentModelIndex(self, index: QtCore.QModelIndex) -> None: ... + def setCurrentIndex(self, index: int) -> None: ... + def revert(self) -> None: ... + def currentIndex(self) -> int: ... + def clearMapping(self) -> None: ... + def mappedWidgetAt(self, section: int) -> typing.Optional[QWidget]: ... + def mappedSection(self, widget: typing.Optional[QWidget]) -> int: ... + def mappedPropertyName(self, widget: typing.Optional[QWidget]) -> QtCore.QByteArray: ... + def removeMapping(self, widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def addMapping(self, widget: typing.Optional[QWidget], section: int) -> None: ... + @typing.overload + def addMapping(self, widget: typing.Optional[QWidget], section: int, propertyName: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + def submitPolicy(self) -> 'QDataWidgetMapper.SubmitPolicy': ... + def setSubmitPolicy(self, policy: 'QDataWidgetMapper.SubmitPolicy') -> None: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + def setOrientation(self, aOrientation: QtCore.Qt.Orientation) -> None: ... + def rootIndex(self) -> QtCore.QModelIndex: ... + def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... + def itemDelegate(self) -> typing.Optional[QAbstractItemDelegate]: ... + def setItemDelegate(self, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... + def model(self) -> typing.Optional[QtCore.QAbstractItemModel]: ... + def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... + + +class QDateTimeEdit(QAbstractSpinBox): + + class Section(int): + NoSection = ... # type: QDateTimeEdit.Section + AmPmSection = ... # type: QDateTimeEdit.Section + MSecSection = ... # type: QDateTimeEdit.Section + SecondSection = ... # type: QDateTimeEdit.Section + MinuteSection = ... # type: QDateTimeEdit.Section + HourSection = ... # type: QDateTimeEdit.Section + DaySection = ... # type: QDateTimeEdit.Section + MonthSection = ... # type: QDateTimeEdit.Section + YearSection = ... # type: QDateTimeEdit.Section + TimeSections_Mask = ... # type: QDateTimeEdit.Section + DateSections_Mask = ... # type: QDateTimeEdit.Section + + class Sections(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDateTimeEdit.Sections', 'QDateTimeEdit.Section']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDateTimeEdit.Sections', 'QDateTimeEdit.Section']) -> 'QDateTimeEdit.Sections': ... + def __xor__(self, f: typing.Union['QDateTimeEdit.Sections', 'QDateTimeEdit.Section']) -> 'QDateTimeEdit.Sections': ... + def __ior__(self, f: typing.Union['QDateTimeEdit.Sections', 'QDateTimeEdit.Section']) -> 'QDateTimeEdit.Sections': ... + def __or__(self, f: typing.Union['QDateTimeEdit.Sections', 'QDateTimeEdit.Section']) -> 'QDateTimeEdit.Sections': ... + def __iand__(self, f: typing.Union['QDateTimeEdit.Sections', 'QDateTimeEdit.Section']) -> 'QDateTimeEdit.Sections': ... + def __and__(self, f: typing.Union['QDateTimeEdit.Sections', 'QDateTimeEdit.Section']) -> 'QDateTimeEdit.Sections': ... + def __invert__(self) -> 'QDateTimeEdit.Sections': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, datetime: typing.Union[QtCore.QDateTime, datetime.datetime], parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, date: typing.Union[QtCore.QDate, datetime.date], parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, time: typing.Union[QtCore.QTime, datetime.time], parent: typing.Optional[QWidget] = ...) -> None: ... + + def setCalendar(self, calendar: QtCore.QCalendar) -> None: ... + def calendar(self) -> QtCore.QCalendar: ... + def setTimeSpec(self, spec: QtCore.Qt.TimeSpec) -> None: ... + def timeSpec(self) -> QtCore.Qt.TimeSpec: ... + def setCalendarWidget(self, calendarWidget: typing.Optional[QCalendarWidget]) -> None: ... + def calendarWidget(self) -> typing.Optional[QCalendarWidget]: ... + def setDateTimeRange(self, min: typing.Union[QtCore.QDateTime, datetime.datetime], max: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def setMaximumDateTime(self, dt: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def clearMaximumDateTime(self) -> None: ... + def maximumDateTime(self) -> QtCore.QDateTime: ... + def setMinimumDateTime(self, dt: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + def clearMinimumDateTime(self) -> None: ... + def minimumDateTime(self) -> QtCore.QDateTime: ... + def stepEnabled(self) -> QAbstractSpinBox.StepEnabled: ... + def textFromDateTime(self, dt: typing.Union[QtCore.QDateTime, datetime.datetime]) -> str: ... + def dateTimeFromText(self, text: typing.Optional[str]) -> QtCore.QDateTime: ... + def fixup(self, input: typing.Optional[str]) -> str: ... + def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QtGui.QValidator.State, str, int]: ... + def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionSpinBox']) -> None: ... + def setTime(self, time: typing.Union[QtCore.QTime, datetime.time]) -> None: ... + def setDate(self, date: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def setDateTime(self, dateTime: typing.Union[QtCore.QDateTime, datetime.datetime]) -> None: ... + dateChanged: typing.ClassVar[QtCore.pyqtSignal] + timeChanged: typing.ClassVar[QtCore.pyqtSignal] + dateTimeChanged: typing.ClassVar[QtCore.pyqtSignal] + def sectionCount(self) -> int: ... + def setCurrentSectionIndex(self, index: int) -> None: ... + def currentSectionIndex(self) -> int: ... + def sectionAt(self, index: int) -> 'QDateTimeEdit.Section': ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def stepBy(self, steps: int) -> None: ... + def clear(self) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def setSelectedSection(self, section: 'QDateTimeEdit.Section') -> None: ... + def setCalendarPopup(self, enable: bool) -> None: ... + def calendarPopup(self) -> bool: ... + def setDisplayFormat(self, format: typing.Optional[str]) -> None: ... + def displayFormat(self) -> str: ... + def sectionText(self, s: 'QDateTimeEdit.Section') -> str: ... + def setCurrentSection(self, section: 'QDateTimeEdit.Section') -> None: ... + def currentSection(self) -> 'QDateTimeEdit.Section': ... + def displayedSections(self) -> 'QDateTimeEdit.Sections': ... + def setTimeRange(self, min: typing.Union[QtCore.QTime, datetime.time], max: typing.Union[QtCore.QTime, datetime.time]) -> None: ... + def clearMaximumTime(self) -> None: ... + def setMaximumTime(self, max: typing.Union[QtCore.QTime, datetime.time]) -> None: ... + def maximumTime(self) -> QtCore.QTime: ... + def clearMinimumTime(self) -> None: ... + def setMinimumTime(self, min: typing.Union[QtCore.QTime, datetime.time]) -> None: ... + def minimumTime(self) -> QtCore.QTime: ... + def setDateRange(self, min: typing.Union[QtCore.QDate, datetime.date], max: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def clearMaximumDate(self) -> None: ... + def setMaximumDate(self, max: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def maximumDate(self) -> QtCore.QDate: ... + def clearMinimumDate(self) -> None: ... + def setMinimumDate(self, min: typing.Union[QtCore.QDate, datetime.date]) -> None: ... + def minimumDate(self) -> QtCore.QDate: ... + def time(self) -> QtCore.QTime: ... + def date(self) -> QtCore.QDate: ... + def dateTime(self) -> QtCore.QDateTime: ... + + +class QTimeEdit(QDateTimeEdit): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, time: typing.Union[QtCore.QTime, datetime.time], parent: typing.Optional[QWidget] = ...) -> None: ... + + +class QDateEdit(QDateTimeEdit): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, date: typing.Union[QtCore.QDate, datetime.date], parent: typing.Optional[QWidget] = ...) -> None: ... + + +class QDesktopWidget(QWidget): + + def __init__(self) -> None: ... + + def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... + primaryScreenChanged: typing.ClassVar[QtCore.pyqtSignal] + screenCountChanged: typing.ClassVar[QtCore.pyqtSignal] + workAreaResized: typing.ClassVar[QtCore.pyqtSignal] + resized: typing.ClassVar[QtCore.pyqtSignal] + @typing.overload + def availableGeometry(self, screen: int = ...) -> QtCore.QRect: ... + @typing.overload + def availableGeometry(self, widget: typing.Optional[QWidget]) -> QtCore.QRect: ... + @typing.overload + def availableGeometry(self, point: QtCore.QPoint) -> QtCore.QRect: ... + @typing.overload + def screenGeometry(self, screen: int = ...) -> QtCore.QRect: ... + @typing.overload + def screenGeometry(self, widget: typing.Optional[QWidget]) -> QtCore.QRect: ... + @typing.overload + def screenGeometry(self, point: QtCore.QPoint) -> QtCore.QRect: ... + def screenCount(self) -> int: ... + def screen(self, screen: int = ...) -> typing.Optional[QWidget]: ... + @typing.overload + def screenNumber(self, widget: typing.Optional[QWidget] = ...) -> int: ... + @typing.overload + def screenNumber(self, a0: QtCore.QPoint) -> int: ... + def primaryScreen(self) -> int: ... + def isVirtualDesktop(self) -> bool: ... + + +class QDial(QAbstractSlider): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def sliderChange(self, change: QAbstractSlider.SliderChange) -> None: ... + def mouseMoveEvent(self, me: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, me: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, me: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, pe: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def resizeEvent(self, re: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionSlider']) -> None: ... + def setWrapping(self, on: bool) -> None: ... + def setNotchesVisible(self, visible: bool) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def notchesVisible(self) -> bool: ... + def notchTarget(self) -> float: ... + def setNotchTarget(self, target: float) -> None: ... + def notchSize(self) -> int: ... + def wrapping(self) -> bool: ... + + +class QDialogButtonBox(QWidget): + + class StandardButton(int): + NoButton = ... # type: QDialogButtonBox.StandardButton + Ok = ... # type: QDialogButtonBox.StandardButton + Save = ... # type: QDialogButtonBox.StandardButton + SaveAll = ... # type: QDialogButtonBox.StandardButton + Open = ... # type: QDialogButtonBox.StandardButton + Yes = ... # type: QDialogButtonBox.StandardButton + YesToAll = ... # type: QDialogButtonBox.StandardButton + No = ... # type: QDialogButtonBox.StandardButton + NoToAll = ... # type: QDialogButtonBox.StandardButton + Abort = ... # type: QDialogButtonBox.StandardButton + Retry = ... # type: QDialogButtonBox.StandardButton + Ignore = ... # type: QDialogButtonBox.StandardButton + Close = ... # type: QDialogButtonBox.StandardButton + Cancel = ... # type: QDialogButtonBox.StandardButton + Discard = ... # type: QDialogButtonBox.StandardButton + Help = ... # type: QDialogButtonBox.StandardButton + Apply = ... # type: QDialogButtonBox.StandardButton + Reset = ... # type: QDialogButtonBox.StandardButton + RestoreDefaults = ... # type: QDialogButtonBox.StandardButton + + class ButtonRole(int): + InvalidRole = ... # type: QDialogButtonBox.ButtonRole + AcceptRole = ... # type: QDialogButtonBox.ButtonRole + RejectRole = ... # type: QDialogButtonBox.ButtonRole + DestructiveRole = ... # type: QDialogButtonBox.ButtonRole + ActionRole = ... # type: QDialogButtonBox.ButtonRole + HelpRole = ... # type: QDialogButtonBox.ButtonRole + YesRole = ... # type: QDialogButtonBox.ButtonRole + NoRole = ... # type: QDialogButtonBox.ButtonRole + ResetRole = ... # type: QDialogButtonBox.ButtonRole + ApplyRole = ... # type: QDialogButtonBox.ButtonRole + + class ButtonLayout(int): + WinLayout = ... # type: QDialogButtonBox.ButtonLayout + MacLayout = ... # type: QDialogButtonBox.ButtonLayout + KdeLayout = ... # type: QDialogButtonBox.ButtonLayout + GnomeLayout = ... # type: QDialogButtonBox.ButtonLayout + AndroidLayout = ... # type: QDialogButtonBox.ButtonLayout + + class StandardButtons(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton']) -> 'QDialogButtonBox.StandardButtons': ... + def __xor__(self, f: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton']) -> 'QDialogButtonBox.StandardButtons': ... + def __ior__(self, f: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton']) -> 'QDialogButtonBox.StandardButtons': ... + def __or__(self, f: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton']) -> 'QDialogButtonBox.StandardButtons': ... + def __iand__(self, f: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton']) -> 'QDialogButtonBox.StandardButtons': ... + def __and__(self, f: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton']) -> 'QDialogButtonBox.StandardButtons': ... + def __invert__(self) -> 'QDialogButtonBox.StandardButtons': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, buttons: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton'], parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, buttons: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton'], orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... + + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + rejected: typing.ClassVar[QtCore.pyqtSignal] + helpRequested: typing.ClassVar[QtCore.pyqtSignal] + clicked: typing.ClassVar[QtCore.pyqtSignal] + accepted: typing.ClassVar[QtCore.pyqtSignal] + def centerButtons(self) -> bool: ... + def setCenterButtons(self, center: bool) -> None: ... + def button(self, which: 'QDialogButtonBox.StandardButton') -> typing.Optional[QPushButton]: ... + def standardButton(self, button: typing.Optional[QAbstractButton]) -> 'QDialogButtonBox.StandardButton': ... + def standardButtons(self) -> 'QDialogButtonBox.StandardButtons': ... + def setStandardButtons(self, buttons: typing.Union['QDialogButtonBox.StandardButtons', 'QDialogButtonBox.StandardButton']) -> None: ... + def buttonRole(self, button: typing.Optional[QAbstractButton]) -> 'QDialogButtonBox.ButtonRole': ... + def buttons(self) -> typing.List[QAbstractButton]: ... + def clear(self) -> None: ... + def removeButton(self, button: typing.Optional[QAbstractButton]) -> None: ... + @typing.overload + def addButton(self, button: typing.Optional[QAbstractButton], role: 'QDialogButtonBox.ButtonRole') -> None: ... + @typing.overload + def addButton(self, text: typing.Optional[str], role: 'QDialogButtonBox.ButtonRole') -> typing.Optional[QPushButton]: ... + @typing.overload + def addButton(self, button: 'QDialogButtonBox.StandardButton') -> typing.Optional[QPushButton]: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + def setOrientation(self, orientation: QtCore.Qt.Orientation) -> None: ... + + +class QDirModel(QtCore.QAbstractItemModel): + + class Roles(int): + FileIconRole = ... # type: QDirModel.Roles + FilePathRole = ... # type: QDirModel.Roles + FileNameRole = ... # type: QDirModel.Roles + + @typing.overload + def __init__(self, nameFilters: typing.Iterable[typing.Optional[str]], filters: typing.Union[QtCore.QDir.Filters, QtCore.QDir.Filter], sort: typing.Union[QtCore.QDir.SortFlags, QtCore.QDir.SortFlag], parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def fileInfo(self, index: QtCore.QModelIndex) -> QtCore.QFileInfo: ... + def fileIcon(self, index: QtCore.QModelIndex) -> QtGui.QIcon: ... + def fileName(self, index: QtCore.QModelIndex) -> str: ... + def filePath(self, index: QtCore.QModelIndex) -> str: ... + def remove(self, index: QtCore.QModelIndex) -> bool: ... + def rmdir(self, index: QtCore.QModelIndex) -> bool: ... + def mkdir(self, parent: QtCore.QModelIndex, name: typing.Optional[str]) -> QtCore.QModelIndex: ... + def isDir(self, index: QtCore.QModelIndex) -> bool: ... + def refresh(self, parent: QtCore.QModelIndex = ...) -> None: ... + def lazyChildCount(self) -> bool: ... + def setLazyChildCount(self, enable: bool) -> None: ... + def isReadOnly(self) -> bool: ... + def setReadOnly(self, enable: bool) -> None: ... + def resolveSymlinks(self) -> bool: ... + def setResolveSymlinks(self, enable: bool) -> None: ... + def sorting(self) -> QtCore.QDir.SortFlags: ... + def setSorting(self, sort: typing.Union[QtCore.QDir.SortFlags, QtCore.QDir.SortFlag]) -> None: ... + def filter(self) -> QtCore.QDir.Filters: ... + def setFilter(self, filters: typing.Union[QtCore.QDir.Filters, QtCore.QDir.Filter]) -> None: ... + def nameFilters(self) -> typing.List[str]: ... + def setNameFilters(self, filters: typing.Iterable[typing.Optional[str]]) -> None: ... + def iconProvider(self) -> typing.Optional['QFileIconProvider']: ... + def setIconProvider(self, provider: typing.Optional['QFileIconProvider']) -> None: ... + def supportedDropActions(self) -> QtCore.Qt.DropActions: ... + def dropMimeData(self, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction, row: int, column: int, parent: QtCore.QModelIndex) -> bool: ... + def mimeData(self, indexes: typing.Iterable[QtCore.QModelIndex]) -> typing.Optional[QtCore.QMimeData]: ... + def mimeTypes(self) -> typing.List[str]: ... + def sort(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... + def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlags: ... + def hasChildren(self, parent: QtCore.QModelIndex = ...) -> bool: ... + def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... + def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, index: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... + def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + @typing.overload + def parent(self, child: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + @typing.overload + def parent(self) -> typing.Optional[QtCore.QObject]: ... + @typing.overload + def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... + @typing.overload + def index(self, path: typing.Optional[str], column: int = ...) -> QtCore.QModelIndex: ... + + +class QDockWidget(QWidget): + + class DockWidgetFeature(int): + DockWidgetClosable = ... # type: QDockWidget.DockWidgetFeature + DockWidgetMovable = ... # type: QDockWidget.DockWidgetFeature + DockWidgetFloatable = ... # type: QDockWidget.DockWidgetFeature + DockWidgetVerticalTitleBar = ... # type: QDockWidget.DockWidgetFeature + AllDockWidgetFeatures = ... # type: QDockWidget.DockWidgetFeature + NoDockWidgetFeatures = ... # type: QDockWidget.DockWidgetFeature + + class DockWidgetFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QDockWidget.DockWidgetFeatures', 'QDockWidget.DockWidgetFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QDockWidget.DockWidgetFeatures', 'QDockWidget.DockWidgetFeature']) -> 'QDockWidget.DockWidgetFeatures': ... + def __xor__(self, f: typing.Union['QDockWidget.DockWidgetFeatures', 'QDockWidget.DockWidgetFeature']) -> 'QDockWidget.DockWidgetFeatures': ... + def __ior__(self, f: typing.Union['QDockWidget.DockWidgetFeatures', 'QDockWidget.DockWidgetFeature']) -> 'QDockWidget.DockWidgetFeatures': ... + def __or__(self, f: typing.Union['QDockWidget.DockWidgetFeatures', 'QDockWidget.DockWidgetFeature']) -> 'QDockWidget.DockWidgetFeatures': ... + def __iand__(self, f: typing.Union['QDockWidget.DockWidgetFeatures', 'QDockWidget.DockWidgetFeature']) -> 'QDockWidget.DockWidgetFeatures': ... + def __and__(self, f: typing.Union['QDockWidget.DockWidgetFeatures', 'QDockWidget.DockWidgetFeature']) -> 'QDockWidget.DockWidgetFeatures': ... + def __invert__(self) -> 'QDockWidget.DockWidgetFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, title: typing.Optional[str], parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def closeEvent(self, event: typing.Optional[QtGui.QCloseEvent]) -> None: ... + def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionDockWidget']) -> None: ... + visibilityChanged: typing.ClassVar[QtCore.pyqtSignal] + dockLocationChanged: typing.ClassVar[QtCore.pyqtSignal] + allowedAreasChanged: typing.ClassVar[QtCore.pyqtSignal] + topLevelChanged: typing.ClassVar[QtCore.pyqtSignal] + featuresChanged: typing.ClassVar[QtCore.pyqtSignal] + def titleBarWidget(self) -> typing.Optional[QWidget]: ... + def setTitleBarWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def toggleViewAction(self) -> typing.Optional[QAction]: ... + def isAreaAllowed(self, area: QtCore.Qt.DockWidgetArea) -> bool: ... + def allowedAreas(self) -> QtCore.Qt.DockWidgetAreas: ... + def setAllowedAreas(self, areas: typing.Union[QtCore.Qt.DockWidgetAreas, QtCore.Qt.DockWidgetArea]) -> None: ... + def isFloating(self) -> bool: ... + def setFloating(self, floating: bool) -> None: ... + def features(self) -> 'QDockWidget.DockWidgetFeatures': ... + def setFeatures(self, features: typing.Union['QDockWidget.DockWidgetFeatures', 'QDockWidget.DockWidgetFeature']) -> None: ... + def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def widget(self) -> typing.Optional[QWidget]: ... + + +class QErrorMessage(QDialog): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def done(self, a0: int) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + @typing.overload + def showMessage(self, message: typing.Optional[str]) -> None: ... + @typing.overload + def showMessage(self, message: typing.Optional[str], type: typing.Optional[str]) -> None: ... + @staticmethod + def qtHandler() -> typing.Optional['QErrorMessage']: ... + + +class QFileDialog(QDialog): + + class Option(int): + ShowDirsOnly = ... # type: QFileDialog.Option + DontResolveSymlinks = ... # type: QFileDialog.Option + DontConfirmOverwrite = ... # type: QFileDialog.Option + DontUseSheet = ... # type: QFileDialog.Option + DontUseNativeDialog = ... # type: QFileDialog.Option + ReadOnly = ... # type: QFileDialog.Option + HideNameFilterDetails = ... # type: QFileDialog.Option + DontUseCustomDirectoryIcons = ... # type: QFileDialog.Option + + class DialogLabel(int): + LookIn = ... # type: QFileDialog.DialogLabel + FileName = ... # type: QFileDialog.DialogLabel + FileType = ... # type: QFileDialog.DialogLabel + Accept = ... # type: QFileDialog.DialogLabel + Reject = ... # type: QFileDialog.DialogLabel + + class AcceptMode(int): + AcceptOpen = ... # type: QFileDialog.AcceptMode + AcceptSave = ... # type: QFileDialog.AcceptMode + + class FileMode(int): + AnyFile = ... # type: QFileDialog.FileMode + ExistingFile = ... # type: QFileDialog.FileMode + Directory = ... # type: QFileDialog.FileMode + ExistingFiles = ... # type: QFileDialog.FileMode + DirectoryOnly = ... # type: QFileDialog.FileMode + + class ViewMode(int): + Detail = ... # type: QFileDialog.ViewMode + List = ... # type: QFileDialog.ViewMode + + class Options(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QFileDialog.Options', 'QFileDialog.Option']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QFileDialog.Options', 'QFileDialog.Option']) -> 'QFileDialog.Options': ... + def __xor__(self, f: typing.Union['QFileDialog.Options', 'QFileDialog.Option']) -> 'QFileDialog.Options': ... + def __ior__(self, f: typing.Union['QFileDialog.Options', 'QFileDialog.Option']) -> 'QFileDialog.Options': ... + def __or__(self, f: typing.Union['QFileDialog.Options', 'QFileDialog.Option']) -> 'QFileDialog.Options': ... + def __iand__(self, f: typing.Union['QFileDialog.Options', 'QFileDialog.Option']) -> 'QFileDialog.Options': ... + def __and__(self, f: typing.Union['QFileDialog.Options', 'QFileDialog.Option']) -> 'QFileDialog.Options': ... + def __invert__(self) -> 'QFileDialog.Options': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget], f: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType]) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., filter: typing.Optional[str] = ...) -> None: ... + + @staticmethod + def saveFileContent(fileContent: typing.Union[QtCore.QByteArray, bytes, bytearray], fileNameHint: typing.Optional[str] = ...) -> None: ... + def selectedMimeTypeFilter(self) -> str: ... + def supportedSchemes(self) -> typing.List[str]: ... + def setSupportedSchemes(self, schemes: typing.Iterable[typing.Optional[str]]) -> None: ... + @staticmethod + def getSaveFileUrl(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: QtCore.QUrl = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: typing.Union['QFileDialog.Options', 'QFileDialog.Option'] = ..., supportedSchemes: typing.Iterable[typing.Optional[str]] = ...) -> typing.Tuple[QtCore.QUrl, str]: ... + @staticmethod + def getOpenFileUrls(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: QtCore.QUrl = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: typing.Union['QFileDialog.Options', 'QFileDialog.Option'] = ..., supportedSchemes: typing.Iterable[typing.Optional[str]] = ...) -> typing.Tuple[typing.List[QtCore.QUrl], str]: ... + @staticmethod + def getOpenFileUrl(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: QtCore.QUrl = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: typing.Union['QFileDialog.Options', 'QFileDialog.Option'] = ..., supportedSchemes: typing.Iterable[typing.Optional[str]] = ...) -> typing.Tuple[QtCore.QUrl, str]: ... + directoryUrlEntered: typing.ClassVar[QtCore.pyqtSignal] + currentUrlChanged: typing.ClassVar[QtCore.pyqtSignal] + urlsSelected: typing.ClassVar[QtCore.pyqtSignal] + urlSelected: typing.ClassVar[QtCore.pyqtSignal] + def selectMimeTypeFilter(self, filter: typing.Optional[str]) -> None: ... + def mimeTypeFilters(self) -> typing.List[str]: ... + def setMimeTypeFilters(self, filters: typing.Iterable[typing.Optional[str]]) -> None: ... + def selectedUrls(self) -> typing.List[QtCore.QUrl]: ... + def selectUrl(self, url: QtCore.QUrl) -> None: ... + def directoryUrl(self) -> QtCore.QUrl: ... + def setDirectoryUrl(self, directory: QtCore.QUrl) -> None: ... + def setVisible(self, visible: bool) -> None: ... + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def options(self) -> 'QFileDialog.Options': ... + def setOptions(self, options: typing.Union['QFileDialog.Options', 'QFileDialog.Option']) -> None: ... + def testOption(self, option: 'QFileDialog.Option') -> bool: ... + def setOption(self, option: 'QFileDialog.Option', on: bool = ...) -> None: ... + def setFilter(self, filters: typing.Union[QtCore.QDir.Filters, QtCore.QDir.Filter]) -> None: ... + def filter(self) -> QtCore.QDir.Filters: ... + def selectedNameFilter(self) -> str: ... + def selectNameFilter(self, filter: typing.Optional[str]) -> None: ... + def nameFilters(self) -> typing.List[str]: ... + def setNameFilters(self, filters: typing.Iterable[typing.Optional[str]]) -> None: ... + def setNameFilter(self, filter: typing.Optional[str]) -> None: ... + def proxyModel(self) -> typing.Optional[QtCore.QAbstractProxyModel]: ... + def setProxyModel(self, model: typing.Optional[QtCore.QAbstractProxyModel]) -> None: ... + def restoreState(self, state: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def saveState(self) -> QtCore.QByteArray: ... + def sidebarUrls(self) -> typing.List[QtCore.QUrl]: ... + def setSidebarUrls(self, urls: typing.Iterable[QtCore.QUrl]) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + def accept(self) -> None: ... + def done(self, result: int) -> None: ... + @staticmethod + def getSaveFileName(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: typing.Union['QFileDialog.Options', 'QFileDialog.Option'] = ...) -> typing.Tuple[str, str]: ... + @staticmethod + def getOpenFileNames(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: typing.Union['QFileDialog.Options', 'QFileDialog.Option'] = ...) -> typing.Tuple[typing.List[str], str]: ... + @staticmethod + def getOpenFileName(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., filter: typing.Optional[str] = ..., initialFilter: typing.Optional[str] = ..., options: typing.Union['QFileDialog.Options', 'QFileDialog.Option'] = ...) -> typing.Tuple[str, str]: ... + @staticmethod + def getExistingDirectoryUrl(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: QtCore.QUrl = ..., options: typing.Union['QFileDialog.Options', 'QFileDialog.Option'] = ..., supportedSchemes: typing.Iterable[typing.Optional[str]] = ...) -> QtCore.QUrl: ... + @staticmethod + def getExistingDirectory(parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., directory: typing.Optional[str] = ..., options: typing.Union['QFileDialog.Options', 'QFileDialog.Option'] = ...) -> str: ... + fileSelected: typing.ClassVar[QtCore.pyqtSignal] + filterSelected: typing.ClassVar[QtCore.pyqtSignal] + filesSelected: typing.ClassVar[QtCore.pyqtSignal] + directoryEntered: typing.ClassVar[QtCore.pyqtSignal] + currentChanged: typing.ClassVar[QtCore.pyqtSignal] + def labelText(self, label: 'QFileDialog.DialogLabel') -> str: ... + def setLabelText(self, label: 'QFileDialog.DialogLabel', text: typing.Optional[str]) -> None: ... + def iconProvider(self) -> typing.Optional['QFileIconProvider']: ... + def setIconProvider(self, provider: typing.Optional['QFileIconProvider']) -> None: ... + def itemDelegate(self) -> typing.Optional[QAbstractItemDelegate]: ... + def setItemDelegate(self, delegate: typing.Optional[QAbstractItemDelegate]) -> None: ... + def history(self) -> typing.List[str]: ... + def setHistory(self, paths: typing.Iterable[typing.Optional[str]]) -> None: ... + def defaultSuffix(self) -> str: ... + def setDefaultSuffix(self, suffix: typing.Optional[str]) -> None: ... + def acceptMode(self) -> 'QFileDialog.AcceptMode': ... + def setAcceptMode(self, mode: 'QFileDialog.AcceptMode') -> None: ... + def fileMode(self) -> 'QFileDialog.FileMode': ... + def setFileMode(self, mode: 'QFileDialog.FileMode') -> None: ... + def viewMode(self) -> 'QFileDialog.ViewMode': ... + def setViewMode(self, mode: 'QFileDialog.ViewMode') -> None: ... + def selectedFiles(self) -> typing.List[str]: ... + def selectFile(self, filename: typing.Optional[str]) -> None: ... + def directory(self) -> QtCore.QDir: ... + @typing.overload + def setDirectory(self, directory: typing.Optional[str]) -> None: ... + @typing.overload + def setDirectory(self, adirectory: QtCore.QDir) -> None: ... + + +class QFileIconProvider(PyQt5.sipsimplewrapper): + + class Option(int): + DontUseCustomDirectoryIcons = ... # type: QFileIconProvider.Option + + class IconType(int): + Computer = ... # type: QFileIconProvider.IconType + Desktop = ... # type: QFileIconProvider.IconType + Trashcan = ... # type: QFileIconProvider.IconType + Network = ... # type: QFileIconProvider.IconType + Drive = ... # type: QFileIconProvider.IconType + Folder = ... # type: QFileIconProvider.IconType + File = ... # type: QFileIconProvider.IconType + + class Options(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QFileIconProvider.Options', 'QFileIconProvider.Option']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QFileIconProvider.Options', 'QFileIconProvider.Option']) -> 'QFileIconProvider.Options': ... + def __xor__(self, f: typing.Union['QFileIconProvider.Options', 'QFileIconProvider.Option']) -> 'QFileIconProvider.Options': ... + def __ior__(self, f: typing.Union['QFileIconProvider.Options', 'QFileIconProvider.Option']) -> 'QFileIconProvider.Options': ... + def __or__(self, f: typing.Union['QFileIconProvider.Options', 'QFileIconProvider.Option']) -> 'QFileIconProvider.Options': ... + def __iand__(self, f: typing.Union['QFileIconProvider.Options', 'QFileIconProvider.Option']) -> 'QFileIconProvider.Options': ... + def __and__(self, f: typing.Union['QFileIconProvider.Options', 'QFileIconProvider.Option']) -> 'QFileIconProvider.Options': ... + def __invert__(self) -> 'QFileIconProvider.Options': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self) -> None: ... + + def options(self) -> 'QFileIconProvider.Options': ... + def setOptions(self, options: typing.Union['QFileIconProvider.Options', 'QFileIconProvider.Option']) -> None: ... + def type(self, info: QtCore.QFileInfo) -> str: ... + @typing.overload + def icon(self, type: 'QFileIconProvider.IconType') -> QtGui.QIcon: ... + @typing.overload + def icon(self, info: QtCore.QFileInfo) -> QtGui.QIcon: ... + + +class QFileSystemModel(QtCore.QAbstractItemModel): + + class Option(int): + DontWatchForChanges = ... # type: QFileSystemModel.Option + DontResolveSymlinks = ... # type: QFileSystemModel.Option + DontUseCustomDirectoryIcons = ... # type: QFileSystemModel.Option + + class Roles(int): + FileIconRole = ... # type: QFileSystemModel.Roles + FilePathRole = ... # type: QFileSystemModel.Roles + FileNameRole = ... # type: QFileSystemModel.Roles + FilePermissions = ... # type: QFileSystemModel.Roles + + class Options(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QFileSystemModel.Options', 'QFileSystemModel.Option']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QFileSystemModel.Options', 'QFileSystemModel.Option']) -> 'QFileSystemModel.Options': ... + def __xor__(self, f: typing.Union['QFileSystemModel.Options', 'QFileSystemModel.Option']) -> 'QFileSystemModel.Options': ... + def __ior__(self, f: typing.Union['QFileSystemModel.Options', 'QFileSystemModel.Option']) -> 'QFileSystemModel.Options': ... + def __or__(self, f: typing.Union['QFileSystemModel.Options', 'QFileSystemModel.Option']) -> 'QFileSystemModel.Options': ... + def __iand__(self, f: typing.Union['QFileSystemModel.Options', 'QFileSystemModel.Option']) -> 'QFileSystemModel.Options': ... + def __and__(self, f: typing.Union['QFileSystemModel.Options', 'QFileSystemModel.Option']) -> 'QFileSystemModel.Options': ... + def __invert__(self) -> 'QFileSystemModel.Options': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def options(self) -> 'QFileSystemModel.Options': ... + def setOptions(self, options: typing.Union['QFileSystemModel.Options', 'QFileSystemModel.Option']) -> None: ... + def testOption(self, option: 'QFileSystemModel.Option') -> bool: ... + def setOption(self, option: 'QFileSystemModel.Option', on: bool = ...) -> None: ... + def sibling(self, row: int, column: int, idx: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + directoryLoaded: typing.ClassVar[QtCore.pyqtSignal] + rootPathChanged: typing.ClassVar[QtCore.pyqtSignal] + fileRenamed: typing.ClassVar[QtCore.pyqtSignal] + def remove(self, index: QtCore.QModelIndex) -> bool: ... + def fileInfo(self, aindex: QtCore.QModelIndex) -> QtCore.QFileInfo: ... + def fileIcon(self, aindex: QtCore.QModelIndex) -> QtGui.QIcon: ... + def fileName(self, aindex: QtCore.QModelIndex) -> str: ... + def rmdir(self, index: QtCore.QModelIndex) -> bool: ... + def permissions(self, index: QtCore.QModelIndex) -> QtCore.QFileDevice.Permissions: ... + def mkdir(self, parent: QtCore.QModelIndex, name: typing.Optional[str]) -> QtCore.QModelIndex: ... + def lastModified(self, index: QtCore.QModelIndex) -> QtCore.QDateTime: ... + def type(self, index: QtCore.QModelIndex) -> str: ... + def size(self, index: QtCore.QModelIndex) -> int: ... + def isDir(self, index: QtCore.QModelIndex) -> bool: ... + def filePath(self, index: QtCore.QModelIndex) -> str: ... + def nameFilters(self) -> typing.List[str]: ... + def setNameFilters(self, filters: typing.Iterable[typing.Optional[str]]) -> None: ... + def nameFilterDisables(self) -> bool: ... + def setNameFilterDisables(self, enable: bool) -> None: ... + def isReadOnly(self) -> bool: ... + def setReadOnly(self, enable: bool) -> None: ... + def resolveSymlinks(self) -> bool: ... + def setResolveSymlinks(self, enable: bool) -> None: ... + def filter(self) -> QtCore.QDir.Filters: ... + def setFilter(self, filters: typing.Union[QtCore.QDir.Filters, QtCore.QDir.Filter]) -> None: ... + def iconProvider(self) -> typing.Optional[QFileIconProvider]: ... + def setIconProvider(self, provider: typing.Optional[QFileIconProvider]) -> None: ... + def rootDirectory(self) -> QtCore.QDir: ... + def rootPath(self) -> str: ... + def setRootPath(self, path: typing.Optional[str]) -> QtCore.QModelIndex: ... + def supportedDropActions(self) -> QtCore.Qt.DropActions: ... + def dropMimeData(self, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction, row: int, column: int, parent: QtCore.QModelIndex) -> bool: ... + def mimeData(self, indexes: typing.Iterable[QtCore.QModelIndex]) -> typing.Optional[QtCore.QMimeData]: ... + def mimeTypes(self) -> typing.List[str]: ... + def sort(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... + def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlags: ... + def headerData(self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...) -> typing.Any: ... + def setData(self, index: QtCore.QModelIndex, value: typing.Any, role: int = ...) -> bool: ... + def data(self, index: QtCore.QModelIndex, role: int = ...) -> typing.Any: ... + def myComputer(self, role: int = ...) -> typing.Any: ... + def columnCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def rowCount(self, parent: QtCore.QModelIndex = ...) -> int: ... + def fetchMore(self, parent: QtCore.QModelIndex) -> None: ... + def canFetchMore(self, parent: QtCore.QModelIndex) -> bool: ... + def hasChildren(self, parent: QtCore.QModelIndex = ...) -> bool: ... + def parent(self, child: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + @typing.overload + def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex: ... + @typing.overload + def index(self, path: typing.Optional[str], column: int = ...) -> QtCore.QModelIndex: ... + + +class QFocusFrame(QWidget): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def initStyleOption(self, option: typing.Optional['QStyleOption']) -> None: ... + def widget(self) -> typing.Optional[QWidget]: ... + def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... + + +class QFontComboBox(QComboBox): + + class FontFilter(int): + AllFonts = ... # type: QFontComboBox.FontFilter + ScalableFonts = ... # type: QFontComboBox.FontFilter + NonScalableFonts = ... # type: QFontComboBox.FontFilter + MonospacedFonts = ... # type: QFontComboBox.FontFilter + ProportionalFonts = ... # type: QFontComboBox.FontFilter + + class FontFilters(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QFontComboBox.FontFilters', 'QFontComboBox.FontFilter']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QFontComboBox.FontFilters', 'QFontComboBox.FontFilter']) -> 'QFontComboBox.FontFilters': ... + def __xor__(self, f: typing.Union['QFontComboBox.FontFilters', 'QFontComboBox.FontFilter']) -> 'QFontComboBox.FontFilters': ... + def __ior__(self, f: typing.Union['QFontComboBox.FontFilters', 'QFontComboBox.FontFilter']) -> 'QFontComboBox.FontFilters': ... + def __or__(self, f: typing.Union['QFontComboBox.FontFilters', 'QFontComboBox.FontFilter']) -> 'QFontComboBox.FontFilters': ... + def __iand__(self, f: typing.Union['QFontComboBox.FontFilters', 'QFontComboBox.FontFilter']) -> 'QFontComboBox.FontFilters': ... + def __and__(self, f: typing.Union['QFontComboBox.FontFilters', 'QFontComboBox.FontFilter']) -> 'QFontComboBox.FontFilters': ... + def __invert__(self) -> 'QFontComboBox.FontFilters': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + currentFontChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCurrentFont(self, f: QtGui.QFont) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def currentFont(self) -> QtGui.QFont: ... + def setFontFilters(self, filters: typing.Union['QFontComboBox.FontFilters', 'QFontComboBox.FontFilter']) -> None: ... + def writingSystem(self) -> QtGui.QFontDatabase.WritingSystem: ... + def setWritingSystem(self, a0: QtGui.QFontDatabase.WritingSystem) -> None: ... + def fontFilters(self) -> 'QFontComboBox.FontFilters': ... + + +class QFontDialog(QDialog): + + class FontDialogOption(int): + NoButtons = ... # type: QFontDialog.FontDialogOption + DontUseNativeDialog = ... # type: QFontDialog.FontDialogOption + ScalableFonts = ... # type: QFontDialog.FontDialogOption + NonScalableFonts = ... # type: QFontDialog.FontDialogOption + MonospacedFonts = ... # type: QFontDialog.FontDialogOption + ProportionalFonts = ... # type: QFontDialog.FontDialogOption + + class FontDialogOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption']) -> 'QFontDialog.FontDialogOptions': ... + def __xor__(self, f: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption']) -> 'QFontDialog.FontDialogOptions': ... + def __ior__(self, f: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption']) -> 'QFontDialog.FontDialogOptions': ... + def __or__(self, f: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption']) -> 'QFontDialog.FontDialogOptions': ... + def __iand__(self, f: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption']) -> 'QFontDialog.FontDialogOptions': ... + def __and__(self, f: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption']) -> 'QFontDialog.FontDialogOptions': ... + def __invert__(self) -> 'QFontDialog.FontDialogOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, initial: QtGui.QFont, parent: typing.Optional[QWidget] = ...) -> None: ... + + fontSelected: typing.ClassVar[QtCore.pyqtSignal] + currentFontChanged: typing.ClassVar[QtCore.pyqtSignal] + def setVisible(self, visible: bool) -> None: ... + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def options(self) -> 'QFontDialog.FontDialogOptions': ... + def setOptions(self, options: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption']) -> None: ... + def testOption(self, option: 'QFontDialog.FontDialogOption') -> bool: ... + def setOption(self, option: 'QFontDialog.FontDialogOption', on: bool = ...) -> None: ... + def selectedFont(self) -> QtGui.QFont: ... + def currentFont(self) -> QtGui.QFont: ... + def setCurrentFont(self, font: QtGui.QFont) -> None: ... + def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def done(self, result: int) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + @typing.overload + @staticmethod + def getFont(initial: QtGui.QFont, parent: typing.Optional[QWidget] = ..., caption: typing.Optional[str] = ..., options: typing.Union['QFontDialog.FontDialogOptions', 'QFontDialog.FontDialogOption'] = ...) -> typing.Tuple[QtGui.QFont, typing.Optional[bool]]: ... + @typing.overload + @staticmethod + def getFont(parent: typing.Optional[QWidget] = ...) -> typing.Tuple[QtGui.QFont, typing.Optional[bool]]: ... + + +class QFormLayout(QLayout): + + class ItemRole(int): + LabelRole = ... # type: QFormLayout.ItemRole + FieldRole = ... # type: QFormLayout.ItemRole + SpanningRole = ... # type: QFormLayout.ItemRole + + class RowWrapPolicy(int): + DontWrapRows = ... # type: QFormLayout.RowWrapPolicy + WrapLongRows = ... # type: QFormLayout.RowWrapPolicy + WrapAllRows = ... # type: QFormLayout.RowWrapPolicy + + class FieldGrowthPolicy(int): + FieldsStayAtSizeHint = ... # type: QFormLayout.FieldGrowthPolicy + ExpandingFieldsGrow = ... # type: QFormLayout.FieldGrowthPolicy + AllNonFixedFieldsGrow = ... # type: QFormLayout.FieldGrowthPolicy + + class TakeRowResult(PyQt5.sipsimplewrapper): + + fieldItem = ... # type: QLayoutItem + labelItem = ... # type: QLayoutItem + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QFormLayout.TakeRowResult') -> None: ... + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + @typing.overload + def takeRow(self, row: int) -> 'QFormLayout.TakeRowResult': ... + @typing.overload + def takeRow(self, widget: typing.Optional[QWidget]) -> 'QFormLayout.TakeRowResult': ... + @typing.overload + def takeRow(self, layout: typing.Optional[QLayout]) -> 'QFormLayout.TakeRowResult': ... + @typing.overload + def removeRow(self, row: int) -> None: ... + @typing.overload + def removeRow(self, widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def removeRow(self, layout: typing.Optional[QLayout]) -> None: ... + def rowCount(self) -> int: ... + def count(self) -> int: ... + def expandingDirections(self) -> QtCore.Qt.Orientations: ... + def heightForWidth(self, width: int) -> int: ... + def hasHeightForWidth(self) -> bool: ... + def invalidate(self) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def setGeometry(self, rect: QtCore.QRect) -> None: ... + def takeAt(self, index: int) -> typing.Optional[QLayoutItem]: ... + def addItem(self, item: typing.Optional[QLayoutItem]) -> None: ... + @typing.overload + def labelForField(self, field: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... + @typing.overload + def labelForField(self, field: typing.Optional[QLayout]) -> typing.Optional[QWidget]: ... + def getLayoutPosition(self, layout: typing.Optional[QLayout]) -> typing.Tuple[typing.Optional[int], typing.Optional['QFormLayout.ItemRole']]: ... + def getWidgetPosition(self, widget: typing.Optional[QWidget]) -> typing.Tuple[typing.Optional[int], typing.Optional['QFormLayout.ItemRole']]: ... + def getItemPosition(self, index: int) -> typing.Tuple[typing.Optional[int], typing.Optional['QFormLayout.ItemRole']]: ... + @typing.overload + def itemAt(self, row: int, role: 'QFormLayout.ItemRole') -> typing.Optional[QLayoutItem]: ... + @typing.overload + def itemAt(self, index: int) -> typing.Optional[QLayoutItem]: ... + def setLayout(self, row: int, role: 'QFormLayout.ItemRole', layout: typing.Optional[QLayout]) -> None: ... + def setWidget(self, row: int, role: 'QFormLayout.ItemRole', widget: typing.Optional[QWidget]) -> None: ... + def setItem(self, row: int, role: 'QFormLayout.ItemRole', item: typing.Optional[QLayoutItem]) -> None: ... + @typing.overload + def insertRow(self, row: int, label: typing.Optional[QWidget], field: typing.Optional[QWidget]) -> None: ... + @typing.overload + def insertRow(self, row: int, label: typing.Optional[QWidget], field: typing.Optional[QLayout]) -> None: ... + @typing.overload + def insertRow(self, row: int, labelText: typing.Optional[str], field: typing.Optional[QWidget]) -> None: ... + @typing.overload + def insertRow(self, row: int, labelText: typing.Optional[str], field: typing.Optional[QLayout]) -> None: ... + @typing.overload + def insertRow(self, row: int, widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def insertRow(self, row: int, layout: typing.Optional[QLayout]) -> None: ... + @typing.overload + def addRow(self, label: typing.Optional[QWidget], field: typing.Optional[QWidget]) -> None: ... + @typing.overload + def addRow(self, label: typing.Optional[QWidget], field: typing.Optional[QLayout]) -> None: ... + @typing.overload + def addRow(self, labelText: typing.Optional[str], field: typing.Optional[QWidget]) -> None: ... + @typing.overload + def addRow(self, labelText: typing.Optional[str], field: typing.Optional[QLayout]) -> None: ... + @typing.overload + def addRow(self, widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def addRow(self, layout: typing.Optional[QLayout]) -> None: ... + def setSpacing(self, a0: int) -> None: ... + def spacing(self) -> int: ... + def verticalSpacing(self) -> int: ... + def setVerticalSpacing(self, spacing: int) -> None: ... + def horizontalSpacing(self) -> int: ... + def setHorizontalSpacing(self, spacing: int) -> None: ... + def formAlignment(self) -> QtCore.Qt.Alignment: ... + def setFormAlignment(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def labelAlignment(self) -> QtCore.Qt.Alignment: ... + def setLabelAlignment(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def rowWrapPolicy(self) -> 'QFormLayout.RowWrapPolicy': ... + def setRowWrapPolicy(self, policy: 'QFormLayout.RowWrapPolicy') -> None: ... + def fieldGrowthPolicy(self) -> 'QFormLayout.FieldGrowthPolicy': ... + def setFieldGrowthPolicy(self, policy: 'QFormLayout.FieldGrowthPolicy') -> None: ... + + +class QGesture(QtCore.QObject): + + class GestureCancelPolicy(int): + CancelNone = ... # type: QGesture.GestureCancelPolicy + CancelAllInContext = ... # type: QGesture.GestureCancelPolicy + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def gestureCancelPolicy(self) -> 'QGesture.GestureCancelPolicy': ... + def setGestureCancelPolicy(self, policy: 'QGesture.GestureCancelPolicy') -> None: ... + def unsetHotSpot(self) -> None: ... + def hasHotSpot(self) -> bool: ... + def setHotSpot(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def hotSpot(self) -> QtCore.QPointF: ... + def state(self) -> QtCore.Qt.GestureState: ... + def gestureType(self) -> QtCore.Qt.GestureType: ... + + +class QPanGesture(QGesture): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setAcceleration(self, value: float) -> None: ... + def setOffset(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def setLastOffset(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def acceleration(self) -> float: ... + def delta(self) -> QtCore.QPointF: ... + def offset(self) -> QtCore.QPointF: ... + def lastOffset(self) -> QtCore.QPointF: ... + + +class QPinchGesture(QGesture): + + class ChangeFlag(int): + ScaleFactorChanged = ... # type: QPinchGesture.ChangeFlag + RotationAngleChanged = ... # type: QPinchGesture.ChangeFlag + CenterPointChanged = ... # type: QPinchGesture.ChangeFlag + + class ChangeFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> 'QPinchGesture.ChangeFlags': ... + def __xor__(self, f: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> 'QPinchGesture.ChangeFlags': ... + def __ior__(self, f: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> 'QPinchGesture.ChangeFlags': ... + def __or__(self, f: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> 'QPinchGesture.ChangeFlags': ... + def __iand__(self, f: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> 'QPinchGesture.ChangeFlags': ... + def __and__(self, f: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> 'QPinchGesture.ChangeFlags': ... + def __invert__(self) -> 'QPinchGesture.ChangeFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setRotationAngle(self, value: float) -> None: ... + def setLastRotationAngle(self, value: float) -> None: ... + def setTotalRotationAngle(self, value: float) -> None: ... + def rotationAngle(self) -> float: ... + def lastRotationAngle(self) -> float: ... + def totalRotationAngle(self) -> float: ... + def setScaleFactor(self, value: float) -> None: ... + def setLastScaleFactor(self, value: float) -> None: ... + def setTotalScaleFactor(self, value: float) -> None: ... + def scaleFactor(self) -> float: ... + def lastScaleFactor(self) -> float: ... + def totalScaleFactor(self) -> float: ... + def setCenterPoint(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def setLastCenterPoint(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def setStartCenterPoint(self, value: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def centerPoint(self) -> QtCore.QPointF: ... + def lastCenterPoint(self) -> QtCore.QPointF: ... + def startCenterPoint(self) -> QtCore.QPointF: ... + def setChangeFlags(self, value: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> None: ... + def changeFlags(self) -> 'QPinchGesture.ChangeFlags': ... + def setTotalChangeFlags(self, value: typing.Union['QPinchGesture.ChangeFlags', 'QPinchGesture.ChangeFlag']) -> None: ... + def totalChangeFlags(self) -> 'QPinchGesture.ChangeFlags': ... + + +class QSwipeGesture(QGesture): + + class SwipeDirection(int): + NoDirection = ... # type: QSwipeGesture.SwipeDirection + Left = ... # type: QSwipeGesture.SwipeDirection + Right = ... # type: QSwipeGesture.SwipeDirection + Up = ... # type: QSwipeGesture.SwipeDirection + Down = ... # type: QSwipeGesture.SwipeDirection + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setSwipeAngle(self, value: float) -> None: ... + def swipeAngle(self) -> float: ... + def verticalDirection(self) -> 'QSwipeGesture.SwipeDirection': ... + def horizontalDirection(self) -> 'QSwipeGesture.SwipeDirection': ... + + +class QTapGesture(QGesture): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setPosition(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def position(self) -> QtCore.QPointF: ... + + +class QTapAndHoldGesture(QGesture): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + @staticmethod + def timeout() -> int: ... + @staticmethod + def setTimeout(msecs: int) -> None: ... + def setPosition(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + def position(self) -> QtCore.QPointF: ... + + +class QGestureEvent(QtCore.QEvent): + + @typing.overload + def __init__(self, gestures: typing.Iterable[QGesture]) -> None: ... + @typing.overload + def __init__(self, a0: 'QGestureEvent') -> None: ... + + def mapToGraphicsScene(self, gesturePoint: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + def widget(self) -> typing.Optional[QWidget]: ... + @typing.overload + def ignore(self) -> None: ... + @typing.overload + def ignore(self, a0: typing.Optional[QGesture]) -> None: ... + @typing.overload + def ignore(self, a0: QtCore.Qt.GestureType) -> None: ... + @typing.overload + def accept(self) -> None: ... + @typing.overload + def accept(self, a0: typing.Optional[QGesture]) -> None: ... + @typing.overload + def accept(self, a0: QtCore.Qt.GestureType) -> None: ... + @typing.overload + def isAccepted(self) -> bool: ... + @typing.overload + def isAccepted(self, a0: typing.Optional[QGesture]) -> bool: ... + @typing.overload + def isAccepted(self, a0: QtCore.Qt.GestureType) -> bool: ... + @typing.overload + def setAccepted(self, accepted: bool) -> None: ... + @typing.overload + def setAccepted(self, a0: typing.Optional[QGesture], a1: bool) -> None: ... + @typing.overload + def setAccepted(self, a0: QtCore.Qt.GestureType, a1: bool) -> None: ... + def canceledGestures(self) -> typing.List[QGesture]: ... + def activeGestures(self) -> typing.List[QGesture]: ... + def gesture(self, type: QtCore.Qt.GestureType) -> typing.Optional[QGesture]: ... + def gestures(self) -> typing.List[QGesture]: ... + + +class QGestureRecognizer(PyQt5.sip.wrapper): + + class ResultFlag(int): + Ignore = ... # type: QGestureRecognizer.ResultFlag + MayBeGesture = ... # type: QGestureRecognizer.ResultFlag + TriggerGesture = ... # type: QGestureRecognizer.ResultFlag + FinishGesture = ... # type: QGestureRecognizer.ResultFlag + CancelGesture = ... # type: QGestureRecognizer.ResultFlag + ConsumeEventHint = ... # type: QGestureRecognizer.ResultFlag + + class Result(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGestureRecognizer.Result', 'QGestureRecognizer.ResultFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGestureRecognizer.Result', 'QGestureRecognizer.ResultFlag']) -> 'QGestureRecognizer.Result': ... + def __xor__(self, f: typing.Union['QGestureRecognizer.Result', 'QGestureRecognizer.ResultFlag']) -> 'QGestureRecognizer.Result': ... + def __ior__(self, f: typing.Union['QGestureRecognizer.Result', 'QGestureRecognizer.ResultFlag']) -> 'QGestureRecognizer.Result': ... + def __or__(self, f: typing.Union['QGestureRecognizer.Result', 'QGestureRecognizer.ResultFlag']) -> 'QGestureRecognizer.Result': ... + def __iand__(self, f: typing.Union['QGestureRecognizer.Result', 'QGestureRecognizer.ResultFlag']) -> 'QGestureRecognizer.Result': ... + def __and__(self, f: typing.Union['QGestureRecognizer.Result', 'QGestureRecognizer.ResultFlag']) -> 'QGestureRecognizer.Result': ... + def __invert__(self) -> 'QGestureRecognizer.Result': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QGestureRecognizer') -> None: ... + + @staticmethod + def unregisterRecognizer(type: QtCore.Qt.GestureType) -> None: ... + @staticmethod + def registerRecognizer(recognizer: typing.Optional['QGestureRecognizer']) -> QtCore.Qt.GestureType: ... + def reset(self, state: typing.Optional[QGesture]) -> None: ... + def recognize(self, state: typing.Optional[QGesture], watched: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> 'QGestureRecognizer.Result': ... + def create(self, target: typing.Optional[QtCore.QObject]) -> typing.Optional[QGesture]: ... + + +class QGraphicsAnchor(QtCore.QObject): + + def sizePolicy(self) -> 'QSizePolicy.Policy': ... + def setSizePolicy(self, policy: 'QSizePolicy.Policy') -> None: ... + def spacing(self) -> float: ... + def unsetSpacing(self) -> None: ... + def setSpacing(self, spacing: float) -> None: ... + + +class QGraphicsLayoutItem(PyQt5.sip.wrapper): + + def __init__(self, parent: typing.Optional['QGraphicsLayoutItem'] = ..., isLayout: bool = ...) -> None: ... + + def setOwnedByLayout(self, ownedByLayout: bool) -> None: ... + def setGraphicsItem(self, item: typing.Optional['QGraphicsItem']) -> None: ... + def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... + def ownedByLayout(self) -> bool: ... + def graphicsItem(self) -> typing.Optional['QGraphicsItem']: ... + def maximumHeight(self) -> float: ... + def maximumWidth(self) -> float: ... + def preferredHeight(self) -> float: ... + def preferredWidth(self) -> float: ... + def minimumHeight(self) -> float: ... + def minimumWidth(self) -> float: ... + def isLayout(self) -> bool: ... + def setParentLayoutItem(self, parent: typing.Optional['QGraphicsLayoutItem']) -> None: ... + def parentLayoutItem(self) -> typing.Optional['QGraphicsLayoutItem']: ... + def updateGeometry(self) -> None: ... + def effectiveSizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... + def contentsRect(self) -> QtCore.QRectF: ... + def getContentsMargins(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + def geometry(self) -> QtCore.QRectF: ... + def setGeometry(self, rect: QtCore.QRectF) -> None: ... + def setMaximumHeight(self, height: float) -> None: ... + def setMaximumWidth(self, width: float) -> None: ... + def maximumSize(self) -> QtCore.QSizeF: ... + @typing.overload + def setMaximumSize(self, size: QtCore.QSizeF) -> None: ... + @typing.overload + def setMaximumSize(self, aw: float, ah: float) -> None: ... + def setPreferredHeight(self, height: float) -> None: ... + def setPreferredWidth(self, width: float) -> None: ... + def preferredSize(self) -> QtCore.QSizeF: ... + @typing.overload + def setPreferredSize(self, size: QtCore.QSizeF) -> None: ... + @typing.overload + def setPreferredSize(self, aw: float, ah: float) -> None: ... + def setMinimumHeight(self, height: float) -> None: ... + def setMinimumWidth(self, width: float) -> None: ... + def minimumSize(self) -> QtCore.QSizeF: ... + @typing.overload + def setMinimumSize(self, size: QtCore.QSizeF) -> None: ... + @typing.overload + def setMinimumSize(self, aw: float, ah: float) -> None: ... + def sizePolicy(self) -> 'QSizePolicy': ... + @typing.overload + def setSizePolicy(self, policy: 'QSizePolicy') -> None: ... + @typing.overload + def setSizePolicy(self, hPolicy: 'QSizePolicy.Policy', vPolicy: 'QSizePolicy.Policy', controlType: 'QSizePolicy.ControlType' = ...) -> None: ... + + +class QGraphicsLayout(QGraphicsLayoutItem): + + def __init__(self, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... + + def addChildLayoutItem(self, layoutItem: typing.Optional[QGraphicsLayoutItem]) -> None: ... + def updateGeometry(self) -> None: ... + def removeAt(self, index: int) -> None: ... + def itemAt(self, i: int) -> typing.Optional[QGraphicsLayoutItem]: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def widgetEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + def invalidate(self) -> None: ... + def isActivated(self) -> bool: ... + def activate(self) -> None: ... + def getContentsMargins(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + def setContentsMargins(self, left: float, top: float, right: float, bottom: float) -> None: ... + + +class QGraphicsAnchorLayout(QGraphicsLayout): + + def __init__(self, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... + + def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... + def invalidate(self) -> None: ... + def itemAt(self, index: int) -> typing.Optional[QGraphicsLayoutItem]: ... + def count(self) -> int: ... + def setGeometry(self, rect: QtCore.QRectF) -> None: ... + def removeAt(self, index: int) -> None: ... + def verticalSpacing(self) -> float: ... + def horizontalSpacing(self) -> float: ... + def setSpacing(self, spacing: float) -> None: ... + def setVerticalSpacing(self, spacing: float) -> None: ... + def setHorizontalSpacing(self, spacing: float) -> None: ... + def addAnchors(self, firstItem: typing.Optional[QGraphicsLayoutItem], secondItem: typing.Optional[QGraphicsLayoutItem], orientations: typing.Union[QtCore.Qt.Orientations, QtCore.Qt.Orientation] = ...) -> None: ... + def addCornerAnchors(self, firstItem: typing.Optional[QGraphicsLayoutItem], firstCorner: QtCore.Qt.Corner, secondItem: typing.Optional[QGraphicsLayoutItem], secondCorner: QtCore.Qt.Corner) -> None: ... + def anchor(self, firstItem: typing.Optional[QGraphicsLayoutItem], firstEdge: QtCore.Qt.AnchorPoint, secondItem: typing.Optional[QGraphicsLayoutItem], secondEdge: QtCore.Qt.AnchorPoint) -> typing.Optional[QGraphicsAnchor]: ... + def addAnchor(self, firstItem: typing.Optional[QGraphicsLayoutItem], firstEdge: QtCore.Qt.AnchorPoint, secondItem: typing.Optional[QGraphicsLayoutItem], secondEdge: QtCore.Qt.AnchorPoint) -> typing.Optional[QGraphicsAnchor]: ... + + +class QGraphicsEffect(QtCore.QObject): + + class PixmapPadMode(int): + NoPad = ... # type: QGraphicsEffect.PixmapPadMode + PadToTransparentBorder = ... # type: QGraphicsEffect.PixmapPadMode + PadToEffectiveBoundingRect = ... # type: QGraphicsEffect.PixmapPadMode + + class ChangeFlag(int): + SourceAttached = ... # type: QGraphicsEffect.ChangeFlag + SourceDetached = ... # type: QGraphicsEffect.ChangeFlag + SourceBoundingRectChanged = ... # type: QGraphicsEffect.ChangeFlag + SourceInvalidated = ... # type: QGraphicsEffect.ChangeFlag + + class ChangeFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGraphicsEffect.ChangeFlags', 'QGraphicsEffect.ChangeFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGraphicsEffect.ChangeFlags', 'QGraphicsEffect.ChangeFlag']) -> 'QGraphicsEffect.ChangeFlags': ... + def __xor__(self, f: typing.Union['QGraphicsEffect.ChangeFlags', 'QGraphicsEffect.ChangeFlag']) -> 'QGraphicsEffect.ChangeFlags': ... + def __ior__(self, f: typing.Union['QGraphicsEffect.ChangeFlags', 'QGraphicsEffect.ChangeFlag']) -> 'QGraphicsEffect.ChangeFlags': ... + def __or__(self, f: typing.Union['QGraphicsEffect.ChangeFlags', 'QGraphicsEffect.ChangeFlag']) -> 'QGraphicsEffect.ChangeFlags': ... + def __iand__(self, f: typing.Union['QGraphicsEffect.ChangeFlags', 'QGraphicsEffect.ChangeFlag']) -> 'QGraphicsEffect.ChangeFlags': ... + def __and__(self, f: typing.Union['QGraphicsEffect.ChangeFlags', 'QGraphicsEffect.ChangeFlag']) -> 'QGraphicsEffect.ChangeFlags': ... + def __invert__(self) -> 'QGraphicsEffect.ChangeFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def sourcePixmap(self, system: QtCore.Qt.CoordinateSystem = ..., mode: 'QGraphicsEffect.PixmapPadMode' = ...) -> typing.Tuple[QtGui.QPixmap, typing.Optional[QtCore.QPoint]]: ... + def drawSource(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + def sourceBoundingRect(self, system: QtCore.Qt.CoordinateSystem = ...) -> QtCore.QRectF: ... + def sourceIsPixmap(self) -> bool: ... + def updateBoundingRect(self) -> None: ... + def sourceChanged(self, flags: typing.Union['QGraphicsEffect.ChangeFlags', 'QGraphicsEffect.ChangeFlag']) -> None: ... + def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + enabledChanged: typing.ClassVar[QtCore.pyqtSignal] + def update(self) -> None: ... + def setEnabled(self, enable: bool) -> None: ... + def isEnabled(self) -> bool: ... + def boundingRect(self) -> QtCore.QRectF: ... + def boundingRectFor(self, sourceRect: QtCore.QRectF) -> QtCore.QRectF: ... + + +class QGraphicsColorizeEffect(QGraphicsEffect): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + strengthChanged: typing.ClassVar[QtCore.pyqtSignal] + colorChanged: typing.ClassVar[QtCore.pyqtSignal] + def setStrength(self, strength: float) -> None: ... + def setColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def strength(self) -> float: ... + def color(self) -> QtGui.QColor: ... + + +class QGraphicsBlurEffect(QGraphicsEffect): + + class BlurHint(int): + PerformanceHint = ... # type: QGraphicsBlurEffect.BlurHint + QualityHint = ... # type: QGraphicsBlurEffect.BlurHint + AnimationHint = ... # type: QGraphicsBlurEffect.BlurHint + + class BlurHints(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGraphicsBlurEffect.BlurHints', 'QGraphicsBlurEffect.BlurHint']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGraphicsBlurEffect.BlurHints', 'QGraphicsBlurEffect.BlurHint']) -> 'QGraphicsBlurEffect.BlurHints': ... + def __xor__(self, f: typing.Union['QGraphicsBlurEffect.BlurHints', 'QGraphicsBlurEffect.BlurHint']) -> 'QGraphicsBlurEffect.BlurHints': ... + def __ior__(self, f: typing.Union['QGraphicsBlurEffect.BlurHints', 'QGraphicsBlurEffect.BlurHint']) -> 'QGraphicsBlurEffect.BlurHints': ... + def __or__(self, f: typing.Union['QGraphicsBlurEffect.BlurHints', 'QGraphicsBlurEffect.BlurHint']) -> 'QGraphicsBlurEffect.BlurHints': ... + def __iand__(self, f: typing.Union['QGraphicsBlurEffect.BlurHints', 'QGraphicsBlurEffect.BlurHint']) -> 'QGraphicsBlurEffect.BlurHints': ... + def __and__(self, f: typing.Union['QGraphicsBlurEffect.BlurHints', 'QGraphicsBlurEffect.BlurHint']) -> 'QGraphicsBlurEffect.BlurHints': ... + def __invert__(self) -> 'QGraphicsBlurEffect.BlurHints': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + blurHintsChanged: typing.ClassVar[QtCore.pyqtSignal] + blurRadiusChanged: typing.ClassVar[QtCore.pyqtSignal] + def setBlurHints(self, hints: typing.Union['QGraphicsBlurEffect.BlurHints', 'QGraphicsBlurEffect.BlurHint']) -> None: ... + def setBlurRadius(self, blurRadius: float) -> None: ... + def blurHints(self) -> 'QGraphicsBlurEffect.BlurHints': ... + def blurRadius(self) -> float: ... + def boundingRectFor(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + + +class QGraphicsDropShadowEffect(QGraphicsEffect): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + colorChanged: typing.ClassVar[QtCore.pyqtSignal] + blurRadiusChanged: typing.ClassVar[QtCore.pyqtSignal] + offsetChanged: typing.ClassVar[QtCore.pyqtSignal] + def setColor(self, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def setBlurRadius(self, blurRadius: float) -> None: ... + def setYOffset(self, dy: float) -> None: ... + def setXOffset(self, dx: float) -> None: ... + @typing.overload + def setOffset(self, ofs: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setOffset(self, dx: float, dy: float) -> None: ... + @typing.overload + def setOffset(self, d: float) -> None: ... + def color(self) -> QtGui.QColor: ... + def blurRadius(self) -> float: ... + def yOffset(self) -> float: ... + def xOffset(self) -> float: ... + def offset(self) -> QtCore.QPointF: ... + def boundingRectFor(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + + +class QGraphicsOpacityEffect(QGraphicsEffect): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def draw(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + opacityMaskChanged: typing.ClassVar[QtCore.pyqtSignal] + opacityChanged: typing.ClassVar[QtCore.pyqtSignal] + def setOpacityMask(self, mask: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def setOpacity(self, opacity: float) -> None: ... + def opacityMask(self) -> QtGui.QBrush: ... + def opacity(self) -> float: ... + + +class QGraphicsGridLayout(QGraphicsLayout): + + def __init__(self, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... + + def removeItem(self, item: typing.Optional[QGraphicsLayoutItem]) -> None: ... + def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... + def setGeometry(self, rect: QtCore.QRectF) -> None: ... + def invalidate(self) -> None: ... + def removeAt(self, index: int) -> None: ... + def count(self) -> int: ... + @typing.overload + def itemAt(self, row: int, column: int) -> typing.Optional[QGraphicsLayoutItem]: ... + @typing.overload + def itemAt(self, index: int) -> typing.Optional[QGraphicsLayoutItem]: ... + def columnCount(self) -> int: ... + def rowCount(self) -> int: ... + def alignment(self, item: typing.Optional[QGraphicsLayoutItem]) -> QtCore.Qt.Alignment: ... + def setAlignment(self, item: typing.Optional[QGraphicsLayoutItem], alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def columnAlignment(self, column: int) -> QtCore.Qt.Alignment: ... + def setColumnAlignment(self, column: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def rowAlignment(self, row: int) -> QtCore.Qt.Alignment: ... + def setRowAlignment(self, row: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def setColumnFixedWidth(self, column: int, width: float) -> None: ... + def columnMaximumWidth(self, column: int) -> float: ... + def setColumnMaximumWidth(self, column: int, width: float) -> None: ... + def columnPreferredWidth(self, column: int) -> float: ... + def setColumnPreferredWidth(self, column: int, width: float) -> None: ... + def columnMinimumWidth(self, column: int) -> float: ... + def setColumnMinimumWidth(self, column: int, width: float) -> None: ... + def setRowFixedHeight(self, row: int, height: float) -> None: ... + def rowMaximumHeight(self, row: int) -> float: ... + def setRowMaximumHeight(self, row: int, height: float) -> None: ... + def rowPreferredHeight(self, row: int) -> float: ... + def setRowPreferredHeight(self, row: int, height: float) -> None: ... + def rowMinimumHeight(self, row: int) -> float: ... + def setRowMinimumHeight(self, row: int, height: float) -> None: ... + def columnStretchFactor(self, column: int) -> int: ... + def setColumnStretchFactor(self, column: int, stretch: int) -> None: ... + def rowStretchFactor(self, row: int) -> int: ... + def setRowStretchFactor(self, row: int, stretch: int) -> None: ... + def columnSpacing(self, column: int) -> float: ... + def setColumnSpacing(self, column: int, spacing: float) -> None: ... + def rowSpacing(self, row: int) -> float: ... + def setRowSpacing(self, row: int, spacing: float) -> None: ... + def setSpacing(self, spacing: float) -> None: ... + def verticalSpacing(self) -> float: ... + def setVerticalSpacing(self, spacing: float) -> None: ... + def horizontalSpacing(self) -> float: ... + def setHorizontalSpacing(self, spacing: float) -> None: ... + @typing.overload + def addItem(self, item: typing.Optional[QGraphicsLayoutItem], row: int, column: int, rowSpan: int, columnSpan: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + @typing.overload + def addItem(self, item: typing.Optional[QGraphicsLayoutItem], row: int, column: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + + +class QGraphicsItem(PyQt5.sip.wrapper): + + class PanelModality(int): + NonModal = ... # type: QGraphicsItem.PanelModality + PanelModal = ... # type: QGraphicsItem.PanelModality + SceneModal = ... # type: QGraphicsItem.PanelModality + + class GraphicsItemFlag(int): + ItemIsMovable = ... # type: QGraphicsItem.GraphicsItemFlag + ItemIsSelectable = ... # type: QGraphicsItem.GraphicsItemFlag + ItemIsFocusable = ... # type: QGraphicsItem.GraphicsItemFlag + ItemClipsToShape = ... # type: QGraphicsItem.GraphicsItemFlag + ItemClipsChildrenToShape = ... # type: QGraphicsItem.GraphicsItemFlag + ItemIgnoresTransformations = ... # type: QGraphicsItem.GraphicsItemFlag + ItemIgnoresParentOpacity = ... # type: QGraphicsItem.GraphicsItemFlag + ItemDoesntPropagateOpacityToChildren = ... # type: QGraphicsItem.GraphicsItemFlag + ItemStacksBehindParent = ... # type: QGraphicsItem.GraphicsItemFlag + ItemUsesExtendedStyleOption = ... # type: QGraphicsItem.GraphicsItemFlag + ItemHasNoContents = ... # type: QGraphicsItem.GraphicsItemFlag + ItemSendsGeometryChanges = ... # type: QGraphicsItem.GraphicsItemFlag + ItemAcceptsInputMethod = ... # type: QGraphicsItem.GraphicsItemFlag + ItemNegativeZStacksBehindParent = ... # type: QGraphicsItem.GraphicsItemFlag + ItemIsPanel = ... # type: QGraphicsItem.GraphicsItemFlag + ItemSendsScenePositionChanges = ... # type: QGraphicsItem.GraphicsItemFlag + ItemContainsChildrenInShape = ... # type: QGraphicsItem.GraphicsItemFlag + + class GraphicsItemChange(int): + ItemPositionChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemMatrixChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemVisibleChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemEnabledChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemSelectedChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemParentChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemChildAddedChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemChildRemovedChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemTransformChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemPositionHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemTransformHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemSceneChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemVisibleHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemEnabledHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemSelectedHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemParentHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemSceneHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemCursorChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemCursorHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemToolTipChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemToolTipHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemFlagsChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemFlagsHaveChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemZValueChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemZValueHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemOpacityChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemOpacityHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemScenePositionHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemRotationChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemRotationHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemScaleChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemScaleHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + ItemTransformOriginPointChange = ... # type: QGraphicsItem.GraphicsItemChange + ItemTransformOriginPointHasChanged = ... # type: QGraphicsItem.GraphicsItemChange + + class CacheMode(int): + NoCache = ... # type: QGraphicsItem.CacheMode + ItemCoordinateCache = ... # type: QGraphicsItem.CacheMode + DeviceCoordinateCache = ... # type: QGraphicsItem.CacheMode + + class GraphicsItemFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGraphicsItem.GraphicsItemFlags', 'QGraphicsItem.GraphicsItemFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGraphicsItem.GraphicsItemFlags', 'QGraphicsItem.GraphicsItemFlag']) -> 'QGraphicsItem.GraphicsItemFlags': ... + def __xor__(self, f: typing.Union['QGraphicsItem.GraphicsItemFlags', 'QGraphicsItem.GraphicsItemFlag']) -> 'QGraphicsItem.GraphicsItemFlags': ... + def __ior__(self, f: typing.Union['QGraphicsItem.GraphicsItemFlags', 'QGraphicsItem.GraphicsItemFlag']) -> 'QGraphicsItem.GraphicsItemFlags': ... + def __or__(self, f: typing.Union['QGraphicsItem.GraphicsItemFlags', 'QGraphicsItem.GraphicsItemFlag']) -> 'QGraphicsItem.GraphicsItemFlags': ... + def __iand__(self, f: typing.Union['QGraphicsItem.GraphicsItemFlags', 'QGraphicsItem.GraphicsItemFlag']) -> 'QGraphicsItem.GraphicsItemFlags': ... + def __and__(self, f: typing.Union['QGraphicsItem.GraphicsItemFlags', 'QGraphicsItem.GraphicsItemFlag']) -> 'QGraphicsItem.GraphicsItemFlags': ... + def __invert__(self) -> 'QGraphicsItem.GraphicsItemFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + Type = ... # type: int + UserType = ... # type: int + + def __init__(self, parent: typing.Optional['QGraphicsItem'] = ...) -> None: ... + + def updateMicroFocus(self) -> None: ... + def setInputMethodHints(self, hints: typing.Union[QtCore.Qt.InputMethodHints, QtCore.Qt.InputMethodHint]) -> None: ... + def inputMethodHints(self) -> QtCore.Qt.InputMethodHints: ... + def stackBefore(self, sibling: typing.Optional['QGraphicsItem']) -> None: ... + @typing.overload + def setTransformOriginPoint(self, origin: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setTransformOriginPoint(self, ax: float, ay: float) -> None: ... + def transformOriginPoint(self) -> QtCore.QPointF: ... + def setTransformations(self, transformations: typing.Iterable['QGraphicsTransform']) -> None: ... + def transformations(self) -> typing.List['QGraphicsTransform']: ... + def scale(self) -> float: ... + def setScale(self, scale: float) -> None: ... + def rotation(self) -> float: ... + def setRotation(self, angle: float) -> None: ... + def setY(self, y: float) -> None: ... + def setX(self, x: float) -> None: ... + def focusItem(self) -> typing.Optional['QGraphicsItem']: ... + def setFocusProxy(self, item: typing.Optional['QGraphicsItem']) -> None: ... + def focusProxy(self) -> typing.Optional['QGraphicsItem']: ... + def setActive(self, active: bool) -> None: ... + def isActive(self) -> bool: ... + def setFiltersChildEvents(self, enabled: bool) -> None: ... + def filtersChildEvents(self) -> bool: ... + def setAcceptTouchEvents(self, enabled: bool) -> None: ... + def acceptTouchEvents(self) -> bool: ... + def setGraphicsEffect(self, effect: typing.Optional[QGraphicsEffect]) -> None: ... + def graphicsEffect(self) -> typing.Optional[QGraphicsEffect]: ... + def isBlockedByModalPanel(self) -> typing.Tuple[bool, typing.Optional['QGraphicsItem']]: ... + def setPanelModality(self, panelModality: 'QGraphicsItem.PanelModality') -> None: ... + def panelModality(self) -> 'QGraphicsItem.PanelModality': ... + def toGraphicsObject(self) -> typing.Optional['QGraphicsObject']: ... + def isPanel(self) -> bool: ... + def panel(self) -> typing.Optional['QGraphicsItem']: ... + def parentObject(self) -> typing.Optional['QGraphicsObject']: ... + @typing.overload + def mapRectFromScene(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + @typing.overload + def mapRectFromScene(self, ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... + @typing.overload + def mapRectFromParent(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + @typing.overload + def mapRectFromParent(self, ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... + @typing.overload + def mapRectFromItem(self, item: typing.Optional['QGraphicsItem'], rect: QtCore.QRectF) -> QtCore.QRectF: ... + @typing.overload + def mapRectFromItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... + @typing.overload + def mapRectToScene(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + @typing.overload + def mapRectToScene(self, ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... + @typing.overload + def mapRectToParent(self, rect: QtCore.QRectF) -> QtCore.QRectF: ... + @typing.overload + def mapRectToParent(self, ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... + @typing.overload + def mapRectToItem(self, item: typing.Optional['QGraphicsItem'], rect: QtCore.QRectF) -> QtCore.QRectF: ... + @typing.overload + def mapRectToItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float, w: float, h: float) -> QtCore.QRectF: ... + def clipPath(self) -> QtGui.QPainterPath: ... + def isClipped(self) -> bool: ... + def itemTransform(self, other: typing.Optional['QGraphicsItem']) -> typing.Tuple[QtGui.QTransform, typing.Optional[bool]]: ... + def setOpacity(self, opacity: float) -> None: ... + def effectiveOpacity(self) -> float: ... + def opacity(self) -> float: ... + def isUnderMouse(self) -> bool: ... + def commonAncestorItem(self, other: typing.Optional['QGraphicsItem']) -> typing.Optional['QGraphicsItem']: ... + def scroll(self, dx: float, dy: float, rect: QtCore.QRectF = ...) -> None: ... + def setBoundingRegionGranularity(self, granularity: float) -> None: ... + def boundingRegionGranularity(self) -> float: ... + def boundingRegion(self, itemToDeviceTransform: QtGui.QTransform) -> QtGui.QRegion: ... + def ungrabKeyboard(self) -> None: ... + def grabKeyboard(self) -> None: ... + def ungrabMouse(self) -> None: ... + def grabMouse(self) -> None: ... + def setAcceptHoverEvents(self, enabled: bool) -> None: ... + def acceptHoverEvents(self) -> bool: ... + def isVisibleTo(self, parent: typing.Optional['QGraphicsItem']) -> bool: ... + def setCacheMode(self, mode: 'QGraphicsItem.CacheMode', logicalCacheSize: QtCore.QSize = ...) -> None: ... + def cacheMode(self) -> 'QGraphicsItem.CacheMode': ... + def isWindow(self) -> bool: ... + def isWidget(self) -> bool: ... + def childItems(self) -> typing.List['QGraphicsItem']: ... + def window(self) -> typing.Optional['QGraphicsWidget']: ... + def topLevelWidget(self) -> typing.Optional['QGraphicsWidget']: ... + def parentWidget(self) -> typing.Optional['QGraphicsWidget']: ... + @typing.overload + def isObscured(self, rect: QtCore.QRectF = ...) -> bool: ... + @typing.overload + def isObscured(self, ax: float, ay: float, w: float, h: float) -> bool: ... + def resetTransform(self) -> None: ... + def setTransform(self, matrix: QtGui.QTransform, combine: bool = ...) -> None: ... + def deviceTransform(self, viewportTransform: QtGui.QTransform) -> QtGui.QTransform: ... + def sceneTransform(self) -> QtGui.QTransform: ... + def transform(self) -> QtGui.QTransform: ... + def wheelEvent(self, event: typing.Optional['QGraphicsSceneWheelEvent']) -> None: ... + def sceneEventFilter(self, watched: typing.Optional['QGraphicsItem'], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def sceneEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def prepareGeometryChange(self) -> None: ... + def mouseReleaseEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mousePressEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mouseMoveEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mouseDoubleClickEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def itemChange(self, change: 'QGraphicsItem.GraphicsItemChange', value: typing.Any) -> typing.Any: ... + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def hoverMoveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def hoverLeaveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def hoverEnterEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def dropEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragMoveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragLeaveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragEnterEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def contextMenuEvent(self, event: typing.Optional['QGraphicsSceneContextMenuEvent']) -> None: ... + def removeSceneEventFilter(self, filterItem: typing.Optional['QGraphicsItem']) -> None: ... + def installSceneEventFilter(self, filterItem: typing.Optional['QGraphicsItem']) -> None: ... + def type(self) -> int: ... + def setData(self, key: int, value: typing.Any) -> None: ... + def data(self, key: int) -> typing.Any: ... + def isAncestorOf(self, child: typing.Optional['QGraphicsItem']) -> bool: ... + @typing.overload + def mapFromScene(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def mapFromScene(self, rect: QtCore.QRectF) -> QtGui.QPolygonF: ... + @typing.overload + def mapFromScene(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... + @typing.overload + def mapFromScene(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... + @typing.overload + def mapFromScene(self, ax: float, ay: float) -> QtCore.QPointF: ... + @typing.overload + def mapFromScene(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... + @typing.overload + def mapFromParent(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def mapFromParent(self, rect: QtCore.QRectF) -> QtGui.QPolygonF: ... + @typing.overload + def mapFromParent(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... + @typing.overload + def mapFromParent(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... + @typing.overload + def mapFromParent(self, ax: float, ay: float) -> QtCore.QPointF: ... + @typing.overload + def mapFromParent(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... + @typing.overload + def mapFromItem(self, item: typing.Optional['QGraphicsItem'], point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def mapFromItem(self, item: typing.Optional['QGraphicsItem'], rect: QtCore.QRectF) -> QtGui.QPolygonF: ... + @typing.overload + def mapFromItem(self, item: typing.Optional['QGraphicsItem'], polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... + @typing.overload + def mapFromItem(self, item: typing.Optional['QGraphicsItem'], path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... + @typing.overload + def mapFromItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float) -> QtCore.QPointF: ... + @typing.overload + def mapFromItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... + @typing.overload + def mapToScene(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def mapToScene(self, rect: QtCore.QRectF) -> QtGui.QPolygonF: ... + @typing.overload + def mapToScene(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... + @typing.overload + def mapToScene(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... + @typing.overload + def mapToScene(self, ax: float, ay: float) -> QtCore.QPointF: ... + @typing.overload + def mapToScene(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... + @typing.overload + def mapToParent(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def mapToParent(self, rect: QtCore.QRectF) -> QtGui.QPolygonF: ... + @typing.overload + def mapToParent(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... + @typing.overload + def mapToParent(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... + @typing.overload + def mapToParent(self, ax: float, ay: float) -> QtCore.QPointF: ... + @typing.overload + def mapToParent(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... + @typing.overload + def mapToItem(self, item: typing.Optional['QGraphicsItem'], point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPointF: ... + @typing.overload + def mapToItem(self, item: typing.Optional['QGraphicsItem'], rect: QtCore.QRectF) -> QtGui.QPolygonF: ... + @typing.overload + def mapToItem(self, item: typing.Optional['QGraphicsItem'], polygon: QtGui.QPolygonF) -> QtGui.QPolygonF: ... + @typing.overload + def mapToItem(self, item: typing.Optional['QGraphicsItem'], path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... + @typing.overload + def mapToItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float) -> QtCore.QPointF: ... + @typing.overload + def mapToItem(self, item: typing.Optional['QGraphicsItem'], ax: float, ay: float, w: float, h: float) -> QtGui.QPolygonF: ... + @typing.overload + def update(self, rect: QtCore.QRectF = ...) -> None: ... + @typing.overload + def update(self, ax: float, ay: float, width: float, height: float) -> None: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional['QGraphicsItem']) -> bool: ... + def collidingItems(self, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List['QGraphicsItem']: ... + def collidesWithPath(self, path: QtGui.QPainterPath, mode: QtCore.Qt.ItemSelectionMode = ...) -> bool: ... + def collidesWithItem(self, other: typing.Optional['QGraphicsItem'], mode: QtCore.Qt.ItemSelectionMode = ...) -> bool: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def sceneBoundingRect(self) -> QtCore.QRectF: ... + def childrenBoundingRect(self) -> QtCore.QRectF: ... + def boundingRect(self) -> QtCore.QRectF: ... + def setZValue(self, z: float) -> None: ... + def zValue(self) -> float: ... + def advance(self, phase: int) -> None: ... + @typing.overload + def ensureVisible(self, rect: QtCore.QRectF = ..., xMargin: int = ..., yMargin: int = ...) -> None: ... + @typing.overload + def ensureVisible(self, x: float, y: float, w: float, h: float, xMargin: int = ..., yMargin: int = ...) -> None: ... + def moveBy(self, dx: float, dy: float) -> None: ... + @typing.overload + def setPos(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setPos(self, ax: float, ay: float) -> None: ... + def scenePos(self) -> QtCore.QPointF: ... + def y(self) -> float: ... + def x(self) -> float: ... + def pos(self) -> QtCore.QPointF: ... + def clearFocus(self) -> None: ... + def setFocus(self, focusReason: QtCore.Qt.FocusReason = ...) -> None: ... + def hasFocus(self) -> bool: ... + def setAcceptedMouseButtons(self, buttons: typing.Union[QtCore.Qt.MouseButtons, QtCore.Qt.MouseButton]) -> None: ... + def acceptedMouseButtons(self) -> QtCore.Qt.MouseButtons: ... + def setAcceptDrops(self, on: bool) -> None: ... + def acceptDrops(self) -> bool: ... + def setSelected(self, selected: bool) -> None: ... + def isSelected(self) -> bool: ... + def setEnabled(self, enabled: bool) -> None: ... + def isEnabled(self) -> bool: ... + def show(self) -> None: ... + def hide(self) -> None: ... + def setVisible(self, visible: bool) -> None: ... + def isVisible(self) -> bool: ... + def unsetCursor(self) -> None: ... + def hasCursor(self) -> bool: ... + def setCursor(self, cursor: typing.Union[QtGui.QCursor, QtCore.Qt.CursorShape]) -> None: ... + def cursor(self) -> QtGui.QCursor: ... + def setToolTip(self, toolTip: typing.Optional[str]) -> None: ... + def toolTip(self) -> str: ... + def setFlags(self, flags: typing.Union['QGraphicsItem.GraphicsItemFlags', 'QGraphicsItem.GraphicsItemFlag']) -> None: ... + def setFlag(self, flag: 'QGraphicsItem.GraphicsItemFlag', enabled: bool = ...) -> None: ... + def flags(self) -> 'QGraphicsItem.GraphicsItemFlags': ... + def setGroup(self, group: typing.Optional['QGraphicsItemGroup']) -> None: ... + def group(self) -> typing.Optional['QGraphicsItemGroup']: ... + def setParentItem(self, parent: typing.Optional['QGraphicsItem']) -> None: ... + def topLevelItem(self) -> typing.Optional['QGraphicsItem']: ... + def parentItem(self) -> typing.Optional['QGraphicsItem']: ... + def scene(self) -> typing.Optional['QGraphicsScene']: ... + + +class QAbstractGraphicsShapeItem(QGraphicsItem): + + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def setBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def brush(self) -> QtGui.QBrush: ... + def setPen(self, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]]) -> None: ... + def pen(self) -> QtGui.QPen: ... + + +class QGraphicsPathItem(QAbstractGraphicsShapeItem): + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, path: QtGui.QPainterPath, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + def setPath(self, path: QtGui.QPainterPath) -> None: ... + def path(self) -> QtGui.QPainterPath: ... + + +class QGraphicsRectItem(QAbstractGraphicsShapeItem): + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, rect: QtCore.QRectF, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, x: float, y: float, w: float, h: float, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + @typing.overload + def setRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setRect(self, ax: float, ay: float, w: float, h: float) -> None: ... + def rect(self) -> QtCore.QRectF: ... + + +class QGraphicsEllipseItem(QAbstractGraphicsShapeItem): + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, rect: QtCore.QRectF, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, x: float, y: float, w: float, h: float, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + def setSpanAngle(self, angle: int) -> None: ... + def spanAngle(self) -> int: ... + def setStartAngle(self, angle: int) -> None: ... + def startAngle(self) -> int: ... + @typing.overload + def setRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setRect(self, ax: float, ay: float, w: float, h: float) -> None: ... + def rect(self) -> QtCore.QRectF: ... + + +class QGraphicsPolygonItem(QAbstractGraphicsShapeItem): + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, polygon: QtGui.QPolygonF, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + def setFillRule(self, rule: QtCore.Qt.FillRule) -> None: ... + def fillRule(self) -> QtCore.Qt.FillRule: ... + def setPolygon(self, polygon: QtGui.QPolygonF) -> None: ... + def polygon(self) -> QtGui.QPolygonF: ... + + +class QGraphicsLineItem(QGraphicsItem): + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, line: QtCore.QLineF, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, x1: float, y1: float, x2: float, y2: float, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + @typing.overload + def setLine(self, line: QtCore.QLineF) -> None: ... + @typing.overload + def setLine(self, x1: float, y1: float, x2: float, y2: float) -> None: ... + def line(self) -> QtCore.QLineF: ... + def setPen(self, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]]) -> None: ... + def pen(self) -> QtGui.QPen: ... + + +class QGraphicsPixmapItem(QGraphicsItem): + + class ShapeMode(int): + MaskShape = ... # type: QGraphicsPixmapItem.ShapeMode + BoundingRectShape = ... # type: QGraphicsPixmapItem.ShapeMode + HeuristicMaskShape = ... # type: QGraphicsPixmapItem.ShapeMode + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, pixmap: QtGui.QPixmap, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def setShapeMode(self, mode: 'QGraphicsPixmapItem.ShapeMode') -> None: ... + def shapeMode(self) -> 'QGraphicsPixmapItem.ShapeMode': ... + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget]) -> None: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + @typing.overload + def setOffset(self, offset: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def setOffset(self, ax: float, ay: float) -> None: ... + def offset(self) -> QtCore.QPointF: ... + def setTransformationMode(self, mode: QtCore.Qt.TransformationMode) -> None: ... + def transformationMode(self) -> QtCore.Qt.TransformationMode: ... + def setPixmap(self, pixmap: QtGui.QPixmap) -> None: ... + def pixmap(self) -> QtGui.QPixmap: ... + + +class QGraphicsSimpleTextItem(QAbstractGraphicsShapeItem): + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget]) -> None: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + def font(self) -> QtGui.QFont: ... + def setFont(self, font: QtGui.QFont) -> None: ... + def text(self) -> str: ... + def setText(self, text: typing.Optional[str]) -> None: ... + + +class QGraphicsItemGroup(QGraphicsItem): + + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def boundingRect(self) -> QtCore.QRectF: ... + def removeFromGroup(self, item: typing.Optional[QGraphicsItem]) -> None: ... + def addToGroup(self, item: typing.Optional[QGraphicsItem]) -> None: ... + + +class QGraphicsObject(QtCore.QObject, QGraphicsItem): + + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def event(self, ev: typing.Optional[QtCore.QEvent]) -> bool: ... + def updateMicroFocus(self) -> None: ... + scaleChanged: typing.ClassVar[QtCore.pyqtSignal] + rotationChanged: typing.ClassVar[QtCore.pyqtSignal] + zChanged: typing.ClassVar[QtCore.pyqtSignal] + yChanged: typing.ClassVar[QtCore.pyqtSignal] + xChanged: typing.ClassVar[QtCore.pyqtSignal] + enabledChanged: typing.ClassVar[QtCore.pyqtSignal] + visibleChanged: typing.ClassVar[QtCore.pyqtSignal] + opacityChanged: typing.ClassVar[QtCore.pyqtSignal] + parentChanged: typing.ClassVar[QtCore.pyqtSignal] + def ungrabGesture(self, type: QtCore.Qt.GestureType) -> None: ... + def grabGesture(self, type: QtCore.Qt.GestureType, flags: typing.Union[QtCore.Qt.GestureFlags, QtCore.Qt.GestureFlag] = ...) -> None: ... + + +class QGraphicsTextItem(QGraphicsObject): + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QGraphicsItem] = ...) -> None: ... + + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def hoverLeaveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def hoverMoveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def hoverEnterEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def dropEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragMoveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragLeaveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragEnterEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def contextMenuEvent(self, event: typing.Optional['QGraphicsSceneContextMenuEvent']) -> None: ... + def mouseDoubleClickEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mouseReleaseEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mouseMoveEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mousePressEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def sceneEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + linkHovered: typing.ClassVar[QtCore.pyqtSignal] + linkActivated: typing.ClassVar[QtCore.pyqtSignal] + def textCursor(self) -> QtGui.QTextCursor: ... + def setTextCursor(self, cursor: QtGui.QTextCursor) -> None: ... + def openExternalLinks(self) -> bool: ... + def setOpenExternalLinks(self, open: bool) -> None: ... + def tabChangesFocus(self) -> bool: ... + def setTabChangesFocus(self, b: bool) -> None: ... + def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlags: ... + def setTextInteractionFlags(self, flags: typing.Union[QtCore.Qt.TextInteractionFlags, QtCore.Qt.TextInteractionFlag]) -> None: ... + def document(self) -> typing.Optional[QtGui.QTextDocument]: ... + def setDocument(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... + def adjustSize(self) -> None: ... + def textWidth(self) -> float: ... + def setTextWidth(self, width: float) -> None: ... + def type(self) -> int: ... + def opaqueArea(self) -> QtGui.QPainterPath: ... + def isObscuredBy(self, item: typing.Optional[QGraphicsItem]) -> bool: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget]) -> None: ... + def contains(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + def defaultTextColor(self) -> QtGui.QColor: ... + def setDefaultTextColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def setFont(self, font: QtGui.QFont) -> None: ... + def font(self) -> QtGui.QFont: ... + def setPlainText(self, text: typing.Optional[str]) -> None: ... + def toPlainText(self) -> str: ... + def setHtml(self, html: typing.Optional[str]) -> None: ... + def toHtml(self) -> str: ... + + +class QGraphicsLinearLayout(QGraphicsLayout): + + @typing.overload + def __init__(self, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... + @typing.overload + def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QGraphicsLayoutItem] = ...) -> None: ... + + def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... + def invalidate(self) -> None: ... + def itemAt(self, index: int) -> typing.Optional[QGraphicsLayoutItem]: ... + def count(self) -> int: ... + def setGeometry(self, rect: QtCore.QRectF) -> None: ... + def alignment(self, item: typing.Optional[QGraphicsLayoutItem]) -> QtCore.Qt.Alignment: ... + def setAlignment(self, item: typing.Optional[QGraphicsLayoutItem], alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def stretchFactor(self, item: typing.Optional[QGraphicsLayoutItem]) -> int: ... + def setStretchFactor(self, item: typing.Optional[QGraphicsLayoutItem], stretch: int) -> None: ... + def itemSpacing(self, index: int) -> float: ... + def setItemSpacing(self, index: int, spacing: float) -> None: ... + def spacing(self) -> float: ... + def setSpacing(self, spacing: float) -> None: ... + def removeAt(self, index: int) -> None: ... + def removeItem(self, item: typing.Optional[QGraphicsLayoutItem]) -> None: ... + def insertStretch(self, index: int, stretch: int = ...) -> None: ... + def insertItem(self, index: int, item: typing.Optional[QGraphicsLayoutItem]) -> None: ... + def addStretch(self, stretch: int = ...) -> None: ... + def addItem(self, item: typing.Optional[QGraphicsLayoutItem]) -> None: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + def setOrientation(self, orientation: QtCore.Qt.Orientation) -> None: ... + + +class QGraphicsWidget(QGraphicsObject, QGraphicsLayoutItem): + + def __init__(self, parent: typing.Optional[QGraphicsItem] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + geometryChanged: typing.ClassVar[QtCore.pyqtSignal] + def setAutoFillBackground(self, enabled: bool) -> None: ... + def autoFillBackground(self) -> bool: ... + def ungrabKeyboardEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def grabKeyboardEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def ungrabMouseEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def grabMouseEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def hoverLeaveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def hoverMoveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def showEvent(self, event: typing.Optional[QtGui.QShowEvent]) -> None: ... + def resizeEvent(self, event: typing.Optional['QGraphicsSceneResizeEvent']) -> None: ... + def polishEvent(self) -> None: ... + def moveEvent(self, event: typing.Optional['QGraphicsSceneMoveEvent']) -> None: ... + def hideEvent(self, event: typing.Optional[QtGui.QHideEvent]) -> None: ... + def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def closeEvent(self, event: typing.Optional[QtGui.QCloseEvent]) -> None: ... + def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def windowFrameSectionAt(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.Qt.WindowFrameSection: ... + def windowFrameEvent(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def sceneEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def itemChange(self, change: QGraphicsItem.GraphicsItemChange, value: typing.Any) -> typing.Any: ... + def updateGeometry(self) -> None: ... + def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... + def initStyleOption(self, option: typing.Optional['QStyleOption']) -> None: ... + def close(self) -> bool: ... + def shape(self) -> QtGui.QPainterPath: ... + def boundingRect(self) -> QtCore.QRectF: ... + def paintWindowFrame(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget] = ...) -> None: ... + def type(self) -> int: ... + def testAttribute(self, attribute: QtCore.Qt.WidgetAttribute) -> bool: ... + def setAttribute(self, attribute: QtCore.Qt.WidgetAttribute, on: bool = ...) -> None: ... + def actions(self) -> typing.List[QAction]: ... + def removeAction(self, action: typing.Optional[QAction]) -> None: ... + def insertActions(self, before: typing.Optional[QAction], actions: typing.Iterable[QAction]) -> None: ... + def insertAction(self, before: typing.Optional[QAction], action: typing.Optional[QAction]) -> None: ... + def addActions(self, actions: typing.Iterable[QAction]) -> None: ... + def addAction(self, action: typing.Optional[QAction]) -> None: ... + def setShortcutAutoRepeat(self, id: int, enabled: bool = ...) -> None: ... + def setShortcutEnabled(self, id: int, enabled: bool = ...) -> None: ... + def releaseShortcut(self, id: int) -> None: ... + def grabShortcut(self, sequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], context: QtCore.Qt.ShortcutContext = ...) -> int: ... + def focusWidget(self) -> typing.Optional['QGraphicsWidget']: ... + @staticmethod + def setTabOrder(first: typing.Optional['QGraphicsWidget'], second: typing.Optional['QGraphicsWidget']) -> None: ... + def setFocusPolicy(self, policy: QtCore.Qt.FocusPolicy) -> None: ... + def focusPolicy(self) -> QtCore.Qt.FocusPolicy: ... + def windowTitle(self) -> str: ... + def setWindowTitle(self, title: typing.Optional[str]) -> None: ... + def isActiveWindow(self) -> bool: ... + def setWindowFlags(self, wFlags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType]) -> None: ... + def windowType(self) -> QtCore.Qt.WindowType: ... + def windowFlags(self) -> QtCore.Qt.WindowFlags: ... + def windowFrameRect(self) -> QtCore.QRectF: ... + def windowFrameGeometry(self) -> QtCore.QRectF: ... + def unsetWindowFrameMargins(self) -> None: ... + def getWindowFrameMargins(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + @typing.overload + def setWindowFrameMargins(self, margins: QtCore.QMarginsF) -> None: ... + @typing.overload + def setWindowFrameMargins(self, left: float, top: float, right: float, bottom: float) -> None: ... + def getContentsMargins(self) -> typing.Tuple[typing.Optional[float], typing.Optional[float], typing.Optional[float], typing.Optional[float]]: ... + @typing.overload + def setContentsMargins(self, margins: QtCore.QMarginsF) -> None: ... + @typing.overload + def setContentsMargins(self, left: float, top: float, right: float, bottom: float) -> None: ... + def rect(self) -> QtCore.QRectF: ... + @typing.overload + def setGeometry(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setGeometry(self, ax: float, ay: float, aw: float, ah: float) -> None: ... + def size(self) -> QtCore.QSizeF: ... + @typing.overload + def resize(self, size: QtCore.QSizeF) -> None: ... + @typing.overload + def resize(self, w: float, h: float) -> None: ... + def setPalette(self, palette: QtGui.QPalette) -> None: ... + def palette(self) -> QtGui.QPalette: ... + def setFont(self, font: QtGui.QFont) -> None: ... + def font(self) -> QtGui.QFont: ... + def setStyle(self, style: typing.Optional[QStyle]) -> None: ... + def style(self) -> typing.Optional[QStyle]: ... + def unsetLayoutDirection(self) -> None: ... + def setLayoutDirection(self, direction: QtCore.Qt.LayoutDirection) -> None: ... + def layoutDirection(self) -> QtCore.Qt.LayoutDirection: ... + def adjustSize(self) -> None: ... + def setLayout(self, layout: typing.Optional[QGraphicsLayout]) -> None: ... + def layout(self) -> typing.Optional[QGraphicsLayout]: ... + + +class QGraphicsProxyWidget(QGraphicsWidget): + + def __init__(self, parent: typing.Optional[QGraphicsItem] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def newProxyWidget(self, a0: typing.Optional[QWidget]) -> typing.Optional['QGraphicsProxyWidget']: ... + def dropEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragMoveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragLeaveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragEnterEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def resizeEvent(self, event: typing.Optional['QGraphicsSceneResizeEvent']) -> None: ... + def sizeHint(self, which: QtCore.Qt.SizeHint, constraint: QtCore.QSizeF = ...) -> QtCore.QSizeF: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def wheelEvent(self, event: typing.Optional['QGraphicsSceneWheelEvent']) -> None: ... + def mouseDoubleClickEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mouseReleaseEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mousePressEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mouseMoveEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def ungrabMouseEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def grabMouseEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def hoverMoveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def hoverLeaveEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def hoverEnterEvent(self, event: typing.Optional['QGraphicsSceneHoverEvent']) -> None: ... + def contextMenuEvent(self, event: typing.Optional['QGraphicsSceneContextMenuEvent']) -> None: ... + def hideEvent(self, event: typing.Optional[QtGui.QHideEvent]) -> None: ... + def showEvent(self, event: typing.Optional[QtGui.QShowEvent]) -> None: ... + def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def itemChange(self, change: QGraphicsItem.GraphicsItemChange, value: typing.Any) -> typing.Any: ... + def createProxyForChildWidget(self, child: typing.Optional[QWidget]) -> typing.Optional['QGraphicsProxyWidget']: ... + def type(self) -> int: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: typing.Optional['QStyleOptionGraphicsItem'], widget: typing.Optional[QWidget]) -> None: ... + def setGeometry(self, rect: QtCore.QRectF) -> None: ... + def subWidgetRect(self, widget: typing.Optional[QWidget]) -> QtCore.QRectF: ... + def widget(self) -> typing.Optional[QWidget]: ... + def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... + + +class QGraphicsScene(QtCore.QObject): + + class SceneLayer(int): + ItemLayer = ... # type: QGraphicsScene.SceneLayer + BackgroundLayer = ... # type: QGraphicsScene.SceneLayer + ForegroundLayer = ... # type: QGraphicsScene.SceneLayer + AllLayers = ... # type: QGraphicsScene.SceneLayer + + class ItemIndexMethod(int): + BspTreeIndex = ... # type: QGraphicsScene.ItemIndexMethod + NoIndex = ... # type: QGraphicsScene.ItemIndexMethod + + class SceneLayers(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer']) -> 'QGraphicsScene.SceneLayers': ... + def __xor__(self, f: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer']) -> 'QGraphicsScene.SceneLayers': ... + def __ior__(self, f: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer']) -> 'QGraphicsScene.SceneLayers': ... + def __or__(self, f: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer']) -> 'QGraphicsScene.SceneLayers': ... + def __iand__(self, f: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer']) -> 'QGraphicsScene.SceneLayers': ... + def __and__(self, f: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer']) -> 'QGraphicsScene.SceneLayers': ... + def __invert__(self) -> 'QGraphicsScene.SceneLayers': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, sceneRect: QtCore.QRectF, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, x: float, y: float, width: float, height: float, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def setFocusOnTouch(self, enabled: bool) -> None: ... + def focusOnTouch(self) -> bool: ... + focusItemChanged: typing.ClassVar[QtCore.pyqtSignal] + def setMinimumRenderSize(self, minSize: float) -> None: ... + def minimumRenderSize(self) -> float: ... + def sendEvent(self, item: typing.Optional[QGraphicsItem], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def setActivePanel(self, item: typing.Optional[QGraphicsItem]) -> None: ... + def activePanel(self) -> typing.Optional[QGraphicsItem]: ... + def isActive(self) -> bool: ... + @typing.overload + def itemAt(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], deviceTransform: QtGui.QTransform) -> typing.Optional[QGraphicsItem]: ... + @typing.overload + def itemAt(self, x: float, y: float, deviceTransform: QtGui.QTransform) -> typing.Optional[QGraphicsItem]: ... + def stickyFocus(self) -> bool: ... + def setStickyFocus(self, enabled: bool) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def eventFilter(self, watched: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def setActiveWindow(self, widget: typing.Optional[QGraphicsWidget]) -> None: ... + def activeWindow(self) -> typing.Optional[QGraphicsWidget]: ... + def setPalette(self, palette: QtGui.QPalette) -> None: ... + def palette(self) -> QtGui.QPalette: ... + def setFont(self, font: QtGui.QFont) -> None: ... + def font(self) -> QtGui.QFont: ... + def setStyle(self, style: typing.Optional[QStyle]) -> None: ... + def style(self) -> typing.Optional[QStyle]: ... + def addWidget(self, widget: typing.Optional[QWidget], flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> typing.Optional[QGraphicsProxyWidget]: ... + def selectionArea(self) -> QtGui.QPainterPath: ... + def setBspTreeDepth(self, depth: int) -> None: ... + def bspTreeDepth(self) -> int: ... + def drawForeground(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF) -> None: ... + def drawBackground(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF) -> None: ... + def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def wheelEvent(self, event: typing.Optional['QGraphicsSceneWheelEvent']) -> None: ... + def mouseDoubleClickEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mouseReleaseEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mouseMoveEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def mousePressEvent(self, event: typing.Optional['QGraphicsSceneMouseEvent']) -> None: ... + def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def helpEvent(self, event: typing.Optional['QGraphicsSceneHelpEvent']) -> None: ... + def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def dropEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragLeaveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragMoveEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def dragEnterEvent(self, event: typing.Optional['QGraphicsSceneDragDropEvent']) -> None: ... + def contextMenuEvent(self, event: typing.Optional['QGraphicsSceneContextMenuEvent']) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + selectionChanged: typing.ClassVar[QtCore.pyqtSignal] + sceneRectChanged: typing.ClassVar[QtCore.pyqtSignal] + changed: typing.ClassVar[QtCore.pyqtSignal] + def clear(self) -> None: ... + @typing.overload + def invalidate(self, rect: QtCore.QRectF = ..., layers: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer'] = ...) -> None: ... + @typing.overload + def invalidate(self, x: float, y: float, w: float, h: float, layers: typing.Union['QGraphicsScene.SceneLayers', 'QGraphicsScene.SceneLayer'] = ...) -> None: ... + @typing.overload + def update(self, rect: QtCore.QRectF = ...) -> None: ... + @typing.overload + def update(self, x: float, y: float, w: float, h: float) -> None: ... + def advance(self) -> None: ... + def views(self) -> typing.List['QGraphicsView']: ... + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + def setForegroundBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def foregroundBrush(self) -> QtGui.QBrush: ... + def setBackgroundBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def backgroundBrush(self) -> QtGui.QBrush: ... + def mouseGrabberItem(self) -> typing.Optional[QGraphicsItem]: ... + def clearFocus(self) -> None: ... + def setFocus(self, focusReason: QtCore.Qt.FocusReason = ...) -> None: ... + def hasFocus(self) -> bool: ... + def setFocusItem(self, item: typing.Optional[QGraphicsItem], focusReason: QtCore.Qt.FocusReason = ...) -> None: ... + def focusItem(self) -> typing.Optional[QGraphicsItem]: ... + def removeItem(self, item: typing.Optional[QGraphicsItem]) -> None: ... + def addText(self, text: typing.Optional[str], font: QtGui.QFont = ...) -> typing.Optional[QGraphicsTextItem]: ... + def addSimpleText(self, text: typing.Optional[str], font: QtGui.QFont = ...) -> typing.Optional[QGraphicsSimpleTextItem]: ... + @typing.overload + def addRect(self, rect: QtCore.QRectF, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsRectItem]: ... + @typing.overload + def addRect(self, x: float, y: float, w: float, h: float, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsRectItem]: ... + def addPolygon(self, polygon: QtGui.QPolygonF, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsPolygonItem]: ... + def addPixmap(self, pixmap: QtGui.QPixmap) -> typing.Optional[QGraphicsPixmapItem]: ... + def addPath(self, path: QtGui.QPainterPath, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsPathItem]: ... + @typing.overload + def addLine(self, line: QtCore.QLineF, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]] = ...) -> typing.Optional[QGraphicsLineItem]: ... + @typing.overload + def addLine(self, x1: float, y1: float, x2: float, y2: float, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]] = ...) -> typing.Optional[QGraphicsLineItem]: ... + @typing.overload + def addEllipse(self, rect: QtCore.QRectF, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsEllipseItem]: ... + @typing.overload + def addEllipse(self, x: float, y: float, w: float, h: float, pen: typing.Union[QtGui.QPen, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]] = ..., brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient] = ...) -> typing.Optional[QGraphicsEllipseItem]: ... + def addItem(self, item: typing.Optional[QGraphicsItem]) -> None: ... + def destroyItemGroup(self, group: typing.Optional[QGraphicsItemGroup]) -> None: ... + def createItemGroup(self, items: typing.Iterable[QGraphicsItem]) -> typing.Optional[QGraphicsItemGroup]: ... + def clearSelection(self) -> None: ... + @typing.overload + def setSelectionArea(self, path: QtGui.QPainterPath, deviceTransform: QtGui.QTransform) -> None: ... + @typing.overload + def setSelectionArea(self, path: QtGui.QPainterPath, mode: QtCore.Qt.ItemSelectionMode = ..., deviceTransform: QtGui.QTransform = ...) -> None: ... + @typing.overload + def setSelectionArea(self, path: QtGui.QPainterPath, selectionOperation: QtCore.Qt.ItemSelectionOperation, mode: QtCore.Qt.ItemSelectionMode = ..., deviceTransform: QtGui.QTransform = ...) -> None: ... + def selectedItems(self) -> typing.List[QGraphicsItem]: ... + def collidingItems(self, item: typing.Optional[QGraphicsItem], mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, order: QtCore.Qt.SortOrder = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], mode: QtCore.Qt.ItemSelectionMode = ..., order: QtCore.Qt.SortOrder = ..., deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, rect: QtCore.QRectF, mode: QtCore.Qt.ItemSelectionMode = ..., order: QtCore.Qt.SortOrder = ..., deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, polygon: QtGui.QPolygonF, mode: QtCore.Qt.ItemSelectionMode = ..., order: QtCore.Qt.SortOrder = ..., deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, path: QtGui.QPainterPath, mode: QtCore.Qt.ItemSelectionMode = ..., order: QtCore.Qt.SortOrder = ..., deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, x: float, y: float, w: float, h: float, mode: QtCore.Qt.ItemSelectionMode, order: QtCore.Qt.SortOrder, deviceTransform: QtGui.QTransform = ...) -> typing.List[QGraphicsItem]: ... + def itemsBoundingRect(self) -> QtCore.QRectF: ... + def setItemIndexMethod(self, method: 'QGraphicsScene.ItemIndexMethod') -> None: ... + def itemIndexMethod(self) -> 'QGraphicsScene.ItemIndexMethod': ... + def render(self, painter: typing.Optional[QtGui.QPainter], target: QtCore.QRectF = ..., source: QtCore.QRectF = ..., mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... + @typing.overload + def setSceneRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setSceneRect(self, x: float, y: float, w: float, h: float) -> None: ... + def height(self) -> float: ... + def width(self) -> float: ... + def sceneRect(self) -> QtCore.QRectF: ... + + +class QGraphicsSceneEvent(QtCore.QEvent): + + def widget(self) -> typing.Optional[QWidget]: ... + + +class QGraphicsSceneMouseEvent(QGraphicsSceneEvent): + + def flags(self) -> QtCore.Qt.MouseEventFlags: ... + def source(self) -> QtCore.Qt.MouseEventSource: ... + def modifiers(self) -> QtCore.Qt.KeyboardModifiers: ... + def button(self) -> QtCore.Qt.MouseButton: ... + def buttons(self) -> QtCore.Qt.MouseButtons: ... + def lastScreenPos(self) -> QtCore.QPoint: ... + def lastScenePos(self) -> QtCore.QPointF: ... + def lastPos(self) -> QtCore.QPointF: ... + def buttonDownScreenPos(self, button: QtCore.Qt.MouseButton) -> QtCore.QPoint: ... + def buttonDownScenePos(self, button: QtCore.Qt.MouseButton) -> QtCore.QPointF: ... + def buttonDownPos(self, button: QtCore.Qt.MouseButton) -> QtCore.QPointF: ... + def screenPos(self) -> QtCore.QPoint: ... + def scenePos(self) -> QtCore.QPointF: ... + def pos(self) -> QtCore.QPointF: ... + + +class QGraphicsSceneWheelEvent(QGraphicsSceneEvent): + + def orientation(self) -> QtCore.Qt.Orientation: ... + def delta(self) -> int: ... + def modifiers(self) -> QtCore.Qt.KeyboardModifiers: ... + def buttons(self) -> QtCore.Qt.MouseButtons: ... + def screenPos(self) -> QtCore.QPoint: ... + def scenePos(self) -> QtCore.QPointF: ... + def pos(self) -> QtCore.QPointF: ... + + +class QGraphicsSceneContextMenuEvent(QGraphicsSceneEvent): + + class Reason(int): + Mouse = ... # type: QGraphicsSceneContextMenuEvent.Reason + Keyboard = ... # type: QGraphicsSceneContextMenuEvent.Reason + Other = ... # type: QGraphicsSceneContextMenuEvent.Reason + + def reason(self) -> 'QGraphicsSceneContextMenuEvent.Reason': ... + def modifiers(self) -> QtCore.Qt.KeyboardModifiers: ... + def screenPos(self) -> QtCore.QPoint: ... + def scenePos(self) -> QtCore.QPointF: ... + def pos(self) -> QtCore.QPointF: ... + + +class QGraphicsSceneHoverEvent(QGraphicsSceneEvent): + + def modifiers(self) -> QtCore.Qt.KeyboardModifiers: ... + def lastScreenPos(self) -> QtCore.QPoint: ... + def lastScenePos(self) -> QtCore.QPointF: ... + def lastPos(self) -> QtCore.QPointF: ... + def screenPos(self) -> QtCore.QPoint: ... + def scenePos(self) -> QtCore.QPointF: ... + def pos(self) -> QtCore.QPointF: ... + + +class QGraphicsSceneHelpEvent(QGraphicsSceneEvent): + + def screenPos(self) -> QtCore.QPoint: ... + def scenePos(self) -> QtCore.QPointF: ... + + +class QGraphicsSceneDragDropEvent(QGraphicsSceneEvent): + + def mimeData(self) -> typing.Optional[QtCore.QMimeData]: ... + def source(self) -> typing.Optional[QWidget]: ... + def setDropAction(self, action: QtCore.Qt.DropAction) -> None: ... + def dropAction(self) -> QtCore.Qt.DropAction: ... + def acceptProposedAction(self) -> None: ... + def proposedAction(self) -> QtCore.Qt.DropAction: ... + def possibleActions(self) -> QtCore.Qt.DropActions: ... + def modifiers(self) -> QtCore.Qt.KeyboardModifiers: ... + def buttons(self) -> QtCore.Qt.MouseButtons: ... + def screenPos(self) -> QtCore.QPoint: ... + def scenePos(self) -> QtCore.QPointF: ... + def pos(self) -> QtCore.QPointF: ... + + +class QGraphicsSceneResizeEvent(QGraphicsSceneEvent): + + def __init__(self) -> None: ... + + def newSize(self) -> QtCore.QSizeF: ... + def oldSize(self) -> QtCore.QSizeF: ... + + +class QGraphicsSceneMoveEvent(QGraphicsSceneEvent): + + def __init__(self) -> None: ... + + def newPos(self) -> QtCore.QPointF: ... + def oldPos(self) -> QtCore.QPointF: ... + + +class QGraphicsTransform(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def update(self) -> None: ... + def applyTo(self, matrix: typing.Optional[QtGui.QMatrix4x4]) -> None: ... + + +class QGraphicsScale(QGraphicsTransform): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + zScaleChanged: typing.ClassVar[QtCore.pyqtSignal] + yScaleChanged: typing.ClassVar[QtCore.pyqtSignal] + xScaleChanged: typing.ClassVar[QtCore.pyqtSignal] + scaleChanged: typing.ClassVar[QtCore.pyqtSignal] + originChanged: typing.ClassVar[QtCore.pyqtSignal] + def applyTo(self, matrix: typing.Optional[QtGui.QMatrix4x4]) -> None: ... + def setZScale(self, a0: float) -> None: ... + def zScale(self) -> float: ... + def setYScale(self, a0: float) -> None: ... + def yScale(self) -> float: ... + def setXScale(self, a0: float) -> None: ... + def xScale(self) -> float: ... + def setOrigin(self, point: QtGui.QVector3D) -> None: ... + def origin(self) -> QtGui.QVector3D: ... + + +class QGraphicsRotation(QGraphicsTransform): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + axisChanged: typing.ClassVar[QtCore.pyqtSignal] + angleChanged: typing.ClassVar[QtCore.pyqtSignal] + originChanged: typing.ClassVar[QtCore.pyqtSignal] + def applyTo(self, matrix: typing.Optional[QtGui.QMatrix4x4]) -> None: ... + @typing.overload + def setAxis(self, axis: QtGui.QVector3D) -> None: ... + @typing.overload + def setAxis(self, axis: QtCore.Qt.Axis) -> None: ... + def axis(self) -> QtGui.QVector3D: ... + def setAngle(self, a0: float) -> None: ... + def angle(self) -> float: ... + def setOrigin(self, point: QtGui.QVector3D) -> None: ... + def origin(self) -> QtGui.QVector3D: ... + + +class QGraphicsView(QAbstractScrollArea): + + class OptimizationFlag(int): + DontClipPainter = ... # type: QGraphicsView.OptimizationFlag + DontSavePainterState = ... # type: QGraphicsView.OptimizationFlag + DontAdjustForAntialiasing = ... # type: QGraphicsView.OptimizationFlag + + class ViewportUpdateMode(int): + FullViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode + MinimalViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode + SmartViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode + BoundingRectViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode + NoViewportUpdate = ... # type: QGraphicsView.ViewportUpdateMode + + class ViewportAnchor(int): + NoAnchor = ... # type: QGraphicsView.ViewportAnchor + AnchorViewCenter = ... # type: QGraphicsView.ViewportAnchor + AnchorUnderMouse = ... # type: QGraphicsView.ViewportAnchor + + class DragMode(int): + NoDrag = ... # type: QGraphicsView.DragMode + ScrollHandDrag = ... # type: QGraphicsView.DragMode + RubberBandDrag = ... # type: QGraphicsView.DragMode + + class CacheModeFlag(int): + CacheNone = ... # type: QGraphicsView.CacheModeFlag + CacheBackground = ... # type: QGraphicsView.CacheModeFlag + + class CacheMode(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGraphicsView.CacheMode', 'QGraphicsView.CacheModeFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGraphicsView.CacheMode', 'QGraphicsView.CacheModeFlag']) -> 'QGraphicsView.CacheMode': ... + def __xor__(self, f: typing.Union['QGraphicsView.CacheMode', 'QGraphicsView.CacheModeFlag']) -> 'QGraphicsView.CacheMode': ... + def __ior__(self, f: typing.Union['QGraphicsView.CacheMode', 'QGraphicsView.CacheModeFlag']) -> 'QGraphicsView.CacheMode': ... + def __or__(self, f: typing.Union['QGraphicsView.CacheMode', 'QGraphicsView.CacheModeFlag']) -> 'QGraphicsView.CacheMode': ... + def __iand__(self, f: typing.Union['QGraphicsView.CacheMode', 'QGraphicsView.CacheModeFlag']) -> 'QGraphicsView.CacheMode': ... + def __and__(self, f: typing.Union['QGraphicsView.CacheMode', 'QGraphicsView.CacheModeFlag']) -> 'QGraphicsView.CacheMode': ... + def __invert__(self) -> 'QGraphicsView.CacheMode': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class OptimizationFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QGraphicsView.OptimizationFlags', 'QGraphicsView.OptimizationFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QGraphicsView.OptimizationFlags', 'QGraphicsView.OptimizationFlag']) -> 'QGraphicsView.OptimizationFlags': ... + def __xor__(self, f: typing.Union['QGraphicsView.OptimizationFlags', 'QGraphicsView.OptimizationFlag']) -> 'QGraphicsView.OptimizationFlags': ... + def __ior__(self, f: typing.Union['QGraphicsView.OptimizationFlags', 'QGraphicsView.OptimizationFlag']) -> 'QGraphicsView.OptimizationFlags': ... + def __or__(self, f: typing.Union['QGraphicsView.OptimizationFlags', 'QGraphicsView.OptimizationFlag']) -> 'QGraphicsView.OptimizationFlags': ... + def __iand__(self, f: typing.Union['QGraphicsView.OptimizationFlags', 'QGraphicsView.OptimizationFlag']) -> 'QGraphicsView.OptimizationFlags': ... + def __and__(self, f: typing.Union['QGraphicsView.OptimizationFlags', 'QGraphicsView.OptimizationFlag']) -> 'QGraphicsView.OptimizationFlags': ... + def __invert__(self) -> 'QGraphicsView.OptimizationFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, scene: typing.Optional[QGraphicsScene], parent: typing.Optional[QWidget] = ...) -> None: ... + + rubberBandChanged: typing.ClassVar[QtCore.pyqtSignal] + def rubberBandRect(self) -> QtCore.QRect: ... + def isTransformed(self) -> bool: ... + def resetTransform(self) -> None: ... + def setTransform(self, matrix: QtGui.QTransform, combine: bool = ...) -> None: ... + def viewportTransform(self) -> QtGui.QTransform: ... + def transform(self) -> QtGui.QTransform: ... + def setRubberBandSelectionMode(self, mode: QtCore.Qt.ItemSelectionMode) -> None: ... + def rubberBandSelectionMode(self) -> QtCore.Qt.ItemSelectionMode: ... + def setOptimizationFlags(self, flags: typing.Union['QGraphicsView.OptimizationFlags', 'QGraphicsView.OptimizationFlag']) -> None: ... + def setOptimizationFlag(self, flag: 'QGraphicsView.OptimizationFlag', enabled: bool = ...) -> None: ... + def optimizationFlags(self) -> 'QGraphicsView.OptimizationFlags': ... + def setViewportUpdateMode(self, mode: 'QGraphicsView.ViewportUpdateMode') -> None: ... + def viewportUpdateMode(self) -> 'QGraphicsView.ViewportUpdateMode': ... + def drawForeground(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF) -> None: ... + def drawBackground(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRectF) -> None: ... + def inputMethodEvent(self, event: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def showEvent(self, event: typing.Optional[QtGui.QShowEvent]) -> None: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def wheelEvent(self, event: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseDoubleClickEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyReleaseEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def focusOutEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, event: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def dropEvent(self, event: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragMoveEvent(self, event: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragLeaveEvent(self, event: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragEnterEvent(self, event: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def contextMenuEvent(self, event: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def viewportEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def setupViewport(self, widget: typing.Optional[QWidget]) -> None: ... + def updateSceneRect(self, rect: QtCore.QRectF) -> None: ... + def updateScene(self, rects: typing.Iterable[QtCore.QRectF]) -> None: ... + def invalidateScene(self, rect: QtCore.QRectF = ..., layers: typing.Union[QGraphicsScene.SceneLayers, QGraphicsScene.SceneLayer] = ...) -> None: ... + def setForegroundBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def foregroundBrush(self) -> QtGui.QBrush: ... + def setBackgroundBrush(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def backgroundBrush(self) -> QtGui.QBrush: ... + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + @typing.overload + def mapFromScene(self, point: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> QtCore.QPoint: ... + @typing.overload + def mapFromScene(self, rect: QtCore.QRectF) -> QtGui.QPolygon: ... + @typing.overload + def mapFromScene(self, polygon: QtGui.QPolygonF) -> QtGui.QPolygon: ... + @typing.overload + def mapFromScene(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... + @typing.overload + def mapFromScene(self, ax: float, ay: float) -> QtCore.QPoint: ... + @typing.overload + def mapFromScene(self, ax: float, ay: float, w: float, h: float) -> QtGui.QPolygon: ... + @typing.overload + def mapToScene(self, point: QtCore.QPoint) -> QtCore.QPointF: ... + @typing.overload + def mapToScene(self, rect: QtCore.QRect) -> QtGui.QPolygonF: ... + @typing.overload + def mapToScene(self, polygon: QtGui.QPolygon) -> QtGui.QPolygonF: ... + @typing.overload + def mapToScene(self, path: QtGui.QPainterPath) -> QtGui.QPainterPath: ... + @typing.overload + def mapToScene(self, ax: int, ay: int) -> QtCore.QPointF: ... + @typing.overload + def mapToScene(self, ax: int, ay: int, w: int, h: int) -> QtGui.QPolygonF: ... + @typing.overload + def itemAt(self, pos: QtCore.QPoint) -> typing.Optional[QGraphicsItem]: ... + @typing.overload + def itemAt(self, ax: int, ay: int) -> typing.Optional[QGraphicsItem]: ... + @typing.overload + def items(self) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, pos: QtCore.QPoint) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, x: int, y: int) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, x: int, y: int, w: int, h: int, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, rect: QtCore.QRect, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, polygon: QtGui.QPolygon, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... + @typing.overload + def items(self, path: QtGui.QPainterPath, mode: QtCore.Qt.ItemSelectionMode = ...) -> typing.List[QGraphicsItem]: ... + def render(self, painter: typing.Optional[QtGui.QPainter], target: QtCore.QRectF = ..., source: QtCore.QRect = ..., mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... + @typing.overload + def fitInView(self, rect: QtCore.QRectF, mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... + @typing.overload + def fitInView(self, item: typing.Optional[QGraphicsItem], mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... + @typing.overload + def fitInView(self, x: float, y: float, w: float, h: float, mode: QtCore.Qt.AspectRatioMode = ...) -> None: ... + @typing.overload + def ensureVisible(self, rect: QtCore.QRectF, xMargin: int = ..., yMargin: int = ...) -> None: ... + @typing.overload + def ensureVisible(self, item: typing.Optional[QGraphicsItem], xMargin: int = ..., yMargin: int = ...) -> None: ... + @typing.overload + def ensureVisible(self, x: float, y: float, w: float, h: float, xMargin: int = ..., yMargin: int = ...) -> None: ... + @typing.overload + def centerOn(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def centerOn(self, item: typing.Optional[QGraphicsItem]) -> None: ... + @typing.overload + def centerOn(self, ax: float, ay: float) -> None: ... + def translate(self, dx: float, dy: float) -> None: ... + def shear(self, sh: float, sv: float) -> None: ... + def scale(self, sx: float, sy: float) -> None: ... + def rotate(self, angle: float) -> None: ... + @typing.overload + def setSceneRect(self, rect: QtCore.QRectF) -> None: ... + @typing.overload + def setSceneRect(self, ax: float, ay: float, aw: float, ah: float) -> None: ... + def sceneRect(self) -> QtCore.QRectF: ... + def setScene(self, scene: typing.Optional[QGraphicsScene]) -> None: ... + def scene(self) -> typing.Optional[QGraphicsScene]: ... + def setInteractive(self, allowed: bool) -> None: ... + def isInteractive(self) -> bool: ... + def resetCachedContent(self) -> None: ... + def setCacheMode(self, mode: typing.Union['QGraphicsView.CacheMode', 'QGraphicsView.CacheModeFlag']) -> None: ... + def cacheMode(self) -> 'QGraphicsView.CacheMode': ... + def setDragMode(self, mode: 'QGraphicsView.DragMode') -> None: ... + def dragMode(self) -> 'QGraphicsView.DragMode': ... + def setResizeAnchor(self, anchor: 'QGraphicsView.ViewportAnchor') -> None: ... + def resizeAnchor(self) -> 'QGraphicsView.ViewportAnchor': ... + def setTransformationAnchor(self, anchor: 'QGraphicsView.ViewportAnchor') -> None: ... + def transformationAnchor(self) -> 'QGraphicsView.ViewportAnchor': ... + def setAlignment(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def setRenderHints(self, hints: typing.Union[QtGui.QPainter.RenderHints, QtGui.QPainter.RenderHint]) -> None: ... + def setRenderHint(self, hint: QtGui.QPainter.RenderHint, on: bool = ...) -> None: ... + def renderHints(self) -> QtGui.QPainter.RenderHints: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QGridLayout(QLayout): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget]) -> None: ... + @typing.overload + def __init__(self) -> None: ... + + def itemAtPosition(self, row: int, column: int) -> typing.Optional[QLayoutItem]: ... + def spacing(self) -> int: ... + def setSpacing(self, spacing: int) -> None: ... + def verticalSpacing(self) -> int: ... + def setVerticalSpacing(self, spacing: int) -> None: ... + def horizontalSpacing(self) -> int: ... + def setHorizontalSpacing(self, spacing: int) -> None: ... + def getItemPosition(self, idx: int) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + def setDefaultPositioning(self, n: int, orient: QtCore.Qt.Orientation) -> None: ... + @typing.overload + def addItem(self, item: typing.Optional[QLayoutItem], row: int, column: int, rowSpan: int = ..., columnSpan: int = ..., alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + @typing.overload + def addItem(self, a0: typing.Optional[QLayoutItem]) -> None: ... + def setGeometry(self, a0: QtCore.QRect) -> None: ... + def count(self) -> int: ... + def takeAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... + def itemAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... + def originCorner(self) -> QtCore.Qt.Corner: ... + def setOriginCorner(self, a0: QtCore.Qt.Corner) -> None: ... + @typing.overload + def addLayout(self, a0: typing.Optional[QLayout], row: int, column: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + @typing.overload + def addLayout(self, a0: typing.Optional[QLayout], row: int, column: int, rowSpan: int, columnSpan: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + @typing.overload + def addWidget(self, w: typing.Optional[QWidget]) -> None: ... + @typing.overload + def addWidget(self, a0: typing.Optional[QWidget], row: int, column: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + @typing.overload + def addWidget(self, a0: typing.Optional[QWidget], row: int, column: int, rowSpan: int, columnSpan: int, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] = ...) -> None: ... + def invalidate(self) -> None: ... + def expandingDirections(self) -> QtCore.Qt.Orientations: ... + def minimumHeightForWidth(self, a0: int) -> int: ... + def heightForWidth(self, a0: int) -> int: ... + def hasHeightForWidth(self) -> bool: ... + def cellRect(self, row: int, column: int) -> QtCore.QRect: ... + def rowCount(self) -> int: ... + def columnCount(self) -> int: ... + def columnMinimumWidth(self, column: int) -> int: ... + def rowMinimumHeight(self, row: int) -> int: ... + def setColumnMinimumWidth(self, column: int, minSize: int) -> None: ... + def setRowMinimumHeight(self, row: int, minSize: int) -> None: ... + def columnStretch(self, column: int) -> int: ... + def rowStretch(self, row: int) -> int: ... + def setColumnStretch(self, column: int, stretch: int) -> None: ... + def setRowStretch(self, row: int, stretch: int) -> None: ... + def maximumSize(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QGroupBox(QWidget): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, title: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def childEvent(self, a0: typing.Optional[QtCore.QChildEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionGroupBox']) -> None: ... + toggled: typing.ClassVar[QtCore.pyqtSignal] + clicked: typing.ClassVar[QtCore.pyqtSignal] + def setChecked(self, b: bool) -> None: ... + def isChecked(self) -> bool: ... + def setCheckable(self, b: bool) -> None: ... + def isCheckable(self) -> bool: ... + def setFlat(self, b: bool) -> None: ... + def isFlat(self) -> bool: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def setAlignment(self, a0: int) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def setTitle(self, a0: typing.Optional[str]) -> None: ... + def title(self) -> str: ... + + +class QHeaderView(QAbstractItemView): + + class ResizeMode(int): + Interactive = ... # type: QHeaderView.ResizeMode + Fixed = ... # type: QHeaderView.ResizeMode + Stretch = ... # type: QHeaderView.ResizeMode + ResizeToContents = ... # type: QHeaderView.ResizeMode + Custom = ... # type: QHeaderView.ResizeMode + + def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... + + def isFirstSectionMovable(self) -> bool: ... + def setFirstSectionMovable(self, movable: bool) -> None: ... + def resetDefaultSectionSize(self) -> None: ... + def setMaximumSectionSize(self, size: int) -> None: ... + def maximumSectionSize(self) -> int: ... + def resizeContentsPrecision(self) -> int: ... + def setResizeContentsPrecision(self, precision: int) -> None: ... + def setVisible(self, v: bool) -> None: ... + @typing.overload + def setSectionResizeMode(self, logicalIndex: int, mode: 'QHeaderView.ResizeMode') -> None: ... + @typing.overload + def setSectionResizeMode(self, mode: 'QHeaderView.ResizeMode') -> None: ... + def sectionResizeMode(self, logicalIndex: int) -> 'QHeaderView.ResizeMode': ... + def sectionsClickable(self) -> bool: ... + def setSectionsClickable(self, clickable: bool) -> None: ... + def sectionsMovable(self) -> bool: ... + def setSectionsMovable(self, movable: bool) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionHeader']) -> None: ... + sortIndicatorChanged: typing.ClassVar[QtCore.pyqtSignal] + sectionEntered: typing.ClassVar[QtCore.pyqtSignal] + def setOffsetToLastSection(self) -> None: ... + def reset(self) -> None: ... + def restoreState(self, state: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def saveState(self) -> QtCore.QByteArray: ... + def setMinimumSectionSize(self, size: int) -> None: ... + def minimumSectionSize(self) -> int: ... + def setCascadingSectionResizes(self, enable: bool) -> None: ... + def cascadingSectionResizes(self) -> bool: ... + def swapSections(self, first: int, second: int) -> None: ... + def sectionsHidden(self) -> bool: ... + def setDefaultAlignment(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def defaultAlignment(self) -> QtCore.Qt.Alignment: ... + def setDefaultSectionSize(self, size: int) -> None: ... + def defaultSectionSize(self) -> int: ... + def hiddenSectionCount(self) -> int: ... + def showSection(self, alogicalIndex: int) -> None: ... + def hideSection(self, alogicalIndex: int) -> None: ... + def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... + def setSelection(self, rect: QtCore.QRect, flags: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def moveCursor(self, a0: QAbstractItemView.CursorAction, a1: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> QtCore.QModelIndex: ... + def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... + def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... + def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint) -> None: ... + def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... + def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... + def dataChanged(self, topLeft: QtCore.QModelIndex, bottomRight: QtCore.QModelIndex, roles: typing.Iterable[int] = ...) -> None: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def updateGeometries(self) -> None: ... + def verticalOffset(self) -> int: ... + def horizontalOffset(self) -> int: ... + def sectionSizeFromContents(self, logicalIndex: int) -> QtCore.QSize: ... + def paintSection(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, logicalIndex: int) -> None: ... + def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def viewportEvent(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def currentChanged(self, current: QtCore.QModelIndex, old: QtCore.QModelIndex) -> None: ... + @typing.overload + def initializeSections(self) -> None: ... + @typing.overload + def initializeSections(self, start: int, end: int) -> None: ... + def initialize(self) -> None: ... + def sectionsAboutToBeRemoved(self, parent: QtCore.QModelIndex, logicalFirst: int, logicalLast: int) -> None: ... + def sectionsInserted(self, parent: QtCore.QModelIndex, logicalFirst: int, logicalLast: int) -> None: ... + @typing.overload + def resizeSections(self) -> None: ... + @typing.overload + def resizeSections(self, mode: 'QHeaderView.ResizeMode') -> None: ... + def updateSection(self, logicalIndex: int) -> None: ... + sectionHandleDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] + sectionCountChanged: typing.ClassVar[QtCore.pyqtSignal] + sectionDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] + sectionClicked: typing.ClassVar[QtCore.pyqtSignal] + sectionPressed: typing.ClassVar[QtCore.pyqtSignal] + sectionResized: typing.ClassVar[QtCore.pyqtSignal] + sectionMoved: typing.ClassVar[QtCore.pyqtSignal] + geometriesChanged: typing.ClassVar[QtCore.pyqtSignal] + def setOffsetToSectionPosition(self, visualIndex: int) -> None: ... + def headerDataChanged(self, orientation: QtCore.Qt.Orientation, logicalFirst: int, logicalLast: int) -> None: ... + def setOffset(self, offset: int) -> None: ... + def sectionsMoved(self) -> bool: ... + def setStretchLastSection(self, stretch: bool) -> None: ... + def stretchLastSection(self) -> bool: ... + def sortIndicatorOrder(self) -> QtCore.Qt.SortOrder: ... + def sortIndicatorSection(self) -> int: ... + def setSortIndicator(self, logicalIndex: int, order: QtCore.Qt.SortOrder) -> None: ... + def isSortIndicatorShown(self) -> bool: ... + def setSortIndicatorShown(self, show: bool) -> None: ... + def stretchSectionCount(self) -> int: ... + def highlightSections(self) -> bool: ... + def setHighlightSections(self, highlight: bool) -> None: ... + def logicalIndex(self, visualIndex: int) -> int: ... + def visualIndex(self, logicalIndex: int) -> int: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def setSectionHidden(self, logicalIndex: int, hide: bool) -> None: ... + def isSectionHidden(self, logicalIndex: int) -> bool: ... + def resizeSection(self, logicalIndex: int, size: int) -> None: ... + def moveSection(self, from_: int, to: int) -> None: ... + def sectionViewportPosition(self, logicalIndex: int) -> int: ... + def sectionPosition(self, logicalIndex: int) -> int: ... + def sectionSize(self, logicalIndex: int) -> int: ... + @typing.overload + def logicalIndexAt(self, position: int) -> int: ... + @typing.overload + def logicalIndexAt(self, ax: int, ay: int) -> int: ... + @typing.overload + def logicalIndexAt(self, apos: QtCore.QPoint) -> int: ... + def visualIndexAt(self, position: int) -> int: ... + def sectionSizeHint(self, logicalIndex: int) -> int: ... + def sizeHint(self) -> QtCore.QSize: ... + def length(self) -> int: ... + def offset(self) -> int: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... + + +class QInputDialog(QDialog): + + class InputMode(int): + TextInput = ... # type: QInputDialog.InputMode + IntInput = ... # type: QInputDialog.InputMode + DoubleInput = ... # type: QInputDialog.InputMode + + class InputDialogOption(int): + NoButtons = ... # type: QInputDialog.InputDialogOption + UseListViewForComboBoxItems = ... # type: QInputDialog.InputDialogOption + UsePlainTextEditForTextInput = ... # type: QInputDialog.InputDialogOption + + class InputDialogOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QInputDialog.InputDialogOptions', 'QInputDialog.InputDialogOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QInputDialog.InputDialogOptions', 'QInputDialog.InputDialogOption']) -> 'QInputDialog.InputDialogOptions': ... + def __xor__(self, f: typing.Union['QInputDialog.InputDialogOptions', 'QInputDialog.InputDialogOption']) -> 'QInputDialog.InputDialogOptions': ... + def __ior__(self, f: typing.Union['QInputDialog.InputDialogOptions', 'QInputDialog.InputDialogOption']) -> 'QInputDialog.InputDialogOptions': ... + def __or__(self, f: typing.Union['QInputDialog.InputDialogOptions', 'QInputDialog.InputDialogOption']) -> 'QInputDialog.InputDialogOptions': ... + def __iand__(self, f: typing.Union['QInputDialog.InputDialogOptions', 'QInputDialog.InputDialogOption']) -> 'QInputDialog.InputDialogOptions': ... + def __and__(self, f: typing.Union['QInputDialog.InputDialogOptions', 'QInputDialog.InputDialogOption']) -> 'QInputDialog.InputDialogOptions': ... + def __invert__(self) -> 'QInputDialog.InputDialogOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def doubleStep(self) -> float: ... + def setDoubleStep(self, step: float) -> None: ... + doubleValueSelected: typing.ClassVar[QtCore.pyqtSignal] + doubleValueChanged: typing.ClassVar[QtCore.pyqtSignal] + intValueSelected: typing.ClassVar[QtCore.pyqtSignal] + intValueChanged: typing.ClassVar[QtCore.pyqtSignal] + textValueSelected: typing.ClassVar[QtCore.pyqtSignal] + textValueChanged: typing.ClassVar[QtCore.pyqtSignal] + def done(self, result: int) -> None: ... + def setVisible(self, visible: bool) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def cancelButtonText(self) -> str: ... + def setCancelButtonText(self, text: typing.Optional[str]) -> None: ... + def okButtonText(self) -> str: ... + def setOkButtonText(self, text: typing.Optional[str]) -> None: ... + def doubleDecimals(self) -> int: ... + def setDoubleDecimals(self, decimals: int) -> None: ... + def setDoubleRange(self, min: float, max: float) -> None: ... + def doubleMaximum(self) -> float: ... + def setDoubleMaximum(self, max: float) -> None: ... + def doubleMinimum(self) -> float: ... + def setDoubleMinimum(self, min: float) -> None: ... + def doubleValue(self) -> float: ... + def setDoubleValue(self, value: float) -> None: ... + def intStep(self) -> int: ... + def setIntStep(self, step: int) -> None: ... + def setIntRange(self, min: int, max: int) -> None: ... + def intMaximum(self) -> int: ... + def setIntMaximum(self, max: int) -> None: ... + def intMinimum(self) -> int: ... + def setIntMinimum(self, min: int) -> None: ... + def intValue(self) -> int: ... + def setIntValue(self, value: int) -> None: ... + def comboBoxItems(self) -> typing.List[str]: ... + def setComboBoxItems(self, items: typing.Iterable[typing.Optional[str]]) -> None: ... + def isComboBoxEditable(self) -> bool: ... + def setComboBoxEditable(self, editable: bool) -> None: ... + def textEchoMode(self) -> 'QLineEdit.EchoMode': ... + def setTextEchoMode(self, mode: 'QLineEdit.EchoMode') -> None: ... + def textValue(self) -> str: ... + def setTextValue(self, text: typing.Optional[str]) -> None: ... + def options(self) -> 'QInputDialog.InputDialogOptions': ... + def setOptions(self, options: typing.Union['QInputDialog.InputDialogOptions', 'QInputDialog.InputDialogOption']) -> None: ... + def testOption(self, option: 'QInputDialog.InputDialogOption') -> bool: ... + def setOption(self, option: 'QInputDialog.InputDialogOption', on: bool = ...) -> None: ... + def labelText(self) -> str: ... + def setLabelText(self, text: typing.Optional[str]) -> None: ... + def inputMode(self) -> 'QInputDialog.InputMode': ... + def setInputMode(self, mode: 'QInputDialog.InputMode') -> None: ... + @staticmethod + def getMultiLineText(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], text: typing.Optional[str] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ..., inputMethodHints: typing.Union[QtCore.Qt.InputMethodHints, QtCore.Qt.InputMethodHint] = ...) -> typing.Tuple[str, typing.Optional[bool]]: ... + @staticmethod + def getItem(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], items: typing.Iterable[typing.Optional[str]], current: int = ..., editable: bool = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ..., inputMethodHints: typing.Union[QtCore.Qt.InputMethodHints, QtCore.Qt.InputMethodHint] = ...) -> typing.Tuple[str, typing.Optional[bool]]: ... + @typing.overload + @staticmethod + def getDouble(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], value: float = ..., min: float = ..., max: float = ..., decimals: int = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> typing.Tuple[float, typing.Optional[bool]]: ... + @typing.overload + @staticmethod + def getDouble(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], value: float, minValue: float, maxValue: float, decimals: int, flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType], step: float) -> typing.Tuple[float, typing.Optional[bool]]: ... + @staticmethod + def getInt(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], value: int = ..., min: int = ..., max: int = ..., step: int = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> typing.Tuple[int, typing.Optional[bool]]: ... + @staticmethod + def getText(parent: typing.Optional[QWidget], title: typing.Optional[str], label: typing.Optional[str], echo: 'QLineEdit.EchoMode' = ..., text: typing.Optional[str] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ..., inputMethodHints: typing.Union[QtCore.Qt.InputMethodHints, QtCore.Qt.InputMethodHint] = ...) -> typing.Tuple[str, typing.Optional[bool]]: ... + + +class QItemDelegate(QAbstractItemDelegate): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def editorEvent(self, event: typing.Optional[QtCore.QEvent], model: typing.Optional[QtCore.QAbstractItemModel], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> bool: ... + def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def drawFocus(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', rect: QtCore.QRect) -> None: ... + def drawDisplay(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', rect: QtCore.QRect, text: typing.Optional[str]) -> None: ... + def drawDecoration(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', rect: QtCore.QRect, pixmap: QtGui.QPixmap) -> None: ... + def drawCheck(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', rect: QtCore.QRect, state: QtCore.Qt.CheckState) -> None: ... + def drawBackground(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... + def setClipping(self, clip: bool) -> None: ... + def hasClipping(self) -> bool: ... + def setItemEditorFactory(self, factory: typing.Optional['QItemEditorFactory']) -> None: ... + def itemEditorFactory(self) -> typing.Optional['QItemEditorFactory']: ... + def updateEditorGeometry(self, editor: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... + def setModelData(self, editor: typing.Optional[QWidget], model: typing.Optional[QtCore.QAbstractItemModel], index: QtCore.QModelIndex) -> None: ... + def setEditorData(self, editor: typing.Optional[QWidget], index: QtCore.QModelIndex) -> None: ... + def createEditor(self, parent: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> typing.Optional[QWidget]: ... + def sizeHint(self, option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> QtCore.QSize: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... + + +class QItemEditorCreatorBase(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QItemEditorCreatorBase') -> None: ... + + def valuePropertyName(self) -> QtCore.QByteArray: ... + def createWidget(self, parent: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... + + +class QItemEditorFactory(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QItemEditorFactory') -> None: ... + + @staticmethod + def setDefaultFactory(factory: typing.Optional['QItemEditorFactory']) -> None: ... + @staticmethod + def defaultFactory() -> typing.Optional['QItemEditorFactory']: ... + def registerEditor(self, userType: int, creator: typing.Optional[QItemEditorCreatorBase]) -> None: ... + def valuePropertyName(self, userType: int) -> QtCore.QByteArray: ... + def createEditor(self, userType: int, parent: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... + + +class QKeyEventTransition(QtCore.QEventTransition): + + @typing.overload + def __init__(self, sourceState: typing.Optional[QtCore.QState] = ...) -> None: ... + @typing.overload + def __init__(self, object: typing.Optional[QtCore.QObject], type: QtCore.QEvent.Type, key: int, sourceState: typing.Optional[QtCore.QState] = ...) -> None: ... + + def eventTest(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def onTransition(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def setModifierMask(self, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> None: ... + def modifierMask(self) -> QtCore.Qt.KeyboardModifiers: ... + def setKey(self, key: int) -> None: ... + def key(self) -> int: ... + + +class QKeySequenceEdit(QWidget): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, keySequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], parent: typing.Optional[QWidget] = ...) -> None: ... + + def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def keyReleaseEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + keySequenceChanged: typing.ClassVar[QtCore.pyqtSignal] + editingFinished: typing.ClassVar[QtCore.pyqtSignal] + def clear(self) -> None: ... + def setKeySequence(self, keySequence: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... + def keySequence(self) -> QtGui.QKeySequence: ... + + +class QLabel(QFrame): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def selectionStart(self) -> int: ... + def selectedText(self) -> str: ... + def hasSelectedText(self) -> bool: ... + def setSelection(self, a0: int, a1: int) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def focusOutEvent(self, ev: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, ev: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def contextMenuEvent(self, ev: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def mouseReleaseEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyPressEvent(self, ev: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + linkHovered: typing.ClassVar[QtCore.pyqtSignal] + linkActivated: typing.ClassVar[QtCore.pyqtSignal] + def setText(self, a0: typing.Optional[str]) -> None: ... + def setPixmap(self, a0: QtGui.QPixmap) -> None: ... + def setPicture(self, a0: QtGui.QPicture) -> None: ... + @typing.overload + def setNum(self, a0: float) -> None: ... + @typing.overload + def setNum(self, a0: int) -> None: ... + def setMovie(self, movie: typing.Optional[QtGui.QMovie]) -> None: ... + def clear(self) -> None: ... + def setOpenExternalLinks(self, open: bool) -> None: ... + def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlags: ... + def setTextInteractionFlags(self, flags: typing.Union[QtCore.Qt.TextInteractionFlags, QtCore.Qt.TextInteractionFlag]) -> None: ... + def openExternalLinks(self) -> bool: ... + def heightForWidth(self, a0: int) -> int: ... + def buddy(self) -> typing.Optional[QWidget]: ... + def setBuddy(self, a0: typing.Optional[QWidget]) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def setScaledContents(self, a0: bool) -> None: ... + def hasScaledContents(self) -> bool: ... + def setMargin(self, a0: int) -> None: ... + def margin(self) -> int: ... + def setIndent(self, a0: int) -> None: ... + def indent(self) -> int: ... + def wordWrap(self) -> bool: ... + def setWordWrap(self, on: bool) -> None: ... + def setAlignment(self, a0: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def setTextFormat(self, a0: QtCore.Qt.TextFormat) -> None: ... + def textFormat(self) -> QtCore.Qt.TextFormat: ... + def movie(self) -> typing.Optional[QtGui.QMovie]: ... + def picture(self) -> typing.Optional[QtGui.QPicture]: ... + def pixmap(self) -> typing.Optional[QtGui.QPixmap]: ... + def text(self) -> str: ... + + +class QSpacerItem(QLayoutItem): + + @typing.overload + def __init__(self, w: int, h: int, hPolicy: 'QSizePolicy.Policy' = ..., vPolicy: 'QSizePolicy.Policy' = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QSpacerItem') -> None: ... + + def sizePolicy(self) -> 'QSizePolicy': ... + def spacerItem(self) -> typing.Optional['QSpacerItem']: ... + def geometry(self) -> QtCore.QRect: ... + def setGeometry(self, a0: QtCore.QRect) -> None: ... + def isEmpty(self) -> bool: ... + def expandingDirections(self) -> QtCore.Qt.Orientations: ... + def maximumSize(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def changeSize(self, w: int, h: int, hPolicy: 'QSizePolicy.Policy' = ..., vPolicy: 'QSizePolicy.Policy' = ...) -> None: ... + + +class QWidgetItem(QLayoutItem): + + def __init__(self, w: typing.Optional[QWidget]) -> None: ... + + def controlTypes(self) -> 'QSizePolicy.ControlTypes': ... + def heightForWidth(self, a0: int) -> int: ... + def hasHeightForWidth(self) -> bool: ... + def widget(self) -> typing.Optional[QWidget]: ... + def geometry(self) -> QtCore.QRect: ... + def setGeometry(self, a0: QtCore.QRect) -> None: ... + def isEmpty(self) -> bool: ... + def expandingDirections(self) -> QtCore.Qt.Orientations: ... + def maximumSize(self) -> QtCore.QSize: ... + def minimumSize(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QLCDNumber(QFrame): + + class SegmentStyle(int): + Outline = ... # type: QLCDNumber.SegmentStyle + Filled = ... # type: QLCDNumber.SegmentStyle + Flat = ... # type: QLCDNumber.SegmentStyle + + class Mode(int): + Hex = ... # type: QLCDNumber.Mode + Dec = ... # type: QLCDNumber.Mode + Oct = ... # type: QLCDNumber.Mode + Bin = ... # type: QLCDNumber.Mode + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, numDigits: int, parent: typing.Optional[QWidget] = ...) -> None: ... + + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + overflow: typing.ClassVar[QtCore.pyqtSignal] + def setSmallDecimalPoint(self, a0: bool) -> None: ... + def setBinMode(self) -> None: ... + def setOctMode(self) -> None: ... + def setDecMode(self) -> None: ... + def setHexMode(self) -> None: ... + @typing.overload + def display(self, str: typing.Optional[str]) -> None: ... + @typing.overload + def display(self, num: float) -> None: ... + @typing.overload + def display(self, num: int) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def intValue(self) -> int: ... + def value(self) -> float: ... + def setSegmentStyle(self, a0: 'QLCDNumber.SegmentStyle') -> None: ... + def segmentStyle(self) -> 'QLCDNumber.SegmentStyle': ... + def setMode(self, a0: 'QLCDNumber.Mode') -> None: ... + def mode(self) -> 'QLCDNumber.Mode': ... + @typing.overload + def checkOverflow(self, num: float) -> bool: ... + @typing.overload + def checkOverflow(self, num: int) -> bool: ... + def setNumDigits(self, nDigits: int) -> None: ... + def setDigitCount(self, nDigits: int) -> None: ... + def digitCount(self) -> int: ... + def smallDecimalPoint(self) -> bool: ... + + +class QLineEdit(QWidget): + + class ActionPosition(int): + LeadingPosition = ... # type: QLineEdit.ActionPosition + TrailingPosition = ... # type: QLineEdit.ActionPosition + + class EchoMode(int): + Normal = ... # type: QLineEdit.EchoMode + NoEcho = ... # type: QLineEdit.EchoMode + Password = ... # type: QLineEdit.EchoMode + PasswordEchoOnEdit = ... # type: QLineEdit.EchoMode + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, contents: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + inputRejected: typing.ClassVar[QtCore.pyqtSignal] + def selectionLength(self) -> int: ... + def selectionEnd(self) -> int: ... + @typing.overload + def addAction(self, action: typing.Optional[QAction]) -> None: ... + @typing.overload + def addAction(self, action: typing.Optional[QAction], position: 'QLineEdit.ActionPosition') -> None: ... + @typing.overload + def addAction(self, icon: QtGui.QIcon, position: 'QLineEdit.ActionPosition') -> typing.Optional[QAction]: ... + def isClearButtonEnabled(self) -> bool: ... + def setClearButtonEnabled(self, enable: bool) -> None: ... + def cursorMoveStyle(self) -> QtCore.Qt.CursorMoveStyle: ... + def setCursorMoveStyle(self, style: QtCore.Qt.CursorMoveStyle) -> None: ... + def setPlaceholderText(self, a0: typing.Optional[str]) -> None: ... + def placeholderText(self) -> str: ... + def textMargins(self) -> QtCore.QMargins: ... + def getTextMargins(self) -> typing.Tuple[typing.Optional[int], typing.Optional[int], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setTextMargins(self, left: int, top: int, right: int, bottom: int) -> None: ... + @typing.overload + def setTextMargins(self, margins: QtCore.QMargins) -> None: ... + def completer(self) -> typing.Optional[QCompleter]: ... + def setCompleter(self, completer: typing.Optional[QCompleter]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + @typing.overload + def inputMethodQuery(self, a0: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + @typing.overload + def inputMethodQuery(self, property: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... + def cursorRect(self) -> QtCore.QRect: ... + def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def dropEvent(self, a0: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragEnterEvent(self, a0: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def mouseDoubleClickEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionFrame']) -> None: ... + selectionChanged: typing.ClassVar[QtCore.pyqtSignal] + editingFinished: typing.ClassVar[QtCore.pyqtSignal] + returnPressed: typing.ClassVar[QtCore.pyqtSignal] + cursorPositionChanged: typing.ClassVar[QtCore.pyqtSignal] + textEdited: typing.ClassVar[QtCore.pyqtSignal] + textChanged: typing.ClassVar[QtCore.pyqtSignal] + def createStandardContextMenu(self) -> typing.Optional['QMenu']: ... + def insert(self, a0: typing.Optional[str]) -> None: ... + def deselect(self) -> None: ... + def paste(self) -> None: ... + def copy(self) -> None: ... + def cut(self) -> None: ... + def redo(self) -> None: ... + def undo(self) -> None: ... + def selectAll(self) -> None: ... + def clear(self) -> None: ... + def setText(self, a0: typing.Optional[str]) -> None: ... + def hasAcceptableInput(self) -> bool: ... + def setInputMask(self, inputMask: typing.Optional[str]) -> None: ... + def inputMask(self) -> str: ... + def dragEnabled(self) -> bool: ... + def setDragEnabled(self, b: bool) -> None: ... + def isRedoAvailable(self) -> bool: ... + def isUndoAvailable(self) -> bool: ... + def selectionStart(self) -> int: ... + def selectedText(self) -> str: ... + def hasSelectedText(self) -> bool: ... + def setSelection(self, a0: int, a1: int) -> None: ... + def setModified(self, a0: bool) -> None: ... + def isModified(self) -> bool: ... + def end(self, mark: bool) -> None: ... + def home(self, mark: bool) -> None: ... + def del_(self) -> None: ... + def backspace(self) -> None: ... + def cursorWordBackward(self, mark: bool) -> None: ... + def cursorWordForward(self, mark: bool) -> None: ... + def cursorBackward(self, mark: bool, steps: int = ...) -> None: ... + def cursorForward(self, mark: bool, steps: int = ...) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def setAlignment(self, flag: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def cursorPositionAt(self, pos: QtCore.QPoint) -> int: ... + def setCursorPosition(self, a0: int) -> None: ... + def cursorPosition(self) -> int: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def validator(self) -> typing.Optional[QtGui.QValidator]: ... + def setValidator(self, a0: typing.Optional[QtGui.QValidator]) -> None: ... + def setReadOnly(self, a0: bool) -> None: ... + def isReadOnly(self) -> bool: ... + def setEchoMode(self, a0: 'QLineEdit.EchoMode') -> None: ... + def echoMode(self) -> 'QLineEdit.EchoMode': ... + def hasFrame(self) -> bool: ... + def setFrame(self, a0: bool) -> None: ... + def setMaxLength(self, a0: int) -> None: ... + def maxLength(self) -> int: ... + def displayText(self) -> str: ... + def text(self) -> str: ... + + +class QListView(QAbstractItemView): + + class ViewMode(int): + ListMode = ... # type: QListView.ViewMode + IconMode = ... # type: QListView.ViewMode + + class LayoutMode(int): + SinglePass = ... # type: QListView.LayoutMode + Batched = ... # type: QListView.LayoutMode + + class ResizeMode(int): + Fixed = ... # type: QListView.ResizeMode + Adjust = ... # type: QListView.ResizeMode + + class Flow(int): + LeftToRight = ... # type: QListView.Flow + TopToBottom = ... # type: QListView.Flow + + class Movement(int): + Static = ... # type: QListView.Movement + Free = ... # type: QListView.Movement + Snap = ... # type: QListView.Movement + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def itemAlignment(self) -> QtCore.Qt.Alignment: ... + def setItemAlignment(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... + def selectionChanged(self, selected: QtCore.QItemSelection, deselected: QtCore.QItemSelection) -> None: ... + def isSelectionRectVisible(self) -> bool: ... + def setSelectionRectVisible(self, show: bool) -> None: ... + def wordWrap(self) -> bool: ... + def setWordWrap(self, on: bool) -> None: ... + def batchSize(self) -> int: ... + def setBatchSize(self, batchSize: int) -> None: ... + def viewportSizeHint(self) -> QtCore.QSize: ... + def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... + def updateGeometries(self) -> None: ... + def selectedIndexes(self) -> typing.List[QtCore.QModelIndex]: ... + def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... + def setSelection(self, rect: QtCore.QRect, command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def setPositionForIndex(self, position: QtCore.QPoint, index: QtCore.QModelIndex) -> None: ... + def rectForIndex(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... + def moveCursor(self, cursorAction: QAbstractItemView.CursorAction, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> QtCore.QModelIndex: ... + def verticalOffset(self) -> int: ... + def horizontalOffset(self) -> int: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def viewOptions(self) -> 'QStyleOptionViewItem': ... + def startDrag(self, supportedActions: typing.Union[QtCore.Qt.DropActions, QtCore.Qt.DropAction]) -> None: ... + def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def dropEvent(self, e: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def rowsAboutToBeRemoved(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... + def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... + def dataChanged(self, topLeft: QtCore.QModelIndex, bottomRight: QtCore.QModelIndex, roles: typing.Iterable[int] = ...) -> None: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + indexesMoved: typing.ClassVar[QtCore.pyqtSignal] + def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... + def reset(self) -> None: ... + def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... + def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint = ...) -> None: ... + def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... + def uniformItemSizes(self) -> bool: ... + def setUniformItemSizes(self, enable: bool) -> None: ... + def modelColumn(self) -> int: ... + def setModelColumn(self, column: int) -> None: ... + def setRowHidden(self, row: int, hide: bool) -> None: ... + def isRowHidden(self, row: int) -> bool: ... + def clearPropertyFlags(self) -> None: ... + def viewMode(self) -> 'QListView.ViewMode': ... + def setViewMode(self, mode: 'QListView.ViewMode') -> None: ... + def gridSize(self) -> QtCore.QSize: ... + def setGridSize(self, size: QtCore.QSize) -> None: ... + def spacing(self) -> int: ... + def setSpacing(self, space: int) -> None: ... + def layoutMode(self) -> 'QListView.LayoutMode': ... + def setLayoutMode(self, mode: 'QListView.LayoutMode') -> None: ... + def resizeMode(self) -> 'QListView.ResizeMode': ... + def setResizeMode(self, mode: 'QListView.ResizeMode') -> None: ... + def isWrapping(self) -> bool: ... + def setWrapping(self, enable: bool) -> None: ... + def flow(self) -> 'QListView.Flow': ... + def setFlow(self, flow: 'QListView.Flow') -> None: ... + def movement(self) -> 'QListView.Movement': ... + def setMovement(self, movement: 'QListView.Movement') -> None: ... + + +class QListWidgetItem(PyQt5.sip.wrapper): + + class ItemType(int): + Type = ... # type: QListWidgetItem.ItemType + UserType = ... # type: QListWidgetItem.ItemType + + @typing.overload + def __init__(self, parent: typing.Optional['QListWidget'] = ..., type: int = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional['QListWidget'] = ..., type: int = ...) -> None: ... + @typing.overload + def __init__(self, icon: QtGui.QIcon, text: typing.Optional[str], parent: typing.Optional['QListWidget'] = ..., type: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QListWidgetItem') -> None: ... + + def __ge__(self, other: 'QListWidgetItem') -> bool: ... + def isHidden(self) -> bool: ... + def setHidden(self, ahide: bool) -> None: ... + def isSelected(self) -> bool: ... + def setSelected(self, aselect: bool) -> None: ... + def setForeground(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def foreground(self) -> QtGui.QBrush: ... + def setBackground(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def background(self) -> QtGui.QBrush: ... + def setFont(self, afont: QtGui.QFont) -> None: ... + def setWhatsThis(self, awhatsThis: typing.Optional[str]) -> None: ... + def setToolTip(self, atoolTip: typing.Optional[str]) -> None: ... + def setStatusTip(self, astatusTip: typing.Optional[str]) -> None: ... + def setIcon(self, aicon: QtGui.QIcon) -> None: ... + def setText(self, atext: typing.Optional[str]) -> None: ... + def setFlags(self, aflags: typing.Union[QtCore.Qt.ItemFlags, QtCore.Qt.ItemFlag]) -> None: ... + def type(self) -> int: ... + def write(self, out: QtCore.QDataStream) -> None: ... + def read(self, in_: QtCore.QDataStream) -> None: ... + def __lt__(self, other: 'QListWidgetItem') -> bool: ... + def setData(self, role: int, value: typing.Any) -> None: ... + def data(self, role: int) -> typing.Any: ... + def setSizeHint(self, size: QtCore.QSize) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def setCheckState(self, state: QtCore.Qt.CheckState) -> None: ... + def checkState(self) -> QtCore.Qt.CheckState: ... + def setTextAlignment(self, alignment: int) -> None: ... + def textAlignment(self) -> int: ... + def font(self) -> QtGui.QFont: ... + def whatsThis(self) -> str: ... + def toolTip(self) -> str: ... + def statusTip(self) -> str: ... + def icon(self) -> QtGui.QIcon: ... + def text(self) -> str: ... + def flags(self) -> QtCore.Qt.ItemFlags: ... + def listWidget(self) -> typing.Optional['QListWidget']: ... + def clone(self) -> typing.Optional['QListWidgetItem']: ... + + +class QListWidget(QListView): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def isPersistentEditorOpen(self, item: typing.Optional[QListWidgetItem]) -> bool: ... + def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... + def removeItemWidget(self, aItem: typing.Optional[QListWidgetItem]) -> None: ... + def dropEvent(self, event: typing.Optional[QtGui.QDropEvent]) -> None: ... + def isSortingEnabled(self) -> bool: ... + def setSortingEnabled(self, enable: bool) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def itemFromIndex(self, index: QtCore.QModelIndex) -> typing.Optional[QListWidgetItem]: ... + def indexFromItem(self, item: typing.Optional[QListWidgetItem]) -> QtCore.QModelIndex: ... + def items(self, data: typing.Optional[QtCore.QMimeData]) -> typing.List[QListWidgetItem]: ... + def supportedDropActions(self) -> QtCore.Qt.DropActions: ... + def dropMimeData(self, index: int, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction) -> bool: ... + def mimeData(self, items: typing.Iterable[QListWidgetItem]) -> typing.Optional[QtCore.QMimeData]: ... + def mimeTypes(self) -> typing.List[str]: ... + itemSelectionChanged: typing.ClassVar[QtCore.pyqtSignal] + currentRowChanged: typing.ClassVar[QtCore.pyqtSignal] + currentTextChanged: typing.ClassVar[QtCore.pyqtSignal] + currentItemChanged: typing.ClassVar[QtCore.pyqtSignal] + itemChanged: typing.ClassVar[QtCore.pyqtSignal] + itemEntered: typing.ClassVar[QtCore.pyqtSignal] + itemActivated: typing.ClassVar[QtCore.pyqtSignal] + itemDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] + itemClicked: typing.ClassVar[QtCore.pyqtSignal] + itemPressed: typing.ClassVar[QtCore.pyqtSignal] + def scrollToItem(self, item: typing.Optional[QListWidgetItem], hint: QAbstractItemView.ScrollHint = ...) -> None: ... + def clear(self) -> None: ... + def findItems(self, text: typing.Optional[str], flags: typing.Union[QtCore.Qt.MatchFlags, QtCore.Qt.MatchFlag]) -> typing.List[QListWidgetItem]: ... + def selectedItems(self) -> typing.List[QListWidgetItem]: ... + def closePersistentEditor(self, item: typing.Optional[QListWidgetItem]) -> None: ... + def openPersistentEditor(self, item: typing.Optional[QListWidgetItem]) -> None: ... + def editItem(self, item: typing.Optional[QListWidgetItem]) -> None: ... + def sortItems(self, order: QtCore.Qt.SortOrder = ...) -> None: ... + def visualItemRect(self, item: typing.Optional[QListWidgetItem]) -> QtCore.QRect: ... + def setItemWidget(self, item: typing.Optional[QListWidgetItem], widget: typing.Optional[QWidget]) -> None: ... + def itemWidget(self, item: typing.Optional[QListWidgetItem]) -> typing.Optional[QWidget]: ... + @typing.overload + def itemAt(self, p: QtCore.QPoint) -> typing.Optional[QListWidgetItem]: ... + @typing.overload + def itemAt(self, ax: int, ay: int) -> typing.Optional[QListWidgetItem]: ... + @typing.overload + def setCurrentRow(self, row: int) -> None: ... + @typing.overload + def setCurrentRow(self, row: int, command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def currentRow(self) -> int: ... + @typing.overload + def setCurrentItem(self, item: typing.Optional[QListWidgetItem]) -> None: ... + @typing.overload + def setCurrentItem(self, item: typing.Optional[QListWidgetItem], command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def currentItem(self) -> typing.Optional[QListWidgetItem]: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def takeItem(self, row: int) -> typing.Optional[QListWidgetItem]: ... + def addItems(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... + @typing.overload + def addItem(self, aitem: typing.Optional[QListWidgetItem]) -> None: ... + @typing.overload + def addItem(self, label: typing.Optional[str]) -> None: ... + def insertItems(self, row: int, labels: typing.Iterable[typing.Optional[str]]) -> None: ... + @typing.overload + def insertItem(self, row: int, item: typing.Optional[QListWidgetItem]) -> None: ... + @typing.overload + def insertItem(self, row: int, label: typing.Optional[str]) -> None: ... + def row(self, item: typing.Optional[QListWidgetItem]) -> int: ... + def item(self, row: int) -> typing.Optional[QListWidgetItem]: ... + + +class QMainWindow(QWidget): + + class DockOption(int): + AnimatedDocks = ... # type: QMainWindow.DockOption + AllowNestedDocks = ... # type: QMainWindow.DockOption + AllowTabbedDocks = ... # type: QMainWindow.DockOption + ForceTabbedDocks = ... # type: QMainWindow.DockOption + VerticalTabs = ... # type: QMainWindow.DockOption + GroupedDragging = ... # type: QMainWindow.DockOption + + class DockOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QMainWindow.DockOptions', 'QMainWindow.DockOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QMainWindow.DockOptions', 'QMainWindow.DockOption']) -> 'QMainWindow.DockOptions': ... + def __xor__(self, f: typing.Union['QMainWindow.DockOptions', 'QMainWindow.DockOption']) -> 'QMainWindow.DockOptions': ... + def __ior__(self, f: typing.Union['QMainWindow.DockOptions', 'QMainWindow.DockOption']) -> 'QMainWindow.DockOptions': ... + def __or__(self, f: typing.Union['QMainWindow.DockOptions', 'QMainWindow.DockOption']) -> 'QMainWindow.DockOptions': ... + def __iand__(self, f: typing.Union['QMainWindow.DockOptions', 'QMainWindow.DockOption']) -> 'QMainWindow.DockOptions': ... + def __and__(self, f: typing.Union['QMainWindow.DockOptions', 'QMainWindow.DockOption']) -> 'QMainWindow.DockOptions': ... + def __invert__(self) -> 'QMainWindow.DockOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def resizeDocks(self, docks: typing.Iterable[QDockWidget], sizes: typing.Iterable[int], orientation: QtCore.Qt.Orientation) -> None: ... + def takeCentralWidget(self) -> typing.Optional[QWidget]: ... + def tabifiedDockWidgets(self, dockwidget: typing.Optional[QDockWidget]) -> typing.List[QDockWidget]: ... + def setTabPosition(self, areas: typing.Union[QtCore.Qt.DockWidgetAreas, QtCore.Qt.DockWidgetArea], tabPosition: 'QTabWidget.TabPosition') -> None: ... + def tabPosition(self, area: QtCore.Qt.DockWidgetArea) -> 'QTabWidget.TabPosition': ... + def setTabShape(self, tabShape: 'QTabWidget.TabShape') -> None: ... + def tabShape(self) -> 'QTabWidget.TabShape': ... + def setDocumentMode(self, enabled: bool) -> None: ... + def documentMode(self) -> bool: ... + def restoreDockWidget(self, dockwidget: typing.Optional[QDockWidget]) -> bool: ... + def unifiedTitleAndToolBarOnMac(self) -> bool: ... + def setUnifiedTitleAndToolBarOnMac(self, set: bool) -> None: ... + def toolBarBreak(self, toolbar: typing.Optional['QToolBar']) -> bool: ... + def removeToolBarBreak(self, before: typing.Optional['QToolBar']) -> None: ... + def dockOptions(self) -> 'QMainWindow.DockOptions': ... + def setDockOptions(self, options: typing.Union['QMainWindow.DockOptions', 'QMainWindow.DockOption']) -> None: ... + def tabifyDockWidget(self, first: typing.Optional[QDockWidget], second: typing.Optional[QDockWidget]) -> None: ... + def setMenuWidget(self, menubar: typing.Optional[QWidget]) -> None: ... + def menuWidget(self) -> typing.Optional[QWidget]: ... + def isSeparator(self, pos: QtCore.QPoint) -> bool: ... + def isDockNestingEnabled(self) -> bool: ... + def isAnimated(self) -> bool: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def contextMenuEvent(self, event: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + tabifiedDockWidgetActivated: typing.ClassVar[QtCore.pyqtSignal] + toolButtonStyleChanged: typing.ClassVar[QtCore.pyqtSignal] + iconSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + def setDockNestingEnabled(self, enabled: bool) -> None: ... + def setAnimated(self, enabled: bool) -> None: ... + def createPopupMenu(self) -> typing.Optional['QMenu']: ... + def restoreState(self, state: typing.Union[QtCore.QByteArray, bytes, bytearray], version: int = ...) -> bool: ... + def saveState(self, version: int = ...) -> QtCore.QByteArray: ... + def dockWidgetArea(self, dockwidget: typing.Optional[QDockWidget]) -> QtCore.Qt.DockWidgetArea: ... + def removeDockWidget(self, dockwidget: typing.Optional[QDockWidget]) -> None: ... + def splitDockWidget(self, after: typing.Optional[QDockWidget], dockwidget: typing.Optional[QDockWidget], orientation: QtCore.Qt.Orientation) -> None: ... + @typing.overload + def addDockWidget(self, area: QtCore.Qt.DockWidgetArea, dockwidget: typing.Optional[QDockWidget]) -> None: ... + @typing.overload + def addDockWidget(self, area: QtCore.Qt.DockWidgetArea, dockwidget: typing.Optional[QDockWidget], orientation: QtCore.Qt.Orientation) -> None: ... + def toolBarArea(self, toolbar: typing.Optional['QToolBar']) -> QtCore.Qt.ToolBarArea: ... + def removeToolBar(self, toolbar: typing.Optional['QToolBar']) -> None: ... + def insertToolBar(self, before: typing.Optional['QToolBar'], toolbar: typing.Optional['QToolBar']) -> None: ... + @typing.overload + def addToolBar(self, area: QtCore.Qt.ToolBarArea, toolbar: typing.Optional['QToolBar']) -> None: ... + @typing.overload + def addToolBar(self, toolbar: typing.Optional['QToolBar']) -> None: ... + @typing.overload + def addToolBar(self, title: typing.Optional[str]) -> typing.Optional['QToolBar']: ... + def insertToolBarBreak(self, before: typing.Optional['QToolBar']) -> None: ... + def addToolBarBreak(self, area: QtCore.Qt.ToolBarArea = ...) -> None: ... + def corner(self, corner: QtCore.Qt.Corner) -> QtCore.Qt.DockWidgetArea: ... + def setCorner(self, corner: QtCore.Qt.Corner, area: QtCore.Qt.DockWidgetArea) -> None: ... + def setCentralWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def centralWidget(self) -> typing.Optional[QWidget]: ... + def setStatusBar(self, statusbar: typing.Optional['QStatusBar']) -> None: ... + def statusBar(self) -> typing.Optional['QStatusBar']: ... + def setMenuBar(self, menubar: typing.Optional['QMenuBar']) -> None: ... + def menuBar(self) -> typing.Optional['QMenuBar']: ... + def setToolButtonStyle(self, toolButtonStyle: QtCore.Qt.ToolButtonStyle) -> None: ... + def toolButtonStyle(self) -> QtCore.Qt.ToolButtonStyle: ... + def setIconSize(self, iconSize: QtCore.QSize) -> None: ... + def iconSize(self) -> QtCore.QSize: ... + + +class QMdiArea(QAbstractScrollArea): + + class WindowOrder(int): + CreationOrder = ... # type: QMdiArea.WindowOrder + StackingOrder = ... # type: QMdiArea.WindowOrder + ActivationHistoryOrder = ... # type: QMdiArea.WindowOrder + + class ViewMode(int): + SubWindowView = ... # type: QMdiArea.ViewMode + TabbedView = ... # type: QMdiArea.ViewMode + + class AreaOption(int): + DontMaximizeSubWindowOnActivation = ... # type: QMdiArea.AreaOption + + class AreaOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QMdiArea.AreaOptions', 'QMdiArea.AreaOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QMdiArea.AreaOptions', 'QMdiArea.AreaOption']) -> 'QMdiArea.AreaOptions': ... + def __xor__(self, f: typing.Union['QMdiArea.AreaOptions', 'QMdiArea.AreaOption']) -> 'QMdiArea.AreaOptions': ... + def __ior__(self, f: typing.Union['QMdiArea.AreaOptions', 'QMdiArea.AreaOption']) -> 'QMdiArea.AreaOptions': ... + def __or__(self, f: typing.Union['QMdiArea.AreaOptions', 'QMdiArea.AreaOption']) -> 'QMdiArea.AreaOptions': ... + def __iand__(self, f: typing.Union['QMdiArea.AreaOptions', 'QMdiArea.AreaOption']) -> 'QMdiArea.AreaOptions': ... + def __and__(self, f: typing.Union['QMdiArea.AreaOptions', 'QMdiArea.AreaOption']) -> 'QMdiArea.AreaOptions': ... + def __invert__(self) -> 'QMdiArea.AreaOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def tabsMovable(self) -> bool: ... + def setTabsMovable(self, movable: bool) -> None: ... + def tabsClosable(self) -> bool: ... + def setTabsClosable(self, closable: bool) -> None: ... + def setDocumentMode(self, enabled: bool) -> None: ... + def documentMode(self) -> bool: ... + def tabPosition(self) -> 'QTabWidget.TabPosition': ... + def setTabPosition(self, position: 'QTabWidget.TabPosition') -> None: ... + def tabShape(self) -> 'QTabWidget.TabShape': ... + def setTabShape(self, shape: 'QTabWidget.TabShape') -> None: ... + def viewMode(self) -> 'QMdiArea.ViewMode': ... + def setViewMode(self, mode: 'QMdiArea.ViewMode') -> None: ... + def setActivationOrder(self, order: 'QMdiArea.WindowOrder') -> None: ... + def activationOrder(self) -> 'QMdiArea.WindowOrder': ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def viewportEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def showEvent(self, showEvent: typing.Optional[QtGui.QShowEvent]) -> None: ... + def timerEvent(self, timerEvent: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def resizeEvent(self, resizeEvent: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def childEvent(self, childEvent: typing.Optional[QtCore.QChildEvent]) -> None: ... + def paintEvent(self, paintEvent: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def setupViewport(self, viewport: typing.Optional[QWidget]) -> None: ... + def activatePreviousSubWindow(self) -> None: ... + def activateNextSubWindow(self) -> None: ... + def closeAllSubWindows(self) -> None: ... + def closeActiveSubWindow(self) -> None: ... + def cascadeSubWindows(self) -> None: ... + def tileSubWindows(self) -> None: ... + def setActiveSubWindow(self, window: typing.Optional['QMdiSubWindow']) -> None: ... + subWindowActivated: typing.ClassVar[QtCore.pyqtSignal] + def testOption(self, opton: 'QMdiArea.AreaOption') -> bool: ... + def setOption(self, option: 'QMdiArea.AreaOption', on: bool = ...) -> None: ... + def setBackground(self, background: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def background(self) -> QtGui.QBrush: ... + def removeSubWindow(self, widget: typing.Optional[QWidget]) -> None: ... + def currentSubWindow(self) -> typing.Optional['QMdiSubWindow']: ... + def subWindowList(self, order: 'QMdiArea.WindowOrder' = ...) -> typing.List['QMdiSubWindow']: ... + def addSubWindow(self, widget: typing.Optional[QWidget], flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> typing.Optional['QMdiSubWindow']: ... + def activeSubWindow(self) -> typing.Optional['QMdiSubWindow']: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QMdiSubWindow(QWidget): + + class SubWindowOption(int): + RubberBandResize = ... # type: QMdiSubWindow.SubWindowOption + RubberBandMove = ... # type: QMdiSubWindow.SubWindowOption + + class SubWindowOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QMdiSubWindow.SubWindowOptions', 'QMdiSubWindow.SubWindowOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QMdiSubWindow.SubWindowOptions', 'QMdiSubWindow.SubWindowOption']) -> 'QMdiSubWindow.SubWindowOptions': ... + def __xor__(self, f: typing.Union['QMdiSubWindow.SubWindowOptions', 'QMdiSubWindow.SubWindowOption']) -> 'QMdiSubWindow.SubWindowOptions': ... + def __ior__(self, f: typing.Union['QMdiSubWindow.SubWindowOptions', 'QMdiSubWindow.SubWindowOption']) -> 'QMdiSubWindow.SubWindowOptions': ... + def __or__(self, f: typing.Union['QMdiSubWindow.SubWindowOptions', 'QMdiSubWindow.SubWindowOption']) -> 'QMdiSubWindow.SubWindowOptions': ... + def __iand__(self, f: typing.Union['QMdiSubWindow.SubWindowOptions', 'QMdiSubWindow.SubWindowOption']) -> 'QMdiSubWindow.SubWindowOptions': ... + def __and__(self, f: typing.Union['QMdiSubWindow.SubWindowOptions', 'QMdiSubWindow.SubWindowOption']) -> 'QMdiSubWindow.SubWindowOptions': ... + def __invert__(self) -> 'QMdiSubWindow.SubWindowOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def childEvent(self, childEvent: typing.Optional[QtCore.QChildEvent]) -> None: ... + def focusOutEvent(self, focusOutEvent: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, focusInEvent: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def contextMenuEvent(self, contextMenuEvent: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def keyPressEvent(self, keyEvent: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def mouseMoveEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseDoubleClickEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, paintEvent: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def moveEvent(self, moveEvent: typing.Optional[QtGui.QMoveEvent]) -> None: ... + def timerEvent(self, timerEvent: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def resizeEvent(self, resizeEvent: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def leaveEvent(self, leaveEvent: typing.Optional[QtCore.QEvent]) -> None: ... + def closeEvent(self, closeEvent: typing.Optional[QtGui.QCloseEvent]) -> None: ... + def changeEvent(self, changeEvent: typing.Optional[QtCore.QEvent]) -> None: ... + def hideEvent(self, hideEvent: typing.Optional[QtGui.QHideEvent]) -> None: ... + def showEvent(self, showEvent: typing.Optional[QtGui.QShowEvent]) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def showShaded(self) -> None: ... + def showSystemMenu(self) -> None: ... + aboutToActivate: typing.ClassVar[QtCore.pyqtSignal] + windowStateChanged: typing.ClassVar[QtCore.pyqtSignal] + def mdiArea(self) -> typing.Optional[QMdiArea]: ... + def systemMenu(self) -> typing.Optional['QMenu']: ... + def setSystemMenu(self, systemMenu: typing.Optional['QMenu']) -> None: ... + def keyboardPageStep(self) -> int: ... + def setKeyboardPageStep(self, step: int) -> None: ... + def keyboardSingleStep(self) -> int: ... + def setKeyboardSingleStep(self, step: int) -> None: ... + def testOption(self, a0: 'QMdiSubWindow.SubWindowOption') -> bool: ... + def setOption(self, option: 'QMdiSubWindow.SubWindowOption', on: bool = ...) -> None: ... + def isShaded(self) -> bool: ... + def widget(self) -> typing.Optional[QWidget]: ... + def setWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QMenu(QWidget): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, title: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + @typing.overload + def showTearOffMenu(self) -> None: ... + @typing.overload + def showTearOffMenu(self, pos: QtCore.QPoint) -> None: ... + def setToolTipsVisible(self, visible: bool) -> None: ... + def toolTipsVisible(self) -> bool: ... + @typing.overload + def insertSection(self, before: typing.Optional[QAction], text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def insertSection(self, before: typing.Optional[QAction], icon: QtGui.QIcon, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def addSection(self, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def addSection(self, icon: QtGui.QIcon, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + def setSeparatorsCollapsible(self, collapse: bool) -> None: ... + def separatorsCollapsible(self) -> bool: ... + def isEmpty(self) -> bool: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def actionEvent(self, a0: typing.Optional[QtGui.QActionEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... + def leaveEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def enterEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionMenuItem'], action: typing.Optional[QAction]) -> None: ... + def columnCount(self) -> int: ... + triggered: typing.ClassVar[QtCore.pyqtSignal] + hovered: typing.ClassVar[QtCore.pyqtSignal] + aboutToShow: typing.ClassVar[QtCore.pyqtSignal] + aboutToHide: typing.ClassVar[QtCore.pyqtSignal] + def setNoReplayFor(self, widget: typing.Optional[QWidget]) -> None: ... + def setIcon(self, icon: QtGui.QIcon) -> None: ... + def icon(self) -> QtGui.QIcon: ... + def setTitle(self, title: typing.Optional[str]) -> None: ... + def title(self) -> str: ... + def menuAction(self) -> typing.Optional[QAction]: ... + def actionAt(self, a0: QtCore.QPoint) -> typing.Optional[QAction]: ... + def actionGeometry(self, a0: typing.Optional[QAction]) -> QtCore.QRect: ... + def sizeHint(self) -> QtCore.QSize: ... + @typing.overload + def exec(self) -> typing.Optional[QAction]: ... + @typing.overload + def exec(self, pos: QtCore.QPoint, action: typing.Optional[QAction] = ...) -> typing.Optional[QAction]: ... + @typing.overload + @staticmethod + def exec(actions: typing.Iterable[QAction], pos: QtCore.QPoint, at: typing.Optional[QAction] = ..., parent: typing.Optional[QWidget] = ...) -> typing.Optional[QAction]: ... + @typing.overload + def exec_(self) -> typing.Optional[QAction]: ... + @typing.overload + def exec_(self, p: QtCore.QPoint, action: typing.Optional[QAction] = ...) -> typing.Optional[QAction]: ... + @typing.overload + @staticmethod + def exec_(actions: typing.Iterable[QAction], pos: QtCore.QPoint, at: typing.Optional[QAction] = ..., parent: typing.Optional[QWidget] = ...) -> typing.Optional[QAction]: ... + def popup(self, p: QtCore.QPoint, action: typing.Optional[QAction] = ...) -> None: ... + def activeAction(self) -> typing.Optional[QAction]: ... + def setActiveAction(self, act: typing.Optional[QAction]) -> None: ... + def defaultAction(self) -> typing.Optional[QAction]: ... + def setDefaultAction(self, a0: typing.Optional[QAction]) -> None: ... + def hideTearOffMenu(self) -> None: ... + def isTearOffMenuVisible(self) -> bool: ... + def isTearOffEnabled(self) -> bool: ... + def setTearOffEnabled(self, a0: bool) -> None: ... + def clear(self) -> None: ... + def insertSeparator(self, before: typing.Optional[QAction]) -> typing.Optional[QAction]: ... + def insertMenu(self, before: typing.Optional[QAction], menu: typing.Optional['QMenu']) -> typing.Optional[QAction]: ... + def addSeparator(self) -> typing.Optional[QAction]: ... + @typing.overload + def addMenu(self, menu: typing.Optional['QMenu']) -> typing.Optional[QAction]: ... + @typing.overload + def addMenu(self, title: typing.Optional[str]) -> typing.Optional['QMenu']: ... + @typing.overload + def addMenu(self, icon: QtGui.QIcon, title: typing.Optional[str]) -> typing.Optional['QMenu']: ... + @typing.overload + def addAction(self, action: typing.Optional[QAction]) -> None: ... + @typing.overload + def addAction(self, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, text: typing.Optional[str], slot: PYQT_SLOT, shortcut: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int] = ...) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str], slot: PYQT_SLOT, shortcut: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int] = ...) -> typing.Optional[QAction]: ... + + +class QMenuBar(QWidget): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def setNativeMenuBar(self, nativeMenuBar: bool) -> None: ... + def isNativeMenuBar(self) -> bool: ... + def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def focusInEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusOutEvent(self, a0: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def actionEvent(self, a0: typing.Optional[QtGui.QActionEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def leaveEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionMenuItem'], action: typing.Optional[QAction]) -> None: ... + hovered: typing.ClassVar[QtCore.pyqtSignal] + triggered: typing.ClassVar[QtCore.pyqtSignal] + def setVisible(self, visible: bool) -> None: ... + def cornerWidget(self, corner: QtCore.Qt.Corner = ...) -> typing.Optional[QWidget]: ... + def setCornerWidget(self, widget: typing.Optional[QWidget], corner: QtCore.Qt.Corner = ...) -> None: ... + def actionAt(self, a0: QtCore.QPoint) -> typing.Optional[QAction]: ... + def actionGeometry(self, a0: typing.Optional[QAction]) -> QtCore.QRect: ... + def heightForWidth(self, a0: int) -> int: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def isDefaultUp(self) -> bool: ... + def setDefaultUp(self, a0: bool) -> None: ... + def setActiveAction(self, action: typing.Optional[QAction]) -> None: ... + def activeAction(self) -> typing.Optional[QAction]: ... + def clear(self) -> None: ... + def insertSeparator(self, before: typing.Optional[QAction]) -> typing.Optional[QAction]: ... + def insertMenu(self, before: typing.Optional[QAction], menu: typing.Optional[QMenu]) -> typing.Optional[QAction]: ... + def addSeparator(self) -> typing.Optional[QAction]: ... + @typing.overload + def addMenu(self, menu: typing.Optional[QMenu]) -> typing.Optional[QAction]: ... + @typing.overload + def addMenu(self, title: typing.Optional[str]) -> typing.Optional[QMenu]: ... + @typing.overload + def addMenu(self, icon: QtGui.QIcon, title: typing.Optional[str]) -> typing.Optional[QMenu]: ... + @typing.overload + def addAction(self, action: typing.Optional[QAction]) -> None: ... + @typing.overload + def addAction(self, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, text: typing.Optional[str], slot: PYQT_SLOT) -> typing.Optional[QAction]: ... + + +class QMessageBox(QDialog): + + class StandardButton(int): + NoButton = ... # type: QMessageBox.StandardButton + Ok = ... # type: QMessageBox.StandardButton + Save = ... # type: QMessageBox.StandardButton + SaveAll = ... # type: QMessageBox.StandardButton + Open = ... # type: QMessageBox.StandardButton + Yes = ... # type: QMessageBox.StandardButton + YesToAll = ... # type: QMessageBox.StandardButton + No = ... # type: QMessageBox.StandardButton + NoToAll = ... # type: QMessageBox.StandardButton + Abort = ... # type: QMessageBox.StandardButton + Retry = ... # type: QMessageBox.StandardButton + Ignore = ... # type: QMessageBox.StandardButton + Close = ... # type: QMessageBox.StandardButton + Cancel = ... # type: QMessageBox.StandardButton + Discard = ... # type: QMessageBox.StandardButton + Help = ... # type: QMessageBox.StandardButton + Apply = ... # type: QMessageBox.StandardButton + Reset = ... # type: QMessageBox.StandardButton + RestoreDefaults = ... # type: QMessageBox.StandardButton + FirstButton = ... # type: QMessageBox.StandardButton + LastButton = ... # type: QMessageBox.StandardButton + YesAll = ... # type: QMessageBox.StandardButton + NoAll = ... # type: QMessageBox.StandardButton + Default = ... # type: QMessageBox.StandardButton + Escape = ... # type: QMessageBox.StandardButton + FlagMask = ... # type: QMessageBox.StandardButton + ButtonMask = ... # type: QMessageBox.StandardButton + + class Icon(int): + NoIcon = ... # type: QMessageBox.Icon + Information = ... # type: QMessageBox.Icon + Warning = ... # type: QMessageBox.Icon + Critical = ... # type: QMessageBox.Icon + Question = ... # type: QMessageBox.Icon + + class ButtonRole(int): + InvalidRole = ... # type: QMessageBox.ButtonRole + AcceptRole = ... # type: QMessageBox.ButtonRole + RejectRole = ... # type: QMessageBox.ButtonRole + DestructiveRole = ... # type: QMessageBox.ButtonRole + ActionRole = ... # type: QMessageBox.ButtonRole + HelpRole = ... # type: QMessageBox.ButtonRole + YesRole = ... # type: QMessageBox.ButtonRole + NoRole = ... # type: QMessageBox.ButtonRole + ResetRole = ... # type: QMessageBox.ButtonRole + ApplyRole = ... # type: QMessageBox.ButtonRole + + class StandardButtons(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton']) -> 'QMessageBox.StandardButtons': ... + def __xor__(self, f: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton']) -> 'QMessageBox.StandardButtons': ... + def __ior__(self, f: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton']) -> 'QMessageBox.StandardButtons': ... + def __or__(self, f: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton']) -> 'QMessageBox.StandardButtons': ... + def __iand__(self, f: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton']) -> 'QMessageBox.StandardButtons': ... + def __and__(self, f: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton']) -> 'QMessageBox.StandardButtons': ... + def __invert__(self) -> 'QMessageBox.StandardButtons': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, icon: 'QMessageBox.Icon', title: typing.Optional[str], text: typing.Optional[str], buttons: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton'] = ..., parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def checkBox(self) -> typing.Optional[QCheckBox]: ... + def setCheckBox(self, cb: typing.Optional[QCheckBox]) -> None: ... + def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlags: ... + def setTextInteractionFlags(self, flags: typing.Union[QtCore.Qt.TextInteractionFlags, QtCore.Qt.TextInteractionFlag]) -> None: ... + buttonClicked: typing.ClassVar[QtCore.pyqtSignal] + def buttonRole(self, button: typing.Optional[QAbstractButton]) -> 'QMessageBox.ButtonRole': ... + def buttons(self) -> typing.List[QAbstractButton]: ... + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def setWindowModality(self, windowModality: QtCore.Qt.WindowModality) -> None: ... + def setWindowTitle(self, title: typing.Optional[str]) -> None: ... + def setDetailedText(self, text: typing.Optional[str]) -> None: ... + def detailedText(self) -> str: ... + def setInformativeText(self, text: typing.Optional[str]) -> None: ... + def informativeText(self) -> str: ... + def clickedButton(self) -> typing.Optional[QAbstractButton]: ... + @typing.overload + def setEscapeButton(self, button: typing.Optional[QAbstractButton]) -> None: ... + @typing.overload + def setEscapeButton(self, button: 'QMessageBox.StandardButton') -> None: ... + def escapeButton(self) -> typing.Optional[QAbstractButton]: ... + @typing.overload + def setDefaultButton(self, button: typing.Optional[QPushButton]) -> None: ... + @typing.overload + def setDefaultButton(self, button: 'QMessageBox.StandardButton') -> None: ... + def defaultButton(self) -> typing.Optional[QPushButton]: ... + def button(self, which: 'QMessageBox.StandardButton') -> typing.Optional[QAbstractButton]: ... + def standardButton(self, button: typing.Optional[QAbstractButton]) -> 'QMessageBox.StandardButton': ... + def standardButtons(self) -> 'QMessageBox.StandardButtons': ... + def setStandardButtons(self, buttons: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton']) -> None: ... + def removeButton(self, button: typing.Optional[QAbstractButton]) -> None: ... + @typing.overload + def addButton(self, button: typing.Optional[QAbstractButton], role: 'QMessageBox.ButtonRole') -> None: ... + @typing.overload + def addButton(self, text: typing.Optional[str], role: 'QMessageBox.ButtonRole') -> typing.Optional[QPushButton]: ... + @typing.overload + def addButton(self, button: 'QMessageBox.StandardButton') -> typing.Optional[QPushButton]: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + @staticmethod + def standardIcon(icon: 'QMessageBox.Icon') -> QtGui.QPixmap: ... + @staticmethod + def aboutQt(parent: typing.Optional[QWidget], title: typing.Optional[str] = ...) -> None: ... + @staticmethod + def about(parent: typing.Optional[QWidget], caption: typing.Optional[str], text: typing.Optional[str]) -> None: ... + @staticmethod + def critical(parent: typing.Optional[QWidget], title: typing.Optional[str], text: typing.Optional[str], buttons: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton'] = ..., defaultButton: 'QMessageBox.StandardButton' = ...) -> 'QMessageBox.StandardButton': ... + @staticmethod + def warning(parent: typing.Optional[QWidget], title: typing.Optional[str], text: typing.Optional[str], buttons: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton'] = ..., defaultButton: 'QMessageBox.StandardButton' = ...) -> 'QMessageBox.StandardButton': ... + @staticmethod + def question(parent: typing.Optional[QWidget], title: typing.Optional[str], text: typing.Optional[str], buttons: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton'] = ..., defaultButton: 'QMessageBox.StandardButton' = ...) -> 'QMessageBox.StandardButton': ... + @staticmethod + def information(parent: typing.Optional[QWidget], title: typing.Optional[str], text: typing.Optional[str], buttons: typing.Union['QMessageBox.StandardButtons', 'QMessageBox.StandardButton'] = ..., defaultButton: 'QMessageBox.StandardButton' = ...) -> 'QMessageBox.StandardButton': ... + def setTextFormat(self, a0: QtCore.Qt.TextFormat) -> None: ... + def textFormat(self) -> QtCore.Qt.TextFormat: ... + def setIconPixmap(self, a0: QtGui.QPixmap) -> None: ... + def iconPixmap(self) -> QtGui.QPixmap: ... + def setIcon(self, a0: 'QMessageBox.Icon') -> None: ... + def icon(self) -> 'QMessageBox.Icon': ... + def setText(self, a0: typing.Optional[str]) -> None: ... + def text(self) -> str: ... + + +class QMouseEventTransition(QtCore.QEventTransition): + + @typing.overload + def __init__(self, sourceState: typing.Optional[QtCore.QState] = ...) -> None: ... + @typing.overload + def __init__(self, object: typing.Optional[QtCore.QObject], type: QtCore.QEvent.Type, button: QtCore.Qt.MouseButton, sourceState: typing.Optional[QtCore.QState] = ...) -> None: ... + + def eventTest(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def onTransition(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def setHitTestPath(self, path: QtGui.QPainterPath) -> None: ... + def hitTestPath(self) -> QtGui.QPainterPath: ... + def setModifierMask(self, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> None: ... + def modifierMask(self) -> QtCore.Qt.KeyboardModifiers: ... + def setButton(self, button: QtCore.Qt.MouseButton) -> None: ... + def button(self) -> QtCore.Qt.MouseButton: ... + + +class QOpenGLWidget(QWidget): + + class UpdateBehavior(int): + NoPartialUpdate = ... # type: QOpenGLWidget.UpdateBehavior + PartialUpdate = ... # type: QOpenGLWidget.UpdateBehavior + + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def setTextureFormat(self, texFormat: int) -> None: ... + def textureFormat(self) -> int: ... + def updateBehavior(self) -> 'QOpenGLWidget.UpdateBehavior': ... + def setUpdateBehavior(self, updateBehavior: 'QOpenGLWidget.UpdateBehavior') -> None: ... + def paintEngine(self) -> typing.Optional[QtGui.QPaintEngine]: ... + def metric(self, metric: QtGui.QPaintDevice.PaintDeviceMetric) -> int: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def paintGL(self) -> None: ... + def resizeGL(self, w: int, h: int) -> None: ... + def initializeGL(self) -> None: ... + resized: typing.ClassVar[QtCore.pyqtSignal] + aboutToResize: typing.ClassVar[QtCore.pyqtSignal] + frameSwapped: typing.ClassVar[QtCore.pyqtSignal] + aboutToCompose: typing.ClassVar[QtCore.pyqtSignal] + def grabFramebuffer(self) -> QtGui.QImage: ... + def defaultFramebufferObject(self) -> int: ... + def context(self) -> typing.Optional[QtGui.QOpenGLContext]: ... + def doneCurrent(self) -> None: ... + def makeCurrent(self) -> None: ... + def isValid(self) -> bool: ... + def format(self) -> QtGui.QSurfaceFormat: ... + def setFormat(self, format: QtGui.QSurfaceFormat) -> None: ... + + +class QPlainTextEdit(QAbstractScrollArea): + + class LineWrapMode(int): + NoWrap = ... # type: QPlainTextEdit.LineWrapMode + WidgetWidth = ... # type: QPlainTextEdit.LineWrapMode + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + def setTabStopDistance(self, distance: float) -> None: ... + def tabStopDistance(self) -> float: ... + def placeholderText(self) -> str: ... + def setPlaceholderText(self, placeholderText: typing.Optional[str]) -> None: ... + def zoomOut(self, range: int = ...) -> None: ... + def zoomIn(self, range: int = ...) -> None: ... + def anchorAt(self, pos: QtCore.QPoint) -> str: ... + def getPaintContext(self) -> QtGui.QAbstractTextDocumentLayout.PaintContext: ... + def blockBoundingGeometry(self, block: QtGui.QTextBlock) -> QtCore.QRectF: ... + def blockBoundingRect(self, block: QtGui.QTextBlock) -> QtCore.QRectF: ... + def contentOffset(self) -> QtCore.QPointF: ... + def firstVisibleBlock(self) -> QtGui.QTextBlock: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def insertFromMimeData(self, source: typing.Optional[QtCore.QMimeData]) -> None: ... + def canInsertFromMimeData(self, source: typing.Optional[QtCore.QMimeData]) -> bool: ... + def createMimeDataFromSelection(self) -> typing.Optional[QtCore.QMimeData]: ... + @typing.overload + def inputMethodQuery(self, property: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + @typing.overload + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... + def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def dropEvent(self, e: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragEnterEvent(self, e: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def contextMenuEvent(self, e: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def resizeEvent(self, e: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + modificationChanged: typing.ClassVar[QtCore.pyqtSignal] + blockCountChanged: typing.ClassVar[QtCore.pyqtSignal] + updateRequest: typing.ClassVar[QtCore.pyqtSignal] + cursorPositionChanged: typing.ClassVar[QtCore.pyqtSignal] + selectionChanged: typing.ClassVar[QtCore.pyqtSignal] + copyAvailable: typing.ClassVar[QtCore.pyqtSignal] + redoAvailable: typing.ClassVar[QtCore.pyqtSignal] + undoAvailable: typing.ClassVar[QtCore.pyqtSignal] + textChanged: typing.ClassVar[QtCore.pyqtSignal] + def centerCursor(self) -> None: ... + def appendHtml(self, html: typing.Optional[str]) -> None: ... + def appendPlainText(self, text: typing.Optional[str]) -> None: ... + def insertPlainText(self, text: typing.Optional[str]) -> None: ... + def selectAll(self) -> None: ... + def clear(self) -> None: ... + def redo(self) -> None: ... + def undo(self) -> None: ... + def paste(self) -> None: ... + def copy(self) -> None: ... + def cut(self) -> None: ... + def setPlainText(self, text: typing.Optional[str]) -> None: ... + def blockCount(self) -> int: ... + def print(self, printer: typing.Optional[QtGui.QPagedPaintDevice]) -> None: ... + def print_(self, printer: typing.Optional[QtGui.QPagedPaintDevice]) -> None: ... + def canPaste(self) -> bool: ... + def moveCursor(self, operation: QtGui.QTextCursor.MoveOperation, mode: QtGui.QTextCursor.MoveMode = ...) -> None: ... + def extraSelections(self) -> typing.List['QTextEdit.ExtraSelection']: ... + def setExtraSelections(self, selections: typing.Iterable['QTextEdit.ExtraSelection']) -> None: ... + def setCursorWidth(self, width: int) -> None: ... + def cursorWidth(self) -> int: ... + def setTabStopWidth(self, width: int) -> None: ... + def tabStopWidth(self) -> int: ... + def setOverwriteMode(self, overwrite: bool) -> None: ... + def overwriteMode(self) -> bool: ... + @typing.overload + def cursorRect(self, cursor: QtGui.QTextCursor) -> QtCore.QRect: ... + @typing.overload + def cursorRect(self) -> QtCore.QRect: ... + def cursorForPosition(self, pos: QtCore.QPoint) -> QtGui.QTextCursor: ... + @typing.overload + def createStandardContextMenu(self) -> typing.Optional[QMenu]: ... + @typing.overload + def createStandardContextMenu(self, position: QtCore.QPoint) -> typing.Optional[QMenu]: ... + def loadResource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... + def ensureCursorVisible(self) -> None: ... + def toPlainText(self) -> str: ... + @typing.overload + def find(self, exp: typing.Optional[str], options: typing.Union[QtGui.QTextDocument.FindFlags, QtGui.QTextDocument.FindFlag] = ...) -> bool: ... + @typing.overload + def find(self, exp: QtCore.QRegExp, options: typing.Union[QtGui.QTextDocument.FindFlags, QtGui.QTextDocument.FindFlag] = ...) -> bool: ... + @typing.overload + def find(self, exp: QtCore.QRegularExpression, options: typing.Union[QtGui.QTextDocument.FindFlags, QtGui.QTextDocument.FindFlag] = ...) -> bool: ... + def centerOnScroll(self) -> bool: ... + def setCenterOnScroll(self, enabled: bool) -> None: ... + def backgroundVisible(self) -> bool: ... + def setBackgroundVisible(self, visible: bool) -> None: ... + def setWordWrapMode(self, policy: QtGui.QTextOption.WrapMode) -> None: ... + def wordWrapMode(self) -> QtGui.QTextOption.WrapMode: ... + def setLineWrapMode(self, mode: 'QPlainTextEdit.LineWrapMode') -> None: ... + def lineWrapMode(self) -> 'QPlainTextEdit.LineWrapMode': ... + def maximumBlockCount(self) -> int: ... + def setMaximumBlockCount(self, maximum: int) -> None: ... + def setUndoRedoEnabled(self, enable: bool) -> None: ... + def isUndoRedoEnabled(self) -> bool: ... + def documentTitle(self) -> str: ... + def setDocumentTitle(self, title: typing.Optional[str]) -> None: ... + def setTabChangesFocus(self, b: bool) -> None: ... + def tabChangesFocus(self) -> bool: ... + def currentCharFormat(self) -> QtGui.QTextCharFormat: ... + def setCurrentCharFormat(self, format: QtGui.QTextCharFormat) -> None: ... + def mergeCurrentCharFormat(self, modifier: QtGui.QTextCharFormat) -> None: ... + def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlags: ... + def setTextInteractionFlags(self, flags: typing.Union[QtCore.Qt.TextInteractionFlags, QtCore.Qt.TextInteractionFlag]) -> None: ... + def setReadOnly(self, ro: bool) -> None: ... + def isReadOnly(self) -> bool: ... + def textCursor(self) -> QtGui.QTextCursor: ... + def setTextCursor(self, cursor: QtGui.QTextCursor) -> None: ... + def document(self) -> typing.Optional[QtGui.QTextDocument]: ... + def setDocument(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... + + +class QPlainTextDocumentLayout(QtGui.QAbstractTextDocumentLayout): + + def __init__(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... + + def documentChanged(self, from_: int, a1: int, charsAdded: int) -> None: ... + def requestUpdate(self) -> None: ... + def cursorWidth(self) -> int: ... + def setCursorWidth(self, width: int) -> None: ... + def ensureBlockLayout(self, block: QtGui.QTextBlock) -> None: ... + def blockBoundingRect(self, block: QtGui.QTextBlock) -> QtCore.QRectF: ... + def frameBoundingRect(self, a0: typing.Optional[QtGui.QTextFrame]) -> QtCore.QRectF: ... + def documentSize(self) -> QtCore.QSizeF: ... + def pageCount(self) -> int: ... + def hitTest(self, a0: typing.Union[QtCore.QPointF, QtCore.QPoint], a1: QtCore.Qt.HitTestAccuracy) -> int: ... + def draw(self, a0: typing.Optional[QtGui.QPainter], a1: QtGui.QAbstractTextDocumentLayout.PaintContext) -> None: ... + + +class QProgressBar(QWidget): + + class Direction(int): + TopToBottom = ... # type: QProgressBar.Direction + BottomToTop = ... # type: QProgressBar.Direction + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionProgressBar']) -> None: ... + valueChanged: typing.ClassVar[QtCore.pyqtSignal] + def setOrientation(self, a0: QtCore.Qt.Orientation) -> None: ... + def setValue(self, value: int) -> None: ... + def setMaximum(self, maximum: int) -> None: ... + def setMinimum(self, minimum: int) -> None: ... + def reset(self) -> None: ... + def resetFormat(self) -> None: ... + def format(self) -> str: ... + def setFormat(self, format: typing.Optional[str]) -> None: ... + def setTextDirection(self, textDirection: 'QProgressBar.Direction') -> None: ... + def setInvertedAppearance(self, invert: bool) -> None: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def setAlignment(self, alignment: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def isTextVisible(self) -> bool: ... + def setTextVisible(self, visible: bool) -> None: ... + def text(self) -> str: ... + def value(self) -> int: ... + def setRange(self, minimum: int, maximum: int) -> None: ... + def maximum(self) -> int: ... + def minimum(self) -> int: ... + + +class QProgressDialog(QDialog): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, labelText: typing.Optional[str], cancelButtonText: typing.Optional[str], minimum: int, maximum: int, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + @typing.overload + def open(self) -> None: ... + @typing.overload + def open(self, slot: PYQT_SLOT) -> None: ... + def forceShow(self) -> None: ... + def showEvent(self, e: typing.Optional[QtGui.QShowEvent]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def closeEvent(self, a0: typing.Optional[QtGui.QCloseEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + canceled: typing.ClassVar[QtCore.pyqtSignal] + def setMinimumDuration(self, ms: int) -> None: ... + def setCancelButtonText(self, a0: typing.Optional[str]) -> None: ... + def setLabelText(self, a0: typing.Optional[str]) -> None: ... + def setValue(self, progress: int) -> None: ... + def setMinimum(self, minimum: int) -> None: ... + def setMaximum(self, maximum: int) -> None: ... + def reset(self) -> None: ... + def cancel(self) -> None: ... + def autoClose(self) -> bool: ... + def setAutoClose(self, b: bool) -> None: ... + def autoReset(self) -> bool: ... + def setAutoReset(self, b: bool) -> None: ... + def minimumDuration(self) -> int: ... + def labelText(self) -> str: ... + def sizeHint(self) -> QtCore.QSize: ... + def value(self) -> int: ... + def setRange(self, minimum: int, maximum: int) -> None: ... + def maximum(self) -> int: ... + def minimum(self) -> int: ... + def wasCanceled(self) -> bool: ... + def setBar(self, bar: typing.Optional[QProgressBar]) -> None: ... + def setCancelButton(self, button: typing.Optional[QPushButton]) -> None: ... + def setLabel(self, label: typing.Optional[QLabel]) -> None: ... + + +class QProxyStyle(QCommonStyle): + + @typing.overload + def __init__(self, style: typing.Optional[QStyle] = ...) -> None: ... + @typing.overload + def __init__(self, key: typing.Optional[str]) -> None: ... + + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + @typing.overload + def unpolish(self, widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def unpolish(self, app: typing.Optional[QApplication]) -> None: ... + @typing.overload + def polish(self, widget: typing.Optional[QWidget]) -> None: ... + @typing.overload + def polish(self, pal: QtGui.QPalette) -> QtGui.QPalette: ... + @typing.overload + def polish(self, app: typing.Optional[QApplication]) -> None: ... + def standardPalette(self) -> QtGui.QPalette: ... + def generatedIconPixmap(self, iconMode: QtGui.QIcon.Mode, pixmap: QtGui.QPixmap, opt: typing.Optional['QStyleOption']) -> QtGui.QPixmap: ... + def standardPixmap(self, standardPixmap: QStyle.StandardPixmap, opt: typing.Optional['QStyleOption'], widget: typing.Optional[QWidget] = ...) -> QtGui.QPixmap: ... + def standardIcon(self, standardIcon: QStyle.StandardPixmap, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> QtGui.QIcon: ... + def layoutSpacing(self, control1: 'QSizePolicy.ControlType', control2: 'QSizePolicy.ControlType', orientation: QtCore.Qt.Orientation, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... + def pixelMetric(self, metric: QStyle.PixelMetric, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ...) -> int: ... + def styleHint(self, hint: QStyle.StyleHint, option: typing.Optional['QStyleOption'] = ..., widget: typing.Optional[QWidget] = ..., returnData: typing.Optional['QStyleHintReturn'] = ...) -> int: ... + def hitTestComplexControl(self, control: QStyle.ComplexControl, option: typing.Optional['QStyleOptionComplex'], pos: QtCore.QPoint, widget: typing.Optional[QWidget] = ...) -> QStyle.SubControl: ... + def itemPixmapRect(self, r: QtCore.QRect, flags: int, pixmap: QtGui.QPixmap) -> QtCore.QRect: ... + def itemTextRect(self, fm: QtGui.QFontMetrics, r: QtCore.QRect, flags: int, enabled: bool, text: typing.Optional[str]) -> QtCore.QRect: ... + def subControlRect(self, cc: QStyle.ComplexControl, opt: typing.Optional['QStyleOptionComplex'], sc: QStyle.SubControl, widget: typing.Optional[QWidget]) -> QtCore.QRect: ... + def subElementRect(self, element: QStyle.SubElement, option: typing.Optional['QStyleOption'], widget: typing.Optional[QWidget]) -> QtCore.QRect: ... + def sizeFromContents(self, type: QStyle.ContentsType, option: typing.Optional['QStyleOption'], size: QtCore.QSize, widget: typing.Optional[QWidget]) -> QtCore.QSize: ... + def drawItemPixmap(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, alignment: int, pixmap: QtGui.QPixmap) -> None: ... + def drawItemText(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, flags: int, pal: QtGui.QPalette, enabled: bool, text: typing.Optional[str], textRole: QtGui.QPalette.ColorRole = ...) -> None: ... + def drawComplexControl(self, control: QStyle.ComplexControl, option: typing.Optional['QStyleOptionComplex'], painter: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + def drawControl(self, element: QStyle.ControlElement, option: typing.Optional['QStyleOption'], painter: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + def drawPrimitive(self, element: QStyle.PrimitiveElement, option: typing.Optional['QStyleOption'], painter: typing.Optional[QtGui.QPainter], widget: typing.Optional[QWidget] = ...) -> None: ... + def setBaseStyle(self, style: typing.Optional[QStyle]) -> None: ... + def baseStyle(self) -> typing.Optional[QStyle]: ... + + +class QRadioButton(QAbstractButton): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def hitButton(self, a0: QtCore.QPoint) -> bool: ... + def initStyleOption(self, button: typing.Optional['QStyleOptionButton']) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QRubberBand(QWidget): + + class Shape(int): + Line = ... # type: QRubberBand.Shape + Rectangle = ... # type: QRubberBand.Shape + + def __init__(self, a0: 'QRubberBand.Shape', parent: typing.Optional[QWidget] = ...) -> None: ... + + def moveEvent(self, a0: typing.Optional[QtGui.QMoveEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionRubberBand']) -> None: ... + @typing.overload + def resize(self, w: int, h: int) -> None: ... + @typing.overload + def resize(self, s: QtCore.QSize) -> None: ... + @typing.overload + def move(self, p: QtCore.QPoint) -> None: ... + @typing.overload + def move(self, ax: int, ay: int) -> None: ... + @typing.overload + def setGeometry(self, r: QtCore.QRect) -> None: ... + @typing.overload + def setGeometry(self, ax: int, ay: int, aw: int, ah: int) -> None: ... + def shape(self) -> 'QRubberBand.Shape': ... + + +class QScrollArea(QAbstractScrollArea): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def viewportSizeHint(self) -> QtCore.QSize: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def ensureWidgetVisible(self, childWidget: typing.Optional[QWidget], xMargin: int = ..., yMargin: int = ...) -> None: ... + def ensureVisible(self, x: int, y: int, xMargin: int = ..., yMargin: int = ...) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def sizeHint(self) -> QtCore.QSize: ... + def setAlignment(self, a0: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def setWidgetResizable(self, resizable: bool) -> None: ... + def widgetResizable(self) -> bool: ... + def takeWidget(self) -> typing.Optional[QWidget]: ... + def setWidget(self, w: typing.Optional[QWidget]) -> None: ... + def widget(self) -> typing.Optional[QWidget]: ... + + +class QScrollBar(QAbstractSlider): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... + + def sliderChange(self, change: QAbstractSlider.SliderChange) -> None: ... + def wheelEvent(self, a0: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def contextMenuEvent(self, a0: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionSlider']) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QScroller(QtCore.QObject): + + class Input(int): + InputPress = ... # type: QScroller.Input + InputMove = ... # type: QScroller.Input + InputRelease = ... # type: QScroller.Input + + class ScrollerGestureType(int): + TouchGesture = ... # type: QScroller.ScrollerGestureType + LeftMouseButtonGesture = ... # type: QScroller.ScrollerGestureType + RightMouseButtonGesture = ... # type: QScroller.ScrollerGestureType + MiddleMouseButtonGesture = ... # type: QScroller.ScrollerGestureType + + class State(int): + Inactive = ... # type: QScroller.State + Pressed = ... # type: QScroller.State + Dragging = ... # type: QScroller.State + Scrolling = ... # type: QScroller.State + + scrollerPropertiesChanged: typing.ClassVar[QtCore.pyqtSignal] + stateChanged: typing.ClassVar[QtCore.pyqtSignal] + def resendPrepareEvent(self) -> None: ... + @typing.overload + def ensureVisible(self, rect: QtCore.QRectF, xmargin: float, ymargin: float) -> None: ... + @typing.overload + def ensureVisible(self, rect: QtCore.QRectF, xmargin: float, ymargin: float, scrollTime: int) -> None: ... + @typing.overload + def scrollTo(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint]) -> None: ... + @typing.overload + def scrollTo(self, pos: typing.Union[QtCore.QPointF, QtCore.QPoint], scrollTime: int) -> None: ... + def setScrollerProperties(self, prop: 'QScrollerProperties') -> None: ... + @typing.overload + def setSnapPositionsY(self, positions: typing.Iterable[float]) -> None: ... + @typing.overload + def setSnapPositionsY(self, first: float, interval: float) -> None: ... + @typing.overload + def setSnapPositionsX(self, positions: typing.Iterable[float]) -> None: ... + @typing.overload + def setSnapPositionsX(self, first: float, interval: float) -> None: ... + def scrollerProperties(self) -> 'QScrollerProperties': ... + def pixelPerMeter(self) -> QtCore.QPointF: ... + def finalPosition(self) -> QtCore.QPointF: ... + def velocity(self) -> QtCore.QPointF: ... + def stop(self) -> None: ... + def handleInput(self, input: 'QScroller.Input', position: typing.Union[QtCore.QPointF, QtCore.QPoint], timestamp: int = ...) -> bool: ... + def state(self) -> 'QScroller.State': ... + def target(self) -> typing.Optional[QtCore.QObject]: ... + @staticmethod + def activeScrollers() -> typing.List['QScroller']: ... + @staticmethod + def ungrabGesture(target: typing.Optional[QtCore.QObject]) -> None: ... + @staticmethod + def grabbedGesture(target: typing.Optional[QtCore.QObject]) -> QtCore.Qt.GestureType: ... + @staticmethod + def grabGesture(target: typing.Optional[QtCore.QObject], scrollGestureType: 'QScroller.ScrollerGestureType' = ...) -> QtCore.Qt.GestureType: ... + @staticmethod + def scroller(target: typing.Optional[QtCore.QObject]) -> typing.Optional['QScroller']: ... + @staticmethod + def hasScroller(target: typing.Optional[QtCore.QObject]) -> bool: ... + + +class QScrollerProperties(PyQt5.sipsimplewrapper): + + class ScrollMetric(int): + MousePressEventDelay = ... # type: QScrollerProperties.ScrollMetric + DragStartDistance = ... # type: QScrollerProperties.ScrollMetric + DragVelocitySmoothingFactor = ... # type: QScrollerProperties.ScrollMetric + AxisLockThreshold = ... # type: QScrollerProperties.ScrollMetric + ScrollingCurve = ... # type: QScrollerProperties.ScrollMetric + DecelerationFactor = ... # type: QScrollerProperties.ScrollMetric + MinimumVelocity = ... # type: QScrollerProperties.ScrollMetric + MaximumVelocity = ... # type: QScrollerProperties.ScrollMetric + MaximumClickThroughVelocity = ... # type: QScrollerProperties.ScrollMetric + AcceleratingFlickMaximumTime = ... # type: QScrollerProperties.ScrollMetric + AcceleratingFlickSpeedupFactor = ... # type: QScrollerProperties.ScrollMetric + SnapPositionRatio = ... # type: QScrollerProperties.ScrollMetric + SnapTime = ... # type: QScrollerProperties.ScrollMetric + OvershootDragResistanceFactor = ... # type: QScrollerProperties.ScrollMetric + OvershootDragDistanceFactor = ... # type: QScrollerProperties.ScrollMetric + OvershootScrollDistanceFactor = ... # type: QScrollerProperties.ScrollMetric + OvershootScrollTime = ... # type: QScrollerProperties.ScrollMetric + HorizontalOvershootPolicy = ... # type: QScrollerProperties.ScrollMetric + VerticalOvershootPolicy = ... # type: QScrollerProperties.ScrollMetric + FrameRate = ... # type: QScrollerProperties.ScrollMetric + ScrollMetricCount = ... # type: QScrollerProperties.ScrollMetric + + class FrameRates(int): + Standard = ... # type: QScrollerProperties.FrameRates + Fps60 = ... # type: QScrollerProperties.FrameRates + Fps30 = ... # type: QScrollerProperties.FrameRates + Fps20 = ... # type: QScrollerProperties.FrameRates + + class OvershootPolicy(int): + OvershootWhenScrollable = ... # type: QScrollerProperties.OvershootPolicy + OvershootAlwaysOff = ... # type: QScrollerProperties.OvershootPolicy + OvershootAlwaysOn = ... # type: QScrollerProperties.OvershootPolicy + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, sp: 'QScrollerProperties') -> None: ... + + def setScrollMetric(self, metric: 'QScrollerProperties.ScrollMetric', value: typing.Any) -> None: ... + def scrollMetric(self, metric: 'QScrollerProperties.ScrollMetric') -> typing.Any: ... + @staticmethod + def unsetDefaultScrollerProperties() -> None: ... + @staticmethod + def setDefaultScrollerProperties(sp: 'QScrollerProperties') -> None: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QShortcut(QtCore.QObject): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget]) -> None: ... + @typing.overload + def __init__(self, key: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int], parent: typing.Optional[QWidget], member: PYQT_SLOT = ..., ambiguousMember: PYQT_SLOT = ..., context: QtCore.Qt.ShortcutContext = ...) -> None: ... + + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + activatedAmbiguously: typing.ClassVar[QtCore.pyqtSignal] + activated: typing.ClassVar[QtCore.pyqtSignal] + def autoRepeat(self) -> bool: ... + def setAutoRepeat(self, on: bool) -> None: ... + def parentWidget(self) -> typing.Optional[QWidget]: ... + def id(self) -> int: ... + def whatsThis(self) -> str: ... + def setWhatsThis(self, text: typing.Optional[str]) -> None: ... + def context(self) -> QtCore.Qt.ShortcutContext: ... + def setContext(self, context: QtCore.Qt.ShortcutContext) -> None: ... + def isEnabled(self) -> bool: ... + def setEnabled(self, enable: bool) -> None: ... + def key(self) -> QtGui.QKeySequence: ... + def setKey(self, key: typing.Union[QtGui.QKeySequence, QtGui.QKeySequence.StandardKey, typing.Optional[str], int]) -> None: ... + + +class QSizeGrip(QWidget): + + def __init__(self, parent: typing.Optional[QWidget]) -> None: ... + + def hideEvent(self, hideEvent: typing.Optional[QtGui.QHideEvent]) -> None: ... + def showEvent(self, showEvent: typing.Optional[QtGui.QShowEvent]) -> None: ... + def moveEvent(self, moveEvent: typing.Optional[QtGui.QMoveEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, mouseEvent: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def setVisible(self, a0: bool) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QSizePolicy(PyQt5.sipsimplewrapper): + + class ControlType(int): + DefaultType = ... # type: QSizePolicy.ControlType + ButtonBox = ... # type: QSizePolicy.ControlType + CheckBox = ... # type: QSizePolicy.ControlType + ComboBox = ... # type: QSizePolicy.ControlType + Frame = ... # type: QSizePolicy.ControlType + GroupBox = ... # type: QSizePolicy.ControlType + Label = ... # type: QSizePolicy.ControlType + Line = ... # type: QSizePolicy.ControlType + LineEdit = ... # type: QSizePolicy.ControlType + PushButton = ... # type: QSizePolicy.ControlType + RadioButton = ... # type: QSizePolicy.ControlType + Slider = ... # type: QSizePolicy.ControlType + SpinBox = ... # type: QSizePolicy.ControlType + TabWidget = ... # type: QSizePolicy.ControlType + ToolButton = ... # type: QSizePolicy.ControlType + + class Policy(int): + Fixed = ... # type: QSizePolicy.Policy + Minimum = ... # type: QSizePolicy.Policy + Maximum = ... # type: QSizePolicy.Policy + Preferred = ... # type: QSizePolicy.Policy + MinimumExpanding = ... # type: QSizePolicy.Policy + Expanding = ... # type: QSizePolicy.Policy + Ignored = ... # type: QSizePolicy.Policy + + class PolicyFlag(int): + GrowFlag = ... # type: QSizePolicy.PolicyFlag + ExpandFlag = ... # type: QSizePolicy.PolicyFlag + ShrinkFlag = ... # type: QSizePolicy.PolicyFlag + IgnoreFlag = ... # type: QSizePolicy.PolicyFlag + + class ControlTypes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType']) -> 'QSizePolicy.ControlTypes': ... + def __xor__(self, f: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType']) -> 'QSizePolicy.ControlTypes': ... + def __ior__(self, f: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType']) -> 'QSizePolicy.ControlTypes': ... + def __or__(self, f: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType']) -> 'QSizePolicy.ControlTypes': ... + def __iand__(self, f: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType']) -> 'QSizePolicy.ControlTypes': ... + def __and__(self, f: typing.Union['QSizePolicy.ControlTypes', 'QSizePolicy.ControlType']) -> 'QSizePolicy.ControlTypes': ... + def __invert__(self) -> 'QSizePolicy.ControlTypes': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, horizontal: 'QSizePolicy.Policy', vertical: 'QSizePolicy.Policy', type: 'QSizePolicy.ControlType' = ...) -> None: ... + @typing.overload + def __init__(self, variant: typing.Any) -> None: ... + @typing.overload + def __init__(self, a0: 'QSizePolicy') -> None: ... + + def __hash__(self) -> int: ... + def setRetainSizeWhenHidden(self, retainSize: bool) -> None: ... + def retainSizeWhenHidden(self) -> bool: ... + def hasWidthForHeight(self) -> bool: ... + def setWidthForHeight(self, b: bool) -> None: ... + def setControlType(self, type: 'QSizePolicy.ControlType') -> None: ... + def controlType(self) -> 'QSizePolicy.ControlType': ... + def transposed(self) -> 'QSizePolicy': ... + def transpose(self) -> None: ... + def setVerticalStretch(self, stretchFactor: int) -> None: ... + def setHorizontalStretch(self, stretchFactor: int) -> None: ... + def verticalStretch(self) -> int: ... + def horizontalStretch(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def hasHeightForWidth(self) -> bool: ... + def setHeightForWidth(self, b: bool) -> None: ... + def expandingDirections(self) -> QtCore.Qt.Orientations: ... + def setVerticalPolicy(self, d: 'QSizePolicy.Policy') -> None: ... + def setHorizontalPolicy(self, d: 'QSizePolicy.Policy') -> None: ... + def verticalPolicy(self) -> 'QSizePolicy.Policy': ... + def horizontalPolicy(self) -> 'QSizePolicy.Policy': ... + + +class QSlider(QAbstractSlider): + + class TickPosition(int): + NoTicks = ... # type: QSlider.TickPosition + TicksAbove = ... # type: QSlider.TickPosition + TicksLeft = ... # type: QSlider.TickPosition + TicksBelow = ... # type: QSlider.TickPosition + TicksRight = ... # type: QSlider.TickPosition + TicksBothSides = ... # type: QSlider.TickPosition + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... + + def mouseMoveEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, ev: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionSlider']) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def tickInterval(self) -> int: ... + def setTickInterval(self, ti: int) -> None: ... + def tickPosition(self) -> 'QSlider.TickPosition': ... + def setTickPosition(self, position: 'QSlider.TickPosition') -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QSpinBox(QAbstractSpinBox): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def setStepType(self, stepType: QAbstractSpinBox.StepType) -> None: ... + def stepType(self) -> QAbstractSpinBox.StepType: ... + def setDisplayIntegerBase(self, base: int) -> None: ... + def displayIntegerBase(self) -> int: ... + textChanged: typing.ClassVar[QtCore.pyqtSignal] + valueChanged: typing.ClassVar[QtCore.pyqtSignal] + def setValue(self, val: int) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def fixup(self, str: typing.Optional[str]) -> str: ... + def textFromValue(self, v: int) -> str: ... + def valueFromText(self, text: typing.Optional[str]) -> int: ... + def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QtGui.QValidator.State, str, int]: ... + def setRange(self, min: int, max: int) -> None: ... + def setMaximum(self, max: int) -> None: ... + def maximum(self) -> int: ... + def setMinimum(self, min: int) -> None: ... + def minimum(self) -> int: ... + def setSingleStep(self, val: int) -> None: ... + def singleStep(self) -> int: ... + def cleanText(self) -> str: ... + def setSuffix(self, s: typing.Optional[str]) -> None: ... + def suffix(self) -> str: ... + def setPrefix(self, p: typing.Optional[str]) -> None: ... + def prefix(self) -> str: ... + def value(self) -> int: ... + + +class QDoubleSpinBox(QAbstractSpinBox): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def setStepType(self, stepType: QAbstractSpinBox.StepType) -> None: ... + def stepType(self) -> QAbstractSpinBox.StepType: ... + textChanged: typing.ClassVar[QtCore.pyqtSignal] + valueChanged: typing.ClassVar[QtCore.pyqtSignal] + def setValue(self, val: float) -> None: ... + def fixup(self, str: typing.Optional[str]) -> str: ... + def textFromValue(self, v: float) -> str: ... + def valueFromText(self, text: typing.Optional[str]) -> float: ... + def validate(self, input: typing.Optional[str], pos: int) -> typing.Tuple[QtGui.QValidator.State, str, int]: ... + def setDecimals(self, prec: int) -> None: ... + def decimals(self) -> int: ... + def setRange(self, min: float, max: float) -> None: ... + def setMaximum(self, max: float) -> None: ... + def maximum(self) -> float: ... + def setMinimum(self, min: float) -> None: ... + def minimum(self) -> float: ... + def setSingleStep(self, val: float) -> None: ... + def singleStep(self) -> float: ... + def cleanText(self) -> str: ... + def setSuffix(self, s: typing.Optional[str]) -> None: ... + def suffix(self) -> str: ... + def setPrefix(self, p: typing.Optional[str]) -> None: ... + def prefix(self) -> str: ... + def value(self) -> float: ... + + +class QSplashScreen(QWidget): + + @typing.overload + def __init__(self, pixmap: QtGui.QPixmap = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QWidget], pixmap: QtGui.QPixmap = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + @typing.overload + def __init__(self, screen: typing.Optional[QtGui.QScreen], pixmap: QtGui.QPixmap = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def drawContents(self, painter: typing.Optional[QtGui.QPainter]) -> None: ... + messageChanged: typing.ClassVar[QtCore.pyqtSignal] + def clearMessage(self) -> None: ... + def showMessage(self, message: typing.Optional[str], alignment: int = ..., color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor] = ...) -> None: ... + def message(self) -> str: ... + def repaint(self) -> None: ... + def finish(self, w: typing.Optional[QWidget]) -> None: ... + def pixmap(self) -> QtGui.QPixmap: ... + def setPixmap(self, pixmap: QtGui.QPixmap) -> None: ... + + +class QSplitter(QFrame): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, orientation: QtCore.Qt.Orientation, parent: typing.Optional[QWidget] = ...) -> None: ... + + def closestLegalPosition(self, a0: int, a1: int) -> int: ... + def setRubberBand(self, position: int) -> None: ... + def moveSplitter(self, pos: int, index: int) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def childEvent(self, a0: typing.Optional[QtCore.QChildEvent]) -> None: ... + def createHandle(self) -> typing.Optional['QSplitterHandle']: ... + splitterMoved: typing.ClassVar[QtCore.pyqtSignal] + def replaceWidget(self, index: int, widget: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... + def setStretchFactor(self, index: int, stretch: int) -> None: ... + def handle(self, index: int) -> typing.Optional['QSplitterHandle']: ... + def getRange(self, index: int) -> typing.Tuple[typing.Optional[int], typing.Optional[int]]: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def widget(self, index: int) -> typing.Optional[QWidget]: ... + def indexOf(self, w: typing.Optional[QWidget]) -> int: ... + def setHandleWidth(self, a0: int) -> None: ... + def handleWidth(self) -> int: ... + def restoreState(self, state: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> bool: ... + def saveState(self) -> QtCore.QByteArray: ... + def setSizes(self, list: typing.Iterable[int]) -> None: ... + def sizes(self) -> typing.List[int]: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def refresh(self) -> None: ... + def opaqueResize(self) -> bool: ... + def setOpaqueResize(self, opaque: bool = ...) -> None: ... + def isCollapsible(self, index: int) -> bool: ... + def setCollapsible(self, index: int, a1: bool) -> None: ... + def childrenCollapsible(self) -> bool: ... + def setChildrenCollapsible(self, a0: bool) -> None: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + def setOrientation(self, a0: QtCore.Qt.Orientation) -> None: ... + def insertWidget(self, index: int, widget: typing.Optional[QWidget]) -> None: ... + def addWidget(self, widget: typing.Optional[QWidget]) -> None: ... + + +class QSplitterHandle(QWidget): + + def __init__(self, o: QtCore.Qt.Orientation, parent: typing.Optional[QSplitter]) -> None: ... + + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def closestLegalPosition(self, p: int) -> int: ... + def moveSplitter(self, p: int) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def splitter(self) -> typing.Optional[QSplitter]: ... + def opaqueResize(self) -> bool: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + def setOrientation(self, o: QtCore.Qt.Orientation) -> None: ... + + +class QStackedLayout(QLayout): + + class StackingMode(int): + StackOne = ... # type: QStackedLayout.StackingMode + StackAll = ... # type: QStackedLayout.StackingMode + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QWidget]) -> None: ... + @typing.overload + def __init__(self, parentLayout: typing.Optional[QLayout]) -> None: ... + + def heightForWidth(self, width: int) -> int: ... + def hasHeightForWidth(self) -> bool: ... + def setStackingMode(self, stackingMode: 'QStackedLayout.StackingMode') -> None: ... + def stackingMode(self) -> 'QStackedLayout.StackingMode': ... + def setCurrentWidget(self, w: typing.Optional[QWidget]) -> None: ... + def setCurrentIndex(self, index: int) -> None: ... + currentChanged: typing.ClassVar[QtCore.pyqtSignal] + widgetRemoved: typing.ClassVar[QtCore.pyqtSignal] + def setGeometry(self, rect: QtCore.QRect) -> None: ... + def takeAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... + def itemAt(self, a0: int) -> typing.Optional[QLayoutItem]: ... + def minimumSize(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def addItem(self, item: typing.Optional[QLayoutItem]) -> None: ... + def count(self) -> int: ... + @typing.overload + def widget(self, a0: int) -> typing.Optional[QWidget]: ... + @typing.overload + def widget(self) -> typing.Optional[QWidget]: ... + def currentIndex(self) -> int: ... + def currentWidget(self) -> typing.Optional[QWidget]: ... + def insertWidget(self, index: int, w: typing.Optional[QWidget]) -> int: ... + def addWidget(self, w: typing.Optional[QWidget]) -> int: ... + + +class QStackedWidget(QFrame): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + widgetRemoved: typing.ClassVar[QtCore.pyqtSignal] + currentChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCurrentWidget(self, w: typing.Optional[QWidget]) -> None: ... + def setCurrentIndex(self, index: int) -> None: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def widget(self, a0: int) -> typing.Optional[QWidget]: ... + def indexOf(self, a0: typing.Optional[QWidget]) -> int: ... + def currentIndex(self) -> int: ... + def currentWidget(self) -> typing.Optional[QWidget]: ... + def removeWidget(self, w: typing.Optional[QWidget]) -> None: ... + def insertWidget(self, index: int, w: typing.Optional[QWidget]) -> int: ... + def addWidget(self, w: typing.Optional[QWidget]) -> int: ... + + +class QStatusBar(QWidget): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def hideOrShow(self) -> None: ... + def reformat(self) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + messageChanged: typing.ClassVar[QtCore.pyqtSignal] + def clearMessage(self) -> None: ... + def showMessage(self, message: typing.Optional[str], msecs: int = ...) -> None: ... + def insertPermanentWidget(self, index: int, widget: typing.Optional[QWidget], stretch: int = ...) -> int: ... + def insertWidget(self, index: int, widget: typing.Optional[QWidget], stretch: int = ...) -> int: ... + def currentMessage(self) -> str: ... + def isSizeGripEnabled(self) -> bool: ... + def setSizeGripEnabled(self, a0: bool) -> None: ... + def removeWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def addPermanentWidget(self, widget: typing.Optional[QWidget], stretch: int = ...) -> None: ... + def addWidget(self, widget: typing.Optional[QWidget], stretch: int = ...) -> None: ... + + +class QStyledItemDelegate(QAbstractItemDelegate): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def editorEvent(self, event: typing.Optional[QtCore.QEvent], model: typing.Optional[QtCore.QAbstractItemModel], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> bool: ... + def eventFilter(self, object: typing.Optional[QtCore.QObject], event: typing.Optional[QtCore.QEvent]) -> bool: ... + def initStyleOption(self, option: typing.Optional['QStyleOptionViewItem'], index: QtCore.QModelIndex) -> None: ... + def displayText(self, value: typing.Any, locale: QtCore.QLocale) -> str: ... + def setItemEditorFactory(self, factory: typing.Optional[QItemEditorFactory]) -> None: ... + def itemEditorFactory(self) -> typing.Optional[QItemEditorFactory]: ... + def updateEditorGeometry(self, editor: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... + def setModelData(self, editor: typing.Optional[QWidget], model: typing.Optional[QtCore.QAbstractItemModel], index: QtCore.QModelIndex) -> None: ... + def setEditorData(self, editor: typing.Optional[QWidget], index: QtCore.QModelIndex) -> None: ... + def createEditor(self, parent: typing.Optional[QWidget], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> typing.Optional[QWidget]: ... + def sizeHint(self, option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> QtCore.QSize: ... + def paint(self, painter: typing.Optional[QtGui.QPainter], option: 'QStyleOptionViewItem', index: QtCore.QModelIndex) -> None: ... + + +class QStyleFactory(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QStyleFactory') -> None: ... + + @staticmethod + def create(a0: typing.Optional[str]) -> typing.Optional[QStyle]: ... + @staticmethod + def keys() -> typing.List[str]: ... + + +class QStyleOption(PyQt5.sipsimplewrapper): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOption.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOption.StyleOptionType + + class OptionType(int): + SO_Default = ... # type: QStyleOption.OptionType + SO_FocusRect = ... # type: QStyleOption.OptionType + SO_Button = ... # type: QStyleOption.OptionType + SO_Tab = ... # type: QStyleOption.OptionType + SO_MenuItem = ... # type: QStyleOption.OptionType + SO_Frame = ... # type: QStyleOption.OptionType + SO_ProgressBar = ... # type: QStyleOption.OptionType + SO_ToolBox = ... # type: QStyleOption.OptionType + SO_Header = ... # type: QStyleOption.OptionType + SO_DockWidget = ... # type: QStyleOption.OptionType + SO_ViewItem = ... # type: QStyleOption.OptionType + SO_TabWidgetFrame = ... # type: QStyleOption.OptionType + SO_TabBarBase = ... # type: QStyleOption.OptionType + SO_RubberBand = ... # type: QStyleOption.OptionType + SO_ToolBar = ... # type: QStyleOption.OptionType + SO_Complex = ... # type: QStyleOption.OptionType + SO_Slider = ... # type: QStyleOption.OptionType + SO_SpinBox = ... # type: QStyleOption.OptionType + SO_ToolButton = ... # type: QStyleOption.OptionType + SO_ComboBox = ... # type: QStyleOption.OptionType + SO_TitleBar = ... # type: QStyleOption.OptionType + SO_GroupBox = ... # type: QStyleOption.OptionType + SO_ComplexCustomBase = ... # type: QStyleOption.OptionType + SO_GraphicsItem = ... # type: QStyleOption.OptionType + SO_SizeGrip = ... # type: QStyleOption.OptionType + SO_CustomBase = ... # type: QStyleOption.OptionType + + direction = ... # type: QtCore.Qt.LayoutDirection + fontMetrics = ... # type: QtGui.QFontMetrics + palette = ... # type: QtGui.QPalette + rect = ... # type: QtCore.QRect + state = ... # type: typing.Union[QStyle.State, QStyle.StateFlag] + styleObject = ... # type: QtCore.QObject + type = ... # type: int + version = ... # type: int + + @typing.overload + def __init__(self, version: int = ..., type: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOption') -> None: ... + + def initFrom(self, w: typing.Optional[QWidget]) -> None: ... + + +class QStyleOptionFocusRect(QStyleOption): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionFocusRect.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionFocusRect.StyleOptionType + + backgroundColor = ... # type: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionFocusRect') -> None: ... + + +class QStyleOptionFrame(QStyleOption): + + class FrameFeature(int): + None_ = ... # type: QStyleOptionFrame.FrameFeature + Flat = ... # type: QStyleOptionFrame.FrameFeature + Rounded = ... # type: QStyleOptionFrame.FrameFeature + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionFrame.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionFrame.StyleOptionType + + class FrameFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyleOptionFrame.FrameFeatures', 'QStyleOptionFrame.FrameFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyleOptionFrame.FrameFeatures', 'QStyleOptionFrame.FrameFeature']) -> 'QStyleOptionFrame.FrameFeatures': ... + def __xor__(self, f: typing.Union['QStyleOptionFrame.FrameFeatures', 'QStyleOptionFrame.FrameFeature']) -> 'QStyleOptionFrame.FrameFeatures': ... + def __ior__(self, f: typing.Union['QStyleOptionFrame.FrameFeatures', 'QStyleOptionFrame.FrameFeature']) -> 'QStyleOptionFrame.FrameFeatures': ... + def __or__(self, f: typing.Union['QStyleOptionFrame.FrameFeatures', 'QStyleOptionFrame.FrameFeature']) -> 'QStyleOptionFrame.FrameFeatures': ... + def __iand__(self, f: typing.Union['QStyleOptionFrame.FrameFeatures', 'QStyleOptionFrame.FrameFeature']) -> 'QStyleOptionFrame.FrameFeatures': ... + def __and__(self, f: typing.Union['QStyleOptionFrame.FrameFeatures', 'QStyleOptionFrame.FrameFeature']) -> 'QStyleOptionFrame.FrameFeatures': ... + def __invert__(self) -> 'QStyleOptionFrame.FrameFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + features = ... # type: typing.Union['QStyleOptionFrame.FrameFeatures', 'QStyleOptionFrame.FrameFeature'] + frameShape = ... # type: QFrame.Shape + lineWidth = ... # type: int + midLineWidth = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionFrame') -> None: ... + + +class QStyleOptionTabWidgetFrame(QStyleOption): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionTabWidgetFrame.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionTabWidgetFrame.StyleOptionType + + leftCornerWidgetSize = ... # type: QtCore.QSize + lineWidth = ... # type: int + midLineWidth = ... # type: int + rightCornerWidgetSize = ... # type: QtCore.QSize + selectedTabRect = ... # type: QtCore.QRect + shape = ... # type: 'QTabBar.Shape' + tabBarRect = ... # type: QtCore.QRect + tabBarSize = ... # type: QtCore.QSize + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionTabWidgetFrame') -> None: ... + + +class QStyleOptionTabBarBase(QStyleOption): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionTabBarBase.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionTabBarBase.StyleOptionType + + documentMode = ... # type: bool + selectedTabRect = ... # type: QtCore.QRect + shape = ... # type: 'QTabBar.Shape' + tabBarRect = ... # type: QtCore.QRect + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionTabBarBase') -> None: ... + + +class QStyleOptionHeader(QStyleOption): + + class SortIndicator(int): + None_ = ... # type: QStyleOptionHeader.SortIndicator + SortUp = ... # type: QStyleOptionHeader.SortIndicator + SortDown = ... # type: QStyleOptionHeader.SortIndicator + + class SelectedPosition(int): + NotAdjacent = ... # type: QStyleOptionHeader.SelectedPosition + NextIsSelected = ... # type: QStyleOptionHeader.SelectedPosition + PreviousIsSelected = ... # type: QStyleOptionHeader.SelectedPosition + NextAndPreviousAreSelected = ... # type: QStyleOptionHeader.SelectedPosition + + class SectionPosition(int): + Beginning = ... # type: QStyleOptionHeader.SectionPosition + Middle = ... # type: QStyleOptionHeader.SectionPosition + End = ... # type: QStyleOptionHeader.SectionPosition + OnlyOneSection = ... # type: QStyleOptionHeader.SectionPosition + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionHeader.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionHeader.StyleOptionType + + icon = ... # type: QtGui.QIcon + iconAlignment = ... # type: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] + orientation = ... # type: QtCore.Qt.Orientation + position = ... # type: 'QStyleOptionHeader.SectionPosition' + section = ... # type: int + selectedPosition = ... # type: 'QStyleOptionHeader.SelectedPosition' + sortIndicator = ... # type: 'QStyleOptionHeader.SortIndicator' + text = ... # type: typing.Optional[str] + textAlignment = ... # type: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionHeader') -> None: ... + + +class QStyleOptionButton(QStyleOption): + + class ButtonFeature(int): + None_ = ... # type: QStyleOptionButton.ButtonFeature + Flat = ... # type: QStyleOptionButton.ButtonFeature + HasMenu = ... # type: QStyleOptionButton.ButtonFeature + DefaultButton = ... # type: QStyleOptionButton.ButtonFeature + AutoDefaultButton = ... # type: QStyleOptionButton.ButtonFeature + CommandLinkButton = ... # type: QStyleOptionButton.ButtonFeature + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionButton.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionButton.StyleOptionType + + class ButtonFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyleOptionButton.ButtonFeatures', 'QStyleOptionButton.ButtonFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyleOptionButton.ButtonFeatures', 'QStyleOptionButton.ButtonFeature']) -> 'QStyleOptionButton.ButtonFeatures': ... + def __xor__(self, f: typing.Union['QStyleOptionButton.ButtonFeatures', 'QStyleOptionButton.ButtonFeature']) -> 'QStyleOptionButton.ButtonFeatures': ... + def __ior__(self, f: typing.Union['QStyleOptionButton.ButtonFeatures', 'QStyleOptionButton.ButtonFeature']) -> 'QStyleOptionButton.ButtonFeatures': ... + def __or__(self, f: typing.Union['QStyleOptionButton.ButtonFeatures', 'QStyleOptionButton.ButtonFeature']) -> 'QStyleOptionButton.ButtonFeatures': ... + def __iand__(self, f: typing.Union['QStyleOptionButton.ButtonFeatures', 'QStyleOptionButton.ButtonFeature']) -> 'QStyleOptionButton.ButtonFeatures': ... + def __and__(self, f: typing.Union['QStyleOptionButton.ButtonFeatures', 'QStyleOptionButton.ButtonFeature']) -> 'QStyleOptionButton.ButtonFeatures': ... + def __invert__(self) -> 'QStyleOptionButton.ButtonFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + features = ... # type: typing.Union['QStyleOptionButton.ButtonFeatures', 'QStyleOptionButton.ButtonFeature'] + icon = ... # type: QtGui.QIcon + iconSize = ... # type: QtCore.QSize + text = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionButton') -> None: ... + + +class QStyleOptionTab(QStyleOption): + + class TabFeature(int): + None_ = ... # type: QStyleOptionTab.TabFeature + HasFrame = ... # type: QStyleOptionTab.TabFeature + + class CornerWidget(int): + NoCornerWidgets = ... # type: QStyleOptionTab.CornerWidget + LeftCornerWidget = ... # type: QStyleOptionTab.CornerWidget + RightCornerWidget = ... # type: QStyleOptionTab.CornerWidget + + class SelectedPosition(int): + NotAdjacent = ... # type: QStyleOptionTab.SelectedPosition + NextIsSelected = ... # type: QStyleOptionTab.SelectedPosition + PreviousIsSelected = ... # type: QStyleOptionTab.SelectedPosition + + class TabPosition(int): + Beginning = ... # type: QStyleOptionTab.TabPosition + Middle = ... # type: QStyleOptionTab.TabPosition + End = ... # type: QStyleOptionTab.TabPosition + OnlyOneTab = ... # type: QStyleOptionTab.TabPosition + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionTab.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionTab.StyleOptionType + + class CornerWidgets(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyleOptionTab.CornerWidgets', 'QStyleOptionTab.CornerWidget']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyleOptionTab.CornerWidgets', 'QStyleOptionTab.CornerWidget']) -> 'QStyleOptionTab.CornerWidgets': ... + def __xor__(self, f: typing.Union['QStyleOptionTab.CornerWidgets', 'QStyleOptionTab.CornerWidget']) -> 'QStyleOptionTab.CornerWidgets': ... + def __ior__(self, f: typing.Union['QStyleOptionTab.CornerWidgets', 'QStyleOptionTab.CornerWidget']) -> 'QStyleOptionTab.CornerWidgets': ... + def __or__(self, f: typing.Union['QStyleOptionTab.CornerWidgets', 'QStyleOptionTab.CornerWidget']) -> 'QStyleOptionTab.CornerWidgets': ... + def __iand__(self, f: typing.Union['QStyleOptionTab.CornerWidgets', 'QStyleOptionTab.CornerWidget']) -> 'QStyleOptionTab.CornerWidgets': ... + def __and__(self, f: typing.Union['QStyleOptionTab.CornerWidgets', 'QStyleOptionTab.CornerWidget']) -> 'QStyleOptionTab.CornerWidgets': ... + def __invert__(self) -> 'QStyleOptionTab.CornerWidgets': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + class TabFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyleOptionTab.TabFeatures', 'QStyleOptionTab.TabFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyleOptionTab.TabFeatures', 'QStyleOptionTab.TabFeature']) -> 'QStyleOptionTab.TabFeatures': ... + def __xor__(self, f: typing.Union['QStyleOptionTab.TabFeatures', 'QStyleOptionTab.TabFeature']) -> 'QStyleOptionTab.TabFeatures': ... + def __ior__(self, f: typing.Union['QStyleOptionTab.TabFeatures', 'QStyleOptionTab.TabFeature']) -> 'QStyleOptionTab.TabFeatures': ... + def __or__(self, f: typing.Union['QStyleOptionTab.TabFeatures', 'QStyleOptionTab.TabFeature']) -> 'QStyleOptionTab.TabFeatures': ... + def __iand__(self, f: typing.Union['QStyleOptionTab.TabFeatures', 'QStyleOptionTab.TabFeature']) -> 'QStyleOptionTab.TabFeatures': ... + def __and__(self, f: typing.Union['QStyleOptionTab.TabFeatures', 'QStyleOptionTab.TabFeature']) -> 'QStyleOptionTab.TabFeatures': ... + def __invert__(self) -> 'QStyleOptionTab.TabFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + cornerWidgets = ... # type: typing.Union['QStyleOptionTab.CornerWidgets', 'QStyleOptionTab.CornerWidget'] + documentMode = ... # type: bool + features = ... # type: typing.Union['QStyleOptionTab.TabFeatures', 'QStyleOptionTab.TabFeature'] + icon = ... # type: QtGui.QIcon + iconSize = ... # type: QtCore.QSize + leftButtonSize = ... # type: QtCore.QSize + position = ... # type: 'QStyleOptionTab.TabPosition' + rightButtonSize = ... # type: QtCore.QSize + row = ... # type: int + selectedPosition = ... # type: 'QStyleOptionTab.SelectedPosition' + shape = ... # type: 'QTabBar.Shape' + text = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionTab') -> None: ... + + +class QStyleOptionTabV4(QStyleOptionTab): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionTabV4.StyleOptionVersion + + tabIndex = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QStyleOptionTabV4') -> None: ... + + +class QStyleOptionProgressBar(QStyleOption): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionProgressBar.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionProgressBar.StyleOptionType + + bottomToTop = ... # type: bool + invertedAppearance = ... # type: bool + maximum = ... # type: int + minimum = ... # type: int + orientation = ... # type: QtCore.Qt.Orientation + progress = ... # type: int + text = ... # type: typing.Optional[str] + textAlignment = ... # type: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] + textVisible = ... # type: bool + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionProgressBar') -> None: ... + + +class QStyleOptionMenuItem(QStyleOption): + + class CheckType(int): + NotCheckable = ... # type: QStyleOptionMenuItem.CheckType + Exclusive = ... # type: QStyleOptionMenuItem.CheckType + NonExclusive = ... # type: QStyleOptionMenuItem.CheckType + + class MenuItemType(int): + Normal = ... # type: QStyleOptionMenuItem.MenuItemType + DefaultItem = ... # type: QStyleOptionMenuItem.MenuItemType + Separator = ... # type: QStyleOptionMenuItem.MenuItemType + SubMenu = ... # type: QStyleOptionMenuItem.MenuItemType + Scroller = ... # type: QStyleOptionMenuItem.MenuItemType + TearOff = ... # type: QStyleOptionMenuItem.MenuItemType + Margin = ... # type: QStyleOptionMenuItem.MenuItemType + EmptyArea = ... # type: QStyleOptionMenuItem.MenuItemType + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionMenuItem.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionMenuItem.StyleOptionType + + checkType = ... # type: 'QStyleOptionMenuItem.CheckType' + checked = ... # type: bool + font = ... # type: QtGui.QFont + icon = ... # type: QtGui.QIcon + maxIconWidth = ... # type: int + menuHasCheckableItems = ... # type: bool + menuItemType = ... # type: 'QStyleOptionMenuItem.MenuItemType' + menuRect = ... # type: QtCore.QRect + tabWidth = ... # type: int + text = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionMenuItem') -> None: ... + + +class QStyleOptionDockWidget(QStyleOption): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionDockWidget.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionDockWidget.StyleOptionType + + closable = ... # type: bool + floatable = ... # type: bool + movable = ... # type: bool + title = ... # type: typing.Optional[str] + verticalTitleBar = ... # type: bool + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionDockWidget') -> None: ... + + +class QStyleOptionViewItem(QStyleOption): + + class ViewItemPosition(int): + Invalid = ... # type: QStyleOptionViewItem.ViewItemPosition + Beginning = ... # type: QStyleOptionViewItem.ViewItemPosition + Middle = ... # type: QStyleOptionViewItem.ViewItemPosition + End = ... # type: QStyleOptionViewItem.ViewItemPosition + OnlyOne = ... # type: QStyleOptionViewItem.ViewItemPosition + + class ViewItemFeature(int): + None_ = ... # type: QStyleOptionViewItem.ViewItemFeature + WrapText = ... # type: QStyleOptionViewItem.ViewItemFeature + Alternate = ... # type: QStyleOptionViewItem.ViewItemFeature + HasCheckIndicator = ... # type: QStyleOptionViewItem.ViewItemFeature + HasDisplay = ... # type: QStyleOptionViewItem.ViewItemFeature + HasDecoration = ... # type: QStyleOptionViewItem.ViewItemFeature + + class Position(int): + Left = ... # type: QStyleOptionViewItem.Position + Right = ... # type: QStyleOptionViewItem.Position + Top = ... # type: QStyleOptionViewItem.Position + Bottom = ... # type: QStyleOptionViewItem.Position + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionViewItem.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionViewItem.StyleOptionType + + class ViewItemFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyleOptionViewItem.ViewItemFeatures', 'QStyleOptionViewItem.ViewItemFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyleOptionViewItem.ViewItemFeatures', 'QStyleOptionViewItem.ViewItemFeature']) -> 'QStyleOptionViewItem.ViewItemFeatures': ... + def __xor__(self, f: typing.Union['QStyleOptionViewItem.ViewItemFeatures', 'QStyleOptionViewItem.ViewItemFeature']) -> 'QStyleOptionViewItem.ViewItemFeatures': ... + def __ior__(self, f: typing.Union['QStyleOptionViewItem.ViewItemFeatures', 'QStyleOptionViewItem.ViewItemFeature']) -> 'QStyleOptionViewItem.ViewItemFeatures': ... + def __or__(self, f: typing.Union['QStyleOptionViewItem.ViewItemFeatures', 'QStyleOptionViewItem.ViewItemFeature']) -> 'QStyleOptionViewItem.ViewItemFeatures': ... + def __iand__(self, f: typing.Union['QStyleOptionViewItem.ViewItemFeatures', 'QStyleOptionViewItem.ViewItemFeature']) -> 'QStyleOptionViewItem.ViewItemFeatures': ... + def __and__(self, f: typing.Union['QStyleOptionViewItem.ViewItemFeatures', 'QStyleOptionViewItem.ViewItemFeature']) -> 'QStyleOptionViewItem.ViewItemFeatures': ... + def __invert__(self) -> 'QStyleOptionViewItem.ViewItemFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + backgroundBrush = ... # type: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient] + checkState = ... # type: QtCore.Qt.CheckState + decorationAlignment = ... # type: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] + decorationPosition = ... # type: 'QStyleOptionViewItem.Position' + decorationSize = ... # type: QtCore.QSize + displayAlignment = ... # type: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] + features = ... # type: typing.Union['QStyleOptionViewItem.ViewItemFeatures', 'QStyleOptionViewItem.ViewItemFeature'] + font = ... # type: QtGui.QFont + icon = ... # type: QtGui.QIcon + index = ... # type: QtCore.QModelIndex + locale = ... # type: QtCore.QLocale + showDecorationSelected = ... # type: bool + text = ... # type: typing.Optional[str] + textElideMode = ... # type: QtCore.Qt.TextElideMode + viewItemPosition = ... # type: 'QStyleOptionViewItem.ViewItemPosition' + widget = ... # type: QWidget + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionViewItem') -> None: ... + + +class QStyleOptionToolBox(QStyleOption): + + class SelectedPosition(int): + NotAdjacent = ... # type: QStyleOptionToolBox.SelectedPosition + NextIsSelected = ... # type: QStyleOptionToolBox.SelectedPosition + PreviousIsSelected = ... # type: QStyleOptionToolBox.SelectedPosition + + class TabPosition(int): + Beginning = ... # type: QStyleOptionToolBox.TabPosition + Middle = ... # type: QStyleOptionToolBox.TabPosition + End = ... # type: QStyleOptionToolBox.TabPosition + OnlyOneTab = ... # type: QStyleOptionToolBox.TabPosition + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionToolBox.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionToolBox.StyleOptionType + + icon = ... # type: QtGui.QIcon + position = ... # type: 'QStyleOptionToolBox.TabPosition' + selectedPosition = ... # type: 'QStyleOptionToolBox.SelectedPosition' + text = ... # type: typing.Optional[str] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionToolBox') -> None: ... + + +class QStyleOptionRubberBand(QStyleOption): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionRubberBand.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionRubberBand.StyleOptionType + + opaque = ... # type: bool + shape = ... # type: QRubberBand.Shape + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionRubberBand') -> None: ... + + +class QStyleOptionComplex(QStyleOption): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionComplex.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionComplex.StyleOptionType + + activeSubControls = ... # type: typing.Union[QStyle.SubControls, QStyle.SubControl] + subControls = ... # type: typing.Union[QStyle.SubControls, QStyle.SubControl] + + @typing.overload + def __init__(self, version: int = ..., type: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionComplex') -> None: ... + + +class QStyleOptionSlider(QStyleOptionComplex): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionSlider.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionSlider.StyleOptionType + + dialWrapping = ... # type: bool + maximum = ... # type: int + minimum = ... # type: int + notchTarget = ... # type: float + orientation = ... # type: QtCore.Qt.Orientation + pageStep = ... # type: int + singleStep = ... # type: int + sliderPosition = ... # type: int + sliderValue = ... # type: int + tickInterval = ... # type: int + tickPosition = ... # type: QSlider.TickPosition + upsideDown = ... # type: bool + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionSlider') -> None: ... + + +class QStyleOptionSpinBox(QStyleOptionComplex): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionSpinBox.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionSpinBox.StyleOptionType + + buttonSymbols = ... # type: QAbstractSpinBox.ButtonSymbols + frame = ... # type: bool + stepEnabled = ... # type: typing.Union[QAbstractSpinBox.StepEnabled, QAbstractSpinBox.StepEnabledFlag] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionSpinBox') -> None: ... + + +class QStyleOptionToolButton(QStyleOptionComplex): + + class ToolButtonFeature(int): + None_ = ... # type: QStyleOptionToolButton.ToolButtonFeature + Arrow = ... # type: QStyleOptionToolButton.ToolButtonFeature + Menu = ... # type: QStyleOptionToolButton.ToolButtonFeature + PopupDelay = ... # type: QStyleOptionToolButton.ToolButtonFeature + MenuButtonPopup = ... # type: QStyleOptionToolButton.ToolButtonFeature + HasMenu = ... # type: QStyleOptionToolButton.ToolButtonFeature + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionToolButton.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionToolButton.StyleOptionType + + class ToolButtonFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyleOptionToolButton.ToolButtonFeatures', 'QStyleOptionToolButton.ToolButtonFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyleOptionToolButton.ToolButtonFeatures', 'QStyleOptionToolButton.ToolButtonFeature']) -> 'QStyleOptionToolButton.ToolButtonFeatures': ... + def __xor__(self, f: typing.Union['QStyleOptionToolButton.ToolButtonFeatures', 'QStyleOptionToolButton.ToolButtonFeature']) -> 'QStyleOptionToolButton.ToolButtonFeatures': ... + def __ior__(self, f: typing.Union['QStyleOptionToolButton.ToolButtonFeatures', 'QStyleOptionToolButton.ToolButtonFeature']) -> 'QStyleOptionToolButton.ToolButtonFeatures': ... + def __or__(self, f: typing.Union['QStyleOptionToolButton.ToolButtonFeatures', 'QStyleOptionToolButton.ToolButtonFeature']) -> 'QStyleOptionToolButton.ToolButtonFeatures': ... + def __iand__(self, f: typing.Union['QStyleOptionToolButton.ToolButtonFeatures', 'QStyleOptionToolButton.ToolButtonFeature']) -> 'QStyleOptionToolButton.ToolButtonFeatures': ... + def __and__(self, f: typing.Union['QStyleOptionToolButton.ToolButtonFeatures', 'QStyleOptionToolButton.ToolButtonFeature']) -> 'QStyleOptionToolButton.ToolButtonFeatures': ... + def __invert__(self) -> 'QStyleOptionToolButton.ToolButtonFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + arrowType = ... # type: QtCore.Qt.ArrowType + features = ... # type: typing.Union['QStyleOptionToolButton.ToolButtonFeatures', 'QStyleOptionToolButton.ToolButtonFeature'] + font = ... # type: QtGui.QFont + icon = ... # type: QtGui.QIcon + iconSize = ... # type: QtCore.QSize + pos = ... # type: QtCore.QPoint + text = ... # type: typing.Optional[str] + toolButtonStyle = ... # type: QtCore.Qt.ToolButtonStyle + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionToolButton') -> None: ... + + +class QStyleOptionComboBox(QStyleOptionComplex): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionComboBox.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionComboBox.StyleOptionType + + currentIcon = ... # type: QtGui.QIcon + currentText = ... # type: typing.Optional[str] + editable = ... # type: bool + frame = ... # type: bool + iconSize = ... # type: QtCore.QSize + popupRect = ... # type: QtCore.QRect + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionComboBox') -> None: ... + + +class QStyleOptionTitleBar(QStyleOptionComplex): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionTitleBar.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionTitleBar.StyleOptionType + + icon = ... # type: QtGui.QIcon + text = ... # type: typing.Optional[str] + titleBarFlags = ... # type: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] + titleBarState = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionTitleBar') -> None: ... + + +class QStyleHintReturn(PyQt5.sipsimplewrapper): + + class StyleOptionVersion(int): + Version = ... # type: QStyleHintReturn.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleHintReturn.StyleOptionType + + class HintReturnType(int): + SH_Default = ... # type: QStyleHintReturn.HintReturnType + SH_Mask = ... # type: QStyleHintReturn.HintReturnType + SH_Variant = ... # type: QStyleHintReturn.HintReturnType + + type = ... # type: int + version = ... # type: int + + @typing.overload + def __init__(self, version: int = ..., type: int = ...) -> None: ... + @typing.overload + def __init__(self, a0: 'QStyleHintReturn') -> None: ... + + +class QStyleHintReturnMask(QStyleHintReturn): + + class StyleOptionVersion(int): + Version = ... # type: QStyleHintReturnMask.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleHintReturnMask.StyleOptionType + + region = ... # type: QtGui.QRegion + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QStyleHintReturnMask') -> None: ... + + +class QStyleOptionToolBar(QStyleOption): + + class ToolBarFeature(int): + None_ = ... # type: QStyleOptionToolBar.ToolBarFeature + Movable = ... # type: QStyleOptionToolBar.ToolBarFeature + + class ToolBarPosition(int): + Beginning = ... # type: QStyleOptionToolBar.ToolBarPosition + Middle = ... # type: QStyleOptionToolBar.ToolBarPosition + End = ... # type: QStyleOptionToolBar.ToolBarPosition + OnlyOne = ... # type: QStyleOptionToolBar.ToolBarPosition + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionToolBar.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionToolBar.StyleOptionType + + class ToolBarFeatures(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QStyleOptionToolBar.ToolBarFeatures', 'QStyleOptionToolBar.ToolBarFeature']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QStyleOptionToolBar.ToolBarFeatures', 'QStyleOptionToolBar.ToolBarFeature']) -> 'QStyleOptionToolBar.ToolBarFeatures': ... + def __xor__(self, f: typing.Union['QStyleOptionToolBar.ToolBarFeatures', 'QStyleOptionToolBar.ToolBarFeature']) -> 'QStyleOptionToolBar.ToolBarFeatures': ... + def __ior__(self, f: typing.Union['QStyleOptionToolBar.ToolBarFeatures', 'QStyleOptionToolBar.ToolBarFeature']) -> 'QStyleOptionToolBar.ToolBarFeatures': ... + def __or__(self, f: typing.Union['QStyleOptionToolBar.ToolBarFeatures', 'QStyleOptionToolBar.ToolBarFeature']) -> 'QStyleOptionToolBar.ToolBarFeatures': ... + def __iand__(self, f: typing.Union['QStyleOptionToolBar.ToolBarFeatures', 'QStyleOptionToolBar.ToolBarFeature']) -> 'QStyleOptionToolBar.ToolBarFeatures': ... + def __and__(self, f: typing.Union['QStyleOptionToolBar.ToolBarFeatures', 'QStyleOptionToolBar.ToolBarFeature']) -> 'QStyleOptionToolBar.ToolBarFeatures': ... + def __invert__(self) -> 'QStyleOptionToolBar.ToolBarFeatures': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + features = ... # type: typing.Union['QStyleOptionToolBar.ToolBarFeatures', 'QStyleOptionToolBar.ToolBarFeature'] + lineWidth = ... # type: int + midLineWidth = ... # type: int + positionOfLine = ... # type: 'QStyleOptionToolBar.ToolBarPosition' + positionWithinLine = ... # type: 'QStyleOptionToolBar.ToolBarPosition' + toolBarArea = ... # type: QtCore.Qt.ToolBarArea + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionToolBar') -> None: ... + + +class QStyleOptionGroupBox(QStyleOptionComplex): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionGroupBox.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionGroupBox.StyleOptionType + + features = ... # type: typing.Union[QStyleOptionFrame.FrameFeatures, QStyleOptionFrame.FrameFeature] + lineWidth = ... # type: int + midLineWidth = ... # type: int + text = ... # type: typing.Optional[str] + textAlignment = ... # type: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag] + textColor = ... # type: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor] + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionGroupBox') -> None: ... + + +class QStyleOptionSizeGrip(QStyleOptionComplex): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionSizeGrip.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionSizeGrip.StyleOptionType + + corner = ... # type: QtCore.Qt.Corner + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionSizeGrip') -> None: ... + + +class QStyleOptionGraphicsItem(QStyleOption): + + class StyleOptionVersion(int): + Version = ... # type: QStyleOptionGraphicsItem.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleOptionGraphicsItem.StyleOptionType + + exposedRect = ... # type: QtCore.QRectF + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QStyleOptionGraphicsItem') -> None: ... + + @staticmethod + def levelOfDetailFromTransform(worldTransform: QtGui.QTransform) -> float: ... + + +class QStyleHintReturnVariant(QStyleHintReturn): + + class StyleOptionVersion(int): + Version = ... # type: QStyleHintReturnVariant.StyleOptionVersion + + class StyleOptionType(int): + Type = ... # type: QStyleHintReturnVariant.StyleOptionType + + variant = ... # type: typing.Any + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QStyleHintReturnVariant') -> None: ... + + +class QStylePainter(QtGui.QPainter): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, w: typing.Optional[QWidget]) -> None: ... + @typing.overload + def __init__(self, pd: typing.Optional[QtGui.QPaintDevice], w: typing.Optional[QWidget]) -> None: ... + + def drawItemPixmap(self, r: QtCore.QRect, flags: int, pixmap: QtGui.QPixmap) -> None: ... + def drawItemText(self, rect: QtCore.QRect, flags: int, pal: QtGui.QPalette, enabled: bool, text: typing.Optional[str], textRole: QtGui.QPalette.ColorRole = ...) -> None: ... + def drawComplexControl(self, cc: QStyle.ComplexControl, opt: QStyleOptionComplex) -> None: ... + def drawControl(self, ce: QStyle.ControlElement, opt: QStyleOption) -> None: ... + def drawPrimitive(self, pe: QStyle.PrimitiveElement, opt: QStyleOption) -> None: ... + def style(self) -> typing.Optional[QStyle]: ... + @typing.overload + def begin(self, w: typing.Optional[QWidget]) -> bool: ... + @typing.overload + def begin(self, pd: typing.Optional[QtGui.QPaintDevice], w: typing.Optional[QWidget]) -> bool: ... + + +class QSystemTrayIcon(QtCore.QObject): + + class MessageIcon(int): + NoIcon = ... # type: QSystemTrayIcon.MessageIcon + Information = ... # type: QSystemTrayIcon.MessageIcon + Warning = ... # type: QSystemTrayIcon.MessageIcon + Critical = ... # type: QSystemTrayIcon.MessageIcon + + class ActivationReason(int): + Unknown = ... # type: QSystemTrayIcon.ActivationReason + Context = ... # type: QSystemTrayIcon.ActivationReason + DoubleClick = ... # type: QSystemTrayIcon.ActivationReason + Trigger = ... # type: QSystemTrayIcon.ActivationReason + MiddleClick = ... # type: QSystemTrayIcon.ActivationReason + + @typing.overload + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + @typing.overload + def __init__(self, icon: QtGui.QIcon, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + messageClicked: typing.ClassVar[QtCore.pyqtSignal] + activated: typing.ClassVar[QtCore.pyqtSignal] + def show(self) -> None: ... + def setVisible(self, visible: bool) -> None: ... + def hide(self) -> None: ... + def isVisible(self) -> bool: ... + @typing.overload + def showMessage(self, title: typing.Optional[str], msg: typing.Optional[str], icon: 'QSystemTrayIcon.MessageIcon' = ..., msecs: int = ...) -> None: ... + @typing.overload + def showMessage(self, title: typing.Optional[str], msg: typing.Optional[str], icon: QtGui.QIcon, msecs: int = ...) -> None: ... + @staticmethod + def supportsMessages() -> bool: ... + @staticmethod + def isSystemTrayAvailable() -> bool: ... + def setToolTip(self, tip: typing.Optional[str]) -> None: ... + def toolTip(self) -> str: ... + def setIcon(self, icon: QtGui.QIcon) -> None: ... + def icon(self) -> QtGui.QIcon: ... + def geometry(self) -> QtCore.QRect: ... + def contextMenu(self) -> typing.Optional[QMenu]: ... + def setContextMenu(self, menu: typing.Optional[QMenu]) -> None: ... + + +class QTabBar(QWidget): + + class SelectionBehavior(int): + SelectLeftTab = ... # type: QTabBar.SelectionBehavior + SelectRightTab = ... # type: QTabBar.SelectionBehavior + SelectPreviousTab = ... # type: QTabBar.SelectionBehavior + + class ButtonPosition(int): + LeftSide = ... # type: QTabBar.ButtonPosition + RightSide = ... # type: QTabBar.ButtonPosition + + class Shape(int): + RoundedNorth = ... # type: QTabBar.Shape + RoundedSouth = ... # type: QTabBar.Shape + RoundedWest = ... # type: QTabBar.Shape + RoundedEast = ... # type: QTabBar.Shape + TriangularNorth = ... # type: QTabBar.Shape + TriangularSouth = ... # type: QTabBar.Shape + TriangularWest = ... # type: QTabBar.Shape + TriangularEast = ... # type: QTabBar.Shape + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def setTabVisible(self, index: int, visible: bool) -> None: ... + def isTabVisible(self, index: int) -> bool: ... + def setAccessibleTabName(self, index: int, name: typing.Optional[str]) -> None: ... + def accessibleTabName(self, index: int) -> str: ... + def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def setChangeCurrentOnDrag(self, change: bool) -> None: ... + def changeCurrentOnDrag(self) -> bool: ... + def setAutoHide(self, hide: bool) -> None: ... + def autoHide(self) -> bool: ... + tabBarDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] + tabBarClicked: typing.ClassVar[QtCore.pyqtSignal] + def minimumTabSizeHint(self, index: int) -> QtCore.QSize: ... + def wheelEvent(self, event: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def hideEvent(self, a0: typing.Optional[QtGui.QHideEvent]) -> None: ... + tabMoved: typing.ClassVar[QtCore.pyqtSignal] + tabCloseRequested: typing.ClassVar[QtCore.pyqtSignal] + def setDocumentMode(self, set: bool) -> None: ... + def documentMode(self) -> bool: ... + def setMovable(self, movable: bool) -> None: ... + def isMovable(self) -> bool: ... + def setExpanding(self, enabled: bool) -> None: ... + def expanding(self) -> bool: ... + def setSelectionBehaviorOnRemove(self, behavior: 'QTabBar.SelectionBehavior') -> None: ... + def selectionBehaviorOnRemove(self) -> 'QTabBar.SelectionBehavior': ... + def tabButton(self, index: int, position: 'QTabBar.ButtonPosition') -> typing.Optional[QWidget]: ... + def setTabButton(self, index: int, position: 'QTabBar.ButtonPosition', widget: typing.Optional[QWidget]) -> None: ... + def setTabsClosable(self, closable: bool) -> None: ... + def tabsClosable(self) -> bool: ... + def moveTab(self, from_: int, to: int) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def tabLayoutChange(self) -> None: ... + def tabRemoved(self, index: int) -> None: ... + def tabInserted(self, index: int) -> None: ... + def tabSizeHint(self, index: int) -> QtCore.QSize: ... + def initStyleOption(self, option: typing.Optional[QStyleOptionTab], tabIndex: int) -> None: ... + currentChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCurrentIndex(self, index: int) -> None: ... + def usesScrollButtons(self) -> bool: ... + def setUsesScrollButtons(self, useButtons: bool) -> None: ... + def setElideMode(self, a0: QtCore.Qt.TextElideMode) -> None: ... + def elideMode(self) -> QtCore.Qt.TextElideMode: ... + def setIconSize(self, size: QtCore.QSize) -> None: ... + def iconSize(self) -> QtCore.QSize: ... + def drawBase(self) -> bool: ... + def setDrawBase(self, drawTheBase: bool) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def currentIndex(self) -> int: ... + def tabRect(self, index: int) -> QtCore.QRect: ... + def tabAt(self, pos: QtCore.QPoint) -> int: ... + def tabData(self, index: int) -> typing.Any: ... + def setTabData(self, index: int, data: typing.Any) -> None: ... + def tabWhatsThis(self, index: int) -> str: ... + def setTabWhatsThis(self, index: int, text: typing.Optional[str]) -> None: ... + def tabToolTip(self, index: int) -> str: ... + def setTabToolTip(self, index: int, tip: typing.Optional[str]) -> None: ... + def setTabIcon(self, index: int, icon: QtGui.QIcon) -> None: ... + def tabIcon(self, index: int) -> QtGui.QIcon: ... + def setTabTextColor(self, index: int, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def tabTextColor(self, index: int) -> QtGui.QColor: ... + def setTabText(self, index: int, text: typing.Optional[str]) -> None: ... + def tabText(self, index: int) -> str: ... + def setTabEnabled(self, index: int, a1: bool) -> None: ... + def isTabEnabled(self, index: int) -> bool: ... + def removeTab(self, index: int) -> None: ... + @typing.overload + def insertTab(self, index: int, text: typing.Optional[str]) -> int: ... + @typing.overload + def insertTab(self, index: int, icon: QtGui.QIcon, text: typing.Optional[str]) -> int: ... + @typing.overload + def addTab(self, text: typing.Optional[str]) -> int: ... + @typing.overload + def addTab(self, icon: QtGui.QIcon, text: typing.Optional[str]) -> int: ... + def setShape(self, shape: 'QTabBar.Shape') -> None: ... + def shape(self) -> 'QTabBar.Shape': ... + + +class QTableView(QAbstractItemView): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... + def selectionChanged(self, selected: QtCore.QItemSelection, deselected: QtCore.QItemSelection) -> None: ... + def clearSpans(self) -> None: ... + def isCornerButtonEnabled(self) -> bool: ... + def setCornerButtonEnabled(self, enable: bool) -> None: ... + def wordWrap(self) -> bool: ... + def setWordWrap(self, on: bool) -> None: ... + def sortByColumn(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... + def columnSpan(self, row: int, column: int) -> int: ... + def rowSpan(self, row: int, column: int) -> int: ... + def setSpan(self, row: int, column: int, rowSpan: int, columnSpan: int) -> None: ... + def isSortingEnabled(self) -> bool: ... + def setSortingEnabled(self, enable: bool) -> None: ... + def viewportSizeHint(self) -> QtCore.QSize: ... + def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... + def horizontalScrollbarAction(self, action: int) -> None: ... + def verticalScrollbarAction(self, action: int) -> None: ... + def sizeHintForColumn(self, column: int) -> int: ... + def sizeHintForRow(self, row: int) -> int: ... + def updateGeometries(self) -> None: ... + def selectedIndexes(self) -> typing.List[QtCore.QModelIndex]: ... + def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... + def setSelection(self, rect: QtCore.QRect, command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def moveCursor(self, cursorAction: QAbstractItemView.CursorAction, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> QtCore.QModelIndex: ... + def verticalOffset(self) -> int: ... + def horizontalOffset(self) -> int: ... + def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def viewOptions(self) -> QStyleOptionViewItem: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def columnCountChanged(self, oldCount: int, newCount: int) -> None: ... + def rowCountChanged(self, oldCount: int, newCount: int) -> None: ... + def columnResized(self, column: int, oldWidth: int, newWidth: int) -> None: ... + def rowResized(self, row: int, oldHeight: int, newHeight: int) -> None: ... + def columnMoved(self, column: int, oldIndex: int, newIndex: int) -> None: ... + def rowMoved(self, row: int, oldIndex: int, newIndex: int) -> None: ... + def resizeColumnsToContents(self) -> None: ... + def resizeColumnToContents(self, column: int) -> None: ... + def resizeRowsToContents(self) -> None: ... + def resizeRowToContents(self, row: int) -> None: ... + def showColumn(self, column: int) -> None: ... + def showRow(self, row: int) -> None: ... + def hideColumn(self, column: int) -> None: ... + def hideRow(self, row: int) -> None: ... + def selectColumn(self, column: int) -> None: ... + def selectRow(self, row: int) -> None: ... + def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... + def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint = ...) -> None: ... + def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... + def setGridStyle(self, style: QtCore.Qt.PenStyle) -> None: ... + def gridStyle(self) -> QtCore.Qt.PenStyle: ... + def setShowGrid(self, show: bool) -> None: ... + def showGrid(self) -> bool: ... + def setColumnHidden(self, column: int, hide: bool) -> None: ... + def isColumnHidden(self, column: int) -> bool: ... + def setRowHidden(self, row: int, hide: bool) -> None: ... + def isRowHidden(self, row: int) -> bool: ... + def columnAt(self, x: int) -> int: ... + def columnWidth(self, column: int) -> int: ... + def setColumnWidth(self, column: int, width: int) -> None: ... + def columnViewportPosition(self, column: int) -> int: ... + def rowAt(self, y: int) -> int: ... + def rowHeight(self, row: int) -> int: ... + def setRowHeight(self, row: int, height: int) -> None: ... + def rowViewportPosition(self, row: int) -> int: ... + def setVerticalHeader(self, header: typing.Optional[QHeaderView]) -> None: ... + def setHorizontalHeader(self, header: typing.Optional[QHeaderView]) -> None: ... + def verticalHeader(self) -> typing.Optional[QHeaderView]: ... + def horizontalHeader(self) -> typing.Optional[QHeaderView]: ... + def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... + def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... + def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... + + +class QTableWidgetSelectionRange(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, top: int, left: int, bottom: int, right: int) -> None: ... + @typing.overload + def __init__(self, other: 'QTableWidgetSelectionRange') -> None: ... + + def columnCount(self) -> int: ... + def rowCount(self) -> int: ... + def rightColumn(self) -> int: ... + def leftColumn(self) -> int: ... + def bottomRow(self) -> int: ... + def topRow(self) -> int: ... + + +class QTableWidgetItem(PyQt5.sip.wrapper): + + class ItemType(int): + Type = ... # type: QTableWidgetItem.ItemType + UserType = ... # type: QTableWidgetItem.ItemType + + @typing.overload + def __init__(self, type: int = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], type: int = ...) -> None: ... + @typing.overload + def __init__(self, icon: QtGui.QIcon, text: typing.Optional[str], type: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QTableWidgetItem') -> None: ... + + def __ge__(self, other: 'QTableWidgetItem') -> bool: ... + def isSelected(self) -> bool: ... + def setSelected(self, aselect: bool) -> None: ... + def column(self) -> int: ... + def row(self) -> int: ... + def setForeground(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def foreground(self) -> QtGui.QBrush: ... + def setBackground(self, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def background(self) -> QtGui.QBrush: ... + def setSizeHint(self, size: QtCore.QSize) -> None: ... + def sizeHint(self) -> QtCore.QSize: ... + def setFont(self, afont: QtGui.QFont) -> None: ... + def setWhatsThis(self, awhatsThis: typing.Optional[str]) -> None: ... + def setToolTip(self, atoolTip: typing.Optional[str]) -> None: ... + def setStatusTip(self, astatusTip: typing.Optional[str]) -> None: ... + def setIcon(self, aicon: QtGui.QIcon) -> None: ... + def setText(self, atext: typing.Optional[str]) -> None: ... + def setFlags(self, aflags: typing.Union[QtCore.Qt.ItemFlags, QtCore.Qt.ItemFlag]) -> None: ... + def type(self) -> int: ... + def write(self, out: QtCore.QDataStream) -> None: ... + def read(self, in_: QtCore.QDataStream) -> None: ... + def __lt__(self, other: 'QTableWidgetItem') -> bool: ... + def setData(self, role: int, value: typing.Any) -> None: ... + def data(self, role: int) -> typing.Any: ... + def setCheckState(self, state: QtCore.Qt.CheckState) -> None: ... + def checkState(self) -> QtCore.Qt.CheckState: ... + def setTextAlignment(self, alignment: int) -> None: ... + def textAlignment(self) -> int: ... + def font(self) -> QtGui.QFont: ... + def whatsThis(self) -> str: ... + def toolTip(self) -> str: ... + def statusTip(self) -> str: ... + def icon(self) -> QtGui.QIcon: ... + def text(self) -> str: ... + def flags(self) -> QtCore.Qt.ItemFlags: ... + def tableWidget(self) -> typing.Optional['QTableWidget']: ... + def clone(self) -> typing.Optional['QTableWidgetItem']: ... + + +class QTableWidget(QTableView): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, rows: int, columns: int, parent: typing.Optional[QWidget] = ...) -> None: ... + + def isPersistentEditorOpen(self, item: typing.Optional[QTableWidgetItem]) -> bool: ... + def dropEvent(self, event: typing.Optional[QtGui.QDropEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def itemFromIndex(self, index: QtCore.QModelIndex) -> typing.Optional[QTableWidgetItem]: ... + def indexFromItem(self, item: typing.Optional[QTableWidgetItem]) -> QtCore.QModelIndex: ... + def items(self, data: typing.Optional[QtCore.QMimeData]) -> typing.List[QTableWidgetItem]: ... + def supportedDropActions(self) -> QtCore.Qt.DropActions: ... + def dropMimeData(self, row: int, column: int, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction) -> bool: ... + def mimeData(self, items: typing.Iterable[QTableWidgetItem]) -> typing.Optional[QtCore.QMimeData]: ... + def mimeTypes(self) -> typing.List[str]: ... + currentCellChanged: typing.ClassVar[QtCore.pyqtSignal] + cellChanged: typing.ClassVar[QtCore.pyqtSignal] + cellEntered: typing.ClassVar[QtCore.pyqtSignal] + cellActivated: typing.ClassVar[QtCore.pyqtSignal] + cellDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] + cellClicked: typing.ClassVar[QtCore.pyqtSignal] + cellPressed: typing.ClassVar[QtCore.pyqtSignal] + itemSelectionChanged: typing.ClassVar[QtCore.pyqtSignal] + currentItemChanged: typing.ClassVar[QtCore.pyqtSignal] + itemChanged: typing.ClassVar[QtCore.pyqtSignal] + itemEntered: typing.ClassVar[QtCore.pyqtSignal] + itemActivated: typing.ClassVar[QtCore.pyqtSignal] + itemDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] + itemClicked: typing.ClassVar[QtCore.pyqtSignal] + itemPressed: typing.ClassVar[QtCore.pyqtSignal] + def clearContents(self) -> None: ... + def clear(self) -> None: ... + def removeColumn(self, column: int) -> None: ... + def removeRow(self, row: int) -> None: ... + def insertColumn(self, column: int) -> None: ... + def insertRow(self, row: int) -> None: ... + def scrollToItem(self, item: typing.Optional[QTableWidgetItem], hint: QAbstractItemView.ScrollHint = ...) -> None: ... + def setItemPrototype(self, item: typing.Optional[QTableWidgetItem]) -> None: ... + def itemPrototype(self) -> typing.Optional[QTableWidgetItem]: ... + def visualItemRect(self, item: typing.Optional[QTableWidgetItem]) -> QtCore.QRect: ... + @typing.overload + def itemAt(self, p: QtCore.QPoint) -> typing.Optional[QTableWidgetItem]: ... + @typing.overload + def itemAt(self, ax: int, ay: int) -> typing.Optional[QTableWidgetItem]: ... + def visualColumn(self, logicalColumn: int) -> int: ... + def visualRow(self, logicalRow: int) -> int: ... + def findItems(self, text: typing.Optional[str], flags: typing.Union[QtCore.Qt.MatchFlags, QtCore.Qt.MatchFlag]) -> typing.List[QTableWidgetItem]: ... + def selectedItems(self) -> typing.List[QTableWidgetItem]: ... + def selectedRanges(self) -> typing.List[QTableWidgetSelectionRange]: ... + def setRangeSelected(self, range: QTableWidgetSelectionRange, select: bool) -> None: ... + def removeCellWidget(self, arow: int, acolumn: int) -> None: ... + def setCellWidget(self, row: int, column: int, widget: typing.Optional[QWidget]) -> None: ... + def cellWidget(self, row: int, column: int) -> typing.Optional[QWidget]: ... + def closePersistentEditor(self, item: typing.Optional[QTableWidgetItem]) -> None: ... + def openPersistentEditor(self, item: typing.Optional[QTableWidgetItem]) -> None: ... + def editItem(self, item: typing.Optional[QTableWidgetItem]) -> None: ... + def isSortingEnabled(self) -> bool: ... + def setSortingEnabled(self, enable: bool) -> None: ... + def sortItems(self, column: int, order: QtCore.Qt.SortOrder = ...) -> None: ... + @typing.overload + def setCurrentCell(self, row: int, column: int) -> None: ... + @typing.overload + def setCurrentCell(self, row: int, column: int, command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + @typing.overload + def setCurrentItem(self, item: typing.Optional[QTableWidgetItem]) -> None: ... + @typing.overload + def setCurrentItem(self, item: typing.Optional[QTableWidgetItem], command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def currentItem(self) -> typing.Optional[QTableWidgetItem]: ... + def currentColumn(self) -> int: ... + def currentRow(self) -> int: ... + def setHorizontalHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... + def setVerticalHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... + def takeHorizontalHeaderItem(self, column: int) -> typing.Optional[QTableWidgetItem]: ... + def setHorizontalHeaderItem(self, column: int, item: typing.Optional[QTableWidgetItem]) -> None: ... + def horizontalHeaderItem(self, column: int) -> typing.Optional[QTableWidgetItem]: ... + def takeVerticalHeaderItem(self, row: int) -> typing.Optional[QTableWidgetItem]: ... + def setVerticalHeaderItem(self, row: int, item: typing.Optional[QTableWidgetItem]) -> None: ... + def verticalHeaderItem(self, row: int) -> typing.Optional[QTableWidgetItem]: ... + def takeItem(self, row: int, column: int) -> typing.Optional[QTableWidgetItem]: ... + def setItem(self, row: int, column: int, item: typing.Optional[QTableWidgetItem]) -> None: ... + def item(self, row: int, column: int) -> typing.Optional[QTableWidgetItem]: ... + def column(self, item: typing.Optional[QTableWidgetItem]) -> int: ... + def row(self, item: typing.Optional[QTableWidgetItem]) -> int: ... + def columnCount(self) -> int: ... + def setColumnCount(self, columns: int) -> None: ... + def rowCount(self) -> int: ... + def setRowCount(self, rows: int) -> None: ... + + +class QTabWidget(QWidget): + + class TabShape(int): + Rounded = ... # type: QTabWidget.TabShape + Triangular = ... # type: QTabWidget.TabShape + + class TabPosition(int): + North = ... # type: QTabWidget.TabPosition + South = ... # type: QTabWidget.TabPosition + West = ... # type: QTabWidget.TabPosition + East = ... # type: QTabWidget.TabPosition + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def setTabVisible(self, index: int, visible: bool) -> None: ... + def isTabVisible(self, index: int) -> bool: ... + def setTabBarAutoHide(self, enabled: bool) -> None: ... + def tabBarAutoHide(self) -> bool: ... + tabBarDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] + tabBarClicked: typing.ClassVar[QtCore.pyqtSignal] + def hasHeightForWidth(self) -> bool: ... + def heightForWidth(self, width: int) -> int: ... + tabCloseRequested: typing.ClassVar[QtCore.pyqtSignal] + def setDocumentMode(self, set: bool) -> None: ... + def documentMode(self) -> bool: ... + def setMovable(self, movable: bool) -> None: ... + def isMovable(self) -> bool: ... + def setTabsClosable(self, closeable: bool) -> None: ... + def tabsClosable(self) -> bool: ... + def setUsesScrollButtons(self, useButtons: bool) -> None: ... + def usesScrollButtons(self) -> bool: ... + def setIconSize(self, size: QtCore.QSize) -> None: ... + def iconSize(self) -> QtCore.QSize: ... + def setElideMode(self, a0: QtCore.Qt.TextElideMode) -> None: ... + def elideMode(self) -> QtCore.Qt.TextElideMode: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def tabBar(self) -> typing.Optional[QTabBar]: ... + def setTabBar(self, a0: typing.Optional[QTabBar]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def keyPressEvent(self, a0: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def tabRemoved(self, index: int) -> None: ... + def tabInserted(self, index: int) -> None: ... + def initStyleOption(self, option: typing.Optional[QStyleOptionTabWidgetFrame]) -> None: ... + currentChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCurrentWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def setCurrentIndex(self, index: int) -> None: ... + def cornerWidget(self, corner: QtCore.Qt.Corner = ...) -> typing.Optional[QWidget]: ... + def setCornerWidget(self, widget: typing.Optional[QWidget], corner: QtCore.Qt.Corner = ...) -> None: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + def setTabShape(self, s: 'QTabWidget.TabShape') -> None: ... + def tabShape(self) -> 'QTabWidget.TabShape': ... + def setTabPosition(self, a0: 'QTabWidget.TabPosition') -> None: ... + def tabPosition(self) -> 'QTabWidget.TabPosition': ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def indexOf(self, widget: typing.Optional[QWidget]) -> int: ... + def widget(self, index: int) -> typing.Optional[QWidget]: ... + def currentWidget(self) -> typing.Optional[QWidget]: ... + def currentIndex(self) -> int: ... + def tabWhatsThis(self, index: int) -> str: ... + def setTabWhatsThis(self, index: int, text: typing.Optional[str]) -> None: ... + def tabToolTip(self, index: int) -> str: ... + def setTabToolTip(self, index: int, tip: typing.Optional[str]) -> None: ... + def setTabIcon(self, index: int, icon: QtGui.QIcon) -> None: ... + def tabIcon(self, index: int) -> QtGui.QIcon: ... + def setTabText(self, index: int, a1: typing.Optional[str]) -> None: ... + def tabText(self, index: int) -> str: ... + def setTabEnabled(self, index: int, a1: bool) -> None: ... + def isTabEnabled(self, index: int) -> bool: ... + def removeTab(self, index: int) -> None: ... + @typing.overload + def insertTab(self, index: int, widget: typing.Optional[QWidget], a2: typing.Optional[str]) -> int: ... + @typing.overload + def insertTab(self, index: int, widget: typing.Optional[QWidget], icon: QtGui.QIcon, label: typing.Optional[str]) -> int: ... + @typing.overload + def addTab(self, widget: typing.Optional[QWidget], a1: typing.Optional[str]) -> int: ... + @typing.overload + def addTab(self, widget: typing.Optional[QWidget], icon: QtGui.QIcon, label: typing.Optional[str]) -> int: ... + def clear(self) -> None: ... + + +class QTextEdit(QAbstractScrollArea): + + class AutoFormattingFlag(int): + AutoNone = ... # type: QTextEdit.AutoFormattingFlag + AutoBulletList = ... # type: QTextEdit.AutoFormattingFlag + AutoAll = ... # type: QTextEdit.AutoFormattingFlag + + class LineWrapMode(int): + NoWrap = ... # type: QTextEdit.LineWrapMode + WidgetWidth = ... # type: QTextEdit.LineWrapMode + FixedPixelWidth = ... # type: QTextEdit.LineWrapMode + FixedColumnWidth = ... # type: QTextEdit.LineWrapMode + + class ExtraSelection(PyQt5.sipsimplewrapper): + + cursor = ... # type: QtGui.QTextCursor + format = ... # type: QtGui.QTextCharFormat + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QTextEdit.ExtraSelection') -> None: ... + + class AutoFormatting(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTextEdit.AutoFormatting', 'QTextEdit.AutoFormattingFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTextEdit.AutoFormatting', 'QTextEdit.AutoFormattingFlag']) -> 'QTextEdit.AutoFormatting': ... + def __xor__(self, f: typing.Union['QTextEdit.AutoFormatting', 'QTextEdit.AutoFormattingFlag']) -> 'QTextEdit.AutoFormatting': ... + def __ior__(self, f: typing.Union['QTextEdit.AutoFormatting', 'QTextEdit.AutoFormattingFlag']) -> 'QTextEdit.AutoFormatting': ... + def __or__(self, f: typing.Union['QTextEdit.AutoFormatting', 'QTextEdit.AutoFormattingFlag']) -> 'QTextEdit.AutoFormatting': ... + def __iand__(self, f: typing.Union['QTextEdit.AutoFormatting', 'QTextEdit.AutoFormattingFlag']) -> 'QTextEdit.AutoFormatting': ... + def __and__(self, f: typing.Union['QTextEdit.AutoFormatting', 'QTextEdit.AutoFormattingFlag']) -> 'QTextEdit.AutoFormatting': ... + def __invert__(self) -> 'QTextEdit.AutoFormatting': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + + def setMarkdown(self, markdown: typing.Optional[str]) -> None: ... + def toMarkdown(self, features: typing.Union[QtGui.QTextDocument.MarkdownFeatures, QtGui.QTextDocument.MarkdownFeature] = ...) -> str: ... + def setTabStopDistance(self, distance: float) -> None: ... + def tabStopDistance(self) -> float: ... + def placeholderText(self) -> str: ... + def setPlaceholderText(self, placeholderText: typing.Optional[str]) -> None: ... + def setTextBackgroundColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def textBackgroundColor(self) -> QtGui.QColor: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + @typing.overload + def inputMethodQuery(self, property: QtCore.Qt.InputMethodQuery) -> typing.Any: ... + @typing.overload + def inputMethodQuery(self, query: QtCore.Qt.InputMethodQuery, argument: typing.Any) -> typing.Any: ... + def inputMethodEvent(self, a0: typing.Optional[QtGui.QInputMethodEvent]) -> None: ... + def insertFromMimeData(self, source: typing.Optional[QtCore.QMimeData]) -> None: ... + def canInsertFromMimeData(self, source: typing.Optional[QtCore.QMimeData]) -> bool: ... + def createMimeDataFromSelection(self) -> typing.Optional[QtCore.QMimeData]: ... + def wheelEvent(self, e: typing.Optional[QtGui.QWheelEvent]) -> None: ... + def changeEvent(self, e: typing.Optional[QtCore.QEvent]) -> None: ... + def showEvent(self, a0: typing.Optional[QtGui.QShowEvent]) -> None: ... + def focusOutEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def focusInEvent(self, e: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def dropEvent(self, e: typing.Optional[QtGui.QDropEvent]) -> None: ... + def dragMoveEvent(self, e: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def dragLeaveEvent(self, e: typing.Optional[QtGui.QDragLeaveEvent]) -> None: ... + def dragEnterEvent(self, e: typing.Optional[QtGui.QDragEnterEvent]) -> None: ... + def contextMenuEvent(self, e: typing.Optional[QtGui.QContextMenuEvent]) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseReleaseEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def resizeEvent(self, a0: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def keyReleaseEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def keyPressEvent(self, e: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def timerEvent(self, e: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + cursorPositionChanged: typing.ClassVar[QtCore.pyqtSignal] + selectionChanged: typing.ClassVar[QtCore.pyqtSignal] + copyAvailable: typing.ClassVar[QtCore.pyqtSignal] + currentCharFormatChanged: typing.ClassVar[QtCore.pyqtSignal] + redoAvailable: typing.ClassVar[QtCore.pyqtSignal] + undoAvailable: typing.ClassVar[QtCore.pyqtSignal] + textChanged: typing.ClassVar[QtCore.pyqtSignal] + def zoomOut(self, range: int = ...) -> None: ... + def zoomIn(self, range: int = ...) -> None: ... + def undo(self) -> None: ... + def redo(self) -> None: ... + def scrollToAnchor(self, name: typing.Optional[str]) -> None: ... + def insertHtml(self, text: typing.Optional[str]) -> None: ... + def insertPlainText(self, text: typing.Optional[str]) -> None: ... + def selectAll(self) -> None: ... + def clear(self) -> None: ... + def paste(self) -> None: ... + def copy(self) -> None: ... + def cut(self) -> None: ... + def setHtml(self, text: typing.Optional[str]) -> None: ... + def setPlainText(self, text: typing.Optional[str]) -> None: ... + def setAlignment(self, a: typing.Union[QtCore.Qt.Alignment, QtCore.Qt.AlignmentFlag]) -> None: ... + def setCurrentFont(self, f: QtGui.QFont) -> None: ... + def setTextColor(self, c: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor]) -> None: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def setFontItalic(self, b: bool) -> None: ... + def setFontUnderline(self, b: bool) -> None: ... + def setFontWeight(self, w: int) -> None: ... + def setFontFamily(self, fontFamily: typing.Optional[str]) -> None: ... + def setFontPointSize(self, s: float) -> None: ... + def print(self, printer: typing.Optional[QtGui.QPagedPaintDevice]) -> None: ... + def print_(self, printer: typing.Optional[QtGui.QPagedPaintDevice]) -> None: ... + def moveCursor(self, operation: QtGui.QTextCursor.MoveOperation, mode: QtGui.QTextCursor.MoveMode = ...) -> None: ... + def canPaste(self) -> bool: ... + def extraSelections(self) -> typing.List['QTextEdit.ExtraSelection']: ... + def setExtraSelections(self, selections: typing.Iterable['QTextEdit.ExtraSelection']) -> None: ... + def cursorWidth(self) -> int: ... + def setCursorWidth(self, width: int) -> None: ... + def textInteractionFlags(self) -> QtCore.Qt.TextInteractionFlags: ... + def setTextInteractionFlags(self, flags: typing.Union[QtCore.Qt.TextInteractionFlags, QtCore.Qt.TextInteractionFlag]) -> None: ... + def setAcceptRichText(self, accept: bool) -> None: ... + def acceptRichText(self) -> bool: ... + def setTabStopWidth(self, width: int) -> None: ... + def tabStopWidth(self) -> int: ... + def setOverwriteMode(self, overwrite: bool) -> None: ... + def overwriteMode(self) -> bool: ... + def anchorAt(self, pos: QtCore.QPoint) -> str: ... + @typing.overload + def cursorRect(self, cursor: QtGui.QTextCursor) -> QtCore.QRect: ... + @typing.overload + def cursorRect(self) -> QtCore.QRect: ... + def cursorForPosition(self, pos: QtCore.QPoint) -> QtGui.QTextCursor: ... + @typing.overload + def createStandardContextMenu(self) -> typing.Optional[QMenu]: ... + @typing.overload + def createStandardContextMenu(self, position: QtCore.QPoint) -> typing.Optional[QMenu]: ... + def loadResource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... + def ensureCursorVisible(self) -> None: ... + def append(self, text: typing.Optional[str]) -> None: ... + def toHtml(self) -> str: ... + def toPlainText(self) -> str: ... + @typing.overload + def find(self, exp: typing.Optional[str], options: typing.Union[QtGui.QTextDocument.FindFlags, QtGui.QTextDocument.FindFlag] = ...) -> bool: ... + @typing.overload + def find(self, exp: QtCore.QRegExp, options: typing.Union[QtGui.QTextDocument.FindFlags, QtGui.QTextDocument.FindFlag] = ...) -> bool: ... + @typing.overload + def find(self, exp: QtCore.QRegularExpression, options: typing.Union[QtGui.QTextDocument.FindFlags, QtGui.QTextDocument.FindFlag] = ...) -> bool: ... + def setWordWrapMode(self, policy: QtGui.QTextOption.WrapMode) -> None: ... + def wordWrapMode(self) -> QtGui.QTextOption.WrapMode: ... + def setLineWrapColumnOrWidth(self, w: int) -> None: ... + def lineWrapColumnOrWidth(self) -> int: ... + def setLineWrapMode(self, mode: 'QTextEdit.LineWrapMode') -> None: ... + def lineWrapMode(self) -> 'QTextEdit.LineWrapMode': ... + def setUndoRedoEnabled(self, enable: bool) -> None: ... + def isUndoRedoEnabled(self) -> bool: ... + def documentTitle(self) -> str: ... + def setDocumentTitle(self, title: typing.Optional[str]) -> None: ... + def setTabChangesFocus(self, b: bool) -> None: ... + def tabChangesFocus(self) -> bool: ... + def setAutoFormatting(self, features: typing.Union['QTextEdit.AutoFormatting', 'QTextEdit.AutoFormattingFlag']) -> None: ... + def autoFormatting(self) -> 'QTextEdit.AutoFormatting': ... + def currentCharFormat(self) -> QtGui.QTextCharFormat: ... + def setCurrentCharFormat(self, format: QtGui.QTextCharFormat) -> None: ... + def mergeCurrentCharFormat(self, modifier: QtGui.QTextCharFormat) -> None: ... + def alignment(self) -> QtCore.Qt.Alignment: ... + def currentFont(self) -> QtGui.QFont: ... + def textColor(self) -> QtGui.QColor: ... + def fontItalic(self) -> bool: ... + def fontUnderline(self) -> bool: ... + def fontWeight(self) -> int: ... + def fontFamily(self) -> str: ... + def fontPointSize(self) -> float: ... + def setReadOnly(self, ro: bool) -> None: ... + def isReadOnly(self) -> bool: ... + def textCursor(self) -> QtGui.QTextCursor: ... + def setTextCursor(self, cursor: QtGui.QTextCursor) -> None: ... + def document(self) -> typing.Optional[QtGui.QTextDocument]: ... + def setDocument(self, document: typing.Optional[QtGui.QTextDocument]) -> None: ... + + +class QTextBrowser(QTextEdit): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def doSetSource(self, name: QtCore.QUrl, type: QtGui.QTextDocument.ResourceType = ...) -> None: ... + def sourceType(self) -> QtGui.QTextDocument.ResourceType: ... + historyChanged: typing.ClassVar[QtCore.pyqtSignal] + def forwardHistoryCount(self) -> int: ... + def backwardHistoryCount(self) -> int: ... + def historyUrl(self, a0: int) -> QtCore.QUrl: ... + def historyTitle(self, a0: int) -> str: ... + def setOpenLinks(self, open: bool) -> None: ... + def openLinks(self) -> bool: ... + def setOpenExternalLinks(self, open: bool) -> None: ... + def openExternalLinks(self) -> bool: ... + def clearHistory(self) -> None: ... + def isForwardAvailable(self) -> bool: ... + def isBackwardAvailable(self) -> bool: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def focusNextPrevChild(self, next: bool) -> bool: ... + def focusOutEvent(self, ev: typing.Optional[QtGui.QFocusEvent]) -> None: ... + def mouseReleaseEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, ev: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def keyPressEvent(self, ev: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + anchorClicked: typing.ClassVar[QtCore.pyqtSignal] + highlighted: typing.ClassVar[QtCore.pyqtSignal] + sourceChanged: typing.ClassVar[QtCore.pyqtSignal] + forwardAvailable: typing.ClassVar[QtCore.pyqtSignal] + backwardAvailable: typing.ClassVar[QtCore.pyqtSignal] + def reload(self) -> None: ... + def home(self) -> None: ... + def forward(self) -> None: ... + def backward(self) -> None: ... + @typing.overload + def setSource(self, name: QtCore.QUrl) -> None: ... + @typing.overload + def setSource(self, name: QtCore.QUrl, type: QtGui.QTextDocument.ResourceType) -> None: ... + def loadResource(self, type: int, name: QtCore.QUrl) -> typing.Any: ... + def setSearchPaths(self, paths: typing.Iterable[typing.Optional[str]]) -> None: ... + def searchPaths(self) -> typing.List[str]: ... + def source(self) -> QtCore.QUrl: ... + + +class QToolBar(QWidget): + + @typing.overload + def __init__(self, title: typing.Optional[str], parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def isFloating(self) -> bool: ... + def setFloatable(self, floatable: bool) -> None: ... + def isFloatable(self) -> bool: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def changeEvent(self, event: typing.Optional[QtCore.QEvent]) -> None: ... + def actionEvent(self, event: typing.Optional[QtGui.QActionEvent]) -> None: ... + def initStyleOption(self, option: typing.Optional[QStyleOptionToolBar]) -> None: ... + visibilityChanged: typing.ClassVar[QtCore.pyqtSignal] + topLevelChanged: typing.ClassVar[QtCore.pyqtSignal] + toolButtonStyleChanged: typing.ClassVar[QtCore.pyqtSignal] + iconSizeChanged: typing.ClassVar[QtCore.pyqtSignal] + orientationChanged: typing.ClassVar[QtCore.pyqtSignal] + allowedAreasChanged: typing.ClassVar[QtCore.pyqtSignal] + movableChanged: typing.ClassVar[QtCore.pyqtSignal] + actionTriggered: typing.ClassVar[QtCore.pyqtSignal] + def setToolButtonStyle(self, toolButtonStyle: QtCore.Qt.ToolButtonStyle) -> None: ... + def setIconSize(self, iconSize: QtCore.QSize) -> None: ... + def widgetForAction(self, action: typing.Optional[QAction]) -> typing.Optional[QWidget]: ... + def toolButtonStyle(self) -> QtCore.Qt.ToolButtonStyle: ... + def iconSize(self) -> QtCore.QSize: ... + def toggleViewAction(self) -> typing.Optional[QAction]: ... + @typing.overload + def actionAt(self, p: QtCore.QPoint) -> typing.Optional[QAction]: ... + @typing.overload + def actionAt(self, ax: int, ay: int) -> typing.Optional[QAction]: ... + def actionGeometry(self, action: typing.Optional[QAction]) -> QtCore.QRect: ... + def insertWidget(self, before: typing.Optional[QAction], widget: typing.Optional[QWidget]) -> typing.Optional[QAction]: ... + def addWidget(self, widget: typing.Optional[QWidget]) -> typing.Optional[QAction]: ... + def insertSeparator(self, before: typing.Optional[QAction]) -> typing.Optional[QAction]: ... + def addSeparator(self) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, action: typing.Optional[QAction]) -> None: ... + @typing.overload + def addAction(self, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str]) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, text: typing.Optional[str], slot: PYQT_SLOT) -> typing.Optional[QAction]: ... + @typing.overload + def addAction(self, icon: QtGui.QIcon, text: typing.Optional[str], slot: PYQT_SLOT) -> typing.Optional[QAction]: ... + def clear(self) -> None: ... + def orientation(self) -> QtCore.Qt.Orientation: ... + def setOrientation(self, orientation: QtCore.Qt.Orientation) -> None: ... + def isAreaAllowed(self, area: QtCore.Qt.ToolBarArea) -> bool: ... + def allowedAreas(self) -> QtCore.Qt.ToolBarAreas: ... + def setAllowedAreas(self, areas: typing.Union[QtCore.Qt.ToolBarAreas, QtCore.Qt.ToolBarArea]) -> None: ... + def isMovable(self) -> bool: ... + def setMovable(self, movable: bool) -> None: ... + + +class QToolBox(QFrame): + + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def showEvent(self, e: typing.Optional[QtGui.QShowEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def itemRemoved(self, index: int) -> None: ... + def itemInserted(self, index: int) -> None: ... + currentChanged: typing.ClassVar[QtCore.pyqtSignal] + def setCurrentWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def setCurrentIndex(self, index: int) -> None: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def indexOf(self, widget: typing.Optional[QWidget]) -> int: ... + def widget(self, index: int) -> typing.Optional[QWidget]: ... + def currentWidget(self) -> typing.Optional[QWidget]: ... + def currentIndex(self) -> int: ... + def itemToolTip(self, index: int) -> str: ... + def setItemToolTip(self, index: int, toolTip: typing.Optional[str]) -> None: ... + def itemIcon(self, index: int) -> QtGui.QIcon: ... + def setItemIcon(self, index: int, icon: QtGui.QIcon) -> None: ... + def itemText(self, index: int) -> str: ... + def setItemText(self, index: int, text: typing.Optional[str]) -> None: ... + def isItemEnabled(self, index: int) -> bool: ... + def setItemEnabled(self, index: int, enabled: bool) -> None: ... + def removeItem(self, index: int) -> None: ... + @typing.overload + def insertItem(self, index: int, item: typing.Optional[QWidget], text: typing.Optional[str]) -> int: ... + @typing.overload + def insertItem(self, index: int, widget: typing.Optional[QWidget], icon: QtGui.QIcon, text: typing.Optional[str]) -> int: ... + @typing.overload + def addItem(self, item: typing.Optional[QWidget], text: typing.Optional[str]) -> int: ... + @typing.overload + def addItem(self, item: typing.Optional[QWidget], iconSet: QtGui.QIcon, text: typing.Optional[str]) -> int: ... + + +class QToolButton(QAbstractButton): + + class ToolButtonPopupMode(int): + DelayedPopup = ... # type: QToolButton.ToolButtonPopupMode + MenuButtonPopup = ... # type: QToolButton.ToolButtonPopupMode + InstantPopup = ... # type: QToolButton.ToolButtonPopupMode + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def hitButton(self, pos: QtCore.QPoint) -> bool: ... + def nextCheckState(self) -> None: ... + def mouseReleaseEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def changeEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def timerEvent(self, a0: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def leaveEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def enterEvent(self, a0: typing.Optional[QtCore.QEvent]) -> None: ... + def actionEvent(self, a0: typing.Optional[QtGui.QActionEvent]) -> None: ... + def paintEvent(self, a0: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def mousePressEvent(self, a0: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def initStyleOption(self, option: typing.Optional[QStyleOptionToolButton]) -> None: ... + triggered: typing.ClassVar[QtCore.pyqtSignal] + def setDefaultAction(self, a0: typing.Optional[QAction]) -> None: ... + def setToolButtonStyle(self, style: QtCore.Qt.ToolButtonStyle) -> None: ... + def showMenu(self) -> None: ... + def autoRaise(self) -> bool: ... + def setAutoRaise(self, enable: bool) -> None: ... + def defaultAction(self) -> typing.Optional[QAction]: ... + def popupMode(self) -> 'QToolButton.ToolButtonPopupMode': ... + def setPopupMode(self, mode: 'QToolButton.ToolButtonPopupMode') -> None: ... + def menu(self) -> typing.Optional[QMenu]: ... + def setMenu(self, menu: typing.Optional[QMenu]) -> None: ... + def setArrowType(self, type: QtCore.Qt.ArrowType) -> None: ... + def arrowType(self) -> QtCore.Qt.ArrowType: ... + def toolButtonStyle(self) -> QtCore.Qt.ToolButtonStyle: ... + def minimumSizeHint(self) -> QtCore.QSize: ... + def sizeHint(self) -> QtCore.QSize: ... + + +class QToolTip(PyQt5.sipsimplewrapper): + + def __init__(self, a0: 'QToolTip') -> None: ... + + @staticmethod + def text() -> str: ... + @staticmethod + def isVisible() -> bool: ... + @staticmethod + def setFont(a0: QtGui.QFont) -> None: ... + @staticmethod + def font() -> QtGui.QFont: ... + @staticmethod + def setPalette(a0: QtGui.QPalette) -> None: ... + @staticmethod + def hideText() -> None: ... + @staticmethod + def palette() -> QtGui.QPalette: ... + @typing.overload + @staticmethod + def showText(pos: QtCore.QPoint, text: typing.Optional[str], widget: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + @staticmethod + def showText(pos: QtCore.QPoint, text: typing.Optional[str], w: typing.Optional[QWidget], rect: QtCore.QRect) -> None: ... + @typing.overload + @staticmethod + def showText(pos: QtCore.QPoint, text: typing.Optional[str], w: typing.Optional[QWidget], rect: QtCore.QRect, msecShowTime: int) -> None: ... + + +class QTreeView(QAbstractItemView): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def expandRecursively(self, index: QtCore.QModelIndex, depth: int = ...) -> None: ... + def resetIndentation(self) -> None: ... + def viewportSizeHint(self) -> QtCore.QSize: ... + def treePosition(self) -> int: ... + def setTreePosition(self, logicalIndex: int) -> None: ... + def setHeaderHidden(self, hide: bool) -> None: ... + def isHeaderHidden(self) -> bool: ... + def setExpandsOnDoubleClick(self, enable: bool) -> None: ... + def expandsOnDoubleClick(self) -> bool: ... + def currentChanged(self, current: QtCore.QModelIndex, previous: QtCore.QModelIndex) -> None: ... + def selectionChanged(self, selected: QtCore.QItemSelection, deselected: QtCore.QItemSelection) -> None: ... + def rowHeight(self, index: QtCore.QModelIndex) -> int: ... + def viewportEvent(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def dragMoveEvent(self, event: typing.Optional[QtGui.QDragMoveEvent]) -> None: ... + def expandToDepth(self, depth: int) -> None: ... + def wordWrap(self) -> bool: ... + def setWordWrap(self, on: bool) -> None: ... + def setFirstColumnSpanned(self, row: int, parent: QtCore.QModelIndex, span: bool) -> None: ... + def isFirstColumnSpanned(self, row: int, parent: QtCore.QModelIndex) -> bool: ... + def setAutoExpandDelay(self, delay: int) -> None: ... + def autoExpandDelay(self) -> int: ... + def sortByColumn(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... + def allColumnsShowFocus(self) -> bool: ... + def setAllColumnsShowFocus(self, enable: bool) -> None: ... + def isAnimated(self) -> bool: ... + def setAnimated(self, enable: bool) -> None: ... + def isSortingEnabled(self) -> bool: ... + def setSortingEnabled(self, enable: bool) -> None: ... + def setColumnWidth(self, column: int, width: int) -> None: ... + def isIndexHidden(self, index: QtCore.QModelIndex) -> bool: ... + def horizontalScrollbarAction(self, action: int) -> None: ... + def indexRowSizeHint(self, index: QtCore.QModelIndex) -> int: ... + def sizeHintForColumn(self, column: int) -> int: ... + def updateGeometries(self) -> None: ... + def keyPressEvent(self, event: typing.Optional[QtGui.QKeyEvent]) -> None: ... + def mouseDoubleClickEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mouseMoveEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def mousePressEvent(self, e: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def drawTree(self, painter: typing.Optional[QtGui.QPainter], region: QtGui.QRegion) -> None: ... + def drawBranches(self, painter: typing.Optional[QtGui.QPainter], rect: QtCore.QRect, index: QtCore.QModelIndex) -> None: ... + def drawRow(self, painter: typing.Optional[QtGui.QPainter], options: QStyleOptionViewItem, index: QtCore.QModelIndex) -> None: ... + def mouseReleaseEvent(self, event: typing.Optional[QtGui.QMouseEvent]) -> None: ... + def timerEvent(self, event: typing.Optional[QtCore.QTimerEvent]) -> None: ... + def paintEvent(self, e: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def selectedIndexes(self) -> typing.List[QtCore.QModelIndex]: ... + def visualRegionForSelection(self, selection: QtCore.QItemSelection) -> QtGui.QRegion: ... + def setSelection(self, rect: QtCore.QRect, command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def verticalOffset(self) -> int: ... + def horizontalOffset(self) -> int: ... + def moveCursor(self, cursorAction: QAbstractItemView.CursorAction, modifiers: typing.Union[QtCore.Qt.KeyboardModifiers, QtCore.Qt.KeyboardModifier]) -> QtCore.QModelIndex: ... + def rowsAboutToBeRemoved(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... + def rowsInserted(self, parent: QtCore.QModelIndex, start: int, end: int) -> None: ... + def scrollContentsBy(self, dx: int, dy: int) -> None: ... + def rowsRemoved(self, parent: QtCore.QModelIndex, first: int, last: int) -> None: ... + def reexpand(self) -> None: ... + def columnMoved(self) -> None: ... + def columnCountChanged(self, oldCount: int, newCount: int) -> None: ... + def columnResized(self, column: int, oldSize: int, newSize: int) -> None: ... + def selectAll(self) -> None: ... + def resizeColumnToContents(self, column: int) -> None: ... + def collapseAll(self) -> None: ... + def collapse(self, index: QtCore.QModelIndex) -> None: ... + def expandAll(self) -> None: ... + def expand(self, index: QtCore.QModelIndex) -> None: ... + def showColumn(self, column: int) -> None: ... + def hideColumn(self, column: int) -> None: ... + def dataChanged(self, topLeft: QtCore.QModelIndex, bottomRight: QtCore.QModelIndex, roles: typing.Iterable[int] = ...) -> None: ... + collapsed: typing.ClassVar[QtCore.pyqtSignal] + expanded: typing.ClassVar[QtCore.pyqtSignal] + def reset(self) -> None: ... + def indexBelow(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + def indexAbove(self, index: QtCore.QModelIndex) -> QtCore.QModelIndex: ... + def indexAt(self, p: QtCore.QPoint) -> QtCore.QModelIndex: ... + def scrollTo(self, index: QtCore.QModelIndex, hint: QAbstractItemView.ScrollHint = ...) -> None: ... + def visualRect(self, index: QtCore.QModelIndex) -> QtCore.QRect: ... + def keyboardSearch(self, search: typing.Optional[str]) -> None: ... + def setExpanded(self, index: QtCore.QModelIndex, expand: bool) -> None: ... + def isExpanded(self, index: QtCore.QModelIndex) -> bool: ... + def setRowHidden(self, row: int, parent: QtCore.QModelIndex, hide: bool) -> None: ... + def isRowHidden(self, row: int, parent: QtCore.QModelIndex) -> bool: ... + def setColumnHidden(self, column: int, hide: bool) -> None: ... + def isColumnHidden(self, column: int) -> bool: ... + def columnAt(self, x: int) -> int: ... + def columnWidth(self, column: int) -> int: ... + def columnViewportPosition(self, column: int) -> int: ... + def setItemsExpandable(self, enable: bool) -> None: ... + def itemsExpandable(self) -> bool: ... + def setUniformRowHeights(self, uniform: bool) -> None: ... + def uniformRowHeights(self) -> bool: ... + def setRootIsDecorated(self, show: bool) -> None: ... + def rootIsDecorated(self) -> bool: ... + def setIndentation(self, i: int) -> None: ... + def indentation(self) -> int: ... + def setHeader(self, header: typing.Optional[QHeaderView]) -> None: ... + def header(self) -> typing.Optional[QHeaderView]: ... + def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... + def setRootIndex(self, index: QtCore.QModelIndex) -> None: ... + def setModel(self, model: typing.Optional[QtCore.QAbstractItemModel]) -> None: ... + + +class QTreeWidgetItem(PyQt5.sip.wrapper): + + class ChildIndicatorPolicy(int): + ShowIndicator = ... # type: QTreeWidgetItem.ChildIndicatorPolicy + DontShowIndicator = ... # type: QTreeWidgetItem.ChildIndicatorPolicy + DontShowIndicatorWhenChildless = ... # type: QTreeWidgetItem.ChildIndicatorPolicy + + class ItemType(int): + Type = ... # type: QTreeWidgetItem.ItemType + UserType = ... # type: QTreeWidgetItem.ItemType + + @typing.overload + def __init__(self, type: int = ...) -> None: ... + @typing.overload + def __init__(self, strings: typing.Iterable[typing.Optional[str]], type: int = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional['QTreeWidget'], type: int = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional['QTreeWidget'], strings: typing.Iterable[typing.Optional[str]], type: int = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional['QTreeWidget'], preceding: typing.Optional['QTreeWidgetItem'], type: int = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional['QTreeWidgetItem'], type: int = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional['QTreeWidgetItem'], strings: typing.Iterable[typing.Optional[str]], type: int = ...) -> None: ... + @typing.overload + def __init__(self, parent: typing.Optional['QTreeWidgetItem'], preceding: typing.Optional['QTreeWidgetItem'], type: int = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QTreeWidgetItem') -> None: ... + + def __ge__(self, other: 'QTreeWidgetItem') -> bool: ... + def emitDataChanged(self) -> None: ... + def isDisabled(self) -> bool: ... + def setDisabled(self, disabled: bool) -> None: ... + def isFirstColumnSpanned(self) -> bool: ... + def setFirstColumnSpanned(self, aspan: bool) -> None: ... + def removeChild(self, child: typing.Optional['QTreeWidgetItem']) -> None: ... + def childIndicatorPolicy(self) -> 'QTreeWidgetItem.ChildIndicatorPolicy': ... + def setChildIndicatorPolicy(self, policy: 'QTreeWidgetItem.ChildIndicatorPolicy') -> None: ... + def isExpanded(self) -> bool: ... + def setExpanded(self, aexpand: bool) -> None: ... + def isHidden(self) -> bool: ... + def setHidden(self, ahide: bool) -> None: ... + def isSelected(self) -> bool: ... + def setSelected(self, aselect: bool) -> None: ... + def sortChildren(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... + def setForeground(self, column: int, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def foreground(self, column: int) -> QtGui.QBrush: ... + def setBackground(self, column: int, brush: typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]) -> None: ... + def background(self, column: int) -> QtGui.QBrush: ... + def takeChildren(self) -> typing.List['QTreeWidgetItem']: ... + def insertChildren(self, index: int, children: typing.Iterable['QTreeWidgetItem']) -> None: ... + def addChildren(self, children: typing.Iterable['QTreeWidgetItem']) -> None: ... + def setSizeHint(self, column: int, size: QtCore.QSize) -> None: ... + def sizeHint(self, column: int) -> QtCore.QSize: ... + def indexOfChild(self, achild: typing.Optional['QTreeWidgetItem']) -> int: ... + def setFont(self, column: int, afont: QtGui.QFont) -> None: ... + def setWhatsThis(self, column: int, awhatsThis: typing.Optional[str]) -> None: ... + def setToolTip(self, column: int, atoolTip: typing.Optional[str]) -> None: ... + def setStatusTip(self, column: int, astatusTip: typing.Optional[str]) -> None: ... + def setIcon(self, column: int, aicon: QtGui.QIcon) -> None: ... + def setText(self, column: int, atext: typing.Optional[str]) -> None: ... + def setFlags(self, aflags: typing.Union[QtCore.Qt.ItemFlags, QtCore.Qt.ItemFlag]) -> None: ... + def type(self) -> int: ... + def takeChild(self, index: int) -> typing.Optional['QTreeWidgetItem']: ... + def insertChild(self, index: int, child: typing.Optional['QTreeWidgetItem']) -> None: ... + def addChild(self, child: typing.Optional['QTreeWidgetItem']) -> None: ... + def columnCount(self) -> int: ... + def childCount(self) -> int: ... + def child(self, index: int) -> typing.Optional['QTreeWidgetItem']: ... + def parent(self) -> typing.Optional['QTreeWidgetItem']: ... + def write(self, out: QtCore.QDataStream) -> None: ... + def read(self, in_: QtCore.QDataStream) -> None: ... + def __lt__(self, other: 'QTreeWidgetItem') -> bool: ... + def setData(self, column: int, role: int, value: typing.Any) -> None: ... + def data(self, column: int, role: int) -> typing.Any: ... + def setCheckState(self, column: int, state: QtCore.Qt.CheckState) -> None: ... + def checkState(self, column: int) -> QtCore.Qt.CheckState: ... + def setTextAlignment(self, column: int, alignment: int) -> None: ... + def textAlignment(self, column: int) -> int: ... + def font(self, column: int) -> QtGui.QFont: ... + def whatsThis(self, column: int) -> str: ... + def toolTip(self, column: int) -> str: ... + def statusTip(self, column: int) -> str: ... + def icon(self, column: int) -> QtGui.QIcon: ... + def text(self, column: int) -> str: ... + def flags(self) -> QtCore.Qt.ItemFlags: ... + def treeWidget(self) -> typing.Optional['QTreeWidget']: ... + def clone(self) -> typing.Optional['QTreeWidgetItem']: ... + + +class QTreeWidget(QTreeView): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def isPersistentEditorOpen(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> bool: ... + def setSelectionModel(self, selectionModel: typing.Optional[QtCore.QItemSelectionModel]) -> None: ... + def removeItemWidget(self, item: typing.Optional[QTreeWidgetItem], column: int) -> None: ... + def itemBelow(self, item: typing.Optional[QTreeWidgetItem]) -> typing.Optional[QTreeWidgetItem]: ... + def itemAbove(self, item: typing.Optional[QTreeWidgetItem]) -> typing.Optional[QTreeWidgetItem]: ... + def setFirstItemColumnSpanned(self, item: typing.Optional[QTreeWidgetItem], span: bool) -> None: ... + def isFirstItemColumnSpanned(self, item: typing.Optional[QTreeWidgetItem]) -> bool: ... + def setHeaderLabel(self, alabel: typing.Optional[str]) -> None: ... + def invisibleRootItem(self) -> typing.Optional[QTreeWidgetItem]: ... + def dropEvent(self, event: typing.Optional[QtGui.QDropEvent]) -> None: ... + def event(self, e: typing.Optional[QtCore.QEvent]) -> bool: ... + def itemFromIndex(self, index: QtCore.QModelIndex) -> typing.Optional[QTreeWidgetItem]: ... + def indexFromItem(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> QtCore.QModelIndex: ... + def supportedDropActions(self) -> QtCore.Qt.DropActions: ... + def dropMimeData(self, parent: typing.Optional[QTreeWidgetItem], index: int, data: typing.Optional[QtCore.QMimeData], action: QtCore.Qt.DropAction) -> bool: ... + def mimeData(self, items: typing.Iterable[QTreeWidgetItem]) -> typing.Optional[QtCore.QMimeData]: ... + def mimeTypes(self) -> typing.List[str]: ... + itemSelectionChanged: typing.ClassVar[QtCore.pyqtSignal] + currentItemChanged: typing.ClassVar[QtCore.pyqtSignal] + itemCollapsed: typing.ClassVar[QtCore.pyqtSignal] + itemExpanded: typing.ClassVar[QtCore.pyqtSignal] + itemChanged: typing.ClassVar[QtCore.pyqtSignal] + itemEntered: typing.ClassVar[QtCore.pyqtSignal] + itemActivated: typing.ClassVar[QtCore.pyqtSignal] + itemDoubleClicked: typing.ClassVar[QtCore.pyqtSignal] + itemClicked: typing.ClassVar[QtCore.pyqtSignal] + itemPressed: typing.ClassVar[QtCore.pyqtSignal] + def clear(self) -> None: ... + def collapseItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... + def expandItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... + def scrollToItem(self, item: typing.Optional[QTreeWidgetItem], hint: QAbstractItemView.ScrollHint = ...) -> None: ... + def findItems(self, text: typing.Optional[str], flags: typing.Union[QtCore.Qt.MatchFlags, QtCore.Qt.MatchFlag], column: int = ...) -> typing.List[QTreeWidgetItem]: ... + def selectedItems(self) -> typing.List[QTreeWidgetItem]: ... + def setItemWidget(self, item: typing.Optional[QTreeWidgetItem], column: int, widget: typing.Optional[QWidget]) -> None: ... + def itemWidget(self, item: typing.Optional[QTreeWidgetItem], column: int) -> typing.Optional[QWidget]: ... + def closePersistentEditor(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> None: ... + def openPersistentEditor(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> None: ... + def editItem(self, item: typing.Optional[QTreeWidgetItem], column: int = ...) -> None: ... + def sortItems(self, column: int, order: QtCore.Qt.SortOrder) -> None: ... + def sortColumn(self) -> int: ... + def visualItemRect(self, item: typing.Optional[QTreeWidgetItem]) -> QtCore.QRect: ... + @typing.overload + def itemAt(self, p: QtCore.QPoint) -> typing.Optional[QTreeWidgetItem]: ... + @typing.overload + def itemAt(self, ax: int, ay: int) -> typing.Optional[QTreeWidgetItem]: ... + @typing.overload + def setCurrentItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... + @typing.overload + def setCurrentItem(self, item: typing.Optional[QTreeWidgetItem], column: int) -> None: ... + @typing.overload + def setCurrentItem(self, item: typing.Optional[QTreeWidgetItem], column: int, command: typing.Union[QtCore.QItemSelectionModel.SelectionFlags, QtCore.QItemSelectionModel.SelectionFlag]) -> None: ... + def currentColumn(self) -> int: ... + def currentItem(self) -> typing.Optional[QTreeWidgetItem]: ... + def setHeaderLabels(self, labels: typing.Iterable[typing.Optional[str]]) -> None: ... + def setHeaderItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... + def headerItem(self) -> typing.Optional[QTreeWidgetItem]: ... + def addTopLevelItems(self, items: typing.Iterable[QTreeWidgetItem]) -> None: ... + def insertTopLevelItems(self, index: int, items: typing.Iterable[QTreeWidgetItem]) -> None: ... + def indexOfTopLevelItem(self, item: typing.Optional[QTreeWidgetItem]) -> int: ... + def takeTopLevelItem(self, index: int) -> typing.Optional[QTreeWidgetItem]: ... + def addTopLevelItem(self, item: typing.Optional[QTreeWidgetItem]) -> None: ... + def insertTopLevelItem(self, index: int, item: typing.Optional[QTreeWidgetItem]) -> None: ... + def topLevelItemCount(self) -> int: ... + def topLevelItem(self, index: int) -> typing.Optional[QTreeWidgetItem]: ... + def setColumnCount(self, columns: int) -> None: ... + def columnCount(self) -> int: ... + + +class QTreeWidgetItemIterator(PyQt5.sipsimplewrapper): + + class IteratorFlag(int): + All = ... # type: QTreeWidgetItemIterator.IteratorFlag + Hidden = ... # type: QTreeWidgetItemIterator.IteratorFlag + NotHidden = ... # type: QTreeWidgetItemIterator.IteratorFlag + Selected = ... # type: QTreeWidgetItemIterator.IteratorFlag + Unselected = ... # type: QTreeWidgetItemIterator.IteratorFlag + Selectable = ... # type: QTreeWidgetItemIterator.IteratorFlag + NotSelectable = ... # type: QTreeWidgetItemIterator.IteratorFlag + DragEnabled = ... # type: QTreeWidgetItemIterator.IteratorFlag + DragDisabled = ... # type: QTreeWidgetItemIterator.IteratorFlag + DropEnabled = ... # type: QTreeWidgetItemIterator.IteratorFlag + DropDisabled = ... # type: QTreeWidgetItemIterator.IteratorFlag + HasChildren = ... # type: QTreeWidgetItemIterator.IteratorFlag + NoChildren = ... # type: QTreeWidgetItemIterator.IteratorFlag + Checked = ... # type: QTreeWidgetItemIterator.IteratorFlag + NotChecked = ... # type: QTreeWidgetItemIterator.IteratorFlag + Enabled = ... # type: QTreeWidgetItemIterator.IteratorFlag + Disabled = ... # type: QTreeWidgetItemIterator.IteratorFlag + Editable = ... # type: QTreeWidgetItemIterator.IteratorFlag + NotEditable = ... # type: QTreeWidgetItemIterator.IteratorFlag + UserFlag = ... # type: QTreeWidgetItemIterator.IteratorFlag + + class IteratorFlags(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QTreeWidgetItemIterator.IteratorFlags', 'QTreeWidgetItemIterator.IteratorFlag']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QTreeWidgetItemIterator.IteratorFlags', 'QTreeWidgetItemIterator.IteratorFlag']) -> 'QTreeWidgetItemIterator.IteratorFlags': ... + def __xor__(self, f: typing.Union['QTreeWidgetItemIterator.IteratorFlags', 'QTreeWidgetItemIterator.IteratorFlag']) -> 'QTreeWidgetItemIterator.IteratorFlags': ... + def __ior__(self, f: typing.Union['QTreeWidgetItemIterator.IteratorFlags', 'QTreeWidgetItemIterator.IteratorFlag']) -> 'QTreeWidgetItemIterator.IteratorFlags': ... + def __or__(self, f: typing.Union['QTreeWidgetItemIterator.IteratorFlags', 'QTreeWidgetItemIterator.IteratorFlag']) -> 'QTreeWidgetItemIterator.IteratorFlags': ... + def __iand__(self, f: typing.Union['QTreeWidgetItemIterator.IteratorFlags', 'QTreeWidgetItemIterator.IteratorFlag']) -> 'QTreeWidgetItemIterator.IteratorFlags': ... + def __and__(self, f: typing.Union['QTreeWidgetItemIterator.IteratorFlags', 'QTreeWidgetItemIterator.IteratorFlag']) -> 'QTreeWidgetItemIterator.IteratorFlags': ... + def __invert__(self) -> 'QTreeWidgetItemIterator.IteratorFlags': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + @typing.overload + def __init__(self, it: 'QTreeWidgetItemIterator') -> None: ... + @typing.overload + def __init__(self, widget: typing.Optional[QTreeWidget], flags: 'QTreeWidgetItemIterator.IteratorFlags' = ...) -> None: ... + @typing.overload + def __init__(self, item: typing.Optional[QTreeWidgetItem], flags: 'QTreeWidgetItemIterator.IteratorFlags' = ...) -> None: ... + + def __isub__(self, n: int) -> 'QTreeWidgetItemIterator': ... + def __iadd__(self, n: int) -> 'QTreeWidgetItemIterator': ... + def value(self) -> typing.Optional[QTreeWidgetItem]: ... + + +class QUndoGroup(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + undoTextChanged: typing.ClassVar[QtCore.pyqtSignal] + redoTextChanged: typing.ClassVar[QtCore.pyqtSignal] + indexChanged: typing.ClassVar[QtCore.pyqtSignal] + cleanChanged: typing.ClassVar[QtCore.pyqtSignal] + canUndoChanged: typing.ClassVar[QtCore.pyqtSignal] + canRedoChanged: typing.ClassVar[QtCore.pyqtSignal] + activeStackChanged: typing.ClassVar[QtCore.pyqtSignal] + def undo(self) -> None: ... + def setActiveStack(self, stack: typing.Optional['QUndoStack']) -> None: ... + def redo(self) -> None: ... + def isClean(self) -> bool: ... + def redoText(self) -> str: ... + def undoText(self) -> str: ... + def canRedo(self) -> bool: ... + def canUndo(self) -> bool: ... + def createUndoAction(self, parent: typing.Optional[QtCore.QObject], prefix: typing.Optional[str] = ...) -> typing.Optional[QAction]: ... + def createRedoAction(self, parent: typing.Optional[QtCore.QObject], prefix: typing.Optional[str] = ...) -> typing.Optional[QAction]: ... + def activeStack(self) -> typing.Optional['QUndoStack']: ... + def stacks(self) -> typing.List['QUndoStack']: ... + def removeStack(self, stack: typing.Optional['QUndoStack']) -> None: ... + def addStack(self, stack: typing.Optional['QUndoStack']) -> None: ... + + +class QUndoCommand(PyQt5.sip.wrapper): + + @typing.overload + def __init__(self, parent: typing.Optional['QUndoCommand'] = ...) -> None: ... + @typing.overload + def __init__(self, text: typing.Optional[str], parent: typing.Optional['QUndoCommand'] = ...) -> None: ... + + def setObsolete(self, obsolete: bool) -> None: ... + def isObsolete(self) -> bool: ... + def actionText(self) -> str: ... + def child(self, index: int) -> typing.Optional['QUndoCommand']: ... + def childCount(self) -> int: ... + def undo(self) -> None: ... + def text(self) -> str: ... + def setText(self, text: typing.Optional[str]) -> None: ... + def redo(self) -> None: ... + def mergeWith(self, other: typing.Optional['QUndoCommand']) -> bool: ... + def id(self) -> int: ... + + +class QUndoStack(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def command(self, index: int) -> typing.Optional[QUndoCommand]: ... + def undoLimit(self) -> int: ... + def setUndoLimit(self, limit: int) -> None: ... + undoTextChanged: typing.ClassVar[QtCore.pyqtSignal] + redoTextChanged: typing.ClassVar[QtCore.pyqtSignal] + indexChanged: typing.ClassVar[QtCore.pyqtSignal] + cleanChanged: typing.ClassVar[QtCore.pyqtSignal] + canUndoChanged: typing.ClassVar[QtCore.pyqtSignal] + canRedoChanged: typing.ClassVar[QtCore.pyqtSignal] + def resetClean(self) -> None: ... + def undo(self) -> None: ... + def setIndex(self, idx: int) -> None: ... + def setClean(self) -> None: ... + def setActive(self, active: bool = ...) -> None: ... + def redo(self) -> None: ... + def endMacro(self) -> None: ... + def beginMacro(self, text: typing.Optional[str]) -> None: ... + def cleanIndex(self) -> int: ... + def isClean(self) -> bool: ... + def isActive(self) -> bool: ... + def createRedoAction(self, parent: typing.Optional[QtCore.QObject], prefix: typing.Optional[str] = ...) -> typing.Optional[QAction]: ... + def createUndoAction(self, parent: typing.Optional[QtCore.QObject], prefix: typing.Optional[str] = ...) -> typing.Optional[QAction]: ... + def text(self, idx: int) -> str: ... + def index(self) -> int: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def redoText(self) -> str: ... + def undoText(self) -> str: ... + def canRedo(self) -> bool: ... + def canUndo(self) -> bool: ... + def push(self, cmd: typing.Optional[QUndoCommand]) -> None: ... + def clear(self) -> None: ... + + +class QUndoView(QListView): + + @typing.overload + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, stack: typing.Optional[QUndoStack], parent: typing.Optional[QWidget] = ...) -> None: ... + @typing.overload + def __init__(self, group: typing.Optional[QUndoGroup], parent: typing.Optional[QWidget] = ...) -> None: ... + + def setGroup(self, group: typing.Optional[QUndoGroup]) -> None: ... + def setStack(self, stack: typing.Optional[QUndoStack]) -> None: ... + def cleanIcon(self) -> QtGui.QIcon: ... + def setCleanIcon(self, icon: QtGui.QIcon) -> None: ... + def emptyLabel(self) -> str: ... + def setEmptyLabel(self, label: typing.Optional[str]) -> None: ... + def group(self) -> typing.Optional[QUndoGroup]: ... + def stack(self) -> typing.Optional[QUndoStack]: ... + + +class QWhatsThis(PyQt5.sipsimplewrapper): + + def __init__(self, a0: 'QWhatsThis') -> None: ... + + @staticmethod + def createAction(parent: typing.Optional[QtCore.QObject] = ...) -> typing.Optional[QAction]: ... + @staticmethod + def hideText() -> None: ... + @staticmethod + def showText(pos: QtCore.QPoint, text: typing.Optional[str], widget: typing.Optional[QWidget] = ...) -> None: ... + @staticmethod + def leaveWhatsThisMode() -> None: ... + @staticmethod + def inWhatsThisMode() -> bool: ... + @staticmethod + def enterWhatsThisMode() -> None: ... + + +class QWidgetAction(QAction): + + def __init__(self, parent: typing.Optional[QtCore.QObject]) -> None: ... + + def createdWidgets(self) -> typing.List[QWidget]: ... + def deleteWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def createWidget(self, parent: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... + def eventFilter(self, a0: typing.Optional[QtCore.QObject], a1: typing.Optional[QtCore.QEvent]) -> bool: ... + def event(self, a0: typing.Optional[QtCore.QEvent]) -> bool: ... + def releaseWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def requestWidget(self, parent: typing.Optional[QWidget]) -> typing.Optional[QWidget]: ... + def defaultWidget(self) -> typing.Optional[QWidget]: ... + def setDefaultWidget(self, w: typing.Optional[QWidget]) -> None: ... + + +class QWizard(QDialog): + + class WizardOption(int): + IndependentPages = ... # type: QWizard.WizardOption + IgnoreSubTitles = ... # type: QWizard.WizardOption + ExtendedWatermarkPixmap = ... # type: QWizard.WizardOption + NoDefaultButton = ... # type: QWizard.WizardOption + NoBackButtonOnStartPage = ... # type: QWizard.WizardOption + NoBackButtonOnLastPage = ... # type: QWizard.WizardOption + DisabledBackButtonOnLastPage = ... # type: QWizard.WizardOption + HaveNextButtonOnLastPage = ... # type: QWizard.WizardOption + HaveFinishButtonOnEarlyPages = ... # type: QWizard.WizardOption + NoCancelButton = ... # type: QWizard.WizardOption + CancelButtonOnLeft = ... # type: QWizard.WizardOption + HaveHelpButton = ... # type: QWizard.WizardOption + HelpButtonOnRight = ... # type: QWizard.WizardOption + HaveCustomButton1 = ... # type: QWizard.WizardOption + HaveCustomButton2 = ... # type: QWizard.WizardOption + HaveCustomButton3 = ... # type: QWizard.WizardOption + NoCancelButtonOnLastPage = ... # type: QWizard.WizardOption + + class WizardStyle(int): + ClassicStyle = ... # type: QWizard.WizardStyle + ModernStyle = ... # type: QWizard.WizardStyle + MacStyle = ... # type: QWizard.WizardStyle + AeroStyle = ... # type: QWizard.WizardStyle + + class WizardPixmap(int): + WatermarkPixmap = ... # type: QWizard.WizardPixmap + LogoPixmap = ... # type: QWizard.WizardPixmap + BannerPixmap = ... # type: QWizard.WizardPixmap + BackgroundPixmap = ... # type: QWizard.WizardPixmap + + class WizardButton(int): + BackButton = ... # type: QWizard.WizardButton + NextButton = ... # type: QWizard.WizardButton + CommitButton = ... # type: QWizard.WizardButton + FinishButton = ... # type: QWizard.WizardButton + CancelButton = ... # type: QWizard.WizardButton + HelpButton = ... # type: QWizard.WizardButton + CustomButton1 = ... # type: QWizard.WizardButton + CustomButton2 = ... # type: QWizard.WizardButton + CustomButton3 = ... # type: QWizard.WizardButton + Stretch = ... # type: QWizard.WizardButton + + class WizardOptions(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, f: typing.Union['QWizard.WizardOptions', 'QWizard.WizardOption']) -> None: ... + + def __hash__(self) -> int: ... + def __bool__(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def __ixor__(self, f: typing.Union['QWizard.WizardOptions', 'QWizard.WizardOption']) -> 'QWizard.WizardOptions': ... + def __xor__(self, f: typing.Union['QWizard.WizardOptions', 'QWizard.WizardOption']) -> 'QWizard.WizardOptions': ... + def __ior__(self, f: typing.Union['QWizard.WizardOptions', 'QWizard.WizardOption']) -> 'QWizard.WizardOptions': ... + def __or__(self, f: typing.Union['QWizard.WizardOptions', 'QWizard.WizardOption']) -> 'QWizard.WizardOptions': ... + def __iand__(self, f: typing.Union['QWizard.WizardOptions', 'QWizard.WizardOption']) -> 'QWizard.WizardOptions': ... + def __and__(self, f: typing.Union['QWizard.WizardOptions', 'QWizard.WizardOption']) -> 'QWizard.WizardOptions': ... + def __invert__(self) -> 'QWizard.WizardOptions': ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + def __init__(self, parent: typing.Optional[QWidget] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None: ... + + def visitedIds(self) -> typing.List[int]: ... + pageRemoved: typing.ClassVar[QtCore.pyqtSignal] + pageAdded: typing.ClassVar[QtCore.pyqtSignal] + def sideWidget(self) -> typing.Optional[QWidget]: ... + def setSideWidget(self, widget: typing.Optional[QWidget]) -> None: ... + def pageIds(self) -> typing.List[int]: ... + def removePage(self, id: int) -> None: ... + def cleanupPage(self, id: int) -> None: ... + def initializePage(self, id: int) -> None: ... + def done(self, result: int) -> None: ... + def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: ... + def resizeEvent(self, event: typing.Optional[QtGui.QResizeEvent]) -> None: ... + def event(self, event: typing.Optional[QtCore.QEvent]) -> bool: ... + def restart(self) -> None: ... + def next(self) -> None: ... + def back(self) -> None: ... + customButtonClicked: typing.ClassVar[QtCore.pyqtSignal] + helpRequested: typing.ClassVar[QtCore.pyqtSignal] + currentIdChanged: typing.ClassVar[QtCore.pyqtSignal] + def sizeHint(self) -> QtCore.QSize: ... + def setVisible(self, visible: bool) -> None: ... + def setDefaultProperty(self, className: typing.Optional[str], property: typing.Optional[str], changedSignal: PYQT_SIGNAL) -> None: ... + def pixmap(self, which: 'QWizard.WizardPixmap') -> QtGui.QPixmap: ... + def setPixmap(self, which: 'QWizard.WizardPixmap', pixmap: QtGui.QPixmap) -> None: ... + def subTitleFormat(self) -> QtCore.Qt.TextFormat: ... + def setSubTitleFormat(self, format: QtCore.Qt.TextFormat) -> None: ... + def titleFormat(self) -> QtCore.Qt.TextFormat: ... + def setTitleFormat(self, format: QtCore.Qt.TextFormat) -> None: ... + def button(self, which: 'QWizard.WizardButton') -> typing.Optional[QAbstractButton]: ... + def setButton(self, which: 'QWizard.WizardButton', button: typing.Optional[QAbstractButton]) -> None: ... + def setButtonLayout(self, layout: typing.Iterable['QWizard.WizardButton']) -> None: ... + def buttonText(self, which: 'QWizard.WizardButton') -> str: ... + def setButtonText(self, which: 'QWizard.WizardButton', text: typing.Optional[str]) -> None: ... + def options(self) -> 'QWizard.WizardOptions': ... + def setOptions(self, options: typing.Union['QWizard.WizardOptions', 'QWizard.WizardOption']) -> None: ... + def testOption(self, option: 'QWizard.WizardOption') -> bool: ... + def setOption(self, option: 'QWizard.WizardOption', on: bool = ...) -> None: ... + def wizardStyle(self) -> 'QWizard.WizardStyle': ... + def setWizardStyle(self, style: 'QWizard.WizardStyle') -> None: ... + def field(self, name: typing.Optional[str]) -> typing.Any: ... + def setField(self, name: typing.Optional[str], value: typing.Any) -> None: ... + def nextId(self) -> int: ... + def validateCurrentPage(self) -> bool: ... + def currentId(self) -> int: ... + def currentPage(self) -> typing.Optional['QWizardPage']: ... + def startId(self) -> int: ... + def setStartId(self, id: int) -> None: ... + def visitedPages(self) -> typing.List[int]: ... + def hasVisitedPage(self, id: int) -> bool: ... + def page(self, id: int) -> typing.Optional['QWizardPage']: ... + def setPage(self, id: int, page: typing.Optional['QWizardPage']) -> None: ... + def addPage(self, page: typing.Optional['QWizardPage']) -> int: ... + + +class QWizardPage(QWidget): + + def __init__(self, parent: typing.Optional[QWidget] = ...) -> None: ... + + def wizard(self) -> typing.Optional[QWizard]: ... + def registerField(self, name: typing.Optional[str], widget: typing.Optional[QWidget], property: typing.Optional[str] = ..., changedSignal: PYQT_SIGNAL = ...) -> None: ... + def field(self, name: typing.Optional[str]) -> typing.Any: ... + def setField(self, name: typing.Optional[str], value: typing.Any) -> None: ... + completeChanged: typing.ClassVar[QtCore.pyqtSignal] + def nextId(self) -> int: ... + def isComplete(self) -> bool: ... + def validatePage(self) -> bool: ... + def cleanupPage(self) -> None: ... + def initializePage(self) -> None: ... + def buttonText(self, which: QWizard.WizardButton) -> str: ... + def setButtonText(self, which: QWizard.WizardButton, text: typing.Optional[str]) -> None: ... + def isCommitPage(self) -> bool: ... + def setCommitPage(self, commitPage: bool) -> None: ... + def isFinalPage(self) -> bool: ... + def setFinalPage(self, finalPage: bool) -> None: ... + def pixmap(self, which: QWizard.WizardPixmap) -> QtGui.QPixmap: ... + def setPixmap(self, which: QWizard.WizardPixmap, pixmap: QtGui.QPixmap) -> None: ... + def subTitle(self) -> str: ... + def setSubTitle(self, subTitle: typing.Optional[str]) -> None: ... + def title(self) -> str: ... + def setTitle(self, title: typing.Optional[str]) -> None: ... + + +QWIDGETSIZE_MAX = ... # type: int +qApp = ... # type: QApplication + + +def qDrawBorderPixmap(painter: typing.Optional[QtGui.QPainter], target: QtCore.QRect, margins: QtCore.QMargins, pixmap: QtGui.QPixmap) -> None: ... +@typing.overload +def qDrawPlainRect(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, a5: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawPlainRect(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, a2: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawWinPanel(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, pal: QtGui.QPalette, sunken: bool = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawWinPanel(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, pal: QtGui.QPalette, sunken: bool = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawWinButton(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, pal: QtGui.QPalette, sunken: bool = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawWinButton(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, pal: QtGui.QPalette, sunken: bool = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawShadePanel(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawShadePanel(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawShadeRect(p: typing.Optional[QtGui.QPainter], x: int, y: int, w: int, h: int, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., midLineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawShadeRect(p: typing.Optional[QtGui.QPainter], r: QtCore.QRect, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., midLineWidth: int = ..., fill: typing.Optional[typing.Union[QtGui.QBrush, typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor], QtGui.QGradient]] = ...) -> None: ... +@typing.overload +def qDrawShadeLine(p: typing.Optional[QtGui.QPainter], x1: int, y1: int, x2: int, y2: int, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., midLineWidth: int = ...) -> None: ... +@typing.overload +def qDrawShadeLine(p: typing.Optional[QtGui.QPainter], p1: QtCore.QPoint, p2: QtCore.QPoint, pal: QtGui.QPalette, sunken: bool = ..., lineWidth: int = ..., midLineWidth: int = ...) -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtX11Extras.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtX11Extras.abi3.so new file mode 100644 index 0000000..3472dff Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtX11Extras.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtX11Extras.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtX11Extras.pyi new file mode 100644 index 0000000..1443d77 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtX11Extras.pyi @@ -0,0 +1,74 @@ +# The PEP 484 type hints stub file for the QtX11Extras module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class Display(PyQt5.sipsimplewrapper): ... + + +class xcb_connection_t(PyQt5.sipsimplewrapper): ... + + +class QX11Info(PyQt5.sipsimplewrapper): + + def __init__(self, a0: 'QX11Info') -> None: ... + + @staticmethod + def connection() -> typing.Optional[xcb_connection_t]: ... + @staticmethod + def display() -> typing.Optional[Display]: ... + @staticmethod + def setNextStartupId(id: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + @staticmethod + def nextStartupId() -> QtCore.QByteArray: ... + @staticmethod + def getTimestamp() -> int: ... + @staticmethod + def setAppUserTime(time: int) -> None: ... + @staticmethod + def setAppTime(time: int) -> None: ... + @staticmethod + def appUserTime() -> int: ... + @staticmethod + def appTime() -> int: ... + @staticmethod + def appScreen() -> int: ... + @staticmethod + def appRootWindow(screen: int = ...) -> int: ... + @staticmethod + def appDpiY(screen: int = ...) -> int: ... + @staticmethod + def appDpiX(screen: int = ...) -> int: ... + @staticmethod + def isPlatformX11() -> bool: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtXml.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtXml.abi3.so new file mode 100644 index 0000000..9fcf88b Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtXml.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtXml.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtXml.pyi new file mode 100644 index 0000000..30f5f07 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtXml.pyi @@ -0,0 +1,710 @@ +# The PEP 484 type hints stub file for the QtXml module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QDomImplementation(PyQt5.sipsimplewrapper): + + class InvalidDataPolicy(int): + AcceptInvalidChars = ... # type: QDomImplementation.InvalidDataPolicy + DropInvalidChars = ... # type: QDomImplementation.InvalidDataPolicy + ReturnNullNode = ... # type: QDomImplementation.InvalidDataPolicy + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDomImplementation') -> None: ... + + def isNull(self) -> bool: ... + @staticmethod + def setInvalidDataPolicy(policy: 'QDomImplementation.InvalidDataPolicy') -> None: ... + @staticmethod + def invalidDataPolicy() -> 'QDomImplementation.InvalidDataPolicy': ... + def createDocument(self, nsURI: typing.Optional[str], qName: typing.Optional[str], doctype: 'QDomDocumentType') -> 'QDomDocument': ... + def createDocumentType(self, qName: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str]) -> 'QDomDocumentType': ... + def hasFeature(self, feature: typing.Optional[str], version: typing.Optional[str]) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QDomNode(PyQt5.sipsimplewrapper): + + class EncodingPolicy(int): + EncodingFromDocument = ... # type: QDomNode.EncodingPolicy + EncodingFromTextStream = ... # type: QDomNode.EncodingPolicy + + class NodeType(int): + ElementNode = ... # type: QDomNode.NodeType + AttributeNode = ... # type: QDomNode.NodeType + TextNode = ... # type: QDomNode.NodeType + CDATASectionNode = ... # type: QDomNode.NodeType + EntityReferenceNode = ... # type: QDomNode.NodeType + EntityNode = ... # type: QDomNode.NodeType + ProcessingInstructionNode = ... # type: QDomNode.NodeType + CommentNode = ... # type: QDomNode.NodeType + DocumentNode = ... # type: QDomNode.NodeType + DocumentTypeNode = ... # type: QDomNode.NodeType + DocumentFragmentNode = ... # type: QDomNode.NodeType + NotationNode = ... # type: QDomNode.NodeType + BaseNode = ... # type: QDomNode.NodeType + CharacterDataNode = ... # type: QDomNode.NodeType + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDomNode') -> None: ... + + def columnNumber(self) -> int: ... + def lineNumber(self) -> int: ... + def nextSiblingElement(self, taName: typing.Optional[str] = ...) -> 'QDomElement': ... + def previousSiblingElement(self, tagName: typing.Optional[str] = ...) -> 'QDomElement': ... + def lastChildElement(self, tagName: typing.Optional[str] = ...) -> 'QDomElement': ... + def firstChildElement(self, tagName: typing.Optional[str] = ...) -> 'QDomElement': ... + def save(self, a0: QtCore.QTextStream, a1: int, a2: 'QDomNode.EncodingPolicy' = ...) -> None: ... + def toComment(self) -> 'QDomComment': ... + def toCharacterData(self) -> 'QDomCharacterData': ... + def toProcessingInstruction(self) -> 'QDomProcessingInstruction': ... + def toNotation(self) -> 'QDomNotation': ... + def toEntity(self) -> 'QDomEntity': ... + def toText(self) -> 'QDomText': ... + def toEntityReference(self) -> 'QDomEntityReference': ... + def toElement(self) -> 'QDomElement': ... + def toDocumentType(self) -> 'QDomDocumentType': ... + def toDocument(self) -> 'QDomDocument': ... + def toDocumentFragment(self) -> 'QDomDocumentFragment': ... + def toCDATASection(self) -> 'QDomCDATASection': ... + def toAttr(self) -> 'QDomAttr': ... + def clear(self) -> None: ... + def isNull(self) -> bool: ... + def namedItem(self, name: typing.Optional[str]) -> 'QDomNode': ... + def isComment(self) -> bool: ... + def isCharacterData(self) -> bool: ... + def isProcessingInstruction(self) -> bool: ... + def isNotation(self) -> bool: ... + def isEntity(self) -> bool: ... + def isText(self) -> bool: ... + def isEntityReference(self) -> bool: ... + def isElement(self) -> bool: ... + def isDocumentType(self) -> bool: ... + def isDocument(self) -> bool: ... + def isDocumentFragment(self) -> bool: ... + def isCDATASection(self) -> bool: ... + def isAttr(self) -> bool: ... + def setPrefix(self, pre: typing.Optional[str]) -> None: ... + def prefix(self) -> str: ... + def setNodeValue(self, a0: typing.Optional[str]) -> None: ... + def nodeValue(self) -> str: ... + def hasAttributes(self) -> bool: ... + def localName(self) -> str: ... + def namespaceURI(self) -> str: ... + def ownerDocument(self) -> 'QDomDocument': ... + def attributes(self) -> 'QDomNamedNodeMap': ... + def nextSibling(self) -> 'QDomNode': ... + def previousSibling(self) -> 'QDomNode': ... + def lastChild(self) -> 'QDomNode': ... + def firstChild(self) -> 'QDomNode': ... + def childNodes(self) -> 'QDomNodeList': ... + def parentNode(self) -> 'QDomNode': ... + def nodeType(self) -> 'QDomNode.NodeType': ... + def nodeName(self) -> str: ... + def isSupported(self, feature: typing.Optional[str], version: typing.Optional[str]) -> bool: ... + def normalize(self) -> None: ... + def cloneNode(self, deep: bool = ...) -> 'QDomNode': ... + def hasChildNodes(self) -> bool: ... + def appendChild(self, newChild: 'QDomNode') -> 'QDomNode': ... + def removeChild(self, oldChild: 'QDomNode') -> 'QDomNode': ... + def replaceChild(self, newChild: 'QDomNode', oldChild: 'QDomNode') -> 'QDomNode': ... + def insertAfter(self, newChild: 'QDomNode', refChild: 'QDomNode') -> 'QDomNode': ... + def insertBefore(self, newChild: 'QDomNode', refChild: 'QDomNode') -> 'QDomNode': ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QDomNodeList(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDomNodeList') -> None: ... + + def isEmpty(self) -> bool: ... + def size(self) -> int: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def length(self) -> int: ... + def at(self, index: int) -> QDomNode: ... + def item(self, index: int) -> QDomNode: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QDomDocumentType(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomDocumentType') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + def internalSubset(self) -> str: ... + def systemId(self) -> str: ... + def publicId(self) -> str: ... + def notations(self) -> 'QDomNamedNodeMap': ... + def entities(self) -> 'QDomNamedNodeMap': ... + def name(self) -> str: ... + + +class QDomDocument(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def __init__(self, doctype: QDomDocumentType) -> None: ... + @typing.overload + def __init__(self, x: 'QDomDocument') -> None: ... + + def toByteArray(self, indent: int = ...) -> QtCore.QByteArray: ... + def toString(self, indent: int = ...) -> str: ... + @typing.overload + def setContent(self, text: typing.Union[QtCore.QByteArray, bytes, bytearray], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContent(self, text: typing.Optional[str], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContent(self, dev: typing.Optional[QtCore.QIODevice], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContent(self, source: typing.Optional['QXmlInputSource'], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContent(self, text: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContent(self, text: typing.Optional[str]) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContent(self, dev: typing.Optional[QtCore.QIODevice]) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContent(self, source: typing.Optional['QXmlInputSource'], reader: typing.Optional['QXmlReader']) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + @typing.overload + def setContent(self, reader: typing.Optional[QtCore.QXmlStreamReader], namespaceProcessing: bool) -> typing.Tuple[bool, typing.Optional[str], typing.Optional[int], typing.Optional[int]]: ... + def nodeType(self) -> QDomNode.NodeType: ... + def documentElement(self) -> 'QDomElement': ... + def implementation(self) -> QDomImplementation: ... + def doctype(self) -> QDomDocumentType: ... + def elementById(self, elementId: typing.Optional[str]) -> 'QDomElement': ... + def elementsByTagNameNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomNodeList: ... + def createAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str]) -> 'QDomAttr': ... + def createElementNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str]) -> 'QDomElement': ... + def importNode(self, importedNode: QDomNode, deep: bool) -> QDomNode: ... + def elementsByTagName(self, tagname: typing.Optional[str]) -> QDomNodeList: ... + def createEntityReference(self, name: typing.Optional[str]) -> 'QDomEntityReference': ... + def createAttribute(self, name: typing.Optional[str]) -> 'QDomAttr': ... + def createProcessingInstruction(self, target: typing.Optional[str], data: typing.Optional[str]) -> 'QDomProcessingInstruction': ... + def createCDATASection(self, data: typing.Optional[str]) -> 'QDomCDATASection': ... + def createComment(self, data: typing.Optional[str]) -> 'QDomComment': ... + def createTextNode(self, data: typing.Optional[str]) -> 'QDomText': ... + def createDocumentFragment(self) -> 'QDomDocumentFragment': ... + def createElement(self, tagName: typing.Optional[str]) -> 'QDomElement': ... + + +class QDomNamedNodeMap(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QDomNamedNodeMap') -> None: ... + + def contains(self, name: typing.Optional[str]) -> bool: ... + def isEmpty(self) -> bool: ... + def size(self) -> int: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def length(self) -> int: ... + def removeNamedItemNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomNode: ... + def setNamedItemNS(self, newNode: QDomNode) -> QDomNode: ... + def namedItemNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomNode: ... + def item(self, index: int) -> QDomNode: ... + def removeNamedItem(self, name: typing.Optional[str]) -> QDomNode: ... + def setNamedItem(self, newNode: QDomNode) -> QDomNode: ... + def namedItem(self, name: typing.Optional[str]) -> QDomNode: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QDomDocumentFragment(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomDocumentFragment') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + + +class QDomCharacterData(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomCharacterData') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + def setData(self, a0: typing.Optional[str]) -> None: ... + def data(self) -> str: ... + def length(self) -> int: ... + def replaceData(self, offset: int, count: int, arg: typing.Optional[str]) -> None: ... + def deleteData(self, offset: int, count: int) -> None: ... + def insertData(self, offset: int, arg: typing.Optional[str]) -> None: ... + def appendData(self, arg: typing.Optional[str]) -> None: ... + def substringData(self, offset: int, count: int) -> str: ... + + +class QDomAttr(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomAttr') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + def setValue(self, a0: typing.Optional[str]) -> None: ... + def value(self) -> str: ... + def ownerElement(self) -> 'QDomElement': ... + def specified(self) -> bool: ... + def name(self) -> str: ... + + +class QDomElement(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomElement') -> None: ... + + def text(self) -> str: ... + def nodeType(self) -> QDomNode.NodeType: ... + def attributes(self) -> QDomNamedNodeMap: ... + def setTagName(self, name: typing.Optional[str]) -> None: ... + def tagName(self) -> str: ... + def hasAttributeNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> bool: ... + def elementsByTagNameNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomNodeList: ... + def setAttributeNodeNS(self, newAttr: QDomAttr) -> QDomAttr: ... + def attributeNodeNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> QDomAttr: ... + def removeAttributeNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str]) -> None: ... + @typing.overload + def setAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def setAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str], value: int) -> None: ... + @typing.overload + def setAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str], value: int) -> None: ... + @typing.overload + def setAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str], value: float) -> None: ... + @typing.overload + def setAttributeNS(self, nsURI: typing.Optional[str], qName: typing.Optional[str], value: int) -> None: ... + def attributeNS(self, nsURI: typing.Optional[str], localName: typing.Optional[str], defaultValue: typing.Optional[str] = ...) -> str: ... + def hasAttribute(self, name: typing.Optional[str]) -> bool: ... + def elementsByTagName(self, tagname: typing.Optional[str]) -> QDomNodeList: ... + def removeAttributeNode(self, oldAttr: QDomAttr) -> QDomAttr: ... + def setAttributeNode(self, newAttr: QDomAttr) -> QDomAttr: ... + def attributeNode(self, name: typing.Optional[str]) -> QDomAttr: ... + def removeAttribute(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def setAttribute(self, name: typing.Optional[str], value: typing.Optional[str]) -> None: ... + @typing.overload + def setAttribute(self, name: typing.Optional[str], value: int) -> None: ... + @typing.overload + def setAttribute(self, name: typing.Optional[str], value: int) -> None: ... + @typing.overload + def setAttribute(self, name: typing.Optional[str], value: float) -> None: ... + @typing.overload + def setAttribute(self, name: typing.Optional[str], value: int) -> None: ... + def attribute(self, name: typing.Optional[str], defaultValue: typing.Optional[str] = ...) -> str: ... + + +class QDomText(QDomCharacterData): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomText') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + def splitText(self, offset: int) -> 'QDomText': ... + + +class QDomComment(QDomCharacterData): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomComment') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + + +class QDomCDATASection(QDomText): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomCDATASection') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + + +class QDomNotation(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomNotation') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + def systemId(self) -> str: ... + def publicId(self) -> str: ... + + +class QDomEntity(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomEntity') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + def notationName(self) -> str: ... + def systemId(self) -> str: ... + def publicId(self) -> str: ... + + +class QDomEntityReference(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomEntityReference') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + + +class QDomProcessingInstruction(QDomNode): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, x: 'QDomProcessingInstruction') -> None: ... + + def nodeType(self) -> QDomNode.NodeType: ... + def setData(self, d: typing.Optional[str]) -> None: ... + def data(self) -> str: ... + def target(self) -> str: ... + + +class QXmlNamespaceSupport(PyQt5.sipsimplewrapper): + + def __init__(self) -> None: ... + + def reset(self) -> None: ... + def popContext(self) -> None: ... + def pushContext(self) -> None: ... + @typing.overload + def prefixes(self) -> typing.List[str]: ... + @typing.overload + def prefixes(self, a0: typing.Optional[str]) -> typing.List[str]: ... + def processName(self, a0: typing.Optional[str], a1: bool, a2: typing.Optional[str], a3: typing.Optional[str]) -> None: ... + def splitName(self, a0: typing.Optional[str], a1: typing.Optional[str], a2: typing.Optional[str]) -> None: ... + def uri(self, a0: typing.Optional[str]) -> str: ... + def prefix(self, a0: typing.Optional[str]) -> str: ... + def setPrefix(self, a0: typing.Optional[str], a1: typing.Optional[str]) -> None: ... + + +class QXmlAttributes(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlAttributes') -> None: ... + + def swap(self, other: 'QXmlAttributes') -> None: ... + def __len__(self) -> int: ... + def count(self) -> int: ... + def append(self, qName: typing.Optional[str], uri: typing.Optional[str], localPart: typing.Optional[str], value: typing.Optional[str]) -> None: ... + def clear(self) -> None: ... + @typing.overload + def value(self, index: int) -> str: ... + @typing.overload + def value(self, qName: typing.Optional[str]) -> str: ... + @typing.overload + def value(self, uri: typing.Optional[str], localName: typing.Optional[str]) -> str: ... + @typing.overload + def type(self, index: int) -> str: ... + @typing.overload + def type(self, qName: typing.Optional[str]) -> str: ... + @typing.overload + def type(self, uri: typing.Optional[str], localName: typing.Optional[str]) -> str: ... + def uri(self, index: int) -> str: ... + def qName(self, index: int) -> str: ... + def localName(self, index: int) -> str: ... + def length(self) -> int: ... + @typing.overload + def index(self, qName: typing.Optional[str]) -> int: ... + @typing.overload + def index(self, uri: typing.Optional[str], localPart: typing.Optional[str]) -> int: ... + + +class QXmlInputSource(PyQt5.sipsimplewrapper): + + EndOfData = ... # type: int + EndOfDocument = ... # type: int + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, dev: typing.Optional[QtCore.QIODevice]) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlInputSource') -> None: ... + + def fromRawData(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray], beginning: bool = ...) -> str: ... + def reset(self) -> None: ... + def next(self) -> str: ... + def data(self) -> str: ... + def fetchData(self) -> None: ... + @typing.overload + def setData(self, dat: typing.Optional[str]) -> None: ... + @typing.overload + def setData(self, dat: typing.Union[QtCore.QByteArray, bytes, bytearray]) -> None: ... + + +class QXmlParseException(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self, name: typing.Optional[str] = ..., column: int = ..., line: int = ..., publicId: typing.Optional[str] = ..., systemId: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QXmlParseException') -> None: ... + + def message(self) -> str: ... + def systemId(self) -> str: ... + def publicId(self) -> str: ... + def lineNumber(self) -> int: ... + def columnNumber(self) -> int: ... + + +class QXmlReader(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlReader') -> None: ... + + @typing.overload + def parse(self, input: QXmlInputSource) -> bool: ... + @typing.overload + def parse(self, input: typing.Optional[QXmlInputSource]) -> bool: ... + def declHandler(self) -> typing.Optional['QXmlDeclHandler']: ... + def setDeclHandler(self, handler: typing.Optional['QXmlDeclHandler']) -> None: ... + def lexicalHandler(self) -> typing.Optional['QXmlLexicalHandler']: ... + def setLexicalHandler(self, handler: typing.Optional['QXmlLexicalHandler']) -> None: ... + def errorHandler(self) -> typing.Optional['QXmlErrorHandler']: ... + def setErrorHandler(self, handler: typing.Optional['QXmlErrorHandler']) -> None: ... + def contentHandler(self) -> typing.Optional['QXmlContentHandler']: ... + def setContentHandler(self, handler: typing.Optional['QXmlContentHandler']) -> None: ... + def DTDHandler(self) -> typing.Optional['QXmlDTDHandler']: ... + def setDTDHandler(self, handler: typing.Optional['QXmlDTDHandler']) -> None: ... + def entityResolver(self) -> typing.Optional['QXmlEntityResolver']: ... + def setEntityResolver(self, handler: typing.Optional['QXmlEntityResolver']) -> None: ... + def hasProperty(self, name: typing.Optional[str]) -> bool: ... + def setProperty(self, name: typing.Optional[str], value: typing.Optional[PyQt5.sip.voidptr]) -> None: ... + def property(self, name: typing.Optional[str]) -> typing.Tuple[typing.Optional[PyQt5.sip.voidptr], typing.Optional[bool]]: ... + def hasFeature(self, name: typing.Optional[str]) -> bool: ... + def setFeature(self, name: typing.Optional[str], value: bool) -> None: ... + def feature(self, name: typing.Optional[str]) -> typing.Tuple[bool, typing.Optional[bool]]: ... + + +class QXmlSimpleReader(QXmlReader): + + def __init__(self) -> None: ... + + def parseContinue(self) -> bool: ... + @typing.overload + def parse(self, input: typing.Optional[QXmlInputSource]) -> bool: ... + @typing.overload + def parse(self, input: typing.Optional[QXmlInputSource], incremental: bool) -> bool: ... + def declHandler(self) -> typing.Optional['QXmlDeclHandler']: ... + def setDeclHandler(self, handler: typing.Optional['QXmlDeclHandler']) -> None: ... + def lexicalHandler(self) -> typing.Optional['QXmlLexicalHandler']: ... + def setLexicalHandler(self, handler: typing.Optional['QXmlLexicalHandler']) -> None: ... + def errorHandler(self) -> typing.Optional['QXmlErrorHandler']: ... + def setErrorHandler(self, handler: typing.Optional['QXmlErrorHandler']) -> None: ... + def contentHandler(self) -> typing.Optional['QXmlContentHandler']: ... + def setContentHandler(self, handler: typing.Optional['QXmlContentHandler']) -> None: ... + def DTDHandler(self) -> typing.Optional['QXmlDTDHandler']: ... + def setDTDHandler(self, handler: typing.Optional['QXmlDTDHandler']) -> None: ... + def entityResolver(self) -> typing.Optional['QXmlEntityResolver']: ... + def setEntityResolver(self, handler: typing.Optional['QXmlEntityResolver']) -> None: ... + def hasProperty(self, name: typing.Optional[str]) -> bool: ... + def setProperty(self, name: typing.Optional[str], value: typing.Optional[PyQt5.sip.voidptr]) -> None: ... + def property(self, name: typing.Optional[str]) -> typing.Tuple[typing.Optional[PyQt5.sip.voidptr], typing.Optional[bool]]: ... + def hasFeature(self, name: typing.Optional[str]) -> bool: ... + def setFeature(self, name: typing.Optional[str], value: bool) -> None: ... + def feature(self, name: typing.Optional[str]) -> typing.Tuple[bool, typing.Optional[bool]]: ... + + +class QXmlLocator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlLocator') -> None: ... + + def lineNumber(self) -> int: ... + def columnNumber(self) -> int: ... + + +class QXmlContentHandler(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlContentHandler') -> None: ... + + def errorString(self) -> str: ... + def skippedEntity(self, name: typing.Optional[str]) -> bool: ... + def processingInstruction(self, target: typing.Optional[str], data: typing.Optional[str]) -> bool: ... + def ignorableWhitespace(self, ch: typing.Optional[str]) -> bool: ... + def characters(self, ch: typing.Optional[str]) -> bool: ... + def endElement(self, namespaceURI: typing.Optional[str], localName: typing.Optional[str], qName: typing.Optional[str]) -> bool: ... + def startElement(self, namespaceURI: typing.Optional[str], localName: typing.Optional[str], qName: typing.Optional[str], atts: QXmlAttributes) -> bool: ... + def endPrefixMapping(self, prefix: typing.Optional[str]) -> bool: ... + def startPrefixMapping(self, prefix: typing.Optional[str], uri: typing.Optional[str]) -> bool: ... + def endDocument(self) -> bool: ... + def startDocument(self) -> bool: ... + def setDocumentLocator(self, locator: typing.Optional[QXmlLocator]) -> None: ... + + +class QXmlErrorHandler(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlErrorHandler') -> None: ... + + def errorString(self) -> str: ... + def fatalError(self, exception: QXmlParseException) -> bool: ... + def error(self, exception: QXmlParseException) -> bool: ... + def warning(self, exception: QXmlParseException) -> bool: ... + + +class QXmlDTDHandler(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlDTDHandler') -> None: ... + + def errorString(self) -> str: ... + def unparsedEntityDecl(self, name: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str], notationName: typing.Optional[str]) -> bool: ... + def notationDecl(self, name: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str]) -> bool: ... + + +class QXmlEntityResolver(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlEntityResolver') -> None: ... + + def errorString(self) -> str: ... + def resolveEntity(self, publicId: typing.Optional[str], systemId: typing.Optional[str]) -> typing.Tuple[bool, typing.Optional[QXmlInputSource]]: ... + + +class QXmlLexicalHandler(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlLexicalHandler') -> None: ... + + def errorString(self) -> str: ... + def comment(self, ch: typing.Optional[str]) -> bool: ... + def endCDATA(self) -> bool: ... + def startCDATA(self) -> bool: ... + def endEntity(self, name: typing.Optional[str]) -> bool: ... + def startEntity(self, name: typing.Optional[str]) -> bool: ... + def endDTD(self) -> bool: ... + def startDTD(self, name: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str]) -> bool: ... + + +class QXmlDeclHandler(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, a0: 'QXmlDeclHandler') -> None: ... + + def errorString(self) -> str: ... + def externalEntityDecl(self, name: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str]) -> bool: ... + def internalEntityDecl(self, name: typing.Optional[str], value: typing.Optional[str]) -> bool: ... + def attributeDecl(self, eName: typing.Optional[str], aName: typing.Optional[str], type: typing.Optional[str], valueDefault: typing.Optional[str], value: typing.Optional[str]) -> bool: ... + + +class QXmlDefaultHandler(QXmlContentHandler, QXmlErrorHandler, QXmlDTDHandler, QXmlEntityResolver, QXmlLexicalHandler, QXmlDeclHandler): + + def __init__(self) -> None: ... + + def errorString(self) -> str: ... + def externalEntityDecl(self, name: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str]) -> bool: ... + def internalEntityDecl(self, name: typing.Optional[str], value: typing.Optional[str]) -> bool: ... + def attributeDecl(self, eName: typing.Optional[str], aName: typing.Optional[str], type: typing.Optional[str], valueDefault: typing.Optional[str], value: typing.Optional[str]) -> bool: ... + def comment(self, ch: typing.Optional[str]) -> bool: ... + def endCDATA(self) -> bool: ... + def startCDATA(self) -> bool: ... + def endEntity(self, name: typing.Optional[str]) -> bool: ... + def startEntity(self, name: typing.Optional[str]) -> bool: ... + def endDTD(self) -> bool: ... + def startDTD(self, name: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str]) -> bool: ... + def resolveEntity(self, publicId: typing.Optional[str], systemId: typing.Optional[str]) -> typing.Tuple[bool, typing.Optional[QXmlInputSource]]: ... + def unparsedEntityDecl(self, name: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str], notationName: typing.Optional[str]) -> bool: ... + def notationDecl(self, name: typing.Optional[str], publicId: typing.Optional[str], systemId: typing.Optional[str]) -> bool: ... + def fatalError(self, exception: QXmlParseException) -> bool: ... + def error(self, exception: QXmlParseException) -> bool: ... + def warning(self, exception: QXmlParseException) -> bool: ... + def skippedEntity(self, name: typing.Optional[str]) -> bool: ... + def processingInstruction(self, target: typing.Optional[str], data: typing.Optional[str]) -> bool: ... + def ignorableWhitespace(self, ch: typing.Optional[str]) -> bool: ... + def characters(self, ch: typing.Optional[str]) -> bool: ... + def endElement(self, namespaceURI: typing.Optional[str], localName: typing.Optional[str], qName: typing.Optional[str]) -> bool: ... + def startElement(self, namespaceURI: typing.Optional[str], localName: typing.Optional[str], qName: typing.Optional[str], atts: QXmlAttributes) -> bool: ... + def endPrefixMapping(self, prefix: typing.Optional[str]) -> bool: ... + def startPrefixMapping(self, prefix: typing.Optional[str], uri: typing.Optional[str]) -> bool: ... + def endDocument(self) -> bool: ... + def startDocument(self) -> bool: ... + def setDocumentLocator(self, locator: typing.Optional[QXmlLocator]) -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtXmlPatterns.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/QtXmlPatterns.abi3.so new file mode 100644 index 0000000..c027204 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/QtXmlPatterns.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/QtXmlPatterns.pyi b/venv/lib/python3.12/site-packages/PyQt5/QtXmlPatterns.pyi new file mode 100644 index 0000000..f2e6e88 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/QtXmlPatterns.pyi @@ -0,0 +1,375 @@ +# The PEP 484 type hints stub file for the QtXmlPatterns module. +# +# Generated by SIP 6.8.6 +# +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import typing + +import PyQt5.sip + +from PyQt5 import QtCore +from PyQt5 import QtNetwork + +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] + + +class QAbstractMessageHandler(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def handleMessage(self, type: QtCore.QtMsgType, description: typing.Optional[str], identifier: QtCore.QUrl, sourceLocation: 'QSourceLocation') -> None: ... + def message(self, type: QtCore.QtMsgType, description: typing.Optional[str], identifier: QtCore.QUrl = ..., sourceLocation: 'QSourceLocation' = ...) -> None: ... + + +class QAbstractUriResolver(QtCore.QObject): + + def __init__(self, parent: typing.Optional[QtCore.QObject] = ...) -> None: ... + + def resolve(self, relative: QtCore.QUrl, baseURI: QtCore.QUrl) -> QtCore.QUrl: ... + + +class QXmlNodeModelIndex(PyQt5.sipsimplewrapper): + + class DocumentOrder(int): + Precedes = ... # type: QXmlNodeModelIndex.DocumentOrder + Is = ... # type: QXmlNodeModelIndex.DocumentOrder + Follows = ... # type: QXmlNodeModelIndex.DocumentOrder + + class NodeKind(int): + Attribute = ... # type: QXmlNodeModelIndex.NodeKind + Comment = ... # type: QXmlNodeModelIndex.NodeKind + Document = ... # type: QXmlNodeModelIndex.NodeKind + Element = ... # type: QXmlNodeModelIndex.NodeKind + Namespace = ... # type: QXmlNodeModelIndex.NodeKind + ProcessingInstruction = ... # type: QXmlNodeModelIndex.NodeKind + Text = ... # type: QXmlNodeModelIndex.NodeKind + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QXmlNodeModelIndex') -> None: ... + + def __hash__(self) -> int: ... + def isNull(self) -> bool: ... + def additionalData(self) -> int: ... + def model(self) -> typing.Optional['QAbstractXmlNodeModel']: ... + def internalPointer(self) -> typing.Any: ... + def data(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QAbstractXmlNodeModel(PyQt5.sipsimplewrapper): + + class SimpleAxis(int): + Parent = ... # type: QAbstractXmlNodeModel.SimpleAxis + FirstChild = ... # type: QAbstractXmlNodeModel.SimpleAxis + PreviousSibling = ... # type: QAbstractXmlNodeModel.SimpleAxis + NextSibling = ... # type: QAbstractXmlNodeModel.SimpleAxis + + def __init__(self) -> None: ... + + @typing.overload + def createIndex(self, data: int) -> QXmlNodeModelIndex: ... + @typing.overload + def createIndex(self, data: int, additionalData: int) -> QXmlNodeModelIndex: ... + @typing.overload + def createIndex(self, pointer: typing.Any, additionalData: int = ...) -> QXmlNodeModelIndex: ... + def attributes(self, element: QXmlNodeModelIndex) -> typing.List[QXmlNodeModelIndex]: ... + def nextFromSimpleAxis(self, axis: 'QAbstractXmlNodeModel.SimpleAxis', origin: QXmlNodeModelIndex) -> QXmlNodeModelIndex: ... + def sourceLocation(self, index: QXmlNodeModelIndex) -> 'QSourceLocation': ... + def nodesByIdref(self, NCName: 'QXmlName') -> typing.List[QXmlNodeModelIndex]: ... + def elementById(self, NCName: 'QXmlName') -> QXmlNodeModelIndex: ... + def namespaceBindings(self, n: QXmlNodeModelIndex) -> typing.List['QXmlName']: ... + def typedValue(self, n: QXmlNodeModelIndex) -> typing.Any: ... + def stringValue(self, n: QXmlNodeModelIndex) -> str: ... + def name(self, ni: QXmlNodeModelIndex) -> 'QXmlName': ... + def root(self, n: QXmlNodeModelIndex) -> QXmlNodeModelIndex: ... + def compareOrder(self, ni1: QXmlNodeModelIndex, ni2: QXmlNodeModelIndex) -> QXmlNodeModelIndex.DocumentOrder: ... + def kind(self, ni: QXmlNodeModelIndex) -> QXmlNodeModelIndex.NodeKind: ... + def documentUri(self, ni: QXmlNodeModelIndex) -> QtCore.QUrl: ... + def baseUri(self, ni: QXmlNodeModelIndex) -> QtCore.QUrl: ... + + +class QXmlItem(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QXmlItem') -> None: ... + @typing.overload + def __init__(self, node: QXmlNodeModelIndex) -> None: ... + @typing.overload + def __init__(self, atomicValue: typing.Any) -> None: ... + + def toNodeModelIndex(self) -> QXmlNodeModelIndex: ... + def toAtomicValue(self) -> typing.Any: ... + def isAtomicValue(self) -> bool: ... + def isNode(self) -> bool: ... + def isNull(self) -> bool: ... + + +class QAbstractXmlReceiver(PyQt5.sipsimplewrapper): + + def __init__(self) -> None: ... + + def endOfSequence(self) -> None: ... + def startOfSequence(self) -> None: ... + def namespaceBinding(self, name: 'QXmlName') -> None: ... + def atomicValue(self, value: typing.Any) -> None: ... + def processingInstruction(self, target: 'QXmlName', value: typing.Optional[str]) -> None: ... + def endDocument(self) -> None: ... + def startDocument(self) -> None: ... + def characters(self, value: str) -> None: ... + def comment(self, value: typing.Optional[str]) -> None: ... + def attribute(self, name: 'QXmlName', value: str) -> None: ... + def endElement(self) -> None: ... + def startElement(self, name: 'QXmlName') -> None: ... + + +class QSimpleXmlNodeModel(QAbstractXmlNodeModel): + + def __init__(self, namePool: 'QXmlNamePool') -> None: ... + + def nodesByIdref(self, idref: 'QXmlName') -> typing.List[QXmlNodeModelIndex]: ... + def elementById(self, id: 'QXmlName') -> QXmlNodeModelIndex: ... + def stringValue(self, node: QXmlNodeModelIndex) -> str: ... + def namespaceBindings(self, a0: QXmlNodeModelIndex) -> typing.List['QXmlName']: ... + def namePool(self) -> 'QXmlNamePool': ... + def baseUri(self, node: QXmlNodeModelIndex) -> QtCore.QUrl: ... + + +class QSourceLocation(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QSourceLocation') -> None: ... + @typing.overload + def __init__(self, u: QtCore.QUrl, line: int = ..., column: int = ...) -> None: ... + + def __hash__(self) -> int: ... + def isNull(self) -> bool: ... + def setUri(self, newUri: QtCore.QUrl) -> None: ... + def uri(self) -> QtCore.QUrl: ... + def setLine(self, newLine: int) -> None: ... + def line(self) -> int: ... + def setColumn(self, newColumn: int) -> None: ... + def column(self) -> int: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + + +class QXmlSerializer(QAbstractXmlReceiver): + + def __init__(self, query: 'QXmlQuery', outputDevice: typing.Optional[QtCore.QIODevice]) -> None: ... + + def codec(self) -> typing.Optional[QtCore.QTextCodec]: ... + def setCodec(self, codec: typing.Optional[QtCore.QTextCodec]) -> None: ... + def outputDevice(self) -> typing.Optional[QtCore.QIODevice]: ... + def endOfSequence(self) -> None: ... + def startOfSequence(self) -> None: ... + def endDocument(self) -> None: ... + def startDocument(self) -> None: ... + def atomicValue(self, value: typing.Any) -> None: ... + def processingInstruction(self, name: 'QXmlName', value: typing.Optional[str]) -> None: ... + def attribute(self, name: 'QXmlName', value: str) -> None: ... + def endElement(self) -> None: ... + def startElement(self, name: 'QXmlName') -> None: ... + def comment(self, value: typing.Optional[str]) -> None: ... + def characters(self, value: str) -> None: ... + def namespaceBinding(self, nb: 'QXmlName') -> None: ... + + +class QXmlFormatter(QXmlSerializer): + + def __init__(self, query: 'QXmlQuery', outputDevice: typing.Optional[QtCore.QIODevice]) -> None: ... + + def setIndentationDepth(self, depth: int) -> None: ... + def indentationDepth(self) -> int: ... + def endOfSequence(self) -> None: ... + def startOfSequence(self) -> None: ... + def endDocument(self) -> None: ... + def startDocument(self) -> None: ... + def atomicValue(self, value: typing.Any) -> None: ... + def processingInstruction(self, name: 'QXmlName', value: typing.Optional[str]) -> None: ... + def attribute(self, name: 'QXmlName', value: str) -> None: ... + def endElement(self) -> None: ... + def startElement(self, name: 'QXmlName') -> None: ... + def comment(self, value: typing.Optional[str]) -> None: ... + def characters(self, value: str) -> None: ... + + +class QXmlName(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, namePool: 'QXmlNamePool', localName: typing.Optional[str], namespaceUri: typing.Optional[str] = ..., prefix: typing.Optional[str] = ...) -> None: ... + @typing.overload + def __init__(self, other: 'QXmlName') -> None: ... + + def __hash__(self) -> int: ... + @staticmethod + def fromClarkName(clarkName: typing.Optional[str], namePool: 'QXmlNamePool') -> 'QXmlName': ... + @staticmethod + def isNCName(candidate: typing.Optional[str]) -> bool: ... + def isNull(self) -> bool: ... + def __ne__(self, other: object): ... + def __eq__(self, other: object): ... + def toClarkName(self, query: 'QXmlNamePool') -> str: ... + def localName(self, query: 'QXmlNamePool') -> str: ... + def prefix(self, query: 'QXmlNamePool') -> str: ... + def namespaceUri(self, query: 'QXmlNamePool') -> str: ... + + +class QXmlNamePool(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QXmlNamePool') -> None: ... + + +class QXmlQuery(PyQt5.sipsimplewrapper): + + class QueryLanguage(int): + XQuery10 = ... # type: QXmlQuery.QueryLanguage + XSLT20 = ... # type: QXmlQuery.QueryLanguage + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QXmlQuery') -> None: ... + @typing.overload + def __init__(self, np: QXmlNamePool) -> None: ... + @typing.overload + def __init__(self, queryLanguage: 'QXmlQuery.QueryLanguage', pool: QXmlNamePool = ...) -> None: ... + + def queryLanguage(self) -> 'QXmlQuery.QueryLanguage': ... + def networkAccessManager(self) -> typing.Optional[QtNetwork.QNetworkAccessManager]: ... + def setNetworkAccessManager(self, newManager: typing.Optional[QtNetwork.QNetworkAccessManager]) -> None: ... + def initialTemplateName(self) -> QXmlName: ... + @typing.overload + def setInitialTemplateName(self, name: QXmlName) -> None: ... + @typing.overload + def setInitialTemplateName(self, name: typing.Optional[str]) -> None: ... + @typing.overload + def setFocus(self, item: QXmlItem) -> None: ... + @typing.overload + def setFocus(self, documentURI: QtCore.QUrl) -> bool: ... + @typing.overload + def setFocus(self, document: typing.Optional[QtCore.QIODevice]) -> bool: ... + @typing.overload + def setFocus(self, focus: typing.Optional[str]) -> bool: ... + def uriResolver(self) -> typing.Optional[QAbstractUriResolver]: ... + def setUriResolver(self, resolver: typing.Optional[QAbstractUriResolver]) -> None: ... + def evaluateToString(self) -> str: ... + def evaluateToStringList(self) -> typing.List[str]: ... + @typing.overload + def evaluateTo(self, result: typing.Optional['QXmlResultItems']) -> None: ... + @typing.overload + def evaluateTo(self, callback: typing.Optional[QAbstractXmlReceiver]) -> bool: ... + @typing.overload + def evaluateTo(self, target: typing.Optional[QtCore.QIODevice]) -> bool: ... + def isValid(self) -> bool: ... + @typing.overload + def bindVariable(self, name: QXmlName, value: QXmlItem) -> None: ... + @typing.overload + def bindVariable(self, name: QXmlName, a1: typing.Optional[QtCore.QIODevice]) -> None: ... + @typing.overload + def bindVariable(self, name: QXmlName, query: 'QXmlQuery') -> None: ... + @typing.overload + def bindVariable(self, localName: typing.Optional[str], value: QXmlItem) -> None: ... + @typing.overload + def bindVariable(self, localName: typing.Optional[str], a1: typing.Optional[QtCore.QIODevice]) -> None: ... + @typing.overload + def bindVariable(self, localName: typing.Optional[str], query: 'QXmlQuery') -> None: ... + def namePool(self) -> QXmlNamePool: ... + @typing.overload + def setQuery(self, sourceCode: typing.Optional[str], documentUri: QtCore.QUrl = ...) -> None: ... + @typing.overload + def setQuery(self, sourceCode: typing.Optional[QtCore.QIODevice], documentUri: QtCore.QUrl = ...) -> None: ... + @typing.overload + def setQuery(self, queryURI: QtCore.QUrl, baseUri: QtCore.QUrl = ...) -> None: ... + def messageHandler(self) -> typing.Optional[QAbstractMessageHandler]: ... + def setMessageHandler(self, messageHandler: typing.Optional[QAbstractMessageHandler]) -> None: ... + + +class QXmlResultItems(PyQt5.sipsimplewrapper): + + def __init__(self) -> None: ... + + def current(self) -> QXmlItem: ... + def next(self) -> QXmlItem: ... + def hasError(self) -> bool: ... + + +class QXmlSchema(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, other: 'QXmlSchema') -> None: ... + + def networkAccessManager(self) -> typing.Optional[QtNetwork.QNetworkAccessManager]: ... + def setNetworkAccessManager(self, networkmanager: typing.Optional[QtNetwork.QNetworkAccessManager]) -> None: ... + def uriResolver(self) -> typing.Optional[QAbstractUriResolver]: ... + def setUriResolver(self, resolver: typing.Optional[QAbstractUriResolver]) -> None: ... + def messageHandler(self) -> typing.Optional[QAbstractMessageHandler]: ... + def setMessageHandler(self, handler: typing.Optional[QAbstractMessageHandler]) -> None: ... + def documentUri(self) -> QtCore.QUrl: ... + def namePool(self) -> QXmlNamePool: ... + def isValid(self) -> bool: ... + @typing.overload + def load(self, source: QtCore.QUrl) -> bool: ... + @typing.overload + def load(self, source: typing.Optional[QtCore.QIODevice], documentUri: QtCore.QUrl = ...) -> bool: ... + @typing.overload + def load(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray], documentUri: QtCore.QUrl = ...) -> bool: ... + + +class QXmlSchemaValidator(PyQt5.sipsimplewrapper): + + @typing.overload + def __init__(self) -> None: ... + @typing.overload + def __init__(self, schema: QXmlSchema) -> None: ... + + def networkAccessManager(self) -> typing.Optional[QtNetwork.QNetworkAccessManager]: ... + def setNetworkAccessManager(self, networkmanager: typing.Optional[QtNetwork.QNetworkAccessManager]) -> None: ... + def uriResolver(self) -> typing.Optional[QAbstractUriResolver]: ... + def setUriResolver(self, resolver: typing.Optional[QAbstractUriResolver]) -> None: ... + def messageHandler(self) -> typing.Optional[QAbstractMessageHandler]: ... + def setMessageHandler(self, handler: typing.Optional[QAbstractMessageHandler]) -> None: ... + def schema(self) -> QXmlSchema: ... + def namePool(self) -> QXmlNamePool: ... + @typing.overload + def validate(self, source: QtCore.QUrl) -> bool: ... + @typing.overload + def validate(self, source: typing.Optional[QtCore.QIODevice], documentUri: QtCore.QUrl = ...) -> bool: ... + @typing.overload + def validate(self, data: typing.Union[QtCore.QByteArray, bytes, bytearray], documentUri: QtCore.QUrl = ...) -> bool: ... + def setSchema(self, schema: QXmlSchema) -> None: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_2_0.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_2_0.abi3.so new file mode 100644 index 0000000..e563ac8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_2_0.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_2_1.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_2_1.abi3.so new file mode 100644 index 0000000..7e6ccd9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_2_1.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_4_1_Core.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_4_1_Core.abi3.so new file mode 100644 index 0000000..a42077d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/_QOpenGLFunctions_4_1_Core.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/__init__.py b/venv/lib/python3.12/site-packages/PyQt5/__init__.py new file mode 100644 index 0000000..e7a6d8a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/__init__.py @@ -0,0 +1,20 @@ +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +# Support PyQt5 sub-packages that have been created by setuptools. +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/venv/lib/python3.12/site-packages/PyQt5/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..6360326 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/__pycache__/pylupdate_main.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/__pycache__/pylupdate_main.cpython-312.pyc new file mode 100644 index 0000000..6ac032d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/__pycache__/pylupdate_main.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/__pycache__/pyrcc_main.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/__pycache__/pyrcc_main.cpython-312.pyc new file mode 100644 index 0000000..e6dbe63 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/__pycache__/pyrcc_main.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/QtBluetooth.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/QtBluetooth.toml new file mode 100644 index 0000000..5d47c92 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/QtBluetooth.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtBluetooth. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/QtBluetoothmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/QtBluetoothmod.sip new file mode 100644 index 0000000..8e412e7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/QtBluetoothmod.sip @@ -0,0 +1,71 @@ +// QtBluetoothmod.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtBluetooth, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%Include qbluetooth.sip +%Include qbluetoothaddress.sip +%Include qbluetoothdevicediscoveryagent.sip +%Include qbluetoothdeviceinfo.sip +%Include qbluetoothhostinfo.sip +%Include qbluetoothlocaldevice.sip +%Include qbluetoothserver.sip +%Include qbluetoothservicediscoveryagent.sip +%Include qbluetoothserviceinfo.sip +%Include qbluetoothsocket.sip +%Include qbluetoothtransfermanager.sip +%Include qbluetoothtransferreply.sip +%Include qbluetoothtransferrequest.sip +%Include qbluetoothuuid.sip +%Include qlowenergyadvertisingdata.sip +%Include qlowenergyadvertisingparameters.sip +%Include qlowenergycharacteristic.sip +%Include qlowenergycharacteristicdata.sip +%Include qlowenergyconnectionparameters.sip +%Include qlowenergycontroller.sip +%Include qlowenergydescriptor.sip +%Include qlowenergydescriptordata.sip +%Include qlowenergyservice.sip +%Include qlowenergyservicedata.sip +%Include qpybluetooth_quint128.sip +%Include qpybluetooth_qlist.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetooth.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetooth.sip new file mode 100644 index 0000000..b245072 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetooth.sip @@ -0,0 +1,63 @@ +// qbluetooth.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +namespace QBluetooth +{ +%TypeHeaderCode +#include +%End + + enum Security + { + NoSecurity, + Authorization, + Authentication, + Encryption, + Secure, + }; + + typedef QFlags SecurityFlags; + QFlags operator|(QBluetooth::Security f1, QFlags f2); +%If (Qt_5_7_0 -) + + enum AttAccessConstraint + { + AttAuthorizationRequired, + AttAuthenticationRequired, + AttEncryptionRequired, + }; + +%End +%If (Qt_5_7_0 -) + typedef QFlags AttAccessConstraints; +%End +%If (Qt_5_7_0 -) + QFlags operator|(QBluetooth::AttAccessConstraint f1, QFlags f2); +%End +}; + +%End +%If (Qt_5_4_0 -) +typedef quint16 QLowEnergyHandle; +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothaddress.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothaddress.sip new file mode 100644 index 0000000..69709ad --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothaddress.sip @@ -0,0 +1,46 @@ +// qbluetoothaddress.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothAddress +{ +%TypeHeaderCode +#include +%End + +public: + QBluetoothAddress(); + explicit QBluetoothAddress(quint64 address); + explicit QBluetoothAddress(const QString &address); + QBluetoothAddress(const QBluetoothAddress &other); + ~QBluetoothAddress(); + bool isNull() const; + void clear(); + bool operator<(const QBluetoothAddress &other) const; + bool operator==(const QBluetoothAddress &other) const; + bool operator!=(const QBluetoothAddress &other) const; + quint64 toUInt64() const; + QString toString() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothdevicediscoveryagent.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothdevicediscoveryagent.sip new file mode 100644 index 0000000..9018718 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothdevicediscoveryagent.sip @@ -0,0 +1,114 @@ +// qbluetoothdevicediscoveryagent.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothDeviceDiscoveryAgent : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + InputOutputError, + PoweredOffError, +%If (Qt_5_3_0 -) + InvalidBluetoothAdapterError, +%End +%If (Qt_5_5_0 -) + UnsupportedPlatformError, +%End +%If (Qt_5_8_0 -) + UnsupportedDiscoveryMethod, +%End + UnknownError, + }; + + enum InquiryType + { + GeneralUnlimitedInquiry, + LimitedInquiry, + }; + +%If (Qt_5_6_1 -) + explicit QBluetoothDeviceDiscoveryAgent(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QBluetoothDeviceDiscoveryAgent(QObject *parent /TransferThis/ = 0); +%End + QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent /TransferThis/ = 0); + virtual ~QBluetoothDeviceDiscoveryAgent(); + QBluetoothDeviceDiscoveryAgent::InquiryType inquiryType() const; + void setInquiryType(QBluetoothDeviceDiscoveryAgent::InquiryType type); + bool isActive() const; + QBluetoothDeviceDiscoveryAgent::Error error() const; + QString errorString() const; + QList discoveredDevices() const; + +public slots: + void start(); +%If (Qt_5_8_0 -) + void start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods method); +%End + void stop(); + +signals: + void deviceDiscovered(const QBluetoothDeviceInfo &info); + void finished(); + void error(QBluetoothDeviceDiscoveryAgent::Error error); + void canceled(); +%If (Qt_5_12_0 -) + void deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields); +%End + +public: +%If (Qt_5_8_0 -) + + enum DiscoveryMethod + { + NoMethod, + ClassicMethod, + LowEnergyMethod, + }; + +%End +%If (Qt_5_8_0 -) + typedef QFlags DiscoveryMethods; +%End +%If (Qt_5_8_0 -) + void setLowEnergyDiscoveryTimeout(int msTimeout); +%End +%If (Qt_5_8_0 -) + int lowEnergyDiscoveryTimeout() const; +%End +%If (Qt_5_8_0 -) + static QBluetoothDeviceDiscoveryAgent::DiscoveryMethods supportedDiscoveryMethods(); +%End +}; + +%End +%If (Qt_5_8_0 -) +QFlags operator|(QBluetoothDeviceDiscoveryAgent::DiscoveryMethod f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothdeviceinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothdeviceinfo.sip new file mode 100644 index 0000000..71ede41 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothdeviceinfo.sip @@ -0,0 +1,272 @@ +// qbluetoothdeviceinfo.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothDeviceInfo +{ +%TypeHeaderCode +#include +%End + +public: + enum MajorDeviceClass + { + MiscellaneousDevice, + ComputerDevice, + PhoneDevice, + LANAccessDevice, +%If (Qt_5_13_0 -) + NetworkDevice, +%End + AudioVideoDevice, + PeripheralDevice, + ImagingDevice, + WearableDevice, + ToyDevice, + HealthDevice, + UncategorizedDevice, + }; + + enum MinorMiscellaneousClass + { + UncategorizedMiscellaneous, + }; + + enum MinorComputerClass + { + UncategorizedComputer, + DesktopComputer, + ServerComputer, + LaptopComputer, + HandheldClamShellComputer, + HandheldComputer, + WearableComputer, + }; + + enum MinorPhoneClass + { + UncategorizedPhone, + CellularPhone, + CordlessPhone, + SmartPhone, + WiredModemOrVoiceGatewayPhone, + CommonIsdnAccessPhone, + }; + + enum MinorNetworkClass + { + NetworkFullService, + NetworkLoadFactorOne, + NetworkLoadFactorTwo, + NetworkLoadFactorThree, + NetworkLoadFactorFour, + NetworkLoadFactorFive, + NetworkLoadFactorSix, + NetworkNoService, + }; + + enum MinorAudioVideoClass + { + UncategorizedAudioVideoDevice, + WearableHeadsetDevice, + HandsFreeDevice, + Microphone, + Loudspeaker, + Headphones, + PortableAudioDevice, + CarAudio, + SetTopBox, + HiFiAudioDevice, + Vcr, + VideoCamera, + Camcorder, + VideoMonitor, + VideoDisplayAndLoudspeaker, + VideoConferencing, + GamingDevice, + }; + + enum MinorPeripheralClass + { + UncategorizedPeripheral, + KeyboardPeripheral, + PointingDevicePeripheral, + KeyboardWithPointingDevicePeripheral, + JoystickPeripheral, + GamepadPeripheral, + RemoteControlPeripheral, + SensingDevicePeripheral, + DigitizerTabletPeripheral, + CardReaderPeripheral, + }; + + enum MinorImagingClass + { + UncategorizedImagingDevice, + ImageDisplay, + ImageCamera, + ImageScanner, + ImagePrinter, + }; + + enum MinorWearableClass + { + UncategorizedWearableDevice, + WearableWristWatch, + WearablePager, + WearableJacket, + WearableHelmet, + WearableGlasses, + }; + + enum MinorToyClass + { + UncategorizedToy, + ToyRobot, + ToyVehicle, + ToyDoll, + ToyController, + ToyGame, + }; + + enum MinorHealthClass + { + UncategorizedHealthDevice, + HealthBloodPressureMonitor, + HealthThermometer, + HealthWeightScale, + HealthGlucoseMeter, + HealthPulseOximeter, + HealthDataDisplay, + HealthStepCounter, + }; + + enum ServiceClass + { + NoService, + PositioningService, + NetworkingService, + RenderingService, + CapturingService, + ObjectTransferService, + AudioService, + TelephonyService, + InformationService, + AllServices, + }; + + typedef QFlags ServiceClasses; + + enum DataCompleteness + { + DataComplete, + DataIncomplete, + DataUnavailable, + }; + + QBluetoothDeviceInfo(); + QBluetoothDeviceInfo(const QBluetoothAddress &address, const QString &name, quint32 classOfDevice); +%If (Qt_5_5_0 -) + QBluetoothDeviceInfo(const QBluetoothUuid &uuid, const QString &name, quint32 classOfDevice); +%End + QBluetoothDeviceInfo(const QBluetoothDeviceInfo &other); + ~QBluetoothDeviceInfo(); + bool isValid() const; + bool isCached() const; + void setCached(bool cached); + bool operator==(const QBluetoothDeviceInfo &other) const; + bool operator!=(const QBluetoothDeviceInfo &other) const; + QBluetoothAddress address() const; + QString name() const; + QBluetoothDeviceInfo::ServiceClasses serviceClasses() const; + QBluetoothDeviceInfo::MajorDeviceClass majorDeviceClass() const; + quint8 minorDeviceClass() const; + qint16 rssi() const; + void setRssi(qint16 signal); + void setServiceUuids(const QList &uuids, QBluetoothDeviceInfo::DataCompleteness completeness); +%If (Qt_5_13_0 -) + void setServiceUuids(const QVector &uuids); +%End + QList serviceUuids(QBluetoothDeviceInfo::DataCompleteness *completeness /Out/ = 0) const; + QBluetoothDeviceInfo::DataCompleteness serviceUuidsCompleteness() const; +%If (Qt_5_4_0 -) + + enum CoreConfiguration + { + UnknownCoreConfiguration, + LowEnergyCoreConfiguration, + BaseRateCoreConfiguration, + BaseRateAndLowEnergyCoreConfiguration, + }; + +%End +%If (Qt_5_4_0 -) + typedef QFlags CoreConfigurations; +%End +%If (Qt_5_4_0 -) + void setCoreConfigurations(QBluetoothDeviceInfo::CoreConfigurations coreConfigs); +%End +%If (Qt_5_4_0 -) + QBluetoothDeviceInfo::CoreConfigurations coreConfigurations() const; +%End +%If (Qt_5_5_0 -) + void setDeviceUuid(const QBluetoothUuid &uuid); +%End +%If (Qt_5_5_0 -) + QBluetoothUuid deviceUuid() const; +%End +%If (Qt_5_12_0 -) + + enum class Field + { + None /PyName=None_/, + RSSI, + ManufacturerData, + All, + }; + +%End +%If (Qt_5_12_0 -) + typedef QFlags Fields; +%End +%If (Qt_5_12_0 -) + QVector manufacturerIds() const; +%End +%If (Qt_5_12_0 -) + QByteArray manufacturerData(quint16 manufacturerId) const; +%End +%If (Qt_5_12_0 -) + bool setManufacturerData(quint16 manufacturerId, const QByteArray &data); +%End +%If (Qt_5_12_0 -) + QHash manufacturerData() const; +%End +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QBluetoothDeviceInfo::CoreConfiguration f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QBluetoothDeviceInfo::ServiceClass f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothhostinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothhostinfo.sip new file mode 100644 index 0000000..fed591c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothhostinfo.sip @@ -0,0 +1,47 @@ +// qbluetoothhostinfo.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothHostInfo +{ +%TypeHeaderCode +#include +%End + +public: + QBluetoothHostInfo(); + QBluetoothHostInfo(const QBluetoothHostInfo &other); + ~QBluetoothHostInfo(); + QBluetoothAddress address() const; + void setAddress(const QBluetoothAddress &address); + QString name() const; + void setName(const QString &name); +%If (Qt_5_5_0 -) + bool operator==(const QBluetoothHostInfo &other) const; +%End +%If (Qt_5_5_0 -) + bool operator!=(const QBluetoothHostInfo &other) const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothlocaldevice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothlocaldevice.sip new file mode 100644 index 0000000..629ecd7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothlocaldevice.sip @@ -0,0 +1,92 @@ +// qbluetoothlocaldevice.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothLocalDevice : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Pairing + { + Unpaired, + Paired, + AuthorizedPaired, + }; + + enum HostMode + { + HostPoweredOff, + HostConnectable, + HostDiscoverable, + HostDiscoverableLimitedInquiry, + }; + + enum Error + { + NoError, + PairingError, + UnknownError, + }; + +%If (Qt_5_6_1 -) + explicit QBluetoothLocalDevice(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QBluetoothLocalDevice(QObject *parent /TransferThis/ = 0); +%End + QBluetoothLocalDevice(const QBluetoothAddress &address, QObject *parent /TransferThis/ = 0); + virtual ~QBluetoothLocalDevice(); + bool isValid() const; + void requestPairing(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing); + QBluetoothLocalDevice::Pairing pairingStatus(const QBluetoothAddress &address) const; + void setHostMode(QBluetoothLocalDevice::HostMode mode); + QBluetoothLocalDevice::HostMode hostMode() const; + void powerOn(); + QString name() const; + QBluetoothAddress address() const; + static QList allDevices(); +%If (Qt_5_3_0 -) + QList connectedDevices() const; +%End + +public slots: + void pairingConfirmation(bool confirmation); + +signals: + void hostModeStateChanged(QBluetoothLocalDevice::HostMode state); + void pairingFinished(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing); + void pairingDisplayPinCode(const QBluetoothAddress &address, QString pin); + void pairingDisplayConfirmation(const QBluetoothAddress &address, QString pin); + void error(QBluetoothLocalDevice::Error error); +%If (Qt_5_3_0 -) + void deviceConnected(const QBluetoothAddress &address); +%End +%If (Qt_5_3_0 -) + void deviceDisconnected(const QBluetoothAddress &address); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothserver.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothserver.sip new file mode 100644 index 0000000..f8eafc3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothserver.sip @@ -0,0 +1,108 @@ +// qbluetoothserver.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothServer : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QBluetoothDeviceDiscoveryAgent, &sipType_QBluetoothDeviceDiscoveryAgent, -1, 1}, + {sipName_QBluetoothServiceDiscoveryAgent, &sipType_QBluetoothServiceDiscoveryAgent, -1, 2}, + #if QT_VERSION >= 0x050400 + {sipName_QLowEnergyService, &sipType_QLowEnergyService, -1, 3}, + #else + {0, 0, -1, 3}, + #endif + {sipName_QBluetoothTransferReply, &sipType_QBluetoothTransferReply, -1, 4}, + {sipName_QBluetoothTransferManager, &sipType_QBluetoothTransferManager, -1, 5}, + {sipName_QBluetoothServer, &sipType_QBluetoothServer, -1, 6}, + #if QT_VERSION >= 0x050400 + {sipName_QLowEnergyController, &sipType_QLowEnergyController, -1, 7}, + #else + {0, 0, -1, 7}, + #endif + {sipName_QBluetoothSocket, &sipType_QBluetoothSocket, -1, 8}, + {sipName_QBluetoothLocalDevice, &sipType_QBluetoothLocalDevice, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum Error + { + NoError, + UnknownError, + PoweredOffError, + InputOutputError, + ServiceAlreadyRegisteredError, + UnsupportedProtocolError, + }; + + QBluetoothServer(QBluetoothServiceInfo::Protocol serverType, QObject *parent /TransferThis/ = 0); + virtual ~QBluetoothServer(); + void close() /ReleaseGIL/; + bool listen(const QBluetoothAddress &address = QBluetoothAddress(), quint16 port = 0) /ReleaseGIL/; + QBluetoothServiceInfo listen(const QBluetoothUuid &uuid, const QString &serviceName = QString()) /ReleaseGIL/; + bool isListening() const; + void setMaxPendingConnections(int numConnections); + int maxPendingConnections() const; + bool hasPendingConnections() const; + QBluetoothSocket *nextPendingConnection() /Factory/; + QBluetoothAddress serverAddress() const; + quint16 serverPort() const; + void setSecurityFlags(QBluetooth::SecurityFlags security); + QBluetooth::SecurityFlags securityFlags() const; + QBluetoothServiceInfo::Protocol serverType() const; + QBluetoothServer::Error error() const; + +signals: + void newConnection(); + void error(QBluetoothServer::Error); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothservicediscoveryagent.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothservicediscoveryagent.sip new file mode 100644 index 0000000..b31306c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothservicediscoveryagent.sip @@ -0,0 +1,79 @@ +// qbluetoothservicediscoveryagent.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothServiceDiscoveryAgent : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + InputOutputError, + PoweredOffError, +%If (Qt_5_3_0 -) + InvalidBluetoothAdapterError, +%End + UnknownError, + }; + + enum DiscoveryMode + { + MinimalDiscovery, + FullDiscovery, + }; + +%If (Qt_5_6_1 -) + explicit QBluetoothServiceDiscoveryAgent(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QBluetoothServiceDiscoveryAgent(QObject *parent /TransferThis/ = 0); +%End + QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent /TransferThis/ = 0); + virtual ~QBluetoothServiceDiscoveryAgent(); + bool isActive() const; + QBluetoothServiceDiscoveryAgent::Error error() const; + QString errorString() const; + QList discoveredServices() const; + void setUuidFilter(const QList &uuids); + void setUuidFilter(const QBluetoothUuid &uuid); + QList uuidFilter() const; + bool setRemoteAddress(const QBluetoothAddress &address); + QBluetoothAddress remoteAddress() const; + +public slots: + void start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = QBluetoothServiceDiscoveryAgent::MinimalDiscovery); + void stop(); + void clear(); + +signals: + void serviceDiscovered(const QBluetoothServiceInfo &info); + void finished(); + void canceled(); + void error(QBluetoothServiceDiscoveryAgent::Error error); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothserviceinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothserviceinfo.sip new file mode 100644 index 0000000..52a0dfb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothserviceinfo.sip @@ -0,0 +1,95 @@ +// qbluetoothserviceinfo.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothServiceInfo +{ +%TypeHeaderCode +#include +%End + +public: + enum AttributeId + { + ServiceRecordHandle, + ServiceClassIds, + ServiceRecordState, + ServiceId, + ProtocolDescriptorList, + BrowseGroupList, + LanguageBaseAttributeIdList, + ServiceInfoTimeToLive, + ServiceAvailability, + BluetoothProfileDescriptorList, + DocumentationUrl, + ClientExecutableUrl, + IconUrl, + AdditionalProtocolDescriptorList, + PrimaryLanguageBase, + ServiceName, + ServiceDescription, + ServiceProvider, + }; + + enum Protocol + { + UnknownProtocol, + L2capProtocol, + RfcommProtocol, + }; + + QBluetoothServiceInfo(); + QBluetoothServiceInfo(const QBluetoothServiceInfo &other); + ~QBluetoothServiceInfo(); + bool isValid() const; + bool isComplete() const; + void setDevice(const QBluetoothDeviceInfo &info); + QBluetoothDeviceInfo device() const; + QVariant attribute(quint16 attributeId) const; + QList attributes() const; + bool contains(quint16 attributeId) const; + void removeAttribute(quint16 attributeId); + QBluetoothServiceInfo::Protocol socketProtocol() const; + int protocolServiceMultiplexer() const; + int serverChannel() const; + QBluetoothServiceInfo::Sequence protocolDescriptor(QBluetoothUuid::ProtocolUuid protocol) const; + bool isRegistered() const; + bool registerService(const QBluetoothAddress &localAdapter = QBluetoothAddress()); + bool unregisterService(); + void setAttribute(quint16 attributeId, const QBluetoothUuid &value); + void setAttribute(quint16 attributeId, const QBluetoothServiceInfo::Sequence &value); + void setAttribute(quint16 attributeId, const QVariant &value); + void setServiceName(const QString &name); + QString serviceName() const; + void setServiceDescription(const QString &description); + QString serviceDescription() const; + void setServiceProvider(const QString &provider); + QString serviceProvider() const; + void setServiceAvailability(quint8 availability); + quint8 serviceAvailability() const; + void setServiceUuid(const QBluetoothUuid &uuid); + QBluetoothUuid serviceUuid() const; + QList serviceClassUuids() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothsocket.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothsocket.sip new file mode 100644 index 0000000..dbdccd1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothsocket.sip @@ -0,0 +1,149 @@ +// qbluetoothsocket.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothSocket : public QIODevice +{ +%TypeHeaderCode +#include +%End + +public: + enum SocketState + { + UnconnectedState, + ServiceLookupState, + ConnectingState, + ConnectedState, + BoundState, + ClosingState, + ListeningState, + }; + + enum SocketError + { + NoSocketError, + UnknownSocketError, + HostNotFoundError, + ServiceNotFoundError, + NetworkError, + UnsupportedProtocolError, +%If (Qt_5_3_0 -) + OperationError, +%End +%If (Qt_5_10_0 -) + RemoteHostClosedError, +%End + }; + + QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent /TransferThis/ = 0); +%If (Qt_5_6_1 -) + explicit QBluetoothSocket(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QBluetoothSocket(QObject *parent /TransferThis/ = 0); +%End + virtual ~QBluetoothSocket(); + void abort(); + virtual void close() /ReleaseGIL/; + virtual bool isSequential() const; + virtual qint64 bytesAvailable() const; + virtual qint64 bytesToWrite() const; + virtual bool canReadLine() const; + void connectToService(const QBluetoothServiceInfo &service, QIODevice::OpenMode mode = QIODevice::ReadWrite) /ReleaseGIL/; + void connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODevice::OpenMode mode = QIODevice::ReadWrite) /ReleaseGIL/; + void connectToService(const QBluetoothAddress &address, quint16 port, QIODevice::OpenMode mode = QIODevice::ReadWrite) /ReleaseGIL/; + void disconnectFromService() /ReleaseGIL/; + QString localName() const; + QBluetoothAddress localAddress() const; + quint16 localPort() const; + QString peerName() const; + QBluetoothAddress peerAddress() const; + quint16 peerPort() const; + bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState state = QBluetoothSocket::ConnectedState, QIODevice::OpenMode mode = QIODevice::ReadWrite); + int socketDescriptor() const; + QBluetoothServiceInfo::Protocol socketType() const; + QBluetoothSocket::SocketState state() const; + QBluetoothSocket::SocketError error() const; + QString errorString() const; + +signals: + void connected(); + void disconnected(); + void error(QBluetoothSocket::SocketError error); + void stateChanged(QBluetoothSocket::SocketState state); + +protected: + virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QBluetoothSocket::readData(s, a0) : sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual qint64 writeData(const char *data /Array/, qint64 maxSize /ArraySize/) /ReleaseGIL/; + void setSocketState(QBluetoothSocket::SocketState state); + void setSocketError(QBluetoothSocket::SocketError error); + void doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODevice::OpenMode openMode); + +public: +%If (Qt_5_6_0 -) + void setPreferredSecurityFlags(QBluetooth::SecurityFlags flags); +%End +%If (Qt_5_6_0 -) + QBluetooth::SecurityFlags preferredSecurityFlags() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransfermanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransfermanager.sip new file mode 100644 index 0000000..57221d4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransfermanager.sip @@ -0,0 +1,40 @@ +// qbluetoothtransfermanager.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothTransferManager : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QBluetoothTransferManager(QObject *parent /TransferThis/ = 0); + virtual ~QBluetoothTransferManager(); + QBluetoothTransferReply *put(const QBluetoothTransferRequest &request, QIODevice *data) /Transfer/; + +signals: + void finished(QBluetoothTransferReply *reply); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransferreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransferreply.sip new file mode 100644 index 0000000..caac351 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransferreply.sip @@ -0,0 +1,74 @@ +// qbluetoothtransferreply.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothTransferReply : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum TransferError + { + NoError, + UnknownError, + FileNotFoundError, + HostNotFoundError, + UserCanceledTransferError, +%If (Qt_5_3_0 -) + IODeviceNotReadableError, +%End +%If (Qt_5_3_0 -) + ResourceBusyError, +%End +%If (Qt_5_4_0 -) + SessionError, +%End + }; + + virtual ~QBluetoothTransferReply(); + virtual bool isFinished() const = 0; + virtual bool isRunning() const = 0; + QBluetoothTransferManager *manager() const; + virtual QBluetoothTransferReply::TransferError error() const = 0; + virtual QString errorString() const = 0; + QBluetoothTransferRequest request() const; + +public slots: + void abort(); + +signals: + void finished(QBluetoothTransferReply *); + void transferProgress(qint64 bytesTransferred, qint64 bytesTotal); +%If (Qt_5_4_0 -) + void error(QBluetoothTransferReply::TransferError lastError); +%End + +protected: + explicit QBluetoothTransferReply(QObject *parent /TransferThis/ = 0); + void setManager(QBluetoothTransferManager *manager); + void setRequest(const QBluetoothTransferRequest &request); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransferrequest.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransferrequest.sip new file mode 100644 index 0000000..8e80cfb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothtransferrequest.sip @@ -0,0 +1,51 @@ +// qbluetoothtransferrequest.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothTransferRequest +{ +%TypeHeaderCode +#include +%End + +public: + enum Attribute + { + DescriptionAttribute, + TimeAttribute, + TypeAttribute, + LengthAttribute, + NameAttribute, + }; + + explicit QBluetoothTransferRequest(const QBluetoothAddress &address = QBluetoothAddress()); + QBluetoothTransferRequest(const QBluetoothTransferRequest &other); + ~QBluetoothTransferRequest(); + QVariant attribute(QBluetoothTransferRequest::Attribute code, const QVariant &defaultValue = QVariant()) const; + void setAttribute(QBluetoothTransferRequest::Attribute code, const QVariant &value); + QBluetoothAddress address() const; + bool operator!=(const QBluetoothTransferRequest &other) const; + bool operator==(const QBluetoothTransferRequest &other) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothuuid.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothuuid.sip new file mode 100644 index 0000000..e33f90e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qbluetoothuuid.sip @@ -0,0 +1,553 @@ +// qbluetoothuuid.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QBluetoothUuid : public QUuid +{ +%TypeHeaderCode +#include +%End + +public: + enum ProtocolUuid + { + Sdp, + Udp, + Rfcomm, + Tcp, + TcsBin, + TcsAt, + Att, + Obex, + Ip, + Ftp, + Http, + Wsp, + Bnep, + Upnp, + Hidp, + HardcopyControlChannel, + HardcopyDataChannel, + HardcopyNotification, + Avctp, + Avdtp, + Cmtp, + UdiCPlain, + McapControlChannel, + McapDataChannel, + L2cap, + }; + + enum ServiceClassUuid + { + ServiceDiscoveryServer, + BrowseGroupDescriptor, + PublicBrowseGroup, + SerialPort, + LANAccessUsingPPP, + DialupNetworking, + IrMCSync, + ObexObjectPush, + OBEXFileTransfer, + IrMCSyncCommand, + Headset, + AudioSource, + AudioSink, + AV_RemoteControlTarget, + AdvancedAudioDistribution, + AV_RemoteControl, + AV_RemoteControlController, + HeadsetAG, + PANU, + NAP, + GN, + DirectPrinting, + ReferencePrinting, + ImagingResponder, + ImagingAutomaticArchive, + ImagingReferenceObjects, + Handsfree, + HandsfreeAudioGateway, + DirectPrintingReferenceObjectsService, + ReflectedUI, + BasicPrinting, + PrintingStatus, + HumanInterfaceDeviceService, + HardcopyCableReplacement, + HCRPrint, + HCRScan, + SIMAccess, + PhonebookAccessPCE, + PhonebookAccessPSE, + PhonebookAccess, + HeadsetHS, + MessageAccessServer, + MessageNotificationServer, + MessageAccessProfile, + PnPInformation, + GenericNetworking, + GenericFileTransfer, + GenericAudio, + GenericTelephony, + VideoSource, + VideoSink, + VideoDistribution, + HDP, + HDPSource, + HDPSink, +%If (Qt_5_3_0 -) + BasicImage, +%End +%If (Qt_5_3_0 -) + GNSS, +%End +%If (Qt_5_3_0 -) + GNSSServer, +%End +%If (Qt_5_3_0 -) + Display3D, +%End +%If (Qt_5_3_0 -) + Glasses3D, +%End +%If (Qt_5_3_0 -) + Synchronization3D, +%End +%If (Qt_5_3_0 -) + MPSProfile, +%End +%If (Qt_5_3_0 -) + MPSService, +%End +%If (Qt_5_4_0 -) + GenericAccess, +%End +%If (Qt_5_4_0 -) + GenericAttribute, +%End +%If (Qt_5_4_0 -) + ImmediateAlert, +%End +%If (Qt_5_4_0 -) + LinkLoss, +%End +%If (Qt_5_4_0 -) + TxPower, +%End +%If (Qt_5_4_0 -) + CurrentTimeService, +%End +%If (Qt_5_4_0 -) + ReferenceTimeUpdateService, +%End +%If (Qt_5_4_0 -) + NextDSTChangeService, +%End +%If (Qt_5_4_0 -) + Glucose, +%End +%If (Qt_5_4_0 -) + HealthThermometer, +%End +%If (Qt_5_4_0 -) + DeviceInformation, +%End +%If (Qt_5_4_0 -) + HeartRate, +%End +%If (Qt_5_4_0 -) + PhoneAlertStatusService, +%End +%If (Qt_5_4_0 -) + BatteryService, +%End +%If (Qt_5_4_0 -) + BloodPressure, +%End +%If (Qt_5_4_0 -) + AlertNotificationService, +%End +%If (Qt_5_4_0 -) + HumanInterfaceDevice, +%End +%If (Qt_5_4_0 -) + ScanParameters, +%End +%If (Qt_5_4_0 -) + RunningSpeedAndCadence, +%End +%If (Qt_5_4_0 -) + CyclingSpeedAndCadence, +%End +%If (Qt_5_4_0 -) + CyclingPower, +%End +%If (Qt_5_4_0 -) + LocationAndNavigation, +%End +%If (Qt_5_5_0 -) + EnvironmentalSensing, +%End +%If (Qt_5_5_0 -) + BodyComposition, +%End +%If (Qt_5_5_0 -) + UserData, +%End +%If (Qt_5_5_0 -) + WeightScale, +%End +%If (Qt_5_5_0 -) + BondManagement, +%End +%If (Qt_5_5_0 -) + ContinuousGlucoseMonitoring, +%End + }; + +%If (Qt_5_4_0 -) + + enum CharacteristicType + { + DeviceName, + Appearance, + PeripheralPrivacyFlag, + ReconnectionAddress, + PeripheralPreferredConnectionParameters, + ServiceChanged, + AlertLevel, + TxPowerLevel, + DateTime, + DayOfWeek, + DayDateTime, + ExactTime256, + DSTOffset, + TimeZone, + LocalTimeInformation, + TimeWithDST, + TimeAccuracy, + TimeSource, + ReferenceTimeInformation, + TimeUpdateControlPoint, + TimeUpdateState, + GlucoseMeasurement, + BatteryLevel, + TemperatureMeasurement, + TemperatureType, + IntermediateTemperature, + MeasurementInterval, + BootKeyboardInputReport, + SystemID, + ModelNumberString, + SerialNumberString, + FirmwareRevisionString, + HardwareRevisionString, + SoftwareRevisionString, + ManufacturerNameString, + IEEE1107320601RegulatoryCertificationDataList, + CurrentTime, + ScanRefresh, + BootKeyboardOutputReport, + BootMouseInputReport, + GlucoseMeasurementContext, + BloodPressureMeasurement, + IntermediateCuffPressure, + HeartRateMeasurement, + BodySensorLocation, + HeartRateControlPoint, + AlertStatus, + RingerControlPoint, + RingerSetting, + AlertCategoryIDBitMask, + AlertCategoryID, + AlertNotificationControlPoint, + UnreadAlertStatus, + NewAlert, + SupportedNewAlertCategory, + SupportedUnreadAlertCategory, + BloodPressureFeature, + HIDInformation, + ReportMap, + HIDControlPoint, + Report, + ProtocolMode, + ScanIntervalWindow, + PnPID, + GlucoseFeature, + RecordAccessControlPoint, + RSCMeasurement, + RSCFeature, + SCControlPoint, + CSCMeasurement, + CSCFeature, + SensorLocation, + CyclingPowerMeasurement, + CyclingPowerVector, + CyclingPowerFeature, + CyclingPowerControlPoint, + LocationAndSpeed, + Navigation, + PositionQuality, + LNFeature, + LNControlPoint, +%If (Qt_5_5_0 -) + MagneticDeclination, +%End +%If (Qt_5_5_0 -) + Elevation, +%End +%If (Qt_5_5_0 -) + Pressure, +%End +%If (Qt_5_5_0 -) + Temperature, +%End +%If (Qt_5_5_0 -) + Humidity, +%End +%If (Qt_5_5_0 -) + TrueWindSpeed, +%End +%If (Qt_5_5_0 -) + TrueWindDirection, +%End +%If (Qt_5_5_0 -) + ApparentWindSpeed, +%End +%If (Qt_5_5_0 -) + ApparentWindDirection, +%End +%If (Qt_5_5_0 -) + GustFactor, +%End +%If (Qt_5_5_0 -) + PollenConcentration, +%End +%If (Qt_5_5_0 -) + UVIndex, +%End +%If (Qt_5_5_0 -) + Irradiance, +%End +%If (Qt_5_5_0 -) + Rainfall, +%End +%If (Qt_5_5_0 -) + WindChill, +%End +%If (Qt_5_5_0 -) + HeatIndex, +%End +%If (Qt_5_5_0 -) + DewPoint, +%End +%If (Qt_5_5_0 -) + DescriptorValueChanged, +%End +%If (Qt_5_5_0 -) + AerobicHeartRateLowerLimit, +%End +%If (Qt_5_5_0 -) + AerobicThreshold, +%End +%If (Qt_5_5_0 -) + Age, +%End +%If (Qt_5_5_0 -) + AnaerobicHeartRateLowerLimit, +%End +%If (Qt_5_5_0 -) + AnaerobicHeartRateUpperLimit, +%End +%If (Qt_5_5_0 -) + AnaerobicThreshold, +%End +%If (Qt_5_5_0 -) + AerobicHeartRateUpperLimit, +%End +%If (Qt_5_5_0 -) + DateOfBirth, +%End +%If (Qt_5_5_0 -) + DateOfThresholdAssessment, +%End +%If (Qt_5_5_0 -) + EmailAddress, +%End +%If (Qt_5_5_0 -) + FatBurnHeartRateLowerLimit, +%End +%If (Qt_5_5_0 -) + FatBurnHeartRateUpperLimit, +%End +%If (Qt_5_5_0 -) + FirstName, +%End +%If (Qt_5_5_0 -) + FiveZoneHeartRateLimits, +%End +%If (Qt_5_5_0 -) + Gender, +%End +%If (Qt_5_5_0 -) + HeartRateMax, +%End +%If (Qt_5_5_0 -) + Height, +%End +%If (Qt_5_5_0 -) + HipCircumference, +%End +%If (Qt_5_5_0 -) + LastName, +%End +%If (Qt_5_5_0 -) + MaximumRecommendedHeartRate, +%End +%If (Qt_5_5_0 -) + RestingHeartRate, +%End +%If (Qt_5_5_0 -) + SportTypeForAerobicAnaerobicThresholds, +%End +%If (Qt_5_5_0 -) + ThreeZoneHeartRateLimits, +%End +%If (Qt_5_5_0 -) + TwoZoneHeartRateLimits, +%End +%If (Qt_5_5_0 -) + VO2Max, +%End +%If (Qt_5_5_0 -) + WaistCircumference, +%End +%If (Qt_5_5_0 -) + Weight, +%End +%If (Qt_5_5_0 -) + DatabaseChangeIncrement, +%End +%If (Qt_5_5_0 -) + UserIndex, +%End +%If (Qt_5_5_0 -) + BodyCompositionFeature, +%End +%If (Qt_5_5_0 -) + BodyCompositionMeasurement, +%End +%If (Qt_5_5_0 -) + WeightMeasurement, +%End +%If (Qt_5_5_0 -) + WeightScaleFeature, +%End +%If (Qt_5_5_0 -) + UserControlPoint, +%End +%If (Qt_5_5_0 -) + MagneticFluxDensity2D, +%End +%If (Qt_5_5_0 -) + MagneticFluxDensity3D, +%End +%If (Qt_5_5_0 -) + Language, +%End +%If (Qt_5_5_0 -) + BarometricPressureTrend, +%End + }; + +%End +%If (Qt_5_4_0 -) + + enum DescriptorType + { + UnknownDescriptorType, + CharacteristicExtendedProperties, + CharacteristicUserDescription, + ClientCharacteristicConfiguration, + ServerCharacteristicConfiguration, + CharacteristicPresentationFormat, + CharacteristicAggregateFormat, + ValidRange, + ExternalReportReference, + ReportReference, +%If (Qt_5_5_0 -) + EnvironmentalSensingConfiguration, +%End +%If (Qt_5_5_0 -) + EnvironmentalSensingMeasurement, +%End +%If (Qt_5_5_0 -) + EnvironmentalSensingTriggerSetting, +%End + }; + +%End + QBluetoothUuid(); + QBluetoothUuid(QBluetoothUuid::ProtocolUuid uuid /Constrained/); + QBluetoothUuid(QBluetoothUuid::ServiceClassUuid uuid /Constrained/); +%If (Qt_5_4_0 -) + QBluetoothUuid(QBluetoothUuid::CharacteristicType uuid /Constrained/); +%End +%If (Qt_5_4_0 -) + QBluetoothUuid(QBluetoothUuid::DescriptorType uuid /Constrained/); +%End + explicit QBluetoothUuid(quint32 uuid); + explicit QBluetoothUuid(quint128 uuid); + explicit QBluetoothUuid(const QString &uuid); + QBluetoothUuid(const QBluetoothUuid &uuid); + QBluetoothUuid(const QUuid &uuid); + ~QBluetoothUuid(); + bool operator==(const QBluetoothUuid &other) const; +%If (Qt_5_7_0 -) + bool operator!=(const QBluetoothUuid &other) const; +%End + int minimumSize() const; + quint16 toUInt16(bool *ok = 0) const; + quint32 toUInt32(bool *ok = 0) const; + quint128 toUInt128() const; +%If (Qt_5_4_0 -) + static QString serviceClassToString(QBluetoothUuid::ServiceClassUuid uuid); +%End +%If (Qt_5_4_0 -) + static QString protocolToString(QBluetoothUuid::ProtocolUuid uuid); +%End +%If (Qt_5_4_0 -) + static QString characteristicToString(QBluetoothUuid::CharacteristicType uuid); +%End +%If (Qt_5_4_0 -) + static QString descriptorToString(QBluetoothUuid::DescriptorType uuid); +%End +}; + +%End +%If (Qt_5_12_0 -) +QDataStream &operator<<(QDataStream &s, const QBluetoothUuid &uuid /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_12_0 -) +QDataStream &operator>>(QDataStream &s, QBluetoothUuid &uuid /Constrained/) /ReleaseGIL/; +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyadvertisingdata.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyadvertisingdata.sip new file mode 100644 index 0000000..29b2a9c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyadvertisingdata.sip @@ -0,0 +1,66 @@ +// qlowenergyadvertisingdata.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_7_0 -) + +class QLowEnergyAdvertisingData +{ +%TypeHeaderCode +#include +%End + +public: + QLowEnergyAdvertisingData(); + QLowEnergyAdvertisingData(const QLowEnergyAdvertisingData &other); + ~QLowEnergyAdvertisingData(); + void setLocalName(const QString &name); + QString localName() const; + static quint16 invalidManufacturerId(); + void setManufacturerData(quint16 id, const QByteArray &data); + quint16 manufacturerId() const; + QByteArray manufacturerData() const; + void setIncludePowerLevel(bool doInclude); + bool includePowerLevel() const; + + enum Discoverability + { + DiscoverabilityNone, + DiscoverabilityLimited, + DiscoverabilityGeneral, + }; + + void setDiscoverability(QLowEnergyAdvertisingData::Discoverability mode); + QLowEnergyAdvertisingData::Discoverability discoverability() const; + void setServices(const QList &services); + QList services() const; + void setRawData(const QByteArray &data); + QByteArray rawData() const; + void swap(QLowEnergyAdvertisingData &other); +}; + +%End +%If (Qt_5_7_0 -) +bool operator==(const QLowEnergyAdvertisingData &data1, const QLowEnergyAdvertisingData &data2); +%End +%If (Qt_5_7_0 -) +bool operator!=(const QLowEnergyAdvertisingData &data1, const QLowEnergyAdvertisingData &data2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyadvertisingparameters.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyadvertisingparameters.sip new file mode 100644 index 0000000..0a10685 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyadvertisingparameters.sip @@ -0,0 +1,84 @@ +// qlowenergyadvertisingparameters.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_7_0 -) + +class QLowEnergyAdvertisingParameters +{ +%TypeHeaderCode +#include +%End + +public: + QLowEnergyAdvertisingParameters(); + QLowEnergyAdvertisingParameters(const QLowEnergyAdvertisingParameters &other); + ~QLowEnergyAdvertisingParameters(); + + enum Mode + { + AdvInd, + AdvScanInd, + AdvNonConnInd, + }; + + void setMode(QLowEnergyAdvertisingParameters::Mode mode); + QLowEnergyAdvertisingParameters::Mode mode() const; + + struct AddressInfo + { +%TypeHeaderCode +#include +%End + + AddressInfo(const QBluetoothAddress &addr, QLowEnergyController::RemoteAddressType t); + AddressInfo(); + QBluetoothAddress address; + QLowEnergyController::RemoteAddressType type; + }; + + enum FilterPolicy + { + IgnoreWhiteList, + UseWhiteListForScanning, + UseWhiteListForConnecting, + UseWhiteListForScanningAndConnecting, + }; + + void setWhiteList(const QList &whiteList, QLowEnergyAdvertisingParameters::FilterPolicy policy); + QList whiteList() const; + QLowEnergyAdvertisingParameters::FilterPolicy filterPolicy() const; + void setInterval(quint16 minimum, quint16 maximum); + int minimumInterval() const; + int maximumInterval() const; + void swap(QLowEnergyAdvertisingParameters &other); +}; + +%End +%If (Qt_5_7_0 -) +bool operator==(const QLowEnergyAdvertisingParameters &p1, const QLowEnergyAdvertisingParameters &p2); +%End +%If (Qt_5_7_0 -) +bool operator==(const QLowEnergyAdvertisingParameters::AddressInfo &ai1, const QLowEnergyAdvertisingParameters::AddressInfo &ai2); +%End +%If (Qt_5_7_0 -) +bool operator!=(const QLowEnergyAdvertisingParameters &p1, const QLowEnergyAdvertisingParameters &p2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycharacteristic.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycharacteristic.sip new file mode 100644 index 0000000..8718e75 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycharacteristic.sip @@ -0,0 +1,64 @@ +// qlowenergycharacteristic.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QLowEnergyCharacteristic +{ +%TypeHeaderCode +#include +%End + +public: + enum PropertyType + { + Unknown, + Broadcasting, + Read, + WriteNoResponse, + Write, + Notify, + Indicate, + WriteSigned, + ExtendedProperty, + }; + + typedef QFlags PropertyTypes; + QLowEnergyCharacteristic(); + QLowEnergyCharacteristic(const QLowEnergyCharacteristic &other); + ~QLowEnergyCharacteristic(); + bool operator==(const QLowEnergyCharacteristic &other) const; + bool operator!=(const QLowEnergyCharacteristic &other) const; + QString name() const; + QBluetoothUuid uuid() const; + QByteArray value() const; + QLowEnergyCharacteristic::PropertyTypes properties() const; + QLowEnergyHandle handle() const; + QLowEnergyDescriptor descriptor(const QBluetoothUuid &uuid) const; + QList descriptors() const; + bool isValid() const; +}; + +%End +%If (Qt_5_4_0 -) +QFlags operator|(QLowEnergyCharacteristic::PropertyType f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycharacteristicdata.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycharacteristicdata.sip new file mode 100644 index 0000000..6e354ca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycharacteristicdata.sip @@ -0,0 +1,61 @@ +// qlowenergycharacteristicdata.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_7_0 -) + +class QLowEnergyCharacteristicData +{ +%TypeHeaderCode +#include +%End + +public: + QLowEnergyCharacteristicData(); + QLowEnergyCharacteristicData(const QLowEnergyCharacteristicData &other); + ~QLowEnergyCharacteristicData(); + QBluetoothUuid uuid() const; + void setUuid(const QBluetoothUuid &uuid); + QByteArray value() const; + void setValue(const QByteArray &value); + QLowEnergyCharacteristic::PropertyTypes properties() const; + void setProperties(QLowEnergyCharacteristic::PropertyTypes properties); + QList descriptors() const; + void setDescriptors(const QList &descriptors); + void addDescriptor(const QLowEnergyDescriptorData &descriptor); + void setReadConstraints(QBluetooth::AttAccessConstraints constraints); + QBluetooth::AttAccessConstraints readConstraints() const; + void setWriteConstraints(QBluetooth::AttAccessConstraints constraints); + QBluetooth::AttAccessConstraints writeConstraints() const; + void setValueLength(int minimum, int maximum); + int minimumValueLength() const; + int maximumValueLength() const; + bool isValid() const; + void swap(QLowEnergyCharacteristicData &other); +}; + +%End +%If (Qt_5_7_0 -) +bool operator==(const QLowEnergyCharacteristicData &cd1, const QLowEnergyCharacteristicData &cd2); +%End +%If (Qt_5_7_0 -) +bool operator!=(const QLowEnergyCharacteristicData &cd1, const QLowEnergyCharacteristicData &cd2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyconnectionparameters.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyconnectionparameters.sip new file mode 100644 index 0000000..2783aea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyconnectionparameters.sip @@ -0,0 +1,51 @@ +// qlowenergyconnectionparameters.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_7_0 -) + +class QLowEnergyConnectionParameters +{ +%TypeHeaderCode +#include +%End + +public: + QLowEnergyConnectionParameters(); + QLowEnergyConnectionParameters(const QLowEnergyConnectionParameters &other); + ~QLowEnergyConnectionParameters(); + void setIntervalRange(double minimum, double maximum); + double minimumInterval() const; + double maximumInterval() const; + void setLatency(int latency); + int latency() const; + void setSupervisionTimeout(int timeout); + int supervisionTimeout() const; + void swap(QLowEnergyConnectionParameters &other); +}; + +%End +%If (Qt_5_7_0 -) +bool operator==(const QLowEnergyConnectionParameters &p1, const QLowEnergyConnectionParameters &p2); +%End +%If (Qt_5_7_0 -) +bool operator!=(const QLowEnergyConnectionParameters &p1, const QLowEnergyConnectionParameters &p2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycontroller.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycontroller.sip new file mode 100644 index 0000000..abbc896 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergycontroller.sip @@ -0,0 +1,153 @@ +// qlowenergycontroller.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QLowEnergyController : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + UnknownError, + UnknownRemoteDeviceError, + NetworkError, + InvalidBluetoothAdapterError, +%If (Qt_5_5_0 -) + ConnectionError, +%End +%If (Qt_5_7_0 -) + AdvertisingError, +%End +%If (Qt_5_10_0 -) + RemoteHostClosedError, +%End +%If (Qt_5_14_0 -) + AuthorizationError, +%End + }; + + enum ControllerState + { + UnconnectedState, + ConnectingState, + ConnectedState, + DiscoveringState, + DiscoveredState, + ClosingState, +%If (Qt_5_7_0 -) + AdvertisingState, +%End + }; + + enum RemoteAddressType + { + PublicAddress, + RandomAddress, + }; + +%If (Qt_5_5_0 -) + QLowEnergyController(const QBluetoothDeviceInfo &remoteDevice, QObject *parent /TransferThis/ = 0); +%End + QLowEnergyController(const QBluetoothAddress &remoteDevice, QObject *parent /TransferThis/ = 0); + QLowEnergyController(const QBluetoothAddress &remoteDevice, const QBluetoothAddress &localDevice, QObject *parent /TransferThis/ = 0); + virtual ~QLowEnergyController(); + QBluetoothAddress localAddress() const; + QBluetoothAddress remoteAddress() const; + QLowEnergyController::ControllerState state() const; + QLowEnergyController::RemoteAddressType remoteAddressType() const; + void setRemoteAddressType(QLowEnergyController::RemoteAddressType type); + void connectToDevice(); + void disconnectFromDevice(); + void discoverServices(); + QList services() const; + QLowEnergyService *createServiceObject(const QBluetoothUuid &service, QObject *parent /TransferThis/ = 0) /Factory/; + QLowEnergyController::Error error() const; + QString errorString() const; +%If (Qt_5_5_0 -) + QString remoteName() const; +%End + +signals: + void connected(); + void disconnected(); + void stateChanged(QLowEnergyController::ControllerState state); + void error(QLowEnergyController::Error newError); + void serviceDiscovered(const QBluetoothUuid &newService); + void discoveryFinished(); + +public: +%If (Qt_5_7_0 -) + + enum Role + { + CentralRole, + PeripheralRole, + }; + +%End +%If (Qt_5_7_0 -) + static QLowEnergyController *createCentral(const QBluetoothDeviceInfo &remoteDevice, QObject *parent /TransferThis/ = 0) /Factory/; +%End +%If (Qt_5_14_0 -) + static QLowEnergyController *createCentral(const QBluetoothAddress &remoteDevice, const QBluetoothAddress &localDevice, QObject *parent /TransferThis/ = 0) /Factory/; +%End +%If (Qt_5_7_0 -) + static QLowEnergyController *createPeripheral(QObject *parent /TransferThis/ = 0) /Factory/; +%End +%If (Qt_5_7_0 -) + void startAdvertising(const QLowEnergyAdvertisingParameters ¶meters, const QLowEnergyAdvertisingData &advertisingData, const QLowEnergyAdvertisingData &scanResponseData = QLowEnergyAdvertisingData()); +%End +%If (Qt_5_7_0 -) + void stopAdvertising(); +%End +%If (Qt_5_7_0 -) + QLowEnergyService *addService(const QLowEnergyServiceData &service, QObject *parent /TransferThis/ = 0) /Factory/; +%End +%If (Qt_5_7_0 -) + void requestConnectionUpdate(const QLowEnergyConnectionParameters ¶meters); +%End +%If (Qt_5_7_0 -) + QLowEnergyController::Role role() const; +%End + +signals: +%If (Qt_5_7_0 -) + void connectionUpdated(const QLowEnergyConnectionParameters ¶meters); +%End + +public: +%If (Qt_5_8_0 -) + QBluetoothUuid remoteDeviceUuid() const; +%End + +private: +%If (Qt_5_7_0 -) + explicit QLowEnergyController(QObject *parent = 0); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergydescriptor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergydescriptor.sip new file mode 100644 index 0000000..3957905 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergydescriptor.sip @@ -0,0 +1,45 @@ +// qlowenergydescriptor.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QLowEnergyDescriptor +{ +%TypeHeaderCode +#include +%End + +public: + QLowEnergyDescriptor(); + QLowEnergyDescriptor(const QLowEnergyDescriptor &other); + ~QLowEnergyDescriptor(); + bool operator==(const QLowEnergyDescriptor &other) const; + bool operator!=(const QLowEnergyDescriptor &other) const; + bool isValid() const; + QByteArray value() const; + QBluetoothUuid uuid() const; + QLowEnergyHandle handle() const; + QString name() const; + QBluetoothUuid::DescriptorType type() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergydescriptordata.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergydescriptordata.sip new file mode 100644 index 0000000..9d3a823 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergydescriptordata.sip @@ -0,0 +1,56 @@ +// qlowenergydescriptordata.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_7_0 -) + +class QLowEnergyDescriptorData +{ +%TypeHeaderCode +#include +%End + +public: + QLowEnergyDescriptorData(); + QLowEnergyDescriptorData(const QBluetoothUuid &uuid, const QByteArray &value); + QLowEnergyDescriptorData(const QLowEnergyDescriptorData &other); + ~QLowEnergyDescriptorData(); + QByteArray value() const; + void setValue(const QByteArray &value); + QBluetoothUuid uuid() const; + void setUuid(const QBluetoothUuid &uuid); + bool isValid() const; + void setReadPermissions(bool readable, QBluetooth::AttAccessConstraints constraints = QBluetooth::AttAccessConstraints()); + bool isReadable() const; + QBluetooth::AttAccessConstraints readConstraints() const; + void setWritePermissions(bool writable, QBluetooth::AttAccessConstraints constraints = QBluetooth::AttAccessConstraints()); + bool isWritable() const; + QBluetooth::AttAccessConstraints writeConstraints() const; + void swap(QLowEnergyDescriptorData &other); +}; + +%End +%If (Qt_5_7_0 -) +bool operator==(const QLowEnergyDescriptorData &d1, const QLowEnergyDescriptorData &d12); +%End +%If (Qt_5_7_0 -) +bool operator!=(const QLowEnergyDescriptorData &d1, const QLowEnergyDescriptorData &d2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyservice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyservice.sip new file mode 100644 index 0000000..c2564fe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyservice.sip @@ -0,0 +1,119 @@ +// qlowenergyservice.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QLowEnergyService : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum ServiceType + { + PrimaryService, + IncludedService, + }; + + typedef QFlags ServiceTypes; + + enum ServiceError + { + NoError, + OperationError, + CharacteristicWriteError, + DescriptorWriteError, +%If (Qt_5_5_0 -) + CharacteristicReadError, +%End +%If (Qt_5_5_0 -) + DescriptorReadError, +%End +%If (Qt_5_5_0 -) + UnknownError, +%End + }; + + enum ServiceState + { + InvalidService, + DiscoveryRequired, + DiscoveringServices, + ServiceDiscovered, +%If (Qt_5_7_0 -) + LocalService, +%End + }; + + enum WriteMode + { + WriteWithResponse, + WriteWithoutResponse, +%If (Qt_5_7_0 -) + WriteSigned, +%End + }; + + virtual ~QLowEnergyService(); + QList includedServices() const; + QLowEnergyService::ServiceTypes type() const; + QLowEnergyService::ServiceState state() const; + QLowEnergyCharacteristic characteristic(const QBluetoothUuid &uuid) const; + QList characteristics() const; + QBluetoothUuid serviceUuid() const; + QString serviceName() const; + void discoverDetails(); + QLowEnergyService::ServiceError error() const; + bool contains(const QLowEnergyCharacteristic &characteristic) const; + bool contains(const QLowEnergyDescriptor &descriptor) const; + void writeCharacteristic(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue, QLowEnergyService::WriteMode mode = QLowEnergyService::WriteWithResponse); + void writeDescriptor(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue); + +signals: + void stateChanged(QLowEnergyService::ServiceState newState); + void characteristicChanged(const QLowEnergyCharacteristic &info, const QByteArray &value); + void characteristicWritten(const QLowEnergyCharacteristic &info, const QByteArray &value); + void descriptorWritten(const QLowEnergyDescriptor &info, const QByteArray &value); + void error(QLowEnergyService::ServiceError error); + +public: +%If (Qt_5_5_0 -) + void readCharacteristic(const QLowEnergyCharacteristic &characteristic); +%End +%If (Qt_5_5_0 -) + void readDescriptor(const QLowEnergyDescriptor &descriptor); +%End + +signals: +%If (Qt_5_5_0 -) + void characteristicRead(const QLowEnergyCharacteristic &info, const QByteArray &value); +%End +%If (Qt_5_5_0 -) + void descriptorRead(const QLowEnergyDescriptor &info, const QByteArray &value); +%End +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QLowEnergyService::ServiceType f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyservicedata.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyservicedata.sip new file mode 100644 index 0000000..47120aa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qlowenergyservicedata.sip @@ -0,0 +1,62 @@ +// qlowenergyservicedata.sip generated by MetaSIP +// +// This file is part of the QtBluetooth Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_7_0 -) + +class QLowEnergyServiceData +{ +%TypeHeaderCode +#include +%End + +public: + QLowEnergyServiceData(); + QLowEnergyServiceData(const QLowEnergyServiceData &other); + ~QLowEnergyServiceData(); + + enum ServiceType + { + ServiceTypePrimary, + ServiceTypeSecondary, + }; + + QLowEnergyServiceData::ServiceType type() const; + void setType(QLowEnergyServiceData::ServiceType type); + QBluetoothUuid uuid() const; + void setUuid(const QBluetoothUuid &uuid); + QList includedServices() const; + void setIncludedServices(const QList &services); + void addIncludedService(QLowEnergyService *service); + QList characteristics() const; + void setCharacteristics(const QList &characteristics); + void addCharacteristic(const QLowEnergyCharacteristicData &characteristic); + bool isValid() const; + void swap(QLowEnergyServiceData &other); +}; + +%End +%If (Qt_5_7_0 -) +bool operator==(const QLowEnergyServiceData &sd1, const QLowEnergyServiceData &sd2); +%End +%If (Qt_5_7_0 -) +bool operator!=(const QLowEnergyServiceData &sd1, const QLowEnergyServiceData &sd2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qpybluetooth_qlist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qpybluetooth_qlist.sip new file mode 100644 index 0000000..18ff8ae --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qpybluetooth_qlist.sip @@ -0,0 +1,240 @@ +// This is the SIP interface definition for the QList based mapped types +// specific to the QtBluetooth module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QList + /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + // Convert to a Python long to make sure it doesn't get interpreted as + // a signed value. + PyObject *pobj = PyLong_FromUnsignedLongLong(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *qv = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + PyErr_Clear(); + unsigned long val = PyLong_AsUnsignedLongMask(itm); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + qv->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + + +// QBluetoothServiceInfo::Sequence is actually a sub-class of QList. +// Note that QBluetoothServiceInfo::Alternative is identical and they are both +// syntactic sugar. By ignoring methods using the latter then everything works +// as expected. +%MappedType QBluetoothServiceInfo::Sequence + /TypeHintIn="Iterable[QVariant]", TypeHintOut="List[QVariant]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + QVariant *t = new QVariant(sipCpp->at(i)); + PyObject *tobj = sipConvertFromNewType(t, sipType_QVariant, + sipTransferObj); + + if (!tobj) + { + delete t; + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, tobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QBluetoothServiceInfo::Sequence *ql = new QBluetoothServiceInfo::Sequence; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int state; + QVariant *t = reinterpret_cast( + sipForceConvertToType(itm, sipType_QVariant, sipTransferObj, + SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but '_TYPE_' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + + return 0; + } + + ql->append(*t); + + sipReleaseType(t, sipType_QVariant, state); + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qpybluetooth_quint128.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qpybluetooth_quint128.sip new file mode 100644 index 0000000..12c1dce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtBluetooth/qpybluetooth_quint128.sip @@ -0,0 +1,115 @@ +// This is the SIP interface definition for the quint128 mapped type. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType quint128 /TypeHint="Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *t = PyTuple_New(16); + + if (!t) + return 0; + + for (Py_ssize_t i = 0; i < 16; ++i) + { + // Convert to a Python long to make sure it doesn't get interpreted as + // a signed value. + PyObject *pobj = PyLong_FromUnsignedLong(sipCpp->data[i]); + + if (!pobj) + { + Py_DECREF(t); + + return 0; + } + + PyTuple_SetItem(t, i, pobj); + } + + return t; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return (PySequence_Check(sipPy) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + + Py_ssize_t len = PySequence_Size(sipPy); + + if (len != 16) + { + // A negative length should only be an internal error so let the + // original exception stand. + if (len >= 0) + PyErr_Format(PyExc_TypeError, + "sequence has %zd elements but 16 elements are expected", + len); + + *sipIsErr = 1; + + return 0; + } + + quint128 *qv = new quint128; + + for (Py_ssize_t i = 0; i < 16; ++i) + { + PyObject *itm = PySequence_GetItem(sipPy, i); + + if (!itm) + { + delete qv; + *sipIsErr = 1; + + return 0; + } + + PyErr_Clear(); + unsigned long val = PyLong_AsUnsignedLongMask(itm); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "element %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + *sipIsErr = 1; + + return 0; + } + + qv->data[i] = val; + + Py_DECREF(itm); + } + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/QtCore.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/QtCore.toml new file mode 100644 index 0000000..2008ed6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/QtCore.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtCore. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/QtCoremod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/QtCoremod.sip new file mode 100644 index 0000000..d03f27f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/QtCoremod.sip @@ -0,0 +1,230 @@ +// QtCoremod.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtCore, call_super_init=True, default_VirtualErrorHandler=PyQt5, keyword_arguments="Optional", use_limited_api=True, py_ssize_t_clean=True) + +%Timeline {Qt_5_0_0 Qt_5_0_1 Qt_5_0_2 Qt_5_1_0 Qt_5_1_1 Qt_5_2_0 Qt_5_2_1 Qt_5_3_0 Qt_5_3_1 Qt_5_3_2 Qt_5_4_0 Qt_5_4_1 Qt_5_4_2 Qt_5_5_0 Qt_5_5_1 Qt_5_6_0 Qt_5_6_1 Qt_5_6_2 Qt_5_6_3 Qt_5_6_4 Qt_5_6_5 Qt_5_6_6 Qt_5_6_7 Qt_5_6_8 Qt_5_6_9 Qt_5_7_0 Qt_5_7_1 Qt_5_8_0 Qt_5_8_1 Qt_5_9_0 Qt_5_9_1 Qt_5_9_2 Qt_5_9_3 Qt_5_9_4 Qt_5_9_5 Qt_5_9_6 Qt_5_9_7 Qt_5_9_8 Qt_5_9_9 Qt_5_10_0 Qt_5_10_1 Qt_5_11_0 Qt_5_11_1 Qt_5_11_2 Qt_5_11_3 Qt_5_12_0 Qt_5_12_1 Qt_5_12_2 Qt_5_12_3 Qt_5_12_4 Qt_5_13_0 Qt_5_14_0 Qt_5_15_0 Qt_5_15_1 Qt_5_15_2} + +%Platforms {WS_X11 WS_WIN WS_MACX} + +%Feature PyQt_Accessibility +%Feature PyQt_SessionManager +%Feature PyQt_SSL +%Feature PyQt_qreal_double +%Feature Py_v3 +%Feature PyQt_PrintDialog +%Feature PyQt_Printer +%Feature PyQt_PrintPreviewWidget +%Feature PyQt_PrintPreviewDialog +%Feature PyQt_RawFont +%Feature PyQt_OpenGL +%Feature PyQt_Desktop_OpenGL +%Feature PyQt_NotBootstrapped +%Feature PyQt_Process +%Feature PyQt_MacOSXOnly +%Feature PyQt_WebChannel +%Feature PyQt_CONSTEXPR + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%Plugin PyQt5 + +%If (Py_v3) +%DefaultEncoding "ASCII" +%End + +%If (!Py_v3) +// Hook into the VendorID package if it is enabled. +%Feature VendorID + +%If (VendorID) + +%ModuleCode +#include +%End + +%PreInitialisationCode + if (!vendorid_check()) + { + PyErr_SetString(PyExc_RuntimeError, "PyQt cannot be used with this Python interpreter"); + return; + } +%End + +%End + +%End + + +%Include(name=pyqt-internal.sip5, optional=True) +%Include(name=pyqt-gpl.sip5, optional=True) +%Include(name=pyqt-commercial.sip5, optional=True) + +%DefaultSupertype sip.simplewrapper + +%Include qglobal.sip +%Include qnamespace.sip +%Include qabstractanimation.sip +%Include qabstracteventdispatcher.sip +%Include qabstractitemmodel.sip +%Include qabstractnativeeventfilter.sip +%Include qabstractproxymodel.sip +%Include qabstractstate.sip +%Include qabstracttransition.sip +%Include qanimationgroup.sip +%Include qbasictimer.sip +%Include qbitarray.sip +%Include qbuffer.sip +%Include qbytearray.sip +%Include qbytearraymatcher.sip +%Include qcalendar.sip +%Include qcborcommon.sip +%Include qcborstream.sip +%Include qchar.sip +%Include qcollator.sip +%Include qcommandlineoption.sip +%Include qcommandlineparser.sip +%Include qconcatenatetablesproxymodel.sip +%Include qcoreapplication.sip +%Include qcoreevent.sip +%Include qcryptographichash.sip +%Include qdatastream.sip +%Include qdatetime.sip +%Include qdeadlinetimer.sip +%Include qdir.sip +%Include qdiriterator.sip +%Include qeasingcurve.sip +%Include qelapsedtimer.sip +%Include qeventloop.sip +%Include qeventtransition.sip +%Include qfile.sip +%Include qfiledevice.sip +%Include qfileinfo.sip +%Include qfileselector.sip +%Include qfilesystemwatcher.sip +%Include qfinalstate.sip +%Include qhistorystate.sip +%Include qidentityproxymodel.sip +%Include qiodevice.sip +%Include qitemselectionmodel.sip +%Include qjsondocument.sip +%Include qjsonvalue.sip +%Include qlibrary.sip +%Include qlibraryinfo.sip +%Include qline.sip +%Include qlocale.sip +%Include qlockfile.sip +%Include qlogging.sip +%Include qloggingcategory.sip +%Include qmargins.sip +%Include qmessageauthenticationcode.sip +%Include qmetaobject.sip +%Include qmetatype.sip +%Include qmimedata.sip +%Include qmimedatabase.sip +%Include qmimetype.sip +%Include qmutex.sip +%Include qnumeric.sip +%Include qobject.sip +%Include qobjectcleanuphandler.sip +%Include qobjectdefs.sip +%Include qoperatingsystemversion.sip +%Include qparallelanimationgroup.sip +%Include qpauseanimation.sip +%Include qpropertyanimation.sip +%Include qpluginloader.sip +%Include qpoint.sip +%Include qprocess.sip +%Include qrandom.sip +%Include qreadwritelock.sip +%Include qrect.sip +%Include qregexp.sip +%Include qregularexpression.sip +%Include qresource.sip +%Include qrunnable.sip +%Include qsavefile.sip +%Include qsemaphore.sip +%Include qsequentialanimationgroup.sip +%Include qsettings.sip +%Include qsharedmemory.sip +%Include qsignalmapper.sip +%Include qsignaltransition.sip +%Include qsize.sip +%Include qsocketnotifier.sip +%Include qsortfilterproxymodel.sip +%Include qstandardpaths.sip +%Include qstate.sip +%Include qstatemachine.sip +%Include qstorageinfo.sip +%Include qstring.sip +%Include qstringlistmodel.sip +%Include qsystemsemaphore.sip +%Include qtemporarydir.sip +%Include qtemporaryfile.sip +%Include qtextboundaryfinder.sip +%Include qtextcodec.sip +%Include qtextstream.sip +%Include qthread.sip +%Include qthreadpool.sip +%Include qtimeline.sip +%Include qtimer.sip +%Include qtimezone.sip +%Include qtranslator.sip +%Include qtransposeproxymodel.sip +%Include qurl.sip +%Include qurlquery.sip +%Include quuid.sip +%Include qvariant.sip +%Include qvariantanimation.sip +%Include qversionnumber.sip +%Include qwaitcondition.sip +%Include qxmlstream.sip +%Include qjsonobject.sip +%Include qpycore_qhash.sip +%Include qpycore_qset.sip +%Include qsysinfo.sip +%Include qjsonarray.sip +%Include qpycore_qpair.sip +%Include qpycore_qvector.sip +%Include qstringlist.sip +%Include qpycore_qlist.sip +%Include qwineventnotifier.sip +%Include qpycore_qvariantmap.sip +%Include qpycore_virtual_error_handler.sip +%Include qpycore_qmap.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/pyqt-gpl.sip5 b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/pyqt-gpl.sip5 new file mode 100644 index 0000000..ed2326e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/pyqt-gpl.sip5 @@ -0,0 +1 @@ +%License(type="gpl") diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractanimation.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractanimation.sip new file mode 100644 index 0000000..974f083 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractanimation.sip @@ -0,0 +1,82 @@ +// qabstractanimation.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractAnimation : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Direction + { + Forward, + Backward, + }; + + enum State + { + Stopped, + Paused, + Running, + }; + + enum DeletionPolicy + { + KeepWhenStopped, + DeleteWhenStopped, + }; + + QAbstractAnimation(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractAnimation(); + QAbstractAnimation::State state() const; + QAnimationGroup *group() const; + QAbstractAnimation::Direction direction() const; + void setDirection(QAbstractAnimation::Direction direction); + int currentTime() const; + int currentLoopTime() const; + int loopCount() const; + void setLoopCount(int loopCount); + int currentLoop() const; + virtual int duration() const = 0; + int totalDuration() const; + +signals: + void finished(); + void stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); + void currentLoopChanged(int currentLoop); + void directionChanged(QAbstractAnimation::Direction); + +public slots: + void start(QAbstractAnimation::DeletionPolicy policy = QAbstractAnimation::KeepWhenStopped); + void pause(); + void resume(); + void setPaused(bool); + void stop(); + void setCurrentTime(int msecs); + +protected: + virtual bool event(QEvent *event); + virtual void updateCurrentTime(int currentTime) = 0; + virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); + virtual void updateDirection(QAbstractAnimation::Direction direction); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstracteventdispatcher.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstracteventdispatcher.sip new file mode 100644 index 0000000..d803d9d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstracteventdispatcher.sip @@ -0,0 +1,73 @@ +// qabstracteventdispatcher.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractEventDispatcher : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + struct TimerInfo + { +%TypeHeaderCode +#include +%End + + int timerId; + int interval; + Qt::TimerType timerType; + TimerInfo(int id, int i, Qt::TimerType t); + }; + + explicit QAbstractEventDispatcher(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractEventDispatcher(); + static QAbstractEventDispatcher *instance(QThread *thread = 0); + virtual bool processEvents(QEventLoop::ProcessEventsFlags flags) = 0 /ReleaseGIL/; + virtual bool hasPendingEvents() = 0; + virtual void registerSocketNotifier(QSocketNotifier *notifier) = 0; + virtual void unregisterSocketNotifier(QSocketNotifier *notifier) = 0; + int registerTimer(int interval, Qt::TimerType timerType /Constrained/, QObject *object); + virtual void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) = 0; + virtual bool unregisterTimer(int timerId) = 0; + virtual bool unregisterTimers(QObject *object) = 0; + virtual QList registeredTimers(QObject *object) const = 0; + virtual void wakeUp() = 0; + virtual void interrupt() = 0; + virtual void flush() = 0; + virtual void startingUp(); + virtual void closingDown(); + virtual int remainingTime(int timerId) = 0; + void installNativeEventFilter(QAbstractNativeEventFilter *filterObj); + void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj); +%If (WS_WIN) + virtual bool registerEventNotifier(QWinEventNotifier *notifier) = 0; +%End +%If (WS_WIN) + virtual void unregisterEventNotifier(QWinEventNotifier *notifier) = 0; +%End + bool filterNativeEvent(const QByteArray &eventType, void *message, long *result); + +signals: + void aboutToBlock(); + void awake(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractitemmodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractitemmodel.sip new file mode 100644 index 0000000..da607da --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractitemmodel.sip @@ -0,0 +1,332 @@ +// qabstractitemmodel.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QModelIndex +{ +%TypeHeaderCode +#include +%End + +public: + QModelIndex(); + QModelIndex child(int arow, int acolumn) const; + int row() const; + int column() const; + QVariant data(int role = Qt::ItemDataRole::DisplayRole) const; + Qt::ItemFlags flags() const; + SIP_PYOBJECT internalPointer() const; +%MethodCode + sipRes = reinterpret_cast(sipCpp->internalPointer()); + + if (!sipRes) + sipRes = Py_None; + + Py_INCREF(sipRes); +%End + + SIP_PYOBJECT internalId() const /TypeHint="int"/; +%MethodCode + // Python needs to treat the result as an unsigned value (which may not happen + // on 64 bit systems). Instead we get the real value as it is stored (as a + // void *) and let Python convert that. + sipRes = PyLong_FromVoidPtr(sipCpp->internalPointer()); +%End + + const QAbstractItemModel *model() const; + bool isValid() const; + QModelIndex parent() const; + QModelIndex sibling(int arow, int acolumn) const; +%If (Qt_5_11_0 -) + QModelIndex siblingAtColumn(int column) const; +%End +%If (Qt_5_11_0 -) + QModelIndex siblingAtRow(int row) const; +%End + bool operator==(const QModelIndex &other) const; + bool operator<(const QModelIndex &other) const; + bool operator!=(const QModelIndex &other) const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +class QPersistentModelIndex +{ +%TypeHeaderCode +#include +%End + +public: + QPersistentModelIndex(); + QPersistentModelIndex(const QModelIndex &index); + QPersistentModelIndex(const QPersistentModelIndex &other); + ~QPersistentModelIndex(); + int row() const; + int column() const; + QVariant data(int role = Qt::ItemDataRole::DisplayRole) const; + Qt::ItemFlags flags() const; + QModelIndex parent() const; + QModelIndex sibling(int row, int column) const; + QModelIndex child(int row, int column) const; + const QAbstractItemModel *model() const; + bool isValid() const; + void swap(QPersistentModelIndex &other /Constrained/); + operator const QModelIndex &() const; + bool operator<(const QPersistentModelIndex &other) const; + bool operator==(const QPersistentModelIndex &other) const; + bool operator==(const QModelIndex &other) const; + bool operator!=(const QPersistentModelIndex &other) const; + bool operator!=(const QModelIndex &other) const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +typedef QList QModelIndexList; + +class QAbstractItemModel : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum LayoutChangeHint + { + NoLayoutChangeHint, + VerticalSortHint, + HorizontalSortHint, + }; + + explicit QAbstractItemModel(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractItemModel(); + bool hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0; + virtual QModelIndex parent(const QModelIndex &child) const = 0; + QObject *parent() const; + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0; + virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex &index, int role = Qt::ItemDataRole::DisplayRole) const = 0; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::ItemDataRole::EditRole); + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::ItemDataRole::DisplayRole) const; + virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::ItemDataRole::EditRole); + virtual QMap itemData(const QModelIndex &index) const; + virtual bool setItemData(const QModelIndex &index, const QMap &roles); + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + virtual Qt::DropActions supportedDropActions() const; + virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual void fetchMore(const QModelIndex &parent); + virtual bool canFetchMore(const QModelIndex &parent) const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + virtual QModelIndex buddy(const QModelIndex &index) const; + virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchStartsWith|Qt::MatchWrap) const; + virtual QSize span(const QModelIndex &index) const; + +signals: + void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); + void headerDataChanged(Qt::Orientation orientation, int first, int last); + void layoutAboutToBeChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); + void layoutChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); + void rowsAboutToBeInserted(const QModelIndex &parent, int first, int last); + void rowsInserted(const QModelIndex &parent, int first, int last); + void rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last); + void rowsRemoved(const QModelIndex &parent, int first, int last); + void columnsAboutToBeInserted(const QModelIndex &parent, int first, int last); + void columnsInserted(const QModelIndex &parent, int first, int last); + void columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last); + void columnsRemoved(const QModelIndex &parent, int first, int last); + void modelAboutToBeReset(); + void modelReset(); + +public slots: + virtual bool submit(); + virtual void revert(); + +protected: + void encodeData(const QModelIndexList &indexes, QDataStream &stream) const; + bool decodeData(int row, int column, const QModelIndex &parent, QDataStream &stream); + void beginInsertRows(const QModelIndex &parent, int first, int last); + void endInsertRows(); + void beginRemoveRows(const QModelIndex &parent, int first, int last); + void endRemoveRows(); + void beginInsertColumns(const QModelIndex &parent, int first, int last); + void endInsertColumns(); + void beginRemoveColumns(const QModelIndex &parent, int first, int last); + void endRemoveColumns(); + QModelIndexList persistentIndexList() const; + void changePersistentIndex(const QModelIndex &from, const QModelIndex &to); + void changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to); + +public: + bool insertRow(int row, const QModelIndex &parent = QModelIndex()); + bool insertColumn(int column, const QModelIndex &parent = QModelIndex()); + bool removeRow(int row, const QModelIndex &parent = QModelIndex()); + bool removeColumn(int column, const QModelIndex &parent = QModelIndex()); + virtual Qt::DropActions supportedDragActions() const; + virtual QHash roleNames() const; + +protected: + QModelIndex createIndex(int row, int column, SIP_PYOBJECT object = 0) const [QModelIndex (int row, int column, void *object = 0)]; +%MethodCode + // The Qt API is broken (and won't be fixed as it would break binary + // compatibility) regarding the internal id of a model index on different + // architectures (32 vs 64 bits). We choose to work around the breakage as it + // is fairly subtle and continues to catch people out. Instead of letting Qt + // convert betweed an integer id and a pointer id (the internal format used by + // Qt) we let Python do it. + + void *ptr; + + if (a2) + { + // Try and convert it to a Python long and fallback to the object's + // address if it fails. + ptr = PyLong_AsVoidPtr(a2); + + if (PyErr_Occurred()) + { + PyErr_Clear(); + ptr = a2; + } + } + else + { + ptr = 0; + } + + #if defined(SIP_PROTECTED_IS_PUBLIC) + sipRes = new QModelIndex(sipCpp->createIndex(a0, a1, ptr)); + #else + sipRes = new QModelIndex(sipCpp->sipProtect_createIndex(a0, a1, ptr)); + #endif +%End + +signals: + void rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow); + void rowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row); + void columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn); + void columnsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column); + +protected: + bool beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationRow); + void endMoveRows(); + bool beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationColumn); + void endMoveColumns(); + void beginResetModel() /ReleaseGIL/; + void endResetModel() /ReleaseGIL/; + +protected slots: +%If (Qt_5_1_0 -) + void resetInternalData(); +%End + +public: + virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const; + virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild); + virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild); + bool moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild); + bool moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild); +%If (Qt_5_11_0 -) + + enum class CheckIndexOption + { + NoOption, + IndexIsValid, + DoNotUseParent, + ParentIsInvalid, + }; + +%End +%If (Qt_5_11_0 -) + typedef QFlags CheckIndexOptions; +%End +%If (Qt_5_11_0 -) + bool checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = QAbstractItemModel::CheckIndexOption::NoOption) const; +%End +}; + +class QAbstractTableModel : public QAbstractItemModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractTableModel(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractTableModel(); + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); +%If (Qt_5_1_0 -) + virtual Qt::ItemFlags flags(const QModelIndex &index) const; +%End +%If (Qt_5_2_0 -) + QObject *parent() const; +%End +%If (Qt_5_5_0 -) + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; +%End + +private: + virtual QModelIndex parent(const QModelIndex &child) const; + virtual bool hasChildren(const QModelIndex &parent) const; +}; + +class QAbstractListModel : public QAbstractItemModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractListModel(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractListModel(); + virtual QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); +%If (Qt_5_1_0 -) + virtual Qt::ItemFlags flags(const QModelIndex &index) const; +%End +%If (Qt_5_2_0 -) + QObject *parent() const; +%End +%If (Qt_5_5_0 -) + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; +%End + +private: + virtual QModelIndex parent(const QModelIndex &child) const; + virtual int columnCount(const QModelIndex &parent) const; + virtual bool hasChildren(const QModelIndex &parent) const; +}; + +%If (Qt_5_11_0 -) +QFlags operator|(QAbstractItemModel::CheckIndexOption f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractnativeeventfilter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractnativeeventfilter.sip new file mode 100644 index 0000000..888d797 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractnativeeventfilter.sip @@ -0,0 +1,36 @@ +// qabstractnativeeventfilter.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractNativeEventFilter +{ +%TypeHeaderCode +#include +%End + +public: + QAbstractNativeEventFilter(); + virtual ~QAbstractNativeEventFilter(); + virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) = 0; + +private: + QAbstractNativeEventFilter(const QAbstractNativeEventFilter &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractproxymodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractproxymodel.sip new file mode 100644 index 0000000..11ee0f5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractproxymodel.sip @@ -0,0 +1,81 @@ +// qabstractproxymodel.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractProxyModel : public QAbstractItemModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractProxyModel(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractProxyModel(); + virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/); + QAbstractItemModel *sourceModel() const; + virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const = 0; + virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const = 0; + virtual QItemSelection mapSelectionToSource(const QItemSelection &selection) const; + virtual QItemSelection mapSelectionFromSource(const QItemSelection &selection) const; + virtual bool submit(); + virtual void revert(); + virtual QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); +%If (Qt_5_5_0 -) + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; +%End +%If (- Qt_5_5_0) + virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; +%End + virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); + virtual QMap itemData(const QModelIndex &index) const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual bool setItemData(const QModelIndex &index, const QMap &roles); + virtual QModelIndex buddy(const QModelIndex &index) const; + virtual bool canFetchMore(const QModelIndex &parent) const; + virtual void fetchMore(const QModelIndex &parent); + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + virtual QSize span(const QModelIndex &index) const; + virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; + virtual QStringList mimeTypes() const; + virtual Qt::DropActions supportedDropActions() const; + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; + +protected slots: +%If (Qt_5_1_0 -) + void resetInternalData(); +%End + +signals: + void sourceModelChanged(); + +public: +%If (Qt_5_4_0 -) + virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const; +%End +%If (Qt_5_4_0 -) + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); +%End +%If (Qt_5_4_0 -) + virtual Qt::DropActions supportedDragActions() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractstate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractstate.sip new file mode 100644 index 0000000..3d220df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstractstate.sip @@ -0,0 +1,49 @@ +// qabstractstate.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractState : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAbstractState(); + QState *parentState() const; + QStateMachine *machine() const; +%If (Qt_5_4_0 -) + bool active() const; +%End + +signals: +%If (Qt_5_4_0 -) + void activeChanged(bool active); +%End + void entered(); + void exited(); + +protected: + QAbstractState(QState *parent /TransferThis/ = 0); + virtual void onEntry(QEvent *event) = 0; + virtual void onExit(QEvent *event) = 0; + virtual bool event(QEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstracttransition.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstracttransition.sip new file mode 100644 index 0000000..a96ee9e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qabstracttransition.sip @@ -0,0 +1,110 @@ +// qabstracttransition.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractTransition : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QAbstractTransition(QState *sourceState /TransferThis/ = 0); + virtual ~QAbstractTransition(); + QState *sourceState() const; + QAbstractState *targetState() const; + void setTargetState(QAbstractState *target /KeepReference=0/); + QList targetStates() const; + void setTargetStates(const QList &targets /KeepReference=0/); + QStateMachine *machine() const; + void addAnimation(QAbstractAnimation *animation /GetWrapper/); +%MethodCode + // We want to keep a reference to the animation but this is in addition to the + // existing ones and does not replace them - so we can't use /KeepReference/. + sipCpp->addAnimation(a0); + + // Use the user object as a list of the references. + PyObject *user = sipGetUserObject((sipSimpleWrapper *)sipSelf); + + if (!user) + { + user = PyList_New(0); + sipSetUserObject((sipSimpleWrapper *)sipSelf, user); + } + + if (user) + PyList_Append(user, a0Wrapper); +%End + + void removeAnimation(QAbstractAnimation *animation /GetWrapper/); +%MethodCode + // Discard the extra animation reference that we took in addAnimation(). + sipCpp->removeAnimation(a0); + + // Use the user object as a list of the references. + PyObject *user = sipGetUserObject((sipSimpleWrapper *)sipSelf); + + if (user) + { + Py_ssize_t i = 0; + + // Note that we deal with an object appearing in the list more than once. + while (i < PyList_Size(user)) + if (PyList_GetItem(user, i) == a0Wrapper) + PyList_SetSlice(user, i, i + 1, NULL); + else + ++i; + } +%End + + QList animations() const; + +signals: + void triggered(); +%If (Qt_5_4_0 -) + void targetStateChanged(); +%End +%If (Qt_5_4_0 -) + void targetStatesChanged(); +%End + +protected: + virtual bool eventTest(QEvent *event) = 0; + virtual void onTransition(QEvent *event) = 0; + virtual bool event(QEvent *e); + +public: +%If (Qt_5_5_0 -) + + enum TransitionType + { + ExternalTransition, + InternalTransition, + }; + +%End +%If (Qt_5_5_0 -) + QAbstractTransition::TransitionType transitionType() const; +%End +%If (Qt_5_5_0 -) + void setTransitionType(QAbstractTransition::TransitionType type); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qanimationgroup.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qanimationgroup.sip new file mode 100644 index 0000000..d33f227 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qanimationgroup.sip @@ -0,0 +1,43 @@ +// qanimationgroup.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAnimationGroup : public QAbstractAnimation +{ +%TypeHeaderCode +#include +%End + +public: + QAnimationGroup(QObject *parent /TransferThis/ = 0); + virtual ~QAnimationGroup(); + QAbstractAnimation *animationAt(int index) const; + int animationCount() const; + int indexOfAnimation(QAbstractAnimation *animation) const; + void addAnimation(QAbstractAnimation *animation /Transfer/); + void insertAnimation(int index, QAbstractAnimation *animation /Transfer/); + void removeAnimation(QAbstractAnimation *animation /TransferBack/); + QAbstractAnimation *takeAnimation(int index) /TransferBack/; + void clear(); + +protected: + virtual bool event(QEvent *event); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbasictimer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbasictimer.sip new file mode 100644 index 0000000..c17bed8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbasictimer.sip @@ -0,0 +1,43 @@ +// qbasictimer.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QBasicTimer +{ +%TypeHeaderCode +#include +%End + +public: + QBasicTimer(); +%If (Qt_5_14_0 -) + QBasicTimer(const QBasicTimer &); +%End + ~QBasicTimer(); + bool isActive() const; + int timerId() const; + void start(int msec, Qt::TimerType timerType, QObject *obj); + void start(int msec, QObject *obj); + void stop(); +%If (Qt_5_14_0 -) + void swap(QBasicTimer &other /Constrained/); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbitarray.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbitarray.sip new file mode 100644 index 0000000..64afbc0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbitarray.sip @@ -0,0 +1,94 @@ +// qbitarray.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QBitArray +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// This is needed by __hash__(). +#include +%End + +public: + QBitArray(); + QBitArray(int size, bool value = false); + QBitArray(const QBitArray &other); + int size() const; + int count() const /__len__/; + int count(bool on) const; + bool isEmpty() const; + bool isNull() const; + void resize(int size); + void detach(); + bool isDetached() const; + void clear(); + QBitArray &operator&=(const QBitArray &); + QBitArray &operator|=(const QBitArray &); + QBitArray &operator^=(const QBitArray &); + QBitArray operator~() const; + bool operator==(const QBitArray &a) const; + bool operator!=(const QBitArray &a) const; + void fill(bool val, int first, int last); + void truncate(int pos); + bool fill(bool value, int size = -1); + bool testBit(int i) const; + void setBit(int i); + void clearBit(int i); + void setBit(int i, bool val); + bool toggleBit(int i); + bool operator[](int i) const; +%MethodCode + Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + + if (idx < 0) + sipIsErr = 1; + else + sipRes = sipCpp->operator[]((int)idx); +%End + + bool at(int i) const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + + void swap(QBitArray &other /Constrained/); +%If (Qt_5_11_0 -) + SIP_PYOBJECT bits() const /TypeHint="bytes"/; +%MethodCode + return PyBytes_FromStringAndSize(sipCpp->bits(), (sipCpp->size() + 7) / 8); +%End + +%End +%If (Qt_5_11_0 -) + static QBitArray fromBits(const char *data /Encoding="None"/, Py_ssize_t len) [QBitArray (const char *data, qsizetype len)]; +%End +}; + +QBitArray operator&(const QBitArray &, const QBitArray &); +QBitArray operator|(const QBitArray &, const QBitArray &); +QBitArray operator^(const QBitArray &, const QBitArray &); +QDataStream &operator<<(QDataStream &, const QBitArray & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QBitArray & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbuffer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbuffer.sip new file mode 100644 index 0000000..c03f717 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbuffer.sip @@ -0,0 +1,88 @@ +// qbuffer.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QBuffer : public QIODevice +{ +%TypeHeaderCode +#include +%End + +public: + explicit QBuffer(QObject *parent /TransferThis/ = 0); + QBuffer(QByteArray *byteArray /Constrained/, QObject *parent /TransferThis/ = 0); + virtual ~QBuffer(); + QByteArray &buffer(); + const QByteArray &data() const; + void setBuffer(QByteArray *a /Constrained/); + void setData(const QByteArray &data); + void setData(const char *adata /Array/, int alen /ArraySize/); + virtual bool open(QIODevice::OpenMode openMode); + virtual void close(); + virtual qint64 size() const; + virtual qint64 pos() const; + virtual bool seek(qint64 off); + virtual bool atEnd() const; + virtual bool canReadLine() const; + +protected: + virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QBuffer::readData(s, a0) : sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/; + virtual void connectNotify(const QMetaMethod &); + virtual void disconnectNotify(const QMetaMethod &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbytearray.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbytearray.sip new file mode 100644 index 0000000..ce55aec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbytearray.sip @@ -0,0 +1,546 @@ +// qbytearray.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QByteArray /TypeHintIn="Union[QByteArray, bytes, bytearray]"/ +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// This is needed by __hash__(). +#include + + +// Convenience function for converting a QByteArray to a Python str object. +static PyObject *QByteArrayToPyStr(QByteArray *ba) +{ + char *data = ba->data(); + + if (data) + // QByteArrays may have embedded '\0's so set the size explicitly. + return SIPBytes_FromStringAndSize(data, ba->size()); + + return SIPBytes_FromString(""); +} +%End + +%ConvertToTypeCode +// We have to be very careful about what we allow to be converted to a +// QByteArray and to a QString as we need to take into account the v1 and v2 +// APIs and Python v2.x and v3.x. +// +// QSvgRenderer() is a good example of what needs to work "naturally". This +// has a ctor that takes a QString argument that is the name of the SVG file. +// It has another ctor that takes a QByteArray argument that is the SVG data. +// +// In Python v2.x we want a str object to be interpreted as the name of the +// file (as that is the historical behaviour). This has the following +// implications. +// +// - The QString version of the ctor must appear before the QByteArray version +// in the .sip file. This rule should be applied wherever a similar +// situation arises. +// - A QString must not automatically convert a QByteArray. +// - QByteArray must also exist in the v2 API. +// +// In Python v3.x we want a bytes object to be used wherever a QByteArray is +// expected. This means that a QString must not automatically convert a bytes +// object. +// +// In PyQt v5.4 and earlier a QByteArray could be created from a Latin-1 +// encoded string. This was a mistaken attempt to ease the porting of Python2 +// code to Python3. + +if (sipIsErr == NULL) + return (PyByteArray_Check(sipPy) || SIPBytes_Check(sipPy) || + sipCanConvertToType(sipPy, sipType_QByteArray, SIP_NO_CONVERTORS)); + +if (PyByteArray_Check(sipPy)) +{ + *sipCppPtr = new QByteArray(PyByteArray_AsString(sipPy), + PyByteArray_Size(sipPy)); + + return sipGetState(sipTransferObj); +} + +if (SIPBytes_Check(sipPy)) +{ + *sipCppPtr = new QByteArray(SIPBytes_AsString(sipPy), + SIPBytes_Size(sipPy)); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, + sipType_QByteArray, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End + +%BIGetBufferCode + #if defined(Py_LIMITED_API) + Q_UNUSED(sipSelf); + + sipBuffer->bd_buffer = sipCpp->data(); + sipBuffer->bd_length = sipCpp->size(); + sipBuffer->bd_readonly = 0; + sipRes = 0; + #else + sipRes = PyBuffer_FillInfo(sipBuffer, sipSelf, sipCpp->data(), + sipCpp->size(), 0, sipFlags); + #endif +%End + +%BIGetReadBufferCode + if (sipSegment != 0) + { + PyErr_SetString(PyExc_SystemError, "accessing non-existent QByteArray segment"); + sipRes = -1; + } + else + { + *sipPtrPtr = (void *)sipCpp->data(); + sipRes = sipCpp->size(); + } +%End + +%BIGetSegCountCode + if (sipLenPtr) + *sipLenPtr = sipCpp->size(); + + sipRes = 1; +%End + +%BIGetCharBufferCode + if (sipSegment != 0) + { + PyErr_SetString(PyExc_SystemError, "accessing non-existent QByteArray segment"); + sipRes = -1; + } + else + { + *sipPtrPtr = (void *)sipCpp->data(); + sipRes = sipCpp->size(); + } +%End + +%PickleCode + #if PY_MAJOR_VERSION >= 3 + sipRes = Py_BuildValue((char *)"(y#)", sipCpp->data(), static_cast(sipCpp->size())); + #else + sipRes = Py_BuildValue((char *)"(s#)", sipCpp->data(), static_cast(sipCpp->size())); + #endif +%End + +public: + QByteArray(); + QByteArray(int size, char c); + QByteArray(const QByteArray &a); + ~QByteArray(); + void resize(int size); + QByteArray &fill(char ch, int size = -1); + void clear(); + int indexOf(const QByteArray &ba, int from = 0) const; + int indexOf(const QString &str, int from = 0) const; + int lastIndexOf(const QByteArray &ba, int from = -1) const; + int lastIndexOf(const QString &str, int from = -1) const; + int count(const QByteArray &a) const; + QByteArray left(int len) const; + QByteArray right(int len) const; + QByteArray mid(int pos, int length = -1) const; + bool startsWith(const QByteArray &a) const; + bool endsWith(const QByteArray &a) const; + void truncate(int pos); + void chop(int n); + QByteArray toLower() const; + QByteArray toUpper() const; + QByteArray trimmed() const; + QByteArray simplified() const; + QByteArray leftJustified(int width, char fill = ' ', bool truncate = false) const; + QByteArray rightJustified(int width, char fill = ' ', bool truncate = false) const; + QByteArray &prepend(const QByteArray &a); + QByteArray &append(const QByteArray &a); + QByteArray &append(const QString &s); + QByteArray &insert(int i, const QByteArray &a); + QByteArray &insert(int i, const QString &s); + QByteArray &remove(int index, int len); + QByteArray &replace(int index, int len, const QByteArray &s); + QByteArray &replace(const QByteArray &before, const QByteArray &after); + QByteArray &replace(const QString &before, const QByteArray &after); + QList split(char sep) const; + QByteArray &operator+=(const QByteArray &a); + QByteArray &operator+=(const QString &s); + bool operator==(const QString &s2) const; + bool operator!=(const QString &s2) const; + bool operator<(const QString &s2) const; + bool operator>(const QString &s2) const; + bool operator<=(const QString &s2) const; + bool operator>=(const QString &s2) const; + short toShort(bool *ok = 0, int base = 10) const; + ushort toUShort(bool *ok = 0, int base = 10) const; + int toInt(bool *ok = 0, int base = 10) const; + uint toUInt(bool *ok = 0, int base = 10) const; + long toLong(bool *ok = 0, int base = 10) const; + ulong toULong(bool *ok = 0, int base = 10) const; + qlonglong toLongLong(bool *ok = 0, int base = 10) const; + qulonglong toULongLong(bool *ok = 0, int base = 10) const; + float toFloat(bool *ok = 0) const; + double toDouble(bool *ok = 0) const; + QByteArray toBase64() const; + QByteArray &setNum(double n /Constrained/, char format = 'g', int precision = 6); + QByteArray &setNum(SIP_PYOBJECT n /TypeHint="int"/, int base = 10); +%MethodCode + #if PY_MAJOR_VERSION < 3 + if (PyInt_Check(a0)) + { + qlonglong val = PyInt_AsLong(a0); + + sipRes = &sipCpp->setNum(val, a1); + } + else + #endif + { + qlonglong val = sipLong_AsLongLong(a0); + + if (!PyErr_Occurred()) + { + sipRes = &sipCpp->setNum(val, a1); + } + else + { + // If it is positive then it might fit an unsigned long long. + + qulonglong uval = sipLong_AsUnsignedLongLong(a0); + + if (!PyErr_Occurred()) + { + sipRes = &sipCpp->setNum(uval, a1); + } + else + { + sipError = (PyErr_ExceptionMatches(PyExc_OverflowError) + ? sipErrorFail : sipErrorContinue); + } + } + } +%End + + static QByteArray number(double n /Constrained/, char format = 'g', int precision = 6); + static QByteArray number(SIP_PYOBJECT n /TypeHint="int"/, int base = 10); +%MethodCode + #if PY_MAJOR_VERSION < 3 + if (PyInt_Check(a0)) + { + qlonglong val = PyInt_AsLong(a0); + + sipRes = new QByteArray(QByteArray::number(val, a1)); + } + else + #endif + { + qlonglong val = sipLong_AsLongLong(a0); + + if (!PyErr_Occurred()) + { + sipRes = new QByteArray(QByteArray::number(val, a1)); + } + else + { + // If it is positive then it might fit an unsigned long long. + + qulonglong uval = sipLong_AsUnsignedLongLong(a0); + + if (!PyErr_Occurred()) + { + sipRes = new QByteArray(QByteArray::number(uval, a1)); + } + else + { + sipError = (PyErr_ExceptionMatches(PyExc_OverflowError) + ? sipErrorFail : sipErrorContinue); + } + } + } +%End + + static QByteArray fromBase64(const QByteArray &base64); + static QByteArray fromRawData(const char * /Array/, int size /ArraySize/); + static QByteArray fromHex(const QByteArray &hexEncoded); + int count() const /__len__/; + int length() const; + bool isNull() const; + int size() const; + char at(int i) const /Encoding="None"/; + char operator[](int i) const /Encoding="None"/; +%MethodCode + Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + + if (idx < 0) + sipIsErr = 1; + else + sipRes = sipCpp->operator[]((int)idx); +%End + + QByteArray operator[](SIP_PYSLICE slice) const; +%MethodCode + Py_ssize_t start, stop, step, slicelength; + + if (sipConvertFromSliceObject(a0, sipCpp->length(), &start, &stop, &step, &slicelength) < 0) + { + sipIsErr = 1; + } + else + { + sipRes = new QByteArray(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + sipRes -> append(sipCpp->at(start)); + start += step; + } + } +%End + + int __contains__(const QByteArray &a) const; +%MethodCode + // It looks like you can't assign QBool to int. + sipRes = bool(sipCpp->contains(*a0)); +%End + + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + + SIP_PYOBJECT __str__() const /TypeHint="str"/; +%MethodCode + sipRes = QByteArrayToPyStr(sipCpp); + + #if PY_MAJOR_VERSION >= 3 + PyObject *repr = PyObject_Repr(sipRes); + + if (repr) + { + Py_DECREF(sipRes); + sipRes = repr; + } + #endif +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QByteArray()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QByteArray()"); + #endif + } + else + { + PyObject *str = QByteArrayToPyStr(sipCpp); + + if (str) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QByteArray(%R)", str); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QByteArray("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(str)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + + Py_DECREF(str); + } + } +%End + + QByteArray operator*(int m) const; +%MethodCode + sipRes = new QByteArray(); + + while (a0-- > 0) + *sipRes += *sipCpp; +%End + + QByteArray &operator*=(int m); +%MethodCode + QByteArray orig(*sipCpp); + + sipCpp->clear(); + + while (a0-- > 0) + *sipCpp += orig; +%End + + bool isEmpty() const; + SIP_PYOBJECT data() /TypeHint="Py_v3:bytes;str"/; +%MethodCode + // QByteArrays may contain embedded '\0's so set the size explicitly. + + char *res = sipCpp->data(); + int len = sipCpp->size(); + + if (res) + { + if ((sipRes = SIPBytes_FromStringAndSize(res, len)) == NULL) + sipIsErr = 1; + } + else + { + Py_INCREF(Py_None); + sipRes = Py_None; + } +%End + + int capacity() const; + void reserve(int size); + void squeeze(); + void push_back(const QByteArray &a); + void push_front(const QByteArray &a); + bool contains(const QByteArray &a) const; + QByteArray toHex() const; + QByteArray toPercentEncoding(const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray(), char percent = '%') const; + static QByteArray fromPercentEncoding(const QByteArray &input, char percent = '%'); + QByteArray repeated(int times) const; + void swap(QByteArray &other /Constrained/); +%If (Qt_5_2_0 -) + + enum Base64Option + { + Base64Encoding, + Base64UrlEncoding, + KeepTrailingEquals, + OmitTrailingEquals, +%If (Qt_5_15_0 -) + IgnoreBase64DecodingErrors, +%End +%If (Qt_5_15_0 -) + AbortOnBase64DecodingErrors, +%End + }; + +%End +%If (Qt_5_2_0 -) + typedef QFlags Base64Options; +%End +%If (Qt_5_2_0 -) + QByteArray toBase64(QByteArray::Base64Options options) const; +%End +%If (Qt_5_2_0 -) + static QByteArray fromBase64(const QByteArray &base64, QByteArray::Base64Options options); +%End +%If (Qt_5_7_0 -) + QByteArray &prepend(int count, char c /Encoding="None"/); +%End +%If (Qt_5_7_0 -) + QByteArray &append(int count, char c /Encoding="None"/); +%End +%If (Qt_5_7_0 -) + QByteArray &insert(int i, int count, char c /Encoding="None"/); +%End +%If (Qt_5_9_0 -) + QByteArray toHex(char separator) const; +%End +%If (Qt_5_10_0 -) + QByteArray chopped(int len) const; +%End +%If (Qt_5_12_0 -) + int compare(const QByteArray &a, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; +%End +%If (Qt_5_12_0 -) + bool isUpper() const; +%End +%If (Qt_5_12_0 -) + bool isLower() const; +%End +%If (Qt_5_15_0 -) + + enum class Base64DecodingStatus + { + Ok, + IllegalInputLength, + IllegalCharacter, + IllegalPadding, + }; + +%End +%If (Qt_5_15_0 -) + static QByteArray::FromBase64Result fromBase64Encoding(const QByteArray &base64, QByteArray::Base64Options options = QByteArray::Base64Encoding); +%End +%If (Qt_5_15_0 -) + + class FromBase64Result + { +%TypeHeaderCode +#include +%End + + public: + QByteArray decoded; + QByteArray::Base64DecodingStatus decodingStatus; + void swap(QByteArray::FromBase64Result &other /Constrained/); + operator bool() const; +%MethodCode + // This is required because SIP doesn't handle operator bool() properly. + sipRes = sipCpp->operator bool(); +%End + + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + }; + +%End +}; + +bool operator==(const QByteArray &a1, const QByteArray &a2); +bool operator!=(const QByteArray &a1, const QByteArray &a2); +bool operator<(const QByteArray &a1, const QByteArray &a2); +bool operator<=(const QByteArray &a1, const QByteArray &a2); +bool operator>(const QByteArray &a1, const QByteArray &a2); +bool operator>=(const QByteArray &a1, const QByteArray &a2); +const QByteArray operator+(const QByteArray &a1, const QByteArray &a2); +QDataStream &operator<<(QDataStream &, const QByteArray & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QByteArray & /Constrained/) /ReleaseGIL/; +QByteArray qCompress(const QByteArray &data, int compressionLevel = -1); +QByteArray qUncompress(const QByteArray &data); +%If (Qt_5_2_0 -) +QFlags operator|(QByteArray::Base64Option f1, QFlags f2); +%End +quint16 qChecksum(const char *s /Array/, uint len /ArraySize/); +%If (Qt_5_9_0 -) +quint16 qChecksum(const char *s /Array/, uint len /ArraySize/, Qt::ChecksumType standard); +%End +%If (Qt_5_15_0 -) +bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs); +%End +%If (Qt_5_15_0 -) +bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbytearraymatcher.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbytearraymatcher.sip new file mode 100644 index 0000000..bad9e77 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qbytearraymatcher.sip @@ -0,0 +1,37 @@ +// qbytearraymatcher.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QByteArrayMatcher +{ +%TypeHeaderCode +#include +%End + +public: + QByteArrayMatcher(); + explicit QByteArrayMatcher(const QByteArray &pattern); + QByteArrayMatcher(const QByteArrayMatcher &other); + ~QByteArrayMatcher(); + void setPattern(const QByteArray &pattern); + int indexIn(const QByteArray &ba, int from = 0) const; + QByteArray pattern() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcalendar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcalendar.sip new file mode 100644 index 0000000..9218972 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcalendar.sip @@ -0,0 +1,100 @@ +// qcalendar.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_14_0 -) + +class QCalendar +{ +%TypeHeaderCode +#include +%End + +public: + enum + { + Unspecified, + }; + + struct YearMonthDay + { +%TypeHeaderCode +#include +%End + + YearMonthDay(); + YearMonthDay(int year, int month = 1, int day = 1); + bool isValid() const; + int year; + int month; + int day; + }; + + enum class System + { + Gregorian, + Julian, + Milankovic, + Jalali, + IslamicCivil, + }; + + QCalendar(); + explicit QCalendar(QCalendar::System system); + explicit QCalendar(const char *name /Encoding="Latin-1"/) [(QLatin1String name)]; +%MethodCode + // This is currently the only occurence of a QLatin1String argument. + sipCpp = new QCalendar(QLatin1String(a0)); +%End + + int daysInMonth(int month, int year = QCalendar::Unspecified) const; + int daysInYear(int year) const; + int monthsInYear(int year) const; + bool isDateValid(int year, int month, int day) const; + bool isLeapYear(int year) const; + bool isGregorian() const; + bool isLunar() const; + bool isLuniSolar() const; + bool isSolar() const; + bool isProleptic() const; + bool hasYearZero() const; + int maximumDaysInMonth() const; + int minimumDaysInMonth() const; + int maximumMonthsInYear() const; + QString name() const; + QDate dateFromParts(int year, int month, int day) const; + QDate dateFromParts(const QCalendar::YearMonthDay &parts) const; + QCalendar::YearMonthDay partsFromDate(QDate date) const; + int dayOfWeek(QDate date) const; + QString monthName(const QLocale &locale, int month, int year = QCalendar::Unspecified, QLocale::FormatType format = QLocale::LongFormat) const; + QString standaloneMonthName(const QLocale &locale, int month, int year = QCalendar::Unspecified, QLocale::FormatType format = QLocale::LongFormat) const; + QString weekDayName(const QLocale &locale, int day, QLocale::FormatType format = QLocale::LongFormat) const; + QString standaloneWeekDayName(const QLocale &locale, int day, QLocale::FormatType format = QLocale::LongFormat) const; + QString dateTimeToString(const QString &format, const QDateTime &datetime, const QDate &dateOnly, const QTime &timeOnly, const QLocale &locale) const; +%MethodCode + // QStringView has issues being implemented as a mapped type. + sipRes = new QString(sipCpp->dateTimeToString(QStringView(*a0), *a1, *a2, *a3, *a4)); +%End + + static QStringList availableCalendars(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcborcommon.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcborcommon.sip new file mode 100644 index 0000000..bbb97af --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcborcommon.sip @@ -0,0 +1,108 @@ +// qcborcommon.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) +%ModuleCode +#include +%End +%End + +%If (Qt_5_12_0 -) + +enum class QCborSimpleType +{ + False /PyName=False_/, + True /PyName=True_/, + Null, + Undefined, +}; + +%End +%If (Qt_5_12_0 -) + +struct QCborError +{ +%TypeHeaderCode +#include +%End + + enum Code + { + UnknownError, + AdvancePastEnd, + InputOutputError, + GarbageAtEnd, + EndOfFile, + UnexpectedBreak, + UnknownType, + IllegalType, + IllegalNumber, + IllegalSimpleType, + InvalidUtf8String, + DataTooLarge, + NestingTooDeep, + UnsupportedType, + NoError, + }; + +// Error code access +// This class is currently undocumented. Access to the error code is via a +// cast (which SIP doesn't support) or a badly named instance variable. To be +// safe we implement a more Qt-typical solution. +QCborError::Code code() const; +%MethodCode + sipRes = sipCpp->c; +%End + QString toString() const; +}; + +%End +%If (Qt_5_12_0 -) + +enum class QCborKnownTags +{ + DateTimeString, + UnixTime_t, + PositiveBignum, + NegativeBignum, + Decimal, + Bigfloat, + COSE_Encrypt0, + COSE_Mac0, + COSE_Sign1, + ExpectedBase64url, + ExpectedBase64, + ExpectedBase16, + EncodedCbor, + Url, + Base64url, + Base64, + RegularExpression, + MimeMessage, + Uuid, + COSE_Encrypt, + COSE_Mac, + COSE_Sign, + Signature, +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcborstream.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcborstream.sip new file mode 100644 index 0000000..247ecb6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcborstream.sip @@ -0,0 +1,234 @@ +// qcborstream.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) + +class QCborStreamWriter +{ +%TypeHeaderCode +#include +%End + +public: + explicit QCborStreamWriter(QIODevice *device); + explicit QCborStreamWriter(QByteArray *data); + ~QCborStreamWriter(); + void setDevice(QIODevice *device); + QIODevice *device() const; + void append(QCborSimpleType st); + void append(QCborKnownTags tag); + void append(const QString &str) [void (QStringView str)]; + void append(const QByteArray &ba); + void append(bool b /Constrained/); + void append(double d /Constrained/); +%MethodCode + // Use the smallest type without losing precision. + + qfloat16 a0_16 = a0; + + if (qIsNaN(a0) || a0_16 == a0) + { + sipCpp->append(a0_16); + } + else + { + float a0_float = a0; + + if (a0_float == a0) + sipCpp->append(a0_float); + else + sipCpp->append(a0); + } +%End + + void append(SIP_PYOBJECT /TypeHint="int"/); +%MethodCode + #if PY_MAJOR_VERSION < 3 + if (PyLong_Check(a0)) + #endif + { + static PyObject *zero = 0; + + if (!zero) + zero = PyLong_FromLong(0); + + if (PyObject_RichCompareBool(a0, zero, Py_LT) > 0) + { + PyErr_Clear(); + qint64 val = sipLong_AsLongLong(a0); + + if (PyErr_Occurred()) + sipError = sipErrorFail; + else + sipCpp->append(val); + } + else + { + PyErr_Clear(); + quint64 val = sipLong_AsUnsignedLongLong(a0); + + if (PyErr_Occurred()) + sipError = sipErrorFail; + else + sipCpp->append(val); + } + } + #if PY_MAJOR_VERSION < 3 + else if (PyInt_Check(a0)) + { + PyErr_Clear(); + long val = PyInt_AsLong(a0); + + if (PyErr_Occurred()) + sipError = sipErrorFail; + else if (val < 0) + sipCpp->append((qint64)val); + else + sipCpp->append((quint64)val); + } + #endif +%End + + void appendNull(); + void appendUndefined(); + void startArray(); + void startArray(quint64 count); + bool endArray(); + void startMap(); + void startMap(quint64 count); + bool endMap(); + +private: + QCborStreamWriter(const QCborStreamWriter &); +}; + +%End +%If (Qt_5_12_0 -) + +class QCborStreamReader +{ +%TypeHeaderCode +#include +%End + +public: + enum Type + { + UnsignedInteger, + NegativeInteger, + ByteString, + ByteArray, + TextString, + String, + Array, + Map, + Tag, + SimpleType, + HalfFloat, + Float16, + Float, + Double, + Invalid, + }; + + enum StringResultCode + { + EndOfString, + Ok, + Error, + }; + + QCborStreamReader(); + explicit QCborStreamReader(const QByteArray &data); + explicit QCborStreamReader(QIODevice *device); + ~QCborStreamReader(); + void setDevice(QIODevice *device); + QIODevice *device() const; + void addData(const QByteArray &data); + void reparse(); + void clear(); + void reset(); + QCborError lastError(); + qint64 currentOffset() const; + bool isValid() const; + int containerDepth() const; + QCborStreamReader::Type parentContainerType() const; + bool hasNext() const; + bool next(int maxRecursion = 10000); + QCborStreamReader::Type type() const; + bool isUnsignedInteger() const; + bool isNegativeInteger() const; + bool isInteger() const; + bool isByteArray() const; + bool isString() const; + bool isArray() const; + bool isMap() const; + bool isTag() const; + bool isSimpleType() const; + bool isFloat16() const; + bool isFloat() const; + bool isDouble() const; + bool isInvalid() const; + bool isSimpleType(QCborSimpleType st) const; + bool isFalse() const; + bool isTrue() const; + bool isBool() const; + bool isNull() const; + bool isUndefined() const; + bool isLengthKnown() const; + quint64 length() const /__len__/; + bool isContainer() const; + bool enterContainer(); + bool leaveContainer(); + SIP_PYTUPLE readString() /TypeHint="Tuple[str, QCborStreamReader.StringResultCode]"/; +%MethodCode + QCborStreamReader::StringResult res = sipCpp->readString(); + + QString *qs = new QString; + if (res.status != QCborStreamReader::Error) + *qs = res.data; + + sipRes = sipBuildResult(NULL, "NF", qs, sipType_QString, NULL, res.status, sipType_QCborStreamReader_StringResultCode); +%End + + SIP_PYTUPLE readByteArray() /TypeHint="Tuple[QByteArray, QCborStreamReader.StringResultCode]"/; +%MethodCode + QCborStreamReader::StringResult res = sipCpp->readByteArray(); + + QByteArray *qba = new QByteArray; + if (res.status != QCborStreamReader::Error) + *qba = res.data; + + sipRes = sipBuildResult(NULL, "NF", qba, sipType_QByteArray, NULL, res.status, sipType_QCborStreamReader_StringResultCode); +%End + + bool toBool() const; + quint64 toUnsignedInteger() const; + QCborSimpleType toSimpleType() const; + double toDouble() const; + qint64 toInteger() const; + +private: + QCborStreamReader(const QCborStreamReader &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qchar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qchar.sip new file mode 100644 index 0000000..40b91fd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qchar.sip @@ -0,0 +1,55 @@ +// qchar.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +// QChar mapped type. +%MappedType QChar /TypeHint="str",TypeHintValue="''"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +if (sipIsErr == NULL) +#if PY_MAJOR_VERSION < 3 + return (PyString_Check(sipPy) || PyUnicode_Check(sipPy)); +#else + return PyUnicode_Check(sipPy); +#endif + +QString qs = qpycore_PyObject_AsQString(sipPy); + +if (qs.size() != 1) +{ + PyErr_SetString(PyExc_ValueError, "string of length 1 expected"); + *sipIsErr = 1; + return 0; +} + +*sipCppPtr = new QChar(qs.at(0)); + +return sipGetState(sipTransferObj); +%End + +%ConvertFromTypeCode + return qpycore_PyObject_FromQString(QString(*sipCpp)); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcollator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcollator.sip new file mode 100644 index 0000000..d7883c4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcollator.sip @@ -0,0 +1,70 @@ +// qcollator.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QCollatorSortKey +{ +%TypeHeaderCode +#include +%End + +public: + QCollatorSortKey(const QCollatorSortKey &other); + ~QCollatorSortKey(); + void swap(QCollatorSortKey &other /Constrained/); + int compare(const QCollatorSortKey &key) const; + +private: + QCollatorSortKey(); +}; + +%End +%If (Qt_5_2_0 -) +bool operator<(const QCollatorSortKey &lhs, const QCollatorSortKey &rhs); +%End +%If (Qt_5_2_0 -) + +class QCollator +{ +%TypeHeaderCode +#include +%End + +public: + explicit QCollator(const QLocale &locale = QLocale()); + QCollator(const QCollator &); + ~QCollator(); + void swap(QCollator &other /Constrained/); + void setLocale(const QLocale &locale); + QLocale locale() const; + Qt::CaseSensitivity caseSensitivity() const; + void setCaseSensitivity(Qt::CaseSensitivity cs); + void setNumericMode(bool on); + bool numericMode() const; + void setIgnorePunctuation(bool on); + bool ignorePunctuation() const; + int compare(const QString &s1, const QString &s2) const; + QCollatorSortKey sortKey(const QString &string) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcommandlineoption.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcommandlineoption.sip new file mode 100644 index 0000000..20ad628 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcommandlineoption.sip @@ -0,0 +1,90 @@ +// qcommandlineoption.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QCommandLineOption +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_4_0 -) + explicit QCommandLineOption(const QString &name); +%End +%If (Qt_5_4_0 -) + explicit QCommandLineOption(const QStringList &names); +%End +%If (Qt_5_4_0 -) + QCommandLineOption(const QString &name, const QString &description, const QString &valueName = QString(), const QString &defaultValue = QString()); +%End +%If (- Qt_5_4_0) + QCommandLineOption(const QString &name, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString()); +%End +%If (Qt_5_4_0 -) + QCommandLineOption(const QStringList &names, const QString &description, const QString &valueName = QString(), const QString &defaultValue = QString()); +%End +%If (- Qt_5_4_0) + QCommandLineOption(const QStringList &names, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString()); +%End + QCommandLineOption(const QCommandLineOption &other); + ~QCommandLineOption(); + void swap(QCommandLineOption &other /Constrained/); + QStringList names() const; + void setValueName(const QString &name); + QString valueName() const; + void setDescription(const QString &description); + QString description() const; + void setDefaultValue(const QString &defaultValue); + void setDefaultValues(const QStringList &defaultValues); + QStringList defaultValues() const; +%If (Qt_5_6_0 -) + void setHidden(bool hidden); +%End +%If (Qt_5_6_0 -) + bool isHidden() const; +%End +%If (Qt_5_8_0 -) + + enum Flag + { + HiddenFromHelp, + ShortOptionStyle, + }; + +%End +%If (Qt_5_8_0 -) + typedef QFlags Flags; +%End +%If (Qt_5_8_0 -) + QCommandLineOption::Flags flags() const; +%End +%If (Qt_5_8_0 -) + void setFlags(QCommandLineOption::Flags aflags); +%End +}; + +%End +%If (Qt_5_8_0 -) +QFlags operator|(QCommandLineOption::Flag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcommandlineparser.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcommandlineparser.sip new file mode 100644 index 0000000..33c4577 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcommandlineparser.sip @@ -0,0 +1,87 @@ +// qcommandlineparser.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QCommandLineParser +{ +%TypeHeaderCode +#include +%End + +public: + QCommandLineParser(); + ~QCommandLineParser(); + + enum SingleDashWordOptionMode + { + ParseAsCompactedShortOptions, + ParseAsLongOptions, + }; + + void setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode parsingMode); + bool addOption(const QCommandLineOption &commandLineOption); + QCommandLineOption addVersionOption(); + QCommandLineOption addHelpOption(); + void setApplicationDescription(const QString &description); + QString applicationDescription() const; + void addPositionalArgument(const QString &name, const QString &description, const QString &syntax = QString()); + void clearPositionalArguments(); + void process(const QStringList &arguments) /ReleaseGIL/; + void process(const QCoreApplication &app) /ReleaseGIL/; + bool parse(const QStringList &arguments); + QString errorText() const; + bool isSet(const QString &name) const; + QString value(const QString &name) const; + QStringList values(const QString &name) const; + bool isSet(const QCommandLineOption &option) const; + QString value(const QCommandLineOption &option) const; + QStringList values(const QCommandLineOption &option) const; + QStringList positionalArguments() const; + QStringList optionNames() const; + QStringList unknownOptionNames() const; + void showHelp(int exitCode = 0) /ReleaseGIL/; + QString helpText() const; +%If (Qt_5_4_0 -) + bool addOptions(const QList &options); +%End +%If (Qt_5_4_0 -) + void showVersion(); +%End +%If (Qt_5_6_0 -) + + enum OptionsAfterPositionalArgumentsMode + { + ParseAsOptions, + ParseAsPositionalArguments, + }; + +%End +%If (Qt_5_6_0 -) + void setOptionsAfterPositionalArgumentsMode(QCommandLineParser::OptionsAfterPositionalArgumentsMode mode); +%End + +private: + QCommandLineParser(const QCommandLineParser &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qconcatenatetablesproxymodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qconcatenatetablesproxymodel.sip new file mode 100644 index 0000000..9ccfc1f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qconcatenatetablesproxymodel.sip @@ -0,0 +1,96 @@ +// qconcatenatetablesproxymodel.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_13_0 -) + +class QConcatenateTablesProxyModel : public QAbstractItemModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QConcatenateTablesProxyModel(QObject *parent /TransferThis/ = 0); + virtual ~QConcatenateTablesProxyModel(); + void addSourceModel(QAbstractItemModel *sourceModel /GetWrapper/); +%MethodCode + // We want to keep a reference to the model but this is in addition to the + // existing ones and does not replace them - so we can't use /KeepReference/. + sipCpp->addSourceModel(a0); + + // Use the user object as a list of the references. + PyObject *user = sipGetUserObject((sipSimpleWrapper *)sipSelf); + + if (!user) + { + user = PyList_New(0); + sipSetUserObject((sipSimpleWrapper *)sipSelf, user); + } + + if (user) + PyList_Append(user, a0Wrapper); +%End + + void removeSourceModel(QAbstractItemModel *sourceModel /GetWrapper/); +%MethodCode + // Discard the extra model reference that we took in addSourceModel(). + sipCpp->removeSourceModel(a0); + + // Use the user object as a list of the references. + PyObject *user = sipGetUserObject((sipSimpleWrapper *)sipSelf); + + if (user) + { + Py_ssize_t i = 0; + + // Note that we deal with an object appearing in the list more than once. + while (i < PyList_Size(user)) + if (PyList_GetItem(user, i) == a0Wrapper) + PyList_SetSlice(user, i, i + 1, NULL); + else + ++i; + } +%End + + QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; + QModelIndex mapToSource(const QModelIndex &proxyIndex) const; + virtual QVariant data(const QModelIndex &index, int role = Qt::ItemDataRole::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::ItemDataRole::EditRole); + virtual QMap itemData(const QModelIndex &proxyIndex) const; + virtual bool setItemData(const QModelIndex &index, const QMap &roles); + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex parent(const QModelIndex &index) const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::ItemDataRole::DisplayRole) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; + virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + virtual QSize span(const QModelIndex &index) const; +%If (Qt_5_15_0 -) + QList sourceModels() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcoreapplication.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcoreapplication.sip new file mode 100644 index 0000000..adb6c5f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcoreapplication.sip @@ -0,0 +1,377 @@ +// qcoreapplication.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QCoreApplication : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QCoreApplication(SIP_PYLIST argv /TypeHint="List[str]"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv)]; +%MethodCode + // The Python interface is a list of argument strings that is modified. + + int argc; + char **argv; + + // Convert the list. + if ((argv = pyqt5_from_argv_list(a0, argc)) == NULL) + sipIsErr = 1; + else + { + // Create it now the arguments are right. + static int nargc; + nargc = argc; + + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQCoreApplication(nargc, argv); + Py_END_ALLOW_THREADS + + // Now modify the original list. + pyqt5_update_argv_list(a0, argc, argv); + } +%End + + virtual ~QCoreApplication() /ReleaseGIL/; +%MethodCode + pyqt5_cleanup_qobjects(); +%End + + static void setOrganizationDomain(const QString &orgDomain); + static QString organizationDomain(); + static void setOrganizationName(const QString &orgName); + static QString organizationName(); + static void setApplicationName(const QString &application); + static QString applicationName(); + static QStringList arguments(); + static QCoreApplication *instance(); + static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%If (Py_v3) + static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; +%End + static void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::ProcessEventsFlag::AllEvents) /ReleaseGIL/; + static void processEvents(QEventLoop::ProcessEventsFlags flags, int maxtime) /ReleaseGIL/; + static void exit(int returnCode = 0); + static bool sendEvent(QObject *receiver, QEvent *event) /ReleaseGIL/; + static void postEvent(QObject *receiver, QEvent *event /Transfer/, int priority = Qt::EventPriority::NormalEventPriority); + static void sendPostedEvents(QObject *receiver = 0, int eventType = 0) /ReleaseGIL/; + static void removePostedEvents(QObject *receiver, int eventType = 0); + static bool hasPendingEvents(); + virtual bool notify(QObject *, QEvent *) /ReleaseGIL/; + static bool startingUp(); + static bool closingDown(); + static QString applicationDirPath(); + static QString applicationFilePath(); + static void setLibraryPaths(const QStringList &); + static QStringList libraryPaths(); + static void addLibraryPath(const QString &); + static void removeLibraryPath(const QString &); + static bool installTranslator(QTranslator *messageFile); + static bool removeTranslator(QTranslator *messageFile); + static QString translate(const char *context, const char *sourceText /Encoding="UTF-8"/, const char *disambiguation = 0, int n = -1); + static void flush() /ReleaseGIL/; + static void setAttribute(Qt::ApplicationAttribute attribute, bool on = true); + static bool testAttribute(Qt::ApplicationAttribute attribute); + +public slots: + static void quit(); + +signals: + void aboutToQuit(); + +protected: + virtual bool event(QEvent *); + +public: + static void setApplicationVersion(const QString &version); + static QString applicationVersion(); + static qint64 applicationPid(); + static QAbstractEventDispatcher *eventDispatcher(); + static void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher /Transfer/); + static bool isQuitLockEnabled(); + static void setQuitLockEnabled(bool enabled); + void installNativeEventFilter(QAbstractNativeEventFilter *filterObj); + void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj); +%If (Qt_5_3_0 -) + static void setSetuidAllowed(bool allow); +%End +%If (Qt_5_3_0 -) + static bool isSetuidAllowed(); +%End + SIP_PYOBJECT __enter__(); +%MethodCode + // Just return a reference to self. + sipRes = sipSelf; + Py_INCREF(sipRes); +%End + + void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); +%MethodCode + // Make sure the QCoreApplication is destroyed. + delete sipCpp; +%End +}; + +void qAddPostRoutine(SIP_PYCALLABLE); +%MethodCode + // Add it to the list of post routines if it already exists. + if (qtcore_PostRoutines != NULL) + { + // See if there is an empty slot. + bool app = true; + + for (Py_ssize_t i = 0; i < PyList_Size(qtcore_PostRoutines); ++i) + if (PyList_GetItem(qtcore_PostRoutines, i) == Py_None) + { + Py_INCREF(a0); + PyList_SetItem(qtcore_PostRoutines, i, a0); + + app = false; + + break; + } + + if (app && PyList_Append(qtcore_PostRoutines, a0) < 0) + sipIsErr = 1; + } + else if ((qtcore_PostRoutines = PyList_New(1)) != NULL) + { + Py_INCREF(a0); + PyList_SetItem(qtcore_PostRoutines, 0, a0); + + qAddPostRoutine(qtcore_CallPostRoutines); + } + else + { + sipIsErr = 1; + } +%End + +void qRemovePostRoutine(SIP_PYCALLABLE); +%MethodCode + // Remove it from the list of post routines if it exists. + if (qtcore_PostRoutines != NULL) + for (Py_ssize_t i = 0; i < PyList_Size(qtcore_PostRoutines); ++i) + if (PyList_GetItem(qtcore_PostRoutines, i) == a0) + { + Py_INCREF(Py_None); + PyList_SetItem(qtcore_PostRoutines, i, Py_None); + + break; + } +%End + +%If (Qt_5_1_0 -) +void qAddPreRoutine(SIP_PYCALLABLE routine /TypeHint="Callable[[], None]"/); +%MethodCode + // Add it to the list of pre routines if it already exists. + if (qtcore_PreRoutines != NULL) + { + if (PyList_Append(qtcore_PreRoutines, a0) < 0) + sipIsErr = 1; + } + else if ((qtcore_PreRoutines = PyList_New(1)) != NULL) + { + Py_INCREF(a0); + PyList_SetItem(qtcore_PreRoutines, 0, a0); + + qAddPreRoutine(qtcore_CallPreRoutines); + } + else + { + sipIsErr = 1; + } +%End + +%End +// Module code needed by qAddPreRoutine, qAddPostRoutine() and qRemovePostRoutine(). +%ModuleCode +#if QT_VERSION >= 0x050100 +// The list of Python pre routines. +static PyObject *qtcore_PreRoutines = NULL; + +// Call all of the registered Python pre routines. +static void qtcore_CallPreRoutines() +{ + for (Py_ssize_t i = 0; i < PyList_Size(qtcore_PreRoutines); ++i) + { + PyObject *pr = PyList_GetItem(qtcore_PreRoutines, i); + + if (pr != Py_None) + { + PyObject *res = PyObject_CallObject(pr, NULL); + + Py_XDECREF(res); + } + } +} +#endif + + +// The list of Python post routines. +static PyObject *qtcore_PostRoutines = NULL; + +// Call all of the registered Python post routines. +static void qtcore_CallPostRoutines() +{ + for (Py_ssize_t i = 0; i < PyList_Size(qtcore_PostRoutines); ++i) + { + PyObject *pr = PyList_GetItem(qtcore_PostRoutines, i); + + if (pr != Py_None) + { + PyObject *res = PyObject_CallObject(pr, NULL); + + Py_XDECREF(res); + } + } +} +%End +void pyqtRemoveInputHook(); +%MethodCode + // Clear the Python input hook installed when the module was initialised. + PyOS_InputHook = 0; +%End + +void pyqtRestoreInputHook(); +%MethodCode + // Restore the input hook. + PyOS_InputHook = qtcore_input_hook; +%End + +%ModuleCode +#include +#include + +#if defined(Q_OS_WIN) +#include +#include +#else +#include +#endif + +// This is the input hook that will process events while the interpreter is +// waiting for interactive input. +extern "C" {static int qtcore_input_hook();} + +static int qtcore_input_hook() +{ + QCoreApplication *app = QCoreApplication::instance(); + + if (app && app->thread() == QThread::currentThread()) + { +#if defined(Q_OS_WIN) + QTimer timer; + QObject::connect(&timer, SIGNAL(timeout()), app, SLOT(quit())); + + while (!_kbhit()) + { + // The delay is based on feedback from users. + timer.start(35); + QCoreApplication::exec(); + timer.stop(); + } + + QObject::disconnect(&timer, SIGNAL(timeout()), app, SLOT(quit())); +#else + QSocketNotifier notifier(0, QSocketNotifier::Read, 0); + QObject::connect(¬ifier, SIGNAL(activated(int)), app, SLOT(quit())); + QCoreApplication::exec(); + QObject::disconnect(¬ifier, SIGNAL(activated(int)), app, SLOT(quit())); +#endif + } + + return 0; +} +%End + +%PostInitialisationCode +// Process events from the input hook. +PyOS_InputHook = qtcore_input_hook; +%End + +%ExportedTypeHintCode +# Support for QDate, QDateTime and QTime. +import datetime + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal] +%End + +%TypeHintCode +# Support for QDate, QDateTime and QTime. +import datetime + +# Support for Q_ENUM and Q_FLAG. +import enum + + +# Support for new-style signals and slots. +class pyqtSignal: + + signatures = ... # type: typing.Tuple[str, ...] + + def __init__(self, *types: typing.Any, name: str = ...) -> None: ... + + @typing.overload + def __get__(self, instance: None, owner: typing.Type['QObject']) -> 'pyqtSignal': ... + + @typing.overload + def __get__(self, instance: 'QObject', owner: typing.Type['QObject']) -> 'pyqtBoundSignal': ... + + + +class pyqtBoundSignal: + + signal = ... # type: str + + def __getitem__(self, key: object) -> 'pyqtBoundSignal': ... + + def connect(self, slot: 'PYQT_SLOT') -> 'QMetaObject.Connection': ... + + @typing.overload + def disconnect(self) -> None: ... + + @typing.overload + def disconnect(self, slot: typing.Union['PYQT_SLOT', 'QMetaObject.Connection']) -> None: ... + + def emit(self, *args: typing.Any) -> None: ... + + +FuncT = typing.TypeVar('FuncT', bound=typing.Callable) +def pyqtSlot(*types, name: typing.Optional[str] = ..., result: typing.Optional[str] = ...) -> typing.Callable[[FuncT], FuncT]: ... + + +# For QObject.findChild() and QObject.findChildren(). +QObjectT = typing.TypeVar('QObjectT', bound=QObject) + + +# Convenient type aliases. +PYQT_SIGNAL = typing.Union[pyqtSignal, pyqtBoundSignal] +PYQT_SLOT = typing.Union[typing.Callable[..., None], pyqtBoundSignal] +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcoreevent.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcoreevent.sip new file mode 100644 index 0000000..8689d11 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcoreevent.sip @@ -0,0 +1,274 @@ +// qcoreevent.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QEvent /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + switch (sipCpp->type()) + { + case QEvent::Timer: + sipType = sipType_QTimerEvent; + break; + + case QEvent::ChildAdded: + case QEvent::ChildPolished: + case QEvent::ChildRemoved: + sipType = sipType_QChildEvent; + break; + + case QEvent::DynamicPropertyChange: + sipType = sipType_QDynamicPropertyChangeEvent; + break; + + case QEvent::StateMachineSignal: + sipType = sipType_QStateMachine_SignalEvent; + break; + + case QEvent::StateMachineWrapped: + sipType = sipType_QStateMachine_WrappedEvent; + break; + + default: + sipType = 0; + } +%End + +public: + enum Type + { + None /PyName=None_/, + Timer, + MouseButtonPress, + MouseButtonRelease, + MouseButtonDblClick, + MouseMove, + KeyPress, + KeyRelease, + FocusIn, + FocusOut, + Enter, + Leave, + Paint, + Move, + Resize, + Show, + Hide, + Close, + ParentChange, + ParentAboutToChange, + ThreadChange, + WindowActivate, + WindowDeactivate, + ShowToParent, + HideToParent, + Wheel, + WindowTitleChange, + WindowIconChange, + ApplicationWindowIconChange, + ApplicationFontChange, + ApplicationLayoutDirectionChange, + ApplicationPaletteChange, + PaletteChange, + Clipboard, + MetaCall, + SockAct, + WinEventAct, + DeferredDelete, + DragEnter, + DragMove, + DragLeave, + Drop, + ChildAdded, + ChildPolished, + ChildRemoved, + PolishRequest, + Polish, + LayoutRequest, + UpdateRequest, + UpdateLater, + ContextMenu, + InputMethod, + TabletMove, + LocaleChange, + LanguageChange, + LayoutDirectionChange, + TabletPress, + TabletRelease, + OkRequest, + IconDrag, + FontChange, + EnabledChange, + ActivationChange, + StyleChange, + IconTextChange, + ModifiedChange, + MouseTrackingChange, + WindowBlocked, + WindowUnblocked, + WindowStateChange, + ToolTip, + WhatsThis, + StatusTip, + ActionChanged, + ActionAdded, + ActionRemoved, + FileOpen, + Shortcut, + ShortcutOverride, + WhatsThisClicked, + ToolBarChange, + ApplicationActivate, + ApplicationActivated, + ApplicationDeactivate, + ApplicationDeactivated, + QueryWhatsThis, + EnterWhatsThisMode, + LeaveWhatsThisMode, + ZOrderChange, + HoverEnter, + HoverLeave, + HoverMove, + GraphicsSceneMouseMove, + GraphicsSceneMousePress, + GraphicsSceneMouseRelease, + GraphicsSceneMouseDoubleClick, + GraphicsSceneContextMenu, + GraphicsSceneHoverEnter, + GraphicsSceneHoverMove, + GraphicsSceneHoverLeave, + GraphicsSceneHelp, + GraphicsSceneDragEnter, + GraphicsSceneDragMove, + GraphicsSceneDragLeave, + GraphicsSceneDrop, + GraphicsSceneWheel, + GraphicsSceneResize, + GraphicsSceneMove, + KeyboardLayoutChange, + DynamicPropertyChange, + TabletEnterProximity, + TabletLeaveProximity, + NonClientAreaMouseMove, + NonClientAreaMouseButtonPress, + NonClientAreaMouseButtonRelease, + NonClientAreaMouseButtonDblClick, + MacSizeChange, + ContentsRectChange, + CursorChange, + ToolTipChange, + GrabMouse, + UngrabMouse, + GrabKeyboard, + UngrabKeyboard, + StateMachineSignal, + StateMachineWrapped, + TouchBegin, + TouchUpdate, + TouchEnd, +%If (Qt_5_2_0 -) + NativeGesture, +%End + RequestSoftwareInputPanel, + CloseSoftwareInputPanel, + WinIdChange, + Gesture, + GestureOverride, + FocusAboutToChange, + ScrollPrepare, + Scroll, + Expose, + InputMethodQuery, + OrientationChange, + TouchCancel, + PlatformPanel, +%If (Qt_5_1_0 -) + ApplicationStateChange, +%End +%If (Qt_5_4_0 -) + ReadOnlyChange, +%End +%If (Qt_5_5_0 -) + PlatformSurface, +%End +%If (Qt_5_9_0 -) + TabletTrackingChange, +%End + EnterEditFocus, + LeaveEditFocus, + User, + MaxUser, + }; + + explicit QEvent(QEvent::Type type); + QEvent(const QEvent &other); + virtual ~QEvent(); + QEvent::Type type() const; + bool spontaneous() const; + void setAccepted(bool accepted); + bool isAccepted() const; + void accept(); + void ignore(); + static int registerEventType(int hint = -1); +}; + +class QTimerEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTimerEvent(int timerId); + virtual ~QTimerEvent(); + int timerId() const; +}; + +class QChildEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QChildEvent(QEvent::Type type, QObject *child); + virtual ~QChildEvent(); + QObject *child() const; + bool added() const; + bool polished() const; + bool removed() const; +}; + +class QDynamicPropertyChangeEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + explicit QDynamicPropertyChangeEvent(const QByteArray &name); + virtual ~QDynamicPropertyChangeEvent(); + QByteArray propertyName() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcryptographichash.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcryptographichash.sip new file mode 100644 index 0000000..88c9d59 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qcryptographichash.sip @@ -0,0 +1,79 @@ +// qcryptographichash.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCryptographicHash +{ +%TypeHeaderCode +#include +%End + +public: + enum Algorithm + { + Md4, + Md5, + Sha1, + Sha224, + Sha256, + Sha384, + Sha512, +%If (Qt_5_1_0 -) + Sha3_224, +%End +%If (Qt_5_1_0 -) + Sha3_256, +%End +%If (Qt_5_1_0 -) + Sha3_384, +%End +%If (Qt_5_1_0 -) + Sha3_512, +%End +%If (Qt_5_9_2 -) + Keccak_224, +%End +%If (Qt_5_9_2 -) + Keccak_256, +%End +%If (Qt_5_9_2 -) + Keccak_384, +%End +%If (Qt_5_9_2 -) + Keccak_512, +%End + }; + + explicit QCryptographicHash(QCryptographicHash::Algorithm method); + ~QCryptographicHash(); + void reset(); + void addData(const char *data /Array/, int length /ArraySize/); + void addData(const QByteArray &data); + bool addData(QIODevice *device); + QByteArray result() const; + static QByteArray hash(const QByteArray &data, QCryptographicHash::Algorithm method); +%If (Qt_5_12_0 -) + static int hashLength(QCryptographicHash::Algorithm method); +%End + +private: + QCryptographicHash(const QCryptographicHash &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdatastream.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdatastream.sip new file mode 100644 index 0000000..ebcc860 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdatastream.sip @@ -0,0 +1,475 @@ +// qdatastream.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDataStream +{ +%TypeHeaderCode +#include +%End + +public: + enum Version + { + Qt_1_0, + Qt_2_0, + Qt_2_1, + Qt_3_0, + Qt_3_1, + Qt_3_3, + Qt_4_0, + Qt_4_1, + Qt_4_2, + Qt_4_3, + Qt_4_4, + Qt_4_5, + Qt_4_6, + Qt_4_7, + Qt_4_8, + Qt_4_9, + Qt_5_0, +%If (Qt_5_1_0 -) + Qt_5_1, +%End +%If (Qt_5_2_0 -) + Qt_5_2, +%End +%If (Qt_5_3_0 -) + Qt_5_3, +%End +%If (Qt_5_4_0 -) + Qt_5_4, +%End +%If (Qt_5_5_0 -) + Qt_5_5, +%End +%If (Qt_5_6_0 -) + Qt_5_6, +%End +%If (Qt_5_7_0 -) + Qt_5_7, +%End +%If (Qt_5_8_0 -) + Qt_5_8, +%End +%If (Qt_5_9_0 -) + Qt_5_9, +%End +%If (Qt_5_10_0 -) + Qt_5_10, +%End +%If (Qt_5_11_0 -) + Qt_5_11, +%End +%If (Qt_5_12_0 -) + Qt_5_12, +%End +%If (Qt_5_13_0 -) + Qt_5_13, +%End +%If (Qt_5_14_0 -) + Qt_5_14, +%End +%If (Qt_5_15_0 -) + Qt_5_15, +%End + }; + + enum ByteOrder + { + BigEndian, + LittleEndian, + }; + + enum Status + { + Ok, + ReadPastEnd, + ReadCorruptData, + WriteFailed, + }; + + QDataStream(); + explicit QDataStream(QIODevice *); + QDataStream(QByteArray * /Constrained/, QIODevice::OpenMode flags); + QDataStream(const QByteArray & /Constrained/); + ~QDataStream(); + QIODevice *device() const; + void setDevice(QIODevice *); + bool atEnd() const; + QDataStream::Status status() const; + void setStatus(QDataStream::Status status); + void resetStatus(); + QDataStream::ByteOrder byteOrder() const; + void setByteOrder(QDataStream::ByteOrder); + int version() const; + void setVersion(int v); + int skipRawData(int len) /ReleaseGIL/; +// Extra methods to give explicit control over the simple data types being read and written. +int readInt() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +qint8 readInt8() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +quint8 readUInt8() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +qint16 readInt16() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +quint16 readUInt16() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +qint32 readInt32() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +quint32 readUInt32() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +qint64 readInt64() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +quint64 readUInt64() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +bool readBool() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +float readFloat() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +double readDouble() /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp >> sipRes; + Py_END_ALLOW_THREADS +%End + +SIP_PYOBJECT readString() /ReleaseGIL,TypeHint="Py_v3:bytes;str"/; +%MethodCode + char *s; + + Py_BEGIN_ALLOW_THREADS + *sipCpp >> s; + Py_END_ALLOW_THREADS + + if (s) + { + sipRes = SIPBytes_FromString(s); + delete[] s; + } + else + { + sipRes = Py_None; + Py_INCREF(Py_None); + } +%End + +void writeInt(int i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeInt8(qint8 i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeUInt8(quint8 i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeInt16(qint16 i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeUInt16(quint16 i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeInt32(qint32 i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeUInt32(quint32 i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeInt64(qint64 i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeUInt64(quint64 i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeBool(bool i) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeFloat(float f) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeDouble(double f) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End + +void writeString(const char *str /Encoding="None"/) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << a0; + Py_END_ALLOW_THREADS +%End +// Extra methods to support v2 of the QString and QVariant APIs. +QString readQString() /ReleaseGIL/; +%MethodCode + sipRes = new QString; + + Py_BEGIN_ALLOW_THREADS + *sipCpp >> *sipRes; + Py_END_ALLOW_THREADS +%End + +void writeQString(const QString &qstr) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << *a0; + Py_END_ALLOW_THREADS +%End + +QStringList readQStringList() /ReleaseGIL/; +%MethodCode + sipRes = new QStringList; + + Py_BEGIN_ALLOW_THREADS + *sipCpp >> *sipRes; + Py_END_ALLOW_THREADS +%End + +void writeQStringList(const QStringList &qstrlst) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << *a0; + Py_END_ALLOW_THREADS +%End + +QVariant readQVariant() /ReleaseGIL/; +%MethodCode + sipRes = new QVariant; + + Py_BEGIN_ALLOW_THREADS + *sipCpp >> *sipRes; + Py_END_ALLOW_THREADS +%End + +void writeQVariant(const QVariant &qvar) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << *a0; + Py_END_ALLOW_THREADS +%End + +QVariantList readQVariantList() /ReleaseGIL/; +%MethodCode + sipRes = new QVariantList; + + Py_BEGIN_ALLOW_THREADS + *sipCpp >> *sipRes; + Py_END_ALLOW_THREADS +%End + +void writeQVariantList(const QVariantList &qvarlst) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << *a0; + Py_END_ALLOW_THREADS +%End + +QVariantMap readQVariantMap() /ReleaseGIL/; +%MethodCode + sipRes = new QVariantMap; + + Py_BEGIN_ALLOW_THREADS + *sipCpp >> *sipRes; + Py_END_ALLOW_THREADS +%End + +void writeQVariantMap(const QVariantMap &qvarmap) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << *a0; + Py_END_ALLOW_THREADS +%End + +QVariantHash readQVariantHash() /ReleaseGIL/; +%MethodCode + sipRes = new QVariantHash; + + Py_BEGIN_ALLOW_THREADS + *sipCpp >> *sipRes; + Py_END_ALLOW_THREADS +%End + +void writeQVariantHash(const QVariantHash &qvarhash) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + *sipCpp << *a0; + Py_END_ALLOW_THREADS +%End + SIP_PYOBJECT readBytes() /TypeHint="Py_v3:bytes;str",ReleaseGIL/; +%MethodCode + char *s; + uint l; + + Py_BEGIN_ALLOW_THREADS + sipCpp->readBytes(s, l); + Py_END_ALLOW_THREADS + + if ((sipRes = SIPBytes_FromStringAndSize(s, l)) == NULL) + sipIsErr = 1; + + if (s) + delete[] s; +%End + + SIP_PYOBJECT readRawData(int len) /TypeHint="Py_v3:bytes;str",ReleaseGIL/; +%MethodCode + char *s = new char[a0]; + + Py_BEGIN_ALLOW_THREADS + sipCpp->readRawData(s, a0); + Py_END_ALLOW_THREADS + + sipRes = SIPBytes_FromStringAndSize(s, a0); + + if (!sipRes) + sipIsErr = 1; + + delete[] s; +%End + + QDataStream &writeBytes(const char * /Array/, uint len /ArraySize/) /ReleaseGIL/; + int writeRawData(const char * /Array/, int len /ArraySize/) /ReleaseGIL/; + + enum FloatingPointPrecision + { + SinglePrecision, + DoublePrecision, + }; + + QDataStream::FloatingPointPrecision floatingPointPrecision() const; + void setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision); +%If (Qt_5_7_0 -) + void startTransaction(); +%End +%If (Qt_5_7_0 -) + bool commitTransaction(); +%End +%If (Qt_5_7_0 -) + void rollbackTransaction(); +%End +%If (Qt_5_7_0 -) + void abortTransaction(); +%End + +private: + QDataStream(const QDataStream &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdatetime.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdatetime.sip new file mode 100644 index 0000000..d3c9c4c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdatetime.sip @@ -0,0 +1,636 @@ +// qdatetime.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDate /TypeHintIn="Union[QDate, datetime.date]"/ +{ +%TypeHeaderCode +#include +%End + +%TypeCode +#include +%End + +%ConvertToTypeCode +// Allow a Python date object whenever a QDate is expected. + +if (sipIsErr == NULL) + return (sipGetDate(sipPy, 0) || + sipCanConvertToType(sipPy, sipType_QDate, SIP_NO_CONVERTORS)); + +sipDateDef py_date; + +if (sipGetDate(sipPy, &py_date)) +{ + *sipCppPtr = new QDate(py_date.pd_year, + py_date.pd_month, + py_date.pd_day); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QDate, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"iii", sipCpp->year(), sipCpp->month(), sipCpp->day()); +%End + +public: + QDate(); + QDate(int y, int m, int d); +%If (Qt_5_14_0 -) + QDate(int y, int m, int d, QCalendar cal); +%End + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QDate()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QDate()"); + #endif + } + else + { + sipRes = + #if PY_MAJOR_VERSION >= 3 + PyUnicode_FromFormat + #else + PyString_FromFormat + #endif + ("PyQt5.QtCore.QDate(%i, %i, %i)", sipCpp->year(), + sipCpp->month(), sipCpp->day()); + } +%End + + long __hash__() const; +%MethodCode + sipRes = qHash(sipCpp->toString(Qt::ISODate)); +%End + + SIP_PYOBJECT toPyDate() const /TypeHint="datetime.date"/; +%MethodCode + // Convert to a Python date object. + sipDateDef py_date; + + py_date.pd_year = sipCpp->year(); + py_date.pd_month = sipCpp->month(); + py_date.pd_day = sipCpp->day(); + + sipRes = sipFromDate(&py_date); +%End + + bool isNull() const; + int __bool__() const; +%MethodCode + sipRes = !sipCpp->isNull(); +%End + + bool isValid() const; + int year() const; +%If (Qt_5_14_0 -) + int year(QCalendar cal) const; +%End + int month() const; +%If (Qt_5_14_0 -) + int month(QCalendar cal) const; +%End + int day() const; +%If (Qt_5_14_0 -) + int day(QCalendar cal) const; +%End + int dayOfWeek() const; +%If (Qt_5_14_0 -) + int dayOfWeek(QCalendar cal) const; +%End + int dayOfYear() const; +%If (Qt_5_14_0 -) + int dayOfYear(QCalendar cal) const; +%End + int daysInMonth() const; +%If (Qt_5_14_0 -) + int daysInMonth(QCalendar cal) const; +%End + int daysInYear() const; +%If (Qt_5_14_0 -) + int daysInYear(QCalendar cal) const; +%End + int weekNumber(int *yearNumber = 0) const; + static QString shortMonthName(int month, QDate::MonthNameType type = QDate::DateFormat); + static QString shortDayName(int weekday, QDate::MonthNameType type = QDate::DateFormat); + static QString longMonthName(int month, QDate::MonthNameType type = QDate::DateFormat); + static QString longDayName(int weekday, QDate::MonthNameType type = QDate::DateFormat); + QString toString(Qt::DateFormat format = Qt::TextDate) const; +%If (Qt_5_14_0 -) + QString toString(Qt::DateFormat f, QCalendar cal) const; +%End + QString toString(const QString &format) const; +%If (Qt_5_14_0 -) + QString toString(const QString &format, QCalendar cal) const; +%End + QDate addDays(qint64 days) const; + QDate addMonths(int months) const; +%If (Qt_5_14_0 -) + QDate addMonths(int months, QCalendar cal) const; +%End + QDate addYears(int years) const; +%If (Qt_5_14_0 -) + QDate addYears(int years, QCalendar cal) const; +%End + qint64 daysTo(const QDate &) const; + bool operator==(const QDate &other) const; + bool operator!=(const QDate &other) const; + bool operator<(const QDate &other) const; + bool operator<=(const QDate &other) const; + bool operator>(const QDate &other) const; + bool operator>=(const QDate &other) const; + static QDate currentDate(); + static QDate fromString(const QString &string, Qt::DateFormat format = Qt::TextDate); + static QDate fromString(const QString &s, const QString &format); +%If (Qt_5_14_0 -) + static QDate fromString(const QString &s, const QString &format, QCalendar cal); +%End + static bool isValid(int y, int m, int d); + static bool isLeapYear(int year); + static QDate fromJulianDay(qint64 jd); + qint64 toJulianDay() const; + bool setDate(int year, int month, int date); +%If (- Qt_5_7_0) +%If (Qt_5_15_0 -) + void getDate(int *year, int *month, int *day); +%End +%End +%If (Qt_5_7_0 -) + void getDate(int *year, int *month, int *day) const; +%End + + enum MonthNameType + { + DateFormat, + StandaloneFormat, + }; + +%If (Qt_5_14_0 -) + QDateTime startOfDay(Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0) const; +%End +%If (Qt_5_14_0 -) + QDateTime endOfDay(Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0) const; +%End +%If (Qt_5_14_0 -) + QDateTime startOfDay(const QTimeZone &zone) const; +%End +%If (Qt_5_14_0 -) + QDateTime endOfDay(const QTimeZone &zone) const; +%End +%If (Qt_5_14_0 -) + bool setDate(int year, int month, int day, QCalendar cal); +%End +}; + +class QTime /TypeHintIn="Union[QTime, datetime.time]"/ +{ +%TypeHeaderCode +#include +%End + +%TypeCode +#include +%End + +%ConvertToTypeCode +// Allow a Python time object whenever a QTime is expected. + +if (sipIsErr == NULL) + return (sipGetTime(sipPy, 0) || + sipCanConvertToType(sipPy, sipType_QTime, SIP_NO_CONVERTORS)); + +sipTimeDef py_time; + +if (sipGetTime(sipPy, &py_time)) +{ + *sipCppPtr = new QTime(py_time.pt_hour, + py_time.pt_minute, + py_time.pt_second, + py_time.pt_microsecond / 1000); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QTime, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"iiii", sipCpp->hour(), sipCpp->minute(), sipCpp->second(), sipCpp->msec()); +%End + +public: + QTime(); + QTime(int h, int m, int second = 0, int msec = 0); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QTime()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QTime()"); + #endif + } + else + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QTime(%i, %i", sipCpp->hour(), + sipCpp->minute()); + + if (sipCpp->second() || sipCpp->msec()) + { + qpycore_Unicode_ConcatAndDel(&sipRes, + PyUnicode_FromFormat(", %i", sipCpp->second())); + + if (sipCpp->msec()) + qpycore_Unicode_ConcatAndDel(&sipRes, + PyUnicode_FromFormat(", %i", sipCpp->msec())); + } + + qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")")); + #else + sipRes = PyString_FromFormat("PyQt5.QtCore.QTime(%i, %i", sipCpp->hour(), + sipCpp->minute()); + + if (sipCpp->second() || sipCpp->msec()) + { + PyString_ConcatAndDel(&sipRes, + PyString_FromFormat(", %i", sipCpp->second())); + + if (sipCpp->msec()) + PyString_ConcatAndDel(&sipRes, + PyString_FromFormat(", %i", sipCpp->msec())); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } +%End + + long __hash__() const; +%MethodCode + sipRes = qHash(sipCpp->toString(Qt::ISODate)); +%End + + SIP_PYOBJECT toPyTime() const /TypeHint="datetime.time"/; +%MethodCode + // Convert to a Python time object. + sipTimeDef py_time; + + py_time.pt_hour = sipCpp->hour(); + py_time.pt_minute = sipCpp->minute(); + py_time.pt_second = sipCpp->second(); + py_time.pt_microsecond = sipCpp->msec() * 1000; + + sipRes = sipFromTime(&py_time); +%End + + bool isNull() const; + int __bool__() const; +%MethodCode + sipRes = !sipCpp->isNull(); +%End + + bool isValid() const; + int hour() const; + int minute() const; + int second() const; + int msec() const; + QString toString(Qt::DateFormat format = Qt::TextDate) const; + QString toString(const QString &format) const; + bool setHMS(int h, int m, int s, int msec = 0); + QTime addSecs(int secs) const; + int secsTo(const QTime &) const; + QTime addMSecs(int ms) const; + int msecsTo(const QTime &) const; + bool operator==(const QTime &other) const; + bool operator!=(const QTime &other) const; + bool operator<(const QTime &other) const; + bool operator<=(const QTime &other) const; + bool operator>(const QTime &other) const; + bool operator>=(const QTime &other) const; + static QTime currentTime(); + static QTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate); + static QTime fromString(const QString &s, const QString &format); + static bool isValid(int h, int m, int s, int msec = 0); + void start(); + int restart(); + int elapsed() const; +%If (Qt_5_2_0 -) + static QTime fromMSecsSinceStartOfDay(int msecs); +%End +%If (Qt_5_2_0 -) + int msecsSinceStartOfDay() const; +%End +}; + +class QDateTime /TypeHintIn="Union[QDateTime, datetime.datetime]"/ +{ +%TypeHeaderCode +#include +%End + +%TypeCode +#include +%End + +%ConvertToTypeCode +// Allow a Python datetime object whenever a QDateTime is expected. + +if (sipIsErr == NULL) + return (sipGetDateTime(sipPy, 0, 0) || + sipCanConvertToType(sipPy, sipType_QDateTime, SIP_NO_CONVERTORS)); + +sipDateDef py_date; +sipTimeDef py_time; + +if (sipGetDateTime(sipPy, &py_date, &py_time)) +{ + QDate qdate(py_date.pd_year, + py_date.pd_month, + py_date.pd_day); + + QTime qtime(py_time.pt_hour, + py_time.pt_minute, + py_time.pt_second, + py_time.pt_microsecond / 1000); + + QDateTime *qdt = new QDateTime(qdate, qtime); + + *sipCppPtr = qdt; + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QDateTime, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End + +%PickleCode + QDate qd = sipCpp->date(); + QTime qt = sipCpp->time(); + + sipRes = Py_BuildValue((char *)"iiiiiiii", qd.year(), qd.month(), qd.day(), + qt.hour(), qt.minute(), qt.second(), qt.msec(), + (int)sipCpp->timeSpec()); +%End + +public: + QDateTime(); + QDateTime(const QDateTime &other); + explicit QDateTime(const QDate &); + QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec timeSpec = Qt::LocalTime); + QDateTime(int year, int month, int day, int hour, int minute, int second = 0, int msec = 0, int timeSpec = 0) /NoDerived/; +%MethodCode + // This ctor is mainly supplied to allow pickling. + QDate qd(a0, a1, a2); + QTime qt(a3, a4, a5, a6); + + sipCpp = new QDateTime(qd, qt, (Qt::TimeSpec)a7); +%End + + ~QDateTime(); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QDateTime()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QDateTime()"); + #endif + } + else + { + QDate qd = sipCpp->date(); + QTime qt = sipCpp->time(); + + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QDateTime(%i, %i, %i, %i, %i", + qd.year(), qd.month(), qd.day(), qt.hour(), qt.minute()); + + if (qt.second() || qt.msec() || sipCpp->timeSpec() != Qt::LocalTime) + { + qpycore_Unicode_ConcatAndDel(&sipRes, + PyUnicode_FromFormat(", %i", qt.second())); + + if (qt.msec() || sipCpp->timeSpec() != Qt::LocalTime) + { + qpycore_Unicode_ConcatAndDel(&sipRes, + PyUnicode_FromFormat(", %i", qt.msec())); + + if (sipCpp->timeSpec() != Qt::LocalTime) + qpycore_Unicode_ConcatAndDel(&sipRes, + PyUnicode_FromFormat(", PyQt5.QtCore.Qt.TimeSpec(%i)", + (int)sipCpp->timeSpec())); + } + } + + qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")")); + #else + sipRes = PyString_FromFormat("PyQt5.QtCore.QDateTime(%i, %i, %i, %i, %i", + qd.year(), qd.month(), qd.day(), qt.hour(), qt.minute()); + + if (qt.second() || qt.msec() || sipCpp->timeSpec() != Qt::LocalTime) + { + PyString_ConcatAndDel(&sipRes, + PyString_FromFormat(", %i", qt.second())); + + if (qt.msec() || sipCpp->timeSpec() != Qt::LocalTime) + { + PyString_ConcatAndDel(&sipRes, + PyString_FromFormat(", %i", qt.msec())); + + if (sipCpp->timeSpec() != Qt::LocalTime) + PyString_ConcatAndDel(&sipRes, + PyString_FromFormat(", PyQt5.QtCore.Qt.TimeSpec(%i)", + (int)sipCpp->timeSpec())); + } + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } +%End + + long __hash__() const; +%MethodCode + sipRes = qHash(sipCpp->toString(Qt::ISODate)); +%End + + SIP_PYOBJECT toPyDateTime() const /TypeHint="datetime.datetime"/; +%MethodCode + // Convert to a Python datetime object. + sipDateDef py_date; + QDate qd = sipCpp->date(); + + py_date.pd_year = qd.year(); + py_date.pd_month = qd.month(); + py_date.pd_day = qd.day(); + + sipTimeDef py_time; + QTime qt = sipCpp->time(); + + py_time.pt_hour = qt.hour(); + py_time.pt_minute = qt.minute(); + py_time.pt_second = qt.second(); + py_time.pt_microsecond = qt.msec() * 1000; + + sipRes = sipFromDateTime(&py_date, &py_time); +%End + + bool isNull() const; + int __bool__() const; +%MethodCode + sipRes = !sipCpp->isNull(); +%End + + bool isValid() const; + QDate date() const; + QTime time() const; + Qt::TimeSpec timeSpec() const; + uint toTime_t() const; + void setDate(const QDate &date); + void setTime(const QTime &time); + void setTimeSpec(Qt::TimeSpec spec); + void setTime_t(uint secsSince1Jan1970UTC); + QString toString(Qt::DateFormat format = Qt::TextDate) const; + QString toString(const QString &format) const; + QDateTime addDays(qint64 days) const; + QDateTime addMonths(int months) const; + QDateTime addYears(int years) const; + QDateTime addSecs(qint64 secs) const; + QDateTime addMSecs(qint64 msecs) const; + QDateTime toTimeSpec(Qt::TimeSpec spec) const; + QDateTime toLocalTime() const; + QDateTime toUTC() const; + qint64 daysTo(const QDateTime &) const; + qint64 secsTo(const QDateTime &) const; + bool operator==(const QDateTime &other) const; + bool operator!=(const QDateTime &other) const; + bool operator<(const QDateTime &other) const; + bool operator<=(const QDateTime &other) const; + bool operator>(const QDateTime &other) const; + bool operator>=(const QDateTime &other) const; + static QDateTime currentDateTime(); + static QDateTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate); + static QDateTime fromString(const QString &s, const QString &format); + static QDateTime fromTime_t(uint secsSince1Jan1970UTC); + qint64 toMSecsSinceEpoch() const; + void setMSecsSinceEpoch(qint64 msecs); + qint64 msecsTo(const QDateTime &) const; + static QDateTime currentDateTimeUtc(); + static QDateTime fromMSecsSinceEpoch(qint64 msecs); + static qint64 currentMSecsSinceEpoch(); + void swap(QDateTime &other /Constrained/); +%If (Qt_5_2_0 -) + QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec, int offsetSeconds); +%End +%If (Qt_5_2_0 -) + QDateTime(const QDate &date, const QTime &time, const QTimeZone &timeZone); +%End +%If (Qt_5_2_0 -) + int offsetFromUtc() const; +%End +%If (Qt_5_2_0 -) + QTimeZone timeZone() const; +%End +%If (Qt_5_2_0 -) + QString timeZoneAbbreviation() const; +%End +%If (Qt_5_2_0 -) + bool isDaylightTime() const; +%End +%If (Qt_5_2_0 -) + void setOffsetFromUtc(int offsetSeconds); +%End +%If (Qt_5_2_0 -) + void setTimeZone(const QTimeZone &toZone); +%End +%If (Qt_5_2_0 -) + QDateTime toOffsetFromUtc(int offsetSeconds) const; +%End +%If (Qt_5_2_0 -) + QDateTime toTimeZone(const QTimeZone &toZone) const; +%End +%If (Qt_5_2_0 -) + static QDateTime fromTime_t(uint secsSince1Jan1970UTC, Qt::TimeSpec spec, int offsetSeconds = 0); +%End +%If (Qt_5_2_0 -) + static QDateTime fromTime_t(uint secsSince1Jan1970UTC, const QTimeZone &timeZone); +%End +%If (Qt_5_2_0 -) + static QDateTime fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec, int offsetSeconds = 0); +%End +%If (Qt_5_2_0 -) + static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone); +%End +%If (Qt_5_8_0 -) + qint64 toSecsSinceEpoch() const; +%End +%If (Qt_5_8_0 -) + void setSecsSinceEpoch(qint64 secs); +%End +%If (Qt_5_8_0 -) + static QDateTime fromSecsSinceEpoch(qint64 secs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0); +%End +%If (Qt_5_8_0 -) + static QDateTime fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone); +%End +%If (Qt_5_8_0 -) + static qint64 currentSecsSinceEpoch(); +%End +%If (Qt_5_14_0 -) + static QDateTime fromString(const QString &s, const QString &format, QCalendar cal); +%End +%If (Qt_5_14_0 -) + + enum class YearRange + { + First, + Last, + }; + +%End +%If (Qt_5_15_0 -) + QString toString(const QString &format, QCalendar cal) const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QDate & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QDate & /Constrained/) /ReleaseGIL/; +QDataStream &operator<<(QDataStream &, const QTime & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QTime & /Constrained/) /ReleaseGIL/; +QDataStream &operator<<(QDataStream &, const QDateTime & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QDateTime & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdeadlinetimer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdeadlinetimer.sip new file mode 100644 index 0000000..18c31d8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdeadlinetimer.sip @@ -0,0 +1,89 @@ +// qdeadlinetimer.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) + +class QDeadlineTimer +{ +%TypeHeaderCode +#include +%End + +public: + enum ForeverConstant + { + Forever, + }; + + QDeadlineTimer(Qt::TimerType type /Constrained/ = Qt::CoarseTimer); + QDeadlineTimer(QDeadlineTimer::ForeverConstant /Constrained/, Qt::TimerType type /Constrained/ = Qt::CoarseTimer); + QDeadlineTimer(qint64 msecs, Qt::TimerType type /Constrained/ = Qt::CoarseTimer); + void swap(QDeadlineTimer &other /Constrained/); + bool isForever() const; + bool hasExpired() const; + Qt::TimerType timerType() const; + void setTimerType(Qt::TimerType type); + qint64 remainingTime() const; + qint64 remainingTimeNSecs() const; + void setRemainingTime(qint64 msecs, Qt::TimerType type = Qt::CoarseTimer); + void setPreciseRemainingTime(qint64 secs, qint64 nsecs = 0, Qt::TimerType type = Qt::CoarseTimer); + qint64 deadline() const; + qint64 deadlineNSecs() const; + void setDeadline(qint64 msecs, Qt::TimerType type = Qt::CoarseTimer); + void setPreciseDeadline(qint64 secs, qint64 nsecs = 0, Qt::TimerType type = Qt::CoarseTimer); + static QDeadlineTimer addNSecs(QDeadlineTimer dt, qint64 nsecs); + static QDeadlineTimer current(Qt::TimerType type = Qt::CoarseTimer); + QDeadlineTimer &operator+=(qint64 msecs); + QDeadlineTimer &operator-=(qint64 msecs); +}; + +%End +%If (Qt_5_8_0 -) +bool operator==(QDeadlineTimer d1, QDeadlineTimer d2); +%End +%If (Qt_5_8_0 -) +bool operator!=(QDeadlineTimer d1, QDeadlineTimer d2); +%End +%If (Qt_5_8_0 -) +bool operator<(QDeadlineTimer d1, QDeadlineTimer d2); +%End +%If (Qt_5_8_0 -) +bool operator<=(QDeadlineTimer d1, QDeadlineTimer d2); +%End +%If (Qt_5_8_0 -) +bool operator>(QDeadlineTimer d1, QDeadlineTimer d2); +%End +%If (Qt_5_8_0 -) +bool operator>=(QDeadlineTimer d1, QDeadlineTimer d2); +%End +%If (Qt_5_8_0 -) +QDeadlineTimer operator+(QDeadlineTimer dt, qint64 msecs); +%End +%If (Qt_5_8_0 -) +QDeadlineTimer operator+(qint64 msecs, QDeadlineTimer dt); +%End +%If (Qt_5_8_0 -) +QDeadlineTimer operator-(QDeadlineTimer dt, qint64 msecs); +%End +%If (Qt_5_8_0 -) +qint64 operator-(QDeadlineTimer dt1, QDeadlineTimer dt2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdir.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdir.sip new file mode 100644 index 0000000..7a757e2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdir.sip @@ -0,0 +1,182 @@ +// qdir.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDir +{ +%TypeHeaderCode +#include +%End + +public: + enum Filter + { + Dirs, + Files, + Drives, + NoSymLinks, + AllEntries, + TypeMask, + Readable, + Writable, + Executable, + PermissionMask, + Modified, + Hidden, + System, + AccessMask, + AllDirs, + CaseSensitive, + NoDotAndDotDot, + NoFilter, + NoDot, + NoDotDot, + }; + + typedef QFlags Filters; + + enum SortFlag + { + Name, + Time, + Size, + Unsorted, + SortByMask, + DirsFirst, + Reversed, + IgnoreCase, + DirsLast, + LocaleAware, + Type, + NoSort, + }; + + typedef QFlags SortFlags; + QDir(const QDir &); + QDir(const QString &path = QString()); + QDir(const QString &path, const QString &nameFilter, QFlags sort /TypeHintValue="QDir.Name|QDir.IgnoreCase"/ = QDir::SortFlags(QDir::Name|QDir::IgnoreCase), QFlags filters = AllEntries); + ~QDir(); + void setPath(const QString &path); + QString path() const; + QString absolutePath() const; + QString canonicalPath() const; + QString dirName() const; + QString filePath(const QString &fileName) const; + QString absoluteFilePath(const QString &fileName) const; + QString relativeFilePath(const QString &fileName) const; + bool cd(const QString &dirName); + bool cdUp(); + QStringList nameFilters() const; + void setNameFilters(const QStringList &nameFilters); + QDir::Filters filter() const; + void setFilter(QDir::Filters filter); + QDir::SortFlags sorting() const; + void setSorting(QDir::SortFlags sort); + uint count() const /__len__/; + QString operator[](int) const; +%MethodCode + Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + + if (idx < 0) + sipIsErr = 1; + else + sipRes = new QString(sipCpp->operator[]((int)idx)); +%End + + QStringList operator[](SIP_PYSLICE) const; +%MethodCode + Py_ssize_t start, stop, step, slicelength; + + if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) + { + sipIsErr = 1; + } + else + { + sipRes = new QStringList(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipRes) += (*sipCpp)[start]; + start += step; + } + } +%End + + int __contains__(const QString &) const; +%MethodCode + sipRes = bool(sipCpp->entryList().contains(*a0)); +%End + + static QStringList nameFiltersFromString(const QString &nameFilter); + QStringList entryList(QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::SortFlag::NoSort) const; + QStringList entryList(const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::SortFlag::NoSort) const; + QFileInfoList entryInfoList(QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::SortFlag::NoSort) const; + QFileInfoList entryInfoList(const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::SortFlag::NoSort) const; + bool mkdir(const QString &dirName) const; + bool rmdir(const QString &dirName) const; + bool mkpath(const QString &dirPath) const; + bool rmpath(const QString &dirPath) const; + bool isReadable() const; + bool exists() const; + bool isRoot() const; + static bool isRelativePath(const QString &path); + static bool isAbsolutePath(const QString &path); + bool isRelative() const; + bool isAbsolute() const; + bool makeAbsolute(); + bool operator==(const QDir &dir) const; + bool operator!=(const QDir &dir) const; + bool remove(const QString &fileName); + bool rename(const QString &oldName, const QString &newName); + bool exists(const QString &name) const; + void refresh() const; + static QFileInfoList drives(); + static QChar separator(); + static bool setCurrent(const QString &path); + static QDir current(); + static QString currentPath(); + static QDir home(); + static QString homePath(); + static QDir root(); + static QString rootPath(); + static QDir temp(); + static QString tempPath(); + static bool match(const QStringList &filters, const QString &fileName); + static bool match(const QString &filter, const QString &fileName); + static QString cleanPath(const QString &path); + static QString toNativeSeparators(const QString &pathName); + static QString fromNativeSeparators(const QString &pathName); + static void setSearchPaths(const QString &prefix, const QStringList &searchPaths); + static void addSearchPath(const QString &prefix, const QString &path); + static QStringList searchPaths(const QString &prefix); + bool removeRecursively(); + void swap(QDir &other /Constrained/); +%If (Qt_5_6_0 -) + static QChar listSeparator(); +%End +%If (Qt_5_9_0 -) + bool isEmpty(QDir::Filters filters = QDir::AllEntries | QDir::NoDotAndDotDot) const; +%End +}; + +QFlags operator|(QDir::Filter f1, QFlags f2); +QFlags operator|(QDir::SortFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdiriterator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdiriterator.sip new file mode 100644 index 0000000..752516d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qdiriterator.sip @@ -0,0 +1,54 @@ +// qdiriterator.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDirIterator +{ +%TypeHeaderCode +#include +%End + +public: + enum IteratorFlag + { + NoIteratorFlags, + FollowSymlinks, + Subdirectories, + }; + + typedef QFlags IteratorFlags; + QDirIterator(const QDir &dir, QFlags flags = NoIteratorFlags); + QDirIterator(const QString &path, QFlags flags = NoIteratorFlags); + QDirIterator(const QString &path, QFlags filters, QFlags flags = NoIteratorFlags); + QDirIterator(const QString &path, const QStringList &nameFilters, QFlags filters = QDir::NoFilter, QFlags flags = NoIteratorFlags); + ~QDirIterator(); + QString next(); + bool hasNext() const; + QString fileName() const; + QString filePath() const; + QFileInfo fileInfo() const; + QString path() const; + +private: + QDirIterator(const QDirIterator &); +}; + +QFlags operator|(QDirIterator::IteratorFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeasingcurve.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeasingcurve.sip new file mode 100644 index 0000000..a74f53b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeasingcurve.sip @@ -0,0 +1,285 @@ +// qeasingcurve.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QEasingCurve /TypeHintIn="Union[QEasingCurve, QEasingCurve.Type]"/ +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// The EasingFunction callback doesn't provide a context so we support a fixed +// number of different functions. + +const int ec_nr_custom_types = 10; + +struct ec_custom_type { + PyObject *py_func; + QEasingCurve::EasingFunction func; +}; + +static qreal ec_call(int ec, qreal v); + +static qreal ec_func_0(qreal v) +{ + return ec_call(0, v); +} + +static qreal ec_func_1(qreal v) +{ + return ec_call(1, v); +} + +static qreal ec_func_2(qreal v) +{ + return ec_call(2, v); +} + +static qreal ec_func_3(qreal v) +{ + return ec_call(3, v); +} + +static qreal ec_func_4(qreal v) +{ + return ec_call(4, v); +} + +static qreal ec_func_5(qreal v) +{ + return ec_call(5, v); +} + +static qreal ec_func_6(qreal v) +{ + return ec_call(6, v); +} + +static qreal ec_func_7(qreal v) +{ + return ec_call(7, v); +} + +static qreal ec_func_8(qreal v) +{ + return ec_call(8, v); +} + +static qreal ec_func_9(qreal v) +{ + return ec_call(9, v); +} + +static ec_custom_type ec_custom_types[ec_nr_custom_types] = { + {0, ec_func_0}, + {0, ec_func_1}, + {0, ec_func_2}, + {0, ec_func_3}, + {0, ec_func_4}, + {0, ec_func_5}, + {0, ec_func_6}, + {0, ec_func_7}, + {0, ec_func_8}, + {0, ec_func_9}, +}; + +static qreal ec_call(int ec, qreal v) +{ + PyObject *res_obj; + qreal res = 0.0; + + SIP_BLOCK_THREADS + + res_obj = PyObject_CallFunction(ec_custom_types[ec].py_func, (char *)"(d)", (double)v); + + if (res_obj) + { + PyErr_Clear(); + + res = PyFloat_AsDouble(res_obj); + Py_DECREF(res_obj); + + if (PyErr_Occurred()) + res_obj = 0; + } + + if (!res_obj) + pyqt5_err_print(); + + SIP_UNBLOCK_THREADS + + return res; +} +%End + +%ConvertToTypeCode +// Allow a QEasingCurve::Type whenever a QEasingCurve is expected. + +if (sipIsErr == NULL) +{ + if (sipCanConvertToType(sipPy, sipType_QEasingCurve, SIP_NO_CONVERTORS)) + return 1; + + if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QEasingCurve_Type))) + return 1; + + return 0; +} + +if (sipCanConvertToType(sipPy, sipType_QEasingCurve, SIP_NO_CONVERTORS)) +{ + *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QEasingCurve, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + + return 0; +} + +*sipCppPtr = new QEasingCurve((QEasingCurve::Type)SIPLong_AsLong(sipPy)); + +return sipGetState(sipTransferObj); +%End + +public: + enum Type + { + Linear, + InQuad, + OutQuad, + InOutQuad, + OutInQuad, + InCubic, + OutCubic, + InOutCubic, + OutInCubic, + InQuart, + OutQuart, + InOutQuart, + OutInQuart, + InQuint, + OutQuint, + InOutQuint, + OutInQuint, + InSine, + OutSine, + InOutSine, + OutInSine, + InExpo, + OutExpo, + InOutExpo, + OutInExpo, + InCirc, + OutCirc, + InOutCirc, + OutInCirc, + InElastic, + OutElastic, + InOutElastic, + OutInElastic, + InBack, + OutBack, + InOutBack, + OutInBack, + InBounce, + OutBounce, + InOutBounce, + OutInBounce, + InCurve, + OutCurve, + SineCurve, + CosineCurve, + BezierSpline, + TCBSpline, + Custom, + }; + + QEasingCurve(QEasingCurve::Type type = QEasingCurve::Linear); + QEasingCurve(const QEasingCurve &other); + ~QEasingCurve(); + bool operator==(const QEasingCurve &other) const; + bool operator!=(const QEasingCurve &other) const; + qreal amplitude() const; + void setAmplitude(qreal amplitude); + qreal period() const; + void setPeriod(qreal period); + qreal overshoot() const; + void setOvershoot(qreal overshoot); + QEasingCurve::Type type() const; + void setType(QEasingCurve::Type type); + void setCustomType(SIP_PYCALLABLE func /TypeHint="Callable[[float], float]"/); +%MethodCode + int i; + ec_custom_type *ct; + + for (i = 0; i < ec_nr_custom_types; ++i) + { + ct = &ec_custom_types[i]; + + if (!ct->py_func || ct->py_func == a0) + break; + } + + if (i == ec_nr_custom_types) + { + PyErr_Format(PyExc_ValueError, "a maximum of %d different easing functions are supported", ec_nr_custom_types); + sipError = sipErrorFail; + } + else + { + if (!ct->py_func) + { + ct->py_func = a0; + Py_INCREF(a0); + } + + sipCpp->setCustomType(ct->func); + } +%End + + SIP_PYCALLABLE customType() const /TypeHint="Callable[[float], float]"/; +%MethodCode + QEasingCurve::EasingFunction func = sipCpp->customType(); + + sipRes = Py_None; + + if (func) + { + for (int i = 0; i < ec_nr_custom_types; ++i) + { + if (ec_custom_types[i].func == func) + { + sipRes = ec_custom_types[i].py_func; + break; + } + } + } + + Py_INCREF(sipRes); +%End + + qreal valueForProgress(qreal progress) const; + void swap(QEasingCurve &other /Constrained/); + void addCubicBezierSegment(const QPointF &c1, const QPointF &c2, const QPointF &endPoint); + void addTCBSegment(const QPointF &nextPoint, qreal t, qreal c, qreal b); + QVector toCubicSpline() const; +}; + +QDataStream &operator<<(QDataStream &, const QEasingCurve & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QEasingCurve & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qelapsedtimer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qelapsedtimer.sip new file mode 100644 index 0000000..938cc2d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qelapsedtimer.sip @@ -0,0 +1,59 @@ +// qelapsedtimer.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QElapsedTimer +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_4_0 -) + QElapsedTimer(); +%End + + enum ClockType + { + SystemTime, + MonotonicClock, + TickCounter, + MachAbsoluteTime, + PerformanceCounter, + }; + + static QElapsedTimer::ClockType clockType(); + static bool isMonotonic(); + void start(); + qint64 restart(); + void invalidate(); + bool isValid() const; + qint64 elapsed() const; + bool hasExpired(qint64 timeout) const; + qint64 msecsSinceReference() const; + qint64 msecsTo(const QElapsedTimer &other) const; + qint64 secsTo(const QElapsedTimer &other) const; + bool operator==(const QElapsedTimer &other) const; + bool operator!=(const QElapsedTimer &other) const; + qint64 nsecsElapsed() const; +}; + +bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeventloop.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeventloop.sip new file mode 100644 index 0000000..fa5a78d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeventloop.sip @@ -0,0 +1,76 @@ +// qeventloop.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QEventLoop : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QEventLoop(QObject *parent /TransferThis/ = 0); + virtual ~QEventLoop(); + + enum ProcessEventsFlag + { + AllEvents, + ExcludeUserInputEvents, + ExcludeSocketNotifiers, + WaitForMoreEvents, + X11ExcludeTimers, + }; + + typedef QFlags ProcessEventsFlags; + bool processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) /ReleaseGIL/; + void processEvents(QEventLoop::ProcessEventsFlags flags, int maximumTime) /ReleaseGIL/; + int exec(QFlags flags = AllEvents) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%If (Py_v3) + int exec(QFlags flags = AllEvents) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; +%End + void exit(int returnCode = 0); + bool isRunning() const; + void wakeUp(); + +public slots: + void quit(); + +public: + virtual bool event(QEvent *event); +}; + +QFlags operator|(QEventLoop::ProcessEventsFlag f1, QFlags f2); + +class QEventLoopLocker +{ +%TypeHeaderCode +#include +%End + +public: + QEventLoopLocker() /ReleaseGIL/; + explicit QEventLoopLocker(QEventLoop *loop) /ReleaseGIL/; + explicit QEventLoopLocker(QThread *thread) /ReleaseGIL/; + ~QEventLoopLocker(); + +private: + QEventLoopLocker(const QEventLoopLocker &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeventtransition.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeventtransition.sip new file mode 100644 index 0000000..587cbab --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qeventtransition.sip @@ -0,0 +1,42 @@ +// qeventtransition.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QEventTransition : public QAbstractTransition +{ +%TypeHeaderCode +#include +%End + +public: + QEventTransition(QState *sourceState /TransferThis/ = 0); + QEventTransition(QObject *object /KeepReference=10/, QEvent::Type type, QState *sourceState /TransferThis/ = 0); + virtual ~QEventTransition(); + QObject *eventSource() const; + void setEventSource(QObject *object /KeepReference=10/); + QEvent::Type eventType() const; + void setEventType(QEvent::Type type); + +protected: + virtual bool eventTest(QEvent *event); + virtual void onTransition(QEvent *event); + virtual bool event(QEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfile.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfile.sip new file mode 100644 index 0000000..1257c9f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfile.sip @@ -0,0 +1,67 @@ +// qfile.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFile : public QFileDevice +{ +%TypeHeaderCode +#include +%End + +public: + QFile(); + QFile(const QString &name); + explicit QFile(QObject *parent /TransferThis/); + QFile(const QString &name, QObject *parent /TransferThis/); + virtual ~QFile(); + virtual QString fileName() const; + void setFileName(const QString &name); + static QByteArray encodeName(const QString &fileName); + static QString decodeName(const QByteArray &localFileName); + static QString decodeName(const char *localFileName /Encoding="ASCII"/); + bool exists() const; + static bool exists(const QString &fileName); + QString symLinkTarget() const; + static QString symLinkTarget(const QString &fileName); + bool remove() /ReleaseGIL/; + static bool remove(const QString &fileName) /ReleaseGIL/; + bool rename(const QString &newName) /ReleaseGIL/; + static bool rename(const QString &oldName, const QString &newName) /ReleaseGIL/; + bool link(const QString &newName) /ReleaseGIL/; + static bool link(const QString &oldname, const QString &newName) /ReleaseGIL/; + bool copy(const QString &newName) /ReleaseGIL/; + static bool copy(const QString &fileName, const QString &newName) /ReleaseGIL/; + virtual bool open(QIODevice::OpenMode flags) /ReleaseGIL/; + bool open(int fd, QIODevice::OpenMode ioFlags, QFileDevice::FileHandleFlags handleFlags = QFileDevice::FileHandleFlag::DontCloseHandle) /ReleaseGIL/; + virtual qint64 size() const; + virtual bool resize(qint64 sz); + static bool resize(const QString &filename, qint64 sz); + virtual QFileDevice::Permissions permissions() const; + static QFileDevice::Permissions permissions(const QString &filename); + virtual bool setPermissions(QFileDevice::Permissions permissionSpec); + static bool setPermissions(const QString &filename, QFileDevice::Permissions permissionSpec); +%If (Qt_5_15_0 -) + bool moveToTrash(); +%End +%If (Qt_5_15_0 -) + static bool moveToTrash(const QString &fileName, QString *pathInTrash /Out/ = 0); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfiledevice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfiledevice.sip new file mode 100644 index 0000000..e05a772 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfiledevice.sip @@ -0,0 +1,199 @@ +// qfiledevice.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFileDevice : public QIODevice /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum FileError + { + NoError, + ReadError, + WriteError, + FatalError, + ResourceError, + OpenError, + AbortError, + TimeOutError, + UnspecifiedError, + RemoveError, + RenameError, + PositionError, + ResizeError, + PermissionsError, + CopyError, + }; + + enum Permission + { + ReadOwner, + WriteOwner, + ExeOwner, + ReadUser, + WriteUser, + ExeUser, + ReadGroup, + WriteGroup, + ExeGroup, + ReadOther, + WriteOther, + ExeOther, + }; + + typedef QFlags Permissions; + + enum FileHandleFlag + { + AutoCloseHandle, + DontCloseHandle, + }; + + typedef QFlags FileHandleFlags; + virtual ~QFileDevice(); + QFileDevice::FileError error() const; + void unsetError(); + virtual void close() /ReleaseGIL/; + virtual bool isSequential() const; + int handle() const; + virtual QString fileName() const; + virtual qint64 pos() const; + virtual bool seek(qint64 offset) /ReleaseGIL/; + virtual bool atEnd() const; + bool flush() /ReleaseGIL/; + virtual qint64 size() const; + virtual bool resize(qint64 sz); + virtual QFileDevice::Permissions permissions() const; + virtual bool setPermissions(QFileDevice::Permissions permissionSpec); + + enum MemoryMapFlags + { + NoOptions, +%If (Qt_5_4_0 -) + MapPrivateOption, +%End + }; + + void *map(qint64 offset, qint64 size /ResultSize/, QFileDevice::MemoryMapFlags flags = QFileDevice::NoOptions) [uchar * (qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = QFileDevice::NoOptions)]; + bool unmap(void *address) [bool (uchar *address)]; + +protected: + virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QFileDevice::readData(s, a0) : sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/; + virtual SIP_PYOBJECT readLineData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QFileDevice::readLineData(s, a0) : sipCpp->readLineData(s, a0); + #else + len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + +public: +%If (Qt_5_10_0 -) + + enum FileTime + { + FileAccessTime, + FileBirthTime, + FileMetadataChangeTime, + FileModificationTime, + }; + +%End +%If (Qt_5_10_0 -) + QDateTime fileTime(QFileDevice::FileTime time) const; +%End +%If (Qt_5_10_0 -) + bool setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime); +%End +}; + +QFlags operator|(QFileDevice::Permission f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfileinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfileinfo.sip new file mode 100644 index 0000000..928b3d2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfileinfo.sip @@ -0,0 +1,112 @@ +// qfileinfo.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFileInfo +{ +%TypeHeaderCode +#include +%End + +public: + QFileInfo(); + QFileInfo(const QString &file); + QFileInfo(const QFile &file); + QFileInfo(const QDir &dir, const QString &file); + QFileInfo(const QFileInfo &fileinfo); + ~QFileInfo(); + bool operator==(const QFileInfo &fileinfo) const; + bool operator!=(const QFileInfo &fileinfo) const; + void setFile(const QString &file); + void setFile(const QFile &file); + void setFile(const QDir &dir, const QString &file); + bool exists() const; + void refresh(); + QString filePath() const; + SIP_PYOBJECT __fspath__(); +%MethodCode + sipRes = qpycore_PyObject_FromQString(QDir::toNativeSeparators(sipCpp->filePath())); +%End + + QString absoluteFilePath() const; + QString canonicalFilePath() const; + QString fileName() const; + QString baseName() const; + QString completeBaseName() const; + QString suffix() const; + QString completeSuffix() const; + QString path() const; + QString absolutePath() const; + QString canonicalPath() const; + QDir dir() const; + QDir absoluteDir() const; + bool isReadable() const; + bool isWritable() const; + bool isExecutable() const; + bool isHidden() const; + bool isRelative() const; + bool isAbsolute() const; + bool makeAbsolute(); + bool isFile() const; + bool isDir() const; + bool isSymLink() const; + bool isRoot() const; + QString owner() const; + uint ownerId() const; + QString group() const; + uint groupId() const; + bool permission(QFileDevice::Permissions permissions) const; + QFileDevice::Permissions permissions() const; + qint64 size() const; + QDateTime created() const; + QDateTime lastModified() const; + QDateTime lastRead() const; + bool caching() const; + void setCaching(bool on); + QString symLinkTarget() const; + QString bundleName() const; + bool isBundle() const; + bool isNativePath() const; + void swap(QFileInfo &other /Constrained/); +%If (Qt_5_2_0 -) + static bool exists(const QString &file); +%End +%If (Qt_5_10_0 -) + QDateTime birthTime() const; +%End +%If (Qt_5_10_0 -) + QDateTime metadataChangeTime() const; +%End +%If (Qt_5_10_0 -) + QDateTime fileTime(QFileDevice::FileTime time) const; +%End +%If (Qt_5_14_0 -) + bool isSymbolicLink() const; +%End +%If (Qt_5_14_0 -) + bool isShortcut() const; +%End +%If (Qt_5_15_0 -) + bool isJunction() const; +%End +}; + +typedef QList QFileInfoList; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfileselector.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfileselector.sip new file mode 100644 index 0000000..4d44808 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfileselector.sip @@ -0,0 +1,41 @@ +// qfileselector.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QFileSelector : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QFileSelector(QObject *parent /TransferThis/ = 0); + virtual ~QFileSelector(); + QString select(const QString &filePath) const; + QUrl select(const QUrl &filePath) const; + QStringList extraSelectors() const; + void setExtraSelectors(const QStringList &list); + QStringList allSelectors() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfilesystemwatcher.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfilesystemwatcher.sip new file mode 100644 index 0000000..6449ae6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfilesystemwatcher.sip @@ -0,0 +1,43 @@ +// qfilesystemwatcher.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFileSystemWatcher : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QFileSystemWatcher(QObject *parent /TransferThis/ = 0); + QFileSystemWatcher(const QStringList &paths, QObject *parent /TransferThis/ = 0); + virtual ~QFileSystemWatcher(); + bool addPath(const QString &file); + QStringList addPaths(const QStringList &files); + QStringList directories() const; + QStringList files() const; + bool removePath(const QString &file); + QStringList removePaths(const QStringList &files); + +signals: + void directoryChanged(const QString &path); + void fileChanged(const QString &path); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfinalstate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfinalstate.sip new file mode 100644 index 0000000..7e6ee73 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qfinalstate.sip @@ -0,0 +1,37 @@ +// qfinalstate.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFinalState : public QAbstractState +{ +%TypeHeaderCode +#include +%End + +public: + QFinalState(QState *parent /TransferThis/ = 0); + virtual ~QFinalState(); + +protected: + virtual void onEntry(QEvent *event); + virtual void onExit(QEvent *event); + virtual bool event(QEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qglobal.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qglobal.sip new file mode 100644 index 0000000..e29d1c3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qglobal.sip @@ -0,0 +1,239 @@ +// qglobal.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +// PyQt version information. +int PYQT_VERSION; +const char *PYQT_VERSION_STR; + +%ModuleCode +static int PYQT_VERSION = 0x050f0b; +static const char *PYQT_VERSION_STR = "5.15.11"; +%End +const int QT_VERSION; +const char *QT_VERSION_STR; +typedef signed char qint8 /PyInt/; +typedef unsigned char quint8 /PyInt/; +typedef short qint16; +typedef unsigned short quint16; +typedef int qint32; +typedef unsigned int quint32; +typedef long long qint64; +typedef unsigned long long quint64; +typedef qint64 qlonglong; +typedef quint64 qulonglong; +%If (PyQt_qreal_double) +typedef double qreal; +%End +%If (!PyQt_qreal_double) +typedef float qreal; +%End +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned int uint; +typedef unsigned long ulong; +double qAbs(const double &t); +int qRound(qreal d); +qint64 qRound64(qreal d); +const char *qVersion(); +bool qSharedBuild(); +// Template definition for QFlags. +template +class QFlags /NoDefaultCtors, PyQtFlagsEnums="ENUM", TypeHintIn="Union[QFlags, ENUM]"/ +{ +public: + // QFlags is supposed to be a more type safe version of an int (even though + // Qt has cases where it expects multiple flag types to be or-ed together). + // Because of the C++ int() operator and because type(ENUM) is a sub-type + // of int, most of this is lost. Therefore we only implement logical + // operators that take int arguments. + QFlags(); + QFlags(int f /TypeHint="QFlags"/); + + // This will never be called because the above ctor will be invoked first. + // However it's required for sip to generate assignment helpers. + QFlags(const QFlags &) /NoTypeHint/; + + operator int() const; + + // This is required for Python v3.8 and later. + int __index__() const; +%MethodCode + sipRes = sipCpp->operator QFlags::Int(); +%End + + QFlags operator~() const; + + QFlags operator&(int f /TypeHint="QFlags"/) const; + QFlags &operator&=(int f /TypeHint="QFlags"/); + + QFlags operator|(int f /TypeHint="QFlags"/) const; + QFlags &operator|=(int f /TypeHint="QFlags"/); +%MethodCode + *sipCpp = QFlags(*sipCpp | a0); +%End + + QFlags operator^(int f /TypeHint="QFlags"/) const; + QFlags &operator^=(int f /TypeHint="QFlags"/); +%MethodCode + *sipCpp = QFlags(*sipCpp ^ a0); +%End + + // These are necessary to prevent Python comparing object IDs. + bool operator==(const QFlags &f) const; +%MethodCode + sipRes = (sipCpp->operator QFlags::Int() == a0->operator QFlags::Int()); +%End + + bool operator!=(const QFlags &f) const; +%MethodCode + sipRes = (sipCpp->operator QFlags::Int() != a0->operator QFlags::Int()); +%End + + int __bool__() const; +%MethodCode + sipRes = (sipCpp->operator QFlags::Int() != 0); +%End + + long __hash__() const; +%MethodCode + sipRes = sipCpp->operator QFlags::Int(); +%End + + +%ConvertToTypeCode +// Allow an instance of the base enum whenever a QFlags is expected. + +if (sipIsErr == NULL) + return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_ENUM)) || + sipCanConvertToType(sipPy, sipType_QFlags, SIP_NO_CONVERTORS)); + +if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_ENUM))) +{ + *sipCppPtr = new QFlags(int(SIPLong_AsLong(sipPy))); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QFlags, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End +}; +// Hook's into Qt's resource system. +%ModuleCode +QT_BEGIN_NAMESPACE +extern bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); +extern bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); +QT_END_NAMESPACE +%End + +bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); +bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); +bool qFuzzyCompare(double p1, double p2); +bool qIsNull(double d); +void qsrand(uint seed); +int qrand(); +typedef void *QFunctionPointer; +// Mapped type for qintptr. +// Map qintptr onto sip.voidptr. This means either an address (on Windows) or +// an integer file descriptor (on everything else) can be used. +%MappedType qintptr /TypeHint="PyQt5.sip.voidptr"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode + qintptr ptr = (qintptr)sipConvertToVoidPtr(sipPy); + + if (!sipIsErr) + return !PyErr_Occurred(); + + // Mapped types deal with pointers, so create one on the heap. + qintptr *heap = new qintptr; + *heap = ptr; + + *sipCppPtr = heap; + + // Make sure the pointer doesn't leak. + return SIP_TEMPORARY; +%End + +%ConvertFromTypeCode + return sipConvertFromVoidPtr((void *)*sipCpp); +%End +}; +// Mapped type for quintptr. +// Map quintptr onto sip.voidptr. This means either an address (on Windows) or +// an integer file descriptor (on everything else) can be used. +%MappedType quintptr /TypeHint="PyQt5.sip.voidptr"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode + quintptr ptr = (quintptr)sipConvertToVoidPtr(sipPy); + + if (!sipIsErr) + return !PyErr_Occurred(); + + // Mapped types deal with pointers, so create one on the heap. + quintptr *heap = new quintptr; + *heap = ptr; + + *sipCppPtr = heap; + + // Make sure the pointer doesn't leak. + return SIP_TEMPORARY; +%End + +%ConvertFromTypeCode + return sipConvertFromVoidPtr((void *)*sipCpp); +%End +}; +// Implementations of pyqt[Set]PickleProtocol(). +void pyqtSetPickleProtocol(SIP_PYOBJECT /TypeHint="Optional[int]"/); +%MethodCode + Py_XDECREF(qpycore_pickle_protocol); + qpycore_pickle_protocol = a0; + Py_INCREF(qpycore_pickle_protocol); +%End + +SIP_PYOBJECT pyqtPickleProtocol() /TypeHint="Optional[int]"/; +%MethodCode + sipRes = qpycore_pickle_protocol; + if (!sipRes) + sipRes = Py_None; + + Py_INCREF(sipRes); +%End +%If (Qt_5_10_0 -) +QString qEnvironmentVariable(const char *varName); +%End +%If (Qt_5_10_0 -) +QString qEnvironmentVariable(const char *varName, const QString &defaultValue); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qhistorystate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qhistorystate.sip new file mode 100644 index 0000000..5c973c6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qhistorystate.sip @@ -0,0 +1,69 @@ +// qhistorystate.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHistoryState : public QAbstractState +{ +%TypeHeaderCode +#include +%End + +public: + enum HistoryType + { + ShallowHistory, + DeepHistory, + }; + + QHistoryState(QState *parent /TransferThis/ = 0); + QHistoryState(QHistoryState::HistoryType type, QState *parent /TransferThis/ = 0); + virtual ~QHistoryState(); + QAbstractState *defaultState() const; + void setDefaultState(QAbstractState *state /KeepReference=0/); + QHistoryState::HistoryType historyType() const; + void setHistoryType(QHistoryState::HistoryType type); + +protected: + virtual void onEntry(QEvent *event); + virtual void onExit(QEvent *event); + virtual bool event(QEvent *e); + +signals: +%If (Qt_5_4_0 -) + void defaultStateChanged(); +%End +%If (Qt_5_4_0 -) + void historyTypeChanged(); +%End + +public: +%If (Qt_5_6_0 -) + QAbstractTransition *defaultTransition() const; +%End +%If (Qt_5_6_0 -) + void setDefaultTransition(QAbstractTransition *transition /KeepReference=1/); +%End + +signals: +%If (Qt_5_6_0 -) + void defaultTransitionChanged(); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qidentityproxymodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qidentityproxymodel.sip new file mode 100644 index 0000000..38ee5f2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qidentityproxymodel.sip @@ -0,0 +1,60 @@ +// qidentityproxymodel.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QIdentityProxyModel : public QAbstractProxyModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QIdentityProxyModel(QObject *parent /TransferThis/ = 0); + virtual ~QIdentityProxyModel(); + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; + virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const; + virtual QModelIndex parent(const QModelIndex &child) const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + virtual QItemSelection mapSelectionFromSource(const QItemSelection &selection) const; + virtual QItemSelection mapSelectionToSource(const QItemSelection &selection) const; + virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchStartsWith|Qt::MatchWrap) const; + virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/); + virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); +%If (Qt_5_5_0 -) + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; +%End +%If (- Qt_5_5_0) + virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; +%End + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; +%If (Qt_5_15_0 -) + virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild); +%End +%If (Qt_5_15_0 -) + virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qiodevice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qiodevice.sip new file mode 100644 index 0000000..6fb3084 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qiodevice.sip @@ -0,0 +1,347 @@ +// qiodevice.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QIODevice : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum OpenModeFlag + { + NotOpen, + ReadOnly, + WriteOnly, + ReadWrite, + Append, + Truncate, + Text, + Unbuffered, +%If (Qt_5_11_0 -) + NewOnly, +%End +%If (Qt_5_11_0 -) + ExistingOnly, +%End + }; + + typedef QFlags OpenMode; + QIODevice(); + explicit QIODevice(QObject *parent /TransferThis/); + virtual ~QIODevice(); + QIODevice::OpenMode openMode() const; + void setTextModeEnabled(bool enabled); + bool isTextModeEnabled() const; + bool isOpen() const; + bool isReadable() const; + bool isWritable() const; + virtual bool isSequential() const; + virtual bool open(QIODevice::OpenMode mode) /ReleaseGIL/; + virtual void close() /ReleaseGIL/; + virtual qint64 pos() const; + virtual qint64 size() const; + virtual bool seek(qint64 pos) /ReleaseGIL/; + virtual bool atEnd() const; + virtual bool reset(); + virtual qint64 bytesAvailable() const; + virtual qint64 bytesToWrite() const; + SIP_PYOBJECT read(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + len = sipCpp->read(s, a0); + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + QByteArray readAll() /ReleaseGIL/; + SIP_PYOBJECT readLine(qint64 maxlen=0) /TypeHint="Py_v3:bytes;str",ReleaseGIL/; +%MethodCode + // The two C++ overloads would have the same Python signature so we get most of + // the combined functionality by treating an argument of 0 (the default) as + // meaning return a QByteArray of any length. Otherwise it is treated as a + // maximum buffer size and a Python string is returned. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else if (a0 == 0) + { + QByteArray *ba; + + Py_BEGIN_ALLOW_THREADS + ba = new QByteArray(sipCpp->readLine(a0)); + Py_END_ALLOW_THREADS + + sipRes = sipBuildResult(&sipIsErr, "N", ba, sipType_QByteArray, 0); + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + len = sipCpp->readLine(s, a0); + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual bool canReadLine() const; + QByteArray peek(qint64 maxlen) /ReleaseGIL/; + qint64 write(const QByteArray &data) /ReleaseGIL/; + virtual bool waitForReadyRead(int msecs) /ReleaseGIL/; + virtual bool waitForBytesWritten(int msecs) /ReleaseGIL/; + void ungetChar(char c); + bool putChar(char c); + bool getChar(char *c /Encoding="None",Out/); + QString errorString() const; + +signals: + void readyRead(); + void bytesWritten(qint64 bytes); + void aboutToClose(); + void readChannelFinished(); + +protected: + virtual SIP_PYOBJECT readData(qint64 maxlen) = 0 /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtect_readData(s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + +%VirtualCatcherCode + PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1); + + if (result != NULL) + { + PyObject *buf; + + sipParseResult(&sipIsErr, sipMethod, result, "O", &buf); + + if (buf == Py_None) + sipRes = -1L; + else if (!SIPBytes_Check(buf)) + { + sipBadCatcherResult(sipMethod); + sipIsErr = 1; + } + else + { + memcpy(a0, SIPBytes_AsString(buf), SIPBytes_Size(buf)); + sipRes = SIPBytes_Size(buf); + } + + Py_DECREF(buf); + Py_DECREF(result); + } +%End + + virtual SIP_PYOBJECT readLineData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QIODevice::readLineData(s, a0) : sipCpp->readLineData(s, a0); + #else + len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + +%VirtualCatcherCode + PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1); + + if (result != NULL) + { + PyObject *buf; + + sipParseResult(&sipIsErr, sipMethod, result, "O", &buf); + + if (buf == Py_None) + sipRes = -1L; + else if (!SIPBytes_Check(buf)) + { + sipBadCatcherResult(sipMethod); + sipIsErr = 1; + } + else + { + memcpy(a0, SIPBytes_AsString(buf), SIPBytes_Size(buf)); + sipRes = SIPBytes_Size(buf); + } + + Py_DECREF(buf); + Py_DECREF(result); + } +%End + + virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) = 0; + void setOpenMode(QIODevice::OpenMode openMode); + void setErrorString(const QString &errorString); + +public: +%If (Qt_5_7_0 -) + int readChannelCount() const; +%End +%If (Qt_5_7_0 -) + int writeChannelCount() const; +%End +%If (Qt_5_7_0 -) + int currentReadChannel() const; +%End +%If (Qt_5_7_0 -) + void setCurrentReadChannel(int channel); +%End +%If (Qt_5_7_0 -) + int currentWriteChannel() const; +%End +%If (Qt_5_7_0 -) + void setCurrentWriteChannel(int channel); +%End +%If (Qt_5_7_0 -) + void startTransaction(); +%End +%If (Qt_5_7_0 -) + void commitTransaction(); +%End +%If (Qt_5_7_0 -) + void rollbackTransaction(); +%End +%If (Qt_5_7_0 -) + bool isTransactionStarted() const; +%End + +signals: +%If (Qt_5_7_0 -) + void channelReadyRead(int channel); +%End +%If (Qt_5_7_0 -) + void channelBytesWritten(int channel, qint64 bytes); +%End + +public: +%If (Qt_5_10_0 -) + qint64 skip(qint64 maxSize); +%End +}; + +QFlags operator|(QIODevice::OpenModeFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qitemselectionmodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qitemselectionmodel.sip new file mode 100644 index 0000000..4d12d31 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qitemselectionmodel.sip @@ -0,0 +1,311 @@ +// qitemselectionmodel.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QItemSelectionRange +{ +%TypeHeaderCode +#include +%End + +public: + QItemSelectionRange(); + QItemSelectionRange(const QItemSelectionRange &other); + QItemSelectionRange(const QModelIndex &atopLeft, const QModelIndex &abottomRight); + explicit QItemSelectionRange(const QModelIndex &index); + int top() const; + int left() const; + int bottom() const; + int right() const; + int width() const; + int height() const; + const QPersistentModelIndex &topLeft() const; + const QPersistentModelIndex &bottomRight() const; + QModelIndex parent() const; + const QAbstractItemModel *model() const; + bool contains(const QModelIndex &index) const; + bool contains(int row, int column, const QModelIndex &parentIndex) const; + bool intersects(const QItemSelectionRange &other) const; + bool operator==(const QItemSelectionRange &other) const; + bool operator!=(const QItemSelectionRange &other) const; + bool isValid() const; + QModelIndexList indexes() const; + QItemSelectionRange intersected(const QItemSelectionRange &other) const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + + bool isEmpty() const; + bool operator<(const QItemSelectionRange &other) const; +%If (Qt_5_6_0 -) + void swap(QItemSelectionRange &other /Constrained/); +%End +}; + +class QItemSelectionModel : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum SelectionFlag + { + NoUpdate, + Clear, + Select, + Deselect, + Toggle, + Current, + Rows, + Columns, + SelectCurrent, + ToggleCurrent, + ClearAndSelect, + }; + + typedef QFlags SelectionFlags; +%If (Qt_5_5_0 -) + explicit QItemSelectionModel(QAbstractItemModel *model /TransferThis/ = 0); +%End +%If (- Qt_5_5_0) + explicit QItemSelectionModel(QAbstractItemModel *model /TransferThis/); +%End + QItemSelectionModel(QAbstractItemModel *model, QObject *parent /TransferThis/); + virtual ~QItemSelectionModel(); + QModelIndex currentIndex() const; + bool isSelected(const QModelIndex &index) const; +%If (- Qt_5_15_0) + bool isRowSelected(int row, const QModelIndex &parent) const; +%End +%If (Qt_5_15_0 -) + bool isRowSelected(int row, const QModelIndex &parent = QModelIndex()) const; +%End +%If (- Qt_5_15_0) + bool isColumnSelected(int column, const QModelIndex &parent) const; +%End +%If (Qt_5_15_0 -) + bool isColumnSelected(int column, const QModelIndex &parent = QModelIndex()) const; +%End +%If (- Qt_5_15_0) + bool rowIntersectsSelection(int row, const QModelIndex &parent) const; +%End +%If (Qt_5_15_0 -) + bool rowIntersectsSelection(int row, const QModelIndex &parent = QModelIndex()) const; +%End +%If (- Qt_5_15_0) + bool columnIntersectsSelection(int column, const QModelIndex &parent) const; +%End +%If (Qt_5_15_0 -) + bool columnIntersectsSelection(int column, const QModelIndex &parent = QModelIndex()) const; +%End + QModelIndexList selectedIndexes() const; + const QItemSelection selection() const; +%If (Qt_5_5_0 -) + QAbstractItemModel *model(); +%End +%If (- Qt_5_5_0) +%If (Qt_5_15_1 -) + const QAbstractItemModel *model() const; +%End +%End + +public slots: + virtual void clear(); + void clearSelection(); + virtual void reset(); + virtual void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command); + virtual void select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command); + virtual void setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command); + virtual void clearCurrentIndex(); + +signals: + void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); + void currentRowChanged(const QModelIndex ¤t, const QModelIndex &previous); + void currentColumnChanged(const QModelIndex ¤t, const QModelIndex &previous); + +protected: + void emitSelectionChanged(const QItemSelection &newSelection, const QItemSelection &oldSelection); + +public: + bool hasSelection() const; + QModelIndexList selectedRows(int column = 0) const; + QModelIndexList selectedColumns(int row = 0) const; +%If (Qt_5_5_0 -) + void setModel(QAbstractItemModel *model); +%End + +signals: +%If (Qt_5_5_0 -) + void modelChanged(QAbstractItemModel *model); +%End +}; + +QFlags operator|(QItemSelectionModel::SelectionFlag f1, QFlags f2); + +class QItemSelection +{ +%TypeHeaderCode +#include +%End + +public: + QItemSelection(); + QItemSelection(const QModelIndex &topLeft, const QModelIndex &bottomRight); + void select(const QModelIndex &topLeft, const QModelIndex &bottomRight); + bool contains(const QModelIndex &index) const; + int __contains__(const QModelIndex &index); +%MethodCode + // It looks like you can't assign QBool to int. + sipRes = bool(sipCpp->contains(*a0)); +%End + + QModelIndexList indexes() const; + void merge(const QItemSelection &other, QItemSelectionModel::SelectionFlags command); + static void split(const QItemSelectionRange &range, const QItemSelectionRange &other, QItemSelection *result); + void __setitem__(int i, const QItemSelectionRange &range); +%MethodCode + int len; + + len = sipCpp->count(); + + if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) + sipIsErr = 1; + else + (*sipCpp)[a0] = *a1; +%End + + void __setitem__(SIP_PYSLICE slice, const QItemSelection &list); +%MethodCode + Py_ssize_t start, stop, step, slicelength; + + if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) + { + sipIsErr = 1; + } + else + { + int vlen = a1->count(); + + if (vlen != slicelength) + { + sipBadLengthForSlice(vlen, slicelength); + sipIsErr = 1; + } + else + { + QItemSelection::const_iterator it = a1->begin(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipCpp)[start] = *it; + start += step; + ++it; + } + } + } +%End + + void __delitem__(int i); +%MethodCode + if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) + sipIsErr = 1; + else + sipCpp->removeAt(a0); +%End + + void __delitem__(SIP_PYSLICE slice); +%MethodCode + Py_ssize_t start, stop, step, slicelength; + + if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) + { + sipIsErr = 1; + } + else + { + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + sipCpp->removeAt(start); + start += step - 1; + } + } +%End + + QItemSelectionRange operator[](int i); +%MethodCode + Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + + if (idx < 0) + sipIsErr = 1; + else + sipRes = new QItemSelectionRange(sipCpp->operator[]((int)idx)); +%End + + QItemSelection operator[](SIP_PYSLICE slice); +%MethodCode + Py_ssize_t start, stop, step, slicelength; + + if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) + { + sipIsErr = 1; + } + else + { + sipRes = new QItemSelection(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipRes) += (*sipCpp)[start]; + start += step; + } + } +%End + +// Methods inherited from QList. +bool operator!=(const QItemSelection &other) const; +bool operator==(const QItemSelection &other) const; + +// Keep the following in sync with QStringList (except for mid()). +void clear(); +bool isEmpty() const; +void append(const QItemSelectionRange &range); +void prepend(const QItemSelectionRange &range); +void insert(int i, const QItemSelectionRange &range); +void replace(int i, const QItemSelectionRange &range); +void removeAt(int i); +int removeAll(const QItemSelectionRange &range); +QItemSelectionRange takeAt(int i); +QItemSelectionRange takeFirst(); +QItemSelectionRange takeLast(); +void move(int from, int to); +void swap(int i, int j); +int count(const QItemSelectionRange &range) const; +int count() const /__len__/; +QItemSelectionRange &first(); +QItemSelectionRange &last(); +int indexOf(const QItemSelectionRange &value, int from = 0) const; +int lastIndexOf(const QItemSelectionRange &value, int from = -1) const; +QItemSelection &operator+=(const QItemSelection &other); +QItemSelection &operator+=(const QItemSelectionRange &value); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonarray.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonarray.sip new file mode 100644 index 0000000..d0eefce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonarray.sip @@ -0,0 +1,133 @@ +// This is the SIP interface definition for the QJsonArray mapped type. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +// Note that we assume any iterable can be converted to a QJsonArray. However, +// because QJsonValue is an iterable and QJsonObject is implemented as a dict +// (which is also an iterable), then any overloads that handle one or more of +// them must be ordered so that QJsonArray is checked last. + +%MappedType QJsonArray + /TypeHintIn="Iterable[QJsonValue]", TypeHintOut="List[QJsonValue]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + QJsonValue *t = new QJsonValue(sipCpp->at(i)); + PyObject *tobj = sipConvertFromNewType(t, sipType_QJsonValue, + sipTransferObj); + + if (!tobj) + { + delete t; + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, tobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QJsonArray *ql = new QJsonArray; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int state; + QJsonValue *t = reinterpret_cast( + sipForceConvertToType(itm, sipType_QJsonValue, sipTransferObj, + SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QJsonValue' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + + return 0; + } + + ql->append(*t); + + sipReleaseType(t, sipType_QJsonValue, state); + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsondocument.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsondocument.sip new file mode 100644 index 0000000..e920b66 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsondocument.sip @@ -0,0 +1,116 @@ +// qjsondocument.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +struct QJsonParseError +{ +%TypeHeaderCode +#include +%End + + enum ParseError + { + NoError, + UnterminatedObject, + MissingNameSeparator, + UnterminatedArray, + MissingValueSeparator, + IllegalValue, + TerminationByNumber, + IllegalNumber, + IllegalEscapeSequence, + IllegalUTF8String, + UnterminatedString, + MissingObject, + DeepNesting, + DocumentTooLarge, +%If (Qt_5_4_0 -) + GarbageAtEnd, +%End + }; + + QString errorString() const; + int offset; + QJsonParseError::ParseError error; +}; + +class QJsonDocument +{ +%TypeHeaderCode +#include +%End + +public: + QJsonDocument(); + explicit QJsonDocument(const QJsonObject &object); + explicit QJsonDocument(const QJsonArray &array); + QJsonDocument(const QJsonDocument &other); + ~QJsonDocument(); + + enum DataValidation + { + Validate, + BypassValidation, + }; + + static QJsonDocument fromRawData(const char *data /Encoding="None"/, int size, QJsonDocument::DataValidation validation = QJsonDocument::Validate); + const char *rawData(int *size /Out/) const /Encoding="None"/; + static QJsonDocument fromBinaryData(const QByteArray &data, QJsonDocument::DataValidation validation = QJsonDocument::Validate); + QByteArray toBinaryData() const; + static QJsonDocument fromVariant(const QVariant &variant); + QVariant toVariant() const; + + enum JsonFormat + { + Indented, + Compact, + }; + + static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0); + QByteArray toJson() const; + QByteArray toJson(QJsonDocument::JsonFormat format) const; + bool isEmpty() const; + bool isArray() const; + bool isObject() const; + QJsonObject object() const; + QJsonArray array() const; + void setObject(const QJsonObject &object); + void setArray(const QJsonArray &array); + bool operator==(const QJsonDocument &other) const; + bool operator!=(const QJsonDocument &other) const; + bool isNull() const; +%If (Qt_5_10_0 -) + void swap(QJsonDocument &other /Constrained/); +%End +%If (Qt_5_10_0 -) + const QJsonValue operator[](const QString &key) const; +%End +%If (Qt_5_10_0 -) + const QJsonValue operator[](int i) const; +%End +}; + +%If (Qt_5_13_0 -) +QDataStream &operator<<(QDataStream &, const QJsonDocument & /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_13_0 -) +QDataStream &operator>>(QDataStream &, QJsonDocument & /Constrained/) /ReleaseGIL/; +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonobject.sip new file mode 100644 index 0000000..52d4ed7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonobject.sip @@ -0,0 +1,136 @@ +// This is the SIP interface definition for the QJsonObject mapped type. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QJsonObject + /TypeHint="Dict[QString, QJsonValue]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QJsonObject::const_iterator it = sipCpp->constBegin(); + QJsonObject::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + QString *k = new QString(it.key()); + PyObject *kobj = sipConvertFromNewType(k, sipType_QString, + sipTransferObj); + + if (!kobj) + { + delete k; + Py_DECREF(d); + + return 0; + } + + QJsonValue *v = new QJsonValue(it.value()); + PyObject *vobj = sipConvertFromNewType(v, sipType_QJsonValue, + sipTransferObj); + + if (!vobj) + { + delete v; + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + + return 0; + } + + ++it; + } + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QJsonObject *jo = new QJsonObject; + + Py_ssize_t pos = 0; + PyObject *kobj, *vobj; + + while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) + { + int kstate; + QString *k = reinterpret_cast( + sipForceConvertToType(kobj, sipType_QString, sipTransferObj, + SIP_NOT_NONE, &kstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a key has type '%s' but 'str' is expected", + sipPyTypeName(Py_TYPE(kobj))); + + delete jo; + + return 0; + } + + int vstate; + QJsonValue *v = reinterpret_cast( + sipForceConvertToType(vobj, sipType_QJsonValue, sipTransferObj, + SIP_NOT_NONE, &vstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a value has type '%s' but 'QJsonValue' is expected", + sipPyTypeName(Py_TYPE(vobj))); + + sipReleaseType(k, sipType_QString, kstate); + delete jo; + + return 0; + } + + jo->insert(*k, *v); + + sipReleaseType(v, sipType_QJsonValue, vstate); + sipReleaseType(k, sipType_QString, kstate); + } + + *sipCppPtr = jo; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonvalue.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonvalue.sip new file mode 100644 index 0000000..5ec16fb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qjsonvalue.sip @@ -0,0 +1,102 @@ +// qjsonvalue.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QJsonValue /AllowNone,TypeHintIn="Union[QJsonValue, QJsonValue.Type, QJsonArray, QJsonObject, bool, int, float, None, QString]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +if (!sipIsErr) + return qpycore_canConvertTo_QJsonValue(sipPy); + +return qpycore_convertTo_QJsonValue(sipPy, sipTransferObj, sipCppPtr, sipIsErr); +%End + +public: + enum Type + { + Null, + Bool, + Double, + String, + Array, + Object, + Undefined, + }; + + QJsonValue(QJsonValue::Type type /Constrained/ = QJsonValue::Null); + QJsonValue(const QJsonValue &other); + ~QJsonValue(); + static QJsonValue fromVariant(const QVariant &variant); + QVariant toVariant() const; + QJsonValue::Type type() const; + bool isNull() const; + bool isBool() const; + bool isDouble() const; + bool isString() const; + bool isArray() const; + bool isObject() const; + bool isUndefined() const; + bool toBool(bool defaultValue = false) const; + int toInt(int defaultValue = 0) const; + double toDouble(double defaultValue = 0) const; + QJsonArray toArray() const; + QJsonArray toArray(const QJsonArray &defaultValue) const; + QJsonObject toObject() const; + QJsonObject toObject(const QJsonObject &defaultValue) const; + bool operator==(const QJsonValue &other) const; + bool operator!=(const QJsonValue &other) const; +%If (Qt_5_7_0 -) + QString toString() const; +%End +%If (Qt_5_7_0 -) + QString toString(const QString &defaultValue) const; +%End +%If (- Qt_5_7_0) + QString toString(const QString &defaultValue = QString()) const; +%End +%If (Qt_5_10_0 -) + void swap(QJsonValue &other /Constrained/); +%End +%If (Qt_5_10_0 -) + const QJsonValue operator[](const QString &key) const; +%End +%If (Qt_5_10_0 -) + const QJsonValue operator[](int i) const; +%End +%If (Qt_5_12_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; + +%If (Qt_5_13_0 -) +QDataStream &operator<<(QDataStream &, const QJsonValue & /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_13_0 -) +QDataStream &operator>>(QDataStream &, QJsonValue & /Constrained/) /ReleaseGIL/; +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlibrary.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlibrary.sip new file mode 100644 index 0000000..5a9ed45 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlibrary.sip @@ -0,0 +1,64 @@ +// qlibrary.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLibrary : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum LoadHint + { + ResolveAllSymbolsHint, + ExportExternalSymbolsHint, + LoadArchiveMemberHint, + PreventUnloadHint, +%If (Qt_5_5_0 -) + DeepBindHint, +%End + }; + + typedef QFlags LoadHints; + explicit QLibrary(QObject *parent /TransferThis/ = 0); + QLibrary(const QString &fileName, QObject *parent /TransferThis/ = 0); + QLibrary(const QString &fileName, int verNum, QObject *parent /TransferThis/ = 0); + QLibrary(const QString &fileName, const QString &version, QObject *parent /TransferThis/ = 0); + virtual ~QLibrary(); + QString errorString() const; + QString fileName() const; + bool isLoaded() const; + bool load(); + QLibrary::LoadHints loadHints() const; + QFunctionPointer resolve(const char *symbol); + static QFunctionPointer resolve(const QString &fileName, const char *symbol); + static QFunctionPointer resolve(const QString &fileName, int verNum, const char *symbol); + static QFunctionPointer resolve(const QString &fileName, const QString &version, const char *symbol); + bool unload(); + static bool isLibrary(const QString &fileName); + void setFileName(const QString &fileName); + void setFileNameAndVersion(const QString &fileName, int verNum); + void setFileNameAndVersion(const QString &fileName, const QString &version); + void setLoadHints(QLibrary::LoadHints hints); +}; + +QFlags operator|(QLibrary::LoadHint f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlibraryinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlibraryinfo.sip new file mode 100644 index 0000000..b978024 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlibraryinfo.sip @@ -0,0 +1,61 @@ +// qlibraryinfo.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLibraryInfo +{ +%TypeHeaderCode +#include +%End + +public: + static QString licensee(); + static QString licensedProducts(); + + enum LibraryLocation + { + PrefixPath, + DocumentationPath, + HeadersPath, + LibrariesPath, + BinariesPath, + PluginsPath, + DataPath, + TranslationsPath, + SettingsPath, + ExamplesPath, + ImportsPath, + TestsPath, + LibraryExecutablesPath, + Qml2ImportsPath, + ArchDataPath, + }; + + static QString location(QLibraryInfo::LibraryLocation) /ReleaseGIL/; + static QDate buildDate(); + static bool isDebugBuild(); +%If (Qt_5_8_0 -) + static QVersionNumber version(); +%End + +private: + QLibraryInfo(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qline.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qline.sip new file mode 100644 index 0000000..ee9100f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qline.sip @@ -0,0 +1,203 @@ +// qline.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLine +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"iiii", sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2()); +%End + +public: + bool operator!=(const QLine &d) const; + QLine(); + QLine(const QPoint &pt1_, const QPoint &pt2_); + QLine(int x1pos, int y1pos, int x2pos, int y2pos); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QLine()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QLine()"); + #endif + } + else + { + sipRes = + #if PY_MAJOR_VERSION >= 3 + PyUnicode_FromFormat + #else + PyString_FromFormat + #endif + ("PyQt5.QtCore.QLine(%i, %i, %i, %i)", + sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2()); + } +%End + + bool isNull() const; + int __bool__() const; +%MethodCode + sipRes = !sipCpp->isNull(); +%End + + int x1() const; + int y1() const; + int x2() const; + int y2() const; + QPoint p1() const; + QPoint p2() const; + int dx() const; + int dy() const; + void translate(const QPoint &point); + void translate(int adx, int ady); + bool operator==(const QLine &d) const; + QLine translated(const QPoint &p) const; + QLine translated(int adx, int ady) const; + void setP1(const QPoint &aP1); + void setP2(const QPoint &aP2); + void setPoints(const QPoint &aP1, const QPoint &aP2); + void setLine(int aX1, int aY1, int aX2, int aY2); +%If (Qt_5_8_0 -) + QPoint center() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QLine & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QLine & /Constrained/) /ReleaseGIL/; + +class QLineF +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"dddd", sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2()); +%End + +public: + enum IntersectType + { + NoIntersection, + BoundedIntersection, + UnboundedIntersection, + }; + + QLineF(const QLine &line); + bool isNull() const; + int __bool__() const; +%MethodCode + sipRes = !sipCpp->isNull(); +%End + + qreal length() const; + QLineF unitVector() const; + QLineF::IntersectType intersect(const QLineF &l, QPointF *intersectionPoint) const; +%If (Qt_5_14_0 -) + typedef QLineF::IntersectType IntersectionType; +%End +%If (Qt_5_14_0 -) + QLineF::IntersectionType intersects(const QLineF &l, QPointF *intersectionPoint /Out/) const; +%End + bool operator!=(const QLineF &d) const; + QLineF(); + QLineF(const QPointF &apt1, const QPointF &apt2); + QLineF(qreal x1pos, qreal y1pos, qreal x2pos, qreal y2pos); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QLineF()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QLineF()"); + #endif + } + else + { + PyObject *x1 = PyFloat_FromDouble(sipCpp->x1()); + PyObject *y1 = PyFloat_FromDouble(sipCpp->y1()); + PyObject *x2 = PyFloat_FromDouble(sipCpp->x2()); + PyObject *y2 = PyFloat_FromDouble(sipCpp->y2()); + + if (x1 && y1 && x2 && y2) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QLineF(%R, %R, %R, %R)", + x1, y1, x2, y2); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QLineF("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(x1)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(y1)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(x2)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(y2)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + Py_XDECREF(x1); + Py_XDECREF(y1); + Py_XDECREF(x2); + Py_XDECREF(y2); + } +%End + + qreal x1() const; + qreal y1() const; + qreal x2() const; + qreal y2() const; + QPointF p1() const; + QPointF p2() const; + qreal dx() const; + qreal dy() const; + QLineF normalVector() const; + void translate(const QPointF &point); + void translate(qreal adx, qreal ady); + void setLength(qreal len); + QPointF pointAt(qreal t) const; + QLine toLine() const; + bool operator==(const QLineF &d) const; + static QLineF fromPolar(qreal length, qreal angle); + qreal angle() const; + void setAngle(qreal angle); + qreal angleTo(const QLineF &l) const; + QLineF translated(const QPointF &p) const; + QLineF translated(qreal adx, qreal ady) const; + void setP1(const QPointF &aP1); + void setP2(const QPointF &aP2); + void setPoints(const QPointF &aP1, const QPointF &aP2); + void setLine(qreal aX1, qreal aY1, qreal aX2, qreal aY2); +%If (Qt_5_8_0 -) + QPointF center() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QLineF & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QLineF & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlocale.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlocale.sip new file mode 100644 index 0000000..3c9a300 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlocale.sip @@ -0,0 +1,1622 @@ +// qlocale.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLocale +{ +%TypeHeaderCode +#include +%End + +public: + enum Language + { + C, + Abkhazian, + Afan, + Afar, + Afrikaans, + Albanian, + Amharic, + Arabic, + Armenian, + Assamese, + Aymara, + Azerbaijani, + Bashkir, + Basque, + Bengali, + Bhutani, + Bihari, + Bislama, + Breton, + Bulgarian, + Burmese, + Byelorussian, + Cambodian, + Catalan, + Chinese, + Corsican, + Croatian, + Czech, + Danish, + Dutch, + English, + Esperanto, + Estonian, + Faroese, + Finnish, + French, + Frisian, + Gaelic, + Galician, + Georgian, + German, + Greek, + Greenlandic, + Guarani, + Gujarati, + Hausa, + Hebrew, + Hindi, + Hungarian, + Icelandic, + Indonesian, + Interlingua, + Interlingue, + Inuktitut, + Inupiak, + Irish, + Italian, + Japanese, + Javanese, + Kannada, + Kashmiri, + Kazakh, + Kinyarwanda, + Kirghiz, + Korean, + Kurdish, + Kurundi, + Latin, + Latvian, + Lingala, + Lithuanian, + Macedonian, + Malagasy, + Malay, + Malayalam, + Maltese, + Maori, + Marathi, + Moldavian, + Mongolian, + NauruLanguage, + Nepali, + Norwegian, + Occitan, + Oriya, + Pashto, + Persian, + Polish, + Portuguese, + Punjabi, + Quechua, + RhaetoRomance, + Romanian, + Russian, + Samoan, + Sanskrit, + Serbian, + SerboCroatian, + Shona, + Sindhi, + Slovak, + Slovenian, + Somali, + Spanish, + Sundanese, + Swahili, + Swedish, + Tagalog, + Tajik, + Tamil, + Tatar, + Telugu, + Thai, + Tibetan, + Tigrinya, + Tsonga, + Turkish, + Turkmen, + Twi, + Uigur, + Ukrainian, + Urdu, + Uzbek, + Vietnamese, + Volapuk, + Welsh, + Wolof, + Xhosa, + Yiddish, + Yoruba, + Zhuang, + Zulu, + Bosnian, + Divehi, + Manx, + Cornish, + LastLanguage, + NorwegianBokmal, + NorwegianNynorsk, + Akan, + Konkani, + Ga, + Igbo, + Kamba, + Syriac, + Blin, + Geez, + Koro, + Sidamo, + Atsam, + Tigre, + Jju, + Friulian, + Venda, + Ewe, + Walamo, + Hawaiian, + Tyap, + Chewa, + Filipino, + SwissGerman, + SichuanYi, + Kpelle, + LowGerman, + SouthNdebele, + NorthernSotho, + NorthernSami, + Taroko, + Gusii, + Taita, + Fulah, + Kikuyu, + Samburu, + Sena, + NorthNdebele, + Rombo, + Tachelhit, + Kabyle, + Nyankole, + Bena, + Vunjo, + Bambara, + Embu, + Cherokee, + Morisyen, + Makonde, + Langi, + Ganda, + Bemba, + Kabuverdianu, + Meru, + Kalenjin, + Nama, + Machame, + Colognian, + Masai, + Soga, + Luyia, + Asu, + Teso, + Saho, + KoyraChiini, + Rwa, + Luo, + Chiga, + CentralMoroccoTamazight, + KoyraboroSenni, + Shambala, + AnyLanguage, + Rundi, + Bodo, + Aghem, + Basaa, + Zarma, + Duala, + JolaFonyi, + Ewondo, + Bafia, + LubaKatanga, + MakhuwaMeetto, + Mundang, + Kwasio, + Nuer, + Sakha, + Sangu, + CongoSwahili, + Tasawaq, + Vai, + Walser, + Yangben, + Oromo, + Dzongkha, + Belarusian, + Khmer, + Fijian, + WesternFrisian, + Lao, + Marshallese, + Romansh, + Sango, + Ossetic, + SouthernSotho, + Tswana, + Sinhala, + Swati, + Sardinian, + Tongan, + Tahitian, + Nyanja, + Avaric, + Chamorro, + Chechen, + Church, + Chuvash, + Cree, + Haitian, + Herero, + HiriMotu, + Kanuri, + Komi, + Kongo, + Kwanyama, + Limburgish, + Luxembourgish, + Navaho, + Ndonga, + Ojibwa, + Pali, + Walloon, + Avestan, + Asturian, + Ngomba, + Kako, + Meta, + Ngiemboon, +%If (Qt_5_1_0 -) + Uighur, +%End +%If (Qt_5_1_0 -) + Aragonese, +%End +%If (Qt_5_1_0 -) + Akkadian, +%End +%If (Qt_5_1_0 -) + AncientEgyptian, +%End +%If (Qt_5_1_0 -) + AncientGreek, +%End +%If (Qt_5_1_0 -) + Aramaic, +%End +%If (Qt_5_1_0 -) + Balinese, +%End +%If (Qt_5_1_0 -) + Bamun, +%End +%If (Qt_5_1_0 -) + BatakToba, +%End +%If (Qt_5_1_0 -) + Buginese, +%End +%If (Qt_5_1_0 -) + Buhid, +%End +%If (Qt_5_1_0 -) + Carian, +%End +%If (Qt_5_1_0 -) + Chakma, +%End +%If (Qt_5_1_0 -) + ClassicalMandaic, +%End +%If (Qt_5_1_0 -) + Coptic, +%End +%If (Qt_5_1_0 -) + Dogri, +%End +%If (Qt_5_1_0 -) + EasternCham, +%End +%If (Qt_5_1_0 -) + EasternKayah, +%End +%If (Qt_5_1_0 -) + Etruscan, +%End +%If (Qt_5_1_0 -) + Gothic, +%End +%If (Qt_5_1_0 -) + Hanunoo, +%End +%If (Qt_5_1_0 -) + Ingush, +%End +%If (Qt_5_1_0 -) + LargeFloweryMiao, +%End +%If (Qt_5_1_0 -) + Lepcha, +%End +%If (Qt_5_1_0 -) + Limbu, +%End +%If (Qt_5_1_0 -) + Lisu, +%End +%If (Qt_5_1_0 -) + Lu, +%End +%If (Qt_5_1_0 -) + Lycian, +%End +%If (Qt_5_1_0 -) + Lydian, +%End +%If (Qt_5_1_0 -) + Mandingo, +%End +%If (Qt_5_1_0 -) + Manipuri, +%End +%If (Qt_5_1_0 -) + Meroitic, +%End +%If (Qt_5_1_0 -) + NorthernThai, +%End +%If (Qt_5_1_0 -) + OldIrish, +%End +%If (Qt_5_1_0 -) + OldNorse, +%End +%If (Qt_5_1_0 -) + OldPersian, +%End +%If (Qt_5_1_0 -) + OldTurkish, +%End +%If (Qt_5_1_0 -) + Pahlavi, +%End +%If (Qt_5_1_0 -) + Parthian, +%End +%If (Qt_5_1_0 -) + Phoenician, +%End +%If (Qt_5_1_0 -) + PrakritLanguage, +%End +%If (Qt_5_1_0 -) + Rejang, +%End +%If (Qt_5_1_0 -) + Sabaean, +%End +%If (Qt_5_1_0 -) + Samaritan, +%End +%If (Qt_5_1_0 -) + Santali, +%End +%If (Qt_5_1_0 -) + Saurashtra, +%End +%If (Qt_5_1_0 -) + Sora, +%End +%If (Qt_5_1_0 -) + Sylheti, +%End +%If (Qt_5_1_0 -) + Tagbanwa, +%End +%If (Qt_5_1_0 -) + TaiDam, +%End +%If (Qt_5_1_0 -) + TaiNua, +%End +%If (Qt_5_1_0 -) + Ugaritic, +%End +%If (Qt_5_3_0 -) + Akoose, +%End +%If (Qt_5_3_0 -) + Lakota, +%End +%If (Qt_5_3_0 -) + StandardMoroccanTamazight, +%End +%If (Qt_5_5_0 -) + Mapuche, +%End +%If (Qt_5_5_0 -) + CentralKurdish, +%End +%If (Qt_5_5_0 -) + LowerSorbian, +%End +%If (Qt_5_5_0 -) + UpperSorbian, +%End +%If (Qt_5_5_0 -) + Kenyang, +%End +%If (Qt_5_5_0 -) + Mohawk, +%End +%If (Qt_5_5_0 -) + Nko, +%End +%If (Qt_5_5_0 -) + Prussian, +%End +%If (Qt_5_5_0 -) + Kiche, +%End +%If (Qt_5_5_0 -) + SouthernSami, +%End +%If (Qt_5_5_0 -) + LuleSami, +%End +%If (Qt_5_5_0 -) + InariSami, +%End +%If (Qt_5_5_0 -) + SkoltSami, +%End +%If (Qt_5_5_0 -) + Warlpiri, +%End +%If (Qt_5_5_0 -) + ManichaeanMiddlePersian, +%End +%If (Qt_5_5_0 -) + Mende, +%End +%If (Qt_5_5_0 -) + AncientNorthArabian, +%End +%If (Qt_5_5_0 -) + LinearA, +%End +%If (Qt_5_5_0 -) + HmongNjua, +%End +%If (Qt_5_5_0 -) + Ho, +%End +%If (Qt_5_5_0 -) + Lezghian, +%End +%If (Qt_5_5_0 -) + Bassa, +%End +%If (Qt_5_5_0 -) + Mono, +%End +%If (Qt_5_5_0 -) + TedimChin, +%End +%If (Qt_5_5_0 -) + Maithili, +%End +%If (Qt_5_7_0 -) + Ahom, +%End +%If (Qt_5_7_0 -) + AmericanSignLanguage, +%End +%If (Qt_5_7_0 -) + ArdhamagadhiPrakrit, +%End +%If (Qt_5_7_0 -) + Bhojpuri, +%End +%If (Qt_5_7_0 -) + HieroglyphicLuwian, +%End +%If (Qt_5_7_0 -) + LiteraryChinese, +%End +%If (Qt_5_7_0 -) + Mazanderani, +%End +%If (Qt_5_7_0 -) + Mru, +%End +%If (Qt_5_7_0 -) + Newari, +%End +%If (Qt_5_7_0 -) + NorthernLuri, +%End +%If (Qt_5_7_0 -) + Palauan, +%End +%If (Qt_5_7_0 -) + Papiamento, +%End +%If (Qt_5_7_0 -) + Saraiki, +%End +%If (Qt_5_7_0 -) + TokelauLanguage, +%End +%If (Qt_5_7_0 -) + TokPisin, +%End +%If (Qt_5_7_0 -) + TuvaluLanguage, +%End +%If (Qt_5_7_0 -) + UncodedLanguages, +%End +%If (Qt_5_7_0 -) + Cantonese, +%End +%If (Qt_5_7_0 -) + Osage, +%End +%If (Qt_5_7_0 -) + Tangut, +%End +%If (Qt_5_13_0 -) + Ido, +%End +%If (Qt_5_13_0 -) + Lojban, +%End +%If (Qt_5_13_0 -) + Sicilian, +%End +%If (Qt_5_13_0 -) + SouthernKurdish, +%End +%If (Qt_5_13_0 -) + WesternBalochi, +%End +%If (Qt_5_14_0 -) + Cebuano, +%End +%If (Qt_5_14_0 -) + Erzya, +%End +%If (Qt_5_14_0 -) + Chickasaw, +%End +%If (Qt_5_14_0 -) + Muscogee, +%End +%If (Qt_5_14_0 -) + Silesian, +%End +%If (Qt_5_15_2 -) + NigerianPidgin, +%End + }; + + enum Country + { + AnyCountry, + Afghanistan, + Albania, + Algeria, + AmericanSamoa, + Andorra, + Angola, + Anguilla, + Antarctica, + AntiguaAndBarbuda, + Argentina, + Armenia, + Aruba, + Australia, + Austria, + Azerbaijan, + Bahamas, + Bahrain, + Bangladesh, + Barbados, + Belarus, + Belgium, + Belize, + Benin, + Bermuda, + Bhutan, + Bolivia, + BosniaAndHerzegowina, + Botswana, + BouvetIsland, + Brazil, + BritishIndianOceanTerritory, + Bulgaria, + BurkinaFaso, + Burundi, + Cambodia, + Cameroon, + Canada, + CapeVerde, + CaymanIslands, + CentralAfricanRepublic, + Chad, + Chile, + China, + ChristmasIsland, + CocosIslands, + Colombia, + Comoros, + DemocraticRepublicOfCongo, + PeoplesRepublicOfCongo, + CookIslands, + CostaRica, + IvoryCoast, + Croatia, + Cuba, + Cyprus, + CzechRepublic, + Denmark, + Djibouti, + Dominica, + DominicanRepublic, + EastTimor, + Ecuador, + Egypt, + ElSalvador, + EquatorialGuinea, + Eritrea, + Estonia, + Ethiopia, + FalklandIslands, + FaroeIslands, + Finland, + France, + FrenchGuiana, + FrenchPolynesia, + FrenchSouthernTerritories, + Gabon, + Gambia, + Georgia, + Germany, + Ghana, + Gibraltar, + Greece, + Greenland, + Grenada, + Guadeloupe, + Guam, + Guatemala, + Guinea, + GuineaBissau, + Guyana, + Haiti, + HeardAndMcDonaldIslands, + Honduras, + HongKong, + Hungary, + Iceland, + India, + Indonesia, + Iran, + Iraq, + Ireland, + Israel, + Italy, + Jamaica, + Japan, + Jordan, + Kazakhstan, + Kenya, + Kiribati, + DemocraticRepublicOfKorea, + RepublicOfKorea, + Kuwait, + Kyrgyzstan, + Latvia, + Lebanon, + Lesotho, + Liberia, + Liechtenstein, + Lithuania, + Luxembourg, + Macau, + Macedonia, + Madagascar, + Malawi, + Malaysia, + Maldives, + Mali, + Malta, + MarshallIslands, + Martinique, + Mauritania, + Mauritius, + Mayotte, + Mexico, + Micronesia, + Moldova, + Monaco, + Mongolia, + Montserrat, + Morocco, + Mozambique, + Myanmar, + Namibia, + NauruCountry, + Nepal, + Netherlands, + NewCaledonia, + NewZealand, + Nicaragua, + Niger, + Nigeria, + Niue, + NorfolkIsland, + NorthernMarianaIslands, + Norway, + Oman, + Pakistan, + Palau, + Panama, + PapuaNewGuinea, + Paraguay, + Peru, + Philippines, + Pitcairn, + Poland, + Portugal, + PuertoRico, + Qatar, + Reunion, + Romania, + RussianFederation, + Rwanda, + SaintKittsAndNevis, + Samoa, + SanMarino, + SaoTomeAndPrincipe, + SaudiArabia, + Senegal, + Seychelles, + SierraLeone, + Singapore, + Slovakia, + Slovenia, + SolomonIslands, + Somalia, + SouthAfrica, + SouthGeorgiaAndTheSouthSandwichIslands, + Spain, + SriLanka, + Sudan, + Suriname, + SvalbardAndJanMayenIslands, + Swaziland, + Sweden, + Switzerland, + SyrianArabRepublic, + Taiwan, + Tajikistan, + Tanzania, + Thailand, + Togo, + Tokelau, + TrinidadAndTobago, + Tunisia, + Turkey, + Turkmenistan, + TurksAndCaicosIslands, + Tuvalu, + Uganda, + Ukraine, + UnitedArabEmirates, + UnitedKingdom, + UnitedStates, + UnitedStatesMinorOutlyingIslands, + Uruguay, + Uzbekistan, + Vanuatu, + VaticanCityState, + Venezuela, + BritishVirginIslands, + WallisAndFutunaIslands, + WesternSahara, + Yemen, + Zambia, + Zimbabwe, + Montenegro, + Serbia, + SaintBarthelemy, + SaintMartin, + LatinAmericaAndTheCaribbean, + LastCountry, + Brunei, + CongoKinshasa, + CongoBrazzaville, + Fiji, + Guernsey, + NorthKorea, + SouthKorea, + Laos, + Libya, + CuraSao, + PalestinianTerritories, + Russia, + SaintLucia, + SaintVincentAndTheGrenadines, + SaintHelena, + SaintPierreAndMiquelon, + Syria, + Tonga, + Vietnam, + UnitedStatesVirginIslands, + CanaryIslands, + ClippertonIsland, + AscensionIsland, + AlandIslands, + DiegoGarcia, + CeutaAndMelilla, + IsleOfMan, + Jersey, + TristanDaCunha, + SouthSudan, + Bonaire, + SintMaarten, +%If (Qt_5_2_0 -) + Kosovo, +%End +%If (Qt_5_7_0 -) + TokelauCountry, +%End +%If (Qt_5_7_0 -) + TuvaluCountry, +%End +%If (Qt_5_7_0 -) + EuropeanUnion, +%End +%If (Qt_5_7_0 -) + OutlyingOceania, +%End +%If (Qt_5_12_0 -) + LatinAmerica, +%End +%If (Qt_5_12_0 -) + World, +%End +%If (Qt_5_12_0 -) + Europe, +%End + }; + + enum NumberOption + { + OmitGroupSeparator, + RejectGroupSeparator, +%If (Qt_5_7_0 -) + DefaultNumberOptions, +%End +%If (Qt_5_7_0 -) + OmitLeadingZeroInExponent, +%End +%If (Qt_5_7_0 -) + RejectLeadingZeroInExponent, +%End +%If (Qt_5_9_0 -) + IncludeTrailingZeroesAfterDot, +%End +%If (Qt_5_9_0 -) + RejectTrailingZeroesAfterDot, +%End + }; + + typedef QFlags NumberOptions; + QLocale(); + QLocale(const QString &name); + QLocale(QLocale::Language language, QLocale::Country country = QLocale::AnyCountry); + QLocale(const QLocale &other); + ~QLocale(); + QLocale::Language language() const; + QLocale::Country country() const; + QString name() const; + short toShort(const QString &s, bool *ok = 0) const; + ushort toUShort(const QString &s, bool *ok = 0) const; + int toInt(const QString &s, bool *ok = 0) const; + uint toUInt(const QString &s, bool *ok = 0) const; + qlonglong toLongLong(const QString &s, bool *ok = 0) const; + qulonglong toULongLong(const QString &s, bool *ok = 0) const; + float toFloat(const QString &s, bool *ok = 0) const; + double toDouble(const QString &s, bool *ok = 0) const; + QString toString(double i /Constrained/, char format = 'g', int precision = 6) const; + bool operator==(const QLocale &other) const; + bool operator!=(const QLocale &other) const; + static QString languageToString(QLocale::Language language); + static QString countryToString(QLocale::Country country); + static void setDefault(const QLocale &locale); + static QLocale c(); + static QLocale system(); + + enum FormatType + { + LongFormat, + ShortFormat, + NarrowFormat, + }; + + QString toString(const QDateTime &dateTime, const QString &format) const; +%If (Qt_5_14_0 -) + QString toString(const QDateTime &dateTime, const QString &formatStr, QCalendar cal) const; +%MethodCode + // QStringView has issues being implemented as a mapped type. + sipRes = new QString(sipCpp->toString(*a0, QStringView(*a1), *a2)); +%End + +%End + QString toString(const QDateTime &dateTime, QLocale::FormatType format = QLocale::LongFormat) const; +%If (Qt_5_14_0 -) + QString toString(const QDateTime &dateTime, QLocale::FormatType format, QCalendar cal) const; +%End + QString toString(const QDate &date, const QString &formatStr) const; +%If (Qt_5_14_0 -) + QString toString(const QDate &date, const QString &formatStr, QCalendar cal) const; +%MethodCode + // QStringView has issues being implemented as a mapped type. + sipRes = new QString(sipCpp->toString(*a0, QStringView(*a1), *a2)); +%End + +%End + QString toString(const QDate &date, QLocale::FormatType format = QLocale::LongFormat) const; +%If (Qt_5_14_0 -) + QString toString(const QDate &date, QLocale::FormatType format, QCalendar cal) const; +%End + QString toString(const QTime &time, const QString &formatStr) const; + QString toString(const QTime &time, QLocale::FormatType format = QLocale::LongFormat) const; + QString dateFormat(QLocale::FormatType format = QLocale::LongFormat) const; + QString timeFormat(QLocale::FormatType format = QLocale::LongFormat) const; + QString dateTimeFormat(QLocale::FormatType format = QLocale::LongFormat) const; + QDate toDate(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const; + QDate toDate(const QString &string, const QString &format) const; + QTime toTime(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const; + QTime toTime(const QString &string, const QString &format) const; + QDateTime toDateTime(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const; + QDateTime toDateTime(const QString &string, const QString &format) const; + QChar decimalPoint() const; + QChar groupSeparator() const; + QChar percent() const; + QChar zeroDigit() const; + QChar negativeSign() const; + QChar exponential() const; + QString monthName(int, QLocale::FormatType format = QLocale::LongFormat) const; + QString dayName(int, QLocale::FormatType format = QLocale::LongFormat) const; + void setNumberOptions(QLocale::NumberOptions options); + QLocale::NumberOptions numberOptions() const; + + enum MeasurementSystem + { + MetricSystem, + ImperialSystem, + ImperialUSSystem, + ImperialUKSystem, + }; + + QLocale::MeasurementSystem measurementSystem() const; + QChar positiveSign() const; + QString standaloneMonthName(int, QLocale::FormatType format = QLocale::LongFormat) const; + QString standaloneDayName(int, QLocale::FormatType format = QLocale::LongFormat) const; + QString amText() const; + QString pmText() const; + Qt::LayoutDirection textDirection() const; + + enum Script + { + AnyScript, + ArabicScript, + CyrillicScript, + DeseretScript, + GurmukhiScript, + SimplifiedHanScript, + TraditionalHanScript, + LatinScript, + MongolianScript, + TifinaghScript, + SimplifiedChineseScript, + TraditionalChineseScript, + ArmenianScript, + BengaliScript, + CherokeeScript, + DevanagariScript, + EthiopicScript, + GeorgianScript, + GreekScript, + GujaratiScript, + HebrewScript, + JapaneseScript, + KhmerScript, + KannadaScript, + KoreanScript, + LaoScript, + MalayalamScript, + MyanmarScript, + OriyaScript, + TamilScript, + TeluguScript, + ThaanaScript, + ThaiScript, + TibetanScript, + SinhalaScript, + SyriacScript, + YiScript, + VaiScript, +%If (Qt_5_1_0 -) + AvestanScript, +%End +%If (Qt_5_1_0 -) + BalineseScript, +%End +%If (Qt_5_1_0 -) + BamumScript, +%End +%If (Qt_5_1_0 -) + BatakScript, +%End +%If (Qt_5_1_0 -) + BopomofoScript, +%End +%If (Qt_5_1_0 -) + BrahmiScript, +%End +%If (Qt_5_1_0 -) + BugineseScript, +%End +%If (Qt_5_1_0 -) + BuhidScript, +%End +%If (Qt_5_1_0 -) + CanadianAboriginalScript, +%End +%If (Qt_5_1_0 -) + CarianScript, +%End +%If (Qt_5_1_0 -) + ChakmaScript, +%End +%If (Qt_5_1_0 -) + ChamScript, +%End +%If (Qt_5_1_0 -) + CopticScript, +%End +%If (Qt_5_1_0 -) + CypriotScript, +%End +%If (Qt_5_1_0 -) + EgyptianHieroglyphsScript, +%End +%If (Qt_5_1_0 -) + FraserScript, +%End +%If (Qt_5_1_0 -) + GlagoliticScript, +%End +%If (Qt_5_1_0 -) + GothicScript, +%End +%If (Qt_5_1_0 -) + HanScript, +%End +%If (Qt_5_1_0 -) + HangulScript, +%End +%If (Qt_5_1_0 -) + HanunooScript, +%End +%If (Qt_5_1_0 -) + ImperialAramaicScript, +%End +%If (Qt_5_1_0 -) + InscriptionalPahlaviScript, +%End +%If (Qt_5_1_0 -) + InscriptionalParthianScript, +%End +%If (Qt_5_1_0 -) + JavaneseScript, +%End +%If (Qt_5_1_0 -) + KaithiScript, +%End +%If (Qt_5_1_0 -) + KatakanaScript, +%End +%If (Qt_5_1_0 -) + KayahLiScript, +%End +%If (Qt_5_1_0 -) + KharoshthiScript, +%End +%If (Qt_5_1_0 -) + LannaScript, +%End +%If (Qt_5_1_0 -) + LepchaScript, +%End +%If (Qt_5_1_0 -) + LimbuScript, +%End +%If (Qt_5_1_0 -) + LinearBScript, +%End +%If (Qt_5_1_0 -) + LycianScript, +%End +%If (Qt_5_1_0 -) + LydianScript, +%End +%If (Qt_5_1_0 -) + MandaeanScript, +%End +%If (Qt_5_1_0 -) + MeiteiMayekScript, +%End +%If (Qt_5_1_0 -) + MeroiticScript, +%End +%If (Qt_5_1_0 -) + MeroiticCursiveScript, +%End +%If (Qt_5_1_0 -) + NkoScript, +%End +%If (Qt_5_1_0 -) + NewTaiLueScript, +%End +%If (Qt_5_1_0 -) + OghamScript, +%End +%If (Qt_5_1_0 -) + OlChikiScript, +%End +%If (Qt_5_1_0 -) + OldItalicScript, +%End +%If (Qt_5_1_0 -) + OldPersianScript, +%End +%If (Qt_5_1_0 -) + OldSouthArabianScript, +%End +%If (Qt_5_1_0 -) + OrkhonScript, +%End +%If (Qt_5_1_0 -) + OsmanyaScript, +%End +%If (Qt_5_1_0 -) + PhagsPaScript, +%End +%If (Qt_5_1_0 -) + PhoenicianScript, +%End +%If (Qt_5_1_0 -) + PollardPhoneticScript, +%End +%If (Qt_5_1_0 -) + RejangScript, +%End +%If (Qt_5_1_0 -) + RunicScript, +%End +%If (Qt_5_1_0 -) + SamaritanScript, +%End +%If (Qt_5_1_0 -) + SaurashtraScript, +%End +%If (Qt_5_1_0 -) + SharadaScript, +%End +%If (Qt_5_1_0 -) + ShavianScript, +%End +%If (Qt_5_1_0 -) + SoraSompengScript, +%End +%If (Qt_5_1_0 -) + CuneiformScript, +%End +%If (Qt_5_1_0 -) + SundaneseScript, +%End +%If (Qt_5_1_0 -) + SylotiNagriScript, +%End +%If (Qt_5_1_0 -) + TagalogScript, +%End +%If (Qt_5_1_0 -) + TagbanwaScript, +%End +%If (Qt_5_1_0 -) + TaiLeScript, +%End +%If (Qt_5_1_0 -) + TaiVietScript, +%End +%If (Qt_5_1_0 -) + TakriScript, +%End +%If (Qt_5_1_0 -) + UgariticScript, +%End +%If (Qt_5_1_0 -) + BrailleScript, +%End +%If (Qt_5_1_0 -) + HiraganaScript, +%End +%If (Qt_5_5_0 -) + CaucasianAlbanianScript, +%End +%If (Qt_5_5_0 -) + BassaVahScript, +%End +%If (Qt_5_5_0 -) + DuployanScript, +%End +%If (Qt_5_5_0 -) + ElbasanScript, +%End +%If (Qt_5_5_0 -) + GranthaScript, +%End +%If (Qt_5_5_0 -) + PahawhHmongScript, +%End +%If (Qt_5_5_0 -) + KhojkiScript, +%End +%If (Qt_5_5_0 -) + LinearAScript, +%End +%If (Qt_5_5_0 -) + MahajaniScript, +%End +%If (Qt_5_5_0 -) + ManichaeanScript, +%End +%If (Qt_5_5_0 -) + MendeKikakuiScript, +%End +%If (Qt_5_5_0 -) + ModiScript, +%End +%If (Qt_5_5_0 -) + MroScript, +%End +%If (Qt_5_5_0 -) + OldNorthArabianScript, +%End +%If (Qt_5_5_0 -) + NabataeanScript, +%End +%If (Qt_5_5_0 -) + PalmyreneScript, +%End +%If (Qt_5_5_0 -) + PauCinHauScript, +%End +%If (Qt_5_5_0 -) + OldPermicScript, +%End +%If (Qt_5_5_0 -) + PsalterPahlaviScript, +%End +%If (Qt_5_5_0 -) + SiddhamScript, +%End +%If (Qt_5_5_0 -) + KhudawadiScript, +%End +%If (Qt_5_5_0 -) + TirhutaScript, +%End +%If (Qt_5_5_0 -) + VarangKshitiScript, +%End +%If (Qt_5_7_0 -) + AhomScript, +%End +%If (Qt_5_7_0 -) + AnatolianHieroglyphsScript, +%End +%If (Qt_5_7_0 -) + HatranScript, +%End +%If (Qt_5_7_0 -) + MultaniScript, +%End +%If (Qt_5_7_0 -) + OldHungarianScript, +%End +%If (Qt_5_7_0 -) + SignWritingScript, +%End +%If (Qt_5_7_0 -) + AdlamScript, +%End +%If (Qt_5_7_0 -) + BhaiksukiScript, +%End +%If (Qt_5_7_0 -) + MarchenScript, +%End +%If (Qt_5_7_0 -) + NewaScript, +%End +%If (Qt_5_7_0 -) + OsageScript, +%End +%If (Qt_5_7_0 -) + TangutScript, +%End +%If (Qt_5_7_0 -) + HanWithBopomofoScript, +%End +%If (Qt_5_7_0 -) + JamoScript, +%End + }; + + enum CurrencySymbolFormat + { + CurrencyIsoCode, + CurrencySymbol, + CurrencyDisplayName, + }; + + QLocale(QLocale::Language language, QLocale::Script script, QLocale::Country country); + QLocale::Script script() const; + QString bcp47Name() const; + QString nativeLanguageName() const; + QString nativeCountryName() const; + Qt::DayOfWeek firstDayOfWeek() const; + QList weekdays() const; + QString toUpper(const QString &str) const; + QString toLower(const QString &str) const; + QString currencySymbol(QLocale::CurrencySymbolFormat format = QLocale::CurrencySymbol) const; + QString toCurrencyString(double value /Constrained/, const QString &symbol = QString()) const; +%If (Qt_5_7_0 -) + QString toCurrencyString(double value /Constrained/, const QString &symbol, int precision) const; +%End + QStringList uiLanguages() const; + static QString scriptToString(QLocale::Script script); + static QList matchingLocales(QLocale::Language language, QLocale::Script script, QLocale::Country country); + + enum QuotationStyle + { + StandardQuotation, + AlternateQuotation, + }; + + QString quoteString(const QString &str, QLocale::QuotationStyle style = QLocale::StandardQuotation) const; + QString createSeparatedList(const QStringList &list) const; +%If (Qt_5_6_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +%If (Qt_5_7_0 -) + + enum FloatingPointPrecisionOption + { + FloatingPointShortest, + }; + +%End +%If (Qt_5_7_0 -) + void swap(QLocale &other /Constrained/); +%End + QString toString(SIP_PYOBJECT i /TypeHint="int"/) const; +%MethodCode + // Convert a Python int avoiding overflow as much as possible. + + static PyObject *zero = 0; + if (!zero) + zero = PyLong_FromLong(0); + + int rc = PyObject_RichCompareBool(a0, zero, Py_LT); + + PyErr_Clear(); + + if (rc < 0) + { + sipError = sipBadCallableArg(0, a0); + } + else if (rc) + { + #if defined(HAVE_LONG_LONG) + PY_LONG_LONG value = PyLong_AsLongLong(a0); + #else + long value = PyLong_AsLong(a0); + #endif + + if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_OverflowError)) + { + sipError = sipBadCallableArg(0, a0); + } + else + { + sipRes = new QString(sipCpp->toString(value)); + } + } + else + { + #if PY_MAJOR_VERSION >= 3 + #if defined(HAVE_LONG_LONG) + unsigned PY_LONG_LONG value = PyLong_AsUnsignedLongLongMask(a0); + #else + unsigned long value = PyLong_AsUnsignedLongMask(a0); + #endif + #else + #if defined(HAVE_LONG_LONG) + unsigned PY_LONG_LONG value = PyInt_AsUnsignedLongLongMask(a0); + #else + unsigned long value = PyInt_AsUnsignedLongMask(a0); + #endif + #endif + + if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_OverflowError)) + { + sipError = sipBadCallableArg(0, a0); + } + else + { + sipRes = new QString(sipCpp->toString(value)); + } + } +%End + + QString toCurrencyString(SIP_PYOBJECT value /TypeHint="int"/, const QString &symbol = QString()) const; +%MethodCode + // Convert a Python int avoiding overflow as much as possible. + + static PyObject *zero = 0; + if (!zero) + zero = PyLong_FromLong(0); + + int rc = PyObject_RichCompareBool(a0, zero, Py_LT); + + PyErr_Clear(); + + if (rc < 0) + { + sipError = sipBadCallableArg(0, a0); + } + else if (rc) + { + #if defined(HAVE_LONG_LONG) + PY_LONG_LONG value = PyLong_AsLongLong(a0); + #else + long value = PyLong_AsLong(a0); + #endif + + if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_OverflowError)) + { + sipError = sipBadCallableArg(0, a0); + } + else + { + sipRes = new QString(sipCpp->toCurrencyString(value, *a1)); + } + } + else + { + #if defined(HAVE_LONG_LONG) + unsigned PY_LONG_LONG value = PyLong_AsUnsignedLongLongMask(a0); + #else + unsigned long value = PyLong_AsUnsignedLongMask(a0); + #endif + + if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_OverflowError)) + { + sipError = sipBadCallableArg(0, a0); + } + else + { + sipRes = new QString(sipCpp->toCurrencyString(value, *a1)); + } + } +%End + +%If (Qt_5_10_0 -) + + enum DataSizeFormat + { + DataSizeIecFormat, + DataSizeTraditionalFormat, + DataSizeSIFormat, + }; + +%End +%If (Qt_5_10_0 -) + typedef QFlags DataSizeFormats; +%End +%If (Qt_5_10_0 -) + QString formattedDataSize(qint64 bytes, int precision = 2, QLocale::DataSizeFormats format = QLocale::DataSizeIecFormat); +%End +%If (Qt_5_13_0 -) + long toLong(const QString &s, bool *ok = 0) const; +%End +%If (Qt_5_13_0 -) + ulong toULong(const QString &s, bool *ok = 0) const; +%End +%If (Qt_5_14_0 -) + QDate toDate(const QString &string, QLocale::FormatType format, QCalendar cal) const; +%End +%If (Qt_5_14_0 -) + QTime toTime(const QString &string, QLocale::FormatType format, QCalendar cal) const; +%End +%If (Qt_5_14_0 -) + QDateTime toDateTime(const QString &string, QLocale::FormatType format, QCalendar cal) const; +%End +%If (Qt_5_14_0 -) + QDate toDate(const QString &string, const QString &format, QCalendar cal) const; +%End +%If (Qt_5_14_0 -) + QTime toTime(const QString &string, const QString &format, QCalendar cal) const; +%End +%If (Qt_5_14_0 -) + QDateTime toDateTime(const QString &string, const QString &format, QCalendar cal) const; +%End +%If (Qt_5_14_0 -) + QLocale collation() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QLocale & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QLocale & /Constrained/) /ReleaseGIL/; +QFlags operator|(QLocale::NumberOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlockfile.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlockfile.sip new file mode 100644 index 0000000..957cb1c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlockfile.sip @@ -0,0 +1,57 @@ +// qlockfile.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QLockFile +{ +%TypeHeaderCode +#include +%End + +public: + QLockFile(const QString &fileName); + ~QLockFile(); + bool lock() /ReleaseGIL/; + bool tryLock(int timeout = 0) /ReleaseGIL/; + void unlock() /ReleaseGIL/; + void setStaleLockTime(int); + int staleLockTime() const; + bool isLocked() const /ReleaseGIL/; + bool getLockInfo(qint64 *pid /Out/, QString *hostname /Out/, QString *appname /Out/) const; + bool removeStaleLockFile() /ReleaseGIL/; + + enum LockError + { + NoError, + LockFailedError, + PermissionError, + UnknownError, + }; + + QLockFile::LockError error() const; + +private: + QLockFile(const QLockFile &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlogging.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlogging.sip new file mode 100644 index 0000000..2f51f58 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qlogging.sip @@ -0,0 +1,217 @@ +// qlogging.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +enum QtMsgType +{ + QtDebugMsg, + QtWarningMsg, + QtCriticalMsg, + QtFatalMsg, + QtSystemMsg, +%If (Qt_5_5_0 -) + QtInfoMsg, +%End +}; + +class QMessageLogContext /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + int line; + const char *file; + const char *function; + const char *category; +}; + +class QMessageLogger +{ +%TypeHeaderCode +#include +%End + + QMessageLogger(const QMessageLogger &); + +public: + QMessageLogger(); + QMessageLogger(const char *file, int line, const char *function); + QMessageLogger(const char *file, int line, const char *function, const char *category); + void debug(const char *msg) const /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->debug("%s", a0); + Py_END_ALLOW_THREADS +%End + + void warning(const char *msg) const /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->warning("%s", a0); + Py_END_ALLOW_THREADS +%End + + void critical(const char *msg) const /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->critical("%s", a0); + Py_END_ALLOW_THREADS +%End + + void fatal(const char *msg) const /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->fatal("%s", a0); + Py_END_ALLOW_THREADS +%End + +%If (Qt_5_5_0 -) + void info(const char *msg) const /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->info("%s", a0); + Py_END_ALLOW_THREADS +%End + +%End +}; + +void qCritical(const char *msg) /ReleaseGIL/; +%MethodCode + const char *file, *function; + int line = qpycore_current_context(&file, &function); + + Py_BEGIN_ALLOW_THREADS + QMessageLogger(file, line, function).critical("%s", a0); + Py_END_ALLOW_THREADS +%End + +void qDebug(const char *msg) /ReleaseGIL/; +%MethodCode + const char *file, *function; + int line = qpycore_current_context(&file, &function); + + Py_BEGIN_ALLOW_THREADS + QMessageLogger(file, line, function).debug("%s", a0); + Py_END_ALLOW_THREADS +%End + +void qErrnoWarning(int code, const char *msg) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + qErrnoWarning(a0, "%s", a1); + Py_END_ALLOW_THREADS +%End + +void qErrnoWarning(const char *msg) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + qErrnoWarning("%s", a0); + Py_END_ALLOW_THREADS +%End + +void qFatal(const char *msg) /ReleaseGIL/; +%MethodCode + const char *file, *function; + int line = qpycore_current_context(&file, &function); + + Py_BEGIN_ALLOW_THREADS + QMessageLogger(file, line, function).fatal("%s", a0); + Py_END_ALLOW_THREADS +%End + +%If (Qt_5_5_0 -) +void qInfo(const char *msg) /ReleaseGIL/; +%MethodCode + const char *file, *function; + int line = qpycore_current_context(&file, &function); + + Py_BEGIN_ALLOW_THREADS + QMessageLogger(file, line, function).info("%s", a0); + Py_END_ALLOW_THREADS +%End + +%End +void qWarning(const char *msg) /ReleaseGIL/; +%MethodCode + const char *file, *function; + int line = qpycore_current_context(&file, &function); + + Py_BEGIN_ALLOW_THREADS + QMessageLogger(file, line, function).warning("%s", a0); + Py_END_ALLOW_THREADS +%End + +SIP_PYCALLABLE qInstallMessageHandler(SIP_PYCALLABLE /AllowNone,TypeHint="Optional[Callable[[QtMsgType, QMessageLogContext, QString], None]]"/) /TypeHint="Optional[Callable[[QtMsgType, QMessageLogContext, QString], None]]"/; +%MethodCode + // Treat None as the default handler. + QtMessageHandler old = qInstallMessageHandler((a0 != Py_None) ? qtcore_MessageHandler : 0); + + // If we recognise the old handler, then return it. Otherwise return + // the default handler. This doesn't exactly mimic the Qt behaviour + // but it is probably close enough for the way it will be used. + sipRes = (old == qtcore_MessageHandler) ? qtcore_PyMessageHandler : Py_None; + Py_INCREF(sipRes); + + // Save the new Python handler. + Py_XDECREF(qtcore_PyMessageHandler); + qtcore_PyMessageHandler = a0; + Py_INCREF(qtcore_PyMessageHandler); +%End + +// Module code needed by qInstallMessageHandler(). +%ModuleCode +// The user supplied Python handler. +static PyObject *qtcore_PyMessageHandler = 0; + +// The C++ wrapper around the Python handler. +static void qtcore_MessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) +{ + PyObject *res; + + SIP_BLOCK_THREADS + + res = sipCallMethod(0, qtcore_PyMessageHandler, "FDD", type, sipType_QtMsgType, &context, sipType_QMessageLogContext, NULL, &msg, sipType_QString, NULL); + + Py_XDECREF(res); + + if (res != NULL && res != Py_None) + { + PyErr_SetString(PyExc_TypeError, "invalid result type from PyQt message handler"); + res = NULL; + } + + if (res == NULL) + pyqt5_err_print(); + + SIP_UNBLOCK_THREADS +} +%End +void qSetMessagePattern(const QString &messagePattern); +%If (Qt_5_4_0 -) +QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, const QString &buf); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qloggingcategory.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qloggingcategory.sip new file mode 100644 index 0000000..7e7bf18 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qloggingcategory.sip @@ -0,0 +1,50 @@ +// qloggingcategory.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QLoggingCategory +{ +%TypeHeaderCode +#include +%End + +public: + explicit QLoggingCategory(const char *category); + QLoggingCategory(const char *category, QtMsgType severityLevel); + ~QLoggingCategory(); + bool isEnabled(QtMsgType type) const; + void setEnabled(QtMsgType type, bool enable); + bool isDebugEnabled() const; + bool isInfoEnabled() const; + bool isWarningEnabled() const; + bool isCriticalEnabled() const; + const char *categoryName() const; + QLoggingCategory &operator()(); + static QLoggingCategory *defaultCategory(); + static void setFilterRules(const QString &rules); + +private: + QLoggingCategory(const QLoggingCategory &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmargins.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmargins.sip new file mode 100644 index 0000000..2e90293 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmargins.sip @@ -0,0 +1,182 @@ +// qmargins.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMargins +{ +%TypeHeaderCode +#include +%End + +public: + QMargins(); + QMargins(int aleft, int atop, int aright, int abottom); + bool isNull() const; + int left() const; + int top() const; + int right() const; + int bottom() const; + void setLeft(int aleft); + void setTop(int atop); + void setRight(int aright); + void setBottom(int abottom); +%If (Qt_5_1_0 -) + QMargins &operator+=(const QMargins &margins); +%End +%If (Qt_5_1_0 -) + QMargins &operator-=(const QMargins &margins); +%End +%If (Qt_5_1_0 -) + QMargins &operator*=(int factor /Constrained/); +%End +%If (Qt_5_1_0 -) + QMargins &operator/=(int divisor /Constrained/); +%End +%If (Qt_5_1_0 -) + QMargins &operator*=(qreal factor); +%End +%If (Qt_5_1_0 -) + QMargins &operator/=(qreal divisor); +%End +%If (Qt_5_2_0 -) + QMargins &operator+=(int margin); +%End +%If (Qt_5_2_0 -) + QMargins &operator-=(int margin); +%End +}; + +bool operator==(const QMargins &m1, const QMargins &m2); +bool operator!=(const QMargins &m1, const QMargins &m2); +QDataStream &operator<<(QDataStream &, const QMargins & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QMargins & /Constrained/) /ReleaseGIL/; +%If (Qt_5_1_0 - Qt_5_3_0) +QRect operator+(const QRect &rectangle, const QMargins &margins); +%End +%If (Qt_5_1_0 - Qt_5_3_0) +QRect operator+(const QMargins &margins, const QRect &rectangle); +%End +%If (Qt_5_1_0 -) +QMargins operator+(const QMargins &m1, const QMargins &m2); +%End +%If (Qt_5_1_0 -) +QMargins operator-(const QMargins &m1, const QMargins &m2); +%End +%If (Qt_5_1_0 -) +QMargins operator*(const QMargins &margins, int factor /Constrained/); +%End +%If (Qt_5_1_0 -) +QMargins operator*(const QMargins &margins, qreal factor); +%End +%If (Qt_5_1_0 -) +QMargins operator/(const QMargins &margins, int divisor /Constrained/); +%End +%If (Qt_5_1_0 -) +QMargins operator/(const QMargins &margins, qreal divisor); +%End +%If (Qt_5_1_0 -) +QMargins operator-(const QMargins &margins); +%End +%If (Qt_5_3_0 -) +QMargins operator+(const QMargins &lhs, int rhs); +%End +%If (Qt_5_3_0 -) +QMargins operator+(int lhs, const QMargins &rhs); +%End +%If (Qt_5_3_0 -) +QMargins operator-(const QMargins &lhs, int rhs); +%End +%If (Qt_5_3_0 -) +QMargins operator+(const QMargins &margins); +%End +%If (Qt_5_3_0 -) + +class QMarginsF +{ +%TypeHeaderCode +#include +%End + +public: + QMarginsF(); + QMarginsF(qreal aleft, qreal atop, qreal aright, qreal abottom); + QMarginsF(const QMargins &margins); + bool isNull() const; + qreal left() const; + qreal top() const; + qreal right() const; + qreal bottom() const; + void setLeft(qreal aleft); + void setTop(qreal atop); + void setRight(qreal aright); + void setBottom(qreal abottom); + QMarginsF &operator+=(const QMarginsF &margins); + QMarginsF &operator-=(const QMarginsF &margins); + QMarginsF &operator+=(qreal addend); + QMarginsF &operator-=(qreal subtrahend); + QMarginsF &operator*=(qreal factor); + QMarginsF &operator/=(qreal divisor); + QMargins toMargins() const; +}; + +%End +%If (Qt_5_3_0 -) +QDataStream &operator<<(QDataStream &, const QMarginsF & /Constrained/); +%End +%If (Qt_5_3_0 -) +QDataStream &operator>>(QDataStream &, QMarginsF & /Constrained/); +%End +%If (Qt_5_3_0 -) +bool operator==(const QMarginsF &lhs, const QMarginsF &rhs); +%End +%If (Qt_5_3_0 -) +bool operator!=(const QMarginsF &lhs, const QMarginsF &rhs); +%End +%If (Qt_5_3_0 -) +QMarginsF operator+(const QMarginsF &lhs, const QMarginsF &rhs); +%End +%If (Qt_5_3_0 -) +QMarginsF operator-(const QMarginsF &lhs, const QMarginsF &rhs); +%End +%If (Qt_5_3_0 -) +QMarginsF operator+(const QMarginsF &lhs, qreal rhs); +%End +%If (Qt_5_3_0 -) +QMarginsF operator+(qreal lhs, const QMarginsF &rhs); +%End +%If (Qt_5_3_0 -) +QMarginsF operator-(const QMarginsF &lhs, qreal rhs); +%End +%If (Qt_5_3_0 -) +QMarginsF operator*(const QMarginsF &lhs, qreal rhs); +%End +%If (Qt_5_3_0 -) +QMarginsF operator*(qreal lhs, const QMarginsF &rhs); +%End +%If (Qt_5_3_0 -) +QMarginsF operator/(const QMarginsF &lhs, qreal divisor); +%End +%If (Qt_5_3_0 -) +QMarginsF operator+(const QMarginsF &margins); +%End +%If (Qt_5_3_0 -) +QMarginsF operator-(const QMarginsF &margins); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmessageauthenticationcode.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmessageauthenticationcode.sip new file mode 100644 index 0000000..57d4133 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmessageauthenticationcode.sip @@ -0,0 +1,46 @@ +// qmessageauthenticationcode.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QMessageAuthenticationCode +{ +%TypeHeaderCode +#include +%End + +public: + QMessageAuthenticationCode(QCryptographicHash::Algorithm method, const QByteArray &key = QByteArray()); + ~QMessageAuthenticationCode(); + void reset(); + void setKey(const QByteArray &key); + void addData(const char *data, int length); + void addData(const QByteArray &data); + bool addData(QIODevice *device); + QByteArray result() const; + static QByteArray hash(const QByteArray &message, const QByteArray &key, QCryptographicHash::Algorithm method); + +private: + QMessageAuthenticationCode(const QMessageAuthenticationCode &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmetaobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmetaobject.sip new file mode 100644 index 0000000..1c7b9e7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmetaobject.sip @@ -0,0 +1,220 @@ +// qmetaobject.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMetaMethod +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// Raise an exception when QMetaMethod::invoke() returns false. +static void qtcore_invoke_exception() +{ + PyErr_SetString(PyExc_RuntimeError, "QMetaMethod.invoke() call failed"); +} +%End + +public: + QMetaMethod(); + const char *typeName() const; + QList parameterTypes() const; + QList parameterNames() const; + const char *tag() const; + + enum Access + { + Private, + Protected, + Public, + }; + + QMetaMethod::Access access() const; + + enum MethodType + { + Method, + Signal, + Slot, + Constructor, + }; + + QMetaMethod::MethodType methodType() const; + SIP_PYOBJECT invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue /GetWrapper/, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericArgument(0u, 0u), QGenericArgument value9 = QGenericArgument(0u, 0u)) const; +%MethodCode + // Raise an exception if the call failed. + bool ok; + + Py_BEGIN_ALLOW_THREADS + ok = sipCpp->invoke(a0, a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, *a11, + *a12); + Py_END_ALLOW_THREADS + + if (ok) + sipRes = qpycore_ReturnValue(a2Wrapper); + else + qtcore_invoke_exception(); +%End + + SIP_PYOBJECT invoke(QObject *object, QGenericReturnArgument returnValue /GetWrapper/, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericArgument(0u, 0u), QGenericArgument value9 = QGenericArgument(0u, 0u)) const; +%MethodCode + // Raise an exception if the call failed. + bool ok; + + Py_BEGIN_ALLOW_THREADS + ok = sipCpp->invoke(a0, *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, + *a11); + Py_END_ALLOW_THREADS + + if (ok) + sipRes = qpycore_ReturnValue(a1Wrapper); + else + qtcore_invoke_exception(); +%End + + SIP_PYOBJECT invoke(QObject *object, Qt::ConnectionType connectionType, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericArgument(0u, 0u), QGenericArgument value9 = QGenericArgument(0u, 0u)) const; +%MethodCode + // Raise an exception if the call failed. + bool ok; + + Py_BEGIN_ALLOW_THREADS + ok = sipCpp->invoke(a0, a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, *a11); + Py_END_ALLOW_THREADS + + if (ok) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + qtcore_invoke_exception(); +%End + + SIP_PYOBJECT invoke(QObject *object, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericArgument(0u, 0u), QGenericArgument value9 = QGenericArgument(0u, 0u)) const; +%MethodCode + // Raise an exception if the call failed. + bool ok; + + Py_BEGIN_ALLOW_THREADS + ok = sipCpp->invoke(a0, *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10); + Py_END_ALLOW_THREADS + + if (ok) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + qtcore_invoke_exception(); +%End + + int methodIndex() const; + bool isValid() const; + QByteArray methodSignature() const; + QByteArray name() const; + int returnType() const; + int parameterCount() const; + int parameterType(int index) const; +}; + +class QMetaEnum +{ +%TypeHeaderCode +#include +%End + +public: + QMetaEnum(); + const char *name() const; + bool isFlag() const; + int keyCount() const; + const char *key(int index) const; + int value(int index) const; + const char *scope() const; + int keyToValue(const char *key, bool *ok = 0) const; + const char *valueToKey(int value) const; + int keysToValue(const char *keys, bool *ok = 0) const; + QByteArray valueToKeys(int value) const; + bool isValid() const; +%If (Qt_5_8_0 -) + bool isScoped() const; +%End +%If (Qt_5_12_0 -) + const char *enumName() const; +%End +}; + +class QMetaProperty +{ +%TypeHeaderCode +#include +%End + +public: + QMetaProperty(); + const char *name() const; + const char *typeName() const; + QVariant::Type type() const; + bool isReadable() const; + bool isWritable() const; + bool isDesignable(const QObject *object = 0) const; + bool isScriptable(const QObject *object = 0) const; + bool isStored(const QObject *object = 0) const; + bool isFlagType() const; + bool isEnumType() const; + QMetaEnum enumerator() const; + QVariant read(const QObject *obj) const; + bool write(QObject *obj, const QVariant &value) const; + bool reset(QObject *obj) const; + bool hasStdCppSet() const; + bool isValid() const; + bool isResettable() const; + bool isUser(const QObject *object = 0) const; + int userType() const; + bool hasNotifySignal() const; + QMetaMethod notifySignal() const; + int notifySignalIndex() const; + int propertyIndex() const; + bool isConstant() const; + bool isFinal() const; +%If (Qt_5_14_0 -) + int relativePropertyIndex() const; +%End +%If (Qt_5_15_0 -) + bool isRequired() const; +%End +}; + +class QMetaClassInfo +{ +%TypeHeaderCode +#include +%End + +public: + QMetaClassInfo(); + const char *name() const; + const char *value() const; +}; + +bool operator==(const QMetaMethod &m1, const QMetaMethod &m2); +bool operator!=(const QMetaMethod &m1, const QMetaMethod &m2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmetatype.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmetatype.sip new file mode 100644 index 0000000..51fb9af --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmetatype.sip @@ -0,0 +1,174 @@ +// qmetatype.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMetaType +{ +%TypeHeaderCode +#include +%End + +public: + enum Type + { + UnknownType, + Void, + Bool, + Int, + UInt, + LongLong, + ULongLong, + Double, + QChar, + QVariantMap, + QVariantList, + QVariantHash, + QString, + QStringList, + QByteArray, + QBitArray, + QDate, + QTime, + QDateTime, + QUrl, + QLocale, + QRect, + QRectF, + QSize, + QSizeF, + QLine, + QLineF, + QPoint, + QPointF, + QRegExp, + LastCoreType, + FirstGuiType, + QFont, + QPixmap, + QBrush, + QColor, + QPalette, + QIcon, + QImage, + QPolygon, + QRegion, + QBitmap, + QCursor, + QSizePolicy, + QKeySequence, + QPen, + QTextLength, + QTextFormat, + QMatrix, + QTransform, + VoidStar, + Long, + Short, + Char, + ULong, + UShort, + UChar, + Float, + QObjectStar, + QMatrix4x4, + QVector2D, + QVector3D, + QVector4D, + QQuaternion, + QEasingCurve, + QVariant, + QUuid, + QModelIndex, + QPolygonF, + SChar, + QRegularExpression, + QJsonValue, + QJsonObject, + QJsonArray, + QJsonDocument, +%If (Qt_5_4_0 -) + QByteArrayList, +%End +%If (Qt_5_5_0 -) + QPersistentModelIndex, +%End +%If (Qt_5_12_0 -) + QCborSimpleType, +%End +%If (Qt_5_12_0 -) + QCborValue, +%End +%If (Qt_5_12_0 -) + QCborArray, +%End +%If (Qt_5_12_0 -) + QCborMap, +%End +%If (Qt_5_15_0 -) + QColorSpace, +%End + User, + }; + + static int type(const char *typeName); + static const char *typeName(int type); + static bool isRegistered(int type); +%If (- Qt_5_15_0) + explicit QMetaType(const int type); +%End +%If (Qt_5_15_0 -) + explicit QMetaType(const int type = QMetaType::Type::UnknownType); +%End + ~QMetaType(); + + enum TypeFlag + { + NeedsConstruction, + NeedsDestruction, + MovableType, + PointerToQObject, + IsEnumeration, + }; + + typedef QFlags TypeFlags; + static QMetaType::TypeFlags typeFlags(int type); + QMetaType::TypeFlags flags() const; + bool isValid() const; + bool isRegistered() const; + static const QMetaObject *metaObjectForType(int type); +%If (Qt_5_13_0 -) + int id() const; +%End +%If (Qt_5_15_0 -) + QByteArray name() const; +%End + +private: + QMetaType(const QMetaType &other); +}; + +QFlags operator|(QMetaType::TypeFlag f1, QFlags f2); +%If (Qt_5_15_0 -) +bool operator==(const QMetaType &a, const QMetaType &b); +%End +%If (Qt_5_15_0 -) +bool operator!=(const QMetaType &a, const QMetaType &b); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimedata.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimedata.sip new file mode 100644 index 0000000..40e78d4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimedata.sip @@ -0,0 +1,59 @@ +// qmimedata.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMimeData : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QMimeData(); + virtual ~QMimeData(); + QList urls() const; + void setUrls(const QList &urls); + bool hasUrls() const; + QString text() const; + void setText(const QString &text); + bool hasText() const; + QString html() const; + void setHtml(const QString &html); + bool hasHtml() const; + QVariant imageData() const; + void setImageData(const QVariant &image); + bool hasImage() const; + QVariant colorData() const; + void setColorData(const QVariant &color); + bool hasColor() const; + QByteArray data(const QString &mimetype) const; + void setData(const QString &mimetype, const QByteArray &data); + virtual bool hasFormat(const QString &mimetype) const; + virtual QStringList formats() const; + void clear(); + void removeFormat(const QString &mimetype); + +protected: + virtual QVariant retrieveData(const QString &mimetype, QVariant::Type preferredType) const; + +private: + QMimeData(const QMimeData &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimedatabase.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimedatabase.sip new file mode 100644 index 0000000..6b14058 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimedatabase.sip @@ -0,0 +1,54 @@ +// qmimedatabase.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMimeDatabase +{ +%TypeHeaderCode +#include +%End + +public: + QMimeDatabase(); + ~QMimeDatabase(); + QMimeType mimeTypeForName(const QString &nameOrAlias) const; + + enum MatchMode + { + MatchDefault, + MatchExtension, + MatchContent, + }; + + QMimeType mimeTypeForFile(const QString &fileName, QMimeDatabase::MatchMode mode = QMimeDatabase::MatchDefault) const; + QMimeType mimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode = QMimeDatabase::MatchDefault) const; + QList mimeTypesForFileName(const QString &fileName) const; + QMimeType mimeTypeForData(const QByteArray &data) const; + QMimeType mimeTypeForData(QIODevice *device) const; + QMimeType mimeTypeForUrl(const QUrl &url) const; + QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const; + QMimeType mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const; + QString suffixForFileName(const QString &fileName) const; + QList allMimeTypes() const; + +private: + QMimeDatabase(const QMimeDatabase &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimetype.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimetype.sip new file mode 100644 index 0000000..d99ebfb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmimetype.sip @@ -0,0 +1,57 @@ +// qmimetype.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMimeType +{ +%TypeHeaderCode +#include +%End + +public: + QMimeType(); + QMimeType(const QMimeType &other); + ~QMimeType(); + void swap(QMimeType &other /Constrained/); + bool operator==(const QMimeType &other) const; + bool operator!=(const QMimeType &other) const; + bool isValid() const; + bool isDefault() const; + QString name() const; + QString comment() const; + QString genericIconName() const; + QString iconName() const; + QStringList globPatterns() const; + QStringList parentMimeTypes() const; + QStringList allAncestors() const; + QStringList aliases() const; + QStringList suffixes() const; + QString preferredSuffix() const; + bool inherits(const QString &mimeTypeName) const; + QString filterString() const; +%If (Qt_5_6_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmutex.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmutex.sip new file mode 100644 index 0000000..2532fb7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qmutex.sip @@ -0,0 +1,97 @@ +// qmutex.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMutexLocker +{ +%TypeHeaderCode +#include +%End + +public: + explicit QMutexLocker(QMutex *m) /ReleaseGIL/; +%If (Qt_5_14_0 -) + explicit QMutexLocker(QRecursiveMutex *m) /ReleaseGIL/; +%End + ~QMutexLocker(); + void unlock(); + void relock() /ReleaseGIL/; + QMutex *mutex() const; + SIP_PYOBJECT __enter__(); +%MethodCode + // Just return a reference to self. + sipRes = sipSelf; + Py_INCREF(sipRes); +%End + + void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); +%MethodCode + sipCpp->unlock(); +%End + +private: + QMutexLocker(const QMutexLocker &); +}; + +class QMutex +{ +%TypeHeaderCode +#include +%End + +public: + enum RecursionMode + { + NonRecursive, + Recursive, + }; + + explicit QMutex(QMutex::RecursionMode mode = QMutex::NonRecursive); + ~QMutex(); + void lock() /ReleaseGIL/; + bool tryLock(int timeout = 0) /ReleaseGIL/; + void unlock() /ReleaseGIL/; +%If (Qt_5_7_0 -) + bool isRecursive() const; +%End +%If (- Qt_5_7_0) +// Methods implemented in QBasicMutex. +bool isRecursive(); +%End + +private: + QMutex(const QMutex &); +}; + +%If (Qt_5_14_0 -) + +class QRecursiveMutex : private QMutex /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + QRecursiveMutex(); + ~QRecursiveMutex(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qnamespace.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qnamespace.sip new file mode 100644 index 0000000..f41f773 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qnamespace.sip @@ -0,0 +1,1835 @@ +// qnamespace.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace Qt +{ +%TypeHeaderCode +#include +%End + + enum GlobalColor + { + color0, + color1, + black, + white, + darkGray, + gray, + lightGray, + red, + green, + blue, + cyan, + magenta, + yellow, + darkRed, + darkGreen, + darkBlue, + darkCyan, + darkMagenta, + darkYellow, + transparent, + }; + + enum KeyboardModifier + { + NoModifier, + ShiftModifier, + ControlModifier, + AltModifier, + MetaModifier, + KeypadModifier, + GroupSwitchModifier, + KeyboardModifierMask, + }; + + typedef QFlags KeyboardModifiers; + + enum Modifier + { + META, + SHIFT, + CTRL, + ALT, + MODIFIER_MASK, + UNICODE_ACCEL, + }; + + enum MouseButton + { + NoButton, + AllButtons, + LeftButton, + RightButton, + MidButton, + MiddleButton, + XButton1, + XButton2, + BackButton, + ExtraButton1, + ForwardButton, + ExtraButton2, + TaskButton, + ExtraButton3, + ExtraButton4, + ExtraButton5, + ExtraButton6, + ExtraButton7, + ExtraButton8, + ExtraButton9, + ExtraButton10, + ExtraButton11, + ExtraButton12, + ExtraButton13, + ExtraButton14, + ExtraButton15, + ExtraButton16, + ExtraButton17, + ExtraButton18, + ExtraButton19, + ExtraButton20, + ExtraButton21, + ExtraButton22, + ExtraButton23, + ExtraButton24, + }; + + typedef QFlags MouseButtons; + + enum Orientation + { + Horizontal, + Vertical, + }; + + typedef QFlags Orientations; + + enum FocusPolicy + { + NoFocus, + TabFocus, + ClickFocus, + StrongFocus, + WheelFocus, + }; + + enum SortOrder + { + AscendingOrder, + DescendingOrder, + }; + + enum AlignmentFlag + { + AlignLeft, + AlignLeading, + AlignRight, + AlignTrailing, + AlignHCenter, + AlignJustify, + AlignAbsolute, + AlignHorizontal_Mask, + AlignTop, + AlignBottom, + AlignVCenter, + AlignVertical_Mask, + AlignCenter, +%If (Qt_5_2_0 -) + AlignBaseline, +%End + }; + + typedef QFlags Alignment; + + enum TextFlag + { + TextSingleLine, + TextDontClip, + TextExpandTabs, + TextShowMnemonic, + TextWordWrap, + TextWrapAnywhere, + TextDontPrint, + TextIncludeTrailingSpaces, + TextHideMnemonic, + TextJustificationForced, + }; + + enum TextElideMode + { + ElideLeft, + ElideRight, + ElideMiddle, + ElideNone, + }; + + enum WindowType + { + Widget, + Window, + Dialog, + Sheet, + Drawer, + Popup, + Tool, + ToolTip, + SplashScreen, + Desktop, + SubWindow, + WindowType_Mask, + MSWindowsFixedSizeDialogHint, + MSWindowsOwnDC, + X11BypassWindowManagerHint, + FramelessWindowHint, + CustomizeWindowHint, + WindowTitleHint, + WindowSystemMenuHint, + WindowMinimizeButtonHint, + WindowMaximizeButtonHint, + WindowMinMaxButtonsHint, + WindowContextHelpButtonHint, + WindowShadeButtonHint, + WindowStaysOnTopHint, +%If (- Qt_5_8_0) + WindowOkButtonHint, +%End +%If (- Qt_5_8_0) + WindowCancelButtonHint, +%End + WindowStaysOnBottomHint, + WindowCloseButtonHint, + MacWindowToolBarButtonHint, + BypassGraphicsProxyWidget, + WindowTransparentForInput, + WindowOverridesSystemGestures, + WindowDoesNotAcceptFocus, + NoDropShadowWindowHint, + WindowFullscreenButtonHint, +%If (Qt_5_1_0 -) + ForeignWindow, +%End +%If (Qt_5_1_0 -) + BypassWindowManagerHint, +%End +%If (Qt_5_2_0 -) + CoverWindow, +%End +%If (Qt_5_5_0 -) + MaximizeUsingFullscreenGeometryHint, +%End + }; + + typedef QFlags WindowFlags; + + enum WindowState + { + WindowNoState, + WindowMinimized, + WindowMaximized, + WindowFullScreen, + WindowActive, + }; + + typedef QFlags WindowStates; + + enum WidgetAttribute + { + WA_Disabled, + WA_UnderMouse, + WA_MouseTracking, + WA_OpaquePaintEvent, + WA_StaticContents, + WA_LaidOut, + WA_PaintOnScreen, + WA_NoSystemBackground, + WA_UpdatesDisabled, + WA_Mapped, + WA_MacNoClickThrough, + WA_InputMethodEnabled, + WA_WState_Visible, + WA_WState_Hidden, + WA_ForceDisabled, + WA_KeyCompression, + WA_PendingMoveEvent, + WA_PendingResizeEvent, + WA_SetPalette, + WA_SetFont, + WA_SetCursor, + WA_NoChildEventsFromChildren, + WA_WindowModified, + WA_Resized, + WA_Moved, + WA_PendingUpdate, + WA_InvalidSize, + WA_MacMetalStyle, + WA_CustomWhatsThis, + WA_LayoutOnEntireRect, + WA_OutsideWSRange, + WA_GrabbedShortcut, + WA_TransparentForMouseEvents, + WA_PaintUnclipped, + WA_SetWindowIcon, + WA_NoMouseReplay, + WA_DeleteOnClose, + WA_RightToLeft, + WA_SetLayoutDirection, + WA_NoChildEventsForParent, + WA_ForceUpdatesDisabled, + WA_WState_Created, + WA_WState_CompressKeys, + WA_WState_InPaintEvent, + WA_WState_Reparented, + WA_WState_ConfigPending, + WA_WState_Polished, + WA_WState_OwnSizePolicy, + WA_WState_ExplicitShowHide, + WA_MouseNoMask, + WA_GroupLeader, + WA_NoMousePropagation, + WA_Hover, + WA_InputMethodTransparent, + WA_QuitOnClose, + WA_KeyboardFocusChange, + WA_AcceptDrops, + WA_WindowPropagation, + WA_NoX11EventCompression, + WA_TintedBackground, + WA_X11OpenGLOverlay, + WA_AttributeCount, + WA_AlwaysShowToolTips, + WA_MacOpaqueSizeGrip, + WA_SetStyle, + WA_MacBrushedMetal, + WA_SetLocale, + WA_MacShowFocusRect, + WA_MacNormalSize, + WA_MacSmallSize, + WA_MacMiniSize, + WA_LayoutUsesWidgetRect, + WA_StyledBackground, + WA_MSWindowsUseDirect3D, + WA_MacAlwaysShowToolWindow, + WA_StyleSheet, + WA_ShowWithoutActivating, + WA_NativeWindow, + WA_DontCreateNativeAncestors, + WA_MacVariableSize, + WA_DontShowOnScreen, + WA_X11NetWmWindowTypeDesktop, + WA_X11NetWmWindowTypeDock, + WA_X11NetWmWindowTypeToolBar, + WA_X11NetWmWindowTypeMenu, + WA_X11NetWmWindowTypeUtility, + WA_X11NetWmWindowTypeSplash, + WA_X11NetWmWindowTypeDialog, + WA_X11NetWmWindowTypeDropDownMenu, + WA_X11NetWmWindowTypePopupMenu, + WA_X11NetWmWindowTypeToolTip, + WA_X11NetWmWindowTypeNotification, + WA_X11NetWmWindowTypeCombo, + WA_X11NetWmWindowTypeDND, + WA_MacFrameworkScaled, + WA_TranslucentBackground, + WA_AcceptTouchEvents, + WA_TouchPadAcceptSingleTouchEvents, + WA_X11DoNotAcceptFocus, + WA_MacNoShadow, +%If (Qt_5_4_0 -) + WA_AlwaysStackOnTop, +%End +%If (Qt_5_9_0 -) + WA_TabletTracking, +%End +%If (Qt_5_11_0 -) + WA_ContentsMarginsRespectsSafeArea, +%End +%If (Qt_5_12_0 -) + WA_StyleSheetTarget, +%End + }; + + enum ImageConversionFlag + { + AutoColor, + ColorOnly, + MonoOnly, + ThresholdAlphaDither, + OrderedAlphaDither, + DiffuseAlphaDither, + DiffuseDither, + OrderedDither, + ThresholdDither, + AutoDither, + PreferDither, + AvoidDither, + NoOpaqueDetection, + NoFormatConversion, + }; + + typedef QFlags ImageConversionFlags; + + enum BGMode + { + TransparentMode, + OpaqueMode, + }; + + enum Key + { + Key_Escape, + Key_Tab, + Key_Backtab, + Key_Backspace, + Key_Return, + Key_Enter, + Key_Insert, + Key_Delete, + Key_Pause, + Key_Print, + Key_SysReq, + Key_Clear, + Key_Home, + Key_End, + Key_Left, + Key_Up, + Key_Right, + Key_Down, + Key_PageUp, + Key_PageDown, + Key_Shift, + Key_Control, + Key_Meta, + Key_Alt, + Key_CapsLock, + Key_NumLock, + Key_ScrollLock, + Key_F1, + Key_F2, + Key_F3, + Key_F4, + Key_F5, + Key_F6, + Key_F7, + Key_F8, + Key_F9, + Key_F10, + Key_F11, + Key_F12, + Key_F13, + Key_F14, + Key_F15, + Key_F16, + Key_F17, + Key_F18, + Key_F19, + Key_F20, + Key_F21, + Key_F22, + Key_F23, + Key_F24, + Key_F25, + Key_F26, + Key_F27, + Key_F28, + Key_F29, + Key_F30, + Key_F31, + Key_F32, + Key_F33, + Key_F34, + Key_F35, + Key_Super_L, + Key_Super_R, + Key_Menu, + Key_Hyper_L, + Key_Hyper_R, + Key_Help, + Key_Direction_L, + Key_Direction_R, + Key_Space, + Key_Any, + Key_Exclam, + Key_QuoteDbl, + Key_NumberSign, + Key_Dollar, + Key_Percent, + Key_Ampersand, + Key_Apostrophe, + Key_ParenLeft, + Key_ParenRight, + Key_Asterisk, + Key_Plus, + Key_Comma, + Key_Minus, + Key_Period, + Key_Slash, + Key_0, + Key_1, + Key_2, + Key_3, + Key_4, + Key_5, + Key_6, + Key_7, + Key_8, + Key_9, + Key_Colon, + Key_Semicolon, + Key_Less, + Key_Equal, + Key_Greater, + Key_Question, + Key_At, + Key_A, + Key_B, + Key_C, + Key_D, + Key_E, + Key_F, + Key_G, + Key_H, + Key_I, + Key_J, + Key_K, + Key_L, + Key_M, + Key_N, + Key_O, + Key_P, + Key_Q, + Key_R, + Key_S, + Key_T, + Key_U, + Key_V, + Key_W, + Key_X, + Key_Y, + Key_Z, + Key_BracketLeft, + Key_Backslash, + Key_BracketRight, + Key_AsciiCircum, + Key_Underscore, + Key_QuoteLeft, + Key_BraceLeft, + Key_Bar, + Key_BraceRight, + Key_AsciiTilde, + Key_nobreakspace, + Key_exclamdown, + Key_cent, + Key_sterling, + Key_currency, + Key_yen, + Key_brokenbar, + Key_section, + Key_diaeresis, + Key_copyright, + Key_ordfeminine, + Key_guillemotleft, + Key_notsign, + Key_hyphen, + Key_registered, + Key_macron, + Key_degree, + Key_plusminus, + Key_twosuperior, + Key_threesuperior, + Key_acute, + Key_mu, + Key_paragraph, + Key_periodcentered, + Key_cedilla, + Key_onesuperior, + Key_masculine, + Key_guillemotright, + Key_onequarter, + Key_onehalf, + Key_threequarters, + Key_questiondown, + Key_Agrave, + Key_Aacute, + Key_Acircumflex, + Key_Atilde, + Key_Adiaeresis, + Key_Aring, + Key_AE, + Key_Ccedilla, + Key_Egrave, + Key_Eacute, + Key_Ecircumflex, + Key_Ediaeresis, + Key_Igrave, + Key_Iacute, + Key_Icircumflex, + Key_Idiaeresis, + Key_ETH, + Key_Ntilde, + Key_Ograve, + Key_Oacute, + Key_Ocircumflex, + Key_Otilde, + Key_Odiaeresis, + Key_multiply, + Key_Ooblique, + Key_Ugrave, + Key_Uacute, + Key_Ucircumflex, + Key_Udiaeresis, + Key_Yacute, + Key_THORN, + Key_ssharp, + Key_division, + Key_ydiaeresis, + Key_AltGr, + Key_Multi_key, + Key_Codeinput, + Key_SingleCandidate, + Key_MultipleCandidate, + Key_PreviousCandidate, + Key_Mode_switch, + Key_Kanji, + Key_Muhenkan, + Key_Henkan, + Key_Romaji, + Key_Hiragana, + Key_Katakana, + Key_Hiragana_Katakana, + Key_Zenkaku, + Key_Hankaku, + Key_Zenkaku_Hankaku, + Key_Touroku, + Key_Massyo, + Key_Kana_Lock, + Key_Kana_Shift, + Key_Eisu_Shift, + Key_Eisu_toggle, + Key_Hangul, + Key_Hangul_Start, + Key_Hangul_End, + Key_Hangul_Hanja, + Key_Hangul_Jamo, + Key_Hangul_Romaja, + Key_Hangul_Jeonja, + Key_Hangul_Banja, + Key_Hangul_PreHanja, + Key_Hangul_PostHanja, + Key_Hangul_Special, + Key_Dead_Grave, + Key_Dead_Acute, + Key_Dead_Circumflex, + Key_Dead_Tilde, + Key_Dead_Macron, + Key_Dead_Breve, + Key_Dead_Abovedot, + Key_Dead_Diaeresis, + Key_Dead_Abovering, + Key_Dead_Doubleacute, + Key_Dead_Caron, + Key_Dead_Cedilla, + Key_Dead_Ogonek, + Key_Dead_Iota, + Key_Dead_Voiced_Sound, + Key_Dead_Semivoiced_Sound, + Key_Dead_Belowdot, + Key_Dead_Hook, + Key_Dead_Horn, + Key_Back, + Key_Forward, + Key_Stop, + Key_Refresh, + Key_VolumeDown, + Key_VolumeMute, + Key_VolumeUp, + Key_BassBoost, + Key_BassUp, + Key_BassDown, + Key_TrebleUp, + Key_TrebleDown, + Key_MediaPlay, + Key_MediaStop, + Key_MediaPrevious, + Key_MediaNext, + Key_MediaRecord, + Key_HomePage, + Key_Favorites, + Key_Search, + Key_Standby, + Key_OpenUrl, + Key_LaunchMail, + Key_LaunchMedia, + Key_Launch0, + Key_Launch1, + Key_Launch2, + Key_Launch3, + Key_Launch4, + Key_Launch5, + Key_Launch6, + Key_Launch7, + Key_Launch8, + Key_Launch9, + Key_LaunchA, + Key_LaunchB, + Key_LaunchC, + Key_LaunchD, + Key_LaunchE, + Key_LaunchF, + Key_MediaLast, + Key_Select, + Key_Yes, + Key_No, + Key_Context1, + Key_Context2, + Key_Context3, + Key_Context4, + Key_Call, + Key_Hangup, + Key_Flip, + Key_unknown, + Key_Execute, + Key_Printer, + Key_Play, + Key_Sleep, + Key_Zoom, + Key_Cancel, + Key_MonBrightnessUp, + Key_MonBrightnessDown, + Key_KeyboardLightOnOff, + Key_KeyboardBrightnessUp, + Key_KeyboardBrightnessDown, + Key_PowerOff, + Key_WakeUp, + Key_Eject, + Key_ScreenSaver, + Key_WWW, + Key_Memo, + Key_LightBulb, + Key_Shop, + Key_History, + Key_AddFavorite, + Key_HotLinks, + Key_BrightnessAdjust, + Key_Finance, + Key_Community, + Key_AudioRewind, + Key_BackForward, + Key_ApplicationLeft, + Key_ApplicationRight, + Key_Book, + Key_CD, + Key_Calculator, + Key_ToDoList, + Key_ClearGrab, + Key_Close, + Key_Copy, + Key_Cut, + Key_Display, + Key_DOS, + Key_Documents, + Key_Excel, + Key_Explorer, + Key_Game, + Key_Go, + Key_iTouch, + Key_LogOff, + Key_Market, + Key_Meeting, + Key_MenuKB, + Key_MenuPB, + Key_MySites, + Key_News, + Key_OfficeHome, + Key_Option, + Key_Paste, + Key_Phone, + Key_Calendar, + Key_Reply, + Key_Reload, + Key_RotateWindows, + Key_RotationPB, + Key_RotationKB, + Key_Save, + Key_Send, + Key_Spell, + Key_SplitScreen, + Key_Support, + Key_TaskPane, + Key_Terminal, + Key_Tools, + Key_Travel, + Key_Video, + Key_Word, + Key_Xfer, + Key_ZoomIn, + Key_ZoomOut, + Key_Away, + Key_Messenger, + Key_WebCam, + Key_MailForward, + Key_Pictures, + Key_Music, + Key_Battery, + Key_Bluetooth, + Key_WLAN, + Key_UWB, + Key_AudioForward, + Key_AudioRepeat, + Key_AudioRandomPlay, + Key_Subtitle, + Key_AudioCycleTrack, + Key_Time, + Key_Hibernate, + Key_View, + Key_TopMenu, + Key_PowerDown, + Key_Suspend, + Key_ContrastAdjust, + Key_MediaPause, + Key_MediaTogglePlayPause, + Key_LaunchG, + Key_LaunchH, + Key_ToggleCallHangup, + Key_VoiceDial, + Key_LastNumberRedial, + Key_Camera, + Key_CameraFocus, + Key_TouchpadToggle, + Key_TouchpadOn, + Key_TouchpadOff, +%If (Qt_5_1_0 -) + Key_MicMute, +%End +%If (Qt_5_2_0 -) + Key_Red, +%End +%If (Qt_5_2_0 -) + Key_Green, +%End +%If (Qt_5_2_0 -) + Key_Yellow, +%End +%If (Qt_5_2_0 -) + Key_Blue, +%End +%If (Qt_5_2_0 -) + Key_ChannelUp, +%End +%If (Qt_5_2_0 -) + Key_ChannelDown, +%End +%If (Qt_5_3_0 -) + Key_Guide, +%End +%If (Qt_5_3_0 -) + Key_Info, +%End +%If (Qt_5_3_0 -) + Key_Settings, +%End +%If (Qt_5_3_0 -) + Key_Exit, +%End +%If (Qt_5_4_0 -) + Key_MicVolumeUp, +%End +%If (Qt_5_4_0 -) + Key_MicVolumeDown, +%End +%If (Qt_5_4_0 -) + Key_New, +%End +%If (Qt_5_4_0 -) + Key_Open, +%End +%If (Qt_5_4_0 -) + Key_Find, +%End +%If (Qt_5_4_0 -) + Key_Undo, +%End +%If (Qt_5_4_0 -) + Key_Redo, +%End +%If (Qt_5_11_0 -) + Key_Dead_Stroke, +%End +%If (Qt_5_11_0 -) + Key_Dead_Abovecomma, +%End +%If (Qt_5_11_0 -) + Key_Dead_Abovereversedcomma, +%End +%If (Qt_5_11_0 -) + Key_Dead_Doublegrave, +%End +%If (Qt_5_11_0 -) + Key_Dead_Belowring, +%End +%If (Qt_5_11_0 -) + Key_Dead_Belowmacron, +%End +%If (Qt_5_11_0 -) + Key_Dead_Belowcircumflex, +%End +%If (Qt_5_11_0 -) + Key_Dead_Belowtilde, +%End +%If (Qt_5_11_0 -) + Key_Dead_Belowbreve, +%End +%If (Qt_5_11_0 -) + Key_Dead_Belowdiaeresis, +%End +%If (Qt_5_11_0 -) + Key_Dead_Invertedbreve, +%End +%If (Qt_5_11_0 -) + Key_Dead_Belowcomma, +%End +%If (Qt_5_11_0 -) + Key_Dead_Currency, +%End +%If (Qt_5_11_0 -) + Key_Dead_a, +%End +%If (Qt_5_11_0 -) + Key_Dead_A, +%End +%If (Qt_5_11_0 -) + Key_Dead_e, +%End +%If (Qt_5_11_0 -) + Key_Dead_E, +%End +%If (Qt_5_11_0 -) + Key_Dead_i, +%End +%If (Qt_5_11_0 -) + Key_Dead_I, +%End +%If (Qt_5_11_0 -) + Key_Dead_o, +%End +%If (Qt_5_11_0 -) + Key_Dead_O, +%End +%If (Qt_5_11_0 -) + Key_Dead_u, +%End +%If (Qt_5_11_0 -) + Key_Dead_U, +%End +%If (Qt_5_11_0 -) + Key_Dead_Small_Schwa, +%End +%If (Qt_5_11_0 -) + Key_Dead_Capital_Schwa, +%End +%If (Qt_5_11_0 -) + Key_Dead_Greek, +%End +%If (Qt_5_11_0 -) + Key_Dead_Lowline, +%End +%If (Qt_5_11_0 -) + Key_Dead_Aboveverticalline, +%End +%If (Qt_5_11_0 -) + Key_Dead_Belowverticalline, +%End +%If (Qt_5_11_0 -) + Key_Dead_Longsolidusoverlay, +%End + }; + + enum ArrowType + { + NoArrow, + UpArrow, + DownArrow, + LeftArrow, + RightArrow, + }; + + enum PenStyle + { + NoPen, + SolidLine, + DashLine, + DotLine, + DashDotLine, + DashDotDotLine, + CustomDashLine, + MPenStyle, + }; + + enum PenCapStyle + { + FlatCap, + SquareCap, + RoundCap, + MPenCapStyle, + }; + + enum PenJoinStyle + { + MiterJoin, + BevelJoin, + RoundJoin, + MPenJoinStyle, + SvgMiterJoin, + }; + + enum BrushStyle + { + NoBrush, + SolidPattern, + Dense1Pattern, + Dense2Pattern, + Dense3Pattern, + Dense4Pattern, + Dense5Pattern, + Dense6Pattern, + Dense7Pattern, + HorPattern, + VerPattern, + CrossPattern, + BDiagPattern, + FDiagPattern, + DiagCrossPattern, + LinearGradientPattern, + RadialGradientPattern, + ConicalGradientPattern, + TexturePattern, + }; + + enum UIEffect + { + UI_General, + UI_AnimateMenu, + UI_FadeMenu, + UI_AnimateCombo, + UI_AnimateTooltip, + UI_FadeTooltip, + UI_AnimateToolBox, + }; + + enum CursorShape + { + ArrowCursor, + UpArrowCursor, + CrossCursor, + WaitCursor, + IBeamCursor, + SizeVerCursor, + SizeHorCursor, + SizeBDiagCursor, + SizeFDiagCursor, + SizeAllCursor, + BlankCursor, + SplitVCursor, + SplitHCursor, + PointingHandCursor, + ForbiddenCursor, + OpenHandCursor, + ClosedHandCursor, + WhatsThisCursor, + BusyCursor, + LastCursor, + BitmapCursor, + CustomCursor, + DragCopyCursor, + DragMoveCursor, + DragLinkCursor, + }; + + enum TextFormat + { + PlainText, + RichText, + AutoText, +%If (Qt_5_14_0 -) + MarkdownText, +%End + }; + + enum AspectRatioMode + { + IgnoreAspectRatio, + KeepAspectRatio, + KeepAspectRatioByExpanding, + }; + + enum DockWidgetArea + { + LeftDockWidgetArea, + RightDockWidgetArea, + TopDockWidgetArea, + BottomDockWidgetArea, + DockWidgetArea_Mask, + AllDockWidgetAreas, + NoDockWidgetArea, + }; + + typedef QFlags DockWidgetAreas; + + enum TimerType + { + PreciseTimer, + CoarseTimer, + VeryCoarseTimer, + }; + + enum ToolBarArea + { + LeftToolBarArea, + RightToolBarArea, + TopToolBarArea, + BottomToolBarArea, + ToolBarArea_Mask, + AllToolBarAreas, + NoToolBarArea, + }; + + typedef QFlags ToolBarAreas; + + enum DateFormat + { + TextDate, + ISODate, +%If (Qt_5_8_0 -) + ISODateWithMs, +%End + LocalDate, + SystemLocaleDate, + LocaleDate, + SystemLocaleShortDate, + SystemLocaleLongDate, + DefaultLocaleShortDate, + DefaultLocaleLongDate, +%If (Qt_5_2_0 -) + RFC2822Date, +%End + }; + + enum TimeSpec + { + LocalTime, + UTC, + OffsetFromUTC, +%If (Qt_5_2_0 -) + TimeZone, +%End + }; + + enum DayOfWeek + { + Monday, + Tuesday, + Wednesday, + Thursday, + Friday, + Saturday, + Sunday, + }; + + enum ScrollBarPolicy + { + ScrollBarAsNeeded, + ScrollBarAlwaysOff, + ScrollBarAlwaysOn, + }; + + enum CaseSensitivity + { + CaseInsensitive, + CaseSensitive, + }; + + enum Corner + { + TopLeftCorner, + TopRightCorner, + BottomLeftCorner, + BottomRightCorner, + }; + + enum ConnectionType + { + AutoConnection, + DirectConnection, + QueuedConnection, + BlockingQueuedConnection, + UniqueConnection, + }; + + enum ShortcutContext + { + WidgetShortcut, + WindowShortcut, + ApplicationShortcut, + WidgetWithChildrenShortcut, + }; + + enum FillRule + { + OddEvenFill, + WindingFill, + }; + + enum ClipOperation + { + NoClip, + ReplaceClip, + IntersectClip, + }; + + enum TransformationMode + { + FastTransformation, + SmoothTransformation, + }; + + enum FocusReason + { + MouseFocusReason, + TabFocusReason, + BacktabFocusReason, + ActiveWindowFocusReason, + PopupFocusReason, + ShortcutFocusReason, + MenuBarFocusReason, + OtherFocusReason, + NoFocusReason, + }; + + enum ContextMenuPolicy + { + NoContextMenu, + PreventContextMenu, + DefaultContextMenu, + ActionsContextMenu, + CustomContextMenu, + }; + + enum InputMethodQuery + { + ImMicroFocus, + ImFont, + ImCursorPosition, + ImSurroundingText, + ImCurrentSelection, + ImMaximumTextLength, + ImAnchorPosition, + ImEnabled, + ImCursorRectangle, + ImHints, + ImPreferredLanguage, + ImPlatformData, + ImQueryInput, + ImQueryAll, +%If (Qt_5_3_0 -) + ImAbsolutePosition, +%End +%If (Qt_5_3_0 -) + ImTextBeforeCursor, +%End +%If (Qt_5_3_0 -) + ImTextAfterCursor, +%End +%If (Qt_5_6_0 -) + ImEnterKeyType, +%End +%If (Qt_5_7_0 -) + ImAnchorRectangle, +%End +%If (Qt_5_7_0 -) + ImInputItemClipRectangle, +%End + }; + + typedef QFlags InputMethodQueries; + + enum ToolButtonStyle + { + ToolButtonIconOnly, + ToolButtonTextOnly, + ToolButtonTextBesideIcon, + ToolButtonTextUnderIcon, + ToolButtonFollowStyle, + }; + + enum LayoutDirection + { + LeftToRight, + RightToLeft, + LayoutDirectionAuto, + }; + + enum DropAction + { + CopyAction, + MoveAction, + LinkAction, + ActionMask, + TargetMoveAction, + IgnoreAction, + }; + + typedef QFlags DropActions; + + enum CheckState + { + Unchecked, + PartiallyChecked, + Checked, + }; + + enum ItemDataRole + { + DisplayRole, + DecorationRole, + EditRole, + ToolTipRole, + StatusTipRole, + WhatsThisRole, + FontRole, + TextAlignmentRole, + BackgroundRole, + BackgroundColorRole, + ForegroundRole, + TextColorRole, + CheckStateRole, + AccessibleTextRole, + AccessibleDescriptionRole, + SizeHintRole, + InitialSortOrderRole, + UserRole, + }; + + enum ItemFlag + { + NoItemFlags, + ItemIsSelectable, + ItemIsEditable, + ItemIsDragEnabled, + ItemIsDropEnabled, + ItemIsUserCheckable, + ItemIsEnabled, + ItemIsTristate, +%If (Qt_5_1_0 -) + ItemNeverHasChildren, +%End +%If (Qt_5_5_0 -) + ItemIsUserTristate, +%End +%If (Qt_5_6_0 -) + ItemIsAutoTristate, +%End + }; + + typedef QFlags ItemFlags; + + enum MatchFlag + { + MatchExactly, + MatchFixedString, + MatchContains, + MatchStartsWith, + MatchEndsWith, + MatchRegExp, + MatchWildcard, + MatchCaseSensitive, + MatchWrap, + MatchRecursive, +%If (Qt_5_15_0 -) + MatchRegularExpression, +%End + }; + + typedef QFlags MatchFlags; + typedef void *HANDLE; + + enum WindowModality + { + NonModal, + WindowModal, + ApplicationModal, + }; + + enum ApplicationAttribute + { + AA_ImmediateWidgetCreation, + AA_MSWindowsUseDirect3DByDefault, + AA_DontShowIconsInMenus, + AA_NativeWindows, + AA_DontCreateNativeWidgetSiblings, + AA_MacPluginApplication, + AA_DontUseNativeMenuBar, + AA_MacDontSwapCtrlAndMeta, + AA_X11InitThreads, + AA_Use96Dpi, + AA_SynthesizeTouchForUnhandledMouseEvents, + AA_SynthesizeMouseForUnhandledTouchEvents, +%If (Qt_5_1_0 -) + AA_UseHighDpiPixmaps, +%End +%If (Qt_5_3_0 -) + AA_ForceRasterWidgets, +%End +%If (Qt_5_3_0 -) + AA_UseDesktopOpenGL, +%End +%If (Qt_5_3_0 -) + AA_UseOpenGLES, +%End +%If (Qt_5_4_0 -) + AA_UseSoftwareOpenGL, +%End +%If (Qt_5_4_0 -) + AA_ShareOpenGLContexts, +%End +%If (Qt_5_5_0 -) + AA_SetPalette, +%End +%If (Qt_5_6_0 -) + AA_EnableHighDpiScaling, +%End +%If (Qt_5_6_0 -) + AA_DisableHighDpiScaling, +%End +%If (Qt_5_7_0 -) + AA_PluginApplication, +%End +%If (Qt_5_7_0 -) + AA_UseStyleSheetPropagationInWidgetStyles, +%End +%If (Qt_5_7_0 -) + AA_DontUseNativeDialogs, +%End +%If (Qt_5_7_0 -) + AA_SynthesizeMouseForUnhandledTabletEvents, +%End +%If (Qt_5_7_0 -) + AA_CompressHighFrequencyEvents, +%End +%If (Qt_5_8_0 -) + AA_DontCheckOpenGLContextThreadAffinity, +%End +%If (Qt_5_9_0 -) + AA_DisableShaderDiskCache, +%End +%If (Qt_5_10_0 -) + AA_DontShowShortcutsInContextMenus, +%End +%If (Qt_5_10_0 -) + AA_CompressTabletEvents, +%End +%If (Qt_5_10_0 -) + AA_DisableWindowContextHelpButton, +%End +%If (Qt_5_14_0 -) + AA_DisableSessionManager, +%End +%If (Qt_5_15_0 -) + AA_DisableNativeVirtualKeyboard, +%End + }; + + enum ItemSelectionMode + { + ContainsItemShape, + IntersectsItemShape, + ContainsItemBoundingRect, + IntersectsItemBoundingRect, + }; + + enum TextInteractionFlag + { + NoTextInteraction, + TextSelectableByMouse, + TextSelectableByKeyboard, + LinksAccessibleByMouse, + LinksAccessibleByKeyboard, + TextEditable, + TextEditorInteraction, + TextBrowserInteraction, + }; + + typedef QFlags TextInteractionFlags; + + enum MaskMode + { + MaskInColor, + MaskOutColor, + }; + + enum Axis + { + XAxis, + YAxis, + ZAxis, + }; + + enum EventPriority + { + HighEventPriority, + NormalEventPriority, + LowEventPriority, + }; + + enum SizeMode + { + AbsoluteSize, + RelativeSize, + }; + + enum SizeHint + { + MinimumSize, + PreferredSize, + MaximumSize, + MinimumDescent, + }; + + enum WindowFrameSection + { + NoSection, + LeftSection, + TopLeftSection, + TopSection, + TopRightSection, + RightSection, + BottomRightSection, + BottomSection, + BottomLeftSection, + TitleBarArea, + }; + + enum TileRule + { + StretchTile, + RepeatTile, + RoundTile, + }; + + enum InputMethodHint + { + ImhNone, + ImhHiddenText, + ImhNoAutoUppercase, + ImhPreferNumbers, + ImhPreferUppercase, + ImhPreferLowercase, + ImhNoPredictiveText, + ImhDigitsOnly, + ImhFormattedNumbersOnly, + ImhUppercaseOnly, + ImhLowercaseOnly, + ImhDialableCharactersOnly, + ImhEmailCharactersOnly, + ImhUrlCharactersOnly, + ImhExclusiveInputMask, + ImhSensitiveData, + ImhDate, + ImhTime, + ImhPreferLatin, + ImhLatinOnly, +%If (Qt_5_1_0 -) + ImhMultiLine, +%End +%If (Qt_5_11_0 -) + ImhNoEditMenu, +%End +%If (Qt_5_11_0 -) + ImhNoTextHandles, +%End + }; + + typedef QFlags InputMethodHints; + + enum AnchorPoint + { + AnchorLeft, + AnchorHorizontalCenter, + AnchorRight, + AnchorTop, + AnchorVerticalCenter, + AnchorBottom, + }; + + enum CoordinateSystem + { + DeviceCoordinates, + LogicalCoordinates, + }; + + enum TouchPointState + { + TouchPointPressed, + TouchPointMoved, + TouchPointStationary, + TouchPointReleased, + }; + + typedef QFlags TouchPointStates; + + enum GestureState + { + GestureStarted, + GestureUpdated, + GestureFinished, + GestureCanceled, + }; + + enum GestureType + { + TapGesture, + TapAndHoldGesture, + PanGesture, + PinchGesture, + SwipeGesture, + CustomGesture, + }; + + enum GestureFlag + { + DontStartGestureOnChildren, + ReceivePartialGestures, + IgnoredGesturesPropagateToParent, + }; + + typedef QFlags GestureFlags; + + enum NavigationMode + { + NavigationModeNone, + NavigationModeKeypadTabOrder, + NavigationModeKeypadDirectional, + NavigationModeCursorAuto, + NavigationModeCursorForceVisible, + }; + + enum CursorMoveStyle + { + LogicalMoveStyle, + VisualMoveStyle, + }; + + enum ScreenOrientation + { + PrimaryOrientation, + PortraitOrientation, + LandscapeOrientation, + InvertedPortraitOrientation, + InvertedLandscapeOrientation, + }; + + typedef QFlags ScreenOrientations; + + enum FindChildOption + { + FindDirectChildrenOnly, + FindChildrenRecursively, + }; + + typedef QFlags FindChildOptions; + + enum WhiteSpaceMode + { + WhiteSpaceNormal, + WhiteSpacePre, + WhiteSpaceNoWrap, + WhiteSpaceModeUndefined, + }; + + enum HitTestAccuracy + { + ExactHit, + FuzzyHit, + }; + +%If (Qt_5_1_0 -) + + enum ApplicationState + { + ApplicationSuspended, + ApplicationHidden, + ApplicationInactive, + ApplicationActive, + }; + +%End +%If (Qt_5_1_0 -) + typedef QFlags ApplicationStates; +%End +%If (Qt_5_1_0 -) + + enum Edge + { + TopEdge, + LeftEdge, + RightEdge, + BottomEdge, + }; + +%End +%If (Qt_5_2_0 -) + + enum NativeGestureType + { + BeginNativeGesture, + EndNativeGesture, + PanNativeGesture, + ZoomNativeGesture, + SmartZoomNativeGesture, + RotateNativeGesture, + SwipeNativeGesture, + }; + +%End +%If (Qt_5_2_0 -) + + enum ScrollPhase + { + ScrollBegin, + ScrollUpdate, + ScrollEnd, +%If (Qt_5_7_0 -) + NoScrollPhase, +%End +%If (Qt_5_12_0 -) + ScrollMomentum, +%End + }; + +%End +%If (Qt_5_3_0 -) + typedef QFlags Edges; +%End +%If (Qt_5_3_0 -) + + enum MouseEventSource + { + MouseEventNotSynthesized, + MouseEventSynthesizedBySystem, + MouseEventSynthesizedByQt, +%If (Qt_5_6_0 -) + MouseEventSynthesizedByApplication, +%End + }; + +%End +%If (Qt_5_3_0 -) + + enum MouseEventFlag + { + MouseEventCreatedDoubleClick, + }; + +%End +%If (Qt_5_3_0 -) + typedef QFlags MouseEventFlags; +%End +%If (Qt_5_5_0 -) + + enum TabFocusBehavior + { + NoTabFocus, + TabFocusTextControls, + TabFocusListControls, + TabFocusAllControls, + }; + +%End +%If (Qt_5_5_0 -) + + enum ItemSelectionOperation + { + ReplaceSelection, + AddToSelection, + }; + +%End +%If (Qt_5_6_0 -) + + enum EnterKeyType + { + EnterKeyDefault, + EnterKeyReturn, + EnterKeyDone, + EnterKeyGo, + EnterKeySend, + EnterKeySearch, + EnterKeyNext, + EnterKeyPrevious, + }; + +%End +%If (Qt_5_9_0 -) + + enum ChecksumType + { + ChecksumIso3309, + ChecksumItuV41, + }; + +%End +%If (Qt_5_14_0 -) + + enum class HighDpiScaleFactorRoundingPolicy + { + Round, + Ceil, + Floor, + RoundPreferFloor, + PassThrough, + }; + +%End +}; + +QFlags operator|(Qt::MouseButton f1, QFlags f2); +QFlags operator|(Qt::Orientation f1, QFlags f2); +QFlags operator|(Qt::KeyboardModifier f1, QFlags f2); +QFlags operator|(Qt::WindowType f1, QFlags f2); +QFlags operator|(Qt::AlignmentFlag f1, QFlags f2); +QFlags operator|(Qt::ImageConversionFlag f1, QFlags f2); +QFlags operator|(Qt::DockWidgetArea f1, QFlags f2); +QFlags operator|(Qt::ToolBarArea f1, QFlags f2); +QFlags operator|(Qt::WindowState f1, QFlags f2); +QFlags operator|(Qt::DropAction f1, QFlags f2); +QFlags operator|(Qt::ItemFlag f1, QFlags f2); +QFlags operator|(Qt::MatchFlag f1, QFlags f2); +QFlags operator|(Qt::TextInteractionFlag f1, QFlags f2); +QFlags operator|(Qt::InputMethodHint f1, QFlags f2); +QFlags operator|(Qt::TouchPointState f1, QFlags f2); +QFlags operator|(Qt::GestureFlag f1, QFlags f2); +QFlags operator|(Qt::ScreenOrientation f1, QFlags f2); +QFlags operator|(Qt::InputMethodQuery f1, QFlags f2); +%If (Qt_5_3_0 -) +QFlags operator|(Qt::Edge f1, QFlags f2); +%End +%If (Qt_5_3_0 -) +QFlags operator|(Qt::MouseEventFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qnumeric.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qnumeric.sip new file mode 100644 index 0000000..e744ba6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qnumeric.sip @@ -0,0 +1,35 @@ +// qnumeric.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +bool qIsInf(double d); +bool qIsFinite(double d); +bool qIsNaN(double d); +double qInf(); +double qSNaN(); +double qQNaN(); +%If (Qt_5_3_0 -) +quint64 qFloatDistance(double a, double b); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobject.sip new file mode 100644 index 0000000..3483541 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobject.sip @@ -0,0 +1,772 @@ +// qobject.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +typedef QList QObjectList; + +class QObject /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// This is needed by the tr() handwritten implementation. +#include + + +// These are the helper functions for QObject::findChild() and +// QObject::findChildren. + +// Wrap the given type in a 1-tuple. +static PyObject *qtcore_type_to_tuple(PyObject *type) +{ + PyObject *tuple = PyTuple_New(1); + + if (tuple) + { + Py_INCREF(type); + PyTuple_SetItem(tuple, 0, type); + } + + return tuple; +} + + +// Check all elements of a given tuple are type objects and return a new +// reference to the tuple if so. +static PyObject *qtcore_check_tuple_types(PyObject *types) +{ + for (Py_ssize_t i = 0; i < PyTuple_Size(types); ++i) + if (!PyObject_TypeCheck(PyTuple_GetItem(types, i), &PyType_Type)) + { + PyErr_SetString(PyExc_TypeError, + "all elements of the types argument must be type objects"); + return 0; + } + + Py_INCREF(types); + return types; +} + + +// Do the main work of finding a child. +static PyObject *qtcore_do_find_child(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options) +{ + const QObjectList &children = parent->children(); + int i; + + for (i = 0; i < children.size(); ++i) + { + QObject *obj = children.at(i); + PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0); + + if (!pyo) + return 0; + + // Allow for proxies. + QObject *resolved = reinterpret_cast(sipGetAddress((sipSimpleWrapper *)pyo)); + + if (name.isNull() || resolved->objectName() == name) + for (Py_ssize_t t = 0; t < PyTuple_Size(types); ++t) + if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GetItem(types, t))) + return pyo; + + Py_DECREF(pyo); + } + + if (options == Qt::FindChildrenRecursively) + for (i = 0; i < children.size(); ++i) + { + PyObject *pyo = qtcore_do_find_child(children.at(i), types, name, options); + + if (pyo != Py_None) + return pyo; + + Py_DECREF(pyo); + } + + Py_INCREF(Py_None); + return Py_None; +} + + +// Find a child that is one of a number of types and with an optional name. +static PyObject *qtcore_FindChild(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options) +{ + // Check that the types checking was successful. + if (!types) + return 0; + + PyObject *child = qtcore_do_find_child(parent, types, name, options); + + Py_DECREF(types); + + return child; +} + + +// Do the main work of finding the children with a string name. +static bool qtcore_do_find_children(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options, PyObject *list) +{ + const QObjectList &children = parent->children(); + int i; + + for (i = 0; i < children.size(); ++i) + { + QObject *obj = children.at(i); + PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0); + + if (!pyo) + return false; + + // Allow for proxies. + QObject *resolved = reinterpret_cast(sipGetAddress((sipSimpleWrapper *)pyo)); + + if (name.isNull() || resolved->objectName() == name) + for (Py_ssize_t t = 0; t < PyTuple_Size(types); ++t) + if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GetItem(types, t))) + if (PyList_Append(list, pyo) < 0) + { + Py_DECREF(pyo); + return false; + } + + Py_DECREF(pyo); + + if (options == Qt::FindChildrenRecursively) + { + bool ok = qtcore_do_find_children(obj, types, name, options, list); + + if (!ok) + return false; + } + } + + return true; +} + + +// Find a child that is one of a number of types and with an optional string +// name. +static PyObject *qtcore_FindChildren(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options) +{ + // Check that the types checking was successful. + if (!types) + return 0; + + PyObject *list = PyList_New(0); + + if (list) + if (!qtcore_do_find_children(parent, types, name, options, list)) + Py_DECREF(list); + + Py_DECREF(types); + + return list; +} + + +// Do the main work of finding the children with a QRegExp name. +static bool qtcore_do_find_children(const QObject *parent, PyObject *types, const QRegExp &re, Qt::FindChildOptions options, PyObject *list) +{ + const QObjectList &children = parent->children(); + int i; + + for (i = 0; i < children.size(); ++i) + { + QObject *obj = children.at(i); + PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0); + + if (!pyo) + return false; + + if (re.indexIn(obj->objectName()) >= 0) + for (Py_ssize_t t = 0; t < PyTuple_Size(types); ++t) + if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GetItem(types, t))) + if (PyList_Append(list, pyo) < 0) + { + Py_DECREF(pyo); + return false; + } + + Py_DECREF(pyo); + + if (options == Qt::FindChildrenRecursively) + { + bool ok = qtcore_do_find_children(obj, types, re, options, list); + + if (!ok) + return false; + } + } + + return true; +} + + +// Find a child that is one of a number of types and with an optional QRegExp +// name. +static PyObject *qtcore_FindChildren(const QObject *parent, PyObject *types, const QRegExp &re, Qt::FindChildOptions options) +{ + // Check that the types checking was successful. + if (!types) + return 0; + + PyObject *list = PyList_New(0); + + if (list) + if (!qtcore_do_find_children(parent, types, re, options, list)) + Py_DECREF(list); + + Py_DECREF(types); + + return list; +} + + +// Do the main work of finding the children with a QRegularExpression name. +static bool qtcore_do_find_children(const QObject *parent, PyObject *types, const QRegularExpression &re, Qt::FindChildOptions options, PyObject *list) +{ + const QObjectList &children = parent->children(); + int i; + + for (i = 0; i < children.size(); ++i) + { + QObject *obj = children.at(i); + PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0); + + if (!pyo) + return false; + + QRegularExpressionMatch m = re.match(obj->objectName()); + + if (m.hasMatch()) + for (Py_ssize_t t = 0; t < PyTuple_Size(types); ++t) + if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GetItem(types, t))) + if (PyList_Append(list, pyo) < 0) + { + Py_DECREF(pyo); + return false; + } + + Py_DECREF(pyo); + + if (options == Qt::FindChildrenRecursively) + { + bool ok = qtcore_do_find_children(obj, types, re, options, list); + + if (!ok) + return false; + } + } + + return true; +} + + +// Find a child that is one of a number of types and with an optional +// QRegularExpression name. +static PyObject *qtcore_FindChildren(const QObject *parent, PyObject *types, const QRegularExpression &re, Qt::FindChildOptions options) +{ + // Check that the types checking was successful. + if (!types) + return 0; + + PyObject *list = PyList_New(0); + + if (list) + if (!qtcore_do_find_children(parent, types, re, options, list)) + Py_DECREF(list); + + Py_DECREF(types); + + return list; +} +%End + +%FinalisationCode + return qpycore_qobject_finalisation(sipSelf, sipCpp, sipKwds, sipUnused); +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QAbstractAnimation, &sipType_QAbstractAnimation, 25, 1}, + {sipName_QAbstractEventDispatcher, &sipType_QAbstractEventDispatcher, -1, 2}, + {sipName_QAbstractItemModel, &sipType_QAbstractItemModel, 31, 3}, + {sipName_QAbstractState, &sipType_QAbstractState, 39, 4}, + {sipName_QAbstractTransition, &sipType_QAbstractTransition, 43, 5}, + {sipName_QIODevice, &sipType_QIODevice, 45, 6}, + {sipName_QCoreApplication, &sipType_QCoreApplication, -1, 7}, + {sipName_QEventLoop, &sipType_QEventLoop, -1, 8}, + #if QT_VERSION >= 0x050200 + {sipName_QFileSelector, &sipType_QFileSelector, -1, 9}, + #else + {0, 0, -1, 9}, + #endif + {sipName_QFileSystemWatcher, &sipType_QFileSystemWatcher, -1, 10}, + {sipName_QItemSelectionModel, &sipType_QItemSelectionModel, -1, 11}, + {sipName_QLibrary, &sipType_QLibrary, -1, 12}, + {sipName_QMimeData, &sipType_QMimeData, -1, 13}, + {sipName_QObjectCleanupHandler, &sipType_QObjectCleanupHandler, -1, 14}, + {sipName_QPluginLoader, &sipType_QPluginLoader, -1, 15}, + {sipName_QSettings, &sipType_QSettings, -1, 16}, + {sipName_QSharedMemory, &sipType_QSharedMemory, -1, 17}, + {sipName_QSignalMapper, &sipType_QSignalMapper, -1, 18}, + {sipName_QSocketNotifier, &sipType_QSocketNotifier, -1, 19}, + {sipName_QThread, &sipType_QThread, -1, 20}, + {sipName_QThreadPool, &sipType_QThreadPool, -1, 21}, + {sipName_QTimeLine, &sipType_QTimeLine, -1, 22}, + {sipName_QTimer, &sipType_QTimer, -1, 23}, + {sipName_QTranslator, &sipType_QTranslator, -1, 24}, + #if defined(Q_OS_WIN) + {sipName_QWinEventNotifier, &sipType_QWinEventNotifier, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + {sipName_QAnimationGroup, &sipType_QAnimationGroup, 28, 26}, + {sipName_QPauseAnimation, &sipType_QPauseAnimation, -1, 27}, + {sipName_QVariantAnimation, &sipType_QVariantAnimation, 30, -1}, + {sipName_QParallelAnimationGroup, &sipType_QParallelAnimationGroup, -1, 29}, + {sipName_QSequentialAnimationGroup, &sipType_QSequentialAnimationGroup, -1, -1}, + {sipName_QPropertyAnimation, &sipType_QPropertyAnimation, -1, -1}, + {sipName_QAbstractListModel, &sipType_QAbstractListModel, 35, 32}, + {sipName_QAbstractProxyModel, &sipType_QAbstractProxyModel, 36, 33}, + {sipName_QAbstractTableModel, &sipType_QAbstractTableModel, -1, 34}, + #if QT_VERSION >= 0x050d00 + {sipName_QConcatenateTablesProxyModel, &sipType_QConcatenateTablesProxyModel, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + {sipName_QStringListModel, &sipType_QStringListModel, -1, -1}, + {sipName_QIdentityProxyModel, &sipType_QIdentityProxyModel, -1, 37}, + {sipName_QSortFilterProxyModel, &sipType_QSortFilterProxyModel, -1, 38}, + #if QT_VERSION >= 0x050d00 + {sipName_QTransposeProxyModel, &sipType_QTransposeProxyModel, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + {sipName_QFinalState, &sipType_QFinalState, -1, 40}, + {sipName_QHistoryState, &sipType_QHistoryState, -1, 41}, + {sipName_QState, &sipType_QState, 42, -1}, + {sipName_QStateMachine, &sipType_QStateMachine, -1, -1}, + {sipName_QEventTransition, &sipType_QEventTransition, -1, 44}, + {sipName_QSignalTransition, &sipType_QSignalTransition, -1, -1}, + {sipName_QBuffer, &sipType_QBuffer, -1, 46}, + {sipName_QFileDevice, &sipType_QFileDevice, 48, 47}, + #if !defined(QT_NO_PROCESS) + {sipName_QProcess, &sipType_QProcess, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + {sipName_QFile, &sipType_QFile, 50, 49}, + #if QT_VERSION >= 0x050100 + {sipName_QSaveFile, &sipType_QSaveFile, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + {sipName_QTemporaryFile, &sipType_QTemporaryFile, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +%GCTraverseCode + // Traverse any saved slots we might be connected to. + sipRes = qpycore_visitSlotProxies(sipCpp, sipVisit, sipArg); +%End + +%GCClearCode + // Clear any saved slots we might be connected to. + sipRes = qpycore_clearSlotProxies(sipCpp); +%End + +public: + static const QMetaObject staticMetaObject { +%GetCode + sipPy = qpycore_qobject_staticmetaobject(sipPyType); +%End + + }; + const QMetaObject *metaObject() const; + explicit QObject(QObject *parent /TransferThis/ = 0); + virtual ~QObject(); + void pyqtConfigure(SIP_PYOBJECT) /NoArgParser/; +%Docstring +QObject.pyqtConfigure(...) + +Each keyword argument is either the name of a Qt property or a Qt signal. +For properties the property is set to the given value which should be of an +appropriate type. +For signals the signal is connected to the given value which should be a +callable. +%End + +%MethodCode + return qpycore_pyqtconfigure(sipSelf, sipArgs, sipKwds); +%End + + SIP_PYOBJECT __getattr__(const char *name /Encoding="UTF-8"/) const /NoTypeHint/; +%MethodCode + sipRes = qpycore_qobject_getattr(sipCpp, sipSelf, a0); +%End + + virtual bool event(QEvent *); + virtual bool eventFilter(QObject *, QEvent *); + QString tr(const char *sourceText /Encoding="UTF-8"/, const char *disambiguation = 0, int n = -1) const; +%MethodCode + // Note that tr() is really a static method. We pretend it isn't so we can use + // self to get hold of the class name. + + sipRes = new QString(QCoreApplication::translate(sipPyTypeName(Py_TYPE(sipSelf)), a0, a1, a2)); +%End + + SIP_PYOBJECT findChild(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="QObjectT"/; +%MethodCode + sipRes = qtcore_FindChild(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2); + + if (!sipRes) + sipIsErr = 1; +%End + + SIP_PYOBJECT findChild(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="QObjectT"/; +%MethodCode + sipRes = qtcore_FindChild(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2); + + if (!sipRes) + sipIsErr = 1; +%End + + SIP_PYLIST findChildren(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; +%MethodCode + sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2); + + if (!sipRes) + sipIsErr = 1; +%End + + SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; +%MethodCode + sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2); + + if (!sipRes) + sipIsErr = 1; +%End + + SIP_PYLIST findChildren(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QRegExp ®Exp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; +%MethodCode + sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2); + + if (!sipRes) + sipIsErr = 1; +%End + + SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QRegExp ®Exp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; +%MethodCode + sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2); + + if (!sipRes) + sipIsErr = 1; +%End + + SIP_PYLIST findChildren(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; +%MethodCode + sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2); + + if (!sipRes) + sipIsErr = 1; +%End + + SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/; +%MethodCode + sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2); + + if (!sipRes) + sipIsErr = 1; +%End + + QString objectName() const; + void setObjectName(const QString &name); + bool isWidgetType() const; + bool isWindowType() const; + bool signalsBlocked() const; + bool blockSignals(bool b); + QThread *thread() const; + void moveToThread(QThread *thread); + int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer); + void killTimer(int id); + const QObjectList &children() const; + void setParent(QObject * /TransferThis/); + void installEventFilter(QObject *); + void removeEventFilter(QObject *); +%If (Qt_5_9_0 -) + void dumpObjectInfo() const; +%End +%If (- Qt_5_9_0) + void dumpObjectInfo(); +%End +%If (Qt_5_9_0 -) + void dumpObjectTree() const; +%End +%If (- Qt_5_9_0) + void dumpObjectTree(); +%End + QList dynamicPropertyNames() const; + bool setProperty(const char *name, const QVariant &value); + QVariant property(const char *name) const; + +signals: + void destroyed(QObject *object = 0); + void objectNameChanged(const QString &objectName); + +public: + QObject *parent() const; + bool inherits(const char *classname) const; + +public slots: + void deleteLater() /TransferThis/; + +protected: + QObject *sender() const /ReleaseGIL/; +%MethodCode + // sender() must be called without the GIL to avoid possible deadlocks between + // the GIL and Qt's internal thread data mutex. + + Py_BEGIN_ALLOW_THREADS + + #if defined(SIP_PROTECTED_IS_PUBLIC) + sipRes = sipCpp->sender(); + #else + sipRes = sipCpp->sipProtect_sender(); + #endif + + Py_END_ALLOW_THREADS + + if (!sipRes) + { + typedef QObject *(*qtcore_qobject_sender_t)(); + + static qtcore_qobject_sender_t qtcore_qobject_sender = 0; + + if (!qtcore_qobject_sender) + { + qtcore_qobject_sender = (qtcore_qobject_sender_t)sipImportSymbol("qtcore_qobject_sender"); + Q_ASSERT(qtcore_qobject_sender); + } + + sipRes = qtcore_qobject_sender(); + } +%End + + int receivers(SIP_PYOBJECT signal /TypeHint="PYQT_SIGNAL"/) const [int (const char *signal)]; +%MethodCode + // We need to handle the signal object. Import the helper if it hasn't already + // been done. + typedef sipErrorState (*pyqt5_get_signal_signature_t)(PyObject *, const QObject *, const QByteArray &); + + static pyqt5_get_signal_signature_t pyqt5_get_signal_signature = 0; + + if (!pyqt5_get_signal_signature) + { + pyqt5_get_signal_signature = (pyqt5_get_signal_signature_t)sipImportSymbol("pyqt5_get_signal_signature"); + Q_ASSERT(pyqt5_get_signal_signature); + } + + QByteArray signal_signature; + + #if defined(SIP_PROTECTED_IS_PUBLIC) + if ((sipError = pyqt5_get_signal_signature(a0, sipCpp, signal_signature)) == sipErrorNone) + { + sipRes = sipCpp->receivers(signal_signature.constData()); + } + #else + if ((sipError = pyqt5_get_signal_signature(a0, static_cast(sipCpp), signal_signature)) == sipErrorNone) + { + sipRes = sipCpp->sipProtect_receivers(signal_signature.constData()); + } + #endif + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + virtual void timerEvent(QTimerEvent *); + virtual void childEvent(QChildEvent *); + virtual void customEvent(QEvent *); + virtual void connectNotify(const QMetaMethod &signal); + virtual void disconnectNotify(const QMetaMethod &signal); + int senderSignalIndex() const; + bool isSignalConnected(const QMetaMethod &signal) const; + +public: + static bool disconnect(const QMetaObject::Connection &); + SIP_PYOBJECT disconnect() const /TypeHint=""/; +%MethodCode + sipRes = qpycore_qobject_disconnect(sipCpp); +%End + +private: + QObject(const QObject &); +}; + +SIP_PYOBJECT Q_CLASSINFO(const char *name, const char *value) /TypeHint=""/; +%MethodCode + sipRes = qpycore_ClassInfo(a0, a1); +%End + +SIP_PYOBJECT Q_ENUM(SIP_PYOBJECT /TypeHint="Union[type, enum.Enum]"/) /TypeHint=""/; +%MethodCode + sipRes = qpycore_Enum(a0); +%End + +SIP_PYOBJECT Q_ENUMS(...) /TypeHint=""/; +%MethodCode + sipRes = qpycore_Enums(a0); +%End + +SIP_PYOBJECT Q_FLAG(SIP_PYOBJECT /TypeHint="Union[type, enum.Enum]"/) /TypeHint=""/; +%MethodCode + sipRes = qpycore_Flag(a0); +%End + +SIP_PYOBJECT Q_FLAGS(...) /TypeHint=""/; +%MethodCode + sipRes = qpycore_Flags(a0); +%End + +SIP_PYOBJECT QT_TR_NOOP(SIP_PYOBJECT /TypeHint="str"/) /TypeHint="str"/; +%MethodCode + Py_INCREF(a0); + sipRes = a0; +%End + +SIP_PYOBJECT QT_TR_NOOP_UTF8(SIP_PYOBJECT /TypeHint="str"/) /TypeHint="str"/; +%MethodCode + Py_INCREF(a0); + sipRes = a0; +%End + +SIP_PYOBJECT QT_TRANSLATE_NOOP(SIP_PYOBJECT /TypeHint="str"/, SIP_PYOBJECT /TypeHint="str"/) /TypeHint="str"/; +%MethodCode + Py_INCREF(a1); + sipRes = a1; +%End + +SIP_PYOBJECT pyqtSlot(... types, const char *name = 0, const char *result = 0) /NoArgParser, NoTypeHint/; +%Docstring +@pyqtSlot(*types, name: Optional[str], result: Optional[str]) + +This is a decorator applied to Python methods of a QObject that marks them +as Qt slots. +The non-keyword arguments are the types of the slot arguments and each may +be a Python type object or a string specifying a C++ type. +name is the name of the slot and defaults to the name of the method. +result is type of the value returned by the slot. +%End + +%MethodCode + return qpycore_pyqtslot(sipArgs, sipKwds); +%End + +%If (Qt_5_3_0 -) + +class QSignalBlocker +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSignalBlocker(QObject *o); + ~QSignalBlocker(); + void reblock(); + void unblock(); + SIP_PYOBJECT __enter__(); +%MethodCode + // Just return a reference to self. + sipRes = sipSelf; + Py_INCREF(sipRes); +%End + + void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); +%MethodCode + sipCpp->unblock(); +%End + +private: + QSignalBlocker(const QSignalBlocker &); +}; + +%End + +%ModuleHeaderCode +#include "qpycore_api.h" +%End + +%ModuleCode +// Disable the (supposedly) compulsory parts of the Qt support API. +#define sipQtCreateUniversalSlot 0 +#define sipQtDestroyUniversalSlot 0 +#define sipQtFindSlot 0 +#define sipQtConnect 0 +#define sipQtDisconnect 0 +#define sipQtSameSignalSlotName 0 +#define sipQtFindSipslot 0 +%End + +%PreInitialisationCode +#if defined(Q_OS_DARWIN) + // This works around a problem (possibly a clash between Qt and Python) + // began with Qt v5.11 that causes missed paint events. Only set the + // variable if it hasn't already been given a value. + if (qgetenv("QT_MAC_WANTS_LAYER").isNull()) + qputenv("QT_MAC_WANTS_LAYER", "1"); +#endif +%End + +%InitialisationCode +qpycore_init(); +%End + +%PostInitialisationCode +qpycore_post_init(sipModuleDict); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobjectcleanuphandler.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobjectcleanuphandler.sip new file mode 100644 index 0000000..8c874cc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobjectcleanuphandler.sip @@ -0,0 +1,36 @@ +// qobjectcleanuphandler.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QObjectCleanupHandler : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QObjectCleanupHandler(); + virtual ~QObjectCleanupHandler(); + QObject *add(QObject *object); + void remove(QObject *object); + bool isEmpty() const; + void clear(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobjectdefs.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobjectdefs.sip new file mode 100644 index 0000000..97c9d1f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qobjectdefs.sip @@ -0,0 +1,188 @@ +// qobjectdefs.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +struct QMetaObject +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// Raise an exception when QMetaObject::invokeMethod() returns false. +static void qtcore_invokeMethod_exception() +{ + PyErr_SetString(PyExc_RuntimeError, "QMetaObject.invokeMethod() call failed"); +} +%End + + const char *className() const; + const QMetaObject *superClass() const; + QMetaProperty userProperty() const; + int methodOffset() const; + int enumeratorOffset() const; + int propertyOffset() const; + int classInfoOffset() const; + int methodCount() const; + int enumeratorCount() const; + int propertyCount() const; + int classInfoCount() const; + int indexOfMethod(const char *method) const; + int indexOfSignal(const char *signal) const; + int indexOfSlot(const char *slot) const; + int indexOfEnumerator(const char *name) const; + int indexOfProperty(const char *name) const; + int indexOfClassInfo(const char *name) const; + QMetaMethod method(int index) const; + QMetaEnum enumerator(int index) const; + QMetaProperty property(int index) const; + QMetaClassInfo classInfo(int index) const; + static bool checkConnectArgs(const char *signal, const char *method); + static void connectSlotsByName(QObject *o /GetWrapper/); +%MethodCode + qpycore_qmetaobject_connectslotsbyname(a0, a0Wrapper); + + // Make sure there is no (benign) Python exception. + PyErr_Clear(); +%End + + static QByteArray normalizedSignature(const char *method); + static QByteArray normalizedType(const char *type); + static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericReturnArgument ret /GetWrapper/, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericArgument(0u, 0u), QGenericArgument value9 = QGenericArgument(0u, 0u)); +%MethodCode + // Raise an exception if the call failed. + bool ok; + + Py_BEGIN_ALLOW_THREADS + ok = QMetaObject::invokeMethod(a0,a1,a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12,*a13); + Py_END_ALLOW_THREADS + + if (ok) + sipRes = qpycore_ReturnValue(a3Wrapper); + else + qtcore_invokeMethod_exception(); +%End + + static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, QGenericReturnArgument ret /GetWrapper/, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericArgument(0u, 0u), QGenericArgument value9 = QGenericArgument(0u, 0u)); +%MethodCode + // Raise an exception if the call failed. + bool ok; + + Py_BEGIN_ALLOW_THREADS + ok = QMetaObject::invokeMethod(a0,a1,*a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12); + Py_END_ALLOW_THREADS + + if (ok) + sipRes = qpycore_ReturnValue(a2Wrapper); + else + qtcore_invokeMethod_exception(); +%End + + static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericArgument(0u, 0u), QGenericArgument value9 = QGenericArgument(0u, 0u)); +%MethodCode + // Raise an exception if the call failed. + bool ok; + + Py_BEGIN_ALLOW_THREADS + ok = QMetaObject::invokeMethod(a0,a1,a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12); + Py_END_ALLOW_THREADS + + if (ok) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + qtcore_invokeMethod_exception(); +%End + + static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericArgument(0u, 0u), QGenericArgument value9 = QGenericArgument(0u, 0u)); +%MethodCode + // Raise an exception if the call failed. + bool ok; + + Py_BEGIN_ALLOW_THREADS + ok = QMetaObject::invokeMethod(a0,a1,*a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11); + Py_END_ALLOW_THREADS + + if (ok) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + qtcore_invokeMethod_exception(); +%End + + int constructorCount() const; + int indexOfConstructor(const char *constructor) const; + QMetaMethod constructor(int index) const; + static bool checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method); +%If (Qt_5_7_0 -) + bool inherits(const QMetaObject *metaObject) const; +%End + + class Connection + { +%TypeHeaderCode +#include +%End + + public: + Connection(); + Connection(const QMetaObject::Connection &other); + ~Connection(); + }; +}; + +// The support for Q_ARG(), Q_RETURN_ARG() and supporting classes. +class QGenericArgument /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + ~QGenericArgument(); +}; + + +SIP_PYOBJECT Q_ARG(SIP_PYOBJECT type, SIP_PYOBJECT data) /TypeHint="QGenericArgument"/; +%MethodCode + sipRes = qpycore_ArgumentFactory(a0, a1); +%End + + +class QGenericReturnArgument /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + ~QGenericReturnArgument(); +}; + + +SIP_PYOBJECT Q_RETURN_ARG(SIP_PYOBJECT type) /TypeHint="QGenericReturnArgument"/; +%MethodCode + sipRes = qpycore_ReturnFactory(a0); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qoperatingsystemversion.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qoperatingsystemversion.sip new file mode 100644 index 0000000..ddd5118 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qoperatingsystemversion.sip @@ -0,0 +1,106 @@ +// qoperatingsystemversion.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_9_0 -) + +class QOperatingSystemVersion +{ +%TypeHeaderCode +#include +%End + +public: + enum OSType + { + Unknown, + Windows, + MacOS, + IOS, + TvOS, + WatchOS, + Android, + }; + + static const QOperatingSystemVersion Windows7; + static const QOperatingSystemVersion Windows8; + static const QOperatingSystemVersion Windows8_1; + static const QOperatingSystemVersion Windows10; + static const QOperatingSystemVersion OSXMavericks; + static const QOperatingSystemVersion OSXYosemite; + static const QOperatingSystemVersion OSXElCapitan; + static const QOperatingSystemVersion MacOSSierra; +%If (Qt_5_9_1 -) + static const QOperatingSystemVersion MacOSHighSierra; +%End +%If (Qt_5_11_2 -) + static const QOperatingSystemVersion MacOSMojave; +%End +%If (Qt_5_14_0 -) + static const QOperatingSystemVersion MacOSCatalina; +%End +%If (Qt_5_15_1 -) + static const QOperatingSystemVersion MacOSBigSur; +%End + static const QOperatingSystemVersion AndroidJellyBean; + static const QOperatingSystemVersion AndroidJellyBean_MR1; + static const QOperatingSystemVersion AndroidJellyBean_MR2; + static const QOperatingSystemVersion AndroidKitKat; + static const QOperatingSystemVersion AndroidLollipop; + static const QOperatingSystemVersion AndroidLollipop_MR1; + static const QOperatingSystemVersion AndroidMarshmallow; + static const QOperatingSystemVersion AndroidNougat; + static const QOperatingSystemVersion AndroidNougat_MR1; +%If (Qt_5_9_2 -) + static const QOperatingSystemVersion AndroidOreo; +%End +%If (- Qt_5_9_2) + QOperatingSystemVersion(const QOperatingSystemVersion &other); +%End + QOperatingSystemVersion(QOperatingSystemVersion::OSType osType, int vmajor, int vminor = -1, int vmicro = -1); + static QOperatingSystemVersion current(); +%If (Qt_5_10_0 -) + static QOperatingSystemVersion::OSType currentType(); +%End + int majorVersion() const; + int minorVersion() const; + int microVersion() const; + int segmentCount() const; + QOperatingSystemVersion::OSType type() const; + QString name() const; + +private: + QOperatingSystemVersion(); +}; + +%End +%If (Qt_5_9_0 -) +bool operator>(const QOperatingSystemVersion &lhs, const QOperatingSystemVersion &rhs); +%End +%If (Qt_5_9_0 -) +bool operator>=(const QOperatingSystemVersion &lhs, const QOperatingSystemVersion &rhs); +%End +%If (Qt_5_9_0 -) +bool operator<(const QOperatingSystemVersion &lhs, const QOperatingSystemVersion &rhs); +%End +%If (Qt_5_9_0 -) +bool operator<=(const QOperatingSystemVersion &lhs, const QOperatingSystemVersion &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qparallelanimationgroup.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qparallelanimationgroup.sip new file mode 100644 index 0000000..4435e05 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qparallelanimationgroup.sip @@ -0,0 +1,39 @@ +// qparallelanimationgroup.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QParallelAnimationGroup : public QAnimationGroup +{ +%TypeHeaderCode +#include +%End + +public: + QParallelAnimationGroup(QObject *parent /TransferThis/ = 0); + virtual ~QParallelAnimationGroup(); + virtual int duration() const; + +protected: + virtual bool event(QEvent *event); + virtual void updateCurrentTime(int currentTime); + virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); + virtual void updateDirection(QAbstractAnimation::Direction direction); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpauseanimation.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpauseanimation.sip new file mode 100644 index 0000000..90ac6c4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpauseanimation.sip @@ -0,0 +1,39 @@ +// qpauseanimation.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPauseAnimation : public QAbstractAnimation +{ +%TypeHeaderCode +#include +%End + +public: + QPauseAnimation(QObject *parent /TransferThis/ = 0); + QPauseAnimation(int msecs, QObject *parent /TransferThis/ = 0); + virtual ~QPauseAnimation(); + virtual int duration() const; + void setDuration(int msecs); + +protected: + virtual bool event(QEvent *e); + virtual void updateCurrentTime(int); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpluginloader.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpluginloader.sip new file mode 100644 index 0000000..695c97a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpluginloader.sip @@ -0,0 +1,43 @@ +// qpluginloader.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPluginLoader : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPluginLoader(QObject *parent /TransferThis/ = 0); + QPluginLoader(const QString &fileName, QObject *parent /TransferThis/ = 0); + virtual ~QPluginLoader(); + QObject *instance(); + static QObjectList staticInstances(); + bool load(); + bool unload(); + bool isLoaded() const; + void setFileName(const QString &fileName); + QString fileName() const; + QString errorString() const; + void setLoadHints(QLibrary::LoadHints loadHints); + QLibrary::LoadHints loadHints() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpoint.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpoint.sip new file mode 100644 index 0000000..713fdf7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpoint.sip @@ -0,0 +1,209 @@ +// qpoint.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPoint +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"ii", sipCpp->x(), sipCpp->y()); +%End + +public: + int manhattanLength() const; + QPoint(); + QPoint(int xpos, int ypos); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QPoint()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QPoint()"); + #endif + } + else + { + sipRes = + #if PY_MAJOR_VERSION >= 3 + PyUnicode_FromFormat + #else + PyString_FromFormat + #endif + ("PyQt5.QtCore.QPoint(%i, %i)", sipCpp->x(), sipCpp->y()); + } +%End + + bool isNull() const; + int __bool__() const; +%MethodCode + sipRes = !sipCpp->isNull(); +%End + + int x() const; + int y() const; + void setX(int xpos); + void setY(int ypos); + QPoint &operator+=(const QPoint &p); + QPoint &operator-=(const QPoint &p); + QPoint &operator*=(int c /Constrained/); + QPoint &operator*=(double c); + QPoint &operator/=(qreal c); +%If (Qt_5_1_0 -) + static int dotProduct(const QPoint &p1, const QPoint &p2); +%End +%If (Qt_5_14_0 -) + QPoint transposed() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QPoint & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QPoint & /Constrained/) /ReleaseGIL/; +bool operator==(const QPoint &p1, const QPoint &p2); +bool operator!=(const QPoint &p1, const QPoint &p2); +const QPoint operator+(const QPoint &p1, const QPoint &p2); +const QPoint operator-(const QPoint &p1, const QPoint &p2); +const QPoint operator*(const QPoint &p, int c /Constrained/); +const QPoint operator*(int c /Constrained/, const QPoint &p); +const QPoint operator*(const QPoint &p, double c); +const QPoint operator*(double c, const QPoint &p); +const QPoint operator-(const QPoint &p); +const QPoint operator/(const QPoint &p, qreal c); + +class QPointF /TypeHintIn="Union[QPointF, QPoint]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +// Allow a QPoint whenever a QPointF is expected. This is mainly to help source +// compatibility for Qt5. + +if (sipIsErr == NULL) + return (sipCanConvertToType(sipPy, sipType_QPointF, SIP_NO_CONVERTORS) || + sipCanConvertToType(sipPy, sipType_QPoint, 0)); + +if (sipCanConvertToType(sipPy, sipType_QPointF, SIP_NO_CONVERTORS)) +{ + *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QPointF, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + + return 0; +} + +int state; + +QPoint *pt = reinterpret_cast(sipConvertToType(sipPy, sipType_QPoint, 0, 0, &state, sipIsErr)); + +if (*sipIsErr) +{ + sipReleaseType(pt, sipType_QPoint, state); + return 0; +} + +*sipCppPtr = new QPointF(*pt); + +sipReleaseType(pt, sipType_QPoint, state); + +return sipGetState(sipTransferObj); +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"dd", sipCpp->x(), sipCpp->y()); +%End + +public: + QPointF(); + QPointF(qreal xpos, qreal ypos); + QPointF(const QPoint &p); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QPointF()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QPointF()"); + #endif + } + else + { + PyObject *x = PyFloat_FromDouble(sipCpp->x()); + PyObject *y = PyFloat_FromDouble(sipCpp->y()); + + if (x && y) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QPointF(%R, %R)", x, y); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QPointF("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(x)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(y)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + Py_XDECREF(x); + Py_XDECREF(y); + } +%End + + bool isNull() const; + int __bool__() const; +%MethodCode + sipRes = !sipCpp->isNull(); +%End + + qreal x() const; + qreal y() const; + void setX(qreal xpos); + void setY(qreal ypos); + QPointF &operator+=(const QPointF &p); + QPointF &operator-=(const QPointF &p); + QPointF &operator*=(qreal c); + QPointF &operator/=(qreal c); + QPoint toPoint() const; + qreal manhattanLength() const; +%If (Qt_5_1_0 -) + static qreal dotProduct(const QPointF &p1, const QPointF &p2); +%End +%If (Qt_5_14_0 -) + QPointF transposed() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QPointF & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QPointF & /Constrained/) /ReleaseGIL/; +bool operator==(const QPointF &p1, const QPointF &p2); +bool operator!=(const QPointF &p1, const QPointF &p2); +const QPointF operator+(const QPointF &p1, const QPointF &p2); +const QPointF operator-(const QPointF &p1, const QPointF &p2); +const QPointF operator*(const QPointF &p, qreal c); +const QPointF operator*(qreal c, const QPointF &p); +const QPointF operator-(const QPointF &p); +const QPointF operator/(const QPointF &p, qreal c); +const QPoint operator+(const QPoint &p); +const QPointF operator+(const QPointF &p); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qprocess.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qprocess.sip new file mode 100644 index 0000000..577a6e6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qprocess.sip @@ -0,0 +1,253 @@ +// qprocess.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (WS_WIN) +%If (PyQt_Process) +typedef void *Q_PID; +%End +%End +%If (WS_X11 || WS_MACX) +%If (PyQt_Process) +typedef qint64 Q_PID; +%End +%End +%If (PyQt_Process) + +class QProcess : public QIODevice +{ +%TypeHeaderCode +#include +%End + +public: + enum ExitStatus + { + NormalExit, + CrashExit, + }; + + enum ProcessError + { + FailedToStart, + Crashed, + Timedout, + ReadError, + WriteError, + UnknownError, + }; + + enum ProcessState + { + NotRunning, + Starting, + Running, + }; + + enum ProcessChannel + { + StandardOutput, + StandardError, + }; + + enum ProcessChannelMode + { + SeparateChannels, + MergedChannels, + ForwardedChannels, +%If (Qt_5_2_0 -) + ForwardedOutputChannel, +%End +%If (Qt_5_2_0 -) + ForwardedErrorChannel, +%End + }; + + explicit QProcess(QObject *parent /TransferThis/ = 0); + virtual ~QProcess(); + void start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = QIODevice::ReadWrite) /HoldGIL/; + void start(const QString &command, QIODevice::OpenMode mode = QIODevice::ReadWrite) /HoldGIL/; +%If (Qt_5_1_0 -) + void start(QIODevice::OpenMode mode = QIODevice::ReadWrite) /HoldGIL/; +%End + QProcess::ProcessChannel readChannel() const; + void setReadChannel(QProcess::ProcessChannel channel); + void closeReadChannel(QProcess::ProcessChannel channel); + void closeWriteChannel(); + QString workingDirectory() const; + void setWorkingDirectory(const QString &dir); + QProcess::ProcessError error() const; + QProcess::ProcessState state() const; + Q_PID pid() const; + bool waitForStarted(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; + bool waitForFinished(int msecs = 30000) /ReleaseGIL/; + QByteArray readAllStandardOutput() /ReleaseGIL/; + QByteArray readAllStandardError() /ReleaseGIL/; + int exitCode() const; + QProcess::ExitStatus exitStatus() const; + virtual qint64 bytesAvailable() const; + virtual qint64 bytesToWrite() const; + virtual bool isSequential() const; + virtual bool canReadLine() const; + virtual void close(); + virtual bool atEnd() const; + static int execute(const QString &program, const QStringList &arguments) /ReleaseGIL/; + static int execute(const QString &program) /ReleaseGIL/; + static bool startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid = 0); + static bool startDetached(const QString &program, const QStringList &arguments); + static bool startDetached(const QString &program); +%If (Qt_5_10_0 -) + bool startDetached(qint64 *pid = 0); +%End + static QStringList systemEnvironment(); + QProcess::ProcessChannelMode processChannelMode() const; + void setProcessChannelMode(QProcess::ProcessChannelMode mode); + void setStandardInputFile(const QString &fileName); + void setStandardOutputFile(const QString &fileName, QIODevice::OpenMode mode = QIODevice::Truncate); + void setStandardErrorFile(const QString &fileName, QIODevice::OpenMode mode = QIODevice::Truncate); + void setStandardOutputProcess(QProcess *destination); + +public slots: + void terminate(); + void kill(); + +signals: + void started(); + void finished(int exitCode, QProcess::ExitStatus exitStatus); + void error(QProcess::ProcessError error); + void stateChanged(QProcess::ProcessState state); + void readyReadStandardOutput(); + void readyReadStandardError(); +%If (Qt_5_6_0 -) + void errorOccurred(QProcess::ProcessError error); +%End + +protected: + void setProcessState(QProcess::ProcessState state); + virtual void setupChildProcess(); + virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QProcess::readData(s, a0) : sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/; + +public: + void setProcessEnvironment(const QProcessEnvironment &environment); + QProcessEnvironment processEnvironment() const; + QString program() const; +%If (Qt_5_1_0 -) + void setProgram(const QString &program); +%End + QStringList arguments() const; +%If (Qt_5_1_0 -) + void setArguments(const QStringList &arguments); +%End +%If (Qt_5_1_0 -) + virtual bool open(QIODevice::OpenMode mode = QIODevice::ReadWrite) /ReleaseGIL/; +%End +%If (Qt_5_2_0 -) + + enum InputChannelMode + { + ManagedInputChannel, + ForwardedInputChannel, + }; + +%End +%If (Qt_5_2_0 -) + QProcess::InputChannelMode inputChannelMode() const; +%End +%If (Qt_5_2_0 -) + void setInputChannelMode(QProcess::InputChannelMode mode); +%End +%If (Qt_5_2_0 -) + static QString nullDevice(); +%End +%If (Qt_5_3_0 -) + qint64 processId() const; +%End +}; + +%End +%If (PyQt_Process) + +class QProcessEnvironment +{ +%TypeHeaderCode +#include +%End + +public: + QProcessEnvironment(); + QProcessEnvironment(const QProcessEnvironment &other); + ~QProcessEnvironment(); + bool operator==(const QProcessEnvironment &other) const; + bool operator!=(const QProcessEnvironment &other) const; + bool isEmpty() const; + void clear(); + bool contains(const QString &name) const; + void insert(const QString &name, const QString &value); + void insert(const QProcessEnvironment &e); + void remove(const QString &name); + QString value(const QString &name, const QString &defaultValue = QString()) const; + QStringList toStringList() const; + static QProcessEnvironment systemEnvironment(); + QStringList keys() const; + void swap(QProcessEnvironment &other /Constrained/); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpropertyanimation.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpropertyanimation.sip new file mode 100644 index 0000000..554058f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpropertyanimation.sip @@ -0,0 +1,42 @@ +// qpropertyanimation.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPropertyAnimation : public QVariantAnimation +{ +%TypeHeaderCode +#include +%End + +public: + QPropertyAnimation(QObject *parent /TransferThis/ = 0); + QPropertyAnimation(QObject *target /KeepReference=0/, const QByteArray &propertyName, QObject *parent /TransferThis/ = 0); + virtual ~QPropertyAnimation(); + QObject *targetObject() const; + void setTargetObject(QObject *target /KeepReference=0/); + QByteArray propertyName() const; + void setPropertyName(const QByteArray &propertyName); + +protected: + virtual bool event(QEvent *event); + virtual void updateCurrentValue(const QVariant &value); + virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qhash.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qhash.sip new file mode 100644 index 0000000..260a69d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qhash.sip @@ -0,0 +1,497 @@ +// This is the SIP interface definition for the majority of the QHash based +// mapped types. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +template<_TYPE1_, _TYPE2_> +%MappedType QHash<_TYPE1_, _TYPE2_> + /TypeHint="Dict[_TYPE1_, _TYPE2_]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QHash<_TYPE1_, _TYPE2_>::const_iterator it = sipCpp->constBegin(); + QHash<_TYPE1_, _TYPE2_>::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + _TYPE1_ *k = new _TYPE1_(it.key()); + PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, + sipTransferObj); + + if (!kobj) + { + delete k; + Py_DECREF(d); + + return 0; + } + + _TYPE2_ *v = new _TYPE2_(it.value()); + PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_, + sipTransferObj); + + if (!vobj) + { + delete v; + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + + return 0; + } + + ++it; + } + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QHash<_TYPE1_, _TYPE2_> *qh = new QHash<_TYPE1_, _TYPE2_>; + + Py_ssize_t pos = 0; + PyObject *kobj, *vobj; + + while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) + { + int kstate; + _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>( + sipForceConvertToType(kobj, sipType__TYPE1_, sipTransferObj, + SIP_NOT_NONE, &kstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict key has type '%s' but '_TYPE1_' is expected", + sipPyTypeName(Py_TYPE(kobj))); + + delete qh; + + return 0; + } + + int vstate; + _TYPE2_ *v = reinterpret_cast<_TYPE2_ *>( + sipForceConvertToType(vobj, sipType__TYPE2_, sipTransferObj, + SIP_NOT_NONE, &vstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict value has type '%s' but '_TYPE2_' is expected", + sipPyTypeName(Py_TYPE(vobj))); + + sipReleaseType(k, sipType__TYPE1_, kstate); + delete qh; + + return 0; + } + + qh->insert(*k, *v); + + sipReleaseType(v, sipType__TYPE2_, vstate); + sipReleaseType(k, sipType__TYPE1_, kstate); + } + + *sipCppPtr = qh; + + return sipGetState(sipTransferObj); +%End +}; + + +%If (Qt_5_4_0 -) + +// This is only needed for QtWebChannel but is sufficiently generic that we +// include it here. + +template<_TYPE1_, _TYPE2_ *> +%MappedType QHash<_TYPE1_, _TYPE2_ *> + /TypeHint="Dict[_TYPE1_, _TYPE2_]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + int gc_enabled = sipEnableGC(0); + PyObject *d = PyDict_New(); + + if (d) + { + QHash<_TYPE1_, _TYPE2_ *>::const_iterator it = sipCpp->constBegin(); + QHash<_TYPE1_, _TYPE2_ *>::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + _TYPE1_ *k = new _TYPE1_(it.key()); + PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, + sipTransferObj); + + if (!kobj) + { + delete k; + Py_DECREF(d); + d = 0; + + break; + } + + _TYPE2_ *v = it.value(); + PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_, + sipTransferObj); + + if (!vobj) + { + Py_DECREF(kobj); + Py_DECREF(d); + d = 0; + + break; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + d = 0; + + break; + } + + ++it; + } + } + + sipEnableGC(gc_enabled); + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QHash<_TYPE1_, _TYPE2_ *> *qh = new QHash<_TYPE1_, _TYPE2_ *>; + + Py_ssize_t pos = 0; + PyObject *kobj, *vobj; + + while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) + { + int kstate; + _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>( + sipForceConvertToType(kobj, sipType__TYPE1_, sipTransferObj, + SIP_NOT_NONE, &kstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict key has type '%s' but '_TYPE1_' is expected", + sipPyTypeName(Py_TYPE(kobj))); + + delete qh; + + return 0; + } + + _TYPE2_ *v = reinterpret_cast<_TYPE2_ *>( + sipForceConvertToType(vobj, sipType__TYPE2_, sipTransferObj, 0, + 0, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict value has type '%s' but '_TYPE2_' is expected", + sipPyTypeName(Py_TYPE(vobj))); + + sipReleaseType(k, sipType__TYPE1_, kstate); + delete qh; + + return 0; + } + + qh->insert(*k, v); + + sipReleaseType(k, sipType__TYPE1_, kstate); + } + + *sipCppPtr = qh; + + return sipGetState(sipTransferObj); +%End +}; + +%End + + +template +%MappedType QHash + /TypeHint="Dict[int, _TYPE_]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QHash::const_iterator it = sipCpp->constBegin(); + QHash::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + PyObject *kobj = SIPLong_FromLong(it.key()); + + if (!kobj) + { + Py_DECREF(d); + + return 0; + } + + _TYPE_ *v = new _TYPE_(it.value()); + PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_, + sipTransferObj); + + if (!vobj) + { + delete v; + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + + return 0; + } + + ++it; + } + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QHash *qh = new QHash; + + Py_ssize_t pos = 0; + PyObject *kobj, *vobj; + + while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) + { + int k = sipLong_AsInt(kobj); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "a dict key has type '%s' but 'int' is expected", + sipPyTypeName(Py_TYPE(kobj))); + + delete qh; + *sipIsErr = 1; + + return 0; + } + + int vstate; + _TYPE_ *v = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(vobj, sipType__TYPE_, sipTransferObj, + SIP_NOT_NONE, &vstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict value has type '%s' but '_TYPE_' is expected", + sipPyTypeName(Py_TYPE(vobj))); + + delete qh; + + return 0; + } + + qh->insert(k, *v); + + sipReleaseType(v, sipType__TYPE_, vstate); + } + + *sipCppPtr = qh; + + return sipGetState(sipTransferObj); +%End +}; + + +%If (Qt_5_12_0 -) + +template +%MappedType QHash + /TypeHint="Dict[int, _TYPE_]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QHash::const_iterator it = sipCpp->constBegin(); + QHash::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + PyObject *kobj = SIPLong_FromLong(it.key()); + + if (!kobj) + { + Py_DECREF(d); + + return 0; + } + + _TYPE_ *v = new _TYPE_(it.value()); + PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_, + sipTransferObj); + + if (!vobj) + { + delete v; + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + + return 0; + } + + ++it; + } + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QHash *qh = new QHash; + + Py_ssize_t pos = 0; + PyObject *kobj, *vobj; + + while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) + { + quint16 k = sipLong_AsUnsignedShort(kobj); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "a dict key has type '%s' but 'int' is expected", + sipPyTypeName(Py_TYPE(kobj))); + + delete qh; + *sipIsErr = 1; + + return 0; + } + + int vstate; + _TYPE_ *v = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(vobj, sipType__TYPE_, sipTransferObj, + SIP_NOT_NONE, &vstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict value has type '%s' but '_TYPE_' is expected", + sipPyTypeName(Py_TYPE(vobj))); + + delete qh; + + return 0; + } + + qh->insert(k, *v); + + sipReleaseType(v, sipType__TYPE_, vstate); + } + + *sipCppPtr = qh; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qlist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qlist.sip new file mode 100644 index 0000000..b30ae11 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qlist.sip @@ -0,0 +1,953 @@ +// This is the SIP interface definition for the majority of the QList based +// mapped types. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +// Note that when we test the type of an object to see if it can be converted +// to a collection we only check if it is iterable. We do not check the +// types of the contents - we assume we will be able to convert them when +// requested. This allows us to raise exceptions specific to an individual +// object. This approach doesn't work if there are overloads that can only be +// distinguished by the types of the template arguments. Currently there are +// no such cases in PyQt5. Note also that we don't consider strings to be +// iterables. + + +template<_TYPE_> +%MappedType QList<_TYPE_> + /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="List[_TYPE_]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + _TYPE_ *t = new _TYPE_(sipCpp->at(i)); + PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_, + sipTransferObj); + + if (!tobj) + { + delete t; + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, tobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList<_TYPE_> *ql = new QList<_TYPE_>; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int state; + _TYPE_ *t = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, + SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but '_TYPE_' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + + return 0; + } + + ql->append(*t); + + sipReleaseType(t, sipType__TYPE_, state); + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + + +template<_TYPE_> +%MappedType QList<_TYPE_ *> + /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="List[_TYPE_]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + int gc_enabled = sipEnableGC(0); + PyObject *l = PyList_New(sipCpp->size()); + + if (l) + { + for (int i = 0; i < sipCpp->size(); ++i) + { + _TYPE_ *t = sipCpp->at(i); + + // The explicit (void *) cast allows _TYPE_ to be const. + PyObject *tobj = sipConvertFromType((void *)t, sipType__TYPE_, + sipTransferObj); + + if (!tobj) + { + Py_DECREF(l); + l = 0; + + break; + } + + PyList_SetItem(l, i, tobj); + } + } + + sipEnableGC(gc_enabled); + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList<_TYPE_ *> *ql = new QList<_TYPE_ *>; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + _TYPE_ *t = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, 0, + 0, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but '_TYPE_' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + + return 0; + } + + ql->append(t); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + + +template<_TYPE1_, _TYPE2_> +%MappedType QList > + /TypeHintIn="Iterable[Tuple[_TYPE1_, _TYPE2_]]", + TypeHintOut="List[Tuple[_TYPE1_, _TYPE2_]]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + const QPair<_TYPE1_, _TYPE2_> &p = sipCpp->at(i); + _TYPE1_ *s1 = new _TYPE1_(p.first); + _TYPE2_ *s2 = new _TYPE2_(p.second); + PyObject *pobj = sipBuildResult(NULL, "(NN)", s1, sipType__TYPE1_, + sipTransferObj, s2, sipType__TYPE2_, sipTransferObj); + + if (!pobj) + { + delete s1; + delete s2; + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList > *ql = new QList >; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *seq = PyIter_Next(iter); + + if (!seq) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + Py_ssize_t sub_len; + + if (PySequence_Check(seq) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(seq) +#endif + && !PyUnicode_Check(seq)) + sub_len = PySequence_Size(seq); + else + sub_len = -1; + + if (sub_len != 2) + { + if (sub_len < 0) + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but a 2 element non-string sequence is expected", + i, sipPyTypeName(Py_TYPE(seq))); + else + PyErr_Format(PyExc_TypeError, + "index %zd is a sequence of %zd sub-elements but 2 sub-elements are expected", + i, sub_len); + + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + PyObject *itm1 = PySequence_GetItem(seq, 0); + + if (!itm1) + { + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + int state1; + _TYPE1_ *s1 = reinterpret_cast<_TYPE1_ *>( + sipForceConvertToType(itm1, sipType__TYPE1_, sipTransferObj, + SIP_NOT_NONE, &state1, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "the first sub-element of index %zd has type '%s' but '_TYPE1_' is expected", + i, sipPyTypeName(Py_TYPE(itm1))); + + Py_DECREF(itm1); + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + + return 0; + } + + PyObject *itm2 = PySequence_GetItem(seq, 1); + + if (!itm2) + { + sipReleaseType(s1, sipType__TYPE1_, state1); + Py_DECREF(itm1); + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + int state2; + _TYPE2_ *s2 = reinterpret_cast<_TYPE2_ *>( + sipForceConvertToType(itm2, sipType__TYPE2_, sipTransferObj, + SIP_NOT_NONE, &state2, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "the second sub-element of index %zd has type '%s' but '_TYPE2_' is expected", + i, sipPyTypeName(Py_TYPE(itm2))); + + Py_DECREF(itm2); + sipReleaseType(s1, sipType__TYPE1_, state1); + Py_DECREF(itm1); + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + + return 0; + } + + ql->append(QPair<_TYPE1_, _TYPE2_>(*s1, *s2)); + + sipReleaseType(s2, sipType__TYPE2_, state2); + Py_DECREF(itm2); + sipReleaseType(s1, sipType__TYPE1_, state1); + Py_DECREF(itm1); + Py_DECREF(seq); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + + +%If (Qt_5_1_0 -) + +%MappedType QList > + /TypeHintIn="Iterable[Tuple[int, int]]", + TypeHintOut="List[Tuple[int, int]]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + const QPair &p = sipCpp->at(i); + PyObject *pobj = Py_BuildValue((char *)"ii", p.first, p.second); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList > *ql = new QList >; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *seq = PyIter_Next(iter); + + if (!seq) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + Py_ssize_t sub_len; + + if (PySequence_Check(seq) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(seq) +#endif + && !PyUnicode_Check(seq)) + sub_len = PySequence_Size(seq); + else + sub_len = -1; + + if (sub_len != 2) + { + if (sub_len < 0) + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but a 2 element non-string sequence is expected", + i, sipPyTypeName(Py_TYPE(seq))); + else + PyErr_Format(PyExc_TypeError, + "index %zd is a sequence of %zd sub-elements but 2 sub-elements are expected", + i, sub_len); + + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + PyObject *itm1 = PySequence_GetItem(seq, 0); + + if (!itm1) + { + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + int first = sipLong_AsInt(itm1); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "the first sub-element of index %zd has type '%s' but 'int' is expected", + i, sipPyTypeName(Py_TYPE(itm1))); + + Py_DECREF(itm1); + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + PyObject *itm2 = PySequence_GetItem(seq, 1); + + if (!itm2) + { + Py_DECREF(itm1); + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + int second = sipLong_AsInt(itm2); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "the second sub-element of index %zd has type '%s' but 'int' is expected", + i, sipPyTypeName(Py_TYPE(itm2))); + + Py_DECREF(itm2); + Py_DECREF(itm1); + Py_DECREF(seq); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(QPair(first, second)); + + Py_DECREF(itm2); + Py_DECREF(itm1); + Py_DECREF(seq); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + +%End + + +%MappedType QList + /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *pobj = SIPLong_FromLong(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int val = sipLong_AsInt(itm); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + + +%MappedType QList + /TypeHintIn="Iterable[float]", TypeHintOut="List[float]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *pobj = PyFloat_FromDouble(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + PyErr_Clear(); + double val = PyFloat_AsDouble(itm); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'float' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + + +%MappedType QList + /TypeHintIn="Iterable[Qt.DayOfWeek]", TypeHintOut="List[Qt.DayOfWeek]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_Qt_DayOfWeek); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_Qt_DayOfWeek); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'Qt.DayOfWeek' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qmap.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qmap.sip new file mode 100644 index 0000000..1ff235f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qmap.sip @@ -0,0 +1,354 @@ +// This is the SIP interface definition for the majority of the QMap and +// QMultiMap based mapped types. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +template<_TYPE1_, _TYPE2_> +%MappedType QMap<_TYPE1_, _TYPE2_> + /TypeHint="Dict[_TYPE1_, _TYPE2_]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QMap<_TYPE1_, _TYPE2_>::const_iterator it = sipCpp->constBegin(); + QMap<_TYPE1_, _TYPE2_>::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + _TYPE1_ *k = new _TYPE1_(it.key()); + PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, + sipTransferObj); + + if (!kobj) + { + delete k; + Py_DECREF(d); + + return 0; + } + + _TYPE2_ *v = new _TYPE2_(it.value()); + PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_, + sipTransferObj); + + if (!vobj) + { + delete v; + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + + return 0; + } + + ++it; + } + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QMap<_TYPE1_, _TYPE2_> *qm = new QMap<_TYPE1_, _TYPE2_>; + + Py_ssize_t pos = 0; + PyObject *kobj, *vobj; + + while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) + { + int kstate; + _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>( + sipForceConvertToType(kobj, sipType__TYPE1_, sipTransferObj, + SIP_NOT_NONE, &kstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict key has type '%s' but '_TYPE1_' is expected", + sipPyTypeName(Py_TYPE(kobj))); + + delete qm; + + return 0; + } + + int vstate; + _TYPE2_ *v = reinterpret_cast<_TYPE2_ *>( + sipForceConvertToType(vobj, sipType__TYPE2_, sipTransferObj, + SIP_NOT_NONE, &vstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict value has type '%s' but '_TYPE2_' is expected", + sipPyTypeName(Py_TYPE(vobj))); + + sipReleaseType(k, sipType__TYPE1_, kstate); + delete qm; + + return 0; + } + + qm->insert(*k, *v); + + sipReleaseType(v, sipType__TYPE2_, vstate); + sipReleaseType(k, sipType__TYPE1_, kstate); + } + + *sipCppPtr = qm; + + return sipGetState(sipTransferObj); +%End +}; + + +template +%MappedType QMap + /TypeHint="Dict[int, _TYPE_]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QMap::const_iterator it = sipCpp->constBegin(); + QMap::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + PyObject *kobj = SIPLong_FromLong(it.key()); + + if (!kobj) + { + Py_DECREF(d); + + return 0; + } + + _TYPE_ *v = new _TYPE_(it.value()); + PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_, + sipTransferObj); + + if (!vobj) + { + delete v; + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + + return 0; + } + + ++it; + } + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QMap *qm = new QMap; + + Py_ssize_t pos = 0; + PyObject *kobj, *vobj; + + while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) + { + int k = sipLong_AsInt(kobj); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "a dict key has type '%s' but 'int' is expected", + sipPyTypeName(Py_TYPE(kobj))); + + delete qm; + *sipIsErr = 1; + + return 0; + } + + int vstate; + _TYPE_ *v = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(vobj, sipType__TYPE_, sipTransferObj, + SIP_NOT_NONE, &vstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "a dict value has type '%s' but '_TYPE_' is expected", + sipPyTypeName(Py_TYPE(vobj))); + + delete qm; + + return 0; + } + + qm->insert(k, *v); + + sipReleaseType(v, sipType__TYPE_, vstate); + } + + *sipCppPtr = qm; + + return sipGetState(sipTransferObj); +%End +}; + + +template<_TYPE1_, _TYPE2_> +%MappedType QMultiMap<_TYPE1_, _TYPE2_> + /TypeHintOut="Dict[_TYPE1_, List[_TYPE2_]]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QList<_TYPE1_> keys = sipCpp->keys(); + QList<_TYPE1_>::const_iterator kit = keys.constBegin(); + QList<_TYPE1_>::const_iterator kit_end = keys.constEnd(); + + while (kit != kit_end) + { + _TYPE1_ *k = new _TYPE1_(*kit); + PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_, + sipTransferObj); + + if (!kobj) + { + delete k; + Py_DECREF(d); + + return 0; + } + + // Create a Python list as the dictionary value. + QList<_TYPE2_> values = sipCpp->values(*kit); + PyObject *vobj = PyList_New(values.count()); + + if (!vobj) + { + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + QList<_TYPE2_>::const_iterator vit = values.constBegin(); + QList<_TYPE2_>::const_iterator vit_end = values.constEnd(); + + for (int i = 0; vit != vit_end; ++i) + { + _TYPE2_ *sv = new _TYPE2_(*vit); + PyObject *svobj = sipConvertFromNewType(sv, sipType__TYPE2_, + sipTransferObj); + + if (!svobj) + { + delete sv; + Py_DECREF(vobj); + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + PyList_SetItem(vobj, i, svobj); + + ++vit; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + + return 0; + } + + ++kit; + } + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + // Note that PyQt v5.1 contains an unused implementation that can be + // restored if needed (although it will need updating to accept an iterable + // rather than just a list of values). + PyErr_SetString(PyExc_NotImplementedError, + "converting to QMultiMap<_TYPE1_, _TYPE2_> is unsupported"); + + *sipIsErr = 1; + + return 0; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qpair.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qpair.sip new file mode 100644 index 0000000..9267a82 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qpair.sip @@ -0,0 +1,337 @@ +// This is the SIP interface definition for the majority of the QPair based +// mapped types. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_10_0 -) + +template<_TYPE1_, _TYPE2_> +%MappedType QPair<_TYPE1_, _TYPE2_> /TypeHint="Tuple[_TYPE1_, _TYPE2_]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + _TYPE1_ *first = new _TYPE1_(sipCpp->first); + _TYPE2_ *second = new _TYPE2_(sipCpp->second); + PyObject *t = sipBuildResult(NULL, "(NN)", first, sipType__TYPE1_, + sipTransferObj, second, sipType__TYPE2_, sipTransferObj); + + if (!t) + { + delete first; + delete second; + + return 0; + } + + return t; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return (PySequence_Check(sipPy) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + + Py_ssize_t len = PySequence_Size(sipPy); + + if (len != 2) + { + // A negative length should only be an internal error so let the + // original exception stand. + if (len >= 0) + PyErr_Format(PyExc_TypeError, + "sequence has %zd elements but 2 elements are expected", + len); + + *sipIsErr = 1; + + return 0; + } + + PyObject *firstobj = PySequence_GetItem(sipPy, 0); + + if (!firstobj) + { + *sipIsErr = 1; + + return 0; + } + + int firststate; + _TYPE1_ *first = reinterpret_cast<_TYPE1_ *>( + sipForceConvertToType(firstobj, sipType__TYPE1_, sipTransferObj, + SIP_NOT_NONE, &firststate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "the first element has type '%s' but '_TYPE1_' is expected", + sipPyTypeName(Py_TYPE(firstobj))); + + return 0; + } + + PyObject *secondobj = PySequence_GetItem(sipPy, 1); + + if (!secondobj) + { + sipReleaseType(first, sipType__TYPE1_, firststate); + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + int secondstate; + _TYPE2_ *second = reinterpret_cast<_TYPE2_ *>( + sipForceConvertToType(secondobj, sipType__TYPE2_, sipTransferObj, + SIP_NOT_NONE, &secondstate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "the second element has type '%s' but '_TYPE2_' is expected", + sipPyTypeName(Py_TYPE(secondobj))); + + Py_DECREF(secondobj); + sipReleaseType(first, sipType__TYPE1_, firststate); + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + *sipCppPtr = new QPair<_TYPE1_, _TYPE2_>(*first, *second); + + sipReleaseType(second, sipType__TYPE2_, secondstate); + Py_DECREF(secondobj); + sipReleaseType(first, sipType__TYPE1_, firststate); + Py_DECREF(firstobj); + + return sipGetState(sipTransferObj); +%End +}; + +%End + + +template<_TYPE_> +%MappedType QPair<_TYPE_, int> /TypeHint="Tuple[_TYPE_, int]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + _TYPE_ *first = new _TYPE_(sipCpp->first); + PyObject *t = sipBuildResult(NULL, "(Ni)", first, sipType__TYPE_, + sipTransferObj, sipCpp->second); + + if (!t) + { + delete first; + + return 0; + } + + return t; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return (PySequence_Check(sipPy) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + + Py_ssize_t len = PySequence_Size(sipPy); + + if (len != 2) + { + // A negative length should only be an internal error so let the + // original exception stand. + if (len >= 0) + PyErr_Format(PyExc_TypeError, + "sequence has %zd elements but 2 elements are expected", + len); + + *sipIsErr = 1; + + return 0; + } + + PyObject *firstobj = PySequence_GetItem(sipPy, 0); + + if (!firstobj) + { + *sipIsErr = 1; + + return 0; + } + + int firststate; + _TYPE_ *first = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(firstobj, sipType__TYPE_, sipTransferObj, + SIP_NOT_NONE, &firststate, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "the first element has type '%s' but '_TYPE_' is expected", + sipPyTypeName(Py_TYPE(firstobj))); + + return 0; + } + + PyObject *secondobj = PySequence_GetItem(sipPy, 1); + + if (!secondobj) + { + sipReleaseType(first, sipType__TYPE_, firststate); + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + int second = sipLong_AsInt(secondobj); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "the second element has type '%s' but 'int' is expected", + sipPyTypeName(Py_TYPE(secondobj))); + + Py_DECREF(secondobj); + sipReleaseType(first, sipType__TYPE_, firststate); + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + *sipCppPtr = new QPair<_TYPE_, int>(*first, second); + + Py_DECREF(secondobj); + sipReleaseType(first, sipType__TYPE_, firststate); + Py_DECREF(firstobj); + + return sipGetState(sipTransferObj); +%End +}; + + +%MappedType QPair /TypeHint="Tuple[int, int]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + return Py_BuildValue("(ii)", sipCpp->first, sipCpp->second); +%End + +%ConvertToTypeCode + if (!sipIsErr) + return (PySequence_Check(sipPy) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + + Py_ssize_t len = PySequence_Size(sipPy); + + if (len != 2) + { + // A negative length should only be an internal error so let the + // original exception stand. + if (len >= 0) + PyErr_Format(PyExc_TypeError, + "sequence has %zd elements but 2 elements are expected", + len); + + *sipIsErr = 1; + + return 0; + } + + PyObject *firstobj = PySequence_GetItem(sipPy, 0); + + if (!firstobj) + { + *sipIsErr = 1; + + return 0; + } + + int first = sipLong_AsInt(firstobj); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "the first element has type '%s' but 'int' is expected", + sipPyTypeName(Py_TYPE(firstobj))); + + *sipIsErr = 1; + + return 0; + } + + PyObject *secondobj = PySequence_GetItem(sipPy, 1); + + if (!secondobj) + { + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + int second = sipLong_AsInt(secondobj); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "the second element has type '%s' but 'int' is expected", + sipPyTypeName(Py_TYPE(secondobj))); + + Py_DECREF(secondobj); + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + *sipCppPtr = new QPair(first, second); + + Py_DECREF(secondobj); + Py_DECREF(firstobj); + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qset.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qset.sip new file mode 100644 index 0000000..66f3220 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qset.sip @@ -0,0 +1,252 @@ +// This is the SIP interface definition for the majority of the QSet based +// mapped types. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +template<_TYPE_> +%MappedType QSet<_TYPE_> + /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="Set[_TYPE_]", + TypeHintValue="set()"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *s = PySet_New(0); + + if (!s) + return 0; + + QSet<_TYPE_>::const_iterator it = sipCpp->constBegin(); + QSet<_TYPE_>::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + _TYPE_ *t = new _TYPE_(*it); + PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_, + sipTransferObj); + + if (!tobj) + { + delete t; + Py_DECREF(s); + + return 0; + } + + PySet_Add(s, tobj); + + ++it; + } + + return s; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QSet<_TYPE_> *qs = new QSet<_TYPE_>; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qs; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int state; + _TYPE_ *t = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, + SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but '_TYPE_' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qs; + Py_DECREF(iter); + + return 0; + } + + qs->insert(*t); + + sipReleaseType(t, sipType__TYPE_, state); + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qs; + + return sipGetState(sipTransferObj); +%End +}; + + +template<_TYPE_> +%MappedType QSet<_TYPE_ *> + /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="Set[_TYPE_]", + TypeHintValue="set()"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + int gc_enabled = sipEnableGC(0); + PyObject *s = PySet_New(0); + + if (s) + { + QSet<_TYPE_ *>::const_iterator it = sipCpp->constBegin(); + QSet<_TYPE_ *>::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + // The explicit (void *) cast allows _TYPE_ to be const. + PyObject *tobj = sipConvertFromType((void *)*it, sipType__TYPE_, + sipTransferObj); + + if (!tobj) + { + Py_DECREF(s); + s = 0; + + break; + } + + PySet_Add(s, tobj); + + ++it; + } + } + + sipEnableGC(gc_enabled); + + return s; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QSet<_TYPE_ *> *qs = new QSet<_TYPE_ *>; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qs; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + _TYPE_ *t = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, 0, + 0, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but '_TYPE_' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qs; + Py_DECREF(iter); + + return 0; + } + + qs->insert(t); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qs; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qvariantmap.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qvariantmap.sip new file mode 100644 index 0000000..4c75c7c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qvariantmap.sip @@ -0,0 +1,47 @@ +// This is the SIP interface definition for QVariantMap. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QVariantMap /TypeHint="Dict[str, Any]", TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + return qpycore_fromQVariantMap(*sipCpp); +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QVariantMap *qvm = new QVariantMap; + + if (!qpycore_toQVariantMap(sipPy, *qvm)) + { + delete qvm; + return 0; + } + + *sipCppPtr = qvm; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qvector.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qvector.sip new file mode 100644 index 0000000..3776862 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_qvector.sip @@ -0,0 +1,648 @@ +// This is the SIP interface definition for the majority of the QVector based +// mapped types. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +template<_TYPE_> +%MappedType QVector<_TYPE_> + /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="List[_TYPE_]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + _TYPE_ *t = new _TYPE_(sipCpp->at(i)); + PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_, + sipTransferObj); + + if (!tobj) + { + delete t; + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, tobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector<_TYPE_> *qv = new QVector<_TYPE_>; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int state; + _TYPE_ *t = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, + SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but '_TYPE_' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + + return 0; + } + + qv->append(*t); + + sipReleaseType(t, sipType__TYPE_, state); + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + + +template<_TYPE_> +%MappedType QVector<_TYPE_ *> + /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="List[_TYPE_]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + int gc_enabled = sipEnableGC(0); + PyObject *l = PyList_New(sipCpp->size()); + + if (l) + { + for (int i = 0; i < sipCpp->size(); ++i) + { + _TYPE_ *t = sipCpp->at(i); + + // The explicit (void *) cast allows _TYPE_ to be const. + PyObject *tobj = sipConvertFromNewType((void *)t, sipType__TYPE_, + sipTransferObj); + + if (!tobj) + { + Py_DECREF(l); + l = 0; + + break; + } + + PyList_SetItem(l, i, tobj); + } + } + + sipEnableGC(gc_enabled); + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector<_TYPE_ *> *qv = new QVector<_TYPE_ *>; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + _TYPE_ *t = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, 0, + 0, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but '_TYPE_' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + + return 0; + } + + qv->append(t); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + + +template +%MappedType QVector > + /TypeHintIn="Iterable[Tuple[float, _TYPE_]]", + TypeHintOut="List[Tuple[float, _TYPE_]]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + const QPair &p = sipCpp->at(i); + _TYPE_ *s2 = new _TYPE_(p.second); + PyObject *pobj = sipBuildResult(NULL, "(dN)", (double)p.first, s2, + sipType__TYPE_, sipTransferObj); + + if (!pobj) + { + delete s2; + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector > *qv = new QVector >; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *seq = PyIter_Next(iter); + + if (!seq) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + Py_ssize_t sub_len; + + if (PySequence_Check(seq) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(seq) +#endif + && !PyUnicode_Check(seq)) + sub_len = PySequence_Size(seq); + else + sub_len = -1; + + if (sub_len != 2) + { + if (sub_len < 0) + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but a 2 element non-string sequence is expected", + i, sipPyTypeName(Py_TYPE(seq))); + else + PyErr_Format(PyExc_TypeError, + "index %zd is a sequence of %zd sub-elements but 2 sub-elements are expected", + i, sub_len); + + Py_DECREF(seq); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + PyObject *itm1 = PySequence_GetItem(seq, 0); + + if (!itm1) + { + Py_DECREF(seq); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + PyErr_Clear(); + qreal s1 = PyFloat_AsDouble(itm1); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "the first sub-element of index %zd has type '%s' but 'float' is expected", + i, sipPyTypeName(Py_TYPE(itm1))); + + Py_DECREF(itm1); + Py_DECREF(seq); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + PyObject *itm2 = PySequence_GetItem(seq, 1); + + if (!itm2) + { + Py_DECREF(itm1); + Py_DECREF(seq); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + int state2; + _TYPE_ *s2 = reinterpret_cast<_TYPE_ *>( + sipForceConvertToType(itm2, sipType__TYPE_, sipTransferObj, + SIP_NOT_NONE, &state2, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "the second sub-element of index %zd has type '%s' but '_TYPE_' is expected", + i, sipPyTypeName(Py_TYPE(itm2))); + + Py_DECREF(itm2); + Py_DECREF(itm1); + Py_DECREF(seq); + delete qv; + Py_DECREF(iter); + + return 0; + } + + qv->append(QPair(s1, *s2)); + + sipReleaseType(s2, sipType__TYPE_, state2); + Py_DECREF(itm2); + Py_DECREF(itm1); + Py_DECREF(seq); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + + +%MappedType QVector + /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *pobj = SIPLong_FromLong(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector *qv = new QVector; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int val = sipLong_AsInt(itm); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + qv->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + + +%If (Qt_5_12_0 -) + +%MappedType QVector + /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *pobj = SIPLong_FromLong(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector *qv = new QVector; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + quint16 val = sipLong_AsUnsignedShort(itm); + + if (PyErr_Occurred()) + { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + qv->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_virtual_error_handler.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_virtual_error_handler.sip new file mode 100644 index 0000000..5e01f81 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qpycore_virtual_error_handler.sip @@ -0,0 +1,23 @@ +// This is the implementation of the PyQt-specific virtual error handler. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%VirtualErrorHandler PyQt5 + pyqt5_err_print(); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrandom.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrandom.sip new file mode 100644 index 0000000..6c8c1c5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrandom.sip @@ -0,0 +1,57 @@ +// qrandom.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_10_0 -) + +class QRandomGenerator +{ +%TypeHeaderCode +#include +%End + +public: + QRandomGenerator(quint32 seed = 1); + QRandomGenerator(const QRandomGenerator &other); + quint32 generate(); + quint64 generate64(); + double generateDouble(); + double bounded(double highest /Constrained/); + quint32 bounded(quint32 highest); + int bounded(int lowest, int highest); + typedef quint32 result_type; + QRandomGenerator::result_type operator()(); + void seed(quint32 seed = 1); + void discard(unsigned long long z); + static QRandomGenerator::result_type min(); + static QRandomGenerator::result_type max(); + static QRandomGenerator *system(); + static QRandomGenerator *global() /PyName=global_/; + static QRandomGenerator securelySeeded(); +}; + +%End +%If (Qt_5_10_0 -) +bool operator==(const QRandomGenerator &rng1, const QRandomGenerator &rng2); +%End +%If (Qt_5_10_0 -) +bool operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qreadwritelock.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qreadwritelock.sip new file mode 100644 index 0000000..3523f3a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qreadwritelock.sip @@ -0,0 +1,104 @@ +// qreadwritelock.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QReadWriteLock +{ +%TypeHeaderCode +#include +%End + +public: + enum RecursionMode + { + NonRecursive, + Recursive, + }; + + explicit QReadWriteLock(QReadWriteLock::RecursionMode recursionMode = QReadWriteLock::NonRecursive); + ~QReadWriteLock(); + void lockForRead() /ReleaseGIL/; + bool tryLockForRead(); + bool tryLockForRead(int timeout) /ReleaseGIL/; + void lockForWrite() /ReleaseGIL/; + bool tryLockForWrite(); + bool tryLockForWrite(int timeout) /ReleaseGIL/; + void unlock(); + +private: + QReadWriteLock(const QReadWriteLock &); +}; + +class QReadLocker +{ +%TypeHeaderCode +#include +%End + +public: + QReadLocker(QReadWriteLock *areadWriteLock) /ReleaseGIL/; + ~QReadLocker(); + void unlock(); + void relock() /ReleaseGIL/; + QReadWriteLock *readWriteLock() const; + SIP_PYOBJECT __enter__(); +%MethodCode + // Just return a reference to self. + sipRes = sipSelf; + Py_INCREF(sipRes); +%End + + void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); +%MethodCode + sipCpp->unlock(); +%End + +private: + QReadLocker(const QReadLocker &); +}; + +class QWriteLocker +{ +%TypeHeaderCode +#include +%End + +public: + QWriteLocker(QReadWriteLock *areadWriteLock) /ReleaseGIL/; + ~QWriteLocker(); + void unlock(); + void relock() /ReleaseGIL/; + QReadWriteLock *readWriteLock() const; + SIP_PYOBJECT __enter__(); +%MethodCode + // Just return a reference to self. + sipRes = sipSelf; + Py_INCREF(sipRes); +%End + + void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); +%MethodCode + sipCpp->unlock(); +%End + +private: + QWriteLocker(const QWriteLocker &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrect.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrect.sip new file mode 100644 index 0000000..0acbf45 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrect.sip @@ -0,0 +1,336 @@ +// qrect.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRect +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"iiii", sipCpp->x(), sipCpp->y(), sipCpp->width(), sipCpp->height()); +%End + +public: + QRect(); + QRect normalized() const; + void moveCenter(const QPoint &p); + QRect operator|(const QRect &r) const; + QRect operator&(const QRect &r) const; + bool contains(const QPoint &point, bool proper = false) const; + int __contains__(const QPoint &p) const; +%MethodCode + sipRes = sipCpp->contains(*a0); +%End + + bool contains(const QRect &rectangle, bool proper = false) const; + int __contains__(const QRect &r) const; +%MethodCode + sipRes = sipCpp->contains(*a0); +%End + + bool intersects(const QRect &r) const; + QRect(int aleft, int atop, int awidth, int aheight); + QRect(const QPoint &atopLeft, const QPoint &abottomRight); + QRect(const QPoint &atopLeft, const QSize &asize); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QRect()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QRect()"); + #endif + } + else + { + sipRes = + #if PY_MAJOR_VERSION >= 3 + PyUnicode_FromFormat + #else + PyString_FromFormat + #endif + ("PyQt5.QtCore.QRect(%i, %i, %i, %i)", sipCpp->left(), + sipCpp->top(), sipCpp->width(), sipCpp->height()); + } +%End + + bool isNull() const; + bool isEmpty() const; + bool isValid() const; + int __bool__() const; +%MethodCode + sipRes = sipCpp->isValid(); +%End + + int left() const; + int top() const; + int right() const; + int bottom() const; + int x() const; + int y() const; + void setLeft(int pos); + void setTop(int pos); + void setRight(int pos); + void setBottom(int pos); + void setTopLeft(const QPoint &p); + void setBottomRight(const QPoint &p); + void setTopRight(const QPoint &p); + void setBottomLeft(const QPoint &p); + void setX(int ax); + void setY(int ay); + QPoint topLeft() const; + QPoint bottomRight() const; + QPoint topRight() const; + QPoint bottomLeft() const; + QPoint center() const; + int width() const; + int height() const; + QSize size() const; + void translate(int dx, int dy); + void translate(const QPoint &p); + QRect translated(int dx, int dy) const; + QRect translated(const QPoint &p) const; + void moveTo(int ax, int ay); + void moveTo(const QPoint &p); + void moveLeft(int pos); + void moveTop(int pos); + void moveRight(int pos); + void moveBottom(int pos); + void moveTopLeft(const QPoint &p); + void moveBottomRight(const QPoint &p); + void moveTopRight(const QPoint &p); + void moveBottomLeft(const QPoint &p); + void getRect(int *ax, int *ay, int *aw, int *ah) const; + void setRect(int ax, int ay, int aw, int ah); + void getCoords(int *xp1, int *yp1, int *xp2, int *yp2) const; + void setCoords(int xp1, int yp1, int xp2, int yp2); + QRect adjusted(int xp1, int yp1, int xp2, int yp2) const; + void adjust(int dx1, int dy1, int dx2, int dy2); + void setWidth(int w); + void setHeight(int h); + void setSize(const QSize &s); + bool contains(int ax, int ay, bool aproper) const; + bool contains(int ax, int ay) const; + QRect &operator|=(const QRect &r); + QRect &operator&=(const QRect &r); + QRect intersected(const QRect &other) const; + QRect united(const QRect &r) const; +%If (Qt_5_1_0 -) + QRect marginsAdded(const QMargins &margins) const; +%End +%If (Qt_5_1_0 -) + QRect marginsRemoved(const QMargins &margins) const; +%End +%If (Qt_5_1_0 -) + QRect &operator+=(const QMargins &margins); +%End +%If (Qt_5_1_0 -) + QRect &operator-=(const QMargins &margins); +%End +%If (Qt_5_7_0 -) + QRect transposed() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QRect & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QRect & /Constrained/) /ReleaseGIL/; +bool operator==(const QRect &r1, const QRect &r2); +bool operator!=(const QRect &r1, const QRect &r2); + +class QRectF +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"dddd", sipCpp->x(), sipCpp->y(), sipCpp->width(), sipCpp->height()); +%End + +public: + QRectF(); + QRectF(const QPointF &atopLeft, const QSizeF &asize); + QRectF(const QPointF &atopLeft, const QPointF &abottomRight); + QRectF(qreal aleft, qreal atop, qreal awidth, qreal aheight); + QRectF(const QRect &r); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QRectF()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QRectF()"); + #endif + } + else + { + PyObject *l = PyFloat_FromDouble(sipCpp->left()); + PyObject *t = PyFloat_FromDouble(sipCpp->top()); + PyObject *w = PyFloat_FromDouble(sipCpp->width()); + PyObject *h = PyFloat_FromDouble(sipCpp->height()); + + if (l && t && w && h) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QRectF(%R, %R, %R, %R)", l, + t, w, h); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QRectF("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(l)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(t)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(w)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(h)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + Py_XDECREF(l); + Py_XDECREF(t); + Py_XDECREF(w); + Py_XDECREF(h); + } +%End + + QRectF normalized() const; + qreal left() const; + qreal top() const; + qreal right() const; + qreal bottom() const; + void setX(qreal pos); + void setY(qreal pos); + QPointF topLeft() const; + QPointF bottomRight() const; + QPointF topRight() const; + QPointF bottomLeft() const; + QRectF operator|(const QRectF &r) const; + QRectF operator&(const QRectF &r) const; + bool contains(const QPointF &p) const; + int __contains__(const QPointF &p) const; +%MethodCode + sipRes = sipCpp->contains(*a0); +%End + + bool contains(const QRectF &r) const; + int __contains__(const QRectF &r) const; +%MethodCode + sipRes = sipCpp->contains(*a0); +%End + + bool intersects(const QRectF &r) const; + bool isNull() const; + bool isEmpty() const; + bool isValid() const; + int __bool__() const; +%MethodCode + sipRes = sipCpp->isValid(); +%End + + qreal x() const; + qreal y() const; + void setLeft(qreal pos); + void setRight(qreal pos); + void setTop(qreal pos); + void setBottom(qreal pos); + void setTopLeft(const QPointF &p); + void setTopRight(const QPointF &p); + void setBottomLeft(const QPointF &p); + void setBottomRight(const QPointF &p); + QPointF center() const; + void moveLeft(qreal pos); + void moveTop(qreal pos); + void moveRight(qreal pos); + void moveBottom(qreal pos); + void moveTopLeft(const QPointF &p); + void moveTopRight(const QPointF &p); + void moveBottomLeft(const QPointF &p); + void moveBottomRight(const QPointF &p); + void moveCenter(const QPointF &p); + qreal width() const; + qreal height() const; + QSizeF size() const; + void translate(qreal dx, qreal dy); + void translate(const QPointF &p); + void moveTo(qreal ax, qreal ay); + void moveTo(const QPointF &p); + QRectF translated(qreal dx, qreal dy) const; + QRectF translated(const QPointF &p) const; + void getRect(qreal *ax, qreal *ay, qreal *aaw, qreal *aah) const; + void setRect(qreal ax, qreal ay, qreal aaw, qreal aah); + void getCoords(qreal *xp1, qreal *yp1, qreal *xp2, qreal *yp2) const; + void setCoords(qreal xp1, qreal yp1, qreal xp2, qreal yp2); + void adjust(qreal xp1, qreal yp1, qreal xp2, qreal yp2); + QRectF adjusted(qreal xp1, qreal yp1, qreal xp2, qreal yp2) const; + void setWidth(qreal aw); + void setHeight(qreal ah); + void setSize(const QSizeF &s); + bool contains(qreal ax, qreal ay) const; + QRectF &operator|=(const QRectF &r); + QRectF &operator&=(const QRectF &r); + QRectF intersected(const QRectF &r) const; + QRectF united(const QRectF &r) const; + QRect toAlignedRect() const; + QRect toRect() const; +%If (Qt_5_3_0 -) + QRectF marginsAdded(const QMarginsF &margins) const; +%End +%If (Qt_5_3_0 -) + QRectF marginsRemoved(const QMarginsF &margins) const; +%End +%If (Qt_5_3_0 -) + QRectF &operator+=(const QMarginsF &margins); +%End +%If (Qt_5_3_0 -) + QRectF &operator-=(const QMarginsF &margins); +%End +%If (Qt_5_7_0 -) + QRectF transposed() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QRectF & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QRectF & /Constrained/) /ReleaseGIL/; +bool operator==(const QRectF &r1, const QRectF &r2); +bool operator!=(const QRectF &r1, const QRectF &r2); +%If (Qt_5_3_0 -) +QRect operator+(const QRect &rectangle, const QMargins &margins); +%End +%If (Qt_5_3_0 -) +QRect operator+(const QMargins &margins, const QRect &rectangle); +%End +%If (Qt_5_3_0 -) +QRect operator-(const QRect &lhs, const QMargins &rhs); +%End +%If (Qt_5_3_0 -) +QRectF operator+(const QRectF &lhs, const QMarginsF &rhs); +%End +%If (Qt_5_3_0 -) +QRectF operator+(const QMarginsF &lhs, const QRectF &rhs); +%End +%If (Qt_5_3_0 -) +QRectF operator-(const QRectF &lhs, const QMarginsF &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qregexp.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qregexp.sip new file mode 100644 index 0000000..3200820 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qregexp.sip @@ -0,0 +1,137 @@ +// qregexp.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRegExp +{ +%TypeHeaderCode +#include +%End + +public: + enum PatternSyntax + { + RegExp, + RegExp2, + Wildcard, + FixedString, + WildcardUnix, + W3CXmlSchema11, + }; + + enum CaretMode + { + CaretAtZero, + CaretAtOffset, + CaretWontMatch, + }; + + QRegExp(); + QRegExp(const QString &pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, QRegExp::PatternSyntax syntax = QRegExp::RegExp); + QRegExp(const QRegExp &rx); + ~QRegExp(); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + PyObject *uni = qpycore_PyObject_FromQString(sipCpp->pattern()); + + if (uni) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QRegExp(%R", uni); + + if (sipCpp->caseSensitivity() != Qt::CaseSensitive || + sipCpp->patternSyntax() != QRegExp::RegExp) + { + qpycore_Unicode_ConcatAndDel(&sipRes, + PyUnicode_FromFormat(", PyQt5.QtCore.Qt.CaseSensitivity(%i)", + (int)sipCpp->caseSensitivity())); + + if (sipCpp->patternSyntax() != QRegExp::RegExp) + qpycore_Unicode_ConcatAndDel(&sipRes, + PyUnicode_FromFormat( + ", PyQt5.QtCore.QRegExp.PatternSyntax(%i)", + (int)sipCpp->patternSyntax())); + } + + qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")")); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QRegExp("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(uni)); + + if (sipCpp->caseSensitivity() != Qt::CaseSensitive || + sipCpp->patternSyntax() != QRegExp::RegExp) + { + PyString_ConcatAndDel(&sipRes, + PyString_FromFormat(", PyQt5.QtCore.Qt.CaseSensitivity(%i)", + (int)sipCpp->caseSensitivity())); + + if (sipCpp->patternSyntax() != QRegExp::RegExp) + PyString_ConcatAndDel(&sipRes, + PyString_FromFormat( + ", PyQt5.QtCore.QRegExp.PatternSyntax(%i)", + (int)sipCpp->patternSyntax())); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + + Py_DECREF(uni); + } + else + { + sipRes = 0; + } +%End + + bool operator==(const QRegExp &rx) const; + bool operator!=(const QRegExp &rx) const; + bool isEmpty() const; + bool isValid() const; + QString pattern() const; + void setPattern(const QString &pattern); + Qt::CaseSensitivity caseSensitivity() const; + void setCaseSensitivity(Qt::CaseSensitivity cs); + QRegExp::PatternSyntax patternSyntax() const; + void setPatternSyntax(QRegExp::PatternSyntax syntax); + bool isMinimal() const; + void setMinimal(bool minimal); + bool exactMatch(const QString &str) const; + int indexIn(const QString &str, int offset = 0, QRegExp::CaretMode caretMode = QRegExp::CaretAtZero) const; + int lastIndexIn(const QString &str, int offset = -1, QRegExp::CaretMode caretMode = QRegExp::CaretAtZero) const; + int matchedLength() const; + QStringList capturedTexts(); + QString cap(int nth = 0); + int pos(int nth = 0); + QString errorString(); + static QString escape(const QString &str); + int captureCount() const; + void swap(QRegExp &other /Constrained/); +%If (Qt_5_6_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; + +QDataStream &operator<<(QDataStream &out, const QRegExp ®Exp /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &in, QRegExp ®Exp /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qregularexpression.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qregularexpression.sip new file mode 100644 index 0000000..a097265 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qregularexpression.sip @@ -0,0 +1,206 @@ +// qregularexpression.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRegularExpression +{ +%TypeHeaderCode +#include +%End + +public: + enum PatternOption + { + NoPatternOption, + CaseInsensitiveOption, + DotMatchesEverythingOption, + MultilineOption, + ExtendedPatternSyntaxOption, + InvertedGreedinessOption, + DontCaptureOption, + UseUnicodePropertiesOption, +%If (Qt_5_4_0 -) + OptimizeOnFirstUsageOption, +%End +%If (Qt_5_4_0 -) + DontAutomaticallyOptimizeOption, +%End + }; + + typedef QFlags PatternOptions; + QRegularExpression::PatternOptions patternOptions() const; + void setPatternOptions(QRegularExpression::PatternOptions options); + QRegularExpression(); + QRegularExpression(const QString &pattern, QRegularExpression::PatternOptions options = QRegularExpression::NoPatternOption); + QRegularExpression(const QRegularExpression &re); + ~QRegularExpression(); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + PyObject *uni = qpycore_PyObject_FromQString(sipCpp->pattern()); + + if (uni) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QRegularExpression(%R", uni); + + if (sipCpp->patternOptions() != QRegularExpression::NoPatternOption) + { + qpycore_Unicode_ConcatAndDel(&sipRes, + PyUnicode_FromFormat( + ", PyQt5.QtCore.QRegularExpression.PatternOptions(%i)", + (int)sipCpp->patternOptions())); + } + + qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")")); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QRegularExpression("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(uni)); + + if (sipCpp->patternOptions() != QRegularExpression::NoPatternOption) + { + PyString_ConcatAndDel(&sipRes, + PyString_FromFormat( + ", PyQt5.QtCore.QRegularExpression.PatternOptions(%i)", + (int)sipCpp->patternOptions())); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + + Py_DECREF(uni); + } + else + { + sipRes = 0; + } +%End + + void swap(QRegularExpression &re /Constrained/); + QString pattern() const; + void setPattern(const QString &pattern); + bool isValid() const; + int patternErrorOffset() const; + QString errorString() const; + int captureCount() const; + + enum MatchType + { + NormalMatch, + PartialPreferCompleteMatch, + PartialPreferFirstMatch, +%If (Qt_5_1_0 -) + NoMatch, +%End + }; + + enum MatchOption + { + NoMatchOption, + AnchoredMatchOption, +%If (Qt_5_4_0 -) + DontCheckSubjectStringMatchOption, +%End + }; + + typedef QFlags MatchOptions; + QRegularExpressionMatch match(const QString &subject, int offset = 0, QRegularExpression::MatchType matchType = QRegularExpression::NormalMatch, QRegularExpression::MatchOptions matchOptions = QRegularExpression::NoMatchOption) const; + QRegularExpressionMatchIterator globalMatch(const QString &subject, int offset = 0, QRegularExpression::MatchType matchType = QRegularExpression::NormalMatch, QRegularExpression::MatchOptions matchOptions = QRegularExpression::NoMatchOption) const; + static QString escape(const QString &str); +%If (Qt_5_1_0 -) + QStringList namedCaptureGroups() const; +%End + bool operator==(const QRegularExpression &re) const; + bool operator!=(const QRegularExpression &re) const; +%If (Qt_5_4_0 -) + void optimize() const; +%End +%If (Qt_5_6_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +%If (Qt_5_12_0 -) + static QString wildcardToRegularExpression(const QString &str); +%End +%If (Qt_5_12_0 -) + static QString anchoredPattern(const QString &expression); +%End +}; + +QFlags operator|(QRegularExpression::PatternOption f1, QFlags f2); +QFlags operator|(QRegularExpression::MatchOption f1, QFlags f2); +QDataStream &operator<<(QDataStream &out, const QRegularExpression &re /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &in, QRegularExpression &re /Constrained/) /ReleaseGIL/; + +class QRegularExpressionMatch +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_1_0 -) + QRegularExpressionMatch(); +%End + ~QRegularExpressionMatch(); + QRegularExpressionMatch(const QRegularExpressionMatch &match); + void swap(QRegularExpressionMatch &match /Constrained/); + QRegularExpression regularExpression() const; + QRegularExpression::MatchType matchType() const; + QRegularExpression::MatchOptions matchOptions() const; + bool hasMatch() const; + bool hasPartialMatch() const; + bool isValid() const; + int lastCapturedIndex() const; + QString captured(int nth = 0) const; + QString captured(const QString &name) const; + QStringList capturedTexts() const; + int capturedStart(int nth = 0) const; + int capturedLength(int nth = 0) const; + int capturedEnd(int nth = 0) const; + int capturedStart(const QString &name) const; + int capturedLength(const QString &name) const; + int capturedEnd(const QString &name) const; +}; + +class QRegularExpressionMatchIterator +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_1_0 -) + QRegularExpressionMatchIterator(); +%End + ~QRegularExpressionMatchIterator(); + QRegularExpressionMatchIterator(const QRegularExpressionMatchIterator &iterator); + void swap(QRegularExpressionMatchIterator &iterator /Constrained/); + bool isValid() const; + bool hasNext() const; + QRegularExpressionMatch next(); + QRegularExpressionMatch peekNext() const; + QRegularExpression regularExpression() const; + QRegularExpression::MatchType matchType() const; + QRegularExpression::MatchOptions matchOptions() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qresource.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qresource.sip new file mode 100644 index 0000000..30586f4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qresource.sip @@ -0,0 +1,92 @@ +// qresource.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QResource +{ +%TypeHeaderCode +#include +%End + +public: + QResource(const QString &fileName = QString(), const QLocale &locale = QLocale()); + ~QResource(); + QString absoluteFilePath() const; + SIP_PYOBJECT data() const /TypeHint="Py_v3:bytes;str"/; +%MethodCode + // The data may contain embedded '\0's so set the size explicitly. + + if (sipCpp->data()) + { + if ((sipRes = SIPBytes_FromStringAndSize((char *)sipCpp->data(), sipCpp->size())) == NULL) + sipIsErr = 1; + } + else + { + Py_INCREF(Py_None); + sipRes = Py_None; + } +%End + + QString fileName() const; + bool isCompressed() const; + bool isValid() const; + QLocale locale() const; + void setFileName(const QString &file); + void setLocale(const QLocale &locale); + qint64 size() const; + static bool registerResource(const QString &rccFileName, const QString &mapRoot = QString()); + static bool registerResource(const uchar *rccData, const QString &mapRoot = QString()) /PyName=registerResourceData/; + static bool unregisterResource(const QString &rccFileName, const QString &mapRoot = QString()); + static bool unregisterResource(const uchar *rccData, const QString &mapRoot = QString()) /PyName=unregisterResourceData/; + +protected: + QStringList children() const; + bool isDir() const; + bool isFile() const; + +public: +%If (Qt_5_8_0 -) + QDateTime lastModified() const; +%End +%If (Qt_5_13_0 -) + + enum Compression + { + NoCompression, + ZlibCompression, + ZstdCompression, + }; + +%End +%If (Qt_5_13_0 -) + QResource::Compression compressionAlgorithm() const; +%End +%If (Qt_5_15_0 -) + qint64 uncompressedSize() const; +%End +%If (Qt_5_15_0 -) + QByteArray uncompressedData() const; +%End + +private: + QResource(const QResource &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrunnable.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrunnable.sip new file mode 100644 index 0000000..2391b29 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qrunnable.sip @@ -0,0 +1,55 @@ +// qrunnable.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRunnable /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + QRunnable(); + virtual ~QRunnable(); + virtual void run() = 0 /NewThread/; + bool autoDelete() const; + void setAutoDelete(bool _autoDelete); +%If (Qt_5_15_0 -) + static QRunnable *create(SIP_PYCALLABLE functionToRun /KeepReference,TypeHint="Callable[[], None]"/) /Factory/; +%MethodCode + sipRes = QRunnable::create([a0]() { + SIP_BLOCK_THREADS + + PyObject *res; + + res = PyObject_CallObject(a0, NULL); + + if (res) + Py_DECREF(res); + else + pyqt5_err_print(); + + SIP_UNBLOCK_THREADS + }); +%End + +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsavefile.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsavefile.sip new file mode 100644 index 0000000..26f9491 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsavefile.sip @@ -0,0 +1,51 @@ +// qsavefile.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QSaveFile : public QFileDevice +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSaveFile(const QString &name); + explicit QSaveFile(QObject *parent /TransferThis/ = 0); + QSaveFile(const QString &name, QObject *parent /TransferThis/); + virtual ~QSaveFile(); + virtual QString fileName() const; + void setFileName(const QString &name); + virtual bool open(QIODevice::OpenMode flags) /ReleaseGIL/; + bool commit(); + void cancelWriting(); + void setDirectWriteFallback(bool enabled); + bool directWriteFallback() const; + +protected: + virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/; + +private: + virtual void close(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsemaphore.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsemaphore.sip new file mode 100644 index 0000000..ffa2a0b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsemaphore.sip @@ -0,0 +1,59 @@ +// qsemaphore.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSemaphore +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSemaphore(int n = 0); + ~QSemaphore(); + void acquire(int n = 1) /ReleaseGIL/; + bool tryAcquire(int n = 1); + bool tryAcquire(int n, int timeout) /ReleaseGIL/; + void release(int n = 1); + int available() const; + +private: + QSemaphore(const QSemaphore &); +}; + +%If (Qt_5_10_0 -) + +class QSemaphoreReleaser /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + QSemaphoreReleaser(); + QSemaphoreReleaser(QSemaphore *sem, int n = 1); + ~QSemaphoreReleaser(); + void swap(QSemaphoreReleaser &other); + QSemaphore *semaphore() const; + QSemaphore *cancel(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsequentialanimationgroup.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsequentialanimationgroup.sip new file mode 100644 index 0000000..827b4a9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsequentialanimationgroup.sip @@ -0,0 +1,45 @@ +// qsequentialanimationgroup.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSequentialAnimationGroup : public QAnimationGroup +{ +%TypeHeaderCode +#include +%End + +public: + QSequentialAnimationGroup(QObject *parent /TransferThis/ = 0); + virtual ~QSequentialAnimationGroup(); + QPauseAnimation *addPause(int msecs); + QPauseAnimation *insertPause(int index, int msecs); + QAbstractAnimation *currentAnimation() const; + virtual int duration() const; + +signals: + void currentAnimationChanged(QAbstractAnimation *current); + +protected: + virtual bool event(QEvent *event); + virtual void updateCurrentTime(int); + virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); + virtual void updateDirection(QAbstractAnimation::Direction direction); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsettings.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsettings.sip new file mode 100644 index 0000000..f7c572f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsettings.sip @@ -0,0 +1,113 @@ +// qsettings.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSettings : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Status + { + NoError, + AccessError, + FormatError, + }; + + enum Format + { + NativeFormat, + IniFormat, + InvalidFormat, + }; + + enum Scope + { + UserScope, + SystemScope, + }; + + QSettings(const QString &organization, const QString &application = QString(), QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QSettings(QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QSettings(const QString &fileName, QSettings::Format format, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; +%If (Qt_5_13_0 -) + QSettings(QSettings::Scope scope, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; +%End + explicit QSettings(QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + virtual ~QSettings() /ReleaseGIL/; + void clear() /ReleaseGIL/; + void sync() /ReleaseGIL/; + QSettings::Status status() const; + void beginGroup(const QString &prefix); + void endGroup(); + QString group() const; + int beginReadArray(const QString &prefix); + void beginWriteArray(const QString &prefix, int size = -1); + void endArray(); + void setArrayIndex(int i); + QStringList allKeys() const /ReleaseGIL/; + QStringList childKeys() const /ReleaseGIL/; + QStringList childGroups() const /ReleaseGIL/; + bool isWritable() const; + void setValue(const QString &key, const QVariant &value) /ReleaseGIL/; + SIP_PYOBJECT value(const QString &key, const QVariant &defaultValue = QVariant(), SIP_PYOBJECT type /TypeHint="type", TypeHintValue="None"/ = 0) const /ReleaseGIL/; +%MethodCode + QVariant value; + + // QSettings has an internal mutex so release the GIL to avoid the possibility + // of deadlocks. + Py_BEGIN_ALLOW_THREADS + value = sipCpp->value(*a0, *a1); + Py_END_ALLOW_THREADS + + sipRes = pyqt5_from_qvariant_by_type(value, a2); + + sipIsErr = !sipRes; +%End + + void remove(const QString &key) /ReleaseGIL/; + bool contains(const QString &key) const /ReleaseGIL/; + void setFallbacksEnabled(bool b); + bool fallbacksEnabled() const; + QString fileName() const; + static void setPath(QSettings::Format format, QSettings::Scope scope, const QString &path) /ReleaseGIL/; + QSettings::Format format() const; + QSettings::Scope scope() const; + QString organizationName() const; + QString applicationName() const; + static void setDefaultFormat(QSettings::Format format); + static QSettings::Format defaultFormat(); + void setIniCodec(QTextCodec *codec /KeepReference/); + void setIniCodec(const char *codecName); + QTextCodec *iniCodec() const; +%If (Qt_5_10_0 -) + bool isAtomicSyncRequired() const; +%End +%If (Qt_5_10_0 -) + void setAtomicSyncRequired(bool enable); +%End + +protected: + virtual bool event(QEvent *event); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsharedmemory.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsharedmemory.sip new file mode 100644 index 0000000..83f19f9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsharedmemory.sip @@ -0,0 +1,75 @@ +// qsharedmemory.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSharedMemory : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum AccessMode + { + ReadOnly, + ReadWrite, + }; + + enum SharedMemoryError + { + NoError, + PermissionDenied, + InvalidSize, + KeyError, + AlreadyExists, + NotFound, + LockError, + OutOfResources, + UnknownError, + }; + + QSharedMemory(QObject *parent /TransferThis/ = 0); + QSharedMemory(const QString &key, QObject *parent /TransferThis/ = 0); + virtual ~QSharedMemory(); + void setKey(const QString &key); + QString key() const; + bool create(int size, QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite); + int size() const; + bool attach(QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite); + bool isAttached() const; + bool detach(); + SIP_PYOBJECT data() /TypeHint="PyQt5.sip.voidptr"/; +%MethodCode + sipRes = sipConvertFromVoidPtrAndSize(sipCpp->data(), sipCpp->size()); +%End + + SIP_PYOBJECT constData() const /TypeHint="PyQt5.sip.voidptr"/; +%MethodCode + sipRes = sipConvertFromConstVoidPtrAndSize(sipCpp->constData(), sipCpp->size()); +%End + + bool lock(); + bool unlock(); + QSharedMemory::SharedMemoryError error() const; + QString errorString() const; + void setNativeKey(const QString &key); + QString nativeKey() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsignalmapper.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsignalmapper.sip new file mode 100644 index 0000000..02ba3a8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsignalmapper.sip @@ -0,0 +1,72 @@ +// qsignalmapper.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QWidget /External/; + +class QSignalMapper : public QObject +{ +%TypeHintCode +from PyQt5.QtWidgets import QWidget +%End + +%TypeHeaderCode +#include +%End + +public: + explicit QSignalMapper(QObject *parent /TransferThis/ = 0); + virtual ~QSignalMapper(); + void setMapping(QObject *sender, int id); + void setMapping(QObject *sender, const QString &text); + void setMapping(QObject *sender, QWidget *widget); + void setMapping(QObject *sender, QObject *object); + void removeMappings(QObject *sender); + QObject *mapping(int id) const; + QObject *mapping(const QString &text) const; + QObject *mapping(QWidget *widget) const; + QObject *mapping(QObject *object) const; + +signals: + void mapped(int); + void mapped(const QString &); + void mapped(QWidget *); + void mapped(QObject *); +%If (Qt_5_15_0 -) + void mappedInt(int); +%End +%If (Qt_5_15_0 -) + void mappedString(const QString &); +%End +%If (Qt_5_15_0 -) + void mappedWidget(QWidget *); +%End +%If (Qt_5_15_0 -) + void mappedObject(QObject *); +%End + +public slots: + void map(); + void map(QObject *sender); + +private: + QSignalMapper(const QSignalMapper &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsignaltransition.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsignaltransition.sip new file mode 100644 index 0000000..9c0e44d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsignaltransition.sip @@ -0,0 +1,66 @@ +// qsignaltransition.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSignalTransition : public QAbstractTransition +{ +%TypeHeaderCode +#include +%End + +public: + QSignalTransition(QState *sourceState /TransferThis/ = 0); + QSignalTransition(SIP_PYOBJECT signal /TypeHint="pyqtBoundSignal"/, QState *sourceState /TransferThis/ = 0) /NoDerived/; +%MethodCode + QObject *sender; + QByteArray signal_signature; + + if ((sipError = pyqt5_get_pyqtsignal_parts(a0, &sender, signal_signature)) == sipErrorNone) + { + sipCpp = new sipQSignalTransition(a1); + sipCpp->setSenderObject(sender); + sipCpp->setSignal(signal_signature); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + virtual ~QSignalTransition(); + QObject *senderObject() const; + void setSenderObject(const QObject *sender); + QByteArray signal() const; + void setSignal(const QByteArray &signal); + +protected: + virtual bool eventTest(QEvent *event); + virtual void onTransition(QEvent *event); + virtual bool event(QEvent *e); + +signals: +%If (Qt_5_4_0 -) + void senderObjectChanged(); +%End +%If (Qt_5_4_0 -) + void signalChanged(); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsize.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsize.sip new file mode 100644 index 0000000..321a863 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsize.sip @@ -0,0 +1,188 @@ +// qsize.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSize +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"ii", sipCpp->width(), sipCpp->height()); +%End + +public: + void transpose(); + void scale(const QSize &s, Qt::AspectRatioMode mode); + QSize(); + QSize(int w, int h); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QSize()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QSize()"); + #endif + } + else + { + sipRes = + #if PY_MAJOR_VERSION >= 3 + PyUnicode_FromFormat + #else + PyString_FromFormat + #endif + ("PyQt5.QtCore.QSize(%i, %i)", sipCpp->width(), sipCpp->height()); + } +%End + + bool isNull() const; + bool isEmpty() const; + bool isValid() const; + int __bool__() const; +%MethodCode + sipRes = sipCpp->isValid(); +%End + + int width() const; + int height() const; + void setWidth(int w); + void setHeight(int h); + void scale(int w, int h, Qt::AspectRatioMode mode); + QSize &operator+=(const QSize &s); + QSize &operator-=(const QSize &s); + QSize &operator*=(qreal c); + QSize &operator/=(qreal c); + QSize expandedTo(const QSize &otherSize) const; + QSize boundedTo(const QSize &otherSize) const; + QSize scaled(const QSize &s, Qt::AspectRatioMode mode) const; + QSize scaled(int w, int h, Qt::AspectRatioMode mode) const; + QSize transposed() const; +%If (Qt_5_14_0 -) + QSize grownBy(QMargins m) const; +%End +%If (Qt_5_14_0 -) + QSize shrunkBy(QMargins m) const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QSize & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QSize & /Constrained/) /ReleaseGIL/; +bool operator==(const QSize &s1, const QSize &s2); +bool operator!=(const QSize &s1, const QSize &s2); +const QSize operator+(const QSize &s1, const QSize &s2); +const QSize operator-(const QSize &s1, const QSize &s2); +const QSize operator*(const QSize &s, qreal c); +const QSize operator*(qreal c, const QSize &s); +const QSize operator/(const QSize &s, qreal c); + +class QSizeF +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"dd", sipCpp->width(), sipCpp->height()); +%End + +public: + void transpose(); + void scale(const QSizeF &s, Qt::AspectRatioMode mode); + QSizeF(); + QSizeF(const QSize &sz); + QSizeF(qreal w, qreal h); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + if (sipCpp->isNull()) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromString("PyQt5.QtCore.QSizeF()"); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QSizeF()"); + #endif + } + else + { + PyObject *w = PyFloat_FromDouble(sipCpp->width()); + PyObject *h = PyFloat_FromDouble(sipCpp->height()); + + if (w && h) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QSizeF(%R, %R)", w, h); + #else + sipRes = PyString_FromString("PyQt5.QtCore.QSizeF("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(w)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(h)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + Py_XDECREF(w); + Py_XDECREF(h); + } +%End + + bool isNull() const; + bool isEmpty() const; + bool isValid() const; + int __bool__() const; +%MethodCode + sipRes = sipCpp->isValid(); +%End + + qreal width() const; + qreal height() const; + void setWidth(qreal w); + void setHeight(qreal h); + void scale(qreal w, qreal h, Qt::AspectRatioMode mode); + QSizeF &operator+=(const QSizeF &s); + QSizeF &operator-=(const QSizeF &s); + QSizeF &operator*=(qreal c); + QSizeF &operator/=(qreal c); + QSizeF expandedTo(const QSizeF &otherSize) const; + QSizeF boundedTo(const QSizeF &otherSize) const; + QSize toSize() const; + QSizeF scaled(const QSizeF &s, Qt::AspectRatioMode mode) const; + QSizeF scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const; + QSizeF transposed() const; +%If (Qt_5_14_0 -) + QSizeF grownBy(QMarginsF m) const; +%End +%If (Qt_5_14_0 -) + QSizeF shrunkBy(QMarginsF m) const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QSizeF & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QSizeF & /Constrained/) /ReleaseGIL/; +bool operator==(const QSizeF &s1, const QSizeF &s2); +bool operator!=(const QSizeF &s1, const QSizeF &s2); +const QSizeF operator+(const QSizeF &s1, const QSizeF &s2); +const QSizeF operator-(const QSizeF &s1, const QSizeF &s2); +const QSizeF operator*(const QSizeF &s, qreal c); +const QSizeF operator*(qreal c, const QSizeF &s); +const QSizeF operator/(const QSizeF &s, qreal c); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsocketnotifier.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsocketnotifier.sip new file mode 100644 index 0000000..d4d4fcd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsocketnotifier.sip @@ -0,0 +1,51 @@ +// qsocketnotifier.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSocketNotifier : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Type + { + Read, + Write, + Exception, + }; + + QSocketNotifier(qintptr socket, QSocketNotifier::Type, QObject *parent /TransferThis/ = 0); + virtual ~QSocketNotifier(); + qintptr socket() const; + QSocketNotifier::Type type() const; + bool isEnabled() const; + +public slots: + void setEnabled(bool); + +signals: + void activated(int socket); + +protected: + virtual bool event(QEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsortfilterproxymodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsortfilterproxymodel.sip new file mode 100644 index 0000000..b84b3a4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsortfilterproxymodel.sip @@ -0,0 +1,140 @@ +// qsortfilterproxymodel.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSortFilterProxyModel : public QAbstractProxyModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSortFilterProxyModel(QObject *parent /TransferThis/ = 0); + virtual ~QSortFilterProxyModel(); + virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/); + virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const; + virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; + virtual QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const; + virtual QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const; + QRegExp filterRegExp() const; +%If (Qt_5_12_0 -) + QRegularExpression filterRegularExpression() const; +%End + int filterKeyColumn() const; + void setFilterKeyColumn(int column); + Qt::CaseSensitivity filterCaseSensitivity() const; + void setFilterCaseSensitivity(Qt::CaseSensitivity cs); + +public slots: + void invalidate(); + void setFilterFixedString(const QString &pattern); + void setFilterRegExp(const QRegExp ®Exp); + void setFilterRegExp(const QString &pattern); +%If (Qt_5_12_0 -) + void setFilterRegularExpression(const QRegularExpression ®ularExpression); +%End +%If (Qt_5_12_0 -) + void setFilterRegularExpression(const QString &pattern); +%End + void setFilterWildcard(const QString &pattern); + +protected: + virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; + virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const; + virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const; + +public: + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex parent(const QModelIndex &child) const; + QObject *parent() const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); +%If (Qt_5_5_0 -) + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; +%End +%If (- Qt_5_5_0) + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::EditRole) const; +%End + virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); + virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual void fetchMore(const QModelIndex &parent); + virtual bool canFetchMore(const QModelIndex &parent) const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual QModelIndex buddy(const QModelIndex &index) const; + virtual QSize span(const QModelIndex &index) const; + virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchStartsWith|Qt::MatchWrap) const; + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + Qt::CaseSensitivity sortCaseSensitivity() const; + void setSortCaseSensitivity(Qt::CaseSensitivity cs); + bool dynamicSortFilter() const; + void setDynamicSortFilter(bool enable); + int sortRole() const; + void setSortRole(int role); + int sortColumn() const; + Qt::SortOrder sortOrder() const; + int filterRole() const; + void setFilterRole(int role); + virtual QStringList mimeTypes() const; + virtual Qt::DropActions supportedDropActions() const; + bool isSortLocaleAware() const; + void setSortLocaleAware(bool on); + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; +%If (Qt_5_10_0 -) + bool isRecursiveFilteringEnabled() const; +%End +%If (Qt_5_10_0 -) + void setRecursiveFilteringEnabled(bool recursive); +%End + +protected: + void invalidateFilter(); + +signals: +%If (Qt_5_15_0 -) + void dynamicSortFilterChanged(bool dynamicSortFilter); +%End +%If (Qt_5_15_0 -) + void filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity); +%End +%If (Qt_5_15_0 -) + void sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity); +%End +%If (Qt_5_15_0 -) + void sortLocaleAwareChanged(bool sortLocaleAware); +%End +%If (Qt_5_15_0 -) + void sortRoleChanged(int sortRole); +%End +%If (Qt_5_15_0 -) + void filterRoleChanged(int filterRole); +%End +%If (Qt_5_15_0 -) + void recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstandardpaths.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstandardpaths.sip new file mode 100644 index 0000000..f9be793 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstandardpaths.sip @@ -0,0 +1,90 @@ +// qstandardpaths.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStandardPaths +{ +%TypeHeaderCode +#include +%End + +public: + enum StandardLocation + { + DesktopLocation, + DocumentsLocation, + FontsLocation, + ApplicationsLocation, + MusicLocation, + MoviesLocation, + PicturesLocation, + TempLocation, + HomeLocation, + DataLocation, + CacheLocation, + GenericDataLocation, + RuntimeLocation, + ConfigLocation, + DownloadLocation, + GenericCacheLocation, +%If (Qt_5_2_0 -) + GenericConfigLocation, +%End +%If (Qt_5_4_0 -) + AppDataLocation, +%End +%If (Qt_5_4_0 -) + AppLocalDataLocation, +%End +%If (Qt_5_5_0 -) + AppConfigLocation, +%End + }; + + static QString writableLocation(QStandardPaths::StandardLocation type); + static QStringList standardLocations(QStandardPaths::StandardLocation type); + + enum LocateOption + { + LocateFile, + LocateDirectory, + }; + + typedef QFlags LocateOptions; + static QString locate(QStandardPaths::StandardLocation type, const QString &fileName, QFlags options = QStandardPaths::LocateFile); + static QStringList locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QFlags options = QStandardPaths::LocateFile); +%If (PyQt_NotBootstrapped) + static QString displayName(QStandardPaths::StandardLocation type); +%End + static QString findExecutable(const QString &executableName, const QStringList &paths = QStringList()); + static void enableTestMode(bool testMode); +%If (Qt_5_2_0 -) + static void setTestModeEnabled(bool testMode); +%End + +private: + QStandardPaths(); + ~QStandardPaths(); +}; + +%If (Qt_5_8_0 -) +QFlags operator|(QStandardPaths::LocateOption f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstate.sip new file mode 100644 index 0000000..c6869d0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstate.sip @@ -0,0 +1,91 @@ +// qstate.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QState : public QAbstractState +{ +%TypeHeaderCode +#include +%End + +public: + enum ChildMode + { + ExclusiveStates, + ParallelStates, + }; + + enum RestorePolicy + { + DontRestoreProperties, + RestoreProperties, + }; + + QState(QState *parent /TransferThis/ = 0); + QState(QState::ChildMode childMode, QState *parent /TransferThis/ = 0); + virtual ~QState(); + QAbstractState *errorState() const; + void setErrorState(QAbstractState *state /KeepReference/); + void addTransition(QAbstractTransition *transition /Transfer/); + QSignalTransition *addTransition(SIP_PYOBJECT signal /TypeHint="pyqtBoundSignal"/, QAbstractState *target); +%MethodCode + QObject *sender; + QByteArray signal_signature; + + if ((sipError = pyqt5_get_pyqtsignal_parts(a0, &sender, signal_signature)) == sipErrorNone) + { + sipRes = sipCpp->addTransition(sender, signal_signature.constData(), a1); + } + else + { + sipError = sipBadCallableArg(0, a0); + } +%End + + QAbstractTransition *addTransition(QAbstractState *target /Transfer/); + void removeTransition(QAbstractTransition *transition /TransferBack/); + QList transitions() const; + QAbstractState *initialState() const; + void setInitialState(QAbstractState *state /KeepReference/); + QState::ChildMode childMode() const; + void setChildMode(QState::ChildMode mode); + void assignProperty(QObject *object, const char *name, const QVariant &value); + +signals: + void finished(); + void propertiesAssigned(); + +protected: + virtual void onEntry(QEvent *event); + virtual void onExit(QEvent *event); + virtual bool event(QEvent *e); + +signals: +%If (Qt_5_4_0 -) + void childModeChanged(); +%End +%If (Qt_5_4_0 -) + void initialStateChanged(); +%End +%If (Qt_5_4_0 -) + void errorStateChanged(); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstatemachine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstatemachine.sip new file mode 100644 index 0000000..d38b951 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstatemachine.sip @@ -0,0 +1,150 @@ +// qstatemachine.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStateMachine : public QState +{ +%TypeHeaderCode +#include +%End + +public: + class SignalEvent : public QEvent /NoDefaultCtors/ + { +%TypeHeaderCode +#include +%End + + public: + virtual ~SignalEvent(); + QObject *sender() const; + int signalIndex() const; + QList arguments() const; + }; + + class WrappedEvent : public QEvent /NoDefaultCtors/ + { +%TypeHeaderCode +#include +%End + + public: + virtual ~WrappedEvent(); + QObject *object() const; + QEvent *event() const; + }; + + enum EventPriority + { + NormalPriority, + HighPriority, + }; + + enum Error + { + NoError, + NoInitialStateError, + NoDefaultStateInHistoryStateError, + NoCommonAncestorForTransitionError, +%If (Qt_5_14_0 -) + StateMachineChildModeSetToParallelError, +%End + }; + + explicit QStateMachine(QObject *parent /TransferThis/ = 0); + QStateMachine(QState::ChildMode childMode, QObject *parent /TransferThis/ = 0); + virtual ~QStateMachine(); + void addState(QAbstractState *state /Transfer/); + void removeState(QAbstractState *state /TransferBack/); + QStateMachine::Error error() const; + QString errorString() const; + void clearError(); + bool isRunning() const; + bool isAnimated() const; + void setAnimated(bool enabled); + void addDefaultAnimation(QAbstractAnimation *animation /GetWrapper/); +%MethodCode + // We want to keep a reference to the animation but this is in addition to the + // existing ones and does not replace them - so we can't use /KeepReference/. + sipCpp->addDefaultAnimation(a0); + + // Use the user object as a list of the references. + PyObject *user = sipGetUserObject((sipSimpleWrapper *)sipSelf); + + if (!user) + { + user = PyList_New(0); + sipSetUserObject((sipSimpleWrapper *)sipSelf, user); + } + + if (user) + PyList_Append(user, a0Wrapper); +%End + + QList defaultAnimations() const; + void removeDefaultAnimation(QAbstractAnimation *animation /GetWrapper/); +%MethodCode + // Discard the extra animation reference that we took in addDefaultAnimation(). + sipCpp->removeDefaultAnimation(a0); + + // Use the user object as a list of the references. + PyObject *user = sipGetUserObject((sipSimpleWrapper *)sipSelf); + + if (user) + { + Py_ssize_t i = 0; + + // Note that we deal with an object appearing in the list more than once. + while (i < PyList_Size(user)) + if (PyList_GetItem(user, i) == a0Wrapper) + PyList_SetSlice(user, i, i + 1, NULL); + else + ++i; + } +%End + + QState::RestorePolicy globalRestorePolicy() const; + void setGlobalRestorePolicy(QState::RestorePolicy restorePolicy); + void postEvent(QEvent *event /Transfer/, QStateMachine::EventPriority priority = QStateMachine::NormalPriority); + int postDelayedEvent(QEvent *event /Transfer/, int delay); + bool cancelDelayedEvent(int id); + QSet configuration() const; + virtual bool eventFilter(QObject *watched, QEvent *event); + +public slots: + void start(); + void stop(); +%If (Qt_5_4_0 -) + void setRunning(bool running); +%End + +signals: + void started(); + void stopped(); +%If (Qt_5_4_0 -) + void runningChanged(bool running); +%End + +protected: + virtual void onEntry(QEvent *event); + virtual void onExit(QEvent *event); + virtual bool event(QEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstorageinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstorageinfo.sip new file mode 100644 index 0000000..dc13840 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstorageinfo.sip @@ -0,0 +1,68 @@ +// qstorageinfo.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QStorageInfo +{ +%TypeHeaderCode +#include +%End + +public: + QStorageInfo(); + explicit QStorageInfo(const QString &path); + explicit QStorageInfo(const QDir &dir); + QStorageInfo(const QStorageInfo &other); + ~QStorageInfo(); + void swap(QStorageInfo &other /Constrained/); + void setPath(const QString &path); + QString rootPath() const; + QByteArray device() const; + QByteArray fileSystemType() const; + QString name() const; + QString displayName() const; + qint64 bytesTotal() const; + qint64 bytesFree() const; + qint64 bytesAvailable() const; + bool isReadOnly() const; + bool isReady() const; + bool isValid() const; + void refresh(); + static QList mountedVolumes(); + static QStorageInfo root(); + bool isRoot() const; +%If (Qt_5_6_0 -) + int blockSize() const; +%End +%If (Qt_5_9_0 -) + QByteArray subvolume() const; +%End +}; + +%End +%If (Qt_5_4_0 -) +bool operator==(const QStorageInfo &first, const QStorageInfo &second); +%End +%If (Qt_5_4_0 -) +bool operator!=(const QStorageInfo &first, const QStorageInfo &second); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstring.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstring.sip new file mode 100644 index 0000000..c1a7f14 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstring.sip @@ -0,0 +1,70 @@ +// qstring.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +// QString mapped type. +%MappedType QString /AllowNone, TypeHintIn="Optional[str]", TypeHintOut="str", TypeHintValue="''"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +if (sipIsErr == NULL) +#if PY_MAJOR_VERSION < 3 + return (sipPy == Py_None || PyString_Check(sipPy) || PyUnicode_Check(sipPy)); +#else + return (sipPy == Py_None || PyUnicode_Check(sipPy)); +#endif + +if (sipPy == Py_None) +{ + // None is the only way to create a null (as opposed to empty) QString. + *sipCppPtr = new QString(); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = new QString(qpycore_PyObject_AsQString(sipPy)); + +return sipGetState(sipTransferObj); +%End + +%ConvertFromTypeCode + return qpycore_PyObject_FromQString(*sipCpp); +%End +}; +// QStringRef mapped type. +%MappedType QStringRef /TypeHint="str",TypeHintValue="''"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode + // Qt only ever returns a QStringRef so this conversion isn't needed. + return 0; +%End + +%ConvertFromTypeCode + return qpycore_PyObject_FromQString(sipCpp->toString()); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstringlist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstringlist.sip new file mode 100644 index 0000000..9de3142 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstringlist.sip @@ -0,0 +1,138 @@ +// This is the SIP interface definition for the QStringList mapped type. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +// Note that when we test the type of an object to see if it can be converted +// to a collection we only check if it is iterable. We do not check the +// types of the contents - we assume we will be able to convert them when +// requested. This allows us to raise exceptions specific to an individual +// object. This approach doesn't work if there are overloads that can only be +// distinguished by the types of the template arguments. Currently there are +// no such cases in PyQt5. Note also that we don't consider strings to be +// iterables. + + +%MappedType QStringList + /TypeHintIn="Iterable[QString]", TypeHintOut="List[QString]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + QString *t = new QString(sipCpp->at(i)); + PyObject *tobj = sipConvertFromNewType(t, sipType_QString, + sipTransferObj); + + if (!tobj) + { + delete t; + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, tobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QStringList *ql = new QStringList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int state; + QString *t = reinterpret_cast( + sipForceConvertToType(itm, sipType_QString, sipTransferObj, + SIP_NOT_NONE, &state, sipIsErr)); + + if (*sipIsErr) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'str' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + + return 0; + } + + ql->append(*t); + + sipReleaseType(t, sipType_QString, state); + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstringlistmodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstringlistmodel.sip new file mode 100644 index 0000000..124d06d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qstringlistmodel.sip @@ -0,0 +1,52 @@ +// qstringlistmodel.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStringListModel : public QAbstractListModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QStringListModel(QObject *parent /TransferThis/ = 0); + QStringListModel(const QStringList &strings, QObject *parent /TransferThis/ = 0); + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex &index, int role) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + QStringList stringList() const; + void setStringList(const QStringList &strings); + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + virtual Qt::DropActions supportedDropActions() const; + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; +%If (Qt_5_13_0 -) + virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild); +%End +%If (Qt_5_13_0 -) + virtual QMap itemData(const QModelIndex &index) const; +%End +%If (Qt_5_13_0 -) + virtual bool setItemData(const QModelIndex &index, const QMap &roles); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsysinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsysinfo.sip new file mode 100644 index 0000000..bff4e05 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsysinfo.sip @@ -0,0 +1,198 @@ +// This is the SIP specification of the QSysInfo class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSysInfo +{ +%TypeHeaderCode +#include +%End + +public: + enum Sizes + { + WordSize, + }; + + enum Endian + { + BigEndian, + LittleEndian, + ByteOrder, + }; + +%If (WS_MACX) + enum MacVersion + { + MV_Unknown, + MV_9, + MV_10_0, + MV_10_1, + MV_10_2, + MV_10_3, + MV_10_4, + MV_10_5, + MV_10_6, + MV_10_7, + MV_10_8, +%If (Qt_5_1_0 -) + MV_10_9, +%End +%If (Qt_5_4_0 -) + MV_10_10, +%End +%If (Qt_5_5_0 -) + MV_10_11, +%End +%If (Qt_5_8_0 -) + MV_10_12, +%End + MV_CHEETAH, + MV_PUMA, + MV_JAGUAR, + MV_PANTHER, + MV_TIGER, + MV_LEOPARD, + MV_SNOWLEOPARD, + MV_LION, + MV_MOUNTAINLION, +%If (Qt_5_1_0 -) + MV_MAVERICKS, +%End +%If (Qt_5_4_0 -) + MV_YOSEMITE, +%End +%If (Qt_5_5_0 -) + MV_ELCAPITAN, +%End +%If (Qt_5_8_0 -) + MV_SIERRA, +%End + +%If (Qt_5_2_0 -) + MV_IOS, + MV_IOS_4_3, + MV_IOS_5_0, + MV_IOS_5_1, + MV_IOS_6_0, + MV_IOS_6_1, + MV_IOS_7_0, + MV_IOS_7_1, +%End +%If (Qt_5_4_0 -) + MV_IOS_8_0, +%End +%If (Qt_5_5_0 -) + MV_IOS_8_1, + MV_IOS_8_2, + MV_IOS_8_3, + MV_IOS_8_4, + MV_IOS_9_0, +%End +%If (Qt_5_8_0 -) + MV_IOS_9_1, + MV_IOS_9_2, + MV_IOS_9_3, + MV_IOS_10_0, +%End + +%If (Qt_5_8_0 -) + MV_TVOS, + MV_TVOS_9_0, + MV_TVOS_9_1, + MV_TVOS_9_2, + MV_TVOS_10_0, +%End + +%If (Qt_5_8_0 -) + MV_WATCHOS, + MV_WATCHOS_2_0, + MV_WATCHOS_2_1, + MV_WATCHOS_2_2, + MV_WATCHOS_3_0, +%End + }; + + static const QSysInfo::MacVersion MacintoshVersion; + static QSysInfo::MacVersion macVersion(); +%End + +%If (WS_WIN) + enum WinVersion { + WV_32s, + WV_95, + WV_98, + WV_Me, + WV_DOS_based, + + WV_NT, + WV_2000, + WV_XP, + WV_2003, + WV_VISTA, + WV_WINDOWS7, + WV_WINDOWS8, +%If (Qt_5_2_0 -) + WV_WINDOWS8_1, +%End +%If (Qt_5_5_0 -) + WV_WINDOWS10, +%End + WV_NT_based, + + WV_4_0, + WV_5_0, + WV_5_1, + WV_5_2, + WV_6_0, + WV_6_1, + WV_6_2, +%If (Qt_5_2_0 -) + WV_6_3, +%End +%If (Qt_5_5_0 -) + WV_10_0, +%End + + WV_CE, + WV_CENET, + WV_CE_5, + WV_CE_6, + WV_CE_based + }; + + static const QSysInfo::WinVersion WindowsVersion; + static QSysInfo::WinVersion windowsVersion(); +%End + +%If (Qt_5_4_0 -) + static QString buildAbi(); + static QString buildCpuArchitecture(); + static QString currentCpuArchitecture(); + static QString kernelType(); + static QString kernelVersion(); + static QString prettyProductName(); + static QString productType(); + static QString productVersion(); +%End + +%If (Qt_5_6_0 -) + static QString machineHostName(); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsystemsemaphore.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsystemsemaphore.sip new file mode 100644 index 0000000..b29a425 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qsystemsemaphore.sip @@ -0,0 +1,58 @@ +// qsystemsemaphore.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSystemSemaphore +{ +%TypeHeaderCode +#include +%End + +public: + enum AccessMode + { + Open, + Create, + }; + + enum SystemSemaphoreError + { + NoError, + PermissionDenied, + KeyError, + AlreadyExists, + NotFound, + OutOfResources, + UnknownError, + }; + + QSystemSemaphore(const QString &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open); + ~QSystemSemaphore(); + void setKey(const QString &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open); + QString key() const; + bool acquire(); + bool release(int n = 1); + QSystemSemaphore::SystemSemaphoreError error() const; + QString errorString() const; + +private: + QSystemSemaphore(const QSystemSemaphore &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtemporarydir.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtemporarydir.sip new file mode 100644 index 0000000..0615990 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtemporarydir.sip @@ -0,0 +1,47 @@ +// qtemporarydir.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTemporaryDir +{ +%TypeHeaderCode +#include +%End + +public: + QTemporaryDir(); + explicit QTemporaryDir(const QString &templateName); + ~QTemporaryDir(); + bool isValid() const; + bool autoRemove() const; + void setAutoRemove(bool b); + bool remove(); + QString path() const; +%If (Qt_5_6_0 -) + QString errorString() const; +%End +%If (Qt_5_9_0 -) + QString filePath(const QString &fileName) const; +%End + +private: + QTemporaryDir(const QTemporaryDir &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtemporaryfile.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtemporaryfile.sip new file mode 100644 index 0000000..046d41b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtemporaryfile.sip @@ -0,0 +1,49 @@ +// qtemporaryfile.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTemporaryFile : public QFile +{ +%TypeHeaderCode +#include +%End + +public: + QTemporaryFile(); + explicit QTemporaryFile(const QString &templateName); + explicit QTemporaryFile(QObject *parent /TransferThis/); + QTemporaryFile(const QString &templateName, QObject *parent /TransferThis/); + virtual ~QTemporaryFile(); + bool autoRemove() const; + void setAutoRemove(bool b); + bool open() /ReleaseGIL/; + virtual QString fileName() const; + QString fileTemplate() const; + void setFileTemplate(const QString &name); + static QTemporaryFile *createNativeFile(const QString &fileName) /Factory,ReleaseGIL/; + static QTemporaryFile *createNativeFile(QFile &file) /Factory,ReleaseGIL/; +%If (Qt_5_10_0 -) + bool rename(const QString &newName); +%End + +protected: + virtual bool open(QIODevice::OpenMode flags) /ReleaseGIL/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextboundaryfinder.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextboundaryfinder.sip new file mode 100644 index 0000000..7ac893e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextboundaryfinder.sip @@ -0,0 +1,67 @@ +// qtextboundaryfinder.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextBoundaryFinder +{ +%TypeHeaderCode +#include +%End + +public: + enum BoundaryReason + { + NotAtBoundary, + SoftHyphen, + BreakOpportunity, + StartOfItem, + EndOfItem, + MandatoryBreak, + }; + + typedef QFlags BoundaryReasons; + + enum BoundaryType + { + Grapheme, + Word, + Line, + Sentence, + }; + + QTextBoundaryFinder(); + QTextBoundaryFinder(const QTextBoundaryFinder &other); + QTextBoundaryFinder(QTextBoundaryFinder::BoundaryType type, const QString &string); + ~QTextBoundaryFinder(); + bool isValid() const; + QTextBoundaryFinder::BoundaryType type() const; + QString string() const; + void toStart(); + void toEnd(); + int position() const; + void setPosition(int position); + int toNextBoundary(); + int toPreviousBoundary(); + bool isAtBoundary() const; + QTextBoundaryFinder::BoundaryReasons boundaryReasons() const; +}; + +QFlags operator|(QTextBoundaryFinder::BoundaryReason f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextcodec.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextcodec.sip new file mode 100644 index 0000000..2cc0593 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextcodec.sip @@ -0,0 +1,118 @@ +// qtextcodec.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextCodec /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + static QTextCodec *codecForName(const QByteArray &name); + static QTextCodec *codecForName(const char *name); + static QTextCodec *codecForMib(int mib); + static QTextCodec *codecForHtml(const QByteArray &ba); + static QTextCodec *codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec); + static QTextCodec *codecForUtfText(const QByteArray &ba); + static QTextCodec *codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec); + static QList availableCodecs(); + static QList availableMibs(); + static QTextCodec *codecForLocale(); + static void setCodecForLocale(QTextCodec *c /KeepReference/); + QTextDecoder *makeDecoder(QTextCodec::ConversionFlags flags = QTextCodec::DefaultConversion) const /Factory/; + QTextEncoder *makeEncoder(QTextCodec::ConversionFlags flags = QTextCodec::DefaultConversion) const /Factory/; + bool canEncode(const QString &) const; + QString toUnicode(const QByteArray &) const; + QString toUnicode(const char *chars /Encoding="None"/) const; + QByteArray fromUnicode(const QString &uc) const; + + enum ConversionFlag + { + DefaultConversion, + ConvertInvalidToNull, + IgnoreHeader, + }; + + typedef QFlags ConversionFlags; + + struct ConverterState + { +%TypeHeaderCode +#include +%End + + ConverterState(QTextCodec::ConversionFlags flags = QTextCodec::DefaultConversion); + ~ConverterState(); + + private: + ConverterState(const QTextCodec::ConverterState &); + }; + + QString toUnicode(const char *in /Array/, int length /ArraySize/, QTextCodec::ConverterState *state = 0) const; + virtual QByteArray name() const = 0; + virtual QList aliases() const; + virtual int mibEnum() const = 0; + +protected: + virtual QString convertToUnicode(const char *in /Array/, int length /ArraySize/, QTextCodec::ConverterState *state) const = 0; + virtual QByteArray convertFromUnicode(const QChar *in /Array/, int length /ArraySize/, QTextCodec::ConverterState *state) const = 0; + QTextCodec() /Transfer/; + virtual ~QTextCodec(); + +private: + QTextCodec(const QTextCodec &); +}; + +QFlags operator|(QTextCodec::ConversionFlag f1, QFlags f2); + +class QTextEncoder /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTextEncoder(const QTextCodec *codec); + QTextEncoder(const QTextCodec *codec, QTextCodec::ConversionFlags flags); + ~QTextEncoder(); + QByteArray fromUnicode(const QString &str); + +private: + QTextEncoder(const QTextEncoder &); +}; + +class QTextDecoder /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTextDecoder(const QTextCodec *codec); + QTextDecoder(const QTextCodec *codec, QTextCodec::ConversionFlags flags); + ~QTextDecoder(); + QString toUnicode(const char *chars /Array/, int len /ArraySize/); + QString toUnicode(const QByteArray &ba); + +private: + QTextDecoder(const QTextDecoder &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextstream.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextstream.sip new file mode 100644 index 0000000..1f55678 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtextstream.sip @@ -0,0 +1,183 @@ +// qtextstream.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QTextStream +{ +%TypeHeaderCode +#include +%End + +public: + enum RealNumberNotation + { + SmartNotation, + FixedNotation, + ScientificNotation, + }; + + enum FieldAlignment + { + AlignLeft, + AlignRight, + AlignCenter, + AlignAccountingStyle, + }; + + enum NumberFlag + { + ShowBase, + ForcePoint, + ForceSign, + UppercaseBase, + UppercaseDigits, + }; + + enum Status + { + Ok, + ReadPastEnd, + ReadCorruptData, + WriteFailed, + }; + + typedef QFlags NumberFlags; + QTextStream(); + explicit QTextStream(QIODevice *device); + QTextStream(QByteArray *array /Constrained/, QIODevice::OpenMode mode = QIODevice::ReadWrite); + virtual ~QTextStream(); + void setCodec(QTextCodec *codec /KeepReference/); + void setCodec(const char *codecName); + QTextCodec *codec() const; + void setAutoDetectUnicode(bool enabled); + bool autoDetectUnicode() const; + void setGenerateByteOrderMark(bool generate); + bool generateByteOrderMark() const; + void setDevice(QIODevice *device); + QIODevice *device() const; + bool atEnd() const; + void reset(); + void flush() /ReleaseGIL/; + bool seek(qint64 pos); + void skipWhiteSpace(); + QString read(qint64 maxlen) /ReleaseGIL/; + QString readLine(qint64 maxLength = 0) /ReleaseGIL/; + QString readAll() /ReleaseGIL/; + void setFieldAlignment(QTextStream::FieldAlignment alignment); + QTextStream::FieldAlignment fieldAlignment() const; + void setPadChar(QChar ch); + QChar padChar() const; + void setFieldWidth(int width); + int fieldWidth() const; + void setNumberFlags(QTextStream::NumberFlags flags); + QTextStream::NumberFlags numberFlags() const; + void setIntegerBase(int base); + int integerBase() const; + void setRealNumberNotation(QTextStream::RealNumberNotation notation); + QTextStream::RealNumberNotation realNumberNotation() const; + void setRealNumberPrecision(int precision); + int realNumberPrecision() const; + QTextStream::Status status() const; + void setStatus(QTextStream::Status status); + void resetStatus(); + qint64 pos() const; + QTextStream &operator>>(QByteArray &array /Constrained/); + QTextStream &operator<<(const QString &s); + QTextStream &operator<<(const QByteArray &array); + QTextStream &operator<<(double f /Constrained/); + QTextStream &operator<<(SIP_PYOBJECT i /TypeHint="int"/); +%MethodCode + #if PY_MAJOR_VERSION < 3 + if (PyInt_Check(a1)) + { + qlonglong val = PyInt_AsLong(a1); + + sipRes = &(*a0 << val); + } + else + #endif + { + qlonglong val = sipLong_AsLongLong(a1); + + if (!PyErr_Occurred()) + { + sipRes = &(*a0 << val); + } + else + { + // If it is positive then it might fit an unsigned long long. + + qulonglong uval = sipLong_AsUnsignedLongLong(a1); + + if (!PyErr_Occurred()) + { + sipRes = &(*a0 << uval); + } + else + { + sipError = (PyErr_ExceptionMatches(PyExc_OverflowError) + ? sipErrorFail : sipErrorContinue); + } + } + } +%End + + void setLocale(const QLocale &locale); + QLocale locale() const; + +private: + QTextStream(const QTextStream &); +}; + +QFlags operator|(QTextStream::NumberFlag f1, QFlags f2); +class QTextStreamManipulator; +QTextStream &operator<<(QTextStream &s, QTextStreamManipulator m); +QTextStream &bin(QTextStream &s) /PyName=bin_/; +QTextStream &oct(QTextStream &s) /PyName=oct_/; +QTextStream &dec(QTextStream &s); +QTextStream &hex(QTextStream &s) /PyName=hex_/; +QTextStream &showbase(QTextStream &s); +QTextStream &forcesign(QTextStream &s); +QTextStream &forcepoint(QTextStream &s); +QTextStream &noshowbase(QTextStream &s); +QTextStream &noforcesign(QTextStream &s); +QTextStream &noforcepoint(QTextStream &s); +QTextStream &uppercasebase(QTextStream &s); +QTextStream &uppercasedigits(QTextStream &s); +QTextStream &lowercasebase(QTextStream &s); +QTextStream &lowercasedigits(QTextStream &s); +QTextStream &fixed(QTextStream &s); +QTextStream &scientific(QTextStream &s); +QTextStream &left(QTextStream &s); +QTextStream &right(QTextStream &s); +QTextStream ¢er(QTextStream &s); +QTextStream &endl(QTextStream &s); +QTextStream &flush(QTextStream &s); +QTextStream &reset(QTextStream &s); +QTextStream &bom(QTextStream &s); +QTextStream &ws(QTextStream &s); +QTextStreamManipulator qSetFieldWidth(int width); +QTextStreamManipulator qSetPadChar(QChar ch); +QTextStreamManipulator qSetRealNumberPrecision(int precision); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qthread.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qthread.sip new file mode 100644 index 0000000..d02f76d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qthread.sip @@ -0,0 +1,96 @@ +// qthread.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QThread : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + static QThread *currentThread(); + static Qt::HANDLE currentThreadId(); + static int idealThreadCount(); + static void yieldCurrentThread() /ReleaseGIL/; + explicit QThread(QObject *parent /TransferThis/ = 0); + virtual ~QThread(); + + enum Priority + { + IdlePriority, + LowestPriority, + LowPriority, + NormalPriority, + HighPriority, + HighestPriority, + TimeCriticalPriority, + InheritPriority, + }; + + bool isFinished() const; + bool isRunning() const; + void setPriority(QThread::Priority priority); + QThread::Priority priority() const; + void setStackSize(uint stackSize); + uint stackSize() const; + void exit(int returnCode = 0) /ReleaseGIL/; + +public slots: + void start(QThread::Priority priority = QThread::InheritPriority) /ReleaseGIL/; + void terminate(); + void quit(); + +public: + bool wait(unsigned long msecs = ULONG_MAX) /ReleaseGIL/; +%If (Qt_5_15_0 -) + bool wait(QDeadlineTimer deadline) [bool (QDeadlineTimer deadline = QDeadlineTimer(QDeadlineTimer::ForeverConstant::Forever))]; +%End + +signals: + void started(); + void finished(); + +protected: + virtual void run() /NewThread,ReleaseGIL/; + int exec() /PyName=exec_,ReleaseGIL/; +%If (Py_v3) + int exec() /ReleaseGIL/; +%End + static void setTerminationEnabled(bool enabled = true); + +public: + virtual bool event(QEvent *event); + static void sleep(unsigned long) /ReleaseGIL/; + static void msleep(unsigned long) /ReleaseGIL/; + static void usleep(unsigned long) /ReleaseGIL/; + QAbstractEventDispatcher *eventDispatcher() const; + void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher /Transfer/); +%If (Qt_5_2_0 -) + void requestInterruption(); +%End +%If (Qt_5_2_0 -) + bool isInterruptionRequested() const; +%End +%If (Qt_5_5_0 -) + int loopLevel() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qthreadpool.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qthreadpool.sip new file mode 100644 index 0000000..df6a484 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qthreadpool.sip @@ -0,0 +1,147 @@ +// qthreadpool.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QThreadPool : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QThreadPool(QObject *parent /TransferThis/ = 0); + virtual ~QThreadPool() /ReleaseGIL/; + static QThreadPool *globalInstance() /KeepReference/; + void start(QRunnable *runnable /GetWrapper/, int priority = 0) /ReleaseGIL/; +%MethodCode + // We have to handle the object ownership manually. + if (a0->autoDelete()) + sipTransferTo(a0Wrapper, sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipCpp->start(a0, a1); + Py_END_ALLOW_THREADS +%End + +%If (Qt_5_15_0 -) + void start(SIP_PYCALLABLE functionToRun /TypeHint="Callable[[], None]"/, int priority = 0) /ReleaseGIL/; +%MethodCode + Py_INCREF(a0); + + Py_BEGIN_ALLOW_THREADS + + sipCpp->start([a0]() { + SIP_BLOCK_THREADS + + PyObject *res; + + res = PyObject_CallObject(a0, NULL); + + Py_DECREF(a0); + + if (res) + Py_DECREF(res); + else + pyqt5_err_print(); + + SIP_UNBLOCK_THREADS + }, a1); + + Py_END_ALLOW_THREADS +%End + +%End + bool tryStart(QRunnable *runnable /GetWrapper/) /ReleaseGIL/; +%MethodCode + // We have to handle the object ownership manually. + if (a0->autoDelete()) + sipTransferTo(a0Wrapper, sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->tryStart(a0); + Py_END_ALLOW_THREADS +%End + +%If (Qt_5_15_0 -) + bool tryStart(SIP_PYCALLABLE functionToRun /TypeHint="Callable[[], None]"/) /ReleaseGIL/; +%MethodCode + Py_INCREF(a0); + + Py_BEGIN_ALLOW_THREADS + + sipRes = sipCpp->tryStart([a0]() { + SIP_BLOCK_THREADS + + PyObject *res; + + res = PyObject_CallObject(a0, NULL); + + Py_DECREF(a0); + + if (res) + Py_DECREF(res); + else + pyqt5_err_print(); + + SIP_UNBLOCK_THREADS + }); + + Py_END_ALLOW_THREADS +%End + +%End +%If (Qt_5_9_0 -) + bool tryTake(QRunnable *runnable /GetWrapper/) /ReleaseGIL/; +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->tryTake(a0); + Py_END_ALLOW_THREADS + + // We have to handle the object ownership manually. + if (sipRes) + sipTransferBack(a0Wrapper); +%End + +%End + int expiryTimeout() const; + void setExpiryTimeout(int expiryTimeout); + int maxThreadCount() const; + void setMaxThreadCount(int maxThreadCount) /ReleaseGIL/; + int activeThreadCount() const /ReleaseGIL/; + void reserveThread() /ReleaseGIL/; + void releaseThread() /ReleaseGIL/; + bool waitForDone(int msecs = -1) /ReleaseGIL/; +%If (Qt_5_2_0 -) + void clear() /ReleaseGIL/; +%End +%If (Qt_5_5_0 -) + void cancel(QRunnable *runnable) /ReleaseGIL/; +%End +%If (Qt_5_10_0 -) + void setStackSize(uint stackSize); +%End +%If (Qt_5_10_0 -) + uint stackSize() const; +%End +%If (Qt_5_15_1 -) + bool contains(const QThread *thread) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimeline.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimeline.sip new file mode 100644 index 0000000..a81e2e8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimeline.sip @@ -0,0 +1,97 @@ +// qtimeline.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTimeLine : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum CurveShape + { + EaseInCurve, + EaseOutCurve, + EaseInOutCurve, + LinearCurve, + SineCurve, + CosineCurve, + }; + + enum Direction + { + Forward, + Backward, + }; + + enum State + { + NotRunning, + Paused, + Running, + }; + + QTimeLine(int duration = 1000, QObject *parent /TransferThis/ = 0); + virtual ~QTimeLine(); + QTimeLine::State state() const; + int loopCount() const; + void setLoopCount(int count); + QTimeLine::Direction direction() const; + void setDirection(QTimeLine::Direction direction); + int duration() const; + void setDuration(int duration); + int startFrame() const; + void setStartFrame(int frame); + int endFrame() const; + void setEndFrame(int frame); + void setFrameRange(int startFrame, int endFrame); + int updateInterval() const; + void setUpdateInterval(int interval); + QTimeLine::CurveShape curveShape() const; + void setCurveShape(QTimeLine::CurveShape shape); + int currentTime() const; + int currentFrame() const; + qreal currentValue() const; + int frameForTime(int msec) const; + virtual qreal valueForTime(int msec) const; + +public slots: + void resume(); + void setCurrentTime(int msec); + void setPaused(bool paused); + void start(); + void stop(); + void toggleDirection(); + +signals: + void finished(); + void frameChanged(int); + void stateChanged(QTimeLine::State newState); + void valueChanged(qreal x); + +protected: + virtual void timerEvent(QTimerEvent *event); + +public: + QEasingCurve easingCurve() const; + void setEasingCurve(const QEasingCurve &curve); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimer.sip new file mode 100644 index 0000000..5563443 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimer.sip @@ -0,0 +1,83 @@ +// qtimer.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTimer : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTimer(QObject *parent /TransferThis/ = 0); + virtual ~QTimer(); + bool isActive() const; + int timerId() const; + void setInterval(int msec); + int interval() const; + bool isSingleShot() const; + void setSingleShot(bool asingleShot); + static void singleShot(int msec, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_get_connection_parts(a1, 0, "()", true, &receiver, slot_signature)) == sipErrorNone) + { + QTimer::singleShot(a0, receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(1, a1); + } +%End + + static void singleShot(int msec, Qt::TimerType timerType, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_get_connection_parts(a2, 0, "()", true, &receiver, slot_signature)) == sipErrorNone) + { + QTimer::singleShot(a0, a1, receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(2, a2); + } +%End + +public slots: + void start(int msec); + void start(); + void stop(); + +signals: + void timeout(); + +protected: + virtual void timerEvent(QTimerEvent *); + +public: + void setTimerType(Qt::TimerType atype); + Qt::TimerType timerType() const; + int remainingTime() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimezone.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimezone.sip new file mode 100644 index 0000000..58170fa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtimezone.sip @@ -0,0 +1,111 @@ +// qtimezone.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QTimeZone +{ +%TypeHeaderCode +#include +%End + +public: + enum TimeType + { + StandardTime, + DaylightTime, + GenericTime, + }; + + enum NameType + { + DefaultName, + LongName, + ShortName, + OffsetName, + }; + + struct OffsetData + { +%TypeHeaderCode +#include +%End + + QString abbreviation; + QDateTime atUtc; + int offsetFromUtc; + int standardTimeOffset; + int daylightTimeOffset; + }; + + typedef QVector OffsetDataList; + QTimeZone(); + explicit QTimeZone(const QByteArray &ianaId); + explicit QTimeZone(int offsetSeconds); + QTimeZone(const QByteArray &zoneId, int offsetSeconds, const QString &name, const QString &abbreviation, QLocale::Country country = QLocale::AnyCountry, const QString &comment = QString()); + QTimeZone(const QTimeZone &other); + ~QTimeZone(); + void swap(QTimeZone &other /Constrained/); + bool operator==(const QTimeZone &other) const; + bool operator!=(const QTimeZone &other) const; + bool isValid() const; + QByteArray id() const; + QLocale::Country country() const; + QString comment() const; + QString displayName(const QDateTime &atDateTime, QTimeZone::NameType nameType = QTimeZone::DefaultName, const QLocale &locale = QLocale()) const; + QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType = QTimeZone::DefaultName, const QLocale &locale = QLocale()) const; + QString abbreviation(const QDateTime &atDateTime) const; + int offsetFromUtc(const QDateTime &atDateTime) const; + int standardTimeOffset(const QDateTime &atDateTime) const; + int daylightTimeOffset(const QDateTime &atDateTime) const; + bool hasDaylightTime() const; + bool isDaylightTime(const QDateTime &atDateTime) const; + QTimeZone::OffsetData offsetData(const QDateTime &forDateTime) const; + bool hasTransitions() const; + QTimeZone::OffsetData nextTransition(const QDateTime &afterDateTime) const; + QTimeZone::OffsetData previousTransition(const QDateTime &beforeDateTime) const; + QTimeZone::OffsetDataList transitions(const QDateTime &fromDateTime, const QDateTime &toDateTime) const; + static QByteArray systemTimeZoneId(); + static bool isTimeZoneIdAvailable(const QByteArray &ianaId); + static QList availableTimeZoneIds(); + static QList availableTimeZoneIds(QLocale::Country country /Constrained/); + static QList availableTimeZoneIds(int offsetSeconds); + static QByteArray ianaIdToWindowsId(const QByteArray &ianaId); + static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId); + static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId, QLocale::Country country); + static QList windowsIdToIanaIds(const QByteArray &windowsId); + static QList windowsIdToIanaIds(const QByteArray &windowsId, QLocale::Country country); +%If (Qt_5_5_0 -) + static QTimeZone systemTimeZone(); +%End +%If (Qt_5_5_0 -) + static QTimeZone utc(); +%End +}; + +%End +%If (Qt_5_2_0 -) +QDataStream &operator<<(QDataStream &ds, const QTimeZone &tz /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_2_0 -) +QDataStream &operator>>(QDataStream &ds, QTimeZone &tz /Constrained/) /ReleaseGIL/; +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtranslator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtranslator.sip new file mode 100644 index 0000000..2810685 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtranslator.sip @@ -0,0 +1,43 @@ +// qtranslator.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTranslator : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTranslator(QObject *parent /TransferThis/ = 0); + virtual ~QTranslator(); + virtual QString translate(const char *context, const char *sourceText, const char *disambiguation = 0, int n = -1) const; + virtual bool isEmpty() const; + bool load(const QString &fileName, const QString &directory = QString(), const QString &searchDelimiters = QString(), const QString &suffix = QString()) /ReleaseGIL/; + bool load(const QLocale &locale, const QString &fileName, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString()) /ReleaseGIL/; + bool load(const uchar *data /Array/, int len /ArraySize/, const QString &directory = QString()) /PyName=loadFromData,ReleaseGIL/; +%If (Qt_5_15_0 -) + QString language() const; +%End +%If (Qt_5_15_0 -) + QString filePath() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtransposeproxymodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtransposeproxymodel.sip new file mode 100644 index 0000000..3e19c79 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qtransposeproxymodel.sip @@ -0,0 +1,55 @@ +// qtransposeproxymodel.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_13_0 -) + +class QTransposeProxyModel : public QAbstractProxyModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTransposeProxyModel(QObject *parent /TransferThis/ = 0); + virtual ~QTransposeProxyModel(); + virtual void setSourceModel(QAbstractItemModel *newSourceModel /KeepReference/); + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::ItemDataRole::DisplayRole) const; + virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::ItemDataRole::EditRole); + virtual bool setItemData(const QModelIndex &index, const QMap &roles); + virtual QSize span(const QModelIndex &index) const; + virtual QMap itemData(const QModelIndex &index) const; + virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; + virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const; + virtual QModelIndex parent(const QModelIndex &index) const; + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild); + virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild); + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qurl.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qurl.sip new file mode 100644 index 0000000..9038d8d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qurl.sip @@ -0,0 +1,321 @@ +// qurl.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +// Template definition for QUrlTwoFlags. +template +class QUrlTwoFlags /PyQtFlagsEnums="E1 E2", TypeHintIn="Union[QUrlTwoFlags, E1, E2]"/ +{ +public: + // These are handled by the %ConvertToTypeCode. + //QUrlTwoFlags(E1); + //QUrlTwoFlags(E2); + QUrlTwoFlags(); + QUrlTwoFlags(const QUrlTwoFlags &f /TypeHint="QUrlTwoFlags"/); + + QUrlTwoFlags &operator&=(int mask); + //QUrlTwoFlags &operator&=(uint mask); + QUrlTwoFlags &operator|=(QUrlTwoFlags f /TypeHint="QUrlTwoFlags"/); + //QUrlTwoFlags &operator|=(E1 f); + //QUrlTwoFlags &operator|=(E2 f); + QUrlTwoFlags &operator^=(QUrlTwoFlags f /TypeHint="QUrlTwoFlags"/); + //QUrlTwoFlags &operator^=(E1 f); + //QUrlTwoFlags &operator^=(E2 f); + + operator int() const; + + // This is required for Python v3.8 and later. + int __index__() const; +%MethodCode + sipRes = sipCpp->operator int(); +%End + + QUrlTwoFlags operator|(QUrlTwoFlags f /TypeHint="QUrlTwoFlags"/) const; + //QUrlTwoFlags operator|(E1 f) const; + //QUrlTwoFlags operator|(E2 f) const; + QUrlTwoFlags operator^(QUrlTwoFlags f /TypeHint="QUrlTwoFlags"/) const; + //QUrlTwoFlags operator^(E1 f) const; + //QUrlTwoFlags operator^(E2 f) const; + QUrlTwoFlags operator&(int mask) const; + //QUrlTwoFlags operator&(uint mask) const; + //QUrlTwoFlags operator&(E1 f) const; + //QUrlTwoFlags operator&(E2 f) const; + QUrlTwoFlags operator~() const; + + // These are necessary to prevent Python comparing object IDs. + bool operator==(const QUrlTwoFlags &f /TypeHint="QUrlTwoFlags"/) const; +%MethodCode + sipRes = (sipCpp->operator int() == a0->operator int()); +%End + + bool operator!=(const QUrlTwoFlags &f /TypeHint="QUrlTwoFlags"/) const; +%MethodCode + sipRes = (sipCpp->operator int() != a0->operator int()); +%End + + int __bool__() const; +%MethodCode + sipRes = (sipCpp->operator int() != 0); +%End + + long __hash__() const; +%MethodCode + sipRes = sipCpp->operator int(); +%End + +%ConvertToTypeCode +// Allow an instance of the base enums whenever a QUrlTwoFlags is expected. + +if (sipIsErr == NULL) + return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_E1)) || + PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_E2)) || + sipCanConvertToType(sipPy, sipType_QUrlTwoFlags, SIP_NO_CONVERTORS)); + +if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_E1)) || + PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_E2))) +{ + *sipCppPtr = new QUrlTwoFlags(int(SIPLong_AsLong(sipPy))); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QUrlTwoFlags, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End +}; + +class QUrl +{ +%TypeHeaderCode +#include +%End + +%TypeCode +#include +%End + +public: + enum ParsingMode + { + TolerantMode, + StrictMode, + DecodedMode, + }; + + QUrl(); + QUrl(const QString &url, QUrl::ParsingMode mode = QUrl::TolerantMode); + QUrl(const QUrl ©); + ~QUrl(); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + PyObject *uni = qpycore_PyObject_FromQString(sipCpp->toString()); + + if (uni) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QUrl(%R)", uni); + #else + sipRes = PyString_FromFormat("PyQt5.QtCore.QUrl("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(uni)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + + Py_DECREF(uni); + } +%End + + enum UrlFormattingOption + { + None /PyName=None_/, + RemoveScheme, + RemovePassword, + RemoveUserInfo, + RemovePort, + RemoveAuthority, + RemovePath, + RemoveQuery, + RemoveFragment, + PreferLocalFile, + StripTrailingSlash, +%If (Qt_5_2_0 -) + RemoveFilename, +%End +%If (Qt_5_2_0 -) + NormalizePathSegments, +%End + }; + + typedef QUrlTwoFlags FormattingOptions; + + enum ComponentFormattingOption + { + PrettyDecoded, + EncodeSpaces, + EncodeUnicode, + EncodeDelimiters, + EncodeReserved, + DecodeReserved, + FullyEncoded, + FullyDecoded, + }; + + typedef QFlags ComponentFormattingOptions; + QString url(QUrlTwoFlags options = QUrl::PrettyDecoded) const; + void setUrl(const QString &url, QUrl::ParsingMode mode = QUrl::TolerantMode); + bool isValid() const; + bool isEmpty() const; + void clear(); + void setScheme(const QString &scheme); + QString scheme() const; + void setAuthority(const QString &authority, QUrl::ParsingMode mode = QUrl::TolerantMode); + QString authority(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; + void setUserInfo(const QString &userInfo, QUrl::ParsingMode mode = QUrl::TolerantMode); + QString userInfo(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; +%If (Qt_5_2_0 -) + void setUserName(const QString &userName, QUrl::ParsingMode mode = QUrl::DecodedMode); +%End +%If (- Qt_5_2_0) + void setUserName(const QString &userName, QUrl::ParsingMode mode = QUrl::TolerantMode); +%End +%If (Qt_5_2_0 -) + QString userName(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; +%End +%If (- Qt_5_2_0) + QString userName(QFlags options = QUrl::PrettyDecoded) const; +%End +%If (Qt_5_2_0 -) + void setPassword(const QString &password, QUrl::ParsingMode mode = QUrl::DecodedMode); +%End +%If (- Qt_5_2_0) + void setPassword(const QString &password, QUrl::ParsingMode mode = QUrl::TolerantMode); +%End +%If (Qt_5_2_0 -) + QString password(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; +%End +%If (- Qt_5_2_0) + QString password(QFlags options = QUrl::PrettyDecoded) const; +%End +%If (Qt_5_2_0 -) + void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode); +%End +%If (- Qt_5_2_0) + void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::TolerantMode); +%End +%If (Qt_5_2_0 -) + QString host(QUrl::ComponentFormattingOptions = QUrl::FullyDecoded) const; +%End +%If (- Qt_5_2_0) + QString host(QFlags options = QUrl::PrettyDecoded) const; +%End + void setPort(int port); + int port(int defaultPort = -1) const; +%If (Qt_5_2_0 -) + void setPath(const QString &path, QUrl::ParsingMode mode = QUrl::DecodedMode); +%End +%If (- Qt_5_2_0) + void setPath(const QString &path, QUrl::ParsingMode mode = QUrl::TolerantMode); +%End +%If (Qt_5_2_0 -) + QString path(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; +%End +%If (- Qt_5_2_0) + QString path(QFlags options = QUrl::PrettyDecoded) const; +%End + void setFragment(const QString &fragment, QUrl::ParsingMode mode = QUrl::TolerantMode); + QString fragment(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; + QUrl resolved(const QUrl &relative) const; + bool isRelative() const; + bool isParentOf(const QUrl &url) const; + static QUrl fromLocalFile(const QString &localfile); + QString toLocalFile() const; + QString toString(QUrlTwoFlags options = QUrl::PrettyDecoded) const; + QByteArray toEncoded(QUrlTwoFlags options = QUrl::FullyEncoded) const; + static QUrl fromEncoded(const QByteArray &u, QUrl::ParsingMode mode = QUrl::TolerantMode); + void detach(); + bool isDetached() const; + bool operator<(const QUrl &url) const; + bool operator==(const QUrl &url) const; + bool operator!=(const QUrl &url) const; + static QString fromPercentEncoding(const QByteArray &); + static QByteArray toPercentEncoding(const QString &input, const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray()); + bool hasQuery() const; + bool hasFragment() const; + QString errorString() const; + static QString fromAce(const QByteArray &); + static QByteArray toAce(const QString &); + static QStringList idnWhitelist(); + static void setIdnWhitelist(const QStringList &); + static QUrl fromUserInput(const QString &userInput); + void swap(QUrl &other /Constrained/); +%If (Qt_5_2_0 -) + QString topLevelDomain(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; +%End +%If (- Qt_5_2_0) + QString topLevelDomain(QFlags options = QUrl::PrettyDecoded) const; +%End + bool isLocalFile() const; + QString toDisplayString(QUrlTwoFlags options = QUrl::PrettyDecoded) const; + void setQuery(const QString &query, QUrl::ParsingMode mode = QUrl::TolerantMode); + void setQuery(const QUrlQuery &query); + QString query(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; +%If (Qt_5_1_0 -) + static QStringList toStringList(const QList &uris, QUrlTwoFlags options = QUrl::PrettyDecoded); +%End +%If (Qt_5_1_0 -) + static QList fromStringList(const QStringList &uris, QUrl::ParsingMode mode = QUrl::TolerantMode); +%End +%If (Qt_5_2_0 -) + QUrl adjusted(QUrl::FormattingOptions options) const; +%End +%If (Qt_5_2_0 -) + QString fileName(QUrl::ComponentFormattingOptions options = QUrl::FullyDecoded) const; +%End +%If (Qt_5_2_0 -) + bool matches(const QUrl &url, QUrl::FormattingOptions options) const; +%End +%If (Qt_5_4_0 -) + + enum UserInputResolutionOption + { + DefaultResolution, + AssumeLocalFile, + }; + +%End +%If (Qt_5_4_0 -) + typedef QFlags UserInputResolutionOptions; +%End +%If (Qt_5_4_0 -) + static QUrl fromUserInput(const QString &userInput, const QString &workingDirectory, QUrl::UserInputResolutionOptions options = QUrl::DefaultResolution); +%End +}; + +QFlags operator|(QUrl::ComponentFormattingOption f1, QFlags f2); +QDataStream &operator<<(QDataStream &, const QUrl & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QUrl & /Constrained/) /ReleaseGIL/; +QUrlTwoFlags operator|(QUrl::UrlFormattingOption f1, QUrlTwoFlags f2); +QUrlTwoFlags operator|(QUrl::ComponentFormattingOption f, QUrlTwoFlags i); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qurlquery.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qurlquery.sip new file mode 100644 index 0000000..17dada2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qurlquery.sip @@ -0,0 +1,64 @@ +// qurlquery.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QUrlQuery +{ +%TypeHeaderCode +#include +%End + +public: + QUrlQuery(); + explicit QUrlQuery(const QUrl &url); + explicit QUrlQuery(const QString &queryString); + QUrlQuery(const QUrlQuery &other); + ~QUrlQuery(); + bool operator==(const QUrlQuery &other) const; + bool operator!=(const QUrlQuery &other) const; + void swap(QUrlQuery &other /Constrained/); + bool isEmpty() const; + bool isDetached() const; + void clear(); + QString query(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; + void setQuery(const QString &queryString); + QString toString(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; + void setQueryDelimiters(QChar valueDelimiter, QChar pairDelimiter); + QChar queryValueDelimiter() const; + QChar queryPairDelimiter() const; + void setQueryItems(const QList> &query); + QList> queryItems(QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; + bool hasQueryItem(const QString &key) const; + void addQueryItem(const QString &key, const QString &value); + void removeQueryItem(const QString &key); + QString queryItemValue(const QString &key, QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; + QStringList allQueryItemValues(const QString &key, QUrl::ComponentFormattingOptions options = QUrl::PrettyDecoded) const; + void removeAllQueryItems(const QString &key); + static QChar defaultQueryValueDelimiter(); + static QChar defaultQueryPairDelimiter(); +%If (Qt_5_6_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/quuid.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/quuid.sip new file mode 100644 index 0000000..383277a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/quuid.sip @@ -0,0 +1,118 @@ +// quuid.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QUuid +{ +%TypeHeaderCode +#include +%End + +public: + enum Variant + { + VarUnknown, + NCS, + DCE, + Microsoft, + Reserved, + }; + + enum Version + { + VerUnknown, + Time, + EmbeddedPOSIX, + Md5, + Name, + Random, + Sha1, + }; + +%If (Qt_5_11_0 -) + + enum StringFormat + { + WithBraces, + WithoutBraces, + Id128, + }; + +%End + QUuid(); + QUuid(uint l, ushort w1, ushort w2, uchar b1 /PyInt/, uchar b2 /PyInt/, uchar b3 /PyInt/, uchar b4 /PyInt/, uchar b5 /PyInt/, uchar b6 /PyInt/, uchar b7 /PyInt/, uchar b8 /PyInt/); + QUuid(const QString &); + QUuid(const QByteArray &); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + PyObject *uni = qpycore_PyObject_FromQString(sipCpp->toString()); + + if (uni) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QUuid(%R)", uni); + #else + sipRes = PyString_FromFormat("PyQt5.QtCore.QUuid("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(uni)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + + Py_DECREF(uni); + } +%End + + QString toString() const; +%If (Qt_5_11_0 -) + QString toString(QUuid::StringFormat mode) const; +%End + bool isNull() const; + bool operator==(const QUuid &orig) const; + bool operator!=(const QUuid &orig) const; + bool operator<(const QUuid &other) const; + bool operator>(const QUuid &other) const; + static QUuid createUuid(); + static QUuid createUuidV3(const QUuid &ns, const QByteArray &baseData); + static QUuid createUuidV5(const QUuid &ns, const QByteArray &baseData); + static QUuid createUuidV3(const QUuid &ns, const QString &baseData); + static QUuid createUuidV5(const QUuid &ns, const QString &baseData); + QUuid::Variant variant() const; + QUuid::Version version() const; + QByteArray toByteArray() const; +%If (Qt_5_11_0 -) + QByteArray toByteArray(QUuid::StringFormat mode) const; +%End + QByteArray toRfc4122() const; + static QUuid fromRfc4122(const QByteArray &); +}; + +QDataStream &operator<<(QDataStream &, const QUuid & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QUuid & /Constrained/) /ReleaseGIL/; +%If (Qt_5_5_0 -) +bool operator<=(const QUuid &lhs, const QUuid &rhs); +%End +%If (Qt_5_5_0 -) +bool operator>=(const QUuid &lhs, const QUuid &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qvariant.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qvariant.sip new file mode 100644 index 0000000..8c31519 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qvariant.sip @@ -0,0 +1,177 @@ +// qvariant.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVariant /AllowNone,TypeHint="Any",TypeHintValue="None"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +if (sipIsErr == NULL) + // We can convert everything to a QVariant. + return 1; + +// If it is already a QVariant then just return it. +if (Py_TYPE(sipPy) == sipTypeAsPyTypeObject(sipType_QVariant)) +{ + *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, + sipType_QVariant, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + + return 0; +} + +// Convert it to a QVariant. +QVariant var = qpycore_PyObject_AsQVariant(sipPy, sipIsErr); + +if (*sipIsErr) + return 0; + +*sipCppPtr = new QVariant(var); + +return sipGetState(sipTransferObj); +%End + +%ConvertFromTypeCode +return qpycore_PyObject_FromQVariant(*sipCpp); +%End + +public: + enum Type + { + Invalid, + Bool, + Int, + UInt, + LongLong, + ULongLong, + Double, + Char, + Map, + List, + String, + StringList, + ByteArray, + BitArray, + Date, + Time, + DateTime, + Url, + Locale, + Rect, + RectF, + Size, + SizeF, + Line, + LineF, + Point, + PointF, + RegExp, + Font, + Pixmap, + Brush, + Color, + Palette, + Icon, + Image, + Polygon, + Region, + Bitmap, + Cursor, + SizePolicy, + KeySequence, + Pen, + TextLength, + TextFormat, + Matrix, + Transform, + Hash, + Matrix4x4, + Vector2D, + Vector3D, + Vector4D, + Quaternion, + EasingCurve, + Uuid, + ModelIndex, + PolygonF, + RegularExpression, +%If (Qt_5_5_0 -) + PersistentModelIndex, +%End + UserType, + }; + + QVariant(); + QVariant(QVariant::Type type /Constrained/); + QVariant(SIP_PYOBJECT obj); +%MethodCode + int is_err = 0; + QVariant var = qpycore_PyObject_AsQVariant(a0, &is_err); + + if (is_err) + sipCpp = 0; + else + sipCpp = new QVariant(var); +%End + + ~QVariant(); + SIP_PYOBJECT value() const; +%MethodCode + sipRes = qpycore_PyObject_FromQVariant(*sipCpp); +%End + + QVariant::Type type() const; + int userType() const; + const char *typeName() const; + bool canConvert(int targetTypeId) const; + bool convert(int targetTypeId); + bool isValid() const; + bool isNull() const; + void clear(); + void load(QDataStream &ds) /ReleaseGIL/; + void save(QDataStream &ds) const /ReleaseGIL/; + static const char *typeToName(int typeId); + static QVariant::Type nameToType(const char *name); + bool operator==(const QVariant &v) const; + bool operator!=(const QVariant &v) const; + void swap(QVariant &other /Constrained/); +%If (Qt_5_2_0 -) + bool operator<(const QVariant &v) const; +%End +%If (Qt_5_2_0 -) + bool operator<=(const QVariant &v) const; +%End +%If (Qt_5_2_0 -) + bool operator>(const QVariant &v) const; +%End +%If (Qt_5_2_0 -) + bool operator>=(const QVariant &v) const; +%End +}; + +typedef QList QVariantList /TypeHint="List[QVariant]"/; +typedef QHash QVariantHash /TypeHint="Dict[QString, QVariant]"/; +QDataStream &operator>>(QDataStream &s, QVariant &p /Constrained/) /ReleaseGIL/; +QDataStream &operator<<(QDataStream &s, const QVariant &p /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &s, QVariant::Type &p /Constrained,In/) /ReleaseGIL/; +QDataStream &operator<<(QDataStream &s, const QVariant::Type p /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qvariantanimation.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qvariantanimation.sip new file mode 100644 index 0000000..da79aae --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qvariantanimation.sip @@ -0,0 +1,57 @@ +// qvariantanimation.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVariantAnimation : public QAbstractAnimation +{ +%TypeHeaderCode +#include +%End + + typedef QVector> KeyValues; + +public: + QVariantAnimation(QObject *parent /TransferThis/ = 0); + virtual ~QVariantAnimation(); + QVariant startValue() const; + void setStartValue(const QVariant &value); + QVariant endValue() const; + void setEndValue(const QVariant &value); + QVariant keyValueAt(qreal step) const; + void setKeyValueAt(qreal step, const QVariant &value); + QVariantAnimation::KeyValues keyValues() const; + void setKeyValues(const QVariantAnimation::KeyValues &values); + QVariant currentValue() const; + virtual int duration() const; + void setDuration(int msecs); + QEasingCurve easingCurve() const; + void setEasingCurve(const QEasingCurve &easing); + +signals: + void valueChanged(const QVariant &value); + +protected: + virtual bool event(QEvent *event); + virtual void updateCurrentTime(int); + virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); + virtual void updateCurrentValue(const QVariant &value); + virtual QVariant interpolated(const QVariant &from, const QVariant &to, qreal progress) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qversionnumber.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qversionnumber.sip new file mode 100644 index 0000000..27e2a59 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qversionnumber.sip @@ -0,0 +1,81 @@ +// qversionnumber.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_6_0 -) +QDataStream &operator<<(QDataStream &out, const QVersionNumber &version /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_6_0 -) +QDataStream &operator>>(QDataStream &in, QVersionNumber &version /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_6_0 -) + +class QVersionNumber +{ +%TypeHeaderCode +#include +%End + +public: + QVersionNumber(); + explicit QVersionNumber(const QVector &seg); + explicit QVersionNumber(int maj); + QVersionNumber(int maj, int min); + QVersionNumber(int maj, int min, int mic); + bool isNull() const; + bool isNormalized() const; + int majorVersion() const; + int minorVersion() const; + int microVersion() const; + QVersionNumber normalized() const; + QVector segments() const; + int segmentAt(int index) const; + int segmentCount() const; + bool isPrefixOf(const QVersionNumber &other) const; + static int compare(const QVersionNumber &v1, const QVersionNumber &v2); + static QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2); + QString toString() const; + static QVersionNumber fromString(const QString &string, int *suffixIndex = 0); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +%End +%If (Qt_5_6_0 -) +bool operator>(const QVersionNumber &lhs, const QVersionNumber &rhs); +%End +%If (Qt_5_6_0 -) +bool operator>=(const QVersionNumber &lhs, const QVersionNumber &rhs); +%End +%If (Qt_5_6_0 -) +bool operator<(const QVersionNumber &lhs, const QVersionNumber &rhs); +%End +%If (Qt_5_6_0 -) +bool operator<=(const QVersionNumber &lhs, const QVersionNumber &rhs); +%End +%If (Qt_5_6_0 -) +bool operator==(const QVersionNumber &lhs, const QVersionNumber &rhs); +%End +%If (Qt_5_6_0 -) +bool operator!=(const QVersionNumber &lhs, const QVersionNumber &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qwaitcondition.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qwaitcondition.sip new file mode 100644 index 0000000..869ecc7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qwaitcondition.sip @@ -0,0 +1,45 @@ +// qwaitcondition.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QWaitCondition +{ +%TypeHeaderCode +#include +%End + +public: + QWaitCondition(); + ~QWaitCondition(); + bool wait(QMutex *mutex, unsigned long msecs = ULONG_MAX) /ReleaseGIL/; +%If (Qt_5_12_0 -) + bool wait(QMutex *lockedMutex, QDeadlineTimer deadline) /ReleaseGIL/; +%End + bool wait(QReadWriteLock *readWriteLock, unsigned long msecs = ULONG_MAX) /ReleaseGIL/; +%If (Qt_5_12_0 -) + bool wait(QReadWriteLock *lockedReadWriteLock, QDeadlineTimer deadline) /ReleaseGIL/; +%End + void wakeOne(); + void wakeAll(); + +private: + QWaitCondition(const QWaitCondition &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qwineventnotifier.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qwineventnotifier.sip new file mode 100644 index 0000000..c29bf3d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qwineventnotifier.sip @@ -0,0 +1,54 @@ +// This is the SIP specification of the QWinEventNotifier class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (WS_WIN) + +// This hack is for the activated() signal. +typedef Qt::HANDLE HANDLE; + +class QWinEventNotifier: QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QWinEventNotifier(QObject *parent /TransferThis/ = 0); + explicit QWinEventNotifier(Qt::HANDLE hEvent, QObject *parent /TransferThis/ = 0); + ~QWinEventNotifier(); + + Qt::HANDLE handle() const; + bool isEnabled() const; + void setHandle(Qt::HANDLE hEvent); + +public slots: + void setEnabled(bool enable); + +signals: + void activated(HANDLE hEvent); + +protected: + bool event(QEvent *e); + +private: + QWinEventNotifier(const QWinEventNotifier &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qxmlstream.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qxmlstream.sip new file mode 100644 index 0000000..3c74322 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtCore/qxmlstream.sip @@ -0,0 +1,448 @@ +// qxmlstream.sip generated by MetaSIP +// +// This file is part of the QtCore Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlStreamAttribute +{ +%TypeHeaderCode +#include +%End + +public: + QXmlStreamAttribute(); + QXmlStreamAttribute(const QString &qualifiedName, const QString &value); + QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value); + QXmlStreamAttribute(const QXmlStreamAttribute &); + ~QXmlStreamAttribute(); + QStringRef namespaceUri() const; + QStringRef name() const; + QStringRef qualifiedName() const; + QStringRef prefix() const; + QStringRef value() const; + bool isDefault() const; + bool operator==(const QXmlStreamAttribute &other) const; + bool operator!=(const QXmlStreamAttribute &other) const; +}; + +class QXmlStreamAttributes +{ +%TypeHeaderCode +#include +%End + +public: + QXmlStreamAttributes(); + QStringRef value(const QString &namespaceUri, const QString &name) const; + QStringRef value(const QString &qualifiedName) const; + void append(const QString &namespaceUri, const QString &name, const QString &value); + void append(const QString &qualifiedName, const QString &value); + void append(const QXmlStreamAttribute &attribute); + bool hasAttribute(const QString &qualifiedName) const; + bool hasAttribute(const QString &namespaceUri, const QString &name) const; +// Methods inherited from QVector and Python special methods. +// Keep in sync with QPolygon and QPolygonF. + +// This is picked up with "using" by QXmlStreamAttributes. +//void append(const QXmlStreamAttribute &value); + +const QXmlStreamAttribute &at(int i) const; +void clear(); +bool contains(const QXmlStreamAttribute &value) const; +int count(const QXmlStreamAttribute &value) const; +int count() const /__len__/; +void *data(); + +// Note the Qt return value is discarded as it would require handwritten code +// and seems pretty useless. +void fill(const QXmlStreamAttribute &value, int size = -1); + +QXmlStreamAttribute &first(); +int indexOf(const QXmlStreamAttribute &value, int from = 0) const; +void insert(int i, const QXmlStreamAttribute &value); +bool isEmpty() const; +QXmlStreamAttribute &last(); +int lastIndexOf(const QXmlStreamAttribute &value, int from = -1) const; + +// Note the Qt return type is QVector. We can't do the +// usual trick because there is no QXmlStreamAttributes ctor that takes a +// QVector argument. We could use handwritten code but we +// don't bother. +//QXmlStreamAttributes mid(int pos, int length = -1) const; + +void prepend(const QXmlStreamAttribute &value); +void remove(int i); +void remove(int i, int count); +void replace(int i, const QXmlStreamAttribute &value); +int size() const; + +// These are hidden by other implementations in QXmlStreamAttributes. +//QXmlStreamAttribute value(int i) const; +//QXmlStreamAttribute value(int i, const QXmlStreamAttribute &defaultValue) const; + +bool operator!=(const QXmlStreamAttributes &other) const; + +// Note the Qt return type is QVector. We can't do the +// usual trick because there is no QXmlStreamAttributes ctor that takes a +// QVector argument. We could use handwritten code but we +// don't bother. +//QXmlStreamAttributes operator+(const QXmlStreamAttributes &other) const; + +QXmlStreamAttributes &operator+=(const QXmlStreamAttributes &other); +QXmlStreamAttributes &operator+=(const QXmlStreamAttribute &value); + +bool operator==(const QXmlStreamAttributes &other) const; + +QXmlStreamAttribute &operator[](int i); +%MethodCode +Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + +if (idx < 0) + sipIsErr = 1; +else + sipRes = &sipCpp->operator[]((int)idx); +%End + +// Some additional Python special methods. + +void __setitem__(int i, const QXmlStreamAttribute &value); +%MethodCode +int len; + +len = sipCpp->count(); + +if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) + sipIsErr = 1; +else + (*sipCpp)[a0] = *a1; +%End + +void __setitem__(SIP_PYSLICE slice, const QXmlStreamAttributes &list); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + int vlen = a1->count(); + + if (vlen != slicelength) + { + sipBadLengthForSlice(vlen, slicelength); + sipIsErr = 1; + } + else + { + QVector::const_iterator it = a1->begin(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipCpp)[start] = *it; + start += step; + ++it; + } + } +} +%End + +void __delitem__(int i); +%MethodCode +if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) + sipIsErr = 1; +else + sipCpp->remove(a0); +%End + +void __delitem__(SIP_PYSLICE slice); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + sipCpp->remove(start); + start += step - 1; + } +} +%End + +QXmlStreamAttributes operator[](SIP_PYSLICE slice); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + sipRes = new QXmlStreamAttributes(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipRes) += (*sipCpp)[start]; + start += step; + } +} +%End + +int __contains__(const QXmlStreamAttribute &value); +%MethodCode +// It looks like you can't assign QBool to int. +sipRes = bool(sipCpp->contains(*a0)); +%End +}; + +class QXmlStreamNamespaceDeclaration +{ +%TypeHeaderCode +#include +%End + +public: + QXmlStreamNamespaceDeclaration(); + QXmlStreamNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &); + QXmlStreamNamespaceDeclaration(const QString &prefix, const QString &namespaceUri); + ~QXmlStreamNamespaceDeclaration(); + QStringRef prefix() const; + QStringRef namespaceUri() const; + bool operator==(const QXmlStreamNamespaceDeclaration &other) const; + bool operator!=(const QXmlStreamNamespaceDeclaration &other) const; +}; + +typedef QVector QXmlStreamNamespaceDeclarations; + +class QXmlStreamNotationDeclaration +{ +%TypeHeaderCode +#include +%End + +public: + QXmlStreamNotationDeclaration(); + QXmlStreamNotationDeclaration(const QXmlStreamNotationDeclaration &); + ~QXmlStreamNotationDeclaration(); + QStringRef name() const; + QStringRef systemId() const; + QStringRef publicId() const; + bool operator==(const QXmlStreamNotationDeclaration &other) const; + bool operator!=(const QXmlStreamNotationDeclaration &other) const; +}; + +typedef QVector QXmlStreamNotationDeclarations; + +class QXmlStreamEntityDeclaration +{ +%TypeHeaderCode +#include +%End + +public: + QXmlStreamEntityDeclaration(); + QXmlStreamEntityDeclaration(const QXmlStreamEntityDeclaration &); + ~QXmlStreamEntityDeclaration(); + QStringRef name() const; + QStringRef notationName() const; + QStringRef systemId() const; + QStringRef publicId() const; + QStringRef value() const; + bool operator==(const QXmlStreamEntityDeclaration &other) const; + bool operator!=(const QXmlStreamEntityDeclaration &other) const; +}; + +typedef QVector QXmlStreamEntityDeclarations; + +class QXmlStreamEntityResolver +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QXmlStreamEntityResolver(); + virtual QString resolveUndeclaredEntity(const QString &name); +}; + +class QXmlStreamReader +{ +%TypeHeaderCode +#include +%End + +public: + enum TokenType + { + NoToken, + Invalid, + StartDocument, + EndDocument, + StartElement, + EndElement, + Characters, + Comment, + DTD, + EntityReference, + ProcessingInstruction, + }; + + QXmlStreamReader(); + explicit QXmlStreamReader(QIODevice *device); + explicit QXmlStreamReader(const QByteArray &data); + explicit QXmlStreamReader(const QString &data); + ~QXmlStreamReader(); + void setDevice(QIODevice *device); + QIODevice *device() const; + void addData(const QByteArray &data); + void addData(const QString &data); + void clear(); + bool atEnd() const; + QXmlStreamReader::TokenType readNext(); + QXmlStreamReader::TokenType tokenType() const; + QString tokenString() const; + void setNamespaceProcessing(bool); + bool namespaceProcessing() const; + bool isStartDocument() const; + bool isEndDocument() const; + bool isStartElement() const; + bool isEndElement() const; + bool isCharacters() const; + bool isWhitespace() const; + bool isCDATA() const; + bool isComment() const; + bool isDTD() const; + bool isEntityReference() const; + bool isProcessingInstruction() const; + bool isStandaloneDocument() const; + QStringRef documentVersion() const; + QStringRef documentEncoding() const; + qint64 lineNumber() const; + qint64 columnNumber() const; + qint64 characterOffset() const; + QXmlStreamAttributes attributes() const; + + enum ReadElementTextBehaviour + { + ErrorOnUnexpectedElement, + IncludeChildElements, + SkipChildElements, + }; + + QString readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = QXmlStreamReader::ErrorOnUnexpectedElement); + QStringRef name() const; + QStringRef namespaceUri() const; + QStringRef qualifiedName() const; + QStringRef prefix() const; + QStringRef processingInstructionTarget() const; + QStringRef processingInstructionData() const; + QStringRef text() const; + QXmlStreamNamespaceDeclarations namespaceDeclarations() const; + void addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaraction); + void addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclaractions); + QXmlStreamNotationDeclarations notationDeclarations() const; + QXmlStreamEntityDeclarations entityDeclarations() const; + QStringRef dtdName() const; + QStringRef dtdPublicId() const; + QStringRef dtdSystemId() const; + + enum Error + { + NoError, + UnexpectedElementError, + CustomError, + NotWellFormedError, + PrematureEndOfDocumentError, + }; + + void raiseError(const QString &message = QString()); + QString errorString() const; + QXmlStreamReader::Error error() const; + bool hasError() const; + void setEntityResolver(QXmlStreamEntityResolver *resolver /KeepReference/); + QXmlStreamEntityResolver *entityResolver() const; + bool readNextStartElement(); + void skipCurrentElement(); +%If (Qt_5_15_0 -) + int entityExpansionLimit() const; +%End +%If (Qt_5_15_0 -) + void setEntityExpansionLimit(int limit); +%End + +private: + QXmlStreamReader(const QXmlStreamReader &); +}; + +class QXmlStreamWriter +{ +%TypeHeaderCode +#include +%End + +public: + QXmlStreamWriter(); + explicit QXmlStreamWriter(QIODevice *device); + explicit QXmlStreamWriter(QByteArray *array); + ~QXmlStreamWriter(); + void setDevice(QIODevice *device); + QIODevice *device() const; + void setCodec(QTextCodec *codec /KeepReference/); + void setCodec(const char *codecName); + QTextCodec *codec() const; + void setAutoFormatting(bool); + bool autoFormatting() const; + void setAutoFormattingIndent(int spaces); + int autoFormattingIndent() const; + void writeAttribute(const QString &qualifiedName, const QString &value); + void writeAttribute(const QString &namespaceUri, const QString &name, const QString &value); + void writeAttribute(const QXmlStreamAttribute &attribute); + void writeAttributes(const QXmlStreamAttributes &attributes); + void writeCDATA(const QString &text); + void writeCharacters(const QString &text); + void writeComment(const QString &text); + void writeDTD(const QString &dtd); + void writeEmptyElement(const QString &qualifiedName); + void writeEmptyElement(const QString &namespaceUri, const QString &name); + void writeTextElement(const QString &qualifiedName, const QString &text); + void writeTextElement(const QString &namespaceUri, const QString &name, const QString &text); + void writeEndDocument(); + void writeEndElement(); + void writeEntityReference(const QString &name); + void writeNamespace(const QString &namespaceUri, const QString &prefix = QString()); + void writeDefaultNamespace(const QString &namespaceUri); + void writeProcessingInstruction(const QString &target, const QString &data = QString()); + void writeStartDocument(); + void writeStartDocument(const QString &version); + void writeStartDocument(const QString &version, bool standalone); + void writeStartElement(const QString &qualifiedName); + void writeStartElement(const QString &namespaceUri, const QString &name); + void writeCurrentToken(const QXmlStreamReader &reader); + bool hasError() const; + +private: + QXmlStreamWriter(const QXmlStreamWriter &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/QtDBus.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/QtDBus.toml new file mode 100644 index 0000000..f244752 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/QtDBus.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtDBus. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/QtDBusmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/QtDBusmod.sip new file mode 100644 index 0000000..c9f9ab7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/QtDBusmod.sip @@ -0,0 +1,61 @@ +// QtDBusmod.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtDBus, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qdbusabstractadaptor.sip +%Include qdbusabstractinterface.sip +%Include qdbusargument.sip +%Include qdbusconnection.sip +%Include qdbusconnectioninterface.sip +%Include qdbuserror.sip +%Include qdbusextratypes.sip +%Include qdbusinterface.sip +%Include qdbusmessage.sip +%Include qdbuspendingcall.sip +%Include qdbusservicewatcher.sip +%Include qdbusunixfiledescriptor.sip +%Include qpydbuspendingreply.sip +%Include qpydbusreply.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusabstractadaptor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusabstractadaptor.sip new file mode 100644 index 0000000..3d21074 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusabstractadaptor.sip @@ -0,0 +1,38 @@ +// qdbusabstractadaptor.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusAbstractAdaptor : public QObject +{ +%TypeHeaderCode +#include +%End + +protected: + explicit QDBusAbstractAdaptor(QObject *parent /TransferThis/); + +public: + virtual ~QDBusAbstractAdaptor(); + +protected: + void setAutoRelaySignals(bool enable); + bool autoRelaySignals() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusabstractinterface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusabstractinterface.sip new file mode 100644 index 0000000..d6fa850 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusabstractinterface.sip @@ -0,0 +1,159 @@ +// qdbusabstractinterface.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusAbstractInterface : QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QDBusPendingCallWatcher, &sipType_QDBusPendingCallWatcher, -1, 1}, + {sipName_QDBusAbstractAdaptor, &sipType_QDBusAbstractAdaptor, -1, 2}, + {sipName_QDBusAbstractInterface, &sipType_QDBusAbstractInterface, 4, 3}, + {sipName_QDBusServiceWatcher, &sipType_QDBusServiceWatcher, -1, -1}, + {sipName_QDBusConnectionInterface, &sipType_QDBusConnectionInterface, -1, 5}, + {sipName_QDBusInterface, &sipType_QDBusInterface, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + virtual ~QDBusAbstractInterface(); + bool isValid() const; + QDBusConnection connection() const; + QString service() const; + QString path() const; + QString interface() const; + QDBusError lastError() const; + void setTimeout(int timeout); + int timeout() const; + QDBusMessage call(const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()) /ReleaseGIL/; + QDBusMessage call(QDBus::CallMode mode, const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()) /ReleaseGIL/; + QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList &args) /ReleaseGIL/; + bool callWithCallback(const QString &method, const QList &args, SIP_PYOBJECT returnMethod /TypeHint="PYQT_SLOT"/, SIP_PYOBJECT errorMethod /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray return_slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a2, &receiver, return_slot)) == sipErrorNone) + { + QObject *error_receiver; + QByteArray error_slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a3, &error_receiver, error_slot)) == sipErrorNone) + { + if (receiver == error_receiver) + { + sipRes = sipCpp->callWithCallback(*a0, *a1, receiver, return_slot.constData(), error_slot.constData()); + } + else + { + PyErr_SetString(PyExc_ValueError, + "the return and error methods must be bound to the same QObject instance"); + sipError = sipErrorFail; + } + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(3, a3); + } + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(2, a2); + } +%End + + bool callWithCallback(const QString &method, QList &args, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a2, &receiver, slot)) == sipErrorNone) + { + sipRes = sipCpp->callWithCallback(*a0, *a1, receiver, slot.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(2, a2); + } +%End + + QDBusPendingCall asyncCall(const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()); + QDBusPendingCall asyncCallWithArgumentList(const QString &method, const QList &args); + +protected: + QDBusAbstractInterface(const QString &service, const QString &path, const char *interface, const QDBusConnection &connection, QObject *parent /TransferThis/); + virtual void connectNotify(const QMetaMethod &signal); + virtual void disconnectNotify(const QMetaMethod &signal); +}; + +%ModuleHeaderCode +#include "qpydbus_api.h" + +// Imports from QtCore. +typedef PyObject *(*pyqt5_qtdbus_from_qvariant_by_type_t)(QVariant &, PyObject *); +extern pyqt5_qtdbus_from_qvariant_by_type_t pyqt5_qtdbus_from_qvariant_by_type; + +typedef sipErrorState (*pyqt5_qtdbus_get_pyqtslot_parts_t)(PyObject *, QObject **, QByteArray &); +extern pyqt5_qtdbus_get_pyqtslot_parts_t pyqt5_qtdbus_get_pyqtslot_parts; +%End + +%ModuleCode +// Imports from QtCore. +pyqt5_qtdbus_from_qvariant_by_type_t pyqt5_qtdbus_from_qvariant_by_type; +pyqt5_qtdbus_get_pyqtslot_parts_t pyqt5_qtdbus_get_pyqtslot_parts; +%End + +%PostInitialisationCode +qpydbus_post_init(); + +// Imports from QtCore. +pyqt5_qtdbus_from_qvariant_by_type = (pyqt5_qtdbus_from_qvariant_by_type_t)sipImportSymbol("pyqt5_from_qvariant_by_type"); +Q_ASSERT(pyqt5_qtdbus_from_qvariant_by_type); + +pyqt5_qtdbus_get_pyqtslot_parts = (pyqt5_qtdbus_get_pyqtslot_parts_t)sipImportSymbol("pyqt5_get_pyqtslot_parts"); +Q_ASSERT(pyqt5_qtdbus_get_pyqtslot_parts); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusargument.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusargument.sip new file mode 100644 index 0000000..37752ce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusargument.sip @@ -0,0 +1,187 @@ +// qdbusargument.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusArgument +{ +%TypeHeaderCode +#include +%End + +%TypeCode +#include + + +static PyObject *qdbusargument_add(QDBusArgument *arg, PyObject *obj, int mtype) +{ + int iserr = 0; + + if (PyLong_CheckExact(obj) +#if PY_MAJOR_VERSION < 3 + || PyInt_CheckExact(obj) +#endif + ) + { + if (mtype == QMetaType::UChar || mtype == QMetaType::UShort || mtype == QMetaType::UInt || mtype == QMetaType::ULongLong) + { + // Handle the unsigned values. +#if defined(HAVE_LONG_LONG) + unsigned PY_LONG_LONG v = PyLong_AsUnsignedLongLongMask(obj); +#else + unsigned long v = PyLong_AsUnsignedLongMask(obj); +#endif + + switch (mtype) + { + case QMetaType::UChar: + *arg << (uchar)v; + break; + + case QMetaType::UShort: + *arg << (ushort)v; + break; + + case QMetaType::UInt: + *arg << (uint)v; + break; + + case QMetaType::ULongLong: + *arg << (qulonglong)v; + break; + } + } + else if (mtype == QMetaType::Short || mtype == QMetaType::Int || mtype == QMetaType::LongLong) + { + // Handle the signed values. +#if defined(HAVE_LONG_LONG) + PY_LONG_LONG v = PyLong_AsLongLong(obj); +#else + long v = PyLong_AsLong(obj); +#endif + + switch (mtype) + { + case QMetaType::Short: + *arg << (short)v; + break; + + case QMetaType::Int: + *arg << (int)v; + break; + + case QMetaType::LongLong: + *arg << (qlonglong)v; + break; + } + } + else + { + PyErr_Format(PyExc_ValueError, + "%d is an invalid QMetaType::Type for an integer object", + mtype); + iserr = 1; + } + } + else if (mtype == QMetaType::QStringList) + { + // A QStringList has to be handled explicitly to prevent it being seen + // as a vialiant list. + + int value_state; + + QStringList *qsl = reinterpret_cast( + sipForceConvertToType(obj, sipType_QStringList, 0, + SIP_NOT_NONE, &value_state, &iserr)); + + if (!iserr) + { + arg->beginArray(QMetaType::QString); + + for (int i = 0; i < qsl->count(); ++i) + *arg << qsl->at(i); + + arg->endArray(); + + sipReleaseType(qsl, sipType_QStringList, value_state); + } + } + else + { + int value_state; + + QVariant *qv = reinterpret_cast( + sipForceConvertToType(obj, sipType_QVariant, 0, SIP_NOT_NONE, + &value_state, &iserr)); + + if (!iserr) + { + // This is an internal method. If it proves to be a problem then we + // will have to handle each type explicitly. + arg->appendVariant(*qv); + sipReleaseType(qv, sipType_QVariant, value_state); + } + } + + if (iserr) + return 0; + + Py_INCREF(Py_None); + return Py_None; +} +%End + +public: + QDBusArgument(); + QDBusArgument(const QDBusArgument &other); + QDBusArgument(SIP_PYOBJECT arg, int id = QMetaType::Int); +%MethodCode + sipCpp = new QDBusArgument(); + PyObject *res = qdbusargument_add(sipCpp, a0, a1); + + if (res) + { + Py_DECREF(res); + } + else + { + delete sipCpp; + sipCpp = 0; + } +%End + + ~QDBusArgument(); + SIP_PYOBJECT add(SIP_PYOBJECT arg, int id = QMetaType::Int) /TypeHint=""/; +%MethodCode + sipRes = qdbusargument_add(sipCpp, a0, a1); +%End + + void beginStructure(); + void endStructure(); + void beginArray(int id); + void endArray(); + void beginMap(int kid, int vid); + void endMap(); + void beginMapEntry(); + void endMapEntry(); +%If (Qt_5_6_0 -) + void swap(QDBusArgument &other /Constrained/); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusconnection.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusconnection.sip new file mode 100644 index 0000000..55776fd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusconnection.sip @@ -0,0 +1,262 @@ +// qdbusconnection.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QDBus +{ +%TypeHeaderCode +#include +%End + + enum CallMode + { + NoBlock, + Block, + BlockWithGui, + AutoDetect, + }; +}; + +class QDBusConnection +{ +%TypeHeaderCode +#include +%End + +public: + enum BusType + { + SessionBus, + SystemBus, + ActivationBus, + }; + + enum RegisterOption + { + ExportAdaptors, + ExportScriptableSlots, + ExportScriptableSignals, + ExportScriptableProperties, + ExportScriptableInvokables, + ExportScriptableContents, + ExportNonScriptableSlots, + ExportNonScriptableSignals, + ExportNonScriptableProperties, + ExportNonScriptableInvokables, + ExportNonScriptableContents, + ExportAllSlots, + ExportAllSignals, + ExportAllProperties, + ExportAllInvokables, + ExportAllContents, + ExportAllSignal, + ExportChildObjects, + }; + + enum UnregisterMode + { + UnregisterNode, + UnregisterTree, + }; + + typedef QFlags RegisterOptions; + + enum ConnectionCapability + { + UnixFileDescriptorPassing, + }; + + typedef QFlags ConnectionCapabilities; + explicit QDBusConnection(const QString &name); + QDBusConnection(const QDBusConnection &other); + ~QDBusConnection(); + bool isConnected() const; + QString baseService() const; + QDBusError lastError() const; + QString name() const; + QDBusConnection::ConnectionCapabilities connectionCapabilities() const; + bool send(const QDBusMessage &message) const; + bool callWithCallback(const QDBusMessage &message, SIP_PYOBJECT returnMethod /TypeHint="PYQT_SLOT"/, SIP_PYOBJECT errorMethod /TypeHint="PYQT_SLOT"/, int timeout = -1) const; +%MethodCode + QObject *receiver; + QByteArray return_slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a1, &receiver, return_slot)) == sipErrorNone) + { + QObject *error_receiver; + QByteArray error_slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a2, &error_receiver, error_slot)) == sipErrorNone) + { + if (receiver == error_receiver) + { + sipRes = sipCpp->callWithCallback(*a0, receiver, return_slot.constData(), error_slot.constData(), a3); + } + else + { + PyErr_SetString(PyExc_ValueError, + "the return and error methods must be bound to the same QObject instance"); + sipError = sipErrorFail; + } + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(2, a2); + } + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(1, a1); + } +%End + + QDBusMessage call(const QDBusMessage &message, QDBus::CallMode mode = QDBus::Block, int timeout = -1) const /ReleaseGIL/; + QDBusPendingCall asyncCall(const QDBusMessage &message, int timeout = -1) const; + bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a4, &receiver, slot)) == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, receiver, slot.constData()); + Py_END_ALLOW_THREADS + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(4, a4); + } +%End + + bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a5, &receiver, slot)) == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, *a4, receiver, slot.constData()); + Py_END_ALLOW_THREADS + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(5, a5); + } +%End + + bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a6, &receiver, slot)) == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, *a4, *a5, receiver, slot.constData()); + Py_END_ALLOW_THREADS + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(6, a6); + } +%End + + bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a4, &receiver, slot)) == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, receiver, slot.constData()); + Py_END_ALLOW_THREADS + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(4, a4); + } +%End + + bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a5, &receiver, slot)) == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, *a4, receiver, slot.constData()); + Py_END_ALLOW_THREADS + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(5, a5); + } +%End + + bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /ReleaseGIL/; +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a6, &receiver, slot)) == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, *a4, *a5, receiver, slot.constData()); + Py_END_ALLOW_THREADS + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(6, a6); + } +%End + + bool registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options = QDBusConnection::ExportAdaptors); +%If (Qt_5_5_0 -) + bool registerObject(const QString &path, const QString &interface, QObject *object, QDBusConnection::RegisterOptions options = QDBusConnection::ExportAdaptors); +%End + void unregisterObject(const QString &path, QDBusConnection::UnregisterMode mode = QDBusConnection::UnregisterNode); + QObject *objectRegisteredAt(const QString &path) const; + bool registerService(const QString &serviceName); + bool unregisterService(const QString &serviceName); + QDBusConnectionInterface *interface() const; + static QDBusConnection connectToBus(QDBusConnection::BusType type, const QString &name) /ReleaseGIL/; + static QDBusConnection connectToBus(const QString &address, const QString &name) /ReleaseGIL/; + static QDBusConnection connectToPeer(const QString &address, const QString &name) /ReleaseGIL/; + static void disconnectFromBus(const QString &name) /ReleaseGIL/; + static void disconnectFromPeer(const QString &name) /ReleaseGIL/; + static QByteArray localMachineId(); + static QDBusConnection sessionBus(); + static QDBusConnection systemBus(); + static QDBusConnection sender(); +%If (Qt_5_6_0 -) + void swap(QDBusConnection &other /Constrained/); +%End +}; + +QFlags operator|(QDBusConnection::RegisterOption f1, QFlags f2); +QFlags operator|(QDBusConnection::RegisterOption f1, QDBusConnection::RegisterOption f2); +%If (Qt_5_6_0 -) +QFlags operator|(QDBusConnection::ConnectionCapability f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusconnectioninterface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusconnectioninterface.sip new file mode 100644 index 0000000..5a4c978 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusconnectioninterface.sip @@ -0,0 +1,74 @@ +// qdbusconnectioninterface.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusConnectionInterface : public QDBusAbstractInterface +{ +%TypeHeaderCode +#include +%End + + QDBusConnectionInterface(const QDBusConnection &connection, QObject *parent /TransferThis/); + virtual ~QDBusConnectionInterface(); + +public: + enum ServiceQueueOptions + { + DontQueueService, + QueueService, + ReplaceExistingService, + }; + + enum ServiceReplacementOptions + { + DontAllowReplacement, + AllowReplacement, + }; + + enum RegisterServiceReply + { + ServiceNotRegistered, + ServiceRegistered, + ServiceQueued, + }; + + QDBusReply registeredServiceNames() const /ReleaseGIL/; +%If (Qt_5_14_0 -) + QDBusReply activatableServiceNames() const /ReleaseGIL/; +%End + QDBusReply isServiceRegistered(const QString &serviceName) const /ReleaseGIL/; + QDBusReply serviceOwner(const QString &name) const /ReleaseGIL/; + QDBusReply unregisterService(const QString &serviceName) /ReleaseGIL/; + QDBusReply registerService(const QString &serviceName, QDBusConnectionInterface::ServiceQueueOptions qoption = QDBusConnectionInterface::DontQueueService, QDBusConnectionInterface::ServiceReplacementOptions roption = QDBusConnectionInterface::DontAllowReplacement) /ReleaseGIL/; + QDBusReply servicePid(const QString &serviceName) const /ReleaseGIL/; + QDBusReply serviceUid(const QString &serviceName) const /ReleaseGIL/; + QDBusReply startService(const QString &name) /ReleaseGIL/; + +signals: + void serviceRegistered(const QString &service); + void serviceUnregistered(const QString &service); + void serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner); + void callWithCallbackFailed(const QDBusError &error, const QDBusMessage &call); + +protected: + virtual void connectNotify(const QMetaMethod &); + virtual void disconnectNotify(const QMetaMethod &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbuserror.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbuserror.sip new file mode 100644 index 0000000..345b070 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbuserror.sip @@ -0,0 +1,71 @@ +// qdbuserror.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusError +{ +%TypeHeaderCode +#include +%End + +public: + enum ErrorType + { + NoError, + Other, + Failed, + NoMemory, + ServiceUnknown, + NoReply, + BadAddress, + NotSupported, + LimitsExceeded, + AccessDenied, + NoServer, + Timeout, + NoNetwork, + AddressInUse, + Disconnected, + InvalidArgs, + UnknownMethod, + TimedOut, + InvalidSignature, + UnknownInterface, + InternalError, + UnknownObject, + InvalidService, + InvalidObjectPath, + InvalidInterface, + InvalidMember, + UnknownProperty, + PropertyReadOnly, + }; + + QDBusError(const QDBusError &other); + QDBusError::ErrorType type() const; + QString name() const; + QString message() const; + bool isValid() const; + static QString errorString(QDBusError::ErrorType error); +%If (Qt_5_6_0 -) + void swap(QDBusError &other /Constrained/); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusextratypes.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusextratypes.sip new file mode 100644 index 0000000..5cc4a5c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusextratypes.sip @@ -0,0 +1,89 @@ +// qdbusextratypes.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusObjectPath +{ +%TypeHeaderCode +#include +%End + +public: + QDBusObjectPath(); + explicit QDBusObjectPath(const QString &objectPath); + QString path() const; + void setPath(const QString &objectPath); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp, 0); +%End + +%If (Qt_5_6_0 -) + void swap(QDBusObjectPath &other /Constrained/); +%End +}; + +bool operator==(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs); +bool operator!=(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs); +bool operator<(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs); + +class QDBusSignature +{ +%TypeHeaderCode +#include +%End + +public: + QDBusSignature(); + explicit QDBusSignature(const QString &dBusSignature); + QString signature() const; + void setSignature(const QString &dBusSignature); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp, 0); +%End + +%If (Qt_5_6_0 -) + void swap(QDBusSignature &other /Constrained/); +%End +}; + +bool operator==(const QDBusSignature &lhs, const QDBusSignature &rhs); +bool operator!=(const QDBusSignature &lhs, const QDBusSignature &rhs); +bool operator<(const QDBusSignature &lhs, const QDBusSignature &rhs); + +class QDBusVariant +{ +%TypeHeaderCode +#include +%End + +public: + QDBusVariant(); + explicit QDBusVariant(const QVariant &dBusVariant); + QVariant variant() const; + void setVariant(const QVariant &dBusVariant); +%If (Qt_5_6_0 -) + void swap(QDBusVariant &other /Constrained/); +%End +}; + +bool operator==(const QDBusVariant &v1, const QDBusVariant &v2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusinterface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusinterface.sip new file mode 100644 index 0000000..5594fbf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusinterface.sip @@ -0,0 +1,32 @@ +// qdbusinterface.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusInterface : public QDBusAbstractInterface +{ +%TypeHeaderCode +#include +%End + +public: + QDBusInterface(const QString &service, const QString &path, const QString &interface = QString(), const QDBusConnection &connection = QDBusConnection::sessionBus(), QObject *parent /TransferThis/ = 0); + virtual ~QDBusInterface(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusmessage.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusmessage.sip new file mode 100644 index 0000000..79fe67d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusmessage.sip @@ -0,0 +1,80 @@ +// qdbusmessage.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusMessage +{ +%TypeHeaderCode +#include +%End + +public: + enum MessageType + { + InvalidMessage, + MethodCallMessage, + ReplyMessage, + ErrorMessage, + SignalMessage, + }; + + QDBusMessage(); + QDBusMessage(const QDBusMessage &other); + ~QDBusMessage(); + static QDBusMessage createSignal(const QString &path, const QString &interface, const QString &name); + static QDBusMessage createMethodCall(const QString &service, const QString &path, const QString &interface, const QString &method); + static QDBusMessage createError(const QString &name, const QString &msg); + static QDBusMessage createError(const QDBusError &error); + static QDBusMessage createError(QDBusError::ErrorType type, const QString &msg); + QDBusMessage createReply(const QList &arguments = QList()) const; + QDBusMessage createReply(const QVariant &argument) const; + QDBusMessage createErrorReply(const QString name, const QString &msg) const; + QDBusMessage createErrorReply(const QDBusError &error) const; + QDBusMessage createErrorReply(QDBusError::ErrorType type, const QString &msg) const; + QString service() const; + QString path() const; + QString interface() const; + QString member() const; + QString errorName() const; + QString errorMessage() const; + QDBusMessage::MessageType type() const; + QString signature() const; + bool isReplyRequired() const; + void setDelayedReply(bool enable) const; + bool isDelayedReply() const; + void setAutoStartService(bool enable); + bool autoStartService() const; + void setArguments(const QList &arguments); + QList arguments() const; + QDBusMessage &operator<<(const QVariant &arg); +%If (Qt_5_6_0 -) + void swap(QDBusMessage &other /Constrained/); +%End +%If (Qt_5_6_0 -) + static QDBusMessage createTargetedSignal(const QString &service, const QString &path, const QString &interface, const QString &name); +%End +%If (Qt_5_12_0 -) + void setInteractiveAuthorizationAllowed(bool enable); +%End +%If (Qt_5_12_0 -) + bool isInteractiveAuthorizationAllowed() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbuspendingcall.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbuspendingcall.sip new file mode 100644 index 0000000..e573790 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbuspendingcall.sip @@ -0,0 +1,59 @@ +// qdbuspendingcall.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusPendingCall +{ +%TypeHeaderCode +#include +%End + +public: + QDBusPendingCall(const QDBusPendingCall &other); + ~QDBusPendingCall(); + static QDBusPendingCall fromError(const QDBusError &error); + static QDBusPendingCall fromCompletedCall(const QDBusMessage &message); + void swap(QDBusPendingCall &other /Constrained/); + +private: + QDBusPendingCall(); +}; + +class QDBusPendingCallWatcher : public QObject, public QDBusPendingCall +{ +%TypeHeaderCode +#include +%End + +public: + QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent /TransferThis/ = 0); + virtual ~QDBusPendingCallWatcher(); + bool isFinished() const; + void waitForFinished() /ReleaseGIL/; + +signals: +%If (- Qt_5_6_0) + void finished(QDBusPendingCallWatcher *watcher); +%End +%If (Qt_5_6_0 -) + void finished(QDBusPendingCallWatcher *watcher = 0); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusservicewatcher.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusservicewatcher.sip new file mode 100644 index 0000000..577e4c6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusservicewatcher.sip @@ -0,0 +1,57 @@ +// qdbusservicewatcher.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusServiceWatcher : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum WatchModeFlag + { + WatchForRegistration, + WatchForUnregistration, + WatchForOwnerChange, + }; + + typedef QFlags WatchMode; + explicit QDBusServiceWatcher(QObject *parent /TransferThis/ = 0); + QDBusServiceWatcher(const QString &service, const QDBusConnection &connection, QDBusServiceWatcher::WatchMode watchMode = QDBusServiceWatcher::WatchForOwnerChange, QObject *parent /TransferThis/ = 0); + virtual ~QDBusServiceWatcher(); + QStringList watchedServices() const; + void setWatchedServices(const QStringList &services); + void addWatchedService(const QString &newService); + bool removeWatchedService(const QString &service); + QDBusServiceWatcher::WatchMode watchMode() const; + void setWatchMode(QDBusServiceWatcher::WatchMode mode); + QDBusConnection connection() const; + void setConnection(const QDBusConnection &connection); + +signals: + void serviceRegistered(const QString &service); + void serviceUnregistered(const QString &service); + void serviceOwnerChanged(const QString &service, const QString &oldOwner, const QString &newOwner); +}; + +QFlags operator|(QDBusServiceWatcher::WatchModeFlag f1, QFlags f2); +QFlags operator|(QDBusServiceWatcher::WatchModeFlag f1, QDBusServiceWatcher::WatchModeFlag f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusunixfiledescriptor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusunixfiledescriptor.sip new file mode 100644 index 0000000..2127a79 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qdbusunixfiledescriptor.sip @@ -0,0 +1,39 @@ +// qdbusunixfiledescriptor.sip generated by MetaSIP +// +// This file is part of the QtDBus Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDBusUnixFileDescriptor +{ +%TypeHeaderCode +#include +%End + +public: + QDBusUnixFileDescriptor(); + explicit QDBusUnixFileDescriptor(int fileDescriptor); + QDBusUnixFileDescriptor(const QDBusUnixFileDescriptor &other); + ~QDBusUnixFileDescriptor(); + bool isValid() const; + int fileDescriptor() const; + void setFileDescriptor(int fileDescriptor); + static bool isSupported(); + void swap(QDBusUnixFileDescriptor &other /Constrained/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qpydbuspendingreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qpydbuspendingreply.sip new file mode 100644 index 0000000..7765bcd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qpydbuspendingreply.sip @@ -0,0 +1,44 @@ +// This is the SIP specification of the QPyDBusPendingReply class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPyDBusPendingReply : QDBusPendingCall /PyName=QDBusPendingReply/ +{ +%TypeHeaderCode +#include +%End + +public: + QPyDBusPendingReply(); + QPyDBusPendingReply(const QPyDBusPendingReply &other); + QPyDBusPendingReply(const QDBusPendingCall &call); + QPyDBusPendingReply(const QDBusMessage &reply); + + // The /ReleaseGIL/ annotation is needed because QDBusPendingCall has an + // internal mutex. + QVariant argumentAt(int index) const /ReleaseGIL/; + QDBusError error() const /ReleaseGIL/; + bool isError() const /ReleaseGIL/; + bool isFinished() const /ReleaseGIL/; + bool isValid() const /ReleaseGIL/; + QDBusMessage reply() const /ReleaseGIL/; + void waitForFinished() /ReleaseGIL/; + + SIP_PYOBJECT value(SIP_PYOBJECT type /TypeHintValue="None"/ = 0) const /HoldGIL/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qpydbusreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qpydbusreply.sip new file mode 100644 index 0000000..94b3e0f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDBus/qpydbusreply.sip @@ -0,0 +1,238 @@ +// This is the SIP specification of the QPyDBusReply class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPyDBusReply /PyName=QDBusReply/ +{ +%TypeHeaderCode +#include +%End + +public: + QPyDBusReply(const QDBusMessage &reply) /HoldGIL/; + QPyDBusReply(const QDBusPendingCall &call) /HoldGIL/; + QPyDBusReply(const QDBusError &error); + QPyDBusReply(const QPyDBusReply &other) /HoldGIL/; + ~QPyDBusReply() /HoldGIL/; + + const QDBusError &error() const /HoldGIL/; + bool isValid() const /HoldGIL/; + SIP_PYOBJECT value(SIP_PYOBJECT type /TypeHintValue="None"/ = 0) const /HoldGIL/; +}; + + +template +%MappedType QDBusReply /TypeHint="QDBusReply"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + PyObject *value_obj; + + if (sipCpp->isValid()) + { + // Convert the value to a Python object. + TYPE *value = new TYPE(sipCpp->value()); + + if ((value_obj = sipConvertFromNewType(value, sipType_TYPE, NULL)) == NULL) + { + delete value; + return NULL; + } + } + else + { + value_obj = 0; + } + + QPyDBusReply *reply = new QPyDBusReply(value_obj, + sipCpp->isValid(), sipCpp->error()); + + PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); + + if (reply_obj == NULL) + { + delete reply; + return NULL; + } + + return reply_obj; +%End + +%ConvertToTypeCode + // We never create a QDBusReply from Python. + return 0; +%End +}; + + +%MappedType QDBusReply /TypeHint="QDBusReply"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + Py_INCREF(Py_None); + QPyDBusReply *reply = new QPyDBusReply(Py_None, + sipCpp->isValid(), sipCpp->error()); + + PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); + + if (reply_obj == NULL) + { + delete reply; + return NULL; + } + + return reply_obj; +%End + +%ConvertToTypeCode + // We never create a QDBusReply from Python. + return 0; +%End +}; + + +%MappedType QDBusReply /TypeHint="QDBusReply"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + PyObject *value_obj; + + if (sipCpp->isValid()) + { + if ((value_obj = PyBool_FromLong(sipCpp->value())) == NULL) + return NULL; + } + else + { + value_obj = 0; + } + + QPyDBusReply *reply = new QPyDBusReply(value_obj, + sipCpp->isValid(), sipCpp->error()); + + PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); + + if (reply_obj == NULL) + { + delete reply; + return NULL; + } + + return reply_obj; +%End + +%ConvertToTypeCode + // We never create a QDBusReply from Python. + return 0; +%End +}; + + +%MappedType QDBusReply /TypeHint="QDBusReply"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + PyObject *value_obj; + + if (sipCpp->isValid()) + { + if ((value_obj = PyLong_FromUnsignedLong(sipCpp->value())) == NULL) + return NULL; + } + else + { + value_obj = 0; + } + + QPyDBusReply *reply = new QPyDBusReply(value_obj, + sipCpp->isValid(), sipCpp->error()); + + PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); + + if (reply_obj == NULL) + { + delete reply; + return NULL; + } + + return reply_obj; +%End + +%ConvertToTypeCode + // We never create a QDBusReply from Python. + return 0; +%End +}; + + +%MappedType QDBusReply /TypeHint="QDBusReply"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + PyObject *value_obj; + + if (sipCpp->isValid()) + { + if ((value_obj = sipConvertFromEnum(sipCpp->value(), sipType_QDBusConnectionInterface_RegisterServiceReply)) == NULL) + return NULL; + } + else + { + value_obj = 0; + } + + QPyDBusReply *reply = new QPyDBusReply(value_obj, + sipCpp->isValid(), sipCpp->error()); + + PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj); + + if (reply_obj == NULL) + { + delete reply; + return NULL; + } + + return reply_obj; +%End + +%ConvertToTypeCode + // We never create a QDBusReply from Python. + return 0; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/QtDesigner.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/QtDesigner.toml new file mode 100644 index 0000000..d3efaa4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/QtDesigner.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtDesigner. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/QtDesignermod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/QtDesignermod.sip new file mode 100644 index 0000000..25e2c9f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/QtDesignermod.sip @@ -0,0 +1,72 @@ +// QtDesignermod.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtDesigner, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include abstractactioneditor.sip +%Include abstractformbuilder.sip +%Include abstractformeditor.sip +%Include abstractformwindow.sip +%Include abstractformwindowcursor.sip +%Include abstractformwindowmanager.sip +%Include abstractobjectinspector.sip +%Include abstractpropertyeditor.sip +%Include abstractwidgetbox.sip +%Include container.sip +%Include customwidget.sip +%Include default_extensionfactory.sip +%Include extension.sip +%Include formbuilder.sip +%Include membersheet.sip +%Include propertysheet.sip +%Include qextensionmanager.sip +%Include taskmenu.sip +%Include qpydesignercustomwidgetcollectionplugin.sip +%Include qpydesignermembersheetextension.sip +%Include qpydesignertaskmenuextension.sip +%Include qpydesignercontainerextension.sip +%Include qpydesignercustomwidgetplugin.sip +%Include qpydesignerpropertysheetextension.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractactioneditor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractactioneditor.sip new file mode 100644 index 0000000..4f0000a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractactioneditor.sip @@ -0,0 +1,38 @@ +// abstractactioneditor.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerActionEditorInterface : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDesignerActionEditorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = 0); + virtual ~QDesignerActionEditorInterface(); + virtual QDesignerFormEditorInterface *core() const; + virtual void manageAction(QAction *action) = 0; + virtual void unmanageAction(QAction *action) = 0; + +public slots: + virtual void setFormWindow(QDesignerFormWindowInterface *formWindow /KeepReference/) = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformbuilder.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformbuilder.sip new file mode 100644 index 0000000..cb30ae2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformbuilder.sip @@ -0,0 +1,40 @@ +// abstractformbuilder.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractFormBuilder +{ +%TypeHeaderCode +#include +%End + +public: + QAbstractFormBuilder(); + virtual ~QAbstractFormBuilder(); + virtual QWidget *load(QIODevice *device, QWidget *parent /TransferThis/ = 0) /Factory/; + virtual void save(QIODevice *dev, QWidget *widget); + void setWorkingDirectory(const QDir &directory); + QDir workingDirectory() const; + QString errorString() const; + +private: + QAbstractFormBuilder(const QAbstractFormBuilder &other); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformeditor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformeditor.sip new file mode 100644 index 0000000..ec98f88 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformeditor.sip @@ -0,0 +1,51 @@ +// abstractformeditor.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerFormEditorInterface : public QObject +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_1 -) + explicit QDesignerFormEditorInterface(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QDesignerFormEditorInterface(QObject *parent /TransferThis/ = 0); +%End + virtual ~QDesignerFormEditorInterface(); + QExtensionManager *extensionManager() const; + QWidget *topLevel() const; + QDesignerWidgetBoxInterface *widgetBox() const; + QDesignerPropertyEditorInterface *propertyEditor() const; + QDesignerObjectInspectorInterface *objectInspector() const; + QDesignerFormWindowManagerInterface *formWindowManager() const; + QDesignerActionEditorInterface *actionEditor() const; + void setWidgetBox(QDesignerWidgetBoxInterface *widgetBox /KeepReference/); + void setPropertyEditor(QDesignerPropertyEditorInterface *propertyEditor /KeepReference/); + void setObjectInspector(QDesignerObjectInspectorInterface *objectInspector /KeepReference/); + void setActionEditor(QDesignerActionEditorInterface *actionEditor /KeepReference/); + +private: + QDesignerFormEditorInterface(const QDesignerFormEditorInterface &other); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindow.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindow.sip new file mode 100644 index 0000000..cc2970c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindow.sip @@ -0,0 +1,106 @@ +// abstractformwindow.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerFormWindowInterface : public QWidget /Abstract/ +{ +%TypeHeaderCode +#include +%End + +public: + enum FeatureFlag + { + EditFeature, + GridFeature, + TabOrderFeature, + DefaultFeature, + }; + + typedef QFlags Feature; + QDesignerFormWindowInterface(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0); + virtual ~QDesignerFormWindowInterface(); + virtual QString fileName() const = 0; + virtual QDir absoluteDir() const = 0; + virtual QString contents() const = 0; + virtual bool setContents(QIODevice *dev, QString *errorMessage = 0) = 0; + virtual QDesignerFormWindowInterface::Feature features() const = 0; + virtual bool hasFeature(QDesignerFormWindowInterface::Feature f) const = 0; + virtual QString author() const = 0; + virtual void setAuthor(const QString &author) = 0; + virtual QString comment() const = 0; + virtual void setComment(const QString &comment) = 0; + virtual void layoutDefault(int *margin, int *spacing) = 0; + virtual void setLayoutDefault(int margin, int spacing) = 0; + virtual void layoutFunction(QString *margin /Out/, QString *spacing /Out/) = 0; + virtual void setLayoutFunction(const QString &margin, const QString &spacing) = 0; + virtual QString pixmapFunction() const = 0; + virtual void setPixmapFunction(const QString &pixmapFunction) = 0; + virtual QString exportMacro() const = 0; + virtual void setExportMacro(const QString &exportMacro) = 0; + virtual QStringList includeHints() const = 0; + virtual void setIncludeHints(const QStringList &includeHints) = 0; + virtual QDesignerFormEditorInterface *core() const; + virtual QDesignerFormWindowCursorInterface *cursor() const = 0; + virtual QPoint grid() const = 0; + virtual QWidget *mainContainer() const = 0; + virtual void setMainContainer(QWidget *mainContainer /KeepReference/) = 0; + virtual bool isManaged(QWidget *widget) const = 0; + virtual bool isDirty() const = 0; + static QDesignerFormWindowInterface *findFormWindow(QWidget *w); + static QDesignerFormWindowInterface *findFormWindow(QObject *obj); + virtual void emitSelectionChanged() = 0; + virtual QStringList resourceFiles() const = 0; + virtual void addResourceFile(const QString &path) = 0; + virtual void removeResourceFile(const QString &path) = 0; + +public slots: + virtual void manageWidget(QWidget *widget) = 0; + virtual void unmanageWidget(QWidget *widget) = 0; + virtual void setFeatures(QDesignerFormWindowInterface::Feature f) = 0; + virtual void setDirty(bool dirty) = 0; + virtual void clearSelection(bool update = true) = 0; + virtual void selectWidget(QWidget *widget, bool select = true) = 0; + virtual void setGrid(const QPoint &grid) = 0; + virtual void setFileName(const QString &fileName) = 0; + virtual bool setContents(const QString &contents) = 0; + +signals: + void mainContainerChanged(QWidget *mainContainer); + void fileNameChanged(const QString &fileName); + void featureChanged(QDesignerFormWindowInterface::Feature f /ScopesStripped=1/); + void selectionChanged(); + void geometryChanged(); + void resourceFilesChanged(); + void widgetManaged(QWidget *widget); + void widgetUnmanaged(QWidget *widget); + void aboutToUnmanageWidget(QWidget *widget); + void activated(QWidget *widget); + void changed(); + void widgetRemoved(QWidget *w); + void objectRemoved(QObject *o); + +public: + virtual QStringList checkContents() const = 0; + QStringList activeResourceFilePaths() const; + virtual QWidget *formContainer() const = 0; + void activateResourceFilePaths(const QStringList &paths, int *errorCount = 0, QString *errorMessages /Out/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindowcursor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindowcursor.sip new file mode 100644 index 0000000..e034e0c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindowcursor.sip @@ -0,0 +1,64 @@ +// abstractformwindowcursor.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerFormWindowCursorInterface +{ +%TypeHeaderCode +#include +%End + +public: + enum MoveOperation + { + NoMove, + Start, + End, + Next, + Prev, + Left, + Right, + Up, + Down, + }; + + enum MoveMode + { + MoveAnchor, + KeepAnchor, + }; + + virtual ~QDesignerFormWindowCursorInterface(); + virtual QDesignerFormWindowInterface *formWindow() const = 0; + virtual bool movePosition(QDesignerFormWindowCursorInterface::MoveOperation op, QDesignerFormWindowCursorInterface::MoveMode mode = QDesignerFormWindowCursorInterface::MoveAnchor) = 0; + virtual int position() const = 0; + virtual void setPosition(int pos, QDesignerFormWindowCursorInterface::MoveMode mode = QDesignerFormWindowCursorInterface::MoveAnchor) = 0; + virtual QWidget *current() const = 0; + virtual int widgetCount() const = 0; + virtual QWidget *widget(int index) const = 0; + virtual bool hasSelection() const = 0; + virtual int selectedWidgetCount() const = 0; + virtual QWidget *selectedWidget(int index) const = 0; + virtual void setProperty(const QString &name, const QVariant &value) = 0; + virtual void setWidgetProperty(QWidget *widget, const QString &name, const QVariant &value) = 0; + virtual void resetWidgetProperty(QWidget *widget, const QString &name) = 0; + bool isWidgetSelected(QWidget *widget) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindowmanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindowmanager.sip new file mode 100644 index 0000000..f446bce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractformwindowmanager.sip @@ -0,0 +1,88 @@ +// abstractformwindowmanager.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerFormWindowManagerInterface : public QObject /Abstract/ +{ +%TypeHeaderCode +#include +%End + +public: + explicit QDesignerFormWindowManagerInterface(QObject *parent /TransferThis/ = 0); + virtual ~QDesignerFormWindowManagerInterface(); + QAction *actionFormLayout() const /Transfer/; + QAction *actionSimplifyLayout() const /Transfer/; + virtual QDesignerFormWindowInterface *activeFormWindow() const = 0; + virtual int formWindowCount() const = 0; + virtual QDesignerFormWindowInterface *formWindow(int index) const = 0 /Transfer/; + virtual QDesignerFormWindowInterface *createFormWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0) = 0; + virtual QDesignerFormEditorInterface *core() const = 0; + +signals: + void formWindowAdded(QDesignerFormWindowInterface *formWindow); + void formWindowRemoved(QDesignerFormWindowInterface *formWindow); + void activeFormWindowChanged(QDesignerFormWindowInterface *formWindow); + void formWindowSettingsChanged(QDesignerFormWindowInterface *fw); + +public slots: + virtual void addFormWindow(QDesignerFormWindowInterface *formWindow) = 0; + virtual void removeFormWindow(QDesignerFormWindowInterface *formWindow) = 0; + virtual void setActiveFormWindow(QDesignerFormWindowInterface *formWindow) = 0; + +public: + enum Action + { + CutAction, + CopyAction, + PasteAction, + DeleteAction, + SelectAllAction, + LowerAction, + RaiseAction, + UndoAction, + RedoAction, + HorizontalLayoutAction, + VerticalLayoutAction, + SplitHorizontalAction, + SplitVerticalAction, + GridLayoutAction, + FormLayoutAction, + BreakLayoutAction, + AdjustSizeAction, + SimplifyLayoutAction, + DefaultPreviewAction, + FormWindowSettingsDialogAction, + }; + + enum ActionGroup + { + StyledPreviewActionGroup, + }; + + virtual QAction *action(QDesignerFormWindowManagerInterface::Action action) const = 0 /Transfer/; + virtual QActionGroup *actionGroup(QDesignerFormWindowManagerInterface::ActionGroup actionGroup) const = 0 /Transfer/; + +public slots: + virtual void showPreview() = 0; + virtual void closeAllPreviews() = 0; + virtual void showPluginDialog() = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractobjectinspector.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractobjectinspector.sip new file mode 100644 index 0000000..d89c45d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractobjectinspector.sip @@ -0,0 +1,36 @@ +// abstractobjectinspector.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerObjectInspectorInterface : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDesignerObjectInspectorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = 0); + virtual ~QDesignerObjectInspectorInterface(); + virtual QDesignerFormEditorInterface *core() const; + +public slots: + virtual void setFormWindow(QDesignerFormWindowInterface *formWindow /KeepReference/) = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractpropertyeditor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractpropertyeditor.sip new file mode 100644 index 0000000..d1e3d76 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractpropertyeditor.sip @@ -0,0 +1,44 @@ +// abstractpropertyeditor.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerPropertyEditorInterface : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDesignerPropertyEditorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = 0); + virtual ~QDesignerPropertyEditorInterface(); + virtual QDesignerFormEditorInterface *core() const; + virtual bool isReadOnly() const = 0; + virtual QObject *object() const = 0; + virtual QString currentPropertyName() const = 0; + +signals: + void propertyChanged(const QString &name, const QVariant &value); + +public slots: + virtual void setObject(QObject *object /KeepReference/) = 0; + virtual void setPropertyValue(const QString &name, const QVariant &value, bool changed = true) = 0; + virtual void setReadOnly(bool readOnly) = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractwidgetbox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractwidgetbox.sip new file mode 100644 index 0000000..94241ca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/abstractwidgetbox.sip @@ -0,0 +1,36 @@ +// abstractwidgetbox.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerWidgetBoxInterface : public QWidget /Abstract/ +{ +%TypeHeaderCode +#include +%End + +public: + QDesignerWidgetBoxInterface(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0); + virtual ~QDesignerWidgetBoxInterface(); + virtual void setFileName(const QString &file_name) = 0; + virtual QString fileName() const = 0; + virtual bool load() = 0; + virtual bool save() = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/container.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/container.sip new file mode 100644 index 0000000..eeeb002 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/container.sip @@ -0,0 +1,40 @@ +// container.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerContainerExtension +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QDesignerContainerExtension(); + virtual int count() const = 0 /__len__/; + virtual QWidget *widget(int index) const = 0; + virtual int currentIndex() const = 0; + virtual void setCurrentIndex(int index) = 0; + virtual void addWidget(QWidget *widget) = 0; + virtual void insertWidget(int index, QWidget *widget) = 0; + virtual void remove(int index) = 0; + virtual bool canAddWidget() const; + virtual bool canRemove(int index) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/customwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/customwidget.sip new file mode 100644 index 0000000..ed1ab90 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/customwidget.sip @@ -0,0 +1,54 @@ +// customwidget.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerCustomWidgetInterface +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QDesignerCustomWidgetInterface(); + virtual QString name() const = 0; + virtual QString group() const = 0; + virtual QString toolTip() const = 0; + virtual QString whatsThis() const = 0; + virtual QString includeFile() const = 0; + virtual QIcon icon() const = 0; + virtual bool isContainer() const = 0; + virtual QWidget *createWidget(QWidget *parent /TransferThis/) = 0 /Factory/; + virtual bool isInitialized() const; + virtual void initialize(QDesignerFormEditorInterface *core); + virtual QString domXml() const; + virtual QString codeTemplate() const; +}; + +class QDesignerCustomWidgetCollectionInterface +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QDesignerCustomWidgetCollectionInterface(); + virtual QList customWidgets() const = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/default_extensionfactory.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/default_extensionfactory.sip new file mode 100644 index 0000000..39f3ac9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/default_extensionfactory.sip @@ -0,0 +1,41 @@ +// default_extensionfactory.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QExtensionFactory : public QObject, public QAbstractExtensionFactory +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_11_0 -) + explicit QExtensionFactory(QExtensionManager *parent /TransferThis/ = 0); +%End +%If (- Qt_5_11_0) + QExtensionFactory(QExtensionManager *parent /TransferThis/ = 0); +%End + virtual QObject *extension(QObject *object, const QString &iid) const; + QExtensionManager *extensionManager() const; + +protected: + virtual QObject *createExtension(QObject *object, const QString &iid, QObject *parent /TransferThis/) const /Factory/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/extension.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/extension.sip new file mode 100644 index 0000000..404ba63 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/extension.sip @@ -0,0 +1,45 @@ +// extension.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractExtensionFactory +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAbstractExtensionFactory(); + virtual QObject *extension(QObject *object, const QString &iid) const = 0; +}; + +class QAbstractExtensionManager +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAbstractExtensionManager(); + virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid) = 0; + virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid) = 0; + virtual QObject *extension(QObject *object, const QString &iid) const = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/formbuilder.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/formbuilder.sip new file mode 100644 index 0000000..c8b22ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/formbuilder.sip @@ -0,0 +1,37 @@ +// formbuilder.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFormBuilder : public QAbstractFormBuilder +{ +%TypeHeaderCode +#include +%End + +public: + QFormBuilder(); + virtual ~QFormBuilder(); + QStringList pluginPaths() const; + void clearPluginPaths(); + void addPluginPath(const QString &pluginPath); + void setPluginPath(const QStringList &pluginPaths); + QList customWidgets() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/membersheet.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/membersheet.sip new file mode 100644 index 0000000..1e055c5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/membersheet.sip @@ -0,0 +1,45 @@ +// membersheet.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerMemberSheetExtension +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QDesignerMemberSheetExtension(); + virtual int count() const = 0 /__len__/; + virtual int indexOf(const QString &name) const = 0; + virtual QString memberName(int index) const = 0; + virtual QString memberGroup(int index) const = 0; + virtual void setMemberGroup(int index, const QString &group) = 0; + virtual bool isVisible(int index) const = 0; + virtual void setVisible(int index, bool b) = 0; + virtual bool isSignal(int index) const = 0; + virtual bool isSlot(int index) const = 0; + virtual bool inheritedFromWidget(int index) const = 0; + virtual QString declaredInClass(int index) const = 0; + virtual QString signature(int index) const = 0; + virtual QList parameterTypes(int index) const = 0; + virtual QList parameterNames(int index) const = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/propertysheet.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/propertysheet.sip new file mode 100644 index 0000000..e739873 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/propertysheet.sip @@ -0,0 +1,47 @@ +// propertysheet.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerPropertySheetExtension +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QDesignerPropertySheetExtension(); + virtual int count() const = 0 /__len__/; + virtual int indexOf(const QString &name) const = 0; + virtual QString propertyName(int index) const = 0; + virtual QString propertyGroup(int index) const = 0; + virtual void setPropertyGroup(int index, const QString &group) = 0; + virtual bool hasReset(int index) const = 0; + virtual bool reset(int index) = 0; + virtual bool isVisible(int index) const = 0; + virtual void setVisible(int index, bool b) = 0; + virtual bool isAttribute(int index) const = 0; + virtual void setAttribute(int index, bool b) = 0; + virtual QVariant property(int index) const = 0; + virtual void setProperty(int index, const QVariant &value) = 0; + virtual bool isChanged(int index) const = 0; + virtual void setChanged(int index, bool changed) = 0; + virtual bool isEnabled(int index) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qextensionmanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qextensionmanager.sip new file mode 100644 index 0000000..96a4678 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qextensionmanager.sip @@ -0,0 +1,82 @@ +// qextensionmanager.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QExtensionManager : public QObject, public QAbstractExtensionManager +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QPyDesignerCustomWidgetPlugin, &sipType_QPyDesignerCustomWidgetPlugin, -1, 1}, + {sipName_QExtensionFactory, &sipType_QExtensionFactory, -1, 2}, + {sipName_QPyDesignerMemberSheetExtension, &sipType_QPyDesignerMemberSheetExtension, -1, 3}, + {sipName_QDesignerFormEditorInterface, &sipType_QDesignerFormEditorInterface, -1, 4}, + {sipName_QDesignerWidgetBoxInterface, &sipType_QDesignerWidgetBoxInterface, -1, 5}, + {sipName_QDesignerFormWindowInterface, &sipType_QDesignerFormWindowInterface, -1, 6}, + {sipName_QDesignerActionEditorInterface, &sipType_QDesignerActionEditorInterface, -1, 7}, + {sipName_QPyDesignerContainerExtension, &sipType_QPyDesignerContainerExtension, -1, 8}, + {sipName_QDesignerPropertyEditorInterface, &sipType_QDesignerPropertyEditorInterface, -1, 9}, + {sipName_QDesignerFormWindowManagerInterface, &sipType_QDesignerFormWindowManagerInterface, -1, 10}, + {sipName_QPyDesignerTaskMenuExtension, &sipType_QPyDesignerTaskMenuExtension, -1, 11}, + {sipName_QPyDesignerPropertySheetExtension, &sipType_QPyDesignerPropertySheetExtension, -1, 12}, + {sipName_QDesignerObjectInspectorInterface, &sipType_QDesignerObjectInspectorInterface, -1, 13}, + {sipName_QPyDesignerCustomWidgetCollectionPlugin, &sipType_QPyDesignerCustomWidgetCollectionPlugin, -1, 14}, + {sipName_QExtensionManager, &sipType_QExtensionManager, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: +%If (Qt_5_6_1 -) + explicit QExtensionManager(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QExtensionManager(QObject *parent /TransferThis/ = 0); +%End + virtual ~QExtensionManager(); + virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()); + virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()); + virtual QObject *extension(QObject *object, const QString &iid) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercontainerextension.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercontainerextension.sip new file mode 100644 index 0000000..cc318fb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercontainerextension.sip @@ -0,0 +1,32 @@ +// This is the SIP specification of the QPyDesignerContainerExtension class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPyDesignerContainerExtension : QObject, QDesignerContainerExtension +{ +%TypeHeaderCode +#include +%End + +public: + QPyDesignerContainerExtension(QObject *parent /TransferThis/); + +private: + QPyDesignerContainerExtension(const QPyDesignerContainerExtension &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip new file mode 100644 index 0000000..cee56d5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip @@ -0,0 +1,33 @@ +// This is the SIP specification of the QPyDesignerCustomWidgetCollectionPlugin +// class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPyDesignerCustomWidgetCollectionPlugin : QObject, QDesignerCustomWidgetCollectionInterface +{ +%TypeHeaderCode +#include +%End + +public: + QPyDesignerCustomWidgetCollectionPlugin(QObject *parent /TransferThis/ = 0); + +private: + QPyDesignerCustomWidgetCollectionPlugin(const QPyDesignerCustomWidgetCollectionPlugin &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercustomwidgetplugin.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercustomwidgetplugin.sip new file mode 100644 index 0000000..488dd9e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignercustomwidgetplugin.sip @@ -0,0 +1,32 @@ +// This is the SIP specification of the QPyDesignerCustomWidgetPlugin class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPyDesignerCustomWidgetPlugin : QObject, QDesignerCustomWidgetInterface +{ +%TypeHeaderCode +#include +%End + +public: + QPyDesignerCustomWidgetPlugin(QObject *parent /TransferThis/ = 0); + +private: + QPyDesignerCustomWidgetPlugin(const QPyDesignerCustomWidgetPlugin &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignermembersheetextension.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignermembersheetextension.sip new file mode 100644 index 0000000..aae34ae --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignermembersheetextension.sip @@ -0,0 +1,32 @@ +// This is the SIP specification of the QPyDesignerMemberSheetExtension class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPyDesignerMemberSheetExtension : QObject, QDesignerMemberSheetExtension +{ +%TypeHeaderCode +#include +%End + +public: + QPyDesignerMemberSheetExtension(QObject *parent /TransferThis/); + +private: + QPyDesignerMemberSheetExtension(const QPyDesignerMemberSheetExtension &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignerpropertysheetextension.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignerpropertysheetextension.sip new file mode 100644 index 0000000..4df6f28 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignerpropertysheetextension.sip @@ -0,0 +1,33 @@ +// This is the SIP specification of the QPyDesignerPropertySheetExtension +// class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPyDesignerPropertySheetExtension : QObject, QDesignerPropertySheetExtension +{ +%TypeHeaderCode +#include +%End + +public: + QPyDesignerPropertySheetExtension(QObject *parent /TransferThis/); + +private: + QPyDesignerPropertySheetExtension(const QPyDesignerPropertySheetExtension &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignertaskmenuextension.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignertaskmenuextension.sip new file mode 100644 index 0000000..7bab80e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/qpydesignertaskmenuextension.sip @@ -0,0 +1,32 @@ +// This is the SIP specification of the QPyDesignerTaskMenuExtension class. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPyDesignerTaskMenuExtension : QObject, QDesignerTaskMenuExtension +{ +%TypeHeaderCode +#include +%End + +public: + QPyDesignerTaskMenuExtension(QObject *parent /TransferThis/); + +private: + QPyDesignerTaskMenuExtension(const QPyDesignerTaskMenuExtension &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/taskmenu.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/taskmenu.sip new file mode 100644 index 0000000..2b4a4c1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtDesigner/taskmenu.sip @@ -0,0 +1,33 @@ +// taskmenu.sip generated by MetaSIP +// +// This file is part of the QtDesigner Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesignerTaskMenuExtension +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QDesignerTaskMenuExtension(); + virtual QList taskActions() const = 0; + virtual QAction *preferredEditAction() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/QtGui.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/QtGui.toml new file mode 100644 index 0000000..37285d0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/QtGui.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtGui. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/QtGuimod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/QtGuimod.sip new file mode 100644 index 0000000..73c50c5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/QtGuimod.sip @@ -0,0 +1,145 @@ +// QtGuimod.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtGui, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +// Note this is also appended by configure.py but is explicitly needed here (probably a SIP bug). +%Include opengl_types.sip + +%Include qabstracttextdocumentlayout.sip +%Include qbackingstore.sip +%Include qbitmap.sip +%Include qcolor.sip +%Include qbrush.sip +%Include qclipboard.sip +%Include qcolorspace.sip +%Include qcolortransform.sip +%Include qcursor.sip +%Include qdesktopservices.sip +%Include qdrag.sip +%Include qevent.sip +%Include qfont.sip +%Include qfontdatabase.sip +%Include qfontinfo.sip +%Include qfontmetrics.sip +%Include qgenericmatrix.sip +%Include qglyphrun.sip +%Include qguiapplication.sip +%Include qicon.sip +%Include qiconengine.sip +%Include qimage.sip +%Include qimageiohandler.sip +%Include qimagereader.sip +%Include qimagewriter.sip +%Include qinputmethod.sip +%Include qkeysequence.sip +%Include qmatrix4x4.sip +%Include qmovie.sip +%Include qoffscreensurface.sip +%Include qopenglbuffer.sip +%Include qopenglcontext.sip +%Include qopengldebug.sip +%Include qopenglframebufferobject.sip +%Include qopenglpaintdevice.sip +%Include qopenglpixeltransferoptions.sip +%Include qopenglshaderprogram.sip +%Include qopengltexture.sip +%Include qopengltextureblitter.sip +%Include qopengltimerquery.sip +%Include qopenglversionfunctions.sip +%Include qopenglvertexarrayobject.sip +%Include qopenglwindow.sip +%Include qpagedpaintdevice.sip +%Include qpagelayout.sip +%Include qpagesize.sip +%Include qpainter.sip +%Include qpaintdevice.sip +%Include qpaintdevicewindow.sip +%Include qpaintengine.sip +%Include qpainterpath.sip +%Include qpalette.sip +%Include qpdfwriter.sip +%Include qpen.sip +%Include qpicture.sip +%Include qpixelformat.sip +%Include qpixmap.sip +%Include qpixmapcache.sip +%Include qpolygon.sip +%Include qquaternion.sip +%Include qrasterwindow.sip +%Include qrawfont.sip +%Include qregion.sip +%Include qrgba64.sip +%Include qrgb.sip +%Include qscreen.sip +%Include qsessionmanager.sip +%Include qstandarditemmodel.sip +%Include qstatictext.sip +%Include qstylehints.sip +%Include qsurface.sip +%Include qsurfaceformat.sip +%Include qsyntaxhighlighter.sip +%Include qtextcursor.sip +%Include qtextdocument.sip +%Include qtextdocumentfragment.sip +%Include qtextdocumentwriter.sip +%Include qtextformat.sip +%Include qtextlayout.sip +%Include qtextlist.sip +%Include qtextobject.sip +%Include qtextoption.sip +%Include qtexttable.sip +%Include qtouchdevice.sip +%Include qtransform.sip +%Include qvalidator.sip +%Include qvector2d.sip +%Include qvector3d.sip +%Include qvector4d.sip +%Include qwindow.sip +%Include qwindowdefs.sip +%Include opengl_types.sip +%Include qpygui_qvector.sip +%Include qpygui_qlist.sip +%Include qpygui_qpair.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/opengl_types.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/opengl_types.sip new file mode 100644 index 0000000..0a5c5c4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/opengl_types.sip @@ -0,0 +1,43 @@ +// This implements the typedefs for the OpenGL data types. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_OpenGL) + +typedef char GLchar; +typedef qint8 GLbyte; +typedef quint8 GLubyte; +typedef quint8 GLboolean; +typedef qint16 GLshort; +typedef quint16 GLushort; +typedef qint32 GLint; +typedef qint32 GLsizei; +typedef quint32 GLuint; +typedef quint32 GLenum; +typedef quint32 GLbitfield; +%If (PyQt_Desktop_OpenGL) +typedef quint64 GLuint64; // This is in OpenGL ES v3. +typedef double GLdouble; +%End +typedef float GLfloat; +typedef float GLclampf; +typedef long GLintptr; +typedef long GLsizeiptr; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qabstracttextdocumentlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qabstracttextdocumentlayout.sip new file mode 100644 index 0000000..76f9e08 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qabstracttextdocumentlayout.sip @@ -0,0 +1,107 @@ +// qabstracttextdocumentlayout.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractTextDocumentLayout : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractTextDocumentLayout(QTextDocument *doc); + virtual ~QAbstractTextDocumentLayout(); + + struct Selection + { +%TypeHeaderCode +#include +%End + + QTextCursor cursor; + QTextCharFormat format; + }; + + struct PaintContext + { +%TypeHeaderCode +#include +%End + + PaintContext(); + int cursorPosition; + QPalette palette; + QRectF clip; + QVector selections; + }; + + virtual void draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context) = 0; + virtual int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const = 0; + QString anchorAt(const QPointF &pos) const; + virtual int pageCount() const = 0; + virtual QSizeF documentSize() const = 0; + virtual QRectF frameBoundingRect(QTextFrame *frame) const = 0; + virtual QRectF blockBoundingRect(const QTextBlock &block) const = 0; + void setPaintDevice(QPaintDevice *device); + QPaintDevice *paintDevice() const; + QTextDocument *document() const; + void registerHandler(int objectType, QObject *component); +%If (Qt_5_2_0 -) + void unregisterHandler(int objectType, QObject *component = 0); +%End + QTextObjectInterface *handlerForObject(int objectType) const; + +signals: + void update(const QRectF &rect = QRectF(0., 0., 1.0E+9, 1.0E+9)); + void documentSizeChanged(const QSizeF &newSize); + void pageCountChanged(int newPages); + void updateBlock(const QTextBlock &block); + +protected: + virtual void documentChanged(int from, int charsRemoved, int charsAdded) = 0; + virtual void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format); + virtual void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format); + virtual void drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format); + QTextCharFormat format(int pos); + +public: +%If (Qt_5_8_0 -) + QString imageAt(const QPointF &pos) const; +%End +%If (Qt_5_8_0 -) + QTextFormat formatAt(const QPointF &pos) const; +%End +%If (Qt_5_14_0 -) + QTextBlock blockWithMarkerAt(const QPointF &pos) const; +%End +}; + +class QTextObjectInterface /Mixin,PyQtInterface="org.qt-project.Qt.QTextObjectInterface"/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QTextObjectInterface(); + virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0; + virtual void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbackingstore.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbackingstore.sip new file mode 100644 index 0000000..58ca551 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbackingstore.sip @@ -0,0 +1,43 @@ +// qbackingstore.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QBackingStore /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + explicit QBackingStore(QWindow *window); + ~QBackingStore(); + QWindow *window() const; + QPaintDevice *paintDevice(); + void flush(const QRegion ®ion, QWindow *window = 0, const QPoint &offset = QPoint()); + void resize(const QSize &size); + QSize size() const; + bool scroll(const QRegion &area, int dx, int dy); + void beginPaint(const QRegion &); + void endPaint(); + void setStaticContents(const QRegion ®ion); + QRegion staticContents() const; + bool hasStaticContents() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbitmap.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbitmap.sip new file mode 100644 index 0000000..23b417c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbitmap.sip @@ -0,0 +1,52 @@ +// qbitmap.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QBitmap : public QPixmap +{ +%TypeHeaderCode +#include +%End + +public: + QBitmap(); +%If (Qt_5_7_0 -) + QBitmap(const QBitmap &other); +%End + QBitmap(const QPixmap &); + QBitmap(int w, int h); + explicit QBitmap(const QSize &); + QBitmap(const QString &fileName, const char *format = 0); + QBitmap(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new sipQBitmap(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + virtual ~QBitmap(); + void clear(); + static QBitmap fromImage(const QImage &image, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor); + static QBitmap fromData(const QSize &size, const uchar *bits, QImage::Format format = QImage::Format_MonoLSB); + QBitmap transformed(const QTransform &matrix) const; + void swap(QBitmap &other /Constrained/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbrush.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbrush.sip new file mode 100644 index 0000000..d082c9a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qbrush.sip @@ -0,0 +1,439 @@ +// qbrush.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QBrush /TypeHintIn="Union[QBrush, QColor, QGradient]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +// SIP doesn't support automatic type convertors so we explicitly allow a +// QColor or a QGradient to be used whenever a QBrush is expected. Note that +// SIP must process QColor before QBrush so that the former's QVariant cast +// operator is applied before the latter's. + +if (sipIsErr == NULL) + return (sipCanConvertToType(sipPy, sipType_QBrush, SIP_NO_CONVERTORS) || + sipCanConvertToType(sipPy, sipType_QColor, 0) || + sipCanConvertToType(sipPy, sipType_QGradient, 0)); + +if (sipCanConvertToType(sipPy, sipType_QBrush, SIP_NO_CONVERTORS)) +{ + *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QBrush, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + + return 0; +} + +int state; + +if (sipCanConvertToType(sipPy, sipType_QColor, 0)) +{ + QColor *c = reinterpret_cast(sipConvertToType(sipPy, sipType_QColor, 0, 0, &state, sipIsErr)); + + if (*sipIsErr) + { + sipReleaseType(c, sipType_QColor, state); + return 0; + } + + *sipCppPtr = new QBrush(*c); + + sipReleaseType(c, sipType_QColor, state); + + return sipGetState(sipTransferObj); +} + +QGradient *g = reinterpret_cast(sipConvertToType(sipPy, sipType_QGradient, 0, 0, &state, sipIsErr)); + +if (*sipIsErr) +{ + sipReleaseType(g, sipType_QGradient, state); + return 0; +} + +*sipCppPtr = new QBrush(*g); + +sipReleaseType(g, sipType_QGradient, state); + +return sipGetState(sipTransferObj); +%End + +public: + QBrush(); + QBrush(Qt::BrushStyle bs); + QBrush(const QColor &color, Qt::BrushStyle style = Qt::SolidPattern); + QBrush(const QColor &color, const QPixmap &pixmap); + QBrush(const QPixmap &pixmap); + QBrush(const QImage &image); + QBrush(const QBrush &brush); + QBrush(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QBrush(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QBrush(); + void setStyle(Qt::BrushStyle); + QPixmap texture() const; + void setTexture(const QPixmap &pixmap); + void setColor(const QColor &color); + const QGradient *gradient() const; + bool isOpaque() const; + bool operator==(const QBrush &b) const; + bool operator!=(const QBrush &b) const; + void setColor(Qt::GlobalColor acolor); + Qt::BrushStyle style() const; + const QColor &color() const; + void setTextureImage(const QImage &image); + QImage textureImage() const; + void setTransform(const QTransform &); + QTransform transform() const; + void swap(QBrush &other /Constrained/); +}; + +QDataStream &operator>>(QDataStream &, QBrush & /Constrained/) /ReleaseGIL/; +QDataStream &operator<<(QDataStream &, const QBrush & /Constrained/) /ReleaseGIL/; +typedef QVector> QGradientStops; + +class QGradient +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + switch (sipCpp->type()) + { + case QGradient::ConicalGradient: + sipType = sipType_QConicalGradient; + break; + + case QGradient::LinearGradient: + sipType = sipType_QLinearGradient; + break; + + case QGradient::RadialGradient: + sipType = sipType_QRadialGradient; + break; + + default: + sipType = 0; + } +%End + +public: + enum CoordinateMode + { + LogicalMode, + StretchToDeviceMode, + ObjectBoundingMode, +%If (Qt_5_12_0 -) + ObjectMode, +%End + }; + + enum Type + { + LinearGradient, + RadialGradient, + ConicalGradient, + NoGradient, + }; + + enum Spread + { + PadSpread, + ReflectSpread, + RepeatSpread, + }; + +%If (Qt_5_12_0 -) + + enum Preset + { + WarmFlame, + NightFade, + SpringWarmth, + JuicyPeach, + YoungPassion, + LadyLips, + SunnyMorning, + RainyAshville, + FrozenDreams, + WinterNeva, + DustyGrass, + TemptingAzure, + HeavyRain, + AmyCrisp, + MeanFruit, + DeepBlue, + RipeMalinka, + CloudyKnoxville, + MalibuBeach, + NewLife, + TrueSunset, + MorpheusDen, + RareWind, + NearMoon, + WildApple, + SaintPetersburg, + PlumPlate, + EverlastingSky, + HappyFisher, + Blessing, + SharpeyeEagle, + LadogaBottom, + LemonGate, + ItmeoBranding, + ZeusMiracle, + OldHat, + StarWine, + HappyAcid, + AwesomePine, + NewYork, + ShyRainbow, + MixedHopes, + FlyHigh, + StrongBliss, + FreshMilk, + SnowAgain, + FebruaryInk, + KindSteel, + SoftGrass, + GrownEarly, + SharpBlues, + ShadyWater, + DirtyBeauty, + GreatWhale, + TeenNotebook, + PoliteRumors, + SweetPeriod, + WideMatrix, + SoftCherish, + RedSalvation, + BurningSpring, + NightParty, + SkyGlider, + HeavenPeach, + PurpleDivision, + AquaSplash, + SpikyNaga, + LoveKiss, + CleanMirror, + PremiumDark, + ColdEvening, + CochitiLake, + SummerGames, + PassionateBed, + MountainRock, + DesertHump, + JungleDay, + PhoenixStart, + OctoberSilence, + FarawayRiver, + AlchemistLab, + OverSun, + PremiumWhite, + MarsParty, + EternalConstance, + JapanBlush, + SmilingRain, + CloudyApple, + BigMango, + HealthyWater, + AmourAmour, + RiskyConcrete, + StrongStick, + ViciousStance, + PaloAlto, + HappyMemories, + MidnightBloom, + Crystalline, + PartyBliss, + ConfidentCloud, + LeCocktail, + RiverCity, + FrozenBerry, + ChildCare, + FlyingLemon, + NewRetrowave, + HiddenJaguar, + AboveTheSky, + Nega, + DenseWater, + Seashore, + MarbleWall, + CheerfulCaramel, + NightSky, + MagicLake, + YoungGrass, + ColorfulPeach, + GentleCare, + PlumBath, + HappyUnicorn, + AfricanField, + SolidStone, + OrangeJuice, + GlassWater, + NorthMiracle, + FruitBlend, + MillenniumPine, + HighFlight, + MoleHall, + SpaceShift, + ForestInei, + RoyalGarden, + RichMetal, + JuicyCake, + SmartIndigo, + SandStrike, + NorseBeauty, + AquaGuidance, + SunVeggie, + SeaLord, + BlackSea, + GrassShampoo, + LandingAircraft, + WitchDance, + SleeplessNight, + AngelCare, + CrystalRiver, + SoftLipstick, + SaltMountain, + PerfectWhite, + FreshOasis, + StrictNovember, + MorningSalad, + DeepRelief, + SeaStrike, + NightCall, + SupremeSky, + LightBlue, + MindCrawl, + LilyMeadow, + SugarLollipop, + SweetDessert, + MagicRay, + TeenParty, + FrozenHeat, + GagarinView, + FabledSunset, + PerfectBlue, +%If (Qt_5_14_0 -) + NumPresets, +%End + }; + +%End + QGradient(); +%If (Qt_5_12_0 -) + QGradient(QGradient::Preset); +%End +%If (Qt_5_14_0 -) + ~QGradient(); +%End + QGradient::Type type() const; + QGradient::Spread spread() const; + void setColorAt(qreal pos, const QColor &color); + void setStops(const QGradientStops &stops); + QGradientStops stops() const; + bool operator==(const QGradient &gradient) const; + bool operator!=(const QGradient &other) const; + void setSpread(QGradient::Spread aspread); + QGradient::CoordinateMode coordinateMode() const; + void setCoordinateMode(QGradient::CoordinateMode mode); +}; + +class QLinearGradient : public QGradient +{ +%TypeHeaderCode +#include +%End + +public: + QLinearGradient(); + QLinearGradient(const QPointF &start, const QPointF &finalStop); + QLinearGradient(qreal xStart, qreal yStart, qreal xFinalStop, qreal yFinalStop); +%If (Qt_5_14_0 -) + ~QLinearGradient(); +%End + QPointF start() const; + QPointF finalStop() const; + void setStart(const QPointF &start); + void setStart(qreal x, qreal y); + void setFinalStop(const QPointF &stop); + void setFinalStop(qreal x, qreal y); +}; + +class QRadialGradient : public QGradient +{ +%TypeHeaderCode +#include +%End + +public: + QRadialGradient(); + QRadialGradient(const QPointF ¢er, qreal radius, const QPointF &focalPoint); + QRadialGradient(const QPointF ¢er, qreal centerRadius, const QPointF &focalPoint, qreal focalRadius); + QRadialGradient(const QPointF ¢er, qreal radius); + QRadialGradient(qreal cx, qreal cy, qreal radius, qreal fx, qreal fy); + QRadialGradient(qreal cx, qreal cy, qreal centerRadius, qreal fx, qreal fy, qreal focalRadius); + QRadialGradient(qreal cx, qreal cy, qreal radius); +%If (Qt_5_14_0 -) + ~QRadialGradient(); +%End + QPointF center() const; + QPointF focalPoint() const; + qreal radius() const; + void setCenter(const QPointF ¢er); + void setCenter(qreal x, qreal y); + void setFocalPoint(const QPointF &focalPoint); + void setFocalPoint(qreal x, qreal y); + void setRadius(qreal radius); + qreal centerRadius() const; + void setCenterRadius(qreal radius); + qreal focalRadius() const; + void setFocalRadius(qreal radius); +}; + +class QConicalGradient : public QGradient +{ +%TypeHeaderCode +#include +%End + +public: + QConicalGradient(); + QConicalGradient(const QPointF ¢er, qreal startAngle); + QConicalGradient(qreal cx, qreal cy, qreal startAngle); +%If (Qt_5_14_0 -) + ~QConicalGradient(); +%End + QPointF center() const; + qreal angle() const; + void setCenter(const QPointF ¢er); + void setCenter(qreal x, qreal y); + void setAngle(qreal angle); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qclipboard.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qclipboard.sip new file mode 100644 index 0000000..d9463eb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qclipboard.sip @@ -0,0 +1,95 @@ +// qclipboard.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QClipboard : public QObject +{ +%TypeHeaderCode +#include +%End + + explicit QClipboard(QObject *parent /TransferThis/); + virtual ~QClipboard(); + +public: + enum Mode + { + Clipboard, + Selection, + FindBuffer, + }; + + void clear(QClipboard::Mode mode = QClipboard::Clipboard); + bool supportsFindBuffer() const; + bool supportsSelection() const; + bool ownsClipboard() const; + bool ownsFindBuffer() const; + bool ownsSelection() const; + QString text(QClipboard::Mode mode = QClipboard::Clipboard) const; + SIP_PYTUPLE text(const QString &subtype, QClipboard::Mode mode = QClipboard::Clipboard) const /TypeHint="Tuple[QString, QString]"/; +%MethodCode + QString *text; + QString *subtype = new QString(*a0); + + Py_BEGIN_ALLOW_THREADS + text = new QString(sipCpp->text(*subtype, a1)); + Py_END_ALLOW_THREADS + + PyObject *text_obj = sipConvertFromNewType(text, sipType_QString, NULL); + PyObject *subtype_obj = sipConvertFromNewType(subtype, sipType_QString, NULL); + + if (text_obj && subtype_obj) + sipRes = PyTuple_Pack(2, text_obj, subtype_obj); + + Py_XDECREF(text_obj); + Py_XDECREF(subtype_obj); +%End + + void setText(const QString &, QClipboard::Mode mode = QClipboard::Clipboard); + const QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) const; + void setMimeData(QMimeData *data /GetWrapper/, QClipboard::Mode mode = QClipboard::Clipboard); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->setMimeData(a0, a1); + Py_END_ALLOW_THREADS + + // Transfer ownership to C++ and make sure the Python object stays alive by + // giving it a reference to itself. The cycle will be broken by QMimeData's + // virtual dtor. The reason we don't do the obvious and just use /Transfer/ is + // that the QClipboard Python object we would transfer ownership to is likely + // to be garbage collected immediately afterwards. + sipTransferTo(a0Wrapper, a0Wrapper); +%End + + QImage image(QClipboard::Mode mode = QClipboard::Clipboard) const; + QPixmap pixmap(QClipboard::Mode mode = QClipboard::Clipboard) const; + void setImage(const QImage &, QClipboard::Mode mode = QClipboard::Clipboard); + void setPixmap(const QPixmap &, QClipboard::Mode mode = QClipboard::Clipboard); + +signals: + void changed(QClipboard::Mode mode); + void dataChanged(); + void findBufferChanged(); + void selectionChanged(); + +private: + QClipboard(const QClipboard &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolor.sip new file mode 100644 index 0000000..48c045c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolor.sip @@ -0,0 +1,388 @@ +// qcolor.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QColor /TypeHintIn="Union[QColor, Qt.GlobalColor]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +// SIP doesn't support automatic type convertors so we explicitly allow a +// Qt::GlobalColor to be used whenever a QColor is expected. Note that SIP +// must process QColor before QBrush so that the former's QVariant cast +// operator is applied before the latter's. + +if (sipIsErr == NULL) + return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_Qt_GlobalColor)) || + sipCanConvertToType(sipPy, sipType_QColor, SIP_NO_CONVERTORS)); + +if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_Qt_GlobalColor))) +{ + *sipCppPtr = new QColor((Qt::GlobalColor)SIPLong_AsLong(sipPy)); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QColor, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"iiii", sipCpp->red(), sipCpp->green(), sipCpp->blue(), sipCpp->alpha()); +%End + +public: + enum Spec + { + Invalid, + Rgb, + Hsv, + Cmyk, + Hsl, +%If (Qt_5_14_0 -) + ExtendedRgb, +%End + }; + + QColor(Qt::GlobalColor color /Constrained/); + QColor(QRgb rgb); +%If (Qt_5_6_0 -) + QColor(QRgba64 rgba64); +%End + QColor(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QColor(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + QString name() const; + void setNamedColor(const QString &name); + static QStringList colorNames(); + QColor::Spec spec() const; + int alpha() const; + void setAlpha(int alpha); + qreal alphaF() const; + void setAlphaF(qreal alpha); + int red() const; + int green() const; + int blue() const; + void setRed(int red); + void setGreen(int green); + void setBlue(int blue); + qreal redF() const; + qreal greenF() const; + qreal blueF() const; + void setRedF(qreal red); + void setGreenF(qreal green); + void setBlueF(qreal blue); + void getRgb(int *r, int *g, int *b, int *alpha = 0) const; + void setRgb(int r, int g, int b, int alpha = 255); + void getRgbF(qreal *r, qreal *g, qreal *b, qreal *alpha = 0) const; + void setRgbF(qreal r, qreal g, qreal b, qreal alpha = 1.); + QRgb rgba() const; + void setRgba(QRgb rgba); + QRgb rgb() const; + void setRgb(QRgb rgb); + int hue() const; + int saturation() const; + int value() const; + qreal hueF() const; + qreal saturationF() const; + qreal valueF() const; + void getHsv(int *h, int *s, int *v, int *alpha = 0) const; + void setHsv(int h, int s, int v, int alpha = 255); + void getHsvF(qreal *h, qreal *s, qreal *v, qreal *alpha = 0) const; + void setHsvF(qreal h, qreal s, qreal v, qreal alpha = 1.); + int cyan() const; + int magenta() const; + int yellow() const; + int black() const; + qreal cyanF() const; + qreal magentaF() const; + qreal yellowF() const; + qreal blackF() const; + void getCmyk(int *c, int *m, int *y, int *k, int *alpha = 0); + void setCmyk(int c, int m, int y, int k, int alpha = 255); + void getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *alpha = 0); + void setCmykF(qreal c, qreal m, qreal y, qreal k, qreal alpha = 1.); + QColor toRgb() const; + QColor toHsv() const; + QColor toCmyk() const; + QColor convertTo(QColor::Spec colorSpec) const; + static QColor fromRgb(QRgb rgb); + static QColor fromRgba(QRgb rgba); + static QColor fromRgb(int r, int g, int b, int alpha = 255); + static QColor fromRgbF(qreal r, qreal g, qreal b, qreal alpha = 1.); + static QColor fromHsv(int h, int s, int v, int alpha = 255); + static QColor fromHsvF(qreal h, qreal s, qreal v, qreal alpha = 1.); + static QColor fromCmyk(int c, int m, int y, int k, int alpha = 255); + static QColor fromCmykF(qreal c, qreal m, qreal y, qreal k, qreal alpha = 1.); + bool operator==(const QColor &c) const; + bool operator!=(const QColor &c) const; + QColor(); + QColor(int r, int g, int b, int alpha = 255); + QColor(const QString &aname); + QColor(const QColor &acolor); + bool isValid() const; + QColor lighter(int factor = 150) const; + QColor darker(int factor = 200) const; + int hsvHue() const; + int hsvSaturation() const; + qreal hsvHueF() const; + qreal hsvSaturationF() const; + int hslHue() const; + int hslSaturation() const; + int lightness() const; + qreal hslHueF() const; + qreal hslSaturationF() const; + qreal lightnessF() const; + void getHsl(int *h, int *s, int *l, int *alpha = 0) const; + void setHsl(int h, int s, int l, int alpha = 255); + void getHslF(qreal *h, qreal *s, qreal *l, qreal *alpha = 0) const; + void setHslF(qreal h, qreal s, qreal l, qreal alpha = 1.); + QColor toHsl() const; + static QColor fromHsl(int h, int s, int l, int alpha = 255); + static QColor fromHslF(qreal h, qreal s, qreal l, qreal alpha = 1.); + static bool isValidColor(const QString &name); +%If (Qt_5_2_0 -) + + enum NameFormat + { + HexRgb, + HexArgb, + }; + +%End +%If (Qt_5_2_0 -) + QString name(QColor::NameFormat format) const; +%End +%If (Qt_5_6_0 -) + QRgba64 rgba64() const; +%End +%If (Qt_5_6_0 -) + void setRgba64(QRgba64 rgba); +%End +%If (Qt_5_6_0 -) + static QColor fromRgba64(ushort r, ushort g, ushort b, ushort alpha = 65535); +%End +%If (Qt_5_6_0 -) + static QColor fromRgba64(QRgba64 rgba); +%End +%If (Qt_5_14_0 -) + QColor toExtendedRgb() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QColor & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QColor & /Constrained/) /ReleaseGIL/; +%If (Qt_5_14_0 -) +%If (PyQt_CONSTEXPR) + +namespace QColorConstants +{ +%TypeHeaderCode +#include +%End + + const QColor Color0; + const QColor Color1; + const QColor Black; + const QColor White; + const QColor DarkGray; + const QColor Gray; + const QColor LightGray; + const QColor Red; + const QColor Green; + const QColor Blue; + const QColor Cyan; + const QColor Magenta; + const QColor Yellow; + const QColor DarkRed; + const QColor DarkGreen; + const QColor DarkBlue; + const QColor DarkCyan; + const QColor DarkMagenta; + const QColor DarkYellow; + const QColor Transparent; + + namespace Svg + { +%TypeHeaderCode +#include +%End + + const QColor aliceblue; + const QColor antiquewhite; + const QColor aqua; + const QColor aquamarine; + const QColor azure; + const QColor beige; + const QColor bisque; + const QColor black; + const QColor blanchedalmond; + const QColor blue; + const QColor blueviolet; + const QColor brown; + const QColor burlywood; + const QColor cadetblue; + const QColor chartreuse; + const QColor chocolate; + const QColor coral; + const QColor cornflowerblue; + const QColor cornsilk; + const QColor crimson; + const QColor cyan; + const QColor darkblue; + const QColor darkcyan; + const QColor darkgoldenrod; + const QColor darkgray; + const QColor darkgreen; + const QColor darkgrey; + const QColor darkkhaki; + const QColor darkmagenta; + const QColor darkolivegreen; + const QColor darkorange; + const QColor darkorchid; + const QColor darkred; + const QColor darksalmon; + const QColor darkseagreen; + const QColor darkslateblue; + const QColor darkslategray; + const QColor darkslategrey; + const QColor darkturquoise; + const QColor darkviolet; + const QColor deeppink; + const QColor deepskyblue; + const QColor dimgray; + const QColor dimgrey; + const QColor dodgerblue; + const QColor firebrick; + const QColor floralwhite; + const QColor forestgreen; + const QColor fuchsia; + const QColor gainsboro; + const QColor ghostwhite; + const QColor gold; + const QColor goldenrod; + const QColor gray; + const QColor green; + const QColor greenyellow; + const QColor grey; + const QColor honeydew; + const QColor hotpink; + const QColor indianred; + const QColor indigo; + const QColor ivory; + const QColor khaki; + const QColor lavender; + const QColor lavenderblush; + const QColor lawngreen; + const QColor lemonchiffon; + const QColor lightblue; + const QColor lightcoral; + const QColor lightcyan; + const QColor lightgoldenrodyellow; + const QColor lightgray; + const QColor lightgreen; + const QColor lightgrey; + const QColor lightpink; + const QColor lightsalmon; + const QColor lightseagreen; + const QColor lightskyblue; + const QColor lightslategray; + const QColor lightslategrey; + const QColor lightsteelblue; + const QColor lightyellow; + const QColor lime; + const QColor limegreen; + const QColor linen; + const QColor magenta; + const QColor maroon; + const QColor mediumaquamarine; + const QColor mediumblue; + const QColor mediumorchid; + const QColor mediumpurple; + const QColor mediumseagreen; + const QColor mediumslateblue; + const QColor mediumspringgreen; + const QColor mediumturquoise; + const QColor mediumvioletred; + const QColor midnightblue; + const QColor mintcream; + const QColor mistyrose; + const QColor moccasin; + const QColor navajowhite; + const QColor navy; + const QColor oldlace; + const QColor olive; + const QColor olivedrab; + const QColor orange; + const QColor orangered; + const QColor orchid; + const QColor palegoldenrod; + const QColor palegreen; + const QColor paleturquoise; + const QColor palevioletred; + const QColor papayawhip; + const QColor peachpuff; + const QColor peru; + const QColor pink; + const QColor plum; + const QColor powderblue; + const QColor purple; + const QColor red; + const QColor rosybrown; + const QColor royalblue; + const QColor saddlebrown; + const QColor salmon; + const QColor sandybrown; + const QColor seagreen; + const QColor seashell; + const QColor sienna; + const QColor silver; + const QColor skyblue; + const QColor slateblue; + const QColor slategray; + const QColor slategrey; + const QColor snow; + const QColor springgreen; + const QColor steelblue; + const QColor tan; + const QColor teal; + const QColor thistle; + const QColor tomato; + const QColor turquoise; + const QColor violet; + const QColor wheat; + const QColor white; + const QColor whitesmoke; + const QColor yellow; + const QColor yellowgreen; + }; +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolorspace.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolorspace.sip new file mode 100644 index 0000000..0e18bea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolorspace.sip @@ -0,0 +1,92 @@ +// qcolorspace.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_14_0 -) + +class QColorSpace +{ +%TypeHeaderCode +#include +%End + +public: + enum NamedColorSpace + { + SRgb, + SRgbLinear, + AdobeRgb, + DisplayP3, + ProPhotoRgb, + }; + + enum class Primaries + { + Custom, + SRgb, + AdobeRgb, + DciP3D65, + ProPhotoRgb, + }; + + enum class TransferFunction + { + Custom, + Linear, + Gamma, + SRgb, + ProPhotoRgb, + }; + + QColorSpace(); + QColorSpace(QColorSpace::NamedColorSpace namedColorSpace); + QColorSpace(QColorSpace::Primaries primaries, QColorSpace::TransferFunction fun, float gamma = 0.F); + QColorSpace(QColorSpace::Primaries primaries, float gamma); + QColorSpace(const QPointF &whitePoint, const QPointF &redPoint, const QPointF &greenPoint, const QPointF &bluePoint, QColorSpace::TransferFunction fun, float gamma = 0.F); + QColorSpace(const QColorSpace &colorSpace); + ~QColorSpace(); + void swap(QColorSpace &colorSpace /Constrained/); + QColorSpace::Primaries primaries() const; + QColorSpace::TransferFunction transferFunction() const; + float gamma() const; + void setTransferFunction(QColorSpace::TransferFunction transferFunction, float gamma = 0.F); + QColorSpace withTransferFunction(QColorSpace::TransferFunction transferFunction, float gamma = 0.F) const; + void setPrimaries(QColorSpace::Primaries primariesId); + void setPrimaries(const QPointF &whitePoint, const QPointF &redPoint, const QPointF &greenPoint, const QPointF &bluePoint); + bool isValid() const; + static QColorSpace fromIccProfile(const QByteArray &iccProfile); + QByteArray iccProfile() const; + QColorTransform transformationToColorSpace(const QColorSpace &colorspace) const; +}; + +%End +%If (Qt_5_14_0 -) +bool operator==(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2); +%End +%If (Qt_5_14_0 -) +bool operator!=(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2); +%End +%If (Qt_5_14_0 -) +QDataStream &operator<<(QDataStream &, const QColorSpace & /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_14_0 -) +QDataStream &operator>>(QDataStream &, QColorSpace & /Constrained/) /ReleaseGIL/; +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolortransform.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolortransform.sip new file mode 100644 index 0000000..3e94c1b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcolortransform.sip @@ -0,0 +1,41 @@ +// qcolortransform.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_14_0 -) + +class QColorTransform +{ +%TypeHeaderCode +#include +%End + +public: + QColorTransform(); + QColorTransform(const QColorTransform &colorTransform); + ~QColorTransform(); + void swap(QColorTransform &other /Constrained/); + QRgb map(QRgb argb) const; + QRgba64 map(QRgba64 rgba64) const; + QColor map(const QColor &color) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcursor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcursor.sip new file mode 100644 index 0000000..f842873 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qcursor.sip @@ -0,0 +1,87 @@ +// qcursor.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCursor /TypeHintIn="Union[QCursor, Qt.CursorShape]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +// SIP doesn't support automatic type convertors so we explicitly allow a +// Qt::CursorShape to be used whenever a QCursor is expected. + +if (sipIsErr == NULL) + return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_Qt_CursorShape)) || + sipCanConvertToType(sipPy, sipType_QCursor, SIP_NO_CONVERTORS)); + +if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_Qt_CursorShape))) +{ + *sipCppPtr = new QCursor((Qt::CursorShape)SIPLong_AsLong(sipPy)); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QCursor, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End + +public: + QCursor(); + QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1, int hotY = -1); + QCursor(const QPixmap &pixmap, int hotX = -1, int hotY = -1); + QCursor(const QCursor &cursor); + QCursor(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QCursor(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QCursor(); + Qt::CursorShape shape() const; + void setShape(Qt::CursorShape newShape); + const QBitmap *bitmap() const; + const QBitmap *mask() const; + QPixmap pixmap() const; + QPoint hotSpot() const; + static QPoint pos(); + static void setPos(int x, int y); + static void setPos(const QPoint &p); + static QPoint pos(const QScreen *screen); + static void setPos(QScreen *screen, int x, int y); + static void setPos(QScreen *screen, const QPoint &p); +%If (Qt_5_7_0 -) + void swap(QCursor &other); +%End +}; + +QDataStream &operator<<(QDataStream &outS, const QCursor &cursor /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &inS, QCursor &cursor /Constrained/) /ReleaseGIL/; +%If (Qt_5_10_0 -) +bool operator==(const QCursor &lhs, const QCursor &rhs); +%End +%If (Qt_5_10_0 -) +bool operator!=(const QCursor &lhs, const QCursor &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qdesktopservices.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qdesktopservices.sip new file mode 100644 index 0000000..58fd957 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qdesktopservices.sip @@ -0,0 +1,67 @@ +// qdesktopservices.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesktopServices +{ +%TypeHeaderCode +#include +%End + +public: + static bool openUrl(const QUrl &url) /ReleaseGIL/; + static void setUrlHandler(const QString &scheme, QObject *receiver, const char *method); + static void setUrlHandler(const QString &scheme, SIP_PYCALLABLE method /TypeHint="Callable[[QUrl], None]"/); +%MethodCode + // Allow a callable that must be a slot of a QObject, although we never tell + // the user if it isn't. + sipMethodDef pm; + + if (sipGetMethod(a1, &pm)) + { + int iserr = 0; + QObject *receiver = reinterpret_cast(sipForceConvertToType( + pm.pm_self, sipType_QObject, NULL, SIP_NOT_NONE, NULL, &iserr)); + + if (!iserr) + { + PyObject *f_name_obj = PyObject_GetAttrString(pm.pm_function, "__name__"); + + if (f_name_obj) + { + // We only want a borrowed reference. + Py_DECREF(f_name_obj); + + const char *f_name = sipString_AsASCIIString(&f_name_obj); + + if (f_name) + { + QDesktopServices::setUrlHandler(*a0, receiver, f_name); + + Py_DECREF(f_name_obj); + } + } + } + } +%End + + static void unsetUrlHandler(const QString &scheme); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qdrag.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qdrag.sip new file mode 100644 index 0000000..ab4baaf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qdrag.sip @@ -0,0 +1,61 @@ +// qdrag.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDrag : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QDrag(QObject *dragSource /TransferThis/); + virtual ~QDrag(); + Qt::DropAction exec(Qt::DropActions supportedActions = Qt::MoveAction) /PyName=exec_,ReleaseGIL/; +%If (Py_v3) + Qt::DropAction exec(Qt::DropActions supportedActions = Qt::MoveAction) /ReleaseGIL/; +%End + Qt::DropAction exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction) /PyName=exec_,ReleaseGIL/; + Qt::DropAction exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction) /ReleaseGIL/; + void setMimeData(QMimeData *data /Transfer/); + QMimeData *mimeData() const; + void setPixmap(const QPixmap &); + QPixmap pixmap() const; + void setHotSpot(const QPoint &hotspot); + QPoint hotSpot() const; + QObject *source() const; + QObject *target() const; + void setDragCursor(const QPixmap &cursor, Qt::DropAction action); + +signals: + void actionChanged(Qt::DropAction action); + void targetChanged(QObject *newTarget); + +public: + QPixmap dragCursor(Qt::DropAction action) const; + Qt::DropActions supportedActions() const; + Qt::DropAction defaultAction() const; +%If (Qt_5_7_0 -) +%If (WS_X11 || WS_WIN) + static void cancel(); +%End +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qevent.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qevent.sip new file mode 100644 index 0000000..5dc60dd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qevent.sip @@ -0,0 +1,942 @@ +// qevent.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QInputEvent : public QEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + switch (sipCpp->type()) + { + case QEvent::ActionAdded: + case QEvent::ActionChanged: + case QEvent::ActionRemoved: + sipType = sipType_QActionEvent; + break; + + case QEvent::Close: + sipType = sipType_QCloseEvent; + break; + + case QEvent::ContextMenu: + sipType = sipType_QContextMenuEvent; + break; + + case QEvent::DragEnter: + sipType = sipType_QDragEnterEvent; + break; + + case QEvent::DragLeave: + sipType = sipType_QDragLeaveEvent; + break; + + case QEvent::DragMove: + sipType = sipType_QDragMoveEvent; + break; + + case QEvent::Drop: + sipType = sipType_QDropEvent; + break; + + case QEvent::Enter: + sipType = sipType_QEnterEvent; + break; + + case QEvent::FileOpen: + sipType = sipType_QFileOpenEvent; + break; + + case QEvent::FocusIn: + case QEvent::FocusOut: + sipType = sipType_QFocusEvent; + break; + + case QEvent::Hide: + sipType = sipType_QHideEvent; + break; + + case QEvent::HoverEnter: + case QEvent::HoverLeave: + case QEvent::HoverMove: + sipType = sipType_QHoverEvent; + break; + + case QEvent::IconDrag: + sipType = sipType_QIconDragEvent; + break; + + case QEvent::InputMethod: + sipType = sipType_QInputMethodEvent; + break; + + case QEvent::KeyPress: + case QEvent::KeyRelease: + case QEvent::ShortcutOverride: + sipType = sipType_QKeyEvent; + break; + + case QEvent::MouseButtonDblClick: + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseMove: + sipType = sipType_QMouseEvent; + break; + + case QEvent::Move: + sipType = sipType_QMoveEvent; + break; + + case QEvent::Paint: + sipType = sipType_QPaintEvent; + break; + + case QEvent::Resize: + sipType = sipType_QResizeEvent; + break; + + case QEvent::Shortcut: + sipType = sipType_QShortcutEvent; + break; + + case QEvent::Show: + sipType = sipType_QShowEvent; + break; + + case QEvent::StatusTip: + sipType = sipType_QStatusTipEvent; + break; + + case QEvent::TabletMove: + case QEvent::TabletPress: + case QEvent::TabletRelease: + case QEvent::TabletEnterProximity: + case QEvent::TabletLeaveProximity: + sipType = sipType_QTabletEvent; + break; + + case QEvent::ToolTip: + case QEvent::WhatsThis: + sipType = sipType_QHelpEvent; + break; + + case QEvent::WhatsThisClicked: + sipType = sipType_QWhatsThisClickedEvent; + break; + + case QEvent::Wheel: + sipType = sipType_QWheelEvent; + break; + + case QEvent::WindowStateChange: + sipType = sipType_QWindowStateChangeEvent; + break; + + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: + case QEvent::TouchCancel: + sipType = sipType_QTouchEvent; + break; + + case QEvent::InputMethodQuery: + sipType = sipType_QInputMethodQueryEvent; + break; + + case QEvent::Expose: + sipType = sipType_QExposeEvent; + break; + + case QEvent::ScrollPrepare: + sipType = sipType_QScrollPrepareEvent; + break; + + case QEvent::Scroll: + sipType = sipType_QScrollEvent; + break; + + #if QT_VERSION >= 0x050200 + case QEvent::NativeGesture: + sipType = sipType_QNativeGestureEvent; + break; + #endif + + #if QT_VERSION >= 0x050500 + case QEvent::PlatformSurface: + sipType = sipType_QPlatformSurfaceEvent; + break; + #endif + + default: + sipType = 0; + } +%End + +public: + virtual ~QInputEvent(); + Qt::KeyboardModifiers modifiers() const; + ulong timestamp() const; + void setTimestamp(ulong atimestamp); +}; + +class QMouseEvent : public QInputEvent +{ +%TypeHeaderCode +#include +%End + +public: + QMouseEvent(QEvent::Type type, const QPointF &pos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); + QMouseEvent(QEvent::Type type, const QPointF &pos, const QPointF &globalPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); + QMouseEvent(QEvent::Type type, const QPointF &pos, const QPointF &windowPos, const QPointF &globalPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); +%If (Qt_5_6_0 -) + QMouseEvent(QEvent::Type type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source); +%End + virtual ~QMouseEvent(); + QPoint pos() const; + QPoint globalPos() const; + int x() const; + int y() const; + int globalX() const; + int globalY() const; + Qt::MouseButton button() const; + Qt::MouseButtons buttons() const; + const QPointF &localPos() const; + const QPointF &windowPos() const; + const QPointF &screenPos() const; +%If (Qt_5_3_0 -) + Qt::MouseEventSource source() const; +%End +%If (Qt_5_3_0 -) + Qt::MouseEventFlags flags() const; +%End +}; + +class QHoverEvent : public QInputEvent +{ +%TypeHeaderCode +#include +%End + +public: + QHoverEvent(QEvent::Type type, const QPointF &pos, const QPointF &oldPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier); + virtual ~QHoverEvent(); + QPoint pos() const; + QPoint oldPos() const; + const QPointF &posF() const; + const QPointF &oldPosF() const; +}; + +class QWheelEvent : public QInputEvent +{ +%TypeHeaderCode +#include +%End + +public: + QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); +%If (Qt_5_2_0 -) + QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase); +%End +%If (Qt_5_5_0 -) + QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, Qt::MouseEventSource source); +%End +%If (Qt_5_7_0 -) + QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, Qt::MouseEventSource source, bool inverted); +%End +%If (Qt_5_12_0 -) + QWheelEvent(QPointF pos, QPointF globalPos, QPoint pixelDelta, QPoint angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized); +%End + virtual ~QWheelEvent(); + QPoint pos() const; + QPoint globalPos() const; + int x() const; + int y() const; + int globalX() const; + int globalY() const; + Qt::MouseButtons buttons() const; + QPoint pixelDelta() const; + QPoint angleDelta() const; + const QPointF &posF() const; + const QPointF &globalPosF() const; +%If (Qt_5_2_0 -) + Qt::ScrollPhase phase() const; +%End +%If (Qt_5_5_0 -) + Qt::MouseEventSource source() const; +%End +%If (Qt_5_7_0 -) + bool inverted() const; +%End +%If (Qt_5_14_0 -) + QPointF position() const; +%End +%If (Qt_5_14_0 -) + QPointF globalPosition() const; +%End +}; + +class QTabletEvent : public QInputEvent +{ +%TypeHeaderCode +#include +%End + +public: + enum TabletDevice + { + NoDevice, + Puck, + Stylus, + Airbrush, + FourDMouse, + XFreeEraser, + RotationStylus, + }; + + enum PointerType + { + UnknownPointer, + Pen, + Cursor, + Eraser, + }; + +%If (Qt_5_4_0 -) + QTabletEvent(QEvent::Type t, const QPointF &pos, const QPointF &globalPos, int device, int pointerType, qreal pressure, int xTilt, int yTilt, qreal tangentialPressure, qreal rotation, int z, Qt::KeyboardModifiers keyState, qint64 uniqueID, Qt::MouseButton button, Qt::MouseButtons buttons); +%End + QTabletEvent(QEvent::Type t, const QPointF &pos, const QPointF &globalPos, int device, int pointerType, qreal pressure, int xTilt, int yTilt, qreal tangentialPressure, qreal rotation, int z, Qt::KeyboardModifiers keyState, qint64 uniqueID); + virtual ~QTabletEvent(); + QPoint pos() const; + QPoint globalPos() const; + int x() const; + int y() const; + int globalX() const; + int globalY() const; + qreal hiResGlobalX() const; + qreal hiResGlobalY() const; + QTabletEvent::TabletDevice device() const; + QTabletEvent::PointerType pointerType() const; + qint64 uniqueId() const; + qreal pressure() const; + int z() const; + qreal tangentialPressure() const; + qreal rotation() const; + int xTilt() const; + int yTilt() const; + const QPointF &posF() const; + const QPointF &globalPosF() const; +%If (Qt_5_4_0 -) + Qt::MouseButton button() const; +%End +%If (Qt_5_4_0 -) + Qt::MouseButtons buttons() const; +%End +%If (Qt_5_15_0 -) + QTabletEvent::TabletDevice deviceType() const; +%End +}; + +class QKeyEvent : public QInputEvent +{ +%TypeHeaderCode +#include +%End + +public: + QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers, const QString &text = QString(), bool autorep = false, ushort count = 1); + QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString &text = QString(), bool autorep = false, ushort count = 1); + virtual ~QKeyEvent(); + int key() const; + Qt::KeyboardModifiers modifiers() const; + QString text() const; + bool isAutoRepeat() const; + int count() const /__len__/; + bool matches(QKeySequence::StandardKey key) const; + quint32 nativeModifiers() const; + quint32 nativeScanCode() const; + quint32 nativeVirtualKey() const; +}; + +class QFocusEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QFocusEvent(QEvent::Type type, Qt::FocusReason reason = Qt::OtherFocusReason); + virtual ~QFocusEvent(); + bool gotFocus() const; + bool lostFocus() const; + Qt::FocusReason reason() const; +}; + +class QPaintEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPaintEvent(const QRegion &paintRegion); + explicit QPaintEvent(const QRect &paintRect); + virtual ~QPaintEvent(); + const QRect &rect() const; + const QRegion ®ion() const; +}; + +class QMoveEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QMoveEvent(const QPoint &pos, const QPoint &oldPos); + virtual ~QMoveEvent(); + const QPoint &pos() const; + const QPoint &oldPos() const; +}; + +class QResizeEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QResizeEvent(const QSize &size, const QSize &oldSize); + virtual ~QResizeEvent(); + const QSize &size() const; + const QSize &oldSize() const; +}; + +class QCloseEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QCloseEvent(); + virtual ~QCloseEvent(); +}; + +class QIconDragEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QIconDragEvent(); + virtual ~QIconDragEvent(); +}; + +class QShowEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QShowEvent(); + virtual ~QShowEvent(); +}; + +class QHideEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QHideEvent(); + virtual ~QHideEvent(); +}; + +class QContextMenuEvent : public QInputEvent +{ +%TypeHeaderCode +#include +%End + +public: + enum Reason + { + Mouse, + Keyboard, + Other, + }; + + QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos, const QPoint &globalPos, Qt::KeyboardModifiers modifiers); + QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos, const QPoint &globalPos); + QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos); + virtual ~QContextMenuEvent(); + int x() const; + int y() const; + int globalX() const; + int globalY() const; + const QPoint &pos() const; + const QPoint &globalPos() const; + QContextMenuEvent::Reason reason() const; +}; + +class QInputMethodEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + enum AttributeType + { + TextFormat, + Cursor, + Language, + Ruby, + Selection, + }; + + class Attribute + { +%TypeHeaderCode +#include +%End + + public: + Attribute(QInputMethodEvent::AttributeType t, int s, int l, QVariant val); +%If (Qt_5_8_0 -) + Attribute(QInputMethodEvent::AttributeType typ, int s, int l); +%End + QInputMethodEvent::AttributeType type; + int start; + int length; + QVariant value; + }; + + QInputMethodEvent(); + QInputMethodEvent(const QString &preeditText, const QList &attributes); + QInputMethodEvent(const QInputMethodEvent &other); +%If (Qt_5_6_0 -) + virtual ~QInputMethodEvent(); +%End + void setCommitString(const QString &commitString, int from = 0, int length = 0); + const QList &attributes() const; + const QString &preeditString() const; + const QString &commitString() const; + int replacementStart() const; + int replacementLength() const; +}; + +class QInputMethodQueryEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + explicit QInputMethodQueryEvent(Qt::InputMethodQueries queries); + virtual ~QInputMethodQueryEvent(); + Qt::InputMethodQueries queries() const; + void setValue(Qt::InputMethodQuery query, const QVariant &value); + QVariant value(Qt::InputMethodQuery query) const; +}; + +class QDropEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDropEvent(const QPointF &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = QEvent::Drop); + virtual ~QDropEvent(); + QPoint pos() const; + const QPointF &posF() const; + Qt::MouseButtons mouseButtons() const; + Qt::KeyboardModifiers keyboardModifiers() const; + Qt::DropActions possibleActions() const; + Qt::DropAction proposedAction() const; + void acceptProposedAction(); + Qt::DropAction dropAction() const; + void setDropAction(Qt::DropAction action); + QObject *source() const; + const QMimeData *mimeData() const; +}; + +class QDragMoveEvent : public QDropEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDragMoveEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = QEvent::DragMove); + virtual ~QDragMoveEvent(); + QRect answerRect() const; + void accept(); + void ignore(); + void accept(const QRect &r); + void ignore(const QRect &r); +}; + +class QDragEnterEvent : public QDragMoveEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDragEnterEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); + virtual ~QDragEnterEvent(); +}; + +class QDragLeaveEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QDragLeaveEvent(); + virtual ~QDragLeaveEvent(); +}; + +class QHelpEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QHelpEvent(QEvent::Type type, const QPoint &pos, const QPoint &globalPos); + virtual ~QHelpEvent(); + int x() const; + int y() const; + int globalX() const; + int globalY() const; + const QPoint &pos() const; + const QPoint &globalPos() const; +}; + +class QStatusTipEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + explicit QStatusTipEvent(const QString &tip); + virtual ~QStatusTipEvent(); + QString tip() const; +}; + +class QWhatsThisClickedEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + explicit QWhatsThisClickedEvent(const QString &href); + virtual ~QWhatsThisClickedEvent(); + QString href() const; +}; + +class QActionEvent : public QEvent +{ +%TypeHintCode +from PyQt5.QtWidgets import QAction +%End + +%TypeHeaderCode +#include +%End + +public: + QActionEvent(int type, QAction *action, QAction *before = 0); + virtual ~QActionEvent(); + QAction *action() const; + QAction *before() const; +}; + +class QFileOpenEvent : public QEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QFileOpenEvent(); + QString file() const; + QUrl url() const; + bool openFile(QFile &file, QIODevice::OpenMode flags) const; +}; + +class QShortcutEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QShortcutEvent(const QKeySequence &key, int id, bool ambiguous = false); + virtual ~QShortcutEvent(); + bool isAmbiguous() const; + const QKeySequence &key() const; + int shortcutId() const; +}; + +class QWindowStateChangeEvent : public QEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QWindowStateChangeEvent(); + Qt::WindowStates oldState() const; +}; + +class QTouchEvent : public QInputEvent +{ +%TypeHeaderCode +#include +%End + +public: + class TouchPoint /NoDefaultCtors/ + { +%TypeHeaderCode +#include +%End + + public: + int id() const; + Qt::TouchPointState state() const; + QPointF pos() const; + QPointF startPos() const; + QPointF lastPos() const; + QPointF scenePos() const; + QPointF startScenePos() const; + QPointF lastScenePos() const; + QPointF screenPos() const; + QPointF startScreenPos() const; + QPointF lastScreenPos() const; + QPointF normalizedPos() const; + QPointF startNormalizedPos() const; + QPointF lastNormalizedPos() const; + QRectF rect() const; + QRectF sceneRect() const; + QRectF screenRect() const; + qreal pressure() const; + + enum InfoFlag + { + Pen, +%If (Qt_5_8_0 -) + Token, +%End + }; + + typedef QFlags InfoFlags; + QVector2D velocity() const; + QTouchEvent::TouchPoint::InfoFlags flags() const; + QVector rawScreenPositions() const; +%If (Qt_5_8_0 -) + QPointingDeviceUniqueId uniqueId() const; +%End +%If (Qt_5_8_0 -) + qreal rotation() const; +%End +%If (Qt_5_9_0 -) + QSizeF ellipseDiameters() const; +%End + }; + + QTouchEvent(QEvent::Type eventType, QTouchDevice *device = 0, Qt::KeyboardModifiers modifiers = Qt::NoModifier, Qt::TouchPointStates touchPointStates = Qt::TouchPointStates(), const QList &touchPoints = QList()); + virtual ~QTouchEvent(); + QObject *target() const; + Qt::TouchPointStates touchPointStates() const; + const QList &touchPoints() const; + QWindow *window() const; + QTouchDevice *device() const; + void setDevice(QTouchDevice *adevice); +}; + +QFlags operator|(QTouchEvent::TouchPoint::InfoFlag f1, QFlags f2); +QFlags operator|(QTouchEvent::TouchPoint::InfoFlag f1, QTouchEvent::TouchPoint::InfoFlag f2); + +class QExposeEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + explicit QExposeEvent(const QRegion &rgn); + virtual ~QExposeEvent(); + const QRegion ®ion() const; +}; + +class QScrollPrepareEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + explicit QScrollPrepareEvent(const QPointF &startPos); + virtual ~QScrollPrepareEvent(); + QPointF startPos() const; + QSizeF viewportSize() const; + QRectF contentPosRange() const; + QPointF contentPos() const; + void setViewportSize(const QSizeF &size); + void setContentPosRange(const QRectF &rect); + void setContentPos(const QPointF &pos); +}; + +class QScrollEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + enum ScrollState + { + ScrollStarted, + ScrollUpdated, + ScrollFinished, + }; + + QScrollEvent(const QPointF &contentPos, const QPointF &overshoot, QScrollEvent::ScrollState scrollState); + virtual ~QScrollEvent(); + QPointF contentPos() const; + QPointF overshootDistance() const; + QScrollEvent::ScrollState scrollState() const; +}; + +bool operator==(QKeyEvent *e, QKeySequence::StandardKey key); +bool operator==(QKeySequence::StandardKey key, QKeyEvent *e); + +class QEnterEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + QEnterEvent(const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos); + virtual ~QEnterEvent(); + QPoint pos() const; + QPoint globalPos() const; + int x() const; + int y() const; + int globalX() const; + int globalY() const; + const QPointF &localPos() const; + const QPointF &windowPos() const; + const QPointF &screenPos() const; +}; + +class QAction /External/; +%If (Qt_5_2_0 -) + +class QNativeGestureEvent : public QInputEvent +{ +%TypeHeaderCode +#include +%End + +public: + QNativeGestureEvent(Qt::NativeGestureType type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, qreal value, ulong sequenceId, quint64 intArgument); +%If (Qt_5_10_0 -) + QNativeGestureEvent(Qt::NativeGestureType type, const QTouchDevice *dev, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, qreal value, ulong sequenceId, quint64 intArgument); +%End +%If (Qt_5_10_0 -) + virtual ~QNativeGestureEvent(); +%End + Qt::NativeGestureType gestureType() const; + qreal value() const; + const QPoint pos() const; + const QPoint globalPos() const; + const QPointF &localPos() const; + const QPointF &windowPos() const; + const QPointF &screenPos() const; +%If (Qt_5_10_0 -) + const QTouchDevice *device() const; +%End +}; + +%End +%If (Qt_5_5_0 -) + +class QPlatformSurfaceEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +public: + enum SurfaceEventType + { + SurfaceCreated, + SurfaceAboutToBeDestroyed, + }; + + explicit QPlatformSurfaceEvent(QPlatformSurfaceEvent::SurfaceEventType surfaceEventType); + virtual ~QPlatformSurfaceEvent(); + QPlatformSurfaceEvent::SurfaceEventType surfaceEventType() const; +}; + +%End +%If (Qt_5_8_0 -) + +class QPointingDeviceUniqueId +{ +%TypeHeaderCode +#include +%End + +public: + QPointingDeviceUniqueId(); + static QPointingDeviceUniqueId fromNumericId(qint64 id); + bool isValid() const; + qint64 numericId() const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +%End +%If (Qt_5_8_0 -) +bool operator==(QPointingDeviceUniqueId lhs, QPointingDeviceUniqueId rhs); +%End +%If (Qt_5_8_0 -) +bool operator!=(QPointingDeviceUniqueId lhs, QPointingDeviceUniqueId rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfont.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfont.sip new file mode 100644 index 0000000..df6c6e7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfont.sip @@ -0,0 +1,236 @@ +// qfont.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFont +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleHint + { + Helvetica, + SansSerif, + Times, + Serif, + Courier, + TypeWriter, + OldEnglish, + Decorative, + System, + AnyStyle, + Cursive, + Monospace, + Fantasy, + }; + + enum StyleStrategy + { + PreferDefault, + PreferBitmap, + PreferDevice, + PreferOutline, + ForceOutline, + PreferMatch, + PreferQuality, + PreferAntialias, + NoAntialias, +%If (Qt_5_4_0 -) + NoSubpixelAntialias, +%End + OpenGLCompatible, + NoFontMerging, + ForceIntegerMetrics, +%If (Qt_5_10_0 -) + PreferNoShaping, +%End + }; + + enum Weight + { +%If (Qt_5_5_0 -) + Thin, +%End +%If (Qt_5_5_0 -) + ExtraLight, +%End + Light, + Normal, +%If (Qt_5_5_0 -) + Medium, +%End + DemiBold, + Bold, +%If (Qt_5_5_0 -) + ExtraBold, +%End + Black, + }; + + enum Style + { + StyleNormal, + StyleItalic, + StyleOblique, + }; + + enum Stretch + { +%If (Qt_5_8_0 -) + AnyStretch, +%End + UltraCondensed, + ExtraCondensed, + Condensed, + SemiCondensed, + Unstretched, + SemiExpanded, + Expanded, + ExtraExpanded, + UltraExpanded, + }; + + QFont(); + QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false); + QFont(const QFont &, QPaintDevice *pd); + QFont(const QFont &); + QFont(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QFont(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QFont(); + QString family() const; + void setFamily(const QString &); + int pointSize() const; + void setPointSize(int); + qreal pointSizeF() const; + void setPointSizeF(qreal); + int pixelSize() const; + void setPixelSize(int); + int weight() const; + void setWeight(int); + void setStyle(QFont::Style style); + QFont::Style style() const; + bool underline() const; + void setUnderline(bool); + bool overline() const; + void setOverline(bool); + bool strikeOut() const; + void setStrikeOut(bool); + bool fixedPitch() const; + void setFixedPitch(bool); + bool kerning() const; + void setKerning(bool); + QFont::StyleHint styleHint() const; + QFont::StyleStrategy styleStrategy() const; + void setStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = QFont::PreferDefault); + void setStyleStrategy(QFont::StyleStrategy s); + int stretch() const; + void setStretch(int); + bool rawMode() const; + void setRawMode(bool); + bool exactMatch() const; + bool operator==(const QFont &) const; + bool operator!=(const QFont &) const; + bool operator<(const QFont &) const; + bool isCopyOf(const QFont &) const; + void setRawName(const QString &); + QString rawName() const; + QString key() const; + QString toString() const; + bool fromString(const QString &); + static QString substitute(const QString &); + static QStringList substitutes(const QString &); + static QStringList substitutions(); + static void insertSubstitution(const QString &, const QString &); + static void insertSubstitutions(const QString &, const QStringList &); + static void removeSubstitutions(const QString &); + static void initialize(); + static void cleanup(); + static void cacheStatistics(); + QString defaultFamily() const; + QString lastResortFamily() const; + QString lastResortFont() const; + QFont resolve(const QFont &) const; + bool bold() const; + void setBold(bool enable); + bool italic() const; + void setItalic(bool b); + + enum Capitalization + { + MixedCase, + AllUppercase, + AllLowercase, + SmallCaps, + Capitalize, + }; + + enum SpacingType + { + PercentageSpacing, + AbsoluteSpacing, + }; + + qreal letterSpacing() const; + QFont::SpacingType letterSpacingType() const; + void setLetterSpacing(QFont::SpacingType type, qreal spacing); + qreal wordSpacing() const; + void setWordSpacing(qreal spacing); + void setCapitalization(QFont::Capitalization); + QFont::Capitalization capitalization() const; + + enum HintingPreference + { + PreferDefaultHinting, + PreferNoHinting, + PreferVerticalHinting, + PreferFullHinting, + }; + + QString styleName() const; + void setStyleName(const QString &styleName); + void setHintingPreference(QFont::HintingPreference hintingPreference); + QFont::HintingPreference hintingPreference() const; + void swap(QFont &other /Constrained/); +%If (Qt_5_3_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +%If (Qt_5_13_0 -) + QStringList families() const; +%End +%If (Qt_5_13_0 -) + void setFamilies(const QStringList &); +%End +}; + +QDataStream &operator<<(QDataStream &, const QFont & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QFont & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontdatabase.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontdatabase.sip new file mode 100644 index 0000000..6549ab7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontdatabase.sip @@ -0,0 +1,112 @@ +// qfontdatabase.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFontDatabase +{ +%TypeHeaderCode +#include +%End + +public: + enum WritingSystem + { + Any, + Latin, + Greek, + Cyrillic, + Armenian, + Hebrew, + Arabic, + Syriac, + Thaana, + Devanagari, + Bengali, + Gurmukhi, + Gujarati, + Oriya, + Tamil, + Telugu, + Kannada, + Malayalam, + Sinhala, + Thai, + Lao, + Tibetan, + Myanmar, + Georgian, + Khmer, + SimplifiedChinese, + TraditionalChinese, + Japanese, + Korean, + Vietnamese, + Other, + Symbol, + Ogham, + Runic, + Nko, + }; + + static QList standardSizes(); + QFontDatabase(); + QList writingSystems() const; + QList writingSystems(const QString &family) const; + QStringList families(QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any) const; + QStringList styles(const QString &family) const; + QList pointSizes(const QString &family, const QString &style = QString()); + QList smoothSizes(const QString &family, const QString &style); + QString styleString(const QFont &font); + QString styleString(const QFontInfo &fontInfo); + QFont font(const QString &family, const QString &style, int pointSize) const; + bool isBitmapScalable(const QString &family, const QString &style = QString()) const; + bool isSmoothlyScalable(const QString &family, const QString &style = QString()) const; + bool isScalable(const QString &family, const QString &style = QString()) const; + bool isFixedPitch(const QString &family, const QString &style = QString()) const; + bool italic(const QString &family, const QString &style) const; + bool bold(const QString &family, const QString &style) const; + int weight(const QString &family, const QString &style) const; + static QString writingSystemName(QFontDatabase::WritingSystem writingSystem); + static QString writingSystemSample(QFontDatabase::WritingSystem writingSystem); + static int addApplicationFont(const QString &fileName); + static int addApplicationFontFromData(const QByteArray &fontData); + static QStringList applicationFontFamilies(int id); + static bool removeApplicationFont(int id); + static bool removeAllApplicationFonts(); + static bool supportsThreadedFontRendering(); +%If (Qt_5_2_0 -) + + enum SystemFont + { + GeneralFont, + FixedFont, + TitleFont, + SmallestReadableFont, + }; + +%End +%If (Qt_5_2_0 -) + static QFont systemFont(QFontDatabase::SystemFont type); +%End +%If (Qt_5_5_0 -) + bool isPrivateFamily(const QString &family) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontinfo.sip new file mode 100644 index 0000000..4f51c53 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontinfo.sip @@ -0,0 +1,47 @@ +// qfontinfo.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFontInfo +{ +%TypeHeaderCode +#include +%End + +public: + QFontInfo(const QFont &); + QFontInfo(const QFontInfo &); + ~QFontInfo(); + QString family() const; + int pixelSize() const; + int pointSize() const; + qreal pointSizeF() const; + bool italic() const; + QFont::Style style() const; + int weight() const; + bool bold() const; + bool fixedPitch() const; + QFont::StyleHint styleHint() const; + bool rawMode() const; + bool exactMatch() const; + QString styleName() const; + void swap(QFontInfo &other /Constrained/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontmetrics.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontmetrics.sip new file mode 100644 index 0000000..9579136 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qfontmetrics.sip @@ -0,0 +1,195 @@ +// qfontmetrics.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFontMetrics +{ +%TypeHeaderCode +#include +%End + +public: + explicit QFontMetrics(const QFont &); + QFontMetrics(const QFont &, QPaintDevice *pd); + QFontMetrics(const QFontMetrics &); + ~QFontMetrics(); + int ascent() const; + int descent() const; + int height() const; + int leading() const; + int lineSpacing() const; + int minLeftBearing() const; + int minRightBearing() const; + int maxWidth() const; + int xHeight() const; + bool inFont(QChar) const; + int leftBearing(QChar) const; + int rightBearing(QChar) const; + int width(QChar) const /PyName=widthChar/; + int width(const QString &text, int length = -1) const; + QRect boundingRect(QChar) const /PyName=boundingRectChar/; + QRect boundingRect(const QString &text) const; + QRect boundingRect(const QRect &rect, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; +%MethodCode + int *tabarray = qtgui_tabarray(a4); + + sipRes = new QRect(sipCpp->boundingRect(*a0, a1, *a2, a3, tabarray)); + + if (!tabarray) + delete[] tabarray; +%End + + QRect boundingRect(int x, int y, int width, int height, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; +%MethodCode + int *tabarray = qtgui_tabarray(a7); + + sipRes = new QRect(sipCpp->boundingRect(a0, a1, a2, a3, a4, *a5, a6, tabarray)); + + if (!tabarray) + delete[] tabarray; +%End + + QSize size(int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; +%MethodCode + int *tabarray = qtgui_tabarray(a3); + + sipRes = new QSize(sipCpp->size(a0, *a1, a2, tabarray)); + + if (!tabarray) + delete[] tabarray; +%End + + int underlinePos() const; + int overlinePos() const; + int strikeOutPos() const; + int lineWidth() const; + int averageCharWidth() const; + QString elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const; + bool operator==(const QFontMetrics &other) const; + bool operator!=(const QFontMetrics &other) const; + QRect tightBoundingRect(const QString &text) const; + bool inFontUcs4(uint character) const; + void swap(QFontMetrics &other /Constrained/); +%If (Qt_5_8_0 -) + int capHeight() const; +%End +%If (Qt_5_11_0 -) + int horizontalAdvance(const QString &, int length = -1) const; +%End +%If (Qt_5_14_0 -) + qreal fontDpi() const; +%End +}; + +class QFontMetricsF +{ +%TypeHeaderCode +#include +%End + +public: + explicit QFontMetricsF(const QFont &); + QFontMetricsF(const QFont &, QPaintDevice *pd); + QFontMetricsF(const QFontMetrics &); + QFontMetricsF(const QFontMetricsF &); + ~QFontMetricsF(); + qreal ascent() const; + qreal descent() const; + qreal height() const; + qreal leading() const; + qreal lineSpacing() const; + qreal minLeftBearing() const; + qreal minRightBearing() const; + qreal maxWidth() const; + qreal xHeight() const; + bool inFont(QChar) const; + qreal leftBearing(QChar) const; + qreal rightBearing(QChar) const; + qreal width(QChar) const /PyName=widthChar/; + qreal width(const QString &string) const; + QRectF boundingRect(QChar) const /PyName=boundingRectChar/; + QRectF boundingRect(const QString &string) const; + QRectF boundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; +%MethodCode + int *tabarray = qtgui_tabarray(a4); + + sipRes = new QRectF(sipCpp->boundingRect(*a0, a1, *a2, a3, tabarray)); + + if (!tabarray) + delete[] tabarray; +%End + + QSizeF size(int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,TypeHint="Optional[List[int]]"/ = 0) const; +%MethodCode + int *tabarray = qtgui_tabarray(a3); + + sipRes = new QSizeF(sipCpp->size(a0, *a1, a2, tabarray)); + + if (!tabarray) + delete[] tabarray; +%End + + qreal underlinePos() const; + qreal overlinePos() const; + qreal strikeOutPos() const; + qreal lineWidth() const; + qreal averageCharWidth() const; + QString elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const; + bool operator==(const QFontMetricsF &other) const; + bool operator!=(const QFontMetricsF &other) const; + QRectF tightBoundingRect(const QString &text) const; + bool inFontUcs4(uint character) const; + void swap(QFontMetricsF &other /Constrained/); +%If (Qt_5_8_0 -) + qreal capHeight() const; +%End +%If (Qt_5_11_0 -) + qreal horizontalAdvance(const QString &string, int length = -1) const; +%End +%If (Qt_5_14_0 -) + qreal fontDpi() const; +%End +}; + +%ModuleHeaderCode +// Used by QFontMetrics and QFontMetricsF. +int *qtgui_tabarray(PyObject *l); +%End + +%ModuleCode +// Convert an optional Python list to a 0 terminated array of integers on the +// heap. +int *qtgui_tabarray(PyObject *l) +{ + if (!l || l == Py_None) + return 0; + + int *arr = new int[PyList_Size(l) + 1]; + Py_ssize_t i; + + for (i = 0; i < PyList_Size(l); ++i) + arr[i] = SIPLong_AsLong(PyList_GetItem(l, i)); + + arr[i] = 0; + + return arr; +} +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qgenericmatrix.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qgenericmatrix.sip new file mode 100644 index 0000000..2c49287 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qgenericmatrix.sip @@ -0,0 +1,1214 @@ +// qgenericmatrix.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +// The implementation of QMatrix4x3. +class QMatrix4x3 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[12]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"dddddddddddd", + (double)data[0], (double)data[1], (double)data[2], + (double)data[3], (double)data[4], (double)data[5], + (double)data[6], (double)data[7], (double)data[8], + (double)data[9], (double)data[10], (double)data[11]); +%End + +public: + QMatrix4x3(); + QMatrix4x3(const QMatrix4x3 &other); + explicit QMatrix4x3(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); +%MethodCode + PYQT_FLOAT values[12]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 12, values)) == sipErrorNone) + sipCpp = new QMatrix4x3(values); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[12]; + PYQT_FLOAT data[12]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 12; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { +#if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix4x3(" + "%R, %R, %R, " + "%R, %R, %R, " + "%R, %R, %R, " + "%R, %R, %R)", + m[0], m[1], m[2], + m[3], m[4], m[5], + m[6], m[7], m[8], + m[9], m[10], m[11]); +#else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix4x3("); + + for (i = 0; i < 12; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); +#endif + } + + for (i = 0; i < 12; ++i) + Py_XDECREF(m[i]); +%End + + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(12, sipCpp->constData(), &sipRes); +%End + + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + PYQT_FLOAT values[12]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(12, values, &sipRes); +%End + + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 4, 3, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + +%If (Qt_5_0_0 -) + void __setitem__(SIP_PYOBJECT, float); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 4, 3, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End +%If (- Qt_5_0_0) + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 4, 3, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End + + bool isIdentity() const; + void setToIdentity(); + +%If (Qt_5_0_0 -) + void fill(float value); +%End +%If (- Qt_5_0_0) + void fill(qreal value); +%End + + QMatrix3x4 transposed() const; + + QMatrix4x3 &operator+=(const QMatrix4x3 &); + QMatrix4x3 &operator-=(const QMatrix4x3 &); + +%If (Qt_5_0_0 -) + QMatrix4x3 &operator*=(float); + QMatrix4x3 &operator/=(float); +%End +%If (- Qt_5_0_0) + QMatrix4x3 &operator*=(qreal); + QMatrix4x3 &operator/=(qreal); +%End + + bool operator==(const QMatrix4x3 &) const; + bool operator!=(const QMatrix4x3 &) const; +}; +// The implementation of QMatrix4x2. +class QMatrix4x2 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[8]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"dddddddd", + (double)data[0], (double)data[1], + (double)data[2], (double)data[3], + (double)data[4], (double)data[5], + (double)data[6], (double)data[7]); +%End + +public: + QMatrix4x2(); + QMatrix4x2(const QMatrix4x2 &other); + explicit QMatrix4x2(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); +%MethodCode + PYQT_FLOAT values[8]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 8, values)) == sipErrorNone) + sipCpp = new QMatrix4x2(values); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[8]; + PYQT_FLOAT data[8]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 8; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { +#if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix4x2(" + "%R, %R, " + "%R, %R, " + "%R, %R, " + "%R, %R)", + m[0], m[1], + m[2], m[3], + m[4], m[5], + m[6], m[7]); +#else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix4x2("); + + for (i = 0; i < 8; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); +#endif + } + + for (i = 0; i < 8; ++i) + Py_XDECREF(m[i]); +%End + + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(8, sipCpp->constData(), &sipRes); +%End + + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + PYQT_FLOAT values[8]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(8, values, &sipRes); +%End + + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 4, 2, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + +%If (Qt_5_0_0 -) + void __setitem__(SIP_PYOBJECT, float); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 4, 2, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End +%If (- Qt_5_0_0) + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 4, 2, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End + + bool isIdentity() const; + void setToIdentity(); + +%If (Qt_5_0_0 -) + void fill(float value); +%End +%If (- Qt_5_0_0) + void fill(qreal value); +%End + + QMatrix2x4 transposed() const; + + QMatrix4x2 &operator+=(const QMatrix4x2 &); + QMatrix4x2 &operator-=(const QMatrix4x2 &); + +%If (Qt_5_0_0 -) + QMatrix4x2 &operator*=(float); + QMatrix4x2 &operator/=(float); +%End +%If (- Qt_5_0_0) + QMatrix4x2 &operator*=(qreal); + QMatrix4x2 &operator/=(qreal); +%End + + bool operator==(const QMatrix4x2 &) const; + bool operator!=(const QMatrix4x2 &) const; +}; +// The implementation of QMatrix3x4. +class QMatrix3x4 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[12]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"dddddddddddd", + (double)data[0], (double)data[1], (double)data[2], + (double)data[3], (double)data[4], (double)data[5], + (double)data[6], (double)data[7], (double)data[8], + (double)data[9], (double)data[10], (double)data[11]); +%End + +public: + QMatrix3x4(); + QMatrix3x4(const QMatrix3x4 &other); + explicit QMatrix3x4(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); +%MethodCode + PYQT_FLOAT values[12]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 12, values)) == sipErrorNone) + sipCpp = new QMatrix3x4(values); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[12]; + PYQT_FLOAT data[12]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 12; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { +#if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix3x4(" + "%R, %R, %R, " + "%R, %R, %R, " + "%R, %R, %R, " + "%R, %R, %R)", + m[0], m[1], m[2], + m[3], m[4], m[5], + m[6], m[7], m[8], + m[9], m[10], m[11]); +#else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix3x4("); + + for (i = 0; i < 12; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); +#endif + } + + for (i = 0; i < 12; ++i) + Py_XDECREF(m[i]); +%End + + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(12, sipCpp->constData(), &sipRes); +%End + + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + PYQT_FLOAT values[12]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(12, values, &sipRes); +%End + + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 4, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + +%If (Qt_5_0_0 -) + void __setitem__(SIP_PYOBJECT, float); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 4, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End +%If (- Qt_5_0_0) + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 4, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End + + bool isIdentity() const; + void setToIdentity(); + +%If (Qt_5_0_0 -) + void fill(qreal value); +%End +%If (- Qt_5_0_0) + void fill(qreal value); +%End + + QMatrix4x3 transposed() const; + + QMatrix3x4 &operator+=(const QMatrix3x4 &); + QMatrix3x4 &operator-=(const QMatrix3x4 &); + +%If (Qt_5_0_0 -) + QMatrix3x4 &operator*=(float); + QMatrix3x4 &operator/=(float); +%End +%If (- Qt_5_0_0) + QMatrix3x4 &operator*=(qreal); + QMatrix3x4 &operator/=(qreal); +%End + + bool operator==(const QMatrix3x4 &) const; + bool operator!=(const QMatrix3x4 &) const; +}; +// The implementation of QMatrix3x3. +class QMatrix3x3 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[9]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"ddddddddd", + (double)data[0], (double)data[1], (double)data[2], + (double)data[3], (double)data[4], (double)data[5], + (double)data[6], (double)data[7], (double)data[8]); +%End + +public: + QMatrix3x3(); + QMatrix3x3(const QMatrix3x3 &other); + explicit QMatrix3x3(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); +%MethodCode + PYQT_FLOAT values[9]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 9, values)) == sipErrorNone) + sipCpp = new QMatrix3x3(values); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[9]; + PYQT_FLOAT data[9]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 9; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { +#if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix3x3(" + "%R, %R, %R, " + "%R, %R, %R, " + "%R, %R, %R)", + m[0], m[1], m[2], + m[3], m[4], m[5], + m[6], m[7], m[8]); +#else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix3x3("); + + for (i = 0; i < 9; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); +#endif + } + + for (i = 0; i < 9; ++i) + Py_XDECREF(m[i]); +%End + + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(9, sipCpp->constData(), &sipRes); +%End + + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + PYQT_FLOAT values[9]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(9, values, &sipRes); +%End + + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 3, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + +%If (Qt_5_0_0 -) + void __setitem__(SIP_PYOBJECT, float); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 3, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End +%If (- Qt_5_0_0) + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 3, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End + + bool isIdentity() const; + void setToIdentity(); + +%If (Qt_5_0_0 -) + void fill(float value); +%End +%If (- Qt_5_0_0) + void fill(qreal value); +%End + + QMatrix3x3 transposed() const; + + QMatrix3x3 &operator+=(const QMatrix3x3 &); + QMatrix3x3 &operator-=(const QMatrix3x3 &); + +%If (Qt_5_0_0 -) + QMatrix3x3 &operator*=(float); + QMatrix3x3 &operator/=(float); +%End +%If (- Qt_5_0_0) + QMatrix3x3 &operator*=(qreal); + QMatrix3x3 &operator/=(qreal); +%End + + bool operator==(const QMatrix3x3 &) const; + bool operator!=(const QMatrix3x3 &) const; +}; +// The implementation of QMatrix3x2. +class QMatrix3x2 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[6]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"dddddd", + (double)data[0], (double)data[1], + (double)data[2], (double)data[3], + (double)data[4], (double)data[5]); +%End + +public: + QMatrix3x2(); + QMatrix3x2(const QMatrix3x2 &other); + explicit QMatrix3x2(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); +%MethodCode + PYQT_FLOAT values[6]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 6, values)) == sipErrorNone) + sipCpp = new QMatrix3x2(values); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[6]; + PYQT_FLOAT data[6]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 6; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { +#if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix3x2(" + "%R, %R, " + "%R, %R, " + "%R, %R)", + m[0], m[1], + m[2], m[3], + m[4], m[5]); +#else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix3x2("); + + for (i = 0; i < 6; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); +#endif + } + + for (i = 0; i < 6; ++i) + Py_XDECREF(m[i]); +%End + + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(6, sipCpp->constData(), &sipRes); +%End + + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + PYQT_FLOAT values[6]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(6, values, &sipRes); +%End + + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 2, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + +%If (Qt_5_0_0 -) + void __setitem__(SIP_PYOBJECT, float); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 2, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End +%If (- Qt_5_0_0) + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 3, 2, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End + + bool isIdentity() const; + void setToIdentity(); + +%If (Qt_5_0_0 -) + void fill(float value); +%End +%If (- Qt_5_0_0) + void fill(qreal value); +%End + + QMatrix2x3 transposed() const; + + QMatrix3x2 &operator+=(const QMatrix3x2 &); + QMatrix3x2 &operator-=(const QMatrix3x2 &); + +%If (Qt_5_0_0 -) + QMatrix3x2 &operator*=(float); + QMatrix3x2 &operator/=(float); +%End +%If (- Qt_5_0_0) + QMatrix3x2 &operator*=(qreal); + QMatrix3x2 &operator/=(qreal); +%End + + bool operator==(const QMatrix3x2 &) const; + bool operator!=(const QMatrix3x2 &) const; +}; +// The implementation of QMatrix2x4. +class QMatrix2x4 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[8]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"dddddddd", + (double)data[0], (double)data[1], (double)data[2], (double)data[3], + (double)data[4], (double)data[5], (double)data[6], (double)data[7]); +%End + +public: + QMatrix2x4(); + QMatrix2x4(const QMatrix2x4 &other); + explicit QMatrix2x4(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); +%MethodCode + PYQT_FLOAT values[8]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 8, values)) == sipErrorNone) + sipCpp = new QMatrix2x4(values); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[8]; + PYQT_FLOAT data[8]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 8; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { +#if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix2x4(" + "%R, %R, %R, %R, " + "%R, %R, %R, %R)", + m[0], m[1], m[2], m[3], + m[4], m[5], m[6], m[7]); +#else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix2x4("); + + for (i = 0; i < 8; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); +#endif + } + + for (i = 0; i < 8; ++i) + Py_XDECREF(m[i]); +%End + + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(8, sipCpp->constData(), &sipRes); +%End + + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + PYQT_FLOAT values[8]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(8, values, &sipRes); +%End + + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 4, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + +%If (Qt_5_0_0 -) + void __setitem__(SIP_PYOBJECT, float); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 4, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End +%If (- Qt_5_0_0) + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 4, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End + + bool isIdentity() const; + void setToIdentity(); + +%If (Qt_5_0_0 -) + void fill(float value); +%End +%If (- Qt_5_0_0) + void fill(qreal value); +%End + + QMatrix4x2 transposed() const; + + QMatrix2x4 &operator+=(const QMatrix2x4 &); + QMatrix2x4 &operator-=(const QMatrix2x4 &); + +%If (Qt_5_0_0 -) + QMatrix2x4 &operator*=(float); + QMatrix2x4 &operator/=(float); +%End +%If (- Qt_5_0_0) + QMatrix2x4 &operator*=(qreal); + QMatrix2x4 &operator/=(qreal); +%End + + bool operator==(const QMatrix2x4 &) const; + bool operator!=(const QMatrix2x4 &) const; +}; +// The implementation of QMatrix2x3. +class QMatrix2x3 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[6]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"dddddd", + (double)data[0], (double)data[1], (double)data[2], + (double)data[3], (double)data[4], (double)data[5]); +%End + +public: + QMatrix2x3(); + QMatrix2x3(const QMatrix2x3 &other); + explicit QMatrix2x3(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); +%MethodCode + PYQT_FLOAT values[6]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 6, values)) == sipErrorNone) + sipCpp = new QMatrix2x3(values); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[6]; + PYQT_FLOAT data[6]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 6; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { +#if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix2x3(" + "%R, %R, %R, " + "%R, %R, %R)", + m[0], m[1], m[2], + m[3], m[4], m[5]); +#else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix2x3("); + + for (i = 0; i < 6; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); +#endif + } + + for (i = 0; i < 6; ++i) + Py_XDECREF(m[i]); +%End + + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(6, sipCpp->constData(), &sipRes); +%End + + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + PYQT_FLOAT values[6]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(6, values, &sipRes); +%End + + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 3, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + +%If (Qt_5_0_0 -) + void __setitem__(SIP_PYOBJECT, float); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 3, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End +%If (- Qt_5_0_0) + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 3, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End + + bool isIdentity() const; + void setToIdentity(); + +%If (Qt_5_0_0 -) + void fill(float value); +%End +%If (- Qt_5_0_0) + void fill(qreal value); +%End + + QMatrix3x2 transposed() const; + + QMatrix2x3 &operator+=(const QMatrix2x3 &); + QMatrix2x3 &operator-=(const QMatrix2x3 &); + +%If (Qt_5_0_0 -) + QMatrix2x3 &operator*=(float); + QMatrix2x3 &operator/=(float); +%End +%If (- Qt_5_0_0) + QMatrix2x3 &operator*=(qreal); + QMatrix2x3 &operator/=(qreal); +%End + + bool operator==(const QMatrix2x3 &) const; + bool operator!=(const QMatrix2x3 &) const; +}; +// The implementation of QMatrix2x2. +class QMatrix2x2 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[4]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"dddd", + (double)data[0], (double)data[1], + (double)data[2], (double)data[3]); +%End + +public: + QMatrix2x2(); + QMatrix2x2(const QMatrix2x2 &other); + explicit QMatrix2x2(SIP_PYOBJECT values /TypeHint="Sequence[float]"/); +%MethodCode + PYQT_FLOAT values[4]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 4, values)) == sipErrorNone) + sipCpp = new QMatrix2x2(values); +%End + + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[4]; + PYQT_FLOAT data[4]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 4; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { +#if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix2x2(" + "%R, %R, " + "%R, %R)", + m[0], m[1], + m[2], m[3]); +#else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix2x2("); + + for (i = 0; i < 4; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); +#endif + } + + for (i = 0; i < 4; ++i) + Py_XDECREF(m[i]); +%End + + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(4, sipCpp->constData(), &sipRes); +%End + + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + PYQT_FLOAT values[4]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(4, values, &sipRes); +%End + + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 2, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + +%If (Qt_5_0_0 -) + void __setitem__(SIP_PYOBJECT, float); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 2, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End +%If (- Qt_5_0_0) + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 2, 2, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End +%End + + bool isIdentity() const; + void setToIdentity(); + +%If (Qt_5_0_0 -) + void fill(float value); +%End +%If (- Qt_5_0_0) + void fill(qreal value); +%End + + QMatrix2x2 transposed() const; + + QMatrix2x2 &operator+=(const QMatrix2x2 &); + QMatrix2x2 &operator-=(const QMatrix2x2 &); + +%If (Qt_5_0_0 -) + QMatrix2x2 &operator*=(float); + QMatrix2x2 &operator/=(float); +%End +%If (- Qt_5_0_0) + QMatrix2x2 &operator*=(qreal); + QMatrix2x2 &operator/=(qreal); +%End + + bool operator==(const QMatrix2x2 &) const; + bool operator!=(const QMatrix2x2 &) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qglyphrun.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qglyphrun.sip new file mode 100644 index 0000000..a45fdcb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qglyphrun.sip @@ -0,0 +1,72 @@ +// qglyphrun.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_RawFont) + +class QGlyphRun +{ +%TypeHeaderCode +#include +%End + +public: + QGlyphRun(); + QGlyphRun(const QGlyphRun &other); + ~QGlyphRun(); + QRawFont rawFont() const; + void setRawFont(const QRawFont &rawFont); + QVector glyphIndexes() const; + void setGlyphIndexes(const QVector &glyphIndexes); + QVector positions() const; + void setPositions(const QVector &positions); + void clear(); + bool operator==(const QGlyphRun &other) const; + bool operator!=(const QGlyphRun &other) const; + void setOverline(bool overline); + bool overline() const; + void setUnderline(bool underline); + bool underline() const; + void setStrikeOut(bool strikeOut); + bool strikeOut() const; + + enum GlyphRunFlag + { + Overline, + Underline, + StrikeOut, + RightToLeft, + SplitLigature, + }; + + typedef QFlags GlyphRunFlags; + void setRightToLeft(bool on); + bool isRightToLeft() const; + void setFlag(QGlyphRun::GlyphRunFlag flag, bool enabled = true); + void setFlags(QGlyphRun::GlyphRunFlags flags); + QGlyphRun::GlyphRunFlags flags() const; + void setBoundingRect(const QRectF &boundingRect); + QRectF boundingRect() const; + bool isEmpty() const; + void swap(QGlyphRun &other /Constrained/); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qguiapplication.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qguiapplication.sip new file mode 100644 index 0000000..5fc8e7a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qguiapplication.sip @@ -0,0 +1,357 @@ +// qguiapplication.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGuiApplication : public QCoreApplication +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + #if QT_VERSION >= 0x050100 && defined(SIP_FEATURE_PyQt_Desktop_OpenGL) + {sipName_QOpenGLTimeMonitor, &sipType_QOpenGLTimeMonitor, -1, 1}, + #else + {0, 0, -1, 1}, + #endif + {sipName_QSyntaxHighlighter, &sipType_QSyntaxHighlighter, -1, 2}, + {sipName_QWindow, &sipType_QWindow, 25, 3}, + {sipName_QPdfWriter, &sipType_QPdfWriter, -1, 4}, + {sipName_QMovie, &sipType_QMovie, -1, 5}, + #if defined(SIP_FEATURE_PyQt_SessionManager) + {sipName_QSessionManager, &sipType_QSessionManager, -1, 6}, + #else + {0, 0, -1, 6}, + #endif + {sipName_QAbstractTextDocumentLayout, &sipType_QAbstractTextDocumentLayout, -1, 7}, + {sipName_QScreen, &sipType_QScreen, -1, 8}, + {sipName_QTextObject, &sipType_QTextObject, 28, 9}, + {sipName_QStandardItemModel, &sipType_QStandardItemModel, -1, 10}, + {sipName_QDrag, &sipType_QDrag, -1, 11}, + #if defined(SIP_FEATURE_PyQt_OpenGL) + {sipName_QOpenGLContextGroup, &sipType_QOpenGLContextGroup, -1, 12}, + #else + {0, 0, -1, 12}, + #endif + {sipName_QValidator, &sipType_QValidator, 32, 13}, + {sipName_QTextDocument, &sipType_QTextDocument, -1, 14}, + #if QT_VERSION >= 0x050100 && defined(SIP_FEATURE_PyQt_OpenGL) + {sipName_QOpenGLVertexArrayObject, &sipType_QOpenGLVertexArrayObject, -1, 15}, + #else + {0, 0, -1, 15}, + #endif + #if QT_VERSION >= 0x050100 && defined(SIP_FEATURE_PyQt_OpenGL) + {sipName_QOpenGLDebugLogger, &sipType_QOpenGLDebugLogger, -1, 16}, + #else + {0, 0, -1, 16}, + #endif + {sipName_QGuiApplication, &sipType_QGuiApplication, -1, 17}, + #if QT_VERSION >= 0x050100 && defined(SIP_FEATURE_PyQt_Desktop_OpenGL) + {sipName_QOpenGLTimerQuery, &sipType_QOpenGLTimerQuery, -1, 18}, + #else + {0, 0, -1, 18}, + #endif + #if QT_VERSION >= 0x050100 + {sipName_QOffscreenSurface, &sipType_QOffscreenSurface, -1, 19}, + #else + {0, 0, -1, 19}, + #endif + #if defined(SIP_FEATURE_PyQt_OpenGL) + {sipName_QOpenGLShaderProgram, &sipType_QOpenGLShaderProgram, -1, 20}, + #else + {0, 0, -1, 20}, + #endif + {sipName_QStyleHints, &sipType_QStyleHints, -1, 21}, + {sipName_QClipboard, &sipType_QClipboard, -1, 22}, + #if defined(SIP_FEATURE_PyQt_OpenGL) + {sipName_QOpenGLShader, &sipType_QOpenGLShader, -1, 23}, + #else + {0, 0, -1, 23}, + #endif + #if defined(SIP_FEATURE_PyQt_OpenGL) + {sipName_QOpenGLContext, &sipType_QOpenGLContext, -1, 24}, + #else + {0, 0, -1, 24}, + #endif + {sipName_QInputMethod, &sipType_QInputMethod, -1, -1}, + #if QT_VERSION >= 0x050400 + {sipName_QPaintDeviceWindow, &sipType_QPaintDeviceWindow, 26, -1}, + #else + {0, 0, 26, -1}, + #endif + #if QT_VERSION >= 0x050400 && defined(SIP_FEATURE_PyQt_OpenGL) + {sipName_QOpenGLWindow, &sipType_QOpenGLWindow, -1, 27}, + #else + {0, 0, -1, 27}, + #endif + #if QT_VERSION >= 0x050400 + {sipName_QRasterWindow, &sipType_QRasterWindow, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + {sipName_QTextBlockGroup, &sipType_QTextBlockGroup, 30, 29}, + {sipName_QTextFrame, &sipType_QTextFrame, 31, -1}, + {sipName_QTextList, &sipType_QTextList, -1, -1}, + {sipName_QTextTable, &sipType_QTextTable, -1, -1}, + #if QT_VERSION >= 0x050100 + {sipName_QRegularExpressionValidator, &sipType_QRegularExpressionValidator, -1, 33}, + #else + {0, 0, -1, 33}, + #endif + {sipName_QIntValidator, &sipType_QIntValidator, -1, 34}, + {sipName_QDoubleValidator, &sipType_QDoubleValidator, -1, 35}, + {sipName_QRegExpValidator, &sipType_QRegExpValidator, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + QGuiApplication(SIP_PYLIST argv /TypeHint="List[str]"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv, int = ApplicationFlags)]; +%MethodCode + // The Python interface is a list of argument strings that is modified. + + int argc; + char **argv; + + // Convert the list. + if ((argv = pyqt5_qtgui_from_argv_list(a0, argc)) == NULL) + sipIsErr = 1; + else + { + // Create it now the arguments are right. + static int nargc; + nargc = argc; + + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQGuiApplication(nargc, argv, QCoreApplication::ApplicationFlags); + Py_END_ALLOW_THREADS + + // Now modify the original list. + pyqt5_qtgui_update_argv_list(a0, argc, argv); + } +%End + + virtual ~QGuiApplication() /ReleaseGIL/; +%MethodCode + pyqt5_qtgui_cleanup_qobjects(); +%End + + static QWindowList allWindows(); + static QWindowList topLevelWindows(); + static QWindow *topLevelAt(const QPoint &pos); + static QString platformName(); + static QWindow *focusWindow(); + static QObject *focusObject(); + static QScreen *primaryScreen(); + static QList screens(); + static QCursor *overrideCursor(); + static void setOverrideCursor(const QCursor &); + static void changeOverrideCursor(const QCursor &); + static void restoreOverrideCursor(); + static QFont font(); + static void setFont(const QFont &); + static QClipboard *clipboard(); + static QPalette palette(); + static void setPalette(const QPalette &pal); + static Qt::KeyboardModifiers keyboardModifiers(); + static Qt::KeyboardModifiers queryKeyboardModifiers(); + static Qt::MouseButtons mouseButtons(); + static void setLayoutDirection(Qt::LayoutDirection direction); + static Qt::LayoutDirection layoutDirection(); + static bool isRightToLeft(); + static bool isLeftToRight(); + static void setDesktopSettingsAware(bool on); + static bool desktopSettingsAware(); + static void setQuitOnLastWindowClosed(bool quit); + static bool quitOnLastWindowClosed(); + static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%If (Py_v3) + static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; +%End + virtual bool notify(QObject *, QEvent *); + +signals: + void fontDatabaseChanged(); + void screenAdded(QScreen *screen); + void lastWindowClosed(); + void focusObjectChanged(QObject *focusObject); +%If (PyQt_SessionManager) + void commitDataRequest(QSessionManager &sessionManager); +%End +%If (PyQt_SessionManager) + void saveStateRequest(QSessionManager &sessionManager); +%End + void focusWindowChanged(QWindow *focusWindow); +%If (Qt_5_2_0 -) + void applicationStateChanged(Qt::ApplicationState state); +%End +%If (Qt_5_8_0 -) + void applicationDisplayNameChanged(); +%End + +public: + static void setApplicationDisplayName(const QString &name); + static QString applicationDisplayName(); + static QWindow *modalWindow(); + static QStyleHints *styleHints(); + static QInputMethod *inputMethod(); + qreal devicePixelRatio() const; +%If (PyQt_SessionManager) + bool isSessionRestored() const; +%End +%If (PyQt_SessionManager) + QString sessionId() const; +%End +%If (PyQt_SessionManager) + QString sessionKey() const; +%End +%If (PyQt_SessionManager) + bool isSavingSession() const; +%End +%If (Qt_5_2_0 -) + static Qt::ApplicationState applicationState(); +%End +%If (Qt_5_2_0 -) + static void sync(); +%End +%If (Qt_5_3_0 -) + static void setWindowIcon(const QIcon &icon); +%End +%If (Qt_5_3_0 -) + static QIcon windowIcon(); +%End + +protected: + virtual bool event(QEvent *); + +signals: +%If (Qt_5_4_0 -) + void screenRemoved(QScreen *screen); +%End +%If (Qt_5_4_0 -) + void layoutDirectionChanged(Qt::LayoutDirection direction); +%End +%If (Qt_5_4_0 -) + void paletteChanged(const QPalette &pal); +%End + +public: +%If (Qt_5_6_0 -) +%If (PyQt_SessionManager) + static bool isFallbackSessionManagementEnabled(); +%End +%End +%If (Qt_5_6_0 -) +%If (PyQt_SessionManager) + static void setFallbackSessionManagementEnabled(bool); +%End +%End + +signals: +%If (Qt_5_6_0 -) + void primaryScreenChanged(QScreen *screen); +%End + +public: +%If (Qt_5_7_0 -) + static void setDesktopFileName(const QString &name); +%End +%If (Qt_5_7_0 -) + static QString desktopFileName(); +%End +%If (Qt_5_10_0 -) + static QScreen *screenAt(const QPoint &point); +%End + +signals: +%If (Qt_5_11_0 -) + void fontChanged(const QFont &font); +%End + +public: +%If (Qt_5_14_0 -) + static void setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy policy); +%End +%If (Qt_5_14_0 -) + static Qt::HighDpiScaleFactorRoundingPolicy highDpiScaleFactorRoundingPolicy(); +%End +}; + +%ModuleHeaderCode +// Imports from QtCore. +typedef void (*pyqt5_qtgui_cleanup_qobjects_t)(); +extern pyqt5_qtgui_cleanup_qobjects_t pyqt5_qtgui_cleanup_qobjects; + +typedef char **(*pyqt5_qtgui_from_argv_list_t)(PyObject *, int &); +extern pyqt5_qtgui_from_argv_list_t pyqt5_qtgui_from_argv_list; + +typedef void (*pyqt5_qtgui_update_argv_list_t)(PyObject *, int, char **); +extern pyqt5_qtgui_update_argv_list_t pyqt5_qtgui_update_argv_list; +%End + +%ModuleCode +// Imports from QtCore. +pyqt5_qtgui_cleanup_qobjects_t pyqt5_qtgui_cleanup_qobjects; +pyqt5_qtgui_from_argv_list_t pyqt5_qtgui_from_argv_list; +pyqt5_qtgui_update_argv_list_t pyqt5_qtgui_update_argv_list; + +// Forward declarations not in any header files but are part of the API. +void qt_set_sequence_auto_mnemonic(bool enable); +%End + +%InitialisationCode +// Export our own helpers. +sipExportSymbol("qtgui_wrap_ancestors", (void *)qtgui_wrap_ancestors); +%End + +%PostInitialisationCode +// Imports from QtCore. +pyqt5_qtgui_cleanup_qobjects = (pyqt5_qtgui_cleanup_qobjects_t)sipImportSymbol("pyqt5_cleanup_qobjects"); +Q_ASSERT(pyqt5_qtgui_cleanup_qobjects); + +pyqt5_qtgui_from_argv_list = (pyqt5_qtgui_from_argv_list_t)sipImportSymbol("pyqt5_from_argv_list"); +Q_ASSERT(pyqt5_qtgui_from_argv_list); + +pyqt5_qtgui_update_argv_list = (pyqt5_qtgui_update_argv_list_t)sipImportSymbol("pyqt5_update_argv_list"); +Q_ASSERT(pyqt5_qtgui_update_argv_list); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qicon.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qicon.sip new file mode 100644 index 0000000..8c22c7b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qicon.sip @@ -0,0 +1,123 @@ +// qicon.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QIcon /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + enum Mode + { + Normal, + Disabled, + Active, + Selected, + }; + + enum State + { + On, + Off, + }; + + QIcon(); + QIcon(const QPixmap &pixmap); + QIcon(const QIcon &other); + explicit QIcon(const QString &fileName); + explicit QIcon(QIconEngine *engine /GetWrapper/); +%MethodCode + sipCpp = new QIcon(a0); + + // The QIconEngine is implicitly shared by copies of the QIcon and is destroyed + // by C++ when the last copy is destroyed. Therefore we need to transfer + // ownership but not to associate it with this QIcon. The Python object will + // get tidied up when the virtual dtor gets called. + sipTransferTo(a0Wrapper, Py_None); +%End + + QIcon(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QIcon(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QIcon(); + QPixmap pixmap(const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; + QPixmap pixmap(int w, int h, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; + QPixmap pixmap(int extent, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; +%If (Qt_5_1_0 -) + QPixmap pixmap(QWindow *window, const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; +%End + QSize actualSize(const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; +%If (Qt_5_1_0 -) + QSize actualSize(QWindow *window, const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; +%End + QList availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; + void paint(QPainter *painter, const QRect &rect, Qt::Alignment alignment = Qt::AlignCenter, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; + void paint(QPainter *painter, int x, int y, int w, int h, Qt::Alignment alignment = Qt::AlignCenter, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; + bool isNull() const; + bool isDetached() const; + void addPixmap(const QPixmap &pixmap, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off); + void addFile(const QString &fileName, const QSize &size = QSize(), QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off); + qint64 cacheKey() const; +%If (Qt_5_7_0 -) + static QIcon fromTheme(const QString &name); +%End +%If (Qt_5_7_0 -) + static QIcon fromTheme(const QString &name, const QIcon &fallback); +%End +%If (- Qt_5_7_0) + static QIcon fromTheme(const QString &name, const QIcon &fallback = QIcon()); +%End + static bool hasThemeIcon(const QString &name); + static QStringList themeSearchPaths(); + static void setThemeSearchPaths(const QStringList &searchpath); + static QString themeName(); + static void setThemeName(const QString &path); + QString name() const; + void swap(QIcon &other /Constrained/); +%If (Qt_5_6_0 -) + void setIsMask(bool isMask); +%End +%If (Qt_5_6_0 -) + bool isMask() const; +%End +%If (Qt_5_11_0 -) + static QStringList fallbackSearchPaths(); +%End +%If (Qt_5_11_0 -) + static void setFallbackSearchPaths(const QStringList &paths); +%End +%If (Qt_5_12_0 -) + static QString fallbackThemeName(); +%End +%If (Qt_5_12_0 -) + static void setFallbackThemeName(const QString &name); +%End +}; + +QDataStream &operator<<(QDataStream &, const QIcon & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QIcon & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qiconengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qiconengine.sip new file mode 100644 index 0000000..31f47ec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qiconengine.sip @@ -0,0 +1,94 @@ +// qiconengine.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QIconEngine /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_0 -) + QIconEngine(); +%End +%If (Qt_5_8_0 -) + QIconEngine(const QIconEngine &other); +%End + virtual ~QIconEngine(); + virtual void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) = 0; + virtual QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state); + virtual QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state); + virtual void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state); + virtual void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state); + virtual QString key() const; + virtual QIconEngine *clone() const = 0 /Factory/; + virtual bool read(QDataStream &in); + virtual bool write(QDataStream &out) const; + + enum IconEngineHook + { + AvailableSizesHook, + IconNameHook, +%If (Qt_5_7_0 -) + IsNullHook, +%End +%If (Qt_5_9_0 -) + ScaledPixmapHook, +%End + }; + + struct AvailableSizesArgument + { +%TypeHeaderCode +#include +%End + + QIcon::Mode mode; + QIcon::State state; + QList sizes; + }; + + virtual QList availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; + virtual QString iconName() const; +%If (Qt_5_7_0 -) + bool isNull() const; +%End +%If (Qt_5_9_0 -) + QPixmap scaledPixmap(const QSize &size, QIcon::Mode mode, QIcon::State state, qreal scale); +%End +%If (Qt_5_9_0 -) + + struct ScaledPixmapArgument + { +%TypeHeaderCode +#include +%End + + QSize size; + QIcon::Mode mode; + QIcon::State state; + qreal scale; + QPixmap pixmap; + }; + +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimage.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimage.sip new file mode 100644 index 0000000..eeca1e2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimage.sip @@ -0,0 +1,316 @@ +// qimage.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QImage : public QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + enum InvertMode + { + InvertRgb, + InvertRgba, + }; + + enum Format + { + Format_Invalid, + Format_Mono, + Format_MonoLSB, + Format_Indexed8, + Format_RGB32, + Format_ARGB32, + Format_ARGB32_Premultiplied, + Format_RGB16, + Format_ARGB8565_Premultiplied, + Format_RGB666, + Format_ARGB6666_Premultiplied, + Format_RGB555, + Format_ARGB8555_Premultiplied, + Format_RGB888, + Format_RGB444, + Format_ARGB4444_Premultiplied, +%If (Qt_5_2_0 -) + Format_RGBX8888, +%End +%If (Qt_5_2_0 -) + Format_RGBA8888, +%End +%If (Qt_5_2_0 -) + Format_RGBA8888_Premultiplied, +%End +%If (Qt_5_4_0 -) + Format_BGR30, +%End +%If (Qt_5_4_0 -) + Format_A2BGR30_Premultiplied, +%End +%If (Qt_5_4_0 -) + Format_RGB30, +%End +%If (Qt_5_4_0 -) + Format_A2RGB30_Premultiplied, +%End +%If (Qt_5_5_0 -) + Format_Alpha8, +%End +%If (Qt_5_5_0 -) + Format_Grayscale8, +%End +%If (Qt_5_12_0 -) + Format_RGBX64, +%End +%If (Qt_5_12_0 -) + Format_RGBA64, +%End +%If (Qt_5_12_0 -) + Format_RGBA64_Premultiplied, +%End +%If (Qt_5_13_0 -) + Format_Grayscale16, +%End +%If (Qt_5_14_0 -) + Format_BGR888, +%End + }; + + QImage(); + QImage(const QSize &size, QImage::Format format); + QImage(int width, int height, QImage::Format format); + QImage(const uchar *data /KeepReference/, int width, int height, QImage::Format format); + QImage(void *data, int width, int height, QImage::Format format) [(uchar *data, int width, int height, QImage::Format format)]; + QImage(const uchar *data /KeepReference/, int width, int height, int bytesPerLine, QImage::Format format); + QImage(void *data, int width, int height, int bytesPerLine, QImage::Format format) [(uchar *data, int width, int height, int bytesPerLine, QImage::Format format)]; + explicit QImage(SIP_PYLIST xpm /TypeHint="List[str]"/) [(const char **xpm)]; +%MethodCode + // The Python interface is a list of strings that make up the image. + + const char **str = QtGui_ListToArray(a0); + + if (str) + { + sipCpp = new sipQImage(str); + QtGui_DeleteArray(str); + } + else + sipIsErr = 1; +%End + + QImage(const QString &fileName, const char *format = 0) /ReleaseGIL/; + QImage(const QImage &); + QImage(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new sipQImage(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + virtual ~QImage(); + bool isNull() const; + virtual int devType() const; + bool operator==(const QImage &) const; + bool operator!=(const QImage &) const; + void detach(); + bool isDetached() const; + QImage copy(const QRect &rect = QRect()) const; + QImage copy(int x, int y, int w, int h) const; + QImage::Format format() const; + QImage convertToFormat(QImage::Format f, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor) const; + QImage convertToFormat(QImage::Format f, const QVector &colorTable, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor) const; + int width() const; + int height() const; + QSize size() const; + QRect rect() const; + int depth() const; + QRgb color(int i) const; + void setColor(int i, QRgb c); + bool allGray() const; + bool isGrayscale() const; + void *bits() [uchar * ()]; + const void *constBits() const [const uchar * ()]; + void *scanLine(int) [uchar * (int)]; + const void *constScanLine(int) const [const uchar * (int)]; + int bytesPerLine() const; + bool valid(const QPoint &pt) const; + bool valid(int x, int y) const; + int pixelIndex(const QPoint &pt) const; + int pixelIndex(int x, int y) const; + QRgb pixel(const QPoint &pt) const; + QRgb pixel(int x, int y) const; + void setPixel(const QPoint &pt, uint index_or_rgb); + void setPixel(int x, int y, uint index_or_rgb); + QVector colorTable() const; + void setColorTable(const QVector colors); + void fill(Qt::GlobalColor color /Constrained/); + void fill(const QColor &color); + void fill(uint pixel); + bool hasAlphaChannel() const; + void setAlphaChannel(const QImage &alphaChannel); + QImage createAlphaMask(Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor) const; + QImage createHeuristicMask(bool clipTight = true) const; + QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const; + QImage scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const; + QImage scaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const; + QImage scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const; + QImage mirrored(bool horizontal = false, bool vertical = true) const; + QImage rgbSwapped() const; + void invertPixels(QImage::InvertMode mode = QImage::InvertRgb); + bool load(QIODevice *device, const char *format) /ReleaseGIL/; + bool load(const QString &fileName, const char *format = 0) /ReleaseGIL/; + bool loadFromData(const uchar *data /Array/, int len /ArraySize/, const char *format = 0); + bool loadFromData(const QByteArray &data, const char *format = 0); + bool save(const QString &fileName, const char *format = 0, int quality = -1) const /ReleaseGIL/; + bool save(QIODevice *device, const char *format = 0, int quality = -1) const /ReleaseGIL/; + static QImage fromData(const uchar *data /Array/, int size /ArraySize/, const char *format = 0); + static QImage fromData(const QByteArray &data, const char *format = 0); + virtual QPaintEngine *paintEngine() const; + int dotsPerMeterX() const; + int dotsPerMeterY() const; + void setDotsPerMeterX(int); + void setDotsPerMeterY(int); + QPoint offset() const; + void setOffset(const QPoint &); + QStringList textKeys() const; + QString text(const QString &key = QString()) const; + void setText(const QString &key, const QString &value); + +protected: + virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; +%If (Qt_5_5_0 -) + QImage smoothScaled(int w, int h) const; +%End + +public: + QImage createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const; + QImage transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const; + static QTransform trueMatrix(const QTransform &, int w, int h); + qint64 cacheKey() const; + int colorCount() const; + void setColorCount(int); + int byteCount() const; + int bitPlaneCount() const; + void swap(QImage &other /Constrained/); + qreal devicePixelRatio() const; + void setDevicePixelRatio(qreal scaleFactor); +%If (Qt_5_4_0 -) + QPixelFormat pixelFormat() const; +%End +%If (Qt_5_4_0 -) + static QPixelFormat toPixelFormat(QImage::Format format); +%End +%If (Qt_5_4_0 -) + static QImage::Format toImageFormat(QPixelFormat format); +%End +%If (Qt_5_6_0 -) + QColor pixelColor(int x, int y) const; +%End +%If (Qt_5_6_0 -) + QColor pixelColor(const QPoint &pt) const; +%End +%If (Qt_5_6_0 -) + void setPixelColor(int x, int y, const QColor &c); +%End +%If (Qt_5_6_0 -) + void setPixelColor(const QPoint &pt, const QColor &c); +%End +%If (Qt_5_9_0 -) + bool reinterpretAsFormat(QImage::Format f); +%End +%If (Qt_5_10_0 -) + Py_ssize_t sizeInBytes() const [qsizetype ()]; +%End +%If (Qt_5_13_0 -) + void convertTo(QImage::Format f, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor); +%End +%If (Qt_5_14_0 -) + QColorSpace colorSpace() const; +%End +%If (Qt_5_14_0 -) + QImage convertedToColorSpace(const QColorSpace &) const; +%End +%If (Qt_5_14_0 -) + void convertToColorSpace(const QColorSpace &); +%End +%If (Qt_5_14_0 -) + void setColorSpace(const QColorSpace &); +%End +%If (Qt_5_14_0 -) + void applyColorTransform(const QColorTransform &transform); +%End +}; + +QDataStream &operator<<(QDataStream &, const QImage & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QImage & /Constrained/) /ReleaseGIL/; + +%ModuleHeaderCode +const char **QtGui_ListToArray(PyObject *lst); +void QtGui_DeleteArray(const char **arr); +%End + +%ModuleCode +// Convert a list of strings to an array of ASCII strings on the heap. Used by +// QImage and QPixmap. +const char **QtGui_ListToArray(PyObject *lst) +{ + Py_ssize_t nstr = PyList_Size(lst); + const char **arr = new const char *[nstr + 1]; + + for (Py_ssize_t i = 0; i < nstr; ++i) + { + PyObject *ascii_obj = PyList_GetItem(lst, i); + const char *ascii = sipString_AsASCIIString(&ascii_obj); + + if (!ascii) + { + while (i-- > 0) + delete[] arr[i]; + + delete[] arr; + + return 0; + } + + // Copy the string. + arr[i] = qstrdup(ascii); + + Py_DECREF(ascii_obj); + } + + // The sentinal. + arr[nstr] = 0; + + return arr; +} + + +// Return a string array created by QtGui_ListToArray() to the heap. +void QtGui_DeleteArray(const char **arr) +{ + for (Py_ssize_t i = 0; arr[i]; ++i) + delete[] arr[i]; + + delete[] arr; +} +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimageiohandler.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimageiohandler.sip new file mode 100644 index 0000000..4a314d0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimageiohandler.sip @@ -0,0 +1,103 @@ +// qimageiohandler.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QImageIOHandler +{ +%TypeHeaderCode +#include +%End + +public: + enum ImageOption + { + Size, + ClipRect, + Description, + ScaledClipRect, + ScaledSize, + CompressionRatio, + Gamma, + Quality, + Name, + SubType, + IncrementalReading, + Endianness, + Animation, + BackgroundColor, +%If (Qt_5_4_0 -) + SupportedSubTypes, +%End +%If (Qt_5_5_0 -) + OptimizedWrite, +%End +%If (Qt_5_5_0 -) + ProgressiveScanWrite, +%End +%If (Qt_5_5_0 -) + ImageTransformation, +%End +%If (Qt_5_5_0 -) + TransformedByDefault, +%End + }; + + QImageIOHandler(); + virtual ~QImageIOHandler(); + void setDevice(QIODevice *device); + QIODevice *device() const; + void setFormat(const QByteArray &format); + QByteArray format() const; + virtual bool canRead() const = 0; + virtual bool read(QImage *image) = 0; + virtual bool write(const QImage &image); + virtual QVariant option(QImageIOHandler::ImageOption option) const; + virtual void setOption(QImageIOHandler::ImageOption option, const QVariant &value); + virtual bool supportsOption(QImageIOHandler::ImageOption option) const; + virtual bool jumpToNextImage(); + virtual bool jumpToImage(int imageNumber); + virtual int loopCount() const; + virtual int imageCount() const; + virtual int nextImageDelay() const; + virtual int currentImageNumber() const; + virtual QRect currentImageRect() const; +%If (Qt_5_5_0 -) + + enum Transformation + { + TransformationNone, + TransformationMirror, + TransformationFlip, + TransformationRotate180, + TransformationRotate90, + TransformationMirrorAndRotate90, + TransformationFlipAndRotate90, + TransformationRotate270, + }; + +%End +%If (Qt_5_5_0 -) + typedef QFlags Transformations; +%End + +private: + QImageIOHandler(const QImageIOHandler &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimagereader.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimagereader.sip new file mode 100644 index 0000000..8cde695 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimagereader.sip @@ -0,0 +1,114 @@ +// qimagereader.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QImageReader +{ +%TypeHeaderCode +#include +%End + +public: + enum ImageReaderError + { + UnknownError, + FileNotFoundError, + DeviceError, + UnsupportedFormatError, + InvalidDataError, + }; + + QImageReader(); + QImageReader(QIODevice *device, const QByteArray &format = QByteArray()); + QImageReader(const QString &fileName, const QByteArray &format = QByteArray()); + ~QImageReader(); + void setFormat(const QByteArray &format); + QByteArray format() const; + void setDevice(QIODevice *device); + QIODevice *device() const; + void setFileName(const QString &fileName); + QString fileName() const; + QSize size() const; + void setClipRect(const QRect &rect); + QRect clipRect() const; + void setScaledSize(const QSize &size); + QSize scaledSize() const; + void setScaledClipRect(const QRect &rect); + QRect scaledClipRect() const; + bool canRead() const; + QImage read() /ReleaseGIL/; + bool read(QImage *image) /ReleaseGIL/; + bool jumpToNextImage(); + bool jumpToImage(int imageNumber); + int loopCount() const; + int imageCount() const; + int nextImageDelay() const; + int currentImageNumber() const; + QRect currentImageRect() const; + QImageReader::ImageReaderError error() const; + QString errorString() const; + static QByteArray imageFormat(const QString &fileName); + static QByteArray imageFormat(QIODevice *device); + static QList supportedImageFormats(); + QStringList textKeys() const; + QString text(const QString &key) const; + void setBackgroundColor(const QColor &color); + QColor backgroundColor() const; + bool supportsAnimation() const; + void setQuality(int quality); + int quality() const; + bool supportsOption(QImageIOHandler::ImageOption option) const; + void setAutoDetectImageFormat(bool enabled); + bool autoDetectImageFormat() const; + QImage::Format imageFormat() const; + void setDecideFormatFromContent(bool ignored); + bool decideFormatFromContent() const; +%If (Qt_5_1_0 -) + static QList supportedMimeTypes(); +%End +%If (Qt_5_4_0 -) + QByteArray subType() const; +%End +%If (Qt_5_4_0 -) + QList supportedSubTypes() const; +%End +%If (Qt_5_5_0 -) + QImageIOHandler::Transformations transformation() const; +%End +%If (Qt_5_5_0 -) + void setAutoTransform(bool enabled); +%End +%If (Qt_5_5_0 -) + bool autoTransform() const; +%End +%If (Qt_5_6_0 -) + void setGamma(float gamma); +%End +%If (Qt_5_6_0 -) + float gamma() const; +%End +%If (Qt_5_12_0 -) + static QList imageFormatsForMimeType(const QByteArray &mimeType); +%End + +private: + QImageReader(const QImageReader &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimagewriter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimagewriter.sip new file mode 100644 index 0000000..7459660 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qimagewriter.sip @@ -0,0 +1,99 @@ +// qimagewriter.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QImageWriter +{ +%TypeHeaderCode +#include +%End + +public: + enum ImageWriterError + { + UnknownError, + DeviceError, + UnsupportedFormatError, +%If (Qt_5_10_0 -) + InvalidImageError, +%End + }; + + QImageWriter(); + QImageWriter(QIODevice *device, const QByteArray &format); + QImageWriter(const QString &fileName, const QByteArray &format = QByteArray()); + ~QImageWriter(); + void setFormat(const QByteArray &format); + QByteArray format() const; + void setDevice(QIODevice *device); + QIODevice *device() const; + void setFileName(const QString &fileName); + QString fileName() const; + void setQuality(int quality); + int quality() const; + void setGamma(float gamma); + float gamma() const; + bool canWrite() const; + bool write(const QImage &image) /ReleaseGIL/; + QImageWriter::ImageWriterError error() const; + QString errorString() const; + static QList supportedImageFormats(); + void setText(const QString &key, const QString &text); + bool supportsOption(QImageIOHandler::ImageOption option) const; + void setCompression(int compression); + int compression() const; +%If (Qt_5_1_0 -) + static QList supportedMimeTypes(); +%End +%If (Qt_5_4_0 -) + void setSubType(const QByteArray &type); +%End +%If (Qt_5_4_0 -) + QByteArray subType() const; +%End +%If (Qt_5_4_0 -) + QList supportedSubTypes() const; +%End +%If (Qt_5_5_0 -) + void setOptimizedWrite(bool optimize); +%End +%If (Qt_5_5_0 -) + bool optimizedWrite() const; +%End +%If (Qt_5_5_0 -) + void setProgressiveScanWrite(bool progressive); +%End +%If (Qt_5_5_0 -) + bool progressiveScanWrite() const; +%End +%If (Qt_5_5_0 -) + QImageIOHandler::Transformations transformation() const; +%End +%If (Qt_5_5_0 -) + void setTransformation(QImageIOHandler::Transformations orientation); +%End +%If (Qt_5_12_0 -) + static QList imageFormatsForMimeType(const QByteArray &mimeType); +%End + +private: + QImageWriter(const QImageWriter &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qinputmethod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qinputmethod.sip new file mode 100644 index 0000000..6cea49f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qinputmethod.sip @@ -0,0 +1,91 @@ +// qinputmethod.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QInputMethod : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QTransform inputItemTransform() const; + void setInputItemTransform(const QTransform &transform); + QRectF cursorRectangle() const; + QRectF keyboardRectangle() const; + + enum Action + { + Click, + ContextMenu, + }; + + bool isVisible() const; + void setVisible(bool visible); + bool isAnimating() const; + QLocale locale() const; + Qt::LayoutDirection inputDirection() const; +%If (Qt_5_1_0 -) + QRectF inputItemRectangle() const; +%End +%If (Qt_5_1_0 -) + void setInputItemRectangle(const QRectF &rect); +%End +%If (Qt_5_3_0 -) + static QVariant queryFocusObject(Qt::InputMethodQuery query, QVariant argument); +%End + +public slots: + void show(); + void hide(); + void update(Qt::InputMethodQueries queries); + void reset(); + void commit(); + void invokeAction(QInputMethod::Action a, int cursorPosition); + +signals: + void cursorRectangleChanged(); + void keyboardRectangleChanged(); + void visibleChanged(); + void animatingChanged(); + void localeChanged(); + void inputDirectionChanged(Qt::LayoutDirection newDirection); + +public: +%If (Qt_5_7_0 -) + QRectF anchorRectangle() const; +%End +%If (Qt_5_7_0 -) + QRectF inputItemClipRectangle() const; +%End + +signals: +%If (Qt_5_7_0 -) + void anchorRectangleChanged(); +%End +%If (Qt_5_7_0 -) + void inputItemClipRectangleChanged(); +%End + +private: + QInputMethod(); + virtual ~QInputMethod(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qkeysequence.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qkeysequence.sip new file mode 100644 index 0000000..47e021b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qkeysequence.sip @@ -0,0 +1,246 @@ +// qkeysequence.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QKeySequence /TypeHintIn="Union[QKeySequence, QKeySequence.StandardKey, QString, int]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +// Allow a StandardKey, QString or an integer whenever a QKeySequence is +// expected. + +if (sipIsErr == NULL) +{ + if (sipCanConvertToType(sipPy, sipType_QKeySequence, SIP_NO_CONVERTORS)) + return 1; + + if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QKeySequence_StandardKey))) + return 1; + + if (sipCanConvertToType(sipPy, sipType_QString, 0)) + return 1; + + PyErr_Clear(); + + SIPLong_AsLong(sipPy); + + return !PyErr_Occurred(); +} + +if (sipCanConvertToType(sipPy, sipType_QKeySequence, SIP_NO_CONVERTORS)) +{ + *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QKeySequence, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + + return 0; +} + +if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QKeySequence_StandardKey))) +{ + *sipCppPtr = new QKeySequence((QKeySequence::StandardKey)SIPLong_AsLong(sipPy)); + + return sipGetState(sipTransferObj); +} + +if (sipCanConvertToType(sipPy, sipType_QString, 0)) +{ + int state; + QString *qs = reinterpret_cast(sipConvertToType(sipPy, sipType_QString, 0, 0, &state, sipIsErr)); + + if (*sipIsErr) + { + sipReleaseType(qs, sipType_QString, state); + return 0; + } + + *sipCppPtr = new QKeySequence(*qs); + + sipReleaseType(qs, sipType_QString, state); + + return sipGetState(sipTransferObj); +} + +int key = SIPLong_AsLong(sipPy); + +*sipCppPtr = new QKeySequence(key); + +return sipGetState(sipTransferObj); +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"iiii", sipCpp->operator[](0), sipCpp->operator[](1), sipCpp->operator[](2), sipCpp->operator[](3)); +%End + +public: + enum SequenceFormat + { + NativeText, + PortableText, + }; + + enum SequenceMatch + { + NoMatch, + PartialMatch, + ExactMatch, + }; + + enum StandardKey + { + UnknownKey, + HelpContents, + WhatsThis, + Open, + Close, + Save, + New, + Delete, + Cut, + Copy, + Paste, + Undo, + Redo, + Back, + Forward, + Refresh, + ZoomIn, + ZoomOut, + Print, + AddTab, + NextChild, + PreviousChild, + Find, + FindNext, + FindPrevious, + Replace, + SelectAll, + Bold, + Italic, + Underline, + MoveToNextChar, + MoveToPreviousChar, + MoveToNextWord, + MoveToPreviousWord, + MoveToNextLine, + MoveToPreviousLine, + MoveToNextPage, + MoveToPreviousPage, + MoveToStartOfLine, + MoveToEndOfLine, + MoveToStartOfBlock, + MoveToEndOfBlock, + MoveToStartOfDocument, + MoveToEndOfDocument, + SelectNextChar, + SelectPreviousChar, + SelectNextWord, + SelectPreviousWord, + SelectNextLine, + SelectPreviousLine, + SelectNextPage, + SelectPreviousPage, + SelectStartOfLine, + SelectEndOfLine, + SelectStartOfBlock, + SelectEndOfBlock, + SelectStartOfDocument, + SelectEndOfDocument, + DeleteStartOfWord, + DeleteEndOfWord, + DeleteEndOfLine, + InsertParagraphSeparator, + InsertLineSeparator, + SaveAs, + Preferences, + Quit, + FullScreen, +%If (Qt_5_1_0 -) + Deselect, +%End +%If (Qt_5_2_0 -) + DeleteCompleteLine, +%End +%If (Qt_5_5_0 -) + Backspace, +%End +%If (Qt_5_6_0 -) + Cancel, +%End + }; + + QKeySequence(); + QKeySequence(const QKeySequence &ks); + QKeySequence(const QString &key, QKeySequence::SequenceFormat format = QKeySequence::NativeText); + QKeySequence(int k1, int key2 = 0, int key3 = 0, int key4 = 0); + QKeySequence(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QKeySequence(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QKeySequence(); + int count() const /__len__/; + bool isEmpty() const; + QKeySequence::SequenceMatch matches(const QKeySequence &seq) const; + static QKeySequence mnemonic(const QString &text); + int operator[](int i) const; +%MethodCode + Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + + if (idx < 0) + sipIsErr = 1; + else + sipRes = sipCpp->operator[]((uint)idx); +%End + + bool operator==(const QKeySequence &other) const; + bool operator!=(const QKeySequence &other) const; + bool operator<(const QKeySequence &ks) const; + bool operator>(const QKeySequence &other) const; + bool operator<=(const QKeySequence &other) const; + bool operator>=(const QKeySequence &other) const; + bool isDetached() const; + void swap(QKeySequence &other /Constrained/); + QString toString(QKeySequence::SequenceFormat format = QKeySequence::PortableText) const; + static QKeySequence fromString(const QString &str, QKeySequence::SequenceFormat format = QKeySequence::PortableText); + static QList keyBindings(QKeySequence::StandardKey key); +%If (Qt_5_1_0 -) + static QList listFromString(const QString &str, QKeySequence::SequenceFormat format = QKeySequence::PortableText); +%End +%If (Qt_5_1_0 -) + static QString listToString(const QList &list, QKeySequence::SequenceFormat format = QKeySequence::PortableText); +%End +%If (Qt_5_6_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; + +QDataStream &operator<<(QDataStream &in, const QKeySequence &ks /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &out, QKeySequence &ks /Constrained/) /ReleaseGIL/; +void qt_set_sequence_auto_mnemonic(bool b); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qmatrix4x4.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qmatrix4x4.sip new file mode 100644 index 0000000..758a160 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qmatrix4x4.sip @@ -0,0 +1,320 @@ +// qmatrix4x4.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QMatrix4x4 +{ +%TypeHeaderCode +#include +%End + +%PickleCode + PYQT_FLOAT data[16]; + + // We want the data in row-major order. + sipCpp->copyDataTo(data); + + sipRes = Py_BuildValue((char *)"dddddddddddddddd", + (double)data[0], (double)data[1], (double)data[2], (double)data[3], + (double)data[4], (double)data[5], (double)data[6], (double)data[7], + (double)data[8], (double)data[9], (double)data[10], (double)data[11], + (double)data[12], (double)data[13], (double)data[14], (double)data[15]); +%End + +public: + QMatrix4x4(); + explicit QMatrix4x4(SIP_PYOBJECT values /TypeHint="Sequence[float]"/) [(const float *values)]; +%MethodCode + float values[16]; + + if ((sipError = qtgui_matrixDataFromSequence(a0, 16, values)) == sipErrorNone) + sipCpp = new QMatrix4x4(values); +%End + + QMatrix4x4(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44); + QMatrix4x4(const QTransform &transform); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + bool bad = false; + int i; + PyObject *m[16]; + PYQT_FLOAT data[16]; + + // The raw data is in column-major order but we want row-major order. + sipCpp->copyDataTo(data); + + for (i = 0; i < 16; ++i) + { + m[i] = PyFloat_FromDouble(data[i]); + + if (!m[i]) + bad = true; + } + + if (!bad) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix4x4(" + "%R, %R, %R, %R, " + "%R, %R, %R, %R, " + "%R, %R, %R, %R, " + "%R, %R, %R, %R)", + m[0], m[1], m[2], m[3], + m[4], m[5], m[6], m[7], + m[8], m[9], m[10], m[11], + m[12], m[13], m[14], m[15]); + #else + sipRes = PyString_FromString("PyQt5.QtGui.QMatrix4x4("); + + for (i = 0; i < 16; ++i) + { + if (i != 0) + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + + PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i])); + } + + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + for (i = 0; i < 16; ++i) + Py_XDECREF(m[i]); +%End + + double determinant() const; + QMatrix4x4 inverted(bool *invertible = 0) const; + QMatrix4x4 transposed() const; + QMatrix3x3 normalMatrix() const; + void scale(const QVector3D &vector); + void scale(float x, float y); + void scale(float x, float y, float z); + void scale(float factor); + void translate(const QVector3D &vector); + void translate(float x, float y); + void translate(float x, float y, float z); + void rotate(float angle, const QVector3D &vector); + void rotate(float angle, float x, float y, float z = 0.F); + void rotate(const QQuaternion &quaternion); + void ortho(const QRect &rect); + void ortho(const QRectF &rect); + void ortho(float left, float right, float bottom, float top, float nearPlane, float farPlane); + void frustum(float left, float right, float bottom, float top, float nearPlane, float farPlane); + void perspective(float angle, float aspect, float nearPlane, float farPlane); + void lookAt(const QVector3D &eye, const QVector3D ¢er, const QVector3D &up); + SIP_PYLIST copyDataTo() const /TypeHint="List[float]"/; +%MethodCode + float values[16]; + + sipCpp->copyDataTo(values); + sipError = qtgui_matrixDataAsList(16, values, &sipRes); +%End + + QTransform toTransform() const; + QTransform toTransform(float distanceToPlane) const; + QRect mapRect(const QRect &rect) const; + QRectF mapRect(const QRectF &rect) const; + SIP_PYLIST data() /TypeHint="List[float]"/; +%MethodCode + sipError = qtgui_matrixDataAsList(16, sipCpp->constData(), &sipRes); +%End + + void optimize(); + SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const; +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 4, 4, &row, &column)) == sipErrorNone) + { + sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column)); + + if (!sipRes) + sipError = sipErrorFail; + } +%End + + void __setitem__(SIP_PYOBJECT, qreal); +%MethodCode + int row, column; + + if ((sipError = qtgui_matrixParseIndex(a0, 4, 4, &row, &column)) == sipErrorNone) + sipCpp->operator()(row, column) = a1; +%End + + QVector4D column(int index) const; + void setColumn(int index, const QVector4D &value); + QVector4D row(int index) const; + void setRow(int index, const QVector4D &value); + bool isIdentity() const; + void setToIdentity(); + void fill(float value); + QMatrix4x4 &operator+=(const QMatrix4x4 &other); + QMatrix4x4 &operator-=(const QMatrix4x4 &other); + QMatrix4x4 &operator*=(const QMatrix4x4 &other) /__imatmul__/; + QMatrix4x4 &operator*=(float factor); + QMatrix4x4 &operator/=(float divisor); + bool operator==(const QMatrix4x4 &other) const; + bool operator!=(const QMatrix4x4 &other) const; + QPoint map(const QPoint &point) const; + QPointF map(const QPointF &point) const; + QVector3D map(const QVector3D &point) const; + QVector3D mapVector(const QVector3D &vector) const; + QVector4D map(const QVector4D &point) const; +%If (Qt_5_4_0 -) + void viewport(float left, float bottom, float width, float height, float nearPlane = 0.F, float farPlane = 1.F); +%End +%If (Qt_5_4_0 -) + void viewport(const QRectF &rect); +%End +%If (Qt_5_5_0 -) + bool isAffine() const; +%End +}; + +QMatrix4x4 operator/(const QMatrix4x4 &matrix, float divisor); +QMatrix4x4 operator+(const QMatrix4x4 &m1, const QMatrix4x4 &m2); +QMatrix4x4 operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2); +QMatrix4x4 operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2) /__matmul__/; +QVector3D operator*(const QVector3D &vector, const QMatrix4x4 &matrix); +QVector3D operator*(const QMatrix4x4 &matrix, const QVector3D &vector); +QVector4D operator*(const QVector4D &vector, const QMatrix4x4 &matrix); +QVector4D operator*(const QMatrix4x4 &matrix, const QVector4D &vector); +QPoint operator*(const QPoint &point, const QMatrix4x4 &matrix); +QPointF operator*(const QPointF &point, const QMatrix4x4 &matrix); +QPoint operator*(const QMatrix4x4 &matrix, const QPoint &point); +QPointF operator*(const QMatrix4x4 &matrix, const QPointF &point); +QMatrix4x4 operator-(const QMatrix4x4 &matrix); +QMatrix4x4 operator*(float factor, const QMatrix4x4 &matrix); +QMatrix4x4 operator*(const QMatrix4x4 &matrix, float factor); +bool qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2); +QDataStream &operator<<(QDataStream &, const QMatrix4x4 & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QMatrix4x4 & /Constrained/) /ReleaseGIL/; + +%ModuleHeaderCode +// Helpers for the matrix classes. +typedef float PYQT_FLOAT; + +sipErrorState qtgui_matrixParseIndex(PyObject *tup, int nr_rows, + int nr_columns, int *row, int *column); +sipErrorState qtgui_matrixDataFromSequence(PyObject *seq, int nr_values, + PYQT_FLOAT *values); +sipErrorState qtgui_matrixDataAsList(int nr_values, const PYQT_FLOAT *values, + PyObject **list); +%End + +%ModuleCode +// Convert a Python object to a row and column. +sipErrorState qtgui_matrixParseIndex(PyObject *tup, int nr_rows, + int nr_columns, int *row, int *column) +{ + sipErrorState es = sipErrorContinue; + + if (PyTuple_Check(tup) && PyArg_ParseTuple(tup, "ii", row, column)) + if (*row >= 0 && *row < nr_rows && *column >= 0 && *column < nr_columns) + es = sipErrorNone; + + if (es == sipErrorContinue) + PyErr_Format(PyExc_IndexError, "an index must be a row in the range 0 to %d and a column in the range 0 to %d", nr_rows - 1, nr_columns - 1); + + return es; +} + + +// Convert a Python object to an array of qreals. +sipErrorState qtgui_matrixDataFromSequence(PyObject *seq, int nr_values, + PYQT_FLOAT *values) +{ + sipErrorState es; + + if (PySequence_Size(seq) == nr_values) + { + es = sipErrorNone; + + for (int i = 0; i < nr_values; ++i) + { + PyObject *value = PySequence_GetItem(seq, i); + + if (!value) + { + es = sipErrorFail; + break; + } + + PyErr_Clear(); + + double d = PyFloat_AsDouble(value); + + if (PyErr_Occurred()) + { + Py_DECREF(value); + es = sipErrorContinue; + break; + } + + Py_DECREF(value); + + *values++ = d; + } + } + else + { + es = sipErrorContinue; + } + + if (es == sipErrorContinue) + PyErr_Format(PyExc_TypeError, "a sequence of %d floats is expected", + nr_values); + + return es; +} + + +// Convert an array of qreals to a Python list. +sipErrorState qtgui_matrixDataAsList(int nr_values, const PYQT_FLOAT *values, + PyObject **list) +{ + PyObject *l = PyList_New(nr_values); + + if (!l) + return sipErrorFail; + + for (int i = 0; i < nr_values; ++i) + { + PyObject *value = PyFloat_FromDouble(*values++); + + if (!value) + { + Py_DECREF(l); + return sipErrorFail; + } + + PyList_SetItem(l, i, value); + } + + *list = l; + + return sipErrorNone; +} +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qmovie.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qmovie.sip new file mode 100644 index 0000000..54b513a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qmovie.sip @@ -0,0 +1,95 @@ +// qmovie.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMovie : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum MovieState + { + NotRunning, + Paused, + Running, + }; + + enum CacheMode + { + CacheNone, + CacheAll, + }; + + explicit QMovie(QObject *parent /TransferThis/ = 0); + QMovie(QIODevice *device, const QByteArray &format = QByteArray(), QObject *parent /TransferThis/ = 0); + QMovie(const QString &fileName, const QByteArray &format = QByteArray(), QObject *parent /TransferThis/ = 0); + virtual ~QMovie(); + static QList supportedFormats(); + void setDevice(QIODevice *device); + QIODevice *device() const; + void setFileName(const QString &fileName); + QString fileName() const; + void setFormat(const QByteArray &format); + QByteArray format() const; + void setBackgroundColor(const QColor &color); + QColor backgroundColor() const; + QMovie::MovieState state() const; + QRect frameRect() const; + QImage currentImage() const; + QPixmap currentPixmap() const; + bool isValid() const; + bool jumpToFrame(int frameNumber); + int loopCount() const; + int frameCount() const; + int nextFrameDelay() const; + int currentFrameNumber() const; + void setSpeed(int percentSpeed); + int speed() const; + QSize scaledSize(); + void setScaledSize(const QSize &size); + QMovie::CacheMode cacheMode() const; + void setCacheMode(QMovie::CacheMode mode); + +signals: + void started(); + void resized(const QSize &size); + void updated(const QRect &rect); + void stateChanged(QMovie::MovieState state); + void error(QImageReader::ImageReaderError error); + void finished(); + void frameChanged(int frameNumber); + +public slots: + void start(); + bool jumpToNextFrame(); + void setPaused(bool paused); + void stop(); + +public: +%If (Qt_5_10_0 -) + QImageReader::ImageReaderError lastError() const; +%End +%If (Qt_5_10_0 -) + QString lastErrorString() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qoffscreensurface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qoffscreensurface.sip new file mode 100644 index 0000000..e2fbea8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qoffscreensurface.sip @@ -0,0 +1,60 @@ +// qoffscreensurface.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QOffscreenSurface : public QObject, public QSurface +{ +%TypeHeaderCode +#include +%End + +public: + explicit QOffscreenSurface(QScreen *screen = 0); +%If (Qt_5_10_0 -) + QOffscreenSurface(QScreen *screen, QObject *parent /TransferThis/); +%End + virtual ~QOffscreenSurface(); + virtual QSurface::SurfaceType surfaceType() const; + void create(); + void destroy(); + bool isValid() const; + void setFormat(const QSurfaceFormat &format); + virtual QSurfaceFormat format() const; + QSurfaceFormat requestedFormat() const; + virtual QSize size() const; + QScreen *screen() const; + void setScreen(QScreen *screen); + +signals: + void screenChanged(QScreen *screen); + +public: +%If (Qt_5_9_0 -) + void *nativeHandle() const; +%End +%If (Qt_5_9_0 -) + void setNativeHandle(void *handle); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglbuffer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglbuffer.sip new file mode 100644 index 0000000..290a76b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglbuffer.sip @@ -0,0 +1,108 @@ +// qopenglbuffer.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_OpenGL) + +class QOpenGLBuffer +{ +%TypeHeaderCode +#include +%End + +public: + enum Type + { + VertexBuffer, + IndexBuffer, + PixelPackBuffer, + PixelUnpackBuffer, + }; + + QOpenGLBuffer(); + explicit QOpenGLBuffer(QOpenGLBuffer::Type type); + QOpenGLBuffer(const QOpenGLBuffer &other); + ~QOpenGLBuffer(); + + enum UsagePattern + { + StreamDraw, + StreamRead, + StreamCopy, + StaticDraw, + StaticRead, + StaticCopy, + DynamicDraw, + DynamicRead, + DynamicCopy, + }; + + enum Access + { + ReadOnly, + WriteOnly, + ReadWrite, + }; + + QOpenGLBuffer::Type type() const; + QOpenGLBuffer::UsagePattern usagePattern() const; + void setUsagePattern(QOpenGLBuffer::UsagePattern value); + bool create(); + bool isCreated() const; + void destroy(); + bool bind(); + void release(); + static void release(QOpenGLBuffer::Type type); + GLuint bufferId() const; + int size() const /__len__/; + bool read(int offset, void *data, int count); + void write(int offset, const void *data, int count); + void allocate(const void *data, int count); + void allocate(int count); + void *map(QOpenGLBuffer::Access access); + bool unmap(); +%If (Qt_5_4_0 -) + + enum RangeAccessFlag + { + RangeRead, + RangeWrite, + RangeInvalidate, + RangeInvalidateBuffer, + RangeFlushExplicit, + RangeUnsynchronized, + }; + +%End +%If (Qt_5_4_0 -) + typedef QFlags RangeAccessFlags; +%End +%If (Qt_5_4_0 -) + void *mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access); +%End +}; + +%End +%If (Qt_5_4_0 -) +%If (PyQt_OpenGL) +QFlags operator|(QOpenGLBuffer::RangeAccessFlag f1, QFlags f2); +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglcontext.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglcontext.sip new file mode 100644 index 0000000..f6cab90 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglcontext.sip @@ -0,0 +1,150 @@ +// qopenglcontext.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_OpenGL) + +class QOpenGLContextGroup : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QOpenGLContextGroup(); + QList shares() const; + static QOpenGLContextGroup *currentContextGroup(); + +private: + QOpenGLContextGroup(); +}; + +%End +%If (PyQt_OpenGL) + +class QOpenGLContext : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QOpenGLContext(QObject *parent /TransferThis/ = 0); + virtual ~QOpenGLContext(); + void setFormat(const QSurfaceFormat &format); + void setShareContext(QOpenGLContext *shareContext); + void setScreen(QScreen *screen); + bool create(); + bool isValid() const; + QSurfaceFormat format() const; + QOpenGLContext *shareContext() const; + QOpenGLContextGroup *shareGroup() const; + QScreen *screen() const; + GLuint defaultFramebufferObject() const; + bool makeCurrent(QSurface *surface); + void doneCurrent(); + void swapBuffers(QSurface *surface); + QFunctionPointer getProcAddress(const QByteArray &procName) const; + QSurface *surface() const; + static QOpenGLContext *currentContext(); + static bool areSharing(QOpenGLContext *first, QOpenGLContext *second); + QSet extensions() const; + bool hasExtension(const QByteArray &extension) const; + +signals: + void aboutToBeDestroyed(); + +public: +%If (Qt_5_1_0 -) + SIP_PYOBJECT versionFunctions(const QOpenGLVersionProfile *versionProfile = 0) const; +%MethodCode + sipRes = qpyopengl_version_functions(sipCpp, sipSelf, a0); +%End + +%End +%If (Qt_5_3_0 -) + static void *openGLModuleHandle(); +%End +%If (Qt_5_3_0 -) + + enum OpenGLModuleType + { + LibGL, + LibGLES, + }; + +%End +%If (Qt_5_3_0 -) + static QOpenGLContext::OpenGLModuleType openGLModuleType(); +%End +%If (Qt_5_3_0 -) + bool isOpenGLES() const; +%End +%If (Qt_5_4_0 -) + void setNativeHandle(const QVariant &handle); +%End +%If (Qt_5_4_0 -) + QVariant nativeHandle() const; +%End +%If (Qt_5_5_0 -) + static bool supportsThreadedOpenGL(); +%End +%If (Qt_5_5_0 -) + static QOpenGLContext *globalShareContext(); +%End +}; + +%End +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) + +class QOpenGLVersionProfile +{ +%TypeHeaderCode +#include +%End + +public: + QOpenGLVersionProfile(); + explicit QOpenGLVersionProfile(const QSurfaceFormat &format); + QOpenGLVersionProfile(const QOpenGLVersionProfile &other); + ~QOpenGLVersionProfile(); + QPair version() const; + void setVersion(int majorVersion, int minorVersion); + QSurfaceFormat::OpenGLContextProfile profile() const; + void setProfile(QSurfaceFormat::OpenGLContextProfile profile); + bool hasProfiles() const; + bool isLegacyVersion() const; + bool isValid() const; +}; + +%End +%End +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) +bool operator==(const QOpenGLVersionProfile &lhs, const QOpenGLVersionProfile &rhs); +%End +%End +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) +bool operator!=(const QOpenGLVersionProfile &lhs, const QOpenGLVersionProfile &rhs); +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengldebug.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengldebug.sip new file mode 100644 index 0000000..fe7c918 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengldebug.sip @@ -0,0 +1,150 @@ +// qopengldebug.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) + +class QOpenGLDebugMessage +{ +%TypeHeaderCode +#include +%End + +public: + enum Source + { + InvalidSource, + APISource, + WindowSystemSource, + ShaderCompilerSource, + ThirdPartySource, + ApplicationSource, + OtherSource, + AnySource, + }; + + typedef QFlags Sources; + + enum Type + { + InvalidType, + ErrorType, + DeprecatedBehaviorType, + UndefinedBehaviorType, + PortabilityType, + PerformanceType, + OtherType, + MarkerType, + GroupPushType, + GroupPopType, + AnyType, + }; + + typedef QFlags Types; + + enum Severity + { + InvalidSeverity, + HighSeverity, + MediumSeverity, + LowSeverity, + NotificationSeverity, + AnySeverity, + }; + + typedef QFlags Severities; + QOpenGLDebugMessage(); + QOpenGLDebugMessage(const QOpenGLDebugMessage &debugMessage); + ~QOpenGLDebugMessage(); + void swap(QOpenGLDebugMessage &debugMessage /Constrained/); + QOpenGLDebugMessage::Source source() const; + QOpenGLDebugMessage::Type type() const; + QOpenGLDebugMessage::Severity severity() const; + GLuint id() const; + QString message() const; + static QOpenGLDebugMessage createApplicationMessage(const QString &text, GLuint id = 0, QOpenGLDebugMessage::Severity severity = QOpenGLDebugMessage::NotificationSeverity, QOpenGLDebugMessage::Type type = QOpenGLDebugMessage::OtherType); + static QOpenGLDebugMessage createThirdPartyMessage(const QString &text, GLuint id = 0, QOpenGLDebugMessage::Severity severity = QOpenGLDebugMessage::NotificationSeverity, QOpenGLDebugMessage::Type type = QOpenGLDebugMessage::OtherType); + bool operator==(const QOpenGLDebugMessage &debugMessage) const; + bool operator!=(const QOpenGLDebugMessage &debugMessage) const; +}; + +%End +%End +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) +QFlags operator|(QOpenGLDebugMessage::Source f1, QFlags f2); +%End +%End +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) +QFlags operator|(QOpenGLDebugMessage::Type f1, QFlags f2); +%End +%End +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) +QFlags operator|(QOpenGLDebugMessage::Severity f1, QFlags f2); +%End +%End +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) + +class QOpenGLDebugLogger : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum LoggingMode + { + AsynchronousLogging, + SynchronousLogging, + }; + + explicit QOpenGLDebugLogger(QObject *parent /TransferThis/ = 0); + virtual ~QOpenGLDebugLogger(); + bool initialize(); + bool isLogging() const; + QOpenGLDebugLogger::LoggingMode loggingMode() const; + qint64 maximumMessageLength() const; + void pushGroup(const QString &name, GLuint id = 0, QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource); + void popGroup(); + void enableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType, QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::Severity::AnySeverity); + void enableMessages(const QVector &ids, QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType); + void disableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType, QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::Severity::AnySeverity); + void disableMessages(const QVector &ids, QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType); + QList loggedMessages() const; + +public slots: + void logMessage(const QOpenGLDebugMessage &debugMessage); + void startLogging(QOpenGLDebugLogger::LoggingMode loggingMode = QOpenGLDebugLogger::AsynchronousLogging); + void stopLogging(); + +signals: + void messageLogged(const QOpenGLDebugMessage &debugMessage); + +private: + QOpenGLDebugLogger(const QOpenGLDebugLogger &); +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglframebufferobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglframebufferobject.sip new file mode 100644 index 0000000..a1d597b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglframebufferobject.sip @@ -0,0 +1,145 @@ +// qopenglframebufferobject.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_OpenGL) + +class QOpenGLFramebufferObject +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// The defaults are different for desktop OpenGL and OpenGL/ES so pretend the +// latter is the former. +#if defined(QT_OPENGL_ES) +#undef GL_RGBA8 +#define GL_RGBA8 GL_RGBA +#endif +%End + +public: + enum Attachment + { + NoAttachment, + CombinedDepthStencil, + Depth, + }; + + QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D); + QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D); + QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internal_format = GL_RGBA8); + QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internal_format = GL_RGBA8); + QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format); + QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format); + virtual ~QOpenGLFramebufferObject(); + QOpenGLFramebufferObjectFormat format() const; + bool isValid() const; + bool isBound() const; + bool bind(); + bool release(); + int width() const; + int height() const; + GLuint texture() const; +%If (Qt_5_6_0 -) + QVector textures() const; +%End + QSize size() const; + QImage toImage() const; +%If (Qt_5_4_0 -) + QImage toImage(bool flipped) const; +%End +%If (Qt_5_6_0 -) + QImage toImage(bool flipped, int colorAttachmentIndex) const; +%End + QOpenGLFramebufferObject::Attachment attachment() const; + void setAttachment(QOpenGLFramebufferObject::Attachment attachment); + GLuint handle() const; + static bool bindDefault(); + static bool hasOpenGLFramebufferObjects(); + static bool hasOpenGLFramebufferBlit(); +%If (Qt_5_7_0 -) + + enum FramebufferRestorePolicy + { + DontRestoreFramebufferBinding, + RestoreFramebufferBindingToDefault, + RestoreFrameBufferBinding, + }; + +%End + static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST); + static void blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST); +%If (Qt_5_6_0 -) + static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex); +%End +%If (Qt_5_7_0 -) + static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy); +%End +%If (Qt_5_3_0 -) + GLuint takeTexture(); +%End +%If (Qt_5_6_0 -) + GLuint takeTexture(int colorAttachmentIndex); +%End +%If (Qt_5_6_0 -) + void addColorAttachment(const QSize &size, GLenum internal_format = 0); +%End +%If (Qt_5_6_0 -) + void addColorAttachment(int width, int height, GLenum internal_format = 0); +%End +%If (Qt_5_6_0 -) + QVector sizes() const; +%End + +private: + QOpenGLFramebufferObject(const QOpenGLFramebufferObject &); +}; + +%End +%If (PyQt_OpenGL) + +class QOpenGLFramebufferObjectFormat +{ +%TypeHeaderCode +#include +%End + +public: + QOpenGLFramebufferObjectFormat(); + QOpenGLFramebufferObjectFormat(const QOpenGLFramebufferObjectFormat &other); + ~QOpenGLFramebufferObjectFormat(); + void setSamples(int samples); + int samples() const; + void setMipmap(bool enabled); + bool mipmap() const; + void setAttachment(QOpenGLFramebufferObject::Attachment attachment); + QOpenGLFramebufferObject::Attachment attachment() const; + void setTextureTarget(GLenum target); + GLenum textureTarget() const; + void setInternalTextureFormat(GLenum internalTextureFormat); + GLenum internalTextureFormat() const; + bool operator==(const QOpenGLFramebufferObjectFormat &other) const; + bool operator!=(const QOpenGLFramebufferObjectFormat &other) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglpaintdevice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglpaintdevice.sip new file mode 100644 index 0000000..9e8f54e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglpaintdevice.sip @@ -0,0 +1,60 @@ +// qopenglpaintdevice.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_OpenGL) + +class QOpenGLPaintDevice : public QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + QOpenGLPaintDevice(); + explicit QOpenGLPaintDevice(const QSize &size); + QOpenGLPaintDevice(int width, int height); + virtual ~QOpenGLPaintDevice(); + virtual QPaintEngine *paintEngine() const; + QOpenGLContext *context() const; + QSize size() const; + void setSize(const QSize &size); + qreal dotsPerMeterX() const; + qreal dotsPerMeterY() const; + void setDotsPerMeterX(qreal); + void setDotsPerMeterY(qreal); + void setPaintFlipped(bool flipped); + bool paintFlipped() const; + virtual void ensureActiveTarget(); +%If (Qt_5_1_0 -) + void setDevicePixelRatio(qreal devicePixelRatio); +%End + +protected: + virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; + +private: +%If (- Qt_5_1_0) + QOpenGLPaintDevice(const QOpenGLPaintDevice &); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglpixeltransferoptions.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglpixeltransferoptions.sip new file mode 100644 index 0000000..462edc4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglpixeltransferoptions.sip @@ -0,0 +1,56 @@ +// qopenglpixeltransferoptions.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) +%If (PyQt_OpenGL) + +class QOpenGLPixelTransferOptions +{ +%TypeHeaderCode +#include +%End + +public: + QOpenGLPixelTransferOptions(); + QOpenGLPixelTransferOptions(const QOpenGLPixelTransferOptions &); + ~QOpenGLPixelTransferOptions(); + void swap(QOpenGLPixelTransferOptions &other /Constrained/); + void setAlignment(int alignment); + int alignment() const; + void setSkipImages(int skipImages); + int skipImages() const; + void setSkipRows(int skipRows); + int skipRows() const; + void setSkipPixels(int skipPixels); + int skipPixels() const; + void setImageHeight(int imageHeight); + int imageHeight() const; + void setRowLength(int rowLength); + int rowLength() const; + void setLeastSignificantByteFirst(bool lsbFirst); + bool isLeastSignificantBitFirst() const; + void setSwapBytesEnabled(bool swapBytes); + bool isSwapBytesEnabled() const; +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglshaderprogram.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglshaderprogram.sip new file mode 100644 index 0000000..7c45835 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglshaderprogram.sip @@ -0,0 +1,364 @@ +// qopenglshaderprogram.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_OpenGL) + +class QOpenGLShader : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum ShaderTypeBit + { + Vertex, + Fragment, +%If (Qt_5_1_0 -) + Geometry, +%End +%If (Qt_5_1_0 -) + TessellationControl, +%End +%If (Qt_5_1_0 -) + TessellationEvaluation, +%End +%If (Qt_5_1_0 -) + Compute, +%End + }; + + typedef QFlags ShaderType; + QOpenGLShader(QOpenGLShader::ShaderType type, QObject *parent /TransferThis/ = 0); + virtual ~QOpenGLShader(); + QOpenGLShader::ShaderType shaderType() const; + bool compileSourceCode(const QByteArray &source); + bool compileSourceCode(const QString &source); + bool compileSourceFile(const QString &fileName); + QByteArray sourceCode() const; + bool isCompiled() const; + QString log() const; + GLuint shaderId() const; + static bool hasOpenGLShaders(QOpenGLShader::ShaderType type, QOpenGLContext *context = 0); +}; + +%End +%If (PyQt_OpenGL) +QFlags operator|(QOpenGLShader::ShaderTypeBit f1, QFlags f2); +%End +%If (PyQt_OpenGL) + +class QOpenGLShaderProgram : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QOpenGLShaderProgram(QObject *parent /TransferThis/ = 0); + virtual ~QOpenGLShaderProgram(); + bool addShader(QOpenGLShader *shader); + void removeShader(QOpenGLShader *shader); + QList shaders() const; + bool addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source); + bool addShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source); + bool addShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName); + void removeAllShaders(); + virtual bool link(); + bool isLinked() const; + QString log() const; + bool bind(); + void release(); + GLuint programId() const; + void bindAttributeLocation(const QByteArray &name, int location); + void bindAttributeLocation(const QString &name, int location); + int attributeLocation(const QByteArray &name) const; + int attributeLocation(const QString &name) const; + void setAttributeValue(int location, GLfloat value); + void setAttributeValue(int location, GLfloat x, GLfloat y); + void setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z); + void setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void setAttributeValue(int location, const QVector2D &value); + void setAttributeValue(int location, const QVector3D &value); + void setAttributeValue(int location, const QVector4D &value); + void setAttributeValue(int location, const QColor &value); + void setAttributeValue(const char *name, GLfloat value); + void setAttributeValue(const char *name, GLfloat x, GLfloat y); + void setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z); + void setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void setAttributeValue(const char *name, const QVector2D &value); + void setAttributeValue(const char *name, const QVector3D &value); + void setAttributeValue(const char *name, const QVector4D &value); + void setAttributeValue(const char *name, const QColor &value); + void setAttributeArray(int location, SIP_PYOBJECT values /TypeHint="PYQT_SHADER_ATTRIBUTE_ARRAY"/); +%MethodCode + const GLfloat *values; + int tsize; + + values = qpyopengl_attribute_array(a1, sipSelf, SIPLong_FromLong(a0), &tsize, + &sipError); + + if (values) + sipCpp->setAttributeArray(a0, values, tsize); +%End + + void setAttributeArray(const char *name, SIP_PYOBJECT values /TypeHint="PYQT_SHADER_ATTRIBUTE_ARRAY"/); +%MethodCode + const GLfloat *values; + int tsize; + + values = qpyopengl_attribute_array(a1, sipSelf, SIPBytes_FromString(a0), + &tsize, &sipError); + + if (values) + sipCpp->setAttributeArray(a0, values, tsize); +%End + + void setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride = 0); + void setAttributeBuffer(const char *name, GLenum type, int offset, int tupleSize, int stride = 0); + void enableAttributeArray(int location); + void enableAttributeArray(const char *name); + void disableAttributeArray(int location); + void disableAttributeArray(const char *name); + int uniformLocation(const QByteArray &name) const; + int uniformLocation(const QString &name) const; + void setUniformValue(int location, GLint value /Constrained/); + void setUniformValue(int location, GLfloat value /Constrained/); + void setUniformValue(int location, GLfloat x, GLfloat y); + void setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z); + void setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void setUniformValue(int location, const QVector2D &value); + void setUniformValue(int location, const QVector3D &value); + void setUniformValue(int location, const QVector4D &value); + void setUniformValue(int location, const QColor &color); + void setUniformValue(int location, const QPoint &point); + void setUniformValue(int location, const QPointF &point); + void setUniformValue(int location, const QSize &size); + void setUniformValue(int location, const QSizeF &size); + void setUniformValue(int location, const QMatrix2x2 &value); + void setUniformValue(int location, const QMatrix2x3 &value); + void setUniformValue(int location, const QMatrix2x4 &value); + void setUniformValue(int location, const QMatrix3x2 &value); + void setUniformValue(int location, const QMatrix3x3 &value); + void setUniformValue(int location, const QMatrix3x4 &value); + void setUniformValue(int location, const QMatrix4x2 &value); + void setUniformValue(int location, const QMatrix4x3 &value); + void setUniformValue(int location, const QMatrix4x4 &value); + void setUniformValue(int location, const QTransform &value); + void setUniformValue(const char *name, GLint value /Constrained/); + void setUniformValue(const char *name, GLfloat value /Constrained/); + void setUniformValue(const char *name, GLfloat x, GLfloat y); + void setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z); + void setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void setUniformValue(const char *name, const QVector2D &value); + void setUniformValue(const char *name, const QVector3D &value); + void setUniformValue(const char *name, const QVector4D &value); + void setUniformValue(const char *name, const QColor &color); + void setUniformValue(const char *name, const QPoint &point); + void setUniformValue(const char *name, const QPointF &point); + void setUniformValue(const char *name, const QSize &size); + void setUniformValue(const char *name, const QSizeF &size); + void setUniformValue(const char *name, const QMatrix2x2 &value); + void setUniformValue(const char *name, const QMatrix2x3 &value); + void setUniformValue(const char *name, const QMatrix2x4 &value); + void setUniformValue(const char *name, const QMatrix3x2 &value); + void setUniformValue(const char *name, const QMatrix3x3 &value); + void setUniformValue(const char *name, const QMatrix3x4 &value); + void setUniformValue(const char *name, const QMatrix4x2 &value); + void setUniformValue(const char *name, const QMatrix4x3 &value); + void setUniformValue(const char *name, const QMatrix4x4 &value); + void setUniformValue(const char *name, const QTransform &value); + void setUniformValueArray(int location, SIP_PYOBJECT values /TypeHint="PYQT_SHADER_UNIFORM_VALUE_ARRAY"/); +%MethodCode + const void *values; + const sipTypeDef *array_type; + int array_len, tsize; + + values = qpyopengl_uniform_value_array(a1, sipSelf, SIPLong_FromLong(a0), + &array_type, &array_len, &tsize, &sipError); + + if (values) + { + if (array_type == sipType_QVector2D) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QVector3D) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QVector4D) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix2x2) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix2x3) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix2x4) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix3x2) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix3x3) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix3x4) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix4x2) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix4x3) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix4x4) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len, tsize); + } +%End + + void setUniformValueArray(const char *name, SIP_PYOBJECT values /TypeHint="PYQT_SHADER_UNIFORM_VALUE_ARRAY"/); +%MethodCode + const void *values; + const sipTypeDef *array_type; + int array_len, tsize; + + values = qpyopengl_uniform_value_array(a1, sipSelf, SIPBytes_FromString(a0), + &array_type, &array_len, &tsize, &sipError); + + if (values) + { + if (array_type == sipType_QVector2D) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QVector3D) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QVector4D) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix2x2) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix2x3) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix2x4) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix3x2) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix3x3) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix3x4) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix4x2) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix4x3) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else if (array_type == sipType_QMatrix4x4) + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len); + else + sipCpp->setUniformValueArray(a0, + reinterpret_cast(values), array_len, tsize); + } +%End + + static bool hasOpenGLShaderPrograms(QOpenGLContext *context = 0); +%If (Qt_5_1_0 -) + int maxGeometryOutputVertices() const; +%End +%If (Qt_5_1_0 -) + void setPatchVertexCount(int count); +%End +%If (Qt_5_1_0 -) + int patchVertexCount() const; +%End +%If (Qt_5_1_0 -) + void setDefaultOuterTessellationLevels(const QVector &levels); +%End +%If (Qt_5_1_0 -) + QVector defaultOuterTessellationLevels() const; +%End +%If (Qt_5_1_0 -) + void setDefaultInnerTessellationLevels(const QVector &levels); +%End +%If (Qt_5_1_0 -) + QVector defaultInnerTessellationLevels() const; +%End +%If (Qt_5_3_0 -) + bool create(); +%End +%If (Qt_5_9_0 -) + bool addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QByteArray &source); +%End +%If (Qt_5_9_0 -) + bool addCacheableShaderFromSourceCode(QOpenGLShader::ShaderType type, const QString &source); +%End +%If (Qt_5_9_0 -) + bool addCacheableShaderFromSourceFile(QOpenGLShader::ShaderType type, const QString &fileName); +%End +}; + +%End + +%ModuleHeaderCode +#include "qpyopengl_api.h" +%End + +%InitialisationCode +#if defined(SIP_FEATURE_PyQt_OpenGL) +qpyopengl_init(); +#endif +%End + +%ExportedTypeHintCode +# Convenient aliases for complicated OpenGL types. +PYQT_OPENGL_ARRAY = typing.Union[typing.Sequence[int], typing.Sequence[float], + PyQt5.sip.Buffer, None] +PYQT_OPENGL_BOUND_ARRAY = typing.Union[typing.Sequence[int], + typing.Sequence[float], PyQt5.sip.Buffer, int, None] +%End + +%TypeHintCode +# Convenient aliases for complicated OpenGL types. +PYQT_SHADER_ATTRIBUTE_ARRAY = typing.Union[typing.Sequence['QVector2D'], + typing.Sequence['QVector3D'], typing.Sequence['QVector4D'], + typing.Sequence[typing.Sequence[float]]] +PYQT_SHADER_UNIFORM_VALUE_ARRAY = typing.Union[typing.Sequence['QVector2D'], + typing.Sequence['QVector3D'], typing.Sequence['QVector4D'], + typing.Sequence['QMatrix2x2'], typing.Sequence['QMatrix2x3'], + typing.Sequence['QMatrix2x4'], typing.Sequence['QMatrix3x2'], + typing.Sequence['QMatrix3x3'], typing.Sequence['QMatrix3x4'], + typing.Sequence['QMatrix4x2'], typing.Sequence['QMatrix4x3'], + typing.Sequence['QMatrix4x4'], typing.Sequence[typing.Sequence[float]]] +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltexture.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltexture.sip new file mode 100644 index 0000000..32fa42e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltexture.sip @@ -0,0 +1,644 @@ +// qopengltexture.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) +%If (PyQt_OpenGL) + +class QOpenGLTexture +{ +%TypeHeaderCode +#include +%End + +public: + enum Target + { + Target1D, + Target1DArray, + Target2D, + Target2DArray, + Target3D, + TargetCubeMap, + TargetCubeMapArray, + Target2DMultisample, + Target2DMultisampleArray, + TargetRectangle, + TargetBuffer, + }; + + enum BindingTarget + { + BindingTarget1D, + BindingTarget1DArray, + BindingTarget2D, + BindingTarget2DArray, + BindingTarget3D, + BindingTargetCubeMap, + BindingTargetCubeMapArray, + BindingTarget2DMultisample, + BindingTarget2DMultisampleArray, + BindingTargetRectangle, + BindingTargetBuffer, + }; + + enum MipMapGeneration + { + GenerateMipMaps, + DontGenerateMipMaps, + }; + + enum TextureUnitReset + { + ResetTextureUnit, + DontResetTextureUnit, + }; + + explicit QOpenGLTexture(QOpenGLTexture::Target target); + QOpenGLTexture(const QImage &image, QOpenGLTexture::MipMapGeneration genMipMaps = QOpenGLTexture::GenerateMipMaps); + ~QOpenGLTexture(); + bool create(); + void destroy(); + bool isCreated() const; + GLuint textureId() const; + void bind(); + void bind(uint unit, QOpenGLTexture::TextureUnitReset reset = QOpenGLTexture::DontResetTextureUnit); + void release(); + void release(uint unit, QOpenGLTexture::TextureUnitReset reset = QOpenGLTexture::DontResetTextureUnit); + bool isBound() const; + bool isBound(uint unit); + static GLuint boundTextureId(QOpenGLTexture::BindingTarget target); + static GLuint boundTextureId(uint unit, QOpenGLTexture::BindingTarget target); + + enum TextureFormat + { + NoFormat, + R8_UNorm, + RG8_UNorm, + RGB8_UNorm, + RGBA8_UNorm, + R16_UNorm, + RG16_UNorm, + RGB16_UNorm, + RGBA16_UNorm, + R8_SNorm, + RG8_SNorm, + RGB8_SNorm, + RGBA8_SNorm, + R16_SNorm, + RG16_SNorm, + RGB16_SNorm, + RGBA16_SNorm, + R8U, + RG8U, + RGB8U, + RGBA8U, + R16U, + RG16U, + RGB16U, + RGBA16U, + R32U, + RG32U, + RGB32U, + RGBA32U, + R8I, + RG8I, + RGB8I, + RGBA8I, + R16I, + RG16I, + RGB16I, + RGBA16I, + R32I, + RG32I, + RGB32I, + RGBA32I, + R16F, + RG16F, + RGB16F, + RGBA16F, + R32F, + RG32F, + RGB32F, + RGBA32F, + RGB9E5, + RG11B10F, + RG3B2, + R5G6B5, + RGB5A1, + RGBA4, + RGB10A2, + D16, + D24, + D24S8, + D32, + D32F, + D32FS8X24, + RGB_DXT1, + RGBA_DXT1, + RGBA_DXT3, + RGBA_DXT5, + R_ATI1N_UNorm, + R_ATI1N_SNorm, + RG_ATI2N_UNorm, + RG_ATI2N_SNorm, + RGB_BP_UNSIGNED_FLOAT, + RGB_BP_SIGNED_FLOAT, + RGB_BP_UNorm, + SRGB8, + SRGB8_Alpha8, + SRGB_DXT1, + SRGB_Alpha_DXT1, + SRGB_Alpha_DXT3, + SRGB_Alpha_DXT5, + SRGB_BP_UNorm, + DepthFormat, + AlphaFormat, + RGBFormat, + RGBAFormat, + LuminanceFormat, + LuminanceAlphaFormat, +%If (Qt_5_4_0 -) + S8, +%End +%If (Qt_5_5_0 -) + R11_EAC_UNorm, +%End +%If (Qt_5_5_0 -) + R11_EAC_SNorm, +%End +%If (Qt_5_5_0 -) + RG11_EAC_UNorm, +%End +%If (Qt_5_5_0 -) + RG11_EAC_SNorm, +%End +%If (Qt_5_5_0 -) + RGB8_ETC2, +%End +%If (Qt_5_5_0 -) + SRGB8_ETC2, +%End +%If (Qt_5_5_0 -) + RGB8_PunchThrough_Alpha1_ETC2, +%End +%If (Qt_5_5_0 -) + SRGB8_PunchThrough_Alpha1_ETC2, +%End +%If (Qt_5_5_0 -) + RGBA8_ETC2_EAC, +%End +%If (Qt_5_5_0 -) + SRGB8_Alpha8_ETC2_EAC, +%End +%If (Qt_5_6_0 -) + RGB8_ETC1, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_4x4, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_5x4, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_5x5, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_6x5, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_6x6, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_8x5, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_8x6, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_8x8, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_10x5, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_10x6, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_10x8, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_10x10, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_12x10, +%End +%If (Qt_5_9_0 -) + RGBA_ASTC_12x12, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_4x4, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_5x4, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_5x5, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_6x5, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_6x6, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_8x5, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_8x6, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_8x8, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_10x5, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_10x6, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_10x8, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_10x10, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_12x10, +%End +%If (Qt_5_9_0 -) + SRGB8_Alpha8_ASTC_12x12, +%End + }; + + void setFormat(QOpenGLTexture::TextureFormat format); + QOpenGLTexture::TextureFormat format() const; + void setSize(int width, int height = 1, int depth = 1); + int width() const; + int height() const; + int depth() const; + void setMipLevels(int levels); + int mipLevels() const; + int maximumMipLevels() const; + void setLayers(int layers); + int layers() const; + int faces() const; + void allocateStorage(); +%If (Qt_5_5_0 -) + void allocateStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType); +%End + bool isStorageAllocated() const; + QOpenGLTexture *createTextureView(QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat viewFormat, int minimumMipmapLevel, int maximumMipmapLevel, int minimumLayer, int maximumLayer) const /Factory/; + bool isTextureView() const; + + enum CubeMapFace + { + CubeMapPositiveX, + CubeMapNegativeX, + CubeMapPositiveY, + CubeMapNegativeY, + CubeMapPositiveZ, + CubeMapNegativeZ, + }; + + enum PixelFormat + { + NoSourceFormat, + Red, + RG, + RGB, + BGR, + RGBA, + BGRA, + Red_Integer, + RG_Integer, + RGB_Integer, + BGR_Integer, + RGBA_Integer, + BGRA_Integer, + Depth, + DepthStencil, + Alpha, + Luminance, + LuminanceAlpha, +%If (Qt_5_4_0 -) + Stencil, +%End + }; + + enum PixelType + { + NoPixelType, + Int8, + UInt8, + Int16, + UInt16, + Int32, + UInt32, + Float16, + Float16OES, + Float32, + UInt32_RGB9_E5, + UInt32_RG11B10F, + UInt8_RG3B2, + UInt8_RG3B2_Rev, + UInt16_RGB5A1, + UInt16_RGB5A1_Rev, + UInt16_R5G6B5, + UInt16_R5G6B5_Rev, + UInt16_RGBA4, + UInt16_RGBA4_Rev, + UInt32_RGB10A2, + UInt32_RGB10A2_Rev, +%If (Qt_5_4_0 -) + UInt32_RGBA8, +%End +%If (Qt_5_4_0 -) + UInt32_RGBA8_Rev, +%End +%If (Qt_5_4_0 -) + UInt32_D24S8, +%End +%If (Qt_5_4_0 -) + Float32_D32_UInt32_S8_X24, +%End + }; + +%If (Qt_5_3_0 -) + void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (- Qt_5_3_0) + void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_3_0 -) + void setData(int mipLevel, int layer, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (- Qt_5_3_0) + void setData(int mipLevel, int layer, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_3_0 -) + void setData(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (- Qt_5_3_0) + void setData(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_3_0 -) + void setData(QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (- Qt_5_3_0) + void setData(QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End + void setData(const QImage &image, QOpenGLTexture::MipMapGeneration genMipMaps = QOpenGLTexture::GenerateMipMaps); +%If (Qt_5_3_0 -) + void setCompressedData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (- Qt_5_3_0) + void setCompressedData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, int dataSize, void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_3_0 -) + void setCompressedData(int mipLevel, int layer, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (- Qt_5_3_0) + void setCompressedData(int mipLevel, int layer, int dataSize, void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_3_0 -) + void setCompressedData(int mipLevel, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (- Qt_5_3_0) + void setCompressedData(int mipLevel, int dataSize, void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_3_0 -) + void setCompressedData(int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (- Qt_5_3_0) + void setCompressedData(int dataSize, void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End + + enum Feature + { + ImmutableStorage, + ImmutableMultisampleStorage, + TextureRectangle, + TextureArrays, + Texture3D, + TextureMultisample, + TextureBuffer, + TextureCubeMapArrays, + Swizzle, + StencilTexturing, + AnisotropicFiltering, + NPOTTextures, + NPOTTextureRepeat, +%If (Qt_5_3_0 -) + Texture1D, +%End +%If (Qt_5_5_0 -) + TextureComparisonOperators, +%End +%If (Qt_5_5_0 -) + TextureMipMapLevel, +%End + }; + + typedef QFlags Features; + static bool hasFeature(QOpenGLTexture::Feature feature); + void setMipBaseLevel(int baseLevel); + int mipBaseLevel() const; + void setMipMaxLevel(int maxLevel); + int mipMaxLevel() const; + void setMipLevelRange(int baseLevel, int maxLevel); + QPair mipLevelRange() const; + void setAutoMipMapGenerationEnabled(bool enabled); + bool isAutoMipMapGenerationEnabled() const; + void generateMipMaps(); + void generateMipMaps(int baseLevel, bool resetBaseLevel = true); + + enum SwizzleComponent + { + SwizzleRed, + SwizzleGreen, + SwizzleBlue, + SwizzleAlpha, + }; + + enum SwizzleValue + { + RedValue, + GreenValue, + BlueValue, + AlphaValue, + ZeroValue, + OneValue, + }; + + void setSwizzleMask(QOpenGLTexture::SwizzleComponent component, QOpenGLTexture::SwizzleValue value); + void setSwizzleMask(QOpenGLTexture::SwizzleValue r, QOpenGLTexture::SwizzleValue g, QOpenGLTexture::SwizzleValue b, QOpenGLTexture::SwizzleValue a); + QOpenGLTexture::SwizzleValue swizzleMask(QOpenGLTexture::SwizzleComponent component) const; + + enum DepthStencilMode + { + DepthMode, + StencilMode, + }; + + void setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode); + QOpenGLTexture::DepthStencilMode depthStencilMode() const; + + enum Filter + { + Nearest, + Linear, + NearestMipMapNearest, + NearestMipMapLinear, + LinearMipMapNearest, + LinearMipMapLinear, + }; + + void setMinificationFilter(QOpenGLTexture::Filter filter); + QOpenGLTexture::Filter minificationFilter() const; + void setMagnificationFilter(QOpenGLTexture::Filter filter); + QOpenGLTexture::Filter magnificationFilter() const; + void setMinMagFilters(QOpenGLTexture::Filter minificationFilter, QOpenGLTexture::Filter magnificationFilter); + QPair minMagFilters() const; + void setMaximumAnisotropy(float anisotropy); + float maximumAnisotropy() const; + + enum WrapMode + { + Repeat, + MirroredRepeat, + ClampToEdge, + ClampToBorder, + }; + + enum CoordinateDirection + { + DirectionS, + DirectionT, + DirectionR, + }; + + void setWrapMode(QOpenGLTexture::WrapMode mode); + void setWrapMode(QOpenGLTexture::CoordinateDirection direction, QOpenGLTexture::WrapMode mode); + QOpenGLTexture::WrapMode wrapMode(QOpenGLTexture::CoordinateDirection direction) const; + void setBorderColor(QColor color); + QColor borderColor() const; + void setMinimumLevelOfDetail(float value); + float minimumLevelOfDetail() const; + void setMaximumLevelOfDetail(float value); + float maximumLevelOfDetail() const; + void setLevelOfDetailRange(float min, float max); + QPair levelOfDetailRange() const; + void setLevelofDetailBias(float bias); + float levelofDetailBias() const; +%If (Qt_5_4_0 -) + QOpenGLTexture::Target target() const; +%End +%If (Qt_5_4_0 -) + void setSamples(int samples); +%End +%If (Qt_5_4_0 -) + int samples() const; +%End +%If (Qt_5_4_0 -) + void setFixedSamplePositions(bool fixed); +%End +%If (Qt_5_4_0 -) + bool isFixedSamplePositions() const; +%End +%If (Qt_5_5_0 -) + + enum ComparisonFunction + { + CompareLessEqual, + CompareGreaterEqual, + CompareLess, + CompareGreater, + CompareEqual, + CommpareNotEqual, + CompareAlways, + CompareNever, + }; + +%End +%If (Qt_5_5_0 -) + void setComparisonFunction(QOpenGLTexture::ComparisonFunction function); +%End +%If (Qt_5_5_0 -) + QOpenGLTexture::ComparisonFunction comparisonFunction() const; +%End +%If (Qt_5_5_0 -) + + enum ComparisonMode + { + CompareRefToTexture, + CompareNone, + }; + +%End +%If (Qt_5_5_0 -) + void setComparisonMode(QOpenGLTexture::ComparisonMode mode); +%End +%If (Qt_5_5_0 -) + QOpenGLTexture::ComparisonMode comparisonMode() const; +%End +%If (Qt_5_9_0 -) + void setData(int mipLevel, int layer, int layerCount, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_9_0 -) + void setCompressedData(int mipLevel, int layer, int layerCount, QOpenGLTexture::CubeMapFace cubeFace, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_14_0 -) + void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_14_0 -) + void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_14_0 -) + void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, int layer, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_14_0 -) + void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End +%If (Qt_5_14_0 -) + void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, int layerCount, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0); +%End + +private: + QOpenGLTexture(const QOpenGLTexture &); +}; + +%End +%End +%If (Qt_5_2_0 -) +%If (PyQt_OpenGL) +QFlags operator|(QOpenGLTexture::Feature f1, QFlags f2); +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltextureblitter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltextureblitter.sip new file mode 100644 index 0000000..487c8b0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltextureblitter.sip @@ -0,0 +1,60 @@ +// qopengltextureblitter.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) +%If (PyQt_OpenGL) + +class QOpenGLTextureBlitter +{ +%TypeHeaderCode +#include +%End + +public: + QOpenGLTextureBlitter(); + ~QOpenGLTextureBlitter(); + + enum Origin + { + OriginBottomLeft, + OriginTopLeft, + }; + + bool create(); + bool isCreated() const; + void destroy(); + bool supportsExternalOESTarget() const; + void bind(GLenum target = GL_TEXTURE_2D); + void release(); + void setRedBlueSwizzle(bool swizzle); + void setOpacity(float opacity); + void blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin); + void blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform); + static QMatrix4x4 targetTransform(const QRectF &target, const QRect &viewport); + static QMatrix3x3 sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin); + +private: + QOpenGLTextureBlitter(const QOpenGLTextureBlitter &); +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltimerquery.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltimerquery.sip new file mode 100644 index 0000000..0ecae13 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopengltimerquery.sip @@ -0,0 +1,75 @@ +// qopengltimerquery.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) +%If (PyQt_Desktop_OpenGL) + +class QOpenGLTimerQuery : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QOpenGLTimerQuery(QObject *parent /TransferThis/ = 0); + virtual ~QOpenGLTimerQuery(); + bool create(); + void destroy(); + bool isCreated() const; + GLuint objectId() const; + void begin(); + void end(); + GLuint64 waitForTimestamp() const /ReleaseGIL/; + void recordTimestamp(); + bool isResultAvailable() const; + GLuint64 waitForResult() const /ReleaseGIL/; +}; + +%End +%End +%If (Qt_5_1_0 -) +%If (PyQt_Desktop_OpenGL) + +class QOpenGLTimeMonitor : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QOpenGLTimeMonitor(QObject *parent /TransferThis/ = 0); + virtual ~QOpenGLTimeMonitor(); + void setSampleCount(int sampleCount); + int sampleCount() const; + bool create(); + void destroy(); + bool isCreated() const; + QVector objectIds() const; + int recordSample(); + bool isResultAvailable() const; + QVector waitForSamples() const /ReleaseGIL/; + QVector waitForIntervals() const /ReleaseGIL/; + void reset(); +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglversionfunctions.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglversionfunctions.sip new file mode 100644 index 0000000..88eaac3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglversionfunctions.sip @@ -0,0 +1,36 @@ +// qopenglversionfunctions.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) + +class QAbstractOpenGLFunctions /NoDefaultCtors,Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + + QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &); +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglvertexarrayobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglvertexarrayobject.sip new file mode 100644 index 0000000..2cdf655 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglvertexarrayobject.sip @@ -0,0 +1,71 @@ +// qopenglvertexarrayobject.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) +%If (PyQt_OpenGL) + +class QOpenGLVertexArrayObject : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QOpenGLVertexArrayObject(QObject *parent /TransferThis/ = 0); + virtual ~QOpenGLVertexArrayObject(); + bool create(); + void destroy(); + bool isCreated() const; + GLuint objectId() const; + void bind(); + void release(); + + class Binder + { +%TypeHeaderCode +#include +%End + + public: + Binder(QOpenGLVertexArrayObject *v); + ~Binder(); + void release(); + void rebind(); + SIP_PYOBJECT __enter__(); +%MethodCode + // Just return a reference to self. + sipRes = sipSelf; + Py_INCREF(sipRes); +%End + + void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); +%MethodCode + sipCpp->release(); +%End + + private: + Binder(const QOpenGLVertexArrayObject::Binder &); + }; +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglwindow.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglwindow.sip new file mode 100644 index 0000000..a8b8842 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qopenglwindow.sip @@ -0,0 +1,73 @@ +// qopenglwindow.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) +%If (PyQt_OpenGL) + +class QOpenGLWindow : public QPaintDeviceWindow +{ +%TypeHeaderCode +#include +%End + +public: + enum UpdateBehavior + { + NoPartialUpdate, + PartialUpdateBlit, + PartialUpdateBlend, + }; + + QOpenGLWindow(QOpenGLWindow::UpdateBehavior updateBehavior = QOpenGLWindow::NoPartialUpdate, QWindow *parent /TransferThis/ = 0); +%If (Qt_5_5_0 -) + QOpenGLWindow(QOpenGLContext *shareContext, QOpenGLWindow::UpdateBehavior updateBehavior = QOpenGLWindow::NoPartialUpdate, QWindow *parent /TransferThis/ = 0); +%End +%If (Qt_5_5_0 -) + virtual ~QOpenGLWindow(); +%End + QOpenGLWindow::UpdateBehavior updateBehavior() const; + bool isValid() const; + void makeCurrent(); + void doneCurrent(); + QOpenGLContext *context() const; + GLuint defaultFramebufferObject() const; + QImage grabFramebuffer(); +%If (Qt_5_5_0 -) + QOpenGLContext *shareContext() const; +%End + +signals: + void frameSwapped(); + +protected: + virtual void initializeGL(); + virtual void resizeGL(int w, int h); + virtual void paintGL(); + virtual void paintUnderGL(); + virtual void paintOverGL(); + virtual void paintEvent(QPaintEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagedpaintdevice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagedpaintdevice.sip new file mode 100644 index 0000000..9a0dc85 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagedpaintdevice.sip @@ -0,0 +1,403 @@ +// qpagedpaintdevice.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPagedPaintDevice : public QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + QPagedPaintDevice(); + virtual ~QPagedPaintDevice(); + virtual bool newPage() = 0; + + enum PageSize + { + A4, + B5, + Letter, + Legal, + Executive, + A0, + A1, + A2, + A3, + A5, + A6, + A7, + A8, + A9, + B0, + B1, + B10, + B2, + B3, + B4, + B6, + B7, + B8, + B9, + C5E, + Comm10E, + DLE, + Folio, + Ledger, + Tabloid, + Custom, +%If (Qt_5_3_0 -) + A10, +%End +%If (Qt_5_3_0 -) + A3Extra, +%End +%If (Qt_5_3_0 -) + A4Extra, +%End +%If (Qt_5_3_0 -) + A4Plus, +%End +%If (Qt_5_3_0 -) + A4Small, +%End +%If (Qt_5_3_0 -) + A5Extra, +%End +%If (Qt_5_3_0 -) + B5Extra, +%End +%If (Qt_5_3_0 -) + JisB0, +%End +%If (Qt_5_3_0 -) + JisB1, +%End +%If (Qt_5_3_0 -) + JisB2, +%End +%If (Qt_5_3_0 -) + JisB3, +%End +%If (Qt_5_3_0 -) + JisB4, +%End +%If (Qt_5_3_0 -) + JisB5, +%End +%If (Qt_5_3_0 -) + JisB6, +%End +%If (Qt_5_3_0 -) + JisB7, +%End +%If (Qt_5_3_0 -) + JisB8, +%End +%If (Qt_5_3_0 -) + JisB9, +%End +%If (Qt_5_3_0 -) + JisB10, +%End +%If (Qt_5_3_0 -) + AnsiC, +%End +%If (Qt_5_3_0 -) + AnsiD, +%End +%If (Qt_5_3_0 -) + AnsiE, +%End +%If (Qt_5_3_0 -) + LegalExtra, +%End +%If (Qt_5_3_0 -) + LetterExtra, +%End +%If (Qt_5_3_0 -) + LetterPlus, +%End +%If (Qt_5_3_0 -) + LetterSmall, +%End +%If (Qt_5_3_0 -) + TabloidExtra, +%End +%If (Qt_5_3_0 -) + ArchA, +%End +%If (Qt_5_3_0 -) + ArchB, +%End +%If (Qt_5_3_0 -) + ArchC, +%End +%If (Qt_5_3_0 -) + ArchD, +%End +%If (Qt_5_3_0 -) + ArchE, +%End +%If (Qt_5_3_0 -) + Imperial7x9, +%End +%If (Qt_5_3_0 -) + Imperial8x10, +%End +%If (Qt_5_3_0 -) + Imperial9x11, +%End +%If (Qt_5_3_0 -) + Imperial9x12, +%End +%If (Qt_5_3_0 -) + Imperial10x11, +%End +%If (Qt_5_3_0 -) + Imperial10x13, +%End +%If (Qt_5_3_0 -) + Imperial10x14, +%End +%If (Qt_5_3_0 -) + Imperial12x11, +%End +%If (Qt_5_3_0 -) + Imperial15x11, +%End +%If (Qt_5_3_0 -) + ExecutiveStandard, +%End +%If (Qt_5_3_0 -) + Note, +%End +%If (Qt_5_3_0 -) + Quarto, +%End +%If (Qt_5_3_0 -) + Statement, +%End +%If (Qt_5_3_0 -) + SuperA, +%End +%If (Qt_5_3_0 -) + SuperB, +%End +%If (Qt_5_3_0 -) + Postcard, +%End +%If (Qt_5_3_0 -) + DoublePostcard, +%End +%If (Qt_5_3_0 -) + Prc16K, +%End +%If (Qt_5_3_0 -) + Prc32K, +%End +%If (Qt_5_3_0 -) + Prc32KBig, +%End +%If (Qt_5_3_0 -) + FanFoldUS, +%End +%If (Qt_5_3_0 -) + FanFoldGerman, +%End +%If (Qt_5_3_0 -) + FanFoldGermanLegal, +%End +%If (Qt_5_3_0 -) + EnvelopeB4, +%End +%If (Qt_5_3_0 -) + EnvelopeB5, +%End +%If (Qt_5_3_0 -) + EnvelopeB6, +%End +%If (Qt_5_3_0 -) + EnvelopeC0, +%End +%If (Qt_5_3_0 -) + EnvelopeC1, +%End +%If (Qt_5_3_0 -) + EnvelopeC2, +%End +%If (Qt_5_3_0 -) + EnvelopeC3, +%End +%If (Qt_5_3_0 -) + EnvelopeC4, +%End +%If (Qt_5_3_0 -) + EnvelopeC6, +%End +%If (Qt_5_3_0 -) + EnvelopeC65, +%End +%If (Qt_5_3_0 -) + EnvelopeC7, +%End +%If (Qt_5_3_0 -) + Envelope9, +%End +%If (Qt_5_3_0 -) + Envelope11, +%End +%If (Qt_5_3_0 -) + Envelope12, +%End +%If (Qt_5_3_0 -) + Envelope14, +%End +%If (Qt_5_3_0 -) + EnvelopeMonarch, +%End +%If (Qt_5_3_0 -) + EnvelopePersonal, +%End +%If (Qt_5_3_0 -) + EnvelopeChou3, +%End +%If (Qt_5_3_0 -) + EnvelopeChou4, +%End +%If (Qt_5_3_0 -) + EnvelopeInvite, +%End +%If (Qt_5_3_0 -) + EnvelopeItalian, +%End +%If (Qt_5_3_0 -) + EnvelopeKaku2, +%End +%If (Qt_5_3_0 -) + EnvelopeKaku3, +%End +%If (Qt_5_3_0 -) + EnvelopePrc1, +%End +%If (Qt_5_3_0 -) + EnvelopePrc2, +%End +%If (Qt_5_3_0 -) + EnvelopePrc3, +%End +%If (Qt_5_3_0 -) + EnvelopePrc4, +%End +%If (Qt_5_3_0 -) + EnvelopePrc5, +%End +%If (Qt_5_3_0 -) + EnvelopePrc6, +%End +%If (Qt_5_3_0 -) + EnvelopePrc7, +%End +%If (Qt_5_3_0 -) + EnvelopePrc8, +%End +%If (Qt_5_3_0 -) + EnvelopePrc9, +%End +%If (Qt_5_3_0 -) + EnvelopePrc10, +%End +%If (Qt_5_3_0 -) + EnvelopeYou4, +%End +%If (Qt_5_3_0 -) + NPaperSize, +%End +%If (Qt_5_3_0 -) + AnsiA, +%End +%If (Qt_5_3_0 -) + AnsiB, +%End +%If (Qt_5_3_0 -) + EnvelopeC5, +%End +%If (Qt_5_3_0 -) + EnvelopeDL, +%End +%If (Qt_5_3_0 -) + Envelope10, +%End +%If (Qt_5_3_0 -) + LastPageSize, +%End + }; + +%If (Qt_5_10_0 -) + + enum PdfVersion + { + PdfVersion_1_4, + PdfVersion_A1b, +%If (Qt_5_12_0 -) + PdfVersion_1_6, +%End + }; + +%End + virtual void setPageSize(QPagedPaintDevice::PageSize size); + QPagedPaintDevice::PageSize pageSize() const; + virtual void setPageSizeMM(const QSizeF &size); + QSizeF pageSizeMM() const; + + struct Margins + { +%TypeHeaderCode +#include +%End + + qreal left; + qreal right; + qreal top; + qreal bottom; + }; + + virtual void setMargins(const QPagedPaintDevice::Margins &margins); + QPagedPaintDevice::Margins margins() const; +%If (Qt_5_3_0 -) + bool setPageLayout(const QPageLayout &pageLayout); +%End +%If (Qt_5_3_0 -) + bool setPageSize(const QPageSize &pageSize); +%End +%If (Qt_5_3_0 -) + bool setPageOrientation(QPageLayout::Orientation orientation); +%End +%If (Qt_5_3_0 -) + bool setPageMargins(const QMarginsF &margins); +%End +%If (Qt_5_3_0 -) + bool setPageMargins(const QMarginsF &margins, QPageLayout::Unit units); +%End +%If (Qt_5_3_0 -) + QPageLayout pageLayout() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagelayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagelayout.sip new file mode 100644 index 0000000..3d3cf79 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagelayout.sip @@ -0,0 +1,97 @@ +// qpagelayout.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +class QPageLayout +{ +%TypeHeaderCode +#include +%End + +public: + enum Unit + { + Millimeter, + Point, + Inch, + Pica, + Didot, + Cicero, + }; + + enum Orientation + { + Portrait, + Landscape, + }; + + enum Mode + { + StandardMode, + FullPageMode, + }; + + QPageLayout(); + QPageLayout(const QPageSize &pageSize, QPageLayout::Orientation orientation, const QMarginsF &margins, QPageLayout::Unit units = QPageLayout::Point, const QMarginsF &minMargins = QMarginsF(0, 0, 0, 0)); + QPageLayout(const QPageLayout &other); + ~QPageLayout(); + void swap(QPageLayout &other /Constrained/); + bool isEquivalentTo(const QPageLayout &other) const; + bool isValid() const; + void setMode(QPageLayout::Mode mode); + QPageLayout::Mode mode() const; + void setPageSize(const QPageSize &pageSize, const QMarginsF &minMargins = QMarginsF(0, 0, 0, 0)); + QPageSize pageSize() const; + void setOrientation(QPageLayout::Orientation orientation); + QPageLayout::Orientation orientation() const; + void setUnits(QPageLayout::Unit units); + QPageLayout::Unit units() const; + bool setMargins(const QMarginsF &margins); + bool setLeftMargin(qreal leftMargin); + bool setRightMargin(qreal rightMargin); + bool setTopMargin(qreal topMargin); + bool setBottomMargin(qreal bottomMargin); + QMarginsF margins() const; + QMarginsF margins(QPageLayout::Unit units) const; + QMargins marginsPoints() const; + QMargins marginsPixels(int resolution) const; + void setMinimumMargins(const QMarginsF &minMargins); + QMarginsF minimumMargins() const; + QMarginsF maximumMargins() const; + QRectF fullRect() const; + QRectF fullRect(QPageLayout::Unit units) const; + QRect fullRectPoints() const; + QRect fullRectPixels(int resolution) const; + QRectF paintRect() const; + QRectF paintRect(QPageLayout::Unit units) const; + QRect paintRectPoints() const; + QRect paintRectPixels(int resolution) const; +}; + +%End +%If (Qt_5_3_0 -) +bool operator==(const QPageLayout &lhs, const QPageLayout &rhs); +%End +%If (Qt_5_3_0 -) +bool operator!=(const QPageLayout &lhs, const QPageLayout &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagesize.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagesize.sip new file mode 100644 index 0000000..10257e2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpagesize.sip @@ -0,0 +1,220 @@ +// qpagesize.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +class QPageSize +{ +%TypeHeaderCode +#include +%End + +public: + enum PageSizeId + { + A4, + B5, + Letter, + Legal, + Executive, + A0, + A1, + A2, + A3, + A5, + A6, + A7, + A8, + A9, + B0, + B1, + B10, + B2, + B3, + B4, + B6, + B7, + B8, + B9, + C5E, + Comm10E, + DLE, + Folio, + Ledger, + Tabloid, + Custom, + A10, + A3Extra, + A4Extra, + A4Plus, + A4Small, + A5Extra, + B5Extra, + JisB0, + JisB1, + JisB2, + JisB3, + JisB4, + JisB5, + JisB6, + JisB7, + JisB8, + JisB9, + JisB10, + AnsiC, + AnsiD, + AnsiE, + LegalExtra, + LetterExtra, + LetterPlus, + LetterSmall, + TabloidExtra, + ArchA, + ArchB, + ArchC, + ArchD, + ArchE, + Imperial7x9, + Imperial8x10, + Imperial9x11, + Imperial9x12, + Imperial10x11, + Imperial10x13, + Imperial10x14, + Imperial12x11, + Imperial15x11, + ExecutiveStandard, + Note, + Quarto, + Statement, + SuperA, + SuperB, + Postcard, + DoublePostcard, + Prc16K, + Prc32K, + Prc32KBig, + FanFoldUS, + FanFoldGerman, + FanFoldGermanLegal, + EnvelopeB4, + EnvelopeB5, + EnvelopeB6, + EnvelopeC0, + EnvelopeC1, + EnvelopeC2, + EnvelopeC3, + EnvelopeC4, + EnvelopeC6, + EnvelopeC65, + EnvelopeC7, + Envelope9, + Envelope11, + Envelope12, + Envelope14, + EnvelopeMonarch, + EnvelopePersonal, + EnvelopeChou3, + EnvelopeChou4, + EnvelopeInvite, + EnvelopeItalian, + EnvelopeKaku2, + EnvelopeKaku3, + EnvelopePrc1, + EnvelopePrc2, + EnvelopePrc3, + EnvelopePrc4, + EnvelopePrc5, + EnvelopePrc6, + EnvelopePrc7, + EnvelopePrc8, + EnvelopePrc9, + EnvelopePrc10, + EnvelopeYou4, + NPageSize, + NPaperSize, + AnsiA, + AnsiB, + EnvelopeC5, + EnvelopeDL, + Envelope10, + LastPageSize, + }; + + enum Unit + { + Millimeter, + Point, + Inch, + Pica, + Didot, + Cicero, + }; + + enum SizeMatchPolicy + { + FuzzyMatch, + FuzzyOrientationMatch, + ExactMatch, + }; + + QPageSize(); + explicit QPageSize(QPageSize::PageSizeId pageSizeId); + QPageSize(const QSize &pointSize, const QString &name = QString(), QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch); + QPageSize(const QSizeF &size, QPageSize::Unit units, const QString &name = QString(), QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch); + QPageSize(const QPageSize &other); + ~QPageSize(); + void swap(QPageSize &other /Constrained/); + bool isEquivalentTo(const QPageSize &other) const; + bool isValid() const; + QString key() const; + QString name() const; + QPageSize::PageSizeId id() const; + int windowsId() const; + QSizeF definitionSize() const; + QPageSize::Unit definitionUnits() const; + QSizeF size(QPageSize::Unit units) const; + QSize sizePoints() const; + QSize sizePixels(int resolution) const; + QRectF rect(QPageSize::Unit units) const; + QRect rectPoints() const; + QRect rectPixels(int resolution) const; + static QString key(QPageSize::PageSizeId pageSizeId); + static QString name(QPageSize::PageSizeId pageSizeId); + static QPageSize::PageSizeId id(const QSize &pointSize, QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch); + static QPageSize::PageSizeId id(const QSizeF &size, QPageSize::Unit units, QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch); + static QPageSize::PageSizeId id(int windowsId); + static int windowsId(QPageSize::PageSizeId pageSizeId); + static QSizeF definitionSize(QPageSize::PageSizeId pageSizeId); + static QPageSize::Unit definitionUnits(QPageSize::PageSizeId pageSizeId); + static QSizeF size(QPageSize::PageSizeId pageSizeId, QPageSize::Unit units); + static QSize sizePoints(QPageSize::PageSizeId pageSizeId); + static QSize sizePixels(QPageSize::PageSizeId pageSizeId, int resolution); +}; + +%End +%If (Qt_5_3_0 -) +bool operator==(const QPageSize &lhs, const QPageSize &rhs); +%End +%If (Qt_5_3_0 -) +bool operator!=(const QPageSize &lhs, const QPageSize &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintdevice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintdevice.sip new file mode 100644 index 0000000..c79982f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintdevice.sip @@ -0,0 +1,81 @@ +// qpaintdevice.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + enum PaintDeviceMetric + { + PdmWidth, + PdmHeight, + PdmWidthMM, + PdmHeightMM, + PdmNumColors, + PdmDepth, + PdmDpiX, + PdmDpiY, + PdmPhysicalDpiX, + PdmPhysicalDpiY, +%If (Qt_5_1_0 -) + PdmDevicePixelRatio, +%End +%If (Qt_5_6_0 -) + PdmDevicePixelRatioScaled, +%End + }; + + virtual ~QPaintDevice(); + virtual QPaintEngine *paintEngine() const = 0; + int width() const; + int height() const; + int widthMM() const; + int heightMM() const; + int logicalDpiX() const; + int logicalDpiY() const; + int physicalDpiX() const; + int physicalDpiY() const; + int depth() const; + bool paintingActive() const; + int colorCount() const; +%If (Qt_5_1_0 -) + int devicePixelRatio() const; +%End + +protected: + QPaintDevice(); + virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; + +public: +%If (Qt_5_6_0 -) + qreal devicePixelRatioF() const; +%End +%If (Qt_5_6_0 -) + static qreal devicePixelRatioFScale(); +%End + +private: + QPaintDevice(const QPaintDevice &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintdevicewindow.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintdevicewindow.sip new file mode 100644 index 0000000..fdfd7b2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintdevicewindow.sip @@ -0,0 +1,45 @@ +// qpaintdevicewindow.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QPaintDeviceWindow : public QWindow, public QPaintDevice /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + void update(const QRect &rect); + void update(const QRegion ®ion); + +public slots: + void update(); + +protected: + virtual void paintEvent(QPaintEvent *event); + virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; + virtual void exposeEvent(QExposeEvent *); + virtual bool event(QEvent *event); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintengine.sip new file mode 100644 index 0000000..288b4da --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpaintengine.sip @@ -0,0 +1,196 @@ +// qpaintengine.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextItem +{ +%TypeHeaderCode +#include +%End + +public: + enum RenderFlag + { + RightToLeft, + Overline, + Underline, + StrikeOut, + }; + + typedef QFlags RenderFlags; + qreal descent() const; + qreal ascent() const; + qreal width() const; + QTextItem::RenderFlags renderFlags() const; + QString text() const; + QFont font() const; +}; + +QFlags operator|(QTextItem::RenderFlag f1, QFlags f2); + +class QPaintEngine +{ +%TypeHeaderCode +#include +%End + +public: + enum PaintEngineFeature + { + PrimitiveTransform, + PatternTransform, + PixmapTransform, + PatternBrush, + LinearGradientFill, + RadialGradientFill, + ConicalGradientFill, + AlphaBlend, + PorterDuff, + PainterPaths, + Antialiasing, + BrushStroke, + ConstantOpacity, + MaskedBrush, + PaintOutsidePaintEvent, + PerspectiveTransform, + BlendModes, + ObjectBoundingModeGradients, + RasterOpModes, + AllFeatures, + }; + + typedef QFlags PaintEngineFeatures; + + enum DirtyFlag + { + DirtyPen, + DirtyBrush, + DirtyBrushOrigin, + DirtyFont, + DirtyBackground, + DirtyBackgroundMode, + DirtyTransform, + DirtyClipRegion, + DirtyClipPath, + DirtyHints, + DirtyCompositionMode, + DirtyClipEnabled, + DirtyOpacity, + AllDirty, + }; + + typedef QFlags DirtyFlags; + + enum PolygonDrawMode + { + OddEvenMode, + WindingMode, + ConvexMode, + PolylineMode, + }; + + explicit QPaintEngine(QPaintEngine::PaintEngineFeatures features = QPaintEngine::PaintEngineFeatures()); + virtual ~QPaintEngine(); + bool isActive() const; + void setActive(bool newState); + virtual bool begin(QPaintDevice *pdev) = 0; + virtual bool end() = 0; + virtual void updateState(const QPaintEngineState &state /NoCopy/) = 0; + virtual void drawRects(const QRect *rects /Array/, int rectCount /ArraySize/); + virtual void drawRects(const QRectF *rects /Array/, int rectCount /ArraySize/); + virtual void drawLines(const QLine *lines /Array/, int lineCount /ArraySize/); + virtual void drawLines(const QLineF *lines /Array/, int lineCount /ArraySize/); + virtual void drawEllipse(const QRectF &r); + virtual void drawEllipse(const QRect &r); + virtual void drawPath(const QPainterPath &path); + virtual void drawPoints(const QPointF *points /Array/, int pointCount /ArraySize/); + virtual void drawPoints(const QPoint *points /Array/, int pointCount /ArraySize/); + virtual void drawPolygon(const QPointF *points /Array/, int pointCount /ArraySize/, QPaintEngine::PolygonDrawMode mode); + virtual void drawPolygon(const QPoint *points /Array/, int pointCount /ArraySize/, QPaintEngine::PolygonDrawMode mode); + virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0; + virtual void drawTextItem(const QPointF &p, const QTextItem &textItem /NoCopy/); + virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s); + virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor); + void setPaintDevice(QPaintDevice *device); + QPaintDevice *paintDevice() const; + + enum Type + { + X11, + Windows, + QuickDraw, + CoreGraphics, + MacPrinter, + QWindowSystem, + PostScript, + OpenGL, + Picture, + SVG, + Raster, + Direct3D, + Pdf, + OpenVG, + OpenGL2, + PaintBuffer, + Blitter, +%If (Qt_5_3_0 -) + Direct2D, +%End + User, + MaxUser, + }; + + virtual QPaintEngine::Type type() const = 0; + QPainter *painter() const; + bool hasFeature(QPaintEngine::PaintEngineFeatures feature) const; + +private: + QPaintEngine(const QPaintEngine &); +}; + +QFlags operator|(QPaintEngine::PaintEngineFeature f1, QFlags f2); + +class QPaintEngineState +{ +%TypeHeaderCode +#include +%End + +public: + QPaintEngine::DirtyFlags state() const; + QPen pen() const; + QBrush brush() const; + QPointF brushOrigin() const; + QBrush backgroundBrush() const; + Qt::BGMode backgroundMode() const; + QFont font() const; + qreal opacity() const; + Qt::ClipOperation clipOperation() const; + QRegion clipRegion() const; + QPainterPath clipPath() const; + bool isClipEnabled() const; + QPainter::RenderHints renderHints() const; + QPainter::CompositionMode compositionMode() const; + QPainter *painter() const; + QTransform transform() const; + bool brushNeedsResolving() const; + bool penNeedsResolving() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpainter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpainter.sip new file mode 100644 index 0000000..f76d0b7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpainter.sip @@ -0,0 +1,561 @@ +// qpainter.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPainter +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// Return an array on the heap of class instances extracted from a set of +// Python arguments. +template +static TYPE *qtgui_inst_array(const TYPE *first, PyObject *t, sipTypeDef *td) +{ + TYPE *arr = new TYPE[1 + PyTuple_Size(t)]; + + arr[0] = *first; + + for (Py_ssize_t i = 0; i < PyTuple_Size(t); ++i) + { + int iserr = 0, state; + TYPE *itm; + + itm = reinterpret_cast(sipForceConvertToType(PyTuple_GetItem(t, i), td, 0, SIP_NOT_NONE, &state, &iserr)); + + if (iserr) + { + sipReleaseType(itm, td, state); + + PyErr_Format(PyExc_TypeError, "each argument must be an instance of %s", sipPyTypeName(sipTypeAsPyTypeObject(td))); + + delete[] arr; + return 0; + } + + arr[1 + i] = *itm; + + sipReleaseType(itm, td, state); + } + + return arr; +} +%End + +public: + enum RenderHint + { + Antialiasing, + TextAntialiasing, + SmoothPixmapTransform, + HighQualityAntialiasing, + NonCosmeticDefaultPen, + Qt4CompatiblePainting, +%If (Qt_5_13_0 -) + LosslessImageRendering, +%End + }; + + typedef QFlags RenderHints; + QPainter(); + explicit QPainter(QPaintDevice *); + ~QPainter(); + SIP_PYOBJECT __enter__(); +%MethodCode + // Check a device was passed. + if (sipCpp->isActive()) + { + // Just return a reference to self. + sipRes = sipSelf; + Py_INCREF(sipRes); + } + else + { + PyErr_SetString(PyExc_ValueError, "QPainter must be created with a device"); + sipRes = 0; + } +%End + + void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback); +%MethodCode + sipCpp->end(); +%End + + QPaintDevice *device() const; + bool begin(QPaintDevice *); + bool end(); + bool isActive() const; + + enum CompositionMode + { + CompositionMode_SourceOver, + CompositionMode_DestinationOver, + CompositionMode_Clear, + CompositionMode_Source, + CompositionMode_Destination, + CompositionMode_SourceIn, + CompositionMode_DestinationIn, + CompositionMode_SourceOut, + CompositionMode_DestinationOut, + CompositionMode_SourceAtop, + CompositionMode_DestinationAtop, + CompositionMode_Xor, + CompositionMode_Plus, + CompositionMode_Multiply, + CompositionMode_Screen, + CompositionMode_Overlay, + CompositionMode_Darken, + CompositionMode_Lighten, + CompositionMode_ColorDodge, + CompositionMode_ColorBurn, + CompositionMode_HardLight, + CompositionMode_SoftLight, + CompositionMode_Difference, + CompositionMode_Exclusion, + RasterOp_SourceOrDestination, + RasterOp_SourceAndDestination, + RasterOp_SourceXorDestination, + RasterOp_NotSourceAndNotDestination, + RasterOp_NotSourceOrNotDestination, + RasterOp_NotSourceXorDestination, + RasterOp_NotSource, + RasterOp_NotSourceAndDestination, + RasterOp_SourceAndNotDestination, + RasterOp_NotSourceOrDestination, + RasterOp_SourceOrNotDestination, + RasterOp_ClearDestination, + RasterOp_SetDestination, + RasterOp_NotDestination, + }; + + void setCompositionMode(QPainter::CompositionMode mode); + QPainter::CompositionMode compositionMode() const; + const QFont &font() const; + void setFont(const QFont &f); + QFontMetrics fontMetrics() const; + QFontInfo fontInfo() const; + void setPen(const QColor &color); + void setPen(const QPen &pen); + void setPen(Qt::PenStyle style); + const QPen &pen() const; + void setBrush(const QBrush &brush); + void setBrush(Qt::BrushStyle style); + const QBrush &brush() const; + void setBackgroundMode(Qt::BGMode mode); + Qt::BGMode backgroundMode() const; + QPoint brushOrigin() const; + void setBrushOrigin(const QPointF &); + void setBackground(const QBrush &bg); + const QBrush &background() const; + QRegion clipRegion() const; + QPainterPath clipPath() const; + void setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip); + void setClipRegion(const QRegion ®ion, Qt::ClipOperation operation = Qt::ReplaceClip); + void setClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip); + void setClipping(bool enable); + bool hasClipping() const; + void save(); + void restore(); + void scale(qreal sx, qreal sy); + void shear(qreal sh, qreal sv); + void rotate(qreal a); + void translate(const QPointF &offset); + QRect window() const; + void setWindow(const QRect &window); + QRect viewport() const; + void setViewport(const QRect &viewport); + void setViewTransformEnabled(bool enable); + bool viewTransformEnabled() const; + void strokePath(const QPainterPath &path, const QPen &pen); + void fillPath(const QPainterPath &path, const QBrush &brush); + void drawPath(const QPainterPath &path); + void drawPoints(const QPolygonF &points); + void drawPoints(const QPolygon &points); + void drawPoints(const QPointF *points /Array/, int pointCount /ArraySize/); + void drawPoints(const QPointF *point, ... /TypeHint="QPointF"/); +%MethodCode + QPointF *points = qtgui_inst_array(a0, a1, sipType_QPointF); + + if (points) + { + sipCpp->drawPoints(points, 1 + PyTuple_Size(a1)); + delete[] points; + } + else + sipIsErr = 1; +%End + + void drawPoints(const QPoint *points /Array/, int pointCount /ArraySize/); + void drawPoints(const QPoint *point, ... /TypeHint="QPoint"/); +%MethodCode + QPoint *points = qtgui_inst_array(a0, a1, sipType_QPoint); + + if (points) + { + sipCpp->drawPoints(points, 1 + PyTuple_Size(a1)); + delete[] points; + } + else + sipIsErr = 1; +%End + + void drawLines(const QLineF *lines /Array/, int lineCount /ArraySize/); + void drawLines(const QLineF *line, ... /TypeHint="QLineF"/); +%MethodCode + QLineF *lines = qtgui_inst_array(a0, a1, sipType_QLineF); + + if (lines) + { + sipCpp->drawLines(lines, 1 + PyTuple_Size(a1)); + delete[] lines; + } + else + sipIsErr = 1; +%End + + void drawLines(const QPointF *pointPairs /Array/, int lineCount /ArraySize/); +%MethodCode + sipCpp->drawLines(a0, a1 / 2); +%End + + void drawLines(const QPointF *pointPair, ... /TypeHint="QPointF"/); +%MethodCode + QPointF *pairs = qtgui_inst_array(a0, a1, sipType_QPointF); + + if (pairs) + { + sipCpp->drawLines(pairs, (1 + PyTuple_Size(a1)) / 2); + delete[] pairs; + } + else + sipIsErr = 1; +%End + + void drawLines(const QLine *lines /Array/, int lineCount /ArraySize/); + void drawLines(const QLine *line, ... /TypeHint="QLine"/); +%MethodCode + QLine *lines = qtgui_inst_array(a0, a1, sipType_QLine); + + if (lines) + { + sipCpp->drawLines(lines, 1 + PyTuple_Size(a1)); + delete[] lines; + } + else + sipIsErr = 1; +%End + + void drawLines(const QPoint *pointPairs /Array/, int lineCount /ArraySize/); +%MethodCode + sipCpp->drawLines(a0, a1 / 2); +%End + + void drawLines(const QPoint *pointPair, ... /TypeHint="QPoint"/); +%MethodCode + QPoint *pairs = qtgui_inst_array(a0, a1, sipType_QPoint); + + if (pairs) + { + sipCpp->drawLines(pairs, (1 + PyTuple_Size(a1)) / 2); + delete[] pairs; + } + else + sipIsErr = 1; +%End + + void drawRects(const QRectF *rects /Array/, int rectCount /ArraySize/); + void drawRects(const QRectF *rect, ... /TypeHint="QRectF"/); +%MethodCode + QRectF *rects = qtgui_inst_array(a0, a1, sipType_QRectF); + + if (rects) + { + sipCpp->drawRects(rects, 1 + PyTuple_Size(a1)); + delete[] rects; + } + else + sipIsErr = 1; +%End + + void drawRects(const QRect *rects /Array/, int rectCount /ArraySize/); + void drawRects(const QRect *rect, ... /TypeHint="QRect"/); +%MethodCode + QRect *rects = qtgui_inst_array(a0, a1, sipType_QRect); + + if (rects) + { + sipCpp->drawRects(rects, 1 + PyTuple_Size(a1)); + delete[] rects; + } + else + sipIsErr = 1; +%End + + void drawEllipse(const QRectF &r); + void drawEllipse(const QRect &r); + void drawPolyline(const QPolygonF &polyline); + void drawPolyline(const QPolygon &polyline); + void drawPolyline(const QPointF *points /Array/, int pointCount /ArraySize/); + void drawPolyline(const QPointF *point, ... /TypeHint="QPointF"/); +%MethodCode + QPointF *points = qtgui_inst_array(a0, a1, sipType_QPointF); + + if (points) + { + sipCpp->drawPolyline(points, 1 + PyTuple_Size(a1)); + delete[] points; + } + else + sipIsErr = 1; +%End + + void drawPolyline(const QPoint *points /Array/, int pointCount /ArraySize/); + void drawPolyline(const QPoint *point, ... /TypeHint="QPoint"/); +%MethodCode + QPoint *points = qtgui_inst_array(a0, a1, sipType_QPoint); + + if (points) + { + sipCpp->drawPolyline(points, 1 + PyTuple_Size(a1)); + delete[] points; + } + else + sipIsErr = 1; +%End + + void drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill); + void drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill); + void drawPolygon(const QPointF *points /Array/, int pointCount /ArraySize/, Qt::FillRule fillRule = Qt::OddEvenFill); + void drawPolygon(const QPointF *point, ... /TypeHint="QPointF"/); +%MethodCode + QPointF *points = qtgui_inst_array(a0, a1, sipType_QPointF); + + if (points) + { + sipCpp->drawPolygon(points, 1 + PyTuple_Size(a1)); + delete[] points; + } + else + sipIsErr = 1; +%End + + void drawPolygon(const QPoint *points /Array/, int pointCount /ArraySize/, Qt::FillRule fillRule = Qt::OddEvenFill); + void drawPolygon(const QPoint *point, ... /TypeHint="QPoint"/); +%MethodCode + QPoint *points = qtgui_inst_array(a0, a1, sipType_QPoint); + + if (points) + { + sipCpp->drawPolygon(points, 1 + PyTuple_Size(a1)); + delete[] points; + } + else + sipIsErr = 1; +%End + + void drawConvexPolygon(const QPolygonF &poly); + void drawConvexPolygon(const QPolygon &poly); + void drawConvexPolygon(const QPointF *points /Array/, int pointCount /ArraySize/); + void drawConvexPolygon(const QPointF *point, ... /TypeHint="QPointF"/); +%MethodCode + QPointF *points = qtgui_inst_array(a0, a1, sipType_QPointF); + + if (points) + { + sipCpp->drawConvexPolygon(points, 1 + PyTuple_Size(a1)); + delete[] points; + } + else + sipIsErr = 1; +%End + + void drawConvexPolygon(const QPoint *points /Array/, int pointCount /ArraySize/); + void drawConvexPolygon(const QPoint *point, ... /TypeHint="QPoint"/); +%MethodCode + QPoint *points = qtgui_inst_array(a0, a1, sipType_QPoint); + + if (points) + { + sipCpp->drawConvexPolygon(points, 1 + PyTuple_Size(a1)); + delete[] points; + } + else + sipIsErr = 1; +%End + + void drawArc(const QRectF &rect, int a, int alen); + void drawPie(const QRectF &rect, int a, int alen); + void drawChord(const QRectF &rect, int a, int alen); + void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &pos = QPointF()); + void drawPicture(const QPointF &p, const QPicture &picture); + void drawPixmap(const QRectF &targetRect, const QPixmap &pixmap, const QRectF &sourceRect); + void setLayoutDirection(Qt::LayoutDirection direction); + Qt::LayoutDirection layoutDirection() const; + void drawText(const QPointF &p, const QString &s); + void drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect /Out/ = 0); + void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect /Out/ = 0); + void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption()); + QRectF boundingRect(const QRectF &rect, int flags, const QString &text); + QRect boundingRect(const QRect &rect, int flags, const QString &text); + QRectF boundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption()); + void fillRect(const QRectF &, const QBrush &); + void fillRect(const QRect &, const QBrush &); + void eraseRect(const QRectF &); + void setRenderHint(QPainter::RenderHint hint, bool on = true); + QPainter::RenderHints renderHints() const; + void setRenderHints(QPainter::RenderHints hints, bool on = true); + QPaintEngine *paintEngine() const; + void drawLine(const QLineF &l); + void drawLine(const QLine &line); + void drawLine(int x1, int y1, int x2, int y2); + void drawLine(const QPoint &p1, const QPoint &p2); + void drawLine(const QPointF &p1, const QPointF &p2); + void drawRect(const QRectF &rect); + void drawRect(int x, int y, int w, int h); + void drawRect(const QRect &r); + void drawPoint(const QPointF &p); + void drawPoint(int x, int y); + void drawPoint(const QPoint &p); + void drawEllipse(int x, int y, int w, int h); + void drawArc(const QRect &r, int a, int alen); + void drawArc(int x, int y, int w, int h, int a, int alen); + void drawPie(const QRect &rect, int a, int alen); + void drawPie(int x, int y, int w, int h, int a, int alen); + void drawChord(const QRect &rect, int a, int alen); + void drawChord(int x, int y, int w, int h, int a, int alen); + void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip); + void setClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip); + void eraseRect(const QRect &rect); + void eraseRect(int x, int y, int w, int h); + void fillRect(int x, int y, int w, int h, const QBrush &b); + void setBrushOrigin(int x, int y); + void setBrushOrigin(const QPoint &p); + void drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &pos = QPoint()); + void drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0); + void drawPixmap(const QRect &targetRect, const QPixmap &pixmap, const QRect &sourceRect); + void drawPixmap(const QPointF &p, const QPixmap &pm); + void drawPixmap(const QPoint &p, const QPixmap &pm); + void drawPixmap(const QRect &r, const QPixmap &pm); + void drawPixmap(int x, int y, const QPixmap &pm); + void drawPixmap(int x, int y, int w, int h, const QPixmap &pm); + void drawPixmap(int x, int y, int w, int h, const QPixmap &pm, int sx, int sy, int sw, int sh); + void drawPixmap(int x, int y, const QPixmap &pm, int sx, int sy, int sw, int sh); + void drawPixmap(const QPointF &p, const QPixmap &pm, const QRectF &sr); + void drawPixmap(const QPoint &p, const QPixmap &pm, const QRect &sr); + void drawImage(const QRectF &r, const QImage &image); + void drawImage(const QRect &r, const QImage &image); + void drawImage(const QPointF &p, const QImage &image); + void drawImage(const QPoint &p, const QImage &image); + void drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor); + void drawText(const QPoint &p, const QString &s); + void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect /Out/ = 0); + void drawText(int x, int y, const QString &s); + QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text); + qreal opacity() const; + void setOpacity(qreal opacity); + void translate(qreal dx, qreal dy); + void translate(const QPoint &offset); + void setViewport(int x, int y, int w, int h); + void setWindow(int x, int y, int w, int h); + bool worldMatrixEnabled() const; + void setWorldMatrixEnabled(bool enabled); + void drawPicture(int x, int y, const QPicture &p); + void drawPicture(const QPoint &pt, const QPicture &p); + void setTransform(const QTransform &transform, bool combine = false); + const QTransform &transform() const; + const QTransform &deviceTransform() const; + void resetTransform(); + void setWorldTransform(const QTransform &matrix, bool combine = false); + const QTransform &worldTransform() const; + QTransform combinedTransform() const; + bool testRenderHint(QPainter::RenderHint hint) const; + void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); + void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); + void drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); + void drawEllipse(const QPointF ¢er, qreal rx, qreal ry); + void drawEllipse(const QPoint ¢er, int rx, int ry); + void fillRect(const QRectF &, const QColor &color); + void fillRect(const QRect &, const QColor &color); + void fillRect(int x, int y, int w, int h, const QColor &b); + void fillRect(int x, int y, int w, int h, Qt::GlobalColor c); + void fillRect(const QRect &r, Qt::GlobalColor c); + void fillRect(const QRectF &r, Qt::GlobalColor c); + void fillRect(int x, int y, int w, int h, Qt::BrushStyle style); + void fillRect(const QRect &r, Qt::BrushStyle style); + void fillRect(const QRectF &r, Qt::BrushStyle style); + void beginNativePainting(); + void endNativePainting(); + + class PixmapFragment + { +%TypeHeaderCode +#include +%End + + public: + qreal x; + qreal y; + qreal sourceLeft; + qreal sourceTop; + qreal width; + qreal height; + qreal scaleX; + qreal scaleY; + qreal rotation; + qreal opacity; + static QPainter::PixmapFragment create(const QPointF &pos, const QRectF &sourceRect, qreal scaleX = 1, qreal scaleY = 1, qreal rotation = 0, qreal opacity = 1) /Factory/; + }; + + enum PixmapFragmentHint + { + OpaqueHint, + }; + + typedef QFlags PixmapFragmentHints; + void drawPixmapFragments(const QPainter::PixmapFragment *fragments /Array/, int fragmentCount /ArraySize/, const QPixmap &pixmap, QFlags hints = 0); + void drawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText); + void drawStaticText(const QPoint &p, const QStaticText &staticText); + void drawStaticText(int x, int y, const QStaticText &staticText); + QRectF clipBoundingRect() const; +%If (PyQt_RawFont) + void drawGlyphRun(const QPointF &position, const QGlyphRun &glyphRun); +%End +%If (Qt_5_12_0 -) + void fillRect(int x, int y, int w, int h, QGradient::Preset preset); +%End +%If (Qt_5_12_0 -) + void fillRect(const QRect &r, QGradient::Preset preset); +%End +%If (Qt_5_12_0 -) + void fillRect(const QRectF &r, QGradient::Preset preset); +%End + void drawImage(const QRectF &targetRect, const QImage &image, const QRectF &sourceRect, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor); + void drawImage(const QRect &targetRect, const QImage &image, const QRect &sourceRect, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor); + void drawImage(const QPointF &p, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor); + void drawImage(const QPoint &p, const QImage &image, const QRect &sr, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor); + +private: + QPainter(const QPainter &); +}; + +QFlags operator|(QPainter::RenderHint f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpainterpath.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpainterpath.sip new file mode 100644 index 0000000..7195d8b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpainterpath.sip @@ -0,0 +1,188 @@ +// qpainterpath.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPainterPath +{ +%TypeHeaderCode +#include +%End + +public: + enum ElementType + { + MoveToElement, + LineToElement, + CurveToElement, + CurveToDataElement, + }; + + class Element + { +%TypeHeaderCode +#include +%End + + public: + qreal x; + qreal y; + QPainterPath::ElementType type; + bool isMoveTo() const; + bool isLineTo() const; + bool isCurveTo() const; + bool operator==(const QPainterPath::Element &e) const; + bool operator!=(const QPainterPath::Element &e) const; + operator QPointF() const; + }; + + QPainterPath(); + explicit QPainterPath(const QPointF &startPoint); + QPainterPath(const QPainterPath &other); + ~QPainterPath(); + void closeSubpath(); + void moveTo(const QPointF &p); + void lineTo(const QPointF &p); + void arcTo(const QRectF &rect, qreal startAngle, qreal arcLength); + void cubicTo(const QPointF &ctrlPt1, const QPointF &ctrlPt2, const QPointF &endPt); + void quadTo(const QPointF &ctrlPt, const QPointF &endPt); + QPointF currentPosition() const; + void addRect(const QRectF &rect); + void addEllipse(const QRectF &rect); + void addPolygon(const QPolygonF &polygon); + void addText(const QPointF &point, const QFont &f, const QString &text); + void addPath(const QPainterPath &path); + void addRegion(const QRegion ®ion); + void connectPath(const QPainterPath &path); + bool contains(const QPointF &pt) const; + bool contains(const QRectF &rect) const; + bool intersects(const QRectF &rect) const; + QRectF boundingRect() const; + QRectF controlPointRect() const; + Qt::FillRule fillRule() const; + void setFillRule(Qt::FillRule fillRule); + QPainterPath toReversed() const; + QList toSubpathPolygons() const; +%MethodCode + sipRes = new QList(sipCpp->toSubpathPolygons()); +%End + + QList toFillPolygons() const; +%MethodCode + sipRes = new QList(sipCpp->toFillPolygons()); +%End + + QPolygonF toFillPolygon() const; +%MethodCode + sipRes = new QPolygonF(sipCpp->toFillPolygon()); +%End + + bool operator==(const QPainterPath &other) const; + bool operator!=(const QPainterPath &other) const; + void moveTo(qreal x, qreal y); + void arcMoveTo(const QRectF &rect, qreal angle); + void arcMoveTo(qreal x, qreal y, qreal w, qreal h, qreal angle); + void arcTo(qreal x, qreal y, qreal w, qreal h, qreal startAngle, qreal arcLenght); + void lineTo(qreal x, qreal y); + void cubicTo(qreal ctrlPt1x, qreal ctrlPt1y, qreal ctrlPt2x, qreal ctrlPt2y, qreal endPtx, qreal endPty); + void quadTo(qreal ctrlPtx, qreal ctrlPty, qreal endPtx, qreal endPty); + void addEllipse(qreal x, qreal y, qreal w, qreal h); + void addRect(qreal x, qreal y, qreal w, qreal h); + void addText(qreal x, qreal y, const QFont &f, const QString &text); + bool isEmpty() const; + int elementCount() const; + QPainterPath::Element elementAt(int i) const; + void setElementPositionAt(int i, qreal x, qreal y); + QList toSubpathPolygons(const QTransform &matrix) const; + QList toFillPolygons(const QTransform &matrix) const; + QPolygonF toFillPolygon(const QTransform &matrix) const; + qreal length() const; + qreal percentAtLength(qreal t) const; + QPointF pointAtPercent(qreal t) const; + qreal angleAtPercent(qreal t) const; + qreal slopeAtPercent(qreal t) const; + bool intersects(const QPainterPath &p) const; + bool contains(const QPainterPath &p) const; + QPainterPath united(const QPainterPath &r) const; + QPainterPath intersected(const QPainterPath &r) const; + QPainterPath subtracted(const QPainterPath &r) const; + void addRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); + void addRoundedRect(qreal x, qreal y, qreal w, qreal h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize); + void addEllipse(const QPointF ¢er, qreal rx, qreal ry); + QPainterPath simplified() const; + QPainterPath operator&(const QPainterPath &other) const; + QPainterPath operator|(const QPainterPath &other) const; + QPainterPath operator+(const QPainterPath &other) const; + QPainterPath operator-(const QPainterPath &other) const; + QPainterPath &operator&=(const QPainterPath &other); + QPainterPath &operator|=(const QPainterPath &other); + QPainterPath &operator+=(const QPainterPath &other); + QPainterPath &operator-=(const QPainterPath &other); + void translate(qreal dx, qreal dy); + QPainterPath translated(qreal dx, qreal dy) const; + void translate(const QPointF &offset); + QPainterPath translated(const QPointF &offset) const; + void swap(QPainterPath &other /Constrained/); +%If (Qt_5_13_0 -) + void clear(); +%End +%If (Qt_5_13_0 -) + void reserve(int size); +%End +%If (Qt_5_13_0 -) + int capacity() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QPainterPath & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QPainterPath & /Constrained/) /ReleaseGIL/; + +class QPainterPathStroker +{ +%TypeHeaderCode +#include +%End + +public: + QPainterPathStroker(); +%If (Qt_5_3_0 -) + explicit QPainterPathStroker(const QPen &pen); +%End + ~QPainterPathStroker(); + void setWidth(qreal width); + qreal width() const; + void setCapStyle(Qt::PenCapStyle style); + Qt::PenCapStyle capStyle() const; + void setJoinStyle(Qt::PenJoinStyle style); + Qt::PenJoinStyle joinStyle() const; + void setMiterLimit(qreal length); + qreal miterLimit() const; + void setCurveThreshold(qreal threshold); + qreal curveThreshold() const; + void setDashPattern(Qt::PenStyle); + void setDashPattern(const QVector &dashPattern); + QVector dashPattern() const; + QPainterPath createStroke(const QPainterPath &path) const; + void setDashOffset(qreal offset); + qreal dashOffset() const; + +private: + QPainterPathStroker(const QPainterPathStroker &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpalette.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpalette.sip new file mode 100644 index 0000000..52ba030 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpalette.sip @@ -0,0 +1,133 @@ +// qpalette.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPalette +{ +%TypeHeaderCode +#include +%End + +public: + QPalette(); + QPalette(const QColor &button); + QPalette(Qt::GlobalColor button); + QPalette(const QColor &button, const QColor &background); + QPalette(const QBrush &foreground, const QBrush &button, const QBrush &light, const QBrush &dark, const QBrush &mid, const QBrush &text, const QBrush &bright_text, const QBrush &base, const QBrush &background); + QPalette(const QPalette &palette); + QPalette(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QPalette(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QPalette(); + + enum ColorGroup + { + Active, + Disabled, + Inactive, + NColorGroups, + Current, + All, + Normal, + }; + + enum ColorRole + { + WindowText, + Foreground, + Button, + Light, + Midlight, + Dark, + Mid, + Text, + BrightText, + ButtonText, + Base, + Window, + Background, + Shadow, + Highlight, + HighlightedText, + Link, + LinkVisited, + AlternateBase, + ToolTipBase, + ToolTipText, +%If (Qt_5_12_0 -) + PlaceholderText, +%End + NoRole, + NColorRoles, + }; + + QPalette::ColorGroup currentColorGroup() const; + void setCurrentColorGroup(QPalette::ColorGroup cg); + const QColor &color(QPalette::ColorGroup cg, QPalette::ColorRole cr) const; + const QBrush &brush(QPalette::ColorGroup cg, QPalette::ColorRole cr) const; + void setBrush(QPalette::ColorGroup cg, QPalette::ColorRole cr, const QBrush &brush); + void setColorGroup(QPalette::ColorGroup cr, const QBrush &foreground, const QBrush &button, const QBrush &light, const QBrush &dark, const QBrush &mid, const QBrush &text, const QBrush &bright_text, const QBrush &base, const QBrush &background); + bool isEqual(QPalette::ColorGroup cr1, QPalette::ColorGroup cr2) const; + const QColor &color(QPalette::ColorRole cr) const; + const QBrush &brush(QPalette::ColorRole cr) const; + const QBrush &windowText() const; + const QBrush &button() const; + const QBrush &light() const; + const QBrush &dark() const; + const QBrush &mid() const; + const QBrush &text() const; + const QBrush &base() const; + const QBrush &alternateBase() const; + const QBrush &window() const; + const QBrush &midlight() const; + const QBrush &brightText() const; + const QBrush &buttonText() const; + const QBrush &shadow() const; + const QBrush &highlight() const; + const QBrush &highlightedText() const; + const QBrush &link() const; + const QBrush &linkVisited() const; + const QBrush &toolTipBase() const; + const QBrush &toolTipText() const; +%If (Qt_5_12_0 -) + const QBrush &placeholderText() const; +%End + bool operator==(const QPalette &p) const; + bool operator!=(const QPalette &p) const; + bool isCopyOf(const QPalette &p) const; + QPalette resolve(const QPalette &) const; + uint resolve() const; + void resolve(uint mask); + void setColor(QPalette::ColorGroup acg, QPalette::ColorRole acr, const QColor &acolor); + void setColor(QPalette::ColorRole acr, const QColor &acolor); + void setBrush(QPalette::ColorRole acr, const QBrush &abrush); + bool isBrushSet(QPalette::ColorGroup cg, QPalette::ColorRole cr) const; + qint64 cacheKey() const; + void swap(QPalette &other /Constrained/); +}; + +QDataStream &operator<<(QDataStream &s, const QPalette &p /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &ds, QPalette &p /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpdfwriter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpdfwriter.sip new file mode 100644 index 0000000..d36d7be --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpdfwriter.sip @@ -0,0 +1,72 @@ +// qpdfwriter.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPdfWriter : public QObject, public QPagedPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPdfWriter(const QString &filename); + explicit QPdfWriter(QIODevice *device); + virtual ~QPdfWriter(); + QString title() const; + void setTitle(const QString &title); + QString creator() const; + void setCreator(const QString &creator); + virtual bool newPage(); + virtual void setPageSize(QPagedPaintDevice::PageSize size); + bool setPageSize(const QPageSize &pageSize); + virtual void setPageSizeMM(const QSizeF &size); + virtual void setMargins(const QPagedPaintDevice::Margins &m); + +protected: + virtual QPaintEngine *paintEngine() const; + virtual int metric(QPaintDevice::PaintDeviceMetric id) const; + +public: +%If (Qt_5_3_0 -) + void setResolution(int resolution); +%End +%If (Qt_5_3_0 -) + int resolution() const; +%End +%If (Qt_5_10_0 -) + void setPdfVersion(QPagedPaintDevice::PdfVersion version); +%End +%If (Qt_5_10_0 -) + QPagedPaintDevice::PdfVersion pdfVersion() const; +%End +%If (Qt_5_15_0 -) + void setDocumentXmpMetadata(const QByteArray &xmpMetadata); +%End +%If (Qt_5_15_0 -) + QByteArray documentXmpMetadata() const; +%End +%If (Qt_5_15_0 -) + void addFileAttachment(const QString &fileName, const QByteArray &data, const QString &mimeType = QString()); +%End + +private: + QPdfWriter(const QPdfWriter &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpen.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpen.sip new file mode 100644 index 0000000..7caf6c8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpen.sip @@ -0,0 +1,103 @@ +// qpen.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPen /TypeHintIn="Union[QPen, QColor]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +// SIP doesn't support automatic type convertors so we explicitly allow a +// QColor to be used whenever a QPen is expected. + +if (sipIsErr == NULL) + return (sipCanConvertToType(sipPy, sipType_QPen, SIP_NO_CONVERTORS) || + sipCanConvertToType(sipPy, sipType_QColor, 0)); + +if (sipCanConvertToType(sipPy, sipType_QPen, SIP_NO_CONVERTORS)) +{ + *sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QPen, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + + return 0; +} + +int state; +QColor *c = reinterpret_cast(sipConvertToType(sipPy, sipType_QColor, 0, 0, &state, sipIsErr)); + +if (*sipIsErr) +{ + sipReleaseType(c, sipType_QColor, state); + return 0; +} + +*sipCppPtr = new QPen(*c); + +sipReleaseType(c, sipType_QColor, state); + +return sipGetState(sipTransferObj); +%End + +public: + QPen(); + QPen(Qt::PenStyle); + QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin); + QPen(const QPen &pen); + QPen(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QPen(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QPen(); + Qt::PenStyle style() const; + void setStyle(Qt::PenStyle); + qreal widthF() const; + void setWidthF(qreal width); + int width() const; + void setWidth(int width); + QColor color() const; + void setColor(const QColor &color); + QBrush brush() const; + void setBrush(const QBrush &brush); + bool isSolid() const; + Qt::PenCapStyle capStyle() const; + void setCapStyle(Qt::PenCapStyle pcs); + Qt::PenJoinStyle joinStyle() const; + void setJoinStyle(Qt::PenJoinStyle pcs); + QVector dashPattern() const; + void setDashPattern(const QVector &pattern); + qreal miterLimit() const; + void setMiterLimit(qreal limit); + bool operator==(const QPen &p) const; + bool operator!=(const QPen &p) const; + qreal dashOffset() const; + void setDashOffset(qreal doffset); + bool isCosmetic() const; + void setCosmetic(bool cosmetic); + void swap(QPen &other /Constrained/); +}; + +QDataStream &operator<<(QDataStream &, const QPen & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QPen & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpicture.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpicture.sip new file mode 100644 index 0000000..baf9ba5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpicture.sip @@ -0,0 +1,187 @@ +// qpicture.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPicture : public QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPicture(int formatVersion = -1); + QPicture(const QPicture &); + virtual ~QPicture(); + bool isNull() const; + virtual int devType() const; + uint size() const; + const char *data() const /Encoding="None"/; + virtual void setData(const char *data /Array/, uint size /ArraySize/); + bool play(QPainter *p); + bool load(QIODevice *dev, const char *format = 0) /ReleaseGIL/; + bool load(const QString &fileName, const char *format = 0) /ReleaseGIL/; + bool save(QIODevice *dev, const char *format = 0) /ReleaseGIL/; + bool save(const QString &fileName, const char *format = 0) /ReleaseGIL/; + QRect boundingRect() const; + void setBoundingRect(const QRect &r); + void detach(); + bool isDetached() const; + virtual QPaintEngine *paintEngine() const; + +protected: + virtual int metric(QPaintDevice::PaintDeviceMetric m) const; + +public: + void swap(QPicture &other /Constrained/); +}; + +class QPictureIO +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// This defines the mapping between picture formats and the corresponding +// Python i/o handler callables. +struct qtgui_pio { + const char *format; // The format. + PyObject *read; // The read handler. + PyObject *write; // The write handler. + qtgui_pio *next; // The next in the list. +}; + + +// The head of the list. +static qtgui_pio *qtgui_pio_head = 0; + + +// Find the entry for the given picture. +static const qtgui_pio *qtgui_pio_find(QPictureIO *pio) +{ + for (const qtgui_pio *p = qtgui_pio_head; p; p = p->next) + if (qstrcmp(pio->format(), p->format) == 0) + return p; + + return 0; +} + + +// This is the C++ read handler. +static void qtgui_pio_read(QPictureIO *pio) +{ + const qtgui_pio *p = qtgui_pio_find(pio); + + if (p && p->read) + { + Py_XDECREF(sipCallMethod(0, p->read, "D", pio, sipType_QPictureIO, NULL)); + } +} + + +// This is the C++ write handler. +static void qtgui_pio_write(QPictureIO *pio) +{ + const qtgui_pio *p = qtgui_pio_find(pio); + + if (p && p->write) + { + Py_XDECREF(sipCallMethod(0, p->write, "D", pio, sipType_QPictureIO, NULL)); + } +} +%End + +public: + QPictureIO(); + QPictureIO(QIODevice *ioDevice, const char *format); + QPictureIO(const QString &fileName, const char *format); + ~QPictureIO(); + const QPicture &picture() const; + int status() const; + const char *format() const; + QIODevice *ioDevice() const; + QString fileName() const; + int quality() const; + QString description() const; + const char *parameters() const; + float gamma() const; + void setPicture(const QPicture &); + void setStatus(int); + void setFormat(const char *); + void setIODevice(QIODevice *); + void setFileName(const QString &); + void setQuality(int); + void setDescription(const QString &); + void setParameters(const char *); + void setGamma(float); + bool read() /ReleaseGIL/; + bool write() /ReleaseGIL/; + static QByteArray pictureFormat(const QString &fileName); + static QByteArray pictureFormat(QIODevice *); + static QList inputFormats(); + static QList outputFormats(); + static void defineIOHandler(const char *format, const char *header, const char *flags, SIP_PYCALLABLE read_picture /AllowNone,TypeHint="Optional[Callable[[QPictureIO], None]]"/, SIP_PYCALLABLE write_picture /AllowNone,TypeHint="Optional[Callable[[QPictureIO], None]]"/); +%MethodCode + // Convert None to NULL. + if (a3 == Py_None) + a3 = 0; + + if (a4 == Py_None) + a4 = 0; + + // See if we already know about the format. + qtgui_pio *p; + + for (p = qtgui_pio_head; p; p = p->next) + if (qstrcmp(a0, p->format) == 0) + break; + + if (!p) + { + // Handle the new format. + p = new qtgui_pio; + p->format = qstrdup(a0); + p->read = 0; + p->write = 0; + p->next = qtgui_pio_head; + + qtgui_pio_head = p; + } + + // Replace the old callables with the new ones. + Py_XDECREF(p->read); + p->read = a3; + Py_XINCREF(p->read); + + Py_XDECREF(p->write); + p->write = a4; + Py_XINCREF(p->write); + + // Install the generic handlers. + QPictureIO::defineIOHandler(a0, a1, a2, qtgui_pio_read, qtgui_pio_write); +%End + +private: + QPictureIO(const QPictureIO &); +}; + +QDataStream &operator<<(QDataStream &in, const QPicture &p /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &in, QPicture &p /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixelformat.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixelformat.sip new file mode 100644 index 0000000..f95e7d9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixelformat.sip @@ -0,0 +1,159 @@ +// qpixelformat.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) +%ModuleCode +#include +%End +%End + +%If (Qt_5_4_0 -) + +class QPixelFormat +{ +%TypeHeaderCode +#include +%End + +public: + enum ColorModel + { + RGB, + BGR, + Indexed, + Grayscale, + CMYK, + HSL, + HSV, + YUV, +%If (Qt_5_5_0 -) + Alpha, +%End + }; + + enum AlphaUsage + { + UsesAlpha, + IgnoresAlpha, + }; + + enum AlphaPosition + { + AtBeginning, + AtEnd, + }; + + enum AlphaPremultiplied + { + NotPremultiplied, + Premultiplied, + }; + + enum TypeInterpretation + { + UnsignedInteger, + UnsignedShort, + UnsignedByte, + FloatingPoint, + }; + + enum YUVLayout + { + YUV444, + YUV422, + YUV411, + YUV420P, + YUV420SP, + YV12, + UYVY, + YUYV, + NV12, + NV21, + IMC1, + IMC2, + IMC3, + IMC4, + Y8, + Y16, + }; + + enum ByteOrder + { + LittleEndian, + BigEndian, + CurrentSystemEndian, + }; + + QPixelFormat(); + QPixelFormat(QPixelFormat::ColorModel mdl, uchar firstSize /PyInt/, uchar secondSize /PyInt/, uchar thirdSize /PyInt/, uchar fourthSize /PyInt/, uchar fifthSize /PyInt/, uchar alfa /PyInt/, QPixelFormat::AlphaUsage usage, QPixelFormat::AlphaPosition position, QPixelFormat::AlphaPremultiplied premult, QPixelFormat::TypeInterpretation typeInterp, QPixelFormat::ByteOrder byteOrder = QPixelFormat::CurrentSystemEndian, uchar subEnum /PyInt/ = 0); + QPixelFormat::ColorModel colorModel() const; + uchar channelCount() const /PyInt/; + uchar redSize() const /PyInt/; + uchar greenSize() const /PyInt/; + uchar blueSize() const /PyInt/; + uchar cyanSize() const /PyInt/; + uchar magentaSize() const /PyInt/; + uchar yellowSize() const /PyInt/; + uchar blackSize() const /PyInt/; + uchar hueSize() const /PyInt/; + uchar saturationSize() const /PyInt/; + uchar lightnessSize() const /PyInt/; + uchar brightnessSize() const /PyInt/; + uchar alphaSize() const /PyInt/; + uchar bitsPerPixel() const /PyInt/; + QPixelFormat::AlphaUsage alphaUsage() const; + QPixelFormat::AlphaPosition alphaPosition() const; + QPixelFormat::AlphaPremultiplied premultiplied() const; + QPixelFormat::TypeInterpretation typeInterpretation() const; + QPixelFormat::ByteOrder byteOrder() const; + QPixelFormat::YUVLayout yuvLayout() const; + uchar subEnum() const /PyInt/; +}; + +%End +%If (Qt_5_4_0 -) +bool operator==(QPixelFormat fmt1, QPixelFormat fmt2); +%End +%If (Qt_5_4_0 -) +bool operator!=(QPixelFormat fmt1, QPixelFormat fmt2); +%End +%If (Qt_5_4_0 -) +QPixelFormat qPixelFormatRgba(uchar red /PyInt/, uchar green /PyInt/, uchar blue /PyInt/, uchar alfa /PyInt/, QPixelFormat::AlphaUsage usage, QPixelFormat::AlphaPosition position, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger); +%End +%If (Qt_5_4_0 -) +QPixelFormat qPixelFormatGrayscale(uchar channelSize /PyInt/, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger); +%End +%If (Qt_5_4_0 -) +QPixelFormat qPixelFormatCmyk(uchar channelSize /PyInt/, uchar alphaSize /PyInt/ = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger); +%End +%If (Qt_5_4_0 -) +QPixelFormat qPixelFormatHsl(uchar channelSize /PyInt/, uchar alphaSize /PyInt/ = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint); +%End +%If (Qt_5_4_0 -) +QPixelFormat qPixelFormatHsv(uchar channelSize /PyInt/, uchar alphaSize /PyInt/ = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint); +%End +%If (Qt_5_4_0 -) +QPixelFormat qPixelFormatYuv(QPixelFormat::YUVLayout layout, uchar alphaSize /PyInt/ = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedByte, QPixelFormat::ByteOrder byteOrder = QPixelFormat::LittleEndian); +%End +%If (Qt_5_5_0 -) +QPixelFormat qPixelFormatAlpha(uchar channelSize /PyInt/, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixmap.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixmap.sip new file mode 100644 index 0000000..01b2d8d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixmap.sip @@ -0,0 +1,108 @@ +// qpixmap.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPixmap : public QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + QPixmap(); + QPixmap(int w, int h); + explicit QPixmap(const QSize &); + QPixmap(const QString &fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::ImageConversionFlag::AutoColor); + QPixmap(SIP_PYLIST xpm /TypeHint="List[str]"/) [(const char **xpm)]; +%MethodCode + // The Python interface is a list of strings that make up the image. + + const char **str = QtGui_ListToArray(a0); + + if (str) + { + sipCpp = new sipQPixmap(str); + QtGui_DeleteArray(str); + } + else + sipIsErr = 1; +%End + + QPixmap(const QPixmap &); + QPixmap(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new sipQPixmap(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + virtual ~QPixmap(); + bool isNull() const; + virtual int devType() const; + int width() const; + int height() const; + QSize size() const; + QRect rect() const; + int depth() const; + static int defaultDepth(); + void fill(const QColor &color = Qt::GlobalColor::white); + QBitmap mask() const; + void setMask(const QBitmap &); + bool hasAlpha() const; + bool hasAlphaChannel() const; + QBitmap createHeuristicMask(bool clipTight = true) const; + QBitmap createMaskFromColor(const QColor &maskColor, Qt::MaskMode mode = Qt::MaskInColor) const; + QPixmap scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const; + QPixmap scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const; + QPixmap scaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const; + QPixmap scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const; + QImage toImage() const; + static QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor); + static QPixmap fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags = Qt::AutoColor); + bool convertFromImage(const QImage &img, Qt::ImageConversionFlags flags = Qt::AutoColor); + bool load(const QString &fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor); + bool loadFromData(const uchar *buf /Array/, uint len /ArraySize/, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor); + bool loadFromData(const QByteArray &buf, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor); + bool save(const QString &fileName, const char *format = 0, int quality = -1) const; + bool save(QIODevice *device, const char *format = 0, int quality = -1) const; + QPixmap copy(const QRect &rect = QRect()) const; + void detach(); + bool isQBitmap() const; + virtual QPaintEngine *paintEngine() const; + +protected: + virtual int metric(QPaintDevice::PaintDeviceMetric) const; + +public: + QPixmap copy(int ax, int ay, int awidth, int aheight) const; + QPixmap transformed(const QTransform &transform, Qt::TransformationMode mode = Qt::FastTransformation) const; + static QTransform trueMatrix(const QTransform &m, int w, int h); + qint64 cacheKey() const; + void scroll(int dx, int dy, const QRect &rect, QRegion *exposed /Out/ = 0); + void scroll(int dx, int dy, int x, int y, int width, int height, QRegion *exposed /Out/ = 0); + void swap(QPixmap &other /Constrained/); + qreal devicePixelRatio() const; + void setDevicePixelRatio(qreal scaleFactor); +}; + +QDataStream &operator<<(QDataStream &, const QPixmap & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QPixmap & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixmapcache.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixmapcache.sip new file mode 100644 index 0000000..4aa55a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpixmapcache.sip @@ -0,0 +1,80 @@ +// qpixmapcache.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPixmapCache +{ +%TypeHeaderCode +#include +%End + +public: + class Key + { +%TypeHeaderCode +#include +%End + + public: + Key(); + Key(const QPixmapCache::Key &other); + ~Key(); + bool operator==(const QPixmapCache::Key &key) const; + bool operator!=(const QPixmapCache::Key &key) const; +%If (Qt_5_6_0 -) + void swap(QPixmapCache::Key &other /Constrained/); +%End +%If (Qt_5_7_0 -) + bool isValid() const; +%End + }; + + static int cacheLimit(); + static void clear(); + static QPixmap find(const QString &key); +%MethodCode + sipRes = new QPixmap; + + if (!QPixmapCache::find(*a0, sipRes)) + { + delete sipRes; + sipRes = 0; + } +%End + + static QPixmap find(const QPixmapCache::Key &key); +%MethodCode + sipRes = new QPixmap; + + if (!QPixmapCache::find(*a0, sipRes)) + { + delete sipRes; + sipRes = 0; + } +%End + + static bool insert(const QString &key, const QPixmap &); + static QPixmapCache::Key insert(const QPixmap &pixmap); + static void remove(const QString &key); + static void remove(const QPixmapCache::Key &key); + static bool replace(const QPixmapCache::Key &key, const QPixmap &pixmap); + static void setCacheLimit(int); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpolygon.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpolygon.sip new file mode 100644 index 0000000..48d429f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpolygon.sip @@ -0,0 +1,515 @@ +// qpolygon.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPolygon +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// Get a set of coordinate pairs of a polygon from a Python list. +static int *coordsFromList(PyObject *l, int &nr_points) +{ + int *coords = new int[PyList_Size(l)]; + nr_points = PyList_Size(l) >> 1; + + for (Py_ssize_t i = 0; i < PyList_Size(l); ++i) + { + coords[i] = SIPLong_AsLong(PyList_GetItem(l, i)); + + if (PyErr_Occurred() != NULL) + { + delete[] coords; + return 0; + } + } + + return coords; +} +%End + +%PickleCode + PyObject *pl = PyList_New(sipCpp->count() * 2); + + for (int p = 0, i = 0; i < sipCpp->count(); ++i, p += 2) + { + int x, y; + + sipCpp->point(i, &x, &y); + + PyList_SetItem(pl, p, SIPLong_FromLong(x)); + PyList_SetItem(pl, p + 1, SIPLong_FromLong(y)); + } + + sipRes = Py_BuildValue((char *)"(N)", pl); +%End + +public: + QPolygon(); + ~QPolygon(); + QPolygon(const QPolygon &a); + QPolygon(SIP_PYLIST points /TypeHint="List[int]"/) /NoDerived/; +%MethodCode + int nr_points; + int *coords = coordsFromList(a0, nr_points); + + if (coords) + { + sipCpp = new QPolygon(); + sipCpp->setPoints(nr_points, coords); + delete[] coords; + } + else + { + // Invoke the subsequent QVector overload. + sipError = sipErrorContinue; + } +%End + + QPolygon(const QVector &v); + QPolygon(const QRect &rectangle, bool closed = false); + explicit QPolygon(int asize); + QPolygon(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QPolygon(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + void translate(int dx, int dy); + QRect boundingRect() const; + QPoint point(int index) const; + void setPoints(SIP_PYLIST points /TypeHint="List[int]"/); +%MethodCode + int nr_points; + int *coords = coordsFromList(a0, nr_points); + + if (coords) + { + sipCpp->setPoints(nr_points, coords); + delete[] coords; + } + else + { + sipIsErr = 1; + } +%End + + void setPoints(int firstx, int firsty, ... /TypeHint="int"/); +%MethodCode + // Accept at least one pair of integer coordinates. + int nPoints = 1 + ((PyTuple_Size(a2) + 1) >> 1); + + int *points = new int[nPoints * 2]; + + points[0] = a0; + points[1] = a1; + + for (Py_ssize_t i = 0; i < PyTuple_Size(a2); ++i) + points[2 + i] = SIPLong_AsLong(PyTuple_GetItem(a2, i)); + + sipCpp->setPoints(nPoints, points); + + delete[] points; +%End + + void putPoints(int index, int firstx, int firsty, ... /TypeHint="int"/); +%MethodCode + // Accept at least one pair of integer coordinates. + int nPoints = 1 + ((PyTuple_Size(a3) + 1) >> 1); + + int *points = new int[nPoints * 2]; + + points[0] = a1; + points[1] = a2; + + for (Py_ssize_t i = 0; i < PyTuple_Size(a3); ++i) + points[2 + i] = SIPLong_AsLong(PyTuple_GetItem(a3, i)); + + sipCpp->putPoints(a0, nPoints, points); + + delete[] points; +%End + + void putPoints(int index, int nPoints, const QPolygon &fromPolygon, int from = 0); + void setPoint(int index, const QPoint &pt); + void setPoint(int index, int x, int y); + void translate(const QPoint &offset); + bool containsPoint(const QPoint &pt, Qt::FillRule fillRule) const; + QPolygon united(const QPolygon &r) const; + QPolygon intersected(const QPolygon &r) const; + QPolygon subtracted(const QPolygon &r) const; + QPolygon translated(int dx, int dy) const; + QPolygon translated(const QPoint &offset) const; +// Methods inherited from QVector and Python special methods. +// Keep in sync with QPolygonF and QXmlStreamAttributes. + +void append(const QPoint &value); +const QPoint &at(int i) const; +void clear(); +bool contains(const QPoint &value) const; +int count(const QPoint &value) const; +int count() const /__len__/; +void *data(); + +// Note the Qt return value is discarded as it would require handwritten code +// and seems pretty useless. +void fill(const QPoint &value, int size = -1); + +QPoint &first(); +int indexOf(const QPoint &value, int from = 0) const; +void insert(int i, const QPoint &value); +bool isEmpty() const; +QPoint &last(); +int lastIndexOf(const QPoint &value, int from = -1) const; + +// Note the Qt return type is QVector. +QPolygon mid(int pos, int length = -1) const; + +void prepend(const QPoint &value); +void remove(int i); +void remove(int i, int count); +void replace(int i, const QPoint &value); +int size() const; +QPoint value(int i) const; +QPoint value(int i, const QPoint &defaultValue) const; +bool operator!=(const QPolygon &other) const; + +// Note the Qt return type is QVector. +QPolygon operator+(const QPolygon &other) const; + +QPolygon &operator+=(const QPolygon &other); +QPolygon &operator+=(const QPoint &value); +bool operator==(const QPolygon &other) const; + +SIP_PYOBJECT operator<<(const QPoint &value); +%MethodCode + *a0 << *a1; + + sipRes = sipArg0; + Py_INCREF(sipRes); +%End + +QPoint &operator[](int i); +%MethodCode +Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + +if (idx < 0) + sipIsErr = 1; +else + sipRes = &sipCpp->operator[]((int)idx); +%End + +// Some additional Python special methods. + +void __setitem__(int i, const QPoint &value); +%MethodCode +int len; + +len = sipCpp->count(); + +if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) + sipIsErr = 1; +else + (*sipCpp)[a0] = *a1; +%End + +void __setitem__(SIP_PYSLICE slice, const QPolygon &list); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + int vlen = a1->count(); + + if (vlen != slicelength) + { + sipBadLengthForSlice(vlen, slicelength); + sipIsErr = 1; + } + else + { + QVector::const_iterator it = a1->begin(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipCpp)[start] = *it; + start += step; + ++it; + } + } +} +%End + +void __delitem__(int i); +%MethodCode +if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) + sipIsErr = 1; +else + sipCpp->remove(a0); +%End + +void __delitem__(SIP_PYSLICE slice); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + sipCpp->remove(start); + start += step - 1; + } +} +%End + +QPolygon operator[](SIP_PYSLICE slice); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + sipRes = new QPolygon(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipRes) += (*sipCpp)[start]; + start += step; + } +} +%End + +int __contains__(const QPoint &value); +%MethodCode +// It looks like you can't assign QBool to int. +sipRes = bool(sipCpp->contains(*a0)); +%End + void swap(QPolygon &other /Constrained/); +%If (Qt_5_10_0 -) + bool intersects(const QPolygon &r) const; +%End +}; + +class QPolygonF +{ +%TypeHeaderCode +#include +%End + +public: + QPolygonF(); + ~QPolygonF(); + QPolygonF(const QPolygonF &a); + QPolygonF(const QVector &v); + QPolygonF(const QRectF &r); + QPolygonF(const QPolygon &a); + explicit QPolygonF(int asize); + void translate(const QPointF &offset); + QPolygon toPolygon() const; + bool isClosed() const; + QRectF boundingRect() const; + void translate(qreal dx, qreal dy); + bool containsPoint(const QPointF &pt, Qt::FillRule fillRule) const; + QPolygonF united(const QPolygonF &r) const; + QPolygonF intersected(const QPolygonF &r) const; + QPolygonF subtracted(const QPolygonF &r) const; + QPolygonF translated(const QPointF &offset) const; + QPolygonF translated(qreal dx, qreal dy) const; +// Methods inherited from QVector and Python special methods. +// Keep in sync with QPolygon and QXmlStreamAttributes. + +void append(const QPointF &value); +const QPointF &at(int i) const; +void clear(); +bool contains(const QPointF &value) const; +int count(const QPointF &value) const; +int count() const /__len__/; +void *data(); + +// Note the Qt return value is discarded as it would require handwritten code +// and seems pretty useless. +void fill(const QPointF &value, int size = -1); + +QPointF &first(); +int indexOf(const QPointF &value, int from = 0) const; +void insert(int i, const QPointF &value); +bool isEmpty() const; +QPointF &last(); +int lastIndexOf(const QPointF &value, int from = -1) const; + +// Note the Qt return type is QVector. +QPolygonF mid(int pos, int length = -1) const; + +void prepend(const QPointF &value); +void remove(int i); +void remove(int i, int count); +void replace(int i, const QPointF &value); +int size() const; +QPointF value(int i) const; +QPointF value(int i, const QPointF &defaultValue) const; +bool operator!=(const QPolygonF &other) const; + +// Note the Qt return type is QVector. +QPolygonF operator+(const QPolygonF &other) const; + +QPolygonF &operator+=(const QPolygonF &other); +QPolygonF &operator+=(const QPointF &value); +bool operator==(const QPolygonF &other) const; + +SIP_PYOBJECT operator<<(const QPointF &value); +%MethodCode + *a0 << *a1; + + sipRes = sipArg0; + Py_INCREF(sipRes); +%End + +QPointF &operator[](int i); +%MethodCode +Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + +if (idx < 0) + sipIsErr = 1; +else + sipRes = &sipCpp->operator[]((int)idx); +%End + +// Some additional Python special methods. + +void __setitem__(int i, const QPointF &value); +%MethodCode +int len; + +len = sipCpp->count(); + +if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) + sipIsErr = 1; +else + (*sipCpp)[a0] = *a1; +%End + +void __setitem__(SIP_PYSLICE slice, const QPolygonF &list); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + int vlen = a1->count(); + + if (vlen != slicelength) + { + sipBadLengthForSlice(vlen, slicelength); + sipIsErr = 1; + } + else + { + QVector::const_iterator it = a1->begin(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipCpp)[start] = *it; + start += step; + ++it; + } + } +} +%End + +void __delitem__(int i); +%MethodCode +if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) + sipIsErr = 1; +else + sipCpp->remove(a0); +%End + +void __delitem__(SIP_PYSLICE slice); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + sipCpp->remove(start); + start += step - 1; + } +} +%End + +QPolygonF operator[](SIP_PYSLICE slice); +%MethodCode +Py_ssize_t start, stop, step, slicelength; + +if (sipConvertFromSliceObject(a0, sipCpp->count(), &start, &stop, &step, &slicelength) < 0) +{ + sipIsErr = 1; +} +else +{ + sipRes = new QPolygonF(); + + for (Py_ssize_t i = 0; i < slicelength; ++i) + { + (*sipRes) += (*sipCpp)[start]; + start += step; + } +} +%End + +int __contains__(const QPointF &value); +%MethodCode +// It looks like you can't assign QBool to int. +sipRes = bool(sipCpp->contains(*a0)); +%End + void swap(QPolygonF &other /Constrained/); +%If (Qt_5_10_0 -) + bool intersects(const QPolygonF &r) const; +%End +}; + +QDataStream &operator<<(QDataStream &stream, const QPolygonF &array /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &stream, QPolygonF &array /Constrained/) /ReleaseGIL/; +QDataStream &operator<<(QDataStream &stream, const QPolygon &polygon /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &stream, QPolygon &polygon /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qlist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qlist.sip new file mode 100644 index 0000000..9fa038b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qlist.sip @@ -0,0 +1,106 @@ +// This is the SIP interface definition for the QList based mapped types +// specific to the QtGui module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QList + /TypeHintIn="Sequence[QFontDatabase.WritingSystem]", + TypeHintOut="List[QFontDatabase.WritingSystem]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QFontDatabase_WritingSystem); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return (PySequence_Check(sipPy) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + + Py_ssize_t len = PySequence_Size(sipPy); + + if (len < 0) + return 0; + + QList *ql = new QList; + + for (Py_ssize_t i = 0; i < len; ++i) + { + PyObject *itm = PySequence_GetItem(sipPy, i); + + if (!itm) + { + delete ql; + *sipIsErr = 1; + + return 0; + } + + int v = sipConvertToEnum(itm, sipType_QFontDatabase_WritingSystem); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "element %zd has type '%s' but 'QFontDatabase.WritingSystem' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qpair.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qpair.sip new file mode 100644 index 0000000..7803a2f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qpair.sip @@ -0,0 +1,220 @@ +// This is the SIP interface definition for the QPair based mapped types +// specific to the QtGui module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +%If (PyQt_OpenGL) + +%MappedType QPair + /TypeHint="Tuple[QOpenGLTexture.Filter, QOpenGLTexture.Filter]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + return sipBuildResult(NULL, "(FF)", sipCpp->first, + sipType_QOpenGLTexture_Filter, sipCpp->second, + sipType_QOpenGLTexture_Filter); +%End + +%ConvertToTypeCode + if (!sipIsErr) + return (PySequence_Check(sipPy) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + + Py_ssize_t len = PySequence_Size(sipPy); + + if (len != 2) + { + // A negative length should only be an internal error so let the + // original exception stand. + if (len >= 0) + PyErr_Format(PyExc_TypeError, + "sequence has %zd elements but 2 elements are expected", + len); + + *sipIsErr = 1; + + return 0; + } + + PyObject *firstobj = PySequence_GetItem(sipPy, 0); + + if (!firstobj) + { + *sipIsErr = 1; + + return 0; + } + + int firstv = sipConvertToEnum(firstobj, sipType_QOpenGLTexture_Filter); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "the first element has type '%s' but 'QOpenGLTexture.Filter' is expected", + sipPyTypeName(Py_TYPE(firstobj))); + + *sipIsErr = 1; + + return 0; + } + + PyObject *secondobj = PySequence_GetItem(sipPy, 1); + + if (!secondobj) + { + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + int secondv = sipConvertToEnum(secondobj, sipType_QOpenGLTexture_Filter); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "the second element has type '%s' but 'QOpenGLTexture.Filter' is expected", + sipPyTypeName(Py_TYPE(secondobj))); + + Py_DECREF(secondobj); + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + *sipCppPtr = new QPair( + static_cast(firstv), + static_cast(secondv)); + + Py_DECREF(secondobj); + Py_DECREF(firstobj); + + return sipGetState(sipTransferObj); +%End +}; + +%End + +%End + + +%If (Qt_5_2_0 -) + +%MappedType QPair /TypeHint="Tuple[float, float]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + return Py_BuildValue("(ff)", sipCpp->first, sipCpp->second); +%End + +%ConvertToTypeCode + if (!sipIsErr) + return (PySequence_Check(sipPy) +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + + Py_ssize_t len = PySequence_Size(sipPy); + + if (len != 2) + { + // A negative length should only be an internal error so let the + // original exception stand. + if (len >= 0) + PyErr_Format(PyExc_TypeError, + "sequence has %zd elements but 2 elements are expected", + len); + + *sipIsErr = 1; + + return 0; + } + + PyObject *firstobj = PySequence_GetItem(sipPy, 0); + + if (!firstobj) + { + *sipIsErr = 1; + + return 0; + } + + PyErr_Clear(); + double first = PyFloat_AsDouble(firstobj); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "the first element has type '%s' but 'float' is expected", + sipPyTypeName(Py_TYPE(firstobj))); + + *sipIsErr = 1; + + return 0; + } + + PyObject *secondobj = PySequence_GetItem(sipPy, 1); + + if (!secondobj) + { + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + PyErr_Clear(); + double second = PyFloat_AsDouble(secondobj); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "the second element has type '%s' but 'float' is expected", + sipPyTypeName(Py_TYPE(secondobj))); + + Py_DECREF(secondobj); + Py_DECREF(firstobj); + *sipIsErr = 1; + + return 0; + } + + *sipCppPtr = new QPair(first, second);; + + Py_DECREF(secondobj); + Py_DECREF(firstobj); + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qvector.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qvector.sip new file mode 100644 index 0000000..218acaa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qpygui_qvector.sip @@ -0,0 +1,452 @@ +// This is the SIP interface definition for the QVector based mapped types +// specific to the QtGui module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QVector + /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + // Convert to a Python long to make sure it doesn't get interpreted as + // a signed value. + PyObject *pobj = PyLong_FromUnsignedLong(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector *qv = new QVector; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + PyErr_Clear(); + unsigned long val = PyLong_AsUnsignedLongMask(itm); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + qv->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + + +%MappedType QVector + /TypeHintIn="Iterable[float]", TypeHintOut="List[float]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *pobj = PyFloat_FromDouble(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector *qv = new QVector; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + PyErr_Clear(); + double val = PyFloat_AsDouble(itm); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + qv->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + + +%If (PyQt_qreal_double) + +%MappedType QVector + /TypeHintIn="Iterable[float]", TypeHintOut="List[float]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *pobj = PyFloat_FromDouble(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector *qv = new QVector; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + PyErr_Clear(); + double val = PyFloat_AsDouble(itm); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + qv->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + +%End + + +%If (PyQt_Desktop_OpenGL) + +%MappedType QVector + /TypeHintIn="Iterable[int]", TypeHintOut="List[int]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + // Convert to a Python long to make sure it doesn't get interpreted as + // a signed value. + PyObject *pobj = PyLong_FromUnsignedLongLong(sipCpp->value(i)); + + if (!pobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, pobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QVector *qv = new QVector; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + PyErr_Clear(); + unsigned PY_LONG_LONG val = PyLong_AsUnsignedLongLongMask(itm); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'int' is expected", i, + sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete qv; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + qv->append(val); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = qv; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qquaternion.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qquaternion.sip new file mode 100644 index 0000000..c37d3b5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qquaternion.sip @@ -0,0 +1,161 @@ +// qquaternion.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QQuaternion +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"dddd", (double)sipCpp->scalar(), + (double)sipCpp->x(), (double)sipCpp->y(), (double)sipCpp->z()); +%End + +public: + QQuaternion(); + QQuaternion(float aScalar, float xpos, float ypos, float zpos); + QQuaternion(float aScalar, const QVector3D &aVector); + explicit QQuaternion(const QVector4D &aVector); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + PyObject *scalar = PyFloat_FromDouble(sipCpp->scalar()); + PyObject *x = PyFloat_FromDouble(sipCpp->x()); + PyObject *y = PyFloat_FromDouble(sipCpp->y()); + PyObject *z = PyFloat_FromDouble(sipCpp->z()); + + if (scalar && x && y && z) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QQuaternion(%R, %R, %R, %R)", + scalar, x, y, z); + #else + sipRes = PyString_FromString("PyQt5.QtGui.QQuaternion("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(scalar)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(x)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(y)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(z)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + Py_XDECREF(scalar); + Py_XDECREF(x); + Py_XDECREF(y); + Py_XDECREF(z); +%End + + float length() const; + float lengthSquared() const; + QQuaternion normalized() const; + void normalize(); + QVector3D rotatedVector(const QVector3D &vector) const; + static QQuaternion fromAxisAndAngle(const QVector3D &axis, float angle); + static QQuaternion fromAxisAndAngle(float x, float y, float z, float angle); + static QQuaternion slerp(const QQuaternion &q1, const QQuaternion &q2, float t); + static QQuaternion nlerp(const QQuaternion &q1, const QQuaternion &q2, float t); + bool isNull() const; + bool isIdentity() const; + float x() const; + float y() const; + float z() const; + float scalar() const; + void setX(float aX); + void setY(float aY); + void setZ(float aZ); + void setScalar(float aScalar); + QQuaternion conjugate() const; + QQuaternion &operator+=(const QQuaternion &quaternion); + QQuaternion &operator-=(const QQuaternion &quaternion); + QQuaternion &operator*=(float factor); + QQuaternion &operator*=(const QQuaternion &quaternion); + QQuaternion &operator/=(float divisor); + void setVector(const QVector3D &aVector); + QVector3D vector() const; + void setVector(float aX, float aY, float aZ); + QVector4D toVector4D() const; +%If (Qt_5_5_0 -) + void getAxisAndAngle(QVector3D *axis /Out/, float *angle) const; +%End +%If (Qt_5_5_0 -) + void getEulerAngles(float *pitch, float *yaw, float *roll) const; +%End +%If (Qt_5_5_0 -) + static QQuaternion fromEulerAngles(float pitch, float yaw, float roll); +%End +%If (Qt_5_5_0 -) + QMatrix3x3 toRotationMatrix() const; +%End +%If (Qt_5_5_0 -) + static QQuaternion fromRotationMatrix(const QMatrix3x3 &rot3x3); +%End +%If (Qt_5_5_0 -) + void getAxes(QVector3D *xAxis /Out/, QVector3D *yAxis /Out/, QVector3D *zAxis /Out/) const; +%End +%If (Qt_5_5_0 -) + static QQuaternion fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis); +%End +%If (Qt_5_5_0 -) + static QQuaternion fromDirection(const QVector3D &direction, const QVector3D &up); +%End +%If (Qt_5_5_0 -) + static QQuaternion rotationTo(const QVector3D &from, const QVector3D &to); +%End +%If (Qt_5_5_0 -) + static float dotProduct(const QQuaternion &q1, const QQuaternion &q2); +%End +%If (Qt_5_5_0 -) + QQuaternion inverted() const; +%End +%If (Qt_5_5_0 -) + QQuaternion conjugated() const; +%End +%If (Qt_5_5_0 -) + QVector3D toEulerAngles() const; +%End +%If (Qt_5_5_0 -) + static QQuaternion fromEulerAngles(const QVector3D &eulerAngles); +%End +}; + +const QQuaternion operator*(const QQuaternion &q1, const QQuaternion &q2); +bool operator==(const QQuaternion &q1, const QQuaternion &q2); +bool operator!=(const QQuaternion &q1, const QQuaternion &q2); +const QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2); +const QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2); +const QQuaternion operator*(float factor, const QQuaternion &quaternion); +const QQuaternion operator*(const QQuaternion &quaternion, float factor); +const QQuaternion operator-(const QQuaternion &quaternion); +const QQuaternion operator/(const QQuaternion &quaternion, float divisor); +bool qFuzzyCompare(const QQuaternion &q1, const QQuaternion &q2); +QDataStream &operator<<(QDataStream &, const QQuaternion & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QQuaternion & /Constrained/) /ReleaseGIL/; +%If (Qt_5_5_0 -) +QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrasterwindow.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrasterwindow.sip new file mode 100644 index 0000000..5fc0533 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrasterwindow.sip @@ -0,0 +1,41 @@ +// qrasterwindow.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QRasterWindow : public QPaintDeviceWindow +{ +%TypeHeaderCode +#include +%End + +public: + explicit QRasterWindow(QWindow *parent /TransferThis/ = 0); +%If (Qt_5_9_0 -) + virtual ~QRasterWindow(); +%End + +protected: + virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrawfont.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrawfont.sip new file mode 100644 index 0000000..dbf1935 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrawfont.sip @@ -0,0 +1,106 @@ +// qrawfont.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_RawFont) + +class QRawFont +{ +%TypeHeaderCode +#include +%End + +public: + enum AntialiasingType + { + PixelAntialiasing, + SubPixelAntialiasing, + }; + + QRawFont(); + QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting); + QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting); + QRawFont(const QRawFont &other); + ~QRawFont(); + bool isValid() const; + bool operator==(const QRawFont &other) const; + bool operator!=(const QRawFont &other) const; + QString familyName() const; + QString styleName() const; + QFont::Style style() const; + int weight() const; + QVector glyphIndexesForString(const QString &text) const; + QVector advancesForGlyphIndexes(const QVector &glyphIndexes) const; +%If (Qt_5_1_0 -) + QVector advancesForGlyphIndexes(const QVector &glyphIndexes, QRawFont::LayoutFlags layoutFlags) const; +%End + QImage alphaMapForGlyph(quint32 glyphIndex, QRawFont::AntialiasingType antialiasingType = QRawFont::SubPixelAntialiasing, const QTransform &transform = QTransform()) const; + QPainterPath pathForGlyph(quint32 glyphIndex) const; + void setPixelSize(qreal pixelSize); + qreal pixelSize() const; + QFont::HintingPreference hintingPreference() const; + qreal ascent() const; + qreal descent() const; + qreal leading() const; + qreal xHeight() const; + qreal averageCharWidth() const; + qreal maxCharWidth() const; + qreal unitsPerEm() const; + void loadFromFile(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference) /ReleaseGIL/; + void loadFromData(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) /ReleaseGIL/; + bool supportsCharacter(uint ucs4) const; + bool supportsCharacter(QChar character) const; + QList supportedWritingSystems() const; + QByteArray fontTable(const char *tagName) const; + static QRawFont fromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any); + QRectF boundingRect(quint32 glyphIndex) const; + qreal lineThickness() const; + qreal underlinePosition() const; + void swap(QRawFont &other /Constrained/); +%If (Qt_5_1_0 -) + + enum LayoutFlag + { + SeparateAdvances, + KernedAdvances, + UseDesignMetrics, + }; + +%End +%If (Qt_5_1_0 -) + typedef QFlags LayoutFlags; +%End +%If (Qt_5_8_0 -) + qreal capHeight() const; +%End +%If (Qt_5_8_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; + +%End +%If (Qt_5_1_0 -) +QFlags operator|(QRawFont::LayoutFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qregion.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qregion.sip new file mode 100644 index 0000000..5d415e9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qregion.sip @@ -0,0 +1,148 @@ +// qregion.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRegion +{ +%TypeHeaderCode +#include +%End + +public: + enum RegionType + { + Rectangle, + Ellipse, + }; + + QRegion(); + QRegion(int x, int y, int w, int h, QRegion::RegionType type = QRegion::Rectangle); + QRegion(const QRect &r, QRegion::RegionType type = QRegion::Rectangle); + QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill); + QRegion(const QBitmap &bitmap); + QRegion(const QRegion ®ion); + QRegion(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QRegion(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QRegion(); + bool isEmpty() const; + int __bool__() const; +%MethodCode + sipRes = !sipCpp->isEmpty(); +%End + + bool contains(const QPoint &p) const; + int __contains__(const QPoint &p) const; +%MethodCode + sipRes = sipCpp->contains(*a0); +%End + + bool contains(const QRect &r) const; + int __contains__(const QRect &r) const; +%MethodCode + sipRes = sipCpp->contains(*a0); +%End + + void translate(int dx, int dy); + void translate(const QPoint &p); + QRegion translated(int dx, int dy) const; + QRegion translated(const QPoint &p) const; + QRegion united(const QRegion &r) const; + QRegion united(const QRect &r) const; + QRect boundingRect() const; + QVector rects() const; +%If (Qt_5_4_0 -) + QRegion operator|(const QRegion &r) const; +%End + void setRects(const QVector &); +%MethodCode + if (a0->size()) + sipCpp->setRects(a0->data(), a0->size()); + else + sipCpp->setRects(0, 0); +%End + +%If (- Qt_5_4_0) + const QRegion operator|(const QRegion &r) const; +%End +%If (Qt_5_4_0 -) + QRegion operator+(const QRegion &r) const; +%End +%If (- Qt_5_4_0) + const QRegion operator+(const QRegion &r) const; +%End +%If (Qt_5_4_0 -) + QRegion operator+(const QRect &r) const; +%End +%If (- Qt_5_4_0) + const QRegion operator+(const QRect &r) const; +%End +%If (Qt_5_4_0 -) + QRegion operator&(const QRegion &r) const; +%End +%If (- Qt_5_4_0) + const QRegion operator&(const QRegion &r) const; +%End +%If (Qt_5_4_0 -) + QRegion operator&(const QRect &r) const; +%End +%If (- Qt_5_4_0) + const QRegion operator&(const QRect &r) const; +%End +%If (Qt_5_4_0 -) + QRegion operator-(const QRegion &r) const; +%End +%If (- Qt_5_4_0) + const QRegion operator-(const QRegion &r) const; +%End +%If (Qt_5_4_0 -) + QRegion operator^(const QRegion &r) const; +%End +%If (- Qt_5_4_0) + const QRegion operator^(const QRegion &r) const; +%End + QRegion &operator|=(const QRegion &r); + QRegion &operator+=(const QRegion &r); + QRegion &operator+=(const QRect &r); + QRegion &operator&=(const QRegion &r); + QRegion &operator&=(const QRect &r); + QRegion &operator-=(const QRegion &r); + QRegion &operator^=(const QRegion &r); + bool operator==(const QRegion &r) const; + bool operator!=(const QRegion &r) const; + QRegion intersected(const QRegion &r) const; + QRegion intersected(const QRect &r) const; + QRegion subtracted(const QRegion &r) const; + QRegion xored(const QRegion &r) const; + bool intersects(const QRegion &r) const; + bool intersects(const QRect &r) const; + int rectCount() const; + void swap(QRegion &other /Constrained/); + bool isNull() const; +}; + +QDataStream &operator<<(QDataStream &, const QRegion & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QRegion & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrgb.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrgb.sip new file mode 100644 index 0000000..7ee9969 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrgb.sip @@ -0,0 +1,42 @@ +// qrgb.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +typedef unsigned int QRgb; +int qRed(QRgb rgb); +int qGreen(QRgb rgb); +int qBlue(QRgb rgb); +int qAlpha(QRgb rgb); +QRgb qRgb(int r, int g, int b); +QRgb qRgba(int r, int g, int b, int a); +int qGray(int r, int g, int b); +int qGray(QRgb rgb); +bool qIsGray(QRgb rgb); +%If (Qt_5_3_0 -) +QRgb qPremultiply(QRgb x); +%End +%If (Qt_5_3_0 -) +QRgb qUnpremultiply(QRgb p); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrgba64.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrgba64.sip new file mode 100644 index 0000000..6874f7d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qrgba64.sip @@ -0,0 +1,90 @@ +// qrgba64.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_6_0 -) +%ModuleCode +#include +%End +%End + +%If (Qt_5_6_0 -) + +class QRgba64 +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_7_0 -) + QRgba64(); +%End + static QRgba64 fromRgba64(quint64 c); + static QRgba64 fromRgba64(quint16 red, quint16 green, quint16 blue, quint16 alpha); + static QRgba64 fromRgba(quint8 red, quint8 green, quint8 blue, quint8 alpha); + static QRgba64 fromArgb32(uint rgb); + bool isOpaque() const; + bool isTransparent() const; + quint16 red() const; + quint16 green() const; + quint16 blue() const; + quint16 alpha() const; + void setRed(quint16 _red); + void setGreen(quint16 _green); + void setBlue(quint16 _blue); + void setAlpha(quint16 _alpha); + quint8 red8() const; + quint8 green8() const; + quint8 blue8() const; + quint8 alpha8() const; + uint toArgb32() const; + ushort toRgb16() const; + QRgba64 premultiplied() const; + QRgba64 unpremultiplied() const; + operator quint64() const; +}; + +%End +%If (Qt_5_6_0 -) +QRgba64 qRgba64(quint16 r, quint16 g, quint16 b, quint16 a); +%End +%If (Qt_5_6_0 -) +QRgba64 qRgba64(quint64 c); +%End +%If (Qt_5_6_0 -) +QRgba64 qPremultiply(QRgba64 c); +%End +%If (Qt_5_6_0 -) +QRgba64 qUnpremultiply(QRgba64 c); +%End +%If (Qt_5_6_0 -) +uint qRed(QRgba64 rgb); +%End +%If (Qt_5_6_0 -) +uint qGreen(QRgba64 rgb); +%End +%If (Qt_5_6_0 -) +uint qBlue(QRgba64 rgb); +%End +%If (Qt_5_6_0 -) +uint qAlpha(QRgba64 rgb); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qscreen.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qscreen.sip new file mode 100644 index 0000000..2915ad8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qscreen.sip @@ -0,0 +1,96 @@ +// qscreen.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QScreen : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_4_0 -) + virtual ~QScreen(); +%End + QString name() const; + int depth() const; + QSize size() const; + QRect geometry() const; + QSizeF physicalSize() const; + qreal physicalDotsPerInchX() const; + qreal physicalDotsPerInchY() const; + qreal physicalDotsPerInch() const; + qreal logicalDotsPerInchX() const; + qreal logicalDotsPerInchY() const; + qreal logicalDotsPerInch() const; + QSize availableSize() const; + QRect availableGeometry() const; + QList virtualSiblings() const; + QSize virtualSize() const; + QRect virtualGeometry() const; + QSize availableVirtualSize() const; + QRect availableVirtualGeometry() const; +%If (Qt_5_2_0 -) + Qt::ScreenOrientation nativeOrientation() const; +%End + Qt::ScreenOrientation primaryOrientation() const; + Qt::ScreenOrientation orientation() const; + Qt::ScreenOrientations orientationUpdateMask() const; + void setOrientationUpdateMask(Qt::ScreenOrientations mask); + int angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b) const; + QTransform transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &target) const; + QRect mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &rect) const; + bool isPortrait(Qt::ScreenOrientation orientation) const; + bool isLandscape(Qt::ScreenOrientation orientation) const; + QPixmap grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1); + qreal refreshRate() const; + qreal devicePixelRatio() const; + +signals: + void geometryChanged(const QRect &geometry); + void physicalDotsPerInchChanged(qreal dpi); + void logicalDotsPerInchChanged(qreal dpi); + void primaryOrientationChanged(Qt::ScreenOrientation orientation); + void orientationChanged(Qt::ScreenOrientation orientation); + void refreshRateChanged(qreal refreshRate); + void physicalSizeChanged(const QSizeF &size); + void virtualGeometryChanged(const QRect &rect); +%If (Qt_5_4_0 -) + void availableGeometryChanged(const QRect &geometry); +%End + +public: +%If (Qt_5_9_0 -) + QString manufacturer() const; +%End +%If (Qt_5_9_0 -) + QString model() const; +%End +%If (Qt_5_9_0 -) + QString serialNumber() const; +%End +%If (Qt_5_15_0 -) + QScreen *virtualSiblingAt(QPoint point); +%End + +private: + QScreen(const QScreen &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsessionmanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsessionmanager.sip new file mode 100644 index 0000000..7251467 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsessionmanager.sip @@ -0,0 +1,62 @@ +// qsessionmanager.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SessionManager) + +class QSessionManager : public QObject +{ +%TypeHeaderCode +#include +%End + + QSessionManager(QGuiApplication *app /TransferThis/, QString &id, QString &key); + virtual ~QSessionManager(); + +public: + QString sessionId() const; + QString sessionKey() const; + bool allowsInteraction(); + bool allowsErrorInteraction(); + void release(); + void cancel(); + + enum RestartHint + { + RestartIfRunning, + RestartAnyway, + RestartImmediately, + RestartNever, + }; + + void setRestartHint(QSessionManager::RestartHint); + QSessionManager::RestartHint restartHint() const; + void setRestartCommand(const QStringList &); + QStringList restartCommand() const; + void setDiscardCommand(const QStringList &); + QStringList discardCommand() const; + void setManagerProperty(const QString &name, const QString &value); + void setManagerProperty(const QString &name, const QStringList &value); + bool isPhase2() const; + void requestPhase2(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstandarditemmodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstandarditemmodel.sip new file mode 100644 index 0000000..e89abfe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstandarditemmodel.sip @@ -0,0 +1,223 @@ +// qstandarditemmodel.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStandardItemModel : public QAbstractItemModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QStandardItemModel(QObject *parent /TransferThis/ = 0); + QStandardItemModel(int rows, int columns, QObject *parent /TransferThis/ = 0); + virtual ~QStandardItemModel(); + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex parent(const QModelIndex &child) const; + QObject *parent() const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); + virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + void clear(); + virtual Qt::DropActions supportedDropActions() const; + virtual QMap itemData(const QModelIndex &index) const; + virtual bool setItemData(const QModelIndex &index, const QMap &roles); + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + QStandardItem *itemFromIndex(const QModelIndex &index) const; + QModelIndex indexFromItem(const QStandardItem *item) const; + QStandardItem *item(int row, int column = 0) const; + void setItem(int row, int column, QStandardItem *item /Transfer/); + void setItem(int arow, QStandardItem *aitem /Transfer/); + QStandardItem *invisibleRootItem() const /Transfer/; + QStandardItem *horizontalHeaderItem(int column) const; + void setHorizontalHeaderItem(int column, QStandardItem *item /Transfer/); + QStandardItem *verticalHeaderItem(int row) const; + void setVerticalHeaderItem(int row, QStandardItem *item /Transfer/); + void setHorizontalHeaderLabels(const QStringList &labels); + void setVerticalHeaderLabels(const QStringList &labels); + void setRowCount(int rows); + void setColumnCount(int columns); + void appendRow(const QList &items /Transfer/); + void appendColumn(const QList &items /Transfer/); + void insertRow(int row, const QList &items /Transfer/); + void insertColumn(int column, const QList &items /Transfer/); + QStandardItem *takeItem(int row, int column = 0) /TransferBack/; + QList takeRow(int row) /TransferBack/; + QList takeColumn(int column) /TransferBack/; + QStandardItem *takeHorizontalHeaderItem(int column) /TransferBack/; + QStandardItem *takeVerticalHeaderItem(int row) /TransferBack/; + const QStandardItem *itemPrototype() const; + void setItemPrototype(const QStandardItem *item /Transfer/); + QList findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const; + int sortRole() const; + void setSortRole(int role); + void appendRow(QStandardItem *aitem /Transfer/); + void insertRow(int arow, QStandardItem *aitem /Transfer/); + bool insertRow(int row, const QModelIndex &parent = QModelIndex()); + bool insertColumn(int column, const QModelIndex &parent = QModelIndex()); + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; + void setItemRoleNames(const QHash &roleNames); + +signals: + void itemChanged(QStandardItem *item); + +public: +%If (Qt_5_12_0 -) + bool clearItemData(const QModelIndex &index); +%End +}; + +class QStandardItem /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + QStandardItem(); + explicit QStandardItem(const QString &text); + QStandardItem(const QIcon &icon, const QString &text); + QStandardItem(int rows, int columns = 1); + virtual ~QStandardItem(); + virtual QVariant data(int role = Qt::UserRole + 1) const; + virtual void setData(const QVariant &value, int role = Qt::UserRole + 1); + QString text() const; + QIcon icon() const; + QString toolTip() const; + QString statusTip() const; + QString whatsThis() const; + QSize sizeHint() const; + QFont font() const; + Qt::Alignment textAlignment() const; + QBrush background() const; + QBrush foreground() const; + Qt::CheckState checkState() const; + QString accessibleText() const; + QString accessibleDescription() const; + Qt::ItemFlags flags() const; + void setFlags(Qt::ItemFlags flags); + bool isEnabled() const; + void setEnabled(bool enabled); + bool isEditable() const; + void setEditable(bool editable); + bool isSelectable() const; + void setSelectable(bool selectable); + bool isCheckable() const; + void setCheckable(bool checkable); + bool isTristate() const; + void setTristate(bool tristate); + bool isDragEnabled() const; + void setDragEnabled(bool dragEnabled); + bool isDropEnabled() const; + void setDropEnabled(bool dropEnabled); + QStandardItem *parent() const; + int row() const; + int column() const; + QModelIndex index() const; + QStandardItemModel *model() const; + int rowCount() const; + void setRowCount(int rows); + int columnCount() const; + void setColumnCount(int columns); + bool hasChildren() const; + QStandardItem *child(int row, int column = 0) const; + void setChild(int row, int column, QStandardItem *item /Transfer/); + void setChild(int arow, QStandardItem *aitem /Transfer/); + void insertRow(int row, const QList &items /Transfer/); + void insertRow(int arow, QStandardItem *aitem /Transfer/); + void insertRows(int row, int count); + void insertColumn(int column, const QList &items /Transfer/); + void insertColumns(int column, int count); + void removeRow(int row); + void removeColumn(int column); + void removeRows(int row, int count); + void removeColumns(int column, int count); + QStandardItem *takeChild(int row, int column = 0) /TransferBack/; + QList takeRow(int row) /TransferBack/; + QList takeColumn(int column) /TransferBack/; + void sortChildren(int column, Qt::SortOrder order = Qt::AscendingOrder); + virtual QStandardItem *clone() const /Factory/; + + enum ItemType + { + Type, + UserType, + }; + + virtual int type() const; + virtual void read(QDataStream &in); + virtual void write(QDataStream &out) const; + virtual bool operator<(const QStandardItem &other /NoCopy/) const; + void setText(const QString &atext); + void setIcon(const QIcon &aicon); + void setToolTip(const QString &atoolTip); + void setStatusTip(const QString &astatusTip); + void setWhatsThis(const QString &awhatsThis); + void setSizeHint(const QSize &asizeHint); + void setFont(const QFont &afont); + void setTextAlignment(Qt::Alignment atextAlignment); + void setBackground(const QBrush &abrush); + void setForeground(const QBrush &abrush); + void setCheckState(Qt::CheckState acheckState); + void setAccessibleText(const QString &aaccessibleText); + void setAccessibleDescription(const QString &aaccessibleDescription); + void appendRow(const QList &items /Transfer/); + void appendRow(QStandardItem *aitem /Transfer/); + void appendColumn(const QList &items /Transfer/); + void insertRows(int row, const QList &items /Transfer/); + void appendRows(const QList &items /Transfer/); + +protected: + QStandardItem(const QStandardItem &other); + void emitDataChanged(); + +public: +%If (Qt_5_6_0 -) + bool isAutoTristate() const; +%End +%If (Qt_5_6_0 -) + void setAutoTristate(bool tristate); +%End +%If (Qt_5_6_0 -) + bool isUserTristate() const; +%End +%If (Qt_5_6_0 -) + void setUserTristate(bool tristate); +%End +%If (Qt_5_12_0 -) + void clearData(); +%End +}; + +QDataStream &operator>>(QDataStream &in, QStandardItem &item /Constrained/) /ReleaseGIL/; +QDataStream &operator<<(QDataStream &out, const QStandardItem &item /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstatictext.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstatictext.sip new file mode 100644 index 0000000..6a582b4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstatictext.sip @@ -0,0 +1,60 @@ +// qstatictext.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStaticText +{ +%TypeHeaderCode +#include +%End + +public: + enum PerformanceHint + { + ModerateCaching, + AggressiveCaching, + }; + + QStaticText(); +%If (Qt_5_10_0 -) + explicit QStaticText(const QString &text); +%End +%If (- Qt_5_10_0) + QStaticText(const QString &text); +%End + QStaticText(const QStaticText &other); + ~QStaticText(); + void setText(const QString &text); + QString text() const; + void setTextFormat(Qt::TextFormat textFormat); + Qt::TextFormat textFormat() const; + void setTextWidth(qreal textWidth); + qreal textWidth() const; + void setTextOption(const QTextOption &textOption); + QTextOption textOption() const; + QSizeF size() const; + void prepare(const QTransform &matrix = QTransform(), const QFont &font = QFont()); + void setPerformanceHint(QStaticText::PerformanceHint performanceHint); + QStaticText::PerformanceHint performanceHint() const; + bool operator==(const QStaticText &) const; + bool operator!=(const QStaticText &) const; + void swap(QStaticText &other /Constrained/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstylehints.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstylehints.sip new file mode 100644 index 0000000..57e6d6b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qstylehints.sip @@ -0,0 +1,139 @@ +// qstylehints.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStyleHints : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + int mouseDoubleClickInterval() const; + int startDragDistance() const; + int startDragTime() const; + int startDragVelocity() const; + int keyboardInputInterval() const; + int keyboardAutoRepeatRate() const; + int cursorFlashTime() const; + bool showIsFullScreen() const; + int passwordMaskDelay() const; + qreal fontSmoothingGamma() const; + bool useRtlExtensions() const; +%If (Qt_5_1_0 -) + QChar passwordMaskCharacter() const; +%End +%If (Qt_5_2_0 -) + bool setFocusOnTouchRelease() const; +%End +%If (Qt_5_3_0 -) + int mousePressAndHoldInterval() const; +%End +%If (Qt_5_5_0 -) + Qt::TabFocusBehavior tabFocusBehavior() const; +%End +%If (Qt_5_5_0 -) + bool singleClickActivation() const; +%End + +signals: +%If (Qt_5_5_0 -) + void cursorFlashTimeChanged(int cursorFlashTime); +%End +%If (Qt_5_5_0 -) + void keyboardInputIntervalChanged(int keyboardInputInterval); +%End +%If (Qt_5_5_0 -) + void mouseDoubleClickIntervalChanged(int mouseDoubleClickInterval); +%End +%If (Qt_5_5_0 -) + void startDragDistanceChanged(int startDragDistance); +%End +%If (Qt_5_5_0 -) + void startDragTimeChanged(int startDragTime); +%End +%If (Qt_5_7_0 -) + void mousePressAndHoldIntervalChanged(int mousePressAndHoldInterval); +%End +%If (Qt_5_7_0 -) + void tabFocusBehaviorChanged(Qt::TabFocusBehavior tabFocusBehavior); +%End + +public: +%If (Qt_5_6_0 -) + bool showIsMaximized() const; +%End +%If (Qt_5_8_0 -) + bool useHoverEffects() const; +%End +%If (Qt_5_8_0 -) + void setUseHoverEffects(bool useHoverEffects); +%End + +signals: +%If (Qt_5_8_0 -) + void useHoverEffectsChanged(bool useHoverEffects); +%End + +public: +%If (Qt_5_9_0 -) + int wheelScrollLines() const; +%End + +signals: +%If (Qt_5_9_0 -) + void wheelScrollLinesChanged(int scrollLines); +%End + +public: +%If (Qt_5_10_0 -) + bool showShortcutsInContextMenus() const; +%End +%If (Qt_5_11_0 -) + int mouseQuickSelectionThreshold() const; +%End + +signals: +%If (Qt_5_11_0 -) + void mouseQuickSelectionThresholdChanged(int threshold); +%End + +public: +%If (Qt_5_13_0 -) + void setShowShortcutsInContextMenus(bool showShortcutsInContextMenus); +%End + +signals: +%If (Qt_5_13_0 -) + void showShortcutsInContextMenusChanged(bool); +%End + +public: +%If (Qt_5_14_0 -) + int mouseDoubleClickDistance() const; +%End +%If (Qt_5_14_0 -) + int touchDoubleTapDistance() const; +%End + +private: + QStyleHints(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsurface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsurface.sip new file mode 100644 index 0000000..1fcd803 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsurface.sip @@ -0,0 +1,67 @@ +// qsurface.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSurface /Abstract/ +{ +%TypeHeaderCode +#include +%End + +public: + enum SurfaceClass + { + Window, +%If (Qt_5_1_0 -) + Offscreen, +%End + }; + + enum SurfaceType + { + RasterSurface, + OpenGLSurface, +%If (Qt_5_3_0 -) + RasterGLSurface, +%End +%If (Qt_5_9_0 -) + OpenVGSurface, +%End +%If (Qt_5_10_0 -) + VulkanSurface, +%End +%If (Qt_5_12_0 -) + MetalSurface, +%End + }; + + virtual ~QSurface(); + QSurface::SurfaceClass surfaceClass() const; + virtual QSurfaceFormat format() const = 0; + virtual QSurface::SurfaceType surfaceType() const = 0; + virtual QSize size() const = 0; +%If (Qt_5_3_0 -) + bool supportsOpenGL() const; +%End + +protected: + explicit QSurface(QSurface::SurfaceClass type); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsurfaceformat.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsurfaceformat.sip new file mode 100644 index 0000000..56f9cf7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsurfaceformat.sip @@ -0,0 +1,147 @@ +// qsurfaceformat.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSurfaceFormat +{ +%TypeHeaderCode +#include +%End + +public: + enum FormatOption + { + StereoBuffers, + DebugContext, + DeprecatedFunctions, +%If (Qt_5_5_0 -) + ResetNotification, +%End + }; + + typedef QFlags FormatOptions; + + enum SwapBehavior + { + DefaultSwapBehavior, + SingleBuffer, + DoubleBuffer, + TripleBuffer, + }; + + enum RenderableType + { + DefaultRenderableType, + OpenGL, + OpenGLES, + OpenVG, + }; + + enum OpenGLContextProfile + { + NoProfile, + CoreProfile, + CompatibilityProfile, + }; + + QSurfaceFormat(); + QSurfaceFormat(QSurfaceFormat::FormatOptions options); + QSurfaceFormat(const QSurfaceFormat &other); + ~QSurfaceFormat(); + void setDepthBufferSize(int size); + int depthBufferSize() const; + void setStencilBufferSize(int size); + int stencilBufferSize() const; + void setRedBufferSize(int size); + int redBufferSize() const; + void setGreenBufferSize(int size); + int greenBufferSize() const; + void setBlueBufferSize(int size); + int blueBufferSize() const; + void setAlphaBufferSize(int size); + int alphaBufferSize() const; + void setSamples(int numSamples); + int samples() const; + void setSwapBehavior(QSurfaceFormat::SwapBehavior behavior); + QSurfaceFormat::SwapBehavior swapBehavior() const; + bool hasAlpha() const; + void setProfile(QSurfaceFormat::OpenGLContextProfile profile); + QSurfaceFormat::OpenGLContextProfile profile() const; + void setRenderableType(QSurfaceFormat::RenderableType type); + QSurfaceFormat::RenderableType renderableType() const; + void setMajorVersion(int majorVersion); + int majorVersion() const; + void setMinorVersion(int minorVersion); + int minorVersion() const; + void setStereo(bool enable); + void setOption(QSurfaceFormat::FormatOptions opt); + bool testOption(QSurfaceFormat::FormatOptions opt) const; + bool stereo() const; +%If (Qt_5_1_0 -) + QPair version() const; +%End +%If (Qt_5_1_0 -) + void setVersion(int major, int minor); +%End +%If (Qt_5_3_0 -) + void setOptions(QSurfaceFormat::FormatOptions options); +%End +%If (Qt_5_3_0 -) + void setOption(QSurfaceFormat::FormatOption option, bool on = true); +%End +%If (Qt_5_3_0 -) + bool testOption(QSurfaceFormat::FormatOption option) const; +%End +%If (Qt_5_3_0 -) + QSurfaceFormat::FormatOptions options() const; +%End +%If (Qt_5_3_0 -) + int swapInterval() const; +%End +%If (Qt_5_3_0 -) + void setSwapInterval(int interval); +%End +%If (Qt_5_4_0 -) + static void setDefaultFormat(const QSurfaceFormat &format); +%End +%If (Qt_5_4_0 -) + static QSurfaceFormat defaultFormat(); +%End +%If (Qt_5_10_0 -) + + enum ColorSpace + { + DefaultColorSpace, + sRGBColorSpace, + }; + +%End +%If (Qt_5_10_0 -) + QSurfaceFormat::ColorSpace colorSpace() const; +%End +%If (Qt_5_10_0 -) + void setColorSpace(QSurfaceFormat::ColorSpace colorSpace); +%End +}; + +bool operator==(const QSurfaceFormat &, const QSurfaceFormat &); +bool operator!=(const QSurfaceFormat &, const QSurfaceFormat &); +QFlags operator|(QSurfaceFormat::FormatOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsyntaxhighlighter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsyntaxhighlighter.sip new file mode 100644 index 0000000..432cf18 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qsyntaxhighlighter.sip @@ -0,0 +1,92 @@ +// qsyntaxhighlighter.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSyntaxHighlighter : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSyntaxHighlighter(QTextDocument *parent /TransferThis/); + explicit QSyntaxHighlighter(QObject *parent /TransferThis/); + virtual ~QSyntaxHighlighter(); + void setDocument(QTextDocument *doc /KeepReference/); + QTextDocument *document() const; + +public slots: + void rehighlight(); + void rehighlightBlock(const QTextBlock &block); + +protected: + virtual void highlightBlock(const QString &text) = 0; + void setFormat(int start, int count, const QTextCharFormat &format); + void setFormat(int start, int count, const QColor &color); + void setFormat(int start, int count, const QFont &font); + QTextCharFormat format(int pos) const; + int previousBlockState() const; + int currentBlockState() const; + void setCurrentBlockState(int newState); + void setCurrentBlockUserData(QTextBlockUserData *data /GetWrapper/); +%MethodCode + // Ownership of the user data is with the document not the syntax highlighter. + + typedef PyObject *(*helper_func)(QObject *, const sipTypeDef *); + + static helper_func helper = 0; + + if (!helper) + { + helper = (helper_func)sipImportSymbol("qtgui_wrap_ancestors"); + Q_ASSERT(helper); + } + + QTextDocument *td = sipCpp->document(); + + if (td) + { + PyObject *py_td = helper(td, sipType_QTextDocument); + + if (!py_td) + { + sipIsErr = 1; + } + else + { + sipTransferTo(a0Wrapper, py_td); + Py_DECREF(py_td); + } + } + + #if defined(SIP_PROTECTED_IS_PUBLIC) + sipCpp->setCurrentBlockUserData(a0); + #else + sipCpp->sipProtect_setCurrentBlockUserData(a0); + #endif +%End + + QTextBlockUserData *currentBlockUserData() const; + QTextBlock currentBlock() const; + +private: + QSyntaxHighlighter(const QSyntaxHighlighter &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextcursor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextcursor.sip new file mode 100644 index 0000000..0e84fb6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextcursor.sip @@ -0,0 +1,155 @@ +// qtextcursor.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextCursor +{ +%TypeHeaderCode +#include +%End + +public: + QTextCursor(); + explicit QTextCursor(QTextDocument *document); + explicit QTextCursor(QTextFrame *frame); + explicit QTextCursor(const QTextBlock &block); + QTextCursor(const QTextCursor &cursor); + ~QTextCursor(); + bool isNull() const; + + enum MoveMode + { + MoveAnchor, + KeepAnchor, + }; + + void setPosition(int pos, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); + int position() const; + int anchor() const; + void insertText(const QString &text); + void insertText(const QString &text, const QTextCharFormat &format); + + enum MoveOperation + { + NoMove, + Start, + Up, + StartOfLine, + StartOfBlock, + StartOfWord, + PreviousBlock, + PreviousCharacter, + PreviousWord, + Left, + WordLeft, + End, + Down, + EndOfLine, + EndOfWord, + EndOfBlock, + NextBlock, + NextCharacter, + NextWord, + Right, + WordRight, + NextCell, + PreviousCell, + NextRow, + PreviousRow, + }; + + bool movePosition(QTextCursor::MoveOperation op, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor, int n = 1); + void deleteChar(); + void deletePreviousChar(); + + enum SelectionType + { + WordUnderCursor, + LineUnderCursor, + BlockUnderCursor, + Document, + }; + + void select(QTextCursor::SelectionType selection); + bool hasSelection() const; + bool hasComplexSelection() const; + void removeSelectedText(); + void clearSelection(); + int selectionStart() const; + int selectionEnd() const; + QString selectedText() const; + QTextDocumentFragment selection() const; + void selectedTableCells(int *firstRow, int *numRows, int *firstColumn, int *numColumns) const; + QTextBlock block() const; + QTextCharFormat charFormat() const; + void setCharFormat(const QTextCharFormat &format); + void mergeCharFormat(const QTextCharFormat &modifier); + QTextBlockFormat blockFormat() const; + void setBlockFormat(const QTextBlockFormat &format); + void mergeBlockFormat(const QTextBlockFormat &modifier); + QTextCharFormat blockCharFormat() const; + void setBlockCharFormat(const QTextCharFormat &format); + void mergeBlockCharFormat(const QTextCharFormat &modifier); + bool atBlockStart() const; + bool atBlockEnd() const; + bool atStart() const; + bool atEnd() const; + void insertBlock(); + void insertBlock(const QTextBlockFormat &format); + void insertBlock(const QTextBlockFormat &format, const QTextCharFormat &charFormat); + QTextList *insertList(const QTextListFormat &format); + QTextList *insertList(QTextListFormat::Style style); + QTextList *createList(const QTextListFormat &format); + QTextList *createList(QTextListFormat::Style style); + QTextList *currentList() const; + QTextTable *insertTable(int rows, int cols, const QTextTableFormat &format); + QTextTable *insertTable(int rows, int cols); + QTextTable *currentTable() const; + QTextFrame *insertFrame(const QTextFrameFormat &format); + QTextFrame *currentFrame() const; + void insertFragment(const QTextDocumentFragment &fragment); + void insertHtml(const QString &html); + void insertImage(const QTextImageFormat &format); + void insertImage(const QTextImageFormat &format, QTextFrameFormat::Position alignment); + void insertImage(const QString &name); + void insertImage(const QImage &image, const QString &name = QString()); + void beginEditBlock(); + void joinPreviousEditBlock(); + void endEditBlock(); + int blockNumber() const; + int columnNumber() const; + bool operator!=(const QTextCursor &rhs) const; + bool operator<(const QTextCursor &rhs) const; + bool operator<=(const QTextCursor &rhs) const; + bool operator==(const QTextCursor &rhs) const; + bool operator>=(const QTextCursor &rhs) const; + bool operator>(const QTextCursor &rhs) const; + bool isCopyOf(const QTextCursor &other) const; + bool visualNavigation() const; + void setVisualNavigation(bool b); + QTextDocument *document() const; + int positionInBlock() const; + void setVerticalMovementX(int x); + int verticalMovementX() const; + void setKeepPositionOnInsert(bool b); + bool keepPositionOnInsert() const; + void swap(QTextCursor &other /Constrained/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocument.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocument.sip new file mode 100644 index 0000000..29acb4f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocument.sip @@ -0,0 +1,228 @@ +// qtextdocument.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace Qt +{ +%TypeHeaderCode +#include +%End + + bool mightBeRichText(const QString &); + QString convertFromPlainText(const QString &plain, Qt::WhiteSpaceMode mode = Qt::WhiteSpacePre); +}; + +class QTextDocument : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTextDocument(QObject *parent /TransferThis/ = 0); + QTextDocument(const QString &text, QObject *parent /TransferThis/ = 0); + virtual ~QTextDocument(); + QTextDocument *clone(QObject *parent /TransferThis/ = 0) const /Factory/; + bool isEmpty() const; + virtual void clear(); + void setUndoRedoEnabled(bool enable); + bool isUndoRedoEnabled() const; + bool isUndoAvailable() const; + bool isRedoAvailable() const; + void setDocumentLayout(QAbstractTextDocumentLayout *layout /Transfer/); + QAbstractTextDocumentLayout *documentLayout() const; + + enum MetaInformation + { + DocumentTitle, + DocumentUrl, + }; + + void setMetaInformation(QTextDocument::MetaInformation info, const QString &); + QString metaInformation(QTextDocument::MetaInformation info) const; + QString toHtml(const QByteArray &encoding = QByteArray()) const; + void setHtml(const QString &html); + QString toPlainText() const; + void setPlainText(const QString &text); + + enum FindFlag + { + FindBackward, + FindCaseSensitively, + FindWholeWords, + }; + + typedef QFlags FindFlags; + QTextCursor find(const QString &subString, int position = 0, QFlags options = 0) const; + QTextCursor find(const QRegExp &expr, int position = 0, QFlags options = 0) const; +%If (Qt_5_5_0 -) + QTextCursor find(const QRegularExpression &expr, int position = 0, QFlags options = 0) const; +%End + QTextCursor find(const QString &subString, const QTextCursor &cursor, QFlags options = 0) const; + QTextCursor find(const QRegExp &expr, const QTextCursor &cursor, QFlags options = 0) const; +%If (Qt_5_5_0 -) + QTextCursor find(const QRegularExpression &expr, const QTextCursor &cursor, QFlags options = 0) const; +%End + QTextFrame *rootFrame() const; + QTextObject *object(int objectIndex) const; + QTextObject *objectForFormat(const QTextFormat &) const; + QTextBlock findBlock(int pos) const; + QTextBlock begin() const; + QTextBlock end() const; + void setPageSize(const QSizeF &size); + QSizeF pageSize() const; + void setDefaultFont(const QFont &font); + QFont defaultFont() const; + int pageCount() const; + bool isModified() const; +%If (PyQt_Printer) + void print(QPagedPaintDevice *printer) const /PyName=print_/; +%End +%If (Py_v3) +%If (PyQt_Printer) + void print(QPagedPaintDevice *printer) const; +%End +%End + + enum ResourceType + { +%If (Qt_5_14_0 -) + UnknownResource, +%End + HtmlResource, + ImageResource, + StyleSheetResource, +%If (Qt_5_14_0 -) + MarkdownResource, +%End + UserResource, + }; + + QVariant resource(int type, const QUrl &name) const; + void addResource(int type, const QUrl &name, const QVariant &resource); + QVector allFormats() const; + void markContentsDirty(int from, int length); + void setUseDesignMetrics(bool b); + bool useDesignMetrics() const; + +signals: + void blockCountChanged(int newBlockCount); + void contentsChange(int from, int charsRemoves, int charsAdded); + void contentsChanged(); + void cursorPositionChanged(const QTextCursor &cursor); + void modificationChanged(bool m); + void redoAvailable(bool); + void undoAvailable(bool); + +public slots: + void undo(); + void redo(); + void setModified(bool on = true); + +protected: + virtual QTextObject *createObject(const QTextFormat &f) /Factory/; + virtual QVariant loadResource(int type, const QUrl &name); + +public: + void drawContents(QPainter *p, const QRectF &rect = QRectF()); + void setTextWidth(qreal width); + qreal textWidth() const; + qreal idealWidth() const; + void adjustSize(); + QSizeF size() const; + int blockCount() const; + void setDefaultStyleSheet(const QString &sheet); + QString defaultStyleSheet() const; + void undo(QTextCursor *cursor); + void redo(QTextCursor *cursor); + int maximumBlockCount() const; + void setMaximumBlockCount(int maximum); + QTextOption defaultTextOption() const; + void setDefaultTextOption(const QTextOption &option); + int revision() const; + QTextBlock findBlockByNumber(int blockNumber) const; + QTextBlock findBlockByLineNumber(int blockNumber) const; + QTextBlock firstBlock() const; + QTextBlock lastBlock() const; + qreal indentWidth() const; + void setIndentWidth(qreal width); + +signals: + void undoCommandAdded(); + void documentLayoutChanged(); + +public: + QChar characterAt(int pos) const; + qreal documentMargin() const; + void setDocumentMargin(qreal margin); + int lineCount() const; + int characterCount() const; + int availableUndoSteps() const; + int availableRedoSteps() const; + + enum Stacks + { + UndoStack, + RedoStack, + UndoAndRedoStacks, + }; + + void clearUndoRedoStacks(QTextDocument::Stacks stacks = QTextDocument::UndoAndRedoStacks); + Qt::CursorMoveStyle defaultCursorMoveStyle() const; + void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style); +%If (Qt_5_3_0 -) + QUrl baseUrl() const; +%End +%If (Qt_5_3_0 -) + void setBaseUrl(const QUrl &url); +%End + +signals: +%If (Qt_5_3_0 -) + void baseUrlChanged(const QUrl &url); +%End + +public: +%If (Qt_5_9_0 -) + QString toRawText() const; +%End +%If (Qt_5_14_0 -) + + enum MarkdownFeature + { + MarkdownNoHTML, + MarkdownDialectCommonMark, + MarkdownDialectGitHub, + }; + +%End +%If (Qt_5_14_0 -) + typedef QFlags MarkdownFeatures; +%End +%If (Qt_5_14_0 -) + QString toMarkdown(QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) const; +%End +%If (Qt_5_14_0 -) + void setMarkdown(const QString &markdown, QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub); +%End +}; + +QFlags operator|(QTextDocument::FindFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocumentfragment.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocumentfragment.sip new file mode 100644 index 0000000..95f300f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocumentfragment.sip @@ -0,0 +1,41 @@ +// qtextdocumentfragment.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextDocumentFragment +{ +%TypeHeaderCode +#include +%End + +public: + QTextDocumentFragment(); + explicit QTextDocumentFragment(const QTextDocument *document); + explicit QTextDocumentFragment(const QTextCursor &range); + QTextDocumentFragment(const QTextDocumentFragment &rhs); + ~QTextDocumentFragment(); + bool isEmpty() const; + QString toPlainText() const; + QString toHtml(const QByteArray &encoding = QByteArray()) const; + static QTextDocumentFragment fromPlainText(const QString &plainText); + static QTextDocumentFragment fromHtml(const QString &html); + static QTextDocumentFragment fromHtml(const QString &html, const QTextDocument *resourceProvider); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocumentwriter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocumentwriter.sip new file mode 100644 index 0000000..68c88c2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextdocumentwriter.sip @@ -0,0 +1,48 @@ +// qtextdocumentwriter.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextDocumentWriter +{ +%TypeHeaderCode +#include +%End + +public: + QTextDocumentWriter(); + QTextDocumentWriter(QIODevice *device, const QByteArray &format); + QTextDocumentWriter(const QString &fileName, const QByteArray &format = QByteArray()); + ~QTextDocumentWriter(); + void setFormat(const QByteArray &format); + QByteArray format() const; + void setDevice(QIODevice *device); + QIODevice *device() const; + void setFileName(const QString &fileName); + QString fileName() const; + bool write(const QTextDocument *document); + bool write(const QTextDocumentFragment &fragment); + void setCodec(QTextCodec *codec /KeepReference/); + QTextCodec *codec() const; + static QList supportedDocumentFormats(); + +private: + QTextDocumentWriter(const QTextDocumentWriter &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextformat.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextformat.sip new file mode 100644 index 0000000..75cc971 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextformat.sip @@ -0,0 +1,746 @@ +// qtextformat.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextLength +{ +%TypeHeaderCode +#include +%End + +public: + enum Type + { + VariableLength, + FixedLength, + PercentageLength, + }; + + QTextLength(); + QTextLength::Type type() const; + QTextLength(QTextLength::Type atype, qreal avalue); + qreal value(qreal maximumLength) const; + qreal rawValue() const; + bool operator==(const QTextLength &other) const; + bool operator!=(const QTextLength &other) const; + QTextLength(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QTextLength(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End +}; + +QDataStream &operator<<(QDataStream &, const QTextLength & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QTextLength & /Constrained/) /ReleaseGIL/; + +class QTextFormat +{ +%TypeHeaderCode +#include +%End + +public: + enum FormatType + { + InvalidFormat, + BlockFormat, + CharFormat, + ListFormat, + TableFormat, + FrameFormat, + UserFormat, + }; + + enum ObjectTypes + { + NoObject, + ImageObject, + TableObject, + TableCellObject, + UserObject, + }; + + enum PageBreakFlag + { + PageBreak_Auto, + PageBreak_AlwaysBefore, + PageBreak_AlwaysAfter, + }; + + typedef QFlags PageBreakFlags; + + enum Property + { + ObjectIndex, + CssFloat, + LayoutDirection, + OutlinePen, + BackgroundBrush, + ForegroundBrush, + BlockAlignment, + BlockTopMargin, + BlockBottomMargin, + BlockLeftMargin, + BlockRightMargin, + TextIndent, + BlockIndent, + BlockNonBreakableLines, + BlockTrailingHorizontalRulerWidth, + FontFamily, + FontPointSize, + FontSizeAdjustment, + FontSizeIncrement, + FontWeight, + FontItalic, + FontUnderline, + FontOverline, + FontStrikeOut, + FontFixedPitch, + FontPixelSize, + TextUnderlineColor, + TextVerticalAlignment, + TextOutline, + IsAnchor, + AnchorHref, + AnchorName, + ObjectType, + ListStyle, + ListIndent, + FrameBorder, + FrameMargin, + FramePadding, + FrameWidth, + FrameHeight, + TableColumns, + TableColumnWidthConstraints, + TableCellSpacing, + TableCellPadding, + TableCellRowSpan, + TableCellColumnSpan, + ImageName, + ImageWidth, + ImageHeight, + TextUnderlineStyle, + TableHeaderRowCount, + FullWidthSelection, + PageBreakPolicy, + TextToolTip, + FrameTopMargin, + FrameBottomMargin, + FrameLeftMargin, + FrameRightMargin, + FrameBorderBrush, + FrameBorderStyle, + BackgroundImageUrl, + TabPositions, + FirstFontProperty, + FontCapitalization, + FontLetterSpacing, + FontWordSpacing, + LastFontProperty, + TableCellTopPadding, + TableCellBottomPadding, + TableCellLeftPadding, + TableCellRightPadding, + FontStyleHint, + FontStyleStrategy, + FontKerning, + LineHeight, + LineHeightType, + FontHintingPreference, + ListNumberPrefix, + ListNumberSuffix, + FontStretch, + FontLetterSpacingType, +%If (Qt_5_12_0 -) + HeadingLevel, +%End +%If (Qt_5_12_0 -) + ImageQuality, +%End +%If (Qt_5_13_0 -) + FontFamilies, +%End +%If (Qt_5_13_0 -) + FontStyleName, +%End +%If (Qt_5_14_0 -) + BlockQuoteLevel, +%End +%If (Qt_5_14_0 -) + BlockCodeLanguage, +%End +%If (Qt_5_14_0 -) + BlockCodeFence, +%End +%If (Qt_5_14_0 -) + BlockMarker, +%End +%If (Qt_5_14_0 -) + TableBorderCollapse, +%End +%If (Qt_5_14_0 -) + TableCellTopBorder, +%End +%If (Qt_5_14_0 -) + TableCellBottomBorder, +%End +%If (Qt_5_14_0 -) + TableCellLeftBorder, +%End +%If (Qt_5_14_0 -) + TableCellRightBorder, +%End +%If (Qt_5_14_0 -) + TableCellTopBorderStyle, +%End +%If (Qt_5_14_0 -) + TableCellBottomBorderStyle, +%End +%If (Qt_5_14_0 -) + TableCellLeftBorderStyle, +%End +%If (Qt_5_14_0 -) + TableCellRightBorderStyle, +%End +%If (Qt_5_14_0 -) + TableCellTopBorderBrush, +%End +%If (Qt_5_14_0 -) + TableCellBottomBorderBrush, +%End +%If (Qt_5_14_0 -) + TableCellLeftBorderBrush, +%End +%If (Qt_5_14_0 -) + TableCellRightBorderBrush, +%End +%If (Qt_5_14_0 -) + ImageTitle, +%End +%If (Qt_5_14_0 -) + ImageAltText, +%End + UserProperty, + }; + + QTextFormat(); + explicit QTextFormat(int type); + QTextFormat(const QTextFormat &rhs); + QTextFormat(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QTextFormat(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + ~QTextFormat(); + void merge(const QTextFormat &other); + bool isValid() const; + int type() const; + int objectIndex() const; + void setObjectIndex(int object); + QVariant property(int propertyId) const; + void setProperty(int propertyId, const QVariant &value); + void clearProperty(int propertyId); + bool hasProperty(int propertyId) const; + bool boolProperty(int propertyId) const; + int intProperty(int propertyId) const; + qreal doubleProperty(int propertyId) const; + QString stringProperty(int propertyId) const; + QColor colorProperty(int propertyId) const; + QPen penProperty(int propertyId) const; + QBrush brushProperty(int propertyId) const; + QTextLength lengthProperty(int propertyId) const; + QVector lengthVectorProperty(int propertyId) const; + void setProperty(int propertyId, const QVector &lengths); + QMap properties() const; + int objectType() const; + bool isCharFormat() const; + bool isBlockFormat() const; + bool isListFormat() const; + bool isFrameFormat() const; + bool isImageFormat() const; + bool isTableFormat() const; + QTextBlockFormat toBlockFormat() const; + QTextCharFormat toCharFormat() const; + QTextListFormat toListFormat() const; + QTextTableFormat toTableFormat() const; + QTextFrameFormat toFrameFormat() const; + QTextImageFormat toImageFormat() const; + bool operator==(const QTextFormat &rhs) const; + bool operator!=(const QTextFormat &rhs) const; + void setLayoutDirection(Qt::LayoutDirection direction); + Qt::LayoutDirection layoutDirection() const; + void setBackground(const QBrush &brush); + QBrush background() const; + void clearBackground(); + void setForeground(const QBrush &brush); + QBrush foreground() const; + void clearForeground(); + void setObjectType(int atype); + int propertyCount() const; + bool isTableCellFormat() const; + QTextTableCellFormat toTableCellFormat() const; + void swap(QTextFormat &other /Constrained/); +%If (Qt_5_3_0 -) + bool isEmpty() const; +%End +}; + +QDataStream &operator<<(QDataStream &, const QTextFormat & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QTextFormat & /Constrained/) /ReleaseGIL/; + +class QTextCharFormat : public QTextFormat +{ +%TypeHeaderCode +#include +%End + +public: + enum VerticalAlignment + { + AlignNormal, + AlignSuperScript, + AlignSubScript, + AlignMiddle, + AlignTop, + AlignBottom, + AlignBaseline, + }; + + QTextCharFormat(); + bool isValid() const; + void setFont(const QFont &font); + QFont font() const; + void setFontFamily(const QString &family); + QString fontFamily() const; + void setFontPointSize(qreal size); + qreal fontPointSize() const; + void setFontWeight(int weight); + int fontWeight() const; + void setFontItalic(bool italic); + bool fontItalic() const; + void setFontUnderline(bool underline); + bool fontUnderline() const; + void setFontOverline(bool overline); + bool fontOverline() const; + void setFontStrikeOut(bool strikeOut); + bool fontStrikeOut() const; + void setUnderlineColor(const QColor &color); + QColor underlineColor() const; + void setFontFixedPitch(bool fixedPitch); + bool fontFixedPitch() const; + void setVerticalAlignment(QTextCharFormat::VerticalAlignment alignment); + QTextCharFormat::VerticalAlignment verticalAlignment() const; + void setAnchor(bool anchor); + bool isAnchor() const; + void setAnchorHref(const QString &value); + QString anchorHref() const; + int tableCellRowSpan() const; + int tableCellColumnSpan() const; + void setTableCellRowSpan(int atableCellRowSpan); + void setTableCellColumnSpan(int atableCellColumnSpan); + void setTextOutline(const QPen &pen); + QPen textOutline() const; + + enum UnderlineStyle + { + NoUnderline, + SingleUnderline, + DashUnderline, + DotLine, + DashDotLine, + DashDotDotLine, + WaveUnderline, + SpellCheckUnderline, + }; + + void setUnderlineStyle(QTextCharFormat::UnderlineStyle style); + QTextCharFormat::UnderlineStyle underlineStyle() const; + void setToolTip(const QString &tip); + QString toolTip() const; + void setAnchorNames(const QStringList &names); + QStringList anchorNames() const; + void setFontCapitalization(QFont::Capitalization capitalization); + QFont::Capitalization fontCapitalization() const; + void setFontLetterSpacing(qreal spacing); + qreal fontLetterSpacing() const; + void setFontWordSpacing(qreal spacing); + qreal fontWordSpacing() const; + void setFontStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = QFont::PreferDefault); + void setFontStyleStrategy(QFont::StyleStrategy strategy); + QFont::StyleHint fontStyleHint() const; + QFont::StyleStrategy fontStyleStrategy() const; + void setFontKerning(bool enable); + bool fontKerning() const; + void setFontHintingPreference(QFont::HintingPreference hintingPreference); + QFont::HintingPreference fontHintingPreference() const; + int fontStretch() const; + void setFontStretch(int factor); + void setFontLetterSpacingType(QFont::SpacingType letterSpacingType); + QFont::SpacingType fontLetterSpacingType() const; +%If (Qt_5_3_0 -) + + enum FontPropertiesInheritanceBehavior + { + FontPropertiesSpecifiedOnly, + FontPropertiesAll, + }; + +%End +%If (Qt_5_3_0 -) + void setFont(const QFont &font, QTextCharFormat::FontPropertiesInheritanceBehavior behavior); +%End +%If (Qt_5_13_0 -) + void setFontFamilies(const QStringList &families); +%End +%If (Qt_5_13_0 -) + QVariant fontFamilies() const; +%End +%If (Qt_5_13_0 -) + void setFontStyleName(const QString &styleName); +%End +%If (Qt_5_13_0 -) + QVariant fontStyleName() const; +%End +}; + +class QTextBlockFormat : public QTextFormat +{ +%TypeHeaderCode +#include +%End + +public: + QTextBlockFormat(); + bool isValid() const; + Qt::Alignment alignment() const; + void setTopMargin(qreal margin); + qreal topMargin() const; + void setBottomMargin(qreal margin); + qreal bottomMargin() const; + void setLeftMargin(qreal margin); + qreal leftMargin() const; + void setRightMargin(qreal margin); + qreal rightMargin() const; + void setTextIndent(qreal margin); + qreal textIndent() const; + int indent() const; + void setNonBreakableLines(bool b); + bool nonBreakableLines() const; + void setAlignment(Qt::Alignment aalignment); + void setIndent(int aindent); + void setPageBreakPolicy(QTextFormat::PageBreakFlags flags); + QTextFormat::PageBreakFlags pageBreakPolicy() const; + void setTabPositions(const QList &tabs); + QList tabPositions() const; + + enum LineHeightTypes + { + SingleHeight, + ProportionalHeight, + FixedHeight, + MinimumHeight, + LineDistanceHeight, + }; + + void setLineHeight(qreal height, int heightType); + qreal lineHeight() const; + qreal lineHeight(qreal scriptLineHeight, qreal scaling = 1.) const; + int lineHeightType() const; +%If (Qt_5_12_0 -) + void setHeadingLevel(int alevel); +%End +%If (Qt_5_12_0 -) + int headingLevel() const; +%End +%If (Qt_5_14_0 -) + + enum class MarkerType + { + NoMarker, + Unchecked, + Checked, + }; + +%End +%If (Qt_5_14_0 -) + void setMarker(QTextBlockFormat::MarkerType marker); +%End +%If (Qt_5_14_0 -) + QTextBlockFormat::MarkerType marker() const; +%End +}; + +class QTextListFormat : public QTextFormat +{ +%TypeHeaderCode +#include +%End + +public: + QTextListFormat(); + bool isValid() const; + + enum Style + { + ListDisc, + ListCircle, + ListSquare, + ListDecimal, + ListLowerAlpha, + ListUpperAlpha, + ListLowerRoman, + ListUpperRoman, + }; + + QTextListFormat::Style style() const; + int indent() const; + void setStyle(QTextListFormat::Style astyle); + void setIndent(int aindent); + QString numberPrefix() const; + QString numberSuffix() const; + void setNumberPrefix(const QString &np); + void setNumberSuffix(const QString &ns); +}; + +class QTextImageFormat : public QTextCharFormat +{ +%TypeHeaderCode +#include +%End + +public: + QTextImageFormat(); + bool isValid() const; + QString name() const; + qreal width() const; + qreal height() const; +%If (Qt_5_12_0 -) + int quality() const; +%End + void setName(const QString &aname); + void setWidth(qreal awidth); + void setHeight(qreal aheight); +%If (Qt_5_12_0 -) + void setQuality(int quality = 100); +%End +}; + +class QTextFrameFormat : public QTextFormat +{ +%TypeHeaderCode +#include +%End + +public: + QTextFrameFormat(); + bool isValid() const; + + enum Position + { + InFlow, + FloatLeft, + FloatRight, + }; + + void setPosition(QTextFrameFormat::Position f); + QTextFrameFormat::Position position() const; + qreal border() const; + qreal margin() const; + qreal padding() const; + void setWidth(const QTextLength &length); + QTextLength width() const; + QTextLength height() const; + void setBorder(qreal aborder); + void setMargin(qreal amargin); + void setPadding(qreal apadding); + void setWidth(qreal awidth); + void setHeight(qreal aheight); + void setHeight(const QTextLength &aheight); + void setPageBreakPolicy(QTextFormat::PageBreakFlags flags); + QTextFormat::PageBreakFlags pageBreakPolicy() const; + + enum BorderStyle + { + BorderStyle_None, + BorderStyle_Dotted, + BorderStyle_Dashed, + BorderStyle_Solid, + BorderStyle_Double, + BorderStyle_DotDash, + BorderStyle_DotDotDash, + BorderStyle_Groove, + BorderStyle_Ridge, + BorderStyle_Inset, + BorderStyle_Outset, + }; + + void setBorderBrush(const QBrush &brush); + QBrush borderBrush() const; + void setBorderStyle(QTextFrameFormat::BorderStyle style); + QTextFrameFormat::BorderStyle borderStyle() const; + qreal topMargin() const; + qreal bottomMargin() const; + qreal leftMargin() const; + qreal rightMargin() const; + void setTopMargin(qreal amargin); + void setBottomMargin(qreal amargin); + void setLeftMargin(qreal amargin); + void setRightMargin(qreal amargin); +}; + +class QTextTableFormat : public QTextFrameFormat +{ +%TypeHeaderCode +#include +%End + +public: + QTextTableFormat(); + bool isValid() const; + int columns() const; + void setColumnWidthConstraints(const QVector &constraints); + QVector columnWidthConstraints() const; + void clearColumnWidthConstraints(); + qreal cellSpacing() const; + void setCellSpacing(qreal spacing); + qreal cellPadding() const; + Qt::Alignment alignment() const; + void setColumns(int acolumns); + void setCellPadding(qreal apadding); + void setAlignment(Qt::Alignment aalignment); + void setHeaderRowCount(int count); + int headerRowCount() const; +%If (Qt_5_14_0 -) + void setBorderCollapse(bool borderCollapse); +%End +%If (Qt_5_14_0 -) + bool borderCollapse() const; +%End +}; + +QFlags operator|(QTextFormat::PageBreakFlag f1, QFlags f2); + +class QTextTableCellFormat : public QTextCharFormat +{ +%TypeHeaderCode +#include +%End + +public: + QTextTableCellFormat(); + bool isValid() const; + void setTopPadding(qreal padding); + qreal topPadding() const; + void setBottomPadding(qreal padding); + qreal bottomPadding() const; + void setLeftPadding(qreal padding); + qreal leftPadding() const; + void setRightPadding(qreal padding); + qreal rightPadding() const; + void setPadding(qreal padding); +%If (Qt_5_14_0 -) + void setTopBorder(qreal width); +%End +%If (Qt_5_14_0 -) + qreal topBorder() const; +%End +%If (Qt_5_14_0 -) + void setBottomBorder(qreal width); +%End +%If (Qt_5_14_0 -) + qreal bottomBorder() const; +%End +%If (Qt_5_14_0 -) + void setLeftBorder(qreal width); +%End +%If (Qt_5_14_0 -) + qreal leftBorder() const; +%End +%If (Qt_5_14_0 -) + void setRightBorder(qreal width); +%End +%If (Qt_5_14_0 -) + qreal rightBorder() const; +%End +%If (Qt_5_14_0 -) + void setBorder(qreal width); +%End +%If (Qt_5_14_0 -) + void setTopBorderStyle(QTextFrameFormat::BorderStyle style); +%End +%If (Qt_5_14_0 -) + QTextFrameFormat::BorderStyle topBorderStyle() const; +%End +%If (Qt_5_14_0 -) + void setBottomBorderStyle(QTextFrameFormat::BorderStyle style); +%End +%If (Qt_5_14_0 -) + QTextFrameFormat::BorderStyle bottomBorderStyle() const; +%End +%If (Qt_5_14_0 -) + void setLeftBorderStyle(QTextFrameFormat::BorderStyle style); +%End +%If (Qt_5_14_0 -) + QTextFrameFormat::BorderStyle leftBorderStyle() const; +%End +%If (Qt_5_14_0 -) + void setRightBorderStyle(QTextFrameFormat::BorderStyle style); +%End +%If (Qt_5_14_0 -) + QTextFrameFormat::BorderStyle rightBorderStyle() const; +%End +%If (Qt_5_14_0 -) + void setBorderStyle(QTextFrameFormat::BorderStyle style); +%End +%If (Qt_5_14_0 -) + void setTopBorderBrush(const QBrush &brush); +%End +%If (Qt_5_14_0 -) + QBrush topBorderBrush() const; +%End +%If (Qt_5_14_0 -) + void setBottomBorderBrush(const QBrush &brush); +%End +%If (Qt_5_14_0 -) + QBrush bottomBorderBrush() const; +%End +%If (Qt_5_14_0 -) + void setLeftBorderBrush(const QBrush &brush); +%End +%If (Qt_5_14_0 -) + QBrush leftBorderBrush() const; +%End +%If (Qt_5_14_0 -) + void setRightBorderBrush(const QBrush &brush); +%End +%If (Qt_5_14_0 -) + QBrush rightBorderBrush() const; +%End +%If (Qt_5_14_0 -) + void setBorderBrush(const QBrush &brush); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextlayout.sip new file mode 100644 index 0000000..631aad4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextlayout.sip @@ -0,0 +1,185 @@ +// qtextlayout.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextInlineObject +{ +%TypeHeaderCode +#include +%End + +public: + bool isValid() const; + QRectF rect() const; + qreal width() const; + qreal ascent() const; + qreal descent() const; + qreal height() const; + Qt::LayoutDirection textDirection() const; + void setWidth(qreal w); + void setAscent(qreal a); + void setDescent(qreal d); + int textPosition() const; + int formatIndex() const; + QTextFormat format() const; +}; + +class QTextLayout +{ +%TypeHeaderCode +#include +%End + +public: + QTextLayout(); + QTextLayout(const QString &text); + QTextLayout(const QString &text, const QFont &font, QPaintDevice *paintDevice = 0); + QTextLayout(const QTextBlock &b); + ~QTextLayout(); + void setFont(const QFont &f); + QFont font() const; + void setText(const QString &string); + QString text() const; + void setTextOption(const QTextOption &option); + const QTextOption &textOption() const; + void setPreeditArea(int position, const QString &text); + int preeditAreaPosition() const; + QString preeditAreaText() const; + + struct FormatRange + { +%TypeHeaderCode +#include +%End + + int start; + int length; + QTextCharFormat format; + }; + + void setAdditionalFormats(const QList &overrides); + QList additionalFormats() const; + void clearAdditionalFormats(); + void setCacheEnabled(bool enable); + bool cacheEnabled() const; + void beginLayout(); + void endLayout(); + QTextLine createLine(); + int lineCount() const; + QTextLine lineAt(int i) const; + QTextLine lineForTextPosition(int pos) const; + + enum CursorMode + { + SkipCharacters, + SkipWords, + }; + + bool isValidCursorPosition(int pos) const; + int nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = QTextLayout::SkipCharacters) const; + int previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = QTextLayout::SkipCharacters) const; + void draw(QPainter *p, const QPointF &pos, const QVector &selections = QVector(), const QRectF &clip = QRectF()) const; + void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition) const; + void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition, int width) const; + QPointF position() const; + void setPosition(const QPointF &p); + QRectF boundingRect() const; + qreal minimumWidth() const; + qreal maximumWidth() const; + void clearLayout(); + void setCursorMoveStyle(Qt::CursorMoveStyle style); + Qt::CursorMoveStyle cursorMoveStyle() const; + int leftCursorPosition(int oldPos) const; + int rightCursorPosition(int oldPos) const; +%If (PyQt_RawFont) + QList glyphRuns(int from = -1, int length = -1) const; +%End +%If (Qt_5_6_0 -) + void setFormats(const QVector &overrides); +%End +%If (Qt_5_6_0 -) + QVector formats() const; +%End +%If (Qt_5_6_0 -) + void clearFormats(); +%End + +private: + QTextLayout(const QTextLayout &); +}; + +class QTextLine +{ +%TypeHeaderCode +#include +%End + +public: + QTextLine(); + bool isValid() const; + QRectF rect() const; + qreal x() const; + qreal y() const; + qreal width() const; + qreal ascent() const; + qreal descent() const; + qreal height() const; + qreal naturalTextWidth() const; + QRectF naturalTextRect() const; + + enum Edge + { + Leading, + Trailing, + }; + + enum CursorPosition + { + CursorBetweenCharacters, + CursorOnCharacter, + }; + + qreal cursorToX(int *cursorPos /In,Out/, QTextLine::Edge edge = QTextLine::Leading) const; + int xToCursor(qreal x, QTextLine::CursorPosition edge = QTextLine::CursorBetweenCharacters) const; + void setLineWidth(qreal width); + void setNumColumns(int columns); + void setNumColumns(int columns, qreal alignmentWidth); + void setPosition(const QPointF &pos); + int textStart() const; + int textLength() const; + int lineNumber() const; + void draw(QPainter *painter, const QPointF &position, const QTextLayout::FormatRange *selection = 0) const; + QPointF position() const; + qreal leading() const; + void setLeadingIncluded(bool included); + bool leadingIncluded() const; + qreal horizontalAdvance() const; +%If (PyQt_RawFont) + QList glyphRuns(int from = -1, int length = -1) const; +%End +}; + +%If (Qt_5_6_0 -) +bool operator==(const QTextLayout::FormatRange &lhs, const QTextLayout::FormatRange &rhs); +%End +%If (Qt_5_6_0 -) +bool operator!=(const QTextLayout::FormatRange &lhs, const QTextLayout::FormatRange &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextlist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextlist.sip new file mode 100644 index 0000000..38ceda5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextlist.sip @@ -0,0 +1,44 @@ +// qtextlist.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextList : public QTextBlockGroup +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTextList(QTextDocument *doc); + virtual ~QTextList(); + int count() const /__len__/; + QTextBlock item(int i) const; + int itemNumber(const QTextBlock &) const; + QString itemText(const QTextBlock &) const; + void removeItem(int i); + void remove(const QTextBlock &); + void add(const QTextBlock &block); + QTextListFormat format() const; + void setFormat(const QTextListFormat &aformat); + +private: + QTextList(const QTextList &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextobject.sip new file mode 100644 index 0000000..df4880e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextobject.sip @@ -0,0 +1,296 @@ +// qtextobject.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextObject : public QObject +{ +%TypeHeaderCode +#include +%End + +protected: + explicit QTextObject(QTextDocument *doc); + virtual ~QTextObject(); + void setFormat(const QTextFormat &format); + +public: + QTextFormat format() const; + int formatIndex() const; + QTextDocument *document() const; + int objectIndex() const; +}; + +class QTextBlockGroup : public QTextObject +{ +%TypeHeaderCode +#include +%End + +protected: + explicit QTextBlockGroup(QTextDocument *doc); + virtual ~QTextBlockGroup(); + virtual void blockInserted(const QTextBlock &block); + virtual void blockRemoved(const QTextBlock &block); + virtual void blockFormatChanged(const QTextBlock &block); + QList blockList() const; +}; + +class QTextFrame : public QTextObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTextFrame(QTextDocument *doc); + virtual ~QTextFrame(); + QTextFrameFormat frameFormat() const; + QTextCursor firstCursorPosition() const; + QTextCursor lastCursorPosition() const; + int firstPosition() const; + int lastPosition() const; + QList childFrames() const; + QTextFrame *parentFrame() const; + + class iterator + { +%TypeHeaderCode +#include +%End + + public: + iterator(); + iterator(const QTextFrame::iterator &o); + QTextFrame *parentFrame() const; + QTextFrame *currentFrame() const; + QTextBlock currentBlock() const; + bool atEnd() const; + bool operator==(const QTextFrame::iterator &o) const; + bool operator!=(const QTextFrame::iterator &o) const; + QTextFrame::iterator &operator+=(int); +%MethodCode + if (a0 > 0) + while (a0--) + (*sipCpp)++; + else if (a0 < 0) + while (a0++) + (*sipCpp)--; +%End + + QTextFrame::iterator &operator-=(int); +%MethodCode + if (a0 > 0) + while (a0--) + (*sipCpp)--; + else if (a0 < 0) + while (a0++) + (*sipCpp)++; +%End + }; + + typedef QTextFrame::iterator Iterator; + QTextFrame::iterator begin() const; + QTextFrame::iterator end() const; + void setFrameFormat(const QTextFrameFormat &aformat); +}; + +class QTextBlock /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + QTextBlock(); + QTextBlock(const QTextBlock &o); + bool isValid() const; + bool operator==(const QTextBlock &o) const; + bool operator!=(const QTextBlock &o) const; + bool operator<(const QTextBlock &o) const; + int position() const; + int length() const; + bool contains(int position) const; + QTextLayout *layout() const; + QTextBlockFormat blockFormat() const; + int blockFormatIndex() const; + QTextCharFormat charFormat() const; + int charFormatIndex() const; + QString text() const; + const QTextDocument *document() const; + QTextList *textList() const; + + class iterator + { +%TypeHeaderCode +#include +%End + + public: + iterator(); + iterator(const QTextBlock::iterator &o); + QTextFragment fragment() const; + bool atEnd() const; + bool operator==(const QTextBlock::iterator &o) const; + bool operator!=(const QTextBlock::iterator &o) const; + QTextBlock::iterator &operator+=(int); +%MethodCode + if (a0 > 0) + while (a0--) + (*sipCpp)++; + else if (a0 < 0) + while (a0++) + (*sipCpp)--; +%End + + QTextBlock::iterator &operator-=(int); +%MethodCode + if (a0 > 0) + while (a0--) + (*sipCpp)--; + else if (a0 < 0) + while (a0++) + (*sipCpp)++; +%End + }; + + typedef QTextBlock::iterator Iterator; + QTextBlock::iterator begin() const; + QTextBlock::iterator end() const; + QTextBlock next() const; + QTextBlock previous() const; + QTextBlockUserData *userData() const; + void setUserData(QTextBlockUserData *data /GetWrapper/); +%MethodCode + // Ownership of the user data is with the document not the text block. + const QTextDocument *td = sipCpp->document(); + + if (td) + { + PyObject *py_td = qtgui_wrap_ancestors(const_cast(td), + sipType_QTextDocument); + + if (!py_td) + { + sipIsErr = 1; + } + else + { + sipTransferTo(a0Wrapper, py_td); + Py_DECREF(py_td); + } + } + + sipCpp->setUserData(a0); +%End + + int userState() const; + void setUserState(int state); + void clearLayout(); + int revision() const; + void setRevision(int rev); + bool isVisible() const; + void setVisible(bool visible); + int blockNumber() const; + int firstLineNumber() const; + void setLineCount(int count); + int lineCount() const; + Qt::LayoutDirection textDirection() const; +%If (Qt_5_3_0 -) + QVector textFormats() const; +%End +}; + +class QTextFragment +{ +%TypeHeaderCode +#include +%End + +public: + QTextFragment(); + QTextFragment(const QTextFragment &o); + bool isValid() const; + bool operator==(const QTextFragment &o) const; + bool operator!=(const QTextFragment &o) const; + bool operator<(const QTextFragment &o) const; + int position() const; + int length() const; + bool contains(int position) const; + QTextCharFormat charFormat() const; + int charFormatIndex() const; + QString text() const; +%If (PyQt_RawFont) + QList glyphRuns(int from = -1, int length = -1) const; +%End +}; + +class QTextBlockUserData /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QTextBlockUserData(); +}; + +%ModuleHeaderCode +PyObject *qtgui_wrap_ancestors(QObject *obj, const sipTypeDef *td); +%End + +%ModuleCode +// Wrap a QObject and ensure that it's ancestors are all wrapped with the +// correct ownerships. +static PyObject *qtgui_wrap_ancestors_worker(QObject *obj) +{ + if (!obj) + { + Py_INCREF(Py_None); + return Py_None; + } + + PyObject *py_parent = qtgui_wrap_ancestors_worker(obj->parent()); + + if (!py_parent) + return 0; + + PyObject *py_obj = sipConvertFromType(obj, sipType_QObject, + (py_parent != Py_None ? py_parent : 0)); + + Py_DECREF(py_parent); + return py_obj; +} + +PyObject *qtgui_wrap_ancestors(QObject *obj, const sipTypeDef *td) +{ + PyObject *py_parent = qtgui_wrap_ancestors_worker(obj->parent()); + + if (!py_parent) + return 0; + + PyObject *py_obj = sipConvertFromType(obj, td, + (py_parent != Py_None ? py_parent : 0)); + + Py_DECREF(py_parent); + + return py_obj; +} +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextoption.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextoption.sip new file mode 100644 index 0000000..43a4a95 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtextoption.sip @@ -0,0 +1,106 @@ +// qtextoption.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextOption +{ +%TypeHeaderCode +#include +%End + +public: + QTextOption(); + QTextOption(Qt::Alignment alignment); + ~QTextOption(); + QTextOption(const QTextOption &o); + Qt::Alignment alignment() const; + void setTextDirection(Qt::LayoutDirection aDirection); + Qt::LayoutDirection textDirection() const; + + enum WrapMode + { + NoWrap, + WordWrap, + ManualWrap, + WrapAnywhere, + WrapAtWordBoundaryOrAnywhere, + }; + + void setWrapMode(QTextOption::WrapMode wrap); + QTextOption::WrapMode wrapMode() const; + + enum Flag + { + IncludeTrailingSpaces, + ShowTabsAndSpaces, + ShowLineAndParagraphSeparators, + AddSpaceForLineAndParagraphSeparators, + SuppressColors, +%If (Qt_5_7_0 -) + ShowDocumentTerminator, +%End + }; + + typedef QFlags Flags; + QTextOption::Flags flags() const; + qreal tabStop() const; + void setTabArray(const QList &tabStops); + QList tabArray() const; + void setUseDesignMetrics(bool b); + bool useDesignMetrics() const; + void setAlignment(Qt::Alignment aalignment); + void setFlags(QTextOption::Flags flags); + void setTabStop(qreal atabStop); + + enum TabType + { + LeftTab, + RightTab, + CenterTab, + DelimiterTab, + }; + + struct Tab + { +%TypeHeaderCode +#include +%End + + Tab(); + Tab(qreal pos, QTextOption::TabType tabType, QChar delim = QChar()); + bool operator==(const QTextOption::Tab &other) const; + bool operator!=(const QTextOption::Tab &other) const; + qreal position; + QTextOption::TabType type; + QChar delimiter; + }; + + void setTabs(const QList &tabStops); + QList tabs() const; +%If (Qt_5_10_0 -) + void setTabStopDistance(qreal tabStopDistance); +%End +%If (Qt_5_10_0 -) + qreal tabStopDistance() const; +%End +}; + +QFlags operator|(QTextOption::Flag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtexttable.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtexttable.sip new file mode 100644 index 0000000..0dccaf4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtexttable.sip @@ -0,0 +1,75 @@ +// qtexttable.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextTableCell +{ +%TypeHeaderCode +#include +%End + +public: + QTextTableCell(); + ~QTextTableCell(); + QTextTableCell(const QTextTableCell &o); + QTextCharFormat format() const; + void setFormat(const QTextCharFormat &format); + int row() const; + int column() const; + int rowSpan() const; + int columnSpan() const; + bool isValid() const; + QTextCursor firstCursorPosition() const; + QTextCursor lastCursorPosition() const; + int tableCellFormatIndex() const; + bool operator==(const QTextTableCell &other) const; + bool operator!=(const QTextTableCell &other) const; +}; + +class QTextTable : public QTextFrame +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTextTable(QTextDocument *doc); + virtual ~QTextTable(); + void resize(int rows, int cols); + void insertRows(int pos, int num); + void insertColumns(int pos, int num); + void removeRows(int pos, int num); + void removeColumns(int pos, int num); + void mergeCells(int row, int col, int numRows, int numCols); + void mergeCells(const QTextCursor &cursor); + void splitCell(int row, int col, int numRows, int numCols); + int rows() const; + int columns() const; + QTextTableCell cellAt(int row, int col) const; + QTextTableCell cellAt(int position) const; + QTextTableCell cellAt(const QTextCursor &c) const; + QTextCursor rowStart(const QTextCursor &c) const; + QTextCursor rowEnd(const QTextCursor &c) const; + QTextTableFormat format() const; + void setFormat(const QTextTableFormat &aformat); + void appendRows(int count); + void appendColumns(int count); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtouchdevice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtouchdevice.sip new file mode 100644 index 0000000..0444a7a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtouchdevice.sip @@ -0,0 +1,67 @@ +// qtouchdevice.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTouchDevice +{ +%TypeHeaderCode +#include +%End + +public: + enum DeviceType + { + TouchScreen, + TouchPad, + }; + + enum CapabilityFlag + { + Position, + Area, + Pressure, + Velocity, + RawPositions, + NormalizedPosition, +%If (Qt_5_5_0 -) + MouseEmulation, +%End + }; + + typedef QFlags Capabilities; + QTouchDevice(); + ~QTouchDevice(); + static QList devices(); + QString name() const; + QTouchDevice::DeviceType type() const; + QTouchDevice::Capabilities capabilities() const; + void setName(const QString &name); + void setType(QTouchDevice::DeviceType devType); + void setCapabilities(QTouchDevice::Capabilities caps); +%If (Qt_5_2_0 -) + int maximumTouchPoints() const; +%End +%If (Qt_5_2_0 -) + void setMaximumTouchPoints(int max); +%End +}; + +QFlags operator|(QTouchDevice::CapabilityFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtransform.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtransform.sip new file mode 100644 index 0000000..3df500f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qtransform.sip @@ -0,0 +1,132 @@ +// qtransform.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QTransform +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"ddddddddd", sipCpp->m11(), sipCpp->m12(), sipCpp->m13(), sipCpp->m21(), sipCpp->m22(), sipCpp->m23(), sipCpp->m31(), sipCpp->m32(), sipCpp->m33()); +%End + +public: + enum TransformationType + { + TxNone, + TxTranslate, + TxScale, + TxRotate, + TxShear, + TxProject, + }; + + QTransform(); + QTransform(qreal m11, qreal m12, qreal m13, qreal m21, qreal m22, qreal m23, qreal m31, qreal m32, qreal m33 = 1.0e+0); + QTransform(qreal h11, qreal h12, qreal h13, qreal h21, qreal h22, qreal h23); +%If (Qt_5_7_0 -) + QTransform(const QTransform &other); +%End + QTransform::TransformationType type() const; + void setMatrix(qreal m11, qreal m12, qreal m13, qreal m21, qreal m22, qreal m23, qreal m31, qreal m32, qreal m33); + QTransform inverted(bool *invertible = 0) const; + QTransform adjoint() const; + QTransform transposed() const; + QTransform &translate(qreal dx, qreal dy); + QTransform &scale(qreal sx, qreal sy); + QTransform &shear(qreal sh, qreal sv); + QTransform &rotate(qreal angle, Qt::Axis axis = Qt::ZAxis); + QTransform &rotateRadians(qreal angle, Qt::Axis axis = Qt::ZAxis); + static bool squareToQuad(const QPolygonF &square, QTransform &result); + static bool quadToSquare(const QPolygonF &quad, QTransform &result); + static bool quadToQuad(const QPolygonF &one, const QPolygonF &two, QTransform &result); + bool operator==(const QTransform &) const; + bool operator!=(const QTransform &) const; + QTransform &operator*=(const QTransform &) /__imatmul__/; + QTransform operator*(const QTransform &o) const /__matmul__/; + void reset(); + void map(int x /Constrained/, int y /Constrained/, int *tx, int *ty) const; + void map(qreal x, qreal y, qreal *tx, qreal *ty) const; + QPoint map(const QPoint &p) const; + QPointF map(const QPointF &p) const; + QLine map(const QLine &l) const; + QLineF map(const QLineF &l) const; + QPolygonF map(const QPolygonF &a) const; + QPolygon map(const QPolygon &a) const; + QRegion map(const QRegion &r) const; + QPainterPath map(const QPainterPath &p) const; + QPolygon mapToPolygon(const QRect &r) const; + QRect mapRect(const QRect &) const; + QRectF mapRect(const QRectF &) const; + bool isAffine() const; + bool isIdentity() const; + bool isInvertible() const; + bool isScaling() const; + bool isRotating() const; + bool isTranslating() const; + qreal determinant() const; + qreal m11() const; + qreal m12() const; + qreal m13() const; + qreal m21() const; + qreal m22() const; + qreal m23() const; + qreal m31() const; + qreal m32() const; + qreal m33() const; + qreal dx() const; + qreal dy() const; + static QTransform fromTranslate(qreal dx, qreal dy); + static QTransform fromScale(qreal dx, qreal dy); + QTransform &operator*=(qreal num); + QTransform &operator/=(qreal div); + QTransform &operator+=(qreal num); + QTransform &operator-=(qreal num); +%If (Qt_5_6_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; + +QDataStream &operator<<(QDataStream &, const QTransform & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QTransform & /Constrained/) /ReleaseGIL/; +QPoint operator*(const QPoint &p, const QTransform &m); +QPointF operator*(const QPointF &p, const QTransform &m); +QLineF operator*(const QLineF &l, const QTransform &m); +QLine operator*(const QLine &l, const QTransform &m); +QPolygon operator*(const QPolygon &a, const QTransform &m); +QPolygonF operator*(const QPolygonF &a, const QTransform &m); +QRegion operator*(const QRegion &r, const QTransform &m); +QPainterPath operator*(const QPainterPath &p, const QTransform &m); +QTransform operator*(const QTransform &a, qreal n); +QTransform operator/(const QTransform &a, qreal n); +QTransform operator+(const QTransform &a, qreal n); +QTransform operator-(const QTransform &a, qreal n); +bool qFuzzyCompare(const QTransform &t1, const QTransform &t2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvalidator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvalidator.sip new file mode 100644 index 0000000..788a34f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvalidator.sip @@ -0,0 +1,129 @@ +// qvalidator.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QValidator : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QValidator(QObject *parent /TransferThis/ = 0); + virtual ~QValidator(); + + enum State + { + Invalid, + Intermediate, + Acceptable, + }; + + virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const = 0; + virtual void fixup(QString & /In,Out/) const; + void setLocale(const QLocale &locale); + QLocale locale() const; + +signals: + void changed(); +}; + +class QIntValidator : public QValidator +{ +%TypeHeaderCode +#include +%End + +public: + explicit QIntValidator(QObject *parent /TransferThis/ = 0); + QIntValidator(int bottom, int top, QObject *parent /TransferThis/ = 0); + virtual ~QIntValidator(); + virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const; + virtual void fixup(QString &input /In,Out/) const; + void setBottom(int); + void setTop(int); + virtual void setRange(int bottom, int top); + int bottom() const; + int top() const; +}; + +class QDoubleValidator : public QValidator +{ +%TypeHeaderCode +#include +%End + +public: + explicit QDoubleValidator(QObject *parent /TransferThis/ = 0); + QDoubleValidator(double bottom, double top, int decimals, QObject *parent /TransferThis/ = 0); + virtual ~QDoubleValidator(); + virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const; + virtual void setRange(double minimum, double maximum, int decimals = 0); + void setBottom(double); + void setTop(double); + void setDecimals(int); + double bottom() const; + double top() const; + int decimals() const; + + enum Notation + { + StandardNotation, + ScientificNotation, + }; + + void setNotation(QDoubleValidator::Notation); + QDoubleValidator::Notation notation() const; +}; + +class QRegExpValidator : public QValidator +{ +%TypeHeaderCode +#include +%End + +public: + explicit QRegExpValidator(QObject *parent /TransferThis/ = 0); + QRegExpValidator(const QRegExp &rx, QObject *parent /TransferThis/ = 0); + virtual ~QRegExpValidator(); + virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; + void setRegExp(const QRegExp &rx); + const QRegExp ®Exp() const; +}; + +%If (Qt_5_1_0 -) + +class QRegularExpressionValidator : public QValidator +{ +%TypeHeaderCode +#include +%End + +public: + explicit QRegularExpressionValidator(QObject *parent /TransferThis/ = 0); + QRegularExpressionValidator(const QRegularExpression &re, QObject *parent /TransferThis/ = 0); + virtual ~QRegularExpressionValidator(); + virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; + QRegularExpression regularExpression() const; + void setRegularExpression(const QRegularExpression &re); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector2d.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector2d.sip new file mode 100644 index 0000000..a83b13e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector2d.sip @@ -0,0 +1,113 @@ +// qvector2d.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QVector2D +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"dd", (double)sipCpp->x(), (double)sipCpp->y()); +%End + +public: + QVector2D(); + QVector2D(float xpos, float ypos); + explicit QVector2D(const QPoint &point); + explicit QVector2D(const QPointF &point); + explicit QVector2D(const QVector3D &vector); + explicit QVector2D(const QVector4D &vector); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + PyObject *x = PyFloat_FromDouble(sipCpp->x()); + PyObject *y = PyFloat_FromDouble(sipCpp->y()); + + if (x && y) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QVector2D(%R, %R)", x, y); + #else + sipRes = PyString_FromString("PyQt5.QtGui.QVector2D("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(x)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(y)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + Py_XDECREF(x); + Py_XDECREF(y); +%End + + float length() const; + float lengthSquared() const; + QVector2D normalized() const; + void normalize(); + static float dotProduct(const QVector2D &v1, const QVector2D &v2); + QVector3D toVector3D() const; + QVector4D toVector4D() const; + bool isNull() const; + float x() const; + float y() const; + void setX(float aX); + void setY(float aY); + QVector2D &operator+=(const QVector2D &vector); + QVector2D &operator-=(const QVector2D &vector); + QVector2D &operator*=(float factor); + QVector2D &operator*=(const QVector2D &vector); + QVector2D &operator/=(float divisor); +%If (Qt_5_5_0 -) + QVector2D &operator/=(const QVector2D &vector); +%End + QPoint toPoint() const; + QPointF toPointF() const; +%If (Qt_5_1_0 -) + float distanceToPoint(const QVector2D &point) const; +%End +%If (Qt_5_1_0 -) + float distanceToLine(const QVector2D &point, const QVector2D &direction) const; +%End +%If (Qt_5_2_0 -) + float operator[](int i) const; +%End +}; + +bool operator==(const QVector2D &v1, const QVector2D &v2); +bool operator!=(const QVector2D &v1, const QVector2D &v2); +const QVector2D operator+(const QVector2D &v1, const QVector2D &v2); +const QVector2D operator-(const QVector2D &v1, const QVector2D &v2); +const QVector2D operator*(float factor, const QVector2D &vector); +const QVector2D operator*(const QVector2D &vector, float factor); +const QVector2D operator*(const QVector2D &v1, const QVector2D &v2); +const QVector2D operator-(const QVector2D &vector); +const QVector2D operator/(const QVector2D &vector, float divisor); +%If (Qt_5_5_0 -) +const QVector2D operator/(const QVector2D &vector, const QVector2D &divisor); +%End +bool qFuzzyCompare(const QVector2D &v1, const QVector2D &v2); +QDataStream &operator<<(QDataStream &, const QVector2D & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QVector2D & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector3d.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector3d.sip new file mode 100644 index 0000000..79344da --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector3d.sip @@ -0,0 +1,131 @@ +// qvector3d.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QVector3D +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"ddd", (double)sipCpp->x(), (double)sipCpp->y(), + (double)sipCpp->z()); +%End + +public: + QVector3D(); + QVector3D(float xpos, float ypos, float zpos); + explicit QVector3D(const QPoint &point); + explicit QVector3D(const QPointF &point); + QVector3D(const QVector2D &vector); + QVector3D(const QVector2D &vector, float zpos); + explicit QVector3D(const QVector4D &vector); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + PyObject *x = PyFloat_FromDouble(sipCpp->x()); + PyObject *y = PyFloat_FromDouble(sipCpp->y()); + PyObject *z = PyFloat_FromDouble(sipCpp->z()); + + if (x && y && z) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QVector3D(%R, %R, %R)", x, y, + z); + #else + sipRes = PyString_FromString("PyQt5.QtGui.QVector3D("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(x)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(y)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(z)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + Py_XDECREF(x); + Py_XDECREF(y); + Py_XDECREF(z); +%End + + float length() const; + float lengthSquared() const; + QVector3D normalized() const; + void normalize(); + static float dotProduct(const QVector3D &v1, const QVector3D &v2); + static QVector3D crossProduct(const QVector3D &v1, const QVector3D &v2); + static QVector3D normal(const QVector3D &v1, const QVector3D &v2); + static QVector3D normal(const QVector3D &v1, const QVector3D &v2, const QVector3D &v3); + float distanceToPlane(const QVector3D &plane, const QVector3D &normal) const; + float distanceToPlane(const QVector3D &plane1, const QVector3D &plane2, const QVector3D &plane3) const; + float distanceToLine(const QVector3D &point, const QVector3D &direction) const; + QVector2D toVector2D() const; + QVector4D toVector4D() const; + bool isNull() const; + float x() const; + float y() const; + float z() const; + void setX(float aX); + void setY(float aY); + void setZ(float aZ); + QVector3D &operator+=(const QVector3D &vector); + QVector3D &operator-=(const QVector3D &vector); + QVector3D &operator*=(float factor); + QVector3D &operator*=(const QVector3D &vector); + QVector3D &operator/=(float divisor); +%If (Qt_5_5_0 -) + QVector3D &operator/=(const QVector3D &vector); +%End + QPoint toPoint() const; + QPointF toPointF() const; +%If (Qt_5_1_0 -) + float distanceToPoint(const QVector3D &point) const; +%End +%If (Qt_5_2_0 -) + float operator[](int i) const; +%End +%If (Qt_5_5_0 -) + QVector3D project(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) const; +%End +%If (Qt_5_5_0 -) + QVector3D unproject(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) const; +%End +}; + +bool operator==(const QVector3D &v1, const QVector3D &v2); +bool operator!=(const QVector3D &v1, const QVector3D &v2); +const QVector3D operator+(const QVector3D &v1, const QVector3D &v2); +const QVector3D operator-(const QVector3D &v1, const QVector3D &v2); +const QVector3D operator*(float factor, const QVector3D &vector); +const QVector3D operator*(const QVector3D &vector, float factor); +const QVector3D operator*(const QVector3D &v1, const QVector3D &v2); +const QVector3D operator-(const QVector3D &vector); +const QVector3D operator/(const QVector3D &vector, float divisor); +%If (Qt_5_5_0 -) +const QVector3D operator/(const QVector3D &vector, const QVector3D &divisor); +%End +bool qFuzzyCompare(const QVector3D &v1, const QVector3D &v2); +QDataStream &operator<<(QDataStream &, const QVector3D & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QVector3D & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector4d.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector4d.sip new file mode 100644 index 0000000..6d3e38f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qvector4d.sip @@ -0,0 +1,125 @@ +// qvector4d.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QVector4D +{ +%TypeHeaderCode +#include +%End + +%PickleCode + sipRes = Py_BuildValue((char *)"dddd", (double)sipCpp->x(), + (double)sipCpp->y(), (double)sipCpp->z(), (double)sipCpp->w()); +%End + +public: + QVector4D(); + QVector4D(float xpos, float ypos, float zpos, float wpos); + explicit QVector4D(const QPoint &point); + explicit QVector4D(const QPointF &point); + QVector4D(const QVector2D &vector); + QVector4D(const QVector2D &vector, float zpos, float wpos); + QVector4D(const QVector3D &vector); + QVector4D(const QVector3D &vector, float wpos); + SIP_PYOBJECT __repr__() const /TypeHint="str"/; +%MethodCode + PyObject *x = PyFloat_FromDouble(sipCpp->x()); + PyObject *y = PyFloat_FromDouble(sipCpp->y()); + PyObject *z = PyFloat_FromDouble(sipCpp->z()); + PyObject *w = PyFloat_FromDouble(sipCpp->w()); + + if (x && y && z && w) + { + #if PY_MAJOR_VERSION >= 3 + sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QVector4D(%R, %R, %R, %R)", x, + y, z, w); + #else + sipRes = PyString_FromString("PyQt5.QtGui.QVector4D("); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(x)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(y)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(z)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); + PyString_ConcatAndDel(&sipRes, PyObject_Repr(w)); + PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); + #endif + } + + Py_XDECREF(x); + Py_XDECREF(y); + Py_XDECREF(z); + Py_XDECREF(w); +%End + + float length() const; + float lengthSquared() const; + QVector4D normalized() const; + void normalize(); + static float dotProduct(const QVector4D &v1, const QVector4D &v2); + QVector2D toVector2D() const; + QVector2D toVector2DAffine() const; + QVector3D toVector3D() const; + QVector3D toVector3DAffine() const; + bool isNull() const; + float x() const; + float y() const; + float z() const; + float w() const; + void setX(float aX); + void setY(float aY); + void setZ(float aZ); + void setW(float aW); + QVector4D &operator+=(const QVector4D &vector); + QVector4D &operator-=(const QVector4D &vector); + QVector4D &operator*=(float factor); + QVector4D &operator*=(const QVector4D &vector); + QVector4D &operator/=(float divisor); +%If (Qt_5_5_0 -) + QVector4D &operator/=(const QVector4D &vector); +%End + QPoint toPoint() const; + QPointF toPointF() const; +%If (Qt_5_2_0 -) + float operator[](int i) const; +%End +}; + +bool operator==(const QVector4D &v1, const QVector4D &v2); +bool operator!=(const QVector4D &v1, const QVector4D &v2); +const QVector4D operator+(const QVector4D &v1, const QVector4D &v2); +const QVector4D operator-(const QVector4D &v1, const QVector4D &v2); +const QVector4D operator*(float factor, const QVector4D &vector); +const QVector4D operator*(const QVector4D &vector, float factor); +const QVector4D operator*(const QVector4D &v1, const QVector4D &v2); +const QVector4D operator-(const QVector4D &vector); +const QVector4D operator/(const QVector4D &vector, float divisor); +%If (Qt_5_5_0 -) +const QVector4D operator/(const QVector4D &vector, const QVector4D &divisor); +%End +bool qFuzzyCompare(const QVector4D &v1, const QVector4D &v2); +QDataStream &operator<<(QDataStream &, const QVector4D & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QVector4D & /Constrained/) /ReleaseGIL/; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qwindow.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qwindow.sip new file mode 100644 index 0000000..009d3b1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qwindow.sip @@ -0,0 +1,249 @@ +// qwindow.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QWindow : public QObject, public QSurface +{ +%TypeHeaderCode +#include +%End + +public: + explicit QWindow(QScreen *screen = 0); + explicit QWindow(QWindow *parent /TransferThis/); + virtual ~QWindow(); + void setSurfaceType(QSurface::SurfaceType surfaceType); + virtual QSurface::SurfaceType surfaceType() const; + bool isVisible() const; + void create(); + WId winId() const; + QWindow *parent() const; + void setParent(QWindow *parent /Transfer/); + bool isTopLevel() const; + bool isModal() const; + Qt::WindowModality modality() const; + void setModality(Qt::WindowModality modality); + void setFormat(const QSurfaceFormat &format); + virtual QSurfaceFormat format() const; + QSurfaceFormat requestedFormat() const; + void setFlags(Qt::WindowFlags flags); + Qt::WindowFlags flags() const; + Qt::WindowType type() const; + QString title() const; + void setOpacity(qreal level); + +public slots: + void requestActivate(); + +public: + bool isActive() const; + void reportContentOrientationChange(Qt::ScreenOrientation orientation); + Qt::ScreenOrientation contentOrientation() const; + qreal devicePixelRatio() const; + Qt::WindowState windowState() const; + void setWindowState(Qt::WindowState state); + void setTransientParent(QWindow *parent); + QWindow *transientParent() const; + + enum AncestorMode + { + ExcludeTransients, + IncludeTransients, + }; + + bool isAncestorOf(const QWindow *child, QWindow::AncestorMode mode = QWindow::IncludeTransients) const; + bool isExposed() const; + int minimumWidth() const; + int minimumHeight() const; + int maximumWidth() const; + int maximumHeight() const; + QSize minimumSize() const; + QSize maximumSize() const; + QSize baseSize() const; + QSize sizeIncrement() const; + void setMinimumSize(const QSize &size); + void setMaximumSize(const QSize &size); + void setBaseSize(const QSize &size); + void setSizeIncrement(const QSize &size); + void setGeometry(int posx, int posy, int w, int h); + void setGeometry(const QRect &rect); + QRect geometry() const; + QMargins frameMargins() const; + QRect frameGeometry() const; + QPoint framePosition() const; + void setFramePosition(const QPoint &point); + int width() const; + int height() const; + int x() const; + int y() const; + virtual QSize size() const; + QPoint position() const; + void setPosition(const QPoint &pt); + void setPosition(int posx, int posy); + void resize(const QSize &newSize); + void resize(int w, int h); + void setFilePath(const QString &filePath); + QString filePath() const; + void setIcon(const QIcon &icon); + QIcon icon() const; + void destroy(); + bool setKeyboardGrabEnabled(bool grab); + bool setMouseGrabEnabled(bool grab); + QScreen *screen() const; + void setScreen(QScreen *screen); + virtual QObject *focusObject() const; + QPoint mapToGlobal(const QPoint &pos) const; + QPoint mapFromGlobal(const QPoint &pos) const; + QCursor cursor() const; + void setCursor(const QCursor &); + void unsetCursor(); + +public slots: + void setVisible(bool visible); + void show() /ReleaseGIL/; + void hide(); + void showMinimized() /ReleaseGIL/; + void showMaximized() /ReleaseGIL/; + void showFullScreen() /ReleaseGIL/; + void showNormal() /ReleaseGIL/; + bool close(); + void raise() /PyName=raise_/; + void lower(); + void setTitle(const QString &); + void setX(int arg); + void setY(int arg); + void setWidth(int arg); + void setHeight(int arg); + void setMinimumWidth(int w); + void setMinimumHeight(int h); + void setMaximumWidth(int w); + void setMaximumHeight(int h); +%If (Qt_5_1_0 -) + void alert(int msec); +%End +%If (Qt_5_5_0 -) + void requestUpdate(); +%End + +signals: + void screenChanged(QScreen *screen); + void modalityChanged(Qt::WindowModality modality); + void windowStateChanged(Qt::WindowState windowState); + void xChanged(int arg); + void yChanged(int arg); + void widthChanged(int arg); + void heightChanged(int arg); + void minimumWidthChanged(int arg); + void minimumHeightChanged(int arg); + void maximumWidthChanged(int arg); + void maximumHeightChanged(int arg); + void visibleChanged(bool arg); + void contentOrientationChanged(Qt::ScreenOrientation orientation); + void focusObjectChanged(QObject *object); +%If (Qt_5_3_0 -) + void windowTitleChanged(const QString &title); +%End + +protected: + virtual void exposeEvent(QExposeEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void moveEvent(QMoveEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual void showEvent(QShowEvent *); + virtual void hideEvent(QHideEvent *); + virtual bool event(QEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void keyReleaseEvent(QKeyEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void wheelEvent(QWheelEvent *); + virtual void touchEvent(QTouchEvent *); + virtual void tabletEvent(QTabletEvent *); + +public: +%If (Qt_5_1_0 -) + + enum Visibility + { + Hidden, + AutomaticVisibility, + Windowed, + Minimized, + Maximized, + FullScreen, + }; + +%End +%If (Qt_5_1_0 -) + QWindow::Visibility visibility() const; +%End +%If (Qt_5_1_0 -) + void setVisibility(QWindow::Visibility v); +%End +%If (Qt_5_1_0 -) + qreal opacity() const; +%End +%If (Qt_5_1_0 -) + void setMask(const QRegion ®ion); +%End +%If (Qt_5_1_0 -) + QRegion mask() const; +%End +%If (Qt_5_1_0 -) + static QWindow *fromWinId(WId id); +%End + +signals: +%If (Qt_5_1_0 -) + void visibilityChanged(QWindow::Visibility visibility); +%End +%If (Qt_5_1_0 -) + void activeChanged(); +%End +%If (Qt_5_1_0 -) + void opacityChanged(qreal opacity); +%End + +public: +%If (Qt_5_9_0 -) + QWindow *parent(QWindow::AncestorMode mode) const; +%End +%If (Qt_5_9_0 -) + void setFlag(Qt::WindowType, bool on = true); +%End +%If (Qt_5_10_0 -) + Qt::WindowStates windowStates() const; +%End +%If (Qt_5_10_0 -) + void setWindowStates(Qt::WindowStates states); +%End + +public slots: +%If (Qt_5_15_0 -) + bool startSystemResize(Qt::Edges edges); +%End +%If (Qt_5_15_0 -) + bool startSystemMove(); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qwindowdefs.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qwindowdefs.sip new file mode 100644 index 0000000..b1c68bd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtGui/qwindowdefs.sip @@ -0,0 +1,24 @@ +// qwindowdefs.sip generated by MetaSIP +// +// This file is part of the QtGui Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +typedef QList QWindowList; +typedef quintptr WId; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/QtHelp.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/QtHelp.toml new file mode 100644 index 0000000..8115087 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/QtHelp.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtHelp. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/QtHelpmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/QtHelpmod.sip new file mode 100644 index 0000000..470b88d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/QtHelpmod.sip @@ -0,0 +1,61 @@ +// QtHelpmod.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtHelp, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qcompressedhelpinfo.sip +%Include qhelpcontentwidget.sip +%Include qhelpengine.sip +%Include qhelpenginecore.sip +%Include qhelpfilterdata.sip +%Include qhelpfilterengine.sip +%Include qhelpfiltersettingswidget.sip +%Include qhelpindexwidget.sip +%Include qhelplink.sip +%Include qhelpsearchengine.sip +%Include qhelpsearchquerywidget.sip +%Include qhelpsearchresultwidget.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qcompressedhelpinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qcompressedhelpinfo.sip new file mode 100644 index 0000000..8603d1e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qcompressedhelpinfo.sip @@ -0,0 +1,45 @@ +// qcompressedhelpinfo.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_13_0 -) + +class QCompressedHelpInfo +{ +%TypeHeaderCode +#include +%End + +public: + QCompressedHelpInfo(); + QCompressedHelpInfo(const QCompressedHelpInfo &other); + ~QCompressedHelpInfo(); + void swap(QCompressedHelpInfo &other); + QString namespaceName() const; + QString component() const; + QVersionNumber version() const; + static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName); +%If (Qt_5_15_0 -) + bool isNull() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpcontentwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpcontentwidget.sip new file mode 100644 index 0000000..44cc802 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpcontentwidget.sip @@ -0,0 +1,76 @@ +// qhelpcontentwidget.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHelpContentItem /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + ~QHelpContentItem(); + QHelpContentItem *child(int row) const; + int childCount() const; + QString title() const; + QUrl url() const; + int row() const; + QHelpContentItem *parent() const; + int childPosition(QHelpContentItem *child) const; +}; + +class QHelpContentModel : public QAbstractItemModel /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QHelpContentModel(); + void createContents(const QString &customFilterName); + QHelpContentItem *contentItemAt(const QModelIndex &index) const; + virtual QVariant data(const QModelIndex &index, int role) const; + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex parent(const QModelIndex &index) const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + bool isCreatingContents() const; + +signals: + void contentsCreationStarted(); + void contentsCreated(); +}; + +class QHelpContentWidget : public QTreeView +{ +%TypeHeaderCode +#include +%End + +public: + QModelIndex indexOf(const QUrl &link); + +signals: + void linkActivated(const QUrl &link); + +private: + QHelpContentWidget(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpengine.sip new file mode 100644 index 0000000..e2e54b9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpengine.sip @@ -0,0 +1,37 @@ +// qhelpengine.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHelpEngine : public QHelpEngineCore +{ +%TypeHeaderCode +#include +%End + +public: + QHelpEngine(const QString &collectionFile, QObject *parent /TransferThis/ = 0); + virtual ~QHelpEngine(); + QHelpContentModel *contentModel() const; + QHelpIndexModel *indexModel() const; + QHelpContentWidget *contentWidget(); + QHelpIndexWidget *indexWidget(); + QHelpSearchEngine *searchEngine(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpenginecore.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpenginecore.sip new file mode 100644 index 0000000..0a2754c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpenginecore.sip @@ -0,0 +1,144 @@ +// qhelpenginecore.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHelpEngineCore : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QHelpContentModel, &sipType_QHelpContentModel, -1, 1}, + {sipName_QHelpContentWidget, &sipType_QHelpContentWidget, -1, 2}, + {sipName_QHelpEngineCore, &sipType_QHelpEngineCore, 10, 3}, + #if QT_VERSION >= 0x050d00 + {sipName_QHelpFilterEngine, &sipType_QHelpFilterEngine, -1, 4}, + #else + {0, 0, -1, 4}, + #endif + #if QT_VERSION >= 0x050f00 + {sipName_QHelpFilterSettingsWidget, &sipType_QHelpFilterSettingsWidget, -1, 5}, + #else + {0, 0, -1, 5}, + #endif + {sipName_QHelpIndexModel, &sipType_QHelpIndexModel, -1, 6}, + {sipName_QHelpIndexWidget, &sipType_QHelpIndexWidget, -1, 7}, + {sipName_QHelpSearchEngine, &sipType_QHelpSearchEngine, -1, 8}, + {sipName_QHelpSearchQueryWidget, &sipType_QHelpSearchQueryWidget, -1, 9}, + {sipName_QHelpSearchResultWidget, &sipType_QHelpSearchResultWidget, -1, -1}, + {sipName_QHelpEngine, &sipType_QHelpEngine, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + QHelpEngineCore(const QString &collectionFile, QObject *parent /TransferThis/ = 0); + virtual ~QHelpEngineCore(); + bool setupData(); + QString collectionFile() const; + void setCollectionFile(const QString &fileName); + bool copyCollectionFile(const QString &fileName); + static QString namespaceName(const QString &documentationFileName); + bool registerDocumentation(const QString &documentationFileName); + bool unregisterDocumentation(const QString &namespaceName); + QString documentationFileName(const QString &namespaceName); + QStringList customFilters() const; + bool removeCustomFilter(const QString &filterName); + bool addCustomFilter(const QString &filterName, const QStringList &attributes); + QStringList filterAttributes() const; + QStringList filterAttributes(const QString &filterName) const; + QString currentFilter() const; + void setCurrentFilter(const QString &filterName); + QStringList registeredDocumentations() const; + QList filterAttributeSets(const QString &namespaceName) const; + QList files(const QString namespaceName, const QStringList &filterAttributes, const QString &extensionFilter = QString()); + QUrl findFile(const QUrl &url) const; + QByteArray fileData(const QUrl &url) const; + QMap linksForIdentifier(const QString &id) const; +%If (Qt_5_9_0 -) + QMap linksForKeyword(const QString &keyword) const; +%End + bool removeCustomValue(const QString &key); + QVariant customValue(const QString &key, const QVariant &defaultValue = QVariant()) const; + bool setCustomValue(const QString &key, const QVariant &value); + static QVariant metaData(const QString &documentationFileName, const QString &name); + QString error() const; + bool autoSaveFilter() const; + void setAutoSaveFilter(bool save); + +signals: + void setupStarted(); + void setupFinished(); + void currentFilterChanged(const QString &newFilter); + void warning(const QString &msg); +%If (Qt_5_4_0 -) + void readersAboutToBeInvalidated(); +%End + +public: +%If (Qt_5_13_0 -) + QHelpFilterEngine *filterEngine() const; +%End +%If (Qt_5_13_0 -) + QList files(const QString namespaceName, const QString &filterName, const QString &extensionFilter = QString()); +%End +%If (Qt_5_13_0 -) + void setUsesFilterEngine(bool uses); +%End +%If (Qt_5_13_0 -) + bool usesFilterEngine() const; +%End +%If (Qt_5_15_0 -) + QList documentsForIdentifier(const QString &id) const; +%End +%If (Qt_5_15_0 -) + QList documentsForIdentifier(const QString &id, const QString &filterName) const; +%End +%If (Qt_5_15_0 -) + QList documentsForKeyword(const QString &keyword) const; +%End +%If (Qt_5_15_0 -) + QList documentsForKeyword(const QString &keyword, const QString &filterName) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfilterdata.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfilterdata.sip new file mode 100644 index 0000000..f096bea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfilterdata.sip @@ -0,0 +1,43 @@ +// qhelpfilterdata.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_13_0 -) + +class QHelpFilterData +{ +%TypeHeaderCode +#include +%End + +public: + QHelpFilterData(); + QHelpFilterData(const QHelpFilterData &other); + ~QHelpFilterData(); + bool operator==(const QHelpFilterData &other) const; + void swap(QHelpFilterData &other); + void setComponents(const QStringList &components); + void setVersions(const QList &versions); + QStringList components() const; + QList versions() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfilterengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfilterengine.sip new file mode 100644 index 0000000..4821cfb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfilterengine.sip @@ -0,0 +1,61 @@ +// qhelpfilterengine.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_13_0 -) + +class QHelpFilterEngine : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + QMap namespaceToComponent() const; + QMap namespaceToVersion() const; + QStringList filters() const; + QString activeFilter() const; + bool setActiveFilter(const QString &filterName); + QStringList availableComponents() const; + QHelpFilterData filterData(const QString &filterName) const; + bool setFilterData(const QString &filterName, const QHelpFilterData &filterData); + bool removeFilter(const QString &filterName); + QStringList namespacesForFilter(const QString &filterName) const; + +signals: + void filterActivated(const QString &newFilter); + +protected: + virtual ~QHelpFilterEngine(); + +public: +%If (Qt_5_15_0 -) + QList availableVersions() const; +%End +%If (Qt_5_15_0 -) + QStringList indices() const; +%End +%If (Qt_5_15_0 -) + QStringList indices(const QString &filterName) const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfiltersettingswidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfiltersettingswidget.sip new file mode 100644 index 0000000..2834a78 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpfiltersettingswidget.sip @@ -0,0 +1,40 @@ +// qhelpfiltersettingswidget.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_15_0 -) + +class QHelpFilterSettingsWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QHelpFilterSettingsWidget(QWidget *parent /TransferThis/ = 0); + virtual ~QHelpFilterSettingsWidget(); + void setAvailableComponents(const QStringList &components); + void setAvailableVersions(const QList &versions); + void readSettings(const QHelpFilterEngine *filterEngine); + bool applySettings(QHelpFilterEngine *filterEngine) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpindexwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpindexwidget.sip new file mode 100644 index 0000000..6ca0bf4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpindexwidget.sip @@ -0,0 +1,70 @@ +// qhelpindexwidget.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHelpIndexModel : public QStringListModel /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_15_0 -) + QHelpEngineCore *helpEngine() const; +%End + void createIndex(const QString &customFilterName); + QModelIndex filter(const QString &filter, const QString &wildcard = QString()); + QMap linksForKeyword(const QString &keyword) const; + bool isCreatingIndex() const; + +signals: + void indexCreationStarted(); + void indexCreated(); + +private: + virtual ~QHelpIndexModel(); +}; + +class QHelpIndexWidget : public QListView +{ +%TypeHeaderCode +#include +%End + +signals: + void linkActivated(const QUrl &link, const QString &keyword); + void linksActivated(const QMap &links, const QString &keyword); + +public slots: + void filterIndices(const QString &filter, const QString &wildcard = QString()); + void activateCurrentItem(); + +signals: +%If (Qt_5_15_0 -) + void documentActivated(const QHelpLink &document, const QString &keyword); +%End +%If (Qt_5_15_0 -) + void documentsActivated(const QList &documents, const QString &keyword); +%End + +private: + QHelpIndexWidget(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelplink.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelplink.sip new file mode 100644 index 0000000..73a388e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelplink.sip @@ -0,0 +1,35 @@ +// qhelplink.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_15_0 -) + +struct QHelpLink +{ +%TypeHeaderCode +#include +%End + + QUrl url; + QString title; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchengine.sip new file mode 100644 index 0000000..4815318 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchengine.sip @@ -0,0 +1,106 @@ +// qhelpsearchengine.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHelpSearchQuery +{ +%TypeHeaderCode +#include +%End + +public: + enum FieldName + { + DEFAULT, + FUZZY, + WITHOUT, + PHRASE, + ALL, + ATLEAST, + }; + + QHelpSearchQuery(); + QHelpSearchQuery(QHelpSearchQuery::FieldName field, const QStringList &wordList); +}; + +class QHelpSearchEngine : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QHelpSearchEngine(QHelpEngineCore *helpEngine, QObject *parent /TransferThis/ = 0); + virtual ~QHelpSearchEngine(); + QList query() const; + QHelpSearchQueryWidget *queryWidget(); + QHelpSearchResultWidget *resultWidget(); + int hitCount() const; + QList> hits(int start, int end) const; + +public slots: + void reindexDocumentation(); + void cancelIndexing(); + void search(const QList &queryList); + void cancelSearching(); + +signals: + void indexingStarted(); + void indexingFinished(); + void searchingStarted(); + void searchingFinished(int hits); + +public: +%If (Qt_5_9_0 -) + int searchResultCount() const; +%End +%If (Qt_5_9_0 -) + QVector searchResults(int start, int end) const; +%End +%If (Qt_5_9_0 -) + QString searchInput() const; +%End + +public slots: +%If (Qt_5_9_0 -) + void search(const QString &searchInput); +%End +}; + +%If (Qt_5_9_0 -) + +class QHelpSearchResult +{ +%TypeHeaderCode +#include +%End + +public: + QHelpSearchResult(); + QHelpSearchResult(const QHelpSearchResult &other); + QHelpSearchResult(const QUrl &url, const QString &title, const QString &snippet); + ~QHelpSearchResult(); + QString title() const; + QUrl url() const; + QString snippet() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchquerywidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchquerywidget.sip new file mode 100644 index 0000000..dc06390 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchquerywidget.sip @@ -0,0 +1,62 @@ +// qhelpsearchquerywidget.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHelpSearchQueryWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_1 -) + explicit QHelpSearchQueryWidget(QWidget *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QHelpSearchQueryWidget(QWidget *parent /TransferThis/ = 0); +%End + virtual ~QHelpSearchQueryWidget(); + QList query() const; + void setQuery(const QList &queryList); + void expandExtendedSearch(); + void collapseExtendedSearch(); + +signals: + void search(); + +private: + virtual void focusInEvent(QFocusEvent *focusEvent); + virtual void changeEvent(QEvent *event); + +public: +%If (Qt_5_3_0 -) + bool isCompactMode() const; +%End +%If (Qt_5_3_0 -) + void setCompactMode(bool on); +%End +%If (Qt_5_9_0 -) + QString searchInput() const; +%End +%If (Qt_5_9_0 -) + void setSearchInput(const QString &searchInput); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchresultwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchresultwidget.sip new file mode 100644 index 0000000..2c7fcd9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtHelp/qhelpsearchresultwidget.sip @@ -0,0 +1,35 @@ +// qhelpsearchresultwidget.sip generated by MetaSIP +// +// This file is part of the QtHelp Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHelpSearchResultWidget : public QWidget /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QHelpSearchResultWidget(); + QUrl linkAt(const QPoint &point); + +signals: + void requestShowLink(const QUrl &url); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/QtLocation.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/QtLocation.toml new file mode 100644 index 0000000..d0cc422 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/QtLocation.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtLocation. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/QtLocationmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/QtLocationmod.sip new file mode 100644 index 0000000..49c6cb6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/QtLocationmod.sip @@ -0,0 +1,87 @@ +// QtLocationmod.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtLocation, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtPositioning/QtPositioningmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qgeocodereply.sip +%Include qgeocodingmanager.sip +%Include qgeocodingmanagerengine.sip +%Include qgeomaneuver.sip +%Include qgeoroute.sip +%Include qgeoroutereply.sip +%Include qgeorouterequest.sip +%Include qgeoroutesegment.sip +%Include qgeoroutingmanager.sip +%Include qgeoroutingmanagerengine.sip +%Include qgeoserviceprovider.sip +%Include qlocation.sip +%Include qplace.sip +%Include qplaceattribute.sip +%Include qplacecategory.sip +%Include qplacecontactdetail.sip +%Include qplacecontent.sip +%Include qplacecontentreply.sip +%Include qplacecontentrequest.sip +%Include qplacedetailsreply.sip +%Include qplaceeditorial.sip +%Include qplaceicon.sip +%Include qplaceidreply.sip +%Include qplaceimage.sip +%Include qplacemanager.sip +%Include qplacemanagerengine.sip +%Include qplacematchreply.sip +%Include qplacematchrequest.sip +%Include qplaceproposedsearchresult.sip +%Include qplaceratings.sip +%Include qplacereply.sip +%Include qplaceresult.sip +%Include qplacereview.sip +%Include qplacesearchreply.sip +%Include qplacesearchrequest.sip +%Include qplacesearchresult.sip +%Include qplacesearchsuggestionreply.sip +%Include qplacesupplier.sip +%Include qplaceuser.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodereply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodereply.sip new file mode 100644 index 0000000..a0e9f1b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodereply.sip @@ -0,0 +1,77 @@ +// qgeocodereply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoCodeReply : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + EngineNotSetError, + CommunicationError, + ParseError, + UnsupportedOptionError, + CombinationError, + UnknownError, + }; + + QGeoCodeReply(QGeoCodeReply::Error error, const QString &errorString, QObject *parent /TransferThis/ = 0); + virtual ~QGeoCodeReply(); + bool isFinished() const; + QGeoCodeReply::Error error() const; + QString errorString() const; + QGeoShape viewport() const; + QList locations() const; + int limit() const; + int offset() const; + virtual void abort(); + +signals: +%If (Qt_5_9_0 -) + void aborted(); +%End + void finished(); + void error(QGeoCodeReply::Error error, const QString &errorString = QString()); + +protected: +%If (Qt_5_6_1 -) + explicit QGeoCodeReply(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QGeoCodeReply(QObject *parent /TransferThis/ = 0); +%End + void setError(QGeoCodeReply::Error error, const QString &errorString); + void setFinished(bool finished); + void setViewport(const QGeoShape &viewport); + void addLocation(const QGeoLocation &location); + void setLocations(const QList &locations); + void setLimit(int limit); + void setOffset(int offset); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodingmanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodingmanager.sip new file mode 100644 index 0000000..ee222ee --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodingmanager.sip @@ -0,0 +1,46 @@ +// qgeocodingmanager.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoCodingManager : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QGeoCodingManager(); + QString managerName() const; + int managerVersion() const; + QGeoCodeReply *geocode(const QGeoAddress &address, const QGeoShape &bounds = QGeoShape()) /Factory/; + QGeoCodeReply *geocode(const QString &searchString, int limit = -1, int offset = 0, const QGeoShape &bounds = QGeoShape()) /Factory/; + QGeoCodeReply *reverseGeocode(const QGeoCoordinate &coordinate, const QGeoShape &bounds = QGeoShape()) /Factory/; + void setLocale(const QLocale &locale); + QLocale locale() const; + +signals: + void finished(QGeoCodeReply *reply); + void error(QGeoCodeReply *reply, QGeoCodeReply::Error error, QString errorString = QString()); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodingmanagerengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodingmanagerengine.sip new file mode 100644 index 0000000..dd5e3ad --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeocodingmanagerengine.sip @@ -0,0 +1,47 @@ +// qgeocodingmanagerengine.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoCodingManagerEngine : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QGeoCodingManagerEngine(const QVariantMap ¶meters, QObject *parent /TransferThis/ = 0); + virtual ~QGeoCodingManagerEngine(); + QString managerName() const; + int managerVersion() const; + virtual QGeoCodeReply *geocode(const QGeoAddress &address, const QGeoShape &bounds) /Factory/; + virtual QGeoCodeReply *geocode(const QString &address, int limit, int offset, const QGeoShape &bounds) /Factory/; + virtual QGeoCodeReply *reverseGeocode(const QGeoCoordinate &coordinate, const QGeoShape &bounds) /Factory/; + void setLocale(const QLocale &locale); + QLocale locale() const; + +signals: + void finished(QGeoCodeReply *reply); + void error(QGeoCodeReply *reply, QGeoCodeReply::Error error, QString errorString = QString()); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeomaneuver.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeomaneuver.sip new file mode 100644 index 0000000..cad89b2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeomaneuver.sip @@ -0,0 +1,74 @@ +// qgeomaneuver.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoManeuver +{ +%TypeHeaderCode +#include +%End + +public: + enum InstructionDirection + { + NoDirection, + DirectionForward, + DirectionBearRight, + DirectionLightRight, + DirectionRight, + DirectionHardRight, + DirectionUTurnRight, + DirectionUTurnLeft, + DirectionHardLeft, + DirectionLeft, + DirectionLightLeft, + DirectionBearLeft, + }; + + QGeoManeuver(); + QGeoManeuver(const QGeoManeuver &other); + ~QGeoManeuver(); + bool operator==(const QGeoManeuver &other) const; + bool operator!=(const QGeoManeuver &other) const; + bool isValid() const; + void setPosition(const QGeoCoordinate &position); + QGeoCoordinate position() const; + void setInstructionText(const QString &instructionText); + QString instructionText() const; + void setDirection(QGeoManeuver::InstructionDirection direction); + QGeoManeuver::InstructionDirection direction() const; + void setTimeToNextInstruction(int secs); + int timeToNextInstruction() const; + void setDistanceToNextInstruction(qreal distance); + qreal distanceToNextInstruction() const; + void setWaypoint(const QGeoCoordinate &coordinate); + QGeoCoordinate waypoint() const; +%If (Qt_5_11_0 -) + void setExtendedAttributes(const QVariantMap &extendedAttributes); +%End +%If (Qt_5_11_0 -) + QVariantMap extendedAttributes() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroute.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroute.sip new file mode 100644 index 0000000..cc743de --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroute.sip @@ -0,0 +1,86 @@ +// qgeoroute.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoRoute +{ +%TypeHeaderCode +#include +%End + +public: + QGeoRoute(); + QGeoRoute(const QGeoRoute &other); + ~QGeoRoute(); + bool operator==(const QGeoRoute &other) const; + bool operator!=(const QGeoRoute &other) const; + void setRouteId(const QString &id); + QString routeId() const; + void setRequest(const QGeoRouteRequest &request); + QGeoRouteRequest request() const; + void setBounds(const QGeoRectangle &bounds); + QGeoRectangle bounds() const; + void setFirstRouteSegment(const QGeoRouteSegment &routeSegment); + QGeoRouteSegment firstRouteSegment() const; + void setTravelTime(int secs); + int travelTime() const; + void setDistance(qreal distance); + qreal distance() const; + void setTravelMode(QGeoRouteRequest::TravelMode mode); + QGeoRouteRequest::TravelMode travelMode() const; + void setPath(const QList &path); + QList path() const; +%If (Qt_5_12_0 -) + void setRouteLegs(const QList &legs); +%End +%If (Qt_5_12_0 -) + QList routeLegs() const; +%End +%If (Qt_5_13_0 -) + void setExtendedAttributes(const QVariantMap &extendedAttributes); +%End +%If (Qt_5_13_0 -) + QVariantMap extendedAttributes() const; +%End +}; + +%End +%If (Qt_5_12_0 -) + +class QGeoRouteLeg : public QGeoRoute +{ +%TypeHeaderCode +#include +%End + +public: + QGeoRouteLeg(); + QGeoRouteLeg(const QGeoRouteLeg &other); + ~QGeoRouteLeg(); + void setLegIndex(int idx); + int legIndex() const; + void setOverallRoute(const QGeoRoute &route); + QGeoRoute overallRoute() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutereply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutereply.sip new file mode 100644 index 0000000..cdf1a54 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutereply.sip @@ -0,0 +1,66 @@ +// qgeoroutereply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoRouteReply : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + EngineNotSetError, + CommunicationError, + ParseError, + UnsupportedOptionError, + UnknownError, + }; + + QGeoRouteReply(QGeoRouteReply::Error error, const QString &errorString, QObject *parent /TransferThis/ = 0); + virtual ~QGeoRouteReply(); + bool isFinished() const; + QGeoRouteReply::Error error() const; + QString errorString() const; + QGeoRouteRequest request() const; + QList routes() const; + virtual void abort(); + +signals: +%If (Qt_5_9_0 -) + void aborted(); +%End + void finished(); + void error(QGeoRouteReply::Error error, const QString &errorString = QString()); + +protected: + QGeoRouteReply(const QGeoRouteRequest &request, QObject *parent /TransferThis/ = 0); + void setError(QGeoRouteReply::Error error, const QString &errorString); + void setFinished(bool finished); + void setRoutes(const QList &routes); + void addRoutes(const QList &routes); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeorouterequest.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeorouterequest.sip new file mode 100644 index 0000000..ea0d9dd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeorouterequest.sip @@ -0,0 +1,158 @@ +// qgeorouterequest.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoRouteRequest +{ +%TypeHeaderCode +#include +%End + +public: + enum TravelMode + { + CarTravel, + PedestrianTravel, + BicycleTravel, + PublicTransitTravel, + TruckTravel, + }; + + typedef QFlags TravelModes; + + enum FeatureType + { + NoFeature, + TollFeature, + HighwayFeature, + PublicTransitFeature, + FerryFeature, + TunnelFeature, + DirtRoadFeature, + ParksFeature, + MotorPoolLaneFeature, +%If (Qt_5_10_0 -) + TrafficFeature, +%End + }; + + typedef QFlags FeatureTypes; + + enum FeatureWeight + { + NeutralFeatureWeight, + PreferFeatureWeight, + RequireFeatureWeight, + AvoidFeatureWeight, + DisallowFeatureWeight, + }; + + typedef QFlags FeatureWeights; + + enum RouteOptimization + { + ShortestRoute, + FastestRoute, + MostEconomicRoute, + MostScenicRoute, + }; + + typedef QFlags RouteOptimizations; + + enum SegmentDetail + { + NoSegmentData, + BasicSegmentData, + }; + + typedef QFlags SegmentDetails; + + enum ManeuverDetail + { + NoManeuvers, + BasicManeuvers, + }; + + typedef QFlags ManeuverDetails; + explicit QGeoRouteRequest(const QList &waypoints = QList()); + QGeoRouteRequest(const QGeoCoordinate &origin, const QGeoCoordinate &destination); + QGeoRouteRequest(const QGeoRouteRequest &other); + ~QGeoRouteRequest(); + bool operator==(const QGeoRouteRequest &other) const; + bool operator!=(const QGeoRouteRequest &other) const; + void setWaypoints(const QList &waypoints); + QList waypoints() const; + void setExcludeAreas(const QList &areas); + QList excludeAreas() const; + void setNumberAlternativeRoutes(int alternatives); + int numberAlternativeRoutes() const; + void setTravelModes(QGeoRouteRequest::TravelModes travelModes); + QGeoRouteRequest::TravelModes travelModes() const; + void setFeatureWeight(QGeoRouteRequest::FeatureType featureType, QGeoRouteRequest::FeatureWeight featureWeight); + QGeoRouteRequest::FeatureWeight featureWeight(QGeoRouteRequest::FeatureType featureType) const; + QList featureTypes() const; + void setRouteOptimization(QGeoRouteRequest::RouteOptimizations optimization); + QGeoRouteRequest::RouteOptimizations routeOptimization() const; + void setSegmentDetail(QGeoRouteRequest::SegmentDetail segmentDetail); + QGeoRouteRequest::SegmentDetail segmentDetail() const; + void setManeuverDetail(QGeoRouteRequest::ManeuverDetail maneuverDetail); + QGeoRouteRequest::ManeuverDetail maneuverDetail() const; +%If (Qt_5_11_0 -) + void setWaypointsMetadata(const QList &waypointMetadata); +%End +%If (Qt_5_11_0 -) + QList waypointsMetadata() const; +%End +%If (Qt_5_11_0 -) + void setExtraParameters(const QVariantMap &extraParameters); +%End +%If (Qt_5_11_0 -) + QVariantMap extraParameters() const; +%End +%If (Qt_5_13_0 -) + void setDepartureTime(const QDateTime &departureTime); +%End +%If (Qt_5_13_0 -) + QDateTime departureTime() const; +%End +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoRouteRequest::TravelMode f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoRouteRequest::FeatureType f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoRouteRequest::FeatureWeight f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoRouteRequest::RouteOptimization f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoRouteRequest::SegmentDetail f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoRouteRequest::ManeuverDetail f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutesegment.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutesegment.sip new file mode 100644 index 0000000..133305c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutesegment.sip @@ -0,0 +1,53 @@ +// qgeoroutesegment.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoRouteSegment +{ +%TypeHeaderCode +#include +%End + +public: + QGeoRouteSegment(); + QGeoRouteSegment(const QGeoRouteSegment &other); + ~QGeoRouteSegment(); + bool operator==(const QGeoRouteSegment &other) const; + bool operator!=(const QGeoRouteSegment &other) const; + bool isValid() const; + void setNextRouteSegment(const QGeoRouteSegment &routeSegment); + QGeoRouteSegment nextRouteSegment() const; + void setTravelTime(int secs); + int travelTime() const; + void setDistance(qreal distance); + qreal distance() const; + void setPath(const QList &path); + QList path() const; + void setManeuver(const QGeoManeuver &maneuver); + QGeoManeuver maneuver() const; +%If (Qt_5_12_0 -) + bool isLegLastSegment() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutingmanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutingmanager.sip new file mode 100644 index 0000000..f2eca91 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutingmanager.sip @@ -0,0 +1,53 @@ +// qgeoroutingmanager.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoRoutingManager : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QGeoRoutingManager(); + QString managerName() const; + int managerVersion() const; + QGeoRouteReply *calculateRoute(const QGeoRouteRequest &request) /Factory/; + QGeoRouteReply *updateRoute(const QGeoRoute &route, const QGeoCoordinate &position) /TransferThis/; + QGeoRouteRequest::TravelModes supportedTravelModes() const; + QGeoRouteRequest::FeatureTypes supportedFeatureTypes() const; + QGeoRouteRequest::FeatureWeights supportedFeatureWeights() const; + QGeoRouteRequest::RouteOptimizations supportedRouteOptimizations() const; + QGeoRouteRequest::SegmentDetails supportedSegmentDetails() const; + QGeoRouteRequest::ManeuverDetails supportedManeuverDetails() const; + void setLocale(const QLocale &locale); + QLocale locale() const; + void setMeasurementSystem(QLocale::MeasurementSystem system); + QLocale::MeasurementSystem measurementSystem() const; + +signals: + void finished(QGeoRouteReply *reply); + void error(QGeoRouteReply *reply, QGeoRouteReply::Error error, QString errorString = QString()); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutingmanagerengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutingmanagerengine.sip new file mode 100644 index 0000000..623224e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoroutingmanagerengine.sip @@ -0,0 +1,62 @@ +// qgeoroutingmanagerengine.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QGeoRoutingManagerEngine : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QGeoRoutingManagerEngine(const QVariantMap ¶meters, QObject *parent /TransferThis/ = 0); + virtual ~QGeoRoutingManagerEngine(); + QString managerName() const; + int managerVersion() const; + virtual QGeoRouteReply *calculateRoute(const QGeoRouteRequest &request) = 0 /Factory/; + virtual QGeoRouteReply *updateRoute(const QGeoRoute &route, const QGeoCoordinate &position) /Factory/; + QGeoRouteRequest::TravelModes supportedTravelModes() const; + QGeoRouteRequest::FeatureTypes supportedFeatureTypes() const; + QGeoRouteRequest::FeatureWeights supportedFeatureWeights() const; + QGeoRouteRequest::RouteOptimizations supportedRouteOptimizations() const; + QGeoRouteRequest::SegmentDetails supportedSegmentDetails() const; + QGeoRouteRequest::ManeuverDetails supportedManeuverDetails() const; + void setLocale(const QLocale &locale); + QLocale locale() const; + void setMeasurementSystem(QLocale::MeasurementSystem system); + QLocale::MeasurementSystem measurementSystem() const; + +signals: + void finished(QGeoRouteReply *reply); + void error(QGeoRouteReply *reply, QGeoRouteReply::Error error, QString errorString = QString()); + +protected: + void setSupportedTravelModes(QGeoRouteRequest::TravelModes travelModes); + void setSupportedFeatureTypes(QGeoRouteRequest::FeatureTypes featureTypes); + void setSupportedFeatureWeights(QGeoRouteRequest::FeatureWeights featureWeights); + void setSupportedRouteOptimizations(QGeoRouteRequest::RouteOptimizations optimizations); + void setSupportedSegmentDetails(QGeoRouteRequest::SegmentDetails segmentDetails); + void setSupportedManeuverDetails(QGeoRouteRequest::ManeuverDetails maneuverDetails); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoserviceprovider.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoserviceprovider.sip new file mode 100644 index 0000000..d7defd5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qgeoserviceprovider.sip @@ -0,0 +1,224 @@ +// qgeoserviceprovider.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_11_0 -) +class QNavigationManager; +%End +%If (Qt_5_5_0 -) + +class QGeoServiceProvider : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QGeoCodingManager, &sipType_QGeoCodingManager, -1, 1}, + {sipName_QGeoRoutingManagerEngine, &sipType_QGeoRoutingManagerEngine, -1, 2}, + {sipName_QGeoCodeReply, &sipType_QGeoCodeReply, -1, 3}, + {sipName_QPlaceReply, &sipType_QPlaceReply, 10, 4}, + {sipName_QPlaceManagerEngine, &sipType_QPlaceManagerEngine, -1, 5}, + {sipName_QGeoRoutingManager, &sipType_QGeoRoutingManager, -1, 6}, + {sipName_QGeoCodingManagerEngine, &sipType_QGeoCodingManagerEngine, -1, 7}, + {sipName_QGeoServiceProvider, &sipType_QGeoServiceProvider, -1, 8}, + {sipName_QGeoRouteReply, &sipType_QGeoRouteReply, -1, 9}, + {sipName_QPlaceManager, &sipType_QPlaceManager, -1, -1}, + {sipName_QPlaceSearchSuggestionReply, &sipType_QPlaceSearchSuggestionReply, -1, 11}, + {sipName_QPlaceMatchReply, &sipType_QPlaceMatchReply, -1, 12}, + {sipName_QPlaceDetailsReply, &sipType_QPlaceDetailsReply, -1, 13}, + {sipName_QPlaceContentReply, &sipType_QPlaceContentReply, -1, 14}, + {sipName_QPlaceSearchReply, &sipType_QPlaceSearchReply, -1, 15}, + {sipName_QPlaceIdReply, &sipType_QPlaceIdReply, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum Error + { + NoError, + NotSupportedError, + UnknownParameterError, + MissingRequiredParameterError, + ConnectionError, +%If (Qt_5_12_1 -) + LoaderError, +%End + }; + + enum RoutingFeature + { + NoRoutingFeatures, + OnlineRoutingFeature, + OfflineRoutingFeature, + LocalizedRoutingFeature, + RouteUpdatesFeature, + AlternativeRoutesFeature, + ExcludeAreasRoutingFeature, + AnyRoutingFeatures, + }; + + enum GeocodingFeature + { + NoGeocodingFeatures, + OnlineGeocodingFeature, + OfflineGeocodingFeature, + ReverseGeocodingFeature, + LocalizedGeocodingFeature, + AnyGeocodingFeatures, + }; + + enum MappingFeature + { + NoMappingFeatures, + OnlineMappingFeature, + OfflineMappingFeature, + LocalizedMappingFeature, + AnyMappingFeatures, + }; + + enum PlacesFeature + { + NoPlacesFeatures, + OnlinePlacesFeature, + OfflinePlacesFeature, + SavePlaceFeature, + RemovePlaceFeature, + SaveCategoryFeature, + RemoveCategoryFeature, + PlaceRecommendationsFeature, + SearchSuggestionsFeature, + LocalizedPlacesFeature, + NotificationsFeature, + PlaceMatchingFeature, + AnyPlacesFeatures, + }; + + typedef QFlags RoutingFeatures; + typedef QFlags GeocodingFeatures; + typedef QFlags MappingFeatures; + typedef QFlags PlacesFeatures; + static QStringList availableServiceProviders(); + QGeoServiceProvider(const QString &providerName, const QVariantMap ¶meters = QVariantMap(), bool allowExperimental = false); + virtual ~QGeoServiceProvider(); + QGeoServiceProvider::RoutingFeatures routingFeatures() const; + QGeoServiceProvider::GeocodingFeatures geocodingFeatures() const; + QGeoServiceProvider::MappingFeatures mappingFeatures() const; + QGeoServiceProvider::PlacesFeatures placesFeatures() const; + QGeoCodingManager *geocodingManager() const; + QGeoRoutingManager *routingManager() const; + QPlaceManager *placeManager() const; + QGeoServiceProvider::Error error() const; + QString errorString() const; + void setParameters(const QVariantMap ¶meters); + void setLocale(const QLocale &locale); + void setAllowExperimental(bool allow); +%If (Qt_5_11_0 -) + + enum NavigationFeature + { + NoNavigationFeatures, + OnlineNavigationFeature, + OfflineNavigationFeature, + AnyNavigationFeatures, + }; + +%End +%If (Qt_5_11_0 -) + typedef QFlags NavigationFeatures; +%End +%If (Qt_5_11_0 -) + QGeoServiceProvider::NavigationFeatures navigationFeatures() const; +%End +%If (Qt_5_11_0 -) + QNavigationManager *navigationManager() const; +%End +%If (Qt_5_13_0 -) + QGeoServiceProvider::Error mappingError() const; +%End +%If (Qt_5_13_0 -) + QString mappingErrorString() const; +%End +%If (Qt_5_13_0 -) + QGeoServiceProvider::Error geocodingError() const; +%End +%If (Qt_5_13_0 -) + QString geocodingErrorString() const; +%End +%If (Qt_5_13_0 -) + QGeoServiceProvider::Error routingError() const; +%End +%If (Qt_5_13_0 -) + QString routingErrorString() const; +%End +%If (Qt_5_13_0 -) + QGeoServiceProvider::Error placesError() const; +%End +%If (Qt_5_13_0 -) + QString placesErrorString() const; +%End +%If (Qt_5_13_0 -) + QGeoServiceProvider::Error navigationError() const; +%End +%If (Qt_5_13_0 -) + QString navigationErrorString() const; +%End +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoServiceProvider::RoutingFeature f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoServiceProvider::GeocodingFeature f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoServiceProvider::MappingFeature f1, QFlags f2); +%End +%If (Qt_5_5_0 -) +QFlags operator|(QGeoServiceProvider::PlacesFeature f1, QFlags f2); +%End +%If (Qt_5_11_0 -) +QFlags operator|(QGeoServiceProvider::NavigationFeature f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qlocation.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qlocation.sip new file mode 100644 index 0000000..994224e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qlocation.sip @@ -0,0 +1,45 @@ +// qlocation.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +namespace QLocation +{ +%TypeHeaderCode +#include +%End + + enum Visibility + { + UnspecifiedVisibility, + DeviceVisibility, + PrivateVisibility, + PublicVisibility, + }; + + typedef QFlags VisibilityScope; +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QLocation::Visibility f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplace.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplace.sip new file mode 100644 index 0000000..93ee8d9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplace.sip @@ -0,0 +1,79 @@ +// qplace.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlace +{ +%TypeHeaderCode +#include +%End + +public: + QPlace(); + QPlace(const QPlace &other); + ~QPlace(); + bool operator==(const QPlace &other) const; + bool operator!=(const QPlace &other) const; + QList categories() const; + void setCategory(const QPlaceCategory &category); + void setCategories(const QList &categories); + QGeoLocation location() const; + void setLocation(const QGeoLocation &location); + QPlaceRatings ratings() const; + void setRatings(const QPlaceRatings &ratings); + QPlaceSupplier supplier() const; + void setSupplier(const QPlaceSupplier &supplier); + QString attribution() const; + void setAttribution(const QString &attribution); + QPlaceIcon icon() const; + void setIcon(const QPlaceIcon &icon); + QPlaceContent::Collection content(QPlaceContent::Type type) const; + void setContent(QPlaceContent::Type type, const QPlaceContent::Collection &content); + void insertContent(QPlaceContent::Type type, const QPlaceContent::Collection &content); + int totalContentCount(QPlaceContent::Type type) const; + void setTotalContentCount(QPlaceContent::Type type, int total); + QString name() const; + void setName(const QString &name); + QString placeId() const; + void setPlaceId(const QString &identifier); + QString primaryPhone() const; + QString primaryFax() const; + QString primaryEmail() const; + QUrl primaryWebsite() const; + bool detailsFetched() const; + void setDetailsFetched(bool fetched); + QStringList extendedAttributeTypes() const; + QPlaceAttribute extendedAttribute(const QString &attributeType) const; + void setExtendedAttribute(const QString &attributeType, const QPlaceAttribute &attribute); + void removeExtendedAttribute(const QString &attributeType); + QStringList contactTypes() const; + QList contactDetails(const QString &contactType) const; + void setContactDetails(const QString &contactType, QList details); + void appendContactDetail(const QString &contactType, const QPlaceContactDetail &detail); + void removeContactDetails(const QString &contactType); + QLocation::Visibility visibility() const; + void setVisibility(QLocation::Visibility visibility); + bool isEmpty() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceattribute.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceattribute.sip new file mode 100644 index 0000000..ab4d4bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceattribute.sip @@ -0,0 +1,47 @@ +// qplaceattribute.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceAttribute +{ +%TypeHeaderCode +#include +%End + +public: + static const QString OpeningHours; + static const QString Payment; + static const QString Provider; + QPlaceAttribute(); + QPlaceAttribute(const QPlaceAttribute &other); + virtual ~QPlaceAttribute(); + bool operator==(const QPlaceAttribute &other) const; + bool operator!=(const QPlaceAttribute &other) const; + QString label() const; + void setLabel(const QString &label); + QString text() const; + void setText(const QString &text); + bool isEmpty() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecategory.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecategory.sip new file mode 100644 index 0000000..42a1c63 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecategory.sip @@ -0,0 +1,48 @@ +// qplacecategory.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceCategory +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceCategory(); + QPlaceCategory(const QPlaceCategory &other); + virtual ~QPlaceCategory(); + bool operator==(const QPlaceCategory &other) const; + bool operator!=(const QPlaceCategory &other) const; + QString categoryId() const; + void setCategoryId(const QString &identifier); + QString name() const; + void setName(const QString &name); + QLocation::Visibility visibility() const; + void setVisibility(QLocation::Visibility visibility); + QPlaceIcon icon() const; + void setIcon(const QPlaceIcon &icon); + bool isEmpty() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontactdetail.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontactdetail.sip new file mode 100644 index 0000000..ef6d274 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontactdetail.sip @@ -0,0 +1,48 @@ +// qplacecontactdetail.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceContactDetail +{ +%TypeHeaderCode +#include +%End + +public: + static const QString Phone; + static const QString Email; + static const QString Website; + static const QString Fax; + QPlaceContactDetail(); + QPlaceContactDetail(const QPlaceContactDetail &other); + virtual ~QPlaceContactDetail(); + bool operator==(const QPlaceContactDetail &other) const; + bool operator!=(const QPlaceContactDetail &other) const; + QString label() const; + void setLabel(const QString &label); + QString value() const; + void setValue(const QString &value); + void clear(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontent.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontent.sip new file mode 100644 index 0000000..6afa631 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontent.sip @@ -0,0 +1,59 @@ +// qplacecontent.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceContent +{ +%TypeHeaderCode +#include +%End + + typedef QMap Collection; + +public: + enum Type + { + NoType, + ImageType, + ReviewType, + EditorialType, +%If (Qt_5_11_0 -) + CustomType, +%End + }; + + QPlaceContent(); + QPlaceContent(const QPlaceContent &other); + virtual ~QPlaceContent(); + bool operator==(const QPlaceContent &other) const; + bool operator!=(const QPlaceContent &other) const; + QPlaceContent::Type type() const; + QPlaceSupplier supplier() const; + void setSupplier(const QPlaceSupplier &supplier); + QPlaceUser user() const; + void setUser(const QPlaceUser &user); + QString attribution() const; + void setAttribution(const QString &attribution); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontentreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontentreply.sip new file mode 100644 index 0000000..d45ff3c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontentreply.sip @@ -0,0 +1,49 @@ +// qplacecontentreply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceContentReply : public QPlaceReply +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPlaceContentReply(QObject *parent /TransferThis/ = 0); + virtual ~QPlaceContentReply(); + virtual QPlaceReply::Type type() const; + QPlaceContent::Collection content() const; + int totalCount() const; + QPlaceContentRequest request() const; + QPlaceContentRequest previousPageRequest() const; + QPlaceContentRequest nextPageRequest() const; + +protected: + void setContent(const QPlaceContent::Collection &content); + void setTotalCount(int total); + void setRequest(const QPlaceContentRequest &request); + void setPreviousPageRequest(const QPlaceContentRequest &previous); + void setNextPageRequest(const QPlaceContentRequest &next); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontentrequest.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontentrequest.sip new file mode 100644 index 0000000..e27df33 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacecontentrequest.sip @@ -0,0 +1,48 @@ +// qplacecontentrequest.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceContentRequest +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceContentRequest(); + QPlaceContentRequest(const QPlaceContentRequest &other); + ~QPlaceContentRequest(); + bool operator==(const QPlaceContentRequest &other) const; + bool operator!=(const QPlaceContentRequest &other) const; + QPlaceContent::Type contentType() const; + void setContentType(QPlaceContent::Type type); + QString placeId() const; + void setPlaceId(const QString &identifier); + QVariant contentContext() const; + void setContentContext(const QVariant &context); + int limit() const; + void setLimit(int limit); + void clear(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacedetailsreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacedetailsreply.sip new file mode 100644 index 0000000..32640d7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacedetailsreply.sip @@ -0,0 +1,41 @@ +// qplacedetailsreply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceDetailsReply : public QPlaceReply +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPlaceDetailsReply(QObject *parent /TransferThis/ = 0); + virtual ~QPlaceDetailsReply(); + virtual QPlaceReply::Type type() const; + QPlace place() const; + +protected: + void setPlace(const QPlace &place); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceeditorial.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceeditorial.sip new file mode 100644 index 0000000..5f359f9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceeditorial.sip @@ -0,0 +1,43 @@ +// qplaceeditorial.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceEditorial : public QPlaceContent +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceEditorial(); + QPlaceEditorial(const QPlaceContent &other); + virtual ~QPlaceEditorial(); + QString text() const; + void setText(const QString &text); + QString title() const; + void setTitle(const QString &data); + QString language() const; + void setLanguage(const QString &data); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceicon.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceicon.sip new file mode 100644 index 0000000..09a105c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceicon.sip @@ -0,0 +1,46 @@ +// qplaceicon.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceIcon +{ +%TypeHeaderCode +#include +%End + +public: + static const QString SingleUrl; + QPlaceIcon(); + QPlaceIcon(const QPlaceIcon &other); + ~QPlaceIcon(); + bool operator==(const QPlaceIcon &other) const; + bool operator!=(const QPlaceIcon &other) const; + QUrl url(const QSize &size = QSize()) const; + QPlaceManager *manager() const; + void setManager(QPlaceManager *manager); + QVariantMap parameters() const; + void setParameters(const QVariantMap ¶meters); + bool isEmpty() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceidreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceidreply.sip new file mode 100644 index 0000000..73d72df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceidreply.sip @@ -0,0 +1,50 @@ +// qplaceidreply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceIdReply : public QPlaceReply +{ +%TypeHeaderCode +#include +%End + +public: + enum OperationType + { + SavePlace, + SaveCategory, + RemovePlace, + RemoveCategory, + }; + + QPlaceIdReply(QPlaceIdReply::OperationType operationType, QObject *parent /TransferThis/ = 0); + virtual ~QPlaceIdReply(); + virtual QPlaceReply::Type type() const; + QPlaceIdReply::OperationType operationType() const; + QString id() const; + +protected: + void setId(const QString &identifier); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceimage.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceimage.sip new file mode 100644 index 0000000..c4d399f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceimage.sip @@ -0,0 +1,43 @@ +// qplaceimage.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceImage : public QPlaceContent +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceImage(); + QPlaceImage(const QPlaceContent &other); + virtual ~QPlaceImage(); + QUrl url() const; + void setUrl(const QUrl &url); + QString imageId() const; + void setImageId(const QString &identifier); + QString mimeType() const; + void setMimeType(const QString &data); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacemanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacemanager.sip new file mode 100644 index 0000000..6b1b2c6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacemanager.sip @@ -0,0 +1,66 @@ +// qplacemanager.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceManager : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QPlaceManager(); + QString managerName() const; + int managerVersion() const; + QPlaceDetailsReply *getPlaceDetails(const QString &placeId) const; + QPlaceContentReply *getPlaceContent(const QPlaceContentRequest &request) const; + QPlaceSearchReply *search(const QPlaceSearchRequest &query) const; + QPlaceSearchSuggestionReply *searchSuggestions(const QPlaceSearchRequest &request) const; + QPlaceIdReply *savePlace(const QPlace &place); + QPlaceIdReply *removePlace(const QString &placeId); + QPlaceIdReply *saveCategory(const QPlaceCategory &category, const QString &parentId = QString()); + QPlaceIdReply *removeCategory(const QString &categoryId); + QPlaceReply *initializeCategories(); + QString parentCategoryId(const QString &categoryId) const; + QStringList childCategoryIds(const QString &parentId = QString()) const; + QPlaceCategory category(const QString &categoryId) const; + QList childCategories(const QString &parentId = QString()) const; + QList locales() const; + void setLocale(const QLocale &locale); + void setLocales(const QList &locale); + QPlace compatiblePlace(const QPlace &place); + QPlaceMatchReply *matchingPlaces(const QPlaceMatchRequest &request) const; + +signals: + void finished(QPlaceReply *reply); + void error(QPlaceReply *, QPlaceReply::Error error, const QString &errorString = QString()); + void placeAdded(const QString &placeId); + void placeUpdated(const QString &placeId); + void placeRemoved(const QString &placeId); + void categoryAdded(const QPlaceCategory &category, const QString &parentId); + void categoryUpdated(const QPlaceCategory &category, const QString &parentId); + void categoryRemoved(const QString &categoryId, const QString &parentId); + void dataChanged(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacemanagerengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacemanagerengine.sip new file mode 100644 index 0000000..0bd5747 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacemanagerengine.sip @@ -0,0 +1,70 @@ +// qplacemanagerengine.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceManagerEngine : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceManagerEngine(const QVariantMap ¶meters, QObject *parent /TransferThis/ = 0); + virtual ~QPlaceManagerEngine(); + QString managerName() const; + int managerVersion() const; + virtual QPlaceDetailsReply *getPlaceDetails(const QString &placeId); + virtual QPlaceContentReply *getPlaceContent(const QPlaceContentRequest &request); + virtual QPlaceSearchReply *search(const QPlaceSearchRequest &request); + virtual QPlaceSearchSuggestionReply *searchSuggestions(const QPlaceSearchRequest &request); + virtual QPlaceIdReply *savePlace(const QPlace &place); + virtual QPlaceIdReply *removePlace(const QString &placeId); + virtual QPlaceIdReply *saveCategory(const QPlaceCategory &category, const QString &parentId); + virtual QPlaceIdReply *removeCategory(const QString &categoryId); + virtual QPlaceReply *initializeCategories(); + virtual QString parentCategoryId(const QString &categoryId) const; + virtual QStringList childCategoryIds(const QString &categoryId) const; + virtual QPlaceCategory category(const QString &categoryId) const; + virtual QList childCategories(const QString &parentId) const; + virtual QList locales() const; + virtual void setLocales(const QList &locales); + virtual QUrl constructIconUrl(const QPlaceIcon &icon, const QSize &size) const; + virtual QPlace compatiblePlace(const QPlace &original) const; + virtual QPlaceMatchReply *matchingPlaces(const QPlaceMatchRequest &request); + +signals: + void finished(QPlaceReply *reply); + void error(QPlaceReply *, QPlaceReply::Error error, const QString &errorString = QString()); + void placeAdded(const QString &placeId); + void placeUpdated(const QString &placeId); + void placeRemoved(const QString &placeId); + void categoryAdded(const QPlaceCategory &category, const QString &parentCategoryId); + void categoryUpdated(const QPlaceCategory &category, const QString &parentCategoryId); + void categoryRemoved(const QString &categoryId, const QString &parentCategoryId); + void dataChanged(); + +protected: + QPlaceManager *manager() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacematchreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacematchreply.sip new file mode 100644 index 0000000..43ac8cd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacematchreply.sip @@ -0,0 +1,43 @@ +// qplacematchreply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceMatchReply : public QPlaceReply +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPlaceMatchReply(QObject *parent /TransferThis/ = 0); + virtual ~QPlaceMatchReply(); + virtual QPlaceReply::Type type() const; + QList places() const; + QPlaceMatchRequest request() const; + +protected: + void setPlaces(const QList &results); + void setRequest(const QPlaceMatchRequest &request); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacematchrequest.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacematchrequest.sip new file mode 100644 index 0000000..8ae5504 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacematchrequest.sip @@ -0,0 +1,46 @@ +// qplacematchrequest.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceMatchRequest +{ +%TypeHeaderCode +#include +%End + +public: + static const QString AlternativeId; + QPlaceMatchRequest(); + QPlaceMatchRequest(const QPlaceMatchRequest &other); + ~QPlaceMatchRequest(); + bool operator==(const QPlaceMatchRequest &other) const; + bool operator!=(const QPlaceMatchRequest &other) const; + QList places() const; + void setPlaces(const QList places); + void setResults(const QList &results); + QVariantMap parameters() const; + void setParameters(const QVariantMap ¶meters); + void clear(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceproposedsearchresult.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceproposedsearchresult.sip new file mode 100644 index 0000000..277144f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceproposedsearchresult.sip @@ -0,0 +1,39 @@ +// qplaceproposedsearchresult.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceProposedSearchResult : public QPlaceSearchResult +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceProposedSearchResult(); + QPlaceProposedSearchResult(const QPlaceSearchResult &other); + virtual ~QPlaceProposedSearchResult(); + QPlaceSearchRequest searchRequest() const; + void setSearchRequest(const QPlaceSearchRequest &request); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceratings.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceratings.sip new file mode 100644 index 0000000..e5c95df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceratings.sip @@ -0,0 +1,46 @@ +// qplaceratings.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceRatings +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceRatings(); + QPlaceRatings(const QPlaceRatings &other); + ~QPlaceRatings(); + bool operator==(const QPlaceRatings &other) const; + bool operator!=(const QPlaceRatings &other) const; + qreal average() const; + void setAverage(qreal average); + int count() const; + void setCount(int count); + qreal maximum() const; + void setMaximum(qreal max); + bool isEmpty() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacereply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacereply.sip new file mode 100644 index 0000000..e936536 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacereply.sip @@ -0,0 +1,82 @@ +// qplacereply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceReply : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + PlaceDoesNotExistError, + CategoryDoesNotExistError, + CommunicationError, + ParseError, + PermissionsError, + UnsupportedError, + BadArgumentError, + CancelError, + UnknownError, + }; + + enum Type + { + Reply, + DetailsReply, + SearchReply, + SearchSuggestionReply, + ContentReply, + IdReply, + MatchReply, + }; + + explicit QPlaceReply(QObject *parent /TransferThis/ = 0); + virtual ~QPlaceReply(); + bool isFinished() const; + virtual QPlaceReply::Type type() const; + QString errorString() const; + QPlaceReply::Error error() const; + +public slots: + virtual void abort(); + +signals: +%If (Qt_5_9_0 -) + void aborted(); +%End + void finished(); + void error(QPlaceReply::Error error, const QString &errorString = QString()); +%If (Qt_5_12_0 -) + void contentUpdated(); +%End + +protected: + void setFinished(bool finished); + void setError(QPlaceReply::Error error, const QString &errorString); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceresult.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceresult.sip new file mode 100644 index 0000000..c495038 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceresult.sip @@ -0,0 +1,43 @@ +// qplaceresult.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceResult : public QPlaceSearchResult +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceResult(); + QPlaceResult(const QPlaceSearchResult &other); + virtual ~QPlaceResult(); + qreal distance() const; + void setDistance(qreal distance); + QPlace place() const; + void setPlace(const QPlace &place); + bool isSponsored() const; + void setSponsored(bool sponsored); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacereview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacereview.sip new file mode 100644 index 0000000..62822ca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacereview.sip @@ -0,0 +1,49 @@ +// qplacereview.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceReview : public QPlaceContent +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceReview(); + QPlaceReview(const QPlaceContent &other); + virtual ~QPlaceReview(); + QDateTime dateTime() const; + void setDateTime(const QDateTime &dt); + QString text() const; + void setText(const QString &text); + QString language() const; + void setLanguage(const QString &data); + qreal rating() const; + void setRating(qreal data); + QString reviewId() const; + void setReviewId(const QString &identifier); + QString title() const; + void setTitle(const QString &data); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchreply.sip new file mode 100644 index 0000000..27860fb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchreply.sip @@ -0,0 +1,47 @@ +// qplacesearchreply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceSearchReply : public QPlaceReply +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPlaceSearchReply(QObject *parent /TransferThis/ = 0); + virtual ~QPlaceSearchReply(); + virtual QPlaceReply::Type type() const; + QList results() const; + QPlaceSearchRequest request() const; + QPlaceSearchRequest previousPageRequest() const; + QPlaceSearchRequest nextPageRequest() const; + +protected: + void setResults(const QList &results); + void setRequest(const QPlaceSearchRequest &request); + void setPreviousPageRequest(const QPlaceSearchRequest &previous); + void setNextPageRequest(const QPlaceSearchRequest &next); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchrequest.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchrequest.sip new file mode 100644 index 0000000..6d24baa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchrequest.sip @@ -0,0 +1,64 @@ +// qplacesearchrequest.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceSearchRequest +{ +%TypeHeaderCode +#include +%End + +public: + enum RelevanceHint + { + UnspecifiedHint, + DistanceHint, + LexicalPlaceNameHint, + }; + + QPlaceSearchRequest(); + QPlaceSearchRequest(const QPlaceSearchRequest &other); + ~QPlaceSearchRequest(); + bool operator==(const QPlaceSearchRequest &other) const; + bool operator!=(const QPlaceSearchRequest &other) const; + QString searchTerm() const; + void setSearchTerm(const QString &term); + QList categories() const; + void setCategory(const QPlaceCategory &category); + void setCategories(const QList &categories); + QGeoShape searchArea() const; + void setSearchArea(const QGeoShape &area); + QString recommendationId() const; + void setRecommendationId(const QString &recommendationId); + QVariant searchContext() const; + void setSearchContext(const QVariant &context); + QLocation::VisibilityScope visibilityScope() const; + void setVisibilityScope(QLocation::VisibilityScope visibilityScopes); + QPlaceSearchRequest::RelevanceHint relevanceHint() const; + void setRelevanceHint(QPlaceSearchRequest::RelevanceHint hint); + int limit() const; + void setLimit(int limit); + void clear(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchresult.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchresult.sip new file mode 100644 index 0000000..a8443af --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchresult.sip @@ -0,0 +1,52 @@ +// qplacesearchresult.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceSearchResult +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceSearchResult(); + QPlaceSearchResult(const QPlaceSearchResult &other); + virtual ~QPlaceSearchResult(); + bool operator==(const QPlaceSearchResult &other) const; + bool operator!=(const QPlaceSearchResult &other) const; + + enum SearchResultType + { + UnknownSearchResult, + PlaceResult, + ProposedSearchResult, + }; + + QPlaceSearchResult::SearchResultType type() const; + QString title() const; + void setTitle(const QString &title); + QPlaceIcon icon() const; + void setIcon(const QPlaceIcon &icon); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchsuggestionreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchsuggestionreply.sip new file mode 100644 index 0000000..26afe96 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesearchsuggestionreply.sip @@ -0,0 +1,41 @@ +// qplacesearchsuggestionreply.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceSearchSuggestionReply : public QPlaceReply +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPlaceSearchSuggestionReply(QObject *parent /TransferThis/ = 0); + virtual ~QPlaceSearchSuggestionReply(); + QStringList suggestions() const; + virtual QPlaceReply::Type type() const; + +protected: + void setSuggestions(const QStringList &suggestions); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesupplier.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesupplier.sip new file mode 100644 index 0000000..40b4334 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplacesupplier.sip @@ -0,0 +1,48 @@ +// qplacesupplier.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceSupplier +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceSupplier(); + QPlaceSupplier(const QPlaceSupplier &other); + ~QPlaceSupplier(); + bool operator==(const QPlaceSupplier &other) const; + bool operator!=(const QPlaceSupplier &other) const; + QString name() const; + void setName(const QString &data); + QString supplierId() const; + void setSupplierId(const QString &identifier); + QUrl url() const; + void setUrl(const QUrl &data); + QPlaceIcon icon() const; + void setIcon(const QPlaceIcon &icon); + bool isEmpty() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceuser.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceuser.sip new file mode 100644 index 0000000..bb841d2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtLocation/qplaceuser.sip @@ -0,0 +1,43 @@ +// qplaceuser.sip generated by MetaSIP +// +// This file is part of the QtLocation Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QPlaceUser +{ +%TypeHeaderCode +#include +%End + +public: + QPlaceUser(); + QPlaceUser(const QPlaceUser &other); + ~QPlaceUser(); + bool operator==(const QPlaceUser &other) const; + bool operator!=(const QPlaceUser &other) const; + QString userId() const; + void setUserId(const QString &identifier); + QString name() const; + void setName(const QString &name); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/QtMultimedia.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/QtMultimedia.toml new file mode 100644 index 0000000..78c2173 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/QtMultimedia.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtMultimedia. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/QtMultimediamod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/QtMultimediamod.sip new file mode 100644 index 0000000..a5e6a5c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/QtMultimediamod.sip @@ -0,0 +1,126 @@ +// QtMultimediamod.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtMultimedia, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip +%Import QtNetwork/QtNetworkmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qabstractvideobuffer.sip +%Include qabstractvideofilter.sip +%Include qabstractvideosurface.sip +%Include qaudio.sip +%Include qaudiobuffer.sip +%Include qaudiodecoder.sip +%Include qaudiodecodercontrol.sip +%Include qaudiodeviceinfo.sip +%Include qaudioencodersettingscontrol.sip +%Include qaudioformat.sip +%Include qaudioinput.sip +%Include qaudioinputselectorcontrol.sip +%Include qaudiooutput.sip +%Include qaudiooutputselectorcontrol.sip +%Include qaudioprobe.sip +%Include qaudiorecorder.sip +%Include qaudiorolecontrol.sip +%Include qcamera.sip +%Include qcameracapturebufferformatcontrol.sip +%Include qcameracapturedestinationcontrol.sip +%Include qcameracontrol.sip +%Include qcameraexposure.sip +%Include qcameraexposurecontrol.sip +%Include qcamerafeedbackcontrol.sip +%Include qcameraflashcontrol.sip +%Include qcamerafocus.sip +%Include qcamerafocuscontrol.sip +%Include qcameraimagecapture.sip +%Include qcameraimagecapturecontrol.sip +%Include qcameraimageprocessing.sip +%Include qcameraimageprocessingcontrol.sip +%Include qcamerainfo.sip +%Include qcamerainfocontrol.sip +%Include qcameralockscontrol.sip +%Include qcameraviewfindersettings.sip +%Include qcameraviewfindersettingscontrol.sip +%Include qcamerazoomcontrol.sip +%Include qcustomaudiorolecontrol.sip +%Include qimageencodercontrol.sip +%Include qmediaaudioprobecontrol.sip +%Include qmediaavailabilitycontrol.sip +%Include qmediabindableinterface.sip +%Include qmediacontainercontrol.sip +%Include qmediacontent.sip +%Include qmediacontrol.sip +%Include qmediaencodersettings.sip +%Include qmediagaplessplaybackcontrol.sip +%Include qmediametadata.sip +%Include qmedianetworkaccesscontrol.sip +%Include qmediaobject.sip +%Include qmediaplayer.sip +%Include qmediaplayercontrol.sip +%Include qmediaplaylist.sip +%Include qmediarecorder.sip +%Include qmediarecordercontrol.sip +%Include qmediaresource.sip +%Include qmediaservice.sip +%Include qmediastreamscontrol.sip +%Include qmediatimerange.sip +%Include qmediavideoprobecontrol.sip +%Include qmetadatareadercontrol.sip +%Include qmetadatawritercontrol.sip +%Include qmultimedia.sip +%Include qradiodata.sip +%Include qradiodatacontrol.sip +%Include qradiotuner.sip +%Include qradiotunercontrol.sip +%Include qsound.sip +%Include qsoundeffect.sip +%Include qvideodeviceselectorcontrol.sip +%Include qvideoencodersettingscontrol.sip +%Include qvideoframe.sip +%Include qvideoprobe.sip +%Include qvideorenderercontrol.sip +%Include qvideosurfaceformat.sip +%Include qvideowindowcontrol.sip +%Include qpymultimedia_qlist.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideobuffer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideobuffer.sip new file mode 100644 index 0000000..f8fb4d2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideobuffer.sip @@ -0,0 +1,83 @@ +// qabstractvideobuffer.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractVideoBuffer +{ +%TypeHeaderCode +#include +%End + +public: + enum HandleType + { + NoHandle, + GLTextureHandle, + XvShmImageHandle, + CoreImageHandle, + QPixmapHandle, +%If (Qt_5_4_0 -) + EGLImageHandle, +%End + UserHandle, + }; + + enum MapMode + { + NotMapped, + ReadOnly, + WriteOnly, + ReadWrite, + }; + + QAbstractVideoBuffer(QAbstractVideoBuffer::HandleType type); + virtual ~QAbstractVideoBuffer(); + QAbstractVideoBuffer::HandleType handleType() const; + virtual QAbstractVideoBuffer::MapMode mapMode() const = 0; + virtual SIP_PYOBJECT map(QAbstractVideoBuffer::MapMode mode, int *numBytes, int *bytesPerLine) = 0 /TypeHint="PyQt5.sip.voidptr"/ [uchar * (QAbstractVideoBuffer::MapMode mode, int *numBytes, int *bytesPerLine)]; +%MethodCode + uchar *mem; + + Py_BEGIN_ALLOW_THREADS + mem = sipCpp->map(a0, &a1, &a2); + Py_END_ALLOW_THREADS + + if (mem) + { + if (a0 & QAbstractVideoBuffer::WriteOnly) + sipRes = sipConvertFromVoidPtrAndSize(mem, a1); + else + sipRes = sipConvertFromConstVoidPtrAndSize(mem, a1); + } + else + { + sipRes = Py_None; + Py_INCREF(sipRes); + } +%End + + virtual void unmap() = 0; + virtual QVariant handle() const; + virtual void release(); + +private: + QAbstractVideoBuffer(const QAbstractVideoBuffer &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideofilter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideofilter.sip new file mode 100644 index 0000000..2bea654 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideofilter.sip @@ -0,0 +1,64 @@ +// qabstractvideofilter.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QVideoFilterRunnable +{ +%TypeHeaderCode +#include +%End + +public: + enum RunFlag + { + LastInChain, + }; + + typedef QFlags RunFlags; + virtual ~QVideoFilterRunnable() /ReleaseGIL/; + virtual QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, QVideoFilterRunnable::RunFlags flags) = 0 /ReleaseGIL/; +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QVideoFilterRunnable::RunFlag f1, QFlags f2); +%End +%If (Qt_5_5_0 -) + +class QAbstractVideoFilter : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractVideoFilter(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractVideoFilter(); + bool isActive() const; + virtual QVideoFilterRunnable *createFilterRunnable() = 0 /ReleaseGIL/; + +signals: + void activeChanged(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideosurface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideosurface.sip new file mode 100644 index 0000000..3cfa19e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qabstractvideosurface.sip @@ -0,0 +1,167 @@ +// qabstractvideosurface.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractVideoSurface : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + #if QT_VERSION >= 0x050500 + {sipName_QAbstractVideoFilter, &sipType_QAbstractVideoFilter, -1, 1}, + #else + {0, 0, -1, 1}, + #endif + {sipName_QAbstractVideoSurface, &sipType_QAbstractVideoSurface, -1, 2}, + {sipName_QMediaObject, &sipType_QMediaObject, 18, 3}, + {sipName_QMediaControl, &sipType_QMediaControl, 22, 4}, + {sipName_QAudioInput, &sipType_QAudioInput, -1, 5}, + {sipName_QAudioOutput, &sipType_QAudioOutput, -1, 6}, + {sipName_QAudioProbe, &sipType_QAudioProbe, -1, 7}, + {sipName_QMediaRecorder, &sipType_QMediaRecorder, 60, 8}, + {sipName_QCameraExposure, &sipType_QCameraExposure, -1, 9}, + {sipName_QCameraFocus, &sipType_QCameraFocus, -1, 10}, + {sipName_QCameraImageCapture, &sipType_QCameraImageCapture, -1, 11}, + {sipName_QCameraImageProcessing, &sipType_QCameraImageProcessing, -1, 12}, + {sipName_QMediaPlaylist, &sipType_QMediaPlaylist, -1, 13}, + {sipName_QMediaService, &sipType_QMediaService, -1, 14}, + {sipName_QRadioData, &sipType_QRadioData, -1, 15}, + {sipName_QSound, &sipType_QSound, -1, 16}, + {sipName_QSoundEffect, &sipType_QSoundEffect, -1, 17}, + {sipName_QVideoProbe, &sipType_QVideoProbe, -1, -1}, + {sipName_QAudioDecoder, &sipType_QAudioDecoder, -1, 19}, + {sipName_QCamera, &sipType_QCamera, -1, 20}, + {sipName_QMediaPlayer, &sipType_QMediaPlayer, -1, 21}, + {sipName_QRadioTuner, &sipType_QRadioTuner, -1, -1}, + {sipName_QAudioDecoderControl, &sipType_QAudioDecoderControl, -1, 23}, + {sipName_QAudioEncoderSettingsControl, &sipType_QAudioEncoderSettingsControl, -1, 24}, + {sipName_QAudioInputSelectorControl, &sipType_QAudioInputSelectorControl, -1, 25}, + {sipName_QAudioOutputSelectorControl, &sipType_QAudioOutputSelectorControl, -1, 26}, + #if QT_VERSION >= 0x050600 + {sipName_QAudioRoleControl, &sipType_QAudioRoleControl, -1, 27}, + #else + {0, 0, -1, 27}, + #endif + {sipName_QCameraCaptureBufferFormatControl, &sipType_QCameraCaptureBufferFormatControl, -1, 28}, + {sipName_QCameraCaptureDestinationControl, &sipType_QCameraCaptureDestinationControl, -1, 29}, + {sipName_QCameraControl, &sipType_QCameraControl, -1, 30}, + {sipName_QCameraExposureControl, &sipType_QCameraExposureControl, -1, 31}, + {sipName_QCameraFeedbackControl, &sipType_QCameraFeedbackControl, -1, 32}, + {sipName_QCameraFlashControl, &sipType_QCameraFlashControl, -1, 33}, + {sipName_QCameraFocusControl, &sipType_QCameraFocusControl, -1, 34}, + {sipName_QCameraImageCaptureControl, &sipType_QCameraImageCaptureControl, -1, 35}, + {sipName_QCameraImageProcessingControl, &sipType_QCameraImageProcessingControl, -1, 36}, + {sipName_QCameraInfoControl, &sipType_QCameraInfoControl, -1, 37}, + {sipName_QCameraLocksControl, &sipType_QCameraLocksControl, -1, 38}, + {sipName_QCameraViewfinderSettingsControl, &sipType_QCameraViewfinderSettingsControl, -1, 39}, + {sipName_QCameraViewfinderSettingsControl2, &sipType_QCameraViewfinderSettingsControl2, -1, 40}, + {sipName_QCameraZoomControl, &sipType_QCameraZoomControl, -1, 41}, + #if QT_VERSION >= 0x050b00 + {sipName_QCustomAudioRoleControl, &sipType_QCustomAudioRoleControl, -1, 42}, + #else + {0, 0, -1, 42}, + #endif + {sipName_QImageEncoderControl, &sipType_QImageEncoderControl, -1, 43}, + {sipName_QMediaAudioProbeControl, &sipType_QMediaAudioProbeControl, -1, 44}, + {sipName_QMediaAvailabilityControl, &sipType_QMediaAvailabilityControl, -1, 45}, + {sipName_QMediaContainerControl, &sipType_QMediaContainerControl, -1, 46}, + {sipName_QMediaGaplessPlaybackControl, &sipType_QMediaGaplessPlaybackControl, -1, 47}, + {sipName_QMediaNetworkAccessControl, &sipType_QMediaNetworkAccessControl, -1, 48}, + {sipName_QMediaPlayerControl, &sipType_QMediaPlayerControl, -1, 49}, + {sipName_QMediaRecorderControl, &sipType_QMediaRecorderControl, -1, 50}, + {sipName_QMediaStreamsControl, &sipType_QMediaStreamsControl, -1, 51}, + {sipName_QMediaVideoProbeControl, &sipType_QMediaVideoProbeControl, -1, 52}, + {sipName_QMetaDataReaderControl, &sipType_QMetaDataReaderControl, -1, 53}, + {sipName_QMetaDataWriterControl, &sipType_QMetaDataWriterControl, -1, 54}, + {sipName_QRadioDataControl, &sipType_QRadioDataControl, -1, 55}, + {sipName_QRadioTunerControl, &sipType_QRadioTunerControl, -1, 56}, + {sipName_QVideoDeviceSelectorControl, &sipType_QVideoDeviceSelectorControl, -1, 57}, + {sipName_QVideoEncoderSettingsControl, &sipType_QVideoEncoderSettingsControl, -1, 58}, + {sipName_QVideoRendererControl, &sipType_QVideoRendererControl, -1, 59}, + {sipName_QVideoWindowControl, &sipType_QVideoWindowControl, -1, -1}, + {sipName_QAudioRecorder, &sipType_QAudioRecorder, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum Error + { + NoError, + UnsupportedFormatError, + IncorrectFormatError, + StoppedError, + ResourceError, + }; + + explicit QAbstractVideoSurface(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractVideoSurface(); + virtual QList supportedPixelFormats(QAbstractVideoBuffer::HandleType type = QAbstractVideoBuffer::NoHandle) const = 0; + virtual bool isFormatSupported(const QVideoSurfaceFormat &format) const; + virtual QVideoSurfaceFormat nearestFormat(const QVideoSurfaceFormat &format) const; + QVideoSurfaceFormat surfaceFormat() const; + virtual bool start(const QVideoSurfaceFormat &format); + virtual void stop(); + bool isActive() const; + virtual bool present(const QVideoFrame &frame) = 0; + QAbstractVideoSurface::Error error() const; + +signals: + void activeChanged(bool active); + void surfaceFormatChanged(const QVideoSurfaceFormat &format); + void supportedFormatsChanged(); + +protected: + void setError(QAbstractVideoSurface::Error error); + +public: + QSize nativeResolution() const; + +protected: + void setNativeResolution(const QSize &resolution); + +signals: + void nativeResolutionChanged(const QSize &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudio.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudio.sip new file mode 100644 index 0000000..19b3140 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudio.sip @@ -0,0 +1,89 @@ +// qaudio.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QAudio +{ +%TypeHeaderCode +#include +%End + + enum Error + { + NoError, + OpenError, + IOError, + UnderrunError, + FatalError, + }; + + enum State + { + ActiveState, + SuspendedState, + StoppedState, + IdleState, +%If (Qt_5_10_0 -) + InterruptedState, +%End + }; + + enum Mode + { + AudioInput, + AudioOutput, + }; + +%If (Qt_5_6_0 -) + + enum Role + { + UnknownRole, + MusicRole, + VideoRole, + VoiceCommunicationRole, + AlarmRole, + NotificationRole, + RingtoneRole, + AccessibilityRole, + SonificationRole, + GameRole, +%If (Qt_5_11_0 -) + CustomRole, +%End + }; + +%End +%If (Qt_5_8_0 -) + + enum VolumeScale + { + LinearVolumeScale, + CubicVolumeScale, + LogarithmicVolumeScale, + DecibelVolumeScale, + }; + +%End +%If (Qt_5_8_0 -) + qreal convertVolume(qreal volume, QAudio::VolumeScale from, QAudio::VolumeScale to); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiobuffer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiobuffer.sip new file mode 100644 index 0000000..d518046 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiobuffer.sip @@ -0,0 +1,44 @@ +// qaudiobuffer.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioBuffer +{ +%TypeHeaderCode +#include +%End + +public: + QAudioBuffer(); + QAudioBuffer(const QByteArray &data, const QAudioFormat &format, qint64 startTime = -1); + QAudioBuffer(int numFrames, const QAudioFormat &format, qint64 startTime = -1); + QAudioBuffer(const QAudioBuffer &other); + ~QAudioBuffer(); + bool isValid() const; + QAudioFormat format() const; + int frameCount() const; + int sampleCount() const; + int byteCount() const; + qint64 duration() const; + qint64 startTime() const; + const void *constData() const; + void *data(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodecoder.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodecoder.sip new file mode 100644 index 0000000..410114d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodecoder.sip @@ -0,0 +1,85 @@ +// qaudiodecoder.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioDecoder : public QMediaObject +{ +%TypeHeaderCode +#include +%End + +public: + enum State + { + StoppedState, + DecodingState, + }; + + enum Error + { + NoError, + ResourceError, + FormatError, + AccessDeniedError, + ServiceMissingError, + }; + +%If (Qt_5_6_1 -) + explicit QAudioDecoder(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QAudioDecoder(QObject *parent /TransferThis/ = 0); +%End + virtual ~QAudioDecoder(); + static QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList &codecs = QStringList()); + QAudioDecoder::State state() const; + QString sourceFilename() const; + void setSourceFilename(const QString &fileName); + QIODevice *sourceDevice() const; + void setSourceDevice(QIODevice *device); + QAudioFormat audioFormat() const; + void setAudioFormat(const QAudioFormat &format); + QAudioDecoder::Error error() const; + QString errorString() const; + QAudioBuffer read() const; + bool bufferAvailable() const; + qint64 position() const; + qint64 duration() const; + +public slots: + void start(); + void stop(); + +signals: + void bufferAvailableChanged(bool); + void bufferReady(); + void finished(); + void stateChanged(QAudioDecoder::State newState); + void formatChanged(const QAudioFormat &format); + void error(QAudioDecoder::Error error); + void sourceChanged(); + void positionChanged(qint64 position); + void durationChanged(qint64 duration); + +public: + virtual bool bind(QObject *); + virtual void unbind(QObject *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodecodercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodecodercontrol.sip new file mode 100644 index 0000000..043820f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodecodercontrol.sip @@ -0,0 +1,58 @@ +// qaudiodecodercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioDecoderControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAudioDecoderControl(); + virtual QAudioDecoder::State state() const = 0; + virtual QString sourceFilename() const = 0; + virtual void setSourceFilename(const QString &fileName) = 0; + virtual QIODevice *sourceDevice() const = 0; + virtual void setSourceDevice(QIODevice *device) = 0; + virtual void start() = 0; + virtual void stop() = 0; + virtual QAudioFormat audioFormat() const = 0; + virtual void setAudioFormat(const QAudioFormat &format) = 0; + virtual QAudioBuffer read() = 0; + virtual bool bufferAvailable() const = 0; + virtual qint64 position() const = 0; + virtual qint64 duration() const = 0; + +signals: + void stateChanged(QAudioDecoder::State newState); + void formatChanged(const QAudioFormat &format); + void sourceChanged(); + void error(int error, const QString &errorString); + void bufferReady(); + void bufferAvailableChanged(bool available); + void finished(); + void positionChanged(qint64 position); + void durationChanged(qint64 duration); + +protected: + explicit QAudioDecoderControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodeviceinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodeviceinfo.sip new file mode 100644 index 0000000..032a986 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiodeviceinfo.sip @@ -0,0 +1,52 @@ +// qaudiodeviceinfo.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioDeviceInfo +{ +%TypeHeaderCode +#include +%End + +public: + QAudioDeviceInfo(); + QAudioDeviceInfo(const QAudioDeviceInfo &other); + ~QAudioDeviceInfo(); + bool isNull() const; + QString deviceName() const; + bool isFormatSupported(const QAudioFormat &format) const; + QAudioFormat preferredFormat() const; + QAudioFormat nearestFormat(const QAudioFormat &format) const; + QStringList supportedCodecs() const; + QList supportedSampleSizes() const; + QList supportedByteOrders() const; + QList supportedSampleTypes() const; + static QAudioDeviceInfo defaultInputDevice(); + static QAudioDeviceInfo defaultOutputDevice(); + static QList availableDevices(QAudio::Mode mode); + QList supportedSampleRates() const; + QList supportedChannelCounts() const; + bool operator==(const QAudioDeviceInfo &other) const; + bool operator!=(const QAudioDeviceInfo &other) const; +%If (Qt_5_14_0 -) + QString realm() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioencodersettingscontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioencodersettingscontrol.sip new file mode 100644 index 0000000..a2df978 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioencodersettingscontrol.sip @@ -0,0 +1,39 @@ +// qaudioencodersettingscontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioEncoderSettingsControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAudioEncoderSettingsControl(); + virtual QStringList supportedAudioCodecs() const = 0; + virtual QString codecDescription(const QString &codecName) const = 0; + virtual QList supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const = 0; + virtual QAudioEncoderSettings audioSettings() const = 0; + virtual void setAudioSettings(const QAudioEncoderSettings &settings) = 0; + +protected: + explicit QAudioEncoderSettingsControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioformat.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioformat.sip new file mode 100644 index 0000000..cd5854b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioformat.sip @@ -0,0 +1,69 @@ +// qaudioformat.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioFormat +{ +%TypeHeaderCode +#include +%End + +public: + enum SampleType + { + Unknown, + SignedInt, + UnSignedInt, + Float, + }; + + enum Endian + { + BigEndian, + LittleEndian, + }; + + QAudioFormat(); + QAudioFormat(const QAudioFormat &other); + ~QAudioFormat(); + bool operator==(const QAudioFormat &other) const; + bool operator!=(const QAudioFormat &other) const; + bool isValid() const; + void setSampleSize(int sampleSize); + int sampleSize() const; + void setCodec(const QString &codec); + QString codec() const; + void setByteOrder(QAudioFormat::Endian byteOrder); + QAudioFormat::Endian byteOrder() const; + void setSampleType(QAudioFormat::SampleType sampleType); + QAudioFormat::SampleType sampleType() const; + void setSampleRate(int sampleRate); + int sampleRate() const; + void setChannelCount(int channelCount); + int channelCount() const; + qint32 bytesForDuration(qint64 duration) const; + qint64 durationForBytes(qint32 byteCount) const; + qint32 bytesForFrames(qint32 frameCount) const; + qint32 framesForBytes(qint32 byteCount) const; + qint32 framesForDuration(qint64 duration) const; + qint64 durationForFrames(qint32 frameCount) const; + int bytesPerFrame() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioinput.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioinput.sip new file mode 100644 index 0000000..1b15a89 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioinput.sip @@ -0,0 +1,58 @@ +// qaudioinput.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioInput : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0); + QAudioInput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0); + virtual ~QAudioInput(); + QAudioFormat format() const; + void start(QIODevice *device); + QIODevice *start(); + void stop(); + void reset(); + void suspend(); + void resume(); + void setBufferSize(int bytes); + int bufferSize() const; + int bytesReady() const; + int periodSize() const; + void setNotifyInterval(int milliSeconds); + int notifyInterval() const; + qint64 processedUSecs() const; + qint64 elapsedUSecs() const; + QAudio::Error error() const; + QAudio::State state() const; + +signals: + void stateChanged(QAudio::State); + void notify(); + +public: + void setVolume(qreal volume); + qreal volume() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioinputselectorcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioinputselectorcontrol.sip new file mode 100644 index 0000000..6f96d1e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioinputselectorcontrol.sip @@ -0,0 +1,45 @@ +// qaudioinputselectorcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioInputSelectorControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAudioInputSelectorControl(); + virtual QList availableInputs() const = 0; + virtual QString inputDescription(const QString &name) const = 0; + virtual QString defaultInput() const = 0; + virtual QString activeInput() const = 0; + +public slots: + virtual void setActiveInput(const QString &name) = 0; + +signals: + void activeInputChanged(const QString &name); + void availableInputsChanged(); + +protected: + explicit QAudioInputSelectorControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiooutput.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiooutput.sip new file mode 100644 index 0000000..326e8a5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiooutput.sip @@ -0,0 +1,60 @@ +// qaudiooutput.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioOutput : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0); + QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0); + virtual ~QAudioOutput(); + QAudioFormat format() const; + void start(QIODevice *device); + QIODevice *start(); + void stop(); + void reset(); + void suspend(); + void resume(); + void setBufferSize(int bytes); + int bufferSize() const; + int bytesFree() const; + int periodSize() const; + void setNotifyInterval(int milliSeconds); + int notifyInterval() const; + qint64 processedUSecs() const; + qint64 elapsedUSecs() const; + QAudio::Error error() const; + QAudio::State state() const; + +signals: + void stateChanged(QAudio::State); + void notify(); + +public: + void setVolume(qreal); + qreal volume() const; + QString category() const; + void setCategory(const QString &category); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiooutputselectorcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiooutputselectorcontrol.sip new file mode 100644 index 0000000..2b8984f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiooutputselectorcontrol.sip @@ -0,0 +1,45 @@ +// qaudiooutputselectorcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioOutputSelectorControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAudioOutputSelectorControl(); + virtual QList availableOutputs() const = 0; + virtual QString outputDescription(const QString &name) const = 0; + virtual QString defaultOutput() const = 0; + virtual QString activeOutput() const = 0; + +public slots: + virtual void setActiveOutput(const QString &name) = 0; + +signals: + void activeOutputChanged(const QString &name); + void availableOutputsChanged(); + +protected: + explicit QAudioOutputSelectorControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioprobe.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioprobe.sip new file mode 100644 index 0000000..e388388 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudioprobe.sip @@ -0,0 +1,39 @@ +// qaudioprobe.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioProbe : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAudioProbe(QObject *parent /TransferThis/ = 0); + virtual ~QAudioProbe(); + bool setSource(QMediaObject *source); + bool setSource(QMediaRecorder *source); + bool isActive() const; + +signals: + void audioBufferProbed(const QAudioBuffer &audioBuffer); + void flush(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiorecorder.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiorecorder.sip new file mode 100644 index 0000000..a0780bb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiorecorder.sip @@ -0,0 +1,48 @@ +// qaudiorecorder.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioRecorder : public QMediaRecorder +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_1 -) + explicit QAudioRecorder(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QAudioRecorder(QObject *parent /TransferThis/ = 0); +%End + virtual ~QAudioRecorder(); + QStringList audioInputs() const; + QString defaultAudioInput() const; + QString audioInputDescription(const QString &name) const; + QString audioInput() const; + +public slots: + void setAudioInput(const QString &name); + +signals: + void audioInputChanged(const QString &name); + void availableAudioInputsChanged(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiorolecontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiorolecontrol.sip new file mode 100644 index 0000000..5abaa0a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qaudiorolecontrol.sip @@ -0,0 +1,44 @@ +// qaudiorolecontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_6_0 -) + +class QAudioRoleControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAudioRoleControl(); + virtual QAudio::Role audioRole() const = 0; + virtual void setAudioRole(QAudio::Role role) = 0; + virtual QList supportedAudioRoles() const = 0; + +signals: + void audioRoleChanged(QAudio::Role role); + +protected: + explicit QAudioRoleControl(QObject *parent /TransferThis/ = 0); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamera.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamera.sip new file mode 100644 index 0000000..020350a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamera.sip @@ -0,0 +1,203 @@ +// qcamera.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCamera : public QMediaObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Status + { + UnavailableStatus, + UnloadedStatus, + LoadingStatus, + UnloadingStatus, + LoadedStatus, + StandbyStatus, + StartingStatus, + StoppingStatus, + ActiveStatus, + }; + + enum State + { + UnloadedState, + LoadedState, + ActiveState, + }; + + enum CaptureMode + { + CaptureViewfinder, + CaptureStillImage, + CaptureVideo, + }; + + typedef QFlags CaptureModes; + + enum Error + { + NoError, + CameraError, + InvalidRequestError, + ServiceMissingError, + NotSupportedFeatureError, + }; + + enum LockStatus + { + Unlocked, + Searching, + Locked, + }; + + enum LockChangeReason + { + UserRequest, + LockAcquired, + LockFailed, + LockLost, + LockTemporaryLost, + }; + + enum LockType + { + NoLock, + LockExposure, + LockWhiteBalance, + LockFocus, + }; + + typedef QFlags LockTypes; +%If (Qt_5_3_0 -) + + enum Position + { + UnspecifiedPosition, + BackFace, + FrontFace, + }; + +%End +%If (Qt_5_6_1 -) + explicit QCamera(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QCamera(QObject *parent /TransferThis/ = 0); +%End + QCamera(const QByteArray &device, QObject *parent /TransferThis/ = 0); +%If (Qt_5_3_0 -) + QCamera(const QCameraInfo &cameraInfo, QObject *parent /TransferThis/ = 0); +%End +%If (Qt_5_3_0 -) + QCamera(QCamera::Position position, QObject *parent /TransferThis/ = 0); +%End + virtual ~QCamera(); + static QList availableDevices(); + static QString deviceDescription(const QByteArray &device); + virtual QMultimedia::AvailabilityStatus availability() const; + QCamera::State state() const; + QCamera::Status status() const; + QCamera::CaptureModes captureMode() const; + bool isCaptureModeSupported(QCamera::CaptureModes mode) const; + QCameraExposure *exposure() const; + QCameraFocus *focus() const; + QCameraImageProcessing *imageProcessing() const; + void setViewfinder(QVideoWidget *viewfinder); + void setViewfinder(QGraphicsVideoItem *viewfinder); + void setViewfinder(QAbstractVideoSurface *surface); + QCamera::Error error() const; + QString errorString() const; + QCamera::LockTypes supportedLocks() const; + QCamera::LockTypes requestedLocks() const; + QCamera::LockStatus lockStatus() const; + QCamera::LockStatus lockStatus(QCamera::LockType lock) const; + +public slots: + void setCaptureMode(QCamera::CaptureModes mode); + void load(); + void unload(); + void start(); + void stop(); + void searchAndLock(); + void unlock(); + void searchAndLock(QCamera::LockTypes locks); + void unlock(QCamera::LockTypes locks); + +signals: + void stateChanged(QCamera::State); + void captureModeChanged(QCamera::CaptureModes); + void statusChanged(QCamera::Status); + void locked(); + void lockFailed(); + void lockStatusChanged(QCamera::LockStatus, QCamera::LockChangeReason); + void lockStatusChanged(QCamera::LockType, QCamera::LockStatus, QCamera::LockChangeReason); + void error(QCamera::Error); +%If (Qt_5_15_0 -) + void errorOccurred(QCamera::Error); +%End + +public: +%If (Qt_5_5_0 -) + + struct FrameRateRange + { +%TypeHeaderCode +#include +%End + + FrameRateRange(qreal minimum, qreal maximum); + FrameRateRange(); + qreal minimumFrameRate; + qreal maximumFrameRate; + }; + +%End +%If (Qt_5_5_0 -) + QCameraViewfinderSettings viewfinderSettings() const; +%End +%If (Qt_5_5_0 -) + void setViewfinderSettings(const QCameraViewfinderSettings &settings); +%End +%If (Qt_5_5_0 -) + QList supportedViewfinderSettings(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const; +%End +%If (Qt_5_5_0 -) + QList supportedViewfinderResolutions(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const; +%End +%If (Qt_5_5_0 -) + QList supportedViewfinderFrameRateRanges(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const; +%End +%If (Qt_5_5_0 -) + QList supportedViewfinderPixelFormats(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const; +%End +}; + +QFlags operator|(QCamera::LockType f1, QFlags f2); +%If (Qt_5_5_0 -) +bool operator==(const QCamera::FrameRateRange &r1, const QCamera::FrameRateRange &r2); +%End +%If (Qt_5_5_0 -) +bool operator!=(const QCamera::FrameRateRange &r1, const QCamera::FrameRateRange &r2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracapturebufferformatcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracapturebufferformatcontrol.sip new file mode 100644 index 0000000..9b84fe8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracapturebufferformatcontrol.sip @@ -0,0 +1,40 @@ +// qcameracapturebufferformatcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraCaptureBufferFormatControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraCaptureBufferFormatControl(); + virtual QList supportedBufferFormats() const = 0; + virtual QVideoFrame::PixelFormat bufferFormat() const = 0; + virtual void setBufferFormat(QVideoFrame::PixelFormat format) = 0; + +signals: + void bufferFormatChanged(QVideoFrame::PixelFormat format); + +protected: + explicit QCameraCaptureBufferFormatControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracapturedestinationcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracapturedestinationcontrol.sip new file mode 100644 index 0000000..fa4da11 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracapturedestinationcontrol.sip @@ -0,0 +1,40 @@ +// qcameracapturedestinationcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraCaptureDestinationControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraCaptureDestinationControl(); + virtual bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const = 0; + virtual QCameraImageCapture::CaptureDestinations captureDestination() const = 0; + virtual void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) = 0; + +signals: + void captureDestinationChanged(QCameraImageCapture::CaptureDestinations destination); + +protected: + explicit QCameraCaptureDestinationControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracontrol.sip new file mode 100644 index 0000000..f0194a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameracontrol.sip @@ -0,0 +1,56 @@ +// qcameracontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + enum PropertyChangeType + { + CaptureMode, + ImageEncodingSettings, + VideoEncodingSettings, + Viewfinder, + ViewfinderSettings, + }; + + virtual ~QCameraControl(); + virtual QCamera::State state() const = 0; + virtual void setState(QCamera::State state) = 0; + virtual QCamera::Status status() const = 0; + virtual QCamera::CaptureModes captureMode() const = 0; + virtual void setCaptureMode(QCamera::CaptureModes) = 0; + virtual bool isCaptureModeSupported(QCamera::CaptureModes mode) const = 0; + virtual bool canChangeProperty(QCameraControl::PropertyChangeType changeType, QCamera::Status status) const = 0; + +signals: + void stateChanged(QCamera::State); + void statusChanged(QCamera::Status); + void error(int error, const QString &errorString); + void captureModeChanged(QCamera::CaptureModes mode); + +protected: + explicit QCameraControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraexposure.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraexposure.sip new file mode 100644 index 0000000..428a95d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraexposure.sip @@ -0,0 +1,155 @@ +// qcameraexposure.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraExposure : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum FlashMode + { + FlashAuto, + FlashOff, + FlashOn, + FlashRedEyeReduction, + FlashFill, + FlashTorch, + FlashVideoLight, + FlashSlowSyncFrontCurtain, + FlashSlowSyncRearCurtain, + FlashManual, + }; + + typedef QFlags FlashModes; + + enum ExposureMode + { + ExposureAuto, + ExposureManual, + ExposurePortrait, + ExposureNight, + ExposureBacklight, + ExposureSpotlight, + ExposureSports, + ExposureSnow, + ExposureBeach, + ExposureLargeAperture, + ExposureSmallAperture, +%If (Qt_5_5_0 -) + ExposureAction, +%End +%If (Qt_5_5_0 -) + ExposureLandscape, +%End +%If (Qt_5_5_0 -) + ExposureNightPortrait, +%End +%If (Qt_5_5_0 -) + ExposureTheatre, +%End +%If (Qt_5_5_0 -) + ExposureSunset, +%End +%If (Qt_5_5_0 -) + ExposureSteadyPhoto, +%End +%If (Qt_5_5_0 -) + ExposureFireworks, +%End +%If (Qt_5_5_0 -) + ExposureParty, +%End +%If (Qt_5_5_0 -) + ExposureCandlelight, +%End +%If (Qt_5_5_0 -) + ExposureBarcode, +%End + ExposureModeVendor, + }; + + enum MeteringMode + { + MeteringMatrix, + MeteringAverage, + MeteringSpot, + }; + + bool isAvailable() const; + QCameraExposure::FlashModes flashMode() const; + bool isFlashModeSupported(QCameraExposure::FlashModes mode) const; + bool isFlashReady() const; + QCameraExposure::ExposureMode exposureMode() const; + bool isExposureModeSupported(QCameraExposure::ExposureMode mode) const; + qreal exposureCompensation() const; + QCameraExposure::MeteringMode meteringMode() const; + bool isMeteringModeSupported(QCameraExposure::MeteringMode mode) const; + QPointF spotMeteringPoint() const; + void setSpotMeteringPoint(const QPointF &point); + int isoSensitivity() const; + qreal aperture() const; + qreal shutterSpeed() const; + int requestedIsoSensitivity() const; + qreal requestedAperture() const; + qreal requestedShutterSpeed() const; + QList supportedIsoSensitivities(bool *continuous = 0) const; + QList supportedApertures(bool *continuous = 0) const; + QList supportedShutterSpeeds(bool *continuous = 0) const; + +public slots: + void setFlashMode(QCameraExposure::FlashModes mode); + void setExposureMode(QCameraExposure::ExposureMode mode); + void setMeteringMode(QCameraExposure::MeteringMode mode); + void setExposureCompensation(qreal ev); + void setManualIsoSensitivity(int iso); + void setAutoIsoSensitivity(); + void setManualAperture(qreal aperture); + void setAutoAperture(); + void setManualShutterSpeed(qreal seconds); + void setAutoShutterSpeed(); + +signals: + void flashReady(bool); + void apertureChanged(qreal); + void apertureRangeChanged(); + void shutterSpeedChanged(qreal); + void shutterSpeedRangeChanged(); + void isoSensitivityChanged(int); + void exposureCompensationChanged(qreal); + +private: + explicit QCameraExposure(QCamera *parent /TransferThis/ = 0); + +protected: +%If (Qt_5_14_0 -) + virtual ~QCameraExposure(); +%End + +private: +%If (- Qt_5_14_0) + virtual ~QCameraExposure(); +%End +}; + +QFlags operator|(QCameraExposure::FlashMode f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraexposurecontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraexposurecontrol.sip new file mode 100644 index 0000000..0521901 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraexposurecontrol.sip @@ -0,0 +1,60 @@ +// qcameraexposurecontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraExposureControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraExposureControl(); + + enum ExposureParameter + { + ISO, + Aperture, + ShutterSpeed, + ExposureCompensation, + FlashPower, + FlashCompensation, + TorchPower, + SpotMeteringPoint, + ExposureMode, + MeteringMode, + ExtendedExposureParameter, + }; + + virtual bool isParameterSupported(QCameraExposureControl::ExposureParameter parameter) const = 0; + virtual QVariantList supportedParameterRange(QCameraExposureControl::ExposureParameter parameter, bool *continuous) const = 0; + virtual QVariant requestedValue(QCameraExposureControl::ExposureParameter parameter) const = 0; + virtual QVariant actualValue(QCameraExposureControl::ExposureParameter parameter) const = 0; + virtual bool setValue(QCameraExposureControl::ExposureParameter parameter, const QVariant &value) = 0; + +signals: + void requestedValueChanged(int parameter); + void actualValueChanged(int parameter); + void parameterRangeChanged(int parameter); + +protected: + explicit QCameraExposureControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafeedbackcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafeedbackcontrol.sip new file mode 100644 index 0000000..1328f64 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafeedbackcontrol.sip @@ -0,0 +1,54 @@ +// qcamerafeedbackcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraFeedbackControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + enum EventType + { + ViewfinderStarted, + ViewfinderStopped, + ImageCaptured, + ImageSaved, + ImageError, + RecordingStarted, + RecordingInProgress, + RecordingStopped, + AutoFocusInProgress, + AutoFocusLocked, + AutoFocusFailed, + }; + + virtual ~QCameraFeedbackControl(); + virtual bool isEventFeedbackLocked(QCameraFeedbackControl::EventType) const = 0; + virtual bool isEventFeedbackEnabled(QCameraFeedbackControl::EventType) const = 0; + virtual bool setEventFeedbackEnabled(QCameraFeedbackControl::EventType, bool) = 0; + virtual void resetEventFeedback(QCameraFeedbackControl::EventType) = 0; + virtual bool setEventFeedbackSound(QCameraFeedbackControl::EventType, const QString &filePath) = 0; + +protected: + explicit QCameraFeedbackControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraflashcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraflashcontrol.sip new file mode 100644 index 0000000..16c2ec6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraflashcontrol.sip @@ -0,0 +1,41 @@ +// qcameraflashcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraFlashControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraFlashControl(); + virtual QCameraExposure::FlashModes flashMode() const = 0; + virtual void setFlashMode(QCameraExposure::FlashModes mode) = 0; + virtual bool isFlashModeSupported(QCameraExposure::FlashModes mode) const = 0; + virtual bool isFlashReady() const = 0; + +signals: + void flashReady(bool); + +protected: + explicit QCameraFlashControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafocus.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafocus.sip new file mode 100644 index 0000000..6e3a141 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafocus.sip @@ -0,0 +1,114 @@ +// qcamerafocus.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraFocusZone +{ +%TypeHeaderCode +#include +%End + +public: + enum FocusZoneStatus + { + Invalid, + Unused, + Selected, + Focused, + }; + + QCameraFocusZone(const QCameraFocusZone &other); + bool operator==(const QCameraFocusZone &other) const; + bool operator!=(const QCameraFocusZone &other) const; + ~QCameraFocusZone(); + bool isValid() const; + QRectF area() const; + QCameraFocusZone::FocusZoneStatus status() const; +}; + +typedef QList QCameraFocusZoneList; + +class QCameraFocus : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum FocusMode + { + ManualFocus, + HyperfocalFocus, + InfinityFocus, + AutoFocus, + ContinuousFocus, + MacroFocus, + }; + + typedef QFlags FocusModes; + + enum FocusPointMode + { + FocusPointAuto, + FocusPointCenter, + FocusPointFaceDetection, + FocusPointCustom, + }; + + bool isAvailable() const; + QCameraFocus::FocusModes focusMode() const; + void setFocusMode(QCameraFocus::FocusModes mode); + bool isFocusModeSupported(QCameraFocus::FocusModes mode) const; + QCameraFocus::FocusPointMode focusPointMode() const; + void setFocusPointMode(QCameraFocus::FocusPointMode mode); + bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const; + QPointF customFocusPoint() const; + void setCustomFocusPoint(const QPointF &point); + QCameraFocusZoneList focusZones() const; + qreal maximumOpticalZoom() const; + qreal maximumDigitalZoom() const; + qreal opticalZoom() const; + qreal digitalZoom() const; + void zoomTo(qreal opticalZoom, qreal digitalZoom); + +signals: + void opticalZoomChanged(qreal); + void digitalZoomChanged(qreal); + void focusZonesChanged(); + void maximumOpticalZoomChanged(qreal); + void maximumDigitalZoomChanged(qreal); + +private: + QCameraFocus(QCamera *camera); + +protected: +%If (Qt_5_14_0 -) + virtual ~QCameraFocus(); +%End + +private: +%If (- Qt_5_14_0) + virtual ~QCameraFocus(); +%End + QCameraFocus(const QCameraFocus &); +}; + +QFlags operator|(QCameraFocus::FocusMode f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafocuscontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafocuscontrol.sip new file mode 100644 index 0000000..f9f4f12 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerafocuscontrol.sip @@ -0,0 +1,49 @@ +// qcamerafocuscontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraFocusControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraFocusControl(); + virtual QCameraFocus::FocusModes focusMode() const = 0; + virtual void setFocusMode(QCameraFocus::FocusModes mode) = 0; + virtual bool isFocusModeSupported(QCameraFocus::FocusModes mode) const = 0; + virtual QCameraFocus::FocusPointMode focusPointMode() const = 0; + virtual void setFocusPointMode(QCameraFocus::FocusPointMode mode) = 0; + virtual bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const = 0; + virtual QPointF customFocusPoint() const = 0; + virtual void setCustomFocusPoint(const QPointF &point) = 0; + virtual QCameraFocusZoneList focusZones() const = 0; + +signals: + void focusModeChanged(QCameraFocus::FocusModes mode); + void focusPointModeChanged(QCameraFocus::FocusPointMode mode); + void customFocusPointChanged(const QPointF &point); + void focusZonesChanged(); + +protected: + explicit QCameraFocusControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimagecapture.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimagecapture.sip new file mode 100644 index 0000000..1bcd160 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimagecapture.sip @@ -0,0 +1,91 @@ +// qcameraimagecapture.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraImageCapture : public QObject, public QMediaBindableInterface +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + NotReadyError, + ResourceError, + OutOfSpaceError, + NotSupportedFeatureError, + FormatError, + }; + + enum DriveMode + { + SingleImageCapture, + }; + + enum CaptureDestination + { + CaptureToFile, + CaptureToBuffer, + }; + + typedef QFlags CaptureDestinations; + QCameraImageCapture(QMediaObject *mediaObject, QObject *parent /TransferThis/ = 0); + virtual ~QCameraImageCapture(); + bool isAvailable() const; + QMultimedia::AvailabilityStatus availability() const; + virtual QMediaObject *mediaObject() const; + QCameraImageCapture::Error error() const; + QString errorString() const; + bool isReadyForCapture() const; + QStringList supportedImageCodecs() const; + QString imageCodecDescription(const QString &codecName) const; + QList supportedResolutions(const QImageEncoderSettings &settings = QImageEncoderSettings(), bool *continuous = 0) const; + QImageEncoderSettings encodingSettings() const; + void setEncodingSettings(const QImageEncoderSettings &settings); + QList supportedBufferFormats() const; + QVideoFrame::PixelFormat bufferFormat() const; + void setBufferFormat(const QVideoFrame::PixelFormat format); + bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const; + QCameraImageCapture::CaptureDestinations captureDestination() const; + void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination); + +public slots: + int capture(const QString &file = QString()) /ReleaseGIL/; + void cancelCapture(); + +signals: + void error(int id, QCameraImageCapture::Error error, const QString &errorString); + void readyForCaptureChanged(bool); + void bufferFormatChanged(QVideoFrame::PixelFormat); + void captureDestinationChanged(QCameraImageCapture::CaptureDestinations); + void imageExposed(int id); + void imageCaptured(int id, const QImage &preview); + void imageMetadataAvailable(int id, const QString &key, const QVariant &value); + void imageAvailable(int id, const QVideoFrame &image); + void imageSaved(int id, const QString &fileName); + +protected: + virtual bool setMediaObject(QMediaObject *); +}; + +QFlags operator|(QCameraImageCapture::CaptureDestination f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimagecapturecontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimagecapturecontrol.sip new file mode 100644 index 0000000..26457ce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimagecapturecontrol.sip @@ -0,0 +1,48 @@ +// qcameraimagecapturecontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraImageCaptureControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraImageCaptureControl(); + virtual bool isReadyForCapture() const = 0; + virtual QCameraImageCapture::DriveMode driveMode() const = 0; + virtual void setDriveMode(QCameraImageCapture::DriveMode mode) = 0; + virtual int capture(const QString &fileName) = 0; + virtual void cancelCapture() = 0; + +signals: + void readyForCaptureChanged(bool ready); + void imageExposed(int requestId); + void imageCaptured(int requestId, const QImage &preview); + void imageMetadataAvailable(int id, const QString &key, const QVariant &value); + void imageAvailable(int requestId, const QVideoFrame &buffer); + void imageSaved(int requestId, const QString &fileName); + void error(int id, int error, const QString &errorString); + +protected: + explicit QCameraImageCaptureControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimageprocessing.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimageprocessing.sip new file mode 100644 index 0000000..cf8cdc1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimageprocessing.sip @@ -0,0 +1,106 @@ +// qcameraimageprocessing.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraImageProcessing : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum WhiteBalanceMode + { + WhiteBalanceAuto, + WhiteBalanceManual, + WhiteBalanceSunlight, + WhiteBalanceCloudy, + WhiteBalanceShade, + WhiteBalanceTungsten, + WhiteBalanceFluorescent, + WhiteBalanceFlash, + WhiteBalanceSunset, + WhiteBalanceVendor, + }; + + bool isAvailable() const; + QCameraImageProcessing::WhiteBalanceMode whiteBalanceMode() const; + void setWhiteBalanceMode(QCameraImageProcessing::WhiteBalanceMode mode); + bool isWhiteBalanceModeSupported(QCameraImageProcessing::WhiteBalanceMode mode) const; + qreal manualWhiteBalance() const; + void setManualWhiteBalance(qreal colorTemperature); + qreal contrast() const; + void setContrast(qreal value); + qreal saturation() const; + void setSaturation(qreal value); + qreal sharpeningLevel() const; + void setSharpeningLevel(qreal value); + qreal denoisingLevel() const; + void setDenoisingLevel(qreal value); + +private: + QCameraImageProcessing(QCamera *camera); + +protected: +%If (Qt_5_14_0 -) + virtual ~QCameraImageProcessing(); +%End + +private: +%If (- Qt_5_14_0) + virtual ~QCameraImageProcessing(); +%End + QCameraImageProcessing(const QCameraImageProcessing &); + +public: +%If (Qt_5_5_0 -) + + enum ColorFilter + { + ColorFilterNone, + ColorFilterGrayscale, + ColorFilterNegative, + ColorFilterSolarize, + ColorFilterSepia, + ColorFilterPosterize, + ColorFilterWhiteboard, + ColorFilterBlackboard, + ColorFilterAqua, + ColorFilterVendor, + }; + +%End +%If (Qt_5_5_0 -) + QCameraImageProcessing::ColorFilter colorFilter() const; +%End +%If (Qt_5_5_0 -) + void setColorFilter(QCameraImageProcessing::ColorFilter filter); +%End +%If (Qt_5_5_0 -) + bool isColorFilterSupported(QCameraImageProcessing::ColorFilter filter) const; +%End +%If (Qt_5_7_0 -) + qreal brightness() const; +%End +%If (Qt_5_7_0 -) + void setBrightness(qreal value); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimageprocessingcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimageprocessingcontrol.sip new file mode 100644 index 0000000..42f1cc4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraimageprocessingcontrol.sip @@ -0,0 +1,57 @@ +// qcameraimageprocessingcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraImageProcessingControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraImageProcessingControl(); + + enum ProcessingParameter + { + WhiteBalancePreset, + ColorTemperature, + Contrast, + Saturation, + Brightness, + Sharpening, + Denoising, + ContrastAdjustment, + SaturationAdjustment, + BrightnessAdjustment, + SharpeningAdjustment, + DenoisingAdjustment, + ColorFilter, + ExtendedParameter, + }; + + virtual bool isParameterSupported(QCameraImageProcessingControl::ProcessingParameter) const = 0; + virtual bool isParameterValueSupported(QCameraImageProcessingControl::ProcessingParameter parameter, const QVariant &value) const = 0; + virtual QVariant parameter(QCameraImageProcessingControl::ProcessingParameter parameter) const = 0; + virtual void setParameter(QCameraImageProcessingControl::ProcessingParameter parameter, const QVariant &value) = 0; + +protected: + explicit QCameraImageProcessingControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerainfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerainfo.sip new file mode 100644 index 0000000..b3960d4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerainfo.sip @@ -0,0 +1,47 @@ +// qcamerainfo.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +class QCameraInfo +{ +%TypeHeaderCode +#include +%End + +public: + explicit QCameraInfo(const QByteArray &name = QByteArray()); + explicit QCameraInfo(const QCamera &camera); + QCameraInfo(const QCameraInfo &other); + ~QCameraInfo(); + bool isNull() const; + QString deviceName() const; + QString description() const; + QCamera::Position position() const; + int orientation() const; + static QCameraInfo defaultCamera(); + static QList availableCameras(QCamera::Position position = QCamera::UnspecifiedPosition); + bool operator==(const QCameraInfo &other) const; + bool operator!=(const QCameraInfo &other) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerainfocontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerainfocontrol.sip new file mode 100644 index 0000000..c86abc6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerainfocontrol.sip @@ -0,0 +1,36 @@ +// qcamerainfocontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraInfoControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraInfoControl(); + virtual QCamera::Position cameraPosition(const QString &deviceName) const = 0; + virtual int cameraOrientation(const QString &deviceName) const = 0; + +protected: + explicit QCameraInfoControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameralockscontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameralockscontrol.sip new file mode 100644 index 0000000..4d12fa2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameralockscontrol.sip @@ -0,0 +1,41 @@ +// qcameralockscontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraLocksControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraLocksControl(); + virtual QCamera::LockTypes supportedLocks() const = 0; + virtual QCamera::LockStatus lockStatus(QCamera::LockType lock) const = 0; + virtual void searchAndLock(QCamera::LockTypes locks) = 0; + virtual void unlock(QCamera::LockTypes locks) = 0; + +signals: + void lockStatusChanged(QCamera::LockType type, QCamera::LockStatus status, QCamera::LockChangeReason reason); + +protected: + explicit QCameraLocksControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraviewfindersettings.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraviewfindersettings.sip new file mode 100644 index 0000000..70fe9bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraviewfindersettings.sip @@ -0,0 +1,57 @@ +// qcameraviewfindersettings.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QCameraViewfinderSettings +{ +%TypeHeaderCode +#include +%End + +public: + QCameraViewfinderSettings(); + QCameraViewfinderSettings(const QCameraViewfinderSettings &other); + ~QCameraViewfinderSettings(); + void swap(QCameraViewfinderSettings &other /Constrained/); + bool isNull() const; + QSize resolution() const; + void setResolution(const QSize &); + void setResolution(int width, int height); + qreal minimumFrameRate() const; + void setMinimumFrameRate(qreal rate); + qreal maximumFrameRate() const; + void setMaximumFrameRate(qreal rate); + QVideoFrame::PixelFormat pixelFormat() const; + void setPixelFormat(QVideoFrame::PixelFormat format); + QSize pixelAspectRatio() const; + void setPixelAspectRatio(const QSize &ratio); + void setPixelAspectRatio(int horizontal, int vertical); +}; + +%End +%If (Qt_5_5_0 -) +bool operator==(const QCameraViewfinderSettings &lhs, const QCameraViewfinderSettings &rhs); +%End +%If (Qt_5_5_0 -) +bool operator!=(const QCameraViewfinderSettings &lhs, const QCameraViewfinderSettings &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraviewfindersettingscontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraviewfindersettingscontrol.sip new file mode 100644 index 0000000..96ab918 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcameraviewfindersettingscontrol.sip @@ -0,0 +1,63 @@ +// qcameraviewfindersettingscontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraViewfinderSettingsControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + enum ViewfinderParameter + { + Resolution, + PixelAspectRatio, + MinimumFrameRate, + MaximumFrameRate, + PixelFormat, + UserParameter, + }; + + virtual ~QCameraViewfinderSettingsControl(); + virtual bool isViewfinderParameterSupported(QCameraViewfinderSettingsControl::ViewfinderParameter parameter) const = 0; + virtual QVariant viewfinderParameter(QCameraViewfinderSettingsControl::ViewfinderParameter parameter) const = 0; + virtual void setViewfinderParameter(QCameraViewfinderSettingsControl::ViewfinderParameter parameter, const QVariant &value) = 0; + +protected: + explicit QCameraViewfinderSettingsControl(QObject *parent /TransferThis/ = 0); +}; + +class QCameraViewfinderSettingsControl2 : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraViewfinderSettingsControl2(); + virtual QList supportedViewfinderSettings() const = 0; + virtual QCameraViewfinderSettings viewfinderSettings() const = 0; + virtual void setViewfinderSettings(const QCameraViewfinderSettings &settings) = 0; + +protected: + explicit QCameraViewfinderSettingsControl2(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerazoomcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerazoomcontrol.sip new file mode 100644 index 0000000..b7b14b8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcamerazoomcontrol.sip @@ -0,0 +1,49 @@ +// qcamerazoomcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraZoomControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCameraZoomControl(); + virtual qreal maximumOpticalZoom() const = 0; + virtual qreal maximumDigitalZoom() const = 0; + virtual qreal requestedOpticalZoom() const = 0; + virtual qreal requestedDigitalZoom() const = 0; + virtual qreal currentOpticalZoom() const = 0; + virtual qreal currentDigitalZoom() const = 0; + virtual void zoomTo(qreal optical, qreal digital) = 0; + +signals: + void maximumOpticalZoomChanged(qreal); + void maximumDigitalZoomChanged(qreal); + void requestedOpticalZoomChanged(qreal opticalZoom); + void requestedDigitalZoomChanged(qreal digitalZoom); + void currentOpticalZoomChanged(qreal opticalZoom); + void currentDigitalZoomChanged(qreal digitalZoom); + +protected: + explicit QCameraZoomControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcustomaudiorolecontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcustomaudiorolecontrol.sip new file mode 100644 index 0000000..d542471 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qcustomaudiorolecontrol.sip @@ -0,0 +1,44 @@ +// qcustomaudiorolecontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_11_0 -) + +class QCustomAudioRoleControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QCustomAudioRoleControl(); + virtual QString customAudioRole() const = 0; + virtual void setCustomAudioRole(const QString &role) = 0; + virtual QStringList supportedCustomAudioRoles() const = 0; + +signals: + void customAudioRoleChanged(const QString &role); + +protected: + explicit QCustomAudioRoleControl(QObject *parent /TransferThis/ = 0); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qimageencodercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qimageencodercontrol.sip new file mode 100644 index 0000000..28936ca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qimageencodercontrol.sip @@ -0,0 +1,39 @@ +// qimageencodercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QImageEncoderControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QImageEncoderControl(); + virtual QStringList supportedImageCodecs() const = 0; + virtual QString imageCodecDescription(const QString &codec) const = 0; + virtual QList supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const = 0; + virtual QImageEncoderSettings imageSettings() const = 0; + virtual void setImageSettings(const QImageEncoderSettings &settings) = 0; + +protected: + explicit QImageEncoderControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaaudioprobecontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaaudioprobecontrol.sip new file mode 100644 index 0000000..cb977d9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaaudioprobecontrol.sip @@ -0,0 +1,38 @@ +// qmediaaudioprobecontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaAudioProbeControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaAudioProbeControl(); + +signals: + void audioBufferProbed(const QAudioBuffer &buffer); + void flush(); + +protected: + explicit QMediaAudioProbeControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaavailabilitycontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaavailabilitycontrol.sip new file mode 100644 index 0000000..650591d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaavailabilitycontrol.sip @@ -0,0 +1,38 @@ +// qmediaavailabilitycontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaAvailabilityControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaAvailabilityControl(); + virtual QMultimedia::AvailabilityStatus availability() const = 0; + +signals: + void availabilityChanged(QMultimedia::AvailabilityStatus availability); + +protected: + explicit QMediaAvailabilityControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediabindableinterface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediabindableinterface.sip new file mode 100644 index 0000000..8baa47b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediabindableinterface.sip @@ -0,0 +1,35 @@ +// qmediabindableinterface.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaBindableInterface +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaBindableInterface(); + virtual QMediaObject *mediaObject() const = 0; + +protected: + virtual bool setMediaObject(QMediaObject *object) = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontainercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontainercontrol.sip new file mode 100644 index 0000000..90e7b8f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontainercontrol.sip @@ -0,0 +1,38 @@ +// qmediacontainercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaContainerControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaContainerControl(); + virtual QStringList supportedContainers() const = 0; + virtual QString containerFormat() const = 0; + virtual void setContainerFormat(const QString &format) = 0; + virtual QString containerDescription(const QString &formatMimeType) const = 0; + +protected: + explicit QMediaContainerControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontent.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontent.sip new file mode 100644 index 0000000..2558efd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontent.sip @@ -0,0 +1,49 @@ +// qmediacontent.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaContent +{ +%TypeHeaderCode +#include +%End + +public: + QMediaContent(); + QMediaContent(const QUrl &contentUrl); + QMediaContent(const QNetworkRequest &contentRequest); + QMediaContent(const QMediaResource &contentResource); + QMediaContent(const QMediaResourceList &resources); + QMediaContent(const QMediaContent &other); + QMediaContent(QMediaPlaylist *playlist, const QUrl &contentUrl = QUrl()); + ~QMediaContent(); + bool operator==(const QMediaContent &other) const; + bool operator!=(const QMediaContent &other) const; + bool isNull() const; + QUrl canonicalUrl() const; + QNetworkRequest canonicalRequest() const; + QMediaResource canonicalResource() const; + QMediaResourceList resources() const; + QMediaPlaylist *playlist() const; +%If (Qt_5_14_0 -) + QNetworkRequest request() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontrol.sip new file mode 100644 index 0000000..fbfb6b7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediacontrol.sip @@ -0,0 +1,39 @@ +// qmediacontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaControl : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaControl(); + +protected: +%If (Qt_5_6_1 -) + explicit QMediaControl(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QMediaControl(QObject *parent /TransferThis/ = 0); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaencodersettings.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaencodersettings.sip new file mode 100644 index 0000000..22e4be5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaencodersettings.sip @@ -0,0 +1,110 @@ +// qmediaencodersettings.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAudioEncoderSettings +{ +%TypeHeaderCode +#include +%End + +public: + QAudioEncoderSettings(); + QAudioEncoderSettings(const QAudioEncoderSettings &other); + ~QAudioEncoderSettings(); + bool operator==(const QAudioEncoderSettings &other) const; + bool operator!=(const QAudioEncoderSettings &other) const; + bool isNull() const; + QMultimedia::EncodingMode encodingMode() const; + void setEncodingMode(QMultimedia::EncodingMode); + QString codec() const; + void setCodec(const QString &codec); + int bitRate() const; + void setBitRate(int bitrate); + int channelCount() const; + void setChannelCount(int channels); + int sampleRate() const; + void setSampleRate(int rate); + QMultimedia::EncodingQuality quality() const; + void setQuality(QMultimedia::EncodingQuality quality); + QVariant encodingOption(const QString &option) const; + QVariantMap encodingOptions() const; + void setEncodingOption(const QString &option, const QVariant &value); + void setEncodingOptions(const QVariantMap &options); +}; + +class QVideoEncoderSettings +{ +%TypeHeaderCode +#include +%End + +public: + QVideoEncoderSettings(); + QVideoEncoderSettings(const QVideoEncoderSettings &other); + ~QVideoEncoderSettings(); + bool operator==(const QVideoEncoderSettings &other) const; + bool operator!=(const QVideoEncoderSettings &other) const; + bool isNull() const; + QMultimedia::EncodingMode encodingMode() const; + void setEncodingMode(QMultimedia::EncodingMode); + QString codec() const; + void setCodec(const QString &); + QSize resolution() const; + void setResolution(const QSize &); + void setResolution(int width, int height); + qreal frameRate() const; + void setFrameRate(qreal rate); + int bitRate() const; + void setBitRate(int bitrate); + QMultimedia::EncodingQuality quality() const; + void setQuality(QMultimedia::EncodingQuality quality); + QVariant encodingOption(const QString &option) const; + QVariantMap encodingOptions() const; + void setEncodingOption(const QString &option, const QVariant &value); + void setEncodingOptions(const QVariantMap &options); +}; + +class QImageEncoderSettings +{ +%TypeHeaderCode +#include +%End + +public: + QImageEncoderSettings(); + QImageEncoderSettings(const QImageEncoderSettings &other); + ~QImageEncoderSettings(); + bool operator==(const QImageEncoderSettings &other) const; + bool operator!=(const QImageEncoderSettings &other) const; + bool isNull() const; + QString codec() const; + void setCodec(const QString &); + QSize resolution() const; + void setResolution(const QSize &); + void setResolution(int width, int height); + QMultimedia::EncodingQuality quality() const; + void setQuality(QMultimedia::EncodingQuality quality); + QVariant encodingOption(const QString &option) const; + QVariantMap encodingOptions() const; + void setEncodingOption(const QString &option, const QVariant &value); + void setEncodingOptions(const QVariantMap &options); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediagaplessplaybackcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediagaplessplaybackcontrol.sip new file mode 100644 index 0000000..6faf6bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediagaplessplaybackcontrol.sip @@ -0,0 +1,44 @@ +// qmediagaplessplaybackcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaGaplessPlaybackControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaGaplessPlaybackControl(); + virtual QMediaContent nextMedia() const = 0; + virtual void setNextMedia(const QMediaContent &media) = 0; + virtual bool isCrossfadeSupported() const = 0; + virtual qreal crossfadeTime() const = 0; + virtual void setCrossfadeTime(qreal crossfadeTime) = 0; + +signals: + void crossfadeTimeChanged(qreal crossfadeTime); + void nextMediaChanged(const QMediaContent &media); + void advancedToNextMedia(); + +protected: + explicit QMediaGaplessPlaybackControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediametadata.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediametadata.sip new file mode 100644 index 0000000..423b3ff --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediametadata.sip @@ -0,0 +1,120 @@ +// qmediametadata.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QMediaMetaData +{ +%TypeHeaderCode +#include +%End + + const QString Title; + const QString SubTitle; + const QString Author; + const QString Comment; + const QString Description; + const QString Category; + const QString Genre; + const QString Year; + const QString Date; + const QString UserRating; + const QString Keywords; + const QString Language; + const QString Publisher; + const QString Copyright; + const QString ParentalRating; + const QString RatingOrganization; + const QString Size; + const QString MediaType; + const QString Duration; + const QString AudioBitRate; + const QString AudioCodec; + const QString AverageLevel; + const QString ChannelCount; + const QString PeakValue; + const QString SampleRate; + const QString AlbumTitle; + const QString AlbumArtist; + const QString ContributingArtist; + const QString Composer; + const QString Conductor; + const QString Lyrics; + const QString Mood; + const QString TrackNumber; + const QString TrackCount; + const QString CoverArtUrlSmall; + const QString CoverArtUrlLarge; + const QString Resolution; + const QString PixelAspectRatio; + const QString VideoFrameRate; + const QString VideoBitRate; + const QString VideoCodec; + const QString PosterUrl; + const QString ChapterNumber; + const QString Director; + const QString LeadPerformer; + const QString Writer; + const QString CameraManufacturer; + const QString CameraModel; + const QString Event; + const QString Subject; + const QString Orientation; + const QString ExposureTime; + const QString FNumber; + const QString ExposureProgram; + const QString ISOSpeedRatings; + const QString ExposureBiasValue; + const QString DateTimeOriginal; + const QString DateTimeDigitized; + const QString SubjectDistance; + const QString MeteringMode; + const QString LightSource; + const QString Flash; + const QString FocalLength; + const QString ExposureMode; + const QString WhiteBalance; + const QString DigitalZoomRatio; + const QString FocalLengthIn35mmFilm; + const QString SceneCaptureType; + const QString GainControl; + const QString Contrast; + const QString Saturation; + const QString Sharpness; + const QString DeviceSettingDescription; + const QString GPSLatitude; + const QString GPSLongitude; + const QString GPSAltitude; + const QString GPSTimeStamp; + const QString GPSSatellites; + const QString GPSStatus; + const QString GPSDOP; + const QString GPSSpeed; + const QString GPSTrack; + const QString GPSTrackRef; + const QString GPSImgDirection; + const QString GPSImgDirectionRef; + const QString GPSMapDatum; + const QString GPSProcessingMethod; + const QString GPSAreaInformation; + const QString PosterImage; + const QString CoverArtImage; + const QString ThumbnailImage; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmedianetworkaccesscontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmedianetworkaccesscontrol.sip new file mode 100644 index 0000000..215ba5c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmedianetworkaccesscontrol.sip @@ -0,0 +1,39 @@ +// qmedianetworkaccesscontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaNetworkAccessControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaNetworkAccessControl(); + virtual void setConfigurations(const QList &configuration) = 0; + virtual QNetworkConfiguration currentConfiguration() const = 0; + +signals: + void configurationChanged(const QNetworkConfiguration &configuration); + +protected: + explicit QMediaNetworkAccessControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaobject.sip new file mode 100644 index 0000000..0665dbb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaobject.sip @@ -0,0 +1,54 @@ +// qmediaobject.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaObject : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaObject(); + virtual bool isAvailable() const; + virtual QMultimedia::AvailabilityStatus availability() const; + virtual QMediaService *service() const; + int notifyInterval() const; + void setNotifyInterval(int milliSeconds); + virtual bool bind(QObject *); + virtual void unbind(QObject *); + bool isMetaDataAvailable() const; + QVariant metaData(const QString &key) const; + QStringList availableMetaData() const; + +signals: + void notifyIntervalChanged(int milliSeconds); + void metaDataAvailableChanged(bool available); + void metaDataChanged(); + void metaDataChanged(const QString &key, const QVariant &value); + void availabilityChanged(QMultimedia::AvailabilityStatus availability /Constrained/); + void availabilityChanged(bool available); + +protected: + QMediaObject(QObject *parent /TransferThis/, QMediaService *service); + void addPropertyWatch(const QByteArray &name); + void removePropertyWatch(const QByteArray &name); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplayer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplayer.sip new file mode 100644 index 0000000..e6de71c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplayer.sip @@ -0,0 +1,164 @@ +// qmediaplayer.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsVideoItem /External/; +class QVideoWidget /External/; + +class QMediaPlayer : public QMediaObject +{ +%TypeHeaderCode +#include +%End + +public: + enum State + { + StoppedState, + PlayingState, + PausedState, + }; + + enum MediaStatus + { + UnknownMediaStatus, + NoMedia, + LoadingMedia, + LoadedMedia, + StalledMedia, + BufferingMedia, + BufferedMedia, + EndOfMedia, + InvalidMedia, + }; + + enum Flag + { + LowLatency, + StreamPlayback, + VideoSurface, + }; + + typedef QFlags Flags; + + enum Error + { + NoError, + ResourceError, + FormatError, + NetworkError, + AccessDeniedError, + ServiceMissingError, + }; + + QMediaPlayer(QObject *parent /TransferThis/ = 0, QMediaPlayer::Flags flags = QMediaPlayer::Flags()); + virtual ~QMediaPlayer(); + static QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList &codecs = QStringList(), QMediaPlayer::Flags flags = QMediaPlayer::Flags()); + static QStringList supportedMimeTypes(QMediaPlayer::Flags flags = QMediaPlayer::Flags()); + void setVideoOutput(QVideoWidget *); + void setVideoOutput(QGraphicsVideoItem *); + void setVideoOutput(QAbstractVideoSurface *surface); +%If (Qt_5_15_0 -) + void setVideoOutput(const QVector &surfaces); +%End + QMediaContent media() const; + const QIODevice *mediaStream() const; + QMediaPlaylist *playlist() const; + QMediaContent currentMedia() const; + QMediaPlayer::State state() const; + QMediaPlayer::MediaStatus mediaStatus() const; + qint64 duration() const; + qint64 position() const; + int volume() const; + bool isMuted() const; + bool isAudioAvailable() const; + bool isVideoAvailable() const; + int bufferStatus() const; + bool isSeekable() const; + qreal playbackRate() const; + QMediaPlayer::Error error() const; + QString errorString() const; + QNetworkConfiguration currentNetworkConfiguration() const; + virtual QMultimedia::AvailabilityStatus availability() const; + +public slots: + void play(); + void pause(); + void stop(); + void setPosition(qint64 position); + void setVolume(int volume); + void setMuted(bool muted); + void setPlaybackRate(qreal rate); + void setMedia(const QMediaContent &media, QIODevice *stream = 0); + void setPlaylist(QMediaPlaylist *playlist); + void setNetworkConfigurations(const QList &configurations); + +signals: + void mediaChanged(const QMediaContent &media); + void currentMediaChanged(const QMediaContent &media); + void stateChanged(QMediaPlayer::State newState); + void mediaStatusChanged(QMediaPlayer::MediaStatus status); + void durationChanged(qint64 duration); + void positionChanged(qint64 position); + void volumeChanged(int volume); + void mutedChanged(bool muted); + void audioAvailableChanged(bool available); + void videoAvailableChanged(bool videoAvailable); + void bufferStatusChanged(int percentFilled); + void seekableChanged(bool seekable); + void playbackRateChanged(qreal rate); + void error(QMediaPlayer::Error error); + void networkConfigurationChanged(const QNetworkConfiguration &configuration); + +public: + virtual bool bind(QObject *); + virtual void unbind(QObject *); +%If (Qt_5_6_0 -) + QAudio::Role audioRole() const; +%End +%If (Qt_5_6_0 -) + void setAudioRole(QAudio::Role audioRole); +%End +%If (Qt_5_6_0 -) + QList supportedAudioRoles() const; +%End + +signals: +%If (Qt_5_6_0 -) + void audioRoleChanged(QAudio::Role role); +%End + +public: +%If (Qt_5_11_0 -) + QString customAudioRole() const; +%End +%If (Qt_5_11_0 -) + void setCustomAudioRole(const QString &audioRole); +%End +%If (Qt_5_11_0 -) + QStringList supportedCustomAudioRoles() const; +%End + +signals: +%If (Qt_5_11_0 -) + void customAudioRoleChanged(const QString &role); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplayercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplayercontrol.sip new file mode 100644 index 0000000..12881a6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplayercontrol.sip @@ -0,0 +1,72 @@ +// qmediaplayercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaPlayerControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaPlayerControl(); + virtual QMediaPlayer::State state() const = 0; + virtual QMediaPlayer::MediaStatus mediaStatus() const = 0; + virtual qint64 duration() const = 0; + virtual qint64 position() const = 0; + virtual void setPosition(qint64 position) = 0; + virtual int volume() const = 0; + virtual void setVolume(int volume) = 0; + virtual bool isMuted() const = 0; + virtual void setMuted(bool mute) = 0; + virtual int bufferStatus() const = 0; + virtual bool isAudioAvailable() const = 0; + virtual bool isVideoAvailable() const = 0; + virtual bool isSeekable() const = 0; + virtual QMediaTimeRange availablePlaybackRanges() const = 0; + virtual qreal playbackRate() const = 0; + virtual void setPlaybackRate(qreal rate) = 0; + virtual QMediaContent media() const = 0; + virtual const QIODevice *mediaStream() const = 0; + virtual void setMedia(const QMediaContent &media, QIODevice *stream) = 0; + virtual void play() = 0; + virtual void pause() = 0; + virtual void stop() = 0; + +signals: + void mediaChanged(const QMediaContent &content); + void durationChanged(qint64 duration); + void positionChanged(qint64 position); + void stateChanged(QMediaPlayer::State newState); + void mediaStatusChanged(QMediaPlayer::MediaStatus status); + void volumeChanged(int volume); + void mutedChanged(bool mute); + void audioAvailableChanged(bool audioAvailable); + void videoAvailableChanged(bool videoAvailable); + void bufferStatusChanged(int percentFilled); + void seekableChanged(bool seekable); + void availablePlaybackRangesChanged(const QMediaTimeRange &ranges); + void playbackRateChanged(qreal rate); + void error(int error, const QString &errorString); + +protected: + explicit QMediaPlayerControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplaylist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplaylist.sip new file mode 100644 index 0000000..17efd3c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaplaylist.sip @@ -0,0 +1,104 @@ +// qmediaplaylist.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaPlaylist : public QObject, public QMediaBindableInterface +{ +%TypeHeaderCode +#include +%End + +public: + enum PlaybackMode + { + CurrentItemOnce, + CurrentItemInLoop, + Sequential, + Loop, + Random, + }; + + enum Error + { + NoError, + FormatError, + FormatNotSupportedError, + NetworkError, + AccessDeniedError, + }; + +%If (Qt_5_6_1 -) + explicit QMediaPlaylist(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QMediaPlaylist(QObject *parent /TransferThis/ = 0); +%End + virtual ~QMediaPlaylist(); + virtual QMediaObject *mediaObject() const; + QMediaPlaylist::PlaybackMode playbackMode() const; + void setPlaybackMode(QMediaPlaylist::PlaybackMode mode); + int currentIndex() const; + QMediaContent currentMedia() const; + int nextIndex(int steps = 1) const; + int previousIndex(int steps = 1) const; + QMediaContent media(int index) const; + int mediaCount() const; + bool isEmpty() const; + bool isReadOnly() const; + bool addMedia(const QMediaContent &content); + bool addMedia(const QList &items); + bool insertMedia(int index, const QMediaContent &content); + bool insertMedia(int index, const QList &items); + bool removeMedia(int pos); + bool removeMedia(int start, int end); + bool clear(); + void load(const QNetworkRequest &request, const char *format = 0) /ReleaseGIL/; + void load(const QUrl &location, const char *format = 0) /ReleaseGIL/; + void load(QIODevice *device, const char *format = 0) /ReleaseGIL/; + bool save(const QUrl &location, const char *format = 0) /ReleaseGIL/; + bool save(QIODevice *device, const char *format) /ReleaseGIL/; + QMediaPlaylist::Error error() const; + QString errorString() const; +%If (Qt_5_7_0 -) + bool moveMedia(int from, int to); +%End + +public slots: + void shuffle(); + void next(); + void previous(); + void setCurrentIndex(int index); + +signals: + void currentIndexChanged(int index); + void playbackModeChanged(QMediaPlaylist::PlaybackMode mode); + void currentMediaChanged(const QMediaContent &); + void mediaAboutToBeInserted(int start, int end); + void mediaInserted(int start, int end); + void mediaAboutToBeRemoved(int start, int end); + void mediaRemoved(int start, int end); + void mediaChanged(int start, int end); + void loaded(); + void loadFailed(); + +protected: + virtual bool setMediaObject(QMediaObject *object); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediarecorder.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediarecorder.sip new file mode 100644 index 0000000..09a5da0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediarecorder.sip @@ -0,0 +1,118 @@ +// qmediarecorder.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaRecorder : public QObject, public QMediaBindableInterface +{ +%TypeHeaderCode +#include +%End + +public: + enum State + { + StoppedState, + RecordingState, + PausedState, + }; + + enum Status + { + UnavailableStatus, + UnloadedStatus, + LoadingStatus, + LoadedStatus, + StartingStatus, + RecordingStatus, + PausedStatus, + FinalizingStatus, + }; + + enum Error + { + NoError, + ResourceError, + FormatError, + OutOfSpaceError, + }; + + QMediaRecorder(QMediaObject *mediaObject, QObject *parent /TransferThis/ = 0); + virtual ~QMediaRecorder(); + virtual QMediaObject *mediaObject() const; + bool isAvailable() const; + QMultimedia::AvailabilityStatus availability() const; + QUrl outputLocation() const; + bool setOutputLocation(const QUrl &location); + QUrl actualLocation() const; + QMediaRecorder::State state() const; + QMediaRecorder::Status status() const; + QMediaRecorder::Error error() const; + QString errorString() const; + qint64 duration() const; + bool isMuted() const; + qreal volume() const; + QStringList supportedContainers() const; + QString containerDescription(const QString &format) const; + QStringList supportedAudioCodecs() const; + QString audioCodecDescription(const QString &codecName) const; + QList supportedAudioSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(), bool *continuous = 0) const; + QStringList supportedVideoCodecs() const; + QString videoCodecDescription(const QString &codecName) const; + QList supportedResolutions(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), bool *continuous = 0) const; + QList supportedFrameRates(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), bool *continuous = 0) const; + QAudioEncoderSettings audioSettings() const; + QVideoEncoderSettings videoSettings() const; + QString containerFormat() const; + void setAudioSettings(const QAudioEncoderSettings &audioSettings); + void setVideoSettings(const QVideoEncoderSettings &videoSettings); + void setContainerFormat(const QString &container); + void setEncodingSettings(const QAudioEncoderSettings &audio, const QVideoEncoderSettings &video = QVideoEncoderSettings(), const QString &container = QString()); + bool isMetaDataAvailable() const; + bool isMetaDataWritable() const; + QVariant metaData(const QString &key) const; + void setMetaData(const QString &key, const QVariant &value); + QStringList availableMetaData() const; + +public slots: + void record(); + void pause(); + void stop(); + void setMuted(bool muted); + void setVolume(qreal volume); + +signals: + void stateChanged(QMediaRecorder::State state); + void statusChanged(QMediaRecorder::Status status); + void durationChanged(qint64 duration); + void mutedChanged(bool muted); + void volumeChanged(qreal volume); + void actualLocationChanged(const QUrl &location); + void error(QMediaRecorder::Error error); + void metaDataAvailableChanged(bool available); + void metaDataWritableChanged(bool writable); + void metaDataChanged(const QString &key, const QVariant &value); + void metaDataChanged(); + void availabilityChanged(QMultimedia::AvailabilityStatus availability /Constrained/); + void availabilityChanged(bool available); + +protected: + virtual bool setMediaObject(QMediaObject *object); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediarecordercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediarecordercontrol.sip new file mode 100644 index 0000000..4b3e948 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediarecordercontrol.sip @@ -0,0 +1,56 @@ +// qmediarecordercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaRecorderControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaRecorderControl(); + virtual QUrl outputLocation() const = 0; + virtual bool setOutputLocation(const QUrl &location) = 0; + virtual QMediaRecorder::State state() const = 0; + virtual QMediaRecorder::Status status() const = 0; + virtual qint64 duration() const = 0; + virtual bool isMuted() const = 0; + virtual qreal volume() const = 0; + virtual void applySettings() = 0; + +signals: + void stateChanged(QMediaRecorder::State state); + void statusChanged(QMediaRecorder::Status status); + void durationChanged(qint64 position); + void mutedChanged(bool muted); + void volumeChanged(qreal volume); + void actualLocationChanged(const QUrl &location); + void error(int error, const QString &errorString); + +public slots: + virtual void setState(QMediaRecorder::State state) = 0; + virtual void setMuted(bool muted) = 0; + virtual void setVolume(qreal volume) = 0; + +protected: + explicit QMediaRecorderControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaresource.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaresource.sip new file mode 100644 index 0000000..e0aed2f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaresource.sip @@ -0,0 +1,62 @@ +// qmediaresource.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaResource +{ +%TypeHeaderCode +#include +%End + +public: + QMediaResource(); + QMediaResource(const QUrl &url, const QString &mimeType = QString()); + QMediaResource(const QNetworkRequest &request, const QString &mimeType = QString()); + QMediaResource(const QMediaResource &other); + ~QMediaResource(); + bool isNull() const; + bool operator==(const QMediaResource &other) const; + bool operator!=(const QMediaResource &other) const; + QUrl url() const; + QNetworkRequest request() const; + QString mimeType() const; + QString language() const; + void setLanguage(const QString &language); + QString audioCodec() const; + void setAudioCodec(const QString &codec); + QString videoCodec() const; + void setVideoCodec(const QString &codec); + qint64 dataSize() const; + void setDataSize(const qint64 size); + int audioBitRate() const; + void setAudioBitRate(int rate); + int sampleRate() const; + void setSampleRate(int frequency); + int channelCount() const; + void setChannelCount(int channels); + int videoBitRate() const; + void setVideoBitRate(int rate); + QSize resolution() const; + void setResolution(const QSize &resolution); + void setResolution(int width, int height); +}; + +typedef QList QMediaResourceList; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaservice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaservice.sip new file mode 100644 index 0000000..c9e82c4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediaservice.sip @@ -0,0 +1,36 @@ +// qmediaservice.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaService : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaService(); + virtual QMediaControl *requestControl(const char *name) = 0; + virtual void releaseControl(QMediaControl *control) = 0; + +protected: + QMediaService(QObject *parent /TransferThis/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediastreamscontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediastreamscontrol.sip new file mode 100644 index 0000000..370d343 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediastreamscontrol.sip @@ -0,0 +1,52 @@ +// qmediastreamscontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaStreamsControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + enum StreamType + { + UnknownStream, + VideoStream, + AudioStream, + SubPictureStream, + DataStream, + }; + + virtual ~QMediaStreamsControl(); + virtual int streamCount() = 0; + virtual QMediaStreamsControl::StreamType streamType(int streamNumber) = 0; + virtual QVariant metaData(int streamNumber, const QString &key) = 0; + virtual bool isActive(int streamNumber) = 0; + virtual void setActive(int streamNumber, bool state) = 0; + +signals: + void streamsChanged(); + void activeStreamsChanged(); + +protected: + explicit QMediaStreamsControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediatimerange.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediatimerange.sip new file mode 100644 index 0000000..3db4efb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediatimerange.sip @@ -0,0 +1,78 @@ +// qmediatimerange.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaTimeInterval +{ +%TypeHeaderCode +#include +%End + +public: + QMediaTimeInterval(); + QMediaTimeInterval(qint64 start, qint64 end); + QMediaTimeInterval(const QMediaTimeInterval &); + qint64 start() const; + qint64 end() const; + bool contains(qint64 time) const; + bool isNormal() const; + QMediaTimeInterval normalized() const; + QMediaTimeInterval translated(qint64 offset) const; +}; + +bool operator==(const QMediaTimeInterval &, const QMediaTimeInterval &); +bool operator!=(const QMediaTimeInterval &, const QMediaTimeInterval &); + +class QMediaTimeRange +{ +%TypeHeaderCode +#include +%End + +public: + QMediaTimeRange(); + QMediaTimeRange(qint64 start, qint64 end); + QMediaTimeRange(const QMediaTimeInterval &); + QMediaTimeRange(const QMediaTimeRange &range); + ~QMediaTimeRange(); + qint64 earliestTime() const; + qint64 latestTime() const; + QList intervals() const; + bool isEmpty() const; + bool isContinuous() const; + bool contains(qint64 time) const; + void addInterval(qint64 start, qint64 end); + void addInterval(const QMediaTimeInterval &interval); + void addTimeRange(const QMediaTimeRange &); + void removeInterval(qint64 start, qint64 end); + void removeInterval(const QMediaTimeInterval &interval); + void removeTimeRange(const QMediaTimeRange &); + QMediaTimeRange &operator+=(const QMediaTimeRange &); + QMediaTimeRange &operator+=(const QMediaTimeInterval &); + QMediaTimeRange &operator-=(const QMediaTimeRange &); + QMediaTimeRange &operator-=(const QMediaTimeInterval &); + void clear(); +}; + +bool operator==(const QMediaTimeRange &, const QMediaTimeRange &); +bool operator!=(const QMediaTimeRange &, const QMediaTimeRange &); +QMediaTimeRange operator+(const QMediaTimeRange &, const QMediaTimeRange &); +QMediaTimeRange operator-(const QMediaTimeRange &, const QMediaTimeRange &); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediavideoprobecontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediavideoprobecontrol.sip new file mode 100644 index 0000000..377ad86 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmediavideoprobecontrol.sip @@ -0,0 +1,38 @@ +// qmediavideoprobecontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMediaVideoProbeControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMediaVideoProbeControl(); + +signals: + void videoFrameProbed(const QVideoFrame &frame); + void flush(); + +protected: + explicit QMediaVideoProbeControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmetadatareadercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmetadatareadercontrol.sip new file mode 100644 index 0000000..468a978 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmetadatareadercontrol.sip @@ -0,0 +1,42 @@ +// qmetadatareadercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMetaDataReaderControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMetaDataReaderControl(); + virtual bool isMetaDataAvailable() const = 0; + virtual QVariant metaData(const QString &key) const = 0; + virtual QStringList availableMetaData() const = 0; + +signals: + void metaDataChanged(); + void metaDataChanged(const QString &key, const QVariant &value); + void metaDataAvailableChanged(bool available); + +protected: + explicit QMetaDataReaderControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmetadatawritercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmetadatawritercontrol.sip new file mode 100644 index 0000000..ff6d7fb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmetadatawritercontrol.sip @@ -0,0 +1,45 @@ +// qmetadatawritercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMetaDataWriterControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QMetaDataWriterControl(); + virtual bool isWritable() const = 0; + virtual bool isMetaDataAvailable() const = 0; + virtual QVariant metaData(const QString &key) const = 0; + virtual void setMetaData(const QString &key, const QVariant &value) = 0; + virtual QStringList availableMetaData() const = 0; + +signals: + void metaDataChanged(); + void metaDataChanged(const QString &key, const QVariant &value); + void writableChanged(bool writable); + void metaDataAvailableChanged(bool available); + +protected: + explicit QMetaDataWriterControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmultimedia.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmultimedia.sip new file mode 100644 index 0000000..492e79b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qmultimedia.sip @@ -0,0 +1,61 @@ +// qmultimedia.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QMultimedia +{ +%TypeHeaderCode +#include +%End + + enum SupportEstimate + { + NotSupported, + MaybeSupported, + ProbablySupported, + PreferredService, + }; + + enum EncodingQuality + { + VeryLowQuality, + LowQuality, + NormalQuality, + HighQuality, + VeryHighQuality, + }; + + enum EncodingMode + { + ConstantQualityEncoding, + ConstantBitRateEncoding, + AverageBitRateEncoding, + TwoPassEncoding, + }; + + enum AvailabilityStatus + { + Available, + ServiceMissing, + Busy, + ResourceError, + }; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qpymultimedia_qlist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qpymultimedia_qlist.sip new file mode 100644 index 0000000..60247c9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qpymultimedia_qlist.sip @@ -0,0 +1,443 @@ +// This is the SIP interface definition for the QList based mapped types +// specific to the QtMultimedia module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QList + /TypeHintIn="Iterable[QVideoFrame.PixelFormat]", + TypeHintOut="List[QVideoFrame.PixelFormat]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QVideoFrame_PixelFormat); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_QVideoFrame_PixelFormat); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QVideoFrame.PixelFormat' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + + +%MappedType QList + /TypeHintIn="Iterable[QAudioFormat.Endian]", + TypeHintOut="List[QAudioFormat.Endian]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QAudioFormat_Endian); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_QAudioFormat_Endian); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QAudioFormat.Endian' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + + +%MappedType QList + /TypeHintIn="Iterable[QAudioFormat.SampleType]", + TypeHintOut="List[QAudioFormat.SampleType]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QAudioFormat_SampleType); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_QAudioFormat_SampleType); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QAudioFormat.SampleType' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + + +%If (Qt_5_6_0 -) + +%MappedType QList + /TypeHintIn="Iterable[QAudio.Role]", + TypeHintOut="List[QAudio.Role]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QAudio_Role); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_QAudio_Role); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QAudio.Role' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiodata.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiodata.sip new file mode 100644 index 0000000..0cc6960 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiodata.sip @@ -0,0 +1,117 @@ +// qradiodata.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRadioData : public QObject, public QMediaBindableInterface +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + ResourceError, + OpenError, + OutOfRangeError, + }; + + enum ProgramType + { + Undefined, + News, + CurrentAffairs, + Information, + Sport, + Education, + Drama, + Culture, + Science, + Varied, + PopMusic, + RockMusic, + EasyListening, + LightClassical, + SeriousClassical, + OtherMusic, + Weather, + Finance, + ChildrensProgrammes, + SocialAffairs, + Religion, + PhoneIn, + Travel, + Leisure, + JazzMusic, + CountryMusic, + NationalMusic, + OldiesMusic, + FolkMusic, + Documentary, + AlarmTest, + Alarm, + Talk, + ClassicRock, + AdultHits, + SoftRock, + Top40, + Soft, + Nostalgia, + Classical, + RhythmAndBlues, + SoftRhythmAndBlues, + Language, + ReligiousMusic, + ReligiousTalk, + Personality, + Public, + College, + }; + + QRadioData(QMediaObject *mediaObject, QObject *parent /TransferThis/ = 0); + virtual ~QRadioData(); + virtual QMediaObject *mediaObject() const; + QMultimedia::AvailabilityStatus availability() const; + QString stationId() const; + QRadioData::ProgramType programType() const; + QString programTypeName() const; + QString stationName() const; + QString radioText() const; + bool isAlternativeFrequenciesEnabled() const; + QRadioData::Error error() const; + QString errorString() const; + +public slots: + void setAlternativeFrequenciesEnabled(bool enabled); + +signals: + void stationIdChanged(QString stationId); + void programTypeChanged(QRadioData::ProgramType programType); + void programTypeNameChanged(QString programTypeName); + void stationNameChanged(QString stationName); + void radioTextChanged(QString radioText); + void alternativeFrequenciesEnabledChanged(bool enabled); + void error(QRadioData::Error error); + +protected: + virtual bool setMediaObject(QMediaObject *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiodatacontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiodatacontrol.sip new file mode 100644 index 0000000..dc61d95 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiodatacontrol.sip @@ -0,0 +1,52 @@ +// qradiodatacontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRadioDataControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QRadioDataControl(); + virtual QString stationId() const = 0; + virtual QRadioData::ProgramType programType() const = 0; + virtual QString programTypeName() const = 0; + virtual QString stationName() const = 0; + virtual QString radioText() const = 0; + virtual void setAlternativeFrequenciesEnabled(bool enabled) = 0; + virtual bool isAlternativeFrequenciesEnabled() const = 0; + virtual QRadioData::Error error() const = 0; + virtual QString errorString() const = 0; + +signals: + void stationIdChanged(QString stationId); + void programTypeChanged(QRadioData::ProgramType programType); + void programTypeNameChanged(QString programTypeName); + void stationNameChanged(QString stationName); + void radioTextChanged(QString radioText); + void alternativeFrequenciesEnabledChanged(bool enabled); + void error(QRadioData::Error err); + +protected: + explicit QRadioDataControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiotuner.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiotuner.sip new file mode 100644 index 0000000..1e3c819 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiotuner.sip @@ -0,0 +1,116 @@ +// qradiotuner.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRadioTuner : public QMediaObject +{ +%TypeHeaderCode +#include +%End + +public: + enum State + { + ActiveState, + StoppedState, + }; + + enum Band + { + AM, + FM, + SW, + LW, + FM2, + }; + + enum Error + { + NoError, + ResourceError, + OpenError, + OutOfRangeError, + }; + + enum StereoMode + { + ForceStereo, + ForceMono, + Auto, + }; + + enum SearchMode + { + SearchFast, + SearchGetStationId, + }; + +%If (Qt_5_6_1 -) + explicit QRadioTuner(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QRadioTuner(QObject *parent /TransferThis/ = 0); +%End + virtual ~QRadioTuner(); + virtual QMultimedia::AvailabilityStatus availability() const; + QRadioTuner::State state() const; + QRadioTuner::Band band() const; + bool isBandSupported(QRadioTuner::Band b) const; + int frequency() const; + int frequencyStep(QRadioTuner::Band band) const; + QPair frequencyRange(QRadioTuner::Band band) const; + bool isStereo() const; + void setStereoMode(QRadioTuner::StereoMode mode); + QRadioTuner::StereoMode stereoMode() const; + int signalStrength() const; + int volume() const; + bool isMuted() const; + bool isSearching() const; + bool isAntennaConnected() const; + QRadioTuner::Error error() const; + QString errorString() const; + QRadioData *radioData() const; + +public slots: + void searchForward(); + void searchBackward(); + void searchAllStations(QRadioTuner::SearchMode searchMode = QRadioTuner::SearchFast); + void cancelSearch(); + void setBand(QRadioTuner::Band band); + void setFrequency(int frequency); + void setVolume(int volume); + void setMuted(bool muted); + void start(); + void stop(); + +signals: + void stateChanged(QRadioTuner::State state); + void bandChanged(QRadioTuner::Band band); + void frequencyChanged(int frequency); + void stereoStatusChanged(bool stereo); + void searchingChanged(bool searching); + void signalStrengthChanged(int signalStrength); + void volumeChanged(int volume); + void mutedChanged(bool muted); + void stationFound(int frequency, QString stationId); + void antennaConnectedChanged(bool connectionStatus); + void error(QRadioTuner::Error error); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiotunercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiotunercontrol.sip new file mode 100644 index 0000000..d21f3fb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qradiotunercontrol.sip @@ -0,0 +1,73 @@ +// qradiotunercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRadioTunerControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QRadioTunerControl(); + virtual QRadioTuner::State state() const = 0; + virtual QRadioTuner::Band band() const = 0; + virtual void setBand(QRadioTuner::Band b) = 0; + virtual bool isBandSupported(QRadioTuner::Band b) const = 0; + virtual int frequency() const = 0; + virtual int frequencyStep(QRadioTuner::Band b) const = 0; + virtual QPair frequencyRange(QRadioTuner::Band b) const = 0; + virtual void setFrequency(int frequency) = 0; + virtual bool isStereo() const = 0; + virtual QRadioTuner::StereoMode stereoMode() const = 0; + virtual void setStereoMode(QRadioTuner::StereoMode mode) = 0; + virtual int signalStrength() const = 0; + virtual int volume() const = 0; + virtual void setVolume(int volume) = 0; + virtual bool isMuted() const = 0; + virtual void setMuted(bool muted) = 0; + virtual bool isSearching() const = 0; + virtual bool isAntennaConnected() const; + virtual void searchForward() = 0; + virtual void searchBackward() = 0; + virtual void searchAllStations(QRadioTuner::SearchMode searchMode = QRadioTuner::SearchFast) = 0; + virtual void cancelSearch() = 0; + virtual void start() = 0; + virtual void stop() = 0; + virtual QRadioTuner::Error error() const = 0; + virtual QString errorString() const = 0; + +signals: + void stateChanged(QRadioTuner::State state); + void bandChanged(QRadioTuner::Band band); + void frequencyChanged(int frequency); + void stereoStatusChanged(bool stereo); + void searchingChanged(bool searching); + void signalStrengthChanged(int signalStrength); + void volumeChanged(int volume); + void mutedChanged(bool muted); + void error(QRadioTuner::Error err); + void stationFound(int frequency, QString stationId); + void antennaConnectedChanged(bool connectionStatus); + +protected: + explicit QRadioTunerControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qsound.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qsound.sip new file mode 100644 index 0000000..c5adbd6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qsound.sip @@ -0,0 +1,47 @@ +// qsound.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSound : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Loop + { + Infinite, + }; + + QSound(const QString &filename, QObject *parent /TransferThis/ = 0); + virtual ~QSound(); + static void play(const QString &filename); + int loops() const; + int loopsRemaining() const; + void setLoops(int); + QString fileName() const; + bool isFinished() const; + +public slots: + void play(); + void stop(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qsoundeffect.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qsoundeffect.sip new file mode 100644 index 0000000..112a43f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qsoundeffect.sip @@ -0,0 +1,78 @@ +// qsoundeffect.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSoundEffect : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Loop + { + Infinite, + }; + + enum Status + { + Null, + Loading, + Ready, + Error, + }; + + explicit QSoundEffect(QObject *parent /TransferThis/ = 0); +%If (Qt_5_13_0 -) + QSoundEffect(const QAudioDeviceInfo &audioDevice, QObject *parent /TransferThis/ = 0); +%End + virtual ~QSoundEffect(); + static QStringList supportedMimeTypes(); + QUrl source() const; + void setSource(const QUrl &url); + int loopCount() const; + int loopsRemaining() const; + void setLoopCount(int loopCount); + qreal volume() const; + void setVolume(qreal volume); + bool isMuted() const; + void setMuted(bool muted); + bool isLoaded() const; + bool isPlaying() const; + QSoundEffect::Status status() const; + QString category() const; + void setCategory(const QString &category); + +signals: + void sourceChanged(); + void loopCountChanged(); + void loopsRemainingChanged(); + void volumeChanged(); + void mutedChanged(); + void loadedChanged(); + void playingChanged(); + void statusChanged(); + void categoryChanged(); + +public slots: + void play(); + void stop(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideodeviceselectorcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideodeviceselectorcontrol.sip new file mode 100644 index 0000000..b466893 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideodeviceselectorcontrol.sip @@ -0,0 +1,47 @@ +// qvideodeviceselectorcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoDeviceSelectorControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QVideoDeviceSelectorControl(); + virtual int deviceCount() const = 0; + virtual QString deviceName(int index) const = 0; + virtual QString deviceDescription(int index) const = 0; + virtual int defaultDevice() const = 0; + virtual int selectedDevice() const = 0; + +public slots: + virtual void setSelectedDevice(int index) = 0; + +signals: + void selectedDeviceChanged(int index); + void selectedDeviceChanged(const QString &name); + void devicesChanged(); + +protected: + explicit QVideoDeviceSelectorControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoencodersettingscontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoencodersettingscontrol.sip new file mode 100644 index 0000000..43e3d1e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoencodersettingscontrol.sip @@ -0,0 +1,40 @@ +// qvideoencodersettingscontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoEncoderSettingsControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QVideoEncoderSettingsControl(); + virtual QList supportedResolutions(const QVideoEncoderSettings &settings, bool *continuous = 0) const = 0; + virtual QList supportedFrameRates(const QVideoEncoderSettings &settings, bool *continuous = 0) const = 0; + virtual QStringList supportedVideoCodecs() const = 0; + virtual QString videoCodecDescription(const QString &codec) const = 0; + virtual QVideoEncoderSettings videoSettings() const = 0; + virtual void setVideoSettings(const QVideoEncoderSettings &settings) = 0; + +protected: + explicit QVideoEncoderSettingsControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoframe.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoframe.sip new file mode 100644 index 0000000..8257d15 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoframe.sip @@ -0,0 +1,154 @@ +// qvideoframe.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoFrame +{ +%TypeHeaderCode +#include +%End + +public: + enum FieldType + { + ProgressiveFrame, + TopField, + BottomField, + InterlacedFrame, + }; + + enum PixelFormat + { + Format_Invalid, + Format_ARGB32, + Format_ARGB32_Premultiplied, + Format_RGB32, + Format_RGB24, + Format_RGB565, + Format_RGB555, + Format_ARGB8565_Premultiplied, + Format_BGRA32, + Format_BGRA32_Premultiplied, + Format_BGR32, + Format_BGR24, + Format_BGR565, + Format_BGR555, + Format_BGRA5658_Premultiplied, + Format_AYUV444, + Format_AYUV444_Premultiplied, + Format_YUV444, + Format_YUV420P, + Format_YV12, + Format_UYVY, + Format_YUYV, + Format_NV12, + Format_NV21, + Format_IMC1, + Format_IMC2, + Format_IMC3, + Format_IMC4, + Format_Y8, + Format_Y16, + Format_Jpeg, + Format_CameraRaw, + Format_AdobeDng, +%If (Qt_5_13_0 -) + Format_ABGR32, +%End +%If (Qt_5_14_0 -) + Format_YUV422P, +%End + Format_User, + }; + + QVideoFrame(); + QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, QVideoFrame::PixelFormat format); + QVideoFrame(int bytes, const QSize &size, int bytesPerLine, QVideoFrame::PixelFormat format); + QVideoFrame(const QImage &image); + QVideoFrame(const QVideoFrame &other); + ~QVideoFrame(); + bool isValid() const; + QVideoFrame::PixelFormat pixelFormat() const; + QAbstractVideoBuffer::HandleType handleType() const; + QSize size() const; + int width() const; + int height() const; + QVideoFrame::FieldType fieldType() const; + void setFieldType(QVideoFrame::FieldType); + bool isMapped() const; + bool isReadable() const; + bool isWritable() const; + QAbstractVideoBuffer::MapMode mapMode() const; + bool map(QAbstractVideoBuffer::MapMode mode); + void unmap(); + int bytesPerLine() const; +%If (Qt_5_4_0 -) + int bytesPerLine(int plane) const; +%End + SIP_PYOBJECT bits() /TypeHint="PyQt5.sip.voidptr"/; +%MethodCode + uchar *mem; + + Py_BEGIN_ALLOW_THREADS + mem = sipCpp->bits(); + Py_END_ALLOW_THREADS + + if (mem) + { + sipRes = sipConvertFromVoidPtrAndSize(mem, sipCpp->mappedBytes()); + } + else + { + sipRes = Py_None; + Py_INCREF(sipRes); + } +%End + +%If (Qt_5_4_0 -) + void *bits(int plane) [uchar * (int plane)]; +%End + int mappedBytes() const; + QVariant handle() const; + qint64 startTime() const; + void setStartTime(qint64 time); + qint64 endTime() const; + void setEndTime(qint64 time); + static QVideoFrame::PixelFormat pixelFormatFromImageFormat(QImage::Format format); + static QImage::Format imageFormatFromPixelFormat(QVideoFrame::PixelFormat format); + QVariantMap availableMetaData() const; + QVariant metaData(const QString &key) const; + void setMetaData(const QString &key, const QVariant &value); +%If (Qt_5_4_0 -) + int planeCount() const; +%End +%If (Qt_5_5_0 -) + bool operator==(const QVideoFrame &other) const; +%End +%If (Qt_5_5_0 -) + bool operator!=(const QVideoFrame &other) const; +%End +%If (Qt_5_13_0 -) + QAbstractVideoBuffer *buffer() const; +%End +%If (Qt_5_15_0 -) + QImage image() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoprobe.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoprobe.sip new file mode 100644 index 0000000..883996c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideoprobe.sip @@ -0,0 +1,39 @@ +// qvideoprobe.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoProbe : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QVideoProbe(QObject *parent /TransferThis/ = 0); + virtual ~QVideoProbe(); + bool setSource(QMediaObject *source); + bool setSource(QMediaRecorder *source); + bool isActive() const; + +signals: + void videoFrameProbed(const QVideoFrame &videoFrame); + void flush(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideorenderercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideorenderercontrol.sip new file mode 100644 index 0000000..79e652d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideorenderercontrol.sip @@ -0,0 +1,36 @@ +// qvideorenderercontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoRendererControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QVideoRendererControl(); + virtual QAbstractVideoSurface *surface() const = 0; + virtual void setSurface(QAbstractVideoSurface *surface) = 0; + +protected: + explicit QVideoRendererControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideosurfaceformat.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideosurfaceformat.sip new file mode 100644 index 0000000..91d3978 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideosurfaceformat.sip @@ -0,0 +1,81 @@ +// qvideosurfaceformat.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoSurfaceFormat +{ +%TypeHeaderCode +#include +%End + +public: + enum Direction + { + TopToBottom, + BottomToTop, + }; + + enum YCbCrColorSpace + { + YCbCr_Undefined, + YCbCr_BT601, + YCbCr_BT709, + YCbCr_xvYCC601, + YCbCr_xvYCC709, + YCbCr_JPEG, + }; + + QVideoSurfaceFormat(); + QVideoSurfaceFormat(const QSize &size, QVideoFrame::PixelFormat format, QAbstractVideoBuffer::HandleType type = QAbstractVideoBuffer::NoHandle); + QVideoSurfaceFormat(const QVideoSurfaceFormat &format); + ~QVideoSurfaceFormat(); + bool operator==(const QVideoSurfaceFormat &format) const; + bool operator!=(const QVideoSurfaceFormat &format) const; + bool isValid() const; + QVideoFrame::PixelFormat pixelFormat() const; + QAbstractVideoBuffer::HandleType handleType() const; + QSize frameSize() const; + void setFrameSize(const QSize &size); + void setFrameSize(int width, int height); + int frameWidth() const; + int frameHeight() const; + QRect viewport() const; + void setViewport(const QRect &viewport); + QVideoSurfaceFormat::Direction scanLineDirection() const; + void setScanLineDirection(QVideoSurfaceFormat::Direction direction); + qreal frameRate() const; + void setFrameRate(qreal rate); + QSize pixelAspectRatio() const; + void setPixelAspectRatio(const QSize &ratio); + void setPixelAspectRatio(int width, int height); + QVideoSurfaceFormat::YCbCrColorSpace yCbCrColorSpace() const; + void setYCbCrColorSpace(QVideoSurfaceFormat::YCbCrColorSpace colorSpace); + QSize sizeHint() const; + QList propertyNames() const; + QVariant property(const char *name) const; + void setProperty(const char *name, const QVariant &value); +%If (Qt_5_11_0 -) + bool isMirrored() const; +%End +%If (Qt_5_11_0 -) + void setMirrored(bool mirrored); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideowindowcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideowindowcontrol.sip new file mode 100644 index 0000000..c7b3daa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimedia/qvideowindowcontrol.sip @@ -0,0 +1,60 @@ +// qvideowindowcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimedia Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoWindowControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QVideoWindowControl(); + virtual WId winId() const = 0; + virtual void setWinId(WId id) = 0; + virtual QRect displayRect() const = 0; + virtual void setDisplayRect(const QRect &rect) = 0; + virtual bool isFullScreen() const = 0; + virtual void setFullScreen(bool fullScreen) = 0; + virtual void repaint() = 0; + virtual QSize nativeSize() const = 0; + virtual Qt::AspectRatioMode aspectRatioMode() const = 0; + virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0; + virtual int brightness() const = 0; + virtual void setBrightness(int brightness) = 0; + virtual int contrast() const = 0; + virtual void setContrast(int contrast) = 0; + virtual int hue() const = 0; + virtual void setHue(int hue) = 0; + virtual int saturation() const = 0; + virtual void setSaturation(int saturation) = 0; + +signals: + void fullScreenChanged(bool fullScreen); + void brightnessChanged(int brightness); + void contrastChanged(int contrast); + void hueChanged(int hue); + void saturationChanged(int saturation); + void nativeSizeChanged(); + +protected: + explicit QVideoWindowControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/QtMultimediaWidgets.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/QtMultimediaWidgets.toml new file mode 100644 index 0000000..2cc38da --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/QtMultimediaWidgets.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtMultimediaWidgets. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip new file mode 100644 index 0000000..b11e4bf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip @@ -0,0 +1,53 @@ +// QtMultimediaWidgetsmod.sip generated by MetaSIP +// +// This file is part of the QtMultimediaWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtMultimediaWidgets, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtMultimedia/QtMultimediamod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qcameraviewfinder.sip +%Include qgraphicsvideoitem.sip +%Include qvideowidget.sip +%Include qvideowidgetcontrol.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qcameraviewfinder.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qcameraviewfinder.sip new file mode 100644 index 0000000..af1a3b3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qcameraviewfinder.sip @@ -0,0 +1,41 @@ +// qcameraviewfinder.sip generated by MetaSIP +// +// This file is part of the QtMultimediaWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCameraViewfinder : public QVideoWidget +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_1 -) + explicit QCameraViewfinder(QWidget *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QCameraViewfinder(QWidget *parent /TransferThis/ = 0); +%End + virtual ~QCameraViewfinder(); + virtual QMediaObject *mediaObject() const; + +protected: + virtual bool setMediaObject(QMediaObject *object); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qgraphicsvideoitem.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qgraphicsvideoitem.sip new file mode 100644 index 0000000..cbe68b8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qgraphicsvideoitem.sip @@ -0,0 +1,65 @@ +// qgraphicsvideoitem.sip generated by MetaSIP +// +// This file is part of the QtMultimediaWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsVideoItem : public QGraphicsObject, public QMediaBindableInterface +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_1 -) + explicit QGraphicsVideoItem(QGraphicsItem *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QGraphicsVideoItem(QGraphicsItem *parent /TransferThis/ = 0); +%End + virtual ~QGraphicsVideoItem(); + virtual QMediaObject *mediaObject() const; + Qt::AspectRatioMode aspectRatioMode() const; + void setAspectRatioMode(Qt::AspectRatioMode mode); + QPointF offset() const; + void setOffset(const QPointF &offset); + QSizeF size() const; + void setSize(const QSizeF &size); + QSizeF nativeSize() const; + virtual QRectF boundingRect() const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + +signals: + void nativeSizeChanged(const QSizeF &size); + +protected: + virtual void timerEvent(QTimerEvent *event); + virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); + virtual bool setMediaObject(QMediaObject *object); + +public: +%If (Qt_5_15_0 -) + QAbstractVideoSurface *videoSurface() const; +%End +}; + +%ModuleCode +// This is needed by the %ConvertToSubClassCode. +#include +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qvideowidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qvideowidget.sip new file mode 100644 index 0000000..cbbe3e3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qvideowidget.sip @@ -0,0 +1,104 @@ +// qvideowidget.sip generated by MetaSIP +// +// This file is part of the QtMultimediaWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoWidget : public QWidget, public QMediaBindableInterface +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QVideoWidget, &sipType_QVideoWidget, 3, 1}, + {sipName_QGraphicsVideoItem, &sipType_QGraphicsVideoItem, -1, 2}, + {sipName_QVideoWidgetControl, &sipType_QVideoWidgetControl, -1, -1}, + {sipName_QCameraViewfinder, &sipType_QCameraViewfinder, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: +%If (Qt_5_6_1 -) + explicit QVideoWidget(QWidget *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QVideoWidget(QWidget *parent /TransferThis/ = 0); +%End + virtual ~QVideoWidget(); + virtual QMediaObject *mediaObject() const; + Qt::AspectRatioMode aspectRatioMode() const; + int brightness() const; + int contrast() const; + int hue() const; + int saturation() const; + virtual QSize sizeHint() const; + +public slots: + void setFullScreen(bool fullScreen); + void setAspectRatioMode(Qt::AspectRatioMode mode); + void setBrightness(int brightness); + void setContrast(int contrast); + void setHue(int hue); + void setSaturation(int saturation); + +signals: + void fullScreenChanged(bool fullScreen); + void brightnessChanged(int brightness); + void contrastChanged(int contrast); + void hueChanged(int hue); + void saturationChanged(int saturation); + +protected: + virtual bool event(QEvent *event); + virtual void showEvent(QShowEvent *event); + virtual void hideEvent(QHideEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual void moveEvent(QMoveEvent *event); + virtual void paintEvent(QPaintEvent *event); + virtual bool setMediaObject(QMediaObject *object); + +public: +%If (Qt_5_15_0 -) + QAbstractVideoSurface *videoSurface() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qvideowidgetcontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qvideowidgetcontrol.sip new file mode 100644 index 0000000..089e9a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtMultimediaWidgets/qvideowidgetcontrol.sip @@ -0,0 +1,54 @@ +// qvideowidgetcontrol.sip generated by MetaSIP +// +// This file is part of the QtMultimediaWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QVideoWidgetControl : public QMediaControl +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QVideoWidgetControl(); + virtual QWidget *videoWidget() = 0; + virtual Qt::AspectRatioMode aspectRatioMode() const = 0; + virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0; + virtual bool isFullScreen() const = 0; + virtual void setFullScreen(bool fullScreen) = 0; + virtual int brightness() const = 0; + virtual void setBrightness(int brightness) = 0; + virtual int contrast() const = 0; + virtual void setContrast(int contrast) = 0; + virtual int hue() const = 0; + virtual void setHue(int hue) = 0; + virtual int saturation() const = 0; + virtual void setSaturation(int saturation) = 0; + +signals: + void fullScreenChanged(bool fullScreen); + void brightnessChanged(int brightness); + void contrastChanged(int contrast); + void hueChanged(int hue); + void saturationChanged(int saturation); + +protected: + explicit QVideoWidgetControl(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/QtNetwork.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/QtNetwork.toml new file mode 100644 index 0000000..d6e6d86 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/QtNetwork.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtNetwork. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/QtNetworkmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/QtNetworkmod.sip new file mode 100644 index 0000000..1cc9101 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/QtNetworkmod.sip @@ -0,0 +1,88 @@ +// QtNetworkmod.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtNetwork, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qabstractnetworkcache.sip +%Include qabstractsocket.sip +%Include qauthenticator.sip +%Include qdnslookup.sip +%Include qhostaddress.sip +%Include qhostinfo.sip +%Include qhstspolicy.sip +%Include qhttp2configuration.sip +%Include qhttpmultipart.sip +%Include qlocalserver.sip +%Include qlocalsocket.sip +%Include qnetworkaccessmanager.sip +%Include qnetworkconfigmanager.sip +%Include qnetworkconfiguration.sip +%Include qnetworkcookie.sip +%Include qnetworkcookiejar.sip +%Include qnetworkdatagram.sip +%Include qnetworkdiskcache.sip +%Include qnetworkinterface.sip +%Include qnetworkproxy.sip +%Include qnetworkreply.sip +%Include qnetworkrequest.sip +%Include qnetworksession.sip +%Include qocspresponse.sip +%Include qpassworddigestor.sip +%Include qssl.sip +%Include qsslcertificate.sip +%Include qsslcertificateextension.sip +%Include qsslcipher.sip +%Include qsslconfiguration.sip +%Include qssldiffiehellmanparameters.sip +%Include qsslellipticcurve.sip +%Include qsslerror.sip +%Include qsslkey.sip +%Include qsslpresharedkeyauthenticator.sip +%Include qsslsocket.sip +%Include qtcpserver.sip +%Include qtcpsocket.sip +%Include qudpsocket.sip +%Include qpynetwork_qhash.sip +%Include qpynetwork_qmap.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qabstractnetworkcache.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qabstractnetworkcache.sip new file mode 100644 index 0000000..3f01210 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qabstractnetworkcache.sip @@ -0,0 +1,78 @@ +// qabstractnetworkcache.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkCacheMetaData +{ +%TypeHeaderCode +#include +%End + + typedef QList> RawHeaderList; + typedef QHash AttributesMap; + +public: + QNetworkCacheMetaData(); + QNetworkCacheMetaData(const QNetworkCacheMetaData &other); + ~QNetworkCacheMetaData(); + bool operator==(const QNetworkCacheMetaData &other) const; + bool operator!=(const QNetworkCacheMetaData &other) const; + bool isValid() const; + QUrl url() const; + void setUrl(const QUrl &url); + QNetworkCacheMetaData::RawHeaderList rawHeaders() const; + void setRawHeaders(const QNetworkCacheMetaData::RawHeaderList &headers); + QDateTime lastModified() const; + void setLastModified(const QDateTime &dateTime); + QDateTime expirationDate() const; + void setExpirationDate(const QDateTime &dateTime); + bool saveToDisk() const; + void setSaveToDisk(bool allow); + QNetworkCacheMetaData::AttributesMap attributes() const; + void setAttributes(const QNetworkCacheMetaData::AttributesMap &attributes); + void swap(QNetworkCacheMetaData &other /Constrained/); +}; + +QDataStream &operator<<(QDataStream &, const QNetworkCacheMetaData & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QNetworkCacheMetaData & /Constrained/) /ReleaseGIL/; + +class QAbstractNetworkCache : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAbstractNetworkCache(); + virtual QNetworkCacheMetaData metaData(const QUrl &url) = 0; + virtual void updateMetaData(const QNetworkCacheMetaData &metaData) = 0; + virtual QIODevice *data(const QUrl &url) = 0 /Factory/; + virtual bool remove(const QUrl &url) = 0; + virtual qint64 cacheSize() const = 0; + virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData) = 0; + virtual void insert(QIODevice *device) = 0; + +public slots: + virtual void clear() = 0; + +protected: + explicit QAbstractNetworkCache(QObject *parent /TransferThis/ = 0); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qabstractsocket.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qabstractsocket.sip new file mode 100644 index 0000000..ecc2123 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qabstractsocket.sip @@ -0,0 +1,317 @@ +// qabstractsocket.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractSocket : public QIODevice +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QNetworkReply, &sipType_QNetworkReply, -1, 1}, + {sipName_QHttpMultiPart, &sipType_QHttpMultiPart, -1, 2}, + {sipName_QAbstractNetworkCache, &sipType_QAbstractNetworkCache, 12, 3}, + {sipName_QNetworkConfigurationManager, &sipType_QNetworkConfigurationManager, -1, 4}, + {sipName_QNetworkCookieJar, &sipType_QNetworkCookieJar, -1, 5}, + {sipName_QAbstractSocket, &sipType_QAbstractSocket, 13, 6}, + {sipName_QLocalSocket, &sipType_QLocalSocket, -1, 7}, + {sipName_QDnsLookup, &sipType_QDnsLookup, -1, 8}, + {sipName_QNetworkSession, &sipType_QNetworkSession, -1, 9}, + {sipName_QTcpServer, &sipType_QTcpServer, -1, 10}, + {sipName_QNetworkAccessManager, &sipType_QNetworkAccessManager, -1, 11}, + {sipName_QLocalServer, &sipType_QLocalServer, -1, -1}, + {sipName_QNetworkDiskCache, &sipType_QNetworkDiskCache, -1, -1}, + {sipName_QUdpSocket, &sipType_QUdpSocket, -1, 14}, + {sipName_QTcpSocket, &sipType_QTcpSocket, 15, -1}, + #if defined(SIP_FEATURE_PyQt_SSL) + {sipName_QSslSocket, &sipType_QSslSocket, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum SocketType + { + TcpSocket, + UdpSocket, +%If (Qt_5_8_0 -) + SctpSocket, +%End + UnknownSocketType, + }; + + enum NetworkLayerProtocol + { + IPv4Protocol, + IPv6Protocol, + AnyIPProtocol, + UnknownNetworkLayerProtocol, + }; + + enum SocketError + { + ConnectionRefusedError, + RemoteHostClosedError, + HostNotFoundError, + SocketAccessError, + SocketResourceError, + SocketTimeoutError, + DatagramTooLargeError, + NetworkError, + AddressInUseError, + SocketAddressNotAvailableError, + UnsupportedSocketOperationError, + UnfinishedSocketOperationError, + ProxyAuthenticationRequiredError, + SslHandshakeFailedError, + ProxyConnectionRefusedError, + ProxyConnectionClosedError, + ProxyConnectionTimeoutError, + ProxyNotFoundError, + ProxyProtocolError, + OperationError, + SslInternalError, + SslInvalidUserDataError, + TemporaryError, + UnknownSocketError, + }; + + enum SocketState + { + UnconnectedState, + HostLookupState, + ConnectingState, + ConnectedState, + BoundState, + ListeningState, + ClosingState, + }; + + QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent /TransferThis/); + virtual ~QAbstractSocket(); + virtual void connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode mode = QIODevice::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/; + virtual void connectToHost(const QHostAddress &address, quint16 port, QIODevice::OpenMode mode = QIODevice::ReadWrite) /ReleaseGIL/; + virtual void disconnectFromHost() /ReleaseGIL/; + bool isValid() const; + virtual qint64 bytesAvailable() const; + virtual qint64 bytesToWrite() const; + virtual bool canReadLine() const; + quint16 localPort() const; + QHostAddress localAddress() const; + quint16 peerPort() const; + QHostAddress peerAddress() const; + QString peerName() const; + qint64 readBufferSize() const; + virtual void setReadBufferSize(qint64 size); + void abort(); + virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = QAbstractSocket::ConnectedState, QIODevice::OpenMode mode = QIODevice::ReadWrite); + virtual qintptr socketDescriptor() const; + QAbstractSocket::SocketType socketType() const; + QAbstractSocket::SocketState state() const; + QAbstractSocket::SocketError error() const; + virtual void close(); + virtual bool isSequential() const; + virtual bool atEnd() const; + bool flush() /ReleaseGIL/; + virtual bool waitForConnected(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/; + void setProxy(const QNetworkProxy &networkProxy); + QNetworkProxy proxy() const; + +signals: + void hostFound(); + void connected(); + void disconnected(); + void stateChanged(QAbstractSocket::SocketState); + void error(QAbstractSocket::SocketError); +%If (Qt_5_15_0 -) + void errorOccurred(QAbstractSocket::SocketError); +%End + void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); + +protected: + virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QAbstractSocket::readData(s, a0) : sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual SIP_PYOBJECT readLineData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QAbstractSocket::readLineData(s, a0) : sipCpp->readLineData(s, a0); + #else + len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/; + void setSocketState(QAbstractSocket::SocketState state); + void setSocketError(QAbstractSocket::SocketError socketError); + void setLocalPort(quint16 port); + void setLocalAddress(const QHostAddress &address); + void setPeerPort(quint16 port); + void setPeerAddress(const QHostAddress &address); + void setPeerName(const QString &name); + +public: + enum SocketOption + { + LowDelayOption, + KeepAliveOption, + MulticastTtlOption, + MulticastLoopbackOption, + TypeOfServiceOption, +%If (Qt_5_3_0 -) + SendBufferSizeSocketOption, +%End +%If (Qt_5_3_0 -) + ReceiveBufferSizeSocketOption, +%End +%If (Qt_5_11_0 -) + PathMtuSocketOption, +%End + }; + + virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value); + virtual QVariant socketOption(QAbstractSocket::SocketOption option); + + enum BindFlag + { + DefaultForPlatform, + ShareAddress, + DontShareAddress, + ReuseAddressHint, + }; + + typedef QFlags BindMode; + + enum PauseMode + { + PauseNever, + PauseOnSslErrors, + }; + + typedef QFlags PauseModes; + virtual void resume() /ReleaseGIL/; + QAbstractSocket::PauseModes pauseMode() const; + void setPauseMode(QAbstractSocket::PauseModes pauseMode); + bool bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = QAbstractSocket::DefaultForPlatform); + bool bind(quint16 port = 0, QAbstractSocket::BindMode mode = QAbstractSocket::DefaultForPlatform); +%If (Qt_5_13_0 -) + QString protocolTag() const; +%End +%If (Qt_5_13_0 -) + void setProtocolTag(const QString &tag); +%End +}; + +QFlags operator|(QAbstractSocket::BindFlag f1, QFlags f2); +QFlags operator|(QAbstractSocket::PauseMode f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qauthenticator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qauthenticator.sip new file mode 100644 index 0000000..8405a19 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qauthenticator.sip @@ -0,0 +1,44 @@ +// qauthenticator.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAuthenticator +{ +%TypeHeaderCode +#include +%End + +public: + QAuthenticator(); + QAuthenticator(const QAuthenticator &other); + ~QAuthenticator(); + bool operator==(const QAuthenticator &other) const; + bool operator!=(const QAuthenticator &other) const; + QString user() const; + void setUser(const QString &user); + QString password() const; + void setPassword(const QString &password); + QString realm() const; + bool isNull() const; + QVariant option(const QString &opt) const; + QVariantHash options() const; + void setOption(const QString &opt, const QVariant &value); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qdnslookup.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qdnslookup.sip new file mode 100644 index 0000000..2316ea2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qdnslookup.sip @@ -0,0 +1,181 @@ +// qdnslookup.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDnsDomainNameRecord +{ +%TypeHeaderCode +#include +%End + +public: + QDnsDomainNameRecord(); + QDnsDomainNameRecord(const QDnsDomainNameRecord &other); + ~QDnsDomainNameRecord(); + void swap(QDnsDomainNameRecord &other /Constrained/); + QString name() const; + quint32 timeToLive() const; + QString value() const; +}; + +class QDnsHostAddressRecord +{ +%TypeHeaderCode +#include +%End + +public: + QDnsHostAddressRecord(); + QDnsHostAddressRecord(const QDnsHostAddressRecord &other); + ~QDnsHostAddressRecord(); + void swap(QDnsHostAddressRecord &other /Constrained/); + QString name() const; + quint32 timeToLive() const; + QHostAddress value() const; +}; + +class QDnsMailExchangeRecord +{ +%TypeHeaderCode +#include +%End + +public: + QDnsMailExchangeRecord(); + QDnsMailExchangeRecord(const QDnsMailExchangeRecord &other); + ~QDnsMailExchangeRecord(); + void swap(QDnsMailExchangeRecord &other /Constrained/); + QString exchange() const; + QString name() const; + quint16 preference() const; + quint32 timeToLive() const; +}; + +class QDnsServiceRecord +{ +%TypeHeaderCode +#include +%End + +public: + QDnsServiceRecord(); + QDnsServiceRecord(const QDnsServiceRecord &other); + ~QDnsServiceRecord(); + void swap(QDnsServiceRecord &other /Constrained/); + QString name() const; + quint16 port() const; + quint16 priority() const; + QString target() const; + quint32 timeToLive() const; + quint16 weight() const; +}; + +class QDnsTextRecord +{ +%TypeHeaderCode +#include +%End + +public: + QDnsTextRecord(); + QDnsTextRecord(const QDnsTextRecord &other); + ~QDnsTextRecord(); + void swap(QDnsTextRecord &other /Constrained/); + QString name() const; + quint32 timeToLive() const; + QList values() const; +}; + +class QDnsLookup : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + ResolverError, + OperationCancelledError, + InvalidRequestError, + InvalidReplyError, + ServerFailureError, + ServerRefusedError, + NotFoundError, + }; + + enum Type + { + A, + AAAA, + ANY, + CNAME, + MX, + NS, + PTR, + SRV, + TXT, + }; + + explicit QDnsLookup(QObject *parent /TransferThis/ = 0); + QDnsLookup(QDnsLookup::Type type, const QString &name, QObject *parent /TransferThis/ = 0); +%If (Qt_5_5_0 -) + QDnsLookup(QDnsLookup::Type type, const QString &name, const QHostAddress &nameserver, QObject *parent /TransferThis/ = 0); +%End + virtual ~QDnsLookup(); + QDnsLookup::Error error() const; + QString errorString() const; + bool isFinished() const; + QString name() const; + void setName(const QString &name); + QDnsLookup::Type type() const; + void setType(QDnsLookup::Type); + QList canonicalNameRecords() const; + QList hostAddressRecords() const; + QList mailExchangeRecords() const; + QList nameServerRecords() const; + QList pointerRecords() const; + QList serviceRecords() const; + QList textRecords() const; + +public slots: + void abort() /ReleaseGIL/; + void lookup() /ReleaseGIL/; + +signals: + void finished(); + void nameChanged(const QString &name); + void typeChanged(QDnsLookup::Type type /ScopesStripped=1/); + +public: +%If (Qt_5_3_0 -) + QHostAddress nameserver() const; +%End +%If (Qt_5_3_0 -) + void setNameserver(const QHostAddress &nameserver); +%End + +signals: +%If (Qt_5_3_0 -) + void nameserverChanged(const QHostAddress &nameserver); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhostaddress.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhostaddress.sip new file mode 100644 index 0000000..dbe128e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhostaddress.sip @@ -0,0 +1,206 @@ +// qhostaddress.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHostAddress /TypeHintIn="Union[QHostAddress, QHostAddress.SpecialAddress]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +// SIP doesn't support automatic type convertors so we explicitly allow a +// QHostAddress::SpecialAddress to be used whenever a QHostAddress is expected. + +if (sipIsErr == NULL) + return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QHostAddress_SpecialAddress)) || + sipCanConvertToType(sipPy, sipType_QHostAddress, SIP_NO_CONVERTORS)); + +if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QHostAddress_SpecialAddress))) +{ + *sipCppPtr = new QHostAddress((QHostAddress::SpecialAddress)SIPLong_AsLong(sipPy)); + + return sipGetState(sipTransferObj); +} + +*sipCppPtr = reinterpret_cast(sipConvertToType(sipPy, sipType_QHostAddress, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr)); + +return 0; +%End + +public: + enum SpecialAddress + { + Null, + Broadcast, + LocalHost, + LocalHostIPv6, + AnyIPv4, + AnyIPv6, + Any, + }; + + QHostAddress(); + QHostAddress(QHostAddress::SpecialAddress address /Constrained/); + explicit QHostAddress(quint32 ip4Addr); + explicit QHostAddress(const QString &address); + explicit QHostAddress(const Q_IPV6ADDR &ip6Addr); + QHostAddress(const QHostAddress ©); + ~QHostAddress(); +%If (Qt_5_8_0 -) + void setAddress(QHostAddress::SpecialAddress address /Constrained/); +%End + void setAddress(quint32 ip4Addr); + bool setAddress(const QString &address); + void setAddress(const Q_IPV6ADDR &ip6Addr); + QAbstractSocket::NetworkLayerProtocol protocol() const; + quint32 toIPv4Address() const; + Q_IPV6ADDR toIPv6Address() const; + QString toString() const; + QString scopeId() const; + void setScopeId(const QString &id); + bool operator==(const QHostAddress &address) const; + bool operator==(QHostAddress::SpecialAddress address) const; + bool operator!=(const QHostAddress &address) const; + bool operator!=(QHostAddress::SpecialAddress address) const; + bool isNull() const; + void clear(); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + + bool isInSubnet(const QHostAddress &subnet, int netmask) const; + bool isInSubnet(const QPair &subnet) const; + bool isLoopback() const; + static QPair parseSubnet(const QString &subnet); +%If (Qt_5_6_0 -) + void swap(QHostAddress &other /Constrained/); +%End +%If (Qt_5_6_0 -) + bool isMulticast() const; +%End +%If (Qt_5_8_0 -) + + enum ConversionModeFlag + { + ConvertV4MappedToIPv4, + ConvertV4CompatToIPv4, + ConvertUnspecifiedAddress, + ConvertLocalHost, + TolerantConversion, + StrictConversion, + }; + +%End +%If (Qt_5_8_0 -) + typedef QFlags ConversionMode; +%End +%If (Qt_5_8_0 -) + bool isEqual(const QHostAddress &address, QHostAddress::ConversionMode mode = QHostAddress::TolerantConversion) const; +%End +%If (Qt_5_11_0 -) + bool isGlobal() const; +%End +%If (Qt_5_11_0 -) + bool isLinkLocal() const; +%End +%If (Qt_5_11_0 -) + bool isSiteLocal() const; +%End +%If (Qt_5_11_0 -) + bool isUniqueLocalUnicast() const; +%End +%If (Qt_5_11_0 -) + bool isBroadcast() const; +%End +}; + +bool operator==(QHostAddress::SpecialAddress address1, const QHostAddress &address2); +%If (Qt_5_9_0 -) +bool operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs); +%End +QDataStream &operator<<(QDataStream &, const QHostAddress &) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QHostAddress &) /ReleaseGIL/; +// Q_IPV6ADDR is implemented as a Python 16-tuple of ints. +%MappedType Q_IPV6ADDR /TypeHint="Tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + // Create the tuple. + PyObject *t; + + if ((t = PyTuple_New(16)) == NULL) + return NULL; + + // Set the tuple elements. + for (int i = 0; i < 16; ++i) + { + PyObject *pobj; + + if ((pobj = SIPLong_FromLong((*sipCpp)[i])) == NULL) + { + Py_DECREF(t); + + return NULL; + } + + PyTuple_SetItem(t, i, pobj); + } + + return t; +%End + +%ConvertToTypeCode + // Check the type if that is all that is required. + if (sipIsErr == NULL) + return (PySequence_Check(sipPy) && PySequence_Size(sipPy) == 16); + + Q_IPV6ADDR *qa = new Q_IPV6ADDR; + + for (Py_ssize_t i = 0; i < 16; ++i) + { + PyObject *itm = PySequence_GetItem(sipPy, i); + + if (!itm) + { + delete qa; + *sipIsErr = 1; + + return 0; + } + + (*qa)[i] = SIPLong_AsLong(itm); + + Py_DECREF(itm); + } + + *sipCppPtr = qa; + + return sipGetState(sipTransferObj); +%End +}; +%If (Qt_5_8_0 -) +QFlags operator|(QHostAddress::ConversionModeFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhostinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhostinfo.sip new file mode 100644 index 0000000..1dfe1d5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhostinfo.sip @@ -0,0 +1,89 @@ +// qhostinfo.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHostInfo +{ +%TypeHeaderCode +#include +%End + +public: + enum HostInfoError + { + NoError, + HostNotFound, + UnknownError, + }; + + explicit QHostInfo(int id = -1); + QHostInfo(const QHostInfo &d); + ~QHostInfo(); + QString hostName() const; + void setHostName(const QString &name); + QList addresses() const; + void setAddresses(const QList &addresses); + QHostInfo::HostInfoError error() const; + void setError(QHostInfo::HostInfoError error); + QString errorString() const; + void setErrorString(const QString &errorString); + void setLookupId(int id); + int lookupId() const; + static int lookupHost(const QString &name, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtnetwork_get_connection_parts(a1, 0, "(QHostInfo)", true, &receiver, slot_signature)) == sipErrorNone) + { + QHostInfo::lookupHost(*a0, receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(1, a1); + } +%End + + static void abortHostLookup(int lookupId); + static QHostInfo fromName(const QString &name); + static QString localHostName(); + static QString localDomainName(); +%If (Qt_5_10_0 -) + void swap(QHostInfo &other /Constrained/); +%End +}; + +%ModuleHeaderCode +// Imports from QtCore. +typedef sipErrorState (*pyqt5_qtnetwork_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); +extern pyqt5_qtnetwork_get_connection_parts_t pyqt5_qtnetwork_get_connection_parts; +%End + +%ModuleCode +// Imports from QtCore. +pyqt5_qtnetwork_get_connection_parts_t pyqt5_qtnetwork_get_connection_parts; +%End + +%PostInitialisationCode +// Imports from QtCore. +pyqt5_qtnetwork_get_connection_parts = (pyqt5_qtnetwork_get_connection_parts_t)sipImportSymbol("pyqt5_get_connection_parts"); +Q_ASSERT(pyqt5_qtnetwork_get_connection_parts); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhstspolicy.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhstspolicy.sip new file mode 100644 index 0000000..90d6461 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhstspolicy.sip @@ -0,0 +1,61 @@ +// qhstspolicy.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_9_0 -) + +class QHstsPolicy +{ +%TypeHeaderCode +#include +%End + +public: + enum PolicyFlag + { + IncludeSubDomains, + }; + + typedef QFlags PolicyFlags; + QHstsPolicy(); + QHstsPolicy(const QDateTime &expiry, QHstsPolicy::PolicyFlags flags, const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode); + QHstsPolicy(const QHstsPolicy &rhs); + ~QHstsPolicy(); + void swap(QHstsPolicy &other); + void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode); + QString host(QUrl::ComponentFormattingOptions options = QUrl::ComponentFormattingOption::FullyDecoded) const; + void setExpiry(const QDateTime &expiry); + QDateTime expiry() const; + void setIncludesSubDomains(bool include); + bool includesSubDomains() const; + bool isExpired() const; +}; + +%End +%If (Qt_5_9_0 -) +bool operator==(const QHstsPolicy &lhs, const QHstsPolicy &rhs); +%End +%If (Qt_5_9_0 -) +bool operator!=(const QHstsPolicy &lhs, const QHstsPolicy &rhs); +%End +%If (Qt_5_9_0 -) +QFlags operator|(QHstsPolicy::PolicyFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhttp2configuration.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhttp2configuration.sip new file mode 100644 index 0000000..b60a23e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhttp2configuration.sip @@ -0,0 +1,54 @@ +// qhttp2configuration.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_14_0 -) + +class QHttp2Configuration +{ +%TypeHeaderCode +#include +%End + +public: + QHttp2Configuration(); + QHttp2Configuration(const QHttp2Configuration &other); + ~QHttp2Configuration(); + void setServerPushEnabled(bool enable); + bool serverPushEnabled() const; + void setHuffmanCompressionEnabled(bool enable); + bool huffmanCompressionEnabled() const; + bool setSessionReceiveWindowSize(unsigned int size); + unsigned int sessionReceiveWindowSize() const; + bool setStreamReceiveWindowSize(unsigned int size); + unsigned int streamReceiveWindowSize() const; + bool setMaxFrameSize(unsigned int size); + unsigned int maxFrameSize() const; + void swap(QHttp2Configuration &other /Constrained/); +}; + +%End +%If (Qt_5_14_0 -) +bool operator==(const QHttp2Configuration &lhs, const QHttp2Configuration &rhs); +%End +%If (Qt_5_14_0 -) +bool operator!=(const QHttp2Configuration &lhs, const QHttp2Configuration &rhs); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhttpmultipart.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhttpmultipart.sip new file mode 100644 index 0000000..1db1f4c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qhttpmultipart.sip @@ -0,0 +1,64 @@ +// qhttpmultipart.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHttpPart +{ +%TypeHeaderCode +#include +%End + +public: + QHttpPart(); + QHttpPart(const QHttpPart &other); + ~QHttpPart(); + bool operator==(const QHttpPart &other) const; + bool operator!=(const QHttpPart &other) const; + void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value); + void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue); + void setBody(const QByteArray &body); + void setBodyDevice(QIODevice *device); + void swap(QHttpPart &other /Constrained/); +}; + +class QHttpMultiPart : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum ContentType + { + MixedType, + RelatedType, + FormDataType, + AlternativeType, + }; + + explicit QHttpMultiPart(QObject *parent /TransferThis/ = 0); + QHttpMultiPart(QHttpMultiPart::ContentType contentType, QObject *parent /TransferThis/ = 0); + virtual ~QHttpMultiPart(); + void append(const QHttpPart &httpPart); + void setContentType(QHttpMultiPart::ContentType contentType); + QByteArray boundary() const; + void setBoundary(const QByteArray &boundary); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qlocalserver.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qlocalserver.sip new file mode 100644 index 0000000..f7c33b6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qlocalserver.sip @@ -0,0 +1,70 @@ +// qlocalserver.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLocalServer : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QLocalServer(QObject *parent /TransferThis/ = 0); + virtual ~QLocalServer(); + void close(); + QString errorString() const; + virtual bool hasPendingConnections() const; + bool isListening() const; + bool listen(const QString &name); + bool listen(qintptr socketDescriptor); + int maxPendingConnections() const; + virtual QLocalSocket *nextPendingConnection(); + QString serverName() const; + QString fullServerName() const; + QAbstractSocket::SocketError serverError() const; + void setMaxPendingConnections(int numConnections); + bool waitForNewConnection(int msecs = 0, bool *timedOut = 0) /ReleaseGIL/; + static bool removeServer(const QString &name); + +signals: + void newConnection(); + +protected: + virtual void incomingConnection(quintptr socketDescriptor); + +public: + enum SocketOption + { + UserAccessOption, + GroupAccessOption, + OtherAccessOption, + WorldAccessOption, + }; + + typedef QFlags SocketOptions; + void setSocketOptions(QLocalServer::SocketOptions options); + QLocalServer::SocketOptions socketOptions() const; +%If (Qt_5_10_0 -) + qintptr socketDescriptor() const; +%End +}; + +QFlags operator|(QLocalServer::SocketOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qlocalsocket.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qlocalsocket.sip new file mode 100644 index 0000000..e5fab55 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qlocalsocket.sip @@ -0,0 +1,136 @@ +// qlocalsocket.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLocalSocket : public QIODevice +{ +%TypeHeaderCode +#include +%End + +public: + enum LocalSocketError + { + ConnectionRefusedError, + PeerClosedError, + ServerNotFoundError, + SocketAccessError, + SocketResourceError, + SocketTimeoutError, + DatagramTooLargeError, + ConnectionError, + UnsupportedSocketOperationError, + OperationError, + UnknownSocketError, + }; + + enum LocalSocketState + { + UnconnectedState, + ConnectingState, + ConnectedState, + ClosingState, + }; + + QLocalSocket(QObject *parent /TransferThis/ = 0); + virtual ~QLocalSocket(); + void connectToServer(const QString &name, QIODevice::OpenMode mode = QIODevice::ReadWrite) /ReleaseGIL/; +%If (Qt_5_1_0 -) + void connectToServer(QIODevice::OpenMode mode = QIODevice::ReadWrite) /ReleaseGIL/; +%End + void disconnectFromServer() /ReleaseGIL/; +%If (Qt_5_1_0 -) + virtual bool open(QIODevice::OpenMode mode = QIODevice::ReadWrite); +%End + QString serverName() const; +%If (Qt_5_1_0 -) + void setServerName(const QString &name); +%End + QString fullServerName() const; + void abort(); + virtual bool isSequential() const; + virtual qint64 bytesAvailable() const; + virtual qint64 bytesToWrite() const; + virtual bool canReadLine() const; + virtual void close(); + QLocalSocket::LocalSocketError error() const; + bool flush(); + bool isValid() const; + qint64 readBufferSize() const; + void setReadBufferSize(qint64 size); + bool setSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState state = QLocalSocket::ConnectedState, QIODevice::OpenMode mode = QIODevice::ReadWrite); + qintptr socketDescriptor() const; + QLocalSocket::LocalSocketState state() const; + virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; + bool waitForConnected(int msecs = 30000) /ReleaseGIL/; + bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; + +signals: + void connected(); + void disconnected(); + void error(QLocalSocket::LocalSocketError socketError); +%If (Qt_5_15_0 -) + void errorOccurred(QLocalSocket::LocalSocketError socketError); +%End + void stateChanged(QLocalSocket::LocalSocketState socketState); + +protected: + virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *, qint64)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QLocalSocket::readData(s, a0) : sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual qint64 writeData(const char * /Array/, qint64 /ArraySize/) /ReleaseGIL/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkaccessmanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkaccessmanager.sip new file mode 100644 index 0000000..1d990a0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkaccessmanager.sip @@ -0,0 +1,166 @@ +// qnetworkaccessmanager.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkAccessManager : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Operation + { + HeadOperation, + GetOperation, + PutOperation, + PostOperation, + DeleteOperation, + CustomOperation, + }; + + explicit QNetworkAccessManager(QObject *parent /TransferThis/ = 0); + virtual ~QNetworkAccessManager(); + QNetworkProxy proxy() const; + void setProxy(const QNetworkProxy &proxy); + QNetworkCookieJar *cookieJar() const; + void setCookieJar(QNetworkCookieJar *cookieJar /Transfer/); + QNetworkReply *head(const QNetworkRequest &request); + QNetworkReply *get(const QNetworkRequest &request); + QNetworkReply *post(const QNetworkRequest &request, QIODevice *data); + QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data); + QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart); + QNetworkReply *put(const QNetworkRequest &request, QIODevice *data); + QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data); + QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart); + +signals: + void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); + void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator); + void finished(QNetworkReply *reply); +%If (Qt_5_1_0 -) +%If (PyQt_SSL) + void encrypted(QNetworkReply *reply); +%End +%End +%If (PyQt_SSL) + void sslErrors(QNetworkReply *reply, const QList &errors); +%End + void networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility accessible); +%If (Qt_5_5_0 -) +%If (PyQt_SSL) + void preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator); +%End +%End + +protected: + virtual QNetworkReply *createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *device = 0) /AbortOnException,DisallowNone,ReleaseGIL/; + +public: + QNetworkProxyFactory *proxyFactory() const; + void setProxyFactory(QNetworkProxyFactory *factory /Transfer/); + QAbstractNetworkCache *cache() const; + void setCache(QAbstractNetworkCache *cache /Transfer/); + QNetworkReply *deleteResource(const QNetworkRequest &request); + + enum NetworkAccessibility + { + UnknownAccessibility, + NotAccessible, + Accessible, + }; + + QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = 0); +%If (Qt_5_8_0 -) + QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data); +%End +%If (Qt_5_8_0 -) + QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart); +%End + void setConfiguration(const QNetworkConfiguration &config); + QNetworkConfiguration configuration() const; + QNetworkConfiguration activeConfiguration() const; + void setNetworkAccessible(QNetworkAccessManager::NetworkAccessibility accessible); + QNetworkAccessManager::NetworkAccessibility networkAccessible() const; + void clearAccessCache(); +%If (Qt_5_2_0 -) + QStringList supportedSchemes() const; +%End +%If (Qt_5_2_0 -) +%If (PyQt_SSL) + void connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration()); +%End +%End +%If (Qt_5_13_0 -) +%If (PyQt_SSL) + void connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName); +%End +%End +%If (Qt_5_2_0 -) + void connectToHost(const QString &hostName, quint16 port = 80); +%End + +protected slots: +%If (Qt_5_2_0 -) + QStringList supportedSchemesImplementation() const; +%End + +public: +%If (Qt_5_9_0 -) + void clearConnectionCache(); +%End +%If (Qt_5_9_0 -) + void setStrictTransportSecurityEnabled(bool enabled); +%End +%If (Qt_5_9_0 -) + bool isStrictTransportSecurityEnabled() const; +%End +%If (Qt_5_9_0 -) + void addStrictTransportSecurityHosts(const QVector &knownHosts); +%End +%If (Qt_5_9_0 -) + QVector strictTransportSecurityHosts() const; +%End +%If (Qt_5_9_0 -) + void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy); +%End +%If (Qt_5_9_0 -) + QNetworkRequest::RedirectPolicy redirectPolicy() const; +%End +%If (Qt_5_10_0 -) + void enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString()); +%End +%If (Qt_5_10_0 -) + bool isStrictTransportSecurityStoreEnabled() const; +%End +%If (Qt_5_14_0 -) + bool autoDeleteReplies() const; +%End +%If (Qt_5_14_0 -) + void setAutoDeleteReplies(bool autoDelete); +%End +%If (Qt_5_15_0 -) + int transferTimeout() const; +%End +%If (Qt_5_15_0 -) + void setTransferTimeout(int timeout = QNetworkRequest::TransferTimeoutConstant::DefaultTransferTimeoutConstant); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkconfigmanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkconfigmanager.sip new file mode 100644 index 0000000..2446fa4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkconfigmanager.sip @@ -0,0 +1,60 @@ +// qnetworkconfigmanager.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkConfigurationManager : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Capability + { + CanStartAndStopInterfaces, + DirectConnectionRouting, + SystemSessionSupport, + ApplicationLevelRoaming, + ForcedRoaming, + DataStatistics, + NetworkSessionRequired, + }; + + typedef QFlags Capabilities; + explicit QNetworkConfigurationManager(QObject *parent /TransferThis/ = 0); + virtual ~QNetworkConfigurationManager(); + QNetworkConfigurationManager::Capabilities capabilities() const; + QNetworkConfiguration defaultConfiguration() const; + QList allConfigurations(QNetworkConfiguration::StateFlags flags = QNetworkConfiguration::StateFlags()) const; + QNetworkConfiguration configurationFromIdentifier(const QString &identifier) const; + void updateConfigurations(); + bool isOnline() const; + +signals: + void configurationAdded(const QNetworkConfiguration &config); + void configurationRemoved(const QNetworkConfiguration &config); + void configurationChanged(const QNetworkConfiguration &config); + void onlineStateChanged(bool isOnline); + void updateCompleted(); +}; + +QFlags operator|(QNetworkConfigurationManager::Capability f1, QFlags f2); +QFlags operator|(QNetworkConfigurationManager::Capability f1, QNetworkConfigurationManager::Capability f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkconfiguration.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkconfiguration.sip new file mode 100644 index 0000000..306a4d8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkconfiguration.sip @@ -0,0 +1,107 @@ +// qnetworkconfiguration.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkConfiguration +{ +%TypeHeaderCode +#include +%End + +public: + QNetworkConfiguration(); + QNetworkConfiguration(const QNetworkConfiguration &other); + ~QNetworkConfiguration(); + bool operator==(const QNetworkConfiguration &cp) const; + bool operator!=(const QNetworkConfiguration &cp) const; + + enum Type + { + InternetAccessPoint, + ServiceNetwork, + UserChoice, + Invalid, + }; + + enum Purpose + { + UnknownPurpose, + PublicPurpose, + PrivatePurpose, + ServiceSpecificPurpose, + }; + + enum StateFlag + { + Undefined, + Defined, + Discovered, + Active, + }; + + typedef QFlags StateFlags; + + enum BearerType + { + BearerUnknown, + BearerEthernet, + BearerWLAN, + Bearer2G, + BearerCDMA2000, + BearerWCDMA, + BearerHSPA, + BearerBluetooth, + BearerWiMAX, +%If (Qt_5_2_0 -) + BearerEVDO, +%End +%If (Qt_5_2_0 -) + BearerLTE, +%End +%If (Qt_5_2_0 -) + Bearer3G, +%End +%If (Qt_5_2_0 -) + Bearer4G, +%End + }; + + QNetworkConfiguration::StateFlags state() const; + QNetworkConfiguration::Type type() const; + QNetworkConfiguration::Purpose purpose() const; + QNetworkConfiguration::BearerType bearerType() const; + QString bearerTypeName() const; +%If (Qt_5_2_0 -) + QNetworkConfiguration::BearerType bearerTypeFamily() const; +%End + QString identifier() const; + bool isRoamingAvailable() const; + QList children() const; + QString name() const; + bool isValid() const; + void swap(QNetworkConfiguration &other /Constrained/); +%If (Qt_5_9_0 -) + int connectTimeout() const; +%End +%If (Qt_5_9_0 -) + bool setConnectTimeout(int timeout); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkcookie.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkcookie.sip new file mode 100644 index 0000000..a57435d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkcookie.sip @@ -0,0 +1,61 @@ +// qnetworkcookie.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkCookie +{ +%TypeHeaderCode +#include +%End + +public: + enum RawForm + { + NameAndValueOnly, + Full, + }; + + QNetworkCookie(const QByteArray &name = QByteArray(), const QByteArray &value = QByteArray()); + QNetworkCookie(const QNetworkCookie &other); + ~QNetworkCookie(); + bool isSecure() const; + void setSecure(bool enable); + bool isSessionCookie() const; + QDateTime expirationDate() const; + void setExpirationDate(const QDateTime &date); + QString domain() const; + void setDomain(const QString &domain); + QString path() const; + void setPath(const QString &path); + QByteArray name() const; + void setName(const QByteArray &cookieName); + QByteArray value() const; + void setValue(const QByteArray &value); + QByteArray toRawForm(QNetworkCookie::RawForm form = QNetworkCookie::Full) const; + static QList parseCookies(const QByteArray &cookieString); + bool operator==(const QNetworkCookie &other) const; + bool operator!=(const QNetworkCookie &other) const; + bool isHttpOnly() const; + void setHttpOnly(bool enable); + void swap(QNetworkCookie &other /Constrained/); + bool hasSameIdentifier(const QNetworkCookie &other) const; + void normalize(const QUrl &url); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkcookiejar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkcookiejar.sip new file mode 100644 index 0000000..372a00a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkcookiejar.sip @@ -0,0 +1,42 @@ +// qnetworkcookiejar.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkCookieJar : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QNetworkCookieJar(QObject *parent /TransferThis/ = 0); + virtual ~QNetworkCookieJar(); + virtual QList cookiesForUrl(const QUrl &url) const; + virtual bool setCookiesFromUrl(const QList &cookieList, const QUrl &url); + virtual bool insertCookie(const QNetworkCookie &cookie); + virtual bool updateCookie(const QNetworkCookie &cookie); + virtual bool deleteCookie(const QNetworkCookie &cookie); + +protected: + void setAllCookies(const QList &cookieList); + QList allCookies() const; + virtual bool validateCookie(const QNetworkCookie &cookie, const QUrl &url) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkdatagram.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkdatagram.sip new file mode 100644 index 0000000..0e15d6f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkdatagram.sip @@ -0,0 +1,55 @@ +// qnetworkdatagram.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) + +class QNetworkDatagram +{ +%TypeHeaderCode +#include +%End + +public: + QNetworkDatagram(); + QNetworkDatagram(const QByteArray &data, const QHostAddress &destinationAddress = QHostAddress(), quint16 port = 0); + QNetworkDatagram(const QNetworkDatagram &other); + ~QNetworkDatagram(); + void swap(QNetworkDatagram &other /Constrained/); + void clear(); + bool isValid() const; + bool isNull() const; + uint interfaceIndex() const; + void setInterfaceIndex(uint index); + QHostAddress senderAddress() const; + QHostAddress destinationAddress() const; + int senderPort() const; + int destinationPort() const; + void setSender(const QHostAddress &address, quint16 port = 0); + void setDestination(const QHostAddress &address, quint16 port); + int hopLimit() const; + void setHopLimit(int count); + QByteArray data() const; + void setData(const QByteArray &data); + QNetworkDatagram makeReply(const QByteArray &payload) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkdiskcache.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkdiskcache.sip new file mode 100644 index 0000000..4985928 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkdiskcache.sip @@ -0,0 +1,50 @@ +// qnetworkdiskcache.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkDiskCache : public QAbstractNetworkCache +{ +%TypeHeaderCode +#include +%End + +public: + explicit QNetworkDiskCache(QObject *parent /TransferThis/ = 0); + virtual ~QNetworkDiskCache(); + QString cacheDirectory() const; + void setCacheDirectory(const QString &cacheDir); + qint64 maximumCacheSize() const; + void setMaximumCacheSize(qint64 size); + virtual qint64 cacheSize() const; + virtual QNetworkCacheMetaData metaData(const QUrl &url); + virtual void updateMetaData(const QNetworkCacheMetaData &metaData); + virtual QIODevice *data(const QUrl &url) /Factory/; + virtual bool remove(const QUrl &url); + virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData); + virtual void insert(QIODevice *device); + QNetworkCacheMetaData fileMetaData(const QString &fileName) const; + +public slots: + virtual void clear(); + +protected: + virtual qint64 expire(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkinterface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkinterface.sip new file mode 100644 index 0000000..1e868cb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkinterface.sip @@ -0,0 +1,152 @@ +// qnetworkinterface.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkAddressEntry +{ +%TypeHeaderCode +#include +%End + +public: + QNetworkAddressEntry(); + QNetworkAddressEntry(const QNetworkAddressEntry &other); + ~QNetworkAddressEntry(); + QHostAddress ip() const; + void setIp(const QHostAddress &newIp); + QHostAddress netmask() const; + void setNetmask(const QHostAddress &newNetmask); + QHostAddress broadcast() const; + void setBroadcast(const QHostAddress &newBroadcast); + bool operator==(const QNetworkAddressEntry &other) const; + bool operator!=(const QNetworkAddressEntry &other) const; + int prefixLength() const; + void setPrefixLength(int length); + void swap(QNetworkAddressEntry &other /Constrained/); +%If (Qt_5_11_0 -) + + enum DnsEligibilityStatus + { + DnsEligibilityUnknown, + DnsIneligible, + DnsEligible, + }; + +%End +%If (Qt_5_11_0 -) + QNetworkAddressEntry::DnsEligibilityStatus dnsEligibility() const; +%End +%If (Qt_5_11_0 -) + void setDnsEligibility(QNetworkAddressEntry::DnsEligibilityStatus status); +%End +%If (Qt_5_11_0 -) + bool isLifetimeKnown() const; +%End +%If (Qt_5_11_0 -) + QDeadlineTimer preferredLifetime() const; +%End +%If (Qt_5_11_0 -) + QDeadlineTimer validityLifetime() const; +%End +%If (Qt_5_11_0 -) + void setAddressLifetime(QDeadlineTimer preferred, QDeadlineTimer validity); +%End +%If (Qt_5_11_0 -) + void clearAddressLifetime(); +%End +%If (Qt_5_11_0 -) + bool isPermanent() const; +%End +%If (Qt_5_11_0 -) + bool isTemporary() const; +%End +}; + +class QNetworkInterface +{ +%TypeHeaderCode +#include +%End + +public: + enum InterfaceFlag + { + IsUp, + IsRunning, + CanBroadcast, + IsLoopBack, + IsPointToPoint, + CanMulticast, + }; + + typedef QFlags InterfaceFlags; + QNetworkInterface(); + QNetworkInterface(const QNetworkInterface &other); + ~QNetworkInterface(); + bool isValid() const; + QString name() const; + QNetworkInterface::InterfaceFlags flags() const; + QString hardwareAddress() const; + QList addressEntries() const; + static QNetworkInterface interfaceFromName(const QString &name); + static QNetworkInterface interfaceFromIndex(int index); + static QList allInterfaces(); + static QList allAddresses(); + int index() const; + QString humanReadableName() const; + void swap(QNetworkInterface &other /Constrained/); +%If (Qt_5_7_0 -) + static int interfaceIndexFromName(const QString &name); +%End +%If (Qt_5_7_0 -) + static QString interfaceNameFromIndex(int index); +%End +%If (Qt_5_11_0 -) + + enum InterfaceType + { + Unknown, + Loopback, + Virtual, + Ethernet, + Slip, + CanBus, + Ppp, + Fddi, + Wifi, + Ieee80211, + Phonet, + Ieee802154, + SixLoWPAN, + Ieee80216, + Ieee1394, + }; + +%End +%If (Qt_5_11_0 -) + QNetworkInterface::InterfaceType type() const; +%End +%If (Qt_5_11_0 -) + int maximumTransmissionUnit() const; +%End +}; + +QFlags operator|(QNetworkInterface::InterfaceFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkproxy.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkproxy.sip new file mode 100644 index 0000000..a5b67c7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkproxy.sip @@ -0,0 +1,154 @@ +// qnetworkproxy.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkProxy +{ +%TypeHeaderCode +#include +%End + +public: + enum ProxyType + { + DefaultProxy, + Socks5Proxy, + NoProxy, + HttpProxy, + HttpCachingProxy, + FtpCachingProxy, + }; + + QNetworkProxy(); + QNetworkProxy(QNetworkProxy::ProxyType type, const QString &hostName = QString(), quint16 port = 0, const QString &user = QString(), const QString &password = QString()); + QNetworkProxy(const QNetworkProxy &other); + ~QNetworkProxy(); + void setType(QNetworkProxy::ProxyType type); + QNetworkProxy::ProxyType type() const; + void setUser(const QString &userName); + QString user() const; + void setPassword(const QString &password); + QString password() const; + void setHostName(const QString &hostName); + QString hostName() const; + void setPort(quint16 port); + quint16 port() const; + static void setApplicationProxy(const QNetworkProxy &proxy); + static QNetworkProxy applicationProxy(); + bool isCachingProxy() const; + bool isTransparentProxy() const; + bool operator==(const QNetworkProxy &other) const; + bool operator!=(const QNetworkProxy &other) const; + + enum Capability + { + TunnelingCapability, + ListeningCapability, + UdpTunnelingCapability, + CachingCapability, + HostNameLookupCapability, +%If (Qt_5_8_0 -) + SctpTunnelingCapability, +%End +%If (Qt_5_8_0 -) + SctpListeningCapability, +%End + }; + + typedef QFlags Capabilities; + void setCapabilities(QNetworkProxy::Capabilities capab); + QNetworkProxy::Capabilities capabilities() const; + void swap(QNetworkProxy &other /Constrained/); + QVariant header(QNetworkRequest::KnownHeaders header) const; + void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value); + bool hasRawHeader(const QByteArray &headerName) const; + QList rawHeaderList() const; + QByteArray rawHeader(const QByteArray &headerName) const; + void setRawHeader(const QByteArray &headerName, const QByteArray &value); +}; + +class QNetworkProxyQuery +{ +%TypeHeaderCode +#include +%End + +public: + enum QueryType + { + TcpSocket, + UdpSocket, + TcpServer, + UrlRequest, +%If (Qt_5_8_0 -) + SctpSocket, +%End +%If (Qt_5_8_0 -) + SctpServer, +%End + }; + + QNetworkProxyQuery(); + QNetworkProxyQuery(const QUrl &requestUrl, QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::UrlRequest); + QNetworkProxyQuery(const QString &hostname, int port, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpSocket); + QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpServer); + QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, const QUrl &requestUrl, QNetworkProxyQuery::QueryType queryType = QNetworkProxyQuery::UrlRequest); + QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, const QString &hostname, int port, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpSocket); + QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, quint16 bindPort, const QString &protocolTag = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpServer); + QNetworkProxyQuery(const QNetworkProxyQuery &other); + ~QNetworkProxyQuery(); + bool operator==(const QNetworkProxyQuery &other) const; + bool operator!=(const QNetworkProxyQuery &other) const; + QNetworkProxyQuery::QueryType queryType() const; + void setQueryType(QNetworkProxyQuery::QueryType type); + int peerPort() const; + void setPeerPort(int port); + QString peerHostName() const; + void setPeerHostName(const QString &hostname); + int localPort() const; + void setLocalPort(int port); + QString protocolTag() const; + void setProtocolTag(const QString &protocolTag); + QUrl url() const; + void setUrl(const QUrl &url); + QNetworkConfiguration networkConfiguration() const; + void setNetworkConfiguration(const QNetworkConfiguration &networkConfiguration); + void swap(QNetworkProxyQuery &other /Constrained/); +}; + +class QNetworkProxyFactory /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + QNetworkProxyFactory(); + virtual ~QNetworkProxyFactory(); + virtual QList queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()) = 0; + static void setApplicationProxyFactory(QNetworkProxyFactory *factory /Transfer/); + static QList proxyForQuery(const QNetworkProxyQuery &query); + static QList systemProxyForQuery(const QNetworkProxyQuery &query = QNetworkProxyQuery()); + static void setUseSystemConfiguration(bool enable); +%If (Qt_5_8_0 -) + static bool usesSystemConfiguration(); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkreply.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkreply.sip new file mode 100644 index 0000000..ab94bea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkreply.sip @@ -0,0 +1,169 @@ +// qnetworkreply.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkReply : public QIODevice +{ +%TypeHeaderCode +#include +%End + +public: + enum NetworkError + { + NoError, + ConnectionRefusedError, + RemoteHostClosedError, + HostNotFoundError, + TimeoutError, + OperationCanceledError, + SslHandshakeFailedError, + UnknownNetworkError, + ProxyConnectionRefusedError, + ProxyConnectionClosedError, + ProxyNotFoundError, + ProxyTimeoutError, + ProxyAuthenticationRequiredError, + UnknownProxyError, + ContentAccessDenied, + ContentOperationNotPermittedError, + ContentNotFoundError, + AuthenticationRequiredError, + UnknownContentError, + ProtocolUnknownError, + ProtocolInvalidOperationError, + ProtocolFailure, + ContentReSendError, + TemporaryNetworkFailureError, + NetworkSessionFailedError, + BackgroundRequestNotAllowedError, +%If (Qt_5_3_0 -) + ContentConflictError, +%End +%If (Qt_5_3_0 -) + ContentGoneError, +%End +%If (Qt_5_3_0 -) + InternalServerError, +%End +%If (Qt_5_3_0 -) + OperationNotImplementedError, +%End +%If (Qt_5_3_0 -) + ServiceUnavailableError, +%End +%If (Qt_5_3_0 -) + UnknownServerError, +%End +%If (Qt_5_6_0 -) + TooManyRedirectsError, +%End +%If (Qt_5_6_0 -) + InsecureRedirectError, +%End + }; + + virtual ~QNetworkReply(); + virtual void abort() = 0; + virtual void close(); + virtual bool isSequential() const; + qint64 readBufferSize() const; + virtual void setReadBufferSize(qint64 size); + QNetworkAccessManager *manager() const; + QNetworkAccessManager::Operation operation() const; + QNetworkRequest request() const; + QNetworkReply::NetworkError error() const; + QUrl url() const; + QVariant header(QNetworkRequest::KnownHeaders header) const; + bool hasRawHeader(const QByteArray &headerName) const; + QList rawHeaderList() const; + QByteArray rawHeader(const QByteArray &headerName) const; + QVariant attribute(QNetworkRequest::Attribute code) const; +%If (PyQt_SSL) + QSslConfiguration sslConfiguration() const; +%End +%If (PyQt_SSL) + void setSslConfiguration(const QSslConfiguration &configuration); +%End + +public slots: + virtual void ignoreSslErrors(); + +signals: + void metaDataChanged(); + void finished(); +%If (Qt_5_1_0 -) +%If (PyQt_SSL) + void encrypted(); +%End +%End + void error(QNetworkReply::NetworkError); +%If (Qt_5_15_0 -) + void errorOccurred(QNetworkReply::NetworkError); +%End +%If (PyQt_SSL) + void sslErrors(const QList &errors); +%End + void uploadProgress(qint64 bytesSent, qint64 bytesTotal); + void downloadProgress(qint64 bytesReceived, qint64 bytesTotal); +%If (Qt_5_5_0 -) +%If (PyQt_SSL) + void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); +%End +%End +%If (Qt_5_6_0 -) + void redirected(const QUrl &url); +%End +%If (Qt_5_9_0 -) + void redirectAllowed(); +%End + +protected: + explicit QNetworkReply(QObject *parent /TransferThis/ = 0); + virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/; + void setOperation(QNetworkAccessManager::Operation operation); + void setRequest(const QNetworkRequest &request); + void setError(QNetworkReply::NetworkError errorCode, const QString &errorString); + void setUrl(const QUrl &url); + void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value); + void setRawHeader(const QByteArray &headerName, const QByteArray &value); + void setAttribute(QNetworkRequest::Attribute code, const QVariant &value); + void setFinished(bool finished); + +public: + bool isFinished() const; + bool isRunning() const; +%If (PyQt_SSL) + void ignoreSslErrors(const QList &errors); +%End + const QList> &rawHeaderPairs() const; + +protected: +%If (PyQt_SSL) + virtual void sslConfigurationImplementation(QSslConfiguration &) const; +%End +%If (PyQt_SSL) + virtual void setSslConfigurationImplementation(const QSslConfiguration &); +%End +%If (PyQt_SSL) + virtual void ignoreSslErrorsImplementation(const QList &); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkrequest.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkrequest.sip new file mode 100644 index 0000000..23b5f22 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworkrequest.sip @@ -0,0 +1,202 @@ +// qnetworkrequest.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkRequest +{ +%TypeHeaderCode +#include +%End + +public: + enum KnownHeaders + { + ContentTypeHeader, + ContentLengthHeader, + LocationHeader, + LastModifiedHeader, + CookieHeader, + SetCookieHeader, + ContentDispositionHeader, + UserAgentHeader, + ServerHeader, +%If (Qt_5_12_0 -) + IfModifiedSinceHeader, +%End +%If (Qt_5_12_0 -) + ETagHeader, +%End +%If (Qt_5_12_0 -) + IfMatchHeader, +%End +%If (Qt_5_12_0 -) + IfNoneMatchHeader, +%End + }; + + enum Attribute + { + HttpStatusCodeAttribute, + HttpReasonPhraseAttribute, + RedirectionTargetAttribute, + ConnectionEncryptedAttribute, + CacheLoadControlAttribute, + CacheSaveControlAttribute, + SourceIsFromCacheAttribute, + DoNotBufferUploadDataAttribute, + HttpPipeliningAllowedAttribute, + HttpPipeliningWasUsedAttribute, + CustomVerbAttribute, + CookieLoadControlAttribute, + AuthenticationReuseAttribute, + CookieSaveControlAttribute, + BackgroundRequestAttribute, +%If (Qt_5_3_0 -) + SpdyAllowedAttribute, +%End +%If (Qt_5_3_0 -) + SpdyWasUsedAttribute, +%End +%If (Qt_5_5_0 -) + EmitAllUploadProgressSignalsAttribute, +%End +%If (Qt_5_6_0 -) + FollowRedirectsAttribute, +%End +%If (Qt_5_8_0 -) + HTTP2AllowedAttribute, +%End +%If (Qt_5_15_0 -) + Http2AllowedAttribute, +%End +%If (Qt_5_8_0 -) + HTTP2WasUsedAttribute, +%End +%If (Qt_5_15_0 -) + Http2WasUsedAttribute, +%End +%If (Qt_5_9_0 -) + OriginalContentLengthAttribute, +%End +%If (Qt_5_9_0 -) + RedirectPolicyAttribute, +%End +%If (Qt_5_11_0 -) + Http2DirectAttribute, +%End +%If (Qt_5_14_0 -) + AutoDeleteReplyOnFinishAttribute, +%End + User, + UserMax, + }; + + enum CacheLoadControl + { + AlwaysNetwork, + PreferNetwork, + PreferCache, + AlwaysCache, + }; + + enum LoadControl + { + Automatic, + Manual, + }; + + enum Priority + { + HighPriority, + NormalPriority, + LowPriority, + }; + + explicit QNetworkRequest(const QUrl &url = QUrl()); + QNetworkRequest(const QNetworkRequest &other); + ~QNetworkRequest(); + QUrl url() const; + void setUrl(const QUrl &url); + QVariant header(QNetworkRequest::KnownHeaders header) const; + void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value); + bool hasRawHeader(const QByteArray &headerName) const; + QList rawHeaderList() const; + QByteArray rawHeader(const QByteArray &headerName) const; + void setRawHeader(const QByteArray &headerName, const QByteArray &value); + QVariant attribute(QNetworkRequest::Attribute code, const QVariant &defaultValue = QVariant()) const; + void setAttribute(QNetworkRequest::Attribute code, const QVariant &value); +%If (PyQt_SSL) + QSslConfiguration sslConfiguration() const; +%End +%If (PyQt_SSL) + void setSslConfiguration(const QSslConfiguration &configuration); +%End + bool operator==(const QNetworkRequest &other) const; + bool operator!=(const QNetworkRequest &other) const; + void setOriginatingObject(QObject *object /KeepReference/); + QObject *originatingObject() const; + QNetworkRequest::Priority priority() const; + void setPriority(QNetworkRequest::Priority priority); + void swap(QNetworkRequest &other /Constrained/); +%If (Qt_5_6_0 -) + int maximumRedirectsAllowed() const; +%End +%If (Qt_5_6_0 -) + void setMaximumRedirectsAllowed(int maximumRedirectsAllowed); +%End +%If (Qt_5_9_0 -) + + enum RedirectPolicy + { + ManualRedirectPolicy, + NoLessSafeRedirectPolicy, + SameOriginRedirectPolicy, + UserVerifiedRedirectPolicy, + }; + +%End +%If (Qt_5_13_0 -) + QString peerVerifyName() const; +%End +%If (Qt_5_13_0 -) + void setPeerVerifyName(const QString &peerName); +%End +%If (Qt_5_14_0 -) + QHttp2Configuration http2Configuration() const; +%End +%If (Qt_5_14_0 -) + void setHttp2Configuration(const QHttp2Configuration &configuration); +%End +%If (Qt_5_15_0 -) + + enum TransferTimeoutConstant + { + DefaultTransferTimeoutConstant, + }; + +%End +%If (Qt_5_15_0 -) + int transferTimeout() const; +%End +%If (Qt_5_15_0 -) + void setTransferTimeout(int timeout = QNetworkRequest::TransferTimeoutConstant::DefaultTransferTimeoutConstant); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworksession.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworksession.sip new file mode 100644 index 0000000..dd28b0f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qnetworksession.sip @@ -0,0 +1,98 @@ +// qnetworksession.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QNetworkSession : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum State + { + Invalid, + NotAvailable, + Connecting, + Connected, + Closing, + Disconnected, + Roaming, + }; + + enum SessionError + { + UnknownSessionError, + SessionAbortedError, + RoamingError, + OperationNotSupportedError, + InvalidConfigurationError, + }; + + QNetworkSession(const QNetworkConfiguration &connConfig, QObject *parent /TransferThis/ = 0); + virtual ~QNetworkSession(); + bool isOpen() const; + QNetworkConfiguration configuration() const; + QNetworkInterface interface() const; + QNetworkSession::State state() const; + QNetworkSession::SessionError error() const; + QString errorString() const; + QVariant sessionProperty(const QString &key) const; + void setSessionProperty(const QString &key, const QVariant &value); + quint64 bytesWritten() const; + quint64 bytesReceived() const; + quint64 activeTime() const; + bool waitForOpened(int msecs = 30000) /ReleaseGIL/; + +public slots: + void open(); + void close(); + void stop(); + void migrate(); + void ignore(); + void accept(); + void reject(); + +signals: + void stateChanged(QNetworkSession::State); + void opened(); + void closed(); + void error(QNetworkSession::SessionError); + void preferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless); + void newConfigurationActivated(); + +protected: + virtual void connectNotify(const QMetaMethod &signal); + virtual void disconnectNotify(const QMetaMethod &signal); + +public: + enum UsagePolicy + { + NoPolicy, + NoBackgroundTrafficPolicy, + }; + + typedef QFlags UsagePolicies; + QNetworkSession::UsagePolicies usagePolicies() const; + +signals: + void usagePoliciesChanged(QNetworkSession::UsagePolicies usagePolicies); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qocspresponse.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qocspresponse.sip new file mode 100644 index 0000000..3a3b134 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qocspresponse.sip @@ -0,0 +1,96 @@ +// qocspresponse.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_13_0 -) +%If (PyQt_SSL) +%ModuleCode +#include +%End +%End +%End + +%If (Qt_5_13_0 -) +%If (PyQt_SSL) + +enum class QOcspCertificateStatus +{ + Good, + Revoked, + Unknown, +}; + +%End +%End +%If (Qt_5_13_0 -) +%If (PyQt_SSL) + +enum class QOcspRevocationReason +{ + None /PyName=None_/, + Unspecified, + KeyCompromise, + CACompromise, + AffiliationChanged, + Superseded, + CessationOfOperation, + CertificateHold, + RemoveFromCRL, +}; + +%End +%End +%If (Qt_5_13_0 -) +%If (PyQt_SSL) + +class QOcspResponse +{ +%TypeHeaderCode +#include +%End + +public: + QOcspResponse(); + QOcspResponse(const QOcspResponse &other); + ~QOcspResponse(); + QOcspCertificateStatus certificateStatus() const; + QOcspRevocationReason revocationReason() const; + QSslCertificate responder() const; + QSslCertificate subject() const; + void swap(QOcspResponse &other); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +%End +%End +%If (Qt_5_13_0 -) +%If (PyQt_SSL) +bool operator==(const QOcspResponse &lhs, const QOcspResponse &rhs); +%End +%End +%If (Qt_5_13_0 -) +%If (PyQt_SSL) +bool operator!=(const QOcspResponse &lhs, const QOcspResponse &rhs); +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpassworddigestor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpassworddigestor.sip new file mode 100644 index 0000000..da01786 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpassworddigestor.sip @@ -0,0 +1,37 @@ +// qpassworddigestor.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) +%If (PyQt_SSL) + +namespace QPasswordDigestor +{ +%TypeHeaderCode +#include +%End + + QByteArray deriveKeyPbkdf1(QCryptographicHash::Algorithm algorithm, const QByteArray &password, const QByteArray &salt, int iterations, quint64 dkLen); + QByteArray deriveKeyPbkdf2(QCryptographicHash::Algorithm algorithm, const QByteArray &password, const QByteArray &salt, int iterations, quint64 dkLen); +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpynetwork_qhash.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpynetwork_qhash.sip new file mode 100644 index 0000000..4c2c527 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpynetwork_qhash.sip @@ -0,0 +1,132 @@ +// This is the SIP interface definition for the QHash based mapped types +// specific to the QtNetwork module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QHash + /TypeHint="Dict[QNetworkRequest.Attribute, QVariant]", + TypeHintValue="{}"/ +{ +%TypeHeaderCode +#include +#include +#include +%End + +%ConvertFromTypeCode + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QHash::const_iterator it = sipCpp->constBegin(); + QHash::const_iterator end = sipCpp->constEnd(); + + while (it != end) + { + PyObject *kobj = sipConvertFromEnum(it.key(), + sipType_QNetworkRequest_Attribute); + + if (!kobj) + { + Py_DECREF(d); + + return 0; + } + + QVariant *v = new QVariant(it.value()); + PyObject *vobj = sipConvertFromNewType(v, sipType_QVariant, + sipTransferObj); + + if (!vobj) + { + delete v; + Py_DECREF(kobj); + Py_DECREF(d); + + return 0; + } + + int rc = PyDict_SetItem(d, kobj, vobj); + + Py_DECREF(vobj); + Py_DECREF(kobj); + + if (rc < 0) + { + Py_DECREF(d); + + return 0; + } + + ++it; + } + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + QHash *qh = new QHash; + + Py_ssize_t pos = 0; + PyObject *kobj, *vobj; + + while (PyDict_Next(sipPy, &pos, &kobj, &vobj)) + { + int k = sipConvertToEnum(kobj, sipType_QNetworkRequest_Attribute); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "a key has type '%s' but 'QNetworkRequest.Attribute' is expected", + sipPyTypeName(Py_TYPE(kobj))); + + delete qh; + *sipIsErr = 1; + + return 0; + } + + int vstate; + QVariant *v = reinterpret_cast( + sipForceConvertToType(vobj, sipType_QVariant, sipTransferObj, + SIP_NOT_NONE, &vstate, sipIsErr)); + + if (*sipIsErr) + { + // Any error must be internal, so leave the exception as it is. + + delete qh; + + return 0; + } + + qh->insert(static_cast(k), *v); + + sipReleaseType(v, sipType_QVariant, vstate); + } + + *sipCppPtr = qh; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpynetwork_qmap.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpynetwork_qmap.sip new file mode 100644 index 0000000..1df70a1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qpynetwork_qmap.sip @@ -0,0 +1,214 @@ +// This is the SIP interface definition for the QMap and QMultiMap based mapped +// types specific to the QtNetwork module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +%MappedType QMultiMap + /TypeHintOut="Dict[QSsl.AlternativeNameEntryType, List[QString]]", + TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +#include +%End + +%ConvertFromTypeCode + // Get the enum member objects that are the dictionary keys. + static PyObject *email_entry = 0; + + if (!email_entry) + { + email_entry = PyObject_GetAttrString( + (PyObject *)sipTypeAsPyTypeObject(sipType_QSsl), "EmailEntry"); + + if (!email_entry) + return 0; + } + + static PyObject *dns_entry = 0; + + if (!dns_entry) + { + dns_entry = PyObject_GetAttrString( + (PyObject *)sipTypeAsPyTypeObject(sipType_QSsl), "DnsEntry"); + + if (!dns_entry) + return 0; + } + +#if QT_VERSION >= 0x050d00 + static PyObject *ip_address_entry = 0; + + if (!ip_address_entry) + { + ip_address_entry = PyObject_GetAttrString( + (PyObject *)sipTypeAsPyTypeObject(sipType_QSsl), "IpAddressEntry"); + + if (!ip_address_entry) + return 0; + } +#endif + + // Create the dictionary. + PyObject *d = PyDict_New(); + + if (!d) + return 0; + + QList vl; + + // Handle the Qssl::EmailEntry key. + vl = sipCpp->values(QSsl::EmailEntry); + + if (!vl.isEmpty()) + { + PyObject *vlobj = PyList_New(vl.count()); + + if (!vlobj) + { + Py_DECREF(d); + return 0; + } + + int rc = PyDict_SetItem(d, email_entry, vlobj); + + Py_DECREF(vlobj); + + if (rc < 0) + { + Py_DECREF(d); + return 0; + } + + for (int i = 0; i < vl.count(); ++i) + { + QString *s = new QString(vl.at(i)); + PyObject *vobj = sipConvertFromNewType(s, sipType_QString, + sipTransferObj); + + if (!vobj) + { + delete s; + Py_DECREF(d); + return 0; + } + + PyList_SetItem(vlobj, i, vobj); + } + } + + // Handle the Qssl::DnsEntry key. + vl = sipCpp->values(QSsl::DnsEntry); + + if (!vl.isEmpty()) + { + PyObject *vlobj = PyList_New(vl.count()); + + if (!vlobj) + { + Py_DECREF(d); + return 0; + } + + int rc = PyDict_SetItem(d, dns_entry, vlobj); + + Py_DECREF(vlobj); + + if (rc < 0) + { + Py_DECREF(d); + return 0; + } + + for (int i = 0; i < vl.count(); ++i) + { + QString *s = new QString(vl.at(i)); + PyObject *vobj = sipConvertFromNewType(s, sipType_QString, + sipTransferObj); + + if (!vobj) + { + delete s; + Py_DECREF(d); + return 0; + } + + PyList_SetItem(vlobj, i, vobj); + } + } + +#if QT_VERSION >= 0x050d00 + // Handle the Qssl::IpAddressEntry key. + vl = sipCpp->values(QSsl::IpAddressEntry); + + if (!vl.isEmpty()) + { + PyObject *vlobj = PyList_New(vl.count()); + + if (!vlobj) + { + Py_DECREF(d); + return 0; + } + + int rc = PyDict_SetItem(d, ip_address_entry, vlobj); + + Py_DECREF(vlobj); + + if (rc < 0) + { + Py_DECREF(d); + return 0; + } + + for (int i = 0; i < vl.count(); ++i) + { + QString *s = new QString(vl.at(i)); + PyObject *vobj = sipConvertFromNewType(s, sipType_QString, + sipTransferObj); + + if (!vobj) + { + delete s; + Py_DECREF(d); + return 0; + } + + PyList_SetItem(vlobj, i, vobj); + } + } +#endif + + return d; +%End + +%ConvertToTypeCode + if (!sipIsErr) + return PyDict_Check(sipPy); + + PyErr_SetString(PyExc_NotImplementedError, + "converting to QMultiMap is unsupported"); + + return 0; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qssl.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qssl.sip new file mode 100644 index 0000000..a6fce76 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qssl.sip @@ -0,0 +1,129 @@ +// qssl.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +namespace QSsl +{ +%TypeHeaderCode +#include +%End + + enum KeyType + { + PrivateKey, + PublicKey, + }; + + enum EncodingFormat + { + Pem, + Der, + }; + + enum KeyAlgorithm + { + Opaque, + Rsa, + Dsa, +%If (Qt_5_5_0 -) + Ec, +%End +%If (Qt_5_13_0 -) + Dh, +%End + }; + + enum AlternativeNameEntryType + { + EmailEntry, + DnsEntry, +%If (Qt_5_13_0 -) + IpAddressEntry, +%End + }; + + enum SslProtocol + { + UnknownProtocol, + SslV3, + SslV2, + TlsV1_0, +%If (Qt_5_5_0 -) + TlsV1_0OrLater, +%End + TlsV1_1, +%If (Qt_5_5_0 -) + TlsV1_1OrLater, +%End + TlsV1_2, +%If (Qt_5_5_0 -) + TlsV1_2OrLater, +%End + AnyProtocol, + TlsV1SslV3, + SecureProtocols, +%If (Qt_5_12_0 -) + DtlsV1_0, +%End +%If (Qt_5_12_0 -) + DtlsV1_0OrLater, +%End +%If (Qt_5_12_0 -) + DtlsV1_2, +%End +%If (Qt_5_12_0 -) + DtlsV1_2OrLater, +%End +%If (Qt_5_12_0 -) + TlsV1_3, +%End +%If (Qt_5_12_0 -) + TlsV1_3OrLater, +%End + }; + + enum SslOption + { + SslOptionDisableEmptyFragments, + SslOptionDisableSessionTickets, + SslOptionDisableCompression, + SslOptionDisableServerNameIndication, + SslOptionDisableLegacyRenegotiation, +%If (Qt_5_2_0 -) + SslOptionDisableSessionSharing, +%End +%If (Qt_5_2_0 -) + SslOptionDisableSessionPersistence, +%End +%If (Qt_5_6_0 -) + SslOptionDisableServerCipherPreference, +%End + }; + + typedef QFlags SslOptions; +}; + +%End +%If (PyQt_SSL) +QFlags operator|(QSsl::SslOption f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcertificate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcertificate.sip new file mode 100644 index 0000000..3863cc7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcertificate.sip @@ -0,0 +1,108 @@ +// qsslcertificate.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +class QSslCertificate +{ +%TypeHeaderCode +#include +%End + +public: + enum SubjectInfo + { + Organization, + CommonName, + LocalityName, + OrganizationalUnitName, + CountryName, + StateOrProvinceName, + DistinguishedNameQualifier, + SerialNumber, + EmailAddress, + }; + + QSslCertificate(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem) /ReleaseGIL/; + QSslCertificate(const QByteArray &data = QByteArray(), QSsl::EncodingFormat format = QSsl::Pem); + QSslCertificate(const QSslCertificate &other); + ~QSslCertificate(); + bool operator==(const QSslCertificate &other) const; + bool operator!=(const QSslCertificate &other) const; + bool isNull() const; + void clear(); + QByteArray version() const; + QByteArray serialNumber() const; + QByteArray digest(QCryptographicHash::Algorithm algorithm = QCryptographicHash::Md5) const; + QStringList issuerInfo(QSslCertificate::SubjectInfo info) const; + QStringList issuerInfo(const QByteArray &attribute) const; + QStringList subjectInfo(QSslCertificate::SubjectInfo info) const; + QStringList subjectInfo(const QByteArray &attribute) const; + QMultiMap subjectAlternativeNames() const; + QDateTime effectiveDate() const; + QDateTime expiryDate() const; + QSslKey publicKey() const; + QByteArray toPem() const; + QByteArray toDer() const; + static QList fromPath(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString); + static QList fromDevice(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem); + static QList fromData(const QByteArray &data, QSsl::EncodingFormat format = QSsl::Pem); + Qt::HANDLE handle() const; + void swap(QSslCertificate &other /Constrained/); + bool isBlacklisted() const; + QList subjectInfoAttributes() const; + QList issuerInfoAttributes() const; + QList extensions() const; + QString toText() const; + static QList verify(QList certificateChain, const QString &hostName = QString()); +%If (Qt_5_4_0 -) + bool isSelfSigned() const; +%End +%If (Qt_5_4_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +%If (Qt_5_4_0 -) + static bool importPkcs12(QIODevice *device, QSslKey *key, QSslCertificate *certificate, QList *caCertificates = 0, const QByteArray &passPhrase = QByteArray()) /ReleaseGIL/; +%End +%If (Qt_5_12_0 -) + QString issuerDisplayName() const; +%End +%If (Qt_5_12_0 -) + QString subjectDisplayName() const; +%End +%If (Qt_5_15_0 -) + + enum class PatternSyntax + { + RegularExpression, + Wildcard, + FixedString, + }; + +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcertificateextension.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcertificateextension.sip new file mode 100644 index 0000000..52effa7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcertificateextension.sip @@ -0,0 +1,43 @@ +// qsslcertificateextension.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +class QSslCertificateExtension +{ +%TypeHeaderCode +#include +%End + +public: + QSslCertificateExtension(); + QSslCertificateExtension(const QSslCertificateExtension &other); + ~QSslCertificateExtension(); + void swap(QSslCertificateExtension &other /Constrained/); + QString oid() const; + QString name() const; + QVariant value() const; + bool isCritical() const; + bool isSupported() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcipher.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcipher.sip new file mode 100644 index 0000000..0bc6aa5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslcipher.sip @@ -0,0 +1,53 @@ +// qsslcipher.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +class QSslCipher +{ +%TypeHeaderCode +#include +%End + +public: + QSslCipher(); +%If (Qt_5_3_0 -) + explicit QSslCipher(const QString &name); +%End + QSslCipher(const QString &name, QSsl::SslProtocol protocol); + QSslCipher(const QSslCipher &other); + ~QSslCipher(); + bool operator==(const QSslCipher &other) const; + bool operator!=(const QSslCipher &other) const; + bool isNull() const; + QString name() const; + int supportedBits() const; + int usedBits() const; + QString keyExchangeMethod() const; + QString authenticationMethod() const; + QString encryptionMethod() const; + QString protocolString() const; + QSsl::SslProtocol protocol() const; + void swap(QSslCipher &other /Constrained/); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslconfiguration.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslconfiguration.sip new file mode 100644 index 0000000..ca9625e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslconfiguration.sip @@ -0,0 +1,162 @@ +// qsslconfiguration.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +class QSslConfiguration +{ +%TypeHeaderCode +#include +%End + +public: + QSslConfiguration(); + QSslConfiguration(const QSslConfiguration &other); + ~QSslConfiguration(); + bool isNull() const; + QSsl::SslProtocol protocol() const; + void setProtocol(QSsl::SslProtocol protocol); + QSslSocket::PeerVerifyMode peerVerifyMode() const; + void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode); + int peerVerifyDepth() const; + void setPeerVerifyDepth(int depth); + QSslCertificate localCertificate() const; + void setLocalCertificate(const QSslCertificate &certificate); + QSslCertificate peerCertificate() const; + QList peerCertificateChain() const; + QSslCipher sessionCipher() const; + QSslKey privateKey() const; + void setPrivateKey(const QSslKey &key); + QList ciphers() const; + void setCiphers(const QList &ciphers); + QList caCertificates() const; + void setCaCertificates(const QList &certificates); + static QSslConfiguration defaultConfiguration(); + static void setDefaultConfiguration(const QSslConfiguration &configuration); + bool operator==(const QSslConfiguration &other) const; + bool operator!=(const QSslConfiguration &other) const; + void setSslOption(QSsl::SslOption option, bool on); + bool testSslOption(QSsl::SslOption option) const; + void swap(QSslConfiguration &other /Constrained/); +%If (Qt_5_1_0 -) + QList localCertificateChain() const; +%End +%If (Qt_5_1_0 -) + void setLocalCertificateChain(const QList &localChain); +%End +%If (Qt_5_2_0 -) + QByteArray sessionTicket() const; +%End +%If (Qt_5_2_0 -) + void setSessionTicket(const QByteArray &sessionTicket); +%End +%If (Qt_5_2_0 -) + int sessionTicketLifeTimeHint() const; +%End +%If (Qt_5_3_0 -) + + enum NextProtocolNegotiationStatus + { + NextProtocolNegotiationNone, + NextProtocolNegotiationNegotiated, + NextProtocolNegotiationUnsupported, + }; + +%End +%If (Qt_5_3_0 -) + void setAllowedNextProtocols(QList protocols); +%End +%If (Qt_5_3_0 -) + QList allowedNextProtocols() const; +%End +%If (Qt_5_3_0 -) + QByteArray nextNegotiatedProtocol() const; +%End +%If (Qt_5_3_0 -) + QSslConfiguration::NextProtocolNegotiationStatus nextProtocolNegotiationStatus() const; +%End +%If (Qt_5_3_0 -) + static const char *NextProtocolSpdy3_0 /Encoding="None",NoSetter/; +%End +%If (Qt_5_3_0 -) + static const char *NextProtocolHttp1_1 /Encoding="None",NoSetter/; +%End +%If (Qt_5_4_0 -) + QSsl::SslProtocol sessionProtocol() const; +%End +%If (Qt_5_5_0 -) + static QList supportedCiphers(); +%End +%If (Qt_5_5_0 -) + static QList systemCaCertificates(); +%End +%If (Qt_5_5_0 -) + QVector ellipticCurves() const; +%End +%If (Qt_5_5_0 -) + void setEllipticCurves(const QVector &curves); +%End +%If (Qt_5_5_0 -) + static QVector supportedEllipticCurves(); +%End +%If (Qt_5_7_0 -) + QSslKey ephemeralServerKey() const; +%End +%If (Qt_5_8_0 -) + QByteArray preSharedKeyIdentityHint() const; +%End +%If (Qt_5_8_0 -) + void setPreSharedKeyIdentityHint(const QByteArray &hint); +%End +%If (Qt_5_8_0 -) + QSslDiffieHellmanParameters diffieHellmanParameters() const; +%End +%If (Qt_5_8_0 -) + void setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams); +%End +%If (Qt_5_11_0 -) + QMap backendConfiguration() const; +%End +%If (Qt_5_11_0 -) + void setBackendConfigurationOption(const QByteArray &name, const QVariant &value); +%End +%If (Qt_5_11_0 -) + void setBackendConfiguration(const QMap &backendConfiguration = QMap()); +%End +%If (Qt_5_13_0 -) + void setOcspStaplingEnabled(bool enable); +%End +%If (Qt_5_13_0 -) + bool ocspStaplingEnabled() const; +%End +%If (Qt_5_15_0 -) + void addCaCertificate(const QSslCertificate &certificate); +%End +%If (Qt_5_15_0 -) + bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QSslCertificate::PatternSyntax syntax = QSslCertificate::PatternSyntax::FixedString); +%End +%If (Qt_5_15_0 -) + void addCaCertificates(const QList &certificates); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qssldiffiehellmanparameters.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qssldiffiehellmanparameters.sip new file mode 100644 index 0000000..f14da65 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qssldiffiehellmanparameters.sip @@ -0,0 +1,68 @@ +// qssldiffiehellmanparameters.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) +%If (PyQt_SSL) + +class QSslDiffieHellmanParameters +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + NoError, + InvalidInputDataError, + UnsafeParametersError, + }; + + QSslDiffieHellmanParameters(); + QSslDiffieHellmanParameters(const QSslDiffieHellmanParameters &other); + ~QSslDiffieHellmanParameters(); + void swap(QSslDiffieHellmanParameters &other /Constrained/); + static QSslDiffieHellmanParameters defaultParameters(); + static QSslDiffieHellmanParameters fromEncoded(const QByteArray &encoded, QSsl::EncodingFormat encoding = QSsl::EncodingFormat::Pem); + static QSslDiffieHellmanParameters fromEncoded(QIODevice *device, QSsl::EncodingFormat encoding = QSsl::EncodingFormat::Pem) /ReleaseGIL/; + bool isEmpty() const; + bool isValid() const; + QSslDiffieHellmanParameters::Error error() const; + QString errorString() const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +%End +%End +%If (Qt_5_8_0 -) +%If (PyQt_SSL) +bool operator==(const QSslDiffieHellmanParameters &lhs, const QSslDiffieHellmanParameters &rhs); +%End +%End +%If (Qt_5_8_0 -) +%If (PyQt_SSL) +bool operator!=(const QSslDiffieHellmanParameters &lhs, const QSslDiffieHellmanParameters &rhs); +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslellipticcurve.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslellipticcurve.sip new file mode 100644 index 0000000..40375ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslellipticcurve.sip @@ -0,0 +1,57 @@ +// qsslellipticcurve.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) +%If (PyQt_SSL) + +class QSslEllipticCurve +{ +%TypeHeaderCode +#include +%End + +public: + QSslEllipticCurve(); + static QSslEllipticCurve fromShortName(const QString &name); + static QSslEllipticCurve fromLongName(const QString &name); + QString shortName() const; + QString longName() const; + bool isValid() const; + bool isTlsNamedCurve() const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +%End +%End +%If (Qt_5_5_0 -) +%If (PyQt_SSL) +bool operator==(QSslEllipticCurve lhs, QSslEllipticCurve rhs); +%End +%End +%If (Qt_5_5_0 -) +%If (PyQt_SSL) +bool operator!=(QSslEllipticCurve lhs, QSslEllipticCurve rhs); +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslerror.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslerror.sip new file mode 100644 index 0000000..189a94f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslerror.sip @@ -0,0 +1,118 @@ +// qsslerror.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +class QSslError +{ +%TypeHeaderCode +#include +%End + +public: + enum SslError + { + UnspecifiedError, + NoError, + UnableToGetIssuerCertificate, + UnableToDecryptCertificateSignature, + UnableToDecodeIssuerPublicKey, + CertificateSignatureFailed, + CertificateNotYetValid, + CertificateExpired, + InvalidNotBeforeField, + InvalidNotAfterField, + SelfSignedCertificate, + SelfSignedCertificateInChain, + UnableToGetLocalIssuerCertificate, + UnableToVerifyFirstCertificate, + CertificateRevoked, + InvalidCaCertificate, + PathLengthExceeded, + InvalidPurpose, + CertificateUntrusted, + CertificateRejected, + SubjectIssuerMismatch, + AuthorityIssuerSerialNumberMismatch, + NoPeerCertificate, + HostNameMismatch, + NoSslSupport, + CertificateBlacklisted, +%If (Qt_5_13_0 -) + CertificateStatusUnknown, +%End +%If (Qt_5_13_0 -) + OcspNoResponseFound, +%End +%If (Qt_5_13_0 -) + OcspMalformedRequest, +%End +%If (Qt_5_13_0 -) + OcspMalformedResponse, +%End +%If (Qt_5_13_0 -) + OcspInternalError, +%End +%If (Qt_5_13_0 -) + OcspTryLater, +%End +%If (Qt_5_13_0 -) + OcspSigRequred, +%End +%If (Qt_5_13_0 -) + OcspUnauthorized, +%End +%If (Qt_5_13_0 -) + OcspResponseCannotBeTrusted, +%End +%If (Qt_5_13_0 -) + OcspResponseCertIdUnknown, +%End +%If (Qt_5_13_0 -) + OcspResponseExpired, +%End +%If (Qt_5_13_0 -) + OcspStatusUnknown, +%End + }; + + QSslError(); + QSslError(QSslError::SslError error); + QSslError(QSslError::SslError error, const QSslCertificate &certificate); + QSslError(const QSslError &other); + ~QSslError(); + QSslError::SslError error() const; + QString errorString() const; + QSslCertificate certificate() const; + bool operator==(const QSslError &other) const; + bool operator!=(const QSslError &other) const; + void swap(QSslError &other /Constrained/); +%If (Qt_5_4_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslkey.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslkey.sip new file mode 100644 index 0000000..a9be17c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslkey.sip @@ -0,0 +1,51 @@ +// qsslkey.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +class QSslKey +{ +%TypeHeaderCode +#include +%End + +public: + QSslKey(); + QSslKey(const QByteArray &encoded, QSsl::KeyAlgorithm algorithm, QSsl::EncodingFormat encoding = QSsl::Pem, QSsl::KeyType type = QSsl::PrivateKey, const QByteArray &passPhrase = QByteArray()); + QSslKey(QIODevice *device, QSsl::KeyAlgorithm algorithm, QSsl::EncodingFormat encoding = QSsl::Pem, QSsl::KeyType type = QSsl::PrivateKey, const QByteArray &passPhrase = QByteArray()); + QSslKey(Qt::HANDLE handle, QSsl::KeyType type = QSsl::PrivateKey); + QSslKey(const QSslKey &other); + ~QSslKey(); + bool isNull() const; + void clear(); + int length() const; + QSsl::KeyType type() const; + QSsl::KeyAlgorithm algorithm() const; + QByteArray toPem(const QByteArray &passPhrase = QByteArray()) const; + QByteArray toDer(const QByteArray &passPhrase = QByteArray()) const; + Qt::HANDLE handle() const; + bool operator==(const QSslKey &key) const; + bool operator!=(const QSslKey &key) const; + void swap(QSslKey &other /Constrained/); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslpresharedkeyauthenticator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslpresharedkeyauthenticator.sip new file mode 100644 index 0000000..ff7eea7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslpresharedkeyauthenticator.sip @@ -0,0 +1,57 @@ +// qsslpresharedkeyauthenticator.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) +%If (PyQt_SSL) + +class QSslPreSharedKeyAuthenticator +{ +%TypeHeaderCode +#include +%End + +public: + QSslPreSharedKeyAuthenticator(); + QSslPreSharedKeyAuthenticator(const QSslPreSharedKeyAuthenticator &authenticator); + ~QSslPreSharedKeyAuthenticator(); + void swap(QSslPreSharedKeyAuthenticator &authenticator /Constrained/); + QByteArray identityHint() const; + void setIdentity(const QByteArray &identity); + QByteArray identity() const; + int maximumIdentityLength() const; + void setPreSharedKey(const QByteArray &preSharedKey); + QByteArray preSharedKey() const; + int maximumPreSharedKeyLength() const; +}; + +%End +%End +%If (Qt_5_5_0 -) +%If (PyQt_SSL) +bool operator==(const QSslPreSharedKeyAuthenticator &lhs, const QSslPreSharedKeyAuthenticator &rhs); +%End +%End +%If (Qt_5_5_0 -) +%If (PyQt_SSL) +bool operator!=(const QSslPreSharedKeyAuthenticator &lhs, const QSslPreSharedKeyAuthenticator &rhs); +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslsocket.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslsocket.sip new file mode 100644 index 0000000..98b3547 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qsslsocket.sip @@ -0,0 +1,205 @@ +// qsslsocket.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_SSL) + +class QSslSocket : public QTcpSocket +{ +%TypeHeaderCode +#include +%End + +public: + enum SslMode + { + UnencryptedMode, + SslClientMode, + SslServerMode, + }; + + explicit QSslSocket(QObject *parent /TransferThis/ = 0); + virtual ~QSslSocket(); + void connectToHostEncrypted(const QString &hostName, quint16 port, QIODevice::OpenMode mode = QIODevice::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/; + void connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QIODevice::OpenMode mode = QIODevice::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/; + virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = QAbstractSocket::ConnectedState, QIODevice::OpenMode mode = QIODevice::ReadWrite); + QSslSocket::SslMode mode() const; + bool isEncrypted() const; + QSsl::SslProtocol protocol() const; + void setProtocol(QSsl::SslProtocol protocol); + virtual qint64 bytesAvailable() const; + virtual qint64 bytesToWrite() const; + virtual bool canReadLine() const; + virtual void close(); + virtual bool atEnd() const; + bool flush(); + void abort(); + void setLocalCertificate(const QSslCertificate &certificate); + void setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem); + QSslCertificate localCertificate() const; + QSslCertificate peerCertificate() const; + QList peerCertificateChain() const; + QSslCipher sessionCipher() const; + void setPrivateKey(const QSslKey &key); + void setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray()); + QSslKey privateKey() const; + QList ciphers() const; + void setCiphers(const QList &ciphers); + void setCiphers(const QString &ciphers); + static void setDefaultCiphers(const QList &ciphers); + static QList defaultCiphers(); + static QList supportedCiphers(); + bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString); + void addCaCertificate(const QSslCertificate &certificate); + void addCaCertificates(const QList &certificates); + void setCaCertificates(const QList &certificates); + QList caCertificates() const; + static bool addDefaultCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString); + static void addDefaultCaCertificate(const QSslCertificate &certificate); + static void addDefaultCaCertificates(const QList &certificates); + static void setDefaultCaCertificates(const QList &certificates); + static QList defaultCaCertificates(); + static QList systemCaCertificates(); + virtual bool waitForConnected(int msecs = 30000) /ReleaseGIL/; + bool waitForEncrypted(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; + virtual bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/; + QList sslErrors() const; + static bool supportsSsl(); + +public slots: + void startClientEncryption(); + void startServerEncryption(); + void ignoreSslErrors(); + +signals: + void encrypted(); + void sslErrors(const QList &errors); + void modeChanged(QSslSocket::SslMode newMode); +%If (Qt_5_5_0 -) + void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); +%End + +protected: + virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QSslSocket::readData(s, a0) : sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/; + +public: + enum PeerVerifyMode + { + VerifyNone, + QueryPeer, + VerifyPeer, + AutoVerifyPeer, + }; + + QSslSocket::PeerVerifyMode peerVerifyMode() const; + void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode); + int peerVerifyDepth() const; + void setPeerVerifyDepth(int depth); + virtual void setReadBufferSize(qint64 size); + qint64 encryptedBytesAvailable() const; + qint64 encryptedBytesToWrite() const; + QSslConfiguration sslConfiguration() const; + void setSslConfiguration(const QSslConfiguration &config); + +signals: + void peerVerifyError(const QSslError &error); + void encryptedBytesWritten(qint64 totalBytes); + +public: + virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value); + virtual QVariant socketOption(QAbstractSocket::SocketOption option); + void ignoreSslErrors(const QList &errors); + QString peerVerifyName() const; + void setPeerVerifyName(const QString &hostName); + virtual void resume() /ReleaseGIL/; + virtual void connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode mode = QIODevice::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/; + virtual void disconnectFromHost() /ReleaseGIL/; + static long sslLibraryVersionNumber(); + static QString sslLibraryVersionString(); +%If (Qt_5_1_0 -) + void setLocalCertificateChain(const QList &localChain); +%End +%If (Qt_5_1_0 -) + QList localCertificateChain() const; +%End +%If (Qt_5_4_0 -) + QSsl::SslProtocol sessionProtocol() const; +%End +%If (Qt_5_4_0 -) + static long sslLibraryBuildVersionNumber(); +%End +%If (Qt_5_4_0 -) + static QString sslLibraryBuildVersionString(); +%End +%If (Qt_5_13_0 -) + QVector ocspResponses() const; +%End +%If (Qt_5_15_0 -) + QList sslHandshakeErrors() const; +%End + +signals: +%If (Qt_5_15_0 -) + void newSessionTicketReceived(); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qtcpserver.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qtcpserver.sip new file mode 100644 index 0000000..4c87e88 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qtcpserver.sip @@ -0,0 +1,58 @@ +// qtcpserver.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTcpServer : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTcpServer(QObject *parent /TransferThis/ = 0); + virtual ~QTcpServer(); + bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0); + void close(); + bool isListening() const; + void setMaxPendingConnections(int numConnections); + int maxPendingConnections() const; + quint16 serverPort() const; + QHostAddress serverAddress() const; + qintptr socketDescriptor() const; + bool setSocketDescriptor(qintptr socketDescriptor); + bool waitForNewConnection(int msecs = 0, bool *timedOut = 0) /ReleaseGIL/; + virtual bool hasPendingConnections() const; + virtual QTcpSocket *nextPendingConnection(); + QAbstractSocket::SocketError serverError() const; + QString errorString() const; + void setProxy(const QNetworkProxy &networkProxy); + QNetworkProxy proxy() const; + void pauseAccepting(); + void resumeAccepting(); + +protected: + virtual void incomingConnection(qintptr handle); + void addPendingConnection(QTcpSocket *socket); + +signals: + void newConnection(); + void acceptError(QAbstractSocket::SocketError socketError); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qtcpsocket.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qtcpsocket.sip new file mode 100644 index 0000000..ad8156f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qtcpsocket.sip @@ -0,0 +1,32 @@ +// qtcpsocket.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTcpSocket : public QAbstractSocket +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTcpSocket(QObject *parent /TransferThis/ = 0); + virtual ~QTcpSocket(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qudpsocket.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qudpsocket.sip new file mode 100644 index 0000000..b6f52cb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNetwork/qudpsocket.sip @@ -0,0 +1,82 @@ +// qudpsocket.sip generated by MetaSIP +// +// This file is part of the QtNetwork Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QUdpSocket : public QAbstractSocket +{ +%TypeHeaderCode +#include +%End + +public: + explicit QUdpSocket(QObject *parent /TransferThis/ = 0); + virtual ~QUdpSocket(); + bool hasPendingDatagrams() const; + qint64 pendingDatagramSize() const; + SIP_PYOBJECT readDatagram(qint64 maxlen, QHostAddress *host /Out/ = 0, quint16 *port = 0) /TypeHint="Py_v3:bytes;str",ReleaseGIL/; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + len = sipCpp->readDatagram(s, a0, a1, &a2); + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + qint64 writeDatagram(const char *data /Array/, qint64 len /ArraySize/, const QHostAddress &host, quint16 port) /ReleaseGIL/; + qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port) /ReleaseGIL/; + bool joinMulticastGroup(const QHostAddress &groupAddress); + bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); + bool leaveMulticastGroup(const QHostAddress &groupAddress); + bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); + QNetworkInterface multicastInterface() const; + void setMulticastInterface(const QNetworkInterface &iface); +%If (Qt_5_8_0 -) + QNetworkDatagram receiveDatagram(qint64 maxSize = -1) /ReleaseGIL/; +%End +%If (Qt_5_8_0 -) + qint64 writeDatagram(const QNetworkDatagram &datagram) /ReleaseGIL/; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/QtNfc.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/QtNfc.toml new file mode 100644 index 0000000..3334cc1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/QtNfc.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtNfc. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/QtNfcmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/QtNfcmod.sip new file mode 100644 index 0000000..20bb52f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/QtNfcmod.sip @@ -0,0 +1,58 @@ +// QtNfcmod.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtNfc, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qndeffilter.sip +%Include qndefmessage.sip +%Include qndefnfcsmartposterrecord.sip +%Include qndefnfctextrecord.sip +%Include qndefnfcurirecord.sip +%Include qndefrecord.sip +%Include qnearfieldmanager.sip +%Include qnearfieldsharemanager.sip +%Include qnearfieldsharetarget.sip +%Include qnearfieldtarget.sip +%Include qqmlndefrecord.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndeffilter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndeffilter.sip new file mode 100644 index 0000000..5da5d3d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndeffilter.sip @@ -0,0 +1,57 @@ +// qndeffilter.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNdefFilter +{ +%TypeHeaderCode +#include +%End + +public: + QNdefFilter(); + QNdefFilter(const QNdefFilter &other); + ~QNdefFilter(); + void clear(); + void setOrderMatch(bool on); + bool orderMatch() const; + + struct Record + { +%TypeHeaderCode +#include +%End + + QNdefRecord::TypeNameFormat typeNameFormat; + QByteArray type; + unsigned int minimum; + unsigned int maximum; + }; + + void appendRecord(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray &type, unsigned int min = 1, unsigned int max = 1); + void appendRecord(const QNdefFilter::Record &record); + int recordCount() const /__len__/; + QNdefFilter::Record recordAt(int i) const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefmessage.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefmessage.sip new file mode 100644 index 0000000..2f6698e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefmessage.sip @@ -0,0 +1,74 @@ +// qndefmessage.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNdefMessage +{ +%TypeHeaderCode +#include +%End + +public: + QNdefMessage(); + explicit QNdefMessage(const QNdefRecord &record); + QNdefMessage(const QNdefMessage &message); + QNdefMessage(const QList &records); + bool operator==(const QNdefMessage &other) const; + QByteArray toByteArray() const; + int __len__() const; +%MethodCode + sipRes = sipCpp->count(); +%End + + QNdefRecord __getitem__(int i) const; +%MethodCode + Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + + if (idx < 0) + sipIsErr = 1; + else + sipRes = new QNdefRecord(sipCpp->at((int)idx)); +%End + + void __setitem__(int i, const QNdefRecord &value); +%MethodCode + int len = sipCpp->count(); + + if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) + sipIsErr = 1; + else + (*sipCpp)[a0] = *a1; +%End + + void __delitem__(int i); +%MethodCode + if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) + sipIsErr = 1; + else + sipCpp->removeAt(a0); +%End + + static QNdefMessage fromByteArray(const QByteArray &message); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfcsmartposterrecord.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfcsmartposterrecord.sip new file mode 100644 index 0000000..208bff6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfcsmartposterrecord.sip @@ -0,0 +1,96 @@ +// qndefnfcsmartposterrecord.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNdefNfcIconRecord : public QNdefRecord +{ +%TypeHeaderCode +#include +%End + +public: + QNdefNfcIconRecord(); + QNdefNfcIconRecord(const QNdefRecord &other); + void setData(const QByteArray &data); + QByteArray data() const; +}; + +%End +%If (Qt_5_5_0 -) + +class QNdefNfcSmartPosterRecord : public QNdefRecord +{ +%TypeHeaderCode +#include +%End + +public: + enum Action + { + UnspecifiedAction, + DoAction, + SaveAction, + EditAction, + }; + + QNdefNfcSmartPosterRecord(); + QNdefNfcSmartPosterRecord(const QNdefNfcSmartPosterRecord &other); + QNdefNfcSmartPosterRecord(const QNdefRecord &other); + ~QNdefNfcSmartPosterRecord(); + void setPayload(const QByteArray &payload); + bool hasTitle(const QString &locale = QString()) const; + bool hasAction() const; + bool hasIcon(const QByteArray &mimetype = QByteArray()) const; + bool hasSize() const; + bool hasTypeInfo() const; + int titleCount() const; + QString title(const QString &locale = QString()) const; + QNdefNfcTextRecord titleRecord(const int index) const; + QList titleRecords() const; + bool addTitle(const QNdefNfcTextRecord &text); + bool addTitle(const QString &text, const QString &locale, QNdefNfcTextRecord::Encoding encoding); + bool removeTitle(const QNdefNfcTextRecord &text); + bool removeTitle(const QString &locale); + void setTitles(const QList &titles); + QUrl uri() const; + QNdefNfcUriRecord uriRecord() const; + void setUri(const QNdefNfcUriRecord &url); + void setUri(const QUrl &url); + QNdefNfcSmartPosterRecord::Action action() const; + void setAction(QNdefNfcSmartPosterRecord::Action act); + int iconCount() const; + QByteArray icon(const QByteArray &mimetype = QByteArray()) const; + QNdefNfcIconRecord iconRecord(const int index) const; + QList iconRecords() const; + void addIcon(const QNdefNfcIconRecord &icon); + void addIcon(const QByteArray &type, const QByteArray &data); + bool removeIcon(const QNdefNfcIconRecord &icon); + bool removeIcon(const QByteArray &type); + void setIcons(const QList &icons); + quint32 size() const; + void setSize(quint32 size); + QByteArray typeInfo() const; + void setTypeInfo(const QByteArray &type); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfctextrecord.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfctextrecord.sip new file mode 100644 index 0000000..dbc823f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfctextrecord.sip @@ -0,0 +1,49 @@ +// qndefnfctextrecord.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNdefNfcTextRecord : public QNdefRecord +{ +%TypeHeaderCode +#include +%End + +public: + QNdefNfcTextRecord(); + QNdefNfcTextRecord(const QNdefRecord &other); + QString locale() const; + void setLocale(const QString &locale); + QString text() const; + void setText(const QString text); + + enum Encoding + { + Utf8, + Utf16, + }; + + QNdefNfcTextRecord::Encoding encoding() const; + void setEncoding(QNdefNfcTextRecord::Encoding encoding); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfcurirecord.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfcurirecord.sip new file mode 100644 index 0000000..64e4f0f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefnfcurirecord.sip @@ -0,0 +1,38 @@ +// qndefnfcurirecord.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNdefNfcUriRecord : public QNdefRecord +{ +%TypeHeaderCode +#include +%End + +public: + QNdefNfcUriRecord(); + QNdefNfcUriRecord(const QNdefRecord &other); + QUrl uri() const; + void setUri(const QUrl &uri); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefrecord.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefrecord.sip new file mode 100644 index 0000000..98d923e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qndefrecord.sip @@ -0,0 +1,92 @@ +// qndefrecord.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNdefRecord +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + QByteArray ndef_type = sipCpp->type(); + + switch (sipCpp->typeNameFormat()) + { + case QNdefRecord::NfcRtd: + if (ndef_type == "Sp") + sipType = sipType_QNdefNfcSmartPosterRecord; + else if (ndef_type == "T") + sipType = sipType_QNdefNfcTextRecord; + else if (ndef_type == "U") + sipType = sipType_QNdefNfcUriRecord; + else + sipType = 0; + + break; + + case QNdefRecord::Mime: + if (ndef_type == "") + sipType = sipType_QNdefNfcIconRecord; + else + sipType = 0; + + break; + + default: + sipType = 0; + } +%End + +public: + enum TypeNameFormat + { + Empty, + NfcRtd, + Mime, + Uri, + ExternalRtd, + Unknown, + }; + + QNdefRecord(); + QNdefRecord(const QNdefRecord &other); + ~QNdefRecord(); + void setTypeNameFormat(QNdefRecord::TypeNameFormat typeNameFormat); + QNdefRecord::TypeNameFormat typeNameFormat() const; + void setType(const QByteArray &type); + QByteArray type() const; + void setId(const QByteArray &id); + QByteArray id() const; + void setPayload(const QByteArray &payload); + QByteArray payload() const; + bool isEmpty() const; + bool operator==(const QNdefRecord &other) const; + bool operator!=(const QNdefRecord &other) const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldmanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldmanager.sip new file mode 100644 index 0000000..ecaed93 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldmanager.sip @@ -0,0 +1,173 @@ +// qnearfieldmanager.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNearFieldManager : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QNearFieldManager, &sipType_QNearFieldManager, -1, 1}, + {sipName_QNearFieldTarget, &sipType_QNearFieldTarget, -1, 2}, + {sipName_QNearFieldShareManager, &sipType_QNearFieldShareManager, -1, 3}, + {sipName_QQmlNdefRecord, &sipType_QQmlNdefRecord, -1, 4}, + {sipName_QNearFieldShareTarget, &sipType_QNearFieldShareTarget, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum TargetAccessMode + { + NoTargetAccess, + NdefReadTargetAccess, + NdefWriteTargetAccess, + TagTypeSpecificTargetAccess, + }; + + typedef QFlags TargetAccessModes; + explicit QNearFieldManager(QObject *parent /TransferThis/ = 0); + virtual ~QNearFieldManager(); + bool isAvailable() const; + void setTargetAccessModes(QNearFieldManager::TargetAccessModes accessModes); + QNearFieldManager::TargetAccessModes targetAccessModes() const; + bool startTargetDetection(); + void stopTargetDetection(); + int registerNdefMessageHandler(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtnfc_get_pyqtslot_parts(a0, &receiver, slot)) == sipErrorNone) + { + sipRes = sipCpp->registerNdefMessageHandler(receiver, slot.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + int registerNdefMessageHandler(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray &type, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtnfc_get_pyqtslot_parts(a2, &receiver, slot)) == sipErrorNone) + { + sipRes = sipCpp->registerNdefMessageHandler(a0, *a1, receiver, slot.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(2, a2); + } +%End + + int registerNdefMessageHandler(const QNdefFilter &filter, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtnfc_get_pyqtslot_parts(a1, &receiver, slot)) == sipErrorNone) + { + sipRes = sipCpp->registerNdefMessageHandler(*a0, receiver, slot.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(1, a1); + } +%End + + bool unregisterNdefMessageHandler(int handlerId); + +signals: + void targetDetected(QNearFieldTarget *target); + void targetLost(QNearFieldTarget *target); + +public: +%If (Qt_5_12_0 -) + + enum class AdapterState + { + Offline, + TurningOn, + Online, + TurningOff, + }; + +%End +%If (Qt_5_12_0 -) + bool isSupported() const; +%End + +signals: +%If (Qt_5_12_0 -) + void adapterStateChanged(QNearFieldManager::AdapterState state /ScopesStripped=1/); +%End +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QNearFieldManager::TargetAccessMode f1, QFlags f2); +%End + +%ModuleHeaderCode +// Imports from QtCore. +typedef sipErrorState (*pyqt5_qtnfc_get_pyqtslot_parts_t)(PyObject *, QObject **, QByteArray &); +extern pyqt5_qtnfc_get_pyqtslot_parts_t pyqt5_qtnfc_get_pyqtslot_parts; +%End + +%ModuleCode +// Imports from QtCore. +pyqt5_qtnfc_get_pyqtslot_parts_t pyqt5_qtnfc_get_pyqtslot_parts; +%End + +%PostInitialisationCode +// Imports from QtCore. +pyqt5_qtnfc_get_pyqtslot_parts = (pyqt5_qtnfc_get_pyqtslot_parts_t)sipImportSymbol("pyqt5_get_pyqtslot_parts"); +Q_ASSERT(pyqt5_qtnfc_get_pyqtslot_parts); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldsharemanager.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldsharemanager.sip new file mode 100644 index 0000000..baae20e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldsharemanager.sip @@ -0,0 +1,70 @@ +// qnearfieldsharemanager.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNearFieldShareManager : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QNearFieldShareManager(QObject *parent /TransferThis/ = 0); + virtual ~QNearFieldShareManager(); + + enum ShareError + { + NoError, + UnknownError, + InvalidShareContentError, + ShareCanceledError, + ShareInterruptedError, + ShareRejectedError, + UnsupportedShareModeError, + ShareAlreadyInProgressError, + SharePermissionDeniedError, + }; + + enum ShareMode + { + NoShare, + NdefShare, + FileShare, + }; + + typedef QFlags ShareModes; + static QNearFieldShareManager::ShareModes supportedShareModes(); + void setShareModes(QNearFieldShareManager::ShareModes modes); + QNearFieldShareManager::ShareModes shareModes() const; + QNearFieldShareManager::ShareError shareError() const; + +signals: + void targetDetected(QNearFieldShareTarget *shareTarget); + void shareModesChanged(QNearFieldShareManager::ShareModes modes); + void error(QNearFieldShareManager::ShareError error); +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QNearFieldShareManager::ShareMode f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldsharetarget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldsharetarget.sip new file mode 100644 index 0000000..d0b4de5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldsharetarget.sip @@ -0,0 +1,45 @@ +// qnearfieldsharetarget.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNearFieldShareTarget : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QNearFieldShareTarget(); + QNearFieldShareManager::ShareModes shareModes() const; + bool share(const QNdefMessage &message); + bool share(const QList &files); + void cancel(); + bool isShareInProgress() const; + QNearFieldShareManager::ShareError shareError() const; + +signals: + void error(QNearFieldShareManager::ShareError error); + void shareFinished(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldtarget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldtarget.sip new file mode 100644 index 0000000..7ab98c3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qnearfieldtarget.sip @@ -0,0 +1,132 @@ +// qnearfieldtarget.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QNearFieldTarget : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Type + { + ProprietaryTag, + NfcTagType1, + NfcTagType2, + NfcTagType3, + NfcTagType4, + MifareTag, + }; + + enum AccessMethod + { + UnknownAccess, + NdefAccess, + TagTypeSpecificAccess, + LlcpAccess, + }; + + typedef QFlags AccessMethods; + + enum Error + { + NoError, + UnknownError, + UnsupportedError, + TargetOutOfRangeError, + NoResponseError, + ChecksumMismatchError, + InvalidParametersError, + NdefReadError, + NdefWriteError, +%If (Qt_5_9_0 -) + CommandError, +%End + }; + + class RequestId + { +%TypeHeaderCode +#include +%End + + public: + RequestId(); + RequestId(const QNearFieldTarget::RequestId &other); + ~RequestId(); + bool isValid() const; + int refCount() const; + bool operator<(const QNearFieldTarget::RequestId &other) const; + bool operator==(const QNearFieldTarget::RequestId &other) const; + bool operator!=(const QNearFieldTarget::RequestId &other) const; + }; + + explicit QNearFieldTarget(QObject *parent /TransferThis/ = 0); + virtual ~QNearFieldTarget(); + virtual QByteArray uid() const = 0; + virtual QUrl url() const; + virtual QNearFieldTarget::Type type() const = 0; + virtual QNearFieldTarget::AccessMethods accessMethods() const = 0; + bool isProcessingCommand() const; + virtual bool hasNdefMessage(); + virtual QNearFieldTarget::RequestId readNdefMessages(); + virtual QNearFieldTarget::RequestId writeNdefMessages(const QList &messages); + virtual QNearFieldTarget::RequestId sendCommand(const QByteArray &command); + virtual QNearFieldTarget::RequestId sendCommands(const QList &commands); + virtual bool waitForRequestCompleted(const QNearFieldTarget::RequestId &id, int msecs = 5000) /ReleaseGIL/; + QVariant requestResponse(const QNearFieldTarget::RequestId &id); + void setResponseForRequest(const QNearFieldTarget::RequestId &id, const QVariant &response, bool emitRequestCompleted = true); + +protected: + virtual bool handleResponse(const QNearFieldTarget::RequestId &id, const QByteArray &response); +%If (Qt_5_12_0 -) + void reportError(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id); +%End + +signals: + void disconnected(); + void ndefMessageRead(const QNdefMessage &message); + void ndefMessagesWritten(); + void requestCompleted(const QNearFieldTarget::RequestId &id); + void error(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id); + +public: +%If (Qt_5_9_0 -) + bool keepConnection() const; +%End +%If (Qt_5_9_0 -) + bool setKeepConnection(bool isPersistent); +%End +%If (Qt_5_9_0 -) + bool disconnect(); +%End +%If (Qt_5_9_0 -) + int maxCommandLength() const; +%End +}; + +%End +%If (Qt_5_5_0 -) +QFlags operator|(QNearFieldTarget::AccessMethod f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qqmlndefrecord.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qqmlndefrecord.sip new file mode 100644 index 0000000..d5752ac --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtNfc/qqmlndefrecord.sip @@ -0,0 +1,60 @@ +// qqmlndefrecord.sip generated by MetaSIP +// +// This file is part of the QtNfc Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_5_0 -) + +class QQmlNdefRecord : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum TypeNameFormat + { + Empty, + NfcRtd, + Mime, + Uri, + ExternalRtd, + Unknown, + }; + + explicit QQmlNdefRecord(QObject *parent /TransferThis/ = 0); + QQmlNdefRecord(const QNdefRecord &record, QObject *parent /TransferThis/ = 0); +%If (Qt_5_6_0 -) + virtual ~QQmlNdefRecord(); +%End + QString type() const; + void setType(const QString &t); + void setTypeNameFormat(QQmlNdefRecord::TypeNameFormat typeNameFormat); + QQmlNdefRecord::TypeNameFormat typeNameFormat() const; + QNdefRecord record() const; + void setRecord(const QNdefRecord &record); + +signals: + void typeChanged(); + void typeNameFormatChanged(); + void recordChanged(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/QtOpenGL.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/QtOpenGL.toml new file mode 100644 index 0000000..cc7f076 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/QtOpenGL.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtOpenGL. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/QtOpenGLmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/QtOpenGLmod.sip new file mode 100644 index 0000000..0c13fcc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/QtOpenGLmod.sip @@ -0,0 +1,50 @@ +// QtOpenGLmod.sip generated by MetaSIP +// +// This file is part of the QtOpenGL Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtOpenGL, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qgl.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/qgl.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/qgl.sip new file mode 100644 index 0000000..0540e79 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtOpenGL/qgl.sip @@ -0,0 +1,336 @@ +// qgl.sip generated by MetaSIP +// +// This file is part of the QtOpenGL Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_OpenGL) + +namespace QGL +{ +%TypeHeaderCode +#include +%End + + enum FormatOption + { + DoubleBuffer, + DepthBuffer, + Rgba, + AlphaChannel, + AccumBuffer, + StencilBuffer, + StereoBuffers, + DirectRendering, + HasOverlay, + SampleBuffers, + SingleBuffer, + NoDepthBuffer, + ColorIndex, + NoAlphaChannel, + NoAccumBuffer, + NoStencilBuffer, + NoStereoBuffers, + IndirectRendering, + NoOverlay, + NoSampleBuffers, + DeprecatedFunctions, + NoDeprecatedFunctions, + }; + + typedef QFlags FormatOptions; +}; + +%End +%If (PyQt_OpenGL) +QFlags operator|(QGL::FormatOption f1, QFlags f2); +%End +%If (PyQt_OpenGL) + +class QGLFormat +{ +%TypeHeaderCode +#include +%End + +public: + enum OpenGLVersionFlag + { + OpenGL_Version_None, + OpenGL_Version_1_1, + OpenGL_Version_1_2, + OpenGL_Version_1_3, + OpenGL_Version_1_4, + OpenGL_Version_1_5, + OpenGL_Version_2_0, + OpenGL_Version_2_1, + OpenGL_Version_3_0, + OpenGL_Version_3_1, + OpenGL_Version_3_2, + OpenGL_Version_3_3, + OpenGL_Version_4_0, + OpenGL_Version_4_1, + OpenGL_Version_4_2, + OpenGL_Version_4_3, + OpenGL_ES_Common_Version_1_0, + OpenGL_ES_CommonLite_Version_1_0, + OpenGL_ES_Common_Version_1_1, + OpenGL_ES_CommonLite_Version_1_1, + OpenGL_ES_Version_2_0, + }; + + typedef QFlags OpenGLVersionFlags; + QGLFormat(); + QGLFormat(QGL::FormatOptions options, int plane = 0); + QGLFormat(const QGLFormat &other); + ~QGLFormat(); + void setDepthBufferSize(int size); + int depthBufferSize() const; + void setAccumBufferSize(int size); + int accumBufferSize() const; + void setAlphaBufferSize(int size); + int alphaBufferSize() const; + void setStencilBufferSize(int size); + int stencilBufferSize() const; + void setSampleBuffers(bool enable); + void setSamples(int numSamples); + int samples() const; + void setDoubleBuffer(bool enable); + void setDepth(bool enable); + void setRgba(bool enable); + void setAlpha(bool enable); + void setAccum(bool enable); + void setStencil(bool enable); + void setStereo(bool enable); + void setDirectRendering(bool enable); + void setOverlay(bool enable); + int plane() const; + void setPlane(int plane); + void setOption(QGL::FormatOptions opt); + bool testOption(QGL::FormatOptions opt) const; + static QGLFormat defaultFormat(); + static void setDefaultFormat(const QGLFormat &f); + static QGLFormat defaultOverlayFormat(); + static void setDefaultOverlayFormat(const QGLFormat &f); + static bool hasOpenGL(); + static bool hasOpenGLOverlays(); + bool doubleBuffer() const; + bool depth() const; + bool rgba() const; + bool alpha() const; + bool accum() const; + bool stencil() const; + bool stereo() const; + bool directRendering() const; + bool hasOverlay() const; + bool sampleBuffers() const; + void setRedBufferSize(int size); + int redBufferSize() const; + void setGreenBufferSize(int size); + int greenBufferSize() const; + void setBlueBufferSize(int size); + int blueBufferSize() const; + void setSwapInterval(int interval); + int swapInterval() const; + static QGLFormat::OpenGLVersionFlags openGLVersionFlags(); + void setVersion(int major, int minor); + int majorVersion() const; + int minorVersion() const; + + enum OpenGLContextProfile + { + NoProfile, + CoreProfile, + CompatibilityProfile, + }; + + void setProfile(QGLFormat::OpenGLContextProfile profile); + QGLFormat::OpenGLContextProfile profile() const; +}; + +%End +%If (PyQt_OpenGL) +bool operator==(const QGLFormat &, const QGLFormat &); +%End +%If (PyQt_OpenGL) +bool operator!=(const QGLFormat &, const QGLFormat &); +%End +%If (PyQt_OpenGL) + +class QGLContext /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + QGLContext(const QGLFormat &format); + virtual ~QGLContext(); + virtual bool create(const QGLContext *shareContext = 0); + bool isValid() const; + bool isSharing() const; + void reset(); + QGLFormat format() const; + QGLFormat requestedFormat() const; + void setFormat(const QGLFormat &format); + virtual void makeCurrent(); + virtual void doneCurrent(); + virtual void swapBuffers() const; + GLuint bindTexture(const QImage &image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); + GLuint bindTexture(const QPixmap &pixmap, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); + void drawTexture(const QRectF &target, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D); + void drawTexture(const QPointF &point, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D); + GLuint bindTexture(const QString &fileName); + void deleteTexture(GLuint tx_id); + static void setTextureCacheLimit(int size); + static int textureCacheLimit(); + QFunctionPointer getProcAddress(const QString &proc) const; + QPaintDevice *device() const; + QColor overlayTransparentColor() const; + static const QGLContext *currentContext(); + +protected: + virtual bool chooseContext(const QGLContext *shareContext = 0); + bool deviceIsPixmap() const; + bool windowCreated() const; + void setWindowCreated(bool on); + bool initialized() const; + void setInitialized(bool on); + +public: + static bool areSharing(const QGLContext *context1, const QGLContext *context2); + + enum BindOption + { + NoBindOption, + InvertedYBindOption, + MipmapBindOption, + PremultipliedAlphaBindOption, + LinearFilteringBindOption, + DefaultBindOption, + }; + + typedef QFlags BindOptions; + GLuint bindTexture(const QImage &image, GLenum target, GLint format, QGLContext::BindOptions options); + GLuint bindTexture(const QPixmap &pixmap, GLenum target, GLint format, QGLContext::BindOptions options); + void moveToThread(QThread *thread); + +private: + QGLContext(const QGLContext &); +}; + +%End +%If (PyQt_OpenGL) + +class QGLWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QGLWidget, &sipType_QGLWidget, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + QGLWidget(QWidget *parent /TransferThis/ = 0, const QGLWidget *shareWidget = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + QGLWidget(QGLContext *context /Transfer/, QWidget *parent /TransferThis/ = 0, const QGLWidget *shareWidget = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + QGLWidget(const QGLFormat &format, QWidget *parent /TransferThis/ = 0, const QGLWidget *shareWidget = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QGLWidget(); + void qglColor(const QColor &c) const; + void qglClearColor(const QColor &c) const; + bool isValid() const; + bool isSharing() const; + void makeCurrent(); + void doneCurrent(); + bool doubleBuffer() const; + void swapBuffers(); + QGLFormat format() const; + QGLContext *context() const; + void setContext(QGLContext *context /Transfer/, const QGLContext *shareContext = 0, bool deleteOldContext = true); + QPixmap renderPixmap(int width = 0, int height = 0, bool useContext = false); + QImage grabFrameBuffer(bool withAlpha = false); + void makeOverlayCurrent(); + const QGLContext *overlayContext() const; + static QImage convertToGLFormat(const QImage &img); + void renderText(int x, int y, const QString &str, const QFont &font = QFont()); + void renderText(double x, double y, double z, const QString &str, const QFont &font = QFont()); + virtual QPaintEngine *paintEngine() const; + GLuint bindTexture(const QImage &image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); + GLuint bindTexture(const QPixmap &pixmap, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA); + GLuint bindTexture(const QString &fileName); + void drawTexture(const QRectF &target, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D); + void drawTexture(const QPointF &point, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D); + void deleteTexture(GLuint tx_id); + +public slots: + virtual void updateGL(); + virtual void updateOverlayGL(); + +protected: + virtual bool event(QEvent *); + virtual void initializeGL(); + virtual void resizeGL(int w, int h); + virtual void paintGL(); + virtual void initializeOverlayGL(); + virtual void resizeOverlayGL(int w, int h); + virtual void paintOverlayGL(); + void setAutoBufferSwap(bool on); + bool autoBufferSwap() const; + virtual void paintEvent(QPaintEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void glInit(); + virtual void glDraw(); + +public: + GLuint bindTexture(const QImage &image, GLenum target, GLint format, QGLContext::BindOptions options); + GLuint bindTexture(const QPixmap &pixmap, GLenum target, GLint format, QGLContext::BindOptions options); +}; + +%End +%If (PyQt_OpenGL) +QFlags operator|(QGLFormat::OpenGLVersionFlag f1, QFlags f2); +%End +%If (PyQt_OpenGL) +QFlags operator|(QGLContext::BindOption f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/QtPositioning.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/QtPositioning.toml new file mode 100644 index 0000000..1cab33a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/QtPositioning.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtPositioning. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/QtPositioningmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/QtPositioningmod.sip new file mode 100644 index 0000000..b6dc3e4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/QtPositioningmod.sip @@ -0,0 +1,60 @@ +// QtPositioningmod.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtPositioning, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%Include qgeoaddress.sip +%Include qgeoareamonitorinfo.sip +%Include qgeoareamonitorsource.sip +%Include qgeocircle.sip +%Include qgeocoordinate.sip +%Include qgeolocation.sip +%Include qgeopath.sip +%Include qgeopolygon.sip +%Include qgeopositioninfo.sip +%Include qgeopositioninfosource.sip +%Include qgeorectangle.sip +%Include qgeosatelliteinfo.sip +%Include qgeosatelliteinfosource.sip +%Include qgeoshape.sip +%Include qnmeapositioninfosource.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoaddress.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoaddress.sip new file mode 100644 index 0000000..449cd83 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoaddress.sip @@ -0,0 +1,60 @@ +// qgeoaddress.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoAddress +{ +%TypeHeaderCode +#include +%End + +public: + QGeoAddress(); + QGeoAddress(const QGeoAddress &other); + ~QGeoAddress(); + bool operator==(const QGeoAddress &other) const; + bool operator!=(const QGeoAddress &other) const; + QString text() const; + void setText(const QString &text); + QString country() const; + void setCountry(const QString &country); + QString countryCode() const; + void setCountryCode(const QString &countryCode); + QString state() const; + void setState(const QString &state); + QString county() const; + void setCounty(const QString &county); + QString city() const; + void setCity(const QString &city); + QString district() const; + void setDistrict(const QString &district); + QString postalCode() const; + void setPostalCode(const QString &postalCode); + QString street() const; + void setStreet(const QString &street); + bool isEmpty() const; + void clear(); + bool isTextGenerated() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoareamonitorinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoareamonitorinfo.sip new file mode 100644 index 0000000..7218ff9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoareamonitorinfo.sip @@ -0,0 +1,57 @@ +// qgeoareamonitorinfo.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoAreaMonitorInfo +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGeoAreaMonitorInfo(const QString &name = QString()); + QGeoAreaMonitorInfo(const QGeoAreaMonitorInfo &other); + ~QGeoAreaMonitorInfo(); + bool operator==(const QGeoAreaMonitorInfo &other) const; + bool operator!=(const QGeoAreaMonitorInfo &other) const; + QString name() const; + void setName(const QString &name); + QString identifier() const; + bool isValid() const; + QGeoShape area() const; + void setArea(const QGeoShape &newShape); + QDateTime expiration() const; + void setExpiration(const QDateTime &expiry); + bool isPersistent() const; + void setPersistent(bool isPersistent); + QVariantMap notificationParameters() const; + void setNotificationParameters(const QVariantMap ¶meters); +}; + +%End +%If (Qt_5_2_0 -) +QDataStream &operator<<(QDataStream &, const QGeoAreaMonitorInfo & /Constrained/); +%End +%If (Qt_5_2_0 -) +QDataStream &operator>>(QDataStream &, QGeoAreaMonitorInfo & /Constrained/); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoareamonitorsource.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoareamonitorsource.sip new file mode 100644 index 0000000..5202948 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoareamonitorsource.sip @@ -0,0 +1,73 @@ +// qgeoareamonitorsource.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoAreaMonitorSource : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + AccessError, + InsufficientPositionInfo, + UnknownSourceError, + NoError, + }; + + enum AreaMonitorFeature + { + PersistentAreaMonitorFeature, + AnyAreaMonitorFeature, + }; + + typedef QFlags AreaMonitorFeatures; + explicit QGeoAreaMonitorSource(QObject *parent /TransferThis/); + virtual ~QGeoAreaMonitorSource(); + static QGeoAreaMonitorSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/; + static QGeoAreaMonitorSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/; + static QStringList availableSources(); + virtual void setPositionInfoSource(QGeoPositionInfoSource *source /Transfer/); + virtual QGeoPositionInfoSource *positionInfoSource() const; + QString sourceName() const; + virtual QGeoAreaMonitorSource::Error error() const = 0; + virtual QFlags supportedAreaMonitorFeatures() const = 0; + virtual bool startMonitoring(const QGeoAreaMonitorInfo &monitor) = 0; + virtual bool stopMonitoring(const QGeoAreaMonitorInfo &monitor) = 0; + virtual bool requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal) = 0; + virtual QList activeMonitors() const = 0; + virtual QList activeMonitors(const QGeoShape &lookupArea) const = 0; + +signals: + void areaEntered(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update); + void areaExited(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update); + void monitorExpired(const QGeoAreaMonitorInfo &monitor); + void error(QGeoAreaMonitorSource::Error error); + +private: + QGeoAreaMonitorSource(const QGeoAreaMonitorSource &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeocircle.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeocircle.sip new file mode 100644 index 0000000..dce4034 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeocircle.sip @@ -0,0 +1,53 @@ +// qgeocircle.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoCircle : public QGeoShape +{ +%TypeHeaderCode +#include +%End + +public: + QGeoCircle(); + QGeoCircle(const QGeoCoordinate ¢er, qreal radius = -1.); + QGeoCircle(const QGeoCircle &other); + QGeoCircle(const QGeoShape &other); + ~QGeoCircle(); + bool operator==(const QGeoCircle &other) const; + bool operator!=(const QGeoCircle &other) const; + void setCenter(const QGeoCoordinate ¢er); + QGeoCoordinate center() const; + void setRadius(qreal radius); + qreal radius() const; + void translate(double degreesLatitude, double degreesLongitude); + QGeoCircle translated(double degreesLatitude, double degreesLongitude) const; +%If (Qt_5_5_0 -) + QString toString() const; +%End +%If (Qt_5_9_0 -) + void extendCircle(const QGeoCoordinate &coordinate); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeocoordinate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeocoordinate.sip new file mode 100644 index 0000000..d38267c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeocoordinate.sip @@ -0,0 +1,83 @@ +// qgeocoordinate.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoCoordinate +{ +%TypeHeaderCode +#include +%End + +public: + enum CoordinateType + { + InvalidCoordinate, + Coordinate2D, + Coordinate3D, + }; + + enum CoordinateFormat + { + Degrees, + DegreesWithHemisphere, + DegreesMinutes, + DegreesMinutesWithHemisphere, + DegreesMinutesSeconds, + DegreesMinutesSecondsWithHemisphere, + }; + + QGeoCoordinate(); + QGeoCoordinate(double latitude, double longitude); + QGeoCoordinate(double latitude, double longitude, double altitude); + QGeoCoordinate(const QGeoCoordinate &other); + ~QGeoCoordinate(); + bool operator==(const QGeoCoordinate &other) const; + bool operator!=(const QGeoCoordinate &other) const; + bool isValid() const; + QGeoCoordinate::CoordinateType type() const; + void setLatitude(double latitude); + double latitude() const; + void setLongitude(double longitude); + double longitude() const; + void setAltitude(double altitude); + double altitude() const; + qreal distanceTo(const QGeoCoordinate &other) const; + qreal azimuthTo(const QGeoCoordinate &other) const; + QGeoCoordinate atDistanceAndAzimuth(qreal distance, qreal azimuth, qreal distanceUp = 0.0) const; + QString toString(QGeoCoordinate::CoordinateFormat format = QGeoCoordinate::DegreesMinutesSecondsWithHemisphere) const; +%If (Qt_5_7_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; + +%End +%If (Qt_5_2_0 -) +QDataStream &operator<<(QDataStream &stream, const QGeoCoordinate &coordinate /Constrained/); +%End +%If (Qt_5_2_0 -) +QDataStream &operator>>(QDataStream &stream, QGeoCoordinate &coordinate /Constrained/); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeolocation.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeolocation.sip new file mode 100644 index 0000000..f030b02 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeolocation.sip @@ -0,0 +1,52 @@ +// qgeolocation.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoLocation +{ +%TypeHeaderCode +#include +%End + +public: + QGeoLocation(); + QGeoLocation(const QGeoLocation &other); + ~QGeoLocation(); + bool operator==(const QGeoLocation &other) const; + bool operator!=(const QGeoLocation &other) const; + QGeoAddress address() const; + void setAddress(const QGeoAddress &address); + QGeoCoordinate coordinate() const; + void setCoordinate(const QGeoCoordinate &position); + QGeoRectangle boundingBox() const; + void setBoundingBox(const QGeoRectangle &box); + bool isEmpty() const; +%If (Qt_5_13_0 -) + QVariantMap extendedAttributes() const; +%End +%If (Qt_5_13_0 -) + void setExtendedAttributes(const QVariantMap &data); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopath.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopath.sip new file mode 100644 index 0000000..1d8c7a4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopath.sip @@ -0,0 +1,62 @@ +// qgeopath.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_9_0 -) + +class QGeoPath : public QGeoShape +{ +%TypeHeaderCode +#include +%End + +public: + QGeoPath(); + QGeoPath(const QList &path, const qreal &width = 0.); + QGeoPath(const QGeoPath &other); + QGeoPath(const QGeoShape &other); + ~QGeoPath(); + bool operator==(const QGeoPath &other) const; + bool operator!=(const QGeoPath &other) const; + void setPath(const QList &path); + const QList &path() const; + void setWidth(const qreal &width); + qreal width() const; + void translate(double degreesLatitude, double degreesLongitude); + QGeoPath translated(double degreesLatitude, double degreesLongitude) const; + double length(int indexFrom = 0, int indexTo = -1) const; + void addCoordinate(const QGeoCoordinate &coordinate); + void insertCoordinate(int index, const QGeoCoordinate &coordinate); + void replaceCoordinate(int index, const QGeoCoordinate &coordinate); + QGeoCoordinate coordinateAt(int index) const; + bool containsCoordinate(const QGeoCoordinate &coordinate) const; + void removeCoordinate(const QGeoCoordinate &coordinate); + void removeCoordinate(int index); + QString toString() const; +%If (Qt_5_10_0 -) + int size() const; +%End +%If (Qt_5_12_0 -) + void clearPath(); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopolygon.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopolygon.sip new file mode 100644 index 0000000..5213b58 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopolygon.sip @@ -0,0 +1,81 @@ +// qgeopolygon.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_10_0 -) + +class QGeoPolygon : public QGeoShape +{ +%TypeHeaderCode +#include +%End + +public: + QGeoPolygon(); + QGeoPolygon(const QList &path); + QGeoPolygon(const QGeoPolygon &other); + QGeoPolygon(const QGeoShape &other); + ~QGeoPolygon(); + bool operator==(const QGeoPolygon &other) const; + bool operator!=(const QGeoPolygon &other) const; + void setPath(const QList &path); + const QList &path() const; + void translate(double degreesLatitude, double degreesLongitude); + QGeoPolygon translated(double degreesLatitude, double degreesLongitude) const; + double length(int indexFrom = 0, int indexTo = -1) const; + int size() const; + void addCoordinate(const QGeoCoordinate &coordinate); + void insertCoordinate(int index, const QGeoCoordinate &coordinate); + void replaceCoordinate(int index, const QGeoCoordinate &coordinate); + QGeoCoordinate coordinateAt(int index) const; + bool containsCoordinate(const QGeoCoordinate &coordinate) const; + void removeCoordinate(const QGeoCoordinate &coordinate); + void removeCoordinate(int index); + QString toString() const; +%If (Qt_5_12_0 -) + void addHole(const QList &holePath); +%End +%If (Qt_5_12_0 -) + void addHole(const QVariant &holePath); +%End +%If (Qt_5_12_0 -) + const QVariantList hole(int index) const; +%End +%If (Qt_5_12_0 -) + const QList holePath(int index) const; +%End +%If (Qt_5_12_0 -) + void removeHole(int index); +%End +%If (Qt_5_12_0 -) + int holesCount() const; +%End + +protected: +%If (Qt_5_12_0 -) + void setPerimeter(const QVariantList &path); +%End +%If (Qt_5_12_0 -) + QVariantList perimeter() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopositioninfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopositioninfo.sip new file mode 100644 index 0000000..bb2688f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopositioninfo.sip @@ -0,0 +1,65 @@ +// qgeopositioninfo.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoPositionInfo +{ +%TypeHeaderCode +#include +%End + +public: + enum Attribute + { + Direction, + GroundSpeed, + VerticalSpeed, + MagneticVariation, + HorizontalAccuracy, + VerticalAccuracy, + }; + + QGeoPositionInfo(); + QGeoPositionInfo(const QGeoCoordinate &coordinate, const QDateTime &updateTime); + QGeoPositionInfo(const QGeoPositionInfo &other); + ~QGeoPositionInfo(); + bool operator==(const QGeoPositionInfo &other) const; + bool operator!=(const QGeoPositionInfo &other) const; + bool isValid() const; + void setTimestamp(const QDateTime ×tamp); + QDateTime timestamp() const; + void setCoordinate(const QGeoCoordinate &coordinate); + QGeoCoordinate coordinate() const; + void setAttribute(QGeoPositionInfo::Attribute attribute, qreal value); + qreal attribute(QGeoPositionInfo::Attribute attribute) const; + void removeAttribute(QGeoPositionInfo::Attribute attribute); + bool hasAttribute(QGeoPositionInfo::Attribute attribute) const; +}; + +%End +%If (Qt_5_2_0 -) +QDataStream &operator<<(QDataStream &stream, const QGeoPositionInfo &info /Constrained/); +%End +%If (Qt_5_2_0 -) +QDataStream &operator>>(QDataStream &stream, QGeoPositionInfo &info /Constrained/); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopositioninfosource.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopositioninfosource.sip new file mode 100644 index 0000000..d4512a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeopositioninfosource.sip @@ -0,0 +1,129 @@ +// qgeopositioninfosource.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoPositionInfoSource : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QGeoPositionInfoSource, &sipType_QGeoPositionInfoSource, 3, 1}, + {sipName_QGeoSatelliteInfoSource, &sipType_QGeoSatelliteInfoSource, -1, 2}, + {sipName_QGeoAreaMonitorSource, &sipType_QGeoAreaMonitorSource, -1, -1}, + {sipName_QNmeaPositionInfoSource, &sipType_QNmeaPositionInfoSource, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum Error + { + AccessError, + ClosedError, + UnknownSourceError, + NoError, + }; + + enum PositioningMethod + { + NoPositioningMethods, + SatellitePositioningMethods, + NonSatellitePositioningMethods, + AllPositioningMethods, + }; + + typedef QFlags PositioningMethods; + explicit QGeoPositionInfoSource(QObject *parent /TransferThis/); + virtual ~QGeoPositionInfoSource(); + virtual void setUpdateInterval(int msec); + int updateInterval() const; + virtual void setPreferredPositioningMethods(QGeoPositionInfoSource::PositioningMethods methods); + QGeoPositionInfoSource::PositioningMethods preferredPositioningMethods() const; + virtual QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const = 0; + virtual QGeoPositionInfoSource::PositioningMethods supportedPositioningMethods() const = 0; + virtual int minimumUpdateInterval() const = 0; + QString sourceName() const; + static QGeoPositionInfoSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/; +%If (Qt_5_14_0 -) + static QGeoPositionInfoSource *createDefaultSource(const QVariantMap ¶meters, QObject *parent /TransferThis/) /Factory/; +%End + static QGeoPositionInfoSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/; +%If (Qt_5_14_0 -) + static QGeoPositionInfoSource *createSource(const QString &sourceName, const QVariantMap ¶meters, QObject *parent /TransferThis/) /Factory/; +%End + static QStringList availableSources(); + virtual QGeoPositionInfoSource::Error error() const = 0; + +public slots: + virtual void startUpdates() = 0; + virtual void stopUpdates() = 0; + virtual void requestUpdate(int timeout = 0) = 0; + +signals: + void positionUpdated(const QGeoPositionInfo &update); + void updateTimeout(); + void error(QGeoPositionInfoSource::Error); +%If (Qt_5_12_0 -) + void supportedPositioningMethodsChanged(); +%End + +public: +%If (Qt_5_14_0 -) + bool setBackendProperty(const QString &name, const QVariant &value); +%End +%If (Qt_5_14_0 -) + QVariant backendProperty(const QString &name) const; +%End + +private: + QGeoPositionInfoSource(const QGeoPositionInfoSource &); +}; + +%End +%If (Qt_5_2_0 -) +QFlags operator|(QGeoPositionInfoSource::PositioningMethod f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeorectangle.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeorectangle.sip new file mode 100644 index 0000000..edd6913 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeorectangle.sip @@ -0,0 +1,72 @@ +// qgeorectangle.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoRectangle : public QGeoShape +{ +%TypeHeaderCode +#include +%End + +public: + QGeoRectangle(); + QGeoRectangle(const QGeoCoordinate ¢er, double degreesWidth, double degreesHeight); + QGeoRectangle(const QGeoCoordinate &topLeft, const QGeoCoordinate &bottomRight); +%If (Qt_5_3_0 -) + QGeoRectangle(const QList &coordinates); +%End + QGeoRectangle(const QGeoRectangle &other); + QGeoRectangle(const QGeoShape &other); + ~QGeoRectangle(); + bool operator==(const QGeoRectangle &other) const; + bool operator!=(const QGeoRectangle &other) const; + void setTopLeft(const QGeoCoordinate &topLeft); + QGeoCoordinate topLeft() const; + void setTopRight(const QGeoCoordinate &topRight); + QGeoCoordinate topRight() const; + void setBottomLeft(const QGeoCoordinate &bottomLeft); + QGeoCoordinate bottomLeft() const; + void setBottomRight(const QGeoCoordinate &bottomRight); + QGeoCoordinate bottomRight() const; + void setCenter(const QGeoCoordinate ¢er); + QGeoCoordinate center() const; + void setWidth(double degreesWidth); + double width() const; + void setHeight(double degreesHeight); + double height() const; + bool contains(const QGeoRectangle &rectangle) const; + bool intersects(const QGeoRectangle &rectangle) const; + void translate(double degreesLatitude, double degreesLongitude); + QGeoRectangle translated(double degreesLatitude, double degreesLongitude) const; + QGeoRectangle united(const QGeoRectangle &rectangle) const; + QGeoRectangle &operator|=(const QGeoRectangle &rectangle); + QGeoRectangle operator|(const QGeoRectangle &rectangle) const; +%If (Qt_5_5_0 -) + QString toString() const; +%End +%If (Qt_5_9_0 -) + void extendRectangle(const QGeoCoordinate &coordinate); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeosatelliteinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeosatelliteinfo.sip new file mode 100644 index 0000000..70d4542 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeosatelliteinfo.sip @@ -0,0 +1,68 @@ +// qgeosatelliteinfo.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoSatelliteInfo +{ +%TypeHeaderCode +#include +%End + +public: + enum Attribute + { + Elevation, + Azimuth, + }; + + enum SatelliteSystem + { + Undefined, + GPS, + GLONASS, + }; + + QGeoSatelliteInfo(); + QGeoSatelliteInfo(const QGeoSatelliteInfo &other); + ~QGeoSatelliteInfo(); + bool operator==(const QGeoSatelliteInfo &other) const; + bool operator!=(const QGeoSatelliteInfo &other) const; + void setSatelliteSystem(QGeoSatelliteInfo::SatelliteSystem system); + QGeoSatelliteInfo::SatelliteSystem satelliteSystem() const; + void setSatelliteIdentifier(int satId); + int satelliteIdentifier() const; + void setSignalStrength(int signalStrength); + int signalStrength() const; + void setAttribute(QGeoSatelliteInfo::Attribute attribute, qreal value); + qreal attribute(QGeoSatelliteInfo::Attribute attribute) const; + void removeAttribute(QGeoSatelliteInfo::Attribute attribute); + bool hasAttribute(QGeoSatelliteInfo::Attribute attribute) const; +}; + +%End +%If (Qt_5_2_0 -) +QDataStream &operator<<(QDataStream &stream, const QGeoSatelliteInfo &info /Constrained/); +%End +%If (Qt_5_2_0 -) +QDataStream &operator>>(QDataStream &stream, QGeoSatelliteInfo &info /Constrained/); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeosatelliteinfosource.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeosatelliteinfosource.sip new file mode 100644 index 0000000..8872f9f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeosatelliteinfosource.sip @@ -0,0 +1,72 @@ +// qgeosatelliteinfosource.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoSatelliteInfoSource : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum Error + { + AccessError, + ClosedError, + NoError, + UnknownSourceError, + }; + + explicit QGeoSatelliteInfoSource(QObject *parent /TransferThis/); + virtual ~QGeoSatelliteInfoSource(); + static QGeoSatelliteInfoSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/; +%If (Qt_5_14_0 -) + static QGeoSatelliteInfoSource *createDefaultSource(const QVariantMap ¶meters, QObject *parent /TransferThis/) /Factory/; +%End + static QGeoSatelliteInfoSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/; +%If (Qt_5_14_0 -) + static QGeoSatelliteInfoSource *createSource(const QString &sourceName, const QVariantMap ¶meters, QObject *parent /TransferThis/) /Factory/; +%End + static QStringList availableSources(); + QString sourceName() const; + virtual void setUpdateInterval(int msec); + int updateInterval() const; + virtual int minimumUpdateInterval() const = 0; + virtual QGeoSatelliteInfoSource::Error error() const = 0; + +public slots: + virtual void startUpdates() = 0; + virtual void stopUpdates() = 0; + virtual void requestUpdate(int timeout = 0) = 0; + +signals: + void satellitesInViewUpdated(const QList &satellites); + void satellitesInUseUpdated(const QList &satellites); + void requestTimeout(); + void error(QGeoSatelliteInfoSource::Error); + +private: + QGeoSatelliteInfoSource(const QGeoSatelliteInfoSource &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoshape.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoshape.sip new file mode 100644 index 0000000..924522b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qgeoshape.sip @@ -0,0 +1,104 @@ +// qgeoshape.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QGeoShape +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + switch (sipCpp->type()) + { + case QGeoShape::CircleType: + sipType = sipType_QGeoCircle; + break; + + case QGeoShape::RectangleType: + sipType = sipType_QGeoRectangle; + break; + + #if QT_VERSION >= 0x050900 + case QGeoShape::PathType: + sipType = sipType_QGeoPath; + break; + #endif + + #if QT_VERSION >= 0x050a00 + case QGeoShape::PolygonType: + sipType = sipType_QGeoPolygon; + break; + #endif + + + default: + sipType = 0; + } +%End + +public: + QGeoShape(); + QGeoShape(const QGeoShape &other); + ~QGeoShape(); + + enum ShapeType + { + UnknownType, + RectangleType, + CircleType, +%If (Qt_5_9_0 -) + PathType, +%End +%If (Qt_5_10_0 -) + PolygonType, +%End + }; + + QGeoShape::ShapeType type() const; + bool isValid() const; + bool isEmpty() const; + bool contains(const QGeoCoordinate &coordinate) const; + bool operator==(const QGeoShape &other) const; + bool operator!=(const QGeoShape &other) const; +%If (Qt_5_3_0 -) + void extendShape(const QGeoCoordinate &coordinate); +%End +%If (Qt_5_5_0 -) + QGeoCoordinate center() const; +%End +%If (Qt_5_5_0 -) + QString toString() const; +%End +%If (Qt_5_9_0 -) + QGeoRectangle boundingGeoRectangle() const; +%End +}; + +%End +%If (Qt_5_2_0 -) +QDataStream &operator<<(QDataStream &stream, const QGeoShape &shape /Constrained/); +%End +%If (Qt_5_2_0 -) +QDataStream &operator>>(QDataStream &stream, QGeoShape &shape /Constrained/); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qnmeapositioninfosource.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qnmeapositioninfosource.sip new file mode 100644 index 0000000..7a7d041 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPositioning/qnmeapositioninfosource.sip @@ -0,0 +1,66 @@ +// qnmeapositioninfosource.sip generated by MetaSIP +// +// This file is part of the QtPositioning Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QNmeaPositionInfoSource : public QGeoPositionInfoSource +{ +%TypeHeaderCode +#include +%End + +public: + enum UpdateMode + { + RealTimeMode, + SimulationMode, + }; + + QNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode updateMode, QObject *parent /TransferThis/ = 0); + virtual ~QNmeaPositionInfoSource(); + QNmeaPositionInfoSource::UpdateMode updateMode() const; + void setDevice(QIODevice *source); + QIODevice *device() const; + virtual void setUpdateInterval(int msec); + virtual QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const; + virtual QGeoPositionInfoSource::PositioningMethods supportedPositioningMethods() const; + virtual int minimumUpdateInterval() const; + virtual QGeoPositionInfoSource::Error error() const; + +public slots: + virtual void startUpdates(); + virtual void stopUpdates(); + virtual void requestUpdate(int timeout = 0); + +protected: + virtual bool parsePosInfoFromNmeaData(const char *data /Encoding="None"/, int size, QGeoPositionInfo *posInfo, bool *hasFix); + +public: +%If (Qt_5_3_0 -) + void setUserEquivalentRangeError(double uere); +%End +%If (Qt_5_3_0 -) + double userEquivalentRangeError() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/QtPrintSupport.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/QtPrintSupport.toml new file mode 100644 index 0000000..01911de --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/QtPrintSupport.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtPrintSupport. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/QtPrintSupportmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/QtPrintSupportmod.sip new file mode 100644 index 0000000..c86b7ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/QtPrintSupportmod.sip @@ -0,0 +1,58 @@ +// QtPrintSupportmod.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtPrintSupport, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qabstractprintdialog.sip +%Include qpagesetupdialog.sip +%Include qprintdialog.sip +%Include qprintengine.sip +%Include qprinter.sip +%Include qprinterinfo.sip +%Include qprintpreviewdialog.sip +%Include qprintpreviewwidget.sip +%Include qpyprintsupport_qlist.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qabstractprintdialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qabstractprintdialog.sip new file mode 100644 index 0000000..e532df7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qabstractprintdialog.sip @@ -0,0 +1,174 @@ +// qabstractprintdialog.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_Printer) + +class QAbstractPrintDialog : public QDialog +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + #if defined(SIP_FEATURE_PyQt_PrintDialog) + {sipName_QPageSetupDialog, &sipType_QPageSetupDialog, -1, 1}, + #else + {0, 0, -1, 1}, + #endif + #if defined(SIP_FEATURE_PyQt_PrintPreviewWidget) + {sipName_QPrintPreviewWidget, &sipType_QPrintPreviewWidget, -1, 2}, + #else + {0, 0, -1, 2}, + #endif + #if defined(SIP_FEATURE_PyQt_PrintPreviewDialog) + {sipName_QPrintPreviewDialog, &sipType_QPrintPreviewDialog, -1, 3}, + #else + {0, 0, -1, 3}, + #endif + #if defined(SIP_FEATURE_PyQt_Printer) + {sipName_QAbstractPrintDialog, &sipType_QAbstractPrintDialog, 4, -1}, + #else + {0, 0, 4, -1}, + #endif + #if defined(SIP_FEATURE_PyQt_PrintDialog) + {sipName_QPrintDialog, &sipType_QPrintDialog, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum PrintRange + { + AllPages, + Selection, + PageRange, + CurrentPage, + }; + +%If (Py_v3) + + enum PrintDialogOption + { + None /PyName=None_/, + PrintToFile, + PrintSelection, + PrintPageRange, + PrintCollateCopies, + PrintShowPageSize, + PrintCurrentPage, + }; + +%End +%If (!Py_v3) +// Backward compatible PrintDialogOption for Python v2. +// Note that we have to duplicate the whole enum because MetaSIP doesn't +// support handwritten code in enum definitions. + +enum PrintDialogOption { + None, + None /PyName=None_/, + PrintToFile, + PrintSelection, + PrintPageRange, + PrintCollateCopies, + PrintShowPageSize, + PrintCurrentPage +}; +%End + typedef QFlags PrintDialogOptions; +%If (PyQt_PrintDialog) + QAbstractPrintDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0); + virtual ~QAbstractPrintDialog(); + virtual int exec() = 0 /PyName=exec_,ReleaseGIL/; +%If (Py_v3) + virtual int exec() = 0 /ReleaseGIL/; +%End + void setPrintRange(QAbstractPrintDialog::PrintRange range); + QAbstractPrintDialog::PrintRange printRange() const; + void setMinMax(int min, int max); + int minPage() const; + int maxPage() const; + void setFromTo(int fromPage, int toPage); + int fromPage() const; + int toPage() const; + QPrinter *printer() const; + void setOptionTabs(const QList &tabs); +%If (Qt_5_6_0 -) + void setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions options); +%End +%If (Qt_5_6_0 -) + QAbstractPrintDialog::PrintDialogOptions enabledOptions() const; +%End + +private: + QAbstractPrintDialog(const QAbstractPrintDialog &); + +public: +%End // PyQt_PrintDialog +}; + +%End +%If (PyQt_Printer) +QFlags operator|(QAbstractPrintDialog::PrintDialogOption f1, QFlags f2); +%End + +%ModuleHeaderCode +// Imports from QtCore. +typedef sipErrorState (*pyqt5_qtprintsupport_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); +extern pyqt5_qtprintsupport_get_connection_parts_t pyqt5_qtprintsupport_get_connection_parts; +%End + +%ModuleCode +// Imports from QtCore. +pyqt5_qtprintsupport_get_connection_parts_t pyqt5_qtprintsupport_get_connection_parts; +%End + +%PostInitialisationCode +// Imports from QtCore. +pyqt5_qtprintsupport_get_connection_parts = (pyqt5_qtprintsupport_get_connection_parts_t)sipImportSymbol("pyqt5_get_connection_parts"); +Q_ASSERT(pyqt5_qtprintsupport_get_connection_parts); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qpagesetupdialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qpagesetupdialog.sip new file mode 100644 index 0000000..8aaf5fa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qpagesetupdialog.sip @@ -0,0 +1,86 @@ +// qpagesetupdialog.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_PrintDialog) + +class QPageSetupDialog : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + QPageSetupDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0); + explicit QPageSetupDialog(QWidget *parent /TransferThis/ = 0); + virtual ~QPageSetupDialog(); + virtual void setVisible(bool visible); + virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%MethodCode + // Transfer ownership back to Python (a modal dialog will probably have the + // main window as it's parent). This means the Qt dialog will be deleted when + // the Python wrapper is garbage collected. Although this is a little + // inconsistent, it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipSelfWasArg ? sipCpp->QPageSetupDialog::exec() + : sipCpp->exec(); + Py_END_ALLOW_THREADS +%End + + virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; +%MethodCode + // Transfer ownership back to Python (a modal dialog will probably have the + // main window as it's parent). This means the Qt dialog will be deleted when + // the Python wrapper is garbage collected. Although this is a little + // inconsistent, it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipSelfWasArg ? sipCpp->QPageSetupDialog::exec() + : sipCpp->exec(); + Py_END_ALLOW_THREADS +%End + + virtual void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + virtual void done(int result); + QPrinter *printer(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintdialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintdialog.sip new file mode 100644 index 0000000..e08b90b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintdialog.sip @@ -0,0 +1,97 @@ +// qprintdialog.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_PrintDialog) + +class QPrintDialog : public QAbstractPrintDialog +{ +%TypeHeaderCode +#include +%End + +public: + QPrintDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0); + explicit QPrintDialog(QWidget *parent /TransferThis/ = 0); + virtual ~QPrintDialog(); + virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%MethodCode + // Transfer ownership back to Python (a modal dialog will probably have the + // main window as it's parent). This means the Qt dialog will be deleted when + // the Python wrapper is garbage collected. Although this is a little + // inconsistent, it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipSelfWasArg ? sipCpp->QPrintDialog::exec() + : sipCpp->exec(); + Py_END_ALLOW_THREADS +%End + +%If (Py_v3) + virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; +%MethodCode + // Transfer ownership back to Python (a modal dialog will probably have the + // main window as it's parent). This means the Qt dialog will be deleted when + // the Python wrapper is garbage collected. Although this is a little + // inconsistent, it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipSelfWasArg ? sipCpp->QPrintDialog::exec() + : sipCpp->exec(); + Py_END_ALLOW_THREADS +%End + +%End +%If (WS_X11) + virtual void accept(); +%End + virtual void done(int result); + void setOption(QAbstractPrintDialog::PrintDialogOption option, bool on = true); + bool testOption(QAbstractPrintDialog::PrintDialogOption option) const; + void setOptions(QAbstractPrintDialog::PrintDialogOptions options); + QAbstractPrintDialog::PrintDialogOptions options() const; + virtual void setVisible(bool visible); + virtual void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + +signals: + void accepted(); + void accepted(QPrinter *printer); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintengine.sip new file mode 100644 index 0000000..901472b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintengine.sip @@ -0,0 +1,86 @@ +// qprintengine.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_Printer) + +class QPrintEngine +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QPrintEngine(); + + enum PrintEnginePropertyKey + { + PPK_CollateCopies, + PPK_ColorMode, + PPK_Creator, + PPK_DocumentName, + PPK_FullPage, + PPK_NumberOfCopies, + PPK_Orientation, + PPK_OutputFileName, + PPK_PageOrder, + PPK_PageRect, + PPK_PageSize, + PPK_PaperRect, + PPK_PaperSource, + PPK_PrinterName, + PPK_PrinterProgram, + PPK_Resolution, + PPK_SelectionOption, + PPK_SupportedResolutions, + PPK_WindowsPageSize, + PPK_FontEmbedding, + PPK_Duplex, + PPK_PaperSources, + PPK_CustomPaperSize, + PPK_PageMargins, + PPK_PaperSize, + PPK_CopyCount, + PPK_SupportsMultipleCopies, +%If (Qt_5_1_0 -) + PPK_PaperName, +%End +%If (Qt_5_3_0 -) + PPK_QPageSize, +%End +%If (Qt_5_3_0 -) + PPK_QPageMargins, +%End +%If (Qt_5_3_0 -) + PPK_QPageLayout, +%End + PPK_CustomBase, + }; + + virtual void setProperty(QPrintEngine::PrintEnginePropertyKey key, const QVariant &value) = 0; + virtual QVariant property(QPrintEngine::PrintEnginePropertyKey key) const = 0; + virtual bool newPage() = 0; + virtual bool abort() = 0; + virtual int metric(QPaintDevice::PaintDeviceMetric) const = 0; + virtual QPrinter::PrinterState printerState() const = 0; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprinter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprinter.sip new file mode 100644 index 0000000..db9a77a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprinter.sip @@ -0,0 +1,216 @@ +// qprinter.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_Printer) + +class QPrinter : public QPagedPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + enum PrinterMode + { + ScreenResolution, + PrinterResolution, + HighResolution, + }; + + explicit QPrinter(QPrinter::PrinterMode mode = QPrinter::ScreenResolution); + QPrinter(const QPrinterInfo &printer, QPrinter::PrinterMode mode = QPrinter::ScreenResolution); + virtual ~QPrinter(); + + enum Orientation + { + Portrait, + Landscape, + }; + + typedef QPagedPaintDevice::PageSize PaperSize; + + enum PageOrder + { + FirstPageFirst, + LastPageFirst, + }; + + enum ColorMode + { + GrayScale, + Color, + }; + + enum PaperSource + { + OnlyOne, + Lower, + Middle, + Manual, + Envelope, + EnvelopeManual, + Auto, + Tractor, + SmallFormat, + LargeFormat, + LargeCapacity, + Cassette, + FormSource, + MaxPageSource, +%If (Qt_5_3_0 -) + Upper, +%End +%If (Qt_5_3_0 -) + CustomSource, +%End +%If (Qt_5_3_0 -) + LastPaperSource, +%End + }; + + enum PrinterState + { + Idle, + Active, + Aborted, + Error, + }; + + enum OutputFormat + { + NativeFormat, + PdfFormat, + }; + + enum PrintRange + { + AllPages, + Selection, + PageRange, + CurrentPage, + }; + + enum Unit + { + Millimeter, + Point, + Inch, + Pica, + Didot, + Cicero, + DevicePixel, + }; + + enum DuplexMode + { + DuplexNone, + DuplexAuto, + DuplexLongSide, + DuplexShortSide, + }; + + void setOutputFormat(QPrinter::OutputFormat format); + QPrinter::OutputFormat outputFormat() const; + void setPrinterName(const QString &); + QString printerName() const; + bool isValid() const; + void setOutputFileName(const QString &); + QString outputFileName() const; + void setPrintProgram(const QString &); + QString printProgram() const; + void setDocName(const QString &); + QString docName() const; + void setCreator(const QString &); + QString creator() const; + void setOrientation(QPrinter::Orientation); + QPrinter::Orientation orientation() const; + virtual void setPageSizeMM(const QSizeF &size); + void setPaperSize(QPrinter::PaperSize); + QPrinter::PaperSize paperSize() const; + void setPaperSize(const QSizeF &paperSize, QPrinter::Unit unit); + QSizeF paperSize(QPrinter::Unit unit) const; + void setPageOrder(QPrinter::PageOrder); + QPrinter::PageOrder pageOrder() const; + void setResolution(int); + int resolution() const; + void setColorMode(QPrinter::ColorMode); + QPrinter::ColorMode colorMode() const; + void setCollateCopies(bool collate); + bool collateCopies() const; + void setFullPage(bool); + bool fullPage() const; + void setCopyCount(int); + int copyCount() const; + bool supportsMultipleCopies() const; + void setPaperSource(QPrinter::PaperSource); + QPrinter::PaperSource paperSource() const; + void setDuplex(QPrinter::DuplexMode duplex); + QPrinter::DuplexMode duplex() const; + QList supportedResolutions() const; + void setFontEmbeddingEnabled(bool enable); + bool fontEmbeddingEnabled() const; + void setDoubleSidedPrinting(bool enable); + bool doubleSidedPrinting() const; + QRect paperRect() const; + QRect pageRect() const; + QRectF paperRect(QPrinter::Unit) const; + QRectF pageRect(QPrinter::Unit) const; +%If (WS_X11 || WS_MACX) + QString printerSelectionOption() const; +%End +%If (WS_X11 || WS_MACX) + void setPrinterSelectionOption(const QString &); +%End + virtual bool newPage(); + bool abort(); + QPrinter::PrinterState printerState() const; + virtual QPaintEngine *paintEngine() const; + QPrintEngine *printEngine() const; + void setFromTo(int fromPage, int toPage); + int fromPage() const; + int toPage() const; + void setPrintRange(QPrinter::PrintRange range); + QPrinter::PrintRange printRange() const; + virtual void setMargins(const QPagedPaintDevice::Margins &m); + void setPageMargins(qreal left, qreal top, qreal right, qreal bottom, QPrinter::Unit unit); + void getPageMargins(qreal *left, qreal *top, qreal *right, qreal *bottom, QPrinter::Unit unit) const; + +protected: + virtual int metric(QPaintDevice::PaintDeviceMetric) const; + void setEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine); + +public: +%If (Qt_5_1_0 -) + void setPaperName(const QString &paperName); +%End +%If (Qt_5_1_0 -) + QString paperName() const; +%End +%If (Qt_5_10_0 -) + void setPdfVersion(QPagedPaintDevice::PdfVersion version); +%End +%If (Qt_5_10_0 -) + QPagedPaintDevice::PdfVersion pdfVersion() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprinterinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprinterinfo.sip new file mode 100644 index 0000000..9c882b2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprinterinfo.sip @@ -0,0 +1,93 @@ +// qprinterinfo.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_Printer) + +class QPrinterInfo +{ +%TypeHeaderCode +#include +%End + +public: + QPrinterInfo(); + QPrinterInfo(const QPrinterInfo &src); + explicit QPrinterInfo(const QPrinter &printer); + ~QPrinterInfo(); + QString printerName() const; + bool isNull() const; + bool isDefault() const; + QList supportedPaperSizes() const; +%If (Qt_5_1_0 -) + QList> supportedSizesWithNames() const; +%End + static QList availablePrinters(); + static QPrinterInfo defaultPrinter(); + QString description() const; + QString location() const; + QString makeAndModel() const; + static QPrinterInfo printerInfo(const QString &printerName); +%If (Qt_5_3_0 -) + bool isRemote() const; +%End +%If (Qt_5_3_0 -) + QPrinter::PrinterState state() const; +%End +%If (Qt_5_3_0 -) + QList supportedPageSizes() const; +%End +%If (Qt_5_3_0 -) + QPageSize defaultPageSize() const; +%End +%If (Qt_5_3_0 -) + bool supportsCustomPageSizes() const; +%End +%If (Qt_5_3_0 -) + QPageSize minimumPhysicalPageSize() const; +%End +%If (Qt_5_3_0 -) + QPageSize maximumPhysicalPageSize() const; +%End +%If (Qt_5_3_0 -) + QList supportedResolutions() const; +%End +%If (Qt_5_3_0 -) + static QStringList availablePrinterNames(); +%End +%If (Qt_5_3_0 -) + static QString defaultPrinterName(); +%End +%If (Qt_5_4_0 -) + QPrinter::DuplexMode defaultDuplexMode() const; +%End +%If (Qt_5_4_0 -) + QList supportedDuplexModes() const; +%End +%If (Qt_5_13_0 -) + QPrinter::ColorMode defaultColorMode() const; +%End +%If (Qt_5_13_0 -) + QList supportedColorModes() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintpreviewdialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintpreviewdialog.sip new file mode 100644 index 0000000..cea2f9a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintpreviewdialog.sip @@ -0,0 +1,59 @@ +// qprintpreviewdialog.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_PrintPreviewDialog) + +class QPrintPreviewDialog : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + QPrintPreviewDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + QPrintPreviewDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QPrintPreviewDialog(); + virtual void setVisible(bool visible); + virtual void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + QPrinter *printer(); + virtual void done(int result); + +signals: + void paintRequested(QPrinter *printer); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintpreviewwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintpreviewwidget.sip new file mode 100644 index 0000000..2e66723 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qprintpreviewwidget.sip @@ -0,0 +1,85 @@ +// qprintpreviewwidget.sip generated by MetaSIP +// +// This file is part of the QtPrintSupport Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_PrintPreviewWidget) + +class QPrintPreviewWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum ViewMode + { + SinglePageView, + FacingPagesView, + AllPagesView, + }; + + enum ZoomMode + { + CustomZoom, + FitToWidth, + FitInView, + }; + + QPrintPreviewWidget(QPrinter *printer, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + QPrintPreviewWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QPrintPreviewWidget(); + qreal zoomFactor() const; + QPrinter::Orientation orientation() const; + QPrintPreviewWidget::ViewMode viewMode() const; + QPrintPreviewWidget::ZoomMode zoomMode() const; + int currentPage() const; + +public slots: + virtual void setVisible(bool visible); + void print() /PyName=print_/; +%If (Py_v3) + void print(); +%End + void zoomIn(qreal factor = 1.1); + void zoomOut(qreal factor = 1.1); + void setZoomFactor(qreal zoomFactor); + void setOrientation(QPrinter::Orientation orientation); + void setViewMode(QPrintPreviewWidget::ViewMode viewMode); + void setZoomMode(QPrintPreviewWidget::ZoomMode zoomMode); + void setCurrentPage(int pageNumber); + void fitToWidth(); + void fitInView(); + void setLandscapeOrientation(); + void setPortraitOrientation(); + void setSinglePageViewMode(); + void setFacingPagesViewMode(); + void setAllPagesViewMode(); + void updatePreview(); + +signals: + void paintRequested(QPrinter *printer); + void previewChanged(); + +public: + int pageCount() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qpyprintsupport_qlist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qpyprintsupport_qlist.sip new file mode 100644 index 0000000..3d00f58 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtPrintSupport/qpyprintsupport_qlist.sip @@ -0,0 +1,354 @@ +// This is the SIP interface definition for the QList based mapped types +// specific to the QtPrintSupport module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (PyQt_Printer) + +%MappedType QList + /TypeHintIn="Iterable[QPagedPaintDevice.PageSize]", + TypeHintOut="List[QPagedPaintDevice.PageSize]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QPagedPaintDevice_PageSize); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_QPagedPaintDevice_PageSize); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QPagedPaintDevice.PageSize' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + +%End + + +%If (PyQt_Printer) + +%If (Qt_5_4_0 -) + +%MappedType QList + /TypeHintIn="Iterable[QPrinter.DuplexMode]", + TypeHintOut="List[QPrinter.DuplexMode]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QPrinter_DuplexMode); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_QPrinter_DuplexMode); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QPrinter.DuplexMode' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + +%End + +%End + + +%If (PyQt_Printer) + +%If (Qt_5_13_0 -) + +%MappedType QList + /TypeHintIn="Iterable[QPrinter.ColorMode]", + TypeHintOut="List[QPrinter.ColorMode]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QPrinter_ColorMode); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_QPrinter_ColorMode); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QPrinter.ColorMode' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; + +%End + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/QtQml.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/QtQml.toml new file mode 100644 index 0000000..c809790 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/QtQml.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtQml. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/QtQmlmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/QtQmlmod.sip new file mode 100644 index 0000000..f288c38 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/QtQmlmod.sip @@ -0,0 +1,72 @@ +// QtQmlmod.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtQml, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtNetwork/QtNetworkmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qqml.sip +%Include qjsengine.sip +%Include qjsvalue.sip +%Include qjsvalueiterator.sip +%Include qqmlabstracturlinterceptor.sip +%Include qqmlapplicationengine.sip +%Include qqmlcomponent.sip +%Include qqmlcontext.sip +%Include qqmlengine.sip +%Include qqmlerror.sip +%Include qqmlexpression.sip +%Include qqmlextensionplugin.sip +%Include qqmlfileselector.sip +%Include qqmlincubator.sip +%Include qqmllist.sip +%Include qqmlnetworkaccessmanagerfactory.sip +%Include qqmlparserstatus.sip +%Include qqmlproperty.sip +%Include qqmlpropertymap.sip +%Include qqmlpropertyvaluesource.sip +%Include qqmlscriptstring.sip +%Include qmlattachedpropertiesobject.sip +%Include qpyqmllistproperty.sip +%Include qmlregistertype.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsengine.sip new file mode 100644 index 0000000..9c7aca3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsengine.sip @@ -0,0 +1,159 @@ +// qjsengine.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +class QJSEngine : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QJSEngine, &sipType_QJSEngine, 8, 1}, + {sipName_QQmlComponent, &sipType_QQmlComponent, -1, 2}, + {sipName_QQmlContext, &sipType_QQmlContext, -1, 3}, + #if QT_VERSION >= 0x050f00 + {sipName_QQmlEngineExtensionPlugin, &sipType_QQmlEngineExtensionPlugin, -1, 4}, + #else + {0, 0, -1, 4}, + #endif + {sipName_QQmlExpression, &sipType_QQmlExpression, -1, 5}, + {sipName_QQmlExtensionPlugin, &sipType_QQmlExtensionPlugin, -1, 6}, + #if QT_VERSION >= 0x050200 + {sipName_QQmlFileSelector, &sipType_QQmlFileSelector, -1, 7}, + #else + {0, 0, -1, 7}, + #endif + {sipName_QQmlPropertyMap, &sipType_QQmlPropertyMap, -1, -1}, + {sipName_QQmlEngine, &sipType_QQmlEngine, 9, -1}, + #if QT_VERSION >= 0x050100 + {sipName_QQmlApplicationEngine, &sipType_QQmlApplicationEngine, -1, -1}, + #else + {0, 0, -1, -1}, + #endif + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + QJSEngine(); + explicit QJSEngine(QObject *parent /TransferThis/); + virtual ~QJSEngine(); + QJSValue globalObject() const; + QJSValue evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1) /ReleaseGIL/; + QJSValue newObject(); + QJSValue newArray(uint length = 0); + QJSValue newQObject(QObject *object /Transfer/); + void collectGarbage(); +%If (Qt_5_4_0 -) + void installTranslatorFunctions(const QJSValue &object = QJSValue()); +%End +%If (Qt_5_6_0 -) + + enum Extension + { + TranslationExtension, + ConsoleExtension, + GarbageCollectionExtension, + AllExtensions, + }; + +%End +%If (Qt_5_6_0 -) + typedef QFlags Extensions; +%End +%If (Qt_5_6_0 -) + void installExtensions(QJSEngine::Extensions extensions, const QJSValue &object = QJSValue()); +%End +%If (Qt_5_8_0 -) + QJSValue newQMetaObject(const QMetaObject *metaObject); +%End +%If (Qt_5_12_0 -) + QJSValue importModule(const QString &fileName); +%End +%If (Qt_5_12_0 -) + QJSValue newErrorObject(QJSValue::ErrorType errorType, const QString &message = QString()); +%End +%If (Qt_5_12_0 -) + void throwError(const QString &message); +%End +%If (Qt_5_12_0 -) + void throwError(QJSValue::ErrorType errorType, const QString &message = QString()); +%End +%If (Qt_5_14_0 -) + void setInterrupted(bool interrupted); +%End +%If (Qt_5_14_0 -) + bool isInterrupted() const; +%End +%If (Qt_5_15_0 -) + QString uiLanguage() const; +%End +%If (Qt_5_15_0 -) + void setUiLanguage(const QString &language); +%End + +signals: +%If (Qt_5_15_0 -) + void uiLanguageChanged(); +%End +}; + +%If (Qt_5_5_0 -) +QJSEngine *qjsEngine(const QObject *); +%End +%If (Qt_5_6_0 -) +QFlags operator|(QJSEngine::Extension f1, QFlags f2); +%End + +%ModuleHeaderCode +#include "qpyqml_api.h" +%End + +%PostInitialisationCode +qpyqml_post_init(sipModuleDict); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsvalue.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsvalue.sip new file mode 100644 index 0000000..77df761 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsvalue.sip @@ -0,0 +1,100 @@ +// qjsvalue.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +typedef QList QJSValueList; + +class QJSValue /TypeHintIn="Union[QJSValue, QJSValue.SpecialValue, bool, int, float, QString]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToTypeCode +if (!sipIsErr) + return qpyqml_canConvertTo_QJSValue(sipPy); + +return qpyqml_convertTo_QJSValue(sipPy, sipTransferObj, sipCppPtr, sipIsErr); +%End + +public: + enum SpecialValue + { + NullValue, + UndefinedValue, + }; + + QJSValue(QJSValue::SpecialValue value /Constrained/ = QJSValue::UndefinedValue); + QJSValue(const QJSValue &other); + ~QJSValue(); + bool isBool() const; + bool isNumber() const; + bool isNull() const; + bool isString() const; + bool isUndefined() const; + bool isVariant() const; + bool isQObject() const; + bool isObject() const; + bool isDate() const; + bool isRegExp() const; + bool isArray() const; + bool isError() const; + QString toString() const; + double toNumber() const; + qint32 toInt() const; + quint32 toUInt() const; + bool toBool() const; + QVariant toVariant() const; + QObject *toQObject() const; + QDateTime toDateTime() const; + bool equals(const QJSValue &other) const; + bool strictlyEquals(const QJSValue &other) const; + QJSValue prototype() const; + void setPrototype(const QJSValue &prototype); + QJSValue property(const QString &name) const; + void setProperty(const QString &name, const QJSValue &value); + bool hasProperty(const QString &name) const; + bool hasOwnProperty(const QString &name) const; + QJSValue property(quint32 arrayIndex) const; + void setProperty(quint32 arrayIndex, const QJSValue &value); + bool deleteProperty(const QString &name); + bool isCallable() const; + QJSValue call(const QJSValueList &args = QJSValueList()); + QJSValue callWithInstance(const QJSValue &instance, const QJSValueList &args = QJSValueList()); + QJSValue callAsConstructor(const QJSValueList &args = QJSValueList()); +%If (Qt_5_12_0 -) + + enum ErrorType + { + GenericError, + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError, + }; + +%End +%If (Qt_5_12_0 -) + QJSValue::ErrorType errorType() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsvalueiterator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsvalueiterator.sip new file mode 100644 index 0000000..91ee0a0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qjsvalueiterator.sip @@ -0,0 +1,39 @@ +// qjsvalueiterator.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QJSValueIterator +{ +%TypeHeaderCode +#include +%End + +public: + QJSValueIterator(const QJSValue &value); + ~QJSValueIterator(); + bool hasNext() const; + bool next(); + QString name() const; + QJSValue value() const; + +private: + QJSValueIterator(const QJSValueIterator &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qmlattachedpropertiesobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qmlattachedpropertiesobject.sip new file mode 100644 index 0000000..8e5d652 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qmlattachedpropertiesobject.sip @@ -0,0 +1,46 @@ +// This is the SIP specification of the qmlAttachedPropertiesObject() function. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleHeaderCode +#include +%End + + +QObject *qmlAttachedPropertiesObject(SIP_PYTYPE, QObject *object, + bool create = true); +%MethodCode + QObject *proxy = qpyqml_find_proxy_for(a1); + + if (!proxy) + { + sipError = sipErrorFail; + } + else + { + static QHash cache; + + int idx = cache.value((PyTypeObject *)a0, -1); + const QMetaObject *mo = pyqt5_qtqml_get_qmetaobject((PyTypeObject *)a0); + + sipRes = qmlAttachedPropertiesObject(&idx, proxy, mo, a2); + + cache.insert((PyTypeObject *)a0, idx); + } +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qmlregistertype.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qmlregistertype.sip new file mode 100644 index 0000000..bac6c0a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qmlregistertype.sip @@ -0,0 +1,102 @@ +// This is the SIP specification of the qmlRegisterType() function. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleHeaderCode +#include +%End + + +%ModuleCode +// Imports from QtCore. +pyqt5_qtqml_get_qmetaobject_t pyqt5_qtqml_get_qmetaobject; +%End + + +%PostInitialisationCode +// Imports from QtCore. +pyqt5_qtqml_get_qmetaobject = (pyqt5_qtqml_get_qmetaobject_t)sipImportSymbol( + "pyqt5_get_qmetaobject"); +Q_ASSERT(pyqt5_qtqml_get_qmetaobject); +%End + + +int qmlRegisterRevision(SIP_PYTYPE, int revision, const char *uri, int major, + int minor, SIP_PYTYPE attachedProperties = 0); +%MethodCode + if ((sipRes = qpyqml_register_library_type((PyTypeObject *)a0, a2, a3, a4, 0, a1, (PyTypeObject *)a5)) < 0) + sipError = sipErrorFail; +%End + + +%If (Qt_5_2_0 -) +int qmlRegisterSingletonType(const QUrl &url, const char *uri, int major, + int minor, const char *qmlName); +%End + + +int qmlRegisterSingletonType(SIP_PYTYPE, const char *uri, int major, int minor, + const char *typeName, SIP_PYCALLABLE factory /TypeHint="Callable[[QQmlEngine, QJSEngine], Any]"/); +%MethodCode + if ((sipRes = qpyqml_register_singleton_type((PyTypeObject *)a0, a1, a2, a3, a4, a5)) < 0) + sipError = sipErrorFail; +%End + + +int qmlRegisterType(const QUrl &url, const char *uri, int major, int minor, + const char *qmlName); + + +int qmlRegisterType(SIP_PYTYPE, SIP_PYTYPE attachedProperties = 0); +%MethodCode + if ((sipRes = qpyqml_register_type((PyTypeObject *)a0, (PyTypeObject *)a1)) < 0) + sipError = sipErrorFail; +%End + + +int qmlRegisterType(SIP_PYTYPE, const char *uri, int major, int minor, + const char *qmlName, SIP_PYTYPE attachedProperties = 0); +%MethodCode + if ((sipRes = qpyqml_register_library_type((PyTypeObject *)a0, a1, a2, a3, a4, -1, (PyTypeObject *)a5)) < 0) + sipError = sipErrorFail; +%End + + +int qmlRegisterType(SIP_PYTYPE, int revision, const char *uri, int major, + int minor, const char *qmlName, SIP_PYTYPE attachedProperties = 0); +%MethodCode + if ((sipRes = qpyqml_register_library_type((PyTypeObject *)a0, a2, a3, a4, a5, a1, (PyTypeObject *)a6)) < 0) + sipError = sipErrorFail; +%End + + +int qmlRegisterUncreatableType(SIP_PYTYPE, const char *uri, int major, + int minor, const char *qmlName, const QString &reason); +%MethodCode + if ((sipRes = qpyqml_register_uncreatable_type((PyTypeObject *)a0, a1, a2, a3, a4, *a5, -1)) < 0) + sipError = sipErrorFail; +%End + + +int qmlRegisterUncreatableType(SIP_PYTYPE, int revision, const char *uri, + int major, int minor, const char *qmlName, const QString &reason); +%MethodCode + if ((sipRes = qpyqml_register_uncreatable_type((PyTypeObject *)a0, a2, a3, a4, a5, *a6, a1)) < 0) + sipError = sipErrorFail; +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qpyqmllistproperty.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qpyqmllistproperty.sip new file mode 100644 index 0000000..d313144 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qpyqmllistproperty.sip @@ -0,0 +1,40 @@ +// This is the SIP specification of the QQmlListProperty mapped type. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QQmlListProperty /TypeHint="QQmlListProperty"/ +{ +%TypeHeaderCode +#include "qpyqmllistpropertywrapper.h" +%End + +%ConvertFromTypeCode + return qpyqml_QQmlListPropertyWrapper_New(sipCpp, 0); +%End + +%ConvertToTypeCode + if (sipIsErr == NULL) + return PyObject_IsInstance(sipPy, (PyObject *)qpyqml_QQmlListPropertyWrapper_TypeObject); + + *sipCppPtr = ((qpyqml_QQmlListPropertyWrapper *)sipPy)->qml_list_property; + + // It isn't a temporary copy. + return 0; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqml.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqml.sip new file mode 100644 index 0000000..550ef93 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqml.sip @@ -0,0 +1,30 @@ +// qqml.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +void qmlClearTypeRegistrations(); +%If (Qt_5_12_0 -) +int qmlTypeId(const char *uri, int versionMajor, int versionMinor, const char *qmlName); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlabstracturlinterceptor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlabstracturlinterceptor.sip new file mode 100644 index 0000000..417369f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlabstracturlinterceptor.sip @@ -0,0 +1,45 @@ +// qqmlabstracturlinterceptor.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QQmlAbstractUrlInterceptor +{ +%TypeHeaderCode +#include +%End + +public: + enum DataType + { + QmlFile, + JavaScriptFile, + QmldirFile, + UrlString, + }; + + QQmlAbstractUrlInterceptor(); + virtual ~QQmlAbstractUrlInterceptor(); + virtual QUrl intercept(const QUrl &path, QQmlAbstractUrlInterceptor::DataType type) = 0; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlapplicationengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlapplicationengine.sip new file mode 100644 index 0000000..4998d52 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlapplicationengine.sip @@ -0,0 +1,57 @@ +// qqmlapplicationengine.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QQmlApplicationEngine : public QQmlEngine +{ +%TypeHeaderCode +#include +%End + +public: + QQmlApplicationEngine(QObject *parent /TransferThis/ = 0); + QQmlApplicationEngine(const QUrl &url, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QQmlApplicationEngine(const QString &filePath, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + virtual ~QQmlApplicationEngine(); +%If (Qt_5_9_0 -) + QList rootObjects() const; +%End +%If (- Qt_5_9_0) +%If (Qt_5_15_0 -) + QList rootObjects(); +%End +%End + +public slots: + void load(const QUrl &url) /ReleaseGIL/; + void load(const QString &filePath) /ReleaseGIL/; + void loadData(const QByteArray &data, const QUrl &url = QUrl()) /ReleaseGIL/; +%If (Qt_5_14_0 -) + void setInitialProperties(const QVariantMap &initialProperties); +%End + +signals: + void objectCreated(QObject *object, const QUrl &url); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlcomponent.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlcomponent.sip new file mode 100644 index 0000000..7b44c83 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlcomponent.sip @@ -0,0 +1,85 @@ +// qqmlcomponent.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlComponent : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum CompilationMode + { + PreferSynchronous, + Asynchronous, + }; + + QQmlComponent(QQmlEngine *, QObject *parent /TransferThis/ = 0); + QQmlComponent(QQmlEngine *, const QString &fileName, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QQmlComponent(QQmlEngine *, const QString &fileName, QQmlComponent::CompilationMode mode, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QQmlComponent(QQmlEngine *, const QUrl &url, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QQmlComponent(QQmlEngine *, const QUrl &url, QQmlComponent::CompilationMode mode, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QQmlComponent(QObject *parent /TransferThis/ = 0); + virtual ~QQmlComponent(); + + enum Status + { + Null, + Ready, + Loading, + Error, + }; + + QQmlComponent::Status status() const; + bool isNull() const; + bool isReady() const; + bool isError() const; + bool isLoading() const; + QList errors() const; + qreal progress() const; + QUrl url() const; + virtual QObject *create(QQmlContext *context = 0) /TransferBack/; +%If (Qt_5_14_0 -) + QObject *createWithInitialProperties(const QVariantMap &initialProperties, QQmlContext *context = 0) /TransferBack/; +%End + virtual QObject *beginCreate(QQmlContext *) /TransferBack/; + virtual void completeCreate(); + void create(QQmlIncubator &, QQmlContext *context = 0, QQmlContext *forContext = 0); + QQmlContext *creationContext() const; + +public slots: + void loadUrl(const QUrl &url) /ReleaseGIL/; + void loadUrl(const QUrl &url, QQmlComponent::CompilationMode mode) /ReleaseGIL/; + void setData(const QByteArray &, const QUrl &baseUrl); + +signals: + void statusChanged(QQmlComponent::Status); + void progressChanged(qreal); + +public: +%If (Qt_5_12_0 -) + QQmlEngine *engine() const; +%End +%If (Qt_5_14_0 -) + void setInitialProperties(QObject *component, const QVariantMap &properties); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlcontext.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlcontext.sip new file mode 100644 index 0000000..1174816 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlcontext.sip @@ -0,0 +1,61 @@ +// qqmlcontext.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlContext : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QQmlContext(QQmlEngine *engine, QObject *parent /TransferThis/ = 0); + QQmlContext(QQmlContext *parentContext, QObject *parent /TransferThis/ = 0); + virtual ~QQmlContext(); + bool isValid() const; + QQmlEngine *engine() const; + QQmlContext *parentContext() const; + QObject *contextObject() const; + void setContextObject(QObject *); + QVariant contextProperty(const QString &) const; + void setContextProperty(const QString &, QObject *); + void setContextProperty(const QString &, const QVariant &); + QString nameForObject(QObject *) const; + QUrl resolvedUrl(const QUrl &); + void setBaseUrl(const QUrl &); + QUrl baseUrl() const; +%If (Qt_5_11_0 -) + + struct PropertyPair + { +%TypeHeaderCode +#include +%End + + QString name; + QVariant value; + }; + +%End +%If (Qt_5_11_0 -) + void setContextProperties(const QVector &properties); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlengine.sip new file mode 100644 index 0000000..08757c0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlengine.sip @@ -0,0 +1,193 @@ +// qqmlengine.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlImageProviderBase /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + enum ImageType + { + Image, + Pixmap, + Texture, +%If (Qt_5_6_0 -) + ImageResponse, +%End + }; + + enum Flag + { + ForceAsynchronousImageLoading, + }; + + typedef QFlags Flags; + virtual ~QQmlImageProviderBase(); + virtual QQmlImageProviderBase::ImageType imageType() const = 0; + virtual QQmlImageProviderBase::Flags flags() const = 0; + +private: + QQmlImageProviderBase(); +}; + +QFlags operator|(QQmlImageProviderBase::Flag f1, QFlags f2); + +class QQmlEngine : public QJSEngine +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_1 -) + explicit QQmlEngine(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QQmlEngine(QObject *parent /TransferThis/ = 0); +%End + virtual ~QQmlEngine(); + QQmlContext *rootContext() const; + void clearComponentCache(); + void trimComponentCache(); + QStringList importPathList() const; + void setImportPathList(const QStringList &paths); + void addImportPath(const QString &dir); + QStringList pluginPathList() const; + void setPluginPathList(const QStringList &paths); + void addPluginPath(const QString &dir); + bool addNamedBundle(const QString &name, const QString &fileName); + bool importPlugin(const QString &filePath, const QString &uri, QList *errors /GetWrapper/); +%MethodCode + int orig_size = (a2 ? a2->size() : 0); + + sipRes = sipCpp->importPlugin(*a0, *a1, a2); + + if (a2) + { + for (int i = a2->size(); i > orig_size; --i) + { + QQmlError *new_error = new QQmlError(a2->at(i - orig_size - 1)); + PyObject *new_error_obj = sipConvertFromNewType(new_error, sipType_QQmlError, 0); + + if (!new_error_obj) + { + delete new_error; + sipError = sipErrorFail; + break; + } + + if (PyList_Insert(a2Wrapper, 0, new_error_obj) < 0) + { + Py_DECREF(new_error_obj); + sipError = sipErrorFail; + break; + } + + Py_DECREF(new_error_obj); + } + } +%End + + void setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory * /KeepReference/); + QQmlNetworkAccessManagerFactory *networkAccessManagerFactory() const; + QNetworkAccessManager *networkAccessManager() const; + void addImageProvider(const QString &id, QQmlImageProviderBase * /Transfer/); + QQmlImageProviderBase *imageProvider(const QString &id) const; + void removeImageProvider(const QString &id); + void setIncubationController(QQmlIncubationController * /KeepReference/); + QQmlIncubationController *incubationController() const; + void setOfflineStoragePath(const QString &dir); + QString offlineStoragePath() const; + QUrl baseUrl() const; + void setBaseUrl(const QUrl &); + bool outputWarningsToStandardError() const; + void setOutputWarningsToStandardError(bool); + static QQmlContext *contextForObject(const QObject *); + static void setContextForObject(QObject *, QQmlContext *); + + enum ObjectOwnership + { + CppOwnership, + JavaScriptOwnership, + }; + + static void setObjectOwnership(QObject * /GetWrapper/, QQmlEngine::ObjectOwnership); +%MethodCode + QQmlEngine::ObjectOwnership old = QQmlEngine::objectOwnership(a0); + + QQmlEngine::setObjectOwnership(a0, a1); + + if (old != a1 && !a0->parent()) + { + if (old == QQmlEngine::CppOwnership) + sipTransferTo(a0Wrapper, Py_None); + else + sipTransferBack(a0Wrapper); + } +%End + + static QQmlEngine::ObjectOwnership objectOwnership(QObject *); + +protected: + virtual bool event(QEvent *); + +signals: + void quit(); + void warnings(const QList &warnings); +%If (Qt_5_8_0 -) + void exit(int retCode); +%End + +public: +%If (Qt_5_9_0 -) + QString offlineStorageDatabaseFilePath(const QString &databaseName) const; +%End + +public slots: +%If (Qt_5_10_0 -) + void retranslate(); +%End + +public: +%If (Qt_5_12_0 -) + SIP_PYOBJECT singletonInstance(int qmlTypeId) /TypeHint="QObject"/; +%MethodCode + QJSValue instance = sipCpp->singletonInstance(a0); + + if (instance.isQObject()) + { + sipRes = sipConvertFromType(instance.toQObject(), sipType_QObject, NULL); + + if (!sipRes) + sipError = sipErrorFail; + } + else + { + sipRes = Py_None; + Py_INCREF(sipRes); + } +%End + +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlerror.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlerror.sip new file mode 100644 index 0000000..29bfb39 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlerror.sip @@ -0,0 +1,55 @@ +// qqmlerror.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlError +{ +%TypeHeaderCode +#include +%End + +public: + QQmlError(); + QQmlError(const QQmlError &); + ~QQmlError(); + bool isValid() const; + QUrl url() const; + void setUrl(const QUrl &); + QString description() const; + void setDescription(const QString &); + int line() const; + void setLine(int); + int column() const; + void setColumn(int); + QString toString() const; +%If (Qt_5_2_0 -) + QObject *object() const; +%End +%If (Qt_5_2_0 -) + void setObject(QObject *); +%End +%If (Qt_5_9_0 -) + QtMsgType messageType() const; +%End +%If (Qt_5_9_0 -) + void setMessageType(QtMsgType messageType); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlexpression.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlexpression.sip new file mode 100644 index 0000000..bbf1517 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlexpression.sip @@ -0,0 +1,52 @@ +// qqmlexpression.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlExpression : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QQmlExpression(); + QQmlExpression(QQmlContext *, QObject *, const QString &, QObject *parent /TransferThis/ = 0); + QQmlExpression(const QQmlScriptString &, QQmlContext *context = 0, QObject *scope = 0, QObject *parent /TransferThis/ = 0); + virtual ~QQmlExpression(); + QQmlEngine *engine() const; + QQmlContext *context() const; + QString expression() const; + void setExpression(const QString &); + bool notifyOnValueChanged() const; + void setNotifyOnValueChanged(bool); + QString sourceFile() const; + int lineNumber() const; + int columnNumber() const; + void setSourceLocation(const QString &fileName, int line, int column = 0); + QObject *scopeObject() const; + bool hasError() const; + void clearError(); + QQmlError error() const; + QVariant evaluate(bool *valueIsUndefined = 0) /ReleaseGIL/; + +signals: + void valueChanged(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlextensionplugin.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlextensionplugin.sip new file mode 100644 index 0000000..3e994c9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlextensionplugin.sip @@ -0,0 +1,53 @@ +// qqmlextensionplugin.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlExtensionPlugin : QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QQmlExtensionPlugin(QObject *parent /TransferThis/ = 0); + virtual ~QQmlExtensionPlugin(); + virtual void registerTypes(const char *uri) = 0; + virtual void initializeEngine(QQmlEngine *engine, const char *uri); +%If (Qt_5_1_0 -) + QUrl baseUrl() const; +%End +}; + +%If (Qt_5_15_0 -) + +class QQmlEngineExtensionPlugin : QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QQmlEngineExtensionPlugin(QObject *parent /TransferThis/ = 0); + virtual ~QQmlEngineExtensionPlugin(); + virtual void initializeEngine(QQmlEngine *engine, const char *uri); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlfileselector.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlfileselector.sip new file mode 100644 index 0000000..a0155df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlfileselector.sip @@ -0,0 +1,47 @@ +// qqmlfileselector.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QQmlFileSelector : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QQmlFileSelector(QQmlEngine *engine, QObject *parent /TransferThis/ = 0); + virtual ~QQmlFileSelector(); + void setSelector(QFileSelector *selector); +%If (Qt_5_4_0 -) + void setExtraSelectors(const QStringList &strings); +%End +%If (- Qt_5_4_0) + void setExtraSelectors(QStringList &strings); +%End + static QQmlFileSelector *get(QQmlEngine *); +%If (Qt_5_7_0 -) + QFileSelector *selector() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlincubator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlincubator.sip new file mode 100644 index 0000000..6f6dece --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlincubator.sip @@ -0,0 +1,87 @@ +// qqmlincubator.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlIncubator +{ +%TypeHeaderCode +#include +%End + +public: + enum IncubationMode + { + Asynchronous, + AsynchronousIfNested, + Synchronous, + }; + + enum Status + { + Null, + Ready, + Loading, + Error, + }; + + QQmlIncubator(QQmlIncubator::IncubationMode mode = QQmlIncubator::Asynchronous); + virtual ~QQmlIncubator(); + void clear(); + void forceCompletion(); + bool isNull() const; + bool isReady() const; + bool isError() const; + bool isLoading() const; + QList errors() const; + QQmlIncubator::IncubationMode incubationMode() const; + QQmlIncubator::Status status() const; + QObject *object() const /Factory/; +%If (Qt_5_15_0 -) + void setInitialProperties(const QVariantMap &initialProperties); +%End + +protected: + virtual void statusChanged(QQmlIncubator::Status); + virtual void setInitialState(QObject *); + +private: + QQmlIncubator(const QQmlIncubator &); +}; + +class QQmlIncubationController +{ +%TypeHeaderCode +#include +%End + +public: + QQmlIncubationController(); + virtual ~QQmlIncubationController(); + QQmlEngine *engine() const; + int incubatingObjectCount() const; + void incubateFor(int msecs) /ReleaseGIL/; + +protected: + virtual void incubatingObjectCountChanged(int); + +private: + QQmlIncubationController(const QQmlIncubationController &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmllist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmllist.sip new file mode 100644 index 0000000..45c3752 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmllist.sip @@ -0,0 +1,59 @@ +// qqmllist.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlListReference +{ +%TypeHeaderCode +#include +%End + +public: + QQmlListReference(); + QQmlListReference(QObject *, const char *property, QQmlEngine *engine = 0); + QQmlListReference(const QQmlListReference &); + ~QQmlListReference(); + bool isValid() const; + QObject *object() const; + const QMetaObject *listElementType() const; + bool canAppend() const; + bool canAt() const; + bool canClear() const; + bool canCount() const; + bool isManipulable() const; + bool isReadable() const; + bool append(QObject *) const; + QObject *at(int) const; + bool clear() const; + int count() const; +%If (Qt_5_15_0 -) + bool canReplace() const; +%End +%If (Qt_5_15_0 -) + bool canRemoveLast() const; +%End +%If (Qt_5_15_0 -) + bool replace(int, QObject *) const; +%End +%If (Qt_5_15_0 -) + bool removeLast() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlnetworkaccessmanagerfactory.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlnetworkaccessmanagerfactory.sip new file mode 100644 index 0000000..a7c1a47 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlnetworkaccessmanagerfactory.sip @@ -0,0 +1,32 @@ +// qqmlnetworkaccessmanagerfactory.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlNetworkAccessManagerFactory +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QQmlNetworkAccessManagerFactory(); + virtual QNetworkAccessManager *create(QObject *parent) = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlparserstatus.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlparserstatus.sip new file mode 100644 index 0000000..bb55b28 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlparserstatus.sip @@ -0,0 +1,34 @@ +// qqmlparserstatus.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlParserStatus /Mixin,PyQtInterface="org.qt-project.Qt.QQmlParserStatus"/ +{ +%TypeHeaderCode +#include +%End + +public: + QQmlParserStatus(); + virtual ~QQmlParserStatus(); + virtual void classBegin() = 0; + virtual void componentComplete() = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlproperty.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlproperty.sip new file mode 100644 index 0000000..da8ad0d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlproperty.sip @@ -0,0 +1,121 @@ +// qqmlproperty.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlProperty +{ +%TypeHeaderCode +#include +%End + +public: + enum PropertyTypeCategory + { + InvalidCategory, + List, + Object, + Normal, + }; + + enum Type + { + Invalid, + Property, + SignalProperty, + }; + + QQmlProperty(); + QQmlProperty(QObject *); + QQmlProperty(QObject *, QQmlContext *); + QQmlProperty(QObject *, QQmlEngine *); + QQmlProperty(QObject *, const QString &); + QQmlProperty(QObject *, const QString &, QQmlContext *); + QQmlProperty(QObject *, const QString &, QQmlEngine *); + QQmlProperty(const QQmlProperty &); + ~QQmlProperty(); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + + bool operator==(const QQmlProperty &) const; + QQmlProperty::Type type() const; + bool isValid() const; + bool isProperty() const; + bool isSignalProperty() const; + int propertyType() const; + QQmlProperty::PropertyTypeCategory propertyTypeCategory() const; + const char *propertyTypeName() const; + QString name() const; + QVariant read() const; + static QVariant read(const QObject *, const QString &); + static QVariant read(const QObject *, const QString &, QQmlContext *); + static QVariant read(const QObject *, const QString &, QQmlEngine *); + bool write(const QVariant &) const; + static bool write(QObject *, const QString &, const QVariant &); + static bool write(QObject *, const QString &, const QVariant &, QQmlContext *); + static bool write(QObject *, const QString &, const QVariant &, QQmlEngine *); + bool reset() const; + bool hasNotifySignal() const; + bool needsNotifySignal() const; + bool connectNotifySignal(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) const; +%MethodCode + QObject *receiver; + QByteArray slot; + + if ((sipError = pyqt5_qtqml_get_connection_parts(a0, 0, "()", false, &receiver, slot)) == sipErrorNone) + { + sipRes = sipCpp->connectNotifySignal(receiver, slot.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + bool connectNotifySignal(QObject *dest, int method) const; + bool isWritable() const; + bool isDesignable() const; + bool isResettable() const; + QObject *object() const; + int index() const; + QMetaProperty property() const; + QMetaMethod method() const; +}; + +typedef QList QQmlProperties; + +%ModuleHeaderCode +// Imports from QtCore. +typedef sipErrorState (*pyqt5_qtqml_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); +extern pyqt5_qtqml_get_connection_parts_t pyqt5_qtqml_get_connection_parts; +%End + +%ModuleCode +// Imports from QtCore. +pyqt5_qtqml_get_connection_parts_t pyqt5_qtqml_get_connection_parts; +%End + +%PostInitialisationCode +// Imports from QtCore. +pyqt5_qtqml_get_connection_parts = (pyqt5_qtqml_get_connection_parts_t)sipImportSymbol("pyqt5_get_connection_parts"); +Q_ASSERT(pyqt5_qtqml_get_connection_parts); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlpropertymap.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlpropertymap.sip new file mode 100644 index 0000000..e6c2323 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlpropertymap.sip @@ -0,0 +1,47 @@ +// qqmlpropertymap.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlPropertyMap : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QQmlPropertyMap(QObject *parent /TransferThis/ = 0); + virtual ~QQmlPropertyMap(); + QVariant value(const QString &key) const; + void insert(const QString &key, const QVariant &value); + void clear(const QString &key); + QStringList keys() const; + int count() const; + int size() const /__len__/; + bool isEmpty() const; + bool contains(const QString &key) const; + QVariant operator[](const QString &key) const; + +signals: + void valueChanged(const QString &key, const QVariant &value); + +protected: + virtual QVariant updateValue(const QString &key, const QVariant &input); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlpropertyvaluesource.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlpropertyvaluesource.sip new file mode 100644 index 0000000..69284a9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlpropertyvaluesource.sip @@ -0,0 +1,33 @@ +// qqmlpropertyvaluesource.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlPropertyValueSource /Mixin,PyQtInterface="org.qt-project.Qt.QQmlPropertyValueSource"/ +{ +%TypeHeaderCode +#include +%End + +public: + QQmlPropertyValueSource(); + virtual ~QQmlPropertyValueSource(); + virtual void setTarget(const QQmlProperty &) = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlscriptstring.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlscriptstring.sip new file mode 100644 index 0000000..da0e204 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQml/qqmlscriptstring.sip @@ -0,0 +1,45 @@ +// qqmlscriptstring.sip generated by MetaSIP +// +// This file is part of the QtQml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQmlScriptString +{ +%TypeHeaderCode +#include +%End + +public: + QQmlScriptString(); + QQmlScriptString(const QQmlScriptString &); + ~QQmlScriptString(); + bool isEmpty() const; + bool isUndefinedLiteral() const; + bool isNullLiteral() const; + QString stringLiteral() const; + qreal numberLiteral(bool *ok) const; + bool booleanLiteral(bool *ok) const; +%If (Qt_5_4_0 -) + bool operator==(const QQmlScriptString &) const; +%End +%If (Qt_5_4_0 -) + bool operator!=(const QQmlScriptString &) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/QtQuick.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/QtQuick.toml new file mode 100644 index 0000000..15171df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/QtQuick.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtQuick. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/QtQuickmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/QtQuickmod.sip new file mode 100644 index 0000000..cfa70c8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/QtQuickmod.sip @@ -0,0 +1,75 @@ +// QtQuickmod.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtQuick, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip +%Import QtQml/QtQmlmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qquickframebufferobject.sip +%Include qquickimageprovider.sip +%Include qquickitem.sip +%Include qquickitemgrabresult.sip +%Include qquickpainteditem.sip +%Include qquickrendercontrol.sip +%Include qquicktextdocument.sip +%Include qquickview.sip +%Include qquickwindow.sip +%Include qsgabstractrenderer.sip +%Include qsgengine.sip +%Include qsgflatcolormaterial.sip +%Include qsggeometry.sip +%Include qsgimagenode.sip +%Include qsgmaterial.sip +%Include qsgmaterialrhishader.sip +%Include qsgnode.sip +%Include qsgrectanglenode.sip +%Include qsgrendererinterface.sip +%Include qsgrendernode.sip +%Include qsgsimplerectnode.sip +%Include qsgsimpletexturenode.sip +%Include qsgtexture.sip +%Include qsgtexturematerial.sip +%Include qsgtextureprovider.sip +%Include qsgvertexcolormaterial.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickframebufferobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickframebufferobject.sip new file mode 100644 index 0000000..64d81e6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickframebufferobject.sip @@ -0,0 +1,88 @@ +// qquickframebufferobject.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QQuickFramebufferObject : public QQuickItem /ExportDerived/ +{ +%TypeHeaderCode +#include +%End + +public: + class Renderer /Supertype=sip.wrapper/ + { +%TypeHeaderCode +#include +%End + + protected: + Renderer(); + virtual ~Renderer(); + virtual void render() = 0; +%If (PyQt_OpenGL) + virtual QOpenGLFramebufferObject *createFramebufferObject(const QSize &size); +%End + virtual void synchronize(QQuickFramebufferObject *); +%If (PyQt_OpenGL) + QOpenGLFramebufferObject *framebufferObject() const; +%End + void update(); + void invalidateFramebufferObject(); + }; + + QQuickFramebufferObject(QQuickItem *parent /TransferThis/ = 0); + bool textureFollowsItemSize() const; + void setTextureFollowsItemSize(bool follows); + virtual QQuickFramebufferObject::Renderer *createRenderer() const = 0 /Factory/; + +protected: + virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); + virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *); + +signals: + void textureFollowsItemSizeChanged(bool); + +public: +%If (Qt_5_4_0 -) + virtual bool isTextureProvider() const; +%End +%If (Qt_5_4_0 -) + virtual QSGTextureProvider *textureProvider() const; +%End +%If (Qt_5_4_0 -) + virtual void releaseResources(); +%End +%If (Qt_5_6_0 -) + bool mirrorVertically() const; +%End +%If (Qt_5_6_0 -) + void setMirrorVertically(bool enable); +%End + +signals: +%If (Qt_5_6_0 -) + void mirrorVerticallyChanged(bool); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickimageprovider.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickimageprovider.sip new file mode 100644 index 0000000..748238d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickimageprovider.sip @@ -0,0 +1,93 @@ +// qquickimageprovider.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQuickTextureFactory : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QQuickTextureFactory(); + virtual ~QQuickTextureFactory(); + virtual QSGTexture *createTexture(QQuickWindow *window) const = 0 /Factory/; + virtual QSize textureSize() const = 0; + virtual int textureByteCount() const = 0; + virtual QImage image() const; +%If (Qt_5_6_0 -) + static QQuickTextureFactory *textureFactoryForImage(const QImage &image) /Factory/; +%End +}; + +class QQuickImageProvider : public QQmlImageProviderBase +{ +%TypeHeaderCode +#include +%End + +public: + QQuickImageProvider(QQmlImageProviderBase::ImageType type, QQmlImageProviderBase::Flags flags = QQmlImageProviderBase::Flags()); + virtual ~QQuickImageProvider(); + virtual QQmlImageProviderBase::ImageType imageType() const; + virtual QQmlImageProviderBase::Flags flags() const; + virtual QImage requestImage(const QString &id, QSize *size /Out/, const QSize &requestedSize); + virtual QPixmap requestPixmap(const QString &id, QSize *size /Out/, const QSize &requestedSize); + virtual QQuickTextureFactory *requestTexture(const QString &id, QSize *size /Out/, const QSize &requestedSize) /Factory/; +}; + +%If (Qt_5_6_0 -) + +class QQuickImageResponse : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QQuickImageResponse(); + virtual ~QQuickImageResponse(); + virtual QQuickTextureFactory *textureFactory() const = 0 /Factory/; + virtual QString errorString() const; + +public slots: + virtual void cancel(); + +signals: + void finished(); +}; + +%End +%If (Qt_5_6_0 -) + +class QQuickAsyncImageProvider : public QQuickImageProvider +{ +%TypeHeaderCode +#include +%End + +public: + QQuickAsyncImageProvider(); + virtual ~QQuickAsyncImageProvider(); + virtual QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) = 0 /Factory/; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickitem.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickitem.sip new file mode 100644 index 0000000..e552068 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickitem.sip @@ -0,0 +1,324 @@ +// qquickitem.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQuickItem : public QObject, public QQmlParserStatus /ExportDerived/ +{ +%TypeHeaderCode +#include +%End + +public: + enum Flag + { + ItemClipsChildrenToShape, + ItemAcceptsInputMethod, + ItemIsFocusScope, + ItemHasContents, + ItemAcceptsDrops, + }; + + typedef QFlags Flags; + + enum ItemChange + { + ItemChildAddedChange, + ItemChildRemovedChange, + ItemSceneChange, + ItemVisibleHasChanged, + ItemParentHasChanged, + ItemOpacityHasChanged, + ItemActiveFocusHasChanged, + ItemRotationHasChanged, +%If (Qt_5_3_0 -) + ItemAntialiasingHasChanged, +%End +%If (Qt_5_6_0 -) + ItemDevicePixelRatioHasChanged, +%End +%If (Qt_5_10_0 -) + ItemEnabledHasChanged, +%End + }; + + struct ItemChangeData + { +%TypeHeaderCode +#include +%End + + ItemChangeData(QQuickItem *v); + ItemChangeData(QQuickWindow *v); + ItemChangeData(qreal v /Constrained/); + ItemChangeData(bool v /Constrained/); + QQuickItem *item; + QQuickWindow *window; + qreal realValue; + bool boolValue; + }; + + enum TransformOrigin + { + TopLeft, + Top, + TopRight, + Left, + Center, + Right, + BottomLeft, + Bottom, + BottomRight, + }; + +%If (Qt_5_6_1 -) + explicit QQuickItem(QQuickItem *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QQuickItem(QQuickItem *parent /TransferThis/ = 0); +%End + virtual ~QQuickItem(); + QQuickWindow *window() const; + QQuickItem *parentItem() const; + void setParentItem(QQuickItem *parent); + void stackBefore(const QQuickItem *); + void stackAfter(const QQuickItem *); + QRectF childrenRect(); + QList childItems() const; + bool clip() const; + void setClip(bool); + QString state() const; + void setState(const QString &); + qreal baselineOffset() const; + void setBaselineOffset(qreal); + qreal x() const; + qreal y() const; + void setX(qreal); + void setY(qreal); + qreal width() const; + void setWidth(qreal); + void resetWidth(); + void setImplicitWidth(qreal); + qreal implicitWidth() const; + qreal height() const; + void setHeight(qreal); + void resetHeight(); + void setImplicitHeight(qreal); + qreal implicitHeight() const; + QQuickItem::TransformOrigin transformOrigin() const; + void setTransformOrigin(QQuickItem::TransformOrigin); + qreal z() const; + void setZ(qreal); + qreal rotation() const; + void setRotation(qreal); + qreal scale() const; + void setScale(qreal); + qreal opacity() const; + void setOpacity(qreal); + bool isVisible() const; + void setVisible(bool); + bool isEnabled() const; + void setEnabled(bool); + bool smooth() const; + void setSmooth(bool); + bool antialiasing() const; + void setAntialiasing(bool); + QQuickItem::Flags flags() const; + void setFlag(QQuickItem::Flag flag, bool enabled = true); + void setFlags(QQuickItem::Flags flags); + bool hasActiveFocus() const; + bool hasFocus() const; + void setFocus(bool); + bool isFocusScope() const; + QQuickItem *scopedFocusItem() const; + Qt::MouseButtons acceptedMouseButtons() const; + void setAcceptedMouseButtons(Qt::MouseButtons buttons); + bool acceptHoverEvents() const; + void setAcceptHoverEvents(bool enabled); + QCursor cursor() const; + void setCursor(const QCursor &cursor); + void unsetCursor(); + void grabMouse(); + void ungrabMouse(); + bool keepMouseGrab() const; + void setKeepMouseGrab(bool); + bool filtersChildMouseEvents() const; + void setFiltersChildMouseEvents(bool filter); + void grabTouchPoints(const QVector &ids); + void ungrabTouchPoints(); + bool keepTouchGrab() const; + void setKeepTouchGrab(bool); + virtual bool contains(const QPointF &point) const; + QPointF mapToItem(const QQuickItem *item, const QPointF &point) const; + QPointF mapToScene(const QPointF &point) const; + QRectF mapRectToItem(const QQuickItem *item, const QRectF &rect) const; + QRectF mapRectToScene(const QRectF &rect) const; + QPointF mapFromItem(const QQuickItem *item, const QPointF &point) const; + QPointF mapFromScene(const QPointF &point) const; + QRectF mapRectFromItem(const QQuickItem *item, const QRectF &rect) const; + QRectF mapRectFromScene(const QRectF &rect) const; + void polish(); + void forceActiveFocus(); + QQuickItem *childAt(qreal x, qreal y) const; + virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; + + struct UpdatePaintNodeData + { +%TypeHeaderCode +#include +%End + + QSGTransformNode *transformNode; + + private: + UpdatePaintNodeData(); + }; + + virtual bool isTextureProvider() const; + virtual QSGTextureProvider *textureProvider() const; + +public slots: + void update() /ReleaseGIL/; + +protected: + virtual bool event(QEvent *); + bool isComponentComplete() const; + virtual void itemChange(QQuickItem::ItemChange, const QQuickItem::ItemChangeData &); + void updateInputMethod(Qt::InputMethodQueries queries = Qt::InputMethodQuery::ImQueryInput); + bool widthValid() const; + bool heightValid() const; + virtual void classBegin(); + virtual void componentComplete(); + virtual void keyPressEvent(QKeyEvent *event); + virtual void keyReleaseEvent(QKeyEvent *event); + virtual void inputMethodEvent(QInputMethodEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void mouseDoubleClickEvent(QMouseEvent *event); + virtual void mouseUngrabEvent(); + virtual void touchUngrabEvent(); + virtual void wheelEvent(QWheelEvent *event); + virtual void touchEvent(QTouchEvent *event); + virtual void hoverEnterEvent(QHoverEvent *event); + virtual void hoverMoveEvent(QHoverEvent *event); + virtual void hoverLeaveEvent(QHoverEvent *event); + virtual void dragEnterEvent(QDragEnterEvent *); + virtual void dragMoveEvent(QDragMoveEvent *); + virtual void dragLeaveEvent(QDragLeaveEvent *); + virtual void dropEvent(QDropEvent *); + virtual bool childMouseEventFilter(QQuickItem *, QEvent *); + virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); + virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *); +%VirtualCatcherCode + PyObject *res; + + res = sipCallMethod(&sipIsErr, sipMethod, "DD", + a0, sipType_QSGNode, NULL, + a1, sipType_QQuickItem_UpdatePaintNodeData, NULL); + + if (res) + { + sipParseResult(&sipIsErr, sipMethod, res, "H0", sipType_QSGNode, &sipRes); + + if (!sipIsErr && sipRes && (sipRes->flags() & QSGNode::OwnedByParent)) + sipTransferTo(res, (PyObject *)sipPySelf); + + Py_DECREF(res); + } +%End + + virtual void releaseResources(); + virtual void updatePolish(); + +public: +%If (Qt_5_1_0 -) + bool activeFocusOnTab() const; +%End +%If (Qt_5_1_0 -) + void setActiveFocusOnTab(bool); +%End +%If (Qt_5_1_0 -) + void setFocus(bool focus, Qt::FocusReason reason); +%End +%If (Qt_5_1_0 -) + void forceActiveFocus(Qt::FocusReason reason); +%End +%If (Qt_5_1_0 -) + QQuickItem *nextItemInFocusChain(bool forward = true); +%End + +signals: +%If (Qt_5_1_0 -) + void windowChanged(QQuickWindow *window); +%End + +public: +%If (Qt_5_3_0 -) + void resetAntialiasing(); +%End +%If (Qt_5_4_0 -) + QQuickItemGrabResult *grabToImage(const QSize &targetSize = QSize()) /Factory/; +%MethodCode + QSharedPointer *grab; + + Py_BEGIN_ALLOW_THREADS + // This will leak but there seems to be no way to detach the object. + grab = new QSharedPointer(sipCpp->grabToImage(*a0)); + Py_END_ALLOW_THREADS + + sipRes = grab->data(); +%End + +%End +%If (Qt_5_7_0 -) + bool isAncestorOf(const QQuickItem *child) const; +%End +%If (Qt_5_7_0 -) + QPointF mapToGlobal(const QPointF &point) const; +%End +%If (Qt_5_7_0 -) + QPointF mapFromGlobal(const QPointF &point) const; +%End +%If (Qt_5_10_0 -) + QSizeF size() const; +%End +%If (Qt_5_10_0 -) + bool acceptTouchEvents() const; +%End +%If (Qt_5_10_0 -) + void setAcceptTouchEvents(bool accept); +%End +%If (Qt_5_11_0 -) + QObject *containmentMask() const; +%End +%If (Qt_5_11_0 -) + void setContainmentMask(QObject *mask /KeepReference/); +%End + +signals: +%If (Qt_5_11_0 -) + void containmentMaskChanged(); +%End +}; + +QFlags operator|(QQuickItem::Flag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickitemgrabresult.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickitemgrabresult.sip new file mode 100644 index 0000000..9e42eac --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickitemgrabresult.sip @@ -0,0 +1,53 @@ +// qquickitemgrabresult.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QQuickItemGrabResult : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QImage image() const; + QUrl url() const; +%If (Qt_5_9_0 -) + bool saveToFile(const QString &fileName) const; +%End +%If (- Qt_5_9_0) +%If (Qt_5_11_0 -) + bool saveToFile(const QString &fileName); +%End +%End + +protected: + virtual bool event(QEvent *); + +signals: + void ready(); + +private: + QQuickItemGrabResult(QObject *parent = 0); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickpainteditem.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickpainteditem.sip new file mode 100644 index 0000000..67cd648 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickpainteditem.sip @@ -0,0 +1,112 @@ +// qquickpainteditem.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQuickPaintedItem : public QQuickItem /ExportDerived/ +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_1 -) + explicit QQuickPaintedItem(QQuickItem *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QQuickPaintedItem(QQuickItem *parent /TransferThis/ = 0); +%End + virtual ~QQuickPaintedItem(); + + enum RenderTarget + { + Image, + FramebufferObject, + InvertedYFramebufferObject, + }; + + enum PerformanceHint + { + FastFBOResizing, + }; + + typedef QFlags PerformanceHints; + void update(const QRect &rect = QRect()); + bool opaquePainting() const; + void setOpaquePainting(bool opaque); + bool antialiasing() const; + void setAntialiasing(bool enable); + bool mipmap() const; + void setMipmap(bool enable); + QQuickPaintedItem::PerformanceHints performanceHints() const; + void setPerformanceHint(QQuickPaintedItem::PerformanceHint hint, bool enabled = true); + void setPerformanceHints(QQuickPaintedItem::PerformanceHints hints); + QRectF contentsBoundingRect() const; + QSize contentsSize() const; + void setContentsSize(const QSize &); + void resetContentsSize(); + qreal contentsScale() const; + void setContentsScale(qreal); + QColor fillColor() const; + void setFillColor(const QColor &); + QQuickPaintedItem::RenderTarget renderTarget() const; + void setRenderTarget(QQuickPaintedItem::RenderTarget target); + virtual void paint(QPainter *painter) = 0; + +signals: + void fillColorChanged(); + void contentsSizeChanged(); + void contentsScaleChanged(); + void renderTargetChanged(); + +protected: + virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *); + +public: +%If (Qt_5_4_0 -) + virtual bool isTextureProvider() const; +%End +%If (Qt_5_4_0 -) + virtual QSGTextureProvider *textureProvider() const; +%End + +protected: +%If (Qt_5_4_0 -) + virtual void releaseResources(); +%End +%If (Qt_5_6_1 -) + virtual void itemChange(QQuickItem::ItemChange, const QQuickItem::ItemChangeData &); +%End + +public: +%If (Qt_5_6_0 -) + QSize textureSize() const; +%End +%If (Qt_5_6_0 -) + void setTextureSize(const QSize &size); +%End + +signals: +%If (Qt_5_6_0 -) + void textureSizeChanged(); +%End +}; + +QFlags operator|(QQuickPaintedItem::PerformanceHint f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickrendercontrol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickrendercontrol.sip new file mode 100644 index 0000000..8baabe6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickrendercontrol.sip @@ -0,0 +1,58 @@ +// qquickrendercontrol.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QQuickRenderControl : public QObject +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_6_1 -) + explicit QQuickRenderControl(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QQuickRenderControl(QObject *parent /TransferThis/ = 0); +%End + virtual ~QQuickRenderControl(); +%If (PyQt_OpenGL) + void initialize(QOpenGLContext *gl); +%End + void invalidate(); + void polishItems(); + void render(); + bool sync(); + QImage grab(); + static QWindow *renderWindowFor(QQuickWindow *win, QPoint *offset = 0); + virtual QWindow *renderWindow(QPoint *offset); +%If (Qt_5_5_0 -) + void prepareThread(QThread *targetThread); +%End + +signals: + void renderRequested(); + void sceneChanged(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquicktextdocument.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquicktextdocument.sip new file mode 100644 index 0000000..bc1d9df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquicktextdocument.sip @@ -0,0 +1,39 @@ +// qquicktextdocument.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QQuickTextDocument : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QQuickTextDocument(QQuickItem *parent /TransferThis/); + QTextDocument *textDocument() const; + +private: + QQuickTextDocument(const QQuickTextDocument &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickview.sip new file mode 100644 index 0000000..40f26de --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickview.sip @@ -0,0 +1,77 @@ +// qquickview.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQuickView : public QQuickWindow /ExportDerived/ +{ +%TypeHeaderCode +#include +%End + +public: + explicit QQuickView(QWindow *parent /TransferThis/ = 0); + QQuickView(QQmlEngine *engine, QWindow *parent /TransferThis/); + QQuickView(const QUrl &source, QWindow *parent /TransferThis/ = 0); + virtual ~QQuickView() /ReleaseGIL/; + QUrl source() const; + QQmlEngine *engine() const; + QQmlContext *rootContext() const; + QQuickItem *rootObject() const; + + enum ResizeMode + { + SizeViewToRootObject, + SizeRootObjectToView, + }; + + QQuickView::ResizeMode resizeMode() const; + void setResizeMode(QQuickView::ResizeMode); + + enum Status + { + Null, + Ready, + Loading, + Error, + }; + + QQuickView::Status status() const; + QList errors() const; + QSize initialSize() const; + +public slots: + void setSource(const QUrl &) /ReleaseGIL/; +%If (Qt_5_14_0 -) + void setInitialProperties(const QVariantMap &initialProperties); +%End + +signals: + void statusChanged(QQuickView::Status); + +protected: + virtual void resizeEvent(QResizeEvent *); + virtual void timerEvent(QTimerEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void keyReleaseEvent(QKeyEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickwindow.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickwindow.sip new file mode 100644 index 0000000..e54db4e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qquickwindow.sip @@ -0,0 +1,331 @@ +// qquickwindow.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QQuickWindow : public QWindow /ExportDerived/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + #if QT_VERSION >= 0x050400 + {sipName_QSGEngine, &sipType_QSGEngine, -1, 1}, + #else + {0, 0, -1, 1}, + #endif + {sipName_QQuickItem, &sipType_QQuickItem, 11, 2}, + #if QT_VERSION >= 0x050400 + {sipName_QQuickItemGrabResult, &sipType_QQuickItemGrabResult, -1, 3}, + #else + {0, 0, -1, 3}, + #endif + {sipName_QSGTexture, &sipType_QSGTexture, 13, 4}, + #if QT_VERSION >= 0x050100 + {sipName_QQuickTextDocument, &sipType_QQuickTextDocument, -1, 5}, + #else + {0, 0, -1, 5}, + #endif + #if QT_VERSION >= 0x050400 + {sipName_QSGAbstractRenderer, &sipType_QSGAbstractRenderer, -1, 6}, + #else + {0, 0, -1, 6}, + #endif + #if QT_VERSION >= 0x050600 + {sipName_QQuickImageResponse, &sipType_QQuickImageResponse, -1, 7}, + #else + {0, 0, -1, 7}, + #endif + {sipName_QQuickTextureFactory, &sipType_QQuickTextureFactory, -1, 8}, + #if QT_VERSION >= 0x050400 + {sipName_QQuickRenderControl, &sipType_QQuickRenderControl, -1, 9}, + #else + {0, 0, -1, 9}, + #endif + {sipName_QSGTextureProvider, &sipType_QSGTextureProvider, -1, 10}, + {sipName_QQuickWindow, &sipType_QQuickWindow, 14, -1}, + #if QT_VERSION >= 0x050200 + {sipName_QQuickFramebufferObject, &sipType_QQuickFramebufferObject, -1, 12}, + #else + {0, 0, -1, 12}, + #endif + {sipName_QQuickPaintedItem, &sipType_QQuickPaintedItem, -1, -1}, + {sipName_QSGDynamicTexture, &sipType_QSGDynamicTexture, -1, -1}, + {sipName_QQuickView, &sipType_QQuickView, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum CreateTextureOption + { + TextureHasAlphaChannel, + TextureHasMipmaps, + TextureOwnsGLTexture, +%If (Qt_5_2_0 -) + TextureCanUseAtlas, +%End +%If (Qt_5_6_0 -) + TextureIsOpaque, +%End + }; + + typedef QFlags CreateTextureOptions; +%If (Qt_5_6_1 -) + explicit QQuickWindow(QWindow *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QQuickWindow(QWindow *parent /TransferThis/ = 0); +%End + virtual ~QQuickWindow() /ReleaseGIL/; + QQuickItem *contentItem() const; + QQuickItem *activeFocusItem() const; + virtual QObject *focusObject() const; + QQuickItem *mouseGrabberItem() const; + bool sendEvent(QQuickItem *, QEvent *); + QImage grabWindow() /ReleaseGIL/; +%If (PyQt_OpenGL) + void setRenderTarget(QOpenGLFramebufferObject *fbo); +%End +%If (PyQt_OpenGL) + QOpenGLFramebufferObject *renderTarget() const; +%End + void setRenderTarget(uint fboId, const QSize &size); + uint renderTargetId() const; + QSize renderTargetSize() const; + QQmlIncubationController *incubationController() const; + QSGTexture *createTextureFromImage(const QImage &image) const /Factory/; +%If (Qt_5_2_0 -) + QSGTexture *createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const /Factory/; +%End + QSGTexture *createTextureFromId(uint id, const QSize &size, QQuickWindow::CreateTextureOptions options = QQuickWindow::CreateTextureOption()) const /Factory/; +%If (Qt_5_14_0 -) + QSGTexture *createTextureFromNativeObject(QQuickWindow::NativeObjectType type, const void *nativeObjectPtr, int nativeLayout, const QSize &size, QQuickWindow::CreateTextureOptions options = QQuickWindow::CreateTextureOption()) const /Factory/; +%End + void setClearBeforeRendering(bool enabled); + bool clearBeforeRendering() const; + void setColor(const QColor &color); + QColor color() const; + void setPersistentOpenGLContext(bool persistent); + bool isPersistentOpenGLContext() const; + void setPersistentSceneGraph(bool persistent); + bool isPersistentSceneGraph() const; +%If (PyQt_OpenGL) + QOpenGLContext *openglContext() const; +%End + +signals: + void frameSwapped(); + void sceneGraphInitialized(); + void sceneGraphInvalidated(); + void beforeSynchronizing(); + void beforeRendering(); + void afterRendering(); + void colorChanged(const QColor &); + +public slots: + void update(); + void releaseResources(); + +protected: + virtual void exposeEvent(QExposeEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void showEvent(QShowEvent *); + virtual void hideEvent(QHideEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual bool event(QEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void keyReleaseEvent(QKeyEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void wheelEvent(QWheelEvent *); +%If (Qt_5_15_0 -) + virtual void tabletEvent(QTabletEvent *); +%End + +public: +%If (Qt_5_1_0 -) + static bool hasDefaultAlphaBuffer(); +%End +%If (Qt_5_1_0 -) + static void setDefaultAlphaBuffer(bool useAlpha); +%End + +signals: +%If (Qt_5_1_0 -) + void closing(QQuickCloseEvent *close); +%End +%If (Qt_5_1_0 -) + void activeFocusItemChanged(); +%End + +public: +%If (Qt_5_2_0 -) +%If (PyQt_OpenGL) + void resetOpenGLState(); +%End +%End +%If (Qt_5_3_0 -) + + enum SceneGraphError + { + ContextNotAvailable, + }; + +%End + +signals: +%If (Qt_5_3_0 -) +%If (PyQt_OpenGL) + void openglContextCreated(QOpenGLContext *context); +%End +%End +%If (Qt_5_3_0 -) + void afterSynchronizing(); +%End +%If (Qt_5_3_0 -) + void afterAnimating(); +%End +%If (Qt_5_3_0 -) + void sceneGraphAboutToStop(); +%End +%If (Qt_5_3_0 -) + void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message); +%End + +public: +%If (Qt_5_4_0 -) + + enum RenderStage + { + BeforeSynchronizingStage, + AfterSynchronizingStage, + BeforeRenderingStage, + AfterRenderingStage, + AfterSwapStage, +%If (Qt_5_6_0 -) + NoStage, +%End + }; + +%End +%If (Qt_5_4_0 -) + void scheduleRenderJob(QRunnable *job /Transfer/, QQuickWindow::RenderStage schedule) /ReleaseGIL/; +%End +%If (Qt_5_4_0 -) + qreal effectiveDevicePixelRatio() const; +%End +%If (Qt_5_5_0 -) + bool isSceneGraphInitialized() const; +%End +%If (Qt_5_8_0 -) + QSGRendererInterface *rendererInterface() const; +%End +%If (Qt_5_8_0 -) + static void setSceneGraphBackend(QSGRendererInterface::GraphicsApi api); +%End +%If (Qt_5_8_0 -) + static void setSceneGraphBackend(const QString &backend); +%End +%If (Qt_5_8_0 -) + QSGRectangleNode *createRectangleNode() const /Factory/; +%End +%If (Qt_5_8_0 -) + QSGImageNode *createImageNode() const /Factory/; +%End +%If (Qt_5_9_0 -) + static QString sceneGraphBackend(); +%End +%If (Qt_5_10_0 -) + + enum TextRenderType + { + QtTextRendering, + NativeTextRendering, + }; + +%End +%If (Qt_5_10_0 -) + static QQuickWindow::TextRenderType textRenderType(); +%End +%If (Qt_5_10_0 -) + static void setTextRenderType(QQuickWindow::TextRenderType renderType); +%End +%If (Qt_5_14_0 -) + + enum NativeObjectType + { + NativeObjectTexture, + }; + +%End +%If (Qt_5_14_0 -) + void beginExternalCommands(); +%End +%If (Qt_5_14_0 -) + void endExternalCommands(); +%End + +signals: +%If (Qt_5_14_0 -) + void beforeRenderPassRecording(); +%End +%If (Qt_5_14_0 -) + void afterRenderPassRecording(); +%End +}; + +%If (Qt_5_1_0 -) +class QQuickCloseEvent; +%End + +%ModuleHeaderCode +#include "qpyquick_api.h" +%End + +%PostInitialisationCode +qpyquick_post_init(); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgabstractrenderer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgabstractrenderer.sip new file mode 100644 index 0000000..5858833 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgabstractrenderer.sip @@ -0,0 +1,77 @@ +// qsgabstractrenderer.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QSGAbstractRenderer : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum ClearModeBit + { + ClearColorBuffer, + ClearDepthBuffer, + ClearStencilBuffer, + }; + + typedef QFlags ClearMode; +%If (Qt_5_14_0 -) + + enum MatrixTransformFlag + { + MatrixTransformFlipY, + }; + +%End +%If (Qt_5_14_0 -) + typedef QFlags MatrixTransformFlags; +%End + virtual ~QSGAbstractRenderer(); + void setDeviceRect(const QRect &rect); + void setDeviceRect(const QSize &size); + QRect deviceRect() const; + void setViewportRect(const QRect &rect); + void setViewportRect(const QSize &size); + QRect viewportRect() const; + void setProjectionMatrixToRect(const QRectF &rect); +%If (Qt_5_14_0 -) + void setProjectionMatrixToRect(const QRectF &rect, QSGAbstractRenderer::MatrixTransformFlags flags); +%End + void setProjectionMatrix(const QMatrix4x4 &matrix); + QMatrix4x4 projectionMatrix() const; + void setClearColor(const QColor &color); + QColor clearColor() const; + void setClearMode(QSGAbstractRenderer::ClearMode mode); + QSGAbstractRenderer::ClearMode clearMode() const; + virtual void renderScene(uint fboId = 0) = 0; + +signals: + void sceneGraphChanged(); +}; + +%End +%If (Qt_5_4_0 -) +QFlags operator|(QSGAbstractRenderer::ClearModeBit f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgengine.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgengine.sip new file mode 100644 index 0000000..c941101 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgengine.sip @@ -0,0 +1,68 @@ +// qsgengine.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QSGEngine : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum CreateTextureOption + { + TextureHasAlphaChannel, + TextureOwnsGLTexture, + TextureCanUseAtlas, +%If (Qt_5_6_0 -) + TextureIsOpaque, +%End + }; + + typedef QFlags CreateTextureOptions; +%If (Qt_5_6_1 -) + explicit QSGEngine(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_6_1) + QSGEngine(QObject *parent /TransferThis/ = 0); +%End + virtual ~QSGEngine(); +%If (PyQt_OpenGL) + void initialize(QOpenGLContext *context); +%End + void invalidate(); + QSGAbstractRenderer *createRenderer() const; + QSGTexture *createTextureFromImage(const QImage &image, QSGEngine::CreateTextureOptions options = QSGEngine::CreateTextureOption()) const; + QSGTexture *createTextureFromId(uint id, const QSize &size, QSGEngine::CreateTextureOptions options = QSGEngine::CreateTextureOption()) const; +%If (Qt_5_8_0 -) + QSGRendererInterface *rendererInterface() const; +%End +%If (Qt_5_8_0 -) + QSGRectangleNode *createRectangleNode() const /Factory/; +%End +%If (Qt_5_8_0 -) + QSGImageNode *createImageNode() const /Factory/; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgflatcolormaterial.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgflatcolormaterial.sip new file mode 100644 index 0000000..ec05fcd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgflatcolormaterial.sip @@ -0,0 +1,36 @@ +// qsgflatcolormaterial.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGFlatColorMaterial : public QSGMaterial +{ +%TypeHeaderCode +#include +%End + +public: + QSGFlatColorMaterial(); + virtual QSGMaterialType *type() const; + virtual QSGMaterialShader *createShader() const /Factory/; + void setColor(const QColor &color); + const QColor &color() const; + virtual int compare(const QSGMaterial *other) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsggeometry.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsggeometry.sip new file mode 100644 index 0000000..8659c9d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsggeometry.sip @@ -0,0 +1,407 @@ +// qsggeometry.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGGeometry /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: +// Convenient primitives and drawing modes. +enum /NoScope/ +{ + GL_BYTE, +%If (PyQt_Desktop_OpenGL) + GL_DOUBLE, +%End + GL_FLOAT, + GL_INT +}; + +enum /NoScope/ +{ + GL_POINTS, + GL_LINES, + GL_LINE_LOOP, + GL_LINE_STRIP, + GL_TRIANGLES, + GL_TRIANGLE_STRIP, + GL_TRIANGLE_FAN +}; + + struct Attribute + { +%TypeHeaderCode +#include +%End + + int position; + int tupleSize; + int type; + uint isVertexCoordinate; +%If (Qt_5_8_0 -) + QSGGeometry::AttributeType attributeType; +%End + static QSGGeometry::Attribute create(int pos, int tupleSize, int primitiveType, bool isPosition = false) /Factory/; +%If (Qt_5_8_0 -) + static QSGGeometry::Attribute createWithAttributeType(int pos, int tupleSize, int primitiveType, QSGGeometry::AttributeType attributeType) /Factory/; +%End + }; + + struct AttributeSet /NoDefaultCtors/ + { +%TypeHeaderCode +#include +#include +%End + + AttributeSet(SIP_PYOBJECT attributes /TypeHint="Iterable[QSGGeometry.Attribute]"/, int stride = 0); +%MethodCode + PyObject *iter = PyObject_GetIter(a0); + + if (!iter + #if PY_MAJOR_VERSION < 3 + || PyString_Check(a0) + #endif + || PyUnicode_Check(a0)) + { + Py_XDECREF(iter); + PyErr_SetString(PyExc_TypeError, "iterable object expected"); + sipError = sipErrorContinue; + } + else + { + QVector attrs; + int stride = 0; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + sipError = sipErrorFail; + + break; + } + + int state, is_err = 0; + QSGGeometry::Attribute *attr; + + attr = reinterpret_cast( + sipForceConvertToType(itm, sipType_QSGGeometry_Attribute, 0, + SIP_NOT_NONE, &state, &is_err)); + + if (is_err) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QSGGeometry.Attribute' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + sipError = sipErrorFail; + + break; + } + + // Calculate the stride if there no explicit one. + if (a1 <= 0) + { + int size; + + switch (attr->type) + { + case GL_BYTE: + size = sizeof (qint8); + break; + + #if defined(SIPFeature_PyQt_Desktop_OpenGL) + #if GL_DOUBLE != GL_FLOAT + case GL_DOUBLE: + size = sizeof (double); + break; + #endif + #endif + + case GL_FLOAT: + size = sizeof (float); + break; + + case GL_INT: + size = sizeof (qint32); + break; + + default: + size = 0; + } + + if (!size) + { + PyErr_Format(PyExc_TypeError, + "index %zd has an unsupported primitive type", + i); + + sipReleaseType(attr, sipType_QSGGeometry_Attribute, state); + Py_DECREF(itm); + sipError = sipErrorFail; + + break; + } + + stride += attr->tupleSize * size; + } + + attrs.append(*attr); + + sipReleaseType(attr, sipType_QSGGeometry_Attribute, state); + Py_DECREF(itm); + } + + Py_DECREF(iter); + + if (sipError == sipErrorNone) + { + if (attrs.isEmpty()) + { + PyErr_SetString(PyExc_TypeError, "no attributes defined"); + sipError = sipErrorFail; + } + else + { + PyObject *bytes = SIPBytes_FromStringAndSize( + reinterpret_cast(attrs.data()), + sizeof (QSGGeometry::Attribute) * attrs.size()); + + if (!bytes) + { + sipError = sipErrorFail; + } + else + { + sipCpp = new QSGGeometry::AttributeSet; + + sipCpp->count = attrs.size(); + sipCpp->stride = (a1 > 0 ? a1 : stride); + sipCpp->attributes = reinterpret_cast( + SIPBytes_AsString(bytes)); + + sipSetUserObject(sipSelf, bytes); + } + } + } + } +%End + + int count; + int stride; + const QSGGeometry::Attribute *attributes /TypeHint="PyQt5.sip.array[QSGGeometry.Attribute]"/ { +%GetCode + sipPy = sipConvertToTypedArray((void *)sipCpp->attributes, + sipType_QSGGeometry_Attribute, "iiiI", sizeof (QSGGeometry::Attribute), + sipCpp->count, SIP_READ_ONLY); +%End + +%SetCode + sipErr = 1; + PyErr_SetString(PyExc_ValueError, "array is read-only"); +%End + + }; + }; + + struct Point2D + { +%TypeHeaderCode +#include +%End + + float x; + float y; + void set(float nx, float ny); + }; + + struct TexturedPoint2D + { +%TypeHeaderCode +#include +%End + + float x; + float y; + float tx; + float ty; + void set(float nx, float ny, float ntx, float nty); + }; + + struct ColoredPoint2D + { +%TypeHeaderCode +#include +%End + + float x; + float y; + unsigned char r /PyInt/; + unsigned char g /PyInt/; + unsigned char b /PyInt/; + unsigned char a /PyInt/; + void set(float nx, float ny, uchar nr /PyInt/, uchar ng /PyInt/, uchar nb /PyInt/, uchar na /PyInt/); + }; + + static const QSGGeometry::AttributeSet &defaultAttributes_Point2D() /NoCopy/; + static const QSGGeometry::AttributeSet &defaultAttributes_TexturedPoint2D() /NoCopy/; + static const QSGGeometry::AttributeSet &defaultAttributes_ColoredPoint2D() /NoCopy/; + + enum DataPattern + { + AlwaysUploadPattern, + StreamPattern, + DynamicPattern, + StaticPattern, + }; + + QSGGeometry(const QSGGeometry::AttributeSet &attribs /KeepReference/, int vertexCount, int indexCount = 0, int indexType = GL_UNSIGNED_SHORT); + virtual ~QSGGeometry(); + void setDrawingMode(unsigned int mode); + unsigned int drawingMode() const; + void allocate(int vertexCount, int indexCount = 0); + int vertexCount() const; + void *vertexData(); + int indexType() const; + int indexCount() const; + void *indexData(); + int attributeCount() const; + SIP_PYOBJECT attributes() const /TypeHint="PyQt5.sip.array[QSGGeometry.Attribute]"/; +%MethodCode + sipRes = sipConvertToTypedArray((void *)sipCpp->attributes(), + sipType_QSGGeometry_Attribute, "iiiI", sizeof (QSGGeometry::Attribute), + sipCpp->attributeCount(), SIP_READ_ONLY); +%End + + int sizeOfVertex() const; + static void updateRectGeometry(QSGGeometry *g, const QRectF &rect); + static void updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &sourceRect); + void setIndexDataPattern(QSGGeometry::DataPattern p); + QSGGeometry::DataPattern indexDataPattern() const; + void setVertexDataPattern(QSGGeometry::DataPattern p); + QSGGeometry::DataPattern vertexDataPattern() const; + void markIndexDataDirty(); + void markVertexDataDirty(); + float lineWidth() const; + void setLineWidth(float w); + SIP_PYOBJECT indexDataAsUInt() /TypeHint="PyQt5.sip.array[int]"/; +%MethodCode + sipRes = sipConvertToArray(sipCpp->indexDataAsUInt(), "I", + sipCpp->indexCount(), 0); +%End + + SIP_PYOBJECT indexDataAsUShort() /TypeHint="PyQt5.sip.array[int]"/; +%MethodCode + sipRes = sipConvertToArray(sipCpp->indexDataAsUShort(), "H", + sipCpp->indexCount(), 0); +%End + + SIP_PYOBJECT vertexDataAsPoint2D() /TypeHint="PyQt5.sip.array[QSGGeometry.Point2D]"/; +%MethodCode + sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsPoint2D(), + sipType_QSGGeometry_Point2D, "ff", sizeof (QSGGeometry::Point2D), + sipCpp->vertexCount(), 0); +%End + + SIP_PYOBJECT vertexDataAsTexturedPoint2D() /TypeHint="PyQt5.sip.array[QSGGeometry.TexturedPoint2D]"/; +%MethodCode + sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsTexturedPoint2D(), + sipType_QSGGeometry_TexturedPoint2D, "ffff", + sizeof (QSGGeometry::TexturedPoint2D), sipCpp->vertexCount(), 0); +%End + + SIP_PYOBJECT vertexDataAsColoredPoint2D() /TypeHint="PyQt5.sip.array[QSGGeometry.ColoredPoint2D]"/; +%MethodCode + sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsColoredPoint2D(), + sipType_QSGGeometry_ColoredPoint2D, "ffbbbb", + sizeof (QSGGeometry::ColoredPoint2D), sipCpp->vertexCount(), 0); +%End + + int sizeOfIndex() const; +%If (Qt_5_8_0 -) + + enum AttributeType + { + UnknownAttribute, + PositionAttribute, + ColorAttribute, + TexCoordAttribute, + TexCoord1Attribute, + TexCoord2Attribute, + }; + +%End +%If (Qt_5_8_0 -) + + enum DrawingMode + { + DrawPoints, + DrawLines, + DrawLineLoop, + DrawLineStrip, + DrawTriangles, + DrawTriangleStrip, + DrawTriangleFan, + }; + +%End +%If (Qt_5_8_0 -) + + enum Type + { + ByteType, + UnsignedByteType, + ShortType, + UnsignedShortType, + IntType, + UnsignedIntType, + FloatType, +%If (Qt_5_14_0 -) + Bytes2Type, +%End +%If (Qt_5_14_0 -) + Bytes3Type, +%End +%If (Qt_5_14_0 -) + Bytes4Type, +%End +%If (Qt_5_14_0 -) + DoubleType, +%End + }; + +%End +%If (Qt_5_8_0 -) + static void updateColoredRectGeometry(QSGGeometry *g, const QRectF &rect); +%End + +private: + QSGGeometry(const QSGGeometry &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgimagenode.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgimagenode.sip new file mode 100644 index 0000000..55abd79 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgimagenode.sip @@ -0,0 +1,71 @@ +// qsgimagenode.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) + +class QSGImageNode : public QSGGeometryNode /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QSGImageNode(); + virtual void setRect(const QRectF &rect) = 0; + void setRect(qreal x, qreal y, qreal w, qreal h); + virtual QRectF rect() const = 0; + virtual void setSourceRect(const QRectF &r) = 0; + void setSourceRect(qreal x, qreal y, qreal w, qreal h); + virtual QRectF sourceRect() const = 0; + virtual void setTexture(QSGTexture *texture /GetWrapper/) = 0; +%MethodCode + sipCpp->setTexture(a0); + + if (sipCpp->ownsTexture()) + sipTransferTo(a0Wrapper, sipSelf); +%End + + virtual QSGTexture *texture() const = 0; + virtual void setFiltering(QSGTexture::Filtering filtering) = 0; + virtual QSGTexture::Filtering filtering() const = 0; + virtual void setMipmapFiltering(QSGTexture::Filtering filtering) = 0; + virtual QSGTexture::Filtering mipmapFiltering() const = 0; + + enum TextureCoordinatesTransformFlag + { + NoTransform, + MirrorHorizontally, + MirrorVertically, + }; + + typedef QFlags TextureCoordinatesTransformMode; + virtual void setTextureCoordinatesTransform(QSGImageNode::TextureCoordinatesTransformMode mode) = 0; + virtual QSGImageNode::TextureCoordinatesTransformMode textureCoordinatesTransform() const = 0; + virtual void setOwnsTexture(bool owns) = 0; + virtual bool ownsTexture() const = 0; + static void rebuildGeometry(QSGGeometry *g, QSGTexture *texture, const QRectF &rect, QRectF sourceRect, QSGImageNode::TextureCoordinatesTransformMode texCoordMode); +}; + +%End +%If (Qt_5_8_0 -) +QFlags operator|(QSGImageNode::TextureCoordinatesTransformFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgmaterial.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgmaterial.sip new file mode 100644 index 0000000..de6858e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgmaterial.sip @@ -0,0 +1,301 @@ +// qsgmaterial.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGMaterialShader /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + class RenderState + { +%TypeHeaderCode +#include +%End + + public: + enum DirtyState + { + DirtyMatrix, + DirtyOpacity, +%If (Qt_5_8_0 -) + DirtyCachedMaterialData, +%End +%If (Qt_5_8_0 -) + DirtyAll, +%End + }; + + typedef QFlags DirtyStates; + QSGMaterialShader::RenderState::DirtyStates dirtyStates() const; + bool isMatrixDirty() const; + bool isOpacityDirty() const; + float opacity() const; + QMatrix4x4 combinedMatrix() const; + QMatrix4x4 modelViewMatrix() const; + QRect viewportRect() const; + QRect deviceRect() const; + float determinant() const; +%If (PyQt_OpenGL) + QOpenGLContext *context() const; +%End +%If (Qt_5_1_0 -) + QMatrix4x4 projectionMatrix() const; +%End +%If (Qt_5_1_0 -) + float devicePixelRatio() const; +%End +%If (Qt_5_8_0 -) + bool isCachedMaterialDataDirty() const; +%End + }; + + QSGMaterialShader(); + virtual ~QSGMaterialShader(); + virtual void activate(); + virtual void deactivate(); + virtual void updateState(const QSGMaterialShader::RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial); + virtual SIP_PYOBJECT attributeNames() const = 0 /TypeHint="List[str]"/ [const char * const * ()]; +%MethodCode + const char * const *names = sipCpp->attributeNames(); + + Py_ssize_t nr_names = 0; + + if (names) + while (names[nr_names]) + ++nr_names; + + sipRes = PyList_New(nr_names); + + if (!sipRes) + sipIsErr = 1; + else + for (Py_ssize_t i = 0; i < nr_names; ++i) + { + const char *name = names[i]; + PyObject *el; + + #if PY_MAJOR_VERSION >= 3 + el = PyUnicode_DecodeASCII(name, strlen(name), 0); + #else + el = PyString_FromString(name); + #endif + + if (!el) + { + Py_DECREF(sipRes); + sipIsErr = 1; + break; + } + + PyList_SetItem(sipRes, i, el); + } +%End + +%VirtualCatcherCode + PyObject *names = sipCallMethod(&sipIsErr, sipMethod, ""); + + if (names) + { + sipRes = qtquick_anc_get_attr_names(sipPySelf, sipMethod, names); + + if (!sipRes) + sipIsErr = 1; + + Py_DECREF(names); + } +%End + +%If (PyQt_OpenGL) + QOpenGLShaderProgram *program(); +%End + +protected: +%If (PyQt_OpenGL) + virtual void compile(); +%End + virtual void initialize(); +%If (Qt_5_2_0 -) +%If (PyQt_OpenGL) + virtual const char *vertexShader() const; +%End +%End +%If (- Qt_5_2_0) +%If (PyQt_OpenGL) + virtual const char *vertexShader() const = 0; +%End +%End +%If (Qt_5_2_0 -) +%If (PyQt_OpenGL) + virtual const char *fragmentShader() const; +%End +%End +%If (- Qt_5_2_0) +%If (PyQt_OpenGL) + virtual const char *fragmentShader() const = 0; +%End +%End +%If (Qt_5_2_0 -) +%If (PyQt_OpenGL) + void setShaderSourceFile(QOpenGLShader::ShaderType type, const QString &sourceFile); +%End +%End +%If (Qt_5_2_0 -) +%If (PyQt_OpenGL) + void setShaderSourceFiles(QOpenGLShader::ShaderType type, const QStringList &sourceFiles); +%End +%End + +private: + QSGMaterialShader(const QSGMaterialShader &); +}; + +struct QSGMaterialType +{ +%TypeHeaderCode +#include +%End +}; + +class QSGMaterial /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + enum Flag + { + Blending, + RequiresDeterminant, + RequiresFullMatrixExceptTranslate, + RequiresFullMatrix, +%If (Qt_5_2_0 -) + CustomCompileStep, +%End +%If (Qt_5_14_0 -) + SupportsRhiShader, +%End +%If (Qt_5_14_0 -) + RhiShaderWanted, +%End + }; + + typedef QFlags Flags; + QSGMaterial(); + virtual ~QSGMaterial(); + virtual QSGMaterialType *type() const = 0; + virtual QSGMaterialShader *createShader() const = 0 /Factory/; + virtual int compare(const QSGMaterial *other) const; + QSGMaterial::Flags flags() const; + void setFlag(QSGMaterial::Flags flags, bool enabled = true); + +private: + QSGMaterial(const QSGMaterial &); +}; + +QFlags operator|(QSGMaterial::Flag f1, QFlags f2); +QFlags operator|(QSGMaterialShader::RenderState::DirtyState f1, QFlags f2); + +%ModuleCode +// Release any attribute names to the heap. +static void qtquick_anc_release(char **attr_names) +{ + if (attr_names) + { + for (int i = 0; attr_names[i]; ++i) + delete[] attr_names[i]; + + delete[] attr_names; + } +} + + +// The destructor for the attribute names PyCapsule. +static void qtquick_anc_destructor(PyObject *cap) +{ + qtquick_anc_release( + reinterpret_cast(PyCapsule_GetPointer(cap, NULL))); +} + + +// Get the attribute names or 0 if there was an error. +static char **qtquick_anc_get_attr_names(sipSimpleWrapper *pySelf, PyObject *method, PyObject *attr_names_obj) +{ + // Dispose of any existing names. + Py_XDECREF(sipGetUserObject(pySelf)); + sipSetUserObject(pySelf, NULL); + + // Convert the new names. + if (!PyList_Check(attr_names_obj)) + { + sipBadCatcherResult(method); + return 0; + } + + char **names = new char *[PyList_Size(attr_names_obj) + 1]; + + for (Py_ssize_t i = 0; i < PyList_Size(attr_names_obj); ++i) + { + char *name; + PyObject *el = PyList_GetItem(attr_names_obj, i); + +#if PY_MAJOR_VERSION >= 3 + PyObject *name_obj = PyUnicode_AsASCIIString(el); + + name = (name_obj ? PyBytes_AsString(name_obj) : 0); +#else + name = PyString_AsString(el); +#endif + + if (!name) + { + names[i] = 0; + qtquick_anc_release(names); + + sipBadCatcherResult(method); + return 0; + } + + char *name_copy = new char[strlen(name) + 1]; + strcpy(name_copy, name); + names[i] = name_copy; + +#if PY_MAJOR_VERSION >= 3 + Py_DECREF(name_obj); +#endif + } + + names[PyList_Size(attr_names_obj)] = 0; + + sipSetUserObject(pySelf, PyCapsule_New(names, NULL, qtquick_anc_destructor)); + + if (!sipGetUserObject(pySelf)) + { + qtquick_anc_release(names); + return 0; + } + + return names; +} +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgmaterialrhishader.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgmaterialrhishader.sip new file mode 100644 index 0000000..665b4ea --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgmaterialrhishader.sip @@ -0,0 +1,123 @@ +// qsgmaterialrhishader.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_14_0 -) + +class QSGMaterialRhiShader : public QSGMaterialShader +{ +%TypeHeaderCode +#include +%End + +public: + class RenderState + { +%TypeHeaderCode +#include +%End + + typedef QSGMaterialShader::RenderState::DirtyStates DirtyStates; + + public: + QSGMaterialRhiShader::RenderState::DirtyStates dirtyStates() const; + bool isMatrixDirty() const; + bool isOpacityDirty() const; + float opacity() const; + QMatrix4x4 combinedMatrix() const; + QMatrix4x4 modelViewMatrix() const; + QMatrix4x4 projectionMatrix() const; + QRect viewportRect() const; + QRect deviceRect() const; + float determinant() const; + float devicePixelRatio() const; + QByteArray *uniformData(); + }; + + struct GraphicsPipelineState + { +%TypeHeaderCode +#include +%End + + enum BlendFactor + { + Zero, + One, + SrcColor, + OneMinusSrcColor, + DstColor, + OneMinusDstColor, + SrcAlpha, + OneMinusSrcAlpha, + DstAlpha, + OneMinusDstAlpha, + ConstantColor, + OneMinusConstantColor, + ConstantAlpha, + OneMinusConstantAlpha, + SrcAlphaSaturate, + Src1Color, + OneMinusSrc1Color, + Src1Alpha, + OneMinusSrc1Alpha, + }; + + enum ColorMaskComponent + { + R, + G, + B, + A, + }; + + typedef QFlags ColorMask; + + enum CullMode + { + CullNone, + CullFront, + CullBack, + }; + }; + + enum Flag + { + UpdatesGraphicsPipelineState, + }; + + typedef QFlags Flags; + QSGMaterialRhiShader(); + virtual ~QSGMaterialRhiShader(); + virtual bool updateUniformData(QSGMaterialRhiShader::RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial); + virtual void updateSampledImage(QSGMaterialRhiShader::RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial); + virtual bool updateGraphicsPipelineState(QSGMaterialRhiShader::RenderState &state, QSGMaterialRhiShader::GraphicsPipelineState *ps, QSGMaterial *newMaterial, QSGMaterial *oldMaterial); + QSGMaterialRhiShader::Flags flags() const; + void setFlag(QSGMaterialRhiShader::Flags flags, bool on = true); +}; + +%End +%If (Qt_5_14_0 -) +QFlags operator|(QSGMaterialRhiShader::GraphicsPipelineState::ColorMaskComponent f1, QFlags f2); +%End +%If (Qt_5_14_0 -) +QFlags operator|(QSGMaterialRhiShader::Flag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgnode.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgnode.sip new file mode 100644 index 0000000..9a614f7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgnode.sip @@ -0,0 +1,338 @@ +// qsgnode.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGNode /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +%TypeCode +static sipErrorState qsgnode_handle_flags(QSGNode *node, PyObject *self, QSGNode::Flags old_flags) +{ + QSGNode::Flags new_flags = node->flags(); + + if (node->parent()) + { + if ((old_flags & QSGNode::OwnedByParent) != (new_flags & QSGNode::OwnedByParent)) + { + if (old_flags & QSGNode::OwnedByParent) + { + sipTransferBack(self); + } + else + { + PyObject *parent = sipConvertFromType(node->parent(), sipType_QSGNode, 0); + + if (!parent) + return sipErrorFail; + + sipTransferTo(self, parent); + Py_DECREF(parent); + } + } + } + + QSGNode::NodeType ntype = node->type(); + + if (ntype == QSGNode::BasicNodeType || ntype == QSGNode::GeometryNodeType || ntype == QSGNode::ClipNodeType) + { + QSGBasicGeometryNode *bg_node = (QSGBasicGeometryNode *)node; + + if (bg_node->geometry()) + { + if ((old_flags & QSGNode::OwnsGeometry) != (new_flags & QSGNode::OwnsGeometry)) + { + PyObject *geom = sipConvertFromType(bg_node->geometry(), sipType_QSGGeometry, 0); + + if (!geom) + return sipErrorFail; + + if (old_flags & QSGNode::OwnsGeometry) + sipTransferBack(geom); + else + sipTransferTo(geom, self); + + Py_DECREF(geom); + } + } + } + + if (ntype == QSGNode::GeometryNodeType) + { + QSGGeometryNode *g_node = (QSGGeometryNode *)node; + + if (g_node->material()) + { + if ((old_flags & QSGNode::OwnsMaterial) != (new_flags & QSGNode::OwnsMaterial)) + { + PyObject *mat = sipConvertFromType(g_node->material(), sipType_QSGMaterial, 0); + + if (!mat) + return sipErrorFail; + + if (old_flags & QSGNode::OwnsMaterial) + sipTransferBack(mat); + else + sipTransferTo(mat, self); + + Py_DECREF(mat); + } + } + + if (g_node->opaqueMaterial()) + { + if ((old_flags & QSGNode::OwnsOpaqueMaterial) != (new_flags & QSGNode::OwnsOpaqueMaterial)) + { + PyObject *omat = sipConvertFromType(g_node->opaqueMaterial(), sipType_QSGMaterial, 0); + + if (!omat) + return sipErrorFail; + + if (old_flags & QSGNode::OwnsOpaqueMaterial) + sipTransferBack(omat); + else + sipTransferTo(omat, self); + + Py_DECREF(omat); + } + } + } + + return sipErrorNone; +} +%End + +%ConvertToSubClassCode + switch (sipCpp->type()) + { + case QSGNode::BasicNodeType: + sipType = sipType_QSGBasicGeometryNode; + break; + + case QSGNode::GeometryNodeType: + sipType = sipType_QSGGeometryNode; + break; + + case QSGNode::TransformNodeType: + sipType = sipType_QSGClipNode; + break; + + case QSGNode::ClipNodeType: + sipType = sipType_QSGTransformNode; + break; + + case QSGNode::OpacityNodeType: + sipType = sipType_QSGOpacityNode; + break; + + default: + sipType = 0; + } +%End + +public: + enum NodeType + { + BasicNodeType, + GeometryNodeType, + TransformNodeType, + ClipNodeType, + OpacityNodeType, + }; + + enum Flag + { + OwnedByParent, + UsePreprocess, + OwnsGeometry, + OwnsMaterial, + OwnsOpaqueMaterial, + }; + + typedef QFlags Flags; + + enum DirtyStateBit + { + DirtyMatrix, + DirtyNodeAdded, + DirtyNodeRemoved, + DirtyGeometry, + DirtyMaterial, + DirtyOpacity, + }; + + typedef QFlags DirtyState; + QSGNode(); + virtual ~QSGNode(); + QSGNode *parent() const; + void removeChildNode(QSGNode *node); + void removeAllChildNodes(); + void prependChildNode(QSGNode *node /GetWrapper/); +%MethodCode + sipCpp->prependChildNode(a0); + + if (a0->flags() & QSGNode::OwnedByParent) + sipTransferTo(a0Wrapper, sipSelf); +%End + + void appendChildNode(QSGNode *node /GetWrapper/); +%MethodCode + sipCpp->appendChildNode(a0); + + if (a0->flags() & QSGNode::OwnedByParent) + sipTransferTo(a0Wrapper, sipSelf); +%End + + void insertChildNodeBefore(QSGNode *node /GetWrapper/, QSGNode *before); +%MethodCode + sipCpp->insertChildNodeBefore(a0, a1); + + if (a0->flags() & QSGNode::OwnedByParent) + sipTransferTo(a0Wrapper, sipSelf); +%End + + void insertChildNodeAfter(QSGNode *node /GetWrapper/, QSGNode *after); +%MethodCode + sipCpp->insertChildNodeAfter(a0, a1); + + if (a0->flags() & QSGNode::OwnedByParent) + sipTransferTo(a0Wrapper, sipSelf); +%End + + int childCount() const /__len__/; + QSGNode *childAtIndex(int i) const; + QSGNode *firstChild() const; + QSGNode *lastChild() const; + QSGNode *nextSibling() const; + QSGNode *previousSibling() const; + QSGNode::NodeType type() const; + void markDirty(QSGNode::DirtyState bits); + virtual bool isSubtreeBlocked() const; + QSGNode::Flags flags() const; + void setFlag(QSGNode::Flag, bool enabled = true); +%MethodCode + QSGNode::Flags old_flags = sipCpp->flags(); + + sipCpp->setFlag(a0, a1); + + sipError = qsgnode_handle_flags(sipCpp, sipSelf, old_flags); +%End + + void setFlags(QSGNode::Flags, bool enabled = true); + virtual void preprocess(); + +private: + QSGNode(const QSGNode &); +}; + +class QSGBasicGeometryNode : public QSGNode /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QSGBasicGeometryNode(); + void setGeometry(QSGGeometry *geometry /GetWrapper/); +%MethodCode + sipCpp->setGeometry(a0); + + if (sipCpp->flags() & QSGNode::OwnsGeometry) + sipTransferTo(a0Wrapper, sipSelf); +%End + + QSGGeometry *geometry(); +}; + +class QSGGeometryNode : public QSGBasicGeometryNode +{ +%TypeHeaderCode +#include +%End + +public: + QSGGeometryNode(); + virtual ~QSGGeometryNode(); + void setMaterial(QSGMaterial *material /GetWrapper/); +%MethodCode + sipCpp->setMaterial(a0); + + if (sipCpp->flags() & QSGNode::OwnsMaterial) + sipTransferTo(a0Wrapper, sipSelf); +%End + + QSGMaterial *material() const; + void setOpaqueMaterial(QSGMaterial *material /GetWrapper/); +%MethodCode + sipCpp->setOpaqueMaterial(a0); + + if (sipCpp->flags() & QSGNode::OwnsOpaqueMaterial) + sipTransferTo(a0Wrapper, sipSelf); +%End + + QSGMaterial *opaqueMaterial() const; +}; + +class QSGClipNode : public QSGBasicGeometryNode +{ +%TypeHeaderCode +#include +%End + +public: + QSGClipNode(); + virtual ~QSGClipNode(); + void setIsRectangular(bool rectHint); + bool isRectangular() const; + void setClipRect(const QRectF &); + QRectF clipRect() const; +}; + +class QSGTransformNode : public QSGNode +{ +%TypeHeaderCode +#include +%End + +public: + QSGTransformNode(); + virtual ~QSGTransformNode(); + void setMatrix(const QMatrix4x4 &matrix); + const QMatrix4x4 &matrix() const; +}; + +class QSGOpacityNode : public QSGNode +{ +%TypeHeaderCode +#include +%End + +public: + QSGOpacityNode(); + virtual ~QSGOpacityNode(); + void setOpacity(qreal opacity); + qreal opacity() const; +}; + +QFlags operator|(QSGNode::DirtyStateBit f1, QFlags f2); +QFlags operator|(QSGNode::Flag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrectanglenode.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrectanglenode.sip new file mode 100644 index 0000000..7d0a6a8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrectanglenode.sip @@ -0,0 +1,40 @@ +// qsgrectanglenode.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) + +class QSGRectangleNode : public QSGGeometryNode /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QSGRectangleNode(); + virtual void setRect(const QRectF &rect) = 0; + void setRect(qreal x, qreal y, qreal w, qreal h); + virtual QRectF rect() const = 0; + virtual void setColor(const QColor &color) = 0; + virtual QColor color() const = 0; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrendererinterface.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrendererinterface.sip new file mode 100644 index 0000000..410680a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrendererinterface.sip @@ -0,0 +1,131 @@ +// qsgrendererinterface.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) + +class QSGRendererInterface /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum GraphicsApi + { + Unknown, + Software, + OpenGL, + Direct3D12, +%If (Qt_5_9_0 -) + OpenVG, +%End +%If (Qt_5_14_0 -) + OpenGLRhi, +%End +%If (Qt_5_14_0 -) + Direct3D11Rhi, +%End +%If (Qt_5_14_0 -) + VulkanRhi, +%End +%If (Qt_5_14_0 -) + MetalRhi, +%End +%If (Qt_5_14_0 -) + NullRhi, +%End + }; + + enum Resource + { + DeviceResource, + CommandQueueResource, + CommandListResource, + PainterResource, +%If (Qt_5_14_0 -) + RhiResource, +%End +%If (Qt_5_14_0 -) + PhysicalDeviceResource, +%End +%If (Qt_5_14_0 -) + OpenGLContextResource, +%End +%If (Qt_5_14_0 -) + DeviceContextResource, +%End +%If (Qt_5_14_0 -) + CommandEncoderResource, +%End +%If (Qt_5_14_0 -) + VulkanInstanceResource, +%End +%If (Qt_5_14_0 -) + RenderPassResource, +%End + }; + + enum ShaderType + { + UnknownShadingLanguage, + GLSL, + HLSL, +%If (Qt_5_14_0 -) + RhiShader, +%End + }; + + enum ShaderCompilationType + { + RuntimeCompilation, + OfflineCompilation, + }; + + typedef QFlags ShaderCompilationTypes; + + enum ShaderSourceType + { + ShaderSourceString, + ShaderSourceFile, + ShaderByteCode, + }; + + typedef QFlags ShaderSourceTypes; + virtual ~QSGRendererInterface(); + virtual QSGRendererInterface::GraphicsApi graphicsApi() const = 0; + virtual void *getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const; + virtual void *getResource(QQuickWindow *window, const char *resource) const; + virtual QSGRendererInterface::ShaderType shaderType() const = 0; + virtual QSGRendererInterface::ShaderCompilationTypes shaderCompilationType() const = 0; + virtual QSGRendererInterface::ShaderSourceTypes shaderSourceType() const = 0; +%If (Qt_5_14_0 -) + static bool isApiRhiBased(QSGRendererInterface::GraphicsApi api); +%End +}; + +%End +%If (Qt_5_8_0 -) +QFlags operator|(QSGRendererInterface::ShaderCompilationType f1, QFlags f2); +%End +%If (Qt_5_8_0 -) +QFlags operator|(QSGRendererInterface::ShaderSourceType f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrendernode.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrendernode.sip new file mode 100644 index 0000000..3e14e7b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgrendernode.sip @@ -0,0 +1,88 @@ +// qsgrendernode.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) + +class QSGRenderNode : public QSGNode +{ +%TypeHeaderCode +#include +%End + +public: + enum StateFlag + { + DepthState, + StencilState, + ScissorState, + ColorState, + BlendState, + CullState, + ViewportState, + RenderTargetState, + }; + + typedef QFlags StateFlags; + + enum RenderingFlag + { + BoundedRectRendering, + DepthAwareRendering, + OpaqueRendering, + }; + + typedef QFlags RenderingFlags; + + struct RenderState /NoDefaultCtors/ + { +%TypeHeaderCode +#include +%End + + virtual ~RenderState(); + virtual const QMatrix4x4 *projectionMatrix() const = 0; + virtual QRect scissorRect() const = 0; + virtual bool scissorEnabled() const = 0; + virtual int stencilValue() const = 0; + virtual bool stencilEnabled() const = 0; + virtual const QRegion *clipRegion() const = 0; + virtual void *get(const char *state) const; + }; + + virtual ~QSGRenderNode(); + virtual QSGRenderNode::StateFlags changedStates() const; + virtual void render(const QSGRenderNode::RenderState *state) = 0; + virtual void releaseResources(); + virtual QSGRenderNode::RenderingFlags flags() const; + virtual QRectF rect() const; + const QMatrix4x4 *matrix() const; + const QSGClipNode *clipList() const; + qreal inheritedOpacity() const; +}; + +%End +%If (Qt_5_8_0 -) +QFlags operator|(QSGRenderNode::StateFlag f1, QFlags f2); +%End +%If (Qt_5_8_0 -) +QFlags operator|(QSGRenderNode::RenderingFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgsimplerectnode.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgsimplerectnode.sip new file mode 100644 index 0000000..3d0bdf7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgsimplerectnode.sip @@ -0,0 +1,37 @@ +// qsgsimplerectnode.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGSimpleRectNode : public QSGGeometryNode /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + QSGSimpleRectNode(const QRectF &rect, const QColor &color); + QSGSimpleRectNode(); + void setRect(const QRectF &rect); + void setRect(qreal x, qreal y, qreal w, qreal h); + QRectF rect() const; + void setColor(const QColor &color); + QColor color() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgsimpletexturenode.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgsimpletexturenode.sip new file mode 100644 index 0000000..98eddf0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgsimpletexturenode.sip @@ -0,0 +1,79 @@ +// qsgsimpletexturenode.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGSimpleTextureNode : public QSGGeometryNode /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + QSGSimpleTextureNode(); +%If (Qt_5_4_0 -) + virtual ~QSGSimpleTextureNode(); +%End + void setRect(const QRectF &rect); + void setRect(qreal x, qreal y, qreal w, qreal h); + QRectF rect() const; + void setTexture(QSGTexture *texture); + QSGTexture *texture() const; + void setFiltering(QSGTexture::Filtering filtering); + QSGTexture::Filtering filtering() const; +%If (Qt_5_2_0 -) + + enum TextureCoordinatesTransformFlag + { + NoTransform, + MirrorHorizontally, + MirrorVertically, + }; + +%End +%If (Qt_5_2_0 -) + typedef QFlags TextureCoordinatesTransformMode; +%End +%If (Qt_5_2_0 -) + void setTextureCoordinatesTransform(QSGSimpleTextureNode::TextureCoordinatesTransformMode mode); +%End +%If (Qt_5_2_0 -) + QSGSimpleTextureNode::TextureCoordinatesTransformMode textureCoordinatesTransform() const; +%End +%If (Qt_5_4_0 -) + void setOwnsTexture(bool owns); +%End +%If (Qt_5_4_0 -) + bool ownsTexture() const; +%End +%If (Qt_5_5_0 -) + void setSourceRect(const QRectF &r); +%End +%If (Qt_5_5_0 -) + void setSourceRect(qreal x, qreal y, qreal w, qreal h); +%End +%If (Qt_5_5_0 -) + QRectF sourceRect() const; +%End +}; + +%If (Qt_5_2_0 -) +QFlags operator|(QSGSimpleTextureNode::TextureCoordinatesTransformFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtexture.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtexture.sip new file mode 100644 index 0000000..034dd0d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtexture.sip @@ -0,0 +1,117 @@ +// qsgtexture.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGTexture : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QSGTexture(); + virtual ~QSGTexture(); + + enum WrapMode + { + Repeat, + ClampToEdge, +%If (Qt_5_10_0 -) + MirroredRepeat, +%End + }; + + enum Filtering + { + None /PyName=None_/, + Nearest, + Linear, + }; + + virtual int textureId() const = 0; + virtual QSize textureSize() const = 0; + virtual bool hasAlphaChannel() const = 0; + virtual bool hasMipmaps() const = 0; + virtual QRectF normalizedTextureSubRect() const; + virtual bool isAtlasTexture() const; + virtual QSGTexture *removedFromAtlas() const; + virtual void bind() = 0; + void updateBindOptions(bool force = false); + void setMipmapFiltering(QSGTexture::Filtering filter); + QSGTexture::Filtering mipmapFiltering() const; + void setFiltering(QSGTexture::Filtering filter); + QSGTexture::Filtering filtering() const; + void setHorizontalWrapMode(QSGTexture::WrapMode hwrap); + QSGTexture::WrapMode horizontalWrapMode() const; + void setVerticalWrapMode(QSGTexture::WrapMode vwrap); + QSGTexture::WrapMode verticalWrapMode() const; + QRectF convertToNormalizedSourceRect(const QRectF &rect) const; +%If (Qt_5_9_0 -) + + enum AnisotropyLevel + { + AnisotropyNone, + Anisotropy2x, + Anisotropy4x, + Anisotropy8x, + Anisotropy16x, + }; + +%End +%If (Qt_5_9_0 -) + void setAnisotropyLevel(QSGTexture::AnisotropyLevel level); +%End +%If (Qt_5_9_0 -) + QSGTexture::AnisotropyLevel anisotropyLevel() const; +%End +%If (Qt_5_14_0 -) + int comparisonKey() const; +%End +%If (Qt_5_15_0 -) + + struct NativeTexture + { +%TypeHeaderCode +#include +%End + + const void *object; + int layout; + }; + +%End +%If (Qt_5_15_0 -) + QSGTexture::NativeTexture nativeTexture() const; +%End +}; + +class QSGDynamicTexture : public QSGTexture +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_14_0 -) + QSGDynamicTexture(); +%End + virtual bool updateTexture() = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtexturematerial.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtexturematerial.sip new file mode 100644 index 0000000..73e8740 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtexturematerial.sip @@ -0,0 +1,61 @@ +// qsgtexturematerial.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGOpaqueTextureMaterial : public QSGMaterial +{ +%TypeHeaderCode +#include +%End + +public: + QSGOpaqueTextureMaterial(); + virtual QSGMaterialType *type() const; + virtual QSGMaterialShader *createShader() const /Factory/; + virtual int compare(const QSGMaterial *other) const; + void setTexture(QSGTexture *texture); + QSGTexture *texture() const; + void setMipmapFiltering(QSGTexture::Filtering filtering); + QSGTexture::Filtering mipmapFiltering() const; + void setFiltering(QSGTexture::Filtering filtering); + QSGTexture::Filtering filtering() const; + void setHorizontalWrapMode(QSGTexture::WrapMode mode); + QSGTexture::WrapMode horizontalWrapMode() const; + void setVerticalWrapMode(QSGTexture::WrapMode mode); + QSGTexture::WrapMode verticalWrapMode() const; +%If (Qt_5_9_0 -) + void setAnisotropyLevel(QSGTexture::AnisotropyLevel level); +%End +%If (Qt_5_9_0 -) + QSGTexture::AnisotropyLevel anisotropyLevel() const; +%End +}; + +class QSGTextureMaterial : public QSGOpaqueTextureMaterial +{ +%TypeHeaderCode +#include +%End + +public: + virtual QSGMaterialType *type() const; + virtual QSGMaterialShader *createShader() const /Factory/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtextureprovider.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtextureprovider.sip new file mode 100644 index 0000000..7806804 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgtextureprovider.sip @@ -0,0 +1,34 @@ +// qsgtextureprovider.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGTextureProvider : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + virtual QSGTexture *texture() const = 0 /Factory/; + +signals: + void textureChanged(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgvertexcolormaterial.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgvertexcolormaterial.sip new file mode 100644 index 0000000..583849a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick/qsgvertexcolormaterial.sip @@ -0,0 +1,36 @@ +// qsgvertexcolormaterial.sip generated by MetaSIP +// +// This file is part of the QtQuick Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSGVertexColorMaterial : public QSGMaterial +{ +%TypeHeaderCode +#include +%End + +public: + QSGVertexColorMaterial(); + virtual int compare(const QSGMaterial *other) const; + +protected: + virtual QSGMaterialType *type() const; + virtual QSGMaterialShader *createShader() const /Factory/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/QtQuick3D.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/QtQuick3D.toml new file mode 100644 index 0000000..55c2e48 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/QtQuick3D.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtQuick3D. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/QtQuick3Dmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/QtQuick3Dmod.sip new file mode 100644 index 0000000..1bb6e4d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/QtQuick3Dmod.sip @@ -0,0 +1,52 @@ +// QtQuick3Dmod.sip generated by MetaSIP +// +// This file is part of the QtQuick3D Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtQuick3D, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip +%Import QtQml/QtQmlmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qquick3d.sip +%Include qquick3dgeometry.sip +%Include qquick3dobject.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3d.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3d.sip new file mode 100644 index 0000000..9127bb1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3d.sip @@ -0,0 +1,35 @@ +// qquick3d.sip generated by MetaSIP +// +// This file is part of the QtQuick3D Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_15_0 -) + +class QQuick3D +{ +%TypeHeaderCode +#include +%End + +public: + static QSurfaceFormat idealSurfaceFormat(int samples = -1); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3dgeometry.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3dgeometry.sip new file mode 100644 index 0000000..87d5f97 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3dgeometry.sip @@ -0,0 +1,101 @@ +// qquick3dgeometry.sip generated by MetaSIP +// +// This file is part of the QtQuick3D Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_15_0 -) + +class QQuick3DGeometry : public QQuick3DObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QQuick3DGeometry(QQuick3DObject *parent /TransferThis/ = 0); + virtual ~QQuick3DGeometry(); + + enum class PrimitiveType + { + Unknown, + Points, + LineStrip, + Lines, + TriangleStrip, + TriangleFan, + Triangles, + }; + + struct Attribute + { +%TypeHeaderCode +#include +%End + + enum Semantic + { + UnknownSemantic, + IndexSemantic, + PositionSemantic, + NormalSemantic, + TexCoordSemantic, + TangentSemantic, + BinormalSemantic, + }; + + enum ComponentType + { + DefaultType, + U16Type, + U32Type, + F32Type, + }; + + QQuick3DGeometry::Attribute::Semantic semantic; + int offset; + QQuick3DGeometry::Attribute::ComponentType componentType; + }; + + QString name() const; + QByteArray vertexBuffer() const; + QByteArray indexBuffer() const; + int attributeCount() const; + QQuick3DGeometry::Attribute attribute(int index) const; + QQuick3DGeometry::PrimitiveType primitiveType() const; + QVector3D boundsMin() const; + QVector3D boundsMax() const; + int stride() const; + void setVertexData(const QByteArray &data); + void setIndexData(const QByteArray &data); + void setStride(int stride); + void setBounds(const QVector3D &min, const QVector3D &max); + void setPrimitiveType(QQuick3DGeometry::PrimitiveType type); + void addAttribute(QQuick3DGeometry::Attribute::Semantic semantic, int offset, QQuick3DGeometry::Attribute::ComponentType componentType); + void addAttribute(const QQuick3DGeometry::Attribute &att); + void clear(); + +public slots: + void setName(const QString &name); + +signals: + void nameChanged(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3dobject.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3dobject.sip new file mode 100644 index 0000000..343616a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuick3D/qquick3dobject.sip @@ -0,0 +1,78 @@ +// qquick3dobject.sip generated by MetaSIP +// +// This file is part of the QtQuick3D Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_15_0 -) + +class QQuick3DObject : public QObject, public QQmlParserStatus /Abstract/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QQuick3DObject, &sipType_QQuick3DObject, 1, -1}, + {sipName_QQuick3DGeometry, &sipType_QQuick3DGeometry, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + explicit QQuick3DObject(QQuick3DObject *parent /TransferThis/ = 0); + virtual ~QQuick3DObject(); + QString state() const; + void setState(const QString &state); + QQuick3DObject *parentItem() const; + +public slots: + void setParentItem(QQuick3DObject *parentItem); + +signals: + void stateChanged(); + +protected: + virtual void classBegin(); + virtual void componentComplete(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/QtQuickWidgets.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/QtQuickWidgets.toml new file mode 100644 index 0000000..0eb7f56 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/QtQuickWidgets.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtQuickWidgets. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/QtQuickWidgetsmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/QtQuickWidgetsmod.sip new file mode 100644 index 0000000..f6d6896 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/QtQuickWidgetsmod.sip @@ -0,0 +1,52 @@ +// QtQuickWidgetsmod.sip generated by MetaSIP +// +// This file is part of the QtQuickWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtQuickWidgets, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip +%Import QtQml/QtQmlmod.sip +%Import QtQuick/QtQuickmod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qquickwidget.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/qquickwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/qquickwidget.sip new file mode 100644 index 0000000..dd0d14e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtQuickWidgets/qquickwidget.sip @@ -0,0 +1,128 @@ +// qquickwidget.sip generated by MetaSIP +// +// This file is part of the QtQuickWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +class QQuickWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + sipType = (sipCpp->inherits(sipName_QQuickWidget) ? sipType_QQuickWidget : 0); +%End + +public: + explicit QQuickWidget(QWidget *parent /TransferThis/ = 0); + QQuickWidget(QQmlEngine *engine, QWidget *parent /TransferThis/); + QQuickWidget(const QUrl &source, QWidget *parent /TransferThis/ = 0); + virtual ~QQuickWidget(); + QUrl source() const; + QQmlEngine *engine() const; + QQmlContext *rootContext() const; + QQuickItem *rootObject() const; + + enum ResizeMode + { + SizeViewToRootObject, + SizeRootObjectToView, + }; + + QQuickWidget::ResizeMode resizeMode() const; + void setResizeMode(QQuickWidget::ResizeMode); + + enum Status + { + Null, + Ready, + Loading, + Error, + }; + + QQuickWidget::Status status() const; + QList errors() const; + virtual QSize sizeHint() const; + QSize initialSize() const; + void setFormat(const QSurfaceFormat &format); + QSurfaceFormat format() const; + +public slots: + void setSource(const QUrl &) /ReleaseGIL/; + +signals: + void statusChanged(QQuickWidget::Status); + void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message); + +protected: + virtual void resizeEvent(QResizeEvent *); + virtual void timerEvent(QTimerEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void keyReleaseEvent(QKeyEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual void showEvent(QShowEvent *); + virtual void hideEvent(QHideEvent *); + virtual void wheelEvent(QWheelEvent *); + virtual bool event(QEvent *); +%If (Qt_5_3_1 -) + virtual void focusInEvent(QFocusEvent *event); +%End +%If (Qt_5_3_1 -) + virtual void focusOutEvent(QFocusEvent *event); +%End +%If (Qt_5_5_0 -) + virtual void dragEnterEvent(QDragEnterEvent *); +%End +%If (Qt_5_5_0 -) + virtual void dragMoveEvent(QDragMoveEvent *); +%End +%If (Qt_5_5_0 -) + virtual void dragLeaveEvent(QDragLeaveEvent *); +%End +%If (Qt_5_5_0 -) + virtual void dropEvent(QDropEvent *); +%End +%If (Qt_5_8_0 -) + virtual void paintEvent(QPaintEvent *event); +%End + +public: +%If (Qt_5_4_0 -) + QImage grabFramebuffer() const; +%End +%If (Qt_5_4_0 -) + void setClearColor(const QColor &color); +%End +%If (Qt_5_5_0 -) + QQuickWindow *quickWindow() const; +%End + +protected: +%If (Qt_5_11_0 -) + virtual bool focusNextPrevChild(bool next); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/QtRemoteObjects.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/QtRemoteObjects.toml new file mode 100644 index 0000000..d42db18 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/QtRemoteObjects.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtRemoteObjects. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/QtRemoteObjectsmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/QtRemoteObjectsmod.sip new file mode 100644 index 0000000..d910937 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/QtRemoteObjectsmod.sip @@ -0,0 +1,53 @@ +// QtRemoteObjectsmod.sip generated by MetaSIP +// +// This file is part of the QtRemoteObjects Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtRemoteObjects, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qremoteobjectabstractitemmodelreplica.sip +%Include qremoteobjectdynamicreplica.sip +%Include qremoteobjectnode.sip +%Include qremoteobjectregistry.sip +%Include qremoteobjectreplica.sip +%Include qtremoteobjectglobal.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectabstractitemmodelreplica.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectabstractitemmodelreplica.sip new file mode 100644 index 0000000..9a12eec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectabstractitemmodelreplica.sip @@ -0,0 +1,54 @@ +// qremoteobjectabstractitemmodelreplica.sip generated by MetaSIP +// +// This file is part of the QtRemoteObjects Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) + +class QAbstractItemModelReplica : public QAbstractItemModel /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QAbstractItemModelReplica(); + QItemSelectionModel *selectionModel() const; + virtual QVariant data(const QModelIndex &index, int role = Qt::ItemDataRole::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::ItemDataRole::EditRole); + virtual QModelIndex parent(const QModelIndex &index) const; + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + QVector availableRoles() const; + virtual QHash roleNames() const; + bool isInitialized() const; + bool hasData(const QModelIndex &index, int role) const; + size_t rootCacheSize() const; + void setRootCacheSize(size_t rootCacheSize); + +signals: + void initialized(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectdynamicreplica.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectdynamicreplica.sip new file mode 100644 index 0000000..f2c8b22 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectdynamicreplica.sip @@ -0,0 +1,38 @@ +// qremoteobjectdynamicreplica.sip generated by MetaSIP +// +// This file is part of the QtRemoteObjects Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) + +class QRemoteObjectDynamicReplica : public QRemoteObjectReplica +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QRemoteObjectDynamicReplica(); + +private: + QRemoteObjectDynamicReplica(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectnode.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectnode.sip new file mode 100644 index 0000000..a99ab4e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectnode.sip @@ -0,0 +1,193 @@ +// qremoteobjectnode.sip generated by MetaSIP +// +// This file is part of the QtRemoteObjects Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) + +class QRemoteObjectAbstractPersistedStore : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QRemoteObjectAbstractPersistedStore(QObject *parent /TransferThis/ = 0); + virtual ~QRemoteObjectAbstractPersistedStore(); + virtual void saveProperties(const QString &repName, const QByteArray &repSig, const QVariantList &values) = 0; + virtual QVariantList restoreProperties(const QString &repName, const QByteArray &repSig) = 0; +}; + +%End +%If (Qt_5_12_0 -) + +class QRemoteObjectNode : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QAbstractItemModelReplica, &sipType_QAbstractItemModelReplica, -1, 1}, + {sipName_QRemoteObjectAbstractPersistedStore, &sipType_QRemoteObjectAbstractPersistedStore, -1, 2}, + {sipName_QRemoteObjectReplica, &sipType_QRemoteObjectReplica, 4, 3}, + {sipName_QRemoteObjectNode, &sipType_QRemoteObjectNode, 6, -1}, + {sipName_QRemoteObjectDynamicReplica, &sipType_QRemoteObjectDynamicReplica, -1, 5}, + {sipName_QRemoteObjectRegistry, &sipType_QRemoteObjectRegistry, -1, -1}, + {sipName_QRemoteObjectHostBase, &sipType_QRemoteObjectHostBase, 7, -1}, + {sipName_QRemoteObjectHost, &sipType_QRemoteObjectHost, -1, 8}, + {sipName_QRemoteObjectRegistryHost, &sipType_QRemoteObjectRegistryHost, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum ErrorCode + { + NoError, + RegistryNotAcquired, + RegistryAlreadyHosted, + NodeIsNoServer, + ServerAlreadyCreated, + UnintendedRegistryHosting, + OperationNotValidOnClientNode, + SourceNotRegistered, + MissingObjectName, + HostUrlInvalid, + ProtocolMismatch, + ListenFailed, + }; + + QRemoteObjectNode(QObject *parent /TransferThis/ = 0); + QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent /TransferThis/ = 0); + virtual ~QRemoteObjectNode(); + bool connectToNode(const QUrl &address); + void addClientSideConnection(QIODevice *ioDevice); + virtual void setName(const QString &name); + QStringList instances(const QString &typeName) const; + QRemoteObjectDynamicReplica *acquireDynamic(const QString &name) /Factory/; + QAbstractItemModelReplica *acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QVector &rolesHint = {}) /Factory/; + QUrl registryUrl() const; + virtual bool setRegistryUrl(const QUrl ®istryAddress); + bool waitForRegistry(int timeout = 30000) /ReleaseGIL/; + const QRemoteObjectRegistry *registry() const; + QRemoteObjectAbstractPersistedStore *persistedStore() const; + void setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore); + QRemoteObjectNode::ErrorCode lastError() const; + int heartbeatInterval() const; + void setHeartbeatInterval(int interval); + +signals: + void remoteObjectAdded(const QRemoteObjectSourceLocation &); + void remoteObjectRemoved(const QRemoteObjectSourceLocation &); + void error(QRemoteObjectNode::ErrorCode errorCode); + void heartbeatIntervalChanged(int heartbeatInterval); + +protected: + virtual void timerEvent(QTimerEvent *); +}; + +%End +%If (Qt_5_12_0 -) + +class QRemoteObjectHostBase : public QRemoteObjectNode /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum AllowedSchemas + { + BuiltInSchemasOnly, + AllowExternalRegistration, + }; + + virtual ~QRemoteObjectHostBase(); + virtual void setName(const QString &name); + bool enableRemoting(QObject *object, const QString &name = QString()); + bool enableRemoting(QAbstractItemModel *model, const QString &name, const QVector roles, QItemSelectionModel *selectionModel = 0); + bool disableRemoting(QObject *remoteObject); + void addHostSideConnection(QIODevice *ioDevice); + bool proxy(const QUrl ®istryUrl, const QUrl &hostUrl /TypeHintValue="QUrl()"/ = {}); + bool reverseProxy(); +}; + +%End +%If (Qt_5_12_0 -) + +class QRemoteObjectHost : public QRemoteObjectHostBase +{ +%TypeHeaderCode +#include +%End + +public: + QRemoteObjectHost(QObject *parent /TransferThis/ = 0); + QRemoteObjectHost(const QUrl &address, const QUrl ®istryAddress = QUrl(), QRemoteObjectHostBase::AllowedSchemas allowedSchemas = QRemoteObjectHostBase::BuiltInSchemasOnly, QObject *parent /TransferThis/ = 0); + QRemoteObjectHost(const QUrl &address, QObject *parent /TransferThis/); + virtual ~QRemoteObjectHost(); + virtual QUrl hostUrl() const; + virtual bool setHostUrl(const QUrl &hostAddress, QRemoteObjectHostBase::AllowedSchemas allowedSchemas = QRemoteObjectHostBase::BuiltInSchemasOnly); + +signals: +%If (Qt_5_15_0 -) + void hostUrlChanged(); +%End +}; + +%End +%If (Qt_5_12_0 -) + +class QRemoteObjectRegistryHost : public QRemoteObjectHostBase +{ +%TypeHeaderCode +#include +%End + +public: + QRemoteObjectRegistryHost(const QUrl ®istryAddress = QUrl(), QObject *parent /TransferThis/ = 0); + virtual ~QRemoteObjectRegistryHost(); + virtual bool setRegistryUrl(const QUrl ®istryUrl); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectregistry.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectregistry.sip new file mode 100644 index 0000000..40ed7d4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectregistry.sip @@ -0,0 +1,43 @@ +// qremoteobjectregistry.sip generated by MetaSIP +// +// This file is part of the QtRemoteObjects Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) + +class QRemoteObjectRegistry : public QRemoteObjectReplica +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QRemoteObjectRegistry(); + QRemoteObjectSourceLocations sourceLocations() const; + +signals: + void remoteObjectAdded(const QRemoteObjectSourceLocation &entry); + void remoteObjectRemoved(const QRemoteObjectSourceLocation &entry); + +private: + explicit QRemoteObjectRegistry(QObject *parent = 0); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectreplica.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectreplica.sip new file mode 100644 index 0000000..031b990 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qremoteobjectreplica.sip @@ -0,0 +1,57 @@ +// qremoteobjectreplica.sip generated by MetaSIP +// +// This file is part of the QtRemoteObjects Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) + +class QRemoteObjectReplica : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum State + { + Uninitialized, + Default, + Valid, + Suspect, + SignatureMismatch, + }; + + virtual ~QRemoteObjectReplica(); + bool isReplicaValid() const; + bool waitForSource(int timeout = 30000) /ReleaseGIL/; + bool isInitialized() const; + QRemoteObjectReplica::State state() const; + QRemoteObjectNode *node() const; + virtual void setNode(QRemoteObjectNode *node); + +signals: + void initialized(); + void stateChanged(QRemoteObjectReplica::State state, QRemoteObjectReplica::State oldState); +%If (Qt_5_15_0 -) + void notified(); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qtremoteobjectglobal.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qtremoteobjectglobal.sip new file mode 100644 index 0000000..b71d7cb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtRemoteObjects/qtremoteobjectglobal.sip @@ -0,0 +1,67 @@ +// qtremoteobjectglobal.sip generated by MetaSIP +// +// This file is part of the QtRemoteObjects Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_12_0 -) + +struct QRemoteObjectSourceLocationInfo +{ +%TypeHeaderCode +#include +%End + + QRemoteObjectSourceLocationInfo(); + QRemoteObjectSourceLocationInfo(const QString &typeName_, const QUrl &hostUrl_); + bool operator==(const QRemoteObjectSourceLocationInfo &other) const; + bool operator!=(const QRemoteObjectSourceLocationInfo &other) const; + QString typeName; + QUrl hostUrl; +}; + +%End +%If (Qt_5_12_0 -) +QDataStream &operator<<(QDataStream &stream, const QRemoteObjectSourceLocationInfo &info /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_12_0 -) +QDataStream &operator>>(QDataStream &stream, QRemoteObjectSourceLocationInfo &info /Constrained/) /ReleaseGIL/; +%End +%If (Qt_5_12_0 -) +typedef QPair QRemoteObjectSourceLocation; +%End +%If (Qt_5_12_0 -) +typedef QHash QRemoteObjectSourceLocations; +%End +%If (Qt_5_12_0 -) + +namespace QtRemoteObjects +{ +%TypeHeaderCode +#include +%End + + enum InitialAction + { + FetchRootSize, + PrefetchData, + }; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/QtSensors.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/QtSensors.toml new file mode 100644 index 0000000..9e7fd35 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/QtSensors.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtSensors. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/QtSensorsmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/QtSensorsmod.sip new file mode 100644 index 0000000..6c16291 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/QtSensorsmod.sip @@ -0,0 +1,67 @@ +// QtSensorsmod.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtSensors, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qaccelerometer.sip +%Include qaltimeter.sip +%Include qambientlightsensor.sip +%Include qambienttemperaturesensor.sip +%Include qcompass.sip +%Include qdistancesensor.sip +%Include qgyroscope.sip +%Include qholstersensor.sip +%Include qhumiditysensor.sip +%Include qirproximitysensor.sip +%Include qlidsensor.sip +%Include qlightsensor.sip +%Include qmagnetometer.sip +%Include qorientationsensor.sip +%Include qpressuresensor.sip +%Include qproximitysensor.sip +%Include qsensor.sip +%Include qtapsensor.sip +%Include qtiltsensor.sip +%Include qrotationsensor.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qaccelerometer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qaccelerometer.sip new file mode 100644 index 0000000..53ae7eb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qaccelerometer.sip @@ -0,0 +1,81 @@ +// qaccelerometer.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QAccelerometerReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal x() const; + void setX(qreal x); + qreal y() const; + void setY(qreal y); + qreal z() const; + void setZ(qreal z); +}; + +%End +%If (Qt_5_1_0 -) + +class QAccelerometerFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QAccelerometerReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QAccelerometer : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAccelerometer(QObject *parent /TransferThis/ = 0); + virtual ~QAccelerometer(); + + enum AccelerationMode + { + Combined, + Gravity, + User, + }; + + QAccelerometer::AccelerationMode accelerationMode() const; + void setAccelerationMode(QAccelerometer::AccelerationMode accelerationMode); + QAccelerometerReading *reading() const; + +signals: + void accelerationModeChanged(QAccelerometer::AccelerationMode accelerationMode /ScopesStripped=1/); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qaltimeter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qaltimeter.sip new file mode 100644 index 0000000..a717e5a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qaltimeter.sip @@ -0,0 +1,67 @@ +// qaltimeter.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QAltimeterReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal altitude() const; + void setAltitude(qreal altitude); +}; + +%End +%If (Qt_5_1_0 -) + +class QAltimeterFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QAltimeterReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QAltimeter : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAltimeter(QObject *parent /TransferThis/ = 0); + virtual ~QAltimeter(); + QAltimeterReading *reading() const; + +private: + QAltimeter(const QAltimeter &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qambientlightsensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qambientlightsensor.sip new file mode 100644 index 0000000..f5f4ac6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qambientlightsensor.sip @@ -0,0 +1,74 @@ +// qambientlightsensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QAmbientLightReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum LightLevel + { + Undefined, + Dark, + Twilight, + Light, + Bright, + Sunny, + }; + + QAmbientLightReading::LightLevel lightLevel() const; + void setLightLevel(QAmbientLightReading::LightLevel lightLevel); +}; + +%End +%If (Qt_5_1_0 -) + +class QAmbientLightFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QAmbientLightReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QAmbientLightSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAmbientLightSensor(QObject *parent /TransferThis/ = 0); + virtual ~QAmbientLightSensor(); + QAmbientLightReading *reading() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qambienttemperaturesensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qambienttemperaturesensor.sip new file mode 100644 index 0000000..aec8830 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qambienttemperaturesensor.sip @@ -0,0 +1,67 @@ +// qambienttemperaturesensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QAmbientTemperatureReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal temperature() const; + void setTemperature(qreal temperature); +}; + +%End +%If (Qt_5_1_0 -) + +class QAmbientTemperatureFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QAmbientTemperatureReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QAmbientTemperatureSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAmbientTemperatureSensor(QObject *parent /TransferThis/ = 0); + virtual ~QAmbientTemperatureSensor(); + QAmbientTemperatureReading *reading() const; + +private: + QAmbientTemperatureSensor(const QAmbientTemperatureSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qcompass.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qcompass.sip new file mode 100644 index 0000000..8653278 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qcompass.sip @@ -0,0 +1,69 @@ +// qcompass.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QCompassReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal azimuth() const; + void setAzimuth(qreal azimuth); + qreal calibrationLevel() const; + void setCalibrationLevel(qreal calibrationLevel); +}; + +%End +%If (Qt_5_1_0 -) + +class QCompassFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QCompassReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QCompass : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QCompass(QObject *parent /TransferThis/ = 0); + virtual ~QCompass(); + QCompassReading *reading() const; + +private: + QCompass(const QCompass &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qdistancesensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qdistancesensor.sip new file mode 100644 index 0000000..e7ceec0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qdistancesensor.sip @@ -0,0 +1,67 @@ +// qdistancesensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QDistanceReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal distance() const; + void setDistance(qreal distance); +}; + +%End +%If (Qt_5_4_0 -) + +class QDistanceFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QDistanceReading *reading) = 0; +}; + +%End +%If (Qt_5_4_0 -) + +class QDistanceSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QDistanceSensor(QObject *parent /TransferThis/ = 0); + virtual ~QDistanceSensor(); + QDistanceReading *reading() const; + +private: + QDistanceSensor(const QDistanceSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qgyroscope.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qgyroscope.sip new file mode 100644 index 0000000..9f46bc8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qgyroscope.sip @@ -0,0 +1,71 @@ +// qgyroscope.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QGyroscopeReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal x() const; + void setX(qreal x); + qreal y() const; + void setY(qreal y); + qreal z() const; + void setZ(qreal z); +}; + +%End +%If (Qt_5_1_0 -) + +class QGyroscopeFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QGyroscopeReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QGyroscope : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGyroscope(QObject *parent /TransferThis/ = 0); + virtual ~QGyroscope(); + QGyroscopeReading *reading() const; + +private: + QGyroscope(const QGyroscope &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qholstersensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qholstersensor.sip new file mode 100644 index 0000000..0d07930 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qholstersensor.sip @@ -0,0 +1,67 @@ +// qholstersensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QHolsterReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + bool holstered() const; + void setHolstered(bool holstered); +}; + +%End +%If (Qt_5_1_0 -) + +class QHolsterFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QHolsterReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QHolsterSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QHolsterSensor(QObject *parent /TransferThis/ = 0); + virtual ~QHolsterSensor(); + QHolsterReading *reading() const; + +private: + QHolsterSensor(const QHolsterSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qhumiditysensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qhumiditysensor.sip new file mode 100644 index 0000000..a4965c3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qhumiditysensor.sip @@ -0,0 +1,66 @@ +// qhumiditysensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_9_0 -) + +class QHumidityReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal relativeHumidity() const; + void setRelativeHumidity(qreal percent); + qreal absoluteHumidity() const; + void setAbsoluteHumidity(qreal value); +}; + +%End +%If (Qt_5_9_0 -) + +class QHumidityFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QHumidityReading *reading) = 0; +}; + +%End +%If (Qt_5_9_0 -) + +class QHumiditySensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QHumiditySensor(QObject *parent /TransferThis/ = 0); + virtual ~QHumiditySensor(); + QHumidityReading *reading() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qirproximitysensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qirproximitysensor.sip new file mode 100644 index 0000000..6a2e546 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qirproximitysensor.sip @@ -0,0 +1,67 @@ +// qirproximitysensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QIRProximityReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal reflectance() const; + void setReflectance(qreal reflectance); +}; + +%End +%If (Qt_5_1_0 -) + +class QIRProximityFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QIRProximityReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QIRProximitySensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QIRProximitySensor(QObject *parent /TransferThis/ = 0); + virtual ~QIRProximitySensor(); + QIRProximityReading *reading() const; + +private: + QIRProximitySensor(const QIRProximitySensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qlidsensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qlidsensor.sip new file mode 100644 index 0000000..3dff41e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qlidsensor.sip @@ -0,0 +1,70 @@ +// qlidsensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_9_0 -) + +class QLidReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + bool backLidClosed() const; + void setBackLidClosed(bool closed); + bool frontLidClosed() const; + void setFrontLidClosed(bool closed); + +signals: + void backLidChanged(bool closed); + void frontLidChanged(bool closed); +}; + +%End +%If (Qt_5_9_0 -) + +class QLidFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QLidReading *reading) = 0; +}; + +%End +%If (Qt_5_9_0 -) + +class QLidSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QLidSensor(QObject *parent /TransferThis/ = 0); + virtual ~QLidSensor(); + QLidReading *reading() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qlightsensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qlightsensor.sip new file mode 100644 index 0000000..f70801f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qlightsensor.sip @@ -0,0 +1,72 @@ +// qlightsensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QLightReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal lux() const; + void setLux(qreal lux); +}; + +%End +%If (Qt_5_1_0 -) + +class QLightFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QLightReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QLightSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QLightSensor(QObject *parent /TransferThis/ = 0); + virtual ~QLightSensor(); + QLightReading *reading() const; + qreal fieldOfView() const; + void setFieldOfView(qreal fieldOfView); + +signals: + void fieldOfViewChanged(qreal fieldOfView); + +private: + QLightSensor(const QLightSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qmagnetometer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qmagnetometer.sip new file mode 100644 index 0000000..e163213 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qmagnetometer.sip @@ -0,0 +1,78 @@ +// qmagnetometer.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QMagnetometerReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal x() const; + void setX(qreal x); + qreal y() const; + void setY(qreal y); + qreal z() const; + void setZ(qreal z); + qreal calibrationLevel() const; + void setCalibrationLevel(qreal calibrationLevel); +}; + +%End +%If (Qt_5_1_0 -) + +class QMagnetometerFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QMagnetometerReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QMagnetometer : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QMagnetometer(QObject *parent /TransferThis/ = 0); + virtual ~QMagnetometer(); + QMagnetometerReading *reading() const; + bool returnGeoValues() const; + void setReturnGeoValues(bool returnGeoValues); + +signals: + void returnGeoValuesChanged(bool returnGeoValues); + +private: + QMagnetometer(const QMagnetometer &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qorientationsensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qorientationsensor.sip new file mode 100644 index 0000000..71c1e3b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qorientationsensor.sip @@ -0,0 +1,78 @@ +// qorientationsensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QOrientationReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum Orientation + { + Undefined, + TopUp, + TopDown, + LeftUp, + RightUp, + FaceUp, + FaceDown, + }; + + QOrientationReading::Orientation orientation() const; + void setOrientation(QOrientationReading::Orientation orientation); +}; + +%End +%If (Qt_5_1_0 -) + +class QOrientationFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QOrientationReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QOrientationSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QOrientationSensor(QObject *parent /TransferThis/ = 0); + virtual ~QOrientationSensor(); + QOrientationReading *reading() const; + +private: + QOrientationSensor(const QOrientationSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qpressuresensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qpressuresensor.sip new file mode 100644 index 0000000..7f94f20 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qpressuresensor.sip @@ -0,0 +1,73 @@ +// qpressuresensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QPressureReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal pressure() const; + void setPressure(qreal pressure); +%If (Qt_5_2_0 -) + qreal temperature() const; +%End +%If (Qt_5_2_0 -) + void setTemperature(qreal temperature); +%End +}; + +%End +%If (Qt_5_1_0 -) + +class QPressureFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QPressureReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QPressureSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPressureSensor(QObject *parent /TransferThis/ = 0); + virtual ~QPressureSensor(); + QPressureReading *reading() const; + +private: + QPressureSensor(const QPressureSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qproximitysensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qproximitysensor.sip new file mode 100644 index 0000000..bbf7325 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qproximitysensor.sip @@ -0,0 +1,67 @@ +// qproximitysensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QProximityReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + bool close() const; + void setClose(bool close); +}; + +%End +%If (Qt_5_1_0 -) + +class QProximityFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QProximityReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QProximitySensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QProximitySensor(QObject *parent /TransferThis/ = 0); + virtual ~QProximitySensor(); + QProximityReading *reading() const; + +private: + QProximitySensor(const QProximitySensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qrotationsensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qrotationsensor.sip new file mode 100644 index 0000000..6a41df6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qrotationsensor.sip @@ -0,0 +1,74 @@ +// qrotationsensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QRotationReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal x() const; + qreal y() const; + qreal z() const; + void setFromEuler(qreal x, qreal y, qreal z); +}; + +%End +%If (Qt_5_1_0 -) + +class QRotationFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QRotationReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QRotationSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QRotationSensor(QObject *parent /TransferThis/ = 0); + virtual ~QRotationSensor(); + QRotationReading *reading() const; + bool hasZ() const; + void setHasZ(bool hasZ); + +signals: + void hasZChanged(bool hasZ); + +private: + QRotationSensor(const QRotationSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qsensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qsensor.sip new file mode 100644 index 0000000..2f2872c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qsensor.sip @@ -0,0 +1,265 @@ +// qsensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) +typedef quint64 qtimestamp; +%End +%If (Qt_5_1_0 -) +typedef QList> qrangelist; +%End +%If (Qt_5_1_0 -) + +struct qoutputrange +{ +%TypeHeaderCode +#include +%End + + qreal minimum; + qreal maximum; + qreal accuracy; +}; + +%End +%If (Qt_5_1_0 -) +typedef QList qoutputrangelist; +%End +%If (Qt_5_1_0 -) + +class QSensorReading : public QObject /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QSensorReading(); + quint64 timestamp() const; + void setTimestamp(quint64 timestamp); + int valueCount() const; + QVariant value(int index) const; +}; + +%End +%If (Qt_5_1_0 -) + +class QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QSensorReading *reading) = 0; + +protected: + QSensorFilter(); + virtual ~QSensorFilter(); +}; + +%End +%If (Qt_5_1_0 -) + +class QSensor : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QSensor, &sipType_QSensor, 2, 1}, + {sipName_QSensorReading, &sipType_QSensorReading, 21, -1}, + {sipName_QAccelerometer, &sipType_QAccelerometer, -1, 3}, + {sipName_QAltimeter, &sipType_QAltimeter, -1, 4}, + {sipName_QAmbientLightSensor, &sipType_QAmbientLightSensor, -1, 5}, + {sipName_QAmbientTemperatureSensor, &sipType_QAmbientTemperatureSensor, -1, 6}, + {sipName_QCompass, &sipType_QCompass, -1, 7}, + #if QT_VERSION >= 0x050400 + {sipName_QDistanceSensor, &sipType_QDistanceSensor, -1, 8}, + #else + {0, 0, -1, 8}, + #endif + {sipName_QGyroscope, &sipType_QGyroscope, -1, 9}, + {sipName_QHolsterSensor, &sipType_QHolsterSensor, -1, 10}, + #if QT_VERSION >= 0x050900 + {sipName_QHumiditySensor, &sipType_QHumiditySensor, -1, 11}, + #else + {0, 0, -1, 11}, + #endif + {sipName_QIRProximitySensor, &sipType_QIRProximitySensor, -1, 12}, + #if QT_VERSION >= 0x050900 + {sipName_QLidSensor, &sipType_QLidSensor, -1, 13}, + #else + {0, 0, -1, 13}, + #endif + {sipName_QLightSensor, &sipType_QLightSensor, -1, 14}, + {sipName_QMagnetometer, &sipType_QMagnetometer, -1, 15}, + {sipName_QOrientationSensor, &sipType_QOrientationSensor, -1, 16}, + {sipName_QPressureSensor, &sipType_QPressureSensor, -1, 17}, + {sipName_QProximitySensor, &sipType_QProximitySensor, -1, 18}, + {sipName_QRotationSensor, &sipType_QRotationSensor, -1, 19}, + {sipName_QTapSensor, &sipType_QTapSensor, -1, 20}, + {sipName_QTiltSensor, &sipType_QTiltSensor, -1, -1}, + {sipName_QAccelerometerReading, &sipType_QAccelerometerReading, -1, 22}, + {sipName_QAltimeterReading, &sipType_QAltimeterReading, -1, 23}, + {sipName_QAmbientLightReading, &sipType_QAmbientLightReading, -1, 24}, + {sipName_QAmbientTemperatureReading, &sipType_QAmbientTemperatureReading, -1, 25}, + {sipName_QCompassReading, &sipType_QCompassReading, -1, 26}, + #if QT_VERSION >= 0x050400 + {sipName_QDistanceReading, &sipType_QDistanceReading, -1, 27}, + #else + {0, 0, -1, 27}, + #endif + {sipName_QGyroscopeReading, &sipType_QGyroscopeReading, -1, 28}, + {sipName_QHolsterReading, &sipType_QHolsterReading, -1, 29}, + #if QT_VERSION >= 0x050900 + {sipName_QHumidityReading, &sipType_QHumidityReading, -1, 30}, + #else + {0, 0, -1, 30}, + #endif + {sipName_QIRProximityReading, &sipType_QIRProximityReading, -1, 31}, + #if QT_VERSION >= 0x050900 + {sipName_QLidReading, &sipType_QLidReading, -1, 32}, + #else + {0, 0, -1, 32}, + #endif + {sipName_QLightReading, &sipType_QLightReading, -1, 33}, + {sipName_QMagnetometerReading, &sipType_QMagnetometerReading, -1, 34}, + {sipName_QOrientationReading, &sipType_QOrientationReading, -1, 35}, + {sipName_QPressureReading, &sipType_QPressureReading, -1, 36}, + {sipName_QProximityReading, &sipType_QProximityReading, -1, 37}, + {sipName_QRotationReading, &sipType_QRotationReading, -1, 38}, + {sipName_QTapReading, &sipType_QTapReading, -1, 39}, + {sipName_QTiltReading, &sipType_QTiltReading, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum Feature + { + Buffering, + AlwaysOn, + GeoValues, + FieldOfView, + AccelerationMode, + SkipDuplicates, + AxesOrientation, +%If (Qt_5_2_0 -) + PressureSensorTemperature, +%End + }; + + enum AxesOrientationMode + { + FixedOrientation, + AutomaticOrientation, + UserOrientation, + }; + + QSensor(const QByteArray &type, QObject *parent /TransferThis/ = 0); + virtual ~QSensor(); + QByteArray identifier() const; + void setIdentifier(const QByteArray &identifier); + QByteArray type() const; + bool connectToBackend(); + bool isConnectedToBackend() const; + bool isBusy() const; + void setActive(bool active); + bool isActive() const; + bool isAlwaysOn() const; + void setAlwaysOn(bool alwaysOn); + bool skipDuplicates() const; + void setSkipDuplicates(bool skipDuplicates); + qrangelist availableDataRates() const; + int dataRate() const; + void setDataRate(int rate); + qoutputrangelist outputRanges() const; + int outputRange() const; + void setOutputRange(int index); + QString description() const; + int error() const; + void addFilter(QSensorFilter *filter); + void removeFilter(QSensorFilter *filter); + QList filters() const; + QSensorReading *reading() const; + static QList sensorTypes(); + static QList sensorsForType(const QByteArray &type); + static QByteArray defaultSensorForType(const QByteArray &type); + bool isFeatureSupported(QSensor::Feature feature) const; + QSensor::AxesOrientationMode axesOrientationMode() const; + void setAxesOrientationMode(QSensor::AxesOrientationMode axesOrientationMode); + int currentOrientation() const; + void setCurrentOrientation(int currentOrientation); + int userOrientation() const; + void setUserOrientation(int userOrientation); + int maxBufferSize() const; + void setMaxBufferSize(int maxBufferSize); + int efficientBufferSize() const; + void setEfficientBufferSize(int efficientBufferSize); + int bufferSize() const; + void setBufferSize(int bufferSize); + +public slots: + bool start(); + void stop(); + +signals: + void busyChanged(); + void activeChanged(); + void readingChanged(); + void sensorError(int error); + void availableSensorsChanged(); + void alwaysOnChanged(); + void dataRateChanged(); + void skipDuplicatesChanged(bool skipDuplicates); + void axesOrientationModeChanged(QSensor::AxesOrientationMode axesOrientationMode /ScopesStripped=1/); + void currentOrientationChanged(int currentOrientation); + void userOrientationChanged(int userOrientation); + void maxBufferSizeChanged(int maxBufferSize); + void efficientBufferSizeChanged(int efficientBufferSize); + void bufferSizeChanged(int bufferSize); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qtapsensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qtapsensor.sip new file mode 100644 index 0000000..8de2553 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qtapsensor.sip @@ -0,0 +1,91 @@ +// qtapsensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QTapReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum TapDirection + { + Undefined, + X, + Y, + Z, + X_Pos, + Y_Pos, + Z_Pos, + X_Neg, + Y_Neg, + Z_Neg, + X_Both, + Y_Both, + Z_Both, + }; + + QTapReading::TapDirection tapDirection() const; + void setTapDirection(QTapReading::TapDirection tapDirection); + bool isDoubleTap() const; + void setDoubleTap(bool doubleTap); +}; + +%End +%If (Qt_5_1_0 -) + +class QTapFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QTapReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QTapSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTapSensor(QObject *parent /TransferThis/ = 0); + virtual ~QTapSensor(); + QTapReading *reading() const; + bool returnDoubleTapEvents() const; + void setReturnDoubleTapEvents(bool returnDoubleTapEvents); + +signals: + void returnDoubleTapEventsChanged(bool returnDoubleTapEvents); + +private: + QTapSensor(const QTapSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qtiltsensor.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qtiltsensor.sip new file mode 100644 index 0000000..f05766f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSensors/qtiltsensor.sip @@ -0,0 +1,70 @@ +// qtiltsensor.sip generated by MetaSIP +// +// This file is part of the QtSensors Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QTiltReading : public QSensorReading /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + qreal yRotation() const; + void setYRotation(qreal y); + qreal xRotation() const; + void setXRotation(qreal x); +}; + +%End +%If (Qt_5_1_0 -) + +class QTiltFilter : public QSensorFilter +{ +%TypeHeaderCode +#include +%End + +public: + virtual bool filter(QTiltReading *reading) = 0; +}; + +%End +%If (Qt_5_1_0 -) + +class QTiltSensor : public QSensor +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTiltSensor(QObject *parent /TransferThis/ = 0); + virtual ~QTiltSensor(); + QTiltReading *reading() const; + void calibrate(); + +private: + QTiltSensor(const QTiltSensor &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/QtSerialPort.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/QtSerialPort.toml new file mode 100644 index 0000000..b0b99f5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/QtSerialPort.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtSerialPort. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/QtSerialPortmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/QtSerialPortmod.sip new file mode 100644 index 0000000..b1c2af2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/QtSerialPortmod.sip @@ -0,0 +1,49 @@ +// QtSerialPortmod.sip generated by MetaSIP +// +// This file is part of the QtSerialPort Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtSerialPort, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qserialport.sip +%Include qserialportinfo.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/qserialport.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/qserialport.sip new file mode 100644 index 0000000..fd219b0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/qserialport.sip @@ -0,0 +1,340 @@ +// qserialport.sip generated by MetaSIP +// +// This file is part of the QtSerialPort Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QSerialPort : public QIODevice +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QSerialPort, &sipType_QSerialPort, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum Direction + { + Input, + Output, + AllDirections, + }; + + typedef QFlags Directions; + + enum BaudRate + { + Baud1200, + Baud2400, + Baud4800, + Baud9600, + Baud19200, + Baud38400, + Baud57600, + Baud115200, + UnknownBaud, + }; + + enum DataBits + { + Data5, + Data6, + Data7, + Data8, + UnknownDataBits, + }; + + enum Parity + { + NoParity, + EvenParity, + OddParity, + SpaceParity, + MarkParity, + UnknownParity, + }; + + enum StopBits + { + OneStop, + OneAndHalfStop, + TwoStop, + UnknownStopBits, + }; + + enum FlowControl + { + NoFlowControl, + HardwareControl, + SoftwareControl, + UnknownFlowControl, + }; + + enum PinoutSignal + { + NoSignal, + TransmittedDataSignal, + ReceivedDataSignal, + DataTerminalReadySignal, + DataCarrierDetectSignal, + DataSetReadySignal, + RingIndicatorSignal, + RequestToSendSignal, + ClearToSendSignal, + SecondaryTransmittedDataSignal, + SecondaryReceivedDataSignal, + }; + + typedef QFlags PinoutSignals; + + enum DataErrorPolicy + { + SkipPolicy, + PassZeroPolicy, + IgnorePolicy, + StopReceivingPolicy, + UnknownPolicy, + }; + + enum SerialPortError + { + NoError, + DeviceNotFoundError, + PermissionError, + OpenError, + ParityError, + FramingError, + BreakConditionError, + WriteError, + ReadError, + ResourceError, + UnsupportedOperationError, +%If (Qt_5_2_0 -) + TimeoutError, +%End +%If (Qt_5_2_0 -) + NotOpenError, +%End + UnknownError, + }; + + explicit QSerialPort(QObject *parent /TransferThis/ = 0); + QSerialPort(const QString &name, QObject *parent /TransferThis/ = 0); + QSerialPort(const QSerialPortInfo &info, QObject *parent /TransferThis/ = 0); + virtual ~QSerialPort(); + void setPortName(const QString &name); + QString portName() const; + void setPort(const QSerialPortInfo &info); + virtual bool open(QIODevice::OpenMode mode); + virtual void close() /ReleaseGIL/; + void setSettingsRestoredOnClose(bool restore); + bool settingsRestoredOnClose() const; + bool setBaudRate(qint32 baudRate, QSerialPort::Directions dir = QSerialPort::AllDirections); + qint32 baudRate(QSerialPort::Directions dir = QSerialPort::AllDirections) const; + bool setDataBits(QSerialPort::DataBits dataBits); + QSerialPort::DataBits dataBits() const; + bool setParity(QSerialPort::Parity parity); + QSerialPort::Parity parity() const; + bool setStopBits(QSerialPort::StopBits stopBits); + QSerialPort::StopBits stopBits() const; + bool setFlowControl(QSerialPort::FlowControl flow); + QSerialPort::FlowControl flowControl() const; + bool setDataTerminalReady(bool set); + bool isDataTerminalReady(); + bool setRequestToSend(bool set); + bool isRequestToSend(); + QSerialPort::PinoutSignals pinoutSignals(); + bool flush() /ReleaseGIL/; + bool clear(QSerialPort::Directions dir = QSerialPort::AllDirections); + virtual bool atEnd() const; + bool setDataErrorPolicy(QSerialPort::DataErrorPolicy policy = QSerialPort::IgnorePolicy); + QSerialPort::DataErrorPolicy dataErrorPolicy() const; + QSerialPort::SerialPortError error() const; + void clearError(); + qint64 readBufferSize() const; + void setReadBufferSize(qint64 size); + virtual bool isSequential() const; + virtual qint64 bytesAvailable() const; + virtual qint64 bytesToWrite() const; + virtual bool canReadLine() const; +%If (- Qt_5_11_0) + virtual bool waitForReadyRead(int msecs) /ReleaseGIL/; +%End +%If (Qt_5_11_0 -) + virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/; +%End +%If (- Qt_5_11_0) + virtual bool waitForBytesWritten(int msecs) /ReleaseGIL/; +%End +%If (Qt_5_11_0 -) + virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/; +%End + bool sendBreak(int duration = 0) /ReleaseGIL/; + bool setBreakEnabled(bool enabled = true); + +signals: + void baudRateChanged(qint32 baudRate, QSerialPort::Directions directions); + void dataBitsChanged(QSerialPort::DataBits dataBits); + void parityChanged(QSerialPort::Parity parity); + void stopBitsChanged(QSerialPort::StopBits stopBits); + void flowControlChanged(QSerialPort::FlowControl flow); + void dataErrorPolicyChanged(QSerialPort::DataErrorPolicy policy); + void dataTerminalReadyChanged(bool set); + void requestToSendChanged(bool set); + void error(QSerialPort::SerialPortError serialPortError); + void settingsRestoredOnCloseChanged(bool restore); + +protected: + virtual SIP_PYOBJECT readData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QSerialPort::readData(s, a0) : sipCpp->readData(s, a0); + #else + len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual SIP_PYOBJECT readLineData(qint64 maxlen) /TypeHint="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)]; +%MethodCode + // Return the data read or None if there was an error. + if (a0 < 0) + { + PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative"); + sipIsErr = 1; + } + else + { + char *s = new char[a0]; + qint64 len; + + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + len = sipSelfWasArg ? sipCpp->QSerialPort::readLineData(s, a0) : sipCpp->readLineData(s, a0); + #else + len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0); + #endif + Py_END_ALLOW_THREADS + + if (len < 0) + { + Py_INCREF(Py_None); + sipRes = Py_None; + } + else + { + sipRes = SIPBytes_FromStringAndSize(s, len); + + if (!sipRes) + sipIsErr = 1; + } + + delete[] s; + } +%End + + virtual qint64 writeData(const char *data /Array/, qint64 maxSize /ArraySize/) /ReleaseGIL/; + +public: +%If (Qt_5_2_0 -) +%If (WS_WIN) + void *handle() const; +%End +%End +%If (Qt_5_2_0 -) +%If (WS_X11 || WS_MACX) + int handle() const; +%End +%End +%If (Qt_5_5_0 -) + bool isBreakEnabled() const; +%End + +signals: +%If (Qt_5_5_0 -) + void breakEnabledChanged(bool set); +%End +%If (Qt_5_8_0 -) + void errorOccurred(QSerialPort::SerialPortError error); +%End +}; + +%End +%If (Qt_5_1_0 -) +QFlags operator|(QSerialPort::Direction f1, QFlags f2); +%End +%If (Qt_5_1_0 -) +QFlags operator|(QSerialPort::PinoutSignal f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/qserialportinfo.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/qserialportinfo.sip new file mode 100644 index 0000000..549b8cf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSerialPort/qserialportinfo.sip @@ -0,0 +1,56 @@ +// qserialportinfo.sip generated by MetaSIP +// +// This file is part of the QtSerialPort Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class QSerialPortInfo +{ +%TypeHeaderCode +#include +%End + +public: + QSerialPortInfo(); + explicit QSerialPortInfo(const QSerialPort &port); + explicit QSerialPortInfo(const QString &name); + QSerialPortInfo(const QSerialPortInfo &other); + ~QSerialPortInfo(); + void swap(QSerialPortInfo &other /Constrained/); + QString portName() const; + QString systemLocation() const; + QString description() const; + QString manufacturer() const; + quint16 vendorIdentifier() const; + quint16 productIdentifier() const; + bool hasVendorIdentifier() const; + bool hasProductIdentifier() const; + bool isBusy() const; + bool isValid() const; + static QList standardBaudRates(); + static QList availablePorts(); + bool isNull() const; +%If (Qt_5_3_0 -) + QString serialNumber() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/QtSql.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/QtSql.toml new file mode 100644 index 0000000..a78e965 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/QtSql.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtSql. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/QtSqlmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/QtSqlmod.sip new file mode 100644 index 0000000..afd53f9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/QtSqlmod.sip @@ -0,0 +1,62 @@ +// QtSqlmod.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtSql, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qsql.sip +%Include qsqldatabase.sip +%Include qsqldriver.sip +%Include qsqlerror.sip +%Include qsqlfield.sip +%Include qsqlindex.sip +%Include qsqlquery.sip +%Include qsqlquerymodel.sip +%Include qsqlrecord.sip +%Include qsqlrelationaldelegate.sip +%Include qsqlrelationaltablemodel.sip +%Include qsqlresult.sip +%Include qsqltablemodel.sip +%Include qtsqlglobal.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsql.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsql.sip new file mode 100644 index 0000000..4ba3052 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsql.sip @@ -0,0 +1,67 @@ +// qsql.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (- Qt_5_8_0) + +namespace QSql +{ +%TypeHeaderCode +#include +%End + + enum Location + { + BeforeFirstRow, + AfterLastRow, + }; + + enum ParamTypeFlag + { + In, + Out, + InOut, + Binary, + }; + + typedef QFlags ParamType; + + enum TableType + { + Tables, + SystemTables, + Views, + AllTables, + }; + + enum NumericalPrecisionPolicy + { + LowPrecisionInt32, + LowPrecisionInt64, + LowPrecisionDouble, + HighPrecision, + }; +}; + +%End +%If (- Qt_5_8_0) +QFlags operator|(QSql::ParamTypeFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqldatabase.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqldatabase.sip new file mode 100644 index 0000000..bd0da3c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqldatabase.sip @@ -0,0 +1,97 @@ +// qsqldatabase.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlDriverCreatorBase /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QSqlDriverCreatorBase(); + virtual QSqlDriver *createObject() const = 0 /Factory/; +}; + +class QSqlDatabase +{ +%TypeHeaderCode +#include +%End + +public: + QSqlDatabase(); + QSqlDatabase(const QSqlDatabase &other); + ~QSqlDatabase(); + bool open() /ReleaseGIL/; + bool open(const QString &user, const QString &password) /ReleaseGIL/; + void close(); + bool isOpen() const; + bool isOpenError() const; + QStringList tables(QSql::TableType type = QSql::Tables) const; + QSqlIndex primaryIndex(const QString &tablename) const; + QSqlRecord record(const QString &tablename) const; + QSqlQuery exec(const QString &query = QString()) const /PyName=exec_,ReleaseGIL/; +%If (Py_v3) + QSqlQuery exec(const QString &query = QString()) const /ReleaseGIL/; +%End + QSqlError lastError() const; + bool isValid() const; + bool transaction() /ReleaseGIL/; + bool commit() /ReleaseGIL/; + bool rollback() /ReleaseGIL/; + void setDatabaseName(const QString &name); + void setUserName(const QString &name); + void setPassword(const QString &password); + void setHostName(const QString &host); + void setPort(int p); + void setConnectOptions(const QString &options = QString()); + QString databaseName() const; + QString userName() const; + QString password() const; + QString hostName() const; + QString driverName() const; + int port() const; + QString connectOptions() const; + QString connectionName() const; + QSqlDriver *driver() const; + static QSqlDatabase addDatabase(const QString &type, const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection)); + static QSqlDatabase addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection)); + static QSqlDatabase cloneDatabase(const QSqlDatabase &other, const QString &connectionName); +%If (Qt_5_13_0 -) + static QSqlDatabase cloneDatabase(const QString &other, const QString &connectionName); +%End + static QSqlDatabase database(const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection), bool open = true); + static void removeDatabase(const QString &connectionName); + static bool contains(const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection)); + static QStringList drivers(); + static QStringList connectionNames(); + static void registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator /Transfer/); + static bool isDriverAvailable(const QString &name); + +protected: + explicit QSqlDatabase(const QString &type); + explicit QSqlDatabase(QSqlDriver *driver); + +public: + void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); + QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqldriver.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqldriver.sip new file mode 100644 index 0000000..fbffde4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqldriver.sip @@ -0,0 +1,160 @@ +// qsqldriver.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlDriver : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QSqlQueryModel, &sipType_QSqlQueryModel, 3, 1}, + {sipName_QSqlRelationalDelegate, &sipType_QSqlRelationalDelegate, -1, 2}, + {sipName_QSqlDriver, &sipType_QSqlDriver, -1, -1}, + {sipName_QSqlTableModel, &sipType_QSqlTableModel, 4, -1}, + {sipName_QSqlRelationalTableModel, &sipType_QSqlRelationalTableModel, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum DriverFeature + { + Transactions, + QuerySize, + BLOB, + Unicode, + PreparedQueries, + NamedPlaceholders, + PositionalPlaceholders, + LastInsertId, + BatchOperations, + SimpleLocking, + LowPrecisionNumbers, + EventNotifications, + FinishQuery, + MultipleResultSets, + }; + + enum StatementType + { + WhereStatement, + SelectStatement, + UpdateStatement, + InsertStatement, + DeleteStatement, + }; + + enum IdentifierType + { + FieldName, + TableName, + }; + + explicit QSqlDriver(QObject *parent /TransferThis/ = 0); + virtual ~QSqlDriver(); + virtual bool isOpen() const; + bool isOpenError() const; + virtual bool beginTransaction() /ReleaseGIL/; + virtual bool commitTransaction() /ReleaseGIL/; + virtual bool rollbackTransaction() /ReleaseGIL/; + virtual QStringList tables(QSql::TableType tableType) const; + virtual QSqlIndex primaryIndex(const QString &tableName) const; + virtual QSqlRecord record(const QString &tableName) const; + virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const; + virtual QString escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const; + virtual QString sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const; + QSqlError lastError() const; + virtual QVariant handle() const; + virtual bool hasFeature(QSqlDriver::DriverFeature f) const = 0; + virtual void close() = 0; + virtual QSqlResult *createResult() const = 0 /Factory/; + virtual bool open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString()) = 0 /ReleaseGIL/; + +protected: + virtual void setOpen(bool o); + virtual void setOpenError(bool e); + virtual void setLastError(const QSqlError &e); + +public: + virtual bool subscribeToNotification(const QString &name); + virtual bool unsubscribeFromNotification(const QString &name); + virtual QStringList subscribedToNotifications() const; + + enum NotificationSource + { + UnknownSource, + SelfSource, + OtherSource, + }; + +signals: + void notification(const QString &name); + void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload); + +public: + virtual bool isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const; + virtual QString stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const; + void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); + QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; +%If (Qt_5_4_0 -) + + enum DbmsType + { + UnknownDbms, + MSSqlServer, + MySqlServer, + PostgreSQL, + Oracle, + Sybase, + SQLite, + Interbase, + DB2, + }; + +%End +%If (Qt_5_4_0 -) + QSqlDriver::DbmsType dbmsType() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlerror.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlerror.sip new file mode 100644 index 0000000..7c563f8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlerror.sip @@ -0,0 +1,68 @@ +// qsqlerror.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlError +{ +%TypeHeaderCode +#include +%End + +public: + enum ErrorType + { + NoError, + ConnectionError, + StatementError, + TransactionError, + UnknownError, + }; + +%If (Qt_5_3_0 -) + QSqlError(const QString &driverText = QString(), const QString &databaseText = QString(), QSqlError::ErrorType type = QSqlError::NoError, const QString &errorCode = QString()); +%End +%If (Qt_5_3_0 -) + QSqlError(const QString &driverText, const QString &databaseText, QSqlError::ErrorType type, int number); +%End +%If (- Qt_5_3_0) + QSqlError(const QString &driverText = QString(), const QString &databaseText = QString(), QSqlError::ErrorType type = QSqlError::NoError, int number = -1); +%End + QSqlError(const QSqlError &other); + ~QSqlError(); + QString driverText() const; + void setDriverText(const QString &driverText); + QString databaseText() const; + void setDatabaseText(const QString &databaseText); + QSqlError::ErrorType type() const; + void setType(QSqlError::ErrorType type); + int number() const; + void setNumber(int number); + QString text() const; + bool isValid() const; + bool operator==(const QSqlError &other) const; + bool operator!=(const QSqlError &other) const; +%If (Qt_5_3_0 -) + QString nativeErrorCode() const; +%End +%If (Qt_5_10_0 -) + void swap(QSqlError &other /Constrained/); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlfield.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlfield.sip new file mode 100644 index 0000000..309197d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlfield.sip @@ -0,0 +1,77 @@ +// qsqlfield.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlField +{ +%TypeHeaderCode +#include +%End + +public: + enum RequiredStatus + { + Unknown, + Optional, + Required, + }; + + QSqlField(const QString &fieldName = QString(), QVariant::Type type = QVariant::Invalid); +%If (Qt_5_10_0 -) + QSqlField(const QString &fieldName, QVariant::Type type, const QString &tableName); +%End + QSqlField(const QSqlField &other); + bool operator==(const QSqlField &other) const; + bool operator!=(const QSqlField &other) const; + ~QSqlField(); + void setValue(const QVariant &value); + QVariant value() const; + void setName(const QString &name); + QString name() const; + bool isNull() const; + void setReadOnly(bool readOnly); + bool isReadOnly() const; + void clear(); + QVariant::Type type() const; + bool isAutoValue() const; + void setType(QVariant::Type type); + void setRequiredStatus(QSqlField::RequiredStatus status); + void setRequired(bool required); + void setLength(int fieldLength); + void setPrecision(int precision); + void setDefaultValue(const QVariant &value); + void setSqlType(int type); + void setGenerated(bool gen); + void setAutoValue(bool autoVal); + QSqlField::RequiredStatus requiredStatus() const; + int length() const; + int precision() const; + QVariant defaultValue() const; + int typeID() const; + bool isGenerated() const; + bool isValid() const; +%If (Qt_5_10_0 -) + void setTableName(const QString &tableName); +%End +%If (Qt_5_10_0 -) + QString tableName() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlindex.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlindex.sip new file mode 100644 index 0000000..2b681f7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlindex.sip @@ -0,0 +1,41 @@ +// qsqlindex.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlIndex : public QSqlRecord +{ +%TypeHeaderCode +#include +%End + +public: + QSqlIndex(const QString &cursorName = QString(), const QString &name = QString()); + QSqlIndex(const QSqlIndex &other); + ~QSqlIndex(); + void setCursorName(const QString &cursorName); + QString cursorName() const; + void setName(const QString &name); + QString name() const; + void append(const QSqlField &field); + void append(const QSqlField &field, bool desc); + bool isDescending(int i) const; + void setDescending(int i, bool desc); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlquery.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlquery.sip new file mode 100644 index 0000000..a5df8b8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlquery.sip @@ -0,0 +1,88 @@ +// qsqlquery.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlQuery +{ +%TypeHeaderCode +#include +%End + +public: + enum BatchExecutionMode + { + ValuesAsRows, + ValuesAsColumns, + }; + + explicit QSqlQuery(QSqlResult *r); + QSqlQuery(const QString &query = QString(), QSqlDatabase db = QSqlDatabase()) /ReleaseGIL/; + explicit QSqlQuery(QSqlDatabase db); + QSqlQuery(const QSqlQuery &other); + ~QSqlQuery(); + bool isValid() const; + bool isActive() const; + bool isNull(int field) const; +%If (Qt_5_3_0 -) + bool isNull(const QString &name) const; +%End + int at() const; + QString lastQuery() const; + int numRowsAffected() const; + QSqlError lastError() const; + bool isSelect() const; + int size() const; + const QSqlDriver *driver() const; + const QSqlResult *result() const; + bool isForwardOnly() const; + QSqlRecord record() const; + void setForwardOnly(bool forward); + bool exec(const QString &query) /PyName=exec_,ReleaseGIL/; +%If (Py_v3) + bool exec(const QString &query) /ReleaseGIL/; +%End + QVariant value(int i) const; + QVariant value(const QString &name) const; + bool seek(int index, bool relative = false) /ReleaseGIL/; + bool next() /ReleaseGIL/; + bool previous() /ReleaseGIL/; + bool first() /ReleaseGIL/; + bool last() /ReleaseGIL/; + void clear() /ReleaseGIL/; + bool exec() /PyName=exec_,ReleaseGIL/; +%If (Py_v3) + bool exec() /ReleaseGIL/; +%End + bool execBatch(QSqlQuery::BatchExecutionMode mode = QSqlQuery::ValuesAsRows); + bool prepare(const QString &query) /ReleaseGIL/; + void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType type = QSql::In); + void bindValue(int pos, const QVariant &val, QSql::ParamType type = QSql::In); + void addBindValue(const QVariant &val, QSql::ParamType type = QSql::In); + QVariant boundValue(const QString &placeholder) const; + QVariant boundValue(int pos) const; + QMap boundValues() const; + QString executedQuery() const; + QVariant lastInsertId() const; + void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); + QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; + void finish(); + bool nextResult(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlquerymodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlquerymodel.sip new file mode 100644 index 0000000..5bf282d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlquerymodel.sip @@ -0,0 +1,68 @@ +// qsqlquerymodel.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlQueryModel : public QAbstractTableModel +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSqlQueryModel(QObject *parent /TransferThis/ = 0); + virtual ~QSqlQueryModel(); + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + QSqlRecord record(int row) const; + QSqlRecord record() const; + virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole); + virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + void setQuery(const QSqlQuery &query); + void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase()); + QSqlQuery query() const; + virtual void clear(); + QSqlError lastError() const; + virtual void fetchMore(const QModelIndex &parent = QModelIndex()); + virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const; + +protected: + virtual void queryChange(); + virtual QModelIndex indexInQuery(const QModelIndex &item) const; + void setLastError(const QSqlError &error); + void beginResetModel(); + void endResetModel(); + void beginInsertRows(const QModelIndex &parent, int first, int last); + void endInsertRows(); + void beginRemoveRows(const QModelIndex &parent, int first, int last); + void endRemoveRows(); + void beginInsertColumns(const QModelIndex &parent, int first, int last); + void endInsertColumns(); + void beginRemoveColumns(const QModelIndex &parent, int first, int last); + void endRemoveColumns(); + +public: +%If (Qt_5_10_0 -) + virtual QHash roleNames() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrecord.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrecord.sip new file mode 100644 index 0000000..78529a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrecord.sip @@ -0,0 +1,63 @@ +// qsqlrecord.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlRecord +{ +%TypeHeaderCode +#include +%End + +public: + QSqlRecord(); + QSqlRecord(const QSqlRecord &other); + ~QSqlRecord(); + bool operator==(const QSqlRecord &other) const; + bool operator!=(const QSqlRecord &other) const; + QVariant value(int i) const; + QVariant value(const QString &name) const; + void setValue(int i, const QVariant &val); + void setValue(const QString &name, const QVariant &val); + void setNull(int i); + void setNull(const QString &name); + bool isNull(int i) const; + bool isNull(const QString &name) const; + int indexOf(const QString &name) const; + QString fieldName(int i) const; + QSqlField field(int i) const; + QSqlField field(const QString &name) const; + bool isGenerated(int i) const; + bool isGenerated(const QString &name) const; + void setGenerated(const QString &name, bool generated); + void setGenerated(int i, bool generated); + void append(const QSqlField &field); + void replace(int pos, const QSqlField &field); + void insert(int pos, const QSqlField &field); + void remove(int pos); + bool isEmpty() const; + bool contains(const QString &name) const; + void clear(); + void clearValues(); + int count() const /__len__/; +%If (Qt_5_1_0 -) + QSqlRecord keyValues(const QSqlRecord &keyFields) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrelationaldelegate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrelationaldelegate.sip new file mode 100644 index 0000000..98ade10 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrelationaldelegate.sip @@ -0,0 +1,37 @@ +// qsqlrelationaldelegate.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlRelationalDelegate : public QItemDelegate +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSqlRelationalDelegate(QObject *parent /TransferThis/ = 0); + virtual ~QSqlRelationalDelegate(); + virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/; + virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const; +%If (Qt_5_12_0 -) + virtual void setEditorData(QWidget *editor, const QModelIndex &index) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrelationaltablemodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrelationaltablemodel.sip new file mode 100644 index 0000000..c70462b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlrelationaltablemodel.sip @@ -0,0 +1,75 @@ +// qsqlrelationaltablemodel.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlRelation +{ +%TypeHeaderCode +#include +%End + +public: + QSqlRelation(); + QSqlRelation(const QString &aTableName, const QString &indexCol, const QString &displayCol); + QString tableName() const; + QString indexColumn() const; + QString displayColumn() const; + bool isValid() const; +%If (Qt_5_8_0 -) + void swap(QSqlRelation &other /Constrained/); +%End +}; + +class QSqlRelationalTableModel : public QSqlTableModel +{ +%TypeHeaderCode +#include +%End + +public: + QSqlRelationalTableModel(QObject *parent /TransferThis/ = 0, QSqlDatabase db = QSqlDatabase()); + virtual ~QSqlRelationalTableModel(); + virtual QVariant data(const QModelIndex &item, int role = Qt::ItemDataRole::DisplayRole) const; + virtual bool setData(const QModelIndex &item, const QVariant &value, int role = Qt::ItemDataRole::EditRole); + virtual void clear(); + virtual bool select(); + virtual void setTable(const QString &tableName); + virtual void setRelation(int column, const QSqlRelation &relation); + QSqlRelation relation(int column) const; + virtual QSqlTableModel *relationModel(int column) const; + virtual void revertRow(int row); + virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + +protected: + virtual QString selectStatement() const; + virtual bool updateRowInTable(int row, const QSqlRecord &values); + virtual QString orderByClause() const; + virtual bool insertRowIntoTable(const QSqlRecord &values); + +public: + enum JoinMode + { + InnerJoin, + LeftJoin, + }; + + void setJoinMode(QSqlRelationalTableModel::JoinMode joinMode); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlresult.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlresult.sip new file mode 100644 index 0000000..51ecc4e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqlresult.sip @@ -0,0 +1,90 @@ +// qsqlresult.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlResult /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QSqlResult(); + virtual QVariant handle() const; + +protected: + enum BindingSyntax + { + PositionalBinding, + NamedBinding, + }; + + explicit QSqlResult(const QSqlDriver *db); + int at() const; + QString lastQuery() const; + QSqlError lastError() const; + bool isValid() const; + bool isActive() const; + bool isSelect() const; + bool isForwardOnly() const; + const QSqlDriver *driver() const; + virtual void setAt(int at); + virtual void setActive(bool a); + virtual void setLastError(const QSqlError &e); + virtual void setQuery(const QString &query); + virtual void setSelect(bool s); + virtual void setForwardOnly(bool forward); + virtual bool exec() /PyName=exec_,ReleaseGIL/; +%If (Py_v3) + virtual bool exec() /ReleaseGIL/; +%End + virtual bool prepare(const QString &query) /ReleaseGIL/; + virtual bool savePrepare(const QString &sqlquery); + virtual void bindValue(int pos, const QVariant &val, QSql::ParamType type); + virtual void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType type); + void addBindValue(const QVariant &val, QSql::ParamType type); + QVariant boundValue(const QString &placeholder) const; + QVariant boundValue(int pos) const; + QSql::ParamType bindValueType(const QString &placeholder) const; + QSql::ParamType bindValueType(int pos) const; + int boundValueCount() const; + QVector &boundValues() const; + QString executedQuery() const; + QString boundValueName(int pos) const; + void clear(); + bool hasOutValues() const; + QSqlResult::BindingSyntax bindingSyntax() const; + virtual QVariant data(int i) = 0; + virtual bool isNull(int i) = 0; + virtual bool reset(const QString &sqlquery) = 0; + virtual bool fetch(int i) = 0 /ReleaseGIL/; + virtual bool fetchNext() /ReleaseGIL/; + virtual bool fetchPrevious() /ReleaseGIL/; + virtual bool fetchFirst() = 0 /ReleaseGIL/; + virtual bool fetchLast() = 0 /ReleaseGIL/; + virtual int size() = 0; + virtual int numRowsAffected() = 0; + virtual QSqlRecord record() const; + virtual QVariant lastInsertId() const; + +private: + QSqlResult(const QSqlResult &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqltablemodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqltablemodel.sip new file mode 100644 index 0000000..efc3017 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qsqltablemodel.sip @@ -0,0 +1,97 @@ +// qsqltablemodel.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSqlTableModel : public QSqlQueryModel +{ +%TypeHeaderCode +#include +%End + +public: + enum EditStrategy + { + OnFieldChange, + OnRowChange, + OnManualSubmit, + }; + + QSqlTableModel(QObject *parent /TransferThis/ = 0, QSqlDatabase db = QSqlDatabase()); + virtual ~QSqlTableModel(); + virtual bool select(); + virtual void setTable(const QString &tableName); + QString tableName() const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual QVariant data(const QModelIndex &idx, int role = Qt::ItemDataRole::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::ItemDataRole::EditRole); + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::ItemDataRole::DisplayRole) const; + bool isDirty(const QModelIndex &index) const; + bool isDirty() const; + virtual void clear(); + virtual void setEditStrategy(QSqlTableModel::EditStrategy strategy); + QSqlTableModel::EditStrategy editStrategy() const; + QSqlIndex primaryKey() const; + QSqlDatabase database() const; + int fieldIndex(const QString &fieldName) const; + virtual void sort(int column, Qt::SortOrder order); + virtual void setSort(int column, Qt::SortOrder order); + QString filter() const; + virtual void setFilter(const QString &filter); + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + bool insertRecord(int row, const QSqlRecord &record); + bool setRecord(int row, const QSqlRecord &record); + virtual void revertRow(int row); + +public slots: + virtual bool submit(); + virtual void revert(); + bool submitAll(); + void revertAll(); + +signals: + void primeInsert(int row, QSqlRecord &record); + void beforeInsert(QSqlRecord &record); + void beforeUpdate(int row, QSqlRecord &record); + void beforeDelete(int row); + +protected: + virtual bool updateRowInTable(int row, const QSqlRecord &values); + virtual bool insertRowIntoTable(const QSqlRecord &values); + virtual bool deleteRowFromTable(int row); + virtual QString orderByClause() const; + virtual QString selectStatement() const; + void setPrimaryKey(const QSqlIndex &key); + void setQuery(const QSqlQuery &query); + virtual QModelIndex indexInQuery(const QModelIndex &item) const; + +public: + virtual bool selectRow(int row); + QSqlRecord record() const; + QSqlRecord record(int row) const; + +protected: +%If (Qt_5_1_0 -) + QSqlRecord primaryValues(int row) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qtsqlglobal.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qtsqlglobal.sip new file mode 100644 index 0000000..456db85 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSql/qtsqlglobal.sip @@ -0,0 +1,67 @@ +// qtsqlglobal.sip generated by MetaSIP +// +// This file is part of the QtSql Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_8_0 -) + +namespace QSql +{ +%TypeHeaderCode +#include +%End + + enum Location + { + BeforeFirstRow, + AfterLastRow, + }; + + enum ParamTypeFlag + { + In, + Out, + InOut, + Binary, + }; + + typedef QFlags ParamType; + + enum TableType + { + Tables, + SystemTables, + Views, + AllTables, + }; + + enum NumericalPrecisionPolicy + { + LowPrecisionInt32, + LowPrecisionInt64, + LowPrecisionDouble, + HighPrecision, + }; +}; + +%End +%If (Qt_5_8_0 -) +QFlags operator|(QSql::ParamTypeFlag f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/QtSvg.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/QtSvg.toml new file mode 100644 index 0000000..6a82cf8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/QtSvg.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtSvg. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/QtSvgmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/QtSvgmod.sip new file mode 100644 index 0000000..5b5e4f0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/QtSvgmod.sip @@ -0,0 +1,53 @@ +// QtSvgmod.sip generated by MetaSIP +// +// This file is part of the QtSvg Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtSvg, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qgraphicssvgitem.sip +%Include qsvggenerator.sip +%Include qsvgrenderer.sip +%Include qsvgwidget.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qgraphicssvgitem.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qgraphicssvgitem.sip new file mode 100644 index 0000000..7ed5f5a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qgraphicssvgitem.sip @@ -0,0 +1,57 @@ +// qgraphicssvgitem.sip generated by MetaSIP +// +// This file is part of the QtSvg Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsSvgItem : public QGraphicsObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + if (sipCpp->type() == 13) + { + // Switch to the QObject convertor. + *sipCppRet = static_cast(sipCpp); + sipType = sipType_QObject; + } + else + sipType = 0; +%End + +public: + QGraphicsSvgItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsSvgItem(const QString &fileName, QGraphicsItem *parent /TransferThis/ = 0); + void setSharedRenderer(QSvgRenderer *renderer /KeepReference/); + QSvgRenderer *renderer() const; + void setElementId(const QString &id); + QString elementId() const; + void setMaximumCacheSize(const QSize &size); + QSize maximumCacheSize() const; + virtual QRectF boundingRect() const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual int type() const; +}; + +%ModuleCode +// This is needed by the %ConvertToSubClassCode. +#include +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvggenerator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvggenerator.sip new file mode 100644 index 0000000..e11330a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvggenerator.sip @@ -0,0 +1,52 @@ +// qsvggenerator.sip generated by MetaSIP +// +// This file is part of the QtSvg Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSvgGenerator : public QPaintDevice +{ +%TypeHeaderCode +#include +%End + +public: + QSvgGenerator(); + virtual ~QSvgGenerator(); + QSize size() const; + void setSize(const QSize &size); + QString fileName() const; + void setFileName(const QString &fileName); + QIODevice *outputDevice() const; + void setOutputDevice(QIODevice *outputDevice); + int resolution() const; + void setResolution(int resolution); + QString title() const; + void setTitle(const QString &title); + QString description() const; + void setDescription(const QString &description); + QRect viewBox() const; + QRectF viewBoxF() const; + void setViewBox(const QRect &viewBox); + void setViewBox(const QRectF &viewBox); + +protected: + virtual QPaintEngine *paintEngine() const; + virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvgrenderer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvgrenderer.sip new file mode 100644 index 0000000..6424320 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvgrenderer.sip @@ -0,0 +1,101 @@ +// qsvgrenderer.sip generated by MetaSIP +// +// This file is part of the QtSvg Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSvgRenderer : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QSvgRenderer, &sipType_QSvgRenderer, -1, 1}, + {sipName_QSvgWidget, &sipType_QSvgWidget, -1, 2}, + {sipName_QGraphicsSvgItem, &sipType_QGraphicsSvgItem, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + QSvgRenderer(QObject *parent /TransferThis/ = 0); + QSvgRenderer(const QString &filename, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QSvgRenderer(const QByteArray &contents, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + QSvgRenderer(QXmlStreamReader *contents, QObject *parent /TransferThis/ = 0) /ReleaseGIL/; + virtual ~QSvgRenderer(); + bool isValid() const; + QSize defaultSize() const; + bool elementExists(const QString &id) const; + QRect viewBox() const; + QRectF viewBoxF() const; + void setViewBox(const QRect &viewbox); + void setViewBox(const QRectF &viewbox); + bool animated() const; + QRectF boundsOnElement(const QString &id) const; + int framesPerSecond() const; + void setFramesPerSecond(int num); + int currentFrame() const; + void setCurrentFrame(int); + int animationDuration() const; + +public slots: + bool load(const QString &filename) /ReleaseGIL/; + bool load(const QByteArray &contents) /ReleaseGIL/; + bool load(QXmlStreamReader *contents) /ReleaseGIL/; + void render(QPainter *p) /ReleaseGIL/; + void render(QPainter *p, const QRectF &bounds) /ReleaseGIL/; + void render(QPainter *painter, const QString &elementId, const QRectF &bounds = QRectF()) /ReleaseGIL/; + +signals: + void repaintNeeded(); + +public: +%If (Qt_5_15_0 -) + Qt::AspectRatioMode aspectRatioMode() const; +%End +%If (Qt_5_15_0 -) + void setAspectRatioMode(Qt::AspectRatioMode mode); +%End +%If (Qt_5_15_0 -) + QTransform transformForElement(const QString &id) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvgwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvgwidget.sip new file mode 100644 index 0000000..8f6486d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtSvg/qsvgwidget.sip @@ -0,0 +1,42 @@ +// qsvgwidget.sip generated by MetaSIP +// +// This file is part of the QtSvg Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSvgWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QSvgWidget(QWidget *parent /TransferThis/ = 0); + QSvgWidget(const QString &file, QWidget *parent /TransferThis/ = 0); + virtual ~QSvgWidget(); + QSvgRenderer *renderer() const; + virtual QSize sizeHint() const; + +public slots: + void load(const QString &file); + void load(const QByteArray &contents); + +protected: + virtual void paintEvent(QPaintEvent *event); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/QtTest.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/QtTest.toml new file mode 100644 index 0000000..ed31086 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/QtTest.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtTest. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/QtTestmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/QtTestmod.sip new file mode 100644 index 0000000..6fa9fc8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/QtTestmod.sip @@ -0,0 +1,55 @@ +// QtTestmod.sip generated by MetaSIP +// +// This file is part of the QtTest Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtTest, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtWidgets/QtWidgetsmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qabstractitemmodeltester.sip +%Include qsignalspy.sip +%Include qtestcase.sip +%Include qtestkeyboard.sip +%Include qtestmouse.sip +%Include qtestsystem.sip +%Include qtesttouch.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qabstractitemmodeltester.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qabstractitemmodeltester.sip new file mode 100644 index 0000000..643376f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qabstractitemmodeltester.sip @@ -0,0 +1,48 @@ +// qabstractitemmodeltester.sip generated by MetaSIP +// +// This file is part of the QtTest Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_11_0 -) + +class QAbstractItemModelTester : public QObject +{ +%TypeHeaderCode +// Qt v5.11.0 needs this. +#include + +#include +%End + +public: + enum class FailureReportingMode + { + QtTest, + Warning, + Fatal, + }; + + QAbstractItemModelTester(QAbstractItemModel *model /KeepReference=1/, QObject *parent /TransferThis/ = 0); + QAbstractItemModelTester(QAbstractItemModel *model /KeepReference=1/, QAbstractItemModelTester::FailureReportingMode mode, QObject *parent /TransferThis/ = 0); + QAbstractItemModel *model() const; + QAbstractItemModelTester::FailureReportingMode failureReportingMode() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qsignalspy.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qsignalspy.sip new file mode 100644 index 0000000..b48b940 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qsignalspy.sip @@ -0,0 +1,105 @@ +// qsignalspy.sip generated by MetaSIP +// +// This file is part of the QtTest Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSignalSpy : QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + sipType = (sipCpp->inherits("QSignalSpy") ? sipType_QSignalSpy : 0); + + #if QT_VERSION >= 0x050b00 + if (!sipType && sipCpp->inherits("QAbstractItemModelTester")) + sipType = sipType_QAbstractItemModelTester; + #endif +%End + +public: + QSignalSpy(SIP_PYOBJECT signal /TypeHint="pyqtBoundSignal"/) [(const QObject *obj, const char *aSignal)]; +%MethodCode + QObject *sender; + QByteArray signal_signature; + + if ((sipError = pyqt5_qttest_get_pyqtsignal_parts(a0, &sender, signal_signature)) == sipErrorNone) + sipCpp = new sipQSignalSpy(sender, signal_signature.constData()); + else if (sipError == sipErrorContinue) + sipError = sipBadCallableArg(0, a0); +%End + +%If (Qt_5_14_0 -) + QSignalSpy(const QObject *obj, const QMetaMethod &signal); +%End + bool isValid() const; + QByteArray signal() const; + bool wait(int timeout = 5000) /ReleaseGIL/; + int __len__() const; +%MethodCode + sipRes = sipCpp->count(); +%End + + QList __getitem__(int i) const; +%MethodCode + Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count()); + + if (idx < 0) + sipIsErr = 1; + else + sipRes = new QList(sipCpp->at((int)idx)); +%End + + void __setitem__(int i, const QList &value); +%MethodCode + int len = sipCpp->count(); + + if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0) + sipIsErr = 1; + else + (*sipCpp)[a0] = *a1; +%End + + void __delitem__(int i); +%MethodCode + if ((a0 = (int)sipConvertFromSequenceIndex(a0, sipCpp->count())) < 0) + sipIsErr = 1; + else + sipCpp->removeAt(a0); +%End +}; + +%ModuleHeaderCode +// Imports from QtCore. +typedef sipErrorState (*pyqt5_qttest_get_pyqtsignal_parts_t)(PyObject *, QObject **, QByteArray &); +extern pyqt5_qttest_get_pyqtsignal_parts_t pyqt5_qttest_get_pyqtsignal_parts; +%End + +%ModuleCode +// Imports from QtCore. +pyqt5_qttest_get_pyqtsignal_parts_t pyqt5_qttest_get_pyqtsignal_parts; +%End + +%PostInitialisationCode +// Imports from QtCore. +pyqt5_qttest_get_pyqtsignal_parts = (pyqt5_qttest_get_pyqtsignal_parts_t)sipImportSymbol("pyqt5_get_pyqtsignal_parts"); +Q_ASSERT(pyqt5_qttest_get_pyqtsignal_parts); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestcase.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestcase.sip new file mode 100644 index 0000000..93c9272 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestcase.sip @@ -0,0 +1,30 @@ +// qtestcase.sip generated by MetaSIP +// +// This file is part of the QtTest Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QTest +{ +%TypeHeaderCode +#include +%End + + void qSleep(int ms) /ReleaseGIL/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestkeyboard.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestkeyboard.sip new file mode 100644 index 0000000..2d3462e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestkeyboard.sip @@ -0,0 +1,62 @@ +// qtestkeyboard.sip generated by MetaSIP +// +// This file is part of the QtTest Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QTest +{ +%TypeHeaderCode +#include +%End + + enum KeyAction + { + Press, + Release, + Click, +%If (Qt_5_6_0 -) + Shortcut, +%End + }; + + void keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); +%If (Qt_5_10_0 -) + void keySequence(QWidget *widget, const QKeySequence &keySequence); +%End + void keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); + void keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1); +%If (Qt_5_10_0 -) + void keySequence(QWindow *window, const QKeySequence &keySequence); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestmouse.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestmouse.sip new file mode 100644 index 0000000..c29aac7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestmouse.sip @@ -0,0 +1,39 @@ +// qtestmouse.sip generated by MetaSIP +// +// This file is part of the QtTest Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QTest +{ +%TypeHeaderCode +#include +%End + + void mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); + void mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); + void mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1); + void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); + void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); + void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); + void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); + void mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); + void mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1); + void mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestsystem.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestsystem.sip new file mode 100644 index 0000000..fdd3248 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtestsystem.sip @@ -0,0 +1,34 @@ +// qtestsystem.sip generated by MetaSIP +// +// This file is part of the QtTest Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QTest +{ +%TypeHeaderCode +#include +%End + + void qWait(int ms) /ReleaseGIL/; + bool qWaitForWindowActive(QWindow *window, int timeout = 5000) /ReleaseGIL/; + bool qWaitForWindowExposed(QWindow *window, int timeout = 5000) /ReleaseGIL/; + bool qWaitForWindowActive(QWidget *widget, int timeout = 5000) /ReleaseGIL/; + bool qWaitForWindowExposed(QWidget *widget, int timeout = 5000) /ReleaseGIL/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtesttouch.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtesttouch.sip new file mode 100644 index 0000000..27b10ba --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTest/qtesttouch.sip @@ -0,0 +1,62 @@ +// qtesttouch.sip generated by MetaSIP +// +// This file is part of the QtTest Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +namespace QTest +{ +%TypeHeaderCode +#include +%End + + class QTouchEventSequence + { +%TypeHeaderCode +#include +%End + + public: + ~QTouchEventSequence(); + QTest::QTouchEventSequence &press(int touchId, const QPoint &pt, QWindow *window = 0); + QTest::QTouchEventSequence &move(int touchId, const QPoint &pt, QWindow *window = 0); + QTest::QTouchEventSequence &release(int touchId, const QPoint &pt, QWindow *window = 0); + QTest::QTouchEventSequence &stationary(int touchId); + QTest::QTouchEventSequence &press(int touchId, const QPoint &pt, QWidget *widget) [QTest::QTouchEventSequence & (int touchId, const QPoint &pt, QWidget *widget = 0)]; + QTest::QTouchEventSequence &move(int touchId, const QPoint &pt, QWidget *widget) [QTest::QTouchEventSequence & (int touchId, const QPoint &pt, QWidget *widget = 0)]; + QTest::QTouchEventSequence &release(int touchId, const QPoint &pt, QWidget *widget) [QTest::QTouchEventSequence & (int touchId, const QPoint &pt, QWidget *widget = 0)]; + void commit(bool processEvents = true) /ReleaseGIL/; + + private: + QTouchEventSequence(QWidget *widget, QTouchDevice *aDevice, bool autoCommit); + QTouchEventSequence(QWindow *window, QTouchDevice *aDevice, bool autoCommit); + }; + + QTest::QTouchEventSequence touchEvent(QWidget *widget, QTouchDevice *device); +%MethodCode + // Disable auto-committing so that we can copy the instance around. + sipRes = new QTest::QTouchEventSequence(QTest::touchEvent(a0, a1, false)); +%End + + QTest::QTouchEventSequence touchEvent(QWindow *window, QTouchDevice *device); +%MethodCode + // Disable auto-committing so that we can copy the instance around. + sipRes = new QTest::QTouchEventSequence(QTest::touchEvent(a0, a1, false)); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/QtTextToSpeech.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/QtTextToSpeech.toml new file mode 100644 index 0000000..76ce42f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/QtTextToSpeech.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtTextToSpeech. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/QtTextToSpeechmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/QtTextToSpeechmod.sip new file mode 100644 index 0000000..14d5ad8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/QtTextToSpeechmod.sip @@ -0,0 +1,49 @@ +// QtTextToSpeechmod.sip generated by MetaSIP +// +// This file is part of the QtTextToSpeech Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtTextToSpeech, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qtexttospeech.sip +%Include qvoice.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/qtexttospeech.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/qtexttospeech.sip new file mode 100644 index 0000000..5d38bd4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/qtexttospeech.sip @@ -0,0 +1,101 @@ +// qtexttospeech.sip generated by MetaSIP +// +// This file is part of the QtTextToSpeech Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_15_0 -) + +class QTextToSpeech : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QTextToSpeech, &sipType_QTextToSpeech, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + enum State + { + Ready, + Speaking, + Paused, + BackendError, + }; + + explicit QTextToSpeech(QObject *parent /TransferThis/ = 0); + QTextToSpeech(const QString &engine, QObject *parent /TransferThis/ = 0); + QTextToSpeech::State state() const; + QVector availableLocales() const; + QLocale locale() const; + QVoice voice() const; + QVector availableVoices() const; + double rate() const; + double pitch() const; + double volume() const; + static QStringList availableEngines(); + +public slots: + void say(const QString &text); + void stop(); + void pause(); + void resume(); + void setLocale(const QLocale &locale); + void setRate(double rate); + void setPitch(double pitch); + void setVolume(double volume); + void setVoice(const QVoice &voice); + +signals: + void stateChanged(QTextToSpeech::State state); + void localeChanged(const QLocale &locale); + void rateChanged(double rate); + void pitchChanged(double pitch); + void volumeChanged(double volume /Constrained/); + void volumeChanged(int volume); + void voiceChanged(const QVoice &voice); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/qvoice.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/qvoice.sip new file mode 100644 index 0000000..9b051f8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtTextToSpeech/qvoice.sip @@ -0,0 +1,60 @@ +// qvoice.sip generated by MetaSIP +// +// This file is part of the QtTextToSpeech Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_15_0 -) + +class QVoice +{ +%TypeHeaderCode +#include +%End + +public: + enum Gender + { + Male, + Female, + Unknown, + }; + + enum Age + { + Child, + Teenager, + Adult, + Senior, + Other, + }; + + QVoice(); + QVoice(const QVoice &other); + ~QVoice(); + bool operator==(const QVoice &other); + bool operator!=(const QVoice &other); + QString name() const; + QVoice::Gender gender() const; + QVoice::Age age() const; + static QString genderName(QVoice::Gender gender); + static QString ageName(QVoice::Age age); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/QtWebChannel.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/QtWebChannel.toml new file mode 100644 index 0000000..0bacc6e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/QtWebChannel.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtWebChannel. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/QtWebChannelmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/QtWebChannelmod.sip new file mode 100644 index 0000000..562378b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/QtWebChannelmod.sip @@ -0,0 +1,49 @@ +// QtWebChannelmod.sip generated by MetaSIP +// +// This file is part of the QtWebChannel Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtWebChannel, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qwebchannel.sip +%Include qwebchannelabstracttransport.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/qwebchannel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/qwebchannel.sip new file mode 100644 index 0000000..1d60d93 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/qwebchannel.sip @@ -0,0 +1,81 @@ +// qwebchannel.sip generated by MetaSIP +// +// This file is part of the QtWebChannel Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QWebChannel : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QWebChannelAbstractTransport, &sipType_QWebChannelAbstractTransport, -1, 1}, + {sipName_QWebChannel, &sipType_QWebChannel, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + explicit QWebChannel(QObject *parent /TransferThis/ = 0); + virtual ~QWebChannel(); + void registerObjects(const QHash &objects); + QHash registeredObjects() const; + void registerObject(const QString &id, QObject *object); + void deregisterObject(QObject *object); + bool blockUpdates() const; + void setBlockUpdates(bool block); + +signals: + void blockUpdatesChanged(bool block); + +public slots: + void connectTo(QWebChannelAbstractTransport *transport); + void disconnectFrom(QWebChannelAbstractTransport *transport); + +private: + QWebChannel(const QWebChannel &); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/qwebchannelabstracttransport.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/qwebchannelabstracttransport.sip new file mode 100644 index 0000000..1e91609 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebChannel/qwebchannelabstracttransport.sip @@ -0,0 +1,42 @@ +// qwebchannelabstracttransport.sip generated by MetaSIP +// +// This file is part of the QtWebChannel Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) + +class QWebChannelAbstractTransport : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QWebChannelAbstractTransport(QObject *parent /TransferThis/ = 0); + virtual ~QWebChannelAbstractTransport(); + +public slots: + virtual void sendMessage(const QJsonObject &message) = 0; + +signals: + void messageReceived(const QJsonObject &message, QWebChannelAbstractTransport *transport); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/QtWebSockets.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/QtWebSockets.toml new file mode 100644 index 0000000..ba7f303 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/QtWebSockets.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtWebSockets. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/QtWebSocketsmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/QtWebSocketsmod.sip new file mode 100644 index 0000000..2e972b0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/QtWebSocketsmod.sip @@ -0,0 +1,53 @@ +// QtWebSocketsmod.sip generated by MetaSIP +// +// This file is part of the QtWebSockets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtWebSockets, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtNetwork/QtNetworkmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qmaskgenerator.sip +%Include qwebsocket.sip +%Include qwebsocketcorsauthenticator.sip +%Include qwebsocketprotocol.sip +%Include qwebsocketserver.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qmaskgenerator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qmaskgenerator.sip new file mode 100644 index 0000000..ca242c9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qmaskgenerator.sip @@ -0,0 +1,38 @@ +// qmaskgenerator.sip generated by MetaSIP +// +// This file is part of the QtWebSockets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +class QMaskGenerator : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QMaskGenerator(QObject *parent /TransferThis/ = 0); + virtual ~QMaskGenerator(); + virtual bool seed() = 0; + virtual quint32 nextMask() = 0; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocket.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocket.sip new file mode 100644 index 0000000..d723b80 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocket.sip @@ -0,0 +1,172 @@ +// qwebsocket.sip generated by MetaSIP +// +// This file is part of the QtWebSockets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +class QWebSocket : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QWebSocket, &sipType_QWebSocket, -1, 1}, + {sipName_QWebSocketServer, &sipType_QWebSocketServer, -1, 2}, + {sipName_QMaskGenerator, &sipType_QMaskGenerator, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + QWebSocket(const QString &origin = QString(), QWebSocketProtocol::Version version = QWebSocketProtocol::VersionLatest, QObject *parent /TransferThis/ = 0); + virtual ~QWebSocket(); + void abort(); + QAbstractSocket::SocketError error() const; + QString errorString() const; + bool flush() /ReleaseGIL/; + bool isValid() const; + QHostAddress localAddress() const; + quint16 localPort() const; + QAbstractSocket::PauseModes pauseMode() const; + QHostAddress peerAddress() const; + QString peerName() const; + quint16 peerPort() const; + QNetworkProxy proxy() const; + void setProxy(const QNetworkProxy &networkProxy); + void setMaskGenerator(const QMaskGenerator *maskGenerator /KeepReference/); + const QMaskGenerator *maskGenerator() const; + qint64 readBufferSize() const; + void setReadBufferSize(qint64 size); + void resume() /ReleaseGIL/; + void setPauseMode(QAbstractSocket::PauseModes pauseMode); + QAbstractSocket::SocketState state() const; + QWebSocketProtocol::Version version() const; + QString resourceName() const; + QUrl requestUrl() const; + QString origin() const; + QWebSocketProtocol::CloseCode closeCode() const; + QString closeReason() const; + qint64 sendTextMessage(const QString &message) /ReleaseGIL/; + qint64 sendBinaryMessage(const QByteArray &data) /ReleaseGIL/; +%If (PyQt_SSL) + void ignoreSslErrors(const QList &errors); +%End +%If (PyQt_SSL) + void setSslConfiguration(const QSslConfiguration &sslConfiguration); +%End +%If (PyQt_SSL) + QSslConfiguration sslConfiguration() const; +%End +%If (Qt_5_6_0 -) + QNetworkRequest request() const; +%End + +public slots: + void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal, const QString &reason = QString()) /ReleaseGIL/; + void open(const QUrl &url) /ReleaseGIL/; +%If (Qt_5_6_0 -) + void open(const QNetworkRequest &request) /ReleaseGIL/; +%End + void ping(const QByteArray &payload = QByteArray()) /ReleaseGIL/; +%If (PyQt_SSL) + void ignoreSslErrors(); +%End + +signals: + void aboutToClose(); + void connected(); + void disconnected(); + void stateChanged(QAbstractSocket::SocketState state); + void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *pAuthenticator); + void readChannelFinished(); + void textFrameReceived(const QString &frame, bool isLastFrame); + void binaryFrameReceived(const QByteArray &frame, bool isLastFrame); + void textMessageReceived(const QString &message); + void binaryMessageReceived(const QByteArray &message); + void error(QAbstractSocket::SocketError error); + void pong(quint64 elapsedTime, const QByteArray &payload); + void bytesWritten(qint64 bytes); +%If (PyQt_SSL) + void sslErrors(const QList &errors); +%End +%If (Qt_5_8_0 -) +%If (PyQt_SSL) + void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); +%End +%End + +public: +%If (Qt_5_12_0 -) + qint64 bytesToWrite() const; +%End +%If (Qt_5_15_0 -) + void setMaxAllowedIncomingFrameSize(quint64 maxAllowedIncomingFrameSize); +%End +%If (Qt_5_15_0 -) + quint64 maxAllowedIncomingFrameSize() const; +%End +%If (Qt_5_15_0 -) + void setMaxAllowedIncomingMessageSize(quint64 maxAllowedIncomingMessageSize); +%End +%If (Qt_5_15_0 -) + quint64 maxAllowedIncomingMessageSize() const; +%End +%If (Qt_5_15_0 -) + static quint64 maxIncomingMessageSize(); +%End +%If (Qt_5_15_0 -) + static quint64 maxIncomingFrameSize(); +%End +%If (Qt_5_15_0 -) + void setOutgoingFrameSize(quint64 outgoingFrameSize); +%End +%If (Qt_5_15_0 -) + quint64 outgoingFrameSize() const; +%End +%If (Qt_5_15_0 -) + static quint64 maxOutgoingFrameSize(); +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketcorsauthenticator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketcorsauthenticator.sip new file mode 100644 index 0000000..09439c6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketcorsauthenticator.sip @@ -0,0 +1,41 @@ +// qwebsocketcorsauthenticator.sip generated by MetaSIP +// +// This file is part of the QtWebSockets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +class QWebSocketCorsAuthenticator +{ +%TypeHeaderCode +#include +%End + +public: + explicit QWebSocketCorsAuthenticator(const QString &origin); + explicit QWebSocketCorsAuthenticator(const QWebSocketCorsAuthenticator &other); + ~QWebSocketCorsAuthenticator(); + void swap(QWebSocketCorsAuthenticator &other /Constrained/); + QString origin() const; + void setAllowed(bool allowed); + bool allowed() const; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketprotocol.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketprotocol.sip new file mode 100644 index 0000000..107643c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketprotocol.sip @@ -0,0 +1,62 @@ +// qwebsocketprotocol.sip generated by MetaSIP +// +// This file is part of the QtWebSockets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +namespace QWebSocketProtocol +{ +%TypeHeaderCode +#include +%End + + enum Version + { + VersionUnknown, + Version0, + Version4, + Version5, + Version6, + Version7, + Version8, + Version13, + VersionLatest, + }; + + enum CloseCode + { + CloseCodeNormal, + CloseCodeGoingAway, + CloseCodeProtocolError, + CloseCodeDatatypeNotSupported, + CloseCodeReserved1004, + CloseCodeMissingStatusCode, + CloseCodeAbnormalDisconnection, + CloseCodeWrongDatatype, + CloseCodePolicyViolated, + CloseCodeTooMuchData, + CloseCodeMissingExtension, + CloseCodeBadOperation, + CloseCodeTlsHandshakeFailed, + }; +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketserver.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketserver.sip new file mode 100644 index 0000000..e1189d8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWebSockets/qwebsocketserver.sip @@ -0,0 +1,109 @@ +// qwebsocketserver.sip generated by MetaSIP +// +// This file is part of the QtWebSockets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_3_0 -) + +class QWebSocketServer : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum SslMode + { +%If (PyQt_SSL) + SecureMode, +%End + NonSecureMode, + }; + + QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent /TransferThis/ = 0); + virtual ~QWebSocketServer(); + bool listen(const QHostAddress &address = QHostAddress::SpecialAddress::Any, quint16 port = 0); + void close(); + bool isListening() const; + void setMaxPendingConnections(int numConnections); + int maxPendingConnections() const; + quint16 serverPort() const; + QHostAddress serverAddress() const; + QWebSocketServer::SslMode secureMode() const; + bool setSocketDescriptor(int socketDescriptor); + int socketDescriptor() const; + bool hasPendingConnections() const; + virtual QWebSocket *nextPendingConnection() /Factory/; + QWebSocketProtocol::CloseCode error() const; + QString errorString() const; + void pauseAccepting(); + void resumeAccepting(); + void setServerName(const QString &serverName); + QString serverName() const; + void setProxy(const QNetworkProxy &networkProxy); + QNetworkProxy proxy() const; +%If (PyQt_SSL) + void setSslConfiguration(const QSslConfiguration &sslConfiguration); +%End +%If (PyQt_SSL) + QSslConfiguration sslConfiguration() const; +%End + QList supportedVersions() const; +%If (Qt_5_4_0 -) + QUrl serverUrl() const; +%End +%If (Qt_5_9_0 -) + void handleConnection(QTcpSocket *socket) const; +%End + +signals: + void acceptError(QAbstractSocket::SocketError socketError); + void serverError(QWebSocketProtocol::CloseCode closeCode); + void originAuthenticationRequired(QWebSocketCorsAuthenticator *pAuthenticator); + void newConnection(); +%If (PyQt_SSL) + void peerVerifyError(const QSslError &error); +%End +%If (PyQt_SSL) + void sslErrors(const QList &errors); +%End + void closed(); +%If (Qt_5_8_0 -) +%If (PyQt_SSL) + void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); +%End +%End + +public: +%If (Qt_5_12_0 -) + bool setNativeDescriptor(qintptr descriptor); +%End +%If (Qt_5_12_0 -) + qintptr nativeDescriptor() const; +%End +%If (Qt_5_14_0 -) + void setHandshakeTimeout(int msec); +%End +%If (Qt_5_14_0 -) + int handshakeTimeoutMS() const; +%End +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/QtWidgets.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/QtWidgets.toml new file mode 100644 index 0000000..9718dd7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/QtWidgets.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtWidgets. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/QtWidgetsmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/QtWidgetsmod.sip new file mode 100644 index 0000000..2cc5ce7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/QtWidgetsmod.sip @@ -0,0 +1,172 @@ +// QtWidgetsmod.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtWidgets, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qabstractbutton.sip +%Include qabstractitemdelegate.sip +%Include qabstractitemview.sip +%Include qabstractscrollarea.sip +%Include qabstractslider.sip +%Include qabstractspinbox.sip +%Include qaction.sip +%Include qactiongroup.sip +%Include qapplication.sip +%Include qboxlayout.sip +%Include qbuttongroup.sip +%Include qcalendarwidget.sip +%Include qcheckbox.sip +%Include qcolordialog.sip +%Include qcolumnview.sip +%Include qcombobox.sip +%Include qcommandlinkbutton.sip +%Include qcommonstyle.sip +%Include qcompleter.sip +%Include qdatawidgetmapper.sip +%Include qdatetimeedit.sip +%Include qdesktopwidget.sip +%Include qdial.sip +%Include qdialog.sip +%Include qdialogbuttonbox.sip +%Include qdirmodel.sip +%Include qdockwidget.sip +%Include qdrawutil.sip +%Include qerrormessage.sip +%Include qfiledialog.sip +%Include qfileiconprovider.sip +%Include qfilesystemmodel.sip +%Include qfocusframe.sip +%Include qfontcombobox.sip +%Include qfontdialog.sip +%Include qformlayout.sip +%Include qframe.sip +%Include qgesture.sip +%Include qgesturerecognizer.sip +%Include qgraphicsanchorlayout.sip +%Include qgraphicseffect.sip +%Include qgraphicsgridlayout.sip +%Include qgraphicsitem.sip +%Include qgraphicslayout.sip +%Include qgraphicslayoutitem.sip +%Include qgraphicslinearlayout.sip +%Include qgraphicsproxywidget.sip +%Include qgraphicsscene.sip +%Include qgraphicssceneevent.sip +%Include qgraphicstransform.sip +%Include qgraphicsview.sip +%Include qgraphicswidget.sip +%Include qgridlayout.sip +%Include qgroupbox.sip +%Include qheaderview.sip +%Include qinputdialog.sip +%Include qitemdelegate.sip +%Include qitemeditorfactory.sip +%Include qkeyeventtransition.sip +%Include qkeysequenceedit.sip +%Include qlabel.sip +%Include qlayout.sip +%Include qlayoutitem.sip +%Include qlcdnumber.sip +%Include qlineedit.sip +%Include qlistview.sip +%Include qlistwidget.sip +%Include qmainwindow.sip +%Include qmdiarea.sip +%Include qmdisubwindow.sip +%Include qmenu.sip +%Include qmenubar.sip +%Include qmessagebox.sip +%Include qmouseeventtransition.sip +%Include qopenglwidget.sip +%Include qplaintextedit.sip +%Include qprogressbar.sip +%Include qprogressdialog.sip +%Include qproxystyle.sip +%Include qpushbutton.sip +%Include qradiobutton.sip +%Include qrubberband.sip +%Include qscrollarea.sip +%Include qscrollbar.sip +%Include qscroller.sip +%Include qscrollerproperties.sip +%Include qshortcut.sip +%Include qsizegrip.sip +%Include qsizepolicy.sip +%Include qslider.sip +%Include qspinbox.sip +%Include qsplashscreen.sip +%Include qsplitter.sip +%Include qstackedlayout.sip +%Include qstackedwidget.sip +%Include qstatusbar.sip +%Include qstyle.sip +%Include qstyleditemdelegate.sip +%Include qstylefactory.sip +%Include qstyleoption.sip +%Include qstylepainter.sip +%Include qsystemtrayicon.sip +%Include qtabbar.sip +%Include qtableview.sip +%Include qtablewidget.sip +%Include qtabwidget.sip +%Include qtextbrowser.sip +%Include qtextedit.sip +%Include qtoolbar.sip +%Include qtoolbox.sip +%Include qtoolbutton.sip +%Include qtooltip.sip +%Include qtreeview.sip +%Include qtreewidget.sip +%Include qtreewidgetitemiterator.sip +%Include qundogroup.sip +%Include qundostack.sip +%Include qundoview.sip +%Include qwhatsthis.sip +%Include qwidget.sip +%Include qwidgetaction.sip +%Include qwizard.sip +%Include qmaccocoaviewcontainer.sip +%Include qpywidgets_qlist.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractbutton.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractbutton.sip new file mode 100644 index 0000000..90f61a6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractbutton.sip @@ -0,0 +1,82 @@ +// qabstractbutton.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractButton : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractButton(QWidget *parent /TransferThis/ = 0); + virtual ~QAbstractButton(); + void setAutoRepeatDelay(int); + int autoRepeatDelay() const; + void setAutoRepeatInterval(int); + int autoRepeatInterval() const; + void setText(const QString &text); + QString text() const; + void setIcon(const QIcon &icon); + QIcon icon() const; + QSize iconSize() const; + void setShortcut(const QKeySequence &key); + QKeySequence shortcut() const; + void setCheckable(bool); + bool isCheckable() const; + bool isChecked() const; + void setDown(bool); + bool isDown() const; + void setAutoRepeat(bool); + bool autoRepeat() const; + void setAutoExclusive(bool); + bool autoExclusive() const; + QButtonGroup *group() const; + +public slots: + void setIconSize(const QSize &size); + void animateClick(int msecs = 100); + void click(); + void toggle(); + void setChecked(bool); + +signals: + void pressed(); + void released(); + void clicked(bool checked = false); + void toggled(bool checked); + +protected: + virtual void paintEvent(QPaintEvent *e) = 0; + virtual bool hitButton(const QPoint &pos) const; + virtual void checkStateSet(); + virtual void nextCheckState(); + virtual bool event(QEvent *e); + virtual void keyPressEvent(QKeyEvent *e); + virtual void keyReleaseEvent(QKeyEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + virtual void changeEvent(QEvent *e); + virtual void timerEvent(QTimerEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractitemdelegate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractitemdelegate.sip new file mode 100644 index 0000000..c6f8abd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractitemdelegate.sip @@ -0,0 +1,55 @@ +// qabstractitemdelegate.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractItemDelegate : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum EndEditHint + { + NoHint, + EditNextItem, + EditPreviousItem, + SubmitModelCache, + RevertModelCache, + }; + + explicit QAbstractItemDelegate(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractItemDelegate(); + virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const = 0; + virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const = 0; + virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/; + virtual void setEditorData(QWidget *editor, const QModelIndex &index) const; + virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const; + virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; + virtual void destroyEditor(QWidget *editor, const QModelIndex &index) const; + virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index); + virtual bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index); + +signals: + void commitData(QWidget *editor); + void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = QAbstractItemDelegate::NoHint); + void sizeHintChanged(const QModelIndex &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractitemview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractitemview.sip new file mode 100644 index 0000000..af9885d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractitemview.sip @@ -0,0 +1,294 @@ +// qabstractitemview.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractItemView : public QAbstractScrollArea +{ +%TypeHeaderCode +#include +%End + +public: + enum DragDropMode + { + NoDragDrop, + DragOnly, + DropOnly, + DragDrop, + InternalMove, + }; + + enum EditTrigger + { + NoEditTriggers, + CurrentChanged, + DoubleClicked, + SelectedClicked, + EditKeyPressed, + AnyKeyPressed, + AllEditTriggers, + }; + + typedef QFlags EditTriggers; + + enum ScrollHint + { + EnsureVisible, + PositionAtTop, + PositionAtBottom, + PositionAtCenter, + }; + + enum ScrollMode + { + ScrollPerItem, + ScrollPerPixel, + }; + + enum SelectionBehavior + { + SelectItems, + SelectRows, + SelectColumns, + }; + + enum SelectionMode + { + NoSelection, + SingleSelection, + MultiSelection, + ExtendedSelection, + ContiguousSelection, + }; + + explicit QAbstractItemView(QWidget *parent /TransferThis/ = 0); + virtual ~QAbstractItemView(); + virtual void setModel(QAbstractItemModel *model /KeepReference/); + QAbstractItemModel *model() const; + virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); + QItemSelectionModel *selectionModel() const; + void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/); + QAbstractItemDelegate *itemDelegate() const; + void setSelectionMode(QAbstractItemView::SelectionMode mode); + QAbstractItemView::SelectionMode selectionMode() const; + void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior); + QAbstractItemView::SelectionBehavior selectionBehavior() const; + QModelIndex currentIndex() const; + QModelIndex rootIndex() const; + void setEditTriggers(QAbstractItemView::EditTriggers triggers); + QAbstractItemView::EditTriggers editTriggers() const; + void setAutoScroll(bool enable); + bool hasAutoScroll() const; + void setTabKeyNavigation(bool enable); + bool tabKeyNavigation() const; + void setDropIndicatorShown(bool enable); + bool showDropIndicator() const; + void setDragEnabled(bool enable); + bool dragEnabled() const; + void setAlternatingRowColors(bool enable); + bool alternatingRowColors() const; + void setIconSize(const QSize &size); + QSize iconSize() const; + void setTextElideMode(Qt::TextElideMode mode); + Qt::TextElideMode textElideMode() const; + virtual void keyboardSearch(const QString &search); + virtual QRect visualRect(const QModelIndex &index) const = 0; + virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible) = 0; + virtual QModelIndex indexAt(const QPoint &p) const = 0; + QSize sizeHintForIndex(const QModelIndex &index) const; + virtual int sizeHintForRow(int row) const; + virtual int sizeHintForColumn(int column) const; + void openPersistentEditor(const QModelIndex &index); + void closePersistentEditor(const QModelIndex &index); + void setIndexWidget(const QModelIndex &index, QWidget *widget /Transfer/); +%MethodCode + // We have to break the association with any existing widget. + QWidget *w = sipCpp->indexWidget(*a0); + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferTo(wo, 0); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->setIndexWidget(*a0, a1); + Py_END_ALLOW_THREADS +%End + + QWidget *indexWidget(const QModelIndex &index) const; + +public slots: + virtual void reset(); + virtual void setRootIndex(const QModelIndex &index); + virtual void selectAll(); + void edit(const QModelIndex &index); + void clearSelection(); + void setCurrentIndex(const QModelIndex &index); + void scrollToTop(); + void scrollToBottom(); + void update(); + void update(const QModelIndex &index); + +protected slots: + virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); + virtual void rowsInserted(const QModelIndex &parent, int start, int end); + virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); + virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); + virtual void updateEditorData(); + virtual void updateEditorGeometries(); + virtual void updateGeometries(); + virtual void verticalScrollbarAction(int action); + virtual void horizontalScrollbarAction(int action); + virtual void verticalScrollbarValueChanged(int value); + virtual void horizontalScrollbarValueChanged(int value); + virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); + virtual void commitData(QWidget *editor); + virtual void editorDestroyed(QObject *editor); + +signals: + void pressed(const QModelIndex &index); + void clicked(const QModelIndex &index); + void doubleClicked(const QModelIndex &index); + void activated(const QModelIndex &index); + void entered(const QModelIndex &index); + void viewportEntered(); +%If (Qt_5_5_0 -) + void iconSizeChanged(const QSize &size); +%End + +protected: + enum CursorAction + { + MoveUp, + MoveDown, + MoveLeft, + MoveRight, + MoveHome, + MoveEnd, + MovePageUp, + MovePageDown, + MoveNext, + MovePrevious, + }; + + virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) = 0; + virtual int horizontalOffset() const = 0; + virtual int verticalOffset() const = 0; + virtual bool isIndexHidden(const QModelIndex &index) const = 0; + virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) = 0; + virtual QRegion visualRegionForSelection(const QItemSelection &selection) const = 0; + virtual QModelIndexList selectedIndexes() const; + virtual bool edit(const QModelIndex &index, QAbstractItemView::EditTrigger trigger, QEvent *event); + virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index, const QEvent *event = 0) const; + virtual void startDrag(Qt::DropActions supportedActions); + virtual QStyleOptionViewItem viewOptions() const; + + enum State + { + NoState, + DraggingState, + DragSelectingState, + EditingState, + ExpandingState, + CollapsingState, + AnimatingState, + }; + + QAbstractItemView::State state() const; + void setState(QAbstractItemView::State state); + void scheduleDelayedItemsLayout(); + void executeDelayedItemsLayout(); + void scrollDirtyRegion(int dx, int dy); + void setDirtyRegion(const QRegion ®ion); + QPoint dirtyRegionOffset() const; + virtual bool event(QEvent *event); + virtual bool viewportEvent(QEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void mouseDoubleClickEvent(QMouseEvent *e); + virtual void dragEnterEvent(QDragEnterEvent *e); + virtual void dragMoveEvent(QDragMoveEvent *e); + virtual void dragLeaveEvent(QDragLeaveEvent *e); + virtual void dropEvent(QDropEvent *e); + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + virtual void keyPressEvent(QKeyEvent *e); + virtual void resizeEvent(QResizeEvent *e); + virtual void timerEvent(QTimerEvent *e); + + enum DropIndicatorPosition + { + OnItem, + AboveItem, + BelowItem, + OnViewport, + }; + + QAbstractItemView::DropIndicatorPosition dropIndicatorPosition() const; + +public: + void setVerticalScrollMode(QAbstractItemView::ScrollMode mode); + QAbstractItemView::ScrollMode verticalScrollMode() const; + void setHorizontalScrollMode(QAbstractItemView::ScrollMode mode); + QAbstractItemView::ScrollMode horizontalScrollMode() const; + void setDragDropOverwriteMode(bool overwrite); + bool dragDropOverwriteMode() const; + void setDragDropMode(QAbstractItemView::DragDropMode behavior); + QAbstractItemView::DragDropMode dragDropMode() const; + void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate /KeepReference/); + QAbstractItemDelegate *itemDelegateForRow(int row) const; + void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate /KeepReference/); + QAbstractItemDelegate *itemDelegateForColumn(int column) const; + QAbstractItemDelegate *itemDelegate(const QModelIndex &index) const; + virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; + void setAutoScrollMargin(int margin); + int autoScrollMargin() const; + +protected: + virtual bool focusNextPrevChild(bool next); + virtual void inputMethodEvent(QInputMethodEvent *event); +%If (Qt_5_2_0 -) + virtual QSize viewportSizeHint() const; +%End +%If (Qt_5_11_0 -) + virtual bool eventFilter(QObject *object, QEvent *event); +%End + +public: + void setDefaultDropAction(Qt::DropAction dropAction); + Qt::DropAction defaultDropAction() const; +%If (Qt_5_7_0 -) + void resetVerticalScrollMode(); +%End +%If (Qt_5_7_0 -) + void resetHorizontalScrollMode(); +%End +%If (Qt_5_10_0 -) + bool isPersistentEditorOpen(const QModelIndex &index) const; +%End +}; + +QFlags operator|(QAbstractItemView::EditTrigger f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractscrollarea.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractscrollarea.sip new file mode 100644 index 0000000..aaa9428 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractscrollarea.sip @@ -0,0 +1,95 @@ +// qabstractscrollarea.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractScrollArea : public QFrame +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractScrollArea(QWidget *parent /TransferThis/ = 0); + virtual ~QAbstractScrollArea(); + Qt::ScrollBarPolicy verticalScrollBarPolicy() const; + void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy); + QScrollBar *verticalScrollBar() const /Transfer/; + Qt::ScrollBarPolicy horizontalScrollBarPolicy() const; + void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy); + QScrollBar *horizontalScrollBar() const /Transfer/; + QWidget *viewport() const /Transfer/; + QSize maximumViewportSize() const; + virtual QSize minimumSizeHint() const; + virtual QSize sizeHint() const; + +protected: + void setViewportMargins(int left, int top, int right, int bottom); + void setViewportMargins(const QMargins &margins); +%If (Qt_5_5_0 -) + QMargins viewportMargins() const; +%End +%If (Qt_5_2_0 -) + virtual QSize viewportSizeHint() const; +%End + virtual bool event(QEvent *); + virtual bool viewportEvent(QEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void wheelEvent(QWheelEvent *); + virtual void contextMenuEvent(QContextMenuEvent *); + virtual void dragEnterEvent(QDragEnterEvent *); + virtual void dragMoveEvent(QDragMoveEvent *); + virtual void dragLeaveEvent(QDragLeaveEvent *); + virtual void dropEvent(QDropEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual bool eventFilter(QObject *, QEvent *); + virtual void scrollContentsBy(int dx, int dy); + +public: + void setVerticalScrollBar(QScrollBar *scrollbar /Transfer/); + void setHorizontalScrollBar(QScrollBar *scrollbar /Transfer/); + QWidget *cornerWidget() const; + void setCornerWidget(QWidget *widget /Transfer/); + void addScrollBarWidget(QWidget *widget /Transfer/, Qt::Alignment alignment); + QWidgetList scrollBarWidgets(Qt::Alignment alignment) /Transfer/; + void setViewport(QWidget *widget /Transfer/); + virtual void setupViewport(QWidget *viewport); +%If (Qt_5_2_0 -) + + enum SizeAdjustPolicy + { + AdjustIgnored, + AdjustToContentsOnFirstShow, + AdjustToContents, + }; + +%End +%If (Qt_5_2_0 -) + QAbstractScrollArea::SizeAdjustPolicy sizeAdjustPolicy() const; +%End +%If (Qt_5_2_0 -) + void setSizeAdjustPolicy(QAbstractScrollArea::SizeAdjustPolicy policy); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractslider.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractslider.sip new file mode 100644 index 0000000..989c400 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractslider.sip @@ -0,0 +1,98 @@ +// qabstractslider.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractSlider : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractSlider(QWidget *parent /TransferThis/ = 0); + virtual ~QAbstractSlider(); + Qt::Orientation orientation() const; + void setMinimum(int); + int minimum() const; + void setMaximum(int); + int maximum() const; + void setRange(int min, int max); + void setSingleStep(int); + int singleStep() const; + void setPageStep(int); + int pageStep() const; + void setTracking(bool enable); + bool hasTracking() const; + void setSliderDown(bool); + bool isSliderDown() const; + void setSliderPosition(int); + int sliderPosition() const; + void setInvertedAppearance(bool); + bool invertedAppearance() const; + void setInvertedControls(bool); + bool invertedControls() const; + + enum SliderAction + { + SliderNoAction, + SliderSingleStepAdd, + SliderSingleStepSub, + SliderPageStepAdd, + SliderPageStepSub, + SliderToMinimum, + SliderToMaximum, + SliderMove, + }; + + int value() const; + void triggerAction(QAbstractSlider::SliderAction action); + +public slots: + void setValue(int); + void setOrientation(Qt::Orientation); + +signals: + void valueChanged(int value); + void sliderPressed(); + void sliderMoved(int position); + void sliderReleased(); + void rangeChanged(int min, int max); + void actionTriggered(int action); + +protected: + void setRepeatAction(QAbstractSlider::SliderAction action, int thresholdTime = 500, int repeatTime = 50); + QAbstractSlider::SliderAction repeatAction() const; + + enum SliderChange + { + SliderRangeChange, + SliderOrientationChange, + SliderStepsChange, + SliderValueChange, + }; + + virtual void sliderChange(QAbstractSlider::SliderChange change); + virtual bool event(QEvent *e); + virtual void keyPressEvent(QKeyEvent *ev); + virtual void timerEvent(QTimerEvent *); + virtual void wheelEvent(QWheelEvent *e); + virtual void changeEvent(QEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractspinbox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractspinbox.sip new file mode 100644 index 0000000..71dee77 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qabstractspinbox.sip @@ -0,0 +1,133 @@ +// qabstractspinbox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractSpinBox : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractSpinBox(QWidget *parent /TransferThis/ = 0); + virtual ~QAbstractSpinBox(); + + enum StepEnabledFlag + { + StepNone, + StepUpEnabled, + StepDownEnabled, + }; + + typedef QFlags StepEnabled; + + enum ButtonSymbols + { + UpDownArrows, + PlusMinus, + NoButtons, + }; + + QAbstractSpinBox::ButtonSymbols buttonSymbols() const; + void setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs); + QString text() const; + QString specialValueText() const; + void setSpecialValueText(const QString &s); + bool wrapping() const; + void setWrapping(bool w); + void setReadOnly(bool r); + bool isReadOnly() const; + void setAlignment(Qt::Alignment flag); + Qt::Alignment alignment() const; + void setFrame(bool); + bool hasFrame() const; + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + void interpretText(); + virtual bool event(QEvent *event); + virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; + virtual void fixup(QString &input /In,Out/) const; + virtual void stepBy(int steps); + +public slots: + void stepUp(); + void stepDown(); + void selectAll(); + virtual void clear(); + +signals: + void editingFinished(); + +protected: + virtual void resizeEvent(QResizeEvent *e); + virtual void keyPressEvent(QKeyEvent *e); + virtual void keyReleaseEvent(QKeyEvent *e); + virtual void wheelEvent(QWheelEvent *e); + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + virtual void contextMenuEvent(QContextMenuEvent *e); + virtual void changeEvent(QEvent *e); + virtual void closeEvent(QCloseEvent *e); + virtual void hideEvent(QHideEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void timerEvent(QTimerEvent *e); + virtual void paintEvent(QPaintEvent *e); + virtual void showEvent(QShowEvent *e); + QLineEdit *lineEdit() const; + void setLineEdit(QLineEdit *e /Transfer/); + virtual QAbstractSpinBox::StepEnabled stepEnabled() const; + void initStyleOption(QStyleOptionSpinBox *option) const; + +public: + enum CorrectionMode + { + CorrectToPreviousValue, + CorrectToNearestValue, + }; + + void setCorrectionMode(QAbstractSpinBox::CorrectionMode cm); + QAbstractSpinBox::CorrectionMode correctionMode() const; + bool hasAcceptableInput() const; + void setAccelerated(bool on); + bool isAccelerated() const; + void setKeyboardTracking(bool kt); + bool keyboardTracking() const; + virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const; +%If (Qt_5_3_0 -) + void setGroupSeparatorShown(bool shown); +%End +%If (Qt_5_3_0 -) + bool isGroupSeparatorShown() const; +%End +%If (Qt_5_12_0 -) + + enum StepType + { + DefaultStepType, + AdaptiveDecimalStepType, + }; + +%End +}; + +QFlags operator|(QAbstractSpinBox::StepEnabledFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qaction.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qaction.sip new file mode 100644 index 0000000..90b1631 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qaction.sip @@ -0,0 +1,148 @@ +// qaction.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAction : public QObject +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_7_0 -) + explicit QAction(QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_7_0) + explicit QAction(QObject *parent /TransferThis/); +%End +%If (Qt_5_7_0 -) + QAction(const QString &text, QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_7_0) + QAction(const QString &text, QObject *parent /TransferThis/); +%End +%If (Qt_5_7_0 -) + QAction(const QIcon &icon, const QString &text, QObject *parent /TransferThis/ = 0); +%End +%If (- Qt_5_7_0) + QAction(const QIcon &icon, const QString &text, QObject *parent /TransferThis/); +%End + virtual ~QAction(); + void setActionGroup(QActionGroup *group /KeepReference/); + QActionGroup *actionGroup() const; + void setIcon(const QIcon &icon); + QIcon icon() const; + void setText(const QString &text); + QString text() const; + void setIconText(const QString &text); + QString iconText() const; + void setToolTip(const QString &tip); + QString toolTip() const; + void setStatusTip(const QString &statusTip); + QString statusTip() const; + void setWhatsThis(const QString &what); + QString whatsThis() const; + QMenu *menu() const; + void setMenu(QMenu *menu /KeepReference/); + void setSeparator(bool b); + bool isSeparator() const; + void setShortcut(const QKeySequence &shortcut); + QKeySequence shortcut() const; + void setShortcutContext(Qt::ShortcutContext context); + Qt::ShortcutContext shortcutContext() const; + void setFont(const QFont &font); + QFont font() const; + void setCheckable(bool); + bool isCheckable() const; + QVariant data() const; + void setData(const QVariant &var); + bool isChecked() const; + bool isEnabled() const; + bool isVisible() const; + + enum ActionEvent + { + Trigger, + Hover, + }; + + void activate(QAction::ActionEvent event); + bool showStatusText(QWidget *widget = 0); + QWidget *parentWidget() const; + +protected: + virtual bool event(QEvent *); + +public slots: + void trigger(); + void hover(); + void setChecked(bool); + void toggle(); + void setEnabled(bool); + void setDisabled(bool b); + void setVisible(bool); + +signals: + void changed(); + void triggered(bool checked = false); + void hovered(); + void toggled(bool); + +public: + enum MenuRole + { + NoRole, + TextHeuristicRole, + ApplicationSpecificRole, + AboutQtRole, + AboutRole, + PreferencesRole, + QuitRole, + }; + + void setShortcuts(const QList &shortcuts); + void setShortcuts(QKeySequence::StandardKey); + QList shortcuts() const; + void setAutoRepeat(bool); + bool autoRepeat() const; + void setMenuRole(QAction::MenuRole menuRole); + QAction::MenuRole menuRole() const; + QList associatedWidgets() const; + QList associatedGraphicsWidgets() const; + void setIconVisibleInMenu(bool visible); + bool isIconVisibleInMenu() const; + + enum Priority + { + LowPriority, + NormalPriority, + HighPriority, + }; + + void setPriority(QAction::Priority priority); + QAction::Priority priority() const; +%If (Qt_5_10_0 -) + void setShortcutVisibleInContextMenu(bool show); +%End +%If (Qt_5_10_0 -) + bool isShortcutVisibleInContextMenu() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qactiongroup.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qactiongroup.sip new file mode 100644 index 0000000..d1b2006 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qactiongroup.sip @@ -0,0 +1,74 @@ +// qactiongroup.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QActionGroup : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QActionGroup(QObject *parent /TransferThis/); + virtual ~QActionGroup(); + QAction *addAction(QAction *a /Transfer/); + QAction *addAction(const QString &text) /Transfer/; + QAction *addAction(const QIcon &icon, const QString &text) /Transfer/; + void removeAction(QAction *a /TransferBack/); + QList actions() const; + QAction *checkedAction() const; + bool isExclusive() const; + bool isEnabled() const; + bool isVisible() const; + +public slots: + void setEnabled(bool); + void setDisabled(bool b); + void setVisible(bool); + void setExclusive(bool); + +signals: + void triggered(QAction *); + void hovered(QAction *); + +public: +%If (Qt_5_14_0 -) + + enum class ExclusionPolicy + { + None /PyName=None_/, + Exclusive, + ExclusiveOptional, + }; + +%End +%If (Qt_5_14_0 -) + QActionGroup::ExclusionPolicy exclusionPolicy() const; +%End + +public slots: +%If (Qt_5_14_0 -) + void setExclusionPolicy(QActionGroup::ExclusionPolicy policy); +%End + +private: + QActionGroup(const QActionGroup &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qapplication.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qapplication.sip new file mode 100644 index 0000000..3fb88d1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qapplication.sip @@ -0,0 +1,361 @@ +// qapplication.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +// QApplication *qApp +QApplication *qApp { +%AccessCode + // Qt implements this has a #define to a function call so we have to handle + // it like this. + return qApp; +%End +}; +typedef QList QWidgetList; + +class QApplication : public QGuiApplication +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QKeyEventTransition, &sipType_QKeyEventTransition, -1, 1}, + {sipName_QUndoStack, &sipType_QUndoStack, -1, 2}, + {sipName_QAbstractItemDelegate, &sipType_QAbstractItemDelegate, 26, 3}, + {sipName_QGraphicsTransform, &sipType_QGraphicsTransform, 28, 4}, + {sipName_QCompleter, &sipType_QCompleter, -1, 5}, + {sipName_QActionGroup, &sipType_QActionGroup, -1, 6}, + {sipName_QShortcut, &sipType_QShortcut, -1, 7}, + {sipName_QButtonGroup, &sipType_QButtonGroup, -1, 8}, + {sipName_QPlainTextDocumentLayout, &sipType_QPlainTextDocumentLayout, -1, 9}, + {sipName_QGraphicsAnchor, &sipType_QGraphicsAnchor, -1, 10}, + {sipName_QFileSystemModel, &sipType_QFileSystemModel, -1, 11}, + {sipName_QGesture, &sipType_QGesture, 30, 12}, + {sipName_QApplication, &sipType_QApplication, -1, 13}, + {sipName_QLayout, &sipType_QLayout, 35, 14}, + {sipName_QDirModel, &sipType_QDirModel, -1, 15}, + {sipName_QDataWidgetMapper, &sipType_QDataWidgetMapper, -1, 16}, + {sipName_QGraphicsObject, &sipType_QGraphicsObject, 41, 17}, + {sipName_QScroller, &sipType_QScroller, -1, 18}, + {sipName_QGraphicsScene, &sipType_QGraphicsScene, -1, 19}, + {sipName_QUndoGroup, &sipType_QUndoGroup, -1, 20}, + {sipName_QMouseEventTransition, &sipType_QMouseEventTransition, -1, 21}, + {sipName_QGraphicsEffect, &sipType_QGraphicsEffect, 44, 22}, + {sipName_QWidget, &sipType_QWidget, 48, 23}, + {sipName_QStyle, &sipType_QStyle, 122, 24}, + {sipName_QAction, &sipType_QAction, 124, 25}, + {sipName_QSystemTrayIcon, &sipType_QSystemTrayIcon, -1, -1}, + {sipName_QStyledItemDelegate, &sipType_QStyledItemDelegate, -1, 27}, + {sipName_QItemDelegate, &sipType_QItemDelegate, -1, -1}, + {sipName_QGraphicsRotation, &sipType_QGraphicsRotation, -1, 29}, + {sipName_QGraphicsScale, &sipType_QGraphicsScale, -1, -1}, + {sipName_QSwipeGesture, &sipType_QSwipeGesture, -1, 31}, + {sipName_QTapGesture, &sipType_QTapGesture, -1, 32}, + {sipName_QPanGesture, &sipType_QPanGesture, -1, 33}, + {sipName_QPinchGesture, &sipType_QPinchGesture, -1, 34}, + {sipName_QTapAndHoldGesture, &sipType_QTapAndHoldGesture, -1, -1}, + {sipName_QStackedLayout, &sipType_QStackedLayout, -1, 36}, + {sipName_QFormLayout, &sipType_QFormLayout, -1, 37}, + {sipName_QBoxLayout, &sipType_QBoxLayout, 39, 38}, + {sipName_QGridLayout, &sipType_QGridLayout, -1, -1}, + {sipName_QVBoxLayout, &sipType_QVBoxLayout, -1, 40}, + {sipName_QHBoxLayout, &sipType_QHBoxLayout, -1, -1}, + {sipName_QGraphicsWidget, &sipType_QGraphicsWidget, 43, 42}, + {sipName_QGraphicsTextItem, &sipType_QGraphicsTextItem, -1, -1}, + {sipName_QGraphicsProxyWidget, &sipType_QGraphicsProxyWidget, -1, -1}, + {sipName_QGraphicsBlurEffect, &sipType_QGraphicsBlurEffect, -1, 45}, + {sipName_QGraphicsColorizeEffect, &sipType_QGraphicsColorizeEffect, -1, 46}, + {sipName_QGraphicsDropShadowEffect, &sipType_QGraphicsDropShadowEffect, -1, 47}, + {sipName_QGraphicsOpacityEffect, &sipType_QGraphicsOpacityEffect, -1, -1}, + {sipName_QDockWidget, &sipType_QDockWidget, -1, 49}, + {sipName_QProgressBar, &sipType_QProgressBar, -1, 50}, + #if QT_VERSION >= 0x050400 && defined(SIP_FEATURE_PyQt_OpenGL) + {sipName_QOpenGLWidget, &sipType_QOpenGLWidget, -1, 51}, + #else + {0, 0, -1, 51}, + #endif + {sipName_QAbstractButton, &sipType_QAbstractButton, 78, 52}, + {sipName_QSplashScreen, &sipType_QSplashScreen, -1, 53}, + {sipName_QMenuBar, &sipType_QMenuBar, -1, 54}, + {sipName_QStatusBar, &sipType_QStatusBar, -1, 55}, + {sipName_QMenu, &sipType_QMenu, -1, 56}, + {sipName_QMdiSubWindow, &sipType_QMdiSubWindow, -1, 57}, + {sipName_QTabWidget, &sipType_QTabWidget, -1, 58}, + #if defined(Q_OS_MAC) && defined(SIP_FEATURE_PyQt_MacOSXOnly) + {sipName_QMacCocoaViewContainer, &sipType_QMacCocoaViewContainer, -1, 59}, + #else + {0, 0, -1, 59}, + #endif + {sipName_QLineEdit, &sipType_QLineEdit, -1, 60}, + {sipName_QFrame, &sipType_QFrame, 83, 61}, + {sipName_QComboBox, &sipType_QComboBox, 105, 62}, + {sipName_QRubberBand, &sipType_QRubberBand, -1, 63}, + {sipName_QAbstractSpinBox, &sipType_QAbstractSpinBox, 106, 64}, + {sipName_QDialog, &sipType_QDialog, 111, 65}, + #if QT_VERSION >= 0x050200 + {sipName_QKeySequenceEdit, &sipType_QKeySequenceEdit, -1, 66}, + #else + {0, 0, -1, 66}, + #endif + {sipName_QAbstractSlider, &sipType_QAbstractSlider, 119, 67}, + {sipName_QWizardPage, &sipType_QWizardPage, -1, 68}, + {sipName_QDesktopWidget, &sipType_QDesktopWidget, -1, 69}, + {sipName_QDialogButtonBox, &sipType_QDialogButtonBox, -1, 70}, + {sipName_QToolBar, &sipType_QToolBar, -1, 71}, + {sipName_QSizeGrip, &sipType_QSizeGrip, -1, 72}, + {sipName_QSplitterHandle, &sipType_QSplitterHandle, -1, 73}, + {sipName_QTabBar, &sipType_QTabBar, -1, 74}, + {sipName_QGroupBox, &sipType_QGroupBox, -1, 75}, + {sipName_QMainWindow, &sipType_QMainWindow, -1, 76}, + {sipName_QCalendarWidget, &sipType_QCalendarWidget, -1, 77}, + {sipName_QFocusFrame, &sipType_QFocusFrame, -1, -1}, + {sipName_QCheckBox, &sipType_QCheckBox, -1, 79}, + {sipName_QRadioButton, &sipType_QRadioButton, -1, 80}, + {sipName_QPushButton, &sipType_QPushButton, 82, 81}, + {sipName_QToolButton, &sipType_QToolButton, -1, -1}, + {sipName_QCommandLinkButton, &sipType_QCommandLinkButton, -1, -1}, + {sipName_QAbstractScrollArea, &sipType_QAbstractScrollArea, 89, 84}, + {sipName_QToolBox, &sipType_QToolBox, -1, 85}, + {sipName_QSplitter, &sipType_QSplitter, -1, 86}, + {sipName_QStackedWidget, &sipType_QStackedWidget, -1, 87}, + {sipName_QLabel, &sipType_QLabel, -1, 88}, + {sipName_QLCDNumber, &sipType_QLCDNumber, -1, -1}, + {sipName_QScrollArea, &sipType_QScrollArea, -1, 90}, + {sipName_QPlainTextEdit, &sipType_QPlainTextEdit, -1, 91}, + {sipName_QGraphicsView, &sipType_QGraphicsView, -1, 92}, + {sipName_QAbstractItemView, &sipType_QAbstractItemView, 95, 93}, + {sipName_QTextEdit, &sipType_QTextEdit, 104, 94}, + {sipName_QMdiArea, &sipType_QMdiArea, -1, -1}, + {sipName_QHeaderView, &sipType_QHeaderView, -1, 96}, + {sipName_QTableView, &sipType_QTableView, 100, 97}, + {sipName_QListView, &sipType_QListView, 101, 98}, + {sipName_QTreeView, &sipType_QTreeView, 103, 99}, + {sipName_QColumnView, &sipType_QColumnView, -1, -1}, + {sipName_QTableWidget, &sipType_QTableWidget, -1, -1}, + {sipName_QListWidget, &sipType_QListWidget, -1, 102}, + {sipName_QUndoView, &sipType_QUndoView, -1, -1}, + {sipName_QTreeWidget, &sipType_QTreeWidget, -1, -1}, + {sipName_QTextBrowser, &sipType_QTextBrowser, -1, -1}, + {sipName_QFontComboBox, &sipType_QFontComboBox, -1, -1}, + {sipName_QDateTimeEdit, &sipType_QDateTimeEdit, 109, 107}, + {sipName_QSpinBox, &sipType_QSpinBox, -1, 108}, + {sipName_QDoubleSpinBox, &sipType_QDoubleSpinBox, -1, -1}, + {sipName_QDateEdit, &sipType_QDateEdit, -1, 110}, + {sipName_QTimeEdit, &sipType_QTimeEdit, -1, -1}, + {sipName_QFontDialog, &sipType_QFontDialog, -1, 112}, + {sipName_QErrorMessage, &sipType_QErrorMessage, -1, 113}, + {sipName_QMessageBox, &sipType_QMessageBox, -1, 114}, + {sipName_QProgressDialog, &sipType_QProgressDialog, -1, 115}, + {sipName_QColorDialog, &sipType_QColorDialog, -1, 116}, + {sipName_QFileDialog, &sipType_QFileDialog, -1, 117}, + {sipName_QInputDialog, &sipType_QInputDialog, -1, 118}, + {sipName_QWizard, &sipType_QWizard, -1, -1}, + {sipName_QDial, &sipType_QDial, -1, 120}, + {sipName_QScrollBar, &sipType_QScrollBar, -1, 121}, + {sipName_QSlider, &sipType_QSlider, -1, -1}, + {sipName_QCommonStyle, &sipType_QCommonStyle, 123, -1}, + {sipName_QProxyStyle, &sipType_QProxyStyle, -1, -1}, + {sipName_QWidgetAction, &sipType_QWidgetAction, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + QApplication(SIP_PYLIST argv /TypeHint="List[str]"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv, int = ApplicationFlags)]; +%MethodCode + // The Python interface is a list of argument strings that is modified. + + int argc; + char **argv; + + // Convert the list. + if ((argv = pyqt5_qtwidgets_from_argv_list(a0, argc)) == NULL) + sipIsErr = 1; + else + { + // Create it now the arguments are right. + static int nargc; + nargc = argc; + + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQApplication(nargc, argv, QCoreApplication::ApplicationFlags); + Py_END_ALLOW_THREADS + + // Now modify the original list. + pyqt5_qtwidgets_update_argv_list(a0, argc, argv); + } +%End + + virtual ~QApplication() /ReleaseGIL/; +%MethodCode + pyqt5_qtwidgets_cleanup_qobjects(); +%End + + static QStyle *style(); + static void setStyle(QStyle * /Transfer/); + static QStyle *setStyle(const QString &); + + enum ColorSpec + { + NormalColor, + CustomColor, + ManyColor, + }; + + static int colorSpec(); + static void setColorSpec(int); + static QPalette palette(); + static QPalette palette(const QWidget *); + static QPalette palette(const char *className); + static void setPalette(const QPalette &, const char *className = 0); + static QFont font(); + static QFont font(const QWidget *); + static QFont font(const char *className); + static void setFont(const QFont &, const char *className = 0); + static QFontMetrics fontMetrics(); + static void setWindowIcon(const QIcon &icon); + static QIcon windowIcon(); + static QWidgetList allWidgets(); + static QWidgetList topLevelWidgets(); + static QDesktopWidget *desktop(); + static QWidget *activePopupWidget(); + static QWidget *activeModalWidget(); + static QWidget *focusWidget(); + static QWidget *activeWindow(); + static void setActiveWindow(QWidget *act); + static QWidget *widgetAt(const QPoint &p); + static QWidget *widgetAt(int x, int y); + static QWidget *topLevelAt(const QPoint &p); + static QWidget *topLevelAt(int x, int y); + static void beep(); + static void alert(QWidget *widget, int msecs = 0) /ReleaseGIL/; + static void setCursorFlashTime(int); + static int cursorFlashTime(); + static void setDoubleClickInterval(int); + static int doubleClickInterval(); + static void setKeyboardInputInterval(int); + static int keyboardInputInterval(); + static void setWheelScrollLines(int); + static int wheelScrollLines(); + static void setGlobalStrut(const QSize &); + static QSize globalStrut(); + static void setStartDragTime(int ms); + static int startDragTime(); + static void setStartDragDistance(int l); + static int startDragDistance(); + static bool isEffectEnabled(Qt::UIEffect); + static void setEffectEnabled(Qt::UIEffect, bool enabled = true); + static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%If (Py_v3) + static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; +%End + virtual bool notify(QObject *, QEvent *) /ReleaseGIL/; + bool autoSipEnabled() const; + QString styleSheet() const; + +signals: + void focusChanged(QWidget *old, QWidget *now); + +public slots: + static void aboutQt(); + static void closeAllWindows(); + void setAutoSipEnabled(const bool enabled); + void setStyleSheet(const QString &sheet); + +protected: + virtual bool event(QEvent *); +}; + +%ModuleHeaderCode +// Imports from QtCore. +typedef void (*pyqt5_qtwidgets_cleanup_qobjects_t)(); +extern pyqt5_qtwidgets_cleanup_qobjects_t pyqt5_qtwidgets_cleanup_qobjects; + +typedef char **(*pyqt5_qtwidgets_from_argv_list_t)(PyObject *, int &); +extern pyqt5_qtwidgets_from_argv_list_t pyqt5_qtwidgets_from_argv_list; + +typedef sipErrorState (*pyqt5_qtwidgets_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &); +extern pyqt5_qtwidgets_get_connection_parts_t pyqt5_qtwidgets_get_connection_parts; + +typedef sipErrorState (*pyqt5_qtwidgets_get_signal_signature_t)(PyObject *, QObject *, QByteArray &); +extern pyqt5_qtwidgets_get_signal_signature_t pyqt5_qtwidgets_get_signal_signature; + +typedef void (*pyqt5_qtwidgets_update_argv_list_t)(PyObject *, int, char **); +extern pyqt5_qtwidgets_update_argv_list_t pyqt5_qtwidgets_update_argv_list; + +// This is needed for Qt v5.0.0. +#if defined(B0) +#undef B0 +#endif +%End + +%ModuleCode +#include "qpywidgets_api.h" + +// Imports from QtCore. +pyqt5_qtwidgets_cleanup_qobjects_t pyqt5_qtwidgets_cleanup_qobjects; +pyqt5_qtwidgets_from_argv_list_t pyqt5_qtwidgets_from_argv_list; +pyqt5_qtwidgets_get_connection_parts_t pyqt5_qtwidgets_get_connection_parts; +pyqt5_qtwidgets_get_signal_signature_t pyqt5_qtwidgets_get_signal_signature; +pyqt5_qtwidgets_update_argv_list_t pyqt5_qtwidgets_update_argv_list; +%End + +%PostInitialisationCode +// Imports from QtCore. +pyqt5_qtwidgets_cleanup_qobjects = (pyqt5_qtwidgets_cleanup_qobjects_t)sipImportSymbol("pyqt5_cleanup_qobjects"); +Q_ASSERT(pyqt5_qtwidgets_cleanup_qobjects); + +pyqt5_qtwidgets_from_argv_list = (pyqt5_qtwidgets_from_argv_list_t)sipImportSymbol("pyqt5_from_argv_list"); +Q_ASSERT(pyqt5_qtwidgets_from_argv_list); + +pyqt5_qtwidgets_get_connection_parts = (pyqt5_qtwidgets_get_connection_parts_t)sipImportSymbol("pyqt5_get_connection_parts"); +Q_ASSERT(pyqt5_qtwidgets_get_connection_parts); + +pyqt5_qtwidgets_get_signal_signature = (pyqt5_qtwidgets_get_signal_signature_t)sipImportSymbol("pyqt5_get_signal_signature"); +Q_ASSERT(pyqt5_qtwidgets_get_signal_signature); + +pyqt5_qtwidgets_update_argv_list = (pyqt5_qtwidgets_update_argv_list_t)sipImportSymbol("pyqt5_update_argv_list"); +Q_ASSERT(pyqt5_qtwidgets_update_argv_list); + +qpywidgets_post_init(); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qboxlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qboxlayout.sip new file mode 100644 index 0000000..be4c60f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qboxlayout.sip @@ -0,0 +1,145 @@ +// qboxlayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QBoxLayout : public QLayout +{ +%TypeHeaderCode +#include +%End + +public: + enum Direction + { + LeftToRight, + RightToLeft, + TopToBottom, + BottomToTop, + Down, + Up, + }; + + QBoxLayout(QBoxLayout::Direction direction, QWidget *parent /TransferThis/ = 0); + virtual ~QBoxLayout(); + QBoxLayout::Direction direction() const; + void setDirection(QBoxLayout::Direction); + void addSpacing(int size); + void addStretch(int stretch = 0); + void addWidget(QWidget * /GetWrapper/, int stretch = 0, Qt::Alignment alignment = Qt::Alignment()); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->addWidget(a0, a1, *a2); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a0Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows addWidget(QWidget()). + sipTransferTo(a0Wrapper, sipSelf); + } +%End + + void addLayout(QLayout *layout /Transfer/, int stretch = 0); + void addStrut(int); + virtual void addItem(QLayoutItem * /Transfer/); + void insertSpacing(int index, int size); + void insertStretch(int index, int stretch = 0); + void insertWidget(int index, QWidget *widget /GetWrapper/, int stretch = 0, Qt::Alignment alignment = Qt::Alignment()); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->insertWidget(a0, a1, a2, *a3); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a1Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows insertWidget(QWidget()). + sipTransferTo(a1Wrapper, sipSelf); + } +%End + + void insertLayout(int index, QLayout *layout /Transfer/, int stretch = 0); + bool setStretchFactor(QWidget *w, int stretch); + bool setStretchFactor(QLayout *l, int stretch); + virtual QSize sizeHint() const; + virtual QSize minimumSize() const; + virtual QSize maximumSize() const; + virtual bool hasHeightForWidth() const; + virtual int heightForWidth(int) const; + virtual int minimumHeightForWidth(int) const; + virtual Qt::Orientations expandingDirections() const; + virtual void invalidate(); + virtual QLayoutItem *itemAt(int) const; + virtual QLayoutItem *takeAt(int) /TransferBack/; + virtual int count() const; + virtual void setGeometry(const QRect &); + int spacing() const; + void setSpacing(int spacing); + void addSpacerItem(QSpacerItem *spacerItem /Transfer/); + void insertSpacerItem(int index, QSpacerItem *spacerItem /Transfer/); + void setStretch(int index, int stretch); + int stretch(int index) const; + void insertItem(int index, QLayoutItem * /Transfer/); +}; + +class QHBoxLayout : public QBoxLayout +{ +%TypeHeaderCode +#include +%End + +public: + QHBoxLayout(); + explicit QHBoxLayout(QWidget *parent /TransferThis/); + virtual ~QHBoxLayout(); +}; + +class QVBoxLayout : public QBoxLayout +{ +%TypeHeaderCode +#include +%End + +public: + QVBoxLayout(); + explicit QVBoxLayout(QWidget *parent /TransferThis/); + virtual ~QVBoxLayout(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qbuttongroup.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qbuttongroup.sip new file mode 100644 index 0000000..0c44caf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qbuttongroup.sip @@ -0,0 +1,68 @@ +// qbuttongroup.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QButtonGroup : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QButtonGroup(QObject *parent /TransferThis/ = 0); + virtual ~QButtonGroup(); + void setExclusive(bool); + bool exclusive() const; + void addButton(QAbstractButton *, int id = -1); + void removeButton(QAbstractButton *); + QList buttons() const; + QAbstractButton *button(int id) const; + QAbstractButton *checkedButton() const; + void setId(QAbstractButton *button, int id); + int id(QAbstractButton *button) const; + int checkedId() const; + +signals: + void buttonClicked(QAbstractButton *); + void buttonClicked(int); + void buttonPressed(QAbstractButton *); + void buttonPressed(int); + void buttonReleased(QAbstractButton *); + void buttonReleased(int); +%If (Qt_5_2_0 -) + void buttonToggled(QAbstractButton *, bool); +%End +%If (Qt_5_2_0 -) + void buttonToggled(int, bool); +%End +%If (Qt_5_15_0 -) + void idClicked(int); +%End +%If (Qt_5_15_0 -) + void idPressed(int); +%End +%If (Qt_5_15_0 -) + void idReleased(int); +%End +%If (Qt_5_15_0 -) + void idToggled(int, bool); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcalendarwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcalendarwidget.sip new file mode 100644 index 0000000..d7d0a8b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcalendarwidget.sip @@ -0,0 +1,123 @@ +// qcalendarwidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCalendarWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum HorizontalHeaderFormat + { + NoHorizontalHeader, + SingleLetterDayNames, + ShortDayNames, + LongDayNames, + }; + + enum VerticalHeaderFormat + { + NoVerticalHeader, + ISOWeekNumbers, + }; + + enum SelectionMode + { + NoSelection, + SingleSelection, + }; + + explicit QCalendarWidget(QWidget *parent /TransferThis/ = 0); + virtual ~QCalendarWidget(); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + QDate selectedDate() const; + int yearShown() const; + int monthShown() const; + QDate minimumDate() const; + void setMinimumDate(const QDate &date); + QDate maximumDate() const; + void setMaximumDate(const QDate &date); + Qt::DayOfWeek firstDayOfWeek() const; + void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek); + bool isGridVisible() const; + void setGridVisible(bool show); + QCalendarWidget::SelectionMode selectionMode() const; + void setSelectionMode(QCalendarWidget::SelectionMode mode); + QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat() const; + void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format); + QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat() const; + void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format); + QTextCharFormat headerTextFormat() const; + void setHeaderTextFormat(const QTextCharFormat &format); + QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek) const; + void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format); + QMap dateTextFormat() const; + QTextCharFormat dateTextFormat(const QDate &date) const; + void setDateTextFormat(const QDate &date, const QTextCharFormat &color); + +protected: + void updateCell(const QDate &date); + void updateCells(); + virtual bool event(QEvent *event); + virtual bool eventFilter(QObject *watched, QEvent *event); + virtual void mousePressEvent(QMouseEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual void keyPressEvent(QKeyEvent *event); + virtual void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const; + +public slots: + void setCurrentPage(int year, int month); + void setDateRange(const QDate &min, const QDate &max); + void setSelectedDate(const QDate &date); + void showNextMonth(); + void showNextYear(); + void showPreviousMonth(); + void showPreviousYear(); + void showSelectedDate(); + void showToday(); + +signals: + void activated(const QDate &date); + void clicked(const QDate &date); + void currentPageChanged(int year, int month); + void selectionChanged(); + +public: + bool isNavigationBarVisible() const; + bool isDateEditEnabled() const; + void setDateEditEnabled(bool enable); + int dateEditAcceptDelay() const; + void setDateEditAcceptDelay(int delay); + +public slots: + void setNavigationBarVisible(bool visible); + +public: +%If (Qt_5_14_0 -) + QCalendar calendar() const; +%End +%If (Qt_5_14_0 -) + void setCalendar(QCalendar calendar); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcheckbox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcheckbox.sip new file mode 100644 index 0000000..8ffbd9e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcheckbox.sip @@ -0,0 +1,51 @@ +// qcheckbox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCheckBox : public QAbstractButton +{ +%TypeHeaderCode +#include +%End + +public: + explicit QCheckBox(QWidget *parent /TransferThis/ = 0); + QCheckBox(const QString &text, QWidget *parent /TransferThis/ = 0); + virtual ~QCheckBox(); + virtual QSize sizeHint() const; + void setTristate(bool on = true); + bool isTristate() const; + Qt::CheckState checkState() const; + void setCheckState(Qt::CheckState state); + virtual QSize minimumSizeHint() const; + +signals: + void stateChanged(int); + +protected: + virtual bool hitButton(const QPoint &pos) const; + virtual void checkStateSet(); + virtual void nextCheckState(); + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + void initStyleOption(QStyleOptionButton *option) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcolordialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcolordialog.sip new file mode 100644 index 0000000..1fcf4f3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcolordialog.sip @@ -0,0 +1,83 @@ +// qcolordialog.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QColorDialog : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + enum ColorDialogOption + { + ShowAlphaChannel, + NoButtons, + DontUseNativeDialog, + }; + + typedef QFlags ColorDialogOptions; + explicit QColorDialog(QWidget *parent /TransferThis/ = 0); + QColorDialog(const QColor &initial, QWidget *parent /TransferThis/ = 0); + virtual ~QColorDialog(); + static QColor getColor(const QColor &initial = Qt::white, QWidget *parent = 0, const QString &title = QString(), QColorDialog::ColorDialogOptions options = QColorDialog::ColorDialogOptions()) /ReleaseGIL/; + static int customCount(); + static QColor customColor(int index); + static void setCustomColor(int index, QColor color); + static QColor standardColor(int index); + static void setStandardColor(int index, QColor color); + +signals: + void colorSelected(const QColor &color); + void currentColorChanged(const QColor &color); + +protected: + virtual void changeEvent(QEvent *e); + virtual void done(int result); + +public: + void setCurrentColor(const QColor &color); + QColor currentColor() const; + QColor selectedColor() const; + void setOption(QColorDialog::ColorDialogOption option, bool on = true); + bool testOption(QColorDialog::ColorDialogOption option) const; + void setOptions(QColorDialog::ColorDialogOptions options); + QColorDialog::ColorDialogOptions options() const; + virtual void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + virtual void setVisible(bool visible); +}; + +QFlags operator|(QColorDialog::ColorDialogOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcolumnview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcolumnview.sip new file mode 100644 index 0000000..221219c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcolumnview.sip @@ -0,0 +1,65 @@ +// qcolumnview.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QColumnView : public QAbstractItemView +{ +%TypeHeaderCode +#include +%End + +public: + explicit QColumnView(QWidget *parent /TransferThis/ = 0); + virtual ~QColumnView(); + QList columnWidths() const; + QWidget *previewWidget() const; + bool resizeGripsVisible() const; + void setColumnWidths(const QList &list); + void setPreviewWidget(QWidget *widget /Transfer/); + void setResizeGripsVisible(bool visible); + virtual QModelIndex indexAt(const QPoint &point) const; + virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); + virtual QSize sizeHint() const; + virtual QRect visualRect(const QModelIndex &index) const; + virtual void setModel(QAbstractItemModel *model /KeepReference/); + virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); + virtual void setRootIndex(const QModelIndex &index); + virtual void selectAll(); + +signals: + void updatePreviewWidget(const QModelIndex &index); + +protected: + virtual QAbstractItemView *createColumn(const QModelIndex &rootIndex); + void initializeColumn(QAbstractItemView *column) const; + virtual bool isIndexHidden(const QModelIndex &index) const; + virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); + virtual void resizeEvent(QResizeEvent *event); + virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); + virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; + virtual int horizontalOffset() const; + virtual int verticalOffset() const; + virtual void scrollContentsBy(int dx, int dy); + virtual void rowsInserted(const QModelIndex &parent, int start, int end); + +protected slots: + virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcombobox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcombobox.sip new file mode 100644 index 0000000..cd8c5bf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcombobox.sip @@ -0,0 +1,170 @@ +// qcombobox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QComboBox : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QComboBox(QWidget *parent /TransferThis/ = 0); + virtual ~QComboBox(); + int maxVisibleItems() const; + void setMaxVisibleItems(int maxItems); + int count() const /__len__/; + void setMaxCount(int max); + int maxCount() const; + bool duplicatesEnabled() const; + void setDuplicatesEnabled(bool enable); + void setFrame(bool); + bool hasFrame() const; + int findText(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const; + int findData(const QVariant &data, int role = Qt::UserRole, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const; + + enum InsertPolicy + { + NoInsert, + InsertAtTop, + InsertAtCurrent, + InsertAtBottom, + InsertAfterCurrent, + InsertBeforeCurrent, + InsertAlphabetically, + }; + + QComboBox::InsertPolicy insertPolicy() const; + void setInsertPolicy(QComboBox::InsertPolicy policy); + + enum SizeAdjustPolicy + { + AdjustToContents, + AdjustToContentsOnFirstShow, + AdjustToMinimumContentsLength, + AdjustToMinimumContentsLengthWithIcon, + }; + + QComboBox::SizeAdjustPolicy sizeAdjustPolicy() const; + void setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy); + int minimumContentsLength() const; + void setMinimumContentsLength(int characters); + QSize iconSize() const; + void setIconSize(const QSize &size); + bool isEditable() const; + void setEditable(bool editable); + void setLineEdit(QLineEdit *edit /Transfer/); + QLineEdit *lineEdit() const; + void setValidator(const QValidator *v /KeepReference/); + const QValidator *validator() const; + QAbstractItemDelegate *itemDelegate() const; + void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/); + QAbstractItemModel *model() const; + void setModel(QAbstractItemModel *model /KeepReference/); + QModelIndex rootModelIndex() const; + void setRootModelIndex(const QModelIndex &index); + int modelColumn() const; + void setModelColumn(int visibleColumn); + int currentIndex() const; + void setCurrentIndex(int index); + QString currentText() const; + QString itemText(int index) const; + QIcon itemIcon(int index) const; + QVariant itemData(int index, int role = Qt::UserRole) const; + void addItems(const QStringList &texts); + void addItem(const QString &text, const QVariant &userData = QVariant()); + void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant()); + void insertItem(int index, const QString &text, const QVariant &userData = QVariant()); + void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant()); + void insertItems(int index, const QStringList &texts); + void removeItem(int index); + void setItemText(int index, const QString &text); + void setItemIcon(int index, const QIcon &icon); + void setItemData(int index, const QVariant &value, int role = Qt::ItemDataRole::UserRole); + QAbstractItemView *view() const; + void setView(QAbstractItemView *itemView /Transfer/); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + virtual void showPopup(); + virtual void hidePopup(); + virtual bool event(QEvent *event); + void setCompleter(QCompleter *c /KeepReference/); + QCompleter *completer() const; + void insertSeparator(int index); + +public slots: + void clear(); + void clearEditText(); + void setEditText(const QString &text); + void setCurrentText(const QString &text); + +signals: + void editTextChanged(const QString &); + void activated(int index); + void activated(const QString &); + void currentIndexChanged(int index); + void currentIndexChanged(const QString &); + void currentTextChanged(const QString &); + void highlighted(int index); + void highlighted(const QString &); + +protected: + void initStyleOption(QStyleOptionComboBox *option) const; + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + virtual void changeEvent(QEvent *e); + virtual void resizeEvent(QResizeEvent *e); + virtual void paintEvent(QPaintEvent *e); + virtual void showEvent(QShowEvent *e); + virtual void hideEvent(QHideEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void keyPressEvent(QKeyEvent *e); + virtual void keyReleaseEvent(QKeyEvent *e); + virtual void wheelEvent(QWheelEvent *e); + virtual void contextMenuEvent(QContextMenuEvent *e); + virtual void inputMethodEvent(QInputMethodEvent *); + +public: + virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const; +%If (Qt_5_2_0 -) + QVariant currentData(int role = Qt::ItemDataRole::UserRole) const; +%End +%If (Qt_5_7_0 -) + QVariant inputMethodQuery(Qt::InputMethodQuery query, const QVariant &argument) const; +%End + +signals: +%If (Qt_5_14_0 -) + void textActivated(const QString &); +%End +%If (Qt_5_14_0 -) + void textHighlighted(const QString &); +%End + +public: +%If (Qt_5_15_0 -) + void setPlaceholderText(const QString &placeholderText); +%End +%If (Qt_5_15_0 -) + QString placeholderText() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcommandlinkbutton.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcommandlinkbutton.sip new file mode 100644 index 0000000..65c10c7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcommandlinkbutton.sip @@ -0,0 +1,43 @@ +// qcommandlinkbutton.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCommandLinkButton : public QPushButton +{ +%TypeHeaderCode +#include +%End + +public: + explicit QCommandLinkButton(QWidget *parent /TransferThis/ = 0); + QCommandLinkButton(const QString &text, QWidget *parent /TransferThis/ = 0); + QCommandLinkButton(const QString &text, const QString &description, QWidget *parent /TransferThis/ = 0); + virtual ~QCommandLinkButton(); + QString description() const; + void setDescription(const QString &description); + +protected: + virtual QSize sizeHint() const; + virtual int heightForWidth(int) const; + virtual QSize minimumSizeHint() const; + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcommonstyle.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcommonstyle.sip new file mode 100644 index 0000000..1045313 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcommonstyle.sip @@ -0,0 +1,50 @@ +// qcommonstyle.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCommonStyle : public QStyle +{ +%TypeHeaderCode +#include +%End + +public: + QCommonStyle(); + virtual ~QCommonStyle(); + virtual void polish(QWidget *widget); + virtual void unpolish(QWidget *widget); + virtual void polish(QApplication *app); + virtual void unpolish(QApplication *application); + virtual void polish(QPalette & /In,Out/); + virtual void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const; + virtual void drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const; + virtual QRect subElementRect(QStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const; + virtual void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget = 0) const; + virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget = 0) const; + virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget = 0) const; + virtual QSize sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = 0) const; + virtual int pixelMetric(QStyle::PixelMetric m, const QStyleOption *option = 0, const QWidget *widget = 0) const; + virtual int styleHint(QStyle::StyleHint sh, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const; + virtual QPixmap standardPixmap(QStyle::StandardPixmap sp, const QStyleOption *option = 0, const QWidget *widget = 0) const; + virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const; + virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const; + virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcompleter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcompleter.sip new file mode 100644 index 0000000..0f4dccb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qcompleter.sip @@ -0,0 +1,99 @@ +// qcompleter.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QCompleter : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum CompletionMode + { + PopupCompletion, + UnfilteredPopupCompletion, + InlineCompletion, + }; + + enum ModelSorting + { + UnsortedModel, + CaseSensitivelySortedModel, + CaseInsensitivelySortedModel, + }; + + QCompleter(QAbstractItemModel *model, QObject *parent /TransferThis/ = 0); + QCompleter(const QStringList &list, QObject *parent /TransferThis/ = 0); + QCompleter(QObject *parent /TransferThis/ = 0); + virtual ~QCompleter(); + void setWidget(QWidget *widget /Transfer/); + QWidget *widget() const; + void setModel(QAbstractItemModel *c /KeepReference/); + QAbstractItemModel *model() const; + void setCompletionMode(QCompleter::CompletionMode mode); + QCompleter::CompletionMode completionMode() const; + QAbstractItemView *popup() const; + void setPopup(QAbstractItemView *popup /Transfer/); + void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity); + Qt::CaseSensitivity caseSensitivity() const; + void setModelSorting(QCompleter::ModelSorting sorting); + QCompleter::ModelSorting modelSorting() const; + void setCompletionColumn(int column); + int completionColumn() const; + void setCompletionRole(int role); + int completionRole() const; + int completionCount() const; + bool setCurrentRow(int row); + int currentRow() const; + QModelIndex currentIndex() const; + QString currentCompletion() const; + QAbstractItemModel *completionModel() const; + QString completionPrefix() const; + virtual QString pathFromIndex(const QModelIndex &index) const; + virtual QStringList splitPath(const QString &path) const; + bool wrapAround() const; + +public slots: + void complete(const QRect &rect = QRect()); + void setCompletionPrefix(const QString &prefix); + void setWrapAround(bool wrap); + +protected: + virtual bool eventFilter(QObject *o, QEvent *e); + virtual bool event(QEvent *); + +signals: + void activated(const QString &text); + void activated(const QModelIndex &index); + void highlighted(const QString &text); + void highlighted(const QModelIndex &index); + +public: + int maxVisibleItems() const; + void setMaxVisibleItems(int maxItems); +%If (Qt_5_2_0 -) + void setFilterMode(Qt::MatchFlags filterMode); +%End +%If (Qt_5_2_0 -) + Qt::MatchFlags filterMode() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdatawidgetmapper.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdatawidgetmapper.sip new file mode 100644 index 0000000..70bbf1f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdatawidgetmapper.sip @@ -0,0 +1,69 @@ +// qdatawidgetmapper.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDataWidgetMapper : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum SubmitPolicy + { + AutoSubmit, + ManualSubmit, + }; + + explicit QDataWidgetMapper(QObject *parent /TransferThis/ = 0); + virtual ~QDataWidgetMapper(); + void setModel(QAbstractItemModel *model /KeepReference/); + QAbstractItemModel *model() const; + void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/); + QAbstractItemDelegate *itemDelegate() const; + void setRootIndex(const QModelIndex &index); + QModelIndex rootIndex() const; + void setOrientation(Qt::Orientation aOrientation); + Qt::Orientation orientation() const; + void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy); + QDataWidgetMapper::SubmitPolicy submitPolicy() const; + void addMapping(QWidget *widget, int section); + void addMapping(QWidget *widget, int section, const QByteArray &propertyName); + void removeMapping(QWidget *widget); + QByteArray mappedPropertyName(QWidget *widget) const; + int mappedSection(QWidget *widget) const; + QWidget *mappedWidgetAt(int section) const; + void clearMapping(); + int currentIndex() const; + +public slots: + void revert(); + virtual void setCurrentIndex(int index); + void setCurrentModelIndex(const QModelIndex &index); + bool submit(); + void toFirst(); + void toLast(); + void toNext(); + void toPrevious(); + +signals: + void currentIndexChanged(int index); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdatetimeedit.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdatetimeedit.sip new file mode 100644 index 0000000..f17ed96 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdatetimeedit.sip @@ -0,0 +1,154 @@ +// qdatetimeedit.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDateTimeEdit : public QAbstractSpinBox +{ +%TypeHeaderCode +#include +%End + +public: + enum Section + { + NoSection, + AmPmSection, + MSecSection, + SecondSection, + MinuteSection, + HourSection, + DaySection, + MonthSection, + YearSection, + TimeSections_Mask, + DateSections_Mask, + }; + + typedef QFlags Sections; + explicit QDateTimeEdit(QWidget *parent /TransferThis/ = 0); + QDateTimeEdit(const QDateTime &datetime, QWidget *parent /TransferThis/ = 0); + QDateTimeEdit(const QDate &date, QWidget *parent /TransferThis/ = 0); + QDateTimeEdit(const QTime &time, QWidget *parent /TransferThis/ = 0); + virtual ~QDateTimeEdit(); + QDateTime dateTime() const; + QDate date() const; + QTime time() const; + QDate minimumDate() const; + void setMinimumDate(const QDate &min); + void clearMinimumDate(); + QDate maximumDate() const; + void setMaximumDate(const QDate &max); + void clearMaximumDate(); + void setDateRange(const QDate &min, const QDate &max); + QTime minimumTime() const; + void setMinimumTime(const QTime &min); + void clearMinimumTime(); + QTime maximumTime() const; + void setMaximumTime(const QTime &max); + void clearMaximumTime(); + void setTimeRange(const QTime &min, const QTime &max); + QDateTimeEdit::Sections displayedSections() const; + QDateTimeEdit::Section currentSection() const; + void setCurrentSection(QDateTimeEdit::Section section); + QString sectionText(QDateTimeEdit::Section s) const; + QString displayFormat() const; + void setDisplayFormat(const QString &format); + bool calendarPopup() const; + void setCalendarPopup(bool enable); + void setSelectedSection(QDateTimeEdit::Section section); + virtual QSize sizeHint() const; + virtual void clear(); + virtual void stepBy(int steps); + virtual bool event(QEvent *e); + QDateTimeEdit::Section sectionAt(int index) const; + int currentSectionIndex() const; + void setCurrentSectionIndex(int index); + int sectionCount() const; + +signals: + void dateTimeChanged(const QDateTime &date); + void timeChanged(const QTime &date); + void dateChanged(const QDate &date); + +public slots: + void setDateTime(const QDateTime &dateTime); + void setDate(const QDate &date); + void setTime(const QTime &time); + +protected: + void initStyleOption(QStyleOptionSpinBox *option) const; + virtual void keyPressEvent(QKeyEvent *e); + virtual void wheelEvent(QWheelEvent *e); + virtual void focusInEvent(QFocusEvent *e); + virtual bool focusNextPrevChild(bool next); + virtual void mousePressEvent(QMouseEvent *event); + virtual void paintEvent(QPaintEvent *event); + virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; + virtual void fixup(QString &input /In,Out/) const; + virtual QDateTime dateTimeFromText(const QString &text) const; + virtual QString textFromDateTime(const QDateTime &dt) const; + virtual QAbstractSpinBox::StepEnabled stepEnabled() const; + +public: + QDateTime minimumDateTime() const; + void clearMinimumDateTime(); + void setMinimumDateTime(const QDateTime &dt); + QDateTime maximumDateTime() const; + void clearMaximumDateTime(); + void setMaximumDateTime(const QDateTime &dt); + void setDateTimeRange(const QDateTime &min, const QDateTime &max); + QCalendarWidget *calendarWidget() const; + void setCalendarWidget(QCalendarWidget *calendarWidget /Transfer/); + Qt::TimeSpec timeSpec() const; + void setTimeSpec(Qt::TimeSpec spec); +%If (Qt_5_14_0 -) + QCalendar calendar() const; +%End +%If (Qt_5_14_0 -) + void setCalendar(QCalendar calendar); +%End +}; + +class QTimeEdit : public QDateTimeEdit +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTimeEdit(QWidget *parent /TransferThis/ = 0); + QTimeEdit(const QTime &time, QWidget *parent /TransferThis/ = 0); + virtual ~QTimeEdit(); +}; + +class QDateEdit : public QDateTimeEdit +{ +%TypeHeaderCode +#include +%End + +public: + explicit QDateEdit(QWidget *parent /TransferThis/ = 0); + QDateEdit(const QDate &date, QWidget *parent /TransferThis/ = 0); + virtual ~QDateEdit(); +}; + +QFlags operator|(QDateTimeEdit::Section f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdesktopwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdesktopwidget.sip new file mode 100644 index 0000000..5d9f208 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdesktopwidget.sip @@ -0,0 +1,55 @@ +// qdesktopwidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDesktopWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDesktopWidget(); + virtual ~QDesktopWidget(); + bool isVirtualDesktop() const; + int primaryScreen() const; + int screenNumber(const QWidget *widget = 0) const; + int screenNumber(const QPoint &) const; + QWidget *screen(int screen = -1); + int screenCount() const; + const QRect screenGeometry(int screen = -1) const; + const QRect screenGeometry(const QWidget *widget) const; + const QRect screenGeometry(const QPoint &point) const; + const QRect availableGeometry(int screen = -1) const; + const QRect availableGeometry(const QWidget *widget) const; + const QRect availableGeometry(const QPoint &point) const; + +signals: + void resized(int); + void workAreaResized(int); + void screenCountChanged(int); +%If (Qt_5_6_0 -) + void primaryScreenChanged(); +%End + +protected: + virtual void resizeEvent(QResizeEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdial.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdial.sip new file mode 100644 index 0000000..f06313b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdial.sip @@ -0,0 +1,53 @@ +// qdial.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDial : public QAbstractSlider +{ +%TypeHeaderCode +#include +%End + +public: + explicit QDial(QWidget *parent /TransferThis/ = 0); + virtual ~QDial(); + bool wrapping() const; + int notchSize() const; + void setNotchTarget(double target); + qreal notchTarget() const; + bool notchesVisible() const; + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + +public slots: + void setNotchesVisible(bool visible); + void setWrapping(bool on); + +protected: + void initStyleOption(QStyleOptionSlider *option) const; + virtual bool event(QEvent *e); + virtual void resizeEvent(QResizeEvent *re); + virtual void paintEvent(QPaintEvent *pe); + virtual void mousePressEvent(QMouseEvent *me); + virtual void mouseReleaseEvent(QMouseEvent *me); + virtual void mouseMoveEvent(QMouseEvent *me); + virtual void sliderChange(QAbstractSlider::SliderChange change); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdialog.sip new file mode 100644 index 0000000..01aaf08 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdialog.sip @@ -0,0 +1,98 @@ +// qdialog.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDialog : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QDialog(); + + enum DialogCode + { + Rejected, + Accepted, + }; + + int result() const; + virtual void setVisible(bool visible); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + void setSizeGripEnabled(bool); + bool isSizeGripEnabled() const; + void setModal(bool modal); + void setResult(int r); + virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%MethodCode + // Transfer ownership back to Python (a modal dialog will probably have the + // main window as it's parent). This means the Qt dialog will be deleted when + // the Python wrapper is garbage collected. Although this is a little + // inconsistent, it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipSelfWasArg ? sipCpp->QDialog::exec() + : sipCpp->exec(); + Py_END_ALLOW_THREADS +%End + +%If (Py_v3) + virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; +%MethodCode + // Transfer ownership back to Python (a modal dialog will probably have the + // main window as it's parent). This means the Qt dialog will be deleted when + // the Python wrapper is garbage collected. Although this is a little + // inconsistent, it saves having to code it explicitly to avoid the memory + // leak. + sipTransferBack(sipSelf); + + Py_BEGIN_ALLOW_THREADS + sipRes = sipSelfWasArg ? sipCpp->QDialog::exec() + : sipCpp->exec(); + Py_END_ALLOW_THREADS +%End + +%End + +public slots: + virtual void done(int); + virtual void accept(); + virtual void reject(); + virtual void open(); + +signals: + void accepted(); + void finished(int result); + void rejected(); + +protected: + virtual void keyPressEvent(QKeyEvent *); + virtual void closeEvent(QCloseEvent *); + virtual void showEvent(QShowEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void contextMenuEvent(QContextMenuEvent *); + virtual bool eventFilter(QObject *, QEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdialogbuttonbox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdialogbuttonbox.sip new file mode 100644 index 0000000..0758ada --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdialogbuttonbox.sip @@ -0,0 +1,118 @@ +// qdialogbuttonbox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDialogButtonBox : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum ButtonLayout + { + WinLayout, + MacLayout, + KdeLayout, + GnomeLayout, +%If (Qt_5_10_0 -) + AndroidLayout, +%End + }; + + enum ButtonRole + { + InvalidRole, + AcceptRole, + RejectRole, + DestructiveRole, + ActionRole, + HelpRole, + YesRole, + NoRole, + ResetRole, + ApplyRole, + }; + + enum StandardButton + { + NoButton, + Ok, + Save, + SaveAll, + Open, + Yes, + YesToAll, + No, + NoToAll, + Abort, + Retry, + Ignore, + Close, + Cancel, + Discard, + Help, + Apply, + Reset, + RestoreDefaults, + }; + + typedef QFlags StandardButtons; + QDialogButtonBox(QWidget *parent /TransferThis/ = 0); + QDialogButtonBox(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); +%If (Qt_5_2_0 -) + QDialogButtonBox(QDialogButtonBox::StandardButtons buttons, QWidget *parent /TransferThis/ = 0); +%End +%If (Qt_5_2_0 -) + QDialogButtonBox(QDialogButtonBox::StandardButtons buttons, Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); +%End +%If (- Qt_5_2_0) + QDialogButtonBox(QFlags buttons, Qt::Orientation orientation = Qt::Horizontal, QWidget *parent /TransferThis/ = 0); +%End + virtual ~QDialogButtonBox(); + void setOrientation(Qt::Orientation orientation); + Qt::Orientation orientation() const; + void addButton(QAbstractButton *button /Transfer/, QDialogButtonBox::ButtonRole role); + QPushButton *addButton(const QString &text, QDialogButtonBox::ButtonRole role) /Transfer/; + QPushButton *addButton(QDialogButtonBox::StandardButton button) /Transfer/; + void removeButton(QAbstractButton *button /TransferBack/); + void clear(); + QList buttons() const; + QDialogButtonBox::ButtonRole buttonRole(QAbstractButton *button) const; + void setStandardButtons(QDialogButtonBox::StandardButtons buttons); + QDialogButtonBox::StandardButtons standardButtons() const; + QDialogButtonBox::StandardButton standardButton(QAbstractButton *button) const; + QPushButton *button(QDialogButtonBox::StandardButton which) const; + void setCenterButtons(bool center); + bool centerButtons() const; + +signals: + void accepted(); + void clicked(QAbstractButton *button); + void helpRequested(); + void rejected(); + +protected: + virtual void changeEvent(QEvent *event); + virtual bool event(QEvent *event); +}; + +QFlags operator|(QDialogButtonBox::StandardButton f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdirmodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdirmodel.sip new file mode 100644 index 0000000..b1f663d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdirmodel.sip @@ -0,0 +1,79 @@ +// qdirmodel.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDirModel : public QAbstractItemModel +{ +%TypeHeaderCode +#include +%End + +public: + enum Roles + { + FileIconRole, + FilePathRole, + FileNameRole, + }; + + QDirModel(const QStringList &nameFilters, QDir::Filters filters, QDir::SortFlags sort, QObject *parent /TransferThis/ = 0); + explicit QDirModel(QObject *parent /TransferThis/ = 0); + virtual ~QDirModel(); + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex parent(const QModelIndex &child) const; + QObject *parent() const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + virtual Qt::DropActions supportedDropActions() const; + void setIconProvider(QFileIconProvider *provider /KeepReference/); + QFileIconProvider *iconProvider() const; + void setNameFilters(const QStringList &filters); + QStringList nameFilters() const; + void setFilter(QDir::Filters filters); + QDir::Filters filter() const; + void setSorting(QDir::SortFlags sort); + QDir::SortFlags sorting() const; + void setResolveSymlinks(bool enable); + bool resolveSymlinks() const; + void setReadOnly(bool enable); + bool isReadOnly() const; + void setLazyChildCount(bool enable); + bool lazyChildCount() const; + void refresh(const QModelIndex &parent = QModelIndex()); + QModelIndex index(const QString &path, int column = 0) const; + bool isDir(const QModelIndex &index) const; + QModelIndex mkdir(const QModelIndex &parent, const QString &name); + bool rmdir(const QModelIndex &index); + bool remove(const QModelIndex &index); + QString filePath(const QModelIndex &index) const; + QString fileName(const QModelIndex &index) const; + QIcon fileIcon(const QModelIndex &index) const; + QFileInfo fileInfo(const QModelIndex &index) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdockwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdockwidget.sip new file mode 100644 index 0000000..fe5dadb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdockwidget.sip @@ -0,0 +1,73 @@ +// qdockwidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDockWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QDockWidget(const QString &title, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + QDockWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QDockWidget(); + QWidget *widget() const; + void setWidget(QWidget *widget /Transfer/); + + enum DockWidgetFeature + { + DockWidgetClosable, + DockWidgetMovable, + DockWidgetFloatable, + DockWidgetVerticalTitleBar, + AllDockWidgetFeatures, + NoDockWidgetFeatures, + }; + + typedef QFlags DockWidgetFeatures; + void setFeatures(QDockWidget::DockWidgetFeatures features); + QDockWidget::DockWidgetFeatures features() const; + void setFloating(bool floating); + bool isFloating() const; + void setAllowedAreas(Qt::DockWidgetAreas areas); + Qt::DockWidgetAreas allowedAreas() const; + bool isAreaAllowed(Qt::DockWidgetArea area) const; + QAction *toggleViewAction() const /Transfer/; + void setTitleBarWidget(QWidget *widget /Transfer/); + QWidget *titleBarWidget() const; + +signals: + void featuresChanged(QDockWidget::DockWidgetFeatures features); + void topLevelChanged(bool topLevel); + void allowedAreasChanged(Qt::DockWidgetAreas allowedAreas); + void dockLocationChanged(Qt::DockWidgetArea area); + void visibilityChanged(bool visible); + +protected: + void initStyleOption(QStyleOptionDockWidget *option) const; + virtual void changeEvent(QEvent *event); + virtual void closeEvent(QCloseEvent *event); + virtual void paintEvent(QPaintEvent *event); + virtual bool event(QEvent *event); +}; + +QFlags operator|(QDockWidget::DockWidgetFeature f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdrawutil.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdrawutil.sip new file mode 100644 index 0000000..ea5c5df --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qdrawutil.sip @@ -0,0 +1,39 @@ +// qdrawutil.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%ModuleCode +#include +%End + +void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2, const QPalette &pal, bool sunken = true, int lineWidth = 1, int midLineWidth = 0); +void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint &p2, const QPalette &pal, bool sunken = true, int lineWidth = 1, int midLineWidth = 0); +void qDrawShadeRect(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, int lineWidth = 1, int midLineWidth = 0, const QBrush *fill = 0); +void qDrawShadeRect(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, int lineWidth = 1, int midLineWidth = 0, const QBrush *fill = 0); +void qDrawShadePanel(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, int lineWidth = 1, const QBrush *fill = 0); +void qDrawShadePanel(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, int lineWidth = 1, const QBrush *fill = 0); +void qDrawWinButton(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, const QBrush *fill = 0); +void qDrawWinButton(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, const QBrush *fill = 0); +void qDrawWinPanel(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, const QBrush *fill = 0); +void qDrawWinPanel(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, const QBrush *fill = 0); +void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &, int lineWidth = 1, const QBrush *fill = 0); +void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &, int lineWidth = 1, const QBrush *fill = 0); +void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qerrormessage.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qerrormessage.sip new file mode 100644 index 0000000..ce8fa9f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qerrormessage.sip @@ -0,0 +1,41 @@ +// qerrormessage.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QErrorMessage : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + explicit QErrorMessage(QWidget *parent /TransferThis/ = 0); + virtual ~QErrorMessage(); + static QErrorMessage *qtHandler(); + +public slots: + void showMessage(const QString &message); + void showMessage(const QString &message, const QString &type); + +protected: + virtual void changeEvent(QEvent *e); + virtual void done(int); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfiledialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfiledialog.sip new file mode 100644 index 0000000..55e7be2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfiledialog.sip @@ -0,0 +1,355 @@ +// qfiledialog.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFileDialog : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + enum ViewMode + { + Detail, + List, + }; + + enum FileMode + { + AnyFile, + ExistingFile, + Directory, + ExistingFiles, + DirectoryOnly, + }; + + enum AcceptMode + { + AcceptOpen, + AcceptSave, + }; + + enum DialogLabel + { + LookIn, + FileName, + FileType, + Accept, + Reject, + }; + + enum Option + { + ShowDirsOnly, + DontResolveSymlinks, + DontConfirmOverwrite, + DontUseSheet, + DontUseNativeDialog, + ReadOnly, + HideNameFilterDetails, +%If (Qt_5_2_0 -) + DontUseCustomDirectoryIcons, +%End + }; + + typedef QFlags Options; + QFileDialog(QWidget *parent /TransferThis/, Qt::WindowFlags f); + QFileDialog(QWidget *parent /TransferThis/ = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString()); + virtual ~QFileDialog(); + void setDirectory(const QString &directory); + void setDirectory(const QDir &adirectory); + QDir directory() const; + void selectFile(const QString &filename); + QStringList selectedFiles() const; + void setViewMode(QFileDialog::ViewMode mode); + QFileDialog::ViewMode viewMode() const; + void setFileMode(QFileDialog::FileMode mode); + QFileDialog::FileMode fileMode() const; + void setAcceptMode(QFileDialog::AcceptMode mode); + QFileDialog::AcceptMode acceptMode() const; + void setDefaultSuffix(const QString &suffix); + QString defaultSuffix() const; + void setHistory(const QStringList &paths); + QStringList history() const; + void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/); + QAbstractItemDelegate *itemDelegate() const; + void setIconProvider(QFileIconProvider *provider /KeepReference/); + QFileIconProvider *iconProvider() const; + void setLabelText(QFileDialog::DialogLabel label, const QString &text); + QString labelText(QFileDialog::DialogLabel label) const; + +signals: + void currentChanged(const QString &path); + void directoryEntered(const QString &directory); + void filesSelected(const QStringList &files); + void filterSelected(const QString &filter); + void fileSelected(const QString &file); + +public: + static QString getExistingDirectory(QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), QFileDialog::Options options = QFileDialog::ShowDirsOnly) /ReleaseGIL/; +%If (Qt_5_2_0 -) + static QUrl getExistingDirectoryUrl(QWidget *parent = 0, const QString &caption = QString(), const QUrl &directory = QUrl(), QFileDialog::Options options = QFileDialog::ShowDirsOnly, const QStringList &supportedSchemes = QStringList()) /ReleaseGIL/; +%End + static SIP_PYTUPLE getOpenFileName(QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = 0) /TypeHint="Tuple[QString, QString]", ReleaseGIL/; +%MethodCode + QString *name; + QString *filter = new QString(*a4); + + Py_BEGIN_ALLOW_THREADS + + name = new QString(QFileDialog::getOpenFileName(a0, *a1, *a2, *a3, filter, *a5)); + + Py_END_ALLOW_THREADS + + PyObject *name_obj = sipConvertFromNewType(name, sipType_QString, NULL); + PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); + + if (name_obj && filter_obj) + sipRes = PyTuple_Pack(2, name_obj, filter_obj); + + Py_XDECREF(name_obj); + Py_XDECREF(filter_obj); +%End + + static SIP_PYTUPLE getOpenFileNames(QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = 0) /TypeHint="Tuple[QStringList, QString]", ReleaseGIL/; +%MethodCode + QStringList *names; + QString *filter = new QString(*a4); + + Py_BEGIN_ALLOW_THREADS + + names = new QStringList(QFileDialog::getOpenFileNames(a0, *a1, *a2, *a3, filter, *a5)); + + Py_END_ALLOW_THREADS + + PyObject *names_obj = sipConvertFromNewType(names, sipType_QStringList, NULL); + PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); + + if (names_obj && filter_obj) + sipRes = PyTuple_Pack(2, names_obj, filter_obj); + + Py_XDECREF(names_obj); + Py_XDECREF(filter_obj); +%End + + static SIP_PYTUPLE getSaveFileName(QWidget *parent = 0, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = 0) /TypeHint="Tuple[QString, QString]", ReleaseGIL/; +%MethodCode + QString *name; + QString *filter = new QString(*a4); + + Py_BEGIN_ALLOW_THREADS + + name = new QString(QFileDialog::getSaveFileName(a0, *a1, *a2, *a3, filter, *a5)); + + Py_END_ALLOW_THREADS + + PyObject *name_obj = sipConvertFromNewType(name, sipType_QString, NULL); + PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); + + if (name_obj && filter_obj) + sipRes = PyTuple_Pack(2, name_obj, filter_obj); + + Py_XDECREF(name_obj); + Py_XDECREF(filter_obj); +%End + +protected: + virtual void done(int result); + virtual void accept(); + virtual void changeEvent(QEvent *e); + +public: + void setSidebarUrls(const QList &urls); + QList sidebarUrls() const; + QByteArray saveState() const; + bool restoreState(const QByteArray &state); + void setProxyModel(QAbstractProxyModel *model /Transfer/); + QAbstractProxyModel *proxyModel() const; + void setNameFilter(const QString &filter); + void setNameFilters(const QStringList &filters); + QStringList nameFilters() const; + void selectNameFilter(const QString &filter); + QString selectedNameFilter() const; + QDir::Filters filter() const; + void setFilter(QDir::Filters filters); + void setOption(QFileDialog::Option option, bool on = true); + bool testOption(QFileDialog::Option option) const; + void setOptions(QFileDialog::Options options); + QFileDialog::Options options() const; + virtual void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + virtual void setVisible(bool visible); +%If (Qt_5_2_0 -) + void setDirectoryUrl(const QUrl &directory); +%End +%If (Qt_5_2_0 -) + QUrl directoryUrl() const; +%End +%If (Qt_5_2_0 -) + void selectUrl(const QUrl &url); +%End +%If (Qt_5_2_0 -) + QList selectedUrls() const; +%End +%If (Qt_5_2_0 -) + void setMimeTypeFilters(const QStringList &filters); +%End +%If (Qt_5_2_0 -) + QStringList mimeTypeFilters() const; +%End +%If (Qt_5_2_0 -) + void selectMimeTypeFilter(const QString &filter); +%End + +signals: +%If (Qt_5_2_0 -) + void urlSelected(const QUrl &url); +%End +%If (Qt_5_2_0 -) + void urlsSelected(const QList &urls); +%End +%If (Qt_5_2_0 -) + void currentUrlChanged(const QUrl &url); +%End +%If (Qt_5_2_0 -) + void directoryUrlEntered(const QUrl &directory); +%End + +public: +%If (Qt_5_2_0 -) + static SIP_PYTUPLE getOpenFileUrl(QWidget *parent = 0, const QString &caption = QString(), const QUrl &directory = QUrl(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = 0, const QStringList &supportedSchemes = QStringList()) /TypeHint="Tuple[QUrl, QString]", ReleaseGIL/; +%MethodCode + QUrl *url; + QString *filter = new QString(*a4); + + Py_BEGIN_ALLOW_THREADS + + url = new QUrl(QFileDialog::getOpenFileUrl(a0, *a1, *a2, *a3, filter, *a5, *a6)); + + Py_END_ALLOW_THREADS + + PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL); + PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); + + if (url_obj && filter_obj) + sipRes = PyTuple_Pack(2, url_obj, filter_obj); + + Py_XDECREF(url_obj); + Py_XDECREF(filter_obj); +%End + +%End +%If (Qt_5_2_0 -) + static SIP_PYTUPLE getOpenFileUrls(QWidget *parent = 0, const QString &caption = QString(), const QUrl &directory = QUrl(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = 0, const QStringList &supportedSchemes = QStringList()) /TypeHint="Tuple[List[QUrl], QString]", ReleaseGIL/; +%MethodCode + QList url_list; + QString *filter = new QString(*a4); + + Py_BEGIN_ALLOW_THREADS + + url_list = QFileDialog::getOpenFileUrls(a0, *a1, *a2, *a3, filter, *a5, *a6); + + Py_END_ALLOW_THREADS + + PyObject *url_list_obj = PyList_New(url_list.size()); + + if (url_list_obj) + { + for (int i = 0; i < url_list.size(); ++i) + { + QUrl *url = new QUrl(url_list.at(i)); + PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL); + + if (!url_obj) + { + delete url; + Py_DECREF(url_list_obj); + url_list_obj = 0; + break; + } + + PyList_SetItem(url_list_obj, i, url_obj); + } + } + + PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); + + if (url_list_obj && filter_obj) + sipRes = PyTuple_Pack(2, url_list_obj, filter_obj); + + Py_XDECREF(url_list_obj); + Py_XDECREF(filter_obj); +%End + +%End +%If (Qt_5_2_0 -) + static SIP_PYTUPLE getSaveFileUrl(QWidget *parent = 0, const QString &caption = QString(), const QUrl &directory = QUrl(), const QString &filter = QString(), const QString &initialFilter = QString(), Options options = 0, const QStringList &supportedSchemes = QStringList()) /TypeHint="Tuple[QUrl, QString]", ReleaseGIL/; +%MethodCode + QUrl *url; + QString *filter = new QString(*a4); + + Py_BEGIN_ALLOW_THREADS + + url = new QUrl(QFileDialog::getSaveFileUrl(a0, *a1, *a2, *a3, filter, *a5, *a6)); + + Py_END_ALLOW_THREADS + + PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL); + PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL); + + if (url_obj && filter_obj) + sipRes = PyTuple_Pack(2, url_obj, filter_obj); + + Py_XDECREF(url_obj); + Py_XDECREF(filter_obj); +%End + +%End +%If (Qt_5_6_0 -) + void setSupportedSchemes(const QStringList &schemes); +%End +%If (Qt_5_6_0 -) + QStringList supportedSchemes() const; +%End +%If (Qt_5_9_0 -) + QString selectedMimeTypeFilter() const; +%End +%If (Qt_5_14_0 -) + static void saveFileContent(const QByteArray &fileContent, const QString &fileNameHint = QString()) /ReleaseGIL/; +%End +}; + +QFlags operator|(QFileDialog::Option f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfileiconprovider.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfileiconprovider.sip new file mode 100644 index 0000000..04aa291 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfileiconprovider.sip @@ -0,0 +1,71 @@ +// qfileiconprovider.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFileIconProvider +{ +%TypeHeaderCode +#include +%End + +public: + QFileIconProvider(); + virtual ~QFileIconProvider(); + + enum IconType + { + Computer, + Desktop, + Trashcan, + Network, + Drive, + Folder, + File, + }; + + virtual QIcon icon(QFileIconProvider::IconType type) const; + virtual QIcon icon(const QFileInfo &info) const; + virtual QString type(const QFileInfo &info) const; +%If (Qt_5_2_0 -) + + enum Option + { + DontUseCustomDirectoryIcons, + }; + +%End +%If (Qt_5_2_0 -) + typedef QFlags Options; +%End +%If (Qt_5_2_0 -) + void setOptions(QFileIconProvider::Options options); +%End +%If (Qt_5_2_0 -) + QFileIconProvider::Options options() const; +%End + +private: + QFileIconProvider(const QFileIconProvider &); +}; + +%If (Qt_5_2_0 -) +QFlags operator|(QFileIconProvider::Option f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfilesystemmodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfilesystemmodel.sip new file mode 100644 index 0000000..e4b6ee6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfilesystemmodel.sip @@ -0,0 +1,128 @@ +// qfilesystemmodel.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFileSystemModel : public QAbstractItemModel +{ +%TypeHeaderCode +#include +%End + +public: + enum Roles + { + FileIconRole, + FilePathRole, + FileNameRole, + FilePermissions, + }; + + explicit QFileSystemModel(QObject *parent /TransferThis/ = 0); + virtual ~QFileSystemModel(); + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + QModelIndex index(const QString &path, int column = 0) const; + virtual QModelIndex parent(const QModelIndex &child) const; + virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + virtual bool canFetchMore(const QModelIndex &parent) const; + virtual void fetchMore(const QModelIndex &parent); + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant myComputer(int role = Qt::ItemDataRole::DisplayRole) const; + virtual QVariant data(const QModelIndex &index, int role = Qt::ItemDataRole::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::ItemDataRole::EditRole); + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::ItemDataRole::DisplayRole) const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QModelIndexList &indexes) const; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + virtual Qt::DropActions supportedDropActions() const; + QModelIndex setRootPath(const QString &path); + QString rootPath() const; + QDir rootDirectory() const; + void setIconProvider(QFileIconProvider *provider /KeepReference/); + QFileIconProvider *iconProvider() const; + void setFilter(QDir::Filters filters); + QDir::Filters filter() const; + void setResolveSymlinks(bool enable); + bool resolveSymlinks() const; + void setReadOnly(bool enable); + bool isReadOnly() const; + void setNameFilterDisables(bool enable); + bool nameFilterDisables() const; + void setNameFilters(const QStringList &filters); + QStringList nameFilters() const; + QString filePath(const QModelIndex &index) const; + bool isDir(const QModelIndex &index) const; + qint64 size(const QModelIndex &index) const; + QString type(const QModelIndex &index) const; + QDateTime lastModified(const QModelIndex &index) const; + QModelIndex mkdir(const QModelIndex &parent, const QString &name); + QFileDevice::Permissions permissions(const QModelIndex &index) const; + bool rmdir(const QModelIndex &index); + QString fileName(const QModelIndex &aindex) const; + QIcon fileIcon(const QModelIndex &aindex) const; + QFileInfo fileInfo(const QModelIndex &aindex) const; + bool remove(const QModelIndex &index); + +signals: + void fileRenamed(const QString &path, const QString &oldName, const QString &newName); + void rootPathChanged(const QString &newPath); + void directoryLoaded(const QString &path); + +protected: + virtual bool event(QEvent *event); + virtual void timerEvent(QTimerEvent *event); + +public: +%If (Qt_5_7_0 -) + virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; +%End +%If (Qt_5_14_0 -) + + enum Option + { + DontWatchForChanges, + DontResolveSymlinks, + DontUseCustomDirectoryIcons, + }; + +%End +%If (Qt_5_14_0 -) + typedef QFlags Options; +%End +%If (Qt_5_14_0 -) + void setOption(QFileSystemModel::Option option, bool on = true); +%End +%If (Qt_5_14_0 -) + bool testOption(QFileSystemModel::Option option) const; +%End +%If (Qt_5_14_0 -) + void setOptions(QFileSystemModel::Options options); +%End +%If (Qt_5_14_0 -) + QFileSystemModel::Options options() const; +%End +}; + +%If (Qt_5_14_0 -) +QFlags operator|(QFileSystemModel::Option f1, QFlags f2); +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfocusframe.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfocusframe.sip new file mode 100644 index 0000000..ba7f2ca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfocusframe.sip @@ -0,0 +1,40 @@ +// qfocusframe.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFocusFrame : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QFocusFrame(QWidget *parent /TransferThis/ = 0); + virtual ~QFocusFrame(); + void setWidget(QWidget *widget); + QWidget *widget() const; + +protected: + void initStyleOption(QStyleOption *option) const; + virtual bool eventFilter(QObject *, QEvent *); + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfontcombobox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfontcombobox.sip new file mode 100644 index 0000000..fccf5af --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfontcombobox.sip @@ -0,0 +1,59 @@ +// qfontcombobox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFontComboBox : public QComboBox +{ +%TypeHeaderCode +#include +%End + +public: + enum FontFilter + { + AllFonts, + ScalableFonts, + NonScalableFonts, + MonospacedFonts, + ProportionalFonts, + }; + + QFontComboBox::FontFilters fontFilters() const; + explicit QFontComboBox(QWidget *parent /TransferThis/ = 0); + virtual ~QFontComboBox(); + void setWritingSystem(QFontDatabase::WritingSystem); + QFontDatabase::WritingSystem writingSystem() const; + typedef QFlags FontFilters; + void setFontFilters(QFontComboBox::FontFilters filters); + QFont currentFont() const; + virtual QSize sizeHint() const; + +public slots: + void setCurrentFont(const QFont &f); + +signals: + void currentFontChanged(const QFont &f); + +protected: + virtual bool event(QEvent *e); +}; + +QFlags operator|(QFontComboBox::FontFilter f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfontdialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfontdialog.sip new file mode 100644 index 0000000..36ea1de --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qfontdialog.sip @@ -0,0 +1,91 @@ +// qfontdialog.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFontDialog : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + enum FontDialogOption + { + NoButtons, + DontUseNativeDialog, +%If (Qt_5_2_0 -) + ScalableFonts, +%End +%If (Qt_5_2_0 -) + NonScalableFonts, +%End +%If (Qt_5_2_0 -) + MonospacedFonts, +%End +%If (Qt_5_2_0 -) + ProportionalFonts, +%End + }; + + typedef QFlags FontDialogOptions; + explicit QFontDialog(QWidget *parent /TransferThis/ = 0); + QFontDialog(const QFont &initial, QWidget *parent /TransferThis/ = 0); + virtual ~QFontDialog(); + static QFont getFont(bool *ok, const QFont &initial, QWidget *parent = 0, const QString &caption = QString(), QFontDialog::FontDialogOptions options = QFontDialog::FontDialogOptions()) /ReleaseGIL/; + static QFont getFont(bool *ok, QWidget *parent = 0) /ReleaseGIL/; + +protected: + virtual void changeEvent(QEvent *e); + virtual void done(int result); + virtual bool eventFilter(QObject *object, QEvent *event); + +public: + void setCurrentFont(const QFont &font); + QFont currentFont() const; + QFont selectedFont() const; + void setOption(QFontDialog::FontDialogOption option, bool on = true); + bool testOption(QFontDialog::FontDialogOption option) const; + void setOptions(QFontDialog::FontDialogOptions options); + QFontDialog::FontDialogOptions options() const; + virtual void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + virtual void setVisible(bool visible); + +signals: + void currentFontChanged(const QFont &font); + void fontSelected(const QFont &font); +}; + +QFlags operator|(QFontDialog::FontDialogOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qformlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qformlayout.sip new file mode 100644 index 0000000..ddb68cc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qformlayout.sip @@ -0,0 +1,131 @@ +// qformlayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFormLayout : public QLayout +{ +%TypeHeaderCode +#include +%End + +public: + enum FieldGrowthPolicy + { + FieldsStayAtSizeHint, + ExpandingFieldsGrow, + AllNonFixedFieldsGrow, + }; + + enum RowWrapPolicy + { + DontWrapRows, + WrapLongRows, + WrapAllRows, + }; + + enum ItemRole + { + LabelRole, + FieldRole, + SpanningRole, + }; + + explicit QFormLayout(QWidget *parent /TransferThis/ = 0); + virtual ~QFormLayout(); + void setFieldGrowthPolicy(QFormLayout::FieldGrowthPolicy policy); + QFormLayout::FieldGrowthPolicy fieldGrowthPolicy() const; + void setRowWrapPolicy(QFormLayout::RowWrapPolicy policy); + QFormLayout::RowWrapPolicy rowWrapPolicy() const; + void setLabelAlignment(Qt::Alignment alignment); + Qt::Alignment labelAlignment() const; + void setFormAlignment(Qt::Alignment alignment); + Qt::Alignment formAlignment() const; + void setHorizontalSpacing(int spacing); + int horizontalSpacing() const; + void setVerticalSpacing(int spacing); + int verticalSpacing() const; + int spacing() const; + void setSpacing(int); + void addRow(QWidget *label /Transfer/, QWidget *field /Transfer/); + void addRow(QWidget *label /Transfer/, QLayout *field /Transfer/); + void addRow(const QString &labelText, QWidget *field /Transfer/); + void addRow(const QString &labelText, QLayout *field /Transfer/); + void addRow(QWidget *widget /Transfer/); + void addRow(QLayout *layout /Transfer/); + void insertRow(int row, QWidget *label /Transfer/, QWidget *field /Transfer/); + void insertRow(int row, QWidget *label /Transfer/, QLayout *field /Transfer/); + void insertRow(int row, const QString &labelText, QWidget *field /Transfer/); + void insertRow(int row, const QString &labelText, QLayout *field /Transfer/); + void insertRow(int row, QWidget *widget /Transfer/); + void insertRow(int row, QLayout *layout /Transfer/); + void setItem(int row, QFormLayout::ItemRole role, QLayoutItem *item /Transfer/); + void setWidget(int row, QFormLayout::ItemRole role, QWidget *widget /Transfer/); + void setLayout(int row, QFormLayout::ItemRole role, QLayout *layout /Transfer/); + QLayoutItem *itemAt(int row, QFormLayout::ItemRole role) const; + void getItemPosition(int index, int *rowPtr, QFormLayout::ItemRole *rolePtr) const; + void getWidgetPosition(QWidget *widget, int *rowPtr, QFormLayout::ItemRole *rolePtr) const; + void getLayoutPosition(QLayout *layout, int *rowPtr, QFormLayout::ItemRole *rolePtr) const; + QWidget *labelForField(QWidget *field) const; + QWidget *labelForField(QLayout *field) const; + virtual void addItem(QLayoutItem *item /Transfer/); + virtual QLayoutItem *itemAt(int index) const; + virtual QLayoutItem *takeAt(int index) /TransferBack/; + virtual void setGeometry(const QRect &rect); + virtual QSize minimumSize() const; + virtual QSize sizeHint() const; + virtual void invalidate(); + virtual bool hasHeightForWidth() const; + virtual int heightForWidth(int width) const; + virtual Qt::Orientations expandingDirections() const; + virtual int count() const; + int rowCount() const; +%If (Qt_5_8_0 -) + + struct TakeRowResult + { +%TypeHeaderCode +#include +%End + + QLayoutItem *labelItem; + QLayoutItem *fieldItem; + }; + +%End +%If (Qt_5_8_0 -) + void removeRow(int row); +%End +%If (Qt_5_8_0 -) + void removeRow(QWidget *widget); +%End +%If (Qt_5_8_0 -) + void removeRow(QLayout *layout); +%End +%If (Qt_5_8_0 -) + QFormLayout::TakeRowResult takeRow(int row); +%End +%If (Qt_5_8_0 -) + QFormLayout::TakeRowResult takeRow(QWidget *widget); +%End +%If (Qt_5_8_0 -) + QFormLayout::TakeRowResult takeRow(QLayout *layout); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qframe.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qframe.sip new file mode 100644 index 0000000..1d0042b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qframe.sip @@ -0,0 +1,79 @@ +// qframe.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QFrame : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum Shadow + { + Plain, + Raised, + Sunken, + }; + + enum Shape + { + NoFrame, + Box, + Panel, + WinPanel, + HLine, + VLine, + StyledPanel, + }; + + enum StyleMask + { + Shadow_Mask, + Shape_Mask, + }; + + QFrame(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QFrame(); + int frameStyle() const; + void setFrameStyle(int); + int frameWidth() const; + virtual QSize sizeHint() const; + QFrame::Shape frameShape() const; + void setFrameShape(QFrame::Shape); + QFrame::Shadow frameShadow() const; + void setFrameShadow(QFrame::Shadow); + int lineWidth() const; + void setLineWidth(int); + int midLineWidth() const; + void setMidLineWidth(int); + QRect frameRect() const; + void setFrameRect(const QRect &); + +protected: + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); + virtual void changeEvent(QEvent *); + void drawFrame(QPainter *); +%If (Qt_5_5_0 -) + void initStyleOption(QStyleOptionFrame *option) const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgesture.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgesture.sip new file mode 100644 index 0000000..1958232 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgesture.sip @@ -0,0 +1,191 @@ +// qgesture.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGesture : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGesture(QObject *parent /TransferThis/ = 0); + virtual ~QGesture(); + Qt::GestureType gestureType() const; + Qt::GestureState state() const; + QPointF hotSpot() const; + void setHotSpot(const QPointF &value); + bool hasHotSpot() const; + void unsetHotSpot(); + + enum GestureCancelPolicy + { + CancelNone, + CancelAllInContext, + }; + + void setGestureCancelPolicy(QGesture::GestureCancelPolicy policy); + QGesture::GestureCancelPolicy gestureCancelPolicy() const; +}; + +class QPanGesture : public QGesture +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPanGesture(QObject *parent /TransferThis/ = 0); + virtual ~QPanGesture(); + QPointF lastOffset() const; + QPointF offset() const; + QPointF delta() const; + qreal acceleration() const; + void setLastOffset(const QPointF &value); + void setOffset(const QPointF &value); + void setAcceleration(qreal value); +}; + +class QPinchGesture : public QGesture +{ +%TypeHeaderCode +#include +%End + +public: + enum ChangeFlag + { + ScaleFactorChanged, + RotationAngleChanged, + CenterPointChanged, + }; + + typedef QFlags ChangeFlags; + explicit QPinchGesture(QObject *parent /TransferThis/ = 0); + virtual ~QPinchGesture(); + QPinchGesture::ChangeFlags totalChangeFlags() const; + void setTotalChangeFlags(QPinchGesture::ChangeFlags value); + QPinchGesture::ChangeFlags changeFlags() const; + void setChangeFlags(QPinchGesture::ChangeFlags value); + QPointF startCenterPoint() const; + QPointF lastCenterPoint() const; + QPointF centerPoint() const; + void setStartCenterPoint(const QPointF &value); + void setLastCenterPoint(const QPointF &value); + void setCenterPoint(const QPointF &value); + qreal totalScaleFactor() const; + qreal lastScaleFactor() const; + qreal scaleFactor() const; + void setTotalScaleFactor(qreal value); + void setLastScaleFactor(qreal value); + void setScaleFactor(qreal value); + qreal totalRotationAngle() const; + qreal lastRotationAngle() const; + qreal rotationAngle() const; + void setTotalRotationAngle(qreal value); + void setLastRotationAngle(qreal value); + void setRotationAngle(qreal value); +}; + +class QSwipeGesture : public QGesture +{ +%TypeHeaderCode +#include +%End + +public: + enum SwipeDirection + { + NoDirection, + Left, + Right, + Up, + Down, + }; + + explicit QSwipeGesture(QObject *parent /TransferThis/ = 0); + virtual ~QSwipeGesture(); + QSwipeGesture::SwipeDirection horizontalDirection() const; + QSwipeGesture::SwipeDirection verticalDirection() const; + qreal swipeAngle() const; + void setSwipeAngle(qreal value); +}; + +class QTapGesture : public QGesture +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTapGesture(QObject *parent /TransferThis/ = 0); + virtual ~QTapGesture(); + QPointF position() const; + void setPosition(const QPointF &pos); +}; + +class QTapAndHoldGesture : public QGesture +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTapAndHoldGesture(QObject *parent /TransferThis/ = 0); + virtual ~QTapAndHoldGesture(); + QPointF position() const; + void setPosition(const QPointF &pos); + static void setTimeout(int msecs); + static int timeout(); +}; + +class QGestureEvent : public QEvent +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + sipType = ((sipCpp->type() == QEvent::Gesture) ? sipType_QGestureEvent : 0); +%End + +public: + explicit QGestureEvent(const QList &gestures); + virtual ~QGestureEvent(); + QList gestures() const; + QGesture *gesture(Qt::GestureType type) const; + QList activeGestures() const; + QList canceledGestures() const; + void setAccepted(bool accepted); + bool isAccepted() const; + void accept(); + void ignore(); + void setAccepted(QGesture *, bool); + void accept(QGesture *); + void ignore(QGesture *); + bool isAccepted(QGesture *) const; + void setAccepted(Qt::GestureType, bool); + void accept(Qt::GestureType); + void ignore(Qt::GestureType); + bool isAccepted(Qt::GestureType) const; + QWidget *widget() const; + QPointF mapToGraphicsScene(const QPointF &gesturePoint) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgesturerecognizer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgesturerecognizer.sip new file mode 100644 index 0000000..52f74a8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgesturerecognizer.sip @@ -0,0 +1,50 @@ +// qgesturerecognizer.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGestureRecognizer /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + enum ResultFlag + { + Ignore, + MayBeGesture, + TriggerGesture, + FinishGesture, + CancelGesture, + ConsumeEventHint, + }; + + typedef QFlags Result; + QGestureRecognizer(); + virtual ~QGestureRecognizer(); + virtual QGesture *create(QObject *target) /Factory/; + virtual QFlags recognize(QGesture *state, QObject *watched, QEvent *event) = 0; + virtual void reset(QGesture *state); + static Qt::GestureType registerRecognizer(QGestureRecognizer *recognizer /Transfer/); + static void unregisterRecognizer(Qt::GestureType type); +}; + +QFlags operator|(QGestureRecognizer::ResultFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsanchorlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsanchorlayout.sip new file mode 100644 index 0000000..2b1db74 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsanchorlayout.sip @@ -0,0 +1,67 @@ +// qgraphicsanchorlayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsAnchor : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QGraphicsAnchor(); + void setSpacing(qreal spacing); + void unsetSpacing(); + qreal spacing() const; + void setSizePolicy(QSizePolicy::Policy policy); + QSizePolicy::Policy sizePolicy() const; + +private: + QGraphicsAnchor(QGraphicsAnchorLayout *parent); +}; + +class QGraphicsAnchorLayout : public QGraphicsLayout +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsAnchorLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0); + virtual ~QGraphicsAnchorLayout(); + QGraphicsAnchor *addAnchor(QGraphicsLayoutItem *firstItem /Transfer/, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem /Transfer/, Qt::AnchorPoint secondEdge); + QGraphicsAnchor *anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge); + void addCornerAnchors(QGraphicsLayoutItem *firstItem /Transfer/, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem /Transfer/, Qt::Corner secondCorner); + void addAnchors(QGraphicsLayoutItem *firstItem /Transfer/, QGraphicsLayoutItem *secondItem /Transfer/, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical); + void setHorizontalSpacing(qreal spacing); + void setVerticalSpacing(qreal spacing); + void setSpacing(qreal spacing); + qreal horizontalSpacing() const; + qreal verticalSpacing() const; + virtual void removeAt(int index); + virtual void setGeometry(const QRectF &rect); + virtual int count() const; + virtual QGraphicsLayoutItem *itemAt(int index) const; + virtual void invalidate(); + +protected: + virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicseffect.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicseffect.sip new file mode 100644 index 0000000..f711c70 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicseffect.sip @@ -0,0 +1,187 @@ +// qgraphicseffect.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsEffect : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum ChangeFlag + { + SourceAttached, + SourceDetached, + SourceBoundingRectChanged, + SourceInvalidated, + }; + + typedef QFlags ChangeFlags; + + enum PixmapPadMode + { + NoPad, + PadToTransparentBorder, + PadToEffectiveBoundingRect, + }; + + QGraphicsEffect(QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsEffect(); + virtual QRectF boundingRectFor(const QRectF &sourceRect) const; + QRectF boundingRect() const; + bool isEnabled() const; + +public slots: + void setEnabled(bool enable); + void update(); + +signals: + void enabledChanged(bool enabled); + +protected: + virtual void draw(QPainter *painter) = 0; + virtual void sourceChanged(QGraphicsEffect::ChangeFlags flags); + void updateBoundingRect(); + bool sourceIsPixmap() const; + QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const; + void drawSource(QPainter *painter); + QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset /Out/ = 0, QGraphicsEffect::PixmapPadMode mode = QGraphicsEffect::PadToEffectiveBoundingRect) const; +}; + +QFlags operator|(QGraphicsEffect::ChangeFlag f1, QFlags f2); + +class QGraphicsColorizeEffect : public QGraphicsEffect +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsColorizeEffect(QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsColorizeEffect(); + QColor color() const; + qreal strength() const; + +public slots: + void setColor(const QColor &c); + void setStrength(qreal strength); + +signals: + void colorChanged(const QColor &color); + void strengthChanged(qreal strength); + +protected: + virtual void draw(QPainter *painter); +}; + +class QGraphicsBlurEffect : public QGraphicsEffect +{ +%TypeHeaderCode +#include +%End + +public: + enum BlurHint + { + PerformanceHint, + QualityHint, + AnimationHint, + }; + + typedef QFlags BlurHints; + QGraphicsBlurEffect(QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsBlurEffect(); + virtual QRectF boundingRectFor(const QRectF &rect) const; + qreal blurRadius() const; + QGraphicsBlurEffect::BlurHints blurHints() const; + +public slots: + void setBlurRadius(qreal blurRadius); + void setBlurHints(QGraphicsBlurEffect::BlurHints hints); + +signals: + void blurRadiusChanged(qreal blurRadius); + void blurHintsChanged(QGraphicsBlurEffect::BlurHints hints /ScopesStripped=1/); + +protected: + virtual void draw(QPainter *painter); +}; + +QFlags operator|(QGraphicsBlurEffect::BlurHint f1, QFlags f2); + +class QGraphicsDropShadowEffect : public QGraphicsEffect +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsDropShadowEffect(QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsDropShadowEffect(); + virtual QRectF boundingRectFor(const QRectF &rect) const; + QPointF offset() const; + qreal xOffset() const; + qreal yOffset() const; + qreal blurRadius() const; + QColor color() const; + +public slots: + void setOffset(const QPointF &ofs); + void setOffset(qreal dx, qreal dy); + void setOffset(qreal d); + void setXOffset(qreal dx); + void setYOffset(qreal dy); + void setBlurRadius(qreal blurRadius); + void setColor(const QColor &color); + +signals: + void offsetChanged(const QPointF &offset); + void blurRadiusChanged(qreal blurRadius); + void colorChanged(const QColor &color); + +protected: + virtual void draw(QPainter *painter); +}; + +class QGraphicsOpacityEffect : public QGraphicsEffect +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsOpacityEffect(QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsOpacityEffect(); + qreal opacity() const; + QBrush opacityMask() const; + +public slots: + void setOpacity(qreal opacity); + void setOpacityMask(const QBrush &mask); + +signals: + void opacityChanged(qreal opacity); + void opacityMaskChanged(const QBrush &mask); + +protected: + virtual void draw(QPainter *painter); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsgridlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsgridlayout.sip new file mode 100644 index 0000000..a7a1a25 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsgridlayout.sip @@ -0,0 +1,100 @@ +// qgraphicsgridlayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsGridLayout : public QGraphicsLayout +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsGridLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0); + virtual ~QGraphicsGridLayout(); + void addItem(QGraphicsLayoutItem *item /Transfer/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()); + void addItem(QGraphicsLayoutItem *item /Transfer/, int row, int column, Qt::Alignment alignment = Qt::Alignment()); + void setHorizontalSpacing(qreal spacing); + qreal horizontalSpacing() const; + void setVerticalSpacing(qreal spacing); + qreal verticalSpacing() const; + void setSpacing(qreal spacing); + void setRowSpacing(int row, qreal spacing); + qreal rowSpacing(int row) const; + void setColumnSpacing(int column, qreal spacing); + qreal columnSpacing(int column) const; + void setRowStretchFactor(int row, int stretch); + int rowStretchFactor(int row) const; + void setColumnStretchFactor(int column, int stretch); + int columnStretchFactor(int column) const; + void setRowMinimumHeight(int row, qreal height); + qreal rowMinimumHeight(int row) const; + void setRowPreferredHeight(int row, qreal height); + qreal rowPreferredHeight(int row) const; + void setRowMaximumHeight(int row, qreal height); + qreal rowMaximumHeight(int row) const; + void setRowFixedHeight(int row, qreal height); + void setColumnMinimumWidth(int column, qreal width); + qreal columnMinimumWidth(int column) const; + void setColumnPreferredWidth(int column, qreal width); + qreal columnPreferredWidth(int column) const; + void setColumnMaximumWidth(int column, qreal width); + qreal columnMaximumWidth(int column) const; + void setColumnFixedWidth(int column, qreal width); + void setRowAlignment(int row, Qt::Alignment alignment); + Qt::Alignment rowAlignment(int row) const; + void setColumnAlignment(int column, Qt::Alignment alignment); + Qt::Alignment columnAlignment(int column) const; + void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment); + Qt::Alignment alignment(QGraphicsLayoutItem *item) const; + int rowCount() const; + int columnCount() const; + QGraphicsLayoutItem *itemAt(int row, int column) const; + virtual int count() const; + virtual QGraphicsLayoutItem *itemAt(int index) const; + virtual void removeAt(int index); +%MethodCode + // The ownership of any existing item must be passed back to Python. + QGraphicsLayoutItem *itm; + + if (a0 < sipCpp->count()) + itm = sipCpp->itemAt(a0); + else + itm = 0; + + Py_BEGIN_ALLOW_THREADS + sipSelfWasArg ? sipCpp->QGraphicsGridLayout::removeAt(a0) + : sipCpp->removeAt(a0); + Py_END_ALLOW_THREADS + + if (itm) + { + PyObject *itmo = sipGetPyObject(itm, sipType_QGraphicsLayoutItem); + + if (itmo) + sipTransferBack(itmo); + } +%End + + virtual void invalidate(); + virtual void setGeometry(const QRectF &rect); + virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; + void removeItem(QGraphicsLayoutItem *item /TransferBack/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsitem.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsitem.sip new file mode 100644 index 0000000..88fe99e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsitem.sip @@ -0,0 +1,703 @@ +// qgraphicsitem.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsItem /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + switch (sipCpp->type()) + { + case 2: + sipType = sipType_QGraphicsPathItem; + break; + + case 3: + sipType = sipType_QGraphicsRectItem; + break; + + case 4: + sipType = sipType_QGraphicsEllipseItem; + break; + + case 5: + sipType = sipType_QGraphicsPolygonItem; + break; + + case 6: + sipType = sipType_QGraphicsLineItem; + break; + + case 7: + sipType = sipType_QGraphicsPixmapItem; + break; + + case 8: + // Switch to the QObject convertor. + *sipCppRet = static_cast(sipCpp); + sipType = sipType_QObject; + break; + + case 9: + sipType = sipType_QGraphicsSimpleTextItem; + break; + + case 10: + sipType = sipType_QGraphicsItemGroup; + break; + + case 11: + // Switch to the QObject convertor. + *sipCppRet = static_cast(sipCpp); + sipType = sipType_QObject; + break; + + case 12: + // Switch to the QObject convertor. + *sipCppRet = static_cast(sipCpp); + sipType = sipType_QObject; + break; + + default: + sipType = 0; + } +%End + +public: + enum CacheMode + { + NoCache, + ItemCoordinateCache, + DeviceCoordinateCache, + }; + + enum GraphicsItemChange + { + ItemPositionChange, + ItemMatrixChange, + ItemVisibleChange, + ItemEnabledChange, + ItemSelectedChange, + ItemParentChange, + ItemChildAddedChange, + ItemChildRemovedChange, + ItemTransformChange, + ItemPositionHasChanged, + ItemTransformHasChanged, + ItemSceneChange, + ItemVisibleHasChanged, + ItemEnabledHasChanged, + ItemSelectedHasChanged, + ItemParentHasChanged, + ItemSceneHasChanged, + ItemCursorChange, + ItemCursorHasChanged, + ItemToolTipChange, + ItemToolTipHasChanged, + ItemFlagsChange, + ItemFlagsHaveChanged, + ItemZValueChange, + ItemZValueHasChanged, + ItemOpacityChange, + ItemOpacityHasChanged, + ItemScenePositionHasChanged, + ItemRotationChange, + ItemRotationHasChanged, + ItemScaleChange, + ItemScaleHasChanged, + ItemTransformOriginPointChange, + ItemTransformOriginPointHasChanged, + }; + + enum GraphicsItemFlag + { + ItemIsMovable, + ItemIsSelectable, + ItemIsFocusable, + ItemClipsToShape, + ItemClipsChildrenToShape, + ItemIgnoresTransformations, + ItemIgnoresParentOpacity, + ItemDoesntPropagateOpacityToChildren, + ItemStacksBehindParent, + ItemUsesExtendedStyleOption, + ItemHasNoContents, + ItemSendsGeometryChanges, + ItemAcceptsInputMethod, + ItemNegativeZStacksBehindParent, + ItemIsPanel, + ItemSendsScenePositionChanges, +%If (Qt_5_4_0 -) + ItemContainsChildrenInShape, +%End + }; + + typedef QFlags GraphicsItemFlags; + static const int Type; + static const int UserType; + explicit QGraphicsItem(QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsItem(); + QGraphicsScene *scene() const; + QGraphicsItem *parentItem() const; + QGraphicsItem *topLevelItem() const; + void setParentItem(QGraphicsItem *parent /TransferThis/); + QGraphicsItemGroup *group() const; + void setGroup(QGraphicsItemGroup *group /KeepReference/); + QGraphicsItem::GraphicsItemFlags flags() const; + void setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true); + void setFlags(QGraphicsItem::GraphicsItemFlags flags); + QString toolTip() const; + void setToolTip(const QString &toolTip); + QCursor cursor() const; + void setCursor(const QCursor &cursor); + bool hasCursor() const; + void unsetCursor(); + bool isVisible() const; + void setVisible(bool visible); + void hide(); + void show(); + bool isEnabled() const; + void setEnabled(bool enabled); + bool isSelected() const; + void setSelected(bool selected); + bool acceptDrops() const; + void setAcceptDrops(bool on); + Qt::MouseButtons acceptedMouseButtons() const; + void setAcceptedMouseButtons(Qt::MouseButtons buttons); + bool hasFocus() const; + void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason); + void clearFocus(); + QPointF pos() const; + qreal x() const; + qreal y() const; + QPointF scenePos() const; + void setPos(const QPointF &pos); + void moveBy(qreal dx, qreal dy); + void ensureVisible(const QRectF &rect = QRectF(), int xMargin = 50, int yMargin = 50); + virtual void advance(int phase); + qreal zValue() const; + void setZValue(qreal z); + virtual QRectF boundingRect() const = 0; + QRectF childrenBoundingRect() const; + QRectF sceneBoundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual bool collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + virtual bool collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + QList collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) = 0; + void update(const QRectF &rect = QRectF()); + QPointF mapToItem(const QGraphicsItem *item, const QPointF &point) const; + QPointF mapToParent(const QPointF &point) const; + QPointF mapToScene(const QPointF &point) const; + QPolygonF mapToItem(const QGraphicsItem *item, const QRectF &rect) const; + QPolygonF mapToParent(const QRectF &rect) const; + QPolygonF mapToScene(const QRectF &rect) const; + QPolygonF mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const; + QPolygonF mapToParent(const QPolygonF &polygon) const; + QPolygonF mapToScene(const QPolygonF &polygon) const; + QPainterPath mapToItem(const QGraphicsItem *item, const QPainterPath &path) const; + QPainterPath mapToParent(const QPainterPath &path) const; + QPainterPath mapToScene(const QPainterPath &path) const; + QPointF mapFromItem(const QGraphicsItem *item, const QPointF &point) const; + QPointF mapFromParent(const QPointF &point) const; + QPointF mapFromScene(const QPointF &point) const; + QPolygonF mapFromItem(const QGraphicsItem *item, const QRectF &rect) const; + QPolygonF mapFromParent(const QRectF &rect) const; + QPolygonF mapFromScene(const QRectF &rect) const; + QPolygonF mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const; + QPolygonF mapFromParent(const QPolygonF &polygon) const; + QPolygonF mapFromScene(const QPolygonF &polygon) const; + QPainterPath mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const; + QPainterPath mapFromParent(const QPainterPath &path) const; + QPainterPath mapFromScene(const QPainterPath &path) const; + bool isAncestorOf(const QGraphicsItem *child) const; + QVariant data(int key) const; + void setData(int key, const QVariant &value); + virtual int type() const; + void installSceneEventFilter(QGraphicsItem *filterItem); + void removeSceneEventFilter(QGraphicsItem *filterItem); + +protected: + virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); + virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dropEvent(QGraphicsSceneDragDropEvent *event); + virtual void focusInEvent(QFocusEvent *event); + virtual void focusOutEvent(QFocusEvent *event); + virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); + virtual void inputMethodEvent(QInputMethodEvent *event); + virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; + virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); + virtual void keyPressEvent(QKeyEvent *event); + virtual void keyReleaseEvent(QKeyEvent *event); + virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + void prepareGeometryChange(); + virtual bool sceneEvent(QEvent *event); + virtual bool sceneEventFilter(QGraphicsItem *watched, QEvent *event); + virtual void wheelEvent(QGraphicsSceneWheelEvent *event); + +public: + void setPos(qreal ax, qreal ay); + void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xMargin = 50, int yMargin = 50); + void update(qreal ax, qreal ay, qreal width, qreal height); + QPointF mapToItem(const QGraphicsItem *item, qreal ax, qreal ay) const; + QPointF mapToParent(qreal ax, qreal ay) const; + QPointF mapToScene(qreal ax, qreal ay) const; + QPointF mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay) const; + QPointF mapFromParent(qreal ax, qreal ay) const; + QPointF mapFromScene(qreal ax, qreal ay) const; + QTransform transform() const; + QTransform sceneTransform() const; + QTransform deviceTransform(const QTransform &viewportTransform) const; + void setTransform(const QTransform &matrix, bool combine = false); + void resetTransform(); + bool isObscured(const QRectF &rect = QRectF()) const; + bool isObscured(qreal ax, qreal ay, qreal w, qreal h) const; + QPolygonF mapToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const; + QPolygonF mapToParent(qreal ax, qreal ay, qreal w, qreal h) const; + QPolygonF mapToScene(qreal ax, qreal ay, qreal w, qreal h) const; + QPolygonF mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const; + QPolygonF mapFromParent(qreal ax, qreal ay, qreal w, qreal h) const; + QPolygonF mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const; + QGraphicsWidget *parentWidget() const; + QGraphicsWidget *topLevelWidget() const; + QGraphicsWidget *window() const; + QList childItems() const; + bool isWidget() const; + bool isWindow() const; + QGraphicsItem::CacheMode cacheMode() const; + void setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize()); + bool isVisibleTo(const QGraphicsItem *parent) const; + bool acceptHoverEvents() const; + void setAcceptHoverEvents(bool enabled); + void grabMouse(); + void ungrabMouse(); + void grabKeyboard(); + void ungrabKeyboard(); + QRegion boundingRegion(const QTransform &itemToDeviceTransform) const; + qreal boundingRegionGranularity() const; + void setBoundingRegionGranularity(qreal granularity); + void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF()); + QGraphicsItem *commonAncestorItem(const QGraphicsItem *other) const; + bool isUnderMouse() const; + qreal opacity() const; + qreal effectiveOpacity() const; + void setOpacity(qreal opacity); + QTransform itemTransform(const QGraphicsItem *other, bool *ok = 0) const; + bool isClipped() const; + QPainterPath clipPath() const; + QRectF mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const; + QRectF mapRectToParent(const QRectF &rect) const; + QRectF mapRectToScene(const QRectF &rect) const; + QRectF mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const; + QRectF mapRectFromParent(const QRectF &rect) const; + QRectF mapRectFromScene(const QRectF &rect) const; + QRectF mapRectToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const; + QRectF mapRectToParent(qreal ax, qreal ay, qreal w, qreal h) const; + QRectF mapRectToScene(qreal ax, qreal ay, qreal w, qreal h) const; + QRectF mapRectFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const; + QRectF mapRectFromParent(qreal ax, qreal ay, qreal w, qreal h) const; + QRectF mapRectFromScene(qreal ax, qreal ay, qreal w, qreal h) const; + + enum PanelModality + { + NonModal, + PanelModal, + SceneModal, + }; + + QGraphicsObject *parentObject() const; + QGraphicsItem *panel() const; + bool isPanel() const; + QGraphicsObject *toGraphicsObject(); + QGraphicsItem::PanelModality panelModality() const; + void setPanelModality(QGraphicsItem::PanelModality panelModality); + bool isBlockedByModalPanel(QGraphicsItem **blockingPanel /Out/ = 0) const; + QGraphicsEffect *graphicsEffect() const; + void setGraphicsEffect(QGraphicsEffect *effect /Transfer/); + bool acceptTouchEvents() const; + void setAcceptTouchEvents(bool enabled); + bool filtersChildEvents() const; + void setFiltersChildEvents(bool enabled); + bool isActive() const; + void setActive(bool active); + QGraphicsItem *focusProxy() const; + void setFocusProxy(QGraphicsItem *item /KeepReference/); + QGraphicsItem *focusItem() const; + void setX(qreal x); + void setY(qreal y); + void setRotation(qreal angle); + qreal rotation() const; + void setScale(qreal scale); + qreal scale() const; + QList transformations() const; + void setTransformations(const QList &transformations /KeepReference/); + QPointF transformOriginPoint() const; + void setTransformOriginPoint(const QPointF &origin); + void setTransformOriginPoint(qreal ax, qreal ay); + void stackBefore(const QGraphicsItem *sibling); + Qt::InputMethodHints inputMethodHints() const; + void setInputMethodHints(Qt::InputMethodHints hints); + +protected: + void updateMicroFocus(); + +private: + QGraphicsItem(const QGraphicsItem &); +}; + +QFlags operator|(QGraphicsItem::GraphicsItemFlag f1, QFlags f2); + +class QAbstractGraphicsShapeItem : public QGraphicsItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QAbstractGraphicsShapeItem(QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QAbstractGraphicsShapeItem(); + QPen pen() const; + void setPen(const QPen &pen); + QBrush brush() const; + void setBrush(const QBrush &brush); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; +}; + +class QGraphicsPathItem : public QAbstractGraphicsShapeItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsPathItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsPathItem(const QPainterPath &path, QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsPathItem(); + QPainterPath path() const; + void setPath(const QPainterPath &path); + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; +}; + +class QGraphicsRectItem : public QAbstractGraphicsShapeItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsRectItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsRectItem(const QRectF &rect, QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsRectItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsRectItem(); + QRectF rect() const; + void setRect(const QRectF &rect); + void setRect(qreal ax, qreal ay, qreal w, qreal h); + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; +}; + +class QGraphicsEllipseItem : public QAbstractGraphicsShapeItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsEllipseItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsEllipseItem(const QRectF &rect, QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsEllipseItem(); + QRectF rect() const; + void setRect(const QRectF &rect); + void setRect(qreal ax, qreal ay, qreal w, qreal h); + int startAngle() const; + void setStartAngle(int angle); + int spanAngle() const; + void setSpanAngle(int angle); + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; +}; + +class QGraphicsPolygonItem : public QAbstractGraphicsShapeItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsPolygonItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsPolygonItem(const QPolygonF &polygon, QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsPolygonItem(); + QPolygonF polygon() const; + void setPolygon(const QPolygonF &polygon); + Qt::FillRule fillRule() const; + void setFillRule(Qt::FillRule rule); + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; +}; + +class QGraphicsLineItem : public QGraphicsItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsLineItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsLineItem(const QLineF &line, QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsLineItem(); + QPen pen() const; + void setPen(const QPen &pen); + QLineF line() const; + void setLine(const QLineF &line); + void setLine(qreal x1, qreal y1, qreal x2, qreal y2); + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; +}; + +class QGraphicsPixmapItem : public QGraphicsItem +{ +%TypeHeaderCode +#include +%End + +public: + enum ShapeMode + { + MaskShape, + BoundingRectShape, + HeuristicMaskShape, + }; + + explicit QGraphicsPixmapItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsPixmapItem(); + QPixmap pixmap() const; + void setPixmap(const QPixmap &pixmap); + Qt::TransformationMode transformationMode() const; + void setTransformationMode(Qt::TransformationMode mode); + QPointF offset() const; + void setOffset(const QPointF &offset); + void setOffset(qreal ax, qreal ay); + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; + QGraphicsPixmapItem::ShapeMode shapeMode() const; + void setShapeMode(QGraphicsPixmapItem::ShapeMode mode); +}; + +class QGraphicsSimpleTextItem : public QAbstractGraphicsShapeItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsSimpleTextItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsSimpleTextItem(const QString &text, QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsSimpleTextItem(); + void setText(const QString &text); + QString text() const; + void setFont(const QFont &font); + QFont font() const; + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; +}; + +class QGraphicsItemGroup : public QGraphicsItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsItemGroup(QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsItemGroup(); + void addToGroup(QGraphicsItem *item /Transfer/); + void removeFromGroup(QGraphicsItem *item /GetWrapper/); +%MethodCode + sipCpp->removeFromGroup(a0); + + // The item will be passed to the group's parent if there is one. If not, + // transfer ownership back to Python. + if (sipCpp->parentItem()) + sipTransferTo(a0Wrapper, sipGetPyObject(sipCpp->parentItem(), sipType_QGraphicsItem)); + else + sipTransferBack(a0Wrapper); +%End + + virtual QRectF boundingRect() const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; +}; + +class QGraphicsObject : public QObject, public QGraphicsItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsObject(QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsObject(); + void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags()); + void ungrabGesture(Qt::GestureType type); + +signals: + void parentChanged(); + void opacityChanged(); + void visibleChanged(); + void enabledChanged(); + void xChanged(); + void yChanged(); + void zChanged(); + void rotationChanged(); + void scaleChanged(); + +protected slots: + void updateMicroFocus(); + +protected: + virtual bool event(QEvent *ev); +}; + +class QGraphicsTextItem : public QGraphicsObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGraphicsTextItem(QGraphicsItem *parent /TransferThis/ = 0); + QGraphicsTextItem(const QString &text, QGraphicsItem *parent /TransferThis/ = 0); + virtual ~QGraphicsTextItem(); + QString toHtml() const; + void setHtml(const QString &html); + QString toPlainText() const; + void setPlainText(const QString &text); + QFont font() const; + void setFont(const QFont &font); + void setDefaultTextColor(const QColor &c); + QColor defaultTextColor() const; + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual bool contains(const QPointF &point) const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + virtual bool isObscuredBy(const QGraphicsItem *item) const; + virtual QPainterPath opaqueArea() const; + virtual int type() const; + void setTextWidth(qreal width); + qreal textWidth() const; + void adjustSize(); + void setDocument(QTextDocument *document /KeepReference/); + QTextDocument *document() const; + void setTextInteractionFlags(Qt::TextInteractionFlags flags); + Qt::TextInteractionFlags textInteractionFlags() const; + void setTabChangesFocus(bool b); + bool tabChangesFocus() const; + void setOpenExternalLinks(bool open); + bool openExternalLinks() const; + void setTextCursor(const QTextCursor &cursor); + QTextCursor textCursor() const; + +signals: + void linkActivated(const QString &); + void linkHovered(const QString &); + +protected: + virtual bool sceneEvent(QEvent *event); + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); + virtual void keyPressEvent(QKeyEvent *event); + virtual void keyReleaseEvent(QKeyEvent *event); + virtual void focusInEvent(QFocusEvent *event); + virtual void focusOutEvent(QFocusEvent *event); + virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dropEvent(QGraphicsSceneDragDropEvent *event); + virtual void inputMethodEvent(QInputMethodEvent *event); + virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; +}; + +%ModuleCode +// These are needed by the %ConvertToSubClassCode. +#include +#include +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslayout.sip new file mode 100644 index 0000000..ee2ef22 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslayout.sip @@ -0,0 +1,45 @@ +// qgraphicslayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsLayout : public QGraphicsLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0); + virtual ~QGraphicsLayout(); + void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom); + virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const; + void activate(); + bool isActivated() const; + virtual void invalidate(); + virtual void widgetEvent(QEvent *e); + virtual int count() const = 0 /__len__/; + virtual QGraphicsLayoutItem *itemAt(int i) const = 0; + virtual void removeAt(int index) = 0; + virtual void updateGeometry(); + +protected: + void addChildLayoutItem(QGraphicsLayoutItem *layoutItem /Transfer/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslayoutitem.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslayoutitem.sip new file mode 100644 index 0000000..303474e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslayoutitem.sip @@ -0,0 +1,75 @@ +// qgraphicslayoutitem.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsLayoutItem /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsLayoutItem(QGraphicsLayoutItem *parent /TransferThis/ = 0, bool isLayout = false); + virtual ~QGraphicsLayoutItem(); + void setSizePolicy(const QSizePolicy &policy); + void setSizePolicy(QSizePolicy::Policy hPolicy, QSizePolicy::Policy vPolicy, QSizePolicy::ControlType controlType = QSizePolicy::DefaultType); + QSizePolicy sizePolicy() const; + void setMinimumSize(const QSizeF &size); + QSizeF minimumSize() const; + void setMinimumWidth(qreal width); + void setMinimumHeight(qreal height); + void setPreferredSize(const QSizeF &size); + QSizeF preferredSize() const; + void setPreferredWidth(qreal width); + void setPreferredHeight(qreal height); + void setMaximumSize(const QSizeF &size); + QSizeF maximumSize() const; + void setMaximumWidth(qreal width); + void setMaximumHeight(qreal height); + virtual void setGeometry(const QRectF &rect); + QRectF geometry() const; + virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const; + QRectF contentsRect() const; + QSizeF effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; + virtual void updateGeometry(); + QGraphicsLayoutItem *parentLayoutItem() const; + void setParentLayoutItem(QGraphicsLayoutItem *parent /TransferThis/); + bool isLayout() const; + void setMinimumSize(qreal aw, qreal ah); + void setPreferredSize(qreal aw, qreal ah); + void setMaximumSize(qreal aw, qreal ah); + qreal minimumWidth() const; + qreal minimumHeight() const; + qreal preferredWidth() const; + qreal preferredHeight() const; + qreal maximumWidth() const; + qreal maximumHeight() const; + QGraphicsItem *graphicsItem() const; + bool ownedByLayout() const; + +protected: + virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const = 0; + void setGraphicsItem(QGraphicsItem *item); + void setOwnedByLayout(bool ownedByLayout); + +private: + QGraphicsLayoutItem(const QGraphicsLayoutItem &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslinearlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslinearlayout.sip new file mode 100644 index 0000000..e40e70d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicslinearlayout.sip @@ -0,0 +1,79 @@ +// qgraphicslinearlayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsLinearLayout : public QGraphicsLayout +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsLinearLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0); + QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent /TransferThis/ = 0); + virtual ~QGraphicsLinearLayout(); + void setOrientation(Qt::Orientation orientation); + Qt::Orientation orientation() const; + void addItem(QGraphicsLayoutItem *item /Transfer/); + void addStretch(int stretch = 1); + void insertItem(int index, QGraphicsLayoutItem *item /Transfer/); + void insertStretch(int index, int stretch = 1); + void removeItem(QGraphicsLayoutItem *item /TransferBack/); + virtual void removeAt(int index); +%MethodCode + // The ownership of any existing item must be passed back to Python. + QGraphicsLayoutItem *itm; + + if (a0 < sipCpp->count()) + itm = sipCpp->itemAt(a0); + else + itm = 0; + + Py_BEGIN_ALLOW_THREADS + sipSelfWasArg ? sipCpp->QGraphicsLinearLayout::removeAt(a0) + : sipCpp->removeAt(a0); + Py_END_ALLOW_THREADS + + // The Qt documentation isn't quite correct as ownership isn't always passed + // back to the caller. + if (itm && !itm->parentLayoutItem()) + { + PyObject *itmo = sipGetPyObject(itm, sipType_QGraphicsLayoutItem); + + if (itmo) + sipTransferBack(itmo); + } +%End + + void setSpacing(qreal spacing); + qreal spacing() const; + void setItemSpacing(int index, qreal spacing); + qreal itemSpacing(int index) const; + void setStretchFactor(QGraphicsLayoutItem *item, int stretch); + int stretchFactor(QGraphicsLayoutItem *item) const; + void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment); + Qt::Alignment alignment(QGraphicsLayoutItem *item) const; + virtual void setGeometry(const QRectF &rect); + virtual int count() const; + virtual QGraphicsLayoutItem *itemAt(int index) const; + virtual void invalidate(); + virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsproxywidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsproxywidget.sip new file mode 100644 index 0000000..909ad9a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsproxywidget.sip @@ -0,0 +1,88 @@ +// qgraphicsproxywidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsProxyWidget : public QGraphicsWidget +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsProxyWidget(QGraphicsItem *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QGraphicsProxyWidget(); + void setWidget(QWidget *widget /Transfer/); +%MethodCode + // The ownership of any existing widget must be passed back to Python. + QWidget *w = sipCpp->widget(); + + Py_BEGIN_ALLOW_THREADS + sipCpp->setWidget(a0); + Py_END_ALLOW_THREADS + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferBack(wo); + } +%End + + QWidget *widget() const; + QRectF subWidgetRect(const QWidget *widget) const; + virtual void setGeometry(const QRectF &rect); + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + virtual int type() const; + QGraphicsProxyWidget *createProxyForChildWidget(QWidget *child) /Factory/; + +protected: + virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); + virtual bool event(QEvent *event); + virtual bool eventFilter(QObject *object, QEvent *event); + virtual void showEvent(QShowEvent *event); + virtual void hideEvent(QHideEvent *event); + virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); + virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); + virtual void grabMouseEvent(QEvent *event); + virtual void ungrabMouseEvent(QEvent *event); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + virtual void wheelEvent(QGraphicsSceneWheelEvent *event); + virtual void keyPressEvent(QKeyEvent *event); + virtual void keyReleaseEvent(QKeyEvent *event); + virtual void focusInEvent(QFocusEvent *event); + virtual void focusOutEvent(QFocusEvent *event); + virtual bool focusNextPrevChild(bool next); + virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; + virtual void resizeEvent(QGraphicsSceneResizeEvent *event); + virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dropEvent(QGraphicsSceneDragDropEvent *event); + QGraphicsProxyWidget *newProxyWidget(const QWidget *) /Factory/; + virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; + virtual void inputMethodEvent(QInputMethodEvent *event); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsscene.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsscene.sip new file mode 100644 index 0000000..2cafdad --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsscene.sip @@ -0,0 +1,182 @@ +// qgraphicsscene.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsScene : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum ItemIndexMethod + { + BspTreeIndex, + NoIndex, + }; + + QGraphicsScene(QObject *parent /TransferThis/ = 0); + QGraphicsScene(const QRectF &sceneRect, QObject *parent /TransferThis/ = 0); + QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsScene(); + QRectF sceneRect() const; + qreal width() const; + qreal height() const; + void setSceneRect(const QRectF &rect); + void setSceneRect(qreal x, qreal y, qreal w, qreal h); + void render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode mode = Qt::KeepAspectRatio); + QGraphicsScene::ItemIndexMethod itemIndexMethod() const; + void setItemIndexMethod(QGraphicsScene::ItemIndexMethod method); + QRectF itemsBoundingRect() const; + QList items(Qt::SortOrder order = Qt::DescendingOrder) const; + QList items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const; + QList items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const; + QList items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const; + QList items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const; + QList items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const; + QList collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + QList selectedItems() const; + void setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform); + void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform()); + void clearSelection(); + QGraphicsItemGroup *createItemGroup(const QList &items /Transfer/); + void destroyItemGroup(QGraphicsItemGroup *group /Transfer/); + void addItem(QGraphicsItem *item /Transfer/); + QGraphicsEllipseItem *addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush()); + QGraphicsEllipseItem *addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush()); + QGraphicsLineItem *addLine(const QLineF &line, const QPen &pen = QPen()); + QGraphicsLineItem *addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen()); + QGraphicsPathItem *addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush()); + QGraphicsPixmapItem *addPixmap(const QPixmap &pixmap); + QGraphicsPolygonItem *addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush()); + QGraphicsRectItem *addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush()); + QGraphicsRectItem *addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush()); + QGraphicsSimpleTextItem *addSimpleText(const QString &text, const QFont &font = QFont()); + QGraphicsTextItem *addText(const QString &text, const QFont &font = QFont()); + void removeItem(QGraphicsItem *item /TransferBack/); + QGraphicsItem *focusItem() const; + void setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason); + bool hasFocus() const; + void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason); + void clearFocus(); + QGraphicsItem *mouseGrabberItem() const; + QBrush backgroundBrush() const; + void setBackgroundBrush(const QBrush &brush); + QBrush foregroundBrush() const; + void setForegroundBrush(const QBrush &brush); + virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; + QList views() const; + +public slots: + void advance(); + void update(const QRectF &rect = QRectF()); + void invalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers); + void clear(); + +signals: + void changed(const QList ®ion); + void sceneRectChanged(const QRectF &rect); + void selectionChanged(); + +protected: + virtual bool event(QEvent *event); + virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); + virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dropEvent(QGraphicsSceneDragDropEvent *event); + virtual void focusInEvent(QFocusEvent *event); + virtual void focusOutEvent(QFocusEvent *event); + virtual void helpEvent(QGraphicsSceneHelpEvent *event); + virtual void keyPressEvent(QKeyEvent *event); + virtual void keyReleaseEvent(QKeyEvent *event); + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + virtual void wheelEvent(QGraphicsSceneWheelEvent *event); + virtual void inputMethodEvent(QInputMethodEvent *event); + virtual void drawBackground(QPainter *painter, const QRectF &rect); + virtual void drawForeground(QPainter *painter, const QRectF &rect); + +public: + enum SceneLayer + { + ItemLayer, + BackgroundLayer, + ForegroundLayer, + AllLayers, + }; + + typedef QFlags SceneLayers; + int bspTreeDepth() const; + void setBspTreeDepth(int depth); + QPainterPath selectionArea() const; + void update(qreal x, qreal y, qreal w, qreal h); + QGraphicsProxyWidget *addWidget(QWidget *widget /Transfer/, Qt::WindowFlags flags = Qt::WindowFlags()); + QStyle *style() const; + void setStyle(QStyle *style /Transfer/); + QFont font() const; + void setFont(const QFont &font); + QPalette palette() const; + void setPalette(const QPalette &palette); + QGraphicsWidget *activeWindow() const; + void setActiveWindow(QGraphicsWidget *widget); + +protected: + virtual bool eventFilter(QObject *watched, QEvent *event); + bool focusNextPrevChild(bool next); + +public: + void setStickyFocus(bool enabled); + bool stickyFocus() const; + QGraphicsItem *itemAt(const QPointF &pos, const QTransform &deviceTransform) const; + QGraphicsItem *itemAt(qreal x, qreal y, const QTransform &deviceTransform) const; + bool isActive() const; + QGraphicsItem *activePanel() const; + void setActivePanel(QGraphicsItem *item); + bool sendEvent(QGraphicsItem *item, QEvent *event); + void invalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers); +%If (Qt_5_4_0 -) + qreal minimumRenderSize() const; +%End +%If (Qt_5_4_0 -) + void setMinimumRenderSize(qreal minSize); +%End + +signals: +%If (Qt_5_1_0 -) + void focusItemChanged(QGraphicsItem *newFocus, QGraphicsItem *oldFocus, Qt::FocusReason reason); +%End + +public: +%If (Qt_5_5_0 -) + void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform()); +%End +%If (Qt_5_12_0 -) + bool focusOnTouch() const; +%End +%If (Qt_5_12_0 -) + void setFocusOnTouch(bool enabled); +%End +}; + +QFlags operator|(QGraphicsScene::SceneLayer f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicssceneevent.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicssceneevent.sip new file mode 100644 index 0000000..0078ec2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicssceneevent.sip @@ -0,0 +1,251 @@ +// qgraphicssceneevent.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsSceneEvent : public QEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + switch (sipCpp->type()) + { + case QEvent::GraphicsSceneContextMenu: + sipType = sipType_QGraphicsSceneContextMenuEvent; + break; + + case QEvent::GraphicsSceneDragEnter: + case QEvent::GraphicsSceneDragLeave: + case QEvent::GraphicsSceneDragMove: + case QEvent::GraphicsSceneDrop: + sipType = sipType_QGraphicsSceneDragDropEvent; + break; + + case QEvent::GraphicsSceneHelp: + sipType = sipType_QGraphicsSceneHelpEvent; + break; + + case QEvent::GraphicsSceneHoverEnter: + case QEvent::GraphicsSceneHoverLeave: + case QEvent::GraphicsSceneHoverMove: + sipType = sipType_QGraphicsSceneHoverEvent; + break; + + case QEvent::GraphicsSceneMouseDoubleClick: + case QEvent::GraphicsSceneMouseMove: + case QEvent::GraphicsSceneMousePress: + case QEvent::GraphicsSceneMouseRelease: + sipType = sipType_QGraphicsSceneMouseEvent; + break; + + case QEvent::GraphicsSceneWheel: + sipType = sipType_QGraphicsSceneWheelEvent; + break; + + case QEvent::GraphicsSceneMove: + sipType = sipType_QGraphicsSceneMoveEvent; + break; + + case QEvent::GraphicsSceneResize: + sipType = sipType_QGraphicsSceneResizeEvent; + break; + + default: + sipType = 0; + } +%End + +public: + virtual ~QGraphicsSceneEvent(); + QWidget *widget() const; + +private: + QGraphicsSceneEvent(const QGraphicsSceneEvent &); +}; + +class QGraphicsSceneMouseEvent : public QGraphicsSceneEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QGraphicsSceneMouseEvent(); + QPointF pos() const; + QPointF scenePos() const; + QPoint screenPos() const; + QPointF buttonDownPos(Qt::MouseButton button) const; + QPointF buttonDownScenePos(Qt::MouseButton button) const; + QPoint buttonDownScreenPos(Qt::MouseButton button) const; + QPointF lastPos() const; + QPointF lastScenePos() const; + QPoint lastScreenPos() const; + Qt::MouseButtons buttons() const; + Qt::MouseButton button() const; + Qt::KeyboardModifiers modifiers() const; +%If (Qt_5_4_0 -) + Qt::MouseEventSource source() const; +%End +%If (Qt_5_4_0 -) + Qt::MouseEventFlags flags() const; +%End + +private: + QGraphicsSceneMouseEvent(const QGraphicsSceneMouseEvent &); +}; + +class QGraphicsSceneWheelEvent : public QGraphicsSceneEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QGraphicsSceneWheelEvent(); + QPointF pos() const; + QPointF scenePos() const; + QPoint screenPos() const; + Qt::MouseButtons buttons() const; + Qt::KeyboardModifiers modifiers() const; + int delta() const; + Qt::Orientation orientation() const; + +private: + QGraphicsSceneWheelEvent(const QGraphicsSceneWheelEvent &); +}; + +class QGraphicsSceneContextMenuEvent : public QGraphicsSceneEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + enum Reason + { + Mouse, + Keyboard, + Other, + }; + + virtual ~QGraphicsSceneContextMenuEvent(); + QPointF pos() const; + QPointF scenePos() const; + QPoint screenPos() const; + Qt::KeyboardModifiers modifiers() const; + QGraphicsSceneContextMenuEvent::Reason reason() const; + +private: + QGraphicsSceneContextMenuEvent(const QGraphicsSceneContextMenuEvent &); +}; + +class QGraphicsSceneHoverEvent : public QGraphicsSceneEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QGraphicsSceneHoverEvent(); + QPointF pos() const; + QPointF scenePos() const; + QPoint screenPos() const; + QPointF lastPos() const; + QPointF lastScenePos() const; + QPoint lastScreenPos() const; + Qt::KeyboardModifiers modifiers() const; + +private: + QGraphicsSceneHoverEvent(const QGraphicsSceneHoverEvent &); +}; + +class QGraphicsSceneHelpEvent : public QGraphicsSceneEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QGraphicsSceneHelpEvent(); + QPointF scenePos() const; + QPoint screenPos() const; + +private: + QGraphicsSceneHelpEvent(const QGraphicsSceneHelpEvent &); +}; + +class QGraphicsSceneDragDropEvent : public QGraphicsSceneEvent /NoDefaultCtors/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QGraphicsSceneDragDropEvent(); + QPointF pos() const; + QPointF scenePos() const; + QPoint screenPos() const; + Qt::MouseButtons buttons() const; + Qt::KeyboardModifiers modifiers() const; + Qt::DropActions possibleActions() const; + Qt::DropAction proposedAction() const; + void acceptProposedAction(); + Qt::DropAction dropAction() const; + void setDropAction(Qt::DropAction action); + QWidget *source() const; + const QMimeData *mimeData() const; + +private: + QGraphicsSceneDragDropEvent(const QGraphicsSceneDragDropEvent &); +}; + +class QGraphicsSceneResizeEvent : public QGraphicsSceneEvent +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsSceneResizeEvent(); + virtual ~QGraphicsSceneResizeEvent(); + QSizeF oldSize() const; + QSizeF newSize() const; + +private: + QGraphicsSceneResizeEvent(const QGraphicsSceneResizeEvent &); +}; + +class QGraphicsSceneMoveEvent : public QGraphicsSceneEvent +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsSceneMoveEvent(); + virtual ~QGraphicsSceneMoveEvent(); + QPointF oldPos() const; + QPointF newPos() const; + +private: + QGraphicsSceneMoveEvent(const QGraphicsSceneMoveEvent &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicstransform.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicstransform.sip new file mode 100644 index 0000000..d3b56c3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicstransform.sip @@ -0,0 +1,87 @@ +// qgraphicstransform.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsTransform : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsTransform(QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsTransform(); + virtual void applyTo(QMatrix4x4 *matrix) const = 0; + +protected slots: + void update(); +}; + +class QGraphicsScale : public QGraphicsTransform +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsScale(QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsScale(); + QVector3D origin() const; + void setOrigin(const QVector3D &point); + qreal xScale() const; + void setXScale(qreal); + qreal yScale() const; + void setYScale(qreal); + qreal zScale() const; + void setZScale(qreal); + virtual void applyTo(QMatrix4x4 *matrix) const; + +signals: + void originChanged(); + void scaleChanged(); + void xScaleChanged(); + void yScaleChanged(); + void zScaleChanged(); +}; + +class QGraphicsRotation : public QGraphicsTransform +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsRotation(QObject *parent /TransferThis/ = 0); + virtual ~QGraphicsRotation(); + QVector3D origin() const; + void setOrigin(const QVector3D &point); + qreal angle() const; + void setAngle(qreal); + QVector3D axis() const; + void setAxis(const QVector3D &axis); + void setAxis(Qt::Axis axis); + virtual void applyTo(QMatrix4x4 *matrix) const; + +signals: + void originChanged(); + void angleChanged(); + void axisChanged(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsview.sip new file mode 100644 index 0000000..abc1635 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicsview.sip @@ -0,0 +1,194 @@ +// qgraphicsview.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsView : public QAbstractScrollArea +{ +%TypeHeaderCode +#include +%End + +public: + enum CacheModeFlag + { + CacheNone, + CacheBackground, + }; + + typedef QFlags CacheMode; + + enum DragMode + { + NoDrag, + ScrollHandDrag, + RubberBandDrag, + }; + + enum ViewportAnchor + { + NoAnchor, + AnchorViewCenter, + AnchorUnderMouse, + }; + + QGraphicsView(QWidget *parent /TransferThis/ = 0); + QGraphicsView(QGraphicsScene *scene /KeepReference/, QWidget *parent /TransferThis/ = 0); + virtual ~QGraphicsView(); + virtual QSize sizeHint() const; + QPainter::RenderHints renderHints() const; + void setRenderHint(QPainter::RenderHint hint, bool on = true); + void setRenderHints(QPainter::RenderHints hints); + Qt::Alignment alignment() const; + void setAlignment(Qt::Alignment alignment); + QGraphicsView::ViewportAnchor transformationAnchor() const; + void setTransformationAnchor(QGraphicsView::ViewportAnchor anchor); + QGraphicsView::ViewportAnchor resizeAnchor() const; + void setResizeAnchor(QGraphicsView::ViewportAnchor anchor); + QGraphicsView::DragMode dragMode() const; + void setDragMode(QGraphicsView::DragMode mode); + QGraphicsView::CacheMode cacheMode() const; + void setCacheMode(QGraphicsView::CacheMode mode); + void resetCachedContent(); + bool isInteractive() const; + void setInteractive(bool allowed); + QGraphicsScene *scene() const; + void setScene(QGraphicsScene *scene /KeepReference/); + QRectF sceneRect() const; + void setSceneRect(const QRectF &rect); + void rotate(qreal angle); + void scale(qreal sx, qreal sy); + void shear(qreal sh, qreal sv); + void translate(qreal dx, qreal dy); + void centerOn(const QPointF &pos); + void centerOn(const QGraphicsItem *item); + void ensureVisible(const QRectF &rect, int xMargin = 50, int yMargin = 50); + void ensureVisible(const QGraphicsItem *item, int xMargin = 50, int yMargin = 50); + void fitInView(const QRectF &rect, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio); + void fitInView(const QGraphicsItem *item, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio); + void render(QPainter *painter, const QRectF &target = QRectF(), const QRect &source = QRect(), Qt::AspectRatioMode mode = Qt::KeepAspectRatio); + QList items() const; + QList items(const QPoint &pos) const; + QList items(int x, int y) const; + QList items(int x, int y, int w, int h, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + QList items(const QRect &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + QList items(const QPolygon &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + QList items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + QGraphicsItem *itemAt(const QPoint &pos) const; + QPointF mapToScene(const QPoint &point) const; + QPolygonF mapToScene(const QRect &rect) const; + QPolygonF mapToScene(const QPolygon &polygon) const; + QPainterPath mapToScene(const QPainterPath &path) const; + QPoint mapFromScene(const QPointF &point) const; + QPolygon mapFromScene(const QRectF &rect) const; + QPolygon mapFromScene(const QPolygonF &polygon) const; + QPainterPath mapFromScene(const QPainterPath &path) const; + virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; + QBrush backgroundBrush() const; + void setBackgroundBrush(const QBrush &brush); + QBrush foregroundBrush() const; + void setForegroundBrush(const QBrush &brush); + +public slots: + void invalidateScene(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = QGraphicsScene::AllLayers); + void updateScene(const QList &rects); + void updateSceneRect(const QRectF &rect); + +protected slots: + virtual void setupViewport(QWidget *widget); + +protected: + virtual bool event(QEvent *event); + virtual bool viewportEvent(QEvent *event); + virtual void contextMenuEvent(QContextMenuEvent *event); + virtual void dragEnterEvent(QDragEnterEvent *event); + virtual void dragLeaveEvent(QDragLeaveEvent *event); + virtual void dragMoveEvent(QDragMoveEvent *event); + virtual void dropEvent(QDropEvent *event); + virtual void focusInEvent(QFocusEvent *event); + virtual void focusOutEvent(QFocusEvent *event); + virtual bool focusNextPrevChild(bool next); + virtual void keyPressEvent(QKeyEvent *event); + virtual void keyReleaseEvent(QKeyEvent *event); + virtual void mouseDoubleClickEvent(QMouseEvent *event); + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void wheelEvent(QWheelEvent *event); + virtual void paintEvent(QPaintEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual void scrollContentsBy(int dx, int dy); + virtual void showEvent(QShowEvent *event); + virtual void inputMethodEvent(QInputMethodEvent *event); + virtual void drawBackground(QPainter *painter, const QRectF &rect); + virtual void drawForeground(QPainter *painter, const QRectF &rect); + +public: + void setSceneRect(qreal ax, qreal ay, qreal aw, qreal ah); + void centerOn(qreal ax, qreal ay); + void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xMargin = 50, int yMargin = 50); + void fitInView(qreal x, qreal y, qreal w, qreal h, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio); + QGraphicsItem *itemAt(int ax, int ay) const; + QPointF mapToScene(int ax, int ay) const; + QPolygonF mapToScene(int ax, int ay, int w, int h) const; + QPoint mapFromScene(qreal ax, qreal ay) const; + QPolygon mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const; + + enum ViewportUpdateMode + { + FullViewportUpdate, + MinimalViewportUpdate, + SmartViewportUpdate, + BoundingRectViewportUpdate, + NoViewportUpdate, + }; + + enum OptimizationFlag + { + DontClipPainter, + DontSavePainterState, + DontAdjustForAntialiasing, + }; + + typedef QFlags OptimizationFlags; + QGraphicsView::ViewportUpdateMode viewportUpdateMode() const; + void setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode); + QGraphicsView::OptimizationFlags optimizationFlags() const; + void setOptimizationFlag(QGraphicsView::OptimizationFlag flag, bool enabled = true); + void setOptimizationFlags(QGraphicsView::OptimizationFlags flags); + Qt::ItemSelectionMode rubberBandSelectionMode() const; + void setRubberBandSelectionMode(Qt::ItemSelectionMode mode); + QTransform transform() const; + QTransform viewportTransform() const; + void setTransform(const QTransform &matrix, bool combine = false); + void resetTransform(); + bool isTransformed() const; +%If (Qt_5_1_0 -) + QRect rubberBandRect() const; +%End + +signals: +%If (Qt_5_1_0 -) + void rubberBandChanged(QRect viewportRect, QPointF fromScenePoint, QPointF toScenePoint); +%End +}; + +QFlags operator|(QGraphicsView::CacheModeFlag f1, QFlags f2); +QFlags operator|(QGraphicsView::OptimizationFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicswidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicswidget.sip new file mode 100644 index 0000000..f6e9ede --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgraphicswidget.sip @@ -0,0 +1,126 @@ +// qgraphicswidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGraphicsWidget : public QGraphicsObject, public QGraphicsLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + QGraphicsWidget(QGraphicsItem *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QGraphicsWidget(); + QGraphicsLayout *layout() const; + void setLayout(QGraphicsLayout *layout /Transfer/); + void adjustSize(); + Qt::LayoutDirection layoutDirection() const; + void setLayoutDirection(Qt::LayoutDirection direction); + void unsetLayoutDirection(); + QStyle *style() const; + void setStyle(QStyle *style /KeepReference/); + QFont font() const; + void setFont(const QFont &font); + QPalette palette() const; + void setPalette(const QPalette &palette); + void resize(const QSizeF &size); + void resize(qreal w, qreal h); + QSizeF size() const; + virtual void setGeometry(const QRectF &rect); + QRectF rect() const; +%If (Qt_5_14_0 -) + void setContentsMargins(QMarginsF margins); +%End + void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom); + virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const; +%If (Qt_5_14_0 -) + void setWindowFrameMargins(QMarginsF margins); +%End + void setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom); + void getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const; + void unsetWindowFrameMargins(); + QRectF windowFrameGeometry() const; + QRectF windowFrameRect() const; + Qt::WindowFlags windowFlags() const; + Qt::WindowType windowType() const; + void setWindowFlags(Qt::WindowFlags wFlags); + bool isActiveWindow() const; + void setWindowTitle(const QString &title); + QString windowTitle() const; + Qt::FocusPolicy focusPolicy() const; + void setFocusPolicy(Qt::FocusPolicy policy); + static void setTabOrder(QGraphicsWidget *first, QGraphicsWidget *second); + QGraphicsWidget *focusWidget() const; + int grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut); + void releaseShortcut(int id); + void setShortcutEnabled(int id, bool enabled = true); + void setShortcutAutoRepeat(int id, bool enabled = true); + void addAction(QAction *action); + void addActions(QList actions); + void insertAction(QAction *before, QAction *action); + void insertActions(QAction *before, QList actions); + void removeAction(QAction *action); + QList actions() const; + void setAttribute(Qt::WidgetAttribute attribute, bool on = true); + bool testAttribute(Qt::WidgetAttribute attribute) const; + virtual int type() const; + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + virtual QRectF boundingRect() const; + virtual QPainterPath shape() const; + void setGeometry(qreal ax, qreal ay, qreal aw, qreal ah); + +public slots: + bool close(); + +protected: + virtual void initStyleOption(QStyleOption *option) const; + virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; + virtual void updateGeometry(); + virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); + virtual bool sceneEvent(QEvent *event); + virtual bool windowFrameEvent(QEvent *e); + virtual Qt::WindowFrameSection windowFrameSectionAt(const QPointF &pos) const; + virtual bool event(QEvent *event); + virtual void changeEvent(QEvent *event); + virtual void closeEvent(QCloseEvent *event); + virtual void focusInEvent(QFocusEvent *event); + virtual bool focusNextPrevChild(bool next); + virtual void focusOutEvent(QFocusEvent *event); + virtual void hideEvent(QHideEvent *event); + virtual void moveEvent(QGraphicsSceneMoveEvent *event); + virtual void polishEvent(); + virtual void resizeEvent(QGraphicsSceneResizeEvent *event); + virtual void showEvent(QShowEvent *event); + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + virtual void grabMouseEvent(QEvent *event); + virtual void ungrabMouseEvent(QEvent *event); + virtual void grabKeyboardEvent(QEvent *event); + virtual void ungrabKeyboardEvent(QEvent *event); + +public: + bool autoFillBackground() const; + void setAutoFillBackground(bool enabled); + +signals: + void geometryChanged(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgridlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgridlayout.sip new file mode 100644 index 0000000..2d78c4a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgridlayout.sip @@ -0,0 +1,145 @@ +// qgridlayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGridLayout : public QLayout +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGridLayout(QWidget *parent /TransferThis/); + QGridLayout(); + virtual ~QGridLayout(); + virtual QSize sizeHint() const; + virtual QSize minimumSize() const; + virtual QSize maximumSize() const; + void setRowStretch(int row, int stretch); + void setColumnStretch(int column, int stretch); + int rowStretch(int row) const; + int columnStretch(int column) const; + void setRowMinimumHeight(int row, int minSize); + void setColumnMinimumWidth(int column, int minSize); + int rowMinimumHeight(int row) const; + int columnMinimumWidth(int column) const; + int columnCount() const; + int rowCount() const; + QRect cellRect(int row, int column) const; + virtual bool hasHeightForWidth() const; + virtual int heightForWidth(int) const; + virtual int minimumHeightForWidth(int) const; + virtual Qt::Orientations expandingDirections() const; + virtual void invalidate(); + void addWidget(QWidget *w /GetWrapper/); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->addWidget(a0); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a0Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows addWidget(QWidget()). + sipTransferTo(a0Wrapper, sipSelf); + } +%End + + void addWidget(QWidget * /GetWrapper/, int row, int column, Qt::Alignment alignment = Qt::Alignment()); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->addWidget(a0, a1, a2, *a3); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a0Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows addWidget(QWidget()). + sipTransferTo(a0Wrapper, sipSelf); + } +%End + + void addWidget(QWidget * /GetWrapper/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->addWidget(a0, a1, a2, a3, a4, *a5); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a0Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows addWidget(QWidget()). + sipTransferTo(a0Wrapper, sipSelf); + } +%End + + void addLayout(QLayout * /Transfer/, int row, int column, Qt::Alignment alignment = Qt::Alignment()); + void addLayout(QLayout * /Transfer/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()); + void setOriginCorner(Qt::Corner); + Qt::Corner originCorner() const; + virtual QLayoutItem *itemAt(int) const; + virtual QLayoutItem *takeAt(int) /TransferBack/; + virtual int count() const; + virtual void setGeometry(const QRect &); + void addItem(QLayoutItem *item /Transfer/, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment()); + void setDefaultPositioning(int n, Qt::Orientation orient); + void getItemPosition(int idx, int *row, int *column, int *rowSpan, int *columnSpan) const; + void setHorizontalSpacing(int spacing); + int horizontalSpacing() const; + void setVerticalSpacing(int spacing); + int verticalSpacing() const; + void setSpacing(int spacing); + int spacing() const; + QLayoutItem *itemAtPosition(int row, int column) const; + +protected: + virtual void addItem(QLayoutItem * /Transfer/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgroupbox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgroupbox.sip new file mode 100644 index 0000000..8993f81 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qgroupbox.sip @@ -0,0 +1,62 @@ +// qgroupbox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QGroupBox : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QGroupBox(QWidget *parent /TransferThis/ = 0); + QGroupBox(const QString &title, QWidget *parent /TransferThis/ = 0); + virtual ~QGroupBox(); + QString title() const; + void setTitle(const QString &); + Qt::Alignment alignment() const; + void setAlignment(int); + virtual QSize minimumSizeHint() const; + bool isFlat() const; + void setFlat(bool b); + bool isCheckable() const; + void setCheckable(bool b); + bool isChecked() const; + +public slots: + void setChecked(bool b); + +signals: + void clicked(bool checked = false); + void toggled(bool); + +protected: + void initStyleOption(QStyleOptionGroupBox *option) const; + virtual bool event(QEvent *); + virtual void childEvent(QChildEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void changeEvent(QEvent *); + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qheaderview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qheaderview.sip new file mode 100644 index 0000000..b1333e6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qheaderview.sip @@ -0,0 +1,183 @@ +// qheaderview.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QHeaderView : public QAbstractItemView +{ +%TypeHeaderCode +#include +%End + +public: + enum ResizeMode + { + Interactive, + Fixed, + Stretch, + ResizeToContents, + Custom, + }; + + QHeaderView(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); + virtual ~QHeaderView(); + virtual void setModel(QAbstractItemModel *model /KeepReference/); + Qt::Orientation orientation() const; + int offset() const; + int length() const; + virtual QSize sizeHint() const; + int sectionSizeHint(int logicalIndex) const; + int visualIndexAt(int position) const; + int logicalIndexAt(int position) const; + int sectionSize(int logicalIndex) const; + int sectionPosition(int logicalIndex) const; + int sectionViewportPosition(int logicalIndex) const; + void moveSection(int from, int to); + void resizeSection(int logicalIndex, int size); + bool isSectionHidden(int logicalIndex) const; + void setSectionHidden(int logicalIndex, bool hide); + int count() const /__len__/; + int visualIndex(int logicalIndex) const; + int logicalIndex(int visualIndex) const; + void setHighlightSections(bool highlight); + bool highlightSections() const; + int stretchSectionCount() const; + void setSortIndicatorShown(bool show); + bool isSortIndicatorShown() const; + void setSortIndicator(int logicalIndex, Qt::SortOrder order); + int sortIndicatorSection() const; + Qt::SortOrder sortIndicatorOrder() const; + bool stretchLastSection() const; + void setStretchLastSection(bool stretch); + bool sectionsMoved() const; + +public slots: + void setOffset(int offset); + void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast); + void setOffsetToSectionPosition(int visualIndex); + +signals: + void geometriesChanged(); + void sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); + void sectionResized(int logicalIndex, int oldSize, int newSize); + void sectionPressed(int logicalIndex); + void sectionClicked(int logicalIndex); + void sectionDoubleClicked(int logicalIndex); + void sectionCountChanged(int oldCount, int newCount); + void sectionHandleDoubleClicked(int logicalIndex); + +protected slots: + void updateSection(int logicalIndex); + void resizeSections(); + void sectionsInserted(const QModelIndex &parent, int logicalFirst, int logicalLast); + void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast); + +protected: + void initialize(); + void initializeSections(); + void initializeSections(int start, int end); + virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &old); + virtual bool event(QEvent *e); + virtual bool viewportEvent(QEvent *e); + virtual void paintEvent(QPaintEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void mouseDoubleClickEvent(QMouseEvent *e); + virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const; + virtual QSize sectionSizeFromContents(int logicalIndex) const; + virtual int horizontalOffset() const; + virtual int verticalOffset() const; + virtual void updateGeometries(); + virtual void scrollContentsBy(int dx, int dy); + virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); + virtual void rowsInserted(const QModelIndex &parent, int start, int end); + virtual QRect visualRect(const QModelIndex &index) const; + virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint); + virtual QModelIndex indexAt(const QPoint &p) const; + virtual bool isIndexHidden(const QModelIndex &index) const; + virtual QModelIndex moveCursor(QAbstractItemView::CursorAction, Qt::KeyboardModifiers); + virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags); + virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; + +public: + int logicalIndexAt(int ax, int ay) const; + int logicalIndexAt(const QPoint &apos) const; + void hideSection(int alogicalIndex); + void showSection(int alogicalIndex); + void resizeSections(QHeaderView::ResizeMode mode); + int hiddenSectionCount() const; + int defaultSectionSize() const; + void setDefaultSectionSize(int size); + Qt::Alignment defaultAlignment() const; + void setDefaultAlignment(Qt::Alignment alignment); + bool sectionsHidden() const; + void swapSections(int first, int second); + bool cascadingSectionResizes() const; + void setCascadingSectionResizes(bool enable); + int minimumSectionSize() const; + void setMinimumSectionSize(int size); + QByteArray saveState() const; + bool restoreState(const QByteArray &state); + virtual void reset(); + +public slots: + void setOffsetToLastSection(); + +signals: + void sectionEntered(int logicalIndex); + void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order); + +protected: + void initStyleOption(QStyleOptionHeader *option) const; + +public: + void setSectionsMovable(bool movable); + bool sectionsMovable() const; + void setSectionsClickable(bool clickable); + bool sectionsClickable() const; + QHeaderView::ResizeMode sectionResizeMode(int logicalIndex) const; + void setSectionResizeMode(int logicalIndex, QHeaderView::ResizeMode mode); + void setSectionResizeMode(QHeaderView::ResizeMode mode); +%If (Qt_5_2_0 -) + virtual void setVisible(bool v); +%End +%If (Qt_5_2_0 -) + void setResizeContentsPrecision(int precision); +%End +%If (Qt_5_2_0 -) + int resizeContentsPrecision() const; +%End +%If (Qt_5_2_0 -) + int maximumSectionSize() const; +%End +%If (Qt_5_2_0 -) + void setMaximumSectionSize(int size); +%End +%If (Qt_5_5_0 -) + void resetDefaultSectionSize(); +%End +%If (Qt_5_11_0 -) + void setFirstSectionMovable(bool movable); +%End +%If (Qt_5_11_0 -) + bool isFirstSectionMovable() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qinputdialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qinputdialog.sip new file mode 100644 index 0000000..a537a81 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qinputdialog.sip @@ -0,0 +1,136 @@ +// qinputdialog.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QInputDialog : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + enum InputDialogOption + { + NoButtons, + UseListViewForComboBoxItems, +%If (Qt_5_2_0 -) + UsePlainTextEditForTextInput, +%End + }; + + typedef QFlags InputDialogOptions; + + enum InputMode + { + TextInput, + IntInput, + DoubleInput, + }; + + static QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode echo = QLineEdit::Normal, const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) /ReleaseGIL/; + static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags()) /ReleaseGIL/; + static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags()) /ReleaseGIL/; +%If (Qt_5_10_0 -) + static double getDouble(QWidget *parent, const QString &title, const QString &label, double value, double minValue, double maxValue, int decimals, bool *ok, Qt::WindowFlags flags, double step); +%End + static QString getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) /ReleaseGIL/; +%If (Qt_5_2_0 -) + static QString getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) /ReleaseGIL/; +%End + QInputDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QInputDialog(); + void setInputMode(QInputDialog::InputMode mode); + QInputDialog::InputMode inputMode() const; + void setLabelText(const QString &text); + QString labelText() const; + void setOption(QInputDialog::InputDialogOption option, bool on = true); + bool testOption(QInputDialog::InputDialogOption option) const; + void setOptions(QInputDialog::InputDialogOptions options); + QInputDialog::InputDialogOptions options() const; + void setTextValue(const QString &text); + QString textValue() const; + void setTextEchoMode(QLineEdit::EchoMode mode); + QLineEdit::EchoMode textEchoMode() const; + void setComboBoxEditable(bool editable); + bool isComboBoxEditable() const; + void setComboBoxItems(const QStringList &items); + QStringList comboBoxItems() const; + void setIntValue(int value); + int intValue() const; + void setIntMinimum(int min); + int intMinimum() const; + void setIntMaximum(int max); + int intMaximum() const; + void setIntRange(int min, int max); + void setIntStep(int step); + int intStep() const; + void setDoubleValue(double value); + double doubleValue() const; + void setDoubleMinimum(double min); + double doubleMinimum() const; + void setDoubleMaximum(double max); + double doubleMaximum() const; + void setDoubleRange(double min, double max); + void setDoubleDecimals(int decimals); + int doubleDecimals() const; + void setOkButtonText(const QString &text); + QString okButtonText() const; + void setCancelButtonText(const QString &text); + QString cancelButtonText() const; + virtual void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + virtual QSize minimumSizeHint() const; + virtual QSize sizeHint() const; + virtual void setVisible(bool visible); + virtual void done(int result); + +signals: + void textValueChanged(const QString &text); + void textValueSelected(const QString &text); + void intValueChanged(int value); + void intValueSelected(int value); + void doubleValueChanged(double value); + void doubleValueSelected(double value); + +public: +%If (Qt_5_10_0 -) + void setDoubleStep(double step); +%End +%If (Qt_5_10_0 -) + double doubleStep() const; +%End +}; + +QFlags operator|(QInputDialog::InputDialogOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qitemdelegate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qitemdelegate.sip new file mode 100644 index 0000000..8d68b4e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qitemdelegate.sip @@ -0,0 +1,51 @@ +// qitemdelegate.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QItemDelegate : public QAbstractItemDelegate +{ +%TypeHeaderCode +#include +%End + +public: + explicit QItemDelegate(QObject *parent /TransferThis/ = 0); + virtual ~QItemDelegate(); + virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; + virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; + virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/; + virtual void setEditorData(QWidget *editor, const QModelIndex &index) const; + virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const; + virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; + QItemEditorFactory *itemEditorFactory() const; + void setItemEditorFactory(QItemEditorFactory *factory /KeepReference/); + bool hasClipping() const; + void setClipping(bool clip); + +protected: + void drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + virtual void drawCheck(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, Qt::CheckState state) const; + virtual void drawDecoration(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, const QPixmap &pixmap) const; + virtual void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, const QString &text) const; + virtual void drawFocus(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect) const; + virtual bool eventFilter(QObject *object, QEvent *event); + virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qitemeditorfactory.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qitemeditorfactory.sip new file mode 100644 index 0000000..6330741 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qitemeditorfactory.sip @@ -0,0 +1,49 @@ +// qitemeditorfactory.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QItemEditorCreatorBase /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QItemEditorCreatorBase(); + virtual QWidget *createWidget(QWidget *parent /TransferThis/) const = 0 /Factory/; + virtual QByteArray valuePropertyName() const = 0; +}; + +class QItemEditorFactory /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + QItemEditorFactory(); + virtual ~QItemEditorFactory(); + virtual QWidget *createEditor(int userType, QWidget *parent /TransferThis/) const; + virtual QByteArray valuePropertyName(int userType) const; + void registerEditor(int userType, QItemEditorCreatorBase *creator /Transfer/); + static const QItemEditorFactory *defaultFactory(); + static void setDefaultFactory(QItemEditorFactory *factory /Transfer/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qkeyeventtransition.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qkeyeventtransition.sip new file mode 100644 index 0000000..42d291f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qkeyeventtransition.sip @@ -0,0 +1,41 @@ +// qkeyeventtransition.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QKeyEventTransition : public QEventTransition +{ +%TypeHeaderCode +#include +%End + +public: + QKeyEventTransition(QState *sourceState /TransferThis/ = 0); + QKeyEventTransition(QObject *object /KeepReference=10/, QEvent::Type type, int key, QState *sourceState /TransferThis/ = 0); + virtual ~QKeyEventTransition(); + int key() const; + void setKey(int key); + Qt::KeyboardModifiers modifierMask() const; + void setModifierMask(Qt::KeyboardModifiers modifiers); + +protected: + virtual void onTransition(QEvent *event); + virtual bool eventTest(QEvent *event); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qkeysequenceedit.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qkeysequenceedit.sip new file mode 100644 index 0000000..23fc4a0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qkeysequenceedit.sip @@ -0,0 +1,52 @@ +// qkeysequenceedit.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_2_0 -) + +class QKeySequenceEdit : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QKeySequenceEdit(QWidget *parent /TransferThis/ = 0); + QKeySequenceEdit(const QKeySequence &keySequence, QWidget *parent /TransferThis/ = 0); + virtual ~QKeySequenceEdit(); + QKeySequence keySequence() const; + +public slots: + void setKeySequence(const QKeySequence &keySequence); + void clear(); + +signals: + void editingFinished(); + void keySequenceChanged(const QKeySequence &keySequence); + +protected: + virtual bool event(QEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void keyReleaseEvent(QKeyEvent *); + virtual void timerEvent(QTimerEvent *); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlabel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlabel.sip new file mode 100644 index 0000000..41fd3ec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlabel.sip @@ -0,0 +1,90 @@ +// qlabel.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLabel : public QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QLabel(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + QLabel(const QString &text, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QLabel(); + QString text() const; + const QPixmap *pixmap() const; + const QPicture *picture() const; + QMovie *movie() const; + Qt::TextFormat textFormat() const; + void setTextFormat(Qt::TextFormat); + Qt::Alignment alignment() const; + void setAlignment(Qt::Alignment); + void setWordWrap(bool on); + bool wordWrap() const; + int indent() const; + void setIndent(int); + int margin() const; + void setMargin(int); + bool hasScaledContents() const; + void setScaledContents(bool); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + void setBuddy(QWidget * /KeepReference/); + QWidget *buddy() const; + virtual int heightForWidth(int) const; + bool openExternalLinks() const; + void setTextInteractionFlags(Qt::TextInteractionFlags flags); + Qt::TextInteractionFlags textInteractionFlags() const; + void setOpenExternalLinks(bool open); + +public slots: + void clear(); + void setMovie(QMovie *movie /KeepReference/); + void setNum(double /Constrained/); + void setNum(int); + void setPicture(const QPicture &); + void setPixmap(const QPixmap &); + void setText(const QString &); + +signals: + void linkActivated(const QString &link); + void linkHovered(const QString &link); + +protected: + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); + virtual void changeEvent(QEvent *); + virtual void keyPressEvent(QKeyEvent *ev); + virtual void mousePressEvent(QMouseEvent *ev); + virtual void mouseMoveEvent(QMouseEvent *ev); + virtual void mouseReleaseEvent(QMouseEvent *ev); + virtual void contextMenuEvent(QContextMenuEvent *ev); + virtual void focusInEvent(QFocusEvent *ev); + virtual void focusOutEvent(QFocusEvent *ev); + virtual bool focusNextPrevChild(bool next); + +public: + void setSelection(int, int); + bool hasSelectedText() const; + QString selectedText() const; + int selectionStart() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlayout.sip new file mode 100644 index 0000000..f359c87 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlayout.sip @@ -0,0 +1,173 @@ +// qlayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLayout : public QObject, public QLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + enum SizeConstraint + { + SetDefaultConstraint, + SetNoConstraint, + SetMinimumSize, + SetFixedSize, + SetMaximumSize, + SetMinAndMaxSize, + }; + + QLayout(QWidget *parent /TransferThis/); + QLayout(); + virtual ~QLayout(); + int spacing() const; + void setSpacing(int); + bool setAlignment(QWidget *w, Qt::Alignment alignment); + bool setAlignment(QLayout *l, Qt::Alignment alignment); + void setAlignment(Qt::Alignment alignment); + void setSizeConstraint(QLayout::SizeConstraint); + QLayout::SizeConstraint sizeConstraint() const; + void setMenuBar(QWidget *w /GetWrapper/); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->setMenuBar(a0); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (a0 && parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a0Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows setMenuBar(QWidget()). + sipTransferTo(a0Wrapper, sipSelf); + } +%End + + QWidget *menuBar() const; + QWidget *parentWidget() const; + virtual void invalidate(); + virtual QRect geometry() const; + bool activate(); + void update(); + void addWidget(QWidget *w /GetWrapper/); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->addWidget(a0); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a0Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows addWidget(QWidget()). + sipTransferTo(a0Wrapper, sipSelf); + } +%End + + virtual void addItem(QLayoutItem * /Transfer/) = 0; + void removeWidget(QWidget *w /TransferBack/); + void removeItem(QLayoutItem * /TransferBack/); + virtual Qt::Orientations expandingDirections() const; + virtual QSize minimumSize() const; + virtual QSize maximumSize() const; + virtual void setGeometry(const QRect &); + virtual QLayoutItem *itemAt(int index) const = 0; + virtual QLayoutItem *takeAt(int index) = 0 /TransferBack/; + virtual int indexOf(QWidget *) const; +%If (Qt_5_12_0 -) + int indexOf(QLayoutItem *) const; +%End + virtual int count() const = 0 /__len__/; + virtual bool isEmpty() const; + int totalHeightForWidth(int w) const; + QSize totalMinimumSize() const; + QSize totalMaximumSize() const; + QSize totalSizeHint() const; + virtual QLayout *layout(); + void setEnabled(bool); + bool isEnabled() const; + static QSize closestAcceptableSize(const QWidget *w, const QSize &s); + +protected: + void widgetEvent(QEvent *); + virtual void childEvent(QChildEvent *e); + void addChildLayout(QLayout *l /Transfer/); + void addChildWidget(QWidget *w /GetWrapper/); +%MethodCode + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + sipCpp->addChildWidget(a0); + #else + sipCpp->sipProtect_addChildWidget(a0); + #endif + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a0Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows + // addChildWidget(QWidget()). + sipTransferTo(a0Wrapper, sipSelf); + } +%End + + QRect alignmentRect(const QRect &) const; + +public: + void setContentsMargins(int left, int top, int right, int bottom); + void getContentsMargins(int *left, int *top, int *right, int *bottom) const; + QRect contentsRect() const; + void setContentsMargins(const QMargins &margins); + QMargins contentsMargins() const; + virtual QSizePolicy::ControlTypes controlTypes() const; +%If (Qt_5_2_0 -) + QLayoutItem *replaceWidget(QWidget *from, QWidget *to /Transfer/, Qt::FindChildOptions options = Qt::FindChildrenRecursively) /TransferBack/; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlayoutitem.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlayoutitem.sip new file mode 100644 index 0000000..da4a349 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlayoutitem.sip @@ -0,0 +1,114 @@ +// qlayoutitem.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLayoutItem /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + if (sipCpp->widget()) + { + sipType = sipType_QWidgetItem; + } + else if (sipCpp->spacerItem()) + { + sipType = sipType_QSpacerItem; + } + else + { + // Switch to the QObject convertor. + *sipCppRet = sipCpp->layout(); + sipType = sipType_QObject; + } +%End + +public: + explicit QLayoutItem(Qt::Alignment alignment = Qt::Alignment()); + virtual ~QLayoutItem(); + virtual QSize sizeHint() const = 0; + virtual QSize minimumSize() const = 0; + virtual QSize maximumSize() const = 0; + virtual Qt::Orientations expandingDirections() const = 0; + virtual void setGeometry(const QRect &) = 0; + virtual QRect geometry() const = 0; + virtual bool isEmpty() const = 0; + virtual bool hasHeightForWidth() const; + virtual int heightForWidth(int) const; + virtual int minimumHeightForWidth(int) const; + virtual void invalidate(); + virtual QWidget *widget(); + virtual QLayout *layout(); + virtual QSpacerItem *spacerItem(); + Qt::Alignment alignment() const; + void setAlignment(Qt::Alignment a); + virtual QSizePolicy::ControlTypes controlTypes() const; +}; + +class QSpacerItem : public QLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + QSpacerItem(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum); + virtual ~QSpacerItem(); + void changeSize(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum); + virtual QSize sizeHint() const; + virtual QSize minimumSize() const; + virtual QSize maximumSize() const; + virtual Qt::Orientations expandingDirections() const; + virtual bool isEmpty() const; + virtual void setGeometry(const QRect &); + virtual QRect geometry() const; + virtual QSpacerItem *spacerItem(); +%If (Qt_5_5_0 -) + QSizePolicy sizePolicy() const; +%End +}; + +class QWidgetItem : public QLayoutItem +{ +%TypeHeaderCode +#include +%End + +public: + explicit QWidgetItem(QWidget *w); + virtual ~QWidgetItem(); + virtual QSize sizeHint() const; + virtual QSize minimumSize() const; + virtual QSize maximumSize() const; + virtual Qt::Orientations expandingDirections() const; + virtual bool isEmpty() const; + virtual void setGeometry(const QRect &); + virtual QRect geometry() const; + virtual QWidget *widget(); + virtual bool hasHeightForWidth() const; + virtual int heightForWidth(int) const; + virtual QSizePolicy::ControlTypes controlTypes() const; + +private: + QWidgetItem(const QWidgetItem &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlcdnumber.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlcdnumber.sip new file mode 100644 index 0000000..6b0210b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlcdnumber.sip @@ -0,0 +1,82 @@ +// qlcdnumber.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLCDNumber : public QFrame +{ +%TypeHeaderCode +#include +%End + +public: + explicit QLCDNumber(QWidget *parent /TransferThis/ = 0); + QLCDNumber(uint numDigits, QWidget *parent /TransferThis/ = 0); + virtual ~QLCDNumber(); + + enum Mode + { + Hex, + Dec, + Oct, + Bin, + }; + + enum SegmentStyle + { + Outline, + Filled, + Flat, + }; + + bool smallDecimalPoint() const; + int digitCount() const; + void setDigitCount(int nDigits); + void setNumDigits(int nDigits); +%MethodCode + // This is implemented for Qt v5 so that .ui files created with Designer for Qt v4 will continue to work. + sipCpp->setDigitCount(a0); +%End + + bool checkOverflow(double num /Constrained/) const; + bool checkOverflow(int num) const; + QLCDNumber::Mode mode() const; + void setMode(QLCDNumber::Mode); + QLCDNumber::SegmentStyle segmentStyle() const; + void setSegmentStyle(QLCDNumber::SegmentStyle); + double value() const; + int intValue() const; + virtual QSize sizeHint() const; + void display(const QString &str); + void display(double num /Constrained/); + void display(int num); + void setHexMode(); + void setDecMode(); + void setOctMode(); + void setBinMode(); + void setSmallDecimalPoint(bool); + +signals: + void overflow(); + +protected: + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlineedit.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlineedit.sip new file mode 100644 index 0000000..6c62230 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlineedit.sip @@ -0,0 +1,172 @@ +// qlineedit.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QLineEdit : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QLineEdit(QWidget *parent /TransferThis/ = 0); + QLineEdit(const QString &contents, QWidget *parent /TransferThis/ = 0); + virtual ~QLineEdit(); + QString text() const; + QString displayText() const; + int maxLength() const; + void setMaxLength(int); + void setFrame(bool); + bool hasFrame() const; + + enum EchoMode + { + Normal, + NoEcho, + Password, + PasswordEchoOnEdit, + }; + + QLineEdit::EchoMode echoMode() const; + void setEchoMode(QLineEdit::EchoMode); + bool isReadOnly() const; + void setReadOnly(bool); + void setValidator(const QValidator * /KeepReference/); + const QValidator *validator() const; + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + int cursorPosition() const; + void setCursorPosition(int); + int cursorPositionAt(const QPoint &pos); + void setAlignment(Qt::Alignment flag); + Qt::Alignment alignment() const; + void cursorForward(bool mark, int steps = 1); + void cursorBackward(bool mark, int steps = 1); + void cursorWordForward(bool mark); + void cursorWordBackward(bool mark); + void backspace(); + void del() /PyName=del_/; + void home(bool mark); + void end(bool mark); + bool isModified() const; + void setModified(bool); + void setSelection(int, int); + bool hasSelectedText() const; + QString selectedText() const; + int selectionStart() const; + bool isUndoAvailable() const; + bool isRedoAvailable() const; + void setDragEnabled(bool b); + bool dragEnabled() const; + QString inputMask() const; + void setInputMask(const QString &inputMask); + bool hasAcceptableInput() const; + void setText(const QString &); + void clear(); + void selectAll(); + void undo(); + void redo(); + void cut(); + void copy() const; + void paste(); + void deselect(); + void insert(const QString &); + QMenu *createStandardContextMenu() /Factory/; + +signals: + void textChanged(const QString &); + void textEdited(const QString &); + void cursorPositionChanged(int, int); + void returnPressed(); + void editingFinished(); + void selectionChanged(); + +protected: + void initStyleOption(QStyleOptionFrame *option) const; + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void dragEnterEvent(QDragEnterEvent *); + virtual void dragMoveEvent(QDragMoveEvent *e); + virtual void dragLeaveEvent(QDragLeaveEvent *e); + virtual void dropEvent(QDropEvent *); + virtual void changeEvent(QEvent *); + virtual void contextMenuEvent(QContextMenuEvent *); + virtual void inputMethodEvent(QInputMethodEvent *); + QRect cursorRect() const; + +public: + virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const; + virtual bool event(QEvent *); + void setCompleter(QCompleter *completer /KeepReference/); + QCompleter *completer() const; + void setTextMargins(int left, int top, int right, int bottom); + void getTextMargins(int *left, int *top, int *right, int *bottom) const; + void setTextMargins(const QMargins &margins); + QMargins textMargins() const; + QString placeholderText() const; + void setPlaceholderText(const QString &); + void setCursorMoveStyle(Qt::CursorMoveStyle style); + Qt::CursorMoveStyle cursorMoveStyle() const; +%If (Qt_5_2_0 -) + + enum ActionPosition + { + LeadingPosition, + TrailingPosition, + }; + +%End +%If (Qt_5_2_0 -) + void setClearButtonEnabled(bool enable); +%End +%If (Qt_5_2_0 -) + bool isClearButtonEnabled() const; +%End +%If (Qt_5_2_0 -) + void addAction(QAction *action); +%End +%If (Qt_5_2_0 -) + void addAction(QAction *action, QLineEdit::ActionPosition position); +%End +%If (Qt_5_2_0 -) + QAction *addAction(const QIcon &icon, QLineEdit::ActionPosition position) /Transfer/; +%End +%If (Qt_5_7_0 -) + QVariant inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const; +%End +%If (Qt_5_10_0 -) + int selectionEnd() const; +%End +%If (Qt_5_10_0 -) + int selectionLength() const; +%End + +signals: +%If (Qt_5_12_0 -) + void inputRejected(); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlistview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlistview.sip new file mode 100644 index 0000000..8e98f16 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlistview.sip @@ -0,0 +1,147 @@ +// qlistview.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QListView : public QAbstractItemView +{ +%TypeHeaderCode +#include +%End + +public: + enum Movement + { + Static, + Free, + Snap, + }; + + enum Flow + { + LeftToRight, + TopToBottom, + }; + + enum ResizeMode + { + Fixed, + Adjust, + }; + + enum LayoutMode + { + SinglePass, + Batched, + }; + + enum ViewMode + { + ListMode, + IconMode, + }; + + explicit QListView(QWidget *parent /TransferThis/ = 0); + virtual ~QListView(); + void setMovement(QListView::Movement movement); + QListView::Movement movement() const; + void setFlow(QListView::Flow flow); + QListView::Flow flow() const; + void setWrapping(bool enable); + bool isWrapping() const; + void setResizeMode(QListView::ResizeMode mode); + QListView::ResizeMode resizeMode() const; + void setLayoutMode(QListView::LayoutMode mode); + QListView::LayoutMode layoutMode() const; + void setSpacing(int space); + int spacing() const; + void setGridSize(const QSize &size); + QSize gridSize() const; + void setViewMode(QListView::ViewMode mode); + QListView::ViewMode viewMode() const; + void clearPropertyFlags(); + bool isRowHidden(int row) const; + void setRowHidden(int row, bool hide); + void setModelColumn(int column); + int modelColumn() const; + void setUniformItemSizes(bool enable); + bool uniformItemSizes() const; + virtual QRect visualRect(const QModelIndex &index) const; + virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); + virtual QModelIndex indexAt(const QPoint &p) const; + virtual void reset(); + virtual void setRootIndex(const QModelIndex &index); + +signals: + void indexesMoved(const QModelIndexList &indexes); + +protected: + virtual void scrollContentsBy(int dx, int dy); + virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); + virtual void rowsInserted(const QModelIndex &parent, int start, int end); + virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); + virtual bool event(QEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void timerEvent(QTimerEvent *e); + virtual void resizeEvent(QResizeEvent *e); + virtual void dragMoveEvent(QDragMoveEvent *e); + virtual void dragLeaveEvent(QDragLeaveEvent *e); + virtual void dropEvent(QDropEvent *e); +%If (Qt_5_6_0 -) + virtual void wheelEvent(QWheelEvent *e); +%End + virtual void startDrag(Qt::DropActions supportedActions); + virtual QStyleOptionViewItem viewOptions() const; + virtual void paintEvent(QPaintEvent *e); + virtual int horizontalOffset() const; + virtual int verticalOffset() const; + virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); + QRect rectForIndex(const QModelIndex &index) const; + void setPositionForIndex(const QPoint &position, const QModelIndex &index); + virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); + virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; + virtual QModelIndexList selectedIndexes() const; + virtual void updateGeometries(); + virtual bool isIndexHidden(const QModelIndex &index) const; +%If (Qt_5_2_0 -) + virtual QSize viewportSizeHint() const; +%End + +public: + void setBatchSize(int batchSize); + int batchSize() const; + void setWordWrap(bool on); + bool wordWrap() const; + void setSelectionRectVisible(bool show); + bool isSelectionRectVisible() const; + +protected: + virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); + +public: +%If (Qt_5_12_0 -) + void setItemAlignment(Qt::Alignment alignment); +%End +%If (Qt_5_12_0 -) + Qt::Alignment itemAlignment() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlistwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlistwidget.sip new file mode 100644 index 0000000..0328f58 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qlistwidget.sip @@ -0,0 +1,196 @@ +// qlistwidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QListWidgetItem /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + enum ItemType + { + Type, + UserType, + }; + + QListWidgetItem(QListWidget *parent /TransferThis/ = 0, int type = Type); + QListWidgetItem(const QString &text, QListWidget *parent /TransferThis/ = 0, int type = Type); + QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent /TransferThis/ = 0, int type = Type); + QListWidgetItem(const QListWidgetItem &other); + virtual ~QListWidgetItem(); + virtual QListWidgetItem *clone() const /Factory/; + QListWidget *listWidget() const; + Qt::ItemFlags flags() const; + QString text() const; + QIcon icon() const; + QString statusTip() const; + QString toolTip() const; + QString whatsThis() const; + QFont font() const; + int textAlignment() const; + void setTextAlignment(int alignment); + Qt::CheckState checkState() const; + void setCheckState(Qt::CheckState state); + QSize sizeHint() const; + void setSizeHint(const QSize &size); + virtual QVariant data(int role) const; + virtual void setData(int role, const QVariant &value); + virtual bool operator<(const QListWidgetItem &other /NoCopy/) const; + virtual void read(QDataStream &in) /ReleaseGIL/; + virtual void write(QDataStream &out) const /ReleaseGIL/; + int type() const; + void setFlags(Qt::ItemFlags aflags); + void setText(const QString &atext); + void setIcon(const QIcon &aicon); + void setStatusTip(const QString &astatusTip); + void setToolTip(const QString &atoolTip); + void setWhatsThis(const QString &awhatsThis); + void setFont(const QFont &afont); + QBrush background() const; + void setBackground(const QBrush &brush); + QBrush foreground() const; + void setForeground(const QBrush &brush); + void setSelected(bool aselect); + bool isSelected() const; + void setHidden(bool ahide); + bool isHidden() const; + +private: + QListWidgetItem &operator=(const QListWidgetItem &); +}; + +QDataStream &operator<<(QDataStream &out, const QListWidgetItem &item /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &in, QListWidgetItem &item /Constrained/) /ReleaseGIL/; + +class QListWidget : public QListView +{ +%TypeHeaderCode +#include +%End + +public: + explicit QListWidget(QWidget *parent /TransferThis/ = 0); + virtual ~QListWidget(); + QListWidgetItem *item(int row) const; + int row(const QListWidgetItem *item) const; + void insertItem(int row, QListWidgetItem *item /Transfer/); + void insertItem(int row, const QString &label); + void insertItems(int row, const QStringList &labels); + void addItem(QListWidgetItem *aitem /Transfer/); + void addItem(const QString &label); + void addItems(const QStringList &labels); + QListWidgetItem *takeItem(int row) /TransferBack/; + int count() const /__len__/; + QListWidgetItem *currentItem() const; + void setCurrentItem(QListWidgetItem *item); + void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command); + int currentRow() const; + void setCurrentRow(int row); + void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command); + QListWidgetItem *itemAt(const QPoint &p) const; + QListWidgetItem *itemAt(int ax, int ay) const; + QWidget *itemWidget(QListWidgetItem *item) const; + void setItemWidget(QListWidgetItem *item, QWidget *widget /Transfer/); +%MethodCode + // We have to break the association with any existing widget. + QWidget *w = sipCpp->itemWidget(a0); + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferTo(wo, 0); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->setItemWidget(a0, a1); + Py_END_ALLOW_THREADS +%End + + QRect visualItemRect(const QListWidgetItem *item) const; + void sortItems(Qt::SortOrder order = Qt::AscendingOrder); + void editItem(QListWidgetItem *item); + void openPersistentEditor(QListWidgetItem *item); + void closePersistentEditor(QListWidgetItem *item); + QList selectedItems() const; + QList findItems(const QString &text, Qt::MatchFlags flags) const; + +public slots: + void clear(); + void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); + +signals: + void itemPressed(QListWidgetItem *item); + void itemClicked(QListWidgetItem *item); + void itemDoubleClicked(QListWidgetItem *item); + void itemActivated(QListWidgetItem *item); + void itemEntered(QListWidgetItem *item); + void itemChanged(QListWidgetItem *item); + void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous); + void currentTextChanged(const QString ¤tText); + void currentRowChanged(int currentRow); + void itemSelectionChanged(); + +protected: + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QList items) const /TransferBack/; + virtual bool dropMimeData(int index, const QMimeData *data, Qt::DropAction action); + virtual Qt::DropActions supportedDropActions() const; + QList items(const QMimeData *data) const; + QModelIndex indexFromItem(QListWidgetItem *item) const; + QListWidgetItem *itemFromIndex(const QModelIndex &index) const; + virtual bool event(QEvent *e); + +public: + void setSortingEnabled(bool enable); + bool isSortingEnabled() const; + virtual void dropEvent(QDropEvent *event); + void removeItemWidget(QListWidgetItem *aItem); +%MethodCode + // We have to break the association with any existing widget. + QWidget *w = sipCpp->itemWidget(a0); + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferTo(wo, 0); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->removeItemWidget(a0); + Py_END_ALLOW_THREADS +%End + +%If (Qt_5_7_0 -) + virtual void setSelectionModel(QItemSelectionModel *selectionModel); +%End +%If (Qt_5_10_0 -) + bool isPersistentEditorOpen(QListWidgetItem *item) const; +%End + +private: + virtual void setModel(QAbstractItemModel *model /KeepReference/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmaccocoaviewcontainer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmaccocoaviewcontainer.sip new file mode 100644 index 0000000..1959d37 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmaccocoaviewcontainer.sip @@ -0,0 +1,42 @@ +// This is the SIP interface definition for the QMacCocoaViewContainer. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (WS_MACX) +%If (PyQt_MacOSXOnly) + +class QMacCocoaViewContainer : QWidget /FileExtension=".mm"/ +{ +%TypeHeaderCode +#include +%End + +public: + QMacCocoaViewContainer(void *cocoaViewToWrap, QWidget *parent /TransferThis/ = 0) [(NSView *, QWidget *)]; + virtual ~QMacCocoaViewContainer(); + + void setCocoaView(void *cocoaViewToWrap) [void (NSView *)]; + void *cocoaView() const [NSView * ()]; + +private: + QMacCocoaViewContainer(const QMacCocoaViewContainer &); +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmainwindow.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmainwindow.sip new file mode 100644 index 0000000..148d30c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmainwindow.sip @@ -0,0 +1,123 @@ +// qmainwindow.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMainWindow : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QMainWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QMainWindow(); + QSize iconSize() const; + void setIconSize(const QSize &iconSize); + Qt::ToolButtonStyle toolButtonStyle() const; + void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle); + QMenuBar *menuBar() const /Transfer/; + void setMenuBar(QMenuBar *menubar /Transfer/); + QStatusBar *statusBar() const /Transfer/; + void setStatusBar(QStatusBar *statusbar /Transfer/); + QWidget *centralWidget() const; + void setCentralWidget(QWidget *widget /Transfer/); + void setCorner(Qt::Corner corner, Qt::DockWidgetArea area); + Qt::DockWidgetArea corner(Qt::Corner corner) const; + void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea); + void insertToolBarBreak(QToolBar *before); + void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar /Transfer/); + void addToolBar(QToolBar *toolbar /Transfer/); + QToolBar *addToolBar(const QString &title) /Transfer/; + void insertToolBar(QToolBar *before, QToolBar *toolbar /Transfer/); + void removeToolBar(QToolBar *toolbar); + Qt::ToolBarArea toolBarArea(QToolBar *toolbar) const; + void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget /Transfer/); + void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget /Transfer/, Qt::Orientation orientation); + void splitDockWidget(QDockWidget *after, QDockWidget *dockwidget /Transfer/, Qt::Orientation orientation); + void removeDockWidget(QDockWidget *dockwidget /TransferBack/); + Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const; + QByteArray saveState(int version = 0) const; + bool restoreState(const QByteArray &state, int version = 0); + virtual QMenu *createPopupMenu(); + +public slots: + void setAnimated(bool enabled); + void setDockNestingEnabled(bool enabled); + +signals: + void iconSizeChanged(const QSize &iconSize); + void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle); +%If (Qt_5_8_0 -) + void tabifiedDockWidgetActivated(QDockWidget *dockWidget); +%End + +protected: + virtual void contextMenuEvent(QContextMenuEvent *event); + virtual bool event(QEvent *event); + +public: + bool isAnimated() const; + bool isDockNestingEnabled() const; + bool isSeparator(const QPoint &pos) const; + QWidget *menuWidget() const; + void setMenuWidget(QWidget *menubar /Transfer/); + void tabifyDockWidget(QDockWidget *first, QDockWidget *second); + + enum DockOption + { + AnimatedDocks, + AllowNestedDocks, + AllowTabbedDocks, + ForceTabbedDocks, + VerticalTabs, +%If (Qt_5_6_0 -) + GroupedDragging, +%End + }; + + typedef QFlags DockOptions; + void setDockOptions(QMainWindow::DockOptions options); + QMainWindow::DockOptions dockOptions() const; + void removeToolBarBreak(QToolBar *before); + bool toolBarBreak(QToolBar *toolbar) const; +%If (Qt_5_2_0 -) + void setUnifiedTitleAndToolBarOnMac(bool set); +%End +%If (Qt_5_2_0 -) + bool unifiedTitleAndToolBarOnMac() const; +%End + bool restoreDockWidget(QDockWidget *dockwidget); + bool documentMode() const; + void setDocumentMode(bool enabled); + QTabWidget::TabShape tabShape() const; + void setTabShape(QTabWidget::TabShape tabShape); + QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const; + void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition); + QList tabifiedDockWidgets(QDockWidget *dockwidget) const; +%If (Qt_5_2_0 -) + QWidget *takeCentralWidget() /TransferBack/; +%End +%If (Qt_5_6_0 -) + void resizeDocks(const QList &docks, const QList &sizes, Qt::Orientation orientation); +%End +}; + +QFlags operator|(QMainWindow::DockOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmdiarea.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmdiarea.sip new file mode 100644 index 0000000..c1ba22a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmdiarea.sip @@ -0,0 +1,127 @@ +// qmdiarea.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMdiArea : public QAbstractScrollArea +{ +%TypeHeaderCode +#include +%End + +public: + enum AreaOption + { + DontMaximizeSubWindowOnActivation, + }; + + typedef QFlags AreaOptions; + + enum ViewMode + { + SubWindowView, + TabbedView, + }; + + enum WindowOrder + { + CreationOrder, + StackingOrder, + ActivationHistoryOrder, + }; + + QMdiArea(QWidget *parent /TransferThis/ = 0); + virtual ~QMdiArea(); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + QMdiSubWindow *activeSubWindow() const; + QMdiSubWindow *addSubWindow(QWidget *widget /Transfer/, Qt::WindowFlags flags = Qt::WindowFlags()); + QList subWindowList(QMdiArea::WindowOrder order = QMdiArea::CreationOrder) const; + QMdiSubWindow *currentSubWindow() const; + void removeSubWindow(QWidget *widget /GetWrapper/); +%MethodCode + // We need to implement /TransferBack/ on the argument, but it might be the + // QMdiSubWindow that wraps the widget we are really after. + QMdiSubWindow *swin = qobject_cast(a0); + + if (swin) + { + QWidget *w = swin->widget(); + + a0Wrapper = (w ? sipGetPyObject(w, sipType_QWidget) : 0); + } + else + a0Wrapper = 0; + + Py_BEGIN_ALLOW_THREADS + sipCpp->removeSubWindow(a0); + Py_END_ALLOW_THREADS + + if (a0Wrapper) + sipTransferBack(a0Wrapper); +%End + + QBrush background() const; + void setBackground(const QBrush &background); + void setOption(QMdiArea::AreaOption option, bool on = true); + bool testOption(QMdiArea::AreaOption opton) const; + +signals: + void subWindowActivated(QMdiSubWindow *); + +public slots: + void setActiveSubWindow(QMdiSubWindow *window); + void tileSubWindows(); + void cascadeSubWindows(); + void closeActiveSubWindow(); + void closeAllSubWindows(); + void activateNextSubWindow(); + void activatePreviousSubWindow(); + +protected: + virtual void setupViewport(QWidget *viewport); + virtual bool event(QEvent *event); + virtual bool eventFilter(QObject *object, QEvent *event); + virtual void paintEvent(QPaintEvent *paintEvent); + virtual void childEvent(QChildEvent *childEvent); + virtual void resizeEvent(QResizeEvent *resizeEvent); + virtual void timerEvent(QTimerEvent *timerEvent); + virtual void showEvent(QShowEvent *showEvent); + virtual bool viewportEvent(QEvent *event); + virtual void scrollContentsBy(int dx, int dy); + +public: + QMdiArea::WindowOrder activationOrder() const; + void setActivationOrder(QMdiArea::WindowOrder order); + void setViewMode(QMdiArea::ViewMode mode); + QMdiArea::ViewMode viewMode() const; + void setTabShape(QTabWidget::TabShape shape); + QTabWidget::TabShape tabShape() const; + void setTabPosition(QTabWidget::TabPosition position); + QTabWidget::TabPosition tabPosition() const; + bool documentMode() const; + void setDocumentMode(bool enabled); + void setTabsClosable(bool closable); + bool tabsClosable() const; + void setTabsMovable(bool movable); + bool tabsMovable() const; +}; + +QFlags operator|(QMdiArea::AreaOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmdisubwindow.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmdisubwindow.sip new file mode 100644 index 0000000..c7e96aa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmdisubwindow.sip @@ -0,0 +1,119 @@ +// qmdisubwindow.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMdiSubWindow : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum SubWindowOption + { + RubberBandResize, + RubberBandMove, + }; + + typedef QFlags SubWindowOptions; + QMdiSubWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QMdiSubWindow(); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + void setWidget(QWidget *widget /Transfer/); +%MethodCode + // We have to implement /TransferBack/ on any existing widget. + QWidget *w = sipCpp->widget(); + + Py_BEGIN_ALLOW_THREADS + sipCpp->setWidget(a0); + Py_END_ALLOW_THREADS + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferBack(wo); + } +%End + + QWidget *widget() const; + bool isShaded() const; + void setOption(QMdiSubWindow::SubWindowOption option, bool on = true); + bool testOption(QMdiSubWindow::SubWindowOption) const; + void setKeyboardSingleStep(int step); + int keyboardSingleStep() const; + void setKeyboardPageStep(int step); + int keyboardPageStep() const; + void setSystemMenu(QMenu *systemMenu /Transfer/); +%MethodCode + // We have to break the parent association on any existing menu. + QMenu *w = sipCpp->systemMenu(); + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QMenu); + + if (wo) + sipTransferTo(wo, 0); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->setSystemMenu(a0); + Py_END_ALLOW_THREADS +%End + + QMenu *systemMenu() const; + QMdiArea *mdiArea() const; + +signals: + void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState); + void aboutToActivate(); + +public slots: + void showSystemMenu(); + void showShaded(); + +protected: + virtual bool eventFilter(QObject *object, QEvent *event); + virtual bool event(QEvent *event); + virtual void showEvent(QShowEvent *showEvent); + virtual void hideEvent(QHideEvent *hideEvent); + virtual void changeEvent(QEvent *changeEvent); + virtual void closeEvent(QCloseEvent *closeEvent); + virtual void leaveEvent(QEvent *leaveEvent); + virtual void resizeEvent(QResizeEvent *resizeEvent); + virtual void timerEvent(QTimerEvent *timerEvent); + virtual void moveEvent(QMoveEvent *moveEvent); + virtual void paintEvent(QPaintEvent *paintEvent); + virtual void mousePressEvent(QMouseEvent *mouseEvent); + virtual void mouseDoubleClickEvent(QMouseEvent *mouseEvent); + virtual void mouseReleaseEvent(QMouseEvent *mouseEvent); + virtual void mouseMoveEvent(QMouseEvent *mouseEvent); + virtual void keyPressEvent(QKeyEvent *keyEvent); + virtual void contextMenuEvent(QContextMenuEvent *contextMenuEvent); + virtual void focusInEvent(QFocusEvent *focusInEvent); + virtual void focusOutEvent(QFocusEvent *focusOutEvent); + virtual void childEvent(QChildEvent *childEvent); +}; + +QFlags operator|(QMdiSubWindow::SubWindowOption f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmenu.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmenu.sip new file mode 100644 index 0000000..ea092d1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmenu.sip @@ -0,0 +1,163 @@ +// qmenu.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMenu : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QMenu(QWidget *parent /TransferThis/ = 0); + QMenu(const QString &title, QWidget *parent /TransferThis/ = 0); + virtual ~QMenu(); + void addAction(QAction *action); + QAction *addAction(const QString &text) /Transfer/; + QAction *addAction(const QIcon &icon, const QString &text) /Transfer/; + QAction *addAction(const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/, const QKeySequence &shortcut = 0) /Transfer/; +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData(), *a2); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(1, a1); + } +%End + + QAction *addAction(const QIcon &icon, const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/, const QKeySequence &shortcut = 0) /Transfer/; +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipRes = sipCpp->addAction(*a0, *a1, receiver, slot_signature.constData(), *a3); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(2, a2); + } +%End + + QAction *addMenu(QMenu *menu); + QMenu *addMenu(const QString &title) /Transfer/; + QMenu *addMenu(const QIcon &icon, const QString &title) /Transfer/; + QAction *addSeparator() /Transfer/; + QAction *insertMenu(QAction *before, QMenu *menu); + QAction *insertSeparator(QAction *before) /Transfer/; + void clear(); + void setTearOffEnabled(bool); + bool isTearOffEnabled() const; + bool isTearOffMenuVisible() const; + void hideTearOffMenu(); + void setDefaultAction(QAction * /KeepReference/); + QAction *defaultAction() const; + void setActiveAction(QAction *act); + QAction *activeAction() const; + void popup(const QPoint &p, QAction *action = 0); + QAction *exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%If (Py_v3) + QAction *exec() /ReleaseGIL/; +%End + QAction *exec(const QPoint &p, QAction *action = 0) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%If (Py_v3) + QAction *exec(const QPoint &pos, QAction *action = 0) /ReleaseGIL/; +%End + static QAction *exec(QList actions, const QPoint &pos, QAction *at = 0, QWidget *parent = 0) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/; +%If (Py_v3) + static QAction *exec(QList actions, const QPoint &pos, QAction *at = 0, QWidget *parent = 0) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/; +%End + virtual QSize sizeHint() const; + QRect actionGeometry(QAction *) const; + QAction *actionAt(const QPoint &) const; + QAction *menuAction() const; + QString title() const; + void setTitle(const QString &title); + QIcon icon() const; + void setIcon(const QIcon &icon); + void setNoReplayFor(QWidget *widget); + +signals: + void aboutToHide(); + void aboutToShow(); + void hovered(QAction *action); + void triggered(QAction *action); + +protected: + int columnCount() const; + void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const; + virtual void changeEvent(QEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void wheelEvent(QWheelEvent *); + virtual void enterEvent(QEvent *); + virtual void leaveEvent(QEvent *); + virtual void hideEvent(QHideEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void actionEvent(QActionEvent *); + virtual void timerEvent(QTimerEvent *); + virtual bool event(QEvent *); + virtual bool focusNextPrevChild(bool next); + +public: + bool isEmpty() const; + bool separatorsCollapsible() const; + void setSeparatorsCollapsible(bool collapse); +%If (Qt_5_1_0 -) + QAction *addSection(const QString &text) /Transfer/; +%End +%If (Qt_5_1_0 -) + QAction *addSection(const QIcon &icon, const QString &text) /Transfer/; +%End +%If (Qt_5_1_0 -) + QAction *insertSection(QAction *before, const QString &text) /Transfer/; +%End +%If (Qt_5_1_0 -) + QAction *insertSection(QAction *before, const QIcon &icon, const QString &text) /Transfer/; +%End +%If (Qt_5_1_0 -) + bool toolTipsVisible() const; +%End +%If (Qt_5_1_0 -) + void setToolTipsVisible(bool visible); +%End +%If (Qt_5_2_0 -) +%If (WS_MACX) +%If (PyQt_MacOSXOnly) + void setAsDockMenu(); +%End +%End +%End +%If (Qt_5_7_0 -) + void showTearOffMenu(); +%End +%If (Qt_5_7_0 -) + void showTearOffMenu(const QPoint &pos); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmenubar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmenubar.sip new file mode 100644 index 0000000..6d94b3c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmenubar.sip @@ -0,0 +1,93 @@ +// qmenubar.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMenuBar : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QMenuBar(QWidget *parent /TransferThis/ = 0); + virtual ~QMenuBar(); + void addAction(QAction *action); + QAction *addAction(const QString &text) /Transfer/; + QAction *addAction(const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /Transfer/; +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(1, a1); + } +%End + + QAction *addMenu(QMenu *menu); + QMenu *addMenu(const QString &title) /Transfer/; + QMenu *addMenu(const QIcon &icon, const QString &title) /Transfer/; + QAction *addSeparator() /Transfer/; + QAction *insertMenu(QAction *before, QMenu *menu); + QAction *insertSeparator(QAction *before) /Transfer/; + void clear(); + QAction *activeAction() const; + void setActiveAction(QAction *action); + void setDefaultUp(bool); + bool isDefaultUp() const; + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + virtual int heightForWidth(int) const; + QRect actionGeometry(QAction *) const; + QAction *actionAt(const QPoint &) const; + void setCornerWidget(QWidget *widget /Transfer/, Qt::Corner corner = Qt::TopRightCorner); + QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const; + virtual void setVisible(bool visible); + +signals: + void triggered(QAction *action); + void hovered(QAction *action); + +protected: + void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const; + virtual void changeEvent(QEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void leaveEvent(QEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void actionEvent(QActionEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual bool eventFilter(QObject *, QEvent *); + virtual bool event(QEvent *); + virtual void timerEvent(QTimerEvent *); + +public: + bool isNativeMenuBar() const; + void setNativeMenuBar(bool nativeMenuBar); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmessagebox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmessagebox.sip new file mode 100644 index 0000000..3400d64 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmessagebox.sip @@ -0,0 +1,172 @@ +// qmessagebox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMessageBox : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + enum ButtonRole + { + InvalidRole, + AcceptRole, + RejectRole, + DestructiveRole, + ActionRole, + HelpRole, + YesRole, + NoRole, + ResetRole, + ApplyRole, + }; + + enum Icon + { + NoIcon, + Information, + Warning, + Critical, + Question, + }; + + enum StandardButton + { + NoButton, + Ok, + Save, + SaveAll, + Open, + Yes, + YesToAll, + No, + NoToAll, + Abort, + Retry, + Ignore, + Close, + Cancel, + Discard, + Help, + Apply, + Reset, + RestoreDefaults, + FirstButton, + LastButton, + YesAll, + NoAll, + Default, + Escape, + FlagMask, + ButtonMask, + }; + + typedef QFlags StandardButtons; + typedef QMessageBox::StandardButton Button; + explicit QMessageBox(QWidget *parent /TransferThis/ = 0); + QMessageBox(QMessageBox::Icon icon, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::NoButton, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); + virtual ~QMessageBox(); + QString text() const; + void setText(const QString &); + QMessageBox::Icon icon() const; + void setIcon(QMessageBox::Icon); + QPixmap iconPixmap() const; + void setIconPixmap(const QPixmap &); + Qt::TextFormat textFormat() const; + void setTextFormat(Qt::TextFormat); + static QMessageBox::StandardButton information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/; + static QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::StandardButtons(QMessageBox::Yes | QMessageBox::No), QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/; + static QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/; + static QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/; + static void about(QWidget *parent, const QString &caption, const QString &text) /ReleaseGIL/; + static void aboutQt(QWidget *parent, const QString &title = QString()) /ReleaseGIL/; + static QPixmap standardIcon(QMessageBox::Icon icon); + +protected: + virtual bool event(QEvent *e); + virtual void resizeEvent(QResizeEvent *); + virtual void showEvent(QShowEvent *); + virtual void closeEvent(QCloseEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void changeEvent(QEvent *); + +public: + void addButton(QAbstractButton *button /Transfer/, QMessageBox::ButtonRole role); + QPushButton *addButton(const QString &text, QMessageBox::ButtonRole role) /Transfer/; + QPushButton *addButton(QMessageBox::StandardButton button) /Transfer/; + void removeButton(QAbstractButton *button /TransferBack/); + void setStandardButtons(QMessageBox::StandardButtons buttons); + QMessageBox::StandardButtons standardButtons() const; + QMessageBox::StandardButton standardButton(QAbstractButton *button) const; + QAbstractButton *button(QMessageBox::StandardButton which) const; + QPushButton *defaultButton() const; + void setDefaultButton(QPushButton *button /KeepReference/); + void setDefaultButton(QMessageBox::StandardButton button); + QAbstractButton *escapeButton() const; + void setEscapeButton(QAbstractButton *button /KeepReference/); + void setEscapeButton(QMessageBox::StandardButton button); + QAbstractButton *clickedButton() const; + QString informativeText() const; + void setInformativeText(const QString &text); + QString detailedText() const; + void setDetailedText(const QString &text); + void setWindowTitle(const QString &title); + void setWindowModality(Qt::WindowModality windowModality); + virtual void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End + + QList buttons() const; + QMessageBox::ButtonRole buttonRole(QAbstractButton *button) const; + +signals: + void buttonClicked(QAbstractButton *button); + +public: +%If (Qt_5_1_0 -) + void setTextInteractionFlags(Qt::TextInteractionFlags flags); +%End +%If (Qt_5_1_0 -) + Qt::TextInteractionFlags textInteractionFlags() const; +%End +%If (Qt_5_2_0 -) + void setCheckBox(QCheckBox *cb); +%End +%If (Qt_5_2_0 -) + QCheckBox *checkBox() const; +%End +}; + +QFlags operator|(QMessageBox::StandardButton f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmouseeventtransition.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmouseeventtransition.sip new file mode 100644 index 0000000..46c4ec0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qmouseeventtransition.sip @@ -0,0 +1,43 @@ +// qmouseeventtransition.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QMouseEventTransition : public QEventTransition +{ +%TypeHeaderCode +#include +%End + +public: + QMouseEventTransition(QState *sourceState /TransferThis/ = 0); + QMouseEventTransition(QObject *object /KeepReference=10/, QEvent::Type type, Qt::MouseButton button, QState *sourceState /TransferThis/ = 0); + virtual ~QMouseEventTransition(); + Qt::MouseButton button() const; + void setButton(Qt::MouseButton button); + Qt::KeyboardModifiers modifierMask() const; + void setModifierMask(Qt::KeyboardModifiers modifiers); + QPainterPath hitTestPath() const; + void setHitTestPath(const QPainterPath &path); + +protected: + virtual void onTransition(QEvent *event); + virtual bool eventTest(QEvent *event); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qopenglwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qopenglwidget.sip new file mode 100644 index 0000000..350262f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qopenglwidget.sip @@ -0,0 +1,85 @@ +// qopenglwidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_4_0 -) +%If (PyQt_OpenGL) + +class QOpenGLWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QOpenGLWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QOpenGLWidget(); + void setFormat(const QSurfaceFormat &format); + QSurfaceFormat format() const; + bool isValid() const; + void makeCurrent(); + void doneCurrent(); + QOpenGLContext *context() const; + GLuint defaultFramebufferObject() const; + QImage grabFramebuffer(); + +signals: + void aboutToCompose(); + void frameSwapped(); + void aboutToResize(); + void resized(); + +protected: + virtual void initializeGL(); + virtual void resizeGL(int w, int h); + virtual void paintGL(); + virtual void paintEvent(QPaintEvent *e); + virtual void resizeEvent(QResizeEvent *e); + virtual bool event(QEvent *e); + virtual int metric(QPaintDevice::PaintDeviceMetric metric) const; + virtual QPaintEngine *paintEngine() const; + +public: +%If (Qt_5_5_0 -) + + enum UpdateBehavior + { + NoPartialUpdate, + PartialUpdate, + }; + +%End +%If (Qt_5_5_0 -) + void setUpdateBehavior(QOpenGLWidget::UpdateBehavior updateBehavior); +%End +%If (Qt_5_5_0 -) + QOpenGLWidget::UpdateBehavior updateBehavior() const; +%End +%If (Qt_5_10_0 -) + GLenum textureFormat() const; +%End +%If (Qt_5_10_0 -) + void setTextureFormat(GLenum texFormat); +%End +}; + +%End +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qplaintextedit.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qplaintextedit.sip new file mode 100644 index 0000000..b493989 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qplaintextedit.sip @@ -0,0 +1,217 @@ +// qplaintextedit.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPlainTextEdit : public QAbstractScrollArea +{ +%TypeHeaderCode +#include +%End + +public: + enum LineWrapMode + { + NoWrap, + WidgetWidth, + }; + + explicit QPlainTextEdit(QWidget *parent /TransferThis/ = 0); + QPlainTextEdit(const QString &text, QWidget *parent /TransferThis/ = 0); + virtual ~QPlainTextEdit(); + void setDocument(QTextDocument *document /KeepReference/); + QTextDocument *document() const; + void setTextCursor(const QTextCursor &cursor); + QTextCursor textCursor() const; + bool isReadOnly() const; + void setReadOnly(bool ro); + void setTextInteractionFlags(Qt::TextInteractionFlags flags); + Qt::TextInteractionFlags textInteractionFlags() const; + void mergeCurrentCharFormat(const QTextCharFormat &modifier); + void setCurrentCharFormat(const QTextCharFormat &format); + QTextCharFormat currentCharFormat() const; + bool tabChangesFocus() const; + void setTabChangesFocus(bool b); + void setDocumentTitle(const QString &title); + QString documentTitle() const; + bool isUndoRedoEnabled() const; + void setUndoRedoEnabled(bool enable); + void setMaximumBlockCount(int maximum); + int maximumBlockCount() const; + QPlainTextEdit::LineWrapMode lineWrapMode() const; + void setLineWrapMode(QPlainTextEdit::LineWrapMode mode); + QTextOption::WrapMode wordWrapMode() const; + void setWordWrapMode(QTextOption::WrapMode policy); + void setBackgroundVisible(bool visible); + bool backgroundVisible() const; + void setCenterOnScroll(bool enabled); + bool centerOnScroll() const; + bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); + QString toPlainText() const; + void ensureCursorVisible(); + virtual QVariant loadResource(int type, const QUrl &name); + QMenu *createStandardContextMenu() /Factory/; +%If (Qt_5_5_0 -) + QMenu *createStandardContextMenu(const QPoint &position) /Factory/; +%End + QTextCursor cursorForPosition(const QPoint &pos) const; + QRect cursorRect(const QTextCursor &cursor) const; + QRect cursorRect() const; + bool overwriteMode() const; + void setOverwriteMode(bool overwrite); + int tabStopWidth() const; + void setTabStopWidth(int width); + int cursorWidth() const; + void setCursorWidth(int width); + void setExtraSelections(const QList &selections); + QList extraSelections() const; + void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); + bool canPaste() const; +%If (PyQt_Printer) + void print(QPagedPaintDevice *printer) const /PyName=print_/; +%End +%If (Py_v3) +%If (PyQt_Printer) + void print(QPagedPaintDevice *printer) const; +%End +%End + int blockCount() const; + +public slots: + void setPlainText(const QString &text); + void cut(); + void copy(); + void paste(); + void undo(); + void redo(); + void clear(); + void selectAll(); + void insertPlainText(const QString &text); + void appendPlainText(const QString &text); + void appendHtml(const QString &html); + void centerCursor(); + +signals: + void textChanged(); + void undoAvailable(bool b); + void redoAvailable(bool b); + void copyAvailable(bool b); + void selectionChanged(); + void cursorPositionChanged(); + void updateRequest(const QRect &rect, int dy); + void blockCountChanged(int newBlockCount); + void modificationChanged(bool); + +protected: + virtual bool event(QEvent *e); + virtual void timerEvent(QTimerEvent *e); + virtual void keyPressEvent(QKeyEvent *e); + virtual void keyReleaseEvent(QKeyEvent *e); + virtual void resizeEvent(QResizeEvent *e); + virtual void paintEvent(QPaintEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void mouseDoubleClickEvent(QMouseEvent *e); + virtual bool focusNextPrevChild(bool next); + virtual void contextMenuEvent(QContextMenuEvent *e); + virtual void dragEnterEvent(QDragEnterEvent *e); + virtual void dragLeaveEvent(QDragLeaveEvent *e); + virtual void dragMoveEvent(QDragMoveEvent *e); + virtual void dropEvent(QDropEvent *e); + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + virtual void showEvent(QShowEvent *); + virtual void changeEvent(QEvent *e); + virtual void wheelEvent(QWheelEvent *e); + virtual void inputMethodEvent(QInputMethodEvent *); + +public: + virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const; + +protected: + virtual QMimeData *createMimeDataFromSelection() const /Factory/; + virtual bool canInsertFromMimeData(const QMimeData *source) const; + virtual void insertFromMimeData(const QMimeData *source); + virtual void scrollContentsBy(int dx, int dy); + QTextBlock firstVisibleBlock() const; + QPointF contentOffset() const; + QRectF blockBoundingRect(const QTextBlock &block) const; + QRectF blockBoundingGeometry(const QTextBlock &block) const; + QAbstractTextDocumentLayout::PaintContext getPaintContext() const; + +public: + QString anchorAt(const QPoint &pos) const; + +public slots: +%If (Qt_5_1_0 -) + void zoomIn(int range = 1); +%End +%If (Qt_5_1_0 -) + void zoomOut(int range = 1); +%End + +public: +%If (Qt_5_3_0 -) + void setPlaceholderText(const QString &placeholderText); +%End +%If (Qt_5_3_0 -) + QString placeholderText() const; +%End +%If (Qt_5_3_0 -) + bool find(const QRegExp &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +%End +%If (Qt_5_13_0 -) + bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +%End +%If (Qt_5_3_0 -) + QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const; +%End +%If (Qt_5_10_0 -) + qreal tabStopDistance() const; +%End +%If (Qt_5_10_0 -) + void setTabStopDistance(qreal distance); +%End +}; + +class QPlainTextDocumentLayout : public QAbstractTextDocumentLayout +{ +%TypeHeaderCode +#include +%End + +public: + QPlainTextDocumentLayout(QTextDocument *document); + virtual ~QPlainTextDocumentLayout(); + virtual void draw(QPainter *, const QAbstractTextDocumentLayout::PaintContext &); + virtual int hitTest(const QPointF &, Qt::HitTestAccuracy) const; + virtual int pageCount() const; + virtual QSizeF documentSize() const; + virtual QRectF frameBoundingRect(QTextFrame *) const; + virtual QRectF blockBoundingRect(const QTextBlock &block) const; + void ensureBlockLayout(const QTextBlock &block) const; + void setCursorWidth(int width); + int cursorWidth() const; + void requestUpdate(); + +protected: + virtual void documentChanged(int from, int, int charsAdded); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qprogressbar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qprogressbar.sip new file mode 100644 index 0000000..7708ab9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qprogressbar.sip @@ -0,0 +1,72 @@ +// qprogressbar.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QProgressBar : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum Direction + { + TopToBottom, + BottomToTop, + }; + + explicit QProgressBar(QWidget *parent /TransferThis/ = 0); + virtual ~QProgressBar(); + int minimum() const; + int maximum() const; + void setRange(int minimum, int maximum); + int value() const; + virtual QString text() const; + void setTextVisible(bool visible); + bool isTextVisible() const; + Qt::Alignment alignment() const; + void setAlignment(Qt::Alignment alignment); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + Qt::Orientation orientation() const; + void setInvertedAppearance(bool invert); + void setTextDirection(QProgressBar::Direction textDirection); + void setFormat(const QString &format); + QString format() const; +%If (Qt_5_1_0 -) + void resetFormat(); +%End + +public slots: + void reset(); + void setMinimum(int minimum); + void setMaximum(int maximum); + void setValue(int value); + void setOrientation(Qt::Orientation); + +signals: + void valueChanged(int value); + +protected: + void initStyleOption(QStyleOptionProgressBar *option) const; + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qprogressdialog.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qprogressdialog.sip new file mode 100644 index 0000000..730dc44 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qprogressdialog.sip @@ -0,0 +1,85 @@ +// qprogressdialog.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QProgressDialog : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + QProgressDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QProgressDialog(); + void setLabel(QLabel *label /Transfer/); + void setCancelButton(QPushButton *button /Transfer/); + void setBar(QProgressBar *bar /Transfer/); + bool wasCanceled() const; + int minimum() const; + int maximum() const; + void setRange(int minimum, int maximum); + int value() const; + virtual QSize sizeHint() const; + QString labelText() const; + int minimumDuration() const; + void setAutoReset(bool b); + bool autoReset() const; + void setAutoClose(bool b); + bool autoClose() const; + +public slots: + void cancel(); + void reset(); + void setMaximum(int maximum); + void setMinimum(int minimum); + void setValue(int progress); + void setLabelText(const QString &); + void setCancelButtonText(const QString &); + void setMinimumDuration(int ms); + +signals: + void canceled(); + +protected: + virtual void resizeEvent(QResizeEvent *); + virtual void closeEvent(QCloseEvent *); + virtual void changeEvent(QEvent *); + virtual void showEvent(QShowEvent *e); + void forceShow(); + +public: + void open(); + void open(SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/); +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipCpp->open(receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(0, a0); + } +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qproxystyle.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qproxystyle.sip new file mode 100644 index 0000000..77597b4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qproxystyle.sip @@ -0,0 +1,61 @@ +// qproxystyle.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QProxyStyle : public QCommonStyle +{ +%TypeHeaderCode +#include +%End + +public: + QProxyStyle(QStyle *style /Transfer/ = 0); + QProxyStyle(const QString &key); + virtual ~QProxyStyle(); + QStyle *baseStyle() const; + void setBaseStyle(QStyle *style /Transfer/); + virtual void drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const; + virtual void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const; + virtual void drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = 0) const; + virtual void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const; + virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const; + virtual QSize sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const; + virtual QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const; + virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget) const; + virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const; + virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const; + virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = 0) const; + virtual int styleHint(QStyle::StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const; + virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const; + virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const; + virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const; + virtual QPixmap standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = 0) const; + virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const; + virtual QPalette standardPalette() const; + virtual void polish(QWidget *widget); + virtual void polish(QPalette &pal /In,Out/); + virtual void polish(QApplication *app); + virtual void unpolish(QWidget *widget); + virtual void unpolish(QApplication *app); + +protected: + virtual bool event(QEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qpushbutton.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qpushbutton.sip new file mode 100644 index 0000000..470b579 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qpushbutton.sip @@ -0,0 +1,64 @@ +// qpushbutton.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QPushButton : public QAbstractButton +{ +%TypeHeaderCode +#include +%End + +public: + explicit QPushButton(QWidget *parent /TransferThis/ = 0); + QPushButton(const QString &text, QWidget *parent /TransferThis/ = 0); + QPushButton(const QIcon &icon, const QString &text, QWidget *parent /TransferThis/ = 0); + virtual ~QPushButton(); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + bool autoDefault() const; + void setAutoDefault(bool); + bool isDefault() const; + void setDefault(bool); + void setMenu(QMenu *menu /KeepReference/); + QMenu *menu() const; + void setFlat(bool); + bool isFlat() const; + +public slots: + void showMenu(); + +protected: + void initStyleOption(QStyleOptionButton *option) const; + virtual bool event(QEvent *e) /ReleaseGIL/; + virtual void paintEvent(QPaintEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); +%If (Qt_5_15_0 -) + virtual bool hitButton(const QPoint &pos) const; +%End +// Protected platform specific methods. +%If (- Qt_5_15_0) +%If (WS_MACX) +bool hitButton(const QPoint &pos) const; +%End +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qpywidgets_qlist.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qpywidgets_qlist.sip new file mode 100644 index 0000000..b7eca90 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qpywidgets_qlist.sip @@ -0,0 +1,124 @@ +// This is the SIP interface definition for the QList based mapped types +// specific to the QtWidgets module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%MappedType QList + /TypeHintIn="Iterable[QWizard.WizardButton]", + TypeHintOut="List[QWizard.WizardButton]", TypeHintValue="[]"/ +{ +%TypeHeaderCode +#include +%End + +%ConvertFromTypeCode + PyObject *l = PyList_New(sipCpp->size()); + + if (!l) + return 0; + + for (int i = 0; i < sipCpp->size(); ++i) + { + PyObject *eobj = sipConvertFromEnum(sipCpp->at(i), + sipType_QWizard_WizardButton); + + if (!eobj) + { + Py_DECREF(l); + + return 0; + } + + PyList_SetItem(l, i, eobj); + } + + return l; +%End + +%ConvertToTypeCode + PyObject *iter = PyObject_GetIter(sipPy); + + if (!sipIsErr) + { + PyErr_Clear(); + Py_XDECREF(iter); + + return (iter +#if PY_MAJOR_VERSION < 3 + && !PyString_Check(sipPy) +#endif + && !PyUnicode_Check(sipPy)); + } + + if (!iter) + { + *sipIsErr = 1; + + return 0; + } + + QList *ql = new QList; + + for (Py_ssize_t i = 0; ; ++i) + { + PyErr_Clear(); + PyObject *itm = PyIter_Next(iter); + + if (!itm) + { + if (PyErr_Occurred()) + { + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + break; + } + + int v = sipConvertToEnum(itm, sipType_QWizard_WizardButton); + + if (PyErr_Occurred()) + { + PyErr_Format(PyExc_TypeError, + "index %zd has type '%s' but 'QWizard.WizardButton' is expected", + i, sipPyTypeName(Py_TYPE(itm))); + + Py_DECREF(itm); + delete ql; + Py_DECREF(iter); + *sipIsErr = 1; + + return 0; + } + + ql->append(static_cast(v)); + + Py_DECREF(itm); + } + + Py_DECREF(iter); + + *sipCppPtr = ql; + + return sipGetState(sipTransferObj); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qradiobutton.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qradiobutton.sip new file mode 100644 index 0000000..d2f5c8b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qradiobutton.sip @@ -0,0 +1,42 @@ +// qradiobutton.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRadioButton : public QAbstractButton +{ +%TypeHeaderCode +#include +%End + +public: + explicit QRadioButton(QWidget *parent /TransferThis/ = 0); + QRadioButton(const QString &text, QWidget *parent /TransferThis/ = 0); + virtual ~QRadioButton(); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + +protected: + void initStyleOption(QStyleOptionButton *button) const; + virtual bool hitButton(const QPoint &) const; + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); + virtual void mouseMoveEvent(QMouseEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qrubberband.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qrubberband.sip new file mode 100644 index 0000000..7f1c415 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qrubberband.sip @@ -0,0 +1,54 @@ +// qrubberband.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QRubberBand : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + enum Shape + { + Line, + Rectangle, + }; + + QRubberBand(QRubberBand::Shape, QWidget *parent /TransferThis/ = 0); + virtual ~QRubberBand(); + QRubberBand::Shape shape() const; + void setGeometry(const QRect &r); + void setGeometry(int ax, int ay, int aw, int ah); + void move(const QPoint &p); + void move(int ax, int ay); + void resize(int w, int h); + void resize(const QSize &s); + +protected: + void initStyleOption(QStyleOptionRubberBand *option) const; + virtual bool event(QEvent *e); + virtual void paintEvent(QPaintEvent *); + virtual void changeEvent(QEvent *); + virtual void showEvent(QShowEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void moveEvent(QMoveEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollarea.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollarea.sip new file mode 100644 index 0000000..1716469 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollarea.sip @@ -0,0 +1,52 @@ +// qscrollarea.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QScrollArea : public QAbstractScrollArea +{ +%TypeHeaderCode +#include +%End + +public: + explicit QScrollArea(QWidget *parent /TransferThis/ = 0); + virtual ~QScrollArea(); + QWidget *widget() const; + void setWidget(QWidget *w /Transfer/); + QWidget *takeWidget() /TransferBack/; + bool widgetResizable() const; + void setWidgetResizable(bool resizable); + Qt::Alignment alignment() const; + void setAlignment(Qt::Alignment); + virtual QSize sizeHint() const; + virtual bool focusNextPrevChild(bool next); + void ensureVisible(int x, int y, int xMargin = 50, int yMargin = 50); + void ensureWidgetVisible(QWidget *childWidget, int xMargin = 50, int yMargin = 50); + +protected: + virtual bool event(QEvent *); + virtual bool eventFilter(QObject *, QEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void scrollContentsBy(int dx, int dy); +%If (Qt_5_2_0 -) + virtual QSize viewportSizeHint() const; +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollbar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollbar.sip new file mode 100644 index 0000000..0c2da44 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollbar.sip @@ -0,0 +1,46 @@ +// qscrollbar.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QScrollBar : public QAbstractSlider +{ +%TypeHeaderCode +#include +%End + +public: + explicit QScrollBar(QWidget *parent /TransferThis/ = 0); + QScrollBar(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); + virtual ~QScrollBar(); + virtual QSize sizeHint() const; + virtual bool event(QEvent *event); + +protected: + void initStyleOption(QStyleOptionSlider *option) const; + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void hideEvent(QHideEvent *); + virtual void contextMenuEvent(QContextMenuEvent *); + virtual void wheelEvent(QWheelEvent *); + virtual void sliderChange(QAbstractSlider::SliderChange change); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscroller.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscroller.sip new file mode 100644 index 0000000..aef52cc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscroller.sip @@ -0,0 +1,88 @@ +// qscroller.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QScroller : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum State + { + Inactive, + Pressed, + Dragging, + Scrolling, + }; + + enum ScrollerGestureType + { + TouchGesture, + LeftMouseButtonGesture, + RightMouseButtonGesture, + MiddleMouseButtonGesture, + }; + + enum Input + { + InputPress, + InputMove, + InputRelease, + }; + + static bool hasScroller(QObject *target); + static QScroller *scroller(QObject *target); + static Qt::GestureType grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = QScroller::TouchGesture); + static Qt::GestureType grabbedGesture(QObject *target); + static void ungrabGesture(QObject *target); + static QList activeScrollers(); + QObject *target() const; + QScroller::State state() const; + bool handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0); + void stop(); + QPointF velocity() const; + QPointF finalPosition() const; + QPointF pixelPerMeter() const; + QScrollerProperties scrollerProperties() const; + void setSnapPositionsX(const QList &positions); + void setSnapPositionsX(qreal first, qreal interval); + void setSnapPositionsY(const QList &positions); + void setSnapPositionsY(qreal first, qreal interval); + +public slots: + void setScrollerProperties(const QScrollerProperties &prop); + void scrollTo(const QPointF &pos); + void scrollTo(const QPointF &pos, int scrollTime); + void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin); + void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime); + void resendPrepareEvent(); + +signals: + void stateChanged(QScroller::State newstate); + void scrollerPropertiesChanged(const QScrollerProperties &); + +private: + QScroller(QObject *target); + virtual ~QScroller(); + QScroller(const QScroller &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollerproperties.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollerproperties.sip new file mode 100644 index 0000000..9a42aaf --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qscrollerproperties.sip @@ -0,0 +1,80 @@ +// qscrollerproperties.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QScrollerProperties +{ +%TypeHeaderCode +#include +%End + +public: + QScrollerProperties(); + QScrollerProperties(const QScrollerProperties &sp); + virtual ~QScrollerProperties(); + bool operator==(const QScrollerProperties &sp) const; + bool operator!=(const QScrollerProperties &sp) const; + static void setDefaultScrollerProperties(const QScrollerProperties &sp); + static void unsetDefaultScrollerProperties(); + + enum OvershootPolicy + { + OvershootWhenScrollable, + OvershootAlwaysOff, + OvershootAlwaysOn, + }; + + enum FrameRates + { + Standard, + Fps60, + Fps30, + Fps20, + }; + + enum ScrollMetric + { + MousePressEventDelay, + DragStartDistance, + DragVelocitySmoothingFactor, + AxisLockThreshold, + ScrollingCurve, + DecelerationFactor, + MinimumVelocity, + MaximumVelocity, + MaximumClickThroughVelocity, + AcceleratingFlickMaximumTime, + AcceleratingFlickSpeedupFactor, + SnapPositionRatio, + SnapTime, + OvershootDragResistanceFactor, + OvershootDragDistanceFactor, + OvershootScrollDistanceFactor, + OvershootScrollTime, + HorizontalOvershootPolicy, + VerticalOvershootPolicy, + FrameRate, + ScrollMetricCount, + }; + + QVariant scrollMetric(QScrollerProperties::ScrollMetric metric) const; + void setScrollMetric(QScrollerProperties::ScrollMetric metric, const QVariant &value); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qshortcut.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qshortcut.sip new file mode 100644 index 0000000..7f7b4d8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qshortcut.sip @@ -0,0 +1,101 @@ +// qshortcut.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QShortcut : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QShortcut(QWidget *parent /TransferThis/); + QShortcut(const QKeySequence &key, QWidget *parent /TransferThis/, SIP_PYOBJECT member /TypeHint="PYQT_SLOT"/ = 0, SIP_PYOBJECT ambiguousMember /TypeHint="PYQT_SLOT"/ = 0, Qt::ShortcutContext context = Qt::WindowShortcut) [(const QKeySequence &key, QWidget *parent, const char *member = 0, const char *ambiguousMember = 0, Qt::ShortcutContext context = Qt::WindowShortcut)]; +%MethodCode + // Construct the shortcut without any connections. + Py_BEGIN_ALLOW_THREADS + sipCpp = new sipQShortcut(*a0, a1, 0, 0, a4); + Py_END_ALLOW_THREADS + + if (a2) + { + QObject *rx2; + QByteArray member2; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &rx2, member2)) == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + QObject::connect(sipCpp, SIGNAL(activated()), rx2, + member2.constData()); + Py_END_ALLOW_THREADS + } + else + { + delete sipCpp; + + if (sipError == sipErrorContinue) + sipError = sipBadCallableArg(2, a2); + } + } + + if (a3) + { + QObject *rx3; + QByteArray member3; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a3, sipCpp, "()", false, &rx3, member3)) == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + QObject::connect(sipCpp, SIGNAL(activatedAmbiguously()), rx3, + member3.constData()); + Py_END_ALLOW_THREADS + } + else + { + delete sipCpp; + + if (sipError == sipErrorContinue) + sipError = sipBadCallableArg(3, a3); + } + } +%End + + virtual ~QShortcut(); + void setKey(const QKeySequence &key); + QKeySequence key() const; + void setEnabled(bool enable); + bool isEnabled() const; + void setContext(Qt::ShortcutContext context); + Qt::ShortcutContext context() const; + void setWhatsThis(const QString &text); + QString whatsThis() const; + int id() const; + QWidget *parentWidget() const; + void setAutoRepeat(bool on); + bool autoRepeat() const; + +signals: + void activated(); + void activatedAmbiguously(); + +protected: + virtual bool event(QEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsizegrip.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsizegrip.sip new file mode 100644 index 0000000..f70a9f6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsizegrip.sip @@ -0,0 +1,45 @@ +// qsizegrip.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSizeGrip : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSizeGrip(QWidget *parent /TransferThis/); + virtual ~QSizeGrip(); + virtual QSize sizeHint() const; + virtual void setVisible(bool); + +protected: + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *mouseEvent); + virtual void mouseMoveEvent(QMouseEvent *); + virtual bool eventFilter(QObject *, QEvent *); + virtual bool event(QEvent *); + virtual void moveEvent(QMoveEvent *moveEvent); + virtual void showEvent(QShowEvent *showEvent); + virtual void hideEvent(QHideEvent *hideEvent); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsizepolicy.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsizepolicy.sip new file mode 100644 index 0000000..3fae1d4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsizepolicy.sip @@ -0,0 +1,118 @@ +// qsizepolicy.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSizePolicy +{ +%TypeHeaderCode +#include +%End + +public: + enum PolicyFlag + { + GrowFlag, + ExpandFlag, + ShrinkFlag, + IgnoreFlag, + }; + + enum Policy + { + Fixed, + Minimum, + Maximum, + Preferred, + MinimumExpanding, + Expanding, + Ignored, + }; + + QSizePolicy(); + QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = QSizePolicy::DefaultType); + QSizePolicy(const QVariant &variant /GetWrapper/) /NoDerived/; +%MethodCode + if (a0->canConvert()) + sipCpp = new QSizePolicy(a0->value()); + else + sipError = sipBadCallableArg(0, a0Wrapper); +%End + + QSizePolicy::Policy horizontalPolicy() const; + QSizePolicy::Policy verticalPolicy() const; + void setHorizontalPolicy(QSizePolicy::Policy d); + void setVerticalPolicy(QSizePolicy::Policy d); + Qt::Orientations expandingDirections() const; + void setHeightForWidth(bool b); + bool hasHeightForWidth() const; + bool operator==(const QSizePolicy &s) const; + bool operator!=(const QSizePolicy &s) const; + int horizontalStretch() const; + int verticalStretch() const; + void setHorizontalStretch(int stretchFactor); + void setVerticalStretch(int stretchFactor); + void transpose(); +%If (Qt_5_9_0 -) + QSizePolicy transposed() const; +%End + + enum ControlType + { + DefaultType, + ButtonBox, + CheckBox, + ComboBox, + Frame, + GroupBox, + Label, + Line, + LineEdit, + PushButton, + RadioButton, + Slider, + SpinBox, + TabWidget, + ToolButton, + }; + + typedef QFlags ControlTypes; + QSizePolicy::ControlType controlType() const; + void setControlType(QSizePolicy::ControlType type); + void setWidthForHeight(bool b); + bool hasWidthForHeight() const; +%If (Qt_5_2_0 -) + bool retainSizeWhenHidden() const; +%End +%If (Qt_5_2_0 -) + void setRetainSizeWhenHidden(bool retainSize); +%End +%If (Qt_5_6_0 -) + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End + +%End +}; + +QDataStream &operator<<(QDataStream &, const QSizePolicy & /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &, QSizePolicy & /Constrained/) /ReleaseGIL/; +QFlags operator|(QSizePolicy::ControlType f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qslider.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qslider.sip new file mode 100644 index 0000000..a48d741 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qslider.sip @@ -0,0 +1,57 @@ +// qslider.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSlider : public QAbstractSlider +{ +%TypeHeaderCode +#include +%End + +public: + enum TickPosition + { + NoTicks, + TicksAbove, + TicksLeft, + TicksBelow, + TicksRight, + TicksBothSides, + }; + + explicit QSlider(QWidget *parent /TransferThis/ = 0); + QSlider(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); + virtual ~QSlider(); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + void setTickPosition(QSlider::TickPosition position); + QSlider::TickPosition tickPosition() const; + void setTickInterval(int ti); + int tickInterval() const; + virtual bool event(QEvent *event); + +protected: + void initStyleOption(QStyleOptionSlider *option) const; + virtual void paintEvent(QPaintEvent *ev); + virtual void mousePressEvent(QMouseEvent *ev); + virtual void mouseReleaseEvent(QMouseEvent *ev); + virtual void mouseMoveEvent(QMouseEvent *ev); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qspinbox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qspinbox.sip new file mode 100644 index 0000000..bd207fd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qspinbox.sip @@ -0,0 +1,124 @@ +// qspinbox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSpinBox : public QAbstractSpinBox +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSpinBox(QWidget *parent /TransferThis/ = 0); + virtual ~QSpinBox(); + int value() const; + QString prefix() const; + void setPrefix(const QString &p); + QString suffix() const; + void setSuffix(const QString &s); + QString cleanText() const; + int singleStep() const; + void setSingleStep(int val); + int minimum() const; + void setMinimum(int min); + int maximum() const; + void setMaximum(int max); + void setRange(int min, int max); + +protected: + virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; + virtual int valueFromText(const QString &text) const; + virtual QString textFromValue(int v) const; + virtual void fixup(QString &str /In,Out/) const; + virtual bool event(QEvent *e); + +public slots: + void setValue(int val); + +signals: + void valueChanged(int); + void valueChanged(const QString &); +%If (Qt_5_14_0 -) + void textChanged(const QString &); +%End + +public: +%If (Qt_5_2_0 -) + int displayIntegerBase() const; +%End +%If (Qt_5_2_0 -) + void setDisplayIntegerBase(int base); +%End +%If (Qt_5_12_0 -) + QAbstractSpinBox::StepType stepType() const; +%End +%If (Qt_5_12_0 -) + void setStepType(QAbstractSpinBox::StepType stepType); +%End +}; + +class QDoubleSpinBox : public QAbstractSpinBox +{ +%TypeHeaderCode +#include +%End + +public: + explicit QDoubleSpinBox(QWidget *parent /TransferThis/ = 0); + virtual ~QDoubleSpinBox(); + double value() const; + QString prefix() const; + void setPrefix(const QString &p); + QString suffix() const; + void setSuffix(const QString &s); + QString cleanText() const; + double singleStep() const; + void setSingleStep(double val); + double minimum() const; + void setMinimum(double min); + double maximum() const; + void setMaximum(double max); + void setRange(double min, double max); + int decimals() const; + void setDecimals(int prec); + virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const; + virtual double valueFromText(const QString &text) const; + virtual QString textFromValue(double v) const; + virtual void fixup(QString &str /In,Out/) const; + +public slots: + void setValue(double val); + +signals: + void valueChanged(double); + void valueChanged(const QString &); +%If (Qt_5_14_0 -) + void textChanged(const QString &); +%End + +public: +%If (Qt_5_12_0 -) + QAbstractSpinBox::StepType stepType() const; +%End +%If (Qt_5_12_0 -) + void setStepType(QAbstractSpinBox::StepType stepType); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsplashscreen.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsplashscreen.sip new file mode 100644 index 0000000..db3be2b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsplashscreen.sip @@ -0,0 +1,55 @@ +// qsplashscreen.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSplashScreen : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = Qt::WindowFlags()); + QSplashScreen(QWidget *parent /TransferThis/, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = Qt::WindowFlags()); +%If (Qt_5_15_0 -) + QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = Qt::WindowFlags()); +%End + virtual ~QSplashScreen(); + void setPixmap(const QPixmap &pixmap); + const QPixmap pixmap() const; + void finish(QWidget *w); + void repaint(); +%If (Qt_5_2_0 -) + QString message() const; +%End + +public slots: + void showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black); + void clearMessage(); + +signals: + void messageChanged(const QString &message); + +protected: + virtual void drawContents(QPainter *painter); + virtual bool event(QEvent *e); + virtual void mousePressEvent(QMouseEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsplitter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsplitter.sip new file mode 100644 index 0000000..f332a65 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsplitter.sip @@ -0,0 +1,100 @@ +// qsplitter.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSplitter : public QFrame +{ +%TypeHeaderCode +#include +%End + +public: + explicit QSplitter(QWidget *parent /TransferThis/ = 0); + QSplitter(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); + virtual ~QSplitter(); + void addWidget(QWidget *widget /Transfer/); + void insertWidget(int index, QWidget *widget /Transfer/); + void setOrientation(Qt::Orientation); + Qt::Orientation orientation() const; + void setChildrenCollapsible(bool); + bool childrenCollapsible() const; + void setCollapsible(int index, bool); + bool isCollapsible(int index) const; + void setOpaqueResize(bool opaque = true); + bool opaqueResize() const; + void refresh(); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + QList sizes() const; + void setSizes(const QList &list); + QByteArray saveState() const; + bool restoreState(const QByteArray &state); + int handleWidth() const; + void setHandleWidth(int); + int indexOf(QWidget *w) const; + QWidget *widget(int index) const; + int count() const /__len__/; + void getRange(int index, int *, int *) const; + QSplitterHandle *handle(int index) const /Transfer/; + void setStretchFactor(int index, int stretch); +%If (Qt_5_9_0 -) + QWidget *replaceWidget(int index, QWidget *widget /Transfer/) /TransferBack/; +%End + +signals: + void splitterMoved(int pos, int index); + +protected: + virtual QSplitterHandle *createHandle() /Transfer/; + virtual void childEvent(QChildEvent *); + virtual bool event(QEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void changeEvent(QEvent *); + void moveSplitter(int pos, int index); + void setRubberBand(int position); + int closestLegalPosition(int, int); +}; + +class QSplitterHandle : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QSplitterHandle(Qt::Orientation o, QSplitter *parent /TransferThis/); + virtual ~QSplitterHandle(); + void setOrientation(Qt::Orientation o); + Qt::Orientation orientation() const; + bool opaqueResize() const; + QSplitter *splitter() const; + virtual QSize sizeHint() const; + +protected: + virtual void paintEvent(QPaintEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual bool event(QEvent *); + void moveSplitter(int p); + int closestLegalPosition(int p); + virtual void resizeEvent(QResizeEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstackedlayout.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstackedlayout.sip new file mode 100644 index 0000000..20b7bf9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstackedlayout.sip @@ -0,0 +1,113 @@ +// qstackedlayout.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStackedLayout : public QLayout +{ +%TypeHeaderCode +#include +%End + +public: + enum StackingMode + { + StackOne, + StackAll, + }; + + QStackedLayout(); + explicit QStackedLayout(QWidget *parent /TransferThis/); + explicit QStackedLayout(QLayout *parentLayout /TransferThis/); + virtual ~QStackedLayout(); + int addWidget(QWidget *w /GetWrapper/); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->addWidget(a0); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a0Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows addWidget(QWidget()). + sipTransferTo(a0Wrapper, sipSelf); + } +%End + + int insertWidget(int index, QWidget *w /GetWrapper/); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipRes = sipCpp->insertWidget(a0, a1); + Py_END_ALLOW_THREADS + + // The layout's parent widget (if there is one) will now have ownership. + QWidget *parent = sipCpp->parentWidget(); + + if (parent) + { + PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget); + + if (py_parent) + sipTransferTo(a1Wrapper, py_parent); + } + else + { + // For now give the Python ownership to the layout. This maintains + // compatibility with previous versions and allows insertWidget(QWidget()). + sipTransferTo(a1Wrapper, sipSelf); + } +%End + + QWidget *currentWidget() const; + int currentIndex() const; + QWidget *widget(int) const; + virtual QWidget *widget(); + virtual int count() const; + virtual void addItem(QLayoutItem *item /Transfer/); + virtual QSize sizeHint() const; + virtual QSize minimumSize() const; + virtual QLayoutItem *itemAt(int) const; + virtual QLayoutItem *takeAt(int) /TransferBack/; + virtual void setGeometry(const QRect &rect); + +signals: + void widgetRemoved(int index); + void currentChanged(int index); + +public slots: + void setCurrentIndex(int index); + void setCurrentWidget(QWidget *w); + +public: + QStackedLayout::StackingMode stackingMode() const; + void setStackingMode(QStackedLayout::StackingMode stackingMode); + virtual bool hasHeightForWidth() const; + virtual int heightForWidth(int width) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstackedwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstackedwidget.sip new file mode 100644 index 0000000..d09fa34 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstackedwidget.sip @@ -0,0 +1,51 @@ +// qstackedwidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStackedWidget : public QFrame +{ +%TypeHeaderCode +#include +%End + +public: + explicit QStackedWidget(QWidget *parent /TransferThis/ = 0); + virtual ~QStackedWidget(); + int addWidget(QWidget *w /Transfer/); + int insertWidget(int index, QWidget *w /Transfer/); + void removeWidget(QWidget *w); + QWidget *currentWidget() const; + int currentIndex() const; + int indexOf(QWidget *) const; + QWidget *widget(int) const; + int count() const /__len__/; + +public slots: + void setCurrentIndex(int index); + void setCurrentWidget(QWidget *w); + +signals: + void currentChanged(int); + void widgetRemoved(int index); + +protected: + virtual bool event(QEvent *e); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstatusbar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstatusbar.sip new file mode 100644 index 0000000..88144b3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstatusbar.sip @@ -0,0 +1,55 @@ +// qstatusbar.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStatusBar : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QStatusBar(QWidget *parent /TransferThis/ = 0); + virtual ~QStatusBar(); + void addWidget(QWidget *widget /Transfer/, int stretch = 0); + void addPermanentWidget(QWidget *widget /Transfer/, int stretch = 0); + void removeWidget(QWidget *widget); + void setSizeGripEnabled(bool); + bool isSizeGripEnabled() const; + QString currentMessage() const; + int insertWidget(int index, QWidget *widget /Transfer/, int stretch = 0); + int insertPermanentWidget(int index, QWidget *widget /Transfer/, int stretch = 0); + +public slots: + void showMessage(const QString &message, int msecs = 0); + void clearMessage(); + +signals: + void messageChanged(const QString &text); + +protected: + virtual void paintEvent(QPaintEvent *); + virtual void resizeEvent(QResizeEvent *); + void reformat(); + void hideOrShow(); + virtual bool event(QEvent *); + virtual void showEvent(QShowEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyle.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyle.sip new file mode 100644 index 0000000..d82d150 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyle.sip @@ -0,0 +1,767 @@ +// qstyle.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStyle : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QStyle(); + virtual ~QStyle(); + virtual void polish(QWidget *); + virtual void unpolish(QWidget *); + virtual void polish(QApplication *); + virtual void unpolish(QApplication *); + virtual void polish(QPalette & /In,Out/); + virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const; + virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const; + virtual void drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const; + virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const; + virtual QPalette standardPalette() const; + + enum StateFlag + { + State_None, + State_Enabled, + State_Raised, + State_Sunken, + State_Off, + State_NoChange, + State_On, + State_DownArrow, + State_Horizontal, + State_HasFocus, + State_Top, + State_Bottom, + State_FocusAtBorder, + State_AutoRaise, + State_MouseOver, + State_UpArrow, + State_Selected, + State_Active, + State_Open, + State_Children, + State_Item, + State_Sibling, + State_Editing, + State_KeyboardFocusChange, + State_ReadOnly, + State_Window, + State_Small, + State_Mini, + }; + + typedef QFlags State; + + enum PrimitiveElement + { + PE_Frame, + PE_FrameDefaultButton, + PE_FrameDockWidget, + PE_FrameFocusRect, + PE_FrameGroupBox, + PE_FrameLineEdit, + PE_FrameMenu, + PE_FrameStatusBar, + PE_FrameTabWidget, + PE_FrameWindow, + PE_FrameButtonBevel, + PE_FrameButtonTool, + PE_FrameTabBarBase, + PE_PanelButtonCommand, + PE_PanelButtonBevel, + PE_PanelButtonTool, + PE_PanelMenuBar, + PE_PanelToolBar, + PE_PanelLineEdit, + PE_IndicatorArrowDown, + PE_IndicatorArrowLeft, + PE_IndicatorArrowRight, + PE_IndicatorArrowUp, + PE_IndicatorBranch, + PE_IndicatorButtonDropDown, + PE_IndicatorViewItemCheck, + PE_IndicatorCheckBox, + PE_IndicatorDockWidgetResizeHandle, + PE_IndicatorHeaderArrow, + PE_IndicatorMenuCheckMark, + PE_IndicatorProgressChunk, + PE_IndicatorRadioButton, + PE_IndicatorSpinDown, + PE_IndicatorSpinMinus, + PE_IndicatorSpinPlus, + PE_IndicatorSpinUp, + PE_IndicatorToolBarHandle, + PE_IndicatorToolBarSeparator, + PE_PanelTipLabel, + PE_IndicatorTabTear, + PE_PanelScrollAreaCorner, + PE_Widget, + PE_IndicatorColumnViewArrow, + PE_FrameStatusBarItem, + PE_IndicatorItemViewItemCheck, + PE_IndicatorItemViewItemDrop, + PE_PanelItemViewItem, + PE_PanelItemViewRow, + PE_PanelStatusBar, + PE_IndicatorTabClose, + PE_PanelMenu, +%If (Qt_5_7_0 -) + PE_IndicatorTabTearLeft, +%End +%If (Qt_5_7_0 -) + PE_IndicatorTabTearRight, +%End + PE_CustomBase, + }; + + virtual void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const = 0; + + enum ControlElement + { + CE_PushButton, + CE_PushButtonBevel, + CE_PushButtonLabel, + CE_CheckBox, + CE_CheckBoxLabel, + CE_RadioButton, + CE_RadioButtonLabel, + CE_TabBarTab, + CE_TabBarTabShape, + CE_TabBarTabLabel, + CE_ProgressBar, + CE_ProgressBarGroove, + CE_ProgressBarContents, + CE_ProgressBarLabel, + CE_MenuItem, + CE_MenuScroller, + CE_MenuVMargin, + CE_MenuHMargin, + CE_MenuTearoff, + CE_MenuEmptyArea, + CE_MenuBarItem, + CE_MenuBarEmptyArea, + CE_ToolButtonLabel, + CE_Header, + CE_HeaderSection, + CE_HeaderLabel, + CE_ToolBoxTab, + CE_SizeGrip, + CE_Splitter, + CE_RubberBand, + CE_DockWidgetTitle, + CE_ScrollBarAddLine, + CE_ScrollBarSubLine, + CE_ScrollBarAddPage, + CE_ScrollBarSubPage, + CE_ScrollBarSlider, + CE_ScrollBarFirst, + CE_ScrollBarLast, + CE_FocusFrame, + CE_ComboBoxLabel, + CE_ToolBar, + CE_ToolBoxTabShape, + CE_ToolBoxTabLabel, + CE_HeaderEmptyArea, + CE_ColumnViewGrip, + CE_ItemViewItem, + CE_ShapedFrame, + CE_CustomBase, + }; + + virtual void drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const = 0; + + enum SubElement + { + SE_PushButtonContents, + SE_PushButtonFocusRect, + SE_CheckBoxIndicator, + SE_CheckBoxContents, + SE_CheckBoxFocusRect, + SE_CheckBoxClickRect, + SE_RadioButtonIndicator, + SE_RadioButtonContents, + SE_RadioButtonFocusRect, + SE_RadioButtonClickRect, + SE_ComboBoxFocusRect, + SE_SliderFocusRect, + SE_ProgressBarGroove, + SE_ProgressBarContents, + SE_ProgressBarLabel, + SE_ToolBoxTabContents, + SE_HeaderLabel, + SE_HeaderArrow, + SE_TabWidgetTabBar, + SE_TabWidgetTabPane, + SE_TabWidgetTabContents, + SE_TabWidgetLeftCorner, + SE_TabWidgetRightCorner, + SE_ViewItemCheckIndicator, + SE_TabBarTearIndicator, + SE_TreeViewDisclosureItem, + SE_LineEditContents, + SE_FrameContents, + SE_DockWidgetCloseButton, + SE_DockWidgetFloatButton, + SE_DockWidgetTitleBarText, + SE_DockWidgetIcon, + SE_CheckBoxLayoutItem, + SE_ComboBoxLayoutItem, + SE_DateTimeEditLayoutItem, + SE_DialogButtonBoxLayoutItem, + SE_LabelLayoutItem, + SE_ProgressBarLayoutItem, + SE_PushButtonLayoutItem, + SE_RadioButtonLayoutItem, + SE_SliderLayoutItem, + SE_SpinBoxLayoutItem, + SE_ToolButtonLayoutItem, + SE_FrameLayoutItem, + SE_GroupBoxLayoutItem, + SE_TabWidgetLayoutItem, + SE_ItemViewItemCheckIndicator, + SE_ItemViewItemDecoration, + SE_ItemViewItemText, + SE_ItemViewItemFocusRect, + SE_TabBarTabLeftButton, + SE_TabBarTabRightButton, + SE_TabBarTabText, + SE_ShapedFrameContents, + SE_ToolBarHandle, +%If (Qt_5_7_0 -) + SE_TabBarTearIndicatorLeft, +%End +%If (Qt_5_7_0 -) + SE_TabBarScrollLeftButton, +%End +%If (Qt_5_7_0 -) + SE_TabBarScrollRightButton, +%End +%If (Qt_5_7_0 -) + SE_TabBarTearIndicatorRight, +%End +%If (Qt_5_15_0 -) + SE_PushButtonBevel, +%End + SE_CustomBase, + }; + + virtual QRect subElementRect(QStyle::SubElement subElement, const QStyleOption *option, const QWidget *widget = 0) const = 0; + + enum ComplexControl + { + CC_SpinBox, + CC_ComboBox, + CC_ScrollBar, + CC_Slider, + CC_ToolButton, + CC_TitleBar, + CC_Dial, + CC_GroupBox, + CC_MdiControls, + CC_CustomBase, + }; + + enum SubControl + { + SC_None, + SC_ScrollBarAddLine, + SC_ScrollBarSubLine, + SC_ScrollBarAddPage, + SC_ScrollBarSubPage, + SC_ScrollBarFirst, + SC_ScrollBarLast, + SC_ScrollBarSlider, + SC_ScrollBarGroove, + SC_SpinBoxUp, + SC_SpinBoxDown, + SC_SpinBoxFrame, + SC_SpinBoxEditField, + SC_ComboBoxFrame, + SC_ComboBoxEditField, + SC_ComboBoxArrow, + SC_ComboBoxListBoxPopup, + SC_SliderGroove, + SC_SliderHandle, + SC_SliderTickmarks, + SC_ToolButton, + SC_ToolButtonMenu, + SC_TitleBarSysMenu, + SC_TitleBarMinButton, + SC_TitleBarMaxButton, + SC_TitleBarCloseButton, + SC_TitleBarNormalButton, + SC_TitleBarShadeButton, + SC_TitleBarUnshadeButton, + SC_TitleBarContextHelpButton, + SC_TitleBarLabel, + SC_DialGroove, + SC_DialHandle, + SC_DialTickmarks, + SC_GroupBoxCheckBox, + SC_GroupBoxLabel, + SC_GroupBoxContents, + SC_GroupBoxFrame, + SC_MdiMinButton, + SC_MdiNormalButton, + SC_MdiCloseButton, + SC_CustomBase, + SC_All, + }; + + typedef QFlags SubControls; + virtual void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget = 0) const = 0; + virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget = 0) const = 0; + virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget = 0) const = 0; + + enum PixelMetric + { + PM_ButtonMargin, + PM_ButtonDefaultIndicator, + PM_MenuButtonIndicator, + PM_ButtonShiftHorizontal, + PM_ButtonShiftVertical, + PM_DefaultFrameWidth, + PM_SpinBoxFrameWidth, + PM_ComboBoxFrameWidth, + PM_MaximumDragDistance, + PM_ScrollBarExtent, + PM_ScrollBarSliderMin, + PM_SliderThickness, + PM_SliderControlThickness, + PM_SliderLength, + PM_SliderTickmarkOffset, + PM_SliderSpaceAvailable, + PM_DockWidgetSeparatorExtent, + PM_DockWidgetHandleExtent, + PM_DockWidgetFrameWidth, + PM_TabBarTabOverlap, + PM_TabBarTabHSpace, + PM_TabBarTabVSpace, + PM_TabBarBaseHeight, + PM_TabBarBaseOverlap, + PM_ProgressBarChunkWidth, + PM_SplitterWidth, + PM_TitleBarHeight, + PM_MenuScrollerHeight, + PM_MenuHMargin, + PM_MenuVMargin, + PM_MenuPanelWidth, + PM_MenuTearoffHeight, + PM_MenuDesktopFrameWidth, + PM_MenuBarPanelWidth, + PM_MenuBarItemSpacing, + PM_MenuBarVMargin, + PM_MenuBarHMargin, + PM_IndicatorWidth, + PM_IndicatorHeight, + PM_ExclusiveIndicatorWidth, + PM_ExclusiveIndicatorHeight, + PM_DialogButtonsSeparator, + PM_DialogButtonsButtonWidth, + PM_DialogButtonsButtonHeight, + PM_MdiSubWindowFrameWidth, + PM_MDIFrameWidth, + PM_MdiSubWindowMinimizedWidth, + PM_MDIMinimizedWidth, + PM_HeaderMargin, + PM_HeaderMarkSize, + PM_HeaderGripMargin, + PM_TabBarTabShiftHorizontal, + PM_TabBarTabShiftVertical, + PM_TabBarScrollButtonWidth, + PM_ToolBarFrameWidth, + PM_ToolBarHandleExtent, + PM_ToolBarItemSpacing, + PM_ToolBarItemMargin, + PM_ToolBarSeparatorExtent, + PM_ToolBarExtensionExtent, + PM_SpinBoxSliderHeight, + PM_DefaultTopLevelMargin, + PM_DefaultChildMargin, + PM_DefaultLayoutSpacing, + PM_ToolBarIconSize, + PM_ListViewIconSize, + PM_IconViewIconSize, + PM_SmallIconSize, + PM_LargeIconSize, + PM_FocusFrameVMargin, + PM_FocusFrameHMargin, + PM_ToolTipLabelFrameWidth, + PM_CheckBoxLabelSpacing, + PM_TabBarIconSize, + PM_SizeGripSize, + PM_DockWidgetTitleMargin, + PM_MessageBoxIconSize, + PM_ButtonIconSize, + PM_DockWidgetTitleBarButtonMargin, + PM_RadioButtonLabelSpacing, + PM_LayoutLeftMargin, + PM_LayoutTopMargin, + PM_LayoutRightMargin, + PM_LayoutBottomMargin, + PM_LayoutHorizontalSpacing, + PM_LayoutVerticalSpacing, + PM_TabBar_ScrollButtonOverlap, + PM_TextCursorWidth, + PM_TabCloseIndicatorWidth, + PM_TabCloseIndicatorHeight, + PM_ScrollView_ScrollBarSpacing, + PM_SubMenuOverlap, + PM_ScrollView_ScrollBarOverlap, +%If (Qt_5_4_0 -) + PM_TreeViewIndentation, +%End +%If (Qt_5_5_0 -) + PM_HeaderDefaultSectionSizeHorizontal, +%End +%If (Qt_5_5_0 -) + PM_HeaderDefaultSectionSizeVertical, +%End +%If (Qt_5_8_0 -) + PM_TitleBarButtonIconSize, +%End +%If (Qt_5_8_0 -) + PM_TitleBarButtonSize, +%End + PM_CustomBase, + }; + + virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0; + + enum ContentsType + { + CT_PushButton, + CT_CheckBox, + CT_RadioButton, + CT_ToolButton, + CT_ComboBox, + CT_Splitter, + CT_ProgressBar, + CT_MenuItem, + CT_MenuBarItem, + CT_MenuBar, + CT_Menu, + CT_TabBarTab, + CT_Slider, + CT_ScrollBar, + CT_LineEdit, + CT_SpinBox, + CT_SizeGrip, + CT_TabWidget, + CT_DialogButtons, + CT_HeaderSection, + CT_GroupBox, + CT_MdiControls, + CT_ItemViewItem, + CT_CustomBase, + }; + + virtual QSize sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = 0) const = 0; + + enum StyleHint + { + SH_EtchDisabledText, + SH_DitherDisabledText, + SH_ScrollBar_MiddleClickAbsolutePosition, + SH_ScrollBar_ScrollWhenPointerLeavesControl, + SH_TabBar_SelectMouseType, + SH_TabBar_Alignment, + SH_Header_ArrowAlignment, + SH_Slider_SnapToValue, + SH_Slider_SloppyKeyEvents, + SH_ProgressDialog_CenterCancelButton, + SH_ProgressDialog_TextLabelAlignment, + SH_PrintDialog_RightAlignButtons, + SH_MainWindow_SpaceBelowMenuBar, + SH_FontDialog_SelectAssociatedText, + SH_Menu_AllowActiveAndDisabled, + SH_Menu_SpaceActivatesItem, + SH_Menu_SubMenuPopupDelay, + SH_ScrollView_FrameOnlyAroundContents, + SH_MenuBar_AltKeyNavigation, + SH_ComboBox_ListMouseTracking, + SH_Menu_MouseTracking, + SH_MenuBar_MouseTracking, + SH_ItemView_ChangeHighlightOnFocus, + SH_Widget_ShareActivation, + SH_Workspace_FillSpaceOnMaximize, + SH_ComboBox_Popup, + SH_TitleBar_NoBorder, + SH_ScrollBar_StopMouseOverSlider, + SH_BlinkCursorWhenTextSelected, + SH_RichText_FullWidthSelection, + SH_Menu_Scrollable, + SH_GroupBox_TextLabelVerticalAlignment, + SH_GroupBox_TextLabelColor, + SH_Menu_SloppySubMenus, + SH_Table_GridLineColor, + SH_LineEdit_PasswordCharacter, + SH_DialogButtons_DefaultButton, + SH_ToolBox_SelectedPageTitleBold, + SH_TabBar_PreferNoArrows, + SH_ScrollBar_LeftClickAbsolutePosition, + SH_UnderlineShortcut, + SH_SpinBox_AnimateButton, + SH_SpinBox_KeyPressAutoRepeatRate, + SH_SpinBox_ClickAutoRepeatRate, + SH_Menu_FillScreenWithScroll, + SH_ToolTipLabel_Opacity, + SH_DrawMenuBarSeparator, + SH_TitleBar_ModifyNotification, + SH_Button_FocusPolicy, + SH_MessageBox_UseBorderForButtonSpacing, + SH_TitleBar_AutoRaise, + SH_ToolButton_PopupDelay, + SH_FocusFrame_Mask, + SH_RubberBand_Mask, + SH_WindowFrame_Mask, + SH_SpinControls_DisableOnBounds, + SH_Dial_BackgroundRole, + SH_ComboBox_LayoutDirection, + SH_ItemView_EllipsisLocation, + SH_ItemView_ShowDecorationSelected, + SH_ItemView_ActivateItemOnSingleClick, + SH_ScrollBar_ContextMenu, + SH_ScrollBar_RollBetweenButtons, + SH_Slider_StopMouseOverSlider, + SH_Slider_AbsoluteSetButtons, + SH_Slider_PageSetButtons, + SH_Menu_KeyboardSearch, + SH_TabBar_ElideMode, + SH_DialogButtonLayout, + SH_ComboBox_PopupFrameStyle, + SH_MessageBox_TextInteractionFlags, + SH_DialogButtonBox_ButtonsHaveIcons, + SH_SpellCheckUnderlineStyle, + SH_MessageBox_CenterButtons, + SH_Menu_SelectionWrap, + SH_ItemView_MovementWithoutUpdatingSelection, + SH_ToolTip_Mask, + SH_FocusFrame_AboveWidget, + SH_TextControl_FocusIndicatorTextCharFormat, + SH_WizardStyle, + SH_ItemView_ArrowKeysNavigateIntoChildren, + SH_Menu_Mask, + SH_Menu_FlashTriggeredItem, + SH_Menu_FadeOutOnHide, + SH_SpinBox_ClickAutoRepeatThreshold, + SH_ItemView_PaintAlternatingRowColorsForEmptyArea, + SH_FormLayoutWrapPolicy, + SH_TabWidget_DefaultTabPosition, + SH_ToolBar_Movable, + SH_FormLayoutFieldGrowthPolicy, + SH_FormLayoutFormAlignment, + SH_FormLayoutLabelAlignment, + SH_ItemView_DrawDelegateFrame, + SH_TabBar_CloseButtonPosition, + SH_DockWidget_ButtonsHaveFrame, + SH_ToolButtonStyle, + SH_RequestSoftwareInputPanel, + SH_ListViewExpand_SelectMouseType, + SH_ScrollBar_Transient, +%If (Qt_5_1_0 -) + SH_Menu_SupportsSections, +%End +%If (Qt_5_2_0 -) + SH_ToolTip_WakeUpDelay, +%End +%If (Qt_5_2_0 -) + SH_ToolTip_FallAsleepDelay, +%End +%If (Qt_5_2_0 -) + SH_Widget_Animate, +%End +%If (Qt_5_2_0 -) + SH_Splitter_OpaqueResize, +%End +%If (Qt_5_4_0 -) + SH_LineEdit_PasswordMaskDelay, +%End +%If (Qt_5_4_0 -) + SH_TabBar_ChangeCurrentDelay, +%End +%If (Qt_5_5_0 -) + SH_Menu_SubMenuUniDirection, +%End +%If (Qt_5_5_0 -) + SH_Menu_SubMenuUniDirectionFailCount, +%End +%If (Qt_5_5_0 -) + SH_Menu_SubMenuSloppySelectOtherActions, +%End +%If (Qt_5_5_0 -) + SH_Menu_SubMenuSloppyCloseTimeout, +%End +%If (Qt_5_5_0 -) + SH_Menu_SubMenuResetWhenReenteringParent, +%End +%If (Qt_5_5_0 -) + SH_Menu_SubMenuDontStartSloppyOnLeave, +%End +%If (Qt_5_7_0 -) + SH_ItemView_ScrollMode, +%End +%If (Qt_5_10_0 -) + SH_TitleBar_ShowToolTipsOnButtons, +%End +%If (Qt_5_10_0 -) + SH_Widget_Animation_Duration, +%End +%If (Qt_5_11_0 -) + SH_ComboBox_AllowWheelScrolling, +%End +%If (Qt_5_11_0 -) + SH_SpinBox_ButtonsInsideFrame, +%End +%If (Qt_5_12_0 -) + SH_SpinBox_StepModifier, +%End + SH_CustomBase, + }; + + virtual int styleHint(QStyle::StyleHint stylehint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const = 0; + + enum StandardPixmap + { + SP_TitleBarMenuButton, + SP_TitleBarMinButton, + SP_TitleBarMaxButton, + SP_TitleBarCloseButton, + SP_TitleBarNormalButton, + SP_TitleBarShadeButton, + SP_TitleBarUnshadeButton, + SP_TitleBarContextHelpButton, + SP_DockWidgetCloseButton, + SP_MessageBoxInformation, + SP_MessageBoxWarning, + SP_MessageBoxCritical, + SP_MessageBoxQuestion, + SP_DesktopIcon, + SP_TrashIcon, + SP_ComputerIcon, + SP_DriveFDIcon, + SP_DriveHDIcon, + SP_DriveCDIcon, + SP_DriveDVDIcon, + SP_DriveNetIcon, + SP_DirOpenIcon, + SP_DirClosedIcon, + SP_DirLinkIcon, + SP_FileIcon, + SP_FileLinkIcon, + SP_ToolBarHorizontalExtensionButton, + SP_ToolBarVerticalExtensionButton, + SP_FileDialogStart, + SP_FileDialogEnd, + SP_FileDialogToParent, + SP_FileDialogNewFolder, + SP_FileDialogDetailedView, + SP_FileDialogInfoView, + SP_FileDialogContentsView, + SP_FileDialogListView, + SP_FileDialogBack, + SP_DirIcon, + SP_DialogOkButton, + SP_DialogCancelButton, + SP_DialogHelpButton, + SP_DialogOpenButton, + SP_DialogSaveButton, + SP_DialogCloseButton, + SP_DialogApplyButton, + SP_DialogResetButton, + SP_DialogDiscardButton, + SP_DialogYesButton, + SP_DialogNoButton, + SP_ArrowUp, + SP_ArrowDown, + SP_ArrowLeft, + SP_ArrowRight, + SP_ArrowBack, + SP_ArrowForward, + SP_DirHomeIcon, + SP_CommandLink, + SP_VistaShield, + SP_BrowserReload, + SP_BrowserStop, + SP_MediaPlay, + SP_MediaStop, + SP_MediaPause, + SP_MediaSkipForward, + SP_MediaSkipBackward, + SP_MediaSeekForward, + SP_MediaSeekBackward, + SP_MediaVolume, + SP_MediaVolumeMuted, + SP_DirLinkOpenIcon, +%If (Qt_5_2_0 -) + SP_LineEditClearButton, +%End +%If (Qt_5_14_0 -) + SP_DialogYesToAllButton, +%End +%If (Qt_5_14_0 -) + SP_DialogNoToAllButton, +%End +%If (Qt_5_14_0 -) + SP_DialogSaveAllButton, +%End +%If (Qt_5_14_0 -) + SP_DialogAbortButton, +%End +%If (Qt_5_14_0 -) + SP_DialogRetryButton, +%End +%If (Qt_5_14_0 -) + SP_DialogIgnoreButton, +%End +%If (Qt_5_14_0 -) + SP_RestoreDefaultsButton, +%End + SP_CustomBase, + }; + + virtual QPixmap standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0; + virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0; + virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const = 0; + static QRect visualRect(Qt::LayoutDirection direction, const QRect &boundingRect, const QRect &logicalRect); + static QPoint visualPos(Qt::LayoutDirection direction, const QRect &boundingRect, const QPoint &logicalPos); + static int sliderPositionFromValue(int min, int max, int logicalValue, int span, bool upsideDown = false); + static int sliderValueFromPosition(int min, int max, int position, int span, bool upsideDown = false); + static Qt::Alignment visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment); + static QRect alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle); + virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0; + int combinedLayoutSpacing(QSizePolicy::ControlTypes controls1, QSizePolicy::ControlTypes controls2, Qt::Orientation orientation, QStyleOption *option = 0, QWidget *widget = 0) const; + + enum RequestSoftwareInputPanel + { + RSIP_OnMouseClickAndAlreadyFocused, + RSIP_OnMouseClick, + }; + + const QStyle *proxy() const; +}; + +QFlags operator|(QStyle::StateFlag f1, QFlags f2); +QFlags operator|(QStyle::SubControl f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyleditemdelegate.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyleditemdelegate.sip new file mode 100644 index 0000000..28ffcb8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyleditemdelegate.sip @@ -0,0 +1,46 @@ +// qstyleditemdelegate.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStyledItemDelegate : public QAbstractItemDelegate +{ +%TypeHeaderCode +#include +%End + +public: + explicit QStyledItemDelegate(QObject *parent /TransferThis/ = 0); + virtual ~QStyledItemDelegate(); + virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; + virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; + virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/; + virtual void setEditorData(QWidget *editor, const QModelIndex &index) const; + virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const; + virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const; + QItemEditorFactory *itemEditorFactory() const; + void setItemEditorFactory(QItemEditorFactory *factory /KeepReference/); + virtual QString displayText(const QVariant &value, const QLocale &locale) const; + +protected: + virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; + virtual bool eventFilter(QObject *object, QEvent *event); + virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstylefactory.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstylefactory.sip new file mode 100644 index 0000000..050efd1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstylefactory.sip @@ -0,0 +1,32 @@ +// qstylefactory.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStyleFactory +{ +%TypeHeaderCode +#include +%End + +public: + static QStringList keys(); + static QStyle *create(const QString &) /Factory/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyleoption.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyleoption.sip new file mode 100644 index 0000000..b01edc2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstyleoption.sip @@ -0,0 +1,1071 @@ +// qstyleoption.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStyleOption +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + switch (sipCpp->type) + { + case QStyleOption::SO_Button: + sipType = sipType_QStyleOptionButton; + break; + + case QStyleOption::SO_ComboBox: + sipType = sipType_QStyleOptionComboBox; + break; + + case QStyleOption::SO_DockWidget: + sipType = sipType_QStyleOptionDockWidget; + break; + + case QStyleOption::SO_FocusRect: + sipType = sipType_QStyleOptionFocusRect; + break; + + case QStyleOption::SO_Frame: + sipType = sipType_QStyleOptionFrame; + break; + + case QStyleOption::SO_GraphicsItem: + sipType = sipType_QStyleOptionGraphicsItem; + break; + + case QStyleOption::SO_GroupBox: + sipType = sipType_QStyleOptionGroupBox; + break; + + case QStyleOption::SO_Header: + sipType = sipType_QStyleOptionHeader; + break; + + case QStyleOption::SO_MenuItem: + sipType = sipType_QStyleOptionMenuItem; + break; + + case QStyleOption::SO_ProgressBar: + sipType = sipType_QStyleOptionProgressBar; + break; + + case QStyleOption::SO_RubberBand: + sipType = sipType_QStyleOptionRubberBand; + break; + + case QStyleOption::SO_SizeGrip: + sipType = sipType_QStyleOptionSizeGrip; + break; + + case QStyleOption::SO_Slider: + sipType = sipType_QStyleOptionSlider; + break; + + case QStyleOption::SO_SpinBox: + sipType = sipType_QStyleOptionSpinBox; + break; + + case QStyleOption::SO_Tab: + sipType = sipType_QStyleOptionTab; + break; + + case QStyleOption::SO_TabBarBase: + sipType = sipType_QStyleOptionTabBarBase; + break; + + case QStyleOption::SO_TabWidgetFrame: + sipType = sipType_QStyleOptionTabWidgetFrame; + break; + + case QStyleOption::SO_TitleBar: + sipType = sipType_QStyleOptionTitleBar; + break; + + case QStyleOption::SO_ToolBar: + sipType = sipType_QStyleOptionToolBar; + break; + + case QStyleOption::SO_ToolBox: + sipType = sipType_QStyleOptionToolBox; + break; + + case QStyleOption::SO_ToolButton: + sipType = sipType_QStyleOptionToolButton; + break; + + case QStyleOption::SO_ViewItem: + sipType = sipType_QStyleOptionViewItem; + break; + + default: + if ((sipCpp->type & QStyleOption::SO_ComplexCustomBase) == QStyleOption::SO_ComplexCustomBase) + sipType = sipType_QStyleOptionComplex; + else + sipType = 0; + } +%End + +public: + enum OptionType + { + SO_Default, + SO_FocusRect, + SO_Button, + SO_Tab, + SO_MenuItem, + SO_Frame, + SO_ProgressBar, + SO_ToolBox, + SO_Header, + SO_DockWidget, + SO_ViewItem, + SO_TabWidgetFrame, + SO_TabBarBase, + SO_RubberBand, + SO_ToolBar, + SO_Complex, + SO_Slider, + SO_SpinBox, + SO_ToolButton, + SO_ComboBox, + SO_TitleBar, + SO_GroupBox, + SO_ComplexCustomBase, + SO_GraphicsItem, + SO_SizeGrip, + SO_CustomBase, + }; + + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + int version; + int type; + QStyle::State state; + Qt::LayoutDirection direction; + QRect rect; + QFontMetrics fontMetrics; + QPalette palette; + QObject *styleObject; + QStyleOption(int version = QStyleOption::StyleOptionVersion::Version, int type = QStyleOption::OptionType::SO_Default); + QStyleOption(const QStyleOption &other); + ~QStyleOption(); + void initFrom(const QWidget *w); +}; + +class QStyleOptionFocusRect : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QColor backgroundColor; + QStyleOptionFocusRect(); + QStyleOptionFocusRect(const QStyleOptionFocusRect &other); +}; + +class QStyleOptionFrame : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + enum FrameFeature + { + None /PyName=None_/, + Flat, + Rounded, + }; + + typedef QFlags FrameFeatures; + QStyleOptionFrame::FrameFeatures features; + QFrame::Shape frameShape; + int lineWidth; + int midLineWidth; + QStyleOptionFrame(); + QStyleOptionFrame(const QStyleOptionFrame &other); +}; + +QFlags operator|(QStyleOptionFrame::FrameFeature f1, QFlags f2); + +class QStyleOptionTabWidgetFrame : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + int lineWidth; + int midLineWidth; + QTabBar::Shape shape; + QSize tabBarSize; + QSize rightCornerWidgetSize; + QSize leftCornerWidgetSize; + QRect tabBarRect; + QRect selectedTabRect; + QStyleOptionTabWidgetFrame(); + QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other); +}; + +class QStyleOptionTabBarBase : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QTabBar::Shape shape; + QRect tabBarRect; + QRect selectedTabRect; + bool documentMode; + QStyleOptionTabBarBase(); + QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other); +}; + +class QStyleOptionHeader : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + enum SectionPosition + { + Beginning, + Middle, + End, + OnlyOneSection, + }; + + enum SelectedPosition + { + NotAdjacent, + NextIsSelected, + PreviousIsSelected, + NextAndPreviousAreSelected, + }; + + enum SortIndicator + { + None /PyName=None_/, + SortUp, + SortDown, + }; + + int section; + QString text; + Qt::Alignment textAlignment; + QIcon icon; + Qt::Alignment iconAlignment; + QStyleOptionHeader::SectionPosition position; + QStyleOptionHeader::SelectedPosition selectedPosition; + QStyleOptionHeader::SortIndicator sortIndicator; + Qt::Orientation orientation; + QStyleOptionHeader(); + QStyleOptionHeader(const QStyleOptionHeader &other); +}; + +class QStyleOptionButton : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + enum ButtonFeature + { + None /PyName=None_/, + Flat, + HasMenu, + DefaultButton, + AutoDefaultButton, + CommandLinkButton, + }; + + typedef QFlags ButtonFeatures; + QStyleOptionButton::ButtonFeatures features; + QString text; + QIcon icon; + QSize iconSize; + QStyleOptionButton(); + QStyleOptionButton(const QStyleOptionButton &other); +}; + +QFlags operator|(QStyleOptionButton::ButtonFeature f1, QFlags f2); + +class QStyleOptionTab : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + enum TabPosition + { + Beginning, + Middle, + End, + OnlyOneTab, + }; + + enum SelectedPosition + { + NotAdjacent, + NextIsSelected, + PreviousIsSelected, + }; + + enum CornerWidget + { + NoCornerWidgets, + LeftCornerWidget, + RightCornerWidget, + }; + + typedef QFlags CornerWidgets; + QTabBar::Shape shape; + QString text; + QIcon icon; + int row; + QStyleOptionTab::TabPosition position; + QStyleOptionTab::SelectedPosition selectedPosition; + QStyleOptionTab::CornerWidgets cornerWidgets; + QSize iconSize; + bool documentMode; + QSize leftButtonSize; + QSize rightButtonSize; + + enum TabFeature + { + None /PyName=None_/, + HasFrame, + }; + + typedef QFlags TabFeatures; + QStyleOptionTab::TabFeatures features; + QStyleOptionTab(); + QStyleOptionTab(const QStyleOptionTab &other); +}; + +QFlags operator|(QStyleOptionTab::CornerWidget f1, QFlags f2); +%If (Qt_5_15_0 -) + +class QStyleOptionTabV4 : public QStyleOptionTab +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionVersion + { + Version, + }; + + QStyleOptionTabV4(); + int tabIndex; +}; + +%End + +class QStyleOptionProgressBar : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + int minimum; + int maximum; + int progress; + QString text; + Qt::Alignment textAlignment; + bool textVisible; + Qt::Orientation orientation; + bool invertedAppearance; + bool bottomToTop; + QStyleOptionProgressBar(); + QStyleOptionProgressBar(const QStyleOptionProgressBar &other); +}; + +class QStyleOptionMenuItem : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + enum MenuItemType + { + Normal, + DefaultItem, + Separator, + SubMenu, + Scroller, + TearOff, + Margin, + EmptyArea, + }; + + enum CheckType + { + NotCheckable, + Exclusive, + NonExclusive, + }; + + QStyleOptionMenuItem::MenuItemType menuItemType; + QStyleOptionMenuItem::CheckType checkType; + bool checked; + bool menuHasCheckableItems; + QRect menuRect; + QString text; + QIcon icon; + int maxIconWidth; + int tabWidth; + QFont font; + QStyleOptionMenuItem(); + QStyleOptionMenuItem(const QStyleOptionMenuItem &other); +}; + +class QStyleOptionDockWidget : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QString title; + bool closable; + bool movable; + bool floatable; + bool verticalTitleBar; + QStyleOptionDockWidget(); + QStyleOptionDockWidget(const QStyleOptionDockWidget &other); +}; + +class QStyleOptionViewItem : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + enum Position + { + Left, + Right, + Top, + Bottom, + }; + + Qt::Alignment displayAlignment; + Qt::Alignment decorationAlignment; + Qt::TextElideMode textElideMode; + QStyleOptionViewItem::Position decorationPosition; + QSize decorationSize; + QFont font; + bool showDecorationSelected; + + enum ViewItemFeature + { + None /PyName=None_/, + WrapText, + Alternate, + HasCheckIndicator, + HasDisplay, + HasDecoration, + }; + + typedef QFlags ViewItemFeatures; + QStyleOptionViewItem::ViewItemFeatures features; + QLocale locale; + const QWidget *widget; + + enum ViewItemPosition + { + Invalid, + Beginning, + Middle, + End, + OnlyOne, + }; + + QModelIndex index; + Qt::CheckState checkState; + QIcon icon; + QString text; + QStyleOptionViewItem::ViewItemPosition viewItemPosition; + QBrush backgroundBrush; + QStyleOptionViewItem(); + QStyleOptionViewItem(const QStyleOptionViewItem &other); +}; + +QFlags operator|(QStyleOptionViewItem::ViewItemFeature f1, QFlags f2); + +class QStyleOptionToolBox : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QString text; + QIcon icon; + + enum TabPosition + { + Beginning, + Middle, + End, + OnlyOneTab, + }; + + enum SelectedPosition + { + NotAdjacent, + NextIsSelected, + PreviousIsSelected, + }; + + QStyleOptionToolBox::TabPosition position; + QStyleOptionToolBox::SelectedPosition selectedPosition; + QStyleOptionToolBox(); + QStyleOptionToolBox(const QStyleOptionToolBox &other); +}; + +class QStyleOptionRubberBand : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QRubberBand::Shape shape; + bool opaque; + QStyleOptionRubberBand(); + QStyleOptionRubberBand(const QStyleOptionRubberBand &other); +}; + +class QStyleOptionComplex : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QStyle::SubControls subControls; + QStyle::SubControls activeSubControls; + QStyleOptionComplex(int version = QStyleOptionComplex::StyleOptionVersion::Version, int type = QStyleOption::OptionType::SO_Complex); + QStyleOptionComplex(const QStyleOptionComplex &other); +}; + +class QStyleOptionSlider : public QStyleOptionComplex +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + Qt::Orientation orientation; + int minimum; + int maximum; + QSlider::TickPosition tickPosition; + int tickInterval; + bool upsideDown; + int sliderPosition; + int sliderValue; + int singleStep; + int pageStep; + qreal notchTarget; + bool dialWrapping; + QStyleOptionSlider(); + QStyleOptionSlider(const QStyleOptionSlider &other); +}; + +class QStyleOptionSpinBox : public QStyleOptionComplex +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QAbstractSpinBox::ButtonSymbols buttonSymbols; + QAbstractSpinBox::StepEnabled stepEnabled; + bool frame; + QStyleOptionSpinBox(); + QStyleOptionSpinBox(const QStyleOptionSpinBox &other); +}; + +class QStyleOptionToolButton : public QStyleOptionComplex +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + enum ToolButtonFeature + { + None /PyName=None_/, + Arrow, + Menu, + PopupDelay, + MenuButtonPopup, + HasMenu, + }; + + typedef QFlags ToolButtonFeatures; + QStyleOptionToolButton::ToolButtonFeatures features; + QIcon icon; + QSize iconSize; + QString text; + Qt::ArrowType arrowType; + Qt::ToolButtonStyle toolButtonStyle; + QPoint pos; + QFont font; + QStyleOptionToolButton(); + QStyleOptionToolButton(const QStyleOptionToolButton &other); +}; + +QFlags operator|(QStyleOptionToolButton::ToolButtonFeature f1, QFlags f2); + +class QStyleOptionComboBox : public QStyleOptionComplex +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + bool editable; + QRect popupRect; + bool frame; + QString currentText; + QIcon currentIcon; + QSize iconSize; + QStyleOptionComboBox(); + QStyleOptionComboBox(const QStyleOptionComboBox &other); +}; + +class QStyleOptionTitleBar : public QStyleOptionComplex +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QString text; + QIcon icon; + int titleBarState; + Qt::WindowFlags titleBarFlags; + QStyleOptionTitleBar(); + QStyleOptionTitleBar(const QStyleOptionTitleBar &other); +}; + +class QStyleHintReturn +{ +%TypeHeaderCode +#include +%End + +public: + enum HintReturnType + { + SH_Default, + SH_Mask, + SH_Variant, + }; + + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QStyleHintReturn(int version = QStyleOption::StyleOptionVersion::Version, int type = QStyleHintReturn::HintReturnType::SH_Default); + ~QStyleHintReturn(); + int version; + int type; +}; + +class QStyleHintReturnMask : public QStyleHintReturn +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QStyleHintReturnMask(); + ~QStyleHintReturnMask(); + QRegion region; +}; + +class QStyleOptionToolBar : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + enum ToolBarPosition + { + Beginning, + Middle, + End, + OnlyOne, + }; + + enum ToolBarFeature + { + None /PyName=None_/, + Movable, + }; + + typedef QFlags ToolBarFeatures; + QStyleOptionToolBar::ToolBarPosition positionOfLine; + QStyleOptionToolBar::ToolBarPosition positionWithinLine; + Qt::ToolBarArea toolBarArea; + QStyleOptionToolBar::ToolBarFeatures features; + int lineWidth; + int midLineWidth; + QStyleOptionToolBar(); + QStyleOptionToolBar(const QStyleOptionToolBar &other); +}; + +QFlags operator|(QStyleOptionToolBar::ToolBarFeature f1, QFlags f2); + +class QStyleOptionGroupBox : public QStyleOptionComplex +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QStyleOptionFrame::FrameFeatures features; + QString text; + Qt::Alignment textAlignment; + QColor textColor; + int lineWidth; + int midLineWidth; + QStyleOptionGroupBox(); + QStyleOptionGroupBox(const QStyleOptionGroupBox &other); +}; + +class QStyleOptionSizeGrip : public QStyleOptionComplex +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + Qt::Corner corner; + QStyleOptionSizeGrip(); + QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other); +}; + +class QStyleOptionGraphicsItem : public QStyleOption +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QRectF exposedRect; + static qreal levelOfDetailFromTransform(const QTransform &worldTransform); + QStyleOptionGraphicsItem(); + QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other); +}; + +class QStyleHintReturnVariant : public QStyleHintReturn +{ +%TypeHeaderCode +#include +%End + +public: + enum StyleOptionType + { + Type, + }; + + enum StyleOptionVersion + { + Version, + }; + + QStyleHintReturnVariant(); + ~QStyleHintReturnVariant(); + QVariant variant; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstylepainter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstylepainter.sip new file mode 100644 index 0000000..5a213da --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qstylepainter.sip @@ -0,0 +1,41 @@ +// qstylepainter.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QStylePainter : public QPainter +{ +%TypeHeaderCode +#include +%End + +public: + QStylePainter(); + explicit QStylePainter(QWidget *w); + QStylePainter(QPaintDevice *pd, QWidget *w); + bool begin(QWidget *w); + bool begin(QPaintDevice *pd, QWidget *w); + QStyle *style() const; + void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt); + void drawControl(QStyle::ControlElement ce, const QStyleOption &opt); + void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt); + void drawItemText(const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole); + void drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsystemtrayicon.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsystemtrayicon.sip new file mode 100644 index 0000000..34a44b1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qsystemtrayicon.sip @@ -0,0 +1,80 @@ +// qsystemtrayicon.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSystemTrayIcon : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + enum ActivationReason + { + Unknown, + Context, + DoubleClick, + Trigger, + MiddleClick, + }; + + enum MessageIcon + { + NoIcon, + Information, + Warning, + Critical, + }; + + QSystemTrayIcon(QObject *parent /TransferThis/ = 0); + QSystemTrayIcon(const QIcon &icon, QObject *parent /TransferThis/ = 0); + virtual ~QSystemTrayIcon(); + void setContextMenu(QMenu *menu /KeepReference/); + QMenu *contextMenu() const; + QRect geometry() const; + QIcon icon() const; + void setIcon(const QIcon &icon); + QString toolTip() const; + void setToolTip(const QString &tip); + static bool isSystemTrayAvailable(); + static bool supportsMessages(); + +public slots: + void showMessage(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int msecs = 10000); +%If (Qt_5_9_0 -) + void showMessage(const QString &title, const QString &msg, const QIcon &icon, int msecs = 10000); +%End + +public: + bool isVisible() const; + +public slots: + void hide(); + void setVisible(bool visible); + void show(); + +signals: + void activated(QSystemTrayIcon::ActivationReason reason); + void messageClicked(); + +protected: + virtual bool event(QEvent *event); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtabbar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtabbar.sip new file mode 100644 index 0000000..af5b350 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtabbar.sip @@ -0,0 +1,184 @@ +// qtabbar.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTabBar : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTabBar(QWidget *parent /TransferThis/ = 0); + virtual ~QTabBar(); + + enum Shape + { + RoundedNorth, + RoundedSouth, + RoundedWest, + RoundedEast, + TriangularNorth, + TriangularSouth, + TriangularWest, + TriangularEast, + }; + + QTabBar::Shape shape() const; + void setShape(QTabBar::Shape shape); + int addTab(const QString &text); + int addTab(const QIcon &icon, const QString &text); + int insertTab(int index, const QString &text); + int insertTab(int index, const QIcon &icon, const QString &text); + void removeTab(int index); + bool isTabEnabled(int index) const; + void setTabEnabled(int index, bool); + QString tabText(int index) const; + void setTabText(int index, const QString &text); + QColor tabTextColor(int index) const; + void setTabTextColor(int index, const QColor &color); + QIcon tabIcon(int index) const; + void setTabIcon(int index, const QIcon &icon); + void setTabToolTip(int index, const QString &tip); + QString tabToolTip(int index) const; + void setTabWhatsThis(int index, const QString &text); + QString tabWhatsThis(int index) const; + void setTabData(int index, const QVariant &data); + QVariant tabData(int index) const; + int tabAt(const QPoint &pos) const; + QRect tabRect(int index) const; + int currentIndex() const; + int count() const /__len__/; + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + void setDrawBase(bool drawTheBase); + bool drawBase() const; + QSize iconSize() const; + void setIconSize(const QSize &size); + Qt::TextElideMode elideMode() const; + void setElideMode(Qt::TextElideMode); + void setUsesScrollButtons(bool useButtons); + bool usesScrollButtons() const; + +public slots: + void setCurrentIndex(int index); + +signals: + void currentChanged(int index); + +protected: + void initStyleOption(QStyleOptionTab *option, int tabIndex) const; + virtual QSize tabSizeHint(int index) const; + virtual void tabInserted(int index); + virtual void tabRemoved(int index); + virtual void tabLayoutChange(); + virtual bool event(QEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void showEvent(QShowEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void changeEvent(QEvent *); + +public: + enum ButtonPosition + { + LeftSide, + RightSide, + }; + + enum SelectionBehavior + { + SelectLeftTab, + SelectRightTab, + SelectPreviousTab, + }; + + void moveTab(int from, int to); + bool tabsClosable() const; + void setTabsClosable(bool closable); + void setTabButton(int index, QTabBar::ButtonPosition position, QWidget *widget /Transfer/); + QWidget *tabButton(int index, QTabBar::ButtonPosition position) const; + QTabBar::SelectionBehavior selectionBehaviorOnRemove() const; + void setSelectionBehaviorOnRemove(QTabBar::SelectionBehavior behavior); + bool expanding() const; + void setExpanding(bool enabled); + bool isMovable() const; + void setMovable(bool movable); + bool documentMode() const; + void setDocumentMode(bool set); + +signals: + void tabCloseRequested(int index); + void tabMoved(int from, int to); + +protected: + virtual void hideEvent(QHideEvent *); + virtual void wheelEvent(QWheelEvent *event); + virtual QSize minimumTabSizeHint(int index) const; + +signals: +%If (Qt_5_2_0 -) + void tabBarClicked(int index); +%End +%If (Qt_5_2_0 -) + void tabBarDoubleClicked(int index); +%End + +public: +%If (Qt_5_4_0 -) + bool autoHide() const; +%End +%If (Qt_5_4_0 -) + void setAutoHide(bool hide); +%End +%If (Qt_5_4_0 -) + bool changeCurrentOnDrag() const; +%End +%If (Qt_5_4_0 -) + void setChangeCurrentOnDrag(bool change); +%End + +protected: +%If (Qt_5_4_0 -) + virtual void timerEvent(QTimerEvent *event); +%End + +public: +%If (Qt_5_8_0 -) +%If (PyQt_Accessibility) + QString accessibleTabName(int index) const; +%End +%End +%If (Qt_5_8_0 -) +%If (PyQt_Accessibility) + void setAccessibleTabName(int index, const QString &name); +%End +%End +%If (Qt_5_15_0 -) + bool isTabVisible(int index) const; +%End +%If (Qt_5_15_0 -) + void setTabVisible(int index, bool visible); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtableview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtableview.sip new file mode 100644 index 0000000..c163c32 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtableview.sip @@ -0,0 +1,116 @@ +// qtableview.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTableView : public QAbstractItemView +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTableView(QWidget *parent /TransferThis/ = 0); + virtual ~QTableView(); + virtual void setModel(QAbstractItemModel *model /KeepReference/); + virtual void setRootIndex(const QModelIndex &index); + virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); + QHeaderView *horizontalHeader() const; + QHeaderView *verticalHeader() const; + void setHorizontalHeader(QHeaderView *header /Transfer/); + void setVerticalHeader(QHeaderView *header /Transfer/); + int rowViewportPosition(int row) const; + void setRowHeight(int row, int height); + int rowHeight(int row) const; + int rowAt(int y) const; + int columnViewportPosition(int column) const; + void setColumnWidth(int column, int width); + int columnWidth(int column) const; + int columnAt(int x) const; + bool isRowHidden(int row) const; + void setRowHidden(int row, bool hide); + bool isColumnHidden(int column) const; + void setColumnHidden(int column, bool hide); + bool showGrid() const; + void setShowGrid(bool show); + Qt::PenStyle gridStyle() const; + void setGridStyle(Qt::PenStyle style); + virtual QRect visualRect(const QModelIndex &index) const; + virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); + virtual QModelIndex indexAt(const QPoint &p) const; + +public slots: + void selectRow(int row); + void selectColumn(int column); + void hideRow(int row); + void hideColumn(int column); + void showRow(int row); + void showColumn(int column); + void resizeRowToContents(int row); + void resizeRowsToContents(); + void resizeColumnToContents(int column); + void resizeColumnsToContents(); + +protected slots: + void rowMoved(int row, int oldIndex, int newIndex); + void columnMoved(int column, int oldIndex, int newIndex); + void rowResized(int row, int oldHeight, int newHeight); + void columnResized(int column, int oldWidth, int newWidth); + void rowCountChanged(int oldCount, int newCount); + void columnCountChanged(int oldCount, int newCount); + +protected: + virtual void scrollContentsBy(int dx, int dy); + virtual QStyleOptionViewItem viewOptions() const; + virtual void paintEvent(QPaintEvent *e); + virtual void timerEvent(QTimerEvent *event); + virtual int horizontalOffset() const; + virtual int verticalOffset() const; + virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); + virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); + virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; + virtual QModelIndexList selectedIndexes() const; + virtual void updateGeometries(); + virtual int sizeHintForRow(int row) const; + virtual int sizeHintForColumn(int column) const; + virtual void verticalScrollbarAction(int action); + virtual void horizontalScrollbarAction(int action); + virtual bool isIndexHidden(const QModelIndex &index) const; +%If (Qt_5_2_0 -) + virtual QSize viewportSizeHint() const; +%End + +public: + void setSortingEnabled(bool enable); + bool isSortingEnabled() const; + void setSpan(int row, int column, int rowSpan, int columnSpan); + int rowSpan(int row, int column) const; + int columnSpan(int row, int column) const; + void sortByColumn(int column, Qt::SortOrder order); + void setWordWrap(bool on); + bool wordWrap() const; + void setCornerButtonEnabled(bool enable); + bool isCornerButtonEnabled() const; + void clearSpans(); + +protected: + virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtablewidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtablewidget.sip new file mode 100644 index 0000000..80cd13c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtablewidget.sip @@ -0,0 +1,237 @@ +// qtablewidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTableWidgetSelectionRange +{ +%TypeHeaderCode +#include +%End + +public: + QTableWidgetSelectionRange(); + QTableWidgetSelectionRange(int top, int left, int bottom, int right); + QTableWidgetSelectionRange(const QTableWidgetSelectionRange &other); + ~QTableWidgetSelectionRange(); + int topRow() const; + int bottomRow() const; + int leftColumn() const; + int rightColumn() const; + int rowCount() const; + int columnCount() const; +}; + +class QTableWidgetItem /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + enum ItemType + { + Type, + UserType, + }; + + explicit QTableWidgetItem(int type = QTableWidgetItem::ItemType::Type); + QTableWidgetItem(const QString &text, int type = QTableWidgetItem::ItemType::Type); + QTableWidgetItem(const QIcon &icon, const QString &text, int type = QTableWidgetItem::ItemType::Type); + QTableWidgetItem(const QTableWidgetItem &other); + virtual ~QTableWidgetItem(); + virtual QTableWidgetItem *clone() const /Factory/; + QTableWidget *tableWidget() const; + Qt::ItemFlags flags() const; + QString text() const; + QIcon icon() const; + QString statusTip() const; + QString toolTip() const; + QString whatsThis() const; + QFont font() const; + int textAlignment() const; + void setTextAlignment(int alignment); + Qt::CheckState checkState() const; + void setCheckState(Qt::CheckState state); + virtual QVariant data(int role) const; + virtual void setData(int role, const QVariant &value); + virtual bool operator<(const QTableWidgetItem &other /NoCopy/) const; + virtual void read(QDataStream &in) /ReleaseGIL/; + virtual void write(QDataStream &out) const /ReleaseGIL/; + int type() const; + void setFlags(Qt::ItemFlags aflags); + void setText(const QString &atext); + void setIcon(const QIcon &aicon); + void setStatusTip(const QString &astatusTip); + void setToolTip(const QString &atoolTip); + void setWhatsThis(const QString &awhatsThis); + void setFont(const QFont &afont); + QSize sizeHint() const; + void setSizeHint(const QSize &size); + QBrush background() const; + void setBackground(const QBrush &brush); + QBrush foreground() const; + void setForeground(const QBrush &brush); + int row() const; + int column() const; + void setSelected(bool aselect); + bool isSelected() const; + +private: + QTableWidgetItem &operator=(const QTableWidgetItem &); +}; + +QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item /Constrained/) /ReleaseGIL/; +QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item /Constrained/) /ReleaseGIL/; + +class QTableWidget : public QTableView +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTableWidget(QWidget *parent /TransferThis/ = 0); + QTableWidget(int rows, int columns, QWidget *parent /TransferThis/ = 0); + virtual ~QTableWidget(); + void setRowCount(int rows); + int rowCount() const; + void setColumnCount(int columns); + int columnCount() const; + int row(const QTableWidgetItem *item) const; + int column(const QTableWidgetItem *item) const; + QTableWidgetItem *item(int row, int column) const; + void setItem(int row, int column, QTableWidgetItem *item /Transfer/); + QTableWidgetItem *takeItem(int row, int column) /TransferBack/; + QTableWidgetItem *verticalHeaderItem(int row) const; + void setVerticalHeaderItem(int row, QTableWidgetItem *item /Transfer/); + QTableWidgetItem *takeVerticalHeaderItem(int row) /TransferBack/; + QTableWidgetItem *horizontalHeaderItem(int column) const; + void setHorizontalHeaderItem(int column, QTableWidgetItem *item /Transfer/); + QTableWidgetItem *takeHorizontalHeaderItem(int column) /TransferBack/; + void setVerticalHeaderLabels(const QStringList &labels); + void setHorizontalHeaderLabels(const QStringList &labels); + int currentRow() const; + int currentColumn() const; + QTableWidgetItem *currentItem() const; + void setCurrentItem(QTableWidgetItem *item); + void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command); + void setCurrentCell(int row, int column); + void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command); + void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder); + void setSortingEnabled(bool enable); + bool isSortingEnabled() const; + void editItem(QTableWidgetItem *item); + void openPersistentEditor(QTableWidgetItem *item); + void closePersistentEditor(QTableWidgetItem *item); + QWidget *cellWidget(int row, int column) const; + void setCellWidget(int row, int column, QWidget *widget /Transfer/); +%MethodCode + // We have to break the association with any existing widget. + QWidget *w = sipCpp->cellWidget(a0, a1); + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferTo(wo, 0); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->setCellWidget(a0, a1, a2); + Py_END_ALLOW_THREADS +%End + + void removeCellWidget(int arow, int acolumn); +%MethodCode + // We have to break the association with any existing widget. + QWidget *w = sipCpp->cellWidget(a0, a1); + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferTo(wo, 0); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->removeCellWidget(a0, a1); + Py_END_ALLOW_THREADS +%End + + void setRangeSelected(const QTableWidgetSelectionRange &range, bool select); + QList selectedRanges() const; + QList selectedItems() const; + QList findItems(const QString &text, Qt::MatchFlags flags) const; + int visualRow(int logicalRow) const; + int visualColumn(int logicalColumn) const; + QTableWidgetItem *itemAt(const QPoint &p) const; + QTableWidgetItem *itemAt(int ax, int ay) const; + QRect visualItemRect(const QTableWidgetItem *item) const; + const QTableWidgetItem *itemPrototype() const; + void setItemPrototype(const QTableWidgetItem *item /Transfer/); + +public slots: + void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); + void insertRow(int row); + void insertColumn(int column); + void removeRow(int row); + void removeColumn(int column); + void clear(); + void clearContents(); + +signals: + void itemPressed(QTableWidgetItem *item); + void itemClicked(QTableWidgetItem *item); + void itemDoubleClicked(QTableWidgetItem *item); + void itemActivated(QTableWidgetItem *item); + void itemEntered(QTableWidgetItem *item); + void itemChanged(QTableWidgetItem *item); + void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous); + void itemSelectionChanged(); + void cellPressed(int row, int column); + void cellClicked(int row, int column); + void cellDoubleClicked(int row, int column); + void cellActivated(int row, int column); + void cellEntered(int row, int column); + void cellChanged(int row, int column); + void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn); + +protected: + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QList items) const /TransferBack/; + virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action); + virtual Qt::DropActions supportedDropActions() const; + QList items(const QMimeData *data) const; + QModelIndex indexFromItem(QTableWidgetItem *item) const; + QTableWidgetItem *itemFromIndex(const QModelIndex &index) const; + virtual bool event(QEvent *e); + virtual void dropEvent(QDropEvent *event); + +public: +%If (Qt_5_10_0 -) + bool isPersistentEditorOpen(QTableWidgetItem *item) const; +%End + +private: + virtual void setModel(QAbstractItemModel *model /KeepReference/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtabwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtabwidget.sip new file mode 100644 index 0000000..bc3ba00 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtabwidget.sip @@ -0,0 +1,144 @@ +// qtabwidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTabWidget : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTabWidget(QWidget *parent /TransferThis/ = 0); + virtual ~QTabWidget(); + void clear(); + int addTab(QWidget *widget /Transfer/, const QString &); + int addTab(QWidget *widget /Transfer/, const QIcon &icon, const QString &label); + int insertTab(int index, QWidget *widget /Transfer/, const QString &); + int insertTab(int index, QWidget *widget /Transfer/, const QIcon &icon, const QString &label); + void removeTab(int index); + bool isTabEnabled(int index) const; + void setTabEnabled(int index, bool); + QString tabText(int index) const; + void setTabText(int index, const QString &); + QIcon tabIcon(int index) const; + void setTabIcon(int index, const QIcon &icon); + void setTabToolTip(int index, const QString &tip); + QString tabToolTip(int index) const; + void setTabWhatsThis(int index, const QString &text); + QString tabWhatsThis(int index) const; + int currentIndex() const; + QWidget *currentWidget() const; + QWidget *widget(int index) const; + int indexOf(QWidget *widget) const; + int count() const /__len__/; + + enum TabPosition + { + North, + South, + West, + East, + }; + + QTabWidget::TabPosition tabPosition() const; + void setTabPosition(QTabWidget::TabPosition); + + enum TabShape + { + Rounded, + Triangular, + }; + + QTabWidget::TabShape tabShape() const; + void setTabShape(QTabWidget::TabShape s); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + void setCornerWidget(QWidget *widget /Transfer/, Qt::Corner corner = Qt::TopRightCorner); + QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const; + +public slots: + void setCurrentIndex(int index); + void setCurrentWidget(QWidget *widget); + +signals: + void currentChanged(int index); + +protected: + void initStyleOption(QStyleOptionTabWidgetFrame *option) const; + virtual void tabInserted(int index); + virtual void tabRemoved(int index); + virtual bool event(QEvent *); + virtual void showEvent(QShowEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void paintEvent(QPaintEvent *); + void setTabBar(QTabBar * /Transfer/); + +public: + QTabBar *tabBar() const; + +protected: + virtual void changeEvent(QEvent *); + +public: + Qt::TextElideMode elideMode() const; + void setElideMode(Qt::TextElideMode); + QSize iconSize() const; + void setIconSize(const QSize &size); + bool usesScrollButtons() const; + void setUsesScrollButtons(bool useButtons); + bool tabsClosable() const; + void setTabsClosable(bool closeable); + bool isMovable() const; + void setMovable(bool movable); + bool documentMode() const; + void setDocumentMode(bool set); + +signals: + void tabCloseRequested(int index); + +public: + virtual int heightForWidth(int width) const; + virtual bool hasHeightForWidth() const; + +signals: +%If (Qt_5_2_0 -) + void tabBarClicked(int index); +%End +%If (Qt_5_2_0 -) + void tabBarDoubleClicked(int index); +%End + +public: +%If (Qt_5_4_0 -) + bool tabBarAutoHide() const; +%End +%If (Qt_5_4_0 -) + void setTabBarAutoHide(bool enabled); +%End +%If (Qt_5_15_0 -) + bool isTabVisible(int index) const; +%End +%If (Qt_5_15_0 -) + void setTabVisible(int index, bool visible); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtextbrowser.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtextbrowser.sip new file mode 100644 index 0000000..7884cf9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtextbrowser.sip @@ -0,0 +1,92 @@ +// qtextbrowser.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextBrowser : public QTextEdit +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTextBrowser(QWidget *parent /TransferThis/ = 0); + virtual ~QTextBrowser(); + QUrl source() const; + QStringList searchPaths() const; + void setSearchPaths(const QStringList &paths); + virtual QVariant loadResource(int type, const QUrl &name); + +public slots: + virtual void setSource(const QUrl &name); + virtual void backward(); + virtual void forward(); + virtual void home(); + virtual void reload(); + +signals: + void backwardAvailable(bool); + void forwardAvailable(bool); + void sourceChanged(const QUrl &); + void highlighted(const QUrl &); + void highlighted(const QString &); + void anchorClicked(const QUrl &); + +protected: + virtual bool event(QEvent *e); + virtual void keyPressEvent(QKeyEvent *ev); + virtual void mouseMoveEvent(QMouseEvent *ev); + virtual void mousePressEvent(QMouseEvent *ev); + virtual void mouseReleaseEvent(QMouseEvent *ev); + virtual void focusOutEvent(QFocusEvent *ev); + virtual bool focusNextPrevChild(bool next); + virtual void paintEvent(QPaintEvent *e); + +public: + bool isBackwardAvailable() const; + bool isForwardAvailable() const; + void clearHistory(); + bool openExternalLinks() const; + void setOpenExternalLinks(bool open); + bool openLinks() const; + void setOpenLinks(bool open); + QString historyTitle(int) const; + QUrl historyUrl(int) const; + int backwardHistoryCount() const; + int forwardHistoryCount() const; + +signals: + void historyChanged(); + +public: +%If (Qt_5_14_0 -) + QTextDocument::ResourceType sourceType() const; +%End + +public slots: +%If (Qt_5_14_0 -) + void setSource(const QUrl &name, QTextDocument::ResourceType type); +%End + +protected: +%If (Qt_5_14_0 -) + void doSetSource(const QUrl &name, QTextDocument::ResourceType type = QTextDocument::UnknownResource); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtextedit.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtextedit.sip new file mode 100644 index 0000000..4a87216 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtextedit.sip @@ -0,0 +1,230 @@ +// qtextedit.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTextEdit : public QAbstractScrollArea +{ +%TypeHeaderCode +#include +%End + +public: + struct ExtraSelection + { +%TypeHeaderCode +#include +%End + + QTextCursor cursor; + QTextCharFormat format; + }; + + enum LineWrapMode + { + NoWrap, + WidgetWidth, + FixedPixelWidth, + FixedColumnWidth, + }; + + enum AutoFormattingFlag + { + AutoNone, + AutoBulletList, + AutoAll, + }; + + typedef QFlags AutoFormatting; + explicit QTextEdit(QWidget *parent /TransferThis/ = 0); + QTextEdit(const QString &text, QWidget *parent /TransferThis/ = 0); + virtual ~QTextEdit(); + void setDocument(QTextDocument *document /KeepReference/); + QTextDocument *document() const; + void setTextCursor(const QTextCursor &cursor); + QTextCursor textCursor() const; + bool isReadOnly() const; + void setReadOnly(bool ro); + qreal fontPointSize() const; + QString fontFamily() const; + int fontWeight() const; + bool fontUnderline() const; + bool fontItalic() const; + QColor textColor() const; + QFont currentFont() const; + Qt::Alignment alignment() const; + void mergeCurrentCharFormat(const QTextCharFormat &modifier); + void setCurrentCharFormat(const QTextCharFormat &format); + QTextCharFormat currentCharFormat() const; + QTextEdit::AutoFormatting autoFormatting() const; + void setAutoFormatting(QTextEdit::AutoFormatting features); + bool tabChangesFocus() const; + void setTabChangesFocus(bool b); + void setDocumentTitle(const QString &title); + QString documentTitle() const; + bool isUndoRedoEnabled() const; + void setUndoRedoEnabled(bool enable); + QTextEdit::LineWrapMode lineWrapMode() const; + void setLineWrapMode(QTextEdit::LineWrapMode mode); + int lineWrapColumnOrWidth() const; + void setLineWrapColumnOrWidth(int w); + QTextOption::WrapMode wordWrapMode() const; + void setWordWrapMode(QTextOption::WrapMode policy); + bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); + QString toPlainText() const; + QString toHtml() const; + void append(const QString &text); + void ensureCursorVisible(); + virtual QVariant loadResource(int type, const QUrl &name); + QMenu *createStandardContextMenu() /Factory/; + QMenu *createStandardContextMenu(const QPoint &position) /Factory/; + QTextCursor cursorForPosition(const QPoint &pos) const; + QRect cursorRect(const QTextCursor &cursor) const; + QRect cursorRect() const; + QString anchorAt(const QPoint &pos) const; + bool overwriteMode() const; + void setOverwriteMode(bool overwrite); + int tabStopWidth() const; + void setTabStopWidth(int width); + bool acceptRichText() const; + void setAcceptRichText(bool accept); + void setTextInteractionFlags(Qt::TextInteractionFlags flags); + Qt::TextInteractionFlags textInteractionFlags() const; + void setCursorWidth(int width); + int cursorWidth() const; + void setExtraSelections(const QList &selections); + QList extraSelections() const; + bool canPaste() const; + void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); +%If (PyQt_Printer) + void print(QPagedPaintDevice *printer) const /PyName=print_/; +%End +%If (Py_v3) +%If (PyQt_Printer) + void print(QPagedPaintDevice *printer) const; +%End +%End + +public slots: + void setFontPointSize(qreal s); + void setFontFamily(const QString &fontFamily); + void setFontWeight(int w); + void setFontUnderline(bool b); + void setFontItalic(bool b); + void setText(const QString &text); + void setTextColor(const QColor &c); + void setCurrentFont(const QFont &f); + void setAlignment(Qt::Alignment a); + void setPlainText(const QString &text); + void setHtml(const QString &text); + void cut(); + void copy(); + void paste(); + void clear(); + void selectAll(); + void insertPlainText(const QString &text); + void insertHtml(const QString &text); + void scrollToAnchor(const QString &name); + void redo(); + void undo(); + void zoomIn(int range = 1); + void zoomOut(int range = 1); + +signals: + void textChanged(); + void undoAvailable(bool b); + void redoAvailable(bool b); + void currentCharFormatChanged(const QTextCharFormat &format); + void copyAvailable(bool b); + void selectionChanged(); + void cursorPositionChanged(); + +protected: + virtual bool event(QEvent *e); + virtual void timerEvent(QTimerEvent *e); + virtual void keyPressEvent(QKeyEvent *e); + virtual void keyReleaseEvent(QKeyEvent *e); + virtual void resizeEvent(QResizeEvent *); + virtual void paintEvent(QPaintEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseMoveEvent(QMouseEvent *e); + virtual void mouseReleaseEvent(QMouseEvent *e); + virtual void mouseDoubleClickEvent(QMouseEvent *e); + virtual bool focusNextPrevChild(bool next); + virtual void contextMenuEvent(QContextMenuEvent *e); + virtual void dragEnterEvent(QDragEnterEvent *e); + virtual void dragLeaveEvent(QDragLeaveEvent *e); + virtual void dragMoveEvent(QDragMoveEvent *e); + virtual void dropEvent(QDropEvent *e); + virtual void focusInEvent(QFocusEvent *e); + virtual void focusOutEvent(QFocusEvent *e); + virtual void showEvent(QShowEvent *); + virtual void changeEvent(QEvent *e); + virtual void wheelEvent(QWheelEvent *e); + virtual QMimeData *createMimeDataFromSelection() const /Factory/; + virtual bool canInsertFromMimeData(const QMimeData *source) const; + virtual void insertFromMimeData(const QMimeData *source); + virtual void inputMethodEvent(QInputMethodEvent *); + +public: + virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const; + +protected: + virtual void scrollContentsBy(int dx, int dy); + +public: + QColor textBackgroundColor() const; + +public slots: + void setTextBackgroundColor(const QColor &c); + +public: +%If (Qt_5_2_0 -) + void setPlaceholderText(const QString &placeholderText); +%End +%If (Qt_5_2_0 -) + QString placeholderText() const; +%End +%If (Qt_5_3_0 -) + bool find(const QRegExp &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +%End +%If (Qt_5_13_0 -) + bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()); +%End +%If (Qt_5_3_0 -) + QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const; +%End +%If (Qt_5_10_0 -) + qreal tabStopDistance() const; +%End +%If (Qt_5_10_0 -) + void setTabStopDistance(qreal distance); +%End +%If (Qt_5_14_0 -) + QString toMarkdown(QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) const; +%End + +public slots: +%If (Qt_5_14_0 -) + void setMarkdown(const QString &markdown); +%End +}; + +QFlags operator|(QTextEdit::AutoFormattingFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbar.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbar.sip new file mode 100644 index 0000000..504651f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbar.sip @@ -0,0 +1,111 @@ +// qtoolbar.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QToolBar : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + QToolBar(const QString &title, QWidget *parent /TransferThis/ = 0); + explicit QToolBar(QWidget *parent /TransferThis/ = 0); + virtual ~QToolBar(); + void setMovable(bool movable); + bool isMovable() const; + void setAllowedAreas(Qt::ToolBarAreas areas); + Qt::ToolBarAreas allowedAreas() const; + bool isAreaAllowed(Qt::ToolBarArea area) const; + void setOrientation(Qt::Orientation orientation); + Qt::Orientation orientation() const; + void clear(); + void addAction(QAction *action); + QAction *addAction(const QString &text) /Transfer/; + QAction *addAction(const QIcon &icon, const QString &text) /Transfer/; + QAction *addAction(const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /Transfer/; +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(1, a1); + } +%End + + QAction *addAction(const QIcon &icon, const QString &text, SIP_PYOBJECT slot /TypeHint="PYQT_SLOT"/) /Transfer/; +%MethodCode + QObject *receiver; + QByteArray slot_signature; + + if ((sipError = pyqt5_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone) + { + sipRes = sipCpp->addAction(*a0, *a1, receiver, slot_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(2, a2); + } +%End + + QAction *addSeparator() /Transfer/; + QAction *insertSeparator(QAction *before) /Transfer/; + QAction *addWidget(QWidget *widget /Transfer/) /Transfer/; + QAction *insertWidget(QAction *before, QWidget *widget /Transfer/) /Transfer/; + QRect actionGeometry(QAction *action) const; + QAction *actionAt(const QPoint &p) const; + QAction *actionAt(int ax, int ay) const; + QAction *toggleViewAction() const; + QSize iconSize() const; + Qt::ToolButtonStyle toolButtonStyle() const; + QWidget *widgetForAction(QAction *action) const; + +public slots: + void setIconSize(const QSize &iconSize); + void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle); + +signals: + void actionTriggered(QAction *action); + void movableChanged(bool movable); + void allowedAreasChanged(Qt::ToolBarAreas allowedAreas); + void orientationChanged(Qt::Orientation orientation); + void iconSizeChanged(const QSize &iconSize); + void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle); + void topLevelChanged(bool topLevel); + void visibilityChanged(bool visible); + +protected: + void initStyleOption(QStyleOptionToolBar *option) const; + virtual void actionEvent(QActionEvent *event); + virtual void changeEvent(QEvent *event); + virtual void paintEvent(QPaintEvent *event); + virtual bool event(QEvent *event); + +public: + bool isFloatable() const; + void setFloatable(bool floatable); + bool isFloating() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbox.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbox.sip new file mode 100644 index 0000000..191f92b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbox.sip @@ -0,0 +1,64 @@ +// qtoolbox.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QToolBox : public QFrame +{ +%TypeHeaderCode +#include +%End + +public: + QToolBox(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QToolBox(); + int addItem(QWidget *item /Transfer/, const QString &text); + int addItem(QWidget *item /Transfer/, const QIcon &iconSet, const QString &text); + int insertItem(int index, QWidget *item /Transfer/, const QString &text); + int insertItem(int index, QWidget *widget /Transfer/, const QIcon &icon, const QString &text); + void removeItem(int index); + void setItemEnabled(int index, bool enabled); + bool isItemEnabled(int index) const; + void setItemText(int index, const QString &text); + QString itemText(int index) const; + void setItemIcon(int index, const QIcon &icon); + QIcon itemIcon(int index) const; + void setItemToolTip(int index, const QString &toolTip); + QString itemToolTip(int index) const; + int currentIndex() const; + QWidget *currentWidget() const; + QWidget *widget(int index) const; + int indexOf(QWidget *widget) const; + int count() const /__len__/; + +public slots: + void setCurrentIndex(int index); + void setCurrentWidget(QWidget *widget); + +signals: + void currentChanged(int index); + +protected: + virtual void itemInserted(int index); + virtual void itemRemoved(int index); + virtual bool event(QEvent *e); + virtual void showEvent(QShowEvent *e); + virtual void changeEvent(QEvent *); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbutton.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbutton.sip new file mode 100644 index 0000000..11c2a36 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtoolbutton.sip @@ -0,0 +1,73 @@ +// qtoolbutton.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QToolButton : public QAbstractButton +{ +%TypeHeaderCode +#include +%End + +public: + enum ToolButtonPopupMode + { + DelayedPopup, + MenuButtonPopup, + InstantPopup, + }; + + explicit QToolButton(QWidget *parent /TransferThis/ = 0); + virtual ~QToolButton(); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + Qt::ToolButtonStyle toolButtonStyle() const; + Qt::ArrowType arrowType() const; + void setArrowType(Qt::ArrowType type); + void setMenu(QMenu *menu /KeepReference/); + QMenu *menu() const; + void setPopupMode(QToolButton::ToolButtonPopupMode mode); + QToolButton::ToolButtonPopupMode popupMode() const; + QAction *defaultAction() const; + void setAutoRaise(bool enable); + bool autoRaise() const; + +public slots: + void showMenu(); + void setToolButtonStyle(Qt::ToolButtonStyle style); + void setDefaultAction(QAction * /KeepReference/); + +signals: + void triggered(QAction *); + +protected: + void initStyleOption(QStyleOptionToolButton *option) const; + virtual bool event(QEvent *e); + virtual void mousePressEvent(QMouseEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void actionEvent(QActionEvent *); + virtual void enterEvent(QEvent *); + virtual void leaveEvent(QEvent *); + virtual void timerEvent(QTimerEvent *); + virtual void changeEvent(QEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void nextCheckState(); + virtual bool hitButton(const QPoint &pos) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtooltip.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtooltip.sip new file mode 100644 index 0000000..bd8a16a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtooltip.sip @@ -0,0 +1,44 @@ +// qtooltip.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QToolTip +{ +%TypeHeaderCode +#include +%End + + QToolTip(); + +public: + static void showText(const QPoint &pos, const QString &text, QWidget *widget = 0); + static void showText(const QPoint &pos, const QString &text, QWidget *w, const QRect &rect); +%If (Qt_5_2_0 -) + static void showText(const QPoint &pos, const QString &text, QWidget *w, const QRect &rect, int msecShowTime); +%End + static QPalette palette(); + static void hideText(); + static void setPalette(const QPalette &); + static QFont font(); + static void setFont(const QFont &); + static bool isVisible(); + static QString text(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreeview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreeview.sip new file mode 100644 index 0000000..6793fa0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreeview.sip @@ -0,0 +1,164 @@ +// qtreeview.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTreeView : public QAbstractItemView +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTreeView(QWidget *parent /TransferThis/ = 0); + virtual ~QTreeView(); + virtual void setModel(QAbstractItemModel *model /KeepReference/); + virtual void setRootIndex(const QModelIndex &index); + virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); + QHeaderView *header() const; + void setHeader(QHeaderView *header /Transfer/); + int indentation() const; + void setIndentation(int i); + bool rootIsDecorated() const; + void setRootIsDecorated(bool show); + bool uniformRowHeights() const; + void setUniformRowHeights(bool uniform); + bool itemsExpandable() const; + void setItemsExpandable(bool enable); + int columnViewportPosition(int column) const; + int columnWidth(int column) const; + int columnAt(int x) const; + bool isColumnHidden(int column) const; + void setColumnHidden(int column, bool hide); + bool isRowHidden(int row, const QModelIndex &parent) const; + void setRowHidden(int row, const QModelIndex &parent, bool hide); + bool isExpanded(const QModelIndex &index) const; + void setExpanded(const QModelIndex &index, bool expand); + virtual void keyboardSearch(const QString &search); + virtual QRect visualRect(const QModelIndex &index) const; + virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); + virtual QModelIndex indexAt(const QPoint &p) const; + QModelIndex indexAbove(const QModelIndex &index) const; + QModelIndex indexBelow(const QModelIndex &index) const; + virtual void reset(); + +signals: + void expanded(const QModelIndex &index); + void collapsed(const QModelIndex &index); + +public: + virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); + +public slots: + void hideColumn(int column); + void showColumn(int column); + void expand(const QModelIndex &index); + void expandAll(); + void collapse(const QModelIndex &index); + void collapseAll(); + void resizeColumnToContents(int column); + virtual void selectAll(); + +protected slots: + void columnResized(int column, int oldSize, int newSize); + void columnCountChanged(int oldCount, int newCount); + void columnMoved(); + void reexpand(); + void rowsRemoved(const QModelIndex &parent, int first, int last); + +protected: + virtual void scrollContentsBy(int dx, int dy); + virtual void rowsInserted(const QModelIndex &parent, int start, int end); + virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); + virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); + virtual int horizontalOffset() const; + virtual int verticalOffset() const; + virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); + virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; + virtual QModelIndexList selectedIndexes() const; + virtual void paintEvent(QPaintEvent *e); + virtual void timerEvent(QTimerEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void drawRow(QPainter *painter, const QStyleOptionViewItem &options /NoCopy/, const QModelIndex &index) const; + virtual void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; + void drawTree(QPainter *painter, const QRegion ®ion) const; + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void mouseDoubleClickEvent(QMouseEvent *e); + virtual void keyPressEvent(QKeyEvent *event); + virtual void updateGeometries(); + virtual int sizeHintForColumn(int column) const; + int indexRowSizeHint(const QModelIndex &index) const; + virtual void horizontalScrollbarAction(int action); + virtual bool isIndexHidden(const QModelIndex &index) const; + +public: + void setColumnWidth(int column, int width); + void setSortingEnabled(bool enable); + bool isSortingEnabled() const; + void setAnimated(bool enable); + bool isAnimated() const; + void setAllColumnsShowFocus(bool enable); + bool allColumnsShowFocus() const; + void sortByColumn(int column, Qt::SortOrder order); + int autoExpandDelay() const; + void setAutoExpandDelay(int delay); + bool isFirstColumnSpanned(int row, const QModelIndex &parent) const; + void setFirstColumnSpanned(int row, const QModelIndex &parent, bool span); + void setWordWrap(bool on); + bool wordWrap() const; + +public slots: + void expandToDepth(int depth); + +protected: + virtual void dragMoveEvent(QDragMoveEvent *event); + virtual bool viewportEvent(QEvent *event); + int rowHeight(const QModelIndex &index) const; + virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); + +public: + bool expandsOnDoubleClick() const; + void setExpandsOnDoubleClick(bool enable); + bool isHeaderHidden() const; + void setHeaderHidden(bool hide); +%If (Qt_5_2_0 -) + void setTreePosition(int logicalIndex); +%End +%If (Qt_5_2_0 -) + int treePosition() const; +%End + +protected: +%If (Qt_5_2_0 -) + virtual QSize viewportSizeHint() const; +%End + +public: +%If (Qt_5_4_0 -) + void resetIndentation(); +%End + +public slots: +%If (Qt_5_13_0 -) + void expandRecursively(const QModelIndex &index, int depth = -1); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreewidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreewidget.sip new file mode 100644 index 0000000..66a6b8d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreewidget.sip @@ -0,0 +1,243 @@ +// qtreewidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTreeWidgetItem /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + enum ItemType + { + Type, + UserType, + }; + + explicit QTreeWidgetItem(int type = Type); + QTreeWidgetItem(const QStringList &strings, int type = Type); + QTreeWidgetItem(QTreeWidget *parent /TransferThis/, int type = Type); + QTreeWidgetItem(QTreeWidget *parent /TransferThis/, const QStringList &strings, int type = Type); + QTreeWidgetItem(QTreeWidget *parent /TransferThis/, QTreeWidgetItem *preceding, int type = Type); + QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, int type = Type); + QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, const QStringList &strings, int type = Type); + QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, QTreeWidgetItem *preceding, int type = Type); + QTreeWidgetItem(const QTreeWidgetItem &other); + virtual ~QTreeWidgetItem(); + virtual QTreeWidgetItem *clone() const /Factory/; + QTreeWidget *treeWidget() const; + Qt::ItemFlags flags() const; + QString text(int column) const; + QIcon icon(int column) const; + QString statusTip(int column) const; + QString toolTip(int column) const; + QString whatsThis(int column) const; + QFont font(int column) const; + int textAlignment(int column) const; + void setTextAlignment(int column, int alignment); + Qt::CheckState checkState(int column) const; + void setCheckState(int column, Qt::CheckState state); + virtual QVariant data(int column, int role) const; + virtual void setData(int column, int role, const QVariant &value); + virtual bool operator<(const QTreeWidgetItem &other /NoCopy/) const; + virtual void read(QDataStream &in) /ReleaseGIL/; + virtual void write(QDataStream &out) const /ReleaseGIL/; + QTreeWidgetItem *parent() const; + QTreeWidgetItem *child(int index) const; + int childCount() const; + int columnCount() const; + void addChild(QTreeWidgetItem *child /Transfer/); + void insertChild(int index, QTreeWidgetItem *child /Transfer/); + QTreeWidgetItem *takeChild(int index) /TransferBack/; + int type() const; + void setFlags(Qt::ItemFlags aflags); + void setText(int column, const QString &atext); + void setIcon(int column, const QIcon &aicon); + void setStatusTip(int column, const QString &astatusTip); + void setToolTip(int column, const QString &atoolTip); + void setWhatsThis(int column, const QString &awhatsThis); + void setFont(int column, const QFont &afont); + int indexOfChild(QTreeWidgetItem *achild) const; + QSize sizeHint(int column) const; + void setSizeHint(int column, const QSize &size); + void addChildren(const QList &children /Transfer/); + void insertChildren(int index, const QList &children /Transfer/); + QList takeChildren() /TransferBack/; + QBrush background(int column) const; + void setBackground(int column, const QBrush &brush); + QBrush foreground(int column) const; + void setForeground(int column, const QBrush &brush); + void sortChildren(int column, Qt::SortOrder order); + void setSelected(bool aselect); + bool isSelected() const; + void setHidden(bool ahide); + bool isHidden() const; + void setExpanded(bool aexpand); + bool isExpanded() const; + + enum ChildIndicatorPolicy + { + ShowIndicator, + DontShowIndicator, + DontShowIndicatorWhenChildless, + }; + + void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy); + QTreeWidgetItem::ChildIndicatorPolicy childIndicatorPolicy() const; + void removeChild(QTreeWidgetItem *child /TransferBack/); + void setFirstColumnSpanned(bool aspan); + bool isFirstColumnSpanned() const; + void setDisabled(bool disabled); + bool isDisabled() const; + +protected: + void emitDataChanged(); + +private: + QTreeWidgetItem &operator=(const QTreeWidgetItem &); +}; + +QDataStream &operator<<(QDataStream &out, const QTreeWidgetItem &item /Constrained/) /ReleaseGIL/; +QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item /Constrained/) /ReleaseGIL/; + +class QTreeWidget : public QTreeView +{ +%TypeHeaderCode +#include +%End + +public: + explicit QTreeWidget(QWidget *parent /TransferThis/ = 0); + virtual ~QTreeWidget(); + int columnCount() const; + void setColumnCount(int columns); + QTreeWidgetItem *topLevelItem(int index) const; + int topLevelItemCount() const; + void insertTopLevelItem(int index, QTreeWidgetItem *item /Transfer/); + void addTopLevelItem(QTreeWidgetItem *item /Transfer/); + QTreeWidgetItem *takeTopLevelItem(int index) /TransferBack/; + int indexOfTopLevelItem(QTreeWidgetItem *item) const; + void insertTopLevelItems(int index, const QList &items /Transfer/); + void addTopLevelItems(const QList &items /Transfer/); + QTreeWidgetItem *headerItem() const; + void setHeaderItem(QTreeWidgetItem *item /Transfer/); + void setHeaderLabels(const QStringList &labels); + QTreeWidgetItem *currentItem() const; + int currentColumn() const; + void setCurrentItem(QTreeWidgetItem *item); + void setCurrentItem(QTreeWidgetItem *item, int column); + void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command); + QTreeWidgetItem *itemAt(const QPoint &p) const; + QTreeWidgetItem *itemAt(int ax, int ay) const; + QRect visualItemRect(const QTreeWidgetItem *item) const; + int sortColumn() const; + void sortItems(int column, Qt::SortOrder order); + void editItem(QTreeWidgetItem *item, int column = 0); + void openPersistentEditor(QTreeWidgetItem *item, int column = 0); + void closePersistentEditor(QTreeWidgetItem *item, int column = 0); + QWidget *itemWidget(QTreeWidgetItem *item, int column) const; + void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget /Transfer/); +%MethodCode + // We have to break the association with any existing widget. Note that I'm + // not sure this is really necessary as it should get tidied up when Qt + // destroys any current widget, except (possibly) when the widget wasn't + // created from PyQt. See also removeItemWidget(), QListWidget and + // QTableWidget. + QWidget *w = sipCpp->itemWidget(a0, a1); + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferTo(wo, 0); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->setItemWidget(a0, a1, a2); + Py_END_ALLOW_THREADS +%End + + QList selectedItems() const; + QList findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const; + +public slots: + void scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible); + void expandItem(const QTreeWidgetItem *item); + void collapseItem(const QTreeWidgetItem *item); + void clear(); + +signals: + void itemPressed(QTreeWidgetItem *item, int column); + void itemClicked(QTreeWidgetItem *item, int column); + void itemDoubleClicked(QTreeWidgetItem *item, int column); + void itemActivated(QTreeWidgetItem *item, int column); + void itemEntered(QTreeWidgetItem *item, int column); + void itemChanged(QTreeWidgetItem *item, int column); + void itemExpanded(QTreeWidgetItem *item); + void itemCollapsed(QTreeWidgetItem *item); + void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); + void itemSelectionChanged(); + +protected: + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QList items) const /TransferBack/; + virtual bool dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action); + virtual Qt::DropActions supportedDropActions() const; + QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const; + QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const; + virtual bool event(QEvent *e); + virtual void dropEvent(QDropEvent *event); + +public: + QTreeWidgetItem *invisibleRootItem() const /Transfer/; + void setHeaderLabel(const QString &alabel); + bool isFirstItemColumnSpanned(const QTreeWidgetItem *item) const; + void setFirstItemColumnSpanned(const QTreeWidgetItem *item, bool span); + QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const; + QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const; + void removeItemWidget(QTreeWidgetItem *item, int column); +%MethodCode + // We have to break the association with any existing widget. + QWidget *w = sipCpp->itemWidget(a0, a1); + + if (w) + { + PyObject *wo = sipGetPyObject(w, sipType_QWidget); + + if (wo) + sipTransferTo(wo, 0); + } + + Py_BEGIN_ALLOW_THREADS + sipCpp->removeItemWidget(a0, a1); + Py_END_ALLOW_THREADS +%End + + virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/); +%If (Qt_5_10_0 -) + bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const; +%End + +private: + virtual void setModel(QAbstractItemModel *model /KeepReference/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreewidgetitemiterator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreewidgetitemiterator.sip new file mode 100644 index 0000000..53e971d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qtreewidgetitemiterator.sip @@ -0,0 +1,69 @@ +// qtreewidgetitemiterator.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QTreeWidgetItemIterator +{ +%TypeHeaderCode +#include +%End + +public: + enum IteratorFlag + { + All, + Hidden, + NotHidden, + Selected, + Unselected, + Selectable, + NotSelectable, + DragEnabled, + DragDisabled, + DropEnabled, + DropDisabled, + HasChildren, + NoChildren, + Checked, + NotChecked, + Enabled, + Disabled, + Editable, + NotEditable, + UserFlag, + }; + + typedef QFlags IteratorFlags; + QTreeWidgetItemIterator(const QTreeWidgetItemIterator &it); + QTreeWidgetItemIterator(QTreeWidget *widget, QFlags flags = All); + QTreeWidgetItemIterator(QTreeWidgetItem *item, QFlags flags = All); + ~QTreeWidgetItemIterator(); + QTreeWidgetItem *value() const; +%MethodCode + // SIP doesn't support operator* so this is a thin wrapper around it. + sipRes = sipCpp->operator*(); +%End + + QTreeWidgetItemIterator &operator+=(int n); + QTreeWidgetItemIterator &operator-=(int n); +}; + +QFlags operator|(QTreeWidgetItemIterator::IteratorFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundogroup.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundogroup.sip new file mode 100644 index 0000000..db499cb --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundogroup.sip @@ -0,0 +1,57 @@ +// qundogroup.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QUndoGroup : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QUndoGroup(QObject *parent /TransferThis/ = 0); + virtual ~QUndoGroup(); + void addStack(QUndoStack *stack); + void removeStack(QUndoStack *stack); + QList stacks() const; + QUndoStack *activeStack() const; + QAction *createRedoAction(QObject *parent /TransferThis/, const QString &prefix = QString()) const /Factory/; + QAction *createUndoAction(QObject *parent /TransferThis/, const QString &prefix = QString()) const /Factory/; + bool canUndo() const; + bool canRedo() const; + QString undoText() const; + QString redoText() const; + bool isClean() const; + +public slots: + void redo(); + void setActiveStack(QUndoStack *stack); + void undo(); + +signals: + void activeStackChanged(QUndoStack *stack); + void canRedoChanged(bool canRedo); + void canUndoChanged(bool canUndo); + void cleanChanged(bool clean); + void indexChanged(int idx); + void redoTextChanged(const QString &redoText); + void undoTextChanged(const QString &undoText); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundostack.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundostack.sip new file mode 100644 index 0000000..b2bc29c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundostack.sip @@ -0,0 +1,101 @@ +// qundostack.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QUndoCommand /Supertype=sip.wrapper/ +{ +%TypeHeaderCode +#include +%End + +public: + explicit QUndoCommand(QUndoCommand *parent /TransferThis/ = 0); + QUndoCommand(const QString &text, QUndoCommand *parent /TransferThis/ = 0); + virtual ~QUndoCommand(); + virtual int id() const; + virtual bool mergeWith(const QUndoCommand *other); + virtual void redo(); + void setText(const QString &text); + QString text() const; + virtual void undo(); + int childCount() const; + const QUndoCommand *child(int index) const; + QString actionText() const; +%If (Qt_5_9_0 -) + bool isObsolete() const; +%End +%If (Qt_5_9_0 -) + void setObsolete(bool obsolete); +%End + +private: + QUndoCommand(const QUndoCommand &); +}; + +class QUndoStack : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + explicit QUndoStack(QObject *parent /TransferThis/ = 0); + virtual ~QUndoStack(); + void clear(); + void push(QUndoCommand *cmd /Transfer/); + bool canUndo() const; + bool canRedo() const; + QString undoText() const; + QString redoText() const; + int count() const /__len__/; + int index() const; + QString text(int idx) const; + QAction *createUndoAction(QObject *parent /TransferThis/, const QString &prefix = QString()) const /Factory/; + QAction *createRedoAction(QObject *parent /TransferThis/, const QString &prefix = QString()) const /Factory/; + bool isActive() const; + bool isClean() const; + int cleanIndex() const; + void beginMacro(const QString &text); + void endMacro(); + +public slots: + void redo(); + void setActive(bool active = true); + void setClean(); + void setIndex(int idx); + void undo(); +%If (Qt_5_8_0 -) + void resetClean(); +%End + +signals: + void canRedoChanged(bool canRedo); + void canUndoChanged(bool canUndo); + void cleanChanged(bool clean); + void indexChanged(int idx); + void redoTextChanged(const QString &redoText); + void undoTextChanged(const QString &undoText); + +public: + void setUndoLimit(int limit); + int undoLimit() const; + const QUndoCommand *command(int index) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundoview.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundoview.sip new file mode 100644 index 0000000..71b405c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qundoview.sip @@ -0,0 +1,44 @@ +// qundoview.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QUndoView : public QListView +{ +%TypeHeaderCode +#include +%End + +public: + explicit QUndoView(QWidget *parent /TransferThis/ = 0); + QUndoView(QUndoStack *stack, QWidget *parent /TransferThis/ = 0); + QUndoView(QUndoGroup *group, QWidget *parent /TransferThis/ = 0); + virtual ~QUndoView(); + QUndoStack *stack() const; + QUndoGroup *group() const; + void setEmptyLabel(const QString &label); + QString emptyLabel() const; + void setCleanIcon(const QIcon &icon); + QIcon cleanIcon() const; + +public slots: + void setStack(QUndoStack *stack /KeepReference/); + void setGroup(QUndoGroup *group /KeepReference/); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwhatsthis.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwhatsthis.sip new file mode 100644 index 0000000..604a911 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwhatsthis.sip @@ -0,0 +1,38 @@ +// qwhatsthis.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QWhatsThis +{ +%TypeHeaderCode +#include +%End + + QWhatsThis(); + +public: + static void enterWhatsThisMode(); + static bool inWhatsThisMode(); + static void leaveWhatsThisMode(); + static void showText(const QPoint &pos, const QString &text, QWidget *widget = 0); + static void hideText(); + static QAction *createAction(QObject *parent /TransferThis/ = 0) /Factory/; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwidget.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwidget.sip new file mode 100644 index 0000000..3a9ac8f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwidget.sip @@ -0,0 +1,451 @@ +// qwidget.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +const int QWIDGETSIZE_MAX; + +class QWidget : public QObject, public QPaintDevice +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// Transfer the ownership of a single widget to a parent. +static void qtgui_TransferWidget(QWidget *w, PyObject *py_parent) +{ + PyObject *py_w = sipGetPyObject(w, sipType_QWidget); + + if (py_w) + sipTransferTo(py_w, py_parent); +} + + +// Transfer ownership of all widgets in a layout to their new parent. +static void qtwidgets_TransferLayoutWidgets(QLayout *lay, PyObject *pw) +{ + int n = lay->count(); + + for (int i = 0; i < n; ++i) + { + QLayoutItem *item = lay->itemAt(i); + QWidget *w = item->widget(); + + if (w) + { + qtgui_TransferWidget(w, pw); + } + else + { + QLayout *l = item->layout(); + + if (l) + qtwidgets_TransferLayoutWidgets(l, pw); + } + } + + QWidget *mb = lay->menuBar(); + + if (mb) + qtgui_TransferWidget(mb, pw); +} +%End + +public: + QWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QWidget(); + virtual int devType() const; + QStyle *style() const; + void setStyle(QStyle * /KeepReference/); + bool isEnabledTo(const QWidget *) const; + +public slots: + void setEnabled(bool); + void setDisabled(bool); + void setWindowModified(bool); + +public: + QRect frameGeometry() const; + QRect normalGeometry() const; + int x() const; + int y() const; + QPoint pos() const; + QSize frameSize() const; + QRect childrenRect() const; + QRegion childrenRegion() const; + QSize minimumSize() const; + QSize maximumSize() const; + void setMinimumSize(int minw, int minh); + void setMaximumSize(int maxw, int maxh); + void setMinimumWidth(int minw); + void setMinimumHeight(int minh); + void setMaximumWidth(int maxw); + void setMaximumHeight(int maxh); + QSize sizeIncrement() const; + void setSizeIncrement(int w, int h); + QSize baseSize() const; + void setBaseSize(int basew, int baseh); + void setFixedSize(const QSize &); + void setFixedSize(int w, int h); + void setFixedWidth(int w); + void setFixedHeight(int h); + QPoint mapToGlobal(const QPoint &) const; + QPoint mapFromGlobal(const QPoint &) const; + QPoint mapToParent(const QPoint &) const; + QPoint mapFromParent(const QPoint &) const; + QPoint mapTo(const QWidget *, const QPoint &) const; + QPoint mapFrom(const QWidget *, const QPoint &) const; + QWidget *window() const; + const QPalette &palette() const; + void setPalette(const QPalette &); + void setBackgroundRole(QPalette::ColorRole); + QPalette::ColorRole backgroundRole() const; + void setForegroundRole(QPalette::ColorRole); + QPalette::ColorRole foregroundRole() const; + void setFont(const QFont &); + QCursor cursor() const; + void setCursor(const QCursor &); + void unsetCursor(); + void setMask(const QBitmap &); + void setMask(const QRegion &); + QRegion mask() const; + void clearMask(); + void setWindowTitle(const QString &); + QString windowTitle() const; + void setWindowIcon(const QIcon &icon); + QIcon windowIcon() const; + void setWindowIconText(const QString &); + QString windowIconText() const; + void setWindowRole(const QString &); + QString windowRole() const; + void setWindowOpacity(qreal level); + qreal windowOpacity() const; + bool isWindowModified() const; + void setToolTip(const QString &); + QString toolTip() const; + void setStatusTip(const QString &); + QString statusTip() const; + void setWhatsThis(const QString &); + QString whatsThis() const; +%If (PyQt_Accessibility) + QString accessibleName() const; +%End +%If (PyQt_Accessibility) + void setAccessibleName(const QString &name); +%End +%If (PyQt_Accessibility) + QString accessibleDescription() const; +%End +%If (PyQt_Accessibility) + void setAccessibleDescription(const QString &description); +%End + void setLayoutDirection(Qt::LayoutDirection direction); + Qt::LayoutDirection layoutDirection() const; + void unsetLayoutDirection(); + bool isRightToLeft() const; + bool isLeftToRight() const; + +public slots: + void setFocus(); + +public: + bool isActiveWindow() const; + void activateWindow(); + void clearFocus(); + void setFocus(Qt::FocusReason reason); + Qt::FocusPolicy focusPolicy() const; + void setFocusPolicy(Qt::FocusPolicy policy); + bool hasFocus() const; + static void setTabOrder(QWidget *, QWidget *); + void setFocusProxy(QWidget * /KeepReference/); + QWidget *focusProxy() const; + Qt::ContextMenuPolicy contextMenuPolicy() const; + void setContextMenuPolicy(Qt::ContextMenuPolicy policy); + void grabMouse(); + void grabMouse(const QCursor &); + void releaseMouse(); + void grabKeyboard(); + void releaseKeyboard(); + int grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut); + void releaseShortcut(int id); + void setShortcutEnabled(int id, bool enabled = true); + static QWidget *mouseGrabber(); + static QWidget *keyboardGrabber(); + void setUpdatesEnabled(bool enable); + +public slots: + void update(); + void repaint(); + +public: + void update(const QRect &); + void update(const QRegion &); + void repaint(int x, int y, int w, int h); + void repaint(const QRect &); + void repaint(const QRegion &); + +public slots: + virtual void setVisible(bool visible); + void setHidden(bool hidden); + void show(); + void hide(); + void showMinimized(); + void showMaximized(); + void showFullScreen(); + void showNormal(); + bool close(); + void raise() /PyName=raise_/; + void lower(); + +public: + void stackUnder(QWidget *); + void move(const QPoint &); + void resize(const QSize &); + void setGeometry(const QRect &); + void adjustSize(); + bool isVisibleTo(const QWidget *) const; + bool isMinimized() const; + bool isMaximized() const; + bool isFullScreen() const; + Qt::WindowStates windowState() const; + void setWindowState(Qt::WindowStates state); + void overrideWindowState(Qt::WindowStates state); + virtual QSize sizeHint() const; + virtual QSize minimumSizeHint() const; + QSizePolicy sizePolicy() const; + void setSizePolicy(QSizePolicy); + virtual int heightForWidth(int) const; + QRegion visibleRegion() const; + void setContentsMargins(int left, int top, int right, int bottom); + void getContentsMargins(int *left, int *top, int *right, int *bottom) const; + QRect contentsRect() const; + QLayout *layout() const; + void setLayout(QLayout * /Transfer/); +%MethodCode + Py_BEGIN_ALLOW_THREADS + sipCpp->setLayout(a0); + Py_END_ALLOW_THREADS + + // Internally Qt has reparented all of the widgets in the layout, so we need + // to update the ownership hierachy. + qtwidgets_TransferLayoutWidgets(a0, sipSelf); +%End + + void updateGeometry(); + void setParent(QWidget *parent /TransferThis/); + void setParent(QWidget *parent /TransferThis/, Qt::WindowFlags f); + void scroll(int dx, int dy); + void scroll(int dx, int dy, const QRect &); + QWidget *focusWidget() const; + QWidget *nextInFocusChain() const; + bool acceptDrops() const; + void setAcceptDrops(bool on); + void addAction(QAction *action); + void addActions(QList actions); + void insertAction(QAction *before, QAction *action); + void insertActions(QAction *before, QList actions); + void removeAction(QAction *action); + QList actions() const; + void setWindowFlags(Qt::WindowFlags type); + void overrideWindowFlags(Qt::WindowFlags type); + static QWidget *find(WId); + QWidget *childAt(const QPoint &p) const; + void setAttribute(Qt::WidgetAttribute attribute, bool on = true); + virtual QPaintEngine *paintEngine() const; + void ensurePolished() const; + bool isAncestorOf(const QWidget *child) const; + +signals: + void customContextMenuRequested(const QPoint &pos); + +protected: + virtual bool event(QEvent *); + virtual void mousePressEvent(QMouseEvent *); + virtual void mouseReleaseEvent(QMouseEvent *); + virtual void mouseDoubleClickEvent(QMouseEvent *); + virtual void mouseMoveEvent(QMouseEvent *); + virtual void wheelEvent(QWheelEvent *); + virtual void keyPressEvent(QKeyEvent *); + virtual void keyReleaseEvent(QKeyEvent *); + virtual void focusInEvent(QFocusEvent *); + virtual void focusOutEvent(QFocusEvent *); + virtual void enterEvent(QEvent *); + virtual void leaveEvent(QEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void moveEvent(QMoveEvent *); + virtual void resizeEvent(QResizeEvent *); + virtual void closeEvent(QCloseEvent *); + virtual void contextMenuEvent(QContextMenuEvent *); + virtual void tabletEvent(QTabletEvent *); + virtual void actionEvent(QActionEvent *); + virtual void dragEnterEvent(QDragEnterEvent *); + virtual void dragMoveEvent(QDragMoveEvent *); + virtual void dragLeaveEvent(QDragLeaveEvent *); + virtual void dropEvent(QDropEvent *); + virtual void showEvent(QShowEvent *); + virtual void hideEvent(QHideEvent *); + virtual void changeEvent(QEvent *); + virtual int metric(QPaintDevice::PaintDeviceMetric) const; + virtual void inputMethodEvent(QInputMethodEvent *); + +public: + virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const; + +protected: + void updateMicroFocus(); + void create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true); + void destroy(bool destroyWindow = true, bool destroySubWindows = true); + virtual bool focusNextPrevChild(bool next); + bool focusNextChild(); + bool focusPreviousChild(); + +public: + QWidget *childAt(int ax, int ay) const; + Qt::WindowType windowType() const; + Qt::WindowFlags windowFlags() const; + WId winId() const; + bool isWindow() const; + bool isEnabled() const; + bool isModal() const; + int minimumWidth() const; + int minimumHeight() const; + int maximumWidth() const; + int maximumHeight() const; + void setMinimumSize(const QSize &s); + void setMaximumSize(const QSize &s); + void setSizeIncrement(const QSize &s); + void setBaseSize(const QSize &s); + const QFont &font() const; + QFontMetrics fontMetrics() const; + QFontInfo fontInfo() const; + void setMouseTracking(bool enable); + bool hasMouseTracking() const; + bool underMouse() const; + bool updatesEnabled() const; + void update(int ax, int ay, int aw, int ah); + bool isVisible() const; + bool isHidden() const; + void move(int ax, int ay); + void resize(int w, int h); + void setGeometry(int ax, int ay, int aw, int ah); + QRect rect() const; + const QRect &geometry() const; + QSize size() const; + int width() const; + int height() const; + QWidget *parentWidget() const; + void setSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver); + bool testAttribute(Qt::WidgetAttribute attribute) const; + Qt::WindowModality windowModality() const; + void setWindowModality(Qt::WindowModality windowModality); + bool autoFillBackground() const; + void setAutoFillBackground(bool enabled); + void setStyleSheet(const QString &styleSheet); + QString styleSheet() const; + void setShortcutAutoRepeat(int id, bool enabled = true); + QByteArray saveGeometry() const; + bool restoreGeometry(const QByteArray &geometry); + + enum RenderFlag + { + DrawWindowBackground, + DrawChildren, + IgnoreMask, + }; + + typedef QFlags RenderFlags; + void render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags flags = QWidget::RenderFlags(QWidget::RenderFlag::DrawWindowBackground | QWidget::RenderFlag::DrawChildren)); + void render(QPainter *painter, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags flags = QWidget::RenderFlags(QWidget::RenderFlag::DrawWindowBackground | QWidget::RenderFlag::DrawChildren)); + void setLocale(const QLocale &locale); + QLocale locale() const; + void unsetLocale(); + WId effectiveWinId() const; + QWidget *nativeParentWidget() const; + void setWindowFilePath(const QString &filePath); + QString windowFilePath() const; + QGraphicsProxyWidget *graphicsProxyWidget() const; + QGraphicsEffect *graphicsEffect() const; + void setGraphicsEffect(QGraphicsEffect *effect /Transfer/); + void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags()); + void ungrabGesture(Qt::GestureType type); + void setContentsMargins(const QMargins &margins); + QMargins contentsMargins() const; + QWidget *previousInFocusChain() const; + Qt::InputMethodHints inputMethodHints() const; + void setInputMethodHints(Qt::InputMethodHints hints); + virtual bool hasHeightForWidth() const; + QPixmap grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1))); +%If (Qt_5_1_0 -) + static SIP_PYOBJECT createWindowContainer(QWindow *window /GetWrapper/, QWidget *parent /GetWrapper/ = 0, Qt::WindowFlags flags = 0) /TypeHint="QWidget",Factory/; +%MethodCode + // Ownersip issues are complicated so we handle them explicitly. + + QWidget *w = QWidget::createWindowContainer(a0, a1, *a2); + + sipRes = sipConvertFromNewType(w, sipType_QWidget, a1Wrapper); + + if (sipRes) + sipTransferTo(a0Wrapper, sipRes); +%End + +%End + QWindow *windowHandle() const; + +protected: + virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result); + virtual QPainter *sharedPainter() const; + virtual void initPainter(QPainter *painter) const; + +public: +%If (Qt_5_2_0 -) + void setToolTipDuration(int msec); +%End +%If (Qt_5_2_0 -) + int toolTipDuration() const; +%End + +signals: +%If (Qt_5_2_0 -) + void windowTitleChanged(const QString &title); +%End +%If (Qt_5_2_0 -) + void windowIconChanged(const QIcon &icon); +%End +%If (Qt_5_2_0 -) + void windowIconTextChanged(const QString &iconText); +%End + +public: +%If (Qt_5_9_0 -) + void setTabletTracking(bool enable); +%End +%If (Qt_5_9_0 -) + bool hasTabletTracking() const; +%End +%If (Qt_5_9_0 -) + void setWindowFlag(Qt::WindowType, bool on = true); +%End +%If (Qt_5_14_0 -) + QScreen *screen() const; +%End +}; + +QFlags operator|(QWidget::RenderFlag f1, QFlags f2); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwidgetaction.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwidgetaction.sip new file mode 100644 index 0000000..1e6a3dd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwidgetaction.sip @@ -0,0 +1,43 @@ +// qwidgetaction.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QWidgetAction : public QAction +{ +%TypeHeaderCode +#include +%End + +public: + explicit QWidgetAction(QObject *parent /TransferThis/); + virtual ~QWidgetAction(); + void setDefaultWidget(QWidget *w /Transfer/); + QWidget *defaultWidget() const; + QWidget *requestWidget(QWidget *parent); + void releaseWidget(QWidget *widget); + +protected: + virtual bool event(QEvent *); + virtual bool eventFilter(QObject *, QEvent *); + virtual QWidget *createWidget(QWidget *parent); + virtual void deleteWidget(QWidget *widget); + QList createdWidgets() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwizard.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwizard.sip new file mode 100644 index 0000000..ea528ce --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtWidgets/qwizard.sip @@ -0,0 +1,242 @@ +// qwizard.sip generated by MetaSIP +// +// This file is part of the QtWidgets Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QWizard : public QDialog +{ +%TypeHeaderCode +#include +%End + +public: + enum WizardButton + { + BackButton, + NextButton, + CommitButton, + FinishButton, + CancelButton, + HelpButton, + CustomButton1, + CustomButton2, + CustomButton3, + Stretch, + }; + + enum WizardPixmap + { + WatermarkPixmap, + LogoPixmap, + BannerPixmap, + BackgroundPixmap, + }; + + enum WizardStyle + { + ClassicStyle, + ModernStyle, + MacStyle, + AeroStyle, + }; + + enum WizardOption + { + IndependentPages, + IgnoreSubTitles, + ExtendedWatermarkPixmap, + NoDefaultButton, + NoBackButtonOnStartPage, + NoBackButtonOnLastPage, + DisabledBackButtonOnLastPage, + HaveNextButtonOnLastPage, + HaveFinishButtonOnEarlyPages, + NoCancelButton, + CancelButtonOnLeft, + HaveHelpButton, + HelpButtonOnRight, + HaveCustomButton1, + HaveCustomButton2, + HaveCustomButton3, +%If (Qt_5_3_0 -) + NoCancelButtonOnLastPage, +%End + }; + + typedef QFlags WizardOptions; + QWizard(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::WindowFlags()); + virtual ~QWizard(); + int addPage(QWizardPage *page /Transfer/); + void setPage(int id, QWizardPage *page /Transfer/); + QWizardPage *page(int id) const; + bool hasVisitedPage(int id) const; + QList visitedPages() const; + void setStartId(int id); + int startId() const; + QWizardPage *currentPage() const; + int currentId() const; + virtual bool validateCurrentPage(); + virtual int nextId() const; + void setField(const QString &name, const QVariant &value); + QVariant field(const QString &name) const; + void setWizardStyle(QWizard::WizardStyle style); + QWizard::WizardStyle wizardStyle() const; + void setOption(QWizard::WizardOption option, bool on = true); + bool testOption(QWizard::WizardOption option) const; + void setOptions(QWizard::WizardOptions options); + QWizard::WizardOptions options() const; + void setButtonText(QWizard::WizardButton which, const QString &text); + QString buttonText(QWizard::WizardButton which) const; + void setButtonLayout(const QList &layout); + void setButton(QWizard::WizardButton which, QAbstractButton *button /Transfer/); + QAbstractButton *button(QWizard::WizardButton which) const /Transfer/; + void setTitleFormat(Qt::TextFormat format); + Qt::TextFormat titleFormat() const; + void setSubTitleFormat(Qt::TextFormat format); + Qt::TextFormat subTitleFormat() const; + void setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap); + QPixmap pixmap(QWizard::WizardPixmap which) const; + void setDefaultProperty(const char *className, const char *property, SIP_PYOBJECT changedSignal /TypeHint="PYQT_SIGNAL"/); +%MethodCode + QByteArray signal_signature; + + if ((sipError = pyqt5_qtwidgets_get_signal_signature(a2, 0, signal_signature)) == sipErrorNone) + { + sipCpp->setDefaultProperty(a0, a1, signal_signature.constData()); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(2, a2); + } +%End + + virtual void setVisible(bool visible); + virtual QSize sizeHint() const; + +signals: + void currentIdChanged(int id); + void helpRequested(); + void customButtonClicked(int which); + +public slots: + void back(); + void next(); + void restart(); + +protected: + virtual bool event(QEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual void paintEvent(QPaintEvent *event); + virtual void done(int result); + virtual void initializePage(int id); + virtual void cleanupPage(int id); + +public: + void removePage(int id); + QList pageIds() const; + void setSideWidget(QWidget *widget /Transfer/); + QWidget *sideWidget() const; + +signals: + void pageAdded(int id); + void pageRemoved(int id); + +public: +%If (Qt_5_15_0 -) + QList visitedIds() const; +%End +}; + +QFlags operator|(QWizard::WizardOption f1, QFlags f2); + +class QWizardPage : public QWidget +{ +%TypeHeaderCode +#include +%End + +public: + explicit QWizardPage(QWidget *parent /TransferThis/ = 0); + virtual ~QWizardPage(); + void setTitle(const QString &title); + QString title() const; + void setSubTitle(const QString &subTitle); + QString subTitle() const; + void setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap); + QPixmap pixmap(QWizard::WizardPixmap which) const; + void setFinalPage(bool finalPage); + bool isFinalPage() const; + void setCommitPage(bool commitPage); + bool isCommitPage() const; + void setButtonText(QWizard::WizardButton which, const QString &text); + QString buttonText(QWizard::WizardButton which) const; + virtual void initializePage(); + virtual void cleanupPage(); + virtual bool validatePage(); + virtual bool isComplete() const; + virtual int nextId() const; + +signals: + void completeChanged(); + +protected: + void setField(const QString &name, const QVariant &value); + QVariant field(const QString &name) const; + void registerField(const QString &name, QWidget *widget, const char *property = 0, SIP_PYOBJECT changedSignal /TypeHint="PYQT_SIGNAL"/ = 0) [void (const QString &name, QWidget *widget, const char *property = 0, const char *changedSignal = 0)]; +%MethodCode + typedef sipErrorState (*pyqt5_get_signal_signature_t)(PyObject *, QObject *, QByteArray &); + + static pyqt5_get_signal_signature_t pyqt5_get_signal_signature = 0; + + if (!pyqt5_get_signal_signature) + { + pyqt5_get_signal_signature = (pyqt5_get_signal_signature_t)sipImportSymbol("pyqt5_get_signal_signature"); + Q_ASSERT(pyqt5_get_signal_signature); + } + + QByteArray signal_signature; + const char *signal = 0; + + if (a3 && a3 != Py_None) + { + if ((sipError = pyqt5_get_signal_signature(a3, a1, signal_signature)) == sipErrorNone) + { + signal = signal_signature.constData(); + } + else if (sipError == sipErrorContinue) + { + sipError = sipBadCallableArg(3, a3); + } + } + + if (sipError == sipErrorNone) + { + Py_BEGIN_ALLOW_THREADS + #if defined(SIP_PROTECTED_IS_PUBLIC) + sipCpp->registerField(*a0, a1, a2, signal); + #else + sipCpp->sipProtect_registerField(*a0, a1, a2, signal); + #endif + Py_END_ALLOW_THREADS + } +%End + + QWizard *wizard() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/QtX11Extras.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/QtX11Extras.toml new file mode 100644 index 0000000..21b0bc5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/QtX11Extras.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtX11Extras. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/QtX11Extrasmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/QtX11Extrasmod.sip new file mode 100644 index 0000000..2317a26 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/QtX11Extrasmod.sip @@ -0,0 +1,46 @@ +// This is the SIP interface definition for the QtX11Extras module of PyQt v5. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtX11Extras, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qx11info_x11.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/qx11info_x11.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/qx11info_x11.sip new file mode 100644 index 0000000..b28ba5a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtX11Extras/qx11info_x11.sip @@ -0,0 +1,66 @@ +// This is the SIP interface definition for QX11Info. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%If (Qt_5_1_0 -) + +class Display; +class xcb_connection_t; + + +class QX11Info +{ +%TypeHeaderCode +#include +%End + +public: +%If (Qt_5_2_0 -) + static bool isPlatformX11(); +%End + + static int appDpiX(int screen = -1); + static int appDpiY(int screen = -1); + + static unsigned long appRootWindow(int screen = -1); + static int appScreen(); + + static unsigned long appTime(); + static unsigned long appUserTime(); + + static void setAppTime(unsigned long time); + static void setAppUserTime(unsigned long time); + +%If (Qt_5_2_0 -) + static unsigned long getTimestamp(); +%End + +%If (Qt_5_4_0 -) + static QByteArray nextStartupId(); + static void setNextStartupId(const QByteArray &id); +%End + + static Display *display(); + static xcb_connection_t *connection(); + +private: + QX11Info(); +}; + +%End diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/QtXml.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/QtXml.toml new file mode 100644 index 0000000..4df65ec --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/QtXml.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtXml. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/QtXmlmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/QtXmlmod.sip new file mode 100644 index 0000000..588f9b8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/QtXmlmod.sip @@ -0,0 +1,49 @@ +// QtXmlmod.sip generated by MetaSIP +// +// This file is part of the QtXml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtXml, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qdom.sip +%Include qxml.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/qdom.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/qdom.sip new file mode 100644 index 0000000..2d44d5f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/qdom.sip @@ -0,0 +1,441 @@ +// qdom.sip generated by MetaSIP +// +// This file is part of the QtXml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QDomImplementation +{ +%TypeHeaderCode +#include +%End + +public: + QDomImplementation(); + QDomImplementation(const QDomImplementation &); + ~QDomImplementation(); + bool operator==(const QDomImplementation &) const; + bool operator!=(const QDomImplementation &) const; + bool hasFeature(const QString &feature, const QString &version) const; + QDomDocumentType createDocumentType(const QString &qName, const QString &publicId, const QString &systemId); + QDomDocument createDocument(const QString &nsURI, const QString &qName, const QDomDocumentType &doctype); + + enum InvalidDataPolicy + { + AcceptInvalidChars, + DropInvalidChars, + ReturnNullNode, + }; + + static QDomImplementation::InvalidDataPolicy invalidDataPolicy(); + static void setInvalidDataPolicy(QDomImplementation::InvalidDataPolicy policy); + bool isNull(); +}; + +class QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + enum NodeType + { + ElementNode, + AttributeNode, + TextNode, + CDATASectionNode, + EntityReferenceNode, + EntityNode, + ProcessingInstructionNode, + CommentNode, + DocumentNode, + DocumentTypeNode, + DocumentFragmentNode, + NotationNode, + BaseNode, + CharacterDataNode, + }; + + enum EncodingPolicy + { + EncodingFromDocument, + EncodingFromTextStream, + }; + + QDomNode(); + QDomNode(const QDomNode &); + ~QDomNode(); + bool operator==(const QDomNode &) const; + bool operator!=(const QDomNode &) const; + QDomNode insertBefore(const QDomNode &newChild, const QDomNode &refChild); + QDomNode insertAfter(const QDomNode &newChild, const QDomNode &refChild); + QDomNode replaceChild(const QDomNode &newChild, const QDomNode &oldChild); + QDomNode removeChild(const QDomNode &oldChild); + QDomNode appendChild(const QDomNode &newChild); + bool hasChildNodes() const; + QDomNode cloneNode(bool deep = true) const; + void normalize(); + bool isSupported(const QString &feature, const QString &version) const; + QString nodeName() const; + QDomNode::NodeType nodeType() const; + QDomNode parentNode() const; + QDomNodeList childNodes() const; + QDomNode firstChild() const; + QDomNode lastChild() const; + QDomNode previousSibling() const; + QDomNode nextSibling() const; + QDomNamedNodeMap attributes() const; + QDomDocument ownerDocument() const; + QString namespaceURI() const; + QString localName() const; + bool hasAttributes() const; + QString nodeValue() const; + void setNodeValue(const QString &); + QString prefix() const; + void setPrefix(const QString &pre); + bool isAttr() const; + bool isCDATASection() const; + bool isDocumentFragment() const; + bool isDocument() const; + bool isDocumentType() const; + bool isElement() const; + bool isEntityReference() const; + bool isText() const; + bool isEntity() const; + bool isNotation() const; + bool isProcessingInstruction() const; + bool isCharacterData() const; + bool isComment() const; + QDomNode namedItem(const QString &name) const; + bool isNull() const; + void clear(); + QDomAttr toAttr() const; + QDomCDATASection toCDATASection() const; + QDomDocumentFragment toDocumentFragment() const; + QDomDocument toDocument() const; + QDomDocumentType toDocumentType() const; + QDomElement toElement() const; + QDomEntityReference toEntityReference() const; + QDomText toText() const; + QDomEntity toEntity() const; + QDomNotation toNotation() const; + QDomProcessingInstruction toProcessingInstruction() const; + QDomCharacterData toCharacterData() const; + QDomComment toComment() const; + void save(QTextStream &, int, QDomNode::EncodingPolicy = QDomNode::EncodingFromDocument) const /ReleaseGIL/; + QDomElement firstChildElement(const QString &tagName = QString()) const; + QDomElement lastChildElement(const QString &tagName = QString()) const; + QDomElement previousSiblingElement(const QString &tagName = QString()) const; + QDomElement nextSiblingElement(const QString &taName = QString()) const; + int lineNumber() const; + int columnNumber() const; +}; + +class QDomNodeList +{ +%TypeHeaderCode +#include +%End + +public: + QDomNodeList(); + QDomNodeList(const QDomNodeList &); + ~QDomNodeList(); + bool operator==(const QDomNodeList &) const; + bool operator!=(const QDomNodeList &) const; + QDomNode item(int index) const; + QDomNode at(int index) const; + int length() const; + int count() const /__len__/; + int size() const; + bool isEmpty() const; +}; + +class QDomDocumentType : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomDocumentType(); + QDomDocumentType(const QDomDocumentType &x); + QString name() const; + QDomNamedNodeMap entities() const; + QDomNamedNodeMap notations() const; + QString publicId() const; + QString systemId() const; + QString internalSubset() const; + QDomNode::NodeType nodeType() const; +}; + +class QDomDocument : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomDocument(); + explicit QDomDocument(const QString &name); + explicit QDomDocument(const QDomDocumentType &doctype); + QDomDocument(const QDomDocument &x); + ~QDomDocument(); + QDomElement createElement(const QString &tagName); + QDomDocumentFragment createDocumentFragment(); + QDomText createTextNode(const QString &data); + QDomComment createComment(const QString &data); + QDomCDATASection createCDATASection(const QString &data); + QDomProcessingInstruction createProcessingInstruction(const QString &target, const QString &data); + QDomAttr createAttribute(const QString &name); + QDomEntityReference createEntityReference(const QString &name); + QDomNodeList elementsByTagName(const QString &tagname) const; + QDomNode importNode(const QDomNode &importedNode, bool deep); + QDomElement createElementNS(const QString &nsURI, const QString &qName); + QDomAttr createAttributeNS(const QString &nsURI, const QString &qName); + QDomNodeList elementsByTagNameNS(const QString &nsURI, const QString &localName); + QDomElement elementById(const QString &elementId); + QDomDocumentType doctype() const; + QDomImplementation implementation() const; + QDomElement documentElement() const; + QDomNode::NodeType nodeType() const; + bool setContent(const QByteArray &text, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); + bool setContent(const QString &text, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); + bool setContent(QIODevice *dev, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0) /ReleaseGIL/; + bool setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0) /ReleaseGIL/; + bool setContent(const QByteArray &text, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); + bool setContent(const QString &text, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); + bool setContent(QIODevice *dev, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0) /ReleaseGIL/; + bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0) /ReleaseGIL/; +%If (Qt_5_15_0 -) + bool setContent(QXmlStreamReader *reader, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0); +%End + QString toString(int indent = 1) const; + QByteArray toByteArray(int indent = 1) const; +}; + +class QDomNamedNodeMap +{ +%TypeHeaderCode +#include +%End + +public: + QDomNamedNodeMap(); + QDomNamedNodeMap(const QDomNamedNodeMap &); + ~QDomNamedNodeMap(); + bool operator==(const QDomNamedNodeMap &) const; + bool operator!=(const QDomNamedNodeMap &) const; + QDomNode namedItem(const QString &name) const; + QDomNode setNamedItem(const QDomNode &newNode); + QDomNode removeNamedItem(const QString &name); + QDomNode item(int index) const; + QDomNode namedItemNS(const QString &nsURI, const QString &localName) const; + QDomNode setNamedItemNS(const QDomNode &newNode); + QDomNode removeNamedItemNS(const QString &nsURI, const QString &localName); + int length() const; + int count() const /__len__/; + int size() const; + bool isEmpty() const; + bool contains(const QString &name) const; +}; + +class QDomDocumentFragment : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomDocumentFragment(); + QDomDocumentFragment(const QDomDocumentFragment &x); + QDomNode::NodeType nodeType() const; +}; + +class QDomCharacterData : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomCharacterData(); + QDomCharacterData(const QDomCharacterData &x); + QString substringData(unsigned long offset, unsigned long count); + void appendData(const QString &arg); + void insertData(unsigned long offset, const QString &arg); + void deleteData(unsigned long offset, unsigned long count); + void replaceData(unsigned long offset, unsigned long count, const QString &arg); + int length() const; + QString data() const; + void setData(const QString &); + QDomNode::NodeType nodeType() const; +}; + +class QDomAttr : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomAttr(); + QDomAttr(const QDomAttr &x); + QString name() const; + bool specified() const; + QDomElement ownerElement() const; + QString value() const; + void setValue(const QString &); + QDomNode::NodeType nodeType() const; +}; + +class QDomElement : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomElement(); + QDomElement(const QDomElement &x); + QString attribute(const QString &name, const QString &defaultValue = QString()) const; + void setAttribute(const QString &name, const QString &value); + void setAttribute(const QString &name, qlonglong value); + void setAttribute(const QString &name, qulonglong value); + void setAttribute(const QString &name, double value /Constrained/); + void setAttribute(const QString &name, int value); + void removeAttribute(const QString &name); + QDomAttr attributeNode(const QString &name); + QDomAttr setAttributeNode(const QDomAttr &newAttr); + QDomAttr removeAttributeNode(const QDomAttr &oldAttr); + QDomNodeList elementsByTagName(const QString &tagname) const; + bool hasAttribute(const QString &name) const; + QString attributeNS(const QString nsURI, const QString &localName, const QString &defaultValue = QString()) const; + void setAttributeNS(const QString nsURI, const QString &qName, const QString &value); + void setAttributeNS(const QString nsURI, const QString &qName, qlonglong value); + void setAttributeNS(const QString nsURI, const QString &qName, qulonglong value); + void setAttributeNS(const QString nsURI, const QString &qName, double value /Constrained/); + void setAttributeNS(const QString nsURI, const QString &qName, int value); + void removeAttributeNS(const QString &nsURI, const QString &localName); + QDomAttr attributeNodeNS(const QString &nsURI, const QString &localName); + QDomAttr setAttributeNodeNS(const QDomAttr &newAttr); + QDomNodeList elementsByTagNameNS(const QString &nsURI, const QString &localName) const; + bool hasAttributeNS(const QString &nsURI, const QString &localName) const; + QString tagName() const; + void setTagName(const QString &name); + QDomNamedNodeMap attributes() const; + QDomNode::NodeType nodeType() const; + QString text() const; +}; + +class QDomText : public QDomCharacterData +{ +%TypeHeaderCode +#include +%End + +public: + QDomText(); + QDomText(const QDomText &x); + QDomText splitText(int offset); + QDomNode::NodeType nodeType() const; +}; + +class QDomComment : public QDomCharacterData +{ +%TypeHeaderCode +#include +%End + +public: + QDomComment(); + QDomComment(const QDomComment &x); + QDomNode::NodeType nodeType() const; +}; + +class QDomCDATASection : public QDomText +{ +%TypeHeaderCode +#include +%End + +public: + QDomCDATASection(); + QDomCDATASection(const QDomCDATASection &x); + QDomNode::NodeType nodeType() const; +}; + +class QDomNotation : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomNotation(); + QDomNotation(const QDomNotation &x); + QString publicId() const; + QString systemId() const; + QDomNode::NodeType nodeType() const; +}; + +class QDomEntity : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomEntity(); + QDomEntity(const QDomEntity &x); + QString publicId() const; + QString systemId() const; + QString notationName() const; + QDomNode::NodeType nodeType() const; +}; + +class QDomEntityReference : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomEntityReference(); + QDomEntityReference(const QDomEntityReference &x); + QDomNode::NodeType nodeType() const; +}; + +class QDomProcessingInstruction : public QDomNode +{ +%TypeHeaderCode +#include +%End + +public: + QDomProcessingInstruction(); + QDomProcessingInstruction(const QDomProcessingInstruction &x); + QString target() const; + QString data() const; + void setData(const QString &d); + QDomNode::NodeType nodeType() const; +}; + +QTextStream &operator<<(QTextStream &, const QDomNode & /Constrained/); diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/qxml.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/qxml.sip new file mode 100644 index 0000000..4489e73 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXml/qxml.sip @@ -0,0 +1,333 @@ +// qxml.sip generated by MetaSIP +// +// This file is part of the QtXml Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlNamespaceSupport +{ +%TypeHeaderCode +#include +%End + +public: + QXmlNamespaceSupport(); + ~QXmlNamespaceSupport(); + void setPrefix(const QString &, const QString &); + QString prefix(const QString &) const; + QString uri(const QString &) const; + void splitName(const QString &, QString &, QString &) const; + void processName(const QString &, bool, QString &, QString &) const; + QStringList prefixes() const; + QStringList prefixes(const QString &) const; + void pushContext(); + void popContext(); + void reset(); + +private: + QXmlNamespaceSupport(const QXmlNamespaceSupport &); +}; + +class QXmlAttributes +{ +%TypeHeaderCode +#include +%End + +public: + QXmlAttributes(); +%If (Qt_5_8_0 -) + QXmlAttributes(const QXmlAttributes &); +%End + virtual ~QXmlAttributes(); + int index(const QString &qName) const; + int index(const QString &uri, const QString &localPart) const; + int length() const; + QString localName(int index) const; + QString qName(int index) const; + QString uri(int index) const; + QString type(int index) const; + QString type(const QString &qName) const; + QString type(const QString &uri, const QString &localName) const; + QString value(int index) const; + QString value(const QString &qName) const; + QString value(const QString &uri, const QString &localName) const; + void clear(); + void append(const QString &qName, const QString &uri, const QString &localPart, const QString &value); + int count() const /__len__/; +%If (Qt_5_8_0 -) + void swap(QXmlAttributes &other /Constrained/); +%End +}; + +class QXmlInputSource +{ +%TypeHeaderCode +#include +%End + +public: + QXmlInputSource(); + explicit QXmlInputSource(QIODevice *dev); + virtual ~QXmlInputSource(); + virtual void setData(const QString &dat); + virtual void setData(const QByteArray &dat); + virtual void fetchData(); + virtual QString data() const; + virtual QChar next(); + virtual void reset(); + static const ushort EndOfData; + static const ushort EndOfDocument; + +protected: + virtual QString fromRawData(const QByteArray &data, bool beginning = false); +}; + +class QXmlParseException +{ +%TypeHeaderCode +#include +%End + +public: + QXmlParseException(const QString &name = QString(), int column = -1, int line = -1, const QString &publicId = QString(), const QString &systemId = QString()); + QXmlParseException(const QXmlParseException &other); + ~QXmlParseException(); + int columnNumber() const; + int lineNumber() const; + QString publicId() const; + QString systemId() const; + QString message() const; + +private: + QXmlParseException &operator=(const QXmlParseException &); +}; + +class QXmlReader +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QXmlReader(); + virtual bool feature(const QString &name, bool *ok = 0) const = 0; + virtual void setFeature(const QString &name, bool value) = 0; + virtual bool hasFeature(const QString &name) const = 0; + virtual void *property(const QString &name, bool *ok = 0) const = 0; + virtual void setProperty(const QString &name, void *value) = 0; + virtual bool hasProperty(const QString &name) const = 0; + virtual void setEntityResolver(QXmlEntityResolver *handler /KeepReference/) = 0; + virtual QXmlEntityResolver *entityResolver() const = 0; + virtual void setDTDHandler(QXmlDTDHandler *handler /KeepReference/) = 0; + virtual QXmlDTDHandler *DTDHandler() const = 0; + virtual void setContentHandler(QXmlContentHandler *handler /KeepReference/) = 0; + virtual QXmlContentHandler *contentHandler() const = 0; + virtual void setErrorHandler(QXmlErrorHandler *handler /KeepReference/) = 0; + virtual QXmlErrorHandler *errorHandler() const = 0; + virtual void setLexicalHandler(QXmlLexicalHandler *handler /KeepReference/) = 0; + virtual QXmlLexicalHandler *lexicalHandler() const = 0; + virtual void setDeclHandler(QXmlDeclHandler *handler /KeepReference/) = 0; + virtual QXmlDeclHandler *declHandler() const = 0; + virtual bool parse(const QXmlInputSource &input) = 0; + virtual bool parse(const QXmlInputSource *input) = 0; +}; + +class QXmlSimpleReader : public QXmlReader +{ +%TypeHeaderCode +#include +%End + +public: + QXmlSimpleReader(); + virtual ~QXmlSimpleReader(); + virtual bool feature(const QString &name, bool *ok = 0) const; + virtual void setFeature(const QString &name, bool value); + virtual bool hasFeature(const QString &name) const; + virtual void *property(const QString &name, bool *ok = 0) const; + virtual void setProperty(const QString &name, void *value); + virtual bool hasProperty(const QString &name) const; + virtual void setEntityResolver(QXmlEntityResolver *handler /KeepReference/); + virtual QXmlEntityResolver *entityResolver() const; + virtual void setDTDHandler(QXmlDTDHandler *handler); + virtual QXmlDTDHandler *DTDHandler() const; + virtual void setContentHandler(QXmlContentHandler *handler /KeepReference/); + virtual QXmlContentHandler *contentHandler() const; + virtual void setErrorHandler(QXmlErrorHandler *handler /KeepReference/); + virtual QXmlErrorHandler *errorHandler() const; + virtual void setLexicalHandler(QXmlLexicalHandler *handler /KeepReference/); + virtual QXmlLexicalHandler *lexicalHandler() const; + virtual void setDeclHandler(QXmlDeclHandler *handler /KeepReference/); + virtual QXmlDeclHandler *declHandler() const; + virtual bool parse(const QXmlInputSource *input); + virtual bool parse(const QXmlInputSource *input, bool incremental); + virtual bool parseContinue(); + +private: + QXmlSimpleReader(const QXmlSimpleReader &); +}; + +class QXmlLocator +{ +%TypeHeaderCode +#include +%End + +public: + QXmlLocator(); + virtual ~QXmlLocator(); + virtual int columnNumber() const = 0; + virtual int lineNumber() const = 0; +}; + +class QXmlContentHandler +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QXmlContentHandler(); + virtual void setDocumentLocator(QXmlLocator *locator /KeepReference/) = 0; + virtual bool startDocument() = 0; + virtual bool endDocument() = 0; + virtual bool startPrefixMapping(const QString &prefix, const QString &uri) = 0; + virtual bool endPrefixMapping(const QString &prefix) = 0; + virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts) = 0; + virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName) = 0; + virtual bool characters(const QString &ch) = 0; + virtual bool ignorableWhitespace(const QString &ch) = 0; + virtual bool processingInstruction(const QString &target, const QString &data) = 0; + virtual bool skippedEntity(const QString &name) = 0; + virtual QString errorString() const = 0; +}; + +class QXmlErrorHandler +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QXmlErrorHandler(); + virtual bool warning(const QXmlParseException &exception) = 0; + virtual bool error(const QXmlParseException &exception) = 0; + virtual bool fatalError(const QXmlParseException &exception) = 0; + virtual QString errorString() const = 0; +}; + +class QXmlDTDHandler +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QXmlDTDHandler(); + virtual bool notationDecl(const QString &name, const QString &publicId, const QString &systemId) = 0; + virtual bool unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString ¬ationName) = 0; + virtual QString errorString() const = 0; +}; + +class QXmlEntityResolver +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QXmlEntityResolver(); + virtual bool resolveEntity(const QString &publicId, const QString &systemId, QXmlInputSource *&ret) = 0; + virtual QString errorString() const = 0; +}; + +class QXmlLexicalHandler +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QXmlLexicalHandler(); + virtual bool startDTD(const QString &name, const QString &publicId, const QString &systemId) = 0; + virtual bool endDTD() = 0; + virtual bool startEntity(const QString &name) = 0; + virtual bool endEntity(const QString &name) = 0; + virtual bool startCDATA() = 0; + virtual bool endCDATA() = 0; + virtual bool comment(const QString &ch) = 0; + virtual QString errorString() const = 0; +}; + +class QXmlDeclHandler +{ +%TypeHeaderCode +#include +%End + +public: + virtual ~QXmlDeclHandler(); + virtual bool attributeDecl(const QString &eName, const QString &aName, const QString &type, const QString &valueDefault, const QString &value) = 0; + virtual bool internalEntityDecl(const QString &name, const QString &value) = 0; + virtual bool externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId) = 0; + virtual QString errorString() const = 0; +}; + +class QXmlDefaultHandler : public QXmlContentHandler, public QXmlErrorHandler, public QXmlDTDHandler, public QXmlEntityResolver, public QXmlLexicalHandler, public QXmlDeclHandler +{ +%TypeHeaderCode +#include +%End + +public: + QXmlDefaultHandler(); + virtual ~QXmlDefaultHandler(); + virtual void setDocumentLocator(QXmlLocator *locator /KeepReference/); + virtual bool startDocument(); + virtual bool endDocument(); + virtual bool startPrefixMapping(const QString &prefix, const QString &uri); + virtual bool endPrefixMapping(const QString &prefix); + virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts); + virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName); + virtual bool characters(const QString &ch); + virtual bool ignorableWhitespace(const QString &ch); + virtual bool processingInstruction(const QString &target, const QString &data); + virtual bool skippedEntity(const QString &name); + virtual bool warning(const QXmlParseException &exception); + virtual bool error(const QXmlParseException &exception); + virtual bool fatalError(const QXmlParseException &exception); + virtual bool notationDecl(const QString &name, const QString &publicId, const QString &systemId); + virtual bool unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString ¬ationName); + virtual bool resolveEntity(const QString &publicId, const QString &systemId, QXmlInputSource *&ret); + virtual bool startDTD(const QString &name, const QString &publicId, const QString &systemId); + virtual bool endDTD(); + virtual bool startEntity(const QString &name); + virtual bool endEntity(const QString &name); + virtual bool startCDATA(); + virtual bool endCDATA(); + virtual bool comment(const QString &ch); + virtual bool attributeDecl(const QString &eName, const QString &aName, const QString &type, const QString &valueDefault, const QString &value); + virtual bool internalEntityDecl(const QString &name, const QString &value); + virtual bool externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId); + virtual QString errorString() const; + +private: + QXmlDefaultHandler(const QXmlDefaultHandler &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/QtXmlPatterns.toml b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/QtXmlPatterns.toml new file mode 100644 index 0000000..d474c53 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/QtXmlPatterns.toml @@ -0,0 +1,6 @@ +# Automatically generated configuration for PyQt5.QtXmlPatterns. + +sip-version = "6.8.6" +sip-abi-version = "12.15" +module-tags = ["Qt_5_15_14", "WS_X11"] +module-disabled-features = [] diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/QtXmlPatternsmod.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/QtXmlPatternsmod.sip new file mode 100644 index 0000000..d2ed7a5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/QtXmlPatternsmod.sip @@ -0,0 +1,62 @@ +// QtXmlPatternsmod.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +%Module(name=PyQt5.QtXmlPatterns, keyword_arguments="Optional", use_limited_api=True) + +%Import QtCore/QtCoremod.sip +%Import QtNetwork/QtNetworkmod.sip + +%Copying +Copyright (c) 2024 Riverbank Computing Limited + +This file is part of PyQt5. + +This file may be used under the terms of the GNU General Public License +version 3.0 as published by the Free Software Foundation and appearing in +the file LICENSE included in the packaging of this file. Please review the +following information to ensure the GNU General Public License version 3.0 +requirements will be met: http://www.gnu.org/copyleft/gpl.html. + +If you do not wish to use this file under the terms of the GPL version 3.0 +then you may purchase a commercial license. For more information contact +info@riverbankcomputing.com. + +This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +%End + +%DefaultSupertype sip.simplewrapper + +%Include qabstractmessagehandler.sip +%Include qabstracturiresolver.sip +%Include qabstractxmlnodemodel.sip +%Include qabstractxmlreceiver.sip +%Include qsimplexmlnodemodel.sip +%Include qsourcelocation.sip +%Include qxmlformatter.sip +%Include qxmlname.sip +%Include qxmlnamepool.sip +%Include qxmlquery.sip +%Include qxmlresultitems.sip +%Include qxmlschema.sip +%Include qxmlschemavalidator.sip +%Include qxmlserializer.sip diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractmessagehandler.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractmessagehandler.sip new file mode 100644 index 0000000..b1551cd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractmessagehandler.sip @@ -0,0 +1,65 @@ +// qabstractmessagehandler.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractMessageHandler : public QObject +{ +%TypeHeaderCode +#include +%End + +%ConvertToSubClassCode + static struct class_graph { + const char *name; + sipTypeDef **type; + int yes, no; + } graph[] = { + {sipName_QAbstractUriResolver, &sipType_QAbstractUriResolver, -1, 1}, + {sipName_QAbstractMessageHandler, &sipType_QAbstractMessageHandler, -1, -1}, + }; + + int i = 0; + + sipType = NULL; + + do + { + struct class_graph *cg = &graph[i]; + + if (cg->name != NULL && sipCpp->inherits(cg->name)) + { + sipType = *cg->type; + i = cg->yes; + } + else + i = cg->no; + } + while (i >= 0); +%End + +public: + QAbstractMessageHandler(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractMessageHandler(); + void message(QtMsgType type, const QString &description, const QUrl &identifier = QUrl(), const QSourceLocation &sourceLocation = QSourceLocation()); + +protected: + virtual void handleMessage(QtMsgType type, const QString &description, const QUrl &identifier, const QSourceLocation &sourceLocation) = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstracturiresolver.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstracturiresolver.sip new file mode 100644 index 0000000..a0f7bd9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstracturiresolver.sip @@ -0,0 +1,33 @@ +// qabstracturiresolver.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractUriResolver : public QObject +{ +%TypeHeaderCode +#include +%End + +public: + QAbstractUriResolver(QObject *parent /TransferThis/ = 0); + virtual ~QAbstractUriResolver(); + virtual QUrl resolve(const QUrl &relative, const QUrl &baseURI) const = 0; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractxmlnodemodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractxmlnodemodel.sip new file mode 100644 index 0000000..e8fdc00 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractxmlnodemodel.sip @@ -0,0 +1,131 @@ +// qabstractxmlnodemodel.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlNodeModelIndex +{ +%TypeHeaderCode +#include +%End + +public: + QXmlNodeModelIndex(); + QXmlNodeModelIndex(const QXmlNodeModelIndex &other); + bool operator==(const QXmlNodeModelIndex &other) const; + bool operator!=(const QXmlNodeModelIndex &other) const; + + enum NodeKind + { + Attribute, + Comment, + Document, + Element, + Namespace, + ProcessingInstruction, + Text, + }; + + enum DocumentOrder + { + Precedes, + Is, + Follows, + }; + + qint64 data() const; + SIP_PYOBJECT internalPointer() const; +%MethodCode + sipRes = reinterpret_cast(sipCpp->internalPointer()); + + if (!sipRes) + sipRes = Py_None; + + Py_INCREF(sipRes); +%End + + const QAbstractXmlNodeModel *model() const; + qint64 additionalData() const; + bool isNull() const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; + +class QAbstractXmlNodeModel +{ +%TypeHeaderCode +#include +%End + +public: + enum SimpleAxis + { + Parent, + FirstChild, + PreviousSibling, + NextSibling, + }; + + QAbstractXmlNodeModel(); + virtual ~QAbstractXmlNodeModel(); + virtual QUrl baseUri(const QXmlNodeModelIndex &ni) const = 0; + virtual QUrl documentUri(const QXmlNodeModelIndex &ni) const = 0; + virtual QXmlNodeModelIndex::NodeKind kind(const QXmlNodeModelIndex &ni) const = 0; + virtual QXmlNodeModelIndex::DocumentOrder compareOrder(const QXmlNodeModelIndex &ni1, const QXmlNodeModelIndex &ni2) const = 0; + virtual QXmlNodeModelIndex root(const QXmlNodeModelIndex &n) const = 0; + virtual QXmlName name(const QXmlNodeModelIndex &ni) const = 0; + virtual QString stringValue(const QXmlNodeModelIndex &n) const = 0; + virtual QVariant typedValue(const QXmlNodeModelIndex &n) const = 0; + virtual QVector namespaceBindings(const QXmlNodeModelIndex &n) const = 0; + virtual QXmlNodeModelIndex elementById(const QXmlName &NCName) const = 0; + virtual QVector nodesByIdref(const QXmlName &NCName) const = 0; + QSourceLocation sourceLocation(const QXmlNodeModelIndex &index) const; + +protected: + virtual QXmlNodeModelIndex nextFromSimpleAxis(QAbstractXmlNodeModel::SimpleAxis axis, const QXmlNodeModelIndex &origin) const = 0; + virtual QVector attributes(const QXmlNodeModelIndex &element) const = 0; + QXmlNodeModelIndex createIndex(qint64 data) const; + QXmlNodeModelIndex createIndex(qint64 data, qint64 additionalData) const; + QXmlNodeModelIndex createIndex(SIP_PYOBJECT pointer, qint64 additionalData = 0) const [QXmlNodeModelIndex (void *pointer, qint64 additionalData = 0)]; + +private: + QAbstractXmlNodeModel(const QAbstractXmlNodeModel &); +}; + +class QXmlItem +{ +%TypeHeaderCode +#include +%End + +public: + QXmlItem(); + QXmlItem(const QXmlItem &other); + QXmlItem(const QXmlNodeModelIndex &node); + QXmlItem(const QVariant &atomicValue); + ~QXmlItem(); + bool isNull() const; + bool isNode() const; + bool isAtomicValue() const; + QVariant toAtomicValue() const; + QXmlNodeModelIndex toNodeModelIndex() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractxmlreceiver.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractxmlreceiver.sip new file mode 100644 index 0000000..12874db --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qabstractxmlreceiver.sip @@ -0,0 +1,47 @@ +// qabstractxmlreceiver.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QAbstractXmlReceiver +{ +%TypeHeaderCode +#include +%End + +public: + QAbstractXmlReceiver(); + virtual ~QAbstractXmlReceiver(); + virtual void startElement(const QXmlName &name) = 0; + virtual void endElement() = 0; + virtual void attribute(const QXmlName &name, const QStringRef &value) = 0; + virtual void comment(const QString &value) = 0; + virtual void characters(const QStringRef &value) = 0; + virtual void startDocument() = 0; + virtual void endDocument() = 0; + virtual void processingInstruction(const QXmlName &target, const QString &value) = 0; + virtual void atomicValue(const QVariant &value) = 0; + virtual void namespaceBinding(const QXmlName &name) = 0; + virtual void startOfSequence() = 0; + virtual void endOfSequence() = 0; + +private: + QAbstractXmlReceiver(const QAbstractXmlReceiver &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qsimplexmlnodemodel.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qsimplexmlnodemodel.sip new file mode 100644 index 0000000..d9388e3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qsimplexmlnodemodel.sip @@ -0,0 +1,38 @@ +// qsimplexmlnodemodel.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSimpleXmlNodeModel : public QAbstractXmlNodeModel +{ +%TypeHeaderCode +#include +%End + +public: + QSimpleXmlNodeModel(const QXmlNamePool &namePool); + virtual ~QSimpleXmlNodeModel(); + virtual QUrl baseUri(const QXmlNodeModelIndex &node) const; + QXmlNamePool &namePool() const; + virtual QVector namespaceBindings(const QXmlNodeModelIndex &) const; + virtual QString stringValue(const QXmlNodeModelIndex &node) const; + virtual QXmlNodeModelIndex elementById(const QXmlName &id) const; + virtual QVector nodesByIdref(const QXmlName &idref) const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qsourcelocation.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qsourcelocation.sip new file mode 100644 index 0000000..2770df4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qsourcelocation.sip @@ -0,0 +1,47 @@ +// qsourcelocation.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QSourceLocation +{ +%TypeHeaderCode +#include +%End + +public: + QSourceLocation(); + QSourceLocation(const QSourceLocation &other); + QSourceLocation(const QUrl &u, int line = -1, int column = -1); + ~QSourceLocation(); + bool operator==(const QSourceLocation &other) const; + bool operator!=(const QSourceLocation &other) const; + qint64 column() const; + void setColumn(qint64 newColumn); + qint64 line() const; + void setLine(qint64 newLine); + QUrl uri() const; + void setUri(const QUrl &newUri); + bool isNull() const; + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlformatter.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlformatter.sip new file mode 100644 index 0000000..9bbb391 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlformatter.sip @@ -0,0 +1,44 @@ +// qxmlformatter.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlFormatter : public QXmlSerializer +{ +%TypeHeaderCode +#include +%End + +public: + QXmlFormatter(const QXmlQuery &query, QIODevice *outputDevice); + virtual void characters(const QStringRef &value); + virtual void comment(const QString &value); + virtual void startElement(const QXmlName &name); + virtual void endElement(); + virtual void attribute(const QXmlName &name, const QStringRef &value); + virtual void processingInstruction(const QXmlName &name, const QString &value); + virtual void atomicValue(const QVariant &value); + virtual void startDocument(); + virtual void endDocument(); + virtual void startOfSequence(); + virtual void endOfSequence(); + int indentationDepth() const; + void setIndentationDepth(int depth); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlname.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlname.sip new file mode 100644 index 0000000..6405176 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlname.sip @@ -0,0 +1,48 @@ +// qxmlname.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlName +{ +%TypeHeaderCode +#include +%End + +public: + QXmlName(); + QXmlName(QXmlNamePool &namePool, const QString &localName, const QString &namespaceUri = QString(), const QString &prefix = QString()); +%If (Qt_5_9_0 -) + QXmlName(const QXmlName &other); +%End + QString namespaceUri(const QXmlNamePool &query) const; + QString prefix(const QXmlNamePool &query) const; + QString localName(const QXmlNamePool &query) const; + QString toClarkName(const QXmlNamePool &query) const; + bool operator==(const QXmlName &other) const; + bool operator!=(const QXmlName &other) const; + bool isNull() const; + static bool isNCName(const QString &candidate); + static QXmlName fromClarkName(const QString &clarkName, const QXmlNamePool &namePool); + long __hash__() const; +%MethodCode + sipRes = qHash(*sipCpp); +%End +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlnamepool.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlnamepool.sip new file mode 100644 index 0000000..7fde754 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlnamepool.sip @@ -0,0 +1,33 @@ +// qxmlnamepool.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlNamePool +{ +%TypeHeaderCode +#include +%End + +public: + QXmlNamePool(); + QXmlNamePool(const QXmlNamePool &other); + ~QXmlNamePool(); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlquery.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlquery.sip new file mode 100644 index 0000000..4f1bbaa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlquery.sip @@ -0,0 +1,126 @@ +// qxmlquery.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlQuery +{ +%TypeHeaderCode +#include +%End + +%TypeCode +// Needed by the evaluateToStringList() %MethodCode. +#include +%End + +public: + enum QueryLanguage + { + XQuery10, + XSLT20, + }; + + QXmlQuery(); + QXmlQuery(const QXmlQuery &other); + QXmlQuery(const QXmlNamePool &np); + QXmlQuery(QXmlQuery::QueryLanguage queryLanguage, const QXmlNamePool &pool = QXmlNamePool()); + ~QXmlQuery(); + void setMessageHandler(QAbstractMessageHandler *messageHandler /KeepReference/); + QAbstractMessageHandler *messageHandler() const; + void setQuery(const QString &sourceCode, const QUrl &documentUri = QUrl()); + void setQuery(QIODevice *sourceCode, const QUrl &documentUri = QUrl()); + void setQuery(const QUrl &queryURI, const QUrl &baseUri = QUrl()); + QXmlNamePool namePool() const; + void bindVariable(const QXmlName &name, const QXmlItem &value); + void bindVariable(const QXmlName &name, QIODevice *); + void bindVariable(const QXmlName &name, const QXmlQuery &query); + void bindVariable(const QString &localName, const QXmlItem &value); + void bindVariable(const QString &localName, QIODevice *); + void bindVariable(const QString &localName, const QXmlQuery &query); + bool isValid() const; + void evaluateTo(QXmlResultItems *result) const; + bool evaluateTo(QAbstractXmlReceiver *callback) const; + SIP_PYOBJECT evaluateToStringList() const /TypeHint="QStringList"/; +%MethodCode + static const sipTypeDef *sipType_QStringList = 0; + + if (!sipType_QStringList) + sipType_QStringList = sipFindType("QStringList"); + + bool ok; + QStringList *result = new QStringList; + + Py_BEGIN_ALLOW_THREADS + ok = sipCpp->evaluateTo(result); + Py_END_ALLOW_THREADS + + if (ok) + { + sipRes = sipConvertFromNewType(result, sipType_QStringList, NULL); + } + else + { + delete result; + sipRes = Py_None; + Py_INCREF(Py_None); + } +%End + + bool evaluateTo(QIODevice *target) const; + SIP_PYOBJECT evaluateToString() const /TypeHint="QString"/; +%MethodCode + static const sipTypeDef *sipType_QStringList = 0; + + if (!sipType_QStringList) + sipType_QStringList = sipFindType("QStringList"); + + bool ok; + QString *result = new QString; + + Py_BEGIN_ALLOW_THREADS + ok = sipCpp->evaluateTo(result); + Py_END_ALLOW_THREADS + + if (ok) + { + sipRes = sipConvertFromNewType(result, sipType_QString, NULL); + } + else + { + delete result; + sipRes = Py_None; + Py_INCREF(Py_None); + } +%End + + void setUriResolver(const QAbstractUriResolver *resolver /KeepReference/); + const QAbstractUriResolver *uriResolver() const; + void setFocus(const QXmlItem &item); + bool setFocus(const QUrl &documentURI); + bool setFocus(QIODevice *document); + bool setFocus(const QString &focus); + void setInitialTemplateName(const QXmlName &name); + void setInitialTemplateName(const QString &name); + QXmlName initialTemplateName() const; + void setNetworkAccessManager(QNetworkAccessManager *newManager /KeepReference/); + QNetworkAccessManager *networkAccessManager() const; + QXmlQuery::QueryLanguage queryLanguage() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlresultitems.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlresultitems.sip new file mode 100644 index 0000000..e098dbd --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlresultitems.sip @@ -0,0 +1,38 @@ +// qxmlresultitems.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlResultItems +{ +%TypeHeaderCode +#include +%End + +public: + QXmlResultItems(); + virtual ~QXmlResultItems(); + bool hasError() const; + QXmlItem next(); + QXmlItem current() const; + +private: + QXmlResultItems(const QXmlResultItems &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlschema.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlschema.sip new file mode 100644 index 0000000..f893dab --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlschema.sip @@ -0,0 +1,50 @@ +// qxmlschema.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlSchema +{ +%TypeHeaderCode +#include +%End + +public: + QXmlSchema(); + QXmlSchema(const QXmlSchema &other); + +private: + QXmlSchema &operator=(const QXmlSchema &); + +public: + ~QXmlSchema(); + bool load(const QUrl &source) /ReleaseGIL/; + bool load(QIODevice *source, const QUrl &documentUri = QUrl()) /ReleaseGIL/; + bool load(const QByteArray &data, const QUrl &documentUri = QUrl()); + bool isValid() const; + QXmlNamePool namePool() const; + QUrl documentUri() const; + void setMessageHandler(QAbstractMessageHandler *handler /KeepReference/); + QAbstractMessageHandler *messageHandler() const; + void setUriResolver(const QAbstractUriResolver *resolver /KeepReference/); + const QAbstractUriResolver *uriResolver() const; + void setNetworkAccessManager(QNetworkAccessManager *networkmanager /KeepReference/); + QNetworkAccessManager *networkAccessManager() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlschemavalidator.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlschemavalidator.sip new file mode 100644 index 0000000..aff90c6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlschemavalidator.sip @@ -0,0 +1,59 @@ +// qxmlschemavalidator.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlSchemaValidator +{ +%TypeHeaderCode +#include +%End + +public: + QXmlSchemaValidator(); + QXmlSchemaValidator(const QXmlSchema &schema); + ~QXmlSchemaValidator(); + void setSchema(const QXmlSchema &schema); + bool validate(const QUrl &source) const /ReleaseGIL/; + bool validate(QIODevice *source, const QUrl &documentUri = QUrl()) const /ReleaseGIL/; + bool validate(const QByteArray &data, const QUrl &documentUri = QUrl()) const; + QXmlNamePool namePool() const; + QXmlSchema schema() const; +%MethodCode + // For reasons we don't quite understand QXmlSchema's copy ctor has to be + // private as far as sip is concerned - otherwise we get compiler errors. + // However that means that sip generates the wrong code here, because it + // doesn't realise it can take a copy of the result. + + Py_BEGIN_ALLOW_THREADS + sipRes = new QXmlSchema(sipCpp->schema()); + Py_END_ALLOW_THREADS +%End + + void setMessageHandler(QAbstractMessageHandler *handler /KeepReference/); + QAbstractMessageHandler *messageHandler() const; + void setUriResolver(const QAbstractUriResolver *resolver /KeepReference/); + const QAbstractUriResolver *uriResolver() const; + void setNetworkAccessManager(QNetworkAccessManager *networkmanager /KeepReference/); + QNetworkAccessManager *networkAccessManager() const; + +private: + QXmlSchemaValidator(const QXmlSchemaValidator &); +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlserializer.sip b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlserializer.sip new file mode 100644 index 0000000..d2e0631 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/bindings/QtXmlPatterns/qxmlserializer.sip @@ -0,0 +1,46 @@ +// qxmlserializer.sip generated by MetaSIP +// +// This file is part of the QtXmlPatterns Python extension module. +// +// Copyright (c) 2024 Riverbank Computing Limited +// +// This file is part of PyQt5. +// +// This file may be used under the terms of the GNU General Public License +// version 3.0 as published by the Free Software Foundation and appearing in +// the file LICENSE included in the packaging of this file. Please review the +// following information to ensure the GNU General Public License version 3.0 +// requirements will be met: http://www.gnu.org/copyleft/gpl.html. +// +// If you do not wish to use this file under the terms of the GPL version 3.0 +// then you may purchase a commercial license. For more information contact +// info@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +class QXmlSerializer : public QAbstractXmlReceiver +{ +%TypeHeaderCode +#include +%End + +public: + QXmlSerializer(const QXmlQuery &query, QIODevice *outputDevice); + virtual void namespaceBinding(const QXmlName &nb); + virtual void characters(const QStringRef &value); + virtual void comment(const QString &value); + virtual void startElement(const QXmlName &name); + virtual void endElement(); + virtual void attribute(const QXmlName &name, const QStringRef &value); + virtual void processingInstruction(const QXmlName &name, const QString &value); + virtual void atomicValue(const QVariant &value); + virtual void startDocument(); + virtual void endDocument(); + virtual void startOfSequence(); + virtual void endOfSequence(); + QIODevice *outputDevice() const; + void setCodec(const QTextCodec *codec /KeepReference/); + const QTextCodec *codec() const; +}; diff --git a/venv/lib/python3.12/site-packages/PyQt5/py.typed b/venv/lib/python3.12/site-packages/PyQt5/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/PyQt5/pylupdate.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/pylupdate.abi3.so new file mode 100644 index 0000000..34bbfa6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/pylupdate.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/pylupdate_main.py b/venv/lib/python3.12/site-packages/PyQt5/pylupdate_main.py new file mode 100644 index 0000000..3bcba2c --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/pylupdate_main.py @@ -0,0 +1,247 @@ +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import locale +import sys + +from PyQt5.QtCore import (PYQT_VERSION_STR, QDir, QFile, QFileInfo, QIODevice, + QTextStream) + +from .pylupdate import * + + +def printUsage(): + sys.stderr.write( +"Usage:\n" +" pylupdate5 [options] project-file\n" +" pylupdate5 [options] source-files -ts ts-files\n" +"\n" +"Options:\n" +" -help Display this information and exit\n" +" -version\n" +" Display the version of pylupdate5 and exit\n" +" -verbose\n" +" Explain what is being done\n" +" -noobsolete\n" +" Drop all obsolete strings\n" +" -tr-function name\n" +" name() may be used instead of tr()\n" +" -translate-function name\n" +" name() may be used instead of translate()\n"); + + +def updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete, verbose): + dir = QDir() + + for t in tsFileNames: + fn = dir.relativeFilePath(t) + tor = MetaTranslator() + out = MetaTranslator() + + tor.load(t) + + if codecForTr: + tor.setCodec(codecForTr) + + merge(tor, fetchedTor, out, noObsolete, verbose, fn) + + if noObsolete: + out.stripObsoleteMessages() + + out.stripEmptyContexts() + + if not out.save(t): + sys.stderr.write("pylupdate5 error: Cannot save '%s'\n" % fn) + + +def _encoded_path(path): + return path.encode(locale.getdefaultlocale()[1]) + + +def main(): + # Initialise. + + defaultContext = "@default" + fetchedTor = MetaTranslator() + codecForTr = '' + codecForSource = '' + tsFileNames = [] + uiFileNames = [] + + verbose = False + noObsolete = False + metSomething = False + numFiles = 0 + standardSyntax = True + metTsFlag = False + tr_func = None + translate_func = None + + # Parse the command line. + + for arg in sys.argv[1:]: + if arg == "-ts": + standardSyntax = False + + argc = len(sys.argv) + i = 1 + + while i < argc: + arg = sys.argv[i] + i += 1 + + if arg == "-help": + printUsage() + sys.exit(0) + + if arg == "-version": + sys.stderr.write("pylupdate5 v%s\n" % PYQT_VERSION_STR) + sys.exit(0) + + if arg == "-noobsolete": + noObsolete = True + continue + + if arg == "-verbose": + verbose = True + continue + + if arg == "-ts": + metTsFlag = True + continue + + if arg == "-tr-function": + if i >= argc: + sys.stderr.write( + "pylupdate5 error: missing -tr-function name\n") + sys.exit(2) + + tr_func = sys.argv[i] + i += 1 + continue + + if arg == "-translate-function": + if i >= argc: + sys.stderr.write( + "pylupdate5 error: missing -translate-function name\n") + sys.exit(2) + + translate_func = sys.argv[i] + i += 1 + continue + + numFiles += 1 + + fullText = "" + + if not metTsFlag: + f = QFile(arg) + + if not f.open(QIODevice.ReadOnly): + sys.stderr.write( + "pylupdate5 error: Cannot open file '%s'\n" % arg) + sys.exit(1) + + t = QTextStream(f) + fullText = t.readAll() + f.close() + + if standardSyntax: + oldDir = QDir.currentPath() + QDir.setCurrent(QFileInfo(arg).path()) + + fetchedTor = MetaTranslator() + codecForTr = '' + codecForSource = '' + tsFileNames = [] + uiFileNames = [] + + for key, value in proFileTagMap(fullText).items(): + for t in value.split(' '): + if key == "SOURCES": + fetchtr_py( + _encoded_path( + QDir.current().absoluteFilePath(t)), + fetchedTor, defaultContext, True, + codecForSource, tr_func, translate_func) + metSomething = True + + elif key == "TRANSLATIONS": + tsFileNames.append(QDir.current().absoluteFilePath(t)) + metSomething = True + + elif key in ("CODEC", "DEFAULTCODEC", "CODECFORTR"): + codecForTr = t + fetchedTor.setCodec(codecForTr) + + elif key == "CODECFORSRC": + codecForSource = t + + elif key == "FORMS": + fetchtr_ui( + _encoded_path( + QDir.current().absoluteFilePath(t)), + fetchedTor, defaultContext, True) + + updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete, + verbose) + + if not metSomething: + sys.stderr.write( + "pylupdate5 warning: File '%s' does not look like a " + "project file\n" % arg) + elif len(tsFileNames) == 0: + sys.stderr.write( + "pylupdate5 warning: Met no 'TRANSLATIONS' entry in " + "project file '%s'\n" % arg) + + QDir.setCurrent(oldDir) + else: + if metTsFlag: + if arg.lower().endswith(".ts"): + fi = QFileInfo(arg) + + if not fi.exists() or fi.isWritable(): + tsFileNames.append(arg) + else: + sys.stderr.write( + "pylupdate5 warning: For some reason, I " + "cannot save '%s'\n" % arg) + else: + sys.stderr.write( + "pylupdate5 error: File '%s' lacks .ts extension\n" % arg) + else: + fi = QFileInfo(arg) + path = _encoded_path(fi.absoluteFilePath()) + + if fi.suffix() in ("py", "pyw"): + fetchtr_py(path, fetchedTor, defaultContext, True, + codecForSource, tr_func, translate_func) + else: + fetchtr_ui(path, fetchedTor, defaultContext, True) + + if not standardSyntax: + updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete, verbose) + + if numFiles == 0: + printUsage() + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/PyQt5/pyrcc.abi3.so b/venv/lib/python3.12/site-packages/PyQt5/pyrcc.abi3.so new file mode 100644 index 0000000..ddad114 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/pyrcc.abi3.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/pyrcc_main.py b/venv/lib/python3.12/site-packages/PyQt5/pyrcc_main.py new file mode 100644 index 0000000..5b8b053 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/pyrcc_main.py @@ -0,0 +1,190 @@ +# Copyright (c) 2024 Riverbank Computing Limited +# +# This file is part of PyQt5. +# +# This file may be used under the terms of the GNU General Public License +# version 3.0 as published by the Free Software Foundation and appearing in +# the file LICENSE included in the packaging of this file. Please review the +# following information to ensure the GNU General Public License version 3.0 +# requirements will be met: http://www.gnu.org/copyleft/gpl.html. +# +# If you do not wish to use this file under the terms of the GPL version 3.0 +# then you may purchase a commercial license. For more information contact +# info@riverbankcomputing.com. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import sys + +from PyQt5.QtCore import PYQT_VERSION_STR, QDir, QFile + +from .pyrcc import * + + +# Initialise the globals. +verbose = False +compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT +compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT +resourceRoot = '' + + +def processResourceFile(filenamesIn, filenameOut, listFiles): + if verbose: + sys.stderr.write("PyQt5 resource compiler\n") + + # Setup. + library = RCCResourceLibrary() + library.setInputFiles(filenamesIn) + library.setVerbose(verbose) + library.setCompressLevel(compressLevel) + library.setCompressThreshold(compressThreshold) + library.setResourceRoot(resourceRoot) + + if not library.readFiles(): + return False + + if filenameOut == '-': + filenameOut = '' + + if listFiles: + # Open the output file or use stdout if not specified. + if filenameOut: + try: + out_fd = open(filenameOut, 'w') + except Exception: + sys.stderr.write( + "Unable to open %s for writing\n" % filenameOut) + return False + else: + out_fd = sys.stdout + + for df in library.dataFiles(): + out_fd.write("%s\n" % QDir.cleanPath(df)) + + if out_fd is not sys.stdout: + out_fd.close() + + return True + + return library.output(filenameOut) + + +def showHelp(error): + sys.stderr.write("PyQt5 resource compiler\n") + + if error: + sys.stderr.write("pyrcc5: %s\n" % error) + + sys.stderr.write( +"Usage: pyrcc5 [options] \n" +"\n" +"Options:\n" +" -o file Write output to file rather than stdout\n" +" -threshold level Threshold to consider compressing files\n" +" -compress level Compress input files by level\n" +" -root path Prefix resource access path with root path\n" +" -no-compress Disable all compression\n" +" -version Display version\n" +" -help Display this information\n") + + +def main(): + # Parse the command line. Note that this mimics the original C++ (warts + # and all) in order to preserve backwards compatibility. + global verbose + global compressLevel + global compressThreshold + global resourceRoot + + outFilename = '' + helpRequested = False + listFiles = False + files = [] + + errorMsg = None + argc = len(sys.argv) + i = 1 + + while i < argc: + arg = sys.argv[i] + i += 1 + + if arg[0] == '-': + opt = arg[1:] + + if opt == "o": + if i >= argc: + errorMsg = "Missing output name" + break + + outFilename = sys.argv[i] + i += 1 + + elif opt == "root": + if i >= argc: + errorMsg = "Missing root path" + break + + resourceRoot = QDir.cleanPath(sys.argv[i]) + i += 1 + + if resourceRoot == '' or resourceRoot[0] != '/': + errorMsg = "Root must start with a /" + break + + elif opt == "compress": + if i >= argc: + errorMsg = "Missing compression level" + break + + compressLevel = int(sys.argv[i]) + i += 1 + + elif opt == "threshold": + if i >= argc: + errorMsg = "Missing compression threshold" + break + + compressThreshold = int(sys.argv[i]) + i += 1 + + elif opt == "verbose": + verbose = True + + elif opt == "list": + listFiles = True + + elif opt == "version": + sys.stderr.write("pyrcc5 v%s\n" % PYQT_VERSION_STR) + sys.exit(1) + + elif opt == "help" or opt == "h": + helpRequested = True + + elif opt == "no-compress": + compressLevel = -2 + + else: + errorMsg = "Unknown option: '%s'" % arg + break + else: + if not QFile.exists(arg): + sys.stderr.write( + "%s: File does not exist '%s'\n" % (sys.argv[0], arg)) + sys.exit(1) + + files.append(arg) + + # Handle any errors or a request for help. + if len(files) == 0 or errorMsg is not None or helpRequested: + showHelp(errorMsg) + sys.exit(1) + + if not processResourceFile(files, outFilename, listFiles): + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/PyQt5/sip.cpython-312-x86_64-linux-gnu.so b/venv/lib/python3.12/site-packages/PyQt5/sip.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000..434cd48 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/sip.cpython-312-x86_64-linux-gnu.so differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/sip.pyi b/venv/lib/python3.12/site-packages/PyQt5/sip.pyi new file mode 100644 index 0000000..fc4e7ba --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/sip.pyi @@ -0,0 +1,103 @@ +# SPDX-License-Identifier: BSD-2-Clause + +# Copyright (c) 2024 Phil Thompson + + +from typing import Any, Generic, Iterable, overload, Sequence, TypeVar, Union + + +# PEP 484 has no explicit support for the buffer protocol so we just name types +# we know that implement it. +Buffer = Union[bytes, bytearray, memoryview, 'array', 'voidptr'] + + +# Constants. +SIP_VERSION = ... # type: int +SIP_VERSION_STR = ... # type: str + + +# The bases for SIP generated types. +class wrappertype: + def __init__(self, *args, **kwargs) -> None: ... + +class simplewrapper: + def __init__(self, *args, **kwargs) -> None: ... + +class wrapper(simplewrapper): ... + + +# The array type. +_T = TypeVar('_T') + +class array(Sequence[_T], Generic[_T]): + + @overload + def __getitem__(self, key: int) -> _T: ... + @overload + def __getitem__(self, key: slice) -> 'array[_T]': ... + + @overload + def __setitem__(self, key: int, value: _T) -> None: ... + @overload + def __setitem__(self, key: slice, value: Iterable[_T]) -> None: ... + + @overload + def __delitem__(self, key: int) -> None: ... + @overload + def __delitem__(self, key: slice) -> None: ... + + def __len__(self) -> int: ... + + +# The voidptr type. +class voidptr: + + def __init__(self, addr: Union[int, Buffer], size: int = -1, writeable: bool = True) -> None: ... + + def __int__(self) -> int: ... + + @overload + def __getitem__(self, i: int) -> bytes: ... + + @overload + def __getitem__(self, s: slice) -> 'voidptr': ... + + def __len__(self) -> int: ... + + def __setitem__(self, i: Union[int, slice], v: Buffer) -> None: ... + + def asarray(self, size: int = -1) -> array[int]: ... + + # Python doesn't expose the capsule type. + def ascapsule(self) -> Any: ... + + def asstring(self, size: int = -1) -> bytes: ... + + def getsize(self) -> int: ... + + def getwriteable(self) -> bool: ... + + def setsize(self, size: int) -> None: ... + + def setwriteable(self, writeable: bool) -> None: ... + + +# Remaining functions. +def assign(obj: simplewrapper, other: simplewrapper) -> None: ... +def cast(obj: simplewrapper, type: wrappertype) -> simplewrapper: ... +def delete(obj: simplewrapper) -> None: ... +def dump(obj: simplewrapper) -> None: ... +def enableautoconversion(type: wrappertype, enable: bool) -> bool: ... +def enableoverflowchecking(enable: bool) -> bool: ... +def getapi(name: str) -> int: ... +def isdeleted(obj: simplewrapper) -> bool: ... +def ispycreated(obj: simplewrapper) -> bool: ... +def ispyowned(obj: simplewrapper) -> bool: ... +def setapi(name: str, version: int) -> None: ... +def setdeleted(obj: simplewrapper) -> None: ... +def setdestroyonexit(destroy: bool) -> None: ... +def settracemask(mask: int) -> None: ... +def transferback(obj: wrapper) -> None: ... +def transferto(obj: wrapper, owner: wrapper) -> None: ... +def unwrapinstance(obj: simplewrapper) -> None: ... +def wrapinstance(addr: int, type: wrappertype) -> simplewrapper: ... diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__init__.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__init__.py new file mode 100644 index 0000000..d8ca87f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__init__.py @@ -0,0 +1,20 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..c9d7668 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/compiler.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/compiler.cpython-312.pyc new file mode 100644 index 0000000..aa0e7e5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/compiler.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/indenter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/indenter.cpython-312.pyc new file mode 100644 index 0000000..7a8ec4e Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/indenter.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/misc.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/misc.cpython-312.pyc new file mode 100644 index 0000000..23b1ae7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/misc.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/proxy_metaclass.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/proxy_metaclass.cpython-312.pyc new file mode 100644 index 0000000..d7f1af9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/proxy_metaclass.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/qobjectcreator.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/qobjectcreator.cpython-312.pyc new file mode 100644 index 0000000..d8386a2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/qobjectcreator.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/qtproxies.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/qtproxies.cpython-312.pyc new file mode 100644 index 0000000..d106378 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/__pycache__/qtproxies.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/compiler.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/compiler.py new file mode 100644 index 0000000..86e4672 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/compiler.py @@ -0,0 +1,123 @@ +############################################################################# +## +## Copyright (C) 2019 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +import sys + +from ..properties import Properties +from ..uiparser import UIParser +from . import qtproxies +from .indenter import createCodeIndenter, getIndenter, write_code +from .qobjectcreator import CompilerCreatorPolicy + + +class UICompiler(UIParser): + def __init__(self): + UIParser.__init__(self, qtproxies.QtCore, qtproxies.QtGui, + qtproxies.QtWidgets, CompilerCreatorPolicy()) + + def reset(self): + qtproxies.i18n_strings = [] + UIParser.reset(self) + + def setContext(self, context): + qtproxies.i18n_context = context + + def createToplevelWidget(self, classname, widgetname): + indenter = getIndenter() + indenter.level = 0 + + indenter.write("from PyQt5 import QtCore, QtGui, QtWidgets") + indenter.write("") + + indenter.write("") + indenter.write("class Ui_%s(object):" % self.uiname) + indenter.indent() + indenter.write("def setupUi(self, %s):" % widgetname) + indenter.indent() + w = self.factory.createQObject(classname, widgetname, (), + is_attribute = False, + no_instantiation = True) + w.baseclass = classname + w.uiclass = "Ui_%s" % self.uiname + return w + + def setDelayedProps(self): + write_code("") + write_code("self.retranslateUi(%s)" % self.toplevelWidget) + UIParser.setDelayedProps(self) + + def finalize(self): + indenter = getIndenter() + indenter.level = 1 + indenter.write("") + indenter.write("def retranslateUi(self, %s):" % self.toplevelWidget) + + indenter.indent() + + if qtproxies.i18n_strings: + indenter.write("_translate = QtCore.QCoreApplication.translate") + for s in qtproxies.i18n_strings: + indenter.write(s) + else: + indenter.write("pass") + + indenter.dedent() + indenter.dedent() + + # Keep a reference to the resource modules to import because the parser + # will reset() before returning. + self._resources = self.resources + self._resources.sort() + + def compileUi(self, input_stream, output_stream, from_imports, resource_suffix, import_from): + createCodeIndenter(output_stream) + w = self.parse(input_stream, resource_suffix) + + self.factory._cpolicy._writeOutImports() + + for res in self._resources: + if from_imports: + write_code("from %s import %s" % (import_from, res)) + else: + write_code("import %s" % res) + + return {"widgetname": str(w), + "uiclass" : w.uiclass, + "baseclass" : w.baseclass} diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/indenter.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/indenter.py new file mode 100644 index 0000000..9c92ad5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/indenter.py @@ -0,0 +1,77 @@ +############################################################################# +## +## Copyright (C) 2014 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +indentwidth = 4 + +_indenter = None + +class _IndentedCodeWriter(object): + def __init__(self, output): + self.level = 0 + self.output = output + + def indent(self): + self.level += 1 + + def dedent(self): + self.level -= 1 + + def write(self, line): + if line.strip(): + if indentwidth > 0: + indent = " " * indentwidth + line = line.replace("\t", indent) + else: + indent = "\t" + + self.output.write("%s%s\n" % (indent * self.level, line)) + else: + self.output.write("\n") + + +def createCodeIndenter(output): + global _indenter + _indenter = _IndentedCodeWriter(output) + +def getIndenter(): + return _indenter + +def write_code(string): + _indenter.write(string) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/misc.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/misc.py new file mode 100644 index 0000000..0dcf181 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/misc.py @@ -0,0 +1,59 @@ +############################################################################# +## +## Copyright (C) 2016 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +def moduleMember(module, name): + if module: + return "%s.%s" % (module, name) + + return name + + +class Literal(object): + """Literal(string) -> new literal + + string will not be quoted when put into an argument list""" + def __init__(self, string): + self.string = string + + def __str__(self): + return self.string + + def __or__(self, r_op): + return Literal("%s|%s" % (self, r_op)) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/proxy_metaclass.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/proxy_metaclass.py new file mode 100644 index 0000000..c997b84 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/proxy_metaclass.py @@ -0,0 +1,100 @@ +############################################################################# +## +## Copyright (C) 2014 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +from .misc import Literal, moduleMember + + +class ProxyMetaclass(type): + """ ProxyMetaclass is the meta-class for proxies. """ + + def __init__(*args): + """ Initialise the meta-class. """ + + # Initialise as normal. + type.__init__(*args) + + # The proxy type object we have created. + proxy = args[0] + + # Go through the proxy's attributes looking for other proxies. + for sub_proxy in proxy.__dict__.values(): + if type(sub_proxy) is ProxyMetaclass: + # Set the module name of the contained proxy to the name of the + # container proxy. + sub_proxy.module = proxy.__name__ + + # Attribute hierachies are created depth first so any proxies + # contained in the sub-proxy whose module we have just set will + # already exist and have an incomplete module name. We need to + # revisit them and prepend the new name to their module names. + # Note that this should be recursive but with current usage we + # know there will be only one level to revisit. + for sub_sub_proxy in sub_proxy.__dict__.values(): + if type(sub_sub_proxy) is ProxyMetaclass: + sub_sub_proxy.module = '%s.%s' % (proxy.__name__, sub_sub_proxy.module) + + # Makes sure there is a 'module' attribute. + if not hasattr(proxy, 'module'): + proxy.module = '' + + def __getattribute__(cls, name): + try: + return type.__getattribute__(cls, name) + except AttributeError: + # Make sure __init__()'s use of hasattr() works. + if name == 'module': + raise + + # Avoid a circular import. + from .qtproxies import LiteralProxyClass + + return type(name, (LiteralProxyClass, ), + {"module": moduleMember(type.__getattribute__(cls, "module"), + type.__getattribute__(cls, "__name__"))}) + + def __str__(cls): + return moduleMember(type.__getattribute__(cls, "module"), + type.__getattribute__(cls, "__name__")) + + def __or__(self, r_op): + return Literal("%s|%s" % (self, r_op)) + + def __eq__(self, other): + return str(self) == str(other) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/qobjectcreator.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/qobjectcreator.py new file mode 100644 index 0000000..4771caa --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/qobjectcreator.py @@ -0,0 +1,180 @@ +############################################################################# +## +## Copyright (C) 2018 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +import logging +import sys + +from .indenter import write_code +from .qtproxies import QtGui, QtWidgets, Literal, strict_getattr + +if sys.hexversion >= 0x03000000: + from ..port_v3.as_string import as_string +else: + from ..port_v2.as_string import as_string + + +logger = logging.getLogger(__name__) +DEBUG = logger.debug + + +class _QtWrapper(object): + @classmethod + def search(cls, name): + try: + return strict_getattr(cls.module, name) + except AttributeError: + return None + + +class _QtGuiWrapper(_QtWrapper): + module = QtGui + + +class _QtWidgetsWrapper(_QtWrapper): + module = QtWidgets + + +class _ModuleWrapper(object): + def __init__(self, name, classes): + if "." in name: + idx = name.rfind(".") + self._package = name[:idx] + self._module = name[idx + 1:] + else: + self._package = None + self._module = name + + self._classes = classes + self._used = False + + def search(self, cls): + if cls in self._classes: + self._used = True + + # Remove any C++ scope. + cls = cls.split('.')[-1] + + return type(cls, (QtWidgets.QWidget,), {"module": self._module}) + else: + return None + + def _writeImportCode(self): + if self._used: + if self._package is None: + write_code("import %s" % self._module) + else: + write_code("from %s import %s" % (self._package, self._module)) + + +class _CustomWidgetLoader(object): + def __init__(self): + self._widgets = {} + self._usedWidgets = set() + + def addCustomWidget(self, widgetClass, baseClass, module): + assert widgetClass not in self._widgets + self._widgets[widgetClass] = (baseClass, module) + + def _resolveBaseclass(self, baseClass): + try: + for x in range(0, 10): + try: return strict_getattr(QtWidgets, baseClass) + except AttributeError: pass + + baseClass = self._widgets[baseClass][0] + else: + raise ValueError("baseclass resolve took too long, check custom widgets") + + except KeyError: + raise ValueError("unknown baseclass %s" % baseClass) + + def search(self, cls): + try: + baseClass = self._resolveBaseclass(self._widgets[cls][0]) + DEBUG("resolved baseclass of %s: %s" % (cls, baseClass)) + except KeyError: + return None + + self._usedWidgets.add(cls) + + return type(cls, (baseClass, ), {"module" : ""}) + + def _writeImportCode(self): + imports = {} + for widget in self._usedWidgets: + _, module = self._widgets[widget] + imports.setdefault(module, []).append(widget) + + for module, classes in sorted(imports.items()): + write_code("from %s import %s" % (module, ", ".join(sorted(classes)))) + + +class CompilerCreatorPolicy(object): + def __init__(self): + self._modules = [] + + def createQtGuiWidgetsWrappers(self): + return [_QtGuiWrapper, _QtWidgetsWrapper] + + def createModuleWrapper(self, name, classes): + mw = _ModuleWrapper(name, classes) + self._modules.append(mw) + return mw + + def createCustomWidgetLoader(self): + cw = _CustomWidgetLoader() + self._modules.append(cw) + return cw + + def instantiate(self, clsObject, objectname, ctor_args, is_attribute=True, no_instantiation=False): + return clsObject(objectname, is_attribute, ctor_args, no_instantiation) + + def invoke(self, rname, method, args): + return method(rname, *args) + + def getSlot(self, object, slotname): + return Literal("%s.%s" % (object, slotname)) + + def asString(self, s): + return as_string(s) + + def _writeOutImports(self): + for module in self._modules: + module._writeImportCode() diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/qtproxies.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/qtproxies.py new file mode 100644 index 0000000..8646ae2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Compiler/qtproxies.py @@ -0,0 +1,470 @@ +############################################################################# +## +## Copyright (C) 2021 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +import sys +import re + +from .indenter import write_code +from .misc import Literal, moduleMember + +if sys.hexversion >= 0x03000000: + from ..port_v3.proxy_base import ProxyBase + from ..port_v3.as_string import as_string +else: + from ..port_v2.proxy_base import ProxyBase + from ..port_v2.as_string import as_string + + +i18n_strings = [] +i18n_context = "" + +def i18n_print(string): + i18n_strings.append(string) + +def i18n_void_func(name): + def _printer(self, *args): + i18n_print("%s.%s(%s)" % (self, name, ", ".join(map(as_string, args)))) + return _printer + +def i18n_func(name): + def _printer(self, rname, *args): + i18n_print("%s = %s.%s(%s)" % (rname, self, name, ", ".join(map(as_string, args)))) + return Literal(rname) + + return _printer + +def strict_getattr(module, clsname): + cls = getattr(module, clsname) + if issubclass(cls, LiteralProxyClass): + raise AttributeError(cls) + else: + return cls + + +class i18n_string(object): + def __init__(self, string, disambig): + self.string = string + self.disambig = disambig + + def __str__(self): + if self.disambig is None: + return '_translate("%s", %s)' % (i18n_context, as_string(self.string)) + + return '_translate("%s", %s, %s)' % (i18n_context, as_string(self.string), as_string(self.disambig)) + + +# Classes with this flag will be handled as literal values. If functions are +# called on these classes, the literal value changes. +# Example: +# the code +# >>> QSize(9,10).expandedTo(...) +# will print just that code. +AS_ARGUMENT = 0x02 + +# Classes with this flag may have members that are signals which themselves +# will have a connect() member. +AS_SIGNAL = 0x01 + +# ATTENTION: currently, classes can either be literal or normal. If a class +# should need both kinds of behaviour, the code has to be changed. + +class ProxyClassMember(object): + def __init__(self, proxy, function_name, flags): + self.proxy = proxy + self.function_name = function_name + self.flags = flags + + def __str__(self): + return "%s.%s" % (self.proxy, self.function_name) + + def __call__(self, *args): + if self.function_name == 'setProperty': + str_args = (as_string(args[0]), as_string(args[1])) + else: + str_args = map(as_string, args) + + func_call = "%s.%s(%s)" % (self.proxy, + self.function_name, + ", ".join(str_args)) + if self.flags & AS_ARGUMENT: + self.proxy._uic_name = func_call + return self.proxy + else: + needs_translation = False + for arg in args: + if isinstance(arg, i18n_string): + needs_translation = True + if needs_translation: + i18n_print(func_call) + else: + if self.function_name == 'connect': + func_call += ' # type: ignore' + + write_code(func_call) + + def __getattribute__(self, attribute): + """ Reimplemented to create a proxy connect() if requested and this + might be a proxy for a signal. + """ + + try: + return object.__getattribute__(self, attribute) + except AttributeError: + if attribute == 'connect' and self.flags & AS_SIGNAL: + return ProxyClassMember(self, attribute, 0) + + raise + + def __getitem__(self, idx): + """ Reimplemented to create a proxy member that should be a signal that + passes arguments. We handle signals without arguments before we get + here and never apply the index notation to them. + """ + + return ProxySignalWithArguments(self.proxy, self.function_name, idx) + + +class ProxySignalWithArguments(object): + """ This is a proxy for (what should be) a signal that passes arguments. + """ + + def __init__(self, sender, signal_name, signal_index): + self._sender = sender + self._signal_name = signal_name + + # Convert the signal index, which will be a single argument or a tuple + # of arguments, to quoted strings. + if isinstance(signal_index, tuple): + self._signal_index = ','.join(["'%s'" % a for a in signal_index]) + else: + self._signal_index = "'%s'" % signal_index + + def connect(self, slot): + write_code("%s.%s[%s].connect(%s) # type: ignore" % (self._sender, self._signal_name, self._signal_index, slot)) + + +class ProxyClass(ProxyBase): + flags = 0 + + def __init__(self, objectname, is_attribute, args=(), noInstantiation=False): + if objectname: + if is_attribute: + objectname = "self." + objectname + + self._uic_name = objectname + else: + self._uic_name = "Unnamed" + + if not noInstantiation: + funcall = "%s(%s)" % \ + (moduleMember(self.module, self.__class__.__name__), + ", ".join(map(str, args))) + + if objectname: + funcall = "%s = %s" % (objectname, funcall) + + write_code(funcall) + + def __str__(self): + return self._uic_name + + def __getattribute__(self, attribute): + try: + return object.__getattribute__(self, attribute) + except AttributeError: + return ProxyClassMember(self, attribute, self.flags) + + +class LiteralProxyClass(ProxyClass): + """LiteralObject(*args) -> new literal class + + a literal class can be used as argument in a function call + + >>> class Foo(LiteralProxyClass): pass + >>> str(Foo(1,2,3)) == "Foo(1,2,3)" + """ + flags = AS_ARGUMENT + + def __init__(self, *args): + self._uic_name = "%s(%s)" % \ + (moduleMember(self.module, self.__class__.__name__), + ", ".join(map(as_string, args))) + + +class ProxyNamespace(ProxyBase): + pass + + +# These are all the Qt classes used by pyuic5 in their namespaces. If a class +# is missing, the compiler will fail, normally with an AttributeError. +# +# For adding new classes: +# - utility classes used as literal values do not need to be listed +# because they are created on the fly as subclasses of LiteralProxyClass +# - classes which are *not* QWidgets inherit from ProxyClass and they +# have to be listed explicitly in the correct namespace. These classes +# are created via a ProxyQObjectCreator +# - new QWidget-derived classes have to inherit from qtproxies.QWidget +# If the widget does not need any special methods, it can be listed +# in _qwidgets + +class QtCore(ProxyNamespace): + class Qt(ProxyNamespace): + pass + + ## connectSlotsByName and connect have to be handled as class methods, + ## otherwise they would be created as LiteralProxyClasses and never be + ## printed + class QMetaObject(ProxyClass): + @classmethod + def connectSlotsByName(cls, *args): + ProxyClassMember(cls, "connectSlotsByName", 0)(*args) + + class QObject(ProxyClass): + flags = AS_SIGNAL + + def metaObject(self): + class _FakeMetaObject(object): + def className(*args): + return self.__class__.__name__ + return _FakeMetaObject() + + def objectName(self): + return self._uic_name.split(".")[-1] + + +class QtGui(ProxyNamespace): + class QIcon(ProxyClass): + class fromTheme(ProxyClass): pass + + class QConicalGradient(ProxyClass): pass + class QLinearGradient(ProxyClass): pass + class QRadialGradient(ProxyClass): pass + class QBrush(ProxyClass): pass + class QPainter(ProxyClass): pass + class QPalette(ProxyClass): pass + class QFont(ProxyClass): pass + class QFontDatabase(ProxyClass): pass + + +# These sub-class QWidget but aren't themselves sub-classed. +_qwidgets = ("QCalendarWidget", "QDialogButtonBox", "QDockWidget", "QGroupBox", + "QLineEdit", "QMainWindow", "QMenuBar", "QOpenGLWidget", + "QProgressBar", "QStatusBar", "QToolBar", "QWizardPage") + +class QtWidgets(ProxyNamespace): + class QApplication(QtCore.QObject): + @staticmethod + def translate(uiname, text, disambig): + return i18n_string(text or "", disambig) + + class QSpacerItem(ProxyClass): pass + class QSizePolicy(ProxyClass): pass + # QActions inherit from QObject for the meta-object stuff and the hierarchy + # has to be correct since we have a isinstance(x, QtWidgets.QLayout) call + # in the UI parser. + class QAction(QtCore.QObject): pass + class QActionGroup(QtCore.QObject): pass + class QButtonGroup(QtCore.QObject): pass + class QLayout(QtCore.QObject): pass + class QGridLayout(QLayout): pass + class QBoxLayout(QLayout): pass + class QHBoxLayout(QBoxLayout): pass + class QVBoxLayout(QBoxLayout): pass + class QFormLayout(QLayout): pass + + class QWidget(QtCore.QObject): + def font(self): + return Literal("%s.font()" % self) + + def minimumSizeHint(self): + return Literal("%s.minimumSizeHint()" % self) + + def sizePolicy(self): + sp = LiteralProxyClass() + sp._uic_name = "%s.sizePolicy()" % self + return sp + + class QDialog(QWidget): pass + class QColorDialog(QDialog): pass + class QFileDialog(QDialog): pass + class QFontDialog(QDialog): pass + class QInputDialog(QDialog): pass + class QMessageBox(QDialog): pass + class QWizard(QDialog): pass + + class QAbstractSlider(QWidget): pass + class QDial(QAbstractSlider): pass + class QScrollBar(QAbstractSlider): pass + class QSlider(QAbstractSlider): pass + + class QMenu(QWidget): + def menuAction(self): + return Literal("%s.menuAction()" % self) + + class QTabWidget(QWidget): + def addTab(self, *args): + text = args[-1] + + if isinstance(text, i18n_string): + i18n_print("%s.setTabText(%s.indexOf(%s), %s)" % \ + (self._uic_name, self._uic_name, args[0], text)) + args = args[:-1] + ("", ) + + ProxyClassMember(self, "addTab", 0)(*args) + + def indexOf(self, page): + return Literal("%s.indexOf(%s)" % (self, page)) + + class QComboBox(QWidget): pass + class QFontComboBox(QComboBox): pass + + class QAbstractSpinBox(QWidget): pass + class QDoubleSpinBox(QAbstractSpinBox): pass + class QSpinBox(QAbstractSpinBox): pass + + class QDateTimeEdit(QAbstractSpinBox): pass + class QDateEdit(QDateTimeEdit): pass + class QTimeEdit(QDateTimeEdit): pass + + class QFrame(QWidget): pass + class QLabel(QFrame): pass + class QLCDNumber(QFrame): pass + class QSplitter(QFrame): pass + class QStackedWidget(QFrame): pass + + class QToolBox(QFrame): + def addItem(self, *args): + text = args[-1] + + if isinstance(text, i18n_string): + i18n_print("%s.setItemText(%s.indexOf(%s), %s)" % \ + (self._uic_name, self._uic_name, args[0], text)) + args = args[:-1] + ("", ) + + ProxyClassMember(self, "addItem", 0)(*args) + + def indexOf(self, page): + return Literal("%s.indexOf(%s)" % (self, page)) + + def layout(self): + return QtWidgets.QLayout("%s.layout()" % self, + False, (), noInstantiation=True) + + class QAbstractScrollArea(QFrame): + def viewport(self): + return QtWidgets.QWidget("%s.viewport()" % self, False, (), + noInstantiation=True) + + class QGraphicsView(QAbstractScrollArea): pass + class QMdiArea(QAbstractScrollArea): pass + class QPlainTextEdit(QAbstractScrollArea): pass + class QScrollArea(QAbstractScrollArea): pass + + class QTextEdit(QAbstractScrollArea): pass + class QTextBrowser(QTextEdit): pass + + class QAbstractItemView(QAbstractScrollArea): pass + class QColumnView(QAbstractItemView): pass + class QHeaderView(QAbstractItemView): pass + class QListView(QAbstractItemView): pass + + class QTableView(QAbstractItemView): + def horizontalHeader(self): + return QtWidgets.QHeaderView("%s.horizontalHeader()" % self, + False, (), noInstantiation=True) + + def verticalHeader(self): + return QtWidgets.QHeaderView("%s.verticalHeader()" % self, + False, (), noInstantiation=True) + + class QTreeView(QAbstractItemView): + def header(self): + return QtWidgets.QHeaderView("%s.header()" % self, + False, (), noInstantiation=True) + + class QUndoView(QListView): pass + + class QListWidgetItem(ProxyClass): pass + + class QListWidget(QListView): + setSortingEnabled = i18n_void_func("setSortingEnabled") + isSortingEnabled = i18n_func("isSortingEnabled") + item = i18n_func("item") + + class QTableWidgetItem(ProxyClass): pass + + class QTableWidget(QTableView): + setSortingEnabled = i18n_void_func("setSortingEnabled") + isSortingEnabled = i18n_func("isSortingEnabled") + item = i18n_func("item") + horizontalHeaderItem = i18n_func("horizontalHeaderItem") + verticalHeaderItem = i18n_func("verticalHeaderItem") + + class QTreeWidgetItem(ProxyClass): + def child(self, index): + return QtWidgets.QTreeWidgetItem("%s.child(%i)" % (self, index), + False, (), noInstantiation=True) + + class QTreeWidget(QTreeView): + setSortingEnabled = i18n_void_func("setSortingEnabled") + isSortingEnabled = i18n_func("isSortingEnabled") + + def headerItem(self): + return QtWidgets.QWidget("%s.headerItem()" % self, False, (), + noInstantiation=True) + + def topLevelItem(self, index): + return QtWidgets.QTreeWidgetItem("%s.topLevelItem(%i)" % (self, index), + False, (), noInstantiation=True) + + class QAbstractButton(QWidget): pass + class QCheckBox(QAbstractButton): pass + class QRadioButton(QAbstractButton): pass + class QToolButton(QAbstractButton): pass + + class QPushButton(QAbstractButton): pass + class QCommandLinkButton(QPushButton): pass + class QKeySequenceEdit(QWidget): pass + + # Add all remaining classes. + for _class in _qwidgets: + if _class not in locals(): + locals()[_class] = type(_class, (QWidget, ), {}) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__init__.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__init__.py new file mode 100644 index 0000000..d8ca87f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__init__.py @@ -0,0 +1,20 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..a33e8aa Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/loader.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/loader.cpython-312.pyc new file mode 100644 index 0000000..62e3061 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/loader.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/qobjectcreator.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/qobjectcreator.cpython-312.pyc new file mode 100644 index 0000000..588b03d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/__pycache__/qobjectcreator.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/loader.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/loader.py new file mode 100644 index 0000000..1079a82 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/loader.py @@ -0,0 +1,66 @@ +############################################################################# +## +## Copyright (C) 2019 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +from PyQt5 import QtCore, QtGui, QtWidgets + +from ..uiparser import UIParser +from .qobjectcreator import LoaderCreatorPolicy + + +class DynamicUILoader(UIParser): + def __init__(self, package): + UIParser.__init__(self, QtCore, QtGui, QtWidgets, + LoaderCreatorPolicy(package)) + + def createToplevelWidget(self, classname, widgetname): + if self.toplevelInst is None: + return self.factory.createQObject(classname, widgetname, ()) + + if not isinstance(self.toplevelInst, self.factory.findQObjectType(classname)): + raise TypeError( + ("Wrong base class of toplevel widget", + (type(self.toplevelInst), classname))) + + return self.toplevelInst + + def loadUi(self, filename, toplevelInst, resource_suffix): + self.toplevelInst = toplevelInst + + return self.parse(filename, resource_suffix) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/qobjectcreator.py b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/qobjectcreator.py new file mode 100644 index 0000000..833fefe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/Loader/qobjectcreator.py @@ -0,0 +1,150 @@ +############################################################################# +## +## Copyright (C) 2015 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +import sys + +from PyQt5 import QtGui, QtWidgets + + +class _QtWrapper(object): + @classmethod + def search(cls, name): + return getattr(cls.module, name, None) + + +class _QtGuiWrapper(_QtWrapper): + module = QtGui + + +class _QtWidgetsWrapper(_QtWrapper): + module = QtWidgets + + +class _ModuleWrapper(object): + def __init__(self, moduleName, classes): + self._moduleName = moduleName + self._module = None + self._classes = classes + + def search(self, cls): + if cls in self._classes: + if self._module is None: + self._module = __import__(self._moduleName, {}, {}, self._classes) + # Remove any C++ scope. + cls = cls.split('.')[-1] + + return getattr(self._module, cls) + + return None + + +class _CustomWidgetLoader(object): + def __init__(self, package): + # should it stay this way? + if '.' not in sys.path: + sys.path.append('.') + + self._widgets = {} + self._modules = {} + self._package = package + + def addCustomWidget(self, widgetClass, baseClass, module): + assert widgetClass not in self._widgets + self._widgets[widgetClass] = module + + def search(self, cls): + module_name = self._widgets.get(cls) + if module_name is None: + return None + + module = self._modules.get(module_name) + if module is None: + if module_name.startswith('.'): + if self._package == '': + raise ImportError( + "relative import of %s without base package specified" % module_name) + + if self._package.startswith('.'): + raise ImportError( + "base package %s is relative" % self._package) + + mname = self._package + module_name + else: + mname = module_name + + try: + module = __import__(mname, {}, {}, (cls,)) + except ValueError: + # Raise a more helpful exception. + raise ImportError("unable to import module %s" % mname) + + self._modules[module_name] = module + + return getattr(module, cls) + + +class LoaderCreatorPolicy(object): + def __init__(self, package): + self._package = package + + def createQtGuiWidgetsWrappers(self): + return [_QtGuiWrapper, _QtWidgetsWrapper] + + def createModuleWrapper(self, moduleName, classes): + return _ModuleWrapper(moduleName, classes) + + def createCustomWidgetLoader(self): + return _CustomWidgetLoader(self._package) + + def instantiate(self, clsObject, objectName, ctor_args, is_attribute=True): + return clsObject(*ctor_args) + + def invoke(self, rname, method, args): + return method(*args) + + def getSlot(self, object, slotname): + # Rename slots that correspond to Python keyword arguments. + if slotname == 'raise': + slotname += '_' + + return getattr(object, slotname) + + def asString(self, s): + return s diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__init__.py b/venv/lib/python3.12/site-packages/PyQt5/uic/__init__.py new file mode 100644 index 0000000..ed11790 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/__init__.py @@ -0,0 +1,245 @@ +############################################################################# +## +## Copyright (C) 2020 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +__all__ = ("compileUi", "compileUiDir", "loadUiType", "loadUi", "widgetPluginPath") + +from .Compiler import indenter, compiler + + +_header = """# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '%s' +# +# Created by: PyQt5 UI code generator %s +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +""" + + +_display_code = """ + +if __name__ == "__main__": +\timport sys +\tapp = QtWidgets.QApplication(sys.argv) +\t%(widgetname)s = QtWidgets.%(baseclass)s() +\tui = %(uiclass)s() +\tui.setupUi(%(widgetname)s) +\t%(widgetname)s.show() +\tsys.exit(app.exec_())""" + + +def compileUiDir(dir, recurse=False, map=None, **compileUi_args): + """compileUiDir(dir, recurse=False, map=None, **compileUi_args) + + Creates Python modules from Qt Designer .ui files in a directory or + directory tree. + + dir is the name of the directory to scan for files whose name ends with + '.ui'. By default the generated Python module is created in the same + directory ending with '.py'. + recurse is set if any sub-directories should be scanned. The default is + False. + map is an optional callable that is passed the name of the directory + containing the '.ui' file and the name of the Python module that will be + created. The callable should return a tuple of the name of the directory + in which the Python module will be created and the (possibly modified) + name of the module. The default is None. + compileUi_args are any additional keyword arguments that are passed to + the compileUi() function that is called to create each Python module. + """ + + import os + + # Compile a single .ui file. + def compile_ui(ui_dir, ui_file): + # Ignore if it doesn't seem to be a .ui file. + if ui_file.endswith('.ui'): + py_dir = ui_dir + py_file = ui_file[:-3] + '.py' + + # Allow the caller to change the name of the .py file or generate + # it in a different directory. + if map is not None: + py_dir, py_file = map(py_dir, py_file) + + # Make sure the destination directory exists. + try: + os.makedirs(py_dir) + except: + pass + + ui_path = os.path.join(ui_dir, ui_file) + py_path = os.path.join(py_dir, py_file) + + try: + # Python v3. + py_file = open(py_path, 'w', encoding='utf-8') + except TypeError: + # Python v2. + py_file = open(py_path, 'w') + + try: + compileUi(ui_path, py_file, **compileUi_args) + finally: + py_file.close() + + if recurse: + for root, _, files in os.walk(dir): + for ui in files: + compile_ui(root, ui) + else: + for ui in os.listdir(dir): + if os.path.isfile(os.path.join(dir, ui)): + compile_ui(dir, ui) + + +def compileUi(uifile, pyfile, execute=False, indent=4, from_imports=False, resource_suffix='_rc', import_from='.'): + """compileUi(uifile, pyfile, execute=False, indent=4, from_imports=False, resource_suffix='_rc', import_from='.') + + Creates a Python module from a Qt Designer .ui file. + + uifile is a file name or file-like object containing the .ui file. + pyfile is the file-like object to which the Python code will be written to. + execute is optionally set to generate extra Python code that allows the + code to be run as a standalone application. The default is False. + indent is the optional indentation width using spaces. If it is 0 then a + tab is used. The default is 4. + from_imports is optionally set to generate relative import statements. At + the moment this only applies to the import of resource modules. + resource_suffix is the suffix appended to the basename of any resource file + specified in the .ui file to create the name of the Python module generated + from the resource file by pyrcc4. The default is '_rc', i.e. if the .ui + file specified a resource file called foo.qrc then the corresponding Python + module is foo_rc. + import_from is optionally set to the package used for relative import + statements. The default is ``'.'``. + """ + + from PyQt5.QtCore import PYQT_VERSION_STR + + try: + uifname = uifile.name + except AttributeError: + uifname = uifile + + indenter.indentwidth = indent + + pyfile.write(_header % (uifname, PYQT_VERSION_STR)) + + winfo = compiler.UICompiler().compileUi(uifile, pyfile, from_imports, resource_suffix, import_from) + + if execute: + indenter.write_code(_display_code % winfo) + + +def loadUiType(uifile, from_imports=False, resource_suffix='_rc', import_from='.'): + """loadUiType(uifile, from_imports=False, resource_suffix='_rc', import_from='.') -> (form class, base class) + + Load a Qt Designer .ui file and return the generated form class and the Qt + base class. + + uifile is a file name or file-like object containing the .ui file. + from_imports is optionally set to generate relative import statements. At + the moment this only applies to the import of resource modules. + resource_suffix is the suffix appended to the basename of any resource file + specified in the .ui file to create the name of the Python module generated + from the resource file by pyrcc4. The default is '_rc', i.e. if the .ui + file specified a resource file called foo.qrc then the corresponding Python + module is foo_rc. + import_from is optionally set to the package used for relative import + statements. The default is ``'.'``. + """ + + import sys + + from PyQt5 import QtWidgets + + if sys.hexversion >= 0x03000000: + from .port_v3.string_io import StringIO + else: + from .port_v2.string_io import StringIO + + code_string = StringIO() + winfo = compiler.UICompiler().compileUi(uifile, code_string, from_imports, + resource_suffix, import_from) + + ui_globals = {} + exec(code_string.getvalue(), ui_globals) + + uiclass = winfo["uiclass"] + baseclass = winfo["baseclass"] + + # Assume that the base class is a custom class exposed in the globals. + ui_base = ui_globals.get(baseclass) + if ui_base is None: + # Otherwise assume it is in the QtWidgets module. + ui_base = getattr(QtWidgets, baseclass) + + return (ui_globals[uiclass], ui_base) + + +def loadUi(uifile, baseinstance=None, package='', resource_suffix='_rc'): + """loadUi(uifile, baseinstance=None, package='') -> widget + + Load a Qt Designer .ui file and return an instance of the user interface. + + uifile is a file name or file-like object containing the .ui file. + baseinstance is an optional instance of the Qt base class. If specified + then the user interface is created in it. Otherwise a new instance of the + base class is automatically created. + package is the optional package which is used as the base for any relative + imports of custom widgets. + resource_suffix is the suffix appended to the basename of any resource file + specified in the .ui file to create the name of the Python module generated + from the resource file by pyrcc4. The default is '_rc', i.e. if the .ui + file specified a resource file called foo.qrc then the corresponding Python + module is foo_rc. + """ + + from .Loader.loader import DynamicUILoader + + return DynamicUILoader(package).loadUi(uifile, baseinstance, resource_suffix) + + +# The list of directories that are searched for widget plugins. +from .objcreator import widgetPluginPath diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..ce564f2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/driver.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/driver.cpython-312.pyc new file mode 100644 index 0000000..c8be912 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/driver.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/exceptions.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/exceptions.cpython-312.pyc new file mode 100644 index 0000000..40857d5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/exceptions.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/icon_cache.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/icon_cache.cpython-312.pyc new file mode 100644 index 0000000..57842e6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/icon_cache.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/objcreator.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/objcreator.cpython-312.pyc new file mode 100644 index 0000000..22b7bb9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/objcreator.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/properties.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/properties.cpython-312.pyc new file mode 100644 index 0000000..c4b7ae0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/properties.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/pyuic.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/pyuic.cpython-312.pyc new file mode 100644 index 0000000..be540f8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/pyuic.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/uiparser.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/uiparser.cpython-312.pyc new file mode 100644 index 0000000..82132d1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/__pycache__/uiparser.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/driver.py b/venv/lib/python3.12/site-packages/PyQt5/uic/driver.py new file mode 100644 index 0000000..ec69647 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/driver.py @@ -0,0 +1,149 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +import sys +import logging + +from . import compileUi, loadUi + + +class Driver(object): + """ This encapsulates access to the pyuic functionality so that it can be + called by code that is Python v2/v3 specific. + """ + + LOGGER_NAME = 'PyQt5.uic' + + def __init__(self, opts, ui_file): + """ Initialise the object. opts is the parsed options. ui_file is the + name of the .ui file. + """ + + if opts.debug: + logger = logging.getLogger(self.LOGGER_NAME) + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("%(name)s: %(message)s")) + logger.addHandler(handler) + logger.setLevel(logging.DEBUG) + + self._opts = opts + self._ui_file = ui_file + + def invoke(self): + """ Invoke the action as specified by the parsed options. Returns 0 if + there was no error. + """ + + if self._opts.preview: + return self._preview() + + self._generate() + + return 0 + + def _preview(self): + """ Preview the .ui file. Return the exit status to be passed back to + the parent process. + """ + + from PyQt5 import QtWidgets + + app = QtWidgets.QApplication([self._ui_file]) + widget = loadUi(self._ui_file) + widget.show() + + return app.exec_() + + def _generate(self): + """ Generate the Python code. """ + + needs_close = False + + if sys.hexversion >= 0x03000000: + if self._opts.output == '-': + from io import TextIOWrapper + + pyfile = TextIOWrapper(sys.stdout.buffer, encoding='utf8') + else: + pyfile = open(self._opts.output, 'wt', encoding='utf8') + needs_close = True + else: + if self._opts.output == '-': + pyfile = sys.stdout + else: + pyfile = open(self._opts.output, 'wt') + needs_close = True + + import_from = self._opts.import_from + + if import_from: + from_imports = True + elif self._opts.from_imports: + from_imports = True + import_from = '.' + else: + from_imports = False + + compileUi(self._ui_file, pyfile, self._opts.execute, self._opts.indent, + from_imports, self._opts.resource_suffix, import_from) + + if needs_close: + pyfile.close() + + def on_IOError(self, e): + """ Handle an IOError exception. """ + + sys.stderr.write("Error: %s: \"%s\"\n" % (e.strerror, e.filename)) + + def on_SyntaxError(self, e): + """ Handle a SyntaxError exception. """ + + sys.stderr.write("Error in input file: %s\n" % e) + + def on_NoSuchClassError(self, e): + """ Handle a NoSuchClassError exception. """ + + sys.stderr.write(str(e) + "\n") + + def on_NoSuchWidgetError(self, e): + """ Handle a NoSuchWidgetError exception. """ + + sys.stderr.write(str(e) + "\n") + + def on_Exception(self, e): + """ Handle a generic exception. """ + + if logging.getLogger(self.LOGGER_NAME).level == logging.DEBUG: + import traceback + + traceback.print_exception(*sys.exc_info()) + else: + from PyQt5 import QtCore + + sys.stderr.write("""An unexpected error occurred. +Check that you are using the latest version of PyQt5 and send an error report to +support@riverbankcomputing.com, including the following information: + + * your version of PyQt (%s) + * the UI file that caused this error + * the debug output of pyuic5 (use the -d flag when calling pyuic5) +""" % QtCore.PYQT_VERSION_STR) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/exceptions.py b/venv/lib/python3.12/site-packages/PyQt5/uic/exceptions.py new file mode 100644 index 0000000..3c42750 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/exceptions.py @@ -0,0 +1,53 @@ +############################################################################# +## +## Copyright (C) 2017 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +class NoSuchClassError(Exception): + def __str__(self): + return "Unknown C++ class: %s" % self.args[0] + +class NoSuchWidgetError(Exception): + def __str__(self): + return "Unknown Qt widget: %s" % self.args[0] + +class UnsupportedPropertyError(Exception): + pass + +class WidgetPluginError(Exception): + pass diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/icon_cache.py b/venv/lib/python3.12/site-packages/PyQt5/uic/icon_cache.py new file mode 100644 index 0000000..94c1f99 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/icon_cache.py @@ -0,0 +1,159 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +import os.path + + +class IconCache(object): + """Maintain a cache of icons. If an icon is used more than once by a GUI + then ensure that only one copy is created. + """ + + def __init__(self, object_factory, qtgui_module): + """Initialise the cache.""" + + self._object_factory = object_factory + self._qtgui_module = qtgui_module + self._base_dir = '' + self._cache = [] + + def set_base_dir(self, base_dir): + """ Set the base directory to be used for all relative filenames. """ + + self._base_dir = base_dir + + def get_icon(self, iconset): + """Return an icon described by the given iconset tag.""" + + # Handle a themed icon. + theme = iconset.attrib.get('theme') + if theme is not None: + return self._object_factory.createQObject("QIcon.fromTheme", + 'icon', (self._object_factory.asString(theme), ), + is_attribute=False) + + # Handle an empty iconset property. + if iconset.text is None: + return None + + iset = _IconSet(iconset, self._base_dir) + + try: + idx = self._cache.index(iset) + except ValueError: + idx = -1 + + if idx >= 0: + # Return the icon from the cache. + iset = self._cache[idx] + else: + # Follow uic's naming convention. + name = 'icon' + idx = len(self._cache) + + if idx > 0: + name += str(idx) + + icon = self._object_factory.createQObject("QIcon", name, (), + is_attribute=False) + iset.set_icon(icon, self._qtgui_module) + self._cache.append(iset) + + return iset.icon + + +class _IconSet(object): + """An icon set, ie. the mode and state and the pixmap used for each.""" + + def __init__(self, iconset, base_dir): + """Initialise the icon set from an XML tag.""" + + # Set the pre-Qt v4.4 fallback (ie. with no roles). + self._fallback = self._file_name(iconset.text, base_dir) + self._use_fallback = True + + # Parse the icon set. + self._roles = {} + + for i in iconset: + file_name = i.text + if file_name is not None: + file_name = self._file_name(file_name, base_dir) + + self._roles[i.tag] = file_name + self._use_fallback = False + + # There is no real icon yet. + self.icon = None + + @staticmethod + def _file_name(fname, base_dir): + """ Convert a relative filename if we have a base directory. """ + + fname = fname.replace("\\", "\\\\") + + if base_dir != '' and fname[0] != ':' and not os.path.isabs(fname): + fname = os.path.join(base_dir, fname) + + return fname + + def set_icon(self, icon, qtgui_module): + """Save the icon and set its attributes.""" + + if self._use_fallback: + icon.addFile(self._fallback) + else: + for role, pixmap in self._roles.items(): + if role.endswith("off"): + mode = role[:-3] + state = qtgui_module.QIcon.Off + elif role.endswith("on"): + mode = role[:-2] + state = qtgui_module.QIcon.On + else: + continue + + mode = getattr(qtgui_module.QIcon, mode.title()) + + if pixmap: + icon.addPixmap(qtgui_module.QPixmap(pixmap), mode, state) + else: + icon.addPixmap(qtgui_module.QPixmap(), mode, state) + + self.icon = icon + + def __eq__(self, other): + """Compare two icon sets for equality.""" + + if not isinstance(other, type(self)): + return NotImplemented + + if self._use_fallback: + if other._use_fallback: + return self._fallback == other._fallback + + return False + + if other._use_fallback: + return False + + return self._roles == other._roles diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/objcreator.py b/venv/lib/python3.12/site-packages/PyQt5/uic/objcreator.py new file mode 100644 index 0000000..0ae7566 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/objcreator.py @@ -0,0 +1,163 @@ +############################################################################# +## +## Copyright (C) 2015 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +import os.path + +from .exceptions import NoSuchWidgetError, WidgetPluginError + + +# The list of directories that are searched for widget plugins. This is +# exposed as part of the API. +widgetPluginPath = [os.path.join(os.path.dirname(__file__), 'widget-plugins')] + + +MATCH = True +NO_MATCH = False +MODULE = 0 +CW_FILTER = 1 + + +class QObjectCreator(object): + def __init__(self, creatorPolicy): + self._cpolicy = creatorPolicy + + self._cwFilters = [] + self._modules = self._cpolicy.createQtGuiWidgetsWrappers() + + # Get the optional plugins. + for plugindir in widgetPluginPath: + try: + plugins = os.listdir(plugindir) + except: + plugins = [] + + for filename in plugins: + if not filename.endswith('.py'): + continue + + filename = os.path.join(plugindir, filename) + + plugin_globals = { + "MODULE": MODULE, + "CW_FILTER": CW_FILTER, + "MATCH": MATCH, + "NO_MATCH": NO_MATCH} + + plugin_locals = {} + + if self.load_plugin(filename, plugin_globals, plugin_locals): + pluginType = plugin_locals["pluginType"] + if pluginType == MODULE: + modinfo = plugin_locals["moduleInformation"]() + self._modules.append(self._cpolicy.createModuleWrapper(*modinfo)) + elif pluginType == CW_FILTER: + self._cwFilters.append(plugin_locals["getFilter"]()) + else: + raise WidgetPluginError("Unknown plugin type of %s" % filename) + + self._customWidgets = self._cpolicy.createCustomWidgetLoader() + self._modules.append(self._customWidgets) + + def createQObject(self, classname, *args, **kwargs): + # Handle regular and custom widgets. + factory = self.findQObjectType(classname) + + if factory is None: + # Handle scoped names, typically static factory methods. + parts = classname.split('.') + + if len(parts) > 1: + factory = self.findQObjectType(parts[0]) + + if factory is not None: + for part in parts[1:]: + factory = getattr(factory, part, None) + if factory is None: + break + + if factory is None: + raise NoSuchWidgetError(classname) + + return self._cpolicy.instantiate(factory, *args, **kwargs) + + def invoke(self, rname, method, args=()): + return self._cpolicy.invoke(rname, method, args) + + def findQObjectType(self, classname): + for module in self._modules: + w = module.search(classname) + if w is not None: + return w + return None + + def getSlot(self, obj, slotname): + return self._cpolicy.getSlot(obj, slotname) + + def asString(self, s): + return self._cpolicy.asString(s) + + def addCustomWidget(self, widgetClass, baseClass, module): + for cwFilter in self._cwFilters: + match, result = cwFilter(widgetClass, baseClass, module) + if match: + widgetClass, baseClass, module = result + break + + self._customWidgets.addCustomWidget(widgetClass, baseClass, module) + + @staticmethod + def load_plugin(filename, plugin_globals, plugin_locals): + """ Load the plugin from the given file. Return True if the plugin was + loaded, or False if it wanted to be ignored. Raise an exception if + there was an error. + """ + + plugin = open(filename) + + try: + exec(plugin.read(), plugin_globals, plugin_locals) + except ImportError: + return False + except Exception as e: + raise WidgetPluginError("%s: %s" % (e.__class__, str(e))) + finally: + plugin.close() + + return True diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__init__.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__init__.py new file mode 100644 index 0000000..d8ca87f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__init__.py @@ -0,0 +1,20 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..d44bb4a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/as_string.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/as_string.cpython-312.pyc new file mode 100644 index 0000000..851a5fa Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/as_string.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/ascii_upper.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/ascii_upper.cpython-312.pyc new file mode 100644 index 0000000..0dcb5a7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/ascii_upper.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/proxy_base.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/proxy_base.cpython-312.pyc new file mode 100644 index 0000000..1069f96 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/proxy_base.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/string_io.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/string_io.cpython-312.pyc new file mode 100644 index 0000000..e643d70 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/__pycache__/string_io.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/as_string.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/as_string.py new file mode 100644 index 0000000..8136b5b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/as_string.py @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +import re + + +def as_string(obj): + if isinstance(obj, basestring): + return '"' + _escape(obj.encode('UTF-8')) + '"' + + return str(obj) + + +_esc_regex = re.compile(r"(\"|\'|\\)") + +def _escape(text): + # This escapes any escaped single or double quote or backslash. + x = _esc_regex.sub(r"\\\1", text) + + # This replaces any '\n' with an escaped version and a real line break. + return re.sub(r'\n', r'\\n"\n"', x) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/ascii_upper.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/ascii_upper.py new file mode 100644 index 0000000..4d1be60 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/ascii_upper.py @@ -0,0 +1,33 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +import string + + +# A translation table for converting ASCII lower case to upper case. +_ascii_trans_table = string.maketrans(string.ascii_lowercase, + string.ascii_uppercase) + + +# Convert a string to ASCII upper case irrespective of the current locale. +def ascii_upper(s): + return s.translate(_ascii_trans_table) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/proxy_base.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/proxy_base.py new file mode 100644 index 0000000..ba6edf0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/proxy_base.py @@ -0,0 +1,31 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +from ..Compiler.proxy_metaclass import ProxyMetaclass + + +class ProxyBase(object): + """ A base class for proxies using Python v2 syntax for setting the + meta-class. + """ + + __metaclass__ = ProxyMetaclass diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/string_io.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/string_io.py new file mode 100644 index 0000000..497a0bc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v2/string_io.py @@ -0,0 +1,27 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# Import the StringIO object. +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__init__.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__init__.py new file mode 100644 index 0000000..d8ca87f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__init__.py @@ -0,0 +1,20 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..4e6fa54 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/as_string.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/as_string.cpython-312.pyc new file mode 100644 index 0000000..b68821d Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/as_string.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/ascii_upper.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/ascii_upper.cpython-312.pyc new file mode 100644 index 0000000..5cc712a Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/ascii_upper.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/proxy_base.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/proxy_base.cpython-312.pyc new file mode 100644 index 0000000..37c4d51 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/proxy_base.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/string_io.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/string_io.cpython-312.pyc new file mode 100644 index 0000000..1297889 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/__pycache__/string_io.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/as_string.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/as_string.py new file mode 100644 index 0000000..53251b3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/as_string.py @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +import re + + +def as_string(obj): + if isinstance(obj, str): + return '"' + _escape(obj) + '"' + + return str(obj) + + +_esc_regex = re.compile(r"(\"|\'|\\)") + +def _escape(text): + # This escapes any escaped single or double quote or backslash. + x = _esc_regex.sub(r"\\\1", text) + + # This replaces any '\n' with an escaped version and a real line break. + return re.sub(r'\n', r'\\n"\n"', x) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/ascii_upper.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/ascii_upper.py new file mode 100644 index 0000000..cc78fbe --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/ascii_upper.py @@ -0,0 +1,30 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# A translation table for converting ASCII lower case to upper case. +_ascii_trans_table = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', + b'ABCDEFGHIJKLMNOPQRSTUVWXYZ') + + +# Convert a string to ASCII upper case irrespective of the current locale. +def ascii_upper(s): + return s.translate(_ascii_trans_table) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/proxy_base.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/proxy_base.py new file mode 100644 index 0000000..d5344b2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/proxy_base.py @@ -0,0 +1,29 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +from ..Compiler.proxy_metaclass import ProxyMetaclass + + +class ProxyBase(metaclass=ProxyMetaclass): + """ A base class for proxies using Python v3 syntax for setting the + meta-class. + """ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/string_io.py b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/string_io.py new file mode 100644 index 0000000..3a5ab5f --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/port_v3/string_io.py @@ -0,0 +1,24 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# Import the StringIO object. +from io import StringIO diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/properties.py b/venv/lib/python3.12/site-packages/PyQt5/uic/properties.py new file mode 100644 index 0000000..88ddb73 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/properties.py @@ -0,0 +1,523 @@ +############################################################################# +## +## Copyright (C) 2019 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +import logging +import os.path +import sys + +from .exceptions import NoSuchClassError, UnsupportedPropertyError +from .icon_cache import IconCache + +if sys.hexversion >= 0x03000000: + from .port_v3.ascii_upper import ascii_upper +else: + from .port_v2.ascii_upper import ascii_upper + + +logger = logging.getLogger(__name__) +DEBUG = logger.debug + + +QtCore = None +QtGui = None +QtWidgets = None + + +def int_list(prop): + return [int(child.text) for child in prop] + +def float_list(prop): + return [float(child.text) for child in prop] + +bool_ = lambda v: v == "true" + +def qfont_enum(v): + return getattr(QtGui.QFont, v) + +def needsWidget(func): + func.needsWidget = True + return func + + +class Properties(object): + def __init__(self, factory, qtcore_module, qtgui_module, qtwidgets_module): + self.factory = factory + + global QtCore, QtGui, QtWidgets + QtCore = qtcore_module + QtGui = qtgui_module + QtWidgets = qtwidgets_module + + self._base_dir = '' + + self.reset() + + def set_base_dir(self, base_dir): + """ Set the base directory to be used for all relative filenames. """ + + self._base_dir = base_dir + self.icon_cache.set_base_dir(base_dir) + + def reset(self): + self.buddies = [] + self.delayed_props = [] + self.icon_cache = IconCache(self.factory, QtGui) + + def _pyEnumMember(self, cpp_name): + try: + prefix, membername = cpp_name.split("::") + except ValueError: + prefix = 'Qt' + membername = cpp_name + + if prefix == 'Qt': + return getattr(QtCore.Qt, membername) + + scope = self.factory.findQObjectType(prefix) + if scope is None: + raise NoSuchClassError(prefix) + + return getattr(scope, membername) + + def _set(self, prop): + expr = [self._pyEnumMember(v) for v in prop.text.split('|')] + + value = expr[0] + for v in expr[1:]: + value |= v + + return value + + def _enum(self, prop): + return self._pyEnumMember(prop.text) + + def _number(self, prop): + return int(prop.text) + + _UInt = _uInt = _longLong = _uLongLong = _number + + def _double(self, prop): + return float(prop.text) + + def _bool(self, prop): + return prop.text == 'true' + + def _stringlist(self, prop): + return [self._string(p, notr='true') for p in prop] + + def _string(self, prop, notr=None): + text = prop.text + + if text is None: + return "" + + if prop.get('notr', notr) == 'true': + return text + + disambig = prop.get('comment') + + return QtWidgets.QApplication.translate(self.uiname, text, disambig) + + _char = _string + + def _cstring(self, prop): + return str(prop.text) + + def _color(self, prop): + args = int_list(prop) + + # Handle the optional alpha component. + alpha = int(prop.get("alpha", "255")) + + if alpha != 255: + args.append(alpha) + + return QtGui.QColor(*args) + + def _point(self, prop): + return QtCore.QPoint(*int_list(prop)) + + def _pointf(self, prop): + return QtCore.QPointF(*float_list(prop)) + + def _rect(self, prop): + return QtCore.QRect(*int_list(prop)) + + def _rectf(self, prop): + return QtCore.QRectF(*float_list(prop)) + + def _size(self, prop): + return QtCore.QSize(*int_list(prop)) + + def _sizef(self, prop): + return QtCore.QSizeF(*float_list(prop)) + + def _pixmap(self, prop): + if prop.text: + fname = prop.text.replace("\\", "\\\\") + if self._base_dir != '' and fname[0] != ':' and not os.path.isabs(fname): + fname = os.path.join(self._base_dir, fname) + + return QtGui.QPixmap(fname) + + # Don't bother to set the property if the pixmap is empty. + return None + + def _iconset(self, prop): + return self.icon_cache.get_icon(prop) + + def _url(self, prop): + return QtCore.QUrl(prop[0].text) + + def _locale(self, prop): + lang = getattr(QtCore.QLocale, prop.attrib['language']) + country = getattr(QtCore.QLocale, prop.attrib['country']) + return QtCore.QLocale(lang, country) + + def _date(self, prop): + return QtCore.QDate(*int_list(prop)) + + def _datetime(self, prop): + args = int_list(prop) + return QtCore.QDateTime(QtCore.QDate(*args[-3:]), QtCore.QTime(*args[:-3])) + + def _time(self, prop): + return QtCore.QTime(*int_list(prop)) + + def _gradient(self, prop): + name = 'gradient' + + # Create the specific gradient. + gtype = prop.get('type', '') + + if gtype == 'LinearGradient': + startx = float(prop.get('startx')) + starty = float(prop.get('starty')) + endx = float(prop.get('endx')) + endy = float(prop.get('endy')) + gradient = self.factory.createQObject('QLinearGradient', name, + (startx, starty, endx, endy), is_attribute=False) + + elif gtype == 'ConicalGradient': + centralx = float(prop.get('centralx')) + centraly = float(prop.get('centraly')) + angle = float(prop.get('angle')) + gradient = self.factory.createQObject('QConicalGradient', name, + (centralx, centraly, angle), is_attribute=False) + + elif gtype == 'RadialGradient': + centralx = float(prop.get('centralx')) + centraly = float(prop.get('centraly')) + radius = float(prop.get('radius')) + focalx = float(prop.get('focalx')) + focaly = float(prop.get('focaly')) + gradient = self.factory.createQObject('QRadialGradient', name, + (centralx, centraly, radius, focalx, focaly), + is_attribute=False) + + else: + raise UnsupportedPropertyError(prop.tag) + + # Set the common values. + spread = prop.get('spread') + if spread: + gradient.setSpread(getattr(QtGui.QGradient, spread)) + + cmode = prop.get('coordinatemode') + if cmode: + gradient.setCoordinateMode(getattr(QtGui.QGradient, cmode)) + + # Get the gradient stops. + for gstop in prop: + if gstop.tag != 'gradientstop': + raise UnsupportedPropertyError(gstop.tag) + + position = float(gstop.get('position')) + color = self._color(gstop[0]) + + gradient.setColorAt(position, color) + + return gradient + + def _palette(self, prop): + palette = self.factory.createQObject("QPalette", "palette", (), + is_attribute=False) + + for palette_elem in prop: + sub_palette = getattr(QtGui.QPalette, palette_elem.tag.title()) + for role, color in enumerate(palette_elem): + if color.tag == 'color': + # Handle simple colour descriptions where the role is + # implied by the colour's position. + palette.setColor(sub_palette, + QtGui.QPalette.ColorRole(role), self._color(color)) + elif color.tag == 'colorrole': + role = getattr(QtGui.QPalette, color.get('role')) + brush = self._brush(color[0]) + palette.setBrush(sub_palette, role, brush) + else: + raise UnsupportedPropertyError(color.tag) + + return palette + + def _brush(self, prop): + brushstyle = prop.get('brushstyle') + + if brushstyle in ('LinearGradientPattern', 'ConicalGradientPattern', 'RadialGradientPattern'): + gradient = self._gradient(prop[0]) + brush = self.factory.createQObject("QBrush", "brush", (gradient, ), + is_attribute=False) + else: + color = self._color(prop[0]) + brush = self.factory.createQObject("QBrush", "brush", (color, ), + is_attribute=False) + + brushstyle = getattr(QtCore.Qt, brushstyle) + brush.setStyle(brushstyle) + + return brush + + #@needsWidget + def _sizepolicy(self, prop, widget): + values = [int(child.text) for child in prop] + + if len(values) == 2: + # Qt v4.3.0 and later. + horstretch, verstretch = values + hsizetype = getattr(QtWidgets.QSizePolicy, prop.get('hsizetype')) + vsizetype = getattr(QtWidgets.QSizePolicy, prop.get('vsizetype')) + else: + hsizetype, vsizetype, horstretch, verstretch = values + hsizetype = QtWidgets.QSizePolicy.Policy(hsizetype) + vsizetype = QtWidgets.QSizePolicy.Policy(vsizetype) + + sizePolicy = self.factory.createQObject('QSizePolicy', 'sizePolicy', + (hsizetype, vsizetype), is_attribute=False) + sizePolicy.setHorizontalStretch(horstretch) + sizePolicy.setVerticalStretch(verstretch) + sizePolicy.setHeightForWidth(widget.sizePolicy().hasHeightForWidth()) + return sizePolicy + _sizepolicy = needsWidget(_sizepolicy) + + # font needs special handling/conversion of all child elements. + _font_attributes = (("Family", lambda s: s), + ("PointSize", int), + ("Bold", bool_), + ("Italic", bool_), + ("Underline", bool_), + ("Weight", int), + ("StrikeOut", bool_), + ("Kerning", bool_), + ("StyleStrategy", qfont_enum)) + + def _font(self, prop): + newfont = self.factory.createQObject("QFont", "font", (), + is_attribute = False) + for attr, converter in self._font_attributes: + v = prop.findtext("./%s" % (attr.lower(),)) + if v is None: + continue + + getattr(newfont, "set%s" % (attr,))(converter(v)) + return newfont + + def _cursor(self, prop): + return QtGui.QCursor(QtCore.Qt.CursorShape(int(prop.text))) + + def _cursorShape(self, prop): + return QtGui.QCursor(getattr(QtCore.Qt, prop.text)) + + def convert(self, prop, widget=None): + try: + func = getattr(self, "_" + prop[0].tag) + except AttributeError: + raise UnsupportedPropertyError(prop[0].tag) + else: + args = {} + if getattr(func, "needsWidget", False): + assert widget is not None + args["widget"] = widget + + return func(prop[0], **args) + + + def _getChild(self, elem_tag, elem, name, default=None): + for prop in elem.findall(elem_tag): + if prop.attrib["name"] == name: + return self.convert(prop) + else: + return default + + def getProperty(self, elem, name, default=None): + return self._getChild("property", elem, name, default) + + def getAttribute(self, elem, name, default=None): + return self._getChild("attribute", elem, name, default) + + def setProperties(self, widget, elem): + # Lines are sunken unless the frame shadow is explicitly set. + set_sunken = (elem.attrib.get('class') == 'Line') + + for prop in elem.findall('property'): + prop_name = prop.attrib['name'] + DEBUG("setting property %s" % (prop_name,)) + + if prop_name == 'frameShadow': + set_sunken = False + + try: + stdset = bool(int(prop.attrib['stdset'])) + except KeyError: + stdset = True + + if not stdset: + self._setViaSetProperty(widget, prop) + elif hasattr(self, prop_name): + getattr(self, prop_name)(widget, prop) + else: + prop_value = self.convert(prop, widget) + if prop_value is not None: + getattr(widget, 'set%s%s' % (ascii_upper(prop_name[0]), prop_name[1:]))(prop_value) + + if set_sunken: + widget.setFrameShadow(QtWidgets.QFrame.Sunken) + + # SPECIAL PROPERTIES + # If a property has a well-known value type but needs special, + # context-dependent handling, the default behaviour can be overridden here. + + # Delayed properties will be set after the whole widget tree has been + # populated. + def _delayed_property(self, widget, prop): + prop_value = self.convert(prop) + if prop_value is not None: + prop_name = prop.attrib["name"] + self.delayed_props.append((widget, False, + 'set%s%s' % (ascii_upper(prop_name[0]), prop_name[1:]), + prop_value)) + + # These properties will be set with a widget.setProperty call rather than + # calling the set function. + def _setViaSetProperty(self, widget, prop): + prop_value = self.convert(prop, widget) + if prop_value is not None: + prop_name = prop.attrib['name'] + + # This appears to be a Designer/uic hack where stdset=0 means that + # the viewport should be used. + if prop[0].tag == 'cursorShape': + widget.viewport().setProperty(prop_name, prop_value) + else: + widget.setProperty(prop_name, prop_value) + + # Ignore the property. + def _ignore(self, widget, prop): + pass + + # Define properties that use the canned handlers. + currentIndex = _delayed_property + currentRow = _delayed_property + + showDropIndicator = _setViaSetProperty + intValue = _setViaSetProperty + value = _setViaSetProperty + + objectName = _ignore + margin = _ignore + leftMargin = _ignore + topMargin = _ignore + rightMargin = _ignore + bottomMargin = _ignore + spacing = _ignore + horizontalSpacing = _ignore + verticalSpacing = _ignore + + # tabSpacing is actually the spacing property of the widget's layout. + def tabSpacing(self, widget, prop): + prop_value = self.convert(prop) + if prop_value is not None: + self.delayed_props.append((widget, True, 'setSpacing', prop_value)) + + # buddy setting has to be done after the whole widget tree has been + # populated. We can't use delay here because we cannot get the actual + # buddy yet. + def buddy(self, widget, prop): + buddy_name = prop[0].text + if buddy_name: + self.buddies.append((widget, buddy_name)) + + # geometry is handled specially if set on the toplevel widget. + def geometry(self, widget, prop): + if widget.objectName() == self.uiname: + geom = int_list(prop[0]) + widget.resize(geom[2], geom[3]) + else: + widget.setGeometry(self._rect(prop[0])) + + def orientation(self, widget, prop): + # If the class is a QFrame, it's a line. + if widget.metaObject().className() == 'QFrame': + widget.setFrameShape( + {'Qt::Horizontal': QtWidgets.QFrame.HLine, + 'Qt::Vertical' : QtWidgets.QFrame.VLine}[prop[0].text]) + else: + widget.setOrientation(self._enum(prop[0])) + + # The isWrapping attribute of QListView is named inconsistently, it should + # be wrapping. + def isWrapping(self, widget, prop): + widget.setWrapping(self.convert(prop)) + + # This is a pseudo-property injected to deal with margins. + def pyuicMargins(self, widget, prop): + widget.setContentsMargins(*int_list(prop)) + + # This is a pseudo-property injected to deal with spacing. + def pyuicSpacing(self, widget, prop): + horiz, vert = int_list(prop) + + if horiz == vert: + widget.setSpacing(horiz) + else: + if horiz >= 0: + widget.setHorizontalSpacing(horiz) + + if vert >= 0: + widget.setVerticalSpacing(vert) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/pyuic.py b/venv/lib/python3.12/site-packages/PyQt5/uic/pyuic.py new file mode 100644 index 0000000..0b735ad --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/pyuic.py @@ -0,0 +1,96 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +import sys +import optparse + +from PyQt5 import QtCore + +from .driver import Driver +from .exceptions import NoSuchClassError, NoSuchWidgetError + + +Version = "Python User Interface Compiler %s for Qt version %s" % (QtCore.PYQT_VERSION_STR, QtCore.QT_VERSION_STR) + + +def main(): + parser = optparse.OptionParser(usage="pyuic5 [options] ", + version=Version) + parser.add_option("-p", "--preview", dest="preview", action="store_true", + default=False, + help="show a preview of the UI instead of generating code") + parser.add_option("-o", "--output", dest="output", default="-", + metavar="FILE", + help="write generated code to FILE instead of stdout") + parser.add_option("-x", "--execute", dest="execute", action="store_true", + default=False, + help="generate extra code to test and display the class") + parser.add_option("-d", "--debug", dest="debug", action="store_true", + default=False, help="show debug output") + parser.add_option("-i", "--indent", dest="indent", action="store", + type="int", default=4, metavar="N", + help="set indent width to N spaces, tab if N is 0 [default: 4]") + + g = optparse.OptionGroup(parser, title="Code generation options") + g.add_option("--import-from", dest="import_from", metavar="PACKAGE", + help="generate imports of pyrcc5 generated modules in the style 'from PACKAGE import ...'") + g.add_option("--from-imports", dest="from_imports", action="store_true", + default=False, help="the equivalent of '--import-from=.'") + g.add_option("--resource-suffix", dest="resource_suffix", action="store", + type="string", default="_rc", metavar="SUFFIX", + help="append SUFFIX to the basename of resource files [default: _rc]") + parser.add_option_group(g) + + opts, args = parser.parse_args() + + if len(args) != 1: + sys.stderr.write("Error: one input ui-file must be specified\n") + sys.exit(1) + + # Invoke the appropriate driver. + driver = Driver(opts, args[0]) + + exit_status = 1 + + try: + exit_status = driver.invoke() + + except IOError as e: + driver.on_IOError(e) + + except SyntaxError as e: + driver.on_SyntaxError(e) + + except NoSuchClassError as e: + driver.on_NoSuchClassError(e) + + except NoSuchWidgetError as e: + driver.on_NoSuchWidgetError(e) + + except Exception as e: + driver.on_Exception(e) + + sys.exit(exit_status) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/uiparser.py b/venv/lib/python3.12/site-packages/PyQt5/uic/uiparser.py new file mode 100644 index 0000000..5e250dc --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/uiparser.py @@ -0,0 +1,1052 @@ +############################################################################# +## +## Copyright (C) 2019 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +import sys +import logging +import os +import re +from xml.etree.ElementTree import parse, SubElement + +from .objcreator import QObjectCreator +from .properties import Properties + + +logger = logging.getLogger(__name__) +DEBUG = logger.debug + +QtCore = None +QtWidgets = None + + +def _parse_alignment(alignment): + """ Convert a C++ alignment to the corresponding flags. """ + + align_flags = None + for qt_align in alignment.split('|'): + _, qt_align = qt_align.split('::') + align = getattr(QtCore.Qt, qt_align) + + if align_flags is None: + align_flags = align + else: + align_flags |= align + + return align_flags + + +def _layout_position(elem): + """ Return either (), (0, alignment), (row, column, rowspan, colspan) or + (row, column, rowspan, colspan, alignment) depending on the type of layout + and its configuration. The result will be suitable to use as arguments to + the layout. + """ + + row = elem.attrib.get('row') + column = elem.attrib.get('column') + alignment = elem.attrib.get('alignment') + + # See if it is a box layout. + if row is None or column is None: + if alignment is None: + return () + + return (0, _parse_alignment(alignment)) + + # It must be a grid or a form layout. + row = int(row) + column = int(column) + + rowspan = int(elem.attrib.get('rowspan', 1)) + colspan = int(elem.attrib.get('colspan', 1)) + + if alignment is None: + return (row, column, rowspan, colspan) + + return (row, column, rowspan, colspan, _parse_alignment(alignment)) + + +class WidgetStack(list): + topwidget = None + def push(self, item): + DEBUG("push %s %s" % (item.metaObject().className(), + item.objectName())) + self.append(item) + if isinstance(item, QtWidgets.QWidget): + self.topwidget = item + + def popLayout(self): + layout = list.pop(self) + DEBUG("pop layout %s %s" % (layout.metaObject().className(), + layout.objectName())) + return layout + + def popWidget(self): + widget = list.pop(self) + DEBUG("pop widget %s %s" % (widget.metaObject().className(), + widget.objectName())) + for item in reversed(self): + if isinstance(item, QtWidgets.QWidget): + self.topwidget = item + break + else: + self.topwidget = None + DEBUG("new topwidget %s" % (self.topwidget,)) + return widget + + def peek(self): + return self[-1] + + def topIsLayout(self): + return isinstance(self[-1], QtWidgets.QLayout) + + def topIsLayoutWidget(self): + # A plain QWidget is a layout widget unless it's parent is a + # QMainWindow or a container widget. Note that the corresponding uic + # test is a little more complicated as it involves features not + # supported by pyuic. + + if type(self[-1]) is not QtWidgets.QWidget: + return False + + if len(self) < 2: + return False + + parent = self[-2] + + return isinstance(parent, QtWidgets.QWidget) and type(parent) not in ( + QtWidgets.QMainWindow, + QtWidgets.QStackedWidget, + QtWidgets.QToolBox, + QtWidgets.QTabWidget, + QtWidgets.QScrollArea, + QtWidgets.QMdiArea, + QtWidgets.QWizard, + QtWidgets.QDockWidget) + + +class ButtonGroup(object): + """ Encapsulate the configuration of a button group and its implementation. + """ + + def __init__(self): + """ Initialise the button group. """ + + self.exclusive = True + self.object = None + + +class UIParser(object): + def __init__(self, qtcore_module, qtgui_module, qtwidgets_module, creatorPolicy): + self.factory = QObjectCreator(creatorPolicy) + self.wprops = Properties(self.factory, qtcore_module, qtgui_module, + qtwidgets_module) + + global QtCore, QtWidgets + QtCore = qtcore_module + QtWidgets = qtwidgets_module + + self.reset() + + def uniqueName(self, name): + """UIParser.uniqueName(string) -> string + + Create a unique name from a string. + >>> p = UIParser(QtCore, QtGui, QtWidgets) + >>> p.uniqueName("foo") + 'foo' + >>> p.uniqueName("foo") + 'foo1' + """ + try: + suffix = self.name_suffixes[name] + except KeyError: + self.name_suffixes[name] = 0 + return name + + suffix += 1 + self.name_suffixes[name] = suffix + + return "%s%i" % (name, suffix) + + def reset(self): + try: self.wprops.reset() + except AttributeError: pass + self.toplevelWidget = None + self.stack = WidgetStack() + self.name_suffixes = {} + self.defaults = {'spacing': -1, 'margin': -1} + self.actions = [] + self.currentActionGroup = None + self.resources = [] + self.button_groups = {} + + def setupObject(self, clsname, parent, branch, is_attribute=True): + name = self.uniqueName(branch.attrib.get('name') or clsname[1:].lower()) + + if parent is None: + args = () + else: + args = (parent, ) + + obj = self.factory.createQObject(clsname, name, args, is_attribute) + + self.wprops.setProperties(obj, branch) + obj.setObjectName(name) + + if is_attribute: + setattr(self.toplevelWidget, name, obj) + + return obj + + def getProperty(self, elem, name): + for prop in elem.findall('property'): + if prop.attrib['name'] == name: + return prop + + return None + + def createWidget(self, elem): + self.column_counter = 0 + self.row_counter = 0 + self.item_nr = 0 + self.itemstack = [] + self.sorting_enabled = None + + widget_class = elem.attrib['class'].replace('::', '.') + if widget_class == 'Line': + widget_class = 'QFrame' + + # Ignore the parent if it is a container. + parent = self.stack.topwidget + if isinstance(parent, (QtWidgets.QDockWidget, QtWidgets.QMdiArea, + QtWidgets.QScrollArea, QtWidgets.QStackedWidget, + QtWidgets.QToolBox, QtWidgets.QTabWidget, + QtWidgets.QWizard)): + parent = None + + self.stack.push(self.setupObject(widget_class, parent, elem)) + + if isinstance(self.stack.topwidget, QtWidgets.QTableWidget): + if self.getProperty(elem, 'columnCount') is None: + self.stack.topwidget.setColumnCount(len(elem.findall("column"))) + + if self.getProperty(elem, 'rowCount') is None: + self.stack.topwidget.setRowCount(len(elem.findall("row"))) + + self.traverseWidgetTree(elem) + widget = self.stack.popWidget() + + if isinstance(widget, QtWidgets.QTreeView): + self.handleHeaderView(elem, "header", widget.header()) + + elif isinstance(widget, QtWidgets.QTableView): + self.handleHeaderView(elem, "horizontalHeader", + widget.horizontalHeader()) + self.handleHeaderView(elem, "verticalHeader", + widget.verticalHeader()) + + elif isinstance(widget, QtWidgets.QAbstractButton): + bg_i18n = self.wprops.getAttribute(elem, "buttonGroup") + if bg_i18n is not None: + # This should be handled properly in case the problem arises + # elsewhere as well. + try: + # We are compiling the .ui file. + bg_name = bg_i18n.string + except AttributeError: + # We are loading the .ui file. + bg_name = bg_i18n + + # Designer allows the creation of .ui files without explicit + # button groups, even though uic then issues warnings. We + # handle it in two stages by first making sure it has a name + # and then making sure one exists with that name. + if not bg_name: + bg_name = 'buttonGroup' + + try: + bg = self.button_groups[bg_name] + except KeyError: + bg = self.button_groups[bg_name] = ButtonGroup() + + if bg.object is None: + bg.object = self.factory.createQObject("QButtonGroup", + bg_name, (self.toplevelWidget, )) + setattr(self.toplevelWidget, bg_name, bg.object) + + bg.object.setObjectName(bg_name) + + if not bg.exclusive: + bg.object.setExclusive(False) + + bg.object.addButton(widget) + + if self.sorting_enabled is not None: + widget.setSortingEnabled(self.sorting_enabled) + self.sorting_enabled = None + + if self.stack.topIsLayout(): + lay = self.stack.peek() + lp = elem.attrib['layout-position'] + + if isinstance(lay, QtWidgets.QFormLayout): + lay.setWidget(lp[0], self._form_layout_role(lp), widget) + else: + lay.addWidget(widget, *lp) + + topwidget = self.stack.topwidget + + if isinstance(topwidget, QtWidgets.QToolBox): + icon = self.wprops.getAttribute(elem, "icon") + if icon is not None: + topwidget.addItem(widget, icon, self.wprops.getAttribute(elem, "label")) + else: + topwidget.addItem(widget, self.wprops.getAttribute(elem, "label")) + + tooltip = self.wprops.getAttribute(elem, "toolTip") + if tooltip is not None: + topwidget.setItemToolTip(topwidget.indexOf(widget), tooltip) + + elif isinstance(topwidget, QtWidgets.QTabWidget): + icon = self.wprops.getAttribute(elem, "icon") + if icon is not None: + topwidget.addTab(widget, icon, self.wprops.getAttribute(elem, "title")) + else: + topwidget.addTab(widget, self.wprops.getAttribute(elem, "title")) + + tooltip = self.wprops.getAttribute(elem, "toolTip") + if tooltip is not None: + topwidget.setTabToolTip(topwidget.indexOf(widget), tooltip) + + elif isinstance(topwidget, QtWidgets.QWizard): + topwidget.addPage(widget) + + elif isinstance(topwidget, QtWidgets.QStackedWidget): + topwidget.addWidget(widget) + + elif isinstance(topwidget, (QtWidgets.QDockWidget, QtWidgets.QScrollArea)): + topwidget.setWidget(widget) + + elif isinstance(topwidget, QtWidgets.QMainWindow): + if type(widget) == QtWidgets.QWidget: + topwidget.setCentralWidget(widget) + elif isinstance(widget, QtWidgets.QToolBar): + tbArea = self.wprops.getAttribute(elem, "toolBarArea") + + if tbArea is None: + topwidget.addToolBar(widget) + else: + topwidget.addToolBar(tbArea, widget) + + tbBreak = self.wprops.getAttribute(elem, "toolBarBreak") + + if tbBreak: + topwidget.insertToolBarBreak(widget) + + elif isinstance(widget, QtWidgets.QMenuBar): + topwidget.setMenuBar(widget) + elif isinstance(widget, QtWidgets.QStatusBar): + topwidget.setStatusBar(widget) + elif isinstance(widget, QtWidgets.QDockWidget): + dwArea = self.wprops.getAttribute(elem, "dockWidgetArea") + topwidget.addDockWidget(QtCore.Qt.DockWidgetArea(dwArea), + widget) + + def handleHeaderView(self, elem, name, header): + value = self.wprops.getAttribute(elem, name + "Visible") + if value is not None: + header.setVisible(value) + + value = self.wprops.getAttribute(elem, name + "CascadingSectionResizes") + if value is not None: + header.setCascadingSectionResizes(value) + + value = self.wprops.getAttribute(elem, name + "DefaultSectionSize") + if value is not None: + header.setDefaultSectionSize(value) + + value = self.wprops.getAttribute(elem, name + "HighlightSections") + if value is not None: + header.setHighlightSections(value) + + value = self.wprops.getAttribute(elem, name + "MinimumSectionSize") + if value is not None: + header.setMinimumSectionSize(value) + + value = self.wprops.getAttribute(elem, name + "ShowSortIndicator") + if value is not None: + header.setSortIndicatorShown(value) + + value = self.wprops.getAttribute(elem, name + "StretchLastSection") + if value is not None: + header.setStretchLastSection(value) + + def createSpacer(self, elem): + width = elem.findtext("property/size/width") + height = elem.findtext("property/size/height") + + if width is None or height is None: + size_args = () + else: + size_args = (int(width), int(height)) + + sizeType = self.wprops.getProperty(elem, "sizeType", + QtWidgets.QSizePolicy.Expanding) + + policy = (QtWidgets.QSizePolicy.Minimum, sizeType) + + if self.wprops.getProperty(elem, "orientation") == QtCore.Qt.Horizontal: + policy = policy[1], policy[0] + + spacer = self.factory.createQObject("QSpacerItem", + self.uniqueName("spacerItem"), size_args + policy, + is_attribute=False) + + if self.stack.topIsLayout(): + lay = self.stack.peek() + lp = elem.attrib['layout-position'] + + if isinstance(lay, QtWidgets.QFormLayout): + lay.setItem(lp[0], self._form_layout_role(lp), spacer) + else: + lay.addItem(spacer, *lp) + + def createLayout(self, elem): + # We use an internal property to handle margins which will use separate + # left, top, right and bottom margins if they are found to be + # different. The following will select, in order of preference, + # separate margins, the same margin in all directions, and the default + # margin. + margin = -1 if self.stack.topIsLayout() else self.defaults['margin'] + margin = self.wprops.getProperty(elem, 'margin', margin) + left = self.wprops.getProperty(elem, 'leftMargin', margin) + top = self.wprops.getProperty(elem, 'topMargin', margin) + right = self.wprops.getProperty(elem, 'rightMargin', margin) + bottom = self.wprops.getProperty(elem, 'bottomMargin', margin) + + # A layout widget should, by default, have no margins. + if self.stack.topIsLayoutWidget(): + if left < 0: left = 0 + if top < 0: top = 0 + if right < 0: right = 0 + if bottom < 0: bottom = 0 + + if left >= 0 or top >= 0 or right >= 0 or bottom >= 0: + # We inject the new internal property. + cme = SubElement(elem, 'property', name='pyuicMargins') + SubElement(cme, 'number').text = str(left) + SubElement(cme, 'number').text = str(top) + SubElement(cme, 'number').text = str(right) + SubElement(cme, 'number').text = str(bottom) + + # We use an internal property to handle spacing which will use separate + # horizontal and vertical spacing if they are found to be different. + # The following will select, in order of preference, separate + # horizontal and vertical spacing, the same spacing in both directions, + # and the default spacing. + spacing = self.wprops.getProperty(elem, 'spacing', + self.defaults['spacing']) + horiz = self.wprops.getProperty(elem, 'horizontalSpacing', spacing) + vert = self.wprops.getProperty(elem, 'verticalSpacing', spacing) + + if horiz >= 0 or vert >= 0: + # We inject the new internal property. + cme = SubElement(elem, 'property', name='pyuicSpacing') + SubElement(cme, 'number').text = str(horiz) + SubElement(cme, 'number').text = str(vert) + + classname = elem.attrib["class"] + if self.stack.topIsLayout(): + parent = None + else: + parent = self.stack.topwidget + if "name" not in elem.attrib: + elem.attrib["name"] = classname[1:].lower() + self.stack.push(self.setupObject(classname, parent, elem)) + self.traverseWidgetTree(elem) + + layout = self.stack.popLayout() + self.configureLayout(elem, layout) + + if self.stack.topIsLayout(): + top_layout = self.stack.peek() + lp = elem.attrib['layout-position'] + + if isinstance(top_layout, QtWidgets.QFormLayout): + top_layout.setLayout(lp[0], self._form_layout_role(lp), layout) + else: + top_layout.addLayout(layout, *lp) + + def configureLayout(self, elem, layout): + if isinstance(layout, QtWidgets.QGridLayout): + self.setArray(elem, 'columnminimumwidth', + layout.setColumnMinimumWidth) + self.setArray(elem, 'rowminimumheight', + layout.setRowMinimumHeight) + self.setArray(elem, 'columnstretch', layout.setColumnStretch) + self.setArray(elem, 'rowstretch', layout.setRowStretch) + + elif isinstance(layout, QtWidgets.QBoxLayout): + self.setArray(elem, 'stretch', layout.setStretch) + + def setArray(self, elem, name, setter): + array = elem.attrib.get(name) + if array: + for idx, value in enumerate(array.split(',')): + value = int(value) + if value > 0: + setter(idx, value) + + def disableSorting(self, w): + if self.item_nr == 0: + self.sorting_enabled = self.factory.invoke("__sortingEnabled", + w.isSortingEnabled) + w.setSortingEnabled(False) + + def handleItem(self, elem): + if self.stack.topIsLayout(): + elem[0].attrib['layout-position'] = _layout_position(elem) + self.traverseWidgetTree(elem) + else: + w = self.stack.topwidget + + if isinstance(w, QtWidgets.QComboBox): + text = self.wprops.getProperty(elem, "text") + icon = self.wprops.getProperty(elem, "icon") + + if icon: + w.addItem(icon, '') + else: + w.addItem('') + + w.setItemText(self.item_nr, text) + + elif isinstance(w, QtWidgets.QListWidget): + self.disableSorting(w) + item = self.createWidgetItem('QListWidgetItem', elem, w.item, + self.item_nr) + w.addItem(item) + + elif isinstance(w, QtWidgets.QTreeWidget): + if self.itemstack: + parent, _ = self.itemstack[-1] + _, nr_in_root = self.itemstack[0] + else: + parent = w + nr_in_root = self.item_nr + + item = self.factory.createQObject("QTreeWidgetItem", + "item_%d" % len(self.itemstack), (parent, ), False) + + if self.item_nr == 0 and not self.itemstack: + self.sorting_enabled = self.factory.invoke("__sortingEnabled", w.isSortingEnabled) + w.setSortingEnabled(False) + + self.itemstack.append((item, self.item_nr)) + self.item_nr = 0 + + # We have to access the item via the tree when setting the + # text. + titm = w.topLevelItem(nr_in_root) + for child, nr_in_parent in self.itemstack[1:]: + titm = titm.child(nr_in_parent) + + column = -1 + for prop in elem.findall('property'): + c_prop = self.wprops.convert(prop) + c_prop_name = prop.attrib['name'] + + if c_prop_name == 'text': + column += 1 + if c_prop: + titm.setText(column, c_prop) + elif c_prop_name == 'statusTip': + item.setStatusTip(column, c_prop) + elif c_prop_name == 'toolTip': + item.setToolTip(column, c_prop) + elif c_prop_name == 'whatsThis': + item.setWhatsThis(column, c_prop) + elif c_prop_name == 'font': + item.setFont(column, c_prop) + elif c_prop_name == 'icon': + item.setIcon(column, c_prop) + elif c_prop_name == 'background': + item.setBackground(column, c_prop) + elif c_prop_name == 'foreground': + item.setForeground(column, c_prop) + elif c_prop_name == 'flags': + item.setFlags(c_prop) + elif c_prop_name == 'checkState': + item.setCheckState(column, c_prop) + + self.traverseWidgetTree(elem) + _, self.item_nr = self.itemstack.pop() + + elif isinstance(w, QtWidgets.QTableWidget): + row = int(elem.attrib['row']) + col = int(elem.attrib['column']) + + self.disableSorting(w) + item = self.createWidgetItem('QTableWidgetItem', elem, w.item, + row, col) + w.setItem(row, col, item) + + self.item_nr += 1 + + def addAction(self, elem): + self.actions.append((self.stack.topwidget, elem.attrib["name"])) + + @staticmethod + def any_i18n(*args): + """ Return True if any argument appears to be an i18n string. """ + + for a in args: + if a is not None and not isinstance(a, str): + return True + + return False + + def createWidgetItem(self, item_type, elem, getter, *getter_args): + """ Create a specific type of widget item. """ + + item = self.factory.createQObject(item_type, "item", (), False) + props = self.wprops + + # Note that not all types of widget items support the full set of + # properties. + + text = props.getProperty(elem, 'text') + status_tip = props.getProperty(elem, 'statusTip') + tool_tip = props.getProperty(elem, 'toolTip') + whats_this = props.getProperty(elem, 'whatsThis') + + if self.any_i18n(text, status_tip, tool_tip, whats_this): + self.factory.invoke("item", getter, getter_args) + + if text: + item.setText(text) + + if status_tip: + item.setStatusTip(status_tip) + + if tool_tip: + item.setToolTip(tool_tip) + + if whats_this: + item.setWhatsThis(whats_this) + + text_alignment = props.getProperty(elem, 'textAlignment') + if text_alignment: + item.setTextAlignment(text_alignment) + + font = props.getProperty(elem, 'font') + if font: + item.setFont(font) + + icon = props.getProperty(elem, 'icon') + if icon: + item.setIcon(icon) + + background = props.getProperty(elem, 'background') + if background: + item.setBackground(background) + + foreground = props.getProperty(elem, 'foreground') + if foreground: + item.setForeground(foreground) + + flags = props.getProperty(elem, 'flags') + if flags: + item.setFlags(flags) + + check_state = props.getProperty(elem, 'checkState') + if check_state: + item.setCheckState(check_state) + + return item + + def addHeader(self, elem): + w = self.stack.topwidget + + if isinstance(w, QtWidgets.QTreeWidget): + props = self.wprops + col = self.column_counter + + text = props.getProperty(elem, 'text') + if text: + w.headerItem().setText(col, text) + + status_tip = props.getProperty(elem, 'statusTip') + if status_tip: + w.headerItem().setStatusTip(col, status_tip) + + tool_tip = props.getProperty(elem, 'toolTip') + if tool_tip: + w.headerItem().setToolTip(col, tool_tip) + + whats_this = props.getProperty(elem, 'whatsThis') + if whats_this: + w.headerItem().setWhatsThis(col, whats_this) + + text_alignment = props.getProperty(elem, 'textAlignment') + if text_alignment: + w.headerItem().setTextAlignment(col, text_alignment) + + font = props.getProperty(elem, 'font') + if font: + w.headerItem().setFont(col, font) + + icon = props.getProperty(elem, 'icon') + if icon: + w.headerItem().setIcon(col, icon) + + background = props.getProperty(elem, 'background') + if background: + w.headerItem().setBackground(col, background) + + foreground = props.getProperty(elem, 'foreground') + if foreground: + w.headerItem().setForeground(col, foreground) + + self.column_counter += 1 + + elif isinstance(w, QtWidgets.QTableWidget): + if len(elem) != 0: + if elem.tag == 'column': + item = self.createWidgetItem('QTableWidgetItem', elem, + w.horizontalHeaderItem, self.column_counter) + w.setHorizontalHeaderItem(self.column_counter, item) + self.column_counter += 1 + elif elem.tag == 'row': + item = self.createWidgetItem('QTableWidgetItem', elem, + w.verticalHeaderItem, self.row_counter) + w.setVerticalHeaderItem(self.row_counter, item) + self.row_counter += 1 + + def setZOrder(self, elem): + # Designer can generate empty zorder elements. + if elem.text is None: + return + + # Designer allows the z-order of spacer items to be specified even + # though they can't be raised, so ignore any missing raise_() method. + try: + getattr(self.toplevelWidget, elem.text).raise_() + except AttributeError: + # Note that uic issues a warning message. + pass + + def createAction(self, elem): + self.setupObject("QAction", self.currentActionGroup or self.toplevelWidget, + elem) + + def createActionGroup(self, elem): + action_group = self.setupObject("QActionGroup", self.toplevelWidget, elem) + self.currentActionGroup = action_group + self.traverseWidgetTree(elem) + self.currentActionGroup = None + + widgetTreeItemHandlers = { + "widget" : createWidget, + "addaction" : addAction, + "layout" : createLayout, + "spacer" : createSpacer, + "item" : handleItem, + "action" : createAction, + "actiongroup": createActionGroup, + "column" : addHeader, + "row" : addHeader, + "zorder" : setZOrder, + } + + def traverseWidgetTree(self, elem): + for child in iter(elem): + try: + handler = self.widgetTreeItemHandlers[child.tag] + except KeyError: + continue + + handler(self, child) + + def createUserInterface(self, elem): + # Get the names of the class and widget. + cname = elem.attrib["class"] + wname = elem.attrib["name"] + + # If there was no widget name then derive it from the class name. + if not wname: + wname = cname + + if wname.startswith("Q"): + wname = wname[1:] + + wname = wname[0].lower() + wname[1:] + + self.toplevelWidget = self.createToplevelWidget(cname, wname) + self.toplevelWidget.setObjectName(wname) + DEBUG("toplevel widget is %s", + self.toplevelWidget.metaObject().className()) + self.wprops.setProperties(self.toplevelWidget, elem) + self.stack.push(self.toplevelWidget) + self.traverseWidgetTree(elem) + self.stack.popWidget() + self.addActions() + self.setBuddies() + self.setDelayedProps() + + def addActions(self): + for widget, action_name in self.actions: + if action_name == "separator": + widget.addSeparator() + else: + DEBUG("add action %s to %s", action_name, widget.objectName()) + action_obj = getattr(self.toplevelWidget, action_name) + if isinstance(action_obj, QtWidgets.QMenu): + widget.addAction(action_obj.menuAction()) + elif not isinstance(action_obj, QtWidgets.QActionGroup): + widget.addAction(action_obj) + + def setDelayedProps(self): + for widget, layout, setter, args in self.wprops.delayed_props: + if layout: + widget = widget.layout() + + setter = getattr(widget, setter) + setter(args) + + def setBuddies(self): + for widget, buddy in self.wprops.buddies: + DEBUG("%s is buddy of %s", buddy, widget.objectName()) + try: + widget.setBuddy(getattr(self.toplevelWidget, buddy)) + except AttributeError: + DEBUG("ERROR in ui spec: %s (buddy of %s) does not exist", + buddy, widget.objectName()) + + def classname(self, elem): + DEBUG("uiname is %s", elem.text) + name = elem.text + + if name is None: + name = "" + + self.uiname = name + self.wprops.uiname = name + self.setContext(name) + + def setContext(self, context): + """ + Reimplemented by a sub-class if it needs to know the translation + context. + """ + pass + + def readDefaults(self, elem): + self.defaults['margin'] = int(elem.attrib['margin']) + self.defaults['spacing'] = int(elem.attrib['spacing']) + + def setTaborder(self, elem): + lastwidget = None + for widget_elem in elem: + widget = getattr(self.toplevelWidget, widget_elem.text) + + if lastwidget is not None: + self.toplevelWidget.setTabOrder(lastwidget, widget) + + lastwidget = widget + + def readResources(self, elem): + """ + Read a "resources" tag and add the module to import to the parser's + list of them. + """ + try: + iterator = getattr(elem, 'iter') + except AttributeError: + iterator = getattr(elem, 'getiterator') + + for include in iterator("include"): + loc = include.attrib.get("location") + + # Apply the convention for naming the Python files generated by + # pyrcc5. + if loc and loc.endswith('.qrc'): + mname = os.path.basename(loc[:-4] + self._resource_suffix) + if mname not in self.resources: + self.resources.append(mname) + + def createConnections(self, elem): + def name2object(obj): + if obj == self.uiname: + return self.toplevelWidget + else: + return getattr(self.toplevelWidget, obj) + + for conn in iter(elem): + signal = conn.findtext('signal') + signal_name, signal_args = signal.split('(') + signal_args = signal_args[:-1].replace(' ', '') + sender = name2object(conn.findtext('sender')) + bound_signal = getattr(sender, signal_name) + + slot = self.factory.getSlot(name2object(conn.findtext('receiver')), + conn.findtext('slot').split('(')[0]) + + if signal_args == '': + bound_signal.connect(slot) + else: + signal_args = signal_args.split(',') + + if len(signal_args) == 1: + bound_signal[signal_args[0]].connect(slot) + else: + bound_signal[tuple(signal_args)].connect(slot) + + QtCore.QMetaObject.connectSlotsByName(self.toplevelWidget) + + def customWidgets(self, elem): + def header2module(header): + """header2module(header) -> string + + Convert paths to C++ header files to according Python modules + >>> header2module("foo/bar/baz.h") + 'foo.bar.baz' + """ + if header.endswith(".h"): + header = header[:-2] + + mpath = [] + for part in header.split('/'): + # Ignore any empty parts or those that refer to the current + # directory. + if part not in ('', '.'): + if part == '..': + # We should allow this for Python3. + raise SyntaxError("custom widget header file name may not contain '..'.") + + mpath.append(part) + + return '.'.join(mpath) + + for custom_widget in iter(elem): + classname = custom_widget.findtext("class") + self.factory.addCustomWidget(classname, + custom_widget.findtext("extends") or "QWidget", + header2module(custom_widget.findtext("header"))) + + def createToplevelWidget(self, classname, widgetname): + raise NotImplementedError + + def buttonGroups(self, elem): + for button_group in iter(elem): + if button_group.tag == 'buttongroup': + bg_name = button_group.attrib['name'] + bg = ButtonGroup() + self.button_groups[bg_name] = bg + + prop = self.getProperty(button_group, 'exclusive') + if prop is not None: + if prop.findtext('bool') == 'false': + bg.exclusive = False + + # finalize will be called after the whole tree has been parsed and can be + # overridden. + def finalize(self): + pass + + def parse(self, filename, resource_suffix): + if hasattr(filename, 'read'): + base_dir = '' + else: + # Allow the filename to be a QString. + filename = str(filename) + base_dir = os.path.dirname(filename) + + self.wprops.set_base_dir(base_dir) + + self._resource_suffix = resource_suffix + + # The order in which the different branches are handled is important. + # The widget tree handler relies on all custom widgets being known, and + # in order to create the connections, all widgets have to be populated. + branchHandlers = ( + ("layoutdefault", self.readDefaults), + ("class", self.classname), + ("buttongroups", self.buttonGroups), + ("customwidgets", self.customWidgets), + ("widget", self.createUserInterface), + ("connections", self.createConnections), + ("tabstops", self.setTaborder), + ("resources", self.readResources), + ) + + document = parse(filename) + root = document.getroot() + + if root.tag != 'ui': + raise SyntaxError("not created by Qt Designer") + + version = root.attrib.get('version') + if version is None: + raise SyntaxError("missing version number") + + # Right now, only version 4.0 is supported. + if version != '4.0': + raise SyntaxError("only Qt Designer files v4.0 are supported") + + for tagname, actor in branchHandlers: + elem = document.find(tagname) + if elem is not None: + actor(elem) + self.finalize() + w = self.toplevelWidget + self.reset() + return w + + @staticmethod + def _form_layout_role(layout_position): + if layout_position[3] > 1: + role = QtWidgets.QFormLayout.SpanningRole + elif layout_position[1] == 1: + role = QtWidgets.QFormLayout.FieldRole + else: + role = QtWidgets.QFormLayout.LabelRole + + return role diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qaxcontainer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qaxcontainer.cpython-312.pyc new file mode 100644 index 0000000..e096a05 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qaxcontainer.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qscintilla.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qscintilla.cpython-312.pyc new file mode 100644 index 0000000..7f13f69 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qscintilla.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtcharts.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtcharts.cpython-312.pyc new file mode 100644 index 0000000..881b9ce Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtcharts.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtprintsupport.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtprintsupport.cpython-312.pyc new file mode 100644 index 0000000..09d7396 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtprintsupport.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtquickwidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtquickwidgets.cpython-312.pyc new file mode 100644 index 0000000..97259fa Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtquickwidgets.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtwebenginewidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtwebenginewidgets.cpython-312.pyc new file mode 100644 index 0000000..d37e5bd Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtwebenginewidgets.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtwebkit.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtwebkit.cpython-312.pyc new file mode 100644 index 0000000..f8acfa4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/__pycache__/qtwebkit.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qaxcontainer.py b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qaxcontainer.py new file mode 100644 index 0000000..743eaca --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qaxcontainer.py @@ -0,0 +1,33 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return "PyQt5.QAxContainer", ("QAxWidget", ) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qscintilla.py b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qscintilla.py new file mode 100644 index 0000000..bebcc31 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qscintilla.py @@ -0,0 +1,33 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return "PyQt5.Qsci", ("QsciScintilla", ) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtcharts.py b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtcharts.py new file mode 100644 index 0000000..3e9164b --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtcharts.py @@ -0,0 +1,33 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return 'PyQt5.QtChart', ('QtCharts.QChartView', ) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtprintsupport.py b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtprintsupport.py new file mode 100644 index 0000000..2558b5d --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtprintsupport.py @@ -0,0 +1,33 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return 'PyQt5.QtPrintSupport', ('QAbstractPrintDialog', 'QPageSetupDialog') diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtquickwidgets.py b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtquickwidgets.py new file mode 100644 index 0000000..bf629e0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtquickwidgets.py @@ -0,0 +1,33 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return "PyQt5.QtQuickWidgets", ("QQuickWidget", ) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtwebenginewidgets.py b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtwebenginewidgets.py new file mode 100644 index 0000000..f43c22a --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtwebenginewidgets.py @@ -0,0 +1,33 @@ +############################################################################# +## +## Copyright (c) 2024 Riverbank Computing Limited +## +## This file is part of PyQt5. +## +## This file may be used under the terms of the GNU General Public License +## version 3.0 as published by the Free Software Foundation and appearing in +## the file LICENSE included in the packaging of this file. Please review the +## following information to ensure the GNU General Public License version 3.0 +## requirements will be met: http://www.gnu.org/copyleft/gpl.html. +## +## If you do not wish to use this file under the terms of the GPL version 3.0 +## then you may purchase a commercial license. For more information contact +## info@riverbankcomputing.com. +## +## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +## +############################################################################# + + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return "PyQt5.QtWebEngineWidgets", ("QWebEngineView", ) diff --git a/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtwebkit.py b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtwebkit.py new file mode 100644 index 0000000..087ec6e --- /dev/null +++ b/venv/lib/python3.12/site-packages/PyQt5/uic/widget-plugins/qtwebkit.py @@ -0,0 +1,51 @@ +############################################################################# +## +## Copyright (C) 2014 Riverbank Computing Limited. +## Copyright (C) 2006 Thorsten Marek. +## All right reserved. +## +## This file is part of PyQt. +## +## You may use this file under the terms of the GPL v2 or the revised BSD +## license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of the Riverbank Computing Limited nor the names +## of its contributors may be used to endorse or promote products +## derived from this software without specific prior written +## permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +############################################################################# + + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return "PyQt5.QtWebKitWidgets", ("QWebView", ) diff --git a/venv/lib/python3.12/site-packages/__pycache__/_sounddevice.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/_sounddevice.cpython-312.pyc new file mode 100644 index 0000000..e2934df Binary files /dev/null and b/venv/lib/python3.12/site-packages/__pycache__/_sounddevice.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/__pycache__/sounddevice.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/sounddevice.cpython-312.pyc new file mode 100644 index 0000000..fe03863 Binary files /dev/null and b/venv/lib/python3.12/site-packages/__pycache__/sounddevice.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/__pycache__/srt.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/srt.cpython-312.pyc new file mode 100644 index 0000000..e18200a Binary files /dev/null and b/venv/lib/python3.12/site-packages/__pycache__/srt.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/_cffi_backend.cpython-312-x86_64-linux-gnu.so b/venv/lib/python3.12/site-packages/_cffi_backend.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000..156ee43 Binary files /dev/null and b/venv/lib/python3.12/site-packages/_cffi_backend.cpython-312-x86_64-linux-gnu.so differ diff --git a/venv/lib/python3.12/site-packages/_sounddevice.py b/venv/lib/python3.12/site-packages/_sounddevice.py new file mode 100644 index 0000000..6b48b7a --- /dev/null +++ b/venv/lib/python3.12/site-packages/_sounddevice.py @@ -0,0 +1,11 @@ +# auto-generated file +import _cffi_backend + +ffi = _cffi_backend.FFI('_sounddevice', + _version = 0x2601, + _types = b'\x00\x00\x76\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x79\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x1C\x0D\x00\x00\x8D\x03\x00\x00\x00\x0F\x00\x00\x7B\x0D\x00\x00\x00\x0F\x00\x00\x80\x0D\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x88\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x88\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x01\x01\x00\x00\x00\x0F\x00\x00\x88\x0D\x00\x00\x00\x0F\x00\x00\x21\x0D\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x0B\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x82\x03\x00\x00\x1F\x11\x00\x00\x0E\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x03\x00\x00\x1F\x11\x00\x00\x1F\x11\x00\x00\x0E\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x52\x03\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x2E\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x0E\x01\x00\x00\x0A\x01\x00\x00\x34\x11\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x11\x00\x00\x07\x11\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x11\x00\x00\x8D\x03\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x11\x00\x00\x6B\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x4B\x11\x00\x00\x07\x11\x00\x00\x0A\x01\x00\x00\x7F\x03\x00\x00\x0A\x01\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x00\x0F\x00\x00\x69\x0D\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x8D\x0D\x00\x00\x7D\x03\x00\x00\x8B\x03\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x8D\x0D\x00\x00\x60\x11\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x8D\x0D\x00\x00\x09\x01\x00\x00\x00\x0F\x00\x00\x8D\x0D\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x8D\x0D\x00\x00\x07\x11\x00\x00\x09\x01\x00\x00\x07\x11\x00\x00\x09\x01\x00\x00\x07\x11\x00\x00\x00\x0F\x00\x00\x01\x09\x00\x00\x77\x03\x00\x00\x02\x09\x00\x00\x00\x0B\x00\x00\x7A\x03\x00\x00\x03\x09\x00\x00\x7C\x03\x00\x00\x04\x09\x00\x00\x00\x09\x00\x00\x02\x0B\x00\x00\x05\x09\x00\x00\x81\x03\x00\x00\x06\x09\x00\x00\x07\x09\x00\x00\x03\x0B\x00\x00\x04\x0B\x00\x00\x08\x09\x00\x00\x05\x0B\x00\x00\x06\x0B\x00\x00\x89\x03\x00\x00\x02\x01\x00\x00\x01\x03\x00\x00\x15\x01\x00\x00\x6E\x03\x00\x00\x00\x01', + _globals = (b'\x00\x00\x11\x23PaMacCore_GetChannelName',0,b'\x00\x00\x5F\x23PaMacCore_SetupChannelMap',0,b'\x00\x00\x64\x23PaMacCore_SetupStreamInfo',0,b'\x00\x00\x23\x23PaWasapi_IsLoopback',0,b'\x00\x00\x5A\x23PaWasapi_UpdateDeviceList',0,b'\x00\x00\x41\x23Pa_AbortStream',0,b'\x00\x00\x41\x23Pa_CloseStream',0,b'\x00\x00\x5A\x23Pa_GetDefaultHostApi',0,b'\x00\x00\x5A\x23Pa_GetDefaultInputDevice',0,b'\x00\x00\x5A\x23Pa_GetDefaultOutputDevice',0,b'\x00\x00\x5A\x23Pa_GetDeviceCount',0,b'\x00\x00\x00\x23Pa_GetDeviceInfo',0,b'\x00\x00\x0E\x23Pa_GetErrorText',0,b'\x00\x00\x5A\x23Pa_GetHostApiCount',0,b'\x00\x00\x03\x23Pa_GetHostApiInfo',0,b'\x00\x00\x09\x23Pa_GetLastHostErrorInfo',0,b'\x00\x00\x2A\x23Pa_GetSampleSize',0,b'\x00\x00\x18\x23Pa_GetStreamCpuLoad',0,b'\x00\x00\x06\x23Pa_GetStreamHostApiType',0,b'\x00\x00\x0B\x23Pa_GetStreamInfo',0,b'\x00\x00\x5C\x23Pa_GetStreamReadAvailable',0,b'\x00\x00\x18\x23Pa_GetStreamTime',0,b'\x00\x00\x5C\x23Pa_GetStreamWriteAvailable',0,b'\x00\x00\x5A\x23Pa_GetVersion',0,b'\x00\x00\x16\x23Pa_GetVersionText',0,b'\x00\x00\x26\x23Pa_HostApiDeviceIndexToDeviceIndex',0,b'\x00\x00\x1B\x23Pa_HostApiTypeIdToHostApiIndex',0,b'\x00\x00\x5A\x23Pa_Initialize',0,b'\x00\x00\x1E\x23Pa_IsFormatSupported',0,b'\x00\x00\x41\x23Pa_IsStreamActive',0,b'\x00\x00\x41\x23Pa_IsStreamStopped',0,b'\x00\x00\x37\x23Pa_OpenDefaultStream',0,b'\x00\x00\x2D\x23Pa_OpenStream',0,b'\x00\x00\x44\x23Pa_ReadStream',0,b'\x00\x00\x4E\x23Pa_SetStreamFinishedCallback',0,b'\x00\x00\x68\x23Pa_Sleep',0,b'\x00\x00\x41\x23Pa_StartStream',0,b'\x00\x00\x41\x23Pa_StopStream',0,b'\x00\x00\x5A\x23Pa_Terminate',0,b'\x00\x00\x49\x23Pa_WriteStream',0,b'\xFF\xFF\xFF\x0BeAudioCategoryAlerts',4,b'\xFF\xFF\xFF\x0BeAudioCategoryCommunications',3,b'\xFF\xFF\xFF\x0BeAudioCategoryGameChat',8,b'\xFF\xFF\xFF\x0BeAudioCategoryGameEffects',6,b'\xFF\xFF\xFF\x0BeAudioCategoryGameMedia',7,b'\xFF\xFF\xFF\x0BeAudioCategoryMedia',11,b'\xFF\xFF\xFF\x0BeAudioCategoryMovie',10,b'\xFF\xFF\xFF\x0BeAudioCategoryOther',0,b'\xFF\xFF\xFF\x0BeAudioCategorySoundEffects',5,b'\xFF\xFF\xFF\x0BeAudioCategorySpeech',9,b'\xFF\xFF\xFF\x0BeStreamOptionMatchFormat',2,b'\xFF\xFF\xFF\x0BeStreamOptionNone',0,b'\xFF\xFF\xFF\x0BeStreamOptionRaw',1,b'\xFF\xFF\xFF\x0BeThreadPriorityAudio',1,b'\xFF\xFF\xFF\x0BeThreadPriorityCapture',2,b'\xFF\xFF\xFF\x0BeThreadPriorityDistribution',3,b'\xFF\xFF\xFF\x0BeThreadPriorityGames',4,b'\xFF\xFF\xFF\x0BeThreadPriorityNone',0,b'\xFF\xFF\xFF\x0BeThreadPriorityPlayback',5,b'\xFF\xFF\xFF\x0BeThreadPriorityProAudio',6,b'\xFF\xFF\xFF\x0BeThreadPriorityWindowManager',7,b'\xFF\xFF\xFF\x0BpaAL',9,b'\xFF\xFF\xFF\x0BpaALSA',8,b'\xFF\xFF\xFF\x0BpaASIO',3,b'\xFF\xFF\xFF\x0BpaAbort',2,b'\xFF\xFF\xFF\x1FpaAsioUseChannelSelectors',1,b'\xFF\xFF\xFF\x0BpaAudioScienceHPI',14,b'\xFF\xFF\xFF\x0BpaBadBufferPtr',-9972,b'\xFF\xFF\xFF\x0BpaBadIODeviceCombination',-9993,b'\xFF\xFF\xFF\x0BpaBadStreamPtr',-9988,b'\xFF\xFF\xFF\x0BpaBeOS',10,b'\xFF\xFF\xFF\x0BpaBufferTooBig',-9991,b'\xFF\xFF\xFF\x0BpaBufferTooSmall',-9990,b'\xFF\xFF\xFF\x0BpaCanNotReadFromACallbackStream',-9977,b'\xFF\xFF\xFF\x0BpaCanNotReadFromAnOutputOnlyStream',-9975,b'\xFF\xFF\xFF\x0BpaCanNotWriteToACallbackStream',-9976,b'\xFF\xFF\xFF\x0BpaCanNotWriteToAnInputOnlyStream',-9974,b'\xFF\xFF\xFF\x1FpaClipOff',1,b'\xFF\xFF\xFF\x0BpaComplete',1,b'\xFF\xFF\xFF\x0BpaContinue',0,b'\xFF\xFF\xFF\x0BpaCoreAudio',5,b'\xFF\xFF\xFF\x1FpaCustomFormat',65536,b'\xFF\xFF\xFF\x0BpaDeviceUnavailable',-9985,b'\xFF\xFF\xFF\x0BpaDirectSound',1,b'\xFF\xFF\xFF\x1FpaDitherOff',2,b'\xFF\xFF\xFF\x1FpaFloat32',1,b'\xFF\xFF\xFF\x1FpaFormatIsSupported',0,b'\xFF\xFF\xFF\x1FpaFramesPerBufferUnspecified',0,b'\xFF\xFF\xFF\x0BpaHostApiNotFound',-9979,b'\xFF\xFF\xFF\x0BpaInDevelopment',0,b'\xFF\xFF\xFF\x0BpaIncompatibleHostApiSpecificStreamInfo',-9984,b'\xFF\xFF\xFF\x0BpaIncompatibleStreamHostApi',-9973,b'\xFF\xFF\xFF\x1FpaInputOverflow',2,b'\xFF\xFF\xFF\x0BpaInputOverflowed',-9981,b'\xFF\xFF\xFF\x1FpaInputUnderflow',1,b'\xFF\xFF\xFF\x0BpaInsufficientMemory',-9992,b'\xFF\xFF\xFF\x1FpaInt16',8,b'\xFF\xFF\xFF\x1FpaInt24',4,b'\xFF\xFF\xFF\x1FpaInt32',2,b'\xFF\xFF\xFF\x1FpaInt8',16,b'\xFF\xFF\xFF\x0BpaInternalError',-9986,b'\xFF\xFF\xFF\x0BpaInvalidChannelCount',-9998,b'\xFF\xFF\xFF\x0BpaInvalidDevice',-9996,b'\xFF\xFF\xFF\x0BpaInvalidFlag',-9995,b'\xFF\xFF\xFF\x0BpaInvalidHostApi',-9978,b'\xFF\xFF\xFF\x0BpaInvalidSampleRate',-9997,b'\xFF\xFF\xFF\x0BpaJACK',12,b'\xFF\xFF\xFF\x0BpaMME',2,b'\xFF\xFF\xFF\x1FpaMacCoreChangeDeviceParameters',1,b'\xFF\xFF\xFF\x1FpaMacCoreConversionQualityHigh',1024,b'\xFF\xFF\xFF\x1FpaMacCoreConversionQualityLow',768,b'\xFF\xFF\xFF\x1FpaMacCoreConversionQualityMax',0,b'\xFF\xFF\xFF\x1FpaMacCoreConversionQualityMedium',512,b'\xFF\xFF\xFF\x1FpaMacCoreConversionQualityMin',256,b'\xFF\xFF\xFF\x1FpaMacCoreFailIfConversionRequired',2,b'\xFF\xFF\xFF\x1FpaMacCoreMinimizeCPU',257,b'\xFF\xFF\xFF\x1FpaMacCoreMinimizeCPUButPlayNice',256,b'\xFF\xFF\xFF\x1FpaMacCorePlayNice',0,b'\xFF\xFF\xFF\x1FpaMacCorePro',1,b'\xFF\xFF\xFF\x1FpaNeverDropInput',4,b'\xFF\xFF\xFF\x1FpaNoDevice',-1,b'\xFF\xFF\xFF\x0BpaNoError',0,b'\xFF\xFF\xFF\x1FpaNoFlag',0,b'\xFF\xFF\xFF\x1FpaNonInterleaved',2147483648,b'\xFF\xFF\xFF\x0BpaNotInitialized',-10000,b'\xFF\xFF\xFF\x0BpaNullCallback',-9989,b'\xFF\xFF\xFF\x0BpaOSS',7,b'\xFF\xFF\xFF\x1FpaOutputOverflow',8,b'\xFF\xFF\xFF\x1FpaOutputUnderflow',4,b'\xFF\xFF\xFF\x0BpaOutputUnderflowed',-9980,b'\xFF\xFF\xFF\x1FpaPlatformSpecificFlags',4294901760,b'\xFF\xFF\xFF\x1FpaPrimeOutputBuffersUsingStreamCallback',8,b'\xFF\xFF\xFF\x1FpaPrimingOutput',16,b'\xFF\xFF\xFF\x0BpaSampleFormatNotSupported',-9994,b'\xFF\xFF\xFF\x0BpaSoundManager',4,b'\xFF\xFF\xFF\x0BpaStreamIsNotStopped',-9982,b'\xFF\xFF\xFF\x0BpaStreamIsStopped',-9983,b'\xFF\xFF\xFF\x0BpaTimedOut',-9987,b'\xFF\xFF\xFF\x1FpaUInt8',32,b'\xFF\xFF\xFF\x0BpaUnanticipatedHostError',-9999,b'\xFF\xFF\xFF\x1FpaUseHostApiSpecificDeviceSpecification',-2,b'\xFF\xFF\xFF\x0BpaWASAPI',13,b'\xFF\xFF\xFF\x0BpaWDMKS',11,b'\xFF\xFF\xFF\x0BpaWinWasapiAutoConvert',64,b'\xFF\xFF\xFF\x0BpaWinWasapiExclusive',1,b'\xFF\xFF\xFF\x0BpaWinWasapiExplicitSampleFormat',32,b'\xFF\xFF\xFF\x0BpaWinWasapiPolling',8,b'\xFF\xFF\xFF\x0BpaWinWasapiRedirectHostProcessor',2,b'\xFF\xFF\xFF\x0BpaWinWasapiThreadPriority',16,b'\xFF\xFF\xFF\x0BpaWinWasapiUseChannelMask',4), + _struct_unions = ((b'\x00\x00\x00\x7D\x00\x00\x00\x02$PaMacCoreStreamInfo',b'\x00\x00\x2B\x11size',b'\x00\x00\x1C\x11hostApiType',b'\x00\x00\x2B\x11version',b'\x00\x00\x2B\x11flags',b'\x00\x00\x61\x11channelMap',b'\x00\x00\x2B\x11channelMapSize'),(b'\x00\x00\x00\x75\x00\x00\x00\x02PaAsioStreamInfo',b'\x00\x00\x2B\x11size',b'\x00\x00\x1C\x11hostApiType',b'\x00\x00\x2B\x11version',b'\x00\x00\x2B\x11flags',b'\x00\x00\x8A\x11channelSelectors'),(b'\x00\x00\x00\x77\x00\x00\x00\x02PaDeviceInfo',b'\x00\x00\x01\x11structVersion',b'\x00\x00\x88\x11name',b'\x00\x00\x01\x11hostApi',b'\x00\x00\x01\x11maxInputChannels',b'\x00\x00\x01\x11maxOutputChannels',b'\x00\x00\x21\x11defaultLowInputLatency',b'\x00\x00\x21\x11defaultLowOutputLatency',b'\x00\x00\x21\x11defaultHighInputLatency',b'\x00\x00\x21\x11defaultHighOutputLatency',b'\x00\x00\x21\x11defaultSampleRate'),(b'\x00\x00\x00\x7A\x00\x00\x00\x02PaHostApiInfo',b'\x00\x00\x01\x11structVersion',b'\x00\x00\x1C\x11type',b'\x00\x00\x88\x11name',b'\x00\x00\x01\x11deviceCount',b'\x00\x00\x01\x11defaultInputDevice',b'\x00\x00\x01\x11defaultOutputDevice'),(b'\x00\x00\x00\x7C\x00\x00\x00\x02PaHostErrorInfo',b'\x00\x00\x1C\x11hostApiType',b'\x00\x00\x69\x11errorCode',b'\x00\x00\x88\x11errorText'),(b'\x00\x00\x00\x7F\x00\x00\x00\x02PaStreamCallbackTimeInfo',b'\x00\x00\x21\x11inputBufferAdcTime',b'\x00\x00\x21\x11currentTime',b'\x00\x00\x21\x11outputBufferDacTime'),(b'\x00\x00\x00\x81\x00\x00\x00\x02PaStreamInfo',b'\x00\x00\x01\x11structVersion',b'\x00\x00\x21\x11inputLatency',b'\x00\x00\x21\x11outputLatency',b'\x00\x00\x21\x11sampleRate'),(b'\x00\x00\x00\x82\x00\x00\x00\x02PaStreamParameters',b'\x00\x00\x01\x11device',b'\x00\x00\x01\x11channelCount',b'\x00\x00\x2B\x11sampleFormat',b'\x00\x00\x21\x11suggestedLatency',b'\x00\x00\x07\x11hostApiSpecificStreamInfo'),(b'\x00\x00\x00\x85\x00\x00\x00\x02PaWasapiStreamInfo',b'\x00\x00\x2B\x11size',b'\x00\x00\x1C\x11hostApiType',b'\x00\x00\x2B\x11version',b'\x00\x00\x2B\x11flags',b'\x00\x00\x2B\x11channelMask',b'\x00\x00\x8C\x11hostProcessorOutput',b'\x00\x00\x8C\x11hostProcessorInput',b'\x00\x00\x87\x11threadPriority',b'\x00\x00\x84\x11streamCategory',b'\x00\x00\x86\x11streamOption')), + _enums = (b'\x00\x00\x00\x78\x00\x00\x00\x15PaErrorCode\x00paNoError,paNotInitialized,paUnanticipatedHostError,paInvalidChannelCount,paInvalidSampleRate,paInvalidDevice,paInvalidFlag,paSampleFormatNotSupported,paBadIODeviceCombination,paInsufficientMemory,paBufferTooBig,paBufferTooSmall,paNullCallback,paBadStreamPtr,paTimedOut,paInternalError,paDeviceUnavailable,paIncompatibleHostApiSpecificStreamInfo,paStreamIsStopped,paStreamIsNotStopped,paInputOverflowed,paOutputUnderflowed,paHostApiNotFound,paInvalidHostApi,paCanNotReadFromACallbackStream,paCanNotWriteToACallbackStream,paCanNotReadFromAnOutputOnlyStream,paCanNotWriteToAnInputOnlyStream,paIncompatibleStreamHostApi,paBadBufferPtr',b'\x00\x00\x00\x1C\x00\x00\x00\x16PaHostApiTypeId\x00paInDevelopment,paDirectSound,paMME,paASIO,paSoundManager,paCoreAudio,paOSS,paALSA,paAL,paBeOS,paWDMKS,paJACK,paWASAPI,paAudioScienceHPI',b'\x00\x00\x00\x7E\x00\x00\x00\x16PaStreamCallbackResult\x00paContinue,paComplete,paAbort',b'\x00\x00\x00\x83\x00\x00\x00\x16PaWasapiFlags\x00paWinWasapiExclusive,paWinWasapiRedirectHostProcessor,paWinWasapiUseChannelMask,paWinWasapiPolling,paWinWasapiThreadPriority,paWinWasapiExplicitSampleFormat,paWinWasapiAutoConvert',b'\x00\x00\x00\x84\x00\x00\x00\x16PaWasapiStreamCategory\x00eAudioCategoryOther,eAudioCategoryCommunications,eAudioCategoryAlerts,eAudioCategorySoundEffects,eAudioCategoryGameEffects,eAudioCategoryGameMedia,eAudioCategoryGameChat,eAudioCategorySpeech,eAudioCategoryMovie,eAudioCategoryMedia',b'\x00\x00\x00\x86\x00\x00\x00\x16PaWasapiStreamOption\x00eStreamOptionNone,eStreamOptionRaw,eStreamOptionMatchFormat',b'\x00\x00\x00\x87\x00\x00\x00\x16PaWasapiThreadPriority\x00eThreadPriorityNone,eThreadPriorityAudio,eThreadPriorityCapture,eThreadPriorityDistribution,eThreadPriorityGames,eThreadPriorityPlayback,eThreadPriorityProAudio,eThreadPriorityWindowManager'), + _typenames = (b'\x00\x00\x00\x75PaAsioStreamInfo',b'\x00\x00\x00\x01PaDeviceIndex',b'\x00\x00\x00\x77PaDeviceInfo',b'\x00\x00\x00\x01PaError',b'\x00\x00\x00\x78PaErrorCode',b'\x00\x00\x00\x01PaHostApiIndex',b'\x00\x00\x00\x7APaHostApiInfo',b'\x00\x00\x00\x1CPaHostApiTypeId',b'\x00\x00\x00\x7CPaHostErrorInfo',b'\x00\x00\x00\x7DPaMacCoreStreamInfo',b'\x00\x00\x00\x2BPaSampleFormat',b'\x00\x00\x00\x8DPaStream',b'\x00\x00\x00\x52PaStreamCallback',b'\x00\x00\x00\x2BPaStreamCallbackFlags',b'\x00\x00\x00\x7EPaStreamCallbackResult',b'\x00\x00\x00\x7FPaStreamCallbackTimeInfo',b'\x00\x00\x00\x6BPaStreamFinishedCallback',b'\x00\x00\x00\x2BPaStreamFlags',b'\x00\x00\x00\x81PaStreamInfo',b'\x00\x00\x00\x82PaStreamParameters',b'\x00\x00\x00\x21PaTime',b'\x00\x00\x00\x83PaWasapiFlags',b'\x00\x00\x00\x8CPaWasapiHostProcessorCallback',b'\x00\x00\x00\x84PaWasapiStreamCategory',b'\x00\x00\x00\x85PaWasapiStreamInfo',b'\x00\x00\x00\x86PaWasapiStreamOption',b'\x00\x00\x00\x87PaWasapiThreadPriority',b'\x00\x00\x00\x2BPaWinWaveFormatChannelMask',b'\x00\x00\x00\x8BSInt32'), +) diff --git a/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/INSTALLER b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/METADATA b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/METADATA new file mode 100644 index 0000000..7b7bb30 --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/METADATA @@ -0,0 +1,78 @@ +Metadata-Version: 2.4 +Name: certifi +Version: 2026.5.20 +Summary: Python package for providing Mozilla's CA Bundle. +Home-page: https://github.com/certifi/python-certifi +Author: Kenneth Reitz +Author-email: me@kennethreitz.com +License: MPL-2.0 +Project-URL: Source, https://github.com/certifi/python-certifi +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) +Classifier: Natural Language :: English +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Requires-Python: >=3.7 +License-File: LICENSE +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: home-page +Dynamic: license +Dynamic: license-file +Dynamic: project-url +Dynamic: requires-python +Dynamic: summary + +Certifi: Python SSL Certificates +================================ + +Certifi provides Mozilla's carefully curated collection of Root Certificates for +validating the trustworthiness of SSL certificates while verifying the identity +of TLS hosts. It has been extracted from the `Requests`_ project. + +Installation +------------ + +``certifi`` is available on PyPI. Simply install it with ``pip``:: + + $ pip install certifi + +Usage +----- + +To reference the installed certificate authority (CA) bundle, you can use the +built-in function:: + + >>> import certifi + + >>> certifi.where() + '/usr/local/lib/python3.7/site-packages/certifi/cacert.pem' + +Or from the command line:: + + $ python -m certifi + /usr/local/lib/python3.7/site-packages/certifi/cacert.pem + +Enjoy! + +.. _`Requests`: https://requests.readthedocs.io/en/master/ + +Addition/Removal of Certificates +-------------------------------- + +Certifi does not support any addition/removal or other modification of the +CA trust store content. This project is intended to provide a reliable and +highly portable root of trust to python deployments. Look to upstream projects +for methods to use alternate trust. diff --git a/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/RECORD b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/RECORD new file mode 100644 index 0000000..c69462d --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/RECORD @@ -0,0 +1,14 @@ +certifi-2026.5.20.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +certifi-2026.5.20.dist-info/METADATA,sha256=HDiCa8lfd0TGlQFongDjoaLJOhWJiJN84y707Vwd8PY,2474 +certifi-2026.5.20.dist-info/RECORD,, +certifi-2026.5.20.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91 +certifi-2026.5.20.dist-info/licenses/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989 +certifi-2026.5.20.dist-info/top_level.txt,sha256=KMu4vUCfsjLrkPbSNdgdekS-pVJzBAJFO__nI8NF6-U,8 +certifi/__init__.py,sha256=-8ljc7w7fyi5Kyi06c1_L0lG_kD_J0FvbUTa8mEpdzQ,94 +certifi/__main__.py,sha256=xBBoj905TUWBLRGANOcf7oi6e-3dMP4cEoG9OyMs11g,243 +certifi/__pycache__/__init__.cpython-312.pyc,, +certifi/__pycache__/__main__.cpython-312.pyc,, +certifi/__pycache__/core.cpython-312.pyc,, +certifi/cacert.pem,sha256=fO9UDGrzvwo8fQBwvT_XquNPiqgFtAjRwnoByK6zBd8,236095 +certifi/core.py,sha256=XFXycndG5pf37ayeF8N32HUuDafsyhkVMbO4BAPWHa0,3394 +certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/WHEEL b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/WHEEL new file mode 100644 index 0000000..14a883f --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (82.0.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/licenses/LICENSE b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/licenses/LICENSE new file mode 100644 index 0000000..62b076c --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/licenses/LICENSE @@ -0,0 +1,20 @@ +This package contains a modified version of ca-bundle.crt: + +ca-bundle.crt -- Bundle of CA Root Certificates + +This is a bundle of X.509 certificates of public Certificate Authorities +(CA). These were automatically extracted from Mozilla's root certificates +file (certdata.txt). This file can be found in the mozilla source tree: +https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/certdata.txt +It contains the certificates in PEM format and therefore +can be directly used with curl / libcurl / php_curl, or with +an Apache+mod_ssl webserver for SSL client authentication. +Just configure this file as the SSLCACertificateFile.# + +***** BEGIN LICENSE BLOCK ***** +This Source Code Form is subject to the terms of the Mozilla Public License, +v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain +one at http://mozilla.org/MPL/2.0/. + +***** END LICENSE BLOCK ***** +@(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $ diff --git a/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/top_level.txt b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/top_level.txt new file mode 100644 index 0000000..963eac5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi-2026.5.20.dist-info/top_level.txt @@ -0,0 +1 @@ +certifi diff --git a/venv/lib/python3.12/site-packages/certifi/__init__.py b/venv/lib/python3.12/site-packages/certifi/__init__.py new file mode 100644 index 0000000..004dd55 --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi/__init__.py @@ -0,0 +1,4 @@ +from .core import contents, where + +__all__ = ["contents", "where"] +__version__ = "2026.05.20" diff --git a/venv/lib/python3.12/site-packages/certifi/__main__.py b/venv/lib/python3.12/site-packages/certifi/__main__.py new file mode 100644 index 0000000..8945b5d --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi/__main__.py @@ -0,0 +1,12 @@ +import argparse + +from certifi import contents, where + +parser = argparse.ArgumentParser() +parser.add_argument("-c", "--contents", action="store_true") +args = parser.parse_args() + +if args.contents: + print(contents()) +else: + print(where()) diff --git a/venv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..25aa08a Binary files /dev/null and b/venv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..f34943e Binary files /dev/null and b/venv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/certifi/__pycache__/core.cpython-312.pyc b/venv/lib/python3.12/site-packages/certifi/__pycache__/core.cpython-312.pyc new file mode 100644 index 0000000..211383d Binary files /dev/null and b/venv/lib/python3.12/site-packages/certifi/__pycache__/core.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/certifi/cacert.pem b/venv/lib/python3.12/site-packages/certifi/cacert.pem new file mode 100644 index 0000000..6faad41 --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi/cacert.pem @@ -0,0 +1,3892 @@ + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL +BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ +SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n +a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 +NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT +CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u +Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO +dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI +VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV +9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY +2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY +vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt +bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb +x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ +l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK +TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj +Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e +i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw +DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG +7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk +MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr +gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk +GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS +3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm +Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ +l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c +JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP +L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa +LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG +mpv0 +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft ECC Root Certificate Authority 2017" +# Serial: 136839042543790627607696632466672567020 +# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 +# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 +# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD +VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw +MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy +b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR +ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb +hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 +FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV +L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB +iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft RSA Root Certificate Authority 2017" +# Serial: 40975477897264996090493496164228220339 +# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 +# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 +# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N +aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ +Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 +ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 +HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm +gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ +jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc +aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG +YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 +W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K +UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH ++FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q +W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC +LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC +gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 +tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh +SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 +TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 +pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR +xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp +GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 +dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN +AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB +RA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Label: "e-Szigno Root CA 2017" +# Serial: 411379200276854331539784714 +# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 +# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 +# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV +BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk +LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv +b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ +BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg +THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v +IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv +xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H +Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB +eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo +jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ ++efcMQ== +-----END CERTIFICATE----- + +# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Label: "certSIGN Root CA G2" +# Serial: 313609486401300475190 +# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 +# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 +# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g +Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ +BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ +R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF +dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw +vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ +uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp +n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs +cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW +xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P +rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF +DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx +DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy +LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C +eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ +d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq +kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl +qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 +OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c +NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk +ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO +pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj +03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk +PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE +1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX +QRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Label: "NAVER Global Root Certification Authority" +# Serial: 9013692873798656336226253319739695165984492813 +# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b +# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 +# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM +BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG +T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx +CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD +b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA +iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH +38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE +HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz +kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP +szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq +vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf +nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG +YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo +0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a +CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K +AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I +36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN +qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj +cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm ++LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL +hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe +lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 +p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 +piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR +LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX +5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO +dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul +9XXeifdy +-----END CERTIFICATE----- + +# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# Serial: 131542671362353147877283741781055151509 +# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb +# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a +# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw +CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw +FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S +Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 +MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL +DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS +QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH +sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK +Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu +SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC +MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy +v+c= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Label: "GlobalSign Root R46" +# Serial: 1552617688466950547958867513931858518042577 +# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef +# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 +# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA +MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD +VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy +MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt +c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ +OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG +vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud +316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo +0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE +y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF +zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE ++cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN +I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs +x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa +ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC +4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 +7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti +2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk +pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF +FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt +rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk +ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 +u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP +4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 +N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 +vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Label: "GlobalSign Root E46" +# Serial: 1552617690338932563915843282459653771421763 +# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f +# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 +# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx +CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD +ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw +MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex +HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq +R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd +yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ +7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 ++RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Label: "ANF Secure Server Root CA" +# Serial: 996390341000653745 +# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 +# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 +# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 +-----BEGIN CERTIFICATE----- +MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV +BAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk +YWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV +BAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN +MzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF +UzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD +VQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v +dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj +cqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q +yGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH +2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX +H1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL +zc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR +p1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz +W7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/ +SiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn +LNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3 +n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B +u8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj +o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC +AgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L +9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej +rw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK +pFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0 +vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq +OknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ +/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9 +2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI ++PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2 +MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo +tt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= +-----END CERTIFICATE----- + +# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum EC-384 CA" +# Serial: 160250656287871593594747141429395092468 +# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 +# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed +# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw +CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw +JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT +EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 +WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX +BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE +KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm +Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 +EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J +UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn +nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Root CA" +# Serial: 40870380103424195783807378461123655149 +# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 +# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 +# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd +-----BEGIN CERTIFICATE----- +MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6 +MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu +MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV +BAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw +MzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg +U3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ +n0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q +p1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq +NwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF +8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3 +HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa +mqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi +7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF +ytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P +qafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ +v3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6 +Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 +vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD +ggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4 +WxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo +zMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR +5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ +GfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf +5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq +0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D +P78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM +qJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP +0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf +E2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb +-----END CERTIFICATE----- + +# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Label: "TunTrust Root CA" +# Serial: 108534058042236574382096126452369648152337120275 +# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 +# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb +# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL +BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg +Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv +b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG +EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u +IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ +n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd +2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF +VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ +GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF +li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU +r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 +eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb +MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg +jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB +7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW +5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE +ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z +xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu +QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 +FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH +22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP +xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn +dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 +Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b +nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ +CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH +u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj +d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS RSA Root CA 2021" +# Serial: 76817823531813593706434026085292783742 +# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 +# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d +# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg +Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL +MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv +b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l +mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE +4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv +a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M +pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw +Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b +LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY +AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB +AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq +E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr +W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ +CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU +X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 +f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja +H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP +JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P +zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt +jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 +/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT +BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 +aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW +xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU +63ZTGI0RmLo= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS ECC Root CA 2021" +# Serial: 137515985548005187474074462014555733966 +# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 +# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 +# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw +CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh +cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v +dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG +A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg +Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 +KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y +STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD +AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw +SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN +nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 1977337328857672817 +# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 +# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe +# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 +MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc +tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd +IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC +AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw +ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m +iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF +Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ +hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P +Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE +EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV +1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t +CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR +5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw +f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 +ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK +GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus ECC Root CA" +# Serial: 630369271402956006249506845124680065938238527194 +# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 +# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 +# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw +RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY +BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz +MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u +LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 +v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd +e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw +V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA +AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG +GJTO +-----END CERTIFICATE----- + +# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus Root CA" +# Serial: 387574501246983434957692974888460947164905180485 +# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc +# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 +# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL +BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x +FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx +MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s +THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc +IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU +AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ +GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 +8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH +flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt +J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim +0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN +pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ +UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW +OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB +AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet +8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j +bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM +Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv +TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS +S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr +I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 +b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB +UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P +Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven +sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X2 O=Internet Security Research Group +# Subject: CN=ISRG Root X2 O=Internet Security Research Group +# Label: "ISRG Root X2" +# Serial: 87493402998870891108772069816698636114 +# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 +# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af +# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw +CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg +R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 +MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT +ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW ++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 +ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI +zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW +tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 +/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Label: "HiPKI Root CA - G1" +# Serial: 60966262342023497858655262305426234976 +# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 +# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 +# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa +Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 +YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw +qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv +Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 +lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz +Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ +KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK +FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj +HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr +y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ +/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM +a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 +fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG +SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc +SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza +ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc +XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg +iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho +L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF +Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr +kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ +vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU +YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 159662223612894884239637590694 +# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc +# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 +# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD +VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw +MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g +UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT +BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx +uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV +HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ ++wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 +bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 159662320309726417404178440727 +# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 +# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a +# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo +27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w +Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw +TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl +qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH +szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 +Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk +MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 +wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p +aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN +VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb +C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy +h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 +7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J +ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef +MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ +Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT +6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ +0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm +2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb +bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 159662495401136852707857743206 +# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 +# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 +# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G +jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 +4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 +VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm +ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 159662532700760215368942768210 +# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 +# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 +# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi +QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR +HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D +9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 +p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD +-----END CERTIFICATE----- + +# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj +# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj +# Label: "Telia Root CA v2" +# Serial: 7288924052977061235122729490515358 +# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 +# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd +# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx +CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE +AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 +NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ +MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq +AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 +vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 +lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD +n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT +7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o +6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC +TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 +WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R +DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI +pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj +YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy +rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi +0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM +A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS +SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K +TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF +6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er +3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt +Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT +VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW +ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA +rBPuUBQemMc= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 1 2020" +# Serial: 165870826978392376648679885835942448534 +# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed +# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 +# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 +NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS +zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 +QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ +VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW +wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV +dWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 1 2020" +# Serial: 126288379621884218666039612629459926992 +# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e +# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 +# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 +NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC +/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD +wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 +OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA +y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb +gfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS ECC P384 Root G5" +# Serial: 13129116028163249804115411775095713523 +# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed +# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee +# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 +-----BEGIN CERTIFICATE----- +MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp +Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 +MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ +bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS +7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp +0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS +B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 +BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ +LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 +DXZDjC5Ty3zfDBeWUA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS RSA4096 Root G5" +# Serial: 11930366277458970227240571539258396554 +# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 +# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 +# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN +MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT +HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN +NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs +IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ +ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 +2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp +wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM +pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD +nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po +sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx +Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd +Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX +KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe +XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL +tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv +TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw +GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H +PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF +O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ +REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik +AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv +/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ +p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw +MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF +qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK +ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root R1 O=Certainly +# Subject: CN=Certainly Root R1 O=Certainly +# Label: "Certainly Root R1" +# Serial: 188833316161142517227353805653483829216 +# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 +# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af +# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw +PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy +dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 +YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 +1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT +vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed +aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 +1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 +r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 +cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ +wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ +6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA +2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH +Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR +eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u +d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr +PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d +8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi +1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd +rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di +taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 +lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj +yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn +Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy +yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n +wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 +OV+KmalBWQewLK8= +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root E1 O=Certainly +# Subject: CN=Certainly Root E1 O=Certainly +# Label: "Certainly Root E1" +# Serial: 8168531406727139161245376702891150584 +# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 +# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b +# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 +-----BEGIN CERTIFICATE----- +MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw +CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu +bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ +BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s +eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK ++IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 +QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 +hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm +ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG +BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR +-----END CERTIFICATE----- + +# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Label: "Security Communication ECC RootCA1" +# Serial: 15446673492073852651 +# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 +# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 +# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 +-----BEGIN CERTIFICATE----- +MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT +AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD +VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx +NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT +HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 +IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl +dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK +ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu +9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O +be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA1" +# Serial: 113562791157148395269083148143378328608 +# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 +# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a +# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU +MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI +T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz +MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF +SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh +bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z +xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ +spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 +58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR +at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll +5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq +nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK +V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ +pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO +z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn +jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ +WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF +7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 +YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli +awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u ++2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 +X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN +SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo +P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI ++pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz +znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 +eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 +YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy +r/6zcCwupvI= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA2" +# Serial: 58605626836079930195615843123109055211 +# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c +# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 +# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 +-----BEGIN CERTIFICATE----- +MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw +CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ +VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy +MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ +TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS +b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B +IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ ++kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK +sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA +94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B +43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root E46" +# Serial: 88989738453351742415770396670917916916 +# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 +# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a +# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 +-----BEGIN CERTIFICATE----- +MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw +CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T +ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN +MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG +A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT +ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC +WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ +6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B +Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa +qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q +4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root R46" +# Serial: 156256931880233212765902055439220583700 +# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 +# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 +# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 +-----BEGIN CERTIFICATE----- +MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD +Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw +HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY +MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp +YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa +ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz +SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf +iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X +ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 +IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS +VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE +SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu ++Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt +8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L +HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt +zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P +AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c +mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ +YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 +gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA +Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB +JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX +DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui +TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 +dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 +LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp +0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY +QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS RSA Root CA 2022" +# Serial: 148535279242832292258835760425842727825 +# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da +# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca +# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed +-----BEGIN CERTIFICATE----- +MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO +MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD +DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX +DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw +b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP +L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY +t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins +S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 +PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO +L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 +R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w +dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS ++YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS +d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG +AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f +gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z +NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt +hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM +QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf +R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ +DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW +P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy +lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq +bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w +AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q +r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji +Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU +98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS ECC Root CA 2022" +# Serial: 26605119622390491762507526719404364228 +# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 +# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 +# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 +-----BEGIN CERTIFICATE----- +MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT +U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 +MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh +dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm +acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN +SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME +GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW +uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp +15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN +b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA ECC TLS 2021" +# Serial: 81873346711060652204712539181482831616 +# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 +# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd +# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 +-----BEGIN CERTIFICATE----- +MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w +LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w +CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 +MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF +Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X +tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 +AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 +KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD +aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu +CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo +9H1/IISpQuQo +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA RSA TLS 2021" +# Serial: 111436099570196163832749341232207667876 +# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 +# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 +# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f +-----BEGIN CERTIFICATE----- +MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM +MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx +MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 +MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD +QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z +4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv +Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ +kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs +GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln +nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh +3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD +0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy +geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 +ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB +c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI +pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS +4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs +o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ +qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw +xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM +rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 +AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR +0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY +o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 +dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE +oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. +# Label: "TrustAsia Global Root CA G3" +# Serial: 576386314500428537169965010905813481816650257167 +# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 +# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 +# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 +-----BEGIN CERTIFICATE----- +MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM +BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp +ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe +Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw +IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU +cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS +T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK +AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 +nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep +qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA +yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs +hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX +zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv +kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT +f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA +uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB +o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih +MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E +BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 +wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 +XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 +JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j +ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV +VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx +xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on +AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d +7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj +gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV ++Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo +FGWsJwt0ivKH +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. +# Label: "TrustAsia Global Root CA G4" +# Serial: 451799571007117016466790293371524403291602933463 +# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb +# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a +# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c +-----BEGIN CERTIFICATE----- +MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw +WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y +MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD +VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz +dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx +s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw +LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij +YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD +pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE +AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR +UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj +/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== +-----END CERTIFICATE----- + +# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH +# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH +# Label: "Telekom Security TLS ECC Root 2020" +# Serial: 72082518505882327255703894282316633856 +# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd +# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec +# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 +-----BEGIN CERTIFICATE----- +MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw +CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH +bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw +MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx +JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE +AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O +tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP +f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA +MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di +z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn +27iQ7t0l +-----END CERTIFICATE----- + +# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH +# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH +# Label: "Telekom Security TLS RSA Root 2023" +# Serial: 44676229530606711399881795178081572759 +# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 +# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 +# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj +MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 +eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy +MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC +REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG +A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 +cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV +cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA +U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 +Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug +BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy +8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J +co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg +8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 +rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 +mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg ++y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX +gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 +p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ +pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm +9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw +M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd +GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ +CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t +xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ +w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK +L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj +X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q +ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm +dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA CYBER Root CA" +# Serial: 85076849864375384482682434040119489222 +# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 +# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 +# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ +MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 +IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 +WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO +LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P +40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF +avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ +34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i +JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu +j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf +Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP +2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA +S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA +oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC +kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW +5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd +BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB +AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t +tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn +68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn +TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t +RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx +f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI +Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz +8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 +NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX +xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 +t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA12" +# Serial: 587887345431707215246142177076162061960426065942 +# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 +# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 +# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw +NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF +KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt +p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd +J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur +FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J +hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K +h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF +AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld +mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ +mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA +8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV +55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ +yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA14" +# Serial: 575790784512929437950770173562378038616896959179 +# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 +# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f +# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw +NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ +FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg +vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy +6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo +/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J +kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ +0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib +y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac +18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs +0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB +SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL +ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk +86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E +rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib +ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT +zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS +DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 +2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo +FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy +K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 +dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl +Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB +365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c +JRNItX+S +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA15" +# Serial: 126083514594751269499665114766174399806381178503 +# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 +# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d +# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a +-----BEGIN CERTIFICATE----- +MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw +UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM +dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy +NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl +cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 +IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 +wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR +ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT +9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp +4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 +bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 2 2023" +# Serial: 153168538924886464690566649552453098598 +# MD5 Fingerprint: e1:09:ed:d3:60:d4:56:1b:47:1f:b7:0c:5f:1b:5f:85 +# SHA1 Fingerprint: 2d:b0:70:ee:71:94:af:69:68:17:db:79:ce:58:9f:a0:6b:96:f7:87 +# SHA256 Fingerprint: 05:52:e6:f8:3f:df:65:e8:fa:96:70:e6:66:df:28:a4:e2:13:40:b5:10:cb:e5:25:66:f9:7c:4f:b9:4b:2b:d1 +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEJSIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUw +OTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCTcfKr +i3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNE +gXtRr90zsWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8 +k12b9py0i4a6Ibn08OhZWiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCT +Rphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl +2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LULQyReS2tNZ9/WtT5PeB+U +cSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIvx9gvdhFP +/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bS +uREVMweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+ +0bpwHJwh5Q8xaRfX/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4N +DfTisl01gLmB1IRpkQLLddCNxbU9CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+ +XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUZ5Dw1t61 +GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tI +FoE9c+CeJyrrd6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67n +riv6uvw8l5VAk1/DLQOj7aRvU9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTR +VFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4nj8+AybmTNudX0KEPUUDAxxZiMrc +LmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdijYQ6qgYF/6FKC0ULn +4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff/vtD +hQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsG +koHU6XCPpz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46 +ls/pdu4D58JDUjxqgejBWoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aS +Ecr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/5usWDiJFAbzdNpQ0qTUmiteXue4Icr80 +knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jtn/mtd+ArY0+ew+43u3gJ +hJ65bvspmZDogNOfJA== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. +# Label: "TrustAsia TLS ECC Root CA" +# Serial: 310892014698942880364840003424242768478804666567 +# MD5 Fingerprint: 09:48:04:77:d2:fc:65:93:71:66:b1:11:95:4f:06:8c +# SHA1 Fingerprint: b5:ec:39:f3:a1:66:37:ae:c3:05:94:57:e2:be:11:be:b7:a1:7f:36 +# SHA256 Fingerprint: c0:07:6b:9e:f0:53:1f:b1:a6:56:d6:7c:4e:be:97:cd:5d:ba:a4:1e:f4:45:98:ac:c2:48:98:78:c9:2d:87:11 +-----BEGIN CERTIFICATE----- +MIICMTCCAbegAwIBAgIUNnThTXxlE8msg1UloD5Sfi9QaMcwCgYIKoZIzj0EAwMw +WDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgRUNDIFJvb3QgQ0EwHhcNMjQw +NTE1MDU0MTU2WhcNNDQwNTE1MDU0MTU1WjBYMQswCQYDVQQGEwJDTjElMCMGA1UE +ChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1c3RB +c2lhIFRMUyBFQ0MgUm9vdCBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABLh/pVs/ +AT598IhtrimY4ZtcU5nb9wj/1WrgjstEpvDBjL1P1M7UiFPoXlfXTr4sP/MSpwDp +guMqWzJ8S5sUKZ74LYO1644xST0mYekdcouJtgq7nDM1D9rs3qlKH8kzsaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQULIVTu7FDzTLqnqOH/qKYqKaT6RAw +DgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMFRH18MtYYZI9HlaVQ01 +L18N9mdsd0AaRuf4aFtOJx24mH1/k78ITcTaRTChD15KeAIxAKORh/IRM4PDwYqR +OkwrULG9IpRdNYlzg8WbGf60oenUoWa2AaU2+dhoYSi3dOGiMQ== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. +# Label: "TrustAsia TLS RSA Root CA" +# Serial: 160405846464868906657516898462547310235378010780 +# MD5 Fingerprint: 3b:9e:c3:86:0f:34:3c:6b:c5:46:c4:8e:1d:e7:19:12 +# SHA1 Fingerprint: a5:46:50:c5:62:ea:95:9a:1a:a7:04:6f:17:58:c7:29:53:3d:03:fa +# SHA256 Fingerprint: 06:c0:8d:7d:af:d8:76:97:1e:b1:12:4f:e6:7f:84:7e:c0:c7:a1:58:d3:ea:53:cb:e9:40:e2:ea:97:91:f4:c3 +-----BEGIN CERTIFICATE----- +MIIFgDCCA2igAwIBAgIUHBjYz+VTPyI1RlNUJDxsR9FcSpwwDQYJKoZIhvcNAQEM +BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp +ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN +MjQwNTE1MDU0MTU3WhcNNDQwNTE1MDU0MTU2WjBYMQswCQYDVQQGEwJDTjElMCMG +A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1 +c3RBc2lhIFRMUyBSU0EgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC +AgoCggIBAMMWuBtqpERz5dZO9LnPWwvB0ZqB9WOwj0PBuwhaGnrhB3YmH49pVr7+ +NmDQDIPNlOrnxS1cLwUWAp4KqC/lYCZUlviYQB2srp10Zy9U+5RjmOMmSoPGlbYJ +Q1DNDX3eRA5gEk9bNb2/mThtfWza4mhzH/kxpRkQcwUqwzIZheo0qt1CHjCNP561 +HmHVb70AcnKtEj+qpklz8oYVlQwQX1Fkzv93uMltrOXVmPGZLmzjyUT5tUMnCE32 +ft5EebuyjBza00tsLtbDeLdM1aTk2tyKjg7/D8OmYCYozza/+lcK7Fs/6TAWe8Tb +xNRkoDD75f0dcZLdKY9BWN4ArTr9PXwaqLEX8E40eFgl1oUh63kd0Nyrz2I8sMeX +i9bQn9P+PN7F4/w6g3CEIR0JwqH8uyghZVNgepBtljhb//HXeltt08lwSUq6HTrQ +UNoyIBnkiz/r1RYmNzz7dZ6wB3C4FGB33PYPXFIKvF1tjVEK2sUYyJtt3LCDs3+j +TnhMmCWr8n4uIF6CFabW2I+s5c0yhsj55NqJ4js+k8UTav/H9xj8Z7XvGCxUq0DT +bE3txci3OE9kxJRMT6DNrqXGJyV1J23G2pyOsAWZ1SgRxSHUuPzHlqtKZFlhaxP8 +S8ySpg+kUb8OWJDZgoM5pl+z+m6Ss80zDoWo8SnTq1mt1tve1CuBAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLgHkXlcBvRG/XtZylomkadFK/hT +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQwFAAOCAgEAIZtqBSBdGBanEqT3 +Rz/NyjuujsCCztxIJXgXbODgcMTWltnZ9r96nBO7U5WS/8+S4PPFJzVXqDuiGev4 +iqME3mmL5Dw8veWv0BIb5Ylrc5tvJQJLkIKvQMKtuppgJFqBTQUYo+IzeXoLH5Pt +7DlK9RME7I10nYEKqG/odv6LTytpEoYKNDbdgptvT+Bz3Ul/KD7JO6NXBNiT2Twp +2xIQaOHEibgGIOcberyxk2GaGUARtWqFVwHxtlotJnMnlvm5P1vQiJ3koP26TpUJ +g3933FEFlJ0gcXax7PqJtZwuhfG5WyRasQmr2soaB82G39tp27RIGAAtvKLEiUUj +pQ7hRGU+isFqMB3iYPg6qocJQrmBktwliJiJ8Xw18WLK7nn4GS/+X/jbh87qqA8M +pugLoDzga5SYnH+tBuYc6kIQX+ImFTw3OffXvO645e8D7r0i+yiGNFjEWn9hongP +XvPKnbwbPKfILfanIhHKA9jnZwqKDss1jjQ52MjqjZ9k4DewbNfFj8GQYSbbJIwe +SsCI3zWQzj8C9GRh3sfIB5XeMhg6j6JCQCTl1jNdfK7vsU1P1FeQNWrcrgSXSYk0 +ly4wBOeY99sLAZDBHwo/+ML+TvrbmnNzFrwFuHnYWa8G5z9nODmxfKuU4CkUpijy +323imttUQ/hHWKNddBWcwauwxzQ= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 2 2023" +# Serial: 139766439402180512324132425437959641711 +# MD5 Fingerprint: 96:b4:78:09:f0:09:cb:77:eb:bb:1b:4d:6f:36:bc:b6 +# SHA1 Fingerprint: a5:5b:d8:47:6c:8f:19:f7:4c:f4:6d:6b:b6:c2:79:82:22:df:54:8b +# SHA256 Fingerprint: 8e:82:21:b2:e7:d4:00:78:36:a1:67:2f:0d:cc:29:9c:33:bc:07:d3:16:f1:32:fa:1a:20:6d:58:71:50:f1:ce +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEVWIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUw +OTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1sJkK +F8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE +7CUXFId/MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFe +EMbsh2aJgWi6zCudR3Mfvc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6 +lHPTGGkKSv/BAQP/eX+1SH977ugpbzZMlWGG2Pmic4ruri+W7mjNPU0oQvlFKzIb +RlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3YG14C8qKXO0elg6DpkiV +jTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq9107PncjLgc +jmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZx +TnXonMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ +ARZZaBhDM7DS3LAaQzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nk +hbDhezGdpn9yo7nELC7MmVcOIQxFAZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knF +NXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqvyREBuH +kV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14 +QvBukEdHjqOSMo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4 +pZt+UPJ26oUFKidBK7GB0aL2QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q +3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xDUmPBEcrCRbH0O1P1aa4846XerOhU +t7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V4U/M5d40VxDJI3IX +cI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuodNv8 +ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT +2vFp4LJiTZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs +7dpn1mKmS00PaaLJvOwiS5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNP +gofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAst +Nl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L+KIkBI3Y4WNeApI02phh +XBxvWHZks/wCuPWdCg== +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG +# Subject: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG +# Label: "SwissSign RSA TLS Root CA 2022 - 1" +# Serial: 388078645722908516278762308316089881486363258315 +# MD5 Fingerprint: 16:2e:e4:19:76:81:85:ba:8e:91:58:f1:15:ef:72:39 +# SHA1 Fingerprint: 81:34:0a:be:4c:cd:ce:cc:e7:7d:cc:8a:d4:57:e2:45:a0:77:5d:ce +# SHA256 Fingerprint: 19:31:44:f4:31:e0:fd:db:74:07:17:d4:de:92:6a:57:11:33:88:4b:43:60:d3:0e:27:29:13:cb:e6:60:ce:41 +-----BEGIN CERTIFICATE----- +MIIFkzCCA3ugAwIBAgIUQ/oMX04bgBhE79G0TzUfRPSA7cswDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzErMCkGA1UE +AxMiU3dpc3NTaWduIFJTQSBUTFMgUm9vdCBDQSAyMDIyIC0gMTAeFw0yMjA2MDgx +MTA4MjJaFw00NzA2MDgxMTA4MjJaMFExCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxT +d2lzc1NpZ24gQUcxKzApBgNVBAMTIlN3aXNzU2lnbiBSU0EgVExTIFJvb3QgQ0Eg +MjAyMiAtIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLKmjiC8NX +vDVjvHClO/OMPE5Xlm7DTjak9gLKHqquuN6orx122ro10JFwB9+zBvKK8i5VUXu7 +LCTLf5ImgKO0lPaCoaTo+nUdWfMHamFk4saMla+ju45vVs9xzF6BYQ1t8qsCLqSX +5XH8irCRIFucdFJtrhUnWXjyCcplDn/L9Ovn3KlMd/YrFgSVrpxxpT8q2kFC5zyE +EPThPYxr4iuRR1VPuFa+Rd4iUU1OKNlfGUEGjw5NBuBwQCMBauTLE5tzrE0USJIt +/m2n+IdreXXhvhCxqohAWVTXz8TQm0SzOGlkjIHRI36qOTw7D59Ke4LKa2/KIj4x +0LDQKhySio/YGZxH5D4MucLNvkEM+KRHBdvBFzA4OmnczcNpI/2aDwLOEGrOyvi5 +KaM2iYauC8BPY7kGWUleDsFpswrzd34unYyzJ5jSmY0lpx+Gs6ZUcDj8fV3oT4MM +0ZPlEuRU2j7yrTrePjxF8CgPBrnh25d7mUWe3f6VWQQvdT/TromZhqwUtKiE+shd +OxtYk8EXlFXIC+OCeYSf8wCENO7cMdWP8vpPlkwGqnj73mSiI80fPsWMvDdUDrta +clXvyFu1cvh43zcgTFeRc5JzrBh3Q4IgaezprClG5QtO+DdziZaKHG29777YtvTK +wP1H8K4LWCDFyB02rpeNUIMmJCn3nTsPBQIDAQABo2MwYTAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBRvjmKLk0Ow4UD2p8P98Q+4 +DxU4pTAdBgNVHQ4EFgQUb45ii5NDsOFA9qfD/fEPuA8VOKUwDQYJKoZIhvcNAQEL +BQADggIBAKwsKUF9+lz1GpUYvyypiqkkVHX1uECry6gkUSsYP2OprphWKwVDIqO3 +10aewCoSPY6WlkDfDDOLazeROpW7OSltwAJsipQLBwJNGD77+3v1dj2b9l4wBlgz +Hqp41eZUBDqyggmNzhYzWUUo8aWjlw5DI/0LIICQ/+Mmz7hkkeUFjxOgdg3XNwwQ +iJb0Pr6VvfHDffCjw3lHC1ySFWPtUnWK50Zpy1FVCypM9fJkT6lc/2cyjlUtMoIc +gC9qkfjLvH4YoiaoLqNTKIftV+Vlek4ASltOU8liNr3CjlvrzG4ngRhZi0Rjn9UM +ZfQpZX+RLOV/fuiJz48gy20HQhFRJjKKLjpHE7iNvUcNCfAWpO2Whi4Z2L6MOuhF +LhG6rlrnub+xzI/goP+4s9GFe3lmozm1O2bYQL7Pt2eLSMkZJVX8vY3PXtpOpvJp +zv1/THfQwUY1mFwjmwJFQ5Ra3bxHrSL+ul4vkSkphnsh3m5kt8sNjzdbowhq6/Td +Ao9QAwKxuDdollDruF/UKIqlIgyKhPBZLtU30WHlQnNYKoH3dtvi4k0NX/a3vgW0 +rk4N3hY9A4GzJl5LuEsAz/+MF7psYC0nhzck5npgL7XTgwSqT0N1osGDsieYK7EO +gLrAhV5Cud+xYJHT6xh+cHiudoO+cVrQkOPKwRYlZ0rwtnu64ZzZ +-----END CERTIFICATE----- + +# Issuer: CN=OISTE Server Root ECC G1 O=OISTE Foundation +# Subject: CN=OISTE Server Root ECC G1 O=OISTE Foundation +# Label: "OISTE Server Root ECC G1" +# Serial: 47819833811561661340092227008453318557 +# MD5 Fingerprint: 42:a7:d2:35:ae:02:92:db:19:76:08:de:2f:05:b4:d4 +# SHA1 Fingerprint: 3b:f6:8b:09:ae:2a:92:7b:ba:e3:8d:3f:11:95:d9:e6:44:0c:45:e2 +# SHA256 Fingerprint: ee:c9:97:c0:c3:0f:21:6f:7e:3b:8b:30:7d:2b:ae:42:41:2d:75:3f:c8:21:9d:af:d1:52:0b:25:72:85:0f:49 +-----BEGIN CERTIFICATE----- +MIICNTCCAbqgAwIBAgIQI/nD1jWvjyhLH/BU6n6XnTAKBggqhkjOPQQDAzBLMQsw +CQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UEAwwY +T0lTVEUgU2VydmVyIFJvb3QgRUNDIEcxMB4XDTIzMDUzMTE0NDIyOFoXDTQ4MDUy +NDE0NDIyN1owSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5kYXRp +b24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IEVDQyBHMTB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABBcv+hK8rBjzCvRE1nZCnrPoH7d5qVi2+GXROiFPqOujvqQy +cvO2Ackr/XeFblPdreqqLiWStukhEaivtUwL85Zgmjvn6hp4LrQ95SjeHIC6XG4N +2xml4z+cKrhAS93mT6NjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBQ3 +TYhlz/w9itWj8UnATgwQb0K0nDAdBgNVHQ4EFgQUN02IZc/8PYrVo/FJwE4MEG9C +tJwwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYCMQCpKjAd0MKfkFFR +QD6VVCHNFmb3U2wIFjnQEnx/Yxvf4zgAOdktUyBFCxxgZzFDJe0CMQCSia7pXGKD +YmH5LVerVrkR3SW+ak5KGoJr3M/TvEqzPNcum9v4KGm8ay3sMaE641c= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE Server Root RSA G1 O=OISTE Foundation +# Subject: CN=OISTE Server Root RSA G1 O=OISTE Foundation +# Label: "OISTE Server Root RSA G1" +# Serial: 113845518112613905024960613408179309848 +# MD5 Fingerprint: 23:a7:9e:d4:70:b8:b9:14:57:41:8a:7e:44:59:e2:68 +# SHA1 Fingerprint: f7:00:34:25:94:88:68:31:e4:34:87:3f:70:fe:86:b3:86:9f:f0:6e +# SHA256 Fingerprint: 9a:e3:62:32:a5:18:9f:fd:db:35:3d:fd:26:52:0c:01:53:95:d2:27:77:da:c5:9d:b5:7b:98:c0:89:a6:51:e6 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIQVaXZZ5Qoxu0M+ifdWwFNGDANBgkqhkiG9w0BAQwFADBL +MQswCQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UE +AwwYT0lTVEUgU2VydmVyIFJvb3QgUlNBIEcxMB4XDTIzMDUzMTE0MzcxNloXDTQ4 +MDUyNDE0MzcxNVowSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5k +YXRpb24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IFJTQSBHMTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKqu9KuCz/vlNwvn1ZatkOhLKdxVYOPM +vLO8LZK55KN68YG0nnJyQ98/qwsmtO57Gmn7KNByXEptaZnwYx4M0rH/1ow00O7b +rEi56rAUjtgHqSSY3ekJvqgiG1k50SeH3BzN+Puz6+mTeO0Pzjd8JnduodgsIUzk +ik/HEzxux9UTl7Ko2yRpg1bTacuCErudG/L4NPKYKyqOBGf244ehHa1uzjZ0Dl4z +O8vbUZeUapU8zhhabkvG/AePLhq5SvdkNCncpo1Q4Y2LS+VIG24ugBA/5J8bZT8R +tOpXaZ+0AOuFJJkk9SGdl6r7NH8CaxWQrbueWhl/pIzY+m0o/DjH40ytas7ZTpOS +jswMZ78LS5bOZmdTaMsXEY5Z96ycG7mOaES3GK/m5Q9l3JUJsJMStR8+lKXHiHUh +sd4JJCpM4rzsTGdHwimIuQq6+cF0zowYJmXa92/GjHtoXAvuY8BeS/FOzJ8vD+Ho +mnqT8eDI278n5mUpezbgMxVz8p1rhAhoKzYHKyfMeNhqhw5HdPSqoBNdZH702xSu ++zrkL8Fl47l6QGzwBrd7KJvX4V84c5Ss2XCTLdyEr0YconosP4EmQufU2MVshGYR +i3drVByjtdgQ8K4p92cIiBdcuJd5z+orKu5YM+Vt6SmqZQENghPsJQtdLEByFSnT +kCz3GkPVavBpAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU +8snBDw1jALvsRQ5KH7WxszbNDo0wHQYDVR0OBBYEFPLJwQ8NYwC77EUOSh+1sbM2 +zQ6NMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQwFAAOCAgEANGd5sjrG5T33 +I3K5Ce+SrScfoE4KsvXaFwyihdJ+klH9FWXXXGtkFu6KRcoMQzZENdl//nk6HOjG +5D1rd9QhEOP28yBOqb6J8xycqd+8MDoX0TJD0KqKchxRKEzdNsjkLWd9kYccnbz8 +qyiWXmFcuCIzGEgWUOrKL+mlSdx/PKQZvDatkuK59EvV6wit53j+F8Bdh3foZ3dP +AGav9LEDOr4SfEE15fSmG0eLy3n31r8Xbk5l8PjaV8GUgeV6Vg27Rn9vkf195hfk +gSe7BYhW3SCl95gtkRlpMV+bMPKZrXJAlszYd2abtNUOshD+FKrDgHGdPY3ofRRs +YWSGRqbXVMW215AWRqWFyp464+YTFrYVI8ypKVL9AMb2kI5Wj4kI3Zaq5tNqqYY1 +9tVFeEJKRvwDyF7YZvZFZSS0vod7VSCd9521Kvy5YhnLbDuv0204bKt7ph6N/Ome +/msVuduCmsuY33OhkKCgxeDoAaijFJzIwZqsFVAzje18KotzlUBDJvyBpCpfOZC3 +J8tRd/iWkx7P8nd9H0aTolkelUTFLXVksNb54Dxp6gS1HAviRkRNQzuXSXERvSS2 +wq1yVAb+axj5d9spLFKebXd7Yv0PTY6YMjAwcRLWJTXjn/hvnLXrahut6hDTlhZy +BiElxky8j3C7DOReIoMt0r7+hVu05L0= +-----END CERTIFICATE----- + +# Issuer: CN=e-Szigno TLS Root CA 2023 O=Microsec Ltd. +# Subject: CN=e-Szigno TLS Root CA 2023 O=Microsec Ltd. +# Label: "e-Szigno TLS Root CA 2023" +# Serial: 71934828665710877219916191754 +# MD5 Fingerprint: 6a:e9:99:74:a5:da:5e:f1:d9:2e:f2:c8:d1:86:8b:71 +# SHA1 Fingerprint: 6f:9a:d5:d5:df:e8:2c:eb:be:37:07:ee:4f:4f:52:58:29:41:d1:fe +# SHA256 Fingerprint: b4:91:41:50:2d:00:66:3d:74:0f:2e:7e:c3:40:c5:28:00:96:26:66:12:1a:36:d0:9c:f7:dd:2b:90:38:4f:b4 +-----BEGIN CERTIFICATE----- +MIICzzCCAjGgAwIBAgINAOhvGHvWOWuYSkmYCjAKBggqhkjOPQQDBDB1MQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xFzAVBgNVBGEMDlZBVEhVLTIzNTg0NDk3MSIwIAYDVQQDDBllLVN6aWdubyBU +TFMgUm9vdCBDQSAyMDIzMB4XDTIzMDcxNzE0MDAwMFoXDTM4MDcxNzE0MDAwMFow +dTELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRYwFAYDVQQKDA1NaWNy +b3NlYyBMdGQuMRcwFQYDVQRhDA5WQVRIVS0yMzU4NDQ5NzEiMCAGA1UEAwwZZS1T +emlnbm8gVExTIFJvb3QgQ0EgMjAyMzCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAE +AGgP36J8PKp0iGEKjcJMpQEiFNT3YHdCnAo4YKGMZz6zY+n6kbCLS+Y53wLCMAFS +AL/fjO1ZrTJlqwlZULUZwmgcAOAFX9pQJhzDrAQixTpN7+lXWDajwRlTEArRzT/v +SzUaQ49CE0y5LBqcvjC2xN7cS53kpDzLLtmt3999Cd8ukv+ho2MwYTAPBgNVHRMB +Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUWYQCYlpGePVd3I8K +ECgj3NXW+0UwHwYDVR0jBBgwFoAUWYQCYlpGePVd3I8KECgj3NXW+0UwCgYIKoZI +zj0EAwQDgYsAMIGHAkIBLdqu9S54tma4n7Zwf2Z0z+yOfP7AAXmazlIC58PRDHpt +y7Ve7hekm9sEdu4pKeiv+62sUvTXK9Z3hBC9xdIoaDQCQTV2WnXzkoYI9bIeCvZl +C9p2x1L/Cx6AcCIwwzPbGO2E14vs7dOoY4G1VnxHx1YwlGhza9IuqbnZLBwpvQy6 +uWWL +-----END CERTIFICATE----- diff --git a/venv/lib/python3.12/site-packages/certifi/core.py b/venv/lib/python3.12/site-packages/certifi/core.py new file mode 100644 index 0000000..1c9661c --- /dev/null +++ b/venv/lib/python3.12/site-packages/certifi/core.py @@ -0,0 +1,83 @@ +""" +certifi.py +~~~~~~~~~~ + +This module returns the installation location of cacert.pem or its contents. +""" +import sys +import atexit + +def exit_cacert_ctx() -> None: + _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr] + + +if sys.version_info >= (3, 11): + + from importlib.resources import as_file, files + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the file + # in cases where we're inside of a zipimport situation until someone + # actually calls where(), but we don't want to re-extract the file + # on every call of where(), so we'll do it once then store it in a + # global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you to + # manage the cleanup of this file, so it doesn't actually return a + # path, it returns a context manager that will give you the path + # when you enter it and will do any cleanup when you leave it. In + # the common case of not needing a temporary file, it will just + # return the file system location and the __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = as_file(files("certifi").joinpath("cacert.pem")) + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + atexit.register(exit_cacert_ctx) + + return _CACERT_PATH + + def contents() -> str: + return files("certifi").joinpath("cacert.pem").read_text(encoding="ascii") + +else: + + from importlib.resources import path as get_path, read_text + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the + # file in cases where we're inside of a zipimport situation until + # someone actually calls where(), but we don't want to re-extract + # the file on every call of where(), so we'll do it once then store + # it in a global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you + # to manage the cleanup of this file, so it doesn't actually + # return a path, it returns a context manager that will give + # you the path when you enter it and will do any cleanup when + # you leave it. In the common case of not needing a temporary + # file, it will just return the file system location and the + # __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = get_path("certifi", "cacert.pem") + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + atexit.register(exit_cacert_ctx) + + return _CACERT_PATH + + def contents() -> str: + return read_text("certifi", "cacert.pem", encoding="ascii") diff --git a/venv/lib/python3.12/site-packages/certifi/py.typed b/venv/lib/python3.12/site-packages/certifi/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/INSTALLER b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/METADATA b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/METADATA new file mode 100644 index 0000000..67508e5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/METADATA @@ -0,0 +1,68 @@ +Metadata-Version: 2.4 +Name: cffi +Version: 2.0.0 +Summary: Foreign Function Interface for Python calling C code. +Author: Armin Rigo, Maciej Fijalkowski +Maintainer: Matt Davis, Matt Clay, Matti Picus +License-Expression: MIT +Project-URL: Documentation, https://cffi.readthedocs.io/ +Project-URL: Changelog, https://cffi.readthedocs.io/en/latest/whatsnew.html +Project-URL: Downloads, https://github.com/python-cffi/cffi/releases +Project-URL: Contact, https://groups.google.com/forum/#!forum/python-cffi +Project-URL: Source Code, https://github.com/python-cffi/cffi +Project-URL: Issue Tracker, https://github.com/python-cffi/cffi/issues +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta +Classifier: Programming Language :: Python :: Implementation :: CPython +Requires-Python: >=3.9 +Description-Content-Type: text/markdown +License-File: LICENSE +License-File: AUTHORS +Requires-Dist: pycparser; implementation_name != "PyPy" +Dynamic: license-file + +[![GitHub Actions Status](https://github.com/python-cffi/cffi/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/python-cffi/cffi/actions/workflows/ci.yaml?query=branch%3Amain++) +[![PyPI version](https://img.shields.io/pypi/v/cffi.svg)](https://pypi.org/project/cffi) +[![Read the Docs](https://img.shields.io/badge/docs-latest-blue.svg)][Documentation] + + +CFFI +==== + +Foreign Function Interface for Python calling C code. + +Please see the [Documentation] or uncompiled in the `doc/` subdirectory. + +Download +-------- + +[Download page](https://github.com/python-cffi/cffi/releases) + +Source Code +----------- + +Source code is publicly available on +[GitHub](https://github.com/python-cffi/cffi). + +Contact +------- + +[Mailing list](https://groups.google.com/forum/#!forum/python-cffi) + +Testing/development tips +------------------------ + +After `git clone` or `wget && tar`, we will get a directory called `cffi` or `cffi-x.x.x`. we call it `repo-directory`. To run tests under CPython, run the following in the `repo-directory`: + + pip install pytest + pip install -e . # editable install of CFFI for local development + pytest src/c/ testing/ + +[Documentation]: http://cffi.readthedocs.org/ diff --git a/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/RECORD b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/RECORD new file mode 100644 index 0000000..6f82298 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/RECORD @@ -0,0 +1,49 @@ +_cffi_backend.cpython-312-x86_64-linux-gnu.so,sha256=AGLtw5fn9u4Cmwk3BbGlsXG7VZEvQekABMyEGuRZmcE,348808 +cffi-2.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +cffi-2.0.0.dist-info/METADATA,sha256=uYzn40F68Im8EtXHNBLZs7FoPM-OxzyYbDWsjJvhujk,2559 +cffi-2.0.0.dist-info/RECORD,, +cffi-2.0.0.dist-info/WHEEL,sha256=aSgG0F4rGPZtV0iTEIfy6dtHq6g67Lze3uLfk0vWn88,151 +cffi-2.0.0.dist-info/entry_points.txt,sha256=y6jTxnyeuLnL-XJcDv8uML3n6wyYiGRg8MTp_QGJ9Ho,75 +cffi-2.0.0.dist-info/licenses/AUTHORS,sha256=KmemC7-zN1nWfWRf8TG45ta8TK_CMtdR_Kw-2k0xTMg,208 +cffi-2.0.0.dist-info/licenses/LICENSE,sha256=W6JN3FcGf5JJrdZEw6_EGl1tw34jQz73Wdld83Cwr2M,1123 +cffi-2.0.0.dist-info/top_level.txt,sha256=rE7WR3rZfNKxWI9-jn6hsHCAl7MDkB-FmuQbxWjFehQ,19 +cffi/__init__.py,sha256=-ksBQ7MfDzVvbBlV_ftYBWAmEqfA86ljIzMxzaZeAlI,511 +cffi/__pycache__/__init__.cpython-312.pyc,, +cffi/__pycache__/_imp_emulation.cpython-312.pyc,, +cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc,, +cffi/__pycache__/api.cpython-312.pyc,, +cffi/__pycache__/backend_ctypes.cpython-312.pyc,, +cffi/__pycache__/cffi_opcode.cpython-312.pyc,, +cffi/__pycache__/commontypes.cpython-312.pyc,, +cffi/__pycache__/cparser.cpython-312.pyc,, +cffi/__pycache__/error.cpython-312.pyc,, +cffi/__pycache__/ffiplatform.cpython-312.pyc,, +cffi/__pycache__/lock.cpython-312.pyc,, +cffi/__pycache__/model.cpython-312.pyc,, +cffi/__pycache__/pkgconfig.cpython-312.pyc,, +cffi/__pycache__/recompiler.cpython-312.pyc,, +cffi/__pycache__/setuptools_ext.cpython-312.pyc,, +cffi/__pycache__/vengine_cpy.cpython-312.pyc,, +cffi/__pycache__/vengine_gen.cpython-312.pyc,, +cffi/__pycache__/verifier.cpython-312.pyc,, +cffi/_cffi_errors.h,sha256=zQXt7uR_m8gUW-fI2hJg0KoSkJFwXv8RGUkEDZ177dQ,3908 +cffi/_cffi_include.h,sha256=Exhmgm9qzHWzWivjfTe0D7Xp4rPUkVxdNuwGhMTMzbw,15055 +cffi/_embedding.h,sha256=Ai33FHblE7XSpHOCp8kPcWwN5_9BV14OvN0JVa6ITpw,18786 +cffi/_imp_emulation.py,sha256=RxREG8zAbI2RPGBww90u_5fi8sWdahpdipOoPzkp7C0,2960 +cffi/_shimmed_dist_utils.py,sha256=Bjj2wm8yZbvFvWEx5AEfmqaqZyZFhYfoyLLQHkXZuao,2230 +cffi/api.py,sha256=alBv6hZQkjpmZplBphdaRn2lPO9-CORs_M7ixabvZWI,42169 +cffi/backend_ctypes.py,sha256=h5ZIzLc6BFVXnGyc9xPqZWUS7qGy7yFSDqXe68Sa8z4,42454 +cffi/cffi_opcode.py,sha256=JDV5l0R0_OadBX_uE7xPPTYtMdmpp8I9UYd6av7aiDU,5731 +cffi/commontypes.py,sha256=7N6zPtCFlvxXMWhHV08psUjdYIK2XgsN3yo5dgua_v4,2805 +cffi/cparser.py,sha256=QUTfmlL-aO-MYR8bFGlvAUHc36OQr7XYLe0WLkGFjRo,44790 +cffi/error.py,sha256=v6xTiS4U0kvDcy4h_BDRo5v39ZQuj-IMRYLv5ETddZs,877 +cffi/ffiplatform.py,sha256=avxFjdikYGJoEtmJO7ewVmwG_VEVl6EZ_WaNhZYCqv4,3584 +cffi/lock.py,sha256=l9TTdwMIMpi6jDkJGnQgE9cvTIR7CAntIJr8EGHt3pY,747 +cffi/model.py,sha256=W30UFQZE73jL5Mx5N81YT77us2W2iJjTm0XYfnwz1cg,21797 +cffi/parse_c_type.h,sha256=OdwQfwM9ktq6vlCB43exFQmxDBtj2MBNdK8LYl15tjw,5976 +cffi/pkgconfig.py,sha256=LP1w7vmWvmKwyqLaU1Z243FOWGNQMrgMUZrvgFuOlco,4374 +cffi/recompiler.py,sha256=78J6lMEEOygXNmjN9-fOFFO3j7eW-iFxSrxfvQb54bY,65509 +cffi/setuptools_ext.py,sha256=0rCwBJ1W7FHWtiMKfNXsSST88V8UXrui5oeXFlDNLG8,9411 +cffi/vengine_cpy.py,sha256=oyQKD23kpE0aChUKA8Jg0e723foPiYzLYEdb-J0MiNs,43881 +cffi/vengine_gen.py,sha256=DUlEIrDiVin1Pnhn1sfoamnS5NLqfJcOdhRoeSNeJRg,26939 +cffi/verifier.py,sha256=oX8jpaohg2Qm3aHcznidAdvrVm5N4sQYG0a3Eo5mIl4,11182 diff --git a/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/WHEEL b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/WHEEL new file mode 100644 index 0000000..e21e9f2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.9.0) +Root-Is-Purelib: false +Tag: cp312-cp312-manylinux_2_17_x86_64 +Tag: cp312-cp312-manylinux2014_x86_64 + diff --git a/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/entry_points.txt b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/entry_points.txt new file mode 100644 index 0000000..4b0274f --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[distutils.setup_keywords] +cffi_modules = cffi.setuptools_ext:cffi_modules diff --git a/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/AUTHORS b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/AUTHORS new file mode 100644 index 0000000..370a25d --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/AUTHORS @@ -0,0 +1,8 @@ +This package has been mostly done by Armin Rigo with help from +Maciej Fijałkowski. The idea is heavily based (although not directly +copied) from LuaJIT ffi by Mike Pall. + + +Other contributors: + + Google Inc. diff --git a/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/LICENSE b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/LICENSE new file mode 100644 index 0000000..0a1dbfb --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/licenses/LICENSE @@ -0,0 +1,23 @@ + +Except when otherwise stated (look for LICENSE files in directories or +information at the beginning of each file) all software and +documentation is licensed as follows: + + MIT No Attribution + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the + Software is furnished to do so. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + diff --git a/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/top_level.txt b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/top_level.txt new file mode 100644 index 0000000..f645779 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi-2.0.0.dist-info/top_level.txt @@ -0,0 +1,2 @@ +_cffi_backend +cffi diff --git a/venv/lib/python3.12/site-packages/cffi/__init__.py b/venv/lib/python3.12/site-packages/cffi/__init__.py new file mode 100644 index 0000000..c99ec3d --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/__init__.py @@ -0,0 +1,14 @@ +__all__ = ['FFI', 'VerificationError', 'VerificationMissing', 'CDefError', + 'FFIError'] + +from .api import FFI +from .error import CDefError, FFIError, VerificationError, VerificationMissing +from .error import PkgConfigError + +__version__ = "2.0.0" +__version_info__ = (2, 0, 0) + +# The verifier module file names are based on the CRC32 of a string that +# contains the following version number. It may be older than __version__ +# if nothing is clearly incompatible. +__version_verifier_modules__ = "0.8.6" diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..6f12942 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/_imp_emulation.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/_imp_emulation.cpython-312.pyc new file mode 100644 index 0000000..9998670 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/_imp_emulation.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc new file mode 100644 index 0000000..3cc3765 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/api.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/api.cpython-312.pyc new file mode 100644 index 0000000..4ba7e4a Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/api.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/backend_ctypes.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/backend_ctypes.cpython-312.pyc new file mode 100644 index 0000000..c4fecd0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/backend_ctypes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/cffi_opcode.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/cffi_opcode.cpython-312.pyc new file mode 100644 index 0000000..68de41c Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/cffi_opcode.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/commontypes.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/commontypes.cpython-312.pyc new file mode 100644 index 0000000..493546a Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/commontypes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/cparser.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/cparser.cpython-312.pyc new file mode 100644 index 0000000..a350088 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/cparser.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/error.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/error.cpython-312.pyc new file mode 100644 index 0000000..84f1d4b Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/error.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/ffiplatform.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/ffiplatform.cpython-312.pyc new file mode 100644 index 0000000..1909618 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/ffiplatform.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/lock.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/lock.cpython-312.pyc new file mode 100644 index 0000000..7bcebf1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/lock.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/model.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/model.cpython-312.pyc new file mode 100644 index 0000000..01dde62 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/model.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/pkgconfig.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/pkgconfig.cpython-312.pyc new file mode 100644 index 0000000..2b15628 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/pkgconfig.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/recompiler.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/recompiler.cpython-312.pyc new file mode 100644 index 0000000..01d2d8c Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/recompiler.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/setuptools_ext.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/setuptools_ext.cpython-312.pyc new file mode 100644 index 0000000..d5c1e25 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/setuptools_ext.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/vengine_cpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/vengine_cpy.cpython-312.pyc new file mode 100644 index 0000000..b6ba59f Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/vengine_cpy.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/vengine_gen.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/vengine_gen.cpython-312.pyc new file mode 100644 index 0000000..ee14c22 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/vengine_gen.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/__pycache__/verifier.cpython-312.pyc b/venv/lib/python3.12/site-packages/cffi/__pycache__/verifier.cpython-312.pyc new file mode 100644 index 0000000..a7ac872 Binary files /dev/null and b/venv/lib/python3.12/site-packages/cffi/__pycache__/verifier.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/cffi/_cffi_errors.h b/venv/lib/python3.12/site-packages/cffi/_cffi_errors.h new file mode 100644 index 0000000..158e059 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/_cffi_errors.h @@ -0,0 +1,149 @@ +#ifndef CFFI_MESSAGEBOX +# ifdef _MSC_VER +# define CFFI_MESSAGEBOX 1 +# else +# define CFFI_MESSAGEBOX 0 +# endif +#endif + + +#if CFFI_MESSAGEBOX +/* Windows only: logic to take the Python-CFFI embedding logic + initialization errors and display them in a background thread + with MessageBox. The idea is that if the whole program closes + as a result of this problem, then likely it is already a console + program and you can read the stderr output in the console too. + If it is not a console program, then it will likely show its own + dialog to complain, or generally not abruptly close, and for this + case the background thread should stay alive. +*/ +static void *volatile _cffi_bootstrap_text; + +static PyObject *_cffi_start_error_capture(void) +{ + PyObject *result = NULL; + PyObject *x, *m, *bi; + + if (InterlockedCompareExchangePointer(&_cffi_bootstrap_text, + (void *)1, NULL) != NULL) + return (PyObject *)1; + + m = PyImport_AddModule("_cffi_error_capture"); + if (m == NULL) + goto error; + + result = PyModule_GetDict(m); + if (result == NULL) + goto error; + +#if PY_MAJOR_VERSION >= 3 + bi = PyImport_ImportModule("builtins"); +#else + bi = PyImport_ImportModule("__builtin__"); +#endif + if (bi == NULL) + goto error; + PyDict_SetItemString(result, "__builtins__", bi); + Py_DECREF(bi); + + x = PyRun_String( + "import sys\n" + "class FileLike:\n" + " def write(self, x):\n" + " try:\n" + " of.write(x)\n" + " except: pass\n" + " self.buf += x\n" + " def flush(self):\n" + " pass\n" + "fl = FileLike()\n" + "fl.buf = ''\n" + "of = sys.stderr\n" + "sys.stderr = fl\n" + "def done():\n" + " sys.stderr = of\n" + " return fl.buf\n", /* make sure the returned value stays alive */ + Py_file_input, + result, result); + Py_XDECREF(x); + + error: + if (PyErr_Occurred()) + { + PyErr_WriteUnraisable(Py_None); + PyErr_Clear(); + } + return result; +} + +#pragma comment(lib, "user32.lib") + +static DWORD WINAPI _cffi_bootstrap_dialog(LPVOID ignored) +{ + Sleep(666); /* may be interrupted if the whole process is closing */ +#if PY_MAJOR_VERSION >= 3 + MessageBoxW(NULL, (wchar_t *)_cffi_bootstrap_text, + L"Python-CFFI error", + MB_OK | MB_ICONERROR); +#else + MessageBoxA(NULL, (char *)_cffi_bootstrap_text, + "Python-CFFI error", + MB_OK | MB_ICONERROR); +#endif + _cffi_bootstrap_text = NULL; + return 0; +} + +static void _cffi_stop_error_capture(PyObject *ecap) +{ + PyObject *s; + void *text; + + if (ecap == (PyObject *)1) + return; + + if (ecap == NULL) + goto error; + + s = PyRun_String("done()", Py_eval_input, ecap, ecap); + if (s == NULL) + goto error; + + /* Show a dialog box, but in a background thread, and + never show multiple dialog boxes at once. */ +#if PY_MAJOR_VERSION >= 3 + text = PyUnicode_AsWideCharString(s, NULL); +#else + text = PyString_AsString(s); +#endif + + _cffi_bootstrap_text = text; + + if (text != NULL) + { + HANDLE h; + h = CreateThread(NULL, 0, _cffi_bootstrap_dialog, + NULL, 0, NULL); + if (h != NULL) + CloseHandle(h); + } + /* decref the string, but it should stay alive as 'fl.buf' + in the small module above. It will really be freed only if + we later get another similar error. So it's a leak of at + most one copy of the small module. That's fine for this + situation which is usually a "fatal error" anyway. */ + Py_DECREF(s); + PyErr_Clear(); + return; + + error: + _cffi_bootstrap_text = NULL; + PyErr_Clear(); +} + +#else + +static PyObject *_cffi_start_error_capture(void) { return NULL; } +static void _cffi_stop_error_capture(PyObject *ecap) { } + +#endif diff --git a/venv/lib/python3.12/site-packages/cffi/_cffi_include.h b/venv/lib/python3.12/site-packages/cffi/_cffi_include.h new file mode 100644 index 0000000..908a1d7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/_cffi_include.h @@ -0,0 +1,389 @@ +#define _CFFI_ + +/* We try to define Py_LIMITED_API before including Python.h. + + Mess: we can only define it if Py_DEBUG, Py_TRACE_REFS and + Py_REF_DEBUG are not defined. This is a best-effort approximation: + we can learn about Py_DEBUG from pyconfig.h, but it is unclear if + the same works for the other two macros. Py_DEBUG implies them, + but not the other way around. + + The implementation is messy (issue #350): on Windows, with _MSC_VER, + we have to define Py_LIMITED_API even before including pyconfig.h. + In that case, we guess what pyconfig.h will do to the macros above, + and check our guess after the #include. + + Note that on Windows, with CPython 3.x, you need >= 3.5 and virtualenv + version >= 16.0.0. With older versions of either, you don't get a + copy of PYTHON3.DLL in the virtualenv. We can't check the version of + CPython *before* we even include pyconfig.h. ffi.set_source() puts + a ``#define _CFFI_NO_LIMITED_API'' at the start of this file if it is + running on Windows < 3.5, as an attempt at fixing it, but that's + arguably wrong because it may not be the target version of Python. + Still better than nothing I guess. As another workaround, you can + remove the definition of Py_LIMITED_API here. + + See also 'py_limited_api' in cffi/setuptools_ext.py. +*/ +#if !defined(_CFFI_USE_EMBEDDING) && !defined(Py_LIMITED_API) +# ifdef _MSC_VER +# if !defined(_DEBUG) && !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) && !defined(_CFFI_NO_LIMITED_API) +# define Py_LIMITED_API +# endif +# include + /* sanity-check: Py_LIMITED_API will cause crashes if any of these + are also defined. Normally, the Python file PC/pyconfig.h does not + cause any of these to be defined, with the exception that _DEBUG + causes Py_DEBUG. Double-check that. */ +# ifdef Py_LIMITED_API +# if defined(Py_DEBUG) +# error "pyconfig.h unexpectedly defines Py_DEBUG, but Py_LIMITED_API is set" +# endif +# if defined(Py_TRACE_REFS) +# error "pyconfig.h unexpectedly defines Py_TRACE_REFS, but Py_LIMITED_API is set" +# endif +# if defined(Py_REF_DEBUG) +# error "pyconfig.h unexpectedly defines Py_REF_DEBUG, but Py_LIMITED_API is set" +# endif +# endif +# else +# include +# if !defined(Py_DEBUG) && !defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) && !defined(_CFFI_NO_LIMITED_API) +# define Py_LIMITED_API +# endif +# endif +#endif + +#include +#ifdef __cplusplus +extern "C" { +#endif +#include +#include "parse_c_type.h" + +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py + and cffi/_cffi_include.h */ +#if defined(_MSC_VER) +# include /* for alloca() */ +# if _MSC_VER < 1600 /* MSVC < 2010 */ + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int_least8_t; + typedef __int16 int_least16_t; + typedef __int32 int_least32_t; + typedef __int64 int_least64_t; + typedef unsigned __int8 uint_least8_t; + typedef unsigned __int16 uint_least16_t; + typedef unsigned __int32 uint_least32_t; + typedef unsigned __int64 uint_least64_t; + typedef __int8 int_fast8_t; + typedef __int16 int_fast16_t; + typedef __int32 int_fast32_t; + typedef __int64 int_fast64_t; + typedef unsigned __int8 uint_fast8_t; + typedef unsigned __int16 uint_fast16_t; + typedef unsigned __int32 uint_fast32_t; + typedef unsigned __int64 uint_fast64_t; + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; +# else +# include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ +# ifndef __cplusplus + typedef unsigned char _Bool; +# endif +# endif +# define _cffi_float_complex_t _Fcomplex /* include for it */ +# define _cffi_double_complex_t _Dcomplex /* include for it */ +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) +# include +# endif +# define _cffi_float_complex_t float _Complex +# define _cffi_double_complex_t double _Complex +#endif + +#ifdef __GNUC__ +# define _CFFI_UNUSED_FN __attribute__((unused)) +#else +# define _CFFI_UNUSED_FN /* nothing */ +#endif + +#ifdef __cplusplus +# ifndef _Bool + typedef bool _Bool; /* semi-hackish: C++ has no _Bool; bool is builtin */ +# endif +#endif + +/********** CPython-specific section **********/ +#ifndef PYPY_VERSION + + +#if PY_MAJOR_VERSION >= 3 +# define PyInt_FromLong PyLong_FromLong +#endif + +#define _cffi_from_c_double PyFloat_FromDouble +#define _cffi_from_c_float PyFloat_FromDouble +#define _cffi_from_c_long PyInt_FromLong +#define _cffi_from_c_ulong PyLong_FromUnsignedLong +#define _cffi_from_c_longlong PyLong_FromLongLong +#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong +#define _cffi_from_c__Bool PyBool_FromLong + +#define _cffi_to_c_double PyFloat_AsDouble +#define _cffi_to_c_float PyFloat_AsDouble + +#define _cffi_from_c_int(x, type) \ + (((type)-1) > 0 ? /* unsigned */ \ + (sizeof(type) < sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + sizeof(type) == sizeof(long) ? \ + PyLong_FromUnsignedLong((unsigned long)x) : \ + PyLong_FromUnsignedLongLong((unsigned long long)x)) : \ + (sizeof(type) <= sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + PyLong_FromLongLong((long long)x))) + +#define _cffi_to_c_int(o, type) \ + ((type)( \ + sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \ + : (type)_cffi_to_c_i8(o)) : \ + sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \ + : (type)_cffi_to_c_i16(o)) : \ + sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \ + : (type)_cffi_to_c_i32(o)) : \ + sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \ + : (type)_cffi_to_c_i64(o)) : \ + (Py_FatalError("unsupported size for type " #type), (type)0))) + +#define _cffi_to_c_i8 \ + ((int(*)(PyObject *))_cffi_exports[1]) +#define _cffi_to_c_u8 \ + ((int(*)(PyObject *))_cffi_exports[2]) +#define _cffi_to_c_i16 \ + ((int(*)(PyObject *))_cffi_exports[3]) +#define _cffi_to_c_u16 \ + ((int(*)(PyObject *))_cffi_exports[4]) +#define _cffi_to_c_i32 \ + ((int(*)(PyObject *))_cffi_exports[5]) +#define _cffi_to_c_u32 \ + ((unsigned int(*)(PyObject *))_cffi_exports[6]) +#define _cffi_to_c_i64 \ + ((long long(*)(PyObject *))_cffi_exports[7]) +#define _cffi_to_c_u64 \ + ((unsigned long long(*)(PyObject *))_cffi_exports[8]) +#define _cffi_to_c_char \ + ((int(*)(PyObject *))_cffi_exports[9]) +#define _cffi_from_c_pointer \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[10]) +#define _cffi_to_c_pointer \ + ((char *(*)(PyObject *, struct _cffi_ctypedescr *))_cffi_exports[11]) +#define _cffi_get_struct_layout \ + not used any more +#define _cffi_restore_errno \ + ((void(*)(void))_cffi_exports[13]) +#define _cffi_save_errno \ + ((void(*)(void))_cffi_exports[14]) +#define _cffi_from_c_char \ + ((PyObject *(*)(char))_cffi_exports[15]) +#define _cffi_from_c_deref \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[16]) +#define _cffi_to_c \ + ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[17]) +#define _cffi_from_c_struct \ + ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[18]) +#define _cffi_to_c_wchar_t \ + ((_cffi_wchar_t(*)(PyObject *))_cffi_exports[19]) +#define _cffi_from_c_wchar_t \ + ((PyObject *(*)(_cffi_wchar_t))_cffi_exports[20]) +#define _cffi_to_c_long_double \ + ((long double(*)(PyObject *))_cffi_exports[21]) +#define _cffi_to_c__Bool \ + ((_Bool(*)(PyObject *))_cffi_exports[22]) +#define _cffi_prepare_pointer_call_argument \ + ((Py_ssize_t(*)(struct _cffi_ctypedescr *, \ + PyObject *, char **))_cffi_exports[23]) +#define _cffi_convert_array_from_object \ + ((int(*)(char *, struct _cffi_ctypedescr *, PyObject *))_cffi_exports[24]) +#define _CFFI_CPIDX 25 +#define _cffi_call_python \ + ((void(*)(struct _cffi_externpy_s *, char *))_cffi_exports[_CFFI_CPIDX]) +#define _cffi_to_c_wchar3216_t \ + ((int(*)(PyObject *))_cffi_exports[26]) +#define _cffi_from_c_wchar3216_t \ + ((PyObject *(*)(int))_cffi_exports[27]) +#define _CFFI_NUM_EXPORTS 28 + +struct _cffi_ctypedescr; + +static void *_cffi_exports[_CFFI_NUM_EXPORTS]; + +#define _cffi_type(index) ( \ + assert((((uintptr_t)_cffi_types[index]) & 1) == 0), \ + (struct _cffi_ctypedescr *)_cffi_types[index]) + +static PyObject *_cffi_init(const char *module_name, Py_ssize_t version, + const struct _cffi_type_context_s *ctx) +{ + PyObject *module, *o_arg, *new_module; + void *raw[] = { + (void *)module_name, + (void *)version, + (void *)_cffi_exports, + (void *)ctx, + }; + + module = PyImport_ImportModule("_cffi_backend"); + if (module == NULL) + goto failure; + + o_arg = PyLong_FromVoidPtr((void *)raw); + if (o_arg == NULL) + goto failure; + + new_module = PyObject_CallMethod( + module, (char *)"_init_cffi_1_0_external_module", (char *)"O", o_arg); + + Py_DECREF(o_arg); + Py_DECREF(module); + return new_module; + + failure: + Py_XDECREF(module); + return NULL; +} + + +#ifdef HAVE_WCHAR_H +typedef wchar_t _cffi_wchar_t; +#else +typedef uint16_t _cffi_wchar_t; /* same random pick as _cffi_backend.c */ +#endif + +_CFFI_UNUSED_FN static uint16_t _cffi_to_c_char16_t(PyObject *o) +{ + if (sizeof(_cffi_wchar_t) == 2) + return (uint16_t)_cffi_to_c_wchar_t(o); + else + return (uint16_t)_cffi_to_c_wchar3216_t(o); +} + +_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char16_t(uint16_t x) +{ + if (sizeof(_cffi_wchar_t) == 2) + return _cffi_from_c_wchar_t((_cffi_wchar_t)x); + else + return _cffi_from_c_wchar3216_t((int)x); +} + +_CFFI_UNUSED_FN static int _cffi_to_c_char32_t(PyObject *o) +{ + if (sizeof(_cffi_wchar_t) == 4) + return (int)_cffi_to_c_wchar_t(o); + else + return (int)_cffi_to_c_wchar3216_t(o); +} + +_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char32_t(unsigned int x) +{ + if (sizeof(_cffi_wchar_t) == 4) + return _cffi_from_c_wchar_t((_cffi_wchar_t)x); + else + return _cffi_from_c_wchar3216_t((int)x); +} + +union _cffi_union_alignment_u { + unsigned char m_char; + unsigned short m_short; + unsigned int m_int; + unsigned long m_long; + unsigned long long m_longlong; + float m_float; + double m_double; + long double m_longdouble; +}; + +struct _cffi_freeme_s { + struct _cffi_freeme_s *next; + union _cffi_union_alignment_u alignment; +}; + +_CFFI_UNUSED_FN static int +_cffi_convert_array_argument(struct _cffi_ctypedescr *ctptr, PyObject *arg, + char **output_data, Py_ssize_t datasize, + struct _cffi_freeme_s **freeme) +{ + char *p; + if (datasize < 0) + return -1; + + p = *output_data; + if (p == NULL) { + struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc( + offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize); + if (fp == NULL) + return -1; + fp->next = *freeme; + *freeme = fp; + p = *output_data = (char *)&fp->alignment; + } + memset((void *)p, 0, (size_t)datasize); + return _cffi_convert_array_from_object(p, ctptr, arg); +} + +_CFFI_UNUSED_FN static void +_cffi_free_array_arguments(struct _cffi_freeme_s *freeme) +{ + do { + void *p = (void *)freeme; + freeme = freeme->next; + PyObject_Free(p); + } while (freeme != NULL); +} + +/********** end CPython-specific section **********/ +#else +_CFFI_UNUSED_FN +static void (*_cffi_call_python_org)(struct _cffi_externpy_s *, char *); +# define _cffi_call_python _cffi_call_python_org +#endif + + +#define _cffi_array_len(array) (sizeof(array) / sizeof((array)[0])) + +#define _cffi_prim_int(size, sign) \ + ((size) == 1 ? ((sign) ? _CFFI_PRIM_INT8 : _CFFI_PRIM_UINT8) : \ + (size) == 2 ? ((sign) ? _CFFI_PRIM_INT16 : _CFFI_PRIM_UINT16) : \ + (size) == 4 ? ((sign) ? _CFFI_PRIM_INT32 : _CFFI_PRIM_UINT32) : \ + (size) == 8 ? ((sign) ? _CFFI_PRIM_INT64 : _CFFI_PRIM_UINT64) : \ + _CFFI__UNKNOWN_PRIM) + +#define _cffi_prim_float(size) \ + ((size) == sizeof(float) ? _CFFI_PRIM_FLOAT : \ + (size) == sizeof(double) ? _CFFI_PRIM_DOUBLE : \ + (size) == sizeof(long double) ? _CFFI__UNKNOWN_LONG_DOUBLE : \ + _CFFI__UNKNOWN_FLOAT_PRIM) + +#define _cffi_check_int(got, got_nonpos, expected) \ + ((got_nonpos) == (expected <= 0) && \ + (got) == (unsigned long long)expected) + +#ifdef MS_WIN32 +# define _cffi_stdcall __stdcall +#else +# define _cffi_stdcall /* nothing */ +#endif + +#ifdef __cplusplus +} +#endif diff --git a/venv/lib/python3.12/site-packages/cffi/_embedding.h b/venv/lib/python3.12/site-packages/cffi/_embedding.h new file mode 100644 index 0000000..64c04f6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/_embedding.h @@ -0,0 +1,550 @@ + +/***** Support code for embedding *****/ + +#ifdef __cplusplus +extern "C" { +#endif + + +#if defined(_WIN32) +# define CFFI_DLLEXPORT __declspec(dllexport) +#elif defined(__GNUC__) +# define CFFI_DLLEXPORT __attribute__((visibility("default"))) +#else +# define CFFI_DLLEXPORT /* nothing */ +#endif + + +/* There are two global variables of type _cffi_call_python_fnptr: + + * _cffi_call_python, which we declare just below, is the one called + by ``extern "Python"`` implementations. + + * _cffi_call_python_org, which on CPython is actually part of the + _cffi_exports[] array, is the function pointer copied from + _cffi_backend. If _cffi_start_python() fails, then this is set + to NULL; otherwise, it should never be NULL. + + After initialization is complete, both are equal. However, the + first one remains equal to &_cffi_start_and_call_python until the + very end of initialization, when we are (or should be) sure that + concurrent threads also see a completely initialized world, and + only then is it changed. +*/ +#undef _cffi_call_python +typedef void (*_cffi_call_python_fnptr)(struct _cffi_externpy_s *, char *); +static void _cffi_start_and_call_python(struct _cffi_externpy_s *, char *); +static _cffi_call_python_fnptr _cffi_call_python = &_cffi_start_and_call_python; + + +#ifndef _MSC_VER + /* --- Assuming a GCC not infinitely old --- */ +# define cffi_compare_and_swap(l,o,n) __sync_bool_compare_and_swap(l,o,n) +# define cffi_write_barrier() __sync_synchronize() +# if !defined(__amd64__) && !defined(__x86_64__) && \ + !defined(__i386__) && !defined(__i386) +# define cffi_read_barrier() __sync_synchronize() +# else +# define cffi_read_barrier() (void)0 +# endif +#else + /* --- Windows threads version --- */ +# include +# define cffi_compare_and_swap(l,o,n) \ + (InterlockedCompareExchangePointer(l,n,o) == (o)) +# define cffi_write_barrier() InterlockedCompareExchange(&_cffi_dummy,0,0) +# define cffi_read_barrier() (void)0 +static volatile LONG _cffi_dummy; +#endif + +#ifdef WITH_THREAD +# ifndef _MSC_VER +# include + static pthread_mutex_t _cffi_embed_startup_lock; +# else + static CRITICAL_SECTION _cffi_embed_startup_lock; +# endif + static char _cffi_embed_startup_lock_ready = 0; +#endif + +static void _cffi_acquire_reentrant_mutex(void) +{ + static void *volatile lock = NULL; + + while (!cffi_compare_and_swap(&lock, NULL, (void *)1)) { + /* should ideally do a spin loop instruction here, but + hard to do it portably and doesn't really matter I + think: pthread_mutex_init() should be very fast, and + this is only run at start-up anyway. */ + } + +#ifdef WITH_THREAD + if (!_cffi_embed_startup_lock_ready) { +# ifndef _MSC_VER + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&_cffi_embed_startup_lock, &attr); +# else + InitializeCriticalSection(&_cffi_embed_startup_lock); +# endif + _cffi_embed_startup_lock_ready = 1; + } +#endif + + while (!cffi_compare_and_swap(&lock, (void *)1, NULL)) + ; + +#ifndef _MSC_VER + pthread_mutex_lock(&_cffi_embed_startup_lock); +#else + EnterCriticalSection(&_cffi_embed_startup_lock); +#endif +} + +static void _cffi_release_reentrant_mutex(void) +{ +#ifndef _MSC_VER + pthread_mutex_unlock(&_cffi_embed_startup_lock); +#else + LeaveCriticalSection(&_cffi_embed_startup_lock); +#endif +} + + +/********** CPython-specific section **********/ +#ifndef PYPY_VERSION + +#include "_cffi_errors.h" + + +#define _cffi_call_python_org _cffi_exports[_CFFI_CPIDX] + +PyMODINIT_FUNC _CFFI_PYTHON_STARTUP_FUNC(void); /* forward */ + +static void _cffi_py_initialize(void) +{ + /* XXX use initsigs=0, which "skips initialization registration of + signal handlers, which might be useful when Python is + embedded" according to the Python docs. But review and think + if it should be a user-controllable setting. + + XXX we should also give a way to write errors to a buffer + instead of to stderr. + + XXX if importing 'site' fails, CPython (any version) calls + exit(). Should we try to work around this behavior here? + */ + Py_InitializeEx(0); +} + +static int _cffi_initialize_python(void) +{ + /* This initializes Python, imports _cffi_backend, and then the + present .dll/.so is set up as a CPython C extension module. + */ + int result; + PyGILState_STATE state; + PyObject *pycode=NULL, *global_dict=NULL, *x; + PyObject *builtins; + + state = PyGILState_Ensure(); + + /* Call the initxxx() function from the present module. It will + create and initialize us as a CPython extension module, instead + of letting the startup Python code do it---it might reimport + the same .dll/.so and get maybe confused on some platforms. + It might also have troubles locating the .dll/.so again for all + I know. + */ + (void)_CFFI_PYTHON_STARTUP_FUNC(); + if (PyErr_Occurred()) + goto error; + + /* Now run the Python code provided to ffi.embedding_init_code(). + */ + pycode = Py_CompileString(_CFFI_PYTHON_STARTUP_CODE, + "", + Py_file_input); + if (pycode == NULL) + goto error; + global_dict = PyDict_New(); + if (global_dict == NULL) + goto error; + builtins = PyEval_GetBuiltins(); + if (builtins == NULL) + goto error; + if (PyDict_SetItemString(global_dict, "__builtins__", builtins) < 0) + goto error; + x = PyEval_EvalCode( +#if PY_MAJOR_VERSION < 3 + (PyCodeObject *) +#endif + pycode, global_dict, global_dict); + if (x == NULL) + goto error; + Py_DECREF(x); + + /* Done! Now if we've been called from + _cffi_start_and_call_python() in an ``extern "Python"``, we can + only hope that the Python code did correctly set up the + corresponding @ffi.def_extern() function. Otherwise, the + general logic of ``extern "Python"`` functions (inside the + _cffi_backend module) will find that the reference is still + missing and print an error. + */ + result = 0; + done: + Py_XDECREF(pycode); + Py_XDECREF(global_dict); + PyGILState_Release(state); + return result; + + error:; + { + /* Print as much information as potentially useful. + Debugging load-time failures with embedding is not fun + */ + PyObject *ecap; + PyObject *exception, *v, *tb, *f, *modules, *mod; + PyErr_Fetch(&exception, &v, &tb); + ecap = _cffi_start_error_capture(); + f = PySys_GetObject((char *)"stderr"); + if (f != NULL && f != Py_None) { + PyFile_WriteString( + "Failed to initialize the Python-CFFI embedding logic:\n\n", f); + } + + if (exception != NULL) { + PyErr_NormalizeException(&exception, &v, &tb); + PyErr_Display(exception, v, tb); + } + Py_XDECREF(exception); + Py_XDECREF(v); + Py_XDECREF(tb); + + if (f != NULL && f != Py_None) { + PyFile_WriteString("\nFrom: " _CFFI_MODULE_NAME + "\ncompiled with cffi version: 2.0.0" + "\n_cffi_backend module: ", f); + modules = PyImport_GetModuleDict(); + mod = PyDict_GetItemString(modules, "_cffi_backend"); + if (mod == NULL) { + PyFile_WriteString("not loaded", f); + } + else { + v = PyObject_GetAttrString(mod, "__file__"); + PyFile_WriteObject(v, f, 0); + Py_XDECREF(v); + } + PyFile_WriteString("\nsys.path: ", f); + PyFile_WriteObject(PySys_GetObject((char *)"path"), f, 0); + PyFile_WriteString("\n\n", f); + } + _cffi_stop_error_capture(ecap); + } + result = -1; + goto done; +} + +#if PY_VERSION_HEX < 0x03080000 +PyAPI_DATA(char *) _PyParser_TokenNames[]; /* from CPython */ +#endif + +static int _cffi_carefully_make_gil(void) +{ + /* This does the basic initialization of Python. It can be called + completely concurrently from unrelated threads. It assumes + that we don't hold the GIL before (if it exists), and we don't + hold it afterwards. + + (What it really does used to be completely different in Python 2 + and Python 3, with the Python 2 solution avoiding the spin-lock + around the Py_InitializeEx() call. However, after recent changes + to CPython 2.7 (issue #358) it no longer works. So we use the + Python 3 solution everywhere.) + + This initializes Python by calling Py_InitializeEx(). + Important: this must not be called concurrently at all. + So we use a global variable as a simple spin lock. This global + variable must be from 'libpythonX.Y.so', not from this + cffi-based extension module, because it must be shared from + different cffi-based extension modules. + + In Python < 3.8, we choose + _PyParser_TokenNames[0] as a completely arbitrary pointer value + that is never written to. The default is to point to the + string "ENDMARKER". We change it temporarily to point to the + next character in that string. (Yes, I know it's REALLY + obscure.) + + In Python >= 3.8, this string array is no longer writable, so + instead we pick PyCapsuleType.tp_version_tag. We can't change + Python < 3.8 because someone might use a mixture of cffi + embedded modules, some of which were compiled before this file + changed. + + In Python >= 3.12, this stopped working because that particular + tp_version_tag gets modified during interpreter startup. It's + arguably a bad idea before 3.12 too, but again we can't change + that because someone might use a mixture of cffi embedded + modules, and no-one reported a bug so far. In Python >= 3.12 + we go instead for PyCapsuleType.tp_as_buffer, which is supposed + to always be NULL. We write to it temporarily a pointer to + a struct full of NULLs, which is semantically the same. + */ + +#ifdef WITH_THREAD +# if PY_VERSION_HEX < 0x03080000 + char *volatile *lock = (char *volatile *)_PyParser_TokenNames; + char *old_value, *locked_value; + + while (1) { /* spin loop */ + old_value = *lock; + locked_value = old_value + 1; + if (old_value[0] == 'E') { + assert(old_value[1] == 'N'); + if (cffi_compare_and_swap(lock, old_value, locked_value)) + break; + } + else { + assert(old_value[0] == 'N'); + /* should ideally do a spin loop instruction here, but + hard to do it portably and doesn't really matter I + think: PyEval_InitThreads() should be very fast, and + this is only run at start-up anyway. */ + } + } +# else +# if PY_VERSION_HEX < 0x030C0000 + int volatile *lock = (int volatile *)&PyCapsule_Type.tp_version_tag; + int old_value, locked_value = -42; + assert(!(PyCapsule_Type.tp_flags & Py_TPFLAGS_HAVE_VERSION_TAG)); +# else + static struct ebp_s { PyBufferProcs buf; int mark; } empty_buffer_procs; + empty_buffer_procs.mark = -42; + PyBufferProcs *volatile *lock = (PyBufferProcs *volatile *) + &PyCapsule_Type.tp_as_buffer; + PyBufferProcs *old_value, *locked_value = &empty_buffer_procs.buf; +# endif + + while (1) { /* spin loop */ + old_value = *lock; + if (old_value == 0) { + if (cffi_compare_and_swap(lock, old_value, locked_value)) + break; + } + else { +# if PY_VERSION_HEX < 0x030C0000 + assert(old_value == locked_value); +# else + /* The pointer should point to a possibly different + empty_buffer_procs from another C extension module */ + assert(((struct ebp_s *)old_value)->mark == -42); +# endif + /* should ideally do a spin loop instruction here, but + hard to do it portably and doesn't really matter I + think: PyEval_InitThreads() should be very fast, and + this is only run at start-up anyway. */ + } + } +# endif +#endif + + /* call Py_InitializeEx() */ + if (!Py_IsInitialized()) { + _cffi_py_initialize(); +#if PY_VERSION_HEX < 0x03070000 + PyEval_InitThreads(); +#endif + PyEval_SaveThread(); /* release the GIL */ + /* the returned tstate must be the one that has been stored into the + autoTLSkey by _PyGILState_Init() called from Py_Initialize(). */ + } + else { +#if PY_VERSION_HEX < 0x03070000 + /* PyEval_InitThreads() is always a no-op from CPython 3.7 */ + PyGILState_STATE state = PyGILState_Ensure(); + PyEval_InitThreads(); + PyGILState_Release(state); +#endif + } + +#ifdef WITH_THREAD + /* release the lock */ + while (!cffi_compare_and_swap(lock, locked_value, old_value)) + ; +#endif + + return 0; +} + +/********** end CPython-specific section **********/ + + +#else + + +/********** PyPy-specific section **********/ + +PyMODINIT_FUNC _CFFI_PYTHON_STARTUP_FUNC(const void *[]); /* forward */ + +static struct _cffi_pypy_init_s { + const char *name; + void *func; /* function pointer */ + const char *code; +} _cffi_pypy_init = { + _CFFI_MODULE_NAME, + _CFFI_PYTHON_STARTUP_FUNC, + _CFFI_PYTHON_STARTUP_CODE, +}; + +extern int pypy_carefully_make_gil(const char *); +extern int pypy_init_embedded_cffi_module(int, struct _cffi_pypy_init_s *); + +static int _cffi_carefully_make_gil(void) +{ + return pypy_carefully_make_gil(_CFFI_MODULE_NAME); +} + +static int _cffi_initialize_python(void) +{ + return pypy_init_embedded_cffi_module(0xB011, &_cffi_pypy_init); +} + +/********** end PyPy-specific section **********/ + + +#endif + + +#ifdef __GNUC__ +__attribute__((noinline)) +#endif +static _cffi_call_python_fnptr _cffi_start_python(void) +{ + /* Delicate logic to initialize Python. This function can be + called multiple times concurrently, e.g. when the process calls + its first ``extern "Python"`` functions in multiple threads at + once. It can also be called recursively, in which case we must + ignore it. We also have to consider what occurs if several + different cffi-based extensions reach this code in parallel + threads---it is a different copy of the code, then, and we + can't have any shared global variable unless it comes from + 'libpythonX.Y.so'. + + Idea: + + * _cffi_carefully_make_gil(): "carefully" call + PyEval_InitThreads() (possibly with Py_InitializeEx() first). + + * then we use a (local) custom lock to make sure that a call to this + cffi-based extension will wait if another call to the *same* + extension is running the initialization in another thread. + It is reentrant, so that a recursive call will not block, but + only one from a different thread. + + * then we grab the GIL and (Python 2) we call Py_InitializeEx(). + At this point, concurrent calls to Py_InitializeEx() are not + possible: we have the GIL. + + * do the rest of the specific initialization, which may + temporarily release the GIL but not the custom lock. + Only release the custom lock when we are done. + */ + static char called = 0; + + if (_cffi_carefully_make_gil() != 0) + return NULL; + + _cffi_acquire_reentrant_mutex(); + + /* Here the GIL exists, but we don't have it. We're only protected + from concurrency by the reentrant mutex. */ + + /* This file only initializes the embedded module once, the first + time this is called, even if there are subinterpreters. */ + if (!called) { + called = 1; /* invoke _cffi_initialize_python() only once, + but don't set '_cffi_call_python' right now, + otherwise concurrent threads won't call + this function at all (we need them to wait) */ + if (_cffi_initialize_python() == 0) { + /* now initialization is finished. Switch to the fast-path. */ + + /* We would like nobody to see the new value of + '_cffi_call_python' without also seeing the rest of the + data initialized. However, this is not possible. But + the new value of '_cffi_call_python' is the function + 'cffi_call_python()' from _cffi_backend. So: */ + cffi_write_barrier(); + /* ^^^ we put a write barrier here, and a corresponding + read barrier at the start of cffi_call_python(). This + ensures that after that read barrier, we see everything + done here before the write barrier. + */ + + assert(_cffi_call_python_org != NULL); + _cffi_call_python = (_cffi_call_python_fnptr)_cffi_call_python_org; + } + else { + /* initialization failed. Reset this to NULL, even if it was + already set to some other value. Future calls to + _cffi_start_python() are still forced to occur, and will + always return NULL from now on. */ + _cffi_call_python_org = NULL; + } + } + + _cffi_release_reentrant_mutex(); + + return (_cffi_call_python_fnptr)_cffi_call_python_org; +} + +static +void _cffi_start_and_call_python(struct _cffi_externpy_s *externpy, char *args) +{ + _cffi_call_python_fnptr fnptr; + int current_err = errno; +#ifdef _MSC_VER + int current_lasterr = GetLastError(); +#endif + fnptr = _cffi_start_python(); + if (fnptr == NULL) { + fprintf(stderr, "function %s() called, but initialization code " + "failed. Returning 0.\n", externpy->name); + memset(args, 0, externpy->size_of_result); + } +#ifdef _MSC_VER + SetLastError(current_lasterr); +#endif + errno = current_err; + + if (fnptr != NULL) + fnptr(externpy, args); +} + + +/* The cffi_start_python() function makes sure Python is initialized + and our cffi module is set up. It can be called manually from the + user C code. The same effect is obtained automatically from any + dll-exported ``extern "Python"`` function. This function returns + -1 if initialization failed, 0 if all is OK. */ +_CFFI_UNUSED_FN +static int cffi_start_python(void) +{ + if (_cffi_call_python == &_cffi_start_and_call_python) { + if (_cffi_start_python() == NULL) + return -1; + } + cffi_read_barrier(); + return 0; +} + +#undef cffi_compare_and_swap +#undef cffi_write_barrier +#undef cffi_read_barrier + +#ifdef __cplusplus +} +#endif diff --git a/venv/lib/python3.12/site-packages/cffi/_imp_emulation.py b/venv/lib/python3.12/site-packages/cffi/_imp_emulation.py new file mode 100644 index 0000000..136abdd --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/_imp_emulation.py @@ -0,0 +1,83 @@ + +try: + # this works on Python < 3.12 + from imp import * + +except ImportError: + # this is a limited emulation for Python >= 3.12. + # Note that this is used only for tests or for the old ffi.verify(). + # This is copied from the source code of Python 3.11. + + from _imp import (acquire_lock, release_lock, + is_builtin, is_frozen) + + from importlib._bootstrap import _load + + from importlib import machinery + import os + import sys + import tokenize + + SEARCH_ERROR = 0 + PY_SOURCE = 1 + PY_COMPILED = 2 + C_EXTENSION = 3 + PY_RESOURCE = 4 + PKG_DIRECTORY = 5 + C_BUILTIN = 6 + PY_FROZEN = 7 + PY_CODERESOURCE = 8 + IMP_HOOK = 9 + + def get_suffixes(): + extensions = [(s, 'rb', C_EXTENSION) + for s in machinery.EXTENSION_SUFFIXES] + source = [(s, 'r', PY_SOURCE) for s in machinery.SOURCE_SUFFIXES] + bytecode = [(s, 'rb', PY_COMPILED) for s in machinery.BYTECODE_SUFFIXES] + return extensions + source + bytecode + + def find_module(name, path=None): + if not isinstance(name, str): + raise TypeError("'name' must be a str, not {}".format(type(name))) + elif not isinstance(path, (type(None), list)): + # Backwards-compatibility + raise RuntimeError("'path' must be None or a list, " + "not {}".format(type(path))) + + if path is None: + if is_builtin(name): + return None, None, ('', '', C_BUILTIN) + elif is_frozen(name): + return None, None, ('', '', PY_FROZEN) + else: + path = sys.path + + for entry in path: + package_directory = os.path.join(entry, name) + for suffix in ['.py', machinery.BYTECODE_SUFFIXES[0]]: + package_file_name = '__init__' + suffix + file_path = os.path.join(package_directory, package_file_name) + if os.path.isfile(file_path): + return None, package_directory, ('', '', PKG_DIRECTORY) + for suffix, mode, type_ in get_suffixes(): + file_name = name + suffix + file_path = os.path.join(entry, file_name) + if os.path.isfile(file_path): + break + else: + continue + break # Break out of outer loop when breaking out of inner loop. + else: + raise ImportError(name, name=name) + + encoding = None + if 'b' not in mode: + with open(file_path, 'rb') as file: + encoding = tokenize.detect_encoding(file.readline)[0] + file = open(file_path, mode, encoding=encoding) + return file, file_path, (suffix, mode, type_) + + def load_dynamic(name, path, file=None): + loader = machinery.ExtensionFileLoader(name, path) + spec = machinery.ModuleSpec(name=name, loader=loader, origin=path) + return _load(spec) diff --git a/venv/lib/python3.12/site-packages/cffi/_shimmed_dist_utils.py b/venv/lib/python3.12/site-packages/cffi/_shimmed_dist_utils.py new file mode 100644 index 0000000..c3d2312 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/_shimmed_dist_utils.py @@ -0,0 +1,45 @@ +""" +Temporary shim module to indirect the bits of distutils we need from setuptools/distutils while providing useful +error messages beyond `No module named 'distutils' on Python >= 3.12, or when setuptools' vendored distutils is broken. + +This is a compromise to avoid a hard-dep on setuptools for Python >= 3.12, since many users don't need runtime compilation support from CFFI. +""" +import sys + +try: + # import setuptools first; this is the most robust way to ensure its embedded distutils is available + # (the .pth shim should usually work, but this is even more robust) + import setuptools +except Exception as ex: + if sys.version_info >= (3, 12): + # Python 3.12 has no built-in distutils to fall back on, so any import problem is fatal + raise Exception("This CFFI feature requires setuptools on Python >= 3.12. The setuptools module is missing or non-functional.") from ex + + # silently ignore on older Pythons (support fallback to stdlib distutils where available) +else: + del setuptools + +try: + # bring in just the bits of distutils we need, whether they really came from setuptools or stdlib-embedded distutils + from distutils import log, sysconfig + from distutils.ccompiler import CCompiler + from distutils.command.build_ext import build_ext + from distutils.core import Distribution, Extension + from distutils.dir_util import mkpath + from distutils.errors import DistutilsSetupError, CompileError, LinkError + from distutils.log import set_threshold, set_verbosity + + if sys.platform == 'win32': + try: + # FUTURE: msvc9compiler module was removed in setuptools 74; consider removing, as it's only used by an ancient patch in `recompiler` + from distutils.msvc9compiler import MSVCCompiler + except ImportError: + MSVCCompiler = None +except Exception as ex: + if sys.version_info >= (3, 12): + raise Exception("This CFFI feature requires setuptools on Python >= 3.12. Please install the setuptools package.") from ex + + # anything older, just let the underlying distutils import error fly + raise Exception("This CFFI feature requires distutils. Please install the distutils or setuptools package.") from ex + +del sys diff --git a/venv/lib/python3.12/site-packages/cffi/api.py b/venv/lib/python3.12/site-packages/cffi/api.py new file mode 100644 index 0000000..5a474f3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/api.py @@ -0,0 +1,967 @@ +import sys, types +from .lock import allocate_lock +from .error import CDefError +from . import model + +try: + callable +except NameError: + # Python 3.1 + from collections import Callable + callable = lambda x: isinstance(x, Callable) + +try: + basestring +except NameError: + # Python 3.x + basestring = str + +_unspecified = object() + + + +class FFI(object): + r''' + The main top-level class that you instantiate once, or once per module. + + Example usage: + + ffi = FFI() + ffi.cdef(""" + int printf(const char *, ...); + """) + + C = ffi.dlopen(None) # standard library + -or- + C = ffi.verify() # use a C compiler: verify the decl above is right + + C.printf("hello, %s!\n", ffi.new("char[]", "world")) + ''' + + def __init__(self, backend=None): + """Create an FFI instance. The 'backend' argument is used to + select a non-default backend, mostly for tests. + """ + if backend is None: + # You need PyPy (>= 2.0 beta), or a CPython (>= 2.6) with + # _cffi_backend.so compiled. + import _cffi_backend as backend + from . import __version__ + if backend.__version__ != __version__: + # bad version! Try to be as explicit as possible. + if hasattr(backend, '__file__'): + # CPython + raise Exception("Version mismatch: this is the 'cffi' package version %s, located in %r. When we import the top-level '_cffi_backend' extension module, we get version %s, located in %r. The two versions should be equal; check your installation." % ( + __version__, __file__, + backend.__version__, backend.__file__)) + else: + # PyPy + raise Exception("Version mismatch: this is the 'cffi' package version %s, located in %r. This interpreter comes with a built-in '_cffi_backend' module, which is version %s. The two versions should be equal; check your installation." % ( + __version__, __file__, backend.__version__)) + # (If you insist you can also try to pass the option + # 'backend=backend_ctypes.CTypesBackend()', but don't + # rely on it! It's probably not going to work well.) + + from . import cparser + self._backend = backend + self._lock = allocate_lock() + self._parser = cparser.Parser() + self._cached_btypes = {} + self._parsed_types = types.ModuleType('parsed_types').__dict__ + self._new_types = types.ModuleType('new_types').__dict__ + self._function_caches = [] + self._libraries = [] + self._cdefsources = [] + self._included_ffis = [] + self._windows_unicode = None + self._init_once_cache = {} + self._cdef_version = None + self._embedding = None + self._typecache = model.get_typecache(backend) + if hasattr(backend, 'set_ffi'): + backend.set_ffi(self) + for name in list(backend.__dict__): + if name.startswith('RTLD_'): + setattr(self, name, getattr(backend, name)) + # + with self._lock: + self.BVoidP = self._get_cached_btype(model.voidp_type) + self.BCharA = self._get_cached_btype(model.char_array_type) + if isinstance(backend, types.ModuleType): + # _cffi_backend: attach these constants to the class + if not hasattr(FFI, 'NULL'): + FFI.NULL = self.cast(self.BVoidP, 0) + FFI.CData, FFI.CType = backend._get_types() + else: + # ctypes backend: attach these constants to the instance + self.NULL = self.cast(self.BVoidP, 0) + self.CData, self.CType = backend._get_types() + self.buffer = backend.buffer + + def cdef(self, csource, override=False, packed=False, pack=None): + """Parse the given C source. This registers all declared functions, + types, and global variables. The functions and global variables can + then be accessed via either 'ffi.dlopen()' or 'ffi.verify()'. + The types can be used in 'ffi.new()' and other functions. + If 'packed' is specified as True, all structs declared inside this + cdef are packed, i.e. laid out without any field alignment at all. + Alternatively, 'pack' can be a small integer, and requests for + alignment greater than that are ignored (pack=1 is equivalent to + packed=True). + """ + self._cdef(csource, override=override, packed=packed, pack=pack) + + def embedding_api(self, csource, packed=False, pack=None): + self._cdef(csource, packed=packed, pack=pack, dllexport=True) + if self._embedding is None: + self._embedding = '' + + def _cdef(self, csource, override=False, **options): + if not isinstance(csource, str): # unicode, on Python 2 + if not isinstance(csource, basestring): + raise TypeError("cdef() argument must be a string") + csource = csource.encode('ascii') + with self._lock: + self._cdef_version = object() + self._parser.parse(csource, override=override, **options) + self._cdefsources.append(csource) + if override: + for cache in self._function_caches: + cache.clear() + finishlist = self._parser._recomplete + if finishlist: + self._parser._recomplete = [] + for tp in finishlist: + tp.finish_backend_type(self, finishlist) + + def dlopen(self, name, flags=0): + """Load and return a dynamic library identified by 'name'. + The standard C library can be loaded by passing None. + Note that functions and types declared by 'ffi.cdef()' are not + linked to a particular library, just like C headers; in the + library we only look for the actual (untyped) symbols. + """ + if not (isinstance(name, basestring) or + name is None or + isinstance(name, self.CData)): + raise TypeError("dlopen(name): name must be a file name, None, " + "or an already-opened 'void *' handle") + with self._lock: + lib, function_cache = _make_ffi_library(self, name, flags) + self._function_caches.append(function_cache) + self._libraries.append(lib) + return lib + + def dlclose(self, lib): + """Close a library obtained with ffi.dlopen(). After this call, + access to functions or variables from the library will fail + (possibly with a segmentation fault). + """ + type(lib).__cffi_close__(lib) + + def _typeof_locked(self, cdecl): + # call me with the lock! + key = cdecl + if key in self._parsed_types: + return self._parsed_types[key] + # + if not isinstance(cdecl, str): # unicode, on Python 2 + cdecl = cdecl.encode('ascii') + # + type = self._parser.parse_type(cdecl) + really_a_function_type = type.is_raw_function + if really_a_function_type: + type = type.as_function_pointer() + btype = self._get_cached_btype(type) + result = btype, really_a_function_type + self._parsed_types[key] = result + return result + + def _typeof(self, cdecl, consider_function_as_funcptr=False): + # string -> ctype object + try: + result = self._parsed_types[cdecl] + except KeyError: + with self._lock: + result = self._typeof_locked(cdecl) + # + btype, really_a_function_type = result + if really_a_function_type and not consider_function_as_funcptr: + raise CDefError("the type %r is a function type, not a " + "pointer-to-function type" % (cdecl,)) + return btype + + def typeof(self, cdecl): + """Parse the C type given as a string and return the + corresponding object. + It can also be used on 'cdata' instance to get its C type. + """ + if isinstance(cdecl, basestring): + return self._typeof(cdecl) + if isinstance(cdecl, self.CData): + return self._backend.typeof(cdecl) + if isinstance(cdecl, types.BuiltinFunctionType): + res = _builtin_function_type(cdecl) + if res is not None: + return res + if (isinstance(cdecl, types.FunctionType) + and hasattr(cdecl, '_cffi_base_type')): + with self._lock: + return self._get_cached_btype(cdecl._cffi_base_type) + raise TypeError(type(cdecl)) + + def sizeof(self, cdecl): + """Return the size in bytes of the argument. It can be a + string naming a C type, or a 'cdata' instance. + """ + if isinstance(cdecl, basestring): + BType = self._typeof(cdecl) + return self._backend.sizeof(BType) + else: + return self._backend.sizeof(cdecl) + + def alignof(self, cdecl): + """Return the natural alignment size in bytes of the C type + given as a string. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._backend.alignof(cdecl) + + def offsetof(self, cdecl, *fields_or_indexes): + """Return the offset of the named field inside the given + structure or array, which must be given as a C type name. + You can give several field names in case of nested structures. + You can also give numeric values which correspond to array + items, in case of an array type. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._typeoffsetof(cdecl, *fields_or_indexes)[1] + + def new(self, cdecl, init=None): + """Allocate an instance according to the specified C type and + return a pointer to it. The specified C type must be either a + pointer or an array: ``new('X *')`` allocates an X and returns + a pointer to it, whereas ``new('X[n]')`` allocates an array of + n X'es and returns an array referencing it (which works + mostly like a pointer, like in C). You can also use + ``new('X[]', n)`` to allocate an array of a non-constant + length n. + + The memory is initialized following the rules of declaring a + global variable in C: by default it is zero-initialized, but + an explicit initializer can be given which can be used to + fill all or part of the memory. + + When the returned object goes out of scope, the memory + is freed. In other words the returned object has + ownership of the value of type 'cdecl' that it points to. This + means that the raw data can be used as long as this object is + kept alive, but must not be used for a longer time. Be careful + about that when copying the pointer to the memory somewhere + else, e.g. into another structure. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._backend.newp(cdecl, init) + + def new_allocator(self, alloc=None, free=None, + should_clear_after_alloc=True): + """Return a new allocator, i.e. a function that behaves like ffi.new() + but uses the provided low-level 'alloc' and 'free' functions. + + 'alloc' is called with the size as argument. If it returns NULL, a + MemoryError is raised. 'free' is called with the result of 'alloc' + as argument. Both can be either Python function or directly C + functions. If 'free' is None, then no free function is called. + If both 'alloc' and 'free' are None, the default is used. + + If 'should_clear_after_alloc' is set to False, then the memory + returned by 'alloc' is assumed to be already cleared (or you are + fine with garbage); otherwise CFFI will clear it. + """ + compiled_ffi = self._backend.FFI() + allocator = compiled_ffi.new_allocator(alloc, free, + should_clear_after_alloc) + def allocate(cdecl, init=None): + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return allocator(cdecl, init) + return allocate + + def cast(self, cdecl, source): + """Similar to a C cast: returns an instance of the named C + type initialized with the given 'source'. The source is + casted between integers or pointers of any type. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._backend.cast(cdecl, source) + + def string(self, cdata, maxlen=-1): + """Return a Python string (or unicode string) from the 'cdata'. + If 'cdata' is a pointer or array of characters or bytes, returns + the null-terminated string. The returned string extends until + the first null character, or at most 'maxlen' characters. If + 'cdata' is an array then 'maxlen' defaults to its length. + + If 'cdata' is a pointer or array of wchar_t, returns a unicode + string following the same rules. + + If 'cdata' is a single character or byte or a wchar_t, returns + it as a string or unicode string. + + If 'cdata' is an enum, returns the value of the enumerator as a + string, or 'NUMBER' if the value is out of range. + """ + return self._backend.string(cdata, maxlen) + + def unpack(self, cdata, length): + """Unpack an array of C data of the given length, + returning a Python string/unicode/list. + + If 'cdata' is a pointer to 'char', returns a byte string. + It does not stop at the first null. This is equivalent to: + ffi.buffer(cdata, length)[:] + + If 'cdata' is a pointer to 'wchar_t', returns a unicode string. + 'length' is measured in wchar_t's; it is not the size in bytes. + + If 'cdata' is a pointer to anything else, returns a list of + 'length' items. This is a faster equivalent to: + [cdata[i] for i in range(length)] + """ + return self._backend.unpack(cdata, length) + + #def buffer(self, cdata, size=-1): + # """Return a read-write buffer object that references the raw C data + # pointed to by the given 'cdata'. The 'cdata' must be a pointer or + # an array. Can be passed to functions expecting a buffer, or directly + # manipulated with: + # + # buf[:] get a copy of it in a regular string, or + # buf[idx] as a single character + # buf[:] = ... + # buf[idx] = ... change the content + # """ + # note that 'buffer' is a type, set on this instance by __init__ + + def from_buffer(self, cdecl, python_buffer=_unspecified, + require_writable=False): + """Return a cdata of the given type pointing to the data of the + given Python object, which must support the buffer interface. + Note that this is not meant to be used on the built-in types + str or unicode (you can build 'char[]' arrays explicitly) + but only on objects containing large quantities of raw data + in some other format, like 'array.array' or numpy arrays. + + The first argument is optional and default to 'char[]'. + """ + if python_buffer is _unspecified: + cdecl, python_buffer = self.BCharA, cdecl + elif isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + return self._backend.from_buffer(cdecl, python_buffer, + require_writable) + + def memmove(self, dest, src, n): + """ffi.memmove(dest, src, n) copies n bytes of memory from src to dest. + + Like the C function memmove(), the memory areas may overlap; + apart from that it behaves like the C function memcpy(). + + 'src' can be any cdata ptr or array, or any Python buffer object. + 'dest' can be any cdata ptr or array, or a writable Python buffer + object. The size to copy, 'n', is always measured in bytes. + + Unlike other methods, this one supports all Python buffer including + byte strings and bytearrays---but it still does not support + non-contiguous buffers. + """ + return self._backend.memmove(dest, src, n) + + def callback(self, cdecl, python_callable=None, error=None, onerror=None): + """Return a callback object or a decorator making such a + callback object. 'cdecl' must name a C function pointer type. + The callback invokes the specified 'python_callable' (which may + be provided either directly or via a decorator). Important: the + callback object must be manually kept alive for as long as the + callback may be invoked from the C level. + """ + def callback_decorator_wrap(python_callable): + if not callable(python_callable): + raise TypeError("the 'python_callable' argument " + "is not callable") + return self._backend.callback(cdecl, python_callable, + error, onerror) + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl, consider_function_as_funcptr=True) + if python_callable is None: + return callback_decorator_wrap # decorator mode + else: + return callback_decorator_wrap(python_callable) # direct mode + + def getctype(self, cdecl, replace_with=''): + """Return a string giving the C type 'cdecl', which may be itself + a string or a object. If 'replace_with' is given, it gives + extra text to append (or insert for more complicated C types), like + a variable name, or '*' to get actually the C type 'pointer-to-cdecl'. + """ + if isinstance(cdecl, basestring): + cdecl = self._typeof(cdecl) + replace_with = replace_with.strip() + if (replace_with.startswith('*') + and '&[' in self._backend.getcname(cdecl, '&')): + replace_with = '(%s)' % replace_with + elif replace_with and not replace_with[0] in '[(': + replace_with = ' ' + replace_with + return self._backend.getcname(cdecl, replace_with) + + def gc(self, cdata, destructor, size=0): + """Return a new cdata object that points to the same + data. Later, when this new cdata object is garbage-collected, + 'destructor(old_cdata_object)' will be called. + + The optional 'size' gives an estimate of the size, used to + trigger the garbage collection more eagerly. So far only used + on PyPy. It tells the GC that the returned object keeps alive + roughly 'size' bytes of external memory. + """ + return self._backend.gcp(cdata, destructor, size) + + def _get_cached_btype(self, type): + assert self._lock.acquire(False) is False + # call me with the lock! + try: + BType = self._cached_btypes[type] + except KeyError: + finishlist = [] + BType = type.get_cached_btype(self, finishlist) + for type in finishlist: + type.finish_backend_type(self, finishlist) + return BType + + def verify(self, source='', tmpdir=None, **kwargs): + """Verify that the current ffi signatures compile on this + machine, and return a dynamic library object. The dynamic + library can be used to call functions and access global + variables declared in this 'ffi'. The library is compiled + by the C compiler: it gives you C-level API compatibility + (including calling macros). This is unlike 'ffi.dlopen()', + which requires binary compatibility in the signatures. + """ + from .verifier import Verifier, _caller_dir_pycache + # + # If set_unicode(True) was called, insert the UNICODE and + # _UNICODE macro declarations + if self._windows_unicode: + self._apply_windows_unicode(kwargs) + # + # Set the tmpdir here, and not in Verifier.__init__: it picks + # up the caller's directory, which we want to be the caller of + # ffi.verify(), as opposed to the caller of Veritier(). + tmpdir = tmpdir or _caller_dir_pycache() + # + # Make a Verifier() and use it to load the library. + self.verifier = Verifier(self, source, tmpdir, **kwargs) + lib = self.verifier.load_library() + # + # Save the loaded library for keep-alive purposes, even + # if the caller doesn't keep it alive itself (it should). + self._libraries.append(lib) + return lib + + def _get_errno(self): + return self._backend.get_errno() + def _set_errno(self, errno): + self._backend.set_errno(errno) + errno = property(_get_errno, _set_errno, None, + "the value of 'errno' from/to the C calls") + + def getwinerror(self, code=-1): + return self._backend.getwinerror(code) + + def _pointer_to(self, ctype): + with self._lock: + return model.pointer_cache(self, ctype) + + def addressof(self, cdata, *fields_or_indexes): + """Return the address of a . + If 'fields_or_indexes' are given, returns the address of that + field or array item in the structure or array, recursively in + case of nested structures. + """ + try: + ctype = self._backend.typeof(cdata) + except TypeError: + if '__addressof__' in type(cdata).__dict__: + return type(cdata).__addressof__(cdata, *fields_or_indexes) + raise + if fields_or_indexes: + ctype, offset = self._typeoffsetof(ctype, *fields_or_indexes) + else: + if ctype.kind == "pointer": + raise TypeError("addressof(pointer)") + offset = 0 + ctypeptr = self._pointer_to(ctype) + return self._backend.rawaddressof(ctypeptr, cdata, offset) + + def _typeoffsetof(self, ctype, field_or_index, *fields_or_indexes): + ctype, offset = self._backend.typeoffsetof(ctype, field_or_index) + for field1 in fields_or_indexes: + ctype, offset1 = self._backend.typeoffsetof(ctype, field1, 1) + offset += offset1 + return ctype, offset + + def include(self, ffi_to_include): + """Includes the typedefs, structs, unions and enums defined + in another FFI instance. Usage is similar to a #include in C, + where a part of the program might include types defined in + another part for its own usage. Note that the include() + method has no effect on functions, constants and global + variables, which must anyway be accessed directly from the + lib object returned by the original FFI instance. + """ + if not isinstance(ffi_to_include, FFI): + raise TypeError("ffi.include() expects an argument that is also of" + " type cffi.FFI, not %r" % ( + type(ffi_to_include).__name__,)) + if ffi_to_include is self: + raise ValueError("self.include(self)") + with ffi_to_include._lock: + with self._lock: + self._parser.include(ffi_to_include._parser) + self._cdefsources.append('[') + self._cdefsources.extend(ffi_to_include._cdefsources) + self._cdefsources.append(']') + self._included_ffis.append(ffi_to_include) + + def new_handle(self, x): + return self._backend.newp_handle(self.BVoidP, x) + + def from_handle(self, x): + return self._backend.from_handle(x) + + def release(self, x): + self._backend.release(x) + + def set_unicode(self, enabled_flag): + """Windows: if 'enabled_flag' is True, enable the UNICODE and + _UNICODE defines in C, and declare the types like TCHAR and LPTCSTR + to be (pointers to) wchar_t. If 'enabled_flag' is False, + declare these types to be (pointers to) plain 8-bit characters. + This is mostly for backward compatibility; you usually want True. + """ + if self._windows_unicode is not None: + raise ValueError("set_unicode() can only be called once") + enabled_flag = bool(enabled_flag) + if enabled_flag: + self.cdef("typedef wchar_t TBYTE;" + "typedef wchar_t TCHAR;" + "typedef const wchar_t *LPCTSTR;" + "typedef const wchar_t *PCTSTR;" + "typedef wchar_t *LPTSTR;" + "typedef wchar_t *PTSTR;" + "typedef TBYTE *PTBYTE;" + "typedef TCHAR *PTCHAR;") + else: + self.cdef("typedef char TBYTE;" + "typedef char TCHAR;" + "typedef const char *LPCTSTR;" + "typedef const char *PCTSTR;" + "typedef char *LPTSTR;" + "typedef char *PTSTR;" + "typedef TBYTE *PTBYTE;" + "typedef TCHAR *PTCHAR;") + self._windows_unicode = enabled_flag + + def _apply_windows_unicode(self, kwds): + defmacros = kwds.get('define_macros', ()) + if not isinstance(defmacros, (list, tuple)): + raise TypeError("'define_macros' must be a list or tuple") + defmacros = list(defmacros) + [('UNICODE', '1'), + ('_UNICODE', '1')] + kwds['define_macros'] = defmacros + + def _apply_embedding_fix(self, kwds): + # must include an argument like "-lpython2.7" for the compiler + def ensure(key, value): + lst = kwds.setdefault(key, []) + if value not in lst: + lst.append(value) + # + if '__pypy__' in sys.builtin_module_names: + import os + if sys.platform == "win32": + # we need 'libpypy-c.lib'. Current distributions of + # pypy (>= 4.1) contain it as 'libs/python27.lib'. + pythonlib = "python{0[0]}{0[1]}".format(sys.version_info) + if hasattr(sys, 'prefix'): + ensure('library_dirs', os.path.join(sys.prefix, 'libs')) + else: + # we need 'libpypy-c.{so,dylib}', which should be by + # default located in 'sys.prefix/bin' for installed + # systems. + if sys.version_info < (3,): + pythonlib = "pypy-c" + else: + pythonlib = "pypy3-c" + if hasattr(sys, 'prefix'): + ensure('library_dirs', os.path.join(sys.prefix, 'bin')) + # On uninstalled pypy's, the libpypy-c is typically found in + # .../pypy/goal/. + if hasattr(sys, 'prefix'): + ensure('library_dirs', os.path.join(sys.prefix, 'pypy', 'goal')) + else: + if sys.platform == "win32": + template = "python%d%d" + if hasattr(sys, 'gettotalrefcount'): + template += '_d' + else: + try: + import sysconfig + except ImportError: # 2.6 + from cffi._shimmed_dist_utils import sysconfig + template = "python%d.%d" + if sysconfig.get_config_var('DEBUG_EXT'): + template += sysconfig.get_config_var('DEBUG_EXT') + pythonlib = (template % + (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) + if hasattr(sys, 'abiflags'): + pythonlib += sys.abiflags + ensure('libraries', pythonlib) + if sys.platform == "win32": + ensure('extra_link_args', '/MANIFEST') + + def set_source(self, module_name, source, source_extension='.c', **kwds): + import os + if hasattr(self, '_assigned_source'): + raise ValueError("set_source() cannot be called several times " + "per ffi object") + if not isinstance(module_name, basestring): + raise TypeError("'module_name' must be a string") + if os.sep in module_name or (os.altsep and os.altsep in module_name): + raise ValueError("'module_name' must not contain '/': use a dotted " + "name to make a 'package.module' location") + self._assigned_source = (str(module_name), source, + source_extension, kwds) + + def set_source_pkgconfig(self, module_name, pkgconfig_libs, source, + source_extension='.c', **kwds): + from . import pkgconfig + if not isinstance(pkgconfig_libs, list): + raise TypeError("the pkgconfig_libs argument must be a list " + "of package names") + kwds2 = pkgconfig.flags_from_pkgconfig(pkgconfig_libs) + pkgconfig.merge_flags(kwds, kwds2) + self.set_source(module_name, source, source_extension, **kwds) + + def distutils_extension(self, tmpdir='build', verbose=True): + from cffi._shimmed_dist_utils import mkpath + from .recompiler import recompile + # + if not hasattr(self, '_assigned_source'): + if hasattr(self, 'verifier'): # fallback, 'tmpdir' ignored + return self.verifier.get_extension() + raise ValueError("set_source() must be called before" + " distutils_extension()") + module_name, source, source_extension, kwds = self._assigned_source + if source is None: + raise TypeError("distutils_extension() is only for C extension " + "modules, not for dlopen()-style pure Python " + "modules") + mkpath(tmpdir) + ext, updated = recompile(self, module_name, + source, tmpdir=tmpdir, extradir=tmpdir, + source_extension=source_extension, + call_c_compiler=False, **kwds) + if verbose: + if updated: + sys.stderr.write("regenerated: %r\n" % (ext.sources[0],)) + else: + sys.stderr.write("not modified: %r\n" % (ext.sources[0],)) + return ext + + def emit_c_code(self, filename): + from .recompiler import recompile + # + if not hasattr(self, '_assigned_source'): + raise ValueError("set_source() must be called before emit_c_code()") + module_name, source, source_extension, kwds = self._assigned_source + if source is None: + raise TypeError("emit_c_code() is only for C extension modules, " + "not for dlopen()-style pure Python modules") + recompile(self, module_name, source, + c_file=filename, call_c_compiler=False, + uses_ffiplatform=False, **kwds) + + def emit_python_code(self, filename): + from .recompiler import recompile + # + if not hasattr(self, '_assigned_source'): + raise ValueError("set_source() must be called before emit_c_code()") + module_name, source, source_extension, kwds = self._assigned_source + if source is not None: + raise TypeError("emit_python_code() is only for dlopen()-style " + "pure Python modules, not for C extension modules") + recompile(self, module_name, source, + c_file=filename, call_c_compiler=False, + uses_ffiplatform=False, **kwds) + + def compile(self, tmpdir='.', verbose=0, target=None, debug=None): + """The 'target' argument gives the final file name of the + compiled DLL. Use '*' to force distutils' choice, suitable for + regular CPython C API modules. Use a file name ending in '.*' + to ask for the system's default extension for dynamic libraries + (.so/.dll/.dylib). + + The default is '*' when building a non-embedded C API extension, + and (module_name + '.*') when building an embedded library. + """ + from .recompiler import recompile + # + if not hasattr(self, '_assigned_source'): + raise ValueError("set_source() must be called before compile()") + module_name, source, source_extension, kwds = self._assigned_source + return recompile(self, module_name, source, tmpdir=tmpdir, + target=target, source_extension=source_extension, + compiler_verbose=verbose, debug=debug, **kwds) + + def init_once(self, func, tag): + # Read _init_once_cache[tag], which is either (False, lock) if + # we're calling the function now in some thread, or (True, result). + # Don't call setdefault() in most cases, to avoid allocating and + # immediately freeing a lock; but still use setdefaut() to avoid + # races. + try: + x = self._init_once_cache[tag] + except KeyError: + x = self._init_once_cache.setdefault(tag, (False, allocate_lock())) + # Common case: we got (True, result), so we return the result. + if x[0]: + return x[1] + # Else, it's a lock. Acquire it to serialize the following tests. + with x[1]: + # Read again from _init_once_cache the current status. + x = self._init_once_cache[tag] + if x[0]: + return x[1] + # Call the function and store the result back. + result = func() + self._init_once_cache[tag] = (True, result) + return result + + def embedding_init_code(self, pysource): + if self._embedding: + raise ValueError("embedding_init_code() can only be called once") + # fix 'pysource' before it gets dumped into the C file: + # - remove empty lines at the beginning, so it starts at "line 1" + # - dedent, if all non-empty lines are indented + # - check for SyntaxErrors + import re + match = re.match(r'\s*\n', pysource) + if match: + pysource = pysource[match.end():] + lines = pysource.splitlines() or [''] + prefix = re.match(r'\s*', lines[0]).group() + for i in range(1, len(lines)): + line = lines[i] + if line.rstrip(): + while not line.startswith(prefix): + prefix = prefix[:-1] + i = len(prefix) + lines = [line[i:]+'\n' for line in lines] + pysource = ''.join(lines) + # + compile(pysource, "cffi_init", "exec") + # + self._embedding = pysource + + def def_extern(self, *args, **kwds): + raise ValueError("ffi.def_extern() is only available on API-mode FFI " + "objects") + + def list_types(self): + """Returns the user type names known to this FFI instance. + This returns a tuple containing three lists of names: + (typedef_names, names_of_structs, names_of_unions) + """ + typedefs = [] + structs = [] + unions = [] + for key in self._parser._declarations: + if key.startswith('typedef '): + typedefs.append(key[8:]) + elif key.startswith('struct '): + structs.append(key[7:]) + elif key.startswith('union '): + unions.append(key[6:]) + typedefs.sort() + structs.sort() + unions.sort() + return (typedefs, structs, unions) + + +def _load_backend_lib(backend, name, flags): + import os + if not isinstance(name, basestring): + if sys.platform != "win32" or name is not None: + return backend.load_library(name, flags) + name = "c" # Windows: load_library(None) fails, but this works + # on Python 2 (backward compatibility hack only) + first_error = None + if '.' in name or '/' in name or os.sep in name: + try: + return backend.load_library(name, flags) + except OSError as e: + first_error = e + import ctypes.util + path = ctypes.util.find_library(name) + if path is None: + if name == "c" and sys.platform == "win32" and sys.version_info >= (3,): + raise OSError("dlopen(None) cannot work on Windows for Python 3 " + "(see http://bugs.python.org/issue23606)") + msg = ("ctypes.util.find_library() did not manage " + "to locate a library called %r" % (name,)) + if first_error is not None: + msg = "%s. Additionally, %s" % (first_error, msg) + raise OSError(msg) + return backend.load_library(path, flags) + +def _make_ffi_library(ffi, libname, flags): + backend = ffi._backend + backendlib = _load_backend_lib(backend, libname, flags) + # + def accessor_function(name): + key = 'function ' + name + tp, _ = ffi._parser._declarations[key] + BType = ffi._get_cached_btype(tp) + value = backendlib.load_function(BType, name) + library.__dict__[name] = value + # + def accessor_variable(name): + key = 'variable ' + name + tp, _ = ffi._parser._declarations[key] + BType = ffi._get_cached_btype(tp) + read_variable = backendlib.read_variable + write_variable = backendlib.write_variable + setattr(FFILibrary, name, property( + lambda self: read_variable(BType, name), + lambda self, value: write_variable(BType, name, value))) + # + def addressof_var(name): + try: + return addr_variables[name] + except KeyError: + with ffi._lock: + if name not in addr_variables: + key = 'variable ' + name + tp, _ = ffi._parser._declarations[key] + BType = ffi._get_cached_btype(tp) + if BType.kind != 'array': + BType = model.pointer_cache(ffi, BType) + p = backendlib.load_function(BType, name) + addr_variables[name] = p + return addr_variables[name] + # + def accessor_constant(name): + raise NotImplementedError("non-integer constant '%s' cannot be " + "accessed from a dlopen() library" % (name,)) + # + def accessor_int_constant(name): + library.__dict__[name] = ffi._parser._int_constants[name] + # + accessors = {} + accessors_version = [False] + addr_variables = {} + # + def update_accessors(): + if accessors_version[0] is ffi._cdef_version: + return + # + for key, (tp, _) in ffi._parser._declarations.items(): + if not isinstance(tp, model.EnumType): + tag, name = key.split(' ', 1) + if tag == 'function': + accessors[name] = accessor_function + elif tag == 'variable': + accessors[name] = accessor_variable + elif tag == 'constant': + accessors[name] = accessor_constant + else: + for i, enumname in enumerate(tp.enumerators): + def accessor_enum(name, tp=tp, i=i): + tp.check_not_partial() + library.__dict__[name] = tp.enumvalues[i] + accessors[enumname] = accessor_enum + for name in ffi._parser._int_constants: + accessors.setdefault(name, accessor_int_constant) + accessors_version[0] = ffi._cdef_version + # + def make_accessor(name): + with ffi._lock: + if name in library.__dict__ or name in FFILibrary.__dict__: + return # added by another thread while waiting for the lock + if name not in accessors: + update_accessors() + if name not in accessors: + raise AttributeError(name) + accessors[name](name) + # + class FFILibrary(object): + def __getattr__(self, name): + make_accessor(name) + return getattr(self, name) + def __setattr__(self, name, value): + try: + property = getattr(self.__class__, name) + except AttributeError: + make_accessor(name) + setattr(self, name, value) + else: + property.__set__(self, value) + def __dir__(self): + with ffi._lock: + update_accessors() + return accessors.keys() + def __addressof__(self, name): + if name in library.__dict__: + return library.__dict__[name] + if name in FFILibrary.__dict__: + return addressof_var(name) + make_accessor(name) + if name in library.__dict__: + return library.__dict__[name] + if name in FFILibrary.__dict__: + return addressof_var(name) + raise AttributeError("cffi library has no function or " + "global variable named '%s'" % (name,)) + def __cffi_close__(self): + backendlib.close_lib() + self.__dict__.clear() + # + if isinstance(libname, basestring): + try: + if not isinstance(libname, str): # unicode, on Python 2 + libname = libname.encode('utf-8') + FFILibrary.__name__ = 'FFILibrary_%s' % libname + except UnicodeError: + pass + library = FFILibrary() + return library, library.__dict__ + +def _builtin_function_type(func): + # a hack to make at least ffi.typeof(builtin_function) work, + # if the builtin function was obtained by 'vengine_cpy'. + import sys + try: + module = sys.modules[func.__module__] + ffi = module._cffi_original_ffi + types_of_builtin_funcs = module._cffi_types_of_builtin_funcs + tp = types_of_builtin_funcs[func] + except (KeyError, AttributeError, TypeError): + return None + else: + with ffi._lock: + return ffi._get_cached_btype(tp) diff --git a/venv/lib/python3.12/site-packages/cffi/backend_ctypes.py b/venv/lib/python3.12/site-packages/cffi/backend_ctypes.py new file mode 100644 index 0000000..e7956a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/backend_ctypes.py @@ -0,0 +1,1121 @@ +import ctypes, ctypes.util, operator, sys +from . import model + +if sys.version_info < (3,): + bytechr = chr +else: + unicode = str + long = int + xrange = range + bytechr = lambda num: bytes([num]) + +class CTypesType(type): + pass + +class CTypesData(object): + __metaclass__ = CTypesType + __slots__ = ['__weakref__'] + __name__ = '' + + def __init__(self, *args): + raise TypeError("cannot instantiate %r" % (self.__class__,)) + + @classmethod + def _newp(cls, init): + raise TypeError("expected a pointer or array ctype, got '%s'" + % (cls._get_c_name(),)) + + @staticmethod + def _to_ctypes(value): + raise TypeError + + @classmethod + def _arg_to_ctypes(cls, *value): + try: + ctype = cls._ctype + except AttributeError: + raise TypeError("cannot create an instance of %r" % (cls,)) + if value: + res = cls._to_ctypes(*value) + if not isinstance(res, ctype): + res = cls._ctype(res) + else: + res = cls._ctype() + return res + + @classmethod + def _create_ctype_obj(cls, init): + if init is None: + return cls._arg_to_ctypes() + else: + return cls._arg_to_ctypes(init) + + @staticmethod + def _from_ctypes(ctypes_value): + raise TypeError + + @classmethod + def _get_c_name(cls, replace_with=''): + return cls._reftypename.replace(' &', replace_with) + + @classmethod + def _fix_class(cls): + cls.__name__ = 'CData<%s>' % (cls._get_c_name(),) + cls.__qualname__ = 'CData<%s>' % (cls._get_c_name(),) + cls.__module__ = 'ffi' + + def _get_own_repr(self): + raise NotImplementedError + + def _addr_repr(self, address): + if address == 0: + return 'NULL' + else: + if address < 0: + address += 1 << (8*ctypes.sizeof(ctypes.c_void_p)) + return '0x%x' % address + + def __repr__(self, c_name=None): + own = self._get_own_repr() + return '' % (c_name or self._get_c_name(), own) + + def _convert_to_address(self, BClass): + if BClass is None: + raise TypeError("cannot convert %r to an address" % ( + self._get_c_name(),)) + else: + raise TypeError("cannot convert %r to %r" % ( + self._get_c_name(), BClass._get_c_name())) + + @classmethod + def _get_size(cls): + return ctypes.sizeof(cls._ctype) + + def _get_size_of_instance(self): + return ctypes.sizeof(self._ctype) + + @classmethod + def _cast_from(cls, source): + raise TypeError("cannot cast to %r" % (cls._get_c_name(),)) + + def _cast_to_integer(self): + return self._convert_to_address(None) + + @classmethod + def _alignment(cls): + return ctypes.alignment(cls._ctype) + + def __iter__(self): + raise TypeError("cdata %r does not support iteration" % ( + self._get_c_name()),) + + def _make_cmp(name): + cmpfunc = getattr(operator, name) + def cmp(self, other): + v_is_ptr = not isinstance(self, CTypesGenericPrimitive) + w_is_ptr = (isinstance(other, CTypesData) and + not isinstance(other, CTypesGenericPrimitive)) + if v_is_ptr and w_is_ptr: + return cmpfunc(self._convert_to_address(None), + other._convert_to_address(None)) + elif v_is_ptr or w_is_ptr: + return NotImplemented + else: + if isinstance(self, CTypesGenericPrimitive): + self = self._value + if isinstance(other, CTypesGenericPrimitive): + other = other._value + return cmpfunc(self, other) + cmp.func_name = name + return cmp + + __eq__ = _make_cmp('__eq__') + __ne__ = _make_cmp('__ne__') + __lt__ = _make_cmp('__lt__') + __le__ = _make_cmp('__le__') + __gt__ = _make_cmp('__gt__') + __ge__ = _make_cmp('__ge__') + + def __hash__(self): + return hash(self._convert_to_address(None)) + + def _to_string(self, maxlen): + raise TypeError("string(): %r" % (self,)) + + +class CTypesGenericPrimitive(CTypesData): + __slots__ = [] + + def __hash__(self): + return hash(self._value) + + def _get_own_repr(self): + return repr(self._from_ctypes(self._value)) + + +class CTypesGenericArray(CTypesData): + __slots__ = [] + + @classmethod + def _newp(cls, init): + return cls(init) + + def __iter__(self): + for i in xrange(len(self)): + yield self[i] + + def _get_own_repr(self): + return self._addr_repr(ctypes.addressof(self._blob)) + + +class CTypesGenericPtr(CTypesData): + __slots__ = ['_address', '_as_ctype_ptr'] + _automatic_casts = False + kind = "pointer" + + @classmethod + def _newp(cls, init): + return cls(init) + + @classmethod + def _cast_from(cls, source): + if source is None: + address = 0 + elif isinstance(source, CTypesData): + address = source._cast_to_integer() + elif isinstance(source, (int, long)): + address = source + else: + raise TypeError("bad type for cast to %r: %r" % + (cls, type(source).__name__)) + return cls._new_pointer_at(address) + + @classmethod + def _new_pointer_at(cls, address): + self = cls.__new__(cls) + self._address = address + self._as_ctype_ptr = ctypes.cast(address, cls._ctype) + return self + + def _get_own_repr(self): + try: + return self._addr_repr(self._address) + except AttributeError: + return '???' + + def _cast_to_integer(self): + return self._address + + def __nonzero__(self): + return bool(self._address) + __bool__ = __nonzero__ + + @classmethod + def _to_ctypes(cls, value): + if not isinstance(value, CTypesData): + raise TypeError("unexpected %s object" % type(value).__name__) + address = value._convert_to_address(cls) + return ctypes.cast(address, cls._ctype) + + @classmethod + def _from_ctypes(cls, ctypes_ptr): + address = ctypes.cast(ctypes_ptr, ctypes.c_void_p).value or 0 + return cls._new_pointer_at(address) + + @classmethod + def _initialize(cls, ctypes_ptr, value): + if value: + ctypes_ptr.contents = cls._to_ctypes(value).contents + + def _convert_to_address(self, BClass): + if (BClass in (self.__class__, None) or BClass._automatic_casts + or self._automatic_casts): + return self._address + else: + return CTypesData._convert_to_address(self, BClass) + + +class CTypesBaseStructOrUnion(CTypesData): + __slots__ = ['_blob'] + + @classmethod + def _create_ctype_obj(cls, init): + # may be overridden + raise TypeError("cannot instantiate opaque type %s" % (cls,)) + + def _get_own_repr(self): + return self._addr_repr(ctypes.addressof(self._blob)) + + @classmethod + def _offsetof(cls, fieldname): + return getattr(cls._ctype, fieldname).offset + + def _convert_to_address(self, BClass): + if getattr(BClass, '_BItem', None) is self.__class__: + return ctypes.addressof(self._blob) + else: + return CTypesData._convert_to_address(self, BClass) + + @classmethod + def _from_ctypes(cls, ctypes_struct_or_union): + self = cls.__new__(cls) + self._blob = ctypes_struct_or_union + return self + + @classmethod + def _to_ctypes(cls, value): + return value._blob + + def __repr__(self, c_name=None): + return CTypesData.__repr__(self, c_name or self._get_c_name(' &')) + + +class CTypesBackend(object): + + PRIMITIVE_TYPES = { + 'char': ctypes.c_char, + 'short': ctypes.c_short, + 'int': ctypes.c_int, + 'long': ctypes.c_long, + 'long long': ctypes.c_longlong, + 'signed char': ctypes.c_byte, + 'unsigned char': ctypes.c_ubyte, + 'unsigned short': ctypes.c_ushort, + 'unsigned int': ctypes.c_uint, + 'unsigned long': ctypes.c_ulong, + 'unsigned long long': ctypes.c_ulonglong, + 'float': ctypes.c_float, + 'double': ctypes.c_double, + '_Bool': ctypes.c_bool, + } + + for _name in ['unsigned long long', 'unsigned long', + 'unsigned int', 'unsigned short', 'unsigned char']: + _size = ctypes.sizeof(PRIMITIVE_TYPES[_name]) + PRIMITIVE_TYPES['uint%d_t' % (8*_size)] = PRIMITIVE_TYPES[_name] + if _size == ctypes.sizeof(ctypes.c_void_p): + PRIMITIVE_TYPES['uintptr_t'] = PRIMITIVE_TYPES[_name] + if _size == ctypes.sizeof(ctypes.c_size_t): + PRIMITIVE_TYPES['size_t'] = PRIMITIVE_TYPES[_name] + + for _name in ['long long', 'long', 'int', 'short', 'signed char']: + _size = ctypes.sizeof(PRIMITIVE_TYPES[_name]) + PRIMITIVE_TYPES['int%d_t' % (8*_size)] = PRIMITIVE_TYPES[_name] + if _size == ctypes.sizeof(ctypes.c_void_p): + PRIMITIVE_TYPES['intptr_t'] = PRIMITIVE_TYPES[_name] + PRIMITIVE_TYPES['ptrdiff_t'] = PRIMITIVE_TYPES[_name] + if _size == ctypes.sizeof(ctypes.c_size_t): + PRIMITIVE_TYPES['ssize_t'] = PRIMITIVE_TYPES[_name] + + + def __init__(self): + self.RTLD_LAZY = 0 # not supported anyway by ctypes + self.RTLD_NOW = 0 + self.RTLD_GLOBAL = ctypes.RTLD_GLOBAL + self.RTLD_LOCAL = ctypes.RTLD_LOCAL + + def set_ffi(self, ffi): + self.ffi = ffi + + def _get_types(self): + return CTypesData, CTypesType + + def load_library(self, path, flags=0): + cdll = ctypes.CDLL(path, flags) + return CTypesLibrary(self, cdll) + + def new_void_type(self): + class CTypesVoid(CTypesData): + __slots__ = [] + _reftypename = 'void &' + @staticmethod + def _from_ctypes(novalue): + return None + @staticmethod + def _to_ctypes(novalue): + if novalue is not None: + raise TypeError("None expected, got %s object" % + (type(novalue).__name__,)) + return None + CTypesVoid._fix_class() + return CTypesVoid + + def new_primitive_type(self, name): + if name == 'wchar_t': + raise NotImplementedError(name) + ctype = self.PRIMITIVE_TYPES[name] + if name == 'char': + kind = 'char' + elif name in ('float', 'double'): + kind = 'float' + else: + if name in ('signed char', 'unsigned char'): + kind = 'byte' + elif name == '_Bool': + kind = 'bool' + else: + kind = 'int' + is_signed = (ctype(-1).value == -1) + # + def _cast_source_to_int(source): + if isinstance(source, (int, long, float)): + source = int(source) + elif isinstance(source, CTypesData): + source = source._cast_to_integer() + elif isinstance(source, bytes): + source = ord(source) + elif source is None: + source = 0 + else: + raise TypeError("bad type for cast to %r: %r" % + (CTypesPrimitive, type(source).__name__)) + return source + # + kind1 = kind + class CTypesPrimitive(CTypesGenericPrimitive): + __slots__ = ['_value'] + _ctype = ctype + _reftypename = '%s &' % name + kind = kind1 + + def __init__(self, value): + self._value = value + + @staticmethod + def _create_ctype_obj(init): + if init is None: + return ctype() + return ctype(CTypesPrimitive._to_ctypes(init)) + + if kind == 'int' or kind == 'byte': + @classmethod + def _cast_from(cls, source): + source = _cast_source_to_int(source) + source = ctype(source).value # cast within range + return cls(source) + def __int__(self): + return self._value + + if kind == 'bool': + @classmethod + def _cast_from(cls, source): + if not isinstance(source, (int, long, float)): + source = _cast_source_to_int(source) + return cls(bool(source)) + def __int__(self): + return int(self._value) + + if kind == 'char': + @classmethod + def _cast_from(cls, source): + source = _cast_source_to_int(source) + source = bytechr(source & 0xFF) + return cls(source) + def __int__(self): + return ord(self._value) + + if kind == 'float': + @classmethod + def _cast_from(cls, source): + if isinstance(source, float): + pass + elif isinstance(source, CTypesGenericPrimitive): + if hasattr(source, '__float__'): + source = float(source) + else: + source = int(source) + else: + source = _cast_source_to_int(source) + source = ctype(source).value # fix precision + return cls(source) + def __int__(self): + return int(self._value) + def __float__(self): + return self._value + + _cast_to_integer = __int__ + + if kind == 'int' or kind == 'byte' or kind == 'bool': + @staticmethod + def _to_ctypes(x): + if not isinstance(x, (int, long)): + if isinstance(x, CTypesData): + x = int(x) + else: + raise TypeError("integer expected, got %s" % + type(x).__name__) + if ctype(x).value != x: + if not is_signed and x < 0: + raise OverflowError("%s: negative integer" % name) + else: + raise OverflowError("%s: integer out of bounds" + % name) + return x + + if kind == 'char': + @staticmethod + def _to_ctypes(x): + if isinstance(x, bytes) and len(x) == 1: + return x + if isinstance(x, CTypesPrimitive): # > + return x._value + raise TypeError("character expected, got %s" % + type(x).__name__) + def __nonzero__(self): + return ord(self._value) != 0 + else: + def __nonzero__(self): + return self._value != 0 + __bool__ = __nonzero__ + + if kind == 'float': + @staticmethod + def _to_ctypes(x): + if not isinstance(x, (int, long, float, CTypesData)): + raise TypeError("float expected, got %s" % + type(x).__name__) + return ctype(x).value + + @staticmethod + def _from_ctypes(value): + return getattr(value, 'value', value) + + @staticmethod + def _initialize(blob, init): + blob.value = CTypesPrimitive._to_ctypes(init) + + if kind == 'char': + def _to_string(self, maxlen): + return self._value + if kind == 'byte': + def _to_string(self, maxlen): + return chr(self._value & 0xff) + # + CTypesPrimitive._fix_class() + return CTypesPrimitive + + def new_pointer_type(self, BItem): + getbtype = self.ffi._get_cached_btype + if BItem is getbtype(model.PrimitiveType('char')): + kind = 'charp' + elif BItem in (getbtype(model.PrimitiveType('signed char')), + getbtype(model.PrimitiveType('unsigned char'))): + kind = 'bytep' + elif BItem is getbtype(model.void_type): + kind = 'voidp' + else: + kind = 'generic' + # + class CTypesPtr(CTypesGenericPtr): + __slots__ = ['_own'] + if kind == 'charp': + __slots__ += ['__as_strbuf'] + _BItem = BItem + if hasattr(BItem, '_ctype'): + _ctype = ctypes.POINTER(BItem._ctype) + _bitem_size = ctypes.sizeof(BItem._ctype) + else: + _ctype = ctypes.c_void_p + if issubclass(BItem, CTypesGenericArray): + _reftypename = BItem._get_c_name('(* &)') + else: + _reftypename = BItem._get_c_name(' * &') + + def __init__(self, init): + ctypeobj = BItem._create_ctype_obj(init) + if kind == 'charp': + self.__as_strbuf = ctypes.create_string_buffer( + ctypeobj.value + b'\x00') + self._as_ctype_ptr = ctypes.cast( + self.__as_strbuf, self._ctype) + else: + self._as_ctype_ptr = ctypes.pointer(ctypeobj) + self._address = ctypes.cast(self._as_ctype_ptr, + ctypes.c_void_p).value + self._own = True + + def __add__(self, other): + if isinstance(other, (int, long)): + return self._new_pointer_at(self._address + + other * self._bitem_size) + else: + return NotImplemented + + def __sub__(self, other): + if isinstance(other, (int, long)): + return self._new_pointer_at(self._address - + other * self._bitem_size) + elif type(self) is type(other): + return (self._address - other._address) // self._bitem_size + else: + return NotImplemented + + def __getitem__(self, index): + if getattr(self, '_own', False) and index != 0: + raise IndexError + return BItem._from_ctypes(self._as_ctype_ptr[index]) + + def __setitem__(self, index, value): + self._as_ctype_ptr[index] = BItem._to_ctypes(value) + + if kind == 'charp' or kind == 'voidp': + @classmethod + def _arg_to_ctypes(cls, *value): + if value and isinstance(value[0], bytes): + return ctypes.c_char_p(value[0]) + else: + return super(CTypesPtr, cls)._arg_to_ctypes(*value) + + if kind == 'charp' or kind == 'bytep': + def _to_string(self, maxlen): + if maxlen < 0: + maxlen = sys.maxsize + p = ctypes.cast(self._as_ctype_ptr, + ctypes.POINTER(ctypes.c_char)) + n = 0 + while n < maxlen and p[n] != b'\x00': + n += 1 + return b''.join([p[i] for i in range(n)]) + + def _get_own_repr(self): + if getattr(self, '_own', False): + return 'owning %d bytes' % ( + ctypes.sizeof(self._as_ctype_ptr.contents),) + return super(CTypesPtr, self)._get_own_repr() + # + if (BItem is self.ffi._get_cached_btype(model.void_type) or + BItem is self.ffi._get_cached_btype(model.PrimitiveType('char'))): + CTypesPtr._automatic_casts = True + # + CTypesPtr._fix_class() + return CTypesPtr + + def new_array_type(self, CTypesPtr, length): + if length is None: + brackets = ' &[]' + else: + brackets = ' &[%d]' % length + BItem = CTypesPtr._BItem + getbtype = self.ffi._get_cached_btype + if BItem is getbtype(model.PrimitiveType('char')): + kind = 'char' + elif BItem in (getbtype(model.PrimitiveType('signed char')), + getbtype(model.PrimitiveType('unsigned char'))): + kind = 'byte' + else: + kind = 'generic' + # + class CTypesArray(CTypesGenericArray): + __slots__ = ['_blob', '_own'] + if length is not None: + _ctype = BItem._ctype * length + else: + __slots__.append('_ctype') + _reftypename = BItem._get_c_name(brackets) + _declared_length = length + _CTPtr = CTypesPtr + + def __init__(self, init): + if length is None: + if isinstance(init, (int, long)): + len1 = init + init = None + elif kind == 'char' and isinstance(init, bytes): + len1 = len(init) + 1 # extra null + else: + init = tuple(init) + len1 = len(init) + self._ctype = BItem._ctype * len1 + self._blob = self._ctype() + self._own = True + if init is not None: + self._initialize(self._blob, init) + + @staticmethod + def _initialize(blob, init): + if isinstance(init, bytes): + init = [init[i:i+1] for i in range(len(init))] + else: + if isinstance(init, CTypesGenericArray): + if (len(init) != len(blob) or + not isinstance(init, CTypesArray)): + raise TypeError("length/type mismatch: %s" % (init,)) + init = tuple(init) + if len(init) > len(blob): + raise IndexError("too many initializers") + addr = ctypes.cast(blob, ctypes.c_void_p).value + PTR = ctypes.POINTER(BItem._ctype) + itemsize = ctypes.sizeof(BItem._ctype) + for i, value in enumerate(init): + p = ctypes.cast(addr + i * itemsize, PTR) + BItem._initialize(p.contents, value) + + def __len__(self): + return len(self._blob) + + def __getitem__(self, index): + if not (0 <= index < len(self._blob)): + raise IndexError + return BItem._from_ctypes(self._blob[index]) + + def __setitem__(self, index, value): + if not (0 <= index < len(self._blob)): + raise IndexError + self._blob[index] = BItem._to_ctypes(value) + + if kind == 'char' or kind == 'byte': + def _to_string(self, maxlen): + if maxlen < 0: + maxlen = len(self._blob) + p = ctypes.cast(self._blob, + ctypes.POINTER(ctypes.c_char)) + n = 0 + while n < maxlen and p[n] != b'\x00': + n += 1 + return b''.join([p[i] for i in range(n)]) + + def _get_own_repr(self): + if getattr(self, '_own', False): + return 'owning %d bytes' % (ctypes.sizeof(self._blob),) + return super(CTypesArray, self)._get_own_repr() + + def _convert_to_address(self, BClass): + if BClass in (CTypesPtr, None) or BClass._automatic_casts: + return ctypes.addressof(self._blob) + else: + return CTypesData._convert_to_address(self, BClass) + + @staticmethod + def _from_ctypes(ctypes_array): + self = CTypesArray.__new__(CTypesArray) + self._blob = ctypes_array + return self + + @staticmethod + def _arg_to_ctypes(value): + return CTypesPtr._arg_to_ctypes(value) + + def __add__(self, other): + if isinstance(other, (int, long)): + return CTypesPtr._new_pointer_at( + ctypes.addressof(self._blob) + + other * ctypes.sizeof(BItem._ctype)) + else: + return NotImplemented + + @classmethod + def _cast_from(cls, source): + raise NotImplementedError("casting to %r" % ( + cls._get_c_name(),)) + # + CTypesArray._fix_class() + return CTypesArray + + def _new_struct_or_union(self, kind, name, base_ctypes_class): + # + class struct_or_union(base_ctypes_class): + pass + struct_or_union.__name__ = '%s_%s' % (kind, name) + kind1 = kind + # + class CTypesStructOrUnion(CTypesBaseStructOrUnion): + __slots__ = ['_blob'] + _ctype = struct_or_union + _reftypename = '%s &' % (name,) + _kind = kind = kind1 + # + CTypesStructOrUnion._fix_class() + return CTypesStructOrUnion + + def new_struct_type(self, name): + return self._new_struct_or_union('struct', name, ctypes.Structure) + + def new_union_type(self, name): + return self._new_struct_or_union('union', name, ctypes.Union) + + def complete_struct_or_union(self, CTypesStructOrUnion, fields, tp, + totalsize=-1, totalalignment=-1, sflags=0, + pack=0): + if totalsize >= 0 or totalalignment >= 0: + raise NotImplementedError("the ctypes backend of CFFI does not support " + "structures completed by verify(); please " + "compile and install the _cffi_backend module.") + struct_or_union = CTypesStructOrUnion._ctype + fnames = [fname for (fname, BField, bitsize) in fields] + btypes = [BField for (fname, BField, bitsize) in fields] + bitfields = [bitsize for (fname, BField, bitsize) in fields] + # + bfield_types = {} + cfields = [] + for (fname, BField, bitsize) in fields: + if bitsize < 0: + cfields.append((fname, BField._ctype)) + bfield_types[fname] = BField + else: + cfields.append((fname, BField._ctype, bitsize)) + bfield_types[fname] = Ellipsis + if sflags & 8: + struct_or_union._pack_ = 1 + elif pack: + struct_or_union._pack_ = pack + struct_or_union._fields_ = cfields + CTypesStructOrUnion._bfield_types = bfield_types + # + @staticmethod + def _create_ctype_obj(init): + result = struct_or_union() + if init is not None: + initialize(result, init) + return result + CTypesStructOrUnion._create_ctype_obj = _create_ctype_obj + # + def initialize(blob, init): + if is_union: + if len(init) > 1: + raise ValueError("union initializer: %d items given, but " + "only one supported (use a dict if needed)" + % (len(init),)) + if not isinstance(init, dict): + if isinstance(init, (bytes, unicode)): + raise TypeError("union initializer: got a str") + init = tuple(init) + if len(init) > len(fnames): + raise ValueError("too many values for %s initializer" % + CTypesStructOrUnion._get_c_name()) + init = dict(zip(fnames, init)) + addr = ctypes.addressof(blob) + for fname, value in init.items(): + BField, bitsize = name2fieldtype[fname] + assert bitsize < 0, \ + "not implemented: initializer with bit fields" + offset = CTypesStructOrUnion._offsetof(fname) + PTR = ctypes.POINTER(BField._ctype) + p = ctypes.cast(addr + offset, PTR) + BField._initialize(p.contents, value) + is_union = CTypesStructOrUnion._kind == 'union' + name2fieldtype = dict(zip(fnames, zip(btypes, bitfields))) + # + for fname, BField, bitsize in fields: + if fname == '': + raise NotImplementedError("nested anonymous structs/unions") + if hasattr(CTypesStructOrUnion, fname): + raise ValueError("the field name %r conflicts in " + "the ctypes backend" % fname) + if bitsize < 0: + def getter(self, fname=fname, BField=BField, + offset=CTypesStructOrUnion._offsetof(fname), + PTR=ctypes.POINTER(BField._ctype)): + addr = ctypes.addressof(self._blob) + p = ctypes.cast(addr + offset, PTR) + return BField._from_ctypes(p.contents) + def setter(self, value, fname=fname, BField=BField): + setattr(self._blob, fname, BField._to_ctypes(value)) + # + if issubclass(BField, CTypesGenericArray): + setter = None + if BField._declared_length == 0: + def getter(self, fname=fname, BFieldPtr=BField._CTPtr, + offset=CTypesStructOrUnion._offsetof(fname), + PTR=ctypes.POINTER(BField._ctype)): + addr = ctypes.addressof(self._blob) + p = ctypes.cast(addr + offset, PTR) + return BFieldPtr._from_ctypes(p) + # + else: + def getter(self, fname=fname, BField=BField): + return BField._from_ctypes(getattr(self._blob, fname)) + def setter(self, value, fname=fname, BField=BField): + # xxx obscure workaround + value = BField._to_ctypes(value) + oldvalue = getattr(self._blob, fname) + setattr(self._blob, fname, value) + if value != getattr(self._blob, fname): + setattr(self._blob, fname, oldvalue) + raise OverflowError("value too large for bitfield") + setattr(CTypesStructOrUnion, fname, property(getter, setter)) + # + CTypesPtr = self.ffi._get_cached_btype(model.PointerType(tp)) + for fname in fnames: + if hasattr(CTypesPtr, fname): + raise ValueError("the field name %r conflicts in " + "the ctypes backend" % fname) + def getter(self, fname=fname): + return getattr(self[0], fname) + def setter(self, value, fname=fname): + setattr(self[0], fname, value) + setattr(CTypesPtr, fname, property(getter, setter)) + + def new_function_type(self, BArgs, BResult, has_varargs): + nameargs = [BArg._get_c_name() for BArg in BArgs] + if has_varargs: + nameargs.append('...') + nameargs = ', '.join(nameargs) + # + class CTypesFunctionPtr(CTypesGenericPtr): + __slots__ = ['_own_callback', '_name'] + _ctype = ctypes.CFUNCTYPE(getattr(BResult, '_ctype', None), + *[BArg._ctype for BArg in BArgs], + use_errno=True) + _reftypename = BResult._get_c_name('(* &)(%s)' % (nameargs,)) + + def __init__(self, init, error=None): + # create a callback to the Python callable init() + import traceback + assert not has_varargs, "varargs not supported for callbacks" + if getattr(BResult, '_ctype', None) is not None: + error = BResult._from_ctypes( + BResult._create_ctype_obj(error)) + else: + error = None + def callback(*args): + args2 = [] + for arg, BArg in zip(args, BArgs): + args2.append(BArg._from_ctypes(arg)) + try: + res2 = init(*args2) + res2 = BResult._to_ctypes(res2) + except: + traceback.print_exc() + res2 = error + if issubclass(BResult, CTypesGenericPtr): + if res2: + res2 = ctypes.cast(res2, ctypes.c_void_p).value + # .value: http://bugs.python.org/issue1574593 + else: + res2 = None + #print repr(res2) + return res2 + if issubclass(BResult, CTypesGenericPtr): + # The only pointers callbacks can return are void*s: + # http://bugs.python.org/issue5710 + callback_ctype = ctypes.CFUNCTYPE( + ctypes.c_void_p, + *[BArg._ctype for BArg in BArgs], + use_errno=True) + else: + callback_ctype = CTypesFunctionPtr._ctype + self._as_ctype_ptr = callback_ctype(callback) + self._address = ctypes.cast(self._as_ctype_ptr, + ctypes.c_void_p).value + self._own_callback = init + + @staticmethod + def _initialize(ctypes_ptr, value): + if value: + raise NotImplementedError("ctypes backend: not supported: " + "initializers for function pointers") + + def __repr__(self): + c_name = getattr(self, '_name', None) + if c_name: + i = self._reftypename.index('(* &)') + if self._reftypename[i-1] not in ' )*': + c_name = ' ' + c_name + c_name = self._reftypename.replace('(* &)', c_name) + return CTypesData.__repr__(self, c_name) + + def _get_own_repr(self): + if getattr(self, '_own_callback', None) is not None: + return 'calling %r' % (self._own_callback,) + return super(CTypesFunctionPtr, self)._get_own_repr() + + def __call__(self, *args): + if has_varargs: + assert len(args) >= len(BArgs) + extraargs = args[len(BArgs):] + args = args[:len(BArgs)] + else: + assert len(args) == len(BArgs) + ctypes_args = [] + for arg, BArg in zip(args, BArgs): + ctypes_args.append(BArg._arg_to_ctypes(arg)) + if has_varargs: + for i, arg in enumerate(extraargs): + if arg is None: + ctypes_args.append(ctypes.c_void_p(0)) # NULL + continue + if not isinstance(arg, CTypesData): + raise TypeError( + "argument %d passed in the variadic part " + "needs to be a cdata object (got %s)" % + (1 + len(BArgs) + i, type(arg).__name__)) + ctypes_args.append(arg._arg_to_ctypes(arg)) + result = self._as_ctype_ptr(*ctypes_args) + return BResult._from_ctypes(result) + # + CTypesFunctionPtr._fix_class() + return CTypesFunctionPtr + + def new_enum_type(self, name, enumerators, enumvalues, CTypesInt): + assert isinstance(name, str) + reverse_mapping = dict(zip(reversed(enumvalues), + reversed(enumerators))) + # + class CTypesEnum(CTypesInt): + __slots__ = [] + _reftypename = '%s &' % name + + def _get_own_repr(self): + value = self._value + try: + return '%d: %s' % (value, reverse_mapping[value]) + except KeyError: + return str(value) + + def _to_string(self, maxlen): + value = self._value + try: + return reverse_mapping[value] + except KeyError: + return str(value) + # + CTypesEnum._fix_class() + return CTypesEnum + + def get_errno(self): + return ctypes.get_errno() + + def set_errno(self, value): + ctypes.set_errno(value) + + def string(self, b, maxlen=-1): + return b._to_string(maxlen) + + def buffer(self, bptr, size=-1): + raise NotImplementedError("buffer() with ctypes backend") + + def sizeof(self, cdata_or_BType): + if isinstance(cdata_or_BType, CTypesData): + return cdata_or_BType._get_size_of_instance() + else: + assert issubclass(cdata_or_BType, CTypesData) + return cdata_or_BType._get_size() + + def alignof(self, BType): + assert issubclass(BType, CTypesData) + return BType._alignment() + + def newp(self, BType, source): + if not issubclass(BType, CTypesData): + raise TypeError + return BType._newp(source) + + def cast(self, BType, source): + return BType._cast_from(source) + + def callback(self, BType, source, error, onerror): + assert onerror is None # XXX not implemented + return BType(source, error) + + _weakref_cache_ref = None + + def gcp(self, cdata, destructor, size=0): + if self._weakref_cache_ref is None: + import weakref + class MyRef(weakref.ref): + def __eq__(self, other): + myref = self() + return self is other or ( + myref is not None and myref is other()) + def __ne__(self, other): + return not (self == other) + def __hash__(self): + try: + return self._hash + except AttributeError: + self._hash = hash(self()) + return self._hash + self._weakref_cache_ref = {}, MyRef + weak_cache, MyRef = self._weakref_cache_ref + + if destructor is None: + try: + del weak_cache[MyRef(cdata)] + except KeyError: + raise TypeError("Can remove destructor only on a object " + "previously returned by ffi.gc()") + return None + + def remove(k): + cdata, destructor = weak_cache.pop(k, (None, None)) + if destructor is not None: + destructor(cdata) + + new_cdata = self.cast(self.typeof(cdata), cdata) + assert new_cdata is not cdata + weak_cache[MyRef(new_cdata, remove)] = (cdata, destructor) + return new_cdata + + typeof = type + + def getcname(self, BType, replace_with): + return BType._get_c_name(replace_with) + + def typeoffsetof(self, BType, fieldname, num=0): + if isinstance(fieldname, str): + if num == 0 and issubclass(BType, CTypesGenericPtr): + BType = BType._BItem + if not issubclass(BType, CTypesBaseStructOrUnion): + raise TypeError("expected a struct or union ctype") + BField = BType._bfield_types[fieldname] + if BField is Ellipsis: + raise TypeError("not supported for bitfields") + return (BField, BType._offsetof(fieldname)) + elif isinstance(fieldname, (int, long)): + if issubclass(BType, CTypesGenericArray): + BType = BType._CTPtr + if not issubclass(BType, CTypesGenericPtr): + raise TypeError("expected an array or ptr ctype") + BItem = BType._BItem + offset = BItem._get_size() * fieldname + if offset > sys.maxsize: + raise OverflowError + return (BItem, offset) + else: + raise TypeError(type(fieldname)) + + def rawaddressof(self, BTypePtr, cdata, offset=None): + if isinstance(cdata, CTypesBaseStructOrUnion): + ptr = ctypes.pointer(type(cdata)._to_ctypes(cdata)) + elif isinstance(cdata, CTypesGenericPtr): + if offset is None or not issubclass(type(cdata)._BItem, + CTypesBaseStructOrUnion): + raise TypeError("unexpected cdata type") + ptr = type(cdata)._to_ctypes(cdata) + elif isinstance(cdata, CTypesGenericArray): + ptr = type(cdata)._to_ctypes(cdata) + else: + raise TypeError("expected a ") + if offset: + ptr = ctypes.cast( + ctypes.c_void_p( + ctypes.cast(ptr, ctypes.c_void_p).value + offset), + type(ptr)) + return BTypePtr._from_ctypes(ptr) + + +class CTypesLibrary(object): + + def __init__(self, backend, cdll): + self.backend = backend + self.cdll = cdll + + def load_function(self, BType, name): + c_func = getattr(self.cdll, name) + funcobj = BType._from_ctypes(c_func) + funcobj._name = name + return funcobj + + def read_variable(self, BType, name): + try: + ctypes_obj = BType._ctype.in_dll(self.cdll, name) + except AttributeError as e: + raise NotImplementedError(e) + return BType._from_ctypes(ctypes_obj) + + def write_variable(self, BType, name, value): + new_ctypes_obj = BType._to_ctypes(value) + ctypes_obj = BType._ctype.in_dll(self.cdll, name) + ctypes.memmove(ctypes.addressof(ctypes_obj), + ctypes.addressof(new_ctypes_obj), + ctypes.sizeof(BType._ctype)) diff --git a/venv/lib/python3.12/site-packages/cffi/cffi_opcode.py b/venv/lib/python3.12/site-packages/cffi/cffi_opcode.py new file mode 100644 index 0000000..6421df6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/cffi_opcode.py @@ -0,0 +1,187 @@ +from .error import VerificationError + +class CffiOp(object): + def __init__(self, op, arg): + self.op = op + self.arg = arg + + def as_c_expr(self): + if self.op is None: + assert isinstance(self.arg, str) + return '(_cffi_opcode_t)(%s)' % (self.arg,) + classname = CLASS_NAME[self.op] + return '_CFFI_OP(_CFFI_OP_%s, %s)' % (classname, self.arg) + + def as_python_bytes(self): + if self.op is None and self.arg.isdigit(): + value = int(self.arg) # non-negative: '-' not in self.arg + if value >= 2**31: + raise OverflowError("cannot emit %r: limited to 2**31-1" + % (self.arg,)) + return format_four_bytes(value) + if isinstance(self.arg, str): + raise VerificationError("cannot emit to Python: %r" % (self.arg,)) + return format_four_bytes((self.arg << 8) | self.op) + + def __str__(self): + classname = CLASS_NAME.get(self.op, self.op) + return '(%s %s)' % (classname, self.arg) + +def format_four_bytes(num): + return '\\x%02X\\x%02X\\x%02X\\x%02X' % ( + (num >> 24) & 0xFF, + (num >> 16) & 0xFF, + (num >> 8) & 0xFF, + (num ) & 0xFF) + +OP_PRIMITIVE = 1 +OP_POINTER = 3 +OP_ARRAY = 5 +OP_OPEN_ARRAY = 7 +OP_STRUCT_UNION = 9 +OP_ENUM = 11 +OP_FUNCTION = 13 +OP_FUNCTION_END = 15 +OP_NOOP = 17 +OP_BITFIELD = 19 +OP_TYPENAME = 21 +OP_CPYTHON_BLTN_V = 23 # varargs +OP_CPYTHON_BLTN_N = 25 # noargs +OP_CPYTHON_BLTN_O = 27 # O (i.e. a single arg) +OP_CONSTANT = 29 +OP_CONSTANT_INT = 31 +OP_GLOBAL_VAR = 33 +OP_DLOPEN_FUNC = 35 +OP_DLOPEN_CONST = 37 +OP_GLOBAL_VAR_F = 39 +OP_EXTERN_PYTHON = 41 + +PRIM_VOID = 0 +PRIM_BOOL = 1 +PRIM_CHAR = 2 +PRIM_SCHAR = 3 +PRIM_UCHAR = 4 +PRIM_SHORT = 5 +PRIM_USHORT = 6 +PRIM_INT = 7 +PRIM_UINT = 8 +PRIM_LONG = 9 +PRIM_ULONG = 10 +PRIM_LONGLONG = 11 +PRIM_ULONGLONG = 12 +PRIM_FLOAT = 13 +PRIM_DOUBLE = 14 +PRIM_LONGDOUBLE = 15 + +PRIM_WCHAR = 16 +PRIM_INT8 = 17 +PRIM_UINT8 = 18 +PRIM_INT16 = 19 +PRIM_UINT16 = 20 +PRIM_INT32 = 21 +PRIM_UINT32 = 22 +PRIM_INT64 = 23 +PRIM_UINT64 = 24 +PRIM_INTPTR = 25 +PRIM_UINTPTR = 26 +PRIM_PTRDIFF = 27 +PRIM_SIZE = 28 +PRIM_SSIZE = 29 +PRIM_INT_LEAST8 = 30 +PRIM_UINT_LEAST8 = 31 +PRIM_INT_LEAST16 = 32 +PRIM_UINT_LEAST16 = 33 +PRIM_INT_LEAST32 = 34 +PRIM_UINT_LEAST32 = 35 +PRIM_INT_LEAST64 = 36 +PRIM_UINT_LEAST64 = 37 +PRIM_INT_FAST8 = 38 +PRIM_UINT_FAST8 = 39 +PRIM_INT_FAST16 = 40 +PRIM_UINT_FAST16 = 41 +PRIM_INT_FAST32 = 42 +PRIM_UINT_FAST32 = 43 +PRIM_INT_FAST64 = 44 +PRIM_UINT_FAST64 = 45 +PRIM_INTMAX = 46 +PRIM_UINTMAX = 47 +PRIM_FLOATCOMPLEX = 48 +PRIM_DOUBLECOMPLEX = 49 +PRIM_CHAR16 = 50 +PRIM_CHAR32 = 51 + +_NUM_PRIM = 52 +_UNKNOWN_PRIM = -1 +_UNKNOWN_FLOAT_PRIM = -2 +_UNKNOWN_LONG_DOUBLE = -3 + +_IO_FILE_STRUCT = -1 + +PRIMITIVE_TO_INDEX = { + 'char': PRIM_CHAR, + 'short': PRIM_SHORT, + 'int': PRIM_INT, + 'long': PRIM_LONG, + 'long long': PRIM_LONGLONG, + 'signed char': PRIM_SCHAR, + 'unsigned char': PRIM_UCHAR, + 'unsigned short': PRIM_USHORT, + 'unsigned int': PRIM_UINT, + 'unsigned long': PRIM_ULONG, + 'unsigned long long': PRIM_ULONGLONG, + 'float': PRIM_FLOAT, + 'double': PRIM_DOUBLE, + 'long double': PRIM_LONGDOUBLE, + '_cffi_float_complex_t': PRIM_FLOATCOMPLEX, + '_cffi_double_complex_t': PRIM_DOUBLECOMPLEX, + '_Bool': PRIM_BOOL, + 'wchar_t': PRIM_WCHAR, + 'char16_t': PRIM_CHAR16, + 'char32_t': PRIM_CHAR32, + 'int8_t': PRIM_INT8, + 'uint8_t': PRIM_UINT8, + 'int16_t': PRIM_INT16, + 'uint16_t': PRIM_UINT16, + 'int32_t': PRIM_INT32, + 'uint32_t': PRIM_UINT32, + 'int64_t': PRIM_INT64, + 'uint64_t': PRIM_UINT64, + 'intptr_t': PRIM_INTPTR, + 'uintptr_t': PRIM_UINTPTR, + 'ptrdiff_t': PRIM_PTRDIFF, + 'size_t': PRIM_SIZE, + 'ssize_t': PRIM_SSIZE, + 'int_least8_t': PRIM_INT_LEAST8, + 'uint_least8_t': PRIM_UINT_LEAST8, + 'int_least16_t': PRIM_INT_LEAST16, + 'uint_least16_t': PRIM_UINT_LEAST16, + 'int_least32_t': PRIM_INT_LEAST32, + 'uint_least32_t': PRIM_UINT_LEAST32, + 'int_least64_t': PRIM_INT_LEAST64, + 'uint_least64_t': PRIM_UINT_LEAST64, + 'int_fast8_t': PRIM_INT_FAST8, + 'uint_fast8_t': PRIM_UINT_FAST8, + 'int_fast16_t': PRIM_INT_FAST16, + 'uint_fast16_t': PRIM_UINT_FAST16, + 'int_fast32_t': PRIM_INT_FAST32, + 'uint_fast32_t': PRIM_UINT_FAST32, + 'int_fast64_t': PRIM_INT_FAST64, + 'uint_fast64_t': PRIM_UINT_FAST64, + 'intmax_t': PRIM_INTMAX, + 'uintmax_t': PRIM_UINTMAX, + } + +F_UNION = 0x01 +F_CHECK_FIELDS = 0x02 +F_PACKED = 0x04 +F_EXTERNAL = 0x08 +F_OPAQUE = 0x10 + +G_FLAGS = dict([('_CFFI_' + _key, globals()[_key]) + for _key in ['F_UNION', 'F_CHECK_FIELDS', 'F_PACKED', + 'F_EXTERNAL', 'F_OPAQUE']]) + +CLASS_NAME = {} +for _name, _value in list(globals().items()): + if _name.startswith('OP_') and isinstance(_value, int): + CLASS_NAME[_value] = _name[3:] diff --git a/venv/lib/python3.12/site-packages/cffi/commontypes.py b/venv/lib/python3.12/site-packages/cffi/commontypes.py new file mode 100644 index 0000000..d4dae35 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/commontypes.py @@ -0,0 +1,82 @@ +import sys +from . import model +from .error import FFIError + + +COMMON_TYPES = {} + +try: + # fetch "bool" and all simple Windows types + from _cffi_backend import _get_common_types + _get_common_types(COMMON_TYPES) +except ImportError: + pass + +COMMON_TYPES['FILE'] = model.unknown_type('FILE', '_IO_FILE') +COMMON_TYPES['bool'] = '_Bool' # in case we got ImportError above +COMMON_TYPES['float _Complex'] = '_cffi_float_complex_t' +COMMON_TYPES['double _Complex'] = '_cffi_double_complex_t' + +for _type in model.PrimitiveType.ALL_PRIMITIVE_TYPES: + if _type.endswith('_t'): + COMMON_TYPES[_type] = _type +del _type + +_CACHE = {} + +def resolve_common_type(parser, commontype): + try: + return _CACHE[commontype] + except KeyError: + cdecl = COMMON_TYPES.get(commontype, commontype) + if not isinstance(cdecl, str): + result, quals = cdecl, 0 # cdecl is already a BaseType + elif cdecl in model.PrimitiveType.ALL_PRIMITIVE_TYPES: + result, quals = model.PrimitiveType(cdecl), 0 + elif cdecl == 'set-unicode-needed': + raise FFIError("The Windows type %r is only available after " + "you call ffi.set_unicode()" % (commontype,)) + else: + if commontype == cdecl: + raise FFIError( + "Unsupported type: %r. Please look at " + "http://cffi.readthedocs.io/en/latest/cdef.html#ffi-cdef-limitations " + "and file an issue if you think this type should really " + "be supported." % (commontype,)) + result, quals = parser.parse_type_and_quals(cdecl) # recursive + + assert isinstance(result, model.BaseTypeByIdentity) + _CACHE[commontype] = result, quals + return result, quals + + +# ____________________________________________________________ +# extra types for Windows (most of them are in commontypes.c) + + +def win_common_types(): + return { + "UNICODE_STRING": model.StructType( + "_UNICODE_STRING", + ["Length", + "MaximumLength", + "Buffer"], + [model.PrimitiveType("unsigned short"), + model.PrimitiveType("unsigned short"), + model.PointerType(model.PrimitiveType("wchar_t"))], + [-1, -1, -1]), + "PUNICODE_STRING": "UNICODE_STRING *", + "PCUNICODE_STRING": "const UNICODE_STRING *", + + "TBYTE": "set-unicode-needed", + "TCHAR": "set-unicode-needed", + "LPCTSTR": "set-unicode-needed", + "PCTSTR": "set-unicode-needed", + "LPTSTR": "set-unicode-needed", + "PTSTR": "set-unicode-needed", + "PTBYTE": "set-unicode-needed", + "PTCHAR": "set-unicode-needed", + } + +if sys.platform == 'win32': + COMMON_TYPES.update(win_common_types()) diff --git a/venv/lib/python3.12/site-packages/cffi/cparser.py b/venv/lib/python3.12/site-packages/cffi/cparser.py new file mode 100644 index 0000000..dd590d8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/cparser.py @@ -0,0 +1,1015 @@ +from . import model +from .commontypes import COMMON_TYPES, resolve_common_type +from .error import FFIError, CDefError +try: + from . import _pycparser as pycparser +except ImportError: + import pycparser +import weakref, re, sys + +try: + if sys.version_info < (3,): + import thread as _thread + else: + import _thread + lock = _thread.allocate_lock() +except ImportError: + lock = None + +def _workaround_for_static_import_finders(): + # Issue #392: packaging tools like cx_Freeze can not find these + # because pycparser uses exec dynamic import. This is an obscure + # workaround. This function is never called. + import pycparser.yacctab + import pycparser.lextab + +CDEF_SOURCE_STRING = "" +_r_comment = re.compile(r"/\*.*?\*/|//([^\n\\]|\\.)*?$", + re.DOTALL | re.MULTILINE) +_r_define = re.compile(r"^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)" + r"\b((?:[^\n\\]|\\.)*?)$", + re.DOTALL | re.MULTILINE) +_r_line_directive = re.compile(r"^[ \t]*#[ \t]*(?:line|\d+)\b.*$", re.MULTILINE) +_r_partial_enum = re.compile(r"=\s*\.\.\.\s*[,}]|\.\.\.\s*\}") +_r_enum_dotdotdot = re.compile(r"__dotdotdot\d+__$") +_r_partial_array = re.compile(r"\[\s*\.\.\.\s*\]") +_r_words = re.compile(r"\w+|\S") +_parser_cache = None +_r_int_literal = re.compile(r"-?0?x?[0-9a-f]+[lu]*$", re.IGNORECASE) +_r_stdcall1 = re.compile(r"\b(__stdcall|WINAPI)\b") +_r_stdcall2 = re.compile(r"[(]\s*(__stdcall|WINAPI)\b") +_r_cdecl = re.compile(r"\b__cdecl\b") +_r_extern_python = re.compile(r'\bextern\s*"' + r'(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.') +_r_star_const_space = re.compile( # matches "* const " + r"[*]\s*((const|volatile|restrict)\b\s*)+") +_r_int_dotdotdot = re.compile(r"(\b(int|long|short|signed|unsigned|char)\s*)+" + r"\.\.\.") +_r_float_dotdotdot = re.compile(r"\b(double|float)\s*\.\.\.") + +def _get_parser(): + global _parser_cache + if _parser_cache is None: + _parser_cache = pycparser.CParser() + return _parser_cache + +def _workaround_for_old_pycparser(csource): + # Workaround for a pycparser issue (fixed between pycparser 2.10 and + # 2.14): "char*const***" gives us a wrong syntax tree, the same as + # for "char***(*const)". This means we can't tell the difference + # afterwards. But "char(*const(***))" gives us the right syntax + # tree. The issue only occurs if there are several stars in + # sequence with no parenthesis in between, just possibly qualifiers. + # Attempt to fix it by adding some parentheses in the source: each + # time we see "* const" or "* const *", we add an opening + # parenthesis before each star---the hard part is figuring out where + # to close them. + parts = [] + while True: + match = _r_star_const_space.search(csource) + if not match: + break + #print repr(''.join(parts)+csource), '=>', + parts.append(csource[:match.start()]) + parts.append('('); closing = ')' + parts.append(match.group()) # e.g. "* const " + endpos = match.end() + if csource.startswith('*', endpos): + parts.append('('); closing += ')' + level = 0 + i = endpos + while i < len(csource): + c = csource[i] + if c == '(': + level += 1 + elif c == ')': + if level == 0: + break + level -= 1 + elif c in ',;=': + if level == 0: + break + i += 1 + csource = csource[endpos:i] + closing + csource[i:] + #print repr(''.join(parts)+csource) + parts.append(csource) + return ''.join(parts) + +def _preprocess_extern_python(csource): + # input: `extern "Python" int foo(int);` or + # `extern "Python" { int foo(int); }` + # output: + # void __cffi_extern_python_start; + # int foo(int); + # void __cffi_extern_python_stop; + # + # input: `extern "Python+C" int foo(int);` + # output: + # void __cffi_extern_python_plus_c_start; + # int foo(int); + # void __cffi_extern_python_stop; + parts = [] + while True: + match = _r_extern_python.search(csource) + if not match: + break + endpos = match.end() - 1 + #print + #print ''.join(parts)+csource + #print '=>' + parts.append(csource[:match.start()]) + if 'C' in match.group(1): + parts.append('void __cffi_extern_python_plus_c_start; ') + else: + parts.append('void __cffi_extern_python_start; ') + if csource[endpos] == '{': + # grouping variant + closing = csource.find('}', endpos) + if closing < 0: + raise CDefError("'extern \"Python\" {': no '}' found") + if csource.find('{', endpos + 1, closing) >= 0: + raise NotImplementedError("cannot use { } inside a block " + "'extern \"Python\" { ... }'") + parts.append(csource[endpos+1:closing]) + csource = csource[closing+1:] + else: + # non-grouping variant + semicolon = csource.find(';', endpos) + if semicolon < 0: + raise CDefError("'extern \"Python\": no ';' found") + parts.append(csource[endpos:semicolon+1]) + csource = csource[semicolon+1:] + parts.append(' void __cffi_extern_python_stop;') + #print ''.join(parts)+csource + #print + parts.append(csource) + return ''.join(parts) + +def _warn_for_string_literal(csource): + if '"' not in csource: + return + for line in csource.splitlines(): + if '"' in line and not line.lstrip().startswith('#'): + import warnings + warnings.warn("String literal found in cdef() or type source. " + "String literals are ignored here, but you should " + "remove them anyway because some character sequences " + "confuse pre-parsing.") + break + +def _warn_for_non_extern_non_static_global_variable(decl): + if not decl.storage: + import warnings + warnings.warn("Global variable '%s' in cdef(): for consistency " + "with C it should have a storage class specifier " + "(usually 'extern')" % (decl.name,)) + +def _remove_line_directives(csource): + # _r_line_directive matches whole lines, without the final \n, if they + # start with '#line' with some spacing allowed, or '#NUMBER'. This + # function stores them away and replaces them with exactly the string + # '#line@N', where N is the index in the list 'line_directives'. + line_directives = [] + def replace(m): + i = len(line_directives) + line_directives.append(m.group()) + return '#line@%d' % i + csource = _r_line_directive.sub(replace, csource) + return csource, line_directives + +def _put_back_line_directives(csource, line_directives): + def replace(m): + s = m.group() + if not s.startswith('#line@'): + raise AssertionError("unexpected #line directive " + "(should have been processed and removed") + return line_directives[int(s[6:])] + return _r_line_directive.sub(replace, csource) + +def _preprocess(csource): + # First, remove the lines of the form '#line N "filename"' because + # the "filename" part could confuse the rest + csource, line_directives = _remove_line_directives(csource) + # Remove comments. NOTE: this only work because the cdef() section + # should not contain any string literals (except in line directives)! + def replace_keeping_newlines(m): + return ' ' + m.group().count('\n') * '\n' + csource = _r_comment.sub(replace_keeping_newlines, csource) + # Remove the "#define FOO x" lines + macros = {} + for match in _r_define.finditer(csource): + macroname, macrovalue = match.groups() + macrovalue = macrovalue.replace('\\\n', '').strip() + macros[macroname] = macrovalue + csource = _r_define.sub('', csource) + # + if pycparser.__version__ < '2.14': + csource = _workaround_for_old_pycparser(csource) + # + # BIG HACK: replace WINAPI or __stdcall with "volatile const". + # It doesn't make sense for the return type of a function to be + # "volatile volatile const", so we abuse it to detect __stdcall... + # Hack number 2 is that "int(volatile *fptr)();" is not valid C + # syntax, so we place the "volatile" before the opening parenthesis. + csource = _r_stdcall2.sub(' volatile volatile const(', csource) + csource = _r_stdcall1.sub(' volatile volatile const ', csource) + csource = _r_cdecl.sub(' ', csource) + # + # Replace `extern "Python"` with start/end markers + csource = _preprocess_extern_python(csource) + # + # Now there should not be any string literal left; warn if we get one + _warn_for_string_literal(csource) + # + # Replace "[...]" with "[__dotdotdotarray__]" + csource = _r_partial_array.sub('[__dotdotdotarray__]', csource) + # + # Replace "...}" with "__dotdotdotNUM__}". This construction should + # occur only at the end of enums; at the end of structs we have "...;}" + # and at the end of vararg functions "...);". Also replace "=...[,}]" + # with ",__dotdotdotNUM__[,}]": this occurs in the enums too, when + # giving an unknown value. + matches = list(_r_partial_enum.finditer(csource)) + for number, match in enumerate(reversed(matches)): + p = match.start() + if csource[p] == '=': + p2 = csource.find('...', p, match.end()) + assert p2 > p + csource = '%s,__dotdotdot%d__ %s' % (csource[:p], number, + csource[p2+3:]) + else: + assert csource[p:p+3] == '...' + csource = '%s __dotdotdot%d__ %s' % (csource[:p], number, + csource[p+3:]) + # Replace "int ..." or "unsigned long int..." with "__dotdotdotint__" + csource = _r_int_dotdotdot.sub(' __dotdotdotint__ ', csource) + # Replace "float ..." or "double..." with "__dotdotdotfloat__" + csource = _r_float_dotdotdot.sub(' __dotdotdotfloat__ ', csource) + # Replace all remaining "..." with the same name, "__dotdotdot__", + # which is declared with a typedef for the purpose of C parsing. + csource = csource.replace('...', ' __dotdotdot__ ') + # Finally, put back the line directives + csource = _put_back_line_directives(csource, line_directives) + return csource, macros + +def _common_type_names(csource): + # Look in the source for what looks like usages of types from the + # list of common types. A "usage" is approximated here as the + # appearance of the word, minus a "definition" of the type, which + # is the last word in a "typedef" statement. Approximative only + # but should be fine for all the common types. + look_for_words = set(COMMON_TYPES) + look_for_words.add(';') + look_for_words.add(',') + look_for_words.add('(') + look_for_words.add(')') + look_for_words.add('typedef') + words_used = set() + is_typedef = False + paren = 0 + previous_word = '' + for word in _r_words.findall(csource): + if word in look_for_words: + if word == ';': + if is_typedef: + words_used.discard(previous_word) + look_for_words.discard(previous_word) + is_typedef = False + elif word == 'typedef': + is_typedef = True + paren = 0 + elif word == '(': + paren += 1 + elif word == ')': + paren -= 1 + elif word == ',': + if is_typedef and paren == 0: + words_used.discard(previous_word) + look_for_words.discard(previous_word) + else: # word in COMMON_TYPES + words_used.add(word) + previous_word = word + return words_used + + +class Parser(object): + + def __init__(self): + self._declarations = {} + self._included_declarations = set() + self._anonymous_counter = 0 + self._structnode2type = weakref.WeakKeyDictionary() + self._options = {} + self._int_constants = {} + self._recomplete = [] + self._uses_new_feature = None + + def _parse(self, csource): + csource, macros = _preprocess(csource) + # XXX: for more efficiency we would need to poke into the + # internals of CParser... the following registers the + # typedefs, because their presence or absence influences the + # parsing itself (but what they are typedef'ed to plays no role) + ctn = _common_type_names(csource) + typenames = [] + for name in sorted(self._declarations): + if name.startswith('typedef '): + name = name[8:] + typenames.append(name) + ctn.discard(name) + typenames += sorted(ctn) + # + csourcelines = [] + csourcelines.append('# 1 ""') + for typename in typenames: + csourcelines.append('typedef int %s;' % typename) + csourcelines.append('typedef int __dotdotdotint__, __dotdotdotfloat__,' + ' __dotdotdot__;') + # this forces pycparser to consider the following in the file + # called from line 1 + csourcelines.append('# 1 "%s"' % (CDEF_SOURCE_STRING,)) + csourcelines.append(csource) + csourcelines.append('') # see test_missing_newline_bug + fullcsource = '\n'.join(csourcelines) + if lock is not None: + lock.acquire() # pycparser is not thread-safe... + try: + ast = _get_parser().parse(fullcsource) + except pycparser.c_parser.ParseError as e: + self.convert_pycparser_error(e, csource) + finally: + if lock is not None: + lock.release() + # csource will be used to find buggy source text + return ast, macros, csource + + def _convert_pycparser_error(self, e, csource): + # xxx look for ":NUM:" at the start of str(e) + # and interpret that as a line number. This will not work if + # the user gives explicit ``# NUM "FILE"`` directives. + line = None + msg = str(e) + match = re.match(r"%s:(\d+):" % (CDEF_SOURCE_STRING,), msg) + if match: + linenum = int(match.group(1), 10) + csourcelines = csource.splitlines() + if 1 <= linenum <= len(csourcelines): + line = csourcelines[linenum-1] + return line + + def convert_pycparser_error(self, e, csource): + line = self._convert_pycparser_error(e, csource) + + msg = str(e) + if line: + msg = 'cannot parse "%s"\n%s' % (line.strip(), msg) + else: + msg = 'parse error\n%s' % (msg,) + raise CDefError(msg) + + def parse(self, csource, override=False, packed=False, pack=None, + dllexport=False): + if packed: + if packed != True: + raise ValueError("'packed' should be False or True; use " + "'pack' to give another value") + if pack: + raise ValueError("cannot give both 'pack' and 'packed'") + pack = 1 + elif pack: + if pack & (pack - 1): + raise ValueError("'pack' must be a power of two, not %r" % + (pack,)) + else: + pack = 0 + prev_options = self._options + try: + self._options = {'override': override, + 'packed': pack, + 'dllexport': dllexport} + self._internal_parse(csource) + finally: + self._options = prev_options + + def _internal_parse(self, csource): + ast, macros, csource = self._parse(csource) + # add the macros + self._process_macros(macros) + # find the first "__dotdotdot__" and use that as a separator + # between the repeated typedefs and the real csource + iterator = iter(ast.ext) + for decl in iterator: + if decl.name == '__dotdotdot__': + break + else: + assert 0 + current_decl = None + # + try: + self._inside_extern_python = '__cffi_extern_python_stop' + for decl in iterator: + current_decl = decl + if isinstance(decl, pycparser.c_ast.Decl): + self._parse_decl(decl) + elif isinstance(decl, pycparser.c_ast.Typedef): + if not decl.name: + raise CDefError("typedef does not declare any name", + decl) + quals = 0 + if (isinstance(decl.type.type, pycparser.c_ast.IdentifierType) and + decl.type.type.names[-1].startswith('__dotdotdot')): + realtype = self._get_unknown_type(decl) + elif (isinstance(decl.type, pycparser.c_ast.PtrDecl) and + isinstance(decl.type.type, pycparser.c_ast.TypeDecl) and + isinstance(decl.type.type.type, + pycparser.c_ast.IdentifierType) and + decl.type.type.type.names[-1].startswith('__dotdotdot')): + realtype = self._get_unknown_ptr_type(decl) + else: + realtype, quals = self._get_type_and_quals( + decl.type, name=decl.name, partial_length_ok=True, + typedef_example="*(%s *)0" % (decl.name,)) + self._declare('typedef ' + decl.name, realtype, quals=quals) + elif decl.__class__.__name__ == 'Pragma': + # skip pragma, only in pycparser 2.15 + import warnings + warnings.warn( + "#pragma in cdef() are entirely ignored. " + "They should be removed for now, otherwise your " + "code might behave differently in a future version " + "of CFFI if #pragma support gets added. Note that " + "'#pragma pack' needs to be replaced with the " + "'packed' keyword argument to cdef().") + else: + raise CDefError("unexpected <%s>: this construct is valid " + "C but not valid in cdef()" % + decl.__class__.__name__, decl) + except CDefError as e: + if len(e.args) == 1: + e.args = e.args + (current_decl,) + raise + except FFIError as e: + msg = self._convert_pycparser_error(e, csource) + if msg: + e.args = (e.args[0] + "\n *** Err: %s" % msg,) + raise + + def _add_constants(self, key, val): + if key in self._int_constants: + if self._int_constants[key] == val: + return # ignore identical double declarations + raise FFIError( + "multiple declarations of constant: %s" % (key,)) + self._int_constants[key] = val + + def _add_integer_constant(self, name, int_str): + int_str = int_str.lower().rstrip("ul") + neg = int_str.startswith('-') + if neg: + int_str = int_str[1:] + # "010" is not valid oct in py3 + if (int_str.startswith("0") and int_str != '0' + and not int_str.startswith("0x")): + int_str = "0o" + int_str[1:] + pyvalue = int(int_str, 0) + if neg: + pyvalue = -pyvalue + self._add_constants(name, pyvalue) + self._declare('macro ' + name, pyvalue) + + def _process_macros(self, macros): + for key, value in macros.items(): + value = value.strip() + if _r_int_literal.match(value): + self._add_integer_constant(key, value) + elif value == '...': + self._declare('macro ' + key, value) + else: + raise CDefError( + 'only supports one of the following syntax:\n' + ' #define %s ... (literally dot-dot-dot)\n' + ' #define %s NUMBER (with NUMBER an integer' + ' constant, decimal/hex/octal)\n' + 'got:\n' + ' #define %s %s' + % (key, key, key, value)) + + def _declare_function(self, tp, quals, decl): + tp = self._get_type_pointer(tp, quals) + if self._options.get('dllexport'): + tag = 'dllexport_python ' + elif self._inside_extern_python == '__cffi_extern_python_start': + tag = 'extern_python ' + elif self._inside_extern_python == '__cffi_extern_python_plus_c_start': + tag = 'extern_python_plus_c ' + else: + tag = 'function ' + self._declare(tag + decl.name, tp) + + def _parse_decl(self, decl): + node = decl.type + if isinstance(node, pycparser.c_ast.FuncDecl): + tp, quals = self._get_type_and_quals(node, name=decl.name) + assert isinstance(tp, model.RawFunctionType) + self._declare_function(tp, quals, decl) + else: + if isinstance(node, pycparser.c_ast.Struct): + self._get_struct_union_enum_type('struct', node) + elif isinstance(node, pycparser.c_ast.Union): + self._get_struct_union_enum_type('union', node) + elif isinstance(node, pycparser.c_ast.Enum): + self._get_struct_union_enum_type('enum', node) + elif not decl.name: + raise CDefError("construct does not declare any variable", + decl) + # + if decl.name: + tp, quals = self._get_type_and_quals(node, + partial_length_ok=True) + if tp.is_raw_function: + self._declare_function(tp, quals, decl) + elif (tp.is_integer_type() and + hasattr(decl, 'init') and + hasattr(decl.init, 'value') and + _r_int_literal.match(decl.init.value)): + self._add_integer_constant(decl.name, decl.init.value) + elif (tp.is_integer_type() and + isinstance(decl.init, pycparser.c_ast.UnaryOp) and + decl.init.op == '-' and + hasattr(decl.init.expr, 'value') and + _r_int_literal.match(decl.init.expr.value)): + self._add_integer_constant(decl.name, + '-' + decl.init.expr.value) + elif (tp is model.void_type and + decl.name.startswith('__cffi_extern_python_')): + # hack: `extern "Python"` in the C source is replaced + # with "void __cffi_extern_python_start;" and + # "void __cffi_extern_python_stop;" + self._inside_extern_python = decl.name + else: + if self._inside_extern_python !='__cffi_extern_python_stop': + raise CDefError( + "cannot declare constants or " + "variables with 'extern \"Python\"'") + if (quals & model.Q_CONST) and not tp.is_array_type: + self._declare('constant ' + decl.name, tp, quals=quals) + else: + _warn_for_non_extern_non_static_global_variable(decl) + self._declare('variable ' + decl.name, tp, quals=quals) + + def parse_type(self, cdecl): + return self.parse_type_and_quals(cdecl)[0] + + def parse_type_and_quals(self, cdecl): + ast, macros = self._parse('void __dummy(\n%s\n);' % cdecl)[:2] + assert not macros + exprnode = ast.ext[-1].type.args.params[0] + if isinstance(exprnode, pycparser.c_ast.ID): + raise CDefError("unknown identifier '%s'" % (exprnode.name,)) + return self._get_type_and_quals(exprnode.type) + + def _declare(self, name, obj, included=False, quals=0): + if name in self._declarations: + prevobj, prevquals = self._declarations[name] + if prevobj is obj and prevquals == quals: + return + if not self._options.get('override'): + raise FFIError( + "multiple declarations of %s (for interactive usage, " + "try cdef(xx, override=True))" % (name,)) + assert '__dotdotdot__' not in name.split() + self._declarations[name] = (obj, quals) + if included: + self._included_declarations.add(obj) + + def _extract_quals(self, type): + quals = 0 + if isinstance(type, (pycparser.c_ast.TypeDecl, + pycparser.c_ast.PtrDecl)): + if 'const' in type.quals: + quals |= model.Q_CONST + if 'volatile' in type.quals: + quals |= model.Q_VOLATILE + if 'restrict' in type.quals: + quals |= model.Q_RESTRICT + return quals + + def _get_type_pointer(self, type, quals, declname=None): + if isinstance(type, model.RawFunctionType): + return type.as_function_pointer() + if (isinstance(type, model.StructOrUnionOrEnum) and + type.name.startswith('$') and type.name[1:].isdigit() and + type.forcename is None and declname is not None): + return model.NamedPointerType(type, declname, quals) + return model.PointerType(type, quals) + + def _get_type_and_quals(self, typenode, name=None, partial_length_ok=False, + typedef_example=None): + # first, dereference typedefs, if we have it already parsed, we're good + if (isinstance(typenode, pycparser.c_ast.TypeDecl) and + isinstance(typenode.type, pycparser.c_ast.IdentifierType) and + len(typenode.type.names) == 1 and + ('typedef ' + typenode.type.names[0]) in self._declarations): + tp, quals = self._declarations['typedef ' + typenode.type.names[0]] + quals |= self._extract_quals(typenode) + return tp, quals + # + if isinstance(typenode, pycparser.c_ast.ArrayDecl): + # array type + if typenode.dim is None: + length = None + else: + length = self._parse_constant( + typenode.dim, partial_length_ok=partial_length_ok) + # a hack: in 'typedef int foo_t[...][...];', don't use '...' as + # the length but use directly the C expression that would be + # generated by recompiler.py. This lets the typedef be used in + # many more places within recompiler.py + if typedef_example is not None: + if length == '...': + length = '_cffi_array_len(%s)' % (typedef_example,) + typedef_example = "*" + typedef_example + # + tp, quals = self._get_type_and_quals(typenode.type, + partial_length_ok=partial_length_ok, + typedef_example=typedef_example) + return model.ArrayType(tp, length), quals + # + if isinstance(typenode, pycparser.c_ast.PtrDecl): + # pointer type + itemtype, itemquals = self._get_type_and_quals(typenode.type) + tp = self._get_type_pointer(itemtype, itemquals, declname=name) + quals = self._extract_quals(typenode) + return tp, quals + # + if isinstance(typenode, pycparser.c_ast.TypeDecl): + quals = self._extract_quals(typenode) + type = typenode.type + if isinstance(type, pycparser.c_ast.IdentifierType): + # assume a primitive type. get it from .names, but reduce + # synonyms to a single chosen combination + names = list(type.names) + if names != ['signed', 'char']: # keep this unmodified + prefixes = {} + while names: + name = names[0] + if name in ('short', 'long', 'signed', 'unsigned'): + prefixes[name] = prefixes.get(name, 0) + 1 + del names[0] + else: + break + # ignore the 'signed' prefix below, and reorder the others + newnames = [] + for prefix in ('unsigned', 'short', 'long'): + for i in range(prefixes.get(prefix, 0)): + newnames.append(prefix) + if not names: + names = ['int'] # implicitly + if names == ['int']: # but kill it if 'short' or 'long' + if 'short' in prefixes or 'long' in prefixes: + names = [] + names = newnames + names + ident = ' '.join(names) + if ident == 'void': + return model.void_type, quals + if ident == '__dotdotdot__': + raise FFIError(':%d: bad usage of "..."' % + typenode.coord.line) + tp0, quals0 = resolve_common_type(self, ident) + return tp0, (quals | quals0) + # + if isinstance(type, pycparser.c_ast.Struct): + # 'struct foobar' + tp = self._get_struct_union_enum_type('struct', type, name) + return tp, quals + # + if isinstance(type, pycparser.c_ast.Union): + # 'union foobar' + tp = self._get_struct_union_enum_type('union', type, name) + return tp, quals + # + if isinstance(type, pycparser.c_ast.Enum): + # 'enum foobar' + tp = self._get_struct_union_enum_type('enum', type, name) + return tp, quals + # + if isinstance(typenode, pycparser.c_ast.FuncDecl): + # a function type + return self._parse_function_type(typenode, name), 0 + # + # nested anonymous structs or unions end up here + if isinstance(typenode, pycparser.c_ast.Struct): + return self._get_struct_union_enum_type('struct', typenode, name, + nested=True), 0 + if isinstance(typenode, pycparser.c_ast.Union): + return self._get_struct_union_enum_type('union', typenode, name, + nested=True), 0 + # + raise FFIError(":%d: bad or unsupported type declaration" % + typenode.coord.line) + + def _parse_function_type(self, typenode, funcname=None): + params = list(getattr(typenode.args, 'params', [])) + for i, arg in enumerate(params): + if not hasattr(arg, 'type'): + raise CDefError("%s arg %d: unknown type '%s'" + " (if you meant to use the old C syntax of giving" + " untyped arguments, it is not supported)" + % (funcname or 'in expression', i + 1, + getattr(arg, 'name', '?'))) + ellipsis = ( + len(params) > 0 and + isinstance(params[-1].type, pycparser.c_ast.TypeDecl) and + isinstance(params[-1].type.type, + pycparser.c_ast.IdentifierType) and + params[-1].type.type.names == ['__dotdotdot__']) + if ellipsis: + params.pop() + if not params: + raise CDefError( + "%s: a function with only '(...)' as argument" + " is not correct C" % (funcname or 'in expression')) + args = [self._as_func_arg(*self._get_type_and_quals(argdeclnode.type)) + for argdeclnode in params] + if not ellipsis and args == [model.void_type]: + args = [] + result, quals = self._get_type_and_quals(typenode.type) + # the 'quals' on the result type are ignored. HACK: we absure them + # to detect __stdcall functions: we textually replace "__stdcall" + # with "volatile volatile const" above. + abi = None + if hasattr(typenode.type, 'quals'): # else, probable syntax error anyway + if typenode.type.quals[-3:] == ['volatile', 'volatile', 'const']: + abi = '__stdcall' + return model.RawFunctionType(tuple(args), result, ellipsis, abi) + + def _as_func_arg(self, type, quals): + if isinstance(type, model.ArrayType): + return model.PointerType(type.item, quals) + elif isinstance(type, model.RawFunctionType): + return type.as_function_pointer() + else: + return type + + def _get_struct_union_enum_type(self, kind, type, name=None, nested=False): + # First, a level of caching on the exact 'type' node of the AST. + # This is obscure, but needed because pycparser "unrolls" declarations + # such as "typedef struct { } foo_t, *foo_p" and we end up with + # an AST that is not a tree, but a DAG, with the "type" node of the + # two branches foo_t and foo_p of the trees being the same node. + # It's a bit silly but detecting "DAG-ness" in the AST tree seems + # to be the only way to distinguish this case from two independent + # structs. See test_struct_with_two_usages. + try: + return self._structnode2type[type] + except KeyError: + pass + # + # Note that this must handle parsing "struct foo" any number of + # times and always return the same StructType object. Additionally, + # one of these times (not necessarily the first), the fields of + # the struct can be specified with "struct foo { ...fields... }". + # If no name is given, then we have to create a new anonymous struct + # with no caching; in this case, the fields are either specified + # right now or never. + # + force_name = name + name = type.name + # + # get the type or create it if needed + if name is None: + # 'force_name' is used to guess a more readable name for + # anonymous structs, for the common case "typedef struct { } foo". + if force_name is not None: + explicit_name = '$%s' % force_name + else: + self._anonymous_counter += 1 + explicit_name = '$%d' % self._anonymous_counter + tp = None + else: + explicit_name = name + key = '%s %s' % (kind, name) + tp, _ = self._declarations.get(key, (None, None)) + # + if tp is None: + if kind == 'struct': + tp = model.StructType(explicit_name, None, None, None) + elif kind == 'union': + tp = model.UnionType(explicit_name, None, None, None) + elif kind == 'enum': + if explicit_name == '__dotdotdot__': + raise CDefError("Enums cannot be declared with ...") + tp = self._build_enum_type(explicit_name, type.values) + else: + raise AssertionError("kind = %r" % (kind,)) + if name is not None: + self._declare(key, tp) + else: + if kind == 'enum' and type.values is not None: + raise NotImplementedError( + "enum %s: the '{}' declaration should appear on the first " + "time the enum is mentioned, not later" % explicit_name) + if not tp.forcename: + tp.force_the_name(force_name) + if tp.forcename and '$' in tp.name: + self._declare('anonymous %s' % tp.forcename, tp) + # + self._structnode2type[type] = tp + # + # enums: done here + if kind == 'enum': + return tp + # + # is there a 'type.decls'? If yes, then this is the place in the + # C sources that declare the fields. If no, then just return the + # existing type, possibly still incomplete. + if type.decls is None: + return tp + # + if tp.fldnames is not None: + raise CDefError("duplicate declaration of struct %s" % name) + fldnames = [] + fldtypes = [] + fldbitsize = [] + fldquals = [] + for decl in type.decls: + if (isinstance(decl.type, pycparser.c_ast.IdentifierType) and + ''.join(decl.type.names) == '__dotdotdot__'): + # XXX pycparser is inconsistent: 'names' should be a list + # of strings, but is sometimes just one string. Use + # str.join() as a way to cope with both. + self._make_partial(tp, nested) + continue + if decl.bitsize is None: + bitsize = -1 + else: + bitsize = self._parse_constant(decl.bitsize) + self._partial_length = False + type, fqual = self._get_type_and_quals(decl.type, + partial_length_ok=True) + if self._partial_length: + self._make_partial(tp, nested) + if isinstance(type, model.StructType) and type.partial: + self._make_partial(tp, nested) + fldnames.append(decl.name or '') + fldtypes.append(type) + fldbitsize.append(bitsize) + fldquals.append(fqual) + tp.fldnames = tuple(fldnames) + tp.fldtypes = tuple(fldtypes) + tp.fldbitsize = tuple(fldbitsize) + tp.fldquals = tuple(fldquals) + if fldbitsize != [-1] * len(fldbitsize): + if isinstance(tp, model.StructType) and tp.partial: + raise NotImplementedError("%s: using both bitfields and '...;'" + % (tp,)) + tp.packed = self._options.get('packed') + if tp.completed: # must be re-completed: it is not opaque any more + tp.completed = 0 + self._recomplete.append(tp) + return tp + + def _make_partial(self, tp, nested): + if not isinstance(tp, model.StructOrUnion): + raise CDefError("%s cannot be partial" % (tp,)) + if not tp.has_c_name() and not nested: + raise NotImplementedError("%s is partial but has no C name" %(tp,)) + tp.partial = True + + def _parse_constant(self, exprnode, partial_length_ok=False): + # for now, limited to expressions that are an immediate number + # or positive/negative number + if isinstance(exprnode, pycparser.c_ast.Constant): + s = exprnode.value + if '0' <= s[0] <= '9': + s = s.rstrip('uUlL') + try: + if s.startswith('0'): + return int(s, 8) + else: + return int(s, 10) + except ValueError: + if len(s) > 1: + if s.lower()[0:2] == '0x': + return int(s, 16) + elif s.lower()[0:2] == '0b': + return int(s, 2) + raise CDefError("invalid constant %r" % (s,)) + elif s[0] == "'" and s[-1] == "'" and ( + len(s) == 3 or (len(s) == 4 and s[1] == "\\")): + return ord(s[-2]) + else: + raise CDefError("invalid constant %r" % (s,)) + # + if (isinstance(exprnode, pycparser.c_ast.UnaryOp) and + exprnode.op == '+'): + return self._parse_constant(exprnode.expr) + # + if (isinstance(exprnode, pycparser.c_ast.UnaryOp) and + exprnode.op == '-'): + return -self._parse_constant(exprnode.expr) + # load previously defined int constant + if (isinstance(exprnode, pycparser.c_ast.ID) and + exprnode.name in self._int_constants): + return self._int_constants[exprnode.name] + # + if (isinstance(exprnode, pycparser.c_ast.ID) and + exprnode.name == '__dotdotdotarray__'): + if partial_length_ok: + self._partial_length = True + return '...' + raise FFIError(":%d: unsupported '[...]' here, cannot derive " + "the actual array length in this context" + % exprnode.coord.line) + # + if isinstance(exprnode, pycparser.c_ast.BinaryOp): + left = self._parse_constant(exprnode.left) + right = self._parse_constant(exprnode.right) + if exprnode.op == '+': + return left + right + elif exprnode.op == '-': + return left - right + elif exprnode.op == '*': + return left * right + elif exprnode.op == '/': + return self._c_div(left, right) + elif exprnode.op == '%': + return left - self._c_div(left, right) * right + elif exprnode.op == '<<': + return left << right + elif exprnode.op == '>>': + return left >> right + elif exprnode.op == '&': + return left & right + elif exprnode.op == '|': + return left | right + elif exprnode.op == '^': + return left ^ right + # + raise FFIError(":%d: unsupported expression: expected a " + "simple numeric constant" % exprnode.coord.line) + + def _c_div(self, a, b): + result = a // b + if ((a < 0) ^ (b < 0)) and (a % b) != 0: + result += 1 + return result + + def _build_enum_type(self, explicit_name, decls): + if decls is not None: + partial = False + enumerators = [] + enumvalues = [] + nextenumvalue = 0 + for enum in decls.enumerators: + if _r_enum_dotdotdot.match(enum.name): + partial = True + continue + if enum.value is not None: + nextenumvalue = self._parse_constant(enum.value) + enumerators.append(enum.name) + enumvalues.append(nextenumvalue) + self._add_constants(enum.name, nextenumvalue) + nextenumvalue += 1 + enumerators = tuple(enumerators) + enumvalues = tuple(enumvalues) + tp = model.EnumType(explicit_name, enumerators, enumvalues) + tp.partial = partial + else: # opaque enum + tp = model.EnumType(explicit_name, (), ()) + return tp + + def include(self, other): + for name, (tp, quals) in other._declarations.items(): + if name.startswith('anonymous $enum_$'): + continue # fix for test_anonymous_enum_include + kind = name.split(' ', 1)[0] + if kind in ('struct', 'union', 'enum', 'anonymous', 'typedef'): + self._declare(name, tp, included=True, quals=quals) + for k, v in other._int_constants.items(): + self._add_constants(k, v) + + def _get_unknown_type(self, decl): + typenames = decl.type.type.names + if typenames == ['__dotdotdot__']: + return model.unknown_type(decl.name) + + if typenames == ['__dotdotdotint__']: + if self._uses_new_feature is None: + self._uses_new_feature = "'typedef int... %s'" % decl.name + return model.UnknownIntegerType(decl.name) + + if typenames == ['__dotdotdotfloat__']: + # note: not for 'long double' so far + if self._uses_new_feature is None: + self._uses_new_feature = "'typedef float... %s'" % decl.name + return model.UnknownFloatType(decl.name) + + raise FFIError(':%d: unsupported usage of "..." in typedef' + % decl.coord.line) + + def _get_unknown_ptr_type(self, decl): + if decl.type.type.type.names == ['__dotdotdot__']: + return model.unknown_ptr_type(decl.name) + raise FFIError(':%d: unsupported usage of "..." in typedef' + % decl.coord.line) diff --git a/venv/lib/python3.12/site-packages/cffi/error.py b/venv/lib/python3.12/site-packages/cffi/error.py new file mode 100644 index 0000000..0a27247 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/error.py @@ -0,0 +1,31 @@ + +class FFIError(Exception): + __module__ = 'cffi' + +class CDefError(Exception): + __module__ = 'cffi' + def __str__(self): + try: + current_decl = self.args[1] + filename = current_decl.coord.file + linenum = current_decl.coord.line + prefix = '%s:%d: ' % (filename, linenum) + except (AttributeError, TypeError, IndexError): + prefix = '' + return '%s%s' % (prefix, self.args[0]) + +class VerificationError(Exception): + """ An error raised when verification fails + """ + __module__ = 'cffi' + +class VerificationMissing(Exception): + """ An error raised when incomplete structures are passed into + cdef, but no verification has been done + """ + __module__ = 'cffi' + +class PkgConfigError(Exception): + """ An error raised for missing modules in pkg-config + """ + __module__ = 'cffi' diff --git a/venv/lib/python3.12/site-packages/cffi/ffiplatform.py b/venv/lib/python3.12/site-packages/cffi/ffiplatform.py new file mode 100644 index 0000000..adca28f --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/ffiplatform.py @@ -0,0 +1,113 @@ +import sys, os +from .error import VerificationError + + +LIST_OF_FILE_NAMES = ['sources', 'include_dirs', 'library_dirs', + 'extra_objects', 'depends'] + +def get_extension(srcfilename, modname, sources=(), **kwds): + from cffi._shimmed_dist_utils import Extension + allsources = [srcfilename] + for src in sources: + allsources.append(os.path.normpath(src)) + return Extension(name=modname, sources=allsources, **kwds) + +def compile(tmpdir, ext, compiler_verbose=0, debug=None): + """Compile a C extension module using distutils.""" + + saved_environ = os.environ.copy() + try: + outputfilename = _build(tmpdir, ext, compiler_verbose, debug) + outputfilename = os.path.abspath(outputfilename) + finally: + # workaround for a distutils bugs where some env vars can + # become longer and longer every time it is used + for key, value in saved_environ.items(): + if os.environ.get(key) != value: + os.environ[key] = value + return outputfilename + +def _build(tmpdir, ext, compiler_verbose=0, debug=None): + # XXX compact but horrible :-( + from cffi._shimmed_dist_utils import Distribution, CompileError, LinkError, set_threshold, set_verbosity + + dist = Distribution({'ext_modules': [ext]}) + dist.parse_config_files() + options = dist.get_option_dict('build_ext') + if debug is None: + debug = sys.flags.debug + options['debug'] = ('ffiplatform', debug) + options['force'] = ('ffiplatform', True) + options['build_lib'] = ('ffiplatform', tmpdir) + options['build_temp'] = ('ffiplatform', tmpdir) + # + try: + old_level = set_threshold(0) or 0 + try: + set_verbosity(compiler_verbose) + dist.run_command('build_ext') + cmd_obj = dist.get_command_obj('build_ext') + [soname] = cmd_obj.get_outputs() + finally: + set_threshold(old_level) + except (CompileError, LinkError) as e: + raise VerificationError('%s: %s' % (e.__class__.__name__, e)) + # + return soname + +try: + from os.path import samefile +except ImportError: + def samefile(f1, f2): + return os.path.abspath(f1) == os.path.abspath(f2) + +def maybe_relative_path(path): + if not os.path.isabs(path): + return path # already relative + dir = path + names = [] + while True: + prevdir = dir + dir, name = os.path.split(prevdir) + if dir == prevdir or not dir: + return path # failed to make it relative + names.append(name) + try: + if samefile(dir, os.curdir): + names.reverse() + return os.path.join(*names) + except OSError: + pass + +# ____________________________________________________________ + +try: + int_or_long = (int, long) + import cStringIO +except NameError: + int_or_long = int # Python 3 + import io as cStringIO + +def _flatten(x, f): + if isinstance(x, str): + f.write('%ds%s' % (len(x), x)) + elif isinstance(x, dict): + keys = sorted(x.keys()) + f.write('%dd' % len(keys)) + for key in keys: + _flatten(key, f) + _flatten(x[key], f) + elif isinstance(x, (list, tuple)): + f.write('%dl' % len(x)) + for value in x: + _flatten(value, f) + elif isinstance(x, int_or_long): + f.write('%di' % (x,)) + else: + raise TypeError( + "the keywords to verify() contains unsupported object %r" % (x,)) + +def flatten(x): + f = cStringIO.StringIO() + _flatten(x, f) + return f.getvalue() diff --git a/venv/lib/python3.12/site-packages/cffi/lock.py b/venv/lib/python3.12/site-packages/cffi/lock.py new file mode 100644 index 0000000..db91b71 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/lock.py @@ -0,0 +1,30 @@ +import sys + +if sys.version_info < (3,): + try: + from thread import allocate_lock + except ImportError: + from dummy_thread import allocate_lock +else: + try: + from _thread import allocate_lock + except ImportError: + from _dummy_thread import allocate_lock + + +##import sys +##l1 = allocate_lock + +##class allocate_lock(object): +## def __init__(self): +## self._real = l1() +## def __enter__(self): +## for i in range(4, 0, -1): +## print sys._getframe(i).f_code +## print +## return self._real.__enter__() +## def __exit__(self, *args): +## return self._real.__exit__(*args) +## def acquire(self, f): +## assert f is False +## return self._real.acquire(f) diff --git a/venv/lib/python3.12/site-packages/cffi/model.py b/venv/lib/python3.12/site-packages/cffi/model.py new file mode 100644 index 0000000..e5f4cae --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/model.py @@ -0,0 +1,618 @@ +import types +import weakref + +from .lock import allocate_lock +from .error import CDefError, VerificationError, VerificationMissing + +# type qualifiers +Q_CONST = 0x01 +Q_RESTRICT = 0x02 +Q_VOLATILE = 0x04 + +def qualify(quals, replace_with): + if quals & Q_CONST: + replace_with = ' const ' + replace_with.lstrip() + if quals & Q_VOLATILE: + replace_with = ' volatile ' + replace_with.lstrip() + if quals & Q_RESTRICT: + # It seems that __restrict is supported by gcc and msvc. + # If you hit some different compiler, add a #define in + # _cffi_include.h for it (and in its copies, documented there) + replace_with = ' __restrict ' + replace_with.lstrip() + return replace_with + + +class BaseTypeByIdentity(object): + is_array_type = False + is_raw_function = False + + def get_c_name(self, replace_with='', context='a C file', quals=0): + result = self.c_name_with_marker + assert result.count('&') == 1 + # some logic duplication with ffi.getctype()... :-( + replace_with = replace_with.strip() + if replace_with: + if replace_with.startswith('*') and '&[' in result: + replace_with = '(%s)' % replace_with + elif not replace_with[0] in '[(': + replace_with = ' ' + replace_with + replace_with = qualify(quals, replace_with) + result = result.replace('&', replace_with) + if '$' in result: + raise VerificationError( + "cannot generate '%s' in %s: unknown type name" + % (self._get_c_name(), context)) + return result + + def _get_c_name(self): + return self.c_name_with_marker.replace('&', '') + + def has_c_name(self): + return '$' not in self._get_c_name() + + def is_integer_type(self): + return False + + def get_cached_btype(self, ffi, finishlist, can_delay=False): + try: + BType = ffi._cached_btypes[self] + except KeyError: + BType = self.build_backend_type(ffi, finishlist) + BType2 = ffi._cached_btypes.setdefault(self, BType) + assert BType2 is BType + return BType + + def __repr__(self): + return '<%s>' % (self._get_c_name(),) + + def _get_items(self): + return [(name, getattr(self, name)) for name in self._attrs_] + + +class BaseType(BaseTypeByIdentity): + + def __eq__(self, other): + return (self.__class__ == other.__class__ and + self._get_items() == other._get_items()) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash((self.__class__, tuple(self._get_items()))) + + +class VoidType(BaseType): + _attrs_ = () + + def __init__(self): + self.c_name_with_marker = 'void&' + + def build_backend_type(self, ffi, finishlist): + return global_cache(self, ffi, 'new_void_type') + +void_type = VoidType() + + +class BasePrimitiveType(BaseType): + def is_complex_type(self): + return False + + +class PrimitiveType(BasePrimitiveType): + _attrs_ = ('name',) + + ALL_PRIMITIVE_TYPES = { + 'char': 'c', + 'short': 'i', + 'int': 'i', + 'long': 'i', + 'long long': 'i', + 'signed char': 'i', + 'unsigned char': 'i', + 'unsigned short': 'i', + 'unsigned int': 'i', + 'unsigned long': 'i', + 'unsigned long long': 'i', + 'float': 'f', + 'double': 'f', + 'long double': 'f', + '_cffi_float_complex_t': 'j', + '_cffi_double_complex_t': 'j', + '_Bool': 'i', + # the following types are not primitive in the C sense + 'wchar_t': 'c', + 'char16_t': 'c', + 'char32_t': 'c', + 'int8_t': 'i', + 'uint8_t': 'i', + 'int16_t': 'i', + 'uint16_t': 'i', + 'int32_t': 'i', + 'uint32_t': 'i', + 'int64_t': 'i', + 'uint64_t': 'i', + 'int_least8_t': 'i', + 'uint_least8_t': 'i', + 'int_least16_t': 'i', + 'uint_least16_t': 'i', + 'int_least32_t': 'i', + 'uint_least32_t': 'i', + 'int_least64_t': 'i', + 'uint_least64_t': 'i', + 'int_fast8_t': 'i', + 'uint_fast8_t': 'i', + 'int_fast16_t': 'i', + 'uint_fast16_t': 'i', + 'int_fast32_t': 'i', + 'uint_fast32_t': 'i', + 'int_fast64_t': 'i', + 'uint_fast64_t': 'i', + 'intptr_t': 'i', + 'uintptr_t': 'i', + 'intmax_t': 'i', + 'uintmax_t': 'i', + 'ptrdiff_t': 'i', + 'size_t': 'i', + 'ssize_t': 'i', + } + + def __init__(self, name): + assert name in self.ALL_PRIMITIVE_TYPES + self.name = name + self.c_name_with_marker = name + '&' + + def is_char_type(self): + return self.ALL_PRIMITIVE_TYPES[self.name] == 'c' + def is_integer_type(self): + return self.ALL_PRIMITIVE_TYPES[self.name] == 'i' + def is_float_type(self): + return self.ALL_PRIMITIVE_TYPES[self.name] == 'f' + def is_complex_type(self): + return self.ALL_PRIMITIVE_TYPES[self.name] == 'j' + + def build_backend_type(self, ffi, finishlist): + return global_cache(self, ffi, 'new_primitive_type', self.name) + + +class UnknownIntegerType(BasePrimitiveType): + _attrs_ = ('name',) + + def __init__(self, name): + self.name = name + self.c_name_with_marker = name + '&' + + def is_integer_type(self): + return True + + def build_backend_type(self, ffi, finishlist): + raise NotImplementedError("integer type '%s' can only be used after " + "compilation" % self.name) + +class UnknownFloatType(BasePrimitiveType): + _attrs_ = ('name', ) + + def __init__(self, name): + self.name = name + self.c_name_with_marker = name + '&' + + def build_backend_type(self, ffi, finishlist): + raise NotImplementedError("float type '%s' can only be used after " + "compilation" % self.name) + + +class BaseFunctionType(BaseType): + _attrs_ = ('args', 'result', 'ellipsis', 'abi') + + def __init__(self, args, result, ellipsis, abi=None): + self.args = args + self.result = result + self.ellipsis = ellipsis + self.abi = abi + # + reprargs = [arg._get_c_name() for arg in self.args] + if self.ellipsis: + reprargs.append('...') + reprargs = reprargs or ['void'] + replace_with = self._base_pattern % (', '.join(reprargs),) + if abi is not None: + replace_with = replace_with[:1] + abi + ' ' + replace_with[1:] + self.c_name_with_marker = ( + self.result.c_name_with_marker.replace('&', replace_with)) + + +class RawFunctionType(BaseFunctionType): + # Corresponds to a C type like 'int(int)', which is the C type of + # a function, but not a pointer-to-function. The backend has no + # notion of such a type; it's used temporarily by parsing. + _base_pattern = '(&)(%s)' + is_raw_function = True + + def build_backend_type(self, ffi, finishlist): + raise CDefError("cannot render the type %r: it is a function " + "type, not a pointer-to-function type" % (self,)) + + def as_function_pointer(self): + return FunctionPtrType(self.args, self.result, self.ellipsis, self.abi) + + +class FunctionPtrType(BaseFunctionType): + _base_pattern = '(*&)(%s)' + + def build_backend_type(self, ffi, finishlist): + result = self.result.get_cached_btype(ffi, finishlist) + args = [] + for tp in self.args: + args.append(tp.get_cached_btype(ffi, finishlist)) + abi_args = () + if self.abi == "__stdcall": + if not self.ellipsis: # __stdcall ignored for variadic funcs + try: + abi_args = (ffi._backend.FFI_STDCALL,) + except AttributeError: + pass + return global_cache(self, ffi, 'new_function_type', + tuple(args), result, self.ellipsis, *abi_args) + + def as_raw_function(self): + return RawFunctionType(self.args, self.result, self.ellipsis, self.abi) + + +class PointerType(BaseType): + _attrs_ = ('totype', 'quals') + + def __init__(self, totype, quals=0): + self.totype = totype + self.quals = quals + extra = " *&" + if totype.is_array_type: + extra = "(%s)" % (extra.lstrip(),) + extra = qualify(quals, extra) + self.c_name_with_marker = totype.c_name_with_marker.replace('&', extra) + + def build_backend_type(self, ffi, finishlist): + BItem = self.totype.get_cached_btype(ffi, finishlist, can_delay=True) + return global_cache(self, ffi, 'new_pointer_type', BItem) + +voidp_type = PointerType(void_type) + +def ConstPointerType(totype): + return PointerType(totype, Q_CONST) + +const_voidp_type = ConstPointerType(void_type) + + +class NamedPointerType(PointerType): + _attrs_ = ('totype', 'name') + + def __init__(self, totype, name, quals=0): + PointerType.__init__(self, totype, quals) + self.name = name + self.c_name_with_marker = name + '&' + + +class ArrayType(BaseType): + _attrs_ = ('item', 'length') + is_array_type = True + + def __init__(self, item, length): + self.item = item + self.length = length + # + if length is None: + brackets = '&[]' + elif length == '...': + brackets = '&[/*...*/]' + else: + brackets = '&[%s]' % length + self.c_name_with_marker = ( + self.item.c_name_with_marker.replace('&', brackets)) + + def length_is_unknown(self): + return isinstance(self.length, str) + + def resolve_length(self, newlength): + return ArrayType(self.item, newlength) + + def build_backend_type(self, ffi, finishlist): + if self.length_is_unknown(): + raise CDefError("cannot render the type %r: unknown length" % + (self,)) + self.item.get_cached_btype(ffi, finishlist) # force the item BType + BPtrItem = PointerType(self.item).get_cached_btype(ffi, finishlist) + return global_cache(self, ffi, 'new_array_type', BPtrItem, self.length) + +char_array_type = ArrayType(PrimitiveType('char'), None) + + +class StructOrUnionOrEnum(BaseTypeByIdentity): + _attrs_ = ('name',) + forcename = None + + def build_c_name_with_marker(self): + name = self.forcename or '%s %s' % (self.kind, self.name) + self.c_name_with_marker = name + '&' + + def force_the_name(self, forcename): + self.forcename = forcename + self.build_c_name_with_marker() + + def get_official_name(self): + assert self.c_name_with_marker.endswith('&') + return self.c_name_with_marker[:-1] + + +class StructOrUnion(StructOrUnionOrEnum): + fixedlayout = None + completed = 0 + partial = False + packed = 0 + + def __init__(self, name, fldnames, fldtypes, fldbitsize, fldquals=None): + self.name = name + self.fldnames = fldnames + self.fldtypes = fldtypes + self.fldbitsize = fldbitsize + self.fldquals = fldquals + self.build_c_name_with_marker() + + def anonymous_struct_fields(self): + if self.fldtypes is not None: + for name, type in zip(self.fldnames, self.fldtypes): + if name == '' and isinstance(type, StructOrUnion): + yield type + + def enumfields(self, expand_anonymous_struct_union=True): + fldquals = self.fldquals + if fldquals is None: + fldquals = (0,) * len(self.fldnames) + for name, type, bitsize, quals in zip(self.fldnames, self.fldtypes, + self.fldbitsize, fldquals): + if (name == '' and isinstance(type, StructOrUnion) + and expand_anonymous_struct_union): + # nested anonymous struct/union + for result in type.enumfields(): + yield result + else: + yield (name, type, bitsize, quals) + + def force_flatten(self): + # force the struct or union to have a declaration that lists + # directly all fields returned by enumfields(), flattening + # nested anonymous structs/unions. + names = [] + types = [] + bitsizes = [] + fldquals = [] + for name, type, bitsize, quals in self.enumfields(): + names.append(name) + types.append(type) + bitsizes.append(bitsize) + fldquals.append(quals) + self.fldnames = tuple(names) + self.fldtypes = tuple(types) + self.fldbitsize = tuple(bitsizes) + self.fldquals = tuple(fldquals) + + def get_cached_btype(self, ffi, finishlist, can_delay=False): + BType = StructOrUnionOrEnum.get_cached_btype(self, ffi, finishlist, + can_delay) + if not can_delay: + self.finish_backend_type(ffi, finishlist) + return BType + + def finish_backend_type(self, ffi, finishlist): + if self.completed: + if self.completed != 2: + raise NotImplementedError("recursive structure declaration " + "for '%s'" % (self.name,)) + return + BType = ffi._cached_btypes[self] + # + self.completed = 1 + # + if self.fldtypes is None: + pass # not completing it: it's an opaque struct + # + elif self.fixedlayout is None: + fldtypes = [tp.get_cached_btype(ffi, finishlist) + for tp in self.fldtypes] + lst = list(zip(self.fldnames, fldtypes, self.fldbitsize)) + extra_flags = () + if self.packed: + if self.packed == 1: + extra_flags = (8,) # SF_PACKED + else: + extra_flags = (0, self.packed) + ffi._backend.complete_struct_or_union(BType, lst, self, + -1, -1, *extra_flags) + # + else: + fldtypes = [] + fieldofs, fieldsize, totalsize, totalalignment = self.fixedlayout + for i in range(len(self.fldnames)): + fsize = fieldsize[i] + ftype = self.fldtypes[i] + # + if isinstance(ftype, ArrayType) and ftype.length_is_unknown(): + # fix the length to match the total size + BItemType = ftype.item.get_cached_btype(ffi, finishlist) + nlen, nrest = divmod(fsize, ffi.sizeof(BItemType)) + if nrest != 0: + self._verification_error( + "field '%s.%s' has a bogus size?" % ( + self.name, self.fldnames[i] or '{}')) + ftype = ftype.resolve_length(nlen) + self.fldtypes = (self.fldtypes[:i] + (ftype,) + + self.fldtypes[i+1:]) + # + BFieldType = ftype.get_cached_btype(ffi, finishlist) + if isinstance(ftype, ArrayType) and ftype.length is None: + assert fsize == 0 + else: + bitemsize = ffi.sizeof(BFieldType) + if bitemsize != fsize: + self._verification_error( + "field '%s.%s' is declared as %d bytes, but is " + "really %d bytes" % (self.name, + self.fldnames[i] or '{}', + bitemsize, fsize)) + fldtypes.append(BFieldType) + # + lst = list(zip(self.fldnames, fldtypes, self.fldbitsize, fieldofs)) + ffi._backend.complete_struct_or_union(BType, lst, self, + totalsize, totalalignment) + self.completed = 2 + + def _verification_error(self, msg): + raise VerificationError(msg) + + def check_not_partial(self): + if self.partial and self.fixedlayout is None: + raise VerificationMissing(self._get_c_name()) + + def build_backend_type(self, ffi, finishlist): + self.check_not_partial() + finishlist.append(self) + # + return global_cache(self, ffi, 'new_%s_type' % self.kind, + self.get_official_name(), key=self) + + +class StructType(StructOrUnion): + kind = 'struct' + + +class UnionType(StructOrUnion): + kind = 'union' + + +class EnumType(StructOrUnionOrEnum): + kind = 'enum' + partial = False + partial_resolved = False + + def __init__(self, name, enumerators, enumvalues, baseinttype=None): + self.name = name + self.enumerators = enumerators + self.enumvalues = enumvalues + self.baseinttype = baseinttype + self.build_c_name_with_marker() + + def force_the_name(self, forcename): + StructOrUnionOrEnum.force_the_name(self, forcename) + if self.forcename is None: + name = self.get_official_name() + self.forcename = '$' + name.replace(' ', '_') + + def check_not_partial(self): + if self.partial and not self.partial_resolved: + raise VerificationMissing(self._get_c_name()) + + def build_backend_type(self, ffi, finishlist): + self.check_not_partial() + base_btype = self.build_baseinttype(ffi, finishlist) + return global_cache(self, ffi, 'new_enum_type', + self.get_official_name(), + self.enumerators, self.enumvalues, + base_btype, key=self) + + def build_baseinttype(self, ffi, finishlist): + if self.baseinttype is not None: + return self.baseinttype.get_cached_btype(ffi, finishlist) + # + if self.enumvalues: + smallest_value = min(self.enumvalues) + largest_value = max(self.enumvalues) + else: + import warnings + try: + # XXX! The goal is to ensure that the warnings.warn() + # will not suppress the warning. We want to get it + # several times if we reach this point several times. + __warningregistry__.clear() + except NameError: + pass + warnings.warn("%r has no values explicitly defined; " + "guessing that it is equivalent to 'unsigned int'" + % self._get_c_name()) + smallest_value = largest_value = 0 + if smallest_value < 0: # needs a signed type + sign = 1 + candidate1 = PrimitiveType("int") + candidate2 = PrimitiveType("long") + else: + sign = 0 + candidate1 = PrimitiveType("unsigned int") + candidate2 = PrimitiveType("unsigned long") + btype1 = candidate1.get_cached_btype(ffi, finishlist) + btype2 = candidate2.get_cached_btype(ffi, finishlist) + size1 = ffi.sizeof(btype1) + size2 = ffi.sizeof(btype2) + if (smallest_value >= ((-1) << (8*size1-1)) and + largest_value < (1 << (8*size1-sign))): + return btype1 + if (smallest_value >= ((-1) << (8*size2-1)) and + largest_value < (1 << (8*size2-sign))): + return btype2 + raise CDefError("%s values don't all fit into either 'long' " + "or 'unsigned long'" % self._get_c_name()) + +def unknown_type(name, structname=None): + if structname is None: + structname = '$%s' % name + tp = StructType(structname, None, None, None) + tp.force_the_name(name) + tp.origin = "unknown_type" + return tp + +def unknown_ptr_type(name, structname=None): + if structname is None: + structname = '$$%s' % name + tp = StructType(structname, None, None, None) + return NamedPointerType(tp, name) + + +global_lock = allocate_lock() +_typecache_cffi_backend = weakref.WeakValueDictionary() + +def get_typecache(backend): + # returns _typecache_cffi_backend if backend is the _cffi_backend + # module, or type(backend).__typecache if backend is an instance of + # CTypesBackend (or some FakeBackend class during tests) + if isinstance(backend, types.ModuleType): + return _typecache_cffi_backend + with global_lock: + if not hasattr(type(backend), '__typecache'): + type(backend).__typecache = weakref.WeakValueDictionary() + return type(backend).__typecache + +def global_cache(srctype, ffi, funcname, *args, **kwds): + key = kwds.pop('key', (funcname, args)) + assert not kwds + try: + return ffi._typecache[key] + except KeyError: + pass + try: + res = getattr(ffi._backend, funcname)(*args) + except NotImplementedError as e: + raise NotImplementedError("%s: %r: %s" % (funcname, srctype, e)) + # note that setdefault() on WeakValueDictionary is not atomic + # and contains a rare bug (http://bugs.python.org/issue19542); + # we have to use a lock and do it ourselves + cache = ffi._typecache + with global_lock: + res1 = cache.get(key) + if res1 is None: + cache[key] = res + return res + else: + return res1 + +def pointer_cache(ffi, BType): + return global_cache('?', ffi, 'new_pointer_type', BType) + +def attach_exception_info(e, name): + if e.args and type(e.args[0]) is str: + e.args = ('%s: %s' % (name, e.args[0]),) + e.args[1:] diff --git a/venv/lib/python3.12/site-packages/cffi/parse_c_type.h b/venv/lib/python3.12/site-packages/cffi/parse_c_type.h new file mode 100644 index 0000000..84e4ef8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/parse_c_type.h @@ -0,0 +1,181 @@ + +/* This part is from file 'cffi/parse_c_type.h'. It is copied at the + beginning of C sources generated by CFFI's ffi.set_source(). */ + +typedef void *_cffi_opcode_t; + +#define _CFFI_OP(opcode, arg) (_cffi_opcode_t)(opcode | (((uintptr_t)(arg)) << 8)) +#define _CFFI_GETOP(cffi_opcode) ((unsigned char)(uintptr_t)cffi_opcode) +#define _CFFI_GETARG(cffi_opcode) (((intptr_t)cffi_opcode) >> 8) + +#define _CFFI_OP_PRIMITIVE 1 +#define _CFFI_OP_POINTER 3 +#define _CFFI_OP_ARRAY 5 +#define _CFFI_OP_OPEN_ARRAY 7 +#define _CFFI_OP_STRUCT_UNION 9 +#define _CFFI_OP_ENUM 11 +#define _CFFI_OP_FUNCTION 13 +#define _CFFI_OP_FUNCTION_END 15 +#define _CFFI_OP_NOOP 17 +#define _CFFI_OP_BITFIELD 19 +#define _CFFI_OP_TYPENAME 21 +#define _CFFI_OP_CPYTHON_BLTN_V 23 // varargs +#define _CFFI_OP_CPYTHON_BLTN_N 25 // noargs +#define _CFFI_OP_CPYTHON_BLTN_O 27 // O (i.e. a single arg) +#define _CFFI_OP_CONSTANT 29 +#define _CFFI_OP_CONSTANT_INT 31 +#define _CFFI_OP_GLOBAL_VAR 33 +#define _CFFI_OP_DLOPEN_FUNC 35 +#define _CFFI_OP_DLOPEN_CONST 37 +#define _CFFI_OP_GLOBAL_VAR_F 39 +#define _CFFI_OP_EXTERN_PYTHON 41 + +#define _CFFI_PRIM_VOID 0 +#define _CFFI_PRIM_BOOL 1 +#define _CFFI_PRIM_CHAR 2 +#define _CFFI_PRIM_SCHAR 3 +#define _CFFI_PRIM_UCHAR 4 +#define _CFFI_PRIM_SHORT 5 +#define _CFFI_PRIM_USHORT 6 +#define _CFFI_PRIM_INT 7 +#define _CFFI_PRIM_UINT 8 +#define _CFFI_PRIM_LONG 9 +#define _CFFI_PRIM_ULONG 10 +#define _CFFI_PRIM_LONGLONG 11 +#define _CFFI_PRIM_ULONGLONG 12 +#define _CFFI_PRIM_FLOAT 13 +#define _CFFI_PRIM_DOUBLE 14 +#define _CFFI_PRIM_LONGDOUBLE 15 + +#define _CFFI_PRIM_WCHAR 16 +#define _CFFI_PRIM_INT8 17 +#define _CFFI_PRIM_UINT8 18 +#define _CFFI_PRIM_INT16 19 +#define _CFFI_PRIM_UINT16 20 +#define _CFFI_PRIM_INT32 21 +#define _CFFI_PRIM_UINT32 22 +#define _CFFI_PRIM_INT64 23 +#define _CFFI_PRIM_UINT64 24 +#define _CFFI_PRIM_INTPTR 25 +#define _CFFI_PRIM_UINTPTR 26 +#define _CFFI_PRIM_PTRDIFF 27 +#define _CFFI_PRIM_SIZE 28 +#define _CFFI_PRIM_SSIZE 29 +#define _CFFI_PRIM_INT_LEAST8 30 +#define _CFFI_PRIM_UINT_LEAST8 31 +#define _CFFI_PRIM_INT_LEAST16 32 +#define _CFFI_PRIM_UINT_LEAST16 33 +#define _CFFI_PRIM_INT_LEAST32 34 +#define _CFFI_PRIM_UINT_LEAST32 35 +#define _CFFI_PRIM_INT_LEAST64 36 +#define _CFFI_PRIM_UINT_LEAST64 37 +#define _CFFI_PRIM_INT_FAST8 38 +#define _CFFI_PRIM_UINT_FAST8 39 +#define _CFFI_PRIM_INT_FAST16 40 +#define _CFFI_PRIM_UINT_FAST16 41 +#define _CFFI_PRIM_INT_FAST32 42 +#define _CFFI_PRIM_UINT_FAST32 43 +#define _CFFI_PRIM_INT_FAST64 44 +#define _CFFI_PRIM_UINT_FAST64 45 +#define _CFFI_PRIM_INTMAX 46 +#define _CFFI_PRIM_UINTMAX 47 +#define _CFFI_PRIM_FLOATCOMPLEX 48 +#define _CFFI_PRIM_DOUBLECOMPLEX 49 +#define _CFFI_PRIM_CHAR16 50 +#define _CFFI_PRIM_CHAR32 51 + +#define _CFFI__NUM_PRIM 52 +#define _CFFI__UNKNOWN_PRIM (-1) +#define _CFFI__UNKNOWN_FLOAT_PRIM (-2) +#define _CFFI__UNKNOWN_LONG_DOUBLE (-3) + +#define _CFFI__IO_FILE_STRUCT (-1) + + +struct _cffi_global_s { + const char *name; + void *address; + _cffi_opcode_t type_op; + void *size_or_direct_fn; // OP_GLOBAL_VAR: size, or 0 if unknown + // OP_CPYTHON_BLTN_*: addr of direct function +}; + +struct _cffi_getconst_s { + unsigned long long value; + const struct _cffi_type_context_s *ctx; + int gindex; +}; + +struct _cffi_struct_union_s { + const char *name; + int type_index; // -> _cffi_types, on a OP_STRUCT_UNION + int flags; // _CFFI_F_* flags below + size_t size; + int alignment; + int first_field_index; // -> _cffi_fields array + int num_fields; +}; +#define _CFFI_F_UNION 0x01 // is a union, not a struct +#define _CFFI_F_CHECK_FIELDS 0x02 // complain if fields are not in the + // "standard layout" or if some are missing +#define _CFFI_F_PACKED 0x04 // for CHECK_FIELDS, assume a packed struct +#define _CFFI_F_EXTERNAL 0x08 // in some other ffi.include() +#define _CFFI_F_OPAQUE 0x10 // opaque + +struct _cffi_field_s { + const char *name; + size_t field_offset; + size_t field_size; + _cffi_opcode_t field_type_op; +}; + +struct _cffi_enum_s { + const char *name; + int type_index; // -> _cffi_types, on a OP_ENUM + int type_prim; // _CFFI_PRIM_xxx + const char *enumerators; // comma-delimited string +}; + +struct _cffi_typename_s { + const char *name; + int type_index; /* if opaque, points to a possibly artificial + OP_STRUCT which is itself opaque */ +}; + +struct _cffi_type_context_s { + _cffi_opcode_t *types; + const struct _cffi_global_s *globals; + const struct _cffi_field_s *fields; + const struct _cffi_struct_union_s *struct_unions; + const struct _cffi_enum_s *enums; + const struct _cffi_typename_s *typenames; + int num_globals; + int num_struct_unions; + int num_enums; + int num_typenames; + const char *const *includes; + int num_types; + int flags; /* future extension */ +}; + +struct _cffi_parse_info_s { + const struct _cffi_type_context_s *ctx; + _cffi_opcode_t *output; + unsigned int output_size; + size_t error_location; + const char *error_message; +}; + +struct _cffi_externpy_s { + const char *name; + size_t size_of_result; + void *reserved1, *reserved2; +}; + +#ifdef _CFFI_INTERNAL +static int parse_c_type(struct _cffi_parse_info_s *info, const char *input); +static int search_in_globals(const struct _cffi_type_context_s *ctx, + const char *search, size_t search_len); +static int search_in_struct_unions(const struct _cffi_type_context_s *ctx, + const char *search, size_t search_len); +#endif diff --git a/venv/lib/python3.12/site-packages/cffi/pkgconfig.py b/venv/lib/python3.12/site-packages/cffi/pkgconfig.py new file mode 100644 index 0000000..5c93f15 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/pkgconfig.py @@ -0,0 +1,121 @@ +# pkg-config, https://www.freedesktop.org/wiki/Software/pkg-config/ integration for cffi +import sys, os, subprocess + +from .error import PkgConfigError + + +def merge_flags(cfg1, cfg2): + """Merge values from cffi config flags cfg2 to cf1 + + Example: + merge_flags({"libraries": ["one"]}, {"libraries": ["two"]}) + {"libraries": ["one", "two"]} + """ + for key, value in cfg2.items(): + if key not in cfg1: + cfg1[key] = value + else: + if not isinstance(cfg1[key], list): + raise TypeError("cfg1[%r] should be a list of strings" % (key,)) + if not isinstance(value, list): + raise TypeError("cfg2[%r] should be a list of strings" % (key,)) + cfg1[key].extend(value) + return cfg1 + + +def call(libname, flag, encoding=sys.getfilesystemencoding()): + """Calls pkg-config and returns the output if found + """ + a = ["pkg-config", "--print-errors"] + a.append(flag) + a.append(libname) + try: + pc = subprocess.Popen(a, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except EnvironmentError as e: + raise PkgConfigError("cannot run pkg-config: %s" % (str(e).strip(),)) + + bout, berr = pc.communicate() + if pc.returncode != 0: + try: + berr = berr.decode(encoding) + except Exception: + pass + raise PkgConfigError(berr.strip()) + + if sys.version_info >= (3,) and not isinstance(bout, str): # Python 3.x + try: + bout = bout.decode(encoding) + except UnicodeDecodeError: + raise PkgConfigError("pkg-config %s %s returned bytes that cannot " + "be decoded with encoding %r:\n%r" % + (flag, libname, encoding, bout)) + + if os.altsep != '\\' and '\\' in bout: + raise PkgConfigError("pkg-config %s %s returned an unsupported " + "backslash-escaped output:\n%r" % + (flag, libname, bout)) + return bout + + +def flags_from_pkgconfig(libs): + r"""Return compiler line flags for FFI.set_source based on pkg-config output + + Usage + ... + ffibuilder.set_source("_foo", pkgconfig = ["libfoo", "libbar >= 1.8.3"]) + + If pkg-config is installed on build machine, then arguments include_dirs, + library_dirs, libraries, define_macros, extra_compile_args and + extra_link_args are extended with an output of pkg-config for libfoo and + libbar. + + Raises PkgConfigError in case the pkg-config call fails. + """ + + def get_include_dirs(string): + return [x[2:] for x in string.split() if x.startswith("-I")] + + def get_library_dirs(string): + return [x[2:] for x in string.split() if x.startswith("-L")] + + def get_libraries(string): + return [x[2:] for x in string.split() if x.startswith("-l")] + + # convert -Dfoo=bar to list of tuples [("foo", "bar")] expected by distutils + def get_macros(string): + def _macro(x): + x = x[2:] # drop "-D" + if '=' in x: + return tuple(x.split("=", 1)) # "-Dfoo=bar" => ("foo", "bar") + else: + return (x, None) # "-Dfoo" => ("foo", None) + return [_macro(x) for x in string.split() if x.startswith("-D")] + + def get_other_cflags(string): + return [x for x in string.split() if not x.startswith("-I") and + not x.startswith("-D")] + + def get_other_libs(string): + return [x for x in string.split() if not x.startswith("-L") and + not x.startswith("-l")] + + # return kwargs for given libname + def kwargs(libname): + fse = sys.getfilesystemencoding() + all_cflags = call(libname, "--cflags") + all_libs = call(libname, "--libs") + return { + "include_dirs": get_include_dirs(all_cflags), + "library_dirs": get_library_dirs(all_libs), + "libraries": get_libraries(all_libs), + "define_macros": get_macros(all_cflags), + "extra_compile_args": get_other_cflags(all_cflags), + "extra_link_args": get_other_libs(all_libs), + } + + # merge all arguments together + ret = {} + for libname in libs: + lib_flags = kwargs(libname) + merge_flags(ret, lib_flags) + return ret diff --git a/venv/lib/python3.12/site-packages/cffi/recompiler.py b/venv/lib/python3.12/site-packages/cffi/recompiler.py new file mode 100644 index 0000000..7734a34 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/recompiler.py @@ -0,0 +1,1598 @@ +import io, os, sys, sysconfig +from . import ffiplatform, model +from .error import VerificationError +from .cffi_opcode import * + +VERSION_BASE = 0x2601 +VERSION_EMBEDDED = 0x2701 +VERSION_CHAR16CHAR32 = 0x2801 + +USE_LIMITED_API = ((sys.platform != 'win32' or sys.version_info < (3, 0) or + sys.version_info >= (3, 5)) and + not sysconfig.get_config_var("Py_GIL_DISABLED")) # free-threaded doesn't yet support limited API + +class GlobalExpr: + def __init__(self, name, address, type_op, size=0, check_value=0): + self.name = name + self.address = address + self.type_op = type_op + self.size = size + self.check_value = check_value + + def as_c_expr(self): + return ' { "%s", (void *)%s, %s, (void *)%s },' % ( + self.name, self.address, self.type_op.as_c_expr(), self.size) + + def as_python_expr(self): + return "b'%s%s',%d" % (self.type_op.as_python_bytes(), self.name, + self.check_value) + +class FieldExpr: + def __init__(self, name, field_offset, field_size, fbitsize, field_type_op): + self.name = name + self.field_offset = field_offset + self.field_size = field_size + self.fbitsize = fbitsize + self.field_type_op = field_type_op + + def as_c_expr(self): + spaces = " " * len(self.name) + return (' { "%s", %s,\n' % (self.name, self.field_offset) + + ' %s %s,\n' % (spaces, self.field_size) + + ' %s %s },' % (spaces, self.field_type_op.as_c_expr())) + + def as_python_expr(self): + raise NotImplementedError + + def as_field_python_expr(self): + if self.field_type_op.op == OP_NOOP: + size_expr = '' + elif self.field_type_op.op == OP_BITFIELD: + size_expr = format_four_bytes(self.fbitsize) + else: + raise NotImplementedError + return "b'%s%s%s'" % (self.field_type_op.as_python_bytes(), + size_expr, + self.name) + +class StructUnionExpr: + def __init__(self, name, type_index, flags, size, alignment, comment, + first_field_index, c_fields): + self.name = name + self.type_index = type_index + self.flags = flags + self.size = size + self.alignment = alignment + self.comment = comment + self.first_field_index = first_field_index + self.c_fields = c_fields + + def as_c_expr(self): + return (' { "%s", %d, %s,' % (self.name, self.type_index, self.flags) + + '\n %s, %s, ' % (self.size, self.alignment) + + '%d, %d ' % (self.first_field_index, len(self.c_fields)) + + ('/* %s */ ' % self.comment if self.comment else '') + + '},') + + def as_python_expr(self): + flags = eval(self.flags, G_FLAGS) + fields_expr = [c_field.as_field_python_expr() + for c_field in self.c_fields] + return "(b'%s%s%s',%s)" % ( + format_four_bytes(self.type_index), + format_four_bytes(flags), + self.name, + ','.join(fields_expr)) + +class EnumExpr: + def __init__(self, name, type_index, size, signed, allenums): + self.name = name + self.type_index = type_index + self.size = size + self.signed = signed + self.allenums = allenums + + def as_c_expr(self): + return (' { "%s", %d, _cffi_prim_int(%s, %s),\n' + ' "%s" },' % (self.name, self.type_index, + self.size, self.signed, self.allenums)) + + def as_python_expr(self): + prim_index = { + (1, 0): PRIM_UINT8, (1, 1): PRIM_INT8, + (2, 0): PRIM_UINT16, (2, 1): PRIM_INT16, + (4, 0): PRIM_UINT32, (4, 1): PRIM_INT32, + (8, 0): PRIM_UINT64, (8, 1): PRIM_INT64, + }[self.size, self.signed] + return "b'%s%s%s\\x00%s'" % (format_four_bytes(self.type_index), + format_four_bytes(prim_index), + self.name, self.allenums) + +class TypenameExpr: + def __init__(self, name, type_index): + self.name = name + self.type_index = type_index + + def as_c_expr(self): + return ' { "%s", %d },' % (self.name, self.type_index) + + def as_python_expr(self): + return "b'%s%s'" % (format_four_bytes(self.type_index), self.name) + + +# ____________________________________________________________ + + +class Recompiler: + _num_externpy = 0 + + def __init__(self, ffi, module_name, target_is_python=False): + self.ffi = ffi + self.module_name = module_name + self.target_is_python = target_is_python + self._version = VERSION_BASE + + def needs_version(self, ver): + self._version = max(self._version, ver) + + def collect_type_table(self): + self._typesdict = {} + self._generate("collecttype") + # + all_decls = sorted(self._typesdict, key=str) + # + # prepare all FUNCTION bytecode sequences first + self.cffi_types = [] + for tp in all_decls: + if tp.is_raw_function: + assert self._typesdict[tp] is None + self._typesdict[tp] = len(self.cffi_types) + self.cffi_types.append(tp) # placeholder + for tp1 in tp.args: + assert isinstance(tp1, (model.VoidType, + model.BasePrimitiveType, + model.PointerType, + model.StructOrUnionOrEnum, + model.FunctionPtrType)) + if self._typesdict[tp1] is None: + self._typesdict[tp1] = len(self.cffi_types) + self.cffi_types.append(tp1) # placeholder + self.cffi_types.append('END') # placeholder + # + # prepare all OTHER bytecode sequences + for tp in all_decls: + if not tp.is_raw_function and self._typesdict[tp] is None: + self._typesdict[tp] = len(self.cffi_types) + self.cffi_types.append(tp) # placeholder + if tp.is_array_type and tp.length is not None: + self.cffi_types.append('LEN') # placeholder + assert None not in self._typesdict.values() + # + # collect all structs and unions and enums + self._struct_unions = {} + self._enums = {} + for tp in all_decls: + if isinstance(tp, model.StructOrUnion): + self._struct_unions[tp] = None + elif isinstance(tp, model.EnumType): + self._enums[tp] = None + for i, tp in enumerate(sorted(self._struct_unions, + key=lambda tp: tp.name)): + self._struct_unions[tp] = i + for i, tp in enumerate(sorted(self._enums, + key=lambda tp: tp.name)): + self._enums[tp] = i + # + # emit all bytecode sequences now + for tp in all_decls: + method = getattr(self, '_emit_bytecode_' + tp.__class__.__name__) + method(tp, self._typesdict[tp]) + # + # consistency check + for op in self.cffi_types: + assert isinstance(op, CffiOp) + self.cffi_types = tuple(self.cffi_types) # don't change any more + + def _enum_fields(self, tp): + # When producing C, expand all anonymous struct/union fields. + # That's necessary to have C code checking the offsets of the + # individual fields contained in them. When producing Python, + # don't do it and instead write it like it is, with the + # corresponding fields having an empty name. Empty names are + # recognized at runtime when we import the generated Python + # file. + expand_anonymous_struct_union = not self.target_is_python + return tp.enumfields(expand_anonymous_struct_union) + + def _do_collect_type(self, tp): + if not isinstance(tp, model.BaseTypeByIdentity): + if isinstance(tp, tuple): + for x in tp: + self._do_collect_type(x) + return + if tp not in self._typesdict: + self._typesdict[tp] = None + if isinstance(tp, model.FunctionPtrType): + self._do_collect_type(tp.as_raw_function()) + elif isinstance(tp, model.StructOrUnion): + if tp.fldtypes is not None and ( + tp not in self.ffi._parser._included_declarations): + for name1, tp1, _, _ in self._enum_fields(tp): + self._do_collect_type(self._field_type(tp, name1, tp1)) + else: + for _, x in tp._get_items(): + self._do_collect_type(x) + + def _generate(self, step_name): + lst = self.ffi._parser._declarations.items() + for name, (tp, quals) in sorted(lst): + kind, realname = name.split(' ', 1) + try: + method = getattr(self, '_generate_cpy_%s_%s' % (kind, + step_name)) + except AttributeError: + raise VerificationError( + "not implemented in recompile(): %r" % name) + try: + self._current_quals = quals + method(tp, realname) + except Exception as e: + model.attach_exception_info(e, name) + raise + + # ---------- + + ALL_STEPS = ["global", "field", "struct_union", "enum", "typename"] + + def collect_step_tables(self): + # collect the declarations for '_cffi_globals', '_cffi_typenames', etc. + self._lsts = {} + for step_name in self.ALL_STEPS: + self._lsts[step_name] = [] + self._seen_struct_unions = set() + self._generate("ctx") + self._add_missing_struct_unions() + # + for step_name in self.ALL_STEPS: + lst = self._lsts[step_name] + if step_name != "field": + lst.sort(key=lambda entry: entry.name) + self._lsts[step_name] = tuple(lst) # don't change any more + # + # check for a possible internal inconsistency: _cffi_struct_unions + # should have been generated with exactly self._struct_unions + lst = self._lsts["struct_union"] + for tp, i in self._struct_unions.items(): + assert i < len(lst) + assert lst[i].name == tp.name + assert len(lst) == len(self._struct_unions) + # same with enums + lst = self._lsts["enum"] + for tp, i in self._enums.items(): + assert i < len(lst) + assert lst[i].name == tp.name + assert len(lst) == len(self._enums) + + # ---------- + + def _prnt(self, what=''): + self._f.write(what + '\n') + + def write_source_to_f(self, f, preamble): + if self.target_is_python: + assert preamble is None + self.write_py_source_to_f(f) + else: + assert preamble is not None + self.write_c_source_to_f(f, preamble) + + def _rel_readlines(self, filename): + g = open(os.path.join(os.path.dirname(__file__), filename), 'r') + lines = g.readlines() + g.close() + return lines + + def write_c_source_to_f(self, f, preamble): + self._f = f + prnt = self._prnt + if self.ffi._embedding is not None: + prnt('#define _CFFI_USE_EMBEDDING') + if not USE_LIMITED_API: + prnt('#define _CFFI_NO_LIMITED_API') + # + # first the '#include' (actually done by inlining the file's content) + lines = self._rel_readlines('_cffi_include.h') + i = lines.index('#include "parse_c_type.h"\n') + lines[i:i+1] = self._rel_readlines('parse_c_type.h') + prnt(''.join(lines)) + # + # if we have ffi._embedding != None, we give it here as a macro + # and include an extra file + base_module_name = self.module_name.split('.')[-1] + if self.ffi._embedding is not None: + prnt('#define _CFFI_MODULE_NAME "%s"' % (self.module_name,)) + prnt('static const char _CFFI_PYTHON_STARTUP_CODE[] = {') + self._print_string_literal_in_array(self.ffi._embedding) + prnt('0 };') + prnt('#ifdef PYPY_VERSION') + prnt('# define _CFFI_PYTHON_STARTUP_FUNC _cffi_pypyinit_%s' % ( + base_module_name,)) + prnt('#elif PY_MAJOR_VERSION >= 3') + prnt('# define _CFFI_PYTHON_STARTUP_FUNC PyInit_%s' % ( + base_module_name,)) + prnt('#else') + prnt('# define _CFFI_PYTHON_STARTUP_FUNC init%s' % ( + base_module_name,)) + prnt('#endif') + lines = self._rel_readlines('_embedding.h') + i = lines.index('#include "_cffi_errors.h"\n') + lines[i:i+1] = self._rel_readlines('_cffi_errors.h') + prnt(''.join(lines)) + self.needs_version(VERSION_EMBEDDED) + # + # then paste the C source given by the user, verbatim. + prnt('/************************************************************/') + prnt() + prnt(preamble) + prnt() + prnt('/************************************************************/') + prnt() + # + # the declaration of '_cffi_types' + prnt('static void *_cffi_types[] = {') + typeindex2type = dict([(i, tp) for (tp, i) in self._typesdict.items()]) + for i, op in enumerate(self.cffi_types): + comment = '' + if i in typeindex2type: + comment = ' // ' + typeindex2type[i]._get_c_name() + prnt('/* %2d */ %s,%s' % (i, op.as_c_expr(), comment)) + if not self.cffi_types: + prnt(' 0') + prnt('};') + prnt() + # + # call generate_cpy_xxx_decl(), for every xxx found from + # ffi._parser._declarations. This generates all the functions. + self._seen_constants = set() + self._generate("decl") + # + # the declaration of '_cffi_globals' and '_cffi_typenames' + nums = {} + for step_name in self.ALL_STEPS: + lst = self._lsts[step_name] + nums[step_name] = len(lst) + if nums[step_name] > 0: + prnt('static const struct _cffi_%s_s _cffi_%ss[] = {' % ( + step_name, step_name)) + for entry in lst: + prnt(entry.as_c_expr()) + prnt('};') + prnt() + # + # the declaration of '_cffi_includes' + if self.ffi._included_ffis: + prnt('static const char * const _cffi_includes[] = {') + for ffi_to_include in self.ffi._included_ffis: + try: + included_module_name, included_source = ( + ffi_to_include._assigned_source[:2]) + except AttributeError: + raise VerificationError( + "ffi object %r includes %r, but the latter has not " + "been prepared with set_source()" % ( + self.ffi, ffi_to_include,)) + if included_source is None: + raise VerificationError( + "not implemented yet: ffi.include() of a Python-based " + "ffi inside a C-based ffi") + prnt(' "%s",' % (included_module_name,)) + prnt(' NULL') + prnt('};') + prnt() + # + # the declaration of '_cffi_type_context' + prnt('static const struct _cffi_type_context_s _cffi_type_context = {') + prnt(' _cffi_types,') + for step_name in self.ALL_STEPS: + if nums[step_name] > 0: + prnt(' _cffi_%ss,' % step_name) + else: + prnt(' NULL, /* no %ss */' % step_name) + for step_name in self.ALL_STEPS: + if step_name != "field": + prnt(' %d, /* num_%ss */' % (nums[step_name], step_name)) + if self.ffi._included_ffis: + prnt(' _cffi_includes,') + else: + prnt(' NULL, /* no includes */') + prnt(' %d, /* num_types */' % (len(self.cffi_types),)) + flags = 0 + if self._num_externpy > 0 or self.ffi._embedding is not None: + flags |= 1 # set to mean that we use extern "Python" + prnt(' %d, /* flags */' % flags) + prnt('};') + prnt() + # + # the init function + prnt('#ifdef __GNUC__') + prnt('# pragma GCC visibility push(default) /* for -fvisibility= */') + prnt('#endif') + prnt() + prnt('#ifdef PYPY_VERSION') + prnt('PyMODINIT_FUNC') + prnt('_cffi_pypyinit_%s(const void *p[])' % (base_module_name,)) + prnt('{') + if flags & 1: + prnt(' if (((intptr_t)p[0]) >= 0x0A03) {') + prnt(' _cffi_call_python_org = ' + '(void(*)(struct _cffi_externpy_s *, char *))p[1];') + prnt(' }') + prnt(' p[0] = (const void *)0x%x;' % self._version) + prnt(' p[1] = &_cffi_type_context;') + prnt('#if PY_MAJOR_VERSION >= 3') + prnt(' return NULL;') + prnt('#endif') + prnt('}') + # on Windows, distutils insists on putting init_cffi_xyz in + # 'export_symbols', so instead of fighting it, just give up and + # give it one + prnt('# ifdef _MSC_VER') + prnt(' PyMODINIT_FUNC') + prnt('# if PY_MAJOR_VERSION >= 3') + prnt(' PyInit_%s(void) { return NULL; }' % (base_module_name,)) + prnt('# else') + prnt(' init%s(void) { }' % (base_module_name,)) + prnt('# endif') + prnt('# endif') + prnt('#elif PY_MAJOR_VERSION >= 3') + prnt('PyMODINIT_FUNC') + prnt('PyInit_%s(void)' % (base_module_name,)) + prnt('{') + prnt(' return _cffi_init("%s", 0x%x, &_cffi_type_context);' % ( + self.module_name, self._version)) + prnt('}') + prnt('#else') + prnt('PyMODINIT_FUNC') + prnt('init%s(void)' % (base_module_name,)) + prnt('{') + prnt(' _cffi_init("%s", 0x%x, &_cffi_type_context);' % ( + self.module_name, self._version)) + prnt('}') + prnt('#endif') + prnt() + prnt('#ifdef __GNUC__') + prnt('# pragma GCC visibility pop') + prnt('#endif') + self._version = None + + def _to_py(self, x): + if isinstance(x, str): + return "b'%s'" % (x,) + if isinstance(x, (list, tuple)): + rep = [self._to_py(item) for item in x] + if len(rep) == 1: + rep.append('') + return "(%s)" % (','.join(rep),) + return x.as_python_expr() # Py2: unicode unexpected; Py3: bytes unexp. + + def write_py_source_to_f(self, f): + self._f = f + prnt = self._prnt + # + # header + prnt("# auto-generated file") + prnt("import _cffi_backend") + # + # the 'import' of the included ffis + num_includes = len(self.ffi._included_ffis or ()) + for i in range(num_includes): + ffi_to_include = self.ffi._included_ffis[i] + try: + included_module_name, included_source = ( + ffi_to_include._assigned_source[:2]) + except AttributeError: + raise VerificationError( + "ffi object %r includes %r, but the latter has not " + "been prepared with set_source()" % ( + self.ffi, ffi_to_include,)) + if included_source is not None: + raise VerificationError( + "not implemented yet: ffi.include() of a C-based " + "ffi inside a Python-based ffi") + prnt('from %s import ffi as _ffi%d' % (included_module_name, i)) + prnt() + prnt("ffi = _cffi_backend.FFI('%s'," % (self.module_name,)) + prnt(" _version = 0x%x," % (self._version,)) + self._version = None + # + # the '_types' keyword argument + self.cffi_types = tuple(self.cffi_types) # don't change any more + types_lst = [op.as_python_bytes() for op in self.cffi_types] + prnt(' _types = %s,' % (self._to_py(''.join(types_lst)),)) + typeindex2type = dict([(i, tp) for (tp, i) in self._typesdict.items()]) + # + # the keyword arguments from ALL_STEPS + for step_name in self.ALL_STEPS: + lst = self._lsts[step_name] + if len(lst) > 0 and step_name != "field": + prnt(' _%ss = %s,' % (step_name, self._to_py(lst))) + # + # the '_includes' keyword argument + if num_includes > 0: + prnt(' _includes = (%s,),' % ( + ', '.join(['_ffi%d' % i for i in range(num_includes)]),)) + # + # the footer + prnt(')') + + # ---------- + + def _gettypenum(self, type): + # a KeyError here is a bug. please report it! :-) + return self._typesdict[type] + + def _convert_funcarg_to_c(self, tp, fromvar, tovar, errcode): + extraarg = '' + if isinstance(tp, model.BasePrimitiveType) and not tp.is_complex_type(): + if tp.is_integer_type() and tp.name != '_Bool': + converter = '_cffi_to_c_int' + extraarg = ', %s' % tp.name + elif isinstance(tp, model.UnknownFloatType): + # don't check with is_float_type(): it may be a 'long + # double' here, and _cffi_to_c_double would loose precision + converter = '(%s)_cffi_to_c_double' % (tp.get_c_name(''),) + else: + cname = tp.get_c_name('') + converter = '(%s)_cffi_to_c_%s' % (cname, + tp.name.replace(' ', '_')) + if cname in ('char16_t', 'char32_t'): + self.needs_version(VERSION_CHAR16CHAR32) + errvalue = '-1' + # + elif isinstance(tp, model.PointerType): + self._convert_funcarg_to_c_ptr_or_array(tp, fromvar, + tovar, errcode) + return + # + elif (isinstance(tp, model.StructOrUnionOrEnum) or + isinstance(tp, model.BasePrimitiveType)): + # a struct (not a struct pointer) as a function argument; + # or, a complex (the same code works) + self._prnt(' if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)' + % (tovar, self._gettypenum(tp), fromvar)) + self._prnt(' %s;' % errcode) + return + # + elif isinstance(tp, model.FunctionPtrType): + converter = '(%s)_cffi_to_c_pointer' % tp.get_c_name('') + extraarg = ', _cffi_type(%d)' % self._gettypenum(tp) + errvalue = 'NULL' + # + else: + raise NotImplementedError(tp) + # + self._prnt(' %s = %s(%s%s);' % (tovar, converter, fromvar, extraarg)) + self._prnt(' if (%s == (%s)%s && PyErr_Occurred())' % ( + tovar, tp.get_c_name(''), errvalue)) + self._prnt(' %s;' % errcode) + + def _extra_local_variables(self, tp, localvars, freelines): + if isinstance(tp, model.PointerType): + localvars.add('Py_ssize_t datasize') + localvars.add('struct _cffi_freeme_s *large_args_free = NULL') + freelines.add('if (large_args_free != NULL)' + ' _cffi_free_array_arguments(large_args_free);') + + def _convert_funcarg_to_c_ptr_or_array(self, tp, fromvar, tovar, errcode): + self._prnt(' datasize = _cffi_prepare_pointer_call_argument(') + self._prnt(' _cffi_type(%d), %s, (char **)&%s);' % ( + self._gettypenum(tp), fromvar, tovar)) + self._prnt(' if (datasize != 0) {') + self._prnt(' %s = ((size_t)datasize) <= 640 ? ' + '(%s)alloca((size_t)datasize) : NULL;' % ( + tovar, tp.get_c_name(''))) + self._prnt(' if (_cffi_convert_array_argument(_cffi_type(%d), %s, ' + '(char **)&%s,' % (self._gettypenum(tp), fromvar, tovar)) + self._prnt(' datasize, &large_args_free) < 0)') + self._prnt(' %s;' % errcode) + self._prnt(' }') + + def _convert_expr_from_c(self, tp, var, context): + if isinstance(tp, model.BasePrimitiveType): + if tp.is_integer_type() and tp.name != '_Bool': + return '_cffi_from_c_int(%s, %s)' % (var, tp.name) + elif isinstance(tp, model.UnknownFloatType): + return '_cffi_from_c_double(%s)' % (var,) + elif tp.name != 'long double' and not tp.is_complex_type(): + cname = tp.name.replace(' ', '_') + if cname in ('char16_t', 'char32_t'): + self.needs_version(VERSION_CHAR16CHAR32) + return '_cffi_from_c_%s(%s)' % (cname, var) + else: + return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, (model.PointerType, model.FunctionPtrType)): + return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, model.ArrayType): + return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( + var, self._gettypenum(model.PointerType(tp.item))) + elif isinstance(tp, model.StructOrUnion): + if tp.fldnames is None: + raise TypeError("'%s' is used as %s, but is opaque" % ( + tp._get_c_name(), context)) + return '_cffi_from_c_struct((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, model.EnumType): + return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + else: + raise NotImplementedError(tp) + + # ---------- + # typedefs + + def _typedef_type(self, tp, name): + return self._global_type(tp, "(*(%s *)0)" % (name,)) + + def _generate_cpy_typedef_collecttype(self, tp, name): + self._do_collect_type(self._typedef_type(tp, name)) + + def _generate_cpy_typedef_decl(self, tp, name): + pass + + def _typedef_ctx(self, tp, name): + type_index = self._typesdict[tp] + self._lsts["typename"].append(TypenameExpr(name, type_index)) + + def _generate_cpy_typedef_ctx(self, tp, name): + tp = self._typedef_type(tp, name) + self._typedef_ctx(tp, name) + if getattr(tp, "origin", None) == "unknown_type": + self._struct_ctx(tp, tp.name, approxname=None) + elif isinstance(tp, model.NamedPointerType): + self._struct_ctx(tp.totype, tp.totype.name, approxname=tp.name, + named_ptr=tp) + + # ---------- + # function declarations + + def _generate_cpy_function_collecttype(self, tp, name): + self._do_collect_type(tp.as_raw_function()) + if tp.ellipsis and not self.target_is_python: + self._do_collect_type(tp) + + def _generate_cpy_function_decl(self, tp, name): + assert not self.target_is_python + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + # cannot support vararg functions better than this: check for its + # exact type (including the fixed arguments), and build it as a + # constant function pointer (no CPython wrapper) + self._generate_cpy_constant_decl(tp, name) + return + prnt = self._prnt + numargs = len(tp.args) + if numargs == 0: + argname = 'noarg' + elif numargs == 1: + argname = 'arg0' + else: + argname = 'args' + # + # ------------------------------ + # the 'd' version of the function, only for addressof(lib, 'func') + arguments = [] + call_arguments = [] + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + arguments.append(type.get_c_name(' x%d' % i, context)) + call_arguments.append('x%d' % i) + repr_arguments = ', '.join(arguments) + repr_arguments = repr_arguments or 'void' + if tp.abi: + abi = tp.abi + ' ' + else: + abi = '' + name_and_arguments = '%s_cffi_d_%s(%s)' % (abi, name, repr_arguments) + prnt('static %s' % (tp.result.get_c_name(name_and_arguments),)) + prnt('{') + call_arguments = ', '.join(call_arguments) + result_code = 'return ' + if isinstance(tp.result, model.VoidType): + result_code = '' + prnt(' %s%s(%s);' % (result_code, name, call_arguments)) + prnt('}') + # + prnt('#ifndef PYPY_VERSION') # ------------------------------ + # + prnt('static PyObject *') + prnt('_cffi_f_%s(PyObject *self, PyObject *%s)' % (name, argname)) + prnt('{') + # + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + arg = type.get_c_name(' x%d' % i, context) + prnt(' %s;' % arg) + # + localvars = set() + freelines = set() + for type in tp.args: + self._extra_local_variables(type, localvars, freelines) + for decl in sorted(localvars): + prnt(' %s;' % (decl,)) + # + if not isinstance(tp.result, model.VoidType): + result_code = 'result = ' + context = 'result of %s' % name + result_decl = ' %s;' % tp.result.get_c_name(' result', context) + prnt(result_decl) + prnt(' PyObject *pyresult;') + else: + result_decl = None + result_code = '' + # + if len(tp.args) > 1: + rng = range(len(tp.args)) + for i in rng: + prnt(' PyObject *arg%d;' % i) + prnt() + prnt(' if (!PyArg_UnpackTuple(args, "%s", %d, %d, %s))' % ( + name, len(rng), len(rng), + ', '.join(['&arg%d' % i for i in rng]))) + prnt(' return NULL;') + prnt() + # + for i, type in enumerate(tp.args): + self._convert_funcarg_to_c(type, 'arg%d' % i, 'x%d' % i, + 'return NULL') + prnt() + # + prnt(' Py_BEGIN_ALLOW_THREADS') + prnt(' _cffi_restore_errno();') + call_arguments = ['x%d' % i for i in range(len(tp.args))] + call_arguments = ', '.join(call_arguments) + prnt(' { %s%s(%s); }' % (result_code, name, call_arguments)) + prnt(' _cffi_save_errno();') + prnt(' Py_END_ALLOW_THREADS') + prnt() + # + prnt(' (void)self; /* unused */') + if numargs == 0: + prnt(' (void)noarg; /* unused */') + if result_code: + prnt(' pyresult = %s;' % + self._convert_expr_from_c(tp.result, 'result', 'result type')) + for freeline in freelines: + prnt(' ' + freeline) + prnt(' return pyresult;') + else: + for freeline in freelines: + prnt(' ' + freeline) + prnt(' Py_INCREF(Py_None);') + prnt(' return Py_None;') + prnt('}') + # + prnt('#else') # ------------------------------ + # + # the PyPy version: need to replace struct/union arguments with + # pointers, and if the result is a struct/union, insert a first + # arg that is a pointer to the result. We also do that for + # complex args and return type. + def need_indirection(type): + return (isinstance(type, model.StructOrUnion) or + (isinstance(type, model.PrimitiveType) and + type.is_complex_type())) + difference = False + arguments = [] + call_arguments = [] + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + indirection = '' + if need_indirection(type): + indirection = '*' + difference = True + arg = type.get_c_name(' %sx%d' % (indirection, i), context) + arguments.append(arg) + call_arguments.append('%sx%d' % (indirection, i)) + tp_result = tp.result + if need_indirection(tp_result): + context = 'result of %s' % name + arg = tp_result.get_c_name(' *result', context) + arguments.insert(0, arg) + tp_result = model.void_type + result_decl = None + result_code = '*result = ' + difference = True + if difference: + repr_arguments = ', '.join(arguments) + repr_arguments = repr_arguments or 'void' + name_and_arguments = '%s_cffi_f_%s(%s)' % (abi, name, + repr_arguments) + prnt('static %s' % (tp_result.get_c_name(name_and_arguments),)) + prnt('{') + if result_decl: + prnt(result_decl) + call_arguments = ', '.join(call_arguments) + prnt(' { %s%s(%s); }' % (result_code, name, call_arguments)) + if result_decl: + prnt(' return result;') + prnt('}') + else: + prnt('# define _cffi_f_%s _cffi_d_%s' % (name, name)) + # + prnt('#endif') # ------------------------------ + prnt() + + def _generate_cpy_function_ctx(self, tp, name): + if tp.ellipsis and not self.target_is_python: + self._generate_cpy_constant_ctx(tp, name) + return + type_index = self._typesdict[tp.as_raw_function()] + numargs = len(tp.args) + if self.target_is_python: + meth_kind = OP_DLOPEN_FUNC + elif numargs == 0: + meth_kind = OP_CPYTHON_BLTN_N # 'METH_NOARGS' + elif numargs == 1: + meth_kind = OP_CPYTHON_BLTN_O # 'METH_O' + else: + meth_kind = OP_CPYTHON_BLTN_V # 'METH_VARARGS' + self._lsts["global"].append( + GlobalExpr(name, '_cffi_f_%s' % name, + CffiOp(meth_kind, type_index), + size='_cffi_d_%s' % name)) + + # ---------- + # named structs or unions + + def _field_type(self, tp_struct, field_name, tp_field): + if isinstance(tp_field, model.ArrayType): + actual_length = tp_field.length + if actual_length == '...': + ptr_struct_name = tp_struct.get_c_name('*') + actual_length = '_cffi_array_len(((%s)0)->%s)' % ( + ptr_struct_name, field_name) + tp_item = self._field_type(tp_struct, '%s[0]' % field_name, + tp_field.item) + tp_field = model.ArrayType(tp_item, actual_length) + return tp_field + + def _struct_collecttype(self, tp): + self._do_collect_type(tp) + if self.target_is_python: + # also requires nested anon struct/unions in ABI mode, recursively + for fldtype in tp.anonymous_struct_fields(): + self._struct_collecttype(fldtype) + + def _struct_decl(self, tp, cname, approxname): + if tp.fldtypes is None: + return + prnt = self._prnt + checkfuncname = '_cffi_checkfld_%s' % (approxname,) + prnt('_CFFI_UNUSED_FN') + prnt('static void %s(%s *p)' % (checkfuncname, cname)) + prnt('{') + prnt(' /* only to generate compile-time warnings or errors */') + prnt(' (void)p;') + for fname, ftype, fbitsize, fqual in self._enum_fields(tp): + try: + if ftype.is_integer_type() or fbitsize >= 0: + # accept all integers, but complain on float or double + if fname != '': + prnt(" (void)((p->%s) | 0); /* check that '%s.%s' is " + "an integer */" % (fname, cname, fname)) + continue + # only accept exactly the type declared, except that '[]' + # is interpreted as a '*' and so will match any array length. + # (It would also match '*', but that's harder to detect...) + while (isinstance(ftype, model.ArrayType) + and (ftype.length is None or ftype.length == '...')): + ftype = ftype.item + fname = fname + '[0]' + prnt(' { %s = &p->%s; (void)tmp; }' % ( + ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), + fname)) + except VerificationError as e: + prnt(' /* %s */' % str(e)) # cannot verify it, ignore + prnt('}') + prnt('struct _cffi_align_%s { char x; %s y; };' % (approxname, cname)) + prnt() + + def _struct_ctx(self, tp, cname, approxname, named_ptr=None): + type_index = self._typesdict[tp] + reason_for_not_expanding = None + flags = [] + if isinstance(tp, model.UnionType): + flags.append("_CFFI_F_UNION") + if tp.fldtypes is None: + flags.append("_CFFI_F_OPAQUE") + reason_for_not_expanding = "opaque" + if (tp not in self.ffi._parser._included_declarations and + (named_ptr is None or + named_ptr not in self.ffi._parser._included_declarations)): + if tp.fldtypes is None: + pass # opaque + elif tp.partial or any(tp.anonymous_struct_fields()): + pass # field layout obtained silently from the C compiler + else: + flags.append("_CFFI_F_CHECK_FIELDS") + if tp.packed: + if tp.packed > 1: + raise NotImplementedError( + "%r is declared with 'pack=%r'; only 0 or 1 are " + "supported in API mode (try to use \"...;\", which " + "does not require a 'pack' declaration)" % + (tp, tp.packed)) + flags.append("_CFFI_F_PACKED") + else: + flags.append("_CFFI_F_EXTERNAL") + reason_for_not_expanding = "external" + flags = '|'.join(flags) or '0' + c_fields = [] + if reason_for_not_expanding is None: + enumfields = list(self._enum_fields(tp)) + for fldname, fldtype, fbitsize, fqual in enumfields: + fldtype = self._field_type(tp, fldname, fldtype) + self._check_not_opaque(fldtype, + "field '%s.%s'" % (tp.name, fldname)) + # cname is None for _add_missing_struct_unions() only + op = OP_NOOP + if fbitsize >= 0: + op = OP_BITFIELD + size = '%d /* bits */' % fbitsize + elif cname is None or ( + isinstance(fldtype, model.ArrayType) and + fldtype.length is None): + size = '(size_t)-1' + else: + size = 'sizeof(((%s)0)->%s)' % ( + tp.get_c_name('*') if named_ptr is None + else named_ptr.name, + fldname) + if cname is None or fbitsize >= 0: + offset = '(size_t)-1' + elif named_ptr is not None: + offset = '(size_t)(((char *)&((%s)4096)->%s) - (char *)4096)' % ( + named_ptr.name, fldname) + else: + offset = 'offsetof(%s, %s)' % (tp.get_c_name(''), fldname) + c_fields.append( + FieldExpr(fldname, offset, size, fbitsize, + CffiOp(op, self._typesdict[fldtype]))) + first_field_index = len(self._lsts["field"]) + self._lsts["field"].extend(c_fields) + # + if cname is None: # unknown name, for _add_missing_struct_unions + size = '(size_t)-2' + align = -2 + comment = "unnamed" + else: + if named_ptr is not None: + size = 'sizeof(*(%s)0)' % (named_ptr.name,) + align = '-1 /* unknown alignment */' + else: + size = 'sizeof(%s)' % (cname,) + align = 'offsetof(struct _cffi_align_%s, y)' % (approxname,) + comment = None + else: + size = '(size_t)-1' + align = -1 + first_field_index = -1 + comment = reason_for_not_expanding + self._lsts["struct_union"].append( + StructUnionExpr(tp.name, type_index, flags, size, align, comment, + first_field_index, c_fields)) + self._seen_struct_unions.add(tp) + + def _check_not_opaque(self, tp, location): + while isinstance(tp, model.ArrayType): + tp = tp.item + if isinstance(tp, model.StructOrUnion) and tp.fldtypes is None: + raise TypeError( + "%s is of an opaque type (not declared in cdef())" % location) + + def _add_missing_struct_unions(self): + # not very nice, but some struct declarations might be missing + # because they don't have any known C name. Check that they are + # not partial (we can't complete or verify them!) and emit them + # anonymously. + lst = list(self._struct_unions.items()) + lst.sort(key=lambda tp_order: tp_order[1]) + for tp, order in lst: + if tp not in self._seen_struct_unions: + if tp.partial: + raise NotImplementedError("internal inconsistency: %r is " + "partial but was not seen at " + "this point" % (tp,)) + if tp.name.startswith('$') and tp.name[1:].isdigit(): + approxname = tp.name[1:] + elif tp.name == '_IO_FILE' and tp.forcename == 'FILE': + approxname = 'FILE' + self._typedef_ctx(tp, 'FILE') + else: + raise NotImplementedError("internal inconsistency: %r" % + (tp,)) + self._struct_ctx(tp, None, approxname) + + def _generate_cpy_struct_collecttype(self, tp, name): + self._struct_collecttype(tp) + _generate_cpy_union_collecttype = _generate_cpy_struct_collecttype + + def _struct_names(self, tp): + cname = tp.get_c_name('') + if ' ' in cname: + return cname, cname.replace(' ', '_') + else: + return cname, '_' + cname + + def _generate_cpy_struct_decl(self, tp, name): + self._struct_decl(tp, *self._struct_names(tp)) + _generate_cpy_union_decl = _generate_cpy_struct_decl + + def _generate_cpy_struct_ctx(self, tp, name): + self._struct_ctx(tp, *self._struct_names(tp)) + _generate_cpy_union_ctx = _generate_cpy_struct_ctx + + # ---------- + # 'anonymous' declarations. These are produced for anonymous structs + # or unions; the 'name' is obtained by a typedef. + + def _generate_cpy_anonymous_collecttype(self, tp, name): + if isinstance(tp, model.EnumType): + self._generate_cpy_enum_collecttype(tp, name) + else: + self._struct_collecttype(tp) + + def _generate_cpy_anonymous_decl(self, tp, name): + if isinstance(tp, model.EnumType): + self._generate_cpy_enum_decl(tp) + else: + self._struct_decl(tp, name, 'typedef_' + name) + + def _generate_cpy_anonymous_ctx(self, tp, name): + if isinstance(tp, model.EnumType): + self._enum_ctx(tp, name) + else: + self._struct_ctx(tp, name, 'typedef_' + name) + + # ---------- + # constants, declared with "static const ..." + + def _generate_cpy_const(self, is_int, name, tp=None, category='const', + check_value=None): + if (category, name) in self._seen_constants: + raise VerificationError( + "duplicate declaration of %s '%s'" % (category, name)) + self._seen_constants.add((category, name)) + # + prnt = self._prnt + funcname = '_cffi_%s_%s' % (category, name) + if is_int: + prnt('static int %s(unsigned long long *o)' % funcname) + prnt('{') + prnt(' int n = (%s) <= 0;' % (name,)) + prnt(' *o = (unsigned long long)((%s) | 0);' + ' /* check that %s is an integer */' % (name, name)) + if check_value is not None: + if check_value > 0: + check_value = '%dU' % (check_value,) + prnt(' if (!_cffi_check_int(*o, n, %s))' % (check_value,)) + prnt(' n |= 2;') + prnt(' return n;') + prnt('}') + else: + assert check_value is None + prnt('static void %s(char *o)' % funcname) + prnt('{') + prnt(' *(%s)o = %s;' % (tp.get_c_name('*'), name)) + prnt('}') + prnt() + + def _generate_cpy_constant_collecttype(self, tp, name): + is_int = tp.is_integer_type() + if not is_int or self.target_is_python: + self._do_collect_type(tp) + + def _generate_cpy_constant_decl(self, tp, name): + is_int = tp.is_integer_type() + self._generate_cpy_const(is_int, name, tp) + + def _generate_cpy_constant_ctx(self, tp, name): + if not self.target_is_python and tp.is_integer_type(): + type_op = CffiOp(OP_CONSTANT_INT, -1) + else: + if self.target_is_python: + const_kind = OP_DLOPEN_CONST + else: + const_kind = OP_CONSTANT + type_index = self._typesdict[tp] + type_op = CffiOp(const_kind, type_index) + self._lsts["global"].append( + GlobalExpr(name, '_cffi_const_%s' % name, type_op)) + + # ---------- + # enums + + def _generate_cpy_enum_collecttype(self, tp, name): + self._do_collect_type(tp) + + def _generate_cpy_enum_decl(self, tp, name=None): + for enumerator in tp.enumerators: + self._generate_cpy_const(True, enumerator) + + def _enum_ctx(self, tp, cname): + type_index = self._typesdict[tp] + type_op = CffiOp(OP_ENUM, -1) + if self.target_is_python: + tp.check_not_partial() + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + self._lsts["global"].append( + GlobalExpr(enumerator, '_cffi_const_%s' % enumerator, type_op, + check_value=enumvalue)) + # + if cname is not None and '$' not in cname and not self.target_is_python: + size = "sizeof(%s)" % cname + signed = "((%s)-1) <= 0" % cname + else: + basetp = tp.build_baseinttype(self.ffi, []) + size = self.ffi.sizeof(basetp) + signed = int(int(self.ffi.cast(basetp, -1)) < 0) + allenums = ",".join(tp.enumerators) + self._lsts["enum"].append( + EnumExpr(tp.name, type_index, size, signed, allenums)) + + def _generate_cpy_enum_ctx(self, tp, name): + self._enum_ctx(tp, tp._get_c_name()) + + # ---------- + # macros: for now only for integers + + def _generate_cpy_macro_collecttype(self, tp, name): + pass + + def _generate_cpy_macro_decl(self, tp, name): + if tp == '...': + check_value = None + else: + check_value = tp # an integer + self._generate_cpy_const(True, name, check_value=check_value) + + def _generate_cpy_macro_ctx(self, tp, name): + if tp == '...': + if self.target_is_python: + raise VerificationError( + "cannot use the syntax '...' in '#define %s ...' when " + "using the ABI mode" % (name,)) + check_value = None + else: + check_value = tp # an integer + type_op = CffiOp(OP_CONSTANT_INT, -1) + self._lsts["global"].append( + GlobalExpr(name, '_cffi_const_%s' % name, type_op, + check_value=check_value)) + + # ---------- + # global variables + + def _global_type(self, tp, global_name): + if isinstance(tp, model.ArrayType): + actual_length = tp.length + if actual_length == '...': + actual_length = '_cffi_array_len(%s)' % (global_name,) + tp_item = self._global_type(tp.item, '%s[0]' % global_name) + tp = model.ArrayType(tp_item, actual_length) + return tp + + def _generate_cpy_variable_collecttype(self, tp, name): + self._do_collect_type(self._global_type(tp, name)) + + def _generate_cpy_variable_decl(self, tp, name): + prnt = self._prnt + tp = self._global_type(tp, name) + if isinstance(tp, model.ArrayType) and tp.length is None: + tp = tp.item + ampersand = '' + else: + ampersand = '&' + # This code assumes that casts from "tp *" to "void *" is a + # no-op, i.e. a function that returns a "tp *" can be called + # as if it returned a "void *". This should be generally true + # on any modern machine. The only exception to that rule (on + # uncommon architectures, and as far as I can tell) might be + # if 'tp' were a function type, but that is not possible here. + # (If 'tp' is a function _pointer_ type, then casts from "fn_t + # **" to "void *" are again no-ops, as far as I can tell.) + decl = '*_cffi_var_%s(void)' % (name,) + prnt('static ' + tp.get_c_name(decl, quals=self._current_quals)) + prnt('{') + prnt(' return %s(%s);' % (ampersand, name)) + prnt('}') + prnt() + + def _generate_cpy_variable_ctx(self, tp, name): + tp = self._global_type(tp, name) + type_index = self._typesdict[tp] + if self.target_is_python: + op = OP_GLOBAL_VAR + else: + op = OP_GLOBAL_VAR_F + self._lsts["global"].append( + GlobalExpr(name, '_cffi_var_%s' % name, CffiOp(op, type_index))) + + # ---------- + # extern "Python" + + def _generate_cpy_extern_python_collecttype(self, tp, name): + assert isinstance(tp, model.FunctionPtrType) + self._do_collect_type(tp) + _generate_cpy_dllexport_python_collecttype = \ + _generate_cpy_extern_python_plus_c_collecttype = \ + _generate_cpy_extern_python_collecttype + + def _extern_python_decl(self, tp, name, tag_and_space): + prnt = self._prnt + if isinstance(tp.result, model.VoidType): + size_of_result = '0' + else: + context = 'result of %s' % name + size_of_result = '(int)sizeof(%s)' % ( + tp.result.get_c_name('', context),) + prnt('static struct _cffi_externpy_s _cffi_externpy__%s =' % name) + prnt(' { "%s.%s", %s, 0, 0 };' % ( + self.module_name, name, size_of_result)) + prnt() + # + arguments = [] + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + arg = type.get_c_name(' a%d' % i, context) + arguments.append(arg) + # + repr_arguments = ', '.join(arguments) + repr_arguments = repr_arguments or 'void' + name_and_arguments = '%s(%s)' % (name, repr_arguments) + if tp.abi == "__stdcall": + name_and_arguments = '_cffi_stdcall ' + name_and_arguments + # + def may_need_128_bits(tp): + return (isinstance(tp, model.PrimitiveType) and + tp.name == 'long double') + # + size_of_a = max(len(tp.args)*8, 8) + if may_need_128_bits(tp.result): + size_of_a = max(size_of_a, 16) + if isinstance(tp.result, model.StructOrUnion): + size_of_a = 'sizeof(%s) > %d ? sizeof(%s) : %d' % ( + tp.result.get_c_name(''), size_of_a, + tp.result.get_c_name(''), size_of_a) + prnt('%s%s' % (tag_and_space, tp.result.get_c_name(name_and_arguments))) + prnt('{') + prnt(' char a[%s];' % size_of_a) + prnt(' char *p = a;') + for i, type in enumerate(tp.args): + arg = 'a%d' % i + if (isinstance(type, model.StructOrUnion) or + may_need_128_bits(type)): + arg = '&' + arg + type = model.PointerType(type) + prnt(' *(%s)(p + %d) = %s;' % (type.get_c_name('*'), i*8, arg)) + prnt(' _cffi_call_python(&_cffi_externpy__%s, p);' % name) + if not isinstance(tp.result, model.VoidType): + prnt(' return *(%s)p;' % (tp.result.get_c_name('*'),)) + prnt('}') + prnt() + self._num_externpy += 1 + + def _generate_cpy_extern_python_decl(self, tp, name): + self._extern_python_decl(tp, name, 'static ') + + def _generate_cpy_dllexport_python_decl(self, tp, name): + self._extern_python_decl(tp, name, 'CFFI_DLLEXPORT ') + + def _generate_cpy_extern_python_plus_c_decl(self, tp, name): + self._extern_python_decl(tp, name, '') + + def _generate_cpy_extern_python_ctx(self, tp, name): + if self.target_is_python: + raise VerificationError( + "cannot use 'extern \"Python\"' in the ABI mode") + if tp.ellipsis: + raise NotImplementedError("a vararg function is extern \"Python\"") + type_index = self._typesdict[tp] + type_op = CffiOp(OP_EXTERN_PYTHON, type_index) + self._lsts["global"].append( + GlobalExpr(name, '&_cffi_externpy__%s' % name, type_op, name)) + + _generate_cpy_dllexport_python_ctx = \ + _generate_cpy_extern_python_plus_c_ctx = \ + _generate_cpy_extern_python_ctx + + def _print_string_literal_in_array(self, s): + prnt = self._prnt + prnt('// # NB. this is not a string because of a size limit in MSVC') + if not isinstance(s, bytes): # unicode + s = s.encode('utf-8') # -> bytes + else: + s.decode('utf-8') # got bytes, check for valid utf-8 + try: + s.decode('ascii') + except UnicodeDecodeError: + s = b'# -*- encoding: utf8 -*-\n' + s + for line in s.splitlines(True): + comment = line + if type('//') is bytes: # python2 + line = map(ord, line) # make a list of integers + else: # python3 + # type(line) is bytes, which enumerates like a list of integers + comment = ascii(comment)[1:-1] + prnt(('// ' + comment).rstrip()) + printed_line = '' + for c in line: + if len(printed_line) >= 76: + prnt(printed_line) + printed_line = '' + printed_line += '%d,' % (c,) + prnt(printed_line) + + # ---------- + # emitting the opcodes for individual types + + def _emit_bytecode_VoidType(self, tp, index): + self.cffi_types[index] = CffiOp(OP_PRIMITIVE, PRIM_VOID) + + def _emit_bytecode_PrimitiveType(self, tp, index): + prim_index = PRIMITIVE_TO_INDEX[tp.name] + self.cffi_types[index] = CffiOp(OP_PRIMITIVE, prim_index) + + def _emit_bytecode_UnknownIntegerType(self, tp, index): + s = ('_cffi_prim_int(sizeof(%s), (\n' + ' ((%s)-1) | 0 /* check that %s is an integer type */\n' + ' ) <= 0)' % (tp.name, tp.name, tp.name)) + self.cffi_types[index] = CffiOp(OP_PRIMITIVE, s) + + def _emit_bytecode_UnknownFloatType(self, tp, index): + s = ('_cffi_prim_float(sizeof(%s) *\n' + ' (((%s)1) / 2) * 2 /* integer => 0, float => 1 */\n' + ' )' % (tp.name, tp.name)) + self.cffi_types[index] = CffiOp(OP_PRIMITIVE, s) + + def _emit_bytecode_RawFunctionType(self, tp, index): + self.cffi_types[index] = CffiOp(OP_FUNCTION, self._typesdict[tp.result]) + index += 1 + for tp1 in tp.args: + realindex = self._typesdict[tp1] + if index != realindex: + if isinstance(tp1, model.PrimitiveType): + self._emit_bytecode_PrimitiveType(tp1, index) + else: + self.cffi_types[index] = CffiOp(OP_NOOP, realindex) + index += 1 + flags = int(tp.ellipsis) + if tp.abi is not None: + if tp.abi == '__stdcall': + flags |= 2 + else: + raise NotImplementedError("abi=%r" % (tp.abi,)) + self.cffi_types[index] = CffiOp(OP_FUNCTION_END, flags) + + def _emit_bytecode_PointerType(self, tp, index): + self.cffi_types[index] = CffiOp(OP_POINTER, self._typesdict[tp.totype]) + + _emit_bytecode_ConstPointerType = _emit_bytecode_PointerType + _emit_bytecode_NamedPointerType = _emit_bytecode_PointerType + + def _emit_bytecode_FunctionPtrType(self, tp, index): + raw = tp.as_raw_function() + self.cffi_types[index] = CffiOp(OP_POINTER, self._typesdict[raw]) + + def _emit_bytecode_ArrayType(self, tp, index): + item_index = self._typesdict[tp.item] + if tp.length is None: + self.cffi_types[index] = CffiOp(OP_OPEN_ARRAY, item_index) + elif tp.length == '...': + raise VerificationError( + "type %s badly placed: the '...' array length can only be " + "used on global arrays or on fields of structures" % ( + str(tp).replace('/*...*/', '...'),)) + else: + assert self.cffi_types[index + 1] == 'LEN' + self.cffi_types[index] = CffiOp(OP_ARRAY, item_index) + self.cffi_types[index + 1] = CffiOp(None, str(tp.length)) + + def _emit_bytecode_StructType(self, tp, index): + struct_index = self._struct_unions[tp] + self.cffi_types[index] = CffiOp(OP_STRUCT_UNION, struct_index) + _emit_bytecode_UnionType = _emit_bytecode_StructType + + def _emit_bytecode_EnumType(self, tp, index): + enum_index = self._enums[tp] + self.cffi_types[index] = CffiOp(OP_ENUM, enum_index) + + +if sys.version_info >= (3,): + NativeIO = io.StringIO +else: + class NativeIO(io.BytesIO): + def write(self, s): + if isinstance(s, unicode): + s = s.encode('ascii') + super(NativeIO, self).write(s) + +def _is_file_like(maybefile): + # compare to xml.etree.ElementTree._get_writer + return hasattr(maybefile, 'write') + +def _make_c_or_py_source(ffi, module_name, preamble, target_file, verbose): + if verbose: + print("generating %s" % (target_file,)) + recompiler = Recompiler(ffi, module_name, + target_is_python=(preamble is None)) + recompiler.collect_type_table() + recompiler.collect_step_tables() + if _is_file_like(target_file): + recompiler.write_source_to_f(target_file, preamble) + return True + f = NativeIO() + recompiler.write_source_to_f(f, preamble) + output = f.getvalue() + try: + with open(target_file, 'r') as f1: + if f1.read(len(output) + 1) != output: + raise IOError + if verbose: + print("(already up-to-date)") + return False # already up-to-date + except IOError: + tmp_file = '%s.~%d' % (target_file, os.getpid()) + with open(tmp_file, 'w') as f1: + f1.write(output) + try: + os.rename(tmp_file, target_file) + except OSError: + os.unlink(target_file) + os.rename(tmp_file, target_file) + return True + +def make_c_source(ffi, module_name, preamble, target_c_file, verbose=False): + assert preamble is not None + return _make_c_or_py_source(ffi, module_name, preamble, target_c_file, + verbose) + +def make_py_source(ffi, module_name, target_py_file, verbose=False): + return _make_c_or_py_source(ffi, module_name, None, target_py_file, + verbose) + +def _modname_to_file(outputdir, modname, extension): + parts = modname.split('.') + try: + os.makedirs(os.path.join(outputdir, *parts[:-1])) + except OSError: + pass + parts[-1] += extension + return os.path.join(outputdir, *parts), parts + + +# Aaargh. Distutils is not tested at all for the purpose of compiling +# DLLs that are not extension modules. Here are some hacks to work +# around that, in the _patch_for_*() functions... + +def _patch_meth(patchlist, cls, name, new_meth): + old = getattr(cls, name) + patchlist.append((cls, name, old)) + setattr(cls, name, new_meth) + return old + +def _unpatch_meths(patchlist): + for cls, name, old_meth in reversed(patchlist): + setattr(cls, name, old_meth) + +def _patch_for_embedding(patchlist): + if sys.platform == 'win32': + # we must not remove the manifest when building for embedding! + # FUTURE: this module was removed in setuptools 74; this is likely dead code and should be removed, + # since the toolchain it supports (VS2005-2008) is also long dead. + from cffi._shimmed_dist_utils import MSVCCompiler + if MSVCCompiler is not None: + _patch_meth(patchlist, MSVCCompiler, '_remove_visual_c_ref', + lambda self, manifest_file: manifest_file) + + if sys.platform == 'darwin': + # we must not make a '-bundle', but a '-dynamiclib' instead + from cffi._shimmed_dist_utils import CCompiler + def my_link_shared_object(self, *args, **kwds): + if '-bundle' in self.linker_so: + self.linker_so = list(self.linker_so) + i = self.linker_so.index('-bundle') + self.linker_so[i] = '-dynamiclib' + return old_link_shared_object(self, *args, **kwds) + old_link_shared_object = _patch_meth(patchlist, CCompiler, + 'link_shared_object', + my_link_shared_object) + +def _patch_for_target(patchlist, target): + from cffi._shimmed_dist_utils import build_ext + # if 'target' is different from '*', we need to patch some internal + # method to just return this 'target' value, instead of having it + # built from module_name + if target.endswith('.*'): + target = target[:-2] + if sys.platform == 'win32': + target += '.dll' + elif sys.platform == 'darwin': + target += '.dylib' + else: + target += '.so' + _patch_meth(patchlist, build_ext, 'get_ext_filename', + lambda self, ext_name: target) + + +def recompile(ffi, module_name, preamble, tmpdir='.', call_c_compiler=True, + c_file=None, source_extension='.c', extradir=None, + compiler_verbose=1, target=None, debug=None, + uses_ffiplatform=True, **kwds): + if not isinstance(module_name, str): + module_name = module_name.encode('ascii') + if ffi._windows_unicode: + ffi._apply_windows_unicode(kwds) + if preamble is not None: + if call_c_compiler and _is_file_like(c_file): + raise TypeError("Writing to file-like objects is not supported " + "with call_c_compiler=True") + embedding = (ffi._embedding is not None) + if embedding: + ffi._apply_embedding_fix(kwds) + if c_file is None: + c_file, parts = _modname_to_file(tmpdir, module_name, + source_extension) + if extradir: + parts = [extradir] + parts + ext_c_file = os.path.join(*parts) + else: + ext_c_file = c_file + # + if target is None: + if embedding: + target = '%s.*' % module_name + else: + target = '*' + # + if uses_ffiplatform: + ext = ffiplatform.get_extension(ext_c_file, module_name, **kwds) + else: + ext = None + updated = make_c_source(ffi, module_name, preamble, c_file, + verbose=compiler_verbose) + if call_c_compiler: + patchlist = [] + cwd = os.getcwd() + try: + if embedding: + _patch_for_embedding(patchlist) + if target != '*': + _patch_for_target(patchlist, target) + if compiler_verbose: + if tmpdir == '.': + msg = 'the current directory is' + else: + msg = 'setting the current directory to' + print('%s %r' % (msg, os.path.abspath(tmpdir))) + os.chdir(tmpdir) + outputfilename = ffiplatform.compile('.', ext, + compiler_verbose, debug) + finally: + os.chdir(cwd) + _unpatch_meths(patchlist) + return outputfilename + else: + return ext, updated + else: + if c_file is None: + c_file, _ = _modname_to_file(tmpdir, module_name, '.py') + updated = make_py_source(ffi, module_name, c_file, + verbose=compiler_verbose) + if call_c_compiler: + return c_file + else: + return None, updated + diff --git a/venv/lib/python3.12/site-packages/cffi/setuptools_ext.py b/venv/lib/python3.12/site-packages/cffi/setuptools_ext.py new file mode 100644 index 0000000..5cdd246 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/setuptools_ext.py @@ -0,0 +1,229 @@ +import os +import sys +import sysconfig + +try: + basestring +except NameError: + # Python 3.x + basestring = str + +def error(msg): + from cffi._shimmed_dist_utils import DistutilsSetupError + raise DistutilsSetupError(msg) + + +def execfile(filename, glob): + # We use execfile() (here rewritten for Python 3) instead of + # __import__() to load the build script. The problem with + # a normal import is that in some packages, the intermediate + # __init__.py files may already try to import the file that + # we are generating. + with open(filename) as f: + src = f.read() + src += '\n' # Python 2.6 compatibility + code = compile(src, filename, 'exec') + exec(code, glob, glob) + + +def add_cffi_module(dist, mod_spec): + from cffi.api import FFI + + if not isinstance(mod_spec, basestring): + error("argument to 'cffi_modules=...' must be a str or a list of str," + " not %r" % (type(mod_spec).__name__,)) + mod_spec = str(mod_spec) + try: + build_file_name, ffi_var_name = mod_spec.split(':') + except ValueError: + error("%r must be of the form 'path/build.py:ffi_variable'" % + (mod_spec,)) + if not os.path.exists(build_file_name): + ext = '' + rewritten = build_file_name.replace('.', '/') + '.py' + if os.path.exists(rewritten): + ext = ' (rewrite cffi_modules to [%r])' % ( + rewritten + ':' + ffi_var_name,) + error("%r does not name an existing file%s" % (build_file_name, ext)) + + mod_vars = {'__name__': '__cffi__', '__file__': build_file_name} + execfile(build_file_name, mod_vars) + + try: + ffi = mod_vars[ffi_var_name] + except KeyError: + error("%r: object %r not found in module" % (mod_spec, + ffi_var_name)) + if not isinstance(ffi, FFI): + ffi = ffi() # maybe it's a function instead of directly an ffi + if not isinstance(ffi, FFI): + error("%r is not an FFI instance (got %r)" % (mod_spec, + type(ffi).__name__)) + if not hasattr(ffi, '_assigned_source'): + error("%r: the set_source() method was not called" % (mod_spec,)) + module_name, source, source_extension, kwds = ffi._assigned_source + if ffi._windows_unicode: + kwds = kwds.copy() + ffi._apply_windows_unicode(kwds) + + if source is None: + _add_py_module(dist, ffi, module_name) + else: + _add_c_module(dist, ffi, module_name, source, source_extension, kwds) + +def _set_py_limited_api(Extension, kwds): + """ + Add py_limited_api to kwds if setuptools >= 26 is in use. + Do not alter the setting if it already exists. + Setuptools takes care of ignoring the flag on Python 2 and PyPy. + + CPython itself should ignore the flag in a debugging version + (by not listing .abi3.so in the extensions it supports), but + it doesn't so far, creating troubles. That's why we check + for "not hasattr(sys, 'gettotalrefcount')" (the 2.7 compatible equivalent + of 'd' not in sys.abiflags). (http://bugs.python.org/issue28401) + + On Windows, with CPython <= 3.4, it's better not to use py_limited_api + because virtualenv *still* doesn't copy PYTHON3.DLL on these versions. + Recently (2020) we started shipping only >= 3.5 wheels, though. So + we'll give it another try and set py_limited_api on Windows >= 3.5. + """ + from cffi._shimmed_dist_utils import log + from cffi import recompiler + + if ('py_limited_api' not in kwds and not hasattr(sys, 'gettotalrefcount') + and recompiler.USE_LIMITED_API): + import setuptools + try: + setuptools_major_version = int(setuptools.__version__.partition('.')[0]) + if setuptools_major_version >= 26: + kwds['py_limited_api'] = True + except ValueError: # certain development versions of setuptools + # If we don't know the version number of setuptools, we + # try to set 'py_limited_api' anyway. At worst, we get a + # warning. + kwds['py_limited_api'] = True + + if sysconfig.get_config_var("Py_GIL_DISABLED"): + if kwds.get('py_limited_api'): + log.info("Ignoring py_limited_api=True for free-threaded build.") + + kwds['py_limited_api'] = False + + if kwds.get('py_limited_api') is False: + # avoid setting Py_LIMITED_API if py_limited_api=False + # which _cffi_include.h does unless _CFFI_NO_LIMITED_API is defined + kwds.setdefault("define_macros", []).append(("_CFFI_NO_LIMITED_API", None)) + return kwds + +def _add_c_module(dist, ffi, module_name, source, source_extension, kwds): + # We are a setuptools extension. Need this build_ext for py_limited_api. + from setuptools.command.build_ext import build_ext + from cffi._shimmed_dist_utils import Extension, log, mkpath + from cffi import recompiler + + allsources = ['$PLACEHOLDER'] + allsources.extend(kwds.pop('sources', [])) + kwds = _set_py_limited_api(Extension, kwds) + ext = Extension(name=module_name, sources=allsources, **kwds) + + def make_mod(tmpdir, pre_run=None): + c_file = os.path.join(tmpdir, module_name + source_extension) + log.info("generating cffi module %r" % c_file) + mkpath(tmpdir) + # a setuptools-only, API-only hook: called with the "ext" and "ffi" + # arguments just before we turn the ffi into C code. To use it, + # subclass the 'distutils.command.build_ext.build_ext' class and + # add a method 'def pre_run(self, ext, ffi)'. + if pre_run is not None: + pre_run(ext, ffi) + updated = recompiler.make_c_source(ffi, module_name, source, c_file) + if not updated: + log.info("already up-to-date") + return c_file + + if dist.ext_modules is None: + dist.ext_modules = [] + dist.ext_modules.append(ext) + + base_class = dist.cmdclass.get('build_ext', build_ext) + class build_ext_make_mod(base_class): + def run(self): + if ext.sources[0] == '$PLACEHOLDER': + pre_run = getattr(self, 'pre_run', None) + ext.sources[0] = make_mod(self.build_temp, pre_run) + base_class.run(self) + dist.cmdclass['build_ext'] = build_ext_make_mod + # NB. multiple runs here will create multiple 'build_ext_make_mod' + # classes. Even in this case the 'build_ext' command should be + # run once; but just in case, the logic above does nothing if + # called again. + + +def _add_py_module(dist, ffi, module_name): + from setuptools.command.build_py import build_py + from setuptools.command.build_ext import build_ext + from cffi._shimmed_dist_utils import log, mkpath + from cffi import recompiler + + def generate_mod(py_file): + log.info("generating cffi module %r" % py_file) + mkpath(os.path.dirname(py_file)) + updated = recompiler.make_py_source(ffi, module_name, py_file) + if not updated: + log.info("already up-to-date") + + base_class = dist.cmdclass.get('build_py', build_py) + class build_py_make_mod(base_class): + def run(self): + base_class.run(self) + module_path = module_name.split('.') + module_path[-1] += '.py' + generate_mod(os.path.join(self.build_lib, *module_path)) + def get_source_files(self): + # This is called from 'setup.py sdist' only. Exclude + # the generate .py module in this case. + saved_py_modules = self.py_modules + try: + if saved_py_modules: + self.py_modules = [m for m in saved_py_modules + if m != module_name] + return base_class.get_source_files(self) + finally: + self.py_modules = saved_py_modules + dist.cmdclass['build_py'] = build_py_make_mod + + # distutils and setuptools have no notion I could find of a + # generated python module. If we don't add module_name to + # dist.py_modules, then things mostly work but there are some + # combination of options (--root and --record) that will miss + # the module. So we add it here, which gives a few apparently + # harmless warnings about not finding the file outside the + # build directory. + # Then we need to hack more in get_source_files(); see above. + if dist.py_modules is None: + dist.py_modules = [] + dist.py_modules.append(module_name) + + # the following is only for "build_ext -i" + base_class_2 = dist.cmdclass.get('build_ext', build_ext) + class build_ext_make_mod(base_class_2): + def run(self): + base_class_2.run(self) + if self.inplace: + # from get_ext_fullpath() in distutils/command/build_ext.py + module_path = module_name.split('.') + package = '.'.join(module_path[:-1]) + build_py = self.get_finalized_command('build_py') + package_dir = build_py.get_package_dir(package) + file_name = module_path[-1] + '.py' + generate_mod(os.path.join(package_dir, file_name)) + dist.cmdclass['build_ext'] = build_ext_make_mod + +def cffi_modules(dist, attr, value): + assert attr == 'cffi_modules' + if isinstance(value, basestring): + value = [value] + + for cffi_module in value: + add_cffi_module(dist, cffi_module) diff --git a/venv/lib/python3.12/site-packages/cffi/vengine_cpy.py b/venv/lib/python3.12/site-packages/cffi/vengine_cpy.py new file mode 100644 index 0000000..02e6a47 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/vengine_cpy.py @@ -0,0 +1,1087 @@ +# +# DEPRECATED: implementation for ffi.verify() +# +import sys +from . import model +from .error import VerificationError +from . import _imp_emulation as imp + + +class VCPythonEngine(object): + _class_key = 'x' + _gen_python_module = True + + def __init__(self, verifier): + self.verifier = verifier + self.ffi = verifier.ffi + self._struct_pending_verification = {} + self._types_of_builtin_functions = {} + + def patch_extension_kwds(self, kwds): + pass + + def find_module(self, module_name, path, so_suffixes): + try: + f, filename, descr = imp.find_module(module_name, path) + except ImportError: + return None + if f is not None: + f.close() + # Note that after a setuptools installation, there are both .py + # and .so files with the same basename. The code here relies on + # imp.find_module() locating the .so in priority. + if descr[0] not in so_suffixes: + return None + return filename + + def collect_types(self): + self._typesdict = {} + self._generate("collecttype") + + def _prnt(self, what=''): + self._f.write(what + '\n') + + def _gettypenum(self, type): + # a KeyError here is a bug. please report it! :-) + return self._typesdict[type] + + def _do_collect_type(self, tp): + if ((not isinstance(tp, model.PrimitiveType) + or tp.name == 'long double') + and tp not in self._typesdict): + num = len(self._typesdict) + self._typesdict[tp] = num + + def write_source_to_f(self): + self.collect_types() + # + # The new module will have a _cffi_setup() function that receives + # objects from the ffi world, and that calls some setup code in + # the module. This setup code is split in several independent + # functions, e.g. one per constant. The functions are "chained" + # by ending in a tail call to each other. + # + # This is further split in two chained lists, depending on if we + # can do it at import-time or if we must wait for _cffi_setup() to + # provide us with the objects. This is needed because we + # need the values of the enum constants in order to build the + # that we may have to pass to _cffi_setup(). + # + # The following two 'chained_list_constants' items contains + # the head of these two chained lists, as a string that gives the + # call to do, if any. + self._chained_list_constants = ['((void)lib,0)', '((void)lib,0)'] + # + prnt = self._prnt + # first paste some standard set of lines that are mostly '#define' + prnt(cffimod_header) + prnt() + # then paste the C source given by the user, verbatim. + prnt(self.verifier.preamble) + prnt() + # + # call generate_cpy_xxx_decl(), for every xxx found from + # ffi._parser._declarations. This generates all the functions. + self._generate("decl") + # + # implement the function _cffi_setup_custom() as calling the + # head of the chained list. + self._generate_setup_custom() + prnt() + # + # produce the method table, including the entries for the + # generated Python->C function wrappers, which are done + # by generate_cpy_function_method(). + prnt('static PyMethodDef _cffi_methods[] = {') + self._generate("method") + prnt(' {"_cffi_setup", _cffi_setup, METH_VARARGS, NULL},') + prnt(' {NULL, NULL, 0, NULL} /* Sentinel */') + prnt('};') + prnt() + # + # standard init. + modname = self.verifier.get_module_name() + constants = self._chained_list_constants[False] + prnt('#if PY_MAJOR_VERSION >= 3') + prnt() + prnt('static struct PyModuleDef _cffi_module_def = {') + prnt(' PyModuleDef_HEAD_INIT,') + prnt(' "%s",' % modname) + prnt(' NULL,') + prnt(' -1,') + prnt(' _cffi_methods,') + prnt(' NULL, NULL, NULL, NULL') + prnt('};') + prnt() + prnt('PyMODINIT_FUNC') + prnt('PyInit_%s(void)' % modname) + prnt('{') + prnt(' PyObject *lib;') + prnt(' lib = PyModule_Create(&_cffi_module_def);') + prnt(' if (lib == NULL)') + prnt(' return NULL;') + prnt(' if (%s < 0 || _cffi_init() < 0) {' % (constants,)) + prnt(' Py_DECREF(lib);') + prnt(' return NULL;') + prnt(' }') + prnt('#if Py_GIL_DISABLED') + prnt(' PyUnstable_Module_SetGIL(lib, Py_MOD_GIL_NOT_USED);') + prnt('#endif') + prnt(' return lib;') + prnt('}') + prnt() + prnt('#else') + prnt() + prnt('PyMODINIT_FUNC') + prnt('init%s(void)' % modname) + prnt('{') + prnt(' PyObject *lib;') + prnt(' lib = Py_InitModule("%s", _cffi_methods);' % modname) + prnt(' if (lib == NULL)') + prnt(' return;') + prnt(' if (%s < 0 || _cffi_init() < 0)' % (constants,)) + prnt(' return;') + prnt(' return;') + prnt('}') + prnt() + prnt('#endif') + + def load_library(self, flags=None): + # XXX review all usages of 'self' here! + # import it as a new extension module + imp.acquire_lock() + try: + if hasattr(sys, "getdlopenflags"): + previous_flags = sys.getdlopenflags() + try: + if hasattr(sys, "setdlopenflags") and flags is not None: + sys.setdlopenflags(flags) + module = imp.load_dynamic(self.verifier.get_module_name(), + self.verifier.modulefilename) + except ImportError as e: + error = "importing %r: %s" % (self.verifier.modulefilename, e) + raise VerificationError(error) + finally: + if hasattr(sys, "setdlopenflags"): + sys.setdlopenflags(previous_flags) + finally: + imp.release_lock() + # + # call loading_cpy_struct() to get the struct layout inferred by + # the C compiler + self._load(module, 'loading') + # + # the C code will need the objects. Collect them in + # order in a list. + revmapping = dict([(value, key) + for (key, value) in self._typesdict.items()]) + lst = [revmapping[i] for i in range(len(revmapping))] + lst = list(map(self.ffi._get_cached_btype, lst)) + # + # build the FFILibrary class and instance and call _cffi_setup(). + # this will set up some fields like '_cffi_types', and only then + # it will invoke the chained list of functions that will really + # build (notably) the constant objects, as if they are + # pointers, and store them as attributes on the 'library' object. + class FFILibrary(object): + _cffi_python_module = module + _cffi_ffi = self.ffi + _cffi_dir = [] + def __dir__(self): + return FFILibrary._cffi_dir + list(self.__dict__) + library = FFILibrary() + if module._cffi_setup(lst, VerificationError, library): + import warnings + warnings.warn("reimporting %r might overwrite older definitions" + % (self.verifier.get_module_name())) + # + # finally, call the loaded_cpy_xxx() functions. This will perform + # the final adjustments, like copying the Python->C wrapper + # functions from the module to the 'library' object, and setting + # up the FFILibrary class with properties for the global C variables. + self._load(module, 'loaded', library=library) + module._cffi_original_ffi = self.ffi + module._cffi_types_of_builtin_funcs = self._types_of_builtin_functions + return library + + def _get_declarations(self): + lst = [(key, tp) for (key, (tp, qual)) in + self.ffi._parser._declarations.items()] + lst.sort() + return lst + + def _generate(self, step_name): + for name, tp in self._get_declarations(): + kind, realname = name.split(' ', 1) + try: + method = getattr(self, '_generate_cpy_%s_%s' % (kind, + step_name)) + except AttributeError: + raise VerificationError( + "not implemented in verify(): %r" % name) + try: + method(tp, realname) + except Exception as e: + model.attach_exception_info(e, name) + raise + + def _load(self, module, step_name, **kwds): + for name, tp in self._get_declarations(): + kind, realname = name.split(' ', 1) + method = getattr(self, '_%s_cpy_%s' % (step_name, kind)) + try: + method(tp, realname, module, **kwds) + except Exception as e: + model.attach_exception_info(e, name) + raise + + def _generate_nothing(self, tp, name): + pass + + def _loaded_noop(self, tp, name, module, **kwds): + pass + + # ---------- + + def _convert_funcarg_to_c(self, tp, fromvar, tovar, errcode): + extraarg = '' + if isinstance(tp, model.PrimitiveType): + if tp.is_integer_type() and tp.name != '_Bool': + converter = '_cffi_to_c_int' + extraarg = ', %s' % tp.name + elif tp.is_complex_type(): + raise VerificationError( + "not implemented in verify(): complex types") + else: + converter = '(%s)_cffi_to_c_%s' % (tp.get_c_name(''), + tp.name.replace(' ', '_')) + errvalue = '-1' + # + elif isinstance(tp, model.PointerType): + self._convert_funcarg_to_c_ptr_or_array(tp, fromvar, + tovar, errcode) + return + # + elif isinstance(tp, (model.StructOrUnion, model.EnumType)): + # a struct (not a struct pointer) as a function argument + self._prnt(' if (_cffi_to_c((char *)&%s, _cffi_type(%d), %s) < 0)' + % (tovar, self._gettypenum(tp), fromvar)) + self._prnt(' %s;' % errcode) + return + # + elif isinstance(tp, model.FunctionPtrType): + converter = '(%s)_cffi_to_c_pointer' % tp.get_c_name('') + extraarg = ', _cffi_type(%d)' % self._gettypenum(tp) + errvalue = 'NULL' + # + else: + raise NotImplementedError(tp) + # + self._prnt(' %s = %s(%s%s);' % (tovar, converter, fromvar, extraarg)) + self._prnt(' if (%s == (%s)%s && PyErr_Occurred())' % ( + tovar, tp.get_c_name(''), errvalue)) + self._prnt(' %s;' % errcode) + + def _extra_local_variables(self, tp, localvars, freelines): + if isinstance(tp, model.PointerType): + localvars.add('Py_ssize_t datasize') + localvars.add('struct _cffi_freeme_s *large_args_free = NULL') + freelines.add('if (large_args_free != NULL)' + ' _cffi_free_array_arguments(large_args_free);') + + def _convert_funcarg_to_c_ptr_or_array(self, tp, fromvar, tovar, errcode): + self._prnt(' datasize = _cffi_prepare_pointer_call_argument(') + self._prnt(' _cffi_type(%d), %s, (char **)&%s);' % ( + self._gettypenum(tp), fromvar, tovar)) + self._prnt(' if (datasize != 0) {') + self._prnt(' %s = ((size_t)datasize) <= 640 ? ' + 'alloca((size_t)datasize) : NULL;' % (tovar,)) + self._prnt(' if (_cffi_convert_array_argument(_cffi_type(%d), %s, ' + '(char **)&%s,' % (self._gettypenum(tp), fromvar, tovar)) + self._prnt(' datasize, &large_args_free) < 0)') + self._prnt(' %s;' % errcode) + self._prnt(' }') + + def _convert_expr_from_c(self, tp, var, context): + if isinstance(tp, model.PrimitiveType): + if tp.is_integer_type() and tp.name != '_Bool': + return '_cffi_from_c_int(%s, %s)' % (var, tp.name) + elif tp.name != 'long double': + return '_cffi_from_c_%s(%s)' % (tp.name.replace(' ', '_'), var) + else: + return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, (model.PointerType, model.FunctionPtrType)): + return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, model.ArrayType): + return '_cffi_from_c_pointer((char *)%s, _cffi_type(%d))' % ( + var, self._gettypenum(model.PointerType(tp.item))) + elif isinstance(tp, model.StructOrUnion): + if tp.fldnames is None: + raise TypeError("'%s' is used as %s, but is opaque" % ( + tp._get_c_name(), context)) + return '_cffi_from_c_struct((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + elif isinstance(tp, model.EnumType): + return '_cffi_from_c_deref((char *)&%s, _cffi_type(%d))' % ( + var, self._gettypenum(tp)) + else: + raise NotImplementedError(tp) + + # ---------- + # typedefs: generates no code so far + + _generate_cpy_typedef_collecttype = _generate_nothing + _generate_cpy_typedef_decl = _generate_nothing + _generate_cpy_typedef_method = _generate_nothing + _loading_cpy_typedef = _loaded_noop + _loaded_cpy_typedef = _loaded_noop + + # ---------- + # function declarations + + def _generate_cpy_function_collecttype(self, tp, name): + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + self._do_collect_type(tp) + else: + # don't call _do_collect_type(tp) in this common case, + # otherwise test_autofilled_struct_as_argument fails + for type in tp.args: + self._do_collect_type(type) + self._do_collect_type(tp.result) + + def _generate_cpy_function_decl(self, tp, name): + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + # cannot support vararg functions better than this: check for its + # exact type (including the fixed arguments), and build it as a + # constant function pointer (no CPython wrapper) + self._generate_cpy_const(False, name, tp) + return + prnt = self._prnt + numargs = len(tp.args) + if numargs == 0: + argname = 'noarg' + elif numargs == 1: + argname = 'arg0' + else: + argname = 'args' + prnt('static PyObject *') + prnt('_cffi_f_%s(PyObject *self, PyObject *%s)' % (name, argname)) + prnt('{') + # + context = 'argument of %s' % name + for i, type in enumerate(tp.args): + prnt(' %s;' % type.get_c_name(' x%d' % i, context)) + # + localvars = set() + freelines = set() + for type in tp.args: + self._extra_local_variables(type, localvars, freelines) + for decl in sorted(localvars): + prnt(' %s;' % (decl,)) + # + if not isinstance(tp.result, model.VoidType): + result_code = 'result = ' + context = 'result of %s' % name + prnt(' %s;' % tp.result.get_c_name(' result', context)) + prnt(' PyObject *pyresult;') + else: + result_code = '' + # + if len(tp.args) > 1: + rng = range(len(tp.args)) + for i in rng: + prnt(' PyObject *arg%d;' % i) + prnt() + prnt(' if (!PyArg_ParseTuple(args, "%s:%s", %s))' % ( + 'O' * numargs, name, ', '.join(['&arg%d' % i for i in rng]))) + prnt(' return NULL;') + prnt() + # + for i, type in enumerate(tp.args): + self._convert_funcarg_to_c(type, 'arg%d' % i, 'x%d' % i, + 'return NULL') + prnt() + # + prnt(' Py_BEGIN_ALLOW_THREADS') + prnt(' _cffi_restore_errno();') + prnt(' { %s%s(%s); }' % ( + result_code, name, + ', '.join(['x%d' % i for i in range(len(tp.args))]))) + prnt(' _cffi_save_errno();') + prnt(' Py_END_ALLOW_THREADS') + prnt() + # + prnt(' (void)self; /* unused */') + if numargs == 0: + prnt(' (void)noarg; /* unused */') + if result_code: + prnt(' pyresult = %s;' % + self._convert_expr_from_c(tp.result, 'result', 'result type')) + for freeline in freelines: + prnt(' ' + freeline) + prnt(' return pyresult;') + else: + for freeline in freelines: + prnt(' ' + freeline) + prnt(' Py_INCREF(Py_None);') + prnt(' return Py_None;') + prnt('}') + prnt() + + def _generate_cpy_function_method(self, tp, name): + if tp.ellipsis: + return + numargs = len(tp.args) + if numargs == 0: + meth = 'METH_NOARGS' + elif numargs == 1: + meth = 'METH_O' + else: + meth = 'METH_VARARGS' + self._prnt(' {"%s", _cffi_f_%s, %s, NULL},' % (name, name, meth)) + + _loading_cpy_function = _loaded_noop + + def _loaded_cpy_function(self, tp, name, module, library): + if tp.ellipsis: + return + func = getattr(module, name) + setattr(library, name, func) + self._types_of_builtin_functions[func] = tp + + # ---------- + # named structs + + _generate_cpy_struct_collecttype = _generate_nothing + def _generate_cpy_struct_decl(self, tp, name): + assert name == tp.name + self._generate_struct_or_union_decl(tp, 'struct', name) + def _generate_cpy_struct_method(self, tp, name): + self._generate_struct_or_union_method(tp, 'struct', name) + def _loading_cpy_struct(self, tp, name, module): + self._loading_struct_or_union(tp, 'struct', name, module) + def _loaded_cpy_struct(self, tp, name, module, **kwds): + self._loaded_struct_or_union(tp) + + _generate_cpy_union_collecttype = _generate_nothing + def _generate_cpy_union_decl(self, tp, name): + assert name == tp.name + self._generate_struct_or_union_decl(tp, 'union', name) + def _generate_cpy_union_method(self, tp, name): + self._generate_struct_or_union_method(tp, 'union', name) + def _loading_cpy_union(self, tp, name, module): + self._loading_struct_or_union(tp, 'union', name, module) + def _loaded_cpy_union(self, tp, name, module, **kwds): + self._loaded_struct_or_union(tp) + + def _generate_struct_or_union_decl(self, tp, prefix, name): + if tp.fldnames is None: + return # nothing to do with opaque structs + checkfuncname = '_cffi_check_%s_%s' % (prefix, name) + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + cname = ('%s %s' % (prefix, name)).strip() + # + prnt = self._prnt + prnt('static void %s(%s *p)' % (checkfuncname, cname)) + prnt('{') + prnt(' /* only to generate compile-time warnings or errors */') + prnt(' (void)p;') + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if (isinstance(ftype, model.PrimitiveType) + and ftype.is_integer_type()) or fbitsize >= 0: + # accept all integers, but complain on float or double + prnt(' (void)((p->%s) << 1);' % fname) + else: + # only accept exactly the type declared. + try: + prnt(' { %s = &p->%s; (void)tmp; }' % ( + ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), + fname)) + except VerificationError as e: + prnt(' /* %s */' % str(e)) # cannot verify it, ignore + prnt('}') + prnt('static PyObject *') + prnt('%s(PyObject *self, PyObject *noarg)' % (layoutfuncname,)) + prnt('{') + prnt(' struct _cffi_aligncheck { char x; %s y; };' % cname) + prnt(' static Py_ssize_t nums[] = {') + prnt(' sizeof(%s),' % cname) + prnt(' offsetof(struct _cffi_aligncheck, y),') + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if fbitsize >= 0: + continue # xxx ignore fbitsize for now + prnt(' offsetof(%s, %s),' % (cname, fname)) + if isinstance(ftype, model.ArrayType) and ftype.length is None: + prnt(' 0, /* %s */' % ftype._get_c_name()) + else: + prnt(' sizeof(((%s *)0)->%s),' % (cname, fname)) + prnt(' -1') + prnt(' };') + prnt(' (void)self; /* unused */') + prnt(' (void)noarg; /* unused */') + prnt(' return _cffi_get_struct_layout(nums);') + prnt(' /* the next line is not executed, but compiled */') + prnt(' %s(0);' % (checkfuncname,)) + prnt('}') + prnt() + + def _generate_struct_or_union_method(self, tp, prefix, name): + if tp.fldnames is None: + return # nothing to do with opaque structs + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + self._prnt(' {"%s", %s, METH_NOARGS, NULL},' % (layoutfuncname, + layoutfuncname)) + + def _loading_struct_or_union(self, tp, prefix, name, module): + if tp.fldnames is None: + return # nothing to do with opaque structs + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + # + function = getattr(module, layoutfuncname) + layout = function() + if isinstance(tp, model.StructOrUnion) and tp.partial: + # use the function()'s sizes and offsets to guide the + # layout of the struct + totalsize = layout[0] + totalalignment = layout[1] + fieldofs = layout[2::2] + fieldsize = layout[3::2] + tp.force_flatten() + assert len(fieldofs) == len(fieldsize) == len(tp.fldnames) + tp.fixedlayout = fieldofs, fieldsize, totalsize, totalalignment + else: + cname = ('%s %s' % (prefix, name)).strip() + self._struct_pending_verification[tp] = layout, cname + + def _loaded_struct_or_union(self, tp): + if tp.fldnames is None: + return # nothing to do with opaque structs + self.ffi._get_cached_btype(tp) # force 'fixedlayout' to be considered + + if tp in self._struct_pending_verification: + # check that the layout sizes and offsets match the real ones + def check(realvalue, expectedvalue, msg): + if realvalue != expectedvalue: + raise VerificationError( + "%s (we have %d, but C compiler says %d)" + % (msg, expectedvalue, realvalue)) + ffi = self.ffi + BStruct = ffi._get_cached_btype(tp) + layout, cname = self._struct_pending_verification.pop(tp) + check(layout[0], ffi.sizeof(BStruct), "wrong total size") + check(layout[1], ffi.alignof(BStruct), "wrong total alignment") + i = 2 + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if fbitsize >= 0: + continue # xxx ignore fbitsize for now + check(layout[i], ffi.offsetof(BStruct, fname), + "wrong offset for field %r" % (fname,)) + if layout[i+1] != 0: + BField = ffi._get_cached_btype(ftype) + check(layout[i+1], ffi.sizeof(BField), + "wrong size for field %r" % (fname,)) + i += 2 + assert i == len(layout) + + # ---------- + # 'anonymous' declarations. These are produced for anonymous structs + # or unions; the 'name' is obtained by a typedef. + + _generate_cpy_anonymous_collecttype = _generate_nothing + + def _generate_cpy_anonymous_decl(self, tp, name): + if isinstance(tp, model.EnumType): + self._generate_cpy_enum_decl(tp, name, '') + else: + self._generate_struct_or_union_decl(tp, '', name) + + def _generate_cpy_anonymous_method(self, tp, name): + if not isinstance(tp, model.EnumType): + self._generate_struct_or_union_method(tp, '', name) + + def _loading_cpy_anonymous(self, tp, name, module): + if isinstance(tp, model.EnumType): + self._loading_cpy_enum(tp, name, module) + else: + self._loading_struct_or_union(tp, '', name, module) + + def _loaded_cpy_anonymous(self, tp, name, module, **kwds): + if isinstance(tp, model.EnumType): + self._loaded_cpy_enum(tp, name, module, **kwds) + else: + self._loaded_struct_or_union(tp) + + # ---------- + # constants, likely declared with '#define' + + def _generate_cpy_const(self, is_int, name, tp=None, category='const', + vartp=None, delayed=True, size_too=False, + check_value=None): + prnt = self._prnt + funcname = '_cffi_%s_%s' % (category, name) + prnt('static int %s(PyObject *lib)' % funcname) + prnt('{') + prnt(' PyObject *o;') + prnt(' int res;') + if not is_int: + prnt(' %s;' % (vartp or tp).get_c_name(' i', name)) + else: + assert category == 'const' + # + if check_value is not None: + self._check_int_constant_value(name, check_value) + # + if not is_int: + if category == 'var': + realexpr = '&' + name + else: + realexpr = name + prnt(' i = (%s);' % (realexpr,)) + prnt(' o = %s;' % (self._convert_expr_from_c(tp, 'i', + 'variable type'),)) + assert delayed + else: + prnt(' o = _cffi_from_c_int_const(%s);' % name) + prnt(' if (o == NULL)') + prnt(' return -1;') + if size_too: + prnt(' {') + prnt(' PyObject *o1 = o;') + prnt(' o = Py_BuildValue("On", o1, (Py_ssize_t)sizeof(%s));' + % (name,)) + prnt(' Py_DECREF(o1);') + prnt(' if (o == NULL)') + prnt(' return -1;') + prnt(' }') + prnt(' res = PyObject_SetAttrString(lib, "%s", o);' % name) + prnt(' Py_DECREF(o);') + prnt(' if (res < 0)') + prnt(' return -1;') + prnt(' return %s;' % self._chained_list_constants[delayed]) + self._chained_list_constants[delayed] = funcname + '(lib)' + prnt('}') + prnt() + + def _generate_cpy_constant_collecttype(self, tp, name): + is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() + if not is_int: + self._do_collect_type(tp) + + def _generate_cpy_constant_decl(self, tp, name): + is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() + self._generate_cpy_const(is_int, name, tp) + + _generate_cpy_constant_method = _generate_nothing + _loading_cpy_constant = _loaded_noop + _loaded_cpy_constant = _loaded_noop + + # ---------- + # enums + + def _check_int_constant_value(self, name, value, err_prefix=''): + prnt = self._prnt + if value <= 0: + prnt(' if ((%s) > 0 || (long)(%s) != %dL) {' % ( + name, name, value)) + else: + prnt(' if ((%s) <= 0 || (unsigned long)(%s) != %dUL) {' % ( + name, name, value)) + prnt(' char buf[64];') + prnt(' if ((%s) <= 0)' % name) + prnt(' snprintf(buf, 63, "%%ld", (long)(%s));' % name) + prnt(' else') + prnt(' snprintf(buf, 63, "%%lu", (unsigned long)(%s));' % + name) + prnt(' PyErr_Format(_cffi_VerificationError,') + prnt(' "%s%s has the real value %s, not %s",') + prnt(' "%s", "%s", buf, "%d");' % ( + err_prefix, name, value)) + prnt(' return -1;') + prnt(' }') + + def _enum_funcname(self, prefix, name): + # "$enum_$1" => "___D_enum____D_1" + name = name.replace('$', '___D_') + return '_cffi_e_%s_%s' % (prefix, name) + + def _generate_cpy_enum_decl(self, tp, name, prefix='enum'): + if tp.partial: + for enumerator in tp.enumerators: + self._generate_cpy_const(True, enumerator, delayed=False) + return + # + funcname = self._enum_funcname(prefix, name) + prnt = self._prnt + prnt('static int %s(PyObject *lib)' % funcname) + prnt('{') + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + self._check_int_constant_value(enumerator, enumvalue, + "enum %s: " % name) + prnt(' return %s;' % self._chained_list_constants[True]) + self._chained_list_constants[True] = funcname + '(lib)' + prnt('}') + prnt() + + _generate_cpy_enum_collecttype = _generate_nothing + _generate_cpy_enum_method = _generate_nothing + + def _loading_cpy_enum(self, tp, name, module): + if tp.partial: + enumvalues = [getattr(module, enumerator) + for enumerator in tp.enumerators] + tp.enumvalues = tuple(enumvalues) + tp.partial_resolved = True + + def _loaded_cpy_enum(self, tp, name, module, library): + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + setattr(library, enumerator, enumvalue) + + # ---------- + # macros: for now only for integers + + def _generate_cpy_macro_decl(self, tp, name): + if tp == '...': + check_value = None + else: + check_value = tp # an integer + self._generate_cpy_const(True, name, check_value=check_value) + + _generate_cpy_macro_collecttype = _generate_nothing + _generate_cpy_macro_method = _generate_nothing + _loading_cpy_macro = _loaded_noop + _loaded_cpy_macro = _loaded_noop + + # ---------- + # global variables + + def _generate_cpy_variable_collecttype(self, tp, name): + if isinstance(tp, model.ArrayType): + tp_ptr = model.PointerType(tp.item) + else: + tp_ptr = model.PointerType(tp) + self._do_collect_type(tp_ptr) + + def _generate_cpy_variable_decl(self, tp, name): + if isinstance(tp, model.ArrayType): + tp_ptr = model.PointerType(tp.item) + self._generate_cpy_const(False, name, tp, vartp=tp_ptr, + size_too = tp.length_is_unknown()) + else: + tp_ptr = model.PointerType(tp) + self._generate_cpy_const(False, name, tp_ptr, category='var') + + _generate_cpy_variable_method = _generate_nothing + _loading_cpy_variable = _loaded_noop + + def _loaded_cpy_variable(self, tp, name, module, library): + value = getattr(library, name) + if isinstance(tp, model.ArrayType): # int a[5] is "constant" in the + # sense that "a=..." is forbidden + if tp.length_is_unknown(): + assert isinstance(value, tuple) + (value, size) = value + BItemType = self.ffi._get_cached_btype(tp.item) + length, rest = divmod(size, self.ffi.sizeof(BItemType)) + if rest != 0: + raise VerificationError( + "bad size: %r does not seem to be an array of %s" % + (name, tp.item)) + tp = tp.resolve_length(length) + # 'value' is a which we have to replace with + # a if the N is actually known + if tp.length is not None: + BArray = self.ffi._get_cached_btype(tp) + value = self.ffi.cast(BArray, value) + setattr(library, name, value) + return + # remove ptr= from the library instance, and replace + # it by a property on the class, which reads/writes into ptr[0]. + ptr = value + delattr(library, name) + def getter(library): + return ptr[0] + def setter(library, value): + ptr[0] = value + setattr(type(library), name, property(getter, setter)) + type(library)._cffi_dir.append(name) + + # ---------- + + def _generate_setup_custom(self): + prnt = self._prnt + prnt('static int _cffi_setup_custom(PyObject *lib)') + prnt('{') + prnt(' return %s;' % self._chained_list_constants[True]) + prnt('}') + +cffimod_header = r''' +#include +#include + +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py + and cffi/_cffi_include.h */ +#if defined(_MSC_VER) +# include /* for alloca() */ +# if _MSC_VER < 1600 /* MSVC < 2010 */ + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int_least8_t; + typedef __int16 int_least16_t; + typedef __int32 int_least32_t; + typedef __int64 int_least64_t; + typedef unsigned __int8 uint_least8_t; + typedef unsigned __int16 uint_least16_t; + typedef unsigned __int32 uint_least32_t; + typedef unsigned __int64 uint_least64_t; + typedef __int8 int_fast8_t; + typedef __int16 int_fast16_t; + typedef __int32 int_fast32_t; + typedef __int64 int_fast64_t; + typedef unsigned __int8 uint_fast8_t; + typedef unsigned __int16 uint_fast16_t; + typedef unsigned __int32 uint_fast32_t; + typedef unsigned __int64 uint_fast64_t; + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; +# else +# include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ +# ifndef __cplusplus + typedef unsigned char _Bool; +# endif +# endif +# define _cffi_float_complex_t _Fcomplex /* include for it */ +# define _cffi_double_complex_t _Dcomplex /* include for it */ +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) +# include +# endif +# define _cffi_float_complex_t float _Complex +# define _cffi_double_complex_t double _Complex +#endif + +#if PY_MAJOR_VERSION < 3 +# undef PyCapsule_CheckExact +# undef PyCapsule_GetPointer +# define PyCapsule_CheckExact(capsule) (PyCObject_Check(capsule)) +# define PyCapsule_GetPointer(capsule, name) \ + (PyCObject_AsVoidPtr(capsule)) +#endif + +#if PY_MAJOR_VERSION >= 3 +# define PyInt_FromLong PyLong_FromLong +#endif + +#define _cffi_from_c_double PyFloat_FromDouble +#define _cffi_from_c_float PyFloat_FromDouble +#define _cffi_from_c_long PyInt_FromLong +#define _cffi_from_c_ulong PyLong_FromUnsignedLong +#define _cffi_from_c_longlong PyLong_FromLongLong +#define _cffi_from_c_ulonglong PyLong_FromUnsignedLongLong +#define _cffi_from_c__Bool PyBool_FromLong + +#define _cffi_to_c_double PyFloat_AsDouble +#define _cffi_to_c_float PyFloat_AsDouble + +#define _cffi_from_c_int_const(x) \ + (((x) > 0) ? \ + ((unsigned long long)(x) <= (unsigned long long)LONG_MAX) ? \ + PyInt_FromLong((long)(x)) : \ + PyLong_FromUnsignedLongLong((unsigned long long)(x)) : \ + ((long long)(x) >= (long long)LONG_MIN) ? \ + PyInt_FromLong((long)(x)) : \ + PyLong_FromLongLong((long long)(x))) + +#define _cffi_from_c_int(x, type) \ + (((type)-1) > 0 ? /* unsigned */ \ + (sizeof(type) < sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + sizeof(type) == sizeof(long) ? \ + PyLong_FromUnsignedLong((unsigned long)x) : \ + PyLong_FromUnsignedLongLong((unsigned long long)x)) : \ + (sizeof(type) <= sizeof(long) ? \ + PyInt_FromLong((long)x) : \ + PyLong_FromLongLong((long long)x))) + +#define _cffi_to_c_int(o, type) \ + ((type)( \ + sizeof(type) == 1 ? (((type)-1) > 0 ? (type)_cffi_to_c_u8(o) \ + : (type)_cffi_to_c_i8(o)) : \ + sizeof(type) == 2 ? (((type)-1) > 0 ? (type)_cffi_to_c_u16(o) \ + : (type)_cffi_to_c_i16(o)) : \ + sizeof(type) == 4 ? (((type)-1) > 0 ? (type)_cffi_to_c_u32(o) \ + : (type)_cffi_to_c_i32(o)) : \ + sizeof(type) == 8 ? (((type)-1) > 0 ? (type)_cffi_to_c_u64(o) \ + : (type)_cffi_to_c_i64(o)) : \ + (Py_FatalError("unsupported size for type " #type), (type)0))) + +#define _cffi_to_c_i8 \ + ((int(*)(PyObject *))_cffi_exports[1]) +#define _cffi_to_c_u8 \ + ((int(*)(PyObject *))_cffi_exports[2]) +#define _cffi_to_c_i16 \ + ((int(*)(PyObject *))_cffi_exports[3]) +#define _cffi_to_c_u16 \ + ((int(*)(PyObject *))_cffi_exports[4]) +#define _cffi_to_c_i32 \ + ((int(*)(PyObject *))_cffi_exports[5]) +#define _cffi_to_c_u32 \ + ((unsigned int(*)(PyObject *))_cffi_exports[6]) +#define _cffi_to_c_i64 \ + ((long long(*)(PyObject *))_cffi_exports[7]) +#define _cffi_to_c_u64 \ + ((unsigned long long(*)(PyObject *))_cffi_exports[8]) +#define _cffi_to_c_char \ + ((int(*)(PyObject *))_cffi_exports[9]) +#define _cffi_from_c_pointer \ + ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[10]) +#define _cffi_to_c_pointer \ + ((char *(*)(PyObject *, CTypeDescrObject *))_cffi_exports[11]) +#define _cffi_get_struct_layout \ + ((PyObject *(*)(Py_ssize_t[]))_cffi_exports[12]) +#define _cffi_restore_errno \ + ((void(*)(void))_cffi_exports[13]) +#define _cffi_save_errno \ + ((void(*)(void))_cffi_exports[14]) +#define _cffi_from_c_char \ + ((PyObject *(*)(char))_cffi_exports[15]) +#define _cffi_from_c_deref \ + ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[16]) +#define _cffi_to_c \ + ((int(*)(char *, CTypeDescrObject *, PyObject *))_cffi_exports[17]) +#define _cffi_from_c_struct \ + ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[18]) +#define _cffi_to_c_wchar_t \ + ((wchar_t(*)(PyObject *))_cffi_exports[19]) +#define _cffi_from_c_wchar_t \ + ((PyObject *(*)(wchar_t))_cffi_exports[20]) +#define _cffi_to_c_long_double \ + ((long double(*)(PyObject *))_cffi_exports[21]) +#define _cffi_to_c__Bool \ + ((_Bool(*)(PyObject *))_cffi_exports[22]) +#define _cffi_prepare_pointer_call_argument \ + ((Py_ssize_t(*)(CTypeDescrObject *, PyObject *, char **))_cffi_exports[23]) +#define _cffi_convert_array_from_object \ + ((int(*)(char *, CTypeDescrObject *, PyObject *))_cffi_exports[24]) +#define _CFFI_NUM_EXPORTS 25 + +typedef struct _ctypedescr CTypeDescrObject; + +static void *_cffi_exports[_CFFI_NUM_EXPORTS]; +static PyObject *_cffi_types, *_cffi_VerificationError; + +static int _cffi_setup_custom(PyObject *lib); /* forward */ + +static PyObject *_cffi_setup(PyObject *self, PyObject *args) +{ + PyObject *library; + int was_alive = (_cffi_types != NULL); + (void)self; /* unused */ + if (!PyArg_ParseTuple(args, "OOO", &_cffi_types, &_cffi_VerificationError, + &library)) + return NULL; + Py_INCREF(_cffi_types); + Py_INCREF(_cffi_VerificationError); + if (_cffi_setup_custom(library) < 0) + return NULL; + return PyBool_FromLong(was_alive); +} + +union _cffi_union_alignment_u { + unsigned char m_char; + unsigned short m_short; + unsigned int m_int; + unsigned long m_long; + unsigned long long m_longlong; + float m_float; + double m_double; + long double m_longdouble; +}; + +struct _cffi_freeme_s { + struct _cffi_freeme_s *next; + union _cffi_union_alignment_u alignment; +}; + +#ifdef __GNUC__ + __attribute__((unused)) +#endif +static int _cffi_convert_array_argument(CTypeDescrObject *ctptr, PyObject *arg, + char **output_data, Py_ssize_t datasize, + struct _cffi_freeme_s **freeme) +{ + char *p; + if (datasize < 0) + return -1; + + p = *output_data; + if (p == NULL) { + struct _cffi_freeme_s *fp = (struct _cffi_freeme_s *)PyObject_Malloc( + offsetof(struct _cffi_freeme_s, alignment) + (size_t)datasize); + if (fp == NULL) + return -1; + fp->next = *freeme; + *freeme = fp; + p = *output_data = (char *)&fp->alignment; + } + memset((void *)p, 0, (size_t)datasize); + return _cffi_convert_array_from_object(p, ctptr, arg); +} + +#ifdef __GNUC__ + __attribute__((unused)) +#endif +static void _cffi_free_array_arguments(struct _cffi_freeme_s *freeme) +{ + do { + void *p = (void *)freeme; + freeme = freeme->next; + PyObject_Free(p); + } while (freeme != NULL); +} + +static int _cffi_init(void) +{ + PyObject *module, *c_api_object = NULL; + + module = PyImport_ImportModule("_cffi_backend"); + if (module == NULL) + goto failure; + + c_api_object = PyObject_GetAttrString(module, "_C_API"); + if (c_api_object == NULL) + goto failure; + if (!PyCapsule_CheckExact(c_api_object)) { + PyErr_SetNone(PyExc_ImportError); + goto failure; + } + memcpy(_cffi_exports, PyCapsule_GetPointer(c_api_object, "cffi"), + _CFFI_NUM_EXPORTS * sizeof(void *)); + + Py_DECREF(module); + Py_DECREF(c_api_object); + return 0; + + failure: + Py_XDECREF(module); + Py_XDECREF(c_api_object); + return -1; +} + +#define _cffi_type(num) ((CTypeDescrObject *)PyList_GET_ITEM(_cffi_types, num)) + +/**********/ +''' diff --git a/venv/lib/python3.12/site-packages/cffi/vengine_gen.py b/venv/lib/python3.12/site-packages/cffi/vengine_gen.py new file mode 100644 index 0000000..bffc821 --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/vengine_gen.py @@ -0,0 +1,679 @@ +# +# DEPRECATED: implementation for ffi.verify() +# +import sys, os +import types + +from . import model +from .error import VerificationError + + +class VGenericEngine(object): + _class_key = 'g' + _gen_python_module = False + + def __init__(self, verifier): + self.verifier = verifier + self.ffi = verifier.ffi + self.export_symbols = [] + self._struct_pending_verification = {} + + def patch_extension_kwds(self, kwds): + # add 'export_symbols' to the dictionary. Note that we add the + # list before filling it. When we fill it, it will thus also show + # up in kwds['export_symbols']. + kwds.setdefault('export_symbols', self.export_symbols) + + def find_module(self, module_name, path, so_suffixes): + for so_suffix in so_suffixes: + basename = module_name + so_suffix + if path is None: + path = sys.path + for dirname in path: + filename = os.path.join(dirname, basename) + if os.path.isfile(filename): + return filename + + def collect_types(self): + pass # not needed in the generic engine + + def _prnt(self, what=''): + self._f.write(what + '\n') + + def write_source_to_f(self): + prnt = self._prnt + # first paste some standard set of lines that are mostly '#include' + prnt(cffimod_header) + # then paste the C source given by the user, verbatim. + prnt(self.verifier.preamble) + # + # call generate_gen_xxx_decl(), for every xxx found from + # ffi._parser._declarations. This generates all the functions. + self._generate('decl') + # + # on Windows, distutils insists on putting init_cffi_xyz in + # 'export_symbols', so instead of fighting it, just give up and + # give it one + if sys.platform == 'win32': + if sys.version_info >= (3,): + prefix = 'PyInit_' + else: + prefix = 'init' + modname = self.verifier.get_module_name() + prnt("void %s%s(void) { }\n" % (prefix, modname)) + + def load_library(self, flags=0): + # import it with the CFFI backend + backend = self.ffi._backend + # needs to make a path that contains '/', on Posix + filename = os.path.join(os.curdir, self.verifier.modulefilename) + module = backend.load_library(filename, flags) + # + # call loading_gen_struct() to get the struct layout inferred by + # the C compiler + self._load(module, 'loading') + + # build the FFILibrary class and instance, this is a module subclass + # because modules are expected to have usually-constant-attributes and + # in PyPy this means the JIT is able to treat attributes as constant, + # which we want. + class FFILibrary(types.ModuleType): + _cffi_generic_module = module + _cffi_ffi = self.ffi + _cffi_dir = [] + def __dir__(self): + return FFILibrary._cffi_dir + library = FFILibrary("") + # + # finally, call the loaded_gen_xxx() functions. This will set + # up the 'library' object. + self._load(module, 'loaded', library=library) + return library + + def _get_declarations(self): + lst = [(key, tp) for (key, (tp, qual)) in + self.ffi._parser._declarations.items()] + lst.sort() + return lst + + def _generate(self, step_name): + for name, tp in self._get_declarations(): + kind, realname = name.split(' ', 1) + try: + method = getattr(self, '_generate_gen_%s_%s' % (kind, + step_name)) + except AttributeError: + raise VerificationError( + "not implemented in verify(): %r" % name) + try: + method(tp, realname) + except Exception as e: + model.attach_exception_info(e, name) + raise + + def _load(self, module, step_name, **kwds): + for name, tp in self._get_declarations(): + kind, realname = name.split(' ', 1) + method = getattr(self, '_%s_gen_%s' % (step_name, kind)) + try: + method(tp, realname, module, **kwds) + except Exception as e: + model.attach_exception_info(e, name) + raise + + def _generate_nothing(self, tp, name): + pass + + def _loaded_noop(self, tp, name, module, **kwds): + pass + + # ---------- + # typedefs: generates no code so far + + _generate_gen_typedef_decl = _generate_nothing + _loading_gen_typedef = _loaded_noop + _loaded_gen_typedef = _loaded_noop + + # ---------- + # function declarations + + def _generate_gen_function_decl(self, tp, name): + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + # cannot support vararg functions better than this: check for its + # exact type (including the fixed arguments), and build it as a + # constant function pointer (no _cffi_f_%s wrapper) + self._generate_gen_const(False, name, tp) + return + prnt = self._prnt + numargs = len(tp.args) + argnames = [] + for i, type in enumerate(tp.args): + indirection = '' + if isinstance(type, model.StructOrUnion): + indirection = '*' + argnames.append('%sx%d' % (indirection, i)) + context = 'argument of %s' % name + arglist = [type.get_c_name(' %s' % arg, context) + for type, arg in zip(tp.args, argnames)] + tpresult = tp.result + if isinstance(tpresult, model.StructOrUnion): + arglist.insert(0, tpresult.get_c_name(' *r', context)) + tpresult = model.void_type + arglist = ', '.join(arglist) or 'void' + wrappername = '_cffi_f_%s' % name + self.export_symbols.append(wrappername) + if tp.abi: + abi = tp.abi + ' ' + else: + abi = '' + funcdecl = ' %s%s(%s)' % (abi, wrappername, arglist) + context = 'result of %s' % name + prnt(tpresult.get_c_name(funcdecl, context)) + prnt('{') + # + if isinstance(tp.result, model.StructOrUnion): + result_code = '*r = ' + elif not isinstance(tp.result, model.VoidType): + result_code = 'return ' + else: + result_code = '' + prnt(' %s%s(%s);' % (result_code, name, ', '.join(argnames))) + prnt('}') + prnt() + + _loading_gen_function = _loaded_noop + + def _loaded_gen_function(self, tp, name, module, library): + assert isinstance(tp, model.FunctionPtrType) + if tp.ellipsis: + newfunction = self._load_constant(False, tp, name, module) + else: + indirections = [] + base_tp = tp + if (any(isinstance(typ, model.StructOrUnion) for typ in tp.args) + or isinstance(tp.result, model.StructOrUnion)): + indirect_args = [] + for i, typ in enumerate(tp.args): + if isinstance(typ, model.StructOrUnion): + typ = model.PointerType(typ) + indirections.append((i, typ)) + indirect_args.append(typ) + indirect_result = tp.result + if isinstance(indirect_result, model.StructOrUnion): + if indirect_result.fldtypes is None: + raise TypeError("'%s' is used as result type, " + "but is opaque" % ( + indirect_result._get_c_name(),)) + indirect_result = model.PointerType(indirect_result) + indirect_args.insert(0, indirect_result) + indirections.insert(0, ("result", indirect_result)) + indirect_result = model.void_type + tp = model.FunctionPtrType(tuple(indirect_args), + indirect_result, tp.ellipsis) + BFunc = self.ffi._get_cached_btype(tp) + wrappername = '_cffi_f_%s' % name + newfunction = module.load_function(BFunc, wrappername) + for i, typ in indirections: + newfunction = self._make_struct_wrapper(newfunction, i, typ, + base_tp) + setattr(library, name, newfunction) + type(library)._cffi_dir.append(name) + + def _make_struct_wrapper(self, oldfunc, i, tp, base_tp): + backend = self.ffi._backend + BType = self.ffi._get_cached_btype(tp) + if i == "result": + ffi = self.ffi + def newfunc(*args): + res = ffi.new(BType) + oldfunc(res, *args) + return res[0] + else: + def newfunc(*args): + args = args[:i] + (backend.newp(BType, args[i]),) + args[i+1:] + return oldfunc(*args) + newfunc._cffi_base_type = base_tp + return newfunc + + # ---------- + # named structs + + def _generate_gen_struct_decl(self, tp, name): + assert name == tp.name + self._generate_struct_or_union_decl(tp, 'struct', name) + + def _loading_gen_struct(self, tp, name, module): + self._loading_struct_or_union(tp, 'struct', name, module) + + def _loaded_gen_struct(self, tp, name, module, **kwds): + self._loaded_struct_or_union(tp) + + def _generate_gen_union_decl(self, tp, name): + assert name == tp.name + self._generate_struct_or_union_decl(tp, 'union', name) + + def _loading_gen_union(self, tp, name, module): + self._loading_struct_or_union(tp, 'union', name, module) + + def _loaded_gen_union(self, tp, name, module, **kwds): + self._loaded_struct_or_union(tp) + + def _generate_struct_or_union_decl(self, tp, prefix, name): + if tp.fldnames is None: + return # nothing to do with opaque structs + checkfuncname = '_cffi_check_%s_%s' % (prefix, name) + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + cname = ('%s %s' % (prefix, name)).strip() + # + prnt = self._prnt + prnt('static void %s(%s *p)' % (checkfuncname, cname)) + prnt('{') + prnt(' /* only to generate compile-time warnings or errors */') + prnt(' (void)p;') + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if (isinstance(ftype, model.PrimitiveType) + and ftype.is_integer_type()) or fbitsize >= 0: + # accept all integers, but complain on float or double + prnt(' (void)((p->%s) << 1);' % fname) + else: + # only accept exactly the type declared. + try: + prnt(' { %s = &p->%s; (void)tmp; }' % ( + ftype.get_c_name('*tmp', 'field %r'%fname, quals=fqual), + fname)) + except VerificationError as e: + prnt(' /* %s */' % str(e)) # cannot verify it, ignore + prnt('}') + self.export_symbols.append(layoutfuncname) + prnt('intptr_t %s(intptr_t i)' % (layoutfuncname,)) + prnt('{') + prnt(' struct _cffi_aligncheck { char x; %s y; };' % cname) + prnt(' static intptr_t nums[] = {') + prnt(' sizeof(%s),' % cname) + prnt(' offsetof(struct _cffi_aligncheck, y),') + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if fbitsize >= 0: + continue # xxx ignore fbitsize for now + prnt(' offsetof(%s, %s),' % (cname, fname)) + if isinstance(ftype, model.ArrayType) and ftype.length is None: + prnt(' 0, /* %s */' % ftype._get_c_name()) + else: + prnt(' sizeof(((%s *)0)->%s),' % (cname, fname)) + prnt(' -1') + prnt(' };') + prnt(' return nums[i];') + prnt(' /* the next line is not executed, but compiled */') + prnt(' %s(0);' % (checkfuncname,)) + prnt('}') + prnt() + + def _loading_struct_or_union(self, tp, prefix, name, module): + if tp.fldnames is None: + return # nothing to do with opaque structs + layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) + # + BFunc = self.ffi._typeof_locked("intptr_t(*)(intptr_t)")[0] + function = module.load_function(BFunc, layoutfuncname) + layout = [] + num = 0 + while True: + x = function(num) + if x < 0: break + layout.append(x) + num += 1 + if isinstance(tp, model.StructOrUnion) and tp.partial: + # use the function()'s sizes and offsets to guide the + # layout of the struct + totalsize = layout[0] + totalalignment = layout[1] + fieldofs = layout[2::2] + fieldsize = layout[3::2] + tp.force_flatten() + assert len(fieldofs) == len(fieldsize) == len(tp.fldnames) + tp.fixedlayout = fieldofs, fieldsize, totalsize, totalalignment + else: + cname = ('%s %s' % (prefix, name)).strip() + self._struct_pending_verification[tp] = layout, cname + + def _loaded_struct_or_union(self, tp): + if tp.fldnames is None: + return # nothing to do with opaque structs + self.ffi._get_cached_btype(tp) # force 'fixedlayout' to be considered + + if tp in self._struct_pending_verification: + # check that the layout sizes and offsets match the real ones + def check(realvalue, expectedvalue, msg): + if realvalue != expectedvalue: + raise VerificationError( + "%s (we have %d, but C compiler says %d)" + % (msg, expectedvalue, realvalue)) + ffi = self.ffi + BStruct = ffi._get_cached_btype(tp) + layout, cname = self._struct_pending_verification.pop(tp) + check(layout[0], ffi.sizeof(BStruct), "wrong total size") + check(layout[1], ffi.alignof(BStruct), "wrong total alignment") + i = 2 + for fname, ftype, fbitsize, fqual in tp.enumfields(): + if fbitsize >= 0: + continue # xxx ignore fbitsize for now + check(layout[i], ffi.offsetof(BStruct, fname), + "wrong offset for field %r" % (fname,)) + if layout[i+1] != 0: + BField = ffi._get_cached_btype(ftype) + check(layout[i+1], ffi.sizeof(BField), + "wrong size for field %r" % (fname,)) + i += 2 + assert i == len(layout) + + # ---------- + # 'anonymous' declarations. These are produced for anonymous structs + # or unions; the 'name' is obtained by a typedef. + + def _generate_gen_anonymous_decl(self, tp, name): + if isinstance(tp, model.EnumType): + self._generate_gen_enum_decl(tp, name, '') + else: + self._generate_struct_or_union_decl(tp, '', name) + + def _loading_gen_anonymous(self, tp, name, module): + if isinstance(tp, model.EnumType): + self._loading_gen_enum(tp, name, module, '') + else: + self._loading_struct_or_union(tp, '', name, module) + + def _loaded_gen_anonymous(self, tp, name, module, **kwds): + if isinstance(tp, model.EnumType): + self._loaded_gen_enum(tp, name, module, **kwds) + else: + self._loaded_struct_or_union(tp) + + # ---------- + # constants, likely declared with '#define' + + def _generate_gen_const(self, is_int, name, tp=None, category='const', + check_value=None): + prnt = self._prnt + funcname = '_cffi_%s_%s' % (category, name) + self.export_symbols.append(funcname) + if check_value is not None: + assert is_int + assert category == 'const' + prnt('int %s(char *out_error)' % funcname) + prnt('{') + self._check_int_constant_value(name, check_value) + prnt(' return 0;') + prnt('}') + elif is_int: + assert category == 'const' + prnt('int %s(long long *out_value)' % funcname) + prnt('{') + prnt(' *out_value = (long long)(%s);' % (name,)) + prnt(' return (%s) <= 0;' % (name,)) + prnt('}') + else: + assert tp is not None + assert check_value is None + if category == 'var': + ampersand = '&' + else: + ampersand = '' + extra = '' + if category == 'const' and isinstance(tp, model.StructOrUnion): + extra = 'const *' + ampersand = '&' + prnt(tp.get_c_name(' %s%s(void)' % (extra, funcname), name)) + prnt('{') + prnt(' return (%s%s);' % (ampersand, name)) + prnt('}') + prnt() + + def _generate_gen_constant_decl(self, tp, name): + is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() + self._generate_gen_const(is_int, name, tp) + + _loading_gen_constant = _loaded_noop + + def _load_constant(self, is_int, tp, name, module, check_value=None): + funcname = '_cffi_const_%s' % name + if check_value is not None: + assert is_int + self._load_known_int_constant(module, funcname) + value = check_value + elif is_int: + BType = self.ffi._typeof_locked("long long*")[0] + BFunc = self.ffi._typeof_locked("int(*)(long long*)")[0] + function = module.load_function(BFunc, funcname) + p = self.ffi.new(BType) + negative = function(p) + value = int(p[0]) + if value < 0 and not negative: + BLongLong = self.ffi._typeof_locked("long long")[0] + value += (1 << (8*self.ffi.sizeof(BLongLong))) + else: + assert check_value is None + fntypeextra = '(*)(void)' + if isinstance(tp, model.StructOrUnion): + fntypeextra = '*' + fntypeextra + BFunc = self.ffi._typeof_locked(tp.get_c_name(fntypeextra, name))[0] + function = module.load_function(BFunc, funcname) + value = function() + if isinstance(tp, model.StructOrUnion): + value = value[0] + return value + + def _loaded_gen_constant(self, tp, name, module, library): + is_int = isinstance(tp, model.PrimitiveType) and tp.is_integer_type() + value = self._load_constant(is_int, tp, name, module) + setattr(library, name, value) + type(library)._cffi_dir.append(name) + + # ---------- + # enums + + def _check_int_constant_value(self, name, value): + prnt = self._prnt + if value <= 0: + prnt(' if ((%s) > 0 || (long)(%s) != %dL) {' % ( + name, name, value)) + else: + prnt(' if ((%s) <= 0 || (unsigned long)(%s) != %dUL) {' % ( + name, name, value)) + prnt(' char buf[64];') + prnt(' if ((%s) <= 0)' % name) + prnt(' sprintf(buf, "%%ld", (long)(%s));' % name) + prnt(' else') + prnt(' sprintf(buf, "%%lu", (unsigned long)(%s));' % + name) + prnt(' sprintf(out_error, "%s has the real value %s, not %s",') + prnt(' "%s", buf, "%d");' % (name[:100], value)) + prnt(' return -1;') + prnt(' }') + + def _load_known_int_constant(self, module, funcname): + BType = self.ffi._typeof_locked("char[]")[0] + BFunc = self.ffi._typeof_locked("int(*)(char*)")[0] + function = module.load_function(BFunc, funcname) + p = self.ffi.new(BType, 256) + if function(p) < 0: + error = self.ffi.string(p) + if sys.version_info >= (3,): + error = str(error, 'utf-8') + raise VerificationError(error) + + def _enum_funcname(self, prefix, name): + # "$enum_$1" => "___D_enum____D_1" + name = name.replace('$', '___D_') + return '_cffi_e_%s_%s' % (prefix, name) + + def _generate_gen_enum_decl(self, tp, name, prefix='enum'): + if tp.partial: + for enumerator in tp.enumerators: + self._generate_gen_const(True, enumerator) + return + # + funcname = self._enum_funcname(prefix, name) + self.export_symbols.append(funcname) + prnt = self._prnt + prnt('int %s(char *out_error)' % funcname) + prnt('{') + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + self._check_int_constant_value(enumerator, enumvalue) + prnt(' return 0;') + prnt('}') + prnt() + + def _loading_gen_enum(self, tp, name, module, prefix='enum'): + if tp.partial: + enumvalues = [self._load_constant(True, tp, enumerator, module) + for enumerator in tp.enumerators] + tp.enumvalues = tuple(enumvalues) + tp.partial_resolved = True + else: + funcname = self._enum_funcname(prefix, name) + self._load_known_int_constant(module, funcname) + + def _loaded_gen_enum(self, tp, name, module, library): + for enumerator, enumvalue in zip(tp.enumerators, tp.enumvalues): + setattr(library, enumerator, enumvalue) + type(library)._cffi_dir.append(enumerator) + + # ---------- + # macros: for now only for integers + + def _generate_gen_macro_decl(self, tp, name): + if tp == '...': + check_value = None + else: + check_value = tp # an integer + self._generate_gen_const(True, name, check_value=check_value) + + _loading_gen_macro = _loaded_noop + + def _loaded_gen_macro(self, tp, name, module, library): + if tp == '...': + check_value = None + else: + check_value = tp # an integer + value = self._load_constant(True, tp, name, module, + check_value=check_value) + setattr(library, name, value) + type(library)._cffi_dir.append(name) + + # ---------- + # global variables + + def _generate_gen_variable_decl(self, tp, name): + if isinstance(tp, model.ArrayType): + if tp.length_is_unknown(): + prnt = self._prnt + funcname = '_cffi_sizeof_%s' % (name,) + self.export_symbols.append(funcname) + prnt("size_t %s(void)" % funcname) + prnt("{") + prnt(" return sizeof(%s);" % (name,)) + prnt("}") + tp_ptr = model.PointerType(tp.item) + self._generate_gen_const(False, name, tp_ptr) + else: + tp_ptr = model.PointerType(tp) + self._generate_gen_const(False, name, tp_ptr, category='var') + + _loading_gen_variable = _loaded_noop + + def _loaded_gen_variable(self, tp, name, module, library): + if isinstance(tp, model.ArrayType): # int a[5] is "constant" in the + # sense that "a=..." is forbidden + if tp.length_is_unknown(): + funcname = '_cffi_sizeof_%s' % (name,) + BFunc = self.ffi._typeof_locked('size_t(*)(void)')[0] + function = module.load_function(BFunc, funcname) + size = function() + BItemType = self.ffi._get_cached_btype(tp.item) + length, rest = divmod(size, self.ffi.sizeof(BItemType)) + if rest != 0: + raise VerificationError( + "bad size: %r does not seem to be an array of %s" % + (name, tp.item)) + tp = tp.resolve_length(length) + tp_ptr = model.PointerType(tp.item) + value = self._load_constant(False, tp_ptr, name, module) + # 'value' is a which we have to replace with + # a if the N is actually known + if tp.length is not None: + BArray = self.ffi._get_cached_btype(tp) + value = self.ffi.cast(BArray, value) + setattr(library, name, value) + type(library)._cffi_dir.append(name) + return + # remove ptr= from the library instance, and replace + # it by a property on the class, which reads/writes into ptr[0]. + funcname = '_cffi_var_%s' % name + BFunc = self.ffi._typeof_locked(tp.get_c_name('*(*)(void)', name))[0] + function = module.load_function(BFunc, funcname) + ptr = function() + def getter(library): + return ptr[0] + def setter(library, value): + ptr[0] = value + setattr(type(library), name, property(getter, setter)) + type(library)._cffi_dir.append(name) + +cffimod_header = r''' +#include +#include +#include +#include +#include /* XXX for ssize_t on some platforms */ + +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py + and cffi/_cffi_include.h */ +#if defined(_MSC_VER) +# include /* for alloca() */ +# if _MSC_VER < 1600 /* MSVC < 2010 */ + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int_least8_t; + typedef __int16 int_least16_t; + typedef __int32 int_least32_t; + typedef __int64 int_least64_t; + typedef unsigned __int8 uint_least8_t; + typedef unsigned __int16 uint_least16_t; + typedef unsigned __int32 uint_least32_t; + typedef unsigned __int64 uint_least64_t; + typedef __int8 int_fast8_t; + typedef __int16 int_fast16_t; + typedef __int32 int_fast32_t; + typedef __int64 int_fast64_t; + typedef unsigned __int8 uint_fast8_t; + typedef unsigned __int16 uint_fast16_t; + typedef unsigned __int32 uint_fast32_t; + typedef unsigned __int64 uint_fast64_t; + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; +# else +# include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ +# ifndef __cplusplus + typedef unsigned char _Bool; +# endif +# endif +# define _cffi_float_complex_t _Fcomplex /* include for it */ +# define _cffi_double_complex_t _Dcomplex /* include for it */ +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) +# include +# endif +# define _cffi_float_complex_t float _Complex +# define _cffi_double_complex_t double _Complex +#endif +''' diff --git a/venv/lib/python3.12/site-packages/cffi/verifier.py b/venv/lib/python3.12/site-packages/cffi/verifier.py new file mode 100644 index 0000000..e392a2b --- /dev/null +++ b/venv/lib/python3.12/site-packages/cffi/verifier.py @@ -0,0 +1,306 @@ +# +# DEPRECATED: implementation for ffi.verify() +# +import sys, os, binascii, shutil, io +from . import __version_verifier_modules__ +from . import ffiplatform +from .error import VerificationError + +if sys.version_info >= (3, 3): + import importlib.machinery + def _extension_suffixes(): + return importlib.machinery.EXTENSION_SUFFIXES[:] +else: + import imp + def _extension_suffixes(): + return [suffix for suffix, _, type in imp.get_suffixes() + if type == imp.C_EXTENSION] + + +if sys.version_info >= (3,): + NativeIO = io.StringIO +else: + class NativeIO(io.BytesIO): + def write(self, s): + if isinstance(s, unicode): + s = s.encode('ascii') + super(NativeIO, self).write(s) + + +class Verifier(object): + + def __init__(self, ffi, preamble, tmpdir=None, modulename=None, + ext_package=None, tag='', force_generic_engine=False, + source_extension='.c', flags=None, relative_to=None, **kwds): + if ffi._parser._uses_new_feature: + raise VerificationError( + "feature not supported with ffi.verify(), but only " + "with ffi.set_source(): %s" % (ffi._parser._uses_new_feature,)) + self.ffi = ffi + self.preamble = preamble + if not modulename: + flattened_kwds = ffiplatform.flatten(kwds) + vengine_class = _locate_engine_class(ffi, force_generic_engine) + self._vengine = vengine_class(self) + self._vengine.patch_extension_kwds(kwds) + self.flags = flags + self.kwds = self.make_relative_to(kwds, relative_to) + # + if modulename: + if tag: + raise TypeError("can't specify both 'modulename' and 'tag'") + else: + key = '\x00'.join(['%d.%d' % sys.version_info[:2], + __version_verifier_modules__, + preamble, flattened_kwds] + + ffi._cdefsources) + if sys.version_info >= (3,): + key = key.encode('utf-8') + k1 = hex(binascii.crc32(key[0::2]) & 0xffffffff) + k1 = k1.lstrip('0x').rstrip('L') + k2 = hex(binascii.crc32(key[1::2]) & 0xffffffff) + k2 = k2.lstrip('0').rstrip('L') + modulename = '_cffi_%s_%s%s%s' % (tag, self._vengine._class_key, + k1, k2) + suffix = _get_so_suffixes()[0] + self.tmpdir = tmpdir or _caller_dir_pycache() + self.sourcefilename = os.path.join(self.tmpdir, modulename + source_extension) + self.modulefilename = os.path.join(self.tmpdir, modulename + suffix) + self.ext_package = ext_package + self._has_source = False + self._has_module = False + + def write_source(self, file=None): + """Write the C source code. It is produced in 'self.sourcefilename', + which can be tweaked beforehand.""" + with self.ffi._lock: + if self._has_source and file is None: + raise VerificationError( + "source code already written") + self._write_source(file) + + def compile_module(self): + """Write the C source code (if not done already) and compile it. + This produces a dynamic link library in 'self.modulefilename'.""" + with self.ffi._lock: + if self._has_module: + raise VerificationError("module already compiled") + if not self._has_source: + self._write_source() + self._compile_module() + + def load_library(self): + """Get a C module from this Verifier instance. + Returns an instance of a FFILibrary class that behaves like the + objects returned by ffi.dlopen(), but that delegates all + operations to the C module. If necessary, the C code is written + and compiled first. + """ + with self.ffi._lock: + if not self._has_module: + self._locate_module() + if not self._has_module: + if not self._has_source: + self._write_source() + self._compile_module() + return self._load_library() + + def get_module_name(self): + basename = os.path.basename(self.modulefilename) + # kill both the .so extension and the other .'s, as introduced + # by Python 3: 'basename.cpython-33m.so' + basename = basename.split('.', 1)[0] + # and the _d added in Python 2 debug builds --- but try to be + # conservative and not kill a legitimate _d + if basename.endswith('_d') and hasattr(sys, 'gettotalrefcount'): + basename = basename[:-2] + return basename + + def get_extension(self): + if not self._has_source: + with self.ffi._lock: + if not self._has_source: + self._write_source() + sourcename = ffiplatform.maybe_relative_path(self.sourcefilename) + modname = self.get_module_name() + return ffiplatform.get_extension(sourcename, modname, **self.kwds) + + def generates_python_module(self): + return self._vengine._gen_python_module + + def make_relative_to(self, kwds, relative_to): + if relative_to and os.path.dirname(relative_to): + dirname = os.path.dirname(relative_to) + kwds = kwds.copy() + for key in ffiplatform.LIST_OF_FILE_NAMES: + if key in kwds: + lst = kwds[key] + if not isinstance(lst, (list, tuple)): + raise TypeError("keyword '%s' should be a list or tuple" + % (key,)) + lst = [os.path.join(dirname, fn) for fn in lst] + kwds[key] = lst + return kwds + + # ---------- + + def _locate_module(self): + if not os.path.isfile(self.modulefilename): + if self.ext_package: + try: + pkg = __import__(self.ext_package, None, None, ['__doc__']) + except ImportError: + return # cannot import the package itself, give up + # (e.g. it might be called differently before installation) + path = pkg.__path__ + else: + path = None + filename = self._vengine.find_module(self.get_module_name(), path, + _get_so_suffixes()) + if filename is None: + return + self.modulefilename = filename + self._vengine.collect_types() + self._has_module = True + + def _write_source_to(self, file): + self._vengine._f = file + try: + self._vengine.write_source_to_f() + finally: + del self._vengine._f + + def _write_source(self, file=None): + if file is not None: + self._write_source_to(file) + else: + # Write our source file to an in memory file. + f = NativeIO() + self._write_source_to(f) + source_data = f.getvalue() + + # Determine if this matches the current file + if os.path.exists(self.sourcefilename): + with open(self.sourcefilename, "r") as fp: + needs_written = not (fp.read() == source_data) + else: + needs_written = True + + # Actually write the file out if it doesn't match + if needs_written: + _ensure_dir(self.sourcefilename) + with open(self.sourcefilename, "w") as fp: + fp.write(source_data) + + # Set this flag + self._has_source = True + + def _compile_module(self): + # compile this C source + tmpdir = os.path.dirname(self.sourcefilename) + outputfilename = ffiplatform.compile(tmpdir, self.get_extension()) + try: + same = ffiplatform.samefile(outputfilename, self.modulefilename) + except OSError: + same = False + if not same: + _ensure_dir(self.modulefilename) + shutil.move(outputfilename, self.modulefilename) + self._has_module = True + + def _load_library(self): + assert self._has_module + if self.flags is not None: + return self._vengine.load_library(self.flags) + else: + return self._vengine.load_library() + +# ____________________________________________________________ + +_FORCE_GENERIC_ENGINE = False # for tests + +def _locate_engine_class(ffi, force_generic_engine): + if _FORCE_GENERIC_ENGINE: + force_generic_engine = True + if not force_generic_engine: + if '__pypy__' in sys.builtin_module_names: + force_generic_engine = True + else: + try: + import _cffi_backend + except ImportError: + _cffi_backend = '?' + if ffi._backend is not _cffi_backend: + force_generic_engine = True + if force_generic_engine: + from . import vengine_gen + return vengine_gen.VGenericEngine + else: + from . import vengine_cpy + return vengine_cpy.VCPythonEngine + +# ____________________________________________________________ + +_TMPDIR = None + +def _caller_dir_pycache(): + if _TMPDIR: + return _TMPDIR + result = os.environ.get('CFFI_TMPDIR') + if result: + return result + filename = sys._getframe(2).f_code.co_filename + return os.path.abspath(os.path.join(os.path.dirname(filename), + '__pycache__')) + +def set_tmpdir(dirname): + """Set the temporary directory to use instead of __pycache__.""" + global _TMPDIR + _TMPDIR = dirname + +def cleanup_tmpdir(tmpdir=None, keep_so=False): + """Clean up the temporary directory by removing all files in it + called `_cffi_*.{c,so}` as well as the `build` subdirectory.""" + tmpdir = tmpdir or _caller_dir_pycache() + try: + filelist = os.listdir(tmpdir) + except OSError: + return + if keep_so: + suffix = '.c' # only remove .c files + else: + suffix = _get_so_suffixes()[0].lower() + for fn in filelist: + if fn.lower().startswith('_cffi_') and ( + fn.lower().endswith(suffix) or fn.lower().endswith('.c')): + try: + os.unlink(os.path.join(tmpdir, fn)) + except OSError: + pass + clean_dir = [os.path.join(tmpdir, 'build')] + for dir in clean_dir: + try: + for fn in os.listdir(dir): + fn = os.path.join(dir, fn) + if os.path.isdir(fn): + clean_dir.append(fn) + else: + os.unlink(fn) + except OSError: + pass + +def _get_so_suffixes(): + suffixes = _extension_suffixes() + if not suffixes: + # bah, no C_EXTENSION available. Occurs on pypy without cpyext + if sys.platform == 'win32': + suffixes = [".pyd"] + else: + suffixes = [".so"] + + return suffixes + +def _ensure_dir(filename): + dirname = os.path.dirname(filename) + if dirname and not os.path.isdir(dirname): + os.makedirs(dirname) diff --git a/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/INSTALLER b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/METADATA b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/METADATA new file mode 100644 index 0000000..6b5a360 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/METADATA @@ -0,0 +1,808 @@ +Metadata-Version: 2.4 +Name: charset-normalizer +Version: 3.4.7 +Summary: The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet. +Author-email: "Ahmed R. TAHRI" +Maintainer-email: "Ahmed R. TAHRI" +License: MIT +Project-URL: Changelog, https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md +Project-URL: Documentation, https://charset-normalizer.readthedocs.io/ +Project-URL: Code, https://github.com/jawah/charset_normalizer +Project-URL: Issue tracker, https://github.com/jawah/charset_normalizer/issues +Keywords: encoding,charset,charset-detector,detector,normalization,unicode,chardet,detect +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: Free Threading :: 4 - Resilient +Classifier: Topic :: Text Processing :: Linguistic +Classifier: Topic :: Utilities +Classifier: Typing :: Typed +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +License-File: LICENSE +Provides-Extra: unicode-backport +Dynamic: license-file + +

Charset Detection, for Everyone 👋

+ +

+ The Real First Universal Charset Detector
+ + + + + Download Count Total + + + + +

+

+ Featured Packages
+ + Static Badge + + + Static Badge + +

+

+ In other language (unofficial port - by the community)
+ + Static Badge + +

+ +> A library that helps you read text from an unknown charset encoding.
Motivated by `chardet`, +> I'm trying to resolve the issue by taking a new approach. +> All IANA character set names for which the Python core library provides codecs are supported. +> You can also register your own set of codecs, and yes, it would work as-is. + +

+ >>>>> 👉 Try Me Online Now, Then Adopt Me 👈 <<<<< +

+ +This project offers you an alternative to **Universal Charset Encoding Detector**, also known as **Chardet**. + +| Feature | [Chardet](https://github.com/chardet/chardet) | Charset Normalizer | [cChardet](https://github.com/PyYoshi/cChardet) | +|--------------------------------------------------|:---------------------------------------------:|:-----------------------------------------------------------------------------------------------:|:-----------------------------------------------:| +| `Fast` | ✅ | ✅ | ✅ | +| `Universal`[^1] | ❌ | ✅ | ❌ | +| `Reliable` **without** distinguishable standards | ✅ | ✅ | ✅ | +| `Reliable` **with** distinguishable standards | ✅ | ✅ | ✅ | +| `License` | _Disputed_[^2]
_restrictive_ | MIT | MPL-1.1
_restrictive_ | +| `Native Python` | ✅ | ✅ | ❌ | +| `Detect spoken language` | ✅ | ✅ | N/A | +| `UnicodeDecodeError Safety` | ✅ | ✅ | ❌ | +| `Whl Size (min)` | 500 kB | 150 kB | ~200 kB | +| `Supported Encoding` | 99 | [99](https://charset-normalizer.readthedocs.io/en/latest/user/support.html#supported-encodings) | 40 | +| `Can register custom encoding` | ❌ | ✅ | ❌ | + +

+Reading Normalized TextCat Reading Text +

+ +[^1]: They are clearly using specific code for a specific encoding even if covering most of used one. +[^2]: Chardet 7.0+ was relicensed from LGPL-2.1 to MIT following an AI-assisted rewrite. This relicensing is disputed on two independent grounds: **(a)** the original author [contests](https://github.com/chardet/chardet/issues/327) that the maintainer had the right to relicense, arguing the rewrite is a derivative work of the LGPL-licensed codebase since it was not a clean room implementation; **(b)** the copyright claim itself is [questionable](https://github.com/chardet/chardet/issues/334) given the code was primarily generated by an LLM, and AI-generated output may not be copyrightable under most jurisdictions. Either issue alone could undermine the MIT license. Beyond licensing, the rewrite raises questions about responsible use of AI in open source: key architectural ideas pioneered by charset-normalizer - notably decode-first validity filtering (our foundational approach since v1) and encoding pairwise similarity with the same algorithm and threshold — surfaced in chardet 7 without acknowledgment. The project also imported test files from charset-normalizer to train and benchmark against it, then claimed superior accuracy on those very files. Charset-normalizer has always been MIT-licensed, encoding-agnostic by design, and built on a verifiable human-authored history. + +## ⚡ Performance + +This package offer better performances (99th, and 95th) against Chardet. Here are some numbers. + +| Package | Accuracy | Mean per file (ms) | File per sec (est) | +|---------------------------------------------------|:--------:|:------------------:|:------------------:| +| [chardet 7.1](https://github.com/chardet/chardet) | 89 % | 3 ms | 333 file/sec | +| charset-normalizer | **97 %** | 3 ms | 333 file/sec | + +| Package | 99th percentile | 95th percentile | 50th percentile | +|---------------------------------------------------|:---------------:|:---------------:|:---------------:| +| [chardet 7.1](https://github.com/chardet/chardet) | 32 ms | 17 ms | < 1 ms | +| charset-normalizer | 16 ms | 10 ms | 1 ms | + +_updated as of March 2026 using CPython 3.12, Charset-Normalizer 3.4.6, and Chardet 7.1.0_ + +~Chardet's performance on larger file (1MB+) are very poor. Expect huge difference on large payload.~ No longer the case since Chardet 7.0+ + +> Stats are generated using 400+ files using default parameters. More details on used files, see GHA workflows. +> And yes, these results might change at any time. The dataset can be updated to include more files. +> The actual delays heavily depends on your CPU capabilities. The factors should remain the same. +> Chardet claims on his documentation to have a greater accuracy than us based on the dataset they trained Chardet on(...) +> Well, it's normal, the opposite would have been worrying. Whereas charset-normalizer don't train on anything, our solution +> is based on a completely different algorithm, still heuristic through, it does not need weights across every encoding tables. + +## ✨ Installation + +Using pip: + +```sh +pip install charset-normalizer -U +``` + +## 🚀 Basic Usage + +### CLI +This package comes with a CLI. + +``` +usage: normalizer [-h] [-v] [-a] [-n] [-m] [-r] [-f] [-t THRESHOLD] + file [file ...] + +The Real First Universal Charset Detector. Discover originating encoding used +on text file. Normalize text to unicode. + +positional arguments: + files File(s) to be analysed + +optional arguments: + -h, --help show this help message and exit + -v, --verbose Display complementary information about file if any. + Stdout will contain logs about the detection process. + -a, --with-alternative + Output complementary possibilities if any. Top-level + JSON WILL be a list. + -n, --normalize Permit to normalize input file. If not set, program + does not write anything. + -m, --minimal Only output the charset detected to STDOUT. Disabling + JSON output. + -r, --replace Replace file when trying to normalize it instead of + creating a new one. + -f, --force Replace file without asking if you are sure, use this + flag with caution. + -t THRESHOLD, --threshold THRESHOLD + Define a custom maximum amount of chaos allowed in + decoded content. 0. <= chaos <= 1. + --version Show version information and exit. +``` + +```bash +normalizer ./data/sample.1.fr.srt +``` + +or + +```bash +python -m charset_normalizer ./data/sample.1.fr.srt +``` + +🎉 Since version 1.4.0 the CLI produce easily usable stdout result in JSON format. + +```json +{ + "path": "/home/default/projects/charset_normalizer/data/sample.1.fr.srt", + "encoding": "cp1252", + "encoding_aliases": [ + "1252", + "windows_1252" + ], + "alternative_encodings": [ + "cp1254", + "cp1256", + "cp1258", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + "mbcs" + ], + "language": "French", + "alphabets": [ + "Basic Latin", + "Latin-1 Supplement" + ], + "has_sig_or_bom": false, + "chaos": 0.149, + "coherence": 97.152, + "unicode_path": null, + "is_preferred": true +} +``` + +### Python +*Just print out normalized text* +```python +from charset_normalizer import from_path + +results = from_path('./my_subtitle.srt') + +print(str(results.best())) +``` + +*Upgrade your code without effort* +```python +from charset_normalizer import detect +``` + +The above code will behave the same as **chardet**. We ensure that we offer the best (reasonable) BC result possible. + +See the docs for advanced usage : [readthedocs.io](https://charset-normalizer.readthedocs.io/en/latest/) + +## 😇 Why + +When I started using Chardet, I noticed that it was not suited to my expectations, and I wanted to propose a +reliable alternative using a completely different method. Also! I never back down on a good challenge! + +I **don't care** about the **originating charset** encoding, because **two different tables** can +produce **two identical rendered string.** +What I want is to get readable text, the best I can. + +In a way, **I'm brute forcing text decoding.** How cool is that ? 😎 + +Don't confuse package **ftfy** with charset-normalizer or chardet. ftfy goal is to repair Unicode string whereas charset-normalizer to convert raw file in unknown encoding to unicode. + +## 🍰 How + + - Discard all charset encoding table that could not fit the binary content. + - Measure noise, or the mess once opened (by chunks) with a corresponding charset encoding. + - Extract matches with the lowest mess detected. + - Additionally, we measure coherence / probe for a language. + +**Wait a minute**, what is noise/mess and coherence according to **YOU ?** + +*Noise :* I opened hundred of text files, **written by humans**, with the wrong encoding table. **I observed**, then +**I established** some ground rules about **what is obvious** when **it seems like** a mess (aka. defining noise in rendered text). + I know that my interpretation of what is noise is probably incomplete, feel free to contribute in order to + improve or rewrite it. + +*Coherence :* For each language there is on earth, we have computed ranked letter appearance occurrences (the best we can). So I thought +that intel is worth something here. So I use those records against decoded text to check if I can detect intelligent design. + +## ⚡ Known limitations + + - Language detection is unreliable when text contains two or more languages sharing identical letters. (eg. HTML (english tags) + Turkish content (Sharing Latin characters)) + - Every charset detector heavily depends on sufficient content. In common cases, do not bother run detection on very tiny content. + +## ⚠️ About Python EOLs + +**If you are running:** + +- Python >=2.7,<3.5: Unsupported +- Python 3.5: charset-normalizer < 2.1 +- Python 3.6: charset-normalizer < 3.1 + +Upgrade your Python interpreter as soon as possible. + +## 👤 Contributing + +Contributions, issues and feature requests are very much welcome.
+Feel free to check [issues page](https://github.com/ousret/charset_normalizer/issues) if you want to contribute. + +## 📝 License + +Copyright © [Ahmed TAHRI @Ousret](https://github.com/Ousret).
+This project is [MIT](https://github.com/Ousret/charset_normalizer/blob/master/LICENSE) licensed. + +Characters frequencies used in this project © 2012 [Denny Vrandečić](http://simia.net/letters/) + +## 💼 For Enterprise + +Professional support for charset-normalizer is available as part of the [Tidelift +Subscription][1]. Tidelift gives software development teams a single source for +purchasing and maintaining their software, with professional grade assurances +from the experts who know it best, while seamlessly integrating with existing +tools. + +[1]: https://tidelift.com/subscription/pkg/pypi-charset-normalizer?utm_source=pypi-charset-normalizer&utm_medium=readme + +[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7297/badge)](https://www.bestpractices.dev/projects/7297) + +# Changelog +All notable changes to charset-normalizer will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [3.4.7](https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7) (2026-04-02) + +### Changed +- Pre-built optimized version using mypy[c] v1.20. +- Relax `setuptools` constraint to `setuptools>=68,<82.1`. + +### Fixed +- Correctly remove SIG remnant in utf-7 decoded string. (#718) (#716) + +## [3.4.6](https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6) (2026-03-15) + +### Changed +- Flattened the logic in `charset_normalizer.md` for higher performance. Removed `eligible(..)` and `feed(...)` + in favor of `feed_info(...)`. +- Raised upper bound for mypy[c] to 1.20, for our optimized version. +- Updated `UNICODE_RANGES_COMBINED` using Unicode blocks v17. + +### Fixed +- Edge case where noise difference between two candidates can be almost insignificant. (#672) +- CLI `--normalize` writing to wrong path when passing multiple files in. (#702) + +### Misc +- Freethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (#616) + +## [3.4.5](https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5) (2026-03-06) + +### Changed +- Update `setuptools` constraint to `setuptools>=68,<=82`. +- Raised upper bound of mypyc for the optional pre-built extension to v1.19.1 + +### Fixed +- Add explicit link to lib math in our optimized build. (#692) +- Logger level not restored correctly for empty byte sequences. (#701) +- TypeError when passing bytearray to from_bytes. (#703) + +### Misc +- Applied safe micro-optimizations in both our noise detector and language detector. +- Rewrote the `query_yes_no` function (inside CLI) to avoid using ambiguous licensed code. +- Added `cd.py` submodule into mypyc optional compilation to reduce further the performance impact. + +## [3.4.4](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.4) (2025-10-13) + +### Changed +- Bound `setuptools` to a specific constraint `setuptools>=68,<=81`. +- Raised upper bound of mypyc for the optional pre-built extension to v1.18.2 + +### Removed +- `setuptools-scm` as a build dependency. + +### Misc +- Enforced hashes in `dev-requirements.txt` and created `ci-requirements.txt` for security purposes. +- Additional pre-built wheels for riscv64, s390x, and armv7l architectures. +- Restore ` multiple.intoto.jsonl` in GitHub releases in addition to individual attestation file per wheel. + +## [3.4.3](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.3) (2025-08-09) + +### Changed +- mypy(c) is no longer a required dependency at build time if `CHARSET_NORMALIZER_USE_MYPYC` isn't set to `1`. (#595) (#583) +- automatically lower confidence on small bytes samples that are not Unicode in `detect` output legacy function. (#391) + +### Added +- Custom build backend to overcome inability to mark mypy as an optional dependency in the build phase. +- Support for Python 3.14 + +### Fixed +- sdist archive contained useless directories. +- automatically fallback on valid UTF-16 or UTF-32 even if the md says it's noisy. (#633) + +### Misc +- SBOM are automatically published to the relevant GitHub release to comply with regulatory changes. + Each published wheel comes with its SBOM. We choose CycloneDX as the format. +- Prebuilt optimized wheel are no longer distributed by default for CPython 3.7 due to a change in cibuildwheel. + +## [3.4.2](https://github.com/Ousret/charset_normalizer/compare/3.4.1...3.4.2) (2025-05-02) + +### Fixed +- Addressed the DeprecationWarning in our CLI regarding `argparse.FileType` by backporting the target class into the package. (#591) +- Improved the overall reliability of the detector with CJK Ideographs. (#605) (#587) + +### Changed +- Optional mypyc compilation upgraded to version 1.15 for Python >= 3.8 + +## [3.4.1](https://github.com/Ousret/charset_normalizer/compare/3.4.0...3.4.1) (2024-12-24) + +### Changed +- Project metadata are now stored using `pyproject.toml` instead of `setup.cfg` using setuptools as the build backend. +- Enforce annotation delayed loading for a simpler and consistent types in the project. +- Optional mypyc compilation upgraded to version 1.14 for Python >= 3.8 + +### Added +- pre-commit configuration. +- noxfile. + +### Removed +- `build-requirements.txt` as per using `pyproject.toml` native build configuration. +- `bin/integration.py` and `bin/serve.py` in favor of downstream integration test (see noxfile). +- `setup.cfg` in favor of `pyproject.toml` metadata configuration. +- Unused `utils.range_scan` function. + +### Fixed +- Converting content to Unicode bytes may insert `utf_8` instead of preferred `utf-8`. (#572) +- Deprecation warning "'count' is passed as positional argument" when converting to Unicode bytes on Python 3.13+ + +## [3.4.0](https://github.com/Ousret/charset_normalizer/compare/3.3.2...3.4.0) (2024-10-08) + +### Added +- Argument `--no-preemptive` in the CLI to prevent the detector to search for hints. +- Support for Python 3.13 (#512) + +### Fixed +- Relax the TypeError exception thrown when trying to compare a CharsetMatch with anything else than a CharsetMatch. +- Improved the general reliability of the detector based on user feedbacks. (#520) (#509) (#498) (#407) (#537) +- Declared charset in content (preemptive detection) not changed when converting to utf-8 bytes. (#381) + +## [3.3.2](https://github.com/Ousret/charset_normalizer/compare/3.3.1...3.3.2) (2023-10-31) + +### Fixed +- Unintentional memory usage regression when using large payload that match several encoding (#376) +- Regression on some detection case showcased in the documentation (#371) + +### Added +- Noise (md) probe that identify malformed arabic representation due to the presence of letters in isolated form (credit to my wife) + +## [3.3.1](https://github.com/Ousret/charset_normalizer/compare/3.3.0...3.3.1) (2023-10-22) + +### Changed +- Optional mypyc compilation upgraded to version 1.6.1 for Python >= 3.8 +- Improved the general detection reliability based on reports from the community + +## [3.3.0](https://github.com/Ousret/charset_normalizer/compare/3.2.0...3.3.0) (2023-09-30) + +### Added +- Allow to execute the CLI (e.g. normalizer) through `python -m charset_normalizer.cli` or `python -m charset_normalizer` +- Support for 9 forgotten encoding that are supported by Python but unlisted in `encoding.aliases` as they have no alias (#323) + +### Removed +- (internal) Redundant utils.is_ascii function and unused function is_private_use_only +- (internal) charset_normalizer.assets is moved inside charset_normalizer.constant + +### Changed +- (internal) Unicode code blocks in constants are updated using the latest v15.0.0 definition to improve detection +- Optional mypyc compilation upgraded to version 1.5.1 for Python >= 3.8 + +### Fixed +- Unable to properly sort CharsetMatch when both chaos/noise and coherence were close due to an unreachable condition in \_\_lt\_\_ (#350) + +## [3.2.0](https://github.com/Ousret/charset_normalizer/compare/3.1.0...3.2.0) (2023-06-07) + +### Changed +- Typehint for function `from_path` no longer enforce `PathLike` as its first argument +- Minor improvement over the global detection reliability + +### Added +- Introduce function `is_binary` that relies on main capabilities, and optimized to detect binaries +- Propagate `enable_fallback` argument throughout `from_bytes`, `from_path`, and `from_fp` that allow a deeper control over the detection (default True) +- Explicit support for Python 3.12 + +### Fixed +- Edge case detection failure where a file would contain 'very-long' camel cased word (Issue #289) + +## [3.1.0](https://github.com/Ousret/charset_normalizer/compare/3.0.1...3.1.0) (2023-03-06) + +### Added +- Argument `should_rename_legacy` for legacy function `detect` and disregard any new arguments without errors (PR #262) + +### Removed +- Support for Python 3.6 (PR #260) + +### Changed +- Optional speedup provided by mypy/c 1.0.1 + +## [3.0.1](https://github.com/Ousret/charset_normalizer/compare/3.0.0...3.0.1) (2022-11-18) + +### Fixed +- Multi-bytes cutter/chunk generator did not always cut correctly (PR #233) + +### Changed +- Speedup provided by mypy/c 0.990 on Python >= 3.7 + +## [3.0.0](https://github.com/Ousret/charset_normalizer/compare/2.1.1...3.0.0) (2022-10-20) + +### Added +- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results +- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES +- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio +- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) + +### Changed +- Build with static metadata using 'build' frontend +- Make the language detection stricter +- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 + +### Fixed +- CLI with opt --normalize fail when using full path for files +- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it +- Sphinx warnings when generating the documentation + +### Removed +- Coherence detector no longer return 'Simple English' instead return 'English' +- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' +- Breaking: Method `first()` and `best()` from CharsetMatch +- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) +- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches +- Breaking: Top-level function `normalize` +- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch +- Support for the backport `unicodedata2` + +## [3.0.0rc1](https://github.com/Ousret/charset_normalizer/compare/3.0.0b2...3.0.0rc1) (2022-10-18) + +### Added +- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results +- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES +- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio + +### Changed +- Build with static metadata using 'build' frontend +- Make the language detection stricter + +### Fixed +- CLI with opt --normalize fail when using full path for files +- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it + +### Removed +- Coherence detector no longer return 'Simple English' instead return 'English' +- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' + +## [3.0.0b2](https://github.com/Ousret/charset_normalizer/compare/3.0.0b1...3.0.0b2) (2022-08-21) + +### Added +- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) + +### Removed +- Breaking: Method `first()` and `best()` from CharsetMatch +- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) + +### Fixed +- Sphinx warnings when generating the documentation + +## [3.0.0b1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...3.0.0b1) (2022-08-15) + +### Changed +- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 + +### Removed +- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches +- Breaking: Top-level function `normalize` +- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch +- Support for the backport `unicodedata2` + +## [2.1.1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...2.1.1) (2022-08-19) + +### Deprecated +- Function `normalize` scheduled for removal in 3.0 + +### Changed +- Removed useless call to decode in fn is_unprintable (#206) + +### Fixed +- Third-party library (i18n xgettext) crashing not recognizing utf_8 (PEP 263) with underscore from [@aleksandernovikov](https://github.com/aleksandernovikov) (#204) + +## [2.1.0](https://github.com/Ousret/charset_normalizer/compare/2.0.12...2.1.0) (2022-06-19) + +### Added +- Output the Unicode table version when running the CLI with `--version` (PR #194) + +### Changed +- Re-use decoded buffer for single byte character sets from [@nijel](https://github.com/nijel) (PR #175) +- Fixing some performance bottlenecks from [@deedy5](https://github.com/deedy5) (PR #183) + +### Fixed +- Workaround potential bug in cpython with Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space (PR #175) +- CLI default threshold aligned with the API threshold from [@oleksandr-kuzmenko](https://github.com/oleksandr-kuzmenko) (PR #181) + +### Removed +- Support for Python 3.5 (PR #192) + +### Deprecated +- Use of backport unicodedata from `unicodedata2` as Python is quickly catching up, scheduled for removal in 3.0 (PR #194) + +## [2.0.12](https://github.com/Ousret/charset_normalizer/compare/2.0.11...2.0.12) (2022-02-12) + +### Fixed +- ASCII miss-detection on rare cases (PR #170) + +## [2.0.11](https://github.com/Ousret/charset_normalizer/compare/2.0.10...2.0.11) (2022-01-30) + +### Added +- Explicit support for Python 3.11 (PR #164) + +### Changed +- The logging behavior have been completely reviewed, now using only TRACE and DEBUG levels (PR #163 #165) + +## [2.0.10](https://github.com/Ousret/charset_normalizer/compare/2.0.9...2.0.10) (2022-01-04) + +### Fixed +- Fallback match entries might lead to UnicodeDecodeError for large bytes sequence (PR #154) + +### Changed +- Skipping the language-detection (CD) on ASCII (PR #155) + +## [2.0.9](https://github.com/Ousret/charset_normalizer/compare/2.0.8...2.0.9) (2021-12-03) + +### Changed +- Moderating the logging impact (since 2.0.8) for specific environments (PR #147) + +### Fixed +- Wrong logging level applied when setting kwarg `explain` to True (PR #146) + +## [2.0.8](https://github.com/Ousret/charset_normalizer/compare/2.0.7...2.0.8) (2021-11-24) +### Changed +- Improvement over Vietnamese detection (PR #126) +- MD improvement on trailing data and long foreign (non-pure latin) data (PR #124) +- Efficiency improvements in cd/alphabet_languages from [@adbar](https://github.com/adbar) (PR #122) +- call sum() without an intermediary list following PEP 289 recommendations from [@adbar](https://github.com/adbar) (PR #129) +- Code style as refactored by Sourcery-AI (PR #131) +- Minor adjustment on the MD around european words (PR #133) +- Remove and replace SRTs from assets / tests (PR #139) +- Initialize the library logger with a `NullHandler` by default from [@nmaynes](https://github.com/nmaynes) (PR #135) +- Setting kwarg `explain` to True will add provisionally (bounded to function lifespan) a specific stream handler (PR #135) + +### Fixed +- Fix large (misleading) sequence giving UnicodeDecodeError (PR #137) +- Avoid using too insignificant chunk (PR #137) + +### Added +- Add and expose function `set_logging_handler` to configure a specific StreamHandler from [@nmaynes](https://github.com/nmaynes) (PR #135) +- Add `CHANGELOG.md` entries, format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) (PR #141) + +## [2.0.7](https://github.com/Ousret/charset_normalizer/compare/2.0.6...2.0.7) (2021-10-11) +### Added +- Add support for Kazakh (Cyrillic) language detection (PR #109) + +### Changed +- Further, improve inferring the language from a given single-byte code page (PR #112) +- Vainly trying to leverage PEP263 when PEP3120 is not supported (PR #116) +- Refactoring for potential performance improvements in loops from [@adbar](https://github.com/adbar) (PR #113) +- Various detection improvement (MD+CD) (PR #117) + +### Removed +- Remove redundant logging entry about detected language(s) (PR #115) + +### Fixed +- Fix a minor inconsistency between Python 3.5 and other versions regarding language detection (PR #117 #102) + +## [2.0.6](https://github.com/Ousret/charset_normalizer/compare/2.0.5...2.0.6) (2021-09-18) +### Fixed +- Unforeseen regression with the loss of the backward-compatibility with some older minor of Python 3.5.x (PR #100) +- Fix CLI crash when using --minimal output in certain cases (PR #103) + +### Changed +- Minor improvement to the detection efficiency (less than 1%) (PR #106 #101) + +## [2.0.5](https://github.com/Ousret/charset_normalizer/compare/2.0.4...2.0.5) (2021-09-14) +### Changed +- The project now comply with: flake8, mypy, isort and black to ensure a better overall quality (PR #81) +- The BC-support with v1.x was improved, the old staticmethods are restored (PR #82) +- The Unicode detection is slightly improved (PR #93) +- Add syntax sugar \_\_bool\_\_ for results CharsetMatches list-container (PR #91) + +### Removed +- The project no longer raise warning on tiny content given for detection, will be simply logged as warning instead (PR #92) + +### Fixed +- In some rare case, the chunks extractor could cut in the middle of a multi-byte character and could mislead the mess detection (PR #95) +- Some rare 'space' characters could trip up the UnprintablePlugin/Mess detection (PR #96) +- The MANIFEST.in was not exhaustive (PR #78) + +## [2.0.4](https://github.com/Ousret/charset_normalizer/compare/2.0.3...2.0.4) (2021-07-30) +### Fixed +- The CLI no longer raise an unexpected exception when no encoding has been found (PR #70) +- Fix accessing the 'alphabets' property when the payload contains surrogate characters (PR #68) +- The logger could mislead (explain=True) on detected languages and the impact of one MBCS match (PR #72) +- Submatch factoring could be wrong in rare edge cases (PR #72) +- Multiple files given to the CLI were ignored when publishing results to STDOUT. (After the first path) (PR #72) +- Fix line endings from CRLF to LF for certain project files (PR #67) + +### Changed +- Adjust the MD to lower the sensitivity, thus improving the global detection reliability (PR #69 #76) +- Allow fallback on specified encoding if any (PR #71) + +## [2.0.3](https://github.com/Ousret/charset_normalizer/compare/2.0.2...2.0.3) (2021-07-16) +### Changed +- Part of the detection mechanism has been improved to be less sensitive, resulting in more accurate detection results. Especially ASCII. (PR #63) +- According to the community wishes, the detection will fall back on ASCII or UTF-8 in a last-resort case. (PR #64) + +## [2.0.2](https://github.com/Ousret/charset_normalizer/compare/2.0.1...2.0.2) (2021-07-15) +### Fixed +- Empty/Too small JSON payload miss-detection fixed. Report from [@tseaver](https://github.com/tseaver) (PR #59) + +### Changed +- Don't inject unicodedata2 into sys.modules from [@akx](https://github.com/akx) (PR #57) + +## [2.0.1](https://github.com/Ousret/charset_normalizer/compare/2.0.0...2.0.1) (2021-07-13) +### Fixed +- Make it work where there isn't a filesystem available, dropping assets frequencies.json. Report from [@sethmlarson](https://github.com/sethmlarson). (PR #55) +- Using explain=False permanently disable the verbose output in the current runtime (PR #47) +- One log entry (language target preemptive) was not show in logs when using explain=True (PR #47) +- Fix undesired exception (ValueError) on getitem of instance CharsetMatches (PR #52) + +### Changed +- Public function normalize default args values were not aligned with from_bytes (PR #53) + +### Added +- You may now use charset aliases in cp_isolation and cp_exclusion arguments (PR #47) + +## [2.0.0](https://github.com/Ousret/charset_normalizer/compare/1.4.1...2.0.0) (2021-07-02) +### Changed +- 4x to 5 times faster than the previous 1.4.0 release. At least 2x faster than Chardet. +- Accent has been made on UTF-8 detection, should perform rather instantaneous. +- The backward compatibility with Chardet has been greatly improved. The legacy detect function returns an identical charset name whenever possible. +- The detection mechanism has been slightly improved, now Turkish content is detected correctly (most of the time) +- The program has been rewritten to ease the readability and maintainability. (+Using static typing)+ +- utf_7 detection has been reinstated. + +### Removed +- This package no longer require anything when used with Python 3.5 (Dropped cached_property) +- Removed support for these languages: Catalan, Esperanto, Kazakh, Baque, Volapük, Azeri, Galician, Nynorsk, Macedonian, and Serbocroatian. +- The exception hook on UnicodeDecodeError has been removed. + +### Deprecated +- Methods coherence_non_latin, w_counter, chaos_secondary_pass of the class CharsetMatch are now deprecated and scheduled for removal in v3.0 + +### Fixed +- The CLI output used the relative path of the file(s). Should be absolute. + +## [1.4.1](https://github.com/Ousret/charset_normalizer/compare/1.4.0...1.4.1) (2021-05-28) +### Fixed +- Logger configuration/usage no longer conflict with others (PR #44) + +## [1.4.0](https://github.com/Ousret/charset_normalizer/compare/1.3.9...1.4.0) (2021-05-21) +### Removed +- Using standard logging instead of using the package loguru. +- Dropping nose test framework in favor of the maintained pytest. +- Choose to not use dragonmapper package to help with gibberish Chinese/CJK text. +- Require cached_property only for Python 3.5 due to constraint. Dropping for every other interpreter version. +- Stop support for UTF-7 that does not contain a SIG. +- Dropping PrettyTable, replaced with pure JSON output in CLI. + +### Fixed +- BOM marker in a CharsetNormalizerMatch instance could be False in rare cases even if obviously present. Due to the sub-match factoring process. +- Not searching properly for the BOM when trying utf32/16 parent codec. + +### Changed +- Improving the package final size by compressing frequencies.json. +- Huge improvement over the larges payload. + +### Added +- CLI now produces JSON consumable output. +- Return ASCII if given sequences fit. Given reasonable confidence. + +## [1.3.9](https://github.com/Ousret/charset_normalizer/compare/1.3.8...1.3.9) (2021-05-13) + +### Fixed +- In some very rare cases, you may end up getting encode/decode errors due to a bad bytes payload (PR #40) + +## [1.3.8](https://github.com/Ousret/charset_normalizer/compare/1.3.7...1.3.8) (2021-05-12) + +### Fixed +- Empty given payload for detection may cause an exception if trying to access the `alphabets` property. (PR #39) + +## [1.3.7](https://github.com/Ousret/charset_normalizer/compare/1.3.6...1.3.7) (2021-05-12) + +### Fixed +- The legacy detect function should return UTF-8-SIG if sig is present in the payload. (PR #38) + +## [1.3.6](https://github.com/Ousret/charset_normalizer/compare/1.3.5...1.3.6) (2021-02-09) + +### Changed +- Amend the previous release to allow prettytable 2.0 (PR #35) + +## [1.3.5](https://github.com/Ousret/charset_normalizer/compare/1.3.4...1.3.5) (2021-02-08) + +### Fixed +- Fix error while using the package with a python pre-release interpreter (PR #33) + +### Changed +- Dependencies refactoring, constraints revised. + +### Added +- Add python 3.9 and 3.10 to the supported interpreters + +MIT License + +Copyright (c) 2025 TAHRI Ahmed R. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/RECORD b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/RECORD new file mode 100644 index 0000000..c1a25f4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/RECORD @@ -0,0 +1,36 @@ +../../../bin/normalizer,sha256=8Aes7UYkFx5lEcbEL2xYJMEN21oTH3FLqfG0fo9vcvE,262 +81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so,sha256=xPTGB-9iuOqJ5RfI3qaB1WzuFAm1oYWbgN1Jz9U1wn0,433312 +charset_normalizer-3.4.7.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +charset_normalizer-3.4.7.dist-info/METADATA,sha256=K8lK8L8LaZ1YmKvWLt3zEkpIxiCOC58xNhzFQrfQJxQ,40931 +charset_normalizer-3.4.7.dist-info/RECORD,, +charset_normalizer-3.4.7.dist-info/WHEEL,sha256=Tc3fF66yn9Kh-hkUUsdKQyuB9Lw0CDoeANnEbSVc3f4,190 +charset_normalizer-3.4.7.dist-info/entry_points.txt,sha256=ADSTKrkXZ3hhdOVFi6DcUEHQRS0xfxDIE_pEz4wLIXA,65 +charset_normalizer-3.4.7.dist-info/licenses/LICENSE,sha256=bQ1Bv-FwrGx9wkjJpj4lTQ-0WmDVCoJX0K-SxuJJuIc,1071 +charset_normalizer-3.4.7.dist-info/top_level.txt,sha256=c_vZbitqecT2GfK3zdxSTLCn8C-6pGnHQY5o_5Y32M0,47 +charset_normalizer/__init__.py,sha256=OKRxRv2Zhnqk00tqkN0c1BtJjm165fWXLydE52IKuHc,1590 +charset_normalizer/__main__.py,sha256=yzYxMR-IhKRHYwcSlavEv8oGdwxsR89mr2X09qXGdps,109 +charset_normalizer/__pycache__/__init__.cpython-312.pyc,, +charset_normalizer/__pycache__/__main__.cpython-312.pyc,, +charset_normalizer/__pycache__/api.cpython-312.pyc,, +charset_normalizer/__pycache__/cd.cpython-312.pyc,, +charset_normalizer/__pycache__/constant.cpython-312.pyc,, +charset_normalizer/__pycache__/legacy.cpython-312.pyc,, +charset_normalizer/__pycache__/md.cpython-312.pyc,, +charset_normalizer/__pycache__/models.cpython-312.pyc,, +charset_normalizer/__pycache__/utils.cpython-312.pyc,, +charset_normalizer/__pycache__/version.cpython-312.pyc,, +charset_normalizer/api.py,sha256=387F3n23MlMu-xfSbFULW2DLGsBmVrZVGhnkiGXeKBo,38844 +charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so,sha256=gOe65H__3O8_4a-aSVMB8gxHsRxVyQDUqqaIurPmIhE,15912 +charset_normalizer/cd.py,sha256=v0iPJweGsRegXywrM1LzUgqW9bJ1KFvIblQHP1jm5FQ,15174 +charset_normalizer/cli/__init__.py,sha256=D8I86lFk2-py45JvqxniTirSj_sFyE6sjaY_0-G1shc,136 +charset_normalizer/cli/__main__.py,sha256=E9FFSV1E2iOE_B2B1tJHQT9ExJqc60Ks_c-08sNawh8,11940 +charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc,, +charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc,, +charset_normalizer/constant.py,sha256=yvLAWDrdSC743Cu4amhwHLIO-FGuRTOTZouCzZKGikc,44431 +charset_normalizer/legacy.py,sha256=yBIFMNABNPE5JkdKOWyVo36fZtV9nm8bf37LrDWulz8,2661 +charset_normalizer/md.cpython-312-x86_64-linux-gnu.so,sha256=iYaQbya7NVRR7xg5FtK1yAKS5shmTFwmtkqqQbbvEWs,15912 +charset_normalizer/md.py,sha256=AYCdfDX79FrgoId3zXqmbCuDcbGr1NRuGqgJN94Rx9Q,30441 +charset_normalizer/models.py,sha256=FbaQnI6ECmVmyHRSvVM5fHNeMAQ3KSGdwLjGcQqWDws,12821 +charset_normalizer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +charset_normalizer/utils.py,sha256=9cpi-_0-vC9pGDfuoarhC6VlF_Jxwx5Jsa_8I4w2D8k,12282 +charset_normalizer/version.py,sha256=2LxFuGp3BBuIwt95cp64y7v8bCNHcMAi08IfXt_47Co,115 diff --git a/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/WHEEL b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/WHEEL new file mode 100644 index 0000000..0493eaf --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/WHEEL @@ -0,0 +1,7 @@ +Wheel-Version: 1.0 +Generator: setuptools (82.0.1) +Root-Is-Purelib: false +Tag: cp312-cp312-manylinux_2_17_x86_64 +Tag: cp312-cp312-manylinux2014_x86_64 +Tag: cp312-cp312-manylinux_2_28_x86_64 + diff --git a/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/entry_points.txt b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/entry_points.txt new file mode 100644 index 0000000..65619e7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +normalizer = charset_normalizer.cli:cli_detect diff --git a/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/licenses/LICENSE b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/licenses/LICENSE new file mode 100644 index 0000000..9725772 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/licenses/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 TAHRI Ahmed R. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/top_level.txt b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/top_level.txt new file mode 100644 index 0000000..89847be --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer-3.4.7.dist-info/top_level.txt @@ -0,0 +1,2 @@ +81d243bd2c585b0f4821__mypyc +charset_normalizer diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py b/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py new file mode 100644 index 0000000..0d3a379 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py @@ -0,0 +1,48 @@ +""" +Charset-Normalizer +~~~~~~~~~~~~~~ +The Real First Universal Charset Detector. +A library that helps you read text from an unknown charset encoding. +Motivated by chardet, This package is trying to resolve the issue by taking a new approach. +All IANA character set names for which the Python core library provides codecs are supported. + +Basic usage: + >>> from charset_normalizer import from_bytes + >>> results = from_bytes('Bсеки човек има право на образование. Oбразованието!'.encode('utf_8')) + >>> best_guess = results.best() + >>> str(best_guess) + 'Bсеки човек има право на образование. Oбразованието!' + +Others methods and usages are available - see the full documentation +at . +:copyright: (c) 2021 by Ahmed TAHRI +:license: MIT, see LICENSE for more details. +""" + +from __future__ import annotations + +import logging + +from .api import from_bytes, from_fp, from_path, is_binary +from .legacy import detect +from .models import CharsetMatch, CharsetMatches +from .utils import set_logging_handler +from .version import VERSION, __version__ + +__all__ = ( + "from_fp", + "from_path", + "from_bytes", + "is_binary", + "detect", + "CharsetMatch", + "CharsetMatches", + "__version__", + "VERSION", + "set_logging_handler", +) + +# Attach a NullHandler to the top level logger by default +# https://docs.python.org/3.3/howto/logging.html#configuring-logging-for-a-library + +logging.getLogger("charset_normalizer").addHandler(logging.NullHandler()) diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__main__.py b/venv/lib/python3.12/site-packages/charset_normalizer/__main__.py new file mode 100644 index 0000000..e0e76f7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/__main__.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from .cli import cli_detect + +if __name__ == "__main__": + cli_detect() diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..d37be94 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..45652a6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc new file mode 100644 index 0000000..8a81e0b Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/cd.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/cd.cpython-312.pyc new file mode 100644 index 0000000..7d1fcc3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/cd.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc new file mode 100644 index 0000000..ff3af80 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/legacy.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/legacy.cpython-312.pyc new file mode 100644 index 0000000..19c3c55 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/legacy.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc new file mode 100644 index 0000000..2d8f0e4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000..5c5108d Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000..257b8b2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/version.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/version.cpython-312.pyc new file mode 100644 index 0000000..0a6a10f Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/version.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/api.py b/venv/lib/python3.12/site-packages/charset_normalizer/api.py new file mode 100644 index 0000000..50cb955 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/api.py @@ -0,0 +1,988 @@ +from __future__ import annotations + +import logging +from os import PathLike +from typing import BinaryIO + +from .cd import ( + coherence_ratio, + encoding_languages, + mb_encoding_languages, + merge_coherence_ratios, +) +from .constant import ( + IANA_SUPPORTED, + IANA_SUPPORTED_SIMILAR, + TOO_BIG_SEQUENCE, + TOO_SMALL_SEQUENCE, + TRACE, +) +from .md import mess_ratio +from .models import CharsetMatch, CharsetMatches +from .utils import ( + any_specified_encoding, + cut_sequence_chunks, + iana_name, + identify_sig_or_bom, + is_multi_byte_encoding, + should_strip_sig_or_bom, +) + +logger = logging.getLogger("charset_normalizer") +explain_handler = logging.StreamHandler() +explain_handler.setFormatter( + logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") +) + +# Pre-compute a reordered encoding list: multibyte first, then single-byte. +# This allows the mb_definitive_match optimization to fire earlier, skipping +# all single-byte encodings for genuine CJK content. Multibyte codecs +# hard-fail (UnicodeDecodeError) on single-byte data almost instantly, so +# testing them first costs negligible time for non-CJK files. +_mb_supported: list[str] = [] +_sb_supported: list[str] = [] + +for _supported_enc in IANA_SUPPORTED: + try: + if is_multi_byte_encoding(_supported_enc): + _mb_supported.append(_supported_enc) + else: + _sb_supported.append(_supported_enc) + except ImportError: + _sb_supported.append(_supported_enc) + +IANA_SUPPORTED_MB_FIRST: list[str] = _mb_supported + _sb_supported + + +def from_bytes( + sequences: bytes | bytearray, + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.2, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Given a raw bytes sequence, return the best possibles charset usable to render str objects. + If there is no results, it is a strong indicator that the source is binary/not text. + By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence. + And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will. + + The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page + but never take it for granted. Can improve the performance. + + You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that + purpose. + + This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32. + By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain' + toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging. + Custom logging format and handler can be set manually. + """ + + if not isinstance(sequences, (bytearray, bytes)): + raise TypeError( + "Expected object of type bytes or bytearray, got: {}".format( + type(sequences) + ) + ) + + if explain: + previous_logger_level: int = logger.level + logger.addHandler(explain_handler) + logger.setLevel(TRACE) + + length: int = len(sequences) + + if length == 0: + logger.debug("Encoding detection on empty bytes, assuming utf_8 intention.") + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([CharsetMatch(sequences, "utf_8", 0.0, False, [], "")]) + + if cp_isolation is not None: + logger.log( + TRACE, + "cp_isolation is set. use this flag for debugging purpose. " + "limited list of encoding allowed : %s.", + ", ".join(cp_isolation), + ) + cp_isolation = [iana_name(cp, False) for cp in cp_isolation] + else: + cp_isolation = [] + + if cp_exclusion is not None: + logger.log( + TRACE, + "cp_exclusion is set. use this flag for debugging purpose. " + "limited list of encoding excluded : %s.", + ", ".join(cp_exclusion), + ) + cp_exclusion = [iana_name(cp, False) for cp in cp_exclusion] + else: + cp_exclusion = [] + + if length <= (chunk_size * steps): + logger.log( + TRACE, + "override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.", + steps, + chunk_size, + length, + ) + steps = 1 + chunk_size = length + + if steps > 1 and length / steps < chunk_size: + chunk_size = int(length / steps) + + is_too_small_sequence: bool = len(sequences) < TOO_SMALL_SEQUENCE + is_too_large_sequence: bool = len(sequences) >= TOO_BIG_SEQUENCE + + if is_too_small_sequence: + logger.log( + TRACE, + "Trying to detect encoding from a tiny portion of ({}) byte(s).".format( + length + ), + ) + elif is_too_large_sequence: + logger.log( + TRACE, + "Using lazy str decoding because the payload is quite large, ({}) byte(s).".format( + length + ), + ) + + prioritized_encodings: list[str] = [] + + specified_encoding: str | None = ( + any_specified_encoding(sequences) if preemptive_behaviour else None + ) + + if specified_encoding is not None: + prioritized_encodings.append(specified_encoding) + logger.log( + TRACE, + "Detected declarative mark in sequence. Priority +1 given for %s.", + specified_encoding, + ) + + tested: set[str] = set() + tested_but_hard_failure: list[str] = [] + tested_but_soft_failure: list[str] = [] + soft_failure_skip: set[str] = set() + success_fast_tracked: set[str] = set() + + # Cache for decoded payload deduplication: hash(decoded_payload) -> (mean_mess_ratio, cd_ratios_merged, passed) + # When multiple encodings decode to the exact same string, we can skip the expensive + # mess_ratio and coherence_ratio analysis and reuse the results from the first encoding. + payload_result_cache: dict[int, tuple[float, list[tuple[str, float]], bool]] = {} + + # When a definitive result (chaos=0.0 and good coherence) is found after testing + # the prioritized encodings (ascii, utf_8), we can significantly reduce the remaining + # work. Encodings that target completely different language families (e.g., Cyrillic + # when the definitive match is Latin) are skipped entirely. + # Additionally, for same-family encodings that pass chaos probing, we reuse the + # definitive match's coherence ratios instead of recomputing them — a major savings + # since coherence_ratio accounts for ~30% of total time on slow Latin files. + definitive_match_found: bool = False + definitive_target_languages: set[str] = set() + # After the definitive match fires, we cap the number of additional same-family + # single-byte encodings that pass chaos probing. Once we've accumulated enough + # good candidates (N), further same-family SB encodings are unlikely to produce + # a better best() result and just waste mess_ratio + coherence_ratio time. + # The first encoding to trigger the definitive match is NOT counted (it's already in). + post_definitive_sb_success_count: int = 0 + POST_DEFINITIVE_SB_CAP: int = 7 + + # When a non-UTF multibyte encoding passes chaos probing with significant multibyte + # content (decoded length < 98% of raw length), skip all remaining single-byte encodings. + # Rationale: multi-byte decoders (CJK) have strict byte-sequence validation — if they + # decode without error AND pass chaos probing with substantial multibyte content, the + # data is genuinely multibyte encoded. Single-byte encodings will always decode (every + # byte maps to something) but waste time on mess_ratio before failing. + # The 98% threshold prevents false triggers on files that happen to have a few valid + # multibyte pairs (e.g., cp424/_ude_1.txt where big5 decodes with 99% ratio). + mb_definitive_match_found: bool = False + + fallback_ascii: CharsetMatch | None = None + fallback_u8: CharsetMatch | None = None + fallback_specified: CharsetMatch | None = None + + results: CharsetMatches = CharsetMatches() + + early_stop_results: CharsetMatches = CharsetMatches() + + sig_encoding, sig_payload = identify_sig_or_bom(sequences) + + if sig_encoding is not None: + prioritized_encodings.append(sig_encoding) + logger.log( + TRACE, + "Detected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.", + len(sig_payload), + sig_encoding, + ) + + prioritized_encodings.append("ascii") + + if "utf_8" not in prioritized_encodings: + prioritized_encodings.append("utf_8") + + for encoding_iana in prioritized_encodings + IANA_SUPPORTED_MB_FIRST: + if cp_isolation and encoding_iana not in cp_isolation: + continue + + if cp_exclusion and encoding_iana in cp_exclusion: + continue + + if encoding_iana in tested: + continue + + tested.add(encoding_iana) + + decoded_payload: str | None = None + bom_or_sig_available: bool = sig_encoding == encoding_iana + strip_sig_or_bom: bool = bom_or_sig_available and should_strip_sig_or_bom( + encoding_iana + ) + + if encoding_iana in {"utf_16", "utf_32"} and not bom_or_sig_available: + logger.log( + TRACE, + "Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.", + encoding_iana, + ) + continue + if encoding_iana in {"utf_7"} and not bom_or_sig_available: + logger.log( + TRACE, + "Encoding %s won't be tested as-is because detection is unreliable without BOM/SIG.", + encoding_iana, + ) + continue + + # Skip encodings similar to ones that already soft-failed (high mess ratio). + # Checked BEFORE the expensive decode attempt. + if encoding_iana in soft_failure_skip: + logger.log( + TRACE, + "%s is deemed too similar to a code page that was already considered unsuited. Continuing!", + encoding_iana, + ) + continue + + # Skip encodings that were already fast-tracked from a similar successful encoding. + if encoding_iana in success_fast_tracked: + logger.log( + TRACE, + "Skipping %s: already fast-tracked from a similar successful encoding.", + encoding_iana, + ) + continue + + try: + is_multi_byte_decoder: bool = is_multi_byte_encoding(encoding_iana) + except (ModuleNotFoundError, ImportError): # Defensive: + logger.log( + TRACE, + "Encoding %s does not provide an IncrementalDecoder", + encoding_iana, + ) + continue + + # When we've already found a definitive match (chaos=0.0 with good coherence) + # after testing the prioritized encodings, skip encodings that target + # completely different language families. This avoids running expensive + # mess_ratio + coherence_ratio on clearly unrelated candidates (e.g., Cyrillic + # when the definitive match is Latin-based). + if definitive_match_found: + if not is_multi_byte_decoder: + enc_languages = set(encoding_languages(encoding_iana)) + else: + enc_languages = set(mb_encoding_languages(encoding_iana)) + if not enc_languages.intersection(definitive_target_languages): + logger.log( + TRACE, + "Skipping %s: definitive match already found, this encoding targets different languages (%s vs %s).", + encoding_iana, + enc_languages, + definitive_target_languages, + ) + continue + + # After the definitive match, cap the number of additional same-family + # single-byte encodings that pass chaos probing. This avoids testing the + # tail of rare, low-value same-family encodings (mac_iceland, cp860, etc.) + # that almost never change best() but each cost ~1-2ms of mess_ratio + coherence. + if ( + definitive_match_found + and not is_multi_byte_decoder + and post_definitive_sb_success_count >= POST_DEFINITIVE_SB_CAP + ): + logger.log( + TRACE, + "Skipping %s: already accumulated %d same-family results after definitive match (cap=%d).", + encoding_iana, + post_definitive_sb_success_count, + POST_DEFINITIVE_SB_CAP, + ) + continue + + # When a multibyte encoding with significant multibyte content has already + # passed chaos probing, skip all single-byte encodings. They will either fail + # chaos probing (wasting mess_ratio time) or produce inferior results. + if mb_definitive_match_found and not is_multi_byte_decoder: + logger.log( + TRACE, + "Skipping single-byte %s: multi-byte definitive match already found.", + encoding_iana, + ) + continue + + try: + if is_too_large_sequence and is_multi_byte_decoder is False: + str( + ( + sequences[: int(50e4)] + if strip_sig_or_bom is False + else sequences[len(sig_payload) : int(50e4)] + ), + encoding=encoding_iana, + ) + else: + # UTF-7 BOM is encoded in modified Base64 whose byte boundary + # can overlap with the next character. Stripping raw SIG bytes + # before decoding may leave stray bytes that decode as garbage. + # Decode the full sequence and remove the leading BOM char instead. + # see https://github.com/jawah/charset_normalizer/issues/718 + # and https://github.com/jawah/charset_normalizer/issues/716 + if encoding_iana == "utf_7" and bom_or_sig_available: + decoded_payload = str( + sequences, + encoding=encoding_iana, + ) + if decoded_payload and decoded_payload[0] == "\ufeff": + decoded_payload = decoded_payload[1:] + else: + decoded_payload = str( + ( + sequences + if strip_sig_or_bom is False + else sequences[len(sig_payload) :] + ), + encoding=encoding_iana, + ) + except (UnicodeDecodeError, LookupError) as e: + if not isinstance(e, LookupError): + logger.log( + TRACE, + "Code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + tested_but_hard_failure.append(encoding_iana) + continue + + r_ = range( + 0 if not bom_or_sig_available else len(sig_payload), + length, + int(length / steps), + ) + + multi_byte_bonus: bool = ( + is_multi_byte_decoder + and decoded_payload is not None + and len(decoded_payload) < length + ) + + if multi_byte_bonus: + logger.log( + TRACE, + "Code page %s is a multi byte encoding table and it appear that at least one character " + "was encoded using n-bytes.", + encoding_iana, + ) + + # Payload-hash deduplication: if another encoding already decoded to the + # exact same string, reuse its mess_ratio and coherence results entirely. + # This is strictly more general than the old IANA_SUPPORTED_SIMILAR approach + # because it catches ALL identical decoding, not just pre-mapped ones. + if decoded_payload is not None and not is_multi_byte_decoder: + payload_hash: int = hash(decoded_payload) + cached = payload_result_cache.get(payload_hash) + if cached is not None: + cached_mess, cached_cd, cached_passed = cached + if cached_passed: + # The previous encoding with identical output passed chaos probing. + fast_match = CharsetMatch( + sequences, + encoding_iana, + cached_mess, + bom_or_sig_available, + cached_cd, + ( + decoded_payload + if ( + is_too_large_sequence is False + or encoding_iana + in [specified_encoding, "ascii", "utf_8"] + ) + else None + ), + preemptive_declaration=specified_encoding, + ) + results.append(fast_match) + success_fast_tracked.add(encoding_iana) + logger.log( + TRACE, + "%s fast-tracked (identical decoded payload to a prior encoding, chaos=%f %%).", + encoding_iana, + round(cached_mess * 100, ndigits=3), + ) + + if ( + encoding_iana in [specified_encoding, "ascii", "utf_8"] + and cached_mess < 0.1 + ): + if cached_mess == 0.0: + logger.debug( + "Encoding detection: %s is most likely the one.", + fast_match.encoding, + ) + if explain: + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([fast_match]) + early_stop_results.append(fast_match) + + if ( + len(early_stop_results) + and (specified_encoding is None or specified_encoding in tested) + and "ascii" in tested + and "utf_8" in tested + ): + probable_result: CharsetMatch = early_stop_results.best() # type: ignore[assignment] + logger.debug( + "Encoding detection: %s is most likely the one.", + probable_result.encoding, + ) + if explain: + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([probable_result]) + + continue + else: + # The previous encoding with identical output failed chaos probing. + tested_but_soft_failure.append(encoding_iana) + logger.log( + TRACE, + "%s fast-skipped (identical decoded payload to a prior encoding that failed chaos probing).", + encoding_iana, + ) + # Prepare fallbacks for special encodings even when skipped. + if enable_fallback and encoding_iana in [ + "ascii", + "utf_8", + specified_encoding, + "utf_16", + "utf_32", + ]: + fallback_entry = CharsetMatch( + sequences, + encoding_iana, + threshold, + bom_or_sig_available, + [], + decoded_payload, + preemptive_declaration=specified_encoding, + ) + if encoding_iana == specified_encoding: + fallback_specified = fallback_entry + elif encoding_iana == "ascii": + fallback_ascii = fallback_entry + else: + fallback_u8 = fallback_entry + continue + + max_chunk_gave_up: int = int(len(r_) / 4) + + max_chunk_gave_up = max(max_chunk_gave_up, 2) + early_stop_count: int = 0 + lazy_str_hard_failure = False + + md_chunks: list[str] = [] + md_ratios = [] + + try: + for chunk in cut_sequence_chunks( + sequences, + encoding_iana, + r_, + chunk_size, + bom_or_sig_available, + strip_sig_or_bom, + sig_payload, + is_multi_byte_decoder, + decoded_payload, + ): + md_chunks.append(chunk) + + md_ratios.append( + mess_ratio( + chunk, + threshold, + explain is True and 1 <= len(cp_isolation) <= 2, + ) + ) + + if md_ratios[-1] >= threshold: + early_stop_count += 1 + + if (early_stop_count >= max_chunk_gave_up) or ( + bom_or_sig_available and strip_sig_or_bom is False + ): + break + except ( + UnicodeDecodeError + ) as e: # Lazy str loading may have missed something there + logger.log( + TRACE, + "LazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + early_stop_count = max_chunk_gave_up + lazy_str_hard_failure = True + + # We might want to check the sequence again with the whole content + # Only if initial MD tests passes + if ( + not lazy_str_hard_failure + and is_too_large_sequence + and not is_multi_byte_decoder + ): + try: + sequences[int(50e3) :].decode(encoding_iana, errors="strict") + except UnicodeDecodeError as e: + logger.log( + TRACE, + "LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + tested_but_hard_failure.append(encoding_iana) + continue + + mean_mess_ratio: float = sum(md_ratios) / len(md_ratios) if md_ratios else 0.0 + if mean_mess_ratio >= threshold or early_stop_count >= max_chunk_gave_up: + tested_but_soft_failure.append(encoding_iana) + if encoding_iana in IANA_SUPPORTED_SIMILAR: + soft_failure_skip.update(IANA_SUPPORTED_SIMILAR[encoding_iana]) + # Cache this soft-failure so identical decoding from other encodings + # can be skipped immediately. + if decoded_payload is not None and not is_multi_byte_decoder: + payload_result_cache.setdefault( + hash(decoded_payload), (mean_mess_ratio, [], False) + ) + logger.log( + TRACE, + "%s was excluded because of initial chaos probing. Gave up %i time(s). " + "Computed mean chaos is %f %%.", + encoding_iana, + early_stop_count, + round(mean_mess_ratio * 100, ndigits=3), + ) + # Preparing those fallbacks in case we got nothing. + if ( + enable_fallback + and encoding_iana + in ["ascii", "utf_8", specified_encoding, "utf_16", "utf_32"] + and not lazy_str_hard_failure + ): + fallback_entry = CharsetMatch( + sequences, + encoding_iana, + threshold, + bom_or_sig_available, + [], + decoded_payload, + preemptive_declaration=specified_encoding, + ) + if encoding_iana == specified_encoding: + fallback_specified = fallback_entry + elif encoding_iana == "ascii": + fallback_ascii = fallback_entry + else: + fallback_u8 = fallback_entry + continue + + logger.log( + TRACE, + "%s passed initial chaos probing. Mean measured chaos is %f %%", + encoding_iana, + round(mean_mess_ratio * 100, ndigits=3), + ) + + if not is_multi_byte_decoder: + target_languages: list[str] = encoding_languages(encoding_iana) + else: + target_languages = mb_encoding_languages(encoding_iana) + + if target_languages: + logger.log( + TRACE, + "{} should target any language(s) of {}".format( + encoding_iana, str(target_languages) + ), + ) + + cd_ratios = [] + + # Run coherence detection on all chunks. We previously tried limiting to + # 1-2 chunks for post-definitive encodings to save time, but this caused + # coverage regressions by producing unrepresentative coherence scores. + # The SB cap and language-family skip optimizations provide sufficient + # speedup without sacrificing coherence accuracy. + if encoding_iana != "ascii": + # We shall skip the CD when its about ASCII + # Most of the time its not relevant to run "language-detection" on it. + for chunk in md_chunks: + chunk_languages = coherence_ratio( + chunk, + language_threshold, + ",".join(target_languages) if target_languages else None, + ) + + cd_ratios.append(chunk_languages) + cd_ratios_merged = merge_coherence_ratios(cd_ratios) + else: + cd_ratios_merged = merge_coherence_ratios(cd_ratios) + + if cd_ratios_merged: + logger.log( + TRACE, + "We detected language {} using {}".format( + cd_ratios_merged, encoding_iana + ), + ) + + current_match = CharsetMatch( + sequences, + encoding_iana, + mean_mess_ratio, + bom_or_sig_available, + cd_ratios_merged, + ( + decoded_payload + if ( + is_too_large_sequence is False + or encoding_iana in [specified_encoding, "ascii", "utf_8"] + ) + else None + ), + preemptive_declaration=specified_encoding, + ) + + results.append(current_match) + + # Cache the successful result for payload-hash deduplication. + if decoded_payload is not None and not is_multi_byte_decoder: + payload_result_cache.setdefault( + hash(decoded_payload), + (mean_mess_ratio, cd_ratios_merged, True), + ) + + # Count post-definitive same-family SB successes for the early termination cap. + # Only count low-mess encodings (< 2%) toward the cap. High-mess encodings are + # marginal results that shouldn't prevent better-quality candidates from being + # tested. For example, iso8859_4 (mess=0%) should not be skipped just because + # 7 high-mess Latin encodings (cp1252 at 8%, etc.) were tried first. + if ( + definitive_match_found + and not is_multi_byte_decoder + and mean_mess_ratio < 0.02 + ): + post_definitive_sb_success_count += 1 + + if ( + encoding_iana in [specified_encoding, "ascii", "utf_8"] + and mean_mess_ratio < 0.1 + ): + # If md says nothing to worry about, then... stop immediately! + if mean_mess_ratio == 0.0: + logger.debug( + "Encoding detection: %s is most likely the one.", + current_match.encoding, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([current_match]) + + early_stop_results.append(current_match) + + if ( + len(early_stop_results) + and (specified_encoding is None or specified_encoding in tested) + and "ascii" in tested + and "utf_8" in tested + ): + probable_result = early_stop_results.best() # type: ignore[assignment] + logger.debug( + "Encoding detection: %s is most likely the one.", + probable_result.encoding, # type: ignore[union-attr] + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + + return CharsetMatches([probable_result]) + + # Once we find a result with good coherence (>= 0.5) after testing the + # prioritized encodings (ascii, utf_8), activate "definitive mode": skip + # encodings that target completely different language families. This avoids + # running expensive mess_ratio + coherence_ratio on clearly unrelated + # candidates (e.g., Cyrillic encodings when the match is Latin-based). + # We require coherence >= 0.5 to avoid false positives (e.g., cp1251 decoding + # Hebrew text with 0.0 chaos but wrong language detection at coherence 0.33). + if not definitive_match_found and not is_multi_byte_decoder: + best_coherence = ( + max((v for _, v in cd_ratios_merged), default=0.0) + if cd_ratios_merged + else 0.0 + ) + if best_coherence >= 0.5 and "ascii" in tested and "utf_8" in tested: + definitive_match_found = True + definitive_target_languages.update(target_languages) + logger.log( + TRACE, + "Definitive match found: %s (chaos=%.3f, coherence=%.2f). Encodings targeting different language families will be skipped.", + encoding_iana, + mean_mess_ratio, + best_coherence, + ) + + # When a non-UTF multibyte encoding passes chaos probing with significant + # multibyte content (decoded < 98% of raw), activate mb_definitive_match. + # This skips all remaining single-byte encodings which would either soft-fail + # (running expensive mess_ratio for nothing) or produce inferior results. + if ( + not mb_definitive_match_found + and is_multi_byte_decoder + and multi_byte_bonus + and decoded_payload is not None + and len(decoded_payload) < length * 0.98 + and encoding_iana + not in { + "utf_8", + "utf_8_sig", + "utf_16", + "utf_16_be", + "utf_16_le", + "utf_32", + "utf_32_be", + "utf_32_le", + "utf_7", + } + and "ascii" in tested + and "utf_8" in tested + ): + mb_definitive_match_found = True + logger.log( + TRACE, + "Multi-byte definitive match: %s (chaos=%.3f, decoded=%d/%d=%.1f%%). Single-byte encodings will be skipped.", + encoding_iana, + mean_mess_ratio, + len(decoded_payload), + length, + len(decoded_payload) / length * 100, + ) + + if encoding_iana == sig_encoding: + logger.debug( + "Encoding detection: %s is most likely the one as we detected a BOM or SIG within " + "the beginning of the sequence.", + encoding_iana, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([results[encoding_iana]]) + + if len(results) == 0: + if fallback_u8 or fallback_ascii or fallback_specified: + logger.log( + TRACE, + "Nothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.", + ) + + if fallback_specified: + logger.debug( + "Encoding detection: %s will be used as a fallback match", + fallback_specified.encoding, + ) + results.append(fallback_specified) + elif ( + (fallback_u8 and fallback_ascii is None) + or ( + fallback_u8 + and fallback_ascii + and fallback_u8.fingerprint != fallback_ascii.fingerprint + ) + or (fallback_u8 is not None) + ): + logger.debug("Encoding detection: utf_8 will be used as a fallback match") + results.append(fallback_u8) + elif fallback_ascii: + logger.debug("Encoding detection: ascii will be used as a fallback match") + results.append(fallback_ascii) + + if results: + logger.debug( + "Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.", + results.best().encoding, # type: ignore + len(results) - 1, + ) + else: + logger.debug("Encoding detection: Unable to determine any suitable charset.") + + if explain: + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + + return results + + +def from_fp( + fp: BinaryIO, + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Same thing than the function from_bytes but using a file pointer that is already ready. + Will not close the file pointer. + """ + return from_bytes( + fp.read(), + steps, + chunk_size, + threshold, + cp_isolation, + cp_exclusion, + preemptive_behaviour, + explain, + language_threshold, + enable_fallback, + ) + + +def from_path( + path: str | bytes | PathLike, # type: ignore[type-arg] + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode. + Can raise IOError. + """ + with open(path, "rb") as fp: + return from_fp( + fp, + steps, + chunk_size, + threshold, + cp_isolation, + cp_exclusion, + preemptive_behaviour, + explain, + language_threshold, + enable_fallback, + ) + + +def is_binary( + fp_or_path_or_payload: PathLike | str | BinaryIO | bytes, # type: ignore[type-arg] + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = False, +) -> bool: + """ + Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string. + Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match + are disabled to be stricter around ASCII-compatible but unlikely to be a string. + """ + if isinstance(fp_or_path_or_payload, (str, PathLike)): + guesses = from_path( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + elif isinstance( + fp_or_path_or_payload, + ( + bytes, + bytearray, + ), + ): + guesses = from_bytes( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + else: + guesses = from_fp( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + + return not guesses diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so b/venv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000..dffe3e4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/cd.py b/venv/lib/python3.12/site-packages/charset_normalizer/cd.py new file mode 100644 index 0000000..9545d35 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/cd.py @@ -0,0 +1,454 @@ +from __future__ import annotations + +import importlib +from codecs import IncrementalDecoder +from collections import Counter +from functools import lru_cache +from typing import Counter as TypeCounter + +from .constant import ( + FREQUENCIES, + KO_NAMES, + LANGUAGE_SUPPORTED_COUNT, + TOO_SMALL_SEQUENCE, + ZH_NAMES, + _FREQUENCIES_SET, + _FREQUENCIES_RANK, +) +from .md import is_suspiciously_successive_range +from .models import CoherenceMatches +from .utils import ( + is_accentuated, + is_latin, + is_multi_byte_encoding, + is_unicode_range_secondary, + unicode_range, +) + + +def encoding_unicode_range(iana_name: str) -> list[str]: + """ + Return associated unicode ranges in a single byte code page. + """ + if is_multi_byte_encoding(iana_name): + raise OSError( # Defensive: + "Function not supported on multi-byte code page" + ) + + decoder = importlib.import_module(f"encodings.{iana_name}").IncrementalDecoder + + p: IncrementalDecoder = decoder(errors="ignore") + seen_ranges: dict[str, int] = {} + character_count: int = 0 + + for i in range(0x40, 0xFF): + chunk: str = p.decode(bytes([i])) + + if chunk: + character_range: str | None = unicode_range(chunk) + + if character_range is None: + continue + + if is_unicode_range_secondary(character_range) is False: + if character_range not in seen_ranges: + seen_ranges[character_range] = 0 + seen_ranges[character_range] += 1 + character_count += 1 + + return sorted( + [ + character_range + for character_range in seen_ranges + if seen_ranges[character_range] / character_count >= 0.15 + ] + ) + + +def unicode_range_languages(primary_range: str) -> list[str]: + """ + Return inferred languages used with a unicode range. + """ + languages: list[str] = [] + + for language, characters in FREQUENCIES.items(): + for character in characters: + if unicode_range(character) == primary_range: + languages.append(language) + break + + return languages + + +@lru_cache() +def encoding_languages(iana_name: str) -> list[str]: + """ + Single-byte encoding language association. Some code page are heavily linked to particular language(s). + This function does the correspondence. + """ + unicode_ranges: list[str] = encoding_unicode_range(iana_name) + primary_range: str | None = None + + for specified_range in unicode_ranges: + if "Latin" not in specified_range: + primary_range = specified_range + break + + if primary_range is None: + return ["Latin Based"] + + return unicode_range_languages(primary_range) + + +@lru_cache() +def mb_encoding_languages(iana_name: str) -> list[str]: + """ + Multi-byte encoding language association. Some code page are heavily linked to particular language(s). + This function does the correspondence. + """ + if ( + iana_name.startswith("shift_") + or iana_name.startswith("iso2022_jp") + or iana_name.startswith("euc_j") + or iana_name == "cp932" + ): + return ["Japanese"] + if iana_name.startswith("gb") or iana_name in ZH_NAMES: + return ["Chinese"] + if iana_name.startswith("iso2022_kr") or iana_name in KO_NAMES: + return ["Korean"] + + return [] + + +@lru_cache(maxsize=LANGUAGE_SUPPORTED_COUNT) +def get_target_features(language: str) -> tuple[bool, bool]: + """ + Determine main aspects from a supported language if it contains accents and if is pure Latin. + """ + target_have_accents: bool = False + target_pure_latin: bool = True + + for character in FREQUENCIES[language]: + if not target_have_accents and is_accentuated(character): + target_have_accents = True + if target_pure_latin and is_latin(character) is False: + target_pure_latin = False + + return target_have_accents, target_pure_latin + + +def alphabet_languages( + characters: list[str], ignore_non_latin: bool = False +) -> list[str]: + """ + Return associated languages associated to given characters. + """ + languages: list[tuple[str, float]] = [] + + characters_set: frozenset[str] = frozenset(characters) + source_have_accents = any(is_accentuated(character) for character in characters) + + for language, language_characters in FREQUENCIES.items(): + target_have_accents, target_pure_latin = get_target_features(language) + + if ignore_non_latin and target_pure_latin is False: + continue + + if target_have_accents is False and source_have_accents: + continue + + character_count: int = len(language_characters) + + character_match_count: int = len(_FREQUENCIES_SET[language] & characters_set) + + ratio: float = character_match_count / character_count + + if ratio >= 0.2: + languages.append((language, ratio)) + + languages = sorted(languages, key=lambda x: x[1], reverse=True) + + return [compatible_language[0] for compatible_language in languages] + + +def characters_popularity_compare( + language: str, ordered_characters: list[str] +) -> float: + """ + Determine if a ordered characters list (by occurrence from most appearance to rarest) match a particular language. + The result is a ratio between 0. (absolutely no correspondence) and 1. (near perfect fit). + Beware that is function is not strict on the match in order to ease the detection. (Meaning close match is 1.) + """ + if language not in FREQUENCIES: + raise ValueError(f"{language} not available") # Defensive: + + character_approved_count: int = 0 + frequencies_language_set: frozenset[str] = _FREQUENCIES_SET[language] + lang_rank: dict[str, int] = _FREQUENCIES_RANK[language] + + ordered_characters_count: int = len(ordered_characters) + target_language_characters_count: int = len(FREQUENCIES[language]) + + large_alphabet: bool = target_language_characters_count > 26 + + expected_projection_ratio: float = ( + target_language_characters_count / ordered_characters_count + ) + + # Pre-built rank dict for ordered_characters (avoids repeated list slicing). + ordered_rank: dict[str, int] = { + char: rank for rank, char in enumerate(ordered_characters) + } + + # Pre-compute characters common to both orderings. + # Avoids repeated `c in ordered_rank` dict lookups in the inner counts. + common_chars: list[tuple[int, int]] = [ + (lr, ordered_rank[c]) for c, lr in lang_rank.items() if c in ordered_rank + ] + + # Pre-extract lr and orr arrays for faster iteration in the inner loop. + # Plain integer loops with local arrays are much faster under mypyc than + # generator expression sums over a list of tuples. + common_count: int = len(common_chars) + common_lr: list[int] = [p[0] for p in common_chars] + common_orr: list[int] = [p[1] for p in common_chars] + + for character, character_rank in zip( + ordered_characters, range(0, ordered_characters_count) + ): + if character not in frequencies_language_set: + continue + + character_rank_in_language: int = lang_rank[character] + character_rank_projection: int = int(character_rank * expected_projection_ratio) + + if ( + large_alphabet is False + and abs(character_rank_projection - character_rank_in_language) > 4 + ): + continue + + if ( + large_alphabet is True + and abs(character_rank_projection - character_rank_in_language) + < target_language_characters_count / 3 + ): + character_approved_count += 1 + continue + + # Count how many characters appear "before" in both orderings, + # and how many appear "at or after" in both orderings. + # Single pass over pre-extracted arrays — much faster under mypyc + # than two generator expression sums. + before_match_count: int = 0 + after_match_count: int = 0 + for i in range(common_count): + lr_i: int = common_lr[i] + orr_i: int = common_orr[i] + if lr_i < character_rank_in_language: + if orr_i < character_rank: + before_match_count += 1 + else: + if orr_i >= character_rank: + after_match_count += 1 + + after_len: int = target_language_characters_count - character_rank_in_language + + if character_rank_in_language == 0 and before_match_count <= 4: + character_approved_count += 1 + continue + + if after_len == 0 and after_match_count <= 4: + character_approved_count += 1 + continue + + if ( + character_rank_in_language > 0 + and before_match_count / character_rank_in_language >= 0.4 + ) or (after_len > 0 and after_match_count / after_len >= 0.4): + character_approved_count += 1 + continue + + return character_approved_count / len(ordered_characters) + + +def alpha_unicode_split(decoded_sequence: str) -> list[str]: + """ + Given a decoded text sequence, return a list of str. Unicode range / alphabet separation. + Ex. a text containing English/Latin with a bit a Hebrew will return two items in the resulting list; + One containing the latin letters and the other hebrew. + """ + layers: dict[str, list[str]] = {} + + # Fast path: track single-layer key to skip dict iteration for single-script text. + single_layer_key: str | None = None + multi_layer: bool = False + + # Cache the last character_range and its resolved layer to avoid repeated + # is_suspiciously_successive_range calls for consecutive same-range chars. + prev_character_range: str | None = None + prev_layer_target: str | None = None + + for character in decoded_sequence: + if character.isalpha() is False: + continue + + # ASCII fast-path: a-z and A-Z are always "Basic Latin". + # Avoids unicode_range() function call overhead for the most common case. + character_ord: int = ord(character) + if character_ord < 128: + character_range: str | None = "Basic Latin" + else: + character_range = unicode_range(character) + + if character_range is None: + continue + + # Fast path: same range as previous character → reuse cached layer target. + if character_range == prev_character_range: + if prev_layer_target is not None: + layers[prev_layer_target].append(character) + continue + + layer_target_range: str | None = None + + if multi_layer: + for discovered_range in layers: + if ( + is_suspiciously_successive_range(discovered_range, character_range) + is False + ): + layer_target_range = discovered_range + break + elif single_layer_key is not None: + if ( + is_suspiciously_successive_range(single_layer_key, character_range) + is False + ): + layer_target_range = single_layer_key + + if layer_target_range is None: + layer_target_range = character_range + + if layer_target_range not in layers: + layers[layer_target_range] = [] + if single_layer_key is None: + single_layer_key = layer_target_range + else: + multi_layer = True + + layers[layer_target_range].append(character) + + # Cache for next iteration + prev_character_range = character_range + prev_layer_target = layer_target_range + + return ["".join(chars).lower() for chars in layers.values()] + + +def merge_coherence_ratios(results: list[CoherenceMatches]) -> CoherenceMatches: + """ + This function merge results previously given by the function coherence_ratio. + The return type is the same as coherence_ratio. + """ + per_language_ratios: dict[str, list[float]] = {} + for result in results: + for sub_result in result: + language, ratio = sub_result + if language not in per_language_ratios: + per_language_ratios[language] = [ratio] + continue + per_language_ratios[language].append(ratio) + + merge = [ + ( + language, + round( + sum(per_language_ratios[language]) / len(per_language_ratios[language]), + 4, + ), + ) + for language in per_language_ratios + ] + + return sorted(merge, key=lambda x: x[1], reverse=True) + + +def filter_alt_coherence_matches(results: CoherenceMatches) -> CoherenceMatches: + """ + We shall NOT return "English—" in CoherenceMatches because it is an alternative + of "English". This function only keeps the best match and remove the em-dash in it. + """ + index_results: dict[str, list[float]] = dict() + + for result in results: + language, ratio = result + no_em_name: str = language.replace("—", "") + + if no_em_name not in index_results: + index_results[no_em_name] = [] + + index_results[no_em_name].append(ratio) + + if any(len(index_results[e]) > 1 for e in index_results): + filtered_results: CoherenceMatches = [] + + for language in index_results: + filtered_results.append((language, max(index_results[language]))) + + return filtered_results + + return results + + +@lru_cache(maxsize=2048) +def coherence_ratio( + decoded_sequence: str, threshold: float = 0.1, lg_inclusion: str | None = None +) -> CoherenceMatches: + """ + Detect ANY language that can be identified in given sequence. The sequence will be analysed by layers. + A layer = Character extraction by alphabets/ranges. + """ + + results: list[tuple[str, float]] = [] + ignore_non_latin: bool = False + + sufficient_match_count: int = 0 + + lg_inclusion_list = lg_inclusion.split(",") if lg_inclusion is not None else [] + if "Latin Based" in lg_inclusion_list: + ignore_non_latin = True + lg_inclusion_list.remove("Latin Based") + + for layer in alpha_unicode_split(decoded_sequence): + sequence_frequencies: TypeCounter[str] = Counter(layer) + most_common = sequence_frequencies.most_common() + + character_count: int = len(layer) + + if character_count <= TOO_SMALL_SEQUENCE: + continue + + popular_character_ordered: list[str] = [c for c, o in most_common] + + for language in lg_inclusion_list or alphabet_languages( + popular_character_ordered, ignore_non_latin + ): + ratio: float = characters_popularity_compare( + language, popular_character_ordered + ) + + if ratio < threshold: + continue + elif ratio >= 0.8: + sufficient_match_count += 1 + + results.append((language, round(ratio, 4))) + + if sufficient_match_count >= 3: + break + + return sorted( + filter_alt_coherence_matches(results), key=lambda x: x[1], reverse=True + ) diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py b/venv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py new file mode 100644 index 0000000..543a5a4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from .__main__ import cli_detect, query_yes_no + +__all__ = ( + "cli_detect", + "query_yes_no", +) diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py b/venv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py new file mode 100644 index 0000000..ad843c1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py @@ -0,0 +1,362 @@ +from __future__ import annotations + +import argparse +import sys +import typing +from json import dumps +from os.path import abspath, basename, dirname, join, realpath +from platform import python_version +from unicodedata import unidata_version + +import charset_normalizer.md as md_module +from charset_normalizer import from_fp +from charset_normalizer.models import CliDetectionResult +from charset_normalizer.version import __version__ + + +def query_yes_no(question: str, default: str = "yes") -> bool: # Defensive: + """Ask a yes/no question via input() and return the answer as a bool.""" + prompt = " [Y/n] " if default == "yes" else " [y/N] " + + while True: + choice = input(question + prompt).strip().lower() + if not choice: + return default == "yes" + if choice in ("y", "yes"): + return True + if choice in ("n", "no"): + return False + print("Please respond with 'y' or 'n'.") + + +class FileType: + """Factory for creating file object types + + Instances of FileType are typically passed as type= arguments to the + ArgumentParser add_argument() method. + + Keyword Arguments: + - mode -- A string indicating how the file is to be opened. Accepts the + same values as the builtin open() function. + - bufsize -- The file's desired buffer size. Accepts the same values as + the builtin open() function. + - encoding -- The file's encoding. Accepts the same values as the + builtin open() function. + - errors -- A string indicating how encoding and decoding errors are to + be handled. Accepts the same value as the builtin open() function. + + Backported from CPython 3.12 + """ + + def __init__( + self, + mode: str = "r", + bufsize: int = -1, + encoding: str | None = None, + errors: str | None = None, + ): + self._mode = mode + self._bufsize = bufsize + self._encoding = encoding + self._errors = errors + + def __call__(self, string: str) -> typing.IO: # type: ignore[type-arg] + # the special argument "-" means sys.std{in,out} + if string == "-": + if "r" in self._mode: + return sys.stdin.buffer if "b" in self._mode else sys.stdin + elif any(c in self._mode for c in "wax"): + return sys.stdout.buffer if "b" in self._mode else sys.stdout + else: + msg = f'argument "-" with mode {self._mode}' + raise ValueError(msg) + + # all other arguments are used as file names + try: + return open(string, self._mode, self._bufsize, self._encoding, self._errors) + except OSError as e: + message = f"can't open '{string}': {e}" + raise argparse.ArgumentTypeError(message) + + def __repr__(self) -> str: + args = self._mode, self._bufsize + kwargs = [("encoding", self._encoding), ("errors", self._errors)] + args_str = ", ".join( + [repr(arg) for arg in args if arg != -1] + + [f"{kw}={arg!r}" for kw, arg in kwargs if arg is not None] + ) + return f"{type(self).__name__}({args_str})" + + +def cli_detect(argv: list[str] | None = None) -> int: + """ + CLI assistant using ARGV and ArgumentParser + :param argv: + :return: 0 if everything is fine, anything else equal trouble + """ + parser = argparse.ArgumentParser( + description="The Real First Universal Charset Detector. " + "Discover originating encoding used on text file. " + "Normalize text to unicode." + ) + + parser.add_argument( + "files", type=FileType("rb"), nargs="+", help="File(s) to be analysed" + ) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + default=False, + dest="verbose", + help="Display complementary information about file if any. " + "Stdout will contain logs about the detection process.", + ) + parser.add_argument( + "-a", + "--with-alternative", + action="store_true", + default=False, + dest="alternatives", + help="Output complementary possibilities if any. Top-level JSON WILL be a list.", + ) + parser.add_argument( + "-n", + "--normalize", + action="store_true", + default=False, + dest="normalize", + help="Permit to normalize input file. If not set, program does not write anything.", + ) + parser.add_argument( + "-m", + "--minimal", + action="store_true", + default=False, + dest="minimal", + help="Only output the charset detected to STDOUT. Disabling JSON output.", + ) + parser.add_argument( + "-r", + "--replace", + action="store_true", + default=False, + dest="replace", + help="Replace file when trying to normalize it instead of creating a new one.", + ) + parser.add_argument( + "-f", + "--force", + action="store_true", + default=False, + dest="force", + help="Replace file without asking if you are sure, use this flag with caution.", + ) + parser.add_argument( + "-i", + "--no-preemptive", + action="store_true", + default=False, + dest="no_preemptive", + help="Disable looking at a charset declaration to hint the detector.", + ) + parser.add_argument( + "-t", + "--threshold", + action="store", + default=0.2, + type=float, + dest="threshold", + help="Define a custom maximum amount of noise allowed in decoded content. 0. <= noise <= 1.", + ) + parser.add_argument( + "--version", + action="version", + version="Charset-Normalizer {} - Python {} - Unicode {} - SpeedUp {}".format( + __version__, + python_version(), + unidata_version, + "OFF" if md_module.__file__.lower().endswith(".py") else "ON", + ), + help="Show version information and exit.", + ) + + args = parser.parse_args(argv) + + if args.replace is True and args.normalize is False: + if args.files: + for my_file in args.files: + my_file.close() + print("Use --replace in addition of --normalize only.", file=sys.stderr) + return 1 + + if args.force is True and args.replace is False: + if args.files: + for my_file in args.files: + my_file.close() + print("Use --force in addition of --replace only.", file=sys.stderr) + return 1 + + if args.threshold < 0.0 or args.threshold > 1.0: + if args.files: + for my_file in args.files: + my_file.close() + print("--threshold VALUE should be between 0. AND 1.", file=sys.stderr) + return 1 + + x_ = [] + + for my_file in args.files: + matches = from_fp( + my_file, + threshold=args.threshold, + explain=args.verbose, + preemptive_behaviour=args.no_preemptive is False, + ) + + best_guess = matches.best() + + if best_guess is None: + print( + 'Unable to identify originating encoding for "{}". {}'.format( + my_file.name, + ( + "Maybe try increasing maximum amount of chaos." + if args.threshold < 1.0 + else "" + ), + ), + file=sys.stderr, + ) + x_.append( + CliDetectionResult( + abspath(my_file.name), + None, + [], + [], + "Unknown", + [], + False, + 1.0, + 0.0, + None, + True, + ) + ) + else: + cli_result = CliDetectionResult( + abspath(my_file.name), + best_guess.encoding, + best_guess.encoding_aliases, + [ + cp + for cp in best_guess.could_be_from_charset + if cp != best_guess.encoding + ], + best_guess.language, + best_guess.alphabets, + best_guess.bom, + best_guess.percent_chaos, + best_guess.percent_coherence, + None, + True, + ) + x_.append(cli_result) + + if len(matches) > 1 and args.alternatives: + for el in matches: + if el != best_guess: + x_.append( + CliDetectionResult( + abspath(my_file.name), + el.encoding, + el.encoding_aliases, + [ + cp + for cp in el.could_be_from_charset + if cp != el.encoding + ], + el.language, + el.alphabets, + el.bom, + el.percent_chaos, + el.percent_coherence, + None, + False, + ) + ) + + if args.normalize is True: + if best_guess.encoding.startswith("utf") is True: + print( + '"{}" file does not need to be normalized, as it already came from unicode.'.format( + my_file.name + ), + file=sys.stderr, + ) + if my_file.closed is False: + my_file.close() + continue + + dir_path = dirname(realpath(my_file.name)) + file_name = basename(realpath(my_file.name)) + + o_: list[str] = file_name.split(".") + + if args.replace is False: + o_.insert(-1, best_guess.encoding) + if my_file.closed is False: + my_file.close() + elif ( + args.force is False + and query_yes_no( + 'Are you sure to normalize "{}" by replacing it ?'.format( + my_file.name + ), + "no", + ) + is False + ): + if my_file.closed is False: + my_file.close() + continue + + try: + cli_result.unicode_path = join(dir_path, ".".join(o_)) + + with open(cli_result.unicode_path, "wb") as fp: + fp.write(best_guess.output()) + except OSError as e: # Defensive: + print(str(e), file=sys.stderr) + if my_file.closed is False: + my_file.close() + return 2 + + if my_file.closed is False: + my_file.close() + + if args.minimal is False: + print( + dumps( + [el.__dict__ for el in x_] if len(x_) > 1 else x_[0].__dict__, + ensure_ascii=True, + indent=4, + ) + ) + else: + for my_file in args.files: + print( + ", ".join( + [ + el.encoding or "undefined" + for el in x_ + if el.path == abspath(my_file.name) + ] + ) + ) + + return 0 + + +if __name__ == "__main__": # Defensive: + cli_detect() diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..732c315 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..a5dade0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/constant.py b/venv/lib/python3.12/site-packages/charset_normalizer/constant.py new file mode 100644 index 0000000..e1297d2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/constant.py @@ -0,0 +1,2050 @@ +from __future__ import annotations + +from codecs import BOM_UTF8, BOM_UTF16_BE, BOM_UTF16_LE, BOM_UTF32_BE, BOM_UTF32_LE +from encodings.aliases import aliases +from re import IGNORECASE +from re import compile as re_compile + +# Contain for each eligible encoding a list of/item bytes SIG/BOM +ENCODING_MARKS: dict[str, bytes | list[bytes]] = { + "utf_8": BOM_UTF8, + "utf_7": [ + b"\x2b\x2f\x76\x38\x2d", + b"\x2b\x2f\x76\x38", + b"\x2b\x2f\x76\x39", + b"\x2b\x2f\x76\x2b", + b"\x2b\x2f\x76\x2f", + ], + "gb18030": b"\x84\x31\x95\x33", + "utf_32": [BOM_UTF32_BE, BOM_UTF32_LE], + "utf_16": [BOM_UTF16_BE, BOM_UTF16_LE], +} + +TOO_SMALL_SEQUENCE: int = 32 +TOO_BIG_SEQUENCE: int = int(10e6) + +UTF8_MAXIMAL_ALLOCATION: int = 1_112_064 + +# Up-to-date Unicode ucd/17.0.0 +UNICODE_RANGES_COMBINED: dict[str, range] = { + "Control character": range(32), + "Basic Latin": range(32, 128), + "Latin-1 Supplement": range(128, 256), + "Latin Extended-A": range(256, 384), + "Latin Extended-B": range(384, 592), + "IPA Extensions": range(592, 688), + "Spacing Modifier Letters": range(688, 768), + "Combining Diacritical Marks": range(768, 880), + "Greek and Coptic": range(880, 1024), + "Cyrillic": range(1024, 1280), + "Cyrillic Supplement": range(1280, 1328), + "Armenian": range(1328, 1424), + "Hebrew": range(1424, 1536), + "Arabic": range(1536, 1792), + "Syriac": range(1792, 1872), + "Arabic Supplement": range(1872, 1920), + "Thaana": range(1920, 1984), + "NKo": range(1984, 2048), + "Samaritan": range(2048, 2112), + "Mandaic": range(2112, 2144), + "Syriac Supplement": range(2144, 2160), + "Arabic Extended-B": range(2160, 2208), + "Arabic Extended-A": range(2208, 2304), + "Devanagari": range(2304, 2432), + "Bengali": range(2432, 2560), + "Gurmukhi": range(2560, 2688), + "Gujarati": range(2688, 2816), + "Oriya": range(2816, 2944), + "Tamil": range(2944, 3072), + "Telugu": range(3072, 3200), + "Kannada": range(3200, 3328), + "Malayalam": range(3328, 3456), + "Sinhala": range(3456, 3584), + "Thai": range(3584, 3712), + "Lao": range(3712, 3840), + "Tibetan": range(3840, 4096), + "Myanmar": range(4096, 4256), + "Georgian": range(4256, 4352), + "Hangul Jamo": range(4352, 4608), + "Ethiopic": range(4608, 4992), + "Ethiopic Supplement": range(4992, 5024), + "Cherokee": range(5024, 5120), + "Unified Canadian Aboriginal Syllabics": range(5120, 5760), + "Ogham": range(5760, 5792), + "Runic": range(5792, 5888), + "Tagalog": range(5888, 5920), + "Hanunoo": range(5920, 5952), + "Buhid": range(5952, 5984), + "Tagbanwa": range(5984, 6016), + "Khmer": range(6016, 6144), + "Mongolian": range(6144, 6320), + "Unified Canadian Aboriginal Syllabics Extended": range(6320, 6400), + "Limbu": range(6400, 6480), + "Tai Le": range(6480, 6528), + "New Tai Lue": range(6528, 6624), + "Khmer Symbols": range(6624, 6656), + "Buginese": range(6656, 6688), + "Tai Tham": range(6688, 6832), + "Combining Diacritical Marks Extended": range(6832, 6912), + "Balinese": range(6912, 7040), + "Sundanese": range(7040, 7104), + "Batak": range(7104, 7168), + "Lepcha": range(7168, 7248), + "Ol Chiki": range(7248, 7296), + "Cyrillic Extended-C": range(7296, 7312), + "Georgian Extended": range(7312, 7360), + "Sundanese Supplement": range(7360, 7376), + "Vedic Extensions": range(7376, 7424), + "Phonetic Extensions": range(7424, 7552), + "Phonetic Extensions Supplement": range(7552, 7616), + "Combining Diacritical Marks Supplement": range(7616, 7680), + "Latin Extended Additional": range(7680, 7936), + "Greek Extended": range(7936, 8192), + "General Punctuation": range(8192, 8304), + "Superscripts and Subscripts": range(8304, 8352), + "Currency Symbols": range(8352, 8400), + "Combining Diacritical Marks for Symbols": range(8400, 8448), + "Letterlike Symbols": range(8448, 8528), + "Number Forms": range(8528, 8592), + "Arrows": range(8592, 8704), + "Mathematical Operators": range(8704, 8960), + "Miscellaneous Technical": range(8960, 9216), + "Control Pictures": range(9216, 9280), + "Optical Character Recognition": range(9280, 9312), + "Enclosed Alphanumerics": range(9312, 9472), + "Box Drawing": range(9472, 9600), + "Block Elements": range(9600, 9632), + "Geometric Shapes": range(9632, 9728), + "Miscellaneous Symbols": range(9728, 9984), + "Dingbats": range(9984, 10176), + "Miscellaneous Mathematical Symbols-A": range(10176, 10224), + "Supplemental Arrows-A": range(10224, 10240), + "Braille Patterns": range(10240, 10496), + "Supplemental Arrows-B": range(10496, 10624), + "Miscellaneous Mathematical Symbols-B": range(10624, 10752), + "Supplemental Mathematical Operators": range(10752, 11008), + "Miscellaneous Symbols and Arrows": range(11008, 11264), + "Glagolitic": range(11264, 11360), + "Latin Extended-C": range(11360, 11392), + "Coptic": range(11392, 11520), + "Georgian Supplement": range(11520, 11568), + "Tifinagh": range(11568, 11648), + "Ethiopic Extended": range(11648, 11744), + "Cyrillic Extended-A": range(11744, 11776), + "Supplemental Punctuation": range(11776, 11904), + "CJK Radicals Supplement": range(11904, 12032), + "Kangxi Radicals": range(12032, 12256), + "Ideographic Description Characters": range(12272, 12288), + "CJK Symbols and Punctuation": range(12288, 12352), + "Hiragana": range(12352, 12448), + "Katakana": range(12448, 12544), + "Bopomofo": range(12544, 12592), + "Hangul Compatibility Jamo": range(12592, 12688), + "Kanbun": range(12688, 12704), + "Bopomofo Extended": range(12704, 12736), + "CJK Strokes": range(12736, 12784), + "Katakana Phonetic Extensions": range(12784, 12800), + "Enclosed CJK Letters and Months": range(12800, 13056), + "CJK Compatibility": range(13056, 13312), + "CJK Unified Ideographs Extension A": range(13312, 19904), + "Yijing Hexagram Symbols": range(19904, 19968), + "CJK Unified Ideographs": range(19968, 40960), + "Yi Syllables": range(40960, 42128), + "Yi Radicals": range(42128, 42192), + "Lisu": range(42192, 42240), + "Vai": range(42240, 42560), + "Cyrillic Extended-B": range(42560, 42656), + "Bamum": range(42656, 42752), + "Modifier Tone Letters": range(42752, 42784), + "Latin Extended-D": range(42784, 43008), + "Syloti Nagri": range(43008, 43056), + "Common Indic Number Forms": range(43056, 43072), + "Phags-pa": range(43072, 43136), + "Saurashtra": range(43136, 43232), + "Devanagari Extended": range(43232, 43264), + "Kayah Li": range(43264, 43312), + "Rejang": range(43312, 43360), + "Hangul Jamo Extended-A": range(43360, 43392), + "Javanese": range(43392, 43488), + "Myanmar Extended-B": range(43488, 43520), + "Cham": range(43520, 43616), + "Myanmar Extended-A": range(43616, 43648), + "Tai Viet": range(43648, 43744), + "Meetei Mayek Extensions": range(43744, 43776), + "Ethiopic Extended-A": range(43776, 43824), + "Latin Extended-E": range(43824, 43888), + "Cherokee Supplement": range(43888, 43968), + "Meetei Mayek": range(43968, 44032), + "Hangul Syllables": range(44032, 55216), + "Hangul Jamo Extended-B": range(55216, 55296), + "High Surrogates": range(55296, 56192), + "High Private Use Surrogates": range(56192, 56320), + "Low Surrogates": range(56320, 57344), + "Private Use Area": range(57344, 63744), + "CJK Compatibility Ideographs": range(63744, 64256), + "Alphabetic Presentation Forms": range(64256, 64336), + "Arabic Presentation Forms-A": range(64336, 65024), + "Variation Selectors": range(65024, 65040), + "Vertical Forms": range(65040, 65056), + "Combining Half Marks": range(65056, 65072), + "CJK Compatibility Forms": range(65072, 65104), + "Small Form Variants": range(65104, 65136), + "Arabic Presentation Forms-B": range(65136, 65280), + "Halfwidth and Fullwidth Forms": range(65280, 65520), + "Specials": range(65520, 65536), + "Linear B Syllabary": range(65536, 65664), + "Linear B Ideograms": range(65664, 65792), + "Aegean Numbers": range(65792, 65856), + "Ancient Greek Numbers": range(65856, 65936), + "Ancient Symbols": range(65936, 66000), + "Phaistos Disc": range(66000, 66048), + "Lycian": range(66176, 66208), + "Carian": range(66208, 66272), + "Coptic Epact Numbers": range(66272, 66304), + "Old Italic": range(66304, 66352), + "Gothic": range(66352, 66384), + "Old Permic": range(66384, 66432), + "Ugaritic": range(66432, 66464), + "Old Persian": range(66464, 66528), + "Deseret": range(66560, 66640), + "Shavian": range(66640, 66688), + "Osmanya": range(66688, 66736), + "Osage": range(66736, 66816), + "Elbasan": range(66816, 66864), + "Caucasian Albanian": range(66864, 66928), + "Vithkuqi": range(66928, 67008), + "Todhri": range(67008, 67072), + "Linear A": range(67072, 67456), + "Latin Extended-F": range(67456, 67520), + "Cypriot Syllabary": range(67584, 67648), + "Imperial Aramaic": range(67648, 67680), + "Palmyrene": range(67680, 67712), + "Nabataean": range(67712, 67760), + "Hatran": range(67808, 67840), + "Phoenician": range(67840, 67872), + "Lydian": range(67872, 67904), + "Sidetic": range(67904, 67936), + "Meroitic Hieroglyphs": range(67968, 68000), + "Meroitic Cursive": range(68000, 68096), + "Kharoshthi": range(68096, 68192), + "Old South Arabian": range(68192, 68224), + "Old North Arabian": range(68224, 68256), + "Manichaean": range(68288, 68352), + "Avestan": range(68352, 68416), + "Inscriptional Parthian": range(68416, 68448), + "Inscriptional Pahlavi": range(68448, 68480), + "Psalter Pahlavi": range(68480, 68528), + "Old Turkic": range(68608, 68688), + "Old Hungarian": range(68736, 68864), + "Hanifi Rohingya": range(68864, 68928), + "Garay": range(68928, 69008), + "Rumi Numeral Symbols": range(69216, 69248), + "Yezidi": range(69248, 69312), + "Arabic Extended-C": range(69312, 69376), + "Old Sogdian": range(69376, 69424), + "Sogdian": range(69424, 69488), + "Old Uyghur": range(69488, 69552), + "Chorasmian": range(69552, 69600), + "Elymaic": range(69600, 69632), + "Brahmi": range(69632, 69760), + "Kaithi": range(69760, 69840), + "Sora Sompeng": range(69840, 69888), + "Chakma": range(69888, 69968), + "Mahajani": range(69968, 70016), + "Sharada": range(70016, 70112), + "Sinhala Archaic Numbers": range(70112, 70144), + "Khojki": range(70144, 70224), + "Multani": range(70272, 70320), + "Khudawadi": range(70320, 70400), + "Grantha": range(70400, 70528), + "Tulu-Tigalari": range(70528, 70656), + "Newa": range(70656, 70784), + "Tirhuta": range(70784, 70880), + "Siddham": range(71040, 71168), + "Modi": range(71168, 71264), + "Mongolian Supplement": range(71264, 71296), + "Takri": range(71296, 71376), + "Myanmar Extended-C": range(71376, 71424), + "Ahom": range(71424, 71504), + "Dogra": range(71680, 71760), + "Warang Citi": range(71840, 71936), + "Dives Akuru": range(71936, 72032), + "Nandinagari": range(72096, 72192), + "Zanabazar Square": range(72192, 72272), + "Soyombo": range(72272, 72368), + "Unified Canadian Aboriginal Syllabics Extended-A": range(72368, 72384), + "Pau Cin Hau": range(72384, 72448), + "Devanagari Extended-A": range(72448, 72544), + "Sharada Supplement": range(72544, 72576), + "Sunuwar": range(72640, 72704), + "Bhaiksuki": range(72704, 72816), + "Marchen": range(72816, 72896), + "Masaram Gondi": range(72960, 73056), + "Gunjala Gondi": range(73056, 73136), + "Tolong Siki": range(73136, 73200), + "Makasar": range(73440, 73472), + "Kawi": range(73472, 73568), + "Lisu Supplement": range(73648, 73664), + "Tamil Supplement": range(73664, 73728), + "Cuneiform": range(73728, 74752), + "Cuneiform Numbers and Punctuation": range(74752, 74880), + "Early Dynastic Cuneiform": range(74880, 75088), + "Cypro-Minoan": range(77712, 77824), + "Egyptian Hieroglyphs": range(77824, 78896), + "Egyptian Hieroglyph Format Controls": range(78896, 78944), + "Egyptian Hieroglyphs Extended-A": range(78944, 82944), + "Anatolian Hieroglyphs": range(82944, 83584), + "Gurung Khema": range(90368, 90432), + "Bamum Supplement": range(92160, 92736), + "Mro": range(92736, 92784), + "Tangsa": range(92784, 92880), + "Bassa Vah": range(92880, 92928), + "Pahawh Hmong": range(92928, 93072), + "Kirat Rai": range(93504, 93568), + "Medefaidrin": range(93760, 93856), + "Beria Erfe": range(93856, 93920), + "Miao": range(93952, 94112), + "Ideographic Symbols and Punctuation": range(94176, 94208), + "Tangut": range(94208, 100352), + "Tangut Components": range(100352, 101120), + "Khitan Small Script": range(101120, 101632), + "Tangut Supplement": range(101632, 101760), + "Tangut Components Supplement": range(101760, 101888), + "Kana Extended-B": range(110576, 110592), + "Kana Supplement": range(110592, 110848), + "Kana Extended-A": range(110848, 110896), + "Small Kana Extension": range(110896, 110960), + "Nushu": range(110960, 111360), + "Duployan": range(113664, 113824), + "Shorthand Format Controls": range(113824, 113840), + "Symbols for Legacy Computing Supplement": range(117760, 118464), + "Miscellaneous Symbols Supplement": range(118464, 118528), + "Znamenny Musical Notation": range(118528, 118736), + "Byzantine Musical Symbols": range(118784, 119040), + "Musical Symbols": range(119040, 119296), + "Ancient Greek Musical Notation": range(119296, 119376), + "Kaktovik Numerals": range(119488, 119520), + "Mayan Numerals": range(119520, 119552), + "Tai Xuan Jing Symbols": range(119552, 119648), + "Counting Rod Numerals": range(119648, 119680), + "Mathematical Alphanumeric Symbols": range(119808, 120832), + "Sutton SignWriting": range(120832, 121520), + "Latin Extended-G": range(122624, 122880), + "Glagolitic Supplement": range(122880, 122928), + "Cyrillic Extended-D": range(122928, 123024), + "Nyiakeng Puachue Hmong": range(123136, 123216), + "Toto": range(123536, 123584), + "Wancho": range(123584, 123648), + "Nag Mundari": range(124112, 124160), + "Ol Onal": range(124368, 124416), + "Tai Yo": range(124608, 124672), + "Ethiopic Extended-B": range(124896, 124928), + "Mende Kikakui": range(124928, 125152), + "Adlam": range(125184, 125280), + "Indic Siyaq Numbers": range(126064, 126144), + "Ottoman Siyaq Numbers": range(126208, 126288), + "Arabic Mathematical Alphabetic Symbols": range(126464, 126720), + "Mahjong Tiles": range(126976, 127024), + "Domino Tiles": range(127024, 127136), + "Playing Cards": range(127136, 127232), + "Enclosed Alphanumeric Supplement": range(127232, 127488), + "Enclosed Ideographic Supplement": range(127488, 127744), + "Miscellaneous Symbols and Pictographs": range(127744, 128512), + "Emoticons": range(128512, 128592), + "Ornamental Dingbats": range(128592, 128640), + "Transport and Map Symbols": range(128640, 128768), + "Alchemical Symbols": range(128768, 128896), + "Geometric Shapes Extended": range(128896, 129024), + "Supplemental Arrows-C": range(129024, 129280), + "Supplemental Symbols and Pictographs": range(129280, 129536), + "Chess Symbols": range(129536, 129648), + "Symbols and Pictographs Extended-A": range(129648, 129792), + "Symbols for Legacy Computing": range(129792, 130048), + "CJK Unified Ideographs Extension B": range(131072, 173792), + "CJK Unified Ideographs Extension C": range(173824, 177984), + "CJK Unified Ideographs Extension D": range(177984, 178208), + "CJK Unified Ideographs Extension E": range(178208, 183984), + "CJK Unified Ideographs Extension F": range(183984, 191472), + "CJK Unified Ideographs Extension I": range(191472, 192096), + "CJK Compatibility Ideographs Supplement": range(194560, 195104), + "CJK Unified Ideographs Extension G": range(196608, 201552), + "CJK Unified Ideographs Extension H": range(201552, 205744), + "CJK Unified Ideographs Extension J": range(205744, 210048), + "Tags": range(917504, 917632), + "Variation Selectors Supplement": range(917760, 918000), + "Supplementary Private Use Area-A": range(983040, 1048576), + "Supplementary Private Use Area-B": range(1048576, 1114112), +} + + +UNICODE_SECONDARY_RANGE_KEYWORD: list[str] = [ + "Supplement", + "Extended", + "Extensions", + "Modifier", + "Marks", + "Punctuation", + "Symbols", + "Forms", + "Operators", + "Miscellaneous", + "Drawing", + "Block", + "Shapes", + "Supplemental", + "Tags", +] + +RE_POSSIBLE_ENCODING_INDICATION = re_compile( + r"(?:(?:encoding)|(?:charset)|(?:coding))(?:[\:= ]{1,10})(?:[\"\']?)([a-zA-Z0-9\-_]+)(?:[\"\']?)", + IGNORECASE, +) + +IANA_NO_ALIASES = [ + "cp720", + "cp737", + "cp856", + "cp874", + "cp875", + "cp1006", + "koi8_r", + "koi8_t", + "koi8_u", +] + +IANA_SUPPORTED: list[str] = sorted( + filter( + lambda x: x.endswith("_codec") is False + and x not in {"rot_13", "tactis", "mbcs"}, + list(set(aliases.values())) + IANA_NO_ALIASES, + ) +) + +IANA_SUPPORTED_COUNT: int = len(IANA_SUPPORTED) + +# pre-computed code page that are similar using the function cp_similarity. +IANA_SUPPORTED_SIMILAR: dict[str, list[str]] = { + "cp037": ["cp1026", "cp1140", "cp273", "cp500"], + "cp1026": ["cp037", "cp1140", "cp273", "cp500"], + "cp1125": ["cp866"], + "cp1140": ["cp037", "cp1026", "cp273", "cp500"], + "cp1250": ["iso8859_2"], + "cp1251": ["kz1048", "ptcp154"], + "cp1252": ["iso8859_15", "iso8859_9", "latin_1"], + "cp1253": ["iso8859_7"], + "cp1254": ["iso8859_15", "iso8859_9", "latin_1"], + "cp1257": ["iso8859_13"], + "cp273": ["cp037", "cp1026", "cp1140", "cp500"], + "cp437": ["cp850", "cp858", "cp860", "cp861", "cp862", "cp863", "cp865"], + "cp500": ["cp037", "cp1026", "cp1140", "cp273"], + "cp850": ["cp437", "cp857", "cp858", "cp865"], + "cp857": ["cp850", "cp858", "cp865"], + "cp858": ["cp437", "cp850", "cp857", "cp865"], + "cp860": ["cp437", "cp861", "cp862", "cp863", "cp865"], + "cp861": ["cp437", "cp860", "cp862", "cp863", "cp865"], + "cp862": ["cp437", "cp860", "cp861", "cp863", "cp865"], + "cp863": ["cp437", "cp860", "cp861", "cp862", "cp865"], + "cp865": ["cp437", "cp850", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863"], + "cp866": ["cp1125"], + "iso8859_10": ["iso8859_14", "iso8859_15", "iso8859_4", "iso8859_9", "latin_1"], + "iso8859_11": ["tis_620"], + "iso8859_13": ["cp1257"], + "iso8859_14": [ + "iso8859_10", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_15": [ + "cp1252", + "cp1254", + "iso8859_10", + "iso8859_14", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_16": [ + "iso8859_14", + "iso8859_15", + "iso8859_2", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_2": ["cp1250", "iso8859_16", "iso8859_4"], + "iso8859_3": ["iso8859_14", "iso8859_15", "iso8859_16", "iso8859_9", "latin_1"], + "iso8859_4": ["iso8859_10", "iso8859_2", "iso8859_9", "latin_1"], + "iso8859_7": ["cp1253"], + "iso8859_9": [ + "cp1252", + "cp1254", + "cp1258", + "iso8859_10", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_4", + "latin_1", + ], + "kz1048": ["cp1251", "ptcp154"], + "latin_1": [ + "cp1252", + "cp1254", + "cp1258", + "iso8859_10", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_4", + "iso8859_9", + ], + "mac_iceland": ["mac_roman", "mac_turkish"], + "mac_roman": ["mac_iceland", "mac_turkish"], + "mac_turkish": ["mac_iceland", "mac_roman"], + "ptcp154": ["cp1251", "kz1048"], + "tis_620": ["iso8859_11"], +} + + +CHARDET_CORRESPONDENCE: dict[str, str] = { + "iso2022_kr": "ISO-2022-KR", + "iso2022_jp": "ISO-2022-JP", + "euc_kr": "EUC-KR", + "tis_620": "TIS-620", + "utf_32": "UTF-32", + "euc_jp": "EUC-JP", + "koi8_r": "KOI8-R", + "iso8859_1": "ISO-8859-1", + "iso8859_2": "ISO-8859-2", + "iso8859_5": "ISO-8859-5", + "iso8859_6": "ISO-8859-6", + "iso8859_7": "ISO-8859-7", + "iso8859_8": "ISO-8859-8", + "utf_16": "UTF-16", + "cp855": "IBM855", + "mac_cyrillic": "MacCyrillic", + "gb2312": "GB2312", + "gb18030": "GB18030", + "cp932": "CP932", + "cp866": "IBM866", + "utf_8": "utf-8", + "utf_8_sig": "UTF-8-SIG", + "shift_jis": "SHIFT_JIS", + "big5": "Big5", + "cp1250": "windows-1250", + "cp1251": "windows-1251", + "cp1252": "Windows-1252", + "cp1253": "windows-1253", + "cp1255": "windows-1255", + "cp1256": "windows-1256", + "cp1254": "Windows-1254", + "cp949": "CP949", +} + + +COMMON_SAFE_ASCII_CHARACTERS: frozenset[str] = frozenset( + { + "<", + ">", + "=", + ":", + "/", + "&", + ";", + "{", + "}", + "[", + "]", + ",", + "|", + '"', + "-", + "(", + ")", + } +) + +# Sample character sets — replace with full lists if needed +COMMON_CHINESE_CHARACTERS = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞" + +COMMON_JAPANESE_CHARACTERS = "日一国年大十二本中長出三時行見月分後前生五間上東四今金九入学高円子外八六下来気小七山話女北午百書先名川千水半男西電校語土木聞食車何南万毎白天母火右読友左休父雨" + +COMMON_KOREAN_CHARACTERS = "一二三四五六七八九十百千萬上下左右中人女子大小山川日月火水木金土父母天地國名年時文校學生" + +# Combine all into a frozenset +COMMON_CJK_CHARACTERS = frozenset( + "".join( + [ + COMMON_CHINESE_CHARACTERS, + COMMON_JAPANESE_CHARACTERS, + COMMON_KOREAN_CHARACTERS, + ] + ) +) + +KO_NAMES: frozenset[str] = frozenset({"johab", "cp949", "euc_kr"}) +ZH_NAMES: frozenset[str] = frozenset({"big5", "cp950", "big5hkscs", "hz"}) + +# Logging LEVEL below DEBUG +TRACE: int = 5 + + +# Language label that contain the em dash "—" +# character are to be considered alternative seq to origin +FREQUENCIES: dict[str, list[str]] = { + "English": [ + "e", + "a", + "t", + "i", + "o", + "n", + "s", + "r", + "h", + "l", + "d", + "c", + "u", + "m", + "f", + "p", + "g", + "w", + "y", + "b", + "v", + "k", + "x", + "j", + "z", + "q", + ], + "English—": [ + "e", + "a", + "t", + "i", + "o", + "n", + "s", + "r", + "h", + "l", + "d", + "c", + "m", + "u", + "f", + "p", + "g", + "w", + "b", + "y", + "v", + "k", + "j", + "x", + "z", + "q", + ], + "German": [ + "e", + "n", + "i", + "r", + "s", + "t", + "a", + "d", + "h", + "u", + "l", + "g", + "o", + "c", + "m", + "b", + "f", + "k", + "w", + "z", + "p", + "v", + "ü", + "ä", + "ö", + "j", + ], + "French": [ + "e", + "a", + "s", + "n", + "i", + "t", + "r", + "l", + "u", + "o", + "d", + "c", + "p", + "m", + "é", + "v", + "g", + "f", + "b", + "h", + "q", + "à", + "x", + "è", + "y", + "j", + ], + "Dutch": [ + "e", + "n", + "a", + "i", + "r", + "t", + "o", + "d", + "s", + "l", + "g", + "h", + "v", + "m", + "u", + "k", + "c", + "p", + "b", + "w", + "j", + "z", + "f", + "y", + "x", + "ë", + ], + "Italian": [ + "e", + "i", + "a", + "o", + "n", + "l", + "t", + "r", + "s", + "c", + "d", + "u", + "p", + "m", + "g", + "v", + "f", + "b", + "z", + "h", + "q", + "è", + "à", + "k", + "y", + "ò", + ], + "Polish": [ + "a", + "i", + "o", + "e", + "n", + "r", + "z", + "w", + "s", + "c", + "t", + "k", + "y", + "d", + "p", + "m", + "u", + "l", + "j", + "ł", + "g", + "b", + "h", + "ą", + "ę", + "ó", + ], + "Spanish": [ + "e", + "a", + "o", + "n", + "s", + "r", + "i", + "l", + "d", + "t", + "c", + "u", + "m", + "p", + "b", + "g", + "v", + "f", + "y", + "ó", + "h", + "q", + "í", + "j", + "z", + "á", + ], + "Russian": [ + "о", + "е", + "а", + "и", + "н", + "т", + "с", + "р", + "в", + "л", + "к", + "м", + "д", + "п", + "у", + "г", + "я", + "ы", + "з", + "б", + "й", + "ь", + "ч", + "х", + "ж", + "ц", + ], + # Jap-Kanji + "Japanese": [ + "日", + "一", + "人", + "年", + "大", + "十", + "二", + "本", + "中", + "長", + "出", + "三", + "時", + "行", + "見", + "月", + "分", + "後", + "前", + "生", + "五", + "間", + "上", + "東", + "四", + "今", + "金", + "九", + "入", + "学", + "高", + "円", + "子", + "外", + "八", + "六", + "下", + "来", + "気", + "小", + "七", + "山", + "話", + "女", + "北", + "午", + "百", + "書", + "先", + "名", + "川", + "千", + "水", + "半", + "男", + "西", + "電", + "校", + "語", + "土", + "木", + "聞", + "食", + "車", + "何", + "南", + "万", + "毎", + "白", + "天", + "母", + "火", + "右", + "読", + "友", + "左", + "休", + "父", + "雨", + ], + # Jap-Katakana + "Japanese—": [ + "ー", + "ン", + "ス", + "・", + "ル", + "ト", + "リ", + "イ", + "ア", + "ラ", + "ッ", + "ク", + "ド", + "シ", + "レ", + "ジ", + "タ", + "フ", + "ロ", + "カ", + "テ", + "マ", + "ィ", + "グ", + "バ", + "ム", + "プ", + "オ", + "コ", + "デ", + "ニ", + "ウ", + "メ", + "サ", + "ビ", + "ナ", + "ブ", + "ャ", + "エ", + "ュ", + "チ", + "キ", + "ズ", + "ダ", + "パ", + "ミ", + "ェ", + "ョ", + "ハ", + "セ", + "ベ", + "ガ", + "モ", + "ツ", + "ネ", + "ボ", + "ソ", + "ノ", + "ァ", + "ヴ", + "ワ", + "ポ", + "ペ", + "ピ", + "ケ", + "ゴ", + "ギ", + "ザ", + "ホ", + "ゲ", + "ォ", + "ヤ", + "ヒ", + "ユ", + "ヨ", + "ヘ", + "ゼ", + "ヌ", + "ゥ", + "ゾ", + "ヶ", + "ヂ", + "ヲ", + "ヅ", + "ヵ", + "ヱ", + "ヰ", + "ヮ", + "ヽ", + "゠", + "ヾ", + "ヷ", + "ヿ", + "ヸ", + "ヹ", + "ヺ", + ], + # Jap-Hiragana + "Japanese——": [ + "の", + "に", + "る", + "た", + "と", + "は", + "し", + "い", + "を", + "で", + "て", + "が", + "な", + "れ", + "か", + "ら", + "さ", + "っ", + "り", + "す", + "あ", + "も", + "こ", + "ま", + "う", + "く", + "よ", + "き", + "ん", + "め", + "お", + "け", + "そ", + "つ", + "だ", + "や", + "え", + "ど", + "わ", + "ち", + "み", + "せ", + "じ", + "ば", + "へ", + "び", + "ず", + "ろ", + "ほ", + "げ", + "む", + "べ", + "ひ", + "ょ", + "ゆ", + "ぶ", + "ご", + "ゃ", + "ね", + "ふ", + "ぐ", + "ぎ", + "ぼ", + "ゅ", + "づ", + "ざ", + "ぞ", + "ぬ", + "ぜ", + "ぱ", + "ぽ", + "ぷ", + "ぴ", + "ぃ", + "ぁ", + "ぇ", + "ぺ", + "ゞ", + "ぢ", + "ぉ", + "ぅ", + "ゐ", + "ゝ", + "ゑ", + "゛", + "゜", + "ゎ", + "ゔ", + "゚", + "ゟ", + "゙", + "ゕ", + "ゖ", + ], + "Portuguese": [ + "a", + "e", + "o", + "s", + "i", + "r", + "d", + "n", + "t", + "m", + "u", + "c", + "l", + "p", + "g", + "v", + "b", + "f", + "h", + "ã", + "q", + "é", + "ç", + "á", + "z", + "í", + ], + "Swedish": [ + "e", + "a", + "n", + "r", + "t", + "s", + "i", + "l", + "d", + "o", + "m", + "k", + "g", + "v", + "h", + "f", + "u", + "p", + "ä", + "c", + "b", + "ö", + "å", + "y", + "j", + "x", + ], + "Chinese": [ + "的", + "一", + "是", + "不", + "了", + "在", + "人", + "有", + "我", + "他", + "这", + "个", + "们", + "中", + "来", + "上", + "大", + "为", + "和", + "国", + "地", + "到", + "以", + "说", + "时", + "要", + "就", + "出", + "会", + "可", + "也", + "你", + "对", + "生", + "能", + "而", + "子", + "那", + "得", + "于", + "着", + "下", + "自", + "之", + "年", + "过", + "发", + "后", + "作", + "里", + "用", + "道", + "行", + "所", + "然", + "家", + "种", + "事", + "成", + "方", + "多", + "经", + "么", + "去", + "法", + "学", + "如", + "都", + "同", + "现", + "当", + "没", + "动", + "面", + "起", + "看", + "定", + "天", + "分", + "还", + "进", + "好", + "小", + "部", + "其", + "些", + "主", + "样", + "理", + "心", + "她", + "本", + "前", + "开", + "但", + "因", + "只", + "从", + "想", + "实", + ], + "Ukrainian": [ + "о", + "а", + "н", + "і", + "и", + "р", + "в", + "т", + "е", + "с", + "к", + "л", + "у", + "д", + "м", + "п", + "з", + "я", + "ь", + "б", + "г", + "й", + "ч", + "х", + "ц", + "ї", + ], + "Norwegian": [ + "e", + "r", + "n", + "t", + "a", + "s", + "i", + "o", + "l", + "d", + "g", + "k", + "m", + "v", + "f", + "p", + "u", + "b", + "h", + "å", + "y", + "j", + "ø", + "c", + "æ", + "w", + ], + "Finnish": [ + "a", + "i", + "n", + "t", + "e", + "s", + "l", + "o", + "u", + "k", + "ä", + "m", + "r", + "v", + "j", + "h", + "p", + "y", + "d", + "ö", + "g", + "c", + "b", + "f", + "w", + "z", + ], + "Vietnamese": [ + "n", + "h", + "t", + "i", + "c", + "g", + "a", + "o", + "u", + "m", + "l", + "r", + "à", + "đ", + "s", + "e", + "v", + "p", + "b", + "y", + "ư", + "d", + "á", + "k", + "ộ", + "ế", + ], + "Czech": [ + "o", + "e", + "a", + "n", + "t", + "s", + "i", + "l", + "v", + "r", + "k", + "d", + "u", + "m", + "p", + "í", + "c", + "h", + "z", + "á", + "y", + "j", + "b", + "ě", + "é", + "ř", + ], + "Hungarian": [ + "e", + "a", + "t", + "l", + "s", + "n", + "k", + "r", + "i", + "o", + "z", + "á", + "é", + "g", + "m", + "b", + "y", + "v", + "d", + "h", + "u", + "p", + "j", + "ö", + "f", + "c", + ], + "Korean": [ + "이", + "다", + "에", + "의", + "는", + "로", + "하", + "을", + "가", + "고", + "지", + "서", + "한", + "은", + "기", + "으", + "년", + "대", + "사", + "시", + "를", + "리", + "도", + "인", + "스", + "일", + ], + "Indonesian": [ + "a", + "n", + "e", + "i", + "r", + "t", + "u", + "s", + "d", + "k", + "m", + "l", + "g", + "p", + "b", + "o", + "h", + "y", + "j", + "c", + "w", + "f", + "v", + "z", + "x", + "q", + ], + "Turkish": [ + "a", + "e", + "i", + "n", + "r", + "l", + "ı", + "k", + "d", + "t", + "s", + "m", + "y", + "u", + "o", + "b", + "ü", + "ş", + "v", + "g", + "z", + "h", + "c", + "p", + "ç", + "ğ", + ], + "Romanian": [ + "e", + "i", + "a", + "r", + "n", + "t", + "u", + "l", + "o", + "c", + "s", + "d", + "p", + "m", + "ă", + "f", + "v", + "î", + "g", + "b", + "ș", + "ț", + "z", + "h", + "â", + "j", + ], + "Farsi": [ + "ا", + "ی", + "ر", + "د", + "ن", + "ه", + "و", + "م", + "ت", + "ب", + "س", + "ل", + "ک", + "ش", + "ز", + "ف", + "گ", + "ع", + "خ", + "ق", + "ج", + "آ", + "پ", + "ح", + "ط", + "ص", + ], + "Arabic": [ + "ا", + "ل", + "ي", + "م", + "و", + "ن", + "ر", + "ت", + "ب", + "ة", + "ع", + "د", + "س", + "ف", + "ه", + "ك", + "ق", + "أ", + "ح", + "ج", + "ش", + "ط", + "ص", + "ى", + "خ", + "إ", + ], + "Danish": [ + "e", + "r", + "n", + "t", + "a", + "i", + "s", + "d", + "l", + "o", + "g", + "m", + "k", + "f", + "v", + "u", + "b", + "h", + "p", + "å", + "y", + "ø", + "æ", + "c", + "j", + "w", + ], + "Serbian": [ + "а", + "и", + "о", + "е", + "н", + "р", + "с", + "у", + "т", + "к", + "ј", + "в", + "д", + "м", + "п", + "л", + "г", + "з", + "б", + "a", + "i", + "e", + "o", + "n", + "ц", + "ш", + ], + "Lithuanian": [ + "i", + "a", + "s", + "o", + "r", + "e", + "t", + "n", + "u", + "k", + "m", + "l", + "p", + "v", + "d", + "j", + "g", + "ė", + "b", + "y", + "ų", + "š", + "ž", + "c", + "ą", + "į", + ], + "Slovene": [ + "e", + "a", + "i", + "o", + "n", + "r", + "s", + "l", + "t", + "j", + "v", + "k", + "d", + "p", + "m", + "u", + "z", + "b", + "g", + "h", + "č", + "c", + "š", + "ž", + "f", + "y", + ], + "Slovak": [ + "o", + "a", + "e", + "n", + "i", + "r", + "v", + "t", + "s", + "l", + "k", + "d", + "m", + "p", + "u", + "c", + "h", + "j", + "b", + "z", + "á", + "y", + "ý", + "í", + "č", + "é", + ], + "Hebrew": [ + "י", + "ו", + "ה", + "ל", + "ר", + "ב", + "ת", + "מ", + "א", + "ש", + "נ", + "ע", + "ם", + "ד", + "ק", + "ח", + "פ", + "ס", + "כ", + "ג", + "ט", + "צ", + "ן", + "ז", + "ך", + ], + "Bulgarian": [ + "а", + "и", + "о", + "е", + "н", + "т", + "р", + "с", + "в", + "л", + "к", + "д", + "п", + "м", + "з", + "г", + "я", + "ъ", + "у", + "б", + "ч", + "ц", + "й", + "ж", + "щ", + "х", + ], + "Croatian": [ + "a", + "i", + "o", + "e", + "n", + "r", + "j", + "s", + "t", + "u", + "k", + "l", + "v", + "d", + "m", + "p", + "g", + "z", + "b", + "c", + "č", + "h", + "š", + "ž", + "ć", + "f", + ], + "Hindi": [ + "क", + "र", + "स", + "न", + "त", + "म", + "ह", + "प", + "य", + "ल", + "व", + "ज", + "द", + "ग", + "ब", + "श", + "ट", + "अ", + "ए", + "थ", + "भ", + "ड", + "च", + "ध", + "ष", + "इ", + ], + "Estonian": [ + "a", + "i", + "e", + "s", + "t", + "l", + "u", + "n", + "o", + "k", + "r", + "d", + "m", + "v", + "g", + "p", + "j", + "h", + "ä", + "b", + "õ", + "ü", + "f", + "c", + "ö", + "y", + ], + "Thai": [ + "า", + "น", + "ร", + "อ", + "ก", + "เ", + "ง", + "ม", + "ย", + "ล", + "ว", + "ด", + "ท", + "ส", + "ต", + "ะ", + "ป", + "บ", + "ค", + "ห", + "แ", + "จ", + "พ", + "ช", + "ข", + "ใ", + ], + "Greek": [ + "α", + "τ", + "ο", + "ι", + "ε", + "ν", + "ρ", + "σ", + "κ", + "η", + "π", + "ς", + "υ", + "μ", + "λ", + "ί", + "ό", + "ά", + "γ", + "έ", + "δ", + "ή", + "ω", + "χ", + "θ", + "ύ", + ], + "Tamil": [ + "க", + "த", + "ப", + "ட", + "ர", + "ம", + "ல", + "ன", + "வ", + "ற", + "ய", + "ள", + "ச", + "ந", + "இ", + "ண", + "அ", + "ஆ", + "ழ", + "ங", + "எ", + "உ", + "ஒ", + "ஸ", + ], + "Kazakh": [ + "а", + "ы", + "е", + "н", + "т", + "р", + "л", + "і", + "д", + "с", + "м", + "қ", + "к", + "о", + "б", + "и", + "у", + "ғ", + "ж", + "ң", + "з", + "ш", + "й", + "п", + "г", + "ө", + ], +} + +LANGUAGE_SUPPORTED_COUNT: int = len(FREQUENCIES) + +# Bit flags for unified character classification. +# A single unicodedata.name() call sets all relevant flags at once. +_LATIN: int = 1 +_ACCENTUATED: int = 1 << 1 +_CJK: int = 1 << 2 +_HANGUL: int = 1 << 3 +_KATAKANA: int = 1 << 4 +_HIRAGANA: int = 1 << 5 +_THAI: int = 1 << 6 +_ARABIC: int = 1 << 7 +_ARABIC_ISOLATED_FORM: int = 1 << 8 + +_ACCENT_KEYWORDS: tuple[str, ...] = ( + "WITH GRAVE", + "WITH ACUTE", + "WITH CEDILLA", + "WITH DIAERESIS", + "WITH CIRCUMFLEX", + "WITH TILDE", + "WITH MACRON", + "WITH RING ABOVE", +) + +# Pre-built lookup structures for FREQUENCIES (computed once at import time). +# character -> rank mapping per language (replaces list .index() calls). +_FREQUENCIES_RANK: dict[str, dict[str, int]] = { + lang: {char: rank for rank, char in enumerate(chars)} + for lang, chars in FREQUENCIES.items() +} + +# frozenset per language (avoids rebuilding set() per call). +_FREQUENCIES_SET: dict[str, frozenset[str]] = { + lang: frozenset(chars) for lang, chars in FREQUENCIES.items() +} diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py b/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py new file mode 100644 index 0000000..293c1ef --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any +from warnings import warn + +from .api import from_bytes +from .constant import CHARDET_CORRESPONDENCE, TOO_SMALL_SEQUENCE + +if TYPE_CHECKING: + from typing import TypedDict + + class ResultDict(TypedDict): + encoding: str | None + language: str + confidence: float | None + + +def detect( + byte_str: bytes, should_rename_legacy: bool = False, **kwargs: Any +) -> ResultDict: + """ + chardet legacy method + Detect the encoding of the given byte string. It should be mostly backward-compatible. + Encoding name will match Chardet own writing whenever possible. (Not on encoding name unsupported by it) + This function is deprecated and should be used to migrate your project easily, consult the documentation for + further information. Not planned for removal. + + :param byte_str: The byte sequence to examine. + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + """ + if len(kwargs): + warn( + f"charset-normalizer disregard arguments '{','.join(list(kwargs.keys()))}' in legacy function detect()" + ) + + if not isinstance(byte_str, (bytearray, bytes)): + raise TypeError( # pragma: nocover + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + + if isinstance(byte_str, bytearray): + byte_str = bytes(byte_str) + + r = from_bytes(byte_str).best() + + encoding = r.encoding if r is not None else None + language = r.language if r is not None and r.language != "Unknown" else "" + confidence = 1.0 - r.chaos if r is not None else None + + # automatically lower confidence + # on small bytes samples. + # https://github.com/jawah/charset_normalizer/issues/391 + if ( + confidence is not None + and confidence >= 0.9 + and encoding + not in { + "utf_8", + "ascii", + } + and r.bom is False # type: ignore[union-attr] + and len(byte_str) < TOO_SMALL_SEQUENCE + ): + confidence -= 0.2 + + # Note: CharsetNormalizer does not return 'UTF-8-SIG' as the sig get stripped in the detection/normalization process + # but chardet does return 'utf-8-sig' and it is a valid codec name. + if r is not None and encoding == "utf_8" and r.bom: + encoding += "_sig" + + if should_rename_legacy is False and encoding in CHARDET_CORRESPONDENCE: + encoding = CHARDET_CORRESPONDENCE[encoding] + + return { + "encoding": encoding, + "language": language, + "confidence": confidence, + } diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so b/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000..87d31c7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so differ diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/md.py b/venv/lib/python3.12/site-packages/charset_normalizer/md.py new file mode 100644 index 0000000..b41d9cf --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/md.py @@ -0,0 +1,936 @@ +from __future__ import annotations + +import sys +from functools import lru_cache +from logging import getLogger + +if sys.version_info >= (3, 8): + from typing import final +else: + try: + from typing_extensions import final + except ImportError: + + def final(cls): # type: ignore[misc,no-untyped-def] + return cls + + +from .constant import ( + COMMON_CJK_CHARACTERS, + COMMON_SAFE_ASCII_CHARACTERS, + TRACE, + UNICODE_SECONDARY_RANGE_KEYWORD, + _ACCENTUATED, + _ARABIC, + _ARABIC_ISOLATED_FORM, + _CJK, + _HANGUL, + _HIRAGANA, + _KATAKANA, + _LATIN, + _THAI, +) +from .utils import ( + _character_flags, + is_emoticon, + is_punctuation, + is_separator, + is_symbol, + remove_accent, + unicode_range, +) + +# Combined bitmask for CJK/Hangul/Katakana/Hiragana/Thai glyph detection. +_GLYPH_MASK: int = _CJK | _HANGUL | _KATAKANA | _HIRAGANA | _THAI + + +@final +class CharInfo: + """Pre-computed character properties shared across all detectors. + + Instantiated once and reused via :meth:`update` on every character + in the hot loop so that redundant calls to str methods + (``isalpha``, ``isupper``, …) and cached utility functions + (``_character_flags``, ``is_punctuation``, …) are avoided when + several plugins need the same information. + """ + + __slots__ = ( + "character", + "printable", + "alpha", + "upper", + "lower", + "space", + "digit", + "is_ascii", + "case_variable", + "flags", + "accentuated", + "latin", + "is_cjk", + "is_arabic", + "is_glyph", + "punct", + "sym", + ) + + def __init__(self) -> None: + self.character: str = "" + self.printable: bool = False + self.alpha: bool = False + self.upper: bool = False + self.lower: bool = False + self.space: bool = False + self.digit: bool = False + self.is_ascii: bool = False + self.case_variable: bool = False + self.flags: int = 0 + self.accentuated: bool = False + self.latin: bool = False + self.is_cjk: bool = False + self.is_arabic: bool = False + self.is_glyph: bool = False + self.punct: bool = False + self.sym: bool = False + + def update(self, character: str) -> None: + """Update all properties for *character* (called once per character).""" + self.character = character + + # ASCII fast-path: for characters with ord < 128, we can skip + # _character_flags() entirely and derive most properties from ord. + o: int = ord(character) + if o < 128: + self.is_ascii = True + self.accentuated = False + self.is_cjk = False + self.is_arabic = False + self.is_glyph = False + # ASCII alpha: a-z (97-122) or A-Z (65-90) + if 65 <= o <= 90: + # Uppercase ASCII letter + self.alpha = True + self.upper = True + self.lower = False + self.space = False + self.digit = False + self.printable = True + self.case_variable = True + self.flags = _LATIN + self.latin = True + self.punct = False + self.sym = False + elif 97 <= o <= 122: + # Lowercase ASCII letter + self.alpha = True + self.upper = False + self.lower = True + self.space = False + self.digit = False + self.printable = True + self.case_variable = True + self.flags = _LATIN + self.latin = True + self.punct = False + self.sym = False + elif 48 <= o <= 57: + # ASCII digit 0-9 + self.alpha = False + self.upper = False + self.lower = False + self.space = False + self.digit = True + self.printable = True + self.case_variable = False + self.flags = 0 + self.latin = False + self.punct = False + self.sym = False + elif o == 32 or (9 <= o <= 13): + # Space, tab, newline, etc. + self.alpha = False + self.upper = False + self.lower = False + self.space = True + self.digit = False + self.printable = o == 32 + self.case_variable = False + self.flags = 0 + self.latin = False + self.punct = False + self.sym = False + else: + # Other ASCII (punctuation, symbols, control chars) + self.printable = character.isprintable() + self.alpha = False + self.upper = False + self.lower = False + self.space = False + self.digit = False + self.case_variable = False + self.flags = 0 + self.latin = False + self.punct = is_punctuation(character) if self.printable else False + self.sym = is_symbol(character) if self.printable else False + else: + # Non-ASCII path + self.is_ascii = False + self.printable = character.isprintable() + self.alpha = character.isalpha() + self.upper = character.isupper() + self.lower = character.islower() + self.space = character.isspace() + self.digit = character.isdigit() + self.case_variable = self.lower != self.upper + + # Flag-based classification (single unicodedata.name() call, lru-cached) + flags: int + if self.alpha: + flags = _character_flags(character) + else: + flags = 0 + self.flags = flags + self.accentuated = bool(flags & _ACCENTUATED) + self.latin = bool(flags & _LATIN) + self.is_cjk = bool(flags & _CJK) + self.is_arabic = bool(flags & _ARABIC) + self.is_glyph = bool(flags & _GLYPH_MASK) + + # Eagerly compute punct and sym (avoids property dispatch overhead + # on 300K+ accesses in the hot loop). + self.punct = is_punctuation(character) if self.printable else False + self.sym = is_symbol(character) if self.printable else False + + +class MessDetectorPlugin: + """ + Base abstract class used for mess detection plugins. + All detectors MUST extend and implement given methods. + """ + + __slots__ = () + + def feed_info(self, character: str, info: CharInfo) -> None: + """ + The main routine to be executed upon character. + Insert the logic in witch the text would be considered chaotic. + """ + raise NotImplementedError # Defensive: + + def reset(self) -> None: # Defensive: + """ + Permit to reset the plugin to the initial state. + """ + raise NotImplementedError + + @property + def ratio(self) -> float: + """ + Compute the chaos ratio based on what your feed() has seen. + Must NOT be lower than 0.; No restriction gt 0. + """ + raise NotImplementedError # Defensive: + + +@final +class TooManySymbolOrPunctuationPlugin(MessDetectorPlugin): + __slots__ = ( + "_punctuation_count", + "_symbol_count", + "_character_count", + "_last_printable_char", + "_frenzy_symbol_in_word", + ) + + def __init__(self) -> None: + self._punctuation_count: int = 0 + self._symbol_count: int = 0 + self._character_count: int = 0 + + self._last_printable_char: str | None = None + self._frenzy_symbol_in_word: bool = False + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + self._character_count += 1 + + if ( + character != self._last_printable_char + and character not in COMMON_SAFE_ASCII_CHARACTERS + ): + if info.punct: + self._punctuation_count += 1 + elif not info.digit and info.sym and not is_emoticon(character): + self._symbol_count += 2 + + self._last_printable_char = character + + def reset(self) -> None: # Abstract + self._punctuation_count = 0 + self._character_count = 0 + self._symbol_count = 0 + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + ratio_of_punctuation: float = ( + self._punctuation_count + self._symbol_count + ) / self._character_count + + return ratio_of_punctuation if ratio_of_punctuation >= 0.3 else 0.0 + + +@final +class TooManyAccentuatedPlugin(MessDetectorPlugin): + __slots__ = ("_character_count", "_accentuated_count") + + def __init__(self) -> None: + self._character_count: int = 0 + self._accentuated_count: int = 0 + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + self._character_count += 1 + + if info.accentuated: + self._accentuated_count += 1 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._accentuated_count = 0 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + ratio_of_accentuation: float = self._accentuated_count / self._character_count + return ratio_of_accentuation if ratio_of_accentuation >= 0.35 else 0.0 + + +@final +class UnprintablePlugin(MessDetectorPlugin): + __slots__ = ("_unprintable_count", "_character_count") + + def __init__(self) -> None: + self._unprintable_count: int = 0 + self._character_count: int = 0 + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + if ( + not info.space + and not info.printable + and character != "\x1a" + and character != "\ufeff" + ): + self._unprintable_count += 1 + self._character_count += 1 + + def reset(self) -> None: # Abstract + self._unprintable_count = 0 + + @property + def ratio(self) -> float: + if self._character_count == 0: # Defensive: + return 0.0 + + return (self._unprintable_count * 8) / self._character_count + + +@final +class SuspiciousDuplicateAccentPlugin(MessDetectorPlugin): + __slots__ = ( + "_successive_count", + "_character_count", + "_last_latin_character", + "_last_was_accentuated", + ) + + def __init__(self) -> None: + self._successive_count: int = 0 + self._character_count: int = 0 + + self._last_latin_character: str | None = None + self._last_was_accentuated: bool = False + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + self._character_count += 1 + if ( + self._last_latin_character is not None + and info.accentuated + and self._last_was_accentuated + ): + if info.upper and self._last_latin_character.isupper(): + self._successive_count += 1 + if remove_accent(character) == remove_accent(self._last_latin_character): + self._successive_count += 1 + self._last_latin_character = character + self._last_was_accentuated = info.accentuated + + def reset(self) -> None: # Abstract + self._successive_count = 0 + self._character_count = 0 + self._last_latin_character = None + self._last_was_accentuated = False + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return (self._successive_count * 2) / self._character_count + + +@final +class SuspiciousRange(MessDetectorPlugin): + __slots__ = ( + "_suspicious_successive_range_count", + "_character_count", + "_last_printable_seen", + "_last_printable_range", + ) + + def __init__(self) -> None: + self._suspicious_successive_range_count: int = 0 + self._character_count: int = 0 + self._last_printable_seen: str | None = None + self._last_printable_range: str | None = None + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + self._character_count += 1 + + if info.space or info.punct or character in COMMON_SAFE_ASCII_CHARACTERS: + self._last_printable_seen = None + self._last_printable_range = None + return + + if self._last_printable_seen is None: + self._last_printable_seen = character + self._last_printable_range = unicode_range(character) + return + + unicode_range_a: str | None = self._last_printable_range + unicode_range_b: str | None = unicode_range(character) + + if is_suspiciously_successive_range(unicode_range_a, unicode_range_b): + self._suspicious_successive_range_count += 1 + + self._last_printable_seen = character + self._last_printable_range = unicode_range_b + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._suspicious_successive_range_count = 0 + self._last_printable_seen = None + self._last_printable_range = None + + @property + def ratio(self) -> float: + if self._character_count <= 13: + return 0.0 + + ratio_of_suspicious_range_usage: float = ( + self._suspicious_successive_range_count * 2 + ) / self._character_count + + return ratio_of_suspicious_range_usage + + +@final +class SuperWeirdWordPlugin(MessDetectorPlugin): + __slots__ = ( + "_word_count", + "_bad_word_count", + "_foreign_long_count", + "_is_current_word_bad", + "_foreign_long_watch", + "_character_count", + "_bad_character_count", + "_buffer_length", + "_buffer_last_char", + "_buffer_last_char_accentuated", + "_buffer_accent_count", + "_buffer_glyph_count", + "_buffer_upper_count", + ) + + def __init__(self) -> None: + self._word_count: int = 0 + self._bad_word_count: int = 0 + self._foreign_long_count: int = 0 + + self._is_current_word_bad: bool = False + self._foreign_long_watch: bool = False + + self._character_count: int = 0 + self._bad_character_count: int = 0 + + self._buffer_length: int = 0 + self._buffer_last_char: str | None = None + self._buffer_last_char_accentuated: bool = False + self._buffer_accent_count: int = 0 + self._buffer_glyph_count: int = 0 + self._buffer_upper_count: int = 0 + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + if info.alpha: + self._buffer_length += 1 + self._buffer_last_char = character + + if info.upper: + self._buffer_upper_count += 1 + + self._buffer_last_char_accentuated = info.accentuated + + if info.accentuated: + self._buffer_accent_count += 1 + if ( + not self._foreign_long_watch + and (not info.latin or info.accentuated) + and not info.is_glyph + ): + self._foreign_long_watch = True + if info.is_glyph: + self._buffer_glyph_count += 1 + return + if not self._buffer_length: + return + if info.space or info.punct or is_separator(character): + self._word_count += 1 + buffer_length: int = self._buffer_length + + self._character_count += buffer_length + + if buffer_length >= 4: + if self._buffer_accent_count / buffer_length >= 0.5: + self._is_current_word_bad = True + elif ( + self._buffer_last_char_accentuated + and self._buffer_last_char.isupper() # type: ignore[union-attr] + and self._buffer_upper_count != buffer_length + ): + self._foreign_long_count += 1 + self._is_current_word_bad = True + elif self._buffer_glyph_count == 1: + self._is_current_word_bad = True + self._foreign_long_count += 1 + if buffer_length >= 24 and self._foreign_long_watch: + probable_camel_cased: bool = ( + self._buffer_upper_count > 0 + and self._buffer_upper_count / buffer_length <= 0.3 + ) + + if not probable_camel_cased: + self._foreign_long_count += 1 + self._is_current_word_bad = True + + if self._is_current_word_bad: + self._bad_word_count += 1 + self._bad_character_count += buffer_length + self._is_current_word_bad = False + + self._foreign_long_watch = False + self._buffer_length = 0 + self._buffer_last_char = None + self._buffer_last_char_accentuated = False + self._buffer_accent_count = 0 + self._buffer_glyph_count = 0 + self._buffer_upper_count = 0 + elif ( + character not in {"<", ">", "-", "=", "~", "|", "_"} + and not info.digit + and info.sym + ): + self._is_current_word_bad = True + self._buffer_length += 1 + self._buffer_last_char = character + self._buffer_last_char_accentuated = False + + def reset(self) -> None: # Abstract + self._buffer_length = 0 + self._buffer_last_char = None + self._buffer_last_char_accentuated = False + self._is_current_word_bad = False + self._foreign_long_watch = False + self._bad_word_count = 0 + self._word_count = 0 + self._character_count = 0 + self._bad_character_count = 0 + self._foreign_long_count = 0 + self._buffer_accent_count = 0 + self._buffer_glyph_count = 0 + self._buffer_upper_count = 0 + + @property + def ratio(self) -> float: + if self._word_count <= 10 and self._foreign_long_count == 0: + return 0.0 + + return self._bad_character_count / self._character_count + + +@final +class CjkUncommonPlugin(MessDetectorPlugin): + """ + Detect messy CJK text that probably means nothing. + """ + + __slots__ = ("_character_count", "_uncommon_count") + + def __init__(self) -> None: + self._character_count: int = 0 + self._uncommon_count: int = 0 + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + self._character_count += 1 + + if character not in COMMON_CJK_CHARACTERS: + self._uncommon_count += 1 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._uncommon_count = 0 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + uncommon_form_usage: float = self._uncommon_count / self._character_count + + # we can be pretty sure it's garbage when uncommon characters are widely + # used. otherwise it could just be traditional chinese for example. + return uncommon_form_usage / 10 if uncommon_form_usage > 0.5 else 0.0 + + +@final +class ArchaicUpperLowerPlugin(MessDetectorPlugin): + __slots__ = ( + "_buf", + "_character_count_since_last_sep", + "_successive_upper_lower_count", + "_successive_upper_lower_count_final", + "_character_count", + "_last_alpha_seen", + "_last_alpha_seen_upper", + "_last_alpha_seen_lower", + "_current_ascii_only", + ) + + def __init__(self) -> None: + self._buf: bool = False + + self._character_count_since_last_sep: int = 0 + + self._successive_upper_lower_count: int = 0 + self._successive_upper_lower_count_final: int = 0 + + self._character_count: int = 0 + + self._last_alpha_seen: str | None = None + self._last_alpha_seen_upper: bool = False + self._last_alpha_seen_lower: bool = False + self._current_ascii_only: bool = True + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + is_concerned: bool = info.alpha and info.case_variable + chunk_sep: bool = not is_concerned + + if chunk_sep and self._character_count_since_last_sep > 0: + if ( + self._character_count_since_last_sep <= 64 + and not info.digit + and not self._current_ascii_only + ): + self._successive_upper_lower_count_final += ( + self._successive_upper_lower_count + ) + + self._successive_upper_lower_count = 0 + self._character_count_since_last_sep = 0 + self._last_alpha_seen = None + self._buf = False + self._character_count += 1 + self._current_ascii_only = True + + return + + if self._current_ascii_only and not info.is_ascii: + self._current_ascii_only = False + + if self._last_alpha_seen is not None: + if (info.upper and self._last_alpha_seen_lower) or ( + info.lower and self._last_alpha_seen_upper + ): + if self._buf: + self._successive_upper_lower_count += 2 + self._buf = False + else: + self._buf = True + else: + self._buf = False + + self._character_count += 1 + self._character_count_since_last_sep += 1 + self._last_alpha_seen = character + self._last_alpha_seen_upper = info.upper + self._last_alpha_seen_lower = info.lower + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._character_count_since_last_sep = 0 + self._successive_upper_lower_count = 0 + self._successive_upper_lower_count_final = 0 + self._last_alpha_seen = None + self._last_alpha_seen_upper = False + self._last_alpha_seen_lower = False + self._buf = False + self._current_ascii_only = True + + @property + def ratio(self) -> float: + if self._character_count == 0: # Defensive: + return 0.0 + + return self._successive_upper_lower_count_final / self._character_count + + +@final +class ArabicIsolatedFormPlugin(MessDetectorPlugin): + __slots__ = ("_character_count", "_isolated_form_count") + + def __init__(self) -> None: + self._character_count: int = 0 + self._isolated_form_count: int = 0 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._isolated_form_count = 0 + + def feed_info(self, character: str, info: CharInfo) -> None: + """Optimized feed using pre-computed character info.""" + self._character_count += 1 + + if info.flags & _ARABIC_ISOLATED_FORM: + self._isolated_form_count += 1 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + isolated_form_usage: float = self._isolated_form_count / self._character_count + + return isolated_form_usage + + +@lru_cache(maxsize=1024) +def is_suspiciously_successive_range( + unicode_range_a: str | None, unicode_range_b: str | None +) -> bool: + """ + Determine if two Unicode range seen next to each other can be considered as suspicious. + """ + if unicode_range_a is None or unicode_range_b is None: + return True + + if unicode_range_a == unicode_range_b: + return False + + if "Latin" in unicode_range_a and "Latin" in unicode_range_b: + return False + + if "Emoticons" in unicode_range_a or "Emoticons" in unicode_range_b: + return False + + # Latin characters can be accompanied with a combining diacritical mark + # eg. Vietnamese. + if ("Latin" in unicode_range_a or "Latin" in unicode_range_b) and ( + "Combining" in unicode_range_a or "Combining" in unicode_range_b + ): + return False + + keywords_range_a, keywords_range_b = ( + unicode_range_a.split(" "), + unicode_range_b.split(" "), + ) + + for el in keywords_range_a: + if el in UNICODE_SECONDARY_RANGE_KEYWORD: + continue + if el in keywords_range_b: + return False + + # Japanese Exception + range_a_jp_chars, range_b_jp_chars = ( + unicode_range_a + in ( + "Hiragana", + "Katakana", + ), + unicode_range_b in ("Hiragana", "Katakana"), + ) + if (range_a_jp_chars or range_b_jp_chars) and ( + "CJK" in unicode_range_a or "CJK" in unicode_range_b + ): + return False + if range_a_jp_chars and range_b_jp_chars: + return False + + if "Hangul" in unicode_range_a or "Hangul" in unicode_range_b: + if "CJK" in unicode_range_a or "CJK" in unicode_range_b: + return False + if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": + return False + + # Chinese/Japanese use dedicated range for punctuation and/or separators. + if ("CJK" in unicode_range_a or "CJK" in unicode_range_b) or ( + unicode_range_a in ["Katakana", "Hiragana"] + and unicode_range_b in ["Katakana", "Hiragana"] + ): + if "Punctuation" in unicode_range_a or "Punctuation" in unicode_range_b: + return False + if "Forms" in unicode_range_a or "Forms" in unicode_range_b: + return False + if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": + return False + + return True + + +@lru_cache(maxsize=2048) +def mess_ratio( + decoded_sequence: str, maximum_threshold: float = 0.2, debug: bool = False +) -> float: + """ + Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier. + """ + + seq_len: int = len(decoded_sequence) + + if seq_len < 511: + step: int = 32 + elif seq_len < 1024: + step = 64 + else: + step = 128 + + # Create each detector as a named local variable (unrolled from the generic loop). + # This eliminates per-character iteration over the detector list and + # per-character eligible() virtual dispatch, while keeping every plugin class + # intact and fully readable. + d_sp: TooManySymbolOrPunctuationPlugin = TooManySymbolOrPunctuationPlugin() + d_ta: TooManyAccentuatedPlugin = TooManyAccentuatedPlugin() + d_up: UnprintablePlugin = UnprintablePlugin() + d_sda: SuspiciousDuplicateAccentPlugin = SuspiciousDuplicateAccentPlugin() + d_sr: SuspiciousRange = SuspiciousRange() + d_sw: SuperWeirdWordPlugin = SuperWeirdWordPlugin() + d_cu: CjkUncommonPlugin = CjkUncommonPlugin() + d_au: ArchaicUpperLowerPlugin = ArchaicUpperLowerPlugin() + d_ai: ArabicIsolatedFormPlugin = ArabicIsolatedFormPlugin() + + # Local references for feed_info methods called in the hot loop. + d_sp_feed = d_sp.feed_info + d_ta_feed = d_ta.feed_info + d_up_feed = d_up.feed_info + d_sda_feed = d_sda.feed_info + d_sr_feed = d_sr.feed_info + d_sw_feed = d_sw.feed_info + d_cu_feed = d_cu.feed_info + d_au_feed = d_au.feed_info + d_ai_feed = d_ai.feed_info + + # Single reusable CharInfo object (avoids per-character allocation). + info: CharInfo = CharInfo() + info_update = info.update + + mean_mess_ratio: float + + for block_start in range(0, seq_len, step): + for character in decoded_sequence[block_start : block_start + step]: + # Pre-compute all character properties once (shared across all plugins). + info_update(character) + + # Detectors with eligible() == always True + d_up_feed(character, info) + d_sw_feed(character, info) + d_au_feed(character, info) + + # Detectors with eligible() == isprintable + if info.printable: + d_sp_feed(character, info) + d_sr_feed(character, info) + + # Detectors with eligible() == isalpha + if info.alpha: + d_ta_feed(character, info) + # SuspiciousDuplicateAccent: isalpha() and is_latin() + if info.latin: + d_sda_feed(character, info) + # CjkUncommon: is_cjk() + if info.is_cjk: + d_cu_feed(character, info) + # ArabicIsolatedForm: is_arabic() + if info.is_arabic: + d_ai_feed(character, info) + + mean_mess_ratio = ( + d_sp.ratio + + d_ta.ratio + + d_up.ratio + + d_sda.ratio + + d_sr.ratio + + d_sw.ratio + + d_cu.ratio + + d_au.ratio + + d_ai.ratio + ) + + if mean_mess_ratio >= maximum_threshold: + break + else: + # Flush last word buffer in SuperWeirdWordPlugin via trailing newline. + info_update("\n") + d_sw_feed("\n", info) + d_au_feed("\n", info) + d_up_feed("\n", info) + + mean_mess_ratio = ( + d_sp.ratio + + d_ta.ratio + + d_up.ratio + + d_sda.ratio + + d_sr.ratio + + d_sw.ratio + + d_cu.ratio + + d_au.ratio + + d_ai.ratio + ) + + if debug: # Defensive: + logger = getLogger("charset_normalizer") + + logger.log( + TRACE, + "Mess-detector extended-analysis start. " + f"intermediary_mean_mess_ratio_calc={step} mean_mess_ratio={mean_mess_ratio} " + f"maximum_threshold={maximum_threshold}", + ) + + if seq_len > 16: + logger.log(TRACE, f"Starting with: {decoded_sequence[:16]}") + logger.log(TRACE, f"Ending with: {decoded_sequence[-16::]}") + + for dt in [d_sp, d_ta, d_up, d_sda, d_sr, d_sw, d_cu, d_au, d_ai]: + logger.log(TRACE, f"{dt.__class__}: {dt.ratio}") + + return round(mean_mess_ratio, 3) diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/models.py b/venv/lib/python3.12/site-packages/charset_normalizer/models.py new file mode 100644 index 0000000..382de15 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/models.py @@ -0,0 +1,369 @@ +from __future__ import annotations + +from encodings.aliases import aliases +from json import dumps +from re import sub +from typing import Any, Iterator, List, Tuple + +from .constant import RE_POSSIBLE_ENCODING_INDICATION, TOO_BIG_SEQUENCE +from .utils import iana_name, is_multi_byte_encoding, unicode_range + + +class CharsetMatch: + def __init__( + self, + payload: bytes | bytearray, + guessed_encoding: str, + mean_mess_ratio: float, + has_sig_or_bom: bool, + languages: CoherenceMatches, + decoded_payload: str | None = None, + preemptive_declaration: str | None = None, + ): + self._payload: bytes | bytearray = payload + + self._encoding: str = guessed_encoding + self._mean_mess_ratio: float = mean_mess_ratio + self._languages: CoherenceMatches = languages + self._has_sig_or_bom: bool = has_sig_or_bom + self._unicode_ranges: list[str] | None = None + + self._leaves: list[CharsetMatch] = [] + self._mean_coherence_ratio: float = 0.0 + + self._output_payload: bytes | None = None + self._output_encoding: str | None = None + + self._string: str | None = decoded_payload + + self._preemptive_declaration: str | None = preemptive_declaration + + def __eq__(self, other: object) -> bool: + if not isinstance(other, CharsetMatch): + if isinstance(other, str): + return iana_name(other) == self.encoding + return False + return self.encoding == other.encoding and self.fingerprint == other.fingerprint + + def __lt__(self, other: object) -> bool: + """ + Implemented to make sorted available upon CharsetMatches items. + """ + if not isinstance(other, CharsetMatch): + raise ValueError + + chaos_difference: float = abs(self.chaos - other.chaos) + coherence_difference: float = abs(self.coherence - other.coherence) + + # Below 0.5% difference --> Use Coherence + if chaos_difference < 0.005 and coherence_difference > 0.02: + return self.coherence > other.coherence + elif chaos_difference < 0.005 and coherence_difference <= 0.02: + # When having a difficult decision, use the result that decoded as many multi-byte as possible. + # preserve RAM usage! + if len(self._payload) >= TOO_BIG_SEQUENCE: + return self.chaos < other.chaos + return self.multi_byte_usage > other.multi_byte_usage + + return self.chaos < other.chaos + + @property + def multi_byte_usage(self) -> float: + return 1.0 - (len(str(self)) / len(self.raw)) + + def __str__(self) -> str: + # Lazy Str Loading + if self._string is None: + self._string = str(self._payload, self._encoding, "strict") + # UTF-7 BOM is encoded in modified Base64 whose byte boundary + # can overlap with the next character, so raw-byte stripping + # is unreliable. Strip the decoded BOM character instead. + if ( + self._has_sig_or_bom + and self._encoding == "utf_7" + and self._string + and self._string[0] == "\ufeff" + ): + self._string = self._string[1:] + return self._string + + def __repr__(self) -> str: + return f"" + + def add_submatch(self, other: CharsetMatch) -> None: + if not isinstance(other, CharsetMatch) or other == self: + raise ValueError( + "Unable to add instance <{}> as a submatch of a CharsetMatch".format( + other.__class__ + ) + ) + + other._string = None # Unload RAM usage; dirty trick. + self._leaves.append(other) + + @property + def encoding(self) -> str: + return self._encoding + + @property + def encoding_aliases(self) -> list[str]: + """ + Encoding name are known by many name, using this could help when searching for IBM855 when it's listed as CP855. + """ + also_known_as: list[str] = [] + for u, p in aliases.items(): + if self.encoding == u: + also_known_as.append(p) + elif self.encoding == p: + also_known_as.append(u) + return also_known_as + + @property + def bom(self) -> bool: + return self._has_sig_or_bom + + @property + def byte_order_mark(self) -> bool: + return self._has_sig_or_bom + + @property + def languages(self) -> list[str]: + """ + Return the complete list of possible languages found in decoded sequence. + Usually not really useful. Returned list may be empty even if 'language' property return something != 'Unknown'. + """ + return [e[0] for e in self._languages] + + @property + def language(self) -> str: + """ + Most probable language found in decoded sequence. If none were detected or inferred, the property will return + "Unknown". + """ + if not self._languages: + # Trying to infer the language based on the given encoding + # Its either English or we should not pronounce ourselves in certain cases. + if "ascii" in self.could_be_from_charset: + return "English" + + # doing it there to avoid circular import + from charset_normalizer.cd import encoding_languages, mb_encoding_languages + + languages = ( + mb_encoding_languages(self.encoding) + if is_multi_byte_encoding(self.encoding) + else encoding_languages(self.encoding) + ) + + if len(languages) == 0 or "Latin Based" in languages: + return "Unknown" + + return languages[0] + + return self._languages[0][0] + + @property + def chaos(self) -> float: + return self._mean_mess_ratio + + @property + def coherence(self) -> float: + if not self._languages: + return 0.0 + return self._languages[0][1] + + @property + def percent_chaos(self) -> float: + return round(self.chaos * 100, ndigits=3) + + @property + def percent_coherence(self) -> float: + return round(self.coherence * 100, ndigits=3) + + @property + def raw(self) -> bytes | bytearray: + """ + Original untouched bytes. + """ + return self._payload + + @property + def submatch(self) -> list[CharsetMatch]: + return self._leaves + + @property + def has_submatch(self) -> bool: + return len(self._leaves) > 0 + + @property + def alphabets(self) -> list[str]: + if self._unicode_ranges is not None: + return self._unicode_ranges + # list detected ranges + detected_ranges: list[str | None] = [unicode_range(char) for char in str(self)] + # filter and sort + self._unicode_ranges = sorted(list({r for r in detected_ranges if r})) + return self._unicode_ranges + + @property + def could_be_from_charset(self) -> list[str]: + """ + The complete list of encoding that output the exact SAME str result and therefore could be the originating + encoding. + This list does include the encoding available in property 'encoding'. + """ + return [self._encoding] + [m.encoding for m in self._leaves] + + def output(self, encoding: str = "utf_8") -> bytes: + """ + Method to get re-encoded bytes payload using given target encoding. Default to UTF-8. + Any errors will be simply ignored by the encoder NOT replaced. + """ + if self._output_encoding is None or self._output_encoding != encoding: + self._output_encoding = encoding + decoded_string = str(self) + if ( + self._preemptive_declaration is not None + and self._preemptive_declaration.lower() + not in ["utf-8", "utf8", "utf_8"] + ): + patched_header = sub( + RE_POSSIBLE_ENCODING_INDICATION, + lambda m: m.string[m.span()[0] : m.span()[1]].replace( + m.groups()[0], + iana_name(self._output_encoding).replace("_", "-"), # type: ignore[arg-type] + ), + decoded_string[:8192], + count=1, + ) + + decoded_string = patched_header + decoded_string[8192:] + + self._output_payload = decoded_string.encode(encoding, "replace") + + return self._output_payload # type: ignore + + @property + def fingerprint(self) -> int: + """ + Retrieve a hash fingerprint of the decoded payload, used for deduplication. + """ + return hash(str(self)) + + +class CharsetMatches: + """ + Container with every CharsetMatch items ordered by default from most probable to the less one. + Act like a list(iterable) but does not implements all related methods. + """ + + def __init__(self, results: list[CharsetMatch] | None = None): + self._results: list[CharsetMatch] = sorted(results) if results else [] + + def __iter__(self) -> Iterator[CharsetMatch]: + yield from self._results + + def __getitem__(self, item: int | str) -> CharsetMatch: + """ + Retrieve a single item either by its position or encoding name (alias may be used here). + Raise KeyError upon invalid index or encoding not present in results. + """ + if isinstance(item, int): + return self._results[item] + if isinstance(item, str): + item = iana_name(item, False) + for result in self._results: + if item in result.could_be_from_charset: + return result + raise KeyError + + def __len__(self) -> int: + return len(self._results) + + def __bool__(self) -> bool: + return len(self._results) > 0 + + def append(self, item: CharsetMatch) -> None: + """ + Insert a single match. Will be inserted accordingly to preserve sort. + Can be inserted as a submatch. + """ + if not isinstance(item, CharsetMatch): + raise ValueError( + "Cannot append instance '{}' to CharsetMatches".format( + str(item.__class__) + ) + ) + # We should disable the submatch factoring when the input file is too heavy (conserve RAM usage) + if len(item.raw) < TOO_BIG_SEQUENCE: + for match in self._results: + if match.fingerprint == item.fingerprint and match.chaos == item.chaos: + match.add_submatch(item) + return + self._results.append(item) + self._results = sorted(self._results) + + def best(self) -> CharsetMatch | None: + """ + Simply return the first match. Strict equivalent to matches[0]. + """ + if not self._results: + return None + return self._results[0] + + def first(self) -> CharsetMatch | None: + """ + Redundant method, call the method best(). Kept for BC reasons. + """ + return self.best() + + +CoherenceMatch = Tuple[str, float] +CoherenceMatches = List[CoherenceMatch] + + +class CliDetectionResult: + def __init__( + self, + path: str, + encoding: str | None, + encoding_aliases: list[str], + alternative_encodings: list[str], + language: str, + alphabets: list[str], + has_sig_or_bom: bool, + chaos: float, + coherence: float, + unicode_path: str | None, + is_preferred: bool, + ): + self.path: str = path + self.unicode_path: str | None = unicode_path + self.encoding: str | None = encoding + self.encoding_aliases: list[str] = encoding_aliases + self.alternative_encodings: list[str] = alternative_encodings + self.language: str = language + self.alphabets: list[str] = alphabets + self.has_sig_or_bom: bool = has_sig_or_bom + self.chaos: float = chaos + self.coherence: float = coherence + self.is_preferred: bool = is_preferred + + @property + def __dict__(self) -> dict[str, Any]: # type: ignore + return { + "path": self.path, + "encoding": self.encoding, + "encoding_aliases": self.encoding_aliases, + "alternative_encodings": self.alternative_encodings, + "language": self.language, + "alphabets": self.alphabets, + "has_sig_or_bom": self.has_sig_or_bom, + "chaos": self.chaos, + "coherence": self.coherence, + "unicode_path": self.unicode_path, + "is_preferred": self.is_preferred, + } + + def to_json(self) -> str: + return dumps(self.__dict__, ensure_ascii=True, indent=4) diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/py.typed b/venv/lib/python3.12/site-packages/charset_normalizer/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/utils.py b/venv/lib/python3.12/site-packages/charset_normalizer/utils.py new file mode 100644 index 0000000..0f529b5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/utils.py @@ -0,0 +1,422 @@ +from __future__ import annotations + +import importlib +import logging +import unicodedata +from bisect import bisect_right +from codecs import IncrementalDecoder +from encodings.aliases import aliases +from functools import lru_cache +from re import findall +from typing import Generator + +from _multibytecodec import ( # type: ignore[import-not-found,import] + MultibyteIncrementalDecoder, +) + +from .constant import ( + ENCODING_MARKS, + IANA_SUPPORTED_SIMILAR, + RE_POSSIBLE_ENCODING_INDICATION, + UNICODE_RANGES_COMBINED, + UNICODE_SECONDARY_RANGE_KEYWORD, + UTF8_MAXIMAL_ALLOCATION, + COMMON_CJK_CHARACTERS, + _LATIN, + _CJK, + _HANGUL, + _KATAKANA, + _HIRAGANA, + _THAI, + _ARABIC, + _ARABIC_ISOLATED_FORM, + _ACCENT_KEYWORDS, + _ACCENTUATED, +) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def _character_flags(character: str) -> int: + """Compute all name-based classification flags with a single unicodedata.name() call.""" + try: + desc: str = unicodedata.name(character) + except ValueError: + return 0 + + flags: int = 0 + + if "LATIN" in desc: + flags |= _LATIN + if "CJK" in desc: + flags |= _CJK + if "HANGUL" in desc: + flags |= _HANGUL + if "KATAKANA" in desc: + flags |= _KATAKANA + if "HIRAGANA" in desc: + flags |= _HIRAGANA + if "THAI" in desc: + flags |= _THAI + if "ARABIC" in desc: + flags |= _ARABIC + if "ISOLATED FORM" in desc: + flags |= _ARABIC_ISOLATED_FORM + + for kw in _ACCENT_KEYWORDS: + if kw in desc: + flags |= _ACCENTUATED + break + + return flags + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_accentuated(character: str) -> bool: + return bool(_character_flags(character) & _ACCENTUATED) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def remove_accent(character: str) -> str: + decomposed: str = unicodedata.decomposition(character) + if not decomposed: + return character + + codes: list[str] = decomposed.split(" ") + + return chr(int(codes[0], 16)) + + +# Pre-built sorted lookup table for O(log n) binary search in unicode_range(). +# Each entry is (range_start, range_end_exclusive, range_name). +_UNICODE_RANGES_SORTED: list[tuple[int, int, str]] = sorted( + (ord_range.start, ord_range.stop, name) + for name, ord_range in UNICODE_RANGES_COMBINED.items() +) +_UNICODE_RANGE_STARTS: list[int] = [e[0] for e in _UNICODE_RANGES_SORTED] + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def unicode_range(character: str) -> str | None: + """ + Retrieve the Unicode range official name from a single character. + """ + character_ord: int = ord(character) + + # Binary search: find the rightmost range whose start <= character_ord + idx = bisect_right(_UNICODE_RANGE_STARTS, character_ord) - 1 + if idx >= 0: + start, stop, name = _UNICODE_RANGES_SORTED[idx] + if character_ord < stop: + return name + + return None + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_latin(character: str) -> bool: + return bool(_character_flags(character) & _LATIN) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_punctuation(character: str) -> bool: + character_category: str = unicodedata.category(character) + + if "P" in character_category: + return True + + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Punctuation" in character_range + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_symbol(character: str) -> bool: + character_category: str = unicodedata.category(character) + + if "S" in character_category or "N" in character_category: + return True + + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Forms" in character_range and character_category != "Lo" + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_emoticon(character: str) -> bool: + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Emoticons" in character_range or "Pictographs" in character_range + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_separator(character: str) -> bool: + if character.isspace() or character in {"|", "+", "<", ">"}: + return True + + character_category: str = unicodedata.category(character) + + return "Z" in character_category or character_category in {"Po", "Pd", "Pc"} + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_case_variable(character: str) -> bool: + return character.islower() != character.isupper() + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_cjk(character: str) -> bool: + return bool(_character_flags(character) & _CJK) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_hiragana(character: str) -> bool: + return bool(_character_flags(character) & _HIRAGANA) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_katakana(character: str) -> bool: + return bool(_character_flags(character) & _KATAKANA) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_hangul(character: str) -> bool: + return bool(_character_flags(character) & _HANGUL) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_thai(character: str) -> bool: + return bool(_character_flags(character) & _THAI) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_arabic(character: str) -> bool: + return bool(_character_flags(character) & _ARABIC) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_arabic_isolated_form(character: str) -> bool: + return bool(_character_flags(character) & _ARABIC_ISOLATED_FORM) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_cjk_uncommon(character: str) -> bool: + return character not in COMMON_CJK_CHARACTERS + + +@lru_cache(maxsize=len(UNICODE_RANGES_COMBINED)) +def is_unicode_range_secondary(range_name: str) -> bool: + return any(keyword in range_name for keyword in UNICODE_SECONDARY_RANGE_KEYWORD) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_unprintable(character: str) -> bool: + return ( + character.isspace() is False # includes \n \t \r \v + and character.isprintable() is False + and character != "\x1a" # Why? Its the ASCII substitute character. + and character != "\ufeff" # bug discovered in Python, + # Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space. + ) + + +def any_specified_encoding( + sequence: bytes | bytearray, search_zone: int = 8192 +) -> str | None: + """ + Extract using ASCII-only decoder any specified encoding in the first n-bytes. + """ + if not isinstance(sequence, (bytes, bytearray)): + raise TypeError + + seq_len: int = len(sequence) + + results: list[str] = findall( + RE_POSSIBLE_ENCODING_INDICATION, + sequence[: min(seq_len, search_zone)].decode("ascii", errors="ignore"), + ) + + if len(results) == 0: + return None + + for specified_encoding in results: + specified_encoding = specified_encoding.lower().replace("-", "_") + + encoding_alias: str + encoding_iana: str + + for encoding_alias, encoding_iana in aliases.items(): + if encoding_alias == specified_encoding: + return encoding_iana + if encoding_iana == specified_encoding: + return encoding_iana + + return None + + +@lru_cache(maxsize=128) +def is_multi_byte_encoding(name: str) -> bool: + """ + Verify is a specific encoding is a multi byte one based on it IANA name + """ + return name in { + "utf_8", + "utf_8_sig", + "utf_16", + "utf_16_be", + "utf_16_le", + "utf_32", + "utf_32_le", + "utf_32_be", + "utf_7", + } or issubclass( + importlib.import_module(f"encodings.{name}").IncrementalDecoder, + MultibyteIncrementalDecoder, + ) + + +def identify_sig_or_bom(sequence: bytes | bytearray) -> tuple[str | None, bytes]: + """ + Identify and extract SIG/BOM in given sequence. + """ + + for iana_encoding in ENCODING_MARKS: + marks: bytes | list[bytes] = ENCODING_MARKS[iana_encoding] + + if isinstance(marks, bytes): + marks = [marks] + + for mark in marks: + if sequence.startswith(mark): + return iana_encoding, mark + + return None, b"" + + +def should_strip_sig_or_bom(iana_encoding: str) -> bool: + return iana_encoding not in {"utf_16", "utf_32"} + + +def iana_name(cp_name: str, strict: bool = True) -> str: + """Returns the Python normalized encoding name (Not the IANA official name).""" + cp_name = cp_name.lower().replace("-", "_") + + encoding_alias: str + encoding_iana: str + + for encoding_alias, encoding_iana in aliases.items(): + if cp_name in [encoding_alias, encoding_iana]: + return encoding_iana + + if strict: + raise ValueError(f"Unable to retrieve IANA for '{cp_name}'") + + return cp_name + + +def cp_similarity(iana_name_a: str, iana_name_b: str) -> float: + if is_multi_byte_encoding(iana_name_a) or is_multi_byte_encoding(iana_name_b): + return 0.0 + + decoder_a = importlib.import_module(f"encodings.{iana_name_a}").IncrementalDecoder + decoder_b = importlib.import_module(f"encodings.{iana_name_b}").IncrementalDecoder + + id_a: IncrementalDecoder = decoder_a(errors="ignore") + id_b: IncrementalDecoder = decoder_b(errors="ignore") + + character_match_count: int = 0 + + for i in range(256): + to_be_decoded: bytes = bytes([i]) + if id_a.decode(to_be_decoded) == id_b.decode(to_be_decoded): + character_match_count += 1 + + return character_match_count / 256 + + +def is_cp_similar(iana_name_a: str, iana_name_b: str) -> bool: + """ + Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using + the function cp_similarity. + """ + return ( + iana_name_a in IANA_SUPPORTED_SIMILAR + and iana_name_b in IANA_SUPPORTED_SIMILAR[iana_name_a] + ) + + +def set_logging_handler( + name: str = "charset_normalizer", + level: int = logging.INFO, + format_string: str = "%(asctime)s | %(levelname)s | %(message)s", +) -> None: + logger = logging.getLogger(name) + logger.setLevel(level) + + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter(format_string)) + logger.addHandler(handler) + + +def cut_sequence_chunks( + sequences: bytes | bytearray, + encoding_iana: str, + offsets: range, + chunk_size: int, + bom_or_sig_available: bool, + strip_sig_or_bom: bool, + sig_payload: bytes, + is_multi_byte_decoder: bool, + decoded_payload: str | None = None, +) -> Generator[str, None, None]: + if decoded_payload and is_multi_byte_decoder is False: + for i in offsets: + chunk = decoded_payload[i : i + chunk_size] + if not chunk: + break + yield chunk + else: + for i in offsets: + chunk_end = i + chunk_size + if chunk_end > len(sequences) + 8: + continue + + cut_sequence = sequences[i : i + chunk_size] + + if bom_or_sig_available and strip_sig_or_bom is False: + cut_sequence = sig_payload + cut_sequence + + chunk = cut_sequence.decode( + encoding_iana, + errors="ignore" if is_multi_byte_decoder else "strict", + ) + + # multi-byte bad cutting detector and adjustment + # not the cleanest way to perform that fix but clever enough for now. + if is_multi_byte_decoder and i > 0: + chunk_partial_size_chk: int = min(chunk_size, 16) + + if ( + decoded_payload + and chunk[:chunk_partial_size_chk] not in decoded_payload + ): + for j in range(i, i - 4, -1): + cut_sequence = sequences[j:chunk_end] + + if bom_or_sig_available and strip_sig_or_bom is False: + cut_sequence = sig_payload + cut_sequence + + chunk = cut_sequence.decode(encoding_iana, errors="ignore") + + if chunk[:chunk_partial_size_chk] in decoded_payload: + break + + yield chunk diff --git a/venv/lib/python3.12/site-packages/charset_normalizer/version.py b/venv/lib/python3.12/site-packages/charset_normalizer/version.py new file mode 100644 index 0000000..a93d367 --- /dev/null +++ b/venv/lib/python3.12/site-packages/charset_normalizer/version.py @@ -0,0 +1,8 @@ +""" +Expose version +""" + +from __future__ import annotations + +__version__ = "3.4.7" +VERSION = __version__.split(".") diff --git a/venv/lib/python3.12/site-packages/idna-3.18.dist-info/INSTALLER b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.12/site-packages/idna-3.18.dist-info/METADATA b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/METADATA new file mode 100644 index 0000000..6c4bf89 --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/METADATA @@ -0,0 +1,155 @@ +Metadata-Version: 2.4 +Name: idna +Version: 3.18 +Summary: Internationalized Domain Names in Applications (IDNA) +Author-email: Kim Davies +Requires-Python: >=3.9 +Description-Content-Type: text/markdown +License-Expression: BSD-3-Clause +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: System Administrators +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: Name Service (DNS) +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Utilities +License-File: LICENSE.md +Requires-Dist: ruff >= 0.6.2 ; extra == "all" +Requires-Dist: mypy >= 1.11.2 ; extra == "all" +Requires-Dist: pytest >= 8.3.2 ; extra == "all" +Project-URL: Changelog, https://github.com/kjd/idna/blob/master/HISTORY.md +Project-URL: Issue tracker, https://github.com/kjd/idna/issues +Project-URL: Source, https://github.com/kjd/idna +Provides-Extra: all + +# Internationalized Domain Names in Applications (IDNA) + +Support for [Internationalized Domain Names in Applications +(IDNA)](https://tools.ietf.org/html/rfc5891) and [Unicode IDNA +Compatibility Processing](https://unicode.org/reports/tr46/). It +supersedes the standard library's `encodings.idna`, which only +implements the 2003 specification, offering broader script coverage and +limiting domains with known security vulnerabilities. + +## Usage + +Package may be installed from [PyPI](https://pypi.org/project/idna/) via +the typical methods (e.g. `python3 -m pip install idna`) + +For typical usage, the `encode` and `decode` functions will take a +domain name argument and perform a conversion to ASCII-compatible encoding +(known as A-labels), or to Unicode strings (known as U-labels) +respectively. + +```pycon +>>> import idna +>>> idna.encode('ドメイン.テスト') +b'xn--eckwd4c7c.xn--zckzah' +>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah')) +ドメイン.テスト +``` + +Conversions can be applied at a per-label basis using the `ulabel` or +`alabel` functions for specialized use cases. + + +### Compatibility Mapping (UTS #46) + +This library provides support for [Unicode IDNA Compatibility +Processing](https://unicode.org/reports/tr46/) which normalizes input from +different potential ways a user may input a domain prior to performing the IDNA +conversion operations. This functionality, known as a +[mapping](https://tools.ietf.org/html/rfc5895), is considered by the +specification to be a local user-interface issue distinct from IDNA +conversion functionality. + +For example, "Königsgäßchen" is not a permissible label as capital letters +are not allowed. UTS 46 will convert this into lower case prior to applying +the IDNA conversion. + +```pycon +>>> import idna +>>> idna.encode('Königsgäßchen') +... +idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed +>>> idna.encode('Königsgäßchen', uts46=True) +b'xn--knigsgchen-b4a3dun' +>>> idna.decode('xn--knigsgchen-b4a3dun') +'königsgäßchen' +``` + +When performing a decode operation for display purposes, `decode()` +accepts a `display=True` argument that leaves any `xn--` label that +fails to decode unchanged. This is useful for user interface display +where a domain is in use, the A-label form can be presented when it +is not a valid IDN. + + +## Exceptions + +All errors raised during conversion derive from the `idna.IDNAError` +base class. The more specific exceptions are: + +* `idna.IDNABidiError` — raised when a label contains an illegal + combination of left-to-right and right-to-left characters. +* `idna.InvalidCodepoint` — raised when a label contains a codepoint + that is INVALID for IDNA. +* `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ + codepoint appears in a position whose contextual requirements are + not satisfied. + + +## Command-line tool + +The package supports command-line usage to convert domain names +between their Unicode and ASCII-compatible forms. It can be run either +as a module (`python3 -m idna`) or, once installed (such as with `uv +tool` or `pipx`), via the `idna` script: + +```bash +$ uv tool install idna +$ idna xn--e1afmkfd.xn--p1ai +пример.рф +$ idna пример.рф +xn--e1afmkfd.xn--p1ai +``` + +Mode can be specified with `-e`/`--encode` or `-d`/`--decode`, otherwise +it will be chosen automatically based on the first input. Multiple +domains can be supplied either as arguments or through standard input. +UTS #46 mapping is applied by default, which lets the tool accept +inputs that aren't strictly valid IDNA 2008 by normalising them first, +pass `--strict` to disable UTS #46. + +Conversion failures are reported on stderr together with the +offending input; processing continues with the remaining domains and +the tool exits with a non-zero status if any conversion failed. + + +## Additional Notes + +* **Version support**. This library supports Python 3.9 and higher. + As this library serves as a low-level toolkit for a variety of + applications, we strive to support all versions of Python that are + not beyond end-of-life. + +* **Emoji**. It is an occasional request to support emoji domains in + this library. Encoding of symbols like emoji is expressly prohibited by + the IDNA technical standard, and emoji domains are broadly phased + out across the domain industry due to associated security risks. + +* **Regenerating lookup tables**. The IDNA and UTS 46 functionality + relies upon pre-calculated lookup tables, generated using the + `idna-data` script in [`tools/`](tools/README.md). + diff --git a/venv/lib/python3.12/site-packages/idna-3.18.dist-info/RECORD b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/RECORD new file mode 100644 index 0000000..958347c --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/RECORD @@ -0,0 +1,28 @@ +../../../bin/idna,sha256=z-308nQ_ERHX3O6x2RC_k1HIbCr8p7IqrXvkDRLJ3WI,236 +idna-3.18.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +idna-3.18.dist-info/METADATA,sha256=Rt_m5axGLQ9oDs2avPZugptqIzSCS02eOXmzETXK8oE,6119 +idna-3.18.dist-info/RECORD,, +idna-3.18.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 +idna-3.18.dist-info/entry_points.txt,sha256=7H3nGOHap3jnLE5e7q7Ywr9Vq8axB7WIj5-C_4N2vhw,38 +idna-3.18.dist-info/licenses/LICENSE.md,sha256=GppPDj1HmickDd1ZqRN6ZqtKD539yMphiMwL_YUYfwQ,1541 +idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868 +idna/__main__.py,sha256=4JMK66Wj4uLZTKbF-sT3LAxOsr6buig77PmOkJCRRxw,83 +idna/__pycache__/__init__.cpython-312.pyc,, +idna/__pycache__/__main__.cpython-312.pyc,, +idna/__pycache__/cli.cpython-312.pyc,, +idna/__pycache__/codec.cpython-312.pyc,, +idna/__pycache__/compat.cpython-312.pyc,, +idna/__pycache__/core.cpython-312.pyc,, +idna/__pycache__/idnadata.cpython-312.pyc,, +idna/__pycache__/intranges.cpython-312.pyc,, +idna/__pycache__/package_data.cpython-312.pyc,, +idna/__pycache__/uts46data.cpython-312.pyc,, +idna/cli.py,sha256=swqJLMNc8Uzs60KziNpbWnHuqlG3WRQwJSbo4n8xDAo,4139 +idna/codec.py,sha256=JRbo-f7pEkLdWeiH89Z72UR4VBYhvKDFrQBeNX6sRDE,5040 +idna/compat.py,sha256=AepA39ceRHxkfHP41-FvKW5Ki-f4PfUZ90RUMlCNdmo,1353 +idna/core.py,sha256=SfOr1xO3PoE0RDYx7bMciAnjiyjJPbPw_93AB5IUYOw,24685 +idna/idnadata.py,sha256=Af-mo8WBmkhAK6TyXKOQH88OX0mQNDKtdL7UWtQpppk,44862 +idna/intranges.py,sha256=g49scLSkqJtAhLmOODa7hVHriSjmb60tiTsEoocJdBI,1851 +idna/package_data.py,sha256=TeI94EqAFAFaXfBJwsOPUMLn2969uirPa-DaeaceAyU,21 +idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +idna/uts46data.py,sha256=jujNz5QqWMcJf-XYLv4X1jBvb5FlI0t6-e1mILsgbPk,234325 diff --git a/venv/lib/python3.12/site-packages/idna-3.18.dist-info/WHEEL b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/WHEEL new file mode 100644 index 0000000..d8b9936 --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.12.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/venv/lib/python3.12/site-packages/idna-3.18.dist-info/entry_points.txt b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/entry_points.txt new file mode 100644 index 0000000..59ca7ac --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +idna=idna.cli:main + diff --git a/venv/lib/python3.12/site-packages/idna-3.18.dist-info/licenses/LICENSE.md b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/licenses/LICENSE.md new file mode 100644 index 0000000..f706835 --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna-3.18.dist-info/licenses/LICENSE.md @@ -0,0 +1,31 @@ +BSD 3-Clause License + +Copyright (c) 2013-2026, Kim Davies and contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/venv/lib/python3.12/site-packages/idna/__init__.py b/venv/lib/python3.12/site-packages/idna/__init__.py new file mode 100644 index 0000000..cfdc030 --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/__init__.py @@ -0,0 +1,45 @@ +from .core import ( + IDNABidiError, + IDNAError, + InvalidCodepoint, + InvalidCodepointContext, + alabel, + check_bidi, + check_hyphen_ok, + check_initial_combiner, + check_label, + check_nfc, + decode, + encode, + ulabel, + uts46_remap, + valid_contextj, + valid_contexto, + valid_label_length, + valid_string_length, +) +from .intranges import intranges_contain +from .package_data import __version__ + +__all__ = [ + "__version__", + "IDNABidiError", + "IDNAError", + "InvalidCodepoint", + "InvalidCodepointContext", + "alabel", + "check_bidi", + "check_hyphen_ok", + "check_initial_combiner", + "check_label", + "check_nfc", + "decode", + "encode", + "intranges_contain", + "ulabel", + "uts46_remap", + "valid_contextj", + "valid_contexto", + "valid_label_length", + "valid_string_length", +] diff --git a/venv/lib/python3.12/site-packages/idna/__main__.py b/venv/lib/python3.12/site-packages/idna/__main__.py new file mode 100644 index 0000000..dbdd066 --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/__main__.py @@ -0,0 +1,6 @@ +import sys + +from .cli import main + +if __name__ == "__main__": + sys.exit(main()) diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..619cf05 Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..87f74ff Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/__main__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/cli.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/cli.cpython-312.pyc new file mode 100644 index 0000000..e2db50a Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/cli.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/codec.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/codec.cpython-312.pyc new file mode 100644 index 0000000..01ea893 Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/codec.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/compat.cpython-312.pyc new file mode 100644 index 0000000..05b25b2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/compat.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/core.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/core.cpython-312.pyc new file mode 100644 index 0000000..65329a3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/core.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/idnadata.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/idnadata.cpython-312.pyc new file mode 100644 index 0000000..8f52107 Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/idnadata.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/intranges.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/intranges.cpython-312.pyc new file mode 100644 index 0000000..54a42c1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/intranges.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/package_data.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/package_data.cpython-312.pyc new file mode 100644 index 0000000..2fb92c2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/package_data.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/__pycache__/uts46data.cpython-312.pyc b/venv/lib/python3.12/site-packages/idna/__pycache__/uts46data.cpython-312.pyc new file mode 100644 index 0000000..d3706ff Binary files /dev/null and b/venv/lib/python3.12/site-packages/idna/__pycache__/uts46data.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/idna/cli.py b/venv/lib/python3.12/site-packages/idna/cli.py new file mode 100644 index 0000000..4acda2c --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/cli.py @@ -0,0 +1,128 @@ +"""Command-line interface for the :mod:`idna` package. + +Invoked via ``python -m idna``. See :func:`main` for the entry point. +""" + +import argparse +import sys +from collections.abc import Iterable +from itertools import chain +from typing import IO, Optional + +from . import IDNAError, decode, encode +from .core import _alabel_prefix, _unicode_dots_re +from .package_data import __version__ + + +def _looks_like_alabel(s: str) -> bool: + """Return True if any label in ``s`` carries the ``xn--`` ACE prefix.""" + prefix = _alabel_prefix.decode("ascii") + return any(label.lower().startswith(prefix) for label in _unicode_dots_re.split(s)) + + +def _build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + prog="python -m idna", + description=( + "Convert a domain name between its Unicode (U-label) and " + "ASCII-compatible (A-label) forms. With no mode flag, the " + "direction is chosen from the first input — if it contains " + "an xn-- label the stream is decoded, otherwise it is " + "encoded — and the same mode is applied to every remaining " + "input. UTS #46 mapping is applied by default; pass " + "--strict to disable it. When no domains are given on the " + "command line and stdin is piped, one domain per line is " + "read from stdin." + ), + ) + mode = parser.add_mutually_exclusive_group() + mode.add_argument( + "-e", + "--encode", + dest="mode", + action="store_const", + const="encode", + help="Encode the input to its ASCII A-label form.", + ) + mode.add_argument( + "-d", + "--decode", + dest="mode", + action="store_const", + const="decode", + help="Decode the input from its ASCII A-label form.", + ) + parser.add_argument( + "--strict", + action="store_true", + help="Disable the default UTS #46 mapping and apply IDNA 2008 rules verbatim.", + ) + parser.add_argument( + "--version", + action="version", + version=f"idna {__version__}", + ) + parser.add_argument( + "domain", + nargs="*", + help="One or more domain names to convert. Omit to read from stdin.", + ) + return parser + + +def _iter_stdin(stream: IO[str]) -> Iterable[str]: + """Yield non-empty stripped lines from ``stream``, ignoring blanks.""" + for line in stream: + stripped = line.strip() + if stripped: + yield stripped + + +def _convert_one(domain: str, mode: str, uts46: bool) -> bool: + """Convert ``domain`` and write the result; return ``False`` on failure.""" + try: + if mode == "decode": + print(decode(domain, uts46=uts46)) + else: + print(encode(domain, uts46=uts46).decode("ascii")) + except IDNAError as err: + print(f"idna: {mode} failed for {domain!r}: {err}", file=sys.stderr) + return False + return True + + +def main(argv: Optional[list[str]] = None) -> int: + """Entry point for ``python -m idna``. + + When more than one domain is supplied (via positional arguments or + piped stdin) and no mode flag is given, the first input determines + the direction and that mode is applied uniformly to the rest. + + :param argv: Argument list excluding the program name. Defaults to + :data:`sys.argv` when ``None``. + :returns: ``0`` on success, ``1`` if any conversion fails. + """ + parser = _build_parser() + args = parser.parse_args(argv) + uts46 = not args.strict + + if args.domain: + domains: Iterable[str] = args.domain + elif not sys.stdin.isatty(): + domains = _iter_stdin(sys.stdin) + else: + parser.error("a domain argument is required when stdin is a terminal") + + iterator = iter(domains) + first = next(iterator, None) + if first is None: + return 0 + + mode = args.mode or ("decode" if _looks_like_alabel(first) else "encode") + + results = [_convert_one(domain, mode, uts46) for domain in chain([first], iterator)] + return 0 if all(results) else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/venv/lib/python3.12/site-packages/idna/codec.py b/venv/lib/python3.12/site-packages/idna/codec.py new file mode 100644 index 0000000..83b42fe --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/codec.py @@ -0,0 +1,159 @@ +import codecs +from typing import Any, Optional + +from .core import IDNAError, _unicode_dots_re, alabel, decode, encode, ulabel + + +class Codec(codecs.Codec): + """Stateless IDNA 2008 codec. + + Implements the :class:`codecs.Codec` protocol so that the whole-domain + encoder (:func:`idna.encode`) and decoder (:func:`idna.decode`) are + accessible through the standard codec machinery as ``"idna2008"``. + + Only the ``"strict"`` error handler is supported; any other handler + raises :exc:`~idna.IDNAError`. + """ + + def encode(self, data: str, errors: str = "strict") -> tuple[bytes, int]: # ty: ignore[invalid-method-override] + if errors != "strict": + raise IDNAError(f'Unsupported error handling "{errors}"') + + if not data: + return b"", 0 + + return encode(data), len(data) + + def decode(self, data: bytes, errors: str = "strict") -> tuple[str, int]: # ty: ignore[invalid-method-override] + if errors != "strict": + raise IDNAError(f'Unsupported error handling "{errors}"') + + if not data: + return "", 0 + + return decode(data), len(data) + + +class IncrementalEncoder(codecs.BufferedIncrementalEncoder): + """Incremental IDNA 2008 encoder. + + Buffers a partial trailing label across calls until either the next + label separator is seen or ``final=True``, so that streamed input is + encoded one whole label at a time. Any of the four Unicode label + separators (``U+002E``, ``U+3002``, ``U+FF0E``, ``U+FF61``) ends a + label; the result always uses ``U+002E`` as the separator. + + Only the ``"strict"`` error handler is supported. + """ + + def _buffer_encode(self, data: str, errors: str, final: bool) -> tuple[bytes, int]: # ty: ignore[invalid-method-override] + if errors != "strict": + raise IDNAError(f'Unsupported error handling "{errors}"') + + if not data: + return b"", 0 + + labels = _unicode_dots_re.split(data) + trailing_dot = b"" + if labels: + if not labels[-1]: + trailing_dot = b"." + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = b"." + + result = [] + size = 0 + for label in labels: + result.append(alabel(label)) + if size: + size += 1 + size += len(label) + + # Join with U+002E + result_bytes = b".".join(result) + trailing_dot + size += len(trailing_dot) + return result_bytes, size + + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + """Incremental IDNA 2008 decoder. + + Buffers a partial trailing label across calls until either the next + label separator is seen or ``final=True``, so that streamed input is + decoded one whole label at a time. + + Only the ``"strict"`` error handler is supported. + """ + + def _buffer_decode(self, data: Any, errors: str, final: bool) -> tuple[str, int]: # ty: ignore[invalid-method-override] + if errors != "strict": + raise IDNAError(f'Unsupported error handling "{errors}"') + + if not data: + return ("", 0) + + if not isinstance(data, str): + data = str(data, "ascii") + + labels = _unicode_dots_re.split(data) + trailing_dot = "" + if labels: + if not labels[-1]: + trailing_dot = "." + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = "." + + result = [] + size = 0 + for label in labels: + result.append(ulabel(label)) + if size: + size += 1 + size += len(label) + + result_str = ".".join(result) + trailing_dot + size += len(trailing_dot) + return (result_str, size) + + +class StreamWriter(Codec, codecs.StreamWriter): + pass + + +class StreamReader(Codec, codecs.StreamReader): + pass + + +def search_function(name: str) -> Optional[codecs.CodecInfo]: + """Codec search function registered with :mod:`codecs`. + + Returns a :class:`codecs.CodecInfo` for the ``"idna2008"`` codec name + so that ``str.encode("idna2008")`` and ``bytes.decode("idna2008")`` + invoke the IDNA 2008 codec defined in this module. + + :param name: The codec name being looked up. + :returns: A :class:`codecs.CodecInfo` instance if ``name`` is + ``"idna2008"``, otherwise ``None``. + """ + if name != "idna2008": + return None + return codecs.CodecInfo( + name=name, + encode=Codec().encode, + decode=Codec().decode, # type: ignore + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) + + +codecs.register(search_function) diff --git a/venv/lib/python3.12/site-packages/idna/compat.py b/venv/lib/python3.12/site-packages/idna/compat.py new file mode 100644 index 0000000..1d01e3d --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/compat.py @@ -0,0 +1,41 @@ +from typing import Any, Union + +from .core import decode, encode + + +def ToASCII(label: str) -> bytes: + """Compatibility shim for :rfc:`3490` ``ToASCII``. + + Delegates to :func:`idna.encode` (IDNA 2008). Provided to ease porting + of code written against the legacy :mod:`encodings.idna` API; new code + should call :func:`idna.encode` directly. + + :param label: The label or domain to encode. + :returns: The encoded form as ASCII :class:`bytes`. + """ + return encode(label) + + +def ToUnicode(label: Union[bytes, bytearray]) -> str: + """Compatibility shim for :rfc:`3490` ``ToUnicode``. + + Delegates to :func:`idna.decode` (IDNA 2008). Provided to ease porting + of code written against the legacy :mod:`encodings.idna` API; new code + should call :func:`idna.decode` directly. + + :param label: The label or domain to decode. + :returns: The decoded Unicode form. + """ + return decode(label) + + +def nameprep(s: Any) -> None: + """Stub for :rfc:`3491` Nameprep, which is not used by IDNA 2008. + + IDNA 2008 (:rfc:`5891`) replaces Nameprep with the per-codepoint + validity classes from :rfc:`5892`; this function exists only to + return a clear error if legacy code attempts to call it. + + :raises NotImplementedError: Always. + """ + raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") diff --git a/venv/lib/python3.12/site-packages/idna/core.py b/venv/lib/python3.12/site-packages/idna/core.py new file mode 100644 index 0000000..1ccbd1f --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/core.py @@ -0,0 +1,648 @@ +import bisect +import re +import unicodedata +import warnings +from typing import Optional, Union + +from . import idnadata +from .intranges import intranges_contain + +_virama_combining_class = 9 +_alabel_prefix = b"xn--" +_max_input_length = 1024 +_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") + + +# Bidi category sets from RFC 5893, hoisted out of the per-codepoint loop +_bidi_rtl_first = frozenset({"R", "AL"}) +_bidi_rtl_categories = frozenset({"R", "AL", "AN"}) +_bidi_rtl_allowed = frozenset({"R", "AL", "AN", "EN", "ES", "CS", "ET", "ON", "BN", "NSM"}) +_bidi_rtl_valid_ending = frozenset({"R", "AL", "EN", "AN"}) +_bidi_rtl_numeric = frozenset({"AN", "EN"}) +_bidi_ltr_allowed = frozenset({"L", "EN", "ES", "CS", "ET", "ON", "BN", "NSM"}) +_bidi_ltr_valid_ending = frozenset({"L", "EN"}) +_bidi_joiner_l_or_d = frozenset({"L", "D"}) +_bidi_joiner_r_or_d = frozenset({"R", "D"}) + + +def _joining_type(cp: int) -> Optional[str]: + for jt, ranges in idnadata.joining_types.items(): + if intranges_contain(cp, ranges): + return jt + return None + + +class IDNAError(UnicodeError): + """Base exception for all IDNA-encoding related problems""" + + +class IDNABidiError(IDNAError): + """Exception when bidirectional requirements are not satisfied""" + + +class InvalidCodepoint(IDNAError): + """Exception when a disallowed or unallocated codepoint is used""" + + +class InvalidCodepointContext(IDNAError): + """Exception when the codepoint is not valid in the context it is used""" + + +def _combining_class(cp: int) -> int: + v = unicodedata.combining(chr(cp)) + if v == 0 and not unicodedata.name(chr(cp)): + raise ValueError("Unknown character in unicodedata") + return v + + +def _is_script(cp: str, script: str) -> bool: + return intranges_contain(ord(cp), idnadata.scripts[script]) + + +def _punycode(s: str) -> bytes: + return s.encode("punycode") + + +def _unot(s: int) -> str: + return f"U+{s:04X}" + + +def valid_label_length(label: Union[bytes, str]) -> bool: + """Check that a label does not exceed the maximum permitted length. + + Per :rfc:`1035` (and :rfc:`5891` §4.2.4) a DNS label must not exceed + 63 octets. The argument may be either a :class:`str` (a U-label, where + length is measured in characters) or :class:`bytes` (an A-label, where + length is measured in octets). + + :param label: The label to check. + :returns: ``True`` if the label is within the length limit, otherwise + ``False``. + """ + return len(label) <= 63 + + +def valid_string_length(domain: Union[bytes, str], trailing_dot: bool) -> bool: + """Check that a full domain name does not exceed the maximum length. + + Per :rfc:`1035`, a domain name is limited to 253 octets when no trailing + dot is present, or 254 octets when one is included. + + :param domain: The full (possibly multi-label) domain name. + :param trailing_dot: ``True`` if ``domain`` includes a trailing ``.``. + :returns: ``True`` if the domain is within the length limit, otherwise + ``False``. + """ + return len(domain) <= (254 if trailing_dot else 253) + + +def check_bidi(label: str, check_ltr: bool = False) -> bool: + """Validate the Bidi Rule from :rfc:`5893` for a single label. + + The Bidi Rule constrains how bidirectional characters (Hebrew, Arabic, + etc.) may appear within a label. By default the check is only applied + when the label contains at least one right-to-left character (Unicode + bidirectional categories ``R``, ``AL``, or ``AN``); set ``check_ltr`` + to ``True`` to apply it to LTR-only labels as well. + + :param label: The label to validate, as a Unicode string. + :param check_ltr: If ``True``, apply the rules even when the label + contains no RTL characters. + :returns: ``True`` if the label satisfies the Bidi Rule. + :raises IDNABidiError: If any of Bidi Rule conditions 1-6 are violated, + or if the directional category of a codepoint cannot be determined. + """ + if len(label) > _max_input_length: + raise IDNAError("Label too long") + # Bidi rules should only be applied if string contains RTL characters + bidi_label = False + for idx, cp in enumerate(label, 1): + direction = unicodedata.bidirectional(cp) + if direction == "": + # String likely comes from a newer version of Unicode + raise IDNABidiError(f"Unknown directionality in label {label!r} at position {idx}") + if direction in _bidi_rtl_categories: + bidi_label = True + if not bidi_label and not check_ltr: + return True + + # Bidi rule 1 + direction = unicodedata.bidirectional(label[0]) + if direction in _bidi_rtl_first: + rtl = True + elif direction == "L": + rtl = False + else: + raise IDNABidiError(f"First codepoint in label {label!r} must be directionality L, R or AL") + + valid_ending = False + number_type: Optional[str] = None + for idx, cp in enumerate(label, 1): + direction = unicodedata.bidirectional(cp) + + if rtl: + # Bidi rule 2 + if direction not in _bidi_rtl_allowed: + raise IDNABidiError(f"Invalid direction for codepoint at position {idx} in a right-to-left label") + # Bidi rule 3 + if direction in _bidi_rtl_valid_ending: + valid_ending = True + elif direction != "NSM": + valid_ending = False + # Bidi rule 4 + if direction in _bidi_rtl_numeric: + if not number_type: + number_type = direction + elif number_type != direction: + raise IDNABidiError("Can not mix numeral types in a right-to-left label") + else: + # Bidi rule 5 + if direction not in _bidi_ltr_allowed: + raise IDNABidiError(f"Invalid direction for codepoint at position {idx} in a left-to-right label") + # Bidi rule 6 + if direction in _bidi_ltr_valid_ending: + valid_ending = True + elif direction != "NSM": + valid_ending = False + + if not valid_ending: + raise IDNABidiError("Label ends with illegal codepoint directionality") + + return True + + +def check_initial_combiner(label: str) -> bool: + """Reject labels that begin with a combining mark. + + Per :rfc:`5891` §4.2.3.2 a label must not start with a character of + Unicode general category ``M`` (Mark). + + :param label: The label to check. + :returns: ``True`` if the first character is not a combining mark. + :raises IDNAError: If the label begins with a combining character. + """ + if unicodedata.category(label[0])[0] == "M": + raise IDNAError("Label begins with an illegal combining character") + return True + + +def check_hyphen_ok(label: str) -> bool: + """Validate the hyphen restrictions for a label. + + Per :rfc:`5891` §4.2.3.1 a label must not start or end with a hyphen + (``U+002D``), and must not have hyphens in both the third and fourth + positions (the prefix reserved for A-labels). + + :param label: The label to check. + :returns: ``True`` if the hyphen restrictions are satisfied. + :raises IDNAError: If any of the hyphen restrictions are violated. + """ + if label[2:4] == "--": + raise IDNAError("Label has disallowed hyphens in 3rd and 4th position") + if label[0] == "-" or label[-1] == "-": + raise IDNAError("Label must not start or end with a hyphen") + return True + + +def check_nfc(label: str) -> None: + """Require that a label is in Unicode Normalization Form C. + + :param label: The label to check. + :raises IDNAError: If ``label`` differs from its NFC normalisation. + """ + if len(label) > _max_input_length: + raise IDNAError("Label too long") + if unicodedata.normalize("NFC", label) != label: + raise IDNAError("Label must be in Normalization Form C") + + +def valid_contextj(label: str, pos: int) -> bool: + """Validate the CONTEXTJ rules from :rfc:`5892` Appendix A. + + These rules govern the contextual use of the joiner codepoints + ``U+200C`` (ZERO WIDTH NON-JOINER, Appendix A.1) and ``U+200D`` + (ZERO WIDTH JOINER, Appendix A.2) within a label. + + :param label: The label containing the codepoint. + :param pos: Index of the joiner codepoint within ``label``. + :returns: ``True`` if the codepoint at ``pos`` satisfies its CONTEXTJ + rule, ``False`` otherwise (including when the codepoint at + ``pos`` is not a recognised joiner). + :raises ValueError: If an adjacent codepoint has no Unicode name when + determining its combining class. + :raises IDNAError: If ``label`` exceeds the defensive input length limit. + """ + if len(label) > _max_input_length: + raise IDNAError("Label too long") + cp_value = ord(label[pos]) + + if cp_value == 0x200C: + if pos > 0 and _combining_class(ord(label[pos - 1])) == _virama_combining_class: + return True + + ok = False + for i in range(pos - 1, -1, -1): + joining_type = _joining_type(ord(label[i])) + if joining_type == "T": + continue + if joining_type in _bidi_joiner_l_or_d: + ok = True + break + break + + if not ok: + return False + + ok = False + for i in range(pos + 1, len(label)): + joining_type = _joining_type(ord(label[i])) + if joining_type == "T": + continue + if joining_type in _bidi_joiner_r_or_d: + ok = True + break + break + return ok + + if cp_value == 0x200D: + return pos > 0 and _combining_class(ord(label[pos - 1])) == _virama_combining_class + + return False + + +def valid_contexto(label: str, pos: int, exception: bool = False) -> bool: + """Validate the CONTEXTO rules from :rfc:`5892` Appendix A. + + Covers the contextual rules for codepoints such as MIDDLE DOT + (``U+00B7``), Greek lower numeral sign, Hebrew punctuation, Katakana + middle dot, and the Arabic-Indic / Extended Arabic-Indic digit ranges. + + :param label: The label containing the codepoint. + :param pos: Index of the codepoint within ``label``. + :param exception: Reserved for forward compatibility; currently unused. + :returns: ``True`` if the codepoint at ``pos`` satisfies its CONTEXTO + rule, ``False`` otherwise (including when the codepoint is not a + recognised CONTEXTO codepoint). + :raises IDNAError: If ``label`` exceeds the defensive input length limit. + """ + if len(label) > _max_input_length: + raise IDNAError("Label too long") + cp_value = ord(label[pos]) + + if cp_value == 0x00B7: + return 0 < pos < len(label) - 1 and ord(label[pos - 1]) == 0x006C and ord(label[pos + 1]) == 0x006C + + if cp_value == 0x0375: + if pos < len(label) - 1 and len(label) > 1: + return _is_script(label[pos + 1], "Greek") + return False + + if cp_value in {0x05F3, 0x05F4}: + if pos > 0: + return _is_script(label[pos - 1], "Hebrew") + return False + + if cp_value == 0x30FB: + for cp in label: + if cp == "\u30fb": + continue + if _is_script(cp, "Hiragana") or _is_script(cp, "Katakana") or _is_script(cp, "Han"): + return True + return False + + if 0x660 <= cp_value <= 0x669: + return not any(0x6F0 <= ord(cp) <= 0x06F9 for cp in label) + + if 0x6F0 <= cp_value <= 0x6F9: + return not any(0x660 <= ord(cp) <= 0x0669 for cp in label) + + return False + + +def check_label(label: Union[str, bytes, bytearray]) -> None: + """Run the full set of IDNA 2008 validity checks on a single label. + + Applies, in order: NFC normalisation (:func:`check_nfc`), hyphen + restrictions (:func:`check_hyphen_ok`), the no-leading-combiner rule + (:func:`check_initial_combiner`), per-codepoint validity (PVALID, + CONTEXTJ, CONTEXTO classes from :rfc:`5892`), and the Bidi Rule + (:func:`check_bidi`). + + :param label: The label to validate. ``bytes`` or ``bytearray`` input + is decoded as UTF-8 first. + :raises IDNAError: If the label is empty or fails a structural rule. + :raises InvalidCodepoint: If the label contains a DISALLOWED or + UNASSIGNED codepoint. + :raises InvalidCodepointContext: If a CONTEXTJ or CONTEXTO codepoint + is not valid in its context. + :raises IDNABidiError: If the Bidi Rule is violated. + """ + if len(label) > _max_input_length: + raise IDNAError("Label too long") + if isinstance(label, (bytes, bytearray)): + label = label.decode("utf-8") + if len(label) == 0: + raise IDNAError("Empty Label") + + # Reject on domain length rather than label length so support some UTS 46 + # use cases, still reducing processing of label contextual rules + if not valid_string_length(label, trailing_dot=True): + raise IDNAError("Label too long") + + check_nfc(label) + check_hyphen_ok(label) + check_initial_combiner(label) + + for pos, cp in enumerate(label): + cp_value = ord(cp) + if intranges_contain(cp_value, idnadata.codepoint_classes["PVALID"]): + continue + if intranges_contain(cp_value, idnadata.codepoint_classes["CONTEXTJ"]): + try: + if not valid_contextj(label, pos): + raise InvalidCodepointContext(f"Joiner {_unot(cp_value)} not allowed at position {pos + 1} in {label!r}") + except ValueError as err: + raise IDNAError( + f"Unknown codepoint adjacent to joiner {_unot(cp_value)} at position {pos + 1} in {label!r}" + ) from err + elif intranges_contain(cp_value, idnadata.codepoint_classes["CONTEXTO"]): + if not valid_contexto(label, pos): + raise InvalidCodepointContext(f"Codepoint {_unot(cp_value)} not allowed at position {pos + 1} in {label!r}") + else: + raise InvalidCodepoint(f"Codepoint {_unot(cp_value)} at position {pos + 1} of {label!r} not allowed") + + check_bidi(label) + + +def alabel(label: str) -> bytes: + """Convert a single U-label into its A-label form. + + The result is the ASCII-Compatible Encoding (ACE) form per :rfc:`5891` + §4: the label is validated, Punycode-encoded, and prefixed with + ``xn--``. Pure ASCII labels that are already valid IDNA labels are + returned unchanged (as :class:`bytes`). + + :param label: The label to convert, as a Unicode string. + :returns: The A-label as ASCII-encoded :class:`bytes`. + :raises IDNAError: If the label is invalid or the resulting A-label + exceeds 63 octets. + """ + if len(label) > _max_input_length: + raise IDNAError("Label too long") + try: + label_bytes = label.encode("ascii") + except UnicodeEncodeError: + pass + else: + ulabel(label_bytes) + if not valid_label_length(label_bytes): + raise IDNAError("Label too long") + return label_bytes + + check_label(label) + label_bytes = _alabel_prefix + _punycode(label) + + if not valid_label_length(label_bytes): + raise IDNAError("Label too long") + + return label_bytes + + +def ulabel(label: Union[str, bytes, bytearray]) -> str: + """Convert a single A-label into its U-label form. + + Performs the inverse of :func:`alabel`: an ``xn--``-prefixed label is + Punycode-decoded and validated. Labels that are already Unicode (or + plain ASCII without the ACE prefix) are validated and returned as a + Unicode string. + + :param label: The label to convert. ``bytes`` or ``bytearray`` input + is treated as ASCII. + :returns: The U-label as a Unicode string. + :raises IDNAError: If the label is malformed or fails validation. + """ + if len(label) > _max_input_length: + raise IDNAError("Label too long") + if not isinstance(label, (bytes, bytearray)): + try: + label_bytes = label.encode("ascii") + except UnicodeEncodeError: + check_label(label) + return label + else: + label_bytes = bytes(label) + + label_bytes = label_bytes.lower() + if label_bytes.startswith(_alabel_prefix): + label_bytes = label_bytes[len(_alabel_prefix) :] + if not label_bytes: + raise IDNAError("Malformed A-label, no Punycode eligible content found") + if label_bytes.endswith(b"-"): + raise IDNAError("A-label must not end with a hyphen") + else: + check_label(label_bytes) + return label_bytes.decode("ascii") + + try: + label = label_bytes.decode("punycode") + except UnicodeError as err: + raise IDNAError("Invalid A-label") from err + check_label(label) + return label + + +def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str: + """Apply the UTS #46 character mapping to a domain string. + + Implements the mapping table from `UTS #46 §4 + `_: each character is kept, + replaced, or rejected based on its status (``V``, ``M``, ``D``, ``3``, + ``I``). The result is returned in Normalisation Form C. + + :param domain: The full domain name to remap. + :param std3_rules: If ``True``, apply the stricter STD3 ASCII rules + (status ``3`` codepoints raise instead of being kept or mapped). + :param transitional: If ``True``, use transitional processing (status + ``D`` codepoints are mapped instead of kept). Transitional + processing has been removed from UTS #46 and this option is + retained only for backwards compatibility. + :returns: The remapped domain, in Normalisation Form C. + :raises InvalidCodepoint: If the domain contains a disallowed + codepoint under the chosen rules. + :raises IDNAError: If ``domain`` exceeds the defensive input length limit. + """ + if len(domain) > _max_input_length: + raise IDNAError("Domain too long") + from .uts46data import uts46_replacements, uts46_starts, uts46_statuses + + output = "" + + for pos, char in enumerate(domain): + code_point = ord(char) + i = code_point if code_point < 256 else bisect.bisect_right(uts46_starts, code_point) - 1 + status = chr(uts46_statuses[i]) + replacement: Optional[str] = uts46_replacements[i] + + # UTS #46 §4: V is always valid, D is deviation (kept unless transitional), + # 3 is disallowed-STD3 (kept unmapped if std3_rules is off and no mapping). + keep_as_is = ( + status == "V" or (status == "D" and not transitional) or (status == "3" and not std3_rules and replacement is None) + ) + # M is mapped, 3-with-replacement and transitional D fall through to the + # same replacement output path. + use_replacement = replacement is not None and ( + status == "M" or (status == "3" and not std3_rules) or (status == "D" and transitional) + ) + + if keep_as_is: + output += char + elif use_replacement: + assert replacement is not None # narrowed by use_replacement + output += replacement + elif status == "I": + continue + else: + raise InvalidCodepoint(f"Codepoint {_unot(code_point)} not allowed at position {pos + 1} in {domain!r}") + + return unicodedata.normalize("NFC", output) + + +def encode( + s: Union[str, bytes, bytearray], + strict: bool = False, + uts46: bool = False, + std3_rules: bool = False, + transitional: bool = False, +) -> bytes: + """Encode a Unicode domain name into its ASCII (A-label) form. + + Splits the input on label separators (only ``U+002E`` if ``strict`` is + set; otherwise also IDEOGRAPHIC FULL STOP ``U+3002``, FULLWIDTH FULL + STOP ``U+FF0E``, and HALFWIDTH IDEOGRAPHIC FULL STOP ``U+FF61``), + encodes each label with :func:`alabel`, and rejoins them with ``.``. + Optionally pre-processes the input through :func:`uts46_remap`. + + :param s: The domain name to encode. + :param strict: If ``True``, only ``U+002E`` is recognised as a label + separator. + :param uts46: If ``True``, apply UTS #46 mapping before encoding. + :param std3_rules: Forwarded to :func:`uts46_remap` when ``uts46`` is + ``True``. + :param transitional: Forwarded to :func:`uts46_remap` when ``uts46`` + is ``True``. Deprecated: emits a :class:`DeprecationWarning` and + will be removed in a future version. + :returns: The encoded domain as ASCII :class:`bytes`. + :raises IDNAError: If the domain is empty, contains an invalid label, + or exceeds the maximum domain length. + """ + if transitional: + warnings.warn( + "Transitional processing has been removed from UTS #46. " + "The transitional argument will be removed in a future version.", + DeprecationWarning, + stacklevel=2, + ) + if not isinstance(s, str): + try: + s = str(s, "ascii") + except (UnicodeDecodeError, TypeError) as err: + raise IDNAError("should pass a unicode string to the function rather than a byte string.") from err + if len(s) > _max_input_length: + raise IDNAError("Domain too long") + if uts46: + s = uts46_remap(s, std3_rules, transitional) + + # Reject inputs that exceed the maximum DNS domain length up-front + # to avoid expensive computation on long inputs. + if not valid_string_length(s, trailing_dot=True): + raise IDNAError("Domain too long") + + trailing_dot = False + result = [] + labels = s.split(".") if strict else _unicode_dots_re.split(s) + if not labels or labels == [""]: + raise IDNAError("Empty domain") + if labels[-1] == "": + del labels[-1] + trailing_dot = True + for label in labels: + s = alabel(label) + if s: + result.append(s) + else: + raise IDNAError("Empty label") + if trailing_dot: + result.append(b"") + s = b".".join(result) + if not valid_string_length(s, trailing_dot): + raise IDNAError("Domain too long") + return s + + +def decode( + s: Union[str, bytes, bytearray], + strict: bool = False, + uts46: bool = False, + std3_rules: bool = False, + display: bool = False, +) -> str: + """Decode an A-label-encoded domain name back to Unicode. + + Splits the input on label separators (see :func:`encode` for the + rules), decodes each label with :func:`ulabel`, and rejoins them + with ``.``. Optionally pre-processes the input through + :func:`uts46_remap`. + + :param s: The domain name to decode. + :param strict: If ``True``, only ``U+002E`` is recognised as a label + separator. + :param uts46: If ``True``, apply UTS #46 mapping before decoding. + :param std3_rules: Forwarded to :func:`uts46_remap` when ``uts46`` is + ``True``. + :param display: If ``True``, any ``xn--`` label that fails IDNA + validation is passed through unchanged (lowercased) rather than + aborting the whole call. Intended for "decode for display" + consumers (e.g. URL libraries, HTTP clients) that want to show + the user the label as it appears on the wire when it cannot be + rendered as Unicode. Matches the per-label recovery prescribed + by UTS #46 §4 and the WHATWG URL "domain to Unicode" algorithm. + :returns: The decoded domain as a Unicode string. + :raises IDNAError: If the input is not valid ASCII, contains an + invalid label, or is empty. + """ + if not isinstance(s, str): + try: + s = str(s, "ascii") + except (UnicodeDecodeError, TypeError) as err: + raise IDNAError("Invalid ASCII in A-label") from err + if len(s) > _max_input_length: + raise IDNAError("Domain too long") + if uts46: + s = uts46_remap(s, std3_rules, False) + # Reject inputs that exceed the maximum DNS domain length up-front + # to avoid expensive computation on long inputs. + if not valid_string_length(s, trailing_dot=True): + raise IDNAError("Domain too long") + trailing_dot = False + result = [] + labels = s.split(".") if strict else _unicode_dots_re.split(s) + if not labels or labels == [""]: + raise IDNAError("Empty domain") + if not labels[-1]: + del labels[-1] + trailing_dot = True + for label in labels: + try: + u = ulabel(label) + except IDNAError: + if display and label[:4].lower() == "xn--": + u = label.lower() + else: + raise + if u: + result.append(u) + else: + raise IDNAError("Empty label") + if trailing_dot: + result.append("") + return ".".join(result) diff --git a/venv/lib/python3.12/site-packages/idna/idnadata.py b/venv/lib/python3.12/site-packages/idna/idnadata.py new file mode 100644 index 0000000..f2ab388 --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/idnadata.py @@ -0,0 +1,1897 @@ +# This file is automatically generated by tools/idna-data + +__version__ = "17.0.0" + +scripts = { + "Greek": ( + 0x37000000374, + 0x37500000378, + 0x37A0000037E, + 0x37F00000380, + 0x38400000385, + 0x38600000387, + 0x3880000038B, + 0x38C0000038D, + 0x38E000003A2, + 0x3A3000003E2, + 0x3F000000400, + 0x1D2600001D2B, + 0x1D5D00001D62, + 0x1D6600001D6B, + 0x1DBF00001DC0, + 0x1F0000001F16, + 0x1F1800001F1E, + 0x1F2000001F46, + 0x1F4800001F4E, + 0x1F5000001F58, + 0x1F5900001F5A, + 0x1F5B00001F5C, + 0x1F5D00001F5E, + 0x1F5F00001F7E, + 0x1F8000001FB5, + 0x1FB600001FC5, + 0x1FC600001FD4, + 0x1FD600001FDC, + 0x1FDD00001FF0, + 0x1FF200001FF5, + 0x1FF600001FFF, + 0x212600002127, + 0xAB650000AB66, + 0x101400001018F, + 0x101A0000101A1, + 0x1D2000001D246, + ), + "Han": ( + 0x2E8000002E9A, + 0x2E9B00002EF4, + 0x2F0000002FD6, + 0x300500003006, + 0x300700003008, + 0x30210000302A, + 0x30380000303C, + 0x340000004DC0, + 0x4E000000A000, + 0xF9000000FA6E, + 0xFA700000FADA, + 0x16FE200016FE4, + 0x16FF000016FF7, + 0x200000002A6E0, + 0x2A7000002B81E, + 0x2B8200002CEAE, + 0x2CEB00002EBE1, + 0x2EBF00002EE5E, + 0x2F8000002FA1E, + 0x300000003134B, + 0x313500003347A, + ), + "Hebrew": ( + 0x591000005C8, + 0x5D0000005EB, + 0x5EF000005F5, + 0xFB1D0000FB37, + 0xFB380000FB3D, + 0xFB3E0000FB3F, + 0xFB400000FB42, + 0xFB430000FB45, + 0xFB460000FB50, + ), + "Hiragana": ( + 0x304100003097, + 0x309D000030A0, + 0x1B0010001B120, + 0x1B1320001B133, + 0x1B1500001B153, + 0x1F2000001F201, + ), + "Katakana": ( + 0x30A1000030FB, + 0x30FD00003100, + 0x31F000003200, + 0x32D0000032FF, + 0x330000003358, + 0xFF660000FF70, + 0xFF710000FF9E, + 0x1AFF00001AFF4, + 0x1AFF50001AFFC, + 0x1AFFD0001AFFF, + 0x1B0000001B001, + 0x1B1200001B123, + 0x1B1550001B156, + 0x1B1640001B168, + ), +} + + +joining_types = { + "C": ( + 0x64000000641, + 0x7FA000007FB, + 0x88300000886, + 0x180A0000180B, + 0x200D0000200E, + ), + "D": ( + 0x62000000621, + 0x62600000627, + 0x62800000629, + 0x62A0000062F, + 0x63300000640, + 0x64100000648, + 0x6490000064B, + 0x66E00000670, + 0x67800000688, + 0x69A000006C0, + 0x6C1000006C3, + 0x6CC000006CD, + 0x6CE000006CF, + 0x6D0000006D2, + 0x6FA000006FD, + 0x6FF00000700, + 0x71200000715, + 0x71A0000071E, + 0x71F00000728, + 0x7290000072A, + 0x72B0000072C, + 0x72D0000072F, + 0x74E00000759, + 0x75C0000076B, + 0x76D00000771, + 0x77200000773, + 0x77500000778, + 0x77A00000780, + 0x7CA000007EB, + 0x84100000846, + 0x84800000849, + 0x84A00000854, + 0x85500000856, + 0x86000000861, + 0x86200000866, + 0x86800000869, + 0x88600000887, + 0x8890000088E, + 0x88F00000890, + 0x8A0000008AA, + 0x8AF000008B1, + 0x8B3000008B9, + 0x8BA000008C9, + 0x180700001808, + 0x182000001879, + 0x1887000018A9, + 0x18AA000018AB, + 0xA8400000A872, + 0x10AC000010AC5, + 0x10AD300010AD7, + 0x10AD800010ADD, + 0x10ADE00010AE1, + 0x10AEB00010AEF, + 0x10B8000010B81, + 0x10B8200010B83, + 0x10B8600010B89, + 0x10B8A00010B8C, + 0x10B8D00010B8E, + 0x10B9000010B91, + 0x10BAD00010BAF, + 0x10D0100010D22, + 0x10D2300010D24, + 0x10EC300010EC5, + 0x10EC600010EC8, + 0x10F3000010F33, + 0x10F3400010F45, + 0x10F5100010F54, + 0x10F7000010F74, + 0x10F7600010F82, + 0x10FB000010FB1, + 0x10FB200010FB4, + 0x10FB800010FB9, + 0x10FBB00010FBD, + 0x10FBE00010FC0, + 0x10FC100010FC2, + 0x10FC400010FC5, + 0x10FCA00010FCB, + 0x1E9000001E944, + ), + "L": ( + 0xA8720000A873, + 0x10ACD00010ACE, + 0x10AD700010AD8, + 0x10D0000010D01, + 0x10FCB00010FCC, + ), + "R": ( + 0x62200000626, + 0x62700000628, + 0x6290000062A, + 0x62F00000633, + 0x64800000649, + 0x67100000674, + 0x67500000678, + 0x6880000069A, + 0x6C0000006C1, + 0x6C3000006CC, + 0x6CD000006CE, + 0x6CF000006D0, + 0x6D2000006D4, + 0x6D5000006D6, + 0x6EE000006F0, + 0x71000000711, + 0x7150000071A, + 0x71E0000071F, + 0x72800000729, + 0x72A0000072B, + 0x72C0000072D, + 0x72F00000730, + 0x74D0000074E, + 0x7590000075C, + 0x76B0000076D, + 0x77100000772, + 0x77300000775, + 0x7780000077A, + 0x84000000841, + 0x84600000848, + 0x8490000084A, + 0x85400000855, + 0x85600000859, + 0x86700000868, + 0x8690000086B, + 0x87000000883, + 0x88E0000088F, + 0x8AA000008AD, + 0x8AE000008AF, + 0x8B1000008B3, + 0x8B9000008BA, + 0x10AC500010AC6, + 0x10AC700010AC8, + 0x10AC900010ACB, + 0x10ACE00010AD3, + 0x10ADD00010ADE, + 0x10AE100010AE2, + 0x10AE400010AE5, + 0x10AEF00010AF0, + 0x10B8100010B82, + 0x10B8300010B86, + 0x10B8900010B8A, + 0x10B8C00010B8D, + 0x10B8E00010B90, + 0x10B9100010B92, + 0x10BA900010BAD, + 0x10D2200010D23, + 0x10EC200010EC3, + 0x10F3300010F34, + 0x10F5400010F55, + 0x10F7400010F76, + 0x10FB400010FB7, + 0x10FB900010FBB, + 0x10FBD00010FBE, + 0x10FC200010FC4, + 0x10FC900010FCA, + ), + "T": ( + 0xAD000000AE, + 0x30000000370, + 0x4830000048A, + 0x591000005BE, + 0x5BF000005C0, + 0x5C1000005C3, + 0x5C4000005C6, + 0x5C7000005C8, + 0x6100000061B, + 0x61C0000061D, + 0x64B00000660, + 0x67000000671, + 0x6D6000006DD, + 0x6DF000006E5, + 0x6E7000006E9, + 0x6EA000006EE, + 0x70F00000710, + 0x71100000712, + 0x7300000074B, + 0x7A6000007B1, + 0x7EB000007F4, + 0x7FD000007FE, + 0x8160000081A, + 0x81B00000824, + 0x82500000828, + 0x8290000082E, + 0x8590000085C, + 0x897000008A0, + 0x8CA000008E2, + 0x8E300000903, + 0x93A0000093B, + 0x93C0000093D, + 0x94100000949, + 0x94D0000094E, + 0x95100000958, + 0x96200000964, + 0x98100000982, + 0x9BC000009BD, + 0x9C1000009C5, + 0x9CD000009CE, + 0x9E2000009E4, + 0x9FE000009FF, + 0xA0100000A03, + 0xA3C00000A3D, + 0xA4100000A43, + 0xA4700000A49, + 0xA4B00000A4E, + 0xA5100000A52, + 0xA7000000A72, + 0xA7500000A76, + 0xA8100000A83, + 0xABC00000ABD, + 0xAC100000AC6, + 0xAC700000AC9, + 0xACD00000ACE, + 0xAE200000AE4, + 0xAFA00000B00, + 0xB0100000B02, + 0xB3C00000B3D, + 0xB3F00000B40, + 0xB4100000B45, + 0xB4D00000B4E, + 0xB5500000B57, + 0xB6200000B64, + 0xB8200000B83, + 0xBC000000BC1, + 0xBCD00000BCE, + 0xC0000000C01, + 0xC0400000C05, + 0xC3C00000C3D, + 0xC3E00000C41, + 0xC4600000C49, + 0xC4A00000C4E, + 0xC5500000C57, + 0xC6200000C64, + 0xC8100000C82, + 0xCBC00000CBD, + 0xCBF00000CC0, + 0xCC600000CC7, + 0xCCC00000CCE, + 0xCE200000CE4, + 0xD0000000D02, + 0xD3B00000D3D, + 0xD4100000D45, + 0xD4D00000D4E, + 0xD6200000D64, + 0xD8100000D82, + 0xDCA00000DCB, + 0xDD200000DD5, + 0xDD600000DD7, + 0xE3100000E32, + 0xE3400000E3B, + 0xE4700000E4F, + 0xEB100000EB2, + 0xEB400000EBD, + 0xEC800000ECF, + 0xF1800000F1A, + 0xF3500000F36, + 0xF3700000F38, + 0xF3900000F3A, + 0xF7100000F7F, + 0xF8000000F85, + 0xF8600000F88, + 0xF8D00000F98, + 0xF9900000FBD, + 0xFC600000FC7, + 0x102D00001031, + 0x103200001038, + 0x10390000103B, + 0x103D0000103F, + 0x10580000105A, + 0x105E00001061, + 0x107100001075, + 0x108200001083, + 0x108500001087, + 0x108D0000108E, + 0x109D0000109E, + 0x135D00001360, + 0x171200001715, + 0x173200001734, + 0x175200001754, + 0x177200001774, + 0x17B4000017B6, + 0x17B7000017BE, + 0x17C6000017C7, + 0x17C9000017D4, + 0x17DD000017DE, + 0x180B0000180E, + 0x180F00001810, + 0x188500001887, + 0x18A9000018AA, + 0x192000001923, + 0x192700001929, + 0x193200001933, + 0x19390000193C, + 0x1A1700001A19, + 0x1A1B00001A1C, + 0x1A5600001A57, + 0x1A5800001A5F, + 0x1A6000001A61, + 0x1A6200001A63, + 0x1A6500001A6D, + 0x1A7300001A7D, + 0x1A7F00001A80, + 0x1AB000001ADE, + 0x1AE000001AEC, + 0x1B0000001B04, + 0x1B3400001B35, + 0x1B3600001B3B, + 0x1B3C00001B3D, + 0x1B4200001B43, + 0x1B6B00001B74, + 0x1B8000001B82, + 0x1BA200001BA6, + 0x1BA800001BAA, + 0x1BAB00001BAE, + 0x1BE600001BE7, + 0x1BE800001BEA, + 0x1BED00001BEE, + 0x1BEF00001BF2, + 0x1C2C00001C34, + 0x1C3600001C38, + 0x1CD000001CD3, + 0x1CD400001CE1, + 0x1CE200001CE9, + 0x1CED00001CEE, + 0x1CF400001CF5, + 0x1CF800001CFA, + 0x1DC000001E00, + 0x200B0000200C, + 0x200E00002010, + 0x202A0000202F, + 0x206000002065, + 0x206A00002070, + 0x20D0000020F1, + 0x2CEF00002CF2, + 0x2D7F00002D80, + 0x2DE000002E00, + 0x302A0000302E, + 0x30990000309B, + 0xA66F0000A673, + 0xA6740000A67E, + 0xA69E0000A6A0, + 0xA6F00000A6F2, + 0xA8020000A803, + 0xA8060000A807, + 0xA80B0000A80C, + 0xA8250000A827, + 0xA82C0000A82D, + 0xA8C40000A8C6, + 0xA8E00000A8F2, + 0xA8FF0000A900, + 0xA9260000A92E, + 0xA9470000A952, + 0xA9800000A983, + 0xA9B30000A9B4, + 0xA9B60000A9BA, + 0xA9BC0000A9BE, + 0xA9E50000A9E6, + 0xAA290000AA2F, + 0xAA310000AA33, + 0xAA350000AA37, + 0xAA430000AA44, + 0xAA4C0000AA4D, + 0xAA7C0000AA7D, + 0xAAB00000AAB1, + 0xAAB20000AAB5, + 0xAAB70000AAB9, + 0xAABE0000AAC0, + 0xAAC10000AAC2, + 0xAAEC0000AAEE, + 0xAAF60000AAF7, + 0xABE50000ABE6, + 0xABE80000ABE9, + 0xABED0000ABEE, + 0xFB1E0000FB1F, + 0xFE000000FE10, + 0xFE200000FE30, + 0xFEFF0000FF00, + 0xFFF90000FFFC, + 0x101FD000101FE, + 0x102E0000102E1, + 0x103760001037B, + 0x10A0100010A04, + 0x10A0500010A07, + 0x10A0C00010A10, + 0x10A3800010A3B, + 0x10A3F00010A40, + 0x10AE500010AE7, + 0x10D2400010D28, + 0x10D6900010D6E, + 0x10EAB00010EAD, + 0x10EFA00010F00, + 0x10F4600010F51, + 0x10F8200010F86, + 0x1100100011002, + 0x1103800011047, + 0x1107000011071, + 0x1107300011075, + 0x1107F00011082, + 0x110B3000110B7, + 0x110B9000110BB, + 0x110C2000110C3, + 0x1110000011103, + 0x111270001112C, + 0x1112D00011135, + 0x1117300011174, + 0x1118000011182, + 0x111B6000111BF, + 0x111C9000111CD, + 0x111CF000111D0, + 0x1122F00011232, + 0x1123400011235, + 0x1123600011238, + 0x1123E0001123F, + 0x1124100011242, + 0x112DF000112E0, + 0x112E3000112EB, + 0x1130000011302, + 0x1133B0001133D, + 0x1134000011341, + 0x113660001136D, + 0x1137000011375, + 0x113BB000113C1, + 0x113CE000113CF, + 0x113D0000113D1, + 0x113D2000113D3, + 0x113E1000113E3, + 0x1143800011440, + 0x1144200011445, + 0x1144600011447, + 0x1145E0001145F, + 0x114B3000114B9, + 0x114BA000114BB, + 0x114BF000114C1, + 0x114C2000114C4, + 0x115B2000115B6, + 0x115BC000115BE, + 0x115BF000115C1, + 0x115DC000115DE, + 0x116330001163B, + 0x1163D0001163E, + 0x1163F00011641, + 0x116AB000116AC, + 0x116AD000116AE, + 0x116B0000116B6, + 0x116B7000116B8, + 0x1171D0001171E, + 0x1171F00011720, + 0x1172200011726, + 0x117270001172C, + 0x1182F00011838, + 0x118390001183B, + 0x1193B0001193D, + 0x1193E0001193F, + 0x1194300011944, + 0x119D4000119D8, + 0x119DA000119DC, + 0x119E0000119E1, + 0x11A0100011A0B, + 0x11A3300011A39, + 0x11A3B00011A3F, + 0x11A4700011A48, + 0x11A5100011A57, + 0x11A5900011A5C, + 0x11A8A00011A97, + 0x11A9800011A9A, + 0x11B6000011B61, + 0x11B6200011B65, + 0x11B6600011B67, + 0x11C3000011C37, + 0x11C3800011C3E, + 0x11C3F00011C40, + 0x11C9200011CA8, + 0x11CAA00011CB1, + 0x11CB200011CB4, + 0x11CB500011CB7, + 0x11D3100011D37, + 0x11D3A00011D3B, + 0x11D3C00011D3E, + 0x11D3F00011D46, + 0x11D4700011D48, + 0x11D9000011D92, + 0x11D9500011D96, + 0x11D9700011D98, + 0x11EF300011EF5, + 0x11F0000011F02, + 0x11F3600011F3B, + 0x11F4000011F41, + 0x11F4200011F43, + 0x11F5A00011F5B, + 0x1343000013441, + 0x1344700013456, + 0x1611E0001612A, + 0x1612D00016130, + 0x16AF000016AF5, + 0x16B3000016B37, + 0x16F4F00016F50, + 0x16F8F00016F93, + 0x16FE400016FE5, + 0x1BC9D0001BC9F, + 0x1BCA00001BCA4, + 0x1CF000001CF2E, + 0x1CF300001CF47, + 0x1D1670001D16A, + 0x1D1730001D183, + 0x1D1850001D18C, + 0x1D1AA0001D1AE, + 0x1D2420001D245, + 0x1DA000001DA37, + 0x1DA3B0001DA6D, + 0x1DA750001DA76, + 0x1DA840001DA85, + 0x1DA9B0001DAA0, + 0x1DAA10001DAB0, + 0x1E0000001E007, + 0x1E0080001E019, + 0x1E01B0001E022, + 0x1E0230001E025, + 0x1E0260001E02B, + 0x1E08F0001E090, + 0x1E1300001E137, + 0x1E2AE0001E2AF, + 0x1E2EC0001E2F0, + 0x1E4EC0001E4F0, + 0x1E5EE0001E5F0, + 0x1E6E30001E6E4, + 0x1E6E60001E6E7, + 0x1E6EE0001E6F0, + 0x1E6F50001E6F6, + 0x1E8D00001E8D7, + 0x1E9440001E94C, + 0xE0001000E0002, + 0xE0020000E0080, + 0xE0100000E01F0, + ), +} + + +codepoint_classes = { + "PVALID": ( + 0x2D0000002E, + 0x300000003A, + 0x610000007B, + 0xDF000000F7, + 0xF800000100, + 0x10100000102, + 0x10300000104, + 0x10500000106, + 0x10700000108, + 0x1090000010A, + 0x10B0000010C, + 0x10D0000010E, + 0x10F00000110, + 0x11100000112, + 0x11300000114, + 0x11500000116, + 0x11700000118, + 0x1190000011A, + 0x11B0000011C, + 0x11D0000011E, + 0x11F00000120, + 0x12100000122, + 0x12300000124, + 0x12500000126, + 0x12700000128, + 0x1290000012A, + 0x12B0000012C, + 0x12D0000012E, + 0x12F00000130, + 0x13100000132, + 0x13500000136, + 0x13700000139, + 0x13A0000013B, + 0x13C0000013D, + 0x13E0000013F, + 0x14200000143, + 0x14400000145, + 0x14600000147, + 0x14800000149, + 0x14B0000014C, + 0x14D0000014E, + 0x14F00000150, + 0x15100000152, + 0x15300000154, + 0x15500000156, + 0x15700000158, + 0x1590000015A, + 0x15B0000015C, + 0x15D0000015E, + 0x15F00000160, + 0x16100000162, + 0x16300000164, + 0x16500000166, + 0x16700000168, + 0x1690000016A, + 0x16B0000016C, + 0x16D0000016E, + 0x16F00000170, + 0x17100000172, + 0x17300000174, + 0x17500000176, + 0x17700000178, + 0x17A0000017B, + 0x17C0000017D, + 0x17E0000017F, + 0x18000000181, + 0x18300000184, + 0x18500000186, + 0x18800000189, + 0x18C0000018E, + 0x19200000193, + 0x19500000196, + 0x1990000019C, + 0x19E0000019F, + 0x1A1000001A2, + 0x1A3000001A4, + 0x1A5000001A6, + 0x1A8000001A9, + 0x1AA000001AC, + 0x1AD000001AE, + 0x1B0000001B1, + 0x1B4000001B5, + 0x1B6000001B7, + 0x1B9000001BC, + 0x1BD000001C4, + 0x1CE000001CF, + 0x1D0000001D1, + 0x1D2000001D3, + 0x1D4000001D5, + 0x1D6000001D7, + 0x1D8000001D9, + 0x1DA000001DB, + 0x1DC000001DE, + 0x1DF000001E0, + 0x1E1000001E2, + 0x1E3000001E4, + 0x1E5000001E6, + 0x1E7000001E8, + 0x1E9000001EA, + 0x1EB000001EC, + 0x1ED000001EE, + 0x1EF000001F1, + 0x1F5000001F6, + 0x1F9000001FA, + 0x1FB000001FC, + 0x1FD000001FE, + 0x1FF00000200, + 0x20100000202, + 0x20300000204, + 0x20500000206, + 0x20700000208, + 0x2090000020A, + 0x20B0000020C, + 0x20D0000020E, + 0x20F00000210, + 0x21100000212, + 0x21300000214, + 0x21500000216, + 0x21700000218, + 0x2190000021A, + 0x21B0000021C, + 0x21D0000021E, + 0x21F00000220, + 0x22100000222, + 0x22300000224, + 0x22500000226, + 0x22700000228, + 0x2290000022A, + 0x22B0000022C, + 0x22D0000022E, + 0x22F00000230, + 0x23100000232, + 0x2330000023A, + 0x23C0000023D, + 0x23F00000241, + 0x24200000243, + 0x24700000248, + 0x2490000024A, + 0x24B0000024C, + 0x24D0000024E, + 0x24F000002B0, + 0x2B9000002C2, + 0x2C6000002D2, + 0x2EC000002ED, + 0x2EE000002EF, + 0x30000000340, + 0x34200000343, + 0x3460000034F, + 0x35000000370, + 0x37100000372, + 0x37300000374, + 0x37700000378, + 0x37B0000037E, + 0x39000000391, + 0x3AC000003CF, + 0x3D7000003D8, + 0x3D9000003DA, + 0x3DB000003DC, + 0x3DD000003DE, + 0x3DF000003E0, + 0x3E1000003E2, + 0x3E3000003E4, + 0x3E5000003E6, + 0x3E7000003E8, + 0x3E9000003EA, + 0x3EB000003EC, + 0x3ED000003EE, + 0x3EF000003F0, + 0x3F3000003F4, + 0x3F8000003F9, + 0x3FB000003FD, + 0x43000000460, + 0x46100000462, + 0x46300000464, + 0x46500000466, + 0x46700000468, + 0x4690000046A, + 0x46B0000046C, + 0x46D0000046E, + 0x46F00000470, + 0x47100000472, + 0x47300000474, + 0x47500000476, + 0x47700000478, + 0x4790000047A, + 0x47B0000047C, + 0x47D0000047E, + 0x47F00000480, + 0x48100000482, + 0x48300000488, + 0x48B0000048C, + 0x48D0000048E, + 0x48F00000490, + 0x49100000492, + 0x49300000494, + 0x49500000496, + 0x49700000498, + 0x4990000049A, + 0x49B0000049C, + 0x49D0000049E, + 0x49F000004A0, + 0x4A1000004A2, + 0x4A3000004A4, + 0x4A5000004A6, + 0x4A7000004A8, + 0x4A9000004AA, + 0x4AB000004AC, + 0x4AD000004AE, + 0x4AF000004B0, + 0x4B1000004B2, + 0x4B3000004B4, + 0x4B5000004B6, + 0x4B7000004B8, + 0x4B9000004BA, + 0x4BB000004BC, + 0x4BD000004BE, + 0x4BF000004C0, + 0x4C2000004C3, + 0x4C4000004C5, + 0x4C6000004C7, + 0x4C8000004C9, + 0x4CA000004CB, + 0x4CC000004CD, + 0x4CE000004D0, + 0x4D1000004D2, + 0x4D3000004D4, + 0x4D5000004D6, + 0x4D7000004D8, + 0x4D9000004DA, + 0x4DB000004DC, + 0x4DD000004DE, + 0x4DF000004E0, + 0x4E1000004E2, + 0x4E3000004E4, + 0x4E5000004E6, + 0x4E7000004E8, + 0x4E9000004EA, + 0x4EB000004EC, + 0x4ED000004EE, + 0x4EF000004F0, + 0x4F1000004F2, + 0x4F3000004F4, + 0x4F5000004F6, + 0x4F7000004F8, + 0x4F9000004FA, + 0x4FB000004FC, + 0x4FD000004FE, + 0x4FF00000500, + 0x50100000502, + 0x50300000504, + 0x50500000506, + 0x50700000508, + 0x5090000050A, + 0x50B0000050C, + 0x50D0000050E, + 0x50F00000510, + 0x51100000512, + 0x51300000514, + 0x51500000516, + 0x51700000518, + 0x5190000051A, + 0x51B0000051C, + 0x51D0000051E, + 0x51F00000520, + 0x52100000522, + 0x52300000524, + 0x52500000526, + 0x52700000528, + 0x5290000052A, + 0x52B0000052C, + 0x52D0000052E, + 0x52F00000530, + 0x5590000055A, + 0x56000000587, + 0x58800000589, + 0x591000005BE, + 0x5BF000005C0, + 0x5C1000005C3, + 0x5C4000005C6, + 0x5C7000005C8, + 0x5D0000005EB, + 0x5EF000005F3, + 0x6100000061B, + 0x62000000640, + 0x64100000660, + 0x66E00000675, + 0x679000006D4, + 0x6D5000006DD, + 0x6DF000006E9, + 0x6EA000006F0, + 0x6FA00000700, + 0x7100000074B, + 0x74D000007B2, + 0x7C0000007F6, + 0x7FD000007FE, + 0x8000000082E, + 0x8400000085C, + 0x8600000086B, + 0x87000000888, + 0x88900000890, + 0x897000008E2, + 0x8E300000958, + 0x96000000964, + 0x96600000970, + 0x97100000984, + 0x9850000098D, + 0x98F00000991, + 0x993000009A9, + 0x9AA000009B1, + 0x9B2000009B3, + 0x9B6000009BA, + 0x9BC000009C5, + 0x9C7000009C9, + 0x9CB000009CF, + 0x9D7000009D8, + 0x9E0000009E4, + 0x9E6000009F2, + 0x9FC000009FD, + 0x9FE000009FF, + 0xA0100000A04, + 0xA0500000A0B, + 0xA0F00000A11, + 0xA1300000A29, + 0xA2A00000A31, + 0xA3200000A33, + 0xA3500000A36, + 0xA3800000A3A, + 0xA3C00000A3D, + 0xA3E00000A43, + 0xA4700000A49, + 0xA4B00000A4E, + 0xA5100000A52, + 0xA5C00000A5D, + 0xA6600000A76, + 0xA8100000A84, + 0xA8500000A8E, + 0xA8F00000A92, + 0xA9300000AA9, + 0xAAA00000AB1, + 0xAB200000AB4, + 0xAB500000ABA, + 0xABC00000AC6, + 0xAC700000ACA, + 0xACB00000ACE, + 0xAD000000AD1, + 0xAE000000AE4, + 0xAE600000AF0, + 0xAF900000B00, + 0xB0100000B04, + 0xB0500000B0D, + 0xB0F00000B11, + 0xB1300000B29, + 0xB2A00000B31, + 0xB3200000B34, + 0xB3500000B3A, + 0xB3C00000B45, + 0xB4700000B49, + 0xB4B00000B4E, + 0xB5500000B58, + 0xB5F00000B64, + 0xB6600000B70, + 0xB7100000B72, + 0xB8200000B84, + 0xB8500000B8B, + 0xB8E00000B91, + 0xB9200000B96, + 0xB9900000B9B, + 0xB9C00000B9D, + 0xB9E00000BA0, + 0xBA300000BA5, + 0xBA800000BAB, + 0xBAE00000BBA, + 0xBBE00000BC3, + 0xBC600000BC9, + 0xBCA00000BCE, + 0xBD000000BD1, + 0xBD700000BD8, + 0xBE600000BF0, + 0xC0000000C0D, + 0xC0E00000C11, + 0xC1200000C29, + 0xC2A00000C3A, + 0xC3C00000C45, + 0xC4600000C49, + 0xC4A00000C4E, + 0xC5500000C57, + 0xC5800000C5B, + 0xC5C00000C5E, + 0xC6000000C64, + 0xC6600000C70, + 0xC8000000C84, + 0xC8500000C8D, + 0xC8E00000C91, + 0xC9200000CA9, + 0xCAA00000CB4, + 0xCB500000CBA, + 0xCBC00000CC5, + 0xCC600000CC9, + 0xCCA00000CCE, + 0xCD500000CD7, + 0xCDC00000CDF, + 0xCE000000CE4, + 0xCE600000CF0, + 0xCF100000CF4, + 0xD0000000D0D, + 0xD0E00000D11, + 0xD1200000D45, + 0xD4600000D49, + 0xD4A00000D4F, + 0xD5400000D58, + 0xD5F00000D64, + 0xD6600000D70, + 0xD7A00000D80, + 0xD8100000D84, + 0xD8500000D97, + 0xD9A00000DB2, + 0xDB300000DBC, + 0xDBD00000DBE, + 0xDC000000DC7, + 0xDCA00000DCB, + 0xDCF00000DD5, + 0xDD600000DD7, + 0xDD800000DE0, + 0xDE600000DF0, + 0xDF200000DF4, + 0xE0100000E33, + 0xE3400000E3B, + 0xE4000000E4F, + 0xE5000000E5A, + 0xE8100000E83, + 0xE8400000E85, + 0xE8600000E8B, + 0xE8C00000EA4, + 0xEA500000EA6, + 0xEA700000EB3, + 0xEB400000EBE, + 0xEC000000EC5, + 0xEC600000EC7, + 0xEC800000ECF, + 0xED000000EDA, + 0xEDE00000EE0, + 0xF0000000F01, + 0xF0B00000F0C, + 0xF1800000F1A, + 0xF2000000F2A, + 0xF3500000F36, + 0xF3700000F38, + 0xF3900000F3A, + 0xF3E00000F43, + 0xF4400000F48, + 0xF4900000F4D, + 0xF4E00000F52, + 0xF5300000F57, + 0xF5800000F5C, + 0xF5D00000F69, + 0xF6A00000F6D, + 0xF7100000F73, + 0xF7400000F75, + 0xF7A00000F81, + 0xF8200000F85, + 0xF8600000F93, + 0xF9400000F98, + 0xF9900000F9D, + 0xF9E00000FA2, + 0xFA300000FA7, + 0xFA800000FAC, + 0xFAD00000FB9, + 0xFBA00000FBD, + 0xFC600000FC7, + 0x10000000104A, + 0x10500000109E, + 0x10D0000010FB, + 0x10FD00001100, + 0x120000001249, + 0x124A0000124E, + 0x125000001257, + 0x125800001259, + 0x125A0000125E, + 0x126000001289, + 0x128A0000128E, + 0x1290000012B1, + 0x12B2000012B6, + 0x12B8000012BF, + 0x12C0000012C1, + 0x12C2000012C6, + 0x12C8000012D7, + 0x12D800001311, + 0x131200001316, + 0x13180000135B, + 0x135D00001360, + 0x138000001390, + 0x13A0000013F6, + 0x14010000166D, + 0x166F00001680, + 0x16810000169B, + 0x16A0000016EB, + 0x16F1000016F9, + 0x170000001716, + 0x171F00001735, + 0x174000001754, + 0x17600000176D, + 0x176E00001771, + 0x177200001774, + 0x1780000017B4, + 0x17B6000017D4, + 0x17D7000017D8, + 0x17DC000017DE, + 0x17E0000017EA, + 0x18100000181A, + 0x182000001879, + 0x1880000018AB, + 0x18B0000018F6, + 0x19000000191F, + 0x19200000192C, + 0x19300000193C, + 0x19460000196E, + 0x197000001975, + 0x1980000019AC, + 0x19B0000019CA, + 0x19D0000019DA, + 0x1A0000001A1C, + 0x1A2000001A5F, + 0x1A6000001A7D, + 0x1A7F00001A8A, + 0x1A9000001A9A, + 0x1AA700001AA8, + 0x1AB000001ABE, + 0x1ABF00001ADE, + 0x1AE000001AEC, + 0x1B0000001B4D, + 0x1B5000001B5A, + 0x1B6B00001B74, + 0x1B8000001BF4, + 0x1C0000001C38, + 0x1C4000001C4A, + 0x1C4D00001C7E, + 0x1C8A00001C8B, + 0x1CD000001CD3, + 0x1CD400001CFB, + 0x1D0000001D2C, + 0x1D2F00001D30, + 0x1D3B00001D3C, + 0x1D4E00001D4F, + 0x1D6B00001D78, + 0x1D7900001D9B, + 0x1DC000001E00, + 0x1E0100001E02, + 0x1E0300001E04, + 0x1E0500001E06, + 0x1E0700001E08, + 0x1E0900001E0A, + 0x1E0B00001E0C, + 0x1E0D00001E0E, + 0x1E0F00001E10, + 0x1E1100001E12, + 0x1E1300001E14, + 0x1E1500001E16, + 0x1E1700001E18, + 0x1E1900001E1A, + 0x1E1B00001E1C, + 0x1E1D00001E1E, + 0x1E1F00001E20, + 0x1E2100001E22, + 0x1E2300001E24, + 0x1E2500001E26, + 0x1E2700001E28, + 0x1E2900001E2A, + 0x1E2B00001E2C, + 0x1E2D00001E2E, + 0x1E2F00001E30, + 0x1E3100001E32, + 0x1E3300001E34, + 0x1E3500001E36, + 0x1E3700001E38, + 0x1E3900001E3A, + 0x1E3B00001E3C, + 0x1E3D00001E3E, + 0x1E3F00001E40, + 0x1E4100001E42, + 0x1E4300001E44, + 0x1E4500001E46, + 0x1E4700001E48, + 0x1E4900001E4A, + 0x1E4B00001E4C, + 0x1E4D00001E4E, + 0x1E4F00001E50, + 0x1E5100001E52, + 0x1E5300001E54, + 0x1E5500001E56, + 0x1E5700001E58, + 0x1E5900001E5A, + 0x1E5B00001E5C, + 0x1E5D00001E5E, + 0x1E5F00001E60, + 0x1E6100001E62, + 0x1E6300001E64, + 0x1E6500001E66, + 0x1E6700001E68, + 0x1E6900001E6A, + 0x1E6B00001E6C, + 0x1E6D00001E6E, + 0x1E6F00001E70, + 0x1E7100001E72, + 0x1E7300001E74, + 0x1E7500001E76, + 0x1E7700001E78, + 0x1E7900001E7A, + 0x1E7B00001E7C, + 0x1E7D00001E7E, + 0x1E7F00001E80, + 0x1E8100001E82, + 0x1E8300001E84, + 0x1E8500001E86, + 0x1E8700001E88, + 0x1E8900001E8A, + 0x1E8B00001E8C, + 0x1E8D00001E8E, + 0x1E8F00001E90, + 0x1E9100001E92, + 0x1E9300001E94, + 0x1E9500001E9A, + 0x1E9C00001E9E, + 0x1E9F00001EA0, + 0x1EA100001EA2, + 0x1EA300001EA4, + 0x1EA500001EA6, + 0x1EA700001EA8, + 0x1EA900001EAA, + 0x1EAB00001EAC, + 0x1EAD00001EAE, + 0x1EAF00001EB0, + 0x1EB100001EB2, + 0x1EB300001EB4, + 0x1EB500001EB6, + 0x1EB700001EB8, + 0x1EB900001EBA, + 0x1EBB00001EBC, + 0x1EBD00001EBE, + 0x1EBF00001EC0, + 0x1EC100001EC2, + 0x1EC300001EC4, + 0x1EC500001EC6, + 0x1EC700001EC8, + 0x1EC900001ECA, + 0x1ECB00001ECC, + 0x1ECD00001ECE, + 0x1ECF00001ED0, + 0x1ED100001ED2, + 0x1ED300001ED4, + 0x1ED500001ED6, + 0x1ED700001ED8, + 0x1ED900001EDA, + 0x1EDB00001EDC, + 0x1EDD00001EDE, + 0x1EDF00001EE0, + 0x1EE100001EE2, + 0x1EE300001EE4, + 0x1EE500001EE6, + 0x1EE700001EE8, + 0x1EE900001EEA, + 0x1EEB00001EEC, + 0x1EED00001EEE, + 0x1EEF00001EF0, + 0x1EF100001EF2, + 0x1EF300001EF4, + 0x1EF500001EF6, + 0x1EF700001EF8, + 0x1EF900001EFA, + 0x1EFB00001EFC, + 0x1EFD00001EFE, + 0x1EFF00001F08, + 0x1F1000001F16, + 0x1F2000001F28, + 0x1F3000001F38, + 0x1F4000001F46, + 0x1F5000001F58, + 0x1F6000001F68, + 0x1F7000001F71, + 0x1F7200001F73, + 0x1F7400001F75, + 0x1F7600001F77, + 0x1F7800001F79, + 0x1F7A00001F7B, + 0x1F7C00001F7D, + 0x1FB000001FB2, + 0x1FB600001FB7, + 0x1FC600001FC7, + 0x1FD000001FD3, + 0x1FD600001FD8, + 0x1FE000001FE3, + 0x1FE400001FE8, + 0x1FF600001FF7, + 0x214E0000214F, + 0x218400002185, + 0x2C3000002C60, + 0x2C6100002C62, + 0x2C6500002C67, + 0x2C6800002C69, + 0x2C6A00002C6B, + 0x2C6C00002C6D, + 0x2C7100002C72, + 0x2C7300002C75, + 0x2C7600002C7C, + 0x2C8100002C82, + 0x2C8300002C84, + 0x2C8500002C86, + 0x2C8700002C88, + 0x2C8900002C8A, + 0x2C8B00002C8C, + 0x2C8D00002C8E, + 0x2C8F00002C90, + 0x2C9100002C92, + 0x2C9300002C94, + 0x2C9500002C96, + 0x2C9700002C98, + 0x2C9900002C9A, + 0x2C9B00002C9C, + 0x2C9D00002C9E, + 0x2C9F00002CA0, + 0x2CA100002CA2, + 0x2CA300002CA4, + 0x2CA500002CA6, + 0x2CA700002CA8, + 0x2CA900002CAA, + 0x2CAB00002CAC, + 0x2CAD00002CAE, + 0x2CAF00002CB0, + 0x2CB100002CB2, + 0x2CB300002CB4, + 0x2CB500002CB6, + 0x2CB700002CB8, + 0x2CB900002CBA, + 0x2CBB00002CBC, + 0x2CBD00002CBE, + 0x2CBF00002CC0, + 0x2CC100002CC2, + 0x2CC300002CC4, + 0x2CC500002CC6, + 0x2CC700002CC8, + 0x2CC900002CCA, + 0x2CCB00002CCC, + 0x2CCD00002CCE, + 0x2CCF00002CD0, + 0x2CD100002CD2, + 0x2CD300002CD4, + 0x2CD500002CD6, + 0x2CD700002CD8, + 0x2CD900002CDA, + 0x2CDB00002CDC, + 0x2CDD00002CDE, + 0x2CDF00002CE0, + 0x2CE100002CE2, + 0x2CE300002CE5, + 0x2CEC00002CED, + 0x2CEE00002CF2, + 0x2CF300002CF4, + 0x2D0000002D26, + 0x2D2700002D28, + 0x2D2D00002D2E, + 0x2D3000002D68, + 0x2D7F00002D97, + 0x2DA000002DA7, + 0x2DA800002DAF, + 0x2DB000002DB7, + 0x2DB800002DBF, + 0x2DC000002DC7, + 0x2DC800002DCF, + 0x2DD000002DD7, + 0x2DD800002DDF, + 0x2DE000002E00, + 0x2E2F00002E30, + 0x300500003008, + 0x302A0000302E, + 0x303C0000303D, + 0x304100003097, + 0x30990000309B, + 0x309D0000309F, + 0x30A1000030FB, + 0x30FC000030FF, + 0x310500003130, + 0x31A0000031C0, + 0x31F000003200, + 0x340000004DC0, + 0x4E000000A48D, + 0xA4D00000A4FE, + 0xA5000000A60D, + 0xA6100000A62C, + 0xA6410000A642, + 0xA6430000A644, + 0xA6450000A646, + 0xA6470000A648, + 0xA6490000A64A, + 0xA64B0000A64C, + 0xA64D0000A64E, + 0xA64F0000A650, + 0xA6510000A652, + 0xA6530000A654, + 0xA6550000A656, + 0xA6570000A658, + 0xA6590000A65A, + 0xA65B0000A65C, + 0xA65D0000A65E, + 0xA65F0000A660, + 0xA6610000A662, + 0xA6630000A664, + 0xA6650000A666, + 0xA6670000A668, + 0xA6690000A66A, + 0xA66B0000A66C, + 0xA66D0000A670, + 0xA6740000A67E, + 0xA67F0000A680, + 0xA6810000A682, + 0xA6830000A684, + 0xA6850000A686, + 0xA6870000A688, + 0xA6890000A68A, + 0xA68B0000A68C, + 0xA68D0000A68E, + 0xA68F0000A690, + 0xA6910000A692, + 0xA6930000A694, + 0xA6950000A696, + 0xA6970000A698, + 0xA6990000A69A, + 0xA69B0000A69C, + 0xA69E0000A6E6, + 0xA6F00000A6F2, + 0xA7170000A720, + 0xA7230000A724, + 0xA7250000A726, + 0xA7270000A728, + 0xA7290000A72A, + 0xA72B0000A72C, + 0xA72D0000A72E, + 0xA72F0000A732, + 0xA7330000A734, + 0xA7350000A736, + 0xA7370000A738, + 0xA7390000A73A, + 0xA73B0000A73C, + 0xA73D0000A73E, + 0xA73F0000A740, + 0xA7410000A742, + 0xA7430000A744, + 0xA7450000A746, + 0xA7470000A748, + 0xA7490000A74A, + 0xA74B0000A74C, + 0xA74D0000A74E, + 0xA74F0000A750, + 0xA7510000A752, + 0xA7530000A754, + 0xA7550000A756, + 0xA7570000A758, + 0xA7590000A75A, + 0xA75B0000A75C, + 0xA75D0000A75E, + 0xA75F0000A760, + 0xA7610000A762, + 0xA7630000A764, + 0xA7650000A766, + 0xA7670000A768, + 0xA7690000A76A, + 0xA76B0000A76C, + 0xA76D0000A76E, + 0xA76F0000A770, + 0xA7710000A779, + 0xA77A0000A77B, + 0xA77C0000A77D, + 0xA77F0000A780, + 0xA7810000A782, + 0xA7830000A784, + 0xA7850000A786, + 0xA7870000A789, + 0xA78C0000A78D, + 0xA78E0000A790, + 0xA7910000A792, + 0xA7930000A796, + 0xA7970000A798, + 0xA7990000A79A, + 0xA79B0000A79C, + 0xA79D0000A79E, + 0xA79F0000A7A0, + 0xA7A10000A7A2, + 0xA7A30000A7A4, + 0xA7A50000A7A6, + 0xA7A70000A7A8, + 0xA7A90000A7AA, + 0xA7AF0000A7B0, + 0xA7B50000A7B6, + 0xA7B70000A7B8, + 0xA7B90000A7BA, + 0xA7BB0000A7BC, + 0xA7BD0000A7BE, + 0xA7BF0000A7C0, + 0xA7C10000A7C2, + 0xA7C30000A7C4, + 0xA7C80000A7C9, + 0xA7CA0000A7CB, + 0xA7CD0000A7CE, + 0xA7CF0000A7D0, + 0xA7D10000A7D2, + 0xA7D30000A7D4, + 0xA7D50000A7D6, + 0xA7D70000A7D8, + 0xA7D90000A7DA, + 0xA7DB0000A7DC, + 0xA7F60000A7F8, + 0xA7FA0000A828, + 0xA82C0000A82D, + 0xA8400000A874, + 0xA8800000A8C6, + 0xA8D00000A8DA, + 0xA8E00000A8F8, + 0xA8FB0000A8FC, + 0xA8FD0000A92E, + 0xA9300000A954, + 0xA9800000A9C1, + 0xA9CF0000A9DA, + 0xA9E00000A9FF, + 0xAA000000AA37, + 0xAA400000AA4E, + 0xAA500000AA5A, + 0xAA600000AA77, + 0xAA7A0000AAC3, + 0xAADB0000AADE, + 0xAAE00000AAF0, + 0xAAF20000AAF7, + 0xAB010000AB07, + 0xAB090000AB0F, + 0xAB110000AB17, + 0xAB200000AB27, + 0xAB280000AB2F, + 0xAB300000AB5B, + 0xAB600000AB69, + 0xABC00000ABEB, + 0xABEC0000ABEE, + 0xABF00000ABFA, + 0xAC000000D7A4, + 0xFA0E0000FA10, + 0xFA110000FA12, + 0xFA130000FA15, + 0xFA1F0000FA20, + 0xFA210000FA22, + 0xFA230000FA25, + 0xFA270000FA2A, + 0xFB1E0000FB1F, + 0xFE200000FE30, + 0xFE730000FE74, + 0x100000001000C, + 0x1000D00010027, + 0x100280001003B, + 0x1003C0001003E, + 0x1003F0001004E, + 0x100500001005E, + 0x10080000100FB, + 0x101FD000101FE, + 0x102800001029D, + 0x102A0000102D1, + 0x102E0000102E1, + 0x1030000010320, + 0x1032D00010341, + 0x103420001034A, + 0x103500001037B, + 0x103800001039E, + 0x103A0000103C4, + 0x103C8000103D0, + 0x104280001049E, + 0x104A0000104AA, + 0x104D8000104FC, + 0x1050000010528, + 0x1053000010564, + 0x10597000105A2, + 0x105A3000105B2, + 0x105B3000105BA, + 0x105BB000105BD, + 0x105C0000105F4, + 0x1060000010737, + 0x1074000010756, + 0x1076000010768, + 0x1078000010781, + 0x1080000010806, + 0x1080800010809, + 0x1080A00010836, + 0x1083700010839, + 0x1083C0001083D, + 0x1083F00010856, + 0x1086000010877, + 0x108800001089F, + 0x108E0000108F3, + 0x108F4000108F6, + 0x1090000010916, + 0x109200001093A, + 0x109400001095A, + 0x10980000109B8, + 0x109BE000109C0, + 0x10A0000010A04, + 0x10A0500010A07, + 0x10A0C00010A14, + 0x10A1500010A18, + 0x10A1900010A36, + 0x10A3800010A3B, + 0x10A3F00010A40, + 0x10A6000010A7D, + 0x10A8000010A9D, + 0x10AC000010AC8, + 0x10AC900010AE7, + 0x10B0000010B36, + 0x10B4000010B56, + 0x10B6000010B73, + 0x10B8000010B92, + 0x10C0000010C49, + 0x10CC000010CF3, + 0x10D0000010D28, + 0x10D3000010D3A, + 0x10D4000010D50, + 0x10D6900010D6E, + 0x10D6F00010D86, + 0x10E8000010EAA, + 0x10EAB00010EAD, + 0x10EB000010EB2, + 0x10EC200010EC8, + 0x10EFA00010F1D, + 0x10F2700010F28, + 0x10F3000010F51, + 0x10F7000010F86, + 0x10FB000010FC5, + 0x10FE000010FF7, + 0x1100000011047, + 0x1106600011076, + 0x1107F000110BB, + 0x110C2000110C3, + 0x110D0000110E9, + 0x110F0000110FA, + 0x1110000011135, + 0x1113600011140, + 0x1114400011148, + 0x1115000011174, + 0x1117600011177, + 0x11180000111C5, + 0x111C9000111CD, + 0x111CE000111DB, + 0x111DC000111DD, + 0x1120000011212, + 0x1121300011238, + 0x1123E00011242, + 0x1128000011287, + 0x1128800011289, + 0x1128A0001128E, + 0x1128F0001129E, + 0x1129F000112A9, + 0x112B0000112EB, + 0x112F0000112FA, + 0x1130000011304, + 0x113050001130D, + 0x1130F00011311, + 0x1131300011329, + 0x1132A00011331, + 0x1133200011334, + 0x113350001133A, + 0x1133B00011345, + 0x1134700011349, + 0x1134B0001134E, + 0x1135000011351, + 0x1135700011358, + 0x1135D00011364, + 0x113660001136D, + 0x1137000011375, + 0x113800001138A, + 0x1138B0001138C, + 0x1138E0001138F, + 0x11390000113B6, + 0x113B7000113C1, + 0x113C2000113C3, + 0x113C5000113C6, + 0x113C7000113CB, + 0x113CC000113D4, + 0x113E1000113E3, + 0x114000001144B, + 0x114500001145A, + 0x1145E00011462, + 0x11480000114C6, + 0x114C7000114C8, + 0x114D0000114DA, + 0x11580000115B6, + 0x115B8000115C1, + 0x115D8000115DE, + 0x1160000011641, + 0x1164400011645, + 0x116500001165A, + 0x11680000116B9, + 0x116C0000116CA, + 0x116D0000116E4, + 0x117000001171B, + 0x1171D0001172C, + 0x117300001173A, + 0x1174000011747, + 0x118000001183B, + 0x118C0000118EA, + 0x118FF00011907, + 0x119090001190A, + 0x1190C00011914, + 0x1191500011917, + 0x1191800011936, + 0x1193700011939, + 0x1193B00011944, + 0x119500001195A, + 0x119A0000119A8, + 0x119AA000119D8, + 0x119DA000119E2, + 0x119E3000119E5, + 0x11A0000011A3F, + 0x11A4700011A48, + 0x11A5000011A9A, + 0x11A9D00011A9E, + 0x11AB000011AF9, + 0x11B6000011B68, + 0x11BC000011BE1, + 0x11BF000011BFA, + 0x11C0000011C09, + 0x11C0A00011C37, + 0x11C3800011C41, + 0x11C5000011C5A, + 0x11C7200011C90, + 0x11C9200011CA8, + 0x11CA900011CB7, + 0x11D0000011D07, + 0x11D0800011D0A, + 0x11D0B00011D37, + 0x11D3A00011D3B, + 0x11D3C00011D3E, + 0x11D3F00011D48, + 0x11D5000011D5A, + 0x11D6000011D66, + 0x11D6700011D69, + 0x11D6A00011D8F, + 0x11D9000011D92, + 0x11D9300011D99, + 0x11DA000011DAA, + 0x11DB000011DDC, + 0x11DE000011DEA, + 0x11EE000011EF7, + 0x11F0000011F11, + 0x11F1200011F3B, + 0x11F3E00011F43, + 0x11F5000011F5B, + 0x11FB000011FB1, + 0x120000001239A, + 0x1248000012544, + 0x12F9000012FF1, + 0x1300000013430, + 0x1344000013456, + 0x13460000143FB, + 0x1440000014647, + 0x161000001613A, + 0x1680000016A39, + 0x16A4000016A5F, + 0x16A6000016A6A, + 0x16A7000016ABF, + 0x16AC000016ACA, + 0x16AD000016AEE, + 0x16AF000016AF5, + 0x16B0000016B37, + 0x16B4000016B44, + 0x16B5000016B5A, + 0x16B6300016B78, + 0x16B7D00016B90, + 0x16D4000016D6D, + 0x16D7000016D7A, + 0x16E6000016E80, + 0x16EBB00016ED4, + 0x16F0000016F4B, + 0x16F4F00016F88, + 0x16F8F00016FA0, + 0x16FE000016FE2, + 0x16FE300016FE5, + 0x16FF000016FF4, + 0x1700000018CD6, + 0x18CFF00018D1F, + 0x18D8000018DF3, + 0x1AFF00001AFF4, + 0x1AFF50001AFFC, + 0x1AFFD0001AFFF, + 0x1B0000001B123, + 0x1B1320001B133, + 0x1B1500001B153, + 0x1B1550001B156, + 0x1B1640001B168, + 0x1B1700001B2FC, + 0x1BC000001BC6B, + 0x1BC700001BC7D, + 0x1BC800001BC89, + 0x1BC900001BC9A, + 0x1BC9D0001BC9F, + 0x1CF000001CF2E, + 0x1CF300001CF47, + 0x1DA000001DA37, + 0x1DA3B0001DA6D, + 0x1DA750001DA76, + 0x1DA840001DA85, + 0x1DA9B0001DAA0, + 0x1DAA10001DAB0, + 0x1DF000001DF1F, + 0x1DF250001DF2B, + 0x1E0000001E007, + 0x1E0080001E019, + 0x1E01B0001E022, + 0x1E0230001E025, + 0x1E0260001E02B, + 0x1E08F0001E090, + 0x1E1000001E12D, + 0x1E1300001E13E, + 0x1E1400001E14A, + 0x1E14E0001E14F, + 0x1E2900001E2AF, + 0x1E2C00001E2FA, + 0x1E4D00001E4FA, + 0x1E5D00001E5FB, + 0x1E6C00001E6DF, + 0x1E6E00001E6F6, + 0x1E6FE0001E700, + 0x1E7E00001E7E7, + 0x1E7E80001E7EC, + 0x1E7ED0001E7EF, + 0x1E7F00001E7FF, + 0x1E8000001E8C5, + 0x1E8D00001E8D7, + 0x1E9220001E94C, + 0x1E9500001E95A, + 0x200000002A6E0, + 0x2A7000002B81E, + 0x2B8200002CEAE, + 0x2CEB00002EBE1, + 0x2EBF00002EE5E, + 0x300000003134B, + 0x313500003347A, + ), + "CONTEXTJ": (0x200C0000200E,), + "CONTEXTO": ( + 0xB7000000B8, + 0x37500000376, + 0x5F3000005F5, + 0x6600000066A, + 0x6F0000006FA, + 0x30FB000030FC, + ), +} diff --git a/venv/lib/python3.12/site-packages/idna/intranges.py b/venv/lib/python3.12/site-packages/idna/intranges.py new file mode 100644 index 0000000..19d7781 --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/intranges.py @@ -0,0 +1,55 @@ +""" +Given a list of integers, made up of (hopefully) a small number of long runs +of consecutive integers, compute a representation of the form +((start1, end1), (start2, end2) ...). Then answer the question "was x present +in the original list?" in time O(log(# runs)). +""" + +import bisect + + +def intranges_from_list(list_: list[int]) -> tuple[int, ...]: + """Represent a list of integers as a sequence of ranges: + ((start_0, end_0), (start_1, end_1), ...), such that the original + integers are exactly those x such that start_i <= x < end_i for some i. + + Ranges are encoded as single integers (start << 32 | end), not as tuples. + """ + + sorted_list = sorted(list_) + ranges = [] + last_write = -1 + for i in range(len(sorted_list)): + if i + 1 < len(sorted_list) and sorted_list[i] == sorted_list[i + 1] - 1: + continue + current_range = sorted_list[last_write + 1 : i + 1] + ranges.append(_encode_range(current_range[0], current_range[-1] + 1)) + last_write = i + + return tuple(ranges) + + +def _encode_range(start: int, end: int) -> int: + return (start << 32) | end + + +def _decode_range(r: int) -> tuple[int, int]: + return (r >> 32), (r & ((1 << 32) - 1)) + + +def intranges_contain(int_: int, ranges: tuple[int, ...]) -> bool: + """Determine if `int_` falls into one of the ranges in `ranges`.""" + tuple_ = _encode_range(int_, 0) + pos = bisect.bisect_left(ranges, tuple_) + # we could be immediately ahead of a tuple (start, end) + # with start < int_ <= end + if pos > 0: + left, right = _decode_range(ranges[pos - 1]) + if left <= int_ < right: + return True + # or we could be immediately behind a tuple (int_, end) + if pos < len(ranges): + left, _ = _decode_range(ranges[pos]) + if left == int_: + return True + return False diff --git a/venv/lib/python3.12/site-packages/idna/package_data.py b/venv/lib/python3.12/site-packages/idna/package_data.py new file mode 100644 index 0000000..94e4039 --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/package_data.py @@ -0,0 +1 @@ +__version__ = "3.18" diff --git a/venv/lib/python3.12/site-packages/idna/py.typed b/venv/lib/python3.12/site-packages/idna/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/idna/uts46data.py b/venv/lib/python3.12/site-packages/idna/uts46data.py new file mode 100644 index 0000000..f2d931f --- /dev/null +++ b/venv/lib/python3.12/site-packages/idna/uts46data.py @@ -0,0 +1,16896 @@ +# This file is automatically generated by tools/idna-data + +from array import array +from typing import Optional + +"""IDNA Mapping Table from UTS46.""" + + +__version__ = "17.0.0" + +uts46_starts: "array[int]" = array( + "I", + ( + 0x0, + 0x1, + 0x2, + 0x3, + 0x4, + 0x5, + 0x6, + 0x7, + 0x8, + 0x9, + 0xA, + 0xB, + 0xC, + 0xD, + 0xE, + 0xF, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x17, + 0x18, + 0x19, + 0x1A, + 0x1B, + 0x1C, + 0x1D, + 0x1E, + 0x1F, + 0x20, + 0x21, + 0x22, + 0x23, + 0x24, + 0x25, + 0x26, + 0x27, + 0x28, + 0x29, + 0x2A, + 0x2B, + 0x2C, + 0x2D, + 0x2E, + 0x2F, + 0x30, + 0x31, + 0x32, + 0x33, + 0x34, + 0x35, + 0x36, + 0x37, + 0x38, + 0x39, + 0x3A, + 0x3B, + 0x3C, + 0x3D, + 0x3E, + 0x3F, + 0x40, + 0x41, + 0x42, + 0x43, + 0x44, + 0x45, + 0x46, + 0x47, + 0x48, + 0x49, + 0x4A, + 0x4B, + 0x4C, + 0x4D, + 0x4E, + 0x4F, + 0x50, + 0x51, + 0x52, + 0x53, + 0x54, + 0x55, + 0x56, + 0x57, + 0x58, + 0x59, + 0x5A, + 0x5B, + 0x5C, + 0x5D, + 0x5E, + 0x5F, + 0x60, + 0x61, + 0x62, + 0x63, + 0x64, + 0x65, + 0x66, + 0x67, + 0x68, + 0x69, + 0x6A, + 0x6B, + 0x6C, + 0x6D, + 0x6E, + 0x6F, + 0x70, + 0x71, + 0x72, + 0x73, + 0x74, + 0x75, + 0x76, + 0x77, + 0x78, + 0x79, + 0x7A, + 0x7B, + 0x7C, + 0x7D, + 0x7E, + 0x7F, + 0x80, + 0x81, + 0x82, + 0x83, + 0x84, + 0x85, + 0x86, + 0x87, + 0x88, + 0x89, + 0x8A, + 0x8B, + 0x8C, + 0x8D, + 0x8E, + 0x8F, + 0x90, + 0x91, + 0x92, + 0x93, + 0x94, + 0x95, + 0x96, + 0x97, + 0x98, + 0x99, + 0x9A, + 0x9B, + 0x9C, + 0x9D, + 0x9E, + 0x9F, + 0xA0, + 0xA1, + 0xA2, + 0xA3, + 0xA4, + 0xA5, + 0xA6, + 0xA7, + 0xA8, + 0xA9, + 0xAA, + 0xAB, + 0xAC, + 0xAD, + 0xAE, + 0xAF, + 0xB0, + 0xB1, + 0xB2, + 0xB3, + 0xB4, + 0xB5, + 0xB6, + 0xB7, + 0xB8, + 0xB9, + 0xBA, + 0xBB, + 0xBC, + 0xBD, + 0xBE, + 0xBF, + 0xC0, + 0xC1, + 0xC2, + 0xC3, + 0xC4, + 0xC5, + 0xC6, + 0xC7, + 0xC8, + 0xC9, + 0xCA, + 0xCB, + 0xCC, + 0xCD, + 0xCE, + 0xCF, + 0xD0, + 0xD1, + 0xD2, + 0xD3, + 0xD4, + 0xD5, + 0xD6, + 0xD7, + 0xD8, + 0xD9, + 0xDA, + 0xDB, + 0xDC, + 0xDD, + 0xDE, + 0xDF, + 0xE0, + 0xE1, + 0xE2, + 0xE3, + 0xE4, + 0xE5, + 0xE6, + 0xE7, + 0xE8, + 0xE9, + 0xEA, + 0xEB, + 0xEC, + 0xED, + 0xEE, + 0xEF, + 0xF0, + 0xF1, + 0xF2, + 0xF3, + 0xF4, + 0xF5, + 0xF6, + 0xF7, + 0xF8, + 0xF9, + 0xFA, + 0xFB, + 0xFC, + 0xFD, + 0xFE, + 0xFF, + 0x100, + 0x101, + 0x102, + 0x103, + 0x104, + 0x105, + 0x106, + 0x107, + 0x108, + 0x109, + 0x10A, + 0x10B, + 0x10C, + 0x10D, + 0x10E, + 0x10F, + 0x110, + 0x111, + 0x112, + 0x113, + 0x114, + 0x115, + 0x116, + 0x117, + 0x118, + 0x119, + 0x11A, + 0x11B, + 0x11C, + 0x11D, + 0x11E, + 0x11F, + 0x120, + 0x121, + 0x122, + 0x123, + 0x124, + 0x125, + 0x126, + 0x127, + 0x128, + 0x129, + 0x12A, + 0x12B, + 0x12C, + 0x12D, + 0x12E, + 0x12F, + 0x130, + 0x131, + 0x132, + 0x134, + 0x135, + 0x136, + 0x137, + 0x139, + 0x13A, + 0x13B, + 0x13C, + 0x13D, + 0x13E, + 0x13F, + 0x141, + 0x142, + 0x143, + 0x144, + 0x145, + 0x146, + 0x147, + 0x148, + 0x149, + 0x14A, + 0x14B, + 0x14C, + 0x14D, + 0x14E, + 0x14F, + 0x150, + 0x151, + 0x152, + 0x153, + 0x154, + 0x155, + 0x156, + 0x157, + 0x158, + 0x159, + 0x15A, + 0x15B, + 0x15C, + 0x15D, + 0x15E, + 0x15F, + 0x160, + 0x161, + 0x162, + 0x163, + 0x164, + 0x165, + 0x166, + 0x167, + 0x168, + 0x169, + 0x16A, + 0x16B, + 0x16C, + 0x16D, + 0x16E, + 0x16F, + 0x170, + 0x171, + 0x172, + 0x173, + 0x174, + 0x175, + 0x176, + 0x177, + 0x178, + 0x179, + 0x17A, + 0x17B, + 0x17C, + 0x17D, + 0x17E, + 0x17F, + 0x180, + 0x181, + 0x182, + 0x183, + 0x184, + 0x185, + 0x186, + 0x187, + 0x188, + 0x189, + 0x18A, + 0x18B, + 0x18C, + 0x18E, + 0x18F, + 0x190, + 0x191, + 0x192, + 0x193, + 0x194, + 0x195, + 0x196, + 0x197, + 0x198, + 0x199, + 0x19C, + 0x19D, + 0x19E, + 0x19F, + 0x1A0, + 0x1A1, + 0x1A2, + 0x1A3, + 0x1A4, + 0x1A5, + 0x1A6, + 0x1A7, + 0x1A8, + 0x1A9, + 0x1AA, + 0x1AC, + 0x1AD, + 0x1AE, + 0x1AF, + 0x1B0, + 0x1B1, + 0x1B2, + 0x1B3, + 0x1B4, + 0x1B5, + 0x1B6, + 0x1B7, + 0x1B8, + 0x1B9, + 0x1BC, + 0x1BD, + 0x1C4, + 0x1C7, + 0x1CA, + 0x1CD, + 0x1CE, + 0x1CF, + 0x1D0, + 0x1D1, + 0x1D2, + 0x1D3, + 0x1D4, + 0x1D5, + 0x1D6, + 0x1D7, + 0x1D8, + 0x1D9, + 0x1DA, + 0x1DB, + 0x1DC, + 0x1DE, + 0x1DF, + 0x1E0, + 0x1E1, + 0x1E2, + 0x1E3, + 0x1E4, + 0x1E5, + 0x1E6, + 0x1E7, + 0x1E8, + 0x1E9, + 0x1EA, + 0x1EB, + 0x1EC, + 0x1ED, + 0x1EE, + 0x1EF, + 0x1F1, + 0x1F4, + 0x1F5, + 0x1F6, + 0x1F7, + 0x1F8, + 0x1F9, + 0x1FA, + 0x1FB, + 0x1FC, + 0x1FD, + 0x1FE, + 0x1FF, + 0x200, + 0x201, + 0x202, + 0x203, + 0x204, + 0x205, + 0x206, + 0x207, + 0x208, + 0x209, + 0x20A, + 0x20B, + 0x20C, + 0x20D, + 0x20E, + 0x20F, + 0x210, + 0x211, + 0x212, + 0x213, + 0x214, + 0x215, + 0x216, + 0x217, + 0x218, + 0x219, + 0x21A, + 0x21B, + 0x21C, + 0x21D, + 0x21E, + 0x21F, + 0x220, + 0x221, + 0x222, + 0x223, + 0x224, + 0x225, + 0x226, + 0x227, + 0x228, + 0x229, + 0x22A, + 0x22B, + 0x22C, + 0x22D, + 0x22E, + 0x22F, + 0x230, + 0x231, + 0x232, + 0x233, + 0x23A, + 0x23B, + 0x23C, + 0x23D, + 0x23E, + 0x23F, + 0x241, + 0x242, + 0x243, + 0x244, + 0x245, + 0x246, + 0x247, + 0x248, + 0x249, + 0x24A, + 0x24B, + 0x24C, + 0x24D, + 0x24E, + 0x24F, + 0x2B0, + 0x2B1, + 0x2B2, + 0x2B3, + 0x2B4, + 0x2B5, + 0x2B6, + 0x2B7, + 0x2B8, + 0x2B9, + 0x2D8, + 0x2D9, + 0x2DA, + 0x2DB, + 0x2DC, + 0x2DD, + 0x2DE, + 0x2E0, + 0x2E1, + 0x2E2, + 0x2E3, + 0x2E4, + 0x2E5, + 0x340, + 0x341, + 0x342, + 0x343, + 0x344, + 0x345, + 0x346, + 0x34F, + 0x350, + 0x370, + 0x371, + 0x372, + 0x373, + 0x374, + 0x375, + 0x376, + 0x377, + 0x378, + 0x37A, + 0x37B, + 0x37E, + 0x37F, + 0x380, + 0x384, + 0x385, + 0x386, + 0x387, + 0x388, + 0x389, + 0x38A, + 0x38B, + 0x38C, + 0x38D, + 0x38E, + 0x38F, + 0x390, + 0x391, + 0x392, + 0x393, + 0x394, + 0x395, + 0x396, + 0x397, + 0x398, + 0x399, + 0x39A, + 0x39B, + 0x39C, + 0x39D, + 0x39E, + 0x39F, + 0x3A0, + 0x3A1, + 0x3A2, + 0x3A3, + 0x3A4, + 0x3A5, + 0x3A6, + 0x3A7, + 0x3A8, + 0x3A9, + 0x3AA, + 0x3AB, + 0x3AC, + 0x3C2, + 0x3C3, + 0x3CF, + 0x3D0, + 0x3D1, + 0x3D2, + 0x3D3, + 0x3D4, + 0x3D5, + 0x3D6, + 0x3D7, + 0x3D8, + 0x3D9, + 0x3DA, + 0x3DB, + 0x3DC, + 0x3DD, + 0x3DE, + 0x3DF, + 0x3E0, + 0x3E1, + 0x3E2, + 0x3E3, + 0x3E4, + 0x3E5, + 0x3E6, + 0x3E7, + 0x3E8, + 0x3E9, + 0x3EA, + 0x3EB, + 0x3EC, + 0x3ED, + 0x3EE, + 0x3EF, + 0x3F0, + 0x3F1, + 0x3F2, + 0x3F3, + 0x3F4, + 0x3F5, + 0x3F6, + 0x3F7, + 0x3F8, + 0x3F9, + 0x3FA, + 0x3FB, + 0x3FD, + 0x3FE, + 0x3FF, + 0x400, + 0x401, + 0x402, + 0x403, + 0x404, + 0x405, + 0x406, + 0x407, + 0x408, + 0x409, + 0x40A, + 0x40B, + 0x40C, + 0x40D, + 0x40E, + 0x40F, + 0x410, + 0x411, + 0x412, + 0x413, + 0x414, + 0x415, + 0x416, + 0x417, + 0x418, + 0x419, + 0x41A, + 0x41B, + 0x41C, + 0x41D, + 0x41E, + 0x41F, + 0x420, + 0x421, + 0x422, + 0x423, + 0x424, + 0x425, + 0x426, + 0x427, + 0x428, + 0x429, + 0x42A, + 0x42B, + 0x42C, + 0x42D, + 0x42E, + 0x42F, + 0x430, + 0x460, + 0x461, + 0x462, + 0x463, + 0x464, + 0x465, + 0x466, + 0x467, + 0x468, + 0x469, + 0x46A, + 0x46B, + 0x46C, + 0x46D, + 0x46E, + 0x46F, + 0x470, + 0x471, + 0x472, + 0x473, + 0x474, + 0x475, + 0x476, + 0x477, + 0x478, + 0x479, + 0x47A, + 0x47B, + 0x47C, + 0x47D, + 0x47E, + 0x47F, + 0x480, + 0x481, + 0x48A, + 0x48B, + 0x48C, + 0x48D, + 0x48E, + 0x48F, + 0x490, + 0x491, + 0x492, + 0x493, + 0x494, + 0x495, + 0x496, + 0x497, + 0x498, + 0x499, + 0x49A, + 0x49B, + 0x49C, + 0x49D, + 0x49E, + 0x49F, + 0x4A0, + 0x4A1, + 0x4A2, + 0x4A3, + 0x4A4, + 0x4A5, + 0x4A6, + 0x4A7, + 0x4A8, + 0x4A9, + 0x4AA, + 0x4AB, + 0x4AC, + 0x4AD, + 0x4AE, + 0x4AF, + 0x4B0, + 0x4B1, + 0x4B2, + 0x4B3, + 0x4B4, + 0x4B5, + 0x4B6, + 0x4B7, + 0x4B8, + 0x4B9, + 0x4BA, + 0x4BB, + 0x4BC, + 0x4BD, + 0x4BE, + 0x4BF, + 0x4C0, + 0x4C1, + 0x4C2, + 0x4C3, + 0x4C4, + 0x4C5, + 0x4C6, + 0x4C7, + 0x4C8, + 0x4C9, + 0x4CA, + 0x4CB, + 0x4CC, + 0x4CD, + 0x4CE, + 0x4D0, + 0x4D1, + 0x4D2, + 0x4D3, + 0x4D4, + 0x4D5, + 0x4D6, + 0x4D7, + 0x4D8, + 0x4D9, + 0x4DA, + 0x4DB, + 0x4DC, + 0x4DD, + 0x4DE, + 0x4DF, + 0x4E0, + 0x4E1, + 0x4E2, + 0x4E3, + 0x4E4, + 0x4E5, + 0x4E6, + 0x4E7, + 0x4E8, + 0x4E9, + 0x4EA, + 0x4EB, + 0x4EC, + 0x4ED, + 0x4EE, + 0x4EF, + 0x4F0, + 0x4F1, + 0x4F2, + 0x4F3, + 0x4F4, + 0x4F5, + 0x4F6, + 0x4F7, + 0x4F8, + 0x4F9, + 0x4FA, + 0x4FB, + 0x4FC, + 0x4FD, + 0x4FE, + 0x4FF, + 0x500, + 0x501, + 0x502, + 0x503, + 0x504, + 0x505, + 0x506, + 0x507, + 0x508, + 0x509, + 0x50A, + 0x50B, + 0x50C, + 0x50D, + 0x50E, + 0x50F, + 0x510, + 0x511, + 0x512, + 0x513, + 0x514, + 0x515, + 0x516, + 0x517, + 0x518, + 0x519, + 0x51A, + 0x51B, + 0x51C, + 0x51D, + 0x51E, + 0x51F, + 0x520, + 0x521, + 0x522, + 0x523, + 0x524, + 0x525, + 0x526, + 0x527, + 0x528, + 0x529, + 0x52A, + 0x52B, + 0x52C, + 0x52D, + 0x52E, + 0x52F, + 0x530, + 0x531, + 0x532, + 0x533, + 0x534, + 0x535, + 0x536, + 0x537, + 0x538, + 0x539, + 0x53A, + 0x53B, + 0x53C, + 0x53D, + 0x53E, + 0x53F, + 0x540, + 0x541, + 0x542, + 0x543, + 0x544, + 0x545, + 0x546, + 0x547, + 0x548, + 0x549, + 0x54A, + 0x54B, + 0x54C, + 0x54D, + 0x54E, + 0x54F, + 0x550, + 0x551, + 0x552, + 0x553, + 0x554, + 0x555, + 0x556, + 0x557, + 0x559, + 0x587, + 0x588, + 0x58B, + 0x58D, + 0x590, + 0x591, + 0x5C8, + 0x5D0, + 0x5EB, + 0x5EF, + 0x5F5, + 0x606, + 0x61C, + 0x61D, + 0x675, + 0x676, + 0x677, + 0x678, + 0x679, + 0x6DD, + 0x6DE, + 0x70E, + 0x710, + 0x74B, + 0x74D, + 0x7B2, + 0x7C0, + 0x7FB, + 0x7FD, + 0x82E, + 0x830, + 0x83F, + 0x840, + 0x85C, + 0x85E, + 0x85F, + 0x860, + 0x86B, + 0x870, + 0x890, + 0x897, + 0x8E2, + 0x8E3, + 0x958, + 0x959, + 0x95A, + 0x95B, + 0x95C, + 0x95D, + 0x95E, + 0x95F, + 0x960, + 0x984, + 0x985, + 0x98D, + 0x98F, + 0x991, + 0x993, + 0x9A9, + 0x9AA, + 0x9B1, + 0x9B2, + 0x9B3, + 0x9B6, + 0x9BA, + 0x9BC, + 0x9C5, + 0x9C7, + 0x9C9, + 0x9CB, + 0x9CF, + 0x9D7, + 0x9D8, + 0x9DC, + 0x9DD, + 0x9DE, + 0x9DF, + 0x9E0, + 0x9E4, + 0x9E6, + 0x9FF, + 0xA01, + 0xA04, + 0xA05, + 0xA0B, + 0xA0F, + 0xA11, + 0xA13, + 0xA29, + 0xA2A, + 0xA31, + 0xA32, + 0xA33, + 0xA34, + 0xA35, + 0xA36, + 0xA37, + 0xA38, + 0xA3A, + 0xA3C, + 0xA3D, + 0xA3E, + 0xA43, + 0xA47, + 0xA49, + 0xA4B, + 0xA4E, + 0xA51, + 0xA52, + 0xA59, + 0xA5A, + 0xA5B, + 0xA5C, + 0xA5D, + 0xA5E, + 0xA5F, + 0xA66, + 0xA77, + 0xA81, + 0xA84, + 0xA85, + 0xA8E, + 0xA8F, + 0xA92, + 0xA93, + 0xAA9, + 0xAAA, + 0xAB1, + 0xAB2, + 0xAB4, + 0xAB5, + 0xABA, + 0xABC, + 0xAC6, + 0xAC7, + 0xACA, + 0xACB, + 0xACE, + 0xAD0, + 0xAD1, + 0xAE0, + 0xAE4, + 0xAE6, + 0xAF2, + 0xAF9, + 0xB00, + 0xB01, + 0xB04, + 0xB05, + 0xB0D, + 0xB0F, + 0xB11, + 0xB13, + 0xB29, + 0xB2A, + 0xB31, + 0xB32, + 0xB34, + 0xB35, + 0xB3A, + 0xB3C, + 0xB45, + 0xB47, + 0xB49, + 0xB4B, + 0xB4E, + 0xB55, + 0xB58, + 0xB5C, + 0xB5D, + 0xB5E, + 0xB5F, + 0xB64, + 0xB66, + 0xB78, + 0xB82, + 0xB84, + 0xB85, + 0xB8B, + 0xB8E, + 0xB91, + 0xB92, + 0xB96, + 0xB99, + 0xB9B, + 0xB9C, + 0xB9D, + 0xB9E, + 0xBA0, + 0xBA3, + 0xBA5, + 0xBA8, + 0xBAB, + 0xBAE, + 0xBBA, + 0xBBE, + 0xBC3, + 0xBC6, + 0xBC9, + 0xBCA, + 0xBCE, + 0xBD0, + 0xBD1, + 0xBD7, + 0xBD8, + 0xBE6, + 0xBFB, + 0xC00, + 0xC0D, + 0xC0E, + 0xC11, + 0xC12, + 0xC29, + 0xC2A, + 0xC3A, + 0xC3C, + 0xC45, + 0xC46, + 0xC49, + 0xC4A, + 0xC4E, + 0xC55, + 0xC57, + 0xC58, + 0xC5B, + 0xC5C, + 0xC5E, + 0xC60, + 0xC64, + 0xC66, + 0xC70, + 0xC77, + 0xC8D, + 0xC8E, + 0xC91, + 0xC92, + 0xCA9, + 0xCAA, + 0xCB4, + 0xCB5, + 0xCBA, + 0xCBC, + 0xCC5, + 0xCC6, + 0xCC9, + 0xCCA, + 0xCCE, + 0xCD5, + 0xCD7, + 0xCDC, + 0xCDF, + 0xCE0, + 0xCE4, + 0xCE6, + 0xCF0, + 0xCF1, + 0xCF4, + 0xD00, + 0xD0D, + 0xD0E, + 0xD11, + 0xD12, + 0xD45, + 0xD46, + 0xD49, + 0xD4A, + 0xD50, + 0xD54, + 0xD64, + 0xD66, + 0xD80, + 0xD81, + 0xD84, + 0xD85, + 0xD97, + 0xD9A, + 0xDB2, + 0xDB3, + 0xDBC, + 0xDBD, + 0xDBE, + 0xDC0, + 0xDC7, + 0xDCA, + 0xDCB, + 0xDCF, + 0xDD5, + 0xDD6, + 0xDD7, + 0xDD8, + 0xDE0, + 0xDE6, + 0xDF0, + 0xDF2, + 0xDF5, + 0xE01, + 0xE33, + 0xE34, + 0xE3B, + 0xE3F, + 0xE5C, + 0xE81, + 0xE83, + 0xE84, + 0xE85, + 0xE86, + 0xE8B, + 0xE8C, + 0xEA4, + 0xEA5, + 0xEA6, + 0xEA7, + 0xEB3, + 0xEB4, + 0xEBE, + 0xEC0, + 0xEC5, + 0xEC6, + 0xEC7, + 0xEC8, + 0xECF, + 0xED0, + 0xEDA, + 0xEDC, + 0xEDD, + 0xEDE, + 0xEE0, + 0xF00, + 0xF0C, + 0xF0D, + 0xF43, + 0xF44, + 0xF48, + 0xF49, + 0xF4D, + 0xF4E, + 0xF52, + 0xF53, + 0xF57, + 0xF58, + 0xF5C, + 0xF5D, + 0xF69, + 0xF6A, + 0xF6D, + 0xF71, + 0xF73, + 0xF74, + 0xF75, + 0xF76, + 0xF77, + 0xF78, + 0xF79, + 0xF7A, + 0xF81, + 0xF82, + 0xF93, + 0xF94, + 0xF98, + 0xF99, + 0xF9D, + 0xF9E, + 0xFA2, + 0xFA3, + 0xFA7, + 0xFA8, + 0xFAC, + 0xFAD, + 0xFB9, + 0xFBA, + 0xFBD, + 0xFBE, + 0xFCD, + 0xFCE, + 0xFDB, + 0x1000, + 0x10A0, + 0x10A1, + 0x10A2, + 0x10A3, + 0x10A4, + 0x10A5, + 0x10A6, + 0x10A7, + 0x10A8, + 0x10A9, + 0x10AA, + 0x10AB, + 0x10AC, + 0x10AD, + 0x10AE, + 0x10AF, + 0x10B0, + 0x10B1, + 0x10B2, + 0x10B3, + 0x10B4, + 0x10B5, + 0x10B6, + 0x10B7, + 0x10B8, + 0x10B9, + 0x10BA, + 0x10BB, + 0x10BC, + 0x10BD, + 0x10BE, + 0x10BF, + 0x10C0, + 0x10C1, + 0x10C2, + 0x10C3, + 0x10C4, + 0x10C5, + 0x10C6, + 0x10C7, + 0x10C8, + 0x10CD, + 0x10CE, + 0x10D0, + 0x10FC, + 0x10FD, + 0x115F, + 0x1161, + 0x1249, + 0x124A, + 0x124E, + 0x1250, + 0x1257, + 0x1258, + 0x1259, + 0x125A, + 0x125E, + 0x1260, + 0x1289, + 0x128A, + 0x128E, + 0x1290, + 0x12B1, + 0x12B2, + 0x12B6, + 0x12B8, + 0x12BF, + 0x12C0, + 0x12C1, + 0x12C2, + 0x12C6, + 0x12C8, + 0x12D7, + 0x12D8, + 0x1311, + 0x1312, + 0x1316, + 0x1318, + 0x135B, + 0x135D, + 0x137D, + 0x1380, + 0x139A, + 0x13A0, + 0x13F6, + 0x13F8, + 0x13F9, + 0x13FA, + 0x13FB, + 0x13FC, + 0x13FD, + 0x13FE, + 0x1400, + 0x1680, + 0x1681, + 0x169D, + 0x16A0, + 0x16F9, + 0x1700, + 0x1716, + 0x171F, + 0x1737, + 0x1740, + 0x1754, + 0x1760, + 0x176D, + 0x176E, + 0x1771, + 0x1772, + 0x1774, + 0x1780, + 0x17B4, + 0x17B6, + 0x17DE, + 0x17E0, + 0x17EA, + 0x17F0, + 0x17FA, + 0x1800, + 0x180B, + 0x1810, + 0x181A, + 0x1820, + 0x1879, + 0x1880, + 0x18AB, + 0x18B0, + 0x18F6, + 0x1900, + 0x191F, + 0x1920, + 0x192C, + 0x1930, + 0x193C, + 0x1940, + 0x1941, + 0x1944, + 0x196E, + 0x1970, + 0x1975, + 0x1980, + 0x19AC, + 0x19B0, + 0x19CA, + 0x19D0, + 0x19DB, + 0x19DE, + 0x1A1C, + 0x1A1E, + 0x1A5F, + 0x1A60, + 0x1A7D, + 0x1A7F, + 0x1A8A, + 0x1A90, + 0x1A9A, + 0x1AA0, + 0x1AAE, + 0x1AB0, + 0x1ADE, + 0x1AE0, + 0x1AEC, + 0x1B00, + 0x1B4D, + 0x1B4E, + 0x1BF4, + 0x1BFC, + 0x1C38, + 0x1C3B, + 0x1C4A, + 0x1C4D, + 0x1C80, + 0x1C81, + 0x1C82, + 0x1C83, + 0x1C84, + 0x1C86, + 0x1C87, + 0x1C88, + 0x1C89, + 0x1C8A, + 0x1C8B, + 0x1C90, + 0x1C91, + 0x1C92, + 0x1C93, + 0x1C94, + 0x1C95, + 0x1C96, + 0x1C97, + 0x1C98, + 0x1C99, + 0x1C9A, + 0x1C9B, + 0x1C9C, + 0x1C9D, + 0x1C9E, + 0x1C9F, + 0x1CA0, + 0x1CA1, + 0x1CA2, + 0x1CA3, + 0x1CA4, + 0x1CA5, + 0x1CA6, + 0x1CA7, + 0x1CA8, + 0x1CA9, + 0x1CAA, + 0x1CAB, + 0x1CAC, + 0x1CAD, + 0x1CAE, + 0x1CAF, + 0x1CB0, + 0x1CB1, + 0x1CB2, + 0x1CB3, + 0x1CB4, + 0x1CB5, + 0x1CB6, + 0x1CB7, + 0x1CB8, + 0x1CB9, + 0x1CBA, + 0x1CBB, + 0x1CBD, + 0x1CBE, + 0x1CBF, + 0x1CC0, + 0x1CC8, + 0x1CD0, + 0x1CFB, + 0x1D00, + 0x1D2C, + 0x1D2D, + 0x1D2E, + 0x1D2F, + 0x1D30, + 0x1D31, + 0x1D32, + 0x1D33, + 0x1D34, + 0x1D35, + 0x1D36, + 0x1D37, + 0x1D38, + 0x1D39, + 0x1D3A, + 0x1D3B, + 0x1D3C, + 0x1D3D, + 0x1D3E, + 0x1D3F, + 0x1D40, + 0x1D41, + 0x1D42, + 0x1D43, + 0x1D44, + 0x1D45, + 0x1D46, + 0x1D47, + 0x1D48, + 0x1D49, + 0x1D4A, + 0x1D4B, + 0x1D4C, + 0x1D4D, + 0x1D4E, + 0x1D4F, + 0x1D50, + 0x1D51, + 0x1D52, + 0x1D53, + 0x1D54, + 0x1D55, + 0x1D56, + 0x1D57, + 0x1D58, + 0x1D59, + 0x1D5A, + 0x1D5B, + 0x1D5C, + 0x1D5D, + 0x1D5E, + 0x1D5F, + 0x1D60, + 0x1D61, + 0x1D62, + 0x1D63, + 0x1D64, + 0x1D65, + 0x1D66, + 0x1D67, + 0x1D68, + 0x1D69, + 0x1D6A, + 0x1D6B, + 0x1D78, + 0x1D79, + 0x1D9B, + 0x1D9C, + 0x1D9D, + 0x1D9E, + 0x1D9F, + 0x1DA0, + 0x1DA1, + 0x1DA2, + 0x1DA3, + 0x1DA4, + 0x1DA5, + 0x1DA6, + 0x1DA7, + 0x1DA8, + 0x1DA9, + 0x1DAA, + 0x1DAB, + 0x1DAC, + 0x1DAD, + 0x1DAE, + 0x1DAF, + 0x1DB0, + 0x1DB1, + 0x1DB2, + 0x1DB3, + 0x1DB4, + 0x1DB5, + 0x1DB6, + 0x1DB7, + 0x1DB8, + 0x1DB9, + 0x1DBA, + 0x1DBB, + 0x1DBC, + 0x1DBD, + 0x1DBE, + 0x1DBF, + 0x1DC0, + 0x1E00, + 0x1E01, + 0x1E02, + 0x1E03, + 0x1E04, + 0x1E05, + 0x1E06, + 0x1E07, + 0x1E08, + 0x1E09, + 0x1E0A, + 0x1E0B, + 0x1E0C, + 0x1E0D, + 0x1E0E, + 0x1E0F, + 0x1E10, + 0x1E11, + 0x1E12, + 0x1E13, + 0x1E14, + 0x1E15, + 0x1E16, + 0x1E17, + 0x1E18, + 0x1E19, + 0x1E1A, + 0x1E1B, + 0x1E1C, + 0x1E1D, + 0x1E1E, + 0x1E1F, + 0x1E20, + 0x1E21, + 0x1E22, + 0x1E23, + 0x1E24, + 0x1E25, + 0x1E26, + 0x1E27, + 0x1E28, + 0x1E29, + 0x1E2A, + 0x1E2B, + 0x1E2C, + 0x1E2D, + 0x1E2E, + 0x1E2F, + 0x1E30, + 0x1E31, + 0x1E32, + 0x1E33, + 0x1E34, + 0x1E35, + 0x1E36, + 0x1E37, + 0x1E38, + 0x1E39, + 0x1E3A, + 0x1E3B, + 0x1E3C, + 0x1E3D, + 0x1E3E, + 0x1E3F, + 0x1E40, + 0x1E41, + 0x1E42, + 0x1E43, + 0x1E44, + 0x1E45, + 0x1E46, + 0x1E47, + 0x1E48, + 0x1E49, + 0x1E4A, + 0x1E4B, + 0x1E4C, + 0x1E4D, + 0x1E4E, + 0x1E4F, + 0x1E50, + 0x1E51, + 0x1E52, + 0x1E53, + 0x1E54, + 0x1E55, + 0x1E56, + 0x1E57, + 0x1E58, + 0x1E59, + 0x1E5A, + 0x1E5B, + 0x1E5C, + 0x1E5D, + 0x1E5E, + 0x1E5F, + 0x1E60, + 0x1E61, + 0x1E62, + 0x1E63, + 0x1E64, + 0x1E65, + 0x1E66, + 0x1E67, + 0x1E68, + 0x1E69, + 0x1E6A, + 0x1E6B, + 0x1E6C, + 0x1E6D, + 0x1E6E, + 0x1E6F, + 0x1E70, + 0x1E71, + 0x1E72, + 0x1E73, + 0x1E74, + 0x1E75, + 0x1E76, + 0x1E77, + 0x1E78, + 0x1E79, + 0x1E7A, + 0x1E7B, + 0x1E7C, + 0x1E7D, + 0x1E7E, + 0x1E7F, + 0x1E80, + 0x1E81, + 0x1E82, + 0x1E83, + 0x1E84, + 0x1E85, + 0x1E86, + 0x1E87, + 0x1E88, + 0x1E89, + 0x1E8A, + 0x1E8B, + 0x1E8C, + 0x1E8D, + 0x1E8E, + 0x1E8F, + 0x1E90, + 0x1E91, + 0x1E92, + 0x1E93, + 0x1E94, + 0x1E95, + 0x1E9A, + 0x1E9B, + 0x1E9C, + 0x1E9E, + 0x1E9F, + 0x1EA0, + 0x1EA1, + 0x1EA2, + 0x1EA3, + 0x1EA4, + 0x1EA5, + 0x1EA6, + 0x1EA7, + 0x1EA8, + 0x1EA9, + 0x1EAA, + 0x1EAB, + 0x1EAC, + 0x1EAD, + 0x1EAE, + 0x1EAF, + 0x1EB0, + 0x1EB1, + 0x1EB2, + 0x1EB3, + 0x1EB4, + 0x1EB5, + 0x1EB6, + 0x1EB7, + 0x1EB8, + 0x1EB9, + 0x1EBA, + 0x1EBB, + 0x1EBC, + 0x1EBD, + 0x1EBE, + 0x1EBF, + 0x1EC0, + 0x1EC1, + 0x1EC2, + 0x1EC3, + 0x1EC4, + 0x1EC5, + 0x1EC6, + 0x1EC7, + 0x1EC8, + 0x1EC9, + 0x1ECA, + 0x1ECB, + 0x1ECC, + 0x1ECD, + 0x1ECE, + 0x1ECF, + 0x1ED0, + 0x1ED1, + 0x1ED2, + 0x1ED3, + 0x1ED4, + 0x1ED5, + 0x1ED6, + 0x1ED7, + 0x1ED8, + 0x1ED9, + 0x1EDA, + 0x1EDB, + 0x1EDC, + 0x1EDD, + 0x1EDE, + 0x1EDF, + 0x1EE0, + 0x1EE1, + 0x1EE2, + 0x1EE3, + 0x1EE4, + 0x1EE5, + 0x1EE6, + 0x1EE7, + 0x1EE8, + 0x1EE9, + 0x1EEA, + 0x1EEB, + 0x1EEC, + 0x1EED, + 0x1EEE, + 0x1EEF, + 0x1EF0, + 0x1EF1, + 0x1EF2, + 0x1EF3, + 0x1EF4, + 0x1EF5, + 0x1EF6, + 0x1EF7, + 0x1EF8, + 0x1EF9, + 0x1EFA, + 0x1EFB, + 0x1EFC, + 0x1EFD, + 0x1EFE, + 0x1EFF, + 0x1F08, + 0x1F09, + 0x1F0A, + 0x1F0B, + 0x1F0C, + 0x1F0D, + 0x1F0E, + 0x1F0F, + 0x1F10, + 0x1F16, + 0x1F18, + 0x1F19, + 0x1F1A, + 0x1F1B, + 0x1F1C, + 0x1F1D, + 0x1F1E, + 0x1F20, + 0x1F28, + 0x1F29, + 0x1F2A, + 0x1F2B, + 0x1F2C, + 0x1F2D, + 0x1F2E, + 0x1F2F, + 0x1F30, + 0x1F38, + 0x1F39, + 0x1F3A, + 0x1F3B, + 0x1F3C, + 0x1F3D, + 0x1F3E, + 0x1F3F, + 0x1F40, + 0x1F46, + 0x1F48, + 0x1F49, + 0x1F4A, + 0x1F4B, + 0x1F4C, + 0x1F4D, + 0x1F4E, + 0x1F50, + 0x1F58, + 0x1F59, + 0x1F5A, + 0x1F5B, + 0x1F5C, + 0x1F5D, + 0x1F5E, + 0x1F5F, + 0x1F60, + 0x1F68, + 0x1F69, + 0x1F6A, + 0x1F6B, + 0x1F6C, + 0x1F6D, + 0x1F6E, + 0x1F6F, + 0x1F70, + 0x1F71, + 0x1F72, + 0x1F73, + 0x1F74, + 0x1F75, + 0x1F76, + 0x1F77, + 0x1F78, + 0x1F79, + 0x1F7A, + 0x1F7B, + 0x1F7C, + 0x1F7D, + 0x1F7E, + 0x1F80, + 0x1F81, + 0x1F82, + 0x1F83, + 0x1F84, + 0x1F85, + 0x1F86, + 0x1F87, + 0x1F88, + 0x1F89, + 0x1F8A, + 0x1F8B, + 0x1F8C, + 0x1F8D, + 0x1F8E, + 0x1F8F, + 0x1F90, + 0x1F91, + 0x1F92, + 0x1F93, + 0x1F94, + 0x1F95, + 0x1F96, + 0x1F97, + 0x1F98, + 0x1F99, + 0x1F9A, + 0x1F9B, + 0x1F9C, + 0x1F9D, + 0x1F9E, + 0x1F9F, + 0x1FA0, + 0x1FA1, + 0x1FA2, + 0x1FA3, + 0x1FA4, + 0x1FA5, + 0x1FA6, + 0x1FA7, + 0x1FA8, + 0x1FA9, + 0x1FAA, + 0x1FAB, + 0x1FAC, + 0x1FAD, + 0x1FAE, + 0x1FAF, + 0x1FB0, + 0x1FB2, + 0x1FB3, + 0x1FB4, + 0x1FB5, + 0x1FB6, + 0x1FB7, + 0x1FB8, + 0x1FB9, + 0x1FBA, + 0x1FBB, + 0x1FBC, + 0x1FBD, + 0x1FBE, + 0x1FBF, + 0x1FC0, + 0x1FC1, + 0x1FC2, + 0x1FC3, + 0x1FC4, + 0x1FC5, + 0x1FC6, + 0x1FC7, + 0x1FC8, + 0x1FC9, + 0x1FCA, + 0x1FCB, + 0x1FCC, + 0x1FCD, + 0x1FCE, + 0x1FCF, + 0x1FD0, + 0x1FD3, + 0x1FD4, + 0x1FD6, + 0x1FD8, + 0x1FD9, + 0x1FDA, + 0x1FDB, + 0x1FDC, + 0x1FDD, + 0x1FDE, + 0x1FDF, + 0x1FE0, + 0x1FE3, + 0x1FE4, + 0x1FE8, + 0x1FE9, + 0x1FEA, + 0x1FEB, + 0x1FEC, + 0x1FED, + 0x1FEE, + 0x1FEF, + 0x1FF0, + 0x1FF2, + 0x1FF3, + 0x1FF4, + 0x1FF5, + 0x1FF6, + 0x1FF7, + 0x1FF8, + 0x1FF9, + 0x1FFA, + 0x1FFB, + 0x1FFC, + 0x1FFD, + 0x1FFE, + 0x1FFF, + 0x2000, + 0x200B, + 0x200C, + 0x200E, + 0x2010, + 0x2011, + 0x2012, + 0x2017, + 0x2018, + 0x2024, + 0x2027, + 0x2028, + 0x202F, + 0x2030, + 0x2033, + 0x2034, + 0x2035, + 0x2036, + 0x2037, + 0x2038, + 0x203C, + 0x203D, + 0x203E, + 0x203F, + 0x2047, + 0x2048, + 0x2049, + 0x204A, + 0x2057, + 0x2058, + 0x205F, + 0x2060, + 0x2065, + 0x206A, + 0x2070, + 0x2071, + 0x2072, + 0x2074, + 0x2075, + 0x2076, + 0x2077, + 0x2078, + 0x2079, + 0x207A, + 0x207B, + 0x207C, + 0x207D, + 0x207E, + 0x207F, + 0x2080, + 0x2081, + 0x2082, + 0x2083, + 0x2084, + 0x2085, + 0x2086, + 0x2087, + 0x2088, + 0x2089, + 0x208A, + 0x208B, + 0x208C, + 0x208D, + 0x208E, + 0x208F, + 0x2090, + 0x2091, + 0x2092, + 0x2093, + 0x2094, + 0x2095, + 0x2096, + 0x2097, + 0x2098, + 0x2099, + 0x209A, + 0x209B, + 0x209C, + 0x209D, + 0x20A0, + 0x20A8, + 0x20A9, + 0x20C2, + 0x20D0, + 0x20F1, + 0x2100, + 0x2101, + 0x2102, + 0x2103, + 0x2104, + 0x2105, + 0x2106, + 0x2107, + 0x2108, + 0x2109, + 0x210A, + 0x210B, + 0x210F, + 0x2110, + 0x2112, + 0x2114, + 0x2115, + 0x2116, + 0x2117, + 0x2119, + 0x211A, + 0x211B, + 0x211E, + 0x2120, + 0x2121, + 0x2122, + 0x2123, + 0x2124, + 0x2125, + 0x2126, + 0x2127, + 0x2128, + 0x2129, + 0x212A, + 0x212B, + 0x212C, + 0x212D, + 0x212E, + 0x212F, + 0x2131, + 0x2132, + 0x2133, + 0x2134, + 0x2135, + 0x2136, + 0x2137, + 0x2138, + 0x2139, + 0x213A, + 0x213B, + 0x213C, + 0x213D, + 0x213F, + 0x2140, + 0x2141, + 0x2145, + 0x2147, + 0x2148, + 0x2149, + 0x214A, + 0x2150, + 0x2151, + 0x2152, + 0x2153, + 0x2154, + 0x2155, + 0x2156, + 0x2157, + 0x2158, + 0x2159, + 0x215A, + 0x215B, + 0x215C, + 0x215D, + 0x215E, + 0x215F, + 0x2160, + 0x2161, + 0x2162, + 0x2163, + 0x2164, + 0x2165, + 0x2166, + 0x2167, + 0x2168, + 0x2169, + 0x216A, + 0x216B, + 0x216C, + 0x216D, + 0x216E, + 0x216F, + 0x2170, + 0x2171, + 0x2172, + 0x2173, + 0x2174, + 0x2175, + 0x2176, + 0x2177, + 0x2178, + 0x2179, + 0x217A, + 0x217B, + 0x217C, + 0x217D, + 0x217E, + 0x217F, + 0x2180, + 0x2183, + 0x2184, + 0x2189, + 0x218A, + 0x218C, + 0x2190, + 0x222C, + 0x222D, + 0x222E, + 0x222F, + 0x2230, + 0x2231, + 0x2329, + 0x232A, + 0x232B, + 0x242A, + 0x2440, + 0x244B, + 0x2460, + 0x2461, + 0x2462, + 0x2463, + 0x2464, + 0x2465, + 0x2466, + 0x2467, + 0x2468, + 0x2469, + 0x246A, + 0x246B, + 0x246C, + 0x246D, + 0x246E, + 0x246F, + 0x2470, + 0x2471, + 0x2472, + 0x2473, + 0x2474, + 0x2475, + 0x2476, + 0x2477, + 0x2478, + 0x2479, + 0x247A, + 0x247B, + 0x247C, + 0x247D, + 0x247E, + 0x247F, + 0x2480, + 0x2481, + 0x2482, + 0x2483, + 0x2484, + 0x2485, + 0x2486, + 0x2487, + 0x2488, + 0x249C, + 0x249D, + 0x249E, + 0x249F, + 0x24A0, + 0x24A1, + 0x24A2, + 0x24A3, + 0x24A4, + 0x24A5, + 0x24A6, + 0x24A7, + 0x24A8, + 0x24A9, + 0x24AA, + 0x24AB, + 0x24AC, + 0x24AD, + 0x24AE, + 0x24AF, + 0x24B0, + 0x24B1, + 0x24B2, + 0x24B3, + 0x24B4, + 0x24B5, + 0x24B6, + 0x24B7, + 0x24B8, + 0x24B9, + 0x24BA, + 0x24BB, + 0x24BC, + 0x24BD, + 0x24BE, + 0x24BF, + 0x24C0, + 0x24C1, + 0x24C2, + 0x24C3, + 0x24C4, + 0x24C5, + 0x24C6, + 0x24C7, + 0x24C8, + 0x24C9, + 0x24CA, + 0x24CB, + 0x24CC, + 0x24CD, + 0x24CE, + 0x24CF, + 0x24D0, + 0x24D1, + 0x24D2, + 0x24D3, + 0x24D4, + 0x24D5, + 0x24D6, + 0x24D7, + 0x24D8, + 0x24D9, + 0x24DA, + 0x24DB, + 0x24DC, + 0x24DD, + 0x24DE, + 0x24DF, + 0x24E0, + 0x24E1, + 0x24E2, + 0x24E3, + 0x24E4, + 0x24E5, + 0x24E6, + 0x24E7, + 0x24E8, + 0x24E9, + 0x24EA, + 0x24EB, + 0x2A0C, + 0x2A0D, + 0x2A74, + 0x2A75, + 0x2A76, + 0x2A77, + 0x2ADC, + 0x2ADD, + 0x2B74, + 0x2B76, + 0x2C00, + 0x2C01, + 0x2C02, + 0x2C03, + 0x2C04, + 0x2C05, + 0x2C06, + 0x2C07, + 0x2C08, + 0x2C09, + 0x2C0A, + 0x2C0B, + 0x2C0C, + 0x2C0D, + 0x2C0E, + 0x2C0F, + 0x2C10, + 0x2C11, + 0x2C12, + 0x2C13, + 0x2C14, + 0x2C15, + 0x2C16, + 0x2C17, + 0x2C18, + 0x2C19, + 0x2C1A, + 0x2C1B, + 0x2C1C, + 0x2C1D, + 0x2C1E, + 0x2C1F, + 0x2C20, + 0x2C21, + 0x2C22, + 0x2C23, + 0x2C24, + 0x2C25, + 0x2C26, + 0x2C27, + 0x2C28, + 0x2C29, + 0x2C2A, + 0x2C2B, + 0x2C2C, + 0x2C2D, + 0x2C2E, + 0x2C2F, + 0x2C30, + 0x2C60, + 0x2C61, + 0x2C62, + 0x2C63, + 0x2C64, + 0x2C65, + 0x2C67, + 0x2C68, + 0x2C69, + 0x2C6A, + 0x2C6B, + 0x2C6C, + 0x2C6D, + 0x2C6E, + 0x2C6F, + 0x2C70, + 0x2C71, + 0x2C72, + 0x2C73, + 0x2C75, + 0x2C76, + 0x2C7C, + 0x2C7D, + 0x2C7E, + 0x2C7F, + 0x2C80, + 0x2C81, + 0x2C82, + 0x2C83, + 0x2C84, + 0x2C85, + 0x2C86, + 0x2C87, + 0x2C88, + 0x2C89, + 0x2C8A, + 0x2C8B, + 0x2C8C, + 0x2C8D, + 0x2C8E, + 0x2C8F, + 0x2C90, + 0x2C91, + 0x2C92, + 0x2C93, + 0x2C94, + 0x2C95, + 0x2C96, + 0x2C97, + 0x2C98, + 0x2C99, + 0x2C9A, + 0x2C9B, + 0x2C9C, + 0x2C9D, + 0x2C9E, + 0x2C9F, + 0x2CA0, + 0x2CA1, + 0x2CA2, + 0x2CA3, + 0x2CA4, + 0x2CA5, + 0x2CA6, + 0x2CA7, + 0x2CA8, + 0x2CA9, + 0x2CAA, + 0x2CAB, + 0x2CAC, + 0x2CAD, + 0x2CAE, + 0x2CAF, + 0x2CB0, + 0x2CB1, + 0x2CB2, + 0x2CB3, + 0x2CB4, + 0x2CB5, + 0x2CB6, + 0x2CB7, + 0x2CB8, + 0x2CB9, + 0x2CBA, + 0x2CBB, + 0x2CBC, + 0x2CBD, + 0x2CBE, + 0x2CBF, + 0x2CC0, + 0x2CC1, + 0x2CC2, + 0x2CC3, + 0x2CC4, + 0x2CC5, + 0x2CC6, + 0x2CC7, + 0x2CC8, + 0x2CC9, + 0x2CCA, + 0x2CCB, + 0x2CCC, + 0x2CCD, + 0x2CCE, + 0x2CCF, + 0x2CD0, + 0x2CD1, + 0x2CD2, + 0x2CD3, + 0x2CD4, + 0x2CD5, + 0x2CD6, + 0x2CD7, + 0x2CD8, + 0x2CD9, + 0x2CDA, + 0x2CDB, + 0x2CDC, + 0x2CDD, + 0x2CDE, + 0x2CDF, + 0x2CE0, + 0x2CE1, + 0x2CE2, + 0x2CE3, + 0x2CEB, + 0x2CEC, + 0x2CED, + 0x2CEE, + 0x2CF2, + 0x2CF3, + 0x2CF4, + 0x2CF9, + 0x2D26, + 0x2D27, + 0x2D28, + 0x2D2D, + 0x2D2E, + 0x2D30, + 0x2D68, + 0x2D6F, + 0x2D70, + 0x2D71, + 0x2D7F, + 0x2D97, + 0x2DA0, + 0x2DA7, + 0x2DA8, + 0x2DAF, + 0x2DB0, + 0x2DB7, + 0x2DB8, + 0x2DBF, + 0x2DC0, + 0x2DC7, + 0x2DC8, + 0x2DCF, + 0x2DD0, + 0x2DD7, + 0x2DD8, + 0x2DDF, + 0x2DE0, + 0x2E5E, + 0x2E80, + 0x2E9A, + 0x2E9B, + 0x2E9F, + 0x2EA0, + 0x2EF3, + 0x2EF4, + 0x2F00, + 0x2F01, + 0x2F02, + 0x2F03, + 0x2F04, + 0x2F05, + 0x2F06, + 0x2F07, + 0x2F08, + 0x2F09, + 0x2F0A, + 0x2F0B, + 0x2F0C, + 0x2F0D, + 0x2F0E, + 0x2F0F, + 0x2F10, + 0x2F11, + 0x2F12, + 0x2F13, + 0x2F14, + 0x2F15, + 0x2F16, + 0x2F17, + 0x2F18, + 0x2F19, + 0x2F1A, + 0x2F1B, + 0x2F1C, + 0x2F1D, + 0x2F1E, + 0x2F1F, + 0x2F20, + 0x2F21, + 0x2F22, + 0x2F23, + 0x2F24, + 0x2F25, + 0x2F26, + 0x2F27, + 0x2F28, + 0x2F29, + 0x2F2A, + 0x2F2B, + 0x2F2C, + 0x2F2D, + 0x2F2E, + 0x2F2F, + 0x2F30, + 0x2F31, + 0x2F32, + 0x2F33, + 0x2F34, + 0x2F35, + 0x2F36, + 0x2F37, + 0x2F38, + 0x2F39, + 0x2F3A, + 0x2F3B, + 0x2F3C, + 0x2F3D, + 0x2F3E, + 0x2F3F, + 0x2F40, + 0x2F41, + 0x2F42, + 0x2F43, + 0x2F44, + 0x2F45, + 0x2F46, + 0x2F47, + 0x2F48, + 0x2F49, + 0x2F4A, + 0x2F4B, + 0x2F4C, + 0x2F4D, + 0x2F4E, + 0x2F4F, + 0x2F50, + 0x2F51, + 0x2F52, + 0x2F53, + 0x2F54, + 0x2F55, + 0x2F56, + 0x2F57, + 0x2F58, + 0x2F59, + 0x2F5A, + 0x2F5B, + 0x2F5C, + 0x2F5D, + 0x2F5E, + 0x2F5F, + 0x2F60, + 0x2F61, + 0x2F62, + 0x2F63, + 0x2F64, + 0x2F65, + 0x2F66, + 0x2F67, + 0x2F68, + 0x2F69, + 0x2F6A, + 0x2F6B, + 0x2F6C, + 0x2F6D, + 0x2F6E, + 0x2F6F, + 0x2F70, + 0x2F71, + 0x2F72, + 0x2F73, + 0x2F74, + 0x2F75, + 0x2F76, + 0x2F77, + 0x2F78, + 0x2F79, + 0x2F7A, + 0x2F7B, + 0x2F7C, + 0x2F7D, + 0x2F7E, + 0x2F7F, + 0x2F80, + 0x2F81, + 0x2F82, + 0x2F83, + 0x2F84, + 0x2F85, + 0x2F86, + 0x2F87, + 0x2F88, + 0x2F89, + 0x2F8A, + 0x2F8B, + 0x2F8C, + 0x2F8D, + 0x2F8E, + 0x2F8F, + 0x2F90, + 0x2F91, + 0x2F92, + 0x2F93, + 0x2F94, + 0x2F95, + 0x2F96, + 0x2F97, + 0x2F98, + 0x2F99, + 0x2F9A, + 0x2F9B, + 0x2F9C, + 0x2F9D, + 0x2F9E, + 0x2F9F, + 0x2FA0, + 0x2FA1, + 0x2FA2, + 0x2FA3, + 0x2FA4, + 0x2FA5, + 0x2FA6, + 0x2FA7, + 0x2FA8, + 0x2FA9, + 0x2FAA, + 0x2FAB, + 0x2FAC, + 0x2FAD, + 0x2FAE, + 0x2FAF, + 0x2FB0, + 0x2FB1, + 0x2FB2, + 0x2FB3, + 0x2FB4, + 0x2FB5, + 0x2FB6, + 0x2FB7, + 0x2FB8, + 0x2FB9, + 0x2FBA, + 0x2FBB, + 0x2FBC, + 0x2FBD, + 0x2FBE, + 0x2FBF, + 0x2FC0, + 0x2FC1, + 0x2FC2, + 0x2FC3, + 0x2FC4, + 0x2FC5, + 0x2FC6, + 0x2FC7, + 0x2FC8, + 0x2FC9, + 0x2FCA, + 0x2FCB, + 0x2FCC, + 0x2FCD, + 0x2FCE, + 0x2FCF, + 0x2FD0, + 0x2FD1, + 0x2FD2, + 0x2FD3, + 0x2FD4, + 0x2FD5, + 0x2FD6, + 0x3000, + 0x3001, + 0x3002, + 0x3003, + 0x3036, + 0x3037, + 0x3038, + 0x3039, + 0x303A, + 0x303B, + 0x3040, + 0x3041, + 0x3097, + 0x3099, + 0x309B, + 0x309C, + 0x309D, + 0x309F, + 0x30A0, + 0x30FF, + 0x3100, + 0x3105, + 0x3130, + 0x3131, + 0x3132, + 0x3133, + 0x3134, + 0x3135, + 0x3136, + 0x3137, + 0x3138, + 0x3139, + 0x313A, + 0x313B, + 0x313C, + 0x313D, + 0x313E, + 0x313F, + 0x3140, + 0x3141, + 0x3142, + 0x3143, + 0x3144, + 0x3145, + 0x3146, + 0x3147, + 0x3148, + 0x3149, + 0x314A, + 0x314B, + 0x314C, + 0x314D, + 0x314E, + 0x314F, + 0x3150, + 0x3151, + 0x3152, + 0x3153, + 0x3154, + 0x3155, + 0x3156, + 0x3157, + 0x3158, + 0x3159, + 0x315A, + 0x315B, + 0x315C, + 0x315D, + 0x315E, + 0x315F, + 0x3160, + 0x3161, + 0x3162, + 0x3163, + 0x3164, + 0x3165, + 0x3166, + 0x3167, + 0x3168, + 0x3169, + 0x316A, + 0x316B, + 0x316C, + 0x316D, + 0x316E, + 0x316F, + 0x3170, + 0x3171, + 0x3172, + 0x3173, + 0x3174, + 0x3175, + 0x3176, + 0x3177, + 0x3178, + 0x3179, + 0x317A, + 0x317B, + 0x317C, + 0x317D, + 0x317E, + 0x317F, + 0x3180, + 0x3181, + 0x3182, + 0x3183, + 0x3184, + 0x3185, + 0x3186, + 0x3187, + 0x3188, + 0x3189, + 0x318A, + 0x318B, + 0x318C, + 0x318D, + 0x318E, + 0x318F, + 0x3190, + 0x3192, + 0x3193, + 0x3194, + 0x3195, + 0x3196, + 0x3197, + 0x3198, + 0x3199, + 0x319A, + 0x319B, + 0x319C, + 0x319D, + 0x319E, + 0x319F, + 0x31A0, + 0x31E6, + 0x31F0, + 0x3200, + 0x3201, + 0x3202, + 0x3203, + 0x3204, + 0x3205, + 0x3206, + 0x3207, + 0x3208, + 0x3209, + 0x320A, + 0x320B, + 0x320C, + 0x320D, + 0x320E, + 0x320F, + 0x3210, + 0x3211, + 0x3212, + 0x3213, + 0x3214, + 0x3215, + 0x3216, + 0x3217, + 0x3218, + 0x3219, + 0x321A, + 0x321B, + 0x321C, + 0x321D, + 0x321E, + 0x321F, + 0x3220, + 0x3221, + 0x3222, + 0x3223, + 0x3224, + 0x3225, + 0x3226, + 0x3227, + 0x3228, + 0x3229, + 0x322A, + 0x322B, + 0x322C, + 0x322D, + 0x322E, + 0x322F, + 0x3230, + 0x3231, + 0x3232, + 0x3233, + 0x3234, + 0x3235, + 0x3236, + 0x3237, + 0x3238, + 0x3239, + 0x323A, + 0x323B, + 0x323C, + 0x323D, + 0x323E, + 0x323F, + 0x3240, + 0x3241, + 0x3242, + 0x3243, + 0x3244, + 0x3245, + 0x3246, + 0x3247, + 0x3248, + 0x3250, + 0x3251, + 0x3252, + 0x3253, + 0x3254, + 0x3255, + 0x3256, + 0x3257, + 0x3258, + 0x3259, + 0x325A, + 0x325B, + 0x325C, + 0x325D, + 0x325E, + 0x325F, + 0x3260, + 0x3261, + 0x3262, + 0x3263, + 0x3264, + 0x3265, + 0x3266, + 0x3267, + 0x3268, + 0x3269, + 0x326A, + 0x326B, + 0x326C, + 0x326D, + 0x326E, + 0x326F, + 0x3270, + 0x3271, + 0x3272, + 0x3273, + 0x3274, + 0x3275, + 0x3276, + 0x3277, + 0x3278, + 0x3279, + 0x327A, + 0x327B, + 0x327C, + 0x327D, + 0x327E, + 0x327F, + 0x3280, + 0x3281, + 0x3282, + 0x3283, + 0x3284, + 0x3285, + 0x3286, + 0x3287, + 0x3288, + 0x3289, + 0x328A, + 0x328B, + 0x328C, + 0x328D, + 0x328E, + 0x328F, + 0x3290, + 0x3291, + 0x3292, + 0x3293, + 0x3294, + 0x3295, + 0x3296, + 0x3297, + 0x3298, + 0x3299, + 0x329A, + 0x329B, + 0x329C, + 0x329D, + 0x329E, + 0x329F, + 0x32A0, + 0x32A1, + 0x32A2, + 0x32A3, + 0x32A4, + 0x32A5, + 0x32A6, + 0x32A7, + 0x32A8, + 0x32A9, + 0x32AA, + 0x32AB, + 0x32AC, + 0x32AD, + 0x32AE, + 0x32AF, + 0x32B0, + 0x32B1, + 0x32B2, + 0x32B3, + 0x32B4, + 0x32B5, + 0x32B6, + 0x32B7, + 0x32B8, + 0x32B9, + 0x32BA, + 0x32BB, + 0x32BC, + 0x32BD, + 0x32BE, + 0x32BF, + 0x32C0, + 0x32C1, + 0x32C2, + 0x32C3, + 0x32C4, + 0x32C5, + 0x32C6, + 0x32C7, + 0x32C8, + 0x32C9, + 0x32CA, + 0x32CB, + 0x32CC, + 0x32CD, + 0x32CE, + 0x32CF, + 0x32D0, + 0x32D1, + 0x32D2, + 0x32D3, + 0x32D4, + 0x32D5, + 0x32D6, + 0x32D7, + 0x32D8, + 0x32D9, + 0x32DA, + 0x32DB, + 0x32DC, + 0x32DD, + 0x32DE, + 0x32DF, + 0x32E0, + 0x32E1, + 0x32E2, + 0x32E3, + 0x32E4, + 0x32E5, + 0x32E6, + 0x32E7, + 0x32E8, + 0x32E9, + 0x32EA, + 0x32EB, + 0x32EC, + 0x32ED, + 0x32EE, + 0x32EF, + 0x32F0, + 0x32F1, + 0x32F2, + 0x32F3, + 0x32F4, + 0x32F5, + 0x32F6, + 0x32F7, + 0x32F8, + 0x32F9, + 0x32FA, + 0x32FB, + 0x32FC, + 0x32FD, + 0x32FE, + 0x32FF, + 0x3300, + 0x3301, + 0x3302, + 0x3303, + 0x3304, + 0x3305, + 0x3306, + 0x3307, + 0x3308, + 0x3309, + 0x330A, + 0x330B, + 0x330C, + 0x330D, + 0x330E, + 0x330F, + 0x3310, + 0x3311, + 0x3312, + 0x3313, + 0x3314, + 0x3315, + 0x3316, + 0x3317, + 0x3318, + 0x3319, + 0x331A, + 0x331B, + 0x331C, + 0x331D, + 0x331E, + 0x331F, + 0x3320, + 0x3321, + 0x3322, + 0x3323, + 0x3324, + 0x3325, + 0x3326, + 0x3327, + 0x3328, + 0x3329, + 0x332A, + 0x332B, + 0x332C, + 0x332D, + 0x332E, + 0x332F, + 0x3330, + 0x3331, + 0x3332, + 0x3333, + 0x3334, + 0x3335, + 0x3336, + 0x3337, + 0x3338, + 0x3339, + 0x333A, + 0x333B, + 0x333C, + 0x333D, + 0x333E, + 0x333F, + 0x3340, + 0x3341, + 0x3342, + 0x3343, + 0x3344, + 0x3345, + 0x3346, + 0x3347, + 0x3348, + 0x3349, + 0x334A, + 0x334B, + 0x334C, + 0x334D, + 0x334E, + 0x334F, + 0x3350, + 0x3351, + 0x3352, + 0x3353, + 0x3354, + 0x3355, + 0x3356, + 0x3357, + 0x3358, + 0x3359, + 0x335A, + 0x335B, + 0x335C, + 0x335D, + 0x335E, + 0x335F, + 0x3360, + 0x3361, + 0x3362, + 0x3363, + 0x3364, + 0x3365, + 0x3366, + 0x3367, + 0x3368, + 0x3369, + 0x336A, + 0x336B, + 0x336C, + 0x336D, + 0x336E, + 0x336F, + 0x3370, + 0x3371, + 0x3372, + 0x3373, + 0x3374, + 0x3375, + 0x3376, + 0x3377, + 0x3378, + 0x3379, + 0x337A, + 0x337B, + 0x337C, + 0x337D, + 0x337E, + 0x337F, + 0x3380, + 0x3381, + 0x3382, + 0x3383, + 0x3384, + 0x3385, + 0x3386, + 0x3387, + 0x3388, + 0x3389, + 0x338A, + 0x338B, + 0x338C, + 0x338D, + 0x338E, + 0x338F, + 0x3390, + 0x3391, + 0x3392, + 0x3393, + 0x3394, + 0x3395, + 0x3396, + 0x3397, + 0x3398, + 0x3399, + 0x339A, + 0x339B, + 0x339C, + 0x339D, + 0x339E, + 0x339F, + 0x33A0, + 0x33A1, + 0x33A2, + 0x33A3, + 0x33A4, + 0x33A5, + 0x33A6, + 0x33A7, + 0x33A8, + 0x33A9, + 0x33AA, + 0x33AB, + 0x33AC, + 0x33AD, + 0x33AE, + 0x33AF, + 0x33B0, + 0x33B1, + 0x33B2, + 0x33B3, + 0x33B4, + 0x33B5, + 0x33B6, + 0x33B7, + 0x33B8, + 0x33B9, + 0x33BA, + 0x33BB, + 0x33BC, + 0x33BD, + 0x33BE, + 0x33BF, + 0x33C0, + 0x33C1, + 0x33C2, + 0x33C3, + 0x33C4, + 0x33C5, + 0x33C6, + 0x33C7, + 0x33C8, + 0x33C9, + 0x33CA, + 0x33CB, + 0x33CC, + 0x33CD, + 0x33CE, + 0x33CF, + 0x33D0, + 0x33D1, + 0x33D2, + 0x33D3, + 0x33D4, + 0x33D5, + 0x33D6, + 0x33D7, + 0x33D8, + 0x33D9, + 0x33DA, + 0x33DB, + 0x33DC, + 0x33DD, + 0x33DE, + 0x33DF, + 0x33E0, + 0x33E1, + 0x33E2, + 0x33E3, + 0x33E4, + 0x33E5, + 0x33E6, + 0x33E7, + 0x33E8, + 0x33E9, + 0x33EA, + 0x33EB, + 0x33EC, + 0x33ED, + 0x33EE, + 0x33EF, + 0x33F0, + 0x33F1, + 0x33F2, + 0x33F3, + 0x33F4, + 0x33F5, + 0x33F6, + 0x33F7, + 0x33F8, + 0x33F9, + 0x33FA, + 0x33FB, + 0x33FC, + 0x33FD, + 0x33FE, + 0x33FF, + 0x3400, + 0xA48D, + 0xA490, + 0xA4C7, + 0xA4D0, + 0xA62C, + 0xA640, + 0xA641, + 0xA642, + 0xA643, + 0xA644, + 0xA645, + 0xA646, + 0xA647, + 0xA648, + 0xA649, + 0xA64A, + 0xA64B, + 0xA64C, + 0xA64D, + 0xA64E, + 0xA64F, + 0xA650, + 0xA651, + 0xA652, + 0xA653, + 0xA654, + 0xA655, + 0xA656, + 0xA657, + 0xA658, + 0xA659, + 0xA65A, + 0xA65B, + 0xA65C, + 0xA65D, + 0xA65E, + 0xA65F, + 0xA660, + 0xA661, + 0xA662, + 0xA663, + 0xA664, + 0xA665, + 0xA666, + 0xA667, + 0xA668, + 0xA669, + 0xA66A, + 0xA66B, + 0xA66C, + 0xA66D, + 0xA680, + 0xA681, + 0xA682, + 0xA683, + 0xA684, + 0xA685, + 0xA686, + 0xA687, + 0xA688, + 0xA689, + 0xA68A, + 0xA68B, + 0xA68C, + 0xA68D, + 0xA68E, + 0xA68F, + 0xA690, + 0xA691, + 0xA692, + 0xA693, + 0xA694, + 0xA695, + 0xA696, + 0xA697, + 0xA698, + 0xA699, + 0xA69A, + 0xA69B, + 0xA69C, + 0xA69D, + 0xA69E, + 0xA6F8, + 0xA700, + 0xA722, + 0xA723, + 0xA724, + 0xA725, + 0xA726, + 0xA727, + 0xA728, + 0xA729, + 0xA72A, + 0xA72B, + 0xA72C, + 0xA72D, + 0xA72E, + 0xA72F, + 0xA732, + 0xA733, + 0xA734, + 0xA735, + 0xA736, + 0xA737, + 0xA738, + 0xA739, + 0xA73A, + 0xA73B, + 0xA73C, + 0xA73D, + 0xA73E, + 0xA73F, + 0xA740, + 0xA741, + 0xA742, + 0xA743, + 0xA744, + 0xA745, + 0xA746, + 0xA747, + 0xA748, + 0xA749, + 0xA74A, + 0xA74B, + 0xA74C, + 0xA74D, + 0xA74E, + 0xA74F, + 0xA750, + 0xA751, + 0xA752, + 0xA753, + 0xA754, + 0xA755, + 0xA756, + 0xA757, + 0xA758, + 0xA759, + 0xA75A, + 0xA75B, + 0xA75C, + 0xA75D, + 0xA75E, + 0xA75F, + 0xA760, + 0xA761, + 0xA762, + 0xA763, + 0xA764, + 0xA765, + 0xA766, + 0xA767, + 0xA768, + 0xA769, + 0xA76A, + 0xA76B, + 0xA76C, + 0xA76D, + 0xA76E, + 0xA76F, + 0xA770, + 0xA771, + 0xA779, + 0xA77A, + 0xA77B, + 0xA77C, + 0xA77D, + 0xA77E, + 0xA77F, + 0xA780, + 0xA781, + 0xA782, + 0xA783, + 0xA784, + 0xA785, + 0xA786, + 0xA787, + 0xA78B, + 0xA78C, + 0xA78D, + 0xA78E, + 0xA790, + 0xA791, + 0xA792, + 0xA793, + 0xA796, + 0xA797, + 0xA798, + 0xA799, + 0xA79A, + 0xA79B, + 0xA79C, + 0xA79D, + 0xA79E, + 0xA79F, + 0xA7A0, + 0xA7A1, + 0xA7A2, + 0xA7A3, + 0xA7A4, + 0xA7A5, + 0xA7A6, + 0xA7A7, + 0xA7A8, + 0xA7A9, + 0xA7AA, + 0xA7AB, + 0xA7AC, + 0xA7AD, + 0xA7AE, + 0xA7AF, + 0xA7B0, + 0xA7B1, + 0xA7B2, + 0xA7B3, + 0xA7B4, + 0xA7B5, + 0xA7B6, + 0xA7B7, + 0xA7B8, + 0xA7B9, + 0xA7BA, + 0xA7BB, + 0xA7BC, + 0xA7BD, + 0xA7BE, + 0xA7BF, + 0xA7C0, + 0xA7C1, + 0xA7C2, + 0xA7C3, + 0xA7C4, + 0xA7C5, + 0xA7C6, + 0xA7C7, + 0xA7C8, + 0xA7C9, + 0xA7CA, + 0xA7CB, + 0xA7CC, + 0xA7CD, + 0xA7CE, + 0xA7CF, + 0xA7D0, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, + 0xA7DB, + 0xA7DC, + 0xA7DD, + 0xA7F1, + 0xA7F2, + 0xA7F3, + 0xA7F4, + 0xA7F5, + 0xA7F6, + 0xA7F8, + 0xA7F9, + 0xA7FA, + 0xA82D, + 0xA830, + 0xA83A, + 0xA840, + 0xA878, + 0xA880, + 0xA8C6, + 0xA8CE, + 0xA8DA, + 0xA8E0, + 0xA954, + 0xA95F, + 0xA97D, + 0xA980, + 0xA9CE, + 0xA9CF, + 0xA9DA, + 0xA9DE, + 0xA9FF, + 0xAA00, + 0xAA37, + 0xAA40, + 0xAA4E, + 0xAA50, + 0xAA5A, + 0xAA5C, + 0xAAC3, + 0xAADB, + 0xAAF7, + 0xAB01, + 0xAB07, + 0xAB09, + 0xAB0F, + 0xAB11, + 0xAB17, + 0xAB20, + 0xAB27, + 0xAB28, + 0xAB2F, + 0xAB30, + 0xAB5C, + 0xAB5D, + 0xAB5E, + 0xAB5F, + 0xAB60, + 0xAB69, + 0xAB6A, + 0xAB6C, + 0xAB70, + 0xAB71, + 0xAB72, + 0xAB73, + 0xAB74, + 0xAB75, + 0xAB76, + 0xAB77, + 0xAB78, + 0xAB79, + 0xAB7A, + 0xAB7B, + 0xAB7C, + 0xAB7D, + 0xAB7E, + 0xAB7F, + 0xAB80, + 0xAB81, + 0xAB82, + 0xAB83, + 0xAB84, + 0xAB85, + 0xAB86, + 0xAB87, + 0xAB88, + 0xAB89, + 0xAB8A, + 0xAB8B, + 0xAB8C, + 0xAB8D, + 0xAB8E, + 0xAB8F, + 0xAB90, + 0xAB91, + 0xAB92, + 0xAB93, + 0xAB94, + 0xAB95, + 0xAB96, + 0xAB97, + 0xAB98, + 0xAB99, + 0xAB9A, + 0xAB9B, + 0xAB9C, + 0xAB9D, + 0xAB9E, + 0xAB9F, + 0xABA0, + 0xABA1, + 0xABA2, + 0xABA3, + 0xABA4, + 0xABA5, + 0xABA6, + 0xABA7, + 0xABA8, + 0xABA9, + 0xABAA, + 0xABAB, + 0xABAC, + 0xABAD, + 0xABAE, + 0xABAF, + 0xABB0, + 0xABB1, + 0xABB2, + 0xABB3, + 0xABB4, + 0xABB5, + 0xABB6, + 0xABB7, + 0xABB8, + 0xABB9, + 0xABBA, + 0xABBB, + 0xABBC, + 0xABBD, + 0xABBE, + 0xABBF, + 0xABC0, + 0xABEE, + 0xABF0, + 0xABFA, + 0xAC00, + 0xD7A4, + 0xD7B0, + 0xD7C7, + 0xD7CB, + 0xD7FC, + 0xF900, + 0xF901, + 0xF902, + 0xF903, + 0xF904, + 0xF905, + 0xF906, + 0xF907, + 0xF909, + 0xF90A, + 0xF90B, + 0xF90C, + 0xF90D, + 0xF90E, + 0xF90F, + 0xF910, + 0xF911, + 0xF912, + 0xF913, + 0xF914, + 0xF915, + 0xF916, + 0xF917, + 0xF918, + 0xF919, + 0xF91A, + 0xF91B, + 0xF91C, + 0xF91D, + 0xF91E, + 0xF91F, + 0xF920, + 0xF921, + 0xF922, + 0xF923, + 0xF924, + 0xF925, + 0xF926, + 0xF927, + 0xF928, + 0xF929, + 0xF92A, + 0xF92B, + 0xF92C, + 0xF92D, + 0xF92E, + 0xF92F, + 0xF930, + 0xF931, + 0xF932, + 0xF933, + 0xF934, + 0xF935, + 0xF936, + 0xF937, + 0xF938, + 0xF939, + 0xF93A, + 0xF93B, + 0xF93C, + 0xF93D, + 0xF93E, + 0xF93F, + 0xF940, + 0xF941, + 0xF942, + 0xF943, + 0xF944, + 0xF945, + 0xF946, + 0xF947, + 0xF948, + 0xF949, + 0xF94A, + 0xF94B, + 0xF94C, + 0xF94D, + 0xF94E, + 0xF94F, + 0xF950, + 0xF951, + 0xF952, + 0xF953, + 0xF954, + 0xF955, + 0xF956, + 0xF957, + 0xF958, + 0xF959, + 0xF95A, + 0xF95B, + 0xF95C, + 0xF95D, + 0xF95E, + 0xF95F, + 0xF960, + 0xF961, + 0xF962, + 0xF963, + 0xF964, + 0xF965, + 0xF966, + 0xF967, + 0xF968, + 0xF969, + 0xF96A, + 0xF96B, + 0xF96C, + 0xF96D, + 0xF96E, + 0xF96F, + 0xF970, + 0xF971, + 0xF972, + 0xF973, + 0xF974, + 0xF975, + 0xF976, + 0xF977, + 0xF978, + 0xF979, + 0xF97A, + 0xF97B, + 0xF97C, + 0xF97D, + 0xF97E, + 0xF97F, + 0xF980, + 0xF981, + 0xF982, + 0xF983, + 0xF984, + 0xF985, + 0xF986, + 0xF987, + 0xF988, + 0xF989, + 0xF98A, + 0xF98B, + 0xF98C, + 0xF98D, + 0xF98E, + 0xF98F, + 0xF990, + 0xF991, + 0xF992, + 0xF993, + 0xF994, + 0xF995, + 0xF996, + 0xF997, + 0xF998, + 0xF999, + 0xF99A, + 0xF99B, + 0xF99C, + 0xF99D, + 0xF99E, + 0xF99F, + 0xF9A0, + 0xF9A1, + 0xF9A2, + 0xF9A3, + 0xF9A4, + 0xF9A5, + 0xF9A6, + 0xF9A7, + 0xF9A8, + 0xF9A9, + 0xF9AA, + 0xF9AB, + 0xF9AC, + 0xF9AD, + 0xF9AE, + 0xF9AF, + 0xF9B0, + 0xF9B1, + 0xF9B2, + 0xF9B3, + 0xF9B4, + 0xF9B5, + 0xF9B6, + 0xF9B7, + 0xF9B8, + 0xF9B9, + 0xF9BA, + 0xF9BB, + 0xF9BC, + 0xF9BD, + 0xF9BE, + 0xF9BF, + 0xF9C0, + 0xF9C1, + 0xF9C2, + 0xF9C3, + 0xF9C4, + 0xF9C5, + 0xF9C6, + 0xF9C7, + 0xF9C8, + 0xF9C9, + 0xF9CA, + 0xF9CB, + 0xF9CC, + 0xF9CD, + 0xF9CE, + 0xF9CF, + 0xF9D0, + 0xF9D1, + 0xF9D2, + 0xF9D3, + 0xF9D4, + 0xF9D5, + 0xF9D6, + 0xF9D7, + 0xF9D8, + 0xF9D9, + 0xF9DA, + 0xF9DB, + 0xF9DC, + 0xF9DD, + 0xF9DE, + 0xF9DF, + 0xF9E0, + 0xF9E1, + 0xF9E2, + 0xF9E3, + 0xF9E4, + 0xF9E5, + 0xF9E6, + 0xF9E7, + 0xF9E8, + 0xF9E9, + 0xF9EA, + 0xF9EB, + 0xF9EC, + 0xF9ED, + 0xF9EE, + 0xF9EF, + 0xF9F0, + 0xF9F1, + 0xF9F2, + 0xF9F3, + 0xF9F4, + 0xF9F5, + 0xF9F6, + 0xF9F7, + 0xF9F8, + 0xF9F9, + 0xF9FA, + 0xF9FB, + 0xF9FC, + 0xF9FD, + 0xF9FE, + 0xF9FF, + 0xFA00, + 0xFA01, + 0xFA02, + 0xFA03, + 0xFA04, + 0xFA05, + 0xFA06, + 0xFA07, + 0xFA08, + 0xFA09, + 0xFA0A, + 0xFA0B, + 0xFA0C, + 0xFA0D, + 0xFA0E, + 0xFA10, + 0xFA11, + 0xFA12, + 0xFA13, + 0xFA15, + 0xFA16, + 0xFA17, + 0xFA18, + 0xFA19, + 0xFA1A, + 0xFA1B, + 0xFA1C, + 0xFA1D, + 0xFA1E, + 0xFA1F, + 0xFA20, + 0xFA21, + 0xFA22, + 0xFA23, + 0xFA25, + 0xFA26, + 0xFA27, + 0xFA2A, + 0xFA2B, + 0xFA2C, + 0xFA2D, + 0xFA2E, + 0xFA2F, + 0xFA30, + 0xFA31, + 0xFA32, + 0xFA33, + 0xFA34, + 0xFA35, + 0xFA36, + 0xFA37, + 0xFA38, + 0xFA39, + 0xFA3A, + 0xFA3B, + 0xFA3C, + 0xFA3D, + 0xFA3E, + 0xFA3F, + 0xFA40, + 0xFA41, + 0xFA42, + 0xFA43, + 0xFA44, + 0xFA45, + 0xFA46, + 0xFA47, + 0xFA48, + 0xFA49, + 0xFA4A, + 0xFA4B, + 0xFA4C, + 0xFA4D, + 0xFA4E, + 0xFA4F, + 0xFA50, + 0xFA51, + 0xFA52, + 0xFA53, + 0xFA54, + 0xFA55, + 0xFA56, + 0xFA57, + 0xFA58, + 0xFA59, + 0xFA5A, + 0xFA5B, + 0xFA5C, + 0xFA5D, + 0xFA5F, + 0xFA60, + 0xFA61, + 0xFA62, + 0xFA63, + 0xFA64, + 0xFA65, + 0xFA66, + 0xFA67, + 0xFA68, + 0xFA69, + 0xFA6A, + 0xFA6B, + 0xFA6C, + 0xFA6D, + 0xFA6E, + 0xFA70, + 0xFA71, + 0xFA72, + 0xFA73, + 0xFA74, + 0xFA75, + 0xFA76, + 0xFA77, + 0xFA78, + 0xFA79, + 0xFA7A, + 0xFA7B, + 0xFA7C, + 0xFA7D, + 0xFA7E, + 0xFA7F, + 0xFA80, + 0xFA81, + 0xFA82, + 0xFA83, + 0xFA84, + 0xFA85, + 0xFA86, + 0xFA87, + 0xFA88, + 0xFA89, + 0xFA8A, + 0xFA8B, + 0xFA8C, + 0xFA8D, + 0xFA8E, + 0xFA8F, + 0xFA90, + 0xFA91, + 0xFA92, + 0xFA93, + 0xFA94, + 0xFA95, + 0xFA96, + 0xFA97, + 0xFA98, + 0xFA99, + 0xFA9A, + 0xFA9B, + 0xFA9C, + 0xFA9D, + 0xFA9E, + 0xFA9F, + 0xFAA0, + 0xFAA1, + 0xFAA2, + 0xFAA3, + 0xFAA4, + 0xFAA5, + 0xFAA6, + 0xFAA7, + 0xFAA8, + 0xFAA9, + 0xFAAA, + 0xFAAB, + 0xFAAC, + 0xFAAD, + 0xFAAE, + 0xFAAF, + 0xFAB0, + 0xFAB1, + 0xFAB2, + 0xFAB3, + 0xFAB4, + 0xFAB5, + 0xFAB6, + 0xFAB7, + 0xFAB8, + 0xFAB9, + 0xFABA, + 0xFABB, + 0xFABC, + 0xFABD, + 0xFABE, + 0xFABF, + 0xFAC0, + 0xFAC1, + 0xFAC2, + 0xFAC3, + 0xFAC4, + 0xFAC5, + 0xFAC6, + 0xFAC7, + 0xFAC8, + 0xFAC9, + 0xFACA, + 0xFACB, + 0xFACC, + 0xFACD, + 0xFACE, + 0xFACF, + 0xFAD0, + 0xFAD1, + 0xFAD2, + 0xFAD3, + 0xFAD4, + 0xFAD5, + 0xFAD6, + 0xFAD7, + 0xFAD8, + 0xFAD9, + 0xFADA, + 0xFB00, + 0xFB01, + 0xFB02, + 0xFB03, + 0xFB04, + 0xFB05, + 0xFB07, + 0xFB13, + 0xFB14, + 0xFB15, + 0xFB16, + 0xFB17, + 0xFB18, + 0xFB1D, + 0xFB1E, + 0xFB1F, + 0xFB20, + 0xFB21, + 0xFB22, + 0xFB23, + 0xFB24, + 0xFB25, + 0xFB26, + 0xFB27, + 0xFB28, + 0xFB29, + 0xFB2A, + 0xFB2B, + 0xFB2C, + 0xFB2D, + 0xFB2E, + 0xFB2F, + 0xFB30, + 0xFB31, + 0xFB32, + 0xFB33, + 0xFB34, + 0xFB35, + 0xFB36, + 0xFB37, + 0xFB38, + 0xFB39, + 0xFB3A, + 0xFB3B, + 0xFB3C, + 0xFB3D, + 0xFB3E, + 0xFB3F, + 0xFB40, + 0xFB41, + 0xFB42, + 0xFB43, + 0xFB44, + 0xFB45, + 0xFB46, + 0xFB47, + 0xFB48, + 0xFB49, + 0xFB4A, + 0xFB4B, + 0xFB4C, + 0xFB4D, + 0xFB4E, + 0xFB4F, + 0xFB50, + 0xFB52, + 0xFB56, + 0xFB5A, + 0xFB5E, + 0xFB62, + 0xFB66, + 0xFB6A, + 0xFB6E, + 0xFB72, + 0xFB76, + 0xFB7A, + 0xFB7E, + 0xFB82, + 0xFB84, + 0xFB86, + 0xFB88, + 0xFB8A, + 0xFB8C, + 0xFB8E, + 0xFB92, + 0xFB96, + 0xFB9A, + 0xFB9E, + 0xFBA0, + 0xFBA4, + 0xFBA6, + 0xFBAA, + 0xFBAE, + 0xFBB0, + 0xFBB2, + 0xFBD3, + 0xFBD7, + 0xFBD9, + 0xFBDB, + 0xFBDD, + 0xFBDE, + 0xFBE0, + 0xFBE2, + 0xFBE4, + 0xFBE8, + 0xFBEA, + 0xFBEC, + 0xFBEE, + 0xFBF0, + 0xFBF2, + 0xFBF4, + 0xFBF6, + 0xFBF9, + 0xFBFC, + 0xFC00, + 0xFC01, + 0xFC02, + 0xFC03, + 0xFC04, + 0xFC05, + 0xFC06, + 0xFC07, + 0xFC08, + 0xFC09, + 0xFC0A, + 0xFC0B, + 0xFC0C, + 0xFC0D, + 0xFC0E, + 0xFC0F, + 0xFC10, + 0xFC11, + 0xFC12, + 0xFC13, + 0xFC14, + 0xFC15, + 0xFC16, + 0xFC17, + 0xFC18, + 0xFC19, + 0xFC1A, + 0xFC1B, + 0xFC1C, + 0xFC1D, + 0xFC1E, + 0xFC1F, + 0xFC20, + 0xFC21, + 0xFC22, + 0xFC23, + 0xFC24, + 0xFC25, + 0xFC26, + 0xFC27, + 0xFC28, + 0xFC29, + 0xFC2A, + 0xFC2B, + 0xFC2C, + 0xFC2D, + 0xFC2E, + 0xFC2F, + 0xFC30, + 0xFC31, + 0xFC32, + 0xFC33, + 0xFC34, + 0xFC35, + 0xFC36, + 0xFC37, + 0xFC38, + 0xFC39, + 0xFC3A, + 0xFC3B, + 0xFC3C, + 0xFC3D, + 0xFC3E, + 0xFC3F, + 0xFC40, + 0xFC41, + 0xFC42, + 0xFC43, + 0xFC44, + 0xFC45, + 0xFC46, + 0xFC47, + 0xFC48, + 0xFC49, + 0xFC4A, + 0xFC4B, + 0xFC4C, + 0xFC4D, + 0xFC4E, + 0xFC4F, + 0xFC50, + 0xFC51, + 0xFC52, + 0xFC53, + 0xFC54, + 0xFC55, + 0xFC56, + 0xFC57, + 0xFC58, + 0xFC59, + 0xFC5A, + 0xFC5B, + 0xFC5C, + 0xFC5D, + 0xFC5E, + 0xFC5F, + 0xFC60, + 0xFC61, + 0xFC62, + 0xFC63, + 0xFC64, + 0xFC65, + 0xFC66, + 0xFC67, + 0xFC68, + 0xFC69, + 0xFC6A, + 0xFC6B, + 0xFC6C, + 0xFC6D, + 0xFC6E, + 0xFC6F, + 0xFC70, + 0xFC71, + 0xFC72, + 0xFC73, + 0xFC74, + 0xFC75, + 0xFC76, + 0xFC77, + 0xFC78, + 0xFC79, + 0xFC7A, + 0xFC7B, + 0xFC7C, + 0xFC7D, + 0xFC7E, + 0xFC7F, + 0xFC80, + 0xFC81, + 0xFC82, + 0xFC83, + 0xFC84, + 0xFC85, + 0xFC86, + 0xFC87, + 0xFC88, + 0xFC89, + 0xFC8A, + 0xFC8B, + 0xFC8C, + 0xFC8D, + 0xFC8E, + 0xFC8F, + 0xFC90, + 0xFC91, + 0xFC92, + 0xFC93, + 0xFC94, + 0xFC95, + 0xFC96, + 0xFC97, + 0xFC98, + 0xFC99, + 0xFC9A, + 0xFC9B, + 0xFC9C, + 0xFC9D, + 0xFC9E, + 0xFC9F, + 0xFCA0, + 0xFCA1, + 0xFCA2, + 0xFCA3, + 0xFCA4, + 0xFCA5, + 0xFCA6, + 0xFCA7, + 0xFCA8, + 0xFCA9, + 0xFCAA, + 0xFCAB, + 0xFCAC, + 0xFCAD, + 0xFCAE, + 0xFCAF, + 0xFCB0, + 0xFCB1, + 0xFCB2, + 0xFCB3, + 0xFCB4, + 0xFCB5, + 0xFCB6, + 0xFCB7, + 0xFCB8, + 0xFCB9, + 0xFCBA, + 0xFCBB, + 0xFCBC, + 0xFCBD, + 0xFCBE, + 0xFCBF, + 0xFCC0, + 0xFCC1, + 0xFCC2, + 0xFCC3, + 0xFCC4, + 0xFCC5, + 0xFCC6, + 0xFCC7, + 0xFCC8, + 0xFCC9, + 0xFCCA, + 0xFCCB, + 0xFCCC, + 0xFCCD, + 0xFCCE, + 0xFCCF, + 0xFCD0, + 0xFCD1, + 0xFCD2, + 0xFCD3, + 0xFCD4, + 0xFCD5, + 0xFCD6, + 0xFCD7, + 0xFCD8, + 0xFCD9, + 0xFCDA, + 0xFCDB, + 0xFCDC, + 0xFCDD, + 0xFCDE, + 0xFCDF, + 0xFCE0, + 0xFCE1, + 0xFCE2, + 0xFCE3, + 0xFCE4, + 0xFCE5, + 0xFCE6, + 0xFCE7, + 0xFCE8, + 0xFCE9, + 0xFCEA, + 0xFCEB, + 0xFCEC, + 0xFCED, + 0xFCEE, + 0xFCEF, + 0xFCF0, + 0xFCF1, + 0xFCF2, + 0xFCF3, + 0xFCF4, + 0xFCF5, + 0xFCF6, + 0xFCF7, + 0xFCF8, + 0xFCF9, + 0xFCFA, + 0xFCFB, + 0xFCFC, + 0xFCFD, + 0xFCFE, + 0xFCFF, + 0xFD00, + 0xFD01, + 0xFD02, + 0xFD03, + 0xFD04, + 0xFD05, + 0xFD06, + 0xFD07, + 0xFD08, + 0xFD09, + 0xFD0A, + 0xFD0B, + 0xFD0C, + 0xFD0D, + 0xFD0E, + 0xFD0F, + 0xFD10, + 0xFD11, + 0xFD12, + 0xFD13, + 0xFD14, + 0xFD15, + 0xFD16, + 0xFD17, + 0xFD18, + 0xFD19, + 0xFD1A, + 0xFD1B, + 0xFD1C, + 0xFD1D, + 0xFD1E, + 0xFD1F, + 0xFD20, + 0xFD21, + 0xFD22, + 0xFD23, + 0xFD24, + 0xFD25, + 0xFD26, + 0xFD27, + 0xFD28, + 0xFD29, + 0xFD2A, + 0xFD2B, + 0xFD2C, + 0xFD2D, + 0xFD2E, + 0xFD2F, + 0xFD30, + 0xFD31, + 0xFD32, + 0xFD33, + 0xFD34, + 0xFD35, + 0xFD36, + 0xFD37, + 0xFD38, + 0xFD39, + 0xFD3A, + 0xFD3B, + 0xFD3C, + 0xFD3E, + 0xFD50, + 0xFD51, + 0xFD53, + 0xFD54, + 0xFD55, + 0xFD56, + 0xFD57, + 0xFD58, + 0xFD5A, + 0xFD5B, + 0xFD5C, + 0xFD5D, + 0xFD5E, + 0xFD5F, + 0xFD61, + 0xFD62, + 0xFD64, + 0xFD66, + 0xFD67, + 0xFD69, + 0xFD6A, + 0xFD6C, + 0xFD6E, + 0xFD6F, + 0xFD71, + 0xFD73, + 0xFD74, + 0xFD75, + 0xFD76, + 0xFD78, + 0xFD79, + 0xFD7A, + 0xFD7B, + 0xFD7C, + 0xFD7E, + 0xFD7F, + 0xFD80, + 0xFD81, + 0xFD82, + 0xFD83, + 0xFD85, + 0xFD87, + 0xFD89, + 0xFD8A, + 0xFD8B, + 0xFD8C, + 0xFD8D, + 0xFD8E, + 0xFD8F, + 0xFD90, + 0xFD92, + 0xFD93, + 0xFD94, + 0xFD95, + 0xFD96, + 0xFD97, + 0xFD99, + 0xFD9A, + 0xFD9B, + 0xFD9C, + 0xFD9E, + 0xFD9F, + 0xFDA0, + 0xFDA1, + 0xFDA2, + 0xFDA3, + 0xFDA4, + 0xFDA5, + 0xFDA6, + 0xFDA7, + 0xFDA8, + 0xFDA9, + 0xFDAA, + 0xFDAB, + 0xFDAC, + 0xFDAD, + 0xFDAE, + 0xFDAF, + 0xFDB0, + 0xFDB1, + 0xFDB2, + 0xFDB3, + 0xFDB4, + 0xFDB5, + 0xFDB6, + 0xFDB7, + 0xFDB8, + 0xFDB9, + 0xFDBA, + 0xFDBB, + 0xFDBC, + 0xFDBD, + 0xFDBE, + 0xFDBF, + 0xFDC0, + 0xFDC1, + 0xFDC2, + 0xFDC3, + 0xFDC4, + 0xFDC5, + 0xFDC6, + 0xFDC7, + 0xFDC8, + 0xFDD0, + 0xFDF0, + 0xFDF1, + 0xFDF2, + 0xFDF3, + 0xFDF4, + 0xFDF5, + 0xFDF6, + 0xFDF7, + 0xFDF8, + 0xFDF9, + 0xFDFA, + 0xFDFB, + 0xFDFC, + 0xFDFD, + 0xFE00, + 0xFE10, + 0xFE11, + 0xFE12, + 0xFE13, + 0xFE14, + 0xFE15, + 0xFE16, + 0xFE17, + 0xFE18, + 0xFE19, + 0xFE20, + 0xFE30, + 0xFE31, + 0xFE32, + 0xFE33, + 0xFE35, + 0xFE36, + 0xFE37, + 0xFE38, + 0xFE39, + 0xFE3A, + 0xFE3B, + 0xFE3C, + 0xFE3D, + 0xFE3E, + 0xFE3F, + 0xFE40, + 0xFE41, + 0xFE42, + 0xFE43, + 0xFE44, + 0xFE45, + 0xFE47, + 0xFE48, + 0xFE49, + 0xFE4D, + 0xFE50, + 0xFE51, + 0xFE52, + 0xFE54, + 0xFE55, + 0xFE56, + 0xFE57, + 0xFE58, + 0xFE59, + 0xFE5A, + 0xFE5B, + 0xFE5C, + 0xFE5D, + 0xFE5E, + 0xFE5F, + 0xFE60, + 0xFE61, + 0xFE62, + 0xFE63, + 0xFE64, + 0xFE65, + 0xFE66, + 0xFE67, + 0xFE68, + 0xFE69, + 0xFE6A, + 0xFE6B, + 0xFE6C, + 0xFE70, + 0xFE71, + 0xFE72, + 0xFE73, + 0xFE74, + 0xFE75, + 0xFE76, + 0xFE77, + 0xFE78, + 0xFE79, + 0xFE7A, + 0xFE7B, + 0xFE7C, + 0xFE7D, + 0xFE7E, + 0xFE7F, + 0xFE80, + 0xFE81, + 0xFE83, + 0xFE85, + 0xFE87, + 0xFE89, + 0xFE8D, + 0xFE8F, + 0xFE93, + 0xFE95, + 0xFE99, + 0xFE9D, + 0xFEA1, + 0xFEA5, + 0xFEA9, + 0xFEAB, + 0xFEAD, + 0xFEAF, + 0xFEB1, + 0xFEB5, + 0xFEB9, + 0xFEBD, + 0xFEC1, + 0xFEC5, + 0xFEC9, + 0xFECD, + 0xFED1, + 0xFED5, + 0xFED9, + 0xFEDD, + 0xFEE1, + 0xFEE5, + 0xFEE9, + 0xFEED, + 0xFEEF, + 0xFEF1, + 0xFEF5, + 0xFEF7, + 0xFEF9, + 0xFEFB, + 0xFEFD, + 0xFEFF, + 0xFF00, + 0xFF01, + 0xFF02, + 0xFF03, + 0xFF04, + 0xFF05, + 0xFF06, + 0xFF07, + 0xFF08, + 0xFF09, + 0xFF0A, + 0xFF0B, + 0xFF0C, + 0xFF0D, + 0xFF0E, + 0xFF0F, + 0xFF10, + 0xFF11, + 0xFF12, + 0xFF13, + 0xFF14, + 0xFF15, + 0xFF16, + 0xFF17, + 0xFF18, + 0xFF19, + 0xFF1A, + 0xFF1B, + 0xFF1C, + 0xFF1D, + 0xFF1E, + 0xFF1F, + 0xFF20, + 0xFF21, + 0xFF22, + 0xFF23, + 0xFF24, + 0xFF25, + 0xFF26, + 0xFF27, + 0xFF28, + 0xFF29, + 0xFF2A, + 0xFF2B, + 0xFF2C, + 0xFF2D, + 0xFF2E, + 0xFF2F, + 0xFF30, + 0xFF31, + 0xFF32, + 0xFF33, + 0xFF34, + 0xFF35, + 0xFF36, + 0xFF37, + 0xFF38, + 0xFF39, + 0xFF3A, + 0xFF3B, + 0xFF3C, + 0xFF3D, + 0xFF3E, + 0xFF3F, + 0xFF40, + 0xFF41, + 0xFF42, + 0xFF43, + 0xFF44, + 0xFF45, + 0xFF46, + 0xFF47, + 0xFF48, + 0xFF49, + 0xFF4A, + 0xFF4B, + 0xFF4C, + 0xFF4D, + 0xFF4E, + 0xFF4F, + 0xFF50, + 0xFF51, + 0xFF52, + 0xFF53, + 0xFF54, + 0xFF55, + 0xFF56, + 0xFF57, + 0xFF58, + 0xFF59, + 0xFF5A, + 0xFF5B, + 0xFF5C, + 0xFF5D, + 0xFF5E, + 0xFF5F, + 0xFF60, + 0xFF61, + 0xFF62, + 0xFF63, + 0xFF64, + 0xFF65, + 0xFF66, + 0xFF67, + 0xFF68, + 0xFF69, + 0xFF6A, + 0xFF6B, + 0xFF6C, + 0xFF6D, + 0xFF6E, + 0xFF6F, + 0xFF70, + 0xFF71, + 0xFF72, + 0xFF73, + 0xFF74, + 0xFF75, + 0xFF76, + 0xFF77, + 0xFF78, + 0xFF79, + 0xFF7A, + 0xFF7B, + 0xFF7C, + 0xFF7D, + 0xFF7E, + 0xFF7F, + 0xFF80, + 0xFF81, + 0xFF82, + 0xFF83, + 0xFF84, + 0xFF85, + 0xFF86, + 0xFF87, + 0xFF88, + 0xFF89, + 0xFF8A, + 0xFF8B, + 0xFF8C, + 0xFF8D, + 0xFF8E, + 0xFF8F, + 0xFF90, + 0xFF91, + 0xFF92, + 0xFF93, + 0xFF94, + 0xFF95, + 0xFF96, + 0xFF97, + 0xFF98, + 0xFF99, + 0xFF9A, + 0xFF9B, + 0xFF9C, + 0xFF9D, + 0xFF9E, + 0xFF9F, + 0xFFA0, + 0xFFA1, + 0xFFA2, + 0xFFA3, + 0xFFA4, + 0xFFA5, + 0xFFA6, + 0xFFA7, + 0xFFA8, + 0xFFA9, + 0xFFAA, + 0xFFAB, + 0xFFAC, + 0xFFAD, + 0xFFAE, + 0xFFAF, + 0xFFB0, + 0xFFB1, + 0xFFB2, + 0xFFB3, + 0xFFB4, + 0xFFB5, + 0xFFB6, + 0xFFB7, + 0xFFB8, + 0xFFB9, + 0xFFBA, + 0xFFBB, + 0xFFBC, + 0xFFBD, + 0xFFBE, + 0xFFBF, + 0xFFC2, + 0xFFC3, + 0xFFC4, + 0xFFC5, + 0xFFC6, + 0xFFC7, + 0xFFC8, + 0xFFCA, + 0xFFCB, + 0xFFCC, + 0xFFCD, + 0xFFCE, + 0xFFCF, + 0xFFD0, + 0xFFD2, + 0xFFD3, + 0xFFD4, + 0xFFD5, + 0xFFD6, + 0xFFD7, + 0xFFD8, + 0xFFDA, + 0xFFDB, + 0xFFDC, + 0xFFDD, + 0xFFE0, + 0xFFE1, + 0xFFE2, + 0xFFE3, + 0xFFE4, + 0xFFE5, + 0xFFE6, + 0xFFE7, + 0xFFE8, + 0xFFE9, + 0xFFEA, + 0xFFEB, + 0xFFEC, + 0xFFED, + 0xFFEE, + 0xFFEF, + 0x10000, + 0x1000C, + 0x1000D, + 0x10027, + 0x10028, + 0x1003B, + 0x1003C, + 0x1003E, + 0x1003F, + 0x1004E, + 0x10050, + 0x1005E, + 0x10080, + 0x100FB, + 0x10100, + 0x10103, + 0x10107, + 0x10134, + 0x10137, + 0x1018F, + 0x10190, + 0x1019D, + 0x101A0, + 0x101A1, + 0x101D0, + 0x101FE, + 0x10280, + 0x1029D, + 0x102A0, + 0x102D1, + 0x102E0, + 0x102FC, + 0x10300, + 0x10324, + 0x1032D, + 0x1034B, + 0x10350, + 0x1037B, + 0x10380, + 0x1039E, + 0x1039F, + 0x103C4, + 0x103C8, + 0x103D6, + 0x10400, + 0x10401, + 0x10402, + 0x10403, + 0x10404, + 0x10405, + 0x10406, + 0x10407, + 0x10408, + 0x10409, + 0x1040A, + 0x1040B, + 0x1040C, + 0x1040D, + 0x1040E, + 0x1040F, + 0x10410, + 0x10411, + 0x10412, + 0x10413, + 0x10414, + 0x10415, + 0x10416, + 0x10417, + 0x10418, + 0x10419, + 0x1041A, + 0x1041B, + 0x1041C, + 0x1041D, + 0x1041E, + 0x1041F, + 0x10420, + 0x10421, + 0x10422, + 0x10423, + 0x10424, + 0x10425, + 0x10426, + 0x10427, + 0x10428, + 0x1049E, + 0x104A0, + 0x104AA, + 0x104B0, + 0x104B1, + 0x104B2, + 0x104B3, + 0x104B4, + 0x104B5, + 0x104B6, + 0x104B7, + 0x104B8, + 0x104B9, + 0x104BA, + 0x104BB, + 0x104BC, + 0x104BD, + 0x104BE, + 0x104BF, + 0x104C0, + 0x104C1, + 0x104C2, + 0x104C3, + 0x104C4, + 0x104C5, + 0x104C6, + 0x104C7, + 0x104C8, + 0x104C9, + 0x104CA, + 0x104CB, + 0x104CC, + 0x104CD, + 0x104CE, + 0x104CF, + 0x104D0, + 0x104D1, + 0x104D2, + 0x104D3, + 0x104D4, + 0x104D8, + 0x104FC, + 0x10500, + 0x10528, + 0x10530, + 0x10564, + 0x1056F, + 0x10570, + 0x10571, + 0x10572, + 0x10573, + 0x10574, + 0x10575, + 0x10576, + 0x10577, + 0x10578, + 0x10579, + 0x1057A, + 0x1057B, + 0x1057C, + 0x1057D, + 0x1057E, + 0x1057F, + 0x10580, + 0x10581, + 0x10582, + 0x10583, + 0x10584, + 0x10585, + 0x10586, + 0x10587, + 0x10588, + 0x10589, + 0x1058A, + 0x1058B, + 0x1058C, + 0x1058D, + 0x1058E, + 0x1058F, + 0x10590, + 0x10591, + 0x10592, + 0x10593, + 0x10594, + 0x10595, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x105C0, + 0x105F4, + 0x10600, + 0x10737, + 0x10740, + 0x10756, + 0x10760, + 0x10768, + 0x10780, + 0x10781, + 0x10782, + 0x10783, + 0x10784, + 0x10785, + 0x10786, + 0x10787, + 0x10788, + 0x10789, + 0x1078A, + 0x1078B, + 0x1078C, + 0x1078D, + 0x1078E, + 0x1078F, + 0x10790, + 0x10791, + 0x10792, + 0x10793, + 0x10794, + 0x10795, + 0x10796, + 0x10797, + 0x10798, + 0x10799, + 0x1079A, + 0x1079B, + 0x1079C, + 0x1079D, + 0x1079E, + 0x1079F, + 0x107A0, + 0x107A1, + 0x107A2, + 0x107A3, + 0x107A4, + 0x107A5, + 0x107A6, + 0x107A7, + 0x107A8, + 0x107A9, + 0x107AA, + 0x107AB, + 0x107AC, + 0x107AD, + 0x107AE, + 0x107AF, + 0x107B0, + 0x107B1, + 0x107B2, + 0x107B3, + 0x107B4, + 0x107B5, + 0x107B6, + 0x107B7, + 0x107B8, + 0x107B9, + 0x107BA, + 0x107BB, + 0x10800, + 0x10806, + 0x10808, + 0x10809, + 0x1080A, + 0x10836, + 0x10837, + 0x10839, + 0x1083C, + 0x1083D, + 0x1083F, + 0x10856, + 0x10857, + 0x1089F, + 0x108A7, + 0x108B0, + 0x108E0, + 0x108F3, + 0x108F4, + 0x108F6, + 0x108FB, + 0x1091C, + 0x1091F, + 0x1093A, + 0x1093F, + 0x1095A, + 0x10980, + 0x109B8, + 0x109BC, + 0x109D0, + 0x109D2, + 0x10A04, + 0x10A05, + 0x10A07, + 0x10A0C, + 0x10A14, + 0x10A15, + 0x10A18, + 0x10A19, + 0x10A36, + 0x10A38, + 0x10A3B, + 0x10A3F, + 0x10A49, + 0x10A50, + 0x10A59, + 0x10A60, + 0x10AA0, + 0x10AC0, + 0x10AE7, + 0x10AEB, + 0x10AF7, + 0x10B00, + 0x10B36, + 0x10B39, + 0x10B56, + 0x10B58, + 0x10B73, + 0x10B78, + 0x10B92, + 0x10B99, + 0x10B9D, + 0x10BA9, + 0x10BB0, + 0x10C00, + 0x10C49, + 0x10C80, + 0x10C81, + 0x10C82, + 0x10C83, + 0x10C84, + 0x10C85, + 0x10C86, + 0x10C87, + 0x10C88, + 0x10C89, + 0x10C8A, + 0x10C8B, + 0x10C8C, + 0x10C8D, + 0x10C8E, + 0x10C8F, + 0x10C90, + 0x10C91, + 0x10C92, + 0x10C93, + 0x10C94, + 0x10C95, + 0x10C96, + 0x10C97, + 0x10C98, + 0x10C99, + 0x10C9A, + 0x10C9B, + 0x10C9C, + 0x10C9D, + 0x10C9E, + 0x10C9F, + 0x10CA0, + 0x10CA1, + 0x10CA2, + 0x10CA3, + 0x10CA4, + 0x10CA5, + 0x10CA6, + 0x10CA7, + 0x10CA8, + 0x10CA9, + 0x10CAA, + 0x10CAB, + 0x10CAC, + 0x10CAD, + 0x10CAE, + 0x10CAF, + 0x10CB0, + 0x10CB1, + 0x10CB2, + 0x10CB3, + 0x10CC0, + 0x10CF3, + 0x10CFA, + 0x10D28, + 0x10D30, + 0x10D3A, + 0x10D40, + 0x10D50, + 0x10D51, + 0x10D52, + 0x10D53, + 0x10D54, + 0x10D55, + 0x10D56, + 0x10D57, + 0x10D58, + 0x10D59, + 0x10D5A, + 0x10D5B, + 0x10D5C, + 0x10D5D, + 0x10D5E, + 0x10D5F, + 0x10D60, + 0x10D61, + 0x10D62, + 0x10D63, + 0x10D64, + 0x10D65, + 0x10D66, + 0x10D69, + 0x10D86, + 0x10D8E, + 0x10D90, + 0x10E60, + 0x10E7F, + 0x10E80, + 0x10EAA, + 0x10EAB, + 0x10EAE, + 0x10EB0, + 0x10EB2, + 0x10EC2, + 0x10EC8, + 0x10ED0, + 0x10ED9, + 0x10EFA, + 0x10F28, + 0x10F30, + 0x10F5A, + 0x10F70, + 0x10F8A, + 0x10FB0, + 0x10FCC, + 0x10FE0, + 0x10FF7, + 0x11000, + 0x1104E, + 0x11052, + 0x11076, + 0x1107F, + 0x110BD, + 0x110BE, + 0x110C3, + 0x110D0, + 0x110E9, + 0x110F0, + 0x110FA, + 0x11100, + 0x11135, + 0x11136, + 0x11148, + 0x11150, + 0x11177, + 0x11180, + 0x111E0, + 0x111E1, + 0x111F5, + 0x11200, + 0x11212, + 0x11213, + 0x11242, + 0x11280, + 0x11287, + 0x11288, + 0x11289, + 0x1128A, + 0x1128E, + 0x1128F, + 0x1129E, + 0x1129F, + 0x112AA, + 0x112B0, + 0x112EB, + 0x112F0, + 0x112FA, + 0x11300, + 0x11304, + 0x11305, + 0x1130D, + 0x1130F, + 0x11311, + 0x11313, + 0x11329, + 0x1132A, + 0x11331, + 0x11332, + 0x11334, + 0x11335, + 0x1133A, + 0x1133B, + 0x11345, + 0x11347, + 0x11349, + 0x1134B, + 0x1134E, + 0x11350, + 0x11351, + 0x11357, + 0x11358, + 0x1135D, + 0x11364, + 0x11366, + 0x1136D, + 0x11370, + 0x11375, + 0x11380, + 0x1138A, + 0x1138B, + 0x1138C, + 0x1138E, + 0x1138F, + 0x11390, + 0x113B6, + 0x113B7, + 0x113C1, + 0x113C2, + 0x113C3, + 0x113C5, + 0x113C6, + 0x113C7, + 0x113CB, + 0x113CC, + 0x113D6, + 0x113D7, + 0x113D9, + 0x113E1, + 0x113E3, + 0x11400, + 0x1145C, + 0x1145D, + 0x11462, + 0x11480, + 0x114C8, + 0x114D0, + 0x114DA, + 0x11580, + 0x115B6, + 0x115B8, + 0x115DE, + 0x11600, + 0x11645, + 0x11650, + 0x1165A, + 0x11660, + 0x1166D, + 0x11680, + 0x116BA, + 0x116C0, + 0x116CA, + 0x116D0, + 0x116E4, + 0x11700, + 0x1171B, + 0x1171D, + 0x1172C, + 0x11730, + 0x11747, + 0x11800, + 0x1183C, + 0x118A0, + 0x118A1, + 0x118A2, + 0x118A3, + 0x118A4, + 0x118A5, + 0x118A6, + 0x118A7, + 0x118A8, + 0x118A9, + 0x118AA, + 0x118AB, + 0x118AC, + 0x118AD, + 0x118AE, + 0x118AF, + 0x118B0, + 0x118B1, + 0x118B2, + 0x118B3, + 0x118B4, + 0x118B5, + 0x118B6, + 0x118B7, + 0x118B8, + 0x118B9, + 0x118BA, + 0x118BB, + 0x118BC, + 0x118BD, + 0x118BE, + 0x118BF, + 0x118C0, + 0x118F3, + 0x118FF, + 0x11907, + 0x11909, + 0x1190A, + 0x1190C, + 0x11914, + 0x11915, + 0x11917, + 0x11918, + 0x11936, + 0x11937, + 0x11939, + 0x1193B, + 0x11947, + 0x11950, + 0x1195A, + 0x119A0, + 0x119A8, + 0x119AA, + 0x119D8, + 0x119DA, + 0x119E5, + 0x11A00, + 0x11A48, + 0x11A50, + 0x11AA3, + 0x11AB0, + 0x11AF9, + 0x11B00, + 0x11B0A, + 0x11B60, + 0x11B68, + 0x11BC0, + 0x11BE2, + 0x11BF0, + 0x11BFA, + 0x11C00, + 0x11C09, + 0x11C0A, + 0x11C37, + 0x11C38, + 0x11C46, + 0x11C50, + 0x11C6D, + 0x11C70, + 0x11C90, + 0x11C92, + 0x11CA8, + 0x11CA9, + 0x11CB7, + 0x11D00, + 0x11D07, + 0x11D08, + 0x11D0A, + 0x11D0B, + 0x11D37, + 0x11D3A, + 0x11D3B, + 0x11D3C, + 0x11D3E, + 0x11D3F, + 0x11D48, + 0x11D50, + 0x11D5A, + 0x11D60, + 0x11D66, + 0x11D67, + 0x11D69, + 0x11D6A, + 0x11D8F, + 0x11D90, + 0x11D92, + 0x11D93, + 0x11D99, + 0x11DA0, + 0x11DAA, + 0x11DB0, + 0x11DDC, + 0x11DE0, + 0x11DEA, + 0x11EE0, + 0x11EF9, + 0x11F00, + 0x11F11, + 0x11F12, + 0x11F3B, + 0x11F3E, + 0x11F5B, + 0x11FB0, + 0x11FB1, + 0x11FC0, + 0x11FF2, + 0x11FFF, + 0x1239A, + 0x12400, + 0x1246F, + 0x12470, + 0x12475, + 0x12480, + 0x12544, + 0x12F90, + 0x12FF3, + 0x13000, + 0x13430, + 0x13440, + 0x13456, + 0x13460, + 0x143FB, + 0x14400, + 0x14647, + 0x16100, + 0x1613A, + 0x16800, + 0x16A39, + 0x16A40, + 0x16A5F, + 0x16A60, + 0x16A6A, + 0x16A6E, + 0x16ABF, + 0x16AC0, + 0x16ACA, + 0x16AD0, + 0x16AEE, + 0x16AF0, + 0x16AF6, + 0x16B00, + 0x16B46, + 0x16B50, + 0x16B5A, + 0x16B5B, + 0x16B62, + 0x16B63, + 0x16B78, + 0x16B7D, + 0x16B90, + 0x16D40, + 0x16D7A, + 0x16E40, + 0x16E41, + 0x16E42, + 0x16E43, + 0x16E44, + 0x16E45, + 0x16E46, + 0x16E47, + 0x16E48, + 0x16E49, + 0x16E4A, + 0x16E4B, + 0x16E4C, + 0x16E4D, + 0x16E4E, + 0x16E4F, + 0x16E50, + 0x16E51, + 0x16E52, + 0x16E53, + 0x16E54, + 0x16E55, + 0x16E56, + 0x16E57, + 0x16E58, + 0x16E59, + 0x16E5A, + 0x16E5B, + 0x16E5C, + 0x16E5D, + 0x16E5E, + 0x16E5F, + 0x16E60, + 0x16E9B, + 0x16EA0, + 0x16EA1, + 0x16EA2, + 0x16EA3, + 0x16EA4, + 0x16EA5, + 0x16EA6, + 0x16EA7, + 0x16EA8, + 0x16EA9, + 0x16EAA, + 0x16EAB, + 0x16EAC, + 0x16EAD, + 0x16EAE, + 0x16EAF, + 0x16EB0, + 0x16EB1, + 0x16EB2, + 0x16EB3, + 0x16EB4, + 0x16EB5, + 0x16EB6, + 0x16EB7, + 0x16EB8, + 0x16EB9, + 0x16EBB, + 0x16ED4, + 0x16F00, + 0x16F4B, + 0x16F4F, + 0x16F88, + 0x16F8F, + 0x16FA0, + 0x16FE0, + 0x16FE5, + 0x16FF0, + 0x16FF7, + 0x17000, + 0x18CD6, + 0x18CFF, + 0x18D1F, + 0x18D80, + 0x18DF3, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, + 0x1B000, + 0x1B123, + 0x1B132, + 0x1B133, + 0x1B150, + 0x1B153, + 0x1B155, + 0x1B156, + 0x1B164, + 0x1B168, + 0x1B170, + 0x1B2FC, + 0x1BC00, + 0x1BC6B, + 0x1BC70, + 0x1BC7D, + 0x1BC80, + 0x1BC89, + 0x1BC90, + 0x1BC9A, + 0x1BC9C, + 0x1BCA0, + 0x1BCA4, + 0x1CC00, + 0x1CCD6, + 0x1CCD7, + 0x1CCD8, + 0x1CCD9, + 0x1CCDA, + 0x1CCDB, + 0x1CCDC, + 0x1CCDD, + 0x1CCDE, + 0x1CCDF, + 0x1CCE0, + 0x1CCE1, + 0x1CCE2, + 0x1CCE3, + 0x1CCE4, + 0x1CCE5, + 0x1CCE6, + 0x1CCE7, + 0x1CCE8, + 0x1CCE9, + 0x1CCEA, + 0x1CCEB, + 0x1CCEC, + 0x1CCED, + 0x1CCEE, + 0x1CCEF, + 0x1CCF0, + 0x1CCF1, + 0x1CCF2, + 0x1CCF3, + 0x1CCF4, + 0x1CCF5, + 0x1CCF6, + 0x1CCF7, + 0x1CCF8, + 0x1CCF9, + 0x1CCFA, + 0x1CCFD, + 0x1CD00, + 0x1CEB4, + 0x1CEBA, + 0x1CED1, + 0x1CEE0, + 0x1CEF1, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, + 0x1D000, + 0x1D0F6, + 0x1D100, + 0x1D127, + 0x1D129, + 0x1D15E, + 0x1D15F, + 0x1D160, + 0x1D161, + 0x1D162, + 0x1D163, + 0x1D164, + 0x1D165, + 0x1D173, + 0x1D17B, + 0x1D1BB, + 0x1D1BC, + 0x1D1BD, + 0x1D1BE, + 0x1D1BF, + 0x1D1C0, + 0x1D1C1, + 0x1D1EB, + 0x1D200, + 0x1D246, + 0x1D2C0, + 0x1D2D4, + 0x1D2E0, + 0x1D2F4, + 0x1D300, + 0x1D357, + 0x1D360, + 0x1D379, + 0x1D400, + 0x1D401, + 0x1D402, + 0x1D403, + 0x1D404, + 0x1D405, + 0x1D406, + 0x1D407, + 0x1D408, + 0x1D409, + 0x1D40A, + 0x1D40B, + 0x1D40C, + 0x1D40D, + 0x1D40E, + 0x1D40F, + 0x1D410, + 0x1D411, + 0x1D412, + 0x1D413, + 0x1D414, + 0x1D415, + 0x1D416, + 0x1D417, + 0x1D418, + 0x1D419, + 0x1D41A, + 0x1D41B, + 0x1D41C, + 0x1D41D, + 0x1D41E, + 0x1D41F, + 0x1D420, + 0x1D421, + 0x1D422, + 0x1D423, + 0x1D424, + 0x1D425, + 0x1D426, + 0x1D427, + 0x1D428, + 0x1D429, + 0x1D42A, + 0x1D42B, + 0x1D42C, + 0x1D42D, + 0x1D42E, + 0x1D42F, + 0x1D430, + 0x1D431, + 0x1D432, + 0x1D433, + 0x1D434, + 0x1D435, + 0x1D436, + 0x1D437, + 0x1D438, + 0x1D439, + 0x1D43A, + 0x1D43B, + 0x1D43C, + 0x1D43D, + 0x1D43E, + 0x1D43F, + 0x1D440, + 0x1D441, + 0x1D442, + 0x1D443, + 0x1D444, + 0x1D445, + 0x1D446, + 0x1D447, + 0x1D448, + 0x1D449, + 0x1D44A, + 0x1D44B, + 0x1D44C, + 0x1D44D, + 0x1D44E, + 0x1D44F, + 0x1D450, + 0x1D451, + 0x1D452, + 0x1D453, + 0x1D454, + 0x1D455, + 0x1D456, + 0x1D457, + 0x1D458, + 0x1D459, + 0x1D45A, + 0x1D45B, + 0x1D45C, + 0x1D45D, + 0x1D45E, + 0x1D45F, + 0x1D460, + 0x1D461, + 0x1D462, + 0x1D463, + 0x1D464, + 0x1D465, + 0x1D466, + 0x1D467, + 0x1D468, + 0x1D469, + 0x1D46A, + 0x1D46B, + 0x1D46C, + 0x1D46D, + 0x1D46E, + 0x1D46F, + 0x1D470, + 0x1D471, + 0x1D472, + 0x1D473, + 0x1D474, + 0x1D475, + 0x1D476, + 0x1D477, + 0x1D478, + 0x1D479, + 0x1D47A, + 0x1D47B, + 0x1D47C, + 0x1D47D, + 0x1D47E, + 0x1D47F, + 0x1D480, + 0x1D481, + 0x1D482, + 0x1D483, + 0x1D484, + 0x1D485, + 0x1D486, + 0x1D487, + 0x1D488, + 0x1D489, + 0x1D48A, + 0x1D48B, + 0x1D48C, + 0x1D48D, + 0x1D48E, + 0x1D48F, + 0x1D490, + 0x1D491, + 0x1D492, + 0x1D493, + 0x1D494, + 0x1D495, + 0x1D496, + 0x1D497, + 0x1D498, + 0x1D499, + 0x1D49A, + 0x1D49B, + 0x1D49C, + 0x1D49D, + 0x1D49E, + 0x1D49F, + 0x1D4A0, + 0x1D4A2, + 0x1D4A3, + 0x1D4A5, + 0x1D4A6, + 0x1D4A7, + 0x1D4A9, + 0x1D4AA, + 0x1D4AB, + 0x1D4AC, + 0x1D4AD, + 0x1D4AE, + 0x1D4AF, + 0x1D4B0, + 0x1D4B1, + 0x1D4B2, + 0x1D4B3, + 0x1D4B4, + 0x1D4B5, + 0x1D4B6, + 0x1D4B7, + 0x1D4B8, + 0x1D4B9, + 0x1D4BA, + 0x1D4BB, + 0x1D4BC, + 0x1D4BD, + 0x1D4BE, + 0x1D4BF, + 0x1D4C0, + 0x1D4C1, + 0x1D4C2, + 0x1D4C3, + 0x1D4C4, + 0x1D4C5, + 0x1D4C6, + 0x1D4C7, + 0x1D4C8, + 0x1D4C9, + 0x1D4CA, + 0x1D4CB, + 0x1D4CC, + 0x1D4CD, + 0x1D4CE, + 0x1D4CF, + 0x1D4D0, + 0x1D4D1, + 0x1D4D2, + 0x1D4D3, + 0x1D4D4, + 0x1D4D5, + 0x1D4D6, + 0x1D4D7, + 0x1D4D8, + 0x1D4D9, + 0x1D4DA, + 0x1D4DB, + 0x1D4DC, + 0x1D4DD, + 0x1D4DE, + 0x1D4DF, + 0x1D4E0, + 0x1D4E1, + 0x1D4E2, + 0x1D4E3, + 0x1D4E4, + 0x1D4E5, + 0x1D4E6, + 0x1D4E7, + 0x1D4E8, + 0x1D4E9, + 0x1D4EA, + 0x1D4EB, + 0x1D4EC, + 0x1D4ED, + 0x1D4EE, + 0x1D4EF, + 0x1D4F0, + 0x1D4F1, + 0x1D4F2, + 0x1D4F3, + 0x1D4F4, + 0x1D4F5, + 0x1D4F6, + 0x1D4F7, + 0x1D4F8, + 0x1D4F9, + 0x1D4FA, + 0x1D4FB, + 0x1D4FC, + 0x1D4FD, + 0x1D4FE, + 0x1D4FF, + 0x1D500, + 0x1D501, + 0x1D502, + 0x1D503, + 0x1D504, + 0x1D505, + 0x1D506, + 0x1D507, + 0x1D508, + 0x1D509, + 0x1D50A, + 0x1D50B, + 0x1D50D, + 0x1D50E, + 0x1D50F, + 0x1D510, + 0x1D511, + 0x1D512, + 0x1D513, + 0x1D514, + 0x1D515, + 0x1D516, + 0x1D517, + 0x1D518, + 0x1D519, + 0x1D51A, + 0x1D51B, + 0x1D51C, + 0x1D51D, + 0x1D51E, + 0x1D51F, + 0x1D520, + 0x1D521, + 0x1D522, + 0x1D523, + 0x1D524, + 0x1D525, + 0x1D526, + 0x1D527, + 0x1D528, + 0x1D529, + 0x1D52A, + 0x1D52B, + 0x1D52C, + 0x1D52D, + 0x1D52E, + 0x1D52F, + 0x1D530, + 0x1D531, + 0x1D532, + 0x1D533, + 0x1D534, + 0x1D535, + 0x1D536, + 0x1D537, + 0x1D538, + 0x1D539, + 0x1D53A, + 0x1D53B, + 0x1D53C, + 0x1D53D, + 0x1D53E, + 0x1D53F, + 0x1D540, + 0x1D541, + 0x1D542, + 0x1D543, + 0x1D544, + 0x1D545, + 0x1D546, + 0x1D547, + 0x1D54A, + 0x1D54B, + 0x1D54C, + 0x1D54D, + 0x1D54E, + 0x1D54F, + 0x1D550, + 0x1D551, + 0x1D552, + 0x1D553, + 0x1D554, + 0x1D555, + 0x1D556, + 0x1D557, + 0x1D558, + 0x1D559, + 0x1D55A, + 0x1D55B, + 0x1D55C, + 0x1D55D, + 0x1D55E, + 0x1D55F, + 0x1D560, + 0x1D561, + 0x1D562, + 0x1D563, + 0x1D564, + 0x1D565, + 0x1D566, + 0x1D567, + 0x1D568, + 0x1D569, + 0x1D56A, + 0x1D56B, + 0x1D56C, + 0x1D56D, + 0x1D56E, + 0x1D56F, + 0x1D570, + 0x1D571, + 0x1D572, + 0x1D573, + 0x1D574, + 0x1D575, + 0x1D576, + 0x1D577, + 0x1D578, + 0x1D579, + 0x1D57A, + 0x1D57B, + 0x1D57C, + 0x1D57D, + 0x1D57E, + 0x1D57F, + 0x1D580, + 0x1D581, + 0x1D582, + 0x1D583, + 0x1D584, + 0x1D585, + 0x1D586, + 0x1D587, + 0x1D588, + 0x1D589, + 0x1D58A, + 0x1D58B, + 0x1D58C, + 0x1D58D, + 0x1D58E, + 0x1D58F, + 0x1D590, + 0x1D591, + 0x1D592, + 0x1D593, + 0x1D594, + 0x1D595, + 0x1D596, + 0x1D597, + 0x1D598, + 0x1D599, + 0x1D59A, + 0x1D59B, + 0x1D59C, + 0x1D59D, + 0x1D59E, + 0x1D59F, + 0x1D5A0, + 0x1D5A1, + 0x1D5A2, + 0x1D5A3, + 0x1D5A4, + 0x1D5A5, + 0x1D5A6, + 0x1D5A7, + 0x1D5A8, + 0x1D5A9, + 0x1D5AA, + 0x1D5AB, + 0x1D5AC, + 0x1D5AD, + 0x1D5AE, + 0x1D5AF, + 0x1D5B0, + 0x1D5B1, + 0x1D5B2, + 0x1D5B3, + 0x1D5B4, + 0x1D5B5, + 0x1D5B6, + 0x1D5B7, + 0x1D5B8, + 0x1D5B9, + 0x1D5BA, + 0x1D5BB, + 0x1D5BC, + 0x1D5BD, + 0x1D5BE, + 0x1D5BF, + 0x1D5C0, + 0x1D5C1, + 0x1D5C2, + 0x1D5C3, + 0x1D5C4, + 0x1D5C5, + 0x1D5C6, + 0x1D5C7, + 0x1D5C8, + 0x1D5C9, + 0x1D5CA, + 0x1D5CB, + 0x1D5CC, + 0x1D5CD, + 0x1D5CE, + 0x1D5CF, + 0x1D5D0, + 0x1D5D1, + 0x1D5D2, + 0x1D5D3, + 0x1D5D4, + 0x1D5D5, + 0x1D5D6, + 0x1D5D7, + 0x1D5D8, + 0x1D5D9, + 0x1D5DA, + 0x1D5DB, + 0x1D5DC, + 0x1D5DD, + 0x1D5DE, + 0x1D5DF, + 0x1D5E0, + 0x1D5E1, + 0x1D5E2, + 0x1D5E3, + 0x1D5E4, + 0x1D5E5, + 0x1D5E6, + 0x1D5E7, + 0x1D5E8, + 0x1D5E9, + 0x1D5EA, + 0x1D5EB, + 0x1D5EC, + 0x1D5ED, + 0x1D5EE, + 0x1D5EF, + 0x1D5F0, + 0x1D5F1, + 0x1D5F2, + 0x1D5F3, + 0x1D5F4, + 0x1D5F5, + 0x1D5F6, + 0x1D5F7, + 0x1D5F8, + 0x1D5F9, + 0x1D5FA, + 0x1D5FB, + 0x1D5FC, + 0x1D5FD, + 0x1D5FE, + 0x1D5FF, + 0x1D600, + 0x1D601, + 0x1D602, + 0x1D603, + 0x1D604, + 0x1D605, + 0x1D606, + 0x1D607, + 0x1D608, + 0x1D609, + 0x1D60A, + 0x1D60B, + 0x1D60C, + 0x1D60D, + 0x1D60E, + 0x1D60F, + 0x1D610, + 0x1D611, + 0x1D612, + 0x1D613, + 0x1D614, + 0x1D615, + 0x1D616, + 0x1D617, + 0x1D618, + 0x1D619, + 0x1D61A, + 0x1D61B, + 0x1D61C, + 0x1D61D, + 0x1D61E, + 0x1D61F, + 0x1D620, + 0x1D621, + 0x1D622, + 0x1D623, + 0x1D624, + 0x1D625, + 0x1D626, + 0x1D627, + 0x1D628, + 0x1D629, + 0x1D62A, + 0x1D62B, + 0x1D62C, + 0x1D62D, + 0x1D62E, + 0x1D62F, + 0x1D630, + 0x1D631, + 0x1D632, + 0x1D633, + 0x1D634, + 0x1D635, + 0x1D636, + 0x1D637, + 0x1D638, + 0x1D639, + 0x1D63A, + 0x1D63B, + 0x1D63C, + 0x1D63D, + 0x1D63E, + 0x1D63F, + 0x1D640, + 0x1D641, + 0x1D642, + 0x1D643, + 0x1D644, + 0x1D645, + 0x1D646, + 0x1D647, + 0x1D648, + 0x1D649, + 0x1D64A, + 0x1D64B, + 0x1D64C, + 0x1D64D, + 0x1D64E, + 0x1D64F, + 0x1D650, + 0x1D651, + 0x1D652, + 0x1D653, + 0x1D654, + 0x1D655, + 0x1D656, + 0x1D657, + 0x1D658, + 0x1D659, + 0x1D65A, + 0x1D65B, + 0x1D65C, + 0x1D65D, + 0x1D65E, + 0x1D65F, + 0x1D660, + 0x1D661, + 0x1D662, + 0x1D663, + 0x1D664, + 0x1D665, + 0x1D666, + 0x1D667, + 0x1D668, + 0x1D669, + 0x1D66A, + 0x1D66B, + 0x1D66C, + 0x1D66D, + 0x1D66E, + 0x1D66F, + 0x1D670, + 0x1D671, + 0x1D672, + 0x1D673, + 0x1D674, + 0x1D675, + 0x1D676, + 0x1D677, + 0x1D678, + 0x1D679, + 0x1D67A, + 0x1D67B, + 0x1D67C, + 0x1D67D, + 0x1D67E, + 0x1D67F, + 0x1D680, + 0x1D681, + 0x1D682, + 0x1D683, + 0x1D684, + 0x1D685, + 0x1D686, + 0x1D687, + 0x1D688, + 0x1D689, + 0x1D68A, + 0x1D68B, + 0x1D68C, + 0x1D68D, + 0x1D68E, + 0x1D68F, + 0x1D690, + 0x1D691, + 0x1D692, + 0x1D693, + 0x1D694, + 0x1D695, + 0x1D696, + 0x1D697, + 0x1D698, + 0x1D699, + 0x1D69A, + 0x1D69B, + 0x1D69C, + 0x1D69D, + 0x1D69E, + 0x1D69F, + 0x1D6A0, + 0x1D6A1, + 0x1D6A2, + 0x1D6A3, + 0x1D6A4, + 0x1D6A5, + 0x1D6A6, + 0x1D6A8, + 0x1D6A9, + 0x1D6AA, + 0x1D6AB, + 0x1D6AC, + 0x1D6AD, + 0x1D6AE, + 0x1D6AF, + 0x1D6B0, + 0x1D6B1, + 0x1D6B2, + 0x1D6B3, + 0x1D6B4, + 0x1D6B5, + 0x1D6B6, + 0x1D6B7, + 0x1D6B8, + 0x1D6B9, + 0x1D6BA, + 0x1D6BB, + 0x1D6BC, + 0x1D6BD, + 0x1D6BE, + 0x1D6BF, + 0x1D6C0, + 0x1D6C1, + 0x1D6C2, + 0x1D6C3, + 0x1D6C4, + 0x1D6C5, + 0x1D6C6, + 0x1D6C7, + 0x1D6C8, + 0x1D6C9, + 0x1D6CA, + 0x1D6CB, + 0x1D6CC, + 0x1D6CD, + 0x1D6CE, + 0x1D6CF, + 0x1D6D0, + 0x1D6D1, + 0x1D6D2, + 0x1D6D3, + 0x1D6D5, + 0x1D6D6, + 0x1D6D7, + 0x1D6D8, + 0x1D6D9, + 0x1D6DA, + 0x1D6DB, + 0x1D6DC, + 0x1D6DD, + 0x1D6DE, + 0x1D6DF, + 0x1D6E0, + 0x1D6E1, + 0x1D6E2, + 0x1D6E3, + 0x1D6E4, + 0x1D6E5, + 0x1D6E6, + 0x1D6E7, + 0x1D6E8, + 0x1D6E9, + 0x1D6EA, + 0x1D6EB, + 0x1D6EC, + 0x1D6ED, + 0x1D6EE, + 0x1D6EF, + 0x1D6F0, + 0x1D6F1, + 0x1D6F2, + 0x1D6F3, + 0x1D6F4, + 0x1D6F5, + 0x1D6F6, + 0x1D6F7, + 0x1D6F8, + 0x1D6F9, + 0x1D6FA, + 0x1D6FB, + 0x1D6FC, + 0x1D6FD, + 0x1D6FE, + 0x1D6FF, + 0x1D700, + 0x1D701, + 0x1D702, + 0x1D703, + 0x1D704, + 0x1D705, + 0x1D706, + 0x1D707, + 0x1D708, + 0x1D709, + 0x1D70A, + 0x1D70B, + 0x1D70C, + 0x1D70D, + 0x1D70F, + 0x1D710, + 0x1D711, + 0x1D712, + 0x1D713, + 0x1D714, + 0x1D715, + 0x1D716, + 0x1D717, + 0x1D718, + 0x1D719, + 0x1D71A, + 0x1D71B, + 0x1D71C, + 0x1D71D, + 0x1D71E, + 0x1D71F, + 0x1D720, + 0x1D721, + 0x1D722, + 0x1D723, + 0x1D724, + 0x1D725, + 0x1D726, + 0x1D727, + 0x1D728, + 0x1D729, + 0x1D72A, + 0x1D72B, + 0x1D72C, + 0x1D72D, + 0x1D72E, + 0x1D72F, + 0x1D730, + 0x1D731, + 0x1D732, + 0x1D733, + 0x1D734, + 0x1D735, + 0x1D736, + 0x1D737, + 0x1D738, + 0x1D739, + 0x1D73A, + 0x1D73B, + 0x1D73C, + 0x1D73D, + 0x1D73E, + 0x1D73F, + 0x1D740, + 0x1D741, + 0x1D742, + 0x1D743, + 0x1D744, + 0x1D745, + 0x1D746, + 0x1D747, + 0x1D749, + 0x1D74A, + 0x1D74B, + 0x1D74C, + 0x1D74D, + 0x1D74E, + 0x1D74F, + 0x1D750, + 0x1D751, + 0x1D752, + 0x1D753, + 0x1D754, + 0x1D755, + 0x1D756, + 0x1D757, + 0x1D758, + 0x1D759, + 0x1D75A, + 0x1D75B, + 0x1D75C, + 0x1D75D, + 0x1D75E, + 0x1D75F, + 0x1D760, + 0x1D761, + 0x1D762, + 0x1D763, + 0x1D764, + 0x1D765, + 0x1D766, + 0x1D767, + 0x1D768, + 0x1D769, + 0x1D76A, + 0x1D76B, + 0x1D76C, + 0x1D76D, + 0x1D76E, + 0x1D76F, + 0x1D770, + 0x1D771, + 0x1D772, + 0x1D773, + 0x1D774, + 0x1D775, + 0x1D776, + 0x1D777, + 0x1D778, + 0x1D779, + 0x1D77A, + 0x1D77B, + 0x1D77C, + 0x1D77D, + 0x1D77E, + 0x1D77F, + 0x1D780, + 0x1D781, + 0x1D783, + 0x1D784, + 0x1D785, + 0x1D786, + 0x1D787, + 0x1D788, + 0x1D789, + 0x1D78A, + 0x1D78B, + 0x1D78C, + 0x1D78D, + 0x1D78E, + 0x1D78F, + 0x1D790, + 0x1D791, + 0x1D792, + 0x1D793, + 0x1D794, + 0x1D795, + 0x1D796, + 0x1D797, + 0x1D798, + 0x1D799, + 0x1D79A, + 0x1D79B, + 0x1D79C, + 0x1D79D, + 0x1D79E, + 0x1D79F, + 0x1D7A0, + 0x1D7A1, + 0x1D7A2, + 0x1D7A3, + 0x1D7A4, + 0x1D7A5, + 0x1D7A6, + 0x1D7A7, + 0x1D7A8, + 0x1D7A9, + 0x1D7AA, + 0x1D7AB, + 0x1D7AC, + 0x1D7AD, + 0x1D7AE, + 0x1D7AF, + 0x1D7B0, + 0x1D7B1, + 0x1D7B2, + 0x1D7B3, + 0x1D7B4, + 0x1D7B5, + 0x1D7B6, + 0x1D7B7, + 0x1D7B8, + 0x1D7B9, + 0x1D7BA, + 0x1D7BB, + 0x1D7BD, + 0x1D7BE, + 0x1D7BF, + 0x1D7C0, + 0x1D7C1, + 0x1D7C2, + 0x1D7C3, + 0x1D7C4, + 0x1D7C5, + 0x1D7C6, + 0x1D7C7, + 0x1D7C8, + 0x1D7C9, + 0x1D7CA, + 0x1D7CC, + 0x1D7CE, + 0x1D7CF, + 0x1D7D0, + 0x1D7D1, + 0x1D7D2, + 0x1D7D3, + 0x1D7D4, + 0x1D7D5, + 0x1D7D6, + 0x1D7D7, + 0x1D7D8, + 0x1D7D9, + 0x1D7DA, + 0x1D7DB, + 0x1D7DC, + 0x1D7DD, + 0x1D7DE, + 0x1D7DF, + 0x1D7E0, + 0x1D7E1, + 0x1D7E2, + 0x1D7E3, + 0x1D7E4, + 0x1D7E5, + 0x1D7E6, + 0x1D7E7, + 0x1D7E8, + 0x1D7E9, + 0x1D7EA, + 0x1D7EB, + 0x1D7EC, + 0x1D7ED, + 0x1D7EE, + 0x1D7EF, + 0x1D7F0, + 0x1D7F1, + 0x1D7F2, + 0x1D7F3, + 0x1D7F4, + 0x1D7F5, + 0x1D7F6, + 0x1D7F7, + 0x1D7F8, + 0x1D7F9, + 0x1D7FA, + 0x1D7FB, + 0x1D7FC, + 0x1D7FD, + 0x1D7FE, + 0x1D7FF, + 0x1D800, + 0x1DA8C, + 0x1DA9B, + 0x1DAA0, + 0x1DAA1, + 0x1DAB0, + 0x1DF00, + 0x1DF1F, + 0x1DF25, + 0x1DF2B, + 0x1E000, + 0x1E007, + 0x1E008, + 0x1E019, + 0x1E01B, + 0x1E022, + 0x1E023, + 0x1E025, + 0x1E026, + 0x1E02B, + 0x1E030, + 0x1E031, + 0x1E032, + 0x1E033, + 0x1E034, + 0x1E035, + 0x1E036, + 0x1E037, + 0x1E038, + 0x1E039, + 0x1E03A, + 0x1E03B, + 0x1E03C, + 0x1E03D, + 0x1E03E, + 0x1E03F, + 0x1E040, + 0x1E041, + 0x1E042, + 0x1E043, + 0x1E044, + 0x1E045, + 0x1E046, + 0x1E047, + 0x1E048, + 0x1E049, + 0x1E04A, + 0x1E04B, + 0x1E04C, + 0x1E04D, + 0x1E04E, + 0x1E04F, + 0x1E050, + 0x1E051, + 0x1E052, + 0x1E053, + 0x1E054, + 0x1E055, + 0x1E056, + 0x1E057, + 0x1E058, + 0x1E059, + 0x1E05A, + 0x1E05B, + 0x1E05C, + 0x1E05D, + 0x1E05E, + 0x1E05F, + 0x1E060, + 0x1E061, + 0x1E062, + 0x1E063, + 0x1E064, + 0x1E065, + 0x1E066, + 0x1E067, + 0x1E068, + 0x1E069, + 0x1E06A, + 0x1E06B, + 0x1E06C, + 0x1E06D, + 0x1E06E, + 0x1E08F, + 0x1E090, + 0x1E100, + 0x1E12D, + 0x1E130, + 0x1E13E, + 0x1E140, + 0x1E14A, + 0x1E14E, + 0x1E150, + 0x1E290, + 0x1E2AF, + 0x1E2C0, + 0x1E2FA, + 0x1E2FF, + 0x1E300, + 0x1E4D0, + 0x1E4FA, + 0x1E5D0, + 0x1E5FB, + 0x1E5FF, + 0x1E600, + 0x1E6C0, + 0x1E6DF, + 0x1E6E0, + 0x1E6F6, + 0x1E6FE, + 0x1E700, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, + 0x1E800, + 0x1E8C5, + 0x1E8C7, + 0x1E8D7, + 0x1E900, + 0x1E901, + 0x1E902, + 0x1E903, + 0x1E904, + 0x1E905, + 0x1E906, + 0x1E907, + 0x1E908, + 0x1E909, + 0x1E90A, + 0x1E90B, + 0x1E90C, + 0x1E90D, + 0x1E90E, + 0x1E90F, + 0x1E910, + 0x1E911, + 0x1E912, + 0x1E913, + 0x1E914, + 0x1E915, + 0x1E916, + 0x1E917, + 0x1E918, + 0x1E919, + 0x1E91A, + 0x1E91B, + 0x1E91C, + 0x1E91D, + 0x1E91E, + 0x1E91F, + 0x1E920, + 0x1E921, + 0x1E922, + 0x1E94C, + 0x1E950, + 0x1E95A, + 0x1E95E, + 0x1E960, + 0x1EC71, + 0x1ECB5, + 0x1ED01, + 0x1ED3E, + 0x1EE00, + 0x1EE01, + 0x1EE02, + 0x1EE03, + 0x1EE04, + 0x1EE05, + 0x1EE06, + 0x1EE07, + 0x1EE08, + 0x1EE09, + 0x1EE0A, + 0x1EE0B, + 0x1EE0C, + 0x1EE0D, + 0x1EE0E, + 0x1EE0F, + 0x1EE10, + 0x1EE11, + 0x1EE12, + 0x1EE13, + 0x1EE14, + 0x1EE15, + 0x1EE16, + 0x1EE17, + 0x1EE18, + 0x1EE19, + 0x1EE1A, + 0x1EE1B, + 0x1EE1C, + 0x1EE1D, + 0x1EE1E, + 0x1EE1F, + 0x1EE20, + 0x1EE21, + 0x1EE22, + 0x1EE23, + 0x1EE24, + 0x1EE25, + 0x1EE27, + 0x1EE28, + 0x1EE29, + 0x1EE2A, + 0x1EE2B, + 0x1EE2C, + 0x1EE2D, + 0x1EE2E, + 0x1EE2F, + 0x1EE30, + 0x1EE31, + 0x1EE32, + 0x1EE33, + 0x1EE34, + 0x1EE35, + 0x1EE36, + 0x1EE37, + 0x1EE38, + 0x1EE39, + 0x1EE3A, + 0x1EE3B, + 0x1EE3C, + 0x1EE42, + 0x1EE43, + 0x1EE47, + 0x1EE48, + 0x1EE49, + 0x1EE4A, + 0x1EE4B, + 0x1EE4C, + 0x1EE4D, + 0x1EE4E, + 0x1EE4F, + 0x1EE50, + 0x1EE51, + 0x1EE52, + 0x1EE53, + 0x1EE54, + 0x1EE55, + 0x1EE57, + 0x1EE58, + 0x1EE59, + 0x1EE5A, + 0x1EE5B, + 0x1EE5C, + 0x1EE5D, + 0x1EE5E, + 0x1EE5F, + 0x1EE60, + 0x1EE61, + 0x1EE62, + 0x1EE63, + 0x1EE64, + 0x1EE65, + 0x1EE67, + 0x1EE68, + 0x1EE69, + 0x1EE6A, + 0x1EE6B, + 0x1EE6C, + 0x1EE6D, + 0x1EE6E, + 0x1EE6F, + 0x1EE70, + 0x1EE71, + 0x1EE72, + 0x1EE73, + 0x1EE74, + 0x1EE75, + 0x1EE76, + 0x1EE77, + 0x1EE78, + 0x1EE79, + 0x1EE7A, + 0x1EE7B, + 0x1EE7C, + 0x1EE7D, + 0x1EE7E, + 0x1EE7F, + 0x1EE80, + 0x1EE81, + 0x1EE82, + 0x1EE83, + 0x1EE84, + 0x1EE85, + 0x1EE86, + 0x1EE87, + 0x1EE88, + 0x1EE89, + 0x1EE8A, + 0x1EE8B, + 0x1EE8C, + 0x1EE8D, + 0x1EE8E, + 0x1EE8F, + 0x1EE90, + 0x1EE91, + 0x1EE92, + 0x1EE93, + 0x1EE94, + 0x1EE95, + 0x1EE96, + 0x1EE97, + 0x1EE98, + 0x1EE99, + 0x1EE9A, + 0x1EE9B, + 0x1EE9C, + 0x1EEA1, + 0x1EEA2, + 0x1EEA3, + 0x1EEA4, + 0x1EEA5, + 0x1EEA6, + 0x1EEA7, + 0x1EEA8, + 0x1EEA9, + 0x1EEAA, + 0x1EEAB, + 0x1EEAC, + 0x1EEAD, + 0x1EEAE, + 0x1EEAF, + 0x1EEB0, + 0x1EEB1, + 0x1EEB2, + 0x1EEB3, + 0x1EEB4, + 0x1EEB5, + 0x1EEB6, + 0x1EEB7, + 0x1EEB8, + 0x1EEB9, + 0x1EEBA, + 0x1EEBB, + 0x1EEBC, + 0x1EEF0, + 0x1EEF2, + 0x1F000, + 0x1F02C, + 0x1F030, + 0x1F094, + 0x1F0A0, + 0x1F0AF, + 0x1F0B1, + 0x1F0C0, + 0x1F0C1, + 0x1F0D0, + 0x1F0D1, + 0x1F0F6, + 0x1F101, + 0x1F102, + 0x1F103, + 0x1F104, + 0x1F105, + 0x1F106, + 0x1F107, + 0x1F108, + 0x1F109, + 0x1F10A, + 0x1F10B, + 0x1F110, + 0x1F111, + 0x1F112, + 0x1F113, + 0x1F114, + 0x1F115, + 0x1F116, + 0x1F117, + 0x1F118, + 0x1F119, + 0x1F11A, + 0x1F11B, + 0x1F11C, + 0x1F11D, + 0x1F11E, + 0x1F11F, + 0x1F120, + 0x1F121, + 0x1F122, + 0x1F123, + 0x1F124, + 0x1F125, + 0x1F126, + 0x1F127, + 0x1F128, + 0x1F129, + 0x1F12A, + 0x1F12B, + 0x1F12C, + 0x1F12D, + 0x1F12E, + 0x1F12F, + 0x1F130, + 0x1F131, + 0x1F132, + 0x1F133, + 0x1F134, + 0x1F135, + 0x1F136, + 0x1F137, + 0x1F138, + 0x1F139, + 0x1F13A, + 0x1F13B, + 0x1F13C, + 0x1F13D, + 0x1F13E, + 0x1F13F, + 0x1F140, + 0x1F141, + 0x1F142, + 0x1F143, + 0x1F144, + 0x1F145, + 0x1F146, + 0x1F147, + 0x1F148, + 0x1F149, + 0x1F14A, + 0x1F14B, + 0x1F14C, + 0x1F14D, + 0x1F14E, + 0x1F14F, + 0x1F150, + 0x1F16A, + 0x1F16B, + 0x1F16C, + 0x1F16D, + 0x1F190, + 0x1F191, + 0x1F1AE, + 0x1F1E6, + 0x1F200, + 0x1F201, + 0x1F202, + 0x1F203, + 0x1F210, + 0x1F211, + 0x1F212, + 0x1F213, + 0x1F214, + 0x1F215, + 0x1F216, + 0x1F217, + 0x1F218, + 0x1F219, + 0x1F21A, + 0x1F21B, + 0x1F21C, + 0x1F21D, + 0x1F21E, + 0x1F21F, + 0x1F220, + 0x1F221, + 0x1F222, + 0x1F223, + 0x1F224, + 0x1F225, + 0x1F226, + 0x1F227, + 0x1F228, + 0x1F229, + 0x1F22A, + 0x1F22B, + 0x1F22C, + 0x1F22D, + 0x1F22E, + 0x1F22F, + 0x1F230, + 0x1F231, + 0x1F232, + 0x1F233, + 0x1F234, + 0x1F235, + 0x1F236, + 0x1F237, + 0x1F238, + 0x1F239, + 0x1F23A, + 0x1F23B, + 0x1F23C, + 0x1F240, + 0x1F241, + 0x1F242, + 0x1F243, + 0x1F244, + 0x1F245, + 0x1F246, + 0x1F247, + 0x1F248, + 0x1F249, + 0x1F250, + 0x1F251, + 0x1F252, + 0x1F260, + 0x1F266, + 0x1F300, + 0x1F6D9, + 0x1F6DC, + 0x1F6ED, + 0x1F6F0, + 0x1F6FD, + 0x1F700, + 0x1F7DA, + 0x1F7E0, + 0x1F7EC, + 0x1F7F0, + 0x1F7F1, + 0x1F800, + 0x1F80C, + 0x1F810, + 0x1F848, + 0x1F850, + 0x1F85A, + 0x1F860, + 0x1F888, + 0x1F890, + 0x1F8AE, + 0x1F8B0, + 0x1F8BC, + 0x1F8C0, + 0x1F8C2, + 0x1F8D0, + 0x1F8D9, + 0x1F900, + 0x1FA58, + 0x1FA60, + 0x1FA6E, + 0x1FA70, + 0x1FA7D, + 0x1FA80, + 0x1FA8B, + 0x1FA8E, + 0x1FAC7, + 0x1FAC8, + 0x1FAC9, + 0x1FACD, + 0x1FADD, + 0x1FADF, + 0x1FAEB, + 0x1FAEF, + 0x1FAF9, + 0x1FB00, + 0x1FB93, + 0x1FB94, + 0x1FBF0, + 0x1FBF1, + 0x1FBF2, + 0x1FBF3, + 0x1FBF4, + 0x1FBF5, + 0x1FBF6, + 0x1FBF7, + 0x1FBF8, + 0x1FBF9, + 0x1FBFA, + 0x1FBFB, + 0x20000, + 0x2A6E0, + 0x2A700, + 0x2B81E, + 0x2B820, + 0x2CEAE, + 0x2CEB0, + 0x2EBE1, + 0x2EBF0, + 0x2EE5E, + 0x2F800, + 0x2F801, + 0x2F802, + 0x2F803, + 0x2F804, + 0x2F805, + 0x2F806, + 0x2F807, + 0x2F808, + 0x2F809, + 0x2F80A, + 0x2F80B, + 0x2F80C, + 0x2F80D, + 0x2F80E, + 0x2F80F, + 0x2F810, + 0x2F811, + 0x2F812, + 0x2F813, + 0x2F814, + 0x2F815, + 0x2F816, + 0x2F817, + 0x2F818, + 0x2F819, + 0x2F81A, + 0x2F81B, + 0x2F81C, + 0x2F81D, + 0x2F81E, + 0x2F81F, + 0x2F820, + 0x2F821, + 0x2F822, + 0x2F823, + 0x2F824, + 0x2F825, + 0x2F826, + 0x2F827, + 0x2F828, + 0x2F829, + 0x2F82A, + 0x2F82B, + 0x2F82C, + 0x2F82D, + 0x2F82E, + 0x2F82F, + 0x2F830, + 0x2F831, + 0x2F834, + 0x2F835, + 0x2F836, + 0x2F837, + 0x2F838, + 0x2F839, + 0x2F83A, + 0x2F83B, + 0x2F83C, + 0x2F83D, + 0x2F83E, + 0x2F83F, + 0x2F840, + 0x2F841, + 0x2F842, + 0x2F843, + 0x2F844, + 0x2F845, + 0x2F847, + 0x2F848, + 0x2F849, + 0x2F84A, + 0x2F84B, + 0x2F84C, + 0x2F84D, + 0x2F84E, + 0x2F84F, + 0x2F850, + 0x2F851, + 0x2F852, + 0x2F853, + 0x2F854, + 0x2F855, + 0x2F856, + 0x2F857, + 0x2F858, + 0x2F859, + 0x2F85A, + 0x2F85B, + 0x2F85C, + 0x2F85D, + 0x2F85E, + 0x2F85F, + 0x2F860, + 0x2F861, + 0x2F862, + 0x2F863, + 0x2F864, + 0x2F865, + 0x2F866, + 0x2F867, + 0x2F868, + 0x2F869, + 0x2F86A, + 0x2F86C, + 0x2F86D, + 0x2F86E, + 0x2F86F, + 0x2F870, + 0x2F871, + 0x2F872, + 0x2F873, + 0x2F874, + 0x2F875, + 0x2F876, + 0x2F877, + 0x2F878, + 0x2F879, + 0x2F87A, + 0x2F87B, + 0x2F87C, + 0x2F87D, + 0x2F87E, + 0x2F87F, + 0x2F880, + 0x2F881, + 0x2F882, + 0x2F883, + 0x2F884, + 0x2F885, + 0x2F886, + 0x2F887, + 0x2F888, + 0x2F889, + 0x2F88A, + 0x2F88B, + 0x2F88C, + 0x2F88D, + 0x2F88E, + 0x2F88F, + 0x2F890, + 0x2F891, + 0x2F893, + 0x2F894, + 0x2F896, + 0x2F897, + 0x2F898, + 0x2F899, + 0x2F89A, + 0x2F89B, + 0x2F89C, + 0x2F89D, + 0x2F89E, + 0x2F89F, + 0x2F8A0, + 0x2F8A1, + 0x2F8A2, + 0x2F8A3, + 0x2F8A4, + 0x2F8A5, + 0x2F8A6, + 0x2F8A7, + 0x2F8A8, + 0x2F8A9, + 0x2F8AA, + 0x2F8AB, + 0x2F8AC, + 0x2F8AD, + 0x2F8AE, + 0x2F8AF, + 0x2F8B0, + 0x2F8B1, + 0x2F8B2, + 0x2F8B3, + 0x2F8B4, + 0x2F8B5, + 0x2F8B6, + 0x2F8B7, + 0x2F8B8, + 0x2F8B9, + 0x2F8BA, + 0x2F8BB, + 0x2F8BC, + 0x2F8BD, + 0x2F8BE, + 0x2F8BF, + 0x2F8C0, + 0x2F8C1, + 0x2F8C2, + 0x2F8C3, + 0x2F8C4, + 0x2F8C5, + 0x2F8C6, + 0x2F8C7, + 0x2F8C8, + 0x2F8C9, + 0x2F8CA, + 0x2F8CB, + 0x2F8CC, + 0x2F8CD, + 0x2F8CE, + 0x2F8CF, + 0x2F8D0, + 0x2F8D1, + 0x2F8D2, + 0x2F8D3, + 0x2F8D4, + 0x2F8D5, + 0x2F8D6, + 0x2F8D7, + 0x2F8D8, + 0x2F8D9, + 0x2F8DA, + 0x2F8DB, + 0x2F8DC, + 0x2F8DD, + 0x2F8DE, + 0x2F8DF, + 0x2F8E0, + 0x2F8E1, + 0x2F8E2, + 0x2F8E3, + 0x2F8E4, + 0x2F8E5, + 0x2F8E6, + 0x2F8E7, + 0x2F8E8, + 0x2F8E9, + 0x2F8EA, + 0x2F8EB, + 0x2F8EC, + 0x2F8ED, + 0x2F8EE, + 0x2F8EF, + 0x2F8F0, + 0x2F8F1, + 0x2F8F2, + 0x2F8F3, + 0x2F8F4, + 0x2F8F5, + 0x2F8F6, + 0x2F8F7, + 0x2F8F8, + 0x2F8F9, + 0x2F8FA, + 0x2F8FB, + 0x2F8FC, + 0x2F8FD, + 0x2F8FE, + 0x2F8FF, + 0x2F900, + 0x2F901, + 0x2F902, + 0x2F903, + 0x2F904, + 0x2F905, + 0x2F906, + 0x2F907, + 0x2F908, + 0x2F909, + 0x2F90A, + 0x2F90B, + 0x2F90C, + 0x2F90D, + 0x2F90E, + 0x2F90F, + 0x2F910, + 0x2F911, + 0x2F912, + 0x2F913, + 0x2F914, + 0x2F915, + 0x2F916, + 0x2F917, + 0x2F918, + 0x2F919, + 0x2F91A, + 0x2F91B, + 0x2F91C, + 0x2F91D, + 0x2F91E, + 0x2F91F, + 0x2F920, + 0x2F921, + 0x2F922, + 0x2F923, + 0x2F924, + 0x2F925, + 0x2F926, + 0x2F927, + 0x2F928, + 0x2F929, + 0x2F92A, + 0x2F92B, + 0x2F92C, + 0x2F92E, + 0x2F92F, + 0x2F930, + 0x2F931, + 0x2F932, + 0x2F933, + 0x2F934, + 0x2F935, + 0x2F936, + 0x2F937, + 0x2F938, + 0x2F939, + 0x2F93A, + 0x2F93B, + 0x2F93C, + 0x2F93D, + 0x2F93E, + 0x2F93F, + 0x2F940, + 0x2F941, + 0x2F942, + 0x2F943, + 0x2F944, + 0x2F945, + 0x2F946, + 0x2F948, + 0x2F949, + 0x2F94A, + 0x2F94B, + 0x2F94C, + 0x2F94D, + 0x2F94E, + 0x2F94F, + 0x2F950, + 0x2F951, + 0x2F952, + 0x2F953, + 0x2F954, + 0x2F955, + 0x2F956, + 0x2F957, + 0x2F958, + 0x2F959, + 0x2F95A, + 0x2F95B, + 0x2F95C, + 0x2F95D, + 0x2F95F, + 0x2F960, + 0x2F961, + 0x2F962, + 0x2F963, + 0x2F964, + 0x2F965, + 0x2F966, + 0x2F967, + 0x2F968, + 0x2F969, + 0x2F96A, + 0x2F96B, + 0x2F96C, + 0x2F96D, + 0x2F96E, + 0x2F96F, + 0x2F970, + 0x2F971, + 0x2F972, + 0x2F973, + 0x2F974, + 0x2F975, + 0x2F976, + 0x2F977, + 0x2F978, + 0x2F979, + 0x2F97A, + 0x2F97B, + 0x2F97C, + 0x2F97D, + 0x2F97E, + 0x2F97F, + 0x2F980, + 0x2F981, + 0x2F982, + 0x2F983, + 0x2F984, + 0x2F985, + 0x2F986, + 0x2F987, + 0x2F988, + 0x2F989, + 0x2F98A, + 0x2F98B, + 0x2F98C, + 0x2F98D, + 0x2F98E, + 0x2F98F, + 0x2F990, + 0x2F991, + 0x2F992, + 0x2F993, + 0x2F994, + 0x2F995, + 0x2F996, + 0x2F997, + 0x2F998, + 0x2F999, + 0x2F99A, + 0x2F99B, + 0x2F99C, + 0x2F99D, + 0x2F99E, + 0x2F99F, + 0x2F9A0, + 0x2F9A1, + 0x2F9A2, + 0x2F9A3, + 0x2F9A4, + 0x2F9A5, + 0x2F9A6, + 0x2F9A7, + 0x2F9A8, + 0x2F9A9, + 0x2F9AA, + 0x2F9AB, + 0x2F9AC, + 0x2F9AD, + 0x2F9AE, + 0x2F9AF, + 0x2F9B0, + 0x2F9B1, + 0x2F9B2, + 0x2F9B3, + 0x2F9B4, + 0x2F9B5, + 0x2F9B6, + 0x2F9B7, + 0x2F9B8, + 0x2F9B9, + 0x2F9BA, + 0x2F9BB, + 0x2F9BC, + 0x2F9BD, + 0x2F9BE, + 0x2F9BF, + 0x2F9C0, + 0x2F9C1, + 0x2F9C2, + 0x2F9C3, + 0x2F9C4, + 0x2F9C5, + 0x2F9C6, + 0x2F9C7, + 0x2F9C8, + 0x2F9C9, + 0x2F9CA, + 0x2F9CB, + 0x2F9CC, + 0x2F9CD, + 0x2F9CE, + 0x2F9CF, + 0x2F9D0, + 0x2F9D1, + 0x2F9D2, + 0x2F9D3, + 0x2F9D4, + 0x2F9D5, + 0x2F9D6, + 0x2F9D7, + 0x2F9D8, + 0x2F9D9, + 0x2F9DA, + 0x2F9DB, + 0x2F9DC, + 0x2F9DD, + 0x2F9DE, + 0x2F9DF, + 0x2F9E0, + 0x2F9E1, + 0x2F9E2, + 0x2F9E3, + 0x2F9E4, + 0x2F9E5, + 0x2F9E6, + 0x2F9E7, + 0x2F9E8, + 0x2F9E9, + 0x2F9EA, + 0x2F9EB, + 0x2F9EC, + 0x2F9ED, + 0x2F9EE, + 0x2F9EF, + 0x2F9F0, + 0x2F9F1, + 0x2F9F2, + 0x2F9F3, + 0x2F9F4, + 0x2F9F5, + 0x2F9F6, + 0x2F9F7, + 0x2F9F8, + 0x2F9F9, + 0x2F9FA, + 0x2F9FB, + 0x2F9FC, + 0x2F9FD, + 0x2F9FE, + 0x2FA00, + 0x2FA01, + 0x2FA02, + 0x2FA03, + 0x2FA04, + 0x2FA05, + 0x2FA06, + 0x2FA07, + 0x2FA08, + 0x2FA09, + 0x2FA0A, + 0x2FA0B, + 0x2FA0C, + 0x2FA0D, + 0x2FA0E, + 0x2FA0F, + 0x2FA10, + 0x2FA11, + 0x2FA12, + 0x2FA13, + 0x2FA14, + 0x2FA15, + 0x2FA16, + 0x2FA17, + 0x2FA18, + 0x2FA19, + 0x2FA1A, + 0x2FA1B, + 0x2FA1C, + 0x2FA1D, + 0x2FA1E, + 0x30000, + 0x3134B, + 0x31350, + 0x3347A, + 0xE0100, + 0xE01F0, + ), +) + +uts46_statuses: bytes = ( + b"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV" + b"VMMMMMMMMMMMMMMMMMMMMMMMMMMVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV" + b"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMVVVVVVVMVMVVIVMVVMMMMVVMMMVMMMV" + b"MMMMMMMMMMMMMMMMMMMMMMMVMMMMMMMDVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV" + b"MVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMMVMVMVMVMVMMV" + b"MVMVMVMMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMMVMVMVMVMM" + b"VMVMMVMMMVMMMMVMMVMMMVMMVMMVMVMVMMVMVMVMMVMMMVMVMMVMVMMMMVMVMVMV" + b"MVMVMVMVMVMVMVMVMVMVMVMVMVMMVMMMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVM" + b"VMVMVMVMVMVMVMVMVMVMVMVMVMVMMVMMVMVMMMMVMVMVMVMVMMMMMMMMMVMMMMMM" + b"VMMMMMVMMVMMMVIVMVMVMVMVXMVMMXMMMMMMMXMXMMVMMMMMMMMMMMMMMMMMXMMM" + b"MMMMMMVDVMMMMMMMMVMVMVMVMVMVMVMVMVMVMVMVMVMMMVMMVMVMMVMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMVMVMVMVMVMVMVMVMVMVMV" + b"MVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMV" + b"MVMMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVM" + b"VMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVXMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMXVMVXVXVXVXVXVXVMMMMVXVXVXVXVXVXVXVXVXVX" + b"VXVXVMMMMMMMMVXVXVXVXVXVXVXVXVXVXVXMMXMVXVXVXVXVXVXVXVMXVMXVXVXV" + b"XVXVXVXMMMVXMXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVX" + b"VXMMXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXV" + b"XVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXV" + b"XVMVXVXVXVXVXVXVXVMVXVXVXVXVXMMVXVMVMVXVMVMVMVMVMVXVMVMMMMMVMVMV" + b"XVMVMVMVMVMVXVXVXVMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMXMXVMV" + b"IVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXMMMMMMXVXVXVXVXVXVXVXVXVX" + b"VIVXVXVXVIVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVMMM" + b"MMMMMMVXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMVXVXVMMMV" + b"MMMMMMMMMMMVMMMMMMMMMMMMMMMMMMVMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMVMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMVMVMVMVMVMVMVMVMVMVMVMVMVMV" + b"MVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMV" + b"MVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMMVMVM" + b"VMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVM" + b"VMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMMMMMMMMVXMMMMMMXVMMMMMMMMVMMMMMM" + b"MMVXMMMMMMXVXMXMXMXMVMMMMMMMMVMVMVMVMVMVMVMXMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMVMMMXVMMMMMMMMMMMMMMXVMMMMMMMMMVMXVM" + b"MMMXMMMVMVMMMMMMMMXMMMXVMMMMMMMMXMIDXVMVMVXVXMVMMVMMVMVMVMMMVMVM" + b"IXIMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMMMMMMMMMMXVMVXVXMMMMVMMMVM" + b"MMMMMVMMVMMMVMMMVMVMVMVMMMMVMMMMMMMMMMVMMMMMVMMMMVMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMVMVXVMMVMMVMMVXVXMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMVMMMVMVXVMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMVMMMVMVMVMVMMMMVMVMVMM" + b"MMMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMV" + b"MVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVXVXVXVXVXMVXVXVXVXVX" + b"VXVXVXVXVXVXVXVMVMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMVMVMVMMMVXVXVMMVMVMXV" + b"XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMIMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXVMMMMMMMMMMMMMMVXVMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMXMMMMMMMMMMMMM" + b"MMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVXVXVXMVMVMVMVMVMVMVM" + b"VMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMMVXV" + b"MVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMV" + b"MVMVMVMVMVMVMVMVMVMMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMMMMMVM" + b"MMMMVMVMVMVMVMVMVMVMMMMVMVMMVMVMVMVMVMVMVMVMXMMMMMVMMVXVXVXVXVXV" + b"XVXVXVXVXVXVXVXVXVXVXVXVXVXVXVMMMMVMVXMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVXVXVXVXVX" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMVMVMVMMMMMMMMMMVMVMVMMVMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMXMMMMMMXMMMMMXMVMMMMMMMMMMMMMMMMMMMMMMMMXMMMMM" + b"XMXMMXMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMVMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVXMMMMMMMMMMMMMVIMMXMMM" + b"MMMXVXMMMMMMMMMMMMMMMMMMMVMMMMMMXMMMMMMMMMMMMMMMMMMMXMMMMXMMMVMX" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXIXMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMIMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMMMXMMMMM" + b"MXMMMMMMXMMMXMMMMMMMXMMMMMMMXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXV" + b"XVXVXVXVXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVXVXMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMXVXVXVXVMMMMMMMMMMMXMMMMMMMMMMMMMMMXMMM" + b"MMMMXMMXVXVXVXVXVXVXVXVXVMMMMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMXMMMMMMMMMXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVX" + b"VXVXVXVXVXVXVXVXVXVXVXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMXVXVXVXVMMMMMMMMMMMMMMMMMMMMMMXVXVXVXVXVXVXVXVXVXVXVXVX" + b"VXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVX" + b"VXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVX" + b"VXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVX" + b"VXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMVXMMMMMMMMMMMMMMMMMMMMMMMMMXVXVXVXVXVXVXVXVXVXVXVXVXVX" + b"VXVXVXVXVXVXVXVXVXVIXVMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVXVXVX" + b"VXVXVXVXVXVXVMMMMMMMVIVMMMMMMVXVXVXVXVXVXMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMXMMXMXMMXMMMMXMMMMMMMMMMMMXMXMMMMMMMXMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMXMMMMMMMMXMMMMM" + b"MMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMXMMMMMXMXMMMMMMMXMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMVXVXVXVXVXVXVXVXVXVXMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXVXVXVXVXVXVXVXVXVX" + b"VXVXVXVXVXVXVXVXVXVXVXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVXVXVXVX" + b"VXMMMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMXMMXMXMXMMMMMMMMMMXMMMMXMXMXMX" + b"MXMXMXMMMXMMXMXMXMXMXMXMXMMXMXMMMMXMMMMMMMXMMMMXMMMMXMXMMMMMMMMM" + b"MXMMMMMMMMMMMMMMMMMXMMMXMMMMMXMMMMMMMMMMMMMMMMMXVXVXVXVXVXVXVXMM" + b"MMMMMMMMVMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMVMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMVMMMVMVXVMMMXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMXMMMMMMMMMXMMXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVX" + b"VXVMMMMMMMMMMVXVXVXVXVXVXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + b"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXVXVXIX" +) + +uts46_replacements: tuple[Optional[str], ...] = ( + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + " ", + None, + None, + None, + None, + None, + None, + None, + " ̈", + None, + "a", + None, + None, + None, + None, + " ̄", + None, + None, + "2", + "3", + " ́", + "μ", + None, + None, + " ̧", + "1", + "o", + None, + "1⁄4", + "1⁄2", + "3⁄4", + None, + "à", + "á", + "â", + "ã", + "ä", + "å", + "æ", + "ç", + "è", + "é", + "ê", + "ë", + "ì", + "í", + "î", + "ï", + "ð", + "ñ", + "ò", + "ó", + "ô", + "õ", + "ö", + None, + "ø", + "ù", + "ú", + "û", + "ü", + "ý", + "þ", + "ss", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ā", + None, + "ă", + None, + "ą", + None, + "ć", + None, + "ĉ", + None, + "ċ", + None, + "č", + None, + "ď", + None, + "đ", + None, + "ē", + None, + "ĕ", + None, + "ė", + None, + "ę", + None, + "ě", + None, + "ĝ", + None, + "ğ", + None, + "ġ", + None, + "ģ", + None, + "ĥ", + None, + "ħ", + None, + "ĩ", + None, + "ī", + None, + "ĭ", + None, + "į", + None, + "i̇", + None, + "ij", + "ĵ", + None, + "ķ", + None, + "ĺ", + None, + "ļ", + None, + "ľ", + None, + "l·", + "ł", + None, + "ń", + None, + "ņ", + None, + "ň", + None, + "ʼn", + "ŋ", + None, + "ō", + None, + "ŏ", + None, + "ő", + None, + "œ", + None, + "ŕ", + None, + "ŗ", + None, + "ř", + None, + "ś", + None, + "ŝ", + None, + "ş", + None, + "š", + None, + "ţ", + None, + "ť", + None, + "ŧ", + None, + "ũ", + None, + "ū", + None, + "ŭ", + None, + "ů", + None, + "ű", + None, + "ų", + None, + "ŵ", + None, + "ŷ", + None, + "ÿ", + "ź", + None, + "ż", + None, + "ž", + None, + "s", + None, + "ɓ", + "ƃ", + None, + "ƅ", + None, + "ɔ", + "ƈ", + None, + "ɖ", + "ɗ", + "ƌ", + None, + "ǝ", + "ə", + "ɛ", + "ƒ", + None, + "ɠ", + "ɣ", + None, + "ɩ", + "ɨ", + "ƙ", + None, + "ɯ", + "ɲ", + None, + "ɵ", + "ơ", + None, + "ƣ", + None, + "ƥ", + None, + "ʀ", + "ƨ", + None, + "ʃ", + None, + "ƭ", + None, + "ʈ", + "ư", + None, + "ʊ", + "ʋ", + "ƴ", + None, + "ƶ", + None, + "ʒ", + "ƹ", + None, + "ƽ", + None, + "dž", + "lj", + "nj", + "ǎ", + None, + "ǐ", + None, + "ǒ", + None, + "ǔ", + None, + "ǖ", + None, + "ǘ", + None, + "ǚ", + None, + "ǜ", + None, + "ǟ", + None, + "ǡ", + None, + "ǣ", + None, + "ǥ", + None, + "ǧ", + None, + "ǩ", + None, + "ǫ", + None, + "ǭ", + None, + "ǯ", + None, + "dz", + "ǵ", + None, + "ƕ", + "ƿ", + "ǹ", + None, + "ǻ", + None, + "ǽ", + None, + "ǿ", + None, + "ȁ", + None, + "ȃ", + None, + "ȅ", + None, + "ȇ", + None, + "ȉ", + None, + "ȋ", + None, + "ȍ", + None, + "ȏ", + None, + "ȑ", + None, + "ȓ", + None, + "ȕ", + None, + "ȗ", + None, + "ș", + None, + "ț", + None, + "ȝ", + None, + "ȟ", + None, + "ƞ", + None, + "ȣ", + None, + "ȥ", + None, + "ȧ", + None, + "ȩ", + None, + "ȫ", + None, + "ȭ", + None, + "ȯ", + None, + "ȱ", + None, + "ȳ", + None, + "ⱥ", + "ȼ", + None, + "ƚ", + "ⱦ", + None, + "ɂ", + None, + "ƀ", + "ʉ", + "ʌ", + "ɇ", + None, + "ɉ", + None, + "ɋ", + None, + "ɍ", + None, + "ɏ", + None, + "h", + "ɦ", + "j", + "r", + "ɹ", + "ɻ", + "ʁ", + "w", + "y", + None, + " ̆", + " ̇", + " ̊", + " ̨", + " ̃", + " ̋", + None, + "ɣ", + "l", + "s", + "x", + "ʕ", + None, + "̀", + "́", + None, + "̓", + "̈́", + "ι", + None, + None, + None, + "ͱ", + None, + "ͳ", + None, + "ʹ", + None, + "ͷ", + None, + None, + " ι", + None, + ";", + "ϳ", + None, + " ́", + " ̈́", + "ά", + "·", + "έ", + "ή", + "ί", + None, + "ό", + None, + "ύ", + "ώ", + None, + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + None, + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "ϊ", + "ϋ", + None, + "σ", + None, + "ϗ", + "β", + "θ", + "υ", + "ύ", + "ϋ", + "φ", + "π", + None, + "ϙ", + None, + "ϛ", + None, + "ϝ", + None, + "ϟ", + None, + "ϡ", + None, + "ϣ", + None, + "ϥ", + None, + "ϧ", + None, + "ϩ", + None, + "ϫ", + None, + "ϭ", + None, + "ϯ", + None, + "κ", + "ρ", + "σ", + None, + "θ", + "ε", + None, + "ϸ", + None, + "σ", + "ϻ", + None, + "ͻ", + "ͼ", + "ͽ", + "ѐ", + "ё", + "ђ", + "ѓ", + "є", + "ѕ", + "і", + "ї", + "ј", + "љ", + "њ", + "ћ", + "ќ", + "ѝ", + "ў", + "џ", + "а", + "б", + "в", + "г", + "д", + "е", + "ж", + "з", + "и", + "й", + "к", + "л", + "м", + "н", + "о", + "п", + "р", + "с", + "т", + "у", + "ф", + "х", + "ц", + "ч", + "ш", + "щ", + "ъ", + "ы", + "ь", + "э", + "ю", + "я", + None, + "ѡ", + None, + "ѣ", + None, + "ѥ", + None, + "ѧ", + None, + "ѩ", + None, + "ѫ", + None, + "ѭ", + None, + "ѯ", + None, + "ѱ", + None, + "ѳ", + None, + "ѵ", + None, + "ѷ", + None, + "ѹ", + None, + "ѻ", + None, + "ѽ", + None, + "ѿ", + None, + "ҁ", + None, + "ҋ", + None, + "ҍ", + None, + "ҏ", + None, + "ґ", + None, + "ғ", + None, + "ҕ", + None, + "җ", + None, + "ҙ", + None, + "қ", + None, + "ҝ", + None, + "ҟ", + None, + "ҡ", + None, + "ң", + None, + "ҥ", + None, + "ҧ", + None, + "ҩ", + None, + "ҫ", + None, + "ҭ", + None, + "ү", + None, + "ұ", + None, + "ҳ", + None, + "ҵ", + None, + "ҷ", + None, + "ҹ", + None, + "һ", + None, + "ҽ", + None, + "ҿ", + None, + "ӏ", + "ӂ", + None, + "ӄ", + None, + "ӆ", + None, + "ӈ", + None, + "ӊ", + None, + "ӌ", + None, + "ӎ", + None, + "ӑ", + None, + "ӓ", + None, + "ӕ", + None, + "ӗ", + None, + "ә", + None, + "ӛ", + None, + "ӝ", + None, + "ӟ", + None, + "ӡ", + None, + "ӣ", + None, + "ӥ", + None, + "ӧ", + None, + "ө", + None, + "ӫ", + None, + "ӭ", + None, + "ӯ", + None, + "ӱ", + None, + "ӳ", + None, + "ӵ", + None, + "ӷ", + None, + "ӹ", + None, + "ӻ", + None, + "ӽ", + None, + "ӿ", + None, + "ԁ", + None, + "ԃ", + None, + "ԅ", + None, + "ԇ", + None, + "ԉ", + None, + "ԋ", + None, + "ԍ", + None, + "ԏ", + None, + "ԑ", + None, + "ԓ", + None, + "ԕ", + None, + "ԗ", + None, + "ԙ", + None, + "ԛ", + None, + "ԝ", + None, + "ԟ", + None, + "ԡ", + None, + "ԣ", + None, + "ԥ", + None, + "ԧ", + None, + "ԩ", + None, + "ԫ", + None, + "ԭ", + None, + "ԯ", + None, + None, + "ա", + "բ", + "գ", + "դ", + "ե", + "զ", + "է", + "ը", + "թ", + "ժ", + "ի", + "լ", + "խ", + "ծ", + "կ", + "հ", + "ձ", + "ղ", + "ճ", + "մ", + "յ", + "ն", + "շ", + "ո", + "չ", + "պ", + "ջ", + "ռ", + "ս", + "վ", + "տ", + "ր", + "ց", + "ւ", + "փ", + "ք", + "օ", + "ֆ", + None, + None, + "եւ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "اٴ", + "وٴ", + "ۇٴ", + "يٴ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "क़", + "ख़", + "ग़", + "ज़", + "ड़", + "ढ़", + "फ़", + "य़", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ড়", + "ঢ়", + None, + "য়", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ਲ਼", + None, + None, + "ਸ਼", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ਖ਼", + "ਗ਼", + "ਜ਼", + None, + None, + "ਫ਼", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ଡ଼", + "ଢ଼", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ํา", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ໍາ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ຫນ", + "ຫມ", + None, + None, + None, + "་", + None, + "གྷ", + None, + None, + None, + "ཌྷ", + None, + "དྷ", + None, + "བྷ", + None, + "ཛྷ", + None, + "ཀྵ", + None, + None, + None, + "ཱི", + None, + "ཱུ", + "ྲྀ", + "ྲཱྀ", + "ླྀ", + "ླཱྀ", + None, + "ཱྀ", + None, + "ྒྷ", + None, + None, + None, + "ྜྷ", + None, + "ྡྷ", + None, + "ྦྷ", + None, + "ྫྷ", + None, + "ྐྵ", + None, + None, + None, + None, + None, + None, + None, + "ⴀ", + "ⴁ", + "ⴂ", + "ⴃ", + "ⴄ", + "ⴅ", + "ⴆ", + "ⴇ", + "ⴈ", + "ⴉ", + "ⴊ", + "ⴋ", + "ⴌ", + "ⴍ", + "ⴎ", + "ⴏ", + "ⴐ", + "ⴑ", + "ⴒ", + "ⴓ", + "ⴔ", + "ⴕ", + "ⴖ", + "ⴗ", + "ⴘ", + "ⴙ", + "ⴚ", + "ⴛ", + "ⴜ", + "ⴝ", + "ⴞ", + "ⴟ", + "ⴠ", + "ⴡ", + "ⴢ", + "ⴣ", + "ⴤ", + "ⴥ", + None, + "ⴧ", + None, + "ⴭ", + None, + None, + "ნ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "Ᏸ", + "Ᏹ", + "Ᏺ", + "Ᏻ", + "Ᏼ", + "Ᏽ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "в", + "д", + "о", + "с", + "т", + "ъ", + "ѣ", + "ꙋ", + "\u1c8a", + None, + None, + "ა", + "ბ", + "გ", + "დ", + "ე", + "ვ", + "ზ", + "თ", + "ი", + "კ", + "ლ", + "მ", + "ნ", + "ო", + "პ", + "ჟ", + "რ", + "ს", + "ტ", + "უ", + "ფ", + "ქ", + "ღ", + "ყ", + "შ", + "ჩ", + "ც", + "ძ", + "წ", + "ჭ", + "ხ", + "ჯ", + "ჰ", + "ჱ", + "ჲ", + "ჳ", + "ჴ", + "ჵ", + "ჶ", + "ჷ", + "ჸ", + "ჹ", + "ჺ", + None, + "ჽ", + "ჾ", + "ჿ", + None, + None, + None, + None, + None, + "a", + "æ", + "b", + None, + "d", + "e", + "ǝ", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + None, + "o", + "ȣ", + "p", + "r", + "t", + "u", + "w", + "a", + "ɐ", + "ɑ", + "ᴂ", + "b", + "d", + "e", + "ə", + "ɛ", + "ɜ", + "g", + None, + "k", + "m", + "ŋ", + "o", + "ɔ", + "ᴖ", + "ᴗ", + "p", + "t", + "u", + "ᴝ", + "ɯ", + "v", + "ᴥ", + "β", + "γ", + "δ", + "φ", + "χ", + "i", + "r", + "u", + "v", + "β", + "γ", + "ρ", + "φ", + "χ", + None, + "н", + None, + "ɒ", + "c", + "ɕ", + "ð", + "ɜ", + "f", + "ɟ", + "ɡ", + "ɥ", + "ɨ", + "ɩ", + "ɪ", + "ᵻ", + "ʝ", + "ɭ", + "ᶅ", + "ʟ", + "ɱ", + "ɰ", + "ɲ", + "ɳ", + "ɴ", + "ɵ", + "ɸ", + "ʂ", + "ʃ", + "ƫ", + "ʉ", + "ʊ", + "ᴜ", + "ʋ", + "ʌ", + "z", + "ʐ", + "ʑ", + "ʒ", + "θ", + None, + "ḁ", + None, + "ḃ", + None, + "ḅ", + None, + "ḇ", + None, + "ḉ", + None, + "ḋ", + None, + "ḍ", + None, + "ḏ", + None, + "ḑ", + None, + "ḓ", + None, + "ḕ", + None, + "ḗ", + None, + "ḙ", + None, + "ḛ", + None, + "ḝ", + None, + "ḟ", + None, + "ḡ", + None, + "ḣ", + None, + "ḥ", + None, + "ḧ", + None, + "ḩ", + None, + "ḫ", + None, + "ḭ", + None, + "ḯ", + None, + "ḱ", + None, + "ḳ", + None, + "ḵ", + None, + "ḷ", + None, + "ḹ", + None, + "ḻ", + None, + "ḽ", + None, + "ḿ", + None, + "ṁ", + None, + "ṃ", + None, + "ṅ", + None, + "ṇ", + None, + "ṉ", + None, + "ṋ", + None, + "ṍ", + None, + "ṏ", + None, + "ṑ", + None, + "ṓ", + None, + "ṕ", + None, + "ṗ", + None, + "ṙ", + None, + "ṛ", + None, + "ṝ", + None, + "ṟ", + None, + "ṡ", + None, + "ṣ", + None, + "ṥ", + None, + "ṧ", + None, + "ṩ", + None, + "ṫ", + None, + "ṭ", + None, + "ṯ", + None, + "ṱ", + None, + "ṳ", + None, + "ṵ", + None, + "ṷ", + None, + "ṹ", + None, + "ṻ", + None, + "ṽ", + None, + "ṿ", + None, + "ẁ", + None, + "ẃ", + None, + "ẅ", + None, + "ẇ", + None, + "ẉ", + None, + "ẋ", + None, + "ẍ", + None, + "ẏ", + None, + "ẑ", + None, + "ẓ", + None, + "ẕ", + None, + "aʾ", + "ṡ", + None, + "ß", + None, + "ạ", + None, + "ả", + None, + "ấ", + None, + "ầ", + None, + "ẩ", + None, + "ẫ", + None, + "ậ", + None, + "ắ", + None, + "ằ", + None, + "ẳ", + None, + "ẵ", + None, + "ặ", + None, + "ẹ", + None, + "ẻ", + None, + "ẽ", + None, + "ế", + None, + "ề", + None, + "ể", + None, + "ễ", + None, + "ệ", + None, + "ỉ", + None, + "ị", + None, + "ọ", + None, + "ỏ", + None, + "ố", + None, + "ồ", + None, + "ổ", + None, + "ỗ", + None, + "ộ", + None, + "ớ", + None, + "ờ", + None, + "ở", + None, + "ỡ", + None, + "ợ", + None, + "ụ", + None, + "ủ", + None, + "ứ", + None, + "ừ", + None, + "ử", + None, + "ữ", + None, + "ự", + None, + "ỳ", + None, + "ỵ", + None, + "ỷ", + None, + "ỹ", + None, + "ỻ", + None, + "ỽ", + None, + "ỿ", + None, + "ἀ", + "ἁ", + "ἂ", + "ἃ", + "ἄ", + "ἅ", + "ἆ", + "ἇ", + None, + None, + "ἐ", + "ἑ", + "ἒ", + "ἓ", + "ἔ", + "ἕ", + None, + None, + "ἠ", + "ἡ", + "ἢ", + "ἣ", + "ἤ", + "ἥ", + "ἦ", + "ἧ", + None, + "ἰ", + "ἱ", + "ἲ", + "ἳ", + "ἴ", + "ἵ", + "ἶ", + "ἷ", + None, + None, + "ὀ", + "ὁ", + "ὂ", + "ὃ", + "ὄ", + "ὅ", + None, + None, + None, + "ὑ", + None, + "ὓ", + None, + "ὕ", + None, + "ὗ", + None, + "ὠ", + "ὡ", + "ὢ", + "ὣ", + "ὤ", + "ὥ", + "ὦ", + "ὧ", + None, + "ά", + None, + "έ", + None, + "ή", + None, + "ί", + None, + "ό", + None, + "ύ", + None, + "ώ", + None, + "ἀι", + "ἁι", + "ἂι", + "ἃι", + "ἄι", + "ἅι", + "ἆι", + "ἇι", + "ἀι", + "ἁι", + "ἂι", + "ἃι", + "ἄι", + "ἅι", + "ἆι", + "ἇι", + "ἠι", + "ἡι", + "ἢι", + "ἣι", + "ἤι", + "ἥι", + "ἦι", + "ἧι", + "ἠι", + "ἡι", + "ἢι", + "ἣι", + "ἤι", + "ἥι", + "ἦι", + "ἧι", + "ὠι", + "ὡι", + "ὢι", + "ὣι", + "ὤι", + "ὥι", + "ὦι", + "ὧι", + "ὠι", + "ὡι", + "ὢι", + "ὣι", + "ὤι", + "ὥι", + "ὦι", + "ὧι", + None, + "ὰι", + "αι", + "άι", + None, + None, + "ᾶι", + "ᾰ", + "ᾱ", + "ὰ", + "ά", + "αι", + " ̓", + "ι", + " ̓", + " ͂", + " ̈͂", + "ὴι", + "ηι", + "ήι", + None, + None, + "ῆι", + "ὲ", + "έ", + "ὴ", + "ή", + "ηι", + " ̓̀", + " ̓́", + " ̓͂", + None, + "ΐ", + None, + None, + "ῐ", + "ῑ", + "ὶ", + "ί", + None, + " ̔̀", + " ̔́", + " ̔͂", + None, + "ΰ", + None, + "ῠ", + "ῡ", + "ὺ", + "ύ", + "ῥ", + " ̈̀", + " ̈́", + "`", + None, + "ὼι", + "ωι", + "ώι", + None, + None, + "ῶι", + "ὸ", + "ό", + "ὼ", + "ώ", + "ωι", + " ́", + " ̔", + None, + " ", + None, + "", + None, + None, + "‐", + None, + " ̳", + None, + None, + None, + None, + " ", + None, + "′′", + "′′′", + None, + "‵‵", + "‵‵‵", + None, + "!!", + None, + " ̅", + None, + "??", + "?!", + "!?", + None, + "′′′′", + None, + " ", + None, + None, + None, + "0", + "i", + None, + "4", + "5", + "6", + "7", + "8", + "9", + "+", + "−", + "=", + "(", + ")", + "n", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "+", + "−", + "=", + "(", + ")", + None, + "a", + "e", + "o", + "x", + "ə", + "h", + "k", + "l", + "m", + "n", + "p", + "s", + "t", + None, + None, + "rs", + None, + None, + None, + None, + "a/c", + "a/s", + "c", + "°c", + None, + "c/o", + "c/u", + "ɛ", + None, + "°f", + "g", + "h", + "ħ", + "i", + "l", + None, + "n", + "no", + None, + "p", + "q", + "r", + None, + "sm", + "tel", + "tm", + None, + "z", + None, + "ω", + None, + "z", + None, + "k", + "å", + "b", + "c", + None, + "e", + "f", + "ⅎ", + "m", + "o", + "א", + "ב", + "ג", + "ד", + "i", + None, + "fax", + "π", + "γ", + "π", + "∑", + None, + "d", + "e", + "i", + "j", + None, + "1⁄7", + "1⁄9", + "1⁄10", + "1⁄3", + "2⁄3", + "1⁄5", + "2⁄5", + "3⁄5", + "4⁄5", + "1⁄6", + "5⁄6", + "1⁄8", + "3⁄8", + "5⁄8", + "7⁄8", + "1⁄", + "i", + "ii", + "iii", + "iv", + "v", + "vi", + "vii", + "viii", + "ix", + "x", + "xi", + "xii", + "l", + "c", + "d", + "m", + "i", + "ii", + "iii", + "iv", + "v", + "vi", + "vii", + "viii", + "ix", + "x", + "xi", + "xii", + "l", + "c", + "d", + "m", + None, + "ↄ", + None, + "0⁄3", + None, + None, + None, + "∫∫", + "∫∫∫", + None, + "∮∮", + "∮∮∮", + None, + "〈", + "〉", + None, + None, + None, + None, + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "(1)", + "(2)", + "(3)", + "(4)", + "(5)", + "(6)", + "(7)", + "(8)", + "(9)", + "(10)", + "(11)", + "(12)", + "(13)", + "(14)", + "(15)", + "(16)", + "(17)", + "(18)", + "(19)", + "(20)", + None, + "(a)", + "(b)", + "(c)", + "(d)", + "(e)", + "(f)", + "(g)", + "(h)", + "(i)", + "(j)", + "(k)", + "(l)", + "(m)", + "(n)", + "(o)", + "(p)", + "(q)", + "(r)", + "(s)", + "(t)", + "(u)", + "(v)", + "(w)", + "(x)", + "(y)", + "(z)", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "0", + None, + "∫∫∫∫", + None, + "::=", + "==", + "===", + None, + "⫝̸", + None, + None, + None, + "ⰰ", + "ⰱ", + "ⰲ", + "ⰳ", + "ⰴ", + "ⰵ", + "ⰶ", + "ⰷ", + "ⰸ", + "ⰹ", + "ⰺ", + "ⰻ", + "ⰼ", + "ⰽ", + "ⰾ", + "ⰿ", + "ⱀ", + "ⱁ", + "ⱂ", + "ⱃ", + "ⱄ", + "ⱅ", + "ⱆ", + "ⱇ", + "ⱈ", + "ⱉ", + "ⱊ", + "ⱋ", + "ⱌ", + "ⱍ", + "ⱎ", + "ⱏ", + "ⱐ", + "ⱑ", + "ⱒ", + "ⱓ", + "ⱔ", + "ⱕ", + "ⱖ", + "ⱗ", + "ⱘ", + "ⱙ", + "ⱚ", + "ⱛ", + "ⱜ", + "ⱝ", + "ⱞ", + "ⱟ", + None, + "ⱡ", + None, + "ɫ", + "ᵽ", + "ɽ", + None, + "ⱨ", + None, + "ⱪ", + None, + "ⱬ", + None, + "ɑ", + "ɱ", + "ɐ", + "ɒ", + None, + "ⱳ", + None, + "ⱶ", + None, + "j", + "v", + "ȿ", + "ɀ", + "ⲁ", + None, + "ⲃ", + None, + "ⲅ", + None, + "ⲇ", + None, + "ⲉ", + None, + "ⲋ", + None, + "ⲍ", + None, + "ⲏ", + None, + "ⲑ", + None, + "ⲓ", + None, + "ⲕ", + None, + "ⲗ", + None, + "ⲙ", + None, + "ⲛ", + None, + "ⲝ", + None, + "ⲟ", + None, + "ⲡ", + None, + "ⲣ", + None, + "ⲥ", + None, + "ⲧ", + None, + "ⲩ", + None, + "ⲫ", + None, + "ⲭ", + None, + "ⲯ", + None, + "ⲱ", + None, + "ⲳ", + None, + "ⲵ", + None, + "ⲷ", + None, + "ⲹ", + None, + "ⲻ", + None, + "ⲽ", + None, + "ⲿ", + None, + "ⳁ", + None, + "ⳃ", + None, + "ⳅ", + None, + "ⳇ", + None, + "ⳉ", + None, + "ⳋ", + None, + "ⳍ", + None, + "ⳏ", + None, + "ⳑ", + None, + "ⳓ", + None, + "ⳕ", + None, + "ⳗ", + None, + "ⳙ", + None, + "ⳛ", + None, + "ⳝ", + None, + "ⳟ", + None, + "ⳡ", + None, + "ⳣ", + None, + "ⳬ", + None, + "ⳮ", + None, + "ⳳ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ⵡ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "母", + None, + "龟", + None, + "一", + "丨", + "丶", + "丿", + "乙", + "亅", + "二", + "亠", + "人", + "儿", + "入", + "八", + "冂", + "冖", + "冫", + "几", + "凵", + "刀", + "力", + "勹", + "匕", + "匚", + "匸", + "十", + "卜", + "卩", + "厂", + "厶", + "又", + "口", + "囗", + "土", + "士", + "夂", + "夊", + "夕", + "大", + "女", + "子", + "宀", + "寸", + "小", + "尢", + "尸", + "屮", + "山", + "巛", + "工", + "己", + "巾", + "干", + "幺", + "广", + "廴", + "廾", + "弋", + "弓", + "彐", + "彡", + "彳", + "心", + "戈", + "戶", + "手", + "支", + "攴", + "文", + "斗", + "斤", + "方", + "无", + "日", + "曰", + "月", + "木", + "欠", + "止", + "歹", + "殳", + "毋", + "比", + "毛", + "氏", + "气", + "水", + "火", + "爪", + "父", + "爻", + "爿", + "片", + "牙", + "牛", + "犬", + "玄", + "玉", + "瓜", + "瓦", + "甘", + "生", + "用", + "田", + "疋", + "疒", + "癶", + "白", + "皮", + "皿", + "目", + "矛", + "矢", + "石", + "示", + "禸", + "禾", + "穴", + "立", + "竹", + "米", + "糸", + "缶", + "网", + "羊", + "羽", + "老", + "而", + "耒", + "耳", + "聿", + "肉", + "臣", + "自", + "至", + "臼", + "舌", + "舛", + "舟", + "艮", + "色", + "艸", + "虍", + "虫", + "血", + "行", + "衣", + "襾", + "見", + "角", + "言", + "谷", + "豆", + "豕", + "豸", + "貝", + "赤", + "走", + "足", + "身", + "車", + "辛", + "辰", + "辵", + "邑", + "酉", + "釆", + "里", + "金", + "長", + "門", + "阜", + "隶", + "隹", + "雨", + "靑", + "非", + "面", + "革", + "韋", + "韭", + "音", + "頁", + "風", + "飛", + "食", + "首", + "香", + "馬", + "骨", + "高", + "髟", + "鬥", + "鬯", + "鬲", + "鬼", + "魚", + "鳥", + "鹵", + "鹿", + "麥", + "麻", + "黃", + "黍", + "黑", + "黹", + "黽", + "鼎", + "鼓", + "鼠", + "鼻", + "齊", + "齒", + "龍", + "龜", + "龠", + None, + " ", + None, + ".", + None, + "〒", + None, + "十", + "卄", + "卅", + None, + None, + None, + None, + None, + " ゙", + " ゚", + None, + "より", + None, + "コト", + None, + None, + None, + "ᄀ", + "ᄁ", + "ᆪ", + "ᄂ", + "ᆬ", + "ᆭ", + "ᄃ", + "ᄄ", + "ᄅ", + "ᆰ", + "ᆱ", + "ᆲ", + "ᆳ", + "ᆴ", + "ᆵ", + "ᄚ", + "ᄆ", + "ᄇ", + "ᄈ", + "ᄡ", + "ᄉ", + "ᄊ", + "ᄋ", + "ᄌ", + "ᄍ", + "ᄎ", + "ᄏ", + "ᄐ", + "ᄑ", + "ᄒ", + "ᅡ", + "ᅢ", + "ᅣ", + "ᅤ", + "ᅥ", + "ᅦ", + "ᅧ", + "ᅨ", + "ᅩ", + "ᅪ", + "ᅫ", + "ᅬ", + "ᅭ", + "ᅮ", + "ᅯ", + "ᅰ", + "ᅱ", + "ᅲ", + "ᅳ", + "ᅴ", + "ᅵ", + None, + "ᄔ", + "ᄕ", + "ᇇ", + "ᇈ", + "ᇌ", + "ᇎ", + "ᇓ", + "ᇗ", + "ᇙ", + "ᄜ", + "ᇝ", + "ᇟ", + "ᄝ", + "ᄞ", + "ᄠ", + "ᄢ", + "ᄣ", + "ᄧ", + "ᄩ", + "ᄫ", + "ᄬ", + "ᄭ", + "ᄮ", + "ᄯ", + "ᄲ", + "ᄶ", + "ᅀ", + "ᅇ", + "ᅌ", + "ᇱ", + "ᇲ", + "ᅗ", + "ᅘ", + "ᅙ", + "ᆄ", + "ᆅ", + "ᆈ", + "ᆑ", + "ᆒ", + "ᆔ", + "ᆞ", + "ᆡ", + None, + None, + "一", + "二", + "三", + "四", + "上", + "中", + "下", + "甲", + "乙", + "丙", + "丁", + "天", + "地", + "人", + None, + None, + None, + "(ᄀ)", + "(ᄂ)", + "(ᄃ)", + "(ᄅ)", + "(ᄆ)", + "(ᄇ)", + "(ᄉ)", + "(ᄋ)", + "(ᄌ)", + "(ᄎ)", + "(ᄏ)", + "(ᄐ)", + "(ᄑ)", + "(ᄒ)", + "(가)", + "(나)", + "(다)", + "(라)", + "(마)", + "(바)", + "(사)", + "(아)", + "(자)", + "(차)", + "(카)", + "(타)", + "(파)", + "(하)", + "(주)", + "(오전)", + "(오후)", + None, + "(一)", + "(二)", + "(三)", + "(四)", + "(五)", + "(六)", + "(七)", + "(八)", + "(九)", + "(十)", + "(月)", + "(火)", + "(水)", + "(木)", + "(金)", + "(土)", + "(日)", + "(株)", + "(有)", + "(社)", + "(名)", + "(特)", + "(財)", + "(祝)", + "(労)", + "(代)", + "(呼)", + "(学)", + "(監)", + "(企)", + "(資)", + "(協)", + "(祭)", + "(休)", + "(自)", + "(至)", + "問", + "幼", + "文", + "箏", + None, + "pte", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + "32", + "33", + "34", + "35", + "ᄀ", + "ᄂ", + "ᄃ", + "ᄅ", + "ᄆ", + "ᄇ", + "ᄉ", + "ᄋ", + "ᄌ", + "ᄎ", + "ᄏ", + "ᄐ", + "ᄑ", + "ᄒ", + "가", + "나", + "다", + "라", + "마", + "바", + "사", + "아", + "자", + "차", + "카", + "타", + "파", + "하", + "참고", + "주의", + "우", + None, + "一", + "二", + "三", + "四", + "五", + "六", + "七", + "八", + "九", + "十", + "月", + "火", + "水", + "木", + "金", + "土", + "日", + "株", + "有", + "社", + "名", + "特", + "財", + "祝", + "労", + "秘", + "男", + "女", + "適", + "優", + "印", + "注", + "項", + "休", + "写", + "正", + "上", + "中", + "下", + "左", + "右", + "医", + "宗", + "学", + "監", + "企", + "資", + "協", + "夜", + "36", + "37", + "38", + "39", + "40", + "41", + "42", + "43", + "44", + "45", + "46", + "47", + "48", + "49", + "50", + "1月", + "2月", + "3月", + "4月", + "5月", + "6月", + "7月", + "8月", + "9月", + "10月", + "11月", + "12月", + "hg", + "erg", + "ev", + "ltd", + "ア", + "イ", + "ウ", + "エ", + "オ", + "カ", + "キ", + "ク", + "ケ", + "コ", + "サ", + "シ", + "ス", + "セ", + "ソ", + "タ", + "チ", + "ツ", + "テ", + "ト", + "ナ", + "ニ", + "ヌ", + "ネ", + "ノ", + "ハ", + "ヒ", + "フ", + "ヘ", + "ホ", + "マ", + "ミ", + "ム", + "メ", + "モ", + "ヤ", + "ユ", + "ヨ", + "ラ", + "リ", + "ル", + "レ", + "ロ", + "ワ", + "ヰ", + "ヱ", + "ヲ", + "令和", + "アパート", + "アルファ", + "アンペア", + "アール", + "イニング", + "インチ", + "ウォン", + "エスクード", + "エーカー", + "オンス", + "オーム", + "カイリ", + "カラット", + "カロリー", + "ガロン", + "ガンマ", + "ギガ", + "ギニー", + "キュリー", + "ギルダー", + "キロ", + "キログラム", + "キロメートル", + "キロワット", + "グラム", + "グラムトン", + "クルゼイロ", + "クローネ", + "ケース", + "コルナ", + "コーポ", + "サイクル", + "サンチーム", + "シリング", + "センチ", + "セント", + "ダース", + "デシ", + "ドル", + "トン", + "ナノ", + "ノット", + "ハイツ", + "パーセント", + "パーツ", + "バーレル", + "ピアストル", + "ピクル", + "ピコ", + "ビル", + "ファラッド", + "フィート", + "ブッシェル", + "フラン", + "ヘクタール", + "ペソ", + "ペニヒ", + "ヘルツ", + "ペンス", + "ページ", + "ベータ", + "ポイント", + "ボルト", + "ホン", + "ポンド", + "ホール", + "ホーン", + "マイクロ", + "マイル", + "マッハ", + "マルク", + "マンション", + "ミクロン", + "ミリ", + "ミリバール", + "メガ", + "メガトン", + "メートル", + "ヤード", + "ヤール", + "ユアン", + "リットル", + "リラ", + "ルピー", + "ルーブル", + "レム", + "レントゲン", + "ワット", + "0点", + "1点", + "2点", + "3点", + "4点", + "5点", + "6点", + "7点", + "8点", + "9点", + "10点", + "11点", + "12点", + "13点", + "14点", + "15点", + "16点", + "17点", + "18点", + "19点", + "20点", + "21点", + "22点", + "23点", + "24点", + "hpa", + "da", + "au", + "bar", + "ov", + "pc", + "dm", + "dm2", + "dm3", + "iu", + "平成", + "昭和", + "大正", + "明治", + "株式会社", + "pa", + "na", + "μa", + "ma", + "ka", + "kb", + "mb", + "gb", + "cal", + "kcal", + "pf", + "nf", + "μf", + "μg", + "mg", + "kg", + "hz", + "khz", + "mhz", + "ghz", + "thz", + "μl", + "ml", + "dl", + "kl", + "fm", + "nm", + "μm", + "mm", + "cm", + "km", + "mm2", + "cm2", + "m2", + "km2", + "mm3", + "cm3", + "m3", + "km3", + "m∕s", + "m∕s2", + "pa", + "kpa", + "mpa", + "gpa", + "rad", + "rad∕s", + "rad∕s2", + "ps", + "ns", + "μs", + "ms", + "pv", + "nv", + "μv", + "mv", + "kv", + "mv", + "pw", + "nw", + "μw", + "mw", + "kw", + "mw", + "kω", + "mω", + None, + "bq", + "cc", + "cd", + "c∕kg", + None, + "db", + "gy", + "ha", + "hp", + "in", + "kk", + "km", + "kt", + "lm", + "ln", + "log", + "lx", + "mb", + "mil", + "mol", + "ph", + None, + "ppm", + "pr", + "sr", + "sv", + "wb", + "v∕m", + "a∕m", + "1日", + "2日", + "3日", + "4日", + "5日", + "6日", + "7日", + "8日", + "9日", + "10日", + "11日", + "12日", + "13日", + "14日", + "15日", + "16日", + "17日", + "18日", + "19日", + "20日", + "21日", + "22日", + "23日", + "24日", + "25日", + "26日", + "27日", + "28日", + "29日", + "30日", + "31日", + "gal", + None, + None, + None, + None, + None, + None, + "ꙁ", + None, + "ꙃ", + None, + "ꙅ", + None, + "ꙇ", + None, + "ꙉ", + None, + "ꙋ", + None, + "ꙍ", + None, + "ꙏ", + None, + "ꙑ", + None, + "ꙓ", + None, + "ꙕ", + None, + "ꙗ", + None, + "ꙙ", + None, + "ꙛ", + None, + "ꙝ", + None, + "ꙟ", + None, + "ꙡ", + None, + "ꙣ", + None, + "ꙥ", + None, + "ꙧ", + None, + "ꙩ", + None, + "ꙫ", + None, + "ꙭ", + None, + "ꚁ", + None, + "ꚃ", + None, + "ꚅ", + None, + "ꚇ", + None, + "ꚉ", + None, + "ꚋ", + None, + "ꚍ", + None, + "ꚏ", + None, + "ꚑ", + None, + "ꚓ", + None, + "ꚕ", + None, + "ꚗ", + None, + "ꚙ", + None, + "ꚛ", + None, + "ъ", + "ь", + None, + None, + None, + "ꜣ", + None, + "ꜥ", + None, + "ꜧ", + None, + "ꜩ", + None, + "ꜫ", + None, + "ꜭ", + None, + "ꜯ", + None, + "ꜳ", + None, + "ꜵ", + None, + "ꜷ", + None, + "ꜹ", + None, + "ꜻ", + None, + "ꜽ", + None, + "ꜿ", + None, + "ꝁ", + None, + "ꝃ", + None, + "ꝅ", + None, + "ꝇ", + None, + "ꝉ", + None, + "ꝋ", + None, + "ꝍ", + None, + "ꝏ", + None, + "ꝑ", + None, + "ꝓ", + None, + "ꝕ", + None, + "ꝗ", + None, + "ꝙ", + None, + "ꝛ", + None, + "ꝝ", + None, + "ꝟ", + None, + "ꝡ", + None, + "ꝣ", + None, + "ꝥ", + None, + "ꝧ", + None, + "ꝩ", + None, + "ꝫ", + None, + "ꝭ", + None, + "ꝯ", + None, + "ꝯ", + None, + "ꝺ", + None, + "ꝼ", + None, + "ᵹ", + "ꝿ", + None, + "ꞁ", + None, + "ꞃ", + None, + "ꞅ", + None, + "ꞇ", + None, + "ꞌ", + None, + "ɥ", + None, + "ꞑ", + None, + "ꞓ", + None, + "ꞗ", + None, + "ꞙ", + None, + "ꞛ", + None, + "ꞝ", + None, + "ꞟ", + None, + "ꞡ", + None, + "ꞣ", + None, + "ꞥ", + None, + "ꞧ", + None, + "ꞩ", + None, + "ɦ", + "ɜ", + "ɡ", + "ɬ", + "ɪ", + None, + "ʞ", + "ʇ", + "ʝ", + "ꭓ", + "ꞵ", + None, + "ꞷ", + None, + "ꞹ", + None, + "ꞻ", + None, + "ꞽ", + None, + "ꞿ", + None, + "ꟁ", + None, + "ꟃ", + None, + "ꞔ", + "ʂ", + "ᶎ", + "ꟈ", + None, + "ꟊ", + None, + "ɤ", + "\ua7cd", + None, + "\ua7cf", + None, + "ꟑ", + None, + "ꟓ", + None, + "ꟕ", + None, + "ꟗ", + None, + "ꟙ", + None, + "\ua7db", + None, + "ƛ", + None, + "s", + "c", + "f", + "q", + "ꟶ", + None, + "ħ", + "œ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ꜧ", + "ꬷ", + "ɫ", + "ꭒ", + None, + "ʍ", + None, + None, + "Ꭰ", + "Ꭱ", + "Ꭲ", + "Ꭳ", + "Ꭴ", + "Ꭵ", + "Ꭶ", + "Ꭷ", + "Ꭸ", + "Ꭹ", + "Ꭺ", + "Ꭻ", + "Ꭼ", + "Ꭽ", + "Ꭾ", + "Ꭿ", + "Ꮀ", + "Ꮁ", + "Ꮂ", + "Ꮃ", + "Ꮄ", + "Ꮅ", + "Ꮆ", + "Ꮇ", + "Ꮈ", + "Ꮉ", + "Ꮊ", + "Ꮋ", + "Ꮌ", + "Ꮍ", + "Ꮎ", + "Ꮏ", + "Ꮐ", + "Ꮑ", + "Ꮒ", + "Ꮓ", + "Ꮔ", + "Ꮕ", + "Ꮖ", + "Ꮗ", + "Ꮘ", + "Ꮙ", + "Ꮚ", + "Ꮛ", + "Ꮜ", + "Ꮝ", + "Ꮞ", + "Ꮟ", + "Ꮠ", + "Ꮡ", + "Ꮢ", + "Ꮣ", + "Ꮤ", + "Ꮥ", + "Ꮦ", + "Ꮧ", + "Ꮨ", + "Ꮩ", + "Ꮪ", + "Ꮫ", + "Ꮬ", + "Ꮭ", + "Ꮮ", + "Ꮯ", + "Ꮰ", + "Ꮱ", + "Ꮲ", + "Ꮳ", + "Ꮴ", + "Ꮵ", + "Ꮶ", + "Ꮷ", + "Ꮸ", + "Ꮹ", + "Ꮺ", + "Ꮻ", + "Ꮼ", + "Ꮽ", + "Ꮾ", + "Ꮿ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "豈", + "更", + "車", + "賈", + "滑", + "串", + "句", + "龜", + "契", + "金", + "喇", + "奈", + "懶", + "癩", + "羅", + "蘿", + "螺", + "裸", + "邏", + "樂", + "洛", + "烙", + "珞", + "落", + "酪", + "駱", + "亂", + "卵", + "欄", + "爛", + "蘭", + "鸞", + "嵐", + "濫", + "藍", + "襤", + "拉", + "臘", + "蠟", + "廊", + "朗", + "浪", + "狼", + "郎", + "來", + "冷", + "勞", + "擄", + "櫓", + "爐", + "盧", + "老", + "蘆", + "虜", + "路", + "露", + "魯", + "鷺", + "碌", + "祿", + "綠", + "菉", + "錄", + "鹿", + "論", + "壟", + "弄", + "籠", + "聾", + "牢", + "磊", + "賂", + "雷", + "壘", + "屢", + "樓", + "淚", + "漏", + "累", + "縷", + "陋", + "勒", + "肋", + "凜", + "凌", + "稜", + "綾", + "菱", + "陵", + "讀", + "拏", + "樂", + "諾", + "丹", + "寧", + "怒", + "率", + "異", + "北", + "磻", + "便", + "復", + "不", + "泌", + "數", + "索", + "參", + "塞", + "省", + "葉", + "說", + "殺", + "辰", + "沈", + "拾", + "若", + "掠", + "略", + "亮", + "兩", + "凉", + "梁", + "糧", + "良", + "諒", + "量", + "勵", + "呂", + "女", + "廬", + "旅", + "濾", + "礪", + "閭", + "驪", + "麗", + "黎", + "力", + "曆", + "歷", + "轢", + "年", + "憐", + "戀", + "撚", + "漣", + "煉", + "璉", + "秊", + "練", + "聯", + "輦", + "蓮", + "連", + "鍊", + "列", + "劣", + "咽", + "烈", + "裂", + "說", + "廉", + "念", + "捻", + "殮", + "簾", + "獵", + "令", + "囹", + "寧", + "嶺", + "怜", + "玲", + "瑩", + "羚", + "聆", + "鈴", + "零", + "靈", + "領", + "例", + "禮", + "醴", + "隸", + "惡", + "了", + "僚", + "寮", + "尿", + "料", + "樂", + "燎", + "療", + "蓼", + "遼", + "龍", + "暈", + "阮", + "劉", + "杻", + "柳", + "流", + "溜", + "琉", + "留", + "硫", + "紐", + "類", + "六", + "戮", + "陸", + "倫", + "崙", + "淪", + "輪", + "律", + "慄", + "栗", + "率", + "隆", + "利", + "吏", + "履", + "易", + "李", + "梨", + "泥", + "理", + "痢", + "罹", + "裏", + "裡", + "里", + "離", + "匿", + "溺", + "吝", + "燐", + "璘", + "藺", + "隣", + "鱗", + "麟", + "林", + "淋", + "臨", + "立", + "笠", + "粒", + "狀", + "炙", + "識", + "什", + "茶", + "刺", + "切", + "度", + "拓", + "糖", + "宅", + "洞", + "暴", + "輻", + "行", + "降", + "見", + "廓", + "兀", + "嗀", + None, + "塚", + None, + "晴", + None, + "凞", + "猪", + "益", + "礼", + "神", + "祥", + "福", + "靖", + "精", + "羽", + None, + "蘒", + None, + "諸", + None, + "逸", + "都", + None, + "飯", + "飼", + "館", + "鶴", + "郞", + "隷", + "侮", + "僧", + "免", + "勉", + "勤", + "卑", + "喝", + "嘆", + "器", + "塀", + "墨", + "層", + "屮", + "悔", + "慨", + "憎", + "懲", + "敏", + "既", + "暑", + "梅", + "海", + "渚", + "漢", + "煮", + "爫", + "琢", + "碑", + "社", + "祉", + "祈", + "祐", + "祖", + "祝", + "禍", + "禎", + "穀", + "突", + "節", + "練", + "縉", + "繁", + "署", + "者", + "臭", + "艹", + "著", + "褐", + "視", + "謁", + "謹", + "賓", + "贈", + "辶", + "逸", + "難", + "響", + "頻", + "恵", + "𤋮", + "舘", + None, + "並", + "况", + "全", + "侀", + "充", + "冀", + "勇", + "勺", + "喝", + "啕", + "喙", + "嗢", + "塚", + "墳", + "奄", + "奔", + "婢", + "嬨", + "廒", + "廙", + "彩", + "徭", + "惘", + "慎", + "愈", + "憎", + "慠", + "懲", + "戴", + "揄", + "搜", + "摒", + "敖", + "晴", + "朗", + "望", + "杖", + "歹", + "殺", + "流", + "滛", + "滋", + "漢", + "瀞", + "煮", + "瞧", + "爵", + "犯", + "猪", + "瑱", + "甆", + "画", + "瘝", + "瘟", + "益", + "盛", + "直", + "睊", + "着", + "磌", + "窱", + "節", + "类", + "絛", + "練", + "缾", + "者", + "荒", + "華", + "蝹", + "襁", + "覆", + "視", + "調", + "諸", + "請", + "謁", + "諾", + "諭", + "謹", + "變", + "贈", + "輸", + "遲", + "醙", + "鉶", + "陼", + "難", + "靖", + "韛", + "響", + "頋", + "頻", + "鬒", + "龜", + "𢡊", + "𢡄", + "𣏕", + "㮝", + "䀘", + "䀹", + "𥉉", + "𥳐", + "𧻓", + "齃", + "龎", + None, + "ff", + "fi", + "fl", + "ffi", + "ffl", + "st", + None, + "մն", + "մե", + "մի", + "վն", + "մխ", + None, + "יִ", + None, + "ײַ", + "ע", + "א", + "ד", + "ה", + "כ", + "ל", + "ם", + "ר", + "ת", + "+", + "שׁ", + "שׂ", + "שּׁ", + "שּׂ", + "אַ", + "אָ", + "אּ", + "בּ", + "גּ", + "דּ", + "הּ", + "וּ", + "זּ", + None, + "טּ", + "יּ", + "ךּ", + "כּ", + "לּ", + None, + "מּ", + None, + "נּ", + "סּ", + None, + "ףּ", + "פּ", + None, + "צּ", + "קּ", + "רּ", + "שּ", + "תּ", + "וֹ", + "בֿ", + "כֿ", + "פֿ", + "אל", + "ٱ", + "ٻ", + "پ", + "ڀ", + "ٺ", + "ٿ", + "ٹ", + "ڤ", + "ڦ", + "ڄ", + "ڃ", + "چ", + "ڇ", + "ڍ", + "ڌ", + "ڎ", + "ڈ", + "ژ", + "ڑ", + "ک", + "گ", + "ڳ", + "ڱ", + "ں", + "ڻ", + "ۀ", + "ہ", + "ھ", + "ے", + "ۓ", + None, + "ڭ", + "ۇ", + "ۆ", + "ۈ", + "ۇٴ", + "ۋ", + "ۅ", + "ۉ", + "ې", + "ى", + "ئا", + "ئە", + "ئو", + "ئۇ", + "ئۆ", + "ئۈ", + "ئې", + "ئى", + "ی", + "ئج", + "ئح", + "ئم", + "ئى", + "ئي", + "بج", + "بح", + "بخ", + "بم", + "بى", + "بي", + "تج", + "تح", + "تخ", + "تم", + "تى", + "تي", + "ثج", + "ثم", + "ثى", + "ثي", + "جح", + "جم", + "حج", + "حم", + "خج", + "خح", + "خم", + "سج", + "سح", + "سخ", + "سم", + "صح", + "صم", + "ضج", + "ضح", + "ضخ", + "ضم", + "طح", + "طم", + "ظم", + "عج", + "عم", + "غج", + "غم", + "فج", + "فح", + "فخ", + "فم", + "فى", + "في", + "قح", + "قم", + "قى", + "قي", + "كا", + "كج", + "كح", + "كخ", + "كل", + "كم", + "كى", + "كي", + "لج", + "لح", + "لخ", + "لم", + "لى", + "لي", + "مج", + "مح", + "مخ", + "مم", + "مى", + "مي", + "نج", + "نح", + "نخ", + "نم", + "نى", + "ني", + "هج", + "هم", + "هى", + "هي", + "يج", + "يح", + "يخ", + "يم", + "يى", + "يي", + "ذٰ", + "رٰ", + "ىٰ", + " ٌّ", + " ٍّ", + " َّ", + " ُّ", + " ِّ", + " ّٰ", + "ئر", + "ئز", + "ئم", + "ئن", + "ئى", + "ئي", + "بر", + "بز", + "بم", + "بن", + "بى", + "بي", + "تر", + "تز", + "تم", + "تن", + "تى", + "تي", + "ثر", + "ثز", + "ثم", + "ثن", + "ثى", + "ثي", + "فى", + "في", + "قى", + "قي", + "كا", + "كل", + "كم", + "كى", + "كي", + "لم", + "لى", + "لي", + "ما", + "مم", + "نر", + "نز", + "نم", + "نن", + "نى", + "ني", + "ىٰ", + "ير", + "يز", + "يم", + "ين", + "يى", + "يي", + "ئج", + "ئح", + "ئخ", + "ئم", + "ئه", + "بج", + "بح", + "بخ", + "بم", + "به", + "تج", + "تح", + "تخ", + "تم", + "ته", + "ثم", + "جح", + "جم", + "حج", + "حم", + "خج", + "خم", + "سج", + "سح", + "سخ", + "سم", + "صح", + "صخ", + "صم", + "ضج", + "ضح", + "ضخ", + "ضم", + "طح", + "ظم", + "عج", + "عم", + "غج", + "غم", + "فج", + "فح", + "فخ", + "فم", + "قح", + "قم", + "كج", + "كح", + "كخ", + "كل", + "كم", + "لج", + "لح", + "لخ", + "لم", + "له", + "مج", + "مح", + "مخ", + "مم", + "نج", + "نح", + "نخ", + "نم", + "نه", + "هج", + "هم", + "هٰ", + "يج", + "يح", + "يخ", + "يم", + "يه", + "ئم", + "ئه", + "بم", + "به", + "تم", + "ته", + "ثم", + "ثه", + "سم", + "سه", + "شم", + "شه", + "كل", + "كم", + "لم", + "نم", + "نه", + "يم", + "يه", + "ـَّ", + "ـُّ", + "ـِّ", + "طى", + "طي", + "عى", + "عي", + "غى", + "غي", + "سى", + "سي", + "شى", + "شي", + "حى", + "حي", + "جى", + "جي", + "خى", + "خي", + "صى", + "صي", + "ضى", + "ضي", + "شج", + "شح", + "شخ", + "شم", + "شر", + "سر", + "صر", + "ضر", + "طى", + "طي", + "عى", + "عي", + "غى", + "غي", + "سى", + "سي", + "شى", + "شي", + "حى", + "حي", + "جى", + "جي", + "خى", + "خي", + "صى", + "صي", + "ضى", + "ضي", + "شج", + "شح", + "شخ", + "شم", + "شر", + "سر", + "صر", + "ضر", + "شج", + "شح", + "شخ", + "شم", + "سه", + "شه", + "طم", + "سج", + "سح", + "سخ", + "شج", + "شح", + "شخ", + "طم", + "ظم", + "اً", + None, + "تجم", + "تحج", + "تحم", + "تخم", + "تمج", + "تمح", + "تمخ", + "جمح", + "حمي", + "حمى", + "سحج", + "سجح", + "سجى", + "سمح", + "سمج", + "سمم", + "صحح", + "صمم", + "شحم", + "شجي", + "شمخ", + "شمم", + "ضحى", + "ضخم", + "طمح", + "طمم", + "طمي", + "عجم", + "عمم", + "عمى", + "غمم", + "غمي", + "غمى", + "فخم", + "قمح", + "قمم", + "لحم", + "لحي", + "لحى", + "لجج", + "لخم", + "لمح", + "محج", + "محم", + "محي", + "مجح", + "مجم", + "مخج", + "مخم", + None, + "مجخ", + "همج", + "همم", + "نحم", + "نحى", + "نجم", + "نجى", + "نمي", + "نمى", + "يمم", + "بخي", + "تجي", + "تجى", + "تخي", + "تخى", + "تمي", + "تمى", + "جمي", + "جحى", + "جمى", + "سخى", + "صحي", + "شحي", + "ضحي", + "لجي", + "لمي", + "يحي", + "يجي", + "يمي", + "ممي", + "قمي", + "نحي", + "قمح", + "لحم", + "عمي", + "كمي", + "نجح", + "مخي", + "لجم", + "كمم", + "لجم", + "نجح", + "جحي", + "حجي", + "مجي", + "فمي", + "بحي", + "كمم", + "عجم", + "صمم", + "سخي", + "نجي", + None, + None, + "صلے", + "قلے", + "الله", + "اكبر", + "محمد", + "صلعم", + "رسول", + "عليه", + "وسلم", + "صلى", + "صلى الله عليه وسلم", + "جل جلاله", + "ریال", + None, + None, + ",", + "、", + None, + ":", + ";", + "!", + "?", + "〖", + "〗", + None, + None, + None, + "—", + "–", + "_", + "(", + ")", + "{", + "}", + "〔", + "〕", + "【", + "】", + "《", + "》", + "〈", + "〉", + "「", + "」", + "『", + "』", + None, + "[", + "]", + " ̅", + "_", + ",", + "、", + None, + ";", + ":", + "?", + "!", + "—", + "(", + ")", + "{", + "}", + "〔", + "〕", + "#", + "&", + "*", + "+", + "-", + "<", + ">", + "=", + None, + "\\", + "$", + "%", + "@", + None, + " ً", + "ـً", + " ٌ", + None, + " ٍ", + None, + " َ", + "ـَ", + " ُ", + "ـُ", + " ِ", + "ـِ", + " ّ", + "ـّ", + " ْ", + "ـْ", + "ء", + "آ", + "أ", + "ؤ", + "إ", + "ئ", + "ا", + "ب", + "ة", + "ت", + "ث", + "ج", + "ح", + "خ", + "د", + "ذ", + "ر", + "ز", + "س", + "ش", + "ص", + "ض", + "ط", + "ظ", + "ع", + "غ", + "ف", + "ق", + "ك", + "ل", + "م", + "ن", + "ه", + "و", + "ى", + "ي", + "لآ", + "لأ", + "لإ", + "لا", + None, + None, + None, + "!", + '"', + "#", + "$", + "%", + "&", + "'", + "(", + ")", + "*", + "+", + ",", + "-", + ".", + "/", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + ":", + ";", + "<", + "=", + ">", + "?", + "@", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "[", + "\\", + "]", + "^", + "_", + "`", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "{", + "|", + "}", + "~", + "⦅", + "⦆", + ".", + "「", + "」", + "、", + "・", + "ヲ", + "ァ", + "ィ", + "ゥ", + "ェ", + "ォ", + "ャ", + "ュ", + "ョ", + "ッ", + "ー", + "ア", + "イ", + "ウ", + "エ", + "オ", + "カ", + "キ", + "ク", + "ケ", + "コ", + "サ", + "シ", + "ス", + "セ", + "ソ", + "タ", + "チ", + "ツ", + "テ", + "ト", + "ナ", + "ニ", + "ヌ", + "ネ", + "ノ", + "ハ", + "ヒ", + "フ", + "ヘ", + "ホ", + "マ", + "ミ", + "ム", + "メ", + "モ", + "ヤ", + "ユ", + "ヨ", + "ラ", + "リ", + "ル", + "レ", + "ロ", + "ワ", + "ン", + "゙", + "゚", + None, + "ᄀ", + "ᄁ", + "ᆪ", + "ᄂ", + "ᆬ", + "ᆭ", + "ᄃ", + "ᄄ", + "ᄅ", + "ᆰ", + "ᆱ", + "ᆲ", + "ᆳ", + "ᆴ", + "ᆵ", + "ᄚ", + "ᄆ", + "ᄇ", + "ᄈ", + "ᄡ", + "ᄉ", + "ᄊ", + "ᄋ", + "ᄌ", + "ᄍ", + "ᄎ", + "ᄏ", + "ᄐ", + "ᄑ", + "ᄒ", + None, + "ᅡ", + "ᅢ", + "ᅣ", + "ᅤ", + "ᅥ", + "ᅦ", + None, + "ᅧ", + "ᅨ", + "ᅩ", + "ᅪ", + "ᅫ", + "ᅬ", + None, + "ᅭ", + "ᅮ", + "ᅯ", + "ᅰ", + "ᅱ", + "ᅲ", + None, + "ᅳ", + "ᅴ", + "ᅵ", + None, + "¢", + "£", + "¬", + " ̄", + "¦", + "¥", + "₩", + None, + "│", + "←", + "↑", + "→", + "↓", + "■", + "○", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "𐐨", + "𐐩", + "𐐪", + "𐐫", + "𐐬", + "𐐭", + "𐐮", + "𐐯", + "𐐰", + "𐐱", + "𐐲", + "𐐳", + "𐐴", + "𐐵", + "𐐶", + "𐐷", + "𐐸", + "𐐹", + "𐐺", + "𐐻", + "𐐼", + "𐐽", + "𐐾", + "𐐿", + "𐑀", + "𐑁", + "𐑂", + "𐑃", + "𐑄", + "𐑅", + "𐑆", + "𐑇", + "𐑈", + "𐑉", + "𐑊", + "𐑋", + "𐑌", + "𐑍", + "𐑎", + "𐑏", + None, + None, + None, + None, + "𐓘", + "𐓙", + "𐓚", + "𐓛", + "𐓜", + "𐓝", + "𐓞", + "𐓟", + "𐓠", + "𐓡", + "𐓢", + "𐓣", + "𐓤", + "𐓥", + "𐓦", + "𐓧", + "𐓨", + "𐓩", + "𐓪", + "𐓫", + "𐓬", + "𐓭", + "𐓮", + "𐓯", + "𐓰", + "𐓱", + "𐓲", + "𐓳", + "𐓴", + "𐓵", + "𐓶", + "𐓷", + "𐓸", + "𐓹", + "𐓺", + "𐓻", + None, + None, + None, + None, + None, + None, + None, + None, + "𐖗", + "𐖘", + "𐖙", + "𐖚", + "𐖛", + "𐖜", + "𐖝", + "𐖞", + "𐖟", + "𐖠", + "𐖡", + None, + "𐖣", + "𐖤", + "𐖥", + "𐖦", + "𐖧", + "𐖨", + "𐖩", + "𐖪", + "𐖫", + "𐖬", + "𐖭", + "𐖮", + "𐖯", + "𐖰", + "𐖱", + None, + "𐖳", + "𐖴", + "𐖵", + "𐖶", + "𐖷", + "𐖸", + "𐖹", + None, + "𐖻", + "𐖼", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ː", + "ˑ", + "æ", + "ʙ", + "ɓ", + None, + "ʣ", + "ꭦ", + "ʥ", + "ʤ", + "ɖ", + "ɗ", + "ᶑ", + "ɘ", + "ɞ", + "ʩ", + "ɤ", + "ɢ", + "ɠ", + "ʛ", + "ħ", + "ʜ", + "ɧ", + "ʄ", + "ʪ", + "ʫ", + "ɬ", + "𝼄", + "ꞎ", + "ɮ", + "𝼅", + "ʎ", + "𝼆", + "ø", + "ɶ", + "ɷ", + "q", + "ɺ", + "𝼈", + "ɽ", + "ɾ", + "ʀ", + "ʨ", + "ʦ", + "ꭧ", + "ʧ", + "ʈ", + "ⱱ", + None, + "ʏ", + "ʡ", + "ʢ", + "ʘ", + "ǀ", + "ǁ", + "ǂ", + "𝼊", + "𝼞", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "𐳀", + "𐳁", + "𐳂", + "𐳃", + "𐳄", + "𐳅", + "𐳆", + "𐳇", + "𐳈", + "𐳉", + "𐳊", + "𐳋", + "𐳌", + "𐳍", + "𐳎", + "𐳏", + "𐳐", + "𐳑", + "𐳒", + "𐳓", + "𐳔", + "𐳕", + "𐳖", + "𐳗", + "𐳘", + "𐳙", + "𐳚", + "𐳛", + "𐳜", + "𐳝", + "𐳞", + "𐳟", + "𐳠", + "𐳡", + "𐳢", + "𐳣", + "𐳤", + "𐳥", + "𐳦", + "𐳧", + "𐳨", + "𐳩", + "𐳪", + "𐳫", + "𐳬", + "𐳭", + "𐳮", + "𐳯", + "𐳰", + "𐳱", + "𐳲", + None, + None, + None, + None, + None, + None, + None, + None, + "\U00010d70", + "\U00010d71", + "\U00010d72", + "\U00010d73", + "\U00010d74", + "\U00010d75", + "\U00010d76", + "\U00010d77", + "\U00010d78", + "\U00010d79", + "\U00010d7a", + "\U00010d7b", + "\U00010d7c", + "\U00010d7d", + "\U00010d7e", + "\U00010d7f", + "\U00010d80", + "\U00010d81", + "\U00010d82", + "\U00010d83", + "\U00010d84", + "\U00010d85", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "𑣀", + "𑣁", + "𑣂", + "𑣃", + "𑣄", + "𑣅", + "𑣆", + "𑣇", + "𑣈", + "𑣉", + "𑣊", + "𑣋", + "𑣌", + "𑣍", + "𑣎", + "𑣏", + "𑣐", + "𑣑", + "𑣒", + "𑣓", + "𑣔", + "𑣕", + "𑣖", + "𑣗", + "𑣘", + "𑣙", + "𑣚", + "𑣛", + "𑣜", + "𑣝", + "𑣞", + "𑣟", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "𖹠", + "𖹡", + "𖹢", + "𖹣", + "𖹤", + "𖹥", + "𖹦", + "𖹧", + "𖹨", + "𖹩", + "𖹪", + "𖹫", + "𖹬", + "𖹭", + "𖹮", + "𖹯", + "𖹰", + "𖹱", + "𖹲", + "𖹳", + "𖹴", + "𖹵", + "𖹶", + "𖹷", + "𖹸", + "𖹹", + "𖹺", + "𖹻", + "𖹼", + "𖹽", + "𖹾", + "𖹿", + None, + None, + "\U00016ebb", + "\U00016ebc", + "\U00016ebd", + "\U00016ebe", + "\U00016ebf", + "\U00016ec0", + "\U00016ec1", + "\U00016ec2", + "\U00016ec3", + "\U00016ec4", + "\U00016ec5", + "\U00016ec6", + "\U00016ec7", + "\U00016ec8", + "\U00016ec9", + "\U00016eca", + "\U00016ecb", + "\U00016ecc", + "\U00016ecd", + "\U00016ece", + "\U00016ecf", + "\U00016ed0", + "\U00016ed1", + "\U00016ed2", + "\U00016ed3", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "𝅗𝅥", + "𝅘𝅥", + "𝅘𝅥𝅮", + "𝅘𝅥𝅯", + "𝅘𝅥𝅰", + "𝅘𝅥𝅱", + "𝅘𝅥𝅲", + None, + None, + None, + "𝆹𝅥", + "𝆺𝅥", + "𝆹𝅥𝅮", + "𝆺𝅥𝅮", + "𝆹𝅥𝅯", + "𝆺𝅥𝅯", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + None, + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + None, + "c", + "d", + None, + "g", + None, + "j", + "k", + None, + "n", + "o", + "p", + "q", + None, + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + None, + "f", + None, + "h", + "i", + "j", + "k", + "l", + "m", + "n", + None, + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + None, + "d", + "e", + "f", + "g", + None, + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + None, + "s", + "t", + "u", + "v", + "w", + "x", + "y", + None, + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + None, + "d", + "e", + "f", + "g", + None, + "i", + "j", + "k", + "l", + "m", + None, + "o", + None, + "s", + "t", + "u", + "v", + "w", + "x", + "y", + None, + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "ı", + "ȷ", + None, + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "θ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∇", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∂", + "ε", + "θ", + "κ", + "φ", + "ρ", + "π", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "θ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∇", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∂", + "ε", + "θ", + "κ", + "φ", + "ρ", + "π", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "θ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∇", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∂", + "ε", + "θ", + "κ", + "φ", + "ρ", + "π", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "θ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∇", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∂", + "ε", + "θ", + "κ", + "φ", + "ρ", + "π", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "θ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∇", + "α", + "β", + "γ", + "δ", + "ε", + "ζ", + "η", + "θ", + "ι", + "κ", + "λ", + "μ", + "ν", + "ξ", + "ο", + "π", + "ρ", + "σ", + "τ", + "υ", + "φ", + "χ", + "ψ", + "ω", + "∂", + "ε", + "θ", + "κ", + "φ", + "ρ", + "π", + "ϝ", + None, + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "а", + "б", + "в", + "г", + "д", + "е", + "ж", + "з", + "и", + "к", + "л", + "м", + "о", + "п", + "р", + "с", + "т", + "у", + "ф", + "х", + "ц", + "ч", + "ш", + "ы", + "э", + "ю", + "ꚉ", + "ә", + "і", + "ј", + "ө", + "ү", + "ӏ", + "а", + "б", + "в", + "г", + "д", + "е", + "ж", + "з", + "и", + "к", + "л", + "о", + "п", + "с", + "у", + "ф", + "х", + "ц", + "ч", + "ш", + "ъ", + "ы", + "ґ", + "і", + "ѕ", + "џ", + "ҫ", + "ꙑ", + "ұ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "𞤢", + "𞤣", + "𞤤", + "𞤥", + "𞤦", + "𞤧", + "𞤨", + "𞤩", + "𞤪", + "𞤫", + "𞤬", + "𞤭", + "𞤮", + "𞤯", + "𞤰", + "𞤱", + "𞤲", + "𞤳", + "𞤴", + "𞤵", + "𞤶", + "𞤷", + "𞤸", + "𞤹", + "𞤺", + "𞤻", + "𞤼", + "𞤽", + "𞤾", + "𞤿", + "𞥀", + "𞥁", + "𞥂", + "𞥃", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "ا", + "ب", + "ج", + "د", + None, + "و", + "ز", + "ح", + "ط", + "ي", + "ك", + "ل", + "م", + "ن", + "س", + "ع", + "ف", + "ص", + "ق", + "ر", + "ش", + "ت", + "ث", + "خ", + "ذ", + "ض", + "ظ", + "غ", + "ٮ", + "ں", + "ڡ", + "ٯ", + None, + "ب", + "ج", + None, + "ه", + None, + "ح", + None, + "ي", + "ك", + "ل", + "م", + "ن", + "س", + "ع", + "ف", + "ص", + "ق", + None, + "ش", + "ت", + "ث", + "خ", + None, + "ض", + None, + "غ", + None, + "ج", + None, + "ح", + None, + "ي", + None, + "ل", + None, + "ن", + "س", + "ع", + None, + "ص", + "ق", + None, + "ش", + None, + "خ", + None, + "ض", + None, + "غ", + None, + "ں", + None, + "ٯ", + None, + "ب", + "ج", + None, + "ه", + None, + "ح", + "ط", + "ي", + "ك", + None, + "م", + "ن", + "س", + "ع", + "ف", + "ص", + "ق", + None, + "ش", + "ت", + "ث", + "خ", + None, + "ض", + "ظ", + "غ", + "ٮ", + None, + "ڡ", + None, + "ا", + "ب", + "ج", + "د", + "ه", + "و", + "ز", + "ح", + "ط", + "ي", + None, + "ل", + "م", + "ن", + "س", + "ع", + "ف", + "ص", + "ق", + "ر", + "ش", + "ت", + "ث", + "خ", + "ذ", + "ض", + "ظ", + "غ", + None, + "ب", + "ج", + "د", + None, + "و", + "ز", + "ح", + "ط", + "ي", + None, + "ل", + "م", + "ن", + "س", + "ع", + "ف", + "ص", + "ق", + "ر", + "ش", + "ت", + "ث", + "خ", + "ذ", + "ض", + "ظ", + "غ", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "0,", + "1,", + "2,", + "3,", + "4,", + "5,", + "6,", + "7,", + "8,", + "9,", + None, + "(a)", + "(b)", + "(c)", + "(d)", + "(e)", + "(f)", + "(g)", + "(h)", + "(i)", + "(j)", + "(k)", + "(l)", + "(m)", + "(n)", + "(o)", + "(p)", + "(q)", + "(r)", + "(s)", + "(t)", + "(u)", + "(v)", + "(w)", + "(x)", + "(y)", + "(z)", + "〔s〕", + "c", + "r", + "cd", + "wz", + None, + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "hv", + "mv", + "sd", + "ss", + "ppv", + "wc", + None, + "mc", + "md", + "mr", + None, + "dj", + None, + None, + None, + "ほか", + "ココ", + "サ", + None, + "手", + "字", + "双", + "デ", + "二", + "多", + "解", + "天", + "交", + "映", + "無", + "料", + "前", + "後", + "再", + "新", + "初", + "終", + "生", + "販", + "声", + "吹", + "演", + "投", + "捕", + "一", + "三", + "遊", + "左", + "中", + "右", + "指", + "走", + "打", + "禁", + "空", + "合", + "満", + "有", + "月", + "申", + "割", + "営", + "配", + None, + "〔本〕", + "〔三〕", + "〔二〕", + "〔安〕", + "〔点〕", + "〔打〕", + "〔盗〕", + "〔勝〕", + "〔敗〕", + None, + "得", + "可", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "丽", + "丸", + "乁", + "𠄢", + "你", + "侮", + "侻", + "倂", + "偺", + "備", + "僧", + "像", + "㒞", + "𠘺", + "免", + "兔", + "兤", + "具", + "𠔜", + "㒹", + "內", + "再", + "𠕋", + "冗", + "冤", + "仌", + "冬", + "况", + "𩇟", + "凵", + "刃", + "㓟", + "刻", + "剆", + "割", + "剷", + "㔕", + "勇", + "勉", + "勤", + "勺", + "包", + "匆", + "北", + "卉", + "卑", + "博", + "即", + "卽", + "卿", + "𠨬", + "灰", + "及", + "叟", + "𠭣", + "叫", + "叱", + "吆", + "咞", + "吸", + "呈", + "周", + "咢", + "哶", + "唐", + "啓", + "啣", + "善", + "喙", + "喫", + "喳", + "嗂", + "圖", + "嘆", + "圗", + "噑", + "噴", + "切", + "壮", + "城", + "埴", + "堍", + "型", + "堲", + "報", + "墬", + "𡓤", + "売", + "壷", + "夆", + "多", + "夢", + "奢", + "𡚨", + "𡛪", + "姬", + "娛", + "娧", + "姘", + "婦", + "㛮", + "㛼", + "嬈", + "嬾", + "𡧈", + "寃", + "寘", + "寧", + "寳", + "𡬘", + "寿", + "将", + "当", + "尢", + "㞁", + "屠", + "屮", + "峀", + "岍", + "𡷤", + "嵃", + "𡷦", + "嵮", + "嵫", + "嵼", + "巡", + "巢", + "㠯", + "巽", + "帨", + "帽", + "幩", + "㡢", + "𢆃", + "㡼", + "庰", + "庳", + "庶", + "廊", + "𪎒", + "廾", + "𢌱", + "舁", + "弢", + "㣇", + "𣊸", + "𦇚", + "形", + "彫", + "㣣", + "徚", + "忍", + "志", + "忹", + "悁", + "㤺", + "㤜", + "悔", + "𢛔", + "惇", + "慈", + "慌", + "慎", + "慌", + "慺", + "憎", + "憲", + "憤", + "憯", + "懞", + "懲", + "懶", + "成", + "戛", + "扝", + "抱", + "拔", + "捐", + "𢬌", + "挽", + "拼", + "捨", + "掃", + "揤", + "𢯱", + "搢", + "揅", + "掩", + "㨮", + "摩", + "摾", + "撝", + "摷", + "㩬", + "敏", + "敬", + "𣀊", + "旣", + "書", + "晉", + "㬙", + "暑", + "㬈", + "㫤", + "冒", + "冕", + "最", + "暜", + "肭", + "䏙", + "朗", + "望", + "朡", + "杞", + "杓", + "𣏃", + "㭉", + "柺", + "枅", + "桒", + "梅", + "𣑭", + "梎", + "栟", + "椔", + "㮝", + "楂", + "榣", + "槪", + "檨", + "𣚣", + "櫛", + "㰘", + "次", + "𣢧", + "歔", + "㱎", + "歲", + "殟", + "殺", + "殻", + "𣪍", + "𡴋", + "𣫺", + "汎", + "𣲼", + "沿", + "泍", + "汧", + "洖", + "派", + "海", + "流", + "浩", + "浸", + "涅", + "𣴞", + "洴", + "港", + "湮", + "㴳", + "滋", + "滇", + "𣻑", + "淹", + "潮", + "𣽞", + "𣾎", + "濆", + "瀹", + "瀞", + "瀛", + "㶖", + "灊", + "災", + "灷", + "炭", + "𠔥", + "煅", + "𤉣", + "熜", + "𤎫", + "爨", + "爵", + "牐", + "𤘈", + "犀", + "犕", + "𤜵", + "𤠔", + "獺", + "王", + "㺬", + "玥", + "㺸", + "瑇", + "瑜", + "瑱", + "璅", + "瓊", + "㼛", + "甤", + "𤰶", + "甾", + "𤲒", + "異", + "𢆟", + "瘐", + "𤾡", + "𤾸", + "𥁄", + "㿼", + "䀈", + "直", + "𥃳", + "𥃲", + "𥄙", + "𥄳", + "眞", + "真", + "睊", + "䀹", + "瞋", + "䁆", + "䂖", + "𥐝", + "硎", + "碌", + "磌", + "䃣", + "𥘦", + "祖", + "𥚚", + "𥛅", + "福", + "秫", + "䄯", + "穀", + "穊", + "穏", + "𥥼", + "𥪧", + "竮", + "䈂", + "𥮫", + "篆", + "築", + "䈧", + "𥲀", + "糒", + "䊠", + "糨", + "糣", + "紀", + "𥾆", + "絣", + "䌁", + "緇", + "縂", + "繅", + "䌴", + "𦈨", + "𦉇", + "䍙", + "𦋙", + "罺", + "𦌾", + "羕", + "翺", + "者", + "𦓚", + "𦔣", + "聠", + "𦖨", + "聰", + "𣍟", + "䏕", + "育", + "脃", + "䐋", + "脾", + "媵", + "𦞧", + "𦞵", + "𣎓", + "𣎜", + "舁", + "舄", + "辞", + "䑫", + "芑", + "芋", + "芝", + "劳", + "花", + "芳", + "芽", + "苦", + "𦬼", + "若", + "茝", + "荣", + "莭", + "茣", + "莽", + "菧", + "著", + "荓", + "菊", + "菌", + "菜", + "𦰶", + "𦵫", + "𦳕", + "䔫", + "蓱", + "蓳", + "蔖", + "𧏊", + "蕤", + "𦼬", + "䕝", + "䕡", + "𦾱", + "𧃒", + "䕫", + "虐", + "虜", + "虧", + "虩", + "蚩", + "蚈", + "蜎", + "蛢", + "蝹", + "蜨", + "蝫", + "螆", + "䗗", + "蟡", + "蠁", + "䗹", + "衠", + "衣", + "𧙧", + "裗", + "裞", + "䘵", + "裺", + "㒻", + "𧢮", + "𧥦", + "䚾", + "䛇", + "誠", + "諭", + "變", + "豕", + "𧲨", + "貫", + "賁", + "贛", + "起", + "𧼯", + "𠠄", + "跋", + "趼", + "跰", + "𠣞", + "軔", + "輸", + "𨗒", + "𨗭", + "邔", + "郱", + "鄑", + "𨜮", + "鄛", + "鈸", + "鋗", + "鋘", + "鉼", + "鏹", + "鐕", + "𨯺", + "開", + "䦕", + "閷", + "𨵷", + "䧦", + "雃", + "嶲", + "霣", + "𩅅", + "𩈚", + "䩮", + "䩶", + "韠", + "𩐊", + "䪲", + "𩒖", + "頋", + "頩", + "𩖶", + "飢", + "䬳", + "餩", + "馧", + "駂", + "駾", + "䯎", + "𩬰", + "鬒", + "鱀", + "鳽", + "䳎", + "䳭", + "鵧", + "𪃎", + "䳸", + "𪄅", + "𪈎", + "𪊑", + "麻", + "䵖", + "黹", + "黾", + "鼅", + "鼏", + "鼖", + "鼻", + "𪘀", + None, + None, + None, + None, + None, + None, + None, +) diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/AUTHORS.txt b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/AUTHORS.txt new file mode 100644 index 0000000..0e63548 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/AUTHORS.txt @@ -0,0 +1,760 @@ +@Switch01 +A_Rog +Aakanksha Agrawal +Abhinav Sagar +ABHYUDAY PRATAP SINGH +abs51295 +AceGentile +Adam Chainz +Adam Tse +Adam Wentz +admin +Adrien Morison +ahayrapetyan +Ahilya +AinsworthK +Akash Srivastava +Alan Yee +Albert Tugushev +Albert-Guan +albertg +Alberto Sottile +Aleks Bunin +Ales Erjavec +Alethea Flowers +Alex Gaynor +Alex Grönholm +Alex Hedges +Alex Loosley +Alex Morega +Alex Stachowiak +Alexander Shtyrov +Alexandre Conrad +Alexey Popravka +Aleš Erjavec +Alli +Ami Fischman +Ananya Maiti +Anatoly Techtonik +Anders Kaseorg +Andre Aguiar +Andreas Lutro +Andrei Geacar +Andrew Gaul +Andrew Shymanel +Andrey Bienkowski +Andrey Bulgakov +Andrés Delfino +Andy Freeland +Andy Kluger +Ani Hayrapetyan +Aniruddha Basak +Anish Tambe +Anrs Hu +Anthony Sottile +Antoine Musso +Anton Ovchinnikov +Anton Patrushev +Antonio Alvarado Hernandez +Antony Lee +Antti Kaihola +Anubhav Patel +Anudit Nagar +Anuj Godase +AQNOUCH Mohammed +AraHaan +Arindam Choudhury +Armin Ronacher +Artem +Arun Babu Neelicattu +Ashley Manton +Ashwin Ramaswami +atse +Atsushi Odagiri +Avinash Karhana +Avner Cohen +Awit (Ah-Wit) Ghirmai +Baptiste Mispelon +Barney Gale +barneygale +Bartek Ogryczak +Bastian Venthur +Ben Bodenmiller +Ben Darnell +Ben Hoyt +Ben Mares +Ben Rosser +Bence Nagy +Benjamin Peterson +Benjamin VanEvery +Benoit Pierre +Berker Peksag +Bernard +Bernard Tyers +Bernardo B. Marques +Bernhard M. Wiedemann +Bertil Hatt +Bhavam Vidyarthi +Blazej Michalik +Bogdan Opanchuk +BorisZZZ +Brad Erickson +Bradley Ayers +Brandon L. Reiss +Brandt Bucher +Brett Randall +Brett Rosen +Brian Cristante +Brian Rosner +briantracy +BrownTruck +Bruno Oliveira +Bruno Renié +Bruno S +Bstrdsmkr +Buck Golemon +burrows +Bussonnier Matthias +bwoodsend +c22 +Caleb Martinez +Calvin Smith +Carl Meyer +Carlos Liam +Carol Willing +Carter Thayer +Cass +Chandrasekhar Atina +Chih-Hsuan Yen +Chris Brinker +Chris Hunt +Chris Jerdonek +Chris Kuehl +Chris McDonough +Chris Pawley +Chris Pryer +Chris Wolfe +Christian Clauss +Christian Heimes +Christian Oudard +Christoph Reiter +Christopher Hunt +Christopher Snyder +cjc7373 +Clark Boylan +Claudio Jolowicz +Clay McClure +Cody +Cody Soyland +Colin Watson +Collin Anderson +Connor Osborn +Cooper Lees +Cooper Ry Lees +Cory Benfield +Cory Wright +Craig Kerstiens +Cristian Sorinel +Cristina +Cristina Muñoz +Curtis Doty +cytolentino +Daan De Meyer +Dale +Damian +Damian Quiroga +Damian Shaw +Dan Black +Dan Savilonis +Dan Sully +Dane Hillard +daniel +Daniel Collins +Daniel Hahler +Daniel Holth +Daniel Jost +Daniel Katz +Daniel Shaulov +Daniele Esposti +Daniele Nicolodi +Daniele Procida +Daniil Konovalenko +Danny Hermes +Danny McClanahan +Darren Kavanagh +Dav Clark +Dave Abrahams +Dave Jones +David Aguilar +David Black +David Bordeynik +David Caro +David D Lowe +David Evans +David Hewitt +David Linke +David Poggi +David Pursehouse +David Runge +David Tucker +David Wales +Davidovich +ddelange +Deepak Sharma +Deepyaman Datta +Denise Yu +dependabot[bot] +derwolfe +Desetude +Devesh Kumar Singh +Diego Caraballo +Diego Ramirez +DiegoCaraballo +Dimitri Merejkowsky +Dimitri Papadopoulos +Dirk Stolle +Dmitry Gladkov +Dmitry Volodin +Domen Kožar +Dominic Davis-Foster +Donald Stufft +Dongweiming +doron zarhi +Dos Moonen +Douglas Thor +DrFeathers +Dustin Ingram +Dwayne Bailey +Ed Morley +Edgar Ramírez +Edgar Ramírez Mondragón +Ee Durbin +Efflam Lemaillet +efflamlemaillet +Eitan Adler +ekristina +elainechan +Eli Schwartz +Elisha Hollander +Ellen Marie Dash +Emil Burzo +Emil Styrke +Emmanuel Arias +Endoh Takanao +enoch +Erdinc Mutlu +Eric Cousineau +Eric Gillingham +Eric Hanchrow +Eric Hopper +Erik M. Bray +Erik Rose +Erwin Janssen +Eugene Vereshchagin +everdimension +Federico +Felipe Peter +Felix Yan +fiber-space +Filip Kokosiński +Filipe Laíns +Finn Womack +finnagin +Flavio Amurrio +Florian Briand +Florian Rathgeber +Francesco +Francesco Montesano +Frost Ming +Gabriel Curio +Gabriel de Perthuis +Garry Polley +gavin +gdanielson +Geoffrey Sneddon +George Song +Georgi Valkov +Georgy Pchelkin +ghost +Giftlin Rajaiah +gizmoguy1 +gkdoc +Godefroid Chapelle +Gopinath M +GOTO Hayato +gousaiyang +gpiks +Greg Roodt +Greg Ward +Guilherme Espada +Guillaume Seguin +gutsytechster +Guy Rozendorn +Guy Tuval +gzpan123 +Hanjun Kim +Hari Charan +Harsh Vardhan +harupy +Harutaka Kawamura +hauntsaninja +Henrich Hartzer +Henry Schreiner +Herbert Pfennig +Holly Stotelmyer +Honnix +Hsiaoming Yang +Hugo Lopes Tavares +Hugo van Kemenade +Hugues Bruant +Hynek Schlawack +Ian Bicking +Ian Cordasco +Ian Lee +Ian Stapleton Cordasco +Ian Wienand +Igor Kuzmitshov +Igor Sobreira +Ilan Schnell +Illia Volochii +Ilya Baryshev +Inada Naoki +Ionel Cristian Mărieș +Ionel Maries Cristian +Itamar Turner-Trauring +Ivan Pozdeev +J. Nick Koston +Jacob Kim +Jacob Walls +Jaime Sanz +jakirkham +Jakub Kuczys +Jakub Stasiak +Jakub Vysoky +Jakub Wilk +James Cleveland +James Curtin +James Firth +James Gerity +James Polley +Jan Pokorný +Jannis Leidel +Jarek Potiuk +jarondl +Jason Curtis +Jason R. Coombs +JasonMo +JasonMo1 +Jay Graves +Jean Abou Samra +Jean-Christophe Fillion-Robin +Jeff Barber +Jeff Dairiki +Jeff Widman +Jelmer Vernooij +jenix21 +Jeremy Stanley +Jeremy Zafran +Jesse Rittner +Jiashuo Li +Jim Fisher +Jim Garrison +Jiun Bae +Jivan Amara +Joe Bylund +Joe Michelini +John Paton +John T. Wodder II +John-Scott Atlakson +johnthagen +Jon Banafato +Jon Dufresne +Jon Parise +Jonas Nockert +Jonathan Herbert +Joonatan Partanen +Joost Molenaar +Jorge Niedbalski +Joseph Bylund +Joseph Long +Josh Bronson +Josh Hansen +Josh Schneier +Joshua +Juan Luis Cano Rodríguez +Juanjo Bazán +Judah Rand +Julian Berman +Julian Gethmann +Julien Demoor +Jussi Kukkonen +jwg4 +Jyrki Pulliainen +Kai Chen +Kai Mueller +Kamal Bin Mustafa +kasium +kaustav haldar +keanemind +Keith Maxwell +Kelsey Hightower +Kenneth Belitzky +Kenneth Reitz +Kevin Burke +Kevin Carter +Kevin Frommelt +Kevin R Patterson +Kexuan Sun +Kit Randel +Klaas van Schelven +KOLANICH +kpinc +Krishna Oza +Kumar McMillan +Kurt McKee +Kyle Persohn +lakshmanaram +Laszlo Kiss-Kollar +Laurent Bristiel +Laurent LAPORTE +Laurie O +Laurie Opperman +layday +Leon Sasson +Lev Givon +Lincoln de Sousa +Lipis +lorddavidiii +Loren Carvalho +Lucas Cimon +Ludovic Gasc +Lukas Geiger +Lukas Juhrich +Luke Macken +Luo Jiebin +luojiebin +luz.paz +László Kiss Kollár +M00nL1ght +Marc Abramowitz +Marc Tamlyn +Marcus Smith +Mariatta +Mark Kohler +Mark Williams +Markus Hametner +Martey Dodoo +Martin Fischer +Martin Häcker +Martin Pavlasek +Masaki +Masklinn +Matej Stuchlik +Mathew Jennings +Mathieu Bridon +Mathieu Kniewallner +Matt Bacchi +Matt Good +Matt Maker +Matt Robenolt +matthew +Matthew Einhorn +Matthew Feickert +Matthew Gilliard +Matthew Iversen +Matthew Treinish +Matthew Trumbell +Matthew Willson +Matthias Bussonnier +mattip +Maurits van Rees +Max W Chase +Maxim Kurnikov +Maxime Rouyrre +mayeut +mbaluna +mdebi +memoselyk +meowmeowcat +Michael +Michael Aquilina +Michael E. Karpeles +Michael Klich +Michael Mintz +Michael Williamson +michaelpacer +Michał Górny +Mickaël Schoentgen +Miguel Araujo Perez +Mihir Singh +Mike +Mike Hendricks +Min RK +MinRK +Miro Hrončok +Monica Baluna +montefra +Monty Taylor +Muha Ajjan‮ +Nadav Wexler +Nahuel Ambrosini +Nate Coraor +Nate Prewitt +Nathan Houghton +Nathaniel J. Smith +Nehal J Wani +Neil Botelho +Nguyễn Gia Phong +Nicholas Serra +Nick Coghlan +Nick Stenning +Nick Timkovich +Nicolas Bock +Nicole Harris +Nikhil Benesch +Nikhil Ladha +Nikita Chepanov +Nikolay Korolev +Nipunn Koorapati +Nitesh Sharma +Niyas Sait +Noah +Noah Gorny +Nowell Strite +NtaleGrey +nvdv +OBITORASU +Ofek Lev +ofrinevo +Oliver Freund +Oliver Jeeves +Oliver Mannion +Oliver Tonnhofer +Olivier Girardot +Olivier Grisel +Ollie Rutherfurd +OMOTO Kenji +Omry Yadan +onlinejudge95 +Oren Held +Oscar Benjamin +Oz N Tiram +Pachwenko +Patrick Dubroy +Patrick Jenkins +Patrick Lawson +patricktokeeffe +Patrik Kopkan +Paul Ganssle +Paul Kehrer +Paul Moore +Paul Nasrat +Paul Oswald +Paul van der Linden +Paulus Schoutsen +Pavel Safronov +Pavithra Eswaramoorthy +Pawel Jasinski +Paweł Szramowski +Pekka Klärck +Peter Gessler +Peter Lisák +Peter Waller +petr-tik +Phaneendra Chiruvella +Phil Elson +Phil Freo +Phil Pennock +Phil Whelan +Philip Jägenstedt +Philip Molloy +Philippe Ombredanne +Pi Delport +Pierre-Yves Rofes +Pieter Degroote +pip +Prabakaran Kumaresshan +Prabhjyotsing Surjit Singh Sodhi +Prabhu Marappan +Pradyun Gedam +Prashant Sharma +Pratik Mallya +pre-commit-ci[bot] +Preet Thakkar +Preston Holmes +Przemek Wrzos +Pulkit Goyal +q0w +Qiangning Hong +Qiming Xu +Quentin Lee +Quentin Pradet +R. David Murray +Rafael Caricio +Ralf Schmitt +Razzi Abuissa +rdb +Reece Dunham +Remi Rampin +Rene Dudfield +Riccardo Magliocchetti +Riccardo Schirone +Richard Jones +Richard Si +Ricky Ng-Adam +Rishi +RobberPhex +Robert Collins +Robert McGibbon +Robert Pollak +Robert T. McGibbon +robin elisha robinson +Roey Berman +Rohan Jain +Roman Bogorodskiy +Roman Donchenko +Romuald Brunet +ronaudinho +Ronny Pfannschmidt +Rory McCann +Ross Brattain +Roy Wellington Ⅳ +Ruairidh MacLeod +Russell Keith-Magee +Ryan Shepherd +Ryan Wooden +ryneeverett +Sachi King +Salvatore Rinchiera +sandeepkiran-js +Sander Van Balen +Savio Jomton +schlamar +Scott Kitterman +Sean +seanj +Sebastian Jordan +Sebastian Schaetz +Segev Finer +SeongSoo Cho +Sergey Vasilyev +Seth Michael Larson +Seth Woodworth +Shahar Epstein +Shantanu +shireenrao +Shivansh-007 +Shlomi Fish +Shovan Maity +Simeon Visser +Simon Cross +Simon Pichugin +sinoroc +sinscary +snook92 +socketubs +Sorin Sbarnea +Srinivas Nyayapati +Stavros Korokithakis +Stefan Scherfke +Stefano Rivera +Stephan Erb +Stephen Rosen +stepshal +Steve (Gadget) Barnes +Steve Barnes +Steve Dower +Steve Kowalik +Steven Myint +Steven Silvester +stonebig +studioj +Stéphane Bidoul +Stéphane Bidoul (ACSONE) +Stéphane Klein +Sumana Harihareswara +Surbhi Sharma +Sviatoslav Sydorenko +Swat009 +Sylvain +Takayuki SHIMIZUKAWA +Taneli Hukkinen +tbeswick +Thiago +Thijs Triemstra +Thomas Fenzl +Thomas Grainger +Thomas Guettler +Thomas Johansson +Thomas Kluyver +Thomas Smith +Thomas VINCENT +Tim D. Smith +Tim Gates +Tim Harder +Tim Heap +tim smith +tinruufu +Tobias Hermann +Tom Forbes +Tom Freudenheim +Tom V +Tomas Hrnciar +Tomas Orsava +Tomer Chachamu +Tommi Enenkel | AnB +Tomáš Hrnčiar +Tony Beswick +Tony Narlock +Tony Zhaocheng Tan +TonyBeswick +toonarmycaptain +Toshio Kuratomi +toxinu +Travis Swicegood +Tushar Sadhwani +Tzu-ping Chung +Valentin Haenel +Victor Stinner +victorvpaulo +Vikram - Google +Viktor Szépe +Ville Skyttä +Vinay Sajip +Vincent Philippon +Vinicyus Macedo +Vipul Kumar +Vitaly Babiy +Vladimir Fokow +Vladimir Rutsky +W. Trevor King +Wil Tan +Wilfred Hughes +William Edwards +William ML Leslie +William T Olson +William Woodruff +Wilson Mo +wim glenn +Winson Luk +Wolfgang Maier +Wu Zhenyu +XAMES3 +Xavier Fernandez +xoviat +xtreak +YAMAMOTO Takashi +Yen Chi Hsuan +Yeray Diaz Diaz +Yoval P +Yu Jian +Yuan Jing Vincent Yan +Yusuke Hayashi +Zearin +Zhiping Deng +ziebam +Zvezdan Petkovic +Łukasz Langa +Роман Донченко +Семён Марьясин +‮rekcäH nitraM‮ diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/INSTALLER b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/LICENSE.txt b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/LICENSE.txt new file mode 100644 index 0000000..8e7b65e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2008-present The pip developers (see AUTHORS.txt file) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/METADATA b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/METADATA new file mode 100644 index 0000000..e5b45bd --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/METADATA @@ -0,0 +1,88 @@ +Metadata-Version: 2.1 +Name: pip +Version: 24.0 +Summary: The PyPA recommended tool for installing Python packages. +Author-email: The pip developers +License: MIT +Project-URL: Homepage, https://pip.pypa.io/ +Project-URL: Documentation, https://pip.pypa.io +Project-URL: Source, https://github.com/pypa/pip +Project-URL: Changelog, https://pip.pypa.io/en/stable/news/ +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Build Tools +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Requires-Python: >=3.7 +Description-Content-Type: text/x-rst +License-File: LICENSE.txt +License-File: AUTHORS.txt + +pip - The Python Package Installer +================================== + +.. image:: https://img.shields.io/pypi/v/pip.svg + :target: https://pypi.org/project/pip/ + :alt: PyPI + +.. image:: https://img.shields.io/pypi/pyversions/pip + :target: https://pypi.org/project/pip + :alt: PyPI - Python Version + +.. image:: https://readthedocs.org/projects/pip/badge/?version=latest + :target: https://pip.pypa.io/en/latest + :alt: Documentation + +pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes. + +Please take a look at our documentation for how to install and use pip: + +* `Installation`_ +* `Usage`_ + +We release updates regularly, with a new version every 3 months. Find more details in our documentation: + +* `Release notes`_ +* `Release process`_ + +If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms: + +* `Issue tracking`_ +* `Discourse channel`_ +* `User IRC`_ + +If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms: + +* `GitHub page`_ +* `Development documentation`_ +* `Development IRC`_ + +Code of Conduct +--------------- + +Everyone interacting in the pip project's codebases, issue trackers, chat +rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. + +.. _package installer: https://packaging.python.org/guides/tool-recommendations/ +.. _Python Package Index: https://pypi.org +.. _Installation: https://pip.pypa.io/en/stable/installation/ +.. _Usage: https://pip.pypa.io/en/stable/ +.. _Release notes: https://pip.pypa.io/en/stable/news.html +.. _Release process: https://pip.pypa.io/en/latest/development/release-process/ +.. _GitHub page: https://github.com/pypa/pip +.. _Development documentation: https://pip.pypa.io/en/latest/development +.. _Issue tracking: https://github.com/pypa/pip/issues +.. _Discourse channel: https://discuss.python.org/c/packaging +.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa +.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev +.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/RECORD b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/RECORD new file mode 100644 index 0000000..591f4f5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/RECORD @@ -0,0 +1,1005 @@ +../../../bin/pip,sha256=BpAfYh7CcchEHv3ow3QNL4jsfJikFkvvwwyBq5pb_fs,250 +../../../bin/pip3,sha256=BpAfYh7CcchEHv3ow3QNL4jsfJikFkvvwwyBq5pb_fs,250 +../../../bin/pip3.12,sha256=BpAfYh7CcchEHv3ow3QNL4jsfJikFkvvwwyBq5pb_fs,250 +pip-24.0.dist-info/AUTHORS.txt,sha256=SwXm4nkwRkmtnO1ZY-dLy7EPeoQNXMNLby5CN3GlNhY,10388 +pip-24.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip-24.0.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093 +pip-24.0.dist-info/METADATA,sha256=kNEfJ3_Vho2mee4lfJdlbd5RHIqsfQJSMUB-bOkIOeI,3581 +pip-24.0.dist-info/RECORD,, +pip-24.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip-24.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 +pip-24.0.dist-info/entry_points.txt,sha256=Fa_c0b-xGFaYxagIruvpJD6qqXmNTA02vAVIkmMj-9o,125 +pip-24.0.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +pip/__init__.py,sha256=oAk1nFpLmUVS5Ln7NxvNoGUn5Vkn6FGQjPaNDf8Q8pk,355 +pip/__main__.py,sha256=WzbhHXTbSE6gBY19mNN9m4s5o_365LOvTYSgqgbdBhE,854 +pip/__pip-runner__.py,sha256=EnrfKmKMzWAdqg_JicLCOP9Y95Ux7zHh4ObvqLtQcjo,1444 +pip/__pycache__/__init__.cpython-312.pyc,, +pip/__pycache__/__main__.cpython-312.pyc,, +pip/__pycache__/__pip-runner__.cpython-312.pyc,, +pip/_internal/__init__.py,sha256=iqZ5-YQsQV08tkUc7L806Reop6tguLFWf70ySF6be0Y,515 +pip/_internal/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/__pycache__/build_env.cpython-312.pyc,, +pip/_internal/__pycache__/cache.cpython-312.pyc,, +pip/_internal/__pycache__/configuration.cpython-312.pyc,, +pip/_internal/__pycache__/exceptions.cpython-312.pyc,, +pip/_internal/__pycache__/main.cpython-312.pyc,, +pip/_internal/__pycache__/pyproject.cpython-312.pyc,, +pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc,, +pip/_internal/__pycache__/wheel_builder.cpython-312.pyc,, +pip/_internal/build_env.py,sha256=1ESpqw0iupS_K7phZK5zshVE5Czy9BtGLFU4W6Enva8,10243 +pip/_internal/cache.py,sha256=uiYD-9F0Bv1C8ZyWE85lpzDmQf7hcUkgL99GmI8I41Q,10370 +pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132 +pip/_internal/cli/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc,, +pip/_internal/cli/__pycache__/base_command.cpython-312.pyc,, +pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc,, +pip/_internal/cli/__pycache__/command_context.cpython-312.pyc,, +pip/_internal/cli/__pycache__/main.cpython-312.pyc,, +pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc,, +pip/_internal/cli/__pycache__/parser.cpython-312.pyc,, +pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc,, +pip/_internal/cli/__pycache__/req_command.cpython-312.pyc,, +pip/_internal/cli/__pycache__/spinners.cpython-312.pyc,, +pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc,, +pip/_internal/cli/autocompletion.py,sha256=_br_5NgSxSuvPjMF0MLHzS5s6BpSkQAQHKrLK89VauM,6690 +pip/_internal/cli/base_command.py,sha256=iuVWGa2oTq7gBReo0er3Z0tXJ2oqBIC6QjDHcnDhKXY,8733 +pip/_internal/cli/cmdoptions.py,sha256=V8ggG6AtHpHKkH_6tRU0mhJaZTeqtrFpu75ghvMXXJk,30063 +pip/_internal/cli/command_context.py,sha256=RHgIPwtObh5KhMrd3YZTkl8zbVG-6Okml7YbFX4Ehg0,774 +pip/_internal/cli/main.py,sha256=Uzxt_YD1hIvB1AW5mxt6IVcht5G712AtMqdo51UMhmQ,2816 +pip/_internal/cli/main_parser.py,sha256=laDpsuBDl6kyfywp9eMMA9s84jfH2TJJn-vmL0GG90w,4338 +pip/_internal/cli/parser.py,sha256=KW6C3-7-4ErTNB0TfLTKwOdHcd-qefCeGnrOoE2r0RQ,10781 +pip/_internal/cli/progress_bars.py,sha256=So4mPoSjXkXiSHiTzzquH3VVyVD_njXlHJSExYPXAow,1968 +pip/_internal/cli/req_command.py,sha256=c7_XHABnXmD3_qlK9-r37KqdKBAcgmVKvQ2WcTrNLfc,18369 +pip/_internal/cli/spinners.py,sha256=hIJ83GerdFgFCdobIA23Jggetegl_uC4Sp586nzFbPE,5118 +pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116 +pip/_internal/commands/__init__.py,sha256=5oRO9O3dM2vGuh0bFw4HOVletryrz5HHMmmPWwJrH9U,3882 +pip/_internal/commands/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/commands/__pycache__/cache.cpython-312.pyc,, +pip/_internal/commands/__pycache__/check.cpython-312.pyc,, +pip/_internal/commands/__pycache__/completion.cpython-312.pyc,, +pip/_internal/commands/__pycache__/configuration.cpython-312.pyc,, +pip/_internal/commands/__pycache__/debug.cpython-312.pyc,, +pip/_internal/commands/__pycache__/download.cpython-312.pyc,, +pip/_internal/commands/__pycache__/freeze.cpython-312.pyc,, +pip/_internal/commands/__pycache__/hash.cpython-312.pyc,, +pip/_internal/commands/__pycache__/help.cpython-312.pyc,, +pip/_internal/commands/__pycache__/index.cpython-312.pyc,, +pip/_internal/commands/__pycache__/inspect.cpython-312.pyc,, +pip/_internal/commands/__pycache__/install.cpython-312.pyc,, +pip/_internal/commands/__pycache__/list.cpython-312.pyc,, +pip/_internal/commands/__pycache__/search.cpython-312.pyc,, +pip/_internal/commands/__pycache__/show.cpython-312.pyc,, +pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc,, +pip/_internal/commands/__pycache__/wheel.cpython-312.pyc,, +pip/_internal/commands/cache.py,sha256=xg76_ZFEBC6zoQ3gXLRfMZJft4z2a0RwH4GEFZC6nnU,7944 +pip/_internal/commands/check.py,sha256=Rb13Q28yoLh0j1gpx5SU0jlResNct21eQCRsnaO9xKA,1782 +pip/_internal/commands/completion.py,sha256=HT4lD0bgsflHq2IDgYfiEdp7IGGtE7s6MgI3xn0VQEw,4287 +pip/_internal/commands/configuration.py,sha256=n98enwp6y0b5G6fiRQjaZo43FlJKYve_daMhN-4BRNc,9766 +pip/_internal/commands/debug.py,sha256=63972uUCeMIGOdMMVeIUGrOjTOqTVWplFC82a-hcKyA,6777 +pip/_internal/commands/download.py,sha256=e4hw088zGo26WmJaMIRvCniLlLmoOjqolGyfHjsCkCQ,5335 +pip/_internal/commands/freeze.py,sha256=qrIHS_-c6JPrQ92hMhAv9kkl0bHgFpRLwYJDdbcYr1o,3243 +pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703 +pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132 +pip/_internal/commands/index.py,sha256=CNXQer_PeZKSJooURcCFCBEKGfwyNoUWYP_MWczAcOM,4775 +pip/_internal/commands/inspect.py,sha256=2wSPt9yfr3r6g-s2S5L6PvRtaHNVyb4TuodMStJ39cw,3188 +pip/_internal/commands/install.py,sha256=VxDd-BD3a27ApeE2OK34rfBXS6Zo2wtemK9-HCwPqxM,28782 +pip/_internal/commands/list.py,sha256=-QbpPuGDiGN1SdThsk2ml8beBnepliefbGhMAN8tkzU,12547 +pip/_internal/commands/search.py,sha256=sbBZiARRc050QquOKcCvOr2K3XLsoYebLKZGRi__iUI,5697 +pip/_internal/commands/show.py,sha256=t5jia4zcYJRJZy4U_Von7zMl03hJmmcofj6oDNTnj7Y,6419 +pip/_internal/commands/uninstall.py,sha256=OIqO9tqadY8kM4HwhFf1Q62fUIp7v8KDrTRo8yWMz7Y,3886 +pip/_internal/commands/wheel.py,sha256=CSnX8Pmf1oPCnd7j7bn1_f58G9KHNiAblvVJ5zykN-A,6476 +pip/_internal/configuration.py,sha256=XkAiBS0hpzsM-LF0Qu5hvPWO_Bs67-oQKRYFBuMbESs,14006 +pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858 +pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/distributions/__pycache__/base.cpython-312.pyc,, +pip/_internal/distributions/__pycache__/installed.cpython-312.pyc,, +pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc,, +pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc,, +pip/_internal/distributions/base.py,sha256=oRSEvnv2ZjBnargamnv2fcJa1n6gUDKaW0g6CWSEpWs,1743 +pip/_internal/distributions/installed.py,sha256=QinHFbWAQ8oE0pbD8MFZWkwlnfU1QYTccA1vnhrlYOU,842 +pip/_internal/distributions/sdist.py,sha256=4K3V0VNMllHbBzCJibjwd_tylUKpmIdu2AQyhplvCQo,6709 +pip/_internal/distributions/wheel.py,sha256=-ma3sOtUQj0AxXCEb6_Fhmjl3nh4k3A0HC2taAb2N-4,1277 +pip/_internal/exceptions.py,sha256=TmF1iNFEneSWaemwlg6a5bpPuq2cMHK7d1-SvjsQHb0,23634 +pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30 +pip/_internal/index/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/index/__pycache__/collector.cpython-312.pyc,, +pip/_internal/index/__pycache__/package_finder.cpython-312.pyc,, +pip/_internal/index/__pycache__/sources.cpython-312.pyc,, +pip/_internal/index/collector.py,sha256=sH0tL_cOoCk6pLLfCSGVjFM4rPEJtllF-VobvAvLSH4,16590 +pip/_internal/index/package_finder.py,sha256=S_nC8gzVIMY6ikWfKoSOzRtoesUqnfNhAPl_BwSOusA,37843 +pip/_internal/index/sources.py,sha256=dJegiR9f86kslaAHcv9-R5L_XBf5Rzm_FkyPteDuPxI,8688 +pip/_internal/locations/__init__.py,sha256=Dh8LJWG8LRlDK4JIj9sfRF96TREzE--N_AIlx7Tqoe4,15365 +pip/_internal/locations/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc,, +pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc,, +pip/_internal/locations/__pycache__/base.cpython-312.pyc,, +pip/_internal/locations/_distutils.py,sha256=H9ZHK_35rdDV1Qsmi4QeaBULjFT4Mbu6QuoVGkJ6QHI,6009 +pip/_internal/locations/_sysconfig.py,sha256=jyNVtUfMIf0mtyY-Xp1m9yQ8iwECozSVVFmjkN9a2yw,7680 +pip/_internal/locations/base.py,sha256=RQiPi1d4FVM2Bxk04dQhXZ2PqkeljEL2fZZ9SYqIQ78,2556 +pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340 +pip/_internal/metadata/__init__.py,sha256=9pU3W3s-6HtjFuYhWcLTYVmSaziklPv7k2x8p7X1GmA,4339 +pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/metadata/__pycache__/_json.cpython-312.pyc,, +pip/_internal/metadata/__pycache__/base.cpython-312.pyc,, +pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc,, +pip/_internal/metadata/_json.py,sha256=Rz5M5ciSNvITwaTQR6NfN8TgKgM5WfTws4D6CFknovE,2627 +pip/_internal/metadata/base.py,sha256=l3Wgku4xlgr8s4p6fS-3qQ4QKOpPbWLRwi5d9omEFG4,25907 +pip/_internal/metadata/importlib/__init__.py,sha256=jUUidoxnHcfITHHaAWG1G2i5fdBYklv_uJcjo2x7VYE,135 +pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc,, +pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc,, +pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc,, +pip/_internal/metadata/importlib/_compat.py,sha256=GAe_prIfCE4iUylrnr_2dJRlkkBVRUbOidEoID7LPoE,1882 +pip/_internal/metadata/importlib/_dists.py,sha256=UPl1wUujFqiwiltRJ1tMF42WRINO1sSpNNlYQ2mX0mk,8297 +pip/_internal/metadata/importlib/_envs.py,sha256=XTaFIYERP2JF0QUZuPx2ETiugXbPEcZ8q8ZKeht6Lpc,7456 +pip/_internal/metadata/pkg_resources.py,sha256=opjw4IBSqHvie6sXJ_cbT42meygoPEUfNURJuWZY7sk,10035 +pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63 +pip/_internal/models/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/models/__pycache__/candidate.cpython-312.pyc,, +pip/_internal/models/__pycache__/direct_url.cpython-312.pyc,, +pip/_internal/models/__pycache__/format_control.cpython-312.pyc,, +pip/_internal/models/__pycache__/index.cpython-312.pyc,, +pip/_internal/models/__pycache__/installation_report.cpython-312.pyc,, +pip/_internal/models/__pycache__/link.cpython-312.pyc,, +pip/_internal/models/__pycache__/scheme.cpython-312.pyc,, +pip/_internal/models/__pycache__/search_scope.cpython-312.pyc,, +pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc,, +pip/_internal/models/__pycache__/target_python.cpython-312.pyc,, +pip/_internal/models/__pycache__/wheel.cpython-312.pyc,, +pip/_internal/models/candidate.py,sha256=hEPu8VdGE5qVASv6vLz-R-Rgh5-7LMbai1jgthMCd8M,931 +pip/_internal/models/direct_url.py,sha256=FwouYBKcqckh7B-k2H3HVgRhhFTukFwqiS3kfvtFLSk,6889 +pip/_internal/models/format_control.py,sha256=wtsQqSK9HaUiNxQEuB-C62eVimw6G4_VQFxV9-_KDBE,2486 +pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030 +pip/_internal/models/installation_report.py,sha256=zRVZoaz-2vsrezj_H3hLOhMZCK9c7TbzWgC-jOalD00,2818 +pip/_internal/models/link.py,sha256=XirOAGv1jgMu7vu87kuPbohGj7VHpwVrd2q3KUgVQNg,20777 +pip/_internal/models/scheme.py,sha256=3EFQp_ICu_shH1-TBqhl0QAusKCPDFOlgHFeN4XowWs,738 +pip/_internal/models/search_scope.py,sha256=ASVyyZxiJILw7bTIVVpJx8J293M3Hk5F33ilGn0e80c,4643 +pip/_internal/models/selection_prefs.py,sha256=KZdi66gsR-_RUXUr9uejssk3rmTHrQVJWeNA2sV-VSY,1907 +pip/_internal/models/target_python.py,sha256=34EkorrMuRvRp-bjqHKJ-bOO71m9xdjN2b8WWFEC2HU,4272 +pip/_internal/models/wheel.py,sha256=YqazoIZyma_Q1ejFa1C7NHKQRRWlvWkdK96VRKmDBeI,3600 +pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50 +pip/_internal/network/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/network/__pycache__/auth.cpython-312.pyc,, +pip/_internal/network/__pycache__/cache.cpython-312.pyc,, +pip/_internal/network/__pycache__/download.cpython-312.pyc,, +pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc,, +pip/_internal/network/__pycache__/session.cpython-312.pyc,, +pip/_internal/network/__pycache__/utils.cpython-312.pyc,, +pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc,, +pip/_internal/network/auth.py,sha256=TC-OcW2KU4W6R1hU4qPgQXvVH54adACpZz6sWq-R9NA,20541 +pip/_internal/network/cache.py,sha256=48A971qCzKNFvkb57uGEk7-0xaqPS0HWj2711QNTxkU,3935 +pip/_internal/network/download.py,sha256=i0Tn55CD5D7XYEFY3TxiYaCf0OaaTQ6SScNgCsSeV14,6086 +pip/_internal/network/lazy_wheel.py,sha256=2PXVduYZPCPZkkQFe1J1GbfHJWeCU--FXonGyIfw9eU,7638 +pip/_internal/network/session.py,sha256=9tqEDD8JiVaFdplOEXJxNo9cjRfBZ6RIa0yQQ_qBNiM,18698 +pip/_internal/network/utils.py,sha256=6A5SrUJEEUHxbGtbscwU2NpCyz-3ztiDlGWHpRRhsJ8,4073 +pip/_internal/network/xmlrpc.py,sha256=sAxzOacJ-N1NXGPvap9jC3zuYWSnnv3GXtgR2-E2APA,1838 +pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/operations/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/operations/__pycache__/check.cpython-312.pyc,, +pip/_internal/operations/__pycache__/freeze.cpython-312.pyc,, +pip/_internal/operations/__pycache__/prepare.cpython-312.pyc,, +pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc,, +pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc,, +pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc,, +pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc,, +pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc,, +pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc,, +pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc,, +pip/_internal/operations/build/build_tracker.py,sha256=z-H5DOknZdBa3dh2Vq6VBMY5qLYIKmlj2p6CGZK5Lc8,4832 +pip/_internal/operations/build/metadata.py,sha256=9S0CUD8U3QqZeXp-Zyt8HxwU90lE4QrnYDgrqZDzBnc,1422 +pip/_internal/operations/build/metadata_editable.py,sha256=VLL7LvntKE8qxdhUdEJhcotFzUsOSI8NNS043xULKew,1474 +pip/_internal/operations/build/metadata_legacy.py,sha256=o-eU21As175hDC7dluM1fJJ_FqokTIShyWpjKaIpHZw,2198 +pip/_internal/operations/build/wheel.py,sha256=sT12FBLAxDC6wyrDorh8kvcZ1jG5qInCRWzzP-UkJiQ,1075 +pip/_internal/operations/build/wheel_editable.py,sha256=yOtoH6zpAkoKYEUtr8FhzrYnkNHQaQBjWQ2HYae1MQg,1417 +pip/_internal/operations/build/wheel_legacy.py,sha256=C9j6rukgQI1n_JeQLoZGuDdfUwzCXShyIdPTp6edbMQ,3064 +pip/_internal/operations/check.py,sha256=fsqA88iGaqftCr2tlP3sSU202CSkoODRtW0O-JU9M4Y,6806 +pip/_internal/operations/freeze.py,sha256=uqoeTAf6HOYVMR2UgAT8N85UZoGEVEoQdan_Ao6SOfk,9816 +pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51 +pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc,, +pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc,, +pip/_internal/operations/install/editable_legacy.py,sha256=YeR0KadWXw_ZheC1NtAG1qVIEkOgRGHc23x-YtGW7NU,1282 +pip/_internal/operations/install/wheel.py,sha256=9hGb1c4bRnPIb2FG7CtUSPfPxqprmHQBtwIAlWPNTtE,27311 +pip/_internal/operations/prepare.py,sha256=57Oq87HfunX3Rbqp47FdaJr9cHbAKUm_3gv7WhBAqbE,28128 +pip/_internal/pyproject.py,sha256=4Xszp11xgr126yzG6BbJA0oaQ9WXuhb0jyUb-y_6lPQ,7152 +pip/_internal/req/__init__.py,sha256=TELFgZOof3lhMmaICVWL9U7PlhXo9OufokbMAJ6J2GI,2738 +pip/_internal/req/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/req/__pycache__/constructors.cpython-312.pyc,, +pip/_internal/req/__pycache__/req_file.cpython-312.pyc,, +pip/_internal/req/__pycache__/req_install.cpython-312.pyc,, +pip/_internal/req/__pycache__/req_set.cpython-312.pyc,, +pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc,, +pip/_internal/req/constructors.py,sha256=8hlY56imEthLORRwmloyKz3YOyXymIaKsNB6P9ewvNI,19018 +pip/_internal/req/req_file.py,sha256=M8ttOZL-PwAj7scPElhW3ZD2hiD9mm_6FJAGIbwAzEI,17790 +pip/_internal/req/req_install.py,sha256=wtOPxkyRSM8comTks8oL1Gp2oyGqbH7JwIDRci2QiPk,35460 +pip/_internal/req/req_set.py,sha256=iMYDUToSgkxFyrP_OrTtPSgw4dwjRyGRDpGooTqeA4Y,4704 +pip/_internal/req/req_uninstall.py,sha256=nmvTQaRCC0iu-5Tw0djlXJhSj6WmqHRvT3qkkEdC35E,24551 +pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/resolution/__pycache__/base.cpython-312.pyc,, +pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583 +pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc,, +pip/_internal/resolution/legacy/resolver.py,sha256=Xk24jQ62GvLr4Mc7IjN_qiO88qp0BImzVmPIFz9QLOE,24025 +pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc,, +pip/_internal/resolution/resolvelib/base.py,sha256=jg5COmHLhmBIKOR-4spdJD3jyULYa1BdsqiBu2YJnJ4,5173 +pip/_internal/resolution/resolvelib/candidates.py,sha256=19Ki91Po-MSxBknGIfOGkaWkFdOznN0W_nKv7jL28L0,21052 +pip/_internal/resolution/resolvelib/factory.py,sha256=vqqk-hjchdhShwWVdeW2_A-5ZblLhE_nC_v3Mhz4Svc,32292 +pip/_internal/resolution/resolvelib/found_candidates.py,sha256=hvL3Hoa9VaYo-qEOZkBi2Iqw251UDxPz-uMHVaWmLpE,5705 +pip/_internal/resolution/resolvelib/provider.py,sha256=4t23ivjruqM6hKBX1KpGiTt-M4HGhRcZnGLV0c01K7U,9824 +pip/_internal/resolution/resolvelib/reporter.py,sha256=YFm9hQvz4DFCbjZeFTQ56hTz3Ac-mDBnHkeNRVvMHLY,3100 +pip/_internal/resolution/resolvelib/requirements.py,sha256=-kJONP0WjDfdTvBAs2vUXPgAnOyNIBEAXY4b72ogtPE,5696 +pip/_internal/resolution/resolvelib/resolver.py,sha256=nLJOsVMEVi2gQUVJoUFKMZAeu2f7GRMjGMvNSWyz0Bc,12592 +pip/_internal/self_outdated_check.py,sha256=saxQLB8UzIFtMScquytG10TOTsYVFJQ_mkW1NY-46wE,8378 +pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_internal/utils/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc,, +pip/_internal/utils/__pycache__/_log.cpython-312.pyc,, +pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc,, +pip/_internal/utils/__pycache__/compat.cpython-312.pyc,, +pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc,, +pip/_internal/utils/__pycache__/datetime.cpython-312.pyc,, +pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc,, +pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc,, +pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc,, +pip/_internal/utils/__pycache__/encoding.cpython-312.pyc,, +pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc,, +pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc,, +pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc,, +pip/_internal/utils/__pycache__/glibc.cpython-312.pyc,, +pip/_internal/utils/__pycache__/hashes.cpython-312.pyc,, +pip/_internal/utils/__pycache__/logging.cpython-312.pyc,, +pip/_internal/utils/__pycache__/misc.cpython-312.pyc,, +pip/_internal/utils/__pycache__/models.cpython-312.pyc,, +pip/_internal/utils/__pycache__/packaging.cpython-312.pyc,, +pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc,, +pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc,, +pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc,, +pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc,, +pip/_internal/utils/__pycache__/urls.cpython-312.pyc,, +pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc,, +pip/_internal/utils/__pycache__/wheel.cpython-312.pyc,, +pip/_internal/utils/_jaraco_text.py,sha256=yvDGelTVugRayPaOF2k4ab0Ky4d3uOkAfuOQjASjImY,3351 +pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015 +pip/_internal/utils/appdirs.py,sha256=swgcTKOm3daLeXTW6v5BUS2Ti2RvEnGRQYH_yDXklAo,1665 +pip/_internal/utils/compat.py,sha256=ACyBfLgj3_XG-iA5omEDrXqDM0cQKzi8h8HRBInzG6Q,1884 +pip/_internal/utils/compatibility_tags.py,sha256=ydin8QG8BHqYRsPY4OL6cmb44CbqXl1T0xxS97VhHkk,5377 +pip/_internal/utils/datetime.py,sha256=m21Y3wAtQc-ji6Veb6k_M5g6A0ZyFI4egchTdnwh-pQ,242 +pip/_internal/utils/deprecation.py,sha256=NKo8VqLioJ4nnXXGmW4KdasxF90EFHkZaHeX1fT08C8,3627 +pip/_internal/utils/direct_url_helpers.py,sha256=6F1tc2rcKaCZmgfVwsE6ObIe_Pux23mUVYA-2D9wCFc,3206 +pip/_internal/utils/egg_link.py,sha256=0FePZoUYKv4RGQ2t6x7w5Z427wbA_Uo3WZnAkrgsuqo,2463 +pip/_internal/utils/encoding.py,sha256=qqsXDtiwMIjXMEiIVSaOjwH5YmirCaK-dIzb6-XJsL0,1169 +pip/_internal/utils/entrypoints.py,sha256=YlhLTRl2oHBAuqhc-zmL7USS67TPWVHImjeAQHreZTQ,3064 +pip/_internal/utils/filesystem.py,sha256=RhMIXUaNVMGjc3rhsDahWQ4MavvEQDdqXqgq-F6fpw8,5122 +pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716 +pip/_internal/utils/glibc.py,sha256=Mesxxgg3BLxheLZx-dSf30b6gKpOgdVXw6W--uHSszQ,3113 +pip/_internal/utils/hashes.py,sha256=MjOigC75z6qoRMkgHiHqot7eqxfwDZSrEflJMPm-bHE,5118 +pip/_internal/utils/logging.py,sha256=fdtuZJ-AKkqwDTANDvGcBEpssL8el7T1jnwk1CnZl3Y,11603 +pip/_internal/utils/misc.py,sha256=fNXwaeeikvnUt4CPMFIL4-IQbZDxxjj4jDpzCi4ZsOw,23623 +pip/_internal/utils/models.py,sha256=5GoYU586SrxURMvDn_jBMJInitviJg4O5-iOU-6I0WY,1193 +pip/_internal/utils/packaging.py,sha256=5Wm6_x7lKrlqVjPI5MBN_RurcRHwVYoQ7Ksrs84de7s,2108 +pip/_internal/utils/setuptools_build.py,sha256=ouXpud-jeS8xPyTPsXJ-m34NPvK5os45otAzdSV_IJE,4435 +pip/_internal/utils/subprocess.py,sha256=zzdimb75jVLE1GU4WlTZ055gczhD7n1y1xTcNc7vNZQ,9207 +pip/_internal/utils/temp_dir.py,sha256=DUAw22uFruQdK43i2L2K53C-CDjRCPeAsBKJpu-rHQ4,9312 +pip/_internal/utils/unpacking.py,sha256=SBb2iV1crb89MDRTEKY86R4A_UOWApTQn9VQVcMDOlE,8821 +pip/_internal/utils/urls.py,sha256=AhaesUGl-9it6uvG6fsFPOr9ynFpGaTMk4t5XTX7Z_Q,1759 +pip/_internal/utils/virtualenv.py,sha256=S6f7csYorRpiD6cvn3jISZYc3I8PJC43H5iMFpRAEDU,3456 +pip/_internal/utils/wheel.py,sha256=i4BwUNHattzN0ixy3HBAF04tZPRh2CcxaT6t86viwkE,4499 +pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596 +pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc,, +pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc,, +pip/_internal/vcs/__pycache__/git.cpython-312.pyc,, +pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc,, +pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc,, +pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc,, +pip/_internal/vcs/bazaar.py,sha256=j0oin0fpGRHcCFCxEcpPCQoFEvA-DMLULKdGP8Nv76o,3519 +pip/_internal/vcs/git.py,sha256=CeKBGJnl6uskvvjkAUXrJVxbHJrpS_B_pyfFdjL3CRc,18121 +pip/_internal/vcs/mercurial.py,sha256=oULOhzJ2Uie-06d1omkL-_Gc6meGaUkyogvqG9ZCyPs,5249 +pip/_internal/vcs/subversion.py,sha256=vhZs8L-TNggXqM1bbhl-FpbxE3TrIB6Tgnx8fh3S2HE,11729 +pip/_internal/vcs/versioncontrol.py,sha256=3eIjtOMYvOY5qP6BMYIYDZ375CSuec6kSEB0bOo1cSs,22787 +pip/_internal/wheel_builder.py,sha256=qTTzQV8F6b1jNsFCda1TRQC8J7gK-m7iuRNgKo7Dj68,11801 +pip/_vendor/__init__.py,sha256=U51NPwXdA-wXOiANIQncYjcMp6txgeOL5nHxksJeyas,4993 +pip/_vendor/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/__pycache__/six.cpython-312.pyc,, +pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc,, +pip/_vendor/cachecontrol/__init__.py,sha256=ctHagMhQXuvQDdm4TirZrwDOT5H8oBNAJqzdKI6sovk,676 +pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc,, +pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc,, +pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc,, +pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc,, +pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc,, +pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc,, +pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc,, +pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc,, +pip/_vendor/cachecontrol/_cmd.py,sha256=iist2EpzJvDVIhMAxXq8iFnTBsiZAd6iplxfmNboNyk,1737 +pip/_vendor/cachecontrol/adapter.py,sha256=_CcWvUP9048qAZjsNqViaHbdcLs9mmFNixVfpO7oebE,6392 +pip/_vendor/cachecontrol/cache.py,sha256=OTQj72tUf8C1uEgczdl3Gc8vkldSzsTITKtDGKMx4z8,1952 +pip/_vendor/cachecontrol/caches/__init__.py,sha256=dtrrroK5BnADR1GWjCZ19aZ0tFsMfvFBtLQQU1sp_ag,303 +pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc,, +pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc,, +pip/_vendor/cachecontrol/caches/file_cache.py,sha256=3z8AWKD-vfKeiJqIzLmJyIYtR2yd6Tsh3u1TyLRQoIQ,5352 +pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=9rmqwtYu_ljVkW6_oLqbC7EaX_a8YT_yLuna-eS0dgo,1386 +pip/_vendor/cachecontrol/controller.py,sha256=keCFA3ZaNVaWTwHd6F1zqWhb4vyvNx_UvZuo5iIYMfo,18384 +pip/_vendor/cachecontrol/filewrapper.py,sha256=STttGmIPBvZzt2b51dUOwoWX5crcMCpKZOisM3f5BNc,4292 +pip/_vendor/cachecontrol/heuristics.py,sha256=fdFbk9W8IeLrjteIz_fK4mj2HD_Y7COXF2Uc8TgjT1c,4828 +pip/_vendor/cachecontrol/serialize.py,sha256=0dHeMaDwysVAAnGVlhMOP4tDliohgNK0Jxk_zsOiWxw,7173 +pip/_vendor/cachecontrol/wrapper.py,sha256=hsGc7g8QGQTT-4f8tgz3AM5qwScg6FO0BSdLSRdEvpU,1417 +pip/_vendor/certifi/__init__.py,sha256=L_j-d0kYuA_MzA2_2hraF1ovf6KT6DTquRdV3paQwOk,94 +pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255 +pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc,, +pip/_vendor/certifi/__pycache__/core.cpython-312.pyc,, +pip/_vendor/certifi/cacert.pem,sha256=eU0Dn_3yd8BH4m8sfVj4Glhl2KDrcCSg-sEWT-pNJ88,281617 +pip/_vendor/certifi/core.py,sha256=DNTl8b_B6C4vO3Vc9_q2uvwHpNnBQoy5onDC4McImxc,4531 +pip/_vendor/chardet/__init__.py,sha256=57R-HSxj0PWmILMN0GFmUNqEMfrEVSamXyjD-W6_fbs,4797 +pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc,, +pip/_vendor/chardet/__pycache__/version.cpython-312.pyc,, +pip/_vendor/chardet/big5freq.py,sha256=ltcfP-3PjlNHCoo5e4a7C4z-2DhBTXRfY6jbMbB7P30,31274 +pip/_vendor/chardet/big5prober.py,sha256=lPMfwCX6v2AaPgvFh_cSWZcgLDbWiFCHLZ_p9RQ9uxE,1763 +pip/_vendor/chardet/chardistribution.py,sha256=13B8XUG4oXDuLdXvfbIWwLFeR-ZU21AqTS1zcdON8bU,10032 +pip/_vendor/chardet/charsetgroupprober.py,sha256=UKK3SaIZB2PCdKSIS0gnvMtLR9JJX62M-fZJu3OlWyg,3915 +pip/_vendor/chardet/charsetprober.py,sha256=L3t8_wIOov8em-vZWOcbkdsrwe43N6_gqNh5pH7WPd4,5420 +pip/_vendor/chardet/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/chardet/cli/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-312.pyc,, +pip/_vendor/chardet/cli/chardetect.py,sha256=zibMVg5RpKb-ME9_7EYG4ZM2Sf07NHcQzZ12U-rYJho,3242 +pip/_vendor/chardet/codingstatemachine.py,sha256=K7k69sw3jY5DmTXoSJQVsUtFIQKYPQVOSJJhBuGv_yE,3732 +pip/_vendor/chardet/codingstatemachinedict.py,sha256=0GY3Hi2qIZvDrOOJ3AtqppM1RsYxr_66ER4EHjuMiMc,542 +pip/_vendor/chardet/cp949prober.py,sha256=0jKRV7fECuWI16rNnks0ZECKA1iZYCIEaP8A1ZvjUSI,1860 +pip/_vendor/chardet/enums.py,sha256=TzECiZoCKNMqgwU76cPCeKWFBqaWvAdLMev5_bCkhY8,1683 +pip/_vendor/chardet/escprober.py,sha256=Kho48X65xE0scFylIdeJjM2bcbvRvv0h0WUbMWrJD3A,4006 +pip/_vendor/chardet/escsm.py,sha256=AqyXpA2FQFD7k-buBty_7itGEYkhmVa8X09NLRul3QM,12176 +pip/_vendor/chardet/eucjpprober.py,sha256=5KYaM9fsxkRYzw1b5k0fL-j_-ezIw-ij9r97a9MHxLY,3934 +pip/_vendor/chardet/euckrfreq.py,sha256=3mHuRvXfsq_QcQysDQFb8qSudvTiol71C6Ic2w57tKM,13566 +pip/_vendor/chardet/euckrprober.py,sha256=hiFT6wM174GIwRvqDsIcuOc-dDsq2uPKMKbyV8-1Xnc,1753 +pip/_vendor/chardet/euctwfreq.py,sha256=2alILE1Lh5eqiFJZjzRkMQXolNJRHY5oBQd-vmZYFFM,36913 +pip/_vendor/chardet/euctwprober.py,sha256=NxbpNdBtU0VFI0bKfGfDkpP7S2_8_6FlO87dVH0ogws,1753 +pip/_vendor/chardet/gb2312freq.py,sha256=49OrdXzD-HXqwavkqjo8Z7gvs58hONNzDhAyMENNkvY,20735 +pip/_vendor/chardet/gb2312prober.py,sha256=KPEBueaSLSvBpFeINMu0D6TgHcR90e5PaQawifzF4o0,1759 +pip/_vendor/chardet/hebrewprober.py,sha256=96T_Lj_OmW-fK7JrSHojYjyG3fsGgbzkoTNleZ3kfYE,14537 +pip/_vendor/chardet/jisfreq.py,sha256=mm8tfrwqhpOd3wzZKS4NJqkYBQVcDfTM2JiQ5aW932E,25796 +pip/_vendor/chardet/johabfreq.py,sha256=dBpOYG34GRX6SL8k_LbS9rxZPMjLjoMlgZ03Pz5Hmqc,42498 +pip/_vendor/chardet/johabprober.py,sha256=O1Qw9nVzRnun7vZp4UZM7wvJSv9W941mEU9uDMnY3DU,1752 +pip/_vendor/chardet/jpcntx.py,sha256=uhHrYWkLxE_rF5OkHKInm0HUsrjgKHHVQvtt3UcvotA,27055 +pip/_vendor/chardet/langbulgarianmodel.py,sha256=vmbvYFP8SZkSxoBvLkFqKiH1sjma5ihk3PTpdy71Rr4,104562 +pip/_vendor/chardet/langgreekmodel.py,sha256=JfB7bupjjJH2w3X_mYnQr9cJA_7EuITC2cRW13fUjeI,98484 +pip/_vendor/chardet/langhebrewmodel.py,sha256=3HXHaLQPNAGcXnJjkIJfozNZLTvTJmf4W5Awi6zRRKc,98196 +pip/_vendor/chardet/langhungarianmodel.py,sha256=WxbeQIxkv8YtApiNqxQcvj-tMycsoI4Xy-fwkDHpP_Y,101363 +pip/_vendor/chardet/langrussianmodel.py,sha256=s395bTZ87ESTrZCOdgXbEjZ9P1iGPwCl_8xSsac_DLY,128035 +pip/_vendor/chardet/langthaimodel.py,sha256=7bJlQitRpTnVGABmbSznHnJwOHDy3InkTvtFUx13WQI,102774 +pip/_vendor/chardet/langturkishmodel.py,sha256=XY0eGdTIy4eQ9Xg1LVPZacb-UBhHBR-cq0IpPVHowKc,95372 +pip/_vendor/chardet/latin1prober.py,sha256=p15EEmFbmQUwbKLC7lOJVGHEZwcG45ubEZYTGu01J5g,5380 +pip/_vendor/chardet/macromanprober.py,sha256=9anfzmY6TBfUPDyBDOdY07kqmTHpZ1tK0jL-p1JWcOY,6077 +pip/_vendor/chardet/mbcharsetprober.py,sha256=Wr04WNI4F3X_VxEverNG-H25g7u-MDDKlNt-JGj-_uU,3715 +pip/_vendor/chardet/mbcsgroupprober.py,sha256=iRpaNBjV0DNwYPu_z6TiHgRpwYahiM7ztI_4kZ4Uz9A,2131 +pip/_vendor/chardet/mbcssm.py,sha256=hUtPvDYgWDaA2dWdgLsshbwRfm3Q5YRlRogdmeRUNQw,30391 +pip/_vendor/chardet/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/chardet/metadata/__pycache__/languages.cpython-312.pyc,, +pip/_vendor/chardet/metadata/languages.py,sha256=FhvBIdZFxRQ-dTwkb_0madRKgVBCaUMQz9I5xqjE5iQ,13560 +pip/_vendor/chardet/resultdict.py,sha256=ez4FRvN5KaSosJeJ2WzUyKdDdg35HDy_SSLPXKCdt5M,402 +pip/_vendor/chardet/sbcharsetprober.py,sha256=-nd3F90i7GpXLjehLVHqVBE0KlWzGvQUPETLBNn4o6U,6400 +pip/_vendor/chardet/sbcsgroupprober.py,sha256=gcgI0fOfgw_3YTClpbra_MNxwyEyJ3eUXraoLHYb59E,4137 +pip/_vendor/chardet/sjisprober.py,sha256=aqQufMzRw46ZpFlzmYaYeT2-nzmKb-hmcrApppJ862k,4007 +pip/_vendor/chardet/universaldetector.py,sha256=xYBrg4x0dd9WnT8qclfADVD9ondrUNkqPmvte1pa520,14848 +pip/_vendor/chardet/utf1632prober.py,sha256=pw1epGdMj1hDGiCu1AHqqzOEfjX8MVdiW7O1BlT8-eQ,8505 +pip/_vendor/chardet/utf8prober.py,sha256=8m08Ub5490H4jQ6LYXvFysGtgKoKsHUd2zH_i8_TnVw,2812 +pip/_vendor/chardet/version.py,sha256=lGtJcxGM44Qz4Cbk4rbbmrKxnNr1-97U25TameLehZw,244 +pip/_vendor/colorama/__init__.py,sha256=wePQA4U20tKgYARySLEC047ucNX-g8pRLpYBuiHlLb8,266 +pip/_vendor/colorama/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/colorama/__pycache__/ansi.cpython-312.pyc,, +pip/_vendor/colorama/__pycache__/ansitowin32.cpython-312.pyc,, +pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc,, +pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc,, +pip/_vendor/colorama/__pycache__/winterm.cpython-312.pyc,, +pip/_vendor/colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522 +pip/_vendor/colorama/ansitowin32.py,sha256=vPNYa3OZbxjbuFyaVo0Tmhmy1FZ1lKMWCnT7odXpItk,11128 +pip/_vendor/colorama/initialise.py,sha256=-hIny86ClXo39ixh5iSCfUIa2f_h_bgKRDW7gqs-KLU,3325 +pip/_vendor/colorama/tests/__init__.py,sha256=MkgPAEzGQd-Rq0w0PZXSX2LadRWhUECcisJY8lSrm4Q,75 +pip/_vendor/colorama/tests/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-312.pyc,, +pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc,, +pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-312.pyc,, +pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc,, +pip/_vendor/colorama/tests/__pycache__/utils.cpython-312.pyc,, +pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-312.pyc,, +pip/_vendor/colorama/tests/ansi_test.py,sha256=FeViDrUINIZcr505PAxvU4AjXz1asEiALs9GXMhwRaE,2839 +pip/_vendor/colorama/tests/ansitowin32_test.py,sha256=RN7AIhMJ5EqDsYaCjVo-o4u8JzDD4ukJbmevWKS70rY,10678 +pip/_vendor/colorama/tests/initialise_test.py,sha256=BbPy-XfyHwJ6zKozuQOvNvQZzsx9vdb_0bYXn7hsBTc,6741 +pip/_vendor/colorama/tests/isatty_test.py,sha256=Pg26LRpv0yQDB5Ac-sxgVXG7hsA1NYvapFgApZfYzZg,1866 +pip/_vendor/colorama/tests/utils.py,sha256=1IIRylG39z5-dzq09R_ngufxyPZxgldNbrxKxUGwGKE,1079 +pip/_vendor/colorama/tests/winterm_test.py,sha256=qoWFPEjym5gm2RuMwpf3pOis3a5r_PJZFCzK254JL8A,3709 +pip/_vendor/colorama/win32.py,sha256=YQOKwMTwtGBbsY4dL5HYTvwTeP9wIQra5MvPNddpxZs,6181 +pip/_vendor/colorama/winterm.py,sha256=XCQFDHjPi6AHYNdZwy0tA02H-Jh48Jp-HvCjeLeLp3U,7134 +pip/_vendor/distlib/__init__.py,sha256=hJKF7FHoqbmGckncDuEINWo_OYkDNiHODtYXSMcvjcc,625 +pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/database.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/index.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/util.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/version.cpython-312.pyc,, +pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc,, +pip/_vendor/distlib/compat.py,sha256=Un-uIBvy02w-D267OG4VEhuddqWgKj9nNkxVltAb75w,41487 +pip/_vendor/distlib/database.py,sha256=0V9Qvs0Vrxa2F_-hLWitIyVyRifJ0pCxyOI-kEOBwsA,51965 +pip/_vendor/distlib/index.py,sha256=lTbw268rRhj8dw1sib3VZ_0EhSGgoJO3FKJzSFMOaeA,20797 +pip/_vendor/distlib/locators.py,sha256=o1r_M86_bRLafSpetmyfX8KRtFu-_Q58abvQrnOSnbA,51767 +pip/_vendor/distlib/manifest.py,sha256=3qfmAmVwxRqU1o23AlfXrQGZzh6g_GGzTAP_Hb9C5zQ,14168 +pip/_vendor/distlib/markers.py,sha256=n3DfOh1yvZ_8EW7atMyoYeZFXjYla0Nz0itQlojCd0A,5268 +pip/_vendor/distlib/metadata.py,sha256=pB9WZ9mBfmQxc9OVIldLS5CjOoQRvKAvUwwQyKwKQtQ,39693 +pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820 +pip/_vendor/distlib/scripts.py,sha256=nQFXN6G7nOWNDUyxirUep-3WOlJhB7McvCs9zOnkGTI,18315 +pip/_vendor/distlib/util.py,sha256=XSznxEi_i3T20UJuaVc0qXHz5ksGUCW1khYlBprN_QE,67530 +pip/_vendor/distlib/version.py,sha256=9pXkduchve_aN7JG6iL9VTYV_kqNSGoc2Dwl8JuySnQ,23747 +pip/_vendor/distlib/wheel.py,sha256=FVQCve8u-L0QYk5-YTZc7s4WmNQdvjRWTK08KXzZVX4,43958 +pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981 +pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64 +pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc,, +pip/_vendor/distro/__pycache__/distro.cpython-312.pyc,, +pip/_vendor/distro/distro.py,sha256=UZO1LjIhtFCMdlbiz39gj3raV-Amf3SBwzGzfApiMHw,49330 +pip/_vendor/idna/__init__.py,sha256=KJQN1eQBr8iIK5SKrJ47lXvxG0BJ7Lm38W4zT0v_8lk,849 +pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/idna/__pycache__/codec.cpython-312.pyc,, +pip/_vendor/idna/__pycache__/compat.cpython-312.pyc,, +pip/_vendor/idna/__pycache__/core.cpython-312.pyc,, +pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc,, +pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc,, +pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc,, +pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc,, +pip/_vendor/idna/codec.py,sha256=6ly5odKfqrytKT9_7UrlGklHnf1DSK2r9C6cSM4sa28,3374 +pip/_vendor/idna/compat.py,sha256=0_sOEUMT4CVw9doD3vyRhX80X19PwqFoUBs7gWsFME4,321 +pip/_vendor/idna/core.py,sha256=kkCFNJOrE6I3WwBTXcGNuc24V_QZQ8AULE6EYe1iHlU,12813 +pip/_vendor/idna/idnadata.py,sha256=9NIhTqC2piUpeIMOGZ9Bu_7eAFQ-Ic8TkP_hOzUpnDc,78344 +pip/_vendor/idna/intranges.py,sha256=YBr4fRYuWH7kTKS2tXlFjM24ZF1Pdvcir-aywniInqg,1881 +pip/_vendor/idna/package_data.py,sha256=C_jHJzmX8PI4xq0jpzmcTMxpb5lDsq4o5VyxQzlVrZE,21 +pip/_vendor/idna/uts46data.py,sha256=zvjZU24s58_uAS850Mcd0NnD0X7_gCMAMjzWNIeUJdc,206539 +pip/_vendor/msgpack/__init__.py,sha256=hyGhlnmcJkxryJBKC3X5FnEph375kQoL_mG8LZUuXgY,1132 +pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc,, +pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc,, +pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc,, +pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081 +pip/_vendor/msgpack/ext.py,sha256=C5MK8JhVYGYFWPvxsORsqZAnvOXefYQ57m1Ym0luW5M,6079 +pip/_vendor/msgpack/fallback.py,sha256=tvNBHyxxFbuVlC8GZShETClJxjLiDMOja4XwwyvNm2g,34544 +pip/_vendor/packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661 +pip/_vendor/packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497 +pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc,, +pip/_vendor/packaging/__pycache__/version.cpython-312.pyc,, +pip/_vendor/packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488 +pip/_vendor/packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378 +pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431 +pip/_vendor/packaging/markers.py,sha256=AJBOcY8Oq0kYc570KuuPTkvuqjAlhufaE2c9sCUbm64,8487 +pip/_vendor/packaging/requirements.py,sha256=NtDlPBtojpn1IUC85iMjPNsUmufjpSlwnNA-Xb4m5NA,4676 +pip/_vendor/packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110 +pip/_vendor/packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699 +pip/_vendor/packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200 +pip/_vendor/packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665 +pip/_vendor/pkg_resources/__init__.py,sha256=hTAeJCNYb7dJseIDVsYK3mPQep_gphj4tQh-bspX8bg,109364 +pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/platformdirs/__init__.py,sha256=SkhEYVyC_HUHC6KX7n4M_6coyRMtEB38QMyOYIAX6Yk,20155 +pip/_vendor/platformdirs/__main__.py,sha256=fVvSiTzr2-RM6IsjWjj4fkaOtDOgDhUWv6sA99do4CQ,1476 +pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc,, +pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc,, +pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc,, +pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc,, +pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc,, +pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc,, +pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc,, +pip/_vendor/platformdirs/android.py,sha256=y_EEMKwYl2-bzYBDovksSn8m76on0Lda8eyJksVQE9U,7211 +pip/_vendor/platformdirs/api.py,sha256=jWtX06jAJytYrkJDOqEls97mCkyHRSZkoqUlbMK5Qew,7132 +pip/_vendor/platformdirs/macos.py,sha256=LueVOoVgGWDBwQb8OFwXkVKfVn33CM1Lkwf1-A86tRQ,3678 +pip/_vendor/platformdirs/unix.py,sha256=22JhR8ZY0aLxSVCFnKrc6f1iz6Gv42K24Daj7aTjfSg,8809 +pip/_vendor/platformdirs/version.py,sha256=mavZTQIJIXfdewEaSTn7EWrNfPZWeRofb-74xqW5f2M,160 +pip/_vendor/platformdirs/windows.py,sha256=4TtbPGoWG2PRgI11uquDa7eRk8TcxvnUNuuMGZItnXc,9573 +pip/_vendor/pygments/__init__.py,sha256=6AuDljQtvf89DTNUyWM7k3oUlP_lq70NU-INKKteOBY,2983 +pip/_vendor/pygments/__main__.py,sha256=es8EKMvXj5yToIfQ-pf3Dv5TnIeeM6sME0LW-n4ecHo,353 +pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/console.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/style.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/token.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc,, +pip/_vendor/pygments/__pycache__/util.cpython-312.pyc,, +pip/_vendor/pygments/cmdline.py,sha256=byxYJp9gnjVeyhRlZ3UTMgo_LhkXh1afvN8wJBtAcc8,23685 +pip/_vendor/pygments/console.py,sha256=2wZ5W-U6TudJD1_NLUwjclMpbomFM91lNv11_60sfGY,1697 +pip/_vendor/pygments/filter.py,sha256=j5aLM9a9wSx6eH1oy473oSkJ02hGWNptBlVo4s1g_30,1938 +pip/_vendor/pygments/filters/__init__.py,sha256=h_koYkUFo-FFUxjs564JHUAz7O3yJpVwI6fKN3MYzG0,40386 +pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pygments/formatter.py,sha256=J9OL9hXLJKZk7moUgKwpjW9HNf4WlJFg_o_-Z_S_tTY,4178 +pip/_vendor/pygments/formatters/__init__.py,sha256=_xgAcdFKr0QNYwh_i98AU9hvfP3X2wAkhElFcRRF3Uo,5424 +pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc,, +pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc,, +pip/_vendor/pygments/formatters/_mapping.py,sha256=1Cw37FuQlNacnxRKmtlPX4nyLoX9_ttko5ZwscNUZZ4,4176 +pip/_vendor/pygments/formatters/bbcode.py,sha256=r1b7wzWTJouADDLh-Z11iRi4iQxD0JKJ1qHl6mOYxsA,3314 +pip/_vendor/pygments/formatters/groff.py,sha256=xy8Zf3tXOo6MWrXh7yPGWx3lVEkg_DhY4CxmsDb0IVo,5094 +pip/_vendor/pygments/formatters/html.py,sha256=PIzAyilNqaTzSSP2slDG2VDLE3qNioWy2rgtSSoviuI,35610 +pip/_vendor/pygments/formatters/img.py,sha256=XKXmg2_XONrR4mtq2jfEU8XCsoln3VSGTw-UYiEokys,21938 +pip/_vendor/pygments/formatters/irc.py,sha256=Ep-m8jd3voFO6Fv57cUGFmz6JVA67IEgyiBOwv0N4a0,4981 +pip/_vendor/pygments/formatters/latex.py,sha256=FGzJ-YqSTE8z_voWPdzvLY5Tq8jE_ygjGjM6dXZJ8-k,19351 +pip/_vendor/pygments/formatters/other.py,sha256=gPxkk5BdAzWTCgbEHg1lpLi-1F6ZPh5A_aotgLXHnzg,5073 +pip/_vendor/pygments/formatters/pangomarkup.py,sha256=6LKnQc8yh49f802bF0sPvbzck4QivMYqqoXAPaYP8uU,2212 +pip/_vendor/pygments/formatters/rtf.py,sha256=aA0v_psW6KZI3N18TKDifxeL6mcF8EDXcPXDWI4vhVQ,5014 +pip/_vendor/pygments/formatters/svg.py,sha256=dQONWypbzfvzGCDtdp3M_NJawScJvM2DiHbx1k-ww7g,7335 +pip/_vendor/pygments/formatters/terminal.py,sha256=FG-rpjRpFmNpiGB4NzIucvxq6sQIXB3HOTo2meTKtrU,4674 +pip/_vendor/pygments/formatters/terminal256.py,sha256=13SJ3D5pFdqZ9zROE6HbWnBDwHvOGE8GlsmqGhprRp4,11753 +pip/_vendor/pygments/lexer.py,sha256=2BpqLlT2ExvOOi7vnjK5nB4Fp-m52ldiPaXMox5uwug,34618 +pip/_vendor/pygments/lexers/__init__.py,sha256=j5KEi5O_VQ5GS59H49l-10gzUOkWKxlwGeVMlGO2MMk,12130 +pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc,, +pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc,, +pip/_vendor/pygments/lexers/_mapping.py,sha256=Hts4r_ZQ8icftGM7gkBPeED5lyVSv4affFgXYE6Ap04,72281 +pip/_vendor/pygments/lexers/python.py,sha256=c7jnmKFU9DLxTJW0UbwXt6Z9FJqbBlVsWA1Qr9xSA_w,53424 +pip/_vendor/pygments/modeline.py,sha256=eF2vO4LpOGoPvIKKkbPfnyut8hT4UiebZPpb-BYGQdI,986 +pip/_vendor/pygments/plugin.py,sha256=j1Fh310RbV2DQ9nvkmkqvlj38gdyuYKllLnGxbc8sJM,2591 +pip/_vendor/pygments/regexopt.py,sha256=jg1ALogcYGU96TQS9isBl6dCrvw5y5--BP_K-uFk_8s,3072 +pip/_vendor/pygments/scanner.py,sha256=b_nu5_f3HCgSdp5S_aNRBQ1MSCm4ZjDwec2OmTRickw,3092 +pip/_vendor/pygments/sphinxext.py,sha256=wBFYm180qea9JKt__UzhRlNRNhczPDFDaqGD21sbuso,6882 +pip/_vendor/pygments/style.py,sha256=C4qyoJrUTkq-OV3iO-8Vz3UtWYpJwSTdh5_vlGCGdNQ,6257 +pip/_vendor/pygments/styles/__init__.py,sha256=he7HjQx7sC0d2kfTVLjUs0J15mtToJM6M1brwIm9--Q,3700 +pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pygments/token.py,sha256=seNsmcch9OEHXYirh8Ool7w8xDhfNTbLj5rHAC-gc_o,6184 +pip/_vendor/pygments/unistring.py,sha256=FaUfG14NBJEKLQoY9qj6JYeXrpYcLmKulghdxOGFaOc,63223 +pip/_vendor/pygments/util.py,sha256=AEVY0qonyyEMgv4Do2dINrrqUAwUk2XYSqHM650uzek,10230 +pip/_vendor/pyparsing/__init__.py,sha256=9m1JbE2JTLdBG0Mb6B0lEaZj181Wx5cuPXZpsbHEYgE,9116 +pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc,, +pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc,, +pip/_vendor/pyparsing/actions.py,sha256=05uaIPOznJPQ7VgRdmGCmG4sDnUPtwgv5qOYIqbL2UY,6567 +pip/_vendor/pyparsing/common.py,sha256=p-3c83E5-DjlkF35G0O9-kjQRpoejP-2_z0hxZ-eol4,13387 +pip/_vendor/pyparsing/core.py,sha256=yvuRlLpXSF8mgk-QhiW3OVLqD9T0rsj9tbibhRH4Yaw,224445 +pip/_vendor/pyparsing/diagram/__init__.py,sha256=nxmDOoYF9NXuLaGYy01tKFjkNReWJlrGFuJNWEiTo84,24215 +pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pyparsing/exceptions.py,sha256=6Jc6W1eDZBzyFu1J0YrcdNFVBC-RINujZmveSnB8Rxw,9523 +pip/_vendor/pyparsing/helpers.py,sha256=BZJHCA8SS0pYio30KGQTc9w2qMOaK4YpZ7hcvHbnTgk,38646 +pip/_vendor/pyparsing/results.py,sha256=9dyqQ-w3MjfmxWbFt8KEPU6IfXeyRdoWp2Og802rUQY,26692 +pip/_vendor/pyparsing/testing.py,sha256=eJncg0p83zm1FTPvM9auNT6oavIvXaibmRFDf1qmwkY,13488 +pip/_vendor/pyparsing/unicode.py,sha256=fAPdsJiARFbkPAih6NkYry0dpj4jPqelGVMlE4wWFW8,10646 +pip/_vendor/pyparsing/util.py,sha256=vTMzTdwSDyV8d_dSgquUTdWgBFoA_W30nfxEJDsshRQ,8670 +pip/_vendor/pyproject_hooks/__init__.py,sha256=kCehmy0UaBa9oVMD7ZIZrnswfnP3LXZ5lvnNJAL5JBM,491 +pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc,, +pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc,, +pip/_vendor/pyproject_hooks/_compat.py,sha256=by6evrYnqkisiM-MQcvOKs5bgDMzlOSgZqRHNqf04zE,138 +pip/_vendor/pyproject_hooks/_impl.py,sha256=61GJxzQip0IInhuO69ZI5GbNQ82XEDUB_1Gg5_KtUoc,11920 +pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=9gQATptbFkelkIy0OfWFEACzqxXJMQDWCH9rBOAZVwQ,546 +pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc,, +pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=m2b34c917IW5o-Q_6TYIHlsK9lSUlNiyrITTUH_zwew,10927 +pip/_vendor/requests/__init__.py,sha256=owujob4dk45Siy4EYtbCKR6wcFph7E04a_v_OuAacBA,5169 +pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/api.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/auth.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/certs.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/compat.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/help.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/models.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/packages.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/structures.cpython-312.pyc,, +pip/_vendor/requests/__pycache__/utils.cpython-312.pyc,, +pip/_vendor/requests/__version__.py,sha256=ssI3Ezt7PaxgkOW45GhtwPUclo_SO_ygtIm4A74IOfw,435 +pip/_vendor/requests/_internal_utils.py,sha256=nMQymr4hs32TqVo5AbCrmcJEhvPUh7xXlluyqwslLiQ,1495 +pip/_vendor/requests/adapters.py,sha256=idj6cZcId3L5xNNeJ7ieOLtw3awJk5A64xUfetHwq3M,19697 +pip/_vendor/requests/api.py,sha256=q61xcXq4tmiImrvcSVLTbFyCiD2F-L_-hWKGbz4y8vg,6449 +pip/_vendor/requests/auth.py,sha256=h-HLlVx9j8rKV5hfSAycP2ApOSglTz77R0tz7qCbbEE,10187 +pip/_vendor/requests/certs.py,sha256=PVPooB0jP5hkZEULSCwC074532UFbR2Ptgu0I5zwmCs,575 +pip/_vendor/requests/compat.py,sha256=IhK9quyX0RRuWTNcg6d2JGSAOUbM6mym2p_2XjLTwf4,1286 +pip/_vendor/requests/cookies.py,sha256=kD3kNEcCj-mxbtf5fJsSaT86eGoEYpD3X0CSgpzl7BM,18560 +pip/_vendor/requests/exceptions.py,sha256=FA-_kVwBZ2jhXauRctN_ewHVK25b-fj0Azyz1THQ0Kk,3823 +pip/_vendor/requests/help.py,sha256=FnAAklv8MGm_qb2UilDQgS6l0cUttiCFKUjx0zn2XNA,3879 +pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733 +pip/_vendor/requests/models.py,sha256=dDZ-iThotky-Noq9yy97cUEJhr3wnY6mv-xR_ePg_lk,35288 +pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695 +pip/_vendor/requests/sessions.py,sha256=-LvTzrPtetSTrR3buxu4XhdgMrJFLB1q5D7P--L2Xhw,30373 +pip/_vendor/requests/status_codes.py,sha256=FvHmT5uH-_uimtRz5hH9VCbt7VV-Nei2J9upbej6j8g,4235 +pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912 +pip/_vendor/requests/utils.py,sha256=BvQDKkLuXCSaVfSW_1blUN0IzJSfNC8njNr8vhKj76Y,33189 +pip/_vendor/resolvelib/__init__.py,sha256=h509TdEcpb5-44JonaU3ex2TM15GVBLjM9CNCPwnTTs,537 +pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc,, +pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc,, +pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc,, +pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc,, +pip/_vendor/resolvelib/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc,, +pip/_vendor/resolvelib/compat/collections_abc.py,sha256=uy8xUZ-NDEw916tugUXm8HgwCGiMO0f-RcdnpkfXfOs,156 +pip/_vendor/resolvelib/providers.py,sha256=fuuvVrCetu5gsxPB43ERyjfO8aReS3rFQHpDgiItbs4,5871 +pip/_vendor/resolvelib/reporters.py,sha256=TSbRmWzTc26w0ggsV1bxVpeWDB8QNIre6twYl7GIZBE,1601 +pip/_vendor/resolvelib/resolvers.py,sha256=G8rsLZSq64g5VmIq-lB7UcIJ1gjAxIQJmTF4REZleQ0,20511 +pip/_vendor/resolvelib/structs.py,sha256=0_1_XO8z_CLhegP3Vpf9VJ3zJcfLm0NOHRM-i0Ykz3o,4963 +pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090 +pip/_vendor/rich/__main__.py,sha256=TT8sb9PTnsnKhhrGuHkLN0jdN0dtKhtPkEr9CidDbPM,8478 +pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/abc.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/align.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/bar.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/box.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/cells.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/color.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/columns.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/console.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/containers.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/control.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/errors.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/json.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/layout.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/live.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/logging.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/markup.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/measure.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/padding.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/pager.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/palette.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/panel.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/progress.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/region.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/repr.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/rule.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/scope.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/screen.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/segment.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/status.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/style.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/styled.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/table.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/text.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/theme.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/themes.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc,, +pip/_vendor/rich/__pycache__/tree.cpython-312.pyc,, +pip/_vendor/rich/_cell_widths.py,sha256=2n4EiJi3X9sqIq0O16kUZ_zy6UYMd3xFfChlKfnW1Hc,10096 +pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235 +pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064 +pip/_vendor/rich/_export_format.py,sha256=qxgV3nKnXQu1hfbnRVswPYy-AwIg1X0LSC47cK5s8jk,2100 +pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265 +pip/_vendor/rich/_fileno.py,sha256=HWZxP5C2ajMbHryvAQZseflVfQoGzsKOHzKGsLD8ynQ,799 +pip/_vendor/rich/_inspect.py,sha256=oZJGw31e64dwXSCmrDnvZbwVb1ZKhWfU8wI3VWohjJk,9695 +pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225 +pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236 +pip/_vendor/rich/_null_file.py,sha256=tGSXk_v-IZmbj1GAzHit8A3kYIQMiCpVsCFfsC-_KJ4,1387 +pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063 +pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423 +pip/_vendor/rich/_ratio.py,sha256=2lLSliL025Y-YMfdfGbutkQDevhcyDqc-DtUYW9mU70,5472 +pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919 +pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351 +pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417 +pip/_vendor/rich/_win32_console.py,sha256=P0vxI2fcndym1UU1S37XAzQzQnkyY7YqAKmxm24_gug,22820 +pip/_vendor/rich/_windows.py,sha256=dvNl9TmfPzNVxiKk5WDFihErZ5796g2UC9-KGGyfXmk,1926 +pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783 +pip/_vendor/rich/_wrap.py,sha256=xfV_9t0Sg6rzimmrDru8fCVmUlalYAcHLDfrJZnbbwQ,1840 +pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890 +pip/_vendor/rich/align.py,sha256=Ji-Yokfkhnfe_xMmr4ISjZB07TJXggBCOYoYa-HDAr8,10368 +pip/_vendor/rich/ansi.py,sha256=iD6532QYqnBm6hADulKjrV8l8kFJ-9fEVooHJHH3hMg,6906 +pip/_vendor/rich/bar.py,sha256=a7UD303BccRCrEhGjfMElpv5RFYIinaAhAuqYqhUvmw,3264 +pip/_vendor/rich/box.py,sha256=FJ6nI3jD7h2XNFU138bJUt2HYmWOlRbltoCEuIAZhew,9842 +pip/_vendor/rich/cells.py,sha256=627ztJs9zOL-38HJ7kXBerR-gT8KBfYC8UzEwMJDYYo,4509 +pip/_vendor/rich/color.py,sha256=9Gh958U3f75WVdLTeC0U9nkGTn2n0wnojKpJ6jQEkIE,18224 +pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054 +pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131 +pip/_vendor/rich/console.py,sha256=pDvkbLkvtZIMIwQx_jkZ-seyNl4zGBLviXoWXte9fwg,99218 +pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288 +pip/_vendor/rich/containers.py,sha256=aKgm5UDHn5Nmui6IJaKdsZhbHClh_X7D-_Wg8Ehrr7s,5497 +pip/_vendor/rich/control.py,sha256=DSkHTUQLorfSERAKE_oTAEUFefZnZp4bQb4q8rHbKws,6630 +pip/_vendor/rich/default_styles.py,sha256=-Fe318kMVI_IwciK5POpThcO0-9DYJ67TZAN6DlmlmM,8082 +pip/_vendor/rich/diagnose.py,sha256=an6uouwhKPAlvQhYpNNpGq9EJysfMIOvvCbO3oSoR24,972 +pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501 +pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642 +pip/_vendor/rich/file_proxy.py,sha256=Tl9THMDZ-Pk5Wm8sI1gGg_U5DhusmxD-FZ0fUbcU0W0,1683 +pip/_vendor/rich/filesize.py,sha256=9fTLAPCAwHmBXdRv7KZU194jSgNrRb6Wx7RIoBgqeKY,2508 +pip/_vendor/rich/highlighter.py,sha256=p3C1g4QYzezFKdR7NF9EhPbzQDvdPUhGRgSyGGEmPko,9584 +pip/_vendor/rich/json.py,sha256=EYp9ucj-nDjYDkHCV6Mk1ve8nUOpuFLaW76X50Mis2M,5032 +pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252 +pip/_vendor/rich/layout.py,sha256=RFYL6HdCFsHf9WRpcvi3w-fpj-8O5dMZ8W96VdKNdbI,14007 +pip/_vendor/rich/live.py,sha256=vZzYvu7fqwlv3Gthl2xiw1Dc_O80VlGcCV0DOHwCyDM,14273 +pip/_vendor/rich/live_render.py,sha256=zElm3PrfSIvjOce28zETHMIUf9pFYSUA5o0AflgUP64,3667 +pip/_vendor/rich/logging.py,sha256=uB-cB-3Q4bmXDLLpbOWkmFviw-Fde39zyMV6tKJ2WHQ,11903 +pip/_vendor/rich/markup.py,sha256=xzF4uAafiEeEYDJYt_vUnJOGoTU8RrH-PH7WcWYXjCg,8198 +pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305 +pip/_vendor/rich/padding.py,sha256=kTFGsdGe0os7tXLnHKpwTI90CXEvrceeZGCshmJy5zw,4970 +pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828 +pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396 +pip/_vendor/rich/panel.py,sha256=wGMe40J8KCGgQoM0LyjRErmGIkv2bsYA71RCXThD0xE,10574 +pip/_vendor/rich/pretty.py,sha256=eLEYN9xVaMNuA6EJVYm4li7HdOHxCqmVKvnOqJpyFt0,35852 +pip/_vendor/rich/progress.py,sha256=n4KF9vky8_5iYeXcyZPEvzyLplWlDvFLkM5JI0Bs08A,59706 +pip/_vendor/rich/progress_bar.py,sha256=cEoBfkc3lLwqba4XKsUpy4vSQKDh2QQ5J2J94-ACFoo,8165 +pip/_vendor/rich/prompt.py,sha256=x0mW-pIPodJM4ry6grgmmLrl8VZp99kqcmdnBe70YYA,11303 +pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391 +pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166 +pip/_vendor/rich/repr.py,sha256=9Z8otOmM-tyxnyTodvXlectP60lwahjGiDTrbrxPSTg,4431 +pip/_vendor/rich/rule.py,sha256=0fNaS_aERa3UMRc3T5WMpN_sumtDxfaor2y3of1ftBk,4602 +pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843 +pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591 +pip/_vendor/rich/segment.py,sha256=XLnJEFvcV3bjaVzMNUJiem3n8lvvI9TJ5PTu-IG2uTg,24247 +pip/_vendor/rich/spinner.py,sha256=15koCmF0DQeD8-k28Lpt6X_zJQUlzEhgo_6A6uy47lc,4339 +pip/_vendor/rich/status.py,sha256=gJsIXIZeSo3urOyxRUjs6VrhX5CZrA0NxIQ-dxhCnwo,4425 +pip/_vendor/rich/style.py,sha256=3hiocH_4N8vwRm3-8yFWzM7tSwjjEven69XqWasSQwM,27073 +pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258 +pip/_vendor/rich/syntax.py,sha256=jgDiVCK6cpR0NmBOpZmIu-Ud4eaW7fHvjJZkDbjpcSA,35173 +pip/_vendor/rich/table.py,sha256=-WzesL-VJKsaiDU3uyczpJMHy6VCaSewBYJwx8RudI8,39684 +pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370 +pip/_vendor/rich/text.py,sha256=_8JBlSau0c2z8ENOZMi1hJ7M1ZGY408E4-hXjHyyg1A,45525 +pip/_vendor/rich/theme.py,sha256=belFJogzA0W0HysQabKaHOc3RWH2ko3fQAJhoN-AFdo,3777 +pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102 +pip/_vendor/rich/traceback.py,sha256=yCLVrCtyoFNENd9mkm2xeG3KmqkTwH9xpFOO7p2Bq0A,29604 +pip/_vendor/rich/tree.py,sha256=BMbUYNjS9uodNPfvtY_odmU09GA5QzcMbQ5cJZhllQI,9169 +pip/_vendor/six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549 +pip/_vendor/tenacity/__init__.py,sha256=3kvAL6KClq8GFo2KFhmOzskRKSDQI-ubrlfZ8AQEEI0,20493 +pip/_vendor/tenacity/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/_asyncio.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/before_sleep.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-312.pyc,, +pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc,, +pip/_vendor/tenacity/_asyncio.py,sha256=Qi6wgQsGa9MQibYRy3OXqcDQswIZZ00dLOoSUGN-6o8,3551 +pip/_vendor/tenacity/_utils.py,sha256=ubs6a7sxj3JDNRKWCyCU2j5r1CB7rgyONgZzYZq6D_4,2179 +pip/_vendor/tenacity/after.py,sha256=S5NCISScPeIrKwIeXRwdJl3kV9Q4nqZfnNPDx6Hf__g,1682 +pip/_vendor/tenacity/before.py,sha256=dIZE9gmBTffisfwNkK0F1xFwGPV41u5GK70UY4Pi5Kc,1562 +pip/_vendor/tenacity/before_sleep.py,sha256=YmpgN9Y7HGlH97U24vvq_YWb5deaK4_DbiD8ZuFmy-E,2372 +pip/_vendor/tenacity/nap.py,sha256=fRWvnz1aIzbIq9Ap3gAkAZgDH6oo5zxMrU6ZOVByq0I,1383 +pip/_vendor/tenacity/retry.py,sha256=jrzD_mxA5mSTUEdiYB7SHpxltjhPSYZSnSRATb-ggRc,8746 +pip/_vendor/tenacity/stop.py,sha256=YMJs7ZgZfND65PRLqlGB_agpfGXlemx_5Hm4PKnBqpQ,3086 +pip/_vendor/tenacity/tornadoweb.py,sha256=po29_F1Mt8qZpsFjX7EVwAT0ydC_NbVia9gVi7R_wXA,2142 +pip/_vendor/tenacity/wait.py,sha256=3FcBJoCDgym12_dN6xfK8C1gROY0Hn4NSI2u8xv50uE,8024 +pip/_vendor/tomli/__init__.py,sha256=JhUwV66DB1g4Hvt1UQCVMdfCu-IgAV8FXmvDU9onxd4,396 +pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc,, +pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc,, +pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc,, +pip/_vendor/tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633 +pip/_vendor/tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943 +pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254 +pip/_vendor/truststore/__init__.py,sha256=qzTLSH8PvAkY1fr6QQ2vV-KwE_M83wdXugtpJaP_AbM,403 +pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc,, +pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc,, +pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc,, +pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc,, +pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc,, +pip/_vendor/truststore/_api.py,sha256=xjuEu_rlH4hcdJTROImEyOEqdw-F8t5vO2H2BToY0Ro,9893 +pip/_vendor/truststore/_macos.py,sha256=BjvAKoAjXhdIPuxpY124HJIFswDb0pq8DjynzJOVwqc,17694 +pip/_vendor/truststore/_openssl.py,sha256=LLUZ7ZGaio-i5dpKKjKCSeSufmn6T8pi9lDcFnvSyq0,2324 +pip/_vendor/truststore/_ssl_constants.py,sha256=NUD4fVKdSD02ri7-db0tnO0VqLP9aHuzmStcW7tAl08,1130 +pip/_vendor/truststore/_windows.py,sha256=1x_EhROeJ9QK1sMAjfnZC7awYI8UnBJYL-TjACUYI4A,17468 +pip/_vendor/typing_extensions.py,sha256=EWpcpyQnVmc48E9fSyPGs-vXgHcAk9tQABQIxmMsCGk,111130 +pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333 +pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc,, +pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc,, +pip/_vendor/urllib3/_collections.py,sha256=pyASJJhW7wdOpqJj9QJA8FyGRfr8E8uUUhqUvhF0728,11372 +pip/_vendor/urllib3/_version.py,sha256=azoM7M7BUADl2kBhMVR6PPf2GhBDI90me1fcnzTwdcw,64 +pip/_vendor/urllib3/connection.py,sha256=92k9td_y4PEiTIjNufCUa1NzMB3J3w0LEdyokYgXnW8,20300 +pip/_vendor/urllib3/connectionpool.py,sha256=Be6q65SR9laoikg-h_jmc_p8OWtEmwgq_Om_Xtig-2M,40285 +pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957 +pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc,, +pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632 +pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922 +pip/_vendor/urllib3/contrib/appengine.py,sha256=VR68eAVE137lxTgjBDwCna5UiBZTOKa01Aj_-5BaCz4,11036 +pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528 +pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=hDJh4MhyY_p-oKlFcYcQaVQRDv6GMmBGuW9yjxyeejM,17081 +pip/_vendor/urllib3/contrib/securetransport.py,sha256=yhZdmVjY6PI6EeFbp7qYOp6-vp1Rkv2NMuOGaEj7pmc,34448 +pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097 +pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217 +pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579 +pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440 +pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc,, +pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc,, +pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc,, +pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417 +pip/_vendor/urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343 +pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665 +pip/_vendor/urllib3/poolmanager.py,sha256=mJmZWy_Mb4-dHbmNCKbDqv3fZS9UF_2bVDuiECHyPaI,20943 +pip/_vendor/urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691 +pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641 +pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155 +pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc,, +pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc,, +pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901 +pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605 +pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498 +pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997 +pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510 +pip/_vendor/urllib3/util/retry.py,sha256=6ENvOZ8PBDzh8kgixpql9lIrb2dxH-k7ZmBanJF2Ng4,22050 +pip/_vendor/urllib3/util/ssl_.py,sha256=X4-AqW91aYPhPx6-xbf66yHFQKbqqfC_5Zt4WkLX1Hc,17177 +pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758 +pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895 +pip/_vendor/urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168 +pip/_vendor/urllib3/util/url.py,sha256=lCAE7M5myA8EDdW0sJuyyZhVB9K_j38ljWhHAnFaWoE,14296 +pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403 +pip/_vendor/vendor.txt,sha256=4NKk7fQhVsZw0U-0zmm9Q2LgGyaPXacFbnJAaS0Q6EY,493 +pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579 +pip/_vendor/webencodings/__pycache__/__init__.cpython-312.pyc,, +pip/_vendor/webencodings/__pycache__/labels.cpython-312.pyc,, +pip/_vendor/webencodings/__pycache__/mklabels.cpython-312.pyc,, +pip/_vendor/webencodings/__pycache__/tests.cpython-312.pyc,, +pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-312.pyc,, +pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979 +pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305 +pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563 +pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307 +pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286 diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/REQUESTED b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/WHEEL b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/WHEEL new file mode 100644 index 0000000..98c0d20 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.42.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/entry_points.txt b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/entry_points.txt new file mode 100644 index 0000000..26fa361 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/entry_points.txt @@ -0,0 +1,4 @@ +[console_scripts] +pip = pip._internal.cli.main:main +pip3 = pip._internal.cli.main:main +pip3.12 = pip._internal.cli.main:main diff --git a/venv/lib/python3.12/site-packages/pip-24.0.dist-info/top_level.txt b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/top_level.txt new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip-24.0.dist-info/top_level.txt @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.12/site-packages/pip/__init__.py b/venv/lib/python3.12/site-packages/pip/__init__.py new file mode 100644 index 0000000..be0e3ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/__init__.py @@ -0,0 +1,13 @@ +from typing import List, Optional + +__version__ = "24.0" + + +def main(args: Optional[List[str]] = None) -> int: + """This is an internal API only meant for use by pip's own console scripts. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/lib/python3.12/site-packages/pip/__main__.py b/venv/lib/python3.12/site-packages/pip/__main__.py new file mode 100644 index 0000000..5991326 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/__main__.py @@ -0,0 +1,24 @@ +import os +import sys + +# Remove '' and current working directory from the first entry +# of sys.path, if present to avoid using current directory +# in pip commands check, freeze, install, list and show, +# when invoked as python -m pip +if sys.path[0] in ("", os.getcwd()): + sys.path.pop(0) + +# If we are running from a wheel, add the wheel to sys.path +# This allows the usage python pip-*.whl/pip install pip-*.whl +if __package__ == "": + # __file__ is pip-*.whl/pip/__main__.py + # first dirname call strips of '/__main__.py', second strips off '/pip' + # Resulting path is the name of the wheel itself + # Add that to sys.path so we can import pip + path = os.path.dirname(os.path.dirname(__file__)) + sys.path.insert(0, path) + +if __name__ == "__main__": + from pip._internal.cli.main import main as _main + + sys.exit(_main()) diff --git a/venv/lib/python3.12/site-packages/pip/__pip-runner__.py b/venv/lib/python3.12/site-packages/pip/__pip-runner__.py new file mode 100644 index 0000000..49a148a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/__pip-runner__.py @@ -0,0 +1,50 @@ +"""Execute exactly this copy of pip, within a different environment. + +This file is named as it is, to ensure that this module can't be imported via +an import statement. +""" + +# /!\ This version compatibility check section must be Python 2 compatible. /!\ + +import sys + +# Copied from setup.py +PYTHON_REQUIRES = (3, 7) + + +def version_str(version): # type: ignore + return ".".join(str(v) for v in version) + + +if sys.version_info[:2] < PYTHON_REQUIRES: + raise SystemExit( + "This version of pip does not support python {} (requires >={}).".format( + version_str(sys.version_info[:2]), version_str(PYTHON_REQUIRES) + ) + ) + +# From here on, we can use Python 3 features, but the syntax must remain +# Python 2 compatible. + +import runpy # noqa: E402 +from importlib.machinery import PathFinder # noqa: E402 +from os.path import dirname # noqa: E402 + +PIP_SOURCES_ROOT = dirname(dirname(__file__)) + + +class PipImportRedirectingFinder: + @classmethod + def find_spec(self, fullname, path=None, target=None): # type: ignore + if fullname != "pip": + return None + + spec = PathFinder.find_spec(fullname, [PIP_SOURCES_ROOT], target) + assert spec, (PIP_SOURCES_ROOT, fullname) + return spec + + +sys.meta_path.insert(0, PipImportRedirectingFinder()) + +assert __name__ == "__main__", "Cannot run __pip-runner__.py as a non-main module" +runpy.run_module("pip", run_name="__main__", alter_sys=True) diff --git a/venv/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..5b1a86b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..2cfff79 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc new file mode 100644 index 0000000..2da69aa Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/__init__.py new file mode 100644 index 0000000..96c6b88 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/__init__.py @@ -0,0 +1,18 @@ +from typing import List, Optional + +from pip._internal.utils import _log + +# init_logging() must be called before any call to logging.getLogger() +# which happens at import of most modules. +_log.init_logging() + + +def main(args: (Optional[List[str]]) = None) -> int: + """This is preserved for old console scripts that may still be referencing + it. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..0545259 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc new file mode 100644 index 0000000..d312545 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc new file mode 100644 index 0000000..0efe2dd Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc new file mode 100644 index 0000000..83209d4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc new file mode 100644 index 0000000..623844f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000..f7bc280 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc new file mode 100644 index 0000000..f174794 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc new file mode 100644 index 0000000..39f9a36 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc new file mode 100644 index 0000000..ba9d779 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/build_env.py b/venv/lib/python3.12/site-packages/pip/_internal/build_env.py new file mode 100644 index 0000000..4f704a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/build_env.py @@ -0,0 +1,311 @@ +"""Build Environment used for isolation during sdist building +""" + +import logging +import os +import pathlib +import site +import sys +import textwrap +from collections import OrderedDict +from types import TracebackType +from typing import TYPE_CHECKING, Iterable, List, Optional, Set, Tuple, Type, Union + +from pip._vendor.certifi import where +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.version import Version + +from pip import __file__ as pip_location +from pip._internal.cli.spinners import open_spinner +from pip._internal.locations import get_platlib, get_purelib, get_scheme +from pip._internal.metadata import get_default_environment, get_environment +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds + +if TYPE_CHECKING: + from pip._internal.index.package_finder import PackageFinder + +logger = logging.getLogger(__name__) + + +def _dedup(a: str, b: str) -> Union[Tuple[str], Tuple[str, str]]: + return (a, b) if a != b else (a,) + + +class _Prefix: + def __init__(self, path: str) -> None: + self.path = path + self.setup = False + scheme = get_scheme("", prefix=path) + self.bin_dir = scheme.scripts + self.lib_dirs = _dedup(scheme.purelib, scheme.platlib) + + +def get_runnable_pip() -> str: + """Get a file to pass to a Python executable, to run the currently-running pip. + + This is used to run a pip subprocess, for installing requirements into the build + environment. + """ + source = pathlib.Path(pip_location).resolve().parent + + if not source.is_dir(): + # This would happen if someone is using pip from inside a zip file. In that + # case, we can use that directly. + return str(source) + + return os.fsdecode(source / "__pip-runner__.py") + + +def _get_system_sitepackages() -> Set[str]: + """Get system site packages + + Usually from site.getsitepackages, + but fallback on `get_purelib()/get_platlib()` if unavailable + (e.g. in a virtualenv created by virtualenv<20) + + Returns normalized set of strings. + """ + if hasattr(site, "getsitepackages"): + system_sites = site.getsitepackages() + else: + # virtualenv < 20 overwrites site.py without getsitepackages + # fallback on get_purelib/get_platlib. + # this is known to miss things, but shouldn't in the cases + # where getsitepackages() has been removed (inside a virtualenv) + system_sites = [get_purelib(), get_platlib()] + return {os.path.normcase(path) for path in system_sites} + + +class BuildEnvironment: + """Creates and manages an isolated environment to install build deps""" + + def __init__(self) -> None: + temp_dir = TempDirectory(kind=tempdir_kinds.BUILD_ENV, globally_managed=True) + + self._prefixes = OrderedDict( + (name, _Prefix(os.path.join(temp_dir.path, name))) + for name in ("normal", "overlay") + ) + + self._bin_dirs: List[str] = [] + self._lib_dirs: List[str] = [] + for prefix in reversed(list(self._prefixes.values())): + self._bin_dirs.append(prefix.bin_dir) + self._lib_dirs.extend(prefix.lib_dirs) + + # Customize site to: + # - ensure .pth files are honored + # - prevent access to system site packages + system_sites = _get_system_sitepackages() + + self._site_dir = os.path.join(temp_dir.path, "site") + if not os.path.exists(self._site_dir): + os.mkdir(self._site_dir) + with open( + os.path.join(self._site_dir, "sitecustomize.py"), "w", encoding="utf-8" + ) as fp: + fp.write( + textwrap.dedent( + """ + import os, site, sys + + # First, drop system-sites related paths. + original_sys_path = sys.path[:] + known_paths = set() + for path in {system_sites!r}: + site.addsitedir(path, known_paths=known_paths) + system_paths = set( + os.path.normcase(path) + for path in sys.path[len(original_sys_path):] + ) + original_sys_path = [ + path for path in original_sys_path + if os.path.normcase(path) not in system_paths + ] + sys.path = original_sys_path + + # Second, add lib directories. + # ensuring .pth file are processed. + for path in {lib_dirs!r}: + assert not path in sys.path + site.addsitedir(path) + """ + ).format(system_sites=system_sites, lib_dirs=self._lib_dirs) + ) + + def __enter__(self) -> None: + self._save_env = { + name: os.environ.get(name, None) + for name in ("PATH", "PYTHONNOUSERSITE", "PYTHONPATH") + } + + path = self._bin_dirs[:] + old_path = self._save_env["PATH"] + if old_path: + path.extend(old_path.split(os.pathsep)) + + pythonpath = [self._site_dir] + + os.environ.update( + { + "PATH": os.pathsep.join(path), + "PYTHONNOUSERSITE": "1", + "PYTHONPATH": os.pathsep.join(pythonpath), + } + ) + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + for varname, old_value in self._save_env.items(): + if old_value is None: + os.environ.pop(varname, None) + else: + os.environ[varname] = old_value + + def check_requirements( + self, reqs: Iterable[str] + ) -> Tuple[Set[Tuple[str, str]], Set[str]]: + """Return 2 sets: + - conflicting requirements: set of (installed, wanted) reqs tuples + - missing requirements: set of reqs + """ + missing = set() + conflicting = set() + if reqs: + env = ( + get_environment(self._lib_dirs) + if hasattr(self, "_lib_dirs") + else get_default_environment() + ) + for req_str in reqs: + req = Requirement(req_str) + # We're explicitly evaluating with an empty extra value, since build + # environments are not provided any mechanism to select specific extras. + if req.marker is not None and not req.marker.evaluate({"extra": ""}): + continue + dist = env.get_distribution(req.name) + if not dist: + missing.add(req_str) + continue + if isinstance(dist.version, Version): + installed_req_str = f"{req.name}=={dist.version}" + else: + installed_req_str = f"{req.name}==={dist.version}" + if not req.specifier.contains(dist.version, prereleases=True): + conflicting.add((installed_req_str, req_str)) + # FIXME: Consider direct URL? + return conflicting, missing + + def install_requirements( + self, + finder: "PackageFinder", + requirements: Iterable[str], + prefix_as_string: str, + *, + kind: str, + ) -> None: + prefix = self._prefixes[prefix_as_string] + assert not prefix.setup + prefix.setup = True + if not requirements: + return + self._install_requirements( + get_runnable_pip(), + finder, + requirements, + prefix, + kind=kind, + ) + + @staticmethod + def _install_requirements( + pip_runnable: str, + finder: "PackageFinder", + requirements: Iterable[str], + prefix: _Prefix, + *, + kind: str, + ) -> None: + args: List[str] = [ + sys.executable, + pip_runnable, + "install", + "--ignore-installed", + "--no-user", + "--prefix", + prefix.path, + "--no-warn-script-location", + ] + if logger.getEffectiveLevel() <= logging.DEBUG: + args.append("-v") + for format_control in ("no_binary", "only_binary"): + formats = getattr(finder.format_control, format_control) + args.extend( + ( + "--" + format_control.replace("_", "-"), + ",".join(sorted(formats or {":none:"})), + ) + ) + + index_urls = finder.index_urls + if index_urls: + args.extend(["-i", index_urls[0]]) + for extra_index in index_urls[1:]: + args.extend(["--extra-index-url", extra_index]) + else: + args.append("--no-index") + for link in finder.find_links: + args.extend(["--find-links", link]) + + for host in finder.trusted_hosts: + args.extend(["--trusted-host", host]) + if finder.allow_all_prereleases: + args.append("--pre") + if finder.prefer_binary: + args.append("--prefer-binary") + args.append("--") + args.extend(requirements) + extra_environ = {"_PIP_STANDALONE_CERT": where()} + with open_spinner(f"Installing {kind}") as spinner: + call_subprocess( + args, + command_desc=f"pip subprocess to install {kind}", + spinner=spinner, + extra_environ=extra_environ, + ) + + +class NoOpBuildEnvironment(BuildEnvironment): + """A no-op drop-in replacement for BuildEnvironment""" + + def __init__(self) -> None: + pass + + def __enter__(self) -> None: + pass + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + pass + + def cleanup(self) -> None: + pass + + def install_requirements( + self, + finder: "PackageFinder", + requirements: Iterable[str], + prefix_as_string: str, + *, + kind: str, + ) -> None: + raise NotImplementedError() diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cache.py b/venv/lib/python3.12/site-packages/pip/_internal/cache.py new file mode 100644 index 0000000..f45ac23 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cache.py @@ -0,0 +1,290 @@ +"""Cache Management +""" + +import hashlib +import json +import logging +import os +from pathlib import Path +from typing import Any, Dict, List, Optional + +from pip._vendor.packaging.tags import Tag, interpreter_name, interpreter_version +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import InvalidWheelFilename +from pip._internal.models.direct_url import DirectUrl +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds +from pip._internal.utils.urls import path_to_url + +logger = logging.getLogger(__name__) + +ORIGIN_JSON_NAME = "origin.json" + + +def _hash_dict(d: Dict[str, str]) -> str: + """Return a stable sha224 of a dictionary.""" + s = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=True) + return hashlib.sha224(s.encode("ascii")).hexdigest() + + +class Cache: + """An abstract class - provides cache directories for data from links + + :param cache_dir: The root of the cache. + """ + + def __init__(self, cache_dir: str) -> None: + super().__init__() + assert not cache_dir or os.path.isabs(cache_dir) + self.cache_dir = cache_dir or None + + def _get_cache_path_parts(self, link: Link) -> List[str]: + """Get parts of part that must be os.path.joined with cache_dir""" + + # We want to generate an url to use as our cache key, we don't want to + # just re-use the URL because it might have other items in the fragment + # and we don't care about those. + key_parts = {"url": link.url_without_fragment} + if link.hash_name is not None and link.hash is not None: + key_parts[link.hash_name] = link.hash + if link.subdirectory_fragment: + key_parts["subdirectory"] = link.subdirectory_fragment + + # Include interpreter name, major and minor version in cache key + # to cope with ill-behaved sdists that build a different wheel + # depending on the python version their setup.py is being run on, + # and don't encode the difference in compatibility tags. + # https://github.com/pypa/pip/issues/7296 + key_parts["interpreter_name"] = interpreter_name() + key_parts["interpreter_version"] = interpreter_version() + + # Encode our key url with sha224, we'll use this because it has similar + # security properties to sha256, but with a shorter total output (and + # thus less secure). However the differences don't make a lot of + # difference for our use case here. + hashed = _hash_dict(key_parts) + + # We want to nest the directories some to prevent having a ton of top + # level directories where we might run out of sub directories on some + # FS. + parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]] + + return parts + + def _get_candidates(self, link: Link, canonical_package_name: str) -> List[Any]: + can_not_cache = not self.cache_dir or not canonical_package_name or not link + if can_not_cache: + return [] + + path = self.get_path_for_link(link) + if os.path.isdir(path): + return [(candidate, path) for candidate in os.listdir(path)] + return [] + + def get_path_for_link(self, link: Link) -> str: + """Return a directory to store cached items in for link.""" + raise NotImplementedError() + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + """Returns a link to a cached item if it exists, otherwise returns the + passed link. + """ + raise NotImplementedError() + + +class SimpleWheelCache(Cache): + """A cache of wheels for future installs.""" + + def __init__(self, cache_dir: str) -> None: + super().__init__(cache_dir) + + def get_path_for_link(self, link: Link) -> str: + """Return a directory to store cached wheels for link + + Because there are M wheels for any one sdist, we provide a directory + to cache them in, and then consult that directory when looking up + cache hits. + + We only insert things into the cache if they have plausible version + numbers, so that we don't contaminate the cache with things that were + not unique. E.g. ./package might have dozens of installs done for it + and build a version of 0.0...and if we built and cached a wheel, we'd + end up using the same wheel even if the source has been edited. + + :param link: The link of the sdist for which this will cache wheels. + """ + parts = self._get_cache_path_parts(link) + assert self.cache_dir + # Store wheels within the root cache_dir + return os.path.join(self.cache_dir, "wheels", *parts) + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + candidates = [] + + if not package_name: + return link + + canonical_package_name = canonicalize_name(package_name) + for wheel_name, wheel_dir in self._get_candidates(link, canonical_package_name): + try: + wheel = Wheel(wheel_name) + except InvalidWheelFilename: + continue + if canonicalize_name(wheel.name) != canonical_package_name: + logger.debug( + "Ignoring cached wheel %s for %s as it " + "does not match the expected distribution name %s.", + wheel_name, + link, + package_name, + ) + continue + if not wheel.supported(supported_tags): + # Built for a different python/arch/etc + continue + candidates.append( + ( + wheel.support_index_min(supported_tags), + wheel_name, + wheel_dir, + ) + ) + + if not candidates: + return link + + _, wheel_name, wheel_dir = min(candidates) + return Link(path_to_url(os.path.join(wheel_dir, wheel_name))) + + +class EphemWheelCache(SimpleWheelCache): + """A SimpleWheelCache that creates it's own temporary cache directory""" + + def __init__(self) -> None: + self._temp_dir = TempDirectory( + kind=tempdir_kinds.EPHEM_WHEEL_CACHE, + globally_managed=True, + ) + + super().__init__(self._temp_dir.path) + + +class CacheEntry: + def __init__( + self, + link: Link, + persistent: bool, + ): + self.link = link + self.persistent = persistent + self.origin: Optional[DirectUrl] = None + origin_direct_url_path = Path(self.link.file_path).parent / ORIGIN_JSON_NAME + if origin_direct_url_path.exists(): + try: + self.origin = DirectUrl.from_json( + origin_direct_url_path.read_text(encoding="utf-8") + ) + except Exception as e: + logger.warning( + "Ignoring invalid cache entry origin file %s for %s (%s)", + origin_direct_url_path, + link.filename, + e, + ) + + +class WheelCache(Cache): + """Wraps EphemWheelCache and SimpleWheelCache into a single Cache + + This Cache allows for gracefully degradation, using the ephem wheel cache + when a certain link is not found in the simple wheel cache first. + """ + + def __init__(self, cache_dir: str) -> None: + super().__init__(cache_dir) + self._wheel_cache = SimpleWheelCache(cache_dir) + self._ephem_cache = EphemWheelCache() + + def get_path_for_link(self, link: Link) -> str: + return self._wheel_cache.get_path_for_link(link) + + def get_ephem_path_for_link(self, link: Link) -> str: + return self._ephem_cache.get_path_for_link(link) + + def get( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Link: + cache_entry = self.get_cache_entry(link, package_name, supported_tags) + if cache_entry is None: + return link + return cache_entry.link + + def get_cache_entry( + self, + link: Link, + package_name: Optional[str], + supported_tags: List[Tag], + ) -> Optional[CacheEntry]: + """Returns a CacheEntry with a link to a cached item if it exists or + None. The cache entry indicates if the item was found in the persistent + or ephemeral cache. + """ + retval = self._wheel_cache.get( + link=link, + package_name=package_name, + supported_tags=supported_tags, + ) + if retval is not link: + return CacheEntry(retval, persistent=True) + + retval = self._ephem_cache.get( + link=link, + package_name=package_name, + supported_tags=supported_tags, + ) + if retval is not link: + return CacheEntry(retval, persistent=False) + + return None + + @staticmethod + def record_download_origin(cache_dir: str, download_info: DirectUrl) -> None: + origin_path = Path(cache_dir) / ORIGIN_JSON_NAME + if origin_path.exists(): + try: + origin = DirectUrl.from_json(origin_path.read_text(encoding="utf-8")) + except Exception as e: + logger.warning( + "Could not read origin file %s in cache entry (%s). " + "Will attempt to overwrite it.", + origin_path, + e, + ) + else: + # TODO: use DirectUrl.equivalent when + # https://github.com/pypa/pip/pull/10564 is merged. + if origin.url != download_info.url: + logger.warning( + "Origin URL %s in cache entry %s does not match download URL " + "%s. This is likely a pip bug or a cache corruption issue. " + "Will overwrite it with the new value.", + origin.url, + cache_dir, + download_info.url, + ) + origin_path.write_text(download_info.to_json(), encoding="utf-8") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/__init__.py new file mode 100644 index 0000000..e589bb9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/__init__.py @@ -0,0 +1,4 @@ +"""Subpackage containing all of pip's command line interface related code +""" + +# This file intentionally does not import submodules diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..9ffb67b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc new file mode 100644 index 0000000..fa7635f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc new file mode 100644 index 0000000..fdd8d75 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc new file mode 100644 index 0000000..dcd0296 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc new file mode 100644 index 0000000..5dcd323 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000..11b8254 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc new file mode 100644 index 0000000..d74f7ca Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc new file mode 100644 index 0000000..9000c26 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc new file mode 100644 index 0000000..6cbac30 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc new file mode 100644 index 0000000..e768b3a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc new file mode 100644 index 0000000..1a28c11 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc new file mode 100644 index 0000000..4932931 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py new file mode 100644 index 0000000..e5950b9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py @@ -0,0 +1,172 @@ +"""Logic that powers autocompletion installed by ``pip completion``. +""" + +import optparse +import os +import sys +from itertools import chain +from typing import Any, Iterable, List, Optional + +from pip._internal.cli.main_parser import create_main_parser +from pip._internal.commands import commands_dict, create_command +from pip._internal.metadata import get_default_environment + + +def autocomplete() -> None: + """Entry Point for completion of main and subcommand options.""" + # Don't complete if user hasn't sourced bash_completion file. + if "PIP_AUTO_COMPLETE" not in os.environ: + return + cwords = os.environ["COMP_WORDS"].split()[1:] + cword = int(os.environ["COMP_CWORD"]) + try: + current = cwords[cword - 1] + except IndexError: + current = "" + + parser = create_main_parser() + subcommands = list(commands_dict) + options = [] + + # subcommand + subcommand_name: Optional[str] = None + for word in cwords: + if word in subcommands: + subcommand_name = word + break + # subcommand options + if subcommand_name is not None: + # special case: 'help' subcommand has no options + if subcommand_name == "help": + sys.exit(1) + # special case: list locally installed dists for show and uninstall + should_list_installed = not current.startswith("-") and subcommand_name in [ + "show", + "uninstall", + ] + if should_list_installed: + env = get_default_environment() + lc = current.lower() + installed = [ + dist.canonical_name + for dist in env.iter_installed_distributions(local_only=True) + if dist.canonical_name.startswith(lc) + and dist.canonical_name not in cwords[1:] + ] + # if there are no dists installed, fall back to option completion + if installed: + for dist in installed: + print(dist) + sys.exit(1) + + should_list_installables = ( + not current.startswith("-") and subcommand_name == "install" + ) + if should_list_installables: + for path in auto_complete_paths(current, "path"): + print(path) + sys.exit(1) + + subcommand = create_command(subcommand_name) + + for opt in subcommand.parser.option_list_all: + if opt.help != optparse.SUPPRESS_HELP: + options += [ + (opt_str, opt.nargs) for opt_str in opt._long_opts + opt._short_opts + ] + + # filter out previously specified options from available options + prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]] + options = [(x, v) for (x, v) in options if x not in prev_opts] + # filter options by current input + options = [(k, v) for k, v in options if k.startswith(current)] + # get completion type given cwords and available subcommand options + completion_type = get_path_completion_type( + cwords, + cword, + subcommand.parser.option_list_all, + ) + # get completion files and directories if ``completion_type`` is + # ````, ```` or ```` + if completion_type: + paths = auto_complete_paths(current, completion_type) + options = [(path, 0) for path in paths] + for option in options: + opt_label = option[0] + # append '=' to options which require args + if option[1] and option[0][:2] == "--": + opt_label += "=" + print(opt_label) + else: + # show main parser options only when necessary + + opts = [i.option_list for i in parser.option_groups] + opts.append(parser.option_list) + flattened_opts = chain.from_iterable(opts) + if current.startswith("-"): + for opt in flattened_opts: + if opt.help != optparse.SUPPRESS_HELP: + subcommands += opt._long_opts + opt._short_opts + else: + # get completion type given cwords and all available options + completion_type = get_path_completion_type(cwords, cword, flattened_opts) + if completion_type: + subcommands = list(auto_complete_paths(current, completion_type)) + + print(" ".join([x for x in subcommands if x.startswith(current)])) + sys.exit(1) + + +def get_path_completion_type( + cwords: List[str], cword: int, opts: Iterable[Any] +) -> Optional[str]: + """Get the type of path completion (``file``, ``dir``, ``path`` or None) + + :param cwords: same as the environmental variable ``COMP_WORDS`` + :param cword: same as the environmental variable ``COMP_CWORD`` + :param opts: The available options to check + :return: path completion type (``file``, ``dir``, ``path`` or None) + """ + if cword < 2 or not cwords[cword - 2].startswith("-"): + return None + for opt in opts: + if opt.help == optparse.SUPPRESS_HELP: + continue + for o in str(opt).split("/"): + if cwords[cword - 2].split("=")[0] == o: + if not opt.metavar or any( + x in ("path", "file", "dir") for x in opt.metavar.split("/") + ): + return opt.metavar + return None + + +def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]: + """If ``completion_type`` is ``file`` or ``path``, list all regular files + and directories starting with ``current``; otherwise only list directories + starting with ``current``. + + :param current: The word to be completed + :param completion_type: path completion type(``file``, ``path`` or ``dir``) + :return: A generator of regular files and/or directories + """ + directory, filename = os.path.split(current) + current_path = os.path.abspath(directory) + # Don't complete paths if they can't be accessed + if not os.access(current_path, os.R_OK): + return + filename = os.path.normcase(filename) + # list all files that start with ``filename`` + file_list = ( + x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename) + ) + for f in file_list: + opt = os.path.join(current_path, f) + comp_file = os.path.normcase(os.path.join(directory, f)) + # complete regular files when there is not ```` after option + # complete directories when there is ````, ```` or + # ````after option + if completion_type != "dir" and os.path.isfile(opt): + yield comp_file + elif os.path.isdir(opt): + yield os.path.join(comp_file, "") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py new file mode 100644 index 0000000..db9d5cc --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py @@ -0,0 +1,236 @@ +"""Base Command class, and related routines""" + +import functools +import logging +import logging.config +import optparse +import os +import sys +import traceback +from optparse import Values +from typing import Any, Callable, List, Optional, Tuple + +from pip._vendor.rich import traceback as rich_traceback + +from pip._internal.cli import cmdoptions +from pip._internal.cli.command_context import CommandContextMixIn +from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip._internal.cli.status_codes import ( + ERROR, + PREVIOUS_BUILD_DIR_ERROR, + UNKNOWN_ERROR, + VIRTUALENV_NOT_FOUND, +) +from pip._internal.exceptions import ( + BadCommand, + CommandError, + DiagnosticPipError, + InstallationError, + NetworkConnectionError, + PreviousBuildDirError, + UninstallationError, +) +from pip._internal.utils.filesystem import check_path_owner +from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging +from pip._internal.utils.misc import get_prog, normalize_path +from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry +from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry +from pip._internal.utils.virtualenv import running_under_virtualenv + +__all__ = ["Command"] + +logger = logging.getLogger(__name__) + + +class Command(CommandContextMixIn): + usage: str = "" + ignore_require_venv: bool = False + + def __init__(self, name: str, summary: str, isolated: bool = False) -> None: + super().__init__() + + self.name = name + self.summary = summary + self.parser = ConfigOptionParser( + usage=self.usage, + prog=f"{get_prog()} {name}", + formatter=UpdatingDefaultsHelpFormatter(), + add_help_option=False, + name=name, + description=self.__doc__, + isolated=isolated, + ) + + self.tempdir_registry: Optional[TempDirRegistry] = None + + # Commands should add options to this option group + optgroup_name = f"{self.name.capitalize()} Options" + self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) + + # Add the general options + gen_opts = cmdoptions.make_option_group( + cmdoptions.general_group, + self.parser, + ) + self.parser.add_option_group(gen_opts) + + self.add_options() + + def add_options(self) -> None: + pass + + def handle_pip_version_check(self, options: Values) -> None: + """ + This is a no-op so that commands by default do not do the pip version + check. + """ + # Make sure we do the pip version check if the index_group options + # are present. + assert not hasattr(options, "no_index") + + def run(self, options: Values, args: List[str]) -> int: + raise NotImplementedError + + def parse_args(self, args: List[str]) -> Tuple[Values, List[str]]: + # factored out for testability + return self.parser.parse_args(args) + + def main(self, args: List[str]) -> int: + try: + with self.main_context(): + return self._main(args) + finally: + logging.shutdown() + + def _main(self, args: List[str]) -> int: + # We must initialize this before the tempdir manager, otherwise the + # configuration would not be accessible by the time we clean up the + # tempdir manager. + self.tempdir_registry = self.enter_context(tempdir_registry()) + # Intentionally set as early as possible so globally-managed temporary + # directories are available to the rest of the code. + self.enter_context(global_tempdir_manager()) + + options, args = self.parse_args(args) + + # Set verbosity so that it can be used elsewhere. + self.verbosity = options.verbose - options.quiet + + level_number = setup_logging( + verbosity=self.verbosity, + no_color=options.no_color, + user_log_file=options.log, + ) + + always_enabled_features = set(options.features_enabled) & set( + cmdoptions.ALWAYS_ENABLED_FEATURES + ) + if always_enabled_features: + logger.warning( + "The following features are always enabled: %s. ", + ", ".join(sorted(always_enabled_features)), + ) + + # Make sure that the --python argument isn't specified after the + # subcommand. We can tell, because if --python was specified, + # we should only reach this point if we're running in the created + # subprocess, which has the _PIP_RUNNING_IN_SUBPROCESS environment + # variable set. + if options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ: + logger.critical( + "The --python option must be placed before the pip subcommand name" + ) + sys.exit(ERROR) + + # TODO: Try to get these passing down from the command? + # without resorting to os.environ to hold these. + # This also affects isolated builds and it should. + + if options.no_input: + os.environ["PIP_NO_INPUT"] = "1" + + if options.exists_action: + os.environ["PIP_EXISTS_ACTION"] = " ".join(options.exists_action) + + if options.require_venv and not self.ignore_require_venv: + # If a venv is required check if it can really be found + if not running_under_virtualenv(): + logger.critical("Could not find an activated virtualenv (required).") + sys.exit(VIRTUALENV_NOT_FOUND) + + if options.cache_dir: + options.cache_dir = normalize_path(options.cache_dir) + if not check_path_owner(options.cache_dir): + logger.warning( + "The directory '%s' or its parent directory is not owned " + "or is not writable by the current user. The cache " + "has been disabled. Check the permissions and owner of " + "that directory. If executing pip with sudo, you should " + "use sudo's -H flag.", + options.cache_dir, + ) + options.cache_dir = None + + def intercepts_unhandled_exc( + run_func: Callable[..., int] + ) -> Callable[..., int]: + @functools.wraps(run_func) + def exc_logging_wrapper(*args: Any) -> int: + try: + status = run_func(*args) + assert isinstance(status, int) + return status + except DiagnosticPipError as exc: + logger.error("%s", exc, extra={"rich": True}) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except PreviousBuildDirError as exc: + logger.critical(str(exc)) + logger.debug("Exception information:", exc_info=True) + + return PREVIOUS_BUILD_DIR_ERROR + except ( + InstallationError, + UninstallationError, + BadCommand, + NetworkConnectionError, + ) as exc: + logger.critical(str(exc)) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except CommandError as exc: + logger.critical("%s", exc) + logger.debug("Exception information:", exc_info=True) + + return ERROR + except BrokenStdoutLoggingError: + # Bypass our logger and write any remaining messages to + # stderr because stdout no longer works. + print("ERROR: Pipe to stdout was broken", file=sys.stderr) + if level_number <= logging.DEBUG: + traceback.print_exc(file=sys.stderr) + + return ERROR + except KeyboardInterrupt: + logger.critical("Operation cancelled by user") + logger.debug("Exception information:", exc_info=True) + + return ERROR + except BaseException: + logger.critical("Exception:", exc_info=True) + + return UNKNOWN_ERROR + + return exc_logging_wrapper + + try: + if not options.debug_mode: + run = intercepts_unhandled_exc(self.run) + else: + run = self.run + rich_traceback.install(show_locals=True) + return run(options, args) + finally: + self.handle_pip_version_check(options) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py new file mode 100644 index 0000000..d643256 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py @@ -0,0 +1,1074 @@ +""" +shared options and groups + +The principle here is to define options once, but *not* instantiate them +globally. One reason being that options with action='append' can carry state +between parses. pip parses general options twice internally, and shouldn't +pass on state. To be consistent, all options will follow this design. +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import importlib.util +import logging +import os +import textwrap +from functools import partial +from optparse import SUPPRESS_HELP, Option, OptionGroup, OptionParser, Values +from textwrap import dedent +from typing import Any, Callable, Dict, Optional, Tuple + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.parser import ConfigOptionParser +from pip._internal.exceptions import CommandError +from pip._internal.locations import USER_CACHE_DIR, get_src_prefix +from pip._internal.models.format_control import FormatControl +from pip._internal.models.index import PyPI +from pip._internal.models.target_python import TargetPython +from pip._internal.utils.hashes import STRONG_HASHES +from pip._internal.utils.misc import strtobool + +logger = logging.getLogger(__name__) + + +def raise_option_error(parser: OptionParser, option: Option, msg: str) -> None: + """ + Raise an option parsing error using parser.error(). + + Args: + parser: an OptionParser instance. + option: an Option instance. + msg: the error text. + """ + msg = f"{option} error: {msg}" + msg = textwrap.fill(" ".join(msg.split())) + parser.error(msg) + + +def make_option_group(group: Dict[str, Any], parser: ConfigOptionParser) -> OptionGroup: + """ + Return an OptionGroup object + group -- assumed to be dict with 'name' and 'options' keys + parser -- an optparse Parser + """ + option_group = OptionGroup(parser, group["name"]) + for option in group["options"]: + option_group.add_option(option()) + return option_group + + +def check_dist_restriction(options: Values, check_target: bool = False) -> None: + """Function for determining if custom platform options are allowed. + + :param options: The OptionParser options. + :param check_target: Whether or not to check if --target is being used. + """ + dist_restriction_set = any( + [ + options.python_version, + options.platforms, + options.abis, + options.implementation, + ] + ) + + binary_only = FormatControl(set(), {":all:"}) + sdist_dependencies_allowed = ( + options.format_control != binary_only and not options.ignore_dependencies + ) + + # Installations or downloads using dist restrictions must not combine + # source distributions and dist-specific wheels, as they are not + # guaranteed to be locally compatible. + if dist_restriction_set and sdist_dependencies_allowed: + raise CommandError( + "When restricting platform and interpreter constraints using " + "--python-version, --platform, --abi, or --implementation, " + "either --no-deps must be set, or --only-binary=:all: must be " + "set and --no-binary must not be set (or must be set to " + ":none:)." + ) + + if check_target: + if not options.dry_run and dist_restriction_set and not options.target_dir: + raise CommandError( + "Can not use any platform or abi specific options unless " + "installing via '--target' or using '--dry-run'" + ) + + +def _path_option_check(option: Option, opt: str, value: str) -> str: + return os.path.expanduser(value) + + +def _package_name_option_check(option: Option, opt: str, value: str) -> str: + return canonicalize_name(value) + + +class PipOption(Option): + TYPES = Option.TYPES + ("path", "package_name") + TYPE_CHECKER = Option.TYPE_CHECKER.copy() + TYPE_CHECKER["package_name"] = _package_name_option_check + TYPE_CHECKER["path"] = _path_option_check + + +########### +# options # +########### + +help_: Callable[..., Option] = partial( + Option, + "-h", + "--help", + dest="help", + action="help", + help="Show help.", +) + +debug_mode: Callable[..., Option] = partial( + Option, + "--debug", + dest="debug_mode", + action="store_true", + default=False, + help=( + "Let unhandled exceptions propagate outside the main subroutine, " + "instead of logging them to stderr." + ), +) + +isolated_mode: Callable[..., Option] = partial( + Option, + "--isolated", + dest="isolated_mode", + action="store_true", + default=False, + help=( + "Run pip in an isolated mode, ignoring environment variables and user " + "configuration." + ), +) + +require_virtualenv: Callable[..., Option] = partial( + Option, + "--require-virtualenv", + "--require-venv", + dest="require_venv", + action="store_true", + default=False, + help=( + "Allow pip to only run in a virtual environment; " + "exit with an error otherwise." + ), +) + +override_externally_managed: Callable[..., Option] = partial( + Option, + "--break-system-packages", + dest="override_externally_managed", + action="store_true", + help="Allow pip to modify an EXTERNALLY-MANAGED Python installation", +) + +python: Callable[..., Option] = partial( + Option, + "--python", + dest="python", + help="Run pip with the specified Python interpreter.", +) + +verbose: Callable[..., Option] = partial( + Option, + "-v", + "--verbose", + dest="verbose", + action="count", + default=0, + help="Give more output. Option is additive, and can be used up to 3 times.", +) + +no_color: Callable[..., Option] = partial( + Option, + "--no-color", + dest="no_color", + action="store_true", + default=False, + help="Suppress colored output.", +) + +version: Callable[..., Option] = partial( + Option, + "-V", + "--version", + dest="version", + action="store_true", + help="Show version and exit.", +) + +quiet: Callable[..., Option] = partial( + Option, + "-q", + "--quiet", + dest="quiet", + action="count", + default=0, + help=( + "Give less output. Option is additive, and can be used up to 3" + " times (corresponding to WARNING, ERROR, and CRITICAL logging" + " levels)." + ), +) + +progress_bar: Callable[..., Option] = partial( + Option, + "--progress-bar", + dest="progress_bar", + type="choice", + choices=["on", "off"], + default="on", + help="Specify whether the progress bar should be used [on, off] (default: on)", +) + +log: Callable[..., Option] = partial( + PipOption, + "--log", + "--log-file", + "--local-log", + dest="log", + metavar="path", + type="path", + help="Path to a verbose appending log.", +) + +no_input: Callable[..., Option] = partial( + Option, + # Don't ask for input + "--no-input", + dest="no_input", + action="store_true", + default=False, + help="Disable prompting for input.", +) + +keyring_provider: Callable[..., Option] = partial( + Option, + "--keyring-provider", + dest="keyring_provider", + choices=["auto", "disabled", "import", "subprocess"], + default="auto", + help=( + "Enable the credential lookup via the keyring library if user input is allowed." + " Specify which mechanism to use [disabled, import, subprocess]." + " (default: disabled)" + ), +) + +proxy: Callable[..., Option] = partial( + Option, + "--proxy", + dest="proxy", + type="str", + default="", + help="Specify a proxy in the form scheme://[user:passwd@]proxy.server:port.", +) + +retries: Callable[..., Option] = partial( + Option, + "--retries", + dest="retries", + type="int", + default=5, + help="Maximum number of retries each connection should attempt " + "(default %default times).", +) + +timeout: Callable[..., Option] = partial( + Option, + "--timeout", + "--default-timeout", + metavar="sec", + dest="timeout", + type="float", + default=15, + help="Set the socket timeout (default %default seconds).", +) + + +def exists_action() -> Option: + return Option( + # Option when path already exist + "--exists-action", + dest="exists_action", + type="choice", + choices=["s", "i", "w", "b", "a"], + default=[], + action="append", + metavar="action", + help="Default action when a path already exists: " + "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.", + ) + + +cert: Callable[..., Option] = partial( + PipOption, + "--cert", + dest="cert", + type="path", + metavar="path", + help=( + "Path to PEM-encoded CA certificate bundle. " + "If provided, overrides the default. " + "See 'SSL Certificate Verification' in pip documentation " + "for more information." + ), +) + +client_cert: Callable[..., Option] = partial( + PipOption, + "--client-cert", + dest="client_cert", + type="path", + default=None, + metavar="path", + help="Path to SSL client certificate, a single file containing the " + "private key and the certificate in PEM format.", +) + +index_url: Callable[..., Option] = partial( + Option, + "-i", + "--index-url", + "--pypi-url", + dest="index_url", + metavar="URL", + default=PyPI.simple_url, + help="Base URL of the Python Package Index (default %default). " + "This should point to a repository compliant with PEP 503 " + "(the simple repository API) or a local directory laid out " + "in the same format.", +) + + +def extra_index_url() -> Option: + return Option( + "--extra-index-url", + dest="extra_index_urls", + metavar="URL", + action="append", + default=[], + help="Extra URLs of package indexes to use in addition to " + "--index-url. Should follow the same rules as " + "--index-url.", + ) + + +no_index: Callable[..., Option] = partial( + Option, + "--no-index", + dest="no_index", + action="store_true", + default=False, + help="Ignore package index (only looking at --find-links URLs instead).", +) + + +def find_links() -> Option: + return Option( + "-f", + "--find-links", + dest="find_links", + action="append", + default=[], + metavar="url", + help="If a URL or path to an html file, then parse for links to " + "archives such as sdist (.tar.gz) or wheel (.whl) files. " + "If a local path or file:// URL that's a directory, " + "then look for archives in the directory listing. " + "Links to VCS project URLs are not supported.", + ) + + +def trusted_host() -> Option: + return Option( + "--trusted-host", + dest="trusted_hosts", + action="append", + metavar="HOSTNAME", + default=[], + help="Mark this host or host:port pair as trusted, even though it " + "does not have valid or any HTTPS.", + ) + + +def constraints() -> Option: + return Option( + "-c", + "--constraint", + dest="constraints", + action="append", + default=[], + metavar="file", + help="Constrain versions using the given constraints file. " + "This option can be used multiple times.", + ) + + +def requirements() -> Option: + return Option( + "-r", + "--requirement", + dest="requirements", + action="append", + default=[], + metavar="file", + help="Install from the given requirements file. " + "This option can be used multiple times.", + ) + + +def editable() -> Option: + return Option( + "-e", + "--editable", + dest="editables", + action="append", + default=[], + metavar="path/url", + help=( + "Install a project in editable mode (i.e. setuptools " + '"develop mode") from a local project path or a VCS url.' + ), + ) + + +def _handle_src(option: Option, opt_str: str, value: str, parser: OptionParser) -> None: + value = os.path.abspath(value) + setattr(parser.values, option.dest, value) + + +src: Callable[..., Option] = partial( + PipOption, + "--src", + "--source", + "--source-dir", + "--source-directory", + dest="src_dir", + type="path", + metavar="dir", + default=get_src_prefix(), + action="callback", + callback=_handle_src, + help="Directory to check out editable projects into. " + 'The default in a virtualenv is "/src". ' + 'The default for global installs is "/src".', +) + + +def _get_format_control(values: Values, option: Option) -> Any: + """Get a format_control object.""" + return getattr(values, option.dest) + + +def _handle_no_binary( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, + existing.no_binary, + existing.only_binary, + ) + + +def _handle_only_binary( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + existing = _get_format_control(parser.values, option) + FormatControl.handle_mutual_excludes( + value, + existing.only_binary, + existing.no_binary, + ) + + +def no_binary() -> Option: + format_control = FormatControl(set(), set()) + return Option( + "--no-binary", + dest="format_control", + action="callback", + callback=_handle_no_binary, + type="str", + default=format_control, + help="Do not use binary packages. Can be supplied multiple times, and " + 'each time adds to the existing value. Accepts either ":all:" to ' + 'disable all binary packages, ":none:" to empty the set (notice ' + "the colons), or one or more package names with commas between " + "them (no colons). Note that some packages are tricky to compile " + "and may fail to install when this option is used on them.", + ) + + +def only_binary() -> Option: + format_control = FormatControl(set(), set()) + return Option( + "--only-binary", + dest="format_control", + action="callback", + callback=_handle_only_binary, + type="str", + default=format_control, + help="Do not use source packages. Can be supplied multiple times, and " + 'each time adds to the existing value. Accepts either ":all:" to ' + 'disable all source packages, ":none:" to empty the set, or one ' + "or more package names with commas between them. Packages " + "without binary distributions will fail to install when this " + "option is used on them.", + ) + + +platforms: Callable[..., Option] = partial( + Option, + "--platform", + dest="platforms", + metavar="platform", + action="append", + default=None, + help=( + "Only use wheels compatible with . Defaults to the " + "platform of the running system. Use this option multiple times to " + "specify multiple platforms supported by the target interpreter." + ), +) + + +# This was made a separate function for unit-testing purposes. +def _convert_python_version(value: str) -> Tuple[Tuple[int, ...], Optional[str]]: + """ + Convert a version string like "3", "37", or "3.7.3" into a tuple of ints. + + :return: A 2-tuple (version_info, error_msg), where `error_msg` is + non-None if and only if there was a parsing error. + """ + if not value: + # The empty string is the same as not providing a value. + return (None, None) + + parts = value.split(".") + if len(parts) > 3: + return ((), "at most three version parts are allowed") + + if len(parts) == 1: + # Then we are in the case of "3" or "37". + value = parts[0] + if len(value) > 1: + parts = [value[0], value[1:]] + + try: + version_info = tuple(int(part) for part in parts) + except ValueError: + return ((), "each version part must be an integer") + + return (version_info, None) + + +def _handle_python_version( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + """ + Handle a provided --python-version value. + """ + version_info, error_msg = _convert_python_version(value) + if error_msg is not None: + msg = f"invalid --python-version value: {value!r}: {error_msg}" + raise_option_error(parser, option=option, msg=msg) + + parser.values.python_version = version_info + + +python_version: Callable[..., Option] = partial( + Option, + "--python-version", + dest="python_version", + metavar="python_version", + action="callback", + callback=_handle_python_version, + type="str", + default=None, + help=dedent( + """\ + The Python interpreter version to use for wheel and "Requires-Python" + compatibility checks. Defaults to a version derived from the running + interpreter. The version can be specified using up to three dot-separated + integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor + version can also be given as a string without dots (e.g. "37" for 3.7.0). + """ + ), +) + + +implementation: Callable[..., Option] = partial( + Option, + "--implementation", + dest="implementation", + metavar="implementation", + default=None, + help=( + "Only use wheels compatible with Python " + "implementation , e.g. 'pp', 'jy', 'cp', " + " or 'ip'. If not specified, then the current " + "interpreter implementation is used. Use 'py' to force " + "implementation-agnostic wheels." + ), +) + + +abis: Callable[..., Option] = partial( + Option, + "--abi", + dest="abis", + metavar="abi", + action="append", + default=None, + help=( + "Only use wheels compatible with Python abi , e.g. 'pypy_41'. " + "If not specified, then the current interpreter abi tag is used. " + "Use this option multiple times to specify multiple abis supported " + "by the target interpreter. Generally you will need to specify " + "--implementation, --platform, and --python-version when using this " + "option." + ), +) + + +def add_target_python_options(cmd_opts: OptionGroup) -> None: + cmd_opts.add_option(platforms()) + cmd_opts.add_option(python_version()) + cmd_opts.add_option(implementation()) + cmd_opts.add_option(abis()) + + +def make_target_python(options: Values) -> TargetPython: + target_python = TargetPython( + platforms=options.platforms, + py_version_info=options.python_version, + abis=options.abis, + implementation=options.implementation, + ) + + return target_python + + +def prefer_binary() -> Option: + return Option( + "--prefer-binary", + dest="prefer_binary", + action="store_true", + default=False, + help=( + "Prefer binary packages over source packages, even if the " + "source packages are newer." + ), + ) + + +cache_dir: Callable[..., Option] = partial( + PipOption, + "--cache-dir", + dest="cache_dir", + default=USER_CACHE_DIR, + metavar="dir", + type="path", + help="Store the cache data in .", +) + + +def _handle_no_cache_dir( + option: Option, opt: str, value: str, parser: OptionParser +) -> None: + """ + Process a value provided for the --no-cache-dir option. + + This is an optparse.Option callback for the --no-cache-dir option. + """ + # The value argument will be None if --no-cache-dir is passed via the + # command-line, since the option doesn't accept arguments. However, + # the value can be non-None if the option is triggered e.g. by an + # environment variable, like PIP_NO_CACHE_DIR=true. + if value is not None: + # Then parse the string value to get argument error-checking. + try: + strtobool(value) + except ValueError as exc: + raise_option_error(parser, option=option, msg=str(exc)) + + # Originally, setting PIP_NO_CACHE_DIR to a value that strtobool() + # converted to 0 (like "false" or "no") caused cache_dir to be disabled + # rather than enabled (logic would say the latter). Thus, we disable + # the cache directory not just on values that parse to True, but (for + # backwards compatibility reasons) also on values that parse to False. + # In other words, always set it to False if the option is provided in + # some (valid) form. + parser.values.cache_dir = False + + +no_cache: Callable[..., Option] = partial( + Option, + "--no-cache-dir", + dest="cache_dir", + action="callback", + callback=_handle_no_cache_dir, + help="Disable the cache.", +) + +no_deps: Callable[..., Option] = partial( + Option, + "--no-deps", + "--no-dependencies", + dest="ignore_dependencies", + action="store_true", + default=False, + help="Don't install package dependencies.", +) + +ignore_requires_python: Callable[..., Option] = partial( + Option, + "--ignore-requires-python", + dest="ignore_requires_python", + action="store_true", + help="Ignore the Requires-Python information.", +) + +no_build_isolation: Callable[..., Option] = partial( + Option, + "--no-build-isolation", + dest="build_isolation", + action="store_false", + default=True, + help="Disable isolation when building a modern source distribution. " + "Build dependencies specified by PEP 518 must be already installed " + "if this option is used.", +) + +check_build_deps: Callable[..., Option] = partial( + Option, + "--check-build-dependencies", + dest="check_build_deps", + action="store_true", + default=False, + help="Check the build dependencies when PEP517 is used.", +) + + +def _handle_no_use_pep517( + option: Option, opt: str, value: str, parser: OptionParser +) -> None: + """ + Process a value provided for the --no-use-pep517 option. + + This is an optparse.Option callback for the no_use_pep517 option. + """ + # Since --no-use-pep517 doesn't accept arguments, the value argument + # will be None if --no-use-pep517 is passed via the command-line. + # However, the value can be non-None if the option is triggered e.g. + # by an environment variable, for example "PIP_NO_USE_PEP517=true". + if value is not None: + msg = """A value was passed for --no-use-pep517, + probably using either the PIP_NO_USE_PEP517 environment variable + or the "no-use-pep517" config file option. Use an appropriate value + of the PIP_USE_PEP517 environment variable or the "use-pep517" + config file option instead. + """ + raise_option_error(parser, option=option, msg=msg) + + # If user doesn't wish to use pep517, we check if setuptools and wheel are installed + # and raise error if it is not. + packages = ("setuptools", "wheel") + if not all(importlib.util.find_spec(package) for package in packages): + msg = ( + f"It is not possible to use --no-use-pep517 " + f"without {' and '.join(packages)} installed." + ) + raise_option_error(parser, option=option, msg=msg) + + # Otherwise, --no-use-pep517 was passed via the command-line. + parser.values.use_pep517 = False + + +use_pep517: Any = partial( + Option, + "--use-pep517", + dest="use_pep517", + action="store_true", + default=None, + help="Use PEP 517 for building source distributions " + "(use --no-use-pep517 to force legacy behaviour).", +) + +no_use_pep517: Any = partial( + Option, + "--no-use-pep517", + dest="use_pep517", + action="callback", + callback=_handle_no_use_pep517, + default=None, + help=SUPPRESS_HELP, +) + + +def _handle_config_settings( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + key, sep, val = value.partition("=") + if sep != "=": + parser.error(f"Arguments to {opt_str} must be of the form KEY=VAL") + dest = getattr(parser.values, option.dest) + if dest is None: + dest = {} + setattr(parser.values, option.dest, dest) + if key in dest: + if isinstance(dest[key], list): + dest[key].append(val) + else: + dest[key] = [dest[key], val] + else: + dest[key] = val + + +config_settings: Callable[..., Option] = partial( + Option, + "-C", + "--config-settings", + dest="config_settings", + type=str, + action="callback", + callback=_handle_config_settings, + metavar="settings", + help="Configuration settings to be passed to the PEP 517 build backend. " + "Settings take the form KEY=VALUE. Use multiple --config-settings options " + "to pass multiple keys to the backend.", +) + +build_options: Callable[..., Option] = partial( + Option, + "--build-option", + dest="build_options", + metavar="options", + action="append", + help="Extra arguments to be supplied to 'setup.py bdist_wheel'.", +) + +global_options: Callable[..., Option] = partial( + Option, + "--global-option", + dest="global_options", + action="append", + metavar="options", + help="Extra global options to be supplied to the setup.py " + "call before the install or bdist_wheel command.", +) + +no_clean: Callable[..., Option] = partial( + Option, + "--no-clean", + action="store_true", + default=False, + help="Don't clean up build directories.", +) + +pre: Callable[..., Option] = partial( + Option, + "--pre", + action="store_true", + default=False, + help="Include pre-release and development versions. By default, " + "pip only finds stable versions.", +) + +disable_pip_version_check: Callable[..., Option] = partial( + Option, + "--disable-pip-version-check", + dest="disable_pip_version_check", + action="store_true", + default=True, + help="Don't periodically check PyPI to determine whether a new version " + "of pip is available for download. Implied with --no-index.", +) + +root_user_action: Callable[..., Option] = partial( + Option, + "--root-user-action", + dest="root_user_action", + default="warn", + choices=["warn", "ignore"], + help="Action if pip is run as a root user. By default, a warning message is shown.", +) + + +def _handle_merge_hash( + option: Option, opt_str: str, value: str, parser: OptionParser +) -> None: + """Given a value spelled "algo:digest", append the digest to a list + pointed to in a dict by the algo name.""" + if not parser.values.hashes: + parser.values.hashes = {} + try: + algo, digest = value.split(":", 1) + except ValueError: + parser.error( + f"Arguments to {opt_str} must be a hash name " + "followed by a value, like --hash=sha256:" + "abcde..." + ) + if algo not in STRONG_HASHES: + parser.error( + "Allowed hash algorithms for {} are {}.".format( + opt_str, ", ".join(STRONG_HASHES) + ) + ) + parser.values.hashes.setdefault(algo, []).append(digest) + + +hash: Callable[..., Option] = partial( + Option, + "--hash", + # Hash values eventually end up in InstallRequirement.hashes due to + # __dict__ copying in process_line(). + dest="hashes", + action="callback", + callback=_handle_merge_hash, + type="string", + help="Verify that the package's archive matches this " + "hash before installing. Example: --hash=sha256:abcdef...", +) + + +require_hashes: Callable[..., Option] = partial( + Option, + "--require-hashes", + dest="require_hashes", + action="store_true", + default=False, + help="Require a hash to check each requirement against, for " + "repeatable installs. This option is implied when any package in a " + "requirements file has a --hash option.", +) + + +list_path: Callable[..., Option] = partial( + PipOption, + "--path", + dest="path", + type="path", + action="append", + help="Restrict to the specified installation path for listing " + "packages (can be used multiple times).", +) + + +def check_list_path_option(options: Values) -> None: + if options.path and (options.user or options.local): + raise CommandError("Cannot combine '--path' with '--user' or '--local'") + + +list_exclude: Callable[..., Option] = partial( + PipOption, + "--exclude", + dest="excludes", + action="append", + metavar="package", + type="package_name", + help="Exclude specified package from the output", +) + + +no_python_version_warning: Callable[..., Option] = partial( + Option, + "--no-python-version-warning", + dest="no_python_version_warning", + action="store_true", + default=False, + help="Silence deprecation warnings for upcoming unsupported Pythons.", +) + + +# Features that are now always on. A warning is printed if they are used. +ALWAYS_ENABLED_FEATURES = [ + "no-binary-enable-wheel-cache", # always on since 23.1 +] + +use_new_feature: Callable[..., Option] = partial( + Option, + "--use-feature", + dest="features_enabled", + metavar="feature", + action="append", + default=[], + choices=[ + "fast-deps", + "truststore", + ] + + ALWAYS_ENABLED_FEATURES, + help="Enable new functionality, that may be backward incompatible.", +) + +use_deprecated_feature: Callable[..., Option] = partial( + Option, + "--use-deprecated", + dest="deprecated_features_enabled", + metavar="feature", + action="append", + default=[], + choices=[ + "legacy-resolver", + ], + help=("Enable deprecated functionality, that will be removed in the future."), +) + + +########## +# groups # +########## + +general_group: Dict[str, Any] = { + "name": "General Options", + "options": [ + help_, + debug_mode, + isolated_mode, + require_virtualenv, + python, + verbose, + version, + quiet, + log, + no_input, + keyring_provider, + proxy, + retries, + timeout, + exists_action, + trusted_host, + cert, + client_cert, + cache_dir, + no_cache, + disable_pip_version_check, + no_color, + no_python_version_warning, + use_new_feature, + use_deprecated_feature, + ], +} + +index_group: Dict[str, Any] = { + "name": "Package Index Options", + "options": [ + index_url, + extra_index_url, + no_index, + find_links, + ], +} diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/command_context.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/command_context.py new file mode 100644 index 0000000..139995a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/command_context.py @@ -0,0 +1,27 @@ +from contextlib import ExitStack, contextmanager +from typing import ContextManager, Generator, TypeVar + +_T = TypeVar("_T", covariant=True) + + +class CommandContextMixIn: + def __init__(self) -> None: + super().__init__() + self._in_main_context = False + self._main_context = ExitStack() + + @contextmanager + def main_context(self) -> Generator[None, None, None]: + assert not self._in_main_context + + self._in_main_context = True + try: + with self._main_context: + yield + finally: + self._in_main_context = False + + def enter_context(self, context_provider: ContextManager[_T]) -> _T: + assert self._in_main_context + + return self._main_context.enter_context(context_provider) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/main.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/main.py new file mode 100644 index 0000000..7e061f5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/main.py @@ -0,0 +1,79 @@ +"""Primary application entrypoint. +""" +import locale +import logging +import os +import sys +import warnings +from typing import List, Optional + +from pip._internal.cli.autocompletion import autocomplete +from pip._internal.cli.main_parser import parse_command +from pip._internal.commands import create_command +from pip._internal.exceptions import PipError +from pip._internal.utils import deprecation + +logger = logging.getLogger(__name__) + + +# Do not import and use main() directly! Using it directly is actively +# discouraged by pip's maintainers. The name, location and behavior of +# this function is subject to change, so calling it directly is not +# portable across different pip versions. + +# In addition, running pip in-process is unsupported and unsafe. This is +# elaborated in detail at +# https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program. +# That document also provides suggestions that should work for nearly +# all users that are considering importing and using main() directly. + +# However, we know that certain users will still want to invoke pip +# in-process. If you understand and accept the implications of using pip +# in an unsupported manner, the best approach is to use runpy to avoid +# depending on the exact location of this entry point. + +# The following example shows how to use runpy to invoke pip in that +# case: +# +# sys.argv = ["pip", your, args, here] +# runpy.run_module("pip", run_name="__main__") +# +# Note that this will exit the process after running, unlike a direct +# call to main. As it is not safe to do any processing after calling +# main, this should not be an issue in practice. + + +def main(args: Optional[List[str]] = None) -> int: + if args is None: + args = sys.argv[1:] + + # Suppress the pkg_resources deprecation warning + # Note - we use a module of .*pkg_resources to cover + # the normal case (pip._vendor.pkg_resources) and the + # devendored case (a bare pkg_resources) + warnings.filterwarnings( + action="ignore", category=DeprecationWarning, module=".*pkg_resources" + ) + + # Configure our deprecation warnings to be sent through loggers + deprecation.install_warning_logger() + + autocomplete() + + try: + cmd_name, cmd_args = parse_command(args) + except PipError as exc: + sys.stderr.write(f"ERROR: {exc}") + sys.stderr.write(os.linesep) + sys.exit(1) + + # Needed for locale.getpreferredencoding(False) to work + # in pip._internal.utils.encoding.auto_decode + try: + locale.setlocale(locale.LC_ALL, "") + except locale.Error as e: + # setlocale can apparently crash if locale are uninitialized + logger.debug("Ignoring error %s when setting locale", e) + command = create_command(cmd_name, isolated=("--isolated" in cmd_args)) + + return command.main(cmd_args) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py new file mode 100644 index 0000000..5ade356 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py @@ -0,0 +1,134 @@ +"""A single place for constructing and exposing the main parser +""" + +import os +import subprocess +import sys +from typing import List, Optional, Tuple + +from pip._internal.build_env import get_runnable_pip +from pip._internal.cli import cmdoptions +from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter +from pip._internal.commands import commands_dict, get_similar_commands +from pip._internal.exceptions import CommandError +from pip._internal.utils.misc import get_pip_version, get_prog + +__all__ = ["create_main_parser", "parse_command"] + + +def create_main_parser() -> ConfigOptionParser: + """Creates and returns the main parser for pip's CLI""" + + parser = ConfigOptionParser( + usage="\n%prog [options]", + add_help_option=False, + formatter=UpdatingDefaultsHelpFormatter(), + name="global", + prog=get_prog(), + ) + parser.disable_interspersed_args() + + parser.version = get_pip_version() + + # add the general options + gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) + parser.add_option_group(gen_opts) + + # so the help formatter knows + parser.main = True # type: ignore + + # create command listing for description + description = [""] + [ + f"{name:27} {command_info.summary}" + for name, command_info in commands_dict.items() + ] + parser.description = "\n".join(description) + + return parser + + +def identify_python_interpreter(python: str) -> Optional[str]: + # If the named file exists, use it. + # If it's a directory, assume it's a virtual environment and + # look for the environment's Python executable. + if os.path.exists(python): + if os.path.isdir(python): + # bin/python for Unix, Scripts/python.exe for Windows + # Try both in case of odd cases like cygwin. + for exe in ("bin/python", "Scripts/python.exe"): + py = os.path.join(python, exe) + if os.path.exists(py): + return py + else: + return python + + # Could not find the interpreter specified + return None + + +def parse_command(args: List[str]) -> Tuple[str, List[str]]: + parser = create_main_parser() + + # Note: parser calls disable_interspersed_args(), so the result of this + # call is to split the initial args into the general options before the + # subcommand and everything else. + # For example: + # args: ['--timeout=5', 'install', '--user', 'INITools'] + # general_options: ['--timeout==5'] + # args_else: ['install', '--user', 'INITools'] + general_options, args_else = parser.parse_args(args) + + # --python + if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ: + # Re-invoke pip using the specified Python interpreter + interpreter = identify_python_interpreter(general_options.python) + if interpreter is None: + raise CommandError( + f"Could not locate Python interpreter {general_options.python}" + ) + + pip_cmd = [ + interpreter, + get_runnable_pip(), + ] + pip_cmd.extend(args) + + # Set a flag so the child doesn't re-invoke itself, causing + # an infinite loop. + os.environ["_PIP_RUNNING_IN_SUBPROCESS"] = "1" + returncode = 0 + try: + proc = subprocess.run(pip_cmd) + returncode = proc.returncode + except (subprocess.SubprocessError, OSError) as exc: + raise CommandError(f"Failed to run pip under {interpreter}: {exc}") + sys.exit(returncode) + + # --version + if general_options.version: + sys.stdout.write(parser.version) + sys.stdout.write(os.linesep) + sys.exit() + + # pip || pip help -> print_help() + if not args_else or (args_else[0] == "help" and len(args_else) == 1): + parser.print_help() + sys.exit() + + # the subcommand name + cmd_name = args_else[0] + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = [f'unknown command "{cmd_name}"'] + if guess: + msg.append(f'maybe you meant "{guess}"') + + raise CommandError(" - ".join(msg)) + + # all the args without the subcommand + cmd_args = args[:] + cmd_args.remove(cmd_name) + + return cmd_name, cmd_args diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/parser.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/parser.py new file mode 100644 index 0000000..ae554b2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/parser.py @@ -0,0 +1,294 @@ +"""Base option parser setup""" + +import logging +import optparse +import shutil +import sys +import textwrap +from contextlib import suppress +from typing import Any, Dict, Generator, List, Tuple + +from pip._internal.cli.status_codes import UNKNOWN_ERROR +from pip._internal.configuration import Configuration, ConfigurationError +from pip._internal.utils.misc import redact_auth_from_url, strtobool + +logger = logging.getLogger(__name__) + + +class PrettyHelpFormatter(optparse.IndentedHelpFormatter): + """A prettier/less verbose help formatter for optparse.""" + + def __init__(self, *args: Any, **kwargs: Any) -> None: + # help position must be aligned with __init__.parseopts.description + kwargs["max_help_position"] = 30 + kwargs["indent_increment"] = 1 + kwargs["width"] = shutil.get_terminal_size()[0] - 2 + super().__init__(*args, **kwargs) + + def format_option_strings(self, option: optparse.Option) -> str: + return self._format_option_strings(option) + + def _format_option_strings( + self, option: optparse.Option, mvarfmt: str = " <{}>", optsep: str = ", " + ) -> str: + """ + Return a comma-separated list of option strings and metavars. + + :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') + :param mvarfmt: metavar format string + :param optsep: separator + """ + opts = [] + + if option._short_opts: + opts.append(option._short_opts[0]) + if option._long_opts: + opts.append(option._long_opts[0]) + if len(opts) > 1: + opts.insert(1, optsep) + + if option.takes_value(): + assert option.dest is not None + metavar = option.metavar or option.dest.lower() + opts.append(mvarfmt.format(metavar.lower())) + + return "".join(opts) + + def format_heading(self, heading: str) -> str: + if heading == "Options": + return "" + return heading + ":\n" + + def format_usage(self, usage: str) -> str: + """ + Ensure there is only one newline between usage and the first heading + if there is no description. + """ + msg = "\nUsage: {}\n".format(self.indent_lines(textwrap.dedent(usage), " ")) + return msg + + def format_description(self, description: str) -> str: + # leave full control over description to us + if description: + if hasattr(self.parser, "main"): + label = "Commands" + else: + label = "Description" + # some doc strings have initial newlines, some don't + description = description.lstrip("\n") + # some doc strings have final newlines and spaces, some don't + description = description.rstrip() + # dedent, then reindent + description = self.indent_lines(textwrap.dedent(description), " ") + description = f"{label}:\n{description}\n" + return description + else: + return "" + + def format_epilog(self, epilog: str) -> str: + # leave full control over epilog to us + if epilog: + return epilog + else: + return "" + + def indent_lines(self, text: str, indent: str) -> str: + new_lines = [indent + line for line in text.split("\n")] + return "\n".join(new_lines) + + +class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): + """Custom help formatter for use in ConfigOptionParser. + + This is updates the defaults before expanding them, allowing + them to show up correctly in the help listing. + + Also redact auth from url type options + """ + + def expand_default(self, option: optparse.Option) -> str: + default_values = None + if self.parser is not None: + assert isinstance(self.parser, ConfigOptionParser) + self.parser._update_defaults(self.parser.defaults) + assert option.dest is not None + default_values = self.parser.defaults.get(option.dest) + help_text = super().expand_default(option) + + if default_values and option.metavar == "URL": + if isinstance(default_values, str): + default_values = [default_values] + + # If its not a list, we should abort and just return the help text + if not isinstance(default_values, list): + default_values = [] + + for val in default_values: + help_text = help_text.replace(val, redact_auth_from_url(val)) + + return help_text + + +class CustomOptionParser(optparse.OptionParser): + def insert_option_group( + self, idx: int, *args: Any, **kwargs: Any + ) -> optparse.OptionGroup: + """Insert an OptionGroup at a given position.""" + group = self.add_option_group(*args, **kwargs) + + self.option_groups.pop() + self.option_groups.insert(idx, group) + + return group + + @property + def option_list_all(self) -> List[optparse.Option]: + """Get a list of all options, including those in option groups.""" + res = self.option_list[:] + for i in self.option_groups: + res.extend(i.option_list) + + return res + + +class ConfigOptionParser(CustomOptionParser): + """Custom option parser which updates its defaults by checking the + configuration files and environmental variables""" + + def __init__( + self, + *args: Any, + name: str, + isolated: bool = False, + **kwargs: Any, + ) -> None: + self.name = name + self.config = Configuration(isolated) + + assert self.name + super().__init__(*args, **kwargs) + + def check_default(self, option: optparse.Option, key: str, val: Any) -> Any: + try: + return option.check_value(key, val) + except optparse.OptionValueError as exc: + print(f"An error occurred during configuration: {exc}") + sys.exit(3) + + def _get_ordered_configuration_items( + self, + ) -> Generator[Tuple[str, Any], None, None]: + # Configuration gives keys in an unordered manner. Order them. + override_order = ["global", self.name, ":env:"] + + # Pool the options into different groups + section_items: Dict[str, List[Tuple[str, Any]]] = { + name: [] for name in override_order + } + for section_key, val in self.config.items(): + # ignore empty values + if not val: + logger.debug( + "Ignoring configuration key '%s' as it's value is empty.", + section_key, + ) + continue + + section, key = section_key.split(".", 1) + if section in override_order: + section_items[section].append((key, val)) + + # Yield each group in their override order + for section in override_order: + for key, val in section_items[section]: + yield key, val + + def _update_defaults(self, defaults: Dict[str, Any]) -> Dict[str, Any]: + """Updates the given defaults with values from the config files and + the environ. Does a little special handling for certain types of + options (lists).""" + + # Accumulate complex default state. + self.values = optparse.Values(self.defaults) + late_eval = set() + # Then set the options with those values + for key, val in self._get_ordered_configuration_items(): + # '--' because configuration supports only long names + option = self.get_option("--" + key) + + # Ignore options not present in this parser. E.g. non-globals put + # in [global] by users that want them to apply to all applicable + # commands. + if option is None: + continue + + assert option.dest is not None + + if option.action in ("store_true", "store_false"): + try: + val = strtobool(val) + except ValueError: + self.error( + f"{val} is not a valid value for {key} option, " + "please specify a boolean value like yes/no, " + "true/false or 1/0 instead." + ) + elif option.action == "count": + with suppress(ValueError): + val = strtobool(val) + with suppress(ValueError): + val = int(val) + if not isinstance(val, int) or val < 0: + self.error( + f"{val} is not a valid value for {key} option, " + "please instead specify either a non-negative integer " + "or a boolean value like yes/no or false/true " + "which is equivalent to 1/0." + ) + elif option.action == "append": + val = val.split() + val = [self.check_default(option, key, v) for v in val] + elif option.action == "callback": + assert option.callback is not None + late_eval.add(option.dest) + opt_str = option.get_opt_string() + val = option.convert_value(opt_str, val) + # From take_action + args = option.callback_args or () + kwargs = option.callback_kwargs or {} + option.callback(option, opt_str, val, self, *args, **kwargs) + else: + val = self.check_default(option, key, val) + + defaults[option.dest] = val + + for key in late_eval: + defaults[key] = getattr(self.values, key) + self.values = None + return defaults + + def get_default_values(self) -> optparse.Values: + """Overriding to make updating the defaults after instantiation of + the option parser possible, _update_defaults() does the dirty work.""" + if not self.process_default_values: + # Old, pre-Optik 1.5 behaviour. + return optparse.Values(self.defaults) + + # Load the configuration, or error out in case of an error + try: + self.config.load() + except ConfigurationError as err: + self.exit(UNKNOWN_ERROR, str(err)) + + defaults = self._update_defaults(self.defaults.copy()) # ours + for option in self._get_all_options(): + assert option.dest is not None + default = defaults.get(option.dest) + if isinstance(default, str): + opt_str = option.get_opt_string() + defaults[option.dest] = option.check_value(opt_str, default) + return optparse.Values(defaults) + + def error(self, msg: str) -> None: + self.print_usage(sys.stderr) + self.exit(UNKNOWN_ERROR, f"{msg}\n") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py new file mode 100644 index 0000000..0ad1403 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py @@ -0,0 +1,68 @@ +import functools +from typing import Callable, Generator, Iterable, Iterator, Optional, Tuple + +from pip._vendor.rich.progress import ( + BarColumn, + DownloadColumn, + FileSizeColumn, + Progress, + ProgressColumn, + SpinnerColumn, + TextColumn, + TimeElapsedColumn, + TimeRemainingColumn, + TransferSpeedColumn, +) + +from pip._internal.utils.logging import get_indentation + +DownloadProgressRenderer = Callable[[Iterable[bytes]], Iterator[bytes]] + + +def _rich_progress_bar( + iterable: Iterable[bytes], + *, + bar_type: str, + size: int, +) -> Generator[bytes, None, None]: + assert bar_type == "on", "This should only be used in the default mode." + + if not size: + total = float("inf") + columns: Tuple[ProgressColumn, ...] = ( + TextColumn("[progress.description]{task.description}"), + SpinnerColumn("line", speed=1.5), + FileSizeColumn(), + TransferSpeedColumn(), + TimeElapsedColumn(), + ) + else: + total = size + columns = ( + TextColumn("[progress.description]{task.description}"), + BarColumn(), + DownloadColumn(), + TransferSpeedColumn(), + TextColumn("eta"), + TimeRemainingColumn(), + ) + + progress = Progress(*columns, refresh_per_second=30) + task_id = progress.add_task(" " * (get_indentation() + 2), total=total) + with progress: + for chunk in iterable: + yield chunk + progress.update(task_id, advance=len(chunk)) + + +def get_download_progress_renderer( + *, bar_type: str, size: Optional[int] = None +) -> DownloadProgressRenderer: + """Get an object that can be used to render the download progress. + + Returns a callable, that takes an iterable to "wrap". + """ + if bar_type == "on": + return functools.partial(_rich_progress_bar, bar_type=bar_type, size=size) + else: + return iter # no-op, when passed an iterator diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py new file mode 100644 index 0000000..6f2f79c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py @@ -0,0 +1,505 @@ +"""Contains the Command base classes that depend on PipSession. + +The classes in this module are in a separate module so the commands not +needing download / PackageFinder capability don't unnecessarily import the +PackageFinder machinery and all its vendored dependencies, etc. +""" + +import logging +import os +import sys +from functools import partial +from optparse import Values +from typing import TYPE_CHECKING, Any, List, Optional, Tuple + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.command_context import CommandContextMixIn +from pip._internal.exceptions import CommandError, PreviousBuildDirError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.network.session import PipSession +from pip._internal.operations.build.build_tracker import BuildTracker +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, + install_req_from_parsed_requirement, + install_req_from_req_string, +) +from pip._internal.req.req_file import parse_requirements +from pip._internal.req.req_install import InstallRequirement +from pip._internal.resolution.base import BaseResolver +from pip._internal.self_outdated_check import pip_self_version_check +from pip._internal.utils.temp_dir import ( + TempDirectory, + TempDirectoryTypeRegistry, + tempdir_kinds, +) +from pip._internal.utils.virtualenv import running_under_virtualenv + +if TYPE_CHECKING: + from ssl import SSLContext + +logger = logging.getLogger(__name__) + + +def _create_truststore_ssl_context() -> Optional["SSLContext"]: + if sys.version_info < (3, 10): + raise CommandError("The truststore feature is only available for Python 3.10+") + + try: + import ssl + except ImportError: + logger.warning("Disabling truststore since ssl support is missing") + return None + + try: + from pip._vendor import truststore + except ImportError as e: + raise CommandError(f"The truststore feature is unavailable: {e}") + + return truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + + +class SessionCommandMixin(CommandContextMixIn): + + """ + A class mixin for command classes needing _build_session(). + """ + + def __init__(self) -> None: + super().__init__() + self._session: Optional[PipSession] = None + + @classmethod + def _get_index_urls(cls, options: Values) -> Optional[List[str]]: + """Return a list of index urls from user-provided options.""" + index_urls = [] + if not getattr(options, "no_index", False): + url = getattr(options, "index_url", None) + if url: + index_urls.append(url) + urls = getattr(options, "extra_index_urls", None) + if urls: + index_urls.extend(urls) + # Return None rather than an empty list + return index_urls or None + + def get_default_session(self, options: Values) -> PipSession: + """Get a default-managed session.""" + if self._session is None: + self._session = self.enter_context(self._build_session(options)) + # there's no type annotation on requests.Session, so it's + # automatically ContextManager[Any] and self._session becomes Any, + # then https://github.com/python/mypy/issues/7696 kicks in + assert self._session is not None + return self._session + + def _build_session( + self, + options: Values, + retries: Optional[int] = None, + timeout: Optional[int] = None, + fallback_to_certifi: bool = False, + ) -> PipSession: + cache_dir = options.cache_dir + assert not cache_dir or os.path.isabs(cache_dir) + + if "truststore" in options.features_enabled: + try: + ssl_context = _create_truststore_ssl_context() + except Exception: + if not fallback_to_certifi: + raise + ssl_context = None + else: + ssl_context = None + + session = PipSession( + cache=os.path.join(cache_dir, "http-v2") if cache_dir else None, + retries=retries if retries is not None else options.retries, + trusted_hosts=options.trusted_hosts, + index_urls=self._get_index_urls(options), + ssl_context=ssl_context, + ) + + # Handle custom ca-bundles from the user + if options.cert: + session.verify = options.cert + + # Handle SSL client certificate + if options.client_cert: + session.cert = options.client_cert + + # Handle timeouts + if options.timeout or timeout: + session.timeout = timeout if timeout is not None else options.timeout + + # Handle configured proxies + if options.proxy: + session.proxies = { + "http": options.proxy, + "https": options.proxy, + } + + # Determine if we can prompt the user for authentication or not + session.auth.prompting = not options.no_input + session.auth.keyring_provider = options.keyring_provider + + return session + + +class IndexGroupCommand(Command, SessionCommandMixin): + + """ + Abstract base class for commands with the index_group options. + + This also corresponds to the commands that permit the pip version check. + """ + + def handle_pip_version_check(self, options: Values) -> None: + """ + Do the pip version check if not disabled. + + This overrides the default behavior of not doing the check. + """ + # Make sure the index_group options are present. + assert hasattr(options, "no_index") + + if options.disable_pip_version_check or options.no_index: + return + + # Otherwise, check if we're using the latest version of pip available. + session = self._build_session( + options, + retries=0, + timeout=min(5, options.timeout), + # This is set to ensure the function does not fail when truststore is + # specified in use-feature but cannot be loaded. This usually raises a + # CommandError and shows a nice user-facing error, but this function is not + # called in that try-except block. + fallback_to_certifi=True, + ) + with session: + pip_self_version_check(session, options) + + +KEEPABLE_TEMPDIR_TYPES = [ + tempdir_kinds.BUILD_ENV, + tempdir_kinds.EPHEM_WHEEL_CACHE, + tempdir_kinds.REQ_BUILD, +] + + +def warn_if_run_as_root() -> None: + """Output a warning for sudo users on Unix. + + In a virtual environment, sudo pip still writes to virtualenv. + On Windows, users may run pip as Administrator without issues. + This warning only applies to Unix root users outside of virtualenv. + """ + if running_under_virtualenv(): + return + if not hasattr(os, "getuid"): + return + # On Windows, there are no "system managed" Python packages. Installing as + # Administrator via pip is the correct way of updating system environments. + # + # We choose sys.platform over utils.compat.WINDOWS here to enable Mypy platform + # checks: https://mypy.readthedocs.io/en/stable/common_issues.html + if sys.platform == "win32" or sys.platform == "cygwin": + return + + if os.getuid() != 0: + return + + logger.warning( + "Running pip as the 'root' user can result in broken permissions and " + "conflicting behaviour with the system package manager. " + "It is recommended to use a virtual environment instead: " + "https://pip.pypa.io/warnings/venv" + ) + + +def with_cleanup(func: Any) -> Any: + """Decorator for common logic related to managing temporary + directories. + """ + + def configure_tempdir_registry(registry: TempDirectoryTypeRegistry) -> None: + for t in KEEPABLE_TEMPDIR_TYPES: + registry.set_delete(t, False) + + def wrapper( + self: RequirementCommand, options: Values, args: List[Any] + ) -> Optional[int]: + assert self.tempdir_registry is not None + if options.no_clean: + configure_tempdir_registry(self.tempdir_registry) + + try: + return func(self, options, args) + except PreviousBuildDirError: + # This kind of conflict can occur when the user passes an explicit + # build directory with a pre-existing folder. In that case we do + # not want to accidentally remove it. + configure_tempdir_registry(self.tempdir_registry) + raise + + return wrapper + + +class RequirementCommand(IndexGroupCommand): + def __init__(self, *args: Any, **kw: Any) -> None: + super().__init__(*args, **kw) + + self.cmd_opts.add_option(cmdoptions.no_clean()) + + @staticmethod + def determine_resolver_variant(options: Values) -> str: + """Determines which resolver should be used, based on the given options.""" + if "legacy-resolver" in options.deprecated_features_enabled: + return "legacy" + + return "resolvelib" + + @classmethod + def make_requirement_preparer( + cls, + temp_build_dir: TempDirectory, + options: Values, + build_tracker: BuildTracker, + session: PipSession, + finder: PackageFinder, + use_user_site: bool, + download_dir: Optional[str] = None, + verbosity: int = 0, + ) -> RequirementPreparer: + """ + Create a RequirementPreparer instance for the given parameters. + """ + temp_build_dir_path = temp_build_dir.path + assert temp_build_dir_path is not None + legacy_resolver = False + + resolver_variant = cls.determine_resolver_variant(options) + if resolver_variant == "resolvelib": + lazy_wheel = "fast-deps" in options.features_enabled + if lazy_wheel: + logger.warning( + "pip is using lazily downloaded wheels using HTTP " + "range requests to obtain dependency information. " + "This experimental feature is enabled through " + "--use-feature=fast-deps and it is not ready for " + "production." + ) + else: + legacy_resolver = True + lazy_wheel = False + if "fast-deps" in options.features_enabled: + logger.warning( + "fast-deps has no effect when used with the legacy resolver." + ) + + return RequirementPreparer( + build_dir=temp_build_dir_path, + src_dir=options.src_dir, + download_dir=download_dir, + build_isolation=options.build_isolation, + check_build_deps=options.check_build_deps, + build_tracker=build_tracker, + session=session, + progress_bar=options.progress_bar, + finder=finder, + require_hashes=options.require_hashes, + use_user_site=use_user_site, + lazy_wheel=lazy_wheel, + verbosity=verbosity, + legacy_resolver=legacy_resolver, + ) + + @classmethod + def make_resolver( + cls, + preparer: RequirementPreparer, + finder: PackageFinder, + options: Values, + wheel_cache: Optional[WheelCache] = None, + use_user_site: bool = False, + ignore_installed: bool = True, + ignore_requires_python: bool = False, + force_reinstall: bool = False, + upgrade_strategy: str = "to-satisfy-only", + use_pep517: Optional[bool] = None, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> BaseResolver: + """ + Create a Resolver instance for the given parameters. + """ + make_install_req = partial( + install_req_from_req_string, + isolated=options.isolated_mode, + use_pep517=use_pep517, + ) + resolver_variant = cls.determine_resolver_variant(options) + # The long import name and duplicated invocation is needed to convince + # Mypy into correctly typechecking. Otherwise it would complain the + # "Resolver" class being redefined. + if resolver_variant == "resolvelib": + import pip._internal.resolution.resolvelib.resolver + + return pip._internal.resolution.resolvelib.resolver.Resolver( + preparer=preparer, + finder=finder, + wheel_cache=wheel_cache, + make_install_req=make_install_req, + use_user_site=use_user_site, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + force_reinstall=force_reinstall, + upgrade_strategy=upgrade_strategy, + py_version_info=py_version_info, + ) + import pip._internal.resolution.legacy.resolver + + return pip._internal.resolution.legacy.resolver.Resolver( + preparer=preparer, + finder=finder, + wheel_cache=wheel_cache, + make_install_req=make_install_req, + use_user_site=use_user_site, + ignore_dependencies=options.ignore_dependencies, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + force_reinstall=force_reinstall, + upgrade_strategy=upgrade_strategy, + py_version_info=py_version_info, + ) + + def get_requirements( + self, + args: List[str], + options: Values, + finder: PackageFinder, + session: PipSession, + ) -> List[InstallRequirement]: + """ + Parse command-line arguments into the corresponding requirements. + """ + requirements: List[InstallRequirement] = [] + for filename in options.constraints: + for parsed_req in parse_requirements( + filename, + constraint=True, + finder=finder, + options=options, + session=session, + ): + req_to_add = install_req_from_parsed_requirement( + parsed_req, + isolated=options.isolated_mode, + user_supplied=False, + ) + requirements.append(req_to_add) + + for req in args: + req_to_add = install_req_from_line( + req, + comes_from=None, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + user_supplied=True, + config_settings=getattr(options, "config_settings", None), + ) + requirements.append(req_to_add) + + for req in options.editables: + req_to_add = install_req_from_editable( + req, + user_supplied=True, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + config_settings=getattr(options, "config_settings", None), + ) + requirements.append(req_to_add) + + # NOTE: options.require_hashes may be set if --require-hashes is True + for filename in options.requirements: + for parsed_req in parse_requirements( + filename, finder=finder, options=options, session=session + ): + req_to_add = install_req_from_parsed_requirement( + parsed_req, + isolated=options.isolated_mode, + use_pep517=options.use_pep517, + user_supplied=True, + config_settings=parsed_req.options.get("config_settings") + if parsed_req.options + else None, + ) + requirements.append(req_to_add) + + # If any requirement has hash options, enable hash checking. + if any(req.has_hash_options for req in requirements): + options.require_hashes = True + + if not (args or options.editables or options.requirements): + opts = {"name": self.name} + if options.find_links: + raise CommandError( + "You must give at least one requirement to {name} " + '(maybe you meant "pip {name} {links}"?)'.format( + **dict(opts, links=" ".join(options.find_links)) + ) + ) + else: + raise CommandError( + "You must give at least one requirement to {name} " + '(see "pip help {name}")'.format(**opts) + ) + + return requirements + + @staticmethod + def trace_basic_info(finder: PackageFinder) -> None: + """ + Trace basic information about the provided objects. + """ + # Display where finder is looking for packages + search_scope = finder.search_scope + locations = search_scope.get_formatted_locations() + if locations: + logger.info(locations) + + def _build_package_finder( + self, + options: Values, + session: PipSession, + target_python: Optional[TargetPython] = None, + ignore_requires_python: Optional[bool] = None, + ) -> PackageFinder: + """ + Create a package finder appropriate to this requirement command. + + :param ignore_requires_python: Whether to ignore incompatible + "Requires-Python" values in links. Defaults to False. + """ + link_collector = LinkCollector.create(session, options=options) + selection_prefs = SelectionPreferences( + allow_yanked=True, + format_control=options.format_control, + allow_all_prereleases=options.pre, + prefer_binary=options.prefer_binary, + ignore_requires_python=ignore_requires_python, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + target_python=target_python, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/spinners.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/spinners.py new file mode 100644 index 0000000..cf2b976 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/spinners.py @@ -0,0 +1,159 @@ +import contextlib +import itertools +import logging +import sys +import time +from typing import IO, Generator, Optional + +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import get_indentation + +logger = logging.getLogger(__name__) + + +class SpinnerInterface: + def spin(self) -> None: + raise NotImplementedError() + + def finish(self, final_status: str) -> None: + raise NotImplementedError() + + +class InteractiveSpinner(SpinnerInterface): + def __init__( + self, + message: str, + file: Optional[IO[str]] = None, + spin_chars: str = "-\\|/", + # Empirically, 8 updates/second looks nice + min_update_interval_seconds: float = 0.125, + ): + self._message = message + if file is None: + file = sys.stdout + self._file = file + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._finished = False + + self._spin_cycle = itertools.cycle(spin_chars) + + self._file.write(" " * get_indentation() + self._message + " ... ") + self._width = 0 + + def _write(self, status: str) -> None: + assert not self._finished + # Erase what we wrote before by backspacing to the beginning, writing + # spaces to overwrite the old text, and then backspacing again + backup = "\b" * self._width + self._file.write(backup + " " * self._width + backup) + # Now we have a blank slate to add our status + self._file.write(status) + self._width = len(status) + self._file.flush() + self._rate_limiter.reset() + + def spin(self) -> None: + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._write(next(self._spin_cycle)) + + def finish(self, final_status: str) -> None: + if self._finished: + return + self._write(final_status) + self._file.write("\n") + self._file.flush() + self._finished = True + + +# Used for dumb terminals, non-interactive installs (no tty), etc. +# We still print updates occasionally (once every 60 seconds by default) to +# act as a keep-alive for systems like Travis-CI that take lack-of-output as +# an indication that a task has frozen. +class NonInteractiveSpinner(SpinnerInterface): + def __init__(self, message: str, min_update_interval_seconds: float = 60.0) -> None: + self._message = message + self._finished = False + self._rate_limiter = RateLimiter(min_update_interval_seconds) + self._update("started") + + def _update(self, status: str) -> None: + assert not self._finished + self._rate_limiter.reset() + logger.info("%s: %s", self._message, status) + + def spin(self) -> None: + if self._finished: + return + if not self._rate_limiter.ready(): + return + self._update("still running...") + + def finish(self, final_status: str) -> None: + if self._finished: + return + self._update(f"finished with status '{final_status}'") + self._finished = True + + +class RateLimiter: + def __init__(self, min_update_interval_seconds: float) -> None: + self._min_update_interval_seconds = min_update_interval_seconds + self._last_update: float = 0 + + def ready(self) -> bool: + now = time.time() + delta = now - self._last_update + return delta >= self._min_update_interval_seconds + + def reset(self) -> None: + self._last_update = time.time() + + +@contextlib.contextmanager +def open_spinner(message: str) -> Generator[SpinnerInterface, None, None]: + # Interactive spinner goes directly to sys.stdout rather than being routed + # through the logging system, but it acts like it has level INFO, + # i.e. it's only displayed if we're at level INFO or better. + # Non-interactive spinner goes through the logging system, so it is always + # in sync with logging configuration. + if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO: + spinner: SpinnerInterface = InteractiveSpinner(message) + else: + spinner = NonInteractiveSpinner(message) + try: + with hidden_cursor(sys.stdout): + yield spinner + except KeyboardInterrupt: + spinner.finish("canceled") + raise + except Exception: + spinner.finish("error") + raise + else: + spinner.finish("done") + + +HIDE_CURSOR = "\x1b[?25l" +SHOW_CURSOR = "\x1b[?25h" + + +@contextlib.contextmanager +def hidden_cursor(file: IO[str]) -> Generator[None, None, None]: + # The Windows terminal does not support the hide/show cursor ANSI codes, + # even via colorama. So don't even try. + if WINDOWS: + yield + # We don't want to clutter the output with control characters if we're + # writing to a file, or if the user is running with --quiet. + # See https://github.com/pypa/pip/issues/3418 + elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO: + yield + else: + file.write(HIDE_CURSOR) + try: + yield + finally: + file.write(SHOW_CURSOR) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py b/venv/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py new file mode 100644 index 0000000..5e29502 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py @@ -0,0 +1,6 @@ +SUCCESS = 0 +ERROR = 1 +UNKNOWN_ERROR = 2 +VIRTUALENV_NOT_FOUND = 3 +PREVIOUS_BUILD_DIR_ERROR = 4 +NO_MATCHES_FOUND = 23 diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/__init__.py new file mode 100644 index 0000000..858a410 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/__init__.py @@ -0,0 +1,132 @@ +""" +Package containing all pip commands +""" + +import importlib +from collections import namedtuple +from typing import Any, Dict, Optional + +from pip._internal.cli.base_command import Command + +CommandInfo = namedtuple("CommandInfo", "module_path, class_name, summary") + +# This dictionary does a bunch of heavy lifting for help output: +# - Enables avoiding additional (costly) imports for presenting `--help`. +# - The ordering matters for help display. +# +# Even though the module path starts with the same "pip._internal.commands" +# prefix, the full path makes testing easier (specifically when modifying +# `commands_dict` in test setup / teardown). +commands_dict: Dict[str, CommandInfo] = { + "install": CommandInfo( + "pip._internal.commands.install", + "InstallCommand", + "Install packages.", + ), + "download": CommandInfo( + "pip._internal.commands.download", + "DownloadCommand", + "Download packages.", + ), + "uninstall": CommandInfo( + "pip._internal.commands.uninstall", + "UninstallCommand", + "Uninstall packages.", + ), + "freeze": CommandInfo( + "pip._internal.commands.freeze", + "FreezeCommand", + "Output installed packages in requirements format.", + ), + "inspect": CommandInfo( + "pip._internal.commands.inspect", + "InspectCommand", + "Inspect the python environment.", + ), + "list": CommandInfo( + "pip._internal.commands.list", + "ListCommand", + "List installed packages.", + ), + "show": CommandInfo( + "pip._internal.commands.show", + "ShowCommand", + "Show information about installed packages.", + ), + "check": CommandInfo( + "pip._internal.commands.check", + "CheckCommand", + "Verify installed packages have compatible dependencies.", + ), + "config": CommandInfo( + "pip._internal.commands.configuration", + "ConfigurationCommand", + "Manage local and global configuration.", + ), + "search": CommandInfo( + "pip._internal.commands.search", + "SearchCommand", + "Search PyPI for packages.", + ), + "cache": CommandInfo( + "pip._internal.commands.cache", + "CacheCommand", + "Inspect and manage pip's wheel cache.", + ), + "index": CommandInfo( + "pip._internal.commands.index", + "IndexCommand", + "Inspect information available from package indexes.", + ), + "wheel": CommandInfo( + "pip._internal.commands.wheel", + "WheelCommand", + "Build wheels from your requirements.", + ), + "hash": CommandInfo( + "pip._internal.commands.hash", + "HashCommand", + "Compute hashes of package archives.", + ), + "completion": CommandInfo( + "pip._internal.commands.completion", + "CompletionCommand", + "A helper command used for command completion.", + ), + "debug": CommandInfo( + "pip._internal.commands.debug", + "DebugCommand", + "Show information useful for debugging.", + ), + "help": CommandInfo( + "pip._internal.commands.help", + "HelpCommand", + "Show help for commands.", + ), +} + + +def create_command(name: str, **kwargs: Any) -> Command: + """ + Create an instance of the Command class with the given name. + """ + module_path, class_name, summary = commands_dict[name] + module = importlib.import_module(module_path) + command_class = getattr(module, class_name) + command = command_class(name=name, summary=summary, **kwargs) + + return command + + +def get_similar_commands(name: str) -> Optional[str]: + """Command name auto-correct.""" + from difflib import get_close_matches + + name = name.lower() + + close_commands = get_close_matches(name, commands_dict.keys()) + + if close_commands: + return close_commands[0] + else: + return None diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..4bd12c0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc new file mode 100644 index 0000000..73b7668 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc new file mode 100644 index 0000000..b93ab0a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc new file mode 100644 index 0000000..c97595a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc new file mode 100644 index 0000000..4f5be54 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc new file mode 100644 index 0000000..cc8735d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc new file mode 100644 index 0000000..a5cf705 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc new file mode 100644 index 0000000..5998e50 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc new file mode 100644 index 0000000..9893866 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc new file mode 100644 index 0000000..42f35fb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc new file mode 100644 index 0000000..1b714cc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc new file mode 100644 index 0000000..aba751d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc new file mode 100644 index 0000000..c824841 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc new file mode 100644 index 0000000..11e037c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc new file mode 100644 index 0000000..ff288b8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc new file mode 100644 index 0000000..4aa6b27 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc new file mode 100644 index 0000000..b70e8bf Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc new file mode 100644 index 0000000..0d302ae Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/cache.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/cache.py new file mode 100644 index 0000000..3283361 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/cache.py @@ -0,0 +1,225 @@ +import os +import textwrap +from optparse import Values +from typing import Any, List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.exceptions import CommandError, PipError +from pip._internal.utils import filesystem +from pip._internal.utils.logging import getLogger + +logger = getLogger(__name__) + + +class CacheCommand(Command): + """ + Inspect and manage pip's wheel cache. + + Subcommands: + + - dir: Show the cache directory. + - info: Show information about the cache. + - list: List filenames of packages stored in the cache. + - remove: Remove one or more package from the cache. + - purge: Remove all items from the cache. + + ```` can be a glob expression or a package name. + """ + + ignore_require_venv = True + usage = """ + %prog dir + %prog info + %prog list [] [--format=[human, abspath]] + %prog remove + %prog purge + """ + + def add_options(self) -> None: + self.cmd_opts.add_option( + "--format", + action="store", + dest="list_format", + default="human", + choices=("human", "abspath"), + help="Select the output format among: human (default) or abspath", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "dir": self.get_cache_dir, + "info": self.get_cache_info, + "list": self.list_cache_items, + "remove": self.remove_cache_items, + "purge": self.purge_cache, + } + + if not options.cache_dir: + logger.error("pip cache commands can not function since cache is disabled.") + return ERROR + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".join(sorted(handlers)), + ) + return ERROR + + action = args[0] + + # Error handling happens here, not in the action-handlers. + try: + handlers[action](options, args[1:]) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + return SUCCESS + + def get_cache_dir(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + logger.info(options.cache_dir) + + def get_cache_info(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + num_http_files = len(self._find_http_files(options)) + num_packages = len(self._find_wheels(options, "*")) + + http_cache_location = self._cache_dir(options, "http-v2") + old_http_cache_location = self._cache_dir(options, "http") + wheels_cache_location = self._cache_dir(options, "wheels") + http_cache_size = filesystem.format_size( + filesystem.directory_size(http_cache_location) + + filesystem.directory_size(old_http_cache_location) + ) + wheels_cache_size = filesystem.format_directory_size(wheels_cache_location) + + message = ( + textwrap.dedent( + """ + Package index page cache location (pip v23.3+): {http_cache_location} + Package index page cache location (older pips): {old_http_cache_location} + Package index page cache size: {http_cache_size} + Number of HTTP files: {num_http_files} + Locally built wheels location: {wheels_cache_location} + Locally built wheels size: {wheels_cache_size} + Number of locally built wheels: {package_count} + """ # noqa: E501 + ) + .format( + http_cache_location=http_cache_location, + old_http_cache_location=old_http_cache_location, + http_cache_size=http_cache_size, + num_http_files=num_http_files, + wheels_cache_location=wheels_cache_location, + package_count=num_packages, + wheels_cache_size=wheels_cache_size, + ) + .strip() + ) + + logger.info(message) + + def list_cache_items(self, options: Values, args: List[Any]) -> None: + if len(args) > 1: + raise CommandError("Too many arguments") + + if args: + pattern = args[0] + else: + pattern = "*" + + files = self._find_wheels(options, pattern) + if options.list_format == "human": + self.format_for_human(files) + else: + self.format_for_abspath(files) + + def format_for_human(self, files: List[str]) -> None: + if not files: + logger.info("No locally built wheels cached.") + return + + results = [] + for filename in files: + wheel = os.path.basename(filename) + size = filesystem.format_file_size(filename) + results.append(f" - {wheel} ({size})") + logger.info("Cache contents:\n") + logger.info("\n".join(sorted(results))) + + def format_for_abspath(self, files: List[str]) -> None: + if files: + logger.info("\n".join(sorted(files))) + + def remove_cache_items(self, options: Values, args: List[Any]) -> None: + if len(args) > 1: + raise CommandError("Too many arguments") + + if not args: + raise CommandError("Please provide a pattern") + + files = self._find_wheels(options, args[0]) + + no_matching_msg = "No matching packages" + if args[0] == "*": + # Only fetch http files if no specific pattern given + files += self._find_http_files(options) + else: + # Add the pattern to the log message + no_matching_msg += f' for pattern "{args[0]}"' + + if not files: + logger.warning(no_matching_msg) + + for filename in files: + os.unlink(filename) + logger.verbose("Removed %s", filename) + logger.info("Files removed: %s", len(files)) + + def purge_cache(self, options: Values, args: List[Any]) -> None: + if args: + raise CommandError("Too many arguments") + + return self.remove_cache_items(options, ["*"]) + + def _cache_dir(self, options: Values, subdir: str) -> str: + return os.path.join(options.cache_dir, subdir) + + def _find_http_files(self, options: Values) -> List[str]: + old_http_dir = self._cache_dir(options, "http") + new_http_dir = self._cache_dir(options, "http-v2") + return filesystem.find_files(old_http_dir, "*") + filesystem.find_files( + new_http_dir, "*" + ) + + def _find_wheels(self, options: Values, pattern: str) -> List[str]: + wheel_dir = self._cache_dir(options, "wheels") + + # The wheel filename format, as specified in PEP 427, is: + # {distribution}-{version}(-{build})?-{python}-{abi}-{platform}.whl + # + # Additionally, non-alphanumeric values in the distribution are + # normalized to underscores (_), meaning hyphens can never occur + # before `-{version}`. + # + # Given that information: + # - If the pattern we're given contains a hyphen (-), the user is + # providing at least the version. Thus, we can just append `*.whl` + # to match the rest of it. + # - If the pattern we're given doesn't contain a hyphen (-), the + # user is only providing the name. Thus, we append `-*.whl` to + # match the hyphen before the version, followed by anything else. + # + # PEP 427: https://www.python.org/dev/peps/pep-0427/ + pattern = pattern + ("*.whl" if "-" in pattern else "-*.whl") + + return filesystem.find_files(wheel_dir, pattern) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/check.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/check.py new file mode 100644 index 0000000..5efd0a3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/check.py @@ -0,0 +1,54 @@ +import logging +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.operations.check import ( + check_package_set, + create_package_set_from_installed, + warn_legacy_versions_and_specifiers, +) +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class CheckCommand(Command): + """Verify installed packages have compatible dependencies.""" + + usage = """ + %prog [options]""" + + def run(self, options: Values, args: List[str]) -> int: + package_set, parsing_probs = create_package_set_from_installed() + warn_legacy_versions_and_specifiers(package_set) + missing, conflicting = check_package_set(package_set) + + for project_name in missing: + version = package_set[project_name].version + for dependency in missing[project_name]: + write_output( + "%s %s requires %s, which is not installed.", + project_name, + version, + dependency[0], + ) + + for project_name in conflicting: + version = package_set[project_name].version + for dep_name, dep_version, req in conflicting[project_name]: + write_output( + "%s %s has requirement %s, but you have %s %s.", + project_name, + version, + req, + dep_name, + dep_version, + ) + + if missing or conflicting or parsing_probs: + return ERROR + else: + write_output("No broken requirements found.") + return SUCCESS diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/completion.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/completion.py new file mode 100644 index 0000000..9e89e27 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/completion.py @@ -0,0 +1,130 @@ +import sys +import textwrap +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.utils.misc import get_prog + +BASE_COMPLETION = """ +# pip {shell} completion start{script}# pip {shell} completion end +""" + +COMPLETION_SCRIPTS = { + "bash": """ + _pip_completion() + {{ + COMPREPLY=( $( COMP_WORDS="${{COMP_WORDS[*]}}" \\ + COMP_CWORD=$COMP_CWORD \\ + PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) ) + }} + complete -o default -F _pip_completion {prog} + """, + "zsh": """ + #compdef -P pip[0-9.]# + __pip() {{ + compadd $( COMP_WORDS="$words[*]" \\ + COMP_CWORD=$((CURRENT-1)) \\ + PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ) + }} + if [[ $zsh_eval_context[-1] == loadautofunc ]]; then + # autoload from fpath, call function directly + __pip "$@" + else + # eval/source/. command, register function for later + compdef __pip -P 'pip[0-9.]#' + fi + """, + "fish": """ + function __fish_complete_pip + set -lx COMP_WORDS (commandline -o) "" + set -lx COMP_CWORD ( \\ + math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\ + ) + set -lx PIP_AUTO_COMPLETE 1 + string split \\ -- (eval $COMP_WORDS[1]) + end + complete -fa "(__fish_complete_pip)" -c {prog} + """, + "powershell": """ + if ((Test-Path Function:\\TabExpansion) -and -not ` + (Test-Path Function:\\_pip_completeBackup)) {{ + Rename-Item Function:\\TabExpansion _pip_completeBackup + }} + function TabExpansion($line, $lastWord) {{ + $lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart() + if ($lastBlock.StartsWith("{prog} ")) {{ + $Env:COMP_WORDS=$lastBlock + $Env:COMP_CWORD=$lastBlock.Split().Length - 1 + $Env:PIP_AUTO_COMPLETE=1 + (& {prog}).Split() + Remove-Item Env:COMP_WORDS + Remove-Item Env:COMP_CWORD + Remove-Item Env:PIP_AUTO_COMPLETE + }} + elseif (Test-Path Function:\\_pip_completeBackup) {{ + # Fall back on existing tab expansion + _pip_completeBackup $line $lastWord + }} + }} + """, +} + + +class CompletionCommand(Command): + """A helper command to be used for command completion.""" + + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "--bash", + "-b", + action="store_const", + const="bash", + dest="shell", + help="Emit completion code for bash", + ) + self.cmd_opts.add_option( + "--zsh", + "-z", + action="store_const", + const="zsh", + dest="shell", + help="Emit completion code for zsh", + ) + self.cmd_opts.add_option( + "--fish", + "-f", + action="store_const", + const="fish", + dest="shell", + help="Emit completion code for fish", + ) + self.cmd_opts.add_option( + "--powershell", + "-p", + action="store_const", + const="powershell", + dest="shell", + help="Emit completion code for powershell", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + """Prints the completion code of the given shell""" + shells = COMPLETION_SCRIPTS.keys() + shell_options = ["--" + shell for shell in sorted(shells)] + if options.shell in shells: + script = textwrap.dedent( + COMPLETION_SCRIPTS.get(options.shell, "").format(prog=get_prog()) + ) + print(BASE_COMPLETION.format(script=script, shell=options.shell)) + return SUCCESS + else: + sys.stderr.write( + "ERROR: You must pass {}\n".format(" or ".join(shell_options)) + ) + return SUCCESS diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/configuration.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/configuration.py new file mode 100644 index 0000000..1a1dc6b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/configuration.py @@ -0,0 +1,280 @@ +import logging +import os +import subprocess +from optparse import Values +from typing import Any, List, Optional + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.configuration import ( + Configuration, + Kind, + get_configuration_files, + kinds, +) +from pip._internal.exceptions import PipError +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import get_prog, write_output + +logger = logging.getLogger(__name__) + + +class ConfigurationCommand(Command): + """ + Manage local and global configuration. + + Subcommands: + + - list: List the active configuration (or from the file specified) + - edit: Edit the configuration file in an editor + - get: Get the value associated with command.option + - set: Set the command.option=value + - unset: Unset the value associated with command.option + - debug: List the configuration files and values defined under them + + Configuration keys should be dot separated command and option name, + with the special prefix "global" affecting any command. For example, + "pip config set global.index-url https://example.org/" would configure + the index url for all commands, but "pip config set download.timeout 10" + would configure a 10 second timeout only for "pip download" commands. + + If none of --user, --global and --site are passed, a virtual + environment configuration file is used if one is active and the file + exists. Otherwise, all modifications happen to the user file by + default. + """ + + ignore_require_venv = True + usage = """ + %prog [] list + %prog [] [--editor ] edit + + %prog [] get command.option + %prog [] set command.option value + %prog [] unset command.option + %prog [] debug + """ + + def add_options(self) -> None: + self.cmd_opts.add_option( + "--editor", + dest="editor", + action="store", + default=None, + help=( + "Editor to use to edit the file. Uses VISUAL or EDITOR " + "environment variables if not provided." + ), + ) + + self.cmd_opts.add_option( + "--global", + dest="global_file", + action="store_true", + default=False, + help="Use the system-wide configuration file only", + ) + + self.cmd_opts.add_option( + "--user", + dest="user_file", + action="store_true", + default=False, + help="Use the user configuration file only", + ) + + self.cmd_opts.add_option( + "--site", + dest="site_file", + action="store_true", + default=False, + help="Use the current environment configuration file only", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "list": self.list_values, + "edit": self.open_in_editor, + "get": self.get_name, + "set": self.set_name_value, + "unset": self.unset_name, + "debug": self.list_config_values, + } + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".join(sorted(handlers)), + ) + return ERROR + + action = args[0] + + # Determine which configuration files are to be loaded + # Depends on whether the command is modifying. + try: + load_only = self._determine_file( + options, need_value=(action in ["get", "set", "unset", "edit"]) + ) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + # Load a new configuration + self.configuration = Configuration( + isolated=options.isolated_mode, load_only=load_only + ) + self.configuration.load() + + # Error handling happens here, not in the action-handlers. + try: + handlers[action](options, args[1:]) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + return SUCCESS + + def _determine_file(self, options: Values, need_value: bool) -> Optional[Kind]: + file_options = [ + key + for key, value in ( + (kinds.USER, options.user_file), + (kinds.GLOBAL, options.global_file), + (kinds.SITE, options.site_file), + ) + if value + ] + + if not file_options: + if not need_value: + return None + # Default to user, unless there's a site file. + elif any( + os.path.exists(site_config_file) + for site_config_file in get_configuration_files()[kinds.SITE] + ): + return kinds.SITE + else: + return kinds.USER + elif len(file_options) == 1: + return file_options[0] + + raise PipError( + "Need exactly one file to operate upon " + "(--user, --site, --global) to perform." + ) + + def list_values(self, options: Values, args: List[str]) -> None: + self._get_n_args(args, "list", n=0) + + for key, value in sorted(self.configuration.items()): + write_output("%s=%r", key, value) + + def get_name(self, options: Values, args: List[str]) -> None: + key = self._get_n_args(args, "get [name]", n=1) + value = self.configuration.get_value(key) + + write_output("%s", value) + + def set_name_value(self, options: Values, args: List[str]) -> None: + key, value = self._get_n_args(args, "set [name] [value]", n=2) + self.configuration.set_value(key, value) + + self._save_configuration() + + def unset_name(self, options: Values, args: List[str]) -> None: + key = self._get_n_args(args, "unset [name]", n=1) + self.configuration.unset_value(key) + + self._save_configuration() + + def list_config_values(self, options: Values, args: List[str]) -> None: + """List config key-value pairs across different config files""" + self._get_n_args(args, "debug", n=0) + + self.print_env_var_values() + # Iterate over config files and print if they exist, and the + # key-value pairs present in them if they do + for variant, files in sorted(self.configuration.iter_config_files()): + write_output("%s:", variant) + for fname in files: + with indent_log(): + file_exists = os.path.exists(fname) + write_output("%s, exists: %r", fname, file_exists) + if file_exists: + self.print_config_file_values(variant) + + def print_config_file_values(self, variant: Kind) -> None: + """Get key-value pairs from the file of a variant""" + for name, value in self.configuration.get_values_in_config(variant).items(): + with indent_log(): + write_output("%s: %s", name, value) + + def print_env_var_values(self) -> None: + """Get key-values pairs present as environment variables""" + write_output("%s:", "env_var") + with indent_log(): + for key, value in sorted(self.configuration.get_environ_vars()): + env_var = f"PIP_{key.upper()}" + write_output("%s=%r", env_var, value) + + def open_in_editor(self, options: Values, args: List[str]) -> None: + editor = self._determine_editor(options) + + fname = self.configuration.get_file_to_edit() + if fname is None: + raise PipError("Could not determine appropriate file.") + elif '"' in fname: + # This shouldn't happen, unless we see a username like that. + # If that happens, we'd appreciate a pull request fixing this. + raise PipError( + f'Can not open an editor for a file name containing "\n{fname}' + ) + + try: + subprocess.check_call(f'{editor} "{fname}"', shell=True) + except FileNotFoundError as e: + if not e.filename: + e.filename = editor + raise + except subprocess.CalledProcessError as e: + raise PipError(f"Editor Subprocess exited with exit code {e.returncode}") + + def _get_n_args(self, args: List[str], example: str, n: int) -> Any: + """Helper to make sure the command got the right number of arguments""" + if len(args) != n: + msg = ( + f"Got unexpected number of arguments, expected {n}. " + f'(example: "{get_prog()} config {example}")' + ) + raise PipError(msg) + + if n == 1: + return args[0] + else: + return args + + def _save_configuration(self) -> None: + # We successfully ran a modifying command. Need to save the + # configuration. + try: + self.configuration.save() + except Exception: + logger.exception( + "Unable to save configuration. Please report this as a bug." + ) + raise PipError("Internal Error.") + + def _determine_editor(self, options: Values) -> str: + if options.editor is not None: + return options.editor + elif "VISUAL" in os.environ: + return os.environ["VISUAL"] + elif "EDITOR" in os.environ: + return os.environ["EDITOR"] + else: + raise PipError("Could not determine editor to use.") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/debug.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/debug.py new file mode 100644 index 0000000..7e5271c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/debug.py @@ -0,0 +1,201 @@ +import importlib.resources +import locale +import logging +import os +import sys +from optparse import Values +from types import ModuleType +from typing import Any, Dict, List, Optional + +import pip._vendor +from pip._vendor.certifi import where +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.configuration import Configuration +from pip._internal.metadata import get_environment +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import get_pip_version + +logger = logging.getLogger(__name__) + + +def show_value(name: str, value: Any) -> None: + logger.info("%s: %s", name, value) + + +def show_sys_implementation() -> None: + logger.info("sys.implementation:") + implementation_name = sys.implementation.name + with indent_log(): + show_value("name", implementation_name) + + +def create_vendor_txt_map() -> Dict[str, str]: + with importlib.resources.open_text("pip._vendor", "vendor.txt") as f: + # Purge non version specifying lines. + # Also, remove any space prefix or suffixes (including comments). + lines = [ + line.strip().split(" ", 1)[0] for line in f.readlines() if "==" in line + ] + + # Transform into "module" -> version dict. + return dict(line.split("==", 1) for line in lines) + + +def get_module_from_module_name(module_name: str) -> Optional[ModuleType]: + # Module name can be uppercase in vendor.txt for some reason... + module_name = module_name.lower().replace("-", "_") + # PATCH: setuptools is actually only pkg_resources. + if module_name == "setuptools": + module_name = "pkg_resources" + + try: + __import__(f"pip._vendor.{module_name}", globals(), locals(), level=0) + return getattr(pip._vendor, module_name) + except ImportError: + # We allow 'truststore' to fail to import due + # to being unavailable on Python 3.9 and earlier. + if module_name == "truststore" and sys.version_info < (3, 10): + return None + raise + + +def get_vendor_version_from_module(module_name: str) -> Optional[str]: + module = get_module_from_module_name(module_name) + version = getattr(module, "__version__", None) + + if module and not version: + # Try to find version in debundled module info. + assert module.__file__ is not None + env = get_environment([os.path.dirname(module.__file__)]) + dist = env.get_distribution(module_name) + if dist: + version = str(dist.version) + + return version + + +def show_actual_vendor_versions(vendor_txt_versions: Dict[str, str]) -> None: + """Log the actual version and print extra info if there is + a conflict or if the actual version could not be imported. + """ + for module_name, expected_version in vendor_txt_versions.items(): + extra_message = "" + actual_version = get_vendor_version_from_module(module_name) + if not actual_version: + extra_message = ( + " (Unable to locate actual module version, using" + " vendor.txt specified version)" + ) + actual_version = expected_version + elif parse_version(actual_version) != parse_version(expected_version): + extra_message = ( + " (CONFLICT: vendor.txt suggests version should" + f" be {expected_version})" + ) + logger.info("%s==%s%s", module_name, actual_version, extra_message) + + +def show_vendor_versions() -> None: + logger.info("vendored library versions:") + + vendor_txt_versions = create_vendor_txt_map() + with indent_log(): + show_actual_vendor_versions(vendor_txt_versions) + + +def show_tags(options: Values) -> None: + tag_limit = 10 + + target_python = make_target_python(options) + tags = target_python.get_sorted_tags() + + # Display the target options that were explicitly provided. + formatted_target = target_python.format_given() + suffix = "" + if formatted_target: + suffix = f" (target: {formatted_target})" + + msg = f"Compatible tags: {len(tags)}{suffix}" + logger.info(msg) + + if options.verbose < 1 and len(tags) > tag_limit: + tags_limited = True + tags = tags[:tag_limit] + else: + tags_limited = False + + with indent_log(): + for tag in tags: + logger.info(str(tag)) + + if tags_limited: + msg = f"...\n[First {tag_limit} tags shown. Pass --verbose to show all.]" + logger.info(msg) + + +def ca_bundle_info(config: Configuration) -> str: + levels = {key.split(".", 1)[0] for key, _ in config.items()} + if not levels: + return "Not specified" + + levels_that_override_global = ["install", "wheel", "download"] + global_overriding_level = [ + level for level in levels if level in levels_that_override_global + ] + if not global_overriding_level: + return "global" + + if "global" in levels: + levels.remove("global") + return ", ".join(levels) + + +class DebugCommand(Command): + """ + Display debug information. + """ + + usage = """ + %prog """ + ignore_require_venv = True + + def add_options(self) -> None: + cmdoptions.add_target_python_options(self.cmd_opts) + self.parser.insert_option_group(0, self.cmd_opts) + self.parser.config.load() + + def run(self, options: Values, args: List[str]) -> int: + logger.warning( + "This command is only meant for debugging. " + "Do not use this with automation for parsing and getting these " + "details, since the output and options of this command may " + "change without notice." + ) + show_value("pip version", get_pip_version()) + show_value("sys.version", sys.version) + show_value("sys.executable", sys.executable) + show_value("sys.getdefaultencoding", sys.getdefaultencoding()) + show_value("sys.getfilesystemencoding", sys.getfilesystemencoding()) + show_value( + "locale.getpreferredencoding", + locale.getpreferredencoding(), + ) + show_value("sys.platform", sys.platform) + show_sys_implementation() + + show_value("'cert' config value", ca_bundle_info(self.parser.config)) + show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE")) + show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE")) + show_value("pip._vendor.certifi.where()", where()) + show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED) + + show_vendor_versions() + + show_tags(options) + + return SUCCESS diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/download.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/download.py new file mode 100644 index 0000000..54247a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/download.py @@ -0,0 +1,147 @@ +import logging +import os +from optparse import Values +from typing import List + +from pip._internal.cli import cmdoptions +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.req_command import RequirementCommand, with_cleanup +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.operations.build.build_tracker import get_build_tracker +from pip._internal.req.req_install import check_legacy_setup_py_options +from pip._internal.utils.misc import ensure_dir, normalize_path, write_output +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +class DownloadCommand(RequirementCommand): + """ + Download packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports downloading from "requirements files", which provide + an easy way to specify a whole environment to be downloaded. + """ + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] ... + %prog [options] ... + %prog [options] ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.global_options()) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.src()) + self.cmd_opts.add_option(cmdoptions.pre()) + self.cmd_opts.add_option(cmdoptions.require_hashes()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + self.cmd_opts.add_option(cmdoptions.check_build_deps()) + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + + self.cmd_opts.add_option( + "-d", + "--dest", + "--destination-dir", + "--destination-directory", + dest="download_dir", + metavar="dir", + default=os.curdir, + help="Download packages into .", + ) + + cmdoptions.add_target_python_options(self.cmd_opts) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + options.ignore_installed = True + # editable doesn't really make sense for `pip download`, but the bowels + # of the RequirementSet code require that property. + options.editables = [] + + cmdoptions.check_dist_restriction(options) + + options.download_dir = normalize_path(options.download_dir) + ensure_dir(options.download_dir) + + session = self.get_default_session(options) + + target_python = make_target_python(options) + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + + build_tracker = self.enter_context(get_build_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="download", + globally_managed=True, + ) + + reqs = self.get_requirements(args, options, finder, session) + check_legacy_setup_py_options(options, reqs) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + build_tracker=build_tracker, + session=session, + finder=finder, + download_dir=options.download_dir, + use_user_site=False, + verbosity=self.verbosity, + ) + + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + ignore_requires_python=options.ignore_requires_python, + use_pep517=options.use_pep517, + py_version_info=options.python_version, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve(reqs, check_supported_wheels=True) + + downloaded: List[str] = [] + for req in requirement_set.requirements.values(): + if req.satisfied_by is None: + assert req.name is not None + preparer.save_linked_requirement(req) + downloaded.append(req.name) + + preparer.prepare_linked_requirements_more(requirement_set.requirements.values()) + requirement_set.warn_legacy_versions_and_specifiers() + + if downloaded: + write_output("Successfully downloaded %s", " ".join(downloaded)) + + return SUCCESS diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py new file mode 100644 index 0000000..e64cb3d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py @@ -0,0 +1,109 @@ +import sys +from optparse import Values +from typing import AbstractSet, List + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.operations.freeze import freeze +from pip._internal.utils.compat import stdlib_pkgs + + +def _should_suppress_build_backends() -> bool: + return sys.version_info < (3, 12) + + +def _dev_pkgs() -> AbstractSet[str]: + pkgs = {"pip"} + + if _should_suppress_build_backends(): + pkgs |= {"setuptools", "distribute", "wheel"} + pkgs |= {"setuptools", "distribute", "wheel", "pkg-resources"} + + return pkgs + + +class FreezeCommand(Command): + """ + Output installed packages in requirements format. + + packages are listed in a case-insensitive sorted order. + """ + + usage = """ + %prog [options]""" + log_streams = ("ext://sys.stderr", "ext://sys.stderr") + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-r", + "--requirement", + dest="requirements", + action="append", + default=[], + metavar="file", + help=( + "Use the order in the given requirements file and its " + "comments when generating output. This option can be " + "used multiple times." + ), + ) + self.cmd_opts.add_option( + "-l", + "--local", + dest="local", + action="store_true", + default=False, + help=( + "If in a virtualenv that has global access, do not output " + "globally-installed packages." + ), + ) + self.cmd_opts.add_option( + "--user", + dest="user", + action="store_true", + default=False, + help="Only output packages installed in user-site.", + ) + self.cmd_opts.add_option(cmdoptions.list_path()) + self.cmd_opts.add_option( + "--all", + dest="freeze_all", + action="store_true", + help=( + "Do not skip these packages in the output:" + " {}".format(", ".join(_dev_pkgs())) + ), + ) + self.cmd_opts.add_option( + "--exclude-editable", + dest="exclude_editable", + action="store_true", + help="Exclude editable package from output.", + ) + self.cmd_opts.add_option(cmdoptions.list_exclude()) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + skip = set(stdlib_pkgs) + if not options.freeze_all: + skip.update(_dev_pkgs()) + + if options.excludes: + skip.update(options.excludes) + + cmdoptions.check_list_path_option(options) + + for line in freeze( + requirement=options.requirements, + local_only=options.local, + user_only=options.user, + paths=options.path, + isolated=options.isolated_mode, + skip=skip, + exclude_editable=options.exclude_editable, + ): + sys.stdout.write(line + "\n") + return SUCCESS diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/hash.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/hash.py new file mode 100644 index 0000000..042dac8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/hash.py @@ -0,0 +1,59 @@ +import hashlib +import logging +import sys +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES +from pip._internal.utils.misc import read_chunks, write_output + +logger = logging.getLogger(__name__) + + +class HashCommand(Command): + """ + Compute a hash of a local package archive. + + These can be used with --hash in a requirements file to do repeatable + installs. + """ + + usage = "%prog [options] ..." + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-a", + "--algorithm", + dest="algorithm", + choices=STRONG_HASHES, + action="store", + default=FAVORITE_HASH, + help="The hash algorithm to use: one of {}".format( + ", ".join(STRONG_HASHES) + ), + ) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + if not args: + self.parser.print_usage(sys.stderr) + return ERROR + + algorithm = options.algorithm + for path in args: + write_output( + "%s:\n--hash=%s:%s", path, algorithm, _hash_of_file(path, algorithm) + ) + return SUCCESS + + +def _hash_of_file(path: str, algorithm: str) -> str: + """Return the hash digest of a file.""" + with open(path, "rb") as archive: + hash = hashlib.new(algorithm) + for chunk in read_chunks(archive): + hash.update(chunk) + return hash.hexdigest() diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/help.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/help.py new file mode 100644 index 0000000..6206631 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/help.py @@ -0,0 +1,41 @@ +from optparse import Values +from typing import List + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError + + +class HelpCommand(Command): + """Show help for commands""" + + usage = """ + %prog """ + ignore_require_venv = True + + def run(self, options: Values, args: List[str]) -> int: + from pip._internal.commands import ( + commands_dict, + create_command, + get_similar_commands, + ) + + try: + # 'pip help' with no args is handled by pip.__init__.parseopt() + cmd_name = args[0] # the command we need help for + except IndexError: + return SUCCESS + + if cmd_name not in commands_dict: + guess = get_similar_commands(cmd_name) + + msg = [f'unknown command "{cmd_name}"'] + if guess: + msg.append(f'maybe you meant "{guess}"') + + raise CommandError(" - ".join(msg)) + + command = create_command(cmd_name) + command.parser.print_help() + + return SUCCESS diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/index.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/index.py new file mode 100644 index 0000000..f55e9e4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/index.py @@ -0,0 +1,139 @@ +import logging +from optparse import Values +from typing import Any, Iterable, List, Optional, Union + +from pip._vendor.packaging.version import LegacyVersion, Version + +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import IndexGroupCommand +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.commands.search import print_dist_installation_info +from pip._internal.exceptions import CommandError, DistributionNotFound, PipError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.network.session import PipSession +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class IndexCommand(IndexGroupCommand): + """ + Inspect information available from package indexes. + """ + + ignore_require_venv = True + usage = """ + %prog versions + """ + + def add_options(self) -> None: + cmdoptions.add_target_python_options(self.cmd_opts) + + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.pre()) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + handlers = { + "versions": self.get_available_package_versions, + } + + logger.warning( + "pip index is currently an experimental command. " + "It may be removed/changed in a future release " + "without prior warning." + ) + + # Determine action + if not args or args[0] not in handlers: + logger.error( + "Need an action (%s) to perform.", + ", ".join(sorted(handlers)), + ) + return ERROR + + action = args[0] + + # Error handling happens here, not in the action-handlers. + try: + handlers[action](options, args[1:]) + except PipError as e: + logger.error(e.args[0]) + return ERROR + + return SUCCESS + + def _build_package_finder( + self, + options: Values, + session: PipSession, + target_python: Optional[TargetPython] = None, + ignore_requires_python: Optional[bool] = None, + ) -> PackageFinder: + """ + Create a package finder appropriate to the index command. + """ + link_collector = LinkCollector.create(session, options=options) + + # Pass allow_yanked=False to ignore yanked versions. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=options.pre, + ignore_requires_python=ignore_requires_python, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + target_python=target_python, + ) + + def get_available_package_versions(self, options: Values, args: List[Any]) -> None: + if len(args) != 1: + raise CommandError("You need to specify exactly one argument") + + target_python = cmdoptions.make_target_python(options) + query = args[0] + + with self._build_session(options) as session: + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + + versions: Iterable[Union[LegacyVersion, Version]] = ( + candidate.version for candidate in finder.find_all_candidates(query) + ) + + if not options.pre: + # Remove prereleases + versions = ( + version for version in versions if not version.is_prerelease + ) + versions = set(versions) + + if not versions: + raise DistributionNotFound( + f"No matching distribution found for {query}" + ) + + formatted_versions = [str(ver) for ver in sorted(versions, reverse=True)] + latest = formatted_versions[0] + + write_output(f"{query} ({latest})") + write_output("Available versions: {}".format(", ".join(formatted_versions))) + print_dist_installation_info(query, latest) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py new file mode 100644 index 0000000..27c8fa3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py @@ -0,0 +1,92 @@ +import logging +from optparse import Values +from typing import Any, Dict, List + +from pip._vendor.packaging.markers import default_environment +from pip._vendor.rich import print_json + +from pip import __version__ +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import Command +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.metadata import BaseDistribution, get_environment +from pip._internal.utils.compat import stdlib_pkgs +from pip._internal.utils.urls import path_to_url + +logger = logging.getLogger(__name__) + + +class InspectCommand(Command): + """ + Inspect the content of a Python environment and produce a report in JSON format. + """ + + ignore_require_venv = True + usage = """ + %prog [options]""" + + def add_options(self) -> None: + self.cmd_opts.add_option( + "--local", + action="store_true", + default=False, + help=( + "If in a virtualenv that has global access, do not list " + "globally-installed packages." + ), + ) + self.cmd_opts.add_option( + "--user", + dest="user", + action="store_true", + default=False, + help="Only output packages installed in user-site.", + ) + self.cmd_opts.add_option(cmdoptions.list_path()) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + cmdoptions.check_list_path_option(options) + dists = get_environment(options.path).iter_installed_distributions( + local_only=options.local, + user_only=options.user, + skip=set(stdlib_pkgs), + ) + output = { + "version": "1", + "pip_version": __version__, + "installed": [self._dist_to_dict(dist) for dist in dists], + "environment": default_environment(), + # TODO tags? scheme? + } + print_json(data=output) + return SUCCESS + + def _dist_to_dict(self, dist: BaseDistribution) -> Dict[str, Any]: + res: Dict[str, Any] = { + "metadata": dist.metadata_dict, + "metadata_location": dist.info_location, + } + # direct_url. Note that we don't have download_info (as in the installation + # report) since it is not recorded in installed metadata. + direct_url = dist.direct_url + if direct_url is not None: + res["direct_url"] = direct_url.to_dict() + else: + # Emulate direct_url for legacy editable installs. + editable_project_location = dist.editable_project_location + if editable_project_location is not None: + res["direct_url"] = { + "url": path_to_url(editable_project_location), + "dir_info": { + "editable": True, + }, + } + # installer + installer = dist.installer + if dist.installer: + res["installer"] = installer + # requested + if dist.installed_with_dist_info: + res["requested"] = dist.requested + return res diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/install.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/install.py new file mode 100644 index 0000000..e944bb9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/install.py @@ -0,0 +1,774 @@ +import errno +import json +import operator +import os +import shutil +import site +from optparse import SUPPRESS_HELP, Values +from typing import List, Optional + +from pip._vendor.rich import print_json + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.cmdoptions import make_target_python +from pip._internal.cli.req_command import ( + RequirementCommand, + warn_if_run_as_root, + with_cleanup, +) +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.exceptions import CommandError, InstallationError +from pip._internal.locations import get_scheme +from pip._internal.metadata import get_environment +from pip._internal.models.installation_report import InstallationReport +from pip._internal.operations.build.build_tracker import get_build_tracker +from pip._internal.operations.check import ConflictDetails, check_install_conflicts +from pip._internal.req import install_given_reqs +from pip._internal.req.req_install import ( + InstallRequirement, + check_legacy_setup_py_options, +) +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.filesystem import test_writable_dir +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ( + check_externally_managed, + ensure_dir, + get_pip_version, + protect_pip_from_modification_on_windows, + write_output, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.virtualenv import ( + running_under_virtualenv, + virtualenv_no_global, +) +from pip._internal.wheel_builder import build, should_build_for_install_command + +logger = getLogger(__name__) + + +class InstallCommand(RequirementCommand): + """ + Install packages from: + + - PyPI (and other indexes) using requirement specifiers. + - VCS project urls. + - Local project directories. + - Local or remote source archives. + + pip also supports installing from "requirements files", which provide + an easy way to specify a whole environment to be installed. + """ + + usage = """ + %prog [options] [package-index-options] ... + %prog [options] -r [package-index-options] ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.pre()) + + self.cmd_opts.add_option(cmdoptions.editable()) + self.cmd_opts.add_option( + "--dry-run", + action="store_true", + dest="dry_run", + default=False, + help=( + "Don't actually install anything, just print what would be. " + "Can be used in combination with --ignore-installed " + "to 'resolve' the requirements." + ), + ) + self.cmd_opts.add_option( + "-t", + "--target", + dest="target_dir", + metavar="dir", + default=None, + help=( + "Install packages into . " + "By default this will not replace existing files/folders in " + ". Use --upgrade to replace existing packages in " + "with new versions." + ), + ) + cmdoptions.add_target_python_options(self.cmd_opts) + + self.cmd_opts.add_option( + "--user", + dest="use_user_site", + action="store_true", + help=( + "Install to the Python user install directory for your " + "platform. Typically ~/.local/, or %APPDATA%\\Python on " + "Windows. (See the Python documentation for site.USER_BASE " + "for full details.)" + ), + ) + self.cmd_opts.add_option( + "--no-user", + dest="use_user_site", + action="store_false", + help=SUPPRESS_HELP, + ) + self.cmd_opts.add_option( + "--root", + dest="root_path", + metavar="dir", + default=None, + help="Install everything relative to this alternate root directory.", + ) + self.cmd_opts.add_option( + "--prefix", + dest="prefix_path", + metavar="dir", + default=None, + help=( + "Installation prefix where lib, bin and other top-level " + "folders are placed. Note that the resulting installation may " + "contain scripts and other resources which reference the " + "Python interpreter of pip, and not that of ``--prefix``. " + "See also the ``--python`` option if the intention is to " + "install packages into another (possibly pip-free) " + "environment." + ), + ) + + self.cmd_opts.add_option(cmdoptions.src()) + + self.cmd_opts.add_option( + "-U", + "--upgrade", + dest="upgrade", + action="store_true", + help=( + "Upgrade all specified packages to the newest available " + "version. The handling of dependencies depends on the " + "upgrade-strategy used." + ), + ) + + self.cmd_opts.add_option( + "--upgrade-strategy", + dest="upgrade_strategy", + default="only-if-needed", + choices=["only-if-needed", "eager"], + help=( + "Determines how dependency upgrading should be handled " + "[default: %default]. " + '"eager" - dependencies are upgraded regardless of ' + "whether the currently installed version satisfies the " + "requirements of the upgraded package(s). " + '"only-if-needed" - are upgraded only when they do not ' + "satisfy the requirements of the upgraded package(s)." + ), + ) + + self.cmd_opts.add_option( + "--force-reinstall", + dest="force_reinstall", + action="store_true", + help="Reinstall all packages even if they are already up-to-date.", + ) + + self.cmd_opts.add_option( + "-I", + "--ignore-installed", + dest="ignore_installed", + action="store_true", + help=( + "Ignore the installed packages, overwriting them. " + "This can break your system if the existing package " + "is of a different version or was installed " + "with a different package manager!" + ), + ) + + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + self.cmd_opts.add_option(cmdoptions.check_build_deps()) + self.cmd_opts.add_option(cmdoptions.override_externally_managed()) + + self.cmd_opts.add_option(cmdoptions.config_settings()) + self.cmd_opts.add_option(cmdoptions.global_options()) + + self.cmd_opts.add_option( + "--compile", + action="store_true", + dest="compile", + default=True, + help="Compile Python source files to bytecode", + ) + + self.cmd_opts.add_option( + "--no-compile", + action="store_false", + dest="compile", + help="Do not compile Python source files to bytecode", + ) + + self.cmd_opts.add_option( + "--no-warn-script-location", + action="store_false", + dest="warn_script_location", + default=True, + help="Do not warn when installing scripts outside PATH", + ) + self.cmd_opts.add_option( + "--no-warn-conflicts", + action="store_false", + dest="warn_about_conflicts", + default=True, + help="Do not warn about broken dependencies", + ) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.require_hashes()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + self.cmd_opts.add_option(cmdoptions.root_user_action()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + self.cmd_opts.add_option( + "--report", + dest="json_report_file", + metavar="file", + default=None, + help=( + "Generate a JSON file describing what pip did to install " + "the provided requirements. " + "Can be used in combination with --dry-run and --ignore-installed " + "to 'resolve' the requirements. " + "When - is used as file name it writes to stdout. " + "When writing to stdout, please combine with the --quiet option " + "to avoid mixing pip logging output with JSON output." + ), + ) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + if options.use_user_site and options.target_dir is not None: + raise CommandError("Can not combine '--user' and '--target'") + + # Check whether the environment we're installing into is externally + # managed, as specified in PEP 668. Specifying --root, --target, or + # --prefix disables the check, since there's no reliable way to locate + # the EXTERNALLY-MANAGED file for those cases. An exception is also + # made specifically for "--dry-run --report" for convenience. + installing_into_current_environment = ( + not (options.dry_run and options.json_report_file) + and options.root_path is None + and options.target_dir is None + and options.prefix_path is None + ) + if ( + installing_into_current_environment + and not options.override_externally_managed + ): + check_externally_managed() + + upgrade_strategy = "to-satisfy-only" + if options.upgrade: + upgrade_strategy = options.upgrade_strategy + + cmdoptions.check_dist_restriction(options, check_target=True) + + logger.verbose("Using %s", get_pip_version()) + options.use_user_site = decide_user_install( + options.use_user_site, + prefix_path=options.prefix_path, + target_dir=options.target_dir, + root_path=options.root_path, + isolated_mode=options.isolated_mode, + ) + + target_temp_dir: Optional[TempDirectory] = None + target_temp_dir_path: Optional[str] = None + if options.target_dir: + options.ignore_installed = True + options.target_dir = os.path.abspath(options.target_dir) + if ( + # fmt: off + os.path.exists(options.target_dir) and + not os.path.isdir(options.target_dir) + # fmt: on + ): + raise CommandError( + "Target path exists but is not a directory, will not continue." + ) + + # Create a target directory for using with the target option + target_temp_dir = TempDirectory(kind="target") + target_temp_dir_path = target_temp_dir.path + self.enter_context(target_temp_dir) + + global_options = options.global_options or [] + + session = self.get_default_session(options) + + target_python = make_target_python(options) + finder = self._build_package_finder( + options=options, + session=session, + target_python=target_python, + ignore_requires_python=options.ignore_requires_python, + ) + build_tracker = self.enter_context(get_build_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="install", + globally_managed=True, + ) + + try: + reqs = self.get_requirements(args, options, finder, session) + check_legacy_setup_py_options(options, reqs) + + wheel_cache = WheelCache(options.cache_dir) + + # Only when installing is it permitted to use PEP 660. + # In other circumstances (pip wheel, pip download) we generate + # regular (i.e. non editable) metadata and wheels. + for req in reqs: + req.permit_editable_wheels = True + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + build_tracker=build_tracker, + session=session, + finder=finder, + use_user_site=options.use_user_site, + verbosity=self.verbosity, + ) + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + wheel_cache=wheel_cache, + use_user_site=options.use_user_site, + ignore_installed=options.ignore_installed, + ignore_requires_python=options.ignore_requires_python, + force_reinstall=options.force_reinstall, + upgrade_strategy=upgrade_strategy, + use_pep517=options.use_pep517, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve( + reqs, check_supported_wheels=not options.target_dir + ) + + if options.json_report_file: + report = InstallationReport(requirement_set.requirements_to_install) + if options.json_report_file == "-": + print_json(data=report.to_dict()) + else: + with open(options.json_report_file, "w", encoding="utf-8") as f: + json.dump(report.to_dict(), f, indent=2, ensure_ascii=False) + + if options.dry_run: + # In non dry-run mode, the legacy versions and specifiers check + # will be done as part of conflict detection. + requirement_set.warn_legacy_versions_and_specifiers() + would_install_items = sorted( + (r.metadata["name"], r.metadata["version"]) + for r in requirement_set.requirements_to_install + ) + if would_install_items: + write_output( + "Would install %s", + " ".join("-".join(item) for item in would_install_items), + ) + return SUCCESS + + try: + pip_req = requirement_set.get_requirement("pip") + except KeyError: + modifying_pip = False + else: + # If we're not replacing an already installed pip, + # we're not modifying it. + modifying_pip = pip_req.satisfied_by is None + protect_pip_from_modification_on_windows(modifying_pip=modifying_pip) + + reqs_to_build = [ + r + for r in requirement_set.requirements.values() + if should_build_for_install_command(r) + ] + + _, build_failures = build( + reqs_to_build, + wheel_cache=wheel_cache, + verify=True, + build_options=[], + global_options=global_options, + ) + + if build_failures: + raise InstallationError( + "Could not build wheels for {}, which is required to " + "install pyproject.toml-based projects".format( + ", ".join(r.name for r in build_failures) # type: ignore + ) + ) + + to_install = resolver.get_installation_order(requirement_set) + + # Check for conflicts in the package set we're installing. + conflicts: Optional[ConflictDetails] = None + should_warn_about_conflicts = ( + not options.ignore_dependencies and options.warn_about_conflicts + ) + if should_warn_about_conflicts: + conflicts = self._determine_conflicts(to_install) + + # Don't warn about script install locations if + # --target or --prefix has been specified + warn_script_location = options.warn_script_location + if options.target_dir or options.prefix_path: + warn_script_location = False + + installed = install_given_reqs( + to_install, + global_options, + root=options.root_path, + home=target_temp_dir_path, + prefix=options.prefix_path, + warn_script_location=warn_script_location, + use_user_site=options.use_user_site, + pycompile=options.compile, + ) + + lib_locations = get_lib_location_guesses( + user=options.use_user_site, + home=target_temp_dir_path, + root=options.root_path, + prefix=options.prefix_path, + isolated=options.isolated_mode, + ) + env = get_environment(lib_locations) + + installed.sort(key=operator.attrgetter("name")) + items = [] + for result in installed: + item = result.name + try: + installed_dist = env.get_distribution(item) + if installed_dist is not None: + item = f"{item}-{installed_dist.version}" + except Exception: + pass + items.append(item) + + if conflicts is not None: + self._warn_about_conflicts( + conflicts, + resolver_variant=self.determine_resolver_variant(options), + ) + + installed_desc = " ".join(items) + if installed_desc: + write_output( + "Successfully installed %s", + installed_desc, + ) + except OSError as error: + show_traceback = self.verbosity >= 1 + + message = create_os_error_message( + error, + show_traceback, + options.use_user_site, + ) + logger.error(message, exc_info=show_traceback) + + return ERROR + + if options.target_dir: + assert target_temp_dir + self._handle_target_dir( + options.target_dir, target_temp_dir, options.upgrade + ) + if options.root_user_action == "warn": + warn_if_run_as_root() + return SUCCESS + + def _handle_target_dir( + self, target_dir: str, target_temp_dir: TempDirectory, upgrade: bool + ) -> None: + ensure_dir(target_dir) + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + lib_dir_list = [] + + # Checking both purelib and platlib directories for installed + # packages to be moved to target directory + scheme = get_scheme("", home=target_temp_dir.path) + purelib_dir = scheme.purelib + platlib_dir = scheme.platlib + data_dir = scheme.data + + if os.path.exists(purelib_dir): + lib_dir_list.append(purelib_dir) + if os.path.exists(platlib_dir) and platlib_dir != purelib_dir: + lib_dir_list.append(platlib_dir) + if os.path.exists(data_dir): + lib_dir_list.append(data_dir) + + for lib_dir in lib_dir_list: + for item in os.listdir(lib_dir): + if lib_dir == data_dir: + ddir = os.path.join(data_dir, item) + if any(s.startswith(ddir) for s in lib_dir_list[:-1]): + continue + target_item_dir = os.path.join(target_dir, item) + if os.path.exists(target_item_dir): + if not upgrade: + logger.warning( + "Target directory %s already exists. Specify " + "--upgrade to force replacement.", + target_item_dir, + ) + continue + if os.path.islink(target_item_dir): + logger.warning( + "Target directory %s already exists and is " + "a link. pip will not automatically replace " + "links, please remove if replacement is " + "desired.", + target_item_dir, + ) + continue + if os.path.isdir(target_item_dir): + shutil.rmtree(target_item_dir) + else: + os.remove(target_item_dir) + + shutil.move(os.path.join(lib_dir, item), target_item_dir) + + def _determine_conflicts( + self, to_install: List[InstallRequirement] + ) -> Optional[ConflictDetails]: + try: + return check_install_conflicts(to_install) + except Exception: + logger.exception( + "Error while checking for conflicts. Please file an issue on " + "pip's issue tracker: https://github.com/pypa/pip/issues/new" + ) + return None + + def _warn_about_conflicts( + self, conflict_details: ConflictDetails, resolver_variant: str + ) -> None: + package_set, (missing, conflicting) = conflict_details + if not missing and not conflicting: + return + + parts: List[str] = [] + if resolver_variant == "legacy": + parts.append( + "pip's legacy dependency resolver does not consider dependency " + "conflicts when selecting packages. This behaviour is the " + "source of the following dependency conflicts." + ) + else: + assert resolver_variant == "resolvelib" + parts.append( + "pip's dependency resolver does not currently take into account " + "all the packages that are installed. This behaviour is the " + "source of the following dependency conflicts." + ) + + # NOTE: There is some duplication here, with commands/check.py + for project_name in missing: + version = package_set[project_name][0] + for dependency in missing[project_name]: + message = ( + f"{project_name} {version} requires {dependency[1]}, " + "which is not installed." + ) + parts.append(message) + + for project_name in conflicting: + version = package_set[project_name][0] + for dep_name, dep_version, req in conflicting[project_name]: + message = ( + "{name} {version} requires {requirement}, but {you} have " + "{dep_name} {dep_version} which is incompatible." + ).format( + name=project_name, + version=version, + requirement=req, + dep_name=dep_name, + dep_version=dep_version, + you=("you" if resolver_variant == "resolvelib" else "you'll"), + ) + parts.append(message) + + logger.critical("\n".join(parts)) + + +def get_lib_location_guesses( + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> List[str]: + scheme = get_scheme( + "", + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + return [scheme.purelib, scheme.platlib] + + +def site_packages_writable(root: Optional[str], isolated: bool) -> bool: + return all( + test_writable_dir(d) + for d in set(get_lib_location_guesses(root=root, isolated=isolated)) + ) + + +def decide_user_install( + use_user_site: Optional[bool], + prefix_path: Optional[str] = None, + target_dir: Optional[str] = None, + root_path: Optional[str] = None, + isolated_mode: bool = False, +) -> bool: + """Determine whether to do a user install based on the input options. + + If use_user_site is False, no additional checks are done. + If use_user_site is True, it is checked for compatibility with other + options. + If use_user_site is None, the default behaviour depends on the environment, + which is provided by the other arguments. + """ + # In some cases (config from tox), use_user_site can be set to an integer + # rather than a bool, which 'use_user_site is False' wouldn't catch. + if (use_user_site is not None) and (not use_user_site): + logger.debug("Non-user install by explicit request") + return False + + if use_user_site: + if prefix_path: + raise CommandError( + "Can not combine '--user' and '--prefix' as they imply " + "different installation locations" + ) + if virtualenv_no_global(): + raise InstallationError( + "Can not perform a '--user' install. User site-packages " + "are not visible in this virtualenv." + ) + logger.debug("User install by explicit request") + return True + + # If we are here, user installs have not been explicitly requested/avoided + assert use_user_site is None + + # user install incompatible with --prefix/--target + if prefix_path or target_dir: + logger.debug("Non-user install due to --prefix or --target option") + return False + + # If user installs are not enabled, choose a non-user install + if not site.ENABLE_USER_SITE: + logger.debug("Non-user install because user site-packages disabled") + return False + + # If we have permission for a non-user install, do that, + # otherwise do a user install. + if site_packages_writable(root=root_path, isolated=isolated_mode): + logger.debug("Non-user install because site-packages writeable") + return False + + logger.info( + "Defaulting to user installation because normal site-packages " + "is not writeable" + ) + return True + + +def create_os_error_message( + error: OSError, show_traceback: bool, using_user_site: bool +) -> str: + """Format an error message for an OSError + + It may occur anytime during the execution of the install command. + """ + parts = [] + + # Mention the error if we are not going to show a traceback + parts.append("Could not install packages due to an OSError") + if not show_traceback: + parts.append(": ") + parts.append(str(error)) + else: + parts.append(".") + + # Spilt the error indication from a helper message (if any) + parts[-1] += "\n" + + # Suggest useful actions to the user: + # (1) using user site-packages or (2) verifying the permissions + if error.errno == errno.EACCES: + user_option_part = "Consider using the `--user` option" + permissions_part = "Check the permissions" + + if not running_under_virtualenv() and not using_user_site: + parts.extend( + [ + user_option_part, + " or ", + permissions_part.lower(), + ] + ) + else: + parts.append(permissions_part) + parts.append(".\n") + + # Suggest the user to enable Long Paths if path length is + # more than 260 + if ( + WINDOWS + and error.errno == errno.ENOENT + and error.filename + and len(error.filename) > 260 + ): + parts.append( + "HINT: This error might have occurred since " + "this system does not have Windows Long Path " + "support enabled. You can find information on " + "how to enable this at " + "https://pip.pypa.io/warnings/enable-long-paths\n" + ) + + return "".join(parts).strip() + "\n" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/list.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/list.py new file mode 100644 index 0000000..32fb19b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/list.py @@ -0,0 +1,370 @@ +import json +import logging +from optparse import Values +from typing import TYPE_CHECKING, Generator, List, Optional, Sequence, Tuple, cast + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import IndexGroupCommand +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution, get_environment +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.network.session import PipSession +from pip._internal.utils.compat import stdlib_pkgs +from pip._internal.utils.misc import tabulate, write_output + +if TYPE_CHECKING: + from pip._internal.metadata.base import DistributionVersion + + class _DistWithLatestInfo(BaseDistribution): + """Give the distribution object a couple of extra fields. + + These will be populated during ``get_outdated()``. This is dirty but + makes the rest of the code much cleaner. + """ + + latest_version: DistributionVersion + latest_filetype: str + + _ProcessedDists = Sequence[_DistWithLatestInfo] + + +from pip._vendor.packaging.version import parse + +logger = logging.getLogger(__name__) + + +class ListCommand(IndexGroupCommand): + """ + List installed packages, including editables. + + Packages are listed in a case-insensitive sorted order. + """ + + ignore_require_venv = True + usage = """ + %prog [options]""" + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-o", + "--outdated", + action="store_true", + default=False, + help="List outdated packages", + ) + self.cmd_opts.add_option( + "-u", + "--uptodate", + action="store_true", + default=False, + help="List uptodate packages", + ) + self.cmd_opts.add_option( + "-e", + "--editable", + action="store_true", + default=False, + help="List editable projects.", + ) + self.cmd_opts.add_option( + "-l", + "--local", + action="store_true", + default=False, + help=( + "If in a virtualenv that has global access, do not list " + "globally-installed packages." + ), + ) + self.cmd_opts.add_option( + "--user", + dest="user", + action="store_true", + default=False, + help="Only output packages installed in user-site.", + ) + self.cmd_opts.add_option(cmdoptions.list_path()) + self.cmd_opts.add_option( + "--pre", + action="store_true", + default=False, + help=( + "Include pre-release and development versions. By default, " + "pip only finds stable versions." + ), + ) + + self.cmd_opts.add_option( + "--format", + action="store", + dest="list_format", + default="columns", + choices=("columns", "freeze", "json"), + help=( + "Select the output format among: columns (default), freeze, or json. " + "The 'freeze' format cannot be used with the --outdated option." + ), + ) + + self.cmd_opts.add_option( + "--not-required", + action="store_true", + dest="not_required", + help="List packages that are not dependencies of installed packages.", + ) + + self.cmd_opts.add_option( + "--exclude-editable", + action="store_false", + dest="include_editable", + help="Exclude editable package from output.", + ) + self.cmd_opts.add_option( + "--include-editable", + action="store_true", + dest="include_editable", + help="Include editable package from output.", + default=True, + ) + self.cmd_opts.add_option(cmdoptions.list_exclude()) + index_opts = cmdoptions.make_option_group(cmdoptions.index_group, self.parser) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + def _build_package_finder( + self, options: Values, session: PipSession + ) -> PackageFinder: + """ + Create a package finder appropriate to this list command. + """ + link_collector = LinkCollector.create(session, options=options) + + # Pass allow_yanked=False to ignore yanked versions. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=options.pre, + ) + + return PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + ) + + def run(self, options: Values, args: List[str]) -> int: + if options.outdated and options.uptodate: + raise CommandError("Options --outdated and --uptodate cannot be combined.") + + if options.outdated and options.list_format == "freeze": + raise CommandError( + "List format 'freeze' cannot be used with the --outdated option." + ) + + cmdoptions.check_list_path_option(options) + + skip = set(stdlib_pkgs) + if options.excludes: + skip.update(canonicalize_name(n) for n in options.excludes) + + packages: "_ProcessedDists" = [ + cast("_DistWithLatestInfo", d) + for d in get_environment(options.path).iter_installed_distributions( + local_only=options.local, + user_only=options.user, + editables_only=options.editable, + include_editables=options.include_editable, + skip=skip, + ) + ] + + # get_not_required must be called firstly in order to find and + # filter out all dependencies correctly. Otherwise a package + # can't be identified as requirement because some parent packages + # could be filtered out before. + if options.not_required: + packages = self.get_not_required(packages, options) + + if options.outdated: + packages = self.get_outdated(packages, options) + elif options.uptodate: + packages = self.get_uptodate(packages, options) + + self.output_package_listing(packages, options) + return SUCCESS + + def get_outdated( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + return [ + dist + for dist in self.iter_packages_latest_infos(packages, options) + if parse(str(dist.latest_version)) > parse(str(dist.version)) + ] + + def get_uptodate( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + return [ + dist + for dist in self.iter_packages_latest_infos(packages, options) + if parse(str(dist.latest_version)) == parse(str(dist.version)) + ] + + def get_not_required( + self, packages: "_ProcessedDists", options: Values + ) -> "_ProcessedDists": + dep_keys = { + canonicalize_name(dep.name) + for dist in packages + for dep in (dist.iter_dependencies() or ()) + } + + # Create a set to remove duplicate packages, and cast it to a list + # to keep the return type consistent with get_outdated and + # get_uptodate + return list({pkg for pkg in packages if pkg.canonical_name not in dep_keys}) + + def iter_packages_latest_infos( + self, packages: "_ProcessedDists", options: Values + ) -> Generator["_DistWithLatestInfo", None, None]: + with self._build_session(options) as session: + finder = self._build_package_finder(options, session) + + def latest_info( + dist: "_DistWithLatestInfo", + ) -> Optional["_DistWithLatestInfo"]: + all_candidates = finder.find_all_candidates(dist.canonical_name) + if not options.pre: + # Remove prereleases + all_candidates = [ + candidate + for candidate in all_candidates + if not candidate.version.is_prerelease + ] + + evaluator = finder.make_candidate_evaluator( + project_name=dist.canonical_name, + ) + best_candidate = evaluator.sort_best_candidate(all_candidates) + if best_candidate is None: + return None + + remote_version = best_candidate.version + if best_candidate.link.is_wheel: + typ = "wheel" + else: + typ = "sdist" + dist.latest_version = remote_version + dist.latest_filetype = typ + return dist + + for dist in map(latest_info, packages): + if dist is not None: + yield dist + + def output_package_listing( + self, packages: "_ProcessedDists", options: Values + ) -> None: + packages = sorted( + packages, + key=lambda dist: dist.canonical_name, + ) + if options.list_format == "columns" and packages: + data, header = format_for_columns(packages, options) + self.output_package_listing_columns(data, header) + elif options.list_format == "freeze": + for dist in packages: + if options.verbose >= 1: + write_output( + "%s==%s (%s)", dist.raw_name, dist.version, dist.location + ) + else: + write_output("%s==%s", dist.raw_name, dist.version) + elif options.list_format == "json": + write_output(format_for_json(packages, options)) + + def output_package_listing_columns( + self, data: List[List[str]], header: List[str] + ) -> None: + # insert the header first: we need to know the size of column names + if len(data) > 0: + data.insert(0, header) + + pkg_strings, sizes = tabulate(data) + + # Create and add a separator. + if len(data) > 0: + pkg_strings.insert(1, " ".join("-" * x for x in sizes)) + + for val in pkg_strings: + write_output(val) + + +def format_for_columns( + pkgs: "_ProcessedDists", options: Values +) -> Tuple[List[List[str]], List[str]]: + """ + Convert the package data into something usable + by output_package_listing_columns. + """ + header = ["Package", "Version"] + + running_outdated = options.outdated + if running_outdated: + header.extend(["Latest", "Type"]) + + has_editables = any(x.editable for x in pkgs) + if has_editables: + header.append("Editable project location") + + if options.verbose >= 1: + header.append("Location") + if options.verbose >= 1: + header.append("Installer") + + data = [] + for proj in pkgs: + # if we're working on the 'outdated' list, separate out the + # latest_version and type + row = [proj.raw_name, str(proj.version)] + + if running_outdated: + row.append(str(proj.latest_version)) + row.append(proj.latest_filetype) + + if has_editables: + row.append(proj.editable_project_location or "") + + if options.verbose >= 1: + row.append(proj.location or "") + if options.verbose >= 1: + row.append(proj.installer) + + data.append(row) + + return data, header + + +def format_for_json(packages: "_ProcessedDists", options: Values) -> str: + data = [] + for dist in packages: + info = { + "name": dist.raw_name, + "version": str(dist.version), + } + if options.verbose >= 1: + info["location"] = dist.location or "" + info["installer"] = dist.installer + if options.outdated: + info["latest_version"] = str(dist.latest_version) + info["latest_filetype"] = dist.latest_filetype + editable_project_location = dist.editable_project_location + if editable_project_location: + info["editable_project_location"] = editable_project_location + data.append(info) + return json.dumps(data) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/search.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/search.py new file mode 100644 index 0000000..03ed925 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/search.py @@ -0,0 +1,174 @@ +import logging +import shutil +import sys +import textwrap +import xmlrpc.client +from collections import OrderedDict +from optparse import Values +from typing import TYPE_CHECKING, Dict, List, Optional + +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.cli.base_command import Command +from pip._internal.cli.req_command import SessionCommandMixin +from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.metadata import get_default_environment +from pip._internal.models.index import PyPI +from pip._internal.network.xmlrpc import PipXmlrpcTransport +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import write_output + +if TYPE_CHECKING: + from typing import TypedDict + + class TransformedHit(TypedDict): + name: str + summary: str + versions: List[str] + + +logger = logging.getLogger(__name__) + + +class SearchCommand(Command, SessionCommandMixin): + """Search for PyPI packages whose name or summary contains .""" + + usage = """ + %prog [options] """ + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-i", + "--index", + dest="index", + metavar="URL", + default=PyPI.pypi_url, + help="Base URL of Python Package Index (default %default)", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + if not args: + raise CommandError("Missing required argument (search query).") + query = args + pypi_hits = self.search(query, options) + hits = transform_hits(pypi_hits) + + terminal_width = None + if sys.stdout.isatty(): + terminal_width = shutil.get_terminal_size()[0] + + print_results(hits, terminal_width=terminal_width) + if pypi_hits: + return SUCCESS + return NO_MATCHES_FOUND + + def search(self, query: List[str], options: Values) -> List[Dict[str, str]]: + index_url = options.index + + session = self.get_default_session(options) + + transport = PipXmlrpcTransport(index_url, session) + pypi = xmlrpc.client.ServerProxy(index_url, transport) + try: + hits = pypi.search({"name": query, "summary": query}, "or") + except xmlrpc.client.Fault as fault: + message = "XMLRPC request failed [code: {code}]\n{string}".format( + code=fault.faultCode, + string=fault.faultString, + ) + raise CommandError(message) + assert isinstance(hits, list) + return hits + + +def transform_hits(hits: List[Dict[str, str]]) -> List["TransformedHit"]: + """ + The list from pypi is really a list of versions. We want a list of + packages with the list of versions stored inline. This converts the + list from pypi into one we can use. + """ + packages: Dict[str, "TransformedHit"] = OrderedDict() + for hit in hits: + name = hit["name"] + summary = hit["summary"] + version = hit["version"] + + if name not in packages.keys(): + packages[name] = { + "name": name, + "summary": summary, + "versions": [version], + } + else: + packages[name]["versions"].append(version) + + # if this is the highest version, replace summary and score + if version == highest_version(packages[name]["versions"]): + packages[name]["summary"] = summary + + return list(packages.values()) + + +def print_dist_installation_info(name: str, latest: str) -> None: + env = get_default_environment() + dist = env.get_distribution(name) + if dist is not None: + with indent_log(): + if dist.version == latest: + write_output("INSTALLED: %s (latest)", dist.version) + else: + write_output("INSTALLED: %s", dist.version) + if parse_version(latest).pre: + write_output( + "LATEST: %s (pre-release; install" + " with `pip install --pre`)", + latest, + ) + else: + write_output("LATEST: %s", latest) + + +def print_results( + hits: List["TransformedHit"], + name_column_width: Optional[int] = None, + terminal_width: Optional[int] = None, +) -> None: + if not hits: + return + if name_column_width is None: + name_column_width = ( + max( + [ + len(hit["name"]) + len(highest_version(hit.get("versions", ["-"]))) + for hit in hits + ] + ) + + 4 + ) + + for hit in hits: + name = hit["name"] + summary = hit["summary"] or "" + latest = highest_version(hit.get("versions", ["-"])) + if terminal_width is not None: + target_width = terminal_width - name_column_width - 5 + if target_width > 10: + # wrap and indent summary to fit terminal + summary_lines = textwrap.wrap(summary, target_width) + summary = ("\n" + " " * (name_column_width + 3)).join(summary_lines) + + name_latest = f"{name} ({latest})" + line = f"{name_latest:{name_column_width}} - {summary}" + try: + write_output(line) + print_dist_installation_info(name, latest) + except UnicodeEncodeError: + pass + + +def highest_version(versions: List[str]) -> str: + return max(versions, key=parse_version) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/show.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/show.py new file mode 100644 index 0000000..3f10701 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/show.py @@ -0,0 +1,189 @@ +import logging +from optparse import Values +from typing import Generator, Iterable, Iterator, List, NamedTuple, Optional + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli.base_command import Command +from pip._internal.cli.status_codes import ERROR, SUCCESS +from pip._internal.metadata import BaseDistribution, get_default_environment +from pip._internal.utils.misc import write_output + +logger = logging.getLogger(__name__) + + +class ShowCommand(Command): + """ + Show information about one or more installed packages. + + The output is in RFC-compliant mail header format. + """ + + usage = """ + %prog [options] ...""" + ignore_require_venv = True + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-f", + "--files", + dest="files", + action="store_true", + default=False, + help="Show the full list of installed files for each package.", + ) + + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + if not args: + logger.warning("ERROR: Please provide a package name or names.") + return ERROR + query = args + + results = search_packages_info(query) + if not print_results( + results, list_files=options.files, verbose=options.verbose + ): + return ERROR + return SUCCESS + + +class _PackageInfo(NamedTuple): + name: str + version: str + location: str + editable_project_location: Optional[str] + requires: List[str] + required_by: List[str] + installer: str + metadata_version: str + classifiers: List[str] + summary: str + homepage: str + project_urls: List[str] + author: str + author_email: str + license: str + entry_points: List[str] + files: Optional[List[str]] + + +def search_packages_info(query: List[str]) -> Generator[_PackageInfo, None, None]: + """ + Gather details from installed distributions. Print distribution name, + version, location, and installed files. Installed files requires a + pip generated 'installed-files.txt' in the distributions '.egg-info' + directory. + """ + env = get_default_environment() + + installed = {dist.canonical_name: dist for dist in env.iter_all_distributions()} + query_names = [canonicalize_name(name) for name in query] + missing = sorted( + [name for name, pkg in zip(query, query_names) if pkg not in installed] + ) + if missing: + logger.warning("Package(s) not found: %s", ", ".join(missing)) + + def _get_requiring_packages(current_dist: BaseDistribution) -> Iterator[str]: + return ( + dist.metadata["Name"] or "UNKNOWN" + for dist in installed.values() + if current_dist.canonical_name + in {canonicalize_name(d.name) for d in dist.iter_dependencies()} + ) + + for query_name in query_names: + try: + dist = installed[query_name] + except KeyError: + continue + + requires = sorted((req.name for req in dist.iter_dependencies()), key=str.lower) + required_by = sorted(_get_requiring_packages(dist), key=str.lower) + + try: + entry_points_text = dist.read_text("entry_points.txt") + entry_points = entry_points_text.splitlines(keepends=False) + except FileNotFoundError: + entry_points = [] + + files_iter = dist.iter_declared_entries() + if files_iter is None: + files: Optional[List[str]] = None + else: + files = sorted(files_iter) + + metadata = dist.metadata + + yield _PackageInfo( + name=dist.raw_name, + version=str(dist.version), + location=dist.location or "", + editable_project_location=dist.editable_project_location, + requires=requires, + required_by=required_by, + installer=dist.installer, + metadata_version=dist.metadata_version or "", + classifiers=metadata.get_all("Classifier", []), + summary=metadata.get("Summary", ""), + homepage=metadata.get("Home-page", ""), + project_urls=metadata.get_all("Project-URL", []), + author=metadata.get("Author", ""), + author_email=metadata.get("Author-email", ""), + license=metadata.get("License", ""), + entry_points=entry_points, + files=files, + ) + + +def print_results( + distributions: Iterable[_PackageInfo], + list_files: bool, + verbose: bool, +) -> bool: + """ + Print the information from installed distributions found. + """ + results_printed = False + for i, dist in enumerate(distributions): + results_printed = True + if i > 0: + write_output("---") + + write_output("Name: %s", dist.name) + write_output("Version: %s", dist.version) + write_output("Summary: %s", dist.summary) + write_output("Home-page: %s", dist.homepage) + write_output("Author: %s", dist.author) + write_output("Author-email: %s", dist.author_email) + write_output("License: %s", dist.license) + write_output("Location: %s", dist.location) + if dist.editable_project_location is not None: + write_output( + "Editable project location: %s", dist.editable_project_location + ) + write_output("Requires: %s", ", ".join(dist.requires)) + write_output("Required-by: %s", ", ".join(dist.required_by)) + + if verbose: + write_output("Metadata-Version: %s", dist.metadata_version) + write_output("Installer: %s", dist.installer) + write_output("Classifiers:") + for classifier in dist.classifiers: + write_output(" %s", classifier) + write_output("Entry-points:") + for entry in dist.entry_points: + write_output(" %s", entry.strip()) + write_output("Project-URLs:") + for project_url in dist.project_urls: + write_output(" %s", project_url) + if list_files: + write_output("Files:") + if dist.files is None: + write_output("Cannot locate RECORD or installed-files.txt") + else: + for line in dist.files: + write_output(" %s", line.strip()) + return results_printed diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py new file mode 100644 index 0000000..f198fc3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py @@ -0,0 +1,113 @@ +import logging +from optparse import Values +from typing import List + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.cli import cmdoptions +from pip._internal.cli.base_command import Command +from pip._internal.cli.req_command import SessionCommandMixin, warn_if_run_as_root +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import InstallationError +from pip._internal.req import parse_requirements +from pip._internal.req.constructors import ( + install_req_from_line, + install_req_from_parsed_requirement, +) +from pip._internal.utils.misc import ( + check_externally_managed, + protect_pip_from_modification_on_windows, +) + +logger = logging.getLogger(__name__) + + +class UninstallCommand(Command, SessionCommandMixin): + """ + Uninstall packages. + + pip is able to uninstall most installed packages. Known exceptions are: + + - Pure distutils packages installed with ``python setup.py install``, which + leave behind no metadata to determine what files were installed. + - Script wrappers installed by ``python setup.py develop``. + """ + + usage = """ + %prog [options] ... + %prog [options] -r ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-r", + "--requirement", + dest="requirements", + action="append", + default=[], + metavar="file", + help=( + "Uninstall all the packages listed in the given requirements " + "file. This option can be used multiple times." + ), + ) + self.cmd_opts.add_option( + "-y", + "--yes", + dest="yes", + action="store_true", + help="Don't ask for confirmation of uninstall deletions.", + ) + self.cmd_opts.add_option(cmdoptions.root_user_action()) + self.cmd_opts.add_option(cmdoptions.override_externally_managed()) + self.parser.insert_option_group(0, self.cmd_opts) + + def run(self, options: Values, args: List[str]) -> int: + session = self.get_default_session(options) + + reqs_to_uninstall = {} + for name in args: + req = install_req_from_line( + name, + isolated=options.isolated_mode, + ) + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + else: + logger.warning( + "Invalid requirement: %r ignored -" + " the uninstall command expects named" + " requirements.", + name, + ) + for filename in options.requirements: + for parsed_req in parse_requirements( + filename, options=options, session=session + ): + req = install_req_from_parsed_requirement( + parsed_req, isolated=options.isolated_mode + ) + if req.name: + reqs_to_uninstall[canonicalize_name(req.name)] = req + if not reqs_to_uninstall: + raise InstallationError( + f"You must give at least one requirement to {self.name} (see " + f'"pip help {self.name}")' + ) + + if not options.override_externally_managed: + check_externally_managed() + + protect_pip_from_modification_on_windows( + modifying_pip="pip" in reqs_to_uninstall + ) + + for req in reqs_to_uninstall.values(): + uninstall_pathset = req.uninstall( + auto_confirm=options.yes, + verbose=self.verbosity > 0, + ) + if uninstall_pathset: + uninstall_pathset.commit() + if options.root_user_action == "warn": + warn_if_run_as_root() + return SUCCESS diff --git a/venv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py b/venv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py new file mode 100644 index 0000000..ed578aa --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py @@ -0,0 +1,183 @@ +import logging +import os +import shutil +from optparse import Values +from typing import List + +from pip._internal.cache import WheelCache +from pip._internal.cli import cmdoptions +from pip._internal.cli.req_command import RequirementCommand, with_cleanup +from pip._internal.cli.status_codes import SUCCESS +from pip._internal.exceptions import CommandError +from pip._internal.operations.build.build_tracker import get_build_tracker +from pip._internal.req.req_install import ( + InstallRequirement, + check_legacy_setup_py_options, +) +from pip._internal.utils.misc import ensure_dir, normalize_path +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.wheel_builder import build, should_build_for_wheel_command + +logger = logging.getLogger(__name__) + + +class WheelCommand(RequirementCommand): + """ + Build Wheel archives for your requirements and dependencies. + + Wheel is a built-package format, and offers the advantage of not + recompiling your software during every install. For more details, see the + wheel docs: https://wheel.readthedocs.io/en/latest/ + + 'pip wheel' uses the build system interface as described here: + https://pip.pypa.io/en/stable/reference/build-system/ + + """ + + usage = """ + %prog [options] ... + %prog [options] -r ... + %prog [options] [-e] ... + %prog [options] [-e] ... + %prog [options] ...""" + + def add_options(self) -> None: + self.cmd_opts.add_option( + "-w", + "--wheel-dir", + dest="wheel_dir", + metavar="dir", + default=os.curdir, + help=( + "Build wheels into , where the default is the " + "current working directory." + ), + ) + self.cmd_opts.add_option(cmdoptions.no_binary()) + self.cmd_opts.add_option(cmdoptions.only_binary()) + self.cmd_opts.add_option(cmdoptions.prefer_binary()) + self.cmd_opts.add_option(cmdoptions.no_build_isolation()) + self.cmd_opts.add_option(cmdoptions.use_pep517()) + self.cmd_opts.add_option(cmdoptions.no_use_pep517()) + self.cmd_opts.add_option(cmdoptions.check_build_deps()) + self.cmd_opts.add_option(cmdoptions.constraints()) + self.cmd_opts.add_option(cmdoptions.editable()) + self.cmd_opts.add_option(cmdoptions.requirements()) + self.cmd_opts.add_option(cmdoptions.src()) + self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) + self.cmd_opts.add_option(cmdoptions.no_deps()) + self.cmd_opts.add_option(cmdoptions.progress_bar()) + + self.cmd_opts.add_option( + "--no-verify", + dest="no_verify", + action="store_true", + default=False, + help="Don't verify if built wheel is valid.", + ) + + self.cmd_opts.add_option(cmdoptions.config_settings()) + self.cmd_opts.add_option(cmdoptions.build_options()) + self.cmd_opts.add_option(cmdoptions.global_options()) + + self.cmd_opts.add_option( + "--pre", + action="store_true", + default=False, + help=( + "Include pre-release and development versions. By default, " + "pip only finds stable versions." + ), + ) + + self.cmd_opts.add_option(cmdoptions.require_hashes()) + + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + self.parser, + ) + + self.parser.insert_option_group(0, index_opts) + self.parser.insert_option_group(0, self.cmd_opts) + + @with_cleanup + def run(self, options: Values, args: List[str]) -> int: + session = self.get_default_session(options) + + finder = self._build_package_finder(options, session) + + options.wheel_dir = normalize_path(options.wheel_dir) + ensure_dir(options.wheel_dir) + + build_tracker = self.enter_context(get_build_tracker()) + + directory = TempDirectory( + delete=not options.no_clean, + kind="wheel", + globally_managed=True, + ) + + reqs = self.get_requirements(args, options, finder, session) + check_legacy_setup_py_options(options, reqs) + + wheel_cache = WheelCache(options.cache_dir) + + preparer = self.make_requirement_preparer( + temp_build_dir=directory, + options=options, + build_tracker=build_tracker, + session=session, + finder=finder, + download_dir=options.wheel_dir, + use_user_site=False, + verbosity=self.verbosity, + ) + + resolver = self.make_resolver( + preparer=preparer, + finder=finder, + options=options, + wheel_cache=wheel_cache, + ignore_requires_python=options.ignore_requires_python, + use_pep517=options.use_pep517, + ) + + self.trace_basic_info(finder) + + requirement_set = resolver.resolve(reqs, check_supported_wheels=True) + + reqs_to_build: List[InstallRequirement] = [] + for req in requirement_set.requirements.values(): + if req.is_wheel: + preparer.save_linked_requirement(req) + elif should_build_for_wheel_command(req): + reqs_to_build.append(req) + + preparer.prepare_linked_requirements_more(requirement_set.requirements.values()) + requirement_set.warn_legacy_versions_and_specifiers() + + # build wheels + build_successes, build_failures = build( + reqs_to_build, + wheel_cache=wheel_cache, + verify=(not options.no_verify), + build_options=options.build_options or [], + global_options=options.global_options or [], + ) + for req in build_successes: + assert req.link and req.link.is_wheel + assert req.local_file_path + # copy from cache to target directory + try: + shutil.copy(req.local_file_path, options.wheel_dir) + except OSError as e: + logger.warning( + "Building wheel for %s failed: %s", + req.name, + e, + ) + build_failures.append(req) + if len(build_failures) != 0: + raise CommandError("Failed to build one or more wheels") + + return SUCCESS diff --git a/venv/lib/python3.12/site-packages/pip/_internal/configuration.py b/venv/lib/python3.12/site-packages/pip/_internal/configuration.py new file mode 100644 index 0000000..c25273d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/configuration.py @@ -0,0 +1,383 @@ +"""Configuration management setup + +Some terminology: +- name + As written in config files. +- value + Value associated with a name +- key + Name combined with it's section (section.name) +- variant + A single word describing where the configuration key-value pair came from +""" + +import configparser +import locale +import os +import sys +from typing import Any, Dict, Iterable, List, NewType, Optional, Tuple + +from pip._internal.exceptions import ( + ConfigurationError, + ConfigurationFileCouldNotBeLoaded, +) +from pip._internal.utils import appdirs +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ensure_dir, enum + +RawConfigParser = configparser.RawConfigParser # Shorthand +Kind = NewType("Kind", str) + +CONFIG_BASENAME = "pip.ini" if WINDOWS else "pip.conf" +ENV_NAMES_IGNORED = "version", "help" + +# The kinds of configurations there are. +kinds = enum( + USER="user", # User Specific + GLOBAL="global", # System Wide + SITE="site", # [Virtual] Environment Specific + ENV="env", # from PIP_CONFIG_FILE + ENV_VAR="env-var", # from Environment Variables +) +OVERRIDE_ORDER = kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR +VALID_LOAD_ONLY = kinds.USER, kinds.GLOBAL, kinds.SITE + +logger = getLogger(__name__) + + +# NOTE: Maybe use the optionx attribute to normalize keynames. +def _normalize_name(name: str) -> str: + """Make a name consistent regardless of source (environment or file)""" + name = name.lower().replace("_", "-") + if name.startswith("--"): + name = name[2:] # only prefer long opts + return name + + +def _disassemble_key(name: str) -> List[str]: + if "." not in name: + error_message = ( + "Key does not contain dot separated section and key. " + f"Perhaps you wanted to use 'global.{name}' instead?" + ) + raise ConfigurationError(error_message) + return name.split(".", 1) + + +def get_configuration_files() -> Dict[Kind, List[str]]: + global_config_files = [ + os.path.join(path, CONFIG_BASENAME) for path in appdirs.site_config_dirs("pip") + ] + + site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME) + legacy_config_file = os.path.join( + os.path.expanduser("~"), + "pip" if WINDOWS else ".pip", + CONFIG_BASENAME, + ) + new_config_file = os.path.join(appdirs.user_config_dir("pip"), CONFIG_BASENAME) + return { + kinds.GLOBAL: global_config_files, + kinds.SITE: [site_config_file], + kinds.USER: [legacy_config_file, new_config_file], + } + + +class Configuration: + """Handles management of configuration. + + Provides an interface to accessing and managing configuration files. + + This class converts provides an API that takes "section.key-name" style + keys and stores the value associated with it as "key-name" under the + section "section". + + This allows for a clean interface wherein the both the section and the + key-name are preserved in an easy to manage form in the configuration files + and the data stored is also nice. + """ + + def __init__(self, isolated: bool, load_only: Optional[Kind] = None) -> None: + super().__init__() + + if load_only is not None and load_only not in VALID_LOAD_ONLY: + raise ConfigurationError( + "Got invalid value for load_only - should be one of {}".format( + ", ".join(map(repr, VALID_LOAD_ONLY)) + ) + ) + self.isolated = isolated + self.load_only = load_only + + # Because we keep track of where we got the data from + self._parsers: Dict[Kind, List[Tuple[str, RawConfigParser]]] = { + variant: [] for variant in OVERRIDE_ORDER + } + self._config: Dict[Kind, Dict[str, Any]] = { + variant: {} for variant in OVERRIDE_ORDER + } + self._modified_parsers: List[Tuple[str, RawConfigParser]] = [] + + def load(self) -> None: + """Loads configuration from configuration files and environment""" + self._load_config_files() + if not self.isolated: + self._load_environment_vars() + + def get_file_to_edit(self) -> Optional[str]: + """Returns the file with highest priority in configuration""" + assert self.load_only is not None, "Need to be specified a file to be editing" + + try: + return self._get_parser_to_modify()[0] + except IndexError: + return None + + def items(self) -> Iterable[Tuple[str, Any]]: + """Returns key-value pairs like dict.items() representing the loaded + configuration + """ + return self._dictionary.items() + + def get_value(self, key: str) -> Any: + """Get a value from the configuration.""" + orig_key = key + key = _normalize_name(key) + try: + return self._dictionary[key] + except KeyError: + # disassembling triggers a more useful error message than simply + # "No such key" in the case that the key isn't in the form command.option + _disassemble_key(key) + raise ConfigurationError(f"No such key - {orig_key}") + + def set_value(self, key: str, value: Any) -> None: + """Modify a value in the configuration.""" + key = _normalize_name(key) + self._ensure_have_load_only() + + assert self.load_only + fname, parser = self._get_parser_to_modify() + + if parser is not None: + section, name = _disassemble_key(key) + + # Modify the parser and the configuration + if not parser.has_section(section): + parser.add_section(section) + parser.set(section, name, value) + + self._config[self.load_only][key] = value + self._mark_as_modified(fname, parser) + + def unset_value(self, key: str) -> None: + """Unset a value in the configuration.""" + orig_key = key + key = _normalize_name(key) + self._ensure_have_load_only() + + assert self.load_only + if key not in self._config[self.load_only]: + raise ConfigurationError(f"No such key - {orig_key}") + + fname, parser = self._get_parser_to_modify() + + if parser is not None: + section, name = _disassemble_key(key) + if not ( + parser.has_section(section) and parser.remove_option(section, name) + ): + # The option was not removed. + raise ConfigurationError( + "Fatal Internal error [id=1]. Please report as a bug." + ) + + # The section may be empty after the option was removed. + if not parser.items(section): + parser.remove_section(section) + self._mark_as_modified(fname, parser) + + del self._config[self.load_only][key] + + def save(self) -> None: + """Save the current in-memory state.""" + self._ensure_have_load_only() + + for fname, parser in self._modified_parsers: + logger.info("Writing to %s", fname) + + # Ensure directory exists. + ensure_dir(os.path.dirname(fname)) + + # Ensure directory's permission(need to be writeable) + try: + with open(fname, "w") as f: + parser.write(f) + except OSError as error: + raise ConfigurationError( + f"An error occurred while writing to the configuration file " + f"{fname}: {error}" + ) + + # + # Private routines + # + + def _ensure_have_load_only(self) -> None: + if self.load_only is None: + raise ConfigurationError("Needed a specific file to be modifying.") + logger.debug("Will be working with %s variant only", self.load_only) + + @property + def _dictionary(self) -> Dict[str, Any]: + """A dictionary representing the loaded configuration.""" + # NOTE: Dictionaries are not populated if not loaded. So, conditionals + # are not needed here. + retval = {} + + for variant in OVERRIDE_ORDER: + retval.update(self._config[variant]) + + return retval + + def _load_config_files(self) -> None: + """Loads configuration from configuration files""" + config_files = dict(self.iter_config_files()) + if config_files[kinds.ENV][0:1] == [os.devnull]: + logger.debug( + "Skipping loading configuration files due to " + "environment's PIP_CONFIG_FILE being os.devnull" + ) + return + + for variant, files in config_files.items(): + for fname in files: + # If there's specific variant set in `load_only`, load only + # that variant, not the others. + if self.load_only is not None and variant != self.load_only: + logger.debug("Skipping file '%s' (variant: %s)", fname, variant) + continue + + parser = self._load_file(variant, fname) + + # Keeping track of the parsers used + self._parsers[variant].append((fname, parser)) + + def _load_file(self, variant: Kind, fname: str) -> RawConfigParser: + logger.verbose("For variant '%s', will try loading '%s'", variant, fname) + parser = self._construct_parser(fname) + + for section in parser.sections(): + items = parser.items(section) + self._config[variant].update(self._normalized_keys(section, items)) + + return parser + + def _construct_parser(self, fname: str) -> RawConfigParser: + parser = configparser.RawConfigParser() + # If there is no such file, don't bother reading it but create the + # parser anyway, to hold the data. + # Doing this is useful when modifying and saving files, where we don't + # need to construct a parser. + if os.path.exists(fname): + locale_encoding = locale.getpreferredencoding(False) + try: + parser.read(fname, encoding=locale_encoding) + except UnicodeDecodeError: + # See https://github.com/pypa/pip/issues/4963 + raise ConfigurationFileCouldNotBeLoaded( + reason=f"contains invalid {locale_encoding} characters", + fname=fname, + ) + except configparser.Error as error: + # See https://github.com/pypa/pip/issues/4893 + raise ConfigurationFileCouldNotBeLoaded(error=error) + return parser + + def _load_environment_vars(self) -> None: + """Loads configuration from environment variables""" + self._config[kinds.ENV_VAR].update( + self._normalized_keys(":env:", self.get_environ_vars()) + ) + + def _normalized_keys( + self, section: str, items: Iterable[Tuple[str, Any]] + ) -> Dict[str, Any]: + """Normalizes items to construct a dictionary with normalized keys. + + This routine is where the names become keys and are made the same + regardless of source - configuration files or environment. + """ + normalized = {} + for name, val in items: + key = section + "." + _normalize_name(name) + normalized[key] = val + return normalized + + def get_environ_vars(self) -> Iterable[Tuple[str, str]]: + """Returns a generator with all environmental vars with prefix PIP_""" + for key, val in os.environ.items(): + if key.startswith("PIP_"): + name = key[4:].lower() + if name not in ENV_NAMES_IGNORED: + yield name, val + + # XXX: This is patched in the tests. + def iter_config_files(self) -> Iterable[Tuple[Kind, List[str]]]: + """Yields variant and configuration files associated with it. + + This should be treated like items of a dictionary. The order + here doesn't affect what gets overridden. That is controlled + by OVERRIDE_ORDER. However this does control the order they are + displayed to the user. It's probably most ergononmic to display + things in the same order as OVERRIDE_ORDER + """ + # SMELL: Move the conditions out of this function + + env_config_file = os.environ.get("PIP_CONFIG_FILE", None) + config_files = get_configuration_files() + + yield kinds.GLOBAL, config_files[kinds.GLOBAL] + + # per-user config is not loaded when env_config_file exists + should_load_user_config = not self.isolated and not ( + env_config_file and os.path.exists(env_config_file) + ) + if should_load_user_config: + # The legacy config file is overridden by the new config file + yield kinds.USER, config_files[kinds.USER] + + # virtualenv config + yield kinds.SITE, config_files[kinds.SITE] + + if env_config_file is not None: + yield kinds.ENV, [env_config_file] + else: + yield kinds.ENV, [] + + def get_values_in_config(self, variant: Kind) -> Dict[str, Any]: + """Get values present in a config file""" + return self._config[variant] + + def _get_parser_to_modify(self) -> Tuple[str, RawConfigParser]: + # Determine which parser to modify + assert self.load_only + parsers = self._parsers[self.load_only] + if not parsers: + # This should not happen if everything works correctly. + raise ConfigurationError( + "Fatal Internal error [id=2]. Please report as a bug." + ) + + # Use the highest priority parser. + return parsers[-1] + + # XXX: This is patched in the tests. + def _mark_as_modified(self, fname: str, parser: RawConfigParser) -> None: + file_parser_tuple = (fname, parser) + if file_parser_tuple not in self._modified_parsers: + self._modified_parsers.append(file_parser_tuple) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self._dictionary!r})" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py new file mode 100644 index 0000000..9a89a83 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py @@ -0,0 +1,21 @@ +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.distributions.sdist import SourceDistribution +from pip._internal.distributions.wheel import WheelDistribution +from pip._internal.req.req_install import InstallRequirement + + +def make_distribution_for_install_requirement( + install_req: InstallRequirement, +) -> AbstractDistribution: + """Returns a Distribution for the given InstallRequirement""" + # Editable requirements will always be source distributions. They use the + # legacy logic until we create a modern standard for them. + if install_req.editable: + return SourceDistribution(install_req) + + # If it's a wheel, it's a WheelDistribution + if install_req.is_wheel: + return WheelDistribution(install_req) + + # Otherwise, a SourceDistribution + return SourceDistribution(install_req) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..af93cc0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc new file mode 100644 index 0000000..062d6ba Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc new file mode 100644 index 0000000..8a85917 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc new file mode 100644 index 0000000..720348c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc new file mode 100644 index 0000000..0ca16d4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/base.py b/venv/lib/python3.12/site-packages/pip/_internal/distributions/base.py new file mode 100644 index 0000000..6fb0d7b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/distributions/base.py @@ -0,0 +1,51 @@ +import abc +from typing import Optional + +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata.base import BaseDistribution +from pip._internal.req import InstallRequirement + + +class AbstractDistribution(metaclass=abc.ABCMeta): + """A base class for handling installable artifacts. + + The requirements for anything installable are as follows: + + - we must be able to determine the requirement name + (or we can't correctly handle the non-upgrade case). + + - for packages with setup requirements, we must also be able + to determine their requirements without installing additional + packages (for the same reason as run-time dependencies) + + - we must be able to create a Distribution object exposing the + above metadata. + + - if we need to do work in the build tracker, we must be able to generate a unique + string to identify the requirement in the build tracker. + """ + + def __init__(self, req: InstallRequirement) -> None: + super().__init__() + self.req = req + + @abc.abstractproperty + def build_tracker_id(self) -> Optional[str]: + """A string that uniquely identifies this requirement to the build tracker. + + If None, then this dist has no work to do in the build tracker, and + ``.prepare_distribution_metadata()`` will not be called.""" + raise NotImplementedError() + + @abc.abstractmethod + def get_metadata_distribution(self) -> BaseDistribution: + raise NotImplementedError() + + @abc.abstractmethod + def prepare_distribution_metadata( + self, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, + ) -> None: + raise NotImplementedError() diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/installed.py b/venv/lib/python3.12/site-packages/pip/_internal/distributions/installed.py new file mode 100644 index 0000000..ab8d53b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/distributions/installed.py @@ -0,0 +1,29 @@ +from typing import Optional + +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution + + +class InstalledDistribution(AbstractDistribution): + """Represents an installed package. + + This does not need any preparation as the required information has already + been computed. + """ + + @property + def build_tracker_id(self) -> Optional[str]: + return None + + def get_metadata_distribution(self) -> BaseDistribution: + assert self.req.satisfied_by is not None, "not actually installed" + return self.req.satisfied_by + + def prepare_distribution_metadata( + self, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, + ) -> None: + pass diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py b/venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py new file mode 100644 index 0000000..15ff42b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py @@ -0,0 +1,156 @@ +import logging +from typing import Iterable, Optional, Set, Tuple + +from pip._internal.build_env import BuildEnvironment +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.exceptions import InstallationError +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +class SourceDistribution(AbstractDistribution): + """Represents a source distribution. + + The preparation step for these needs metadata for the packages to be + generated, either using PEP 517 or using the legacy `setup.py egg_info`. + """ + + @property + def build_tracker_id(self) -> Optional[str]: + """Identify this requirement uniquely by its link.""" + assert self.req.link + return self.req.link.url_without_fragment + + def get_metadata_distribution(self) -> BaseDistribution: + return self.req.get_dist() + + def prepare_distribution_metadata( + self, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, + ) -> None: + # Load pyproject.toml, to determine whether PEP 517 is to be used + self.req.load_pyproject_toml() + + # Set up the build isolation, if this requirement should be isolated + should_isolate = self.req.use_pep517 and build_isolation + if should_isolate: + # Setup an isolated environment and install the build backend static + # requirements in it. + self._prepare_build_backend(finder) + # Check that if the requirement is editable, it either supports PEP 660 or + # has a setup.py or a setup.cfg. This cannot be done earlier because we need + # to setup the build backend to verify it supports build_editable, nor can + # it be done later, because we want to avoid installing build requirements + # needlessly. Doing it here also works around setuptools generating + # UNKNOWN.egg-info when running get_requires_for_build_wheel on a directory + # without setup.py nor setup.cfg. + self.req.isolated_editable_sanity_check() + # Install the dynamic build requirements. + self._install_build_reqs(finder) + # Check if the current environment provides build dependencies + should_check_deps = self.req.use_pep517 and check_build_deps + if should_check_deps: + pyproject_requires = self.req.pyproject_requires + assert pyproject_requires is not None + conflicting, missing = self.req.build_env.check_requirements( + pyproject_requires + ) + if conflicting: + self._raise_conflicts("the backend dependencies", conflicting) + if missing: + self._raise_missing_reqs(missing) + self.req.prepare_metadata() + + def _prepare_build_backend(self, finder: PackageFinder) -> None: + # Isolate in a BuildEnvironment and install the build-time + # requirements. + pyproject_requires = self.req.pyproject_requires + assert pyproject_requires is not None + + self.req.build_env = BuildEnvironment() + self.req.build_env.install_requirements( + finder, pyproject_requires, "overlay", kind="build dependencies" + ) + conflicting, missing = self.req.build_env.check_requirements( + self.req.requirements_to_check + ) + if conflicting: + self._raise_conflicts("PEP 517/518 supported requirements", conflicting) + if missing: + logger.warning( + "Missing build requirements in pyproject.toml for %s.", + self.req, + ) + logger.warning( + "The project does not specify a build backend, and " + "pip cannot fall back to setuptools without %s.", + " and ".join(map(repr, sorted(missing))), + ) + + def _get_build_requires_wheel(self) -> Iterable[str]: + with self.req.build_env: + runner = runner_with_spinner_message("Getting requirements to build wheel") + backend = self.req.pep517_backend + assert backend is not None + with backend.subprocess_runner(runner): + return backend.get_requires_for_build_wheel() + + def _get_build_requires_editable(self) -> Iterable[str]: + with self.req.build_env: + runner = runner_with_spinner_message( + "Getting requirements to build editable" + ) + backend = self.req.pep517_backend + assert backend is not None + with backend.subprocess_runner(runner): + return backend.get_requires_for_build_editable() + + def _install_build_reqs(self, finder: PackageFinder) -> None: + # Install any extra build dependencies that the backend requests. + # This must be done in a second pass, as the pyproject.toml + # dependencies must be installed before we can call the backend. + if ( + self.req.editable + and self.req.permit_editable_wheels + and self.req.supports_pyproject_editable() + ): + build_reqs = self._get_build_requires_editable() + else: + build_reqs = self._get_build_requires_wheel() + conflicting, missing = self.req.build_env.check_requirements(build_reqs) + if conflicting: + self._raise_conflicts("the backend dependencies", conflicting) + self.req.build_env.install_requirements( + finder, missing, "normal", kind="backend dependencies" + ) + + def _raise_conflicts( + self, conflicting_with: str, conflicting_reqs: Set[Tuple[str, str]] + ) -> None: + format_string = ( + "Some build dependencies for {requirement} " + "conflict with {conflicting_with}: {description}." + ) + error_message = format_string.format( + requirement=self.req, + conflicting_with=conflicting_with, + description=", ".join( + f"{installed} is incompatible with {wanted}" + for installed, wanted in sorted(conflicting_reqs) + ), + ) + raise InstallationError(error_message) + + def _raise_missing_reqs(self, missing: Set[str]) -> None: + format_string = ( + "Some build dependencies for {requirement} are missing: {missing}." + ) + error_message = format_string.format( + requirement=self.req, missing=", ".join(map(repr, sorted(missing))) + ) + raise InstallationError(error_message) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py b/venv/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py new file mode 100644 index 0000000..eb16e25 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py @@ -0,0 +1,40 @@ +from typing import Optional + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.distributions.base import AbstractDistribution +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import ( + BaseDistribution, + FilesystemWheel, + get_wheel_distribution, +) + + +class WheelDistribution(AbstractDistribution): + """Represents a wheel distribution. + + This does not need any preparation as wheels can be directly unpacked. + """ + + @property + def build_tracker_id(self) -> Optional[str]: + return None + + def get_metadata_distribution(self) -> BaseDistribution: + """Loads the metadata from the wheel file into memory and returns a + Distribution that uses it, not relying on the wheel file or + requirement. + """ + assert self.req.local_file_path, "Set as part of preparation during download" + assert self.req.name, "Wheels are never unnamed" + wheel = FilesystemWheel(self.req.local_file_path) + return get_wheel_distribution(wheel, canonicalize_name(self.req.name)) + + def prepare_distribution_metadata( + self, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, + ) -> None: + pass diff --git a/venv/lib/python3.12/site-packages/pip/_internal/exceptions.py b/venv/lib/python3.12/site-packages/pip/_internal/exceptions.py new file mode 100644 index 0000000..5007a62 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/exceptions.py @@ -0,0 +1,728 @@ +"""Exceptions used throughout package. + +This module MUST NOT try to import from anything within `pip._internal` to +operate. This is expected to be importable from any/all files within the +subpackage and, thus, should not depend on them. +""" + +import configparser +import contextlib +import locale +import logging +import pathlib +import re +import sys +from itertools import chain, groupby, repeat +from typing import TYPE_CHECKING, Dict, Iterator, List, Optional, Union + +from pip._vendor.requests.models import Request, Response +from pip._vendor.rich.console import Console, ConsoleOptions, RenderResult +from pip._vendor.rich.markup import escape +from pip._vendor.rich.text import Text + +if TYPE_CHECKING: + from hashlib import _Hash + from typing import Literal + + from pip._internal.metadata import BaseDistribution + from pip._internal.req.req_install import InstallRequirement + +logger = logging.getLogger(__name__) + + +# +# Scaffolding +# +def _is_kebab_case(s: str) -> bool: + return re.match(r"^[a-z]+(-[a-z]+)*$", s) is not None + + +def _prefix_with_indent( + s: Union[Text, str], + console: Console, + *, + prefix: str, + indent: str, +) -> Text: + if isinstance(s, Text): + text = s + else: + text = console.render_str(s) + + return console.render_str(prefix, overflow="ignore") + console.render_str( + f"\n{indent}", overflow="ignore" + ).join(text.split(allow_blank=True)) + + +class PipError(Exception): + """The base pip error.""" + + +class DiagnosticPipError(PipError): + """An error, that presents diagnostic information to the user. + + This contains a bunch of logic, to enable pretty presentation of our error + messages. Each error gets a unique reference. Each error can also include + additional context, a hint and/or a note -- which are presented with the + main error message in a consistent style. + + This is adapted from the error output styling in `sphinx-theme-builder`. + """ + + reference: str + + def __init__( + self, + *, + kind: 'Literal["error", "warning"]' = "error", + reference: Optional[str] = None, + message: Union[str, Text], + context: Optional[Union[str, Text]], + hint_stmt: Optional[Union[str, Text]], + note_stmt: Optional[Union[str, Text]] = None, + link: Optional[str] = None, + ) -> None: + # Ensure a proper reference is provided. + if reference is None: + assert hasattr(self, "reference"), "error reference not provided!" + reference = self.reference + assert _is_kebab_case(reference), "error reference must be kebab-case!" + + self.kind = kind + self.reference = reference + + self.message = message + self.context = context + + self.note_stmt = note_stmt + self.hint_stmt = hint_stmt + + self.link = link + + super().__init__(f"<{self.__class__.__name__}: {self.reference}>") + + def __repr__(self) -> str: + return ( + f"<{self.__class__.__name__}(" + f"reference={self.reference!r}, " + f"message={self.message!r}, " + f"context={self.context!r}, " + f"note_stmt={self.note_stmt!r}, " + f"hint_stmt={self.hint_stmt!r}" + ")>" + ) + + def __rich_console__( + self, + console: Console, + options: ConsoleOptions, + ) -> RenderResult: + colour = "red" if self.kind == "error" else "yellow" + + yield f"[{colour} bold]{self.kind}[/]: [bold]{self.reference}[/]" + yield "" + + if not options.ascii_only: + # Present the main message, with relevant context indented. + if self.context is not None: + yield _prefix_with_indent( + self.message, + console, + prefix=f"[{colour}]×[/] ", + indent=f"[{colour}]│[/] ", + ) + yield _prefix_with_indent( + self.context, + console, + prefix=f"[{colour}]╰─>[/] ", + indent=f"[{colour}] [/] ", + ) + else: + yield _prefix_with_indent( + self.message, + console, + prefix="[red]×[/] ", + indent=" ", + ) + else: + yield self.message + if self.context is not None: + yield "" + yield self.context + + if self.note_stmt is not None or self.hint_stmt is not None: + yield "" + + if self.note_stmt is not None: + yield _prefix_with_indent( + self.note_stmt, + console, + prefix="[magenta bold]note[/]: ", + indent=" ", + ) + if self.hint_stmt is not None: + yield _prefix_with_indent( + self.hint_stmt, + console, + prefix="[cyan bold]hint[/]: ", + indent=" ", + ) + + if self.link is not None: + yield "" + yield f"Link: {self.link}" + + +# +# Actual Errors +# +class ConfigurationError(PipError): + """General exception in configuration""" + + +class InstallationError(PipError): + """General exception during installation""" + + +class UninstallationError(PipError): + """General exception during uninstallation""" + + +class MissingPyProjectBuildRequires(DiagnosticPipError): + """Raised when pyproject.toml has `build-system`, but no `build-system.requires`.""" + + reference = "missing-pyproject-build-system-requires" + + def __init__(self, *, package: str) -> None: + super().__init__( + message=f"Can not process {escape(package)}", + context=Text( + "This package has an invalid pyproject.toml file.\n" + "The [build-system] table is missing the mandatory `requires` key." + ), + note_stmt="This is an issue with the package mentioned above, not pip.", + hint_stmt=Text("See PEP 518 for the detailed specification."), + ) + + +class InvalidPyProjectBuildRequires(DiagnosticPipError): + """Raised when pyproject.toml an invalid `build-system.requires`.""" + + reference = "invalid-pyproject-build-system-requires" + + def __init__(self, *, package: str, reason: str) -> None: + super().__init__( + message=f"Can not process {escape(package)}", + context=Text( + "This package has an invalid `build-system.requires` key in " + f"pyproject.toml.\n{reason}" + ), + note_stmt="This is an issue with the package mentioned above, not pip.", + hint_stmt=Text("See PEP 518 for the detailed specification."), + ) + + +class NoneMetadataError(PipError): + """Raised when accessing a Distribution's "METADATA" or "PKG-INFO". + + This signifies an inconsistency, when the Distribution claims to have + the metadata file (if not, raise ``FileNotFoundError`` instead), but is + not actually able to produce its content. This may be due to permission + errors. + """ + + def __init__( + self, + dist: "BaseDistribution", + metadata_name: str, + ) -> None: + """ + :param dist: A Distribution object. + :param metadata_name: The name of the metadata being accessed + (can be "METADATA" or "PKG-INFO"). + """ + self.dist = dist + self.metadata_name = metadata_name + + def __str__(self) -> str: + # Use `dist` in the error message because its stringification + # includes more information, like the version and location. + return f"None {self.metadata_name} metadata found for distribution: {self.dist}" + + +class UserInstallationInvalid(InstallationError): + """A --user install is requested on an environment without user site.""" + + def __str__(self) -> str: + return "User base directory is not specified" + + +class InvalidSchemeCombination(InstallationError): + def __str__(self) -> str: + before = ", ".join(str(a) for a in self.args[:-1]) + return f"Cannot set {before} and {self.args[-1]} together" + + +class DistributionNotFound(InstallationError): + """Raised when a distribution cannot be found to satisfy a requirement""" + + +class RequirementsFileParseError(InstallationError): + """Raised when a general error occurs parsing a requirements file line.""" + + +class BestVersionAlreadyInstalled(PipError): + """Raised when the most up-to-date version of a package is already + installed.""" + + +class BadCommand(PipError): + """Raised when virtualenv or a command is not found""" + + +class CommandError(PipError): + """Raised when there is an error in command-line arguments""" + + +class PreviousBuildDirError(PipError): + """Raised when there's a previous conflicting build directory""" + + +class NetworkConnectionError(PipError): + """HTTP connection error""" + + def __init__( + self, + error_msg: str, + response: Optional[Response] = None, + request: Optional[Request] = None, + ) -> None: + """ + Initialize NetworkConnectionError with `request` and `response` + objects. + """ + self.response = response + self.request = request + self.error_msg = error_msg + if ( + self.response is not None + and not self.request + and hasattr(response, "request") + ): + self.request = self.response.request + super().__init__(error_msg, response, request) + + def __str__(self) -> str: + return str(self.error_msg) + + +class InvalidWheelFilename(InstallationError): + """Invalid wheel filename.""" + + +class UnsupportedWheel(InstallationError): + """Unsupported wheel.""" + + +class InvalidWheel(InstallationError): + """Invalid (e.g. corrupt) wheel.""" + + def __init__(self, location: str, name: str): + self.location = location + self.name = name + + def __str__(self) -> str: + return f"Wheel '{self.name}' located at {self.location} is invalid." + + +class MetadataInconsistent(InstallationError): + """Built metadata contains inconsistent information. + + This is raised when the metadata contains values (e.g. name and version) + that do not match the information previously obtained from sdist filename, + user-supplied ``#egg=`` value, or an install requirement name. + """ + + def __init__( + self, ireq: "InstallRequirement", field: str, f_val: str, m_val: str + ) -> None: + self.ireq = ireq + self.field = field + self.f_val = f_val + self.m_val = m_val + + def __str__(self) -> str: + return ( + f"Requested {self.ireq} has inconsistent {self.field}: " + f"expected {self.f_val!r}, but metadata has {self.m_val!r}" + ) + + +class InstallationSubprocessError(DiagnosticPipError, InstallationError): + """A subprocess call failed.""" + + reference = "subprocess-exited-with-error" + + def __init__( + self, + *, + command_description: str, + exit_code: int, + output_lines: Optional[List[str]], + ) -> None: + if output_lines is None: + output_prompt = Text("See above for output.") + else: + output_prompt = ( + Text.from_markup(f"[red][{len(output_lines)} lines of output][/]\n") + + Text("".join(output_lines)) + + Text.from_markup(R"[red]\[end of output][/]") + ) + + super().__init__( + message=( + f"[green]{escape(command_description)}[/] did not run successfully.\n" + f"exit code: {exit_code}" + ), + context=output_prompt, + hint_stmt=None, + note_stmt=( + "This error originates from a subprocess, and is likely not a " + "problem with pip." + ), + ) + + self.command_description = command_description + self.exit_code = exit_code + + def __str__(self) -> str: + return f"{self.command_description} exited with {self.exit_code}" + + +class MetadataGenerationFailed(InstallationSubprocessError, InstallationError): + reference = "metadata-generation-failed" + + def __init__( + self, + *, + package_details: str, + ) -> None: + super(InstallationSubprocessError, self).__init__( + message="Encountered error while generating package metadata.", + context=escape(package_details), + hint_stmt="See above for details.", + note_stmt="This is an issue with the package mentioned above, not pip.", + ) + + def __str__(self) -> str: + return "metadata generation failed" + + +class HashErrors(InstallationError): + """Multiple HashError instances rolled into one for reporting""" + + def __init__(self) -> None: + self.errors: List["HashError"] = [] + + def append(self, error: "HashError") -> None: + self.errors.append(error) + + def __str__(self) -> str: + lines = [] + self.errors.sort(key=lambda e: e.order) + for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__): + lines.append(cls.head) + lines.extend(e.body() for e in errors_of_cls) + if lines: + return "\n".join(lines) + return "" + + def __bool__(self) -> bool: + return bool(self.errors) + + +class HashError(InstallationError): + """ + A failure to verify a package against known-good hashes + + :cvar order: An int sorting hash exception classes by difficulty of + recovery (lower being harder), so the user doesn't bother fretting + about unpinned packages when he has deeper issues, like VCS + dependencies, to deal with. Also keeps error reports in a + deterministic order. + :cvar head: A section heading for display above potentially many + exceptions of this kind + :ivar req: The InstallRequirement that triggered this error. This is + pasted on after the exception is instantiated, because it's not + typically available earlier. + + """ + + req: Optional["InstallRequirement"] = None + head = "" + order: int = -1 + + def body(self) -> str: + """Return a summary of me for display under the heading. + + This default implementation simply prints a description of the + triggering requirement. + + :param req: The InstallRequirement that provoked this error, with + its link already populated by the resolver's _populate_link(). + + """ + return f" {self._requirement_name()}" + + def __str__(self) -> str: + return f"{self.head}\n{self.body()}" + + def _requirement_name(self) -> str: + """Return a description of the requirement that triggered me. + + This default implementation returns long description of the req, with + line numbers + + """ + return str(self.req) if self.req else "unknown package" + + +class VcsHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 0 + head = ( + "Can't verify hashes for these requirements because we don't " + "have a way to hash version control repositories:" + ) + + +class DirectoryUrlHashUnsupported(HashError): + """A hash was provided for a version-control-system-based requirement, but + we don't have a method for hashing those.""" + + order = 1 + head = ( + "Can't verify hashes for these file:// requirements because they " + "point to directories:" + ) + + +class HashMissing(HashError): + """A hash was needed for a requirement but is absent.""" + + order = 2 + head = ( + "Hashes are required in --require-hashes mode, but they are " + "missing from some requirements. Here is a list of those " + "requirements along with the hashes their downloaded archives " + "actually had. Add lines like these to your requirements files to " + "prevent tampering. (If you did not enable --require-hashes " + "manually, note that it turns on automatically when any package " + "has a hash.)" + ) + + def __init__(self, gotten_hash: str) -> None: + """ + :param gotten_hash: The hash of the (possibly malicious) archive we + just downloaded + """ + self.gotten_hash = gotten_hash + + def body(self) -> str: + # Dodge circular import. + from pip._internal.utils.hashes import FAVORITE_HASH + + package = None + if self.req: + # In the case of URL-based requirements, display the original URL + # seen in the requirements file rather than the package name, + # so the output can be directly copied into the requirements file. + package = ( + self.req.original_link + if self.req.is_direct + # In case someone feeds something downright stupid + # to InstallRequirement's constructor. + else getattr(self.req, "req", None) + ) + return " {} --hash={}:{}".format( + package or "unknown package", FAVORITE_HASH, self.gotten_hash + ) + + +class HashUnpinned(HashError): + """A requirement had a hash specified but was not pinned to a specific + version.""" + + order = 3 + head = ( + "In --require-hashes mode, all requirements must have their " + "versions pinned with ==. These do not:" + ) + + +class HashMismatch(HashError): + """ + Distribution file hash values don't match. + + :ivar package_name: The name of the package that triggered the hash + mismatch. Feel free to write to this after the exception is raise to + improve its error message. + + """ + + order = 4 + head = ( + "THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS " + "FILE. If you have updated the package versions, please update " + "the hashes. Otherwise, examine the package contents carefully; " + "someone may have tampered with them." + ) + + def __init__(self, allowed: Dict[str, List[str]], gots: Dict[str, "_Hash"]) -> None: + """ + :param allowed: A dict of algorithm names pointing to lists of allowed + hex digests + :param gots: A dict of algorithm names pointing to hashes we + actually got from the files under suspicion + """ + self.allowed = allowed + self.gots = gots + + def body(self) -> str: + return f" {self._requirement_name()}:\n{self._hash_comparison()}" + + def _hash_comparison(self) -> str: + """ + Return a comparison of actual and expected hash values. + + Example:: + + Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde + or 123451234512345123451234512345123451234512345 + Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef + + """ + + def hash_then_or(hash_name: str) -> "chain[str]": + # For now, all the decent hashes have 6-char names, so we can get + # away with hard-coding space literals. + return chain([hash_name], repeat(" or")) + + lines: List[str] = [] + for hash_name, expecteds in self.allowed.items(): + prefix = hash_then_or(hash_name) + lines.extend((f" Expected {next(prefix)} {e}") for e in expecteds) + lines.append( + f" Got {self.gots[hash_name].hexdigest()}\n" + ) + return "\n".join(lines) + + +class UnsupportedPythonVersion(InstallationError): + """Unsupported python version according to Requires-Python package + metadata.""" + + +class ConfigurationFileCouldNotBeLoaded(ConfigurationError): + """When there are errors while loading a configuration file""" + + def __init__( + self, + reason: str = "could not be loaded", + fname: Optional[str] = None, + error: Optional[configparser.Error] = None, + ) -> None: + super().__init__(error) + self.reason = reason + self.fname = fname + self.error = error + + def __str__(self) -> str: + if self.fname is not None: + message_part = f" in {self.fname}." + else: + assert self.error is not None + message_part = f".\n{self.error}\n" + return f"Configuration file {self.reason}{message_part}" + + +_DEFAULT_EXTERNALLY_MANAGED_ERROR = f"""\ +The Python environment under {sys.prefix} is managed externally, and may not be +manipulated by the user. Please use specific tooling from the distributor of +the Python installation to interact with this environment instead. +""" + + +class ExternallyManagedEnvironment(DiagnosticPipError): + """The current environment is externally managed. + + This is raised when the current environment is externally managed, as + defined by `PEP 668`_. The ``EXTERNALLY-MANAGED`` configuration is checked + and displayed when the error is bubbled up to the user. + + :param error: The error message read from ``EXTERNALLY-MANAGED``. + """ + + reference = "externally-managed-environment" + + def __init__(self, error: Optional[str]) -> None: + if error is None: + context = Text(_DEFAULT_EXTERNALLY_MANAGED_ERROR) + else: + context = Text(error) + super().__init__( + message="This environment is externally managed", + context=context, + note_stmt=( + "If you believe this is a mistake, please contact your " + "Python installation or OS distribution provider. " + "You can override this, at the risk of breaking your Python " + "installation or OS, by passing --break-system-packages." + ), + hint_stmt=Text("See PEP 668 for the detailed specification."), + ) + + @staticmethod + def _iter_externally_managed_error_keys() -> Iterator[str]: + # LC_MESSAGES is in POSIX, but not the C standard. The most common + # platform that does not implement this category is Windows, where + # using other categories for console message localization is equally + # unreliable, so we fall back to the locale-less vendor message. This + # can always be re-evaluated when a vendor proposes a new alternative. + try: + category = locale.LC_MESSAGES + except AttributeError: + lang: Optional[str] = None + else: + lang, _ = locale.getlocale(category) + if lang is not None: + yield f"Error-{lang}" + for sep in ("-", "_"): + before, found, _ = lang.partition(sep) + if not found: + continue + yield f"Error-{before}" + yield "Error" + + @classmethod + def from_config( + cls, + config: Union[pathlib.Path, str], + ) -> "ExternallyManagedEnvironment": + parser = configparser.ConfigParser(interpolation=None) + try: + parser.read(config, encoding="utf-8") + section = parser["externally-managed"] + for key in cls._iter_externally_managed_error_keys(): + with contextlib.suppress(KeyError): + return cls(section[key]) + except KeyError: + pass + except (OSError, UnicodeDecodeError, configparser.ParsingError): + from pip._internal.utils._log import VERBOSE + + exc_info = logger.isEnabledFor(VERBOSE) + logger.warning("Failed to read %s", config, exc_info=exc_info) + return cls(None) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/index/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/index/__init__.py new file mode 100644 index 0000000..7a17b7b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/index/__init__.py @@ -0,0 +1,2 @@ +"""Index interaction code +""" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..fad08fc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc new file mode 100644 index 0000000..4b43159 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc new file mode 100644 index 0000000..757dbaa Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc new file mode 100644 index 0000000..90b0a07 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/index/collector.py b/venv/lib/python3.12/site-packages/pip/_internal/index/collector.py new file mode 100644 index 0000000..08c8bdd --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/index/collector.py @@ -0,0 +1,507 @@ +""" +The main purpose of this module is to expose LinkCollector.collect_sources(). +""" + +import collections +import email.message +import functools +import itertools +import json +import logging +import os +import urllib.parse +import urllib.request +from html.parser import HTMLParser +from optparse import Values +from typing import ( + TYPE_CHECKING, + Callable, + Dict, + Iterable, + List, + MutableMapping, + NamedTuple, + Optional, + Sequence, + Tuple, + Union, +) + +from pip._vendor import requests +from pip._vendor.requests import Response +from pip._vendor.requests.exceptions import RetryError, SSLError + +from pip._internal.exceptions import NetworkConnectionError +from pip._internal.models.link import Link +from pip._internal.models.search_scope import SearchScope +from pip._internal.network.session import PipSession +from pip._internal.network.utils import raise_for_status +from pip._internal.utils.filetypes import is_archive_file +from pip._internal.utils.misc import redact_auth_from_url +from pip._internal.vcs import vcs + +from .sources import CandidatesFromPage, LinkSource, build_source + +if TYPE_CHECKING: + from typing import Protocol +else: + Protocol = object + +logger = logging.getLogger(__name__) + +ResponseHeaders = MutableMapping[str, str] + + +def _match_vcs_scheme(url: str) -> Optional[str]: + """Look for VCS schemes in the URL. + + Returns the matched VCS scheme, or None if there's no match. + """ + for scheme in vcs.schemes: + if url.lower().startswith(scheme) and url[len(scheme)] in "+:": + return scheme + return None + + +class _NotAPIContent(Exception): + def __init__(self, content_type: str, request_desc: str) -> None: + super().__init__(content_type, request_desc) + self.content_type = content_type + self.request_desc = request_desc + + +def _ensure_api_header(response: Response) -> None: + """ + Check the Content-Type header to ensure the response contains a Simple + API Response. + + Raises `_NotAPIContent` if the content type is not a valid content-type. + """ + content_type = response.headers.get("Content-Type", "Unknown") + + content_type_l = content_type.lower() + if content_type_l.startswith( + ( + "text/html", + "application/vnd.pypi.simple.v1+html", + "application/vnd.pypi.simple.v1+json", + ) + ): + return + + raise _NotAPIContent(content_type, response.request.method) + + +class _NotHTTP(Exception): + pass + + +def _ensure_api_response(url: str, session: PipSession) -> None: + """ + Send a HEAD request to the URL, and ensure the response contains a simple + API Response. + + Raises `_NotHTTP` if the URL is not available for a HEAD request, or + `_NotAPIContent` if the content type is not a valid content type. + """ + scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url) + if scheme not in {"http", "https"}: + raise _NotHTTP() + + resp = session.head(url, allow_redirects=True) + raise_for_status(resp) + + _ensure_api_header(resp) + + +def _get_simple_response(url: str, session: PipSession) -> Response: + """Access an Simple API response with GET, and return the response. + + This consists of three parts: + + 1. If the URL looks suspiciously like an archive, send a HEAD first to + check the Content-Type is HTML or Simple API, to avoid downloading a + large file. Raise `_NotHTTP` if the content type cannot be determined, or + `_NotAPIContent` if it is not HTML or a Simple API. + 2. Actually perform the request. Raise HTTP exceptions on network failures. + 3. Check the Content-Type header to make sure we got a Simple API response, + and raise `_NotAPIContent` otherwise. + """ + if is_archive_file(Link(url).filename): + _ensure_api_response(url, session=session) + + logger.debug("Getting page %s", redact_auth_from_url(url)) + + resp = session.get( + url, + headers={ + "Accept": ", ".join( + [ + "application/vnd.pypi.simple.v1+json", + "application/vnd.pypi.simple.v1+html; q=0.1", + "text/html; q=0.01", + ] + ), + # We don't want to blindly returned cached data for + # /simple/, because authors generally expecting that + # twine upload && pip install will function, but if + # they've done a pip install in the last ~10 minutes + # it won't. Thus by setting this to zero we will not + # blindly use any cached data, however the benefit of + # using max-age=0 instead of no-cache, is that we will + # still support conditional requests, so we will still + # minimize traffic sent in cases where the page hasn't + # changed at all, we will just always incur the round + # trip for the conditional GET now instead of only + # once per 10 minutes. + # For more information, please see pypa/pip#5670. + "Cache-Control": "max-age=0", + }, + ) + raise_for_status(resp) + + # The check for archives above only works if the url ends with + # something that looks like an archive. However that is not a + # requirement of an url. Unless we issue a HEAD request on every + # url we cannot know ahead of time for sure if something is a + # Simple API response or not. However we can check after we've + # downloaded it. + _ensure_api_header(resp) + + logger.debug( + "Fetched page %s as %s", + redact_auth_from_url(url), + resp.headers.get("Content-Type", "Unknown"), + ) + + return resp + + +def _get_encoding_from_headers(headers: ResponseHeaders) -> Optional[str]: + """Determine if we have any encoding information in our headers.""" + if headers and "Content-Type" in headers: + m = email.message.Message() + m["content-type"] = headers["Content-Type"] + charset = m.get_param("charset") + if charset: + return str(charset) + return None + + +class CacheablePageContent: + def __init__(self, page: "IndexContent") -> None: + assert page.cache_link_parsing + self.page = page + + def __eq__(self, other: object) -> bool: + return isinstance(other, type(self)) and self.page.url == other.page.url + + def __hash__(self) -> int: + return hash(self.page.url) + + +class ParseLinks(Protocol): + def __call__(self, page: "IndexContent") -> Iterable[Link]: + ... + + +def with_cached_index_content(fn: ParseLinks) -> ParseLinks: + """ + Given a function that parses an Iterable[Link] from an IndexContent, cache the + function's result (keyed by CacheablePageContent), unless the IndexContent + `page` has `page.cache_link_parsing == False`. + """ + + @functools.lru_cache(maxsize=None) + def wrapper(cacheable_page: CacheablePageContent) -> List[Link]: + return list(fn(cacheable_page.page)) + + @functools.wraps(fn) + def wrapper_wrapper(page: "IndexContent") -> List[Link]: + if page.cache_link_parsing: + return wrapper(CacheablePageContent(page)) + return list(fn(page)) + + return wrapper_wrapper + + +@with_cached_index_content +def parse_links(page: "IndexContent") -> Iterable[Link]: + """ + Parse a Simple API's Index Content, and yield its anchor elements as Link objects. + """ + + content_type_l = page.content_type.lower() + if content_type_l.startswith("application/vnd.pypi.simple.v1+json"): + data = json.loads(page.content) + for file in data.get("files", []): + link = Link.from_json(file, page.url) + if link is None: + continue + yield link + return + + parser = HTMLLinkParser(page.url) + encoding = page.encoding or "utf-8" + parser.feed(page.content.decode(encoding)) + + url = page.url + base_url = parser.base_url or url + for anchor in parser.anchors: + link = Link.from_element(anchor, page_url=url, base_url=base_url) + if link is None: + continue + yield link + + +class IndexContent: + """Represents one response (or page), along with its URL""" + + def __init__( + self, + content: bytes, + content_type: str, + encoding: Optional[str], + url: str, + cache_link_parsing: bool = True, + ) -> None: + """ + :param encoding: the encoding to decode the given content. + :param url: the URL from which the HTML was downloaded. + :param cache_link_parsing: whether links parsed from this page's url + should be cached. PyPI index urls should + have this set to False, for example. + """ + self.content = content + self.content_type = content_type + self.encoding = encoding + self.url = url + self.cache_link_parsing = cache_link_parsing + + def __str__(self) -> str: + return redact_auth_from_url(self.url) + + +class HTMLLinkParser(HTMLParser): + """ + HTMLParser that keeps the first base HREF and a list of all anchor + elements' attributes. + """ + + def __init__(self, url: str) -> None: + super().__init__(convert_charrefs=True) + + self.url: str = url + self.base_url: Optional[str] = None + self.anchors: List[Dict[str, Optional[str]]] = [] + + def handle_starttag(self, tag: str, attrs: List[Tuple[str, Optional[str]]]) -> None: + if tag == "base" and self.base_url is None: + href = self.get_href(attrs) + if href is not None: + self.base_url = href + elif tag == "a": + self.anchors.append(dict(attrs)) + + def get_href(self, attrs: List[Tuple[str, Optional[str]]]) -> Optional[str]: + for name, value in attrs: + if name == "href": + return value + return None + + +def _handle_get_simple_fail( + link: Link, + reason: Union[str, Exception], + meth: Optional[Callable[..., None]] = None, +) -> None: + if meth is None: + meth = logger.debug + meth("Could not fetch URL %s: %s - skipping", link, reason) + + +def _make_index_content( + response: Response, cache_link_parsing: bool = True +) -> IndexContent: + encoding = _get_encoding_from_headers(response.headers) + return IndexContent( + response.content, + response.headers["Content-Type"], + encoding=encoding, + url=response.url, + cache_link_parsing=cache_link_parsing, + ) + + +def _get_index_content(link: Link, *, session: PipSession) -> Optional["IndexContent"]: + url = link.url.split("#", 1)[0] + + # Check for VCS schemes that do not support lookup as web pages. + vcs_scheme = _match_vcs_scheme(url) + if vcs_scheme: + logger.warning( + "Cannot look at %s URL %s because it does not support lookup as web pages.", + vcs_scheme, + link, + ) + return None + + # Tack index.html onto file:// URLs that point to directories + scheme, _, path, _, _, _ = urllib.parse.urlparse(url) + if scheme == "file" and os.path.isdir(urllib.request.url2pathname(path)): + # add trailing slash if not present so urljoin doesn't trim + # final segment + if not url.endswith("/"): + url += "/" + # TODO: In the future, it would be nice if pip supported PEP 691 + # style responses in the file:// URLs, however there's no + # standard file extension for application/vnd.pypi.simple.v1+json + # so we'll need to come up with something on our own. + url = urllib.parse.urljoin(url, "index.html") + logger.debug(" file: URL is directory, getting %s", url) + + try: + resp = _get_simple_response(url, session=session) + except _NotHTTP: + logger.warning( + "Skipping page %s because it looks like an archive, and cannot " + "be checked by a HTTP HEAD request.", + link, + ) + except _NotAPIContent as exc: + logger.warning( + "Skipping page %s because the %s request got Content-Type: %s. " + "The only supported Content-Types are application/vnd.pypi.simple.v1+json, " + "application/vnd.pypi.simple.v1+html, and text/html", + link, + exc.request_desc, + exc.content_type, + ) + except NetworkConnectionError as exc: + _handle_get_simple_fail(link, exc) + except RetryError as exc: + _handle_get_simple_fail(link, exc) + except SSLError as exc: + reason = "There was a problem confirming the ssl certificate: " + reason += str(exc) + _handle_get_simple_fail(link, reason, meth=logger.info) + except requests.ConnectionError as exc: + _handle_get_simple_fail(link, f"connection error: {exc}") + except requests.Timeout: + _handle_get_simple_fail(link, "timed out") + else: + return _make_index_content(resp, cache_link_parsing=link.cache_link_parsing) + return None + + +class CollectedSources(NamedTuple): + find_links: Sequence[Optional[LinkSource]] + index_urls: Sequence[Optional[LinkSource]] + + +class LinkCollector: + + """ + Responsible for collecting Link objects from all configured locations, + making network requests as needed. + + The class's main method is its collect_sources() method. + """ + + def __init__( + self, + session: PipSession, + search_scope: SearchScope, + ) -> None: + self.search_scope = search_scope + self.session = session + + @classmethod + def create( + cls, + session: PipSession, + options: Values, + suppress_no_index: bool = False, + ) -> "LinkCollector": + """ + :param session: The Session to use to make requests. + :param suppress_no_index: Whether to ignore the --no-index option + when constructing the SearchScope object. + """ + index_urls = [options.index_url] + options.extra_index_urls + if options.no_index and not suppress_no_index: + logger.debug( + "Ignoring indexes: %s", + ",".join(redact_auth_from_url(url) for url in index_urls), + ) + index_urls = [] + + # Make sure find_links is a list before passing to create(). + find_links = options.find_links or [] + + search_scope = SearchScope.create( + find_links=find_links, + index_urls=index_urls, + no_index=options.no_index, + ) + link_collector = LinkCollector( + session=session, + search_scope=search_scope, + ) + return link_collector + + @property + def find_links(self) -> List[str]: + return self.search_scope.find_links + + def fetch_response(self, location: Link) -> Optional[IndexContent]: + """ + Fetch an HTML page containing package links. + """ + return _get_index_content(location, session=self.session) + + def collect_sources( + self, + project_name: str, + candidates_from_page: CandidatesFromPage, + ) -> CollectedSources: + # The OrderedDict calls deduplicate sources by URL. + index_url_sources = collections.OrderedDict( + build_source( + loc, + candidates_from_page=candidates_from_page, + page_validator=self.session.is_secure_origin, + expand_dir=False, + cache_link_parsing=False, + project_name=project_name, + ) + for loc in self.search_scope.get_index_urls_locations(project_name) + ).values() + find_links_sources = collections.OrderedDict( + build_source( + loc, + candidates_from_page=candidates_from_page, + page_validator=self.session.is_secure_origin, + expand_dir=True, + cache_link_parsing=True, + project_name=project_name, + ) + for loc in self.find_links + ).values() + + if logger.isEnabledFor(logging.DEBUG): + lines = [ + f"* {s.link}" + for s in itertools.chain(find_links_sources, index_url_sources) + if s is not None and s.link is not None + ] + lines = [ + f"{len(lines)} location(s) to search " + f"for versions of {project_name}:" + ] + lines + logger.debug("\n".join(lines)) + + return CollectedSources( + find_links=list(find_links_sources), + index_urls=list(index_url_sources), + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/index/package_finder.py b/venv/lib/python3.12/site-packages/pip/_internal/index/package_finder.py new file mode 100644 index 0000000..ec9ebc3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/index/package_finder.py @@ -0,0 +1,1027 @@ +"""Routines related to PyPI, indexes""" + +import enum +import functools +import itertools +import logging +import re +from typing import TYPE_CHECKING, FrozenSet, Iterable, List, Optional, Set, Tuple, Union + +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.tags import Tag +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import _BaseVersion +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, + DistributionNotFound, + InvalidWheelFilename, + UnsupportedWheel, +) +from pip._internal.index.collector import LinkCollector, parse_links +from pip._internal.models.candidate import InstallationCandidate +from pip._internal.models.format_control import FormatControl +from pip._internal.models.link import Link +from pip._internal.models.search_scope import SearchScope +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.models.target_python import TargetPython +from pip._internal.models.wheel import Wheel +from pip._internal.req import InstallRequirement +from pip._internal.utils._log import getLogger +from pip._internal.utils.filetypes import WHEEL_EXTENSION +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import build_netloc +from pip._internal.utils.packaging import check_requires_python +from pip._internal.utils.unpacking import SUPPORTED_EXTENSIONS + +if TYPE_CHECKING: + from pip._vendor.typing_extensions import TypeGuard + +__all__ = ["FormatControl", "BestCandidateResult", "PackageFinder"] + + +logger = getLogger(__name__) + +BuildTag = Union[Tuple[()], Tuple[int, str]] +CandidateSortingKey = Tuple[int, int, int, _BaseVersion, Optional[int], BuildTag] + + +def _check_link_requires_python( + link: Link, + version_info: Tuple[int, int, int], + ignore_requires_python: bool = False, +) -> bool: + """ + Return whether the given Python version is compatible with a link's + "Requires-Python" value. + + :param version_info: A 3-tuple of ints representing the Python + major-minor-micro version to check. + :param ignore_requires_python: Whether to ignore the "Requires-Python" + value if the given Python version isn't compatible. + """ + try: + is_compatible = check_requires_python( + link.requires_python, + version_info=version_info, + ) + except specifiers.InvalidSpecifier: + logger.debug( + "Ignoring invalid Requires-Python (%r) for link: %s", + link.requires_python, + link, + ) + else: + if not is_compatible: + version = ".".join(map(str, version_info)) + if not ignore_requires_python: + logger.verbose( + "Link requires a different Python (%s not in: %r): %s", + version, + link.requires_python, + link, + ) + return False + + logger.debug( + "Ignoring failed Requires-Python check (%s not in: %r) for link: %s", + version, + link.requires_python, + link, + ) + + return True + + +class LinkType(enum.Enum): + candidate = enum.auto() + different_project = enum.auto() + yanked = enum.auto() + format_unsupported = enum.auto() + format_invalid = enum.auto() + platform_mismatch = enum.auto() + requires_python_mismatch = enum.auto() + + +class LinkEvaluator: + + """ + Responsible for evaluating links for a particular project. + """ + + _py_version_re = re.compile(r"-py([123]\.?[0-9]?)$") + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + def __init__( + self, + project_name: str, + canonical_name: str, + formats: FrozenSet[str], + target_python: TargetPython, + allow_yanked: bool, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """ + :param project_name: The user supplied package name. + :param canonical_name: The canonical package name. + :param formats: The formats allowed for this package. Should be a set + with 'binary' or 'source' or both in it. + :param target_python: The target Python interpreter to use when + evaluating link compatibility. This is used, for example, to + check wheel compatibility, as well as when checking the Python + version, e.g. the Python version embedded in a link filename + (or egg fragment) and against an HTML link's optional PEP 503 + "data-requires-python" attribute. + :param allow_yanked: Whether files marked as yanked (in the sense + of PEP 592) are permitted to be candidates for install. + :param ignore_requires_python: Whether to ignore incompatible + PEP 503 "data-requires-python" values in HTML links. Defaults + to False. + """ + if ignore_requires_python is None: + ignore_requires_python = False + + self._allow_yanked = allow_yanked + self._canonical_name = canonical_name + self._ignore_requires_python = ignore_requires_python + self._formats = formats + self._target_python = target_python + + self.project_name = project_name + + def evaluate_link(self, link: Link) -> Tuple[LinkType, str]: + """ + Determine whether a link is a candidate for installation. + + :return: A tuple (result, detail), where *result* is an enum + representing whether the evaluation found a candidate, or the reason + why one is not found. If a candidate is found, *detail* will be the + candidate's version string; if one is not found, it contains the + reason the link fails to qualify. + """ + version = None + if link.is_yanked and not self._allow_yanked: + reason = link.yanked_reason or "" + return (LinkType.yanked, f"yanked for reason: {reason}") + + if link.egg_fragment: + egg_info = link.egg_fragment + ext = link.ext + else: + egg_info, ext = link.splitext() + if not ext: + return (LinkType.format_unsupported, "not a file") + if ext not in SUPPORTED_EXTENSIONS: + return ( + LinkType.format_unsupported, + f"unsupported archive format: {ext}", + ) + if "binary" not in self._formats and ext == WHEEL_EXTENSION: + reason = f"No binaries permitted for {self.project_name}" + return (LinkType.format_unsupported, reason) + if "macosx10" in link.path and ext == ".zip": + return (LinkType.format_unsupported, "macosx10 one") + if ext == WHEEL_EXTENSION: + try: + wheel = Wheel(link.filename) + except InvalidWheelFilename: + return ( + LinkType.format_invalid, + "invalid wheel filename", + ) + if canonicalize_name(wheel.name) != self._canonical_name: + reason = f"wrong project name (not {self.project_name})" + return (LinkType.different_project, reason) + + supported_tags = self._target_python.get_unsorted_tags() + if not wheel.supported(supported_tags): + # Include the wheel's tags in the reason string to + # simplify troubleshooting compatibility issues. + file_tags = ", ".join(wheel.get_formatted_file_tags()) + reason = ( + f"none of the wheel's tags ({file_tags}) are compatible " + f"(run pip debug --verbose to show compatible tags)" + ) + return (LinkType.platform_mismatch, reason) + + version = wheel.version + + # This should be up by the self.ok_binary check, but see issue 2700. + if "source" not in self._formats and ext != WHEEL_EXTENSION: + reason = f"No sources permitted for {self.project_name}" + return (LinkType.format_unsupported, reason) + + if not version: + version = _extract_version_from_fragment( + egg_info, + self._canonical_name, + ) + if not version: + reason = f"Missing project version for {self.project_name}" + return (LinkType.format_invalid, reason) + + match = self._py_version_re.search(version) + if match: + version = version[: match.start()] + py_version = match.group(1) + if py_version != self._target_python.py_version: + return ( + LinkType.platform_mismatch, + "Python version is incorrect", + ) + + supports_python = _check_link_requires_python( + link, + version_info=self._target_python.py_version_info, + ignore_requires_python=self._ignore_requires_python, + ) + if not supports_python: + reason = f"{version} Requires-Python {link.requires_python}" + return (LinkType.requires_python_mismatch, reason) + + logger.debug("Found link %s, version: %s", link, version) + + return (LinkType.candidate, version) + + +def filter_unallowed_hashes( + candidates: List[InstallationCandidate], + hashes: Optional[Hashes], + project_name: str, +) -> List[InstallationCandidate]: + """ + Filter out candidates whose hashes aren't allowed, and return a new + list of candidates. + + If at least one candidate has an allowed hash, then all candidates with + either an allowed hash or no hash specified are returned. Otherwise, + the given candidates are returned. + + Including the candidates with no hash specified when there is a match + allows a warning to be logged if there is a more preferred candidate + with no hash specified. Returning all candidates in the case of no + matches lets pip report the hash of the candidate that would otherwise + have been installed (e.g. permitting the user to more easily update + their requirements file with the desired hash). + """ + if not hashes: + logger.debug( + "Given no hashes to check %s links for project %r: " + "discarding no candidates", + len(candidates), + project_name, + ) + # Make sure we're not returning back the given value. + return list(candidates) + + matches_or_no_digest = [] + # Collect the non-matches for logging purposes. + non_matches = [] + match_count = 0 + for candidate in candidates: + link = candidate.link + if not link.has_hash: + pass + elif link.is_hash_allowed(hashes=hashes): + match_count += 1 + else: + non_matches.append(candidate) + continue + + matches_or_no_digest.append(candidate) + + if match_count: + filtered = matches_or_no_digest + else: + # Make sure we're not returning back the given value. + filtered = list(candidates) + + if len(filtered) == len(candidates): + discard_message = "discarding no candidates" + else: + discard_message = "discarding {} non-matches:\n {}".format( + len(non_matches), + "\n ".join(str(candidate.link) for candidate in non_matches), + ) + + logger.debug( + "Checked %s links for project %r against %s hashes " + "(%s matches, %s no digest): %s", + len(candidates), + project_name, + hashes.digest_count, + match_count, + len(matches_or_no_digest) - match_count, + discard_message, + ) + + return filtered + + +class CandidatePreferences: + + """ + Encapsulates some of the preferences for filtering and sorting + InstallationCandidate objects. + """ + + def __init__( + self, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + ) -> None: + """ + :param allow_all_prereleases: Whether to allow all pre-releases. + """ + self.allow_all_prereleases = allow_all_prereleases + self.prefer_binary = prefer_binary + + +class BestCandidateResult: + """A collection of candidates, returned by `PackageFinder.find_best_candidate`. + + This class is only intended to be instantiated by CandidateEvaluator's + `compute_best_candidate()` method. + """ + + def __init__( + self, + candidates: List[InstallationCandidate], + applicable_candidates: List[InstallationCandidate], + best_candidate: Optional[InstallationCandidate], + ) -> None: + """ + :param candidates: A sequence of all available candidates found. + :param applicable_candidates: The applicable candidates. + :param best_candidate: The most preferred candidate found, or None + if no applicable candidates were found. + """ + assert set(applicable_candidates) <= set(candidates) + + if best_candidate is None: + assert not applicable_candidates + else: + assert best_candidate in applicable_candidates + + self._applicable_candidates = applicable_candidates + self._candidates = candidates + + self.best_candidate = best_candidate + + def iter_all(self) -> Iterable[InstallationCandidate]: + """Iterate through all candidates.""" + return iter(self._candidates) + + def iter_applicable(self) -> Iterable[InstallationCandidate]: + """Iterate through the applicable candidates.""" + return iter(self._applicable_candidates) + + +class CandidateEvaluator: + + """ + Responsible for filtering and sorting candidates for installation based + on what tags are valid. + """ + + @classmethod + def create( + cls, + project_name: str, + target_python: Optional[TargetPython] = None, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> "CandidateEvaluator": + """Create a CandidateEvaluator object. + + :param target_python: The target Python interpreter to use when + checking compatibility. If None (the default), a TargetPython + object will be constructed from the running Python. + :param specifier: An optional object implementing `filter` + (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable + versions. + :param hashes: An optional collection of allowed hashes. + """ + if target_python is None: + target_python = TargetPython() + if specifier is None: + specifier = specifiers.SpecifierSet() + + supported_tags = target_python.get_sorted_tags() + + return cls( + project_name=project_name, + supported_tags=supported_tags, + specifier=specifier, + prefer_binary=prefer_binary, + allow_all_prereleases=allow_all_prereleases, + hashes=hashes, + ) + + def __init__( + self, + project_name: str, + supported_tags: List[Tag], + specifier: specifiers.BaseSpecifier, + prefer_binary: bool = False, + allow_all_prereleases: bool = False, + hashes: Optional[Hashes] = None, + ) -> None: + """ + :param supported_tags: The PEP 425 tags supported by the target + Python in order of preference (most preferred first). + """ + self._allow_all_prereleases = allow_all_prereleases + self._hashes = hashes + self._prefer_binary = prefer_binary + self._project_name = project_name + self._specifier = specifier + self._supported_tags = supported_tags + # Since the index of the tag in the _supported_tags list is used + # as a priority, precompute a map from tag to index/priority to be + # used in wheel.find_most_preferred_tag. + self._wheel_tag_preferences = { + tag: idx for idx, tag in enumerate(supported_tags) + } + + def get_applicable_candidates( + self, + candidates: List[InstallationCandidate], + ) -> List[InstallationCandidate]: + """ + Return the applicable candidates from a list of candidates. + """ + # Using None infers from the specifier instead. + allow_prereleases = self._allow_all_prereleases or None + specifier = self._specifier + versions = { + str(v) + for v in specifier.filter( + # We turn the version object into a str here because otherwise + # when we're debundled but setuptools isn't, Python will see + # packaging.version.Version and + # pkg_resources._vendor.packaging.version.Version as different + # types. This way we'll use a str as a common data interchange + # format. If we stop using the pkg_resources provided specifier + # and start using our own, we can drop the cast to str(). + (str(c.version) for c in candidates), + prereleases=allow_prereleases, + ) + } + + # Again, converting version to str to deal with debundling. + applicable_candidates = [c for c in candidates if str(c.version) in versions] + + filtered_applicable_candidates = filter_unallowed_hashes( + candidates=applicable_candidates, + hashes=self._hashes, + project_name=self._project_name, + ) + + return sorted(filtered_applicable_candidates, key=self._sort_key) + + def _sort_key(self, candidate: InstallationCandidate) -> CandidateSortingKey: + """ + Function to pass as the `key` argument to a call to sorted() to sort + InstallationCandidates by preference. + + Returns a tuple such that tuples sorting as greater using Python's + default comparison operator are more preferred. + + The preference is as follows: + + First and foremost, candidates with allowed (matching) hashes are + always preferred over candidates without matching hashes. This is + because e.g. if the only candidate with an allowed hash is yanked, + we still want to use that candidate. + + Second, excepting hash considerations, candidates that have been + yanked (in the sense of PEP 592) are always less preferred than + candidates that haven't been yanked. Then: + + If not finding wheels, they are sorted by version only. + If finding wheels, then the sort order is by version, then: + 1. existing installs + 2. wheels ordered via Wheel.support_index_min(self._supported_tags) + 3. source archives + If prefer_binary was set, then all wheels are sorted above sources. + + Note: it was considered to embed this logic into the Link + comparison operators, but then different sdist links + with the same version, would have to be considered equal + """ + valid_tags = self._supported_tags + support_num = len(valid_tags) + build_tag: BuildTag = () + binary_preference = 0 + link = candidate.link + if link.is_wheel: + # can raise InvalidWheelFilename + wheel = Wheel(link.filename) + try: + pri = -( + wheel.find_most_preferred_tag( + valid_tags, self._wheel_tag_preferences + ) + ) + except ValueError: + raise UnsupportedWheel( + f"{wheel.filename} is not a supported wheel for this platform. It " + "can't be sorted." + ) + if self._prefer_binary: + binary_preference = 1 + if wheel.build_tag is not None: + match = re.match(r"^(\d+)(.*)$", wheel.build_tag) + assert match is not None, "guaranteed by filename validation" + build_tag_groups = match.groups() + build_tag = (int(build_tag_groups[0]), build_tag_groups[1]) + else: # sdist + pri = -(support_num) + has_allowed_hash = int(link.is_hash_allowed(self._hashes)) + yank_value = -1 * int(link.is_yanked) # -1 for yanked. + return ( + has_allowed_hash, + yank_value, + binary_preference, + candidate.version, + pri, + build_tag, + ) + + def sort_best_candidate( + self, + candidates: List[InstallationCandidate], + ) -> Optional[InstallationCandidate]: + """ + Return the best candidate per the instance's sort order, or None if + no candidate is acceptable. + """ + if not candidates: + return None + best_candidate = max(candidates, key=self._sort_key) + return best_candidate + + def compute_best_candidate( + self, + candidates: List[InstallationCandidate], + ) -> BestCandidateResult: + """ + Compute and return a `BestCandidateResult` instance. + """ + applicable_candidates = self.get_applicable_candidates(candidates) + + best_candidate = self.sort_best_candidate(applicable_candidates) + + return BestCandidateResult( + candidates, + applicable_candidates=applicable_candidates, + best_candidate=best_candidate, + ) + + +class PackageFinder: + """This finds packages. + + This is meant to match easy_install's technique for looking for + packages, by reading pages and looking for appropriate links. + """ + + def __init__( + self, + link_collector: LinkCollector, + target_python: TargetPython, + allow_yanked: bool, + format_control: Optional[FormatControl] = None, + candidate_prefs: Optional[CandidatePreferences] = None, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """ + This constructor is primarily meant to be used by the create() class + method and from tests. + + :param format_control: A FormatControl object, used to control + the selection of source packages / binary packages when consulting + the index and links. + :param candidate_prefs: Options to use when creating a + CandidateEvaluator object. + """ + if candidate_prefs is None: + candidate_prefs = CandidatePreferences() + + format_control = format_control or FormatControl(set(), set()) + + self._allow_yanked = allow_yanked + self._candidate_prefs = candidate_prefs + self._ignore_requires_python = ignore_requires_python + self._link_collector = link_collector + self._target_python = target_python + + self.format_control = format_control + + # These are boring links that have already been logged somehow. + self._logged_links: Set[Tuple[Link, LinkType, str]] = set() + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + @classmethod + def create( + cls, + link_collector: LinkCollector, + selection_prefs: SelectionPreferences, + target_python: Optional[TargetPython] = None, + ) -> "PackageFinder": + """Create a PackageFinder. + + :param selection_prefs: The candidate selection preferences, as a + SelectionPreferences object. + :param target_python: The target Python interpreter to use when + checking compatibility. If None (the default), a TargetPython + object will be constructed from the running Python. + """ + if target_python is None: + target_python = TargetPython() + + candidate_prefs = CandidatePreferences( + prefer_binary=selection_prefs.prefer_binary, + allow_all_prereleases=selection_prefs.allow_all_prereleases, + ) + + return cls( + candidate_prefs=candidate_prefs, + link_collector=link_collector, + target_python=target_python, + allow_yanked=selection_prefs.allow_yanked, + format_control=selection_prefs.format_control, + ignore_requires_python=selection_prefs.ignore_requires_python, + ) + + @property + def target_python(self) -> TargetPython: + return self._target_python + + @property + def search_scope(self) -> SearchScope: + return self._link_collector.search_scope + + @search_scope.setter + def search_scope(self, search_scope: SearchScope) -> None: + self._link_collector.search_scope = search_scope + + @property + def find_links(self) -> List[str]: + return self._link_collector.find_links + + @property + def index_urls(self) -> List[str]: + return self.search_scope.index_urls + + @property + def trusted_hosts(self) -> Iterable[str]: + for host_port in self._link_collector.session.pip_trusted_origins: + yield build_netloc(*host_port) + + @property + def allow_all_prereleases(self) -> bool: + return self._candidate_prefs.allow_all_prereleases + + def set_allow_all_prereleases(self) -> None: + self._candidate_prefs.allow_all_prereleases = True + + @property + def prefer_binary(self) -> bool: + return self._candidate_prefs.prefer_binary + + def set_prefer_binary(self) -> None: + self._candidate_prefs.prefer_binary = True + + def requires_python_skipped_reasons(self) -> List[str]: + reasons = { + detail + for _, result, detail in self._logged_links + if result == LinkType.requires_python_mismatch + } + return sorted(reasons) + + def make_link_evaluator(self, project_name: str) -> LinkEvaluator: + canonical_name = canonicalize_name(project_name) + formats = self.format_control.get_allowed_formats(canonical_name) + + return LinkEvaluator( + project_name=project_name, + canonical_name=canonical_name, + formats=formats, + target_python=self._target_python, + allow_yanked=self._allow_yanked, + ignore_requires_python=self._ignore_requires_python, + ) + + def _sort_links(self, links: Iterable[Link]) -> List[Link]: + """ + Returns elements of links in order, non-egg links first, egg links + second, while eliminating duplicates + """ + eggs, no_eggs = [], [] + seen: Set[Link] = set() + for link in links: + if link not in seen: + seen.add(link) + if link.egg_fragment: + eggs.append(link) + else: + no_eggs.append(link) + return no_eggs + eggs + + def _log_skipped_link(self, link: Link, result: LinkType, detail: str) -> None: + entry = (link, result, detail) + if entry not in self._logged_links: + # Put the link at the end so the reason is more visible and because + # the link string is usually very long. + logger.debug("Skipping link: %s: %s", detail, link) + self._logged_links.add(entry) + + def get_install_candidate( + self, link_evaluator: LinkEvaluator, link: Link + ) -> Optional[InstallationCandidate]: + """ + If the link is a candidate for install, convert it to an + InstallationCandidate and return it. Otherwise, return None. + """ + result, detail = link_evaluator.evaluate_link(link) + if result != LinkType.candidate: + self._log_skipped_link(link, result, detail) + return None + + return InstallationCandidate( + name=link_evaluator.project_name, + link=link, + version=detail, + ) + + def evaluate_links( + self, link_evaluator: LinkEvaluator, links: Iterable[Link] + ) -> List[InstallationCandidate]: + """ + Convert links that are candidates to InstallationCandidate objects. + """ + candidates = [] + for link in self._sort_links(links): + candidate = self.get_install_candidate(link_evaluator, link) + if candidate is not None: + candidates.append(candidate) + + return candidates + + def process_project_url( + self, project_url: Link, link_evaluator: LinkEvaluator + ) -> List[InstallationCandidate]: + logger.debug( + "Fetching project page and analyzing links: %s", + project_url, + ) + index_response = self._link_collector.fetch_response(project_url) + if index_response is None: + return [] + + page_links = list(parse_links(index_response)) + + with indent_log(): + package_links = self.evaluate_links( + link_evaluator, + links=page_links, + ) + + return package_links + + @functools.lru_cache(maxsize=None) + def find_all_candidates(self, project_name: str) -> List[InstallationCandidate]: + """Find all available InstallationCandidate for project_name + + This checks index_urls and find_links. + All versions found are returned as an InstallationCandidate list. + + See LinkEvaluator.evaluate_link() for details on which files + are accepted. + """ + link_evaluator = self.make_link_evaluator(project_name) + + collected_sources = self._link_collector.collect_sources( + project_name=project_name, + candidates_from_page=functools.partial( + self.process_project_url, + link_evaluator=link_evaluator, + ), + ) + + page_candidates_it = itertools.chain.from_iterable( + source.page_candidates() + for sources in collected_sources + for source in sources + if source is not None + ) + page_candidates = list(page_candidates_it) + + file_links_it = itertools.chain.from_iterable( + source.file_links() + for sources in collected_sources + for source in sources + if source is not None + ) + file_candidates = self.evaluate_links( + link_evaluator, + sorted(file_links_it, reverse=True), + ) + + if logger.isEnabledFor(logging.DEBUG) and file_candidates: + paths = [] + for candidate in file_candidates: + assert candidate.link.url # we need to have a URL + try: + paths.append(candidate.link.file_path) + except Exception: + paths.append(candidate.link.url) # it's not a local file + + logger.debug("Local files found: %s", ", ".join(paths)) + + # This is an intentional priority ordering + return file_candidates + page_candidates + + def make_candidate_evaluator( + self, + project_name: str, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> CandidateEvaluator: + """Create a CandidateEvaluator object to use.""" + candidate_prefs = self._candidate_prefs + return CandidateEvaluator.create( + project_name=project_name, + target_python=self._target_python, + prefer_binary=candidate_prefs.prefer_binary, + allow_all_prereleases=candidate_prefs.allow_all_prereleases, + specifier=specifier, + hashes=hashes, + ) + + @functools.lru_cache(maxsize=None) + def find_best_candidate( + self, + project_name: str, + specifier: Optional[specifiers.BaseSpecifier] = None, + hashes: Optional[Hashes] = None, + ) -> BestCandidateResult: + """Find matches for the given project and specifier. + + :param specifier: An optional object implementing `filter` + (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable + versions. + + :return: A `BestCandidateResult` instance. + """ + candidates = self.find_all_candidates(project_name) + candidate_evaluator = self.make_candidate_evaluator( + project_name=project_name, + specifier=specifier, + hashes=hashes, + ) + return candidate_evaluator.compute_best_candidate(candidates) + + def find_requirement( + self, req: InstallRequirement, upgrade: bool + ) -> Optional[InstallationCandidate]: + """Try to find a Link matching req + + Expects req, an InstallRequirement and upgrade, a boolean + Returns a InstallationCandidate if found, + Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise + """ + hashes = req.hashes(trust_internet=False) + best_candidate_result = self.find_best_candidate( + req.name, + specifier=req.specifier, + hashes=hashes, + ) + best_candidate = best_candidate_result.best_candidate + + installed_version: Optional[_BaseVersion] = None + if req.satisfied_by is not None: + installed_version = req.satisfied_by.version + + def _format_versions(cand_iter: Iterable[InstallationCandidate]) -> str: + # This repeated parse_version and str() conversion is needed to + # handle different vendoring sources from pip and pkg_resources. + # If we stop using the pkg_resources provided specifier and start + # using our own, we can drop the cast to str(). + return ( + ", ".join( + sorted( + {str(c.version) for c in cand_iter}, + key=parse_version, + ) + ) + or "none" + ) + + if installed_version is None and best_candidate is None: + logger.critical( + "Could not find a version that satisfies the requirement %s " + "(from versions: %s)", + req, + _format_versions(best_candidate_result.iter_all()), + ) + + raise DistributionNotFound(f"No matching distribution found for {req}") + + def _should_install_candidate( + candidate: Optional[InstallationCandidate], + ) -> "TypeGuard[InstallationCandidate]": + if installed_version is None: + return True + if best_candidate is None: + return False + return best_candidate.version > installed_version + + if not upgrade and installed_version is not None: + if _should_install_candidate(best_candidate): + logger.debug( + "Existing installed version (%s) satisfies requirement " + "(most up-to-date version is %s)", + installed_version, + best_candidate.version, + ) + else: + logger.debug( + "Existing installed version (%s) is most up-to-date and " + "satisfies requirement", + installed_version, + ) + return None + + if _should_install_candidate(best_candidate): + logger.debug( + "Using version %s (newest of versions: %s)", + best_candidate.version, + _format_versions(best_candidate_result.iter_applicable()), + ) + return best_candidate + + # We have an existing version, and its the best version + logger.debug( + "Installed version (%s) is most up-to-date (past versions: %s)", + installed_version, + _format_versions(best_candidate_result.iter_applicable()), + ) + raise BestVersionAlreadyInstalled + + +def _find_name_version_sep(fragment: str, canonical_name: str) -> int: + """Find the separator's index based on the package's canonical name. + + :param fragment: A + filename "fragment" (stem) or + egg fragment. + :param canonical_name: The package's canonical name. + + This function is needed since the canonicalized name does not necessarily + have the same length as the egg info's name part. An example:: + + >>> fragment = 'foo__bar-1.0' + >>> canonical_name = 'foo-bar' + >>> _find_name_version_sep(fragment, canonical_name) + 8 + """ + # Project name and version must be separated by one single dash. Find all + # occurrences of dashes; if the string in front of it matches the canonical + # name, this is the one separating the name and version parts. + for i, c in enumerate(fragment): + if c != "-": + continue + if canonicalize_name(fragment[:i]) == canonical_name: + return i + raise ValueError(f"{fragment} does not match {canonical_name}") + + +def _extract_version_from_fragment(fragment: str, canonical_name: str) -> Optional[str]: + """Parse the version string from a + filename + "fragment" (stem) or egg fragment. + + :param fragment: The string to parse. E.g. foo-2.1 + :param canonical_name: The canonicalized name of the package this + belongs to. + """ + try: + version_start = _find_name_version_sep(fragment, canonical_name) + 1 + except ValueError: + return None + version = fragment[version_start:] + if not version: + return None + return version diff --git a/venv/lib/python3.12/site-packages/pip/_internal/index/sources.py b/venv/lib/python3.12/site-packages/pip/_internal/index/sources.py new file mode 100644 index 0000000..f4626d7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/index/sources.py @@ -0,0 +1,285 @@ +import logging +import mimetypes +import os +from collections import defaultdict +from typing import Callable, Dict, Iterable, List, Optional, Tuple + +from pip._vendor.packaging.utils import ( + InvalidSdistFilename, + InvalidVersion, + InvalidWheelFilename, + canonicalize_name, + parse_sdist_filename, + parse_wheel_filename, +) + +from pip._internal.models.candidate import InstallationCandidate +from pip._internal.models.link import Link +from pip._internal.utils.urls import path_to_url, url_to_path +from pip._internal.vcs import is_url + +logger = logging.getLogger(__name__) + +FoundCandidates = Iterable[InstallationCandidate] +FoundLinks = Iterable[Link] +CandidatesFromPage = Callable[[Link], Iterable[InstallationCandidate]] +PageValidator = Callable[[Link], bool] + + +class LinkSource: + @property + def link(self) -> Optional[Link]: + """Returns the underlying link, if there's one.""" + raise NotImplementedError() + + def page_candidates(self) -> FoundCandidates: + """Candidates found by parsing an archive listing HTML file.""" + raise NotImplementedError() + + def file_links(self) -> FoundLinks: + """Links found by specifying archives directly.""" + raise NotImplementedError() + + +def _is_html_file(file_url: str) -> bool: + return mimetypes.guess_type(file_url, strict=False)[0] == "text/html" + + +class _FlatDirectoryToUrls: + """Scans directory and caches results""" + + def __init__(self, path: str) -> None: + self._path = path + self._page_candidates: List[str] = [] + self._project_name_to_urls: Dict[str, List[str]] = defaultdict(list) + self._scanned_directory = False + + def _scan_directory(self) -> None: + """Scans directory once and populates both page_candidates + and project_name_to_urls at the same time + """ + for entry in os.scandir(self._path): + url = path_to_url(entry.path) + if _is_html_file(url): + self._page_candidates.append(url) + continue + + # File must have a valid wheel or sdist name, + # otherwise not worth considering as a package + try: + project_filename = parse_wheel_filename(entry.name)[0] + except (InvalidWheelFilename, InvalidVersion): + try: + project_filename = parse_sdist_filename(entry.name)[0] + except (InvalidSdistFilename, InvalidVersion): + continue + + self._project_name_to_urls[project_filename].append(url) + self._scanned_directory = True + + @property + def page_candidates(self) -> List[str]: + if not self._scanned_directory: + self._scan_directory() + + return self._page_candidates + + @property + def project_name_to_urls(self) -> Dict[str, List[str]]: + if not self._scanned_directory: + self._scan_directory() + + return self._project_name_to_urls + + +class _FlatDirectorySource(LinkSource): + """Link source specified by ``--find-links=``. + + This looks the content of the directory, and returns: + + * ``page_candidates``: Links listed on each HTML file in the directory. + * ``file_candidates``: Archives in the directory. + """ + + _paths_to_urls: Dict[str, _FlatDirectoryToUrls] = {} + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + path: str, + project_name: str, + ) -> None: + self._candidates_from_page = candidates_from_page + self._project_name = canonicalize_name(project_name) + + # Get existing instance of _FlatDirectoryToUrls if it exists + if path in self._paths_to_urls: + self._path_to_urls = self._paths_to_urls[path] + else: + self._path_to_urls = _FlatDirectoryToUrls(path=path) + self._paths_to_urls[path] = self._path_to_urls + + @property + def link(self) -> Optional[Link]: + return None + + def page_candidates(self) -> FoundCandidates: + for url in self._path_to_urls.page_candidates: + yield from self._candidates_from_page(Link(url)) + + def file_links(self) -> FoundLinks: + for url in self._path_to_urls.project_name_to_urls[self._project_name]: + yield Link(url) + + +class _LocalFileSource(LinkSource): + """``--find-links=`` or ``--[extra-]index-url=``. + + If a URL is supplied, it must be a ``file:`` URL. If a path is supplied to + the option, it is converted to a URL first. This returns: + + * ``page_candidates``: Links listed on an HTML file. + * ``file_candidates``: The non-HTML file. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + if not _is_html_file(self._link.url): + return + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + if _is_html_file(self._link.url): + return + yield self._link + + +class _RemoteFileSource(LinkSource): + """``--find-links=`` or ``--[extra-]index-url=``. + + This returns: + + * ``page_candidates``: Links listed on an HTML file. + * ``file_candidates``: The non-HTML file. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + page_validator: PageValidator, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._page_validator = page_validator + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + if not self._page_validator(self._link): + return + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + yield self._link + + +class _IndexDirectorySource(LinkSource): + """``--[extra-]index-url=``. + + This is treated like a remote URL; ``candidates_from_page`` contains logic + for this by appending ``index.html`` to the link. + """ + + def __init__( + self, + candidates_from_page: CandidatesFromPage, + link: Link, + ) -> None: + self._candidates_from_page = candidates_from_page + self._link = link + + @property + def link(self) -> Optional[Link]: + return self._link + + def page_candidates(self) -> FoundCandidates: + yield from self._candidates_from_page(self._link) + + def file_links(self) -> FoundLinks: + return () + + +def build_source( + location: str, + *, + candidates_from_page: CandidatesFromPage, + page_validator: PageValidator, + expand_dir: bool, + cache_link_parsing: bool, + project_name: str, +) -> Tuple[Optional[str], Optional[LinkSource]]: + path: Optional[str] = None + url: Optional[str] = None + if os.path.exists(location): # Is a local path. + url = path_to_url(location) + path = location + elif location.startswith("file:"): # A file: URL. + url = location + path = url_to_path(location) + elif is_url(location): + url = location + + if url is None: + msg = ( + "Location '%s' is ignored: " + "it is either a non-existing path or lacks a specific scheme." + ) + logger.warning(msg, location) + return (None, None) + + if path is None: + source: LinkSource = _RemoteFileSource( + candidates_from_page=candidates_from_page, + page_validator=page_validator, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + + if os.path.isdir(path): + if expand_dir: + source = _FlatDirectorySource( + candidates_from_page=candidates_from_page, + path=path, + project_name=project_name, + ) + else: + source = _IndexDirectorySource( + candidates_from_page=candidates_from_page, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + elif os.path.isfile(path): + source = _LocalFileSource( + candidates_from_page=candidates_from_page, + link=Link(url, cache_link_parsing=cache_link_parsing), + ) + return (url, source) + logger.warning( + "Location '%s' is ignored: it is neither a file nor a directory.", + location, + ) + return (url, None) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py new file mode 100644 index 0000000..d54bc63 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py @@ -0,0 +1,467 @@ +import functools +import logging +import os +import pathlib +import sys +import sysconfig +from typing import Any, Dict, Generator, Optional, Tuple + +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.virtualenv import running_under_virtualenv + +from . import _sysconfig +from .base import ( + USER_CACHE_DIR, + get_major_minor_version, + get_src_prefix, + is_osx_framework, + site_packages, + user_site, +) + +__all__ = [ + "USER_CACHE_DIR", + "get_bin_prefix", + "get_bin_user", + "get_major_minor_version", + "get_platlib", + "get_purelib", + "get_scheme", + "get_src_prefix", + "site_packages", + "user_site", +] + + +logger = logging.getLogger(__name__) + + +_PLATLIBDIR: str = getattr(sys, "platlibdir", "lib") + +_USE_SYSCONFIG_DEFAULT = sys.version_info >= (3, 10) + + +def _should_use_sysconfig() -> bool: + """This function determines the value of _USE_SYSCONFIG. + + By default, pip uses sysconfig on Python 3.10+. + But Python distributors can override this decision by setting: + sysconfig._PIP_USE_SYSCONFIG = True / False + Rationale in https://github.com/pypa/pip/issues/10647 + + This is a function for testability, but should be constant during any one + run. + """ + return bool(getattr(sysconfig, "_PIP_USE_SYSCONFIG", _USE_SYSCONFIG_DEFAULT)) + + +_USE_SYSCONFIG = _should_use_sysconfig() + +if not _USE_SYSCONFIG: + # Import distutils lazily to avoid deprecation warnings, + # but import it soon enough that it is in memory and available during + # a pip reinstall. + from . import _distutils + +# Be noisy about incompatibilities if this platforms "should" be using +# sysconfig, but is explicitly opting out and using distutils instead. +if _USE_SYSCONFIG_DEFAULT and not _USE_SYSCONFIG: + _MISMATCH_LEVEL = logging.WARNING +else: + _MISMATCH_LEVEL = logging.DEBUG + + +def _looks_like_bpo_44860() -> bool: + """The resolution to bpo-44860 will change this incorrect platlib. + + See . + """ + from distutils.command.install import INSTALL_SCHEMES + + try: + unix_user_platlib = INSTALL_SCHEMES["unix_user"]["platlib"] + except KeyError: + return False + return unix_user_platlib == "$usersite" + + +def _looks_like_red_hat_patched_platlib_purelib(scheme: Dict[str, str]) -> bool: + platlib = scheme["platlib"] + if "/$platlibdir/" in platlib: + platlib = platlib.replace("/$platlibdir/", f"/{_PLATLIBDIR}/") + if "/lib64/" not in platlib: + return False + unpatched = platlib.replace("/lib64/", "/lib/") + return unpatched.replace("$platbase/", "$base/") == scheme["purelib"] + + +@functools.lru_cache(maxsize=None) +def _looks_like_red_hat_lib() -> bool: + """Red Hat patches platlib in unix_prefix and unix_home, but not purelib. + + This is the only way I can see to tell a Red Hat-patched Python. + """ + from distutils.command.install import INSTALL_SCHEMES + + return all( + k in INSTALL_SCHEMES + and _looks_like_red_hat_patched_platlib_purelib(INSTALL_SCHEMES[k]) + for k in ("unix_prefix", "unix_home") + ) + + +@functools.lru_cache(maxsize=None) +def _looks_like_debian_scheme() -> bool: + """Debian adds two additional schemes.""" + from distutils.command.install import INSTALL_SCHEMES + + return "deb_system" in INSTALL_SCHEMES and "unix_local" in INSTALL_SCHEMES + + +@functools.lru_cache(maxsize=None) +def _looks_like_red_hat_scheme() -> bool: + """Red Hat patches ``sys.prefix`` and ``sys.exec_prefix``. + + Red Hat's ``00251-change-user-install-location.patch`` changes the install + command's ``prefix`` and ``exec_prefix`` to append ``"/local"``. This is + (fortunately?) done quite unconditionally, so we create a default command + object without any configuration to detect this. + """ + from distutils.command.install import install + from distutils.dist import Distribution + + cmd: Any = install(Distribution()) + cmd.finalize_options() + return ( + cmd.exec_prefix == f"{os.path.normpath(sys.exec_prefix)}/local" + and cmd.prefix == f"{os.path.normpath(sys.prefix)}/local" + ) + + +@functools.lru_cache(maxsize=None) +def _looks_like_slackware_scheme() -> bool: + """Slackware patches sysconfig but fails to patch distutils and site. + + Slackware changes sysconfig's user scheme to use ``"lib64"`` for the lib + path, but does not do the same to the site module. + """ + if user_site is None: # User-site not available. + return False + try: + paths = sysconfig.get_paths(scheme="posix_user", expand=False) + except KeyError: # User-site not available. + return False + return "/lib64/" in paths["purelib"] and "/lib64/" not in user_site + + +@functools.lru_cache(maxsize=None) +def _looks_like_msys2_mingw_scheme() -> bool: + """MSYS2 patches distutils and sysconfig to use a UNIX-like scheme. + + However, MSYS2 incorrectly patches sysconfig ``nt`` scheme. The fix is + likely going to be included in their 3.10 release, so we ignore the warning. + See msys2/MINGW-packages#9319. + + MSYS2 MINGW's patch uses lowercase ``"lib"`` instead of the usual uppercase, + and is missing the final ``"site-packages"``. + """ + paths = sysconfig.get_paths("nt", expand=False) + return all( + "Lib" not in p and "lib" in p and not p.endswith("site-packages") + for p in (paths[key] for key in ("platlib", "purelib")) + ) + + +def _fix_abiflags(parts: Tuple[str]) -> Generator[str, None, None]: + ldversion = sysconfig.get_config_var("LDVERSION") + abiflags = getattr(sys, "abiflags", None) + + # LDVERSION does not end with sys.abiflags. Just return the path unchanged. + if not ldversion or not abiflags or not ldversion.endswith(abiflags): + yield from parts + return + + # Strip sys.abiflags from LDVERSION-based path components. + for part in parts: + if part.endswith(ldversion): + part = part[: (0 - len(abiflags))] + yield part + + +@functools.lru_cache(maxsize=None) +def _warn_mismatched(old: pathlib.Path, new: pathlib.Path, *, key: str) -> None: + issue_url = "https://github.com/pypa/pip/issues/10151" + message = ( + "Value for %s does not match. Please report this to <%s>" + "\ndistutils: %s" + "\nsysconfig: %s" + ) + logger.log(_MISMATCH_LEVEL, message, key, issue_url, old, new) + + +def _warn_if_mismatch(old: pathlib.Path, new: pathlib.Path, *, key: str) -> bool: + if old == new: + return False + _warn_mismatched(old, new, key=key) + return True + + +@functools.lru_cache(maxsize=None) +def _log_context( + *, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + prefix: Optional[str] = None, +) -> None: + parts = [ + "Additional context:", + "user = %r", + "home = %r", + "root = %r", + "prefix = %r", + ] + + logger.log(_MISMATCH_LEVEL, "\n".join(parts), user, home, root, prefix) + + +def get_scheme( + dist_name: str, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> Scheme: + new = _sysconfig.get_scheme( + dist_name, + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + if _USE_SYSCONFIG: + return new + + old = _distutils.get_scheme( + dist_name, + user=user, + home=home, + root=root, + isolated=isolated, + prefix=prefix, + ) + + warning_contexts = [] + for k in SCHEME_KEYS: + old_v = pathlib.Path(getattr(old, k)) + new_v = pathlib.Path(getattr(new, k)) + + if old_v == new_v: + continue + + # distutils incorrectly put PyPy packages under ``site-packages/python`` + # in the ``posix_home`` scheme, but PyPy devs said they expect the + # directory name to be ``pypy`` instead. So we treat this as a bug fix + # and not warn about it. See bpo-43307 and python/cpython#24628. + skip_pypy_special_case = ( + sys.implementation.name == "pypy" + and home is not None + and k in ("platlib", "purelib") + and old_v.parent == new_v.parent + and old_v.name.startswith("python") + and new_v.name.startswith("pypy") + ) + if skip_pypy_special_case: + continue + + # sysconfig's ``osx_framework_user`` does not include ``pythonX.Y`` in + # the ``include`` value, but distutils's ``headers`` does. We'll let + # CPython decide whether this is a bug or feature. See bpo-43948. + skip_osx_framework_user_special_case = ( + user + and is_osx_framework() + and k == "headers" + and old_v.parent.parent == new_v.parent + and old_v.parent.name.startswith("python") + ) + if skip_osx_framework_user_special_case: + continue + + # On Red Hat and derived Linux distributions, distutils is patched to + # use "lib64" instead of "lib" for platlib. + if k == "platlib" and _looks_like_red_hat_lib(): + continue + + # On Python 3.9+, sysconfig's posix_user scheme sets platlib against + # sys.platlibdir, but distutils's unix_user incorrectly coninutes + # using the same $usersite for both platlib and purelib. This creates a + # mismatch when sys.platlibdir is not "lib". + skip_bpo_44860 = ( + user + and k == "platlib" + and not WINDOWS + and sys.version_info >= (3, 9) + and _PLATLIBDIR != "lib" + and _looks_like_bpo_44860() + ) + if skip_bpo_44860: + continue + + # Slackware incorrectly patches posix_user to use lib64 instead of lib, + # but not usersite to match the location. + skip_slackware_user_scheme = ( + user + and k in ("platlib", "purelib") + and not WINDOWS + and _looks_like_slackware_scheme() + ) + if skip_slackware_user_scheme: + continue + + # Both Debian and Red Hat patch Python to place the system site under + # /usr/local instead of /usr. Debian also places lib in dist-packages + # instead of site-packages, but the /usr/local check should cover it. + skip_linux_system_special_case = ( + not (user or home or prefix or running_under_virtualenv()) + and old_v.parts[1:3] == ("usr", "local") + and len(new_v.parts) > 1 + and new_v.parts[1] == "usr" + and (len(new_v.parts) < 3 or new_v.parts[2] != "local") + and (_looks_like_red_hat_scheme() or _looks_like_debian_scheme()) + ) + if skip_linux_system_special_case: + continue + + # On Python 3.7 and earlier, sysconfig does not include sys.abiflags in + # the "pythonX.Y" part of the path, but distutils does. + skip_sysconfig_abiflag_bug = ( + sys.version_info < (3, 8) + and not WINDOWS + and k in ("headers", "platlib", "purelib") + and tuple(_fix_abiflags(old_v.parts)) == new_v.parts + ) + if skip_sysconfig_abiflag_bug: + continue + + # MSYS2 MINGW's sysconfig patch does not include the "site-packages" + # part of the path. This is incorrect and will be fixed in MSYS. + skip_msys2_mingw_bug = ( + WINDOWS and k in ("platlib", "purelib") and _looks_like_msys2_mingw_scheme() + ) + if skip_msys2_mingw_bug: + continue + + # CPython's POSIX install script invokes pip (via ensurepip) against the + # interpreter located in the source tree, not the install site. This + # triggers special logic in sysconfig that's not present in distutils. + # https://github.com/python/cpython/blob/8c21941ddaf/Lib/sysconfig.py#L178-L194 + skip_cpython_build = ( + sysconfig.is_python_build(check_home=True) + and not WINDOWS + and k in ("headers", "include", "platinclude") + ) + if skip_cpython_build: + continue + + warning_contexts.append((old_v, new_v, f"scheme.{k}")) + + if not warning_contexts: + return old + + # Check if this path mismatch is caused by distutils config files. Those + # files will no longer work once we switch to sysconfig, so this raises a + # deprecation message for them. + default_old = _distutils.distutils_scheme( + dist_name, + user, + home, + root, + isolated, + prefix, + ignore_config_files=True, + ) + if any(default_old[k] != getattr(old, k) for k in SCHEME_KEYS): + deprecated( + reason=( + "Configuring installation scheme with distutils config files " + "is deprecated and will no longer work in the near future. If you " + "are using a Homebrew or Linuxbrew Python, please see discussion " + "at https://github.com/Homebrew/homebrew-core/issues/76621" + ), + replacement=None, + gone_in=None, + ) + return old + + # Post warnings about this mismatch so user can report them back. + for old_v, new_v, key in warning_contexts: + _warn_mismatched(old_v, new_v, key=key) + _log_context(user=user, home=home, root=root, prefix=prefix) + + return old + + +def get_bin_prefix() -> str: + new = _sysconfig.get_bin_prefix() + if _USE_SYSCONFIG: + return new + + old = _distutils.get_bin_prefix() + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="bin_prefix"): + _log_context() + return old + + +def get_bin_user() -> str: + return _sysconfig.get_scheme("", user=True).scripts + + +def _looks_like_deb_system_dist_packages(value: str) -> bool: + """Check if the value is Debian's APT-controlled dist-packages. + + Debian's ``distutils.sysconfig.get_python_lib()`` implementation returns the + default package path controlled by APT, but does not patch ``sysconfig`` to + do the same. This is similar to the bug worked around in ``get_scheme()``, + but here the default is ``deb_system`` instead of ``unix_local``. Ultimately + we can't do anything about this Debian bug, and this detection allows us to + skip the warning when needed. + """ + if not _looks_like_debian_scheme(): + return False + if value == "/usr/lib/python3/dist-packages": + return True + return False + + +def get_purelib() -> str: + """Return the default pure-Python lib location.""" + new = _sysconfig.get_purelib() + if _USE_SYSCONFIG: + return new + + old = _distutils.get_purelib() + if _looks_like_deb_system_dist_packages(old): + return old + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="purelib"): + _log_context() + return old + + +def get_platlib() -> str: + """Return the default platform-shared lib location.""" + new = _sysconfig.get_platlib() + if _USE_SYSCONFIG: + return new + + from . import _distutils + + old = _distutils.get_platlib() + if _looks_like_deb_system_dist_packages(old): + return old + if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="platlib"): + _log_context() + return old diff --git a/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..8d050fc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc new file mode 100644 index 0000000..8acdc4e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc new file mode 100644 index 0000000..e026628 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc new file mode 100644 index 0000000..96aed11 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py b/venv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py new file mode 100644 index 0000000..0e18c6e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py @@ -0,0 +1,172 @@ +"""Locations where we look for configs, install stuff, etc""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +# If pip's going to use distutils, it should not be using the copy that setuptools +# might have injected into the environment. This is done by removing the injected +# shim, if it's injected. +# +# See https://github.com/pypa/pip/issues/8761 for the original discussion and +# rationale for why this is done within pip. +try: + __import__("_distutils_hack").remove_shim() +except (ImportError, AttributeError): + pass + +import logging +import os +import sys +from distutils.cmd import Command as DistutilsCommand +from distutils.command.install import SCHEME_KEYS +from distutils.command.install import install as distutils_install_command +from distutils.sysconfig import get_python_lib +from typing import Dict, List, Optional, Union, cast + +from pip._internal.models.scheme import Scheme +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import get_major_minor_version + +logger = logging.getLogger(__name__) + + +def distutils_scheme( + dist_name: str, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, + *, + ignore_config_files: bool = False, +) -> Dict[str, str]: + """ + Return a distutils install scheme + """ + from distutils.dist import Distribution + + dist_args: Dict[str, Union[str, List[str]]] = {"name": dist_name} + if isolated: + dist_args["script_args"] = ["--no-user-cfg"] + + d = Distribution(dist_args) + if not ignore_config_files: + try: + d.parse_config_files() + except UnicodeDecodeError: + paths = d.find_config_files() + logger.warning( + "Ignore distutils configs in %s due to encoding errors.", + ", ".join(os.path.basename(p) for p in paths), + ) + obj: Optional[DistutilsCommand] = None + obj = d.get_command_obj("install", create=True) + assert obj is not None + i = cast(distutils_install_command, obj) + # NOTE: setting user or home has the side-effect of creating the home dir + # or user base for installations during finalize_options() + # ideally, we'd prefer a scheme class that has no side-effects. + assert not (user and prefix), f"user={user} prefix={prefix}" + assert not (home and prefix), f"home={home} prefix={prefix}" + i.user = user or i.user + if user or home: + i.prefix = "" + i.prefix = prefix or i.prefix + i.home = home or i.home + i.root = root or i.root + i.finalize_options() + + scheme = {} + for key in SCHEME_KEYS: + scheme[key] = getattr(i, "install_" + key) + + # install_lib specified in setup.cfg should install *everything* + # into there (i.e. it takes precedence over both purelib and + # platlib). Note, i.install_lib is *always* set after + # finalize_options(); we only want to override here if the user + # has explicitly requested it hence going back to the config + if "install_lib" in d.get_option_dict("install"): + scheme.update({"purelib": i.install_lib, "platlib": i.install_lib}) + + if running_under_virtualenv(): + if home: + prefix = home + elif user: + prefix = i.install_userbase + else: + prefix = i.prefix + scheme["headers"] = os.path.join( + prefix, + "include", + "site", + f"python{get_major_minor_version()}", + dist_name, + ) + + if root is not None: + path_no_drive = os.path.splitdrive(os.path.abspath(scheme["headers"]))[1] + scheme["headers"] = os.path.join(root, path_no_drive[1:]) + + return scheme + + +def get_scheme( + dist_name: str, + user: bool = False, + home: Optional[str] = None, + root: Optional[str] = None, + isolated: bool = False, + prefix: Optional[str] = None, +) -> Scheme: + """ + Get the "scheme" corresponding to the input parameters. The distutils + documentation provides the context for the available schemes: + https://docs.python.org/3/install/index.html#alternate-installation + + :param dist_name: the name of the package to retrieve the scheme for, used + in the headers scheme path + :param user: indicates to use the "user" scheme + :param home: indicates to use the "home" scheme and provides the base + directory for the same + :param root: root under which other directories are re-based + :param isolated: equivalent to --no-user-cfg, i.e. do not consider + ~/.pydistutils.cfg (posix) or ~/pydistutils.cfg (non-posix) for + scheme paths + :param prefix: indicates to use the "prefix" scheme and provides the + base directory for the same + """ + scheme = distutils_scheme(dist_name, user, home, root, isolated, prefix) + return Scheme( + platlib=scheme["platlib"], + purelib=scheme["purelib"], + headers=scheme["headers"], + scripts=scheme["scripts"], + data=scheme["data"], + ) + + +def get_bin_prefix() -> str: + # XXX: In old virtualenv versions, sys.prefix can contain '..' components, + # so we need to call normpath to eliminate them. + prefix = os.path.normpath(sys.prefix) + if WINDOWS: + bin_py = os.path.join(prefix, "Scripts") + # buildout uses 'bin' on Windows too? + if not os.path.exists(bin_py): + bin_py = os.path.join(prefix, "bin") + return bin_py + # Forcing to use /usr/local/bin for standard macOS framework installs + # Also log to ~/Library/Logs/ for use with the Console.app log viewer + if sys.platform[:6] == "darwin" and prefix[:16] == "/System/Library/": + return "/usr/local/bin" + return os.path.join(prefix, "bin") + + +def get_purelib() -> str: + return get_python_lib(plat_specific=False) + + +def get_platlib() -> str: + return get_python_lib(plat_specific=True) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py b/venv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py new file mode 100644 index 0000000..97aef1f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py @@ -0,0 +1,213 @@ +import logging +import os +import sys +import sysconfig +import typing + +from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import change_root, get_major_minor_version, is_osx_framework + +logger = logging.getLogger(__name__) + + +# Notes on _infer_* functions. +# Unfortunately ``get_default_scheme()`` didn't exist before 3.10, so there's no +# way to ask things like "what is the '_prefix' scheme on this platform". These +# functions try to answer that with some heuristics while accounting for ad-hoc +# platforms not covered by CPython's default sysconfig implementation. If the +# ad-hoc implementation does not fully implement sysconfig, we'll fall back to +# a POSIX scheme. + +_AVAILABLE_SCHEMES = set(sysconfig.get_scheme_names()) + +_PREFERRED_SCHEME_API = getattr(sysconfig, "get_preferred_scheme", None) + + +def _should_use_osx_framework_prefix() -> bool: + """Check for Apple's ``osx_framework_library`` scheme. + + Python distributed by Apple's Command Line Tools has this special scheme + that's used when: + + * This is a framework build. + * We are installing into the system prefix. + + This does not account for ``pip install --prefix`` (also means we're not + installing to the system prefix), which should use ``posix_prefix``, but + logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But + since ``prefix`` is not available for ``sysconfig.get_default_scheme()``, + which is the stdlib replacement for ``_infer_prefix()``, presumably Apple + wouldn't be able to magically switch between ``osx_framework_library`` and + ``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library`` + means its behavior is consistent whether we use the stdlib implementation + or our own, and we deal with this special case in ``get_scheme()`` instead. + """ + return ( + "osx_framework_library" in _AVAILABLE_SCHEMES + and not running_under_virtualenv() + and is_osx_framework() + ) + + +def _infer_prefix() -> str: + """Try to find a prefix scheme for the current platform. + + This tries: + + * A special ``osx_framework_library`` for Python distributed by Apple's + Command Line Tools, when not running in a virtual environment. + * Implementation + OS, used by PyPy on Windows (``pypy_nt``). + * Implementation without OS, used by PyPy on POSIX (``pypy``). + * OS + "prefix", used by CPython on POSIX (``posix_prefix``). + * Just the OS name, used by CPython on Windows (``nt``). + + If none of the above works, fall back to ``posix_prefix``. + """ + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("prefix") + if _should_use_osx_framework_prefix(): + return "osx_framework_library" + implementation_suffixed = f"{sys.implementation.name}_{os.name}" + if implementation_suffixed in _AVAILABLE_SCHEMES: + return implementation_suffixed + if sys.implementation.name in _AVAILABLE_SCHEMES: + return sys.implementation.name + suffixed = f"{os.name}_prefix" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + if os.name in _AVAILABLE_SCHEMES: # On Windows, prefx is just called "nt". + return os.name + return "posix_prefix" + + +def _infer_user() -> str: + """Try to find a user scheme for the current platform.""" + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("user") + if is_osx_framework() and not running_under_virtualenv(): + suffixed = "osx_framework_user" + else: + suffixed = f"{os.name}_user" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + if "posix_user" not in _AVAILABLE_SCHEMES: # User scheme unavailable. + raise UserInstallationInvalid() + return "posix_user" + + +def _infer_home() -> str: + """Try to find a home for the current platform.""" + if _PREFERRED_SCHEME_API: + return _PREFERRED_SCHEME_API("home") + suffixed = f"{os.name}_home" + if suffixed in _AVAILABLE_SCHEMES: + return suffixed + return "posix_home" + + +# Update these keys if the user sets a custom home. +_HOME_KEYS = [ + "installed_base", + "base", + "installed_platbase", + "platbase", + "prefix", + "exec_prefix", +] +if sysconfig.get_config_var("userbase") is not None: + _HOME_KEYS.append("userbase") + + +def get_scheme( + dist_name: str, + user: bool = False, + home: typing.Optional[str] = None, + root: typing.Optional[str] = None, + isolated: bool = False, + prefix: typing.Optional[str] = None, +) -> Scheme: + """ + Get the "scheme" corresponding to the input parameters. + + :param dist_name: the name of the package to retrieve the scheme for, used + in the headers scheme path + :param user: indicates to use the "user" scheme + :param home: indicates to use the "home" scheme + :param root: root under which other directories are re-based + :param isolated: ignored, but kept for distutils compatibility (where + this controls whether the user-site pydistutils.cfg is honored) + :param prefix: indicates to use the "prefix" scheme and provides the + base directory for the same + """ + if user and prefix: + raise InvalidSchemeCombination("--user", "--prefix") + if home and prefix: + raise InvalidSchemeCombination("--home", "--prefix") + + if home is not None: + scheme_name = _infer_home() + elif user: + scheme_name = _infer_user() + else: + scheme_name = _infer_prefix() + + # Special case: When installing into a custom prefix, use posix_prefix + # instead of osx_framework_library. See _should_use_osx_framework_prefix() + # docstring for details. + if prefix is not None and scheme_name == "osx_framework_library": + scheme_name = "posix_prefix" + + if home is not None: + variables = {k: home for k in _HOME_KEYS} + elif prefix is not None: + variables = {k: prefix for k in _HOME_KEYS} + else: + variables = {} + + paths = sysconfig.get_paths(scheme=scheme_name, vars=variables) + + # Logic here is very arbitrary, we're doing it for compatibility, don't ask. + # 1. Pip historically uses a special header path in virtual environments. + # 2. If the distribution name is not known, distutils uses 'UNKNOWN'. We + # only do the same when not running in a virtual environment because + # pip's historical header path logic (see point 1) did not do this. + if running_under_virtualenv(): + if user: + base = variables.get("userbase", sys.prefix) + else: + base = variables.get("base", sys.prefix) + python_xy = f"python{get_major_minor_version()}" + paths["include"] = os.path.join(base, "include", "site", python_xy) + elif not dist_name: + dist_name = "UNKNOWN" + + scheme = Scheme( + platlib=paths["platlib"], + purelib=paths["purelib"], + headers=os.path.join(paths["include"], dist_name), + scripts=paths["scripts"], + data=paths["data"], + ) + if root is not None: + for key in SCHEME_KEYS: + value = change_root(root, getattr(scheme, key)) + setattr(scheme, key, value) + return scheme + + +def get_bin_prefix() -> str: + # Forcing to use /usr/local/bin for standard macOS framework installs. + if sys.platform[:6] == "darwin" and sys.prefix[:16] == "/System/Library/": + return "/usr/local/bin" + return sysconfig.get_paths()["scripts"] + + +def get_purelib() -> str: + return sysconfig.get_paths()["purelib"] + + +def get_platlib() -> str: + return sysconfig.get_paths()["platlib"] diff --git a/venv/lib/python3.12/site-packages/pip/_internal/locations/base.py b/venv/lib/python3.12/site-packages/pip/_internal/locations/base.py new file mode 100644 index 0000000..3f9f896 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/locations/base.py @@ -0,0 +1,81 @@ +import functools +import os +import site +import sys +import sysconfig +import typing + +from pip._internal.exceptions import InstallationError +from pip._internal.utils import appdirs +from pip._internal.utils.virtualenv import running_under_virtualenv + +# Application Directories +USER_CACHE_DIR = appdirs.user_cache_dir("pip") + +# FIXME doesn't account for venv linked to global site-packages +site_packages: str = sysconfig.get_path("purelib") + + +def get_major_minor_version() -> str: + """ + Return the major-minor version of the current Python as a string, e.g. + "3.7" or "3.10". + """ + return "{}.{}".format(*sys.version_info) + + +def change_root(new_root: str, pathname: str) -> str: + """Return 'pathname' with 'new_root' prepended. + + If 'pathname' is relative, this is equivalent to os.path.join(new_root, pathname). + Otherwise, it requires making 'pathname' relative and then joining the + two, which is tricky on DOS/Windows and Mac OS. + + This is borrowed from Python's standard library's distutils module. + """ + if os.name == "posix": + if not os.path.isabs(pathname): + return os.path.join(new_root, pathname) + else: + return os.path.join(new_root, pathname[1:]) + + elif os.name == "nt": + (drive, path) = os.path.splitdrive(pathname) + if path[0] == "\\": + path = path[1:] + return os.path.join(new_root, path) + + else: + raise InstallationError( + f"Unknown platform: {os.name}\n" + "Can not change root path prefix on unknown platform." + ) + + +def get_src_prefix() -> str: + if running_under_virtualenv(): + src_prefix = os.path.join(sys.prefix, "src") + else: + # FIXME: keep src in cwd for now (it is not a temporary folder) + try: + src_prefix = os.path.join(os.getcwd(), "src") + except OSError: + # In case the current working directory has been renamed or deleted + sys.exit("The folder you are executing pip from can no longer be found.") + + # under macOS + virtualenv sys.prefix is not properly resolved + # it is something like /path/to/python/bin/.. + return os.path.abspath(src_prefix) + + +try: + # Use getusersitepackages if this is present, as it ensures that the + # value is initialised properly. + user_site: typing.Optional[str] = site.getusersitepackages() +except AttributeError: + user_site = site.USER_SITE + + +@functools.lru_cache(maxsize=None) +def is_osx_framework() -> bool: + return bool(sysconfig.get_config_var("PYTHONFRAMEWORK")) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/main.py b/venv/lib/python3.12/site-packages/pip/_internal/main.py new file mode 100644 index 0000000..33c6d24 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/main.py @@ -0,0 +1,12 @@ +from typing import List, Optional + + +def main(args: Optional[List[str]] = None) -> int: + """This is preserved for old console scripts that may still be referencing + it. + + For additional details, see https://github.com/pypa/pip/issues/7498. + """ + from pip._internal.utils.entrypoints import _wrapper + + return _wrapper(args) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py new file mode 100644 index 0000000..aa232b6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py @@ -0,0 +1,128 @@ +import contextlib +import functools +import os +import sys +from typing import TYPE_CHECKING, List, Optional, Type, cast + +from pip._internal.utils.misc import strtobool + +from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel + +if TYPE_CHECKING: + from typing import Literal, Protocol +else: + Protocol = object + +__all__ = [ + "BaseDistribution", + "BaseEnvironment", + "FilesystemWheel", + "MemoryWheel", + "Wheel", + "get_default_environment", + "get_environment", + "get_wheel_distribution", + "select_backend", +] + + +def _should_use_importlib_metadata() -> bool: + """Whether to use the ``importlib.metadata`` or ``pkg_resources`` backend. + + By default, pip uses ``importlib.metadata`` on Python 3.11+, and + ``pkg_resourcess`` otherwise. This can be overridden by a couple of ways: + + * If environment variable ``_PIP_USE_IMPORTLIB_METADATA`` is set, it + dictates whether ``importlib.metadata`` is used, regardless of Python + version. + * On Python 3.11+, Python distributors can patch ``importlib.metadata`` + to add a global constant ``_PIP_USE_IMPORTLIB_METADATA = False``. This + makes pip use ``pkg_resources`` (unless the user set the aforementioned + environment variable to *True*). + """ + with contextlib.suppress(KeyError, ValueError): + return bool(strtobool(os.environ["_PIP_USE_IMPORTLIB_METADATA"])) + if sys.version_info < (3, 11): + return False + import importlib.metadata + + return bool(getattr(importlib.metadata, "_PIP_USE_IMPORTLIB_METADATA", True)) + + +class Backend(Protocol): + NAME: 'Literal["importlib", "pkg_resources"]' + Distribution: Type[BaseDistribution] + Environment: Type[BaseEnvironment] + + +@functools.lru_cache(maxsize=None) +def select_backend() -> Backend: + if _should_use_importlib_metadata(): + from . import importlib + + return cast(Backend, importlib) + from . import pkg_resources + + return cast(Backend, pkg_resources) + + +def get_default_environment() -> BaseEnvironment: + """Get the default representation for the current environment. + + This returns an Environment instance from the chosen backend. The default + Environment instance should be built from ``sys.path`` and may use caching + to share instance state accorss calls. + """ + return select_backend().Environment.default() + + +def get_environment(paths: Optional[List[str]]) -> BaseEnvironment: + """Get a representation of the environment specified by ``paths``. + + This returns an Environment instance from the chosen backend based on the + given import paths. The backend must build a fresh instance representing + the state of installed distributions when this function is called. + """ + return select_backend().Environment.from_paths(paths) + + +def get_directory_distribution(directory: str) -> BaseDistribution: + """Get the distribution metadata representation in the specified directory. + + This returns a Distribution instance from the chosen backend based on + the given on-disk ``.dist-info`` directory. + """ + return select_backend().Distribution.from_directory(directory) + + +def get_wheel_distribution(wheel: Wheel, canonical_name: str) -> BaseDistribution: + """Get the representation of the specified wheel's distribution metadata. + + This returns a Distribution instance from the chosen backend based on + the given wheel's ``.dist-info`` directory. + + :param canonical_name: Normalized project name of the given wheel. + """ + return select_backend().Distribution.from_wheel(wheel, canonical_name) + + +def get_metadata_distribution( + metadata_contents: bytes, + filename: str, + canonical_name: str, +) -> BaseDistribution: + """Get the dist representation of the specified METADATA file contents. + + This returns a Distribution instance from the chosen backend sourced from the data + in `metadata_contents`. + + :param metadata_contents: Contents of a METADATA file within a dist, or one served + via PEP 658. + :param filename: Filename for the dist this metadata represents. + :param canonical_name: Normalized project name of the given dist. + """ + return select_backend().Distribution.from_metadata_file_contents( + metadata_contents, + filename, + canonical_name, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..d265738 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc new file mode 100644 index 0000000..c2cdd00 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc new file mode 100644 index 0000000..9cfeecb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc new file mode 100644 index 0000000..cfda303 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/_json.py b/venv/lib/python3.12/site-packages/pip/_internal/metadata/_json.py new file mode 100644 index 0000000..27362fc --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/metadata/_json.py @@ -0,0 +1,84 @@ +# Extracted from https://github.com/pfmoore/pkg_metadata + +from email.header import Header, decode_header, make_header +from email.message import Message +from typing import Any, Dict, List, Union + +METADATA_FIELDS = [ + # Name, Multiple-Use + ("Metadata-Version", False), + ("Name", False), + ("Version", False), + ("Dynamic", True), + ("Platform", True), + ("Supported-Platform", True), + ("Summary", False), + ("Description", False), + ("Description-Content-Type", False), + ("Keywords", False), + ("Home-page", False), + ("Download-URL", False), + ("Author", False), + ("Author-email", False), + ("Maintainer", False), + ("Maintainer-email", False), + ("License", False), + ("Classifier", True), + ("Requires-Dist", True), + ("Requires-Python", False), + ("Requires-External", True), + ("Project-URL", True), + ("Provides-Extra", True), + ("Provides-Dist", True), + ("Obsoletes-Dist", True), +] + + +def json_name(field: str) -> str: + return field.lower().replace("-", "_") + + +def msg_to_json(msg: Message) -> Dict[str, Any]: + """Convert a Message object into a JSON-compatible dictionary.""" + + def sanitise_header(h: Union[Header, str]) -> str: + if isinstance(h, Header): + chunks = [] + for bytes, encoding in decode_header(h): + if encoding == "unknown-8bit": + try: + # See if UTF-8 works + bytes.decode("utf-8") + encoding = "utf-8" + except UnicodeDecodeError: + # If not, latin1 at least won't fail + encoding = "latin1" + chunks.append((bytes, encoding)) + return str(make_header(chunks)) + return str(h) + + result = {} + for field, multi in METADATA_FIELDS: + if field not in msg: + continue + key = json_name(field) + if multi: + value: Union[str, List[str]] = [ + sanitise_header(v) for v in msg.get_all(field) # type: ignore + ] + else: + value = sanitise_header(msg.get(field)) # type: ignore + if key == "keywords": + # Accept both comma-separated and space-separated + # forms, for better compatibility with old data. + if "," in value: + value = [v.strip() for v in value.split(",")] + else: + value = value.split() + result[key] = value + + payload = msg.get_payload() + if payload: + result["description"] = payload + + return result diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/base.py b/venv/lib/python3.12/site-packages/pip/_internal/metadata/base.py new file mode 100644 index 0000000..9249124 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/metadata/base.py @@ -0,0 +1,702 @@ +import csv +import email.message +import functools +import json +import logging +import pathlib +import re +import zipfile +from typing import ( + IO, + TYPE_CHECKING, + Any, + Collection, + Container, + Dict, + Iterable, + Iterator, + List, + NamedTuple, + Optional, + Tuple, + Union, +) + +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.specifiers import InvalidSpecifier, SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import LegacyVersion, Version + +from pip._internal.exceptions import NoneMetadataError +from pip._internal.locations import site_packages, user_site +from pip._internal.models.direct_url import ( + DIRECT_URL_METADATA_NAME, + DirectUrl, + DirectUrlValidationError, +) +from pip._internal.utils.compat import stdlib_pkgs # TODO: Move definition here. +from pip._internal.utils.egg_link import egg_link_path_from_sys_path +from pip._internal.utils.misc import is_local, normalize_path +from pip._internal.utils.urls import url_to_path + +from ._json import msg_to_json + +if TYPE_CHECKING: + from typing import Protocol +else: + Protocol = object + +DistributionVersion = Union[LegacyVersion, Version] + +InfoPath = Union[str, pathlib.PurePath] + +logger = logging.getLogger(__name__) + + +class BaseEntryPoint(Protocol): + @property + def name(self) -> str: + raise NotImplementedError() + + @property + def value(self) -> str: + raise NotImplementedError() + + @property + def group(self) -> str: + raise NotImplementedError() + + +def _convert_installed_files_path( + entry: Tuple[str, ...], + info: Tuple[str, ...], +) -> str: + """Convert a legacy installed-files.txt path into modern RECORD path. + + The legacy format stores paths relative to the info directory, while the + modern format stores paths relative to the package root, e.g. the + site-packages directory. + + :param entry: Path parts of the installed-files.txt entry. + :param info: Path parts of the egg-info directory relative to package root. + :returns: The converted entry. + + For best compatibility with symlinks, this does not use ``abspath()`` or + ``Path.resolve()``, but tries to work with path parts: + + 1. While ``entry`` starts with ``..``, remove the equal amounts of parts + from ``info``; if ``info`` is empty, start appending ``..`` instead. + 2. Join the two directly. + """ + while entry and entry[0] == "..": + if not info or info[-1] == "..": + info += ("..",) + else: + info = info[:-1] + entry = entry[1:] + return str(pathlib.Path(*info, *entry)) + + +class RequiresEntry(NamedTuple): + requirement: str + extra: str + marker: str + + +class BaseDistribution(Protocol): + @classmethod + def from_directory(cls, directory: str) -> "BaseDistribution": + """Load the distribution from a metadata directory. + + :param directory: Path to a metadata directory, e.g. ``.dist-info``. + """ + raise NotImplementedError() + + @classmethod + def from_metadata_file_contents( + cls, + metadata_contents: bytes, + filename: str, + project_name: str, + ) -> "BaseDistribution": + """Load the distribution from the contents of a METADATA file. + + This is used to implement PEP 658 by generating a "shallow" dist object that can + be used for resolution without downloading or building the actual dist yet. + + :param metadata_contents: The contents of a METADATA file. + :param filename: File name for the dist with this metadata. + :param project_name: Name of the project this dist represents. + """ + raise NotImplementedError() + + @classmethod + def from_wheel(cls, wheel: "Wheel", name: str) -> "BaseDistribution": + """Load the distribution from a given wheel. + + :param wheel: A concrete wheel definition. + :param name: File name of the wheel. + + :raises InvalidWheel: Whenever loading of the wheel causes a + :py:exc:`zipfile.BadZipFile` exception to be thrown. + :raises UnsupportedWheel: If the wheel is a valid zip, but malformed + internally. + """ + raise NotImplementedError() + + def __repr__(self) -> str: + return f"{self.raw_name} {self.version} ({self.location})" + + def __str__(self) -> str: + return f"{self.raw_name} {self.version}" + + @property + def location(self) -> Optional[str]: + """Where the distribution is loaded from. + + A string value is not necessarily a filesystem path, since distributions + can be loaded from other sources, e.g. arbitrary zip archives. ``None`` + means the distribution is created in-memory. + + Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If + this is a symbolic link, we want to preserve the relative path between + it and files in the distribution. + """ + raise NotImplementedError() + + @property + def editable_project_location(self) -> Optional[str]: + """The project location for editable distributions. + + This is the directory where pyproject.toml or setup.py is located. + None if the distribution is not installed in editable mode. + """ + # TODO: this property is relatively costly to compute, memoize it ? + direct_url = self.direct_url + if direct_url: + if direct_url.is_local_editable(): + return url_to_path(direct_url.url) + else: + # Search for an .egg-link file by walking sys.path, as it was + # done before by dist_is_editable(). + egg_link_path = egg_link_path_from_sys_path(self.raw_name) + if egg_link_path: + # TODO: get project location from second line of egg_link file + # (https://github.com/pypa/pip/issues/10243) + return self.location + return None + + @property + def installed_location(self) -> Optional[str]: + """The distribution's "installed" location. + + This should generally be a ``site-packages`` directory. This is + usually ``dist.location``, except for legacy develop-installed packages, + where ``dist.location`` is the source code location, and this is where + the ``.egg-link`` file is. + + The returned location is normalized (in particular, with symlinks removed). + """ + raise NotImplementedError() + + @property + def info_location(self) -> Optional[str]: + """Location of the .[egg|dist]-info directory or file. + + Similarly to ``location``, a string value is not necessarily a + filesystem path. ``None`` means the distribution is created in-memory. + + For a modern .dist-info installation on disk, this should be something + like ``{location}/{raw_name}-{version}.dist-info``. + + Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If + this is a symbolic link, we want to preserve the relative path between + it and other files in the distribution. + """ + raise NotImplementedError() + + @property + def installed_by_distutils(self) -> bool: + """Whether this distribution is installed with legacy distutils format. + + A distribution installed with "raw" distutils not patched by setuptools + uses one single file at ``info_location`` to store metadata. We need to + treat this specially on uninstallation. + """ + info_location = self.info_location + if not info_location: + return False + return pathlib.Path(info_location).is_file() + + @property + def installed_as_egg(self) -> bool: + """Whether this distribution is installed as an egg. + + This usually indicates the distribution was installed by (older versions + of) easy_install. + """ + location = self.location + if not location: + return False + return location.endswith(".egg") + + @property + def installed_with_setuptools_egg_info(self) -> bool: + """Whether this distribution is installed with the ``.egg-info`` format. + + This usually indicates the distribution was installed with setuptools + with an old pip version or with ``single-version-externally-managed``. + + Note that this ensure the metadata store is a directory. distutils can + also installs an ``.egg-info``, but as a file, not a directory. This + property is *False* for that case. Also see ``installed_by_distutils``. + """ + info_location = self.info_location + if not info_location: + return False + if not info_location.endswith(".egg-info"): + return False + return pathlib.Path(info_location).is_dir() + + @property + def installed_with_dist_info(self) -> bool: + """Whether this distribution is installed with the "modern format". + + This indicates a "modern" installation, e.g. storing metadata in the + ``.dist-info`` directory. This applies to installations made by + setuptools (but through pip, not directly), or anything using the + standardized build backend interface (PEP 517). + """ + info_location = self.info_location + if not info_location: + return False + if not info_location.endswith(".dist-info"): + return False + return pathlib.Path(info_location).is_dir() + + @property + def canonical_name(self) -> NormalizedName: + raise NotImplementedError() + + @property + def version(self) -> DistributionVersion: + raise NotImplementedError() + + @property + def setuptools_filename(self) -> str: + """Convert a project name to its setuptools-compatible filename. + + This is a copy of ``pkg_resources.to_filename()`` for compatibility. + """ + return self.raw_name.replace("-", "_") + + @property + def direct_url(self) -> Optional[DirectUrl]: + """Obtain a DirectUrl from this distribution. + + Returns None if the distribution has no `direct_url.json` metadata, + or if `direct_url.json` is invalid. + """ + try: + content = self.read_text(DIRECT_URL_METADATA_NAME) + except FileNotFoundError: + return None + try: + return DirectUrl.from_json(content) + except ( + UnicodeDecodeError, + json.JSONDecodeError, + DirectUrlValidationError, + ) as e: + logger.warning( + "Error parsing %s for %s: %s", + DIRECT_URL_METADATA_NAME, + self.canonical_name, + e, + ) + return None + + @property + def installer(self) -> str: + try: + installer_text = self.read_text("INSTALLER") + except (OSError, ValueError, NoneMetadataError): + return "" # Fail silently if the installer file cannot be read. + for line in installer_text.splitlines(): + cleaned_line = line.strip() + if cleaned_line: + return cleaned_line + return "" + + @property + def requested(self) -> bool: + return self.is_file("REQUESTED") + + @property + def editable(self) -> bool: + return bool(self.editable_project_location) + + @property + def local(self) -> bool: + """If distribution is installed in the current virtual environment. + + Always True if we're not in a virtualenv. + """ + if self.installed_location is None: + return False + return is_local(self.installed_location) + + @property + def in_usersite(self) -> bool: + if self.installed_location is None or user_site is None: + return False + return self.installed_location.startswith(normalize_path(user_site)) + + @property + def in_site_packages(self) -> bool: + if self.installed_location is None or site_packages is None: + return False + return self.installed_location.startswith(normalize_path(site_packages)) + + def is_file(self, path: InfoPath) -> bool: + """Check whether an entry in the info directory is a file.""" + raise NotImplementedError() + + def iter_distutils_script_names(self) -> Iterator[str]: + """Find distutils 'scripts' entries metadata. + + If 'scripts' is supplied in ``setup.py``, distutils records those in the + installed distribution's ``scripts`` directory, a file for each script. + """ + raise NotImplementedError() + + def read_text(self, path: InfoPath) -> str: + """Read a file in the info directory. + + :raise FileNotFoundError: If ``path`` does not exist in the directory. + :raise NoneMetadataError: If ``path`` exists in the info directory, but + cannot be read. + """ + raise NotImplementedError() + + def iter_entry_points(self) -> Iterable[BaseEntryPoint]: + raise NotImplementedError() + + def _metadata_impl(self) -> email.message.Message: + raise NotImplementedError() + + @functools.lru_cache(maxsize=1) + def _metadata_cached(self) -> email.message.Message: + # When we drop python 3.7 support, move this to the metadata property and use + # functools.cached_property instead of lru_cache. + metadata = self._metadata_impl() + self._add_egg_info_requires(metadata) + return metadata + + @property + def metadata(self) -> email.message.Message: + """Metadata of distribution parsed from e.g. METADATA or PKG-INFO. + + This should return an empty message if the metadata file is unavailable. + + :raises NoneMetadataError: If the metadata file is available, but does + not contain valid metadata. + """ + return self._metadata_cached() + + @property + def metadata_dict(self) -> Dict[str, Any]: + """PEP 566 compliant JSON-serializable representation of METADATA or PKG-INFO. + + This should return an empty dict if the metadata file is unavailable. + + :raises NoneMetadataError: If the metadata file is available, but does + not contain valid metadata. + """ + return msg_to_json(self.metadata) + + @property + def metadata_version(self) -> Optional[str]: + """Value of "Metadata-Version:" in distribution metadata, if available.""" + return self.metadata.get("Metadata-Version") + + @property + def raw_name(self) -> str: + """Value of "Name:" in distribution metadata.""" + # The metadata should NEVER be missing the Name: key, but if it somehow + # does, fall back to the known canonical name. + return self.metadata.get("Name", self.canonical_name) + + @property + def requires_python(self) -> SpecifierSet: + """Value of "Requires-Python:" in distribution metadata. + + If the key does not exist or contains an invalid value, an empty + SpecifierSet should be returned. + """ + value = self.metadata.get("Requires-Python") + if value is None: + return SpecifierSet() + try: + # Convert to str to satisfy the type checker; this can be a Header object. + spec = SpecifierSet(str(value)) + except InvalidSpecifier as e: + message = "Package %r has an invalid Requires-Python: %s" + logger.warning(message, self.raw_name, e) + return SpecifierSet() + return spec + + def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: + """Dependencies of this distribution. + + For modern .dist-info distributions, this is the collection of + "Requires-Dist:" entries in distribution metadata. + """ + raise NotImplementedError() + + def iter_provided_extras(self) -> Iterable[str]: + """Extras provided by this distribution. + + For modern .dist-info distributions, this is the collection of + "Provides-Extra:" entries in distribution metadata. + + The return value of this function is not particularly useful other than + display purposes due to backward compatibility issues and the extra + names being poorly normalized prior to PEP 685. If you want to perform + logic operations on extras, use :func:`is_extra_provided` instead. + """ + raise NotImplementedError() + + def is_extra_provided(self, extra: str) -> bool: + """Check whether an extra is provided by this distribution. + + This is needed mostly for compatibility issues with pkg_resources not + following the extra normalization rules defined in PEP 685. + """ + raise NotImplementedError() + + def _iter_declared_entries_from_record(self) -> Optional[Iterator[str]]: + try: + text = self.read_text("RECORD") + except FileNotFoundError: + return None + # This extra Path-str cast normalizes entries. + return (str(pathlib.Path(row[0])) for row in csv.reader(text.splitlines())) + + def _iter_declared_entries_from_legacy(self) -> Optional[Iterator[str]]: + try: + text = self.read_text("installed-files.txt") + except FileNotFoundError: + return None + paths = (p for p in text.splitlines(keepends=False) if p) + root = self.location + info = self.info_location + if root is None or info is None: + return paths + try: + info_rel = pathlib.Path(info).relative_to(root) + except ValueError: # info is not relative to root. + return paths + if not info_rel.parts: # info *is* root. + return paths + return ( + _convert_installed_files_path(pathlib.Path(p).parts, info_rel.parts) + for p in paths + ) + + def iter_declared_entries(self) -> Optional[Iterator[str]]: + """Iterate through file entries declared in this distribution. + + For modern .dist-info distributions, this is the files listed in the + ``RECORD`` metadata file. For legacy setuptools distributions, this + comes from ``installed-files.txt``, with entries normalized to be + compatible with the format used by ``RECORD``. + + :return: An iterator for listed entries, or None if the distribution + contains neither ``RECORD`` nor ``installed-files.txt``. + """ + return ( + self._iter_declared_entries_from_record() + or self._iter_declared_entries_from_legacy() + ) + + def _iter_requires_txt_entries(self) -> Iterator[RequiresEntry]: + """Parse a ``requires.txt`` in an egg-info directory. + + This is an INI-ish format where an egg-info stores dependencies. A + section name describes extra other environment markers, while each entry + is an arbitrary string (not a key-value pair) representing a dependency + as a requirement string (no markers). + + There is a construct in ``importlib.metadata`` called ``Sectioned`` that + does mostly the same, but the format is currently considered private. + """ + try: + content = self.read_text("requires.txt") + except FileNotFoundError: + return + extra = marker = "" # Section-less entries don't have markers. + for line in content.splitlines(): + line = line.strip() + if not line or line.startswith("#"): # Comment; ignored. + continue + if line.startswith("[") and line.endswith("]"): # A section header. + extra, _, marker = line.strip("[]").partition(":") + continue + yield RequiresEntry(requirement=line, extra=extra, marker=marker) + + def _iter_egg_info_extras(self) -> Iterable[str]: + """Get extras from the egg-info directory.""" + known_extras = {""} + for entry in self._iter_requires_txt_entries(): + extra = canonicalize_name(entry.extra) + if extra in known_extras: + continue + known_extras.add(extra) + yield extra + + def _iter_egg_info_dependencies(self) -> Iterable[str]: + """Get distribution dependencies from the egg-info directory. + + To ease parsing, this converts a legacy dependency entry into a PEP 508 + requirement string. Like ``_iter_requires_txt_entries()``, there is code + in ``importlib.metadata`` that does mostly the same, but not do exactly + what we need. + + Namely, ``importlib.metadata`` does not normalize the extra name before + putting it into the requirement string, which causes marker comparison + to fail because the dist-info format do normalize. This is consistent in + all currently available PEP 517 backends, although not standardized. + """ + for entry in self._iter_requires_txt_entries(): + extra = canonicalize_name(entry.extra) + if extra and entry.marker: + marker = f'({entry.marker}) and extra == "{extra}"' + elif extra: + marker = f'extra == "{extra}"' + elif entry.marker: + marker = entry.marker + else: + marker = "" + if marker: + yield f"{entry.requirement} ; {marker}" + else: + yield entry.requirement + + def _add_egg_info_requires(self, metadata: email.message.Message) -> None: + """Add egg-info requires.txt information to the metadata.""" + if not metadata.get_all("Requires-Dist"): + for dep in self._iter_egg_info_dependencies(): + metadata["Requires-Dist"] = dep + if not metadata.get_all("Provides-Extra"): + for extra in self._iter_egg_info_extras(): + metadata["Provides-Extra"] = extra + + +class BaseEnvironment: + """An environment containing distributions to introspect.""" + + @classmethod + def default(cls) -> "BaseEnvironment": + raise NotImplementedError() + + @classmethod + def from_paths(cls, paths: Optional[List[str]]) -> "BaseEnvironment": + raise NotImplementedError() + + def get_distribution(self, name: str) -> Optional["BaseDistribution"]: + """Given a requirement name, return the installed distributions. + + The name may not be normalized. The implementation must canonicalize + it for lookup. + """ + raise NotImplementedError() + + def _iter_distributions(self) -> Iterator["BaseDistribution"]: + """Iterate through installed distributions. + + This function should be implemented by subclass, but never called + directly. Use the public ``iter_distribution()`` instead, which + implements additional logic to make sure the distributions are valid. + """ + raise NotImplementedError() + + def iter_all_distributions(self) -> Iterator[BaseDistribution]: + """Iterate through all installed distributions without any filtering.""" + for dist in self._iter_distributions(): + # Make sure the distribution actually comes from a valid Python + # packaging distribution. Pip's AdjacentTempDirectory leaves folders + # e.g. ``~atplotlib.dist-info`` if cleanup was interrupted. The + # valid project name pattern is taken from PEP 508. + project_name_valid = re.match( + r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", + dist.canonical_name, + flags=re.IGNORECASE, + ) + if not project_name_valid: + logger.warning( + "Ignoring invalid distribution %s (%s)", + dist.canonical_name, + dist.location, + ) + continue + yield dist + + def iter_installed_distributions( + self, + local_only: bool = True, + skip: Container[str] = stdlib_pkgs, + include_editables: bool = True, + editables_only: bool = False, + user_only: bool = False, + ) -> Iterator[BaseDistribution]: + """Return a list of installed distributions. + + This is based on ``iter_all_distributions()`` with additional filtering + options. Note that ``iter_installed_distributions()`` without arguments + is *not* equal to ``iter_all_distributions()``, since some of the + configurations exclude packages by default. + + :param local_only: If True (default), only return installations + local to the current virtualenv, if in a virtualenv. + :param skip: An iterable of canonicalized project names to ignore; + defaults to ``stdlib_pkgs``. + :param include_editables: If False, don't report editables. + :param editables_only: If True, only report editables. + :param user_only: If True, only report installations in the user + site directory. + """ + it = self.iter_all_distributions() + if local_only: + it = (d for d in it if d.local) + if not include_editables: + it = (d for d in it if not d.editable) + if editables_only: + it = (d for d in it if d.editable) + if user_only: + it = (d for d in it if d.in_usersite) + return (d for d in it if d.canonical_name not in skip) + + +class Wheel(Protocol): + location: str + + def as_zipfile(self) -> zipfile.ZipFile: + raise NotImplementedError() + + +class FilesystemWheel(Wheel): + def __init__(self, location: str) -> None: + self.location = location + + def as_zipfile(self) -> zipfile.ZipFile: + return zipfile.ZipFile(self.location, allowZip64=True) + + +class MemoryWheel(Wheel): + def __init__(self, location: str, stream: IO[bytes]) -> None: + self.location = location + self.stream = stream + + def as_zipfile(self) -> zipfile.ZipFile: + return zipfile.ZipFile(self.stream, allowZip64=True) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py new file mode 100644 index 0000000..a779138 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py @@ -0,0 +1,6 @@ +from ._dists import Distribution +from ._envs import Environment + +__all__ = ["NAME", "Distribution", "Environment"] + +NAME = "importlib" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..08fc41e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc new file mode 100644 index 0000000..e3dcbcc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc new file mode 100644 index 0000000..34d7f09 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc new file mode 100644 index 0000000..a17783c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py new file mode 100644 index 0000000..593bff2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py @@ -0,0 +1,55 @@ +import importlib.metadata +from typing import Any, Optional, Protocol, cast + + +class BadMetadata(ValueError): + def __init__(self, dist: importlib.metadata.Distribution, *, reason: str) -> None: + self.dist = dist + self.reason = reason + + def __str__(self) -> str: + return f"Bad metadata in {self.dist} ({self.reason})" + + +class BasePath(Protocol): + """A protocol that various path objects conform. + + This exists because importlib.metadata uses both ``pathlib.Path`` and + ``zipfile.Path``, and we need a common base for type hints (Union does not + work well since ``zipfile.Path`` is too new for our linter setup). + + This does not mean to be exhaustive, but only contains things that present + in both classes *that we need*. + """ + + @property + def name(self) -> str: + raise NotImplementedError() + + @property + def parent(self) -> "BasePath": + raise NotImplementedError() + + +def get_info_location(d: importlib.metadata.Distribution) -> Optional[BasePath]: + """Find the path to the distribution's metadata directory. + + HACK: This relies on importlib.metadata's private ``_path`` attribute. Not + all distributions exist on disk, so importlib.metadata is correct to not + expose the attribute as public. But pip's code base is old and not as clean, + so we do this to avoid having to rewrite too many things. Hopefully we can + eliminate this some day. + """ + return getattr(d, "_path", None) + + +def get_dist_name(dist: importlib.metadata.Distribution) -> str: + """Get the distribution's project name. + + The ``name`` attribute is only available in Python 3.10 or later. We are + targeting exactly that, but Mypy does not know this. + """ + name = cast(Any, dist).name + if not isinstance(name, str): + raise BadMetadata(dist, reason="invalid metadata entry 'name'") + return name diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py new file mode 100644 index 0000000..26370fa --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py @@ -0,0 +1,227 @@ +import email.message +import importlib.metadata +import os +import pathlib +import zipfile +from typing import ( + Collection, + Dict, + Iterable, + Iterator, + Mapping, + Optional, + Sequence, + cast, +) + +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import InvalidWheel, UnsupportedWheel +from pip._internal.metadata.base import ( + BaseDistribution, + BaseEntryPoint, + DistributionVersion, + InfoPath, + Wheel, +) +from pip._internal.utils.misc import normalize_path +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file + +from ._compat import BasePath, get_dist_name + + +class WheelDistribution(importlib.metadata.Distribution): + """An ``importlib.metadata.Distribution`` read from a wheel. + + Although ``importlib.metadata.PathDistribution`` accepts ``zipfile.Path``, + its implementation is too "lazy" for pip's needs (we can't keep the ZipFile + handle open for the entire lifetime of the distribution object). + + This implementation eagerly reads the entire metadata directory into the + memory instead, and operates from that. + """ + + def __init__( + self, + files: Mapping[pathlib.PurePosixPath, bytes], + info_location: pathlib.PurePosixPath, + ) -> None: + self._files = files + self.info_location = info_location + + @classmethod + def from_zipfile( + cls, + zf: zipfile.ZipFile, + name: str, + location: str, + ) -> "WheelDistribution": + info_dir, _ = parse_wheel(zf, name) + paths = ( + (name, pathlib.PurePosixPath(name.split("/", 1)[-1])) + for name in zf.namelist() + if name.startswith(f"{info_dir}/") + ) + files = { + relpath: read_wheel_metadata_file(zf, fullpath) + for fullpath, relpath in paths + } + info_location = pathlib.PurePosixPath(location, info_dir) + return cls(files, info_location) + + def iterdir(self, path: InfoPath) -> Iterator[pathlib.PurePosixPath]: + # Only allow iterating through the metadata directory. + if pathlib.PurePosixPath(str(path)) in self._files: + return iter(self._files) + raise FileNotFoundError(path) + + def read_text(self, filename: str) -> Optional[str]: + try: + data = self._files[pathlib.PurePosixPath(filename)] + except KeyError: + return None + try: + text = data.decode("utf-8") + except UnicodeDecodeError as e: + wheel = self.info_location.parent + error = f"Error decoding metadata for {wheel}: {e} in {filename} file" + raise UnsupportedWheel(error) + return text + + +class Distribution(BaseDistribution): + def __init__( + self, + dist: importlib.metadata.Distribution, + info_location: Optional[BasePath], + installed_location: Optional[BasePath], + ) -> None: + self._dist = dist + self._info_location = info_location + self._installed_location = installed_location + + @classmethod + def from_directory(cls, directory: str) -> BaseDistribution: + info_location = pathlib.Path(directory) + dist = importlib.metadata.Distribution.at(info_location) + return cls(dist, info_location, info_location.parent) + + @classmethod + def from_metadata_file_contents( + cls, + metadata_contents: bytes, + filename: str, + project_name: str, + ) -> BaseDistribution: + # Generate temp dir to contain the metadata file, and write the file contents. + temp_dir = pathlib.Path( + TempDirectory(kind="metadata", globally_managed=True).path + ) + metadata_path = temp_dir / "METADATA" + metadata_path.write_bytes(metadata_contents) + # Construct dist pointing to the newly created directory. + dist = importlib.metadata.Distribution.at(metadata_path.parent) + return cls(dist, metadata_path.parent, None) + + @classmethod + def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: + try: + with wheel.as_zipfile() as zf: + dist = WheelDistribution.from_zipfile(zf, name, wheel.location) + except zipfile.BadZipFile as e: + raise InvalidWheel(wheel.location, name) from e + except UnsupportedWheel as e: + raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") + return cls(dist, dist.info_location, pathlib.PurePosixPath(wheel.location)) + + @property + def location(self) -> Optional[str]: + if self._info_location is None: + return None + return str(self._info_location.parent) + + @property + def info_location(self) -> Optional[str]: + if self._info_location is None: + return None + return str(self._info_location) + + @property + def installed_location(self) -> Optional[str]: + if self._installed_location is None: + return None + return normalize_path(str(self._installed_location)) + + def _get_dist_name_from_location(self) -> Optional[str]: + """Try to get the name from the metadata directory name. + + This is much faster than reading metadata. + """ + if self._info_location is None: + return None + stem, suffix = os.path.splitext(self._info_location.name) + if suffix not in (".dist-info", ".egg-info"): + return None + return stem.split("-", 1)[0] + + @property + def canonical_name(self) -> NormalizedName: + name = self._get_dist_name_from_location() or get_dist_name(self._dist) + return canonicalize_name(name) + + @property + def version(self) -> DistributionVersion: + return parse_version(self._dist.version) + + def is_file(self, path: InfoPath) -> bool: + return self._dist.read_text(str(path)) is not None + + def iter_distutils_script_names(self) -> Iterator[str]: + # A distutils installation is always "flat" (not in e.g. egg form), so + # if this distribution's info location is NOT a pathlib.Path (but e.g. + # zipfile.Path), it can never contain any distutils scripts. + if not isinstance(self._info_location, pathlib.Path): + return + for child in self._info_location.joinpath("scripts").iterdir(): + yield child.name + + def read_text(self, path: InfoPath) -> str: + content = self._dist.read_text(str(path)) + if content is None: + raise FileNotFoundError(path) + return content + + def iter_entry_points(self) -> Iterable[BaseEntryPoint]: + # importlib.metadata's EntryPoint structure sasitfies BaseEntryPoint. + return self._dist.entry_points + + def _metadata_impl(self) -> email.message.Message: + # From Python 3.10+, importlib.metadata declares PackageMetadata as the + # return type. This protocol is unfortunately a disaster now and misses + # a ton of fields that we need, including get() and get_payload(). We + # rely on the implementation that the object is actually a Message now, + # until upstream can improve the protocol. (python/cpython#94952) + return cast(email.message.Message, self._dist.metadata) + + def iter_provided_extras(self) -> Iterable[str]: + return self.metadata.get_all("Provides-Extra", []) + + def is_extra_provided(self, extra: str) -> bool: + return any( + canonicalize_name(provided_extra) == canonicalize_name(extra) + for provided_extra in self.metadata.get_all("Provides-Extra", []) + ) + + def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: + contexts: Sequence[Dict[str, str]] = [{"extra": e} for e in extras] + for req_string in self.metadata.get_all("Requires-Dist", []): + req = Requirement(req_string) + if not req.marker: + yield req + elif not extras and req.marker.evaluate({"extra": ""}): + yield req + elif any(req.marker.evaluate(context) for context in contexts): + yield req diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py new file mode 100644 index 0000000..048dc55 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py @@ -0,0 +1,189 @@ +import functools +import importlib.metadata +import logging +import os +import pathlib +import sys +import zipfile +import zipimport +from typing import Iterator, List, Optional, Sequence, Set, Tuple + +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name + +from pip._internal.metadata.base import BaseDistribution, BaseEnvironment +from pip._internal.models.wheel import Wheel +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.filetypes import WHEEL_EXTENSION + +from ._compat import BadMetadata, BasePath, get_dist_name, get_info_location +from ._dists import Distribution + +logger = logging.getLogger(__name__) + + +def _looks_like_wheel(location: str) -> bool: + if not location.endswith(WHEEL_EXTENSION): + return False + if not os.path.isfile(location): + return False + if not Wheel.wheel_file_re.match(os.path.basename(location)): + return False + return zipfile.is_zipfile(location) + + +class _DistributionFinder: + """Finder to locate distributions. + + The main purpose of this class is to memoize found distributions' names, so + only one distribution is returned for each package name. At lot of pip code + assumes this (because it is setuptools's behavior), and not doing the same + can potentially cause a distribution in lower precedence path to override a + higher precedence one if the caller is not careful. + + Eventually we probably want to make it possible to see lower precedence + installations as well. It's useful feature, after all. + """ + + FoundResult = Tuple[importlib.metadata.Distribution, Optional[BasePath]] + + def __init__(self) -> None: + self._found_names: Set[NormalizedName] = set() + + def _find_impl(self, location: str) -> Iterator[FoundResult]: + """Find distributions in a location.""" + # Skip looking inside a wheel. Since a package inside a wheel is not + # always valid (due to .data directories etc.), its .dist-info entry + # should not be considered an installed distribution. + if _looks_like_wheel(location): + return + # To know exactly where we find a distribution, we have to feed in the + # paths one by one, instead of dumping the list to importlib.metadata. + for dist in importlib.metadata.distributions(path=[location]): + info_location = get_info_location(dist) + try: + raw_name = get_dist_name(dist) + except BadMetadata as e: + logger.warning("Skipping %s due to %s", info_location, e.reason) + continue + normalized_name = canonicalize_name(raw_name) + if normalized_name in self._found_names: + continue + self._found_names.add(normalized_name) + yield dist, info_location + + def find(self, location: str) -> Iterator[BaseDistribution]: + """Find distributions in a location. + + The path can be either a directory, or a ZIP archive. + """ + for dist, info_location in self._find_impl(location): + if info_location is None: + installed_location: Optional[BasePath] = None + else: + installed_location = info_location.parent + yield Distribution(dist, info_location, installed_location) + + def find_linked(self, location: str) -> Iterator[BaseDistribution]: + """Read location in egg-link files and return distributions in there. + + The path should be a directory; otherwise this returns nothing. This + follows how setuptools does this for compatibility. The first non-empty + line in the egg-link is read as a path (resolved against the egg-link's + containing directory if relative). Distributions found at that linked + location are returned. + """ + path = pathlib.Path(location) + if not path.is_dir(): + return + for child in path.iterdir(): + if child.suffix != ".egg-link": + continue + with child.open() as f: + lines = (line.strip() for line in f) + target_rel = next((line for line in lines if line), "") + if not target_rel: + continue + target_location = str(path.joinpath(target_rel)) + for dist, info_location in self._find_impl(target_location): + yield Distribution(dist, info_location, path) + + def _find_eggs_in_dir(self, location: str) -> Iterator[BaseDistribution]: + from pip._vendor.pkg_resources import find_distributions + + from pip._internal.metadata import pkg_resources as legacy + + with os.scandir(location) as it: + for entry in it: + if not entry.name.endswith(".egg"): + continue + for dist in find_distributions(entry.path): + yield legacy.Distribution(dist) + + def _find_eggs_in_zip(self, location: str) -> Iterator[BaseDistribution]: + from pip._vendor.pkg_resources import find_eggs_in_zip + + from pip._internal.metadata import pkg_resources as legacy + + try: + importer = zipimport.zipimporter(location) + except zipimport.ZipImportError: + return + for dist in find_eggs_in_zip(importer, location): + yield legacy.Distribution(dist) + + def find_eggs(self, location: str) -> Iterator[BaseDistribution]: + """Find eggs in a location. + + This actually uses the old *pkg_resources* backend. We likely want to + deprecate this so we can eventually remove the *pkg_resources* + dependency entirely. Before that, this should first emit a deprecation + warning for some versions when using the fallback since importing + *pkg_resources* is slow for those who don't need it. + """ + if os.path.isdir(location): + yield from self._find_eggs_in_dir(location) + if zipfile.is_zipfile(location): + yield from self._find_eggs_in_zip(location) + + +@functools.lru_cache(maxsize=None) # Warn a distribution exactly once. +def _emit_egg_deprecation(location: Optional[str]) -> None: + deprecated( + reason=f"Loading egg at {location} is deprecated.", + replacement="to use pip for package installation.", + gone_in="24.3", + issue=12330, + ) + + +class Environment(BaseEnvironment): + def __init__(self, paths: Sequence[str]) -> None: + self._paths = paths + + @classmethod + def default(cls) -> BaseEnvironment: + return cls(sys.path) + + @classmethod + def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment: + if paths is None: + return cls(sys.path) + return cls(paths) + + def _iter_distributions(self) -> Iterator[BaseDistribution]: + finder = _DistributionFinder() + for location in self._paths: + yield from finder.find(location) + for dist in finder.find_eggs(location): + _emit_egg_deprecation(dist.location) + yield dist + # This must go last because that's how pkg_resources tie-breaks. + yield from finder.find_linked(location) + + def get_distribution(self, name: str) -> Optional[BaseDistribution]: + matches = ( + distribution + for distribution in self.iter_all_distributions() + if distribution.canonical_name == canonicalize_name(name) + ) + return next(matches, None) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py b/venv/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py new file mode 100644 index 0000000..bb11e5b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py @@ -0,0 +1,278 @@ +import email.message +import email.parser +import logging +import os +import zipfile +from typing import Collection, Iterable, Iterator, List, Mapping, NamedTuple, Optional + +from pip._vendor import pkg_resources +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.exceptions import InvalidWheel, NoneMetadataError, UnsupportedWheel +from pip._internal.utils.egg_link import egg_link_path_from_location +from pip._internal.utils.misc import display_path, normalize_path +from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file + +from .base import ( + BaseDistribution, + BaseEntryPoint, + BaseEnvironment, + DistributionVersion, + InfoPath, + Wheel, +) + +__all__ = ["NAME", "Distribution", "Environment"] + +logger = logging.getLogger(__name__) + +NAME = "pkg_resources" + + +class EntryPoint(NamedTuple): + name: str + value: str + group: str + + +class InMemoryMetadata: + """IMetadataProvider that reads metadata files from a dictionary. + + This also maps metadata decoding exceptions to our internal exception type. + """ + + def __init__(self, metadata: Mapping[str, bytes], wheel_name: str) -> None: + self._metadata = metadata + self._wheel_name = wheel_name + + def has_metadata(self, name: str) -> bool: + return name in self._metadata + + def get_metadata(self, name: str) -> str: + try: + return self._metadata[name].decode() + except UnicodeDecodeError as e: + # Augment the default error with the origin of the file. + raise UnsupportedWheel( + f"Error decoding metadata for {self._wheel_name}: {e} in {name} file" + ) + + def get_metadata_lines(self, name: str) -> Iterable[str]: + return pkg_resources.yield_lines(self.get_metadata(name)) + + def metadata_isdir(self, name: str) -> bool: + return False + + def metadata_listdir(self, name: str) -> List[str]: + return [] + + def run_script(self, script_name: str, namespace: str) -> None: + pass + + +class Distribution(BaseDistribution): + def __init__(self, dist: pkg_resources.Distribution) -> None: + self._dist = dist + + @classmethod + def from_directory(cls, directory: str) -> BaseDistribution: + dist_dir = directory.rstrip(os.sep) + + # Build a PathMetadata object, from path to metadata. :wink: + base_dir, dist_dir_name = os.path.split(dist_dir) + metadata = pkg_resources.PathMetadata(base_dir, dist_dir) + + # Determine the correct Distribution object type. + if dist_dir.endswith(".egg-info"): + dist_cls = pkg_resources.Distribution + dist_name = os.path.splitext(dist_dir_name)[0] + else: + assert dist_dir.endswith(".dist-info") + dist_cls = pkg_resources.DistInfoDistribution + dist_name = os.path.splitext(dist_dir_name)[0].split("-")[0] + + dist = dist_cls(base_dir, project_name=dist_name, metadata=metadata) + return cls(dist) + + @classmethod + def from_metadata_file_contents( + cls, + metadata_contents: bytes, + filename: str, + project_name: str, + ) -> BaseDistribution: + metadata_dict = { + "METADATA": metadata_contents, + } + dist = pkg_resources.DistInfoDistribution( + location=filename, + metadata=InMemoryMetadata(metadata_dict, filename), + project_name=project_name, + ) + return cls(dist) + + @classmethod + def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: + try: + with wheel.as_zipfile() as zf: + info_dir, _ = parse_wheel(zf, name) + metadata_dict = { + path.split("/", 1)[-1]: read_wheel_metadata_file(zf, path) + for path in zf.namelist() + if path.startswith(f"{info_dir}/") + } + except zipfile.BadZipFile as e: + raise InvalidWheel(wheel.location, name) from e + except UnsupportedWheel as e: + raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") + dist = pkg_resources.DistInfoDistribution( + location=wheel.location, + metadata=InMemoryMetadata(metadata_dict, wheel.location), + project_name=name, + ) + return cls(dist) + + @property + def location(self) -> Optional[str]: + return self._dist.location + + @property + def installed_location(self) -> Optional[str]: + egg_link = egg_link_path_from_location(self.raw_name) + if egg_link: + location = egg_link + elif self.location: + location = self.location + else: + return None + return normalize_path(location) + + @property + def info_location(self) -> Optional[str]: + return self._dist.egg_info + + @property + def installed_by_distutils(self) -> bool: + # A distutils-installed distribution is provided by FileMetadata. This + # provider has a "path" attribute not present anywhere else. Not the + # best introspection logic, but pip has been doing this for a long time. + try: + return bool(self._dist._provider.path) + except AttributeError: + return False + + @property + def canonical_name(self) -> NormalizedName: + return canonicalize_name(self._dist.project_name) + + @property + def version(self) -> DistributionVersion: + return parse_version(self._dist.version) + + def is_file(self, path: InfoPath) -> bool: + return self._dist.has_metadata(str(path)) + + def iter_distutils_script_names(self) -> Iterator[str]: + yield from self._dist.metadata_listdir("scripts") + + def read_text(self, path: InfoPath) -> str: + name = str(path) + if not self._dist.has_metadata(name): + raise FileNotFoundError(name) + content = self._dist.get_metadata(name) + if content is None: + raise NoneMetadataError(self, name) + return content + + def iter_entry_points(self) -> Iterable[BaseEntryPoint]: + for group, entries in self._dist.get_entry_map().items(): + for name, entry_point in entries.items(): + name, _, value = str(entry_point).partition("=") + yield EntryPoint(name=name.strip(), value=value.strip(), group=group) + + def _metadata_impl(self) -> email.message.Message: + """ + :raises NoneMetadataError: if the distribution reports `has_metadata()` + True but `get_metadata()` returns None. + """ + if isinstance(self._dist, pkg_resources.DistInfoDistribution): + metadata_name = "METADATA" + else: + metadata_name = "PKG-INFO" + try: + metadata = self.read_text(metadata_name) + except FileNotFoundError: + if self.location: + displaying_path = display_path(self.location) + else: + displaying_path = repr(self.location) + logger.warning("No metadata found in %s", displaying_path) + metadata = "" + feed_parser = email.parser.FeedParser() + feed_parser.feed(metadata) + return feed_parser.close() + + def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: + if extras: # pkg_resources raises on invalid extras, so we sanitize. + extras = frozenset(pkg_resources.safe_extra(e) for e in extras) + extras = extras.intersection(self._dist.extras) + return self._dist.requires(extras) + + def iter_provided_extras(self) -> Iterable[str]: + return self._dist.extras + + def is_extra_provided(self, extra: str) -> bool: + return pkg_resources.safe_extra(extra) in self._dist.extras + + +class Environment(BaseEnvironment): + def __init__(self, ws: pkg_resources.WorkingSet) -> None: + self._ws = ws + + @classmethod + def default(cls) -> BaseEnvironment: + return cls(pkg_resources.working_set) + + @classmethod + def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment: + return cls(pkg_resources.WorkingSet(paths)) + + def _iter_distributions(self) -> Iterator[BaseDistribution]: + for dist in self._ws: + yield Distribution(dist) + + def _search_distribution(self, name: str) -> Optional[BaseDistribution]: + """Find a distribution matching the ``name`` in the environment. + + This searches from *all* distributions available in the environment, to + match the behavior of ``pkg_resources.get_distribution()``. + """ + canonical_name = canonicalize_name(name) + for dist in self.iter_all_distributions(): + if dist.canonical_name == canonical_name: + return dist + return None + + def get_distribution(self, name: str) -> Optional[BaseDistribution]: + # Search the distribution by looking through the working set. + dist = self._search_distribution(name) + if dist: + return dist + + # If distribution could not be found, call working_set.require to + # update the working set, and try to find the distribution again. + # This might happen for e.g. when you install a package twice, once + # using setup.py develop and again using setup.py install. Now when + # running pip uninstall twice, the package gets removed from the + # working set in the first uninstall, so we have to populate the + # working set again so that pip knows about it and the packages gets + # picked up and is successfully uninstalled the second time too. + try: + # We didn't pass in any version specifiers, so this can never + # raise pkg_resources.VersionConflict. + self._ws.require(name) + except pkg_resources.DistributionNotFound: + return None + return self._search_distribution(name) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/models/__init__.py new file mode 100644 index 0000000..7855226 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/__init__.py @@ -0,0 +1,2 @@ +"""A package that contains models that represent entities. +""" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..2be3a43 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc new file mode 100644 index 0000000..428e3ac Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc new file mode 100644 index 0000000..158e947 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc new file mode 100644 index 0000000..f6326e0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc new file mode 100644 index 0000000..75440c4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc new file mode 100644 index 0000000..1f00142 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc new file mode 100644 index 0000000..a6cee93 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc new file mode 100644 index 0000000..8f4b905 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc new file mode 100644 index 0000000..9784fa0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc new file mode 100644 index 0000000..7f31eaa Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc new file mode 100644 index 0000000..2186e79 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc new file mode 100644 index 0000000..3e0748e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/candidate.py b/venv/lib/python3.12/site-packages/pip/_internal/models/candidate.py new file mode 100644 index 0000000..9184a90 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/candidate.py @@ -0,0 +1,30 @@ +from pip._vendor.packaging.version import parse as parse_version + +from pip._internal.models.link import Link +from pip._internal.utils.models import KeyBasedCompareMixin + + +class InstallationCandidate(KeyBasedCompareMixin): + """Represents a potential "candidate" for installation.""" + + __slots__ = ["name", "version", "link"] + + def __init__(self, name: str, version: str, link: Link) -> None: + self.name = name + self.version = parse_version(version) + self.link = link + + super().__init__( + key=(self.name, self.version, self.link), + defining_class=InstallationCandidate, + ) + + def __repr__(self) -> str: + return "".format( + self.name, + self.version, + self.link, + ) + + def __str__(self) -> str: + return f"{self.name!r} candidate (version {self.version} at {self.link})" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py b/venv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py new file mode 100644 index 0000000..0af884b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py @@ -0,0 +1,235 @@ +""" PEP 610 """ +import json +import re +import urllib.parse +from typing import Any, Dict, Iterable, Optional, Type, TypeVar, Union + +__all__ = [ + "DirectUrl", + "DirectUrlValidationError", + "DirInfo", + "ArchiveInfo", + "VcsInfo", +] + +T = TypeVar("T") + +DIRECT_URL_METADATA_NAME = "direct_url.json" +ENV_VAR_RE = re.compile(r"^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$") + + +class DirectUrlValidationError(Exception): + pass + + +def _get( + d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None +) -> Optional[T]: + """Get value from dictionary and verify expected type.""" + if key not in d: + return default + value = d[key] + if not isinstance(value, expected_type): + raise DirectUrlValidationError( + f"{value!r} has unexpected type for {key} (expected {expected_type})" + ) + return value + + +def _get_required( + d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None +) -> T: + value = _get(d, expected_type, key, default) + if value is None: + raise DirectUrlValidationError(f"{key} must have a value") + return value + + +def _exactly_one_of(infos: Iterable[Optional["InfoType"]]) -> "InfoType": + infos = [info for info in infos if info is not None] + if not infos: + raise DirectUrlValidationError( + "missing one of archive_info, dir_info, vcs_info" + ) + if len(infos) > 1: + raise DirectUrlValidationError( + "more than one of archive_info, dir_info, vcs_info" + ) + assert infos[0] is not None + return infos[0] + + +def _filter_none(**kwargs: Any) -> Dict[str, Any]: + """Make dict excluding None values.""" + return {k: v for k, v in kwargs.items() if v is not None} + + +class VcsInfo: + name = "vcs_info" + + def __init__( + self, + vcs: str, + commit_id: str, + requested_revision: Optional[str] = None, + ) -> None: + self.vcs = vcs + self.requested_revision = requested_revision + self.commit_id = commit_id + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["VcsInfo"]: + if d is None: + return None + return cls( + vcs=_get_required(d, str, "vcs"), + commit_id=_get_required(d, str, "commit_id"), + requested_revision=_get(d, str, "requested_revision"), + ) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none( + vcs=self.vcs, + requested_revision=self.requested_revision, + commit_id=self.commit_id, + ) + + +class ArchiveInfo: + name = "archive_info" + + def __init__( + self, + hash: Optional[str] = None, + hashes: Optional[Dict[str, str]] = None, + ) -> None: + # set hashes before hash, since the hash setter will further populate hashes + self.hashes = hashes + self.hash = hash + + @property + def hash(self) -> Optional[str]: + return self._hash + + @hash.setter + def hash(self, value: Optional[str]) -> None: + if value is not None: + # Auto-populate the hashes key to upgrade to the new format automatically. + # We don't back-populate the legacy hash key from hashes. + try: + hash_name, hash_value = value.split("=", 1) + except ValueError: + raise DirectUrlValidationError( + f"invalid archive_info.hash format: {value!r}" + ) + if self.hashes is None: + self.hashes = {hash_name: hash_value} + elif hash_name not in self.hashes: + self.hashes = self.hashes.copy() + self.hashes[hash_name] = hash_value + self._hash = value + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["ArchiveInfo"]: + if d is None: + return None + return cls(hash=_get(d, str, "hash"), hashes=_get(d, dict, "hashes")) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none(hash=self.hash, hashes=self.hashes) + + +class DirInfo: + name = "dir_info" + + def __init__( + self, + editable: bool = False, + ) -> None: + self.editable = editable + + @classmethod + def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["DirInfo"]: + if d is None: + return None + return cls(editable=_get_required(d, bool, "editable", default=False)) + + def _to_dict(self) -> Dict[str, Any]: + return _filter_none(editable=self.editable or None) + + +InfoType = Union[ArchiveInfo, DirInfo, VcsInfo] + + +class DirectUrl: + def __init__( + self, + url: str, + info: InfoType, + subdirectory: Optional[str] = None, + ) -> None: + self.url = url + self.info = info + self.subdirectory = subdirectory + + def _remove_auth_from_netloc(self, netloc: str) -> str: + if "@" not in netloc: + return netloc + user_pass, netloc_no_user_pass = netloc.split("@", 1) + if ( + isinstance(self.info, VcsInfo) + and self.info.vcs == "git" + and user_pass == "git" + ): + return netloc + if ENV_VAR_RE.match(user_pass): + return netloc + return netloc_no_user_pass + + @property + def redacted_url(self) -> str: + """url with user:password part removed unless it is formed with + environment variables as specified in PEP 610, or it is ``git`` + in the case of a git URL. + """ + purl = urllib.parse.urlsplit(self.url) + netloc = self._remove_auth_from_netloc(purl.netloc) + surl = urllib.parse.urlunsplit( + (purl.scheme, netloc, purl.path, purl.query, purl.fragment) + ) + return surl + + def validate(self) -> None: + self.from_dict(self.to_dict()) + + @classmethod + def from_dict(cls, d: Dict[str, Any]) -> "DirectUrl": + return DirectUrl( + url=_get_required(d, str, "url"), + subdirectory=_get(d, str, "subdirectory"), + info=_exactly_one_of( + [ + ArchiveInfo._from_dict(_get(d, dict, "archive_info")), + DirInfo._from_dict(_get(d, dict, "dir_info")), + VcsInfo._from_dict(_get(d, dict, "vcs_info")), + ] + ), + ) + + def to_dict(self) -> Dict[str, Any]: + res = _filter_none( + url=self.redacted_url, + subdirectory=self.subdirectory, + ) + res[self.info.name] = self.info._to_dict() + return res + + @classmethod + def from_json(cls, s: str) -> "DirectUrl": + return cls.from_dict(json.loads(s)) + + def to_json(self) -> str: + return json.dumps(self.to_dict(), sort_keys=True) + + def is_local_editable(self) -> bool: + return isinstance(self.info, DirInfo) and self.info.editable diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/format_control.py b/venv/lib/python3.12/site-packages/pip/_internal/models/format_control.py new file mode 100644 index 0000000..ccd1127 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/format_control.py @@ -0,0 +1,78 @@ +from typing import FrozenSet, Optional, Set + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import CommandError + + +class FormatControl: + """Helper for managing formats from which a package can be installed.""" + + __slots__ = ["no_binary", "only_binary"] + + def __init__( + self, + no_binary: Optional[Set[str]] = None, + only_binary: Optional[Set[str]] = None, + ) -> None: + if no_binary is None: + no_binary = set() + if only_binary is None: + only_binary = set() + + self.no_binary = no_binary + self.only_binary = only_binary + + def __eq__(self, other: object) -> bool: + if not isinstance(other, self.__class__): + return NotImplemented + + if self.__slots__ != other.__slots__: + return False + + return all(getattr(self, k) == getattr(other, k) for k in self.__slots__) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self.no_binary}, {self.only_binary})" + + @staticmethod + def handle_mutual_excludes(value: str, target: Set[str], other: Set[str]) -> None: + if value.startswith("-"): + raise CommandError( + "--no-binary / --only-binary option requires 1 argument." + ) + new = value.split(",") + while ":all:" in new: + other.clear() + target.clear() + target.add(":all:") + del new[: new.index(":all:") + 1] + # Without a none, we want to discard everything as :all: covers it + if ":none:" not in new: + return + for name in new: + if name == ":none:": + target.clear() + continue + name = canonicalize_name(name) + other.discard(name) + target.add(name) + + def get_allowed_formats(self, canonical_name: str) -> FrozenSet[str]: + result = {"binary", "source"} + if canonical_name in self.only_binary: + result.discard("source") + elif canonical_name in self.no_binary: + result.discard("binary") + elif ":all:" in self.only_binary: + result.discard("source") + elif ":all:" in self.no_binary: + result.discard("binary") + return frozenset(result) + + def disallow_binaries(self) -> None: + self.handle_mutual_excludes( + ":all:", + self.no_binary, + self.only_binary, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/index.py b/venv/lib/python3.12/site-packages/pip/_internal/models/index.py new file mode 100644 index 0000000..b94c325 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/index.py @@ -0,0 +1,28 @@ +import urllib.parse + + +class PackageIndex: + """Represents a Package Index and provides easier access to endpoints""" + + __slots__ = ["url", "netloc", "simple_url", "pypi_url", "file_storage_domain"] + + def __init__(self, url: str, file_storage_domain: str) -> None: + super().__init__() + self.url = url + self.netloc = urllib.parse.urlsplit(url).netloc + self.simple_url = self._url_for_path("simple") + self.pypi_url = self._url_for_path("pypi") + + # This is part of a temporary hack used to block installs of PyPI + # packages which depend on external urls only necessary until PyPI can + # block such packages themselves + self.file_storage_domain = file_storage_domain + + def _url_for_path(self, path: str) -> str: + return urllib.parse.urljoin(self.url, path) + + +PyPI = PackageIndex("https://pypi.org/", file_storage_domain="files.pythonhosted.org") +TestPyPI = PackageIndex( + "https://test.pypi.org/", file_storage_domain="test-files.pythonhosted.org" +) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/installation_report.py b/venv/lib/python3.12/site-packages/pip/_internal/models/installation_report.py new file mode 100644 index 0000000..b9c6330 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/installation_report.py @@ -0,0 +1,56 @@ +from typing import Any, Dict, Sequence + +from pip._vendor.packaging.markers import default_environment + +from pip import __version__ +from pip._internal.req.req_install import InstallRequirement + + +class InstallationReport: + def __init__(self, install_requirements: Sequence[InstallRequirement]): + self._install_requirements = install_requirements + + @classmethod + def _install_req_to_dict(cls, ireq: InstallRequirement) -> Dict[str, Any]: + assert ireq.download_info, f"No download_info for {ireq}" + res = { + # PEP 610 json for the download URL. download_info.archive_info.hashes may + # be absent when the requirement was installed from the wheel cache + # and the cache entry was populated by an older pip version that did not + # record origin.json. + "download_info": ireq.download_info.to_dict(), + # is_direct is true if the requirement was a direct URL reference (which + # includes editable requirements), and false if the requirement was + # downloaded from a PEP 503 index or --find-links. + "is_direct": ireq.is_direct, + # is_yanked is true if the requirement was yanked from the index, but + # was still selected by pip to conform to PEP 592. + "is_yanked": ireq.link.is_yanked if ireq.link else False, + # requested is true if the requirement was specified by the user (aka + # top level requirement), and false if it was installed as a dependency of a + # requirement. https://peps.python.org/pep-0376/#requested + "requested": ireq.user_supplied, + # PEP 566 json encoding for metadata + # https://www.python.org/dev/peps/pep-0566/#json-compatible-metadata + "metadata": ireq.get_dist().metadata_dict, + } + if ireq.user_supplied and ireq.extras: + # For top level requirements, the list of requested extras, if any. + res["requested_extras"] = sorted(ireq.extras) + return res + + def to_dict(self) -> Dict[str, Any]: + return { + "version": "1", + "pip_version": __version__, + "install": [ + self._install_req_to_dict(ireq) for ireq in self._install_requirements + ], + # https://peps.python.org/pep-0508/#environment-markers + # TODO: currently, the resolver uses the default environment to evaluate + # environment markers, so that is what we report here. In the future, it + # should also take into account options such as --python-version or + # --platform, perhaps under the form of an environment_override field? + # https://github.com/pypa/pip/issues/11198 + "environment": default_environment(), + } diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/link.py b/venv/lib/python3.12/site-packages/pip/_internal/models/link.py new file mode 100644 index 0000000..73041b8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/link.py @@ -0,0 +1,579 @@ +import functools +import itertools +import logging +import os +import posixpath +import re +import urllib.parse +from dataclasses import dataclass +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Mapping, + NamedTuple, + Optional, + Tuple, + Union, +) + +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.filetypes import WHEEL_EXTENSION +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.misc import ( + pairwise, + redact_auth_from_url, + split_auth_from_netloc, + splitext, +) +from pip._internal.utils.models import KeyBasedCompareMixin +from pip._internal.utils.urls import path_to_url, url_to_path + +if TYPE_CHECKING: + from pip._internal.index.collector import IndexContent + +logger = logging.getLogger(__name__) + + +# Order matters, earlier hashes have a precedence over later hashes for what +# we will pick to use. +_SUPPORTED_HASHES = ("sha512", "sha384", "sha256", "sha224", "sha1", "md5") + + +@dataclass(frozen=True) +class LinkHash: + """Links to content may have embedded hash values. This class parses those. + + `name` must be any member of `_SUPPORTED_HASHES`. + + This class can be converted to and from `ArchiveInfo`. While ArchiveInfo intends to + be JSON-serializable to conform to PEP 610, this class contains the logic for + parsing a hash name and value for correctness, and then checking whether that hash + conforms to a schema with `.is_hash_allowed()`.""" + + name: str + value: str + + _hash_url_fragment_re = re.compile( + # NB: we do not validate that the second group (.*) is a valid hex + # digest. Instead, we simply keep that string in this class, and then check it + # against Hashes when hash-checking is needed. This is easier to debug than + # proactively discarding an invalid hex digest, as we handle incorrect hashes + # and malformed hashes in the same place. + r"[#&]({choices})=([^&]*)".format( + choices="|".join(re.escape(hash_name) for hash_name in _SUPPORTED_HASHES) + ), + ) + + def __post_init__(self) -> None: + assert self.name in _SUPPORTED_HASHES + + @classmethod + @functools.lru_cache(maxsize=None) + def find_hash_url_fragment(cls, url: str) -> Optional["LinkHash"]: + """Search a string for a checksum algorithm name and encoded output value.""" + match = cls._hash_url_fragment_re.search(url) + if match is None: + return None + name, value = match.groups() + return cls(name=name, value=value) + + def as_dict(self) -> Dict[str, str]: + return {self.name: self.value} + + def as_hashes(self) -> Hashes: + """Return a Hashes instance which checks only for the current hash.""" + return Hashes({self.name: [self.value]}) + + def is_hash_allowed(self, hashes: Optional[Hashes]) -> bool: + """ + Return True if the current hash is allowed by `hashes`. + """ + if hashes is None: + return False + return hashes.is_hash_allowed(self.name, hex_digest=self.value) + + +@dataclass(frozen=True) +class MetadataFile: + """Information about a core metadata file associated with a distribution.""" + + hashes: Optional[Dict[str, str]] + + def __post_init__(self) -> None: + if self.hashes is not None: + assert all(name in _SUPPORTED_HASHES for name in self.hashes) + + +def supported_hashes(hashes: Optional[Dict[str, str]]) -> Optional[Dict[str, str]]: + # Remove any unsupported hash types from the mapping. If this leaves no + # supported hashes, return None + if hashes is None: + return None + hashes = {n: v for n, v in hashes.items() if n in _SUPPORTED_HASHES} + if not hashes: + return None + return hashes + + +def _clean_url_path_part(part: str) -> str: + """ + Clean a "part" of a URL path (i.e. after splitting on "@" characters). + """ + # We unquote prior to quoting to make sure nothing is double quoted. + return urllib.parse.quote(urllib.parse.unquote(part)) + + +def _clean_file_url_path(part: str) -> str: + """ + Clean the first part of a URL path that corresponds to a local + filesystem path (i.e. the first part after splitting on "@" characters). + """ + # We unquote prior to quoting to make sure nothing is double quoted. + # Also, on Windows the path part might contain a drive letter which + # should not be quoted. On Linux where drive letters do not + # exist, the colon should be quoted. We rely on urllib.request + # to do the right thing here. + return urllib.request.pathname2url(urllib.request.url2pathname(part)) + + +# percent-encoded: / +_reserved_chars_re = re.compile("(@|%2F)", re.IGNORECASE) + + +def _clean_url_path(path: str, is_local_path: bool) -> str: + """ + Clean the path portion of a URL. + """ + if is_local_path: + clean_func = _clean_file_url_path + else: + clean_func = _clean_url_path_part + + # Split on the reserved characters prior to cleaning so that + # revision strings in VCS URLs are properly preserved. + parts = _reserved_chars_re.split(path) + + cleaned_parts = [] + for to_clean, reserved in pairwise(itertools.chain(parts, [""])): + cleaned_parts.append(clean_func(to_clean)) + # Normalize %xx escapes (e.g. %2f -> %2F) + cleaned_parts.append(reserved.upper()) + + return "".join(cleaned_parts) + + +def _ensure_quoted_url(url: str) -> str: + """ + Make sure a link is fully quoted. + For example, if ' ' occurs in the URL, it will be replaced with "%20", + and without double-quoting other characters. + """ + # Split the URL into parts according to the general structure + # `scheme://netloc/path;parameters?query#fragment`. + result = urllib.parse.urlparse(url) + # If the netloc is empty, then the URL refers to a local filesystem path. + is_local_path = not result.netloc + path = _clean_url_path(result.path, is_local_path=is_local_path) + return urllib.parse.urlunparse(result._replace(path=path)) + + +class Link(KeyBasedCompareMixin): + """Represents a parsed link from a Package Index's simple URL""" + + __slots__ = [ + "_parsed_url", + "_url", + "_hashes", + "comes_from", + "requires_python", + "yanked_reason", + "metadata_file_data", + "cache_link_parsing", + "egg_fragment", + ] + + def __init__( + self, + url: str, + comes_from: Optional[Union[str, "IndexContent"]] = None, + requires_python: Optional[str] = None, + yanked_reason: Optional[str] = None, + metadata_file_data: Optional[MetadataFile] = None, + cache_link_parsing: bool = True, + hashes: Optional[Mapping[str, str]] = None, + ) -> None: + """ + :param url: url of the resource pointed to (href of the link) + :param comes_from: instance of IndexContent where the link was found, + or string. + :param requires_python: String containing the `Requires-Python` + metadata field, specified in PEP 345. This may be specified by + a data-requires-python attribute in the HTML link tag, as + described in PEP 503. + :param yanked_reason: the reason the file has been yanked, if the + file has been yanked, or None if the file hasn't been yanked. + This is the value of the "data-yanked" attribute, if present, in + a simple repository HTML link. If the file has been yanked but + no reason was provided, this should be the empty string. See + PEP 592 for more information and the specification. + :param metadata_file_data: the metadata attached to the file, or None if + no such metadata is provided. This argument, if not None, indicates + that a separate metadata file exists, and also optionally supplies + hashes for that file. + :param cache_link_parsing: A flag that is used elsewhere to determine + whether resources retrieved from this link should be cached. PyPI + URLs should generally have this set to False, for example. + :param hashes: A mapping of hash names to digests to allow us to + determine the validity of a download. + """ + + # The comes_from, requires_python, and metadata_file_data arguments are + # only used by classmethods of this class, and are not used in client + # code directly. + + # url can be a UNC windows share + if url.startswith("\\\\"): + url = path_to_url(url) + + self._parsed_url = urllib.parse.urlsplit(url) + # Store the url as a private attribute to prevent accidentally + # trying to set a new value. + self._url = url + + link_hash = LinkHash.find_hash_url_fragment(url) + hashes_from_link = {} if link_hash is None else link_hash.as_dict() + if hashes is None: + self._hashes = hashes_from_link + else: + self._hashes = {**hashes, **hashes_from_link} + + self.comes_from = comes_from + self.requires_python = requires_python if requires_python else None + self.yanked_reason = yanked_reason + self.metadata_file_data = metadata_file_data + + super().__init__(key=url, defining_class=Link) + + self.cache_link_parsing = cache_link_parsing + self.egg_fragment = self._egg_fragment() + + @classmethod + def from_json( + cls, + file_data: Dict[str, Any], + page_url: str, + ) -> Optional["Link"]: + """ + Convert an pypi json document from a simple repository page into a Link. + """ + file_url = file_data.get("url") + if file_url is None: + return None + + url = _ensure_quoted_url(urllib.parse.urljoin(page_url, file_url)) + pyrequire = file_data.get("requires-python") + yanked_reason = file_data.get("yanked") + hashes = file_data.get("hashes", {}) + + # PEP 714: Indexes must use the name core-metadata, but + # clients should support the old name as a fallback for compatibility. + metadata_info = file_data.get("core-metadata") + if metadata_info is None: + metadata_info = file_data.get("dist-info-metadata") + + # The metadata info value may be a boolean, or a dict of hashes. + if isinstance(metadata_info, dict): + # The file exists, and hashes have been supplied + metadata_file_data = MetadataFile(supported_hashes(metadata_info)) + elif metadata_info: + # The file exists, but there are no hashes + metadata_file_data = MetadataFile(None) + else: + # False or not present: the file does not exist + metadata_file_data = None + + # The Link.yanked_reason expects an empty string instead of a boolean. + if yanked_reason and not isinstance(yanked_reason, str): + yanked_reason = "" + # The Link.yanked_reason expects None instead of False. + elif not yanked_reason: + yanked_reason = None + + return cls( + url, + comes_from=page_url, + requires_python=pyrequire, + yanked_reason=yanked_reason, + hashes=hashes, + metadata_file_data=metadata_file_data, + ) + + @classmethod + def from_element( + cls, + anchor_attribs: Dict[str, Optional[str]], + page_url: str, + base_url: str, + ) -> Optional["Link"]: + """ + Convert an anchor element's attributes in a simple repository page to a Link. + """ + href = anchor_attribs.get("href") + if not href: + return None + + url = _ensure_quoted_url(urllib.parse.urljoin(base_url, href)) + pyrequire = anchor_attribs.get("data-requires-python") + yanked_reason = anchor_attribs.get("data-yanked") + + # PEP 714: Indexes must use the name data-core-metadata, but + # clients should support the old name as a fallback for compatibility. + metadata_info = anchor_attribs.get("data-core-metadata") + if metadata_info is None: + metadata_info = anchor_attribs.get("data-dist-info-metadata") + # The metadata info value may be the string "true", or a string of + # the form "hashname=hashval" + if metadata_info == "true": + # The file exists, but there are no hashes + metadata_file_data = MetadataFile(None) + elif metadata_info is None: + # The file does not exist + metadata_file_data = None + else: + # The file exists, and hashes have been supplied + hashname, sep, hashval = metadata_info.partition("=") + if sep == "=": + metadata_file_data = MetadataFile(supported_hashes({hashname: hashval})) + else: + # Error - data is wrong. Treat as no hashes supplied. + logger.debug( + "Index returned invalid data-dist-info-metadata value: %s", + metadata_info, + ) + metadata_file_data = MetadataFile(None) + + return cls( + url, + comes_from=page_url, + requires_python=pyrequire, + yanked_reason=yanked_reason, + metadata_file_data=metadata_file_data, + ) + + def __str__(self) -> str: + if self.requires_python: + rp = f" (requires-python:{self.requires_python})" + else: + rp = "" + if self.comes_from: + return f"{redact_auth_from_url(self._url)} (from {self.comes_from}){rp}" + else: + return redact_auth_from_url(str(self._url)) + + def __repr__(self) -> str: + return f"" + + @property + def url(self) -> str: + return self._url + + @property + def filename(self) -> str: + path = self.path.rstrip("/") + name = posixpath.basename(path) + if not name: + # Make sure we don't leak auth information if the netloc + # includes a username and password. + netloc, user_pass = split_auth_from_netloc(self.netloc) + return netloc + + name = urllib.parse.unquote(name) + assert name, f"URL {self._url!r} produced no filename" + return name + + @property + def file_path(self) -> str: + return url_to_path(self.url) + + @property + def scheme(self) -> str: + return self._parsed_url.scheme + + @property + def netloc(self) -> str: + """ + This can contain auth information. + """ + return self._parsed_url.netloc + + @property + def path(self) -> str: + return urllib.parse.unquote(self._parsed_url.path) + + def splitext(self) -> Tuple[str, str]: + return splitext(posixpath.basename(self.path.rstrip("/"))) + + @property + def ext(self) -> str: + return self.splitext()[1] + + @property + def url_without_fragment(self) -> str: + scheme, netloc, path, query, fragment = self._parsed_url + return urllib.parse.urlunsplit((scheme, netloc, path, query, "")) + + _egg_fragment_re = re.compile(r"[#&]egg=([^&]*)") + + # Per PEP 508. + _project_name_re = re.compile( + r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", re.IGNORECASE + ) + + def _egg_fragment(self) -> Optional[str]: + match = self._egg_fragment_re.search(self._url) + if not match: + return None + + # An egg fragment looks like a PEP 508 project name, along with + # an optional extras specifier. Anything else is invalid. + project_name = match.group(1) + if not self._project_name_re.match(project_name): + deprecated( + reason=f"{self} contains an egg fragment with a non-PEP 508 name", + replacement="to use the req @ url syntax, and remove the egg fragment", + gone_in="25.0", + issue=11617, + ) + + return project_name + + _subdirectory_fragment_re = re.compile(r"[#&]subdirectory=([^&]*)") + + @property + def subdirectory_fragment(self) -> Optional[str]: + match = self._subdirectory_fragment_re.search(self._url) + if not match: + return None + return match.group(1) + + def metadata_link(self) -> Optional["Link"]: + """Return a link to the associated core metadata file (if any).""" + if self.metadata_file_data is None: + return None + metadata_url = f"{self.url_without_fragment}.metadata" + if self.metadata_file_data.hashes is None: + return Link(metadata_url) + return Link(metadata_url, hashes=self.metadata_file_data.hashes) + + def as_hashes(self) -> Hashes: + return Hashes({k: [v] for k, v in self._hashes.items()}) + + @property + def hash(self) -> Optional[str]: + return next(iter(self._hashes.values()), None) + + @property + def hash_name(self) -> Optional[str]: + return next(iter(self._hashes), None) + + @property + def show_url(self) -> str: + return posixpath.basename(self._url.split("#", 1)[0].split("?", 1)[0]) + + @property + def is_file(self) -> bool: + return self.scheme == "file" + + def is_existing_dir(self) -> bool: + return self.is_file and os.path.isdir(self.file_path) + + @property + def is_wheel(self) -> bool: + return self.ext == WHEEL_EXTENSION + + @property + def is_vcs(self) -> bool: + from pip._internal.vcs import vcs + + return self.scheme in vcs.all_schemes + + @property + def is_yanked(self) -> bool: + return self.yanked_reason is not None + + @property + def has_hash(self) -> bool: + return bool(self._hashes) + + def is_hash_allowed(self, hashes: Optional[Hashes]) -> bool: + """ + Return True if the link has a hash and it is allowed by `hashes`. + """ + if hashes is None: + return False + return any(hashes.is_hash_allowed(k, v) for k, v in self._hashes.items()) + + +class _CleanResult(NamedTuple): + """Convert link for equivalency check. + + This is used in the resolver to check whether two URL-specified requirements + likely point to the same distribution and can be considered equivalent. This + equivalency logic avoids comparing URLs literally, which can be too strict + (e.g. "a=1&b=2" vs "b=2&a=1") and produce conflicts unexpecting to users. + + Currently this does three things: + + 1. Drop the basic auth part. This is technically wrong since a server can + serve different content based on auth, but if it does that, it is even + impossible to guarantee two URLs without auth are equivalent, since + the user can input different auth information when prompted. So the + practical solution is to assume the auth doesn't affect the response. + 2. Parse the query to avoid the ordering issue. Note that ordering under the + same key in the query are NOT cleaned; i.e. "a=1&a=2" and "a=2&a=1" are + still considered different. + 3. Explicitly drop most of the fragment part, except ``subdirectory=`` and + hash values, since it should have no impact the downloaded content. Note + that this drops the "egg=" part historically used to denote the requested + project (and extras), which is wrong in the strictest sense, but too many + people are supplying it inconsistently to cause superfluous resolution + conflicts, so we choose to also ignore them. + """ + + parsed: urllib.parse.SplitResult + query: Dict[str, List[str]] + subdirectory: str + hashes: Dict[str, str] + + +def _clean_link(link: Link) -> _CleanResult: + parsed = link._parsed_url + netloc = parsed.netloc.rsplit("@", 1)[-1] + # According to RFC 8089, an empty host in file: means localhost. + if parsed.scheme == "file" and not netloc: + netloc = "localhost" + fragment = urllib.parse.parse_qs(parsed.fragment) + if "egg" in fragment: + logger.debug("Ignoring egg= fragment in %s", link) + try: + # If there are multiple subdirectory values, use the first one. + # This matches the behavior of Link.subdirectory_fragment. + subdirectory = fragment["subdirectory"][0] + except (IndexError, KeyError): + subdirectory = "" + # If there are multiple hash values under the same algorithm, use the + # first one. This matches the behavior of Link.hash_value. + hashes = {k: fragment[k][0] for k in _SUPPORTED_HASHES if k in fragment} + return _CleanResult( + parsed=parsed._replace(netloc=netloc, query="", fragment=""), + query=urllib.parse.parse_qs(parsed.query), + subdirectory=subdirectory, + hashes=hashes, + ) + + +@functools.lru_cache(maxsize=None) +def links_equivalent(link1: Link, link2: Link) -> bool: + return _clean_link(link1) == _clean_link(link2) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/scheme.py b/venv/lib/python3.12/site-packages/pip/_internal/models/scheme.py new file mode 100644 index 0000000..f51190a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/scheme.py @@ -0,0 +1,31 @@ +""" +For types associated with installation schemes. + +For a general overview of available schemes and their context, see +https://docs.python.org/3/install/index.html#alternate-installation. +""" + + +SCHEME_KEYS = ["platlib", "purelib", "headers", "scripts", "data"] + + +class Scheme: + """A Scheme holds paths which are used as the base directories for + artifacts associated with a Python package. + """ + + __slots__ = SCHEME_KEYS + + def __init__( + self, + platlib: str, + purelib: str, + headers: str, + scripts: str, + data: str, + ) -> None: + self.platlib = platlib + self.purelib = purelib + self.headers = headers + self.scripts = scripts + self.data = data diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py b/venv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py new file mode 100644 index 0000000..fe61e81 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py @@ -0,0 +1,132 @@ +import itertools +import logging +import os +import posixpath +import urllib.parse +from typing import List + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.models.index import PyPI +from pip._internal.utils.compat import has_tls +from pip._internal.utils.misc import normalize_path, redact_auth_from_url + +logger = logging.getLogger(__name__) + + +class SearchScope: + + """ + Encapsulates the locations that pip is configured to search. + """ + + __slots__ = ["find_links", "index_urls", "no_index"] + + @classmethod + def create( + cls, + find_links: List[str], + index_urls: List[str], + no_index: bool, + ) -> "SearchScope": + """ + Create a SearchScope object after normalizing the `find_links`. + """ + # Build find_links. If an argument starts with ~, it may be + # a local file relative to a home directory. So try normalizing + # it and if it exists, use the normalized version. + # This is deliberately conservative - it might be fine just to + # blindly normalize anything starting with a ~... + built_find_links: List[str] = [] + for link in find_links: + if link.startswith("~"): + new_link = normalize_path(link) + if os.path.exists(new_link): + link = new_link + built_find_links.append(link) + + # If we don't have TLS enabled, then WARN if anyplace we're looking + # relies on TLS. + if not has_tls(): + for link in itertools.chain(index_urls, built_find_links): + parsed = urllib.parse.urlparse(link) + if parsed.scheme == "https": + logger.warning( + "pip is configured with locations that require " + "TLS/SSL, however the ssl module in Python is not " + "available." + ) + break + + return cls( + find_links=built_find_links, + index_urls=index_urls, + no_index=no_index, + ) + + def __init__( + self, + find_links: List[str], + index_urls: List[str], + no_index: bool, + ) -> None: + self.find_links = find_links + self.index_urls = index_urls + self.no_index = no_index + + def get_formatted_locations(self) -> str: + lines = [] + redacted_index_urls = [] + if self.index_urls and self.index_urls != [PyPI.simple_url]: + for url in self.index_urls: + redacted_index_url = redact_auth_from_url(url) + + # Parse the URL + purl = urllib.parse.urlsplit(redacted_index_url) + + # URL is generally invalid if scheme and netloc is missing + # there are issues with Python and URL parsing, so this test + # is a bit crude. See bpo-20271, bpo-23505. Python doesn't + # always parse invalid URLs correctly - it should raise + # exceptions for malformed URLs + if not purl.scheme and not purl.netloc: + logger.warning( + 'The index url "%s" seems invalid, please provide a scheme.', + redacted_index_url, + ) + + redacted_index_urls.append(redacted_index_url) + + lines.append( + "Looking in indexes: {}".format(", ".join(redacted_index_urls)) + ) + + if self.find_links: + lines.append( + "Looking in links: {}".format( + ", ".join(redact_auth_from_url(url) for url in self.find_links) + ) + ) + return "\n".join(lines) + + def get_index_urls_locations(self, project_name: str) -> List[str]: + """Returns the locations found via self.index_urls + + Checks the url_name on the main (first in the list) index and + use this url_name to produce all locations + """ + + def mkurl_pypi_url(url: str) -> str: + loc = posixpath.join( + url, urllib.parse.quote(canonicalize_name(project_name)) + ) + # For maximum compatibility with easy_install, ensure the path + # ends in a trailing slash. Although this isn't in the spec + # (and PyPI can handle it without the slash) some other index + # implementations might break if they relied on easy_install's + # behavior. + if not loc.endswith("/"): + loc = loc + "/" + return loc + + return [mkurl_pypi_url(url) for url in self.index_urls] diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py b/venv/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py new file mode 100644 index 0000000..977bc4c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py @@ -0,0 +1,51 @@ +from typing import Optional + +from pip._internal.models.format_control import FormatControl + + +class SelectionPreferences: + """ + Encapsulates the candidate selection preferences for downloading + and installing files. + """ + + __slots__ = [ + "allow_yanked", + "allow_all_prereleases", + "format_control", + "prefer_binary", + "ignore_requires_python", + ] + + # Don't include an allow_yanked default value to make sure each call + # site considers whether yanked releases are allowed. This also causes + # that decision to be made explicit in the calling code, which helps + # people when reading the code. + def __init__( + self, + allow_yanked: bool, + allow_all_prereleases: bool = False, + format_control: Optional[FormatControl] = None, + prefer_binary: bool = False, + ignore_requires_python: Optional[bool] = None, + ) -> None: + """Create a SelectionPreferences object. + + :param allow_yanked: Whether files marked as yanked (in the sense + of PEP 592) are permitted to be candidates for install. + :param format_control: A FormatControl object or None. Used to control + the selection of source packages / binary packages when consulting + the index and links. + :param prefer_binary: Whether to prefer an old, but valid, binary + dist over a new source dist. + :param ignore_requires_python: Whether to ignore incompatible + "Requires-Python" values in links. Defaults to False. + """ + if ignore_requires_python is None: + ignore_requires_python = False + + self.allow_yanked = allow_yanked + self.allow_all_prereleases = allow_all_prereleases + self.format_control = format_control + self.prefer_binary = prefer_binary + self.ignore_requires_python = ignore_requires_python diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/target_python.py b/venv/lib/python3.12/site-packages/pip/_internal/models/target_python.py new file mode 100644 index 0000000..67ea5da --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/target_python.py @@ -0,0 +1,122 @@ +import sys +from typing import List, Optional, Set, Tuple + +from pip._vendor.packaging.tags import Tag + +from pip._internal.utils.compatibility_tags import get_supported, version_info_to_nodot +from pip._internal.utils.misc import normalize_version_info + + +class TargetPython: + + """ + Encapsulates the properties of a Python interpreter one is targeting + for a package install, download, etc. + """ + + __slots__ = [ + "_given_py_version_info", + "abis", + "implementation", + "platforms", + "py_version", + "py_version_info", + "_valid_tags", + "_valid_tags_set", + ] + + def __init__( + self, + platforms: Optional[List[str]] = None, + py_version_info: Optional[Tuple[int, ...]] = None, + abis: Optional[List[str]] = None, + implementation: Optional[str] = None, + ) -> None: + """ + :param platforms: A list of strings or None. If None, searches for + packages that are supported by the current system. Otherwise, will + find packages that can be built on the platforms passed in. These + packages will only be downloaded for distribution: they will + not be built locally. + :param py_version_info: An optional tuple of ints representing the + Python version information to use (e.g. `sys.version_info[:3]`). + This can have length 1, 2, or 3 when provided. + :param abis: A list of strings or None. This is passed to + compatibility_tags.py's get_supported() function as is. + :param implementation: A string or None. This is passed to + compatibility_tags.py's get_supported() function as is. + """ + # Store the given py_version_info for when we call get_supported(). + self._given_py_version_info = py_version_info + + if py_version_info is None: + py_version_info = sys.version_info[:3] + else: + py_version_info = normalize_version_info(py_version_info) + + py_version = ".".join(map(str, py_version_info[:2])) + + self.abis = abis + self.implementation = implementation + self.platforms = platforms + self.py_version = py_version + self.py_version_info = py_version_info + + # This is used to cache the return value of get_(un)sorted_tags. + self._valid_tags: Optional[List[Tag]] = None + self._valid_tags_set: Optional[Set[Tag]] = None + + def format_given(self) -> str: + """ + Format the given, non-None attributes for display. + """ + display_version = None + if self._given_py_version_info is not None: + display_version = ".".join( + str(part) for part in self._given_py_version_info + ) + + key_values = [ + ("platforms", self.platforms), + ("version_info", display_version), + ("abis", self.abis), + ("implementation", self.implementation), + ] + return " ".join( + f"{key}={value!r}" for key, value in key_values if value is not None + ) + + def get_sorted_tags(self) -> List[Tag]: + """ + Return the supported PEP 425 tags to check wheel candidates against. + + The tags are returned in order of preference (most preferred first). + """ + if self._valid_tags is None: + # Pass versions=None if no py_version_info was given since + # versions=None uses special default logic. + py_version_info = self._given_py_version_info + if py_version_info is None: + version = None + else: + version = version_info_to_nodot(py_version_info) + + tags = get_supported( + version=version, + platforms=self.platforms, + abis=self.abis, + impl=self.implementation, + ) + self._valid_tags = tags + + return self._valid_tags + + def get_unsorted_tags(self) -> Set[Tag]: + """Exactly the same as get_sorted_tags, but returns a set. + + This is important for performance. + """ + if self._valid_tags_set is None: + self._valid_tags_set = set(self.get_sorted_tags()) + + return self._valid_tags_set diff --git a/venv/lib/python3.12/site-packages/pip/_internal/models/wheel.py b/venv/lib/python3.12/site-packages/pip/_internal/models/wheel.py new file mode 100644 index 0000000..a5dc12b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/models/wheel.py @@ -0,0 +1,92 @@ +"""Represents a wheel file and provides access to the various parts of the +name that have meaning. +""" +import re +from typing import Dict, Iterable, List + +from pip._vendor.packaging.tags import Tag + +from pip._internal.exceptions import InvalidWheelFilename + + +class Wheel: + """A wheel file""" + + wheel_file_re = re.compile( + r"""^(?P(?P[^\s-]+?)-(?P[^\s-]*?)) + ((-(?P\d[^-]*?))?-(?P[^\s-]+?)-(?P[^\s-]+?)-(?P[^\s-]+?) + \.whl|\.dist-info)$""", + re.VERBOSE, + ) + + def __init__(self, filename: str) -> None: + """ + :raises InvalidWheelFilename: when the filename is invalid for a wheel + """ + wheel_info = self.wheel_file_re.match(filename) + if not wheel_info: + raise InvalidWheelFilename(f"{filename} is not a valid wheel filename.") + self.filename = filename + self.name = wheel_info.group("name").replace("_", "-") + # we'll assume "_" means "-" due to wheel naming scheme + # (https://github.com/pypa/pip/issues/1150) + self.version = wheel_info.group("ver").replace("_", "-") + self.build_tag = wheel_info.group("build") + self.pyversions = wheel_info.group("pyver").split(".") + self.abis = wheel_info.group("abi").split(".") + self.plats = wheel_info.group("plat").split(".") + + # All the tag combinations from this file + self.file_tags = { + Tag(x, y, z) for x in self.pyversions for y in self.abis for z in self.plats + } + + def get_formatted_file_tags(self) -> List[str]: + """Return the wheel's tags as a sorted list of strings.""" + return sorted(str(tag) for tag in self.file_tags) + + def support_index_min(self, tags: List[Tag]) -> int: + """Return the lowest index that one of the wheel's file_tag combinations + achieves in the given list of supported tags. + + For example, if there are 8 supported tags and one of the file tags + is first in the list, then return 0. + + :param tags: the PEP 425 tags to check the wheel against, in order + with most preferred first. + + :raises ValueError: If none of the wheel's file tags match one of + the supported tags. + """ + try: + return next(i for i, t in enumerate(tags) if t in self.file_tags) + except StopIteration: + raise ValueError() + + def find_most_preferred_tag( + self, tags: List[Tag], tag_to_priority: Dict[Tag, int] + ) -> int: + """Return the priority of the most preferred tag that one of the wheel's file + tag combinations achieves in the given list of supported tags using the given + tag_to_priority mapping, where lower priorities are more-preferred. + + This is used in place of support_index_min in some cases in order to avoid + an expensive linear scan of a large list of tags. + + :param tags: the PEP 425 tags to check the wheel against. + :param tag_to_priority: a mapping from tag to priority of that tag, where + lower is more preferred. + + :raises ValueError: If none of the wheel's file tags match one of + the supported tags. + """ + return min( + tag_to_priority[tag] for tag in self.file_tags if tag in tag_to_priority + ) + + def supported(self, tags: Iterable[Tag]) -> bool: + """Return whether the wheel is compatible with one of the given tags. + + :param tags: the PEP 425 tags to check the wheel against. + """ + return not self.file_tags.isdisjoint(tags) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/network/__init__.py new file mode 100644 index 0000000..b51bde9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/network/__init__.py @@ -0,0 +1,2 @@ +"""Contains purely network-related utilities. +""" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..3f37b6a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc new file mode 100644 index 0000000..3a058a9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc new file mode 100644 index 0000000..2a448bb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc new file mode 100644 index 0000000..d31d4c1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc new file mode 100644 index 0000000..69de31a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc new file mode 100644 index 0000000..747d488 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000..5edfeaa Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc new file mode 100644 index 0000000..89ea8f9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/auth.py b/venv/lib/python3.12/site-packages/pip/_internal/network/auth.py new file mode 100644 index 0000000..94a82fa --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/network/auth.py @@ -0,0 +1,561 @@ +"""Network Authentication Helpers + +Contains interface (MultiDomainBasicAuth) and associated glue code for +providing credentials in the context of network requests. +""" +import logging +import os +import shutil +import subprocess +import sysconfig +import typing +import urllib.parse +from abc import ABC, abstractmethod +from functools import lru_cache +from os.path import commonprefix +from pathlib import Path +from typing import Any, Dict, List, NamedTuple, Optional, Tuple + +from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth +from pip._vendor.requests.models import Request, Response +from pip._vendor.requests.utils import get_netrc_auth + +from pip._internal.utils.logging import getLogger +from pip._internal.utils.misc import ( + ask, + ask_input, + ask_password, + remove_auth_from_url, + split_auth_netloc_from_url, +) +from pip._internal.vcs.versioncontrol import AuthInfo + +logger = getLogger(__name__) + +KEYRING_DISABLED = False + + +class Credentials(NamedTuple): + url: str + username: str + password: str + + +class KeyRingBaseProvider(ABC): + """Keyring base provider interface""" + + has_keyring: bool + + @abstractmethod + def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: + ... + + @abstractmethod + def save_auth_info(self, url: str, username: str, password: str) -> None: + ... + + +class KeyRingNullProvider(KeyRingBaseProvider): + """Keyring null provider""" + + has_keyring = False + + def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: + return None + + def save_auth_info(self, url: str, username: str, password: str) -> None: + return None + + +class KeyRingPythonProvider(KeyRingBaseProvider): + """Keyring interface which uses locally imported `keyring`""" + + has_keyring = True + + def __init__(self) -> None: + import keyring + + self.keyring = keyring + + def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: + # Support keyring's get_credential interface which supports getting + # credentials without a username. This is only available for + # keyring>=15.2.0. + if hasattr(self.keyring, "get_credential"): + logger.debug("Getting credentials from keyring for %s", url) + cred = self.keyring.get_credential(url, username) + if cred is not None: + return cred.username, cred.password + return None + + if username is not None: + logger.debug("Getting password from keyring for %s", url) + password = self.keyring.get_password(url, username) + if password: + return username, password + return None + + def save_auth_info(self, url: str, username: str, password: str) -> None: + self.keyring.set_password(url, username, password) + + +class KeyRingCliProvider(KeyRingBaseProvider): + """Provider which uses `keyring` cli + + Instead of calling the keyring package installed alongside pip + we call keyring on the command line which will enable pip to + use which ever installation of keyring is available first in + PATH. + """ + + has_keyring = True + + def __init__(self, cmd: str) -> None: + self.keyring = cmd + + def get_auth_info(self, url: str, username: Optional[str]) -> Optional[AuthInfo]: + # This is the default implementation of keyring.get_credential + # https://github.com/jaraco/keyring/blob/97689324abcf01bd1793d49063e7ca01e03d7d07/keyring/backend.py#L134-L139 + if username is not None: + password = self._get_password(url, username) + if password is not None: + return username, password + return None + + def save_auth_info(self, url: str, username: str, password: str) -> None: + return self._set_password(url, username, password) + + def _get_password(self, service_name: str, username: str) -> Optional[str]: + """Mirror the implementation of keyring.get_password using cli""" + if self.keyring is None: + return None + + cmd = [self.keyring, "get", service_name, username] + env = os.environ.copy() + env["PYTHONIOENCODING"] = "utf-8" + res = subprocess.run( + cmd, + stdin=subprocess.DEVNULL, + stdout=subprocess.PIPE, + env=env, + ) + if res.returncode: + return None + return res.stdout.decode("utf-8").strip(os.linesep) + + def _set_password(self, service_name: str, username: str, password: str) -> None: + """Mirror the implementation of keyring.set_password using cli""" + if self.keyring is None: + return None + env = os.environ.copy() + env["PYTHONIOENCODING"] = "utf-8" + subprocess.run( + [self.keyring, "set", service_name, username], + input=f"{password}{os.linesep}".encode("utf-8"), + env=env, + check=True, + ) + return None + + +@lru_cache(maxsize=None) +def get_keyring_provider(provider: str) -> KeyRingBaseProvider: + logger.verbose("Keyring provider requested: %s", provider) + + # keyring has previously failed and been disabled + if KEYRING_DISABLED: + provider = "disabled" + if provider in ["import", "auto"]: + try: + impl = KeyRingPythonProvider() + logger.verbose("Keyring provider set: import") + return impl + except ImportError: + pass + except Exception as exc: + # In the event of an unexpected exception + # we should warn the user + msg = "Installed copy of keyring fails with exception %s" + if provider == "auto": + msg = msg + ", trying to find a keyring executable as a fallback" + logger.warning(msg, exc, exc_info=logger.isEnabledFor(logging.DEBUG)) + if provider in ["subprocess", "auto"]: + cli = shutil.which("keyring") + if cli and cli.startswith(sysconfig.get_path("scripts")): + # all code within this function is stolen from shutil.which implementation + @typing.no_type_check + def PATH_as_shutil_which_determines_it() -> str: + path = os.environ.get("PATH", None) + if path is None: + try: + path = os.confstr("CS_PATH") + except (AttributeError, ValueError): + # os.confstr() or CS_PATH is not available + path = os.defpath + # bpo-35755: Don't use os.defpath if the PATH environment variable is + # set to an empty string + + return path + + scripts = Path(sysconfig.get_path("scripts")) + + paths = [] + for path in PATH_as_shutil_which_determines_it().split(os.pathsep): + p = Path(path) + try: + if not p.samefile(scripts): + paths.append(path) + except FileNotFoundError: + pass + + path = os.pathsep.join(paths) + + cli = shutil.which("keyring", path=path) + + if cli: + logger.verbose("Keyring provider set: subprocess with executable %s", cli) + return KeyRingCliProvider(cli) + + logger.verbose("Keyring provider set: disabled") + return KeyRingNullProvider() + + +class MultiDomainBasicAuth(AuthBase): + def __init__( + self, + prompting: bool = True, + index_urls: Optional[List[str]] = None, + keyring_provider: str = "auto", + ) -> None: + self.prompting = prompting + self.index_urls = index_urls + self.keyring_provider = keyring_provider # type: ignore[assignment] + self.passwords: Dict[str, AuthInfo] = {} + # When the user is prompted to enter credentials and keyring is + # available, we will offer to save them. If the user accepts, + # this value is set to the credentials they entered. After the + # request authenticates, the caller should call + # ``save_credentials`` to save these. + self._credentials_to_save: Optional[Credentials] = None + + @property + def keyring_provider(self) -> KeyRingBaseProvider: + return get_keyring_provider(self._keyring_provider) + + @keyring_provider.setter + def keyring_provider(self, provider: str) -> None: + # The free function get_keyring_provider has been decorated with + # functools.cache. If an exception occurs in get_keyring_auth that + # cache will be cleared and keyring disabled, take that into account + # if you want to remove this indirection. + self._keyring_provider = provider + + @property + def use_keyring(self) -> bool: + # We won't use keyring when --no-input is passed unless + # a specific provider is requested because it might require + # user interaction + return self.prompting or self._keyring_provider not in ["auto", "disabled"] + + def _get_keyring_auth( + self, + url: Optional[str], + username: Optional[str], + ) -> Optional[AuthInfo]: + """Return the tuple auth for a given url from keyring.""" + # Do nothing if no url was provided + if not url: + return None + + try: + return self.keyring_provider.get_auth_info(url, username) + except Exception as exc: + logger.warning( + "Keyring is skipped due to an exception: %s", + str(exc), + ) + global KEYRING_DISABLED + KEYRING_DISABLED = True + get_keyring_provider.cache_clear() + return None + + def _get_index_url(self, url: str) -> Optional[str]: + """Return the original index URL matching the requested URL. + + Cached or dynamically generated credentials may work against + the original index URL rather than just the netloc. + + The provided url should have had its username and password + removed already. If the original index url had credentials then + they will be included in the return value. + + Returns None if no matching index was found, or if --no-index + was specified by the user. + """ + if not url or not self.index_urls: + return None + + url = remove_auth_from_url(url).rstrip("/") + "/" + parsed_url = urllib.parse.urlsplit(url) + + candidates = [] + + for index in self.index_urls: + index = index.rstrip("/") + "/" + parsed_index = urllib.parse.urlsplit(remove_auth_from_url(index)) + if parsed_url == parsed_index: + return index + + if parsed_url.netloc != parsed_index.netloc: + continue + + candidate = urllib.parse.urlsplit(index) + candidates.append(candidate) + + if not candidates: + return None + + candidates.sort( + reverse=True, + key=lambda candidate: commonprefix( + [ + parsed_url.path, + candidate.path, + ] + ).rfind("/"), + ) + + return urllib.parse.urlunsplit(candidates[0]) + + def _get_new_credentials( + self, + original_url: str, + *, + allow_netrc: bool = True, + allow_keyring: bool = False, + ) -> AuthInfo: + """Find and return credentials for the specified URL.""" + # Split the credentials and netloc from the url. + url, netloc, url_user_password = split_auth_netloc_from_url( + original_url, + ) + + # Start with the credentials embedded in the url + username, password = url_user_password + if username is not None and password is not None: + logger.debug("Found credentials in url for %s", netloc) + return url_user_password + + # Find a matching index url for this request + index_url = self._get_index_url(url) + if index_url: + # Split the credentials from the url. + index_info = split_auth_netloc_from_url(index_url) + if index_info: + index_url, _, index_url_user_password = index_info + logger.debug("Found index url %s", index_url) + + # If an index URL was found, try its embedded credentials + if index_url and index_url_user_password[0] is not None: + username, password = index_url_user_password + if username is not None and password is not None: + logger.debug("Found credentials in index url for %s", netloc) + return index_url_user_password + + # Get creds from netrc if we still don't have them + if allow_netrc: + netrc_auth = get_netrc_auth(original_url) + if netrc_auth: + logger.debug("Found credentials in netrc for %s", netloc) + return netrc_auth + + # If we don't have a password and keyring is available, use it. + if allow_keyring: + # The index url is more specific than the netloc, so try it first + # fmt: off + kr_auth = ( + self._get_keyring_auth(index_url, username) or + self._get_keyring_auth(netloc, username) + ) + # fmt: on + if kr_auth: + logger.debug("Found credentials in keyring for %s", netloc) + return kr_auth + + return username, password + + def _get_url_and_credentials( + self, original_url: str + ) -> Tuple[str, Optional[str], Optional[str]]: + """Return the credentials to use for the provided URL. + + If allowed, netrc and keyring may be used to obtain the + correct credentials. + + Returns (url_without_credentials, username, password). Note + that even if the original URL contains credentials, this + function may return a different username and password. + """ + url, netloc, _ = split_auth_netloc_from_url(original_url) + + # Try to get credentials from original url + username, password = self._get_new_credentials(original_url) + + # If credentials not found, use any stored credentials for this netloc. + # Do this if either the username or the password is missing. + # This accounts for the situation in which the user has specified + # the username in the index url, but the password comes from keyring. + if (username is None or password is None) and netloc in self.passwords: + un, pw = self.passwords[netloc] + # It is possible that the cached credentials are for a different username, + # in which case the cache should be ignored. + if username is None or username == un: + username, password = un, pw + + if username is not None or password is not None: + # Convert the username and password if they're None, so that + # this netloc will show up as "cached" in the conditional above. + # Further, HTTPBasicAuth doesn't accept None, so it makes sense to + # cache the value that is going to be used. + username = username or "" + password = password or "" + + # Store any acquired credentials. + self.passwords[netloc] = (username, password) + + assert ( + # Credentials were found + (username is not None and password is not None) + # Credentials were not found + or (username is None and password is None) + ), f"Could not load credentials from url: {original_url}" + + return url, username, password + + def __call__(self, req: Request) -> Request: + # Get credentials for this request + url, username, password = self._get_url_and_credentials(req.url) + + # Set the url of the request to the url without any credentials + req.url = url + + if username is not None and password is not None: + # Send the basic auth with this request + req = HTTPBasicAuth(username, password)(req) + + # Attach a hook to handle 401 responses + req.register_hook("response", self.handle_401) + + return req + + # Factored out to allow for easy patching in tests + def _prompt_for_password( + self, netloc: str + ) -> Tuple[Optional[str], Optional[str], bool]: + username = ask_input(f"User for {netloc}: ") if self.prompting else None + if not username: + return None, None, False + if self.use_keyring: + auth = self._get_keyring_auth(netloc, username) + if auth and auth[0] is not None and auth[1] is not None: + return auth[0], auth[1], False + password = ask_password("Password: ") + return username, password, True + + # Factored out to allow for easy patching in tests + def _should_save_password_to_keyring(self) -> bool: + if ( + not self.prompting + or not self.use_keyring + or not self.keyring_provider.has_keyring + ): + return False + return ask("Save credentials to keyring [y/N]: ", ["y", "n"]) == "y" + + def handle_401(self, resp: Response, **kwargs: Any) -> Response: + # We only care about 401 responses, anything else we want to just + # pass through the actual response + if resp.status_code != 401: + return resp + + username, password = None, None + + # Query the keyring for credentials: + if self.use_keyring: + username, password = self._get_new_credentials( + resp.url, + allow_netrc=False, + allow_keyring=True, + ) + + # We are not able to prompt the user so simply return the response + if not self.prompting and not username and not password: + return resp + + parsed = urllib.parse.urlparse(resp.url) + + # Prompt the user for a new username and password + save = False + if not username and not password: + username, password, save = self._prompt_for_password(parsed.netloc) + + # Store the new username and password to use for future requests + self._credentials_to_save = None + if username is not None and password is not None: + self.passwords[parsed.netloc] = (username, password) + + # Prompt to save the password to keyring + if save and self._should_save_password_to_keyring(): + self._credentials_to_save = Credentials( + url=parsed.netloc, + username=username, + password=password, + ) + + # Consume content and release the original connection to allow our new + # request to reuse the same one. + # The result of the assignment isn't used, it's just needed to consume + # the content. + _ = resp.content + resp.raw.release_conn() + + # Add our new username and password to the request + req = HTTPBasicAuth(username or "", password or "")(resp.request) + req.register_hook("response", self.warn_on_401) + + # On successful request, save the credentials that were used to + # keyring. (Note that if the user responded "no" above, this member + # is not set and nothing will be saved.) + if self._credentials_to_save: + req.register_hook("response", self.save_credentials) + + # Send our new request + new_resp = resp.connection.send(req, **kwargs) + new_resp.history.append(resp) + + return new_resp + + def warn_on_401(self, resp: Response, **kwargs: Any) -> None: + """Response callback to warn about incorrect credentials.""" + if resp.status_code == 401: + logger.warning( + "401 Error, Credentials not correct for %s", + resp.request.url, + ) + + def save_credentials(self, resp: Response, **kwargs: Any) -> None: + """Response callback to save credentials on success.""" + assert ( + self.keyring_provider.has_keyring + ), "should never reach here without keyring" + + creds = self._credentials_to_save + self._credentials_to_save = None + if creds and resp.status_code < 400: + try: + logger.info("Saving credentials to keyring") + self.keyring_provider.save_auth_info( + creds.url, creds.username, creds.password + ) + except Exception: + logger.exception("Failed to save credentials") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/cache.py b/venv/lib/python3.12/site-packages/pip/_internal/network/cache.py new file mode 100644 index 0000000..4d0fb54 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/network/cache.py @@ -0,0 +1,106 @@ +"""HTTP cache implementation. +""" + +import os +from contextlib import contextmanager +from datetime import datetime +from typing import BinaryIO, Generator, Optional, Union + +from pip._vendor.cachecontrol.cache import SeparateBodyBaseCache +from pip._vendor.cachecontrol.caches import SeparateBodyFileCache +from pip._vendor.requests.models import Response + +from pip._internal.utils.filesystem import adjacent_tmp_file, replace +from pip._internal.utils.misc import ensure_dir + + +def is_from_cache(response: Response) -> bool: + return getattr(response, "from_cache", False) + + +@contextmanager +def suppressed_cache_errors() -> Generator[None, None, None]: + """If we can't access the cache then we can just skip caching and process + requests as if caching wasn't enabled. + """ + try: + yield + except OSError: + pass + + +class SafeFileCache(SeparateBodyBaseCache): + """ + A file based cache which is safe to use even when the target directory may + not be accessible or writable. + + There is a race condition when two processes try to write and/or read the + same entry at the same time, since each entry consists of two separate + files (https://github.com/psf/cachecontrol/issues/324). We therefore have + additional logic that makes sure that both files to be present before + returning an entry; this fixes the read side of the race condition. + + For the write side, we assume that the server will only ever return the + same data for the same URL, which ought to be the case for files pip is + downloading. PyPI does not have a mechanism to swap out a wheel for + another wheel, for example. If this assumption is not true, the + CacheControl issue will need to be fixed. + """ + + def __init__(self, directory: str) -> None: + assert directory is not None, "Cache directory must not be None." + super().__init__() + self.directory = directory + + def _get_cache_path(self, name: str) -> str: + # From cachecontrol.caches.file_cache.FileCache._fn, brought into our + # class for backwards-compatibility and to avoid using a non-public + # method. + hashed = SeparateBodyFileCache.encode(name) + parts = list(hashed[:5]) + [hashed] + return os.path.join(self.directory, *parts) + + def get(self, key: str) -> Optional[bytes]: + # The cache entry is only valid if both metadata and body exist. + metadata_path = self._get_cache_path(key) + body_path = metadata_path + ".body" + if not (os.path.exists(metadata_path) and os.path.exists(body_path)): + return None + with suppressed_cache_errors(): + with open(metadata_path, "rb") as f: + return f.read() + + def _write(self, path: str, data: bytes) -> None: + with suppressed_cache_errors(): + ensure_dir(os.path.dirname(path)) + + with adjacent_tmp_file(path) as f: + f.write(data) + + replace(f.name, path) + + def set( + self, key: str, value: bytes, expires: Union[int, datetime, None] = None + ) -> None: + path = self._get_cache_path(key) + self._write(path, value) + + def delete(self, key: str) -> None: + path = self._get_cache_path(key) + with suppressed_cache_errors(): + os.remove(path) + with suppressed_cache_errors(): + os.remove(path + ".body") + + def get_body(self, key: str) -> Optional[BinaryIO]: + # The cache entry is only valid if both metadata and body exist. + metadata_path = self._get_cache_path(key) + body_path = metadata_path + ".body" + if not (os.path.exists(metadata_path) and os.path.exists(body_path)): + return None + with suppressed_cache_errors(): + return open(body_path, "rb") + + def set_body(self, key: str, body: bytes) -> None: + path = self._get_cache_path(key) + ".body" + self._write(path, body) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/download.py b/venv/lib/python3.12/site-packages/pip/_internal/network/download.py new file mode 100644 index 0000000..d1d4354 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/network/download.py @@ -0,0 +1,186 @@ +"""Download files with progress indicators. +""" +import email.message +import logging +import mimetypes +import os +from typing import Iterable, Optional, Tuple + +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.cli.progress_bars import get_download_progress_renderer +from pip._internal.exceptions import NetworkConnectionError +from pip._internal.models.index import PyPI +from pip._internal.models.link import Link +from pip._internal.network.cache import is_from_cache +from pip._internal.network.session import PipSession +from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks +from pip._internal.utils.misc import format_size, redact_auth_from_url, splitext + +logger = logging.getLogger(__name__) + + +def _get_http_response_size(resp: Response) -> Optional[int]: + try: + return int(resp.headers["content-length"]) + except (ValueError, KeyError, TypeError): + return None + + +def _prepare_download( + resp: Response, + link: Link, + progress_bar: str, +) -> Iterable[bytes]: + total_length = _get_http_response_size(resp) + + if link.netloc == PyPI.file_storage_domain: + url = link.show_url + else: + url = link.url_without_fragment + + logged_url = redact_auth_from_url(url) + + if total_length: + logged_url = f"{logged_url} ({format_size(total_length)})" + + if is_from_cache(resp): + logger.info("Using cached %s", logged_url) + else: + logger.info("Downloading %s", logged_url) + + if logger.getEffectiveLevel() > logging.INFO: + show_progress = False + elif is_from_cache(resp): + show_progress = False + elif not total_length: + show_progress = True + elif total_length > (40 * 1000): + show_progress = True + else: + show_progress = False + + chunks = response_chunks(resp, CONTENT_CHUNK_SIZE) + + if not show_progress: + return chunks + + renderer = get_download_progress_renderer(bar_type=progress_bar, size=total_length) + return renderer(chunks) + + +def sanitize_content_filename(filename: str) -> str: + """ + Sanitize the "filename" value from a Content-Disposition header. + """ + return os.path.basename(filename) + + +def parse_content_disposition(content_disposition: str, default_filename: str) -> str: + """ + Parse the "filename" value from a Content-Disposition header, and + return the default filename if the result is empty. + """ + m = email.message.Message() + m["content-type"] = content_disposition + filename = m.get_param("filename") + if filename: + # We need to sanitize the filename to prevent directory traversal + # in case the filename contains ".." path parts. + filename = sanitize_content_filename(str(filename)) + return filename or default_filename + + +def _get_http_response_filename(resp: Response, link: Link) -> str: + """Get an ideal filename from the given HTTP response, falling back to + the link filename if not provided. + """ + filename = link.filename # fallback + # Have a look at the Content-Disposition header for a better guess + content_disposition = resp.headers.get("content-disposition") + if content_disposition: + filename = parse_content_disposition(content_disposition, filename) + ext: Optional[str] = splitext(filename)[1] + if not ext: + ext = mimetypes.guess_extension(resp.headers.get("content-type", "")) + if ext: + filename += ext + if not ext and link.url != resp.url: + ext = os.path.splitext(resp.url)[1] + if ext: + filename += ext + return filename + + +def _http_get_download(session: PipSession, link: Link) -> Response: + target_url = link.url.split("#", 1)[0] + resp = session.get(target_url, headers=HEADERS, stream=True) + raise_for_status(resp) + return resp + + +class Downloader: + def __init__( + self, + session: PipSession, + progress_bar: str, + ) -> None: + self._session = session + self._progress_bar = progress_bar + + def __call__(self, link: Link, location: str) -> Tuple[str, str]: + """Download the file given by link into location.""" + try: + resp = _http_get_download(self._session, link) + except NetworkConnectionError as e: + assert e.response is not None + logger.critical( + "HTTP error %s while getting %s", e.response.status_code, link + ) + raise + + filename = _get_http_response_filename(resp, link) + filepath = os.path.join(location, filename) + + chunks = _prepare_download(resp, link, self._progress_bar) + with open(filepath, "wb") as content_file: + for chunk in chunks: + content_file.write(chunk) + content_type = resp.headers.get("Content-Type", "") + return filepath, content_type + + +class BatchDownloader: + def __init__( + self, + session: PipSession, + progress_bar: str, + ) -> None: + self._session = session + self._progress_bar = progress_bar + + def __call__( + self, links: Iterable[Link], location: str + ) -> Iterable[Tuple[Link, Tuple[str, str]]]: + """Download the files given by links into location.""" + for link in links: + try: + resp = _http_get_download(self._session, link) + except NetworkConnectionError as e: + assert e.response is not None + logger.critical( + "HTTP error %s while getting %s", + e.response.status_code, + link, + ) + raise + + filename = _get_http_response_filename(resp, link) + filepath = os.path.join(location, filename) + + chunks = _prepare_download(resp, link, self._progress_bar) + with open(filepath, "wb") as content_file: + for chunk in chunks: + content_file.write(chunk) + content_type = resp.headers.get("Content-Type", "") + yield link, (filepath, content_type) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py b/venv/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py new file mode 100644 index 0000000..82ec50d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py @@ -0,0 +1,210 @@ +"""Lazy ZIP over HTTP""" + +__all__ = ["HTTPRangeRequestUnsupported", "dist_from_wheel_url"] + +from bisect import bisect_left, bisect_right +from contextlib import contextmanager +from tempfile import NamedTemporaryFile +from typing import Any, Dict, Generator, List, Optional, Tuple +from zipfile import BadZipFile, ZipFile + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.metadata import BaseDistribution, MemoryWheel, get_wheel_distribution +from pip._internal.network.session import PipSession +from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks + + +class HTTPRangeRequestUnsupported(Exception): + pass + + +def dist_from_wheel_url(name: str, url: str, session: PipSession) -> BaseDistribution: + """Return a distribution object from the given wheel URL. + + This uses HTTP range requests to only fetch the portion of the wheel + containing metadata, just enough for the object to be constructed. + If such requests are not supported, HTTPRangeRequestUnsupported + is raised. + """ + with LazyZipOverHTTP(url, session) as zf: + # For read-only ZIP files, ZipFile only needs methods read, + # seek, seekable and tell, not the whole IO protocol. + wheel = MemoryWheel(zf.name, zf) # type: ignore + # After context manager exit, wheel.name + # is an invalid file by intention. + return get_wheel_distribution(wheel, canonicalize_name(name)) + + +class LazyZipOverHTTP: + """File-like object mapped to a ZIP file over HTTP. + + This uses HTTP range requests to lazily fetch the file's content, + which is supposed to be fed to ZipFile. If such requests are not + supported by the server, raise HTTPRangeRequestUnsupported + during initialization. + """ + + def __init__( + self, url: str, session: PipSession, chunk_size: int = CONTENT_CHUNK_SIZE + ) -> None: + head = session.head(url, headers=HEADERS) + raise_for_status(head) + assert head.status_code == 200 + self._session, self._url, self._chunk_size = session, url, chunk_size + self._length = int(head.headers["Content-Length"]) + self._file = NamedTemporaryFile() + self.truncate(self._length) + self._left: List[int] = [] + self._right: List[int] = [] + if "bytes" not in head.headers.get("Accept-Ranges", "none"): + raise HTTPRangeRequestUnsupported("range request is not supported") + self._check_zip() + + @property + def mode(self) -> str: + """Opening mode, which is always rb.""" + return "rb" + + @property + def name(self) -> str: + """Path to the underlying file.""" + return self._file.name + + def seekable(self) -> bool: + """Return whether random access is supported, which is True.""" + return True + + def close(self) -> None: + """Close the file.""" + self._file.close() + + @property + def closed(self) -> bool: + """Whether the file is closed.""" + return self._file.closed + + def read(self, size: int = -1) -> bytes: + """Read up to size bytes from the object and return them. + + As a convenience, if size is unspecified or -1, + all bytes until EOF are returned. Fewer than + size bytes may be returned if EOF is reached. + """ + download_size = max(size, self._chunk_size) + start, length = self.tell(), self._length + stop = length if size < 0 else min(start + download_size, length) + start = max(0, stop - download_size) + self._download(start, stop - 1) + return self._file.read(size) + + def readable(self) -> bool: + """Return whether the file is readable, which is True.""" + return True + + def seek(self, offset: int, whence: int = 0) -> int: + """Change stream position and return the new absolute position. + + Seek to offset relative position indicated by whence: + * 0: Start of stream (the default). pos should be >= 0; + * 1: Current position - pos may be negative; + * 2: End of stream - pos usually negative. + """ + return self._file.seek(offset, whence) + + def tell(self) -> int: + """Return the current position.""" + return self._file.tell() + + def truncate(self, size: Optional[int] = None) -> int: + """Resize the stream to the given size in bytes. + + If size is unspecified resize to the current position. + The current stream position isn't changed. + + Return the new file size. + """ + return self._file.truncate(size) + + def writable(self) -> bool: + """Return False.""" + return False + + def __enter__(self) -> "LazyZipOverHTTP": + self._file.__enter__() + return self + + def __exit__(self, *exc: Any) -> None: + self._file.__exit__(*exc) + + @contextmanager + def _stay(self) -> Generator[None, None, None]: + """Return a context manager keeping the position. + + At the end of the block, seek back to original position. + """ + pos = self.tell() + try: + yield + finally: + self.seek(pos) + + def _check_zip(self) -> None: + """Check and download until the file is a valid ZIP.""" + end = self._length - 1 + for start in reversed(range(0, end, self._chunk_size)): + self._download(start, end) + with self._stay(): + try: + # For read-only ZIP files, ZipFile only needs + # methods read, seek, seekable and tell. + ZipFile(self) # type: ignore + except BadZipFile: + pass + else: + break + + def _stream_response( + self, start: int, end: int, base_headers: Dict[str, str] = HEADERS + ) -> Response: + """Return HTTP response to a range request from start to end.""" + headers = base_headers.copy() + headers["Range"] = f"bytes={start}-{end}" + # TODO: Get range requests to be correctly cached + headers["Cache-Control"] = "no-cache" + return self._session.get(self._url, headers=headers, stream=True) + + def _merge( + self, start: int, end: int, left: int, right: int + ) -> Generator[Tuple[int, int], None, None]: + """Return a generator of intervals to be fetched. + + Args: + start (int): Start of needed interval + end (int): End of needed interval + left (int): Index of first overlapping downloaded data + right (int): Index after last overlapping downloaded data + """ + lslice, rslice = self._left[left:right], self._right[left:right] + i = start = min([start] + lslice[:1]) + end = max([end] + rslice[-1:]) + for j, k in zip(lslice, rslice): + if j > i: + yield i, j - 1 + i = k + 1 + if i <= end: + yield i, end + self._left[left:right], self._right[left:right] = [start], [end] + + def _download(self, start: int, end: int) -> None: + """Download bytes from start to end inclusively.""" + with self._stay(): + left = bisect_left(self._right, start) + right = bisect_right(self._left, end) + for start, end in self._merge(start, end, left, right): + response = self._stream_response(start, end) + response.raise_for_status() + self.seek(start) + for chunk in response_chunks(response, self._chunk_size): + self._file.write(chunk) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/session.py b/venv/lib/python3.12/site-packages/pip/_internal/network/session.py new file mode 100644 index 0000000..f17efc5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/network/session.py @@ -0,0 +1,520 @@ +"""PipSession and supporting code, containing all pip-specific +network request configuration and behavior. +""" + +import email.utils +import io +import ipaddress +import json +import logging +import mimetypes +import os +import platform +import shutil +import subprocess +import sys +import urllib.parse +import warnings +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Generator, + List, + Mapping, + Optional, + Sequence, + Tuple, + Union, +) + +from pip._vendor import requests, urllib3 +from pip._vendor.cachecontrol import CacheControlAdapter as _BaseCacheControlAdapter +from pip._vendor.requests.adapters import DEFAULT_POOLBLOCK, BaseAdapter +from pip._vendor.requests.adapters import HTTPAdapter as _BaseHTTPAdapter +from pip._vendor.requests.models import PreparedRequest, Response +from pip._vendor.requests.structures import CaseInsensitiveDict +from pip._vendor.urllib3.connectionpool import ConnectionPool +from pip._vendor.urllib3.exceptions import InsecureRequestWarning + +from pip import __version__ +from pip._internal.metadata import get_default_environment +from pip._internal.models.link import Link +from pip._internal.network.auth import MultiDomainBasicAuth +from pip._internal.network.cache import SafeFileCache + +# Import ssl from compat so the initial import occurs in only one place. +from pip._internal.utils.compat import has_tls +from pip._internal.utils.glibc import libc_ver +from pip._internal.utils.misc import build_url_from_netloc, parse_netloc +from pip._internal.utils.urls import url_to_path + +if TYPE_CHECKING: + from ssl import SSLContext + + from pip._vendor.urllib3.poolmanager import PoolManager + + +logger = logging.getLogger(__name__) + +SecureOrigin = Tuple[str, str, Optional[Union[int, str]]] + + +# Ignore warning raised when using --trusted-host. +warnings.filterwarnings("ignore", category=InsecureRequestWarning) + + +SECURE_ORIGINS: List[SecureOrigin] = [ + # protocol, hostname, port + # Taken from Chrome's list of secure origins (See: http://bit.ly/1qrySKC) + ("https", "*", "*"), + ("*", "localhost", "*"), + ("*", "127.0.0.0/8", "*"), + ("*", "::1/128", "*"), + ("file", "*", None), + # ssh is always secure. + ("ssh", "*", "*"), +] + + +# These are environment variables present when running under various +# CI systems. For each variable, some CI systems that use the variable +# are indicated. The collection was chosen so that for each of a number +# of popular systems, at least one of the environment variables is used. +# This list is used to provide some indication of and lower bound for +# CI traffic to PyPI. Thus, it is okay if the list is not comprehensive. +# For more background, see: https://github.com/pypa/pip/issues/5499 +CI_ENVIRONMENT_VARIABLES = ( + # Azure Pipelines + "BUILD_BUILDID", + # Jenkins + "BUILD_ID", + # AppVeyor, CircleCI, Codeship, Gitlab CI, Shippable, Travis CI + "CI", + # Explicit environment variable. + "PIP_IS_CI", +) + + +def looks_like_ci() -> bool: + """ + Return whether it looks like pip is running under CI. + """ + # We don't use the method of checking for a tty (e.g. using isatty()) + # because some CI systems mimic a tty (e.g. Travis CI). Thus that + # method doesn't provide definitive information in either direction. + return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES) + + +def user_agent() -> str: + """ + Return a string representing the user agent. + """ + data: Dict[str, Any] = { + "installer": {"name": "pip", "version": __version__}, + "python": platform.python_version(), + "implementation": { + "name": platform.python_implementation(), + }, + } + + if data["implementation"]["name"] == "CPython": + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == "PyPy": + pypy_version_info = sys.pypy_version_info # type: ignore + if pypy_version_info.releaselevel == "final": + pypy_version_info = pypy_version_info[:3] + data["implementation"]["version"] = ".".join( + [str(x) for x in pypy_version_info] + ) + elif data["implementation"]["name"] == "Jython": + # Complete Guess + data["implementation"]["version"] = platform.python_version() + elif data["implementation"]["name"] == "IronPython": + # Complete Guess + data["implementation"]["version"] = platform.python_version() + + if sys.platform.startswith("linux"): + from pip._vendor import distro + + linux_distribution = distro.name(), distro.version(), distro.codename() + distro_infos: Dict[str, Any] = dict( + filter( + lambda x: x[1], + zip(["name", "version", "id"], linux_distribution), + ) + ) + libc = dict( + filter( + lambda x: x[1], + zip(["lib", "version"], libc_ver()), + ) + ) + if libc: + distro_infos["libc"] = libc + if distro_infos: + data["distro"] = distro_infos + + if sys.platform.startswith("darwin") and platform.mac_ver()[0]: + data["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} + + if platform.system(): + data.setdefault("system", {})["name"] = platform.system() + + if platform.release(): + data.setdefault("system", {})["release"] = platform.release() + + if platform.machine(): + data["cpu"] = platform.machine() + + if has_tls(): + import _ssl as ssl + + data["openssl_version"] = ssl.OPENSSL_VERSION + + setuptools_dist = get_default_environment().get_distribution("setuptools") + if setuptools_dist is not None: + data["setuptools_version"] = str(setuptools_dist.version) + + if shutil.which("rustc") is not None: + # If for any reason `rustc --version` fails, silently ignore it + try: + rustc_output = subprocess.check_output( + ["rustc", "--version"], stderr=subprocess.STDOUT, timeout=0.5 + ) + except Exception: + pass + else: + if rustc_output.startswith(b"rustc "): + # The format of `rustc --version` is: + # `b'rustc 1.52.1 (9bc8c42bb 2021-05-09)\n'` + # We extract just the middle (1.52.1) part + data["rustc_version"] = rustc_output.split(b" ")[1].decode() + + # Use None rather than False so as not to give the impression that + # pip knows it is not being run under CI. Rather, it is a null or + # inconclusive result. Also, we include some value rather than no + # value to make it easier to know that the check has been run. + data["ci"] = True if looks_like_ci() else None + + user_data = os.environ.get("PIP_USER_AGENT_USER_DATA") + if user_data is not None: + data["user_data"] = user_data + + return "{data[installer][name]}/{data[installer][version]} {json}".format( + data=data, + json=json.dumps(data, separators=(",", ":"), sort_keys=True), + ) + + +class LocalFSAdapter(BaseAdapter): + def send( + self, + request: PreparedRequest, + stream: bool = False, + timeout: Optional[Union[float, Tuple[float, float]]] = None, + verify: Union[bool, str] = True, + cert: Optional[Union[str, Tuple[str, str]]] = None, + proxies: Optional[Mapping[str, str]] = None, + ) -> Response: + pathname = url_to_path(request.url) + + resp = Response() + resp.status_code = 200 + resp.url = request.url + + try: + stats = os.stat(pathname) + except OSError as exc: + # format the exception raised as a io.BytesIO object, + # to return a better error message: + resp.status_code = 404 + resp.reason = type(exc).__name__ + resp.raw = io.BytesIO(f"{resp.reason}: {exc}".encode("utf8")) + else: + modified = email.utils.formatdate(stats.st_mtime, usegmt=True) + content_type = mimetypes.guess_type(pathname)[0] or "text/plain" + resp.headers = CaseInsensitiveDict( + { + "Content-Type": content_type, + "Content-Length": stats.st_size, + "Last-Modified": modified, + } + ) + + resp.raw = open(pathname, "rb") + resp.close = resp.raw.close + + return resp + + def close(self) -> None: + pass + + +class _SSLContextAdapterMixin: + """Mixin to add the ``ssl_context`` constructor argument to HTTP adapters. + + The additional argument is forwarded directly to the pool manager. This allows us + to dynamically decide what SSL store to use at runtime, which is used to implement + the optional ``truststore`` backend. + """ + + def __init__( + self, + *, + ssl_context: Optional["SSLContext"] = None, + **kwargs: Any, + ) -> None: + self._ssl_context = ssl_context + super().__init__(**kwargs) + + def init_poolmanager( + self, + connections: int, + maxsize: int, + block: bool = DEFAULT_POOLBLOCK, + **pool_kwargs: Any, + ) -> "PoolManager": + if self._ssl_context is not None: + pool_kwargs.setdefault("ssl_context", self._ssl_context) + return super().init_poolmanager( # type: ignore[misc] + connections=connections, + maxsize=maxsize, + block=block, + **pool_kwargs, + ) + + +class HTTPAdapter(_SSLContextAdapterMixin, _BaseHTTPAdapter): + pass + + +class CacheControlAdapter(_SSLContextAdapterMixin, _BaseCacheControlAdapter): + pass + + +class InsecureHTTPAdapter(HTTPAdapter): + def cert_verify( + self, + conn: ConnectionPool, + url: str, + verify: Union[bool, str], + cert: Optional[Union[str, Tuple[str, str]]], + ) -> None: + super().cert_verify(conn=conn, url=url, verify=False, cert=cert) + + +class InsecureCacheControlAdapter(CacheControlAdapter): + def cert_verify( + self, + conn: ConnectionPool, + url: str, + verify: Union[bool, str], + cert: Optional[Union[str, Tuple[str, str]]], + ) -> None: + super().cert_verify(conn=conn, url=url, verify=False, cert=cert) + + +class PipSession(requests.Session): + timeout: Optional[int] = None + + def __init__( + self, + *args: Any, + retries: int = 0, + cache: Optional[str] = None, + trusted_hosts: Sequence[str] = (), + index_urls: Optional[List[str]] = None, + ssl_context: Optional["SSLContext"] = None, + **kwargs: Any, + ) -> None: + """ + :param trusted_hosts: Domains not to emit warnings for when not using + HTTPS. + """ + super().__init__(*args, **kwargs) + + # Namespace the attribute with "pip_" just in case to prevent + # possible conflicts with the base class. + self.pip_trusted_origins: List[Tuple[str, Optional[int]]] = [] + + # Attach our User Agent to the request + self.headers["User-Agent"] = user_agent() + + # Attach our Authentication handler to the session + self.auth = MultiDomainBasicAuth(index_urls=index_urls) + + # Create our urllib3.Retry instance which will allow us to customize + # how we handle retries. + retries = urllib3.Retry( + # Set the total number of retries that a particular request can + # have. + total=retries, + # A 503 error from PyPI typically means that the Fastly -> Origin + # connection got interrupted in some way. A 503 error in general + # is typically considered a transient error so we'll go ahead and + # retry it. + # A 500 may indicate transient error in Amazon S3 + # A 502 may be a transient error from a CDN like CloudFlare or CloudFront + # A 520 or 527 - may indicate transient error in CloudFlare + status_forcelist=[500, 502, 503, 520, 527], + # Add a small amount of back off between failed requests in + # order to prevent hammering the service. + backoff_factor=0.25, + ) # type: ignore + + # Our Insecure HTTPAdapter disables HTTPS validation. It does not + # support caching so we'll use it for all http:// URLs. + # If caching is disabled, we will also use it for + # https:// hosts that we've marked as ignoring + # TLS errors for (trusted-hosts). + insecure_adapter = InsecureHTTPAdapter(max_retries=retries) + + # We want to _only_ cache responses on securely fetched origins or when + # the host is specified as trusted. We do this because + # we can't validate the response of an insecurely/untrusted fetched + # origin, and we don't want someone to be able to poison the cache and + # require manual eviction from the cache to fix it. + if cache: + secure_adapter = CacheControlAdapter( + cache=SafeFileCache(cache), + max_retries=retries, + ssl_context=ssl_context, + ) + self._trusted_host_adapter = InsecureCacheControlAdapter( + cache=SafeFileCache(cache), + max_retries=retries, + ) + else: + secure_adapter = HTTPAdapter(max_retries=retries, ssl_context=ssl_context) + self._trusted_host_adapter = insecure_adapter + + self.mount("https://", secure_adapter) + self.mount("http://", insecure_adapter) + + # Enable file:// urls + self.mount("file://", LocalFSAdapter()) + + for host in trusted_hosts: + self.add_trusted_host(host, suppress_logging=True) + + def update_index_urls(self, new_index_urls: List[str]) -> None: + """ + :param new_index_urls: New index urls to update the authentication + handler with. + """ + self.auth.index_urls = new_index_urls + + def add_trusted_host( + self, host: str, source: Optional[str] = None, suppress_logging: bool = False + ) -> None: + """ + :param host: It is okay to provide a host that has previously been + added. + :param source: An optional source string, for logging where the host + string came from. + """ + if not suppress_logging: + msg = f"adding trusted host: {host!r}" + if source is not None: + msg += f" (from {source})" + logger.info(msg) + + parsed_host, parsed_port = parse_netloc(host) + if parsed_host is None: + raise ValueError(f"Trusted host URL must include a host part: {host!r}") + if (parsed_host, parsed_port) not in self.pip_trusted_origins: + self.pip_trusted_origins.append((parsed_host, parsed_port)) + + self.mount( + build_url_from_netloc(host, scheme="http") + "/", self._trusted_host_adapter + ) + self.mount(build_url_from_netloc(host) + "/", self._trusted_host_adapter) + if not parsed_port: + self.mount( + build_url_from_netloc(host, scheme="http") + ":", + self._trusted_host_adapter, + ) + # Mount wildcard ports for the same host. + self.mount(build_url_from_netloc(host) + ":", self._trusted_host_adapter) + + def iter_secure_origins(self) -> Generator[SecureOrigin, None, None]: + yield from SECURE_ORIGINS + for host, port in self.pip_trusted_origins: + yield ("*", host, "*" if port is None else port) + + def is_secure_origin(self, location: Link) -> bool: + # Determine if this url used a secure transport mechanism + parsed = urllib.parse.urlparse(str(location)) + origin_protocol, origin_host, origin_port = ( + parsed.scheme, + parsed.hostname, + parsed.port, + ) + + # The protocol to use to see if the protocol matches. + # Don't count the repository type as part of the protocol: in + # cases such as "git+ssh", only use "ssh". (I.e., Only verify against + # the last scheme.) + origin_protocol = origin_protocol.rsplit("+", 1)[-1] + + # Determine if our origin is a secure origin by looking through our + # hardcoded list of secure origins, as well as any additional ones + # configured on this PackageFinder instance. + for secure_origin in self.iter_secure_origins(): + secure_protocol, secure_host, secure_port = secure_origin + if origin_protocol != secure_protocol and secure_protocol != "*": + continue + + try: + addr = ipaddress.ip_address(origin_host or "") + network = ipaddress.ip_network(secure_host) + except ValueError: + # We don't have both a valid address or a valid network, so + # we'll check this origin against hostnames. + if ( + origin_host + and origin_host.lower() != secure_host.lower() + and secure_host != "*" + ): + continue + else: + # We have a valid address and network, so see if the address + # is contained within the network. + if addr not in network: + continue + + # Check to see if the port matches. + if ( + origin_port != secure_port + and secure_port != "*" + and secure_port is not None + ): + continue + + # If we've gotten here, then this origin matches the current + # secure origin and we should return True + return True + + # If we've gotten to this point, then the origin isn't secure and we + # will not accept it as a valid location to search. We will however + # log a warning that we are ignoring it. + logger.warning( + "The repository located at %s is not a trusted or secure host and " + "is being ignored. If this repository is available via HTTPS we " + "recommend you use HTTPS instead, otherwise you may silence " + "this warning and allow it anyway with '--trusted-host %s'.", + origin_host, + origin_host, + ) + + return False + + def request(self, method: str, url: str, *args: Any, **kwargs: Any) -> Response: + # Allow setting a default timeout on a session + kwargs.setdefault("timeout", self.timeout) + # Allow setting a default proxies on a session + kwargs.setdefault("proxies", self.proxies) + + # Dispatch the actual request + return super().request(method, url, *args, **kwargs) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/utils.py b/venv/lib/python3.12/site-packages/pip/_internal/network/utils.py new file mode 100644 index 0000000..134848a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/network/utils.py @@ -0,0 +1,96 @@ +from typing import Dict, Generator + +from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response + +from pip._internal.exceptions import NetworkConnectionError + +# The following comments and HTTP headers were originally added by +# Donald Stufft in git commit 22c562429a61bb77172039e480873fb239dd8c03. +# +# We use Accept-Encoding: identity here because requests defaults to +# accepting compressed responses. This breaks in a variety of ways +# depending on how the server is configured. +# - Some servers will notice that the file isn't a compressible file +# and will leave the file alone and with an empty Content-Encoding +# - Some servers will notice that the file is already compressed and +# will leave the file alone, adding a Content-Encoding: gzip header +# - Some servers won't notice anything at all and will take a file +# that's already been compressed and compress it again, and set +# the Content-Encoding: gzip header +# By setting this to request only the identity encoding we're hoping +# to eliminate the third case. Hopefully there does not exist a server +# which when given a file will notice it is already compressed and that +# you're not asking for a compressed file and will then decompress it +# before sending because if that's the case I don't think it'll ever be +# possible to make this work. +HEADERS: Dict[str, str] = {"Accept-Encoding": "identity"} + + +def raise_for_status(resp: Response) -> None: + http_error_msg = "" + if isinstance(resp.reason, bytes): + # We attempt to decode utf-8 first because some servers + # choose to localize their reason strings. If the string + # isn't utf-8, we fall back to iso-8859-1 for all other + # encodings. + try: + reason = resp.reason.decode("utf-8") + except UnicodeDecodeError: + reason = resp.reason.decode("iso-8859-1") + else: + reason = resp.reason + + if 400 <= resp.status_code < 500: + http_error_msg = ( + f"{resp.status_code} Client Error: {reason} for url: {resp.url}" + ) + + elif 500 <= resp.status_code < 600: + http_error_msg = ( + f"{resp.status_code} Server Error: {reason} for url: {resp.url}" + ) + + if http_error_msg: + raise NetworkConnectionError(http_error_msg, response=resp) + + +def response_chunks( + response: Response, chunk_size: int = CONTENT_CHUNK_SIZE +) -> Generator[bytes, None, None]: + """Given a requests Response, provide the data chunks.""" + try: + # Special case for urllib3. + for chunk in response.raw.stream( + chunk_size, + # We use decode_content=False here because we don't + # want urllib3 to mess with the raw bytes we get + # from the server. If we decompress inside of + # urllib3 then we cannot verify the checksum + # because the checksum will be of the compressed + # file. This breakage will only occur if the + # server adds a Content-Encoding header, which + # depends on how the server was configured: + # - Some servers will notice that the file isn't a + # compressible file and will leave the file alone + # and with an empty Content-Encoding + # - Some servers will notice that the file is + # already compressed and will leave the file + # alone and will add a Content-Encoding: gzip + # header + # - Some servers won't notice anything at all and + # will take a file that's already been compressed + # and compress it again and set the + # Content-Encoding: gzip header + # + # By setting this not to decode automatically we + # hope to eliminate problems with the second case. + decode_content=False, + ): + yield chunk + except AttributeError: + # Standard file-like object. + while True: + chunk = response.raw.read(chunk_size) + if not chunk: + break + yield chunk diff --git a/venv/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py b/venv/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py new file mode 100644 index 0000000..22ec8d2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py @@ -0,0 +1,62 @@ +"""xmlrpclib.Transport implementation +""" + +import logging +import urllib.parse +import xmlrpc.client +from typing import TYPE_CHECKING, Tuple + +from pip._internal.exceptions import NetworkConnectionError +from pip._internal.network.session import PipSession +from pip._internal.network.utils import raise_for_status + +if TYPE_CHECKING: + from xmlrpc.client import _HostType, _Marshallable + + from _typeshed import SizedBuffer + +logger = logging.getLogger(__name__) + + +class PipXmlrpcTransport(xmlrpc.client.Transport): + """Provide a `xmlrpclib.Transport` implementation via a `PipSession` + object. + """ + + def __init__( + self, index_url: str, session: PipSession, use_datetime: bool = False + ) -> None: + super().__init__(use_datetime) + index_parts = urllib.parse.urlparse(index_url) + self._scheme = index_parts.scheme + self._session = session + + def request( + self, + host: "_HostType", + handler: str, + request_body: "SizedBuffer", + verbose: bool = False, + ) -> Tuple["_Marshallable", ...]: + assert isinstance(host, str) + parts = (self._scheme, host, handler, None, None, None) + url = urllib.parse.urlunparse(parts) + try: + headers = {"Content-Type": "text/xml"} + response = self._session.post( + url, + data=request_body, + headers=headers, + stream=True, + ) + raise_for_status(response) + self.verbose = verbose + return self.parse_response(response.raw) + except NetworkConnectionError as exc: + assert exc.response + logger.critical( + "HTTP error %s while getting %s", + exc.response.status_code, + url, + ) + raise diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..a55d5fd Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc new file mode 100644 index 0000000..beb336c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc new file mode 100644 index 0000000..015bbb9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc new file mode 100644 index 0000000..8c1a557 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..ce62431 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc new file mode 100644 index 0000000..ad77330 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc new file mode 100644 index 0000000..5d3a51d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc new file mode 100644 index 0000000..63dea36 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc new file mode 100644 index 0000000..1ebfcea Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc new file mode 100644 index 0000000..4e2cdaf Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc new file mode 100644 index 0000000..0d3f148 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc new file mode 100644 index 0000000..82b6d97 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py new file mode 100644 index 0000000..3791932 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py @@ -0,0 +1,139 @@ +import contextlib +import hashlib +import logging +import os +from types import TracebackType +from typing import Dict, Generator, Optional, Set, Type, Union + +from pip._internal.models.link import Link +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +@contextlib.contextmanager +def update_env_context_manager(**changes: str) -> Generator[None, None, None]: + target = os.environ + + # Save values from the target and change them. + non_existent_marker = object() + saved_values: Dict[str, Union[object, str]] = {} + for name, new_value in changes.items(): + try: + saved_values[name] = target[name] + except KeyError: + saved_values[name] = non_existent_marker + target[name] = new_value + + try: + yield + finally: + # Restore original values in the target. + for name, original_value in saved_values.items(): + if original_value is non_existent_marker: + del target[name] + else: + assert isinstance(original_value, str) # for mypy + target[name] = original_value + + +@contextlib.contextmanager +def get_build_tracker() -> Generator["BuildTracker", None, None]: + root = os.environ.get("PIP_BUILD_TRACKER") + with contextlib.ExitStack() as ctx: + if root is None: + root = ctx.enter_context(TempDirectory(kind="build-tracker")).path + ctx.enter_context(update_env_context_manager(PIP_BUILD_TRACKER=root)) + logger.debug("Initialized build tracking at %s", root) + + with BuildTracker(root) as tracker: + yield tracker + + +class TrackerId(str): + """Uniquely identifying string provided to the build tracker.""" + + +class BuildTracker: + """Ensure that an sdist cannot request itself as a setup requirement. + + When an sdist is prepared, it identifies its setup requirements in the + context of ``BuildTracker.track()``. If a requirement shows up recursively, this + raises an exception. + + This stops fork bombs embedded in malicious packages.""" + + def __init__(self, root: str) -> None: + self._root = root + self._entries: Dict[TrackerId, InstallRequirement] = {} + logger.debug("Created build tracker: %s", self._root) + + def __enter__(self) -> "BuildTracker": + logger.debug("Entered build tracker: %s", self._root) + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + self.cleanup() + + def _entry_path(self, key: TrackerId) -> str: + hashed = hashlib.sha224(key.encode()).hexdigest() + return os.path.join(self._root, hashed) + + def add(self, req: InstallRequirement, key: TrackerId) -> None: + """Add an InstallRequirement to build tracking.""" + + # Get the file to write information about this requirement. + entry_path = self._entry_path(key) + + # Try reading from the file. If it exists and can be read from, a build + # is already in progress, so a LookupError is raised. + try: + with open(entry_path) as fp: + contents = fp.read() + except FileNotFoundError: + pass + else: + message = "{} is already being built: {}".format(req.link, contents) + raise LookupError(message) + + # If we're here, req should really not be building already. + assert key not in self._entries + + # Start tracking this requirement. + with open(entry_path, "w", encoding="utf-8") as fp: + fp.write(str(req)) + self._entries[key] = req + + logger.debug("Added %s to build tracker %r", req, self._root) + + def remove(self, req: InstallRequirement, key: TrackerId) -> None: + """Remove an InstallRequirement from build tracking.""" + + # Delete the created file and the corresponding entry. + os.unlink(self._entry_path(key)) + del self._entries[key] + + logger.debug("Removed %s from build tracker %r", req, self._root) + + def cleanup(self) -> None: + for key, req in list(self._entries.items()): + self.remove(req, key) + + logger.debug("Removed build tracker: %r", self._root) + + @contextlib.contextmanager + def track(self, req: InstallRequirement, key: str) -> Generator[None, None, None]: + """Ensure that `key` cannot install itself as a setup requirement. + + :raises LookupError: If `key` was already provided in a parent invocation of + the context introduced by this method.""" + tracker_id = TrackerId(key) + self.add(req, tracker_id) + yield + self.remove(req, tracker_id) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py new file mode 100644 index 0000000..c66ac35 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py @@ -0,0 +1,39 @@ +"""Metadata generation logic for source distributions. +""" + +import os + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller + +from pip._internal.build_env import BuildEnvironment +from pip._internal.exceptions import ( + InstallationSubprocessError, + MetadataGenerationFailed, +) +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory + + +def generate_metadata( + build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str +) -> str: + """Generate metadata using mechanisms described in PEP 517. + + Returns the generated metadata directory. + """ + metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) + + metadata_dir = metadata_tmpdir.path + + with build_env: + # Note that BuildBackendHookCaller implements a fallback for + # prepare_metadata_for_build_wheel, so we don't have to + # consider the possibility that this hook doesn't exist. + runner = runner_with_spinner_message("Preparing metadata (pyproject.toml)") + with backend.subprocess_runner(runner): + try: + distinfo_dir = backend.prepare_metadata_for_build_wheel(metadata_dir) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + return os.path.join(metadata_dir, distinfo_dir) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py new file mode 100644 index 0000000..27c69f0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py @@ -0,0 +1,41 @@ +"""Metadata generation logic for source distributions. +""" + +import os + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller + +from pip._internal.build_env import BuildEnvironment +from pip._internal.exceptions import ( + InstallationSubprocessError, + MetadataGenerationFailed, +) +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory + + +def generate_editable_metadata( + build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str +) -> str: + """Generate metadata using mechanisms described in PEP 660. + + Returns the generated metadata directory. + """ + metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) + + metadata_dir = metadata_tmpdir.path + + with build_env: + # Note that BuildBackendHookCaller implements a fallback for + # prepare_metadata_for_build_wheel/editable, so we don't have to + # consider the possibility that this hook doesn't exist. + runner = runner_with_spinner_message( + "Preparing editable metadata (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + try: + distinfo_dir = backend.prepare_metadata_for_build_editable(metadata_dir) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + return os.path.join(metadata_dir, distinfo_dir) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py new file mode 100644 index 0000000..e60988d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py @@ -0,0 +1,74 @@ +"""Metadata generation logic for legacy source distributions. +""" + +import logging +import os + +from pip._internal.build_env import BuildEnvironment +from pip._internal.cli.spinners import open_spinner +from pip._internal.exceptions import ( + InstallationError, + InstallationSubprocessError, + MetadataGenerationFailed, +) +from pip._internal.utils.setuptools_build import make_setuptools_egg_info_args +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory + +logger = logging.getLogger(__name__) + + +def _find_egg_info(directory: str) -> str: + """Find an .egg-info subdirectory in `directory`.""" + filenames = [f for f in os.listdir(directory) if f.endswith(".egg-info")] + + if not filenames: + raise InstallationError(f"No .egg-info directory found in {directory}") + + if len(filenames) > 1: + raise InstallationError( + "More than one .egg-info directory found in {}".format(directory) + ) + + return os.path.join(directory, filenames[0]) + + +def generate_metadata( + build_env: BuildEnvironment, + setup_py_path: str, + source_dir: str, + isolated: bool, + details: str, +) -> str: + """Generate metadata using setup.py-based defacto mechanisms. + + Returns the generated metadata directory. + """ + logger.debug( + "Running setup.py (path:%s) egg_info for package %s", + setup_py_path, + details, + ) + + egg_info_dir = TempDirectory(kind="pip-egg-info", globally_managed=True).path + + args = make_setuptools_egg_info_args( + setup_py_path, + egg_info_dir=egg_info_dir, + no_user_config=isolated, + ) + + with build_env: + with open_spinner("Preparing metadata (setup.py)") as spinner: + try: + call_subprocess( + args, + cwd=source_dir, + command_desc="python setup.py egg_info", + spinner=spinner, + ) + except InstallationSubprocessError as error: + raise MetadataGenerationFailed(package_details=details) from error + + # Return the .egg-info directory. + return _find_egg_info(egg_info_dir) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py new file mode 100644 index 0000000..064811a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py @@ -0,0 +1,37 @@ +import logging +import os +from typing import Optional + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller + +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +def build_wheel_pep517( + name: str, + backend: BuildBackendHookCaller, + metadata_directory: str, + tempd: str, +) -> Optional[str]: + """Build one InstallRequirement using the PEP 517 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert metadata_directory is not None + try: + logger.debug("Destination directory: %s", tempd) + + runner = runner_with_spinner_message( + f"Building wheel for {name} (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + wheel_name = backend.build_wheel( + tempd, + metadata_directory=metadata_directory, + ) + except Exception: + logger.error("Failed building wheel for %s", name) + return None + return os.path.join(tempd, wheel_name) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py new file mode 100644 index 0000000..719d69d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py @@ -0,0 +1,46 @@ +import logging +import os +from typing import Optional + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller, HookMissing + +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +def build_wheel_editable( + name: str, + backend: BuildBackendHookCaller, + metadata_directory: str, + tempd: str, +) -> Optional[str]: + """Build one InstallRequirement using the PEP 660 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert metadata_directory is not None + try: + logger.debug("Destination directory: %s", tempd) + + runner = runner_with_spinner_message( + f"Building editable for {name} (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + try: + wheel_name = backend.build_editable( + tempd, + metadata_directory=metadata_directory, + ) + except HookMissing as e: + logger.error( + "Cannot build editable %s because the build " + "backend does not have the %s hook", + name, + e, + ) + return None + except Exception: + logger.error("Failed building editable for %s", name) + return None + return os.path.join(tempd, wheel_name) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py new file mode 100644 index 0000000..c5f0492 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py @@ -0,0 +1,102 @@ +import logging +import os.path +from typing import List, Optional + +from pip._internal.cli.spinners import open_spinner +from pip._internal.utils.setuptools_build import make_setuptools_bdist_wheel_args +from pip._internal.utils.subprocess import call_subprocess, format_command_args + +logger = logging.getLogger(__name__) + + +def format_command_result( + command_args: List[str], + command_output: str, +) -> str: + """Format command information for logging.""" + command_desc = format_command_args(command_args) + text = f"Command arguments: {command_desc}\n" + + if not command_output: + text += "Command output: None" + elif logger.getEffectiveLevel() > logging.DEBUG: + text += "Command output: [use --verbose to show]" + else: + if not command_output.endswith("\n"): + command_output += "\n" + text += f"Command output:\n{command_output}" + + return text + + +def get_legacy_build_wheel_path( + names: List[str], + temp_dir: str, + name: str, + command_args: List[str], + command_output: str, +) -> Optional[str]: + """Return the path to the wheel in the temporary build directory.""" + # Sort for determinism. + names = sorted(names) + if not names: + msg = ("Legacy build of wheel for {!r} created no files.\n").format(name) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + return None + + if len(names) > 1: + msg = ( + "Legacy build of wheel for {!r} created more than one file.\n" + "Filenames (choosing first): {}\n" + ).format(name, names) + msg += format_command_result(command_args, command_output) + logger.warning(msg) + + return os.path.join(temp_dir, names[0]) + + +def build_wheel_legacy( + name: str, + setup_py_path: str, + source_dir: str, + global_options: List[str], + build_options: List[str], + tempd: str, +) -> Optional[str]: + """Build one unpacked package using the "legacy" build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + wheel_args = make_setuptools_bdist_wheel_args( + setup_py_path, + global_options=global_options, + build_options=build_options, + destination_dir=tempd, + ) + + spin_message = f"Building wheel for {name} (setup.py)" + with open_spinner(spin_message) as spinner: + logger.debug("Destination directory: %s", tempd) + + try: + output = call_subprocess( + wheel_args, + command_desc="python setup.py bdist_wheel", + cwd=source_dir, + spinner=spinner, + ) + except Exception: + spinner.finish("error") + logger.error("Failed building wheel for %s", name) + return None + + names = os.listdir(tempd) + wheel_path = get_legacy_build_wheel_path( + names=names, + temp_dir=tempd, + name=name, + command_args=wheel_args, + command_output=output, + ) + return wheel_path diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/check.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/check.py new file mode 100644 index 0000000..90c6a58 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/check.py @@ -0,0 +1,187 @@ +"""Validation of dependencies of packages +""" + +import logging +from typing import Callable, Dict, List, NamedTuple, Optional, Set, Tuple + +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.specifiers import LegacySpecifier +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import LegacyVersion + +from pip._internal.distributions import make_distribution_for_install_requirement +from pip._internal.metadata import get_default_environment +from pip._internal.metadata.base import DistributionVersion +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.deprecation import deprecated + +logger = logging.getLogger(__name__) + + +class PackageDetails(NamedTuple): + version: DistributionVersion + dependencies: List[Requirement] + + +# Shorthands +PackageSet = Dict[NormalizedName, PackageDetails] +Missing = Tuple[NormalizedName, Requirement] +Conflicting = Tuple[NormalizedName, DistributionVersion, Requirement] + +MissingDict = Dict[NormalizedName, List[Missing]] +ConflictingDict = Dict[NormalizedName, List[Conflicting]] +CheckResult = Tuple[MissingDict, ConflictingDict] +ConflictDetails = Tuple[PackageSet, CheckResult] + + +def create_package_set_from_installed() -> Tuple[PackageSet, bool]: + """Converts a list of distributions into a PackageSet.""" + package_set = {} + problems = False + env = get_default_environment() + for dist in env.iter_installed_distributions(local_only=False, skip=()): + name = dist.canonical_name + try: + dependencies = list(dist.iter_dependencies()) + package_set[name] = PackageDetails(dist.version, dependencies) + except (OSError, ValueError) as e: + # Don't crash on unreadable or broken metadata. + logger.warning("Error parsing requirements for %s: %s", name, e) + problems = True + return package_set, problems + + +def check_package_set( + package_set: PackageSet, should_ignore: Optional[Callable[[str], bool]] = None +) -> CheckResult: + """Check if a package set is consistent + + If should_ignore is passed, it should be a callable that takes a + package name and returns a boolean. + """ + + warn_legacy_versions_and_specifiers(package_set) + + missing = {} + conflicting = {} + + for package_name, package_detail in package_set.items(): + # Info about dependencies of package_name + missing_deps: Set[Missing] = set() + conflicting_deps: Set[Conflicting] = set() + + if should_ignore and should_ignore(package_name): + continue + + for req in package_detail.dependencies: + name = canonicalize_name(req.name) + + # Check if it's missing + if name not in package_set: + missed = True + if req.marker is not None: + missed = req.marker.evaluate({"extra": ""}) + if missed: + missing_deps.add((name, req)) + continue + + # Check if there's a conflict + version = package_set[name].version + if not req.specifier.contains(version, prereleases=True): + conflicting_deps.add((name, version, req)) + + if missing_deps: + missing[package_name] = sorted(missing_deps, key=str) + if conflicting_deps: + conflicting[package_name] = sorted(conflicting_deps, key=str) + + return missing, conflicting + + +def check_install_conflicts(to_install: List[InstallRequirement]) -> ConflictDetails: + """For checking if the dependency graph would be consistent after \ + installing given requirements + """ + # Start from the current state + package_set, _ = create_package_set_from_installed() + # Install packages + would_be_installed = _simulate_installation_of(to_install, package_set) + + # Only warn about directly-dependent packages; create a whitelist of them + whitelist = _create_whitelist(would_be_installed, package_set) + + return ( + package_set, + check_package_set( + package_set, should_ignore=lambda name: name not in whitelist + ), + ) + + +def _simulate_installation_of( + to_install: List[InstallRequirement], package_set: PackageSet +) -> Set[NormalizedName]: + """Computes the version of packages after installing to_install.""" + # Keep track of packages that were installed + installed = set() + + # Modify it as installing requirement_set would (assuming no errors) + for inst_req in to_install: + abstract_dist = make_distribution_for_install_requirement(inst_req) + dist = abstract_dist.get_metadata_distribution() + name = dist.canonical_name + package_set[name] = PackageDetails(dist.version, list(dist.iter_dependencies())) + + installed.add(name) + + return installed + + +def _create_whitelist( + would_be_installed: Set[NormalizedName], package_set: PackageSet +) -> Set[NormalizedName]: + packages_affected = set(would_be_installed) + + for package_name in package_set: + if package_name in packages_affected: + continue + + for req in package_set[package_name].dependencies: + if canonicalize_name(req.name) in packages_affected: + packages_affected.add(package_name) + break + + return packages_affected + + +def warn_legacy_versions_and_specifiers(package_set: PackageSet) -> None: + for project_name, package_details in package_set.items(): + if isinstance(package_details.version, LegacyVersion): + deprecated( + reason=( + f"{project_name} {package_details.version} " + f"has a non-standard version number." + ), + replacement=( + f"to upgrade to a newer version of {project_name} " + f"or contact the author to suggest that they " + f"release a version with a conforming version number" + ), + issue=12063, + gone_in="24.1", + ) + for dep in package_details.dependencies: + if any(isinstance(spec, LegacySpecifier) for spec in dep.specifier): + deprecated( + reason=( + f"{project_name} {package_details.version} " + f"has a non-standard dependency specifier {dep}." + ), + replacement=( + f"to upgrade to a newer version of {project_name} " + f"or contact the author to suggest that they " + f"release a version with a conforming dependency specifiers" + ), + issue=12063, + gone_in="24.1", + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/freeze.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/freeze.py new file mode 100644 index 0000000..3544568 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/freeze.py @@ -0,0 +1,255 @@ +import collections +import logging +import os +from typing import Container, Dict, Generator, Iterable, List, NamedTuple, Optional, Set + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.metadata import BaseDistribution, get_environment +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, +) +from pip._internal.req.req_file import COMMENT_RE +from pip._internal.utils.direct_url_helpers import direct_url_as_pep440_direct_reference + +logger = logging.getLogger(__name__) + + +class _EditableInfo(NamedTuple): + requirement: str + comments: List[str] + + +def freeze( + requirement: Optional[List[str]] = None, + local_only: bool = False, + user_only: bool = False, + paths: Optional[List[str]] = None, + isolated: bool = False, + exclude_editable: bool = False, + skip: Container[str] = (), +) -> Generator[str, None, None]: + installations: Dict[str, FrozenRequirement] = {} + + dists = get_environment(paths).iter_installed_distributions( + local_only=local_only, + skip=(), + user_only=user_only, + ) + for dist in dists: + req = FrozenRequirement.from_dist(dist) + if exclude_editable and req.editable: + continue + installations[req.canonical_name] = req + + if requirement: + # the options that don't get turned into an InstallRequirement + # should only be emitted once, even if the same option is in multiple + # requirements files, so we need to keep track of what has been emitted + # so that we don't emit it again if it's seen again + emitted_options: Set[str] = set() + # keep track of which files a requirement is in so that we can + # give an accurate warning if a requirement appears multiple times. + req_files: Dict[str, List[str]] = collections.defaultdict(list) + for req_file_path in requirement: + with open(req_file_path) as req_file: + for line in req_file: + if ( + not line.strip() + or line.strip().startswith("#") + or line.startswith( + ( + "-r", + "--requirement", + "-f", + "--find-links", + "-i", + "--index-url", + "--pre", + "--trusted-host", + "--process-dependency-links", + "--extra-index-url", + "--use-feature", + ) + ) + ): + line = line.rstrip() + if line not in emitted_options: + emitted_options.add(line) + yield line + continue + + if line.startswith("-e") or line.startswith("--editable"): + if line.startswith("-e"): + line = line[2:].strip() + else: + line = line[len("--editable") :].strip().lstrip("=") + line_req = install_req_from_editable( + line, + isolated=isolated, + ) + else: + line_req = install_req_from_line( + COMMENT_RE.sub("", line).strip(), + isolated=isolated, + ) + + if not line_req.name: + logger.info( + "Skipping line in requirement file [%s] because " + "it's not clear what it would install: %s", + req_file_path, + line.strip(), + ) + logger.info( + " (add #egg=PackageName to the URL to avoid" + " this warning)" + ) + else: + line_req_canonical_name = canonicalize_name(line_req.name) + if line_req_canonical_name not in installations: + # either it's not installed, or it is installed + # but has been processed already + if not req_files[line_req.name]: + logger.warning( + "Requirement file [%s] contains %s, but " + "package %r is not installed", + req_file_path, + COMMENT_RE.sub("", line).strip(), + line_req.name, + ) + else: + req_files[line_req.name].append(req_file_path) + else: + yield str(installations[line_req_canonical_name]).rstrip() + del installations[line_req_canonical_name] + req_files[line_req.name].append(req_file_path) + + # Warn about requirements that were included multiple times (in a + # single requirements file or in different requirements files). + for name, files in req_files.items(): + if len(files) > 1: + logger.warning( + "Requirement %s included multiple times [%s]", + name, + ", ".join(sorted(set(files))), + ) + + yield ("## The following requirements were added by pip freeze:") + for installation in sorted(installations.values(), key=lambda x: x.name.lower()): + if installation.canonical_name not in skip: + yield str(installation).rstrip() + + +def _format_as_name_version(dist: BaseDistribution) -> str: + dist_version = dist.version + if isinstance(dist_version, Version): + return f"{dist.raw_name}=={dist_version}" + return f"{dist.raw_name}==={dist_version}" + + +def _get_editable_info(dist: BaseDistribution) -> _EditableInfo: + """ + Compute and return values (req, comments) for use in + FrozenRequirement.from_dist(). + """ + editable_project_location = dist.editable_project_location + assert editable_project_location + location = os.path.normcase(os.path.abspath(editable_project_location)) + + from pip._internal.vcs import RemoteNotFoundError, RemoteNotValidError, vcs + + vcs_backend = vcs.get_backend_for_dir(location) + + if vcs_backend is None: + display = _format_as_name_version(dist) + logger.debug( + 'No VCS found for editable requirement "%s" in: %r', + display, + location, + ) + return _EditableInfo( + requirement=location, + comments=[f"# Editable install with no version control ({display})"], + ) + + vcs_name = type(vcs_backend).__name__ + + try: + req = vcs_backend.get_src_requirement(location, dist.raw_name) + except RemoteNotFoundError: + display = _format_as_name_version(dist) + return _EditableInfo( + requirement=location, + comments=[f"# Editable {vcs_name} install with no remote ({display})"], + ) + except RemoteNotValidError as ex: + display = _format_as_name_version(dist) + return _EditableInfo( + requirement=location, + comments=[ + f"# Editable {vcs_name} install ({display}) with either a deleted " + f"local remote or invalid URI:", + f"# '{ex.url}'", + ], + ) + except BadCommand: + logger.warning( + "cannot determine version of editable source in %s " + "(%s command not found in path)", + location, + vcs_backend.name, + ) + return _EditableInfo(requirement=location, comments=[]) + except InstallationError as exc: + logger.warning("Error when trying to get requirement for VCS system %s", exc) + else: + return _EditableInfo(requirement=req, comments=[]) + + logger.warning("Could not determine repository location of %s", location) + + return _EditableInfo( + requirement=location, + comments=["## !! Could not determine repository location"], + ) + + +class FrozenRequirement: + def __init__( + self, + name: str, + req: str, + editable: bool, + comments: Iterable[str] = (), + ) -> None: + self.name = name + self.canonical_name = canonicalize_name(name) + self.req = req + self.editable = editable + self.comments = comments + + @classmethod + def from_dist(cls, dist: BaseDistribution) -> "FrozenRequirement": + editable = dist.editable + if editable: + req, comments = _get_editable_info(dist) + else: + comments = [] + direct_url = dist.direct_url + if direct_url: + # if PEP 610 metadata is present, use it + req = direct_url_as_pep440_direct_reference(direct_url, dist.raw_name) + else: + # name==version requirement + req = _format_as_name_version(dist) + + return cls(dist.raw_name, req, editable, comments=comments) + + def __str__(self) -> str: + req = self.req + if self.editable: + req = f"-e {req}" + return "\n".join(list(self.comments) + [str(req)]) + "\n" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py new file mode 100644 index 0000000..24d6a5d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py @@ -0,0 +1,2 @@ +"""For modules related to installing packages. +""" diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..0641036 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc new file mode 100644 index 0000000..bc3a1b1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc new file mode 100644 index 0000000..90f76ff Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py new file mode 100644 index 0000000..bebe24e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py @@ -0,0 +1,46 @@ +"""Legacy editable installation process, i.e. `setup.py develop`. +""" +import logging +from typing import Optional, Sequence + +from pip._internal.build_env import BuildEnvironment +from pip._internal.utils.logging import indent_log +from pip._internal.utils.setuptools_build import make_setuptools_develop_args +from pip._internal.utils.subprocess import call_subprocess + +logger = logging.getLogger(__name__) + + +def install_editable( + *, + global_options: Sequence[str], + prefix: Optional[str], + home: Optional[str], + use_user_site: bool, + name: str, + setup_py_path: str, + isolated: bool, + build_env: BuildEnvironment, + unpacked_source_directory: str, +) -> None: + """Install a package in editable mode. Most arguments are pass-through + to setuptools. + """ + logger.info("Running setup.py develop for %s", name) + + args = make_setuptools_develop_args( + setup_py_path, + global_options=global_options, + no_user_config=isolated, + prefix=prefix, + home=home, + use_user_site=use_user_site, + ) + + with indent_log(): + with build_env: + call_subprocess( + args, + command_desc="python setup.py develop", + cwd=unpacked_source_directory, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py new file mode 100644 index 0000000..f67180c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py @@ -0,0 +1,734 @@ +"""Support for installing and building the "wheel" binary package format. +""" + +import collections +import compileall +import contextlib +import csv +import importlib +import logging +import os.path +import re +import shutil +import sys +import warnings +from base64 import urlsafe_b64encode +from email.message import Message +from itertools import chain, filterfalse, starmap +from typing import ( + IO, + TYPE_CHECKING, + Any, + BinaryIO, + Callable, + Dict, + Generator, + Iterable, + Iterator, + List, + NewType, + Optional, + Sequence, + Set, + Tuple, + Union, + cast, +) +from zipfile import ZipFile, ZipInfo + +from pip._vendor.distlib.scripts import ScriptMaker +from pip._vendor.distlib.util import get_export_entry +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import InstallationError +from pip._internal.locations import get_major_minor_version +from pip._internal.metadata import ( + BaseDistribution, + FilesystemWheel, + get_wheel_distribution, +) +from pip._internal.models.direct_url import DIRECT_URL_METADATA_NAME, DirectUrl +from pip._internal.models.scheme import SCHEME_KEYS, Scheme +from pip._internal.utils.filesystem import adjacent_tmp_file, replace +from pip._internal.utils.misc import captured_stdout, ensure_dir, hash_file, partition +from pip._internal.utils.unpacking import ( + current_umask, + is_within_directory, + set_extracted_file_to_default_mode_plus_executable, + zip_item_is_executable, +) +from pip._internal.utils.wheel import parse_wheel + +if TYPE_CHECKING: + from typing import Protocol + + class File(Protocol): + src_record_path: "RecordPath" + dest_path: str + changed: bool + + def save(self) -> None: + pass + + +logger = logging.getLogger(__name__) + +RecordPath = NewType("RecordPath", str) +InstalledCSVRow = Tuple[RecordPath, str, Union[int, str]] + + +def rehash(path: str, blocksize: int = 1 << 20) -> Tuple[str, str]: + """Return (encoded_digest, length) for path using hashlib.sha256()""" + h, length = hash_file(path, blocksize) + digest = "sha256=" + urlsafe_b64encode(h.digest()).decode("latin1").rstrip("=") + return (digest, str(length)) + + +def csv_io_kwargs(mode: str) -> Dict[str, Any]: + """Return keyword arguments to properly open a CSV file + in the given mode. + """ + return {"mode": mode, "newline": "", "encoding": "utf-8"} + + +def fix_script(path: str) -> bool: + """Replace #!python with #!/path/to/python + Return True if file was changed. + """ + # XXX RECORD hashes will need to be updated + assert os.path.isfile(path) + + with open(path, "rb") as script: + firstline = script.readline() + if not firstline.startswith(b"#!python"): + return False + exename = sys.executable.encode(sys.getfilesystemencoding()) + firstline = b"#!" + exename + os.linesep.encode("ascii") + rest = script.read() + with open(path, "wb") as script: + script.write(firstline) + script.write(rest) + return True + + +def wheel_root_is_purelib(metadata: Message) -> bool: + return metadata.get("Root-Is-Purelib", "").lower() == "true" + + +def get_entrypoints(dist: BaseDistribution) -> Tuple[Dict[str, str], Dict[str, str]]: + console_scripts = {} + gui_scripts = {} + for entry_point in dist.iter_entry_points(): + if entry_point.group == "console_scripts": + console_scripts[entry_point.name] = entry_point.value + elif entry_point.group == "gui_scripts": + gui_scripts[entry_point.name] = entry_point.value + return console_scripts, gui_scripts + + +def message_about_scripts_not_on_PATH(scripts: Sequence[str]) -> Optional[str]: + """Determine if any scripts are not on PATH and format a warning. + Returns a warning message if one or more scripts are not on PATH, + otherwise None. + """ + if not scripts: + return None + + # Group scripts by the path they were installed in + grouped_by_dir: Dict[str, Set[str]] = collections.defaultdict(set) + for destfile in scripts: + parent_dir = os.path.dirname(destfile) + script_name = os.path.basename(destfile) + grouped_by_dir[parent_dir].add(script_name) + + # We don't want to warn for directories that are on PATH. + not_warn_dirs = [ + os.path.normcase(os.path.normpath(i)).rstrip(os.sep) + for i in os.environ.get("PATH", "").split(os.pathsep) + ] + # If an executable sits with sys.executable, we don't warn for it. + # This covers the case of venv invocations without activating the venv. + not_warn_dirs.append( + os.path.normcase(os.path.normpath(os.path.dirname(sys.executable))) + ) + warn_for: Dict[str, Set[str]] = { + parent_dir: scripts + for parent_dir, scripts in grouped_by_dir.items() + if os.path.normcase(os.path.normpath(parent_dir)) not in not_warn_dirs + } + if not warn_for: + return None + + # Format a message + msg_lines = [] + for parent_dir, dir_scripts in warn_for.items(): + sorted_scripts: List[str] = sorted(dir_scripts) + if len(sorted_scripts) == 1: + start_text = f"script {sorted_scripts[0]} is" + else: + start_text = "scripts {} are".format( + ", ".join(sorted_scripts[:-1]) + " and " + sorted_scripts[-1] + ) + + msg_lines.append( + f"The {start_text} installed in '{parent_dir}' which is not on PATH." + ) + + last_line_fmt = ( + "Consider adding {} to PATH or, if you prefer " + "to suppress this warning, use --no-warn-script-location." + ) + if len(msg_lines) == 1: + msg_lines.append(last_line_fmt.format("this directory")) + else: + msg_lines.append(last_line_fmt.format("these directories")) + + # Add a note if any directory starts with ~ + warn_for_tilde = any( + i[0] == "~" for i in os.environ.get("PATH", "").split(os.pathsep) if i + ) + if warn_for_tilde: + tilde_warning_msg = ( + "NOTE: The current PATH contains path(s) starting with `~`, " + "which may not be expanded by all applications." + ) + msg_lines.append(tilde_warning_msg) + + # Returns the formatted multiline message + return "\n".join(msg_lines) + + +def _normalized_outrows( + outrows: Iterable[InstalledCSVRow], +) -> List[Tuple[str, str, str]]: + """Normalize the given rows of a RECORD file. + + Items in each row are converted into str. Rows are then sorted to make + the value more predictable for tests. + + Each row is a 3-tuple (path, hash, size) and corresponds to a record of + a RECORD file (see PEP 376 and PEP 427 for details). For the rows + passed to this function, the size can be an integer as an int or string, + or the empty string. + """ + # Normally, there should only be one row per path, in which case the + # second and third elements don't come into play when sorting. + # However, in cases in the wild where a path might happen to occur twice, + # we don't want the sort operation to trigger an error (but still want + # determinism). Since the third element can be an int or string, we + # coerce each element to a string to avoid a TypeError in this case. + # For additional background, see-- + # https://github.com/pypa/pip/issues/5868 + return sorted( + (record_path, hash_, str(size)) for record_path, hash_, size in outrows + ) + + +def _record_to_fs_path(record_path: RecordPath, lib_dir: str) -> str: + return os.path.join(lib_dir, record_path) + + +def _fs_to_record_path(path: str, lib_dir: str) -> RecordPath: + # On Windows, do not handle relative paths if they belong to different + # logical disks + if os.path.splitdrive(path)[0].lower() == os.path.splitdrive(lib_dir)[0].lower(): + path = os.path.relpath(path, lib_dir) + + path = path.replace(os.path.sep, "/") + return cast("RecordPath", path) + + +def get_csv_rows_for_installed( + old_csv_rows: List[List[str]], + installed: Dict[RecordPath, RecordPath], + changed: Set[RecordPath], + generated: List[str], + lib_dir: str, +) -> List[InstalledCSVRow]: + """ + :param installed: A map from archive RECORD path to installation RECORD + path. + """ + installed_rows: List[InstalledCSVRow] = [] + for row in old_csv_rows: + if len(row) > 3: + logger.warning("RECORD line has more than three elements: %s", row) + old_record_path = cast("RecordPath", row[0]) + new_record_path = installed.pop(old_record_path, old_record_path) + if new_record_path in changed: + digest, length = rehash(_record_to_fs_path(new_record_path, lib_dir)) + else: + digest = row[1] if len(row) > 1 else "" + length = row[2] if len(row) > 2 else "" + installed_rows.append((new_record_path, digest, length)) + for f in generated: + path = _fs_to_record_path(f, lib_dir) + digest, length = rehash(f) + installed_rows.append((path, digest, length)) + return installed_rows + [ + (installed_record_path, "", "") for installed_record_path in installed.values() + ] + + +def get_console_script_specs(console: Dict[str, str]) -> List[str]: + """ + Given the mapping from entrypoint name to callable, return the relevant + console script specs. + """ + # Don't mutate caller's version + console = console.copy() + + scripts_to_generate = [] + + # Special case pip and setuptools to generate versioned wrappers + # + # The issue is that some projects (specifically, pip and setuptools) use + # code in setup.py to create "versioned" entry points - pip2.7 on Python + # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into + # the wheel metadata at build time, and so if the wheel is installed with + # a *different* version of Python the entry points will be wrong. The + # correct fix for this is to enhance the metadata to be able to describe + # such versioned entry points, but that won't happen till Metadata 2.0 is + # available. + # In the meantime, projects using versioned entry points will either have + # incorrect versioned entry points, or they will not be able to distribute + # "universal" wheels (i.e., they will need a wheel per Python version). + # + # Because setuptools and pip are bundled with _ensurepip and virtualenv, + # we need to use universal wheels. So, as a stopgap until Metadata 2.0, we + # override the versioned entry points in the wheel and generate the + # correct ones. This code is purely a short-term measure until Metadata 2.0 + # is available. + # + # To add the level of hack in this section of code, in order to support + # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment + # variable which will control which version scripts get installed. + # + # ENSUREPIP_OPTIONS=altinstall + # - Only pipX.Y and easy_install-X.Y will be generated and installed + # ENSUREPIP_OPTIONS=install + # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note + # that this option is technically if ENSUREPIP_OPTIONS is set and is + # not altinstall + # DEFAULT + # - The default behavior is to install pip, pipX, pipX.Y, easy_install + # and easy_install-X.Y. + pip_script = console.pop("pip", None) + if pip_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + scripts_to_generate.append("pip = " + pip_script) + + if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": + scripts_to_generate.append(f"pip{sys.version_info[0]} = {pip_script}") + + scripts_to_generate.append(f"pip{get_major_minor_version()} = {pip_script}") + # Delete any other versioned pip entry points + pip_ep = [k for k in console if re.match(r"pip(\d+(\.\d+)?)?$", k)] + for k in pip_ep: + del console[k] + easy_install_script = console.pop("easy_install", None) + if easy_install_script: + if "ENSUREPIP_OPTIONS" not in os.environ: + scripts_to_generate.append("easy_install = " + easy_install_script) + + scripts_to_generate.append( + f"easy_install-{get_major_minor_version()} = {easy_install_script}" + ) + # Delete any other versioned easy_install entry points + easy_install_ep = [ + k for k in console if re.match(r"easy_install(-\d+\.\d+)?$", k) + ] + for k in easy_install_ep: + del console[k] + + # Generate the console entry points specified in the wheel + scripts_to_generate.extend(starmap("{} = {}".format, console.items())) + + return scripts_to_generate + + +class ZipBackedFile: + def __init__( + self, src_record_path: RecordPath, dest_path: str, zip_file: ZipFile + ) -> None: + self.src_record_path = src_record_path + self.dest_path = dest_path + self._zip_file = zip_file + self.changed = False + + def _getinfo(self) -> ZipInfo: + return self._zip_file.getinfo(self.src_record_path) + + def save(self) -> None: + # directory creation is lazy and after file filtering + # to ensure we don't install empty dirs; empty dirs can't be + # uninstalled. + parent_dir = os.path.dirname(self.dest_path) + ensure_dir(parent_dir) + + # When we open the output file below, any existing file is truncated + # before we start writing the new contents. This is fine in most + # cases, but can cause a segfault if pip has loaded a shared + # object (e.g. from pyopenssl through its vendored urllib3) + # Since the shared object is mmap'd an attempt to call a + # symbol in it will then cause a segfault. Unlinking the file + # allows writing of new contents while allowing the process to + # continue to use the old copy. + if os.path.exists(self.dest_path): + os.unlink(self.dest_path) + + zipinfo = self._getinfo() + + with self._zip_file.open(zipinfo) as f: + with open(self.dest_path, "wb") as dest: + shutil.copyfileobj(f, dest) + + if zip_item_is_executable(zipinfo): + set_extracted_file_to_default_mode_plus_executable(self.dest_path) + + +class ScriptFile: + def __init__(self, file: "File") -> None: + self._file = file + self.src_record_path = self._file.src_record_path + self.dest_path = self._file.dest_path + self.changed = False + + def save(self) -> None: + self._file.save() + self.changed = fix_script(self.dest_path) + + +class MissingCallableSuffix(InstallationError): + def __init__(self, entry_point: str) -> None: + super().__init__( + f"Invalid script entry point: {entry_point} - A callable " + "suffix is required. Cf https://packaging.python.org/" + "specifications/entry-points/#use-for-scripts for more " + "information." + ) + + +def _raise_for_invalid_entrypoint(specification: str) -> None: + entry = get_export_entry(specification) + if entry is not None and entry.suffix is None: + raise MissingCallableSuffix(str(entry)) + + +class PipScriptMaker(ScriptMaker): + def make( + self, specification: str, options: Optional[Dict[str, Any]] = None + ) -> List[str]: + _raise_for_invalid_entrypoint(specification) + return super().make(specification, options) + + +def _install_wheel( + name: str, + wheel_zip: ZipFile, + wheel_path: str, + scheme: Scheme, + pycompile: bool = True, + warn_script_location: bool = True, + direct_url: Optional[DirectUrl] = None, + requested: bool = False, +) -> None: + """Install a wheel. + + :param name: Name of the project to install + :param wheel_zip: open ZipFile for wheel being installed + :param scheme: Distutils scheme dictating the install directories + :param req_description: String used in place of the requirement, for + logging + :param pycompile: Whether to byte-compile installed Python files + :param warn_script_location: Whether to check that scripts are installed + into a directory on PATH + :raises UnsupportedWheel: + * when the directory holds an unpacked wheel with incompatible + Wheel-Version + * when the .dist-info dir does not match the wheel + """ + info_dir, metadata = parse_wheel(wheel_zip, name) + + if wheel_root_is_purelib(metadata): + lib_dir = scheme.purelib + else: + lib_dir = scheme.platlib + + # Record details of the files moved + # installed = files copied from the wheel to the destination + # changed = files changed while installing (scripts #! line typically) + # generated = files newly generated during the install (script wrappers) + installed: Dict[RecordPath, RecordPath] = {} + changed: Set[RecordPath] = set() + generated: List[str] = [] + + def record_installed( + srcfile: RecordPath, destfile: str, modified: bool = False + ) -> None: + """Map archive RECORD paths to installation RECORD paths.""" + newpath = _fs_to_record_path(destfile, lib_dir) + installed[srcfile] = newpath + if modified: + changed.add(newpath) + + def is_dir_path(path: RecordPath) -> bool: + return path.endswith("/") + + def assert_no_path_traversal(dest_dir_path: str, target_path: str) -> None: + if not is_within_directory(dest_dir_path, target_path): + message = ( + "The wheel {!r} has a file {!r} trying to install" + " outside the target directory {!r}" + ) + raise InstallationError( + message.format(wheel_path, target_path, dest_dir_path) + ) + + def root_scheme_file_maker( + zip_file: ZipFile, dest: str + ) -> Callable[[RecordPath], "File"]: + def make_root_scheme_file(record_path: RecordPath) -> "File": + normed_path = os.path.normpath(record_path) + dest_path = os.path.join(dest, normed_path) + assert_no_path_traversal(dest, dest_path) + return ZipBackedFile(record_path, dest_path, zip_file) + + return make_root_scheme_file + + def data_scheme_file_maker( + zip_file: ZipFile, scheme: Scheme + ) -> Callable[[RecordPath], "File"]: + scheme_paths = {key: getattr(scheme, key) for key in SCHEME_KEYS} + + def make_data_scheme_file(record_path: RecordPath) -> "File": + normed_path = os.path.normpath(record_path) + try: + _, scheme_key, dest_subpath = normed_path.split(os.path.sep, 2) + except ValueError: + message = ( + "Unexpected file in {}: {!r}. .data directory contents" + " should be named like: '/'." + ).format(wheel_path, record_path) + raise InstallationError(message) + + try: + scheme_path = scheme_paths[scheme_key] + except KeyError: + valid_scheme_keys = ", ".join(sorted(scheme_paths)) + message = ( + "Unknown scheme key used in {}: {} (for file {!r}). .data" + " directory contents should be in subdirectories named" + " with a valid scheme key ({})" + ).format(wheel_path, scheme_key, record_path, valid_scheme_keys) + raise InstallationError(message) + + dest_path = os.path.join(scheme_path, dest_subpath) + assert_no_path_traversal(scheme_path, dest_path) + return ZipBackedFile(record_path, dest_path, zip_file) + + return make_data_scheme_file + + def is_data_scheme_path(path: RecordPath) -> bool: + return path.split("/", 1)[0].endswith(".data") + + paths = cast(List[RecordPath], wheel_zip.namelist()) + file_paths = filterfalse(is_dir_path, paths) + root_scheme_paths, data_scheme_paths = partition(is_data_scheme_path, file_paths) + + make_root_scheme_file = root_scheme_file_maker(wheel_zip, lib_dir) + files: Iterator[File] = map(make_root_scheme_file, root_scheme_paths) + + def is_script_scheme_path(path: RecordPath) -> bool: + parts = path.split("/", 2) + return len(parts) > 2 and parts[0].endswith(".data") and parts[1] == "scripts" + + other_scheme_paths, script_scheme_paths = partition( + is_script_scheme_path, data_scheme_paths + ) + + make_data_scheme_file = data_scheme_file_maker(wheel_zip, scheme) + other_scheme_files = map(make_data_scheme_file, other_scheme_paths) + files = chain(files, other_scheme_files) + + # Get the defined entry points + distribution = get_wheel_distribution( + FilesystemWheel(wheel_path), + canonicalize_name(name), + ) + console, gui = get_entrypoints(distribution) + + def is_entrypoint_wrapper(file: "File") -> bool: + # EP, EP.exe and EP-script.py are scripts generated for + # entry point EP by setuptools + path = file.dest_path + name = os.path.basename(path) + if name.lower().endswith(".exe"): + matchname = name[:-4] + elif name.lower().endswith("-script.py"): + matchname = name[:-10] + elif name.lower().endswith(".pya"): + matchname = name[:-4] + else: + matchname = name + # Ignore setuptools-generated scripts + return matchname in console or matchname in gui + + script_scheme_files: Iterator[File] = map( + make_data_scheme_file, script_scheme_paths + ) + script_scheme_files = filterfalse(is_entrypoint_wrapper, script_scheme_files) + script_scheme_files = map(ScriptFile, script_scheme_files) + files = chain(files, script_scheme_files) + + for file in files: + file.save() + record_installed(file.src_record_path, file.dest_path, file.changed) + + def pyc_source_file_paths() -> Generator[str, None, None]: + # We de-duplicate installation paths, since there can be overlap (e.g. + # file in .data maps to same location as file in wheel root). + # Sorting installation paths makes it easier to reproduce and debug + # issues related to permissions on existing files. + for installed_path in sorted(set(installed.values())): + full_installed_path = os.path.join(lib_dir, installed_path) + if not os.path.isfile(full_installed_path): + continue + if not full_installed_path.endswith(".py"): + continue + yield full_installed_path + + def pyc_output_path(path: str) -> str: + """Return the path the pyc file would have been written to.""" + return importlib.util.cache_from_source(path) + + # Compile all of the pyc files for the installed files + if pycompile: + with captured_stdout() as stdout: + with warnings.catch_warnings(): + warnings.filterwarnings("ignore") + for path in pyc_source_file_paths(): + success = compileall.compile_file(path, force=True, quiet=True) + if success: + pyc_path = pyc_output_path(path) + assert os.path.exists(pyc_path) + pyc_record_path = cast( + "RecordPath", pyc_path.replace(os.path.sep, "/") + ) + record_installed(pyc_record_path, pyc_path) + logger.debug(stdout.getvalue()) + + maker = PipScriptMaker(None, scheme.scripts) + + # Ensure old scripts are overwritten. + # See https://github.com/pypa/pip/issues/1800 + maker.clobber = True + + # Ensure we don't generate any variants for scripts because this is almost + # never what somebody wants. + # See https://bitbucket.org/pypa/distlib/issue/35/ + maker.variants = {""} + + # This is required because otherwise distlib creates scripts that are not + # executable. + # See https://bitbucket.org/pypa/distlib/issue/32/ + maker.set_mode = True + + # Generate the console and GUI entry points specified in the wheel + scripts_to_generate = get_console_script_specs(console) + + gui_scripts_to_generate = list(starmap("{} = {}".format, gui.items())) + + generated_console_scripts = maker.make_multiple(scripts_to_generate) + generated.extend(generated_console_scripts) + + generated.extend(maker.make_multiple(gui_scripts_to_generate, {"gui": True})) + + if warn_script_location: + msg = message_about_scripts_not_on_PATH(generated_console_scripts) + if msg is not None: + logger.warning(msg) + + generated_file_mode = 0o666 & ~current_umask() + + @contextlib.contextmanager + def _generate_file(path: str, **kwargs: Any) -> Generator[BinaryIO, None, None]: + with adjacent_tmp_file(path, **kwargs) as f: + yield f + os.chmod(f.name, generated_file_mode) + replace(f.name, path) + + dest_info_dir = os.path.join(lib_dir, info_dir) + + # Record pip as the installer + installer_path = os.path.join(dest_info_dir, "INSTALLER") + with _generate_file(installer_path) as installer_file: + installer_file.write(b"pip\n") + generated.append(installer_path) + + # Record the PEP 610 direct URL reference + if direct_url is not None: + direct_url_path = os.path.join(dest_info_dir, DIRECT_URL_METADATA_NAME) + with _generate_file(direct_url_path) as direct_url_file: + direct_url_file.write(direct_url.to_json().encode("utf-8")) + generated.append(direct_url_path) + + # Record the REQUESTED file + if requested: + requested_path = os.path.join(dest_info_dir, "REQUESTED") + with open(requested_path, "wb"): + pass + generated.append(requested_path) + + record_text = distribution.read_text("RECORD") + record_rows = list(csv.reader(record_text.splitlines())) + + rows = get_csv_rows_for_installed( + record_rows, + installed=installed, + changed=changed, + generated=generated, + lib_dir=lib_dir, + ) + + # Record details of all files installed + record_path = os.path.join(dest_info_dir, "RECORD") + + with _generate_file(record_path, **csv_io_kwargs("w")) as record_file: + # Explicitly cast to typing.IO[str] as a workaround for the mypy error: + # "writer" has incompatible type "BinaryIO"; expected "_Writer" + writer = csv.writer(cast("IO[str]", record_file)) + writer.writerows(_normalized_outrows(rows)) + + +@contextlib.contextmanager +def req_error_context(req_description: str) -> Generator[None, None, None]: + try: + yield + except InstallationError as e: + message = f"For req: {req_description}. {e.args[0]}" + raise InstallationError(message) from e + + +def install_wheel( + name: str, + wheel_path: str, + scheme: Scheme, + req_description: str, + pycompile: bool = True, + warn_script_location: bool = True, + direct_url: Optional[DirectUrl] = None, + requested: bool = False, +) -> None: + with ZipFile(wheel_path, allowZip64=True) as z: + with req_error_context(req_description): + _install_wheel( + name=name, + wheel_zip=z, + wheel_path=wheel_path, + scheme=scheme, + pycompile=pycompile, + warn_script_location=warn_script_location, + direct_url=direct_url, + requested=requested, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py b/venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py new file mode 100644 index 0000000..956717d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py @@ -0,0 +1,730 @@ +"""Prepares a distribution for installation +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import mimetypes +import os +import shutil +from pathlib import Path +from typing import Dict, Iterable, List, Optional + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.distributions import make_distribution_for_install_requirement +from pip._internal.distributions.installed import InstalledDistribution +from pip._internal.exceptions import ( + DirectoryUrlHashUnsupported, + HashMismatch, + HashUnpinned, + InstallationError, + MetadataInconsistent, + NetworkConnectionError, + VcsHashUnsupported, +) +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution, get_metadata_distribution +from pip._internal.models.direct_url import ArchiveInfo +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.network.download import BatchDownloader, Downloader +from pip._internal.network.lazy_wheel import ( + HTTPRangeRequestUnsupported, + dist_from_wheel_url, +) +from pip._internal.network.session import PipSession +from pip._internal.operations.build.build_tracker import BuildTracker +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils._log import getLogger +from pip._internal.utils.direct_url_helpers import ( + direct_url_for_editable, + direct_url_from_link, +) +from pip._internal.utils.hashes import Hashes, MissingHashes +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ( + display_path, + hash_file, + hide_url, + redact_auth_from_requirement, +) +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.unpacking import unpack_file +from pip._internal.vcs import vcs + +logger = getLogger(__name__) + + +def _get_prepared_distribution( + req: InstallRequirement, + build_tracker: BuildTracker, + finder: PackageFinder, + build_isolation: bool, + check_build_deps: bool, +) -> BaseDistribution: + """Prepare a distribution for installation.""" + abstract_dist = make_distribution_for_install_requirement(req) + tracker_id = abstract_dist.build_tracker_id + if tracker_id is not None: + with build_tracker.track(req, tracker_id): + abstract_dist.prepare_distribution_metadata( + finder, build_isolation, check_build_deps + ) + return abstract_dist.get_metadata_distribution() + + +def unpack_vcs_link(link: Link, location: str, verbosity: int) -> None: + vcs_backend = vcs.get_backend_for_scheme(link.scheme) + assert vcs_backend is not None + vcs_backend.unpack(location, url=hide_url(link.url), verbosity=verbosity) + + +class File: + def __init__(self, path: str, content_type: Optional[str]) -> None: + self.path = path + if content_type is None: + self.content_type = mimetypes.guess_type(path)[0] + else: + self.content_type = content_type + + +def get_http_url( + link: Link, + download: Downloader, + download_dir: Optional[str] = None, + hashes: Optional[Hashes] = None, +) -> File: + temp_dir = TempDirectory(kind="unpack", globally_managed=True) + # If a download dir is specified, is the file already downloaded there? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, download_dir, hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + content_type = None + else: + # let's download to a tmp dir + from_path, content_type = download(link, temp_dir.path) + if hashes: + hashes.check_against_path(from_path) + + return File(from_path, content_type) + + +def get_file_url( + link: Link, download_dir: Optional[str] = None, hashes: Optional[Hashes] = None +) -> File: + """Get file and optionally check its hash.""" + # If a download dir is specified, is the file already there and valid? + already_downloaded_path = None + if download_dir: + already_downloaded_path = _check_download_dir(link, download_dir, hashes) + + if already_downloaded_path: + from_path = already_downloaded_path + else: + from_path = link.file_path + + # If --require-hashes is off, `hashes` is either empty, the + # link's embedded hash, or MissingHashes; it is required to + # match. If --require-hashes is on, we are satisfied by any + # hash in `hashes` matching: a URL-based or an option-based + # one; no internet-sourced hash will be in `hashes`. + if hashes: + hashes.check_against_path(from_path) + return File(from_path, None) + + +def unpack_url( + link: Link, + location: str, + download: Downloader, + verbosity: int, + download_dir: Optional[str] = None, + hashes: Optional[Hashes] = None, +) -> Optional[File]: + """Unpack link into location, downloading if required. + + :param hashes: A Hashes object, one of whose embedded hashes must match, + or HashMismatch will be raised. If the Hashes is empty, no matches are + required, and unhashable types of requirements (like VCS ones, which + would ordinarily raise HashUnsupported) are allowed. + """ + # non-editable vcs urls + if link.is_vcs: + unpack_vcs_link(link, location, verbosity=verbosity) + return None + + assert not link.is_existing_dir() + + # file urls + if link.is_file: + file = get_file_url(link, download_dir, hashes=hashes) + + # http urls + else: + file = get_http_url( + link, + download, + download_dir, + hashes=hashes, + ) + + # unpack the archive to the build dir location. even when only downloading + # archives, they have to be unpacked to parse dependencies, except wheels + if not link.is_wheel: + unpack_file(file.path, location, file.content_type) + + return file + + +def _check_download_dir( + link: Link, + download_dir: str, + hashes: Optional[Hashes], + warn_on_hash_mismatch: bool = True, +) -> Optional[str]: + """Check download_dir for previously downloaded file with correct hash + If a correct file is found return its path else None + """ + download_path = os.path.join(download_dir, link.filename) + + if not os.path.exists(download_path): + return None + + # If already downloaded, does its hash match? + logger.info("File was already downloaded %s", download_path) + if hashes: + try: + hashes.check_against_path(download_path) + except HashMismatch: + if warn_on_hash_mismatch: + logger.warning( + "Previously-downloaded file %s has bad hash. Re-downloading.", + download_path, + ) + os.unlink(download_path) + return None + return download_path + + +class RequirementPreparer: + """Prepares a Requirement""" + + def __init__( + self, + build_dir: str, + download_dir: Optional[str], + src_dir: str, + build_isolation: bool, + check_build_deps: bool, + build_tracker: BuildTracker, + session: PipSession, + progress_bar: str, + finder: PackageFinder, + require_hashes: bool, + use_user_site: bool, + lazy_wheel: bool, + verbosity: int, + legacy_resolver: bool, + ) -> None: + super().__init__() + + self.src_dir = src_dir + self.build_dir = build_dir + self.build_tracker = build_tracker + self._session = session + self._download = Downloader(session, progress_bar) + self._batch_download = BatchDownloader(session, progress_bar) + self.finder = finder + + # Where still-packed archives should be written to. If None, they are + # not saved, and are deleted immediately after unpacking. + self.download_dir = download_dir + + # Is build isolation allowed? + self.build_isolation = build_isolation + + # Should check build dependencies? + self.check_build_deps = check_build_deps + + # Should hash-checking be required? + self.require_hashes = require_hashes + + # Should install in user site-packages? + self.use_user_site = use_user_site + + # Should wheels be downloaded lazily? + self.use_lazy_wheel = lazy_wheel + + # How verbose should underlying tooling be? + self.verbosity = verbosity + + # Are we using the legacy resolver? + self.legacy_resolver = legacy_resolver + + # Memoized downloaded files, as mapping of url: path. + self._downloaded: Dict[str, str] = {} + + # Previous "header" printed for a link-based InstallRequirement + self._previous_requirement_header = ("", "") + + def _log_preparing_link(self, req: InstallRequirement) -> None: + """Provide context for the requirement being prepared.""" + if req.link.is_file and not req.is_wheel_from_cache: + message = "Processing %s" + information = str(display_path(req.link.file_path)) + else: + message = "Collecting %s" + information = redact_auth_from_requirement(req.req) if req.req else str(req) + + # If we used req.req, inject requirement source if available (this + # would already be included if we used req directly) + if req.req and req.comes_from: + if isinstance(req.comes_from, str): + comes_from: Optional[str] = req.comes_from + else: + comes_from = req.comes_from.from_path() + if comes_from: + information += f" (from {comes_from})" + + if (message, information) != self._previous_requirement_header: + self._previous_requirement_header = (message, information) + logger.info(message, information) + + if req.is_wheel_from_cache: + with indent_log(): + logger.info("Using cached %s", req.link.filename) + + def _ensure_link_req_src_dir( + self, req: InstallRequirement, parallel_builds: bool + ) -> None: + """Ensure source_dir of a linked InstallRequirement.""" + # Since source_dir is only set for editable requirements. + if req.link.is_wheel: + # We don't need to unpack wheels, so no need for a source + # directory. + return + assert req.source_dir is None + if req.link.is_existing_dir(): + # build local directories in-tree + req.source_dir = req.link.file_path + return + + # We always delete unpacked sdists after pip runs. + req.ensure_has_source_dir( + self.build_dir, + autodelete=True, + parallel_builds=parallel_builds, + ) + req.ensure_pristine_source_checkout() + + def _get_linked_req_hashes(self, req: InstallRequirement) -> Hashes: + # By the time this is called, the requirement's link should have + # been checked so we can tell what kind of requirements req is + # and raise some more informative errors than otherwise. + # (For example, we can raise VcsHashUnsupported for a VCS URL + # rather than HashMissing.) + if not self.require_hashes: + return req.hashes(trust_internet=True) + + # We could check these first 2 conditions inside unpack_url + # and save repetition of conditions, but then we would + # report less-useful error messages for unhashable + # requirements, complaining that there's no hash provided. + if req.link.is_vcs: + raise VcsHashUnsupported() + if req.link.is_existing_dir(): + raise DirectoryUrlHashUnsupported() + + # Unpinned packages are asking for trouble when a new version + # is uploaded. This isn't a security check, but it saves users + # a surprising hash mismatch in the future. + # file:/// URLs aren't pinnable, so don't complain about them + # not being pinned. + if not req.is_direct and not req.is_pinned: + raise HashUnpinned() + + # If known-good hashes are missing for this requirement, + # shim it with a facade object that will provoke hash + # computation and then raise a HashMissing exception + # showing the user what the hash should be. + return req.hashes(trust_internet=False) or MissingHashes() + + def _fetch_metadata_only( + self, + req: InstallRequirement, + ) -> Optional[BaseDistribution]: + if self.legacy_resolver: + logger.debug( + "Metadata-only fetching is not used in the legacy resolver", + ) + return None + if self.require_hashes: + logger.debug( + "Metadata-only fetching is not used as hash checking is required", + ) + return None + # Try PEP 658 metadata first, then fall back to lazy wheel if unavailable. + return self._fetch_metadata_using_link_data_attr( + req + ) or self._fetch_metadata_using_lazy_wheel(req.link) + + def _fetch_metadata_using_link_data_attr( + self, + req: InstallRequirement, + ) -> Optional[BaseDistribution]: + """Fetch metadata from the data-dist-info-metadata attribute, if possible.""" + # (1) Get the link to the metadata file, if provided by the backend. + metadata_link = req.link.metadata_link() + if metadata_link is None: + return None + assert req.req is not None + logger.verbose( + "Obtaining dependency information for %s from %s", + req.req, + metadata_link, + ) + # (2) Download the contents of the METADATA file, separate from the dist itself. + metadata_file = get_http_url( + metadata_link, + self._download, + hashes=metadata_link.as_hashes(), + ) + with open(metadata_file.path, "rb") as f: + metadata_contents = f.read() + # (3) Generate a dist just from those file contents. + metadata_dist = get_metadata_distribution( + metadata_contents, + req.link.filename, + req.req.name, + ) + # (4) Ensure the Name: field from the METADATA file matches the name from the + # install requirement. + # + # NB: raw_name will fall back to the name from the install requirement if + # the Name: field is not present, but it's noted in the raw_name docstring + # that that should NEVER happen anyway. + if canonicalize_name(metadata_dist.raw_name) != canonicalize_name(req.req.name): + raise MetadataInconsistent( + req, "Name", req.req.name, metadata_dist.raw_name + ) + return metadata_dist + + def _fetch_metadata_using_lazy_wheel( + self, + link: Link, + ) -> Optional[BaseDistribution]: + """Fetch metadata using lazy wheel, if possible.""" + # --use-feature=fast-deps must be provided. + if not self.use_lazy_wheel: + return None + if link.is_file or not link.is_wheel: + logger.debug( + "Lazy wheel is not used as %r does not point to a remote wheel", + link, + ) + return None + + wheel = Wheel(link.filename) + name = canonicalize_name(wheel.name) + logger.info( + "Obtaining dependency information from %s %s", + name, + wheel.version, + ) + url = link.url.split("#", 1)[0] + try: + return dist_from_wheel_url(name, url, self._session) + except HTTPRangeRequestUnsupported: + logger.debug("%s does not support range requests", url) + return None + + def _complete_partial_requirements( + self, + partially_downloaded_reqs: Iterable[InstallRequirement], + parallel_builds: bool = False, + ) -> None: + """Download any requirements which were only fetched by metadata.""" + # Download to a temporary directory. These will be copied over as + # needed for downstream 'download', 'wheel', and 'install' commands. + temp_dir = TempDirectory(kind="unpack", globally_managed=True).path + + # Map each link to the requirement that owns it. This allows us to set + # `req.local_file_path` on the appropriate requirement after passing + # all the links at once into BatchDownloader. + links_to_fully_download: Dict[Link, InstallRequirement] = {} + for req in partially_downloaded_reqs: + assert req.link + links_to_fully_download[req.link] = req + + batch_download = self._batch_download( + links_to_fully_download.keys(), + temp_dir, + ) + for link, (filepath, _) in batch_download: + logger.debug("Downloading link %s to %s", link, filepath) + req = links_to_fully_download[link] + # Record the downloaded file path so wheel reqs can extract a Distribution + # in .get_dist(). + req.local_file_path = filepath + # Record that the file is downloaded so we don't do it again in + # _prepare_linked_requirement(). + self._downloaded[req.link.url] = filepath + + # If this is an sdist, we need to unpack it after downloading, but the + # .source_dir won't be set up until we are in _prepare_linked_requirement(). + # Add the downloaded archive to the install requirement to unpack after + # preparing the source dir. + if not req.is_wheel: + req.needs_unpacked_archive(Path(filepath)) + + # This step is necessary to ensure all lazy wheels are processed + # successfully by the 'download', 'wheel', and 'install' commands. + for req in partially_downloaded_reqs: + self._prepare_linked_requirement(req, parallel_builds) + + def prepare_linked_requirement( + self, req: InstallRequirement, parallel_builds: bool = False + ) -> BaseDistribution: + """Prepare a requirement to be obtained from req.link.""" + assert req.link + self._log_preparing_link(req) + with indent_log(): + # Check if the relevant file is already available + # in the download directory + file_path = None + if self.download_dir is not None and req.link.is_wheel: + hashes = self._get_linked_req_hashes(req) + file_path = _check_download_dir( + req.link, + self.download_dir, + hashes, + # When a locally built wheel has been found in cache, we don't warn + # about re-downloading when the already downloaded wheel hash does + # not match. This is because the hash must be checked against the + # original link, not the cached link. It that case the already + # downloaded file will be removed and re-fetched from cache (which + # implies a hash check against the cache entry's origin.json). + warn_on_hash_mismatch=not req.is_wheel_from_cache, + ) + + if file_path is not None: + # The file is already available, so mark it as downloaded + self._downloaded[req.link.url] = file_path + else: + # The file is not available, attempt to fetch only metadata + metadata_dist = self._fetch_metadata_only(req) + if metadata_dist is not None: + req.needs_more_preparation = True + return metadata_dist + + # None of the optimizations worked, fully prepare the requirement + return self._prepare_linked_requirement(req, parallel_builds) + + def prepare_linked_requirements_more( + self, reqs: Iterable[InstallRequirement], parallel_builds: bool = False + ) -> None: + """Prepare linked requirements more, if needed.""" + reqs = [req for req in reqs if req.needs_more_preparation] + for req in reqs: + # Determine if any of these requirements were already downloaded. + if self.download_dir is not None and req.link.is_wheel: + hashes = self._get_linked_req_hashes(req) + file_path = _check_download_dir(req.link, self.download_dir, hashes) + if file_path is not None: + self._downloaded[req.link.url] = file_path + req.needs_more_preparation = False + + # Prepare requirements we found were already downloaded for some + # reason. The other downloads will be completed separately. + partially_downloaded_reqs: List[InstallRequirement] = [] + for req in reqs: + if req.needs_more_preparation: + partially_downloaded_reqs.append(req) + else: + self._prepare_linked_requirement(req, parallel_builds) + + # TODO: separate this part out from RequirementPreparer when the v1 + # resolver can be removed! + self._complete_partial_requirements( + partially_downloaded_reqs, + parallel_builds=parallel_builds, + ) + + def _prepare_linked_requirement( + self, req: InstallRequirement, parallel_builds: bool + ) -> BaseDistribution: + assert req.link + link = req.link + + hashes = self._get_linked_req_hashes(req) + + if hashes and req.is_wheel_from_cache: + assert req.download_info is not None + assert link.is_wheel + assert link.is_file + # We need to verify hashes, and we have found the requirement in the cache + # of locally built wheels. + if ( + isinstance(req.download_info.info, ArchiveInfo) + and req.download_info.info.hashes + and hashes.has_one_of(req.download_info.info.hashes) + ): + # At this point we know the requirement was built from a hashable source + # artifact, and we verified that the cache entry's hash of the original + # artifact matches one of the hashes we expect. We don't verify hashes + # against the cached wheel, because the wheel is not the original. + hashes = None + else: + logger.warning( + "The hashes of the source archive found in cache entry " + "don't match, ignoring cached built wheel " + "and re-downloading source." + ) + req.link = req.cached_wheel_source_link + link = req.link + + self._ensure_link_req_src_dir(req, parallel_builds) + + if link.is_existing_dir(): + local_file = None + elif link.url not in self._downloaded: + try: + local_file = unpack_url( + link, + req.source_dir, + self._download, + self.verbosity, + self.download_dir, + hashes, + ) + except NetworkConnectionError as exc: + raise InstallationError( + f"Could not install requirement {req} because of HTTP " + f"error {exc} for URL {link}" + ) + else: + file_path = self._downloaded[link.url] + if hashes: + hashes.check_against_path(file_path) + local_file = File(file_path, content_type=None) + + # If download_info is set, we got it from the wheel cache. + if req.download_info is None: + # Editables don't go through this function (see + # prepare_editable_requirement). + assert not req.editable + req.download_info = direct_url_from_link(link, req.source_dir) + # Make sure we have a hash in download_info. If we got it as part of the + # URL, it will have been verified and we can rely on it. Otherwise we + # compute it from the downloaded file. + # FIXME: https://github.com/pypa/pip/issues/11943 + if ( + isinstance(req.download_info.info, ArchiveInfo) + and not req.download_info.info.hashes + and local_file + ): + hash = hash_file(local_file.path)[0].hexdigest() + # We populate info.hash for backward compatibility. + # This will automatically populate info.hashes. + req.download_info.info.hash = f"sha256={hash}" + + # For use in later processing, + # preserve the file path on the requirement. + if local_file: + req.local_file_path = local_file.path + + dist = _get_prepared_distribution( + req, + self.build_tracker, + self.finder, + self.build_isolation, + self.check_build_deps, + ) + return dist + + def save_linked_requirement(self, req: InstallRequirement) -> None: + assert self.download_dir is not None + assert req.link is not None + link = req.link + if link.is_vcs or (link.is_existing_dir() and req.editable): + # Make a .zip of the source_dir we already created. + req.archive(self.download_dir) + return + + if link.is_existing_dir(): + logger.debug( + "Not copying link to destination directory " + "since it is a directory: %s", + link, + ) + return + if req.local_file_path is None: + # No distribution was downloaded for this requirement. + return + + download_location = os.path.join(self.download_dir, link.filename) + if not os.path.exists(download_location): + shutil.copy(req.local_file_path, download_location) + download_path = display_path(download_location) + logger.info("Saved %s", download_path) + + def prepare_editable_requirement( + self, + req: InstallRequirement, + ) -> BaseDistribution: + """Prepare an editable requirement.""" + assert req.editable, "cannot prepare a non-editable req as editable" + + logger.info("Obtaining %s", req) + + with indent_log(): + if self.require_hashes: + raise InstallationError( + f"The editable requirement {req} cannot be installed when " + "requiring hashes, because there is no single file to " + "hash." + ) + req.ensure_has_source_dir(self.src_dir) + req.update_editable() + assert req.source_dir + req.download_info = direct_url_for_editable(req.unpacked_source_directory) + + dist = _get_prepared_distribution( + req, + self.build_tracker, + self.finder, + self.build_isolation, + self.check_build_deps, + ) + + req.check_if_exists(self.use_user_site) + + return dist + + def prepare_installed_requirement( + self, + req: InstallRequirement, + skip_reason: str, + ) -> BaseDistribution: + """Prepare an already-installed requirement.""" + assert req.satisfied_by, "req should have been satisfied but isn't" + assert skip_reason is not None, ( + "did not get skip reason skipped but req.satisfied_by " + f"is set to {req.satisfied_by}" + ) + logger.info( + "Requirement %s: %s (%s)", skip_reason, req, req.satisfied_by.version + ) + with indent_log(): + if self.require_hashes: + logger.debug( + "Since it is already installed, we are trusting this " + "package without checking its hash. To ensure a " + "completely repeatable environment, install into an " + "empty virtualenv." + ) + return InstalledDistribution(req).get_metadata_distribution() diff --git a/venv/lib/python3.12/site-packages/pip/_internal/pyproject.py b/venv/lib/python3.12/site-packages/pip/_internal/pyproject.py new file mode 100644 index 0000000..8de36b8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/pyproject.py @@ -0,0 +1,179 @@ +import importlib.util +import os +from collections import namedtuple +from typing import Any, List, Optional + +from pip._vendor import tomli +from pip._vendor.packaging.requirements import InvalidRequirement, Requirement + +from pip._internal.exceptions import ( + InstallationError, + InvalidPyProjectBuildRequires, + MissingPyProjectBuildRequires, +) + + +def _is_list_of_str(obj: Any) -> bool: + return isinstance(obj, list) and all(isinstance(item, str) for item in obj) + + +def make_pyproject_path(unpacked_source_directory: str) -> str: + return os.path.join(unpacked_source_directory, "pyproject.toml") + + +BuildSystemDetails = namedtuple( + "BuildSystemDetails", ["requires", "backend", "check", "backend_path"] +) + + +def load_pyproject_toml( + use_pep517: Optional[bool], pyproject_toml: str, setup_py: str, req_name: str +) -> Optional[BuildSystemDetails]: + """Load the pyproject.toml file. + + Parameters: + use_pep517 - Has the user requested PEP 517 processing? None + means the user hasn't explicitly specified. + pyproject_toml - Location of the project's pyproject.toml file + setup_py - Location of the project's setup.py file + req_name - The name of the requirement we're processing (for + error reporting) + + Returns: + None if we should use the legacy code path, otherwise a tuple + ( + requirements from pyproject.toml, + name of PEP 517 backend, + requirements we should check are installed after setting + up the build environment + directory paths to import the backend from (backend-path), + relative to the project root. + ) + """ + has_pyproject = os.path.isfile(pyproject_toml) + has_setup = os.path.isfile(setup_py) + + if not has_pyproject and not has_setup: + raise InstallationError( + f"{req_name} does not appear to be a Python project: " + f"neither 'setup.py' nor 'pyproject.toml' found." + ) + + if has_pyproject: + with open(pyproject_toml, encoding="utf-8") as f: + pp_toml = tomli.loads(f.read()) + build_system = pp_toml.get("build-system") + else: + build_system = None + + # The following cases must use PEP 517 + # We check for use_pep517 being non-None and falsey because that means + # the user explicitly requested --no-use-pep517. The value 0 as + # opposed to False can occur when the value is provided via an + # environment variable or config file option (due to the quirk of + # strtobool() returning an integer in pip's configuration code). + if has_pyproject and not has_setup: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project does not have a setup.py" + ) + use_pep517 = True + elif build_system and "build-backend" in build_system: + if use_pep517 is not None and not use_pep517: + raise InstallationError( + "Disabling PEP 517 processing is invalid: " + "project specifies a build backend of {} " + "in pyproject.toml".format(build_system["build-backend"]) + ) + use_pep517 = True + + # If we haven't worked out whether to use PEP 517 yet, + # and the user hasn't explicitly stated a preference, + # we do so if the project has a pyproject.toml file + # or if we cannot import setuptools or wheels. + + # We fallback to PEP 517 when without setuptools or without the wheel package, + # so setuptools can be installed as a default build backend. + # For more info see: + # https://discuss.python.org/t/pip-without-setuptools-could-the-experience-be-improved/11810/9 + # https://github.com/pypa/pip/issues/8559 + elif use_pep517 is None: + use_pep517 = ( + has_pyproject + or not importlib.util.find_spec("setuptools") + or not importlib.util.find_spec("wheel") + ) + + # At this point, we know whether we're going to use PEP 517. + assert use_pep517 is not None + + # If we're using the legacy code path, there is nothing further + # for us to do here. + if not use_pep517: + return None + + if build_system is None: + # Either the user has a pyproject.toml with no build-system + # section, or the user has no pyproject.toml, but has opted in + # explicitly via --use-pep517. + # In the absence of any explicit backend specification, we + # assume the setuptools backend that most closely emulates the + # traditional direct setup.py execution, and require wheel and + # a version of setuptools that supports that backend. + + build_system = { + "requires": ["setuptools>=40.8.0"], + "build-backend": "setuptools.build_meta:__legacy__", + } + + # If we're using PEP 517, we have build system information (either + # from pyproject.toml, or defaulted by the code above). + # Note that at this point, we do not know if the user has actually + # specified a backend, though. + assert build_system is not None + + # Ensure that the build-system section in pyproject.toml conforms + # to PEP 518. + + # Specifying the build-system table but not the requires key is invalid + if "requires" not in build_system: + raise MissingPyProjectBuildRequires(package=req_name) + + # Error out if requires is not a list of strings + requires = build_system["requires"] + if not _is_list_of_str(requires): + raise InvalidPyProjectBuildRequires( + package=req_name, + reason="It is not a list of strings.", + ) + + # Each requirement must be valid as per PEP 508 + for requirement in requires: + try: + Requirement(requirement) + except InvalidRequirement as error: + raise InvalidPyProjectBuildRequires( + package=req_name, + reason=f"It contains an invalid requirement: {requirement!r}", + ) from error + + backend = build_system.get("build-backend") + backend_path = build_system.get("backend-path", []) + check: List[str] = [] + if backend is None: + # If the user didn't specify a backend, we assume they want to use + # the setuptools backend. But we can't be sure they have included + # a version of setuptools which supplies the backend. So we + # make a note to check that this requirement is present once + # we have set up the environment. + # This is quite a lot of work to check for a very specific case. But + # the problem is, that case is potentially quite common - projects that + # adopted PEP 518 early for the ability to specify requirements to + # execute setup.py, but never considered needing to mention the build + # tools themselves. The original PEP 518 code had a similar check (but + # implemented in a different way). + backend = "setuptools.build_meta:__legacy__" + check = ["setuptools>=40.8.0"] + + return BuildSystemDetails(requires, backend, check, backend_path) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/req/__init__.py new file mode 100644 index 0000000..16de903 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/req/__init__.py @@ -0,0 +1,92 @@ +import collections +import logging +from typing import Generator, List, Optional, Sequence, Tuple + +from pip._internal.utils.logging import indent_log + +from .req_file import parse_requirements +from .req_install import InstallRequirement +from .req_set import RequirementSet + +__all__ = [ + "RequirementSet", + "InstallRequirement", + "parse_requirements", + "install_given_reqs", +] + +logger = logging.getLogger(__name__) + + +class InstallationResult: + def __init__(self, name: str) -> None: + self.name = name + + def __repr__(self) -> str: + return f"InstallationResult(name={self.name!r})" + + +def _validate_requirements( + requirements: List[InstallRequirement], +) -> Generator[Tuple[str, InstallRequirement], None, None]: + for req in requirements: + assert req.name, f"invalid to-be-installed requirement: {req}" + yield req.name, req + + +def install_given_reqs( + requirements: List[InstallRequirement], + global_options: Sequence[str], + root: Optional[str], + home: Optional[str], + prefix: Optional[str], + warn_script_location: bool, + use_user_site: bool, + pycompile: bool, +) -> List[InstallationResult]: + """ + Install everything in the given list. + + (to be called after having downloaded and unpacked the packages) + """ + to_install = collections.OrderedDict(_validate_requirements(requirements)) + + if to_install: + logger.info( + "Installing collected packages: %s", + ", ".join(to_install.keys()), + ) + + installed = [] + + with indent_log(): + for req_name, requirement in to_install.items(): + if requirement.should_reinstall: + logger.info("Attempting uninstall: %s", req_name) + with indent_log(): + uninstalled_pathset = requirement.uninstall(auto_confirm=True) + else: + uninstalled_pathset = None + + try: + requirement.install( + global_options, + root=root, + home=home, + prefix=prefix, + warn_script_location=warn_script_location, + use_user_site=use_user_site, + pycompile=pycompile, + ) + except Exception: + # if install did not succeed, rollback previous uninstall + if uninstalled_pathset and not requirement.install_succeeded: + uninstalled_pathset.rollback() + raise + else: + if uninstalled_pathset and requirement.install_succeeded: + uninstalled_pathset.commit() + + installed.append(InstallationResult(req_name)) + + return installed diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..99e4861 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc new file mode 100644 index 0000000..e3a310a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc new file mode 100644 index 0000000..7d14d66 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc new file mode 100644 index 0000000..85aa85a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc new file mode 100644 index 0000000..2b7f1ae Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc new file mode 100644 index 0000000..8a92281 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/constructors.py b/venv/lib/python3.12/site-packages/pip/_internal/req/constructors.py new file mode 100644 index 0000000..7e2d0e5 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/req/constructors.py @@ -0,0 +1,576 @@ +"""Backing implementation for InstallRequirement's various constructors + +The idea here is that these formed a major chunk of InstallRequirement's size +so, moving them and support code dedicated to them outside of that class +helps creates for better understandability for the rest of the code. + +These are meant to be used elsewhere within pip to create instances of +InstallRequirement. +""" + +import copy +import logging +import os +import re +from typing import Collection, Dict, List, Optional, Set, Tuple, Union + +from pip._vendor.packaging.markers import Marker +from pip._vendor.packaging.requirements import InvalidRequirement, Requirement +from pip._vendor.packaging.specifiers import Specifier + +from pip._internal.exceptions import InstallationError +from pip._internal.models.index import PyPI, TestPyPI +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.req.req_file import ParsedRequirement +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.filetypes import is_archive_file +from pip._internal.utils.misc import is_installable_dir +from pip._internal.utils.packaging import get_requirement +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs import is_url, vcs + +__all__ = [ + "install_req_from_editable", + "install_req_from_line", + "parse_editable", +] + +logger = logging.getLogger(__name__) +operators = Specifier._operators.keys() + + +def _strip_extras(path: str) -> Tuple[str, Optional[str]]: + m = re.match(r"^(.+)(\[[^\]]+\])$", path) + extras = None + if m: + path_no_extras = m.group(1) + extras = m.group(2) + else: + path_no_extras = path + + return path_no_extras, extras + + +def convert_extras(extras: Optional[str]) -> Set[str]: + if not extras: + return set() + return get_requirement("placeholder" + extras.lower()).extras + + +def _set_requirement_extras(req: Requirement, new_extras: Set[str]) -> Requirement: + """ + Returns a new requirement based on the given one, with the supplied extras. If the + given requirement already has extras those are replaced (or dropped if no new extras + are given). + """ + match: Optional[re.Match[str]] = re.fullmatch( + # see https://peps.python.org/pep-0508/#complete-grammar + r"([\w\t .-]+)(\[[^\]]*\])?(.*)", + str(req), + flags=re.ASCII, + ) + # ireq.req is a valid requirement so the regex should always match + assert ( + match is not None + ), f"regex match on requirement {req} failed, this should never happen" + pre: Optional[str] = match.group(1) + post: Optional[str] = match.group(3) + assert ( + pre is not None and post is not None + ), f"regex group selection for requirement {req} failed, this should never happen" + extras: str = "[%s]" % ",".join(sorted(new_extras)) if new_extras else "" + return Requirement(f"{pre}{extras}{post}") + + +def parse_editable(editable_req: str) -> Tuple[Optional[str], str, Set[str]]: + """Parses an editable requirement into: + - a requirement name + - an URL + - extras + - editable options + Accepted requirements: + svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir + .[some_extra] + """ + + url = editable_req + + # If a file path is specified with extras, strip off the extras. + url_no_extras, extras = _strip_extras(url) + + if os.path.isdir(url_no_extras): + # Treating it as code that has already been checked out + url_no_extras = path_to_url(url_no_extras) + + if url_no_extras.lower().startswith("file:"): + package_name = Link(url_no_extras).egg_fragment + if extras: + return ( + package_name, + url_no_extras, + get_requirement("placeholder" + extras.lower()).extras, + ) + else: + return package_name, url_no_extras, set() + + for version_control in vcs: + if url.lower().startswith(f"{version_control}:"): + url = f"{version_control}+{url}" + break + + link = Link(url) + + if not link.is_vcs: + backends = ", ".join(vcs.all_schemes) + raise InstallationError( + f"{editable_req} is not a valid editable requirement. " + f"It should either be a path to a local project or a VCS URL " + f"(beginning with {backends})." + ) + + package_name = link.egg_fragment + if not package_name: + raise InstallationError( + "Could not detect requirement name for '{}', please specify one " + "with #egg=your_package_name".format(editable_req) + ) + return package_name, url, set() + + +def check_first_requirement_in_file(filename: str) -> None: + """Check if file is parsable as a requirements file. + + This is heavily based on ``pkg_resources.parse_requirements``, but + simplified to just check the first meaningful line. + + :raises InvalidRequirement: If the first meaningful line cannot be parsed + as an requirement. + """ + with open(filename, encoding="utf-8", errors="ignore") as f: + # Create a steppable iterator, so we can handle \-continuations. + lines = ( + line + for line in (line.strip() for line in f) + if line and not line.startswith("#") # Skip blank lines/comments. + ) + + for line in lines: + # Drop comments -- a hash without a space may be in a URL. + if " #" in line: + line = line[: line.find(" #")] + # If there is a line continuation, drop it, and append the next line. + if line.endswith("\\"): + line = line[:-2].strip() + next(lines, "") + Requirement(line) + return + + +def deduce_helpful_msg(req: str) -> str: + """Returns helpful msg in case requirements file does not exist, + or cannot be parsed. + + :params req: Requirements file path + """ + if not os.path.exists(req): + return f" File '{req}' does not exist." + msg = " The path does exist. " + # Try to parse and check if it is a requirements file. + try: + check_first_requirement_in_file(req) + except InvalidRequirement: + logger.debug("Cannot parse '%s' as requirements file", req) + else: + msg += ( + f"The argument you provided " + f"({req}) appears to be a" + f" requirements file. If that is the" + f" case, use the '-r' flag to install" + f" the packages specified within it." + ) + return msg + + +class RequirementParts: + def __init__( + self, + requirement: Optional[Requirement], + link: Optional[Link], + markers: Optional[Marker], + extras: Set[str], + ): + self.requirement = requirement + self.link = link + self.markers = markers + self.extras = extras + + +def parse_req_from_editable(editable_req: str) -> RequirementParts: + name, url, extras_override = parse_editable(editable_req) + + if name is not None: + try: + req: Optional[Requirement] = Requirement(name) + except InvalidRequirement: + raise InstallationError(f"Invalid requirement: '{name}'") + else: + req = None + + link = Link(url) + + return RequirementParts(req, link, None, extras_override) + + +# ---- The actual constructors follow ---- + + +def install_req_from_editable( + editable_req: str, + comes_from: Optional[Union[InstallRequirement, str]] = None, + *, + use_pep517: Optional[bool] = None, + isolated: bool = False, + global_options: Optional[List[str]] = None, + hash_options: Optional[Dict[str, List[str]]] = None, + constraint: bool = False, + user_supplied: bool = False, + permit_editable_wheels: bool = False, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, +) -> InstallRequirement: + parts = parse_req_from_editable(editable_req) + + return InstallRequirement( + parts.requirement, + comes_from=comes_from, + user_supplied=user_supplied, + editable=True, + permit_editable_wheels=permit_editable_wheels, + link=parts.link, + constraint=constraint, + use_pep517=use_pep517, + isolated=isolated, + global_options=global_options, + hash_options=hash_options, + config_settings=config_settings, + extras=parts.extras, + ) + + +def _looks_like_path(name: str) -> bool: + """Checks whether the string "looks like" a path on the filesystem. + + This does not check whether the target actually exists, only judge from the + appearance. + + Returns true if any of the following conditions is true: + * a path separator is found (either os.path.sep or os.path.altsep); + * a dot is found (which represents the current directory). + """ + if os.path.sep in name: + return True + if os.path.altsep is not None and os.path.altsep in name: + return True + if name.startswith("."): + return True + return False + + +def _get_url_from_path(path: str, name: str) -> Optional[str]: + """ + First, it checks whether a provided path is an installable directory. If it + is, returns the path. + + If false, check if the path is an archive file (such as a .whl). + The function checks if the path is a file. If false, if the path has + an @, it will treat it as a PEP 440 URL requirement and return the path. + """ + if _looks_like_path(name) and os.path.isdir(path): + if is_installable_dir(path): + return path_to_url(path) + # TODO: The is_installable_dir test here might not be necessary + # now that it is done in load_pyproject_toml too. + raise InstallationError( + f"Directory {name!r} is not installable. Neither 'setup.py' " + "nor 'pyproject.toml' found." + ) + if not is_archive_file(path): + return None + if os.path.isfile(path): + return path_to_url(path) + urlreq_parts = name.split("@", 1) + if len(urlreq_parts) >= 2 and not _looks_like_path(urlreq_parts[0]): + # If the path contains '@' and the part before it does not look + # like a path, try to treat it as a PEP 440 URL req instead. + return None + logger.warning( + "Requirement %r looks like a filename, but the file does not exist", + name, + ) + return path_to_url(path) + + +def parse_req_from_line(name: str, line_source: Optional[str]) -> RequirementParts: + if is_url(name): + marker_sep = "; " + else: + marker_sep = ";" + if marker_sep in name: + name, markers_as_string = name.split(marker_sep, 1) + markers_as_string = markers_as_string.strip() + if not markers_as_string: + markers = None + else: + markers = Marker(markers_as_string) + else: + markers = None + name = name.strip() + req_as_string = None + path = os.path.normpath(os.path.abspath(name)) + link = None + extras_as_string = None + + if is_url(name): + link = Link(name) + else: + p, extras_as_string = _strip_extras(path) + url = _get_url_from_path(p, name) + if url is not None: + link = Link(url) + + # it's a local file, dir, or url + if link: + # Handle relative file URLs + if link.scheme == "file" and re.search(r"\.\./", link.url): + link = Link(path_to_url(os.path.normpath(os.path.abspath(link.path)))) + # wheel file + if link.is_wheel: + wheel = Wheel(link.filename) # can raise InvalidWheelFilename + req_as_string = f"{wheel.name}=={wheel.version}" + else: + # set the req to the egg fragment. when it's not there, this + # will become an 'unnamed' requirement + req_as_string = link.egg_fragment + + # a requirement specifier + else: + req_as_string = name + + extras = convert_extras(extras_as_string) + + def with_source(text: str) -> str: + if not line_source: + return text + return f"{text} (from {line_source})" + + def _parse_req_string(req_as_string: str) -> Requirement: + try: + req = get_requirement(req_as_string) + except InvalidRequirement: + if os.path.sep in req_as_string: + add_msg = "It looks like a path." + add_msg += deduce_helpful_msg(req_as_string) + elif "=" in req_as_string and not any( + op in req_as_string for op in operators + ): + add_msg = "= is not a valid operator. Did you mean == ?" + else: + add_msg = "" + msg = with_source(f"Invalid requirement: {req_as_string!r}") + if add_msg: + msg += f"\nHint: {add_msg}" + raise InstallationError(msg) + else: + # Deprecate extras after specifiers: "name>=1.0[extras]" + # This currently works by accident because _strip_extras() parses + # any extras in the end of the string and those are saved in + # RequirementParts + for spec in req.specifier: + spec_str = str(spec) + if spec_str.endswith("]"): + msg = f"Extras after version '{spec_str}'." + raise InstallationError(msg) + return req + + if req_as_string is not None: + req: Optional[Requirement] = _parse_req_string(req_as_string) + else: + req = None + + return RequirementParts(req, link, markers, extras) + + +def install_req_from_line( + name: str, + comes_from: Optional[Union[str, InstallRequirement]] = None, + *, + use_pep517: Optional[bool] = None, + isolated: bool = False, + global_options: Optional[List[str]] = None, + hash_options: Optional[Dict[str, List[str]]] = None, + constraint: bool = False, + line_source: Optional[str] = None, + user_supplied: bool = False, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, +) -> InstallRequirement: + """Creates an InstallRequirement from a name, which might be a + requirement, directory containing 'setup.py', filename, or URL. + + :param line_source: An optional string describing where the line is from, + for logging purposes in case of an error. + """ + parts = parse_req_from_line(name, line_source) + + return InstallRequirement( + parts.requirement, + comes_from, + link=parts.link, + markers=parts.markers, + use_pep517=use_pep517, + isolated=isolated, + global_options=global_options, + hash_options=hash_options, + config_settings=config_settings, + constraint=constraint, + extras=parts.extras, + user_supplied=user_supplied, + ) + + +def install_req_from_req_string( + req_string: str, + comes_from: Optional[InstallRequirement] = None, + isolated: bool = False, + use_pep517: Optional[bool] = None, + user_supplied: bool = False, +) -> InstallRequirement: + try: + req = get_requirement(req_string) + except InvalidRequirement: + raise InstallationError(f"Invalid requirement: '{req_string}'") + + domains_not_allowed = [ + PyPI.file_storage_domain, + TestPyPI.file_storage_domain, + ] + if ( + req.url + and comes_from + and comes_from.link + and comes_from.link.netloc in domains_not_allowed + ): + # Explicitly disallow pypi packages that depend on external urls + raise InstallationError( + "Packages installed from PyPI cannot depend on packages " + "which are not also hosted on PyPI.\n" + f"{comes_from.name} depends on {req} " + ) + + return InstallRequirement( + req, + comes_from, + isolated=isolated, + use_pep517=use_pep517, + user_supplied=user_supplied, + ) + + +def install_req_from_parsed_requirement( + parsed_req: ParsedRequirement, + isolated: bool = False, + use_pep517: Optional[bool] = None, + user_supplied: bool = False, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, +) -> InstallRequirement: + if parsed_req.is_editable: + req = install_req_from_editable( + parsed_req.requirement, + comes_from=parsed_req.comes_from, + use_pep517=use_pep517, + constraint=parsed_req.constraint, + isolated=isolated, + user_supplied=user_supplied, + config_settings=config_settings, + ) + + else: + req = install_req_from_line( + parsed_req.requirement, + comes_from=parsed_req.comes_from, + use_pep517=use_pep517, + isolated=isolated, + global_options=( + parsed_req.options.get("global_options", []) + if parsed_req.options + else [] + ), + hash_options=( + parsed_req.options.get("hashes", {}) if parsed_req.options else {} + ), + constraint=parsed_req.constraint, + line_source=parsed_req.line_source, + user_supplied=user_supplied, + config_settings=config_settings, + ) + return req + + +def install_req_from_link_and_ireq( + link: Link, ireq: InstallRequirement +) -> InstallRequirement: + return InstallRequirement( + req=ireq.req, + comes_from=ireq.comes_from, + editable=ireq.editable, + link=link, + markers=ireq.markers, + use_pep517=ireq.use_pep517, + isolated=ireq.isolated, + global_options=ireq.global_options, + hash_options=ireq.hash_options, + config_settings=ireq.config_settings, + user_supplied=ireq.user_supplied, + ) + + +def install_req_drop_extras(ireq: InstallRequirement) -> InstallRequirement: + """ + Creates a new InstallationRequirement using the given template but without + any extras. Sets the original requirement as the new one's parent + (comes_from). + """ + return InstallRequirement( + req=( + _set_requirement_extras(ireq.req, set()) if ireq.req is not None else None + ), + comes_from=ireq, + editable=ireq.editable, + link=ireq.link, + markers=ireq.markers, + use_pep517=ireq.use_pep517, + isolated=ireq.isolated, + global_options=ireq.global_options, + hash_options=ireq.hash_options, + constraint=ireq.constraint, + extras=[], + config_settings=ireq.config_settings, + user_supplied=ireq.user_supplied, + permit_editable_wheels=ireq.permit_editable_wheels, + ) + + +def install_req_extend_extras( + ireq: InstallRequirement, + extras: Collection[str], +) -> InstallRequirement: + """ + Returns a copy of an installation requirement with some additional extras. + Makes a shallow copy of the ireq object. + """ + result = copy.copy(ireq) + result.extras = {*ireq.extras, *extras} + result.req = ( + _set_requirement_extras(ireq.req, result.extras) + if ireq.req is not None + else None + ) + return result diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/req_file.py b/venv/lib/python3.12/site-packages/pip/_internal/req/req_file.py new file mode 100644 index 0000000..1ef3d5e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/req/req_file.py @@ -0,0 +1,554 @@ +""" +Requirements file parsing +""" + +import logging +import optparse +import os +import re +import shlex +import urllib.parse +from optparse import Values +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Generator, + Iterable, + List, + Optional, + Tuple, +) + +from pip._internal.cli import cmdoptions +from pip._internal.exceptions import InstallationError, RequirementsFileParseError +from pip._internal.models.search_scope import SearchScope +from pip._internal.network.session import PipSession +from pip._internal.network.utils import raise_for_status +from pip._internal.utils.encoding import auto_decode +from pip._internal.utils.urls import get_url_scheme + +if TYPE_CHECKING: + # NoReturn introduced in 3.6.2; imported only for type checking to maintain + # pip compatibility with older patch versions of Python 3.6 + from typing import NoReturn + + from pip._internal.index.package_finder import PackageFinder + +__all__ = ["parse_requirements"] + +ReqFileLines = Iterable[Tuple[int, str]] + +LineParser = Callable[[str], Tuple[str, Values]] + +SCHEME_RE = re.compile(r"^(http|https|file):", re.I) +COMMENT_RE = re.compile(r"(^|\s+)#.*$") + +# Matches environment variable-style values in '${MY_VARIABLE_1}' with the +# variable name consisting of only uppercase letters, digits or the '_' +# (underscore). This follows the POSIX standard defined in IEEE Std 1003.1, +# 2013 Edition. +ENV_VAR_RE = re.compile(r"(?P\$\{(?P[A-Z0-9_]+)\})") + +SUPPORTED_OPTIONS: List[Callable[..., optparse.Option]] = [ + cmdoptions.index_url, + cmdoptions.extra_index_url, + cmdoptions.no_index, + cmdoptions.constraints, + cmdoptions.requirements, + cmdoptions.editable, + cmdoptions.find_links, + cmdoptions.no_binary, + cmdoptions.only_binary, + cmdoptions.prefer_binary, + cmdoptions.require_hashes, + cmdoptions.pre, + cmdoptions.trusted_host, + cmdoptions.use_new_feature, +] + +# options to be passed to requirements +SUPPORTED_OPTIONS_REQ: List[Callable[..., optparse.Option]] = [ + cmdoptions.global_options, + cmdoptions.hash, + cmdoptions.config_settings, +] + +SUPPORTED_OPTIONS_EDITABLE_REQ: List[Callable[..., optparse.Option]] = [ + cmdoptions.config_settings, +] + + +# the 'dest' string values +SUPPORTED_OPTIONS_REQ_DEST = [str(o().dest) for o in SUPPORTED_OPTIONS_REQ] +SUPPORTED_OPTIONS_EDITABLE_REQ_DEST = [ + str(o().dest) for o in SUPPORTED_OPTIONS_EDITABLE_REQ +] + +logger = logging.getLogger(__name__) + + +class ParsedRequirement: + def __init__( + self, + requirement: str, + is_editable: bool, + comes_from: str, + constraint: bool, + options: Optional[Dict[str, Any]] = None, + line_source: Optional[str] = None, + ) -> None: + self.requirement = requirement + self.is_editable = is_editable + self.comes_from = comes_from + self.options = options + self.constraint = constraint + self.line_source = line_source + + +class ParsedLine: + def __init__( + self, + filename: str, + lineno: int, + args: str, + opts: Values, + constraint: bool, + ) -> None: + self.filename = filename + self.lineno = lineno + self.opts = opts + self.constraint = constraint + + if args: + self.is_requirement = True + self.is_editable = False + self.requirement = args + elif opts.editables: + self.is_requirement = True + self.is_editable = True + # We don't support multiple -e on one line + self.requirement = opts.editables[0] + else: + self.is_requirement = False + + +def parse_requirements( + filename: str, + session: PipSession, + finder: Optional["PackageFinder"] = None, + options: Optional[optparse.Values] = None, + constraint: bool = False, +) -> Generator[ParsedRequirement, None, None]: + """Parse a requirements file and yield ParsedRequirement instances. + + :param filename: Path or url of requirements file. + :param session: PipSession instance. + :param finder: Instance of pip.index.PackageFinder. + :param options: cli options. + :param constraint: If true, parsing a constraint file rather than + requirements file. + """ + line_parser = get_line_parser(finder) + parser = RequirementsFileParser(session, line_parser) + + for parsed_line in parser.parse(filename, constraint): + parsed_req = handle_line( + parsed_line, options=options, finder=finder, session=session + ) + if parsed_req is not None: + yield parsed_req + + +def preprocess(content: str) -> ReqFileLines: + """Split, filter, and join lines, and return a line iterator + + :param content: the content of the requirements file + """ + lines_enum: ReqFileLines = enumerate(content.splitlines(), start=1) + lines_enum = join_lines(lines_enum) + lines_enum = ignore_comments(lines_enum) + lines_enum = expand_env_variables(lines_enum) + return lines_enum + + +def handle_requirement_line( + line: ParsedLine, + options: Optional[optparse.Values] = None, +) -> ParsedRequirement: + # preserve for the nested code path + line_comes_from = "{} {} (line {})".format( + "-c" if line.constraint else "-r", + line.filename, + line.lineno, + ) + + assert line.is_requirement + + # get the options that apply to requirements + if line.is_editable: + supported_dest = SUPPORTED_OPTIONS_EDITABLE_REQ_DEST + else: + supported_dest = SUPPORTED_OPTIONS_REQ_DEST + req_options = {} + for dest in supported_dest: + if dest in line.opts.__dict__ and line.opts.__dict__[dest]: + req_options[dest] = line.opts.__dict__[dest] + + line_source = f"line {line.lineno} of {line.filename}" + return ParsedRequirement( + requirement=line.requirement, + is_editable=line.is_editable, + comes_from=line_comes_from, + constraint=line.constraint, + options=req_options, + line_source=line_source, + ) + + +def handle_option_line( + opts: Values, + filename: str, + lineno: int, + finder: Optional["PackageFinder"] = None, + options: Optional[optparse.Values] = None, + session: Optional[PipSession] = None, +) -> None: + if opts.hashes: + logger.warning( + "%s line %s has --hash but no requirement, and will be ignored.", + filename, + lineno, + ) + + if options: + # percolate options upward + if opts.require_hashes: + options.require_hashes = opts.require_hashes + if opts.features_enabled: + options.features_enabled.extend( + f for f in opts.features_enabled if f not in options.features_enabled + ) + + # set finder options + if finder: + find_links = finder.find_links + index_urls = finder.index_urls + no_index = finder.search_scope.no_index + if opts.no_index is True: + no_index = True + index_urls = [] + if opts.index_url and not no_index: + index_urls = [opts.index_url] + if opts.extra_index_urls and not no_index: + index_urls.extend(opts.extra_index_urls) + if opts.find_links: + # FIXME: it would be nice to keep track of the source + # of the find_links: support a find-links local path + # relative to a requirements file. + value = opts.find_links[0] + req_dir = os.path.dirname(os.path.abspath(filename)) + relative_to_reqs_file = os.path.join(req_dir, value) + if os.path.exists(relative_to_reqs_file): + value = relative_to_reqs_file + find_links.append(value) + + if session: + # We need to update the auth urls in session + session.update_index_urls(index_urls) + + search_scope = SearchScope( + find_links=find_links, + index_urls=index_urls, + no_index=no_index, + ) + finder.search_scope = search_scope + + if opts.pre: + finder.set_allow_all_prereleases() + + if opts.prefer_binary: + finder.set_prefer_binary() + + if session: + for host in opts.trusted_hosts or []: + source = f"line {lineno} of {filename}" + session.add_trusted_host(host, source=source) + + +def handle_line( + line: ParsedLine, + options: Optional[optparse.Values] = None, + finder: Optional["PackageFinder"] = None, + session: Optional[PipSession] = None, +) -> Optional[ParsedRequirement]: + """Handle a single parsed requirements line; This can result in + creating/yielding requirements, or updating the finder. + + :param line: The parsed line to be processed. + :param options: CLI options. + :param finder: The finder - updated by non-requirement lines. + :param session: The session - updated by non-requirement lines. + + Returns a ParsedRequirement object if the line is a requirement line, + otherwise returns None. + + For lines that contain requirements, the only options that have an effect + are from SUPPORTED_OPTIONS_REQ, and they are scoped to the + requirement. Other options from SUPPORTED_OPTIONS may be present, but are + ignored. + + For lines that do not contain requirements, the only options that have an + effect are from SUPPORTED_OPTIONS. Options from SUPPORTED_OPTIONS_REQ may + be present, but are ignored. These lines may contain multiple options + (although our docs imply only one is supported), and all our parsed and + affect the finder. + """ + + if line.is_requirement: + parsed_req = handle_requirement_line(line, options) + return parsed_req + else: + handle_option_line( + line.opts, + line.filename, + line.lineno, + finder, + options, + session, + ) + return None + + +class RequirementsFileParser: + def __init__( + self, + session: PipSession, + line_parser: LineParser, + ) -> None: + self._session = session + self._line_parser = line_parser + + def parse( + self, filename: str, constraint: bool + ) -> Generator[ParsedLine, None, None]: + """Parse a given file, yielding parsed lines.""" + yield from self._parse_and_recurse(filename, constraint) + + def _parse_and_recurse( + self, filename: str, constraint: bool + ) -> Generator[ParsedLine, None, None]: + for line in self._parse_file(filename, constraint): + if not line.is_requirement and ( + line.opts.requirements or line.opts.constraints + ): + # parse a nested requirements file + if line.opts.requirements: + req_path = line.opts.requirements[0] + nested_constraint = False + else: + req_path = line.opts.constraints[0] + nested_constraint = True + + # original file is over http + if SCHEME_RE.search(filename): + # do a url join so relative paths work + req_path = urllib.parse.urljoin(filename, req_path) + # original file and nested file are paths + elif not SCHEME_RE.search(req_path): + # do a join so relative paths work + req_path = os.path.join( + os.path.dirname(filename), + req_path, + ) + + yield from self._parse_and_recurse(req_path, nested_constraint) + else: + yield line + + def _parse_file( + self, filename: str, constraint: bool + ) -> Generator[ParsedLine, None, None]: + _, content = get_file_content(filename, self._session) + + lines_enum = preprocess(content) + + for line_number, line in lines_enum: + try: + args_str, opts = self._line_parser(line) + except OptionParsingError as e: + # add offending line + msg = f"Invalid requirement: {line}\n{e.msg}" + raise RequirementsFileParseError(msg) + + yield ParsedLine( + filename, + line_number, + args_str, + opts, + constraint, + ) + + +def get_line_parser(finder: Optional["PackageFinder"]) -> LineParser: + def parse_line(line: str) -> Tuple[str, Values]: + # Build new parser for each line since it accumulates appendable + # options. + parser = build_parser() + defaults = parser.get_default_values() + defaults.index_url = None + if finder: + defaults.format_control = finder.format_control + + args_str, options_str = break_args_options(line) + + try: + options = shlex.split(options_str) + except ValueError as e: + raise OptionParsingError(f"Could not split options: {options_str}") from e + + opts, _ = parser.parse_args(options, defaults) + + return args_str, opts + + return parse_line + + +def break_args_options(line: str) -> Tuple[str, str]: + """Break up the line into an args and options string. We only want to shlex + (and then optparse) the options, not the args. args can contain markers + which are corrupted by shlex. + """ + tokens = line.split(" ") + args = [] + options = tokens[:] + for token in tokens: + if token.startswith("-") or token.startswith("--"): + break + else: + args.append(token) + options.pop(0) + return " ".join(args), " ".join(options) + + +class OptionParsingError(Exception): + def __init__(self, msg: str) -> None: + self.msg = msg + + +def build_parser() -> optparse.OptionParser: + """ + Return a parser for parsing requirement lines + """ + parser = optparse.OptionParser(add_help_option=False) + + option_factories = SUPPORTED_OPTIONS + SUPPORTED_OPTIONS_REQ + for option_factory in option_factories: + option = option_factory() + parser.add_option(option) + + # By default optparse sys.exits on parsing errors. We want to wrap + # that in our own exception. + def parser_exit(self: Any, msg: str) -> "NoReturn": + raise OptionParsingError(msg) + + # NOTE: mypy disallows assigning to a method + # https://github.com/python/mypy/issues/2427 + parser.exit = parser_exit # type: ignore + + return parser + + +def join_lines(lines_enum: ReqFileLines) -> ReqFileLines: + """Joins a line ending in '\' with the previous line (except when following + comments). The joined line takes on the index of the first line. + """ + primary_line_number = None + new_line: List[str] = [] + for line_number, line in lines_enum: + if not line.endswith("\\") or COMMENT_RE.match(line): + if COMMENT_RE.match(line): + # this ensures comments are always matched later + line = " " + line + if new_line: + new_line.append(line) + assert primary_line_number is not None + yield primary_line_number, "".join(new_line) + new_line = [] + else: + yield line_number, line + else: + if not new_line: + primary_line_number = line_number + new_line.append(line.strip("\\")) + + # last line contains \ + if new_line: + assert primary_line_number is not None + yield primary_line_number, "".join(new_line) + + # TODO: handle space after '\'. + + +def ignore_comments(lines_enum: ReqFileLines) -> ReqFileLines: + """ + Strips comments and filter empty lines. + """ + for line_number, line in lines_enum: + line = COMMENT_RE.sub("", line) + line = line.strip() + if line: + yield line_number, line + + +def expand_env_variables(lines_enum: ReqFileLines) -> ReqFileLines: + """Replace all environment variables that can be retrieved via `os.getenv`. + + The only allowed format for environment variables defined in the + requirement file is `${MY_VARIABLE_1}` to ensure two things: + + 1. Strings that contain a `$` aren't accidentally (partially) expanded. + 2. Ensure consistency across platforms for requirement files. + + These points are the result of a discussion on the `github pull + request #3514 `_. + + Valid characters in variable names follow the `POSIX standard + `_ and are limited + to uppercase letter, digits and the `_` (underscore). + """ + for line_number, line in lines_enum: + for env_var, var_name in ENV_VAR_RE.findall(line): + value = os.getenv(var_name) + if not value: + continue + + line = line.replace(env_var, value) + + yield line_number, line + + +def get_file_content(url: str, session: PipSession) -> Tuple[str, str]: + """Gets the content of a file; it may be a filename, file: URL, or + http: URL. Returns (location, content). Content is unicode. + Respects # -*- coding: declarations on the retrieved files. + + :param url: File path or url. + :param session: PipSession instance. + """ + scheme = get_url_scheme(url) + + # Pip has special support for file:// URLs (LocalFSAdapter). + if scheme in ["http", "https", "file"]: + resp = session.get(url) + raise_for_status(resp) + return resp.url, resp.text + + # Assume this is a bare path. + try: + with open(url, "rb") as f: + content = auto_decode(f.read()) + except OSError as exc: + raise InstallationError(f"Could not open requirements file: {exc}") + return url, content diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/req_install.py b/venv/lib/python3.12/site-packages/pip/_internal/req/req_install.py new file mode 100644 index 0000000..a65611c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/req/req_install.py @@ -0,0 +1,923 @@ +import functools +import logging +import os +import shutil +import sys +import uuid +import zipfile +from optparse import Values +from pathlib import Path +from typing import Any, Collection, Dict, Iterable, List, Optional, Sequence, Union + +from pip._vendor.packaging.markers import Marker +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import Version +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.pyproject_hooks import BuildBackendHookCaller + +from pip._internal.build_env import BuildEnvironment, NoOpBuildEnvironment +from pip._internal.exceptions import InstallationError, PreviousBuildDirError +from pip._internal.locations import get_scheme +from pip._internal.metadata import ( + BaseDistribution, + get_default_environment, + get_directory_distribution, + get_wheel_distribution, +) +from pip._internal.metadata.base import FilesystemWheel +from pip._internal.models.direct_url import DirectUrl +from pip._internal.models.link import Link +from pip._internal.operations.build.metadata import generate_metadata +from pip._internal.operations.build.metadata_editable import generate_editable_metadata +from pip._internal.operations.build.metadata_legacy import ( + generate_metadata as generate_metadata_legacy, +) +from pip._internal.operations.install.editable_legacy import ( + install_editable as install_editable_legacy, +) +from pip._internal.operations.install.wheel import install_wheel +from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path +from pip._internal.req.req_uninstall import UninstallPathSet +from pip._internal.utils.deprecation import deprecated +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.misc import ( + ConfiguredBuildBackendHookCaller, + ask_path_exists, + backup_dir, + display_path, + hide_url, + is_installable_dir, + redact_auth_from_requirement, + redact_auth_from_url, +) +from pip._internal.utils.packaging import safe_extra +from pip._internal.utils.subprocess import runner_with_spinner_message +from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds +from pip._internal.utils.unpacking import unpack_file +from pip._internal.utils.virtualenv import running_under_virtualenv +from pip._internal.vcs import vcs + +logger = logging.getLogger(__name__) + + +class InstallRequirement: + """ + Represents something that may be installed later on, may have information + about where to fetch the relevant requirement and also contains logic for + installing the said requirement. + """ + + def __init__( + self, + req: Optional[Requirement], + comes_from: Optional[Union[str, "InstallRequirement"]], + editable: bool = False, + link: Optional[Link] = None, + markers: Optional[Marker] = None, + use_pep517: Optional[bool] = None, + isolated: bool = False, + *, + global_options: Optional[List[str]] = None, + hash_options: Optional[Dict[str, List[str]]] = None, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, + constraint: bool = False, + extras: Collection[str] = (), + user_supplied: bool = False, + permit_editable_wheels: bool = False, + ) -> None: + assert req is None or isinstance(req, Requirement), req + self.req = req + self.comes_from = comes_from + self.constraint = constraint + self.editable = editable + self.permit_editable_wheels = permit_editable_wheels + + # source_dir is the local directory where the linked requirement is + # located, or unpacked. In case unpacking is needed, creating and + # populating source_dir is done by the RequirementPreparer. Note this + # is not necessarily the directory where pyproject.toml or setup.py is + # located - that one is obtained via unpacked_source_directory. + self.source_dir: Optional[str] = None + if self.editable: + assert link + if link.is_file: + self.source_dir = os.path.normpath(os.path.abspath(link.file_path)) + + # original_link is the direct URL that was provided by the user for the + # requirement, either directly or via a constraints file. + if link is None and req and req.url: + # PEP 508 URL requirement + link = Link(req.url) + self.link = self.original_link = link + + # When this InstallRequirement is a wheel obtained from the cache of locally + # built wheels, this is the source link corresponding to the cache entry, which + # was used to download and build the cached wheel. + self.cached_wheel_source_link: Optional[Link] = None + + # Information about the location of the artifact that was downloaded . This + # property is guaranteed to be set in resolver results. + self.download_info: Optional[DirectUrl] = None + + # Path to any downloaded or already-existing package. + self.local_file_path: Optional[str] = None + if self.link and self.link.is_file: + self.local_file_path = self.link.file_path + + if extras: + self.extras = extras + elif req: + self.extras = req.extras + else: + self.extras = set() + if markers is None and req: + markers = req.marker + self.markers = markers + + # This holds the Distribution object if this requirement is already installed. + self.satisfied_by: Optional[BaseDistribution] = None + # Whether the installation process should try to uninstall an existing + # distribution before installing this requirement. + self.should_reinstall = False + # Temporary build location + self._temp_build_dir: Optional[TempDirectory] = None + # Set to True after successful installation + self.install_succeeded: Optional[bool] = None + # Supplied options + self.global_options = global_options if global_options else [] + self.hash_options = hash_options if hash_options else {} + self.config_settings = config_settings + # Set to True after successful preparation of this requirement + self.prepared = False + # User supplied requirement are explicitly requested for installation + # by the user via CLI arguments or requirements files, as opposed to, + # e.g. dependencies, extras or constraints. + self.user_supplied = user_supplied + + self.isolated = isolated + self.build_env: BuildEnvironment = NoOpBuildEnvironment() + + # For PEP 517, the directory where we request the project metadata + # gets stored. We need this to pass to build_wheel, so the backend + # can ensure that the wheel matches the metadata (see the PEP for + # details). + self.metadata_directory: Optional[str] = None + + # The static build requirements (from pyproject.toml) + self.pyproject_requires: Optional[List[str]] = None + + # Build requirements that we will check are available + self.requirements_to_check: List[str] = [] + + # The PEP 517 backend we should use to build the project + self.pep517_backend: Optional[BuildBackendHookCaller] = None + + # Are we using PEP 517 for this requirement? + # After pyproject.toml has been loaded, the only valid values are True + # and False. Before loading, None is valid (meaning "use the default"). + # Setting an explicit value before loading pyproject.toml is supported, + # but after loading this flag should be treated as read only. + self.use_pep517 = use_pep517 + + # If config settings are provided, enforce PEP 517. + if self.config_settings: + if self.use_pep517 is False: + logger.warning( + "--no-use-pep517 ignored for %s " + "because --config-settings are specified.", + self, + ) + self.use_pep517 = True + + # This requirement needs more preparation before it can be built + self.needs_more_preparation = False + + # This requirement needs to be unpacked before it can be installed. + self._archive_source: Optional[Path] = None + + def __str__(self) -> str: + if self.req: + s = redact_auth_from_requirement(self.req) + if self.link: + s += f" from {redact_auth_from_url(self.link.url)}" + elif self.link: + s = redact_auth_from_url(self.link.url) + else: + s = "" + if self.satisfied_by is not None: + if self.satisfied_by.location is not None: + location = display_path(self.satisfied_by.location) + else: + location = "" + s += f" in {location}" + if self.comes_from: + if isinstance(self.comes_from, str): + comes_from: Optional[str] = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += f" (from {comes_from})" + return s + + def __repr__(self) -> str: + return "<{} object: {} editable={!r}>".format( + self.__class__.__name__, str(self), self.editable + ) + + def format_debug(self) -> str: + """An un-tested helper for getting state, for debugging.""" + attributes = vars(self) + names = sorted(attributes) + + state = (f"{attr}={attributes[attr]!r}" for attr in sorted(names)) + return "<{name} object: {{{state}}}>".format( + name=self.__class__.__name__, + state=", ".join(state), + ) + + # Things that are valid for all kinds of requirements? + @property + def name(self) -> Optional[str]: + if self.req is None: + return None + return self.req.name + + @functools.lru_cache() # use cached_property in python 3.8+ + def supports_pyproject_editable(self) -> bool: + if not self.use_pep517: + return False + assert self.pep517_backend + with self.build_env: + runner = runner_with_spinner_message( + "Checking if build backend supports build_editable" + ) + with self.pep517_backend.subprocess_runner(runner): + return "build_editable" in self.pep517_backend._supported_features() + + @property + def specifier(self) -> SpecifierSet: + assert self.req is not None + return self.req.specifier + + @property + def is_direct(self) -> bool: + """Whether this requirement was specified as a direct URL.""" + return self.original_link is not None + + @property + def is_pinned(self) -> bool: + """Return whether I am pinned to an exact version. + + For example, some-package==1.2 is pinned; some-package>1.2 is not. + """ + assert self.req is not None + specifiers = self.req.specifier + return len(specifiers) == 1 and next(iter(specifiers)).operator in {"==", "==="} + + def match_markers(self, extras_requested: Optional[Iterable[str]] = None) -> bool: + if not extras_requested: + # Provide an extra to safely evaluate the markers + # without matching any extra + extras_requested = ("",) + if self.markers is not None: + return any( + self.markers.evaluate({"extra": extra}) + # TODO: Remove these two variants when packaging is upgraded to + # support the marker comparison logic specified in PEP 685. + or self.markers.evaluate({"extra": safe_extra(extra)}) + or self.markers.evaluate({"extra": canonicalize_name(extra)}) + for extra in extras_requested + ) + else: + return True + + @property + def has_hash_options(self) -> bool: + """Return whether any known-good hashes are specified as options. + + These activate --require-hashes mode; hashes specified as part of a + URL do not. + + """ + return bool(self.hash_options) + + def hashes(self, trust_internet: bool = True) -> Hashes: + """Return a hash-comparer that considers my option- and URL-based + hashes to be known-good. + + Hashes in URLs--ones embedded in the requirements file, not ones + downloaded from an index server--are almost peers with ones from + flags. They satisfy --require-hashes (whether it was implicitly or + explicitly activated) but do not activate it. md5 and sha224 are not + allowed in flags, which should nudge people toward good algos. We + always OR all hashes together, even ones from URLs. + + :param trust_internet: Whether to trust URL-based (#md5=...) hashes + downloaded from the internet, as by populate_link() + + """ + good_hashes = self.hash_options.copy() + if trust_internet: + link = self.link + elif self.is_direct and self.user_supplied: + link = self.original_link + else: + link = None + if link and link.hash: + assert link.hash_name is not None + good_hashes.setdefault(link.hash_name, []).append(link.hash) + return Hashes(good_hashes) + + def from_path(self) -> Optional[str]: + """Format a nice indicator to show where this "comes from" """ + if self.req is None: + return None + s = str(self.req) + if self.comes_from: + comes_from: Optional[str] + if isinstance(self.comes_from, str): + comes_from = self.comes_from + else: + comes_from = self.comes_from.from_path() + if comes_from: + s += "->" + comes_from + return s + + def ensure_build_location( + self, build_dir: str, autodelete: bool, parallel_builds: bool + ) -> str: + assert build_dir is not None + if self._temp_build_dir is not None: + assert self._temp_build_dir.path + return self._temp_build_dir.path + if self.req is None: + # Some systems have /tmp as a symlink which confuses custom + # builds (such as numpy). Thus, we ensure that the real path + # is returned. + self._temp_build_dir = TempDirectory( + kind=tempdir_kinds.REQ_BUILD, globally_managed=True + ) + + return self._temp_build_dir.path + + # This is the only remaining place where we manually determine the path + # for the temporary directory. It is only needed for editables where + # it is the value of the --src option. + + # When parallel builds are enabled, add a UUID to the build directory + # name so multiple builds do not interfere with each other. + dir_name: str = canonicalize_name(self.req.name) + if parallel_builds: + dir_name = f"{dir_name}_{uuid.uuid4().hex}" + + # FIXME: Is there a better place to create the build_dir? (hg and bzr + # need this) + if not os.path.exists(build_dir): + logger.debug("Creating directory %s", build_dir) + os.makedirs(build_dir) + actual_build_dir = os.path.join(build_dir, dir_name) + # `None` indicates that we respect the globally-configured deletion + # settings, which is what we actually want when auto-deleting. + delete_arg = None if autodelete else False + return TempDirectory( + path=actual_build_dir, + delete=delete_arg, + kind=tempdir_kinds.REQ_BUILD, + globally_managed=True, + ).path + + def _set_requirement(self) -> None: + """Set requirement after generating metadata.""" + assert self.req is None + assert self.metadata is not None + assert self.source_dir is not None + + # Construct a Requirement object from the generated metadata + if isinstance(parse_version(self.metadata["Version"]), Version): + op = "==" + else: + op = "===" + + self.req = Requirement( + "".join( + [ + self.metadata["Name"], + op, + self.metadata["Version"], + ] + ) + ) + + def warn_on_mismatching_name(self) -> None: + assert self.req is not None + metadata_name = canonicalize_name(self.metadata["Name"]) + if canonicalize_name(self.req.name) == metadata_name: + # Everything is fine. + return + + # If we're here, there's a mismatch. Log a warning about it. + logger.warning( + "Generating metadata for package %s " + "produced metadata for project name %s. Fix your " + "#egg=%s fragments.", + self.name, + metadata_name, + self.name, + ) + self.req = Requirement(metadata_name) + + def check_if_exists(self, use_user_site: bool) -> None: + """Find an installed distribution that satisfies or conflicts + with this requirement, and set self.satisfied_by or + self.should_reinstall appropriately. + """ + if self.req is None: + return + existing_dist = get_default_environment().get_distribution(self.req.name) + if not existing_dist: + return + + version_compatible = self.req.specifier.contains( + existing_dist.version, + prereleases=True, + ) + if not version_compatible: + self.satisfied_by = None + if use_user_site: + if existing_dist.in_usersite: + self.should_reinstall = True + elif running_under_virtualenv() and existing_dist.in_site_packages: + raise InstallationError( + f"Will not install to the user site because it will " + f"lack sys.path precedence to {existing_dist.raw_name} " + f"in {existing_dist.location}" + ) + else: + self.should_reinstall = True + else: + if self.editable: + self.should_reinstall = True + # when installing editables, nothing pre-existing should ever + # satisfy + self.satisfied_by = None + else: + self.satisfied_by = existing_dist + + # Things valid for wheels + @property + def is_wheel(self) -> bool: + if not self.link: + return False + return self.link.is_wheel + + @property + def is_wheel_from_cache(self) -> bool: + # When True, it means that this InstallRequirement is a local wheel file in the + # cache of locally built wheels. + return self.cached_wheel_source_link is not None + + # Things valid for sdists + @property + def unpacked_source_directory(self) -> str: + assert self.source_dir, f"No source dir for {self}" + return os.path.join( + self.source_dir, self.link and self.link.subdirectory_fragment or "" + ) + + @property + def setup_py_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + setup_py = os.path.join(self.unpacked_source_directory, "setup.py") + + return setup_py + + @property + def setup_cfg_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + setup_cfg = os.path.join(self.unpacked_source_directory, "setup.cfg") + + return setup_cfg + + @property + def pyproject_toml_path(self) -> str: + assert self.source_dir, f"No source dir for {self}" + return make_pyproject_path(self.unpacked_source_directory) + + def load_pyproject_toml(self) -> None: + """Load the pyproject.toml file. + + After calling this routine, all of the attributes related to PEP 517 + processing for this requirement have been set. In particular, the + use_pep517 attribute can be used to determine whether we should + follow the PEP 517 or legacy (setup.py) code path. + """ + pyproject_toml_data = load_pyproject_toml( + self.use_pep517, self.pyproject_toml_path, self.setup_py_path, str(self) + ) + + if pyproject_toml_data is None: + assert not self.config_settings + self.use_pep517 = False + return + + self.use_pep517 = True + requires, backend, check, backend_path = pyproject_toml_data + self.requirements_to_check = check + self.pyproject_requires = requires + self.pep517_backend = ConfiguredBuildBackendHookCaller( + self, + self.unpacked_source_directory, + backend, + backend_path=backend_path, + ) + + def isolated_editable_sanity_check(self) -> None: + """Check that an editable requirement if valid for use with PEP 517/518. + + This verifies that an editable that has a pyproject.toml either supports PEP 660 + or as a setup.py or a setup.cfg + """ + if ( + self.editable + and self.use_pep517 + and not self.supports_pyproject_editable() + and not os.path.isfile(self.setup_py_path) + and not os.path.isfile(self.setup_cfg_path) + ): + raise InstallationError( + f"Project {self} has a 'pyproject.toml' and its build " + f"backend is missing the 'build_editable' hook. Since it does not " + f"have a 'setup.py' nor a 'setup.cfg', " + f"it cannot be installed in editable mode. " + f"Consider using a build backend that supports PEP 660." + ) + + def prepare_metadata(self) -> None: + """Ensure that project metadata is available. + + Under PEP 517 and PEP 660, call the backend hook to prepare the metadata. + Under legacy processing, call setup.py egg-info. + """ + assert self.source_dir, f"No source dir for {self}" + details = self.name or f"from {self.link}" + + if self.use_pep517: + assert self.pep517_backend is not None + if ( + self.editable + and self.permit_editable_wheels + and self.supports_pyproject_editable() + ): + self.metadata_directory = generate_editable_metadata( + build_env=self.build_env, + backend=self.pep517_backend, + details=details, + ) + else: + self.metadata_directory = generate_metadata( + build_env=self.build_env, + backend=self.pep517_backend, + details=details, + ) + else: + self.metadata_directory = generate_metadata_legacy( + build_env=self.build_env, + setup_py_path=self.setup_py_path, + source_dir=self.unpacked_source_directory, + isolated=self.isolated, + details=details, + ) + + # Act on the newly generated metadata, based on the name and version. + if not self.name: + self._set_requirement() + else: + self.warn_on_mismatching_name() + + self.assert_source_matches_version() + + @property + def metadata(self) -> Any: + if not hasattr(self, "_metadata"): + self._metadata = self.get_dist().metadata + + return self._metadata + + def get_dist(self) -> BaseDistribution: + if self.metadata_directory: + return get_directory_distribution(self.metadata_directory) + elif self.local_file_path and self.is_wheel: + assert self.req is not None + return get_wheel_distribution( + FilesystemWheel(self.local_file_path), + canonicalize_name(self.req.name), + ) + raise AssertionError( + f"InstallRequirement {self} has no metadata directory and no wheel: " + f"can't make a distribution." + ) + + def assert_source_matches_version(self) -> None: + assert self.source_dir, f"No source dir for {self}" + version = self.metadata["version"] + if self.req and self.req.specifier and version not in self.req.specifier: + logger.warning( + "Requested %s, but installing version %s", + self, + version, + ) + else: + logger.debug( + "Source in %s has version %s, which satisfies requirement %s", + display_path(self.source_dir), + version, + self, + ) + + # For both source distributions and editables + def ensure_has_source_dir( + self, + parent_dir: str, + autodelete: bool = False, + parallel_builds: bool = False, + ) -> None: + """Ensure that a source_dir is set. + + This will create a temporary build dir if the name of the requirement + isn't known yet. + + :param parent_dir: The ideal pip parent_dir for the source_dir. + Generally src_dir for editables and build_dir for sdists. + :return: self.source_dir + """ + if self.source_dir is None: + self.source_dir = self.ensure_build_location( + parent_dir, + autodelete=autodelete, + parallel_builds=parallel_builds, + ) + + def needs_unpacked_archive(self, archive_source: Path) -> None: + assert self._archive_source is None + self._archive_source = archive_source + + def ensure_pristine_source_checkout(self) -> None: + """Ensure the source directory has not yet been built in.""" + assert self.source_dir is not None + if self._archive_source is not None: + unpack_file(str(self._archive_source), self.source_dir) + elif is_installable_dir(self.source_dir): + # If a checkout exists, it's unwise to keep going. + # version inconsistencies are logged later, but do not fail + # the installation. + raise PreviousBuildDirError( + f"pip can't proceed with requirements '{self}' due to a " + f"pre-existing build directory ({self.source_dir}). This is likely " + "due to a previous installation that failed . pip is " + "being responsible and not assuming it can delete this. " + "Please delete it and try again." + ) + + # For editable installations + def update_editable(self) -> None: + if not self.link: + logger.debug( + "Cannot update repository at %s; repository location is unknown", + self.source_dir, + ) + return + assert self.editable + assert self.source_dir + if self.link.scheme == "file": + # Static paths don't get updated + return + vcs_backend = vcs.get_backend_for_scheme(self.link.scheme) + # Editable requirements are validated in Requirement constructors. + # So here, if it's neither a path nor a valid VCS URL, it's a bug. + assert vcs_backend, f"Unsupported VCS URL {self.link.url}" + hidden_url = hide_url(self.link.url) + vcs_backend.obtain(self.source_dir, url=hidden_url, verbosity=0) + + # Top-level Actions + def uninstall( + self, auto_confirm: bool = False, verbose: bool = False + ) -> Optional[UninstallPathSet]: + """ + Uninstall the distribution currently satisfying this requirement. + + Prompts before removing or modifying files unless + ``auto_confirm`` is True. + + Refuses to delete or modify files outside of ``sys.prefix`` - + thus uninstallation within a virtual environment can only + modify that virtual environment, even if the virtualenv is + linked to global site-packages. + + """ + assert self.req + dist = get_default_environment().get_distribution(self.req.name) + if not dist: + logger.warning("Skipping %s as it is not installed.", self.name) + return None + logger.info("Found existing installation: %s", dist) + + uninstalled_pathset = UninstallPathSet.from_dist(dist) + uninstalled_pathset.remove(auto_confirm, verbose) + return uninstalled_pathset + + def _get_archive_name(self, path: str, parentdir: str, rootdir: str) -> str: + def _clean_zip_name(name: str, prefix: str) -> str: + assert name.startswith( + prefix + os.path.sep + ), f"name {name!r} doesn't start with prefix {prefix!r}" + name = name[len(prefix) + 1 :] + name = name.replace(os.path.sep, "/") + return name + + assert self.req is not None + path = os.path.join(parentdir, path) + name = _clean_zip_name(path, rootdir) + return self.req.name + "/" + name + + def archive(self, build_dir: Optional[str]) -> None: + """Saves archive to provided build_dir. + + Used for saving downloaded VCS requirements as part of `pip download`. + """ + assert self.source_dir + if build_dir is None: + return + + create_archive = True + archive_name = "{}-{}.zip".format(self.name, self.metadata["version"]) + archive_path = os.path.join(build_dir, archive_name) + + if os.path.exists(archive_path): + response = ask_path_exists( + f"The file {display_path(archive_path)} exists. (i)gnore, (w)ipe, " + "(b)ackup, (a)bort ", + ("i", "w", "b", "a"), + ) + if response == "i": + create_archive = False + elif response == "w": + logger.warning("Deleting %s", display_path(archive_path)) + os.remove(archive_path) + elif response == "b": + dest_file = backup_dir(archive_path) + logger.warning( + "Backing up %s to %s", + display_path(archive_path), + display_path(dest_file), + ) + shutil.move(archive_path, dest_file) + elif response == "a": + sys.exit(-1) + + if not create_archive: + return + + zip_output = zipfile.ZipFile( + archive_path, + "w", + zipfile.ZIP_DEFLATED, + allowZip64=True, + ) + with zip_output: + dir = os.path.normcase(os.path.abspath(self.unpacked_source_directory)) + for dirpath, dirnames, filenames in os.walk(dir): + for dirname in dirnames: + dir_arcname = self._get_archive_name( + dirname, + parentdir=dirpath, + rootdir=dir, + ) + zipdir = zipfile.ZipInfo(dir_arcname + "/") + zipdir.external_attr = 0x1ED << 16 # 0o755 + zip_output.writestr(zipdir, "") + for filename in filenames: + file_arcname = self._get_archive_name( + filename, + parentdir=dirpath, + rootdir=dir, + ) + filename = os.path.join(dirpath, filename) + zip_output.write(filename, file_arcname) + + logger.info("Saved %s", display_path(archive_path)) + + def install( + self, + global_options: Optional[Sequence[str]] = None, + root: Optional[str] = None, + home: Optional[str] = None, + prefix: Optional[str] = None, + warn_script_location: bool = True, + use_user_site: bool = False, + pycompile: bool = True, + ) -> None: + assert self.req is not None + scheme = get_scheme( + self.req.name, + user=use_user_site, + home=home, + root=root, + isolated=self.isolated, + prefix=prefix, + ) + + if self.editable and not self.is_wheel: + if self.config_settings: + logger.warning( + "--config-settings ignored for legacy editable install of %s. " + "Consider upgrading to a version of setuptools " + "that supports PEP 660 (>= 64).", + self, + ) + install_editable_legacy( + global_options=global_options if global_options is not None else [], + prefix=prefix, + home=home, + use_user_site=use_user_site, + name=self.req.name, + setup_py_path=self.setup_py_path, + isolated=self.isolated, + build_env=self.build_env, + unpacked_source_directory=self.unpacked_source_directory, + ) + self.install_succeeded = True + return + + assert self.is_wheel + assert self.local_file_path + + install_wheel( + self.req.name, + self.local_file_path, + scheme=scheme, + req_description=str(self.req), + pycompile=pycompile, + warn_script_location=warn_script_location, + direct_url=self.download_info if self.is_direct else None, + requested=self.user_supplied, + ) + self.install_succeeded = True + + +def check_invalid_constraint_type(req: InstallRequirement) -> str: + # Check for unsupported forms + problem = "" + if not req.name: + problem = "Unnamed requirements are not allowed as constraints" + elif req.editable: + problem = "Editable requirements are not allowed as constraints" + elif req.extras: + problem = "Constraints cannot have extras" + + if problem: + deprecated( + reason=( + "Constraints are only allowed to take the form of a package " + "name and a version specifier. Other forms were originally " + "permitted as an accident of the implementation, but were " + "undocumented. The new implementation of the resolver no " + "longer supports these forms." + ), + replacement="replacing the constraint with a requirement", + # No plan yet for when the new resolver becomes default + gone_in=None, + issue=8210, + ) + + return problem + + +def _has_option(options: Values, reqs: List[InstallRequirement], option: str) -> bool: + if getattr(options, option, None): + return True + for req in reqs: + if getattr(req, option, None): + return True + return False + + +def check_legacy_setup_py_options( + options: Values, + reqs: List[InstallRequirement], +) -> None: + has_build_options = _has_option(options, reqs, "build_options") + has_global_options = _has_option(options, reqs, "global_options") + if has_build_options or has_global_options: + deprecated( + reason="--build-option and --global-option are deprecated.", + issue=11859, + replacement="to use --config-settings", + gone_in="24.2", + ) + logger.warning( + "Implying --no-binary=:all: due to the presence of " + "--build-option / --global-option. " + ) + options.format_control.disallow_binaries() diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/req_set.py b/venv/lib/python3.12/site-packages/pip/_internal/req/req_set.py new file mode 100644 index 0000000..bf36114 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/req/req_set.py @@ -0,0 +1,119 @@ +import logging +from collections import OrderedDict +from typing import Dict, List + +from pip._vendor.packaging.specifiers import LegacySpecifier +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import LegacyVersion + +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.deprecation import deprecated + +logger = logging.getLogger(__name__) + + +class RequirementSet: + def __init__(self, check_supported_wheels: bool = True) -> None: + """Create a RequirementSet.""" + + self.requirements: Dict[str, InstallRequirement] = OrderedDict() + self.check_supported_wheels = check_supported_wheels + + self.unnamed_requirements: List[InstallRequirement] = [] + + def __str__(self) -> str: + requirements = sorted( + (req for req in self.requirements.values() if not req.comes_from), + key=lambda req: canonicalize_name(req.name or ""), + ) + return " ".join(str(req.req) for req in requirements) + + def __repr__(self) -> str: + requirements = sorted( + self.requirements.values(), + key=lambda req: canonicalize_name(req.name or ""), + ) + + format_string = "<{classname} object; {count} requirement(s): {reqs}>" + return format_string.format( + classname=self.__class__.__name__, + count=len(requirements), + reqs=", ".join(str(req.req) for req in requirements), + ) + + def add_unnamed_requirement(self, install_req: InstallRequirement) -> None: + assert not install_req.name + self.unnamed_requirements.append(install_req) + + def add_named_requirement(self, install_req: InstallRequirement) -> None: + assert install_req.name + + project_name = canonicalize_name(install_req.name) + self.requirements[project_name] = install_req + + def has_requirement(self, name: str) -> bool: + project_name = canonicalize_name(name) + + return ( + project_name in self.requirements + and not self.requirements[project_name].constraint + ) + + def get_requirement(self, name: str) -> InstallRequirement: + project_name = canonicalize_name(name) + + if project_name in self.requirements: + return self.requirements[project_name] + + raise KeyError(f"No project with the name {name!r}") + + @property + def all_requirements(self) -> List[InstallRequirement]: + return self.unnamed_requirements + list(self.requirements.values()) + + @property + def requirements_to_install(self) -> List[InstallRequirement]: + """Return the list of requirements that need to be installed. + + TODO remove this property together with the legacy resolver, since the new + resolver only returns requirements that need to be installed. + """ + return [ + install_req + for install_req in self.all_requirements + if not install_req.constraint and not install_req.satisfied_by + ] + + def warn_legacy_versions_and_specifiers(self) -> None: + for req in self.requirements_to_install: + version = req.get_dist().version + if isinstance(version, LegacyVersion): + deprecated( + reason=( + f"pip has selected the non standard version {version} " + f"of {req}. In the future this version will be " + f"ignored as it isn't standard compliant." + ), + replacement=( + "set or update constraints to select another version " + "or contact the package author to fix the version number" + ), + issue=12063, + gone_in="24.1", + ) + for dep in req.get_dist().iter_dependencies(): + if any(isinstance(spec, LegacySpecifier) for spec in dep.specifier): + deprecated( + reason=( + f"pip has selected {req} {version} which has non " + f"standard dependency specifier {dep}. " + f"In the future this version of {req} will be " + f"ignored as it isn't standard compliant." + ), + replacement=( + "set or update constraints to select another version " + "or contact the package author to fix the version number" + ), + issue=12063, + gone_in="24.1", + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py b/venv/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py new file mode 100644 index 0000000..707fde1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py @@ -0,0 +1,649 @@ +import functools +import os +import sys +import sysconfig +from importlib.util import cache_from_source +from typing import Any, Callable, Dict, Generator, Iterable, List, Optional, Set, Tuple + +from pip._internal.exceptions import UninstallationError +from pip._internal.locations import get_bin_prefix, get_bin_user +from pip._internal.metadata import BaseDistribution +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.egg_link import egg_link_path_from_location +from pip._internal.utils.logging import getLogger, indent_log +from pip._internal.utils.misc import ask, normalize_path, renames, rmtree +from pip._internal.utils.temp_dir import AdjacentTempDirectory, TempDirectory +from pip._internal.utils.virtualenv import running_under_virtualenv + +logger = getLogger(__name__) + + +def _script_names( + bin_dir: str, script_name: str, is_gui: bool +) -> Generator[str, None, None]: + """Create the fully qualified name of the files created by + {console,gui}_scripts for the given ``dist``. + Returns the list of file names + """ + exe_name = os.path.join(bin_dir, script_name) + yield exe_name + if not WINDOWS: + return + yield f"{exe_name}.exe" + yield f"{exe_name}.exe.manifest" + if is_gui: + yield f"{exe_name}-script.pyw" + else: + yield f"{exe_name}-script.py" + + +def _unique( + fn: Callable[..., Generator[Any, None, None]] +) -> Callable[..., Generator[Any, None, None]]: + @functools.wraps(fn) + def unique(*args: Any, **kw: Any) -> Generator[Any, None, None]: + seen: Set[Any] = set() + for item in fn(*args, **kw): + if item not in seen: + seen.add(item) + yield item + + return unique + + +@_unique +def uninstallation_paths(dist: BaseDistribution) -> Generator[str, None, None]: + """ + Yield all the uninstallation paths for dist based on RECORD-without-.py[co] + + Yield paths to all the files in RECORD. For each .py file in RECORD, add + the .pyc and .pyo in the same directory. + + UninstallPathSet.add() takes care of the __pycache__ .py[co]. + + If RECORD is not found, raises UninstallationError, + with possible information from the INSTALLER file. + + https://packaging.python.org/specifications/recording-installed-packages/ + """ + location = dist.location + assert location is not None, "not installed" + + entries = dist.iter_declared_entries() + if entries is None: + msg = f"Cannot uninstall {dist}, RECORD file not found." + installer = dist.installer + if not installer or installer == "pip": + dep = f"{dist.raw_name}=={dist.version}" + msg += ( + " You might be able to recover from this via: " + f"'pip install --force-reinstall --no-deps {dep}'." + ) + else: + msg += f" Hint: The package was installed by {installer}." + raise UninstallationError(msg) + + for entry in entries: + path = os.path.join(location, entry) + yield path + if path.endswith(".py"): + dn, fn = os.path.split(path) + base = fn[:-3] + path = os.path.join(dn, base + ".pyc") + yield path + path = os.path.join(dn, base + ".pyo") + yield path + + +def compact(paths: Iterable[str]) -> Set[str]: + """Compact a path set to contain the minimal number of paths + necessary to contain all paths in the set. If /a/path/ and + /a/path/to/a/file.txt are both in the set, leave only the + shorter path.""" + + sep = os.path.sep + short_paths: Set[str] = set() + for path in sorted(paths, key=len): + should_skip = any( + path.startswith(shortpath.rstrip("*")) + and path[len(shortpath.rstrip("*").rstrip(sep))] == sep + for shortpath in short_paths + ) + if not should_skip: + short_paths.add(path) + return short_paths + + +def compress_for_rename(paths: Iterable[str]) -> Set[str]: + """Returns a set containing the paths that need to be renamed. + + This set may include directories when the original sequence of paths + included every file on disk. + """ + case_map = {os.path.normcase(p): p for p in paths} + remaining = set(case_map) + unchecked = sorted({os.path.split(p)[0] for p in case_map.values()}, key=len) + wildcards: Set[str] = set() + + def norm_join(*a: str) -> str: + return os.path.normcase(os.path.join(*a)) + + for root in unchecked: + if any(os.path.normcase(root).startswith(w) for w in wildcards): + # This directory has already been handled. + continue + + all_files: Set[str] = set() + all_subdirs: Set[str] = set() + for dirname, subdirs, files in os.walk(root): + all_subdirs.update(norm_join(root, dirname, d) for d in subdirs) + all_files.update(norm_join(root, dirname, f) for f in files) + # If all the files we found are in our remaining set of files to + # remove, then remove them from the latter set and add a wildcard + # for the directory. + if not (all_files - remaining): + remaining.difference_update(all_files) + wildcards.add(root + os.sep) + + return set(map(case_map.__getitem__, remaining)) | wildcards + + +def compress_for_output_listing(paths: Iterable[str]) -> Tuple[Set[str], Set[str]]: + """Returns a tuple of 2 sets of which paths to display to user + + The first set contains paths that would be deleted. Files of a package + are not added and the top-level directory of the package has a '*' added + at the end - to signify that all it's contents are removed. + + The second set contains files that would have been skipped in the above + folders. + """ + + will_remove = set(paths) + will_skip = set() + + # Determine folders and files + folders = set() + files = set() + for path in will_remove: + if path.endswith(".pyc"): + continue + if path.endswith("__init__.py") or ".dist-info" in path: + folders.add(os.path.dirname(path)) + files.add(path) + + _normcased_files = set(map(os.path.normcase, files)) + + folders = compact(folders) + + # This walks the tree using os.walk to not miss extra folders + # that might get added. + for folder in folders: + for dirpath, _, dirfiles in os.walk(folder): + for fname in dirfiles: + if fname.endswith(".pyc"): + continue + + file_ = os.path.join(dirpath, fname) + if ( + os.path.isfile(file_) + and os.path.normcase(file_) not in _normcased_files + ): + # We are skipping this file. Add it to the set. + will_skip.add(file_) + + will_remove = files | {os.path.join(folder, "*") for folder in folders} + + return will_remove, will_skip + + +class StashedUninstallPathSet: + """A set of file rename operations to stash files while + tentatively uninstalling them.""" + + def __init__(self) -> None: + # Mapping from source file root to [Adjacent]TempDirectory + # for files under that directory. + self._save_dirs: Dict[str, TempDirectory] = {} + # (old path, new path) tuples for each move that may need + # to be undone. + self._moves: List[Tuple[str, str]] = [] + + def _get_directory_stash(self, path: str) -> str: + """Stashes a directory. + + Directories are stashed adjacent to their original location if + possible, or else moved/copied into the user's temp dir.""" + + try: + save_dir: TempDirectory = AdjacentTempDirectory(path) + except OSError: + save_dir = TempDirectory(kind="uninstall") + self._save_dirs[os.path.normcase(path)] = save_dir + + return save_dir.path + + def _get_file_stash(self, path: str) -> str: + """Stashes a file. + + If no root has been provided, one will be created for the directory + in the user's temp directory.""" + path = os.path.normcase(path) + head, old_head = os.path.dirname(path), None + save_dir = None + + while head != old_head: + try: + save_dir = self._save_dirs[head] + break + except KeyError: + pass + head, old_head = os.path.dirname(head), head + else: + # Did not find any suitable root + head = os.path.dirname(path) + save_dir = TempDirectory(kind="uninstall") + self._save_dirs[head] = save_dir + + relpath = os.path.relpath(path, head) + if relpath and relpath != os.path.curdir: + return os.path.join(save_dir.path, relpath) + return save_dir.path + + def stash(self, path: str) -> str: + """Stashes the directory or file and returns its new location. + Handle symlinks as files to avoid modifying the symlink targets. + """ + path_is_dir = os.path.isdir(path) and not os.path.islink(path) + if path_is_dir: + new_path = self._get_directory_stash(path) + else: + new_path = self._get_file_stash(path) + + self._moves.append((path, new_path)) + if path_is_dir and os.path.isdir(new_path): + # If we're moving a directory, we need to + # remove the destination first or else it will be + # moved to inside the existing directory. + # We just created new_path ourselves, so it will + # be removable. + os.rmdir(new_path) + renames(path, new_path) + return new_path + + def commit(self) -> None: + """Commits the uninstall by removing stashed files.""" + for save_dir in self._save_dirs.values(): + save_dir.cleanup() + self._moves = [] + self._save_dirs = {} + + def rollback(self) -> None: + """Undoes the uninstall by moving stashed files back.""" + for p in self._moves: + logger.info("Moving to %s\n from %s", *p) + + for new_path, path in self._moves: + try: + logger.debug("Replacing %s from %s", new_path, path) + if os.path.isfile(new_path) or os.path.islink(new_path): + os.unlink(new_path) + elif os.path.isdir(new_path): + rmtree(new_path) + renames(path, new_path) + except OSError as ex: + logger.error("Failed to restore %s", new_path) + logger.debug("Exception: %s", ex) + + self.commit() + + @property + def can_rollback(self) -> bool: + return bool(self._moves) + + +class UninstallPathSet: + """A set of file paths to be removed in the uninstallation of a + requirement.""" + + def __init__(self, dist: BaseDistribution) -> None: + self._paths: Set[str] = set() + self._refuse: Set[str] = set() + self._pth: Dict[str, UninstallPthEntries] = {} + self._dist = dist + self._moved_paths = StashedUninstallPathSet() + # Create local cache of normalize_path results. Creating an UninstallPathSet + # can result in hundreds/thousands of redundant calls to normalize_path with + # the same args, which hurts performance. + self._normalize_path_cached = functools.lru_cache()(normalize_path) + + def _permitted(self, path: str) -> bool: + """ + Return True if the given path is one we are permitted to + remove/modify, False otherwise. + + """ + # aka is_local, but caching normalized sys.prefix + if not running_under_virtualenv(): + return True + return path.startswith(self._normalize_path_cached(sys.prefix)) + + def add(self, path: str) -> None: + head, tail = os.path.split(path) + + # we normalize the head to resolve parent directory symlinks, but not + # the tail, since we only want to uninstall symlinks, not their targets + path = os.path.join(self._normalize_path_cached(head), os.path.normcase(tail)) + + if not os.path.exists(path): + return + if self._permitted(path): + self._paths.add(path) + else: + self._refuse.add(path) + + # __pycache__ files can show up after 'installed-files.txt' is created, + # due to imports + if os.path.splitext(path)[1] == ".py": + self.add(cache_from_source(path)) + + def add_pth(self, pth_file: str, entry: str) -> None: + pth_file = self._normalize_path_cached(pth_file) + if self._permitted(pth_file): + if pth_file not in self._pth: + self._pth[pth_file] = UninstallPthEntries(pth_file) + self._pth[pth_file].add(entry) + else: + self._refuse.add(pth_file) + + def remove(self, auto_confirm: bool = False, verbose: bool = False) -> None: + """Remove paths in ``self._paths`` with confirmation (unless + ``auto_confirm`` is True).""" + + if not self._paths: + logger.info( + "Can't uninstall '%s'. No files were found to uninstall.", + self._dist.raw_name, + ) + return + + dist_name_version = f"{self._dist.raw_name}-{self._dist.version}" + logger.info("Uninstalling %s:", dist_name_version) + + with indent_log(): + if auto_confirm or self._allowed_to_proceed(verbose): + moved = self._moved_paths + + for_rename = compress_for_rename(self._paths) + + for path in sorted(compact(for_rename)): + moved.stash(path) + logger.verbose("Removing file or directory %s", path) + + for pth in self._pth.values(): + pth.remove() + + logger.info("Successfully uninstalled %s", dist_name_version) + + def _allowed_to_proceed(self, verbose: bool) -> bool: + """Display which files would be deleted and prompt for confirmation""" + + def _display(msg: str, paths: Iterable[str]) -> None: + if not paths: + return + + logger.info(msg) + with indent_log(): + for path in sorted(compact(paths)): + logger.info(path) + + if not verbose: + will_remove, will_skip = compress_for_output_listing(self._paths) + else: + # In verbose mode, display all the files that are going to be + # deleted. + will_remove = set(self._paths) + will_skip = set() + + _display("Would remove:", will_remove) + _display("Would not remove (might be manually added):", will_skip) + _display("Would not remove (outside of prefix):", self._refuse) + if verbose: + _display("Will actually move:", compress_for_rename(self._paths)) + + return ask("Proceed (Y/n)? ", ("y", "n", "")) != "n" + + def rollback(self) -> None: + """Rollback the changes previously made by remove().""" + if not self._moved_paths.can_rollback: + logger.error( + "Can't roll back %s; was not uninstalled", + self._dist.raw_name, + ) + return + logger.info("Rolling back uninstall of %s", self._dist.raw_name) + self._moved_paths.rollback() + for pth in self._pth.values(): + pth.rollback() + + def commit(self) -> None: + """Remove temporary save dir: rollback will no longer be possible.""" + self._moved_paths.commit() + + @classmethod + def from_dist(cls, dist: BaseDistribution) -> "UninstallPathSet": + dist_location = dist.location + info_location = dist.info_location + if dist_location is None: + logger.info( + "Not uninstalling %s since it is not installed", + dist.canonical_name, + ) + return cls(dist) + + normalized_dist_location = normalize_path(dist_location) + if not dist.local: + logger.info( + "Not uninstalling %s at %s, outside environment %s", + dist.canonical_name, + normalized_dist_location, + sys.prefix, + ) + return cls(dist) + + if normalized_dist_location in { + p + for p in {sysconfig.get_path("stdlib"), sysconfig.get_path("platstdlib")} + if p + }: + logger.info( + "Not uninstalling %s at %s, as it is in the standard library.", + dist.canonical_name, + normalized_dist_location, + ) + return cls(dist) + + paths_to_remove = cls(dist) + develop_egg_link = egg_link_path_from_location(dist.raw_name) + + # Distribution is installed with metadata in a "flat" .egg-info + # directory. This means it is not a modern .dist-info installation, an + # egg, or legacy editable. + setuptools_flat_installation = ( + dist.installed_with_setuptools_egg_info + and info_location is not None + and os.path.exists(info_location) + # If dist is editable and the location points to a ``.egg-info``, + # we are in fact in the legacy editable case. + and not info_location.endswith(f"{dist.setuptools_filename}.egg-info") + ) + + # Uninstall cases order do matter as in the case of 2 installs of the + # same package, pip needs to uninstall the currently detected version + if setuptools_flat_installation: + if info_location is not None: + paths_to_remove.add(info_location) + installed_files = dist.iter_declared_entries() + if installed_files is not None: + for installed_file in installed_files: + paths_to_remove.add(os.path.join(dist_location, installed_file)) + # FIXME: need a test for this elif block + # occurs with --single-version-externally-managed/--record outside + # of pip + elif dist.is_file("top_level.txt"): + try: + namespace_packages = dist.read_text("namespace_packages.txt") + except FileNotFoundError: + namespaces = [] + else: + namespaces = namespace_packages.splitlines(keepends=False) + for top_level_pkg in [ + p + for p in dist.read_text("top_level.txt").splitlines() + if p and p not in namespaces + ]: + path = os.path.join(dist_location, top_level_pkg) + paths_to_remove.add(path) + paths_to_remove.add(f"{path}.py") + paths_to_remove.add(f"{path}.pyc") + paths_to_remove.add(f"{path}.pyo") + + elif dist.installed_by_distutils: + raise UninstallationError( + "Cannot uninstall {!r}. It is a distutils installed project " + "and thus we cannot accurately determine which files belong " + "to it which would lead to only a partial uninstall.".format( + dist.raw_name, + ) + ) + + elif dist.installed_as_egg: + # package installed by easy_install + # We cannot match on dist.egg_name because it can slightly vary + # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg + paths_to_remove.add(dist_location) + easy_install_egg = os.path.split(dist_location)[1] + easy_install_pth = os.path.join( + os.path.dirname(dist_location), + "easy-install.pth", + ) + paths_to_remove.add_pth(easy_install_pth, "./" + easy_install_egg) + + elif dist.installed_with_dist_info: + for path in uninstallation_paths(dist): + paths_to_remove.add(path) + + elif develop_egg_link: + # PEP 660 modern editable is handled in the ``.dist-info`` case + # above, so this only covers the setuptools-style editable. + with open(develop_egg_link) as fh: + link_pointer = os.path.normcase(fh.readline().strip()) + normalized_link_pointer = paths_to_remove._normalize_path_cached( + link_pointer + ) + assert os.path.samefile( + normalized_link_pointer, normalized_dist_location + ), ( + f"Egg-link {develop_egg_link} (to {link_pointer}) does not match " + f"installed location of {dist.raw_name} (at {dist_location})" + ) + paths_to_remove.add(develop_egg_link) + easy_install_pth = os.path.join( + os.path.dirname(develop_egg_link), "easy-install.pth" + ) + paths_to_remove.add_pth(easy_install_pth, dist_location) + + else: + logger.debug( + "Not sure how to uninstall: %s - Check: %s", + dist, + dist_location, + ) + + if dist.in_usersite: + bin_dir = get_bin_user() + else: + bin_dir = get_bin_prefix() + + # find distutils scripts= scripts + try: + for script in dist.iter_distutils_script_names(): + paths_to_remove.add(os.path.join(bin_dir, script)) + if WINDOWS: + paths_to_remove.add(os.path.join(bin_dir, f"{script}.bat")) + except (FileNotFoundError, NotADirectoryError): + pass + + # find console_scripts and gui_scripts + def iter_scripts_to_remove( + dist: BaseDistribution, + bin_dir: str, + ) -> Generator[str, None, None]: + for entry_point in dist.iter_entry_points(): + if entry_point.group == "console_scripts": + yield from _script_names(bin_dir, entry_point.name, False) + elif entry_point.group == "gui_scripts": + yield from _script_names(bin_dir, entry_point.name, True) + + for s in iter_scripts_to_remove(dist, bin_dir): + paths_to_remove.add(s) + + return paths_to_remove + + +class UninstallPthEntries: + def __init__(self, pth_file: str) -> None: + self.file = pth_file + self.entries: Set[str] = set() + self._saved_lines: Optional[List[bytes]] = None + + def add(self, entry: str) -> None: + entry = os.path.normcase(entry) + # On Windows, os.path.normcase converts the entry to use + # backslashes. This is correct for entries that describe absolute + # paths outside of site-packages, but all the others use forward + # slashes. + # os.path.splitdrive is used instead of os.path.isabs because isabs + # treats non-absolute paths with drive letter markings like c:foo\bar + # as absolute paths. It also does not recognize UNC paths if they don't + # have more than "\\sever\share". Valid examples: "\\server\share\" or + # "\\server\share\folder". + if WINDOWS and not os.path.splitdrive(entry)[0]: + entry = entry.replace("\\", "/") + self.entries.add(entry) + + def remove(self) -> None: + logger.verbose("Removing pth entries from %s:", self.file) + + # If the file doesn't exist, log a warning and return + if not os.path.isfile(self.file): + logger.warning("Cannot remove entries from nonexistent file %s", self.file) + return + with open(self.file, "rb") as fh: + # windows uses '\r\n' with py3k, but uses '\n' with py2.x + lines = fh.readlines() + self._saved_lines = lines + if any(b"\r\n" in line for line in lines): + endline = "\r\n" + else: + endline = "\n" + # handle missing trailing newline + if lines and not lines[-1].endswith(endline.encode("utf-8")): + lines[-1] = lines[-1] + endline.encode("utf-8") + for entry in self.entries: + try: + logger.verbose("Removing entry: %s", entry) + lines.remove((entry + endline).encode("utf-8")) + except ValueError: + pass + with open(self.file, "wb") as fh: + fh.writelines(lines) + + def rollback(self) -> bool: + if self._saved_lines is None: + logger.error("Cannot roll back changes to %s, none were made", self.file) + return False + logger.debug("Rolling %s back to previous state", self.file) + with open(self.file, "wb") as fh: + fh.writelines(self._saved_lines) + return True diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..13487b3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc new file mode 100644 index 0000000..466d1b9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/base.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/base.py new file mode 100644 index 0000000..42dade1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/base.py @@ -0,0 +1,20 @@ +from typing import Callable, List, Optional + +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_set import RequirementSet + +InstallRequirementProvider = Callable[ + [str, Optional[InstallRequirement]], InstallRequirement +] + + +class BaseResolver: + def resolve( + self, root_reqs: List[InstallRequirement], check_supported_wheels: bool + ) -> RequirementSet: + raise NotImplementedError() + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + raise NotImplementedError() diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..65c1e66 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc new file mode 100644 index 0000000..1fb62f5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py new file mode 100644 index 0000000..5ddb848 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py @@ -0,0 +1,598 @@ +"""Dependency Resolution + +The dependency resolution in pip is performed as follows: + +for top-level requirements: + a. only one spec allowed per project, regardless of conflicts or not. + otherwise a "double requirement" exception is raised + b. they override sub-dependency requirements. +for sub-dependencies + a. "first found, wins" (where the order is breadth first) +""" + +# The following comment should be removed at some point in the future. +# mypy: strict-optional=False + +import logging +import sys +from collections import defaultdict +from itertools import chain +from typing import DefaultDict, Iterable, List, Optional, Set, Tuple + +from pip._vendor.packaging import specifiers +from pip._vendor.packaging.requirements import Requirement + +from pip._internal.cache import WheelCache +from pip._internal.exceptions import ( + BestVersionAlreadyInstalled, + DistributionNotFound, + HashError, + HashErrors, + InstallationError, + NoneMetadataError, + UnsupportedPythonVersion, +) +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.req_install import ( + InstallRequirement, + check_invalid_constraint_type, +) +from pip._internal.req.req_set import RequirementSet +from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider +from pip._internal.utils import compatibility_tags +from pip._internal.utils.compatibility_tags import get_supported +from pip._internal.utils.direct_url_helpers import direct_url_from_link +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import normalize_version_info +from pip._internal.utils.packaging import check_requires_python + +logger = logging.getLogger(__name__) + +DiscoveredDependencies = DefaultDict[str, List[InstallRequirement]] + + +def _check_dist_requires_python( + dist: BaseDistribution, + version_info: Tuple[int, int, int], + ignore_requires_python: bool = False, +) -> None: + """ + Check whether the given Python version is compatible with a distribution's + "Requires-Python" value. + + :param version_info: A 3-tuple of ints representing the Python + major-minor-micro version to check. + :param ignore_requires_python: Whether to ignore the "Requires-Python" + value if the given Python version isn't compatible. + + :raises UnsupportedPythonVersion: When the given Python version isn't + compatible. + """ + # This idiosyncratically converts the SpecifierSet to str and let + # check_requires_python then parse it again into SpecifierSet. But this + # is the legacy resolver so I'm just not going to bother refactoring. + try: + requires_python = str(dist.requires_python) + except FileNotFoundError as e: + raise NoneMetadataError(dist, str(e)) + try: + is_compatible = check_requires_python( + requires_python, + version_info=version_info, + ) + except specifiers.InvalidSpecifier as exc: + logger.warning( + "Package %r has an invalid Requires-Python: %s", dist.raw_name, exc + ) + return + + if is_compatible: + return + + version = ".".join(map(str, version_info)) + if ignore_requires_python: + logger.debug( + "Ignoring failed Requires-Python check for package %r: %s not in %r", + dist.raw_name, + version, + requires_python, + ) + return + + raise UnsupportedPythonVersion( + "Package {!r} requires a different Python: {} not in {!r}".format( + dist.raw_name, version, requires_python + ) + ) + + +class Resolver(BaseResolver): + """Resolves which packages need to be installed/uninstalled to perform \ + the requested operation without breaking the requirements of any package. + """ + + _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} + + def __init__( + self, + preparer: RequirementPreparer, + finder: PackageFinder, + wheel_cache: Optional[WheelCache], + make_install_req: InstallRequirementProvider, + use_user_site: bool, + ignore_dependencies: bool, + ignore_installed: bool, + ignore_requires_python: bool, + force_reinstall: bool, + upgrade_strategy: str, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> None: + super().__init__() + assert upgrade_strategy in self._allowed_strategies + + if py_version_info is None: + py_version_info = sys.version_info[:3] + else: + py_version_info = normalize_version_info(py_version_info) + + self._py_version_info = py_version_info + + self.preparer = preparer + self.finder = finder + self.wheel_cache = wheel_cache + + self.upgrade_strategy = upgrade_strategy + self.force_reinstall = force_reinstall + self.ignore_dependencies = ignore_dependencies + self.ignore_installed = ignore_installed + self.ignore_requires_python = ignore_requires_python + self.use_user_site = use_user_site + self._make_install_req = make_install_req + + self._discovered_dependencies: DiscoveredDependencies = defaultdict(list) + + def resolve( + self, root_reqs: List[InstallRequirement], check_supported_wheels: bool + ) -> RequirementSet: + """Resolve what operations need to be done + + As a side-effect of this method, the packages (and their dependencies) + are downloaded, unpacked and prepared for installation. This + preparation is done by ``pip.operations.prepare``. + + Once PyPI has static dependency metadata available, it would be + possible to move the preparation to become a step separated from + dependency resolution. + """ + requirement_set = RequirementSet(check_supported_wheels=check_supported_wheels) + for req in root_reqs: + if req.constraint: + check_invalid_constraint_type(req) + self._add_requirement_to_set(requirement_set, req) + + # Actually prepare the files, and collect any exceptions. Most hash + # exceptions cannot be checked ahead of time, because + # _populate_link() needs to be called before we can make decisions + # based on link type. + discovered_reqs: List[InstallRequirement] = [] + hash_errors = HashErrors() + for req in chain(requirement_set.all_requirements, discovered_reqs): + try: + discovered_reqs.extend(self._resolve_one(requirement_set, req)) + except HashError as exc: + exc.req = req + hash_errors.append(exc) + + if hash_errors: + raise hash_errors + + return requirement_set + + def _add_requirement_to_set( + self, + requirement_set: RequirementSet, + install_req: InstallRequirement, + parent_req_name: Optional[str] = None, + extras_requested: Optional[Iterable[str]] = None, + ) -> Tuple[List[InstallRequirement], Optional[InstallRequirement]]: + """Add install_req as a requirement to install. + + :param parent_req_name: The name of the requirement that needed this + added. The name is used because when multiple unnamed requirements + resolve to the same name, we could otherwise end up with dependency + links that point outside the Requirements set. parent_req must + already be added. Note that None implies that this is a user + supplied requirement, vs an inferred one. + :param extras_requested: an iterable of extras used to evaluate the + environment markers. + :return: Additional requirements to scan. That is either [] if + the requirement is not applicable, or [install_req] if the + requirement is applicable and has just been added. + """ + # If the markers do not match, ignore this requirement. + if not install_req.match_markers(extras_requested): + logger.info( + "Ignoring %s: markers '%s' don't match your environment", + install_req.name, + install_req.markers, + ) + return [], None + + # If the wheel is not supported, raise an error. + # Should check this after filtering out based on environment markers to + # allow specifying different wheels based on the environment/OS, in a + # single requirements file. + if install_req.link and install_req.link.is_wheel: + wheel = Wheel(install_req.link.filename) + tags = compatibility_tags.get_supported() + if requirement_set.check_supported_wheels and not wheel.supported(tags): + raise InstallationError( + f"{wheel.filename} is not a supported wheel on this platform." + ) + + # This next bit is really a sanity check. + assert ( + not install_req.user_supplied or parent_req_name is None + ), "a user supplied req shouldn't have a parent" + + # Unnamed requirements are scanned again and the requirement won't be + # added as a dependency until after scanning. + if not install_req.name: + requirement_set.add_unnamed_requirement(install_req) + return [install_req], None + + try: + existing_req: Optional[ + InstallRequirement + ] = requirement_set.get_requirement(install_req.name) + except KeyError: + existing_req = None + + has_conflicting_requirement = ( + parent_req_name is None + and existing_req + and not existing_req.constraint + and existing_req.extras == install_req.extras + and existing_req.req + and install_req.req + and existing_req.req.specifier != install_req.req.specifier + ) + if has_conflicting_requirement: + raise InstallationError( + "Double requirement given: {} (already in {}, name={!r})".format( + install_req, existing_req, install_req.name + ) + ) + + # When no existing requirement exists, add the requirement as a + # dependency and it will be scanned again after. + if not existing_req: + requirement_set.add_named_requirement(install_req) + # We'd want to rescan this requirement later + return [install_req], install_req + + # Assume there's no need to scan, and that we've already + # encountered this for scanning. + if install_req.constraint or not existing_req.constraint: + return [], existing_req + + does_not_satisfy_constraint = install_req.link and not ( + existing_req.link and install_req.link.path == existing_req.link.path + ) + if does_not_satisfy_constraint: + raise InstallationError( + f"Could not satisfy constraints for '{install_req.name}': " + "installation from path or url cannot be " + "constrained to a version" + ) + # If we're now installing a constraint, mark the existing + # object for real installation. + existing_req.constraint = False + # If we're now installing a user supplied requirement, + # mark the existing object as such. + if install_req.user_supplied: + existing_req.user_supplied = True + existing_req.extras = tuple( + sorted(set(existing_req.extras) | set(install_req.extras)) + ) + logger.debug( + "Setting %s extras to: %s", + existing_req, + existing_req.extras, + ) + # Return the existing requirement for addition to the parent and + # scanning again. + return [existing_req], existing_req + + def _is_upgrade_allowed(self, req: InstallRequirement) -> bool: + if self.upgrade_strategy == "to-satisfy-only": + return False + elif self.upgrade_strategy == "eager": + return True + else: + assert self.upgrade_strategy == "only-if-needed" + return req.user_supplied or req.constraint + + def _set_req_to_reinstall(self, req: InstallRequirement) -> None: + """ + Set a requirement to be installed. + """ + # Don't uninstall the conflict if doing a user install and the + # conflict is not a user install. + if not self.use_user_site or req.satisfied_by.in_usersite: + req.should_reinstall = True + req.satisfied_by = None + + def _check_skip_installed( + self, req_to_install: InstallRequirement + ) -> Optional[str]: + """Check if req_to_install should be skipped. + + This will check if the req is installed, and whether we should upgrade + or reinstall it, taking into account all the relevant user options. + + After calling this req_to_install will only have satisfied_by set to + None if the req_to_install is to be upgraded/reinstalled etc. Any + other value will be a dist recording the current thing installed that + satisfies the requirement. + + Note that for vcs urls and the like we can't assess skipping in this + routine - we simply identify that we need to pull the thing down, + then later on it is pulled down and introspected to assess upgrade/ + reinstalls etc. + + :return: A text reason for why it was skipped, or None. + """ + if self.ignore_installed: + return None + + req_to_install.check_if_exists(self.use_user_site) + if not req_to_install.satisfied_by: + return None + + if self.force_reinstall: + self._set_req_to_reinstall(req_to_install) + return None + + if not self._is_upgrade_allowed(req_to_install): + if self.upgrade_strategy == "only-if-needed": + return "already satisfied, skipping upgrade" + return "already satisfied" + + # Check for the possibility of an upgrade. For link-based + # requirements we have to pull the tree down and inspect to assess + # the version #, so it's handled way down. + if not req_to_install.link: + try: + self.finder.find_requirement(req_to_install, upgrade=True) + except BestVersionAlreadyInstalled: + # Then the best version is installed. + return "already up-to-date" + except DistributionNotFound: + # No distribution found, so we squash the error. It will + # be raised later when we re-try later to do the install. + # Why don't we just raise here? + pass + + self._set_req_to_reinstall(req_to_install) + return None + + def _find_requirement_link(self, req: InstallRequirement) -> Optional[Link]: + upgrade = self._is_upgrade_allowed(req) + best_candidate = self.finder.find_requirement(req, upgrade) + if not best_candidate: + return None + + # Log a warning per PEP 592 if necessary before returning. + link = best_candidate.link + if link.is_yanked: + reason = link.yanked_reason or "" + msg = ( + # Mark this as a unicode string to prevent + # "UnicodeEncodeError: 'ascii' codec can't encode character" + # in Python 2 when the reason contains non-ascii characters. + "The candidate selected for download or install is a " + f"yanked version: {best_candidate}\n" + f"Reason for being yanked: {reason}" + ) + logger.warning(msg) + + return link + + def _populate_link(self, req: InstallRequirement) -> None: + """Ensure that if a link can be found for this, that it is found. + + Note that req.link may still be None - if the requirement is already + installed and not needed to be upgraded based on the return value of + _is_upgrade_allowed(). + + If preparer.require_hashes is True, don't use the wheel cache, because + cached wheels, always built locally, have different hashes than the + files downloaded from the index server and thus throw false hash + mismatches. Furthermore, cached wheels at present have undeterministic + contents due to file modification times. + """ + if req.link is None: + req.link = self._find_requirement_link(req) + + if self.wheel_cache is None or self.preparer.require_hashes: + return + cache_entry = self.wheel_cache.get_cache_entry( + link=req.link, + package_name=req.name, + supported_tags=get_supported(), + ) + if cache_entry is not None: + logger.debug("Using cached wheel link: %s", cache_entry.link) + if req.link is req.original_link and cache_entry.persistent: + req.cached_wheel_source_link = req.link + if cache_entry.origin is not None: + req.download_info = cache_entry.origin + else: + # Legacy cache entry that does not have origin.json. + # download_info may miss the archive_info.hashes field. + req.download_info = direct_url_from_link( + req.link, link_is_in_wheel_cache=cache_entry.persistent + ) + req.link = cache_entry.link + + def _get_dist_for(self, req: InstallRequirement) -> BaseDistribution: + """Takes a InstallRequirement and returns a single AbstractDist \ + representing a prepared variant of the same. + """ + if req.editable: + return self.preparer.prepare_editable_requirement(req) + + # satisfied_by is only evaluated by calling _check_skip_installed, + # so it must be None here. + assert req.satisfied_by is None + skip_reason = self._check_skip_installed(req) + + if req.satisfied_by: + return self.preparer.prepare_installed_requirement(req, skip_reason) + + # We eagerly populate the link, since that's our "legacy" behavior. + self._populate_link(req) + dist = self.preparer.prepare_linked_requirement(req) + + # NOTE + # The following portion is for determining if a certain package is + # going to be re-installed/upgraded or not and reporting to the user. + # This should probably get cleaned up in a future refactor. + + # req.req is only avail after unpack for URL + # pkgs repeat check_if_exists to uninstall-on-upgrade + # (#14) + if not self.ignore_installed: + req.check_if_exists(self.use_user_site) + + if req.satisfied_by: + should_modify = ( + self.upgrade_strategy != "to-satisfy-only" + or self.force_reinstall + or self.ignore_installed + or req.link.scheme == "file" + ) + if should_modify: + self._set_req_to_reinstall(req) + else: + logger.info( + "Requirement already satisfied (use --upgrade to upgrade): %s", + req, + ) + return dist + + def _resolve_one( + self, + requirement_set: RequirementSet, + req_to_install: InstallRequirement, + ) -> List[InstallRequirement]: + """Prepare a single requirements file. + + :return: A list of additional InstallRequirements to also install. + """ + # Tell user what we are doing for this requirement: + # obtain (editable), skipping, processing (local url), collecting + # (remote url or package name) + if req_to_install.constraint or req_to_install.prepared: + return [] + + req_to_install.prepared = True + + # Parse and return dependencies + dist = self._get_dist_for(req_to_install) + # This will raise UnsupportedPythonVersion if the given Python + # version isn't compatible with the distribution's Requires-Python. + _check_dist_requires_python( + dist, + version_info=self._py_version_info, + ignore_requires_python=self.ignore_requires_python, + ) + + more_reqs: List[InstallRequirement] = [] + + def add_req(subreq: Requirement, extras_requested: Iterable[str]) -> None: + # This idiosyncratically converts the Requirement to str and let + # make_install_req then parse it again into Requirement. But this is + # the legacy resolver so I'm just not going to bother refactoring. + sub_install_req = self._make_install_req(str(subreq), req_to_install) + parent_req_name = req_to_install.name + to_scan_again, add_to_parent = self._add_requirement_to_set( + requirement_set, + sub_install_req, + parent_req_name=parent_req_name, + extras_requested=extras_requested, + ) + if parent_req_name and add_to_parent: + self._discovered_dependencies[parent_req_name].append(add_to_parent) + more_reqs.extend(to_scan_again) + + with indent_log(): + # We add req_to_install before its dependencies, so that we + # can refer to it when adding dependencies. + if not requirement_set.has_requirement(req_to_install.name): + # 'unnamed' requirements will get added here + # 'unnamed' requirements can only come from being directly + # provided by the user. + assert req_to_install.user_supplied + self._add_requirement_to_set( + requirement_set, req_to_install, parent_req_name=None + ) + + if not self.ignore_dependencies: + if req_to_install.extras: + logger.debug( + "Installing extra requirements: %r", + ",".join(req_to_install.extras), + ) + missing_requested = sorted( + set(req_to_install.extras) - set(dist.iter_provided_extras()) + ) + for missing in missing_requested: + logger.warning( + "%s %s does not provide the extra '%s'", + dist.raw_name, + dist.version, + missing, + ) + + available_requested = sorted( + set(dist.iter_provided_extras()) & set(req_to_install.extras) + ) + for subreq in dist.iter_dependencies(available_requested): + add_req(subreq, extras_requested=available_requested) + + return more_reqs + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + """Create the installation order. + + The installation order is topological - requirements are installed + before the requiring thing. We break cycles at an arbitrary point, + and make no other guarantees. + """ + # The current implementation, which we may change at any point + # installs the user specified things in the order given, except when + # dependencies must come earlier to achieve topological order. + order = [] + ordered_reqs: Set[InstallRequirement] = set() + + def schedule(req: InstallRequirement) -> None: + if req.satisfied_by or req in ordered_reqs: + return + if req.constraint: + return + ordered_reqs.add(req) + for dep in self._discovered_dependencies[req.name]: + schedule(dep) + order.append(req) + + for install_req in req_set.requirements.values(): + schedule(install_req) + return order diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..144306f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc new file mode 100644 index 0000000..95edd0a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc new file mode 100644 index 0000000..18a981c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc new file mode 100644 index 0000000..b68e77f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc new file mode 100644 index 0000000..34a7494 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc new file mode 100644 index 0000000..ff4d76c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc new file mode 100644 index 0000000..7e9ae45 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc new file mode 100644 index 0000000..78d2368 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc new file mode 100644 index 0000000..640bb20 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py new file mode 100644 index 0000000..9c0ef5c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py @@ -0,0 +1,141 @@ +from typing import FrozenSet, Iterable, Optional, Tuple, Union + +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName +from pip._vendor.packaging.version import LegacyVersion, Version + +from pip._internal.models.link import Link, links_equivalent +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.hashes import Hashes + +CandidateLookup = Tuple[Optional["Candidate"], Optional[InstallRequirement]] +CandidateVersion = Union[LegacyVersion, Version] + + +def format_name(project: NormalizedName, extras: FrozenSet[NormalizedName]) -> str: + if not extras: + return project + extras_expr = ",".join(sorted(extras)) + return f"{project}[{extras_expr}]" + + +class Constraint: + def __init__( + self, specifier: SpecifierSet, hashes: Hashes, links: FrozenSet[Link] + ) -> None: + self.specifier = specifier + self.hashes = hashes + self.links = links + + @classmethod + def empty(cls) -> "Constraint": + return Constraint(SpecifierSet(), Hashes(), frozenset()) + + @classmethod + def from_ireq(cls, ireq: InstallRequirement) -> "Constraint": + links = frozenset([ireq.link]) if ireq.link else frozenset() + return Constraint(ireq.specifier, ireq.hashes(trust_internet=False), links) + + def __bool__(self) -> bool: + return bool(self.specifier) or bool(self.hashes) or bool(self.links) + + def __and__(self, other: InstallRequirement) -> "Constraint": + if not isinstance(other, InstallRequirement): + return NotImplemented + specifier = self.specifier & other.specifier + hashes = self.hashes & other.hashes(trust_internet=False) + links = self.links + if other.link: + links = links.union([other.link]) + return Constraint(specifier, hashes, links) + + def is_satisfied_by(self, candidate: "Candidate") -> bool: + # Reject if there are any mismatched URL constraints on this package. + if self.links and not all(_match_link(link, candidate) for link in self.links): + return False + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + return self.specifier.contains(candidate.version, prereleases=True) + + +class Requirement: + @property + def project_name(self) -> NormalizedName: + """The "project name" of a requirement. + + This is different from ``name`` if this requirement contains extras, + in which case ``name`` would contain the ``[...]`` part, while this + refers to the name of the project. + """ + raise NotImplementedError("Subclass should override") + + @property + def name(self) -> str: + """The name identifying this requirement in the resolver. + + This is different from ``project_name`` if this requirement contains + extras, where ``project_name`` would not contain the ``[...]`` part. + """ + raise NotImplementedError("Subclass should override") + + def is_satisfied_by(self, candidate: "Candidate") -> bool: + return False + + def get_candidate_lookup(self) -> CandidateLookup: + raise NotImplementedError("Subclass should override") + + def format_for_error(self) -> str: + raise NotImplementedError("Subclass should override") + + +def _match_link(link: Link, candidate: "Candidate") -> bool: + if candidate.source_link: + return links_equivalent(link, candidate.source_link) + return False + + +class Candidate: + @property + def project_name(self) -> NormalizedName: + """The "project name" of the candidate. + + This is different from ``name`` if this candidate contains extras, + in which case ``name`` would contain the ``[...]`` part, while this + refers to the name of the project. + """ + raise NotImplementedError("Override in subclass") + + @property + def name(self) -> str: + """The name identifying this candidate in the resolver. + + This is different from ``project_name`` if this candidate contains + extras, where ``project_name`` would not contain the ``[...]`` part. + """ + raise NotImplementedError("Override in subclass") + + @property + def version(self) -> CandidateVersion: + raise NotImplementedError("Override in subclass") + + @property + def is_installed(self) -> bool: + raise NotImplementedError("Override in subclass") + + @property + def is_editable(self) -> bool: + raise NotImplementedError("Override in subclass") + + @property + def source_link(self) -> Optional[Link]: + raise NotImplementedError("Override in subclass") + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + raise NotImplementedError("Override in subclass") + + def get_install_requirement(self) -> Optional[InstallRequirement]: + raise NotImplementedError("Override in subclass") + + def format_for_error(self) -> str: + raise NotImplementedError("Subclass should override") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py new file mode 100644 index 0000000..4125cda --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py @@ -0,0 +1,597 @@ +import logging +import sys +from typing import TYPE_CHECKING, Any, FrozenSet, Iterable, Optional, Tuple, Union, cast + +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.packaging.version import Version + +from pip._internal.exceptions import ( + HashError, + InstallationSubprocessError, + MetadataInconsistent, +) +from pip._internal.metadata import BaseDistribution +from pip._internal.models.link import Link, links_equivalent +from pip._internal.models.wheel import Wheel +from pip._internal.req.constructors import ( + install_req_from_editable, + install_req_from_line, +) +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.direct_url_helpers import direct_url_from_link +from pip._internal.utils.misc import normalize_version_info + +from .base import Candidate, CandidateVersion, Requirement, format_name + +if TYPE_CHECKING: + from .factory import Factory + +logger = logging.getLogger(__name__) + +BaseCandidate = Union[ + "AlreadyInstalledCandidate", + "EditableCandidate", + "LinkCandidate", +] + +# Avoid conflicting with the PyPI package "Python". +REQUIRES_PYTHON_IDENTIFIER = cast(NormalizedName, "") + + +def as_base_candidate(candidate: Candidate) -> Optional[BaseCandidate]: + """The runtime version of BaseCandidate.""" + base_candidate_classes = ( + AlreadyInstalledCandidate, + EditableCandidate, + LinkCandidate, + ) + if isinstance(candidate, base_candidate_classes): + return candidate + return None + + +def make_install_req_from_link( + link: Link, template: InstallRequirement +) -> InstallRequirement: + assert not template.editable, "template is editable" + if template.req: + line = str(template.req) + else: + line = link.url + ireq = install_req_from_line( + line, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + global_options=template.global_options, + hash_options=template.hash_options, + config_settings=template.config_settings, + ) + ireq.original_link = template.original_link + ireq.link = link + ireq.extras = template.extras + return ireq + + +def make_install_req_from_editable( + link: Link, template: InstallRequirement +) -> InstallRequirement: + assert template.editable, "template not editable" + ireq = install_req_from_editable( + link.url, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + permit_editable_wheels=template.permit_editable_wheels, + global_options=template.global_options, + hash_options=template.hash_options, + config_settings=template.config_settings, + ) + ireq.extras = template.extras + return ireq + + +def _make_install_req_from_dist( + dist: BaseDistribution, template: InstallRequirement +) -> InstallRequirement: + if template.req: + line = str(template.req) + elif template.link: + line = f"{dist.canonical_name} @ {template.link.url}" + else: + line = f"{dist.canonical_name}=={dist.version}" + ireq = install_req_from_line( + line, + user_supplied=template.user_supplied, + comes_from=template.comes_from, + use_pep517=template.use_pep517, + isolated=template.isolated, + constraint=template.constraint, + global_options=template.global_options, + hash_options=template.hash_options, + config_settings=template.config_settings, + ) + ireq.satisfied_by = dist + return ireq + + +class _InstallRequirementBackedCandidate(Candidate): + """A candidate backed by an ``InstallRequirement``. + + This represents a package request with the target not being already + in the environment, and needs to be fetched and installed. The backing + ``InstallRequirement`` is responsible for most of the leg work; this + class exposes appropriate information to the resolver. + + :param link: The link passed to the ``InstallRequirement``. The backing + ``InstallRequirement`` will use this link to fetch the distribution. + :param source_link: The link this candidate "originates" from. This is + different from ``link`` when the link is found in the wheel cache. + ``link`` would point to the wheel cache, while this points to the + found remote link (e.g. from pypi.org). + """ + + dist: BaseDistribution + is_installed = False + + def __init__( + self, + link: Link, + source_link: Link, + ireq: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + self._link = link + self._source_link = source_link + self._factory = factory + self._ireq = ireq + self._name = name + self._version = version + self.dist = self._prepare() + + def __str__(self) -> str: + return f"{self.name} {self.version}" + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({str(self._link)!r})" + + def __hash__(self) -> int: + return hash((self.__class__, self._link)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return links_equivalent(self._link, other._link) + return False + + @property + def source_link(self) -> Optional[Link]: + return self._source_link + + @property + def project_name(self) -> NormalizedName: + """The normalised name of the project the candidate refers to""" + if self._name is None: + self._name = self.dist.canonical_name + return self._name + + @property + def name(self) -> str: + return self.project_name + + @property + def version(self) -> CandidateVersion: + if self._version is None: + self._version = self.dist.version + return self._version + + def format_for_error(self) -> str: + return "{} {} (from {})".format( + self.name, + self.version, + self._link.file_path if self._link.is_file else self._link, + ) + + def _prepare_distribution(self) -> BaseDistribution: + raise NotImplementedError("Override in subclass") + + def _check_metadata_consistency(self, dist: BaseDistribution) -> None: + """Check for consistency of project name and version of dist.""" + if self._name is not None and self._name != dist.canonical_name: + raise MetadataInconsistent( + self._ireq, + "name", + self._name, + dist.canonical_name, + ) + if self._version is not None and self._version != dist.version: + raise MetadataInconsistent( + self._ireq, + "version", + str(self._version), + str(dist.version), + ) + + def _prepare(self) -> BaseDistribution: + try: + dist = self._prepare_distribution() + except HashError as e: + # Provide HashError the underlying ireq that caused it. This + # provides context for the resulting error message to show the + # offending line to the user. + e.req = self._ireq + raise + except InstallationSubprocessError as exc: + # The output has been presented already, so don't duplicate it. + exc.context = "See above for output." + raise + + self._check_metadata_consistency(dist) + return dist + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + requires = self.dist.iter_dependencies() if with_requires else () + for r in requires: + yield from self._factory.make_requirements_from_spec(str(r), self._ireq) + yield self._factory.make_requires_python_requirement(self.dist.requires_python) + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return self._ireq + + +class LinkCandidate(_InstallRequirementBackedCandidate): + is_editable = False + + def __init__( + self, + link: Link, + template: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + source_link = link + cache_entry = factory.get_wheel_cache_entry(source_link, name) + if cache_entry is not None: + logger.debug("Using cached wheel link: %s", cache_entry.link) + link = cache_entry.link + ireq = make_install_req_from_link(link, template) + assert ireq.link == link + if ireq.link.is_wheel and not ireq.link.is_file: + wheel = Wheel(ireq.link.filename) + wheel_name = canonicalize_name(wheel.name) + assert name == wheel_name, f"{name!r} != {wheel_name!r} for wheel" + # Version may not be present for PEP 508 direct URLs + if version is not None: + wheel_version = Version(wheel.version) + assert version == wheel_version, "{!r} != {!r} for wheel {}".format( + version, wheel_version, name + ) + + if cache_entry is not None: + assert ireq.link.is_wheel + assert ireq.link.is_file + if cache_entry.persistent and template.link is template.original_link: + ireq.cached_wheel_source_link = source_link + if cache_entry.origin is not None: + ireq.download_info = cache_entry.origin + else: + # Legacy cache entry that does not have origin.json. + # download_info may miss the archive_info.hashes field. + ireq.download_info = direct_url_from_link( + source_link, link_is_in_wheel_cache=cache_entry.persistent + ) + + super().__init__( + link=link, + source_link=source_link, + ireq=ireq, + factory=factory, + name=name, + version=version, + ) + + def _prepare_distribution(self) -> BaseDistribution: + preparer = self._factory.preparer + return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True) + + +class EditableCandidate(_InstallRequirementBackedCandidate): + is_editable = True + + def __init__( + self, + link: Link, + template: InstallRequirement, + factory: "Factory", + name: Optional[NormalizedName] = None, + version: Optional[CandidateVersion] = None, + ) -> None: + super().__init__( + link=link, + source_link=link, + ireq=make_install_req_from_editable(link, template), + factory=factory, + name=name, + version=version, + ) + + def _prepare_distribution(self) -> BaseDistribution: + return self._factory.preparer.prepare_editable_requirement(self._ireq) + + +class AlreadyInstalledCandidate(Candidate): + is_installed = True + source_link = None + + def __init__( + self, + dist: BaseDistribution, + template: InstallRequirement, + factory: "Factory", + ) -> None: + self.dist = dist + self._ireq = _make_install_req_from_dist(dist, template) + self._factory = factory + self._version = None + + # This is just logging some messages, so we can do it eagerly. + # The returned dist would be exactly the same as self.dist because we + # set satisfied_by in _make_install_req_from_dist. + # TODO: Supply reason based on force_reinstall and upgrade_strategy. + skip_reason = "already satisfied" + factory.preparer.prepare_installed_requirement(self._ireq, skip_reason) + + def __str__(self) -> str: + return str(self.dist) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self.dist!r})" + + def __hash__(self) -> int: + return hash((self.__class__, self.name, self.version)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return self.name == other.name and self.version == other.version + return False + + @property + def project_name(self) -> NormalizedName: + return self.dist.canonical_name + + @property + def name(self) -> str: + return self.project_name + + @property + def version(self) -> CandidateVersion: + if self._version is None: + self._version = self.dist.version + return self._version + + @property + def is_editable(self) -> bool: + return self.dist.editable + + def format_for_error(self) -> str: + return f"{self.name} {self.version} (Installed)" + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + if not with_requires: + return + for r in self.dist.iter_dependencies(): + yield from self._factory.make_requirements_from_spec(str(r), self._ireq) + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return None + + +class ExtrasCandidate(Candidate): + """A candidate that has 'extras', indicating additional dependencies. + + Requirements can be for a project with dependencies, something like + foo[extra]. The extras don't affect the project/version being installed + directly, but indicate that we need additional dependencies. We model that + by having an artificial ExtrasCandidate that wraps the "base" candidate. + + The ExtrasCandidate differs from the base in the following ways: + + 1. It has a unique name, of the form foo[extra]. This causes the resolver + to treat it as a separate node in the dependency graph. + 2. When we're getting the candidate's dependencies, + a) We specify that we want the extra dependencies as well. + b) We add a dependency on the base candidate. + See below for why this is needed. + 3. We return None for the underlying InstallRequirement, as the base + candidate will provide it, and we don't want to end up with duplicates. + + The dependency on the base candidate is needed so that the resolver can't + decide that it should recommend foo[extra1] version 1.0 and foo[extra2] + version 2.0. Having those candidates depend on foo=1.0 and foo=2.0 + respectively forces the resolver to recognise that this is a conflict. + """ + + def __init__( + self, + base: BaseCandidate, + extras: FrozenSet[str], + *, + comes_from: Optional[InstallRequirement] = None, + ) -> None: + """ + :param comes_from: the InstallRequirement that led to this candidate if it + differs from the base's InstallRequirement. This will often be the + case in the sense that this candidate's requirement has the extras + while the base's does not. Unlike the InstallRequirement backed + candidates, this requirement is used solely for reporting purposes, + it does not do any leg work. + """ + self.base = base + self.extras = frozenset(canonicalize_name(e) for e in extras) + # If any extras are requested in their non-normalized forms, keep track + # of their raw values. This is needed when we look up dependencies + # since PEP 685 has not been implemented for marker-matching, and using + # the non-normalized extra for lookup ensures the user can select a + # non-normalized extra in a package with its non-normalized form. + # TODO: Remove this attribute when packaging is upgraded to support the + # marker comparison logic specified in PEP 685. + self._unnormalized_extras = extras.difference(self.extras) + self._comes_from = comes_from if comes_from is not None else self.base._ireq + + def __str__(self) -> str: + name, rest = str(self.base).split(" ", 1) + return "{}[{}] {}".format(name, ",".join(self.extras), rest) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(base={self.base!r}, extras={self.extras!r})" + + def __hash__(self) -> int: + return hash((self.base, self.extras)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return self.base == other.base and self.extras == other.extras + return False + + @property + def project_name(self) -> NormalizedName: + return self.base.project_name + + @property + def name(self) -> str: + """The normalised name of the project the candidate refers to""" + return format_name(self.base.project_name, self.extras) + + @property + def version(self) -> CandidateVersion: + return self.base.version + + def format_for_error(self) -> str: + return "{} [{}]".format( + self.base.format_for_error(), ", ".join(sorted(self.extras)) + ) + + @property + def is_installed(self) -> bool: + return self.base.is_installed + + @property + def is_editable(self) -> bool: + return self.base.is_editable + + @property + def source_link(self) -> Optional[Link]: + return self.base.source_link + + def _warn_invalid_extras( + self, + requested: FrozenSet[str], + valid: FrozenSet[str], + ) -> None: + """Emit warnings for invalid extras being requested. + + This emits a warning for each requested extra that is not in the + candidate's ``Provides-Extra`` list. + """ + invalid_extras_to_warn = frozenset( + extra + for extra in requested + if extra not in valid + # If an extra is requested in an unnormalized form, skip warning + # about the normalized form being missing. + and extra in self.extras + ) + if not invalid_extras_to_warn: + return + for extra in sorted(invalid_extras_to_warn): + logger.warning( + "%s %s does not provide the extra '%s'", + self.base.name, + self.version, + extra, + ) + + def _calculate_valid_requested_extras(self) -> FrozenSet[str]: + """Get a list of valid extras requested by this candidate. + + The user (or upstream dependant) may have specified extras that the + candidate doesn't support. Any unsupported extras are dropped, and each + cause a warning to be logged here. + """ + requested_extras = self.extras.union(self._unnormalized_extras) + valid_extras = frozenset( + extra + for extra in requested_extras + if self.base.dist.is_extra_provided(extra) + ) + self._warn_invalid_extras(requested_extras, valid_extras) + return valid_extras + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + factory = self.base._factory + + # Add a dependency on the exact base + # (See note 2b in the class docstring) + yield factory.make_requirement_from_candidate(self.base) + if not with_requires: + return + + valid_extras = self._calculate_valid_requested_extras() + for r in self.base.dist.iter_dependencies(valid_extras): + yield from factory.make_requirements_from_spec( + str(r), + self._comes_from, + valid_extras, + ) + + def get_install_requirement(self) -> Optional[InstallRequirement]: + # We don't return anything here, because we always + # depend on the base candidate, and we'll get the + # install requirement from that. + return None + + +class RequiresPythonCandidate(Candidate): + is_installed = False + source_link = None + + def __init__(self, py_version_info: Optional[Tuple[int, ...]]) -> None: + if py_version_info is not None: + version_info = normalize_version_info(py_version_info) + else: + version_info = sys.version_info[:3] + self._version = Version(".".join(str(c) for c in version_info)) + + # We don't need to implement __eq__() and __ne__() since there is always + # only one RequiresPythonCandidate in a resolution, i.e. the host Python. + # The built-in object.__eq__() and object.__ne__() do exactly what we want. + + def __str__(self) -> str: + return f"Python {self._version}" + + @property + def project_name(self) -> NormalizedName: + return REQUIRES_PYTHON_IDENTIFIER + + @property + def name(self) -> str: + return REQUIRES_PYTHON_IDENTIFIER + + @property + def version(self) -> CandidateVersion: + return self._version + + def format_for_error(self) -> str: + return f"Python {self.version}" + + def iter_dependencies(self, with_requires: bool) -> Iterable[Optional[Requirement]]: + return () + + def get_install_requirement(self) -> Optional[InstallRequirement]: + return None diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py new file mode 100644 index 0000000..4adeb43 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py @@ -0,0 +1,812 @@ +import contextlib +import functools +import logging +from typing import ( + TYPE_CHECKING, + Dict, + FrozenSet, + Iterable, + Iterator, + List, + Mapping, + NamedTuple, + Optional, + Sequence, + Set, + Tuple, + TypeVar, + cast, +) + +from pip._vendor.packaging.requirements import InvalidRequirement +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name +from pip._vendor.resolvelib import ResolutionImpossible + +from pip._internal.cache import CacheEntry, WheelCache +from pip._internal.exceptions import ( + DistributionNotFound, + InstallationError, + MetadataInconsistent, + UnsupportedPythonVersion, + UnsupportedWheel, +) +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import BaseDistribution, get_default_environment +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.constructors import ( + install_req_drop_extras, + install_req_from_link_and_ireq, +) +from pip._internal.req.req_install import ( + InstallRequirement, + check_invalid_constraint_type, +) +from pip._internal.resolution.base import InstallRequirementProvider +from pip._internal.utils.compatibility_tags import get_supported +from pip._internal.utils.hashes import Hashes +from pip._internal.utils.packaging import get_requirement +from pip._internal.utils.virtualenv import running_under_virtualenv + +from .base import Candidate, CandidateVersion, Constraint, Requirement +from .candidates import ( + AlreadyInstalledCandidate, + BaseCandidate, + EditableCandidate, + ExtrasCandidate, + LinkCandidate, + RequiresPythonCandidate, + as_base_candidate, +) +from .found_candidates import FoundCandidates, IndexCandidateInfo +from .requirements import ( + ExplicitRequirement, + RequiresPythonRequirement, + SpecifierRequirement, + SpecifierWithoutExtrasRequirement, + UnsatisfiableRequirement, +) + +if TYPE_CHECKING: + from typing import Protocol + + class ConflictCause(Protocol): + requirement: RequiresPythonRequirement + parent: Candidate + + +logger = logging.getLogger(__name__) + +C = TypeVar("C") +Cache = Dict[Link, C] + + +class CollectedRootRequirements(NamedTuple): + requirements: List[Requirement] + constraints: Dict[str, Constraint] + user_requested: Dict[str, int] + + +class Factory: + def __init__( + self, + finder: PackageFinder, + preparer: RequirementPreparer, + make_install_req: InstallRequirementProvider, + wheel_cache: Optional[WheelCache], + use_user_site: bool, + force_reinstall: bool, + ignore_installed: bool, + ignore_requires_python: bool, + py_version_info: Optional[Tuple[int, ...]] = None, + ) -> None: + self._finder = finder + self.preparer = preparer + self._wheel_cache = wheel_cache + self._python_candidate = RequiresPythonCandidate(py_version_info) + self._make_install_req_from_spec = make_install_req + self._use_user_site = use_user_site + self._force_reinstall = force_reinstall + self._ignore_requires_python = ignore_requires_python + + self._build_failures: Cache[InstallationError] = {} + self._link_candidate_cache: Cache[LinkCandidate] = {} + self._editable_candidate_cache: Cache[EditableCandidate] = {} + self._installed_candidate_cache: Dict[str, AlreadyInstalledCandidate] = {} + self._extras_candidate_cache: Dict[ + Tuple[int, FrozenSet[NormalizedName]], ExtrasCandidate + ] = {} + + if not ignore_installed: + env = get_default_environment() + self._installed_dists = { + dist.canonical_name: dist + for dist in env.iter_installed_distributions(local_only=False) + } + else: + self._installed_dists = {} + + @property + def force_reinstall(self) -> bool: + return self._force_reinstall + + def _fail_if_link_is_unsupported_wheel(self, link: Link) -> None: + if not link.is_wheel: + return + wheel = Wheel(link.filename) + if wheel.supported(self._finder.target_python.get_unsorted_tags()): + return + msg = f"{link.filename} is not a supported wheel on this platform." + raise UnsupportedWheel(msg) + + def _make_extras_candidate( + self, + base: BaseCandidate, + extras: FrozenSet[str], + *, + comes_from: Optional[InstallRequirement] = None, + ) -> ExtrasCandidate: + cache_key = (id(base), frozenset(canonicalize_name(e) for e in extras)) + try: + candidate = self._extras_candidate_cache[cache_key] + except KeyError: + candidate = ExtrasCandidate(base, extras, comes_from=comes_from) + self._extras_candidate_cache[cache_key] = candidate + return candidate + + def _make_candidate_from_dist( + self, + dist: BaseDistribution, + extras: FrozenSet[str], + template: InstallRequirement, + ) -> Candidate: + try: + base = self._installed_candidate_cache[dist.canonical_name] + except KeyError: + base = AlreadyInstalledCandidate(dist, template, factory=self) + self._installed_candidate_cache[dist.canonical_name] = base + if not extras: + return base + return self._make_extras_candidate(base, extras, comes_from=template) + + def _make_candidate_from_link( + self, + link: Link, + extras: FrozenSet[str], + template: InstallRequirement, + name: Optional[NormalizedName], + version: Optional[CandidateVersion], + ) -> Optional[Candidate]: + base: Optional[BaseCandidate] = self._make_base_candidate_from_link( + link, template, name, version + ) + if not extras or base is None: + return base + return self._make_extras_candidate(base, extras, comes_from=template) + + def _make_base_candidate_from_link( + self, + link: Link, + template: InstallRequirement, + name: Optional[NormalizedName], + version: Optional[CandidateVersion], + ) -> Optional[BaseCandidate]: + # TODO: Check already installed candidate, and use it if the link and + # editable flag match. + + if link in self._build_failures: + # We already tried this candidate before, and it does not build. + # Don't bother trying again. + return None + + if template.editable: + if link not in self._editable_candidate_cache: + try: + self._editable_candidate_cache[link] = EditableCandidate( + link, + template, + factory=self, + name=name, + version=version, + ) + except MetadataInconsistent as e: + logger.info( + "Discarding [blue underline]%s[/]: [yellow]%s[reset]", + link, + e, + extra={"markup": True}, + ) + self._build_failures[link] = e + return None + + return self._editable_candidate_cache[link] + else: + if link not in self._link_candidate_cache: + try: + self._link_candidate_cache[link] = LinkCandidate( + link, + template, + factory=self, + name=name, + version=version, + ) + except MetadataInconsistent as e: + logger.info( + "Discarding [blue underline]%s[/]: [yellow]%s[reset]", + link, + e, + extra={"markup": True}, + ) + self._build_failures[link] = e + return None + return self._link_candidate_cache[link] + + def _iter_found_candidates( + self, + ireqs: Sequence[InstallRequirement], + specifier: SpecifierSet, + hashes: Hashes, + prefers_installed: bool, + incompatible_ids: Set[int], + ) -> Iterable[Candidate]: + if not ireqs: + return () + + # The InstallRequirement implementation requires us to give it a + # "template". Here we just choose the first requirement to represent + # all of them. + # Hopefully the Project model can correct this mismatch in the future. + template = ireqs[0] + assert template.req, "Candidates found on index must be PEP 508" + name = canonicalize_name(template.req.name) + + extras: FrozenSet[str] = frozenset() + for ireq in ireqs: + assert ireq.req, "Candidates found on index must be PEP 508" + specifier &= ireq.req.specifier + hashes &= ireq.hashes(trust_internet=False) + extras |= frozenset(ireq.extras) + + def _get_installed_candidate() -> Optional[Candidate]: + """Get the candidate for the currently-installed version.""" + # If --force-reinstall is set, we want the version from the index + # instead, so we "pretend" there is nothing installed. + if self._force_reinstall: + return None + try: + installed_dist = self._installed_dists[name] + except KeyError: + return None + # Don't use the installed distribution if its version does not fit + # the current dependency graph. + if not specifier.contains(installed_dist.version, prereleases=True): + return None + candidate = self._make_candidate_from_dist( + dist=installed_dist, + extras=extras, + template=template, + ) + # The candidate is a known incompatibility. Don't use it. + if id(candidate) in incompatible_ids: + return None + return candidate + + def iter_index_candidate_infos() -> Iterator[IndexCandidateInfo]: + result = self._finder.find_best_candidate( + project_name=name, + specifier=specifier, + hashes=hashes, + ) + icans = list(result.iter_applicable()) + + # PEP 592: Yanked releases are ignored unless the specifier + # explicitly pins a version (via '==' or '===') that can be + # solely satisfied by a yanked release. + all_yanked = all(ican.link.is_yanked for ican in icans) + + def is_pinned(specifier: SpecifierSet) -> bool: + for sp in specifier: + if sp.operator == "===": + return True + if sp.operator != "==": + continue + if sp.version.endswith(".*"): + continue + return True + return False + + pinned = is_pinned(specifier) + + # PackageFinder returns earlier versions first, so we reverse. + for ican in reversed(icans): + if not (all_yanked and pinned) and ican.link.is_yanked: + continue + func = functools.partial( + self._make_candidate_from_link, + link=ican.link, + extras=extras, + template=template, + name=name, + version=ican.version, + ) + yield ican.version, func + + return FoundCandidates( + iter_index_candidate_infos, + _get_installed_candidate(), + prefers_installed, + incompatible_ids, + ) + + def _iter_explicit_candidates_from_base( + self, + base_requirements: Iterable[Requirement], + extras: FrozenSet[str], + ) -> Iterator[Candidate]: + """Produce explicit candidates from the base given an extra-ed package. + + :param base_requirements: Requirements known to the resolver. The + requirements are guaranteed to not have extras. + :param extras: The extras to inject into the explicit requirements' + candidates. + """ + for req in base_requirements: + lookup_cand, _ = req.get_candidate_lookup() + if lookup_cand is None: # Not explicit. + continue + # We've stripped extras from the identifier, and should always + # get a BaseCandidate here, unless there's a bug elsewhere. + base_cand = as_base_candidate(lookup_cand) + assert base_cand is not None, "no extras here" + yield self._make_extras_candidate(base_cand, extras) + + def _iter_candidates_from_constraints( + self, + identifier: str, + constraint: Constraint, + template: InstallRequirement, + ) -> Iterator[Candidate]: + """Produce explicit candidates from constraints. + + This creates "fake" InstallRequirement objects that are basically clones + of what "should" be the template, but with original_link set to link. + """ + for link in constraint.links: + self._fail_if_link_is_unsupported_wheel(link) + candidate = self._make_base_candidate_from_link( + link, + template=install_req_from_link_and_ireq(link, template), + name=canonicalize_name(identifier), + version=None, + ) + if candidate: + yield candidate + + def find_candidates( + self, + identifier: str, + requirements: Mapping[str, Iterable[Requirement]], + incompatibilities: Mapping[str, Iterator[Candidate]], + constraint: Constraint, + prefers_installed: bool, + ) -> Iterable[Candidate]: + # Collect basic lookup information from the requirements. + explicit_candidates: Set[Candidate] = set() + ireqs: List[InstallRequirement] = [] + for req in requirements[identifier]: + cand, ireq = req.get_candidate_lookup() + if cand is not None: + explicit_candidates.add(cand) + if ireq is not None: + ireqs.append(ireq) + + # If the current identifier contains extras, add requires and explicit + # candidates from entries from extra-less identifier. + with contextlib.suppress(InvalidRequirement): + parsed_requirement = get_requirement(identifier) + if parsed_requirement.name != identifier: + explicit_candidates.update( + self._iter_explicit_candidates_from_base( + requirements.get(parsed_requirement.name, ()), + frozenset(parsed_requirement.extras), + ), + ) + for req in requirements.get(parsed_requirement.name, []): + _, ireq = req.get_candidate_lookup() + if ireq is not None: + ireqs.append(ireq) + + # Add explicit candidates from constraints. We only do this if there are + # known ireqs, which represent requirements not already explicit. If + # there are no ireqs, we're constraining already-explicit requirements, + # which is handled later when we return the explicit candidates. + if ireqs: + try: + explicit_candidates.update( + self._iter_candidates_from_constraints( + identifier, + constraint, + template=ireqs[0], + ), + ) + except UnsupportedWheel: + # If we're constrained to install a wheel incompatible with the + # target architecture, no candidates will ever be valid. + return () + + # Since we cache all the candidates, incompatibility identification + # can be made quicker by comparing only the id() values. + incompat_ids = {id(c) for c in incompatibilities.get(identifier, ())} + + # If none of the requirements want an explicit candidate, we can ask + # the finder for candidates. + if not explicit_candidates: + return self._iter_found_candidates( + ireqs, + constraint.specifier, + constraint.hashes, + prefers_installed, + incompat_ids, + ) + + return ( + c + for c in explicit_candidates + if id(c) not in incompat_ids + and constraint.is_satisfied_by(c) + and all(req.is_satisfied_by(c) for req in requirements[identifier]) + ) + + def _make_requirements_from_install_req( + self, ireq: InstallRequirement, requested_extras: Iterable[str] + ) -> Iterator[Requirement]: + """ + Returns requirement objects associated with the given InstallRequirement. In + most cases this will be a single object but the following special cases exist: + - the InstallRequirement has markers that do not apply -> result is empty + - the InstallRequirement has both a constraint (or link) and extras + -> result is split in two requirement objects: one with the constraint + (or link) and one with the extra. This allows centralized constraint + handling for the base, resulting in fewer candidate rejections. + """ + if not ireq.match_markers(requested_extras): + logger.info( + "Ignoring %s: markers '%s' don't match your environment", + ireq.name, + ireq.markers, + ) + elif not ireq.link: + if ireq.extras and ireq.req is not None and ireq.req.specifier: + yield SpecifierWithoutExtrasRequirement(ireq) + yield SpecifierRequirement(ireq) + else: + self._fail_if_link_is_unsupported_wheel(ireq.link) + # Always make the link candidate for the base requirement to make it + # available to `find_candidates` for explicit candidate lookup for any + # set of extras. + # The extras are required separately via a second requirement. + cand = self._make_base_candidate_from_link( + ireq.link, + template=install_req_drop_extras(ireq) if ireq.extras else ireq, + name=canonicalize_name(ireq.name) if ireq.name else None, + version=None, + ) + if cand is None: + # There's no way we can satisfy a URL requirement if the underlying + # candidate fails to build. An unnamed URL must be user-supplied, so + # we fail eagerly. If the URL is named, an unsatisfiable requirement + # can make the resolver do the right thing, either backtrack (and + # maybe find some other requirement that's buildable) or raise a + # ResolutionImpossible eventually. + if not ireq.name: + raise self._build_failures[ireq.link] + yield UnsatisfiableRequirement(canonicalize_name(ireq.name)) + else: + # require the base from the link + yield self.make_requirement_from_candidate(cand) + if ireq.extras: + # require the extras on top of the base candidate + yield self.make_requirement_from_candidate( + self._make_extras_candidate(cand, frozenset(ireq.extras)) + ) + + def collect_root_requirements( + self, root_ireqs: List[InstallRequirement] + ) -> CollectedRootRequirements: + collected = CollectedRootRequirements([], {}, {}) + for i, ireq in enumerate(root_ireqs): + if ireq.constraint: + # Ensure we only accept valid constraints + problem = check_invalid_constraint_type(ireq) + if problem: + raise InstallationError(problem) + if not ireq.match_markers(): + continue + assert ireq.name, "Constraint must be named" + name = canonicalize_name(ireq.name) + if name in collected.constraints: + collected.constraints[name] &= ireq + else: + collected.constraints[name] = Constraint.from_ireq(ireq) + else: + reqs = list( + self._make_requirements_from_install_req( + ireq, + requested_extras=(), + ) + ) + if not reqs: + continue + template = reqs[0] + if ireq.user_supplied and template.name not in collected.user_requested: + collected.user_requested[template.name] = i + collected.requirements.extend(reqs) + # Put requirements with extras at the end of the root requires. This does not + # affect resolvelib's picking preference but it does affect its initial criteria + # population: by putting extras at the end we enable the candidate finder to + # present resolvelib with a smaller set of candidates to resolvelib, already + # taking into account any non-transient constraints on the associated base. This + # means resolvelib will have fewer candidates to visit and reject. + # Python's list sort is stable, meaning relative order is kept for objects with + # the same key. + collected.requirements.sort(key=lambda r: r.name != r.project_name) + return collected + + def make_requirement_from_candidate( + self, candidate: Candidate + ) -> ExplicitRequirement: + return ExplicitRequirement(candidate) + + def make_requirements_from_spec( + self, + specifier: str, + comes_from: Optional[InstallRequirement], + requested_extras: Iterable[str] = (), + ) -> Iterator[Requirement]: + """ + Returns requirement objects associated with the given specifier. In most cases + this will be a single object but the following special cases exist: + - the specifier has markers that do not apply -> result is empty + - the specifier has both a constraint and extras -> result is split + in two requirement objects: one with the constraint and one with the + extra. This allows centralized constraint handling for the base, + resulting in fewer candidate rejections. + """ + ireq = self._make_install_req_from_spec(specifier, comes_from) + return self._make_requirements_from_install_req(ireq, requested_extras) + + def make_requires_python_requirement( + self, + specifier: SpecifierSet, + ) -> Optional[Requirement]: + if self._ignore_requires_python: + return None + # Don't bother creating a dependency for an empty Requires-Python. + if not str(specifier): + return None + return RequiresPythonRequirement(specifier, self._python_candidate) + + def get_wheel_cache_entry( + self, link: Link, name: Optional[str] + ) -> Optional[CacheEntry]: + """Look up the link in the wheel cache. + + If ``preparer.require_hashes`` is True, don't use the wheel cache, + because cached wheels, always built locally, have different hashes + than the files downloaded from the index server and thus throw false + hash mismatches. Furthermore, cached wheels at present have + nondeterministic contents due to file modification times. + """ + if self._wheel_cache is None: + return None + return self._wheel_cache.get_cache_entry( + link=link, + package_name=name, + supported_tags=get_supported(), + ) + + def get_dist_to_uninstall(self, candidate: Candidate) -> Optional[BaseDistribution]: + # TODO: Are there more cases this needs to return True? Editable? + dist = self._installed_dists.get(candidate.project_name) + if dist is None: # Not installed, no uninstallation required. + return None + + # We're installing into global site. The current installation must + # be uninstalled, no matter it's in global or user site, because the + # user site installation has precedence over global. + if not self._use_user_site: + return dist + + # We're installing into user site. Remove the user site installation. + if dist.in_usersite: + return dist + + # We're installing into user site, but the installed incompatible + # package is in global site. We can't uninstall that, and would let + # the new user installation to "shadow" it. But shadowing won't work + # in virtual environments, so we error out. + if running_under_virtualenv() and dist.in_site_packages: + message = ( + f"Will not install to the user site because it will lack " + f"sys.path precedence to {dist.raw_name} in {dist.location}" + ) + raise InstallationError(message) + return None + + def _report_requires_python_error( + self, causes: Sequence["ConflictCause"] + ) -> UnsupportedPythonVersion: + assert causes, "Requires-Python error reported with no cause" + + version = self._python_candidate.version + + if len(causes) == 1: + specifier = str(causes[0].requirement.specifier) + message = ( + f"Package {causes[0].parent.name!r} requires a different " + f"Python: {version} not in {specifier!r}" + ) + return UnsupportedPythonVersion(message) + + message = f"Packages require a different Python. {version} not in:" + for cause in causes: + package = cause.parent.format_for_error() + specifier = str(cause.requirement.specifier) + message += f"\n{specifier!r} (required by {package})" + return UnsupportedPythonVersion(message) + + def _report_single_requirement_conflict( + self, req: Requirement, parent: Optional[Candidate] + ) -> DistributionNotFound: + if parent is None: + req_disp = str(req) + else: + req_disp = f"{req} (from {parent.name})" + + cands = self._finder.find_all_candidates(req.project_name) + skipped_by_requires_python = self._finder.requires_python_skipped_reasons() + + versions_set: Set[CandidateVersion] = set() + yanked_versions_set: Set[CandidateVersion] = set() + for c in cands: + is_yanked = c.link.is_yanked if c.link else False + if is_yanked: + yanked_versions_set.add(c.version) + else: + versions_set.add(c.version) + + versions = [str(v) for v in sorted(versions_set)] + yanked_versions = [str(v) for v in sorted(yanked_versions_set)] + + if yanked_versions: + # Saying "version X is yanked" isn't entirely accurate. + # https://github.com/pypa/pip/issues/11745#issuecomment-1402805842 + logger.critical( + "Ignored the following yanked versions: %s", + ", ".join(yanked_versions) or "none", + ) + if skipped_by_requires_python: + logger.critical( + "Ignored the following versions that require a different python " + "version: %s", + "; ".join(skipped_by_requires_python) or "none", + ) + logger.critical( + "Could not find a version that satisfies the requirement %s " + "(from versions: %s)", + req_disp, + ", ".join(versions) or "none", + ) + if str(req) == "requirements.txt": + logger.info( + "HINT: You are attempting to install a package literally " + 'named "requirements.txt" (which cannot exist). Consider ' + "using the '-r' flag to install the packages listed in " + "requirements.txt" + ) + + return DistributionNotFound(f"No matching distribution found for {req}") + + def get_installation_error( + self, + e: "ResolutionImpossible[Requirement, Candidate]", + constraints: Dict[str, Constraint], + ) -> InstallationError: + assert e.causes, "Installation error reported with no cause" + + # If one of the things we can't solve is "we need Python X.Y", + # that is what we report. + requires_python_causes = [ + cause + for cause in e.causes + if isinstance(cause.requirement, RequiresPythonRequirement) + and not cause.requirement.is_satisfied_by(self._python_candidate) + ] + if requires_python_causes: + # The comprehension above makes sure all Requirement instances are + # RequiresPythonRequirement, so let's cast for convenience. + return self._report_requires_python_error( + cast("Sequence[ConflictCause]", requires_python_causes), + ) + + # Otherwise, we have a set of causes which can't all be satisfied + # at once. + + # The simplest case is when we have *one* cause that can't be + # satisfied. We just report that case. + if len(e.causes) == 1: + req, parent = e.causes[0] + if req.name not in constraints: + return self._report_single_requirement_conflict(req, parent) + + # OK, we now have a list of requirements that can't all be + # satisfied at once. + + # A couple of formatting helpers + def text_join(parts: List[str]) -> str: + if len(parts) == 1: + return parts[0] + + return ", ".join(parts[:-1]) + " and " + parts[-1] + + def describe_trigger(parent: Candidate) -> str: + ireq = parent.get_install_requirement() + if not ireq or not ireq.comes_from: + return f"{parent.name}=={parent.version}" + if isinstance(ireq.comes_from, InstallRequirement): + return str(ireq.comes_from.name) + return str(ireq.comes_from) + + triggers = set() + for req, parent in e.causes: + if parent is None: + # This is a root requirement, so we can report it directly + trigger = req.format_for_error() + else: + trigger = describe_trigger(parent) + triggers.add(trigger) + + if triggers: + info = text_join(sorted(triggers)) + else: + info = "the requested packages" + + msg = ( + f"Cannot install {info} because these package versions " + "have conflicting dependencies." + ) + logger.critical(msg) + msg = "\nThe conflict is caused by:" + + relevant_constraints = set() + for req, parent in e.causes: + if req.name in constraints: + relevant_constraints.add(req.name) + msg = msg + "\n " + if parent: + msg = msg + f"{parent.name} {parent.version} depends on " + else: + msg = msg + "The user requested " + msg = msg + req.format_for_error() + for key in relevant_constraints: + spec = constraints[key].specifier + msg += f"\n The user requested (constraint) {key}{spec}" + + msg = ( + msg + + "\n\n" + + "To fix this you could try to:\n" + + "1. loosen the range of package versions you've specified\n" + + "2. remove package versions to allow pip attempt to solve " + + "the dependency conflict\n" + ) + + logger.info(msg) + + return DistributionNotFound( + "ResolutionImpossible: for help visit " + "https://pip.pypa.io/en/latest/topics/dependency-resolution/" + "#dealing-with-dependency-conflicts" + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py new file mode 100644 index 0000000..8663097 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py @@ -0,0 +1,155 @@ +"""Utilities to lazily create and visit candidates found. + +Creating and visiting a candidate is a *very* costly operation. It involves +fetching, extracting, potentially building modules from source, and verifying +distribution metadata. It is therefore crucial for performance to keep +everything here lazy all the way down, so we only touch candidates that we +absolutely need, and not "download the world" when we only need one version of +something. +""" + +import functools +from collections.abc import Sequence +from typing import TYPE_CHECKING, Any, Callable, Iterator, Optional, Set, Tuple + +from pip._vendor.packaging.version import _BaseVersion + +from .base import Candidate + +IndexCandidateInfo = Tuple[_BaseVersion, Callable[[], Optional[Candidate]]] + +if TYPE_CHECKING: + SequenceCandidate = Sequence[Candidate] +else: + # For compatibility: Python before 3.9 does not support using [] on the + # Sequence class. + # + # >>> from collections.abc import Sequence + # >>> Sequence[str] + # Traceback (most recent call last): + # File "", line 1, in + # TypeError: 'ABCMeta' object is not subscriptable + # + # TODO: Remove this block after dropping Python 3.8 support. + SequenceCandidate = Sequence + + +def _iter_built(infos: Iterator[IndexCandidateInfo]) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the package is not already installed. Candidates + from index come later in their normal ordering. + """ + versions_found: Set[_BaseVersion] = set() + for version, func in infos: + if version in versions_found: + continue + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + +def _iter_built_with_prepended( + installed: Candidate, infos: Iterator[IndexCandidateInfo] +) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the resolver prefers the already-installed + candidate and NOT to upgrade. The installed candidate is therefore + always yielded first, and candidates from index come later in their + normal ordering, except skipped when the version is already installed. + """ + yield installed + versions_found: Set[_BaseVersion] = {installed.version} + for version, func in infos: + if version in versions_found: + continue + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + +def _iter_built_with_inserted( + installed: Candidate, infos: Iterator[IndexCandidateInfo] +) -> Iterator[Candidate]: + """Iterator for ``FoundCandidates``. + + This iterator is used when the resolver prefers to upgrade an + already-installed package. Candidates from index are returned in their + normal ordering, except replaced when the version is already installed. + + The implementation iterates through and yields other candidates, inserting + the installed candidate exactly once before we start yielding older or + equivalent candidates, or after all other candidates if they are all newer. + """ + versions_found: Set[_BaseVersion] = set() + for version, func in infos: + if version in versions_found: + continue + # If the installed candidate is better, yield it first. + if installed.version >= version: + yield installed + versions_found.add(installed.version) + candidate = func() + if candidate is None: + continue + yield candidate + versions_found.add(version) + + # If the installed candidate is older than all other candidates. + if installed.version not in versions_found: + yield installed + + +class FoundCandidates(SequenceCandidate): + """A lazy sequence to provide candidates to the resolver. + + The intended usage is to return this from `find_matches()` so the resolver + can iterate through the sequence multiple times, but only access the index + page when remote packages are actually needed. This improve performances + when suitable candidates are already installed on disk. + """ + + def __init__( + self, + get_infos: Callable[[], Iterator[IndexCandidateInfo]], + installed: Optional[Candidate], + prefers_installed: bool, + incompatible_ids: Set[int], + ): + self._get_infos = get_infos + self._installed = installed + self._prefers_installed = prefers_installed + self._incompatible_ids = incompatible_ids + + def __getitem__(self, index: Any) -> Any: + # Implemented to satisfy the ABC check. This is not needed by the + # resolver, and should not be used by the provider either (for + # performance reasons). + raise NotImplementedError("don't do this") + + def __iter__(self) -> Iterator[Candidate]: + infos = self._get_infos() + if not self._installed: + iterator = _iter_built(infos) + elif self._prefers_installed: + iterator = _iter_built_with_prepended(self._installed, infos) + else: + iterator = _iter_built_with_inserted(self._installed, infos) + return (c for c in iterator if id(c) not in self._incompatible_ids) + + def __len__(self) -> int: + # Implemented to satisfy the ABC check. This is not needed by the + # resolver, and should not be used by the provider either (for + # performance reasons). + raise NotImplementedError("don't do this") + + @functools.lru_cache(maxsize=1) + def __bool__(self) -> bool: + if self._prefers_installed and self._installed: + return True + return any(self) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py new file mode 100644 index 0000000..315fb9c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py @@ -0,0 +1,255 @@ +import collections +import math +from typing import ( + TYPE_CHECKING, + Dict, + Iterable, + Iterator, + Mapping, + Sequence, + TypeVar, + Union, +) + +from pip._vendor.resolvelib.providers import AbstractProvider + +from .base import Candidate, Constraint, Requirement +from .candidates import REQUIRES_PYTHON_IDENTIFIER +from .factory import Factory + +if TYPE_CHECKING: + from pip._vendor.resolvelib.providers import Preference + from pip._vendor.resolvelib.resolvers import RequirementInformation + + PreferenceInformation = RequirementInformation[Requirement, Candidate] + + _ProviderBase = AbstractProvider[Requirement, Candidate, str] +else: + _ProviderBase = AbstractProvider + +# Notes on the relationship between the provider, the factory, and the +# candidate and requirement classes. +# +# The provider is a direct implementation of the resolvelib class. Its role +# is to deliver the API that resolvelib expects. +# +# Rather than work with completely abstract "requirement" and "candidate" +# concepts as resolvelib does, pip has concrete classes implementing these two +# ideas. The API of Requirement and Candidate objects are defined in the base +# classes, but essentially map fairly directly to the equivalent provider +# methods. In particular, `find_matches` and `is_satisfied_by` are +# requirement methods, and `get_dependencies` is a candidate method. +# +# The factory is the interface to pip's internal mechanisms. It is stateless, +# and is created by the resolver and held as a property of the provider. It is +# responsible for creating Requirement and Candidate objects, and provides +# services to those objects (access to pip's finder and preparer). + + +D = TypeVar("D") +V = TypeVar("V") + + +def _get_with_identifier( + mapping: Mapping[str, V], + identifier: str, + default: D, +) -> Union[D, V]: + """Get item from a package name lookup mapping with a resolver identifier. + + This extra logic is needed when the target mapping is keyed by package + name, which cannot be directly looked up with an identifier (which may + contain requested extras). Additional logic is added to also look up a value + by "cleaning up" the extras from the identifier. + """ + if identifier in mapping: + return mapping[identifier] + # HACK: Theoretically we should check whether this identifier is a valid + # "NAME[EXTRAS]" format, and parse out the name part with packaging or + # some regular expression. But since pip's resolver only spits out three + # kinds of identifiers: normalized PEP 503 names, normalized names plus + # extras, and Requires-Python, we can cheat a bit here. + name, open_bracket, _ = identifier.partition("[") + if open_bracket and name in mapping: + return mapping[name] + return default + + +class PipProvider(_ProviderBase): + """Pip's provider implementation for resolvelib. + + :params constraints: A mapping of constraints specified by the user. Keys + are canonicalized project names. + :params ignore_dependencies: Whether the user specified ``--no-deps``. + :params upgrade_strategy: The user-specified upgrade strategy. + :params user_requested: A set of canonicalized package names that the user + supplied for pip to install/upgrade. + """ + + def __init__( + self, + factory: Factory, + constraints: Dict[str, Constraint], + ignore_dependencies: bool, + upgrade_strategy: str, + user_requested: Dict[str, int], + ) -> None: + self._factory = factory + self._constraints = constraints + self._ignore_dependencies = ignore_dependencies + self._upgrade_strategy = upgrade_strategy + self._user_requested = user_requested + self._known_depths: Dict[str, float] = collections.defaultdict(lambda: math.inf) + + def identify(self, requirement_or_candidate: Union[Requirement, Candidate]) -> str: + return requirement_or_candidate.name + + def get_preference( + self, + identifier: str, + resolutions: Mapping[str, Candidate], + candidates: Mapping[str, Iterator[Candidate]], + information: Mapping[str, Iterable["PreferenceInformation"]], + backtrack_causes: Sequence["PreferenceInformation"], + ) -> "Preference": + """Produce a sort key for given requirement based on preference. + + The lower the return value is, the more preferred this group of + arguments is. + + Currently pip considers the following in order: + + * Prefer if any of the known requirements is "direct", e.g. points to an + explicit URL. + * If equal, prefer if any requirement is "pinned", i.e. contains + operator ``===`` or ``==``. + * If equal, calculate an approximate "depth" and resolve requirements + closer to the user-specified requirements first. If the depth cannot + by determined (eg: due to no matching parents), it is considered + infinite. + * Order user-specified requirements by the order they are specified. + * If equal, prefers "non-free" requirements, i.e. contains at least one + operator, such as ``>=`` or ``<``. + * If equal, order alphabetically for consistency (helps debuggability). + """ + try: + next(iter(information[identifier])) + except StopIteration: + # There is no information for this identifier, so there's no known + # candidates. + has_information = False + else: + has_information = True + + if has_information: + lookups = (r.get_candidate_lookup() for r, _ in information[identifier]) + candidate, ireqs = zip(*lookups) + else: + candidate, ireqs = None, () + + operators = [ + specifier.operator + for specifier_set in (ireq.specifier for ireq in ireqs if ireq) + for specifier in specifier_set + ] + + direct = candidate is not None + pinned = any(op[:2] == "==" for op in operators) + unfree = bool(operators) + + try: + requested_order: Union[int, float] = self._user_requested[identifier] + except KeyError: + requested_order = math.inf + if has_information: + parent_depths = ( + self._known_depths[parent.name] if parent is not None else 0.0 + for _, parent in information[identifier] + ) + inferred_depth = min(d for d in parent_depths) + 1.0 + else: + inferred_depth = math.inf + else: + inferred_depth = 1.0 + self._known_depths[identifier] = inferred_depth + + requested_order = self._user_requested.get(identifier, math.inf) + + # Requires-Python has only one candidate and the check is basically + # free, so we always do it first to avoid needless work if it fails. + requires_python = identifier == REQUIRES_PYTHON_IDENTIFIER + + # Prefer the causes of backtracking on the assumption that the problem + # resolving the dependency tree is related to the failures that caused + # the backtracking + backtrack_cause = self.is_backtrack_cause(identifier, backtrack_causes) + + return ( + not requires_python, + not direct, + not pinned, + not backtrack_cause, + inferred_depth, + requested_order, + not unfree, + identifier, + ) + + def find_matches( + self, + identifier: str, + requirements: Mapping[str, Iterator[Requirement]], + incompatibilities: Mapping[str, Iterator[Candidate]], + ) -> Iterable[Candidate]: + def _eligible_for_upgrade(identifier: str) -> bool: + """Are upgrades allowed for this project? + + This checks the upgrade strategy, and whether the project was one + that the user specified in the command line, in order to decide + whether we should upgrade if there's a newer version available. + + (Note that we don't need access to the `--upgrade` flag, because + an upgrade strategy of "to-satisfy-only" means that `--upgrade` + was not specified). + """ + if self._upgrade_strategy == "eager": + return True + elif self._upgrade_strategy == "only-if-needed": + user_order = _get_with_identifier( + self._user_requested, + identifier, + default=None, + ) + return user_order is not None + return False + + constraint = _get_with_identifier( + self._constraints, + identifier, + default=Constraint.empty(), + ) + return self._factory.find_candidates( + identifier=identifier, + requirements=requirements, + constraint=constraint, + prefers_installed=(not _eligible_for_upgrade(identifier)), + incompatibilities=incompatibilities, + ) + + def is_satisfied_by(self, requirement: Requirement, candidate: Candidate) -> bool: + return requirement.is_satisfied_by(candidate) + + def get_dependencies(self, candidate: Candidate) -> Sequence[Requirement]: + with_requires = not self._ignore_dependencies + return [r for r in candidate.iter_dependencies(with_requires) if r is not None] + + @staticmethod + def is_backtrack_cause( + identifier: str, backtrack_causes: Sequence["PreferenceInformation"] + ) -> bool: + for backtrack_cause in backtrack_causes: + if identifier == backtrack_cause.requirement.name: + return True + if backtrack_cause.parent and identifier == backtrack_cause.parent.name: + return True + return False diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py new file mode 100644 index 0000000..12adeff --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py @@ -0,0 +1,80 @@ +from collections import defaultdict +from logging import getLogger +from typing import Any, DefaultDict + +from pip._vendor.resolvelib.reporters import BaseReporter + +from .base import Candidate, Requirement + +logger = getLogger(__name__) + + +class PipReporter(BaseReporter): + def __init__(self) -> None: + self.reject_count_by_package: DefaultDict[str, int] = defaultdict(int) + + self._messages_at_reject_count = { + 1: ( + "pip is looking at multiple versions of {package_name} to " + "determine which version is compatible with other " + "requirements. This could take a while." + ), + 8: ( + "pip is still looking at multiple versions of {package_name} to " + "determine which version is compatible with other " + "requirements. This could take a while." + ), + 13: ( + "This is taking longer than usual. You might need to provide " + "the dependency resolver with stricter constraints to reduce " + "runtime. See https://pip.pypa.io/warnings/backtracking for " + "guidance. If you want to abort this run, press Ctrl + C." + ), + } + + def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None: + self.reject_count_by_package[candidate.name] += 1 + + count = self.reject_count_by_package[candidate.name] + if count not in self._messages_at_reject_count: + return + + message = self._messages_at_reject_count[count] + logger.info("INFO: %s", message.format(package_name=candidate.name)) + + msg = "Will try a different candidate, due to conflict:" + for req_info in criterion.information: + req, parent = req_info.requirement, req_info.parent + # Inspired by Factory.get_installation_error + msg += "\n " + if parent: + msg += f"{parent.name} {parent.version} depends on " + else: + msg += "The user requested " + msg += req.format_for_error() + logger.debug(msg) + + +class PipDebuggingReporter(BaseReporter): + """A reporter that does an info log for every event it sees.""" + + def starting(self) -> None: + logger.info("Reporter.starting()") + + def starting_round(self, index: int) -> None: + logger.info("Reporter.starting_round(%r)", index) + + def ending_round(self, index: int, state: Any) -> None: + logger.info("Reporter.ending_round(%r, state)", index) + + def ending(self, state: Any) -> None: + logger.info("Reporter.ending(%r)", state) + + def adding_requirement(self, requirement: Requirement, parent: Candidate) -> None: + logger.info("Reporter.adding_requirement(%r, %r)", requirement, parent) + + def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None: + logger.info("Reporter.rejecting_candidate(%r, %r)", criterion, candidate) + + def pinning(self, candidate: Candidate) -> None: + logger.info("Reporter.pinning(%r)", candidate) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py new file mode 100644 index 0000000..4af4a9f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py @@ -0,0 +1,166 @@ +from pip._vendor.packaging.specifiers import SpecifierSet +from pip._vendor.packaging.utils import NormalizedName, canonicalize_name + +from pip._internal.req.constructors import install_req_drop_extras +from pip._internal.req.req_install import InstallRequirement + +from .base import Candidate, CandidateLookup, Requirement, format_name + + +class ExplicitRequirement(Requirement): + def __init__(self, candidate: Candidate) -> None: + self.candidate = candidate + + def __str__(self) -> str: + return str(self.candidate) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self.candidate!r})" + + @property + def project_name(self) -> NormalizedName: + # No need to canonicalize - the candidate did this + return self.candidate.project_name + + @property + def name(self) -> str: + # No need to canonicalize - the candidate did this + return self.candidate.name + + def format_for_error(self) -> str: + return self.candidate.format_for_error() + + def get_candidate_lookup(self) -> CandidateLookup: + return self.candidate, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + return candidate == self.candidate + + +class SpecifierRequirement(Requirement): + def __init__(self, ireq: InstallRequirement) -> None: + assert ireq.link is None, "This is a link, not a specifier" + self._ireq = ireq + self._extras = frozenset(canonicalize_name(e) for e in self._ireq.extras) + + def __str__(self) -> str: + return str(self._ireq.req) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({str(self._ireq.req)!r})" + + @property + def project_name(self) -> NormalizedName: + assert self._ireq.req, "Specifier-backed ireq is always PEP 508" + return canonicalize_name(self._ireq.req.name) + + @property + def name(self) -> str: + return format_name(self.project_name, self._extras) + + def format_for_error(self) -> str: + # Convert comma-separated specifiers into "A, B, ..., F and G" + # This makes the specifier a bit more "human readable", without + # risking a change in meaning. (Hopefully! Not all edge cases have + # been checked) + parts = [s.strip() for s in str(self).split(",")] + if len(parts) == 0: + return "" + elif len(parts) == 1: + return parts[0] + + return ", ".join(parts[:-1]) + " and " + parts[-1] + + def get_candidate_lookup(self) -> CandidateLookup: + return None, self._ireq + + def is_satisfied_by(self, candidate: Candidate) -> bool: + assert candidate.name == self.name, ( + f"Internal issue: Candidate is not for this requirement " + f"{candidate.name} vs {self.name}" + ) + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + assert self._ireq.req, "Specifier-backed ireq is always PEP 508" + spec = self._ireq.req.specifier + return spec.contains(candidate.version, prereleases=True) + + +class SpecifierWithoutExtrasRequirement(SpecifierRequirement): + """ + Requirement backed by an install requirement on a base package. + Trims extras from its install requirement if there are any. + """ + + def __init__(self, ireq: InstallRequirement) -> None: + assert ireq.link is None, "This is a link, not a specifier" + self._ireq = install_req_drop_extras(ireq) + self._extras = frozenset(canonicalize_name(e) for e in self._ireq.extras) + + +class RequiresPythonRequirement(Requirement): + """A requirement representing Requires-Python metadata.""" + + def __init__(self, specifier: SpecifierSet, match: Candidate) -> None: + self.specifier = specifier + self._candidate = match + + def __str__(self) -> str: + return f"Python {self.specifier}" + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({str(self.specifier)!r})" + + @property + def project_name(self) -> NormalizedName: + return self._candidate.project_name + + @property + def name(self) -> str: + return self._candidate.name + + def format_for_error(self) -> str: + return str(self) + + def get_candidate_lookup(self) -> CandidateLookup: + if self.specifier.contains(self._candidate.version, prereleases=True): + return self._candidate, None + return None, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + assert candidate.name == self._candidate.name, "Not Python candidate" + # We can safely always allow prereleases here since PackageFinder + # already implements the prerelease logic, and would have filtered out + # prerelease candidates if the user does not expect them. + return self.specifier.contains(candidate.version, prereleases=True) + + +class UnsatisfiableRequirement(Requirement): + """A requirement that cannot be satisfied.""" + + def __init__(self, name: NormalizedName) -> None: + self._name = name + + def __str__(self) -> str: + return f"{self._name} (unavailable)" + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({str(self._name)!r})" + + @property + def project_name(self) -> NormalizedName: + return self._name + + @property + def name(self) -> str: + return self._name + + def format_for_error(self) -> str: + return str(self) + + def get_candidate_lookup(self) -> CandidateLookup: + return None, None + + def is_satisfied_by(self, candidate: Candidate) -> bool: + return False diff --git a/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py new file mode 100644 index 0000000..c12beef --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py @@ -0,0 +1,317 @@ +import contextlib +import functools +import logging +import os +from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple, cast + +from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.resolvelib import BaseReporter, ResolutionImpossible +from pip._vendor.resolvelib import Resolver as RLResolver +from pip._vendor.resolvelib.structs import DirectedGraph + +from pip._internal.cache import WheelCache +from pip._internal.index.package_finder import PackageFinder +from pip._internal.operations.prepare import RequirementPreparer +from pip._internal.req.constructors import install_req_extend_extras +from pip._internal.req.req_install import InstallRequirement +from pip._internal.req.req_set import RequirementSet +from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider +from pip._internal.resolution.resolvelib.provider import PipProvider +from pip._internal.resolution.resolvelib.reporter import ( + PipDebuggingReporter, + PipReporter, +) +from pip._internal.utils.packaging import get_requirement + +from .base import Candidate, Requirement +from .factory import Factory + +if TYPE_CHECKING: + from pip._vendor.resolvelib.resolvers import Result as RLResult + + Result = RLResult[Requirement, Candidate, str] + + +logger = logging.getLogger(__name__) + + +class Resolver(BaseResolver): + _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} + + def __init__( + self, + preparer: RequirementPreparer, + finder: PackageFinder, + wheel_cache: Optional[WheelCache], + make_install_req: InstallRequirementProvider, + use_user_site: bool, + ignore_dependencies: bool, + ignore_installed: bool, + ignore_requires_python: bool, + force_reinstall: bool, + upgrade_strategy: str, + py_version_info: Optional[Tuple[int, ...]] = None, + ): + super().__init__() + assert upgrade_strategy in self._allowed_strategies + + self.factory = Factory( + finder=finder, + preparer=preparer, + make_install_req=make_install_req, + wheel_cache=wheel_cache, + use_user_site=use_user_site, + force_reinstall=force_reinstall, + ignore_installed=ignore_installed, + ignore_requires_python=ignore_requires_python, + py_version_info=py_version_info, + ) + self.ignore_dependencies = ignore_dependencies + self.upgrade_strategy = upgrade_strategy + self._result: Optional[Result] = None + + def resolve( + self, root_reqs: List[InstallRequirement], check_supported_wheels: bool + ) -> RequirementSet: + collected = self.factory.collect_root_requirements(root_reqs) + provider = PipProvider( + factory=self.factory, + constraints=collected.constraints, + ignore_dependencies=self.ignore_dependencies, + upgrade_strategy=self.upgrade_strategy, + user_requested=collected.user_requested, + ) + if "PIP_RESOLVER_DEBUG" in os.environ: + reporter: BaseReporter = PipDebuggingReporter() + else: + reporter = PipReporter() + resolver: RLResolver[Requirement, Candidate, str] = RLResolver( + provider, + reporter, + ) + + try: + limit_how_complex_resolution_can_be = 200000 + result = self._result = resolver.resolve( + collected.requirements, max_rounds=limit_how_complex_resolution_can_be + ) + + except ResolutionImpossible as e: + error = self.factory.get_installation_error( + cast("ResolutionImpossible[Requirement, Candidate]", e), + collected.constraints, + ) + raise error from e + + req_set = RequirementSet(check_supported_wheels=check_supported_wheels) + # process candidates with extras last to ensure their base equivalent is + # already in the req_set if appropriate. + # Python's sort is stable so using a binary key function keeps relative order + # within both subsets. + for candidate in sorted( + result.mapping.values(), key=lambda c: c.name != c.project_name + ): + ireq = candidate.get_install_requirement() + if ireq is None: + if candidate.name != candidate.project_name: + # extend existing req's extras + with contextlib.suppress(KeyError): + req = req_set.get_requirement(candidate.project_name) + req_set.add_named_requirement( + install_req_extend_extras( + req, get_requirement(candidate.name).extras + ) + ) + continue + + # Check if there is already an installation under the same name, + # and set a flag for later stages to uninstall it, if needed. + installed_dist = self.factory.get_dist_to_uninstall(candidate) + if installed_dist is None: + # There is no existing installation -- nothing to uninstall. + ireq.should_reinstall = False + elif self.factory.force_reinstall: + # The --force-reinstall flag is set -- reinstall. + ireq.should_reinstall = True + elif installed_dist.version != candidate.version: + # The installation is different in version -- reinstall. + ireq.should_reinstall = True + elif candidate.is_editable or installed_dist.editable: + # The incoming distribution is editable, or different in + # editable-ness to installation -- reinstall. + ireq.should_reinstall = True + elif candidate.source_link and candidate.source_link.is_file: + # The incoming distribution is under file:// + if candidate.source_link.is_wheel: + # is a local wheel -- do nothing. + logger.info( + "%s is already installed with the same version as the " + "provided wheel. Use --force-reinstall to force an " + "installation of the wheel.", + ireq.name, + ) + continue + + # is a local sdist or path -- reinstall + ireq.should_reinstall = True + else: + continue + + link = candidate.source_link + if link and link.is_yanked: + # The reason can contain non-ASCII characters, Unicode + # is required for Python 2. + msg = ( + "The candidate selected for download or install is a " + "yanked version: {name!r} candidate (version {version} " + "at {link})\nReason for being yanked: {reason}" + ).format( + name=candidate.name, + version=candidate.version, + link=link, + reason=link.yanked_reason or "", + ) + logger.warning(msg) + + req_set.add_named_requirement(ireq) + + reqs = req_set.all_requirements + self.factory.preparer.prepare_linked_requirements_more(reqs) + for req in reqs: + req.prepared = True + req.needs_more_preparation = False + return req_set + + def get_installation_order( + self, req_set: RequirementSet + ) -> List[InstallRequirement]: + """Get order for installation of requirements in RequirementSet. + + The returned list contains a requirement before another that depends on + it. This helps ensure that the environment is kept consistent as they + get installed one-by-one. + + The current implementation creates a topological ordering of the + dependency graph, giving more weight to packages with less + or no dependencies, while breaking any cycles in the graph at + arbitrary points. We make no guarantees about where the cycle + would be broken, other than it *would* be broken. + """ + assert self._result is not None, "must call resolve() first" + + if not req_set.requirements: + # Nothing is left to install, so we do not need an order. + return [] + + graph = self._result.graph + weights = get_topological_weights(graph, set(req_set.requirements.keys())) + + sorted_items = sorted( + req_set.requirements.items(), + key=functools.partial(_req_set_item_sorter, weights=weights), + reverse=True, + ) + return [ireq for _, ireq in sorted_items] + + +def get_topological_weights( + graph: "DirectedGraph[Optional[str]]", requirement_keys: Set[str] +) -> Dict[Optional[str], int]: + """Assign weights to each node based on how "deep" they are. + + This implementation may change at any point in the future without prior + notice. + + We first simplify the dependency graph by pruning any leaves and giving them + the highest weight: a package without any dependencies should be installed + first. This is done again and again in the same way, giving ever less weight + to the newly found leaves. The loop stops when no leaves are left: all + remaining packages have at least one dependency left in the graph. + + Then we continue with the remaining graph, by taking the length for the + longest path to any node from root, ignoring any paths that contain a single + node twice (i.e. cycles). This is done through a depth-first search through + the graph, while keeping track of the path to the node. + + Cycles in the graph result would result in node being revisited while also + being on its own path. In this case, take no action. This helps ensure we + don't get stuck in a cycle. + + When assigning weight, the longer path (i.e. larger length) is preferred. + + We are only interested in the weights of packages that are in the + requirement_keys. + """ + path: Set[Optional[str]] = set() + weights: Dict[Optional[str], int] = {} + + def visit(node: Optional[str]) -> None: + if node in path: + # We hit a cycle, so we'll break it here. + return + + # Time to visit the children! + path.add(node) + for child in graph.iter_children(node): + visit(child) + path.remove(node) + + if node not in requirement_keys: + return + + last_known_parent_count = weights.get(node, 0) + weights[node] = max(last_known_parent_count, len(path)) + + # Simplify the graph, pruning leaves that have no dependencies. + # This is needed for large graphs (say over 200 packages) because the + # `visit` function is exponentially slower then, taking minutes. + # See https://github.com/pypa/pip/issues/10557 + # We will loop until we explicitly break the loop. + while True: + leaves = set() + for key in graph: + if key is None: + continue + for _child in graph.iter_children(key): + # This means we have at least one child + break + else: + # No child. + leaves.add(key) + if not leaves: + # We are done simplifying. + break + # Calculate the weight for the leaves. + weight = len(graph) - 1 + for leaf in leaves: + if leaf not in requirement_keys: + continue + weights[leaf] = weight + # Remove the leaves from the graph, making it simpler. + for leaf in leaves: + graph.remove(leaf) + + # Visit the remaining graph. + # `None` is guaranteed to be the root node by resolvelib. + visit(None) + + # Sanity check: all requirement keys should be in the weights, + # and no other keys should be in the weights. + difference = set(weights.keys()).difference(requirement_keys) + assert not difference, difference + + return weights + + +def _req_set_item_sorter( + item: Tuple[str, InstallRequirement], + weights: Dict[Optional[str], int], +) -> Tuple[int, str]: + """Key function used to sort install requirements for installation. + + Based on the "weight" mapping calculated in ``get_installation_order()``. + The canonical package name is returned as the second member as a tie- + breaker to ensure the result is predictable, which is useful in tests. + """ + name = canonicalize_name(item[0]) + return weights[name], name diff --git a/venv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py b/venv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py new file mode 100644 index 0000000..0f64ae0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py @@ -0,0 +1,248 @@ +import datetime +import functools +import hashlib +import json +import logging +import optparse +import os.path +import sys +from dataclasses import dataclass +from typing import Any, Callable, Dict, Optional + +from pip._vendor.packaging.version import parse as parse_version +from pip._vendor.rich.console import Group +from pip._vendor.rich.markup import escape +from pip._vendor.rich.text import Text + +from pip._internal.index.collector import LinkCollector +from pip._internal.index.package_finder import PackageFinder +from pip._internal.metadata import get_default_environment +from pip._internal.metadata.base import DistributionVersion +from pip._internal.models.selection_prefs import SelectionPreferences +from pip._internal.network.session import PipSession +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.entrypoints import ( + get_best_invocation_for_this_pip, + get_best_invocation_for_this_python, +) +from pip._internal.utils.filesystem import adjacent_tmp_file, check_path_owner, replace +from pip._internal.utils.misc import ensure_dir + +_WEEK = datetime.timedelta(days=7) + +logger = logging.getLogger(__name__) + + +def _get_statefile_name(key: str) -> str: + key_bytes = key.encode() + name = hashlib.sha224(key_bytes).hexdigest() + return name + + +def _convert_date(isodate: str) -> datetime.datetime: + """Convert an ISO format string to a date. + + Handles the format 2020-01-22T14:24:01Z (trailing Z) + which is not supported by older versions of fromisoformat. + """ + return datetime.datetime.fromisoformat(isodate.replace("Z", "+00:00")) + + +class SelfCheckState: + def __init__(self, cache_dir: str) -> None: + self._state: Dict[str, Any] = {} + self._statefile_path = None + + # Try to load the existing state + if cache_dir: + self._statefile_path = os.path.join( + cache_dir, "selfcheck", _get_statefile_name(self.key) + ) + try: + with open(self._statefile_path, encoding="utf-8") as statefile: + self._state = json.load(statefile) + except (OSError, ValueError, KeyError): + # Explicitly suppressing exceptions, since we don't want to + # error out if the cache file is invalid. + pass + + @property + def key(self) -> str: + return sys.prefix + + def get(self, current_time: datetime.datetime) -> Optional[str]: + """Check if we have a not-outdated version loaded already.""" + if not self._state: + return None + + if "last_check" not in self._state: + return None + + if "pypi_version" not in self._state: + return None + + # Determine if we need to refresh the state + last_check = _convert_date(self._state["last_check"]) + time_since_last_check = current_time - last_check + if time_since_last_check > _WEEK: + return None + + return self._state["pypi_version"] + + def set(self, pypi_version: str, current_time: datetime.datetime) -> None: + # If we do not have a path to cache in, don't bother saving. + if not self._statefile_path: + return + + # Check to make sure that we own the directory + if not check_path_owner(os.path.dirname(self._statefile_path)): + return + + # Now that we've ensured the directory is owned by this user, we'll go + # ahead and make sure that all our directories are created. + ensure_dir(os.path.dirname(self._statefile_path)) + + state = { + # Include the key so it's easy to tell which pip wrote the + # file. + "key": self.key, + "last_check": current_time.isoformat(), + "pypi_version": pypi_version, + } + + text = json.dumps(state, sort_keys=True, separators=(",", ":")) + + with adjacent_tmp_file(self._statefile_path) as f: + f.write(text.encode()) + + try: + # Since we have a prefix-specific state file, we can just + # overwrite whatever is there, no need to check. + replace(f.name, self._statefile_path) + except OSError: + # Best effort. + pass + + +@dataclass +class UpgradePrompt: + old: str + new: str + + def __rich__(self) -> Group: + if WINDOWS: + pip_cmd = f"{get_best_invocation_for_this_python()} -m pip" + else: + pip_cmd = get_best_invocation_for_this_pip() + + notice = "[bold][[reset][blue]notice[reset][bold]][reset]" + return Group( + Text(), + Text.from_markup( + f"{notice} A new release of pip is available: " + f"[red]{self.old}[reset] -> [green]{self.new}[reset]" + ), + Text.from_markup( + f"{notice} To update, run: " + f"[green]{escape(pip_cmd)} install --upgrade pip" + ), + ) + + +def was_installed_by_pip(pkg: str) -> bool: + """Checks whether pkg was installed by pip + + This is used not to display the upgrade message when pip is in fact + installed by system package manager, such as dnf on Fedora. + """ + dist = get_default_environment().get_distribution(pkg) + return dist is not None and "pip" == dist.installer + + +def _get_current_remote_pip_version( + session: PipSession, options: optparse.Values +) -> Optional[str]: + # Lets use PackageFinder to see what the latest pip version is + link_collector = LinkCollector.create( + session, + options=options, + suppress_no_index=True, + ) + + # Pass allow_yanked=False so we don't suggest upgrading to a + # yanked version. + selection_prefs = SelectionPreferences( + allow_yanked=False, + allow_all_prereleases=False, # Explicitly set to False + ) + + finder = PackageFinder.create( + link_collector=link_collector, + selection_prefs=selection_prefs, + ) + best_candidate = finder.find_best_candidate("pip").best_candidate + if best_candidate is None: + return None + + return str(best_candidate.version) + + +def _self_version_check_logic( + *, + state: SelfCheckState, + current_time: datetime.datetime, + local_version: DistributionVersion, + get_remote_version: Callable[[], Optional[str]], +) -> Optional[UpgradePrompt]: + remote_version_str = state.get(current_time) + if remote_version_str is None: + remote_version_str = get_remote_version() + if remote_version_str is None: + logger.debug("No remote pip version found") + return None + state.set(remote_version_str, current_time) + + remote_version = parse_version(remote_version_str) + logger.debug("Remote version of pip: %s", remote_version) + logger.debug("Local version of pip: %s", local_version) + + pip_installed_by_pip = was_installed_by_pip("pip") + logger.debug("Was pip installed by pip? %s", pip_installed_by_pip) + if not pip_installed_by_pip: + return None # Only suggest upgrade if pip is installed by pip. + + local_version_is_older = ( + local_version < remote_version + and local_version.base_version != remote_version.base_version + ) + if local_version_is_older: + return UpgradePrompt(old=str(local_version), new=remote_version_str) + + return None + + +def pip_self_version_check(session: PipSession, options: optparse.Values) -> None: + """Check for an update for pip. + + Limit the frequency of checks to once per week. State is stored either in + the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix + of the pip script path. + """ + installed_dist = get_default_environment().get_distribution("pip") + if not installed_dist: + return + + try: + upgrade_prompt = _self_version_check_logic( + state=SelfCheckState(cache_dir=options.cache_dir), + current_time=datetime.datetime.now(datetime.timezone.utc), + local_version=installed_dist.version, + get_remote_version=functools.partial( + _get_current_remote_pip_version, session, options + ), + ) + if upgrade_prompt is not None: + logger.warning("%s", upgrade_prompt, extra={"rich": True}) + except Exception: + logger.warning("There was an error checking the latest version of pip.") + logger.debug("See below for error", exc_info=True) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..1c2d0ff Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc new file mode 100644 index 0000000..1db6bf0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc new file mode 100644 index 0000000..82f8deb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc new file mode 100644 index 0000000..b7ee0a4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc new file mode 100644 index 0000000..031498c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc new file mode 100644 index 0000000..4e8f24c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc new file mode 100644 index 0000000..c92d748 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc new file mode 100644 index 0000000..a52c7f7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc new file mode 100644 index 0000000..ab1a9a4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc new file mode 100644 index 0000000..9ef3652 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc new file mode 100644 index 0000000..dcd3473 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc new file mode 100644 index 0000000..eb1c992 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc new file mode 100644 index 0000000..16fbcb6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc new file mode 100644 index 0000000..66856e9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc new file mode 100644 index 0000000..82c810a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc new file mode 100644 index 0000000..f4515fc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc new file mode 100644 index 0000000..a6321c7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc new file mode 100644 index 0000000..c46d27e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000..242c4cf Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc new file mode 100644 index 0000000..8a382da Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc new file mode 100644 index 0000000..866c145 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc new file mode 100644 index 0000000..3481682 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc new file mode 100644 index 0000000..e89f007 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc new file mode 100644 index 0000000..4a91a59 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000..6dd73b3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc new file mode 100644 index 0000000..92703ca Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc new file mode 100644 index 0000000..89badb2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py new file mode 100644 index 0000000..e06947c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py @@ -0,0 +1,109 @@ +"""Functions brought over from jaraco.text. + +These functions are not supposed to be used within `pip._internal`. These are +helper functions brought over from `jaraco.text` to enable vendoring newer +copies of `pkg_resources` without having to vendor `jaraco.text` and its entire +dependency cone; something that our vendoring setup is not currently capable of +handling. + +License reproduced from original source below: + +Copyright Jason R. Coombs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +import functools +import itertools + + +def _nonblank(str): + return str and not str.startswith("#") + + +@functools.singledispatch +def yield_lines(iterable): + r""" + Yield valid lines of a string or iterable. + + >>> list(yield_lines('')) + [] + >>> list(yield_lines(['foo', 'bar'])) + ['foo', 'bar'] + >>> list(yield_lines('foo\nbar')) + ['foo', 'bar'] + >>> list(yield_lines('\nfoo\n#bar\nbaz #comment')) + ['foo', 'baz #comment'] + >>> list(yield_lines(['foo\nbar', 'baz', 'bing\n\n\n'])) + ['foo', 'bar', 'baz', 'bing'] + """ + return itertools.chain.from_iterable(map(yield_lines, iterable)) + + +@yield_lines.register(str) +def _(text): + return filter(_nonblank, map(str.strip, text.splitlines())) + + +def drop_comment(line): + """ + Drop comments. + + >>> drop_comment('foo # bar') + 'foo' + + A hash without a space may be in a URL. + + >>> drop_comment('http://example.com/foo#bar') + 'http://example.com/foo#bar' + """ + return line.partition(" #")[0] + + +def join_continuation(lines): + r""" + Join lines continued by a trailing backslash. + + >>> list(join_continuation(['foo \\', 'bar', 'baz'])) + ['foobar', 'baz'] + >>> list(join_continuation(['foo \\', 'bar', 'baz'])) + ['foobar', 'baz'] + >>> list(join_continuation(['foo \\', 'bar \\', 'baz'])) + ['foobarbaz'] + + Not sure why, but... + The character preceeding the backslash is also elided. + + >>> list(join_continuation(['goo\\', 'dly'])) + ['godly'] + + A terrible idea, but... + If no line is available to continue, suppress the lines. + + >>> list(join_continuation(['foo', 'bar\\', 'baz\\'])) + ['foo'] + """ + lines = iter(lines) + for item in lines: + while item.endswith("\\"): + try: + item = item[:-2].strip() + next(lines) + except StopIteration: + return + yield item diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/_log.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/_log.py new file mode 100644 index 0000000..92c4c6a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/_log.py @@ -0,0 +1,38 @@ +"""Customize logging + +Defines custom logger class for the `logger.verbose(...)` method. + +init_logging() must be called before any other modules that call logging.getLogger. +""" + +import logging +from typing import Any, cast + +# custom log level for `--verbose` output +# between DEBUG and INFO +VERBOSE = 15 + + +class VerboseLogger(logging.Logger): + """Custom Logger, defining a verbose log-level + + VERBOSE is between INFO and DEBUG. + """ + + def verbose(self, msg: str, *args: Any, **kwargs: Any) -> None: + return self.log(VERBOSE, msg, *args, **kwargs) + + +def getLogger(name: str) -> VerboseLogger: + """logging.getLogger, but ensures our VerboseLogger class is returned""" + return cast(VerboseLogger, logging.getLogger(name)) + + +def init_logging() -> None: + """Register our VerboseLogger and VERBOSE log level. + + Should be called before any calls to getLogger(), + i.e. in pip._internal.__init__ + """ + logging.setLoggerClass(VerboseLogger) + logging.addLevelName(VERBOSE, "VERBOSE") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py new file mode 100644 index 0000000..16933bf --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py @@ -0,0 +1,52 @@ +""" +This code wraps the vendored appdirs module to so the return values are +compatible for the current pip code base. + +The intention is to rewrite current usages gradually, keeping the tests pass, +and eventually drop this after all usages are changed. +""" + +import os +import sys +from typing import List + +from pip._vendor import platformdirs as _appdirs + + +def user_cache_dir(appname: str) -> str: + return _appdirs.user_cache_dir(appname, appauthor=False) + + +def _macos_user_config_dir(appname: str, roaming: bool = True) -> str: + # Use ~/Application Support/pip, if the directory exists. + path = _appdirs.user_data_dir(appname, appauthor=False, roaming=roaming) + if os.path.isdir(path): + return path + + # Use a Linux-like ~/.config/pip, by default. + linux_like_path = "~/.config/" + if appname: + linux_like_path = os.path.join(linux_like_path, appname) + + return os.path.expanduser(linux_like_path) + + +def user_config_dir(appname: str, roaming: bool = True) -> str: + if sys.platform == "darwin": + return _macos_user_config_dir(appname, roaming) + + return _appdirs.user_config_dir(appname, appauthor=False, roaming=roaming) + + +# for the discussion regarding site_config_dir locations +# see +def site_config_dirs(appname: str) -> List[str]: + if sys.platform == "darwin": + return [_appdirs.site_data_dir(appname, appauthor=False, multipath=True)] + + dirval = _appdirs.site_config_dir(appname, appauthor=False, multipath=True) + if sys.platform == "win32": + return [dirval] + + # Unix-y system. Look in /etc as well. + return dirval.split(os.pathsep) + ["/etc"] diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/compat.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/compat.py new file mode 100644 index 0000000..3f4d300 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/compat.py @@ -0,0 +1,63 @@ +"""Stuff that differs in different Python versions and platform +distributions.""" + +import logging +import os +import sys + +__all__ = ["get_path_uid", "stdlib_pkgs", "WINDOWS"] + + +logger = logging.getLogger(__name__) + + +def has_tls() -> bool: + try: + import _ssl # noqa: F401 # ignore unused + + return True + except ImportError: + pass + + from pip._vendor.urllib3.util import IS_PYOPENSSL + + return IS_PYOPENSSL + + +def get_path_uid(path: str) -> int: + """ + Return path's uid. + + Does not follow symlinks: + https://github.com/pypa/pip/pull/935#discussion_r5307003 + + Placed this function in compat due to differences on AIX and + Jython, that should eventually go away. + + :raises OSError: When path is a symlink or can't be read. + """ + if hasattr(os, "O_NOFOLLOW"): + fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) + file_uid = os.fstat(fd).st_uid + os.close(fd) + else: # AIX and Jython + # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW + if not os.path.islink(path): + # older versions of Jython don't have `os.fstat` + file_uid = os.stat(path).st_uid + else: + # raise OSError for parity with os.O_NOFOLLOW above + raise OSError(f"{path} is a symlink; Will not return uid for symlinks") + return file_uid + + +# packages in the stdlib that may have installation metadata, but should not be +# considered 'installed'. this theoretically could be determined based on +# dist.location (py27:`sysconfig.get_paths()['stdlib']`, +# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may +# make this ineffective, so hard-coding +stdlib_pkgs = {"python", "wsgiref", "argparse"} + + +# windows detection, covers cpython and ironpython +WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py new file mode 100644 index 0000000..b6ed9a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py @@ -0,0 +1,165 @@ +"""Generate and work with PEP 425 Compatibility Tags. +""" + +import re +from typing import List, Optional, Tuple + +from pip._vendor.packaging.tags import ( + PythonVersion, + Tag, + compatible_tags, + cpython_tags, + generic_tags, + interpreter_name, + interpreter_version, + mac_platforms, +) + +_osx_arch_pat = re.compile(r"(.+)_(\d+)_(\d+)_(.+)") + + +def version_info_to_nodot(version_info: Tuple[int, ...]) -> str: + # Only use up to the first two numbers. + return "".join(map(str, version_info[:2])) + + +def _mac_platforms(arch: str) -> List[str]: + match = _osx_arch_pat.match(arch) + if match: + name, major, minor, actual_arch = match.groups() + mac_version = (int(major), int(minor)) + arches = [ + # Since we have always only checked that the platform starts + # with "macosx", for backwards-compatibility we extract the + # actual prefix provided by the user in case they provided + # something like "macosxcustom_". It may be good to remove + # this as undocumented or deprecate it in the future. + "{}_{}".format(name, arch[len("macosx_") :]) + for arch in mac_platforms(mac_version, actual_arch) + ] + else: + # arch pattern didn't match (?!) + arches = [arch] + return arches + + +def _custom_manylinux_platforms(arch: str) -> List[str]: + arches = [arch] + arch_prefix, arch_sep, arch_suffix = arch.partition("_") + if arch_prefix == "manylinux2014": + # manylinux1/manylinux2010 wheels run on most manylinux2014 systems + # with the exception of wheels depending on ncurses. PEP 599 states + # manylinux1/manylinux2010 wheels should be considered + # manylinux2014 wheels: + # https://www.python.org/dev/peps/pep-0599/#backwards-compatibility-with-manylinux2010-wheels + if arch_suffix in {"i686", "x86_64"}: + arches.append("manylinux2010" + arch_sep + arch_suffix) + arches.append("manylinux1" + arch_sep + arch_suffix) + elif arch_prefix == "manylinux2010": + # manylinux1 wheels run on most manylinux2010 systems with the + # exception of wheels depending on ncurses. PEP 571 states + # manylinux1 wheels should be considered manylinux2010 wheels: + # https://www.python.org/dev/peps/pep-0571/#backwards-compatibility-with-manylinux1-wheels + arches.append("manylinux1" + arch_sep + arch_suffix) + return arches + + +def _get_custom_platforms(arch: str) -> List[str]: + arch_prefix, arch_sep, arch_suffix = arch.partition("_") + if arch.startswith("macosx"): + arches = _mac_platforms(arch) + elif arch_prefix in ["manylinux2014", "manylinux2010"]: + arches = _custom_manylinux_platforms(arch) + else: + arches = [arch] + return arches + + +def _expand_allowed_platforms(platforms: Optional[List[str]]) -> Optional[List[str]]: + if not platforms: + return None + + seen = set() + result = [] + + for p in platforms: + if p in seen: + continue + additions = [c for c in _get_custom_platforms(p) if c not in seen] + seen.update(additions) + result.extend(additions) + + return result + + +def _get_python_version(version: str) -> PythonVersion: + if len(version) > 1: + return int(version[0]), int(version[1:]) + else: + return (int(version[0]),) + + +def _get_custom_interpreter( + implementation: Optional[str] = None, version: Optional[str] = None +) -> str: + if implementation is None: + implementation = interpreter_name() + if version is None: + version = interpreter_version() + return f"{implementation}{version}" + + +def get_supported( + version: Optional[str] = None, + platforms: Optional[List[str]] = None, + impl: Optional[str] = None, + abis: Optional[List[str]] = None, +) -> List[Tag]: + """Return a list of supported tags for each version specified in + `versions`. + + :param version: a string version, of the form "33" or "32", + or None. The version will be assumed to support our ABI. + :param platform: specify a list of platforms you want valid + tags for, or None. If None, use the local system platform. + :param impl: specify the exact implementation you want valid + tags for, or None. If None, use the local interpreter impl. + :param abis: specify a list of abis you want valid + tags for, or None. If None, use the local interpreter abi. + """ + supported: List[Tag] = [] + + python_version: Optional[PythonVersion] = None + if version is not None: + python_version = _get_python_version(version) + + interpreter = _get_custom_interpreter(impl, version) + + platforms = _expand_allowed_platforms(platforms) + + is_cpython = (impl or interpreter_name()) == "cp" + if is_cpython: + supported.extend( + cpython_tags( + python_version=python_version, + abis=abis, + platforms=platforms, + ) + ) + else: + supported.extend( + generic_tags( + interpreter=interpreter, + abis=abis, + platforms=platforms, + ) + ) + supported.extend( + compatible_tags( + python_version=python_version, + interpreter=interpreter, + platforms=platforms, + ) + ) + + return supported diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/datetime.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/datetime.py new file mode 100644 index 0000000..8668b3b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/datetime.py @@ -0,0 +1,11 @@ +"""For when pip wants to check the date or time. +""" + +import datetime + + +def today_is_later_than(year: int, month: int, day: int) -> bool: + today = datetime.date.today() + given = datetime.date(year, month, day) + + return today > given diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py new file mode 100644 index 0000000..72bd6f2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py @@ -0,0 +1,120 @@ +""" +A module that implements tooling to enable easy warnings about deprecations. +""" + +import logging +import warnings +from typing import Any, Optional, TextIO, Type, Union + +from pip._vendor.packaging.version import parse + +from pip import __version__ as current_version # NOTE: tests patch this name. + +DEPRECATION_MSG_PREFIX = "DEPRECATION: " + + +class PipDeprecationWarning(Warning): + pass + + +_original_showwarning: Any = None + + +# Warnings <-> Logging Integration +def _showwarning( + message: Union[Warning, str], + category: Type[Warning], + filename: str, + lineno: int, + file: Optional[TextIO] = None, + line: Optional[str] = None, +) -> None: + if file is not None: + if _original_showwarning is not None: + _original_showwarning(message, category, filename, lineno, file, line) + elif issubclass(category, PipDeprecationWarning): + # We use a specially named logger which will handle all of the + # deprecation messages for pip. + logger = logging.getLogger("pip._internal.deprecations") + logger.warning(message) + else: + _original_showwarning(message, category, filename, lineno, file, line) + + +def install_warning_logger() -> None: + # Enable our Deprecation Warnings + warnings.simplefilter("default", PipDeprecationWarning, append=True) + + global _original_showwarning + + if _original_showwarning is None: + _original_showwarning = warnings.showwarning + warnings.showwarning = _showwarning + + +def deprecated( + *, + reason: str, + replacement: Optional[str], + gone_in: Optional[str], + feature_flag: Optional[str] = None, + issue: Optional[int] = None, +) -> None: + """Helper to deprecate existing functionality. + + reason: + Textual reason shown to the user about why this functionality has + been deprecated. Should be a complete sentence. + replacement: + Textual suggestion shown to the user about what alternative + functionality they can use. + gone_in: + The version of pip does this functionality should get removed in. + Raises an error if pip's current version is greater than or equal to + this. + feature_flag: + Command-line flag of the form --use-feature={feature_flag} for testing + upcoming functionality. + issue: + Issue number on the tracker that would serve as a useful place for + users to find related discussion and provide feedback. + """ + + # Determine whether or not the feature is already gone in this version. + is_gone = gone_in is not None and parse(current_version) >= parse(gone_in) + + message_parts = [ + (reason, f"{DEPRECATION_MSG_PREFIX}{{}}"), + ( + gone_in, + "pip {} will enforce this behaviour change." + if not is_gone + else "Since pip {}, this is no longer supported.", + ), + ( + replacement, + "A possible replacement is {}.", + ), + ( + feature_flag, + "You can use the flag --use-feature={} to test the upcoming behaviour." + if not is_gone + else None, + ), + ( + issue, + "Discussion can be found at https://github.com/pypa/pip/issues/{}", + ), + ] + + message = " ".join( + format_str.format(value) + for value, format_str in message_parts + if format_str is not None and value is not None + ) + + # Raise as an error if this behaviour is deprecated. + if is_gone: + raise PipDeprecationWarning(message) + + warnings.warn(message, category=PipDeprecationWarning, stacklevel=2) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py new file mode 100644 index 0000000..0e8e5e1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py @@ -0,0 +1,87 @@ +from typing import Optional + +from pip._internal.models.direct_url import ArchiveInfo, DirectUrl, DirInfo, VcsInfo +from pip._internal.models.link import Link +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs import vcs + + +def direct_url_as_pep440_direct_reference(direct_url: DirectUrl, name: str) -> str: + """Convert a DirectUrl to a pip requirement string.""" + direct_url.validate() # if invalid, this is a pip bug + requirement = name + " @ " + fragments = [] + if isinstance(direct_url.info, VcsInfo): + requirement += "{}+{}@{}".format( + direct_url.info.vcs, direct_url.url, direct_url.info.commit_id + ) + elif isinstance(direct_url.info, ArchiveInfo): + requirement += direct_url.url + if direct_url.info.hash: + fragments.append(direct_url.info.hash) + else: + assert isinstance(direct_url.info, DirInfo) + requirement += direct_url.url + if direct_url.subdirectory: + fragments.append("subdirectory=" + direct_url.subdirectory) + if fragments: + requirement += "#" + "&".join(fragments) + return requirement + + +def direct_url_for_editable(source_dir: str) -> DirectUrl: + return DirectUrl( + url=path_to_url(source_dir), + info=DirInfo(editable=True), + ) + + +def direct_url_from_link( + link: Link, source_dir: Optional[str] = None, link_is_in_wheel_cache: bool = False +) -> DirectUrl: + if link.is_vcs: + vcs_backend = vcs.get_backend_for_scheme(link.scheme) + assert vcs_backend + url, requested_revision, _ = vcs_backend.get_url_rev_and_auth( + link.url_without_fragment + ) + # For VCS links, we need to find out and add commit_id. + if link_is_in_wheel_cache: + # If the requested VCS link corresponds to a cached + # wheel, it means the requested revision was an + # immutable commit hash, otherwise it would not have + # been cached. In that case we don't have a source_dir + # with the VCS checkout. + assert requested_revision + commit_id = requested_revision + else: + # If the wheel was not in cache, it means we have + # had to checkout from VCS to build and we have a source_dir + # which we can inspect to find out the commit id. + assert source_dir + commit_id = vcs_backend.get_revision(source_dir) + return DirectUrl( + url=url, + info=VcsInfo( + vcs=vcs_backend.name, + commit_id=commit_id, + requested_revision=requested_revision, + ), + subdirectory=link.subdirectory_fragment, + ) + elif link.is_existing_dir(): + return DirectUrl( + url=link.url_without_fragment, + info=DirInfo(), + subdirectory=link.subdirectory_fragment, + ) + else: + hash = None + hash_name = link.hash_name + if hash_name: + hash = f"{hash_name}={link.hash}" + return DirectUrl( + url=link.url_without_fragment, + info=ArchiveInfo(hash=hash), + subdirectory=link.subdirectory_fragment, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py new file mode 100644 index 0000000..4a384a6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py @@ -0,0 +1,80 @@ +import os +import re +import sys +from typing import List, Optional + +from pip._internal.locations import site_packages, user_site +from pip._internal.utils.virtualenv import ( + running_under_virtualenv, + virtualenv_no_global, +) + +__all__ = [ + "egg_link_path_from_sys_path", + "egg_link_path_from_location", +] + + +def _egg_link_names(raw_name: str) -> List[str]: + """ + Convert a Name metadata value to a .egg-link name, by applying + the same substitution as pkg_resources's safe_name function. + Note: we cannot use canonicalize_name because it has a different logic. + + We also look for the raw name (without normalization) as setuptools 69 changed + the way it names .egg-link files (https://github.com/pypa/setuptools/issues/4167). + """ + return [ + re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link", + f"{raw_name}.egg-link", + ] + + +def egg_link_path_from_sys_path(raw_name: str) -> Optional[str]: + """ + Look for a .egg-link file for project name, by walking sys.path. + """ + egg_link_names = _egg_link_names(raw_name) + for path_item in sys.path: + for egg_link_name in egg_link_names: + egg_link = os.path.join(path_item, egg_link_name) + if os.path.isfile(egg_link): + return egg_link + return None + + +def egg_link_path_from_location(raw_name: str) -> Optional[str]: + """ + Return the path for the .egg-link file if it exists, otherwise, None. + + There's 3 scenarios: + 1) not in a virtualenv + try to find in site.USER_SITE, then site_packages + 2) in a no-global virtualenv + try to find in site_packages + 3) in a yes-global virtualenv + try to find in site_packages, then site.USER_SITE + (don't look in global location) + + For #1 and #3, there could be odd cases, where there's an egg-link in 2 + locations. + + This method will just return the first one found. + """ + sites: List[str] = [] + if running_under_virtualenv(): + sites.append(site_packages) + if not virtualenv_no_global() and user_site: + sites.append(user_site) + else: + if user_site: + sites.append(user_site) + sites.append(site_packages) + + egg_link_names = _egg_link_names(raw_name) + for site in sites: + for egg_link_name in egg_link_names: + egglink = os.path.join(site, egg_link_name) + if os.path.isfile(egglink): + return egglink + return None diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/encoding.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/encoding.py new file mode 100644 index 0000000..008f06a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/encoding.py @@ -0,0 +1,36 @@ +import codecs +import locale +import re +import sys +from typing import List, Tuple + +BOMS: List[Tuple[bytes, str]] = [ + (codecs.BOM_UTF8, "utf-8"), + (codecs.BOM_UTF16, "utf-16"), + (codecs.BOM_UTF16_BE, "utf-16-be"), + (codecs.BOM_UTF16_LE, "utf-16-le"), + (codecs.BOM_UTF32, "utf-32"), + (codecs.BOM_UTF32_BE, "utf-32-be"), + (codecs.BOM_UTF32_LE, "utf-32-le"), +] + +ENCODING_RE = re.compile(rb"coding[:=]\s*([-\w.]+)") + + +def auto_decode(data: bytes) -> str: + """Check a bytes string for a BOM to correctly detect the encoding + + Fallback to locale.getpreferredencoding(False) like open() on Python3""" + for bom, encoding in BOMS: + if data.startswith(bom): + return data[len(bom) :].decode(encoding) + # Lets check the first two lines as in PEP263 + for line in data.split(b"\n")[:2]: + if line[0:1] == b"#" and ENCODING_RE.search(line): + result = ENCODING_RE.search(line) + assert result is not None + encoding = result.groups()[0].decode("ascii") + return data.decode(encoding) + return data.decode( + locale.getpreferredencoding(False) or sys.getdefaultencoding(), + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py new file mode 100644 index 0000000..1501369 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py @@ -0,0 +1,84 @@ +import itertools +import os +import shutil +import sys +from typing import List, Optional + +from pip._internal.cli.main import main +from pip._internal.utils.compat import WINDOWS + +_EXECUTABLE_NAMES = [ + "pip", + f"pip{sys.version_info.major}", + f"pip{sys.version_info.major}.{sys.version_info.minor}", +] +if WINDOWS: + _allowed_extensions = {"", ".exe"} + _EXECUTABLE_NAMES = [ + "".join(parts) + for parts in itertools.product(_EXECUTABLE_NAMES, _allowed_extensions) + ] + + +def _wrapper(args: Optional[List[str]] = None) -> int: + """Central wrapper for all old entrypoints. + + Historically pip has had several entrypoints defined. Because of issues + arising from PATH, sys.path, multiple Pythons, their interactions, and most + of them having a pip installed, users suffer every time an entrypoint gets + moved. + + To alleviate this pain, and provide a mechanism for warning users and + directing them to an appropriate place for help, we now define all of + our old entrypoints as wrappers for the current one. + """ + sys.stderr.write( + "WARNING: pip is being invoked by an old script wrapper. This will " + "fail in a future version of pip.\n" + "Please see https://github.com/pypa/pip/issues/5599 for advice on " + "fixing the underlying issue.\n" + "To avoid this problem you can invoke Python with '-m pip' instead of " + "running pip directly.\n" + ) + return main(args) + + +def get_best_invocation_for_this_pip() -> str: + """Try to figure out the best way to invoke pip in the current environment.""" + binary_directory = "Scripts" if WINDOWS else "bin" + binary_prefix = os.path.join(sys.prefix, binary_directory) + + # Try to use pip[X[.Y]] names, if those executables for this environment are + # the first on PATH with that name. + path_parts = os.path.normcase(os.environ.get("PATH", "")).split(os.pathsep) + exe_are_in_PATH = os.path.normcase(binary_prefix) in path_parts + if exe_are_in_PATH: + for exe_name in _EXECUTABLE_NAMES: + found_executable = shutil.which(exe_name) + binary_executable = os.path.join(binary_prefix, exe_name) + if ( + found_executable + and os.path.exists(binary_executable) + and os.path.samefile( + found_executable, + binary_executable, + ) + ): + return exe_name + + # Use the `-m` invocation, if there's no "nice" invocation. + return f"{get_best_invocation_for_this_python()} -m pip" + + +def get_best_invocation_for_this_python() -> str: + """Try to figure out the best way to invoke the current Python.""" + exe = sys.executable + exe_name = os.path.basename(exe) + + # Try to use the basename, if it's the first executable. + found_executable = shutil.which(exe_name) + if found_executable and os.path.samefile(found_executable, exe): + return exe_name + + # Use the full executable name, because we couldn't find something simpler. + return exe diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py new file mode 100644 index 0000000..83c2df7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py @@ -0,0 +1,153 @@ +import fnmatch +import os +import os.path +import random +import sys +from contextlib import contextmanager +from tempfile import NamedTemporaryFile +from typing import Any, BinaryIO, Generator, List, Union, cast + +from pip._vendor.tenacity import retry, stop_after_delay, wait_fixed + +from pip._internal.utils.compat import get_path_uid +from pip._internal.utils.misc import format_size + + +def check_path_owner(path: str) -> bool: + # If we don't have a way to check the effective uid of this process, then + # we'll just assume that we own the directory. + if sys.platform == "win32" or not hasattr(os, "geteuid"): + return True + + assert os.path.isabs(path) + + previous = None + while path != previous: + if os.path.lexists(path): + # Check if path is writable by current user. + if os.geteuid() == 0: + # Special handling for root user in order to handle properly + # cases where users use sudo without -H flag. + try: + path_uid = get_path_uid(path) + except OSError: + return False + return path_uid == 0 + else: + return os.access(path, os.W_OK) + else: + previous, path = path, os.path.dirname(path) + return False # assume we don't own the path + + +@contextmanager +def adjacent_tmp_file(path: str, **kwargs: Any) -> Generator[BinaryIO, None, None]: + """Return a file-like object pointing to a tmp file next to path. + + The file is created securely and is ensured to be written to disk + after the context reaches its end. + + kwargs will be passed to tempfile.NamedTemporaryFile to control + the way the temporary file will be opened. + """ + with NamedTemporaryFile( + delete=False, + dir=os.path.dirname(path), + prefix=os.path.basename(path), + suffix=".tmp", + **kwargs, + ) as f: + result = cast(BinaryIO, f) + try: + yield result + finally: + result.flush() + os.fsync(result.fileno()) + + +# Tenacity raises RetryError by default, explicitly raise the original exception +_replace_retry = retry(reraise=True, stop=stop_after_delay(1), wait=wait_fixed(0.25)) + +replace = _replace_retry(os.replace) + + +# test_writable_dir and _test_writable_dir_win are copied from Flit, +# with the author's agreement to also place them under pip's license. +def test_writable_dir(path: str) -> bool: + """Check if a directory is writable. + + Uses os.access() on POSIX, tries creating files on Windows. + """ + # If the directory doesn't exist, find the closest parent that does. + while not os.path.isdir(path): + parent = os.path.dirname(path) + if parent == path: + break # Should never get here, but infinite loops are bad + path = parent + + if os.name == "posix": + return os.access(path, os.W_OK) + + return _test_writable_dir_win(path) + + +def _test_writable_dir_win(path: str) -> bool: + # os.access doesn't work on Windows: http://bugs.python.org/issue2528 + # and we can't use tempfile: http://bugs.python.org/issue22107 + basename = "accesstest_deleteme_fishfingers_custard_" + alphabet = "abcdefghijklmnopqrstuvwxyz0123456789" + for _ in range(10): + name = basename + "".join(random.choice(alphabet) for _ in range(6)) + file = os.path.join(path, name) + try: + fd = os.open(file, os.O_RDWR | os.O_CREAT | os.O_EXCL) + except FileExistsError: + pass + except PermissionError: + # This could be because there's a directory with the same name. + # But it's highly unlikely there's a directory called that, + # so we'll assume it's because the parent dir is not writable. + # This could as well be because the parent dir is not readable, + # due to non-privileged user access. + return False + else: + os.close(fd) + os.unlink(file) + return True + + # This should never be reached + raise OSError("Unexpected condition testing for writable directory") + + +def find_files(path: str, pattern: str) -> List[str]: + """Returns a list of absolute paths of files beneath path, recursively, + with filenames which match the UNIX-style shell glob pattern.""" + result: List[str] = [] + for root, _, files in os.walk(path): + matches = fnmatch.filter(files, pattern) + result.extend(os.path.join(root, f) for f in matches) + return result + + +def file_size(path: str) -> Union[int, float]: + # If it's a symlink, return 0. + if os.path.islink(path): + return 0 + return os.path.getsize(path) + + +def format_file_size(path: str) -> str: + return format_size(file_size(path)) + + +def directory_size(path: str) -> Union[int, float]: + size = 0.0 + for root, _dirs, files in os.walk(path): + for filename in files: + file_path = os.path.join(root, filename) + size += file_size(file_path) + return size + + +def format_directory_size(path: str) -> str: + return format_size(directory_size(path)) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py new file mode 100644 index 0000000..5948570 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py @@ -0,0 +1,27 @@ +"""Filetype information. +""" + +from typing import Tuple + +from pip._internal.utils.misc import splitext + +WHEEL_EXTENSION = ".whl" +BZ2_EXTENSIONS: Tuple[str, ...] = (".tar.bz2", ".tbz") +XZ_EXTENSIONS: Tuple[str, ...] = ( + ".tar.xz", + ".txz", + ".tlz", + ".tar.lz", + ".tar.lzma", +) +ZIP_EXTENSIONS: Tuple[str, ...] = (".zip", WHEEL_EXTENSION) +TAR_EXTENSIONS: Tuple[str, ...] = (".tar.gz", ".tgz", ".tar") +ARCHIVE_EXTENSIONS = ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS + + +def is_archive_file(name: str) -> bool: + """Return True if `name` is a considered as an archive file.""" + ext = splitext(name)[1].lower() + if ext in ARCHIVE_EXTENSIONS: + return True + return False diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py new file mode 100644 index 0000000..81342af --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py @@ -0,0 +1,88 @@ +import os +import sys +from typing import Optional, Tuple + + +def glibc_version_string() -> Optional[str]: + "Returns glibc version string, or None if not using glibc." + return glibc_version_string_confstr() or glibc_version_string_ctypes() + + +def glibc_version_string_confstr() -> Optional[str]: + "Primary implementation of glibc_version_string using os.confstr." + # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely + # to be broken or missing. This strategy is used in the standard library + # platform module: + # https://github.com/python/cpython/blob/fcf1d003bf4f0100c9d0921ff3d70e1127ca1b71/Lib/platform.py#L175-L183 + if sys.platform == "win32": + return None + try: + gnu_libc_version = os.confstr("CS_GNU_LIBC_VERSION") + if gnu_libc_version is None: + return None + # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17": + _, version = gnu_libc_version.split() + except (AttributeError, OSError, ValueError): + # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... + return None + return version + + +def glibc_version_string_ctypes() -> Optional[str]: + "Fallback implementation of glibc_version_string using ctypes." + + try: + import ctypes + except ImportError: + return None + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. + process_namespace = ctypes.CDLL(None) + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: + # Symbol doesn't exist -> therefore, we are not linked to + # glibc. + return None + + # Call gnu_get_libc_version, which returns a string like "2.5" + gnu_get_libc_version.restype = ctypes.c_char_p + version_str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +# platform.libc_ver regularly returns completely nonsensical glibc +# versions. E.g. on my computer, platform says: +# +# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.7') +# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' +# ('glibc', '2.9') +# +# But the truth is: +# +# ~$ ldd --version +# ldd (Debian GLIBC 2.22-11) 2.22 +# +# This is unfortunate, because it means that the linehaul data on libc +# versions that was generated by pip 8.1.2 and earlier is useless and +# misleading. Solution: instead of using platform, use our code that actually +# works. +def libc_ver() -> Tuple[str, str]: + """Try to determine the glibc version + + Returns a tuple of strings (lib, version) which default to empty strings + in case the lookup fails. + """ + glibc_version = glibc_version_string() + if glibc_version is None: + return ("", "") + else: + return ("glibc", glibc_version) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py new file mode 100644 index 0000000..843cffc --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py @@ -0,0 +1,151 @@ +import hashlib +from typing import TYPE_CHECKING, BinaryIO, Dict, Iterable, List, Optional + +from pip._internal.exceptions import HashMismatch, HashMissing, InstallationError +from pip._internal.utils.misc import read_chunks + +if TYPE_CHECKING: + from hashlib import _Hash + + # NoReturn introduced in 3.6.2; imported only for type checking to maintain + # pip compatibility with older patch versions of Python 3.6 + from typing import NoReturn + + +# The recommended hash algo of the moment. Change this whenever the state of +# the art changes; it won't hurt backward compatibility. +FAVORITE_HASH = "sha256" + + +# Names of hashlib algorithms allowed by the --hash option and ``pip hash`` +# Currently, those are the ones at least as collision-resistant as sha256. +STRONG_HASHES = ["sha256", "sha384", "sha512"] + + +class Hashes: + """A wrapper that builds multiple hashes at once and checks them against + known-good values + + """ + + def __init__(self, hashes: Optional[Dict[str, List[str]]] = None) -> None: + """ + :param hashes: A dict of algorithm names pointing to lists of allowed + hex digests + """ + allowed = {} + if hashes is not None: + for alg, keys in hashes.items(): + # Make sure values are always sorted (to ease equality checks) + allowed[alg] = sorted(keys) + self._allowed = allowed + + def __and__(self, other: "Hashes") -> "Hashes": + if not isinstance(other, Hashes): + return NotImplemented + + # If either of the Hashes object is entirely empty (i.e. no hash + # specified at all), all hashes from the other object are allowed. + if not other: + return self + if not self: + return other + + # Otherwise only hashes that present in both objects are allowed. + new = {} + for alg, values in other._allowed.items(): + if alg not in self._allowed: + continue + new[alg] = [v for v in values if v in self._allowed[alg]] + return Hashes(new) + + @property + def digest_count(self) -> int: + return sum(len(digests) for digests in self._allowed.values()) + + def is_hash_allowed(self, hash_name: str, hex_digest: str) -> bool: + """Return whether the given hex digest is allowed.""" + return hex_digest in self._allowed.get(hash_name, []) + + def check_against_chunks(self, chunks: Iterable[bytes]) -> None: + """Check good hashes against ones built from iterable of chunks of + data. + + Raise HashMismatch if none match. + + """ + gots = {} + for hash_name in self._allowed.keys(): + try: + gots[hash_name] = hashlib.new(hash_name) + except (ValueError, TypeError): + raise InstallationError(f"Unknown hash name: {hash_name}") + + for chunk in chunks: + for hash in gots.values(): + hash.update(chunk) + + for hash_name, got in gots.items(): + if got.hexdigest() in self._allowed[hash_name]: + return + self._raise(gots) + + def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn": + raise HashMismatch(self._allowed, gots) + + def check_against_file(self, file: BinaryIO) -> None: + """Check good hashes against a file-like object + + Raise HashMismatch if none match. + + """ + return self.check_against_chunks(read_chunks(file)) + + def check_against_path(self, path: str) -> None: + with open(path, "rb") as file: + return self.check_against_file(file) + + def has_one_of(self, hashes: Dict[str, str]) -> bool: + """Return whether any of the given hashes are allowed.""" + for hash_name, hex_digest in hashes.items(): + if self.is_hash_allowed(hash_name, hex_digest): + return True + return False + + def __bool__(self) -> bool: + """Return whether I know any known-good hashes.""" + return bool(self._allowed) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Hashes): + return NotImplemented + return self._allowed == other._allowed + + def __hash__(self) -> int: + return hash( + ",".join( + sorted( + ":".join((alg, digest)) + for alg, digest_list in self._allowed.items() + for digest in digest_list + ) + ) + ) + + +class MissingHashes(Hashes): + """A workalike for Hashes used when we're missing a hash for a requirement + + It computes the actual hash of the requirement and raises a HashMissing + exception showing it to the user. + + """ + + def __init__(self) -> None: + """Don't offer the ``hashes`` kwarg.""" + # Pass our favorite hash in to generate a "gotten hash". With the + # empty list, it will never match, so an error will always raise. + super().__init__(hashes={FAVORITE_HASH: []}) + + def _raise(self, gots: Dict[str, "_Hash"]) -> "NoReturn": + raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/logging.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/logging.py new file mode 100644 index 0000000..95982df --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/logging.py @@ -0,0 +1,348 @@ +import contextlib +import errno +import logging +import logging.handlers +import os +import sys +import threading +from dataclasses import dataclass +from io import TextIOWrapper +from logging import Filter +from typing import Any, ClassVar, Generator, List, Optional, TextIO, Type + +from pip._vendor.rich.console import ( + Console, + ConsoleOptions, + ConsoleRenderable, + RenderableType, + RenderResult, + RichCast, +) +from pip._vendor.rich.highlighter import NullHighlighter +from pip._vendor.rich.logging import RichHandler +from pip._vendor.rich.segment import Segment +from pip._vendor.rich.style import Style + +from pip._internal.utils._log import VERBOSE, getLogger +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX +from pip._internal.utils.misc import ensure_dir + +_log_state = threading.local() +subprocess_logger = getLogger("pip.subprocessor") + + +class BrokenStdoutLoggingError(Exception): + """ + Raised if BrokenPipeError occurs for the stdout stream while logging. + """ + + +def _is_broken_pipe_error(exc_class: Type[BaseException], exc: BaseException) -> bool: + if exc_class is BrokenPipeError: + return True + + # On Windows, a broken pipe can show up as EINVAL rather than EPIPE: + # https://bugs.python.org/issue19612 + # https://bugs.python.org/issue30418 + if not WINDOWS: + return False + + return isinstance(exc, OSError) and exc.errno in (errno.EINVAL, errno.EPIPE) + + +@contextlib.contextmanager +def indent_log(num: int = 2) -> Generator[None, None, None]: + """ + A context manager which will cause the log output to be indented for any + log messages emitted inside it. + """ + # For thread-safety + _log_state.indentation = get_indentation() + _log_state.indentation += num + try: + yield + finally: + _log_state.indentation -= num + + +def get_indentation() -> int: + return getattr(_log_state, "indentation", 0) + + +class IndentingFormatter(logging.Formatter): + default_time_format = "%Y-%m-%dT%H:%M:%S" + + def __init__( + self, + *args: Any, + add_timestamp: bool = False, + **kwargs: Any, + ) -> None: + """ + A logging.Formatter that obeys the indent_log() context manager. + + :param add_timestamp: A bool indicating output lines should be prefixed + with their record's timestamp. + """ + self.add_timestamp = add_timestamp + super().__init__(*args, **kwargs) + + def get_message_start(self, formatted: str, levelno: int) -> str: + """ + Return the start of the formatted log message (not counting the + prefix to add to each line). + """ + if levelno < logging.WARNING: + return "" + if formatted.startswith(DEPRECATION_MSG_PREFIX): + # Then the message already has a prefix. We don't want it to + # look like "WARNING: DEPRECATION: ...." + return "" + if levelno < logging.ERROR: + return "WARNING: " + + return "ERROR: " + + def format(self, record: logging.LogRecord) -> str: + """ + Calls the standard formatter, but will indent all of the log message + lines by our current indentation level. + """ + formatted = super().format(record) + message_start = self.get_message_start(formatted, record.levelno) + formatted = message_start + formatted + + prefix = "" + if self.add_timestamp: + prefix = f"{self.formatTime(record)} " + prefix += " " * get_indentation() + formatted = "".join([prefix + line for line in formatted.splitlines(True)]) + return formatted + + +@dataclass +class IndentedRenderable: + renderable: RenderableType + indent: int + + def __rich_console__( + self, console: Console, options: ConsoleOptions + ) -> RenderResult: + segments = console.render(self.renderable, options) + lines = Segment.split_lines(segments) + for line in lines: + yield Segment(" " * self.indent) + yield from line + yield Segment("\n") + + +class RichPipStreamHandler(RichHandler): + KEYWORDS: ClassVar[Optional[List[str]]] = [] + + def __init__(self, stream: Optional[TextIO], no_color: bool) -> None: + super().__init__( + console=Console(file=stream, no_color=no_color, soft_wrap=True), + show_time=False, + show_level=False, + show_path=False, + highlighter=NullHighlighter(), + ) + + # Our custom override on Rich's logger, to make things work as we need them to. + def emit(self, record: logging.LogRecord) -> None: + style: Optional[Style] = None + + # If we are given a diagnostic error to present, present it with indentation. + assert isinstance(record.args, tuple) + if getattr(record, "rich", False): + (rich_renderable,) = record.args + assert isinstance( + rich_renderable, (ConsoleRenderable, RichCast, str) + ), f"{rich_renderable} is not rich-console-renderable" + + renderable: RenderableType = IndentedRenderable( + rich_renderable, indent=get_indentation() + ) + else: + message = self.format(record) + renderable = self.render_message(record, message) + if record.levelno is not None: + if record.levelno >= logging.ERROR: + style = Style(color="red") + elif record.levelno >= logging.WARNING: + style = Style(color="yellow") + + try: + self.console.print(renderable, overflow="ignore", crop=False, style=style) + except Exception: + self.handleError(record) + + def handleError(self, record: logging.LogRecord) -> None: + """Called when logging is unable to log some output.""" + + exc_class, exc = sys.exc_info()[:2] + # If a broken pipe occurred while calling write() or flush() on the + # stdout stream in logging's Handler.emit(), then raise our special + # exception so we can handle it in main() instead of logging the + # broken pipe error and continuing. + if ( + exc_class + and exc + and self.console.file is sys.stdout + and _is_broken_pipe_error(exc_class, exc) + ): + raise BrokenStdoutLoggingError() + + return super().handleError(record) + + +class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): + def _open(self) -> TextIOWrapper: + ensure_dir(os.path.dirname(self.baseFilename)) + return super()._open() + + +class MaxLevelFilter(Filter): + def __init__(self, level: int) -> None: + self.level = level + + def filter(self, record: logging.LogRecord) -> bool: + return record.levelno < self.level + + +class ExcludeLoggerFilter(Filter): + + """ + A logging Filter that excludes records from a logger (or its children). + """ + + def filter(self, record: logging.LogRecord) -> bool: + # The base Filter class allows only records from a logger (or its + # children). + return not super().filter(record) + + +def setup_logging(verbosity: int, no_color: bool, user_log_file: Optional[str]) -> int: + """Configures and sets up all of the logging + + Returns the requested logging level, as its integer value. + """ + + # Determine the level to be logging at. + if verbosity >= 2: + level_number = logging.DEBUG + elif verbosity == 1: + level_number = VERBOSE + elif verbosity == -1: + level_number = logging.WARNING + elif verbosity == -2: + level_number = logging.ERROR + elif verbosity <= -3: + level_number = logging.CRITICAL + else: + level_number = logging.INFO + + level = logging.getLevelName(level_number) + + # The "root" logger should match the "console" level *unless* we also need + # to log to a user log file. + include_user_log = user_log_file is not None + if include_user_log: + additional_log_file = user_log_file + root_level = "DEBUG" + else: + additional_log_file = "/dev/null" + root_level = level + + # Disable any logging besides WARNING unless we have DEBUG level logging + # enabled for vendored libraries. + vendored_log_level = "WARNING" if level in ["INFO", "ERROR"] else "DEBUG" + + # Shorthands for clarity + log_streams = { + "stdout": "ext://sys.stdout", + "stderr": "ext://sys.stderr", + } + handler_classes = { + "stream": "pip._internal.utils.logging.RichPipStreamHandler", + "file": "pip._internal.utils.logging.BetterRotatingFileHandler", + } + handlers = ["console", "console_errors", "console_subprocess"] + ( + ["user_log"] if include_user_log else [] + ) + + logging.config.dictConfig( + { + "version": 1, + "disable_existing_loggers": False, + "filters": { + "exclude_warnings": { + "()": "pip._internal.utils.logging.MaxLevelFilter", + "level": logging.WARNING, + }, + "restrict_to_subprocess": { + "()": "logging.Filter", + "name": subprocess_logger.name, + }, + "exclude_subprocess": { + "()": "pip._internal.utils.logging.ExcludeLoggerFilter", + "name": subprocess_logger.name, + }, + }, + "formatters": { + "indent": { + "()": IndentingFormatter, + "format": "%(message)s", + }, + "indent_with_timestamp": { + "()": IndentingFormatter, + "format": "%(message)s", + "add_timestamp": True, + }, + }, + "handlers": { + "console": { + "level": level, + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stdout"], + "filters": ["exclude_subprocess", "exclude_warnings"], + "formatter": "indent", + }, + "console_errors": { + "level": "WARNING", + "class": handler_classes["stream"], + "no_color": no_color, + "stream": log_streams["stderr"], + "filters": ["exclude_subprocess"], + "formatter": "indent", + }, + # A handler responsible for logging to the console messages + # from the "subprocessor" logger. + "console_subprocess": { + "level": level, + "class": handler_classes["stream"], + "stream": log_streams["stderr"], + "no_color": no_color, + "filters": ["restrict_to_subprocess"], + "formatter": "indent", + }, + "user_log": { + "level": "DEBUG", + "class": handler_classes["file"], + "filename": additional_log_file, + "encoding": "utf-8", + "delay": True, + "formatter": "indent_with_timestamp", + }, + }, + "root": { + "level": root_level, + "handlers": handlers, + }, + "loggers": {"pip._vendor": {"level": vendored_log_level}}, + } + ) + + return level_number diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/misc.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/misc.py new file mode 100644 index 0000000..1ad3f61 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/misc.py @@ -0,0 +1,783 @@ +import contextlib +import errno +import getpass +import hashlib +import io +import logging +import os +import posixpath +import shutil +import stat +import sys +import sysconfig +import urllib.parse +from functools import partial +from io import StringIO +from itertools import filterfalse, tee, zip_longest +from pathlib import Path +from types import FunctionType, TracebackType +from typing import ( + Any, + BinaryIO, + Callable, + ContextManager, + Dict, + Generator, + Iterable, + Iterator, + List, + Optional, + TextIO, + Tuple, + Type, + TypeVar, + Union, + cast, +) + +from pip._vendor.packaging.requirements import Requirement +from pip._vendor.pyproject_hooks import BuildBackendHookCaller +from pip._vendor.tenacity import retry, stop_after_delay, wait_fixed + +from pip import __version__ +from pip._internal.exceptions import CommandError, ExternallyManagedEnvironment +from pip._internal.locations import get_major_minor_version +from pip._internal.utils.compat import WINDOWS +from pip._internal.utils.virtualenv import running_under_virtualenv + +__all__ = [ + "rmtree", + "display_path", + "backup_dir", + "ask", + "splitext", + "format_size", + "is_installable_dir", + "normalize_path", + "renames", + "get_prog", + "captured_stdout", + "ensure_dir", + "remove_auth_from_url", + "check_externally_managed", + "ConfiguredBuildBackendHookCaller", +] + +logger = logging.getLogger(__name__) + +T = TypeVar("T") +ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType] +VersionInfo = Tuple[int, int, int] +NetlocTuple = Tuple[str, Tuple[Optional[str], Optional[str]]] +OnExc = Callable[[FunctionType, Path, BaseException], Any] +OnErr = Callable[[FunctionType, Path, ExcInfo], Any] + + +def get_pip_version() -> str: + pip_pkg_dir = os.path.join(os.path.dirname(__file__), "..", "..") + pip_pkg_dir = os.path.abspath(pip_pkg_dir) + + return f"pip {__version__} from {pip_pkg_dir} (python {get_major_minor_version()})" + + +def normalize_version_info(py_version_info: Tuple[int, ...]) -> Tuple[int, int, int]: + """ + Convert a tuple of ints representing a Python version to one of length + three. + + :param py_version_info: a tuple of ints representing a Python version, + or None to specify no version. The tuple can have any length. + + :return: a tuple of length three if `py_version_info` is non-None. + Otherwise, return `py_version_info` unchanged (i.e. None). + """ + if len(py_version_info) < 3: + py_version_info += (3 - len(py_version_info)) * (0,) + elif len(py_version_info) > 3: + py_version_info = py_version_info[:3] + + return cast("VersionInfo", py_version_info) + + +def ensure_dir(path: str) -> None: + """os.path.makedirs without EEXIST.""" + try: + os.makedirs(path) + except OSError as e: + # Windows can raise spurious ENOTEMPTY errors. See #6426. + if e.errno != errno.EEXIST and e.errno != errno.ENOTEMPTY: + raise + + +def get_prog() -> str: + try: + prog = os.path.basename(sys.argv[0]) + if prog in ("__main__.py", "-c"): + return f"{sys.executable} -m pip" + else: + return prog + except (AttributeError, TypeError, IndexError): + pass + return "pip" + + +# Retry every half second for up to 3 seconds +# Tenacity raises RetryError by default, explicitly raise the original exception +@retry(reraise=True, stop=stop_after_delay(3), wait=wait_fixed(0.5)) +def rmtree( + dir: str, + ignore_errors: bool = False, + onexc: Optional[OnExc] = None, +) -> None: + if ignore_errors: + onexc = _onerror_ignore + if onexc is None: + onexc = _onerror_reraise + handler: OnErr = partial( + # `[func, path, Union[ExcInfo, BaseException]] -> Any` is equivalent to + # `Union[([func, path, ExcInfo] -> Any), ([func, path, BaseException] -> Any)]`. + cast(Union[OnExc, OnErr], rmtree_errorhandler), + onexc=onexc, + ) + if sys.version_info >= (3, 12): + # See https://docs.python.org/3.12/whatsnew/3.12.html#shutil. + shutil.rmtree(dir, onexc=handler) # type: ignore + else: + shutil.rmtree(dir, onerror=handler) # type: ignore + + +def _onerror_ignore(*_args: Any) -> None: + pass + + +def _onerror_reraise(*_args: Any) -> None: + raise + + +def rmtree_errorhandler( + func: FunctionType, + path: Path, + exc_info: Union[ExcInfo, BaseException], + *, + onexc: OnExc = _onerror_reraise, +) -> None: + """ + `rmtree` error handler to 'force' a file remove (i.e. like `rm -f`). + + * If a file is readonly then it's write flag is set and operation is + retried. + + * `onerror` is the original callback from `rmtree(... onerror=onerror)` + that is chained at the end if the "rm -f" still fails. + """ + try: + st_mode = os.stat(path).st_mode + except OSError: + # it's equivalent to os.path.exists + return + + if not st_mode & stat.S_IWRITE: + # convert to read/write + try: + os.chmod(path, st_mode | stat.S_IWRITE) + except OSError: + pass + else: + # use the original function to repeat the operation + try: + func(path) + return + except OSError: + pass + + if not isinstance(exc_info, BaseException): + _, exc_info, _ = exc_info + onexc(func, path, exc_info) + + +def display_path(path: str) -> str: + """Gives the display value for a given path, making it relative to cwd + if possible.""" + path = os.path.normcase(os.path.abspath(path)) + if path.startswith(os.getcwd() + os.path.sep): + path = "." + path[len(os.getcwd()) :] + return path + + +def backup_dir(dir: str, ext: str = ".bak") -> str: + """Figure out the name of a directory to back up the given dir to + (adding .bak, .bak2, etc)""" + n = 1 + extension = ext + while os.path.exists(dir + extension): + n += 1 + extension = ext + str(n) + return dir + extension + + +def ask_path_exists(message: str, options: Iterable[str]) -> str: + for action in os.environ.get("PIP_EXISTS_ACTION", "").split(): + if action in options: + return action + return ask(message, options) + + +def _check_no_input(message: str) -> None: + """Raise an error if no input is allowed.""" + if os.environ.get("PIP_NO_INPUT"): + raise Exception( + f"No input was expected ($PIP_NO_INPUT set); question: {message}" + ) + + +def ask(message: str, options: Iterable[str]) -> str: + """Ask the message interactively, with the given possible responses""" + while 1: + _check_no_input(message) + response = input(message) + response = response.strip().lower() + if response not in options: + print( + "Your response ({!r}) was not one of the expected responses: " + "{}".format(response, ", ".join(options)) + ) + else: + return response + + +def ask_input(message: str) -> str: + """Ask for input interactively.""" + _check_no_input(message) + return input(message) + + +def ask_password(message: str) -> str: + """Ask for a password interactively.""" + _check_no_input(message) + return getpass.getpass(message) + + +def strtobool(val: str) -> int: + """Convert a string representation of truth to true (1) or false (0). + + True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values + are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if + 'val' is anything else. + """ + val = val.lower() + if val in ("y", "yes", "t", "true", "on", "1"): + return 1 + elif val in ("n", "no", "f", "false", "off", "0"): + return 0 + else: + raise ValueError(f"invalid truth value {val!r}") + + +def format_size(bytes: float) -> str: + if bytes > 1000 * 1000: + return f"{bytes / 1000.0 / 1000:.1f} MB" + elif bytes > 10 * 1000: + return f"{int(bytes / 1000)} kB" + elif bytes > 1000: + return f"{bytes / 1000.0:.1f} kB" + else: + return f"{int(bytes)} bytes" + + +def tabulate(rows: Iterable[Iterable[Any]]) -> Tuple[List[str], List[int]]: + """Return a list of formatted rows and a list of column sizes. + + For example:: + + >>> tabulate([['foobar', 2000], [0xdeadbeef]]) + (['foobar 2000', '3735928559'], [10, 4]) + """ + rows = [tuple(map(str, row)) for row in rows] + sizes = [max(map(len, col)) for col in zip_longest(*rows, fillvalue="")] + table = [" ".join(map(str.ljust, row, sizes)).rstrip() for row in rows] + return table, sizes + + +def is_installable_dir(path: str) -> bool: + """Is path is a directory containing pyproject.toml or setup.py? + + If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for + a legacy setuptools layout by identifying setup.py. We don't check for the + setup.cfg because using it without setup.py is only available for PEP 517 + projects, which are already covered by the pyproject.toml check. + """ + if not os.path.isdir(path): + return False + if os.path.isfile(os.path.join(path, "pyproject.toml")): + return True + if os.path.isfile(os.path.join(path, "setup.py")): + return True + return False + + +def read_chunks( + file: BinaryIO, size: int = io.DEFAULT_BUFFER_SIZE +) -> Generator[bytes, None, None]: + """Yield pieces of data from a file-like object until EOF.""" + while True: + chunk = file.read(size) + if not chunk: + break + yield chunk + + +def normalize_path(path: str, resolve_symlinks: bool = True) -> str: + """ + Convert a path to its canonical, case-normalized, absolute version. + + """ + path = os.path.expanduser(path) + if resolve_symlinks: + path = os.path.realpath(path) + else: + path = os.path.abspath(path) + return os.path.normcase(path) + + +def splitext(path: str) -> Tuple[str, str]: + """Like os.path.splitext, but take off .tar too""" + base, ext = posixpath.splitext(path) + if base.lower().endswith(".tar"): + ext = base[-4:] + ext + base = base[:-4] + return base, ext + + +def renames(old: str, new: str) -> None: + """Like os.renames(), but handles renaming across devices.""" + # Implementation borrowed from os.renames(). + head, tail = os.path.split(new) + if head and tail and not os.path.exists(head): + os.makedirs(head) + + shutil.move(old, new) + + head, tail = os.path.split(old) + if head and tail: + try: + os.removedirs(head) + except OSError: + pass + + +def is_local(path: str) -> bool: + """ + Return True if path is within sys.prefix, if we're running in a virtualenv. + + If we're not in a virtualenv, all paths are considered "local." + + Caution: this function assumes the head of path has been normalized + with normalize_path. + """ + if not running_under_virtualenv(): + return True + return path.startswith(normalize_path(sys.prefix)) + + +def write_output(msg: Any, *args: Any) -> None: + logger.info(msg, *args) + + +class StreamWrapper(StringIO): + orig_stream: TextIO + + @classmethod + def from_stream(cls, orig_stream: TextIO) -> "StreamWrapper": + ret = cls() + ret.orig_stream = orig_stream + return ret + + # compileall.compile_dir() needs stdout.encoding to print to stdout + # type ignore is because TextIOBase.encoding is writeable + @property + def encoding(self) -> str: # type: ignore + return self.orig_stream.encoding + + +@contextlib.contextmanager +def captured_output(stream_name: str) -> Generator[StreamWrapper, None, None]: + """Return a context manager used by captured_stdout/stdin/stderr + that temporarily replaces the sys stream *stream_name* with a StringIO. + + Taken from Lib/support/__init__.py in the CPython repo. + """ + orig_stdout = getattr(sys, stream_name) + setattr(sys, stream_name, StreamWrapper.from_stream(orig_stdout)) + try: + yield getattr(sys, stream_name) + finally: + setattr(sys, stream_name, orig_stdout) + + +def captured_stdout() -> ContextManager[StreamWrapper]: + """Capture the output of sys.stdout: + + with captured_stdout() as stdout: + print('hello') + self.assertEqual(stdout.getvalue(), 'hello\n') + + Taken from Lib/support/__init__.py in the CPython repo. + """ + return captured_output("stdout") + + +def captured_stderr() -> ContextManager[StreamWrapper]: + """ + See captured_stdout(). + """ + return captured_output("stderr") + + +# Simulates an enum +def enum(*sequential: Any, **named: Any) -> Type[Any]: + enums = dict(zip(sequential, range(len(sequential))), **named) + reverse = {value: key for key, value in enums.items()} + enums["reverse_mapping"] = reverse + return type("Enum", (), enums) + + +def build_netloc(host: str, port: Optional[int]) -> str: + """ + Build a netloc from a host-port pair + """ + if port is None: + return host + if ":" in host: + # Only wrap host with square brackets when it is IPv6 + host = f"[{host}]" + return f"{host}:{port}" + + +def build_url_from_netloc(netloc: str, scheme: str = "https") -> str: + """ + Build a full URL from a netloc. + """ + if netloc.count(":") >= 2 and "@" not in netloc and "[" not in netloc: + # It must be a bare IPv6 address, so wrap it with brackets. + netloc = f"[{netloc}]" + return f"{scheme}://{netloc}" + + +def parse_netloc(netloc: str) -> Tuple[Optional[str], Optional[int]]: + """ + Return the host-port pair from a netloc. + """ + url = build_url_from_netloc(netloc) + parsed = urllib.parse.urlparse(url) + return parsed.hostname, parsed.port + + +def split_auth_from_netloc(netloc: str) -> NetlocTuple: + """ + Parse out and remove the auth information from a netloc. + + Returns: (netloc, (username, password)). + """ + if "@" not in netloc: + return netloc, (None, None) + + # Split from the right because that's how urllib.parse.urlsplit() + # behaves if more than one @ is present (which can be checked using + # the password attribute of urlsplit()'s return value). + auth, netloc = netloc.rsplit("@", 1) + pw: Optional[str] = None + if ":" in auth: + # Split from the left because that's how urllib.parse.urlsplit() + # behaves if more than one : is present (which again can be checked + # using the password attribute of the return value) + user, pw = auth.split(":", 1) + else: + user, pw = auth, None + + user = urllib.parse.unquote(user) + if pw is not None: + pw = urllib.parse.unquote(pw) + + return netloc, (user, pw) + + +def redact_netloc(netloc: str) -> str: + """ + Replace the sensitive data in a netloc with "****", if it exists. + + For example: + - "user:pass@example.com" returns "user:****@example.com" + - "accesstoken@example.com" returns "****@example.com" + """ + netloc, (user, password) = split_auth_from_netloc(netloc) + if user is None: + return netloc + if password is None: + user = "****" + password = "" + else: + user = urllib.parse.quote(user) + password = ":****" + return f"{user}{password}@{netloc}" + + +def _transform_url( + url: str, transform_netloc: Callable[[str], Tuple[Any, ...]] +) -> Tuple[str, NetlocTuple]: + """Transform and replace netloc in a url. + + transform_netloc is a function taking the netloc and returning a + tuple. The first element of this tuple is the new netloc. The + entire tuple is returned. + + Returns a tuple containing the transformed url as item 0 and the + original tuple returned by transform_netloc as item 1. + """ + purl = urllib.parse.urlsplit(url) + netloc_tuple = transform_netloc(purl.netloc) + # stripped url + url_pieces = (purl.scheme, netloc_tuple[0], purl.path, purl.query, purl.fragment) + surl = urllib.parse.urlunsplit(url_pieces) + return surl, cast("NetlocTuple", netloc_tuple) + + +def _get_netloc(netloc: str) -> NetlocTuple: + return split_auth_from_netloc(netloc) + + +def _redact_netloc(netloc: str) -> Tuple[str]: + return (redact_netloc(netloc),) + + +def split_auth_netloc_from_url( + url: str, +) -> Tuple[str, str, Tuple[Optional[str], Optional[str]]]: + """ + Parse a url into separate netloc, auth, and url with no auth. + + Returns: (url_without_auth, netloc, (username, password)) + """ + url_without_auth, (netloc, auth) = _transform_url(url, _get_netloc) + return url_without_auth, netloc, auth + + +def remove_auth_from_url(url: str) -> str: + """Return a copy of url with 'username:password@' removed.""" + # username/pass params are passed to subversion through flags + # and are not recognized in the url. + return _transform_url(url, _get_netloc)[0] + + +def redact_auth_from_url(url: str) -> str: + """Replace the password in a given url with ****.""" + return _transform_url(url, _redact_netloc)[0] + + +def redact_auth_from_requirement(req: Requirement) -> str: + """Replace the password in a given requirement url with ****.""" + if not req.url: + return str(req) + return str(req).replace(req.url, redact_auth_from_url(req.url)) + + +class HiddenText: + def __init__(self, secret: str, redacted: str) -> None: + self.secret = secret + self.redacted = redacted + + def __repr__(self) -> str: + return f"" + + def __str__(self) -> str: + return self.redacted + + # This is useful for testing. + def __eq__(self, other: Any) -> bool: + if type(self) != type(other): + return False + + # The string being used for redaction doesn't also have to match, + # just the raw, original string. + return self.secret == other.secret + + +def hide_value(value: str) -> HiddenText: + return HiddenText(value, redacted="****") + + +def hide_url(url: str) -> HiddenText: + redacted = redact_auth_from_url(url) + return HiddenText(url, redacted=redacted) + + +def protect_pip_from_modification_on_windows(modifying_pip: bool) -> None: + """Protection of pip.exe from modification on Windows + + On Windows, any operation modifying pip should be run as: + python -m pip ... + """ + pip_names = [ + "pip", + f"pip{sys.version_info.major}", + f"pip{sys.version_info.major}.{sys.version_info.minor}", + ] + + # See https://github.com/pypa/pip/issues/1299 for more discussion + should_show_use_python_msg = ( + modifying_pip and WINDOWS and os.path.basename(sys.argv[0]) in pip_names + ) + + if should_show_use_python_msg: + new_command = [sys.executable, "-m", "pip"] + sys.argv[1:] + raise CommandError( + "To modify pip, please run the following command:\n{}".format( + " ".join(new_command) + ) + ) + + +def check_externally_managed() -> None: + """Check whether the current environment is externally managed. + + If the ``EXTERNALLY-MANAGED`` config file is found, the current environment + is considered externally managed, and an ExternallyManagedEnvironment is + raised. + """ + if running_under_virtualenv(): + return + marker = os.path.join(sysconfig.get_path("stdlib"), "EXTERNALLY-MANAGED") + if not os.path.isfile(marker): + return + raise ExternallyManagedEnvironment.from_config(marker) + + +def is_console_interactive() -> bool: + """Is this console interactive?""" + return sys.stdin is not None and sys.stdin.isatty() + + +def hash_file(path: str, blocksize: int = 1 << 20) -> Tuple[Any, int]: + """Return (hash, length) for path using hashlib.sha256()""" + + h = hashlib.sha256() + length = 0 + with open(path, "rb") as f: + for block in read_chunks(f, size=blocksize): + length += len(block) + h.update(block) + return h, length + + +def pairwise(iterable: Iterable[Any]) -> Iterator[Tuple[Any, Any]]: + """ + Return paired elements. + + For example: + s -> (s0, s1), (s2, s3), (s4, s5), ... + """ + iterable = iter(iterable) + return zip_longest(iterable, iterable) + + +def partition( + pred: Callable[[T], bool], + iterable: Iterable[T], +) -> Tuple[Iterable[T], Iterable[T]]: + """ + Use a predicate to partition entries into false entries and true entries, + like + + partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 + """ + t1, t2 = tee(iterable) + return filterfalse(pred, t1), filter(pred, t2) + + +class ConfiguredBuildBackendHookCaller(BuildBackendHookCaller): + def __init__( + self, + config_holder: Any, + source_dir: str, + build_backend: str, + backend_path: Optional[str] = None, + runner: Optional[Callable[..., None]] = None, + python_executable: Optional[str] = None, + ): + super().__init__( + source_dir, build_backend, backend_path, runner, python_executable + ) + self.config_holder = config_holder + + def build_wheel( + self, + wheel_directory: str, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, + metadata_directory: Optional[str] = None, + ) -> str: + cs = self.config_holder.config_settings + return super().build_wheel( + wheel_directory, config_settings=cs, metadata_directory=metadata_directory + ) + + def build_sdist( + self, + sdist_directory: str, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, + ) -> str: + cs = self.config_holder.config_settings + return super().build_sdist(sdist_directory, config_settings=cs) + + def build_editable( + self, + wheel_directory: str, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, + metadata_directory: Optional[str] = None, + ) -> str: + cs = self.config_holder.config_settings + return super().build_editable( + wheel_directory, config_settings=cs, metadata_directory=metadata_directory + ) + + def get_requires_for_build_wheel( + self, config_settings: Optional[Dict[str, Union[str, List[str]]]] = None + ) -> List[str]: + cs = self.config_holder.config_settings + return super().get_requires_for_build_wheel(config_settings=cs) + + def get_requires_for_build_sdist( + self, config_settings: Optional[Dict[str, Union[str, List[str]]]] = None + ) -> List[str]: + cs = self.config_holder.config_settings + return super().get_requires_for_build_sdist(config_settings=cs) + + def get_requires_for_build_editable( + self, config_settings: Optional[Dict[str, Union[str, List[str]]]] = None + ) -> List[str]: + cs = self.config_holder.config_settings + return super().get_requires_for_build_editable(config_settings=cs) + + def prepare_metadata_for_build_wheel( + self, + metadata_directory: str, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, + _allow_fallback: bool = True, + ) -> str: + cs = self.config_holder.config_settings + return super().prepare_metadata_for_build_wheel( + metadata_directory=metadata_directory, + config_settings=cs, + _allow_fallback=_allow_fallback, + ) + + def prepare_metadata_for_build_editable( + self, + metadata_directory: str, + config_settings: Optional[Dict[str, Union[str, List[str]]]] = None, + _allow_fallback: bool = True, + ) -> str: + cs = self.config_holder.config_settings + return super().prepare_metadata_for_build_editable( + metadata_directory=metadata_directory, + config_settings=cs, + _allow_fallback=_allow_fallback, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/models.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/models.py new file mode 100644 index 0000000..b6bb21a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/models.py @@ -0,0 +1,39 @@ +"""Utilities for defining models +""" + +import operator +from typing import Any, Callable, Type + + +class KeyBasedCompareMixin: + """Provides comparison capabilities that is based on a key""" + + __slots__ = ["_compare_key", "_defining_class"] + + def __init__(self, key: Any, defining_class: Type["KeyBasedCompareMixin"]) -> None: + self._compare_key = key + self._defining_class = defining_class + + def __hash__(self) -> int: + return hash(self._compare_key) + + def __lt__(self, other: Any) -> bool: + return self._compare(other, operator.__lt__) + + def __le__(self, other: Any) -> bool: + return self._compare(other, operator.__le__) + + def __gt__(self, other: Any) -> bool: + return self._compare(other, operator.__gt__) + + def __ge__(self, other: Any) -> bool: + return self._compare(other, operator.__ge__) + + def __eq__(self, other: Any) -> bool: + return self._compare(other, operator.__eq__) + + def _compare(self, other: Any, method: Callable[[Any, Any], bool]) -> bool: + if not isinstance(other, self._defining_class): + return NotImplemented + + return method(self._compare_key, other._compare_key) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/packaging.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/packaging.py new file mode 100644 index 0000000..b9f6af4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/packaging.py @@ -0,0 +1,57 @@ +import functools +import logging +import re +from typing import NewType, Optional, Tuple, cast + +from pip._vendor.packaging import specifiers, version +from pip._vendor.packaging.requirements import Requirement + +NormalizedExtra = NewType("NormalizedExtra", str) + +logger = logging.getLogger(__name__) + + +def check_requires_python( + requires_python: Optional[str], version_info: Tuple[int, ...] +) -> bool: + """ + Check if the given Python version matches a "Requires-Python" specifier. + + :param version_info: A 3-tuple of ints representing a Python + major-minor-micro version to check (e.g. `sys.version_info[:3]`). + + :return: `True` if the given Python version satisfies the requirement. + Otherwise, return `False`. + + :raises InvalidSpecifier: If `requires_python` has an invalid format. + """ + if requires_python is None: + # The package provides no information + return True + requires_python_specifier = specifiers.SpecifierSet(requires_python) + + python_version = version.parse(".".join(map(str, version_info))) + return python_version in requires_python_specifier + + +@functools.lru_cache(maxsize=512) +def get_requirement(req_string: str) -> Requirement: + """Construct a packaging.Requirement object with caching""" + # Parsing requirement strings is expensive, and is also expected to happen + # with a low diversity of different arguments (at least relative the number + # constructed). This method adds a cache to requirement object creation to + # minimize repeated parsing of the same string to construct equivalent + # Requirement objects. + return Requirement(req_string) + + +def safe_extra(extra: str) -> NormalizedExtra: + """Convert an arbitrary string to a standard 'extra' name + + Any runs of non-alphanumeric characters are replaced with a single '_', + and the result is always lowercased. + + This function is duplicated from ``pkg_resources``. Note that this is not + the same to either ``canonicalize_name`` or ``_egg_link_name``. + """ + return cast(NormalizedExtra, re.sub("[^A-Za-z0-9.-]+", "_", extra).lower()) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py new file mode 100644 index 0000000..96d1b24 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py @@ -0,0 +1,146 @@ +import sys +import textwrap +from typing import List, Optional, Sequence + +# Shim to wrap setup.py invocation with setuptools +# Note that __file__ is handled via two {!r} *and* %r, to ensure that paths on +# Windows are correctly handled (it should be "C:\\Users" not "C:\Users"). +_SETUPTOOLS_SHIM = textwrap.dedent( + """ + exec(compile(''' + # This is -- a caller that pip uses to run setup.py + # + # - It imports setuptools before invoking setup.py, to enable projects that directly + # import from `distutils.core` to work with newer packaging standards. + # - It provides a clear error message when setuptools is not installed. + # - It sets `sys.argv[0]` to the underlying `setup.py`, when invoking `setup.py` so + # setuptools doesn't think the script is `-c`. This avoids the following warning: + # manifest_maker: standard file '-c' not found". + # - It generates a shim setup.py, for handling setup.cfg-only projects. + import os, sys, tokenize + + try: + import setuptools + except ImportError as error: + print( + "ERROR: Can not execute `setup.py` since setuptools is not available in " + "the build environment.", + file=sys.stderr, + ) + sys.exit(1) + + __file__ = %r + sys.argv[0] = __file__ + + if os.path.exists(__file__): + filename = __file__ + with tokenize.open(__file__) as f: + setup_py_code = f.read() + else: + filename = "" + setup_py_code = "from setuptools import setup; setup()" + + exec(compile(setup_py_code, filename, "exec")) + ''' % ({!r},), "", "exec")) + """ +).rstrip() + + +def make_setuptools_shim_args( + setup_py_path: str, + global_options: Optional[Sequence[str]] = None, + no_user_config: bool = False, + unbuffered_output: bool = False, +) -> List[str]: + """ + Get setuptools command arguments with shim wrapped setup file invocation. + + :param setup_py_path: The path to setup.py to be wrapped. + :param global_options: Additional global options. + :param no_user_config: If True, disables personal user configuration. + :param unbuffered_output: If True, adds the unbuffered switch to the + argument list. + """ + args = [sys.executable] + if unbuffered_output: + args += ["-u"] + args += ["-c", _SETUPTOOLS_SHIM.format(setup_py_path)] + if global_options: + args += global_options + if no_user_config: + args += ["--no-user-cfg"] + return args + + +def make_setuptools_bdist_wheel_args( + setup_py_path: str, + global_options: Sequence[str], + build_options: Sequence[str], + destination_dir: str, +) -> List[str]: + # NOTE: Eventually, we'd want to also -S to the flags here, when we're + # isolating. Currently, it breaks Python in virtualenvs, because it + # relies on site.py to find parts of the standard library outside the + # virtualenv. + args = make_setuptools_shim_args( + setup_py_path, global_options=global_options, unbuffered_output=True + ) + args += ["bdist_wheel", "-d", destination_dir] + args += build_options + return args + + +def make_setuptools_clean_args( + setup_py_path: str, + global_options: Sequence[str], +) -> List[str]: + args = make_setuptools_shim_args( + setup_py_path, global_options=global_options, unbuffered_output=True + ) + args += ["clean", "--all"] + return args + + +def make_setuptools_develop_args( + setup_py_path: str, + *, + global_options: Sequence[str], + no_user_config: bool, + prefix: Optional[str], + home: Optional[str], + use_user_site: bool, +) -> List[str]: + assert not (use_user_site and prefix) + + args = make_setuptools_shim_args( + setup_py_path, + global_options=global_options, + no_user_config=no_user_config, + ) + + args += ["develop", "--no-deps"] + + if prefix: + args += ["--prefix", prefix] + if home is not None: + args += ["--install-dir", home] + + if use_user_site: + args += ["--user", "--prefix="] + + return args + + +def make_setuptools_egg_info_args( + setup_py_path: str, + egg_info_dir: Optional[str], + no_user_config: bool, +) -> List[str]: + args = make_setuptools_shim_args(setup_py_path, no_user_config=no_user_config) + + args += ["egg_info"] + + if egg_info_dir: + args += ["--egg-base", egg_info_dir] + + return args diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py new file mode 100644 index 0000000..79580b0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py @@ -0,0 +1,260 @@ +import logging +import os +import shlex +import subprocess +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Iterable, + List, + Mapping, + Optional, + Union, +) + +from pip._vendor.rich.markup import escape + +from pip._internal.cli.spinners import SpinnerInterface, open_spinner +from pip._internal.exceptions import InstallationSubprocessError +from pip._internal.utils.logging import VERBOSE, subprocess_logger +from pip._internal.utils.misc import HiddenText + +if TYPE_CHECKING: + # Literal was introduced in Python 3.8. + # + # TODO: Remove `if TYPE_CHECKING` when dropping support for Python 3.7. + from typing import Literal + +CommandArgs = List[Union[str, HiddenText]] + + +def make_command(*args: Union[str, HiddenText, CommandArgs]) -> CommandArgs: + """ + Create a CommandArgs object. + """ + command_args: CommandArgs = [] + for arg in args: + # Check for list instead of CommandArgs since CommandArgs is + # only known during type-checking. + if isinstance(arg, list): + command_args.extend(arg) + else: + # Otherwise, arg is str or HiddenText. + command_args.append(arg) + + return command_args + + +def format_command_args(args: Union[List[str], CommandArgs]) -> str: + """ + Format command arguments for display. + """ + # For HiddenText arguments, display the redacted form by calling str(). + # Also, we don't apply str() to arguments that aren't HiddenText since + # this can trigger a UnicodeDecodeError in Python 2 if the argument + # has type unicode and includes a non-ascii character. (The type + # checker doesn't ensure the annotations are correct in all cases.) + return " ".join( + shlex.quote(str(arg)) if isinstance(arg, HiddenText) else shlex.quote(arg) + for arg in args + ) + + +def reveal_command_args(args: Union[List[str], CommandArgs]) -> List[str]: + """ + Return the arguments in their raw, unredacted form. + """ + return [arg.secret if isinstance(arg, HiddenText) else arg for arg in args] + + +def call_subprocess( + cmd: Union[List[str], CommandArgs], + show_stdout: bool = False, + cwd: Optional[str] = None, + on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise", + extra_ok_returncodes: Optional[Iterable[int]] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + unset_environ: Optional[Iterable[str]] = None, + spinner: Optional[SpinnerInterface] = None, + log_failed_cmd: Optional[bool] = True, + stdout_only: Optional[bool] = False, + *, + command_desc: str, +) -> str: + """ + Args: + show_stdout: if true, use INFO to log the subprocess's stderr and + stdout streams. Otherwise, use DEBUG. Defaults to False. + extra_ok_returncodes: an iterable of integer return codes that are + acceptable, in addition to 0. Defaults to None, which means []. + unset_environ: an iterable of environment variable names to unset + prior to calling subprocess.Popen(). + log_failed_cmd: if false, failed commands are not logged, only raised. + stdout_only: if true, return only stdout, else return both. When true, + logging of both stdout and stderr occurs when the subprocess has + terminated, else logging occurs as subprocess output is produced. + """ + if extra_ok_returncodes is None: + extra_ok_returncodes = [] + if unset_environ is None: + unset_environ = [] + # Most places in pip use show_stdout=False. What this means is-- + # + # - We connect the child's output (combined stderr and stdout) to a + # single pipe, which we read. + # - We log this output to stderr at DEBUG level as it is received. + # - If DEBUG logging isn't enabled (e.g. if --verbose logging wasn't + # requested), then we show a spinner so the user can still see the + # subprocess is in progress. + # - If the subprocess exits with an error, we log the output to stderr + # at ERROR level if it hasn't already been displayed to the console + # (e.g. if --verbose logging wasn't enabled). This way we don't log + # the output to the console twice. + # + # If show_stdout=True, then the above is still done, but with DEBUG + # replaced by INFO. + if show_stdout: + # Then log the subprocess output at INFO level. + log_subprocess: Callable[..., None] = subprocess_logger.info + used_level = logging.INFO + else: + # Then log the subprocess output using VERBOSE. This also ensures + # it will be logged to the log file (aka user_log), if enabled. + log_subprocess = subprocess_logger.verbose + used_level = VERBOSE + + # Whether the subprocess will be visible in the console. + showing_subprocess = subprocess_logger.getEffectiveLevel() <= used_level + + # Only use the spinner if we're not showing the subprocess output + # and we have a spinner. + use_spinner = not showing_subprocess and spinner is not None + + log_subprocess("Running command %s", command_desc) + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + for name in unset_environ: + env.pop(name, None) + try: + proc = subprocess.Popen( + # Convert HiddenText objects to the underlying str. + reveal_command_args(cmd), + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE, + cwd=cwd, + env=env, + errors="backslashreplace", + ) + except Exception as exc: + if log_failed_cmd: + subprocess_logger.critical( + "Error %s while executing command %s", + exc, + command_desc, + ) + raise + all_output = [] + if not stdout_only: + assert proc.stdout + assert proc.stdin + proc.stdin.close() + # In this mode, stdout and stderr are in the same pipe. + while True: + line: str = proc.stdout.readline() + if not line: + break + line = line.rstrip() + all_output.append(line + "\n") + + # Show the line immediately. + log_subprocess(line) + # Update the spinner. + if use_spinner: + assert spinner + spinner.spin() + try: + proc.wait() + finally: + if proc.stdout: + proc.stdout.close() + output = "".join(all_output) + else: + # In this mode, stdout and stderr are in different pipes. + # We must use communicate() which is the only safe way to read both. + out, err = proc.communicate() + # log line by line to preserve pip log indenting + for out_line in out.splitlines(): + log_subprocess(out_line) + all_output.append(out) + for err_line in err.splitlines(): + log_subprocess(err_line) + all_output.append(err) + output = out + + proc_had_error = proc.returncode and proc.returncode not in extra_ok_returncodes + if use_spinner: + assert spinner + if proc_had_error: + spinner.finish("error") + else: + spinner.finish("done") + if proc_had_error: + if on_returncode == "raise": + error = InstallationSubprocessError( + command_description=command_desc, + exit_code=proc.returncode, + output_lines=all_output if not showing_subprocess else None, + ) + if log_failed_cmd: + subprocess_logger.error("%s", error, extra={"rich": True}) + subprocess_logger.verbose( + "[bold magenta]full command[/]: [blue]%s[/]", + escape(format_command_args(cmd)), + extra={"markup": True}, + ) + subprocess_logger.verbose( + "[bold magenta]cwd[/]: %s", + escape(cwd or "[inherit]"), + extra={"markup": True}, + ) + + raise error + elif on_returncode == "warn": + subprocess_logger.warning( + 'Command "%s" had error code %s in %s', + command_desc, + proc.returncode, + cwd, + ) + elif on_returncode == "ignore": + pass + else: + raise ValueError(f"Invalid value: on_returncode={on_returncode!r}") + return output + + +def runner_with_spinner_message(message: str) -> Callable[..., None]: + """Provide a subprocess_runner that shows a spinner message. + + Intended for use with for BuildBackendHookCaller. Thus, the runner has + an API that matches what's expected by BuildBackendHookCaller.subprocess_runner. + """ + + def runner( + cmd: List[str], + cwd: Optional[str] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + ) -> None: + with open_spinner(message) as spinner: + call_subprocess( + cmd, + command_desc=message, + cwd=cwd, + extra_environ=extra_environ, + spinner=spinner, + ) + + return runner diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py new file mode 100644 index 0000000..4eec5f3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py @@ -0,0 +1,296 @@ +import errno +import itertools +import logging +import os.path +import tempfile +import traceback +from contextlib import ExitStack, contextmanager +from pathlib import Path +from typing import ( + Any, + Callable, + Dict, + Generator, + List, + Optional, + TypeVar, + Union, +) + +from pip._internal.utils.misc import enum, rmtree + +logger = logging.getLogger(__name__) + +_T = TypeVar("_T", bound="TempDirectory") + + +# Kinds of temporary directories. Only needed for ones that are +# globally-managed. +tempdir_kinds = enum( + BUILD_ENV="build-env", + EPHEM_WHEEL_CACHE="ephem-wheel-cache", + REQ_BUILD="req-build", +) + + +_tempdir_manager: Optional[ExitStack] = None + + +@contextmanager +def global_tempdir_manager() -> Generator[None, None, None]: + global _tempdir_manager + with ExitStack() as stack: + old_tempdir_manager, _tempdir_manager = _tempdir_manager, stack + try: + yield + finally: + _tempdir_manager = old_tempdir_manager + + +class TempDirectoryTypeRegistry: + """Manages temp directory behavior""" + + def __init__(self) -> None: + self._should_delete: Dict[str, bool] = {} + + def set_delete(self, kind: str, value: bool) -> None: + """Indicate whether a TempDirectory of the given kind should be + auto-deleted. + """ + self._should_delete[kind] = value + + def get_delete(self, kind: str) -> bool: + """Get configured auto-delete flag for a given TempDirectory type, + default True. + """ + return self._should_delete.get(kind, True) + + +_tempdir_registry: Optional[TempDirectoryTypeRegistry] = None + + +@contextmanager +def tempdir_registry() -> Generator[TempDirectoryTypeRegistry, None, None]: + """Provides a scoped global tempdir registry that can be used to dictate + whether directories should be deleted. + """ + global _tempdir_registry + old_tempdir_registry = _tempdir_registry + _tempdir_registry = TempDirectoryTypeRegistry() + try: + yield _tempdir_registry + finally: + _tempdir_registry = old_tempdir_registry + + +class _Default: + pass + + +_default = _Default() + + +class TempDirectory: + """Helper class that owns and cleans up a temporary directory. + + This class can be used as a context manager or as an OO representation of a + temporary directory. + + Attributes: + path + Location to the created temporary directory + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + Methods: + cleanup() + Deletes the temporary directory + + When used as a context manager, if the delete attribute is True, on + exiting the context the temporary directory is deleted. + """ + + def __init__( + self, + path: Optional[str] = None, + delete: Union[bool, None, _Default] = _default, + kind: str = "temp", + globally_managed: bool = False, + ignore_cleanup_errors: bool = True, + ): + super().__init__() + + if delete is _default: + if path is not None: + # If we were given an explicit directory, resolve delete option + # now. + delete = False + else: + # Otherwise, we wait until cleanup and see what + # tempdir_registry says. + delete = None + + # The only time we specify path is in for editables where it + # is the value of the --src option. + if path is None: + path = self._create(kind) + + self._path = path + self._deleted = False + self.delete = delete + self.kind = kind + self.ignore_cleanup_errors = ignore_cleanup_errors + + if globally_managed: + assert _tempdir_manager is not None + _tempdir_manager.enter_context(self) + + @property + def path(self) -> str: + assert not self._deleted, f"Attempted to access deleted path: {self._path}" + return self._path + + def __repr__(self) -> str: + return f"<{self.__class__.__name__} {self.path!r}>" + + def __enter__(self: _T) -> _T: + return self + + def __exit__(self, exc: Any, value: Any, tb: Any) -> None: + if self.delete is not None: + delete = self.delete + elif _tempdir_registry: + delete = _tempdir_registry.get_delete(self.kind) + else: + delete = True + + if delete: + self.cleanup() + + def _create(self, kind: str) -> str: + """Create a temporary directory and store its path in self.path""" + # We realpath here because some systems have their default tmpdir + # symlinked to another directory. This tends to confuse build + # scripts, so we canonicalize the path by traversing potential + # symlinks here. + path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) + logger.debug("Created temporary directory: %s", path) + return path + + def cleanup(self) -> None: + """Remove the temporary directory created and reset state""" + self._deleted = True + if not os.path.exists(self._path): + return + + errors: List[BaseException] = [] + + def onerror( + func: Callable[..., Any], + path: Path, + exc_val: BaseException, + ) -> None: + """Log a warning for a `rmtree` error and continue""" + formatted_exc = "\n".join( + traceback.format_exception_only(type(exc_val), exc_val) + ) + formatted_exc = formatted_exc.rstrip() # remove trailing new line + if func in (os.unlink, os.remove, os.rmdir): + logger.debug( + "Failed to remove a temporary file '%s' due to %s.\n", + path, + formatted_exc, + ) + else: + logger.debug("%s failed with %s.", func.__qualname__, formatted_exc) + errors.append(exc_val) + + if self.ignore_cleanup_errors: + try: + # first try with tenacity; retrying to handle ephemeral errors + rmtree(self._path, ignore_errors=False) + except OSError: + # last pass ignore/log all errors + rmtree(self._path, onexc=onerror) + if errors: + logger.warning( + "Failed to remove contents in a temporary directory '%s'.\n" + "You can safely remove it manually.", + self._path, + ) + else: + rmtree(self._path) + + +class AdjacentTempDirectory(TempDirectory): + """Helper class that creates a temporary directory adjacent to a real one. + + Attributes: + original + The original directory to create a temp directory for. + path + After calling create() or entering, contains the full + path to the temporary directory. + delete + Whether the directory should be deleted when exiting + (when used as a contextmanager) + + """ + + # The characters that may be used to name the temp directory + # We always prepend a ~ and then rotate through these until + # a usable name is found. + # pkg_resources raises a different error for .dist-info folder + # with leading '-' and invalid metadata + LEADING_CHARS = "-~.=%0123456789" + + def __init__(self, original: str, delete: Optional[bool] = None) -> None: + self.original = original.rstrip("/\\") + super().__init__(delete=delete) + + @classmethod + def _generate_names(cls, name: str) -> Generator[str, None, None]: + """Generates a series of temporary names. + + The algorithm replaces the leading characters in the name + with ones that are valid filesystem characters, but are not + valid package names (for both Python and pip definitions of + package). + """ + for i in range(1, len(name)): + for candidate in itertools.combinations_with_replacement( + cls.LEADING_CHARS, i - 1 + ): + new_name = "~" + "".join(candidate) + name[i:] + if new_name != name: + yield new_name + + # If we make it this far, we will have to make a longer name + for i in range(len(cls.LEADING_CHARS)): + for candidate in itertools.combinations_with_replacement( + cls.LEADING_CHARS, i + ): + new_name = "~" + "".join(candidate) + name + if new_name != name: + yield new_name + + def _create(self, kind: str) -> str: + root, name = os.path.split(self.original) + for candidate in self._generate_names(name): + path = os.path.join(root, candidate) + try: + os.mkdir(path) + except OSError as ex: + # Continue if the name exists already + if ex.errno != errno.EEXIST: + raise + else: + path = os.path.realpath(path) + break + else: + # Final fallback on the default behavior. + path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) + + logger.debug("Created temporary directory: %s", path) + return path diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py new file mode 100644 index 0000000..78b5c13 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py @@ -0,0 +1,257 @@ +"""Utilities related archives. +""" + +import logging +import os +import shutil +import stat +import tarfile +import zipfile +from typing import Iterable, List, Optional +from zipfile import ZipInfo + +from pip._internal.exceptions import InstallationError +from pip._internal.utils.filetypes import ( + BZ2_EXTENSIONS, + TAR_EXTENSIONS, + XZ_EXTENSIONS, + ZIP_EXTENSIONS, +) +from pip._internal.utils.misc import ensure_dir + +logger = logging.getLogger(__name__) + + +SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS + +try: + import bz2 # noqa + + SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS +except ImportError: + logger.debug("bz2 module is not available") + +try: + # Only for Python 3.3+ + import lzma # noqa + + SUPPORTED_EXTENSIONS += XZ_EXTENSIONS +except ImportError: + logger.debug("lzma module is not available") + + +def current_umask() -> int: + """Get the current umask which involves having to set it temporarily.""" + mask = os.umask(0) + os.umask(mask) + return mask + + +def split_leading_dir(path: str) -> List[str]: + path = path.lstrip("/").lstrip("\\") + if "/" in path and ( + ("\\" in path and path.find("/") < path.find("\\")) or "\\" not in path + ): + return path.split("/", 1) + elif "\\" in path: + return path.split("\\", 1) + else: + return [path, ""] + + +def has_leading_dir(paths: Iterable[str]) -> bool: + """Returns true if all the paths have the same leading path name + (i.e., everything is in one subdirectory in an archive)""" + common_prefix = None + for path in paths: + prefix, rest = split_leading_dir(path) + if not prefix: + return False + elif common_prefix is None: + common_prefix = prefix + elif prefix != common_prefix: + return False + return True + + +def is_within_directory(directory: str, target: str) -> bool: + """ + Return true if the absolute path of target is within the directory + """ + abs_directory = os.path.abspath(directory) + abs_target = os.path.abspath(target) + + prefix = os.path.commonprefix([abs_directory, abs_target]) + return prefix == abs_directory + + +def set_extracted_file_to_default_mode_plus_executable(path: str) -> None: + """ + Make file present at path have execute for user/group/world + (chmod +x) is no-op on windows per python docs + """ + os.chmod(path, (0o777 & ~current_umask() | 0o111)) + + +def zip_item_is_executable(info: ZipInfo) -> bool: + mode = info.external_attr >> 16 + # if mode and regular file and any execute permissions for + # user/group/world? + return bool(mode and stat.S_ISREG(mode) and mode & 0o111) + + +def unzip_file(filename: str, location: str, flatten: bool = True) -> None: + """ + Unzip the file (with path `filename`) to the destination `location`. All + files are written based on system defaults and umask (i.e. permissions are + not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + zipfp = open(filename, "rb") + try: + zip = zipfile.ZipFile(zipfp, allowZip64=True) + leading = has_leading_dir(zip.namelist()) and flatten + for info in zip.infolist(): + name = info.filename + fn = name + if leading: + fn = split_leading_dir(name)[1] + fn = os.path.join(location, fn) + dir = os.path.dirname(fn) + if not is_within_directory(location, fn): + message = ( + "The zip file ({}) has a file ({}) trying to install " + "outside target directory ({})" + ) + raise InstallationError(message.format(filename, fn, location)) + if fn.endswith("/") or fn.endswith("\\"): + # A directory + ensure_dir(fn) + else: + ensure_dir(dir) + # Don't use read() to avoid allocating an arbitrarily large + # chunk of memory for the file's content + fp = zip.open(name) + try: + with open(fn, "wb") as destfp: + shutil.copyfileobj(fp, destfp) + finally: + fp.close() + if zip_item_is_executable(info): + set_extracted_file_to_default_mode_plus_executable(fn) + finally: + zipfp.close() + + +def untar_file(filename: str, location: str) -> None: + """ + Untar the file (with path `filename`) to the destination `location`. + All files are written based on system defaults and umask (i.e. permissions + are not preserved), except that regular file members with any execute + permissions (user, group, or world) have "chmod +x" applied after being + written. Note that for windows, any execute changes using os.chmod are + no-ops per the python docs. + """ + ensure_dir(location) + if filename.lower().endswith(".gz") or filename.lower().endswith(".tgz"): + mode = "r:gz" + elif filename.lower().endswith(BZ2_EXTENSIONS): + mode = "r:bz2" + elif filename.lower().endswith(XZ_EXTENSIONS): + mode = "r:xz" + elif filename.lower().endswith(".tar"): + mode = "r" + else: + logger.warning( + "Cannot determine compression type for file %s", + filename, + ) + mode = "r:*" + tar = tarfile.open(filename, mode, encoding="utf-8") + try: + leading = has_leading_dir([member.name for member in tar.getmembers()]) + for member in tar.getmembers(): + fn = member.name + if leading: + fn = split_leading_dir(fn)[1] + path = os.path.join(location, fn) + if not is_within_directory(location, path): + message = ( + "The tar file ({}) has a file ({}) trying to install " + "outside target directory ({})" + ) + raise InstallationError(message.format(filename, path, location)) + if member.isdir(): + ensure_dir(path) + elif member.issym(): + try: + tar._extract_member(member, path) + except Exception as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + "In the tar file %s the member %s is invalid: %s", + filename, + member.name, + exc, + ) + continue + else: + try: + fp = tar.extractfile(member) + except (KeyError, AttributeError) as exc: + # Some corrupt tar files seem to produce this + # (specifically bad symlinks) + logger.warning( + "In the tar file %s the member %s is invalid: %s", + filename, + member.name, + exc, + ) + continue + ensure_dir(os.path.dirname(path)) + assert fp is not None + with open(path, "wb") as destfp: + shutil.copyfileobj(fp, destfp) + fp.close() + # Update the timestamp (useful for cython compiled files) + tar.utime(member, path) + # member have any execute permissions for user/group/world? + if member.mode & 0o111: + set_extracted_file_to_default_mode_plus_executable(path) + finally: + tar.close() + + +def unpack_file( + filename: str, + location: str, + content_type: Optional[str] = None, +) -> None: + filename = os.path.realpath(filename) + if ( + content_type == "application/zip" + or filename.lower().endswith(ZIP_EXTENSIONS) + or zipfile.is_zipfile(filename) + ): + unzip_file(filename, location, flatten=not filename.endswith(".whl")) + elif ( + content_type == "application/x-gzip" + or tarfile.is_tarfile(filename) + or filename.lower().endswith(TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS) + ): + untar_file(filename, location) + else: + # FIXME: handle? + # FIXME: magic signatures? + logger.critical( + "Cannot unpack file %s (downloaded from %s, content-type: %s); " + "cannot detect archive format", + filename, + location, + content_type, + ) + raise InstallationError(f"Cannot determine archive format of {location}") diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/urls.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/urls.py new file mode 100644 index 0000000..6ba2e04 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/urls.py @@ -0,0 +1,62 @@ +import os +import string +import urllib.parse +import urllib.request +from typing import Optional + +from .compat import WINDOWS + + +def get_url_scheme(url: str) -> Optional[str]: + if ":" not in url: + return None + return url.split(":", 1)[0].lower() + + +def path_to_url(path: str) -> str: + """ + Convert a path to a file: URL. The path will be made absolute and have + quoted path parts. + """ + path = os.path.normpath(os.path.abspath(path)) + url = urllib.parse.urljoin("file:", urllib.request.pathname2url(path)) + return url + + +def url_to_path(url: str) -> str: + """ + Convert a file: URL to a path. + """ + assert url.startswith( + "file:" + ), f"You can only turn file: urls into filenames (not {url!r})" + + _, netloc, path, _, _ = urllib.parse.urlsplit(url) + + if not netloc or netloc == "localhost": + # According to RFC 8089, same as empty authority. + netloc = "" + elif WINDOWS: + # If we have a UNC path, prepend UNC share notation. + netloc = "\\\\" + netloc + else: + raise ValueError( + f"non-local file URIs are not supported on this platform: {url!r}" + ) + + path = urllib.request.url2pathname(netloc + path) + + # On Windows, urlsplit parses the path as something like "/C:/Users/foo". + # This creates issues for path-related functions like io.open(), so we try + # to detect and strip the leading slash. + if ( + WINDOWS + and not netloc # Not UNC. + and len(path) >= 3 + and path[0] == "/" # Leading slash to strip. + and path[1] in string.ascii_letters # Drive letter. + and path[2:4] in (":", ":/") # Colon + end of string, or colon + absolute path. + ): + path = path[1:] + + return path diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py new file mode 100644 index 0000000..882e36f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py @@ -0,0 +1,104 @@ +import logging +import os +import re +import site +import sys +from typing import List, Optional + +logger = logging.getLogger(__name__) +_INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile( + r"include-system-site-packages\s*=\s*(?Ptrue|false)" +) + + +def _running_under_venv() -> bool: + """Checks if sys.base_prefix and sys.prefix match. + + This handles PEP 405 compliant virtual environments. + """ + return sys.prefix != getattr(sys, "base_prefix", sys.prefix) + + +def _running_under_legacy_virtualenv() -> bool: + """Checks if sys.real_prefix is set. + + This handles virtual environments created with pypa's virtualenv. + """ + # pypa/virtualenv case + return hasattr(sys, "real_prefix") + + +def running_under_virtualenv() -> bool: + """True if we're running inside a virtual environment, False otherwise.""" + return _running_under_venv() or _running_under_legacy_virtualenv() + + +def _get_pyvenv_cfg_lines() -> Optional[List[str]]: + """Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines + + Returns None, if it could not read/access the file. + """ + pyvenv_cfg_file = os.path.join(sys.prefix, "pyvenv.cfg") + try: + # Although PEP 405 does not specify, the built-in venv module always + # writes with UTF-8. (pypa/pip#8717) + with open(pyvenv_cfg_file, encoding="utf-8") as f: + return f.read().splitlines() # avoids trailing newlines + except OSError: + return None + + +def _no_global_under_venv() -> bool: + """Check `{sys.prefix}/pyvenv.cfg` for system site-packages inclusion + + PEP 405 specifies that when system site-packages are not supposed to be + visible from a virtual environment, `pyvenv.cfg` must contain the following + line: + + include-system-site-packages = false + + Additionally, log a warning if accessing the file fails. + """ + cfg_lines = _get_pyvenv_cfg_lines() + if cfg_lines is None: + # We're not in a "sane" venv, so assume there is no system + # site-packages access (since that's PEP 405's default state). + logger.warning( + "Could not access 'pyvenv.cfg' despite a virtual environment " + "being active. Assuming global site-packages is not accessible " + "in this environment." + ) + return True + + for line in cfg_lines: + match = _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX.match(line) + if match is not None and match.group("value") == "false": + return True + return False + + +def _no_global_under_legacy_virtualenv() -> bool: + """Check if "no-global-site-packages.txt" exists beside site.py + + This mirrors logic in pypa/virtualenv for determining whether system + site-packages are visible in the virtual environment. + """ + site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) + no_global_site_packages_file = os.path.join( + site_mod_dir, + "no-global-site-packages.txt", + ) + return os.path.exists(no_global_site_packages_file) + + +def virtualenv_no_global() -> bool: + """Returns a boolean, whether running in venv with no system site-packages.""" + # PEP 405 compliance needs to be checked first since virtualenv >=20 would + # return True for both checks, but is only able to use the PEP 405 config. + if _running_under_venv(): + return _no_global_under_venv() + + if _running_under_legacy_virtualenv(): + return _no_global_under_legacy_virtualenv() + + return False diff --git a/venv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py b/venv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py new file mode 100644 index 0000000..3551f8f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py @@ -0,0 +1,134 @@ +"""Support functions for working with wheel files. +""" + +import logging +from email.message import Message +from email.parser import Parser +from typing import Tuple +from zipfile import BadZipFile, ZipFile + +from pip._vendor.packaging.utils import canonicalize_name + +from pip._internal.exceptions import UnsupportedWheel + +VERSION_COMPATIBLE = (1, 0) + + +logger = logging.getLogger(__name__) + + +def parse_wheel(wheel_zip: ZipFile, name: str) -> Tuple[str, Message]: + """Extract information from the provided wheel, ensuring it meets basic + standards. + + Returns the name of the .dist-info directory and the parsed WHEEL metadata. + """ + try: + info_dir = wheel_dist_info_dir(wheel_zip, name) + metadata = wheel_metadata(wheel_zip, info_dir) + version = wheel_version(metadata) + except UnsupportedWheel as e: + raise UnsupportedWheel(f"{name} has an invalid wheel, {str(e)}") + + check_compatibility(version, name) + + return info_dir, metadata + + +def wheel_dist_info_dir(source: ZipFile, name: str) -> str: + """Returns the name of the contained .dist-info directory. + + Raises AssertionError or UnsupportedWheel if not found, >1 found, or + it doesn't match the provided name. + """ + # Zip file path separators must be / + subdirs = {p.split("/", 1)[0] for p in source.namelist()} + + info_dirs = [s for s in subdirs if s.endswith(".dist-info")] + + if not info_dirs: + raise UnsupportedWheel(".dist-info directory not found") + + if len(info_dirs) > 1: + raise UnsupportedWheel( + "multiple .dist-info directories found: {}".format(", ".join(info_dirs)) + ) + + info_dir = info_dirs[0] + + info_dir_name = canonicalize_name(info_dir) + canonical_name = canonicalize_name(name) + if not info_dir_name.startswith(canonical_name): + raise UnsupportedWheel( + f".dist-info directory {info_dir!r} does not start with {canonical_name!r}" + ) + + return info_dir + + +def read_wheel_metadata_file(source: ZipFile, path: str) -> bytes: + try: + return source.read(path) + # BadZipFile for general corruption, KeyError for missing entry, + # and RuntimeError for password-protected files + except (BadZipFile, KeyError, RuntimeError) as e: + raise UnsupportedWheel(f"could not read {path!r} file: {e!r}") + + +def wheel_metadata(source: ZipFile, dist_info_dir: str) -> Message: + """Return the WHEEL metadata of an extracted wheel, if possible. + Otherwise, raise UnsupportedWheel. + """ + path = f"{dist_info_dir}/WHEEL" + # Zip file path separators must be / + wheel_contents = read_wheel_metadata_file(source, path) + + try: + wheel_text = wheel_contents.decode() + except UnicodeDecodeError as e: + raise UnsupportedWheel(f"error decoding {path!r}: {e!r}") + + # FeedParser (used by Parser) does not raise any exceptions. The returned + # message may have .defects populated, but for backwards-compatibility we + # currently ignore them. + return Parser().parsestr(wheel_text) + + +def wheel_version(wheel_data: Message) -> Tuple[int, ...]: + """Given WHEEL metadata, return the parsed Wheel-Version. + Otherwise, raise UnsupportedWheel. + """ + version_text = wheel_data["Wheel-Version"] + if version_text is None: + raise UnsupportedWheel("WHEEL is missing Wheel-Version") + + version = version_text.strip() + + try: + return tuple(map(int, version.split("."))) + except ValueError: + raise UnsupportedWheel(f"invalid Wheel-Version: {version!r}") + + +def check_compatibility(version: Tuple[int, ...], name: str) -> None: + """Raises errors or warns if called with an incompatible Wheel-Version. + + pip should refuse to install a Wheel-Version that's a major series + ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when + installing a version only minor version ahead (e.g 1.2 > 1.1). + + version: a 2-tuple representing a Wheel-Version (Major, Minor) + name: name of wheel or package to raise exception about + + :raises UnsupportedWheel: when an incompatible Wheel-Version is given + """ + if version[0] > VERSION_COMPATIBLE[0]: + raise UnsupportedWheel( + "{}'s Wheel-Version ({}) is not compatible with this version " + "of pip".format(name, ".".join(map(str, version))) + ) + elif version > VERSION_COMPATIBLE: + logger.warning( + "Installing from a newer Wheel-Version (%s)", + ".".join(map(str, version)), + ) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py new file mode 100644 index 0000000..b6beddb --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py @@ -0,0 +1,15 @@ +# Expose a limited set of classes and functions so callers outside of +# the vcs package don't need to import deeper than `pip._internal.vcs`. +# (The test directory may still need to import from a vcs sub-package.) +# Import all vcs modules to register each VCS in the VcsSupport object. +import pip._internal.vcs.bazaar +import pip._internal.vcs.git +import pip._internal.vcs.mercurial +import pip._internal.vcs.subversion # noqa: F401 +from pip._internal.vcs.versioncontrol import ( # noqa: F401 + RemoteNotFoundError, + RemoteNotValidError, + is_url, + make_vcs_requirement_url, + vcs, +) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..85436de Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc new file mode 100644 index 0000000..3b23b4c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc new file mode 100644 index 0000000..6d1008b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc new file mode 100644 index 0000000..499b53c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc new file mode 100644 index 0000000..e2cb2fc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc new file mode 100644 index 0000000..100def6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py b/venv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py new file mode 100644 index 0000000..20a17ed --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py @@ -0,0 +1,112 @@ +import logging +from typing import List, Optional, Tuple + +from pip._internal.utils.misc import HiddenText, display_path +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RevOptions, + VersionControl, + vcs, +) + +logger = logging.getLogger(__name__) + + +class Bazaar(VersionControl): + name = "bzr" + dirname = ".bzr" + repo_name = "branch" + schemes = ( + "bzr+http", + "bzr+https", + "bzr+ssh", + "bzr+sftp", + "bzr+ftp", + "bzr+lp", + "bzr+file", + ) + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return ["-r", rev] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Checking out %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flag = "--quiet" + elif verbosity == 1: + flag = "" + else: + flag = f"-{'v'*verbosity}" + cmd_args = make_command( + "checkout", "--lightweight", flag, rev_options.to_args(), url, dest + ) + self.run_command(cmd_args) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command(make_command("switch", url), cwd=dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + output = self.run_command( + make_command("info"), show_stdout=False, stdout_only=True, cwd=dest + ) + if output.startswith("Standalone "): + # Older versions of pip used to create standalone branches. + # Convert the standalone branch to a checkout by calling "bzr bind". + cmd_args = make_command("bind", "-q", url) + self.run_command(cmd_args, cwd=dest) + + cmd_args = make_command("update", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + # hotfix the URL scheme after removing bzr+ from bzr+ssh:// re-add it + url, rev, user_pass = super().get_url_rev_and_auth(url) + if url.startswith("ssh://"): + url = "bzr+" + url + return url, rev, user_pass + + @classmethod + def get_remote_url(cls, location: str) -> str: + urls = cls.run_command( + ["info"], show_stdout=False, stdout_only=True, cwd=location + ) + for line in urls.splitlines(): + line = line.strip() + for x in ("checkout of branch: ", "parent branch: "): + if line.startswith(x): + repo = line.split(x)[1] + if cls._is_local_repository(repo): + return path_to_url(repo) + return repo + raise RemoteNotFoundError + + @classmethod + def get_revision(cls, location: str) -> str: + revision = cls.run_command( + ["revno"], + show_stdout=False, + stdout_only=True, + cwd=location, + ) + return revision.splitlines()[-1] + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + +vcs.register(Bazaar) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/git.py b/venv/lib/python3.12/site-packages/pip/_internal/vcs/git.py new file mode 100644 index 0000000..8c242cf --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/vcs/git.py @@ -0,0 +1,526 @@ +import logging +import os.path +import pathlib +import re +import urllib.parse +import urllib.request +from typing import List, Optional, Tuple + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import HiddenText, display_path, hide_url +from pip._internal.utils.subprocess import make_command +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RemoteNotValidError, + RevOptions, + VersionControl, + find_path_to_project_root_from_repo_root, + vcs, +) + +urlsplit = urllib.parse.urlsplit +urlunsplit = urllib.parse.urlunsplit + + +logger = logging.getLogger(__name__) + + +GIT_VERSION_REGEX = re.compile( + r"^git version " # Prefix. + r"(\d+)" # Major. + r"\.(\d+)" # Dot, minor. + r"(?:\.(\d+))?" # Optional dot, patch. + r".*$" # Suffix, including any pre- and post-release segments we don't care about. +) + +HASH_REGEX = re.compile("^[a-fA-F0-9]{40}$") + +# SCP (Secure copy protocol) shorthand. e.g. 'git@example.com:foo/bar.git' +SCP_REGEX = re.compile( + r"""^ + # Optional user, e.g. 'git@' + (\w+@)? + # Server, e.g. 'github.com'. + ([^/:]+): + # The server-side path. e.g. 'user/project.git'. Must start with an + # alphanumeric character so as not to be confusable with a Windows paths + # like 'C:/foo/bar' or 'C:\foo\bar'. + (\w[^:]*) + $""", + re.VERBOSE, +) + + +def looks_like_hash(sha: str) -> bool: + return bool(HASH_REGEX.match(sha)) + + +class Git(VersionControl): + name = "git" + dirname = ".git" + repo_name = "clone" + schemes = ( + "git+http", + "git+https", + "git+ssh", + "git+git", + "git+file", + ) + # Prevent the user's environment variables from interfering with pip: + # https://github.com/pypa/pip/issues/1130 + unset_environ = ("GIT_DIR", "GIT_WORK_TREE") + default_arg_rev = "HEAD" + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return [rev] + + def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: + _, rev_options = self.get_url_rev_options(hide_url(url)) + if not rev_options.rev: + return False + if not self.is_commit_id_equal(dest, rev_options.rev): + # the current commit is different from rev, + # which means rev was something else than a commit hash + return False + # return False in the rare case rev is both a commit hash + # and a tag or a branch; we don't want to cache in that case + # because that branch/tag could point to something else in the future + is_tag_or_branch = bool(self.get_revision_sha(dest, rev_options.rev)[0]) + return not is_tag_or_branch + + def get_git_version(self) -> Tuple[int, ...]: + version = self.run_command( + ["version"], + command_desc="git version", + show_stdout=False, + stdout_only=True, + ) + match = GIT_VERSION_REGEX.match(version) + if not match: + logger.warning("Can't parse git version: %s", version) + return () + return (int(match.group(1)), int(match.group(2))) + + @classmethod + def get_current_branch(cls, location: str) -> Optional[str]: + """ + Return the current branch, or None if HEAD isn't at a branch + (e.g. detached HEAD). + """ + # git-symbolic-ref exits with empty stdout if "HEAD" is a detached + # HEAD rather than a symbolic ref. In addition, the -q causes the + # command to exit with status code 1 instead of 128 in this case + # and to suppress the message to stderr. + args = ["symbolic-ref", "-q", "HEAD"] + output = cls.run_command( + args, + extra_ok_returncodes=(1,), + show_stdout=False, + stdout_only=True, + cwd=location, + ) + ref = output.strip() + + if ref.startswith("refs/heads/"): + return ref[len("refs/heads/") :] + + return None + + @classmethod + def get_revision_sha(cls, dest: str, rev: str) -> Tuple[Optional[str], bool]: + """ + Return (sha_or_none, is_branch), where sha_or_none is a commit hash + if the revision names a remote branch or tag, otherwise None. + + Args: + dest: the repository directory. + rev: the revision name. + """ + # Pass rev to pre-filter the list. + output = cls.run_command( + ["show-ref", rev], + cwd=dest, + show_stdout=False, + stdout_only=True, + on_returncode="ignore", + ) + refs = {} + # NOTE: We do not use splitlines here since that would split on other + # unicode separators, which can be maliciously used to install a + # different revision. + for line in output.strip().split("\n"): + line = line.rstrip("\r") + if not line: + continue + try: + ref_sha, ref_name = line.split(" ", maxsplit=2) + except ValueError: + # Include the offending line to simplify troubleshooting if + # this error ever occurs. + raise ValueError(f"unexpected show-ref line: {line!r}") + + refs[ref_name] = ref_sha + + branch_ref = f"refs/remotes/origin/{rev}" + tag_ref = f"refs/tags/{rev}" + + sha = refs.get(branch_ref) + if sha is not None: + return (sha, True) + + sha = refs.get(tag_ref) + + return (sha, False) + + @classmethod + def _should_fetch(cls, dest: str, rev: str) -> bool: + """ + Return true if rev is a ref or is a commit that we don't have locally. + + Branches and tags are not considered in this method because they are + assumed to be always available locally (which is a normal outcome of + ``git clone`` and ``git fetch --tags``). + """ + if rev.startswith("refs/"): + # Always fetch remote refs. + return True + + if not looks_like_hash(rev): + # Git fetch would fail with abbreviated commits. + return False + + if cls.has_commit(dest, rev): + # Don't fetch if we have the commit locally. + return False + + return True + + @classmethod + def resolve_revision( + cls, dest: str, url: HiddenText, rev_options: RevOptions + ) -> RevOptions: + """ + Resolve a revision to a new RevOptions object with the SHA1 of the + branch, tag, or ref if found. + + Args: + rev_options: a RevOptions object. + """ + rev = rev_options.arg_rev + # The arg_rev property's implementation for Git ensures that the + # rev return value is always non-None. + assert rev is not None + + sha, is_branch = cls.get_revision_sha(dest, rev) + + if sha is not None: + rev_options = rev_options.make_new(sha) + rev_options.branch_name = rev if is_branch else None + + return rev_options + + # Do not show a warning for the common case of something that has + # the form of a Git commit hash. + if not looks_like_hash(rev): + logger.warning( + "Did not find branch or tag '%s', assuming revision or ref.", + rev, + ) + + if not cls._should_fetch(dest, rev): + return rev_options + + # fetch the requested revision + cls.run_command( + make_command("fetch", "-q", url, rev_options.to_args()), + cwd=dest, + ) + # Change the revision to the SHA of the ref we fetched + sha = cls.get_revision(dest, rev="FETCH_HEAD") + rev_options = rev_options.make_new(sha) + + return rev_options + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """ + Return whether the current commit hash equals the given name. + + Args: + dest: the repository directory. + name: a string name. + """ + if not name: + # Then avoid an unnecessary subprocess call. + return False + + return cls.get_revision(dest) == name + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info("Cloning %s%s to %s", url, rev_display, display_path(dest)) + if verbosity <= 0: + flags: Tuple[str, ...] = ("--quiet",) + elif verbosity == 1: + flags = () + else: + flags = ("--verbose", "--progress") + if self.get_git_version() >= (2, 17): + # Git added support for partial clone in 2.17 + # https://git-scm.com/docs/partial-clone + # Speeds up cloning by functioning without a complete copy of repository + self.run_command( + make_command( + "clone", + "--filter=blob:none", + *flags, + url, + dest, + ) + ) + else: + self.run_command(make_command("clone", *flags, url, dest)) + + if rev_options.rev: + # Then a specific revision was requested. + rev_options = self.resolve_revision(dest, url, rev_options) + branch_name = getattr(rev_options, "branch_name", None) + logger.debug("Rev options %s, branch_name %s", rev_options, branch_name) + if branch_name is None: + # Only do a checkout if the current commit id doesn't match + # the requested revision. + if not self.is_commit_id_equal(dest, rev_options.rev): + cmd_args = make_command( + "checkout", + "-q", + rev_options.to_args(), + ) + self.run_command(cmd_args, cwd=dest) + elif self.get_current_branch(dest) != branch_name: + # Then a specific branch was requested, and that branch + # is not yet checked out. + track_branch = f"origin/{branch_name}" + cmd_args = [ + "checkout", + "-b", + branch_name, + "--track", + track_branch, + ] + self.run_command(cmd_args, cwd=dest) + else: + sha = self.get_revision(dest) + rev_options = rev_options.make_new(sha) + + logger.info("Resolved %s to commit %s", url, rev_options.rev) + + #: repo may contain submodules + self.update_submodules(dest) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command( + make_command("config", "remote.origin.url", url), + cwd=dest, + ) + cmd_args = make_command("checkout", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + self.update_submodules(dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + # First fetch changes from the default remote + if self.get_git_version() >= (1, 9): + # fetch tags in addition to everything else + self.run_command(["fetch", "-q", "--tags"], cwd=dest) + else: + self.run_command(["fetch", "-q"], cwd=dest) + # Then reset to wanted revision (maybe even origin/master) + rev_options = self.resolve_revision(dest, url, rev_options) + cmd_args = make_command("reset", "--hard", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + #: update submodules + self.update_submodules(dest) + + @classmethod + def get_remote_url(cls, location: str) -> str: + """ + Return URL of the first remote encountered. + + Raises RemoteNotFoundError if the repository does not have a remote + url configured. + """ + # We need to pass 1 for extra_ok_returncodes since the command + # exits with return code 1 if there are no matching lines. + stdout = cls.run_command( + ["config", "--get-regexp", r"remote\..*\.url"], + extra_ok_returncodes=(1,), + show_stdout=False, + stdout_only=True, + cwd=location, + ) + remotes = stdout.splitlines() + try: + found_remote = remotes[0] + except IndexError: + raise RemoteNotFoundError + + for remote in remotes: + if remote.startswith("remote.origin.url "): + found_remote = remote + break + url = found_remote.split(" ")[1] + return cls._git_remote_to_pip_url(url.strip()) + + @staticmethod + def _git_remote_to_pip_url(url: str) -> str: + """ + Convert a remote url from what git uses to what pip accepts. + + There are 3 legal forms **url** may take: + + 1. A fully qualified url: ssh://git@example.com/foo/bar.git + 2. A local project.git folder: /path/to/bare/repository.git + 3. SCP shorthand for form 1: git@example.com:foo/bar.git + + Form 1 is output as-is. Form 2 must be converted to URI and form 3 must + be converted to form 1. + + See the corresponding test test_git_remote_url_to_pip() for examples of + sample inputs/outputs. + """ + if re.match(r"\w+://", url): + # This is already valid. Pass it though as-is. + return url + if os.path.exists(url): + # A local bare remote (git clone --mirror). + # Needs a file:// prefix. + return pathlib.PurePath(url).as_uri() + scp_match = SCP_REGEX.match(url) + if scp_match: + # Add an ssh:// prefix and replace the ':' with a '/'. + return scp_match.expand(r"ssh://\1\2/\3") + # Otherwise, bail out. + raise RemoteNotValidError(url) + + @classmethod + def has_commit(cls, location: str, rev: str) -> bool: + """ + Check if rev is a commit that is available in the local repository. + """ + try: + cls.run_command( + ["rev-parse", "-q", "--verify", "sha^" + rev], + cwd=location, + log_failed_cmd=False, + ) + except InstallationError: + return False + else: + return True + + @classmethod + def get_revision(cls, location: str, rev: Optional[str] = None) -> str: + if rev is None: + rev = "HEAD" + current_rev = cls.run_command( + ["rev-parse", rev], + show_stdout=False, + stdout_only=True, + cwd=location, + ) + return current_rev.strip() + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + # find the repo root + git_dir = cls.run_command( + ["rev-parse", "--git-dir"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + if not os.path.isabs(git_dir): + git_dir = os.path.join(location, git_dir) + repo_root = os.path.abspath(os.path.join(git_dir, "..")) + return find_path_to_project_root_from_repo_root(location, repo_root) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + """ + Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. + That's required because although they use SSH they sometimes don't + work with a ssh:// scheme (e.g. GitHub). But we need a scheme for + parsing. Hence we remove it again afterwards and return it as a stub. + """ + # Works around an apparent Git bug + # (see https://article.gmane.org/gmane.comp.version-control.git/146500) + scheme, netloc, path, query, fragment = urlsplit(url) + if scheme.endswith("file"): + initial_slashes = path[: -len(path.lstrip("/"))] + newpath = initial_slashes + urllib.request.url2pathname(path).replace( + "\\", "/" + ).lstrip("/") + after_plus = scheme.find("+") + 1 + url = scheme[:after_plus] + urlunsplit( + (scheme[after_plus:], netloc, newpath, query, fragment), + ) + + if "://" not in url: + assert "file:" not in url + url = url.replace("git+", "git+ssh://") + url, rev, user_pass = super().get_url_rev_and_auth(url) + url = url.replace("ssh://", "") + else: + url, rev, user_pass = super().get_url_rev_and_auth(url) + + return url, rev, user_pass + + @classmethod + def update_submodules(cls, location: str) -> None: + if not os.path.exists(os.path.join(location, ".gitmodules")): + return + cls.run_command( + ["submodule", "update", "--init", "--recursive", "-q"], + cwd=location, + ) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + loc = super().get_repository_root(location) + if loc: + return loc + try: + r = cls.run_command( + ["rev-parse", "--show-toplevel"], + cwd=location, + show_stdout=False, + stdout_only=True, + on_returncode="raise", + log_failed_cmd=False, + ) + except BadCommand: + logger.debug( + "could not determine if %s is under git control " + "because git is not available", + location, + ) + return None + except InstallationError: + return None + return os.path.normpath(r.rstrip("\r\n")) + + @staticmethod + def should_add_vcs_url_prefix(repo_url: str) -> bool: + """In either https or ssh form, requirements must be prefixed with git+.""" + return True + + +vcs.register(Git) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py b/venv/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py new file mode 100644 index 0000000..c183d41 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py @@ -0,0 +1,163 @@ +import configparser +import logging +import os +from typing import List, Optional, Tuple + +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import HiddenText, display_path +from pip._internal.utils.subprocess import make_command +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs.versioncontrol import ( + RevOptions, + VersionControl, + find_path_to_project_root_from_repo_root, + vcs, +) + +logger = logging.getLogger(__name__) + + +class Mercurial(VersionControl): + name = "hg" + dirname = ".hg" + repo_name = "clone" + schemes = ( + "hg+file", + "hg+http", + "hg+https", + "hg+ssh", + "hg+static-http", + ) + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return [f"--rev={rev}"] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Cloning hg %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flags: Tuple[str, ...] = ("--quiet",) + elif verbosity == 1: + flags = () + elif verbosity == 2: + flags = ("--verbose",) + else: + flags = ("--verbose", "--debug") + self.run_command(make_command("clone", "--noupdate", *flags, url, dest)) + self.run_command( + make_command("update", *flags, rev_options.to_args()), + cwd=dest, + ) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + repo_config = os.path.join(dest, self.dirname, "hgrc") + config = configparser.RawConfigParser() + try: + config.read(repo_config) + config.set("paths", "default", url.secret) + with open(repo_config, "w") as config_file: + config.write(config_file) + except (OSError, configparser.NoSectionError) as exc: + logger.warning("Could not switch Mercurial repository to %s: %s", url, exc) + else: + cmd_args = make_command("update", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + self.run_command(["pull", "-q"], cwd=dest) + cmd_args = make_command("update", "-q", rev_options.to_args()) + self.run_command(cmd_args, cwd=dest) + + @classmethod + def get_remote_url(cls, location: str) -> str: + url = cls.run_command( + ["showconfig", "paths.default"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + if cls._is_local_repository(url): + url = path_to_url(url) + return url.strip() + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the repository-local changeset revision number, as an integer. + """ + current_revision = cls.run_command( + ["parents", "--template={rev}"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + return current_revision + + @classmethod + def get_requirement_revision(cls, location: str) -> str: + """ + Return the changeset identification hash, as a 40-character + hexadecimal string + """ + current_rev_hash = cls.run_command( + ["parents", "--template={node}"], + show_stdout=False, + stdout_only=True, + cwd=location, + ).strip() + return current_rev_hash + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + # find the repo root + repo_root = cls.run_command( + ["root"], show_stdout=False, stdout_only=True, cwd=location + ).strip() + if not os.path.isabs(repo_root): + repo_root = os.path.abspath(os.path.join(location, repo_root)) + return find_path_to_project_root_from_repo_root(location, repo_root) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + loc = super().get_repository_root(location) + if loc: + return loc + try: + r = cls.run_command( + ["root"], + cwd=location, + show_stdout=False, + stdout_only=True, + on_returncode="raise", + log_failed_cmd=False, + ) + except BadCommand: + logger.debug( + "could not determine if %s is under hg control " + "because hg is not available", + location, + ) + return None + except InstallationError: + return None + return os.path.normpath(r.rstrip("\r\n")) + + +vcs.register(Mercurial) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py b/venv/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py new file mode 100644 index 0000000..16d93a6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py @@ -0,0 +1,324 @@ +import logging +import os +import re +from typing import List, Optional, Tuple + +from pip._internal.utils.misc import ( + HiddenText, + display_path, + is_console_interactive, + is_installable_dir, + split_auth_from_netloc, +) +from pip._internal.utils.subprocess import CommandArgs, make_command +from pip._internal.vcs.versioncontrol import ( + AuthInfo, + RemoteNotFoundError, + RevOptions, + VersionControl, + vcs, +) + +logger = logging.getLogger(__name__) + +_svn_xml_url_re = re.compile('url="([^"]+)"') +_svn_rev_re = re.compile(r'committed-rev="(\d+)"') +_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') +_svn_info_xml_url_re = re.compile(r"(.*)") + + +class Subversion(VersionControl): + name = "svn" + dirname = ".svn" + repo_name = "checkout" + schemes = ("svn+ssh", "svn+http", "svn+https", "svn+svn", "svn+file") + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: + return True + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + return ["-r", rev] + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the maximum revision for all files under a given location + """ + # Note: taken from setuptools.command.egg_info + revision = 0 + + for base, dirs, _ in os.walk(location): + if cls.dirname not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove(cls.dirname) + entries_fn = os.path.join(base, cls.dirname, "entries") + if not os.path.exists(entries_fn): + # FIXME: should we warn? + continue + + dirurl, localrev = cls._get_svn_url_rev(base) + + if base == location: + assert dirurl is not None + base = dirurl + "/" # save the root url + elif not dirurl or not dirurl.startswith(base): + dirs[:] = [] + continue # not part of the same svn tree, skip it + revision = max(revision, localrev) + return str(revision) + + @classmethod + def get_netloc_and_auth( + cls, netloc: str, scheme: str + ) -> Tuple[str, Tuple[Optional[str], Optional[str]]]: + """ + This override allows the auth information to be passed to svn via the + --username and --password options instead of via the URL. + """ + if scheme == "ssh": + # The --username and --password options can't be used for + # svn+ssh URLs, so keep the auth information in the URL. + return super().get_netloc_and_auth(netloc, scheme) + + return split_auth_from_netloc(netloc) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + # hotfix the URL scheme after removing svn+ from svn+ssh:// re-add it + url, rev, user_pass = super().get_url_rev_and_auth(url) + if url.startswith("ssh://"): + url = "svn+" + url + return url, rev, user_pass + + @staticmethod + def make_rev_args( + username: Optional[str], password: Optional[HiddenText] + ) -> CommandArgs: + extra_args: CommandArgs = [] + if username: + extra_args += ["--username", username] + if password: + extra_args += ["--password", password] + + return extra_args + + @classmethod + def get_remote_url(cls, location: str) -> str: + # In cases where the source is in a subdirectory, we have to look up in + # the location until we find a valid project root. + orig_location = location + while not is_installable_dir(location): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding a Python project. + logger.warning( + "Could not find Python project for directory %s (tried all " + "parent directories)", + orig_location, + ) + raise RemoteNotFoundError + + url, _rev = cls._get_svn_url_rev(location) + if url is None: + raise RemoteNotFoundError + + return url + + @classmethod + def _get_svn_url_rev(cls, location: str) -> Tuple[Optional[str], int]: + from pip._internal.exceptions import InstallationError + + entries_path = os.path.join(location, cls.dirname, "entries") + if os.path.exists(entries_path): + with open(entries_path) as f: + data = f.read() + else: # subversion >= 1.7 does not have the 'entries' file + data = "" + + url = None + if data.startswith("8") or data.startswith("9") or data.startswith("10"): + entries = list(map(str.splitlines, data.split("\n\x0c\n"))) + del entries[0][0] # get rid of the '8' + url = entries[0][3] + revs = [int(d[9]) for d in entries if len(d) > 9 and d[9]] + [0] + elif data.startswith("= 1.7 + # Note that using get_remote_call_options is not necessary here + # because `svn info` is being run against a local directory. + # We don't need to worry about making sure interactive mode + # is being used to prompt for passwords, because passwords + # are only potentially needed for remote server requests. + xml = cls.run_command( + ["info", "--xml", location], + show_stdout=False, + stdout_only=True, + ) + match = _svn_info_xml_url_re.search(xml) + assert match is not None + url = match.group(1) + revs = [int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml)] + except InstallationError: + url, revs = None, [] + + if revs: + rev = max(revs) + else: + rev = 0 + + return url, rev + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """Always assume the versions don't match""" + return False + + def __init__(self, use_interactive: Optional[bool] = None) -> None: + if use_interactive is None: + use_interactive = is_console_interactive() + self.use_interactive = use_interactive + + # This member is used to cache the fetched version of the current + # ``svn`` client. + # Special value definitions: + # None: Not evaluated yet. + # Empty tuple: Could not parse version. + self._vcs_version: Optional[Tuple[int, ...]] = None + + super().__init__() + + def call_vcs_version(self) -> Tuple[int, ...]: + """Query the version of the currently installed Subversion client. + + :return: A tuple containing the parts of the version information or + ``()`` if the version returned from ``svn`` could not be parsed. + :raises: BadCommand: If ``svn`` is not installed. + """ + # Example versions: + # svn, version 1.10.3 (r1842928) + # compiled Feb 25 2019, 14:20:39 on x86_64-apple-darwin17.0.0 + # svn, version 1.7.14 (r1542130) + # compiled Mar 28 2018, 08:49:13 on x86_64-pc-linux-gnu + # svn, version 1.12.0-SlikSvn (SlikSvn/1.12.0) + # compiled May 28 2019, 13:44:56 on x86_64-microsoft-windows6.2 + version_prefix = "svn, version " + version = self.run_command(["--version"], show_stdout=False, stdout_only=True) + if not version.startswith(version_prefix): + return () + + version = version[len(version_prefix) :].split()[0] + version_list = version.partition("-")[0].split(".") + try: + parsed_version = tuple(map(int, version_list)) + except ValueError: + return () + + return parsed_version + + def get_vcs_version(self) -> Tuple[int, ...]: + """Return the version of the currently installed Subversion client. + + If the version of the Subversion client has already been queried, + a cached value will be used. + + :return: A tuple containing the parts of the version information or + ``()`` if the version returned from ``svn`` could not be parsed. + :raises: BadCommand: If ``svn`` is not installed. + """ + if self._vcs_version is not None: + # Use cached version, if available. + # If parsing the version failed previously (empty tuple), + # do not attempt to parse it again. + return self._vcs_version + + vcs_version = self.call_vcs_version() + self._vcs_version = vcs_version + return vcs_version + + def get_remote_call_options(self) -> CommandArgs: + """Return options to be used on calls to Subversion that contact the server. + + These options are applicable for the following ``svn`` subcommands used + in this class. + + - checkout + - switch + - update + + :return: A list of command line arguments to pass to ``svn``. + """ + if not self.use_interactive: + # --non-interactive switch is available since Subversion 0.14.4. + # Subversion < 1.8 runs in interactive mode by default. + return ["--non-interactive"] + + svn_version = self.get_vcs_version() + # By default, Subversion >= 1.8 runs in non-interactive mode if + # stdin is not a TTY. Since that is how pip invokes SVN, in + # call_subprocess(), pip must pass --force-interactive to ensure + # the user can be prompted for a password, if required. + # SVN added the --force-interactive option in SVN 1.8. Since + # e.g. RHEL/CentOS 7, which is supported until 2024, ships with + # SVN 1.7, pip should continue to support SVN 1.7. Therefore, pip + # can't safely add the option if the SVN version is < 1.8 (or unknown). + if svn_version >= (1, 8): + return ["--force-interactive"] + + return [] + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + rev_display = rev_options.to_display() + logger.info( + "Checking out %s%s to %s", + url, + rev_display, + display_path(dest), + ) + if verbosity <= 0: + flag = "--quiet" + else: + flag = "" + cmd_args = make_command( + "checkout", + flag, + self.get_remote_call_options(), + rev_options.to_args(), + url, + dest, + ) + self.run_command(cmd_args) + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + cmd_args = make_command( + "switch", + self.get_remote_call_options(), + rev_options.to_args(), + url, + dest, + ) + self.run_command(cmd_args) + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + cmd_args = make_command( + "update", + self.get_remote_call_options(), + rev_options.to_args(), + dest, + ) + self.run_command(cmd_args) + + +vcs.register(Subversion) diff --git a/venv/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py b/venv/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py new file mode 100644 index 0000000..46ca279 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py @@ -0,0 +1,705 @@ +"""Handles all VCS (version control) support""" + +import logging +import os +import shutil +import sys +import urllib.parse +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Iterable, + Iterator, + List, + Mapping, + Optional, + Tuple, + Type, + Union, +) + +from pip._internal.cli.spinners import SpinnerInterface +from pip._internal.exceptions import BadCommand, InstallationError +from pip._internal.utils.misc import ( + HiddenText, + ask_path_exists, + backup_dir, + display_path, + hide_url, + hide_value, + is_installable_dir, + rmtree, +) +from pip._internal.utils.subprocess import ( + CommandArgs, + call_subprocess, + format_command_args, + make_command, +) +from pip._internal.utils.urls import get_url_scheme + +if TYPE_CHECKING: + # Literal was introduced in Python 3.8. + # + # TODO: Remove `if TYPE_CHECKING` when dropping support for Python 3.7. + from typing import Literal + + +__all__ = ["vcs"] + + +logger = logging.getLogger(__name__) + +AuthInfo = Tuple[Optional[str], Optional[str]] + + +def is_url(name: str) -> bool: + """ + Return true if the name looks like a URL. + """ + scheme = get_url_scheme(name) + if scheme is None: + return False + return scheme in ["http", "https", "file", "ftp"] + vcs.all_schemes + + +def make_vcs_requirement_url( + repo_url: str, rev: str, project_name: str, subdir: Optional[str] = None +) -> str: + """ + Return the URL for a VCS requirement. + + Args: + repo_url: the remote VCS url, with any needed VCS prefix (e.g. "git+"). + project_name: the (unescaped) project name. + """ + egg_project_name = project_name.replace("-", "_") + req = f"{repo_url}@{rev}#egg={egg_project_name}" + if subdir: + req += f"&subdirectory={subdir}" + + return req + + +def find_path_to_project_root_from_repo_root( + location: str, repo_root: str +) -> Optional[str]: + """ + Find the the Python project's root by searching up the filesystem from + `location`. Return the path to project root relative to `repo_root`. + Return None if the project root is `repo_root`, or cannot be found. + """ + # find project root. + orig_location = location + while not is_installable_dir(location): + last_location = location + location = os.path.dirname(location) + if location == last_location: + # We've traversed up to the root of the filesystem without + # finding a Python project. + logger.warning( + "Could not find a Python project for directory %s (tried all " + "parent directories)", + orig_location, + ) + return None + + if os.path.samefile(repo_root, location): + return None + + return os.path.relpath(location, repo_root) + + +class RemoteNotFoundError(Exception): + pass + + +class RemoteNotValidError(Exception): + def __init__(self, url: str): + super().__init__(url) + self.url = url + + +class RevOptions: + + """ + Encapsulates a VCS-specific revision to install, along with any VCS + install options. + + Instances of this class should be treated as if immutable. + """ + + def __init__( + self, + vc_class: Type["VersionControl"], + rev: Optional[str] = None, + extra_args: Optional[CommandArgs] = None, + ) -> None: + """ + Args: + vc_class: a VersionControl subclass. + rev: the name of the revision to install. + extra_args: a list of extra options. + """ + if extra_args is None: + extra_args = [] + + self.extra_args = extra_args + self.rev = rev + self.vc_class = vc_class + self.branch_name: Optional[str] = None + + def __repr__(self) -> str: + return f"" + + @property + def arg_rev(self) -> Optional[str]: + if self.rev is None: + return self.vc_class.default_arg_rev + + return self.rev + + def to_args(self) -> CommandArgs: + """ + Return the VCS-specific command arguments. + """ + args: CommandArgs = [] + rev = self.arg_rev + if rev is not None: + args += self.vc_class.get_base_rev_args(rev) + args += self.extra_args + + return args + + def to_display(self) -> str: + if not self.rev: + return "" + + return f" (to revision {self.rev})" + + def make_new(self, rev: str) -> "RevOptions": + """ + Make a copy of the current instance, but with a new rev. + + Args: + rev: the name of the revision for the new object. + """ + return self.vc_class.make_rev_options(rev, extra_args=self.extra_args) + + +class VcsSupport: + _registry: Dict[str, "VersionControl"] = {} + schemes = ["ssh", "git", "hg", "bzr", "sftp", "svn"] + + def __init__(self) -> None: + # Register more schemes with urlparse for various version control + # systems + urllib.parse.uses_netloc.extend(self.schemes) + super().__init__() + + def __iter__(self) -> Iterator[str]: + return self._registry.__iter__() + + @property + def backends(self) -> List["VersionControl"]: + return list(self._registry.values()) + + @property + def dirnames(self) -> List[str]: + return [backend.dirname for backend in self.backends] + + @property + def all_schemes(self) -> List[str]: + schemes: List[str] = [] + for backend in self.backends: + schemes.extend(backend.schemes) + return schemes + + def register(self, cls: Type["VersionControl"]) -> None: + if not hasattr(cls, "name"): + logger.warning("Cannot register VCS %s", cls.__name__) + return + if cls.name not in self._registry: + self._registry[cls.name] = cls() + logger.debug("Registered VCS backend: %s", cls.name) + + def unregister(self, name: str) -> None: + if name in self._registry: + del self._registry[name] + + def get_backend_for_dir(self, location: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object if a repository of that type is found + at the given directory. + """ + vcs_backends = {} + for vcs_backend in self._registry.values(): + repo_path = vcs_backend.get_repository_root(location) + if not repo_path: + continue + logger.debug("Determine that %s uses VCS: %s", location, vcs_backend.name) + vcs_backends[repo_path] = vcs_backend + + if not vcs_backends: + return None + + # Choose the VCS in the inner-most directory. Since all repository + # roots found here would be either `location` or one of its + # parents, the longest path should have the most path components, + # i.e. the backend representing the inner-most repository. + inner_most_repo_path = max(vcs_backends, key=len) + return vcs_backends[inner_most_repo_path] + + def get_backend_for_scheme(self, scheme: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object or None. + """ + for vcs_backend in self._registry.values(): + if scheme in vcs_backend.schemes: + return vcs_backend + return None + + def get_backend(self, name: str) -> Optional["VersionControl"]: + """ + Return a VersionControl object or None. + """ + name = name.lower() + return self._registry.get(name) + + +vcs = VcsSupport() + + +class VersionControl: + name = "" + dirname = "" + repo_name = "" + # List of supported schemes for this Version Control + schemes: Tuple[str, ...] = () + # Iterable of environment variable names to pass to call_subprocess(). + unset_environ: Tuple[str, ...] = () + default_arg_rev: Optional[str] = None + + @classmethod + def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: + """ + Return whether the vcs prefix (e.g. "git+") should be added to a + repository's remote url when used in a requirement. + """ + return not remote_url.lower().startswith(f"{cls.name}:") + + @classmethod + def get_subdirectory(cls, location: str) -> Optional[str]: + """ + Return the path to Python project root, relative to the repo root. + Return None if the project root is in the repo root. + """ + return None + + @classmethod + def get_requirement_revision(cls, repo_dir: str) -> str: + """ + Return the revision string that should be used in a requirement. + """ + return cls.get_revision(repo_dir) + + @classmethod + def get_src_requirement(cls, repo_dir: str, project_name: str) -> str: + """ + Return the requirement string to use to redownload the files + currently at the given repository directory. + + Args: + project_name: the (unescaped) project name. + + The return value has a form similar to the following: + + {repository_url}@{revision}#egg={project_name} + """ + repo_url = cls.get_remote_url(repo_dir) + + if cls.should_add_vcs_url_prefix(repo_url): + repo_url = f"{cls.name}+{repo_url}" + + revision = cls.get_requirement_revision(repo_dir) + subdir = cls.get_subdirectory(repo_dir) + req = make_vcs_requirement_url(repo_url, revision, project_name, subdir=subdir) + + return req + + @staticmethod + def get_base_rev_args(rev: str) -> List[str]: + """ + Return the base revision arguments for a vcs command. + + Args: + rev: the name of a revision to install. Cannot be None. + """ + raise NotImplementedError + + def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: + """ + Return true if the commit hash checked out at dest matches + the revision in url. + + Always return False, if the VCS does not support immutable commit + hashes. + + This method does not check if there are local uncommitted changes + in dest after checkout, as pip currently has no use case for that. + """ + return False + + @classmethod + def make_rev_options( + cls, rev: Optional[str] = None, extra_args: Optional[CommandArgs] = None + ) -> RevOptions: + """ + Return a RevOptions object. + + Args: + rev: the name of a revision to install. + extra_args: a list of extra options. + """ + return RevOptions(cls, rev, extra_args=extra_args) + + @classmethod + def _is_local_repository(cls, repo: str) -> bool: + """ + posix absolute paths start with os.path.sep, + win32 ones start with drive (like c:\\folder) + """ + drive, tail = os.path.splitdrive(repo) + return repo.startswith(os.path.sep) or bool(drive) + + @classmethod + def get_netloc_and_auth( + cls, netloc: str, scheme: str + ) -> Tuple[str, Tuple[Optional[str], Optional[str]]]: + """ + Parse the repository URL's netloc, and return the new netloc to use + along with auth information. + + Args: + netloc: the original repository URL netloc. + scheme: the repository URL's scheme without the vcs prefix. + + This is mainly for the Subversion class to override, so that auth + information can be provided via the --username and --password options + instead of through the URL. For other subclasses like Git without + such an option, auth information must stay in the URL. + + Returns: (netloc, (username, password)). + """ + return netloc, (None, None) + + @classmethod + def get_url_rev_and_auth(cls, url: str) -> Tuple[str, Optional[str], AuthInfo]: + """ + Parse the repository URL to use, and return the URL, revision, + and auth info to use. + + Returns: (url, rev, (username, password)). + """ + scheme, netloc, path, query, frag = urllib.parse.urlsplit(url) + if "+" not in scheme: + raise ValueError( + f"Sorry, {url!r} is a malformed VCS url. " + "The format is +://, " + "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp" + ) + # Remove the vcs prefix. + scheme = scheme.split("+", 1)[1] + netloc, user_pass = cls.get_netloc_and_auth(netloc, scheme) + rev = None + if "@" in path: + path, rev = path.rsplit("@", 1) + if not rev: + raise InstallationError( + f"The URL {url!r} has an empty revision (after @) " + "which is not supported. Include a revision after @ " + "or remove @ from the URL." + ) + url = urllib.parse.urlunsplit((scheme, netloc, path, query, "")) + return url, rev, user_pass + + @staticmethod + def make_rev_args( + username: Optional[str], password: Optional[HiddenText] + ) -> CommandArgs: + """ + Return the RevOptions "extra arguments" to use in obtain(). + """ + return [] + + def get_url_rev_options(self, url: HiddenText) -> Tuple[HiddenText, RevOptions]: + """ + Return the URL and RevOptions object to use in obtain(), + as a tuple (url, rev_options). + """ + secret_url, rev, user_pass = self.get_url_rev_and_auth(url.secret) + username, secret_password = user_pass + password: Optional[HiddenText] = None + if secret_password is not None: + password = hide_value(secret_password) + extra_args = self.make_rev_args(username, password) + rev_options = self.make_rev_options(rev, extra_args=extra_args) + + return hide_url(secret_url), rev_options + + @staticmethod + def normalize_url(url: str) -> str: + """ + Normalize a URL for comparison by unquoting it and removing any + trailing slash. + """ + return urllib.parse.unquote(url).rstrip("/") + + @classmethod + def compare_urls(cls, url1: str, url2: str) -> bool: + """ + Compare two repo URLs for identity, ignoring incidental differences. + """ + return cls.normalize_url(url1) == cls.normalize_url(url2) + + def fetch_new( + self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int + ) -> None: + """ + Fetch a revision from a repository, in the case that this is the + first fetch from the repository. + + Args: + dest: the directory to fetch the repository to. + rev_options: a RevOptions object. + verbosity: verbosity level. + """ + raise NotImplementedError + + def switch(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + """ + Switch the repo at ``dest`` to point to ``URL``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + def update(self, dest: str, url: HiddenText, rev_options: RevOptions) -> None: + """ + Update an already-existing repo to the given ``rev_options``. + + Args: + rev_options: a RevOptions object. + """ + raise NotImplementedError + + @classmethod + def is_commit_id_equal(cls, dest: str, name: Optional[str]) -> bool: + """ + Return whether the id of the current commit equals the given name. + + Args: + dest: the repository directory. + name: a string name. + """ + raise NotImplementedError + + def obtain(self, dest: str, url: HiddenText, verbosity: int) -> None: + """ + Install or update in editable mode the package represented by this + VersionControl object. + + :param dest: the repository directory in which to install or update. + :param url: the repository URL starting with a vcs prefix. + :param verbosity: verbosity level. + """ + url, rev_options = self.get_url_rev_options(url) + + if not os.path.exists(dest): + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + rev_display = rev_options.to_display() + if self.is_repository_directory(dest): + existing_url = self.get_remote_url(dest) + if self.compare_urls(existing_url, url.secret): + logger.debug( + "%s in %s exists, and has correct URL (%s)", + self.repo_name.title(), + display_path(dest), + url, + ) + if not self.is_commit_id_equal(dest, rev_options.rev): + logger.info( + "Updating %s %s%s", + display_path(dest), + self.repo_name, + rev_display, + ) + self.update(dest, url, rev_options) + else: + logger.info("Skipping because already up-to-date.") + return + + logger.warning( + "%s %s in %s exists with URL %s", + self.name, + self.repo_name, + display_path(dest), + existing_url, + ) + prompt = ("(s)witch, (i)gnore, (w)ipe, (b)ackup ", ("s", "i", "w", "b")) + else: + logger.warning( + "Directory %s already exists, and is not a %s %s.", + dest, + self.name, + self.repo_name, + ) + # https://github.com/python/mypy/issues/1174 + prompt = ("(i)gnore, (w)ipe, (b)ackup ", ("i", "w", "b")) # type: ignore + + logger.warning( + "The plan is to install the %s repository %s", + self.name, + url, + ) + response = ask_path_exists(f"What to do? {prompt[0]}", prompt[1]) + + if response == "a": + sys.exit(-1) + + if response == "w": + logger.warning("Deleting %s", display_path(dest)) + rmtree(dest) + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + if response == "b": + dest_dir = backup_dir(dest) + logger.warning("Backing up %s to %s", display_path(dest), dest_dir) + shutil.move(dest, dest_dir) + self.fetch_new(dest, url, rev_options, verbosity=verbosity) + return + + # Do nothing if the response is "i". + if response == "s": + logger.info( + "Switching %s %s to %s%s", + self.repo_name, + display_path(dest), + url, + rev_display, + ) + self.switch(dest, url, rev_options) + + def unpack(self, location: str, url: HiddenText, verbosity: int) -> None: + """ + Clean up current location and download the url repository + (and vcs infos) into location + + :param url: the repository URL starting with a vcs prefix. + :param verbosity: verbosity level. + """ + if os.path.exists(location): + rmtree(location) + self.obtain(location, url=url, verbosity=verbosity) + + @classmethod + def get_remote_url(cls, location: str) -> str: + """ + Return the url used at location + + Raises RemoteNotFoundError if the repository does not have a remote + url configured. + """ + raise NotImplementedError + + @classmethod + def get_revision(cls, location: str) -> str: + """ + Return the current commit id of the files at the given location. + """ + raise NotImplementedError + + @classmethod + def run_command( + cls, + cmd: Union[List[str], CommandArgs], + show_stdout: bool = True, + cwd: Optional[str] = None, + on_returncode: 'Literal["raise", "warn", "ignore"]' = "raise", + extra_ok_returncodes: Optional[Iterable[int]] = None, + command_desc: Optional[str] = None, + extra_environ: Optional[Mapping[str, Any]] = None, + spinner: Optional[SpinnerInterface] = None, + log_failed_cmd: bool = True, + stdout_only: bool = False, + ) -> str: + """ + Run a VCS subcommand + This is simply a wrapper around call_subprocess that adds the VCS + command name, and checks that the VCS is available + """ + cmd = make_command(cls.name, *cmd) + if command_desc is None: + command_desc = format_command_args(cmd) + try: + return call_subprocess( + cmd, + show_stdout, + cwd, + on_returncode=on_returncode, + extra_ok_returncodes=extra_ok_returncodes, + command_desc=command_desc, + extra_environ=extra_environ, + unset_environ=cls.unset_environ, + spinner=spinner, + log_failed_cmd=log_failed_cmd, + stdout_only=stdout_only, + ) + except FileNotFoundError: + # errno.ENOENT = no such file or directory + # In other words, the VCS executable isn't available + raise BadCommand( + f"Cannot find command {cls.name!r} - do you have " + f"{cls.name!r} installed and in your PATH?" + ) + except PermissionError: + # errno.EACCES = Permission denied + # This error occurs, for instance, when the command is installed + # only for another user. So, the current user don't have + # permission to call the other user command. + raise BadCommand( + f"No permission to execute {cls.name!r} - install it " + f"locally, globally (ask admin), or check your PATH. " + f"See possible solutions at " + f"https://pip.pypa.io/en/latest/reference/pip_freeze/" + f"#fixing-permission-denied." + ) + + @classmethod + def is_repository_directory(cls, path: str) -> bool: + """ + Return whether a directory path is a repository directory. + """ + logger.debug("Checking in %s for %s (%s)...", path, cls.dirname, cls.name) + return os.path.exists(os.path.join(path, cls.dirname)) + + @classmethod + def get_repository_root(cls, location: str) -> Optional[str]: + """ + Return the "root" (top-level) directory controlled by the vcs, + or `None` if the directory is not in any. + + It is meant to be overridden to implement smarter detection + mechanisms for specific vcs. + + This can do more than is_repository_directory() alone. For + example, the Git override checks that Git is actually available. + """ + if cls.is_repository_directory(location): + return location + return None diff --git a/venv/lib/python3.12/site-packages/pip/_internal/wheel_builder.py b/venv/lib/python3.12/site-packages/pip/_internal/wheel_builder.py new file mode 100644 index 0000000..b1debe3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_internal/wheel_builder.py @@ -0,0 +1,354 @@ +"""Orchestrator for building wheels from InstallRequirements. +""" + +import logging +import os.path +import re +import shutil +from typing import Iterable, List, Optional, Tuple + +from pip._vendor.packaging.utils import canonicalize_name, canonicalize_version +from pip._vendor.packaging.version import InvalidVersion, Version + +from pip._internal.cache import WheelCache +from pip._internal.exceptions import InvalidWheelFilename, UnsupportedWheel +from pip._internal.metadata import FilesystemWheel, get_wheel_distribution +from pip._internal.models.link import Link +from pip._internal.models.wheel import Wheel +from pip._internal.operations.build.wheel import build_wheel_pep517 +from pip._internal.operations.build.wheel_editable import build_wheel_editable +from pip._internal.operations.build.wheel_legacy import build_wheel_legacy +from pip._internal.req.req_install import InstallRequirement +from pip._internal.utils.logging import indent_log +from pip._internal.utils.misc import ensure_dir, hash_file +from pip._internal.utils.setuptools_build import make_setuptools_clean_args +from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.temp_dir import TempDirectory +from pip._internal.utils.urls import path_to_url +from pip._internal.vcs import vcs + +logger = logging.getLogger(__name__) + +_egg_info_re = re.compile(r"([a-z0-9_.]+)-([a-z0-9_.!+-]+)", re.IGNORECASE) + +BuildResult = Tuple[List[InstallRequirement], List[InstallRequirement]] + + +def _contains_egg_info(s: str) -> bool: + """Determine whether the string looks like an egg_info. + + :param s: The string to parse. E.g. foo-2.1 + """ + return bool(_egg_info_re.search(s)) + + +def _should_build( + req: InstallRequirement, + need_wheel: bool, +) -> bool: + """Return whether an InstallRequirement should be built into a wheel.""" + if req.constraint: + # never build requirements that are merely constraints + return False + if req.is_wheel: + if need_wheel: + logger.info( + "Skipping %s, due to already being wheel.", + req.name, + ) + return False + + if need_wheel: + # i.e. pip wheel, not pip install + return True + + # From this point, this concerns the pip install command only + # (need_wheel=False). + + if not req.source_dir: + return False + + if req.editable: + # we only build PEP 660 editable requirements + return req.supports_pyproject_editable() + + return True + + +def should_build_for_wheel_command( + req: InstallRequirement, +) -> bool: + return _should_build(req, need_wheel=True) + + +def should_build_for_install_command( + req: InstallRequirement, +) -> bool: + return _should_build(req, need_wheel=False) + + +def _should_cache( + req: InstallRequirement, +) -> Optional[bool]: + """ + Return whether a built InstallRequirement can be stored in the persistent + wheel cache, assuming the wheel cache is available, and _should_build() + has determined a wheel needs to be built. + """ + if req.editable or not req.source_dir: + # never cache editable requirements + return False + + if req.link and req.link.is_vcs: + # VCS checkout. Do not cache + # unless it points to an immutable commit hash. + assert not req.editable + assert req.source_dir + vcs_backend = vcs.get_backend_for_scheme(req.link.scheme) + assert vcs_backend + if vcs_backend.is_immutable_rev_checkout(req.link.url, req.source_dir): + return True + return False + + assert req.link + base, ext = req.link.splitext() + if _contains_egg_info(base): + return True + + # Otherwise, do not cache. + return False + + +def _get_cache_dir( + req: InstallRequirement, + wheel_cache: WheelCache, +) -> str: + """Return the persistent or temporary cache directory where the built + wheel need to be stored. + """ + cache_available = bool(wheel_cache.cache_dir) + assert req.link + if cache_available and _should_cache(req): + cache_dir = wheel_cache.get_path_for_link(req.link) + else: + cache_dir = wheel_cache.get_ephem_path_for_link(req.link) + return cache_dir + + +def _verify_one(req: InstallRequirement, wheel_path: str) -> None: + canonical_name = canonicalize_name(req.name or "") + w = Wheel(os.path.basename(wheel_path)) + if canonicalize_name(w.name) != canonical_name: + raise InvalidWheelFilename( + f"Wheel has unexpected file name: expected {canonical_name!r}, " + f"got {w.name!r}", + ) + dist = get_wheel_distribution(FilesystemWheel(wheel_path), canonical_name) + dist_verstr = str(dist.version) + if canonicalize_version(dist_verstr) != canonicalize_version(w.version): + raise InvalidWheelFilename( + f"Wheel has unexpected file name: expected {dist_verstr!r}, " + f"got {w.version!r}", + ) + metadata_version_value = dist.metadata_version + if metadata_version_value is None: + raise UnsupportedWheel("Missing Metadata-Version") + try: + metadata_version = Version(metadata_version_value) + except InvalidVersion: + msg = f"Invalid Metadata-Version: {metadata_version_value}" + raise UnsupportedWheel(msg) + if metadata_version >= Version("1.2") and not isinstance(dist.version, Version): + raise UnsupportedWheel( + f"Metadata 1.2 mandates PEP 440 version, but {dist_verstr!r} is not" + ) + + +def _build_one( + req: InstallRequirement, + output_dir: str, + verify: bool, + build_options: List[str], + global_options: List[str], + editable: bool, +) -> Optional[str]: + """Build one wheel. + + :return: The filename of the built wheel, or None if the build failed. + """ + artifact = "editable" if editable else "wheel" + try: + ensure_dir(output_dir) + except OSError as e: + logger.warning( + "Building %s for %s failed: %s", + artifact, + req.name, + e, + ) + return None + + # Install build deps into temporary directory (PEP 518) + with req.build_env: + wheel_path = _build_one_inside_env( + req, output_dir, build_options, global_options, editable + ) + if wheel_path and verify: + try: + _verify_one(req, wheel_path) + except (InvalidWheelFilename, UnsupportedWheel) as e: + logger.warning("Built %s for %s is invalid: %s", artifact, req.name, e) + return None + return wheel_path + + +def _build_one_inside_env( + req: InstallRequirement, + output_dir: str, + build_options: List[str], + global_options: List[str], + editable: bool, +) -> Optional[str]: + with TempDirectory(kind="wheel") as temp_dir: + assert req.name + if req.use_pep517: + assert req.metadata_directory + assert req.pep517_backend + if global_options: + logger.warning( + "Ignoring --global-option when building %s using PEP 517", req.name + ) + if build_options: + logger.warning( + "Ignoring --build-option when building %s using PEP 517", req.name + ) + if editable: + wheel_path = build_wheel_editable( + name=req.name, + backend=req.pep517_backend, + metadata_directory=req.metadata_directory, + tempd=temp_dir.path, + ) + else: + wheel_path = build_wheel_pep517( + name=req.name, + backend=req.pep517_backend, + metadata_directory=req.metadata_directory, + tempd=temp_dir.path, + ) + else: + wheel_path = build_wheel_legacy( + name=req.name, + setup_py_path=req.setup_py_path, + source_dir=req.unpacked_source_directory, + global_options=global_options, + build_options=build_options, + tempd=temp_dir.path, + ) + + if wheel_path is not None: + wheel_name = os.path.basename(wheel_path) + dest_path = os.path.join(output_dir, wheel_name) + try: + wheel_hash, length = hash_file(wheel_path) + shutil.move(wheel_path, dest_path) + logger.info( + "Created wheel for %s: filename=%s size=%d sha256=%s", + req.name, + wheel_name, + length, + wheel_hash.hexdigest(), + ) + logger.info("Stored in directory: %s", output_dir) + return dest_path + except Exception as e: + logger.warning( + "Building wheel for %s failed: %s", + req.name, + e, + ) + # Ignore return, we can't do anything else useful. + if not req.use_pep517: + _clean_one_legacy(req, global_options) + return None + + +def _clean_one_legacy(req: InstallRequirement, global_options: List[str]) -> bool: + clean_args = make_setuptools_clean_args( + req.setup_py_path, + global_options=global_options, + ) + + logger.info("Running setup.py clean for %s", req.name) + try: + call_subprocess( + clean_args, command_desc="python setup.py clean", cwd=req.source_dir + ) + return True + except Exception: + logger.error("Failed cleaning build dir for %s", req.name) + return False + + +def build( + requirements: Iterable[InstallRequirement], + wheel_cache: WheelCache, + verify: bool, + build_options: List[str], + global_options: List[str], +) -> BuildResult: + """Build wheels. + + :return: The list of InstallRequirement that succeeded to build and + the list of InstallRequirement that failed to build. + """ + if not requirements: + return [], [] + + # Build the wheels. + logger.info( + "Building wheels for collected packages: %s", + ", ".join(req.name for req in requirements), # type: ignore + ) + + with indent_log(): + build_successes, build_failures = [], [] + for req in requirements: + assert req.name + cache_dir = _get_cache_dir(req, wheel_cache) + wheel_file = _build_one( + req, + cache_dir, + verify, + build_options, + global_options, + req.editable and req.permit_editable_wheels, + ) + if wheel_file: + # Record the download origin in the cache + if req.download_info is not None: + # download_info is guaranteed to be set because when we build an + # InstallRequirement it has been through the preparer before, but + # let's be cautious. + wheel_cache.record_download_origin(cache_dir, req.download_info) + # Update the link for this. + req.link = Link(path_to_url(wheel_file)) + req.local_file_path = req.link.file_path + assert req.link.is_wheel + build_successes.append(req) + else: + build_failures.append(req) + + # notify success/failure + if build_successes: + logger.info( + "Successfully built %s", + " ".join([req.name for req in build_successes]), # type: ignore + ) + if build_failures: + logger.info( + "Failed to build %s", + " ".join([req.name for req in build_failures]), # type: ignore + ) + # Return a list of requirements that failed to build + return build_successes, build_failures diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/__init__.py new file mode 100644 index 0000000..c1884ba --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/__init__.py @@ -0,0 +1,121 @@ +""" +pip._vendor is for vendoring dependencies of pip to prevent needing pip to +depend on something external. + +Files inside of pip._vendor should be considered immutable and should only be +updated to versions from upstream. +""" +from __future__ import absolute_import + +import glob +import os.path +import sys + +# Downstream redistributors which have debundled our dependencies should also +# patch this value to be true. This will trigger the additional patching +# to cause things like "six" to be available as pip. +DEBUNDLED = False + +# By default, look in this directory for a bunch of .whl files which we will +# add to the beginning of sys.path before attempting to import anything. This +# is done to support downstream re-distributors like Debian and Fedora who +# wish to create their own Wheels for our dependencies to aid in debundling. +WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) + + +# Define a small helper function to alias our vendored modules to the real ones +# if the vendored ones do not exist. This idea of this was taken from +# https://github.com/kennethreitz/requests/pull/2567. +def vendored(modulename): + vendored_name = "{0}.{1}".format(__name__, modulename) + + try: + __import__(modulename, globals(), locals(), level=0) + except ImportError: + # We can just silently allow import failures to pass here. If we + # got to this point it means that ``import pip._vendor.whatever`` + # failed and so did ``import whatever``. Since we're importing this + # upfront in an attempt to alias imports, not erroring here will + # just mean we get a regular import error whenever pip *actually* + # tries to import one of these modules to use it, which actually + # gives us a better error message than we would have otherwise + # gotten. + pass + else: + sys.modules[vendored_name] = sys.modules[modulename] + base, head = vendored_name.rsplit(".", 1) + setattr(sys.modules[base], head, sys.modules[modulename]) + + +# If we're operating in a debundled setup, then we want to go ahead and trigger +# the aliasing of our vendored libraries as well as looking for wheels to add +# to our sys.path. This will cause all of this code to be a no-op typically +# however downstream redistributors can enable it in a consistent way across +# all platforms. +if DEBUNDLED: + # Actually look inside of WHEEL_DIR to find .whl files and add them to the + # front of our sys.path. + sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path + + # Actually alias all of our vendored dependencies. + vendored("cachecontrol") + vendored("certifi") + vendored("colorama") + vendored("distlib") + vendored("distro") + vendored("six") + vendored("six.moves") + vendored("six.moves.urllib") + vendored("six.moves.urllib.parse") + vendored("packaging") + vendored("packaging.version") + vendored("packaging.specifiers") + vendored("pep517") + vendored("pkg_resources") + vendored("platformdirs") + vendored("progress") + vendored("requests") + vendored("requests.exceptions") + vendored("requests.packages") + vendored("requests.packages.urllib3") + vendored("requests.packages.urllib3._collections") + vendored("requests.packages.urllib3.connection") + vendored("requests.packages.urllib3.connectionpool") + vendored("requests.packages.urllib3.contrib") + vendored("requests.packages.urllib3.contrib.ntlmpool") + vendored("requests.packages.urllib3.contrib.pyopenssl") + vendored("requests.packages.urllib3.exceptions") + vendored("requests.packages.urllib3.fields") + vendored("requests.packages.urllib3.filepost") + vendored("requests.packages.urllib3.packages") + vendored("requests.packages.urllib3.packages.ordered_dict") + vendored("requests.packages.urllib3.packages.six") + vendored("requests.packages.urllib3.packages.ssl_match_hostname") + vendored("requests.packages.urllib3.packages.ssl_match_hostname." + "_implementation") + vendored("requests.packages.urllib3.poolmanager") + vendored("requests.packages.urllib3.request") + vendored("requests.packages.urllib3.response") + vendored("requests.packages.urllib3.util") + vendored("requests.packages.urllib3.util.connection") + vendored("requests.packages.urllib3.util.request") + vendored("requests.packages.urllib3.util.response") + vendored("requests.packages.urllib3.util.retry") + vendored("requests.packages.urllib3.util.ssl_") + vendored("requests.packages.urllib3.util.timeout") + vendored("requests.packages.urllib3.util.url") + vendored("resolvelib") + vendored("rich") + vendored("rich.console") + vendored("rich.highlighter") + vendored("rich.logging") + vendored("rich.markup") + vendored("rich.progress") + vendored("rich.segment") + vendored("rich.style") + vendored("rich.text") + vendored("rich.traceback") + vendored("tenacity") + vendored("tomli") + vendored("truststore") + vendored("urllib3") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..cab12fc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc new file mode 100644 index 0000000..6919b71 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc new file mode 100644 index 0000000..f89f475 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py new file mode 100644 index 0000000..4d20bc9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py @@ -0,0 +1,28 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +"""CacheControl import Interface. + +Make it easy to import from cachecontrol without long namespaces. +""" +__author__ = "Eric Larson" +__email__ = "eric@ionrock.org" +__version__ = "0.13.1" + +from pip._vendor.cachecontrol.adapter import CacheControlAdapter +from pip._vendor.cachecontrol.controller import CacheController +from pip._vendor.cachecontrol.wrapper import CacheControl + +__all__ = [ + "__author__", + "__email__", + "__version__", + "CacheControlAdapter", + "CacheController", + "CacheControl", +] + +import logging + +logging.getLogger(__name__).addHandler(logging.NullHandler()) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..439a70b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc new file mode 100644 index 0000000..158bf0b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc new file mode 100644 index 0000000..18202d7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc new file mode 100644 index 0000000..95e9f38 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc new file mode 100644 index 0000000..3693c07 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc new file mode 100644 index 0000000..b031cb4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc new file mode 100644 index 0000000..63c1052 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc new file mode 100644 index 0000000..39108c5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc new file mode 100644 index 0000000..a8f56cb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py new file mode 100644 index 0000000..2c84208 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py @@ -0,0 +1,70 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 +from __future__ import annotations + +import logging +from argparse import ArgumentParser +from typing import TYPE_CHECKING + +from pip._vendor import requests + +from pip._vendor.cachecontrol.adapter import CacheControlAdapter +from pip._vendor.cachecontrol.cache import DictCache +from pip._vendor.cachecontrol.controller import logger + +if TYPE_CHECKING: + from argparse import Namespace + + from pip._vendor.cachecontrol.controller import CacheController + + +def setup_logging() -> None: + logger.setLevel(logging.DEBUG) + handler = logging.StreamHandler() + logger.addHandler(handler) + + +def get_session() -> requests.Session: + adapter = CacheControlAdapter( + DictCache(), cache_etags=True, serializer=None, heuristic=None + ) + sess = requests.Session() + sess.mount("http://", adapter) + sess.mount("https://", adapter) + + sess.cache_controller = adapter.controller # type: ignore[attr-defined] + return sess + + +def get_args() -> Namespace: + parser = ArgumentParser() + parser.add_argument("url", help="The URL to try and cache") + return parser.parse_args() + + +def main() -> None: + args = get_args() + sess = get_session() + + # Make a request to get a response + resp = sess.get(args.url) + + # Turn on logging + setup_logging() + + # try setting the cache + cache_controller: CacheController = ( + sess.cache_controller # type: ignore[attr-defined] + ) + cache_controller.cache_response(resp.request, resp.raw) + + # Now try to get it + if cache_controller.cached_request(resp.request): + print("Cached!") + else: + print("Not cached :(") + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py new file mode 100644 index 0000000..3e83e30 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py @@ -0,0 +1,161 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 +from __future__ import annotations + +import functools +import types +import zlib +from typing import TYPE_CHECKING, Any, Collection, Mapping + +from pip._vendor.requests.adapters import HTTPAdapter + +from pip._vendor.cachecontrol.cache import DictCache +from pip._vendor.cachecontrol.controller import PERMANENT_REDIRECT_STATUSES, CacheController +from pip._vendor.cachecontrol.filewrapper import CallbackFileWrapper + +if TYPE_CHECKING: + from pip._vendor.requests import PreparedRequest, Response + from pip._vendor.urllib3 import HTTPResponse + + from pip._vendor.cachecontrol.cache import BaseCache + from pip._vendor.cachecontrol.heuristics import BaseHeuristic + from pip._vendor.cachecontrol.serialize import Serializer + + +class CacheControlAdapter(HTTPAdapter): + invalidating_methods = {"PUT", "PATCH", "DELETE"} + + def __init__( + self, + cache: BaseCache | None = None, + cache_etags: bool = True, + controller_class: type[CacheController] | None = None, + serializer: Serializer | None = None, + heuristic: BaseHeuristic | None = None, + cacheable_methods: Collection[str] | None = None, + *args: Any, + **kw: Any, + ) -> None: + super().__init__(*args, **kw) + self.cache = DictCache() if cache is None else cache + self.heuristic = heuristic + self.cacheable_methods = cacheable_methods or ("GET",) + + controller_factory = controller_class or CacheController + self.controller = controller_factory( + self.cache, cache_etags=cache_etags, serializer=serializer + ) + + def send( + self, + request: PreparedRequest, + stream: bool = False, + timeout: None | float | tuple[float, float] | tuple[float, None] = None, + verify: bool | str = True, + cert: (None | bytes | str | tuple[bytes | str, bytes | str]) = None, + proxies: Mapping[str, str] | None = None, + cacheable_methods: Collection[str] | None = None, + ) -> Response: + """ + Send a request. Use the request information to see if it + exists in the cache and cache the response if we need to and can. + """ + cacheable = cacheable_methods or self.cacheable_methods + if request.method in cacheable: + try: + cached_response = self.controller.cached_request(request) + except zlib.error: + cached_response = None + if cached_response: + return self.build_response(request, cached_response, from_cache=True) + + # check for etags and add headers if appropriate + request.headers.update(self.controller.conditional_headers(request)) + + resp = super().send(request, stream, timeout, verify, cert, proxies) + + return resp + + def build_response( + self, + request: PreparedRequest, + response: HTTPResponse, + from_cache: bool = False, + cacheable_methods: Collection[str] | None = None, + ) -> Response: + """ + Build a response by making a request or using the cache. + + This will end up calling send and returning a potentially + cached response + """ + cacheable = cacheable_methods or self.cacheable_methods + if not from_cache and request.method in cacheable: + # Check for any heuristics that might update headers + # before trying to cache. + if self.heuristic: + response = self.heuristic.apply(response) + + # apply any expiration heuristics + if response.status == 304: + # We must have sent an ETag request. This could mean + # that we've been expired already or that we simply + # have an etag. In either case, we want to try and + # update the cache if that is the case. + cached_response = self.controller.update_cached_response( + request, response + ) + + if cached_response is not response: + from_cache = True + + # We are done with the server response, read a + # possible response body (compliant servers will + # not return one, but we cannot be 100% sure) and + # release the connection back to the pool. + response.read(decode_content=False) + response.release_conn() + + response = cached_response + + # We always cache the 301 responses + elif int(response.status) in PERMANENT_REDIRECT_STATUSES: + self.controller.cache_response(request, response) + else: + # Wrap the response file with a wrapper that will cache the + # response when the stream has been consumed. + response._fp = CallbackFileWrapper( # type: ignore[attr-defined] + response._fp, # type: ignore[attr-defined] + functools.partial( + self.controller.cache_response, request, response + ), + ) + if response.chunked: + super_update_chunk_length = response._update_chunk_length # type: ignore[attr-defined] + + def _update_chunk_length(self: HTTPResponse) -> None: + super_update_chunk_length() + if self.chunk_left == 0: + self._fp._close() # type: ignore[attr-defined] + + response._update_chunk_length = types.MethodType( # type: ignore[attr-defined] + _update_chunk_length, response + ) + + resp: Response = super().build_response(request, response) # type: ignore[no-untyped-call] + + # See if we should invalidate the cache. + if request.method in self.invalidating_methods and resp.ok: + assert request.url is not None + cache_url = self.controller.cache_url(request.url) + self.cache.delete(cache_url) + + # Give the request a from_cache attr to let people use it + resp.from_cache = from_cache # type: ignore[attr-defined] + + return resp + + def close(self) -> None: + self.cache.close() + super().close() # type: ignore[no-untyped-call] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py new file mode 100644 index 0000000..3293b00 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py @@ -0,0 +1,74 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +""" +The cache object API for implementing caches. The default is a thread +safe in-memory dictionary. +""" +from __future__ import annotations + +from threading import Lock +from typing import IO, TYPE_CHECKING, MutableMapping + +if TYPE_CHECKING: + from datetime import datetime + + +class BaseCache: + def get(self, key: str) -> bytes | None: + raise NotImplementedError() + + def set( + self, key: str, value: bytes, expires: int | datetime | None = None + ) -> None: + raise NotImplementedError() + + def delete(self, key: str) -> None: + raise NotImplementedError() + + def close(self) -> None: + pass + + +class DictCache(BaseCache): + def __init__(self, init_dict: MutableMapping[str, bytes] | None = None) -> None: + self.lock = Lock() + self.data = init_dict or {} + + def get(self, key: str) -> bytes | None: + return self.data.get(key, None) + + def set( + self, key: str, value: bytes, expires: int | datetime | None = None + ) -> None: + with self.lock: + self.data.update({key: value}) + + def delete(self, key: str) -> None: + with self.lock: + if key in self.data: + self.data.pop(key) + + +class SeparateBodyBaseCache(BaseCache): + """ + In this variant, the body is not stored mixed in with the metadata, but is + passed in (as a bytes-like object) in a separate call to ``set_body()``. + + That is, the expected interaction pattern is:: + + cache.set(key, serialized_metadata) + cache.set_body(key) + + Similarly, the body should be loaded separately via ``get_body()``. + """ + + def set_body(self, key: str, body: bytes) -> None: + raise NotImplementedError() + + def get_body(self, key: str) -> IO[bytes] | None: + """ + Return the body as file-like object. + """ + raise NotImplementedError() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py new file mode 100644 index 0000000..24ff469 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +from pip._vendor.cachecontrol.caches.file_cache import FileCache, SeparateBodyFileCache +from pip._vendor.cachecontrol.caches.redis_cache import RedisCache + +__all__ = ["FileCache", "SeparateBodyFileCache", "RedisCache"] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..4284d08 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc new file mode 100644 index 0000000..1533d15 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc new file mode 100644 index 0000000..ef5f1d0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py new file mode 100644 index 0000000..1fd2801 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py @@ -0,0 +1,181 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 +from __future__ import annotations + +import hashlib +import os +from textwrap import dedent +from typing import IO, TYPE_CHECKING + +from pip._vendor.cachecontrol.cache import BaseCache, SeparateBodyBaseCache +from pip._vendor.cachecontrol.controller import CacheController + +if TYPE_CHECKING: + from datetime import datetime + + from filelock import BaseFileLock + + +def _secure_open_write(filename: str, fmode: int) -> IO[bytes]: + # We only want to write to this file, so open it in write only mode + flags = os.O_WRONLY + + # os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only + # will open *new* files. + # We specify this because we want to ensure that the mode we pass is the + # mode of the file. + flags |= os.O_CREAT | os.O_EXCL + + # Do not follow symlinks to prevent someone from making a symlink that + # we follow and insecurely open a cache file. + if hasattr(os, "O_NOFOLLOW"): + flags |= os.O_NOFOLLOW + + # On Windows we'll mark this file as binary + if hasattr(os, "O_BINARY"): + flags |= os.O_BINARY + + # Before we open our file, we want to delete any existing file that is + # there + try: + os.remove(filename) + except OSError: + # The file must not exist already, so we can just skip ahead to opening + pass + + # Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a + # race condition happens between the os.remove and this line, that an + # error will be raised. Because we utilize a lockfile this should only + # happen if someone is attempting to attack us. + fd = os.open(filename, flags, fmode) + try: + return os.fdopen(fd, "wb") + + except: + # An error occurred wrapping our FD in a file object + os.close(fd) + raise + + +class _FileCacheMixin: + """Shared implementation for both FileCache variants.""" + + def __init__( + self, + directory: str, + forever: bool = False, + filemode: int = 0o0600, + dirmode: int = 0o0700, + lock_class: type[BaseFileLock] | None = None, + ) -> None: + try: + if lock_class is None: + from filelock import FileLock + + lock_class = FileLock + except ImportError: + notice = dedent( + """ + NOTE: In order to use the FileCache you must have + filelock installed. You can install it via pip: + pip install filelock + """ + ) + raise ImportError(notice) + + self.directory = directory + self.forever = forever + self.filemode = filemode + self.dirmode = dirmode + self.lock_class = lock_class + + @staticmethod + def encode(x: str) -> str: + return hashlib.sha224(x.encode()).hexdigest() + + def _fn(self, name: str) -> str: + # NOTE: This method should not change as some may depend on it. + # See: https://github.com/ionrock/cachecontrol/issues/63 + hashed = self.encode(name) + parts = list(hashed[:5]) + [hashed] + return os.path.join(self.directory, *parts) + + def get(self, key: str) -> bytes | None: + name = self._fn(key) + try: + with open(name, "rb") as fh: + return fh.read() + + except FileNotFoundError: + return None + + def set( + self, key: str, value: bytes, expires: int | datetime | None = None + ) -> None: + name = self._fn(key) + self._write(name, value) + + def _write(self, path: str, data: bytes) -> None: + """ + Safely write the data to the given path. + """ + # Make sure the directory exists + try: + os.makedirs(os.path.dirname(path), self.dirmode) + except OSError: + pass + + with self.lock_class(path + ".lock"): + # Write our actual file + with _secure_open_write(path, self.filemode) as fh: + fh.write(data) + + def _delete(self, key: str, suffix: str) -> None: + name = self._fn(key) + suffix + if not self.forever: + try: + os.remove(name) + except FileNotFoundError: + pass + + +class FileCache(_FileCacheMixin, BaseCache): + """ + Traditional FileCache: body is stored in memory, so not suitable for large + downloads. + """ + + def delete(self, key: str) -> None: + self._delete(key, "") + + +class SeparateBodyFileCache(_FileCacheMixin, SeparateBodyBaseCache): + """ + Memory-efficient FileCache: body is stored in a separate file, reducing + peak memory usage. + """ + + def get_body(self, key: str) -> IO[bytes] | None: + name = self._fn(key) + ".body" + try: + return open(name, "rb") + except FileNotFoundError: + return None + + def set_body(self, key: str, body: bytes) -> None: + name = self._fn(key) + ".body" + self._write(name, body) + + def delete(self, key: str) -> None: + self._delete(key, "") + self._delete(key, ".body") + + +def url_to_file_path(url: str, filecache: FileCache) -> str: + """Return the file cache path based on the URL. + + This does not ensure the file exists! + """ + key = CacheController.cache_url(url) + return filecache._fn(key) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py new file mode 100644 index 0000000..f4f68c4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py @@ -0,0 +1,48 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 +from __future__ import annotations + + +from datetime import datetime, timezone +from typing import TYPE_CHECKING + +from pip._vendor.cachecontrol.cache import BaseCache + +if TYPE_CHECKING: + from redis import Redis + + +class RedisCache(BaseCache): + def __init__(self, conn: Redis[bytes]) -> None: + self.conn = conn + + def get(self, key: str) -> bytes | None: + return self.conn.get(key) + + def set( + self, key: str, value: bytes, expires: int | datetime | None = None + ) -> None: + if not expires: + self.conn.set(key, value) + elif isinstance(expires, datetime): + now_utc = datetime.now(timezone.utc) + if expires.tzinfo is None: + now_utc = now_utc.replace(tzinfo=None) + delta = expires - now_utc + self.conn.setex(key, int(delta.total_seconds()), value) + else: + self.conn.setex(key, expires, value) + + def delete(self, key: str) -> None: + self.conn.delete(key) + + def clear(self) -> None: + """Helper for clearing all the keys in a database. Use with + caution!""" + for key in self.conn.keys(): + self.conn.delete(key) + + def close(self) -> None: + """Redis uses connection pooling, no need to close the connection.""" + pass diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py new file mode 100644 index 0000000..586b9f9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py @@ -0,0 +1,494 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 + +""" +The httplib2 algorithms ported for use with requests. +""" +from __future__ import annotations + +import calendar +import logging +import re +import time +from email.utils import parsedate_tz +from typing import TYPE_CHECKING, Collection, Mapping + +from pip._vendor.requests.structures import CaseInsensitiveDict + +from pip._vendor.cachecontrol.cache import DictCache, SeparateBodyBaseCache +from pip._vendor.cachecontrol.serialize import Serializer + +if TYPE_CHECKING: + from typing import Literal + + from pip._vendor.requests import PreparedRequest + from pip._vendor.urllib3 import HTTPResponse + + from pip._vendor.cachecontrol.cache import BaseCache + +logger = logging.getLogger(__name__) + +URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") + +PERMANENT_REDIRECT_STATUSES = (301, 308) + + +def parse_uri(uri: str) -> tuple[str, str, str, str, str]: + """Parses a URI using the regex given in Appendix B of RFC 3986. + + (scheme, authority, path, query, fragment) = parse_uri(uri) + """ + match = URI.match(uri) + assert match is not None + groups = match.groups() + return (groups[1], groups[3], groups[4], groups[6], groups[8]) + + +class CacheController: + """An interface to see if request should cached or not.""" + + def __init__( + self, + cache: BaseCache | None = None, + cache_etags: bool = True, + serializer: Serializer | None = None, + status_codes: Collection[int] | None = None, + ): + self.cache = DictCache() if cache is None else cache + self.cache_etags = cache_etags + self.serializer = serializer or Serializer() + self.cacheable_status_codes = status_codes or (200, 203, 300, 301, 308) + + @classmethod + def _urlnorm(cls, uri: str) -> str: + """Normalize the URL to create a safe key for the cache""" + (scheme, authority, path, query, fragment) = parse_uri(uri) + if not scheme or not authority: + raise Exception("Only absolute URIs are allowed. uri = %s" % uri) + + scheme = scheme.lower() + authority = authority.lower() + + if not path: + path = "/" + + # Could do syntax based normalization of the URI before + # computing the digest. See Section 6.2.2 of Std 66. + request_uri = query and "?".join([path, query]) or path + defrag_uri = scheme + "://" + authority + request_uri + + return defrag_uri + + @classmethod + def cache_url(cls, uri: str) -> str: + return cls._urlnorm(uri) + + def parse_cache_control(self, headers: Mapping[str, str]) -> dict[str, int | None]: + known_directives = { + # https://tools.ietf.org/html/rfc7234#section-5.2 + "max-age": (int, True), + "max-stale": (int, False), + "min-fresh": (int, True), + "no-cache": (None, False), + "no-store": (None, False), + "no-transform": (None, False), + "only-if-cached": (None, False), + "must-revalidate": (None, False), + "public": (None, False), + "private": (None, False), + "proxy-revalidate": (None, False), + "s-maxage": (int, True), + } + + cc_headers = headers.get("cache-control", headers.get("Cache-Control", "")) + + retval: dict[str, int | None] = {} + + for cc_directive in cc_headers.split(","): + if not cc_directive.strip(): + continue + + parts = cc_directive.split("=", 1) + directive = parts[0].strip() + + try: + typ, required = known_directives[directive] + except KeyError: + logger.debug("Ignoring unknown cache-control directive: %s", directive) + continue + + if not typ or not required: + retval[directive] = None + if typ: + try: + retval[directive] = typ(parts[1].strip()) + except IndexError: + if required: + logger.debug( + "Missing value for cache-control " "directive: %s", + directive, + ) + except ValueError: + logger.debug( + "Invalid value for cache-control directive " "%s, must be %s", + directive, + typ.__name__, + ) + + return retval + + def _load_from_cache(self, request: PreparedRequest) -> HTTPResponse | None: + """ + Load a cached response, or return None if it's not available. + """ + cache_url = request.url + assert cache_url is not None + cache_data = self.cache.get(cache_url) + if cache_data is None: + logger.debug("No cache entry available") + return None + + if isinstance(self.cache, SeparateBodyBaseCache): + body_file = self.cache.get_body(cache_url) + else: + body_file = None + + result = self.serializer.loads(request, cache_data, body_file) + if result is None: + logger.warning("Cache entry deserialization failed, entry ignored") + return result + + def cached_request(self, request: PreparedRequest) -> HTTPResponse | Literal[False]: + """ + Return a cached response if it exists in the cache, otherwise + return False. + """ + assert request.url is not None + cache_url = self.cache_url(request.url) + logger.debug('Looking up "%s" in the cache', cache_url) + cc = self.parse_cache_control(request.headers) + + # Bail out if the request insists on fresh data + if "no-cache" in cc: + logger.debug('Request header has "no-cache", cache bypassed') + return False + + if "max-age" in cc and cc["max-age"] == 0: + logger.debug('Request header has "max_age" as 0, cache bypassed') + return False + + # Check whether we can load the response from the cache: + resp = self._load_from_cache(request) + if not resp: + return False + + # If we have a cached permanent redirect, return it immediately. We + # don't need to test our response for other headers b/c it is + # intrinsically "cacheable" as it is Permanent. + # + # See: + # https://tools.ietf.org/html/rfc7231#section-6.4.2 + # + # Client can try to refresh the value by repeating the request + # with cache busting headers as usual (ie no-cache). + if int(resp.status) in PERMANENT_REDIRECT_STATUSES: + msg = ( + "Returning cached permanent redirect response " + "(ignoring date and etag information)" + ) + logger.debug(msg) + return resp + + headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(resp.headers) + if not headers or "date" not in headers: + if "etag" not in headers: + # Without date or etag, the cached response can never be used + # and should be deleted. + logger.debug("Purging cached response: no date or etag") + self.cache.delete(cache_url) + logger.debug("Ignoring cached response: no date") + return False + + now = time.time() + time_tuple = parsedate_tz(headers["date"]) + assert time_tuple is not None + date = calendar.timegm(time_tuple[:6]) + current_age = max(0, now - date) + logger.debug("Current age based on date: %i", current_age) + + # TODO: There is an assumption that the result will be a + # urllib3 response object. This may not be best since we + # could probably avoid instantiating or constructing the + # response until we know we need it. + resp_cc = self.parse_cache_control(headers) + + # determine freshness + freshness_lifetime = 0 + + # Check the max-age pragma in the cache control header + max_age = resp_cc.get("max-age") + if max_age is not None: + freshness_lifetime = max_age + logger.debug("Freshness lifetime from max-age: %i", freshness_lifetime) + + # If there isn't a max-age, check for an expires header + elif "expires" in headers: + expires = parsedate_tz(headers["expires"]) + if expires is not None: + expire_time = calendar.timegm(expires[:6]) - date + freshness_lifetime = max(0, expire_time) + logger.debug("Freshness lifetime from expires: %i", freshness_lifetime) + + # Determine if we are setting freshness limit in the + # request. Note, this overrides what was in the response. + max_age = cc.get("max-age") + if max_age is not None: + freshness_lifetime = max_age + logger.debug( + "Freshness lifetime from request max-age: %i", freshness_lifetime + ) + + min_fresh = cc.get("min-fresh") + if min_fresh is not None: + # adjust our current age by our min fresh + current_age += min_fresh + logger.debug("Adjusted current age from min-fresh: %i", current_age) + + # Return entry if it is fresh enough + if freshness_lifetime > current_age: + logger.debug('The response is "fresh", returning cached response') + logger.debug("%i > %i", freshness_lifetime, current_age) + return resp + + # we're not fresh. If we don't have an Etag, clear it out + if "etag" not in headers: + logger.debug('The cached response is "stale" with no etag, purging') + self.cache.delete(cache_url) + + # return the original handler + return False + + def conditional_headers(self, request: PreparedRequest) -> dict[str, str]: + resp = self._load_from_cache(request) + new_headers = {} + + if resp: + headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(resp.headers) + + if "etag" in headers: + new_headers["If-None-Match"] = headers["ETag"] + + if "last-modified" in headers: + new_headers["If-Modified-Since"] = headers["Last-Modified"] + + return new_headers + + def _cache_set( + self, + cache_url: str, + request: PreparedRequest, + response: HTTPResponse, + body: bytes | None = None, + expires_time: int | None = None, + ) -> None: + """ + Store the data in the cache. + """ + if isinstance(self.cache, SeparateBodyBaseCache): + # We pass in the body separately; just put a placeholder empty + # string in the metadata. + self.cache.set( + cache_url, + self.serializer.dumps(request, response, b""), + expires=expires_time, + ) + # body is None can happen when, for example, we're only updating + # headers, as is the case in update_cached_response(). + if body is not None: + self.cache.set_body(cache_url, body) + else: + self.cache.set( + cache_url, + self.serializer.dumps(request, response, body), + expires=expires_time, + ) + + def cache_response( + self, + request: PreparedRequest, + response: HTTPResponse, + body: bytes | None = None, + status_codes: Collection[int] | None = None, + ) -> None: + """ + Algorithm for caching requests. + + This assumes a requests Response object. + """ + # From httplib2: Don't cache 206's since we aren't going to + # handle byte range requests + cacheable_status_codes = status_codes or self.cacheable_status_codes + if response.status not in cacheable_status_codes: + logger.debug( + "Status code %s not in %s", response.status, cacheable_status_codes + ) + return + + response_headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( + response.headers + ) + + if "date" in response_headers: + time_tuple = parsedate_tz(response_headers["date"]) + assert time_tuple is not None + date = calendar.timegm(time_tuple[:6]) + else: + date = 0 + + # If we've been given a body, our response has a Content-Length, that + # Content-Length is valid then we can check to see if the body we've + # been given matches the expected size, and if it doesn't we'll just + # skip trying to cache it. + if ( + body is not None + and "content-length" in response_headers + and response_headers["content-length"].isdigit() + and int(response_headers["content-length"]) != len(body) + ): + return + + cc_req = self.parse_cache_control(request.headers) + cc = self.parse_cache_control(response_headers) + + assert request.url is not None + cache_url = self.cache_url(request.url) + logger.debug('Updating cache with response from "%s"', cache_url) + + # Delete it from the cache if we happen to have it stored there + no_store = False + if "no-store" in cc: + no_store = True + logger.debug('Response header has "no-store"') + if "no-store" in cc_req: + no_store = True + logger.debug('Request header has "no-store"') + if no_store and self.cache.get(cache_url): + logger.debug('Purging existing cache entry to honor "no-store"') + self.cache.delete(cache_url) + if no_store: + return + + # https://tools.ietf.org/html/rfc7234#section-4.1: + # A Vary header field-value of "*" always fails to match. + # Storing such a response leads to a deserialization warning + # during cache lookup and is not allowed to ever be served, + # so storing it can be avoided. + if "*" in response_headers.get("vary", ""): + logger.debug('Response header has "Vary: *"') + return + + # If we've been given an etag, then keep the response + if self.cache_etags and "etag" in response_headers: + expires_time = 0 + if response_headers.get("expires"): + expires = parsedate_tz(response_headers["expires"]) + if expires is not None: + expires_time = calendar.timegm(expires[:6]) - date + + expires_time = max(expires_time, 14 * 86400) + + logger.debug(f"etag object cached for {expires_time} seconds") + logger.debug("Caching due to etag") + self._cache_set(cache_url, request, response, body, expires_time) + + # Add to the cache any permanent redirects. We do this before looking + # that the Date headers. + elif int(response.status) in PERMANENT_REDIRECT_STATUSES: + logger.debug("Caching permanent redirect") + self._cache_set(cache_url, request, response, b"") + + # Add to the cache if the response headers demand it. If there + # is no date header then we can't do anything about expiring + # the cache. + elif "date" in response_headers: + time_tuple = parsedate_tz(response_headers["date"]) + assert time_tuple is not None + date = calendar.timegm(time_tuple[:6]) + # cache when there is a max-age > 0 + max_age = cc.get("max-age") + if max_age is not None and max_age > 0: + logger.debug("Caching b/c date exists and max-age > 0") + expires_time = max_age + self._cache_set( + cache_url, + request, + response, + body, + expires_time, + ) + + # If the request can expire, it means we should cache it + # in the meantime. + elif "expires" in response_headers: + if response_headers["expires"]: + expires = parsedate_tz(response_headers["expires"]) + if expires is not None: + expires_time = calendar.timegm(expires[:6]) - date + else: + expires_time = None + + logger.debug( + "Caching b/c of expires header. expires in {} seconds".format( + expires_time + ) + ) + self._cache_set( + cache_url, + request, + response, + body, + expires_time, + ) + + def update_cached_response( + self, request: PreparedRequest, response: HTTPResponse + ) -> HTTPResponse: + """On a 304 we will get a new set of headers that we want to + update our cached value with, assuming we have one. + + This should only ever be called when we've sent an ETag and + gotten a 304 as the response. + """ + assert request.url is not None + cache_url = self.cache_url(request.url) + cached_response = self._load_from_cache(request) + + if not cached_response: + # we didn't have a cached response + return response + + # Lets update our headers with the headers from the new request: + # http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1 + # + # The server isn't supposed to send headers that would make + # the cached body invalid. But... just in case, we'll be sure + # to strip out ones we know that might be problmatic due to + # typical assumptions. + excluded_headers = ["content-length"] + + cached_response.headers.update( + { + k: v + for k, v in response.headers.items() # type: ignore[no-untyped-call] + if k.lower() not in excluded_headers + } + ) + + # we want a 200 b/c we have content via the cache + cached_response.status = 200 + + # update our cache + self._cache_set(cache_url, request, cached_response) + + return cached_response diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py new file mode 100644 index 0000000..2514390 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py @@ -0,0 +1,119 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 +from __future__ import annotations + +import mmap +from tempfile import NamedTemporaryFile +from typing import TYPE_CHECKING, Any, Callable + +if TYPE_CHECKING: + from http.client import HTTPResponse + + +class CallbackFileWrapper: + """ + Small wrapper around a fp object which will tee everything read into a + buffer, and when that file is closed it will execute a callback with the + contents of that buffer. + + All attributes are proxied to the underlying file object. + + This class uses members with a double underscore (__) leading prefix so as + not to accidentally shadow an attribute. + + The data is stored in a temporary file until it is all available. As long + as the temporary files directory is disk-based (sometimes it's a + memory-backed-``tmpfs`` on Linux), data will be unloaded to disk if memory + pressure is high. For small files the disk usually won't be used at all, + it'll all be in the filesystem memory cache, so there should be no + performance impact. + """ + + def __init__( + self, fp: HTTPResponse, callback: Callable[[bytes], None] | None + ) -> None: + self.__buf = NamedTemporaryFile("rb+", delete=True) + self.__fp = fp + self.__callback = callback + + def __getattr__(self, name: str) -> Any: + # The vaguaries of garbage collection means that self.__fp is + # not always set. By using __getattribute__ and the private + # name[0] allows looking up the attribute value and raising an + # AttributeError when it doesn't exist. This stop thigns from + # infinitely recursing calls to getattr in the case where + # self.__fp hasn't been set. + # + # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers + fp = self.__getattribute__("_CallbackFileWrapper__fp") + return getattr(fp, name) + + def __is_fp_closed(self) -> bool: + try: + return self.__fp.fp is None + + except AttributeError: + pass + + try: + closed: bool = self.__fp.closed + return closed + + except AttributeError: + pass + + # We just don't cache it then. + # TODO: Add some logging here... + return False + + def _close(self) -> None: + if self.__callback: + if self.__buf.tell() == 0: + # Empty file: + result = b"" + else: + # Return the data without actually loading it into memory, + # relying on Python's buffer API and mmap(). mmap() just gives + # a view directly into the filesystem's memory cache, so it + # doesn't result in duplicate memory use. + self.__buf.seek(0, 0) + result = memoryview( + mmap.mmap(self.__buf.fileno(), 0, access=mmap.ACCESS_READ) + ) + self.__callback(result) + + # We assign this to None here, because otherwise we can get into + # really tricky problems where the CPython interpreter dead locks + # because the callback is holding a reference to something which + # has a __del__ method. Setting this to None breaks the cycle + # and allows the garbage collector to do it's thing normally. + self.__callback = None + + # Closing the temporary file releases memory and frees disk space. + # Important when caching big files. + self.__buf.close() + + def read(self, amt: int | None = None) -> bytes: + data: bytes = self.__fp.read(amt) + if data: + # We may be dealing with b'', a sign that things are over: + # it's passed e.g. after we've already closed self.__buf. + self.__buf.write(data) + if self.__is_fp_closed(): + self._close() + + return data + + def _safe_read(self, amt: int) -> bytes: + data: bytes = self.__fp._safe_read(amt) # type: ignore[attr-defined] + if amt == 2 and data == b"\r\n": + # urllib executes this read to toss the CRLF at the end + # of the chunk. + return data + + self.__buf.write(data) + if self.__is_fp_closed(): + self._close() + + return data diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py new file mode 100644 index 0000000..b9d72ca --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py @@ -0,0 +1,154 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 +from __future__ import annotations + +import calendar +import time +from datetime import datetime, timedelta, timezone +from email.utils import formatdate, parsedate, parsedate_tz +from typing import TYPE_CHECKING, Any, Mapping + +if TYPE_CHECKING: + from pip._vendor.urllib3 import HTTPResponse + +TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" + + +def expire_after(delta: timedelta, date: datetime | None = None) -> datetime: + date = date or datetime.now(timezone.utc) + return date + delta + + +def datetime_to_header(dt: datetime) -> str: + return formatdate(calendar.timegm(dt.timetuple())) + + +class BaseHeuristic: + def warning(self, response: HTTPResponse) -> str | None: + """ + Return a valid 1xx warning header value describing the cache + adjustments. + + The response is provided too allow warnings like 113 + http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need + to explicitly say response is over 24 hours old. + """ + return '110 - "Response is Stale"' + + def update_headers(self, response: HTTPResponse) -> dict[str, str]: + """Update the response headers with any new headers. + + NOTE: This SHOULD always include some Warning header to + signify that the response was cached by the client, not + by way of the provided headers. + """ + return {} + + def apply(self, response: HTTPResponse) -> HTTPResponse: + updated_headers = self.update_headers(response) + + if updated_headers: + response.headers.update(updated_headers) + warning_header_value = self.warning(response) + if warning_header_value is not None: + response.headers.update({"Warning": warning_header_value}) + + return response + + +class OneDayCache(BaseHeuristic): + """ + Cache the response by providing an expires 1 day in the + future. + """ + + def update_headers(self, response: HTTPResponse) -> dict[str, str]: + headers = {} + + if "expires" not in response.headers: + date = parsedate(response.headers["date"]) + expires = expire_after(timedelta(days=1), date=datetime(*date[:6], tzinfo=timezone.utc)) # type: ignore[misc] + headers["expires"] = datetime_to_header(expires) + headers["cache-control"] = "public" + return headers + + +class ExpiresAfter(BaseHeuristic): + """ + Cache **all** requests for a defined time period. + """ + + def __init__(self, **kw: Any) -> None: + self.delta = timedelta(**kw) + + def update_headers(self, response: HTTPResponse) -> dict[str, str]: + expires = expire_after(self.delta) + return {"expires": datetime_to_header(expires), "cache-control": "public"} + + def warning(self, response: HTTPResponse) -> str | None: + tmpl = "110 - Automatically cached for %s. Response might be stale" + return tmpl % self.delta + + +class LastModified(BaseHeuristic): + """ + If there is no Expires header already, fall back on Last-Modified + using the heuristic from + http://tools.ietf.org/html/rfc7234#section-4.2.2 + to calculate a reasonable value. + + Firefox also does something like this per + https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ + http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397 + Unlike mozilla we limit this to 24-hr. + """ + + cacheable_by_default_statuses = { + 200, + 203, + 204, + 206, + 300, + 301, + 404, + 405, + 410, + 414, + 501, + } + + def update_headers(self, resp: HTTPResponse) -> dict[str, str]: + headers: Mapping[str, str] = resp.headers + + if "expires" in headers: + return {} + + if "cache-control" in headers and headers["cache-control"] != "public": + return {} + + if resp.status not in self.cacheable_by_default_statuses: + return {} + + if "date" not in headers or "last-modified" not in headers: + return {} + + time_tuple = parsedate_tz(headers["date"]) + assert time_tuple is not None + date = calendar.timegm(time_tuple[:6]) + last_modified = parsedate(headers["last-modified"]) + if last_modified is None: + return {} + + now = time.time() + current_age = max(0, now - date) + delta = date - calendar.timegm(last_modified) + freshness_lifetime = max(0, min(delta / 10, 24 * 3600)) + if freshness_lifetime <= current_age: + return {} + + expires = date + freshness_lifetime + return {"expires": time.strftime(TIME_FMT, time.gmtime(expires))} + + def warning(self, resp: HTTPResponse) -> str | None: + return None diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py new file mode 100644 index 0000000..f9e967c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py @@ -0,0 +1,206 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 +from __future__ import annotations + +import io +from typing import IO, TYPE_CHECKING, Any, Mapping, cast + +from pip._vendor import msgpack +from pip._vendor.requests.structures import CaseInsensitiveDict +from pip._vendor.urllib3 import HTTPResponse + +if TYPE_CHECKING: + from pip._vendor.requests import PreparedRequest + + +class Serializer: + serde_version = "4" + + def dumps( + self, + request: PreparedRequest, + response: HTTPResponse, + body: bytes | None = None, + ) -> bytes: + response_headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( + response.headers + ) + + if body is None: + # When a body isn't passed in, we'll read the response. We + # also update the response with a new file handler to be + # sure it acts as though it was never read. + body = response.read(decode_content=False) + response._fp = io.BytesIO(body) # type: ignore[attr-defined] + response.length_remaining = len(body) + + data = { + "response": { + "body": body, # Empty bytestring if body is stored separately + "headers": {str(k): str(v) for k, v in response.headers.items()}, # type: ignore[no-untyped-call] + "status": response.status, + "version": response.version, + "reason": str(response.reason), + "decode_content": response.decode_content, + } + } + + # Construct our vary headers + data["vary"] = {} + if "vary" in response_headers: + varied_headers = response_headers["vary"].split(",") + for header in varied_headers: + header = str(header).strip() + header_value = request.headers.get(header, None) + if header_value is not None: + header_value = str(header_value) + data["vary"][header] = header_value + + return b",".join([f"cc={self.serde_version}".encode(), self.serialize(data)]) + + def serialize(self, data: dict[str, Any]) -> bytes: + return cast(bytes, msgpack.dumps(data, use_bin_type=True)) + + def loads( + self, + request: PreparedRequest, + data: bytes, + body_file: IO[bytes] | None = None, + ) -> HTTPResponse | None: + # Short circuit if we've been given an empty set of data + if not data: + return None + + # Determine what version of the serializer the data was serialized + # with + try: + ver, data = data.split(b",", 1) + except ValueError: + ver = b"cc=0" + + # Make sure that our "ver" is actually a version and isn't a false + # positive from a , being in the data stream. + if ver[:3] != b"cc=": + data = ver + data + ver = b"cc=0" + + # Get the version number out of the cc=N + verstr = ver.split(b"=", 1)[-1].decode("ascii") + + # Dispatch to the actual load method for the given version + try: + return getattr(self, f"_loads_v{verstr}")(request, data, body_file) # type: ignore[no-any-return] + + except AttributeError: + # This is a version we don't have a loads function for, so we'll + # just treat it as a miss and return None + return None + + def prepare_response( + self, + request: PreparedRequest, + cached: Mapping[str, Any], + body_file: IO[bytes] | None = None, + ) -> HTTPResponse | None: + """Verify our vary headers match and construct a real urllib3 + HTTPResponse object. + """ + # Special case the '*' Vary value as it means we cannot actually + # determine if the cached response is suitable for this request. + # This case is also handled in the controller code when creating + # a cache entry, but is left here for backwards compatibility. + if "*" in cached.get("vary", {}): + return None + + # Ensure that the Vary headers for the cached response match our + # request + for header, value in cached.get("vary", {}).items(): + if request.headers.get(header, None) != value: + return None + + body_raw = cached["response"].pop("body") + + headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( + data=cached["response"]["headers"] + ) + if headers.get("transfer-encoding", "") == "chunked": + headers.pop("transfer-encoding") + + cached["response"]["headers"] = headers + + try: + body: IO[bytes] + if body_file is None: + body = io.BytesIO(body_raw) + else: + body = body_file + except TypeError: + # This can happen if cachecontrol serialized to v1 format (pickle) + # using Python 2. A Python 2 str(byte string) will be unpickled as + # a Python 3 str (unicode string), which will cause the above to + # fail with: + # + # TypeError: 'str' does not support the buffer interface + body = io.BytesIO(body_raw.encode("utf8")) + + # Discard any `strict` parameter serialized by older version of cachecontrol. + cached["response"].pop("strict", None) + + return HTTPResponse(body=body, preload_content=False, **cached["response"]) + + def _loads_v0( + self, + request: PreparedRequest, + data: bytes, + body_file: IO[bytes] | None = None, + ) -> None: + # The original legacy cache data. This doesn't contain enough + # information to construct everything we need, so we'll treat this as + # a miss. + return None + + def _loads_v1( + self, + request: PreparedRequest, + data: bytes, + body_file: IO[bytes] | None = None, + ) -> HTTPResponse | None: + # The "v1" pickled cache format. This is no longer supported + # for security reasons, so we treat it as a miss. + return None + + def _loads_v2( + self, + request: PreparedRequest, + data: bytes, + body_file: IO[bytes] | None = None, + ) -> HTTPResponse | None: + # The "v2" compressed base64 cache format. + # This has been removed due to age and poor size/performance + # characteristics, so we treat it as a miss. + return None + + def _loads_v3( + self, + request: PreparedRequest, + data: bytes, + body_file: IO[bytes] | None = None, + ) -> None: + # Due to Python 2 encoding issues, it's impossible to know for sure + # exactly how to load v3 entries, thus we'll treat these as a miss so + # that they get rewritten out as v4 entries. + return None + + def _loads_v4( + self, + request: PreparedRequest, + data: bytes, + body_file: IO[bytes] | None = None, + ) -> HTTPResponse | None: + try: + cached = msgpack.loads(data, raw=False) + except ValueError: + return None + + return self.prepare_response(request, cached, body_file) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py new file mode 100644 index 0000000..f618bc3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py @@ -0,0 +1,43 @@ +# SPDX-FileCopyrightText: 2015 Eric Larson +# +# SPDX-License-Identifier: Apache-2.0 +from __future__ import annotations + +from typing import TYPE_CHECKING, Collection + +from pip._vendor.cachecontrol.adapter import CacheControlAdapter +from pip._vendor.cachecontrol.cache import DictCache + +if TYPE_CHECKING: + from pip._vendor import requests + + from pip._vendor.cachecontrol.cache import BaseCache + from pip._vendor.cachecontrol.controller import CacheController + from pip._vendor.cachecontrol.heuristics import BaseHeuristic + from pip._vendor.cachecontrol.serialize import Serializer + + +def CacheControl( + sess: requests.Session, + cache: BaseCache | None = None, + cache_etags: bool = True, + serializer: Serializer | None = None, + heuristic: BaseHeuristic | None = None, + controller_class: type[CacheController] | None = None, + adapter_class: type[CacheControlAdapter] | None = None, + cacheable_methods: Collection[str] | None = None, +) -> requests.Session: + cache = DictCache() if cache is None else cache + adapter_class = adapter_class or CacheControlAdapter + adapter = adapter_class( + cache, + cache_etags=cache_etags, + serializer=serializer, + heuristic=heuristic, + controller_class=controller_class, + cacheable_methods=cacheable_methods, + ) + sess.mount("http://", adapter) + sess.mount("https://", adapter) + + return sess diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py new file mode 100644 index 0000000..8ce89ce --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py @@ -0,0 +1,4 @@ +from .core import contents, where + +__all__ = ["contents", "where"] +__version__ = "2023.07.22" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py new file mode 100644 index 0000000..0037634 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py @@ -0,0 +1,12 @@ +import argparse + +from pip._vendor.certifi import contents, where + +parser = argparse.ArgumentParser() +parser.add_argument("-c", "--contents", action="store_true") +args = parser.parse_args() + +if args.contents: + print(contents()) +else: + print(where()) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..a71347b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..458479a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc new file mode 100644 index 0000000..fb810f4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem new file mode 100644 index 0000000..0212369 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem @@ -0,0 +1,4635 @@ + +# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Label: "GlobalSign Root CA" +# Serial: 4835703278459707669005204 +# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a +# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c +# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Label: "Entrust.net Premium 2048 Secure Server CA" +# Serial: 946069240 +# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 +# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 +# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Label: "Baltimore CyberTrust Root" +# Serial: 33554617 +# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 +# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 +# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=AAA Certificate Services O=Comodo CA Limited +# Subject: CN=AAA Certificate Services O=Comodo CA Limited +# Label: "Comodo AAA Services root" +# Serial: 1 +# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 +# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 +# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 +# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 +# Label: "Security Communication Root CA" +# Serial: 0 +# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a +# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 +# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- + +# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Label: "XRamp Global CA Root" +# Serial: 107108908803651509692980124233745014957 +# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 +# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 +# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Label: "Go Daddy Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 +# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 +# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- + +# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Label: "Starfield Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 +# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a +# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Label: "SwissSign Silver CA - G2" +# Serial: 5700383053117599563 +# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 +# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb +# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu +IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow +RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY +U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv +Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br +YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF +nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH +6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt +eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ +c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ +MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH +HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf +jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 +5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB +rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c +wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB +AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp +WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 +xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ +2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ +IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 +aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X +em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR +dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ +OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ +hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy +tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Label: "SecureSign RootCA11" +# Serial: 1 +# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 +# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 +# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 6047274297262753887 +# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 +# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa +# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL +BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ +SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n +a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 +NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT +CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u +Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO +dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI +VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV +9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY +2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY +vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt +bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb +x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ +l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK +TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj +Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e +i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw +DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG +7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk +MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr +gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk +GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS +3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm +Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ +l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c +JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP +L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa +LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG +mpv0 +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G4" +# Serial: 289383649854506086828220374796556676440 +# MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88 +# SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01 +# SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88 +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw +gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL +Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg +MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw +BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 +MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 +c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ +bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ +2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E +T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j +5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM +C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T +DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX +wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A +2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm +nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl +N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj +c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS +5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS +Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr +hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ +B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI +AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw +H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ +b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk +2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol +IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk +5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY +n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft ECC Root Certificate Authority 2017" +# Serial: 136839042543790627607696632466672567020 +# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 +# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 +# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD +VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw +MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy +b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR +ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb +hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 +FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV +L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB +iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft RSA Root Certificate Authority 2017" +# Serial: 40975477897264996090493496164228220339 +# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 +# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 +# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N +aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ +Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 +ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 +HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm +gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ +jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc +aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG +YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 +W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K +UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH ++FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q +W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC +LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC +gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 +tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh +SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 +TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 +pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR +xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp +GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 +dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN +AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB +RA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Label: "e-Szigno Root CA 2017" +# Serial: 411379200276854331539784714 +# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 +# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 +# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV +BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk +LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv +b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ +BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg +THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v +IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv +xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H +Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB +eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo +jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ ++efcMQ== +-----END CERTIFICATE----- + +# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Label: "certSIGN Root CA G2" +# Serial: 313609486401300475190 +# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 +# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 +# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g +Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ +BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ +R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF +dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw +vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ +uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp +n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs +cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW +xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P +rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF +DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx +DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy +LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C +eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ +d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq +kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl +qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 +OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c +NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk +ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO +pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj +03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk +PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE +1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX +QRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global Certification Authority" +# Serial: 1846098327275375458322922162 +# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e +# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 +# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw +CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x +ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 +c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx +OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI +SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn +swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu +7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 +1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW +80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP +JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l +RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw +hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 +coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc +BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n +twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud +DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W +0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe +uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q +lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB +aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE +sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT +MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe +qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh +VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 +h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 +EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK +yeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P256 Certification Authority" +# Serial: 4151900041497450638097112925 +# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 +# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf +# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN +FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w +DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw +CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh +DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P384 Certification Authority" +# Serial: 2704997926503831671788816187 +# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 +# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 +# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB +BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ +j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF +1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G +A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 +AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC +MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu +Sw== +-----END CERTIFICATE----- + +# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Label: "NAVER Global Root Certification Authority" +# Serial: 9013692873798656336226253319739695165984492813 +# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b +# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 +# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM +BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG +T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx +CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD +b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA +iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH +38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE +HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz +kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP +szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq +vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf +nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG +YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo +0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a +CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K +AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I +36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN +qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj +cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm ++LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL +hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe +lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 +p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 +piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR +LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX +5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO +dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul +9XXeifdy +-----END CERTIFICATE----- + +# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# Serial: 131542671362353147877283741781055151509 +# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb +# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a +# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw +CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw +FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S +Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 +MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL +DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS +QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH +sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK +Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu +SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC +MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy +v+c= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Label: "GlobalSign Root R46" +# Serial: 1552617688466950547958867513931858518042577 +# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef +# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 +# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA +MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD +VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy +MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt +c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ +OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG +vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud +316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo +0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE +y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF +zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE ++cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN +I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs +x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa +ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC +4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 +7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti +2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk +pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF +FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt +rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk +ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 +u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP +4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 +N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 +vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Label: "GlobalSign Root E46" +# Serial: 1552617690338932563915843282459653771421763 +# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f +# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 +# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx +CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD +ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw +MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex +HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq +R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd +yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ +7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 ++RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +# Issuer: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH +# Subject: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH +# Label: "GLOBALTRUST 2020" +# Serial: 109160994242082918454945253 +# MD5 Fingerprint: 8a:c7:6f:cb:6d:e3:cc:a2:f1:7c:83:fa:0e:78:d7:e8 +# SHA1 Fingerprint: d0:67:c1:13:51:01:0c:aa:d0:c7:6a:65:37:31:16:26:4f:53:71:a2 +# SHA256 Fingerprint: 9a:29:6a:51:82:d1:d4:51:a2:e3:7f:43:9b:74:da:af:a2:67:52:33:29:f9:0f:9a:0d:20:07:c3:34:e2:3c:9a +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG +A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw +FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx +MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u +aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq +hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b +RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z +YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3 +QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw +yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+ +BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ +SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH +r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0 +4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me +dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw +q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2 +nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu +H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC +XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd +6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf ++I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi +kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7 +wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB +TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C +MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn +4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I +aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy +qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + +# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Label: "ANF Secure Server Root CA" +# Serial: 996390341000653745 +# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 +# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 +# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 +-----BEGIN CERTIFICATE----- +MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV +BAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk +YWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV +BAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN +MzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF +UzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD +VQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v +dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj +cqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q +yGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH +2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX +H1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL +zc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR +p1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz +W7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/ +SiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn +LNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3 +n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B +u8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj +o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC +AgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L +9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej +rw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK +pFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0 +vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq +OknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ +/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9 +2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI ++PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2 +MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo +tt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= +-----END CERTIFICATE----- + +# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum EC-384 CA" +# Serial: 160250656287871593594747141429395092468 +# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 +# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed +# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw +CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw +JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT +EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 +WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX +BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE +KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm +Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 +EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J +UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn +nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Root CA" +# Serial: 40870380103424195783807378461123655149 +# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 +# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 +# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd +-----BEGIN CERTIFICATE----- +MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6 +MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu +MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV +BAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw +MzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg +U3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ +n0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q +p1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq +NwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF +8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3 +HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa +mqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi +7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF +ytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P +qafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ +v3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6 +Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 +vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD +ggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4 +WxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo +zMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR +5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ +GfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf +5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq +0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D +P78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM +qJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP +0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf +E2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb +-----END CERTIFICATE----- + +# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Label: "TunTrust Root CA" +# Serial: 108534058042236574382096126452369648152337120275 +# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 +# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb +# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL +BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg +Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv +b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG +EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u +IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ +n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd +2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF +VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ +GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF +li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU +r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 +eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb +MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg +jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB +7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW +5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE +ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z +xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu +QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 +FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH +22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP +xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn +dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 +Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b +nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ +CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH +u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj +d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS RSA Root CA 2021" +# Serial: 76817823531813593706434026085292783742 +# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 +# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d +# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg +Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL +MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv +b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l +mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE +4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv +a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M +pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw +Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b +LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY +AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB +AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq +E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr +W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ +CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU +X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 +f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja +H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP +JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P +zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt +jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 +/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT +BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 +aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW +xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU +63ZTGI0RmLo= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS ECC Root CA 2021" +# Serial: 137515985548005187474074462014555733966 +# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 +# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 +# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw +CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh +cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v +dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG +A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg +Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 +KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y +STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD +AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw +SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN +nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 1977337328857672817 +# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 +# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe +# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 +MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc +tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd +IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC +AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw +ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m +iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF +Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ +hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P +Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE +EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV +1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t +CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR +5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw +f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 +ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK +GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus ECC Root CA" +# Serial: 630369271402956006249506845124680065938238527194 +# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 +# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 +# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw +RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY +BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz +MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u +LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 +v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd +e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw +V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA +AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG +GJTO +-----END CERTIFICATE----- + +# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus Root CA" +# Serial: 387574501246983434957692974888460947164905180485 +# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc +# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 +# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL +BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x +FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx +MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s +THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc +IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU +AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ +GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 +8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH +flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt +J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim +0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN +pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ +UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW +OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB +AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet +8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j +bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM +Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv +TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS +S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr +I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 +b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB +UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P +Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven +sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X2 O=Internet Security Research Group +# Subject: CN=ISRG Root X2 O=Internet Security Research Group +# Label: "ISRG Root X2" +# Serial: 87493402998870891108772069816698636114 +# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 +# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af +# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw +CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg +R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 +MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT +ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW ++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 +ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI +zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW +tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 +/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Label: "HiPKI Root CA - G1" +# Serial: 60966262342023497858655262305426234976 +# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 +# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 +# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa +Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 +YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw +qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv +Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 +lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz +Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ +KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK +FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj +HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr +y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ +/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM +a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 +fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG +SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc +SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza +ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc +XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg +iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho +L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF +Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr +kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ +vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU +YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 159662223612894884239637590694 +# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc +# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 +# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD +VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw +MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g +UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT +BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx +uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV +HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ ++wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 +bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 159662320309726417404178440727 +# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 +# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a +# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo +27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w +Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw +TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl +qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH +szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 +Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk +MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 +wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p +aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN +VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb +C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy +h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 +7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J +ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef +MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ +Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT +6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ +0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm +2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb +bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R2 O=Google Trust Services LLC +# Subject: CN=GTS Root R2 O=Google Trust Services LLC +# Label: "GTS Root R2" +# Serial: 159662449406622349769042896298 +# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc +# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 +# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt +nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY +6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu +MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k +RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg +f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV ++3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo +dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW +Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa +G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq +gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H +vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC +B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u +NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg +yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev +HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 +xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR +TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg +JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV +7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl +6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 159662495401136852707857743206 +# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 +# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 +# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G +jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 +4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 +VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm +ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 159662532700760215368942768210 +# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 +# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 +# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi +QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR +HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D +9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 +p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD +-----END CERTIFICATE----- + +# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj +# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj +# Label: "Telia Root CA v2" +# Serial: 7288924052977061235122729490515358 +# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 +# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd +# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx +CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE +AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 +NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ +MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq +AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 +vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 +lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD +n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT +7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o +6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC +TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 +WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R +DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI +pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj +YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy +rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi +0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM +A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS +SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K +TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF +6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er +3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt +Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT +VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW +ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA +rBPuUBQemMc= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 1 2020" +# Serial: 165870826978392376648679885835942448534 +# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed +# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 +# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 +NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS +zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 +QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ +VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW +wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV +dWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 1 2020" +# Serial: 126288379621884218666039612629459926992 +# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e +# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 +# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 +NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC +/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD +wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 +OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA +y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb +gfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS ECC P384 Root G5" +# Serial: 13129116028163249804115411775095713523 +# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed +# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee +# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 +-----BEGIN CERTIFICATE----- +MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp +Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 +MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ +bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS +7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp +0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS +B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 +BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ +LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 +DXZDjC5Ty3zfDBeWUA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS RSA4096 Root G5" +# Serial: 11930366277458970227240571539258396554 +# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 +# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 +# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN +MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT +HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN +NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs +IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ +ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 +2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp +wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM +pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD +nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po +sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx +Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd +Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX +KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe +XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL +tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv +TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw +GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H +PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF +O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ +REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik +AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv +/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ +p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw +MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF +qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK +ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root R1 O=Certainly +# Subject: CN=Certainly Root R1 O=Certainly +# Label: "Certainly Root R1" +# Serial: 188833316161142517227353805653483829216 +# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 +# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af +# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw +PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy +dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 +YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 +1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT +vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed +aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 +1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 +r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 +cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ +wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ +6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA +2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH +Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR +eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u +d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr +PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d +8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi +1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd +rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di +taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 +lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj +yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn +Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy +yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n +wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 +OV+KmalBWQewLK8= +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root E1 O=Certainly +# Subject: CN=Certainly Root E1 O=Certainly +# Label: "Certainly Root E1" +# Serial: 8168531406727139161245376702891150584 +# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 +# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b +# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 +-----BEGIN CERTIFICATE----- +MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw +CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu +bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ +BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s +eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK ++IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 +QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 +hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm +ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG +BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR +-----END CERTIFICATE----- + +# Issuer: CN=Security Communication RootCA3 O=SECOM Trust Systems CO.,LTD. +# Subject: CN=Security Communication RootCA3 O=SECOM Trust Systems CO.,LTD. +# Label: "Security Communication RootCA3" +# Serial: 16247922307909811815 +# MD5 Fingerprint: 1c:9a:16:ff:9e:5c:e0:4d:8a:14:01:f4:35:5d:29:26 +# SHA1 Fingerprint: c3:03:c8:22:74:92:e5:61:a2:9c:5f:79:91:2b:1e:44:13:91:30:3a +# SHA256 Fingerprint: 24:a5:5c:2a:b0:51:44:2d:06:17:76:65:41:23:9a:4a:d0:32:d7:c5:51:75:aa:34:ff:de:2f:bc:4f:5c:52:94 +-----BEGIN CERTIFICATE----- +MIIFfzCCA2egAwIBAgIJAOF8N0D9G/5nMA0GCSqGSIb3DQEBDAUAMF0xCzAJBgNV +BAYTAkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMScw +JQYDVQQDEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTMwHhcNMTYwNjE2 +MDYxNzE2WhcNMzgwMTE4MDYxNzE2WjBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UEAxMeU2VjdXJpdHkg +Q29tbXVuaWNhdGlvbiBSb290Q0EzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEA48lySfcw3gl8qUCBWNO0Ot26YQ+TUG5pPDXC7ltzkBtnTCHsXzW7OT4r +CmDvu20rhvtxosis5FaU+cmvsXLUIKx00rgVrVH+hXShuRD+BYD5UpOzQD11EKzA +lrenfna84xtSGc4RHwsENPXY9Wk8d/Nk9A2qhd7gCVAEF5aEt8iKvE1y/By7z/MG +TfmfZPd+pmaGNXHIEYBMwXFAWB6+oHP2/D5Q4eAvJj1+XCO1eXDe+uDRpdYMQXF7 +9+qMHIjH7Iv10S9VlkZ8WjtYO/u62C21Jdp6Ts9EriGmnpjKIG58u4iFW/vAEGK7 +8vknR+/RiTlDxN/e4UG/VHMgly1s2vPUB6PmudhvrvyMGS7TZ2crldtYXLVqAvO4 +g160a75BflcJdURQVc1aEWEhCmHCqYj9E7wtiS/NYeCVvsq1e+F7NGcLH7YMx3we +GVPKp7FKFSBWFHA9K4IsD50VHUeAR/94mQ4xr28+j+2GaR57GIgUssL8gjMunEst ++3A7caoreyYn8xrC3PsXuKHqy6C0rtOUfnrQq8PsOC0RLoi/1D+tEjtCrI8Cbn3M +0V9hvqG8OmpI6iZVIhZdXw3/JzOfGAN0iltSIEdrRU0id4xVJ/CvHozJgyJUt5rQ +T9nO/NkuHJYosQLTA70lUhw0Zk8jq/R3gpYd0VcwCBEF/VfR2ccCAwEAAaNCMEAw +HQYDVR0OBBYEFGQUfPxYchamCik0FW8qy7z8r6irMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBDAUAA4ICAQDcAiMI4u8hOscNtybS +YpOnpSNyByCCYN8Y11StaSWSntkUz5m5UoHPrmyKO1o5yGwBQ8IibQLwYs1OY0PA +FNr0Y/Dq9HHuTofjcan0yVflLl8cebsjqodEV+m9NU1Bu0soo5iyG9kLFwfl9+qd +9XbXv8S2gVj/yP9kaWJ5rW4OH3/uHWnlt3Jxs/6lATWUVCvAUm2PVcTJ0rjLyjQI +UYWg9by0F1jqClx6vWPGOi//lkkZhOpn2ASxYfQAW0q3nHE3GYV5v4GwxxMOdnE+ +OoAGrgYWp421wsTL/0ClXI2lyTrtcoHKXJg80jQDdwj98ClZXSEIx2C/pHF7uNke +gr4Jr2VvKKu/S7XuPghHJ6APbw+LP6yVGPO5DtxnVW5inkYO0QR4ynKudtml+LLf +iAlhi+8kTtFZP1rUPcmTPCtk9YENFpb3ksP+MW/oKjJ0DvRMmEoYDjBU1cXrvMUV +nuiZIesnKwkK2/HmcBhWuwzkvvnoEKQTkrgc4NtnHVMDpCKn3F2SEDzq//wbEBrD +2NCcnWXL0CsnMQMeNuE9dnUM/0Umud1RvCPHX9jYhxBAEg09ODfnRDwYwFMJZI// +1ZqmfHAuc1Uh6N//g7kdPjIe1qZ9LPFm6Vwdp6POXiUyK+OVrCoHzrQoeIY8Laad +TdJ0MN1kURXbg4NR16/9M51NZg== +-----END CERTIFICATE----- + +# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Label: "Security Communication ECC RootCA1" +# Serial: 15446673492073852651 +# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 +# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 +# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 +-----BEGIN CERTIFICATE----- +MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT +AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD +VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx +NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT +HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 +IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl +dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK +ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu +9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O +be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA1" +# Serial: 113562791157148395269083148143378328608 +# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 +# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a +# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU +MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI +T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz +MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF +SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh +bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z +xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ +spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 +58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR +at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll +5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq +nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK +V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ +pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO +z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn +jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ +WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF +7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 +YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli +awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u ++2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 +X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN +SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo +P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI ++pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz +znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 +eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 +YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy +r/6zcCwupvI= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA2" +# Serial: 58605626836079930195615843123109055211 +# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c +# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 +# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 +-----BEGIN CERTIFICATE----- +MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw +CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ +VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy +MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ +TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS +b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B +IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ ++kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK +sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA +94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B +43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root E46" +# Serial: 88989738453351742415770396670917916916 +# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 +# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a +# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 +-----BEGIN CERTIFICATE----- +MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw +CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T +ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN +MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG +A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT +ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC +WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ +6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B +Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa +qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q +4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root R46" +# Serial: 156256931880233212765902055439220583700 +# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 +# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 +# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 +-----BEGIN CERTIFICATE----- +MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD +Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw +HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY +MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp +YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa +ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz +SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf +iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X +ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 +IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS +VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE +SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu ++Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt +8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L +HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt +zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P +AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c +mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ +YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 +gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA +Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB +JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX +DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui +TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 +dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 +LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp +0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY +QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS RSA Root CA 2022" +# Serial: 148535279242832292258835760425842727825 +# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da +# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca +# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed +-----BEGIN CERTIFICATE----- +MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO +MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD +DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX +DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw +b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP +L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY +t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins +S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 +PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO +L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 +R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w +dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS ++YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS +d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG +AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f +gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z +NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt +hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM +QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf +R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ +DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW +P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy +lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq +bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w +AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q +r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji +Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU +98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS ECC Root CA 2022" +# Serial: 26605119622390491762507526719404364228 +# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 +# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 +# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 +-----BEGIN CERTIFICATE----- +MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT +U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 +MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh +dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm +acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN +SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME +GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW +uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp +15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN +b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA ECC TLS 2021" +# Serial: 81873346711060652204712539181482831616 +# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 +# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd +# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 +-----BEGIN CERTIFICATE----- +MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w +LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w +CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 +MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF +Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X +tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 +AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 +KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD +aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu +CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo +9H1/IISpQuQo +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA RSA TLS 2021" +# Serial: 111436099570196163832749341232207667876 +# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 +# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 +# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f +-----BEGIN CERTIFICATE----- +MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM +MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx +MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 +MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD +QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z +4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv +Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ +kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs +GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln +nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh +3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD +0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy +geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 +ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB +c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI +pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS +4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs +o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ +qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw +xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM +rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 +AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR +0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY +o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 +dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE +oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== +-----END CERTIFICATE----- diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py new file mode 100644 index 0000000..5c67600 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py @@ -0,0 +1,119 @@ +""" +certifi.py +~~~~~~~~~~ + +This module returns the installation location of cacert.pem or its contents. +""" +import sys + +DEBIAN_CA_CERTS_PATH = '/etc/ssl/certs/ca-certificates.crt' + +if sys.version_info >= (3, 11): + + from importlib.resources import as_file, files + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the file + # in cases where we're inside of a zipimport situation until someone + # actually calls where(), but we don't want to re-extract the file + # on every call of where(), so we'll do it once then store it in a + # global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you to + # manage the cleanup of this file, so it doesn't actually return a + # path, it returns a context manager that will give you the path + # when you enter it and will do any cleanup when you leave it. In + # the common case of not needing a temporary file, it will just + # return the file system location and the __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = as_file(files("pip._vendor.certifi").joinpath("cacert.pem")) + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + + return _CACERT_PATH + + def contents() -> str: + return files("pip._vendor.certifi").joinpath("cacert.pem").read_text(encoding="ascii") + +elif sys.version_info >= (3, 7): + + from importlib.resources import path as get_path, read_text + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the + # file in cases where we're inside of a zipimport situation until + # someone actually calls where(), but we don't want to re-extract + # the file on every call of where(), so we'll do it once then store + # it in a global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you + # to manage the cleanup of this file, so it doesn't actually + # return a path, it returns a context manager that will give + # you the path when you enter it and will do any cleanup when + # you leave it. In the common case of not needing a temporary + # file, it will just return the file system location and the + # __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = get_path("pip._vendor.certifi", "cacert.pem") + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + + return _CACERT_PATH + + def contents() -> str: + return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") + +else: + import os + import types + from typing import Union + + Package = Union[types.ModuleType, str] + Resource = Union[str, "os.PathLike"] + + # This fallback will work for Python versions prior to 3.7 that lack the + # importlib.resources module but relies on the existing `where` function + # so won't address issues with environments like PyOxidizer that don't set + # __file__ on modules. + def read_text( + package: Package, + resource: Resource, + encoding: str = 'utf-8', + errors: str = 'strict' + ) -> str: + with open(where(), encoding=encoding) as data: + return data.read() + + # If we don't have importlib.resources, then we will just do the old logic + # of assuming we're on the filesystem and munge the path directly. + def where() -> str: + f = os.path.dirname(__file__) + + return os.path.join(f, "cacert.pem") + + def contents() -> str: + return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") + + +# Debian: Use system CA certs: +def where() -> str: + return DEBIAN_CA_CERTS_PATH + + +def contents() -> str: + with open(where(), "r", encoding="ascii") as data: + return data.read() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__init__.py new file mode 100644 index 0000000..fe58162 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__init__.py @@ -0,0 +1,115 @@ +######################## BEGIN LICENSE BLOCK ######################## +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Union + +from .charsetgroupprober import CharSetGroupProber +from .charsetprober import CharSetProber +from .enums import InputState +from .resultdict import ResultDict +from .universaldetector import UniversalDetector +from .version import VERSION, __version__ + +__all__ = ["UniversalDetector", "detect", "detect_all", "__version__", "VERSION"] + + +def detect( + byte_str: Union[bytes, bytearray], should_rename_legacy: bool = False +) -> ResultDict: + """ + Detect the encoding of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError( + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + byte_str = bytearray(byte_str) + detector = UniversalDetector(should_rename_legacy=should_rename_legacy) + detector.feed(byte_str) + return detector.close() + + +def detect_all( + byte_str: Union[bytes, bytearray], + ignore_threshold: bool = False, + should_rename_legacy: bool = False, +) -> List[ResultDict]: + """ + Detect all the possible encodings of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + :param ignore_threshold: Include encodings that are below + ``UniversalDetector.MINIMUM_THRESHOLD`` + in results. + :type ignore_threshold: ``bool`` + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError( + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + byte_str = bytearray(byte_str) + + detector = UniversalDetector(should_rename_legacy=should_rename_legacy) + detector.feed(byte_str) + detector.close() + + if detector.input_state == InputState.HIGH_BYTE: + results: List[ResultDict] = [] + probers: List[CharSetProber] = [] + for prober in detector.charset_probers: + if isinstance(prober, CharSetGroupProber): + probers.extend(p for p in prober.probers) + else: + probers.append(prober) + for prober in probers: + if ignore_threshold or prober.get_confidence() > detector.MINIMUM_THRESHOLD: + charset_name = prober.charset_name or "" + lower_charset_name = charset_name.lower() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith("iso-8859") and detector.has_win_bytes: + charset_name = detector.ISO_WIN_MAP.get( + lower_charset_name, charset_name + ) + # Rename legacy encodings with superset encodings if asked + if should_rename_legacy: + charset_name = detector.LEGACY_MAP.get( + charset_name.lower(), charset_name + ) + results.append( + { + "encoding": charset_name, + "confidence": prober.get_confidence(), + "language": prober.language, + } + ) + if len(results) > 0: + return sorted(results, key=lambda result: -result["confidence"]) + + return [detector.result] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..985ab3f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc new file mode 100644 index 0000000..f148458 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc new file mode 100644 index 0000000..e633e09 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc new file mode 100644 index 0000000..e088915 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc new file mode 100644 index 0000000..8878747 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc new file mode 100644 index 0000000..62d18ab Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc new file mode 100644 index 0000000..2ba8465 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc new file mode 100644 index 0000000..dd5994f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc new file mode 100644 index 0000000..e95cba2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc new file mode 100644 index 0000000..a9b597d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc new file mode 100644 index 0000000..f6e4ebd Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc new file mode 100644 index 0000000..efc359f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc new file mode 100644 index 0000000..2e46b41 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc new file mode 100644 index 0000000..bb05a2b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc new file mode 100644 index 0000000..79a0abf Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc new file mode 100644 index 0000000..20fdc57 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc new file mode 100644 index 0000000..4b8124f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc new file mode 100644 index 0000000..e642ae5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc new file mode 100644 index 0000000..c3fef90 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc new file mode 100644 index 0000000..f91bbd6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc new file mode 100644 index 0000000..d1ed918 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc new file mode 100644 index 0000000..aab79a8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc new file mode 100644 index 0000000..7c37dfc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc new file mode 100644 index 0000000..f039123 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc new file mode 100644 index 0000000..f7fe6f2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc new file mode 100644 index 0000000..2268a7b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc new file mode 100644 index 0000000..fe4ccb4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc new file mode 100644 index 0000000..680b147 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc new file mode 100644 index 0000000..b678147 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc new file mode 100644 index 0000000..34d8adc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc new file mode 100644 index 0000000..8792723 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc new file mode 100644 index 0000000..accc71c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc new file mode 100644 index 0000000..4f2e641 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc new file mode 100644 index 0000000..ade08c7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc new file mode 100644 index 0000000..f3f648a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc new file mode 100644 index 0000000..dd424f5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc new file mode 100644 index 0000000..275a584 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc new file mode 100644 index 0000000..4cc274e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc new file mode 100644 index 0000000..7ae30e7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc new file mode 100644 index 0000000..7c4161d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc new file mode 100644 index 0000000..d720d23 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc new file mode 100644 index 0000000..0b68376 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc new file mode 100644 index 0000000..83aa3b0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc new file mode 100644 index 0000000..1f5fa69 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/big5freq.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/big5freq.py new file mode 100644 index 0000000..87d9f97 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/big5freq.py @@ -0,0 +1,386 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Big5 frequency table +# by Taiwan's Mandarin Promotion Council +# +# +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +# Char to FreqOrder table +BIG5_TABLE_SIZE = 5376 +# fmt: off +BIG5_CHAR_TO_FREQ_ORDER = ( + 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 +3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 +1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 + 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 +3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 +4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 +5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 + 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 + 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 + 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 +2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 +1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 +3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 + 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 +3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 +2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 + 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 +3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 +1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 +5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 + 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 +5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 +1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 + 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 + 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 +3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 +3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 + 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 +2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 +2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 + 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 + 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 +3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 +1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 +1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 +1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 +2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 + 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 +4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 +1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 +5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 +2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 + 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 + 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 + 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 + 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 +5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 + 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 +1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 + 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 + 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 +5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 +1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 + 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 +3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 +4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 +3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 + 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 + 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 +1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 +4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 +3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 +3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 +2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 +5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 +3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 +5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 +1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 +2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 +1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 + 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 +1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 +4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 +3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 + 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 + 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 + 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 +2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 +5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 +1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 +2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 +1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 +1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 +5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 +5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 +5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 +3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 +4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 +4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 +2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 +5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 +3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 + 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 +5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 +5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 +1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 +2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 +3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 +4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 +5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 +3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 +4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 +1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 +1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 +4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 +1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 + 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 +1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 +1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 +3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 + 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 +5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 +2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 +1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 +1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 +5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 + 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 +4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 + 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 +2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 + 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 +1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 +1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 + 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 +4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 +4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 +1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 +3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 +5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 +5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 +1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 +2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 +1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 +3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 +2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 +3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 +2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 +4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 +4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 +3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 + 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 +3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 + 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 +3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 +4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 +3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 +1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 +5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 + 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 +5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 +1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 + 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 +4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 +4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 + 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 +2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 +2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 +3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 +1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 +4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 +2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 +1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 +1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 +2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 +3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 +1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 +5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 +1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 +4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 +1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 + 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 +1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 +4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 +4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 +2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 +1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 +4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 + 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 +5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 +2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 +3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 +4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 + 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 +5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 +5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 +1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 +4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 +4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 +2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 +3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 +3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 +2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 +1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 +4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 +3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 +3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 +2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 +4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 +5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 +3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 +2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 +3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 +1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 +2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 +3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 +4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 +2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 +2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 +5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 +1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 +2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 +1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 +3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 +4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 +2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 +3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 +3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 +2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 +4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 +2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 +3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 +4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 +5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 +3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 + 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 +1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 +4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 +1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 +4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 +5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 + 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 +5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 +5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 +2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 +3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 +2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 +2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 + 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 +1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 +4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 +3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 +3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 + 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 +2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 + 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 +2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 +4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 +1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 +4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 +1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 +3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 + 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 +3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 +5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 +5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 +3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 +3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 +1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 +2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 +5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 +1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 +1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 +3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 + 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 +1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 +4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 +5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 +2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 +3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 + 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 +1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 +2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 +2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 +5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 +5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 +5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 +2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 +2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 +1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 +4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 +3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 +3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 +4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 +4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 +2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 +2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 +5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 +4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 +5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 +4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 + 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 + 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 +1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 +3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 +4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 +1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 +5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 +2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 +2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 +3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 +5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 +1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 +3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 +5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 +1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 +5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 +2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 +3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 +2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 +3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 +3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 +3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 +4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 + 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 +2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 +4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 +3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 +5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 +1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 +5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 + 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 +1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 + 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 +4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 +1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 +4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 +1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 + 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 +3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 +4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 +5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 + 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 +3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 + 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 +2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 +) +# fmt: on diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/big5prober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/big5prober.py new file mode 100644 index 0000000..ef09c60 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/big5prober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import Big5DistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import BIG5_SM_MODEL + + +class Big5Prober(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) + self.distribution_analyzer = Big5DistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "Big5" + + @property + def language(self) -> str: + return "Chinese" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/chardistribution.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/chardistribution.py new file mode 100644 index 0000000..176cb99 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/chardistribution.py @@ -0,0 +1,261 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Tuple, Union + +from .big5freq import ( + BIG5_CHAR_TO_FREQ_ORDER, + BIG5_TABLE_SIZE, + BIG5_TYPICAL_DISTRIBUTION_RATIO, +) +from .euckrfreq import ( + EUCKR_CHAR_TO_FREQ_ORDER, + EUCKR_TABLE_SIZE, + EUCKR_TYPICAL_DISTRIBUTION_RATIO, +) +from .euctwfreq import ( + EUCTW_CHAR_TO_FREQ_ORDER, + EUCTW_TABLE_SIZE, + EUCTW_TYPICAL_DISTRIBUTION_RATIO, +) +from .gb2312freq import ( + GB2312_CHAR_TO_FREQ_ORDER, + GB2312_TABLE_SIZE, + GB2312_TYPICAL_DISTRIBUTION_RATIO, +) +from .jisfreq import ( + JIS_CHAR_TO_FREQ_ORDER, + JIS_TABLE_SIZE, + JIS_TYPICAL_DISTRIBUTION_RATIO, +) +from .johabfreq import JOHAB_TO_EUCKR_ORDER_TABLE + + +class CharDistributionAnalysis: + ENOUGH_DATA_THRESHOLD = 1024 + SURE_YES = 0.99 + SURE_NO = 0.01 + MINIMUM_DATA_THRESHOLD = 3 + + def __init__(self) -> None: + # Mapping table to get frequency order from char order (get from + # GetOrder()) + self._char_to_freq_order: Tuple[int, ...] = tuple() + self._table_size = 0 # Size of above table + # This is a constant value which varies from language to language, + # used in calculating confidence. See + # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html + # for further detail. + self.typical_distribution_ratio = 0.0 + self._done = False + self._total_chars = 0 + self._freq_chars = 0 + self.reset() + + def reset(self) -> None: + """reset analyser, clear any state""" + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + self._total_chars = 0 # Total characters encountered + # The number of characters whose frequency order is less than 512 + self._freq_chars = 0 + + def feed(self, char: Union[bytes, bytearray], char_len: int) -> None: + """feed a character with known length""" + if char_len == 2: + # we only care about 2-bytes character in our distribution analysis + order = self.get_order(char) + else: + order = -1 + if order >= 0: + self._total_chars += 1 + # order is valid + if order < self._table_size: + if 512 > self._char_to_freq_order[order]: + self._freq_chars += 1 + + def get_confidence(self) -> float: + """return confidence based on existing data""" + # if we didn't receive any character in our consideration range, + # return negative answer + if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: + return self.SURE_NO + + if self._total_chars != self._freq_chars: + r = self._freq_chars / ( + (self._total_chars - self._freq_chars) * self.typical_distribution_ratio + ) + if r < self.SURE_YES: + return r + + # normalize confidence (we don't want to be 100% sure) + return self.SURE_YES + + def got_enough_data(self) -> bool: + # It is not necessary to receive all data to draw conclusion. + # For charset detection, certain amount of data is enough + return self._total_chars > self.ENOUGH_DATA_THRESHOLD + + def get_order(self, _: Union[bytes, bytearray]) -> int: + # We do not handle characters based on the original encoding string, + # but convert this encoding string to a number, here called order. + # This allows multiple encodings of a language to share one frequency + # table. + return -1 + + +class EUCTWDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER + self._table_size = EUCTW_TABLE_SIZE + self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for euc-TW encoding, we are interested + # first byte range: 0xc4 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xC4: + return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 + return -1 + + +class EUCKRDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER + self._table_size = EUCKR_TABLE_SIZE + self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for euc-KR encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xB0: + return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 + return -1 + + +class JOHABDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER + self._table_size = EUCKR_TABLE_SIZE + self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + first_char = byte_str[0] + if 0x88 <= first_char < 0xD4: + code = first_char * 256 + byte_str[1] + return JOHAB_TO_EUCKR_ORDER_TABLE.get(code, -1) + return -1 + + +class GB2312DistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER + self._table_size = GB2312_TABLE_SIZE + self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for GB2312 encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0xB0) and (second_char >= 0xA1): + return 94 * (first_char - 0xB0) + second_char - 0xA1 + return -1 + + +class Big5DistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER + self._table_size = BIG5_TABLE_SIZE + self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for big5 encoding, we are interested + # first byte range: 0xa4 -- 0xfe + # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if first_char >= 0xA4: + if second_char >= 0xA1: + return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 + return 157 * (first_char - 0xA4) + second_char - 0x40 + return -1 + + +class SJISDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for sjis encoding, we are interested + # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe + # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if 0x81 <= first_char <= 0x9F: + order = 188 * (first_char - 0x81) + elif 0xE0 <= first_char <= 0xEF: + order = 188 * (first_char - 0xE0 + 31) + else: + return -1 + order = order + second_char - 0x40 + if second_char > 0x7F: + order = -1 + return order + + +class EUCJPDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for euc-JP encoding, we are interested + # first byte range: 0xa0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + char = byte_str[0] + if char >= 0xA0: + return 94 * (char - 0xA1) + byte_str[1] - 0xA1 + return -1 diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/charsetgroupprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/charsetgroupprober.py new file mode 100644 index 0000000..6def56b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/charsetgroupprober.py @@ -0,0 +1,106 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Optional, Union + +from .charsetprober import CharSetProber +from .enums import LanguageFilter, ProbingState + + +class CharSetGroupProber(CharSetProber): + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self._active_num = 0 + self.probers: List[CharSetProber] = [] + self._best_guess_prober: Optional[CharSetProber] = None + + def reset(self) -> None: + super().reset() + self._active_num = 0 + for prober in self.probers: + prober.reset() + prober.active = True + self._active_num += 1 + self._best_guess_prober = None + + @property + def charset_name(self) -> Optional[str]: + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.charset_name + + @property + def language(self) -> Optional[str]: + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.language + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for prober in self.probers: + if not prober.active: + continue + state = prober.feed(byte_str) + if not state: + continue + if state == ProbingState.FOUND_IT: + self._best_guess_prober = prober + self._state = ProbingState.FOUND_IT + return self.state + if state == ProbingState.NOT_ME: + prober.active = False + self._active_num -= 1 + if self._active_num <= 0: + self._state = ProbingState.NOT_ME + return self.state + return self.state + + def get_confidence(self) -> float: + state = self.state + if state == ProbingState.FOUND_IT: + return 0.99 + if state == ProbingState.NOT_ME: + return 0.01 + best_conf = 0.0 + self._best_guess_prober = None + for prober in self.probers: + if not prober.active: + self.logger.debug("%s not active", prober.charset_name) + continue + conf = prober.get_confidence() + self.logger.debug( + "%s %s confidence = %s", prober.charset_name, prober.language, conf + ) + if best_conf < conf: + best_conf = conf + self._best_guess_prober = prober + if not self._best_guess_prober: + return 0.0 + return best_conf diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/charsetprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/charsetprober.py new file mode 100644 index 0000000..a103ca1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/charsetprober.py @@ -0,0 +1,147 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging +import re +from typing import Optional, Union + +from .enums import LanguageFilter, ProbingState + +INTERNATIONAL_WORDS_PATTERN = re.compile( + b"[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?" +) + + +class CharSetProber: + + SHORTCUT_THRESHOLD = 0.95 + + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + self._state = ProbingState.DETECTING + self.active = True + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + + def reset(self) -> None: + self._state = ProbingState.DETECTING + + @property + def charset_name(self) -> Optional[str]: + return None + + @property + def language(self) -> Optional[str]: + raise NotImplementedError + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + raise NotImplementedError + + @property + def state(self) -> ProbingState: + return self._state + + def get_confidence(self) -> float: + return 0.0 + + @staticmethod + def filter_high_byte_only(buf: Union[bytes, bytearray]) -> bytes: + buf = re.sub(b"([\x00-\x7F])+", b" ", buf) + return buf + + @staticmethod + def filter_international_words(buf: Union[bytes, bytearray]) -> bytearray: + """ + We define three types of bytes: + alphabet: english alphabets [a-zA-Z] + international: international characters [\x80-\xFF] + marker: everything else [^a-zA-Z\x80-\xFF] + The input buffer can be thought to contain a series of words delimited + by markers. This function works to filter all words that contain at + least one international character. All contiguous sequences of markers + are replaced by a single space ascii character. + This filter applies to all scripts which do not use English characters. + """ + filtered = bytearray() + + # This regex expression filters out only words that have at-least one + # international character. The word may include one marker character at + # the end. + words = INTERNATIONAL_WORDS_PATTERN.findall(buf) + + for word in words: + filtered.extend(word[:-1]) + + # If the last character in the word is a marker, replace it with a + # space as markers shouldn't affect our analysis (they are used + # similarly across all languages and may thus have similar + # frequencies). + last_char = word[-1:] + if not last_char.isalpha() and last_char < b"\x80": + last_char = b" " + filtered.extend(last_char) + + return filtered + + @staticmethod + def remove_xml_tags(buf: Union[bytes, bytearray]) -> bytes: + """ + Returns a copy of ``buf`` that retains only the sequences of English + alphabet and high byte characters that are not between <> characters. + This filter can be applied to all scripts which contain both English + characters and extended ASCII characters, but is currently only used by + ``Latin1Prober``. + """ + filtered = bytearray() + in_tag = False + prev = 0 + buf = memoryview(buf).cast("c") + + for curr, buf_char in enumerate(buf): + # Check if we're coming out of or entering an XML tag + + # https://github.com/python/typeshed/issues/8182 + if buf_char == b">": # type: ignore[comparison-overlap] + prev = curr + 1 + in_tag = False + # https://github.com/python/typeshed/issues/8182 + elif buf_char == b"<": # type: ignore[comparison-overlap] + if curr > prev and not in_tag: + # Keep everything after last non-extended-ASCII, + # non-alphabetic character + filtered.extend(buf[prev:curr]) + # Output a space to delimit stretch we kept + filtered.extend(b" ") + in_tag = True + + # If we're not in a tag... + if not in_tag: + # Keep everything after last non-extended-ASCII, non-alphabetic + # character + filtered.extend(buf[prev:]) + + return filtered diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..e9ec9bb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-312.pyc new file mode 100644 index 0000000..6d24bf0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/chardetect.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/chardetect.py new file mode 100644 index 0000000..43f6e14 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/chardetect.py @@ -0,0 +1,112 @@ +""" +Script which takes one or more file paths and reports on their detected +encodings + +Example:: + + % chardetect somefile someotherfile + somefile: windows-1252 with confidence 0.5 + someotherfile: ascii with confidence 1.0 + +If no paths are provided, it takes its input from stdin. + +""" + + +import argparse +import sys +from typing import Iterable, List, Optional + +from .. import __version__ +from ..universaldetector import UniversalDetector + + +def description_of( + lines: Iterable[bytes], + name: str = "stdin", + minimal: bool = False, + should_rename_legacy: bool = False, +) -> Optional[str]: + """ + Return a string describing the probable encoding of a file or + list of strings. + + :param lines: The lines to get the encoding of. + :type lines: Iterable of bytes + :param name: Name of file or collection of lines + :type name: str + :param should_rename_legacy: Should we rename legacy encodings to + their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + u = UniversalDetector(should_rename_legacy=should_rename_legacy) + for line in lines: + line = bytearray(line) + u.feed(line) + # shortcut out of the loop to save reading further - particularly useful if we read a BOM. + if u.done: + break + u.close() + result = u.result + if minimal: + return result["encoding"] + if result["encoding"]: + return f'{name}: {result["encoding"]} with confidence {result["confidence"]}' + return f"{name}: no result" + + +def main(argv: Optional[List[str]] = None) -> None: + """ + Handles command line arguments and gets things started. + + :param argv: List of arguments, as if specified on the command-line. + If None, ``sys.argv[1:]`` is used instead. + :type argv: list of str + """ + # Get command line arguments + parser = argparse.ArgumentParser( + description=( + "Takes one or more file paths and reports their detected encodings" + ) + ) + parser.add_argument( + "input", + help="File whose encoding we would like to determine. (default: stdin)", + type=argparse.FileType("rb"), + nargs="*", + default=[sys.stdin.buffer], + ) + parser.add_argument( + "--minimal", + help="Print only the encoding to standard output", + action="store_true", + ) + parser.add_argument( + "-l", + "--legacy", + help="Rename legacy encodings to more modern ones.", + action="store_true", + ) + parser.add_argument( + "--version", action="version", version=f"%(prog)s {__version__}" + ) + args = parser.parse_args(argv) + + for f in args.input: + if f.isatty(): + print( + "You are running chardetect interactively. Press " + "CTRL-D twice at the start of a blank line to signal the " + "end of your input. If you want help, run chardetect " + "--help\n", + file=sys.stderr, + ) + print( + description_of( + f, f.name, minimal=args.minimal, should_rename_legacy=args.legacy + ) + ) + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachine.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachine.py new file mode 100644 index 0000000..8ed4a87 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachine.py @@ -0,0 +1,90 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging + +from .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + + +class CodingStateMachine: + """ + A state machine to verify a byte sequence for a particular encoding. For + each byte the detector receives, it will feed that byte to every active + state machine available, one byte at a time. The state machine changes its + state based on its previous state and the byte it receives. There are 3 + states in a state machine that are of interest to an auto-detector: + + START state: This is the state to start with, or a legal byte sequence + (i.e. a valid code point) for character has been identified. + + ME state: This indicates that the state machine identified a byte sequence + that is specific to the charset it is designed for and that + there is no other possible encoding which can contain this byte + sequence. This will to lead to an immediate positive answer for + the detector. + + ERROR state: This indicates the state machine identified an illegal byte + sequence for that encoding. This will lead to an immediate + negative answer for this encoding. Detector will exclude this + encoding from consideration from here on. + """ + + def __init__(self, sm: CodingStateMachineDict) -> None: + self._model = sm + self._curr_byte_pos = 0 + self._curr_char_len = 0 + self._curr_state = MachineState.START + self.active = True + self.logger = logging.getLogger(__name__) + self.reset() + + def reset(self) -> None: + self._curr_state = MachineState.START + + def next_state(self, c: int) -> int: + # for each byte we get its class + # if it is first byte, we also get byte length + byte_class = self._model["class_table"][c] + if self._curr_state == MachineState.START: + self._curr_byte_pos = 0 + self._curr_char_len = self._model["char_len_table"][byte_class] + # from byte's class and state_table, we get its next state + curr_state = self._curr_state * self._model["class_factor"] + byte_class + self._curr_state = self._model["state_table"][curr_state] + self._curr_byte_pos += 1 + return self._curr_state + + def get_current_charlen(self) -> int: + return self._curr_char_len + + def get_coding_state_machine(self) -> str: + return self._model["name"] + + @property + def language(self) -> str: + return self._model["language"] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachinedict.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachinedict.py new file mode 100644 index 0000000..7a3c4c7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachinedict.py @@ -0,0 +1,19 @@ +from typing import TYPE_CHECKING, Tuple + +if TYPE_CHECKING: + # TypedDict was introduced in Python 3.8. + # + # TODO: Remove the else block and TYPE_CHECKING check when dropping support + # for Python 3.7. + from typing import TypedDict + + class CodingStateMachineDict(TypedDict, total=False): + class_table: Tuple[int, ...] + class_factor: int + state_table: Tuple[int, ...] + char_len_table: Tuple[int, ...] + name: str + language: str # Optional key + +else: + CodingStateMachineDict = dict diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cp949prober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cp949prober.py new file mode 100644 index 0000000..fa7307e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cp949prober.py @@ -0,0 +1,49 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCKRDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import CP949_SM_MODEL + + +class CP949Prober(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(CP949_SM_MODEL) + # NOTE: CP949 is a superset of EUC-KR, so the distribution should be + # not different. + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "CP949" + + @property + def language(self) -> str: + return "Korean" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/enums.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/enums.py new file mode 100644 index 0000000..5e3e198 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/enums.py @@ -0,0 +1,85 @@ +""" +All of the Enums that are used throughout the chardet package. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +from enum import Enum, Flag + + +class InputState: + """ + This enum represents the different states a universal detector can be in. + """ + + PURE_ASCII = 0 + ESC_ASCII = 1 + HIGH_BYTE = 2 + + +class LanguageFilter(Flag): + """ + This enum represents the different language filters we can apply to a + ``UniversalDetector``. + """ + + NONE = 0x00 + CHINESE_SIMPLIFIED = 0x01 + CHINESE_TRADITIONAL = 0x02 + JAPANESE = 0x04 + KOREAN = 0x08 + NON_CJK = 0x10 + ALL = 0x1F + CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL + CJK = CHINESE | JAPANESE | KOREAN + + +class ProbingState(Enum): + """ + This enum represents the different states a prober can be in. + """ + + DETECTING = 0 + FOUND_IT = 1 + NOT_ME = 2 + + +class MachineState: + """ + This enum represents the different states a state machine can be in. + """ + + START = 0 + ERROR = 1 + ITS_ME = 2 + + +class SequenceLikelihood: + """ + This enum represents the likelihood of a character following the previous one. + """ + + NEGATIVE = 0 + UNLIKELY = 1 + LIKELY = 2 + POSITIVE = 3 + + @classmethod + def get_num_categories(cls) -> int: + """:returns: The number of likelihood categories in the enum.""" + return 4 + + +class CharacterCategory: + """ + This enum represents the different categories language models for + ``SingleByteCharsetProber`` put characters into. + + Anything less than CONTROL is considered a letter. + """ + + UNDEFINED = 255 + LINE_BREAK = 254 + SYMBOL = 253 + DIGIT = 252 + CONTROL = 251 diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/escprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/escprober.py new file mode 100644 index 0000000..fd71383 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/escprober.py @@ -0,0 +1,102 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Optional, Union + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, MachineState, ProbingState +from .escsm import ( + HZ_SM_MODEL, + ISO2022CN_SM_MODEL, + ISO2022JP_SM_MODEL, + ISO2022KR_SM_MODEL, +) + + +class EscCharSetProber(CharSetProber): + """ + This CharSetProber uses a "code scheme" approach for detecting encodings, + whereby easily recognizable escape or shift sequences are relied on to + identify these encodings. + """ + + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self.coding_sm = [] + if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: + self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) + self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) + if self.lang_filter & LanguageFilter.JAPANESE: + self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) + if self.lang_filter & LanguageFilter.KOREAN: + self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) + self.active_sm_count = 0 + self._detected_charset: Optional[str] = None + self._detected_language: Optional[str] = None + self._state = ProbingState.DETECTING + self.reset() + + def reset(self) -> None: + super().reset() + for coding_sm in self.coding_sm: + coding_sm.active = True + coding_sm.reset() + self.active_sm_count = len(self.coding_sm) + self._detected_charset = None + self._detected_language = None + + @property + def charset_name(self) -> Optional[str]: + return self._detected_charset + + @property + def language(self) -> Optional[str]: + return self._detected_language + + def get_confidence(self) -> float: + return 0.99 if self._detected_charset else 0.00 + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + for coding_sm in self.coding_sm: + if not coding_sm.active: + continue + coding_state = coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + coding_sm.active = False + self.active_sm_count -= 1 + if self.active_sm_count <= 0: + self._state = ProbingState.NOT_ME + return self.state + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + self._detected_charset = coding_sm.get_coding_state_machine() + self._detected_language = coding_sm.language + return self.state + + return self.state diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/escsm.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/escsm.py new file mode 100644 index 0000000..11d4adf --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/escsm.py @@ -0,0 +1,261 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + +# fmt: off +HZ_CLS = ( + 1, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 0, 0, 0, 0, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 1, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27 + 0, 0, 0, 0, 0, 0, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 0, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 4, 0, 5, 2, 0, # 78 - 7f + 1, 1, 1, 1, 1, 1, 1, 1, # 80 - 87 + 1, 1, 1, 1, 1, 1, 1, 1, # 88 - 8f + 1, 1, 1, 1, 1, 1, 1, 1, # 90 - 97 + 1, 1, 1, 1, 1, 1, 1, 1, # 98 - 9f + 1, 1, 1, 1, 1, 1, 1, 1, # a0 - a7 + 1, 1, 1, 1, 1, 1, 1, 1, # a8 - af + 1, 1, 1, 1, 1, 1, 1, 1, # b0 - b7 + 1, 1, 1, 1, 1, 1, 1, 1, # b8 - bf + 1, 1, 1, 1, 1, 1, 1, 1, # c0 - c7 + 1, 1, 1, 1, 1, 1, 1, 1, # c8 - cf + 1, 1, 1, 1, 1, 1, 1, 1, # d0 - d7 + 1, 1, 1, 1, 1, 1, 1, 1, # d8 - df + 1, 1, 1, 1, 1, 1, 1, 1, # e0 - e7 + 1, 1, 1, 1, 1, 1, 1, 1, # e8 - ef + 1, 1, 1, 1, 1, 1, 1, 1, # f0 - f7 + 1, 1, 1, 1, 1, 1, 1, 1, # f8 - ff +) + +HZ_ST = ( +MachineState.START, MachineState.ERROR, 3, MachineState.START, MachineState.START, MachineState.START, MachineState.ERROR, MachineState.ERROR, # 00-07 +MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, # 08-0f +MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.START, MachineState.START, 4, MachineState.ERROR, # 10-17 + 5, MachineState.ERROR, 6, MachineState.ERROR, 5, 5, 4, MachineState.ERROR, # 18-1f + 4, MachineState.ERROR, 4, 4, 4, MachineState.ERROR, 4, MachineState.ERROR, # 20-27 + 4, MachineState.ITS_ME, MachineState.START, MachineState.START, MachineState.START, MachineState.START, MachineState.START, MachineState.START, # 28-2f +) +# fmt: on + +HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +HZ_SM_MODEL: CodingStateMachineDict = { + "class_table": HZ_CLS, + "class_factor": 6, + "state_table": HZ_ST, + "char_len_table": HZ_CHAR_LEN_TABLE, + "name": "HZ-GB-2312", + "language": "Chinese", +} + +# fmt: off +ISO2022CN_CLS = ( + 2, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 0, 0, 0, 0, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 1, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27 + 0, 3, 0, 0, 0, 0, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 4, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 2, 2, 2, 2, 2, 2, 2, 2, # 80 - 87 + 2, 2, 2, 2, 2, 2, 2, 2, # 88 - 8f + 2, 2, 2, 2, 2, 2, 2, 2, # 90 - 97 + 2, 2, 2, 2, 2, 2, 2, 2, # 98 - 9f + 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7 + 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef + 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7 + 2, 2, 2, 2, 2, 2, 2, 2, # f8 - ff +) + +ISO2022CN_ST = ( + MachineState.START, 3, MachineState.ERROR, MachineState.START, MachineState.START, MachineState.START, MachineState.START, MachineState.START, # 00-07 + MachineState.START, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 08-0f + MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, # 10-17 + MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 4, MachineState.ERROR, # 18-1f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 20-27 + 5, 6, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 28-2f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 30-37 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.START, # 38-3f +) +# fmt: on + +ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022CN_SM_MODEL: CodingStateMachineDict = { + "class_table": ISO2022CN_CLS, + "class_factor": 9, + "state_table": ISO2022CN_ST, + "char_len_table": ISO2022CN_CHAR_LEN_TABLE, + "name": "ISO-2022-CN", + "language": "Chinese", +} + +# fmt: off +ISO2022JP_CLS = ( + 2, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 0, 0, 0, 0, 2, 2, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 1, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 7, 0, 0, 0, # 20 - 27 + 3, 0, 0, 0, 0, 0, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 6, 0, 4, 0, 8, 0, 0, 0, # 40 - 47 + 0, 9, 5, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 2, 2, 2, 2, 2, 2, 2, 2, # 80 - 87 + 2, 2, 2, 2, 2, 2, 2, 2, # 88 - 8f + 2, 2, 2, 2, 2, 2, 2, 2, # 90 - 97 + 2, 2, 2, 2, 2, 2, 2, 2, # 98 - 9f + 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7 + 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef + 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7 + 2, 2, 2, 2, 2, 2, 2, 2, # f8 - ff +) + +ISO2022JP_ST = ( + MachineState.START, 3, MachineState.ERROR, MachineState.START, MachineState.START, MachineState.START, MachineState.START, MachineState.START, # 00-07 + MachineState.START, MachineState.START, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 08-0f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, # 10-17 + MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, # 18-1f + MachineState.ERROR, 5, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 4, MachineState.ERROR, MachineState.ERROR, # 20-27 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 6, MachineState.ITS_ME, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, # 28-2f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, # 30-37 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 38-3f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.START, MachineState.START, # 40-47 +) +# fmt: on + +ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022JP_SM_MODEL: CodingStateMachineDict = { + "class_table": ISO2022JP_CLS, + "class_factor": 10, + "state_table": ISO2022JP_ST, + "char_len_table": ISO2022JP_CHAR_LEN_TABLE, + "name": "ISO-2022-JP", + "language": "Japanese", +} + +# fmt: off +ISO2022KR_CLS = ( + 2, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 0, 0, 0, 0, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 1, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 3, 0, 0, 0, # 20 - 27 + 0, 4, 0, 0, 0, 0, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 5, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 2, 2, 2, 2, 2, 2, 2, 2, # 80 - 87 + 2, 2, 2, 2, 2, 2, 2, 2, # 88 - 8f + 2, 2, 2, 2, 2, 2, 2, 2, # 90 - 97 + 2, 2, 2, 2, 2, 2, 2, 2, # 98 - 9f + 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7 + 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef + 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7 + 2, 2, 2, 2, 2, 2, 2, 2, # f8 - ff +) + +ISO2022KR_ST = ( + MachineState.START, 3, MachineState.ERROR, MachineState.START, MachineState.START, MachineState.START, MachineState.ERROR, MachineState.ERROR, # 00-07 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, # 08-0f + MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 4, MachineState.ERROR, MachineState.ERROR, # 10-17 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 5, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 18-1f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.START, MachineState.START, MachineState.START, MachineState.START, # 20-27 +) +# fmt: on + +ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +ISO2022KR_SM_MODEL: CodingStateMachineDict = { + "class_table": ISO2022KR_CLS, + "class_factor": 6, + "state_table": ISO2022KR_ST, + "char_len_table": ISO2022KR_CHAR_LEN_TABLE, + "name": "ISO-2022-KR", + "language": "Korean", +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/eucjpprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/eucjpprober.py new file mode 100644 index 0000000..39487f4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/eucjpprober.py @@ -0,0 +1,102 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Union + +from .chardistribution import EUCJPDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .jpcntx import EUCJPContextAnalysis +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import EUCJP_SM_MODEL + + +class EUCJPProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) + self.distribution_analyzer = EUCJPDistributionAnalysis() + self.context_analyzer = EUCJPContextAnalysis() + self.reset() + + def reset(self) -> None: + super().reset() + self.context_analyzer.reset() + + @property + def charset_name(self) -> str: + return "EUC-JP" + + @property + def language(self) -> str: + return "Japanese" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + # PY3K: byte_str is a byte array, so byte is an int, not a byte + coding_state = self.coding_sm.next_state(byte) + if coding_state == MachineState.ERROR: + self.logger.debug( + "%s %s prober hit error at byte %s", + self.charset_name, + self.language, + i, + ) + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + self.context_analyzer.feed(self._last_char, char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i - 1 : i + 1], char_len) + self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if self.context_analyzer.got_enough_data() and ( + self.get_confidence() > self.SHORTCUT_THRESHOLD + ): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self) -> float: + assert self.distribution_analyzer is not None + + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euckrfreq.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euckrfreq.py new file mode 100644 index 0000000..7dc3b10 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euckrfreq.py @@ -0,0 +1,196 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology + +# 128 --> 0.79 +# 256 --> 0.92 +# 512 --> 0.986 +# 1024 --> 0.99944 +# 2048 --> 0.99999 +# +# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 +# Random Distribution Ration = 512 / (2350-512) = 0.279. +# +# Typical Distribution Ratio + +EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 + +EUCKR_TABLE_SIZE = 2352 + +# Char to FreqOrder table , +# fmt: off +EUCKR_CHAR_TO_FREQ_ORDER = ( + 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, +1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, +1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, + 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, + 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, + 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, +1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, + 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, + 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, +1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, +1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, +1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, +1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, +1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, + 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, +1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, +1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, +1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, +1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, + 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, +1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, + 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, + 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, +1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, + 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, +1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, + 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, + 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, +1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, +1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, +1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, +1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, + 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, +1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, + 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, + 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, +1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, +1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, +1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, +1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, +1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, +1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, + 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, + 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, + 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, +1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, + 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, +1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, + 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, + 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, +2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, + 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, + 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, +2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, +2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, +2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, + 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, + 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, +2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, + 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, +1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, +2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, +1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, +2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, +2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, +1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, + 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, +2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, +2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, + 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, + 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, +2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, +1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, +2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, +2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, +2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, +2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, +2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, +2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, +1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, +2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, +2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, +2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, +2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, +2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, +1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, +1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, +2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, +1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, +2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, +1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, + 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, +2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, + 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, +2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, + 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, +2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, +2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, + 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, +2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, +1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, + 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, +1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, +2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, +1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, +2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, + 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, +2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, +1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, +2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, +1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, +2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, +1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, + 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, +2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, +2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, + 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, + 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, +1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, +1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, + 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, +2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, +2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, + 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, + 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, + 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, +2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, + 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, + 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, +2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, +2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, + 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, +2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, +1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, + 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, +2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, +2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, +2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, + 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, + 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, + 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, +2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, +2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, +2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, +1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, +2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, + 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 +) +# fmt: on diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euckrprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euckrprober.py new file mode 100644 index 0000000..1fc5de0 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euckrprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCKRDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import EUCKR_SM_MODEL + + +class EUCKRProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "EUC-KR" + + @property + def language(self) -> str: + return "Korean" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euctwfreq.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euctwfreq.py new file mode 100644 index 0000000..4900ccc --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euctwfreq.py @@ -0,0 +1,388 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# EUCTW frequency table +# Converted from big5 work +# by Taiwan's Mandarin Promotion Council +# + +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +# Char to FreqOrder table +EUCTW_TABLE_SIZE = 5376 + +# fmt: off +EUCTW_CHAR_TO_FREQ_ORDER = ( + 1, 1800, 1506, 255, 1431, 198, 9, 82, 6, 7310, 177, 202, 3615, 1256, 2808, 110, # 2742 + 3735, 33, 3241, 261, 76, 44, 2113, 16, 2931, 2184, 1176, 659, 3868, 26, 3404, 2643, # 2758 + 1198, 3869, 3313, 4060, 410, 2211, 302, 590, 361, 1963, 8, 204, 58, 4296, 7311, 1931, # 2774 + 63, 7312, 7313, 317, 1614, 75, 222, 159, 4061, 2412, 1480, 7314, 3500, 3068, 224, 2809, # 2790 + 3616, 3, 10, 3870, 1471, 29, 2774, 1135, 2852, 1939, 873, 130, 3242, 1123, 312, 7315, # 2806 + 4297, 2051, 507, 252, 682, 7316, 142, 1914, 124, 206, 2932, 34, 3501, 3173, 64, 604, # 2822 + 7317, 2494, 1976, 1977, 155, 1990, 645, 641, 1606, 7318, 3405, 337, 72, 406, 7319, 80, # 2838 + 630, 238, 3174, 1509, 263, 939, 1092, 2644, 756, 1440, 1094, 3406, 449, 69, 2969, 591, # 2854 + 179, 2095, 471, 115, 2034, 1843, 60, 50, 2970, 134, 806, 1868, 734, 2035, 3407, 180, # 2870 + 995, 1607, 156, 537, 2893, 688, 7320, 319, 1305, 779, 2144, 514, 2374, 298, 4298, 359, # 2886 + 2495, 90, 2707, 1338, 663, 11, 906, 1099, 2545, 20, 2436, 182, 532, 1716, 7321, 732, # 2902 + 1376, 4062, 1311, 1420, 3175, 25, 2312, 1056, 113, 399, 382, 1949, 242, 3408, 2467, 529, # 2918 + 3243, 475, 1447, 3617, 7322, 117, 21, 656, 810, 1297, 2295, 2329, 3502, 7323, 126, 4063, # 2934 + 706, 456, 150, 613, 4299, 71, 1118, 2036, 4064, 145, 3069, 85, 835, 486, 2114, 1246, # 2950 + 1426, 428, 727, 1285, 1015, 800, 106, 623, 303, 1281, 7324, 2127, 2354, 347, 3736, 221, # 2966 + 3503, 3110, 7325, 1955, 1153, 4065, 83, 296, 1199, 3070, 192, 624, 93, 7326, 822, 1897, # 2982 + 2810, 3111, 795, 2064, 991, 1554, 1542, 1592, 27, 43, 2853, 859, 139, 1456, 860, 4300, # 2998 + 437, 712, 3871, 164, 2392, 3112, 695, 211, 3017, 2096, 195, 3872, 1608, 3504, 3505, 3618, # 3014 + 3873, 234, 811, 2971, 2097, 3874, 2229, 1441, 3506, 1615, 2375, 668, 2076, 1638, 305, 228, # 3030 + 1664, 4301, 467, 415, 7327, 262, 2098, 1593, 239, 108, 300, 200, 1033, 512, 1247, 2077, # 3046 + 7328, 7329, 2173, 3176, 3619, 2673, 593, 845, 1062, 3244, 88, 1723, 2037, 3875, 1950, 212, # 3062 + 266, 152, 149, 468, 1898, 4066, 4302, 77, 187, 7330, 3018, 37, 5, 2972, 7331, 3876, # 3078 + 7332, 7333, 39, 2517, 4303, 2894, 3177, 2078, 55, 148, 74, 4304, 545, 483, 1474, 1029, # 3094 + 1665, 217, 1869, 1531, 3113, 1104, 2645, 4067, 24, 172, 3507, 900, 3877, 3508, 3509, 4305, # 3110 + 32, 1408, 2811, 1312, 329, 487, 2355, 2247, 2708, 784, 2674, 4, 3019, 3314, 1427, 1788, # 3126 + 188, 109, 499, 7334, 3620, 1717, 1789, 888, 1217, 3020, 4306, 7335, 3510, 7336, 3315, 1520, # 3142 + 3621, 3878, 196, 1034, 775, 7337, 7338, 929, 1815, 249, 439, 38, 7339, 1063, 7340, 794, # 3158 + 3879, 1435, 2296, 46, 178, 3245, 2065, 7341, 2376, 7342, 214, 1709, 4307, 804, 35, 707, # 3174 + 324, 3622, 1601, 2546, 140, 459, 4068, 7343, 7344, 1365, 839, 272, 978, 2257, 2572, 3409, # 3190 + 2128, 1363, 3623, 1423, 697, 100, 3071, 48, 70, 1231, 495, 3114, 2193, 7345, 1294, 7346, # 3206 + 2079, 462, 586, 1042, 3246, 853, 256, 988, 185, 2377, 3410, 1698, 434, 1084, 7347, 3411, # 3222 + 314, 2615, 2775, 4308, 2330, 2331, 569, 2280, 637, 1816, 2518, 757, 1162, 1878, 1616, 3412, # 3238 + 287, 1577, 2115, 768, 4309, 1671, 2854, 3511, 2519, 1321, 3737, 909, 2413, 7348, 4069, 933, # 3254 + 3738, 7349, 2052, 2356, 1222, 4310, 765, 2414, 1322, 786, 4311, 7350, 1919, 1462, 1677, 2895, # 3270 + 1699, 7351, 4312, 1424, 2437, 3115, 3624, 2590, 3316, 1774, 1940, 3413, 3880, 4070, 309, 1369, # 3286 + 1130, 2812, 364, 2230, 1653, 1299, 3881, 3512, 3882, 3883, 2646, 525, 1085, 3021, 902, 2000, # 3302 + 1475, 964, 4313, 421, 1844, 1415, 1057, 2281, 940, 1364, 3116, 376, 4314, 4315, 1381, 7, # 3318 + 2520, 983, 2378, 336, 1710, 2675, 1845, 321, 3414, 559, 1131, 3022, 2742, 1808, 1132, 1313, # 3334 + 265, 1481, 1857, 7352, 352, 1203, 2813, 3247, 167, 1089, 420, 2814, 776, 792, 1724, 3513, # 3350 + 4071, 2438, 3248, 7353, 4072, 7354, 446, 229, 333, 2743, 901, 3739, 1200, 1557, 4316, 2647, # 3366 + 1920, 395, 2744, 2676, 3740, 4073, 1835, 125, 916, 3178, 2616, 4317, 7355, 7356, 3741, 7357, # 3382 + 7358, 7359, 4318, 3117, 3625, 1133, 2547, 1757, 3415, 1510, 2313, 1409, 3514, 7360, 2145, 438, # 3398 + 2591, 2896, 2379, 3317, 1068, 958, 3023, 461, 311, 2855, 2677, 4074, 1915, 3179, 4075, 1978, # 3414 + 383, 750, 2745, 2617, 4076, 274, 539, 385, 1278, 1442, 7361, 1154, 1964, 384, 561, 210, # 3430 + 98, 1295, 2548, 3515, 7362, 1711, 2415, 1482, 3416, 3884, 2897, 1257, 129, 7363, 3742, 642, # 3446 + 523, 2776, 2777, 2648, 7364, 141, 2231, 1333, 68, 176, 441, 876, 907, 4077, 603, 2592, # 3462 + 710, 171, 3417, 404, 549, 18, 3118, 2393, 1410, 3626, 1666, 7365, 3516, 4319, 2898, 4320, # 3478 + 7366, 2973, 368, 7367, 146, 366, 99, 871, 3627, 1543, 748, 807, 1586, 1185, 22, 2258, # 3494 + 379, 3743, 3180, 7368, 3181, 505, 1941, 2618, 1991, 1382, 2314, 7369, 380, 2357, 218, 702, # 3510 + 1817, 1248, 3418, 3024, 3517, 3318, 3249, 7370, 2974, 3628, 930, 3250, 3744, 7371, 59, 7372, # 3526 + 585, 601, 4078, 497, 3419, 1112, 1314, 4321, 1801, 7373, 1223, 1472, 2174, 7374, 749, 1836, # 3542 + 690, 1899, 3745, 1772, 3885, 1476, 429, 1043, 1790, 2232, 2116, 917, 4079, 447, 1086, 1629, # 3558 + 7375, 556, 7376, 7377, 2020, 1654, 844, 1090, 105, 550, 966, 1758, 2815, 1008, 1782, 686, # 3574 + 1095, 7378, 2282, 793, 1602, 7379, 3518, 2593, 4322, 4080, 2933, 2297, 4323, 3746, 980, 2496, # 3590 + 544, 353, 527, 4324, 908, 2678, 2899, 7380, 381, 2619, 1942, 1348, 7381, 1341, 1252, 560, # 3606 + 3072, 7382, 3420, 2856, 7383, 2053, 973, 886, 2080, 143, 4325, 7384, 7385, 157, 3886, 496, # 3622 + 4081, 57, 840, 540, 2038, 4326, 4327, 3421, 2117, 1445, 970, 2259, 1748, 1965, 2081, 4082, # 3638 + 3119, 1234, 1775, 3251, 2816, 3629, 773, 1206, 2129, 1066, 2039, 1326, 3887, 1738, 1725, 4083, # 3654 + 279, 3120, 51, 1544, 2594, 423, 1578, 2130, 2066, 173, 4328, 1879, 7386, 7387, 1583, 264, # 3670 + 610, 3630, 4329, 2439, 280, 154, 7388, 7389, 7390, 1739, 338, 1282, 3073, 693, 2857, 1411, # 3686 + 1074, 3747, 2440, 7391, 4330, 7392, 7393, 1240, 952, 2394, 7394, 2900, 1538, 2679, 685, 1483, # 3702 + 4084, 2468, 1436, 953, 4085, 2054, 4331, 671, 2395, 79, 4086, 2441, 3252, 608, 567, 2680, # 3718 + 3422, 4087, 4088, 1691, 393, 1261, 1791, 2396, 7395, 4332, 7396, 7397, 7398, 7399, 1383, 1672, # 3734 + 3748, 3182, 1464, 522, 1119, 661, 1150, 216, 675, 4333, 3888, 1432, 3519, 609, 4334, 2681, # 3750 + 2397, 7400, 7401, 7402, 4089, 3025, 0, 7403, 2469, 315, 231, 2442, 301, 3319, 4335, 2380, # 3766 + 7404, 233, 4090, 3631, 1818, 4336, 4337, 7405, 96, 1776, 1315, 2082, 7406, 257, 7407, 1809, # 3782 + 3632, 2709, 1139, 1819, 4091, 2021, 1124, 2163, 2778, 1777, 2649, 7408, 3074, 363, 1655, 3183, # 3798 + 7409, 2975, 7410, 7411, 7412, 3889, 1567, 3890, 718, 103, 3184, 849, 1443, 341, 3320, 2934, # 3814 + 1484, 7413, 1712, 127, 67, 339, 4092, 2398, 679, 1412, 821, 7414, 7415, 834, 738, 351, # 3830 + 2976, 2146, 846, 235, 1497, 1880, 418, 1992, 3749, 2710, 186, 1100, 2147, 2746, 3520, 1545, # 3846 + 1355, 2935, 2858, 1377, 583, 3891, 4093, 2573, 2977, 7416, 1298, 3633, 1078, 2549, 3634, 2358, # 3862 + 78, 3750, 3751, 267, 1289, 2099, 2001, 1594, 4094, 348, 369, 1274, 2194, 2175, 1837, 4338, # 3878 + 1820, 2817, 3635, 2747, 2283, 2002, 4339, 2936, 2748, 144, 3321, 882, 4340, 3892, 2749, 3423, # 3894 + 4341, 2901, 7417, 4095, 1726, 320, 7418, 3893, 3026, 788, 2978, 7419, 2818, 1773, 1327, 2859, # 3910 + 3894, 2819, 7420, 1306, 4342, 2003, 1700, 3752, 3521, 2359, 2650, 787, 2022, 506, 824, 3636, # 3926 + 534, 323, 4343, 1044, 3322, 2023, 1900, 946, 3424, 7421, 1778, 1500, 1678, 7422, 1881, 4344, # 3942 + 165, 243, 4345, 3637, 2521, 123, 683, 4096, 764, 4346, 36, 3895, 1792, 589, 2902, 816, # 3958 + 626, 1667, 3027, 2233, 1639, 1555, 1622, 3753, 3896, 7423, 3897, 2860, 1370, 1228, 1932, 891, # 3974 + 2083, 2903, 304, 4097, 7424, 292, 2979, 2711, 3522, 691, 2100, 4098, 1115, 4347, 118, 662, # 3990 + 7425, 611, 1156, 854, 2381, 1316, 2861, 2, 386, 515, 2904, 7426, 7427, 3253, 868, 2234, # 4006 + 1486, 855, 2651, 785, 2212, 3028, 7428, 1040, 3185, 3523, 7429, 3121, 448, 7430, 1525, 7431, # 4022 + 2164, 4348, 7432, 3754, 7433, 4099, 2820, 3524, 3122, 503, 818, 3898, 3123, 1568, 814, 676, # 4038 + 1444, 306, 1749, 7434, 3755, 1416, 1030, 197, 1428, 805, 2821, 1501, 4349, 7435, 7436, 7437, # 4054 + 1993, 7438, 4350, 7439, 7440, 2195, 13, 2779, 3638, 2980, 3124, 1229, 1916, 7441, 3756, 2131, # 4070 + 7442, 4100, 4351, 2399, 3525, 7443, 2213, 1511, 1727, 1120, 7444, 7445, 646, 3757, 2443, 307, # 4086 + 7446, 7447, 1595, 3186, 7448, 7449, 7450, 3639, 1113, 1356, 3899, 1465, 2522, 2523, 7451, 519, # 4102 + 7452, 128, 2132, 92, 2284, 1979, 7453, 3900, 1512, 342, 3125, 2196, 7454, 2780, 2214, 1980, # 4118 + 3323, 7455, 290, 1656, 1317, 789, 827, 2360, 7456, 3758, 4352, 562, 581, 3901, 7457, 401, # 4134 + 4353, 2248, 94, 4354, 1399, 2781, 7458, 1463, 2024, 4355, 3187, 1943, 7459, 828, 1105, 4101, # 4150 + 1262, 1394, 7460, 4102, 605, 4356, 7461, 1783, 2862, 7462, 2822, 819, 2101, 578, 2197, 2937, # 4166 + 7463, 1502, 436, 3254, 4103, 3255, 2823, 3902, 2905, 3425, 3426, 7464, 2712, 2315, 7465, 7466, # 4182 + 2332, 2067, 23, 4357, 193, 826, 3759, 2102, 699, 1630, 4104, 3075, 390, 1793, 1064, 3526, # 4198 + 7467, 1579, 3076, 3077, 1400, 7468, 4105, 1838, 1640, 2863, 7469, 4358, 4359, 137, 4106, 598, # 4214 + 3078, 1966, 780, 104, 974, 2938, 7470, 278, 899, 253, 402, 572, 504, 493, 1339, 7471, # 4230 + 3903, 1275, 4360, 2574, 2550, 7472, 3640, 3029, 3079, 2249, 565, 1334, 2713, 863, 41, 7473, # 4246 + 7474, 4361, 7475, 1657, 2333, 19, 463, 2750, 4107, 606, 7476, 2981, 3256, 1087, 2084, 1323, # 4262 + 2652, 2982, 7477, 1631, 1623, 1750, 4108, 2682, 7478, 2864, 791, 2714, 2653, 2334, 232, 2416, # 4278 + 7479, 2983, 1498, 7480, 2654, 2620, 755, 1366, 3641, 3257, 3126, 2025, 1609, 119, 1917, 3427, # 4294 + 862, 1026, 4109, 7481, 3904, 3760, 4362, 3905, 4363, 2260, 1951, 2470, 7482, 1125, 817, 4110, # 4310 + 4111, 3906, 1513, 1766, 2040, 1487, 4112, 3030, 3258, 2824, 3761, 3127, 7483, 7484, 1507, 7485, # 4326 + 2683, 733, 40, 1632, 1106, 2865, 345, 4113, 841, 2524, 230, 4364, 2984, 1846, 3259, 3428, # 4342 + 7486, 1263, 986, 3429, 7487, 735, 879, 254, 1137, 857, 622, 1300, 1180, 1388, 1562, 3907, # 4358 + 3908, 2939, 967, 2751, 2655, 1349, 592, 2133, 1692, 3324, 2985, 1994, 4114, 1679, 3909, 1901, # 4374 + 2185, 7488, 739, 3642, 2715, 1296, 1290, 7489, 4115, 2198, 2199, 1921, 1563, 2595, 2551, 1870, # 4390 + 2752, 2986, 7490, 435, 7491, 343, 1108, 596, 17, 1751, 4365, 2235, 3430, 3643, 7492, 4366, # 4406 + 294, 3527, 2940, 1693, 477, 979, 281, 2041, 3528, 643, 2042, 3644, 2621, 2782, 2261, 1031, # 4422 + 2335, 2134, 2298, 3529, 4367, 367, 1249, 2552, 7493, 3530, 7494, 4368, 1283, 3325, 2004, 240, # 4438 + 1762, 3326, 4369, 4370, 836, 1069, 3128, 474, 7495, 2148, 2525, 268, 3531, 7496, 3188, 1521, # 4454 + 1284, 7497, 1658, 1546, 4116, 7498, 3532, 3533, 7499, 4117, 3327, 2684, 1685, 4118, 961, 1673, # 4470 + 2622, 190, 2005, 2200, 3762, 4371, 4372, 7500, 570, 2497, 3645, 1490, 7501, 4373, 2623, 3260, # 4486 + 1956, 4374, 584, 1514, 396, 1045, 1944, 7502, 4375, 1967, 2444, 7503, 7504, 4376, 3910, 619, # 4502 + 7505, 3129, 3261, 215, 2006, 2783, 2553, 3189, 4377, 3190, 4378, 763, 4119, 3763, 4379, 7506, # 4518 + 7507, 1957, 1767, 2941, 3328, 3646, 1174, 452, 1477, 4380, 3329, 3130, 7508, 2825, 1253, 2382, # 4534 + 2186, 1091, 2285, 4120, 492, 7509, 638, 1169, 1824, 2135, 1752, 3911, 648, 926, 1021, 1324, # 4550 + 4381, 520, 4382, 997, 847, 1007, 892, 4383, 3764, 2262, 1871, 3647, 7510, 2400, 1784, 4384, # 4566 + 1952, 2942, 3080, 3191, 1728, 4121, 2043, 3648, 4385, 2007, 1701, 3131, 1551, 30, 2263, 4122, # 4582 + 7511, 2026, 4386, 3534, 7512, 501, 7513, 4123, 594, 3431, 2165, 1821, 3535, 3432, 3536, 3192, # 4598 + 829, 2826, 4124, 7514, 1680, 3132, 1225, 4125, 7515, 3262, 4387, 4126, 3133, 2336, 7516, 4388, # 4614 + 4127, 7517, 3912, 3913, 7518, 1847, 2383, 2596, 3330, 7519, 4389, 374, 3914, 652, 4128, 4129, # 4630 + 375, 1140, 798, 7520, 7521, 7522, 2361, 4390, 2264, 546, 1659, 138, 3031, 2445, 4391, 7523, # 4646 + 2250, 612, 1848, 910, 796, 3765, 1740, 1371, 825, 3766, 3767, 7524, 2906, 2554, 7525, 692, # 4662 + 444, 3032, 2624, 801, 4392, 4130, 7526, 1491, 244, 1053, 3033, 4131, 4132, 340, 7527, 3915, # 4678 + 1041, 2987, 293, 1168, 87, 1357, 7528, 1539, 959, 7529, 2236, 721, 694, 4133, 3768, 219, # 4694 + 1478, 644, 1417, 3331, 2656, 1413, 1401, 1335, 1389, 3916, 7530, 7531, 2988, 2362, 3134, 1825, # 4710 + 730, 1515, 184, 2827, 66, 4393, 7532, 1660, 2943, 246, 3332, 378, 1457, 226, 3433, 975, # 4726 + 3917, 2944, 1264, 3537, 674, 696, 7533, 163, 7534, 1141, 2417, 2166, 713, 3538, 3333, 4394, # 4742 + 3918, 7535, 7536, 1186, 15, 7537, 1079, 1070, 7538, 1522, 3193, 3539, 276, 1050, 2716, 758, # 4758 + 1126, 653, 2945, 3263, 7539, 2337, 889, 3540, 3919, 3081, 2989, 903, 1250, 4395, 3920, 3434, # 4774 + 3541, 1342, 1681, 1718, 766, 3264, 286, 89, 2946, 3649, 7540, 1713, 7541, 2597, 3334, 2990, # 4790 + 7542, 2947, 2215, 3194, 2866, 7543, 4396, 2498, 2526, 181, 387, 1075, 3921, 731, 2187, 3335, # 4806 + 7544, 3265, 310, 313, 3435, 2299, 770, 4134, 54, 3034, 189, 4397, 3082, 3769, 3922, 7545, # 4822 + 1230, 1617, 1849, 355, 3542, 4135, 4398, 3336, 111, 4136, 3650, 1350, 3135, 3436, 3035, 4137, # 4838 + 2149, 3266, 3543, 7546, 2784, 3923, 3924, 2991, 722, 2008, 7547, 1071, 247, 1207, 2338, 2471, # 4854 + 1378, 4399, 2009, 864, 1437, 1214, 4400, 373, 3770, 1142, 2216, 667, 4401, 442, 2753, 2555, # 4870 + 3771, 3925, 1968, 4138, 3267, 1839, 837, 170, 1107, 934, 1336, 1882, 7548, 7549, 2118, 4139, # 4886 + 2828, 743, 1569, 7550, 4402, 4140, 582, 2384, 1418, 3437, 7551, 1802, 7552, 357, 1395, 1729, # 4902 + 3651, 3268, 2418, 1564, 2237, 7553, 3083, 3772, 1633, 4403, 1114, 2085, 4141, 1532, 7554, 482, # 4918 + 2446, 4404, 7555, 7556, 1492, 833, 1466, 7557, 2717, 3544, 1641, 2829, 7558, 1526, 1272, 3652, # 4934 + 4142, 1686, 1794, 416, 2556, 1902, 1953, 1803, 7559, 3773, 2785, 3774, 1159, 2316, 7560, 2867, # 4950 + 4405, 1610, 1584, 3036, 2419, 2754, 443, 3269, 1163, 3136, 7561, 7562, 3926, 7563, 4143, 2499, # 4966 + 3037, 4406, 3927, 3137, 2103, 1647, 3545, 2010, 1872, 4144, 7564, 4145, 431, 3438, 7565, 250, # 4982 + 97, 81, 4146, 7566, 1648, 1850, 1558, 160, 848, 7567, 866, 740, 1694, 7568, 2201, 2830, # 4998 + 3195, 4147, 4407, 3653, 1687, 950, 2472, 426, 469, 3196, 3654, 3655, 3928, 7569, 7570, 1188, # 5014 + 424, 1995, 861, 3546, 4148, 3775, 2202, 2685, 168, 1235, 3547, 4149, 7571, 2086, 1674, 4408, # 5030 + 3337, 3270, 220, 2557, 1009, 7572, 3776, 670, 2992, 332, 1208, 717, 7573, 7574, 3548, 2447, # 5046 + 3929, 3338, 7575, 513, 7576, 1209, 2868, 3339, 3138, 4409, 1080, 7577, 7578, 7579, 7580, 2527, # 5062 + 3656, 3549, 815, 1587, 3930, 3931, 7581, 3550, 3439, 3777, 1254, 4410, 1328, 3038, 1390, 3932, # 5078 + 1741, 3933, 3778, 3934, 7582, 236, 3779, 2448, 3271, 7583, 7584, 3657, 3780, 1273, 3781, 4411, # 5094 + 7585, 308, 7586, 4412, 245, 4413, 1851, 2473, 1307, 2575, 430, 715, 2136, 2449, 7587, 270, # 5110 + 199, 2869, 3935, 7588, 3551, 2718, 1753, 761, 1754, 725, 1661, 1840, 4414, 3440, 3658, 7589, # 5126 + 7590, 587, 14, 3272, 227, 2598, 326, 480, 2265, 943, 2755, 3552, 291, 650, 1883, 7591, # 5142 + 1702, 1226, 102, 1547, 62, 3441, 904, 4415, 3442, 1164, 4150, 7592, 7593, 1224, 1548, 2756, # 5158 + 391, 498, 1493, 7594, 1386, 1419, 7595, 2055, 1177, 4416, 813, 880, 1081, 2363, 566, 1145, # 5174 + 4417, 2286, 1001, 1035, 2558, 2599, 2238, 394, 1286, 7596, 7597, 2068, 7598, 86, 1494, 1730, # 5190 + 3936, 491, 1588, 745, 897, 2948, 843, 3340, 3937, 2757, 2870, 3273, 1768, 998, 2217, 2069, # 5206 + 397, 1826, 1195, 1969, 3659, 2993, 3341, 284, 7599, 3782, 2500, 2137, 2119, 1903, 7600, 3938, # 5222 + 2150, 3939, 4151, 1036, 3443, 1904, 114, 2559, 4152, 209, 1527, 7601, 7602, 2949, 2831, 2625, # 5238 + 2385, 2719, 3139, 812, 2560, 7603, 3274, 7604, 1559, 737, 1884, 3660, 1210, 885, 28, 2686, # 5254 + 3553, 3783, 7605, 4153, 1004, 1779, 4418, 7606, 346, 1981, 2218, 2687, 4419, 3784, 1742, 797, # 5270 + 1642, 3940, 1933, 1072, 1384, 2151, 896, 3941, 3275, 3661, 3197, 2871, 3554, 7607, 2561, 1958, # 5286 + 4420, 2450, 1785, 7608, 7609, 7610, 3942, 4154, 1005, 1308, 3662, 4155, 2720, 4421, 4422, 1528, # 5302 + 2600, 161, 1178, 4156, 1982, 987, 4423, 1101, 4157, 631, 3943, 1157, 3198, 2420, 1343, 1241, # 5318 + 1016, 2239, 2562, 372, 877, 2339, 2501, 1160, 555, 1934, 911, 3944, 7611, 466, 1170, 169, # 5334 + 1051, 2907, 2688, 3663, 2474, 2994, 1182, 2011, 2563, 1251, 2626, 7612, 992, 2340, 3444, 1540, # 5350 + 2721, 1201, 2070, 2401, 1996, 2475, 7613, 4424, 528, 1922, 2188, 1503, 1873, 1570, 2364, 3342, # 5366 + 3276, 7614, 557, 1073, 7615, 1827, 3445, 2087, 2266, 3140, 3039, 3084, 767, 3085, 2786, 4425, # 5382 + 1006, 4158, 4426, 2341, 1267, 2176, 3664, 3199, 778, 3945, 3200, 2722, 1597, 2657, 7616, 4427, # 5398 + 7617, 3446, 7618, 7619, 7620, 3277, 2689, 1433, 3278, 131, 95, 1504, 3946, 723, 4159, 3141, # 5414 + 1841, 3555, 2758, 2189, 3947, 2027, 2104, 3665, 7621, 2995, 3948, 1218, 7622, 3343, 3201, 3949, # 5430 + 4160, 2576, 248, 1634, 3785, 912, 7623, 2832, 3666, 3040, 3786, 654, 53, 7624, 2996, 7625, # 5446 + 1688, 4428, 777, 3447, 1032, 3950, 1425, 7626, 191, 820, 2120, 2833, 971, 4429, 931, 3202, # 5462 + 135, 664, 783, 3787, 1997, 772, 2908, 1935, 3951, 3788, 4430, 2909, 3203, 282, 2723, 640, # 5478 + 1372, 3448, 1127, 922, 325, 3344, 7627, 7628, 711, 2044, 7629, 7630, 3952, 2219, 2787, 1936, # 5494 + 3953, 3345, 2220, 2251, 3789, 2300, 7631, 4431, 3790, 1258, 3279, 3954, 3204, 2138, 2950, 3955, # 5510 + 3956, 7632, 2221, 258, 3205, 4432, 101, 1227, 7633, 3280, 1755, 7634, 1391, 3281, 7635, 2910, # 5526 + 2056, 893, 7636, 7637, 7638, 1402, 4161, 2342, 7639, 7640, 3206, 3556, 7641, 7642, 878, 1325, # 5542 + 1780, 2788, 4433, 259, 1385, 2577, 744, 1183, 2267, 4434, 7643, 3957, 2502, 7644, 684, 1024, # 5558 + 4162, 7645, 472, 3557, 3449, 1165, 3282, 3958, 3959, 322, 2152, 881, 455, 1695, 1152, 1340, # 5574 + 660, 554, 2153, 4435, 1058, 4436, 4163, 830, 1065, 3346, 3960, 4437, 1923, 7646, 1703, 1918, # 5590 + 7647, 932, 2268, 122, 7648, 4438, 947, 677, 7649, 3791, 2627, 297, 1905, 1924, 2269, 4439, # 5606 + 2317, 3283, 7650, 7651, 4164, 7652, 4165, 84, 4166, 112, 989, 7653, 547, 1059, 3961, 701, # 5622 + 3558, 1019, 7654, 4167, 7655, 3450, 942, 639, 457, 2301, 2451, 993, 2951, 407, 851, 494, # 5638 + 4440, 3347, 927, 7656, 1237, 7657, 2421, 3348, 573, 4168, 680, 921, 2911, 1279, 1874, 285, # 5654 + 790, 1448, 1983, 719, 2167, 7658, 7659, 4441, 3962, 3963, 1649, 7660, 1541, 563, 7661, 1077, # 5670 + 7662, 3349, 3041, 3451, 511, 2997, 3964, 3965, 3667, 3966, 1268, 2564, 3350, 3207, 4442, 4443, # 5686 + 7663, 535, 1048, 1276, 1189, 2912, 2028, 3142, 1438, 1373, 2834, 2952, 1134, 2012, 7664, 4169, # 5702 + 1238, 2578, 3086, 1259, 7665, 700, 7666, 2953, 3143, 3668, 4170, 7667, 4171, 1146, 1875, 1906, # 5718 + 4444, 2601, 3967, 781, 2422, 132, 1589, 203, 147, 273, 2789, 2402, 898, 1786, 2154, 3968, # 5734 + 3969, 7668, 3792, 2790, 7669, 7670, 4445, 4446, 7671, 3208, 7672, 1635, 3793, 965, 7673, 1804, # 5750 + 2690, 1516, 3559, 1121, 1082, 1329, 3284, 3970, 1449, 3794, 65, 1128, 2835, 2913, 2759, 1590, # 5766 + 3795, 7674, 7675, 12, 2658, 45, 976, 2579, 3144, 4447, 517, 2528, 1013, 1037, 3209, 7676, # 5782 + 3796, 2836, 7677, 3797, 7678, 3452, 7679, 2602, 614, 1998, 2318, 3798, 3087, 2724, 2628, 7680, # 5798 + 2580, 4172, 599, 1269, 7681, 1810, 3669, 7682, 2691, 3088, 759, 1060, 489, 1805, 3351, 3285, # 5814 + 1358, 7683, 7684, 2386, 1387, 1215, 2629, 2252, 490, 7685, 7686, 4173, 1759, 2387, 2343, 7687, # 5830 + 4448, 3799, 1907, 3971, 2630, 1806, 3210, 4449, 3453, 3286, 2760, 2344, 874, 7688, 7689, 3454, # 5846 + 3670, 1858, 91, 2914, 3671, 3042, 3800, 4450, 7690, 3145, 3972, 2659, 7691, 3455, 1202, 1403, # 5862 + 3801, 2954, 2529, 1517, 2503, 4451, 3456, 2504, 7692, 4452, 7693, 2692, 1885, 1495, 1731, 3973, # 5878 + 2365, 4453, 7694, 2029, 7695, 7696, 3974, 2693, 1216, 237, 2581, 4174, 2319, 3975, 3802, 4454, # 5894 + 4455, 2694, 3560, 3457, 445, 4456, 7697, 7698, 7699, 7700, 2761, 61, 3976, 3672, 1822, 3977, # 5910 + 7701, 687, 2045, 935, 925, 405, 2660, 703, 1096, 1859, 2725, 4457, 3978, 1876, 1367, 2695, # 5926 + 3352, 918, 2105, 1781, 2476, 334, 3287, 1611, 1093, 4458, 564, 3146, 3458, 3673, 3353, 945, # 5942 + 2631, 2057, 4459, 7702, 1925, 872, 4175, 7703, 3459, 2696, 3089, 349, 4176, 3674, 3979, 4460, # 5958 + 3803, 4177, 3675, 2155, 3980, 4461, 4462, 4178, 4463, 2403, 2046, 782, 3981, 400, 251, 4179, # 5974 + 1624, 7704, 7705, 277, 3676, 299, 1265, 476, 1191, 3804, 2121, 4180, 4181, 1109, 205, 7706, # 5990 + 2582, 1000, 2156, 3561, 1860, 7707, 7708, 7709, 4464, 7710, 4465, 2565, 107, 2477, 2157, 3982, # 6006 + 3460, 3147, 7711, 1533, 541, 1301, 158, 753, 4182, 2872, 3562, 7712, 1696, 370, 1088, 4183, # 6022 + 4466, 3563, 579, 327, 440, 162, 2240, 269, 1937, 1374, 3461, 968, 3043, 56, 1396, 3090, # 6038 + 2106, 3288, 3354, 7713, 1926, 2158, 4467, 2998, 7714, 3564, 7715, 7716, 3677, 4468, 2478, 7717, # 6054 + 2791, 7718, 1650, 4469, 7719, 2603, 7720, 7721, 3983, 2661, 3355, 1149, 3356, 3984, 3805, 3985, # 6070 + 7722, 1076, 49, 7723, 951, 3211, 3289, 3290, 450, 2837, 920, 7724, 1811, 2792, 2366, 4184, # 6086 + 1908, 1138, 2367, 3806, 3462, 7725, 3212, 4470, 1909, 1147, 1518, 2423, 4471, 3807, 7726, 4472, # 6102 + 2388, 2604, 260, 1795, 3213, 7727, 7728, 3808, 3291, 708, 7729, 3565, 1704, 7730, 3566, 1351, # 6118 + 1618, 3357, 2999, 1886, 944, 4185, 3358, 4186, 3044, 3359, 4187, 7731, 3678, 422, 413, 1714, # 6134 + 3292, 500, 2058, 2345, 4188, 2479, 7732, 1344, 1910, 954, 7733, 1668, 7734, 7735, 3986, 2404, # 6150 + 4189, 3567, 3809, 4190, 7736, 2302, 1318, 2505, 3091, 133, 3092, 2873, 4473, 629, 31, 2838, # 6166 + 2697, 3810, 4474, 850, 949, 4475, 3987, 2955, 1732, 2088, 4191, 1496, 1852, 7737, 3988, 620, # 6182 + 3214, 981, 1242, 3679, 3360, 1619, 3680, 1643, 3293, 2139, 2452, 1970, 1719, 3463, 2168, 7738, # 6198 + 3215, 7739, 7740, 3361, 1828, 7741, 1277, 4476, 1565, 2047, 7742, 1636, 3568, 3093, 7743, 869, # 6214 + 2839, 655, 3811, 3812, 3094, 3989, 3000, 3813, 1310, 3569, 4477, 7744, 7745, 7746, 1733, 558, # 6230 + 4478, 3681, 335, 1549, 3045, 1756, 4192, 3682, 1945, 3464, 1829, 1291, 1192, 470, 2726, 2107, # 6246 + 2793, 913, 1054, 3990, 7747, 1027, 7748, 3046, 3991, 4479, 982, 2662, 3362, 3148, 3465, 3216, # 6262 + 3217, 1946, 2794, 7749, 571, 4480, 7750, 1830, 7751, 3570, 2583, 1523, 2424, 7752, 2089, 984, # 6278 + 4481, 3683, 1959, 7753, 3684, 852, 923, 2795, 3466, 3685, 969, 1519, 999, 2048, 2320, 1705, # 6294 + 7754, 3095, 615, 1662, 151, 597, 3992, 2405, 2321, 1049, 275, 4482, 3686, 4193, 568, 3687, # 6310 + 3571, 2480, 4194, 3688, 7755, 2425, 2270, 409, 3218, 7756, 1566, 2874, 3467, 1002, 769, 2840, # 6326 + 194, 2090, 3149, 3689, 2222, 3294, 4195, 628, 1505, 7757, 7758, 1763, 2177, 3001, 3993, 521, # 6342 + 1161, 2584, 1787, 2203, 2406, 4483, 3994, 1625, 4196, 4197, 412, 42, 3096, 464, 7759, 2632, # 6358 + 4484, 3363, 1760, 1571, 2875, 3468, 2530, 1219, 2204, 3814, 2633, 2140, 2368, 4485, 4486, 3295, # 6374 + 1651, 3364, 3572, 7760, 7761, 3573, 2481, 3469, 7762, 3690, 7763, 7764, 2271, 2091, 460, 7765, # 6390 + 4487, 7766, 3002, 962, 588, 3574, 289, 3219, 2634, 1116, 52, 7767, 3047, 1796, 7768, 7769, # 6406 + 7770, 1467, 7771, 1598, 1143, 3691, 4198, 1984, 1734, 1067, 4488, 1280, 3365, 465, 4489, 1572, # 6422 + 510, 7772, 1927, 2241, 1812, 1644, 3575, 7773, 4490, 3692, 7774, 7775, 2663, 1573, 1534, 7776, # 6438 + 7777, 4199, 536, 1807, 1761, 3470, 3815, 3150, 2635, 7778, 7779, 7780, 4491, 3471, 2915, 1911, # 6454 + 2796, 7781, 3296, 1122, 377, 3220, 7782, 360, 7783, 7784, 4200, 1529, 551, 7785, 2059, 3693, # 6470 + 1769, 2426, 7786, 2916, 4201, 3297, 3097, 2322, 2108, 2030, 4492, 1404, 136, 1468, 1479, 672, # 6486 + 1171, 3221, 2303, 271, 3151, 7787, 2762, 7788, 2049, 678, 2727, 865, 1947, 4493, 7789, 2013, # 6502 + 3995, 2956, 7790, 2728, 2223, 1397, 3048, 3694, 4494, 4495, 1735, 2917, 3366, 3576, 7791, 3816, # 6518 + 509, 2841, 2453, 2876, 3817, 7792, 7793, 3152, 3153, 4496, 4202, 2531, 4497, 2304, 1166, 1010, # 6534 + 552, 681, 1887, 7794, 7795, 2957, 2958, 3996, 1287, 1596, 1861, 3154, 358, 453, 736, 175, # 6550 + 478, 1117, 905, 1167, 1097, 7796, 1853, 1530, 7797, 1706, 7798, 2178, 3472, 2287, 3695, 3473, # 6566 + 3577, 4203, 2092, 4204, 7799, 3367, 1193, 2482, 4205, 1458, 2190, 2205, 1862, 1888, 1421, 3298, # 6582 + 2918, 3049, 2179, 3474, 595, 2122, 7800, 3997, 7801, 7802, 4206, 1707, 2636, 223, 3696, 1359, # 6598 + 751, 3098, 183, 3475, 7803, 2797, 3003, 419, 2369, 633, 704, 3818, 2389, 241, 7804, 7805, # 6614 + 7806, 838, 3004, 3697, 2272, 2763, 2454, 3819, 1938, 2050, 3998, 1309, 3099, 2242, 1181, 7807, # 6630 + 1136, 2206, 3820, 2370, 1446, 4207, 2305, 4498, 7808, 7809, 4208, 1055, 2605, 484, 3698, 7810, # 6646 + 3999, 625, 4209, 2273, 3368, 1499, 4210, 4000, 7811, 4001, 4211, 3222, 2274, 2275, 3476, 7812, # 6662 + 7813, 2764, 808, 2606, 3699, 3369, 4002, 4212, 3100, 2532, 526, 3370, 3821, 4213, 955, 7814, # 6678 + 1620, 4214, 2637, 2427, 7815, 1429, 3700, 1669, 1831, 994, 928, 7816, 3578, 1260, 7817, 7818, # 6694 + 7819, 1948, 2288, 741, 2919, 1626, 4215, 2729, 2455, 867, 1184, 362, 3371, 1392, 7820, 7821, # 6710 + 4003, 4216, 1770, 1736, 3223, 2920, 4499, 4500, 1928, 2698, 1459, 1158, 7822, 3050, 3372, 2877, # 6726 + 1292, 1929, 2506, 2842, 3701, 1985, 1187, 2071, 2014, 2607, 4217, 7823, 2566, 2507, 2169, 3702, # 6742 + 2483, 3299, 7824, 3703, 4501, 7825, 7826, 666, 1003, 3005, 1022, 3579, 4218, 7827, 4502, 1813, # 6758 + 2253, 574, 3822, 1603, 295, 1535, 705, 3823, 4219, 283, 858, 417, 7828, 7829, 3224, 4503, # 6774 + 4504, 3051, 1220, 1889, 1046, 2276, 2456, 4004, 1393, 1599, 689, 2567, 388, 4220, 7830, 2484, # 6790 + 802, 7831, 2798, 3824, 2060, 1405, 2254, 7832, 4505, 3825, 2109, 1052, 1345, 3225, 1585, 7833, # 6806 + 809, 7834, 7835, 7836, 575, 2730, 3477, 956, 1552, 1469, 1144, 2323, 7837, 2324, 1560, 2457, # 6822 + 3580, 3226, 4005, 616, 2207, 3155, 2180, 2289, 7838, 1832, 7839, 3478, 4506, 7840, 1319, 3704, # 6838 + 3705, 1211, 3581, 1023, 3227, 1293, 2799, 7841, 7842, 7843, 3826, 607, 2306, 3827, 762, 2878, # 6854 + 1439, 4221, 1360, 7844, 1485, 3052, 7845, 4507, 1038, 4222, 1450, 2061, 2638, 4223, 1379, 4508, # 6870 + 2585, 7846, 7847, 4224, 1352, 1414, 2325, 2921, 1172, 7848, 7849, 3828, 3829, 7850, 1797, 1451, # 6886 + 7851, 7852, 7853, 7854, 2922, 4006, 4007, 2485, 2346, 411, 4008, 4009, 3582, 3300, 3101, 4509, # 6902 + 1561, 2664, 1452, 4010, 1375, 7855, 7856, 47, 2959, 316, 7857, 1406, 1591, 2923, 3156, 7858, # 6918 + 1025, 2141, 3102, 3157, 354, 2731, 884, 2224, 4225, 2407, 508, 3706, 726, 3583, 996, 2428, # 6934 + 3584, 729, 7859, 392, 2191, 1453, 4011, 4510, 3707, 7860, 7861, 2458, 3585, 2608, 1675, 2800, # 6950 + 919, 2347, 2960, 2348, 1270, 4511, 4012, 73, 7862, 7863, 647, 7864, 3228, 2843, 2255, 1550, # 6966 + 1346, 3006, 7865, 1332, 883, 3479, 7866, 7867, 7868, 7869, 3301, 2765, 7870, 1212, 831, 1347, # 6982 + 4226, 4512, 2326, 3830, 1863, 3053, 720, 3831, 4513, 4514, 3832, 7871, 4227, 7872, 7873, 4515, # 6998 + 7874, 7875, 1798, 4516, 3708, 2609, 4517, 3586, 1645, 2371, 7876, 7877, 2924, 669, 2208, 2665, # 7014 + 2429, 7878, 2879, 7879, 7880, 1028, 3229, 7881, 4228, 2408, 7882, 2256, 1353, 7883, 7884, 4518, # 7030 + 3158, 518, 7885, 4013, 7886, 4229, 1960, 7887, 2142, 4230, 7888, 7889, 3007, 2349, 2350, 3833, # 7046 + 516, 1833, 1454, 4014, 2699, 4231, 4519, 2225, 2610, 1971, 1129, 3587, 7890, 2766, 7891, 2961, # 7062 + 1422, 577, 1470, 3008, 1524, 3373, 7892, 7893, 432, 4232, 3054, 3480, 7894, 2586, 1455, 2508, # 7078 + 2226, 1972, 1175, 7895, 1020, 2732, 4015, 3481, 4520, 7896, 2733, 7897, 1743, 1361, 3055, 3482, # 7094 + 2639, 4016, 4233, 4521, 2290, 895, 924, 4234, 2170, 331, 2243, 3056, 166, 1627, 3057, 1098, # 7110 + 7898, 1232, 2880, 2227, 3374, 4522, 657, 403, 1196, 2372, 542, 3709, 3375, 1600, 4235, 3483, # 7126 + 7899, 4523, 2767, 3230, 576, 530, 1362, 7900, 4524, 2533, 2666, 3710, 4017, 7901, 842, 3834, # 7142 + 7902, 2801, 2031, 1014, 4018, 213, 2700, 3376, 665, 621, 4236, 7903, 3711, 2925, 2430, 7904, # 7158 + 2431, 3302, 3588, 3377, 7905, 4237, 2534, 4238, 4525, 3589, 1682, 4239, 3484, 1380, 7906, 724, # 7174 + 2277, 600, 1670, 7907, 1337, 1233, 4526, 3103, 2244, 7908, 1621, 4527, 7909, 651, 4240, 7910, # 7190 + 1612, 4241, 2611, 7911, 2844, 7912, 2734, 2307, 3058, 7913, 716, 2459, 3059, 174, 1255, 2701, # 7206 + 4019, 3590, 548, 1320, 1398, 728, 4020, 1574, 7914, 1890, 1197, 3060, 4021, 7915, 3061, 3062, # 7222 + 3712, 3591, 3713, 747, 7916, 635, 4242, 4528, 7917, 7918, 7919, 4243, 7920, 7921, 4529, 7922, # 7238 + 3378, 4530, 2432, 451, 7923, 3714, 2535, 2072, 4244, 2735, 4245, 4022, 7924, 1764, 4531, 7925, # 7254 + 4246, 350, 7926, 2278, 2390, 2486, 7927, 4247, 4023, 2245, 1434, 4024, 488, 4532, 458, 4248, # 7270 + 4025, 3715, 771, 1330, 2391, 3835, 2568, 3159, 2159, 2409, 1553, 2667, 3160, 4249, 7928, 2487, # 7286 + 2881, 2612, 1720, 2702, 4250, 3379, 4533, 7929, 2536, 4251, 7930, 3231, 4252, 2768, 7931, 2015, # 7302 + 2736, 7932, 1155, 1017, 3716, 3836, 7933, 3303, 2308, 201, 1864, 4253, 1430, 7934, 4026, 7935, # 7318 + 7936, 7937, 7938, 7939, 4254, 1604, 7940, 414, 1865, 371, 2587, 4534, 4535, 3485, 2016, 3104, # 7334 + 4536, 1708, 960, 4255, 887, 389, 2171, 1536, 1663, 1721, 7941, 2228, 4027, 2351, 2926, 1580, # 7350 + 7942, 7943, 7944, 1744, 7945, 2537, 4537, 4538, 7946, 4539, 7947, 2073, 7948, 7949, 3592, 3380, # 7366 + 2882, 4256, 7950, 4257, 2640, 3381, 2802, 673, 2703, 2460, 709, 3486, 4028, 3593, 4258, 7951, # 7382 + 1148, 502, 634, 7952, 7953, 1204, 4540, 3594, 1575, 4541, 2613, 3717, 7954, 3718, 3105, 948, # 7398 + 3232, 121, 1745, 3837, 1110, 7955, 4259, 3063, 2509, 3009, 4029, 3719, 1151, 1771, 3838, 1488, # 7414 + 4030, 1986, 7956, 2433, 3487, 7957, 7958, 2093, 7959, 4260, 3839, 1213, 1407, 2803, 531, 2737, # 7430 + 2538, 3233, 1011, 1537, 7960, 2769, 4261, 3106, 1061, 7961, 3720, 3721, 1866, 2883, 7962, 2017, # 7446 + 120, 4262, 4263, 2062, 3595, 3234, 2309, 3840, 2668, 3382, 1954, 4542, 7963, 7964, 3488, 1047, # 7462 + 2704, 1266, 7965, 1368, 4543, 2845, 649, 3383, 3841, 2539, 2738, 1102, 2846, 2669, 7966, 7967, # 7478 + 1999, 7968, 1111, 3596, 2962, 7969, 2488, 3842, 3597, 2804, 1854, 3384, 3722, 7970, 7971, 3385, # 7494 + 2410, 2884, 3304, 3235, 3598, 7972, 2569, 7973, 3599, 2805, 4031, 1460, 856, 7974, 3600, 7975, # 7510 + 2885, 2963, 7976, 2886, 3843, 7977, 4264, 632, 2510, 875, 3844, 1697, 3845, 2291, 7978, 7979, # 7526 + 4544, 3010, 1239, 580, 4545, 4265, 7980, 914, 936, 2074, 1190, 4032, 1039, 2123, 7981, 7982, # 7542 + 7983, 3386, 1473, 7984, 1354, 4266, 3846, 7985, 2172, 3064, 4033, 915, 3305, 4267, 4268, 3306, # 7558 + 1605, 1834, 7986, 2739, 398, 3601, 4269, 3847, 4034, 328, 1912, 2847, 4035, 3848, 1331, 4270, # 7574 + 3011, 937, 4271, 7987, 3602, 4036, 4037, 3387, 2160, 4546, 3388, 524, 742, 538, 3065, 1012, # 7590 + 7988, 7989, 3849, 2461, 7990, 658, 1103, 225, 3850, 7991, 7992, 4547, 7993, 4548, 7994, 3236, # 7606 + 1243, 7995, 4038, 963, 2246, 4549, 7996, 2705, 3603, 3161, 7997, 7998, 2588, 2327, 7999, 4550, # 7622 + 8000, 8001, 8002, 3489, 3307, 957, 3389, 2540, 2032, 1930, 2927, 2462, 870, 2018, 3604, 1746, # 7638 + 2770, 2771, 2434, 2463, 8003, 3851, 8004, 3723, 3107, 3724, 3490, 3390, 3725, 8005, 1179, 3066, # 7654 + 8006, 3162, 2373, 4272, 3726, 2541, 3163, 3108, 2740, 4039, 8007, 3391, 1556, 2542, 2292, 977, # 7670 + 2887, 2033, 4040, 1205, 3392, 8008, 1765, 3393, 3164, 2124, 1271, 1689, 714, 4551, 3491, 8009, # 7686 + 2328, 3852, 533, 4273, 3605, 2181, 617, 8010, 2464, 3308, 3492, 2310, 8011, 8012, 3165, 8013, # 7702 + 8014, 3853, 1987, 618, 427, 2641, 3493, 3394, 8015, 8016, 1244, 1690, 8017, 2806, 4274, 4552, # 7718 + 8018, 3494, 8019, 8020, 2279, 1576, 473, 3606, 4275, 3395, 972, 8021, 3607, 8022, 3067, 8023, # 7734 + 8024, 4553, 4554, 8025, 3727, 4041, 4042, 8026, 153, 4555, 356, 8027, 1891, 2888, 4276, 2143, # 7750 + 408, 803, 2352, 8028, 3854, 8029, 4277, 1646, 2570, 2511, 4556, 4557, 3855, 8030, 3856, 4278, # 7766 + 8031, 2411, 3396, 752, 8032, 8033, 1961, 2964, 8034, 746, 3012, 2465, 8035, 4279, 3728, 698, # 7782 + 4558, 1892, 4280, 3608, 2543, 4559, 3609, 3857, 8036, 3166, 3397, 8037, 1823, 1302, 4043, 2706, # 7798 + 3858, 1973, 4281, 8038, 4282, 3167, 823, 1303, 1288, 1236, 2848, 3495, 4044, 3398, 774, 3859, # 7814 + 8039, 1581, 4560, 1304, 2849, 3860, 4561, 8040, 2435, 2161, 1083, 3237, 4283, 4045, 4284, 344, # 7830 + 1173, 288, 2311, 454, 1683, 8041, 8042, 1461, 4562, 4046, 2589, 8043, 8044, 4563, 985, 894, # 7846 + 8045, 3399, 3168, 8046, 1913, 2928, 3729, 1988, 8047, 2110, 1974, 8048, 4047, 8049, 2571, 1194, # 7862 + 425, 8050, 4564, 3169, 1245, 3730, 4285, 8051, 8052, 2850, 8053, 636, 4565, 1855, 3861, 760, # 7878 + 1799, 8054, 4286, 2209, 1508, 4566, 4048, 1893, 1684, 2293, 8055, 8056, 8057, 4287, 4288, 2210, # 7894 + 479, 8058, 8059, 832, 8060, 4049, 2489, 8061, 2965, 2490, 3731, 990, 3109, 627, 1814, 2642, # 7910 + 4289, 1582, 4290, 2125, 2111, 3496, 4567, 8062, 799, 4291, 3170, 8063, 4568, 2112, 1737, 3013, # 7926 + 1018, 543, 754, 4292, 3309, 1676, 4569, 4570, 4050, 8064, 1489, 8065, 3497, 8066, 2614, 2889, # 7942 + 4051, 8067, 8068, 2966, 8069, 8070, 8071, 8072, 3171, 4571, 4572, 2182, 1722, 8073, 3238, 3239, # 7958 + 1842, 3610, 1715, 481, 365, 1975, 1856, 8074, 8075, 1962, 2491, 4573, 8076, 2126, 3611, 3240, # 7974 + 433, 1894, 2063, 2075, 8077, 602, 2741, 8078, 8079, 8080, 8081, 8082, 3014, 1628, 3400, 8083, # 7990 + 3172, 4574, 4052, 2890, 4575, 2512, 8084, 2544, 2772, 8085, 8086, 8087, 3310, 4576, 2891, 8088, # 8006 + 4577, 8089, 2851, 4578, 4579, 1221, 2967, 4053, 2513, 8090, 8091, 8092, 1867, 1989, 8093, 8094, # 8022 + 8095, 1895, 8096, 8097, 4580, 1896, 4054, 318, 8098, 2094, 4055, 4293, 8099, 8100, 485, 8101, # 8038 + 938, 3862, 553, 2670, 116, 8102, 3863, 3612, 8103, 3498, 2671, 2773, 3401, 3311, 2807, 8104, # 8054 + 3613, 2929, 4056, 1747, 2930, 2968, 8105, 8106, 207, 8107, 8108, 2672, 4581, 2514, 8109, 3015, # 8070 + 890, 3614, 3864, 8110, 1877, 3732, 3402, 8111, 2183, 2353, 3403, 1652, 8112, 8113, 8114, 941, # 8086 + 2294, 208, 3499, 4057, 2019, 330, 4294, 3865, 2892, 2492, 3733, 4295, 8115, 8116, 8117, 8118, # 8102 +) +# fmt: on diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euctwprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euctwprober.py new file mode 100644 index 0000000..a37ab18 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euctwprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCTWDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import EUCTW_SM_MODEL + + +class EUCTWProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) + self.distribution_analyzer = EUCTWDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "EUC-TW" + + @property + def language(self) -> str: + return "Taiwan" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/gb2312freq.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/gb2312freq.py new file mode 100644 index 0000000..b32bfc7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/gb2312freq.py @@ -0,0 +1,284 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# GB2312 most frequently used character table +# +# Char to FreqOrder table , from hz6763 + +# 512 --> 0.79 -- 0.79 +# 1024 --> 0.92 -- 0.13 +# 2048 --> 0.98 -- 0.06 +# 6768 --> 1.00 -- 0.02 +# +# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 +# Random Distribution Ration = 512 / (3755 - 512) = 0.157 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR + +GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 + +GB2312_TABLE_SIZE = 3760 + +# fmt: off +GB2312_CHAR_TO_FREQ_ORDER = ( +1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, +2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, +2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, + 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, +1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, +1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, + 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, +1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, +2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, +3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, + 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, +1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, + 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, +2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, + 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, +2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, +1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, +3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, + 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, +1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, + 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, +2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, +1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, +3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, +1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, +2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, +1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, + 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, +3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, +3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, + 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, +3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, + 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, +1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, +3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, +2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, +1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, + 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, +1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, +4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, + 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, +3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, +3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, + 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, +1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, +2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, +1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, +1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, + 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, +3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, +3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, +4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, + 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, +3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, +1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, +1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, +4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, + 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, + 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, +3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, +1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, + 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, +1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, +2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, + 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, + 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, + 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, +3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, +4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, +3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, + 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, +2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, +2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, +2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, + 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, +2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, + 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, + 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, + 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, +3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, +2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, +2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, +1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, + 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, +2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, + 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, + 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, +1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, +1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, + 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, + 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, +1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, +2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, +3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, +2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, +2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, +2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, +3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, +1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, +1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, +2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, +1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, +3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, +1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, +1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, +3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, + 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, +2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, +1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, +4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, +1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, +1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, +3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, +1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, + 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, + 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, +1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, + 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, +1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, +1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, + 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, +3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, +4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, +3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, +2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, +2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, +1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, +3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, +2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, +1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, +1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, + 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, +2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, +2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, +3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, +4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, +3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, + 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, +3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, +2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, +1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, + 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, + 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, +3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, +4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, +2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, +1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, +1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, + 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, +1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, +3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, + 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, + 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, +1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, + 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, +1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, + 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, +2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, + 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, +2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, +2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, +1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, +1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, +2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, + 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, +1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, +1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, +2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, +2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, +3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, +1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, +4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, + 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, + 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, +3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, +1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, + 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, +3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, +1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, +4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, +1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, +2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, +1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, + 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, +1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, +3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, + 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, +2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, + 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, +1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, +1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, +1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, +3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, +2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, +3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, +3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, +3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, + 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, +2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, + 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, +2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, + 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, +1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, + 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, + 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, +1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, +3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, +3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, +1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, +1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, +3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, +2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, +2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, +1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, +3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, + 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, +4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, +1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, +2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, +3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, +3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, +1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, + 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, + 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, +2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, + 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, +1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, + 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, +1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, +1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, +1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, +1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, +1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, + 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, + 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 +) +# fmt: on diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/gb2312prober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/gb2312prober.py new file mode 100644 index 0000000..d423e73 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/gb2312prober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import GB2312DistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import GB2312_SM_MODEL + + +class GB2312Prober(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) + self.distribution_analyzer = GB2312DistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "GB2312" + + @property + def language(self) -> str: + return "Chinese" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/hebrewprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/hebrewprober.py new file mode 100644 index 0000000..785d005 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/hebrewprober.py @@ -0,0 +1,316 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Shy Shalom +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Optional, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState +from .sbcharsetprober import SingleByteCharSetProber + +# This prober doesn't actually recognize a language or a charset. +# It is a helper prober for the use of the Hebrew model probers + +### General ideas of the Hebrew charset recognition ### +# +# Four main charsets exist in Hebrew: +# "ISO-8859-8" - Visual Hebrew +# "windows-1255" - Logical Hebrew +# "ISO-8859-8-I" - Logical Hebrew +# "x-mac-hebrew" - ?? Logical Hebrew ?? +# +# Both "ISO" charsets use a completely identical set of code points, whereas +# "windows-1255" and "x-mac-hebrew" are two different proper supersets of +# these code points. windows-1255 defines additional characters in the range +# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific +# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. +# x-mac-hebrew defines similar additional code points but with a different +# mapping. +# +# As far as an average Hebrew text with no diacritics is concerned, all four +# charsets are identical with respect to code points. Meaning that for the +# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters +# (including final letters). +# +# The dominant difference between these charsets is their directionality. +# "Visual" directionality means that the text is ordered as if the renderer is +# not aware of a BIDI rendering algorithm. The renderer sees the text and +# draws it from left to right. The text itself when ordered naturally is read +# backwards. A buffer of Visual Hebrew generally looks like so: +# "[last word of first line spelled backwards] [whole line ordered backwards +# and spelled backwards] [first word of first line spelled backwards] +# [end of line] [last word of second line] ... etc' " +# adding punctuation marks, numbers and English text to visual text is +# naturally also "visual" and from left to right. +# +# "Logical" directionality means the text is ordered "naturally" according to +# the order it is read. It is the responsibility of the renderer to display +# the text from right to left. A BIDI algorithm is used to place general +# punctuation marks, numbers and English text in the text. +# +# Texts in x-mac-hebrew are almost impossible to find on the Internet. From +# what little evidence I could find, it seems that its general directionality +# is Logical. +# +# To sum up all of the above, the Hebrew probing mechanism knows about two +# charsets: +# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are +# backwards while line order is natural. For charset recognition purposes +# the line order is unimportant (In fact, for this implementation, even +# word order is unimportant). +# Logical Hebrew - "windows-1255" - normal, naturally ordered text. +# +# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be +# specifically identified. +# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew +# that contain special punctuation marks or diacritics is displayed with +# some unconverted characters showing as question marks. This problem might +# be corrected using another model prober for x-mac-hebrew. Due to the fact +# that x-mac-hebrew texts are so rare, writing another model prober isn't +# worth the effort and performance hit. +# +#### The Prober #### +# +# The prober is divided between two SBCharSetProbers and a HebrewProber, +# all of which are managed, created, fed data, inquired and deleted by the +# SBCSGroupProber. The two SBCharSetProbers identify that the text is in +# fact some kind of Hebrew, Logical or Visual. The final decision about which +# one is it is made by the HebrewProber by combining final-letter scores +# with the scores of the two SBCharSetProbers to produce a final answer. +# +# The SBCSGroupProber is responsible for stripping the original text of HTML +# tags, English characters, numbers, low-ASCII punctuation characters, spaces +# and new lines. It reduces any sequence of such characters to a single space. +# The buffer fed to each prober in the SBCS group prober is pure text in +# high-ASCII. +# The two SBCharSetProbers (model probers) share the same language model: +# Win1255Model. +# The first SBCharSetProber uses the model normally as any other +# SBCharSetProber does, to recognize windows-1255, upon which this model was +# built. The second SBCharSetProber is told to make the pair-of-letter +# lookup in the language model backwards. This in practice exactly simulates +# a visual Hebrew model using the windows-1255 logical Hebrew model. +# +# The HebrewProber is not using any language model. All it does is look for +# final-letter evidence suggesting the text is either logical Hebrew or visual +# Hebrew. Disjointed from the model probers, the results of the HebrewProber +# alone are meaningless. HebrewProber always returns 0.00 as confidence +# since it never identifies a charset by itself. Instead, the pointer to the +# HebrewProber is passed to the model probers as a helper "Name Prober". +# When the Group prober receives a positive identification from any prober, +# it asks for the name of the charset identified. If the prober queried is a +# Hebrew model prober, the model prober forwards the call to the +# HebrewProber to make the final decision. In the HebrewProber, the +# decision is made according to the final-letters scores maintained and Both +# model probers scores. The answer is returned in the form of the name of the +# charset identified, either "windows-1255" or "ISO-8859-8". + + +class HebrewProber(CharSetProber): + SPACE = 0x20 + # windows-1255 / ISO-8859-8 code points of interest + FINAL_KAF = 0xEA + NORMAL_KAF = 0xEB + FINAL_MEM = 0xED + NORMAL_MEM = 0xEE + FINAL_NUN = 0xEF + NORMAL_NUN = 0xF0 + FINAL_PE = 0xF3 + NORMAL_PE = 0xF4 + FINAL_TSADI = 0xF5 + NORMAL_TSADI = 0xF6 + + # Minimum Visual vs Logical final letter score difference. + # If the difference is below this, don't rely solely on the final letter score + # distance. + MIN_FINAL_CHAR_DISTANCE = 5 + + # Minimum Visual vs Logical model score difference. + # If the difference is below this, don't rely at all on the model score + # distance. + MIN_MODEL_DISTANCE = 0.01 + + VISUAL_HEBREW_NAME = "ISO-8859-8" + LOGICAL_HEBREW_NAME = "windows-1255" + + def __init__(self) -> None: + super().__init__() + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + self._prev = self.SPACE + self._before_prev = self.SPACE + self._logical_prober: Optional[SingleByteCharSetProber] = None + self._visual_prober: Optional[SingleByteCharSetProber] = None + self.reset() + + def reset(self) -> None: + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + # The two last characters seen in the previous buffer, + # mPrev and mBeforePrev are initialized to space in order to simulate + # a word delimiter at the beginning of the data + self._prev = self.SPACE + self._before_prev = self.SPACE + # These probers are owned by the group prober. + + def set_model_probers( + self, + logical_prober: SingleByteCharSetProber, + visual_prober: SingleByteCharSetProber, + ) -> None: + self._logical_prober = logical_prober + self._visual_prober = visual_prober + + def is_final(self, c: int) -> bool: + return c in [ + self.FINAL_KAF, + self.FINAL_MEM, + self.FINAL_NUN, + self.FINAL_PE, + self.FINAL_TSADI, + ] + + def is_non_final(self, c: int) -> bool: + # The normal Tsadi is not a good Non-Final letter due to words like + # 'lechotet' (to chat) containing an apostrophe after the tsadi. This + # apostrophe is converted to a space in FilterWithoutEnglishLetters + # causing the Non-Final tsadi to appear at an end of a word even + # though this is not the case in the original text. + # The letters Pe and Kaf rarely display a related behavior of not being + # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' + # for example legally end with a Non-Final Pe or Kaf. However, the + # benefit of these letters as Non-Final letters outweighs the damage + # since these words are quite rare. + return c in [self.NORMAL_KAF, self.NORMAL_MEM, self.NORMAL_NUN, self.NORMAL_PE] + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + # Final letter analysis for logical-visual decision. + # Look for evidence that the received buffer is either logical Hebrew + # or visual Hebrew. + # The following cases are checked: + # 1) A word longer than 1 letter, ending with a final letter. This is + # an indication that the text is laid out "naturally" since the + # final letter really appears at the end. +1 for logical score. + # 2) A word longer than 1 letter, ending with a Non-Final letter. In + # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, + # should not end with the Non-Final form of that letter. Exceptions + # to this rule are mentioned above in isNonFinal(). This is an + # indication that the text is laid out backwards. +1 for visual + # score + # 3) A word longer than 1 letter, starting with a final letter. Final + # letters should not appear at the beginning of a word. This is an + # indication that the text is laid out backwards. +1 for visual + # score. + # + # The visual score and logical score are accumulated throughout the + # text and are finally checked against each other in GetCharSetName(). + # No checking for final letters in the middle of words is done since + # that case is not an indication for either Logical or Visual text. + # + # We automatically filter out all 7-bit characters (replace them with + # spaces) so the word boundary detection works properly. [MAP] + + if self.state == ProbingState.NOT_ME: + # Both model probers say it's not them. No reason to continue. + return ProbingState.NOT_ME + + byte_str = self.filter_high_byte_only(byte_str) + + for cur in byte_str: + if cur == self.SPACE: + # We stand on a space - a word just ended + if self._before_prev != self.SPACE: + # next-to-last char was not a space so self._prev is not a + # 1 letter word + if self.is_final(self._prev): + # case (1) [-2:not space][-1:final letter][cur:space] + self._final_char_logical_score += 1 + elif self.is_non_final(self._prev): + # case (2) [-2:not space][-1:Non-Final letter][ + # cur:space] + self._final_char_visual_score += 1 + else: + # Not standing on a space + if ( + (self._before_prev == self.SPACE) + and (self.is_final(self._prev)) + and (cur != self.SPACE) + ): + # case (3) [-2:space][-1:final letter][cur:not space] + self._final_char_visual_score += 1 + self._before_prev = self._prev + self._prev = cur + + # Forever detecting, till the end or until both model probers return + # ProbingState.NOT_ME (handled above) + return ProbingState.DETECTING + + @property + def charset_name(self) -> str: + assert self._logical_prober is not None + assert self._visual_prober is not None + + # Make the decision: is it Logical or Visual? + # If the final letter score distance is dominant enough, rely on it. + finalsub = self._final_char_logical_score - self._final_char_visual_score + if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # It's not dominant enough, try to rely on the model scores instead. + modelsub = ( + self._logical_prober.get_confidence() - self._visual_prober.get_confidence() + ) + if modelsub > self.MIN_MODEL_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if modelsub < -self.MIN_MODEL_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # Still no good, back to final letter distance, maybe it'll save the + # day. + if finalsub < 0.0: + return self.VISUAL_HEBREW_NAME + + # (finalsub > 0 - Logical) or (don't know what to do) default to + # Logical. + return self.LOGICAL_HEBREW_NAME + + @property + def language(self) -> str: + return "Hebrew" + + @property + def state(self) -> ProbingState: + assert self._logical_prober is not None + assert self._visual_prober is not None + + # Remain active as long as any of the model probers are active. + if (self._logical_prober.state == ProbingState.NOT_ME) and ( + self._visual_prober.state == ProbingState.NOT_ME + ): + return ProbingState.NOT_ME + return ProbingState.DETECTING diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/jisfreq.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/jisfreq.py new file mode 100644 index 0000000..3293576 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/jisfreq.py @@ -0,0 +1,325 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology +# +# Japanese frequency table, applied to both S-JIS and EUC-JP +# They are sorted in order. + +# 128 --> 0.77094 +# 256 --> 0.85710 +# 512 --> 0.92635 +# 1024 --> 0.97130 +# 2048 --> 0.99431 +# +# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 +# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 +# +# Typical Distribution Ratio, 25% of IDR + +JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 + +# Char to FreqOrder table , +JIS_TABLE_SIZE = 4368 + +# fmt: off +JIS_CHAR_TO_FREQ_ORDER = ( + 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 +3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 +1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 +2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 +2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 +5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 +1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 +5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 +5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 +5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 +5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 +5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 +5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 +1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 +1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 +1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 +2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 +3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 +3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 + 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 + 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 +1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 + 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 +5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 + 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 + 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 + 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 + 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 + 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 +5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 +5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 +5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 +4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 +5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 +5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 +5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 +5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 +5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 +5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 +5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 +5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 +5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 +3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 +5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 +5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 +5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 +5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 +5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 +5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 +5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 +5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 +5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 +5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 +5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 +5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 +5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 +5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 +5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 +5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 +5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 +5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 +5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 +5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 +5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 +5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 +5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 +5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 +5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 +5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 +5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 +5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 +5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 +5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 +5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 +5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 +5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 +5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 +5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 +5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 +5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 +5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 +6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 +6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 +6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 +6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 +6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 +6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 +6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 +6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 +4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 + 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 + 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 +1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 +1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 + 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 +3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 +3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 + 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 +3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 +3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 + 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 +2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 + 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 +3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 +1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 + 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 +1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 + 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 +2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 +2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 +2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 +2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 +1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 +1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 +1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 +1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 +2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 +1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 +2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 +1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 +1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 +1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 +1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 +1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 +1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 + 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 + 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 +1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 +2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 +2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 +2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 +3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 +3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 + 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 +3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 +1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 + 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 +2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 +1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 + 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 +3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 +4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 +2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 +1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 +2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 +1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 + 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 + 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 +1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 +2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 +2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 +2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 +3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 +1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 +2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 + 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 + 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 + 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 +1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 +2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 + 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 +1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 +1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 + 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 +1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 +1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 +1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 + 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 +2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 + 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 +2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 +3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 +2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 +1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 +6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 +1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 +2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 +1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 + 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 + 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 +3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 +3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 +1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 +1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 +1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 +1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 + 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 + 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 +2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 + 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 +3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 +2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 + 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 +1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 +2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 + 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 +1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 + 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 +4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 +2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 +1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 + 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 +1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 +2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 + 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 +6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 +1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 +1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 +2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 +3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 + 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 +3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 +1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 + 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 +1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 + 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 +3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 + 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 +2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 + 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 +4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 +2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 +1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 +1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 +1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 + 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 +1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 +3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 +1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 +3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 + 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 + 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 + 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 +2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 +1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 + 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 +1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 + 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 +1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 + 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 + 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 + 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 +1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 +1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 +2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 +4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 + 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 +1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 + 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 +1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 +3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 +1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 +2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 +2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 +1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 +1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 +2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 + 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 +2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 +1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 +1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 +1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 +1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 +3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 +2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 +2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 + 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 +3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 +3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 +1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 +2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 +1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 +2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 +) +# fmt: on diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/johabfreq.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/johabfreq.py new file mode 100644 index 0000000..c129699 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/johabfreq.py @@ -0,0 +1,2382 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# The frequency data itself is the same as euc-kr. +# This is just a mapping table to euc-kr. + +JOHAB_TO_EUCKR_ORDER_TABLE = { + 0x8861: 0, + 0x8862: 1, + 0x8865: 2, + 0x8868: 3, + 0x8869: 4, + 0x886A: 5, + 0x886B: 6, + 0x8871: 7, + 0x8873: 8, + 0x8874: 9, + 0x8875: 10, + 0x8876: 11, + 0x8877: 12, + 0x8878: 13, + 0x8879: 14, + 0x887B: 15, + 0x887C: 16, + 0x887D: 17, + 0x8881: 18, + 0x8882: 19, + 0x8885: 20, + 0x8889: 21, + 0x8891: 22, + 0x8893: 23, + 0x8895: 24, + 0x8896: 25, + 0x8897: 26, + 0x88A1: 27, + 0x88A2: 28, + 0x88A5: 29, + 0x88A9: 30, + 0x88B5: 31, + 0x88B7: 32, + 0x88C1: 33, + 0x88C5: 34, + 0x88C9: 35, + 0x88E1: 36, + 0x88E2: 37, + 0x88E5: 38, + 0x88E8: 39, + 0x88E9: 40, + 0x88EB: 41, + 0x88F1: 42, + 0x88F3: 43, + 0x88F5: 44, + 0x88F6: 45, + 0x88F7: 46, + 0x88F8: 47, + 0x88FB: 48, + 0x88FC: 49, + 0x88FD: 50, + 0x8941: 51, + 0x8945: 52, + 0x8949: 53, + 0x8951: 54, + 0x8953: 55, + 0x8955: 56, + 0x8956: 57, + 0x8957: 58, + 0x8961: 59, + 0x8962: 60, + 0x8963: 61, + 0x8965: 62, + 0x8968: 63, + 0x8969: 64, + 0x8971: 65, + 0x8973: 66, + 0x8975: 67, + 0x8976: 68, + 0x8977: 69, + 0x897B: 70, + 0x8981: 71, + 0x8985: 72, + 0x8989: 73, + 0x8993: 74, + 0x8995: 75, + 0x89A1: 76, + 0x89A2: 77, + 0x89A5: 78, + 0x89A8: 79, + 0x89A9: 80, + 0x89AB: 81, + 0x89AD: 82, + 0x89B0: 83, + 0x89B1: 84, + 0x89B3: 85, + 0x89B5: 86, + 0x89B7: 87, + 0x89B8: 88, + 0x89C1: 89, + 0x89C2: 90, + 0x89C5: 91, + 0x89C9: 92, + 0x89CB: 93, + 0x89D1: 94, + 0x89D3: 95, + 0x89D5: 96, + 0x89D7: 97, + 0x89E1: 98, + 0x89E5: 99, + 0x89E9: 100, + 0x89F3: 101, + 0x89F6: 102, + 0x89F7: 103, + 0x8A41: 104, + 0x8A42: 105, + 0x8A45: 106, + 0x8A49: 107, + 0x8A51: 108, + 0x8A53: 109, + 0x8A55: 110, + 0x8A57: 111, + 0x8A61: 112, + 0x8A65: 113, + 0x8A69: 114, + 0x8A73: 115, + 0x8A75: 116, + 0x8A81: 117, + 0x8A82: 118, + 0x8A85: 119, + 0x8A88: 120, + 0x8A89: 121, + 0x8A8A: 122, + 0x8A8B: 123, + 0x8A90: 124, + 0x8A91: 125, + 0x8A93: 126, + 0x8A95: 127, + 0x8A97: 128, + 0x8A98: 129, + 0x8AA1: 130, + 0x8AA2: 131, + 0x8AA5: 132, + 0x8AA9: 133, + 0x8AB6: 134, + 0x8AB7: 135, + 0x8AC1: 136, + 0x8AD5: 137, + 0x8AE1: 138, + 0x8AE2: 139, + 0x8AE5: 140, + 0x8AE9: 141, + 0x8AF1: 142, + 0x8AF3: 143, + 0x8AF5: 144, + 0x8B41: 145, + 0x8B45: 146, + 0x8B49: 147, + 0x8B61: 148, + 0x8B62: 149, + 0x8B65: 150, + 0x8B68: 151, + 0x8B69: 152, + 0x8B6A: 153, + 0x8B71: 154, + 0x8B73: 155, + 0x8B75: 156, + 0x8B77: 157, + 0x8B81: 158, + 0x8BA1: 159, + 0x8BA2: 160, + 0x8BA5: 161, + 0x8BA8: 162, + 0x8BA9: 163, + 0x8BAB: 164, + 0x8BB1: 165, + 0x8BB3: 166, + 0x8BB5: 167, + 0x8BB7: 168, + 0x8BB8: 169, + 0x8BBC: 170, + 0x8C61: 171, + 0x8C62: 172, + 0x8C63: 173, + 0x8C65: 174, + 0x8C69: 175, + 0x8C6B: 176, + 0x8C71: 177, + 0x8C73: 178, + 0x8C75: 179, + 0x8C76: 180, + 0x8C77: 181, + 0x8C7B: 182, + 0x8C81: 183, + 0x8C82: 184, + 0x8C85: 185, + 0x8C89: 186, + 0x8C91: 187, + 0x8C93: 188, + 0x8C95: 189, + 0x8C96: 190, + 0x8C97: 191, + 0x8CA1: 192, + 0x8CA2: 193, + 0x8CA9: 194, + 0x8CE1: 195, + 0x8CE2: 196, + 0x8CE3: 197, + 0x8CE5: 198, + 0x8CE9: 199, + 0x8CF1: 200, + 0x8CF3: 201, + 0x8CF5: 202, + 0x8CF6: 203, + 0x8CF7: 204, + 0x8D41: 205, + 0x8D42: 206, + 0x8D45: 207, + 0x8D51: 208, + 0x8D55: 209, + 0x8D57: 210, + 0x8D61: 211, + 0x8D65: 212, + 0x8D69: 213, + 0x8D75: 214, + 0x8D76: 215, + 0x8D7B: 216, + 0x8D81: 217, + 0x8DA1: 218, + 0x8DA2: 219, + 0x8DA5: 220, + 0x8DA7: 221, + 0x8DA9: 222, + 0x8DB1: 223, + 0x8DB3: 224, + 0x8DB5: 225, + 0x8DB7: 226, + 0x8DB8: 227, + 0x8DB9: 228, + 0x8DC1: 229, + 0x8DC2: 230, + 0x8DC9: 231, + 0x8DD6: 232, + 0x8DD7: 233, + 0x8DE1: 234, + 0x8DE2: 235, + 0x8DF7: 236, + 0x8E41: 237, + 0x8E45: 238, + 0x8E49: 239, + 0x8E51: 240, + 0x8E53: 241, + 0x8E57: 242, + 0x8E61: 243, + 0x8E81: 244, + 0x8E82: 245, + 0x8E85: 246, + 0x8E89: 247, + 0x8E90: 248, + 0x8E91: 249, + 0x8E93: 250, + 0x8E95: 251, + 0x8E97: 252, + 0x8E98: 253, + 0x8EA1: 254, + 0x8EA9: 255, + 0x8EB6: 256, + 0x8EB7: 257, + 0x8EC1: 258, + 0x8EC2: 259, + 0x8EC5: 260, + 0x8EC9: 261, + 0x8ED1: 262, + 0x8ED3: 263, + 0x8ED6: 264, + 0x8EE1: 265, + 0x8EE5: 266, + 0x8EE9: 267, + 0x8EF1: 268, + 0x8EF3: 269, + 0x8F41: 270, + 0x8F61: 271, + 0x8F62: 272, + 0x8F65: 273, + 0x8F67: 274, + 0x8F69: 275, + 0x8F6B: 276, + 0x8F70: 277, + 0x8F71: 278, + 0x8F73: 279, + 0x8F75: 280, + 0x8F77: 281, + 0x8F7B: 282, + 0x8FA1: 283, + 0x8FA2: 284, + 0x8FA5: 285, + 0x8FA9: 286, + 0x8FB1: 287, + 0x8FB3: 288, + 0x8FB5: 289, + 0x8FB7: 290, + 0x9061: 291, + 0x9062: 292, + 0x9063: 293, + 0x9065: 294, + 0x9068: 295, + 0x9069: 296, + 0x906A: 297, + 0x906B: 298, + 0x9071: 299, + 0x9073: 300, + 0x9075: 301, + 0x9076: 302, + 0x9077: 303, + 0x9078: 304, + 0x9079: 305, + 0x907B: 306, + 0x907D: 307, + 0x9081: 308, + 0x9082: 309, + 0x9085: 310, + 0x9089: 311, + 0x9091: 312, + 0x9093: 313, + 0x9095: 314, + 0x9096: 315, + 0x9097: 316, + 0x90A1: 317, + 0x90A2: 318, + 0x90A5: 319, + 0x90A9: 320, + 0x90B1: 321, + 0x90B7: 322, + 0x90E1: 323, + 0x90E2: 324, + 0x90E4: 325, + 0x90E5: 326, + 0x90E9: 327, + 0x90EB: 328, + 0x90EC: 329, + 0x90F1: 330, + 0x90F3: 331, + 0x90F5: 332, + 0x90F6: 333, + 0x90F7: 334, + 0x90FD: 335, + 0x9141: 336, + 0x9142: 337, + 0x9145: 338, + 0x9149: 339, + 0x9151: 340, + 0x9153: 341, + 0x9155: 342, + 0x9156: 343, + 0x9157: 344, + 0x9161: 345, + 0x9162: 346, + 0x9165: 347, + 0x9169: 348, + 0x9171: 349, + 0x9173: 350, + 0x9176: 351, + 0x9177: 352, + 0x917A: 353, + 0x9181: 354, + 0x9185: 355, + 0x91A1: 356, + 0x91A2: 357, + 0x91A5: 358, + 0x91A9: 359, + 0x91AB: 360, + 0x91B1: 361, + 0x91B3: 362, + 0x91B5: 363, + 0x91B7: 364, + 0x91BC: 365, + 0x91BD: 366, + 0x91C1: 367, + 0x91C5: 368, + 0x91C9: 369, + 0x91D6: 370, + 0x9241: 371, + 0x9245: 372, + 0x9249: 373, + 0x9251: 374, + 0x9253: 375, + 0x9255: 376, + 0x9261: 377, + 0x9262: 378, + 0x9265: 379, + 0x9269: 380, + 0x9273: 381, + 0x9275: 382, + 0x9277: 383, + 0x9281: 384, + 0x9282: 385, + 0x9285: 386, + 0x9288: 387, + 0x9289: 388, + 0x9291: 389, + 0x9293: 390, + 0x9295: 391, + 0x9297: 392, + 0x92A1: 393, + 0x92B6: 394, + 0x92C1: 395, + 0x92E1: 396, + 0x92E5: 397, + 0x92E9: 398, + 0x92F1: 399, + 0x92F3: 400, + 0x9341: 401, + 0x9342: 402, + 0x9349: 403, + 0x9351: 404, + 0x9353: 405, + 0x9357: 406, + 0x9361: 407, + 0x9362: 408, + 0x9365: 409, + 0x9369: 410, + 0x936A: 411, + 0x936B: 412, + 0x9371: 413, + 0x9373: 414, + 0x9375: 415, + 0x9377: 416, + 0x9378: 417, + 0x937C: 418, + 0x9381: 419, + 0x9385: 420, + 0x9389: 421, + 0x93A1: 422, + 0x93A2: 423, + 0x93A5: 424, + 0x93A9: 425, + 0x93AB: 426, + 0x93B1: 427, + 0x93B3: 428, + 0x93B5: 429, + 0x93B7: 430, + 0x93BC: 431, + 0x9461: 432, + 0x9462: 433, + 0x9463: 434, + 0x9465: 435, + 0x9468: 436, + 0x9469: 437, + 0x946A: 438, + 0x946B: 439, + 0x946C: 440, + 0x9470: 441, + 0x9471: 442, + 0x9473: 443, + 0x9475: 444, + 0x9476: 445, + 0x9477: 446, + 0x9478: 447, + 0x9479: 448, + 0x947D: 449, + 0x9481: 450, + 0x9482: 451, + 0x9485: 452, + 0x9489: 453, + 0x9491: 454, + 0x9493: 455, + 0x9495: 456, + 0x9496: 457, + 0x9497: 458, + 0x94A1: 459, + 0x94E1: 460, + 0x94E2: 461, + 0x94E3: 462, + 0x94E5: 463, + 0x94E8: 464, + 0x94E9: 465, + 0x94EB: 466, + 0x94EC: 467, + 0x94F1: 468, + 0x94F3: 469, + 0x94F5: 470, + 0x94F7: 471, + 0x94F9: 472, + 0x94FC: 473, + 0x9541: 474, + 0x9542: 475, + 0x9545: 476, + 0x9549: 477, + 0x9551: 478, + 0x9553: 479, + 0x9555: 480, + 0x9556: 481, + 0x9557: 482, + 0x9561: 483, + 0x9565: 484, + 0x9569: 485, + 0x9576: 486, + 0x9577: 487, + 0x9581: 488, + 0x9585: 489, + 0x95A1: 490, + 0x95A2: 491, + 0x95A5: 492, + 0x95A8: 493, + 0x95A9: 494, + 0x95AB: 495, + 0x95AD: 496, + 0x95B1: 497, + 0x95B3: 498, + 0x95B5: 499, + 0x95B7: 500, + 0x95B9: 501, + 0x95BB: 502, + 0x95C1: 503, + 0x95C5: 504, + 0x95C9: 505, + 0x95E1: 506, + 0x95F6: 507, + 0x9641: 508, + 0x9645: 509, + 0x9649: 510, + 0x9651: 511, + 0x9653: 512, + 0x9655: 513, + 0x9661: 514, + 0x9681: 515, + 0x9682: 516, + 0x9685: 517, + 0x9689: 518, + 0x9691: 519, + 0x9693: 520, + 0x9695: 521, + 0x9697: 522, + 0x96A1: 523, + 0x96B6: 524, + 0x96C1: 525, + 0x96D7: 526, + 0x96E1: 527, + 0x96E5: 528, + 0x96E9: 529, + 0x96F3: 530, + 0x96F5: 531, + 0x96F7: 532, + 0x9741: 533, + 0x9745: 534, + 0x9749: 535, + 0x9751: 536, + 0x9757: 537, + 0x9761: 538, + 0x9762: 539, + 0x9765: 540, + 0x9768: 541, + 0x9769: 542, + 0x976B: 543, + 0x9771: 544, + 0x9773: 545, + 0x9775: 546, + 0x9777: 547, + 0x9781: 548, + 0x97A1: 549, + 0x97A2: 550, + 0x97A5: 551, + 0x97A8: 552, + 0x97A9: 553, + 0x97B1: 554, + 0x97B3: 555, + 0x97B5: 556, + 0x97B6: 557, + 0x97B7: 558, + 0x97B8: 559, + 0x9861: 560, + 0x9862: 561, + 0x9865: 562, + 0x9869: 563, + 0x9871: 564, + 0x9873: 565, + 0x9875: 566, + 0x9876: 567, + 0x9877: 568, + 0x987D: 569, + 0x9881: 570, + 0x9882: 571, + 0x9885: 572, + 0x9889: 573, + 0x9891: 574, + 0x9893: 575, + 0x9895: 576, + 0x9896: 577, + 0x9897: 578, + 0x98E1: 579, + 0x98E2: 580, + 0x98E5: 581, + 0x98E9: 582, + 0x98EB: 583, + 0x98EC: 584, + 0x98F1: 585, + 0x98F3: 586, + 0x98F5: 587, + 0x98F6: 588, + 0x98F7: 589, + 0x98FD: 590, + 0x9941: 591, + 0x9942: 592, + 0x9945: 593, + 0x9949: 594, + 0x9951: 595, + 0x9953: 596, + 0x9955: 597, + 0x9956: 598, + 0x9957: 599, + 0x9961: 600, + 0x9976: 601, + 0x99A1: 602, + 0x99A2: 603, + 0x99A5: 604, + 0x99A9: 605, + 0x99B7: 606, + 0x99C1: 607, + 0x99C9: 608, + 0x99E1: 609, + 0x9A41: 610, + 0x9A45: 611, + 0x9A81: 612, + 0x9A82: 613, + 0x9A85: 614, + 0x9A89: 615, + 0x9A90: 616, + 0x9A91: 617, + 0x9A97: 618, + 0x9AC1: 619, + 0x9AE1: 620, + 0x9AE5: 621, + 0x9AE9: 622, + 0x9AF1: 623, + 0x9AF3: 624, + 0x9AF7: 625, + 0x9B61: 626, + 0x9B62: 627, + 0x9B65: 628, + 0x9B68: 629, + 0x9B69: 630, + 0x9B71: 631, + 0x9B73: 632, + 0x9B75: 633, + 0x9B81: 634, + 0x9B85: 635, + 0x9B89: 636, + 0x9B91: 637, + 0x9B93: 638, + 0x9BA1: 639, + 0x9BA5: 640, + 0x9BA9: 641, + 0x9BB1: 642, + 0x9BB3: 643, + 0x9BB5: 644, + 0x9BB7: 645, + 0x9C61: 646, + 0x9C62: 647, + 0x9C65: 648, + 0x9C69: 649, + 0x9C71: 650, + 0x9C73: 651, + 0x9C75: 652, + 0x9C76: 653, + 0x9C77: 654, + 0x9C78: 655, + 0x9C7C: 656, + 0x9C7D: 657, + 0x9C81: 658, + 0x9C82: 659, + 0x9C85: 660, + 0x9C89: 661, + 0x9C91: 662, + 0x9C93: 663, + 0x9C95: 664, + 0x9C96: 665, + 0x9C97: 666, + 0x9CA1: 667, + 0x9CA2: 668, + 0x9CA5: 669, + 0x9CB5: 670, + 0x9CB7: 671, + 0x9CE1: 672, + 0x9CE2: 673, + 0x9CE5: 674, + 0x9CE9: 675, + 0x9CF1: 676, + 0x9CF3: 677, + 0x9CF5: 678, + 0x9CF6: 679, + 0x9CF7: 680, + 0x9CFD: 681, + 0x9D41: 682, + 0x9D42: 683, + 0x9D45: 684, + 0x9D49: 685, + 0x9D51: 686, + 0x9D53: 687, + 0x9D55: 688, + 0x9D57: 689, + 0x9D61: 690, + 0x9D62: 691, + 0x9D65: 692, + 0x9D69: 693, + 0x9D71: 694, + 0x9D73: 695, + 0x9D75: 696, + 0x9D76: 697, + 0x9D77: 698, + 0x9D81: 699, + 0x9D85: 700, + 0x9D93: 701, + 0x9D95: 702, + 0x9DA1: 703, + 0x9DA2: 704, + 0x9DA5: 705, + 0x9DA9: 706, + 0x9DB1: 707, + 0x9DB3: 708, + 0x9DB5: 709, + 0x9DB7: 710, + 0x9DC1: 711, + 0x9DC5: 712, + 0x9DD7: 713, + 0x9DF6: 714, + 0x9E41: 715, + 0x9E45: 716, + 0x9E49: 717, + 0x9E51: 718, + 0x9E53: 719, + 0x9E55: 720, + 0x9E57: 721, + 0x9E61: 722, + 0x9E65: 723, + 0x9E69: 724, + 0x9E73: 725, + 0x9E75: 726, + 0x9E77: 727, + 0x9E81: 728, + 0x9E82: 729, + 0x9E85: 730, + 0x9E89: 731, + 0x9E91: 732, + 0x9E93: 733, + 0x9E95: 734, + 0x9E97: 735, + 0x9EA1: 736, + 0x9EB6: 737, + 0x9EC1: 738, + 0x9EE1: 739, + 0x9EE2: 740, + 0x9EE5: 741, + 0x9EE9: 742, + 0x9EF1: 743, + 0x9EF5: 744, + 0x9EF7: 745, + 0x9F41: 746, + 0x9F42: 747, + 0x9F45: 748, + 0x9F49: 749, + 0x9F51: 750, + 0x9F53: 751, + 0x9F55: 752, + 0x9F57: 753, + 0x9F61: 754, + 0x9F62: 755, + 0x9F65: 756, + 0x9F69: 757, + 0x9F71: 758, + 0x9F73: 759, + 0x9F75: 760, + 0x9F77: 761, + 0x9F78: 762, + 0x9F7B: 763, + 0x9F7C: 764, + 0x9FA1: 765, + 0x9FA2: 766, + 0x9FA5: 767, + 0x9FA9: 768, + 0x9FB1: 769, + 0x9FB3: 770, + 0x9FB5: 771, + 0x9FB7: 772, + 0xA061: 773, + 0xA062: 774, + 0xA065: 775, + 0xA067: 776, + 0xA068: 777, + 0xA069: 778, + 0xA06A: 779, + 0xA06B: 780, + 0xA071: 781, + 0xA073: 782, + 0xA075: 783, + 0xA077: 784, + 0xA078: 785, + 0xA07B: 786, + 0xA07D: 787, + 0xA081: 788, + 0xA082: 789, + 0xA085: 790, + 0xA089: 791, + 0xA091: 792, + 0xA093: 793, + 0xA095: 794, + 0xA096: 795, + 0xA097: 796, + 0xA098: 797, + 0xA0A1: 798, + 0xA0A2: 799, + 0xA0A9: 800, + 0xA0B7: 801, + 0xA0E1: 802, + 0xA0E2: 803, + 0xA0E5: 804, + 0xA0E9: 805, + 0xA0EB: 806, + 0xA0F1: 807, + 0xA0F3: 808, + 0xA0F5: 809, + 0xA0F7: 810, + 0xA0F8: 811, + 0xA0FD: 812, + 0xA141: 813, + 0xA142: 814, + 0xA145: 815, + 0xA149: 816, + 0xA151: 817, + 0xA153: 818, + 0xA155: 819, + 0xA156: 820, + 0xA157: 821, + 0xA161: 822, + 0xA162: 823, + 0xA165: 824, + 0xA169: 825, + 0xA175: 826, + 0xA176: 827, + 0xA177: 828, + 0xA179: 829, + 0xA181: 830, + 0xA1A1: 831, + 0xA1A2: 832, + 0xA1A4: 833, + 0xA1A5: 834, + 0xA1A9: 835, + 0xA1AB: 836, + 0xA1B1: 837, + 0xA1B3: 838, + 0xA1B5: 839, + 0xA1B7: 840, + 0xA1C1: 841, + 0xA1C5: 842, + 0xA1D6: 843, + 0xA1D7: 844, + 0xA241: 845, + 0xA245: 846, + 0xA249: 847, + 0xA253: 848, + 0xA255: 849, + 0xA257: 850, + 0xA261: 851, + 0xA265: 852, + 0xA269: 853, + 0xA273: 854, + 0xA275: 855, + 0xA281: 856, + 0xA282: 857, + 0xA283: 858, + 0xA285: 859, + 0xA288: 860, + 0xA289: 861, + 0xA28A: 862, + 0xA28B: 863, + 0xA291: 864, + 0xA293: 865, + 0xA295: 866, + 0xA297: 867, + 0xA29B: 868, + 0xA29D: 869, + 0xA2A1: 870, + 0xA2A5: 871, + 0xA2A9: 872, + 0xA2B3: 873, + 0xA2B5: 874, + 0xA2C1: 875, + 0xA2E1: 876, + 0xA2E5: 877, + 0xA2E9: 878, + 0xA341: 879, + 0xA345: 880, + 0xA349: 881, + 0xA351: 882, + 0xA355: 883, + 0xA361: 884, + 0xA365: 885, + 0xA369: 886, + 0xA371: 887, + 0xA375: 888, + 0xA3A1: 889, + 0xA3A2: 890, + 0xA3A5: 891, + 0xA3A8: 892, + 0xA3A9: 893, + 0xA3AB: 894, + 0xA3B1: 895, + 0xA3B3: 896, + 0xA3B5: 897, + 0xA3B6: 898, + 0xA3B7: 899, + 0xA3B9: 900, + 0xA3BB: 901, + 0xA461: 902, + 0xA462: 903, + 0xA463: 904, + 0xA464: 905, + 0xA465: 906, + 0xA468: 907, + 0xA469: 908, + 0xA46A: 909, + 0xA46B: 910, + 0xA46C: 911, + 0xA471: 912, + 0xA473: 913, + 0xA475: 914, + 0xA477: 915, + 0xA47B: 916, + 0xA481: 917, + 0xA482: 918, + 0xA485: 919, + 0xA489: 920, + 0xA491: 921, + 0xA493: 922, + 0xA495: 923, + 0xA496: 924, + 0xA497: 925, + 0xA49B: 926, + 0xA4A1: 927, + 0xA4A2: 928, + 0xA4A5: 929, + 0xA4B3: 930, + 0xA4E1: 931, + 0xA4E2: 932, + 0xA4E5: 933, + 0xA4E8: 934, + 0xA4E9: 935, + 0xA4EB: 936, + 0xA4F1: 937, + 0xA4F3: 938, + 0xA4F5: 939, + 0xA4F7: 940, + 0xA4F8: 941, + 0xA541: 942, + 0xA542: 943, + 0xA545: 944, + 0xA548: 945, + 0xA549: 946, + 0xA551: 947, + 0xA553: 948, + 0xA555: 949, + 0xA556: 950, + 0xA557: 951, + 0xA561: 952, + 0xA562: 953, + 0xA565: 954, + 0xA569: 955, + 0xA573: 956, + 0xA575: 957, + 0xA576: 958, + 0xA577: 959, + 0xA57B: 960, + 0xA581: 961, + 0xA585: 962, + 0xA5A1: 963, + 0xA5A2: 964, + 0xA5A3: 965, + 0xA5A5: 966, + 0xA5A9: 967, + 0xA5B1: 968, + 0xA5B3: 969, + 0xA5B5: 970, + 0xA5B7: 971, + 0xA5C1: 972, + 0xA5C5: 973, + 0xA5D6: 974, + 0xA5E1: 975, + 0xA5F6: 976, + 0xA641: 977, + 0xA642: 978, + 0xA645: 979, + 0xA649: 980, + 0xA651: 981, + 0xA653: 982, + 0xA661: 983, + 0xA665: 984, + 0xA681: 985, + 0xA682: 986, + 0xA685: 987, + 0xA688: 988, + 0xA689: 989, + 0xA68A: 990, + 0xA68B: 991, + 0xA691: 992, + 0xA693: 993, + 0xA695: 994, + 0xA697: 995, + 0xA69B: 996, + 0xA69C: 997, + 0xA6A1: 998, + 0xA6A9: 999, + 0xA6B6: 1000, + 0xA6C1: 1001, + 0xA6E1: 1002, + 0xA6E2: 1003, + 0xA6E5: 1004, + 0xA6E9: 1005, + 0xA6F7: 1006, + 0xA741: 1007, + 0xA745: 1008, + 0xA749: 1009, + 0xA751: 1010, + 0xA755: 1011, + 0xA757: 1012, + 0xA761: 1013, + 0xA762: 1014, + 0xA765: 1015, + 0xA769: 1016, + 0xA771: 1017, + 0xA773: 1018, + 0xA775: 1019, + 0xA7A1: 1020, + 0xA7A2: 1021, + 0xA7A5: 1022, + 0xA7A9: 1023, + 0xA7AB: 1024, + 0xA7B1: 1025, + 0xA7B3: 1026, + 0xA7B5: 1027, + 0xA7B7: 1028, + 0xA7B8: 1029, + 0xA7B9: 1030, + 0xA861: 1031, + 0xA862: 1032, + 0xA865: 1033, + 0xA869: 1034, + 0xA86B: 1035, + 0xA871: 1036, + 0xA873: 1037, + 0xA875: 1038, + 0xA876: 1039, + 0xA877: 1040, + 0xA87D: 1041, + 0xA881: 1042, + 0xA882: 1043, + 0xA885: 1044, + 0xA889: 1045, + 0xA891: 1046, + 0xA893: 1047, + 0xA895: 1048, + 0xA896: 1049, + 0xA897: 1050, + 0xA8A1: 1051, + 0xA8A2: 1052, + 0xA8B1: 1053, + 0xA8E1: 1054, + 0xA8E2: 1055, + 0xA8E5: 1056, + 0xA8E8: 1057, + 0xA8E9: 1058, + 0xA8F1: 1059, + 0xA8F5: 1060, + 0xA8F6: 1061, + 0xA8F7: 1062, + 0xA941: 1063, + 0xA957: 1064, + 0xA961: 1065, + 0xA962: 1066, + 0xA971: 1067, + 0xA973: 1068, + 0xA975: 1069, + 0xA976: 1070, + 0xA977: 1071, + 0xA9A1: 1072, + 0xA9A2: 1073, + 0xA9A5: 1074, + 0xA9A9: 1075, + 0xA9B1: 1076, + 0xA9B3: 1077, + 0xA9B7: 1078, + 0xAA41: 1079, + 0xAA61: 1080, + 0xAA77: 1081, + 0xAA81: 1082, + 0xAA82: 1083, + 0xAA85: 1084, + 0xAA89: 1085, + 0xAA91: 1086, + 0xAA95: 1087, + 0xAA97: 1088, + 0xAB41: 1089, + 0xAB57: 1090, + 0xAB61: 1091, + 0xAB65: 1092, + 0xAB69: 1093, + 0xAB71: 1094, + 0xAB73: 1095, + 0xABA1: 1096, + 0xABA2: 1097, + 0xABA5: 1098, + 0xABA9: 1099, + 0xABB1: 1100, + 0xABB3: 1101, + 0xABB5: 1102, + 0xABB7: 1103, + 0xAC61: 1104, + 0xAC62: 1105, + 0xAC64: 1106, + 0xAC65: 1107, + 0xAC68: 1108, + 0xAC69: 1109, + 0xAC6A: 1110, + 0xAC6B: 1111, + 0xAC71: 1112, + 0xAC73: 1113, + 0xAC75: 1114, + 0xAC76: 1115, + 0xAC77: 1116, + 0xAC7B: 1117, + 0xAC81: 1118, + 0xAC82: 1119, + 0xAC85: 1120, + 0xAC89: 1121, + 0xAC91: 1122, + 0xAC93: 1123, + 0xAC95: 1124, + 0xAC96: 1125, + 0xAC97: 1126, + 0xACA1: 1127, + 0xACA2: 1128, + 0xACA5: 1129, + 0xACA9: 1130, + 0xACB1: 1131, + 0xACB3: 1132, + 0xACB5: 1133, + 0xACB7: 1134, + 0xACC1: 1135, + 0xACC5: 1136, + 0xACC9: 1137, + 0xACD1: 1138, + 0xACD7: 1139, + 0xACE1: 1140, + 0xACE2: 1141, + 0xACE3: 1142, + 0xACE4: 1143, + 0xACE5: 1144, + 0xACE8: 1145, + 0xACE9: 1146, + 0xACEB: 1147, + 0xACEC: 1148, + 0xACF1: 1149, + 0xACF3: 1150, + 0xACF5: 1151, + 0xACF6: 1152, + 0xACF7: 1153, + 0xACFC: 1154, + 0xAD41: 1155, + 0xAD42: 1156, + 0xAD45: 1157, + 0xAD49: 1158, + 0xAD51: 1159, + 0xAD53: 1160, + 0xAD55: 1161, + 0xAD56: 1162, + 0xAD57: 1163, + 0xAD61: 1164, + 0xAD62: 1165, + 0xAD65: 1166, + 0xAD69: 1167, + 0xAD71: 1168, + 0xAD73: 1169, + 0xAD75: 1170, + 0xAD76: 1171, + 0xAD77: 1172, + 0xAD81: 1173, + 0xAD85: 1174, + 0xAD89: 1175, + 0xAD97: 1176, + 0xADA1: 1177, + 0xADA2: 1178, + 0xADA3: 1179, + 0xADA5: 1180, + 0xADA9: 1181, + 0xADAB: 1182, + 0xADB1: 1183, + 0xADB3: 1184, + 0xADB5: 1185, + 0xADB7: 1186, + 0xADBB: 1187, + 0xADC1: 1188, + 0xADC2: 1189, + 0xADC5: 1190, + 0xADC9: 1191, + 0xADD7: 1192, + 0xADE1: 1193, + 0xADE5: 1194, + 0xADE9: 1195, + 0xADF1: 1196, + 0xADF5: 1197, + 0xADF6: 1198, + 0xAE41: 1199, + 0xAE45: 1200, + 0xAE49: 1201, + 0xAE51: 1202, + 0xAE53: 1203, + 0xAE55: 1204, + 0xAE61: 1205, + 0xAE62: 1206, + 0xAE65: 1207, + 0xAE69: 1208, + 0xAE71: 1209, + 0xAE73: 1210, + 0xAE75: 1211, + 0xAE77: 1212, + 0xAE81: 1213, + 0xAE82: 1214, + 0xAE85: 1215, + 0xAE88: 1216, + 0xAE89: 1217, + 0xAE91: 1218, + 0xAE93: 1219, + 0xAE95: 1220, + 0xAE97: 1221, + 0xAE99: 1222, + 0xAE9B: 1223, + 0xAE9C: 1224, + 0xAEA1: 1225, + 0xAEB6: 1226, + 0xAEC1: 1227, + 0xAEC2: 1228, + 0xAEC5: 1229, + 0xAEC9: 1230, + 0xAED1: 1231, + 0xAED7: 1232, + 0xAEE1: 1233, + 0xAEE2: 1234, + 0xAEE5: 1235, + 0xAEE9: 1236, + 0xAEF1: 1237, + 0xAEF3: 1238, + 0xAEF5: 1239, + 0xAEF7: 1240, + 0xAF41: 1241, + 0xAF42: 1242, + 0xAF49: 1243, + 0xAF51: 1244, + 0xAF55: 1245, + 0xAF57: 1246, + 0xAF61: 1247, + 0xAF62: 1248, + 0xAF65: 1249, + 0xAF69: 1250, + 0xAF6A: 1251, + 0xAF71: 1252, + 0xAF73: 1253, + 0xAF75: 1254, + 0xAF77: 1255, + 0xAFA1: 1256, + 0xAFA2: 1257, + 0xAFA5: 1258, + 0xAFA8: 1259, + 0xAFA9: 1260, + 0xAFB0: 1261, + 0xAFB1: 1262, + 0xAFB3: 1263, + 0xAFB5: 1264, + 0xAFB7: 1265, + 0xAFBC: 1266, + 0xB061: 1267, + 0xB062: 1268, + 0xB064: 1269, + 0xB065: 1270, + 0xB069: 1271, + 0xB071: 1272, + 0xB073: 1273, + 0xB076: 1274, + 0xB077: 1275, + 0xB07D: 1276, + 0xB081: 1277, + 0xB082: 1278, + 0xB085: 1279, + 0xB089: 1280, + 0xB091: 1281, + 0xB093: 1282, + 0xB096: 1283, + 0xB097: 1284, + 0xB0B7: 1285, + 0xB0E1: 1286, + 0xB0E2: 1287, + 0xB0E5: 1288, + 0xB0E9: 1289, + 0xB0EB: 1290, + 0xB0F1: 1291, + 0xB0F3: 1292, + 0xB0F6: 1293, + 0xB0F7: 1294, + 0xB141: 1295, + 0xB145: 1296, + 0xB149: 1297, + 0xB185: 1298, + 0xB1A1: 1299, + 0xB1A2: 1300, + 0xB1A5: 1301, + 0xB1A8: 1302, + 0xB1A9: 1303, + 0xB1AB: 1304, + 0xB1B1: 1305, + 0xB1B3: 1306, + 0xB1B7: 1307, + 0xB1C1: 1308, + 0xB1C2: 1309, + 0xB1C5: 1310, + 0xB1D6: 1311, + 0xB1E1: 1312, + 0xB1F6: 1313, + 0xB241: 1314, + 0xB245: 1315, + 0xB249: 1316, + 0xB251: 1317, + 0xB253: 1318, + 0xB261: 1319, + 0xB281: 1320, + 0xB282: 1321, + 0xB285: 1322, + 0xB289: 1323, + 0xB291: 1324, + 0xB293: 1325, + 0xB297: 1326, + 0xB2A1: 1327, + 0xB2B6: 1328, + 0xB2C1: 1329, + 0xB2E1: 1330, + 0xB2E5: 1331, + 0xB357: 1332, + 0xB361: 1333, + 0xB362: 1334, + 0xB365: 1335, + 0xB369: 1336, + 0xB36B: 1337, + 0xB370: 1338, + 0xB371: 1339, + 0xB373: 1340, + 0xB381: 1341, + 0xB385: 1342, + 0xB389: 1343, + 0xB391: 1344, + 0xB3A1: 1345, + 0xB3A2: 1346, + 0xB3A5: 1347, + 0xB3A9: 1348, + 0xB3B1: 1349, + 0xB3B3: 1350, + 0xB3B5: 1351, + 0xB3B7: 1352, + 0xB461: 1353, + 0xB462: 1354, + 0xB465: 1355, + 0xB466: 1356, + 0xB467: 1357, + 0xB469: 1358, + 0xB46A: 1359, + 0xB46B: 1360, + 0xB470: 1361, + 0xB471: 1362, + 0xB473: 1363, + 0xB475: 1364, + 0xB476: 1365, + 0xB477: 1366, + 0xB47B: 1367, + 0xB47C: 1368, + 0xB481: 1369, + 0xB482: 1370, + 0xB485: 1371, + 0xB489: 1372, + 0xB491: 1373, + 0xB493: 1374, + 0xB495: 1375, + 0xB496: 1376, + 0xB497: 1377, + 0xB4A1: 1378, + 0xB4A2: 1379, + 0xB4A5: 1380, + 0xB4A9: 1381, + 0xB4AC: 1382, + 0xB4B1: 1383, + 0xB4B3: 1384, + 0xB4B5: 1385, + 0xB4B7: 1386, + 0xB4BB: 1387, + 0xB4BD: 1388, + 0xB4C1: 1389, + 0xB4C5: 1390, + 0xB4C9: 1391, + 0xB4D3: 1392, + 0xB4E1: 1393, + 0xB4E2: 1394, + 0xB4E5: 1395, + 0xB4E6: 1396, + 0xB4E8: 1397, + 0xB4E9: 1398, + 0xB4EA: 1399, + 0xB4EB: 1400, + 0xB4F1: 1401, + 0xB4F3: 1402, + 0xB4F4: 1403, + 0xB4F5: 1404, + 0xB4F6: 1405, + 0xB4F7: 1406, + 0xB4F8: 1407, + 0xB4FA: 1408, + 0xB4FC: 1409, + 0xB541: 1410, + 0xB542: 1411, + 0xB545: 1412, + 0xB549: 1413, + 0xB551: 1414, + 0xB553: 1415, + 0xB555: 1416, + 0xB557: 1417, + 0xB561: 1418, + 0xB562: 1419, + 0xB563: 1420, + 0xB565: 1421, + 0xB569: 1422, + 0xB56B: 1423, + 0xB56C: 1424, + 0xB571: 1425, + 0xB573: 1426, + 0xB574: 1427, + 0xB575: 1428, + 0xB576: 1429, + 0xB577: 1430, + 0xB57B: 1431, + 0xB57C: 1432, + 0xB57D: 1433, + 0xB581: 1434, + 0xB585: 1435, + 0xB589: 1436, + 0xB591: 1437, + 0xB593: 1438, + 0xB595: 1439, + 0xB596: 1440, + 0xB5A1: 1441, + 0xB5A2: 1442, + 0xB5A5: 1443, + 0xB5A9: 1444, + 0xB5AA: 1445, + 0xB5AB: 1446, + 0xB5AD: 1447, + 0xB5B0: 1448, + 0xB5B1: 1449, + 0xB5B3: 1450, + 0xB5B5: 1451, + 0xB5B7: 1452, + 0xB5B9: 1453, + 0xB5C1: 1454, + 0xB5C2: 1455, + 0xB5C5: 1456, + 0xB5C9: 1457, + 0xB5D1: 1458, + 0xB5D3: 1459, + 0xB5D5: 1460, + 0xB5D6: 1461, + 0xB5D7: 1462, + 0xB5E1: 1463, + 0xB5E2: 1464, + 0xB5E5: 1465, + 0xB5F1: 1466, + 0xB5F5: 1467, + 0xB5F7: 1468, + 0xB641: 1469, + 0xB642: 1470, + 0xB645: 1471, + 0xB649: 1472, + 0xB651: 1473, + 0xB653: 1474, + 0xB655: 1475, + 0xB657: 1476, + 0xB661: 1477, + 0xB662: 1478, + 0xB665: 1479, + 0xB669: 1480, + 0xB671: 1481, + 0xB673: 1482, + 0xB675: 1483, + 0xB677: 1484, + 0xB681: 1485, + 0xB682: 1486, + 0xB685: 1487, + 0xB689: 1488, + 0xB68A: 1489, + 0xB68B: 1490, + 0xB691: 1491, + 0xB693: 1492, + 0xB695: 1493, + 0xB697: 1494, + 0xB6A1: 1495, + 0xB6A2: 1496, + 0xB6A5: 1497, + 0xB6A9: 1498, + 0xB6B1: 1499, + 0xB6B3: 1500, + 0xB6B6: 1501, + 0xB6B7: 1502, + 0xB6C1: 1503, + 0xB6C2: 1504, + 0xB6C5: 1505, + 0xB6C9: 1506, + 0xB6D1: 1507, + 0xB6D3: 1508, + 0xB6D7: 1509, + 0xB6E1: 1510, + 0xB6E2: 1511, + 0xB6E5: 1512, + 0xB6E9: 1513, + 0xB6F1: 1514, + 0xB6F3: 1515, + 0xB6F5: 1516, + 0xB6F7: 1517, + 0xB741: 1518, + 0xB742: 1519, + 0xB745: 1520, + 0xB749: 1521, + 0xB751: 1522, + 0xB753: 1523, + 0xB755: 1524, + 0xB757: 1525, + 0xB759: 1526, + 0xB761: 1527, + 0xB762: 1528, + 0xB765: 1529, + 0xB769: 1530, + 0xB76F: 1531, + 0xB771: 1532, + 0xB773: 1533, + 0xB775: 1534, + 0xB777: 1535, + 0xB778: 1536, + 0xB779: 1537, + 0xB77A: 1538, + 0xB77B: 1539, + 0xB77C: 1540, + 0xB77D: 1541, + 0xB781: 1542, + 0xB785: 1543, + 0xB789: 1544, + 0xB791: 1545, + 0xB795: 1546, + 0xB7A1: 1547, + 0xB7A2: 1548, + 0xB7A5: 1549, + 0xB7A9: 1550, + 0xB7AA: 1551, + 0xB7AB: 1552, + 0xB7B0: 1553, + 0xB7B1: 1554, + 0xB7B3: 1555, + 0xB7B5: 1556, + 0xB7B6: 1557, + 0xB7B7: 1558, + 0xB7B8: 1559, + 0xB7BC: 1560, + 0xB861: 1561, + 0xB862: 1562, + 0xB865: 1563, + 0xB867: 1564, + 0xB868: 1565, + 0xB869: 1566, + 0xB86B: 1567, + 0xB871: 1568, + 0xB873: 1569, + 0xB875: 1570, + 0xB876: 1571, + 0xB877: 1572, + 0xB878: 1573, + 0xB881: 1574, + 0xB882: 1575, + 0xB885: 1576, + 0xB889: 1577, + 0xB891: 1578, + 0xB893: 1579, + 0xB895: 1580, + 0xB896: 1581, + 0xB897: 1582, + 0xB8A1: 1583, + 0xB8A2: 1584, + 0xB8A5: 1585, + 0xB8A7: 1586, + 0xB8A9: 1587, + 0xB8B1: 1588, + 0xB8B7: 1589, + 0xB8C1: 1590, + 0xB8C5: 1591, + 0xB8C9: 1592, + 0xB8E1: 1593, + 0xB8E2: 1594, + 0xB8E5: 1595, + 0xB8E9: 1596, + 0xB8EB: 1597, + 0xB8F1: 1598, + 0xB8F3: 1599, + 0xB8F5: 1600, + 0xB8F7: 1601, + 0xB8F8: 1602, + 0xB941: 1603, + 0xB942: 1604, + 0xB945: 1605, + 0xB949: 1606, + 0xB951: 1607, + 0xB953: 1608, + 0xB955: 1609, + 0xB957: 1610, + 0xB961: 1611, + 0xB965: 1612, + 0xB969: 1613, + 0xB971: 1614, + 0xB973: 1615, + 0xB976: 1616, + 0xB977: 1617, + 0xB981: 1618, + 0xB9A1: 1619, + 0xB9A2: 1620, + 0xB9A5: 1621, + 0xB9A9: 1622, + 0xB9AB: 1623, + 0xB9B1: 1624, + 0xB9B3: 1625, + 0xB9B5: 1626, + 0xB9B7: 1627, + 0xB9B8: 1628, + 0xB9B9: 1629, + 0xB9BD: 1630, + 0xB9C1: 1631, + 0xB9C2: 1632, + 0xB9C9: 1633, + 0xB9D3: 1634, + 0xB9D5: 1635, + 0xB9D7: 1636, + 0xB9E1: 1637, + 0xB9F6: 1638, + 0xB9F7: 1639, + 0xBA41: 1640, + 0xBA45: 1641, + 0xBA49: 1642, + 0xBA51: 1643, + 0xBA53: 1644, + 0xBA55: 1645, + 0xBA57: 1646, + 0xBA61: 1647, + 0xBA62: 1648, + 0xBA65: 1649, + 0xBA77: 1650, + 0xBA81: 1651, + 0xBA82: 1652, + 0xBA85: 1653, + 0xBA89: 1654, + 0xBA8A: 1655, + 0xBA8B: 1656, + 0xBA91: 1657, + 0xBA93: 1658, + 0xBA95: 1659, + 0xBA97: 1660, + 0xBAA1: 1661, + 0xBAB6: 1662, + 0xBAC1: 1663, + 0xBAE1: 1664, + 0xBAE2: 1665, + 0xBAE5: 1666, + 0xBAE9: 1667, + 0xBAF1: 1668, + 0xBAF3: 1669, + 0xBAF5: 1670, + 0xBB41: 1671, + 0xBB45: 1672, + 0xBB49: 1673, + 0xBB51: 1674, + 0xBB61: 1675, + 0xBB62: 1676, + 0xBB65: 1677, + 0xBB69: 1678, + 0xBB71: 1679, + 0xBB73: 1680, + 0xBB75: 1681, + 0xBB77: 1682, + 0xBBA1: 1683, + 0xBBA2: 1684, + 0xBBA5: 1685, + 0xBBA8: 1686, + 0xBBA9: 1687, + 0xBBAB: 1688, + 0xBBB1: 1689, + 0xBBB3: 1690, + 0xBBB5: 1691, + 0xBBB7: 1692, + 0xBBB8: 1693, + 0xBBBB: 1694, + 0xBBBC: 1695, + 0xBC61: 1696, + 0xBC62: 1697, + 0xBC65: 1698, + 0xBC67: 1699, + 0xBC69: 1700, + 0xBC6C: 1701, + 0xBC71: 1702, + 0xBC73: 1703, + 0xBC75: 1704, + 0xBC76: 1705, + 0xBC77: 1706, + 0xBC81: 1707, + 0xBC82: 1708, + 0xBC85: 1709, + 0xBC89: 1710, + 0xBC91: 1711, + 0xBC93: 1712, + 0xBC95: 1713, + 0xBC96: 1714, + 0xBC97: 1715, + 0xBCA1: 1716, + 0xBCA5: 1717, + 0xBCB7: 1718, + 0xBCE1: 1719, + 0xBCE2: 1720, + 0xBCE5: 1721, + 0xBCE9: 1722, + 0xBCF1: 1723, + 0xBCF3: 1724, + 0xBCF5: 1725, + 0xBCF6: 1726, + 0xBCF7: 1727, + 0xBD41: 1728, + 0xBD57: 1729, + 0xBD61: 1730, + 0xBD76: 1731, + 0xBDA1: 1732, + 0xBDA2: 1733, + 0xBDA5: 1734, + 0xBDA9: 1735, + 0xBDB1: 1736, + 0xBDB3: 1737, + 0xBDB5: 1738, + 0xBDB7: 1739, + 0xBDB9: 1740, + 0xBDC1: 1741, + 0xBDC2: 1742, + 0xBDC9: 1743, + 0xBDD6: 1744, + 0xBDE1: 1745, + 0xBDF6: 1746, + 0xBE41: 1747, + 0xBE45: 1748, + 0xBE49: 1749, + 0xBE51: 1750, + 0xBE53: 1751, + 0xBE77: 1752, + 0xBE81: 1753, + 0xBE82: 1754, + 0xBE85: 1755, + 0xBE89: 1756, + 0xBE91: 1757, + 0xBE93: 1758, + 0xBE97: 1759, + 0xBEA1: 1760, + 0xBEB6: 1761, + 0xBEB7: 1762, + 0xBEE1: 1763, + 0xBF41: 1764, + 0xBF61: 1765, + 0xBF71: 1766, + 0xBF75: 1767, + 0xBF77: 1768, + 0xBFA1: 1769, + 0xBFA2: 1770, + 0xBFA5: 1771, + 0xBFA9: 1772, + 0xBFB1: 1773, + 0xBFB3: 1774, + 0xBFB7: 1775, + 0xBFB8: 1776, + 0xBFBD: 1777, + 0xC061: 1778, + 0xC062: 1779, + 0xC065: 1780, + 0xC067: 1781, + 0xC069: 1782, + 0xC071: 1783, + 0xC073: 1784, + 0xC075: 1785, + 0xC076: 1786, + 0xC077: 1787, + 0xC078: 1788, + 0xC081: 1789, + 0xC082: 1790, + 0xC085: 1791, + 0xC089: 1792, + 0xC091: 1793, + 0xC093: 1794, + 0xC095: 1795, + 0xC096: 1796, + 0xC097: 1797, + 0xC0A1: 1798, + 0xC0A5: 1799, + 0xC0A7: 1800, + 0xC0A9: 1801, + 0xC0B1: 1802, + 0xC0B7: 1803, + 0xC0E1: 1804, + 0xC0E2: 1805, + 0xC0E5: 1806, + 0xC0E9: 1807, + 0xC0F1: 1808, + 0xC0F3: 1809, + 0xC0F5: 1810, + 0xC0F6: 1811, + 0xC0F7: 1812, + 0xC141: 1813, + 0xC142: 1814, + 0xC145: 1815, + 0xC149: 1816, + 0xC151: 1817, + 0xC153: 1818, + 0xC155: 1819, + 0xC157: 1820, + 0xC161: 1821, + 0xC165: 1822, + 0xC176: 1823, + 0xC181: 1824, + 0xC185: 1825, + 0xC197: 1826, + 0xC1A1: 1827, + 0xC1A2: 1828, + 0xC1A5: 1829, + 0xC1A9: 1830, + 0xC1B1: 1831, + 0xC1B3: 1832, + 0xC1B5: 1833, + 0xC1B7: 1834, + 0xC1C1: 1835, + 0xC1C5: 1836, + 0xC1C9: 1837, + 0xC1D7: 1838, + 0xC241: 1839, + 0xC245: 1840, + 0xC249: 1841, + 0xC251: 1842, + 0xC253: 1843, + 0xC255: 1844, + 0xC257: 1845, + 0xC261: 1846, + 0xC271: 1847, + 0xC281: 1848, + 0xC282: 1849, + 0xC285: 1850, + 0xC289: 1851, + 0xC291: 1852, + 0xC293: 1853, + 0xC295: 1854, + 0xC297: 1855, + 0xC2A1: 1856, + 0xC2B6: 1857, + 0xC2C1: 1858, + 0xC2C5: 1859, + 0xC2E1: 1860, + 0xC2E5: 1861, + 0xC2E9: 1862, + 0xC2F1: 1863, + 0xC2F3: 1864, + 0xC2F5: 1865, + 0xC2F7: 1866, + 0xC341: 1867, + 0xC345: 1868, + 0xC349: 1869, + 0xC351: 1870, + 0xC357: 1871, + 0xC361: 1872, + 0xC362: 1873, + 0xC365: 1874, + 0xC369: 1875, + 0xC371: 1876, + 0xC373: 1877, + 0xC375: 1878, + 0xC377: 1879, + 0xC3A1: 1880, + 0xC3A2: 1881, + 0xC3A5: 1882, + 0xC3A8: 1883, + 0xC3A9: 1884, + 0xC3AA: 1885, + 0xC3B1: 1886, + 0xC3B3: 1887, + 0xC3B5: 1888, + 0xC3B7: 1889, + 0xC461: 1890, + 0xC462: 1891, + 0xC465: 1892, + 0xC469: 1893, + 0xC471: 1894, + 0xC473: 1895, + 0xC475: 1896, + 0xC477: 1897, + 0xC481: 1898, + 0xC482: 1899, + 0xC485: 1900, + 0xC489: 1901, + 0xC491: 1902, + 0xC493: 1903, + 0xC495: 1904, + 0xC496: 1905, + 0xC497: 1906, + 0xC4A1: 1907, + 0xC4A2: 1908, + 0xC4B7: 1909, + 0xC4E1: 1910, + 0xC4E2: 1911, + 0xC4E5: 1912, + 0xC4E8: 1913, + 0xC4E9: 1914, + 0xC4F1: 1915, + 0xC4F3: 1916, + 0xC4F5: 1917, + 0xC4F6: 1918, + 0xC4F7: 1919, + 0xC541: 1920, + 0xC542: 1921, + 0xC545: 1922, + 0xC549: 1923, + 0xC551: 1924, + 0xC553: 1925, + 0xC555: 1926, + 0xC557: 1927, + 0xC561: 1928, + 0xC565: 1929, + 0xC569: 1930, + 0xC571: 1931, + 0xC573: 1932, + 0xC575: 1933, + 0xC576: 1934, + 0xC577: 1935, + 0xC581: 1936, + 0xC5A1: 1937, + 0xC5A2: 1938, + 0xC5A5: 1939, + 0xC5A9: 1940, + 0xC5B1: 1941, + 0xC5B3: 1942, + 0xC5B5: 1943, + 0xC5B7: 1944, + 0xC5C1: 1945, + 0xC5C2: 1946, + 0xC5C5: 1947, + 0xC5C9: 1948, + 0xC5D1: 1949, + 0xC5D7: 1950, + 0xC5E1: 1951, + 0xC5F7: 1952, + 0xC641: 1953, + 0xC649: 1954, + 0xC661: 1955, + 0xC681: 1956, + 0xC682: 1957, + 0xC685: 1958, + 0xC689: 1959, + 0xC691: 1960, + 0xC693: 1961, + 0xC695: 1962, + 0xC697: 1963, + 0xC6A1: 1964, + 0xC6A5: 1965, + 0xC6A9: 1966, + 0xC6B7: 1967, + 0xC6C1: 1968, + 0xC6D7: 1969, + 0xC6E1: 1970, + 0xC6E2: 1971, + 0xC6E5: 1972, + 0xC6E9: 1973, + 0xC6F1: 1974, + 0xC6F3: 1975, + 0xC6F5: 1976, + 0xC6F7: 1977, + 0xC741: 1978, + 0xC745: 1979, + 0xC749: 1980, + 0xC751: 1981, + 0xC761: 1982, + 0xC762: 1983, + 0xC765: 1984, + 0xC769: 1985, + 0xC771: 1986, + 0xC773: 1987, + 0xC777: 1988, + 0xC7A1: 1989, + 0xC7A2: 1990, + 0xC7A5: 1991, + 0xC7A9: 1992, + 0xC7B1: 1993, + 0xC7B3: 1994, + 0xC7B5: 1995, + 0xC7B7: 1996, + 0xC861: 1997, + 0xC862: 1998, + 0xC865: 1999, + 0xC869: 2000, + 0xC86A: 2001, + 0xC871: 2002, + 0xC873: 2003, + 0xC875: 2004, + 0xC876: 2005, + 0xC877: 2006, + 0xC881: 2007, + 0xC882: 2008, + 0xC885: 2009, + 0xC889: 2010, + 0xC891: 2011, + 0xC893: 2012, + 0xC895: 2013, + 0xC896: 2014, + 0xC897: 2015, + 0xC8A1: 2016, + 0xC8B7: 2017, + 0xC8E1: 2018, + 0xC8E2: 2019, + 0xC8E5: 2020, + 0xC8E9: 2021, + 0xC8EB: 2022, + 0xC8F1: 2023, + 0xC8F3: 2024, + 0xC8F5: 2025, + 0xC8F6: 2026, + 0xC8F7: 2027, + 0xC941: 2028, + 0xC942: 2029, + 0xC945: 2030, + 0xC949: 2031, + 0xC951: 2032, + 0xC953: 2033, + 0xC955: 2034, + 0xC957: 2035, + 0xC961: 2036, + 0xC965: 2037, + 0xC976: 2038, + 0xC981: 2039, + 0xC985: 2040, + 0xC9A1: 2041, + 0xC9A2: 2042, + 0xC9A5: 2043, + 0xC9A9: 2044, + 0xC9B1: 2045, + 0xC9B3: 2046, + 0xC9B5: 2047, + 0xC9B7: 2048, + 0xC9BC: 2049, + 0xC9C1: 2050, + 0xC9C5: 2051, + 0xC9E1: 2052, + 0xCA41: 2053, + 0xCA45: 2054, + 0xCA55: 2055, + 0xCA57: 2056, + 0xCA61: 2057, + 0xCA81: 2058, + 0xCA82: 2059, + 0xCA85: 2060, + 0xCA89: 2061, + 0xCA91: 2062, + 0xCA93: 2063, + 0xCA95: 2064, + 0xCA97: 2065, + 0xCAA1: 2066, + 0xCAB6: 2067, + 0xCAC1: 2068, + 0xCAE1: 2069, + 0xCAE2: 2070, + 0xCAE5: 2071, + 0xCAE9: 2072, + 0xCAF1: 2073, + 0xCAF3: 2074, + 0xCAF7: 2075, + 0xCB41: 2076, + 0xCB45: 2077, + 0xCB49: 2078, + 0xCB51: 2079, + 0xCB57: 2080, + 0xCB61: 2081, + 0xCB62: 2082, + 0xCB65: 2083, + 0xCB68: 2084, + 0xCB69: 2085, + 0xCB6B: 2086, + 0xCB71: 2087, + 0xCB73: 2088, + 0xCB75: 2089, + 0xCB81: 2090, + 0xCB85: 2091, + 0xCB89: 2092, + 0xCB91: 2093, + 0xCB93: 2094, + 0xCBA1: 2095, + 0xCBA2: 2096, + 0xCBA5: 2097, + 0xCBA9: 2098, + 0xCBB1: 2099, + 0xCBB3: 2100, + 0xCBB5: 2101, + 0xCBB7: 2102, + 0xCC61: 2103, + 0xCC62: 2104, + 0xCC63: 2105, + 0xCC65: 2106, + 0xCC69: 2107, + 0xCC6B: 2108, + 0xCC71: 2109, + 0xCC73: 2110, + 0xCC75: 2111, + 0xCC76: 2112, + 0xCC77: 2113, + 0xCC7B: 2114, + 0xCC81: 2115, + 0xCC82: 2116, + 0xCC85: 2117, + 0xCC89: 2118, + 0xCC91: 2119, + 0xCC93: 2120, + 0xCC95: 2121, + 0xCC96: 2122, + 0xCC97: 2123, + 0xCCA1: 2124, + 0xCCA2: 2125, + 0xCCE1: 2126, + 0xCCE2: 2127, + 0xCCE5: 2128, + 0xCCE9: 2129, + 0xCCF1: 2130, + 0xCCF3: 2131, + 0xCCF5: 2132, + 0xCCF6: 2133, + 0xCCF7: 2134, + 0xCD41: 2135, + 0xCD42: 2136, + 0xCD45: 2137, + 0xCD49: 2138, + 0xCD51: 2139, + 0xCD53: 2140, + 0xCD55: 2141, + 0xCD57: 2142, + 0xCD61: 2143, + 0xCD65: 2144, + 0xCD69: 2145, + 0xCD71: 2146, + 0xCD73: 2147, + 0xCD76: 2148, + 0xCD77: 2149, + 0xCD81: 2150, + 0xCD89: 2151, + 0xCD93: 2152, + 0xCD95: 2153, + 0xCDA1: 2154, + 0xCDA2: 2155, + 0xCDA5: 2156, + 0xCDA9: 2157, + 0xCDB1: 2158, + 0xCDB3: 2159, + 0xCDB5: 2160, + 0xCDB7: 2161, + 0xCDC1: 2162, + 0xCDD7: 2163, + 0xCE41: 2164, + 0xCE45: 2165, + 0xCE61: 2166, + 0xCE65: 2167, + 0xCE69: 2168, + 0xCE73: 2169, + 0xCE75: 2170, + 0xCE81: 2171, + 0xCE82: 2172, + 0xCE85: 2173, + 0xCE88: 2174, + 0xCE89: 2175, + 0xCE8B: 2176, + 0xCE91: 2177, + 0xCE93: 2178, + 0xCE95: 2179, + 0xCE97: 2180, + 0xCEA1: 2181, + 0xCEB7: 2182, + 0xCEE1: 2183, + 0xCEE5: 2184, + 0xCEE9: 2185, + 0xCEF1: 2186, + 0xCEF5: 2187, + 0xCF41: 2188, + 0xCF45: 2189, + 0xCF49: 2190, + 0xCF51: 2191, + 0xCF55: 2192, + 0xCF57: 2193, + 0xCF61: 2194, + 0xCF65: 2195, + 0xCF69: 2196, + 0xCF71: 2197, + 0xCF73: 2198, + 0xCF75: 2199, + 0xCFA1: 2200, + 0xCFA2: 2201, + 0xCFA5: 2202, + 0xCFA9: 2203, + 0xCFB1: 2204, + 0xCFB3: 2205, + 0xCFB5: 2206, + 0xCFB7: 2207, + 0xD061: 2208, + 0xD062: 2209, + 0xD065: 2210, + 0xD069: 2211, + 0xD06E: 2212, + 0xD071: 2213, + 0xD073: 2214, + 0xD075: 2215, + 0xD077: 2216, + 0xD081: 2217, + 0xD082: 2218, + 0xD085: 2219, + 0xD089: 2220, + 0xD091: 2221, + 0xD093: 2222, + 0xD095: 2223, + 0xD096: 2224, + 0xD097: 2225, + 0xD0A1: 2226, + 0xD0B7: 2227, + 0xD0E1: 2228, + 0xD0E2: 2229, + 0xD0E5: 2230, + 0xD0E9: 2231, + 0xD0EB: 2232, + 0xD0F1: 2233, + 0xD0F3: 2234, + 0xD0F5: 2235, + 0xD0F7: 2236, + 0xD141: 2237, + 0xD142: 2238, + 0xD145: 2239, + 0xD149: 2240, + 0xD151: 2241, + 0xD153: 2242, + 0xD155: 2243, + 0xD157: 2244, + 0xD161: 2245, + 0xD162: 2246, + 0xD165: 2247, + 0xD169: 2248, + 0xD171: 2249, + 0xD173: 2250, + 0xD175: 2251, + 0xD176: 2252, + 0xD177: 2253, + 0xD181: 2254, + 0xD185: 2255, + 0xD189: 2256, + 0xD193: 2257, + 0xD1A1: 2258, + 0xD1A2: 2259, + 0xD1A5: 2260, + 0xD1A9: 2261, + 0xD1AE: 2262, + 0xD1B1: 2263, + 0xD1B3: 2264, + 0xD1B5: 2265, + 0xD1B7: 2266, + 0xD1BB: 2267, + 0xD1C1: 2268, + 0xD1C2: 2269, + 0xD1C5: 2270, + 0xD1C9: 2271, + 0xD1D5: 2272, + 0xD1D7: 2273, + 0xD1E1: 2274, + 0xD1E2: 2275, + 0xD1E5: 2276, + 0xD1F5: 2277, + 0xD1F7: 2278, + 0xD241: 2279, + 0xD242: 2280, + 0xD245: 2281, + 0xD249: 2282, + 0xD253: 2283, + 0xD255: 2284, + 0xD257: 2285, + 0xD261: 2286, + 0xD265: 2287, + 0xD269: 2288, + 0xD273: 2289, + 0xD275: 2290, + 0xD281: 2291, + 0xD282: 2292, + 0xD285: 2293, + 0xD289: 2294, + 0xD28E: 2295, + 0xD291: 2296, + 0xD295: 2297, + 0xD297: 2298, + 0xD2A1: 2299, + 0xD2A5: 2300, + 0xD2A9: 2301, + 0xD2B1: 2302, + 0xD2B7: 2303, + 0xD2C1: 2304, + 0xD2C2: 2305, + 0xD2C5: 2306, + 0xD2C9: 2307, + 0xD2D7: 2308, + 0xD2E1: 2309, + 0xD2E2: 2310, + 0xD2E5: 2311, + 0xD2E9: 2312, + 0xD2F1: 2313, + 0xD2F3: 2314, + 0xD2F5: 2315, + 0xD2F7: 2316, + 0xD341: 2317, + 0xD342: 2318, + 0xD345: 2319, + 0xD349: 2320, + 0xD351: 2321, + 0xD355: 2322, + 0xD357: 2323, + 0xD361: 2324, + 0xD362: 2325, + 0xD365: 2326, + 0xD367: 2327, + 0xD368: 2328, + 0xD369: 2329, + 0xD36A: 2330, + 0xD371: 2331, + 0xD373: 2332, + 0xD375: 2333, + 0xD377: 2334, + 0xD37B: 2335, + 0xD381: 2336, + 0xD385: 2337, + 0xD389: 2338, + 0xD391: 2339, + 0xD393: 2340, + 0xD397: 2341, + 0xD3A1: 2342, + 0xD3A2: 2343, + 0xD3A5: 2344, + 0xD3A9: 2345, + 0xD3B1: 2346, + 0xD3B3: 2347, + 0xD3B5: 2348, + 0xD3B7: 2349, +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/johabprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/johabprober.py new file mode 100644 index 0000000..d7364ba --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/johabprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import JOHABDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import JOHAB_SM_MODEL + + +class JOHABProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(JOHAB_SM_MODEL) + self.distribution_analyzer = JOHABDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "Johab" + + @property + def language(self) -> str: + return "Korean" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/jpcntx.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/jpcntx.py new file mode 100644 index 0000000..2f53bdd --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/jpcntx.py @@ -0,0 +1,238 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Tuple, Union + +# This is hiragana 2-char sequence table, the number in each cell represents its frequency category +# fmt: off +jp2_char_context = ( + (0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), + (2, 4, 0, 4, 0, 3, 0, 4, 0, 3, 4, 4, 4, 2, 4, 3, 3, 4, 3, 2, 3, 3, 4, 2, 3, 3, 3, 2, 4, 1, 4, 3, 3, 1, 5, 4, 3, 4, 3, 4, 3, 5, 3, 0, 3, 5, 4, 2, 0, 3, 1, 0, 3, 3, 0, 3, 3, 0, 1, 1, 0, 4, 3, 0, 3, 3, 0, 4, 0, 2, 0, 3, 5, 5, 5, 5, 4, 0, 4, 1, 0, 3, 4), + (0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2), + (0, 4, 0, 5, 0, 5, 0, 4, 0, 4, 5, 4, 4, 3, 5, 3, 5, 1, 5, 3, 4, 3, 4, 4, 3, 4, 3, 3, 4, 3, 5, 4, 4, 3, 5, 5, 3, 5, 5, 5, 3, 5, 5, 3, 4, 5, 5, 3, 1, 3, 2, 0, 3, 4, 0, 4, 2, 0, 4, 2, 1, 5, 3, 2, 3, 5, 0, 4, 0, 2, 0, 5, 4, 4, 5, 4, 5, 0, 4, 0, 0, 4, 4), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (0, 3, 0, 4, 0, 3, 0, 3, 0, 4, 5, 4, 3, 3, 3, 3, 4, 3, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 4, 4, 4, 4, 5, 3, 4, 4, 3, 4, 5, 5, 4, 5, 5, 1, 4, 5, 4, 3, 0, 3, 3, 1, 3, 3, 0, 4, 4, 0, 3, 3, 1, 5, 3, 3, 3, 5, 0, 4, 0, 3, 0, 4, 4, 3, 4, 3, 3, 0, 4, 1, 1, 3, 4), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (0, 4, 0, 3, 0, 3, 0, 4, 0, 3, 4, 4, 3, 2, 2, 1, 2, 1, 3, 1, 3, 3, 3, 3, 3, 4, 3, 1, 3, 3, 5, 3, 3, 0, 4, 3, 0, 5, 4, 3, 3, 5, 4, 4, 3, 4, 4, 5, 0, 1, 2, 0, 1, 2, 0, 2, 2, 0, 1, 0, 0, 5, 2, 2, 1, 4, 0, 3, 0, 1, 0, 4, 4, 3, 5, 4, 3, 0, 2, 1, 0, 4, 3), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (0, 3, 0, 5, 0, 4, 0, 2, 1, 4, 4, 2, 4, 1, 4, 2, 4, 2, 4, 3, 3, 3, 4, 3, 3, 3, 3, 1, 4, 2, 3, 3, 3, 1, 4, 4, 1, 1, 1, 4, 3, 3, 2, 0, 2, 4, 3, 2, 0, 3, 3, 0, 3, 1, 1, 0, 0, 0, 3, 3, 0, 4, 2, 2, 3, 4, 0, 4, 0, 3, 0, 4, 4, 5, 3, 4, 4, 0, 3, 0, 0, 1, 4), + (1, 4, 0, 4, 0, 4, 0, 4, 0, 3, 5, 4, 4, 3, 4, 3, 5, 4, 3, 3, 4, 3, 5, 4, 4, 4, 4, 3, 4, 2, 4, 3, 3, 1, 5, 4, 3, 2, 4, 5, 4, 5, 5, 4, 4, 5, 4, 4, 0, 3, 2, 2, 3, 3, 0, 4, 3, 1, 3, 2, 1, 4, 3, 3, 4, 5, 0, 3, 0, 2, 0, 4, 5, 5, 4, 5, 4, 0, 4, 0, 0, 5, 4), + (0, 5, 0, 5, 0, 4, 0, 3, 0, 4, 4, 3, 4, 3, 3, 3, 4, 0, 4, 4, 4, 3, 4, 3, 4, 3, 3, 1, 4, 2, 4, 3, 4, 0, 5, 4, 1, 4, 5, 4, 4, 5, 3, 2, 4, 3, 4, 3, 2, 4, 1, 3, 3, 3, 2, 3, 2, 0, 4, 3, 3, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 5, 4, 4, 4, 3, 0, 4, 1, 0, 1, 3), + (0, 3, 1, 4, 0, 3, 0, 2, 0, 3, 4, 4, 3, 1, 4, 2, 3, 3, 4, 3, 4, 3, 4, 3, 4, 4, 3, 2, 3, 1, 5, 4, 4, 1, 4, 4, 3, 5, 4, 4, 3, 5, 5, 4, 3, 4, 4, 3, 1, 2, 3, 1, 2, 2, 0, 3, 2, 0, 3, 1, 0, 5, 3, 3, 3, 4, 3, 3, 3, 3, 4, 4, 4, 4, 5, 4, 2, 0, 3, 3, 2, 4, 3), + (0, 2, 0, 3, 0, 1, 0, 1, 0, 0, 3, 2, 0, 0, 2, 0, 1, 0, 2, 1, 3, 3, 3, 1, 2, 3, 1, 0, 1, 0, 4, 2, 1, 1, 3, 3, 0, 4, 3, 3, 1, 4, 3, 3, 0, 3, 3, 2, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 4, 1, 0, 2, 3, 2, 2, 2, 1, 3, 3, 3, 4, 4, 3, 2, 0, 3, 1, 0, 3, 3), + (0, 4, 0, 4, 0, 3, 0, 3, 0, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 3, 4, 2, 4, 3, 4, 3, 3, 2, 4, 3, 4, 5, 4, 1, 4, 5, 3, 5, 4, 5, 3, 5, 4, 0, 3, 5, 5, 3, 1, 3, 3, 2, 2, 3, 0, 3, 4, 1, 3, 3, 2, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 5, 4, 4, 5, 3, 0, 4, 1, 0, 3, 4), + (0, 2, 0, 3, 0, 3, 0, 0, 0, 2, 2, 2, 1, 0, 1, 0, 0, 0, 3, 0, 3, 0, 3, 0, 1, 3, 1, 0, 3, 1, 3, 3, 3, 1, 3, 3, 3, 0, 1, 3, 1, 3, 4, 0, 0, 3, 1, 1, 0, 3, 2, 0, 0, 0, 0, 1, 3, 0, 1, 0, 0, 3, 3, 2, 0, 3, 0, 0, 0, 0, 0, 3, 4, 3, 4, 3, 3, 0, 3, 0, 0, 2, 3), + (2, 3, 0, 3, 0, 2, 0, 1, 0, 3, 3, 4, 3, 1, 3, 1, 1, 1, 3, 1, 4, 3, 4, 3, 3, 3, 0, 0, 3, 1, 5, 4, 3, 1, 4, 3, 2, 5, 5, 4, 4, 4, 4, 3, 3, 4, 4, 4, 0, 2, 1, 1, 3, 2, 0, 1, 2, 0, 0, 1, 0, 4, 1, 3, 3, 3, 0, 3, 0, 1, 0, 4, 4, 4, 5, 5, 3, 0, 2, 0, 0, 4, 4), + (0, 2, 0, 1, 0, 3, 1, 3, 0, 2, 3, 3, 3, 0, 3, 1, 0, 0, 3, 0, 3, 2, 3, 1, 3, 2, 1, 1, 0, 0, 4, 2, 1, 0, 2, 3, 1, 4, 3, 2, 0, 4, 4, 3, 1, 3, 1, 3, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4, 1, 1, 1, 2, 0, 3, 0, 0, 0, 3, 4, 2, 4, 3, 2, 0, 1, 0, 0, 3, 3), + (0, 1, 0, 4, 0, 5, 0, 4, 0, 2, 4, 4, 2, 3, 3, 2, 3, 3, 5, 3, 3, 3, 4, 3, 4, 2, 3, 0, 4, 3, 3, 3, 4, 1, 4, 3, 2, 1, 5, 5, 3, 4, 5, 1, 3, 5, 4, 2, 0, 3, 3, 0, 1, 3, 0, 4, 2, 0, 1, 3, 1, 4, 3, 3, 3, 3, 0, 3, 0, 1, 0, 3, 4, 4, 4, 5, 5, 0, 3, 0, 1, 4, 5), + (0, 2, 0, 3, 0, 3, 0, 0, 0, 2, 3, 1, 3, 0, 4, 0, 1, 1, 3, 0, 3, 4, 3, 2, 3, 1, 0, 3, 3, 2, 3, 1, 3, 0, 2, 3, 0, 2, 1, 4, 1, 2, 2, 0, 0, 3, 3, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 2, 2, 0, 3, 2, 1, 3, 3, 0, 2, 0, 2, 0, 0, 3, 3, 1, 2, 4, 0, 3, 0, 2, 2, 3), + (2, 4, 0, 5, 0, 4, 0, 4, 0, 2, 4, 4, 4, 3, 4, 3, 3, 3, 1, 2, 4, 3, 4, 3, 4, 4, 5, 0, 3, 3, 3, 3, 2, 0, 4, 3, 1, 4, 3, 4, 1, 4, 4, 3, 3, 4, 4, 3, 1, 2, 3, 0, 4, 2, 0, 4, 1, 0, 3, 3, 0, 4, 3, 3, 3, 4, 0, 4, 0, 2, 0, 3, 5, 3, 4, 5, 2, 0, 3, 0, 0, 4, 5), + (0, 3, 0, 4, 0, 1, 0, 1, 0, 1, 3, 2, 2, 1, 3, 0, 3, 0, 2, 0, 2, 0, 3, 0, 2, 0, 0, 0, 1, 0, 1, 1, 0, 0, 3, 1, 0, 0, 0, 4, 0, 3, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 2, 2, 3, 1, 0, 3, 0, 0, 0, 1, 4, 4, 4, 3, 0, 0, 4, 0, 0, 1, 4), + (1, 4, 1, 5, 0, 3, 0, 3, 0, 4, 5, 4, 4, 3, 5, 3, 3, 4, 4, 3, 4, 1, 3, 3, 3, 3, 2, 1, 4, 1, 5, 4, 3, 1, 4, 4, 3, 5, 4, 4, 3, 5, 4, 3, 3, 4, 4, 4, 0, 3, 3, 1, 2, 3, 0, 3, 1, 0, 3, 3, 0, 5, 4, 4, 4, 4, 4, 4, 3, 3, 5, 4, 4, 3, 3, 5, 4, 0, 3, 2, 0, 4, 4), + (0, 2, 0, 3, 0, 1, 0, 0, 0, 1, 3, 3, 3, 2, 4, 1, 3, 0, 3, 1, 3, 0, 2, 2, 1, 1, 0, 0, 2, 0, 4, 3, 1, 0, 4, 3, 0, 4, 4, 4, 1, 4, 3, 1, 1, 3, 3, 1, 0, 2, 0, 0, 1, 3, 0, 0, 0, 0, 2, 0, 0, 4, 3, 2, 4, 3, 5, 4, 3, 3, 3, 4, 3, 3, 4, 3, 3, 0, 2, 1, 0, 3, 3), + (0, 2, 0, 4, 0, 3, 0, 2, 0, 2, 5, 5, 3, 4, 4, 4, 4, 1, 4, 3, 3, 0, 4, 3, 4, 3, 1, 3, 3, 2, 4, 3, 0, 3, 4, 3, 0, 3, 4, 4, 2, 4, 4, 0, 4, 5, 3, 3, 2, 2, 1, 1, 1, 2, 0, 1, 5, 0, 3, 3, 2, 4, 3, 3, 3, 4, 0, 3, 0, 2, 0, 4, 4, 3, 5, 5, 0, 0, 3, 0, 2, 3, 3), + (0, 3, 0, 4, 0, 3, 0, 1, 0, 3, 4, 3, 3, 1, 3, 3, 3, 0, 3, 1, 3, 0, 4, 3, 3, 1, 1, 0, 3, 0, 3, 3, 0, 0, 4, 4, 0, 1, 5, 4, 3, 3, 5, 0, 3, 3, 4, 3, 0, 2, 0, 1, 1, 1, 0, 1, 3, 0, 1, 2, 1, 3, 3, 2, 3, 3, 0, 3, 0, 1, 0, 1, 3, 3, 4, 4, 1, 0, 1, 2, 2, 1, 3), + (0, 1, 0, 4, 0, 4, 0, 3, 0, 1, 3, 3, 3, 2, 3, 1, 1, 0, 3, 0, 3, 3, 4, 3, 2, 4, 2, 0, 1, 0, 4, 3, 2, 0, 4, 3, 0, 5, 3, 3, 2, 4, 4, 4, 3, 3, 3, 4, 0, 1, 3, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 2, 3, 3, 3, 0, 3, 0, 0, 0, 4, 4, 4, 5, 3, 2, 0, 3, 3, 0, 3, 5), + (0, 2, 0, 3, 0, 0, 0, 3, 0, 1, 3, 0, 2, 0, 0, 0, 1, 0, 3, 1, 1, 3, 3, 0, 0, 3, 0, 0, 3, 0, 2, 3, 1, 0, 3, 1, 0, 3, 3, 2, 0, 4, 2, 2, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 1, 0, 1, 0, 0, 0, 1, 3, 1, 2, 0, 0, 0, 1, 0, 0, 1, 4), + (0, 3, 0, 3, 0, 5, 0, 1, 0, 2, 4, 3, 1, 3, 3, 2, 1, 1, 5, 2, 1, 0, 5, 1, 2, 0, 0, 0, 3, 3, 2, 2, 3, 2, 4, 3, 0, 0, 3, 3, 1, 3, 3, 0, 2, 5, 3, 4, 0, 3, 3, 0, 1, 2, 0, 2, 2, 0, 3, 2, 0, 2, 2, 3, 3, 3, 0, 2, 0, 1, 0, 3, 4, 4, 2, 5, 4, 0, 3, 0, 0, 3, 5), + (0, 3, 0, 3, 0, 3, 0, 1, 0, 3, 3, 3, 3, 0, 3, 0, 2, 0, 2, 1, 1, 0, 2, 0, 1, 0, 0, 0, 2, 1, 0, 0, 1, 0, 3, 2, 0, 0, 3, 3, 1, 2, 3, 1, 0, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 3, 1, 2, 3, 0, 3, 0, 1, 0, 3, 2, 1, 0, 4, 3, 0, 1, 1, 0, 3, 3), + (0, 4, 0, 5, 0, 3, 0, 3, 0, 4, 5, 5, 4, 3, 5, 3, 4, 3, 5, 3, 3, 2, 5, 3, 4, 4, 4, 3, 4, 3, 4, 5, 5, 3, 4, 4, 3, 4, 4, 5, 4, 4, 4, 3, 4, 5, 5, 4, 2, 3, 4, 2, 3, 4, 0, 3, 3, 1, 4, 3, 2, 4, 3, 3, 5, 5, 0, 3, 0, 3, 0, 5, 5, 5, 5, 4, 4, 0, 4, 0, 1, 4, 4), + (0, 4, 0, 4, 0, 3, 0, 3, 0, 3, 5, 4, 4, 2, 3, 2, 5, 1, 3, 2, 5, 1, 4, 2, 3, 2, 3, 3, 4, 3, 3, 3, 3, 2, 5, 4, 1, 3, 3, 5, 3, 4, 4, 0, 4, 4, 3, 1, 1, 3, 1, 0, 2, 3, 0, 2, 3, 0, 3, 0, 0, 4, 3, 1, 3, 4, 0, 3, 0, 2, 0, 4, 4, 4, 3, 4, 5, 0, 4, 0, 0, 3, 4), + (0, 3, 0, 3, 0, 3, 1, 2, 0, 3, 4, 4, 3, 3, 3, 0, 2, 2, 4, 3, 3, 1, 3, 3, 3, 1, 1, 0, 3, 1, 4, 3, 2, 3, 4, 4, 2, 4, 4, 4, 3, 4, 4, 3, 2, 4, 4, 3, 1, 3, 3, 1, 3, 3, 0, 4, 1, 0, 2, 2, 1, 4, 3, 2, 3, 3, 5, 4, 3, 3, 5, 4, 4, 3, 3, 0, 4, 0, 3, 2, 2, 4, 4), + (0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 2, 0, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 1, 1, 3, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 3, 4, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1), + (0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 4, 1, 4, 0, 3, 0, 4, 0, 3, 0, 4, 0, 3, 0, 3, 0, 4, 1, 5, 1, 4, 0, 0, 3, 0, 5, 0, 5, 2, 0, 1, 0, 0, 0, 2, 1, 4, 0, 1, 3, 0, 0, 3, 0, 0, 3, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0), + (1, 4, 0, 5, 0, 3, 0, 2, 0, 3, 5, 4, 4, 3, 4, 3, 5, 3, 4, 3, 3, 0, 4, 3, 3, 3, 3, 3, 3, 2, 4, 4, 3, 1, 3, 4, 4, 5, 4, 4, 3, 4, 4, 1, 3, 5, 4, 3, 3, 3, 1, 2, 2, 3, 3, 1, 3, 1, 3, 3, 3, 5, 3, 3, 4, 5, 0, 3, 0, 3, 0, 3, 4, 3, 4, 4, 3, 0, 3, 0, 2, 4, 3), + (0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 4, 0, 4, 1, 4, 2, 4, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 3, 1, 1, 1, 0, 3, 0, 0, 0, 1, 2, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 3, 2, 0, 2, 2, 0, 1, 0, 0, 0, 2, 3, 2, 3, 3, 0, 0, 0, 0, 2, 1, 0), + (0, 5, 1, 5, 0, 3, 0, 3, 0, 5, 4, 4, 5, 1, 5, 3, 3, 0, 4, 3, 4, 3, 5, 3, 4, 3, 3, 2, 4, 3, 4, 3, 3, 0, 3, 3, 1, 4, 4, 3, 4, 4, 4, 3, 4, 5, 5, 3, 2, 3, 1, 1, 3, 3, 1, 3, 1, 1, 3, 3, 2, 4, 5, 3, 3, 5, 0, 4, 0, 3, 0, 4, 4, 3, 5, 3, 3, 0, 3, 4, 0, 4, 3), + (0, 5, 0, 5, 0, 3, 0, 2, 0, 4, 4, 3, 5, 2, 4, 3, 3, 3, 4, 4, 4, 3, 5, 3, 5, 3, 3, 1, 4, 0, 4, 3, 3, 0, 3, 3, 0, 4, 4, 4, 4, 5, 4, 3, 3, 5, 5, 3, 2, 3, 1, 2, 3, 2, 0, 1, 0, 0, 3, 2, 2, 4, 4, 3, 1, 5, 0, 4, 0, 3, 0, 4, 3, 1, 3, 2, 1, 0, 3, 3, 0, 3, 3), + (0, 4, 0, 5, 0, 5, 0, 4, 0, 4, 5, 5, 5, 3, 4, 3, 3, 2, 5, 4, 4, 3, 5, 3, 5, 3, 4, 0, 4, 3, 4, 4, 3, 2, 4, 4, 3, 4, 5, 4, 4, 5, 5, 0, 3, 5, 5, 4, 1, 3, 3, 2, 3, 3, 1, 3, 1, 0, 4, 3, 1, 4, 4, 3, 4, 5, 0, 4, 0, 2, 0, 4, 3, 4, 4, 3, 3, 0, 4, 0, 0, 5, 5), + (0, 4, 0, 4, 0, 5, 0, 1, 1, 3, 3, 4, 4, 3, 4, 1, 3, 0, 5, 1, 3, 0, 3, 1, 3, 1, 1, 0, 3, 0, 3, 3, 4, 0, 4, 3, 0, 4, 4, 4, 3, 4, 4, 0, 3, 5, 4, 1, 0, 3, 0, 0, 2, 3, 0, 3, 1, 0, 3, 1, 0, 3, 2, 1, 3, 5, 0, 3, 0, 1, 0, 3, 2, 3, 3, 4, 4, 0, 2, 2, 0, 4, 4), + (2, 4, 0, 5, 0, 4, 0, 3, 0, 4, 5, 5, 4, 3, 5, 3, 5, 3, 5, 3, 5, 2, 5, 3, 4, 3, 3, 4, 3, 4, 5, 3, 2, 1, 5, 4, 3, 2, 3, 4, 5, 3, 4, 1, 2, 5, 4, 3, 0, 3, 3, 0, 3, 2, 0, 2, 3, 0, 4, 1, 0, 3, 4, 3, 3, 5, 0, 3, 0, 1, 0, 4, 5, 5, 5, 4, 3, 0, 4, 2, 0, 3, 5), + (0, 5, 0, 4, 0, 4, 0, 2, 0, 5, 4, 3, 4, 3, 4, 3, 3, 3, 4, 3, 4, 2, 5, 3, 5, 3, 4, 1, 4, 3, 4, 4, 4, 0, 3, 5, 0, 4, 4, 4, 4, 5, 3, 1, 3, 4, 5, 3, 3, 3, 3, 3, 3, 3, 0, 2, 2, 0, 3, 3, 2, 4, 3, 3, 3, 5, 3, 4, 1, 3, 3, 5, 3, 2, 0, 0, 0, 0, 4, 3, 1, 3, 3), + (0, 1, 0, 3, 0, 3, 0, 1, 0, 1, 3, 3, 3, 2, 3, 3, 3, 0, 3, 0, 0, 0, 3, 1, 3, 0, 0, 0, 2, 2, 2, 3, 0, 0, 3, 2, 0, 1, 2, 4, 1, 3, 3, 0, 0, 3, 3, 3, 0, 1, 0, 0, 2, 1, 0, 0, 3, 0, 3, 1, 0, 3, 0, 0, 1, 3, 0, 2, 0, 1, 0, 3, 3, 1, 3, 3, 0, 0, 1, 1, 0, 3, 3), + (0, 2, 0, 3, 0, 2, 1, 4, 0, 2, 2, 3, 1, 1, 3, 1, 1, 0, 2, 0, 3, 1, 2, 3, 1, 3, 0, 0, 1, 0, 4, 3, 2, 3, 3, 3, 1, 4, 2, 3, 3, 3, 3, 1, 0, 3, 1, 4, 0, 1, 1, 0, 1, 2, 0, 1, 1, 0, 1, 1, 0, 3, 1, 3, 2, 2, 0, 1, 0, 0, 0, 2, 3, 3, 3, 1, 0, 0, 0, 0, 0, 2, 3), + (0, 5, 0, 4, 0, 5, 0, 2, 0, 4, 5, 5, 3, 3, 4, 3, 3, 1, 5, 4, 4, 2, 4, 4, 4, 3, 4, 2, 4, 3, 5, 5, 4, 3, 3, 4, 3, 3, 5, 5, 4, 5, 5, 1, 3, 4, 5, 3, 1, 4, 3, 1, 3, 3, 0, 3, 3, 1, 4, 3, 1, 4, 5, 3, 3, 5, 0, 4, 0, 3, 0, 5, 3, 3, 1, 4, 3, 0, 4, 0, 1, 5, 3), + (0, 5, 0, 5, 0, 4, 0, 2, 0, 4, 4, 3, 4, 3, 3, 3, 3, 3, 5, 4, 4, 4, 4, 4, 4, 5, 3, 3, 5, 2, 4, 4, 4, 3, 4, 4, 3, 3, 4, 4, 5, 5, 3, 3, 4, 3, 4, 3, 3, 4, 3, 3, 3, 3, 1, 2, 2, 1, 4, 3, 3, 5, 4, 4, 3, 4, 0, 4, 0, 3, 0, 4, 4, 4, 4, 4, 1, 0, 4, 2, 0, 2, 4), + (0, 4, 0, 4, 0, 3, 0, 1, 0, 3, 5, 2, 3, 0, 3, 0, 2, 1, 4, 2, 3, 3, 4, 1, 4, 3, 3, 2, 4, 1, 3, 3, 3, 0, 3, 3, 0, 0, 3, 3, 3, 5, 3, 3, 3, 3, 3, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 3, 1, 2, 2, 3, 0, 3, 0, 2, 0, 4, 4, 3, 3, 4, 1, 0, 3, 0, 0, 2, 4), + (0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 3, 1, 3, 0, 3, 2, 0, 0, 0, 1, 0, 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 2, 0, 0, 0, 0, 0, 0, 2), + (0, 2, 1, 3, 0, 2, 0, 2, 0, 3, 3, 3, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 4, 2, 2, 1, 2, 1, 4, 0, 4, 3, 1, 3, 3, 3, 2, 4, 3, 5, 4, 3, 3, 3, 3, 3, 3, 3, 0, 1, 3, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 4, 2, 0, 2, 3, 0, 3, 3, 0, 3, 3, 4, 2, 3, 1, 4, 0, 1, 2, 0, 2, 3), + (0, 3, 0, 3, 0, 1, 0, 3, 0, 2, 3, 3, 3, 0, 3, 1, 2, 0, 3, 3, 2, 3, 3, 2, 3, 2, 3, 1, 3, 0, 4, 3, 2, 0, 3, 3, 1, 4, 3, 3, 2, 3, 4, 3, 1, 3, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 4, 1, 1, 0, 3, 0, 3, 1, 0, 2, 3, 3, 3, 3, 3, 1, 0, 0, 2, 0, 3, 3), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3), + (0, 2, 0, 3, 1, 3, 0, 3, 0, 2, 3, 3, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1, 3, 0, 2, 3, 1, 1, 4, 3, 3, 2, 3, 3, 1, 2, 2, 4, 1, 3, 3, 0, 1, 4, 2, 3, 0, 1, 3, 0, 3, 0, 0, 1, 3, 0, 2, 0, 0, 3, 3, 2, 1, 3, 0, 3, 0, 2, 0, 3, 4, 4, 4, 3, 1, 0, 3, 0, 0, 3, 3), + (0, 2, 0, 1, 0, 2, 0, 0, 0, 1, 3, 2, 2, 1, 3, 0, 1, 1, 3, 0, 3, 2, 3, 1, 2, 0, 2, 0, 1, 1, 3, 3, 3, 0, 3, 3, 1, 1, 2, 3, 2, 3, 3, 1, 2, 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 2, 1, 2, 1, 3, 0, 3, 0, 0, 0, 3, 4, 4, 4, 3, 2, 0, 2, 0, 0, 2, 4), + (0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 3), + (0, 3, 0, 3, 0, 2, 0, 3, 0, 3, 3, 3, 2, 3, 2, 2, 2, 0, 3, 1, 3, 3, 3, 2, 3, 3, 0, 0, 3, 0, 3, 2, 2, 0, 2, 3, 1, 4, 3, 4, 3, 3, 2, 3, 1, 5, 4, 4, 0, 3, 1, 2, 1, 3, 0, 3, 1, 1, 2, 0, 2, 3, 1, 3, 1, 3, 0, 3, 0, 1, 0, 3, 3, 4, 4, 2, 1, 0, 2, 1, 0, 2, 4), + (0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 4, 2, 5, 1, 4, 0, 2, 0, 2, 1, 3, 1, 4, 0, 2, 1, 0, 0, 2, 1, 4, 1, 1, 0, 3, 3, 0, 5, 1, 3, 2, 3, 3, 1, 0, 3, 2, 3, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 1, 0, 3, 0, 2, 0, 1, 0, 3, 3, 3, 4, 3, 3, 0, 0, 0, 0, 2, 3), + (0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 3), + (0, 1, 0, 3, 0, 4, 0, 3, 0, 2, 4, 3, 1, 0, 3, 2, 2, 1, 3, 1, 2, 2, 3, 1, 1, 1, 2, 1, 3, 0, 1, 2, 0, 1, 3, 2, 1, 3, 0, 5, 5, 1, 0, 0, 1, 3, 2, 1, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 3, 4, 0, 1, 1, 1, 3, 2, 0, 2, 0, 1, 0, 2, 3, 3, 1, 2, 3, 0, 1, 0, 1, 0, 4), + (0, 0, 0, 1, 0, 3, 0, 3, 0, 2, 2, 1, 0, 0, 4, 0, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 1, 0, 3, 0, 3, 1, 3, 0, 3, 3, 0, 0, 1, 2, 1, 1, 1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 2, 0, 0, 2, 0, 0, 0, 0, 2, 3, 3, 3, 3, 0, 0, 0, 0, 1, 4), + (0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 1, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 2, 3, 0, 0, 2, 2, 3, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 2, 3), + (2, 4, 0, 5, 0, 5, 0, 4, 0, 3, 4, 3, 3, 3, 4, 3, 3, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 2, 3, 0, 5, 5, 4, 1, 5, 4, 3, 1, 5, 4, 3, 4, 4, 3, 3, 4, 3, 3, 0, 3, 2, 0, 2, 3, 0, 3, 0, 0, 3, 3, 0, 5, 3, 2, 3, 3, 0, 3, 0, 3, 0, 3, 4, 5, 4, 5, 3, 0, 4, 3, 0, 3, 4), + (0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 3, 4, 3, 2, 3, 2, 3, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 2, 4, 3, 3, 1, 3, 4, 3, 4, 4, 4, 3, 4, 4, 3, 2, 4, 4, 1, 0, 2, 0, 0, 1, 1, 0, 2, 0, 0, 3, 1, 0, 5, 3, 2, 1, 3, 0, 3, 0, 1, 2, 4, 3, 2, 4, 3, 3, 0, 3, 2, 0, 4, 4), + (0, 3, 0, 3, 0, 1, 0, 0, 0, 1, 4, 3, 3, 2, 3, 1, 3, 1, 4, 2, 3, 2, 4, 2, 3, 4, 3, 0, 2, 2, 3, 3, 3, 0, 3, 3, 3, 0, 3, 4, 1, 3, 3, 0, 3, 4, 3, 3, 0, 1, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 0, 3, 1, 2, 1, 3, 0, 4, 0, 1, 0, 4, 3, 3, 4, 3, 3, 0, 2, 0, 0, 3, 3), + (0, 3, 0, 4, 0, 1, 0, 3, 0, 3, 4, 3, 3, 0, 3, 3, 3, 1, 3, 1, 3, 3, 4, 3, 3, 3, 0, 0, 3, 1, 5, 3, 3, 1, 3, 3, 2, 5, 4, 3, 3, 4, 5, 3, 2, 5, 3, 4, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 0, 4, 2, 2, 1, 3, 0, 3, 0, 2, 0, 4, 4, 3, 5, 3, 2, 0, 1, 1, 0, 3, 4), + (0, 5, 0, 4, 0, 5, 0, 2, 0, 4, 4, 3, 3, 2, 3, 3, 3, 1, 4, 3, 4, 1, 5, 3, 4, 3, 4, 0, 4, 2, 4, 3, 4, 1, 5, 4, 0, 4, 4, 4, 4, 5, 4, 1, 3, 5, 4, 2, 1, 4, 1, 1, 3, 2, 0, 3, 1, 0, 3, 2, 1, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 4, 4, 3, 3, 3, 0, 4, 2, 0, 3, 4), + (1, 4, 0, 4, 0, 3, 0, 1, 0, 3, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 1, 0, 3, 2, 2, 1, 2, 0, 3, 1, 2, 1, 2, 0, 3, 2, 0, 2, 2, 3, 3, 4, 3, 0, 3, 3, 1, 2, 0, 1, 1, 3, 1, 2, 0, 0, 3, 0, 1, 1, 0, 3, 2, 2, 3, 3, 0, 3, 0, 0, 0, 2, 3, 3, 4, 3, 3, 0, 1, 0, 0, 1, 4), + (0, 4, 0, 4, 0, 4, 0, 0, 0, 3, 4, 4, 3, 1, 4, 2, 3, 2, 3, 3, 3, 1, 4, 3, 4, 0, 3, 0, 4, 2, 3, 3, 2, 2, 5, 4, 2, 1, 3, 4, 3, 4, 3, 1, 3, 3, 4, 2, 0, 2, 1, 0, 3, 3, 0, 0, 2, 0, 3, 1, 0, 4, 4, 3, 4, 3, 0, 4, 0, 1, 0, 2, 4, 4, 4, 4, 4, 0, 3, 2, 0, 3, 3), + (0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2), + (0, 2, 0, 3, 0, 4, 0, 4, 0, 1, 3, 3, 3, 0, 4, 0, 2, 1, 2, 1, 1, 1, 2, 0, 3, 1, 1, 0, 1, 0, 3, 1, 0, 0, 3, 3, 2, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 2, 2, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 2, 0, 3, 0, 0, 0, 0, 1, 0, 0, 3, 3, 4, 3, 1, 0, 1, 0, 3, 0, 2), + (0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 1, 0, 2, 0, 3, 1, 0, 1, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 2, 3, 0, 1, 4, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 3), + (0, 2, 0, 5, 0, 5, 0, 1, 0, 2, 4, 3, 3, 2, 5, 1, 3, 2, 3, 3, 3, 0, 4, 1, 2, 0, 3, 0, 4, 0, 2, 2, 1, 1, 5, 3, 0, 0, 1, 4, 2, 3, 2, 0, 3, 3, 3, 2, 0, 2, 4, 1, 1, 2, 0, 1, 1, 0, 3, 1, 0, 1, 3, 1, 2, 3, 0, 2, 0, 0, 0, 1, 3, 5, 4, 4, 4, 0, 3, 0, 0, 1, 3), + (0, 4, 0, 5, 0, 4, 0, 4, 0, 4, 5, 4, 3, 3, 4, 3, 3, 3, 4, 3, 4, 4, 5, 3, 4, 5, 4, 2, 4, 2, 3, 4, 3, 1, 4, 4, 1, 3, 5, 4, 4, 5, 5, 4, 4, 5, 5, 5, 2, 3, 3, 1, 4, 3, 1, 3, 3, 0, 3, 3, 1, 4, 3, 4, 4, 4, 0, 3, 0, 4, 0, 3, 3, 4, 4, 5, 0, 0, 4, 3, 0, 4, 5), + (0, 4, 0, 4, 0, 3, 0, 3, 0, 3, 4, 4, 4, 3, 3, 2, 4, 3, 4, 3, 4, 3, 5, 3, 4, 3, 2, 1, 4, 2, 4, 4, 3, 1, 3, 4, 2, 4, 5, 5, 3, 4, 5, 4, 1, 5, 4, 3, 0, 3, 2, 2, 3, 2, 1, 3, 1, 0, 3, 3, 3, 5, 3, 3, 3, 5, 4, 4, 2, 3, 3, 4, 3, 3, 3, 2, 1, 0, 3, 2, 1, 4, 3), + (0, 4, 0, 5, 0, 4, 0, 3, 0, 3, 5, 5, 3, 2, 4, 3, 4, 0, 5, 4, 4, 1, 4, 4, 4, 3, 3, 3, 4, 3, 5, 5, 2, 3, 3, 4, 1, 2, 5, 5, 3, 5, 5, 2, 3, 5, 5, 4, 0, 3, 2, 0, 3, 3, 1, 1, 5, 1, 4, 1, 0, 4, 3, 2, 3, 5, 0, 4, 0, 3, 0, 5, 4, 3, 4, 3, 0, 0, 4, 1, 0, 4, 4), + (1, 3, 0, 4, 0, 2, 0, 2, 0, 2, 5, 5, 3, 3, 3, 3, 3, 0, 4, 2, 3, 4, 4, 4, 3, 4, 0, 0, 3, 4, 5, 4, 3, 3, 3, 3, 2, 5, 5, 4, 5, 5, 5, 4, 3, 5, 5, 5, 1, 3, 1, 0, 1, 0, 0, 3, 2, 0, 4, 2, 0, 5, 2, 3, 2, 4, 1, 3, 0, 3, 0, 4, 5, 4, 5, 4, 3, 0, 4, 2, 0, 5, 4), + (0, 3, 0, 4, 0, 5, 0, 3, 0, 3, 4, 4, 3, 2, 3, 2, 3, 3, 3, 3, 3, 2, 4, 3, 3, 2, 2, 0, 3, 3, 3, 3, 3, 1, 3, 3, 3, 0, 4, 4, 3, 4, 4, 1, 1, 4, 4, 2, 0, 3, 1, 0, 1, 1, 0, 4, 1, 0, 2, 3, 1, 3, 3, 1, 3, 4, 0, 3, 0, 1, 0, 3, 1, 3, 0, 0, 1, 0, 2, 0, 0, 4, 4), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (0, 3, 0, 3, 0, 2, 0, 3, 0, 1, 5, 4, 3, 3, 3, 1, 4, 2, 1, 2, 3, 4, 4, 2, 4, 4, 5, 0, 3, 1, 4, 3, 4, 0, 4, 3, 3, 3, 2, 3, 2, 5, 3, 4, 3, 2, 2, 3, 0, 0, 3, 0, 2, 1, 0, 1, 2, 0, 0, 0, 0, 2, 1, 1, 3, 1, 0, 2, 0, 4, 0, 3, 4, 4, 4, 5, 2, 0, 2, 0, 0, 1, 3), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 4, 2, 1, 1, 0, 1, 0, 3, 2, 0, 0, 3, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 4, 0, 4, 2, 1, 0, 0, 0, 0, 0, 1), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 2, 0, 2, 1, 0, 0, 1, 2, 1, 0, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2), + (0, 4, 0, 4, 0, 4, 0, 3, 0, 4, 4, 3, 4, 2, 4, 3, 2, 0, 4, 4, 4, 3, 5, 3, 5, 3, 3, 2, 4, 2, 4, 3, 4, 3, 1, 4, 0, 2, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4, 3, 4, 1, 3, 4, 3, 2, 1, 2, 1, 3, 3, 3, 4, 4, 3, 3, 5, 0, 4, 0, 3, 0, 4, 3, 3, 3, 2, 1, 0, 3, 0, 0, 3, 3), + (0, 4, 0, 3, 0, 3, 0, 3, 0, 3, 5, 5, 3, 3, 3, 3, 4, 3, 4, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 4, 3, 5, 3, 3, 1, 3, 2, 4, 5, 5, 5, 5, 4, 3, 4, 5, 5, 3, 2, 2, 3, 3, 3, 3, 2, 3, 3, 1, 2, 3, 2, 4, 3, 3, 3, 4, 0, 4, 0, 2, 0, 4, 3, 2, 2, 1, 2, 0, 3, 0, 0, 4, 1), +) +# fmt: on + + +class JapaneseContextAnalysis: + NUM_OF_CATEGORY = 6 + DONT_KNOW = -1 + ENOUGH_REL_THRESHOLD = 100 + MAX_REL_THRESHOLD = 1000 + MINIMUM_DATA_THRESHOLD = 4 + + def __init__(self) -> None: + self._total_rel = 0 + self._rel_sample: List[int] = [] + self._need_to_skip_char_num = 0 + self._last_char_order = -1 + self._done = False + self.reset() + + def reset(self) -> None: + self._total_rel = 0 # total sequence received + # category counters, each integer counts sequence in its category + self._rel_sample = [0] * self.NUM_OF_CATEGORY + # if last byte in current buffer is not the last byte of a character, + # we need to know how many bytes to skip in next buffer + self._need_to_skip_char_num = 0 + self._last_char_order = -1 # The order of previous char + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + + def feed(self, byte_str: Union[bytes, bytearray], num_bytes: int) -> None: + if self._done: + return + + # The buffer we got is byte oriented, and a character may span in more than one + # buffers. In case the last one or two byte in last buffer is not + # complete, we record how many byte needed to complete that character + # and skip these bytes here. We can choose to record those bytes as + # well and analyse the character once it is complete, but since a + # character will not make much difference, by simply skipping + # this character will simply our logic and improve performance. + i = self._need_to_skip_char_num + while i < num_bytes: + order, char_len = self.get_order(byte_str[i : i + 2]) + i += char_len + if i > num_bytes: + self._need_to_skip_char_num = i - num_bytes + self._last_char_order = -1 + else: + if (order != -1) and (self._last_char_order != -1): + self._total_rel += 1 + if self._total_rel > self.MAX_REL_THRESHOLD: + self._done = True + break + self._rel_sample[ + jp2_char_context[self._last_char_order][order] + ] += 1 + self._last_char_order = order + + def got_enough_data(self) -> bool: + return self._total_rel > self.ENOUGH_REL_THRESHOLD + + def get_confidence(self) -> float: + # This is just one way to calculate confidence. It works well for me. + if self._total_rel > self.MINIMUM_DATA_THRESHOLD: + return (self._total_rel - self._rel_sample[0]) / self._total_rel + return self.DONT_KNOW + + def get_order(self, _: Union[bytes, bytearray]) -> Tuple[int, int]: + return -1, 1 + + +class SJISContextAnalysis(JapaneseContextAnalysis): + def __init__(self) -> None: + super().__init__() + self._charset_name = "SHIFT_JIS" + + @property + def charset_name(self) -> str: + return self._charset_name + + def get_order(self, byte_str: Union[bytes, bytearray]) -> Tuple[int, int]: + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): + char_len = 2 + if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): + self._charset_name = "CP932" + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 202) and (0x9F <= second_char <= 0xF1): + return second_char - 0x9F, char_len + + return -1, char_len + + +class EUCJPContextAnalysis(JapaneseContextAnalysis): + def get_order(self, byte_str: Union[bytes, bytearray]) -> Tuple[int, int]: + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): + char_len = 2 + elif first_char == 0x8F: + char_len = 3 + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): + return second_char - 0xA1, char_len + + return -1, char_len diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langbulgarianmodel.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langbulgarianmodel.py new file mode 100644 index 0000000..9946682 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langbulgarianmodel.py @@ -0,0 +1,4649 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +BULGARIAN_LANG_MODEL = { + 63: { # 'e' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 1, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 45: { # '\xad' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 1, # 'М' + 36: 0, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 31: { # 'А' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 1, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 2, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 2, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 0, # 'и' + 26: 2, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 32: { # 'Б' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 1, # 'Щ' + 61: 2, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 35: { # 'В' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 2, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 2, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 43: { # 'Г' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 1, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 37: { # 'Д' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 2, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 44: { # 'Е' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 2, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 0, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 55: { # 'Ж' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 47: { # 'З' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 40: { # 'И' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 2, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 2, # 'Я' + 1: 1, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 3, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 0, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 59: { # 'Й' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 33: { # 'К' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 46: { # 'Л' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 2, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 38: { # 'М' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 36: { # 'Н' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 2, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 41: { # 'О' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 2, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 2, # 'ч' + 27: 0, # 'ш' + 24: 2, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 30: { # 'П' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 2, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 39: { # 'Р' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 2, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 28: { # 'С' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 3, # 'А' + 32: 2, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 34: { # 'Т' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 51: { # 'У' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 2, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 48: { # 'Ф' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 49: { # 'Х' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 53: { # 'Ц' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 50: { # 'Ч' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 54: { # 'Ш' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 57: { # 'Щ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 61: { # 'Ъ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 60: { # 'Ю' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 1, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 0, # 'е' + 23: 2, # 'ж' + 15: 1, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 56: { # 'Я' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 1, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 1: { # 'а' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 18: { # 'б' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 0, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 2, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 3, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 9: { # 'в' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 0, # 'в' + 20: 2, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 20: { # 'г' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 11: { # 'д' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 1, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 3: { # 'е' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 2, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 23: { # 'ж' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 15: { # 'з' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 2: { # 'и' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 1, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 26: { # 'й' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 12: { # 'к' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 3, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 10: { # 'л' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 1, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 3, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 14: { # 'м' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 6: { # 'н' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 2, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 3, # 'ф' + 25: 2, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 4: { # 'о' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 13: { # 'п' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 7: { # 'р' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 2, # 'ч' + 27: 3, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 8: { # 'с' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 5: { # 'т' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 19: { # 'у' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 2, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 2, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 29: { # 'ф' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 2, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 25: { # 'х' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 22: { # 'ц' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 21: { # 'ч' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 27: { # 'ш' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 24: { # 'щ' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 17: { # 'ъ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 1, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 3, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 2, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 52: { # 'ь' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 42: { # 'ю' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 1, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 1, # 'е' + 23: 2, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 1, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 16: { # 'я' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 1, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 3, # 'х' + 22: 2, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 2, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 58: { # 'є' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 62: { # '№' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +ISO_8859_5_BULGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 77, # 'A' + 66: 90, # 'B' + 67: 99, # 'C' + 68: 100, # 'D' + 69: 72, # 'E' + 70: 109, # 'F' + 71: 107, # 'G' + 72: 101, # 'H' + 73: 79, # 'I' + 74: 185, # 'J' + 75: 81, # 'K' + 76: 102, # 'L' + 77: 76, # 'M' + 78: 94, # 'N' + 79: 82, # 'O' + 80: 110, # 'P' + 81: 186, # 'Q' + 82: 108, # 'R' + 83: 91, # 'S' + 84: 74, # 'T' + 85: 119, # 'U' + 86: 84, # 'V' + 87: 96, # 'W' + 88: 111, # 'X' + 89: 187, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 65, # 'a' + 98: 69, # 'b' + 99: 70, # 'c' + 100: 66, # 'd' + 101: 63, # 'e' + 102: 68, # 'f' + 103: 112, # 'g' + 104: 103, # 'h' + 105: 92, # 'i' + 106: 194, # 'j' + 107: 104, # 'k' + 108: 95, # 'l' + 109: 86, # 'm' + 110: 87, # 'n' + 111: 71, # 'o' + 112: 116, # 'p' + 113: 195, # 'q' + 114: 85, # 'r' + 115: 93, # 's' + 116: 97, # 't' + 117: 113, # 'u' + 118: 196, # 'v' + 119: 197, # 'w' + 120: 198, # 'x' + 121: 199, # 'y' + 122: 200, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 194, # '\x80' + 129: 195, # '\x81' + 130: 196, # '\x82' + 131: 197, # '\x83' + 132: 198, # '\x84' + 133: 199, # '\x85' + 134: 200, # '\x86' + 135: 201, # '\x87' + 136: 202, # '\x88' + 137: 203, # '\x89' + 138: 204, # '\x8a' + 139: 205, # '\x8b' + 140: 206, # '\x8c' + 141: 207, # '\x8d' + 142: 208, # '\x8e' + 143: 209, # '\x8f' + 144: 210, # '\x90' + 145: 211, # '\x91' + 146: 212, # '\x92' + 147: 213, # '\x93' + 148: 214, # '\x94' + 149: 215, # '\x95' + 150: 216, # '\x96' + 151: 217, # '\x97' + 152: 218, # '\x98' + 153: 219, # '\x99' + 154: 220, # '\x9a' + 155: 221, # '\x9b' + 156: 222, # '\x9c' + 157: 223, # '\x9d' + 158: 224, # '\x9e' + 159: 225, # '\x9f' + 160: 81, # '\xa0' + 161: 226, # 'Ё' + 162: 227, # 'Ђ' + 163: 228, # 'Ѓ' + 164: 229, # 'Є' + 165: 230, # 'Ѕ' + 166: 105, # 'І' + 167: 231, # 'Ї' + 168: 232, # 'Ј' + 169: 233, # 'Љ' + 170: 234, # 'Њ' + 171: 235, # 'Ћ' + 172: 236, # 'Ќ' + 173: 45, # '\xad' + 174: 237, # 'Ў' + 175: 238, # 'Џ' + 176: 31, # 'А' + 177: 32, # 'Б' + 178: 35, # 'В' + 179: 43, # 'Г' + 180: 37, # 'Д' + 181: 44, # 'Е' + 182: 55, # 'Ж' + 183: 47, # 'З' + 184: 40, # 'И' + 185: 59, # 'Й' + 186: 33, # 'К' + 187: 46, # 'Л' + 188: 38, # 'М' + 189: 36, # 'Н' + 190: 41, # 'О' + 191: 30, # 'П' + 192: 39, # 'Р' + 193: 28, # 'С' + 194: 34, # 'Т' + 195: 51, # 'У' + 196: 48, # 'Ф' + 197: 49, # 'Х' + 198: 53, # 'Ц' + 199: 50, # 'Ч' + 200: 54, # 'Ш' + 201: 57, # 'Щ' + 202: 61, # 'Ъ' + 203: 239, # 'Ы' + 204: 67, # 'Ь' + 205: 240, # 'Э' + 206: 60, # 'Ю' + 207: 56, # 'Я' + 208: 1, # 'а' + 209: 18, # 'б' + 210: 9, # 'в' + 211: 20, # 'г' + 212: 11, # 'д' + 213: 3, # 'е' + 214: 23, # 'ж' + 215: 15, # 'з' + 216: 2, # 'и' + 217: 26, # 'й' + 218: 12, # 'к' + 219: 10, # 'л' + 220: 14, # 'м' + 221: 6, # 'н' + 222: 4, # 'о' + 223: 13, # 'п' + 224: 7, # 'р' + 225: 8, # 'с' + 226: 5, # 'т' + 227: 19, # 'у' + 228: 29, # 'ф' + 229: 25, # 'х' + 230: 22, # 'ц' + 231: 21, # 'ч' + 232: 27, # 'ш' + 233: 24, # 'щ' + 234: 17, # 'ъ' + 235: 75, # 'ы' + 236: 52, # 'ь' + 237: 241, # 'э' + 238: 42, # 'ю' + 239: 16, # 'я' + 240: 62, # '№' + 241: 242, # 'ё' + 242: 243, # 'ђ' + 243: 244, # 'ѓ' + 244: 58, # 'є' + 245: 245, # 'ѕ' + 246: 98, # 'і' + 247: 246, # 'ї' + 248: 247, # 'ј' + 249: 248, # 'љ' + 250: 249, # 'њ' + 251: 250, # 'ћ' + 252: 251, # 'ќ' + 253: 91, # '§' + 254: 252, # 'ў' + 255: 253, # 'џ' +} + +ISO_8859_5_BULGARIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-5", + language="Bulgarian", + char_to_order_map=ISO_8859_5_BULGARIAN_CHAR_TO_ORDER, + language_model=BULGARIAN_LANG_MODEL, + typical_positive_ratio=0.969392, + keep_ascii_letters=False, + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", +) + +WINDOWS_1251_BULGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 77, # 'A' + 66: 90, # 'B' + 67: 99, # 'C' + 68: 100, # 'D' + 69: 72, # 'E' + 70: 109, # 'F' + 71: 107, # 'G' + 72: 101, # 'H' + 73: 79, # 'I' + 74: 185, # 'J' + 75: 81, # 'K' + 76: 102, # 'L' + 77: 76, # 'M' + 78: 94, # 'N' + 79: 82, # 'O' + 80: 110, # 'P' + 81: 186, # 'Q' + 82: 108, # 'R' + 83: 91, # 'S' + 84: 74, # 'T' + 85: 119, # 'U' + 86: 84, # 'V' + 87: 96, # 'W' + 88: 111, # 'X' + 89: 187, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 65, # 'a' + 98: 69, # 'b' + 99: 70, # 'c' + 100: 66, # 'd' + 101: 63, # 'e' + 102: 68, # 'f' + 103: 112, # 'g' + 104: 103, # 'h' + 105: 92, # 'i' + 106: 194, # 'j' + 107: 104, # 'k' + 108: 95, # 'l' + 109: 86, # 'm' + 110: 87, # 'n' + 111: 71, # 'o' + 112: 116, # 'p' + 113: 195, # 'q' + 114: 85, # 'r' + 115: 93, # 's' + 116: 97, # 't' + 117: 113, # 'u' + 118: 196, # 'v' + 119: 197, # 'w' + 120: 198, # 'x' + 121: 199, # 'y' + 122: 200, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 206, # 'Ђ' + 129: 207, # 'Ѓ' + 130: 208, # '‚' + 131: 209, # 'ѓ' + 132: 210, # '„' + 133: 211, # '…' + 134: 212, # '†' + 135: 213, # '‡' + 136: 120, # '€' + 137: 214, # '‰' + 138: 215, # 'Љ' + 139: 216, # '‹' + 140: 217, # 'Њ' + 141: 218, # 'Ќ' + 142: 219, # 'Ћ' + 143: 220, # 'Џ' + 144: 221, # 'ђ' + 145: 78, # '‘' + 146: 64, # '’' + 147: 83, # '“' + 148: 121, # '”' + 149: 98, # '•' + 150: 117, # '–' + 151: 105, # '—' + 152: 222, # None + 153: 223, # '™' + 154: 224, # 'љ' + 155: 225, # '›' + 156: 226, # 'њ' + 157: 227, # 'ќ' + 158: 228, # 'ћ' + 159: 229, # 'џ' + 160: 88, # '\xa0' + 161: 230, # 'Ў' + 162: 231, # 'ў' + 163: 232, # 'Ј' + 164: 233, # '¤' + 165: 122, # 'Ґ' + 166: 89, # '¦' + 167: 106, # '§' + 168: 234, # 'Ё' + 169: 235, # '©' + 170: 236, # 'Є' + 171: 237, # '«' + 172: 238, # '¬' + 173: 45, # '\xad' + 174: 239, # '®' + 175: 240, # 'Ї' + 176: 73, # '°' + 177: 80, # '±' + 178: 118, # 'І' + 179: 114, # 'і' + 180: 241, # 'ґ' + 181: 242, # 'µ' + 182: 243, # '¶' + 183: 244, # '·' + 184: 245, # 'ё' + 185: 62, # '№' + 186: 58, # 'є' + 187: 246, # '»' + 188: 247, # 'ј' + 189: 248, # 'Ѕ' + 190: 249, # 'ѕ' + 191: 250, # 'ї' + 192: 31, # 'А' + 193: 32, # 'Б' + 194: 35, # 'В' + 195: 43, # 'Г' + 196: 37, # 'Д' + 197: 44, # 'Е' + 198: 55, # 'Ж' + 199: 47, # 'З' + 200: 40, # 'И' + 201: 59, # 'Й' + 202: 33, # 'К' + 203: 46, # 'Л' + 204: 38, # 'М' + 205: 36, # 'Н' + 206: 41, # 'О' + 207: 30, # 'П' + 208: 39, # 'Р' + 209: 28, # 'С' + 210: 34, # 'Т' + 211: 51, # 'У' + 212: 48, # 'Ф' + 213: 49, # 'Х' + 214: 53, # 'Ц' + 215: 50, # 'Ч' + 216: 54, # 'Ш' + 217: 57, # 'Щ' + 218: 61, # 'Ъ' + 219: 251, # 'Ы' + 220: 67, # 'Ь' + 221: 252, # 'Э' + 222: 60, # 'Ю' + 223: 56, # 'Я' + 224: 1, # 'а' + 225: 18, # 'б' + 226: 9, # 'в' + 227: 20, # 'г' + 228: 11, # 'д' + 229: 3, # 'е' + 230: 23, # 'ж' + 231: 15, # 'з' + 232: 2, # 'и' + 233: 26, # 'й' + 234: 12, # 'к' + 235: 10, # 'л' + 236: 14, # 'м' + 237: 6, # 'н' + 238: 4, # 'о' + 239: 13, # 'п' + 240: 7, # 'р' + 241: 8, # 'с' + 242: 5, # 'т' + 243: 19, # 'у' + 244: 29, # 'ф' + 245: 25, # 'х' + 246: 22, # 'ц' + 247: 21, # 'ч' + 248: 27, # 'ш' + 249: 24, # 'щ' + 250: 17, # 'ъ' + 251: 75, # 'ы' + 252: 52, # 'ь' + 253: 253, # 'э' + 254: 42, # 'ю' + 255: 16, # 'я' +} + +WINDOWS_1251_BULGARIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1251", + language="Bulgarian", + char_to_order_map=WINDOWS_1251_BULGARIAN_CHAR_TO_ORDER, + language_model=BULGARIAN_LANG_MODEL, + typical_positive_ratio=0.969392, + keep_ascii_letters=False, + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langgreekmodel.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langgreekmodel.py new file mode 100644 index 0000000..cfb8639 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langgreekmodel.py @@ -0,0 +1,4397 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +GREEK_LANG_MODEL = { + 60: { # 'e' + 60: 2, # 'e' + 55: 1, # 'o' + 58: 2, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 55: { # 'o' + 60: 0, # 'e' + 55: 2, # 'o' + 58: 2, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 58: { # 't' + 60: 2, # 'e' + 55: 1, # 'o' + 58: 1, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 1, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 36: { # '·' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 61: { # 'Ά' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 1, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 1, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 46: { # 'Έ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 2, # 'β' + 20: 2, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 1, # 'σ' + 2: 2, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 54: { # 'Ό' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 31: { # 'Α' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 2, # 'Β' + 43: 2, # 'Γ' + 41: 1, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 2, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 1, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 2, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 2, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 1, # 'θ' + 5: 0, # 'ι' + 11: 2, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 2, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 51: { # 'Β' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 1, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 43: { # 'Γ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 1, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 41: { # 'Δ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 1, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 34: { # 'Ε' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 2, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 1, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 2, # 'Χ' + 57: 2, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 1, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 1, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 1, # 'ύ' + 27: 0, # 'ώ' + }, + 40: { # 'Η' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 2, # 'Θ' + 47: 0, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 52: { # 'Θ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 1, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 47: { # 'Ι' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 1, # 'Β' + 43: 1, # 'Γ' + 41: 2, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 2, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 1, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 1, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 44: { # 'Κ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 1, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 1, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 53: { # 'Λ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 2, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 2, # 'Σ' + 33: 0, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 1, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 38: { # 'Μ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 2, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 2, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 49: { # 'Ν' + 60: 2, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 1, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 1, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 59: { # 'Ξ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 39: { # 'Ο' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 1, # 'Β' + 43: 2, # 'Γ' + 41: 2, # 'Δ' + 34: 2, # 'Ε' + 40: 1, # 'Η' + 52: 2, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 2, # 'Φ' + 50: 2, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 1, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 35: { # 'Π' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 2, # 'Λ' + 38: 1, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 1, # 'έ' + 22: 1, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 3, # 'ώ' + }, + 48: { # 'Ρ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 1, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 1, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 37: { # 'Σ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 2, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 2, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 2, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 2, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 33: { # 'Τ' + 60: 0, # 'e' + 55: 1, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 2, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 45: { # 'Υ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 2, # 'Η' + 52: 2, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 1, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 56: { # 'Φ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 1, # 'ύ' + 27: 1, # 'ώ' + }, + 50: { # 'Χ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 1, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 1, # 'Ω' + 17: 2, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 57: { # 'Ω' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 2, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 17: { # 'ά' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 3, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 3, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 18: { # 'έ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 3, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 22: { # 'ή' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 15: { # 'ί' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 3, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 1, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 1: { # 'α' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 2, # 'ε' + 32: 3, # 'ζ' + 13: 1, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 29: { # 'β' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 2, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 3, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 20: { # 'γ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 21: { # 'δ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 3: { # 'ε' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 2, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 2, # 'ε' + 32: 2, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 32: { # 'ζ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 2, # 'ώ' + }, + 13: { # 'η' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 25: { # 'θ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 1, # 'λ' + 10: 3, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 5: { # 'ι' + 60: 0, # 'e' + 55: 1, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 0, # 'ύ' + 27: 3, # 'ώ' + }, + 11: { # 'κ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 16: { # 'λ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 1, # 'β' + 20: 2, # 'γ' + 21: 1, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 10: { # 'μ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 3, # 'φ' + 23: 0, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 6: { # 'ν' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 1, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 30: { # 'ξ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 3, # 'ύ' + 27: 1, # 'ώ' + }, + 4: { # 'ο' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 2, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 1, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 9: { # 'π' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 3, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 2, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 8: { # 'ρ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 1, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 3, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 14: { # 'ς' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 7: { # 'σ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 2: { # 'τ' + 60: 0, # 'e' + 55: 2, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 12: { # 'υ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 2, # 'ε' + 32: 2, # 'ζ' + 13: 2, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 2, # 'ώ' + }, + 28: { # 'φ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 1, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 23: { # 'χ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 42: { # 'ψ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 1, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 24: { # 'ω' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 1, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 19: { # 'ό' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 1, # 'ε' + 32: 2, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 1, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 26: { # 'ύ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 2, # 'β' + 20: 2, # 'γ' + 21: 1, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 27: { # 'ώ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 1, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 1, # 'η' + 25: 2, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 1, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 1, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1253_GREEK_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 82, # 'A' + 66: 100, # 'B' + 67: 104, # 'C' + 68: 94, # 'D' + 69: 98, # 'E' + 70: 101, # 'F' + 71: 116, # 'G' + 72: 102, # 'H' + 73: 111, # 'I' + 74: 187, # 'J' + 75: 117, # 'K' + 76: 92, # 'L' + 77: 88, # 'M' + 78: 113, # 'N' + 79: 85, # 'O' + 80: 79, # 'P' + 81: 118, # 'Q' + 82: 105, # 'R' + 83: 83, # 'S' + 84: 67, # 'T' + 85: 114, # 'U' + 86: 119, # 'V' + 87: 95, # 'W' + 88: 99, # 'X' + 89: 109, # 'Y' + 90: 188, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 72, # 'a' + 98: 70, # 'b' + 99: 80, # 'c' + 100: 81, # 'd' + 101: 60, # 'e' + 102: 96, # 'f' + 103: 93, # 'g' + 104: 89, # 'h' + 105: 68, # 'i' + 106: 120, # 'j' + 107: 97, # 'k' + 108: 77, # 'l' + 109: 86, # 'm' + 110: 69, # 'n' + 111: 55, # 'o' + 112: 78, # 'p' + 113: 115, # 'q' + 114: 65, # 'r' + 115: 66, # 's' + 116: 58, # 't' + 117: 76, # 'u' + 118: 106, # 'v' + 119: 103, # 'w' + 120: 87, # 'x' + 121: 107, # 'y' + 122: 112, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 255, # '€' + 129: 255, # None + 130: 255, # '‚' + 131: 255, # 'ƒ' + 132: 255, # '„' + 133: 255, # '…' + 134: 255, # '†' + 135: 255, # '‡' + 136: 255, # None + 137: 255, # '‰' + 138: 255, # None + 139: 255, # '‹' + 140: 255, # None + 141: 255, # None + 142: 255, # None + 143: 255, # None + 144: 255, # None + 145: 255, # '‘' + 146: 255, # '’' + 147: 255, # '“' + 148: 255, # '”' + 149: 255, # '•' + 150: 255, # '–' + 151: 255, # '—' + 152: 255, # None + 153: 255, # '™' + 154: 255, # None + 155: 255, # '›' + 156: 255, # None + 157: 255, # None + 158: 255, # None + 159: 255, # None + 160: 253, # '\xa0' + 161: 233, # '΅' + 162: 61, # 'Ά' + 163: 253, # '£' + 164: 253, # '¤' + 165: 253, # '¥' + 166: 253, # '¦' + 167: 253, # '§' + 168: 253, # '¨' + 169: 253, # '©' + 170: 253, # None + 171: 253, # '«' + 172: 253, # '¬' + 173: 74, # '\xad' + 174: 253, # '®' + 175: 253, # '―' + 176: 253, # '°' + 177: 253, # '±' + 178: 253, # '²' + 179: 253, # '³' + 180: 247, # '΄' + 181: 253, # 'µ' + 182: 253, # '¶' + 183: 36, # '·' + 184: 46, # 'Έ' + 185: 71, # 'Ή' + 186: 73, # 'Ί' + 187: 253, # '»' + 188: 54, # 'Ό' + 189: 253, # '½' + 190: 108, # 'Ύ' + 191: 123, # 'Ώ' + 192: 110, # 'ΐ' + 193: 31, # 'Α' + 194: 51, # 'Β' + 195: 43, # 'Γ' + 196: 41, # 'Δ' + 197: 34, # 'Ε' + 198: 91, # 'Ζ' + 199: 40, # 'Η' + 200: 52, # 'Θ' + 201: 47, # 'Ι' + 202: 44, # 'Κ' + 203: 53, # 'Λ' + 204: 38, # 'Μ' + 205: 49, # 'Ν' + 206: 59, # 'Ξ' + 207: 39, # 'Ο' + 208: 35, # 'Π' + 209: 48, # 'Ρ' + 210: 250, # None + 211: 37, # 'Σ' + 212: 33, # 'Τ' + 213: 45, # 'Υ' + 214: 56, # 'Φ' + 215: 50, # 'Χ' + 216: 84, # 'Ψ' + 217: 57, # 'Ω' + 218: 120, # 'Ϊ' + 219: 121, # 'Ϋ' + 220: 17, # 'ά' + 221: 18, # 'έ' + 222: 22, # 'ή' + 223: 15, # 'ί' + 224: 124, # 'ΰ' + 225: 1, # 'α' + 226: 29, # 'β' + 227: 20, # 'γ' + 228: 21, # 'δ' + 229: 3, # 'ε' + 230: 32, # 'ζ' + 231: 13, # 'η' + 232: 25, # 'θ' + 233: 5, # 'ι' + 234: 11, # 'κ' + 235: 16, # 'λ' + 236: 10, # 'μ' + 237: 6, # 'ν' + 238: 30, # 'ξ' + 239: 4, # 'ο' + 240: 9, # 'π' + 241: 8, # 'ρ' + 242: 14, # 'ς' + 243: 7, # 'σ' + 244: 2, # 'τ' + 245: 12, # 'υ' + 246: 28, # 'φ' + 247: 23, # 'χ' + 248: 42, # 'ψ' + 249: 24, # 'ω' + 250: 64, # 'ϊ' + 251: 75, # 'ϋ' + 252: 19, # 'ό' + 253: 26, # 'ύ' + 254: 27, # 'ώ' + 255: 253, # None +} + +WINDOWS_1253_GREEK_MODEL = SingleByteCharSetModel( + charset_name="windows-1253", + language="Greek", + char_to_order_map=WINDOWS_1253_GREEK_CHAR_TO_ORDER, + language_model=GREEK_LANG_MODEL, + typical_positive_ratio=0.982851, + keep_ascii_letters=False, + alphabet="ΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίαβγδεζηθικλμνξοπρςστυφχψωόύώ", +) + +ISO_8859_7_GREEK_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 82, # 'A' + 66: 100, # 'B' + 67: 104, # 'C' + 68: 94, # 'D' + 69: 98, # 'E' + 70: 101, # 'F' + 71: 116, # 'G' + 72: 102, # 'H' + 73: 111, # 'I' + 74: 187, # 'J' + 75: 117, # 'K' + 76: 92, # 'L' + 77: 88, # 'M' + 78: 113, # 'N' + 79: 85, # 'O' + 80: 79, # 'P' + 81: 118, # 'Q' + 82: 105, # 'R' + 83: 83, # 'S' + 84: 67, # 'T' + 85: 114, # 'U' + 86: 119, # 'V' + 87: 95, # 'W' + 88: 99, # 'X' + 89: 109, # 'Y' + 90: 188, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 72, # 'a' + 98: 70, # 'b' + 99: 80, # 'c' + 100: 81, # 'd' + 101: 60, # 'e' + 102: 96, # 'f' + 103: 93, # 'g' + 104: 89, # 'h' + 105: 68, # 'i' + 106: 120, # 'j' + 107: 97, # 'k' + 108: 77, # 'l' + 109: 86, # 'm' + 110: 69, # 'n' + 111: 55, # 'o' + 112: 78, # 'p' + 113: 115, # 'q' + 114: 65, # 'r' + 115: 66, # 's' + 116: 58, # 't' + 117: 76, # 'u' + 118: 106, # 'v' + 119: 103, # 'w' + 120: 87, # 'x' + 121: 107, # 'y' + 122: 112, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 255, # '\x80' + 129: 255, # '\x81' + 130: 255, # '\x82' + 131: 255, # '\x83' + 132: 255, # '\x84' + 133: 255, # '\x85' + 134: 255, # '\x86' + 135: 255, # '\x87' + 136: 255, # '\x88' + 137: 255, # '\x89' + 138: 255, # '\x8a' + 139: 255, # '\x8b' + 140: 255, # '\x8c' + 141: 255, # '\x8d' + 142: 255, # '\x8e' + 143: 255, # '\x8f' + 144: 255, # '\x90' + 145: 255, # '\x91' + 146: 255, # '\x92' + 147: 255, # '\x93' + 148: 255, # '\x94' + 149: 255, # '\x95' + 150: 255, # '\x96' + 151: 255, # '\x97' + 152: 255, # '\x98' + 153: 255, # '\x99' + 154: 255, # '\x9a' + 155: 255, # '\x9b' + 156: 255, # '\x9c' + 157: 255, # '\x9d' + 158: 255, # '\x9e' + 159: 255, # '\x9f' + 160: 253, # '\xa0' + 161: 233, # '‘' + 162: 90, # '’' + 163: 253, # '£' + 164: 253, # '€' + 165: 253, # '₯' + 166: 253, # '¦' + 167: 253, # '§' + 168: 253, # '¨' + 169: 253, # '©' + 170: 253, # 'ͺ' + 171: 253, # '«' + 172: 253, # '¬' + 173: 74, # '\xad' + 174: 253, # None + 175: 253, # '―' + 176: 253, # '°' + 177: 253, # '±' + 178: 253, # '²' + 179: 253, # '³' + 180: 247, # '΄' + 181: 248, # '΅' + 182: 61, # 'Ά' + 183: 36, # '·' + 184: 46, # 'Έ' + 185: 71, # 'Ή' + 186: 73, # 'Ί' + 187: 253, # '»' + 188: 54, # 'Ό' + 189: 253, # '½' + 190: 108, # 'Ύ' + 191: 123, # 'Ώ' + 192: 110, # 'ΐ' + 193: 31, # 'Α' + 194: 51, # 'Β' + 195: 43, # 'Γ' + 196: 41, # 'Δ' + 197: 34, # 'Ε' + 198: 91, # 'Ζ' + 199: 40, # 'Η' + 200: 52, # 'Θ' + 201: 47, # 'Ι' + 202: 44, # 'Κ' + 203: 53, # 'Λ' + 204: 38, # 'Μ' + 205: 49, # 'Ν' + 206: 59, # 'Ξ' + 207: 39, # 'Ο' + 208: 35, # 'Π' + 209: 48, # 'Ρ' + 210: 250, # None + 211: 37, # 'Σ' + 212: 33, # 'Τ' + 213: 45, # 'Υ' + 214: 56, # 'Φ' + 215: 50, # 'Χ' + 216: 84, # 'Ψ' + 217: 57, # 'Ω' + 218: 120, # 'Ϊ' + 219: 121, # 'Ϋ' + 220: 17, # 'ά' + 221: 18, # 'έ' + 222: 22, # 'ή' + 223: 15, # 'ί' + 224: 124, # 'ΰ' + 225: 1, # 'α' + 226: 29, # 'β' + 227: 20, # 'γ' + 228: 21, # 'δ' + 229: 3, # 'ε' + 230: 32, # 'ζ' + 231: 13, # 'η' + 232: 25, # 'θ' + 233: 5, # 'ι' + 234: 11, # 'κ' + 235: 16, # 'λ' + 236: 10, # 'μ' + 237: 6, # 'ν' + 238: 30, # 'ξ' + 239: 4, # 'ο' + 240: 9, # 'π' + 241: 8, # 'ρ' + 242: 14, # 'ς' + 243: 7, # 'σ' + 244: 2, # 'τ' + 245: 12, # 'υ' + 246: 28, # 'φ' + 247: 23, # 'χ' + 248: 42, # 'ψ' + 249: 24, # 'ω' + 250: 64, # 'ϊ' + 251: 75, # 'ϋ' + 252: 19, # 'ό' + 253: 26, # 'ύ' + 254: 27, # 'ώ' + 255: 253, # None +} + +ISO_8859_7_GREEK_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-7", + language="Greek", + char_to_order_map=ISO_8859_7_GREEK_CHAR_TO_ORDER, + language_model=GREEK_LANG_MODEL, + typical_positive_ratio=0.982851, + keep_ascii_letters=False, + alphabet="ΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίαβγδεζηθικλμνξοπρςστυφχψωόύώ", +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langhebrewmodel.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langhebrewmodel.py new file mode 100644 index 0000000..56d2975 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langhebrewmodel.py @@ -0,0 +1,4380 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +HEBREW_LANG_MODEL = { + 50: { # 'a' + 50: 0, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 2, # 'l' + 54: 2, # 'n' + 49: 0, # 'o' + 51: 2, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 0, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 60: { # 'c' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 61: { # 'd' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 0, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 42: { # 'e' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 2, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 2, # 'l' + 54: 2, # 'n' + 49: 1, # 'o' + 51: 2, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 1, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 53: { # 'i' + 50: 1, # 'a' + 60: 2, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 0, # 'i' + 56: 1, # 'l' + 54: 2, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 56: { # 'l' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 2, # 'e' + 53: 2, # 'i' + 56: 2, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 54: { # 'n' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 49: { # 'o' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 2, # 'n' + 49: 1, # 'o' + 51: 2, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 51: { # 'r' + 50: 2, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 2, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 43: { # 's' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 2, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 2, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 44: { # 't' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 2, # 'e' + 53: 2, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 63: { # 'u' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 34: { # '\xa0' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 1, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 2, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 55: { # '´' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 2, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 1, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 48: { # '¼' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 39: { # '½' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 57: { # '¾' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 30: { # 'ְ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 2, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 0, # 'ף' + 18: 2, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 59: { # 'ֱ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 1, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 41: { # 'ֲ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 33: { # 'ִ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 2, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 37: { # 'ֵ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 1, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 36: { # 'ֶ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 1, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 2, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 31: { # 'ַ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 29: { # 'ָ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 2, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 35: { # 'ֹ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 62: { # 'ֻ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 1, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 28: { # 'ּ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 3, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 3, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 3, # 'ַ' + 29: 3, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 2, # 'ׁ' + 45: 1, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 2, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 2, # 'מ' + 23: 1, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 38: { # 'ׁ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 2, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 45: { # 'ׂ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 2, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 9: { # 'א' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 2, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 8: { # 'ב' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 1, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 20: { # 'ג' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 2, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 16: { # 'ד' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 3: { # 'ה' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 3, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 0, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 2: { # 'ו' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 3, # 'ֹ' + 62: 0, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 24: { # 'ז' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 1, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 1, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 14: { # 'ח' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 1, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 22: { # 'ט' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 1, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 2, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 1: { # 'י' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 25: { # 'ך' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 15: { # 'כ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 4: { # 'ל' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 3, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 11: { # 'ם' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 6: { # 'מ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 0, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 23: { # 'ן' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 12: { # 'נ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 19: { # 'ס' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 2, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 1, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 13: { # 'ע' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 1, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 26: { # 'ף' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 18: { # 'פ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 2, # 'ב' + 20: 3, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 27: { # 'ץ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 21: { # 'צ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 1, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 0, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 17: { # 'ק' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 7: { # 'ר' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 2, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 10: { # 'ש' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 3, # 'ׁ' + 45: 2, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 5: { # 'ת' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 1, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 32: { # '–' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 52: { # '’' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 47: { # '“' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 46: { # '”' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 58: { # '†' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 2, # '†' + 40: 0, # '…' + }, + 40: { # '…' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1255_HEBREW_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 69, # 'A' + 66: 91, # 'B' + 67: 79, # 'C' + 68: 80, # 'D' + 69: 92, # 'E' + 70: 89, # 'F' + 71: 97, # 'G' + 72: 90, # 'H' + 73: 68, # 'I' + 74: 111, # 'J' + 75: 112, # 'K' + 76: 82, # 'L' + 77: 73, # 'M' + 78: 95, # 'N' + 79: 85, # 'O' + 80: 78, # 'P' + 81: 121, # 'Q' + 82: 86, # 'R' + 83: 71, # 'S' + 84: 67, # 'T' + 85: 102, # 'U' + 86: 107, # 'V' + 87: 84, # 'W' + 88: 114, # 'X' + 89: 103, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 50, # 'a' + 98: 74, # 'b' + 99: 60, # 'c' + 100: 61, # 'd' + 101: 42, # 'e' + 102: 76, # 'f' + 103: 70, # 'g' + 104: 64, # 'h' + 105: 53, # 'i' + 106: 105, # 'j' + 107: 93, # 'k' + 108: 56, # 'l' + 109: 65, # 'm' + 110: 54, # 'n' + 111: 49, # 'o' + 112: 66, # 'p' + 113: 110, # 'q' + 114: 51, # 'r' + 115: 43, # 's' + 116: 44, # 't' + 117: 63, # 'u' + 118: 81, # 'v' + 119: 77, # 'w' + 120: 98, # 'x' + 121: 75, # 'y' + 122: 108, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 124, # '€' + 129: 202, # None + 130: 203, # '‚' + 131: 204, # 'ƒ' + 132: 205, # '„' + 133: 40, # '…' + 134: 58, # '†' + 135: 206, # '‡' + 136: 207, # 'ˆ' + 137: 208, # '‰' + 138: 209, # None + 139: 210, # '‹' + 140: 211, # None + 141: 212, # None + 142: 213, # None + 143: 214, # None + 144: 215, # None + 145: 83, # '‘' + 146: 52, # '’' + 147: 47, # '“' + 148: 46, # '”' + 149: 72, # '•' + 150: 32, # '–' + 151: 94, # '—' + 152: 216, # '˜' + 153: 113, # '™' + 154: 217, # None + 155: 109, # '›' + 156: 218, # None + 157: 219, # None + 158: 220, # None + 159: 221, # None + 160: 34, # '\xa0' + 161: 116, # '¡' + 162: 222, # '¢' + 163: 118, # '£' + 164: 100, # '₪' + 165: 223, # '¥' + 166: 224, # '¦' + 167: 117, # '§' + 168: 119, # '¨' + 169: 104, # '©' + 170: 125, # '×' + 171: 225, # '«' + 172: 226, # '¬' + 173: 87, # '\xad' + 174: 99, # '®' + 175: 227, # '¯' + 176: 106, # '°' + 177: 122, # '±' + 178: 123, # '²' + 179: 228, # '³' + 180: 55, # '´' + 181: 229, # 'µ' + 182: 230, # '¶' + 183: 101, # '·' + 184: 231, # '¸' + 185: 232, # '¹' + 186: 120, # '÷' + 187: 233, # '»' + 188: 48, # '¼' + 189: 39, # '½' + 190: 57, # '¾' + 191: 234, # '¿' + 192: 30, # 'ְ' + 193: 59, # 'ֱ' + 194: 41, # 'ֲ' + 195: 88, # 'ֳ' + 196: 33, # 'ִ' + 197: 37, # 'ֵ' + 198: 36, # 'ֶ' + 199: 31, # 'ַ' + 200: 29, # 'ָ' + 201: 35, # 'ֹ' + 202: 235, # None + 203: 62, # 'ֻ' + 204: 28, # 'ּ' + 205: 236, # 'ֽ' + 206: 126, # '־' + 207: 237, # 'ֿ' + 208: 238, # '׀' + 209: 38, # 'ׁ' + 210: 45, # 'ׂ' + 211: 239, # '׃' + 212: 240, # 'װ' + 213: 241, # 'ױ' + 214: 242, # 'ײ' + 215: 243, # '׳' + 216: 127, # '״' + 217: 244, # None + 218: 245, # None + 219: 246, # None + 220: 247, # None + 221: 248, # None + 222: 249, # None + 223: 250, # None + 224: 9, # 'א' + 225: 8, # 'ב' + 226: 20, # 'ג' + 227: 16, # 'ד' + 228: 3, # 'ה' + 229: 2, # 'ו' + 230: 24, # 'ז' + 231: 14, # 'ח' + 232: 22, # 'ט' + 233: 1, # 'י' + 234: 25, # 'ך' + 235: 15, # 'כ' + 236: 4, # 'ל' + 237: 11, # 'ם' + 238: 6, # 'מ' + 239: 23, # 'ן' + 240: 12, # 'נ' + 241: 19, # 'ס' + 242: 13, # 'ע' + 243: 26, # 'ף' + 244: 18, # 'פ' + 245: 27, # 'ץ' + 246: 21, # 'צ' + 247: 17, # 'ק' + 248: 7, # 'ר' + 249: 10, # 'ש' + 250: 5, # 'ת' + 251: 251, # None + 252: 252, # None + 253: 128, # '\u200e' + 254: 96, # '\u200f' + 255: 253, # None +} + +WINDOWS_1255_HEBREW_MODEL = SingleByteCharSetModel( + charset_name="windows-1255", + language="Hebrew", + char_to_order_map=WINDOWS_1255_HEBREW_CHAR_TO_ORDER, + language_model=HEBREW_LANG_MODEL, + typical_positive_ratio=0.984004, + keep_ascii_letters=False, + alphabet="אבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ", +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langhungarianmodel.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langhungarianmodel.py new file mode 100644 index 0000000..09a0d32 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langhungarianmodel.py @@ -0,0 +1,4649 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +HUNGARIAN_LANG_MODEL = { + 28: { # 'A' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 2, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 2, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 2, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 1, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 40: { # 'B' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 3, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 54: { # 'C' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 3, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 45: { # 'D' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 32: { # 'E' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 2, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 50: { # 'F' + 28: 1, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 0, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 49: { # 'G' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 2, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 38: { # 'H' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 0, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 1, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 2, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 39: { # 'I' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 2, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 53: { # 'J' + 28: 2, # 'A' + 40: 0, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 0, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 36: { # 'K' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 2, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 41: { # 'L' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 34: { # 'M' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 3, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 1, # 'ű' + }, + 35: { # 'N' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 2, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 2, # 'Y' + 52: 1, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 47: { # 'O' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 2, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 46: { # 'P' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 3, # 'á' + 15: 2, # 'é' + 30: 0, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 43: { # 'R' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 2, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 2, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 33: { # 'S' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 3, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 1, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 37: { # 'T' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 57: { # 'U' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 48: { # 'V' + 28: 2, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 55: { # 'Y' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 2, # 'Z' + 2: 1, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 52: { # 'Z' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 1, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 2: { # 'a' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 18: { # 'b' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 26: { # 'c' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 1, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 2, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 2, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 17: { # 'd' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 2, # 'k' + 6: 1, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 1: { # 'e' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 2, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 27: { # 'f' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 3, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 3, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 12: { # 'g' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 20: { # 'h' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 9: { # 'i' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 3, # 'ó' + 24: 1, # 'ö' + 31: 2, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 1, # 'ű' + }, + 22: { # 'j' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 1, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 1, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 7: { # 'k' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 1, # 'ú' + 29: 3, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 6: { # 'l' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 3, # 'ő' + 56: 1, # 'ű' + }, + 13: { # 'm' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 1, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 3, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 2, # 'ű' + }, + 4: { # 'n' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 1, # 'x' + 16: 3, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 8: { # 'o' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 23: { # 'p' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 10: { # 'r' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 2, # 'ű' + }, + 5: { # 's' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 3: { # 't' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 1, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 3, # 'ő' + 56: 2, # 'ű' + }, + 21: { # 'u' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 2, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 1, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 1, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 19: { # 'v' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 2, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 62: { # 'x' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 16: { # 'y' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 2, # 'ű' + }, + 11: { # 'z' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 51: { # 'Á' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 44: { # 'É' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 61: { # 'Í' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 0, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 58: { # 'Ó' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 2, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 59: { # 'Ö' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 60: { # 'Ú' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 2, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 63: { # 'Ü' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 14: { # 'á' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 15: { # 'é' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 30: { # 'í' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 25: { # 'ó' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 1, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 24: { # 'ö' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 0, # 'a' + 18: 3, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 31: { # 'ú' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 3, # 'j' + 7: 1, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 29: { # 'ü' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 0, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 42: { # 'ő' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 56: { # 'ű' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1250_HUNGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 28, # 'A' + 66: 40, # 'B' + 67: 54, # 'C' + 68: 45, # 'D' + 69: 32, # 'E' + 70: 50, # 'F' + 71: 49, # 'G' + 72: 38, # 'H' + 73: 39, # 'I' + 74: 53, # 'J' + 75: 36, # 'K' + 76: 41, # 'L' + 77: 34, # 'M' + 78: 35, # 'N' + 79: 47, # 'O' + 80: 46, # 'P' + 81: 72, # 'Q' + 82: 43, # 'R' + 83: 33, # 'S' + 84: 37, # 'T' + 85: 57, # 'U' + 86: 48, # 'V' + 87: 64, # 'W' + 88: 68, # 'X' + 89: 55, # 'Y' + 90: 52, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 2, # 'a' + 98: 18, # 'b' + 99: 26, # 'c' + 100: 17, # 'd' + 101: 1, # 'e' + 102: 27, # 'f' + 103: 12, # 'g' + 104: 20, # 'h' + 105: 9, # 'i' + 106: 22, # 'j' + 107: 7, # 'k' + 108: 6, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 8, # 'o' + 112: 23, # 'p' + 113: 67, # 'q' + 114: 10, # 'r' + 115: 5, # 's' + 116: 3, # 't' + 117: 21, # 'u' + 118: 19, # 'v' + 119: 65, # 'w' + 120: 62, # 'x' + 121: 16, # 'y' + 122: 11, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 161, # '€' + 129: 162, # None + 130: 163, # '‚' + 131: 164, # None + 132: 165, # '„' + 133: 166, # '…' + 134: 167, # '†' + 135: 168, # '‡' + 136: 169, # None + 137: 170, # '‰' + 138: 171, # 'Š' + 139: 172, # '‹' + 140: 173, # 'Ś' + 141: 174, # 'Ť' + 142: 175, # 'Ž' + 143: 176, # 'Ź' + 144: 177, # None + 145: 178, # '‘' + 146: 179, # '’' + 147: 180, # '“' + 148: 78, # '”' + 149: 181, # '•' + 150: 69, # '–' + 151: 182, # '—' + 152: 183, # None + 153: 184, # '™' + 154: 185, # 'š' + 155: 186, # '›' + 156: 187, # 'ś' + 157: 188, # 'ť' + 158: 189, # 'ž' + 159: 190, # 'ź' + 160: 191, # '\xa0' + 161: 192, # 'ˇ' + 162: 193, # '˘' + 163: 194, # 'Ł' + 164: 195, # '¤' + 165: 196, # 'Ą' + 166: 197, # '¦' + 167: 76, # '§' + 168: 198, # '¨' + 169: 199, # '©' + 170: 200, # 'Ş' + 171: 201, # '«' + 172: 202, # '¬' + 173: 203, # '\xad' + 174: 204, # '®' + 175: 205, # 'Ż' + 176: 81, # '°' + 177: 206, # '±' + 178: 207, # '˛' + 179: 208, # 'ł' + 180: 209, # '´' + 181: 210, # 'µ' + 182: 211, # '¶' + 183: 212, # '·' + 184: 213, # '¸' + 185: 214, # 'ą' + 186: 215, # 'ş' + 187: 216, # '»' + 188: 217, # 'Ľ' + 189: 218, # '˝' + 190: 219, # 'ľ' + 191: 220, # 'ż' + 192: 221, # 'Ŕ' + 193: 51, # 'Á' + 194: 83, # 'Â' + 195: 222, # 'Ă' + 196: 80, # 'Ä' + 197: 223, # 'Ĺ' + 198: 224, # 'Ć' + 199: 225, # 'Ç' + 200: 226, # 'Č' + 201: 44, # 'É' + 202: 227, # 'Ę' + 203: 228, # 'Ë' + 204: 229, # 'Ě' + 205: 61, # 'Í' + 206: 230, # 'Î' + 207: 231, # 'Ď' + 208: 232, # 'Đ' + 209: 233, # 'Ń' + 210: 234, # 'Ň' + 211: 58, # 'Ó' + 212: 235, # 'Ô' + 213: 66, # 'Ő' + 214: 59, # 'Ö' + 215: 236, # '×' + 216: 237, # 'Ř' + 217: 238, # 'Ů' + 218: 60, # 'Ú' + 219: 70, # 'Ű' + 220: 63, # 'Ü' + 221: 239, # 'Ý' + 222: 240, # 'Ţ' + 223: 241, # 'ß' + 224: 84, # 'ŕ' + 225: 14, # 'á' + 226: 75, # 'â' + 227: 242, # 'ă' + 228: 71, # 'ä' + 229: 82, # 'ĺ' + 230: 243, # 'ć' + 231: 73, # 'ç' + 232: 244, # 'č' + 233: 15, # 'é' + 234: 85, # 'ę' + 235: 79, # 'ë' + 236: 86, # 'ě' + 237: 30, # 'í' + 238: 77, # 'î' + 239: 87, # 'ď' + 240: 245, # 'đ' + 241: 246, # 'ń' + 242: 247, # 'ň' + 243: 25, # 'ó' + 244: 74, # 'ô' + 245: 42, # 'ő' + 246: 24, # 'ö' + 247: 248, # '÷' + 248: 249, # 'ř' + 249: 250, # 'ů' + 250: 31, # 'ú' + 251: 56, # 'ű' + 252: 29, # 'ü' + 253: 251, # 'ý' + 254: 252, # 'ţ' + 255: 253, # '˙' +} + +WINDOWS_1250_HUNGARIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1250", + language="Hungarian", + char_to_order_map=WINDOWS_1250_HUNGARIAN_CHAR_TO_ORDER, + language_model=HUNGARIAN_LANG_MODEL, + typical_positive_ratio=0.947368, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvzÁÉÍÓÖÚÜáéíóöúüŐőŰű", +) + +ISO_8859_2_HUNGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 28, # 'A' + 66: 40, # 'B' + 67: 54, # 'C' + 68: 45, # 'D' + 69: 32, # 'E' + 70: 50, # 'F' + 71: 49, # 'G' + 72: 38, # 'H' + 73: 39, # 'I' + 74: 53, # 'J' + 75: 36, # 'K' + 76: 41, # 'L' + 77: 34, # 'M' + 78: 35, # 'N' + 79: 47, # 'O' + 80: 46, # 'P' + 81: 71, # 'Q' + 82: 43, # 'R' + 83: 33, # 'S' + 84: 37, # 'T' + 85: 57, # 'U' + 86: 48, # 'V' + 87: 64, # 'W' + 88: 68, # 'X' + 89: 55, # 'Y' + 90: 52, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 2, # 'a' + 98: 18, # 'b' + 99: 26, # 'c' + 100: 17, # 'd' + 101: 1, # 'e' + 102: 27, # 'f' + 103: 12, # 'g' + 104: 20, # 'h' + 105: 9, # 'i' + 106: 22, # 'j' + 107: 7, # 'k' + 108: 6, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 8, # 'o' + 112: 23, # 'p' + 113: 67, # 'q' + 114: 10, # 'r' + 115: 5, # 's' + 116: 3, # 't' + 117: 21, # 'u' + 118: 19, # 'v' + 119: 65, # 'w' + 120: 62, # 'x' + 121: 16, # 'y' + 122: 11, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 159, # '\x80' + 129: 160, # '\x81' + 130: 161, # '\x82' + 131: 162, # '\x83' + 132: 163, # '\x84' + 133: 164, # '\x85' + 134: 165, # '\x86' + 135: 166, # '\x87' + 136: 167, # '\x88' + 137: 168, # '\x89' + 138: 169, # '\x8a' + 139: 170, # '\x8b' + 140: 171, # '\x8c' + 141: 172, # '\x8d' + 142: 173, # '\x8e' + 143: 174, # '\x8f' + 144: 175, # '\x90' + 145: 176, # '\x91' + 146: 177, # '\x92' + 147: 178, # '\x93' + 148: 179, # '\x94' + 149: 180, # '\x95' + 150: 181, # '\x96' + 151: 182, # '\x97' + 152: 183, # '\x98' + 153: 184, # '\x99' + 154: 185, # '\x9a' + 155: 186, # '\x9b' + 156: 187, # '\x9c' + 157: 188, # '\x9d' + 158: 189, # '\x9e' + 159: 190, # '\x9f' + 160: 191, # '\xa0' + 161: 192, # 'Ą' + 162: 193, # '˘' + 163: 194, # 'Ł' + 164: 195, # '¤' + 165: 196, # 'Ľ' + 166: 197, # 'Ś' + 167: 75, # '§' + 168: 198, # '¨' + 169: 199, # 'Š' + 170: 200, # 'Ş' + 171: 201, # 'Ť' + 172: 202, # 'Ź' + 173: 203, # '\xad' + 174: 204, # 'Ž' + 175: 205, # 'Ż' + 176: 79, # '°' + 177: 206, # 'ą' + 178: 207, # '˛' + 179: 208, # 'ł' + 180: 209, # '´' + 181: 210, # 'ľ' + 182: 211, # 'ś' + 183: 212, # 'ˇ' + 184: 213, # '¸' + 185: 214, # 'š' + 186: 215, # 'ş' + 187: 216, # 'ť' + 188: 217, # 'ź' + 189: 218, # '˝' + 190: 219, # 'ž' + 191: 220, # 'ż' + 192: 221, # 'Ŕ' + 193: 51, # 'Á' + 194: 81, # 'Â' + 195: 222, # 'Ă' + 196: 78, # 'Ä' + 197: 223, # 'Ĺ' + 198: 224, # 'Ć' + 199: 225, # 'Ç' + 200: 226, # 'Č' + 201: 44, # 'É' + 202: 227, # 'Ę' + 203: 228, # 'Ë' + 204: 229, # 'Ě' + 205: 61, # 'Í' + 206: 230, # 'Î' + 207: 231, # 'Ď' + 208: 232, # 'Đ' + 209: 233, # 'Ń' + 210: 234, # 'Ň' + 211: 58, # 'Ó' + 212: 235, # 'Ô' + 213: 66, # 'Ő' + 214: 59, # 'Ö' + 215: 236, # '×' + 216: 237, # 'Ř' + 217: 238, # 'Ů' + 218: 60, # 'Ú' + 219: 69, # 'Ű' + 220: 63, # 'Ü' + 221: 239, # 'Ý' + 222: 240, # 'Ţ' + 223: 241, # 'ß' + 224: 82, # 'ŕ' + 225: 14, # 'á' + 226: 74, # 'â' + 227: 242, # 'ă' + 228: 70, # 'ä' + 229: 80, # 'ĺ' + 230: 243, # 'ć' + 231: 72, # 'ç' + 232: 244, # 'č' + 233: 15, # 'é' + 234: 83, # 'ę' + 235: 77, # 'ë' + 236: 84, # 'ě' + 237: 30, # 'í' + 238: 76, # 'î' + 239: 85, # 'ď' + 240: 245, # 'đ' + 241: 246, # 'ń' + 242: 247, # 'ň' + 243: 25, # 'ó' + 244: 73, # 'ô' + 245: 42, # 'ő' + 246: 24, # 'ö' + 247: 248, # '÷' + 248: 249, # 'ř' + 249: 250, # 'ů' + 250: 31, # 'ú' + 251: 56, # 'ű' + 252: 29, # 'ü' + 253: 251, # 'ý' + 254: 252, # 'ţ' + 255: 253, # '˙' +} + +ISO_8859_2_HUNGARIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-2", + language="Hungarian", + char_to_order_map=ISO_8859_2_HUNGARIAN_CHAR_TO_ORDER, + language_model=HUNGARIAN_LANG_MODEL, + typical_positive_ratio=0.947368, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvzÁÉÍÓÖÚÜáéíóöúüŐőŰű", +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langrussianmodel.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langrussianmodel.py new file mode 100644 index 0000000..39a5388 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langrussianmodel.py @@ -0,0 +1,5725 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +RUSSIAN_LANG_MODEL = { + 37: { # 'А' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 44: { # 'Б' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 33: { # 'В' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 0, # 'ю' + 16: 1, # 'я' + }, + 46: { # 'Г' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 41: { # 'Д' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 3, # 'ж' + 20: 1, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 48: { # 'Е' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 2, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 1, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 56: { # 'Ж' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 1, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 2, # 'ю' + 16: 0, # 'я' + }, + 51: { # 'З' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 1, # 'я' + }, + 42: { # 'И' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 2, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 60: { # 'Й' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 36: { # 'К' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 49: { # 'Л' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 1, # 'я' + }, + 38: { # 'М' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 1, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 31: { # 'Н' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 2, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 34: { # 'О' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 2, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 2, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 35: { # 'П' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 1, # 'с' + 6: 1, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 2, # 'я' + }, + 45: { # 'Р' + 37: 2, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 2, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 32: { # 'С' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 2, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 40: { # 'Т' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 52: { # 'У' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 1, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 1, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 53: { # 'Ф' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 1, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 55: { # 'Х' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 58: { # 'Ц' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 50: { # 'Ч' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 57: { # 'Ш' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 63: { # 'Щ' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 62: { # 'Ы' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 61: { # 'Ь' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 47: { # 'Э' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 59: { # 'Ю' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 43: { # 'Я' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 1, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 3: { # 'а' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 21: { # 'б' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 10: { # 'в' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 19: { # 'г' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 13: { # 'д' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 3, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 2: { # 'е' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 24: { # 'ж' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 1, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 20: { # 'з' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 4: { # 'и' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 23: { # 'й' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 11: { # 'к' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 3, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 8: { # 'л' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 3, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 12: { # 'м' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 5: { # 'н' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 2, # 'щ' + 54: 1, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 1: { # 'о' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 15: { # 'п' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 9: { # 'р' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 7: { # 'с' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 6: { # 'т' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 2, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 14: { # 'у' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 2, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 2, # 'я' + }, + 39: { # 'ф' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 26: { # 'х' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 3, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 28: { # 'ц' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 1, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 22: { # 'ч' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 3, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 25: { # 'ш' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 29: { # 'щ' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 2, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 54: { # 'ъ' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 18: { # 'ы' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 1, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 2, # 'я' + }, + 17: { # 'ь' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 0, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 0, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 30: { # 'э' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 27: { # 'ю' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 1, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 1, # 'я' + }, + 16: { # 'я' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 2, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 2, # 'ю' + 16: 2, # 'я' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +IBM866_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 37, # 'А' + 129: 44, # 'Б' + 130: 33, # 'В' + 131: 46, # 'Г' + 132: 41, # 'Д' + 133: 48, # 'Е' + 134: 56, # 'Ж' + 135: 51, # 'З' + 136: 42, # 'И' + 137: 60, # 'Й' + 138: 36, # 'К' + 139: 49, # 'Л' + 140: 38, # 'М' + 141: 31, # 'Н' + 142: 34, # 'О' + 143: 35, # 'П' + 144: 45, # 'Р' + 145: 32, # 'С' + 146: 40, # 'Т' + 147: 52, # 'У' + 148: 53, # 'Ф' + 149: 55, # 'Х' + 150: 58, # 'Ц' + 151: 50, # 'Ч' + 152: 57, # 'Ш' + 153: 63, # 'Щ' + 154: 70, # 'Ъ' + 155: 62, # 'Ы' + 156: 61, # 'Ь' + 157: 47, # 'Э' + 158: 59, # 'Ю' + 159: 43, # 'Я' + 160: 3, # 'а' + 161: 21, # 'б' + 162: 10, # 'в' + 163: 19, # 'г' + 164: 13, # 'д' + 165: 2, # 'е' + 166: 24, # 'ж' + 167: 20, # 'з' + 168: 4, # 'и' + 169: 23, # 'й' + 170: 11, # 'к' + 171: 8, # 'л' + 172: 12, # 'м' + 173: 5, # 'н' + 174: 1, # 'о' + 175: 15, # 'п' + 176: 191, # '░' + 177: 192, # '▒' + 178: 193, # '▓' + 179: 194, # '│' + 180: 195, # '┤' + 181: 196, # '╡' + 182: 197, # '╢' + 183: 198, # '╖' + 184: 199, # '╕' + 185: 200, # '╣' + 186: 201, # '║' + 187: 202, # '╗' + 188: 203, # '╝' + 189: 204, # '╜' + 190: 205, # '╛' + 191: 206, # '┐' + 192: 207, # '└' + 193: 208, # '┴' + 194: 209, # '┬' + 195: 210, # '├' + 196: 211, # '─' + 197: 212, # '┼' + 198: 213, # '╞' + 199: 214, # '╟' + 200: 215, # '╚' + 201: 216, # '╔' + 202: 217, # '╩' + 203: 218, # '╦' + 204: 219, # '╠' + 205: 220, # '═' + 206: 221, # '╬' + 207: 222, # '╧' + 208: 223, # '╨' + 209: 224, # '╤' + 210: 225, # '╥' + 211: 226, # '╙' + 212: 227, # '╘' + 213: 228, # '╒' + 214: 229, # '╓' + 215: 230, # '╫' + 216: 231, # '╪' + 217: 232, # '┘' + 218: 233, # '┌' + 219: 234, # '█' + 220: 235, # '▄' + 221: 236, # '▌' + 222: 237, # '▐' + 223: 238, # '▀' + 224: 9, # 'р' + 225: 7, # 'с' + 226: 6, # 'т' + 227: 14, # 'у' + 228: 39, # 'ф' + 229: 26, # 'х' + 230: 28, # 'ц' + 231: 22, # 'ч' + 232: 25, # 'ш' + 233: 29, # 'щ' + 234: 54, # 'ъ' + 235: 18, # 'ы' + 236: 17, # 'ь' + 237: 30, # 'э' + 238: 27, # 'ю' + 239: 16, # 'я' + 240: 239, # 'Ё' + 241: 68, # 'ё' + 242: 240, # 'Є' + 243: 241, # 'є' + 244: 242, # 'Ї' + 245: 243, # 'ї' + 246: 244, # 'Ў' + 247: 245, # 'ў' + 248: 246, # '°' + 249: 247, # '∙' + 250: 248, # '·' + 251: 249, # '√' + 252: 250, # '№' + 253: 251, # '¤' + 254: 252, # '■' + 255: 255, # '\xa0' +} + +IBM866_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="IBM866", + language="Russian", + char_to_order_map=IBM866_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +WINDOWS_1251_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # 'Ђ' + 129: 192, # 'Ѓ' + 130: 193, # '‚' + 131: 194, # 'ѓ' + 132: 195, # '„' + 133: 196, # '…' + 134: 197, # '†' + 135: 198, # '‡' + 136: 199, # '€' + 137: 200, # '‰' + 138: 201, # 'Љ' + 139: 202, # '‹' + 140: 203, # 'Њ' + 141: 204, # 'Ќ' + 142: 205, # 'Ћ' + 143: 206, # 'Џ' + 144: 207, # 'ђ' + 145: 208, # '‘' + 146: 209, # '’' + 147: 210, # '“' + 148: 211, # '”' + 149: 212, # '•' + 150: 213, # '–' + 151: 214, # '—' + 152: 215, # None + 153: 216, # '™' + 154: 217, # 'љ' + 155: 218, # '›' + 156: 219, # 'њ' + 157: 220, # 'ќ' + 158: 221, # 'ћ' + 159: 222, # 'џ' + 160: 223, # '\xa0' + 161: 224, # 'Ў' + 162: 225, # 'ў' + 163: 226, # 'Ј' + 164: 227, # '¤' + 165: 228, # 'Ґ' + 166: 229, # '¦' + 167: 230, # '§' + 168: 231, # 'Ё' + 169: 232, # '©' + 170: 233, # 'Є' + 171: 234, # '«' + 172: 235, # '¬' + 173: 236, # '\xad' + 174: 237, # '®' + 175: 238, # 'Ї' + 176: 239, # '°' + 177: 240, # '±' + 178: 241, # 'І' + 179: 242, # 'і' + 180: 243, # 'ґ' + 181: 244, # 'µ' + 182: 245, # '¶' + 183: 246, # '·' + 184: 68, # 'ё' + 185: 247, # '№' + 186: 248, # 'є' + 187: 249, # '»' + 188: 250, # 'ј' + 189: 251, # 'Ѕ' + 190: 252, # 'ѕ' + 191: 253, # 'ї' + 192: 37, # 'А' + 193: 44, # 'Б' + 194: 33, # 'В' + 195: 46, # 'Г' + 196: 41, # 'Д' + 197: 48, # 'Е' + 198: 56, # 'Ж' + 199: 51, # 'З' + 200: 42, # 'И' + 201: 60, # 'Й' + 202: 36, # 'К' + 203: 49, # 'Л' + 204: 38, # 'М' + 205: 31, # 'Н' + 206: 34, # 'О' + 207: 35, # 'П' + 208: 45, # 'Р' + 209: 32, # 'С' + 210: 40, # 'Т' + 211: 52, # 'У' + 212: 53, # 'Ф' + 213: 55, # 'Х' + 214: 58, # 'Ц' + 215: 50, # 'Ч' + 216: 57, # 'Ш' + 217: 63, # 'Щ' + 218: 70, # 'Ъ' + 219: 62, # 'Ы' + 220: 61, # 'Ь' + 221: 47, # 'Э' + 222: 59, # 'Ю' + 223: 43, # 'Я' + 224: 3, # 'а' + 225: 21, # 'б' + 226: 10, # 'в' + 227: 19, # 'г' + 228: 13, # 'д' + 229: 2, # 'е' + 230: 24, # 'ж' + 231: 20, # 'з' + 232: 4, # 'и' + 233: 23, # 'й' + 234: 11, # 'к' + 235: 8, # 'л' + 236: 12, # 'м' + 237: 5, # 'н' + 238: 1, # 'о' + 239: 15, # 'п' + 240: 9, # 'р' + 241: 7, # 'с' + 242: 6, # 'т' + 243: 14, # 'у' + 244: 39, # 'ф' + 245: 26, # 'х' + 246: 28, # 'ц' + 247: 22, # 'ч' + 248: 25, # 'ш' + 249: 29, # 'щ' + 250: 54, # 'ъ' + 251: 18, # 'ы' + 252: 17, # 'ь' + 253: 30, # 'э' + 254: 27, # 'ю' + 255: 16, # 'я' +} + +WINDOWS_1251_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1251", + language="Russian", + char_to_order_map=WINDOWS_1251_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +IBM855_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # 'ђ' + 129: 192, # 'Ђ' + 130: 193, # 'ѓ' + 131: 194, # 'Ѓ' + 132: 68, # 'ё' + 133: 195, # 'Ё' + 134: 196, # 'є' + 135: 197, # 'Є' + 136: 198, # 'ѕ' + 137: 199, # 'Ѕ' + 138: 200, # 'і' + 139: 201, # 'І' + 140: 202, # 'ї' + 141: 203, # 'Ї' + 142: 204, # 'ј' + 143: 205, # 'Ј' + 144: 206, # 'љ' + 145: 207, # 'Љ' + 146: 208, # 'њ' + 147: 209, # 'Њ' + 148: 210, # 'ћ' + 149: 211, # 'Ћ' + 150: 212, # 'ќ' + 151: 213, # 'Ќ' + 152: 214, # 'ў' + 153: 215, # 'Ў' + 154: 216, # 'џ' + 155: 217, # 'Џ' + 156: 27, # 'ю' + 157: 59, # 'Ю' + 158: 54, # 'ъ' + 159: 70, # 'Ъ' + 160: 3, # 'а' + 161: 37, # 'А' + 162: 21, # 'б' + 163: 44, # 'Б' + 164: 28, # 'ц' + 165: 58, # 'Ц' + 166: 13, # 'д' + 167: 41, # 'Д' + 168: 2, # 'е' + 169: 48, # 'Е' + 170: 39, # 'ф' + 171: 53, # 'Ф' + 172: 19, # 'г' + 173: 46, # 'Г' + 174: 218, # '«' + 175: 219, # '»' + 176: 220, # '░' + 177: 221, # '▒' + 178: 222, # '▓' + 179: 223, # '│' + 180: 224, # '┤' + 181: 26, # 'х' + 182: 55, # 'Х' + 183: 4, # 'и' + 184: 42, # 'И' + 185: 225, # '╣' + 186: 226, # '║' + 187: 227, # '╗' + 188: 228, # '╝' + 189: 23, # 'й' + 190: 60, # 'Й' + 191: 229, # '┐' + 192: 230, # '└' + 193: 231, # '┴' + 194: 232, # '┬' + 195: 233, # '├' + 196: 234, # '─' + 197: 235, # '┼' + 198: 11, # 'к' + 199: 36, # 'К' + 200: 236, # '╚' + 201: 237, # '╔' + 202: 238, # '╩' + 203: 239, # '╦' + 204: 240, # '╠' + 205: 241, # '═' + 206: 242, # '╬' + 207: 243, # '¤' + 208: 8, # 'л' + 209: 49, # 'Л' + 210: 12, # 'м' + 211: 38, # 'М' + 212: 5, # 'н' + 213: 31, # 'Н' + 214: 1, # 'о' + 215: 34, # 'О' + 216: 15, # 'п' + 217: 244, # '┘' + 218: 245, # '┌' + 219: 246, # '█' + 220: 247, # '▄' + 221: 35, # 'П' + 222: 16, # 'я' + 223: 248, # '▀' + 224: 43, # 'Я' + 225: 9, # 'р' + 226: 45, # 'Р' + 227: 7, # 'с' + 228: 32, # 'С' + 229: 6, # 'т' + 230: 40, # 'Т' + 231: 14, # 'у' + 232: 52, # 'У' + 233: 24, # 'ж' + 234: 56, # 'Ж' + 235: 10, # 'в' + 236: 33, # 'В' + 237: 17, # 'ь' + 238: 61, # 'Ь' + 239: 249, # '№' + 240: 250, # '\xad' + 241: 18, # 'ы' + 242: 62, # 'Ы' + 243: 20, # 'з' + 244: 51, # 'З' + 245: 25, # 'ш' + 246: 57, # 'Ш' + 247: 30, # 'э' + 248: 47, # 'Э' + 249: 29, # 'щ' + 250: 63, # 'Щ' + 251: 22, # 'ч' + 252: 50, # 'Ч' + 253: 251, # '§' + 254: 252, # '■' + 255: 255, # '\xa0' +} + +IBM855_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="IBM855", + language="Russian", + char_to_order_map=IBM855_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +KOI8_R_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # '─' + 129: 192, # '│' + 130: 193, # '┌' + 131: 194, # '┐' + 132: 195, # '└' + 133: 196, # '┘' + 134: 197, # '├' + 135: 198, # '┤' + 136: 199, # '┬' + 137: 200, # '┴' + 138: 201, # '┼' + 139: 202, # '▀' + 140: 203, # '▄' + 141: 204, # '█' + 142: 205, # '▌' + 143: 206, # '▐' + 144: 207, # '░' + 145: 208, # '▒' + 146: 209, # '▓' + 147: 210, # '⌠' + 148: 211, # '■' + 149: 212, # '∙' + 150: 213, # '√' + 151: 214, # '≈' + 152: 215, # '≤' + 153: 216, # '≥' + 154: 217, # '\xa0' + 155: 218, # '⌡' + 156: 219, # '°' + 157: 220, # '²' + 158: 221, # '·' + 159: 222, # '÷' + 160: 223, # '═' + 161: 224, # '║' + 162: 225, # '╒' + 163: 68, # 'ё' + 164: 226, # '╓' + 165: 227, # '╔' + 166: 228, # '╕' + 167: 229, # '╖' + 168: 230, # '╗' + 169: 231, # '╘' + 170: 232, # '╙' + 171: 233, # '╚' + 172: 234, # '╛' + 173: 235, # '╜' + 174: 236, # '╝' + 175: 237, # '╞' + 176: 238, # '╟' + 177: 239, # '╠' + 178: 240, # '╡' + 179: 241, # 'Ё' + 180: 242, # '╢' + 181: 243, # '╣' + 182: 244, # '╤' + 183: 245, # '╥' + 184: 246, # '╦' + 185: 247, # '╧' + 186: 248, # '╨' + 187: 249, # '╩' + 188: 250, # '╪' + 189: 251, # '╫' + 190: 252, # '╬' + 191: 253, # '©' + 192: 27, # 'ю' + 193: 3, # 'а' + 194: 21, # 'б' + 195: 28, # 'ц' + 196: 13, # 'д' + 197: 2, # 'е' + 198: 39, # 'ф' + 199: 19, # 'г' + 200: 26, # 'х' + 201: 4, # 'и' + 202: 23, # 'й' + 203: 11, # 'к' + 204: 8, # 'л' + 205: 12, # 'м' + 206: 5, # 'н' + 207: 1, # 'о' + 208: 15, # 'п' + 209: 16, # 'я' + 210: 9, # 'р' + 211: 7, # 'с' + 212: 6, # 'т' + 213: 14, # 'у' + 214: 24, # 'ж' + 215: 10, # 'в' + 216: 17, # 'ь' + 217: 18, # 'ы' + 218: 20, # 'з' + 219: 25, # 'ш' + 220: 30, # 'э' + 221: 29, # 'щ' + 222: 22, # 'ч' + 223: 54, # 'ъ' + 224: 59, # 'Ю' + 225: 37, # 'А' + 226: 44, # 'Б' + 227: 58, # 'Ц' + 228: 41, # 'Д' + 229: 48, # 'Е' + 230: 53, # 'Ф' + 231: 46, # 'Г' + 232: 55, # 'Х' + 233: 42, # 'И' + 234: 60, # 'Й' + 235: 36, # 'К' + 236: 49, # 'Л' + 237: 38, # 'М' + 238: 31, # 'Н' + 239: 34, # 'О' + 240: 35, # 'П' + 241: 43, # 'Я' + 242: 45, # 'Р' + 243: 32, # 'С' + 244: 40, # 'Т' + 245: 52, # 'У' + 246: 56, # 'Ж' + 247: 33, # 'В' + 248: 61, # 'Ь' + 249: 62, # 'Ы' + 250: 51, # 'З' + 251: 57, # 'Ш' + 252: 47, # 'Э' + 253: 63, # 'Щ' + 254: 50, # 'Ч' + 255: 70, # 'Ъ' +} + +KOI8_R_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="KOI8-R", + language="Russian", + char_to_order_map=KOI8_R_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +MACCYRILLIC_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 37, # 'А' + 129: 44, # 'Б' + 130: 33, # 'В' + 131: 46, # 'Г' + 132: 41, # 'Д' + 133: 48, # 'Е' + 134: 56, # 'Ж' + 135: 51, # 'З' + 136: 42, # 'И' + 137: 60, # 'Й' + 138: 36, # 'К' + 139: 49, # 'Л' + 140: 38, # 'М' + 141: 31, # 'Н' + 142: 34, # 'О' + 143: 35, # 'П' + 144: 45, # 'Р' + 145: 32, # 'С' + 146: 40, # 'Т' + 147: 52, # 'У' + 148: 53, # 'Ф' + 149: 55, # 'Х' + 150: 58, # 'Ц' + 151: 50, # 'Ч' + 152: 57, # 'Ш' + 153: 63, # 'Щ' + 154: 70, # 'Ъ' + 155: 62, # 'Ы' + 156: 61, # 'Ь' + 157: 47, # 'Э' + 158: 59, # 'Ю' + 159: 43, # 'Я' + 160: 191, # '†' + 161: 192, # '°' + 162: 193, # 'Ґ' + 163: 194, # '£' + 164: 195, # '§' + 165: 196, # '•' + 166: 197, # '¶' + 167: 198, # 'І' + 168: 199, # '®' + 169: 200, # '©' + 170: 201, # '™' + 171: 202, # 'Ђ' + 172: 203, # 'ђ' + 173: 204, # '≠' + 174: 205, # 'Ѓ' + 175: 206, # 'ѓ' + 176: 207, # '∞' + 177: 208, # '±' + 178: 209, # '≤' + 179: 210, # '≥' + 180: 211, # 'і' + 181: 212, # 'µ' + 182: 213, # 'ґ' + 183: 214, # 'Ј' + 184: 215, # 'Є' + 185: 216, # 'є' + 186: 217, # 'Ї' + 187: 218, # 'ї' + 188: 219, # 'Љ' + 189: 220, # 'љ' + 190: 221, # 'Њ' + 191: 222, # 'њ' + 192: 223, # 'ј' + 193: 224, # 'Ѕ' + 194: 225, # '¬' + 195: 226, # '√' + 196: 227, # 'ƒ' + 197: 228, # '≈' + 198: 229, # '∆' + 199: 230, # '«' + 200: 231, # '»' + 201: 232, # '…' + 202: 233, # '\xa0' + 203: 234, # 'Ћ' + 204: 235, # 'ћ' + 205: 236, # 'Ќ' + 206: 237, # 'ќ' + 207: 238, # 'ѕ' + 208: 239, # '–' + 209: 240, # '—' + 210: 241, # '“' + 211: 242, # '”' + 212: 243, # '‘' + 213: 244, # '’' + 214: 245, # '÷' + 215: 246, # '„' + 216: 247, # 'Ў' + 217: 248, # 'ў' + 218: 249, # 'Џ' + 219: 250, # 'џ' + 220: 251, # '№' + 221: 252, # 'Ё' + 222: 68, # 'ё' + 223: 16, # 'я' + 224: 3, # 'а' + 225: 21, # 'б' + 226: 10, # 'в' + 227: 19, # 'г' + 228: 13, # 'д' + 229: 2, # 'е' + 230: 24, # 'ж' + 231: 20, # 'з' + 232: 4, # 'и' + 233: 23, # 'й' + 234: 11, # 'к' + 235: 8, # 'л' + 236: 12, # 'м' + 237: 5, # 'н' + 238: 1, # 'о' + 239: 15, # 'п' + 240: 9, # 'р' + 241: 7, # 'с' + 242: 6, # 'т' + 243: 14, # 'у' + 244: 39, # 'ф' + 245: 26, # 'х' + 246: 28, # 'ц' + 247: 22, # 'ч' + 248: 25, # 'ш' + 249: 29, # 'щ' + 250: 54, # 'ъ' + 251: 18, # 'ы' + 252: 17, # 'ь' + 253: 30, # 'э' + 254: 27, # 'ю' + 255: 255, # '€' +} + +MACCYRILLIC_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="MacCyrillic", + language="Russian", + char_to_order_map=MACCYRILLIC_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +ISO_8859_5_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # '\x80' + 129: 192, # '\x81' + 130: 193, # '\x82' + 131: 194, # '\x83' + 132: 195, # '\x84' + 133: 196, # '\x85' + 134: 197, # '\x86' + 135: 198, # '\x87' + 136: 199, # '\x88' + 137: 200, # '\x89' + 138: 201, # '\x8a' + 139: 202, # '\x8b' + 140: 203, # '\x8c' + 141: 204, # '\x8d' + 142: 205, # '\x8e' + 143: 206, # '\x8f' + 144: 207, # '\x90' + 145: 208, # '\x91' + 146: 209, # '\x92' + 147: 210, # '\x93' + 148: 211, # '\x94' + 149: 212, # '\x95' + 150: 213, # '\x96' + 151: 214, # '\x97' + 152: 215, # '\x98' + 153: 216, # '\x99' + 154: 217, # '\x9a' + 155: 218, # '\x9b' + 156: 219, # '\x9c' + 157: 220, # '\x9d' + 158: 221, # '\x9e' + 159: 222, # '\x9f' + 160: 223, # '\xa0' + 161: 224, # 'Ё' + 162: 225, # 'Ђ' + 163: 226, # 'Ѓ' + 164: 227, # 'Є' + 165: 228, # 'Ѕ' + 166: 229, # 'І' + 167: 230, # 'Ї' + 168: 231, # 'Ј' + 169: 232, # 'Љ' + 170: 233, # 'Њ' + 171: 234, # 'Ћ' + 172: 235, # 'Ќ' + 173: 236, # '\xad' + 174: 237, # 'Ў' + 175: 238, # 'Џ' + 176: 37, # 'А' + 177: 44, # 'Б' + 178: 33, # 'В' + 179: 46, # 'Г' + 180: 41, # 'Д' + 181: 48, # 'Е' + 182: 56, # 'Ж' + 183: 51, # 'З' + 184: 42, # 'И' + 185: 60, # 'Й' + 186: 36, # 'К' + 187: 49, # 'Л' + 188: 38, # 'М' + 189: 31, # 'Н' + 190: 34, # 'О' + 191: 35, # 'П' + 192: 45, # 'Р' + 193: 32, # 'С' + 194: 40, # 'Т' + 195: 52, # 'У' + 196: 53, # 'Ф' + 197: 55, # 'Х' + 198: 58, # 'Ц' + 199: 50, # 'Ч' + 200: 57, # 'Ш' + 201: 63, # 'Щ' + 202: 70, # 'Ъ' + 203: 62, # 'Ы' + 204: 61, # 'Ь' + 205: 47, # 'Э' + 206: 59, # 'Ю' + 207: 43, # 'Я' + 208: 3, # 'а' + 209: 21, # 'б' + 210: 10, # 'в' + 211: 19, # 'г' + 212: 13, # 'д' + 213: 2, # 'е' + 214: 24, # 'ж' + 215: 20, # 'з' + 216: 4, # 'и' + 217: 23, # 'й' + 218: 11, # 'к' + 219: 8, # 'л' + 220: 12, # 'м' + 221: 5, # 'н' + 222: 1, # 'о' + 223: 15, # 'п' + 224: 9, # 'р' + 225: 7, # 'с' + 226: 6, # 'т' + 227: 14, # 'у' + 228: 39, # 'ф' + 229: 26, # 'х' + 230: 28, # 'ц' + 231: 22, # 'ч' + 232: 25, # 'ш' + 233: 29, # 'щ' + 234: 54, # 'ъ' + 235: 18, # 'ы' + 236: 17, # 'ь' + 237: 30, # 'э' + 238: 27, # 'ю' + 239: 16, # 'я' + 240: 239, # '№' + 241: 68, # 'ё' + 242: 240, # 'ђ' + 243: 241, # 'ѓ' + 244: 242, # 'є' + 245: 243, # 'ѕ' + 246: 244, # 'і' + 247: 245, # 'ї' + 248: 246, # 'ј' + 249: 247, # 'љ' + 250: 248, # 'њ' + 251: 249, # 'ћ' + 252: 250, # 'ќ' + 253: 251, # '§' + 254: 252, # 'ў' + 255: 255, # 'џ' +} + +ISO_8859_5_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-5", + language="Russian", + char_to_order_map=ISO_8859_5_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langthaimodel.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langthaimodel.py new file mode 100644 index 0000000..489cad9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langthaimodel.py @@ -0,0 +1,4380 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +THAI_LANG_MODEL = { + 5: { # 'ก' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 3, # 'ฎ' + 57: 2, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 2, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 2, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 3, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 1, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 30: { # 'ข' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 0, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 2, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 2, # 'ี' + 40: 3, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 24: { # 'ค' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 2, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 3, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 8: { # 'ง' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 1, # 'ฉ' + 34: 2, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 2, # 'ศ' + 46: 1, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 3, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 26: { # 'จ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 3, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 52: { # 'ฉ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 1, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 34: { # 'ช' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 1, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 51: { # 'ซ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 3, # 'ึ' + 27: 2, # 'ื' + 32: 1, # 'ุ' + 35: 1, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 1, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 47: { # 'ญ' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 3, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 2, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 58: { # 'ฎ' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 1, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 57: { # 'ฏ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 49: { # 'ฐ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 53: { # 'ฑ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 55: { # 'ฒ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 43: { # 'ณ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 3, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 3, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 3, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 20: { # 'ด' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 2, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 1, # 'ึ' + 27: 2, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 2, # 'ๆ' + 37: 2, # '็' + 6: 1, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 19: { # 'ต' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 2, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 2, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 1, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 2, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 44: { # 'ถ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 3, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 14: { # 'ท' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 3, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 3, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 1, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 3, # 'ศ' + 46: 1, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 48: { # 'ธ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 2, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 2, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 3: { # 'น' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 2, # 'ถ' + 14: 3, # 'ท' + 48: 3, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 1, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 3, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 3, # 'โ' + 29: 3, # 'ใ' + 33: 3, # 'ไ' + 50: 2, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 17: { # 'บ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 1, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 2, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 2, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 25: { # 'ป' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 1, # 'ฎ' + 57: 3, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 1, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 2, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 1, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 39: { # 'ผ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 1, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 0, # 'ุ' + 35: 3, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 1, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 62: { # 'ฝ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 1, # 'ี' + 40: 2, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 1, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 31: { # 'พ' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 2, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 1, # 'ึ' + 27: 3, # 'ื' + 32: 1, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 0, # '่' + 7: 1, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 54: { # 'ฟ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 45: { # 'ภ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 2, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 9: { # 'ม' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 2, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 1, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 2, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 16: { # 'ย' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 2, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 1, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 2, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 2: { # 'ร' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 2, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 3, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 3, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 3, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 2, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 2, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 3, # 'เ' + 28: 3, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 61: { # 'ฤ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 2, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 15: { # 'ล' + 5: 2, # 'ก' + 30: 3, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 3, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 2, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 2, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 12: { # 'ว' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 2, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 42: { # 'ศ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 2, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 3, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 2, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 46: { # 'ษ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 2, # 'ฎ' + 57: 1, # 'ฏ' + 49: 2, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 18: { # 'ส' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 3, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 2, # 'ภ' + 9: 3, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 0, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 1, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 21: { # 'ห' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 4: { # 'อ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 63: { # 'ฯ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 22: { # 'ะ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 1, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 10: { # 'ั' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 3, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 2, # 'ฐ' + 53: 0, # 'ฑ' + 55: 3, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 1: { # 'า' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 1, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 2, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 3, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 3, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 36: { # 'ำ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 23: { # 'ิ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 3, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 2, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 3, # 'ศ' + 46: 2, # 'ษ' + 18: 2, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 13: { # 'ี' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 40: { # 'ึ' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 3, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 27: { # 'ื' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 32: { # 'ุ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 3, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 1, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 1, # 'ศ' + 46: 2, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 35: { # 'ู' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 11: { # 'เ' + 5: 3, # 'ก' + 30: 3, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 3, # 'ฉ' + 34: 3, # 'ช' + 51: 2, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 3, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 3, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 28: { # 'แ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 3, # 'ต' + 44: 2, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 3, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 41: { # 'โ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 1, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 29: { # 'ใ' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 33: { # 'ไ' + 5: 1, # 'ก' + 30: 2, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 1, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 2, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 50: { # 'ๆ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 37: { # '็' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 6: { # '่' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 7: { # '้' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 38: { # '์' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 1, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 56: { # '๑' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 2, # '๑' + 59: 1, # '๒' + 60: 1, # '๕' + }, + 59: { # '๒' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 1, # '๑' + 59: 1, # '๒' + 60: 3, # '๕' + }, + 60: { # '๕' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 2, # '๑' + 59: 1, # '๒' + 60: 0, # '๕' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +TIS_620_THAI_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 182, # 'A' + 66: 106, # 'B' + 67: 107, # 'C' + 68: 100, # 'D' + 69: 183, # 'E' + 70: 184, # 'F' + 71: 185, # 'G' + 72: 101, # 'H' + 73: 94, # 'I' + 74: 186, # 'J' + 75: 187, # 'K' + 76: 108, # 'L' + 77: 109, # 'M' + 78: 110, # 'N' + 79: 111, # 'O' + 80: 188, # 'P' + 81: 189, # 'Q' + 82: 190, # 'R' + 83: 89, # 'S' + 84: 95, # 'T' + 85: 112, # 'U' + 86: 113, # 'V' + 87: 191, # 'W' + 88: 192, # 'X' + 89: 193, # 'Y' + 90: 194, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 64, # 'a' + 98: 72, # 'b' + 99: 73, # 'c' + 100: 114, # 'd' + 101: 74, # 'e' + 102: 115, # 'f' + 103: 116, # 'g' + 104: 102, # 'h' + 105: 81, # 'i' + 106: 201, # 'j' + 107: 117, # 'k' + 108: 90, # 'l' + 109: 103, # 'm' + 110: 78, # 'n' + 111: 82, # 'o' + 112: 96, # 'p' + 113: 202, # 'q' + 114: 91, # 'r' + 115: 79, # 's' + 116: 84, # 't' + 117: 104, # 'u' + 118: 105, # 'v' + 119: 97, # 'w' + 120: 98, # 'x' + 121: 92, # 'y' + 122: 203, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 209, # '\x80' + 129: 210, # '\x81' + 130: 211, # '\x82' + 131: 212, # '\x83' + 132: 213, # '\x84' + 133: 88, # '\x85' + 134: 214, # '\x86' + 135: 215, # '\x87' + 136: 216, # '\x88' + 137: 217, # '\x89' + 138: 218, # '\x8a' + 139: 219, # '\x8b' + 140: 220, # '\x8c' + 141: 118, # '\x8d' + 142: 221, # '\x8e' + 143: 222, # '\x8f' + 144: 223, # '\x90' + 145: 224, # '\x91' + 146: 99, # '\x92' + 147: 85, # '\x93' + 148: 83, # '\x94' + 149: 225, # '\x95' + 150: 226, # '\x96' + 151: 227, # '\x97' + 152: 228, # '\x98' + 153: 229, # '\x99' + 154: 230, # '\x9a' + 155: 231, # '\x9b' + 156: 232, # '\x9c' + 157: 233, # '\x9d' + 158: 234, # '\x9e' + 159: 235, # '\x9f' + 160: 236, # None + 161: 5, # 'ก' + 162: 30, # 'ข' + 163: 237, # 'ฃ' + 164: 24, # 'ค' + 165: 238, # 'ฅ' + 166: 75, # 'ฆ' + 167: 8, # 'ง' + 168: 26, # 'จ' + 169: 52, # 'ฉ' + 170: 34, # 'ช' + 171: 51, # 'ซ' + 172: 119, # 'ฌ' + 173: 47, # 'ญ' + 174: 58, # 'ฎ' + 175: 57, # 'ฏ' + 176: 49, # 'ฐ' + 177: 53, # 'ฑ' + 178: 55, # 'ฒ' + 179: 43, # 'ณ' + 180: 20, # 'ด' + 181: 19, # 'ต' + 182: 44, # 'ถ' + 183: 14, # 'ท' + 184: 48, # 'ธ' + 185: 3, # 'น' + 186: 17, # 'บ' + 187: 25, # 'ป' + 188: 39, # 'ผ' + 189: 62, # 'ฝ' + 190: 31, # 'พ' + 191: 54, # 'ฟ' + 192: 45, # 'ภ' + 193: 9, # 'ม' + 194: 16, # 'ย' + 195: 2, # 'ร' + 196: 61, # 'ฤ' + 197: 15, # 'ล' + 198: 239, # 'ฦ' + 199: 12, # 'ว' + 200: 42, # 'ศ' + 201: 46, # 'ษ' + 202: 18, # 'ส' + 203: 21, # 'ห' + 204: 76, # 'ฬ' + 205: 4, # 'อ' + 206: 66, # 'ฮ' + 207: 63, # 'ฯ' + 208: 22, # 'ะ' + 209: 10, # 'ั' + 210: 1, # 'า' + 211: 36, # 'ำ' + 212: 23, # 'ิ' + 213: 13, # 'ี' + 214: 40, # 'ึ' + 215: 27, # 'ื' + 216: 32, # 'ุ' + 217: 35, # 'ู' + 218: 86, # 'ฺ' + 219: 240, # None + 220: 241, # None + 221: 242, # None + 222: 243, # None + 223: 244, # '฿' + 224: 11, # 'เ' + 225: 28, # 'แ' + 226: 41, # 'โ' + 227: 29, # 'ใ' + 228: 33, # 'ไ' + 229: 245, # 'ๅ' + 230: 50, # 'ๆ' + 231: 37, # '็' + 232: 6, # '่' + 233: 7, # '้' + 234: 67, # '๊' + 235: 77, # '๋' + 236: 38, # '์' + 237: 93, # 'ํ' + 238: 246, # '๎' + 239: 247, # '๏' + 240: 68, # '๐' + 241: 56, # '๑' + 242: 59, # '๒' + 243: 65, # '๓' + 244: 69, # '๔' + 245: 60, # '๕' + 246: 70, # '๖' + 247: 80, # '๗' + 248: 71, # '๘' + 249: 87, # '๙' + 250: 248, # '๚' + 251: 249, # '๛' + 252: 250, # None + 253: 251, # None + 254: 252, # None + 255: 253, # None +} + +TIS_620_THAI_MODEL = SingleByteCharSetModel( + charset_name="TIS-620", + language="Thai", + char_to_order_map=TIS_620_THAI_CHAR_TO_ORDER, + language_model=THAI_LANG_MODEL, + typical_positive_ratio=0.926386, + keep_ascii_letters=False, + alphabet="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛", +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langturkishmodel.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langturkishmodel.py new file mode 100644 index 0000000..291857c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langturkishmodel.py @@ -0,0 +1,4380 @@ +from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +TURKISH_LANG_MODEL = { + 23: { # 'A' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 37: { # 'B' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 47: { # 'C' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 39: { # 'D' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 0, # 'ş' + }, + 29: { # 'E' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 52: { # 'F' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 1, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 2, # 'ş' + }, + 36: { # 'G' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 2, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 1, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 45: { # 'H' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 2, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 2, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 53: { # 'I' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 60: { # 'J' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 16: { # 'K' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 1, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 49: { # 'L' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 2, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 20: { # 'M' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 0, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 46: { # 'N' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 42: { # 'O' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 2, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 48: { # 'P' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 44: { # 'R' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 35: { # 'S' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 1, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 2, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 31: { # 'T' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 2, # 't' + 14: 2, # 'u' + 32: 1, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 51: { # 'U' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 38: { # 'V' + 23: 1, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 1, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 62: { # 'W' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 43: { # 'Y' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 0, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 1, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 56: { # 'Z' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 1: { # 'a' + 23: 3, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 1, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 21: { # 'b' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 3, # 'g' + 25: 1, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 2, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 28: { # 'c' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 2, # 'T' + 51: 2, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 3, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 1, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 1, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 2, # 'ş' + }, + 12: { # 'd' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 2: { # 'e' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 18: { # 'f' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 1, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 1, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 27: { # 'g' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 25: { # 'h' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 3: { # 'i' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 1, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 3, # 'g' + 25: 1, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 24: { # 'j' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 10: { # 'k' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 2, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 5: { # 'l' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 1, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 2, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 13: { # 'm' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 2, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 4: { # 'n' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 15: { # 'o' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 2, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 2, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 2, # 'ş' + }, + 26: { # 'p' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 7: { # 'r' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 1, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 8: { # 's' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 9: { # 't' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 14: { # 'u' + 23: 3, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 2, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 2, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 32: { # 'v' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 57: { # 'w' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 1, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 58: { # 'x' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 11: { # 'y' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 22: { # 'z' + 23: 2, # 'A' + 37: 2, # 'B' + 47: 1, # 'C' + 39: 2, # 'D' + 29: 3, # 'E' + 52: 1, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 2, # 'N' + 42: 2, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 3, # 'T' + 51: 2, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 1, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 2, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 1, # 'Ş' + 19: 2, # 'ş' + }, + 63: { # '·' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 54: { # 'Ç' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 3, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 50: { # 'Ö' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 2, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 1, # 'N' + 42: 2, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 1, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 1, # 's' + 9: 2, # 't' + 14: 0, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 55: { # 'Ü' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 59: { # 'â' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 0, # 'ş' + }, + 33: { # 'ç' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 0, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 61: { # 'î' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 1, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 34: { # 'ö' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 1, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 3, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 1, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 17: { # 'ü' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 30: { # 'ğ' + 23: 0, # 'A' + 37: 2, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 2, # 'N' + 42: 2, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 3, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 2, # 'İ' + 6: 2, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 41: { # 'İ' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 2, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 6: { # 'ı' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 40: { # 'Ş' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 2, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 0, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 3, # 'f' + 27: 0, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 1, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 1, # 'ü' + 30: 2, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 2, # 'ş' + }, + 19: { # 'ş' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 2, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 1, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +ISO_8859_9_TURKISH_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 255, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 255, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 255, # ' ' + 33: 255, # '!' + 34: 255, # '"' + 35: 255, # '#' + 36: 255, # '$' + 37: 255, # '%' + 38: 255, # '&' + 39: 255, # "'" + 40: 255, # '(' + 41: 255, # ')' + 42: 255, # '*' + 43: 255, # '+' + 44: 255, # ',' + 45: 255, # '-' + 46: 255, # '.' + 47: 255, # '/' + 48: 255, # '0' + 49: 255, # '1' + 50: 255, # '2' + 51: 255, # '3' + 52: 255, # '4' + 53: 255, # '5' + 54: 255, # '6' + 55: 255, # '7' + 56: 255, # '8' + 57: 255, # '9' + 58: 255, # ':' + 59: 255, # ';' + 60: 255, # '<' + 61: 255, # '=' + 62: 255, # '>' + 63: 255, # '?' + 64: 255, # '@' + 65: 23, # 'A' + 66: 37, # 'B' + 67: 47, # 'C' + 68: 39, # 'D' + 69: 29, # 'E' + 70: 52, # 'F' + 71: 36, # 'G' + 72: 45, # 'H' + 73: 53, # 'I' + 74: 60, # 'J' + 75: 16, # 'K' + 76: 49, # 'L' + 77: 20, # 'M' + 78: 46, # 'N' + 79: 42, # 'O' + 80: 48, # 'P' + 81: 69, # 'Q' + 82: 44, # 'R' + 83: 35, # 'S' + 84: 31, # 'T' + 85: 51, # 'U' + 86: 38, # 'V' + 87: 62, # 'W' + 88: 65, # 'X' + 89: 43, # 'Y' + 90: 56, # 'Z' + 91: 255, # '[' + 92: 255, # '\\' + 93: 255, # ']' + 94: 255, # '^' + 95: 255, # '_' + 96: 255, # '`' + 97: 1, # 'a' + 98: 21, # 'b' + 99: 28, # 'c' + 100: 12, # 'd' + 101: 2, # 'e' + 102: 18, # 'f' + 103: 27, # 'g' + 104: 25, # 'h' + 105: 3, # 'i' + 106: 24, # 'j' + 107: 10, # 'k' + 108: 5, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 15, # 'o' + 112: 26, # 'p' + 113: 64, # 'q' + 114: 7, # 'r' + 115: 8, # 's' + 116: 9, # 't' + 117: 14, # 'u' + 118: 32, # 'v' + 119: 57, # 'w' + 120: 58, # 'x' + 121: 11, # 'y' + 122: 22, # 'z' + 123: 255, # '{' + 124: 255, # '|' + 125: 255, # '}' + 126: 255, # '~' + 127: 255, # '\x7f' + 128: 180, # '\x80' + 129: 179, # '\x81' + 130: 178, # '\x82' + 131: 177, # '\x83' + 132: 176, # '\x84' + 133: 175, # '\x85' + 134: 174, # '\x86' + 135: 173, # '\x87' + 136: 172, # '\x88' + 137: 171, # '\x89' + 138: 170, # '\x8a' + 139: 169, # '\x8b' + 140: 168, # '\x8c' + 141: 167, # '\x8d' + 142: 166, # '\x8e' + 143: 165, # '\x8f' + 144: 164, # '\x90' + 145: 163, # '\x91' + 146: 162, # '\x92' + 147: 161, # '\x93' + 148: 160, # '\x94' + 149: 159, # '\x95' + 150: 101, # '\x96' + 151: 158, # '\x97' + 152: 157, # '\x98' + 153: 156, # '\x99' + 154: 155, # '\x9a' + 155: 154, # '\x9b' + 156: 153, # '\x9c' + 157: 152, # '\x9d' + 158: 151, # '\x9e' + 159: 106, # '\x9f' + 160: 150, # '\xa0' + 161: 149, # '¡' + 162: 148, # '¢' + 163: 147, # '£' + 164: 146, # '¤' + 165: 145, # '¥' + 166: 144, # '¦' + 167: 100, # '§' + 168: 143, # '¨' + 169: 142, # '©' + 170: 141, # 'ª' + 171: 140, # '«' + 172: 139, # '¬' + 173: 138, # '\xad' + 174: 137, # '®' + 175: 136, # '¯' + 176: 94, # '°' + 177: 80, # '±' + 178: 93, # '²' + 179: 135, # '³' + 180: 105, # '´' + 181: 134, # 'µ' + 182: 133, # '¶' + 183: 63, # '·' + 184: 132, # '¸' + 185: 131, # '¹' + 186: 130, # 'º' + 187: 129, # '»' + 188: 128, # '¼' + 189: 127, # '½' + 190: 126, # '¾' + 191: 125, # '¿' + 192: 124, # 'À' + 193: 104, # 'Á' + 194: 73, # 'Â' + 195: 99, # 'Ã' + 196: 79, # 'Ä' + 197: 85, # 'Å' + 198: 123, # 'Æ' + 199: 54, # 'Ç' + 200: 122, # 'È' + 201: 98, # 'É' + 202: 92, # 'Ê' + 203: 121, # 'Ë' + 204: 120, # 'Ì' + 205: 91, # 'Í' + 206: 103, # 'Î' + 207: 119, # 'Ï' + 208: 68, # 'Ğ' + 209: 118, # 'Ñ' + 210: 117, # 'Ò' + 211: 97, # 'Ó' + 212: 116, # 'Ô' + 213: 115, # 'Õ' + 214: 50, # 'Ö' + 215: 90, # '×' + 216: 114, # 'Ø' + 217: 113, # 'Ù' + 218: 112, # 'Ú' + 219: 111, # 'Û' + 220: 55, # 'Ü' + 221: 41, # 'İ' + 222: 40, # 'Ş' + 223: 86, # 'ß' + 224: 89, # 'à' + 225: 70, # 'á' + 226: 59, # 'â' + 227: 78, # 'ã' + 228: 71, # 'ä' + 229: 82, # 'å' + 230: 88, # 'æ' + 231: 33, # 'ç' + 232: 77, # 'è' + 233: 66, # 'é' + 234: 84, # 'ê' + 235: 83, # 'ë' + 236: 110, # 'ì' + 237: 75, # 'í' + 238: 61, # 'î' + 239: 96, # 'ï' + 240: 30, # 'ğ' + 241: 67, # 'ñ' + 242: 109, # 'ò' + 243: 74, # 'ó' + 244: 87, # 'ô' + 245: 102, # 'õ' + 246: 34, # 'ö' + 247: 95, # '÷' + 248: 81, # 'ø' + 249: 108, # 'ù' + 250: 76, # 'ú' + 251: 72, # 'û' + 252: 17, # 'ü' + 253: 6, # 'ı' + 254: 19, # 'ş' + 255: 107, # 'ÿ' +} + +ISO_8859_9_TURKISH_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-9", + language="Turkish", + char_to_order_map=ISO_8859_9_TURKISH_CHAR_TO_ORDER, + language_model=TURKISH_LANG_MODEL, + typical_positive_ratio=0.97029, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVYZabcdefghijklmnoprstuvyzÂÇÎÖÛÜâçîöûüĞğİıŞş", +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/latin1prober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/latin1prober.py new file mode 100644 index 0000000..59a01d9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/latin1prober.py @@ -0,0 +1,147 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState + +FREQ_CAT_NUM = 4 + +UDF = 0 # undefined +OTH = 1 # other +ASC = 2 # ascii capital letter +ASS = 3 # ascii small letter +ACV = 4 # accent capital vowel +ACO = 5 # accent capital other +ASV = 6 # accent small vowel +ASO = 7 # accent small other +CLASS_NUM = 8 # total classes + +# fmt: off +Latin1_CharToClass = ( + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F + OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 + ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F + OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 + ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F + OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 + OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F + UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 + OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF + ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF + ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 + ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF + ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 + ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +Latin1ClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO + 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, # ASO +) +# fmt: on + + +class Latin1Prober(CharSetProber): + def __init__(self) -> None: + super().__init__() + self._last_char_class = OTH + self._freq_counter: List[int] = [] + self.reset() + + def reset(self) -> None: + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + super().reset() + + @property + def charset_name(self) -> str: + return "ISO-8859-1" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + byte_str = self.remove_xml_tags(byte_str) + for c in byte_str: + char_class = Latin1_CharToClass[c] + freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) + char_class] + if freq == 0: + self._state = ProbingState.NOT_ME + break + self._freq_counter[freq] += 1 + self._last_char_class = char_class + + return self.state + + def get_confidence(self) -> float: + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + confidence = ( + 0.0 + if total < 0.01 + else (self._freq_counter[3] - self._freq_counter[1] * 20.0) / total + ) + confidence = max(confidence, 0.0) + # lower the confidence of latin1 so that other more accurate + # detector can take priority. + confidence *= 0.73 + return confidence diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/macromanprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/macromanprober.py new file mode 100644 index 0000000..1425d10 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/macromanprober.py @@ -0,0 +1,162 @@ +######################## BEGIN LICENSE BLOCK ######################## +# This code was modified from latin1prober.py by Rob Speer . +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Rob Speer - adapt to MacRoman encoding +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState + +FREQ_CAT_NUM = 4 + +UDF = 0 # undefined +OTH = 1 # other +ASC = 2 # ascii capital letter +ASS = 3 # ascii small letter +ACV = 4 # accent capital vowel +ACO = 5 # accent capital other +ASV = 6 # accent small vowel +ASO = 7 # accent small other +ODD = 8 # character that is unlikely to appear +CLASS_NUM = 9 # total classes + +# The change from Latin1 is that we explicitly look for extended characters +# that are infrequently-occurring symbols, and consider them to always be +# improbable. This should let MacRoman get out of the way of more likely +# encodings in most situations. + +# fmt: off +MacRoman_CharToClass = ( + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F + OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 + ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F + OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 + ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F + ACV, ACV, ACO, ACV, ACO, ACV, ACV, ASV, # 80 - 87 + ASV, ASV, ASV, ASV, ASV, ASO, ASV, ASV, # 88 - 8F + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASV, # 90 - 97 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, ASO, # A0 - A7 + OTH, OTH, ODD, ODD, OTH, OTH, ACV, ACV, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, ASV, ASV, # B8 - BF + OTH, OTH, ODD, OTH, ODD, OTH, OTH, OTH, # C0 - C7 + OTH, OTH, OTH, ACV, ACV, ACV, ACV, ASV, # C8 - CF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, ODD, # D0 - D7 + ASV, ACV, ODD, OTH, OTH, OTH, OTH, OTH, # D8 - DF + OTH, OTH, OTH, OTH, OTH, ACV, ACV, ACV, # E0 - E7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # E8 - EF + ODD, ACV, ACV, ACV, ACV, ASV, ODD, ODD, # F0 - F7 + ODD, ODD, ODD, ODD, ODD, ODD, ODD, ODD, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +MacRomanClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO ODD + 0, 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, 1, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, 1, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, 1, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, 1, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, 1, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, 1, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, 1, # ASO + 0, 1, 1, 1, 1, 1, 1, 1, 1, # ODD +) +# fmt: on + + +class MacRomanProber(CharSetProber): + def __init__(self) -> None: + super().__init__() + self._last_char_class = OTH + self._freq_counter: List[int] = [] + self.reset() + + def reset(self) -> None: + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + + # express the prior that MacRoman is a somewhat rare encoding; + # this can be done by starting out in a slightly improbable state + # that must be overcome + self._freq_counter[2] = 10 + + super().reset() + + @property + def charset_name(self) -> str: + return "MacRoman" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + byte_str = self.remove_xml_tags(byte_str) + for c in byte_str: + char_class = MacRoman_CharToClass[c] + freq = MacRomanClassModel[(self._last_char_class * CLASS_NUM) + char_class] + if freq == 0: + self._state = ProbingState.NOT_ME + break + self._freq_counter[freq] += 1 + self._last_char_class = char_class + + return self.state + + def get_confidence(self) -> float: + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + confidence = ( + 0.0 + if total < 0.01 + else (self._freq_counter[3] - self._freq_counter[1] * 20.0) / total + ) + confidence = max(confidence, 0.0) + # lower the confidence of MacRoman so that other more accurate + # detector can take priority. + confidence *= 0.73 + return confidence diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcharsetprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcharsetprober.py new file mode 100644 index 0000000..666307e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcharsetprober.py @@ -0,0 +1,95 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Optional, Union + +from .chardistribution import CharDistributionAnalysis +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, MachineState, ProbingState + + +class MultiByteCharSetProber(CharSetProber): + """ + MultiByteCharSetProber + """ + + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self.distribution_analyzer: Optional[CharDistributionAnalysis] = None + self.coding_sm: Optional[CodingStateMachine] = None + self._last_char = bytearray(b"\0\0") + + def reset(self) -> None: + super().reset() + if self.coding_sm: + self.coding_sm.reset() + if self.distribution_analyzer: + self.distribution_analyzer.reset() + self._last_char = bytearray(b"\0\0") + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + coding_state = self.coding_sm.next_state(byte) + if coding_state == MachineState.ERROR: + self.logger.debug( + "%s %s prober hit error at byte %s", + self.charset_name, + self.language, + i, + ) + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if self.distribution_analyzer.got_enough_data() and ( + self.get_confidence() > self.SHORTCUT_THRESHOLD + ): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self) -> float: + assert self.distribution_analyzer is not None + return self.distribution_analyzer.get_confidence() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcsgroupprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcsgroupprober.py new file mode 100644 index 0000000..6cb9cc7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcsgroupprober.py @@ -0,0 +1,57 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .big5prober import Big5Prober +from .charsetgroupprober import CharSetGroupProber +from .cp949prober import CP949Prober +from .enums import LanguageFilter +from .eucjpprober import EUCJPProber +from .euckrprober import EUCKRProber +from .euctwprober import EUCTWProber +from .gb2312prober import GB2312Prober +from .johabprober import JOHABProber +from .sjisprober import SJISProber +from .utf8prober import UTF8Prober + + +class MBCSGroupProber(CharSetGroupProber): + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self.probers = [ + UTF8Prober(), + SJISProber(), + EUCJPProber(), + GB2312Prober(), + EUCKRProber(), + CP949Prober(), + Big5Prober(), + EUCTWProber(), + JOHABProber(), + ] + self.reset() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcssm.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcssm.py new file mode 100644 index 0000000..7bbe97e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcssm.py @@ -0,0 +1,661 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + +# BIG5 + +# fmt: off +BIG5_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 #allow 0x00 as legal value + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37 + 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f + 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47 + 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f + 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57 + 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f + 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67 + 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f + 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77 + 2, 2, 2, 2, 2, 2, 2, 1, # 78 - 7f + 4, 4, 4, 4, 4, 4, 4, 4, # 80 - 87 + 4, 4, 4, 4, 4, 4, 4, 4, # 88 - 8f + 4, 4, 4, 4, 4, 4, 4, 4, # 90 - 97 + 4, 4, 4, 4, 4, 4, 4, 4, # 98 - 9f + 4, 3, 3, 3, 3, 3, 3, 3, # a0 - a7 + 3, 3, 3, 3, 3, 3, 3, 3, # a8 - af + 3, 3, 3, 3, 3, 3, 3, 3, # b0 - b7 + 3, 3, 3, 3, 3, 3, 3, 3, # b8 - bf + 3, 3, 3, 3, 3, 3, 3, 3, # c0 - c7 + 3, 3, 3, 3, 3, 3, 3, 3, # c8 - cf + 3, 3, 3, 3, 3, 3, 3, 3, # d0 - d7 + 3, 3, 3, 3, 3, 3, 3, 3, # d8 - df + 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7 + 3, 3, 3, 3, 3, 3, 3, 3, # e8 - ef + 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7 + 3, 3, 3, 3, 3, 3, 3, 0 # f8 - ff +) + +BIG5_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 +) +# fmt: on + +BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) + +BIG5_SM_MODEL: CodingStateMachineDict = { + "class_table": BIG5_CLS, + "class_factor": 5, + "state_table": BIG5_ST, + "char_len_table": BIG5_CHAR_LEN_TABLE, + "name": "Big5", +} + +# CP949 +# fmt: off +CP949_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, # 00 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, # 10 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 3f + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, # 40 - 4f + 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, # 50 - 5f + 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, # 60 - 6f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, # 70 - 7f + 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, # 80 - 8f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, # 90 - 9f + 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, # a0 - af + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, # b0 - bf + 7, 7, 7, 7, 7, 7, 9, 2, 2, 3, 2, 2, 2, 2, 2, 2, # c0 - cf + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, # d0 - df + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, # e0 - ef + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, # f0 - ff +) + +CP949_ST = ( +#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 +) +# fmt: on + +CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) + +CP949_SM_MODEL: CodingStateMachineDict = { + "class_table": CP949_CLS, + "class_factor": 10, + "state_table": CP949_ST, + "char_len_table": CP949_CHAR_LEN_TABLE, + "name": "CP949", +} + +# EUC-JP +# fmt: off +EUCJP_CLS = ( + 4, 4, 4, 4, 4, 4, 4, 4, # 00 - 07 + 4, 4, 4, 4, 4, 4, 5, 5, # 08 - 0f + 4, 4, 4, 4, 4, 4, 4, 4, # 10 - 17 + 4, 4, 4, 5, 4, 4, 4, 4, # 18 - 1f + 4, 4, 4, 4, 4, 4, 4, 4, # 20 - 27 + 4, 4, 4, 4, 4, 4, 4, 4, # 28 - 2f + 4, 4, 4, 4, 4, 4, 4, 4, # 30 - 37 + 4, 4, 4, 4, 4, 4, 4, 4, # 38 - 3f + 4, 4, 4, 4, 4, 4, 4, 4, # 40 - 47 + 4, 4, 4, 4, 4, 4, 4, 4, # 48 - 4f + 4, 4, 4, 4, 4, 4, 4, 4, # 50 - 57 + 4, 4, 4, 4, 4, 4, 4, 4, # 58 - 5f + 4, 4, 4, 4, 4, 4, 4, 4, # 60 - 67 + 4, 4, 4, 4, 4, 4, 4, 4, # 68 - 6f + 4, 4, 4, 4, 4, 4, 4, 4, # 70 - 77 + 4, 4, 4, 4, 4, 4, 4, 4, # 78 - 7f + 5, 5, 5, 5, 5, 5, 5, 5, # 80 - 87 + 5, 5, 5, 5, 5, 5, 1, 3, # 88 - 8f + 5, 5, 5, 5, 5, 5, 5, 5, # 90 - 97 + 5, 5, 5, 5, 5, 5, 5, 5, # 98 - 9f + 5, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7 + 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef + 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7 + 0, 0, 0, 0, 0, 0, 0, 5 # f8 - ff +) + +EUCJP_ST = ( + 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f + 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 +) +# fmt: on + +EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) + +EUCJP_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCJP_CLS, + "class_factor": 6, + "state_table": EUCJP_ST, + "char_len_table": EUCJP_CHAR_LEN_TABLE, + "name": "EUC-JP", +} + +# EUC-KR +# fmt: off +EUCKR_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37 + 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f + 1, 1, 1, 1, 1, 1, 1, 1, # 40 - 47 + 1, 1, 1, 1, 1, 1, 1, 1, # 48 - 4f + 1, 1, 1, 1, 1, 1, 1, 1, # 50 - 57 + 1, 1, 1, 1, 1, 1, 1, 1, # 58 - 5f + 1, 1, 1, 1, 1, 1, 1, 1, # 60 - 67 + 1, 1, 1, 1, 1, 1, 1, 1, # 68 - 6f + 1, 1, 1, 1, 1, 1, 1, 1, # 70 - 77 + 1, 1, 1, 1, 1, 1, 1, 1, # 78 - 7f + 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87 + 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f + 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97 + 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f + 0, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 3, 3, 3, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 3, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7 + 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef + 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7 + 2, 2, 2, 2, 2, 2, 2, 0 # f8 - ff +) + +EUCKR_ST = ( + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f +) +# fmt: on + +EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) + +EUCKR_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCKR_CLS, + "class_factor": 4, + "state_table": EUCKR_ST, + "char_len_table": EUCKR_CHAR_LEN_TABLE, + "name": "EUC-KR", +} + +# JOHAB +# fmt: off +JOHAB_CLS = ( + 4,4,4,4,4,4,4,4, # 00 - 07 + 4,4,4,4,4,4,0,0, # 08 - 0f + 4,4,4,4,4,4,4,4, # 10 - 17 + 4,4,4,0,4,4,4,4, # 18 - 1f + 4,4,4,4,4,4,4,4, # 20 - 27 + 4,4,4,4,4,4,4,4, # 28 - 2f + 4,3,3,3,3,3,3,3, # 30 - 37 + 3,3,3,3,3,3,3,3, # 38 - 3f + 3,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,2, # 78 - 7f + 6,6,6,6,8,8,8,8, # 80 - 87 + 8,8,8,8,8,8,8,8, # 88 - 8f + 8,7,7,7,7,7,7,7, # 90 - 97 + 7,7,7,7,7,7,7,7, # 98 - 9f + 7,7,7,7,7,7,7,7, # a0 - a7 + 7,7,7,7,7,7,7,7, # a8 - af + 7,7,7,7,7,7,7,7, # b0 - b7 + 7,7,7,7,7,7,7,7, # b8 - bf + 7,7,7,7,7,7,7,7, # c0 - c7 + 7,7,7,7,7,7,7,7, # c8 - cf + 7,7,7,7,5,5,5,5, # d0 - d7 + 5,9,9,9,9,9,9,5, # d8 - df + 9,9,9,9,9,9,9,9, # e0 - e7 + 9,9,9,9,9,9,9,9, # e8 - ef + 9,9,9,9,9,9,9,9, # f0 - f7 + 9,9,5,5,5,5,5,0 # f8 - ff +) + +JOHAB_ST = ( +# cls = 0 1 2 3 4 5 6 7 8 9 + MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.ERROR ,MachineState.ERROR ,3 ,3 ,4 , # MachineState.START + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME + MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR , # MachineState.ERROR + MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.ERROR ,MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START , # 3 + MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START , # 4 +) +# fmt: on + +JOHAB_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 0, 0, 2, 2, 2) + +JOHAB_SM_MODEL: CodingStateMachineDict = { + "class_table": JOHAB_CLS, + "class_factor": 10, + "state_table": JOHAB_ST, + "char_len_table": JOHAB_CHAR_LEN_TABLE, + "name": "Johab", +} + +# EUC-TW +# fmt: off +EUCTW_CLS = ( + 2, 2, 2, 2, 2, 2, 2, 2, # 00 - 07 + 2, 2, 2, 2, 2, 2, 0, 0, # 08 - 0f + 2, 2, 2, 2, 2, 2, 2, 2, # 10 - 17 + 2, 2, 2, 0, 2, 2, 2, 2, # 18 - 1f + 2, 2, 2, 2, 2, 2, 2, 2, # 20 - 27 + 2, 2, 2, 2, 2, 2, 2, 2, # 28 - 2f + 2, 2, 2, 2, 2, 2, 2, 2, # 30 - 37 + 2, 2, 2, 2, 2, 2, 2, 2, # 38 - 3f + 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47 + 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f + 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57 + 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f + 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67 + 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f + 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77 + 2, 2, 2, 2, 2, 2, 2, 2, # 78 - 7f + 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87 + 0, 0, 0, 0, 0, 0, 6, 0, # 88 - 8f + 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97 + 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f + 0, 3, 4, 4, 4, 4, 4, 4, # a0 - a7 + 5, 5, 1, 1, 1, 1, 1, 1, # a8 - af + 1, 1, 1, 1, 1, 1, 1, 1, # b0 - b7 + 1, 1, 1, 1, 1, 1, 1, 1, # b8 - bf + 1, 1, 3, 1, 3, 3, 3, 3, # c0 - c7 + 3, 3, 3, 3, 3, 3, 3, 3, # c8 - cf + 3, 3, 3, 3, 3, 3, 3, 3, # d0 - d7 + 3, 3, 3, 3, 3, 3, 3, 3, # d8 - df + 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7 + 3, 3, 3, 3, 3, 3, 3, 3, # e8 - ef + 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7 + 3, 3, 3, 3, 3, 3, 3, 0 # f8 - ff +) + +EUCTW_ST = ( + MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 + MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 + MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) +# fmt: on + +EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) + +EUCTW_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCTW_CLS, + "class_factor": 7, + "state_table": EUCTW_ST, + "char_len_table": EUCTW_CHAR_LEN_TABLE, + "name": "x-euc-tw", +} + +# GB2312 +# fmt: off +GB2312_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 3, 3, 3, 3, 3, 3, 3, 3, # 30 - 37 + 3, 3, 1, 1, 1, 1, 1, 1, # 38 - 3f + 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47 + 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f + 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57 + 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f + 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67 + 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f + 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77 + 2, 2, 2, 2, 2, 2, 2, 4, # 78 - 7f + 5, 6, 6, 6, 6, 6, 6, 6, # 80 - 87 + 6, 6, 6, 6, 6, 6, 6, 6, # 88 - 8f + 6, 6, 6, 6, 6, 6, 6, 6, # 90 - 97 + 6, 6, 6, 6, 6, 6, 6, 6, # 98 - 9f + 6, 6, 6, 6, 6, 6, 6, 6, # a0 - a7 + 6, 6, 6, 6, 6, 6, 6, 6, # a8 - af + 6, 6, 6, 6, 6, 6, 6, 6, # b0 - b7 + 6, 6, 6, 6, 6, 6, 6, 6, # b8 - bf + 6, 6, 6, 6, 6, 6, 6, 6, # c0 - c7 + 6, 6, 6, 6, 6, 6, 6, 6, # c8 - cf + 6, 6, 6, 6, 6, 6, 6, 6, # d0 - d7 + 6, 6, 6, 6, 6, 6, 6, 6, # d8 - df + 6, 6, 6, 6, 6, 6, 6, 6, # e0 - e7 + 6, 6, 6, 6, 6, 6, 6, 6, # e8 - ef + 6, 6, 6, 6, 6, 6, 6, 6, # f0 - f7 + 6, 6, 6, 6, 6, 6, 6, 0 # f8 - ff +) + +GB2312_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 + 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) +# fmt: on + +# To be accurate, the length of class 6 can be either 2 or 4. +# But it is not necessary to discriminate between the two since +# it is used for frequency analysis only, and we are validating +# each code range there as well. So it is safe to set it to be +# 2 here. +GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) + +GB2312_SM_MODEL: CodingStateMachineDict = { + "class_table": GB2312_CLS, + "class_factor": 7, + "state_table": GB2312_ST, + "char_len_table": GB2312_CHAR_LEN_TABLE, + "name": "GB2312", +} + +# Shift_JIS +# fmt: off +SJIS_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37 + 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f + 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47 + 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f + 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57 + 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f + 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67 + 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f + 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77 + 2, 2, 2, 2, 2, 2, 2, 1, # 78 - 7f + 3, 3, 3, 3, 3, 2, 2, 3, # 80 - 87 + 3, 3, 3, 3, 3, 3, 3, 3, # 88 - 8f + 3, 3, 3, 3, 3, 3, 3, 3, # 90 - 97 + 3, 3, 3, 3, 3, 3, 3, 3, # 98 - 9f + #0xa0 is illegal in sjis encoding, but some pages does + #contain such byte. We need to be more error forgiven. + 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7 + 3, 3, 3, 3, 3, 4, 4, 4, # e8 - ef + 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7 + 3, 3, 3, 3, 3, 0, 0, 0, # f8 - ff +) + +SJIS_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 +) +# fmt: on + +SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) + +SJIS_SM_MODEL: CodingStateMachineDict = { + "class_table": SJIS_CLS, + "class_factor": 6, + "state_table": SJIS_ST, + "char_len_table": SJIS_CHAR_LEN_TABLE, + "name": "Shift_JIS", +} + +# UCS2-BE +# fmt: off +UCS2BE_CLS = ( + 0, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 1, 0, 0, 2, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 3, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27 + 0, 3, 3, 3, 3, 3, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 0, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87 + 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f + 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97 + 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f + 0, 0, 0, 0, 0, 0, 0, 0, # a0 - a7 + 0, 0, 0, 0, 0, 0, 0, 0, # a8 - af + 0, 0, 0, 0, 0, 0, 0, 0, # b0 - b7 + 0, 0, 0, 0, 0, 0, 0, 0, # b8 - bf + 0, 0, 0, 0, 0, 0, 0, 0, # c0 - c7 + 0, 0, 0, 0, 0, 0, 0, 0, # c8 - cf + 0, 0, 0, 0, 0, 0, 0, 0, # d0 - d7 + 0, 0, 0, 0, 0, 0, 0, 0, # d8 - df + 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7 + 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef + 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7 + 0, 0, 0, 0, 0, 0, 4, 5 # f8 - ff +) + +UCS2BE_ST = ( + 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 + 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f + 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 + 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f + 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) +# fmt: on + +UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) + +UCS2BE_SM_MODEL: CodingStateMachineDict = { + "class_table": UCS2BE_CLS, + "class_factor": 6, + "state_table": UCS2BE_ST, + "char_len_table": UCS2BE_CHAR_LEN_TABLE, + "name": "UTF-16BE", +} + +# UCS2-LE +# fmt: off +UCS2LE_CLS = ( + 0, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 1, 0, 0, 2, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 3, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27 + 0, 3, 3, 3, 3, 3, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 0, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87 + 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f + 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97 + 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f + 0, 0, 0, 0, 0, 0, 0, 0, # a0 - a7 + 0, 0, 0, 0, 0, 0, 0, 0, # a8 - af + 0, 0, 0, 0, 0, 0, 0, 0, # b0 - b7 + 0, 0, 0, 0, 0, 0, 0, 0, # b8 - bf + 0, 0, 0, 0, 0, 0, 0, 0, # c0 - c7 + 0, 0, 0, 0, 0, 0, 0, 0, # c8 - cf + 0, 0, 0, 0, 0, 0, 0, 0, # d0 - d7 + 0, 0, 0, 0, 0, 0, 0, 0, # d8 - df + 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7 + 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef + 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7 + 0, 0, 0, 0, 0, 0, 4, 5 # f8 - ff +) + +UCS2LE_ST = ( + 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f + 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 + 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) +# fmt: on + +UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) + +UCS2LE_SM_MODEL: CodingStateMachineDict = { + "class_table": UCS2LE_CLS, + "class_factor": 6, + "state_table": UCS2LE_ST, + "char_len_table": UCS2LE_CHAR_LEN_TABLE, + "name": "UTF-16LE", +} + +# UTF-8 +# fmt: off +UTF8_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 #allow 0x00 as a legal value + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37 + 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f + 1, 1, 1, 1, 1, 1, 1, 1, # 40 - 47 + 1, 1, 1, 1, 1, 1, 1, 1, # 48 - 4f + 1, 1, 1, 1, 1, 1, 1, 1, # 50 - 57 + 1, 1, 1, 1, 1, 1, 1, 1, # 58 - 5f + 1, 1, 1, 1, 1, 1, 1, 1, # 60 - 67 + 1, 1, 1, 1, 1, 1, 1, 1, # 68 - 6f + 1, 1, 1, 1, 1, 1, 1, 1, # 70 - 77 + 1, 1, 1, 1, 1, 1, 1, 1, # 78 - 7f + 2, 2, 2, 2, 3, 3, 3, 3, # 80 - 87 + 4, 4, 4, 4, 4, 4, 4, 4, # 88 - 8f + 4, 4, 4, 4, 4, 4, 4, 4, # 90 - 97 + 4, 4, 4, 4, 4, 4, 4, 4, # 98 - 9f + 5, 5, 5, 5, 5, 5, 5, 5, # a0 - a7 + 5, 5, 5, 5, 5, 5, 5, 5, # a8 - af + 5, 5, 5, 5, 5, 5, 5, 5, # b0 - b7 + 5, 5, 5, 5, 5, 5, 5, 5, # b8 - bf + 0, 0, 6, 6, 6, 6, 6, 6, # c0 - c7 + 6, 6, 6, 6, 6, 6, 6, 6, # c8 - cf + 6, 6, 6, 6, 6, 6, 6, 6, # d0 - d7 + 6, 6, 6, 6, 6, 6, 6, 6, # d8 - df + 7, 8, 8, 8, 8, 8, 8, 8, # e0 - e7 + 8, 8, 8, 8, 8, 9, 8, 8, # e8 - ef + 10, 11, 11, 11, 11, 11, 11, 11, # f0 - f7 + 12, 13, 13, 13, 14, 15, 0, 0 # f8 - ff +) + +UTF8_ST = ( + MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 + 9, 11, 8, 7, 6, 5, 4, 3,#08-0f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f + MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f + MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f + MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f + MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af + MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf +) +# fmt: on + +UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) + +UTF8_SM_MODEL: CodingStateMachineDict = { + "class_table": UTF8_CLS, + "class_factor": 16, + "state_table": UTF8_ST, + "char_len_table": UTF8_CHAR_LEN_TABLE, + "name": "UTF-8", +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..96dbf3a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-312.pyc new file mode 100644 index 0000000..10de985 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/languages.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/languages.py new file mode 100644 index 0000000..eb40c5f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/languages.py @@ -0,0 +1,352 @@ +""" +Metadata about languages used by our model training code for our +SingleByteCharSetProbers. Could be used for other things in the future. + +This code is based on the language metadata from the uchardet project. +""" + +from string import ascii_letters +from typing import List, Optional + +# TODO: Add Ukrainian (KOI8-U) + + +class Language: + """Metadata about a language useful for training models + + :ivar name: The human name for the language, in English. + :type name: str + :ivar iso_code: 2-letter ISO 639-1 if possible, 3-letter ISO code otherwise, + or use another catalog as a last resort. + :type iso_code: str + :ivar use_ascii: Whether or not ASCII letters should be included in trained + models. + :type use_ascii: bool + :ivar charsets: The charsets we want to support and create data for. + :type charsets: list of str + :ivar alphabet: The characters in the language's alphabet. If `use_ascii` is + `True`, you only need to add those not in the ASCII set. + :type alphabet: str + :ivar wiki_start_pages: The Wikipedia pages to start from if we're crawling + Wikipedia for training data. + :type wiki_start_pages: list of str + """ + + def __init__( + self, + name: Optional[str] = None, + iso_code: Optional[str] = None, + use_ascii: bool = True, + charsets: Optional[List[str]] = None, + alphabet: Optional[str] = None, + wiki_start_pages: Optional[List[str]] = None, + ) -> None: + super().__init__() + self.name = name + self.iso_code = iso_code + self.use_ascii = use_ascii + self.charsets = charsets + if self.use_ascii: + if alphabet: + alphabet += ascii_letters + else: + alphabet = ascii_letters + elif not alphabet: + raise ValueError("Must supply alphabet if use_ascii is False") + self.alphabet = "".join(sorted(set(alphabet))) if alphabet else None + self.wiki_start_pages = wiki_start_pages + + def __repr__(self) -> str: + param_str = ", ".join( + f"{k}={v!r}" for k, v in self.__dict__.items() if not k.startswith("_") + ) + return f"{self.__class__.__name__}({param_str})" + + +LANGUAGES = { + "Arabic": Language( + name="Arabic", + iso_code="ar", + use_ascii=False, + # We only support encodings that use isolated + # forms, because the current recommendation is + # that the rendering system handles presentation + # forms. This means we purposefully skip IBM864. + charsets=["ISO-8859-6", "WINDOWS-1256", "CP720", "CP864"], + alphabet="ءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿـفقكلمنهوىيًٌٍَُِّ", + wiki_start_pages=["الصفحة_الرئيسية"], + ), + "Belarusian": Language( + name="Belarusian", + iso_code="be", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "IBM866", "MacCyrillic"], + alphabet="АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШЫЬЭЮЯабвгдеёжзійклмнопрстуўфхцчшыьэюяʼ", + wiki_start_pages=["Галоўная_старонка"], + ), + "Bulgarian": Language( + name="Bulgarian", + iso_code="bg", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "IBM855"], + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", + wiki_start_pages=["Начална_страница"], + ), + "Czech": Language( + name="Czech", + iso_code="cz", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ", + wiki_start_pages=["Hlavní_strana"], + ), + "Danish": Language( + name="Danish", + iso_code="da", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="æøåÆØÅ", + wiki_start_pages=["Forside"], + ), + "German": Language( + name="German", + iso_code="de", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="äöüßẞÄÖÜ", + wiki_start_pages=["Wikipedia:Hauptseite"], + ), + "Greek": Language( + name="Greek", + iso_code="el", + use_ascii=False, + charsets=["ISO-8859-7", "WINDOWS-1253"], + alphabet="αβγδεζηθικλμνξοπρσςτυφχψωάέήίόύώΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΣΤΥΦΧΨΩΆΈΉΊΌΎΏ", + wiki_start_pages=["Πύλη:Κύρια"], + ), + "English": Language( + name="English", + iso_code="en", + use_ascii=True, + charsets=["ISO-8859-1", "WINDOWS-1252", "MacRoman"], + wiki_start_pages=["Main_Page"], + ), + "Esperanto": Language( + name="Esperanto", + iso_code="eo", + # Q, W, X, and Y not used at all + use_ascii=False, + charsets=["ISO-8859-3"], + alphabet="abcĉdefgĝhĥijĵklmnoprsŝtuŭvzABCĈDEFGĜHĤIJĴKLMNOPRSŜTUŬVZ", + wiki_start_pages=["Vikipedio:Ĉefpaĝo"], + ), + "Spanish": Language( + name="Spanish", + iso_code="es", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ñáéíóúüÑÁÉÍÓÚÜ", + wiki_start_pages=["Wikipedia:Portada"], + ), + "Estonian": Language( + name="Estonian", + iso_code="et", + use_ascii=False, + charsets=["ISO-8859-4", "ISO-8859-13", "WINDOWS-1257"], + # C, F, Š, Q, W, X, Y, Z, Ž are only for + # loanwords + alphabet="ABDEGHIJKLMNOPRSTUVÕÄÖÜabdeghijklmnoprstuvõäöü", + wiki_start_pages=["Esileht"], + ), + "Finnish": Language( + name="Finnish", + iso_code="fi", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÅÄÖŠŽåäöšž", + wiki_start_pages=["Wikipedia:Etusivu"], + ), + "French": Language( + name="French", + iso_code="fr", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="œàâçèéîïùûêŒÀÂÇÈÉÎÏÙÛÊ", + wiki_start_pages=["Wikipédia:Accueil_principal", "Bœuf (animal)"], + ), + "Hebrew": Language( + name="Hebrew", + iso_code="he", + use_ascii=False, + charsets=["ISO-8859-8", "WINDOWS-1255"], + alphabet="אבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ", + wiki_start_pages=["עמוד_ראשי"], + ), + "Croatian": Language( + name="Croatian", + iso_code="hr", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcčćdđefghijklmnoprsštuvzžABCČĆDĐEFGHIJKLMNOPRSŠTUVZŽ", + wiki_start_pages=["Glavna_stranica"], + ), + "Hungarian": Language( + name="Hungarian", + iso_code="hu", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcdefghijklmnoprstuvzáéíóöőúüűABCDEFGHIJKLMNOPRSTUVZÁÉÍÓÖŐÚÜŰ", + wiki_start_pages=["Kezdőlap"], + ), + "Italian": Language( + name="Italian", + iso_code="it", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÀÈÉÌÒÓÙàèéìòóù", + wiki_start_pages=["Pagina_principale"], + ), + "Lithuanian": Language( + name="Lithuanian", + iso_code="lt", + use_ascii=False, + charsets=["ISO-8859-13", "WINDOWS-1257", "ISO-8859-4"], + # Q, W, and X not used at all + alphabet="AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽaąbcčdeęėfghiįyjklmnoprsštuųūvzž", + wiki_start_pages=["Pagrindinis_puslapis"], + ), + "Latvian": Language( + name="Latvian", + iso_code="lv", + use_ascii=False, + charsets=["ISO-8859-13", "WINDOWS-1257", "ISO-8859-4"], + # Q, W, X, Y are only for loanwords + alphabet="AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽaābcčdeēfgģhiījkķlļmnņoprsštuūvzž", + wiki_start_pages=["Sākumlapa"], + ), + "Macedonian": Language( + name="Macedonian", + iso_code="mk", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "MacCyrillic", "IBM855"], + alphabet="АБВГДЃЕЖЗЅИЈКЛЉМНЊОПРСТЌУФХЦЧЏШабвгдѓежзѕијклљмнњопрстќуфхцчџш", + wiki_start_pages=["Главна_страница"], + ), + "Dutch": Language( + name="Dutch", + iso_code="nl", + use_ascii=True, + charsets=["ISO-8859-1", "WINDOWS-1252", "MacRoman"], + wiki_start_pages=["Hoofdpagina"], + ), + "Polish": Language( + name="Polish", + iso_code="pl", + # Q and X are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻaąbcćdeęfghijklłmnńoóprsśtuwyzźż", + wiki_start_pages=["Wikipedia:Strona_główna"], + ), + "Portuguese": Language( + name="Portuguese", + iso_code="pt", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÁÂÃÀÇÉÊÍÓÔÕÚáâãàçéêíóôõú", + wiki_start_pages=["Wikipédia:Página_principal"], + ), + "Romanian": Language( + name="Romanian", + iso_code="ro", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="ăâîșțĂÂÎȘȚ", + wiki_start_pages=["Pagina_principală"], + ), + "Russian": Language( + name="Russian", + iso_code="ru", + use_ascii=False, + charsets=[ + "ISO-8859-5", + "WINDOWS-1251", + "KOI8-R", + "MacCyrillic", + "IBM866", + "IBM855", + ], + alphabet="абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", + wiki_start_pages=["Заглавная_страница"], + ), + "Slovak": Language( + name="Slovak", + iso_code="sk", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="áäčďéíĺľňóôŕšťúýžÁÄČĎÉÍĹĽŇÓÔŔŠŤÚÝŽ", + wiki_start_pages=["Hlavná_stránka"], + ), + "Slovene": Language( + name="Slovene", + iso_code="sl", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcčdefghijklmnoprsštuvzžABCČDEFGHIJKLMNOPRSŠTUVZŽ", + wiki_start_pages=["Glavna_stran"], + ), + # Serbian can be written in both Latin and Cyrillic, but there's no + # simple way to get the Latin alphabet pages from Wikipedia through + # the API, so for now we just support Cyrillic. + "Serbian": Language( + name="Serbian", + iso_code="sr", + alphabet="АБВГДЂЕЖЗИЈКЛЉМНЊОПРСТЋУФХЦЧЏШабвгдђежзијклљмнњопрстћуфхцчџш", + charsets=["ISO-8859-5", "WINDOWS-1251", "MacCyrillic", "IBM855"], + wiki_start_pages=["Главна_страна"], + ), + "Thai": Language( + name="Thai", + iso_code="th", + use_ascii=False, + charsets=["ISO-8859-11", "TIS-620", "CP874"], + alphabet="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛", + wiki_start_pages=["หน้าหลัก"], + ), + "Turkish": Language( + name="Turkish", + iso_code="tr", + # Q, W, and X are not used by Turkish + use_ascii=False, + charsets=["ISO-8859-3", "ISO-8859-9", "WINDOWS-1254"], + alphabet="abcçdefgğhıijklmnoöprsştuüvyzâîûABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZÂÎÛ", + wiki_start_pages=["Ana_Sayfa"], + ), + "Vietnamese": Language( + name="Vietnamese", + iso_code="vi", + use_ascii=False, + # Windows-1258 is the only common 8-bit + # Vietnamese encoding supported by Python. + # From Wikipedia: + # For systems that lack support for Unicode, + # dozens of 8-bit Vietnamese code pages are + # available.[1] The most common are VISCII + # (TCVN 5712:1993), VPS, and Windows-1258.[3] + # Where ASCII is required, such as when + # ensuring readability in plain text e-mail, + # Vietnamese letters are often encoded + # according to Vietnamese Quoted-Readable + # (VIQR) or VSCII Mnemonic (VSCII-MNEM),[4] + # though usage of either variable-width + # scheme has declined dramatically following + # the adoption of Unicode on the World Wide + # Web. + charsets=["WINDOWS-1258"], + alphabet="aăâbcdđeêghiklmnoôơpqrstuưvxyAĂÂBCDĐEÊGHIKLMNOÔƠPQRSTUƯVXY", + wiki_start_pages=["Chữ_Quốc_ngữ"], + ), +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/resultdict.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/resultdict.py new file mode 100644 index 0000000..7d36e64 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/resultdict.py @@ -0,0 +1,16 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + # TypedDict was introduced in Python 3.8. + # + # TODO: Remove the else block and TYPE_CHECKING check when dropping support + # for Python 3.7. + from typing import TypedDict + + class ResultDict(TypedDict): + encoding: Optional[str] + confidence: float + language: Optional[str] + +else: + ResultDict = dict diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sbcharsetprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sbcharsetprober.py new file mode 100644 index 0000000..0ffbcdd --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sbcharsetprober.py @@ -0,0 +1,162 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Dict, List, NamedTuple, Optional, Union + +from .charsetprober import CharSetProber +from .enums import CharacterCategory, ProbingState, SequenceLikelihood + + +class SingleByteCharSetModel(NamedTuple): + charset_name: str + language: str + char_to_order_map: Dict[int, int] + language_model: Dict[int, Dict[int, int]] + typical_positive_ratio: float + keep_ascii_letters: bool + alphabet: str + + +class SingleByteCharSetProber(CharSetProber): + SAMPLE_SIZE = 64 + SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 + POSITIVE_SHORTCUT_THRESHOLD = 0.95 + NEGATIVE_SHORTCUT_THRESHOLD = 0.05 + + def __init__( + self, + model: SingleByteCharSetModel, + is_reversed: bool = False, + name_prober: Optional[CharSetProber] = None, + ) -> None: + super().__init__() + self._model = model + # TRUE if we need to reverse every pair in the model lookup + self._reversed = is_reversed + # Optional auxiliary prober for name decision + self._name_prober = name_prober + self._last_order = 255 + self._seq_counters: List[int] = [] + self._total_seqs = 0 + self._total_char = 0 + self._control_char = 0 + self._freq_char = 0 + self.reset() + + def reset(self) -> None: + super().reset() + # char order of last character + self._last_order = 255 + self._seq_counters = [0] * SequenceLikelihood.get_num_categories() + self._total_seqs = 0 + self._total_char = 0 + self._control_char = 0 + # characters that fall in our sampling range + self._freq_char = 0 + + @property + def charset_name(self) -> Optional[str]: + if self._name_prober: + return self._name_prober.charset_name + return self._model.charset_name + + @property + def language(self) -> Optional[str]: + if self._name_prober: + return self._name_prober.language + return self._model.language + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + # TODO: Make filter_international_words keep things in self.alphabet + if not self._model.keep_ascii_letters: + byte_str = self.filter_international_words(byte_str) + else: + byte_str = self.remove_xml_tags(byte_str) + if not byte_str: + return self.state + char_to_order_map = self._model.char_to_order_map + language_model = self._model.language_model + for char in byte_str: + order = char_to_order_map.get(char, CharacterCategory.UNDEFINED) + # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but + # CharacterCategory.SYMBOL is actually 253, so we use CONTROL + # to make it closer to the original intent. The only difference + # is whether or not we count digits and control characters for + # _total_char purposes. + if order < CharacterCategory.CONTROL: + self._total_char += 1 + if order < self.SAMPLE_SIZE: + self._freq_char += 1 + if self._last_order < self.SAMPLE_SIZE: + self._total_seqs += 1 + if not self._reversed: + lm_cat = language_model[self._last_order][order] + else: + lm_cat = language_model[order][self._last_order] + self._seq_counters[lm_cat] += 1 + self._last_order = order + + charset_name = self._model.charset_name + if self.state == ProbingState.DETECTING: + if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: + confidence = self.get_confidence() + if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: + self.logger.debug( + "%s confidence = %s, we have a winner", charset_name, confidence + ) + self._state = ProbingState.FOUND_IT + elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: + self.logger.debug( + "%s confidence = %s, below negative shortcut threshold %s", + charset_name, + confidence, + self.NEGATIVE_SHORTCUT_THRESHOLD, + ) + self._state = ProbingState.NOT_ME + + return self.state + + def get_confidence(self) -> float: + r = 0.01 + if self._total_seqs > 0: + r = ( + ( + self._seq_counters[SequenceLikelihood.POSITIVE] + + 0.25 * self._seq_counters[SequenceLikelihood.LIKELY] + ) + / self._total_seqs + / self._model.typical_positive_ratio + ) + # The more control characters (proportionnaly to the size + # of the text), the less confident we become in the current + # charset. + r = r * (self._total_char - self._control_char) / self._total_char + r = r * self._freq_char / self._total_char + if r >= 1.0: + r = 0.99 + return r diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sbcsgroupprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sbcsgroupprober.py new file mode 100644 index 0000000..890ae84 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sbcsgroupprober.py @@ -0,0 +1,88 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .hebrewprober import HebrewProber +from .langbulgarianmodel import ISO_8859_5_BULGARIAN_MODEL, WINDOWS_1251_BULGARIAN_MODEL +from .langgreekmodel import ISO_8859_7_GREEK_MODEL, WINDOWS_1253_GREEK_MODEL +from .langhebrewmodel import WINDOWS_1255_HEBREW_MODEL + +# from .langhungarianmodel import (ISO_8859_2_HUNGARIAN_MODEL, +# WINDOWS_1250_HUNGARIAN_MODEL) +from .langrussianmodel import ( + IBM855_RUSSIAN_MODEL, + IBM866_RUSSIAN_MODEL, + ISO_8859_5_RUSSIAN_MODEL, + KOI8_R_RUSSIAN_MODEL, + MACCYRILLIC_RUSSIAN_MODEL, + WINDOWS_1251_RUSSIAN_MODEL, +) +from .langthaimodel import TIS_620_THAI_MODEL +from .langturkishmodel import ISO_8859_9_TURKISH_MODEL +from .sbcharsetprober import SingleByteCharSetProber + + +class SBCSGroupProber(CharSetGroupProber): + def __init__(self) -> None: + super().__init__() + hebrew_prober = HebrewProber() + logical_hebrew_prober = SingleByteCharSetProber( + WINDOWS_1255_HEBREW_MODEL, is_reversed=False, name_prober=hebrew_prober + ) + # TODO: See if using ISO-8859-8 Hebrew model works better here, since + # it's actually the visual one + visual_hebrew_prober = SingleByteCharSetProber( + WINDOWS_1255_HEBREW_MODEL, is_reversed=True, name_prober=hebrew_prober + ) + hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) + # TODO: ORDER MATTERS HERE. I changed the order vs what was in master + # and several tests failed that did not before. Some thought + # should be put into the ordering, and we should consider making + # order not matter here, because that is very counter-intuitive. + self.probers = [ + SingleByteCharSetProber(WINDOWS_1251_RUSSIAN_MODEL), + SingleByteCharSetProber(KOI8_R_RUSSIAN_MODEL), + SingleByteCharSetProber(ISO_8859_5_RUSSIAN_MODEL), + SingleByteCharSetProber(MACCYRILLIC_RUSSIAN_MODEL), + SingleByteCharSetProber(IBM866_RUSSIAN_MODEL), + SingleByteCharSetProber(IBM855_RUSSIAN_MODEL), + SingleByteCharSetProber(ISO_8859_7_GREEK_MODEL), + SingleByteCharSetProber(WINDOWS_1253_GREEK_MODEL), + SingleByteCharSetProber(ISO_8859_5_BULGARIAN_MODEL), + SingleByteCharSetProber(WINDOWS_1251_BULGARIAN_MODEL), + # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) + # after we retrain model. + # SingleByteCharSetProber(ISO_8859_2_HUNGARIAN_MODEL), + # SingleByteCharSetProber(WINDOWS_1250_HUNGARIAN_MODEL), + SingleByteCharSetProber(TIS_620_THAI_MODEL), + SingleByteCharSetProber(ISO_8859_9_TURKISH_MODEL), + hebrew_prober, + logical_hebrew_prober, + visual_hebrew_prober, + ] + self.reset() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sjisprober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sjisprober.py new file mode 100644 index 0000000..91df077 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sjisprober.py @@ -0,0 +1,105 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Union + +from .chardistribution import SJISDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .jpcntx import SJISContextAnalysis +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import SJIS_SM_MODEL + + +class SJISProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) + self.distribution_analyzer = SJISDistributionAnalysis() + self.context_analyzer = SJISContextAnalysis() + self.reset() + + def reset(self) -> None: + super().reset() + self.context_analyzer.reset() + + @property + def charset_name(self) -> str: + return self.context_analyzer.charset_name + + @property + def language(self) -> str: + return "Japanese" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + coding_state = self.coding_sm.next_state(byte) + if coding_state == MachineState.ERROR: + self.logger.debug( + "%s %s prober hit error at byte %s", + self.charset_name, + self.language, + i, + ) + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + self.context_analyzer.feed( + self._last_char[2 - char_len :], char_len + ) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed( + byte_str[i + 1 - char_len : i + 3 - char_len], char_len + ) + self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if self.context_analyzer.got_enough_data() and ( + self.get_confidence() > self.SHORTCUT_THRESHOLD + ): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self) -> float: + assert self.distribution_analyzer is not None + + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/universaldetector.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/universaldetector.py new file mode 100644 index 0000000..30c441d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/universaldetector.py @@ -0,0 +1,362 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### +""" +Module containing the UniversalDetector detector class, which is the primary +class a user of ``chardet`` should use. + +:author: Mark Pilgrim (initial port to Python) +:author: Shy Shalom (original C code) +:author: Dan Blanchard (major refactoring for 3.0) +:author: Ian Cordasco +""" + + +import codecs +import logging +import re +from typing import List, Optional, Union + +from .charsetgroupprober import CharSetGroupProber +from .charsetprober import CharSetProber +from .enums import InputState, LanguageFilter, ProbingState +from .escprober import EscCharSetProber +from .latin1prober import Latin1Prober +from .macromanprober import MacRomanProber +from .mbcsgroupprober import MBCSGroupProber +from .resultdict import ResultDict +from .sbcsgroupprober import SBCSGroupProber +from .utf1632prober import UTF1632Prober + + +class UniversalDetector: + """ + The ``UniversalDetector`` class underlies the ``chardet.detect`` function + and coordinates all of the different charset probers. + + To get a ``dict`` containing an encoding and its confidence, you can simply + run: + + .. code:: + + u = UniversalDetector() + u.feed(some_bytes) + u.close() + detected = u.result + + """ + + MINIMUM_THRESHOLD = 0.20 + HIGH_BYTE_DETECTOR = re.compile(b"[\x80-\xFF]") + ESC_DETECTOR = re.compile(b"(\033|~{)") + WIN_BYTE_DETECTOR = re.compile(b"[\x80-\x9F]") + ISO_WIN_MAP = { + "iso-8859-1": "Windows-1252", + "iso-8859-2": "Windows-1250", + "iso-8859-5": "Windows-1251", + "iso-8859-6": "Windows-1256", + "iso-8859-7": "Windows-1253", + "iso-8859-8": "Windows-1255", + "iso-8859-9": "Windows-1254", + "iso-8859-13": "Windows-1257", + } + # Based on https://encoding.spec.whatwg.org/#names-and-labels + # but altered to match Python names for encodings and remove mappings + # that break tests. + LEGACY_MAP = { + "ascii": "Windows-1252", + "iso-8859-1": "Windows-1252", + "tis-620": "ISO-8859-11", + "iso-8859-9": "Windows-1254", + "gb2312": "GB18030", + "euc-kr": "CP949", + "utf-16le": "UTF-16", + } + + def __init__( + self, + lang_filter: LanguageFilter = LanguageFilter.ALL, + should_rename_legacy: bool = False, + ) -> None: + self._esc_charset_prober: Optional[EscCharSetProber] = None + self._utf1632_prober: Optional[UTF1632Prober] = None + self._charset_probers: List[CharSetProber] = [] + self.result: ResultDict = { + "encoding": None, + "confidence": 0.0, + "language": None, + } + self.done = False + self._got_data = False + self._input_state = InputState.PURE_ASCII + self._last_char = b"" + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + self._has_win_bytes = False + self.should_rename_legacy = should_rename_legacy + self.reset() + + @property + def input_state(self) -> int: + return self._input_state + + @property + def has_win_bytes(self) -> bool: + return self._has_win_bytes + + @property + def charset_probers(self) -> List[CharSetProber]: + return self._charset_probers + + def reset(self) -> None: + """ + Reset the UniversalDetector and all of its probers back to their + initial states. This is called by ``__init__``, so you only need to + call this directly in between analyses of different documents. + """ + self.result = {"encoding": None, "confidence": 0.0, "language": None} + self.done = False + self._got_data = False + self._has_win_bytes = False + self._input_state = InputState.PURE_ASCII + self._last_char = b"" + if self._esc_charset_prober: + self._esc_charset_prober.reset() + if self._utf1632_prober: + self._utf1632_prober.reset() + for prober in self._charset_probers: + prober.reset() + + def feed(self, byte_str: Union[bytes, bytearray]) -> None: + """ + Takes a chunk of a document and feeds it through all of the relevant + charset probers. + + After calling ``feed``, you can check the value of the ``done`` + attribute to see if you need to continue feeding the + ``UniversalDetector`` more data, or if it has made a prediction + (in the ``result`` attribute). + + .. note:: + You should always call ``close`` when you're done feeding in your + document if ``done`` is not already ``True``. + """ + if self.done: + return + + if not byte_str: + return + + if not isinstance(byte_str, bytearray): + byte_str = bytearray(byte_str) + + # First check for known BOMs, since these are guaranteed to be correct + if not self._got_data: + # If the data starts with BOM, we know it is UTF + if byte_str.startswith(codecs.BOM_UTF8): + # EF BB BF UTF-8 with BOM + self.result = { + "encoding": "UTF-8-SIG", + "confidence": 1.0, + "language": "", + } + elif byte_str.startswith((codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE)): + # FF FE 00 00 UTF-32, little-endian BOM + # 00 00 FE FF UTF-32, big-endian BOM + self.result = {"encoding": "UTF-32", "confidence": 1.0, "language": ""} + elif byte_str.startswith(b"\xFE\xFF\x00\x00"): + # FE FF 00 00 UCS-4, unusual octet order BOM (3412) + self.result = { + # TODO: This encoding is not supported by Python. Should remove? + "encoding": "X-ISO-10646-UCS-4-3412", + "confidence": 1.0, + "language": "", + } + elif byte_str.startswith(b"\x00\x00\xFF\xFE"): + # 00 00 FF FE UCS-4, unusual octet order BOM (2143) + self.result = { + # TODO: This encoding is not supported by Python. Should remove? + "encoding": "X-ISO-10646-UCS-4-2143", + "confidence": 1.0, + "language": "", + } + elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): + # FF FE UTF-16, little endian BOM + # FE FF UTF-16, big endian BOM + self.result = {"encoding": "UTF-16", "confidence": 1.0, "language": ""} + + self._got_data = True + if self.result["encoding"] is not None: + self.done = True + return + + # If none of those matched and we've only see ASCII so far, check + # for high bytes and escape sequences + if self._input_state == InputState.PURE_ASCII: + if self.HIGH_BYTE_DETECTOR.search(byte_str): + self._input_state = InputState.HIGH_BYTE + elif ( + self._input_state == InputState.PURE_ASCII + and self.ESC_DETECTOR.search(self._last_char + byte_str) + ): + self._input_state = InputState.ESC_ASCII + + self._last_char = byte_str[-1:] + + # next we will look to see if it is appears to be either a UTF-16 or + # UTF-32 encoding + if not self._utf1632_prober: + self._utf1632_prober = UTF1632Prober() + + if self._utf1632_prober.state == ProbingState.DETECTING: + if self._utf1632_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = { + "encoding": self._utf1632_prober.charset_name, + "confidence": self._utf1632_prober.get_confidence(), + "language": "", + } + self.done = True + return + + # If we've seen escape sequences, use the EscCharSetProber, which + # uses a simple state machine to check for known escape sequences in + # HZ and ISO-2022 encodings, since those are the only encodings that + # use such sequences. + if self._input_state == InputState.ESC_ASCII: + if not self._esc_charset_prober: + self._esc_charset_prober = EscCharSetProber(self.lang_filter) + if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = { + "encoding": self._esc_charset_prober.charset_name, + "confidence": self._esc_charset_prober.get_confidence(), + "language": self._esc_charset_prober.language, + } + self.done = True + # If we've seen high bytes (i.e., those with values greater than 127), + # we need to do more complicated checks using all our multi-byte and + # single-byte probers that are left. The single-byte probers + # use character bigram distributions to determine the encoding, whereas + # the multi-byte probers use a combination of character unigram and + # bigram distributions. + elif self._input_state == InputState.HIGH_BYTE: + if not self._charset_probers: + self._charset_probers = [MBCSGroupProber(self.lang_filter)] + # If we're checking non-CJK encodings, use single-byte prober + if self.lang_filter & LanguageFilter.NON_CJK: + self._charset_probers.append(SBCSGroupProber()) + self._charset_probers.append(Latin1Prober()) + self._charset_probers.append(MacRomanProber()) + for prober in self._charset_probers: + if prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = { + "encoding": prober.charset_name, + "confidence": prober.get_confidence(), + "language": prober.language, + } + self.done = True + break + if self.WIN_BYTE_DETECTOR.search(byte_str): + self._has_win_bytes = True + + def close(self) -> ResultDict: + """ + Stop analyzing the current document and come up with a final + prediction. + + :returns: The ``result`` attribute, a ``dict`` with the keys + `encoding`, `confidence`, and `language`. + """ + # Don't bother with checks if we're already done + if self.done: + return self.result + self.done = True + + if not self._got_data: + self.logger.debug("no data received!") + + # Default to ASCII if it is all we've seen so far + elif self._input_state == InputState.PURE_ASCII: + self.result = {"encoding": "ascii", "confidence": 1.0, "language": ""} + + # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD + elif self._input_state == InputState.HIGH_BYTE: + prober_confidence = None + max_prober_confidence = 0.0 + max_prober = None + for prober in self._charset_probers: + if not prober: + continue + prober_confidence = prober.get_confidence() + if prober_confidence > max_prober_confidence: + max_prober_confidence = prober_confidence + max_prober = prober + if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): + charset_name = max_prober.charset_name + assert charset_name is not None + lower_charset_name = charset_name.lower() + confidence = max_prober.get_confidence() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith("iso-8859"): + if self._has_win_bytes: + charset_name = self.ISO_WIN_MAP.get( + lower_charset_name, charset_name + ) + # Rename legacy encodings with superset encodings if asked + if self.should_rename_legacy: + charset_name = self.LEGACY_MAP.get( + (charset_name or "").lower(), charset_name + ) + self.result = { + "encoding": charset_name, + "confidence": confidence, + "language": max_prober.language, + } + + # Log all prober confidences if none met MINIMUM_THRESHOLD + if self.logger.getEffectiveLevel() <= logging.DEBUG: + if self.result["encoding"] is None: + self.logger.debug("no probers hit minimum threshold") + for group_prober in self._charset_probers: + if not group_prober: + continue + if isinstance(group_prober, CharSetGroupProber): + for prober in group_prober.probers: + self.logger.debug( + "%s %s confidence = %s", + prober.charset_name, + prober.language, + prober.get_confidence(), + ) + else: + self.logger.debug( + "%s %s confidence = %s", + group_prober.charset_name, + group_prober.language, + group_prober.get_confidence(), + ) + return self.result diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/utf1632prober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/utf1632prober.py new file mode 100644 index 0000000..6bdec63 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/utf1632prober.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# +# Contributor(s): +# Jason Zavaglia +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### +from typing import List, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState + + +class UTF1632Prober(CharSetProber): + """ + This class simply looks for occurrences of zero bytes, and infers + whether the file is UTF16 or UTF32 (low-endian or big-endian) + For instance, files looking like ( \0 \0 \0 [nonzero] )+ + have a good probability to be UTF32BE. Files looking like ( \0 [nonzero] )+ + may be guessed to be UTF16BE, and inversely for little-endian varieties. + """ + + # how many logical characters to scan before feeling confident of prediction + MIN_CHARS_FOR_DETECTION = 20 + # a fixed constant ratio of expected zeros or non-zeros in modulo-position. + EXPECTED_RATIO = 0.94 + + def __init__(self) -> None: + super().__init__() + self.position = 0 + self.zeros_at_mod = [0] * 4 + self.nonzeros_at_mod = [0] * 4 + self._state = ProbingState.DETECTING + self.quad = [0, 0, 0, 0] + self.invalid_utf16be = False + self.invalid_utf16le = False + self.invalid_utf32be = False + self.invalid_utf32le = False + self.first_half_surrogate_pair_detected_16be = False + self.first_half_surrogate_pair_detected_16le = False + self.reset() + + def reset(self) -> None: + super().reset() + self.position = 0 + self.zeros_at_mod = [0] * 4 + self.nonzeros_at_mod = [0] * 4 + self._state = ProbingState.DETECTING + self.invalid_utf16be = False + self.invalid_utf16le = False + self.invalid_utf32be = False + self.invalid_utf32le = False + self.first_half_surrogate_pair_detected_16be = False + self.first_half_surrogate_pair_detected_16le = False + self.quad = [0, 0, 0, 0] + + @property + def charset_name(self) -> str: + if self.is_likely_utf32be(): + return "utf-32be" + if self.is_likely_utf32le(): + return "utf-32le" + if self.is_likely_utf16be(): + return "utf-16be" + if self.is_likely_utf16le(): + return "utf-16le" + # default to something valid + return "utf-16" + + @property + def language(self) -> str: + return "" + + def approx_32bit_chars(self) -> float: + return max(1.0, self.position / 4.0) + + def approx_16bit_chars(self) -> float: + return max(1.0, self.position / 2.0) + + def is_likely_utf32be(self) -> bool: + approx_chars = self.approx_32bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + self.zeros_at_mod[0] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[1] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[2] / approx_chars > self.EXPECTED_RATIO + and self.nonzeros_at_mod[3] / approx_chars > self.EXPECTED_RATIO + and not self.invalid_utf32be + ) + + def is_likely_utf32le(self) -> bool: + approx_chars = self.approx_32bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + self.nonzeros_at_mod[0] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[1] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[2] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[3] / approx_chars > self.EXPECTED_RATIO + and not self.invalid_utf32le + ) + + def is_likely_utf16be(self) -> bool: + approx_chars = self.approx_16bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + (self.nonzeros_at_mod[1] + self.nonzeros_at_mod[3]) / approx_chars + > self.EXPECTED_RATIO + and (self.zeros_at_mod[0] + self.zeros_at_mod[2]) / approx_chars + > self.EXPECTED_RATIO + and not self.invalid_utf16be + ) + + def is_likely_utf16le(self) -> bool: + approx_chars = self.approx_16bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + (self.nonzeros_at_mod[0] + self.nonzeros_at_mod[2]) / approx_chars + > self.EXPECTED_RATIO + and (self.zeros_at_mod[1] + self.zeros_at_mod[3]) / approx_chars + > self.EXPECTED_RATIO + and not self.invalid_utf16le + ) + + def validate_utf32_characters(self, quad: List[int]) -> None: + """ + Validate if the quad of bytes is valid UTF-32. + + UTF-32 is valid in the range 0x00000000 - 0x0010FFFF + excluding 0x0000D800 - 0x0000DFFF + + https://en.wikipedia.org/wiki/UTF-32 + """ + if ( + quad[0] != 0 + or quad[1] > 0x10 + or (quad[0] == 0 and quad[1] == 0 and 0xD8 <= quad[2] <= 0xDF) + ): + self.invalid_utf32be = True + if ( + quad[3] != 0 + or quad[2] > 0x10 + or (quad[3] == 0 and quad[2] == 0 and 0xD8 <= quad[1] <= 0xDF) + ): + self.invalid_utf32le = True + + def validate_utf16_characters(self, pair: List[int]) -> None: + """ + Validate if the pair of bytes is valid UTF-16. + + UTF-16 is valid in the range 0x0000 - 0xFFFF excluding 0xD800 - 0xFFFF + with an exception for surrogate pairs, which must be in the range + 0xD800-0xDBFF followed by 0xDC00-0xDFFF + + https://en.wikipedia.org/wiki/UTF-16 + """ + if not self.first_half_surrogate_pair_detected_16be: + if 0xD8 <= pair[0] <= 0xDB: + self.first_half_surrogate_pair_detected_16be = True + elif 0xDC <= pair[0] <= 0xDF: + self.invalid_utf16be = True + else: + if 0xDC <= pair[0] <= 0xDF: + self.first_half_surrogate_pair_detected_16be = False + else: + self.invalid_utf16be = True + + if not self.first_half_surrogate_pair_detected_16le: + if 0xD8 <= pair[1] <= 0xDB: + self.first_half_surrogate_pair_detected_16le = True + elif 0xDC <= pair[1] <= 0xDF: + self.invalid_utf16le = True + else: + if 0xDC <= pair[1] <= 0xDF: + self.first_half_surrogate_pair_detected_16le = False + else: + self.invalid_utf16le = True + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + mod4 = self.position % 4 + self.quad[mod4] = c + if mod4 == 3: + self.validate_utf32_characters(self.quad) + self.validate_utf16_characters(self.quad[0:2]) + self.validate_utf16_characters(self.quad[2:4]) + if c == 0: + self.zeros_at_mod[mod4] += 1 + else: + self.nonzeros_at_mod[mod4] += 1 + self.position += 1 + return self.state + + @property + def state(self) -> ProbingState: + if self._state in {ProbingState.NOT_ME, ProbingState.FOUND_IT}: + # terminal, decided states + return self._state + if self.get_confidence() > 0.80: + self._state = ProbingState.FOUND_IT + elif self.position > 4 * 1024: + # if we get to 4kb into the file, and we can't conclude it's UTF, + # let's give up + self._state = ProbingState.NOT_ME + return self._state + + def get_confidence(self) -> float: + return ( + 0.85 + if ( + self.is_likely_utf16le() + or self.is_likely_utf16be() + or self.is_likely_utf32le() + or self.is_likely_utf32be() + ) + else 0.00 + ) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/utf8prober.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/utf8prober.py new file mode 100644 index 0000000..d96354d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/utf8prober.py @@ -0,0 +1,82 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Union + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .mbcssm import UTF8_SM_MODEL + + +class UTF8Prober(CharSetProber): + ONE_CHAR_PROB = 0.5 + + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) + self._num_mb_chars = 0 + self.reset() + + def reset(self) -> None: + super().reset() + self.coding_sm.reset() + self._num_mb_chars = 0 + + @property + def charset_name(self) -> str: + return "utf-8" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + coding_state = self.coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + if self.coding_sm.get_current_charlen() >= 2: + self._num_mb_chars += 1 + + if self.state == ProbingState.DETECTING: + if self.get_confidence() > self.SHORTCUT_THRESHOLD: + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self) -> float: + unlike = 0.99 + if self._num_mb_chars < 6: + unlike *= self.ONE_CHAR_PROB**self._num_mb_chars + return 1.0 - unlike + return unlike diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/chardet/version.py b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/version.py new file mode 100644 index 0000000..c5e9d85 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/chardet/version.py @@ -0,0 +1,9 @@ +""" +This module exists only to simplify retrieving the version number of chardet +from within setuptools and from chardet subpackages. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +__version__ = "5.1.0" +VERSION = __version__.split(".") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__init__.py new file mode 100644 index 0000000..383101c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__init__.py @@ -0,0 +1,7 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from .initialise import init, deinit, reinit, colorama_text, just_fix_windows_console +from .ansi import Fore, Back, Style, Cursor +from .ansitowin32 import AnsiToWin32 + +__version__ = '0.4.6' + diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..c917b1f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-312.pyc new file mode 100644 index 0000000..47db3f3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-312.pyc new file mode 100644 index 0000000..8f95c0a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc new file mode 100644 index 0000000..79dfcff Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc new file mode 100644 index 0000000..60eca40 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-312.pyc new file mode 100644 index 0000000..4401521 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/ansi.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/ansi.py new file mode 100644 index 0000000..11ec695 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/ansi.py @@ -0,0 +1,102 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +''' +This module generates ANSI character codes to printing colors to terminals. +See: http://en.wikipedia.org/wiki/ANSI_escape_code +''' + +CSI = '\033[' +OSC = '\033]' +BEL = '\a' + + +def code_to_chars(code): + return CSI + str(code) + 'm' + +def set_title(title): + return OSC + '2;' + title + BEL + +def clear_screen(mode=2): + return CSI + str(mode) + 'J' + +def clear_line(mode=2): + return CSI + str(mode) + 'K' + + +class AnsiCodes(object): + def __init__(self): + # the subclasses declare class attributes which are numbers. + # Upon instantiation we define instance attributes, which are the same + # as the class attributes but wrapped with the ANSI escape sequence + for name in dir(self): + if not name.startswith('_'): + value = getattr(self, name) + setattr(self, name, code_to_chars(value)) + + +class AnsiCursor(object): + def UP(self, n=1): + return CSI + str(n) + 'A' + def DOWN(self, n=1): + return CSI + str(n) + 'B' + def FORWARD(self, n=1): + return CSI + str(n) + 'C' + def BACK(self, n=1): + return CSI + str(n) + 'D' + def POS(self, x=1, y=1): + return CSI + str(y) + ';' + str(x) + 'H' + + +class AnsiFore(AnsiCodes): + BLACK = 30 + RED = 31 + GREEN = 32 + YELLOW = 33 + BLUE = 34 + MAGENTA = 35 + CYAN = 36 + WHITE = 37 + RESET = 39 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 90 + LIGHTRED_EX = 91 + LIGHTGREEN_EX = 92 + LIGHTYELLOW_EX = 93 + LIGHTBLUE_EX = 94 + LIGHTMAGENTA_EX = 95 + LIGHTCYAN_EX = 96 + LIGHTWHITE_EX = 97 + + +class AnsiBack(AnsiCodes): + BLACK = 40 + RED = 41 + GREEN = 42 + YELLOW = 43 + BLUE = 44 + MAGENTA = 45 + CYAN = 46 + WHITE = 47 + RESET = 49 + + # These are fairly well supported, but not part of the standard. + LIGHTBLACK_EX = 100 + LIGHTRED_EX = 101 + LIGHTGREEN_EX = 102 + LIGHTYELLOW_EX = 103 + LIGHTBLUE_EX = 104 + LIGHTMAGENTA_EX = 105 + LIGHTCYAN_EX = 106 + LIGHTWHITE_EX = 107 + + +class AnsiStyle(AnsiCodes): + BRIGHT = 1 + DIM = 2 + NORMAL = 22 + RESET_ALL = 0 + +Fore = AnsiFore() +Back = AnsiBack() +Style = AnsiStyle() +Cursor = AnsiCursor() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/ansitowin32.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/ansitowin32.py new file mode 100644 index 0000000..abf209e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/ansitowin32.py @@ -0,0 +1,277 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import re +import sys +import os + +from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style, BEL +from .winterm import enable_vt_processing, WinTerm, WinColor, WinStyle +from .win32 import windll, winapi_test + + +winterm = None +if windll is not None: + winterm = WinTerm() + + +class StreamWrapper(object): + ''' + Wraps a stream (such as stdout), acting as a transparent proxy for all + attribute access apart from method 'write()', which is delegated to our + Converter instance. + ''' + def __init__(self, wrapped, converter): + # double-underscore everything to prevent clashes with names of + # attributes on the wrapped stream object. + self.__wrapped = wrapped + self.__convertor = converter + + def __getattr__(self, name): + return getattr(self.__wrapped, name) + + def __enter__(self, *args, **kwargs): + # special method lookup bypasses __getattr__/__getattribute__, see + # https://stackoverflow.com/questions/12632894/why-doesnt-getattr-work-with-exit + # thus, contextlib magic methods are not proxied via __getattr__ + return self.__wrapped.__enter__(*args, **kwargs) + + def __exit__(self, *args, **kwargs): + return self.__wrapped.__exit__(*args, **kwargs) + + def __setstate__(self, state): + self.__dict__ = state + + def __getstate__(self): + return self.__dict__ + + def write(self, text): + self.__convertor.write(text) + + def isatty(self): + stream = self.__wrapped + if 'PYCHARM_HOSTED' in os.environ: + if stream is not None and (stream is sys.__stdout__ or stream is sys.__stderr__): + return True + try: + stream_isatty = stream.isatty + except AttributeError: + return False + else: + return stream_isatty() + + @property + def closed(self): + stream = self.__wrapped + try: + return stream.closed + # AttributeError in the case that the stream doesn't support being closed + # ValueError for the case that the stream has already been detached when atexit runs + except (AttributeError, ValueError): + return True + + +class AnsiToWin32(object): + ''' + Implements a 'write()' method which, on Windows, will strip ANSI character + sequences from the text, and if outputting to a tty, will convert them into + win32 function calls. + ''' + ANSI_CSI_RE = re.compile('\001?\033\\[((?:\\d|;)*)([a-zA-Z])\002?') # Control Sequence Introducer + ANSI_OSC_RE = re.compile('\001?\033\\]([^\a]*)(\a)\002?') # Operating System Command + + def __init__(self, wrapped, convert=None, strip=None, autoreset=False): + # The wrapped stream (normally sys.stdout or sys.stderr) + self.wrapped = wrapped + + # should we reset colors to defaults after every .write() + self.autoreset = autoreset + + # create the proxy wrapping our output stream + self.stream = StreamWrapper(wrapped, self) + + on_windows = os.name == 'nt' + # We test if the WinAPI works, because even if we are on Windows + # we may be using a terminal that doesn't support the WinAPI + # (e.g. Cygwin Terminal). In this case it's up to the terminal + # to support the ANSI codes. + conversion_supported = on_windows and winapi_test() + try: + fd = wrapped.fileno() + except Exception: + fd = -1 + system_has_native_ansi = not on_windows or enable_vt_processing(fd) + have_tty = not self.stream.closed and self.stream.isatty() + need_conversion = conversion_supported and not system_has_native_ansi + + # should we strip ANSI sequences from our output? + if strip is None: + strip = need_conversion or not have_tty + self.strip = strip + + # should we should convert ANSI sequences into win32 calls? + if convert is None: + convert = need_conversion and have_tty + self.convert = convert + + # dict of ansi codes to win32 functions and parameters + self.win32_calls = self.get_win32_calls() + + # are we wrapping stderr? + self.on_stderr = self.wrapped is sys.stderr + + def should_wrap(self): + ''' + True if this class is actually needed. If false, then the output + stream will not be affected, nor will win32 calls be issued, so + wrapping stdout is not actually required. This will generally be + False on non-Windows platforms, unless optional functionality like + autoreset has been requested using kwargs to init() + ''' + return self.convert or self.strip or self.autoreset + + def get_win32_calls(self): + if self.convert and winterm: + return { + AnsiStyle.RESET_ALL: (winterm.reset_all, ), + AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT), + AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL), + AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL), + AnsiFore.BLACK: (winterm.fore, WinColor.BLACK), + AnsiFore.RED: (winterm.fore, WinColor.RED), + AnsiFore.GREEN: (winterm.fore, WinColor.GREEN), + AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW), + AnsiFore.BLUE: (winterm.fore, WinColor.BLUE), + AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA), + AnsiFore.CYAN: (winterm.fore, WinColor.CYAN), + AnsiFore.WHITE: (winterm.fore, WinColor.GREY), + AnsiFore.RESET: (winterm.fore, ), + AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True), + AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True), + AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True), + AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True), + AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True), + AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True), + AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True), + AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True), + AnsiBack.BLACK: (winterm.back, WinColor.BLACK), + AnsiBack.RED: (winterm.back, WinColor.RED), + AnsiBack.GREEN: (winterm.back, WinColor.GREEN), + AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW), + AnsiBack.BLUE: (winterm.back, WinColor.BLUE), + AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA), + AnsiBack.CYAN: (winterm.back, WinColor.CYAN), + AnsiBack.WHITE: (winterm.back, WinColor.GREY), + AnsiBack.RESET: (winterm.back, ), + AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True), + AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True), + AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True), + AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True), + AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True), + AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True), + AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True), + AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True), + } + return dict() + + def write(self, text): + if self.strip or self.convert: + self.write_and_convert(text) + else: + self.wrapped.write(text) + self.wrapped.flush() + if self.autoreset: + self.reset_all() + + + def reset_all(self): + if self.convert: + self.call_win32('m', (0,)) + elif not self.strip and not self.stream.closed: + self.wrapped.write(Style.RESET_ALL) + + + def write_and_convert(self, text): + ''' + Write the given text to our wrapped stream, stripping any ANSI + sequences from the text, and optionally converting them into win32 + calls. + ''' + cursor = 0 + text = self.convert_osc(text) + for match in self.ANSI_CSI_RE.finditer(text): + start, end = match.span() + self.write_plain_text(text, cursor, start) + self.convert_ansi(*match.groups()) + cursor = end + self.write_plain_text(text, cursor, len(text)) + + + def write_plain_text(self, text, start, end): + if start < end: + self.wrapped.write(text[start:end]) + self.wrapped.flush() + + + def convert_ansi(self, paramstring, command): + if self.convert: + params = self.extract_params(command, paramstring) + self.call_win32(command, params) + + + def extract_params(self, command, paramstring): + if command in 'Hf': + params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';')) + while len(params) < 2: + # defaults: + params = params + (1,) + else: + params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0) + if len(params) == 0: + # defaults: + if command in 'JKm': + params = (0,) + elif command in 'ABCD': + params = (1,) + + return params + + + def call_win32(self, command, params): + if command == 'm': + for param in params: + if param in self.win32_calls: + func_args = self.win32_calls[param] + func = func_args[0] + args = func_args[1:] + kwargs = dict(on_stderr=self.on_stderr) + func(*args, **kwargs) + elif command in 'J': + winterm.erase_screen(params[0], on_stderr=self.on_stderr) + elif command in 'K': + winterm.erase_line(params[0], on_stderr=self.on_stderr) + elif command in 'Hf': # cursor position - absolute + winterm.set_cursor_position(params, on_stderr=self.on_stderr) + elif command in 'ABCD': # cursor position - relative + n = params[0] + # A - up, B - down, C - forward, D - back + x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command] + winterm.cursor_adjust(x, y, on_stderr=self.on_stderr) + + + def convert_osc(self, text): + for match in self.ANSI_OSC_RE.finditer(text): + start, end = match.span() + text = text[:start] + text[end:] + paramstring, command = match.groups() + if command == BEL: + if paramstring.count(";") == 1: + params = paramstring.split(";") + # 0 - change title and icon (we will only change title) + # 1 - change icon (we don't support this) + # 2 - change title + if params[0] in '02': + winterm.set_title(params[1]) + return text + + + def flush(self): + self.wrapped.flush() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/initialise.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/initialise.py new file mode 100644 index 0000000..d5fd4b7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/initialise.py @@ -0,0 +1,121 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import atexit +import contextlib +import sys + +from .ansitowin32 import AnsiToWin32 + + +def _wipe_internal_state_for_tests(): + global orig_stdout, orig_stderr + orig_stdout = None + orig_stderr = None + + global wrapped_stdout, wrapped_stderr + wrapped_stdout = None + wrapped_stderr = None + + global atexit_done + atexit_done = False + + global fixed_windows_console + fixed_windows_console = False + + try: + # no-op if it wasn't registered + atexit.unregister(reset_all) + except AttributeError: + # python 2: no atexit.unregister. Oh well, we did our best. + pass + + +def reset_all(): + if AnsiToWin32 is not None: # Issue #74: objects might become None at exit + AnsiToWin32(orig_stdout).reset_all() + + +def init(autoreset=False, convert=None, strip=None, wrap=True): + + if not wrap and any([autoreset, convert, strip]): + raise ValueError('wrap=False conflicts with any other arg=True') + + global wrapped_stdout, wrapped_stderr + global orig_stdout, orig_stderr + + orig_stdout = sys.stdout + orig_stderr = sys.stderr + + if sys.stdout is None: + wrapped_stdout = None + else: + sys.stdout = wrapped_stdout = \ + wrap_stream(orig_stdout, convert, strip, autoreset, wrap) + if sys.stderr is None: + wrapped_stderr = None + else: + sys.stderr = wrapped_stderr = \ + wrap_stream(orig_stderr, convert, strip, autoreset, wrap) + + global atexit_done + if not atexit_done: + atexit.register(reset_all) + atexit_done = True + + +def deinit(): + if orig_stdout is not None: + sys.stdout = orig_stdout + if orig_stderr is not None: + sys.stderr = orig_stderr + + +def just_fix_windows_console(): + global fixed_windows_console + + if sys.platform != "win32": + return + if fixed_windows_console: + return + if wrapped_stdout is not None or wrapped_stderr is not None: + # Someone already ran init() and it did stuff, so we won't second-guess them + return + + # On newer versions of Windows, AnsiToWin32.__init__ will implicitly enable the + # native ANSI support in the console as a side-effect. We only need to actually + # replace sys.stdout/stderr if we're in the old-style conversion mode. + new_stdout = AnsiToWin32(sys.stdout, convert=None, strip=None, autoreset=False) + if new_stdout.convert: + sys.stdout = new_stdout + new_stderr = AnsiToWin32(sys.stderr, convert=None, strip=None, autoreset=False) + if new_stderr.convert: + sys.stderr = new_stderr + + fixed_windows_console = True + +@contextlib.contextmanager +def colorama_text(*args, **kwargs): + init(*args, **kwargs) + try: + yield + finally: + deinit() + + +def reinit(): + if wrapped_stdout is not None: + sys.stdout = wrapped_stdout + if wrapped_stderr is not None: + sys.stderr = wrapped_stderr + + +def wrap_stream(stream, convert, strip, autoreset, wrap): + if wrap: + wrapper = AnsiToWin32(stream, + convert=convert, strip=strip, autoreset=autoreset) + if wrapper.should_wrap(): + stream = wrapper.stream + return stream + + +# Use this for initial setup as well, to reduce code duplication +_wipe_internal_state_for_tests() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__init__.py new file mode 100644 index 0000000..8c5661e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__init__.py @@ -0,0 +1 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..42f391a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-312.pyc new file mode 100644 index 0000000..df47b94 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc new file mode 100644 index 0000000..8f20ecb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-312.pyc new file mode 100644 index 0000000..4a26657 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc new file mode 100644 index 0000000..3e4e203 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000..08f3712 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-312.pyc new file mode 100644 index 0000000..be44f20 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansi_test.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansi_test.py new file mode 100644 index 0000000..0a20c80 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansi_test.py @@ -0,0 +1,76 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main + +from ..ansi import Back, Fore, Style +from ..ansitowin32 import AnsiToWin32 + +stdout_orig = sys.stdout +stderr_orig = sys.stderr + + +class AnsiTest(TestCase): + + def setUp(self): + # sanity check: stdout should be a file or StringIO object. + # It will only be AnsiToWin32 if init() has previously wrapped it + self.assertNotEqual(type(sys.stdout), AnsiToWin32) + self.assertNotEqual(type(sys.stderr), AnsiToWin32) + + def tearDown(self): + sys.stdout = stdout_orig + sys.stderr = stderr_orig + + + def testForeAttributes(self): + self.assertEqual(Fore.BLACK, '\033[30m') + self.assertEqual(Fore.RED, '\033[31m') + self.assertEqual(Fore.GREEN, '\033[32m') + self.assertEqual(Fore.YELLOW, '\033[33m') + self.assertEqual(Fore.BLUE, '\033[34m') + self.assertEqual(Fore.MAGENTA, '\033[35m') + self.assertEqual(Fore.CYAN, '\033[36m') + self.assertEqual(Fore.WHITE, '\033[37m') + self.assertEqual(Fore.RESET, '\033[39m') + + # Check the light, extended versions. + self.assertEqual(Fore.LIGHTBLACK_EX, '\033[90m') + self.assertEqual(Fore.LIGHTRED_EX, '\033[91m') + self.assertEqual(Fore.LIGHTGREEN_EX, '\033[92m') + self.assertEqual(Fore.LIGHTYELLOW_EX, '\033[93m') + self.assertEqual(Fore.LIGHTBLUE_EX, '\033[94m') + self.assertEqual(Fore.LIGHTMAGENTA_EX, '\033[95m') + self.assertEqual(Fore.LIGHTCYAN_EX, '\033[96m') + self.assertEqual(Fore.LIGHTWHITE_EX, '\033[97m') + + + def testBackAttributes(self): + self.assertEqual(Back.BLACK, '\033[40m') + self.assertEqual(Back.RED, '\033[41m') + self.assertEqual(Back.GREEN, '\033[42m') + self.assertEqual(Back.YELLOW, '\033[43m') + self.assertEqual(Back.BLUE, '\033[44m') + self.assertEqual(Back.MAGENTA, '\033[45m') + self.assertEqual(Back.CYAN, '\033[46m') + self.assertEqual(Back.WHITE, '\033[47m') + self.assertEqual(Back.RESET, '\033[49m') + + # Check the light, extended versions. + self.assertEqual(Back.LIGHTBLACK_EX, '\033[100m') + self.assertEqual(Back.LIGHTRED_EX, '\033[101m') + self.assertEqual(Back.LIGHTGREEN_EX, '\033[102m') + self.assertEqual(Back.LIGHTYELLOW_EX, '\033[103m') + self.assertEqual(Back.LIGHTBLUE_EX, '\033[104m') + self.assertEqual(Back.LIGHTMAGENTA_EX, '\033[105m') + self.assertEqual(Back.LIGHTCYAN_EX, '\033[106m') + self.assertEqual(Back.LIGHTWHITE_EX, '\033[107m') + + + def testStyleAttributes(self): + self.assertEqual(Style.DIM, '\033[2m') + self.assertEqual(Style.NORMAL, '\033[22m') + self.assertEqual(Style.BRIGHT, '\033[1m') + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py new file mode 100644 index 0000000..91ca551 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py @@ -0,0 +1,294 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from io import StringIO, TextIOWrapper +from unittest import TestCase, main +try: + from contextlib import ExitStack +except ImportError: + # python 2 + from contextlib2 import ExitStack + +try: + from unittest.mock import MagicMock, Mock, patch +except ImportError: + from mock import MagicMock, Mock, patch + +from ..ansitowin32 import AnsiToWin32, StreamWrapper +from ..win32 import ENABLE_VIRTUAL_TERMINAL_PROCESSING +from .utils import osname + + +class StreamWrapperTest(TestCase): + + def testIsAProxy(self): + mockStream = Mock() + wrapper = StreamWrapper(mockStream, None) + self.assertTrue( wrapper.random_attr is mockStream.random_attr ) + + def testDelegatesWrite(self): + mockStream = Mock() + mockConverter = Mock() + wrapper = StreamWrapper(mockStream, mockConverter) + wrapper.write('hello') + self.assertTrue(mockConverter.write.call_args, (('hello',), {})) + + def testDelegatesContext(self): + mockConverter = Mock() + s = StringIO() + with StreamWrapper(s, mockConverter) as fp: + fp.write(u'hello') + self.assertTrue(s.closed) + + def testProxyNoContextManager(self): + mockStream = MagicMock() + mockStream.__enter__.side_effect = AttributeError() + mockConverter = Mock() + with self.assertRaises(AttributeError) as excinfo: + with StreamWrapper(mockStream, mockConverter) as wrapper: + wrapper.write('hello') + + def test_closed_shouldnt_raise_on_closed_stream(self): + stream = StringIO() + stream.close() + wrapper = StreamWrapper(stream, None) + self.assertEqual(wrapper.closed, True) + + def test_closed_shouldnt_raise_on_detached_stream(self): + stream = TextIOWrapper(StringIO()) + stream.detach() + wrapper = StreamWrapper(stream, None) + self.assertEqual(wrapper.closed, True) + +class AnsiToWin32Test(TestCase): + + def testInit(self): + mockStdout = Mock() + auto = Mock() + stream = AnsiToWin32(mockStdout, autoreset=auto) + self.assertEqual(stream.wrapped, mockStdout) + self.assertEqual(stream.autoreset, auto) + + @patch('colorama.ansitowin32.winterm', None) + @patch('colorama.ansitowin32.winapi_test', lambda *_: True) + def testStripIsTrueOnWindows(self): + with osname('nt'): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + self.assertTrue(stream.strip) + + def testStripIsFalseOffWindows(self): + with osname('posix'): + mockStdout = Mock(closed=False) + stream = AnsiToWin32(mockStdout) + self.assertFalse(stream.strip) + + def testWriteStripsAnsi(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + stream.wrapped = Mock() + stream.write_and_convert = Mock() + stream.strip = True + + stream.write('abc') + + self.assertFalse(stream.wrapped.write.called) + self.assertEqual(stream.write_and_convert.call_args, (('abc',), {})) + + def testWriteDoesNotStripAnsi(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout) + stream.wrapped = Mock() + stream.write_and_convert = Mock() + stream.strip = False + stream.convert = False + + stream.write('abc') + + self.assertFalse(stream.write_and_convert.called) + self.assertEqual(stream.wrapped.write.call_args, (('abc',), {})) + + def assert_autoresets(self, convert, autoreset=True): + stream = AnsiToWin32(Mock()) + stream.convert = convert + stream.reset_all = Mock() + stream.autoreset = autoreset + stream.winterm = Mock() + + stream.write('abc') + + self.assertEqual(stream.reset_all.called, autoreset) + + def testWriteAutoresets(self): + self.assert_autoresets(convert=True) + self.assert_autoresets(convert=False) + self.assert_autoresets(convert=True, autoreset=False) + self.assert_autoresets(convert=False, autoreset=False) + + def testWriteAndConvertWritesPlainText(self): + stream = AnsiToWin32(Mock()) + stream.write_and_convert( 'abc' ) + self.assertEqual( stream.wrapped.write.call_args, (('abc',), {}) ) + + def testWriteAndConvertStripsAllValidAnsi(self): + stream = AnsiToWin32(Mock()) + stream.call_win32 = Mock() + data = [ + 'abc\033[mdef', + 'abc\033[0mdef', + 'abc\033[2mdef', + 'abc\033[02mdef', + 'abc\033[002mdef', + 'abc\033[40mdef', + 'abc\033[040mdef', + 'abc\033[0;1mdef', + 'abc\033[40;50mdef', + 'abc\033[50;30;40mdef', + 'abc\033[Adef', + 'abc\033[0Gdef', + 'abc\033[1;20;128Hdef', + ] + for datum in data: + stream.wrapped.write.reset_mock() + stream.write_and_convert( datum ) + self.assertEqual( + [args[0] for args in stream.wrapped.write.call_args_list], + [ ('abc',), ('def',) ] + ) + + def testWriteAndConvertSkipsEmptySnippets(self): + stream = AnsiToWin32(Mock()) + stream.call_win32 = Mock() + stream.write_and_convert( '\033[40m\033[41m' ) + self.assertFalse( stream.wrapped.write.called ) + + def testWriteAndConvertCallsWin32WithParamsAndCommand(self): + stream = AnsiToWin32(Mock()) + stream.convert = True + stream.call_win32 = Mock() + stream.extract_params = Mock(return_value='params') + data = { + 'abc\033[adef': ('a', 'params'), + 'abc\033[;;bdef': ('b', 'params'), + 'abc\033[0cdef': ('c', 'params'), + 'abc\033[;;0;;Gdef': ('G', 'params'), + 'abc\033[1;20;128Hdef': ('H', 'params'), + } + for datum, expected in data.items(): + stream.call_win32.reset_mock() + stream.write_and_convert( datum ) + self.assertEqual( stream.call_win32.call_args[0], expected ) + + def test_reset_all_shouldnt_raise_on_closed_orig_stdout(self): + stream = StringIO() + converter = AnsiToWin32(stream) + stream.close() + + converter.reset_all() + + def test_wrap_shouldnt_raise_on_closed_orig_stdout(self): + stream = StringIO() + stream.close() + with \ + patch("colorama.ansitowin32.os.name", "nt"), \ + patch("colorama.ansitowin32.winapi_test", lambda: True): + converter = AnsiToWin32(stream) + self.assertTrue(converter.strip) + self.assertFalse(converter.convert) + + def test_wrap_shouldnt_raise_on_missing_closed_attr(self): + with \ + patch("colorama.ansitowin32.os.name", "nt"), \ + patch("colorama.ansitowin32.winapi_test", lambda: True): + converter = AnsiToWin32(object()) + self.assertTrue(converter.strip) + self.assertFalse(converter.convert) + + def testExtractParams(self): + stream = AnsiToWin32(Mock()) + data = { + '': (0,), + ';;': (0,), + '2': (2,), + ';;002;;': (2,), + '0;1': (0, 1), + ';;003;;456;;': (3, 456), + '11;22;33;44;55': (11, 22, 33, 44, 55), + } + for datum, expected in data.items(): + self.assertEqual(stream.extract_params('m', datum), expected) + + def testCallWin32UsesLookup(self): + listener = Mock() + stream = AnsiToWin32(listener) + stream.win32_calls = { + 1: (lambda *_, **__: listener(11),), + 2: (lambda *_, **__: listener(22),), + 3: (lambda *_, **__: listener(33),), + } + stream.call_win32('m', (3, 1, 99, 2)) + self.assertEqual( + [a[0][0] for a in listener.call_args_list], + [33, 11, 22] ) + + def test_osc_codes(self): + mockStdout = Mock() + stream = AnsiToWin32(mockStdout, convert=True) + with patch('colorama.ansitowin32.winterm') as winterm: + data = [ + '\033]0\x07', # missing arguments + '\033]0;foo\x08', # wrong OSC command + '\033]0;colorama_test_title\x07', # should work + '\033]1;colorama_test_title\x07', # wrong set command + '\033]2;colorama_test_title\x07', # should work + '\033]' + ';' * 64 + '\x08', # see issue #247 + ] + for code in data: + stream.write(code) + self.assertEqual(winterm.set_title.call_count, 2) + + def test_native_windows_ansi(self): + with ExitStack() as stack: + def p(a, b): + stack.enter_context(patch(a, b, create=True)) + # Pretend to be on Windows + p("colorama.ansitowin32.os.name", "nt") + p("colorama.ansitowin32.winapi_test", lambda: True) + p("colorama.win32.winapi_test", lambda: True) + p("colorama.winterm.win32.windll", "non-None") + p("colorama.winterm.get_osfhandle", lambda _: 1234) + + # Pretend that our mock stream has native ANSI support + p( + "colorama.winterm.win32.GetConsoleMode", + lambda _: ENABLE_VIRTUAL_TERMINAL_PROCESSING, + ) + SetConsoleMode = Mock() + p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode) + + stdout = Mock() + stdout.closed = False + stdout.isatty.return_value = True + stdout.fileno.return_value = 1 + + # Our fake console says it has native vt support, so AnsiToWin32 should + # enable that support and do nothing else. + stream = AnsiToWin32(stdout) + SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING) + self.assertFalse(stream.strip) + self.assertFalse(stream.convert) + self.assertFalse(stream.should_wrap()) + + # Now let's pretend we're on an old Windows console, that doesn't have + # native ANSI support. + p("colorama.winterm.win32.GetConsoleMode", lambda _: 0) + SetConsoleMode = Mock() + p("colorama.winterm.win32.SetConsoleMode", SetConsoleMode) + + stream = AnsiToWin32(stdout) + SetConsoleMode.assert_called_with(1234, ENABLE_VIRTUAL_TERMINAL_PROCESSING) + self.assertTrue(stream.strip) + self.assertTrue(stream.convert) + self.assertTrue(stream.should_wrap()) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/initialise_test.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/initialise_test.py new file mode 100644 index 0000000..89f9b07 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/initialise_test.py @@ -0,0 +1,189 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main, skipUnless + +try: + from unittest.mock import patch, Mock +except ImportError: + from mock import patch, Mock + +from ..ansitowin32 import StreamWrapper +from ..initialise import init, just_fix_windows_console, _wipe_internal_state_for_tests +from .utils import osname, replace_by + +orig_stdout = sys.stdout +orig_stderr = sys.stderr + + +class InitTest(TestCase): + + @skipUnless(sys.stdout.isatty(), "sys.stdout is not a tty") + def setUp(self): + # sanity check + self.assertNotWrapped() + + def tearDown(self): + _wipe_internal_state_for_tests() + sys.stdout = orig_stdout + sys.stderr = orig_stderr + + def assertWrapped(self): + self.assertIsNot(sys.stdout, orig_stdout, 'stdout should be wrapped') + self.assertIsNot(sys.stderr, orig_stderr, 'stderr should be wrapped') + self.assertTrue(isinstance(sys.stdout, StreamWrapper), + 'bad stdout wrapper') + self.assertTrue(isinstance(sys.stderr, StreamWrapper), + 'bad stderr wrapper') + + def assertNotWrapped(self): + self.assertIs(sys.stdout, orig_stdout, 'stdout should not be wrapped') + self.assertIs(sys.stderr, orig_stderr, 'stderr should not be wrapped') + + @patch('colorama.initialise.reset_all') + @patch('colorama.ansitowin32.winapi_test', lambda *_: True) + @patch('colorama.ansitowin32.enable_vt_processing', lambda *_: False) + def testInitWrapsOnWindows(self, _): + with osname("nt"): + init() + self.assertWrapped() + + @patch('colorama.initialise.reset_all') + @patch('colorama.ansitowin32.winapi_test', lambda *_: False) + def testInitDoesntWrapOnEmulatedWindows(self, _): + with osname("nt"): + init() + self.assertNotWrapped() + + def testInitDoesntWrapOnNonWindows(self): + with osname("posix"): + init() + self.assertNotWrapped() + + def testInitDoesntWrapIfNone(self): + with replace_by(None): + init() + # We can't use assertNotWrapped here because replace_by(None) + # changes stdout/stderr already. + self.assertIsNone(sys.stdout) + self.assertIsNone(sys.stderr) + + def testInitAutoresetOnWrapsOnAllPlatforms(self): + with osname("posix"): + init(autoreset=True) + self.assertWrapped() + + def testInitWrapOffDoesntWrapOnWindows(self): + with osname("nt"): + init(wrap=False) + self.assertNotWrapped() + + def testInitWrapOffIncompatibleWithAutoresetOn(self): + self.assertRaises(ValueError, lambda: init(autoreset=True, wrap=False)) + + @patch('colorama.win32.SetConsoleTextAttribute') + @patch('colorama.initialise.AnsiToWin32') + def testAutoResetPassedOn(self, mockATW32, _): + with osname("nt"): + init(autoreset=True) + self.assertEqual(len(mockATW32.call_args_list), 2) + self.assertEqual(mockATW32.call_args_list[1][1]['autoreset'], True) + self.assertEqual(mockATW32.call_args_list[0][1]['autoreset'], True) + + @patch('colorama.initialise.AnsiToWin32') + def testAutoResetChangeable(self, mockATW32): + with osname("nt"): + init() + + init(autoreset=True) + self.assertEqual(len(mockATW32.call_args_list), 4) + self.assertEqual(mockATW32.call_args_list[2][1]['autoreset'], True) + self.assertEqual(mockATW32.call_args_list[3][1]['autoreset'], True) + + init() + self.assertEqual(len(mockATW32.call_args_list), 6) + self.assertEqual( + mockATW32.call_args_list[4][1]['autoreset'], False) + self.assertEqual( + mockATW32.call_args_list[5][1]['autoreset'], False) + + + @patch('colorama.initialise.atexit.register') + def testAtexitRegisteredOnlyOnce(self, mockRegister): + init() + self.assertTrue(mockRegister.called) + mockRegister.reset_mock() + init() + self.assertFalse(mockRegister.called) + + +class JustFixWindowsConsoleTest(TestCase): + def _reset(self): + _wipe_internal_state_for_tests() + sys.stdout = orig_stdout + sys.stderr = orig_stderr + + def tearDown(self): + self._reset() + + @patch("colorama.ansitowin32.winapi_test", lambda: True) + def testJustFixWindowsConsole(self): + if sys.platform != "win32": + # just_fix_windows_console should be a no-op + just_fix_windows_console() + self.assertIs(sys.stdout, orig_stdout) + self.assertIs(sys.stderr, orig_stderr) + else: + def fake_std(): + # Emulate stdout=not a tty, stderr=tty + # to check that we handle both cases correctly + stdout = Mock() + stdout.closed = False + stdout.isatty.return_value = False + stdout.fileno.return_value = 1 + sys.stdout = stdout + + stderr = Mock() + stderr.closed = False + stderr.isatty.return_value = True + stderr.fileno.return_value = 2 + sys.stderr = stderr + + for native_ansi in [False, True]: + with patch( + 'colorama.ansitowin32.enable_vt_processing', + lambda *_: native_ansi + ): + self._reset() + fake_std() + + # Regular single-call test + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(sys.stdout, prev_stdout) + if native_ansi: + self.assertIs(sys.stderr, prev_stderr) + else: + self.assertIsNot(sys.stderr, prev_stderr) + + # second call without resetting is always a no-op + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(sys.stdout, prev_stdout) + self.assertIs(sys.stderr, prev_stderr) + + self._reset() + fake_std() + + # If init() runs first, just_fix_windows_console should be a no-op + init() + prev_stdout = sys.stdout + prev_stderr = sys.stderr + just_fix_windows_console() + self.assertIs(prev_stdout, sys.stdout) + self.assertIs(prev_stderr, sys.stderr) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/isatty_test.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/isatty_test.py new file mode 100644 index 0000000..0f84e4b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/isatty_test.py @@ -0,0 +1,57 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main + +from ..ansitowin32 import StreamWrapper, AnsiToWin32 +from .utils import pycharm, replace_by, replace_original_by, StreamTTY, StreamNonTTY + + +def is_a_tty(stream): + return StreamWrapper(stream, None).isatty() + +class IsattyTest(TestCase): + + def test_TTY(self): + tty = StreamTTY() + self.assertTrue(is_a_tty(tty)) + with pycharm(): + self.assertTrue(is_a_tty(tty)) + + def test_nonTTY(self): + non_tty = StreamNonTTY() + self.assertFalse(is_a_tty(non_tty)) + with pycharm(): + self.assertFalse(is_a_tty(non_tty)) + + def test_withPycharm(self): + with pycharm(): + self.assertTrue(is_a_tty(sys.stderr)) + self.assertTrue(is_a_tty(sys.stdout)) + + def test_withPycharmTTYOverride(self): + tty = StreamTTY() + with pycharm(), replace_by(tty): + self.assertTrue(is_a_tty(tty)) + + def test_withPycharmNonTTYOverride(self): + non_tty = StreamNonTTY() + with pycharm(), replace_by(non_tty): + self.assertFalse(is_a_tty(non_tty)) + + def test_withPycharmNoneOverride(self): + with pycharm(): + with replace_by(None), replace_original_by(None): + self.assertFalse(is_a_tty(None)) + self.assertFalse(is_a_tty(StreamNonTTY())) + self.assertTrue(is_a_tty(StreamTTY())) + + def test_withPycharmStreamWrapped(self): + with pycharm(): + self.assertTrue(AnsiToWin32(StreamTTY()).stream.isatty()) + self.assertFalse(AnsiToWin32(StreamNonTTY()).stream.isatty()) + self.assertTrue(AnsiToWin32(sys.stdout).stream.isatty()) + self.assertTrue(AnsiToWin32(sys.stderr).stream.isatty()) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/utils.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/utils.py new file mode 100644 index 0000000..472fafb --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/utils.py @@ -0,0 +1,49 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +from contextlib import contextmanager +from io import StringIO +import sys +import os + + +class StreamTTY(StringIO): + def isatty(self): + return True + +class StreamNonTTY(StringIO): + def isatty(self): + return False + +@contextmanager +def osname(name): + orig = os.name + os.name = name + yield + os.name = orig + +@contextmanager +def replace_by(stream): + orig_stdout = sys.stdout + orig_stderr = sys.stderr + sys.stdout = stream + sys.stderr = stream + yield + sys.stdout = orig_stdout + sys.stderr = orig_stderr + +@contextmanager +def replace_original_by(stream): + orig_stdout = sys.__stdout__ + orig_stderr = sys.__stderr__ + sys.__stdout__ = stream + sys.__stderr__ = stream + yield + sys.__stdout__ = orig_stdout + sys.__stderr__ = orig_stderr + +@contextmanager +def pycharm(): + os.environ["PYCHARM_HOSTED"] = "1" + non_tty = StreamNonTTY() + with replace_by(non_tty), replace_original_by(non_tty): + yield + del os.environ["PYCHARM_HOSTED"] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/winterm_test.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/winterm_test.py new file mode 100644 index 0000000..d0955f9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/winterm_test.py @@ -0,0 +1,131 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +import sys +from unittest import TestCase, main, skipUnless + +try: + from unittest.mock import Mock, patch +except ImportError: + from mock import Mock, patch + +from ..winterm import WinColor, WinStyle, WinTerm + + +class WinTermTest(TestCase): + + @patch('colorama.winterm.win32') + def testInit(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 7 + 6 * 16 + 8 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + self.assertEqual(term._fore, 7) + self.assertEqual(term._back, 6) + self.assertEqual(term._style, 8) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testGetAttrs(self): + term = WinTerm() + + term._fore = 0 + term._back = 0 + term._style = 0 + self.assertEqual(term.get_attrs(), 0) + + term._fore = WinColor.YELLOW + self.assertEqual(term.get_attrs(), WinColor.YELLOW) + + term._back = WinColor.MAGENTA + self.assertEqual( + term.get_attrs(), + WinColor.YELLOW + WinColor.MAGENTA * 16) + + term._style = WinStyle.BRIGHT + self.assertEqual( + term.get_attrs(), + WinColor.YELLOW + WinColor.MAGENTA * 16 + WinStyle.BRIGHT) + + @patch('colorama.winterm.win32') + def testResetAll(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 1 + 2 * 16 + 8 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + + term.set_console = Mock() + term._fore = -1 + term._back = -1 + term._style = -1 + + term.reset_all() + + self.assertEqual(term._fore, 1) + self.assertEqual(term._back, 2) + self.assertEqual(term._style, 8) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testFore(self): + term = WinTerm() + term.set_console = Mock() + term._fore = 0 + + term.fore(5) + + self.assertEqual(term._fore, 5) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testBack(self): + term = WinTerm() + term.set_console = Mock() + term._back = 0 + + term.back(5) + + self.assertEqual(term._back, 5) + self.assertEqual(term.set_console.called, True) + + @skipUnless(sys.platform.startswith("win"), "requires Windows") + def testStyle(self): + term = WinTerm() + term.set_console = Mock() + term._style = 0 + + term.style(22) + + self.assertEqual(term._style, 22) + self.assertEqual(term.set_console.called, True) + + @patch('colorama.winterm.win32') + def testSetConsole(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 0 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + term.windll = Mock() + + term.set_console() + + self.assertEqual( + mockWin32.SetConsoleTextAttribute.call_args, + ((mockWin32.STDOUT, term.get_attrs()), {}) + ) + + @patch('colorama.winterm.win32') + def testSetConsoleOnStderr(self, mockWin32): + mockAttr = Mock() + mockAttr.wAttributes = 0 + mockWin32.GetConsoleScreenBufferInfo.return_value = mockAttr + term = WinTerm() + term.windll = Mock() + + term.set_console(on_stderr=True) + + self.assertEqual( + mockWin32.SetConsoleTextAttribute.call_args, + ((mockWin32.STDERR, term.get_attrs()), {}) + ) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/win32.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/win32.py new file mode 100644 index 0000000..841b0e2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/win32.py @@ -0,0 +1,180 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. + +# from winbase.h +STDOUT = -11 +STDERR = -12 + +ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 + +try: + import ctypes + from ctypes import LibraryLoader + windll = LibraryLoader(ctypes.WinDLL) + from ctypes import wintypes +except (AttributeError, ImportError): + windll = None + SetConsoleTextAttribute = lambda *_: None + winapi_test = lambda *_: None +else: + from ctypes import byref, Structure, c_char, POINTER + + COORD = wintypes._COORD + + class CONSOLE_SCREEN_BUFFER_INFO(Structure): + """struct in wincon.h.""" + _fields_ = [ + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", wintypes.WORD), + ("srWindow", wintypes.SMALL_RECT), + ("dwMaximumWindowSize", COORD), + ] + def __str__(self): + return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % ( + self.dwSize.Y, self.dwSize.X + , self.dwCursorPosition.Y, self.dwCursorPosition.X + , self.wAttributes + , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right + , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X + ) + + _GetStdHandle = windll.kernel32.GetStdHandle + _GetStdHandle.argtypes = [ + wintypes.DWORD, + ] + _GetStdHandle.restype = wintypes.HANDLE + + _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo + _GetConsoleScreenBufferInfo.argtypes = [ + wintypes.HANDLE, + POINTER(CONSOLE_SCREEN_BUFFER_INFO), + ] + _GetConsoleScreenBufferInfo.restype = wintypes.BOOL + + _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute + _SetConsoleTextAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + ] + _SetConsoleTextAttribute.restype = wintypes.BOOL + + _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition + _SetConsoleCursorPosition.argtypes = [ + wintypes.HANDLE, + COORD, + ] + _SetConsoleCursorPosition.restype = wintypes.BOOL + + _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA + _FillConsoleOutputCharacterA.argtypes = [ + wintypes.HANDLE, + c_char, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputCharacterA.restype = wintypes.BOOL + + _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute + _FillConsoleOutputAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + wintypes.DWORD, + COORD, + POINTER(wintypes.DWORD), + ] + _FillConsoleOutputAttribute.restype = wintypes.BOOL + + _SetConsoleTitleW = windll.kernel32.SetConsoleTitleW + _SetConsoleTitleW.argtypes = [ + wintypes.LPCWSTR + ] + _SetConsoleTitleW.restype = wintypes.BOOL + + _GetConsoleMode = windll.kernel32.GetConsoleMode + _GetConsoleMode.argtypes = [ + wintypes.HANDLE, + POINTER(wintypes.DWORD) + ] + _GetConsoleMode.restype = wintypes.BOOL + + _SetConsoleMode = windll.kernel32.SetConsoleMode + _SetConsoleMode.argtypes = [ + wintypes.HANDLE, + wintypes.DWORD + ] + _SetConsoleMode.restype = wintypes.BOOL + + def _winapi_test(handle): + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return bool(success) + + def winapi_test(): + return any(_winapi_test(h) for h in + (_GetStdHandle(STDOUT), _GetStdHandle(STDERR))) + + def GetConsoleScreenBufferInfo(stream_id=STDOUT): + handle = _GetStdHandle(stream_id) + csbi = CONSOLE_SCREEN_BUFFER_INFO() + success = _GetConsoleScreenBufferInfo( + handle, byref(csbi)) + return csbi + + def SetConsoleTextAttribute(stream_id, attrs): + handle = _GetStdHandle(stream_id) + return _SetConsoleTextAttribute(handle, attrs) + + def SetConsoleCursorPosition(stream_id, position, adjust=True): + position = COORD(*position) + # If the position is out of range, do nothing. + if position.Y <= 0 or position.X <= 0: + return + # Adjust for Windows' SetConsoleCursorPosition: + # 1. being 0-based, while ANSI is 1-based. + # 2. expecting (x,y), while ANSI uses (y,x). + adjusted_position = COORD(position.Y - 1, position.X - 1) + if adjust: + # Adjust for viewport's scroll position + sr = GetConsoleScreenBufferInfo(STDOUT).srWindow + adjusted_position.Y += sr.Top + adjusted_position.X += sr.Left + # Resume normal processing + handle = _GetStdHandle(stream_id) + return _SetConsoleCursorPosition(handle, adjusted_position) + + def FillConsoleOutputCharacter(stream_id, char, length, start): + handle = _GetStdHandle(stream_id) + char = c_char(char.encode()) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + success = _FillConsoleOutputCharacterA( + handle, char, length, start, byref(num_written)) + return num_written.value + + def FillConsoleOutputAttribute(stream_id, attr, length, start): + ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )''' + handle = _GetStdHandle(stream_id) + attribute = wintypes.WORD(attr) + length = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + # Note that this is hard-coded for ANSI (vs wide) bytes. + return _FillConsoleOutputAttribute( + handle, attribute, length, start, byref(num_written)) + + def SetConsoleTitle(title): + return _SetConsoleTitleW(title) + + def GetConsoleMode(handle): + mode = wintypes.DWORD() + success = _GetConsoleMode(handle, byref(mode)) + if not success: + raise ctypes.WinError() + return mode.value + + def SetConsoleMode(handle, mode): + success = _SetConsoleMode(handle, mode) + if not success: + raise ctypes.WinError() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/colorama/winterm.py b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/winterm.py new file mode 100644 index 0000000..aad867e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/colorama/winterm.py @@ -0,0 +1,195 @@ +# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. +try: + from msvcrt import get_osfhandle +except ImportError: + def get_osfhandle(_): + raise OSError("This isn't windows!") + + +from . import win32 + +# from wincon.h +class WinColor(object): + BLACK = 0 + BLUE = 1 + GREEN = 2 + CYAN = 3 + RED = 4 + MAGENTA = 5 + YELLOW = 6 + GREY = 7 + +# from wincon.h +class WinStyle(object): + NORMAL = 0x00 # dim text, dim background + BRIGHT = 0x08 # bright text, dim background + BRIGHT_BACKGROUND = 0x80 # dim text, bright background + +class WinTerm(object): + + def __init__(self): + self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes + self.set_attrs(self._default) + self._default_fore = self._fore + self._default_back = self._back + self._default_style = self._style + # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style. + # So that LIGHT_EX colors and BRIGHT style do not clobber each other, + # we track them separately, since LIGHT_EX is overwritten by Fore/Back + # and BRIGHT is overwritten by Style codes. + self._light = 0 + + def get_attrs(self): + return self._fore + self._back * 16 + (self._style | self._light) + + def set_attrs(self, value): + self._fore = value & 7 + self._back = (value >> 4) & 7 + self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) + + def reset_all(self, on_stderr=None): + self.set_attrs(self._default) + self.set_console(attrs=self._default) + self._light = 0 + + def fore(self, fore=None, light=False, on_stderr=False): + if fore is None: + fore = self._default_fore + self._fore = fore + # Emulate LIGHT_EX with BRIGHT Style + if light: + self._light |= WinStyle.BRIGHT + else: + self._light &= ~WinStyle.BRIGHT + self.set_console(on_stderr=on_stderr) + + def back(self, back=None, light=False, on_stderr=False): + if back is None: + back = self._default_back + self._back = back + # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style + if light: + self._light |= WinStyle.BRIGHT_BACKGROUND + else: + self._light &= ~WinStyle.BRIGHT_BACKGROUND + self.set_console(on_stderr=on_stderr) + + def style(self, style=None, on_stderr=False): + if style is None: + style = self._default_style + self._style = style + self.set_console(on_stderr=on_stderr) + + def set_console(self, attrs=None, on_stderr=False): + if attrs is None: + attrs = self.get_attrs() + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleTextAttribute(handle, attrs) + + def get_position(self, handle): + position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition + # Because Windows coordinates are 0-based, + # and win32.SetConsoleCursorPosition expects 1-based. + position.X += 1 + position.Y += 1 + return position + + def set_cursor_position(self, position=None, on_stderr=False): + if position is None: + # I'm not currently tracking the position, so there is no default. + # position = self.get_position() + return + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + win32.SetConsoleCursorPosition(handle, position) + + def cursor_adjust(self, x, y, on_stderr=False): + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + position = self.get_position(handle) + adjusted_position = (position.Y + y, position.X + x) + win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) + + def erase_screen(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the screen. + # 1 should clear from the cursor to the beginning of the screen. + # 2 should clear the entire screen, and move cursor to (1,1) + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + # get the number of character cells in the current buffer + cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y + # get number of character cells before current cursor position + cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = cells_in_screen - cells_before_cursor + elif mode == 1: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_before_cursor + elif mode == 2: + from_coord = win32.COORD(0, 0) + cells_to_erase = cells_in_screen + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + if mode == 2: + # put the cursor where needed + win32.SetConsoleCursorPosition(handle, (1, 1)) + + def erase_line(self, mode=0, on_stderr=False): + # 0 should clear from the cursor to the end of the line. + # 1 should clear from the cursor to the beginning of the line. + # 2 should clear the entire line. + handle = win32.STDOUT + if on_stderr: + handle = win32.STDERR + csbi = win32.GetConsoleScreenBufferInfo(handle) + if mode == 0: + from_coord = csbi.dwCursorPosition + cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X + elif mode == 1: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwCursorPosition.X + elif mode == 2: + from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) + cells_to_erase = csbi.dwSize.X + else: + # invalid mode + return + # fill the entire screen with blanks + win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) + # now set the buffer's attributes accordingly + win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) + + def set_title(self, title): + win32.SetConsoleTitle(title) + + +def enable_vt_processing(fd): + if win32.windll is None or not win32.winapi_test(): + return False + + try: + handle = get_osfhandle(fd) + mode = win32.GetConsoleMode(handle) + win32.SetConsoleMode( + handle, + mode | win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING, + ) + + mode = win32.GetConsoleMode(handle) + if mode & win32.ENABLE_VIRTUAL_TERMINAL_PROCESSING: + return True + # Can get TypeError in testsuite where 'fd' is a Mock() + except (OSError, TypeError): + return False diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py new file mode 100644 index 0000000..e999438 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2023 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import logging + +__version__ = '0.3.8' + + +class DistlibException(Exception): + pass + + +try: + from logging import NullHandler +except ImportError: # pragma: no cover + + class NullHandler(logging.Handler): + + def handle(self, record): + pass + + def emit(self, record): + pass + + def createLock(self): + self.lock = None + + +logger = logging.getLogger(__name__) +logger.addHandler(NullHandler()) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..b0edf82 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc new file mode 100644 index 0000000..2801dc7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc new file mode 100644 index 0000000..13baeb2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc new file mode 100644 index 0000000..948ab82 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc new file mode 100644 index 0000000..76cb5e1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc new file mode 100644 index 0000000..a836aa7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc new file mode 100644 index 0000000..7b150cc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc new file mode 100644 index 0000000..b5f423d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc new file mode 100644 index 0000000..16dced0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc new file mode 100644 index 0000000..6731f69 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc new file mode 100644 index 0000000..8ee5d0f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc new file mode 100644 index 0000000..3a9fa8f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc new file mode 100644 index 0000000..2a02283 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py new file mode 100644 index 0000000..e93dc27 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py @@ -0,0 +1,1138 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import absolute_import + +import os +import re +import shutil +import sys + +try: + import ssl +except ImportError: # pragma: no cover + ssl = None + +if sys.version_info[0] < 3: # pragma: no cover + from StringIO import StringIO + string_types = basestring, + text_type = unicode + from types import FileType as file_type + import __builtin__ as builtins + import ConfigParser as configparser + from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit + from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, + pathname2url, ContentTooShortError, splittype) + + def quote(s): + if isinstance(s, unicode): + s = s.encode('utf-8') + return _quote(s) + + import urllib2 + from urllib2 import (Request, urlopen, URLError, HTTPError, + HTTPBasicAuthHandler, HTTPPasswordMgr, HTTPHandler, + HTTPRedirectHandler, build_opener) + if ssl: + from urllib2 import HTTPSHandler + import httplib + import xmlrpclib + import Queue as queue + from HTMLParser import HTMLParser + import htmlentitydefs + raw_input = raw_input + from itertools import ifilter as filter + from itertools import ifilterfalse as filterfalse + + # Leaving this around for now, in case it needs resurrecting in some way + # _userprog = None + # def splituser(host): + # """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" + # global _userprog + # if _userprog is None: + # import re + # _userprog = re.compile('^(.*)@(.*)$') + + # match = _userprog.match(host) + # if match: return match.group(1, 2) + # return None, host + +else: # pragma: no cover + from io import StringIO + string_types = str, + text_type = str + from io import TextIOWrapper as file_type + import builtins + import configparser + from urllib.parse import (urlparse, urlunparse, urljoin, quote, unquote, + urlsplit, urlunsplit, splittype) + from urllib.request import (urlopen, urlretrieve, Request, url2pathname, + pathname2url, HTTPBasicAuthHandler, + HTTPPasswordMgr, HTTPHandler, + HTTPRedirectHandler, build_opener) + if ssl: + from urllib.request import HTTPSHandler + from urllib.error import HTTPError, URLError, ContentTooShortError + import http.client as httplib + import urllib.request as urllib2 + import xmlrpc.client as xmlrpclib + import queue + from html.parser import HTMLParser + import html.entities as htmlentitydefs + raw_input = input + from itertools import filterfalse + filter = filter + +try: + from ssl import match_hostname, CertificateError +except ImportError: # pragma: no cover + + class CertificateError(ValueError): + pass + + def _dnsname_match(dn, hostname, max_wildcards=1): + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + parts = dn.split('.') + leftmost, remainder = parts[0], parts[1:] + + wildcards = leftmost.count('*') + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survey of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn)) + + # speed up common case w/o wildcards + if not wildcards: + return dn.lower() == hostname.lower() + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append('[^.]+') + elif leftmost.startswith('xn--') or hostname.startswith('xn--'): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) + return pat.match(hostname) + + def match_hostname(cert, hostname): + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError("empty or no certificate, match_hostname needs a " + "SSL socket or SSL context with either " + "CERT_OPTIONAL or CERT_REQUIRED") + dnsnames = [] + san = cert.get('subjectAltName', ()) + for key, value in san: + if key == 'DNS': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if not dnsnames: + # The subject is only checked when there is no dNSName entry + # in subjectAltName + for sub in cert.get('subject', ()): + for key, value in sub: + # XXX according to RFC 2818, the most specific Common Name + # must be used. + if key == 'commonName': + if _dnsname_match(value, hostname): + return + dnsnames.append(value) + if len(dnsnames) > 1: + raise CertificateError("hostname %r " + "doesn't match either of %s" % + (hostname, ', '.join(map(repr, dnsnames)))) + elif len(dnsnames) == 1: + raise CertificateError("hostname %r " + "doesn't match %r" % + (hostname, dnsnames[0])) + else: + raise CertificateError("no appropriate commonName or " + "subjectAltName fields were found") + + +try: + from types import SimpleNamespace as Container +except ImportError: # pragma: no cover + + class Container(object): + """ + A generic container for when multiple values need to be returned + """ + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + +try: + from shutil import which +except ImportError: # pragma: no cover + # Implementation from Python 3.3 + def which(cmd, mode=os.F_OK | os.X_OK, path=None): + """Given a command, mode, and a PATH string, return the path which + conforms to the given mode on the PATH, or None if there is no such + file. + + `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result + of os.environ.get("PATH"), or can be overridden with a custom search + path. + + """ + + # Check that a given file can be accessed with the correct mode. + # Additionally check that `file` is not a directory, as on Windows + # directories pass the os.access check. + def _access_check(fn, mode): + return (os.path.exists(fn) and os.access(fn, mode) + and not os.path.isdir(fn)) + + # If we're given a path with a directory part, look it up directly rather + # than referring to PATH directories. This includes checking relative to the + # current directory, e.g. ./script + if os.path.dirname(cmd): + if _access_check(cmd, mode): + return cmd + return None + + if path is None: + path = os.environ.get("PATH", os.defpath) + if not path: + return None + path = path.split(os.pathsep) + + if sys.platform == "win32": + # The current directory takes precedence on Windows. + if os.curdir not in path: + path.insert(0, os.curdir) + + # PATHEXT is necessary to check on Windows. + pathext = os.environ.get("PATHEXT", "").split(os.pathsep) + # See if the given file matches any of the expected path extensions. + # This will allow us to short circuit when given "python.exe". + # If it does match, only test that one, otherwise we have to try + # others. + if any(cmd.lower().endswith(ext.lower()) for ext in pathext): + files = [cmd] + else: + files = [cmd + ext for ext in pathext] + else: + # On other platforms you don't have things like PATHEXT to tell you + # what file suffixes are executable, so just pass on cmd as-is. + files = [cmd] + + seen = set() + for dir in path: + normdir = os.path.normcase(dir) + if normdir not in seen: + seen.add(normdir) + for thefile in files: + name = os.path.join(dir, thefile) + if _access_check(name, mode): + return name + return None + + +# ZipFile is a context manager in 2.7, but not in 2.6 + +from zipfile import ZipFile as BaseZipFile + +if hasattr(BaseZipFile, '__enter__'): # pragma: no cover + ZipFile = BaseZipFile +else: # pragma: no cover + from zipfile import ZipExtFile as BaseZipExtFile + + class ZipExtFile(BaseZipExtFile): + + def __init__(self, base): + self.__dict__.update(base.__dict__) + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.close() + # return None, so if an exception occurred, it will propagate + + class ZipFile(BaseZipFile): + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.close() + # return None, so if an exception occurred, it will propagate + + def open(self, *args, **kwargs): + base = BaseZipFile.open(self, *args, **kwargs) + return ZipExtFile(base) + + +try: + from platform import python_implementation +except ImportError: # pragma: no cover + + def python_implementation(): + """Return a string identifying the Python implementation.""" + if 'PyPy' in sys.version: + return 'PyPy' + if os.name == 'java': + return 'Jython' + if sys.version.startswith('IronPython'): + return 'IronPython' + return 'CPython' + + +import sysconfig + +try: + callable = callable +except NameError: # pragma: no cover + from collections.abc import Callable + + def callable(obj): + return isinstance(obj, Callable) + + +try: + fsencode = os.fsencode + fsdecode = os.fsdecode +except AttributeError: # pragma: no cover + # Issue #99: on some systems (e.g. containerised), + # sys.getfilesystemencoding() returns None, and we need a real value, + # so fall back to utf-8. From the CPython 2.7 docs relating to Unix and + # sys.getfilesystemencoding(): the return value is "the user’s preference + # according to the result of nl_langinfo(CODESET), or None if the + # nl_langinfo(CODESET) failed." + _fsencoding = sys.getfilesystemencoding() or 'utf-8' + if _fsencoding == 'mbcs': + _fserrors = 'strict' + else: + _fserrors = 'surrogateescape' + + def fsencode(filename): + if isinstance(filename, bytes): + return filename + elif isinstance(filename, text_type): + return filename.encode(_fsencoding, _fserrors) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) + + def fsdecode(filename): + if isinstance(filename, text_type): + return filename + elif isinstance(filename, bytes): + return filename.decode(_fsencoding, _fserrors) + else: + raise TypeError("expect bytes or str, not %s" % + type(filename).__name__) + + +try: + from tokenize import detect_encoding +except ImportError: # pragma: no cover + from codecs import BOM_UTF8, lookup + + cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") + + def _get_normal_name(orig_enc): + """Imitates get_normal_name in tokenizer.c.""" + # Only care about the first 12 characters. + enc = orig_enc[:12].lower().replace("_", "-") + if enc == "utf-8" or enc.startswith("utf-8-"): + return "utf-8" + if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ + enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): + return "iso-8859-1" + return orig_enc + + def detect_encoding(readline): + """ + The detect_encoding() function is used to detect the encoding that should + be used to decode a Python source file. It requires one argument, readline, + in the same way as the tokenize() generator. + + It will call readline a maximum of twice, and return the encoding used + (as a string) and a list of any lines (left as bytes) it has read in. + + It detects the encoding from the presence of a utf-8 bom or an encoding + cookie as specified in pep-0263. If both a bom and a cookie are present, + but disagree, a SyntaxError will be raised. If the encoding cookie is an + invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. + + If no encoding is specified, then the default of 'utf-8' will be returned. + """ + try: + filename = readline.__self__.name + except AttributeError: + filename = None + bom_found = False + encoding = None + default = 'utf-8' + + def read_or_stop(): + try: + return readline() + except StopIteration: + return b'' + + def find_cookie(line): + try: + # Decode as UTF-8. Either the line is an encoding declaration, + # in which case it should be pure ASCII, or it must be UTF-8 + # per default encoding. + line_string = line.decode('utf-8') + except UnicodeDecodeError: + msg = "invalid or missing encoding declaration" + if filename is not None: + msg = '{} for {!r}'.format(msg, filename) + raise SyntaxError(msg) + + matches = cookie_re.findall(line_string) + if not matches: + return None + encoding = _get_normal_name(matches[0]) + try: + codec = lookup(encoding) + except LookupError: + # This behaviour mimics the Python interpreter + if filename is None: + msg = "unknown encoding: " + encoding + else: + msg = "unknown encoding for {!r}: {}".format( + filename, encoding) + raise SyntaxError(msg) + + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + if filename is None: + msg = 'encoding problem: utf-8' + else: + msg = 'encoding problem for {!r}: utf-8'.format( + filename) + raise SyntaxError(msg) + encoding += '-sig' + return encoding + + first = read_or_stop() + if first.startswith(BOM_UTF8): + bom_found = True + first = first[3:] + default = 'utf-8-sig' + if not first: + return default, [] + + encoding = find_cookie(first) + if encoding: + return encoding, [first] + + second = read_or_stop() + if not second: + return default, [first] + + encoding = find_cookie(second) + if encoding: + return encoding, [first, second] + + return default, [first, second] + + +# For converting & <-> & etc. +try: + from html import escape +except ImportError: + from cgi import escape +if sys.version_info[:2] < (3, 4): + unescape = HTMLParser().unescape +else: + from html import unescape + +try: + from collections import ChainMap +except ImportError: # pragma: no cover + from collections import MutableMapping + + try: + from reprlib import recursive_repr as _recursive_repr + except ImportError: + + def _recursive_repr(fillvalue='...'): + ''' + Decorator to make a repr function return fillvalue for a recursive + call + ''' + + def decorating_function(user_function): + repr_running = set() + + def wrapper(self): + key = id(self), get_ident() + if key in repr_running: + return fillvalue + repr_running.add(key) + try: + result = user_function(self) + finally: + repr_running.discard(key) + return result + + # Can't use functools.wraps() here because of bootstrap issues + wrapper.__module__ = getattr(user_function, '__module__') + wrapper.__doc__ = getattr(user_function, '__doc__') + wrapper.__name__ = getattr(user_function, '__name__') + wrapper.__annotations__ = getattr(user_function, + '__annotations__', {}) + return wrapper + + return decorating_function + + class ChainMap(MutableMapping): + ''' + A ChainMap groups multiple dicts (or other mappings) together + to create a single, updateable view. + + The underlying mappings are stored in a list. That list is public and can + accessed or updated using the *maps* attribute. There is no other state. + + Lookups search the underlying mappings successively until a key is found. + In contrast, writes, updates, and deletions only operate on the first + mapping. + ''' + + def __init__(self, *maps): + '''Initialize a ChainMap by setting *maps* to the given mappings. + If no mappings are provided, a single empty dictionary is used. + + ''' + self.maps = list(maps) or [{}] # always at least one map + + def __missing__(self, key): + raise KeyError(key) + + def __getitem__(self, key): + for mapping in self.maps: + try: + return mapping[ + key] # can't use 'key in mapping' with defaultdict + except KeyError: + pass + return self.__missing__( + key) # support subclasses that define __missing__ + + def get(self, key, default=None): + return self[key] if key in self else default + + def __len__(self): + return len(set().union( + *self.maps)) # reuses stored hash values if possible + + def __iter__(self): + return iter(set().union(*self.maps)) + + def __contains__(self, key): + return any(key in m for m in self.maps) + + def __bool__(self): + return any(self.maps) + + @_recursive_repr() + def __repr__(self): + return '{0.__class__.__name__}({1})'.format( + self, ', '.join(map(repr, self.maps))) + + @classmethod + def fromkeys(cls, iterable, *args): + 'Create a ChainMap with a single dict created from the iterable.' + return cls(dict.fromkeys(iterable, *args)) + + def copy(self): + 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' + return self.__class__(self.maps[0].copy(), *self.maps[1:]) + + __copy__ = copy + + def new_child(self): # like Django's Context.push() + 'New ChainMap with a new dict followed by all previous maps.' + return self.__class__({}, *self.maps) + + @property + def parents(self): # like Django's Context.pop() + 'New ChainMap from maps[1:].' + return self.__class__(*self.maps[1:]) + + def __setitem__(self, key, value): + self.maps[0][key] = value + + def __delitem__(self, key): + try: + del self.maps[0][key] + except KeyError: + raise KeyError( + 'Key not found in the first mapping: {!r}'.format(key)) + + def popitem(self): + 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' + try: + return self.maps[0].popitem() + except KeyError: + raise KeyError('No keys found in the first mapping.') + + def pop(self, key, *args): + 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' + try: + return self.maps[0].pop(key, *args) + except KeyError: + raise KeyError( + 'Key not found in the first mapping: {!r}'.format(key)) + + def clear(self): + 'Clear maps[0], leaving maps[1:] intact.' + self.maps[0].clear() + + +try: + from importlib.util import cache_from_source # Python >= 3.4 +except ImportError: # pragma: no cover + + def cache_from_source(path, debug_override=None): + assert path.endswith('.py') + if debug_override is None: + debug_override = __debug__ + if debug_override: + suffix = 'c' + else: + suffix = 'o' + return path + suffix + + +try: + from collections import OrderedDict +except ImportError: # pragma: no cover + # {{{ http://code.activestate.com/recipes/576693/ (r9) + # Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. + # Passes Python2.7's test suite and incorporates all the latest updates. + try: + from thread import get_ident as _get_ident + except ImportError: + from dummy_thread import get_ident as _get_ident + + try: + from _abcoll import KeysView, ValuesView, ItemsView + except ImportError: + pass + + class OrderedDict(dict): + 'Dictionary that remembers insertion order' + + # An inherited dict maps keys to values. + # The inherited dict provides __getitem__, __len__, __contains__, and get. + # The remaining methods are order-aware. + # Big-O running times for all methods are the same as for regular dictionaries. + + # The internal self.__map dictionary maps keys to links in a doubly linked list. + # The circular doubly linked list starts and ends with a sentinel element. + # The sentinel element never gets deleted (this simplifies the algorithm). + # Each link is stored as a list of length three: [PREV, NEXT, KEY]. + + def __init__(self, *args, **kwds): + '''Initialize an ordered dictionary. Signature is the same as for + regular dictionaries, but keyword arguments are not recommended + because their insertion order is arbitrary. + + ''' + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % + len(args)) + try: + self.__root + except AttributeError: + self.__root = root = [] # sentinel node + root[:] = [root, root, None] + self.__map = {} + self.__update(*args, **kwds) + + def __setitem__(self, key, value, dict_setitem=dict.__setitem__): + 'od.__setitem__(i, y) <==> od[i]=y' + # Setting a new item creates a new link which goes at the end of the linked + # list, and the inherited dictionary is updated with the new key/value pair. + if key not in self: + root = self.__root + last = root[0] + last[1] = root[0] = self.__map[key] = [last, root, key] + dict_setitem(self, key, value) + + def __delitem__(self, key, dict_delitem=dict.__delitem__): + 'od.__delitem__(y) <==> del od[y]' + # Deleting an existing item uses self.__map to find the link which is + # then removed by updating the links in the predecessor and successor nodes. + dict_delitem(self, key) + link_prev, link_next, key = self.__map.pop(key) + link_prev[1] = link_next + link_next[0] = link_prev + + def __iter__(self): + 'od.__iter__() <==> iter(od)' + root = self.__root + curr = root[1] + while curr is not root: + yield curr[2] + curr = curr[1] + + def __reversed__(self): + 'od.__reversed__() <==> reversed(od)' + root = self.__root + curr = root[0] + while curr is not root: + yield curr[2] + curr = curr[0] + + def clear(self): + 'od.clear() -> None. Remove all items from od.' + try: + for node in self.__map.itervalues(): + del node[:] + root = self.__root + root[:] = [root, root, None] + self.__map.clear() + except AttributeError: + pass + dict.clear(self) + + def popitem(self, last=True): + '''od.popitem() -> (k, v), return and remove a (key, value) pair. + Pairs are returned in LIFO order if last is true or FIFO order if false. + + ''' + if not self: + raise KeyError('dictionary is empty') + root = self.__root + if last: + link = root[0] + link_prev = link[0] + link_prev[1] = root + root[0] = link_prev + else: + link = root[1] + link_next = link[1] + root[1] = link_next + link_next[0] = root + key = link[2] + del self.__map[key] + value = dict.pop(self, key) + return key, value + + # -- the following methods do not depend on the internal structure -- + + def keys(self): + 'od.keys() -> list of keys in od' + return list(self) + + def values(self): + 'od.values() -> list of values in od' + return [self[key] for key in self] + + def items(self): + 'od.items() -> list of (key, value) pairs in od' + return [(key, self[key]) for key in self] + + def iterkeys(self): + 'od.iterkeys() -> an iterator over the keys in od' + return iter(self) + + def itervalues(self): + 'od.itervalues -> an iterator over the values in od' + for k in self: + yield self[k] + + def iteritems(self): + 'od.iteritems -> an iterator over the (key, value) items in od' + for k in self: + yield (k, self[k]) + + def update(*args, **kwds): + '''od.update(E, **F) -> None. Update od from dict/iterable E and F. + + If E is a dict instance, does: for k in E: od[k] = E[k] + If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] + Or if E is an iterable of items, does: for k, v in E: od[k] = v + In either case, this is followed by: for k, v in F.items(): od[k] = v + + ''' + if len(args) > 2: + raise TypeError('update() takes at most 2 positional ' + 'arguments (%d given)' % (len(args), )) + elif not args: + raise TypeError('update() takes at least 1 argument (0 given)') + self = args[0] + # Make progressively weaker assumptions about "other" + other = () + if len(args) == 2: + other = args[1] + if isinstance(other, dict): + for key in other: + self[key] = other[key] + elif hasattr(other, 'keys'): + for key in other.keys(): + self[key] = other[key] + else: + for key, value in other: + self[key] = value + for key, value in kwds.items(): + self[key] = value + + __update = update # let subclasses override update without breaking __init__ + + __marker = object() + + def pop(self, key, default=__marker): + '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. + If key is not found, d is returned if given, otherwise KeyError is raised. + + ''' + if key in self: + result = self[key] + del self[key] + return result + if default is self.__marker: + raise KeyError(key) + return default + + def setdefault(self, key, default=None): + 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' + if key in self: + return self[key] + self[key] = default + return default + + def __repr__(self, _repr_running=None): + 'od.__repr__() <==> repr(od)' + if not _repr_running: + _repr_running = {} + call_key = id(self), _get_ident() + if call_key in _repr_running: + return '...' + _repr_running[call_key] = 1 + try: + if not self: + return '%s()' % (self.__class__.__name__, ) + return '%s(%r)' % (self.__class__.__name__, self.items()) + finally: + del _repr_running[call_key] + + def __reduce__(self): + 'Return state information for pickling' + items = [[k, self[k]] for k in self] + inst_dict = vars(self).copy() + for k in vars(OrderedDict()): + inst_dict.pop(k, None) + if inst_dict: + return (self.__class__, (items, ), inst_dict) + return self.__class__, (items, ) + + def copy(self): + 'od.copy() -> a shallow copy of od' + return self.__class__(self) + + @classmethod + def fromkeys(cls, iterable, value=None): + '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S + and values equal to v (which defaults to None). + + ''' + d = cls() + for key in iterable: + d[key] = value + return d + + def __eq__(self, other): + '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive + while comparison to a regular mapping is order-insensitive. + + ''' + if isinstance(other, OrderedDict): + return len(self) == len( + other) and self.items() == other.items() + return dict.__eq__(self, other) + + def __ne__(self, other): + return not self == other + + # -- the following methods are only used in Python 2.7 -- + + def viewkeys(self): + "od.viewkeys() -> a set-like object providing a view on od's keys" + return KeysView(self) + + def viewvalues(self): + "od.viewvalues() -> an object providing a view on od's values" + return ValuesView(self) + + def viewitems(self): + "od.viewitems() -> a set-like object providing a view on od's items" + return ItemsView(self) + + +try: + from logging.config import BaseConfigurator, valid_ident +except ImportError: # pragma: no cover + IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) + + def valid_ident(s): + m = IDENTIFIER.match(s) + if not m: + raise ValueError('Not a valid Python identifier: %r' % s) + return True + + # The ConvertingXXX classes are wrappers around standard Python containers, + # and they serve to convert any suitable values in the container. The + # conversion converts base dicts, lists and tuples to their wrapped + # equivalents, whereas strings which match a conversion format are converted + # appropriately. + # + # Each wrapper should have a configurator attribute holding the actual + # configurator to use for conversion. + + class ConvertingDict(dict): + """A converting dictionary wrapper.""" + + def __getitem__(self, key): + value = dict.__getitem__(self, key) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def get(self, key, default=None): + value = dict.get(self, key, default) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, key, default=None): + value = dict.pop(self, key, default) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + class ConvertingList(list): + """A converting list wrapper.""" + + def __getitem__(self, key): + value = list.__getitem__(self, key) + result = self.configurator.convert(value) + # If the converted value is different, save for next time + if value is not result: + self[key] = result + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + def pop(self, idx=-1): + value = list.pop(self, idx) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + return result + + class ConvertingTuple(tuple): + """A converting tuple wrapper.""" + + def __getitem__(self, key): + value = tuple.__getitem__(self, key) + result = self.configurator.convert(value) + if value is not result: + if type(result) in (ConvertingDict, ConvertingList, + ConvertingTuple): + result.parent = self + result.key = key + return result + + class BaseConfigurator(object): + """ + The configurator base class which defines some useful defaults. + """ + + CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') + + WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') + DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') + INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') + DIGIT_PATTERN = re.compile(r'^\d+$') + + value_converters = { + 'ext': 'ext_convert', + 'cfg': 'cfg_convert', + } + + # We might want to use a different one, e.g. importlib + importer = staticmethod(__import__) + + def __init__(self, config): + self.config = ConvertingDict(config) + self.config.configurator = self + + def resolve(self, s): + """ + Resolve strings to objects using standard import and attribute + syntax. + """ + name = s.split('.') + used = name.pop(0) + try: + found = self.importer(used) + for frag in name: + used += '.' + frag + try: + found = getattr(found, frag) + except AttributeError: + self.importer(used) + found = getattr(found, frag) + return found + except ImportError: + e, tb = sys.exc_info()[1:] + v = ValueError('Cannot resolve %r: %s' % (s, e)) + v.__cause__, v.__traceback__ = e, tb + raise v + + def ext_convert(self, value): + """Default converter for the ext:// protocol.""" + return self.resolve(value) + + def cfg_convert(self, value): + """Default converter for the cfg:// protocol.""" + rest = value + m = self.WORD_PATTERN.match(rest) + if m is None: + raise ValueError("Unable to convert %r" % value) + else: + rest = rest[m.end():] + d = self.config[m.groups()[0]] + while rest: + m = self.DOT_PATTERN.match(rest) + if m: + d = d[m.groups()[0]] + else: + m = self.INDEX_PATTERN.match(rest) + if m: + idx = m.groups()[0] + if not self.DIGIT_PATTERN.match(idx): + d = d[idx] + else: + try: + n = int( + idx + ) # try as number first (most likely) + d = d[n] + except TypeError: + d = d[idx] + if m: + rest = rest[m.end():] + else: + raise ValueError('Unable to convert ' + '%r at %r' % (value, rest)) + # rest should be empty + return d + + def convert(self, value): + """ + Convert values to an appropriate type. dicts, lists and tuples are + replaced by their converting alternatives. Strings are checked to + see if they have a conversion format and are converted if they do. + """ + if not isinstance(value, ConvertingDict) and isinstance( + value, dict): + value = ConvertingDict(value) + value.configurator = self + elif not isinstance(value, ConvertingList) and isinstance( + value, list): + value = ConvertingList(value) + value.configurator = self + elif not isinstance(value, ConvertingTuple) and isinstance(value, tuple): + value = ConvertingTuple(value) + value.configurator = self + elif isinstance(value, string_types): + m = self.CONVERT_PATTERN.match(value) + if m: + d = m.groupdict() + prefix = d['prefix'] + converter = self.value_converters.get(prefix, None) + if converter: + suffix = d['suffix'] + converter = getattr(self, converter) + value = converter(suffix) + return value + + def configure_custom(self, config): + """Configure an object with a user-supplied factory.""" + c = config.pop('()') + if not callable(c): + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) + result = c(**kwargs) + if props: + for name, value in props.items(): + setattr(result, name, value) + return result + + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/database.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/database.py new file mode 100644 index 0000000..eb3765f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/database.py @@ -0,0 +1,1359 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2023 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""PEP 376 implementation.""" + +from __future__ import unicode_literals + +import base64 +import codecs +import contextlib +import hashlib +import logging +import os +import posixpath +import sys +import zipimport + +from . import DistlibException, resources +from .compat import StringIO +from .version import get_scheme, UnsupportedVersionError +from .metadata import (Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME, + LEGACY_METADATA_FILENAME) +from .util import (parse_requirement, cached_property, parse_name_and_version, + read_exports, write_exports, CSVReader, CSVWriter) + +__all__ = [ + 'Distribution', 'BaseInstalledDistribution', 'InstalledDistribution', + 'EggInfoDistribution', 'DistributionPath' +] + +logger = logging.getLogger(__name__) + +EXPORTS_FILENAME = 'pydist-exports.json' +COMMANDS_FILENAME = 'pydist-commands.json' + +DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', + 'RESOURCES', EXPORTS_FILENAME, 'SHARED') + +DISTINFO_EXT = '.dist-info' + + +class _Cache(object): + """ + A simple cache mapping names and .dist-info paths to distributions + """ + + def __init__(self): + """ + Initialise an instance. There is normally one for each DistributionPath. + """ + self.name = {} + self.path = {} + self.generated = False + + def clear(self): + """ + Clear the cache, setting it to its initial state. + """ + self.name.clear() + self.path.clear() + self.generated = False + + def add(self, dist): + """ + Add a distribution to the cache. + :param dist: The distribution to add. + """ + if dist.path not in self.path: + self.path[dist.path] = dist + self.name.setdefault(dist.key, []).append(dist) + + +class DistributionPath(object): + """ + Represents a set of distributions installed on a path (typically sys.path). + """ + + def __init__(self, path=None, include_egg=False): + """ + Create an instance from a path, optionally including legacy (distutils/ + setuptools/distribute) distributions. + :param path: The path to use, as a list of directories. If not specified, + sys.path is used. + :param include_egg: If True, this instance will look for and return legacy + distributions as well as those based on PEP 376. + """ + if path is None: + path = sys.path + self.path = path + self._include_dist = True + self._include_egg = include_egg + + self._cache = _Cache() + self._cache_egg = _Cache() + self._cache_enabled = True + self._scheme = get_scheme('default') + + def _get_cache_enabled(self): + return self._cache_enabled + + def _set_cache_enabled(self, value): + self._cache_enabled = value + + cache_enabled = property(_get_cache_enabled, _set_cache_enabled) + + def clear_cache(self): + """ + Clears the internal cache. + """ + self._cache.clear() + self._cache_egg.clear() + + def _yield_distributions(self): + """ + Yield .dist-info and/or .egg(-info) distributions. + """ + # We need to check if we've seen some resources already, because on + # some Linux systems (e.g. some Debian/Ubuntu variants) there are + # symlinks which alias other files in the environment. + seen = set() + for path in self.path: + finder = resources.finder_for_path(path) + if finder is None: + continue + r = finder.find('') + if not r or not r.is_container: + continue + rset = sorted(r.resources) + for entry in rset: + r = finder.find(entry) + if not r or r.path in seen: + continue + try: + if self._include_dist and entry.endswith(DISTINFO_EXT): + possible_filenames = [ + METADATA_FILENAME, WHEEL_METADATA_FILENAME, + LEGACY_METADATA_FILENAME + ] + for metadata_filename in possible_filenames: + metadata_path = posixpath.join( + entry, metadata_filename) + pydist = finder.find(metadata_path) + if pydist: + break + else: + continue + + with contextlib.closing(pydist.as_stream()) as stream: + metadata = Metadata(fileobj=stream, + scheme='legacy') + logger.debug('Found %s', r.path) + seen.add(r.path) + yield new_dist_class(r.path, + metadata=metadata, + env=self) + elif self._include_egg and entry.endswith( + ('.egg-info', '.egg')): + logger.debug('Found %s', r.path) + seen.add(r.path) + yield old_dist_class(r.path, self) + except Exception as e: + msg = 'Unable to read distribution at %s, perhaps due to bad metadata: %s' + logger.warning(msg, r.path, e) + import warnings + warnings.warn(msg % (r.path, e), stacklevel=2) + + def _generate_cache(self): + """ + Scan the path for distributions and populate the cache with + those that are found. + """ + gen_dist = not self._cache.generated + gen_egg = self._include_egg and not self._cache_egg.generated + if gen_dist or gen_egg: + for dist in self._yield_distributions(): + if isinstance(dist, InstalledDistribution): + self._cache.add(dist) + else: + self._cache_egg.add(dist) + + if gen_dist: + self._cache.generated = True + if gen_egg: + self._cache_egg.generated = True + + @classmethod + def distinfo_dirname(cls, name, version): + """ + The *name* and *version* parameters are converted into their + filename-escaped form, i.e. any ``'-'`` characters are replaced + with ``'_'`` other than the one in ``'dist-info'`` and the one + separating the name from the version number. + + :parameter name: is converted to a standard distribution name by replacing + any runs of non- alphanumeric characters with a single + ``'-'``. + :type name: string + :parameter version: is converted to a standard version string. Spaces + become dots, and all other non-alphanumeric characters + (except dots) become dashes, with runs of multiple + dashes condensed to a single dash. + :type version: string + :returns: directory name + :rtype: string""" + name = name.replace('-', '_') + return '-'.join([name, version]) + DISTINFO_EXT + + def get_distributions(self): + """ + Provides an iterator that looks for distributions and returns + :class:`InstalledDistribution` or + :class:`EggInfoDistribution` instances for each one of them. + + :rtype: iterator of :class:`InstalledDistribution` and + :class:`EggInfoDistribution` instances + """ + if not self._cache_enabled: + for dist in self._yield_distributions(): + yield dist + else: + self._generate_cache() + + for dist in self._cache.path.values(): + yield dist + + if self._include_egg: + for dist in self._cache_egg.path.values(): + yield dist + + def get_distribution(self, name): + """ + Looks for a named distribution on the path. + + This function only returns the first result found, as no more than one + value is expected. If nothing is found, ``None`` is returned. + + :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` + or ``None`` + """ + result = None + name = name.lower() + if not self._cache_enabled: + for dist in self._yield_distributions(): + if dist.key == name: + result = dist + break + else: + self._generate_cache() + + if name in self._cache.name: + result = self._cache.name[name][0] + elif self._include_egg and name in self._cache_egg.name: + result = self._cache_egg.name[name][0] + return result + + def provides_distribution(self, name, version=None): + """ + Iterates over all distributions to find which distributions provide *name*. + If a *version* is provided, it will be used to filter the results. + + This function only returns the first result found, since no more than + one values are expected. If the directory is not found, returns ``None``. + + :parameter version: a version specifier that indicates the version + required, conforming to the format in ``PEP-345`` + + :type name: string + :type version: string + """ + matcher = None + if version is not None: + try: + matcher = self._scheme.matcher('%s (%s)' % (name, version)) + except ValueError: + raise DistlibException('invalid name or version: %r, %r' % + (name, version)) + + for dist in self.get_distributions(): + # We hit a problem on Travis where enum34 was installed and doesn't + # have a provides attribute ... + if not hasattr(dist, 'provides'): + logger.debug('No "provides": %s', dist) + else: + provided = dist.provides + + for p in provided: + p_name, p_ver = parse_name_and_version(p) + if matcher is None: + if p_name == name: + yield dist + break + else: + if p_name == name and matcher.match(p_ver): + yield dist + break + + def get_file_path(self, name, relative_path): + """ + Return the path to a resource file. + """ + dist = self.get_distribution(name) + if dist is None: + raise LookupError('no distribution named %r found' % name) + return dist.get_resource_path(relative_path) + + def get_exported_entries(self, category, name=None): + """ + Return all of the exported entries in a particular category. + + :param category: The category to search for entries. + :param name: If specified, only entries with that name are returned. + """ + for dist in self.get_distributions(): + r = dist.exports + if category in r: + d = r[category] + if name is not None: + if name in d: + yield d[name] + else: + for v in d.values(): + yield v + + +class Distribution(object): + """ + A base class for distributions, whether installed or from indexes. + Either way, it must have some metadata, so that's all that's needed + for construction. + """ + + build_time_dependency = False + """ + Set to True if it's known to be only a build-time dependency (i.e. + not needed after installation). + """ + + requested = False + """A boolean that indicates whether the ``REQUESTED`` metadata file is + present (in other words, whether the package was installed by user + request or it was installed as a dependency).""" + + def __init__(self, metadata): + """ + Initialise an instance. + :param metadata: The instance of :class:`Metadata` describing this + distribution. + """ + self.metadata = metadata + self.name = metadata.name + self.key = self.name.lower() # for case-insensitive comparisons + self.version = metadata.version + self.locator = None + self.digest = None + self.extras = None # additional features requested + self.context = None # environment marker overrides + self.download_urls = set() + self.digests = {} + + @property + def source_url(self): + """ + The source archive download URL for this distribution. + """ + return self.metadata.source_url + + download_url = source_url # Backward compatibility + + @property + def name_and_version(self): + """ + A utility property which displays the name and version in parentheses. + """ + return '%s (%s)' % (self.name, self.version) + + @property + def provides(self): + """ + A set of distribution names and versions provided by this distribution. + :return: A set of "name (version)" strings. + """ + plist = self.metadata.provides + s = '%s (%s)' % (self.name, self.version) + if s not in plist: + plist.append(s) + return plist + + def _get_requirements(self, req_attr): + md = self.metadata + reqts = getattr(md, req_attr) + logger.debug('%s: got requirements %r from metadata: %r', self.name, + req_attr, reqts) + return set( + md.get_requirements(reqts, extras=self.extras, env=self.context)) + + @property + def run_requires(self): + return self._get_requirements('run_requires') + + @property + def meta_requires(self): + return self._get_requirements('meta_requires') + + @property + def build_requires(self): + return self._get_requirements('build_requires') + + @property + def test_requires(self): + return self._get_requirements('test_requires') + + @property + def dev_requires(self): + return self._get_requirements('dev_requires') + + def matches_requirement(self, req): + """ + Say if this instance matches (fulfills) a requirement. + :param req: The requirement to match. + :rtype req: str + :return: True if it matches, else False. + """ + # Requirement may contain extras - parse to lose those + # from what's passed to the matcher + r = parse_requirement(req) + scheme = get_scheme(self.metadata.scheme) + try: + matcher = scheme.matcher(r.requirement) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + result = False + for p in self.provides: + p_name, p_ver = parse_name_and_version(p) + if p_name != name: + continue + try: + result = matcher.match(p_ver) + break + except UnsupportedVersionError: + pass + return result + + def __repr__(self): + """ + Return a textual representation of this instance, + """ + if self.source_url: + suffix = ' [%s]' % self.source_url + else: + suffix = '' + return '' % (self.name, self.version, suffix) + + def __eq__(self, other): + """ + See if this distribution is the same as another. + :param other: The distribution to compare with. To be equal to one + another. distributions must have the same type, name, + version and source_url. + :return: True if it is the same, else False. + """ + if type(other) is not type(self): + result = False + else: + result = (self.name == other.name and self.version == other.version + and self.source_url == other.source_url) + return result + + def __hash__(self): + """ + Compute hash in a way which matches the equality test. + """ + return hash(self.name) + hash(self.version) + hash(self.source_url) + + +class BaseInstalledDistribution(Distribution): + """ + This is the base class for installed distributions (whether PEP 376 or + legacy). + """ + + hasher = None + + def __init__(self, metadata, path, env=None): + """ + Initialise an instance. + :param metadata: An instance of :class:`Metadata` which describes the + distribution. This will normally have been initialised + from a metadata file in the ``path``. + :param path: The path of the ``.dist-info`` or ``.egg-info`` + directory for the distribution. + :param env: This is normally the :class:`DistributionPath` + instance where this distribution was found. + """ + super(BaseInstalledDistribution, self).__init__(metadata) + self.path = path + self.dist_path = env + + def get_hash(self, data, hasher=None): + """ + Get the hash of some data, using a particular hash algorithm, if + specified. + + :param data: The data to be hashed. + :type data: bytes + :param hasher: The name of a hash implementation, supported by hashlib, + or ``None``. Examples of valid values are ``'sha1'``, + ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and + ``'sha512'``. If no hasher is specified, the ``hasher`` + attribute of the :class:`InstalledDistribution` instance + is used. If the hasher is determined to be ``None``, MD5 + is used as the hashing algorithm. + :returns: The hash of the data. If a hasher was explicitly specified, + the returned hash will be prefixed with the specified hasher + followed by '='. + :rtype: str + """ + if hasher is None: + hasher = self.hasher + if hasher is None: + hasher = hashlib.md5 + prefix = '' + else: + hasher = getattr(hashlib, hasher) + prefix = '%s=' % self.hasher + digest = hasher(data).digest() + digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') + return '%s%s' % (prefix, digest) + + +class InstalledDistribution(BaseInstalledDistribution): + """ + Created with the *path* of the ``.dist-info`` directory provided to the + constructor. It reads the metadata contained in ``pydist.json`` when it is + instantiated., or uses a passed in Metadata instance (useful for when + dry-run mode is being used). + """ + + hasher = 'sha256' + + def __init__(self, path, metadata=None, env=None): + self.modules = [] + self.finder = finder = resources.finder_for_path(path) + if finder is None: + raise ValueError('finder unavailable for %s' % path) + if env and env._cache_enabled and path in env._cache.path: + metadata = env._cache.path[path].metadata + elif metadata is None: + r = finder.find(METADATA_FILENAME) + # Temporary - for Wheel 0.23 support + if r is None: + r = finder.find(WHEEL_METADATA_FILENAME) + # Temporary - for legacy support + if r is None: + r = finder.find(LEGACY_METADATA_FILENAME) + if r is None: + raise ValueError('no %s found in %s' % + (METADATA_FILENAME, path)) + with contextlib.closing(r.as_stream()) as stream: + metadata = Metadata(fileobj=stream, scheme='legacy') + + super(InstalledDistribution, self).__init__(metadata, path, env) + + if env and env._cache_enabled: + env._cache.add(self) + + r = finder.find('REQUESTED') + self.requested = r is not None + p = os.path.join(path, 'top_level.txt') + if os.path.exists(p): + with open(p, 'rb') as f: + data = f.read().decode('utf-8') + self.modules = data.splitlines() + + def __repr__(self): + return '' % ( + self.name, self.version, self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def _get_records(self): + """ + Get the list of installed files for the distribution + :return: A list of tuples of path, hash and size. Note that hash and + size might be ``None`` for some entries. The path is exactly + as stored in the file (which is as in PEP 376). + """ + results = [] + r = self.get_distinfo_resource('RECORD') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as record_reader: + # Base location is parent dir of .dist-info dir + # base_location = os.path.dirname(self.path) + # base_location = os.path.abspath(base_location) + for row in record_reader: + missing = [None for i in range(len(row), 3)] + path, checksum, size = row + missing + # if not os.path.isabs(path): + # path = path.replace('/', os.sep) + # path = os.path.join(base_location, path) + results.append((path, checksum, size)) + return results + + @cached_property + def exports(self): + """ + Return the information exported by this distribution. + :return: A dictionary of exports, mapping an export category to a dict + of :class:`ExportEntry` instances describing the individual + export entries, and keyed by name. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + result = self.read_exports() + return result + + def read_exports(self): + """ + Read exports data from a file in .ini format. + + :return: A dictionary of exports, mapping an export category to a list + of :class:`ExportEntry` instances describing the individual + export entries. + """ + result = {} + r = self.get_distinfo_resource(EXPORTS_FILENAME) + if r: + with contextlib.closing(r.as_stream()) as stream: + result = read_exports(stream) + return result + + def write_exports(self, exports): + """ + Write a dictionary of exports to a file in .ini format. + :param exports: A dictionary of exports, mapping an export category to + a list of :class:`ExportEntry` instances describing the + individual export entries. + """ + rf = self.get_distinfo_file(EXPORTS_FILENAME) + with open(rf, 'w') as f: + write_exports(exports, f) + + def get_resource_path(self, relative_path): + """ + NOTE: This API may change in the future. + + Return the absolute path to a resource file with the given relative + path. + + :param relative_path: The path, relative to .dist-info, of the resource + of interest. + :return: The absolute path where the resource is to be found. + """ + r = self.get_distinfo_resource('RESOURCES') + with contextlib.closing(r.as_stream()) as stream: + with CSVReader(stream=stream) as resources_reader: + for relative, destination in resources_reader: + if relative == relative_path: + return destination + raise KeyError('no resource file with relative path %r ' + 'is installed' % relative_path) + + def list_installed_files(self): + """ + Iterates over the ``RECORD`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: iterator of (path, hash, size) + """ + for result in self._get_records(): + yield result + + def write_installed_files(self, paths, prefix, dry_run=False): + """ + Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any + existing ``RECORD`` file is silently overwritten. + + prefix is used to determine when to write absolute paths. + """ + prefix = os.path.join(prefix, '') + base = os.path.dirname(self.path) + base_under_prefix = base.startswith(prefix) + base = os.path.join(base, '') + record_path = self.get_distinfo_file('RECORD') + logger.info('creating %s', record_path) + if dry_run: + return None + with CSVWriter(record_path) as writer: + for path in paths: + if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): + # do not put size and hash, as in PEP-376 + hash_value = size = '' + else: + size = '%d' % os.path.getsize(path) + with open(path, 'rb') as fp: + hash_value = self.get_hash(fp.read()) + if path.startswith(base) or (base_under_prefix + and path.startswith(prefix)): + path = os.path.relpath(path, base) + writer.writerow((path, hash_value, size)) + + # add the RECORD file itself + if record_path.startswith(base): + record_path = os.path.relpath(record_path, base) + writer.writerow((record_path, '', '')) + return record_path + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + base = os.path.dirname(self.path) + record_path = self.get_distinfo_file('RECORD') + for path, hash_value, size in self.list_installed_files(): + if not os.path.isabs(path): + path = os.path.join(base, path) + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + elif os.path.isfile(path): + actual_size = str(os.path.getsize(path)) + if size and actual_size != size: + mismatches.append((path, 'size', size, actual_size)) + elif hash_value: + if '=' in hash_value: + hasher = hash_value.split('=', 1)[0] + else: + hasher = None + + with open(path, 'rb') as f: + actual_hash = self.get_hash(f.read(), hasher) + if actual_hash != hash_value: + mismatches.append( + (path, 'hash', hash_value, actual_hash)) + return mismatches + + @cached_property + def shared_locations(self): + """ + A dictionary of shared locations whose keys are in the set 'prefix', + 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. + The corresponding value is the absolute path of that category for + this distribution, and takes into account any paths selected by the + user at installation time (e.g. via command-line arguments). In the + case of the 'namespace' key, this would be a list of absolute paths + for the roots of namespace packages in this distribution. + + The first time this property is accessed, the relevant information is + read from the SHARED file in the .dist-info directory. + """ + result = {} + shared_path = os.path.join(self.path, 'SHARED') + if os.path.isfile(shared_path): + with codecs.open(shared_path, 'r', encoding='utf-8') as f: + lines = f.read().splitlines() + for line in lines: + key, value = line.split('=', 1) + if key == 'namespace': + result.setdefault(key, []).append(value) + else: + result[key] = value + return result + + def write_shared_locations(self, paths, dry_run=False): + """ + Write shared location information to the SHARED file in .dist-info. + :param paths: A dictionary as described in the documentation for + :meth:`shared_locations`. + :param dry_run: If True, the action is logged but no file is actually + written. + :return: The path of the file written to. + """ + shared_path = os.path.join(self.path, 'SHARED') + logger.info('creating %s', shared_path) + if dry_run: + return None + lines = [] + for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): + path = paths[key] + if os.path.isdir(paths[key]): + lines.append('%s=%s' % (key, path)) + for ns in paths.get('namespace', ()): + lines.append('namespace=%s' % ns) + + with codecs.open(shared_path, 'w', encoding='utf-8') as f: + f.write('\n'.join(lines)) + return shared_path + + def get_distinfo_resource(self, path): + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + finder = resources.finder_for_path(self.path) + if finder is None: + raise DistlibException('Unable to get a finder for %s' % self.path) + return finder.find(path) + + def get_distinfo_file(self, path): + """ + Returns a path located under the ``.dist-info`` directory. Returns a + string representing the path. + + :parameter path: a ``'/'``-separated path relative to the + ``.dist-info`` directory or an absolute path; + If *path* is an absolute path and doesn't start + with the ``.dist-info`` directory path, + a :class:`DistlibException` is raised + :type path: str + :rtype: str + """ + # Check if it is an absolute path # XXX use relpath, add tests + if path.find(os.sep) >= 0: + # it's an absolute path? + distinfo_dirname, path = path.split(os.sep)[-2:] + if distinfo_dirname != self.path.split(os.sep)[-1]: + raise DistlibException( + 'dist-info file %r does not belong to the %r %s ' + 'distribution' % (path, self.name, self.version)) + + # The file must be relative + if path not in DIST_FILES: + raise DistlibException('invalid path for a dist-info file: ' + '%r at %r' % (path, self.path)) + + return os.path.join(self.path, path) + + def list_distinfo_files(self): + """ + Iterates over the ``RECORD`` entries and returns paths for each line if + the path is pointing to a file located in the ``.dist-info`` directory + or one of its subdirectories. + + :returns: iterator of paths + """ + base = os.path.dirname(self.path) + for path, checksum, size in self._get_records(): + # XXX add separator or use real relpath algo + if not os.path.isabs(path): + path = os.path.join(base, path) + if path.startswith(self.path): + yield path + + def __eq__(self, other): + return (isinstance(other, InstalledDistribution) + and self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + + +class EggInfoDistribution(BaseInstalledDistribution): + """Created with the *path* of the ``.egg-info`` directory or file provided + to the constructor. It reads the metadata contained in the file itself, or + if the given path happens to be a directory, the metadata is read from the + file ``PKG-INFO`` under that directory.""" + + requested = True # as we have no way of knowing, assume it was + shared_locations = {} + + def __init__(self, path, env=None): + + def set_name_and_version(s, n, v): + s.name = n + s.key = n.lower() # for case-insensitive comparisons + s.version = v + + self.path = path + self.dist_path = env + if env and env._cache_enabled and path in env._cache_egg.path: + metadata = env._cache_egg.path[path].metadata + set_name_and_version(self, metadata.name, metadata.version) + else: + metadata = self._get_metadata(path) + + # Need to be set before caching + set_name_and_version(self, metadata.name, metadata.version) + + if env and env._cache_enabled: + env._cache_egg.add(self) + super(EggInfoDistribution, self).__init__(metadata, path, env) + + def _get_metadata(self, path): + requires = None + + def parse_requires_data(data): + """Create a list of dependencies from a requires.txt file. + + *data*: the contents of a setuptools-produced requires.txt file. + """ + reqs = [] + lines = data.splitlines() + for line in lines: + line = line.strip() + # sectioned files have bare newlines (separating sections) + if not line: # pragma: no cover + continue + if line.startswith('['): # pragma: no cover + logger.warning( + 'Unexpected line: quitting requirement scan: %r', line) + break + r = parse_requirement(line) + if not r: # pragma: no cover + logger.warning('Not recognised as a requirement: %r', line) + continue + if r.extras: # pragma: no cover + logger.warning('extra requirements in requires.txt are ' + 'not supported') + if not r.constraints: + reqs.append(r.name) + else: + cons = ', '.join('%s%s' % c for c in r.constraints) + reqs.append('%s (%s)' % (r.name, cons)) + return reqs + + def parse_requires_path(req_path): + """Create a list of dependencies from a requires.txt file. + + *req_path*: the path to a setuptools-produced requires.txt file. + """ + + reqs = [] + try: + with codecs.open(req_path, 'r', 'utf-8') as fp: + reqs = parse_requires_data(fp.read()) + except IOError: + pass + return reqs + + tl_path = tl_data = None + if path.endswith('.egg'): + if os.path.isdir(path): + p = os.path.join(path, 'EGG-INFO') + meta_path = os.path.join(p, 'PKG-INFO') + metadata = Metadata(path=meta_path, scheme='legacy') + req_path = os.path.join(p, 'requires.txt') + tl_path = os.path.join(p, 'top_level.txt') + requires = parse_requires_path(req_path) + else: + # FIXME handle the case where zipfile is not available + zipf = zipimport.zipimporter(path) + fileobj = StringIO( + zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) + metadata = Metadata(fileobj=fileobj, scheme='legacy') + try: + data = zipf.get_data('EGG-INFO/requires.txt') + tl_data = zipf.get_data('EGG-INFO/top_level.txt').decode( + 'utf-8') + requires = parse_requires_data(data.decode('utf-8')) + except IOError: + requires = None + elif path.endswith('.egg-info'): + if os.path.isdir(path): + req_path = os.path.join(path, 'requires.txt') + requires = parse_requires_path(req_path) + path = os.path.join(path, 'PKG-INFO') + tl_path = os.path.join(path, 'top_level.txt') + metadata = Metadata(path=path, scheme='legacy') + else: + raise DistlibException('path must end with .egg-info or .egg, ' + 'got %r' % path) + + if requires: + metadata.add_requirements(requires) + # look for top-level modules in top_level.txt, if present + if tl_data is None: + if tl_path is not None and os.path.exists(tl_path): + with open(tl_path, 'rb') as f: + tl_data = f.read().decode('utf-8') + if not tl_data: + tl_data = [] + else: + tl_data = tl_data.splitlines() + self.modules = tl_data + return metadata + + def __repr__(self): + return '' % (self.name, self.version, + self.path) + + def __str__(self): + return "%s %s" % (self.name, self.version) + + def check_installed_files(self): + """ + Checks that the hashes and sizes of the files in ``RECORD`` are + matched by the files themselves. Returns a (possibly empty) list of + mismatches. Each entry in the mismatch list will be a tuple consisting + of the path, 'exists', 'size' or 'hash' according to what didn't match + (existence is checked first, then size, then hash), the expected + value and the actual value. + """ + mismatches = [] + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + for path, _, _ in self.list_installed_files(): + if path == record_path: + continue + if not os.path.exists(path): + mismatches.append((path, 'exists', True, False)) + return mismatches + + def list_installed_files(self): + """ + Iterates over the ``installed-files.txt`` entries and returns a tuple + ``(path, hash, size)`` for each line. + + :returns: a list of (path, hash, size) + """ + + def _md5(path): + f = open(path, 'rb') + try: + content = f.read() + finally: + f.close() + return hashlib.md5(content).hexdigest() + + def _size(path): + return os.stat(path).st_size + + record_path = os.path.join(self.path, 'installed-files.txt') + result = [] + if os.path.exists(record_path): + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + p = os.path.normpath(os.path.join(self.path, line)) + # "./" is present as a marker between installed files + # and installation metadata files + if not os.path.exists(p): + logger.warning('Non-existent file: %s', p) + if p.endswith(('.pyc', '.pyo')): + continue + # otherwise fall through and fail + if not os.path.isdir(p): + result.append((p, _md5(p), _size(p))) + result.append((record_path, None, None)) + return result + + def list_distinfo_files(self, absolute=False): + """ + Iterates over the ``installed-files.txt`` entries and returns paths for + each line if the path is pointing to a file located in the + ``.egg-info`` directory or one of its subdirectories. + + :parameter absolute: If *absolute* is ``True``, each returned path is + transformed into a local absolute path. Otherwise the + raw value from ``installed-files.txt`` is returned. + :type absolute: boolean + :returns: iterator of paths + """ + record_path = os.path.join(self.path, 'installed-files.txt') + if os.path.exists(record_path): + skip = True + with codecs.open(record_path, 'r', encoding='utf-8') as f: + for line in f: + line = line.strip() + if line == './': + skip = False + continue + if not skip: + p = os.path.normpath(os.path.join(self.path, line)) + if p.startswith(self.path): + if absolute: + yield p + else: + yield line + + def __eq__(self, other): + return (isinstance(other, EggInfoDistribution) + and self.path == other.path) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + __hash__ = object.__hash__ + + +new_dist_class = InstalledDistribution +old_dist_class = EggInfoDistribution + + +class DependencyGraph(object): + """ + Represents a dependency graph between distributions. + + The dependency relationships are stored in an ``adjacency_list`` that maps + distributions to a list of ``(other, label)`` tuples where ``other`` + is a distribution and the edge is labeled with ``label`` (i.e. the version + specifier, if such was provided). Also, for more efficient traversal, for + every distribution ``x``, a list of predecessors is kept in + ``reverse_list[x]``. An edge from distribution ``a`` to + distribution ``b`` means that ``a`` depends on ``b``. If any missing + dependencies are found, they are stored in ``missing``, which is a + dictionary that maps distributions to a list of requirements that were not + provided by any other distributions. + """ + + def __init__(self): + self.adjacency_list = {} + self.reverse_list = {} + self.missing = {} + + def add_distribution(self, distribution): + """Add the *distribution* to the graph. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + """ + self.adjacency_list[distribution] = [] + self.reverse_list[distribution] = [] + # self.missing[distribution] = [] + + def add_edge(self, x, y, label=None): + """Add an edge from distribution *x* to distribution *y* with the given + *label*. + + :type x: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type y: :class:`distutils2.database.InstalledDistribution` or + :class:`distutils2.database.EggInfoDistribution` + :type label: ``str`` or ``None`` + """ + self.adjacency_list[x].append((y, label)) + # multiple edges are allowed, so be careful + if x not in self.reverse_list[y]: + self.reverse_list[y].append(x) + + def add_missing(self, distribution, requirement): + """ + Add a missing *requirement* for the given *distribution*. + + :type distribution: :class:`distutils2.database.InstalledDistribution` + or :class:`distutils2.database.EggInfoDistribution` + :type requirement: ``str`` + """ + logger.debug('%s missing %r', distribution, requirement) + self.missing.setdefault(distribution, []).append(requirement) + + def _repr_dist(self, dist): + return '%s %s' % (dist.name, dist.version) + + def repr_node(self, dist, level=1): + """Prints only a subgraph""" + output = [self._repr_dist(dist)] + for other, label in self.adjacency_list[dist]: + dist = self._repr_dist(other) + if label is not None: + dist = '%s [%s]' % (dist, label) + output.append(' ' * level + str(dist)) + suboutput = self.repr_node(other, level + 1) + subs = suboutput.split('\n') + output.extend(subs[1:]) + return '\n'.join(output) + + def to_dot(self, f, skip_disconnected=True): + """Writes a DOT output for the graph to the provided file *f*. + + If *skip_disconnected* is set to ``True``, then all distributions + that are not dependent on any other distribution are skipped. + + :type f: has to support ``file``-like operations + :type skip_disconnected: ``bool`` + """ + disconnected = [] + + f.write("digraph dependencies {\n") + for dist, adjs in self.adjacency_list.items(): + if len(adjs) == 0 and not skip_disconnected: + disconnected.append(dist) + for other, label in adjs: + if label is not None: + f.write('"%s" -> "%s" [label="%s"]\n' % + (dist.name, other.name, label)) + else: + f.write('"%s" -> "%s"\n' % (dist.name, other.name)) + if not skip_disconnected and len(disconnected) > 0: + f.write('subgraph disconnected {\n') + f.write('label = "Disconnected"\n') + f.write('bgcolor = red\n') + + for dist in disconnected: + f.write('"%s"' % dist.name) + f.write('\n') + f.write('}\n') + f.write('}\n') + + def topological_sort(self): + """ + Perform a topological sort of the graph. + :return: A tuple, the first element of which is a topologically sorted + list of distributions, and the second element of which is a + list of distributions that cannot be sorted because they have + circular dependencies and so form a cycle. + """ + result = [] + # Make a shallow copy of the adjacency list + alist = {} + for k, v in self.adjacency_list.items(): + alist[k] = v[:] + while True: + # See what we can remove in this run + to_remove = [] + for k, v in list(alist.items())[:]: + if not v: + to_remove.append(k) + del alist[k] + if not to_remove: + # What's left in alist (if anything) is a cycle. + break + # Remove from the adjacency list of others + for k, v in alist.items(): + alist[k] = [(d, r) for d, r in v if d not in to_remove] + logger.debug('Moving to result: %s', + ['%s (%s)' % (d.name, d.version) for d in to_remove]) + result.extend(to_remove) + return result, list(alist.keys()) + + def __repr__(self): + """Representation of the graph""" + output = [] + for dist, adjs in self.adjacency_list.items(): + output.append(self.repr_node(dist)) + return '\n'.join(output) + + +def make_graph(dists, scheme='default'): + """Makes a dependency graph from the given distributions. + + :parameter dists: a list of distributions + :type dists: list of :class:`distutils2.database.InstalledDistribution` and + :class:`distutils2.database.EggInfoDistribution` instances + :rtype: a :class:`DependencyGraph` instance + """ + scheme = get_scheme(scheme) + graph = DependencyGraph() + provided = {} # maps names to lists of (version, dist) tuples + + # first, build the graph and find out what's provided + for dist in dists: + graph.add_distribution(dist) + + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + provided.setdefault(name, []).append((version, dist)) + + # now make the edges + for dist in dists: + requires = (dist.run_requires | dist.meta_requires + | dist.build_requires | dist.dev_requires) + for req in requires: + try: + matcher = scheme.matcher(req) + except UnsupportedVersionError: + # XXX compat-mode if cannot read the version + logger.warning('could not read version %r - using name only', + req) + name = req.split()[0] + matcher = scheme.matcher(name) + + name = matcher.key # case-insensitive + + matched = False + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + graph.add_edge(dist, provider, req) + matched = True + break + if not matched: + graph.add_missing(dist, req) + return graph + + +def get_dependent_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + dependent on *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + dep = [dist] # dependent distributions + todo = graph.reverse_list[dist] # list of nodes we should inspect + + while todo: + d = todo.pop() + dep.append(d) + for succ in graph.reverse_list[d]: + if succ not in dep: + todo.append(succ) + + dep.pop(0) # remove dist from dep, was there to prevent infinite loops + return dep + + +def get_required_dists(dists, dist): + """Recursively generate a list of distributions from *dists* that are + required by *dist*. + + :param dists: a list of distributions + :param dist: a distribution, member of *dists* for which we are interested + in finding the dependencies. + """ + if dist not in dists: + raise DistlibException('given distribution %r is not a member ' + 'of the list' % dist.name) + graph = make_graph(dists) + + req = set() # required distributions + todo = graph.adjacency_list[dist] # list of nodes we should inspect + seen = set(t[0] for t in todo) # already added to todo + + while todo: + d = todo.pop()[0] + req.add(d) + pred_list = graph.adjacency_list[d] + for pred in pred_list: + d = pred[0] + if d not in req and d not in seen: + seen.add(d) + todo.append(pred) + return req + + +def make_dist(name, version, **kwargs): + """ + A convenience method for making a dist given just a name and version. + """ + summary = kwargs.pop('summary', 'Placeholder for summary') + md = Metadata(**kwargs) + md.name = name + md.version = version + md.summary = summary or 'Placeholder for summary' + return Distribution(md) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/index.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/index.py new file mode 100644 index 0000000..56cd286 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/index.py @@ -0,0 +1,508 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2023 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import hashlib +import logging +import os +import shutil +import subprocess +import tempfile +try: + from threading import Thread +except ImportError: # pragma: no cover + from dummy_threading import Thread + +from . import DistlibException +from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, + urlparse, build_opener, string_types) +from .util import zip_dir, ServerProxy + +logger = logging.getLogger(__name__) + +DEFAULT_INDEX = 'https://pypi.org/pypi' +DEFAULT_REALM = 'pypi' + + +class PackageIndex(object): + """ + This class represents a package index compatible with PyPI, the Python + Package Index. + """ + + boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' + + def __init__(self, url=None): + """ + Initialise an instance. + + :param url: The URL of the index. If not specified, the URL for PyPI is + used. + """ + self.url = url or DEFAULT_INDEX + self.read_configuration() + scheme, netloc, path, params, query, frag = urlparse(self.url) + if params or query or frag or scheme not in ('http', 'https'): + raise DistlibException('invalid repository: %s' % self.url) + self.password_handler = None + self.ssl_verifier = None + self.gpg = None + self.gpg_home = None + with open(os.devnull, 'w') as sink: + # Use gpg by default rather than gpg2, as gpg2 insists on + # prompting for passwords + for s in ('gpg', 'gpg2'): + try: + rc = subprocess.check_call([s, '--version'], stdout=sink, + stderr=sink) + if rc == 0: + self.gpg = s + break + except OSError: + pass + + def _get_pypirc_command(self): + """ + Get the distutils command for interacting with PyPI configurations. + :return: the command. + """ + from .util import _get_pypirc_command as cmd + return cmd() + + def read_configuration(self): + """ + Read the PyPI access configuration as supported by distutils. This populates + ``username``, ``password``, ``realm`` and ``url`` attributes from the + configuration. + """ + from .util import _load_pypirc + cfg = _load_pypirc(self) + self.username = cfg.get('username') + self.password = cfg.get('password') + self.realm = cfg.get('realm', 'pypi') + self.url = cfg.get('repository', self.url) + + def save_configuration(self): + """ + Save the PyPI access configuration. You must have set ``username`` and + ``password`` attributes before calling this method. + """ + self.check_credentials() + from .util import _store_pypirc + _store_pypirc(self) + + def check_credentials(self): + """ + Check that ``username`` and ``password`` have been set, and raise an + exception if not. + """ + if self.username is None or self.password is None: + raise DistlibException('username and password must be set') + pm = HTTPPasswordMgr() + _, netloc, _, _, _, _ = urlparse(self.url) + pm.add_password(self.realm, netloc, self.username, self.password) + self.password_handler = HTTPBasicAuthHandler(pm) + + def register(self, metadata): # pragma: no cover + """ + Register a distribution on PyPI, using the provided metadata. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the distribution to be + registered. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + metadata.validate() + d = metadata.todict() + d[':action'] = 'verify' + request = self.encode_request(d.items(), []) + self.send_request(request) + d[':action'] = 'submit' + request = self.encode_request(d.items(), []) + return self.send_request(request) + + def _reader(self, name, stream, outbuf): + """ + Thread runner for reading lines of from a subprocess into a buffer. + + :param name: The logical name of the stream (used for logging only). + :param stream: The stream to read from. This will typically a pipe + connected to the output stream of a subprocess. + :param outbuf: The list to append the read lines to. + """ + while True: + s = stream.readline() + if not s: + break + s = s.decode('utf-8').rstrip() + outbuf.append(s) + logger.debug('%s: %s' % (name, s)) + stream.close() + + def get_sign_command(self, filename, signer, sign_password, keystore=None): # pragma: no cover + """ + Return a suitable command for signing a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The signing command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + if sign_password is not None: + cmd.extend(['--batch', '--passphrase-fd', '0']) + td = tempfile.mkdtemp() + sf = os.path.join(td, os.path.basename(filename) + '.asc') + cmd.extend(['--detach-sign', '--armor', '--local-user', + signer, '--output', sf, filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd, sf + + def run_command(self, cmd, input_data=None): + """ + Run a command in a child process , passing it any input data specified. + + :param cmd: The command to run. + :param input_data: If specified, this must be a byte string containing + data to be sent to the child process. + :return: A tuple consisting of the subprocess' exit code, a list of + lines read from the subprocess' ``stdout``, and a list of + lines read from the subprocess' ``stderr``. + """ + kwargs = { + 'stdout': subprocess.PIPE, + 'stderr': subprocess.PIPE, + } + if input_data is not None: + kwargs['stdin'] = subprocess.PIPE + stdout = [] + stderr = [] + p = subprocess.Popen(cmd, **kwargs) + # We don't use communicate() here because we may need to + # get clever with interacting with the command + t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) + t1.start() + t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) + t2.start() + if input_data is not None: + p.stdin.write(input_data) + p.stdin.close() + + p.wait() + t1.join() + t2.join() + return p.returncode, stdout, stderr + + def sign_file(self, filename, signer, sign_password, keystore=None): # pragma: no cover + """ + Sign a file. + + :param filename: The pathname to the file to be signed. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The absolute pathname of the file where the signature is + stored. + """ + cmd, sig_file = self.get_sign_command(filename, signer, sign_password, + keystore) + rc, stdout, stderr = self.run_command(cmd, + sign_password.encode('utf-8')) + if rc != 0: + raise DistlibException('sign command failed with error ' + 'code %s' % rc) + return sig_file + + def upload_file(self, metadata, filename, signer=None, sign_password=None, + filetype='sdist', pyversion='source', keystore=None): + """ + Upload a release file to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the file to be uploaded. + :param filename: The pathname of the file to be uploaded. + :param signer: The identifier of the signer of the file. + :param sign_password: The passphrase for the signer's + private key used for signing. + :param filetype: The type of the file being uploaded. This is the + distutils command which produced that file, e.g. + ``sdist`` or ``bdist_wheel``. + :param pyversion: The version of Python which the release relates + to. For code compatible with any Python, this would + be ``source``, otherwise it would be e.g. ``3.2``. + :param keystore: The path to a directory which contains the keys + used in signing. If not specified, the instance's + ``gpg_home`` attribute is used instead. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.exists(filename): + raise DistlibException('not found: %s' % filename) + metadata.validate() + d = metadata.todict() + sig_file = None + if signer: + if not self.gpg: + logger.warning('no signing program available - not signed') + else: + sig_file = self.sign_file(filename, signer, sign_password, + keystore) + with open(filename, 'rb') as f: + file_data = f.read() + md5_digest = hashlib.md5(file_data).hexdigest() + sha256_digest = hashlib.sha256(file_data).hexdigest() + d.update({ + ':action': 'file_upload', + 'protocol_version': '1', + 'filetype': filetype, + 'pyversion': pyversion, + 'md5_digest': md5_digest, + 'sha256_digest': sha256_digest, + }) + files = [('content', os.path.basename(filename), file_data)] + if sig_file: + with open(sig_file, 'rb') as f: + sig_data = f.read() + files.append(('gpg_signature', os.path.basename(sig_file), + sig_data)) + shutil.rmtree(os.path.dirname(sig_file)) + request = self.encode_request(d.items(), files) + return self.send_request(request) + + def upload_documentation(self, metadata, doc_dir): # pragma: no cover + """ + Upload documentation to the index. + + :param metadata: A :class:`Metadata` instance defining at least a name + and version number for the documentation to be + uploaded. + :param doc_dir: The pathname of the directory which contains the + documentation. This should be the directory that + contains the ``index.html`` for the documentation. + :return: The HTTP response received from PyPI upon submission of the + request. + """ + self.check_credentials() + if not os.path.isdir(doc_dir): + raise DistlibException('not a directory: %r' % doc_dir) + fn = os.path.join(doc_dir, 'index.html') + if not os.path.exists(fn): + raise DistlibException('not found: %r' % fn) + metadata.validate() + name, version = metadata.name, metadata.version + zip_data = zip_dir(doc_dir).getvalue() + fields = [(':action', 'doc_upload'), + ('name', name), ('version', version)] + files = [('content', name, zip_data)] + request = self.encode_request(fields, files) + return self.send_request(request) + + def get_verify_command(self, signature_filename, data_filename, + keystore=None): + """ + Return a suitable command for verifying a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: The verifying command as a list suitable to be + passed to :class:`subprocess.Popen`. + """ + cmd = [self.gpg, '--status-fd', '2', '--no-tty'] + if keystore is None: + keystore = self.gpg_home + if keystore: + cmd.extend(['--homedir', keystore]) + cmd.extend(['--verify', signature_filename, data_filename]) + logger.debug('invoking: %s', ' '.join(cmd)) + return cmd + + def verify_signature(self, signature_filename, data_filename, + keystore=None): + """ + Verify a signature for a file. + + :param signature_filename: The pathname to the file containing the + signature. + :param data_filename: The pathname to the file containing the + signed data. + :param keystore: The path to a directory which contains the keys + used in verification. If not specified, the + instance's ``gpg_home`` attribute is used instead. + :return: True if the signature was verified, else False. + """ + if not self.gpg: + raise DistlibException('verification unavailable because gpg ' + 'unavailable') + cmd = self.get_verify_command(signature_filename, data_filename, + keystore) + rc, stdout, stderr = self.run_command(cmd) + if rc not in (0, 1): + raise DistlibException('verify command failed with error code %s' % rc) + return rc == 0 + + def download_file(self, url, destfile, digest=None, reporthook=None): + """ + This is a convenience method for downloading a file from an URL. + Normally, this will be a file from the index, though currently + no check is made for this (i.e. a file can be downloaded from + anywhere). + + The method is just like the :func:`urlretrieve` function in the + standard library, except that it allows digest computation to be + done during download and checking that the downloaded data + matched any expected value. + + :param url: The URL of the file to be downloaded (assumed to be + available via an HTTP GET request). + :param destfile: The pathname where the downloaded file is to be + saved. + :param digest: If specified, this must be a (hasher, value) + tuple, where hasher is the algorithm used (e.g. + ``'md5'``) and ``value`` is the expected value. + :param reporthook: The same as for :func:`urlretrieve` in the + standard library. + """ + if digest is None: + digester = None + logger.debug('No digest specified') + else: + if isinstance(digest, (list, tuple)): + hasher, digest = digest + else: + hasher = 'md5' + digester = getattr(hashlib, hasher)() + logger.debug('Digest specified: %s' % digest) + # The following code is equivalent to urlretrieve. + # We need to do it this way so that we can compute the + # digest of the file as we go. + with open(destfile, 'wb') as dfp: + # addinfourl is not a context manager on 2.x + # so we have to use try/finally + sfp = self.send_request(Request(url)) + try: + headers = sfp.info() + blocksize = 8192 + size = -1 + read = 0 + blocknum = 0 + if "content-length" in headers: + size = int(headers["Content-Length"]) + if reporthook: + reporthook(blocknum, blocksize, size) + while True: + block = sfp.read(blocksize) + if not block: + break + read += len(block) + dfp.write(block) + if digester: + digester.update(block) + blocknum += 1 + if reporthook: + reporthook(blocknum, blocksize, size) + finally: + sfp.close() + + # check that we got the whole file, if we can + if size >= 0 and read < size: + raise DistlibException( + 'retrieval incomplete: got only %d out of %d bytes' + % (read, size)) + # if we have a digest, it must match. + if digester: + actual = digester.hexdigest() + if digest != actual: + raise DistlibException('%s digest mismatch for %s: expected ' + '%s, got %s' % (hasher, destfile, + digest, actual)) + logger.debug('Digest verified: %s', digest) + + def send_request(self, req): + """ + Send a standard library :class:`Request` to PyPI and return its + response. + + :param req: The request to send. + :return: The HTTP response from PyPI (a standard library HTTPResponse). + """ + handlers = [] + if self.password_handler: + handlers.append(self.password_handler) + if self.ssl_verifier: + handlers.append(self.ssl_verifier) + opener = build_opener(*handlers) + return opener.open(req) + + def encode_request(self, fields, files): + """ + Encode fields and files for posting to an HTTP server. + + :param fields: The fields to send as a list of (fieldname, value) + tuples. + :param files: The files to send as a list of (fieldname, filename, + file_bytes) tuple. + """ + # Adapted from packaging, which in turn was adapted from + # http://code.activestate.com/recipes/146306 + + parts = [] + boundary = self.boundary + for k, values in fields: + if not isinstance(values, (list, tuple)): + values = [values] + + for v in values: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"' % + k).encode('utf-8'), + b'', + v.encode('utf-8'))) + for key, filename, value in files: + parts.extend(( + b'--' + boundary, + ('Content-Disposition: form-data; name="%s"; filename="%s"' % + (key, filename)).encode('utf-8'), + b'', + value)) + + parts.extend((b'--' + boundary + b'--', b'')) + + body = b'\r\n'.join(parts) + ct = b'multipart/form-data; boundary=' + boundary + headers = { + 'Content-type': ct, + 'Content-length': str(len(body)) + } + return Request(self.url, body, headers) + + def search(self, terms, operator=None): # pragma: no cover + if isinstance(terms, string_types): + terms = {'name': terms} + rpc_proxy = ServerProxy(self.url, timeout=3.0) + try: + return rpc_proxy.search(terms, operator or 'and') + finally: + rpc_proxy('close')() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/locators.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/locators.py new file mode 100644 index 0000000..f9f0788 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/locators.py @@ -0,0 +1,1303 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2023 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# + +import gzip +from io import BytesIO +import json +import logging +import os +import posixpath +import re +try: + import threading +except ImportError: # pragma: no cover + import dummy_threading as threading +import zlib + +from . import DistlibException +from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, + queue, quote, unescape, build_opener, + HTTPRedirectHandler as BaseRedirectHandler, text_type, + Request, HTTPError, URLError) +from .database import Distribution, DistributionPath, make_dist +from .metadata import Metadata, MetadataInvalidError +from .util import (cached_property, ensure_slash, split_filename, get_project_data, + parse_requirement, parse_name_and_version, ServerProxy, + normalize_name) +from .version import get_scheme, UnsupportedVersionError +from .wheel import Wheel, is_compatible + +logger = logging.getLogger(__name__) + +HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)') +CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) +HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') +DEFAULT_INDEX = 'https://pypi.org/pypi' + + +def get_all_distribution_names(url=None): + """ + Return all distribution names known by an index. + :param url: The URL of the index. + :return: A list of all known distribution names. + """ + if url is None: + url = DEFAULT_INDEX + client = ServerProxy(url, timeout=3.0) + try: + return client.list_packages() + finally: + client('close')() + + +class RedirectHandler(BaseRedirectHandler): + """ + A class to work around a bug in some Python 3.2.x releases. + """ + # There's a bug in the base version for some 3.2.x + # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header + # returns e.g. /abc, it bails because it says the scheme '' + # is bogus, when actually it should use the request's + # URL for the scheme. See Python issue #13696. + def http_error_302(self, req, fp, code, msg, headers): + # Some servers (incorrectly) return multiple Location headers + # (so probably same goes for URI). Use first header. + newurl = None + for key in ('location', 'uri'): + if key in headers: + newurl = headers[key] + break + if newurl is None: # pragma: no cover + return + urlparts = urlparse(newurl) + if urlparts.scheme == '': + newurl = urljoin(req.get_full_url(), newurl) + if hasattr(headers, 'replace_header'): + headers.replace_header(key, newurl) + else: + headers[key] = newurl + return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, + headers) + + http_error_301 = http_error_303 = http_error_307 = http_error_302 + + +class Locator(object): + """ + A base class for locators - things that locate distributions. + """ + source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') + binary_extensions = ('.egg', '.exe', '.whl') + excluded_extensions = ('.pdf',) + + # A list of tags indicating which wheels you want to match. The default + # value of None matches against the tags compatible with the running + # Python. If you want to match other values, set wheel_tags on a locator + # instance to a list of tuples (pyver, abi, arch) which you want to match. + wheel_tags = None + + downloadable_extensions = source_extensions + ('.whl',) + + def __init__(self, scheme='default'): + """ + Initialise an instance. + :param scheme: Because locators look for most recent versions, they + need to know the version scheme to use. This specifies + the current PEP-recommended scheme - use ``'legacy'`` + if you need to support existing distributions on PyPI. + """ + self._cache = {} + self.scheme = scheme + # Because of bugs in some of the handlers on some of the platforms, + # we use our own opener rather than just using urlopen. + self.opener = build_opener(RedirectHandler()) + # If get_project() is called from locate(), the matcher instance + # is set from the requirement passed to locate(). See issue #18 for + # why this can be useful to know. + self.matcher = None + self.errors = queue.Queue() + + def get_errors(self): + """ + Return any errors which have occurred. + """ + result = [] + while not self.errors.empty(): # pragma: no cover + try: + e = self.errors.get(False) + result.append(e) + except self.errors.Empty: + continue + self.errors.task_done() + return result + + def clear_errors(self): + """ + Clear any errors which may have been logged. + """ + # Just get the errors and throw them away + self.get_errors() + + def clear_cache(self): + self._cache.clear() + + def _get_scheme(self): + return self._scheme + + def _set_scheme(self, value): + self._scheme = value + + scheme = property(_get_scheme, _set_scheme) + + def _get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This should be implemented in subclasses. + + If called from a locate() request, self.matcher will be set to a + matcher for the requirement to satisfy, otherwise it will be None. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Please implement in the subclass') + + def get_project(self, name): + """ + For a given project, get a dictionary mapping available versions to Distribution + instances. + + This calls _get_project to do all the work, and just implements a caching layer on top. + """ + if self._cache is None: # pragma: no cover + result = self._get_project(name) + elif name in self._cache: + result = self._cache[name] + else: + self.clear_errors() + result = self._get_project(name) + self._cache[name] = result + return result + + def score_url(self, url): + """ + Give an url a score which can be used to choose preferred URLs + for a given project release. + """ + t = urlparse(url) + basename = posixpath.basename(t.path) + compatible = True + is_wheel = basename.endswith('.whl') + is_downloadable = basename.endswith(self.downloadable_extensions) + if is_wheel: + compatible = is_compatible(Wheel(basename), self.wheel_tags) + return (t.scheme == 'https', 'pypi.org' in t.netloc, + is_downloadable, is_wheel, compatible, basename) + + def prefer_url(self, url1, url2): + """ + Choose one of two URLs where both are candidates for distribution + archives for the same version of a distribution (for example, + .tar.gz vs. zip). + + The current implementation favours https:// URLs over http://, archives + from PyPI over those from other locations, wheel compatibility (if a + wheel) and then the archive name. + """ + result = url2 + if url1: + s1 = self.score_url(url1) + s2 = self.score_url(url2) + if s1 > s2: + result = url1 + if result != url2: + logger.debug('Not replacing %r with %r', url1, url2) + else: + logger.debug('Replacing %r with %r', url1, url2) + return result + + def split_filename(self, filename, project_name): + """ + Attempt to split a filename in project name, version and Python version. + """ + return split_filename(filename, project_name) + + def convert_url_to_download_info(self, url, project_name): + """ + See if a URL is a candidate for a download URL for a project (the URL + has typically been scraped from an HTML page). + + If it is, a dictionary is returned with keys "name", "version", + "filename" and "url"; otherwise, None is returned. + """ + def same_project(name1, name2): + return normalize_name(name1) == normalize_name(name2) + + result = None + scheme, netloc, path, params, query, frag = urlparse(url) + if frag.lower().startswith('egg='): # pragma: no cover + logger.debug('%s: version hint in fragment: %r', + project_name, frag) + m = HASHER_HASH.match(frag) + if m: + algo, digest = m.groups() + else: + algo, digest = None, None + origpath = path + if path and path[-1] == '/': # pragma: no cover + path = path[:-1] + if path.endswith('.whl'): + try: + wheel = Wheel(path) + if not is_compatible(wheel, self.wheel_tags): + logger.debug('Wheel not compatible: %s', path) + else: + if project_name is None: + include = True + else: + include = same_project(wheel.name, project_name) + if include: + result = { + 'name': wheel.name, + 'version': wheel.version, + 'filename': wheel.filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + 'python-version': ', '.join( + ['.'.join(list(v[2:])) for v in wheel.pyver]), + } + except Exception: # pragma: no cover + logger.warning('invalid path for wheel: %s', path) + elif not path.endswith(self.downloadable_extensions): # pragma: no cover + logger.debug('Not downloadable: %s', path) + else: # downloadable extension + path = filename = posixpath.basename(path) + for ext in self.downloadable_extensions: + if path.endswith(ext): + path = path[:-len(ext)] + t = self.split_filename(path, project_name) + if not t: # pragma: no cover + logger.debug('No match for project/version: %s', path) + else: + name, version, pyver = t + if not project_name or same_project(project_name, name): + result = { + 'name': name, + 'version': version, + 'filename': filename, + 'url': urlunparse((scheme, netloc, origpath, + params, query, '')), + } + if pyver: # pragma: no cover + result['python-version'] = pyver + break + if result and algo: + result['%s_digest' % algo] = digest + return result + + def _get_digest(self, info): + """ + Get a digest from a dictionary by looking at a "digests" dictionary + or keys of the form 'algo_digest'. + + Returns a 2-tuple (algo, digest) if found, else None. Currently + looks only for SHA256, then MD5. + """ + result = None + if 'digests' in info: + digests = info['digests'] + for algo in ('sha256', 'md5'): + if algo in digests: + result = (algo, digests[algo]) + break + if not result: + for algo in ('sha256', 'md5'): + key = '%s_digest' % algo + if key in info: + result = (algo, info[key]) + break + return result + + def _update_version_data(self, result, info): + """ + Update a result dictionary (the final result from _get_project) with a + dictionary for a specific version, which typically holds information + gleaned from a filename or URL for an archive for the distribution. + """ + name = info.pop('name') + version = info.pop('version') + if version in result: + dist = result[version] + md = dist.metadata + else: + dist = make_dist(name, version, scheme=self.scheme) + md = dist.metadata + dist.digest = digest = self._get_digest(info) + url = info['url'] + result['digests'][url] = digest + if md.source_url != info['url']: + md.source_url = self.prefer_url(md.source_url, url) + result['urls'].setdefault(version, set()).add(url) + dist.locator = self + result[version] = dist + + def locate(self, requirement, prereleases=False): + """ + Find the most recent distribution which matches the given + requirement. + + :param requirement: A requirement of the form 'foo (1.0)' or perhaps + 'foo (>= 1.0, < 2.0, != 1.3)' + :param prereleases: If ``True``, allow pre-release versions + to be located. Otherwise, pre-release versions + are not returned. + :return: A :class:`Distribution` instance, or ``None`` if no such + distribution could be located. + """ + result = None + r = parse_requirement(requirement) + if r is None: # pragma: no cover + raise DistlibException('Not a valid requirement: %r' % requirement) + scheme = get_scheme(self.scheme) + self.matcher = matcher = scheme.matcher(r.requirement) + logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) + versions = self.get_project(r.name) + if len(versions) > 2: # urls and digests keys are present + # sometimes, versions are invalid + slist = [] + vcls = matcher.version_class + for k in versions: + if k in ('urls', 'digests'): + continue + try: + if not matcher.match(k): + pass # logger.debug('%s did not match %r', matcher, k) + else: + if prereleases or not vcls(k).is_prerelease: + slist.append(k) + except Exception: # pragma: no cover + logger.warning('error matching %s with %r', matcher, k) + pass # slist.append(k) + if len(slist) > 1: + slist = sorted(slist, key=scheme.key) + if slist: + logger.debug('sorted list: %s', slist) + version = slist[-1] + result = versions[version] + if result: + if r.extras: + result.extras = r.extras + result.download_urls = versions.get('urls', {}).get(version, set()) + d = {} + sd = versions.get('digests', {}) + for url in result.download_urls: + if url in sd: # pragma: no cover + d[url] = sd[url] + result.digests = d + self.matcher = None + return result + + +class PyPIRPCLocator(Locator): + """ + This locator uses XML-RPC to locate distributions. It therefore + cannot be used with simple mirrors (that only mirror file content). + """ + def __init__(self, url, **kwargs): + """ + Initialise an instance. + + :param url: The URL to use for XML-RPC. + :param kwargs: Passed to the superclass constructor. + """ + super(PyPIRPCLocator, self).__init__(**kwargs) + self.base_url = url + self.client = ServerProxy(url, timeout=3.0) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + return set(self.client.list_packages()) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + versions = self.client.package_releases(name, True) + for v in versions: + urls = self.client.release_urls(name, v) + data = self.client.release_data(name, v) + metadata = Metadata(scheme=self.scheme) + metadata.name = data['name'] + metadata.version = data['version'] + metadata.license = data.get('license') + metadata.keywords = data.get('keywords', []) + metadata.summary = data.get('summary') + dist = Distribution(metadata) + if urls: + info = urls[0] + metadata.source_url = info['url'] + dist.digest = self._get_digest(info) + dist.locator = self + result[v] = dist + for info in urls: + url = info['url'] + digest = self._get_digest(info) + result['urls'].setdefault(v, set()).add(url) + result['digests'][url] = digest + return result + + +class PyPIJSONLocator(Locator): + """ + This locator uses PyPI's JSON interface. It's very limited in functionality + and probably not worth using. + """ + def __init__(self, url, **kwargs): + super(PyPIJSONLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + url = urljoin(self.base_url, '%s/json' % quote(name)) + try: + resp = self.opener.open(url) + data = resp.read().decode() # for now + d = json.loads(data) + md = Metadata(scheme=self.scheme) + data = d['info'] + md.name = data['name'] + md.version = data['version'] + md.license = data.get('license') + md.keywords = data.get('keywords', []) + md.summary = data.get('summary') + dist = Distribution(md) + dist.locator = self + # urls = d['urls'] + result[md.version] = dist + for info in d['urls']: + url = info['url'] + dist.download_urls.add(url) + dist.digests[url] = self._get_digest(info) + result['urls'].setdefault(md.version, set()).add(url) + result['digests'][url] = self._get_digest(info) + # Now get other releases + for version, infos in d['releases'].items(): + if version == md.version: + continue # already done + omd = Metadata(scheme=self.scheme) + omd.name = md.name + omd.version = version + odist = Distribution(omd) + odist.locator = self + result[version] = odist + for info in infos: + url = info['url'] + odist.download_urls.add(url) + odist.digests[url] = self._get_digest(info) + result['urls'].setdefault(version, set()).add(url) + result['digests'][url] = self._get_digest(info) +# for info in urls: +# md.source_url = info['url'] +# dist.digest = self._get_digest(info) +# dist.locator = self +# for info in urls: +# url = info['url'] +# result['urls'].setdefault(md.version, set()).add(url) +# result['digests'][url] = self._get_digest(info) + except Exception as e: + self.errors.put(text_type(e)) + logger.exception('JSON fetch failed: %s', e) + return result + + +class Page(object): + """ + This class represents a scraped HTML page. + """ + # The following slightly hairy-looking regex just looks for the contents of + # an anchor link, which has an attribute "href" either immediately preceded + # or immediately followed by a "rel" attribute. The attribute values can be + # declared with double quotes, single quotes or no quotes - which leads to + # the length of the expression. + _href = re.compile(""" +(rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*))\\s+)? +href\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)) +(\\s+rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)))? +""", re.I | re.S | re.X) + _base = re.compile(r"""]+)""", re.I | re.S) + + def __init__(self, data, url): + """ + Initialise an instance with the Unicode page contents and the URL they + came from. + """ + self.data = data + self.base_url = self.url = url + m = self._base.search(self.data) + if m: + self.base_url = m.group(1) + + _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) + + @cached_property + def links(self): + """ + Return the URLs of all the links on a page together with information + about their "rel" attribute, for determining which ones to treat as + downloads and which ones to queue for further scraping. + """ + def clean(url): + "Tidy up an URL." + scheme, netloc, path, params, query, frag = urlparse(url) + return urlunparse((scheme, netloc, quote(path), + params, query, frag)) + + result = set() + for match in self._href.finditer(self.data): + d = match.groupdict('') + rel = (d['rel1'] or d['rel2'] or d['rel3'] or + d['rel4'] or d['rel5'] or d['rel6']) + url = d['url1'] or d['url2'] or d['url3'] + url = urljoin(self.base_url, url) + url = unescape(url) + url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) + result.add((url, rel)) + # We sort the result, hoping to bring the most recent versions + # to the front + result = sorted(result, key=lambda t: t[0], reverse=True) + return result + + +class SimpleScrapingLocator(Locator): + """ + A locator which scrapes HTML pages to locate downloads for a distribution. + This runs multiple threads to do the I/O; performance is at least as good + as pip's PackageFinder, which works in an analogous fashion. + """ + + # These are used to deal with various Content-Encoding schemes. + decoders = { + 'deflate': zlib.decompress, + 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(b)).read(), + 'none': lambda b: b, + } + + def __init__(self, url, timeout=None, num_workers=10, **kwargs): + """ + Initialise an instance. + :param url: The root URL to use for scraping. + :param timeout: The timeout, in seconds, to be applied to requests. + This defaults to ``None`` (no timeout specified). + :param num_workers: The number of worker threads you want to do I/O, + This defaults to 10. + :param kwargs: Passed to the superclass. + """ + super(SimpleScrapingLocator, self).__init__(**kwargs) + self.base_url = ensure_slash(url) + self.timeout = timeout + self._page_cache = {} + self._seen = set() + self._to_fetch = queue.Queue() + self._bad_hosts = set() + self.skip_externals = False + self.num_workers = num_workers + self._lock = threading.RLock() + # See issue #45: we need to be resilient when the locator is used + # in a thread, e.g. with concurrent.futures. We can't use self._lock + # as it is for coordinating our internal threads - the ones created + # in _prepare_threads. + self._gplock = threading.RLock() + self.platform_check = False # See issue #112 + + def _prepare_threads(self): + """ + Threads are created only when get_project is called, and terminate + before it returns. They are there primarily to parallelise I/O (i.e. + fetching web pages). + """ + self._threads = [] + for i in range(self.num_workers): + t = threading.Thread(target=self._fetch) + t.daemon = True + t.start() + self._threads.append(t) + + def _wait_threads(self): + """ + Tell all the threads to terminate (by sending a sentinel value) and + wait for them to do so. + """ + # Note that you need two loops, since you can't say which + # thread will get each sentinel + for t in self._threads: + self._to_fetch.put(None) # sentinel + for t in self._threads: + t.join() + self._threads = [] + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + with self._gplock: + self.result = result + self.project_name = name + url = urljoin(self.base_url, '%s/' % quote(name)) + self._seen.clear() + self._page_cache.clear() + self._prepare_threads() + try: + logger.debug('Queueing %s', url) + self._to_fetch.put(url) + self._to_fetch.join() + finally: + self._wait_threads() + del self.result + return result + + platform_dependent = re.compile(r'\b(linux_(i\d86|x86_64|arm\w+)|' + r'win(32|_amd64)|macosx_?\d+)\b', re.I) + + def _is_platform_dependent(self, url): + """ + Does an URL refer to a platform-specific download? + """ + return self.platform_dependent.search(url) + + def _process_download(self, url): + """ + See if an URL is a suitable download for a project. + + If it is, register information in the result dictionary (for + _get_project) about the specific version it's for. + + Note that the return value isn't actually used other than as a boolean + value. + """ + if self.platform_check and self._is_platform_dependent(url): + info = None + else: + info = self.convert_url_to_download_info(url, self.project_name) + logger.debug('process_download: %s -> %s', url, info) + if info: + with self._lock: # needed because self.result is shared + self._update_version_data(self.result, info) + return info + + def _should_queue(self, link, referrer, rel): + """ + Determine whether a link URL from a referring page and with a + particular "rel" attribute should be queued for scraping. + """ + scheme, netloc, path, _, _, _ = urlparse(link) + if path.endswith(self.source_extensions + self.binary_extensions + + self.excluded_extensions): + result = False + elif self.skip_externals and not link.startswith(self.base_url): + result = False + elif not referrer.startswith(self.base_url): + result = False + elif rel not in ('homepage', 'download'): + result = False + elif scheme not in ('http', 'https', 'ftp'): + result = False + elif self._is_platform_dependent(link): + result = False + else: + host = netloc.split(':', 1)[0] + if host.lower() == 'localhost': + result = False + else: + result = True + logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, + referrer, result) + return result + + def _fetch(self): + """ + Get a URL to fetch from the work queue, get the HTML page, examine its + links for download candidates and candidates for further scraping. + + This is a handy method to run in a thread. + """ + while True: + url = self._to_fetch.get() + try: + if url: + page = self.get_page(url) + if page is None: # e.g. after an error + continue + for link, rel in page.links: + if link not in self._seen: + try: + self._seen.add(link) + if (not self._process_download(link) and + self._should_queue(link, url, rel)): + logger.debug('Queueing %s from %s', link, url) + self._to_fetch.put(link) + except MetadataInvalidError: # e.g. invalid versions + pass + except Exception as e: # pragma: no cover + self.errors.put(text_type(e)) + finally: + # always do this, to avoid hangs :-) + self._to_fetch.task_done() + if not url: + # logger.debug('Sentinel seen, quitting.') + break + + def get_page(self, url): + """ + Get the HTML for an URL, possibly from an in-memory cache. + + XXX TODO Note: this cache is never actually cleared. It's assumed that + the data won't get stale over the lifetime of a locator instance (not + necessarily true for the default_locator). + """ + # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api + scheme, netloc, path, _, _, _ = urlparse(url) + if scheme == 'file' and os.path.isdir(url2pathname(path)): + url = urljoin(ensure_slash(url), 'index.html') + + if url in self._page_cache: + result = self._page_cache[url] + logger.debug('Returning %s from cache: %s', url, result) + else: + host = netloc.split(':', 1)[0] + result = None + if host in self._bad_hosts: + logger.debug('Skipping %s due to bad host %s', url, host) + else: + req = Request(url, headers={'Accept-encoding': 'identity'}) + try: + logger.debug('Fetching %s', url) + resp = self.opener.open(req, timeout=self.timeout) + logger.debug('Fetched %s', url) + headers = resp.info() + content_type = headers.get('Content-Type', '') + if HTML_CONTENT_TYPE.match(content_type): + final_url = resp.geturl() + data = resp.read() + encoding = headers.get('Content-Encoding') + if encoding: + decoder = self.decoders[encoding] # fail if not found + data = decoder(data) + encoding = 'utf-8' + m = CHARSET.search(content_type) + if m: + encoding = m.group(1) + try: + data = data.decode(encoding) + except UnicodeError: # pragma: no cover + data = data.decode('latin-1') # fallback + result = Page(data, final_url) + self._page_cache[final_url] = result + except HTTPError as e: + if e.code != 404: + logger.exception('Fetch failed: %s: %s', url, e) + except URLError as e: # pragma: no cover + logger.exception('Fetch failed: %s: %s', url, e) + with self._lock: + self._bad_hosts.add(host) + except Exception as e: # pragma: no cover + logger.exception('Fetch failed: %s: %s', url, e) + finally: + self._page_cache[url] = result # even if None (failure) + return result + + _distname_re = re.compile(']*>([^<]+)<') + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + page = self.get_page(self.base_url) + if not page: + raise DistlibException('Unable to get %s' % self.base_url) + for match in self._distname_re.finditer(page.data): + result.add(match.group(1)) + return result + + +class DirectoryLocator(Locator): + """ + This class locates distributions in a directory tree. + """ + + def __init__(self, path, **kwargs): + """ + Initialise an instance. + :param path: The root of the directory tree to search. + :param kwargs: Passed to the superclass constructor, + except for: + * recursive - if True (the default), subdirectories are + recursed into. If False, only the top-level directory + is searched, + """ + self.recursive = kwargs.pop('recursive', True) + super(DirectoryLocator, self).__init__(**kwargs) + path = os.path.abspath(path) + if not os.path.isdir(path): # pragma: no cover + raise DistlibException('Not a directory: %r' % path) + self.base_dir = path + + def should_include(self, filename, parent): + """ + Should a filename be considered as a candidate for a distribution + archive? As well as the filename, the directory which contains it + is provided, though not used by the current implementation. + """ + return filename.endswith(self.downloadable_extensions) + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, name) + if info: + self._update_version_data(result, info) + if not self.recursive: + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for root, dirs, files in os.walk(self.base_dir): + for fn in files: + if self.should_include(fn, root): + fn = os.path.join(root, fn) + url = urlunparse(('file', '', + pathname2url(os.path.abspath(fn)), + '', '', '')) + info = self.convert_url_to_download_info(url, None) + if info: + result.add(info['name']) + if not self.recursive: + break + return result + + +class JSONLocator(Locator): + """ + This locator uses special extended metadata (not available on PyPI) and is + the basis of performant dependency resolution in distlib. Other locators + require archive downloads before dependencies can be determined! As you + might imagine, that can be slow. + """ + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + raise NotImplementedError('Not available from this locator') + + def _get_project(self, name): + result = {'urls': {}, 'digests': {}} + data = get_project_data(name) + if data: + for info in data.get('files', []): + if info['ptype'] != 'sdist' or info['pyversion'] != 'source': + continue + # We don't store summary in project metadata as it makes + # the data bigger for no benefit during dependency + # resolution + dist = make_dist(data['name'], info['version'], + summary=data.get('summary', + 'Placeholder for summary'), + scheme=self.scheme) + md = dist.metadata + md.source_url = info['url'] + # TODO SHA256 digest + if 'digest' in info and info['digest']: + dist.digest = ('md5', info['digest']) + md.dependencies = info.get('requirements', {}) + dist.exports = info.get('exports', {}) + result[dist.version] = dist + result['urls'].setdefault(dist.version, set()).add(info['url']) + return result + + +class DistPathLocator(Locator): + """ + This locator finds installed distributions in a path. It can be useful for + adding to an :class:`AggregatingLocator`. + """ + def __init__(self, distpath, **kwargs): + """ + Initialise an instance. + + :param distpath: A :class:`DistributionPath` instance to search. + """ + super(DistPathLocator, self).__init__(**kwargs) + assert isinstance(distpath, DistributionPath) + self.distpath = distpath + + def _get_project(self, name): + dist = self.distpath.get_distribution(name) + if dist is None: + result = {'urls': {}, 'digests': {}} + else: + result = { + dist.version: dist, + 'urls': {dist.version: set([dist.source_url])}, + 'digests': {dist.version: set([None])} + } + return result + + +class AggregatingLocator(Locator): + """ + This class allows you to chain and/or merge a list of locators. + """ + def __init__(self, *locators, **kwargs): + """ + Initialise an instance. + + :param locators: The list of locators to search. + :param kwargs: Passed to the superclass constructor, + except for: + * merge - if False (the default), the first successful + search from any of the locators is returned. If True, + the results from all locators are merged (this can be + slow). + """ + self.merge = kwargs.pop('merge', False) + self.locators = locators + super(AggregatingLocator, self).__init__(**kwargs) + + def clear_cache(self): + super(AggregatingLocator, self).clear_cache() + for locator in self.locators: + locator.clear_cache() + + def _set_scheme(self, value): + self._scheme = value + for locator in self.locators: + locator.scheme = value + + scheme = property(Locator.scheme.fget, _set_scheme) + + def _get_project(self, name): + result = {} + for locator in self.locators: + d = locator.get_project(name) + if d: + if self.merge: + files = result.get('urls', {}) + digests = result.get('digests', {}) + # next line could overwrite result['urls'], result['digests'] + result.update(d) + df = result.get('urls') + if files and df: + for k, v in files.items(): + if k in df: + df[k] |= v + else: + df[k] = v + dd = result.get('digests') + if digests and dd: + dd.update(digests) + else: + # See issue #18. If any dists are found and we're looking + # for specific constraints, we only return something if + # a match is found. For example, if a DirectoryLocator + # returns just foo (1.0) while we're looking for + # foo (>= 2.0), we'll pretend there was nothing there so + # that subsequent locators can be queried. Otherwise we + # would just return foo (1.0) which would then lead to a + # failure to find foo (>= 2.0), because other locators + # weren't searched. Note that this only matters when + # merge=False. + if self.matcher is None: + found = True + else: + found = False + for k in d: + if self.matcher.match(k): + found = True + break + if found: + result = d + break + return result + + def get_distribution_names(self): + """ + Return all the distribution names known to this locator. + """ + result = set() + for locator in self.locators: + try: + result |= locator.get_distribution_names() + except NotImplementedError: + pass + return result + + +# We use a legacy scheme simply because most of the dists on PyPI use legacy +# versions which don't conform to PEP 440. +default_locator = AggregatingLocator( + # JSONLocator(), # don't use as PEP 426 is withdrawn + SimpleScrapingLocator('https://pypi.org/simple/', + timeout=3.0), + scheme='legacy') + +locate = default_locator.locate + + +class DependencyFinder(object): + """ + Locate dependencies for distributions. + """ + + def __init__(self, locator=None): + """ + Initialise an instance, using the specified locator + to locate distributions. + """ + self.locator = locator or default_locator + self.scheme = get_scheme(self.locator.scheme) + + def add_distribution(self, dist): + """ + Add a distribution to the finder. This will update internal information + about who provides what. + :param dist: The distribution to add. + """ + logger.debug('adding distribution %s', dist) + name = dist.key + self.dists_by_name[name] = dist + self.dists[(name, dist.version)] = dist + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Add to provided: %s, %s, %s', name, version, dist) + self.provided.setdefault(name, set()).add((version, dist)) + + def remove_distribution(self, dist): + """ + Remove a distribution from the finder. This will update internal + information about who provides what. + :param dist: The distribution to remove. + """ + logger.debug('removing distribution %s', dist) + name = dist.key + del self.dists_by_name[name] + del self.dists[(name, dist.version)] + for p in dist.provides: + name, version = parse_name_and_version(p) + logger.debug('Remove from provided: %s, %s, %s', name, version, dist) + s = self.provided[name] + s.remove((version, dist)) + if not s: + del self.provided[name] + + def get_matcher(self, reqt): + """ + Get a version matcher for a requirement. + :param reqt: The requirement + :type reqt: str + :return: A version matcher (an instance of + :class:`distlib.version.Matcher`). + """ + try: + matcher = self.scheme.matcher(reqt) + except UnsupportedVersionError: # pragma: no cover + # XXX compat-mode if cannot read the version + name = reqt.split()[0] + matcher = self.scheme.matcher(name) + return matcher + + def find_providers(self, reqt): + """ + Find the distributions which can fulfill a requirement. + + :param reqt: The requirement. + :type reqt: str + :return: A set of distribution which can fulfill the requirement. + """ + matcher = self.get_matcher(reqt) + name = matcher.key # case-insensitive + result = set() + provided = self.provided + if name in provided: + for version, provider in provided[name]: + try: + match = matcher.match(version) + except UnsupportedVersionError: + match = False + + if match: + result.add(provider) + break + return result + + def try_to_replace(self, provider, other, problems): + """ + Attempt to replace one provider with another. This is typically used + when resolving dependencies from multiple sources, e.g. A requires + (B >= 1.0) while C requires (B >= 1.1). + + For successful replacement, ``provider`` must meet all the requirements + which ``other`` fulfills. + + :param provider: The provider we are trying to replace with. + :param other: The provider we're trying to replace. + :param problems: If False is returned, this will contain what + problems prevented replacement. This is currently + a tuple of the literal string 'cantreplace', + ``provider``, ``other`` and the set of requirements + that ``provider`` couldn't fulfill. + :return: True if we can replace ``other`` with ``provider``, else + False. + """ + rlist = self.reqts[other] + unmatched = set() + for s in rlist: + matcher = self.get_matcher(s) + if not matcher.match(provider.version): + unmatched.add(s) + if unmatched: + # can't replace other with provider + problems.add(('cantreplace', provider, other, + frozenset(unmatched))) + result = False + else: + # can replace other with provider + self.remove_distribution(other) + del self.reqts[other] + for s in rlist: + self.reqts.setdefault(provider, set()).add(s) + self.add_distribution(provider) + result = True + return result + + def find(self, requirement, meta_extras=None, prereleases=False): + """ + Find a distribution and all distributions it depends on. + + :param requirement: The requirement specifying the distribution to + find, or a Distribution instance. + :param meta_extras: A list of meta extras such as :test:, :build: and + so on. + :param prereleases: If ``True``, allow pre-release versions to be + returned - otherwise, don't return prereleases + unless they're all that's available. + + Return a set of :class:`Distribution` instances and a set of + problems. + + The distributions returned should be such that they have the + :attr:`required` attribute set to ``True`` if they were + from the ``requirement`` passed to ``find()``, and they have the + :attr:`build_time_dependency` attribute set to ``True`` unless they + are post-installation dependencies of the ``requirement``. + + The problems should be a tuple consisting of the string + ``'unsatisfied'`` and the requirement which couldn't be satisfied + by any distribution known to the locator. + """ + + self.provided = {} + self.dists = {} + self.dists_by_name = {} + self.reqts = {} + + meta_extras = set(meta_extras or []) + if ':*:' in meta_extras: + meta_extras.remove(':*:') + # :meta: and :run: are implicitly included + meta_extras |= set([':test:', ':build:', ':dev:']) + + if isinstance(requirement, Distribution): + dist = odist = requirement + logger.debug('passed %s as requirement', odist) + else: + dist = odist = self.locator.locate(requirement, + prereleases=prereleases) + if dist is None: + raise DistlibException('Unable to locate %r' % requirement) + logger.debug('located %s', odist) + dist.requested = True + problems = set() + todo = set([dist]) + install_dists = set([odist]) + while todo: + dist = todo.pop() + name = dist.key # case-insensitive + if name not in self.dists_by_name: + self.add_distribution(dist) + else: + # import pdb; pdb.set_trace() + other = self.dists_by_name[name] + if other != dist: + self.try_to_replace(dist, other, problems) + + ireqts = dist.run_requires | dist.meta_requires + sreqts = dist.build_requires + ereqts = set() + if meta_extras and dist in install_dists: + for key in ('test', 'build', 'dev'): + e = ':%s:' % key + if e in meta_extras: + ereqts |= getattr(dist, '%s_requires' % key) + all_reqts = ireqts | sreqts | ereqts + for r in all_reqts: + providers = self.find_providers(r) + if not providers: + logger.debug('No providers found for %r', r) + provider = self.locator.locate(r, prereleases=prereleases) + # If no provider is found and we didn't consider + # prereleases, consider them now. + if provider is None and not prereleases: + provider = self.locator.locate(r, prereleases=True) + if provider is None: + logger.debug('Cannot satisfy %r', r) + problems.add(('unsatisfied', r)) + else: + n, v = provider.key, provider.version + if (n, v) not in self.dists: + todo.add(provider) + providers.add(provider) + if r in ireqts and dist in install_dists: + install_dists.add(provider) + logger.debug('Adding %s to install_dists', + provider.name_and_version) + for p in providers: + name = p.key + if name not in self.dists_by_name: + self.reqts.setdefault(p, set()).add(r) + else: + other = self.dists_by_name[name] + if other != p: + # see if other can be replaced by p + self.try_to_replace(p, other, problems) + + dists = set(self.dists.values()) + for dist in dists: + dist.build_time_dependency = dist not in install_dists + if dist.build_time_dependency: + logger.debug('%s is a build-time dependency only.', + dist.name_and_version) + logger.debug('find done for %s', odist) + return dists, problems diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py new file mode 100644 index 0000000..420dcf1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py @@ -0,0 +1,384 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2023 Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Class representing the list of files in a distribution. + +Equivalent to distutils.filelist, but fixes some problems. +""" +import fnmatch +import logging +import os +import re +import sys + +from . import DistlibException +from .compat import fsdecode +from .util import convert_path + + +__all__ = ['Manifest'] + +logger = logging.getLogger(__name__) + +# a \ followed by some spaces + EOL +_COLLAPSE_PATTERN = re.compile('\\\\w*\n', re.M) +_COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) + +# +# Due to the different results returned by fnmatch.translate, we need +# to do slightly different processing for Python 2.7 and 3.2 ... this needed +# to be brought in for Python 3.6 onwards. +# +_PYTHON_VERSION = sys.version_info[:2] + + +class Manifest(object): + """ + A list of files built by exploring the filesystem and filtered by applying various + patterns to what we find there. + """ + + def __init__(self, base=None): + """ + Initialise an instance. + + :param base: The base directory to explore under. + """ + self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) + self.prefix = self.base + os.sep + self.allfiles = None + self.files = set() + + # + # Public API + # + + def findall(self): + """Find all files under the base and set ``allfiles`` to the absolute + pathnames of files found. + """ + from stat import S_ISREG, S_ISDIR, S_ISLNK + + self.allfiles = allfiles = [] + root = self.base + stack = [root] + pop = stack.pop + push = stack.append + + while stack: + root = pop() + names = os.listdir(root) + + for name in names: + fullname = os.path.join(root, name) + + # Avoid excess stat calls -- just one will do, thank you! + stat = os.stat(fullname) + mode = stat.st_mode + if S_ISREG(mode): + allfiles.append(fsdecode(fullname)) + elif S_ISDIR(mode) and not S_ISLNK(mode): + push(fullname) + + def add(self, item): + """ + Add a file to the manifest. + + :param item: The pathname to add. This can be relative to the base. + """ + if not item.startswith(self.prefix): + item = os.path.join(self.base, item) + self.files.add(os.path.normpath(item)) + + def add_many(self, items): + """ + Add a list of files to the manifest. + + :param items: The pathnames to add. These can be relative to the base. + """ + for item in items: + self.add(item) + + def sorted(self, wantdirs=False): + """ + Return sorted files in directory order + """ + + def add_dir(dirs, d): + dirs.add(d) + logger.debug('add_dir added %s', d) + if d != self.base: + parent, _ = os.path.split(d) + assert parent not in ('', '/') + add_dir(dirs, parent) + + result = set(self.files) # make a copy! + if wantdirs: + dirs = set() + for f in result: + add_dir(dirs, os.path.dirname(f)) + result |= dirs + return [os.path.join(*path_tuple) for path_tuple in + sorted(os.path.split(path) for path in result)] + + def clear(self): + """Clear all collected files.""" + self.files = set() + self.allfiles = [] + + def process_directive(self, directive): + """ + Process a directive which either adds some files from ``allfiles`` to + ``files``, or removes some files from ``files``. + + :param directive: The directive to process. This should be in a format + compatible with distutils ``MANIFEST.in`` files: + + http://docs.python.org/distutils/sourcedist.html#commands + """ + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dirpattern). + action, patterns, thedir, dirpattern = self._parse_directive(directive) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=True): + logger.warning('no files found matching %r', pattern) + + elif action == 'exclude': + for pattern in patterns: + self._exclude_pattern(pattern, anchor=True) + + elif action == 'global-include': + for pattern in patterns: + if not self._include_pattern(pattern, anchor=False): + logger.warning('no files found matching %r ' + 'anywhere in distribution', pattern) + + elif action == 'global-exclude': + for pattern in patterns: + self._exclude_pattern(pattern, anchor=False) + + elif action == 'recursive-include': + for pattern in patterns: + if not self._include_pattern(pattern, prefix=thedir): + logger.warning('no files found matching %r ' + 'under directory %r', pattern, thedir) + + elif action == 'recursive-exclude': + for pattern in patterns: + self._exclude_pattern(pattern, prefix=thedir) + + elif action == 'graft': + if not self._include_pattern(None, prefix=dirpattern): + logger.warning('no directories found matching %r', + dirpattern) + + elif action == 'prune': + if not self._exclude_pattern(None, prefix=dirpattern): + logger.warning('no previously-included directories found ' + 'matching %r', dirpattern) + else: # pragma: no cover + # This should never happen, as it should be caught in + # _parse_template_line + raise DistlibException( + 'invalid action %r' % action) + + # + # Private API + # + + def _parse_directive(self, directive): + """ + Validate a directive. + :param directive: The directive to validate. + :return: A tuple of action, patterns, thedir, dir_patterns + """ + words = directive.split() + if len(words) == 1 and words[0] not in ('include', 'exclude', + 'global-include', + 'global-exclude', + 'recursive-include', + 'recursive-exclude', + 'graft', 'prune'): + # no action given, let's use the default 'include' + words.insert(0, 'include') + + action = words[0] + patterns = thedir = dir_pattern = None + + if action in ('include', 'exclude', + 'global-include', 'global-exclude'): + if len(words) < 2: + raise DistlibException( + '%r expects ...' % action) + + patterns = [convert_path(word) for word in words[1:]] + + elif action in ('recursive-include', 'recursive-exclude'): + if len(words) < 3: + raise DistlibException( + '%r expects ...' % action) + + thedir = convert_path(words[1]) + patterns = [convert_path(word) for word in words[2:]] + + elif action in ('graft', 'prune'): + if len(words) != 2: + raise DistlibException( + '%r expects a single ' % action) + + dir_pattern = convert_path(words[1]) + + else: + raise DistlibException('unknown action %r' % action) + + return action, patterns, thedir, dir_pattern + + def _include_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Select strings (presumably filenames) from 'self.files' that + match 'pattern', a Unix-style wildcard (glob) pattern. + + Patterns are not quite the same as implemented by the 'fnmatch' + module: '*' and '?' match non-special characters, where "special" + is platform-dependent: slash on Unix; colon, slash, and backslash on + DOS/Windows; and colon on Mac OS. + + If 'anchor' is true (the default), then the pattern match is more + stringent: "*.py" will match "foo.py" but not "foo/bar.py". If + 'anchor' is false, both of these will match. + + If 'prefix' is supplied, then only filenames starting with 'prefix' + (itself a pattern) and ending with 'pattern', with anything in between + them, will match. 'anchor' is ignored in this case. + + If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and + 'pattern' is assumed to be either a string containing a regex or a + regex object -- no translation is done, the regex is just compiled + and used as-is. + + Selected strings will be added to self.files. + + Return True if files are found. + """ + # XXX docstring lying about what the special chars are? + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + + # delayed loading of allfiles list + if self.allfiles is None: + self.findall() + + for name in self.allfiles: + if pattern_re.search(name): + self.files.add(name) + found = True + return found + + def _exclude_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Remove strings (presumably filenames) from 'files' that match + 'pattern'. + + Other parameters are the same as for 'include_pattern()', above. + The list 'self.files' is modified in place. Return True if files are + found. + + This API is public to allow e.g. exclusion of SCM subdirs, e.g. when + packaging source distributions + """ + found = False + pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) + for f in list(self.files): + if pattern_re.search(f): + self.files.remove(f) + found = True + return found + + def _translate_pattern(self, pattern, anchor=True, prefix=None, + is_regex=False): + """Translate a shell-like wildcard pattern to a compiled regular + expression. + + Return the compiled regex. If 'is_regex' true, + then 'pattern' is directly compiled to a regex (if it's a string) + or just returned as-is (assumes it's a regex object). + """ + if is_regex: + if isinstance(pattern, str): + return re.compile(pattern) + else: + return pattern + + if _PYTHON_VERSION > (3, 2): + # ditch start and end characters + start, _, end = self._glob_to_re('_').partition('_') + + if pattern: + pattern_re = self._glob_to_re(pattern) + if _PYTHON_VERSION > (3, 2): + assert pattern_re.startswith(start) and pattern_re.endswith(end) + else: + pattern_re = '' + + base = re.escape(os.path.join(self.base, '')) + if prefix is not None: + # ditch end of pattern character + if _PYTHON_VERSION <= (3, 2): + empty_pattern = self._glob_to_re('') + prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] + else: + prefix_re = self._glob_to_re(prefix) + assert prefix_re.startswith(start) and prefix_re.endswith(end) + prefix_re = prefix_re[len(start): len(prefix_re) - len(end)] + sep = os.sep + if os.sep == '\\': + sep = r'\\' + if _PYTHON_VERSION <= (3, 2): + pattern_re = '^' + base + sep.join((prefix_re, + '.*' + pattern_re)) + else: + pattern_re = pattern_re[len(start): len(pattern_re) - len(end)] + pattern_re = r'%s%s%s%s.*%s%s' % (start, base, prefix_re, sep, + pattern_re, end) + else: # no prefix -- respect anchor flag + if anchor: + if _PYTHON_VERSION <= (3, 2): + pattern_re = '^' + base + pattern_re + else: + pattern_re = r'%s%s%s' % (start, base, pattern_re[len(start):]) + + return re.compile(pattern_re) + + def _glob_to_re(self, pattern): + """Translate a shell-like glob pattern to a regular expression. + + Return a string containing the regex. Differs from + 'fnmatch.translate()' in that '*' does not match "special characters" + (which are platform-specific). + """ + pattern_re = fnmatch.translate(pattern) + + # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which + # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, + # and by extension they shouldn't match such "special characters" under + # any OS. So change all non-escaped dots in the RE to match any + # character except the special characters (currently: just os.sep). + sep = os.sep + if os.sep == '\\': + # we're using a regex to manipulate a regex, so we need + # to escape the backslash twice + sep = r'\\\\' + escaped = r'\1[^%s]' % sep + pattern_re = re.sub(r'((? y, + '!=': lambda x, y: x != y, + '<': lambda x, y: x < y, + '<=': lambda x, y: x == y or x < y, + '>': lambda x, y: x > y, + '>=': lambda x, y: x == y or x > y, + 'and': lambda x, y: x and y, + 'or': lambda x, y: x or y, + 'in': lambda x, y: x in y, + 'not in': lambda x, y: x not in y, + } + + def evaluate(self, expr, context): + """ + Evaluate a marker expression returned by the :func:`parse_requirement` + function in the specified context. + """ + if isinstance(expr, string_types): + if expr[0] in '\'"': + result = expr[1:-1] + else: + if expr not in context: + raise SyntaxError('unknown variable: %s' % expr) + result = context[expr] + else: + assert isinstance(expr, dict) + op = expr['op'] + if op not in self.operations: + raise NotImplementedError('op not implemented: %s' % op) + elhs = expr['lhs'] + erhs = expr['rhs'] + if _is_literal(expr['lhs']) and _is_literal(expr['rhs']): + raise SyntaxError('invalid comparison: %s %s %s' % + (elhs, op, erhs)) + + lhs = self.evaluate(elhs, context) + rhs = self.evaluate(erhs, context) + if ((_is_version_marker(elhs) or _is_version_marker(erhs)) + and op in ('<', '<=', '>', '>=', '===', '==', '!=', '~=')): + lhs = LV(lhs) + rhs = LV(rhs) + elif _is_version_marker(elhs) and op in ('in', 'not in'): + lhs = LV(lhs) + rhs = _get_versions(rhs) + result = self.operations[op](lhs, rhs) + return result + + +_DIGITS = re.compile(r'\d+\.\d+') + + +def default_context(): + + def format_full_version(info): + version = '%s.%s.%s' % (info.major, info.minor, info.micro) + kind = info.releaselevel + if kind != 'final': + version += kind[0] + str(info.serial) + return version + + if hasattr(sys, 'implementation'): + implementation_version = format_full_version( + sys.implementation.version) + implementation_name = sys.implementation.name + else: + implementation_version = '0' + implementation_name = '' + + ppv = platform.python_version() + m = _DIGITS.match(ppv) + pv = m.group(0) + result = { + 'implementation_name': implementation_name, + 'implementation_version': implementation_version, + 'os_name': os.name, + 'platform_machine': platform.machine(), + 'platform_python_implementation': platform.python_implementation(), + 'platform_release': platform.release(), + 'platform_system': platform.system(), + 'platform_version': platform.version(), + 'platform_in_venv': str(in_venv()), + 'python_full_version': ppv, + 'python_version': pv, + 'sys_platform': sys.platform, + } + return result + + +DEFAULT_CONTEXT = default_context() +del default_context + +evaluator = Evaluator() + + +def interpret(marker, execution_context=None): + """ + Interpret a marker and return a result depending on environment. + + :param marker: The marker to interpret. + :type marker: str + :param execution_context: The context used for name lookup. + :type execution_context: mapping + """ + try: + expr, rest = parse_marker(marker) + except Exception as e: + raise SyntaxError('Unable to interpret marker syntax: %s: %s' % + (marker, e)) + if rest and rest[0] != '#': + raise SyntaxError('unexpected trailing data in marker: %s: %s' % + (marker, rest)) + context = dict(DEFAULT_CONTEXT) + if execution_context: + context.update(execution_context) + return evaluator.evaluate(expr, context) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py new file mode 100644 index 0000000..7189aee --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py @@ -0,0 +1,1068 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +"""Implementation of the Metadata for Python packages PEPs. + +Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and 2.2). +""" +from __future__ import unicode_literals + +import codecs +from email import message_from_file +import json +import logging +import re + + +from . import DistlibException, __version__ +from .compat import StringIO, string_types, text_type +from .markers import interpret +from .util import extract_by_key, get_extras +from .version import get_scheme, PEP440_VERSION_RE + +logger = logging.getLogger(__name__) + + +class MetadataMissingError(DistlibException): + """A required metadata is missing""" + + +class MetadataConflictError(DistlibException): + """Attempt to read or write metadata fields that are conflictual.""" + + +class MetadataUnrecognizedVersionError(DistlibException): + """Unknown metadata version number.""" + + +class MetadataInvalidError(DistlibException): + """A metadata value is invalid""" + +# public API of this module +__all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] + +# Encoding used for the PKG-INFO files +PKG_INFO_ENCODING = 'utf-8' + +# preferred version. Hopefully will be changed +# to 1.2 once PEP 345 is supported everywhere +PKG_INFO_PREFERRED_VERSION = '1.1' + +_LINE_PREFIX_1_2 = re.compile('\n \\|') +_LINE_PREFIX_PRE_1_2 = re.compile('\n ') +_241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License') + +_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License', 'Classifier', 'Download-URL', 'Obsoletes', + 'Provides', 'Requires') + +_314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', + 'Download-URL') + +_345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External') + +_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', + 'Obsoletes-Dist', 'Requires-External', 'Maintainer', + 'Maintainer-email', 'Project-URL') + +_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'Maintainer', 'Maintainer-email', 'License', + 'Classifier', 'Download-URL', 'Obsoletes-Dist', + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External', 'Private-Version', + 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', + 'Provides-Extra') + +_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', + 'Setup-Requires-Dist', 'Extension') + +# See issue #106: Sometimes 'Requires' and 'Provides' occur wrongly in +# the metadata. Include them in the tuple literal below to allow them +# (for now). +# Ditto for Obsoletes - see issue #140. +_566_FIELDS = _426_FIELDS + ('Description-Content-Type', + 'Requires', 'Provides', 'Obsoletes') + +_566_MARKERS = ('Description-Content-Type',) + +_643_MARKERS = ('Dynamic', 'License-File') + +_643_FIELDS = _566_FIELDS + _643_MARKERS + +_ALL_FIELDS = set() +_ALL_FIELDS.update(_241_FIELDS) +_ALL_FIELDS.update(_314_FIELDS) +_ALL_FIELDS.update(_345_FIELDS) +_ALL_FIELDS.update(_426_FIELDS) +_ALL_FIELDS.update(_566_FIELDS) +_ALL_FIELDS.update(_643_FIELDS) + +EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') + + +def _version2fieldlist(version): + if version == '1.0': + return _241_FIELDS + elif version == '1.1': + return _314_FIELDS + elif version == '1.2': + return _345_FIELDS + elif version in ('1.3', '2.1'): + # avoid adding field names if already there + return _345_FIELDS + tuple(f for f in _566_FIELDS if f not in _345_FIELDS) + elif version == '2.0': + raise ValueError('Metadata 2.0 is withdrawn and not supported') + # return _426_FIELDS + elif version == '2.2': + return _643_FIELDS + raise MetadataUnrecognizedVersionError(version) + + +def _best_version(fields): + """Detect the best version depending on the fields used.""" + def _has_marker(keys, markers): + return any(marker in keys for marker in markers) + + keys = [key for key, value in fields.items() if value not in ([], 'UNKNOWN', None)] + possible_versions = ['1.0', '1.1', '1.2', '1.3', '2.1', '2.2'] # 2.0 removed + + # first let's try to see if a field is not part of one of the version + for key in keys: + if key not in _241_FIELDS and '1.0' in possible_versions: + possible_versions.remove('1.0') + logger.debug('Removed 1.0 due to %s', key) + if key not in _314_FIELDS and '1.1' in possible_versions: + possible_versions.remove('1.1') + logger.debug('Removed 1.1 due to %s', key) + if key not in _345_FIELDS and '1.2' in possible_versions: + possible_versions.remove('1.2') + logger.debug('Removed 1.2 due to %s', key) + if key not in _566_FIELDS and '1.3' in possible_versions: + possible_versions.remove('1.3') + logger.debug('Removed 1.3 due to %s', key) + if key not in _566_FIELDS and '2.1' in possible_versions: + if key != 'Description': # In 2.1, description allowed after headers + possible_versions.remove('2.1') + logger.debug('Removed 2.1 due to %s', key) + if key not in _643_FIELDS and '2.2' in possible_versions: + possible_versions.remove('2.2') + logger.debug('Removed 2.2 due to %s', key) + # if key not in _426_FIELDS and '2.0' in possible_versions: + # possible_versions.remove('2.0') + # logger.debug('Removed 2.0 due to %s', key) + + # possible_version contains qualified versions + if len(possible_versions) == 1: + return possible_versions[0] # found ! + elif len(possible_versions) == 0: + logger.debug('Out of options - unknown metadata set: %s', fields) + raise MetadataConflictError('Unknown metadata set') + + # let's see if one unique marker is found + is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) + is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) + is_2_1 = '2.1' in possible_versions and _has_marker(keys, _566_MARKERS) + # is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) + is_2_2 = '2.2' in possible_versions and _has_marker(keys, _643_MARKERS) + if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_2) > 1: + raise MetadataConflictError('You used incompatible 1.1/1.2/2.1/2.2 fields') + + # we have the choice, 1.0, or 1.2, 2.1 or 2.2 + # - 1.0 has a broken Summary field but works with all tools + # - 1.1 is to avoid + # - 1.2 fixes Summary but has little adoption + # - 2.1 adds more features + # - 2.2 is the latest + if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_2: + # we couldn't find any specific marker + if PKG_INFO_PREFERRED_VERSION in possible_versions: + return PKG_INFO_PREFERRED_VERSION + if is_1_1: + return '1.1' + if is_1_2: + return '1.2' + if is_2_1: + return '2.1' + # if is_2_2: + # return '2.2' + + return '2.2' + +# This follows the rules about transforming keys as described in +# https://www.python.org/dev/peps/pep-0566/#id17 +_ATTR2FIELD = { + name.lower().replace("-", "_"): name for name in _ALL_FIELDS +} +_FIELD2ATTR = {field: attr for attr, field in _ATTR2FIELD.items()} + +_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') +_VERSIONS_FIELDS = ('Requires-Python',) +_VERSION_FIELDS = ('Version',) +_LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', + 'Requires', 'Provides', 'Obsoletes-Dist', + 'Provides-Dist', 'Requires-Dist', 'Requires-External', + 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', + 'Provides-Extra', 'Extension', 'License-File') +_LISTTUPLEFIELDS = ('Project-URL',) + +_ELEMENTSFIELD = ('Keywords',) + +_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') + +_MISSING = object() + +_FILESAFE = re.compile('[^A-Za-z0-9.]+') + + +def _get_name_and_version(name, version, for_filename=False): + """Return the distribution name with version. + + If for_filename is true, return a filename-escaped form.""" + if for_filename: + # For both name and version any runs of non-alphanumeric or '.' + # characters are replaced with a single '-'. Additionally any + # spaces in the version string become '.' + name = _FILESAFE.sub('-', name) + version = _FILESAFE.sub('-', version.replace(' ', '.')) + return '%s-%s' % (name, version) + + +class LegacyMetadata(object): + """The legacy metadata of a release. + + Supports versions 1.0, 1.1, 1.2, 2.0 and 1.3/2.1 (auto-detected). You can + instantiate the class with one of these arguments (or none): + - *path*, the path to a metadata file + - *fileobj* give a file-like object with metadata as content + - *mapping* is a dict-like object + - *scheme* is a version scheme name + """ + # TODO document the mapping API and UNKNOWN default key + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._fields = {} + self.requires_files = [] + self._dependencies = None + self.scheme = scheme + if path is not None: + self.read(path) + elif fileobj is not None: + self.read_file(fileobj) + elif mapping is not None: + self.update(mapping) + self.set_metadata_version() + + def set_metadata_version(self): + self._fields['Metadata-Version'] = _best_version(self._fields) + + def _write_field(self, fileobj, name, value): + fileobj.write('%s: %s\n' % (name, value)) + + def __getitem__(self, name): + return self.get(name) + + def __setitem__(self, name, value): + return self.set(name, value) + + def __delitem__(self, name): + field_name = self._convert_name(name) + try: + del self._fields[field_name] + except KeyError: + raise KeyError(name) + + def __contains__(self, name): + return (name in self._fields or + self._convert_name(name) in self._fields) + + def _convert_name(self, name): + if name in _ALL_FIELDS: + return name + name = name.replace('-', '_').lower() + return _ATTR2FIELD.get(name, name) + + def _default_value(self, name): + if name in _LISTFIELDS or name in _ELEMENTSFIELD: + return [] + return 'UNKNOWN' + + def _remove_line_prefix(self, value): + if self.metadata_version in ('1.0', '1.1'): + return _LINE_PREFIX_PRE_1_2.sub('\n', value) + else: + return _LINE_PREFIX_1_2.sub('\n', value) + + def __getattr__(self, name): + if name in _ATTR2FIELD: + return self[name] + raise AttributeError(name) + + # + # Public API + # + +# dependencies = property(_get_dependencies, _set_dependencies) + + def get_fullname(self, filesafe=False): + """Return the distribution name with version. + + If filesafe is true, return a filename-escaped form.""" + return _get_name_and_version(self['Name'], self['Version'], filesafe) + + def is_field(self, name): + """return True if name is a valid metadata key""" + name = self._convert_name(name) + return name in _ALL_FIELDS + + def is_multi_field(self, name): + name = self._convert_name(name) + return name in _LISTFIELDS + + def read(self, filepath): + """Read the metadata values from a file path.""" + fp = codecs.open(filepath, 'r', encoding='utf-8') + try: + self.read_file(fp) + finally: + fp.close() + + def read_file(self, fileob): + """Read the metadata values from a file object.""" + msg = message_from_file(fileob) + self._fields['Metadata-Version'] = msg['metadata-version'] + + # When reading, get all the fields we can + for field in _ALL_FIELDS: + if field not in msg: + continue + if field in _LISTFIELDS: + # we can have multiple lines + values = msg.get_all(field) + if field in _LISTTUPLEFIELDS and values is not None: + values = [tuple(value.split(',')) for value in values] + self.set(field, values) + else: + # single line + value = msg[field] + if value is not None and value != 'UNKNOWN': + self.set(field, value) + + # PEP 566 specifies that the body be used for the description, if + # available + body = msg.get_payload() + self["Description"] = body if body else self["Description"] + # logger.debug('Attempting to set metadata for %s', self) + # self.set_metadata_version() + + def write(self, filepath, skip_unknown=False): + """Write the metadata fields to filepath.""" + fp = codecs.open(filepath, 'w', encoding='utf-8') + try: + self.write_file(fp, skip_unknown) + finally: + fp.close() + + def write_file(self, fileobject, skip_unknown=False): + """Write the PKG-INFO format data to a file object.""" + self.set_metadata_version() + + for field in _version2fieldlist(self['Metadata-Version']): + values = self.get(field) + if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): + continue + if field in _ELEMENTSFIELD: + self._write_field(fileobject, field, ','.join(values)) + continue + if field not in _LISTFIELDS: + if field == 'Description': + if self.metadata_version in ('1.0', '1.1'): + values = values.replace('\n', '\n ') + else: + values = values.replace('\n', '\n |') + values = [values] + + if field in _LISTTUPLEFIELDS: + values = [','.join(value) for value in values] + + for value in values: + self._write_field(fileobject, field, value) + + def update(self, other=None, **kwargs): + """Set metadata values from the given iterable `other` and kwargs. + + Behavior is like `dict.update`: If `other` has a ``keys`` method, + they are looped over and ``self[key]`` is assigned ``other[key]``. + Else, ``other`` is an iterable of ``(key, value)`` iterables. + + Keys that don't match a metadata field or that have an empty value are + dropped. + """ + def _set(key, value): + if key in _ATTR2FIELD and value: + self.set(self._convert_name(key), value) + + if not other: + # other is None or empty container + pass + elif hasattr(other, 'keys'): + for k in other.keys(): + _set(k, other[k]) + else: + for k, v in other: + _set(k, v) + + if kwargs: + for k, v in kwargs.items(): + _set(k, v) + + def set(self, name, value): + """Control then set a metadata field.""" + name = self._convert_name(name) + + if ((name in _ELEMENTSFIELD or name == 'Platform') and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [v.strip() for v in value.split(',')] + else: + value = [] + elif (name in _LISTFIELDS and + not isinstance(value, (list, tuple))): + if isinstance(value, string_types): + value = [value] + else: + value = [] + + if logger.isEnabledFor(logging.WARNING): + project_name = self['Name'] + + scheme = get_scheme(self.scheme) + if name in _PREDICATE_FIELDS and value is not None: + for v in value: + # check that the values are valid + if not scheme.is_valid_matcher(v.split(';')[0]): + logger.warning( + "'%s': '%s' is not valid (field '%s')", + project_name, v, name) + # FIXME this rejects UNKNOWN, is that right? + elif name in _VERSIONS_FIELDS and value is not None: + if not scheme.is_valid_constraint_list(value): + logger.warning("'%s': '%s' is not a valid version (field '%s')", + project_name, value, name) + elif name in _VERSION_FIELDS and value is not None: + if not scheme.is_valid_version(value): + logger.warning("'%s': '%s' is not a valid version (field '%s')", + project_name, value, name) + + if name in _UNICODEFIELDS: + if name == 'Description': + value = self._remove_line_prefix(value) + + self._fields[name] = value + + def get(self, name, default=_MISSING): + """Get a metadata field.""" + name = self._convert_name(name) + if name not in self._fields: + if default is _MISSING: + default = self._default_value(name) + return default + if name in _UNICODEFIELDS: + value = self._fields[name] + return value + elif name in _LISTFIELDS: + value = self._fields[name] + if value is None: + return [] + res = [] + for val in value: + if name not in _LISTTUPLEFIELDS: + res.append(val) + else: + # That's for Project-URL + res.append((val[0], val[1])) + return res + + elif name in _ELEMENTSFIELD: + value = self._fields[name] + if isinstance(value, string_types): + return value.split(',') + return self._fields[name] + + def check(self, strict=False): + """Check if the metadata is compliant. If strict is True then raise if + no Name or Version are provided""" + self.set_metadata_version() + + # XXX should check the versions (if the file was loaded) + missing, warnings = [], [] + + for attr in ('Name', 'Version'): # required by PEP 345 + if attr not in self: + missing.append(attr) + + if strict and missing != []: + msg = 'missing required metadata: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + + for attr in ('Home-page', 'Author'): + if attr not in self: + missing.append(attr) + + # checking metadata 1.2 (XXX needs to check 1.1, 1.0) + if self['Metadata-Version'] != '1.2': + return missing, warnings + + scheme = get_scheme(self.scheme) + + def are_valid_constraints(value): + for v in value: + if not scheme.is_valid_matcher(v.split(';')[0]): + return False + return True + + for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), + (_VERSIONS_FIELDS, + scheme.is_valid_constraint_list), + (_VERSION_FIELDS, + scheme.is_valid_version)): + for field in fields: + value = self.get(field, None) + if value is not None and not controller(value): + warnings.append("Wrong value for '%s': %s" % (field, value)) + + return missing, warnings + + def todict(self, skip_missing=False): + """Return fields as a dict. + + Field names will be converted to use the underscore-lowercase style + instead of hyphen-mixed case (i.e. home_page instead of Home-page). + This is as per https://www.python.org/dev/peps/pep-0566/#id17. + """ + self.set_metadata_version() + + fields = _version2fieldlist(self['Metadata-Version']) + + data = {} + + for field_name in fields: + if not skip_missing or field_name in self._fields: + key = _FIELD2ATTR[field_name] + if key != 'project_url': + data[key] = self[field_name] + else: + data[key] = [','.join(u) for u in self[field_name]] + + return data + + def add_requirements(self, requirements): + if self['Metadata-Version'] == '1.1': + # we can't have 1.1 metadata *and* Setuptools requires + for field in ('Obsoletes', 'Requires', 'Provides'): + if field in self: + del self[field] + self['Requires-Dist'] += requirements + + # Mapping API + # TODO could add iter* variants + + def keys(self): + return list(_version2fieldlist(self['Metadata-Version'])) + + def __iter__(self): + for key in self.keys(): + yield key + + def values(self): + return [self[key] for key in self.keys()] + + def items(self): + return [(key, self[key]) for key in self.keys()] + + def __repr__(self): + return '<%s %s %s>' % (self.__class__.__name__, self.name, + self.version) + + +METADATA_FILENAME = 'pydist.json' +WHEEL_METADATA_FILENAME = 'metadata.json' +LEGACY_METADATA_FILENAME = 'METADATA' + + +class Metadata(object): + """ + The metadata of a release. This implementation uses 2.1 + metadata where possible. If not possible, it wraps a LegacyMetadata + instance which handles the key-value metadata format. + """ + + METADATA_VERSION_MATCHER = re.compile(r'^\d+(\.\d+)*$') + + NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) + + FIELDNAME_MATCHER = re.compile('^[A-Z]([0-9A-Z-]*[0-9A-Z])?$', re.I) + + VERSION_MATCHER = PEP440_VERSION_RE + + SUMMARY_MATCHER = re.compile('.{1,2047}') + + METADATA_VERSION = '2.0' + + GENERATOR = 'distlib (%s)' % __version__ + + MANDATORY_KEYS = { + 'name': (), + 'version': (), + 'summary': ('legacy',), + } + + INDEX_KEYS = ('name version license summary description author ' + 'author_email keywords platform home_page classifiers ' + 'download_url') + + DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' + 'dev_requires provides meta_requires obsoleted_by ' + 'supports_environments') + + SYNTAX_VALIDATORS = { + 'metadata_version': (METADATA_VERSION_MATCHER, ()), + 'name': (NAME_MATCHER, ('legacy',)), + 'version': (VERSION_MATCHER, ('legacy',)), + 'summary': (SUMMARY_MATCHER, ('legacy',)), + 'dynamic': (FIELDNAME_MATCHER, ('legacy',)), + } + + __slots__ = ('_legacy', '_data', 'scheme') + + def __init__(self, path=None, fileobj=None, mapping=None, + scheme='default'): + if [path, fileobj, mapping].count(None) < 2: + raise TypeError('path, fileobj and mapping are exclusive') + self._legacy = None + self._data = None + self.scheme = scheme + #import pdb; pdb.set_trace() + if mapping is not None: + try: + self._validate_mapping(mapping, scheme) + self._data = mapping + except MetadataUnrecognizedVersionError: + self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) + self.validate() + else: + data = None + if path: + with open(path, 'rb') as f: + data = f.read() + elif fileobj: + data = fileobj.read() + if data is None: + # Initialised with no args - to be added + self._data = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + else: + if not isinstance(data, text_type): + data = data.decode('utf-8') + try: + self._data = json.loads(data) + self._validate_mapping(self._data, scheme) + except ValueError: + # Note: MetadataUnrecognizedVersionError does not + # inherit from ValueError (it's a DistlibException, + # which should not inherit from ValueError). + # The ValueError comes from the json.load - if that + # succeeds and we get a validation error, we want + # that to propagate + self._legacy = LegacyMetadata(fileobj=StringIO(data), + scheme=scheme) + self.validate() + + common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) + + none_list = (None, list) + none_dict = (None, dict) + + mapped_keys = { + 'run_requires': ('Requires-Dist', list), + 'build_requires': ('Setup-Requires-Dist', list), + 'dev_requires': none_list, + 'test_requires': none_list, + 'meta_requires': none_list, + 'extras': ('Provides-Extra', list), + 'modules': none_list, + 'namespaces': none_list, + 'exports': none_dict, + 'commands': none_dict, + 'classifiers': ('Classifier', list), + 'source_url': ('Download-URL', None), + 'metadata_version': ('Metadata-Version', None), + } + + del none_list, none_dict + + def __getattribute__(self, key): + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, maker = mapped[key] + if self._legacy: + if lk is None: + result = None if maker is None else maker() + else: + result = self._legacy.get(lk) + else: + value = None if maker is None else maker() + if key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + result = self._data.get(key, value) + else: + # special cases for PEP 459 + sentinel = object() + result = sentinel + d = self._data.get('extensions') + if d: + if key == 'commands': + result = d.get('python.commands', value) + elif key == 'classifiers': + d = d.get('python.details') + if d: + result = d.get(key, value) + else: + d = d.get('python.exports') + if not d: + d = self._data.get('python.exports') + if d: + result = d.get(key, value) + if result is sentinel: + result = value + elif key not in common: + result = object.__getattribute__(self, key) + elif self._legacy: + result = self._legacy.get(key) + else: + result = self._data.get(key) + return result + + def _validate_value(self, key, value, scheme=None): + if key in self.SYNTAX_VALIDATORS: + pattern, exclusions = self.SYNTAX_VALIDATORS[key] + if (scheme or self.scheme) not in exclusions: + m = pattern.match(value) + if not m: + raise MetadataInvalidError("'%s' is an invalid value for " + "the '%s' property" % (value, + key)) + + def __setattr__(self, key, value): + self._validate_value(key, value) + common = object.__getattribute__(self, 'common_keys') + mapped = object.__getattribute__(self, 'mapped_keys') + if key in mapped: + lk, _ = mapped[key] + if self._legacy: + if lk is None: + raise NotImplementedError + self._legacy[lk] = value + elif key not in ('commands', 'exports', 'modules', 'namespaces', + 'classifiers'): + self._data[key] = value + else: + # special cases for PEP 459 + d = self._data.setdefault('extensions', {}) + if key == 'commands': + d['python.commands'] = value + elif key == 'classifiers': + d = d.setdefault('python.details', {}) + d[key] = value + else: + d = d.setdefault('python.exports', {}) + d[key] = value + elif key not in common: + object.__setattr__(self, key, value) + else: + if key == 'keywords': + if isinstance(value, string_types): + value = value.strip() + if value: + value = value.split() + else: + value = [] + if self._legacy: + self._legacy[key] = value + else: + self._data[key] = value + + @property + def name_and_version(self): + return _get_name_and_version(self.name, self.version, True) + + @property + def provides(self): + if self._legacy: + result = self._legacy['Provides-Dist'] + else: + result = self._data.setdefault('provides', []) + s = '%s (%s)' % (self.name, self.version) + if s not in result: + result.append(s) + return result + + @provides.setter + def provides(self, value): + if self._legacy: + self._legacy['Provides-Dist'] = value + else: + self._data['provides'] = value + + def get_requirements(self, reqts, extras=None, env=None): + """ + Base method to get dependencies, given a set of extras + to satisfy and an optional environment context. + :param reqts: A list of sometimes-wanted dependencies, + perhaps dependent on extras and environment. + :param extras: A list of optional components being requested. + :param env: An optional environment for marker evaluation. + """ + if self._legacy: + result = reqts + else: + result = [] + extras = get_extras(extras or [], self.extras) + for d in reqts: + if 'extra' not in d and 'environment' not in d: + # unconditional + include = True + else: + if 'extra' not in d: + # Not extra-dependent - only environment-dependent + include = True + else: + include = d.get('extra') in extras + if include: + # Not excluded because of extras, check environment + marker = d.get('environment') + if marker: + include = interpret(marker, env) + if include: + result.extend(d['requires']) + for key in ('build', 'dev', 'test'): + e = ':%s:' % key + if e in extras: + extras.remove(e) + # A recursive call, but it should terminate since 'test' + # has been removed from the extras + reqts = self._data.get('%s_requires' % key, []) + result.extend(self.get_requirements(reqts, extras=extras, + env=env)) + return result + + @property + def dictionary(self): + if self._legacy: + return self._from_legacy() + return self._data + + @property + def dependencies(self): + if self._legacy: + raise NotImplementedError + else: + return extract_by_key(self._data, self.DEPENDENCY_KEYS) + + @dependencies.setter + def dependencies(self, value): + if self._legacy: + raise NotImplementedError + else: + self._data.update(value) + + def _validate_mapping(self, mapping, scheme): + if mapping.get('metadata_version') != self.METADATA_VERSION: + raise MetadataUnrecognizedVersionError() + missing = [] + for key, exclusions in self.MANDATORY_KEYS.items(): + if key not in mapping: + if scheme not in exclusions: + missing.append(key) + if missing: + msg = 'Missing metadata items: %s' % ', '.join(missing) + raise MetadataMissingError(msg) + for k, v in mapping.items(): + self._validate_value(k, v, scheme) + + def validate(self): + if self._legacy: + missing, warnings = self._legacy.check(True) + if missing or warnings: + logger.warning('Metadata: missing: %s, warnings: %s', + missing, warnings) + else: + self._validate_mapping(self._data, self.scheme) + + def todict(self): + if self._legacy: + return self._legacy.todict(True) + else: + result = extract_by_key(self._data, self.INDEX_KEYS) + return result + + def _from_legacy(self): + assert self._legacy and not self._data + result = { + 'metadata_version': self.METADATA_VERSION, + 'generator': self.GENERATOR, + } + lmd = self._legacy.todict(True) # skip missing ones + for k in ('name', 'version', 'license', 'summary', 'description', + 'classifier'): + if k in lmd: + if k == 'classifier': + nk = 'classifiers' + else: + nk = k + result[nk] = lmd[k] + kw = lmd.get('Keywords', []) + if kw == ['']: + kw = [] + result['keywords'] = kw + keys = (('requires_dist', 'run_requires'), + ('setup_requires_dist', 'build_requires')) + for ok, nk in keys: + if ok in lmd and lmd[ok]: + result[nk] = [{'requires': lmd[ok]}] + result['provides'] = self.provides + author = {} + maintainer = {} + return result + + LEGACY_MAPPING = { + 'name': 'Name', + 'version': 'Version', + ('extensions', 'python.details', 'license'): 'License', + 'summary': 'Summary', + 'description': 'Description', + ('extensions', 'python.project', 'project_urls', 'Home'): 'Home-page', + ('extensions', 'python.project', 'contacts', 0, 'name'): 'Author', + ('extensions', 'python.project', 'contacts', 0, 'email'): 'Author-email', + 'source_url': 'Download-URL', + ('extensions', 'python.details', 'classifiers'): 'Classifier', + } + + def _to_legacy(self): + def process_entries(entries): + reqts = set() + for e in entries: + extra = e.get('extra') + env = e.get('environment') + rlist = e['requires'] + for r in rlist: + if not env and not extra: + reqts.add(r) + else: + marker = '' + if extra: + marker = 'extra == "%s"' % extra + if env: + if marker: + marker = '(%s) and %s' % (env, marker) + else: + marker = env + reqts.add(';'.join((r, marker))) + return reqts + + assert self._data and not self._legacy + result = LegacyMetadata() + nmd = self._data + # import pdb; pdb.set_trace() + for nk, ok in self.LEGACY_MAPPING.items(): + if not isinstance(nk, tuple): + if nk in nmd: + result[ok] = nmd[nk] + else: + d = nmd + found = True + for k in nk: + try: + d = d[k] + except (KeyError, IndexError): + found = False + break + if found: + result[ok] = d + r1 = process_entries(self.run_requires + self.meta_requires) + r2 = process_entries(self.build_requires + self.dev_requires) + if self.extras: + result['Provides-Extra'] = sorted(self.extras) + result['Requires-Dist'] = sorted(r1) + result['Setup-Requires-Dist'] = sorted(r2) + # TODO: any other fields wanted + return result + + def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): + if [path, fileobj].count(None) != 1: + raise ValueError('Exactly one of path and fileobj is needed') + self.validate() + if legacy: + if self._legacy: + legacy_md = self._legacy + else: + legacy_md = self._to_legacy() + if path: + legacy_md.write(path, skip_unknown=skip_unknown) + else: + legacy_md.write_file(fileobj, skip_unknown=skip_unknown) + else: + if self._legacy: + d = self._from_legacy() + else: + d = self._data + if fileobj: + json.dump(d, fileobj, ensure_ascii=True, indent=2, + sort_keys=True) + else: + with codecs.open(path, 'w', 'utf-8') as f: + json.dump(d, f, ensure_ascii=True, indent=2, + sort_keys=True) + + def add_requirements(self, requirements): + if self._legacy: + self._legacy.add_requirements(requirements) + else: + run_requires = self._data.setdefault('run_requires', []) + always = None + for entry in run_requires: + if 'environment' not in entry and 'extra' not in entry: + always = entry + break + if always is None: + always = { 'requires': requirements } + run_requires.insert(0, always) + else: + rset = set(always['requires']) | set(requirements) + always['requires'] = sorted(rset) + + def __repr__(self): + name = self.name or '(no name)' + version = self.version or 'no version' + return '<%s %s %s (%s)>' % (self.__class__.__name__, + self.metadata_version, name, version) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py new file mode 100644 index 0000000..fef52aa --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py @@ -0,0 +1,358 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2017 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import unicode_literals + +import bisect +import io +import logging +import os +import pkgutil +import sys +import types +import zipimport + +from . import DistlibException +from .util import cached_property, get_cache_base, Cache + +logger = logging.getLogger(__name__) + + +cache = None # created when needed + + +class ResourceCache(Cache): + def __init__(self, base=None): + if base is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('resource-cache')) + super(ResourceCache, self).__init__(base) + + def is_stale(self, resource, path): + """ + Is the cache stale for the given resource? + + :param resource: The :class:`Resource` being cached. + :param path: The path of the resource in the cache. + :return: True if the cache is stale. + """ + # Cache invalidation is a hard problem :-) + return True + + def get(self, resource): + """ + Get a resource into the cache, + + :param resource: A :class:`Resource` instance. + :return: The pathname of the resource in the cache. + """ + prefix, path = resource.finder.get_cache_info(resource) + if prefix is None: + result = path + else: + result = os.path.join(self.base, self.prefix_to_dir(prefix), path) + dirname = os.path.dirname(result) + if not os.path.isdir(dirname): + os.makedirs(dirname) + if not os.path.exists(result): + stale = True + else: + stale = self.is_stale(resource, path) + if stale: + # write the bytes of the resource to the cache location + with open(result, 'wb') as f: + f.write(resource.bytes) + return result + + +class ResourceBase(object): + def __init__(self, finder, name): + self.finder = finder + self.name = name + + +class Resource(ResourceBase): + """ + A class representing an in-package resource, such as a data file. This is + not normally instantiated by user code, but rather by a + :class:`ResourceFinder` which manages the resource. + """ + is_container = False # Backwards compatibility + + def as_stream(self): + """ + Get the resource as a stream. + + This is not a property to make it obvious that it returns a new stream + each time. + """ + return self.finder.get_stream(self) + + @cached_property + def file_path(self): + global cache + if cache is None: + cache = ResourceCache() + return cache.get(self) + + @cached_property + def bytes(self): + return self.finder.get_bytes(self) + + @cached_property + def size(self): + return self.finder.get_size(self) + + +class ResourceContainer(ResourceBase): + is_container = True # Backwards compatibility + + @cached_property + def resources(self): + return self.finder.get_resources(self) + + +class ResourceFinder(object): + """ + Resource finder for file system resources. + """ + + if sys.platform.startswith('java'): + skipped_extensions = ('.pyc', '.pyo', '.class') + else: + skipped_extensions = ('.pyc', '.pyo') + + def __init__(self, module): + self.module = module + self.loader = getattr(module, '__loader__', None) + self.base = os.path.dirname(getattr(module, '__file__', '')) + + def _adjust_path(self, path): + return os.path.realpath(path) + + def _make_path(self, resource_name): + # Issue #50: need to preserve type of path on Python 2.x + # like os.path._get_sep + if isinstance(resource_name, bytes): # should only happen on 2.x + sep = b'/' + else: + sep = '/' + parts = resource_name.split(sep) + parts.insert(0, self.base) + result = os.path.join(*parts) + return self._adjust_path(result) + + def _find(self, path): + return os.path.exists(path) + + def get_cache_info(self, resource): + return None, resource.path + + def find(self, resource_name): + path = self._make_path(resource_name) + if not self._find(path): + result = None + else: + if self._is_directory(path): + result = ResourceContainer(self, resource_name) + else: + result = Resource(self, resource_name) + result.path = path + return result + + def get_stream(self, resource): + return open(resource.path, 'rb') + + def get_bytes(self, resource): + with open(resource.path, 'rb') as f: + return f.read() + + def get_size(self, resource): + return os.path.getsize(resource.path) + + def get_resources(self, resource): + def allowed(f): + return (f != '__pycache__' and not + f.endswith(self.skipped_extensions)) + return set([f for f in os.listdir(resource.path) if allowed(f)]) + + def is_container(self, resource): + return self._is_directory(resource.path) + + _is_directory = staticmethod(os.path.isdir) + + def iterator(self, resource_name): + resource = self.find(resource_name) + if resource is not None: + todo = [resource] + while todo: + resource = todo.pop(0) + yield resource + if resource.is_container: + rname = resource.name + for name in resource.resources: + if not rname: + new_name = name + else: + new_name = '/'.join([rname, name]) + child = self.find(new_name) + if child.is_container: + todo.append(child) + else: + yield child + + +class ZipResourceFinder(ResourceFinder): + """ + Resource finder for resources in .zip files. + """ + def __init__(self, module): + super(ZipResourceFinder, self).__init__(module) + archive = self.loader.archive + self.prefix_len = 1 + len(archive) + # PyPy doesn't have a _files attr on zipimporter, and you can't set one + if hasattr(self.loader, '_files'): + self._files = self.loader._files + else: + self._files = zipimport._zip_directory_cache[archive] + self.index = sorted(self._files) + + def _adjust_path(self, path): + return path + + def _find(self, path): + path = path[self.prefix_len:] + if path in self._files: + result = True + else: + if path and path[-1] != os.sep: + path = path + os.sep + i = bisect.bisect(self.index, path) + try: + result = self.index[i].startswith(path) + except IndexError: + result = False + if not result: + logger.debug('_find failed: %r %r', path, self.loader.prefix) + else: + logger.debug('_find worked: %r %r', path, self.loader.prefix) + return result + + def get_cache_info(self, resource): + prefix = self.loader.archive + path = resource.path[1 + len(prefix):] + return prefix, path + + def get_bytes(self, resource): + return self.loader.get_data(resource.path) + + def get_stream(self, resource): + return io.BytesIO(self.get_bytes(resource)) + + def get_size(self, resource): + path = resource.path[self.prefix_len:] + return self._files[path][3] + + def get_resources(self, resource): + path = resource.path[self.prefix_len:] + if path and path[-1] != os.sep: + path += os.sep + plen = len(path) + result = set() + i = bisect.bisect(self.index, path) + while i < len(self.index): + if not self.index[i].startswith(path): + break + s = self.index[i][plen:] + result.add(s.split(os.sep, 1)[0]) # only immediate children + i += 1 + return result + + def _is_directory(self, path): + path = path[self.prefix_len:] + if path and path[-1] != os.sep: + path += os.sep + i = bisect.bisect(self.index, path) + try: + result = self.index[i].startswith(path) + except IndexError: + result = False + return result + + +_finder_registry = { + type(None): ResourceFinder, + zipimport.zipimporter: ZipResourceFinder +} + +try: + # In Python 3.6, _frozen_importlib -> _frozen_importlib_external + try: + import _frozen_importlib_external as _fi + except ImportError: + import _frozen_importlib as _fi + _finder_registry[_fi.SourceFileLoader] = ResourceFinder + _finder_registry[_fi.FileFinder] = ResourceFinder + # See issue #146 + _finder_registry[_fi.SourcelessFileLoader] = ResourceFinder + del _fi +except (ImportError, AttributeError): + pass + + +def register_finder(loader, finder_maker): + _finder_registry[type(loader)] = finder_maker + + +_finder_cache = {} + + +def finder(package): + """ + Return a resource finder for a package. + :param package: The name of the package. + :return: A :class:`ResourceFinder` instance for the package. + """ + if package in _finder_cache: + result = _finder_cache[package] + else: + if package not in sys.modules: + __import__(package) + module = sys.modules[package] + path = getattr(module, '__path__', None) + if path is None: + raise DistlibException('You cannot get a finder for a module, ' + 'only for a package') + loader = getattr(module, '__loader__', None) + finder_maker = _finder_registry.get(type(loader)) + if finder_maker is None: + raise DistlibException('Unable to locate finder for %r' % package) + result = finder_maker(module) + _finder_cache[package] = result + return result + + +_dummy_module = types.ModuleType(str('__dummy__')) + + +def finder_for_path(path): + """ + Return a resource finder for a path, which should represent a container. + + :param path: The path. + :return: A :class:`ResourceFinder` instance for the path. + """ + result = None + # calls any path hooks, gets importer into cache + pkgutil.get_importer(path) + loader = sys.path_importer_cache.get(path) + finder = _finder_registry.get(type(loader)) + if finder: + module = _dummy_module + module.__file__ = os.path.join(path, '') + module.__loader__ = loader + result = finder(module) + return result diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py new file mode 100644 index 0000000..cfa45d2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py @@ -0,0 +1,452 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2023 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from io import BytesIO +import logging +import os +import re +import struct +import sys +import time +from zipfile import ZipInfo + +from .compat import sysconfig, detect_encoding, ZipFile +from .resources import finder +from .util import (FileOperator, get_export_entry, convert_path, + get_executable, get_platform, in_venv) + +logger = logging.getLogger(__name__) + +_DEFAULT_MANIFEST = ''' + + + + + + + + + + + + +'''.strip() + +# check if Python is called on the first line with this expression +FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') +SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*- +import re +import sys +from %(module)s import %(import_name)s +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(%(func)s()) +''' + + +def enquote_executable(executable): + if ' ' in executable: + # make sure we quote only the executable in case of env + # for example /usr/bin/env "/dir with spaces/bin/jython" + # instead of "/usr/bin/env /dir with spaces/bin/jython" + # otherwise whole + if executable.startswith('/usr/bin/env '): + env, _executable = executable.split(' ', 1) + if ' ' in _executable and not _executable.startswith('"'): + executable = '%s "%s"' % (env, _executable) + else: + if not executable.startswith('"'): + executable = '"%s"' % executable + return executable + + +# Keep the old name around (for now), as there is at least one project using it! +_enquote_executable = enquote_executable + + +class ScriptMaker(object): + """ + A class to copy or create scripts from source scripts or callable + specifications. + """ + script_template = SCRIPT_TEMPLATE + + executable = None # for shebangs + + def __init__(self, + source_dir, + target_dir, + add_launchers=True, + dry_run=False, + fileop=None): + self.source_dir = source_dir + self.target_dir = target_dir + self.add_launchers = add_launchers + self.force = False + self.clobber = False + # It only makes sense to set mode bits on POSIX. + self.set_mode = (os.name == 'posix') or (os.name == 'java' + and os._name == 'posix') + self.variants = set(('', 'X.Y')) + self._fileop = fileop or FileOperator(dry_run) + + self._is_nt = os.name == 'nt' or (os.name == 'java' + and os._name == 'nt') + self.version_info = sys.version_info + + def _get_alternate_executable(self, executable, options): + if options.get('gui', False) and self._is_nt: # pragma: no cover + dn, fn = os.path.split(executable) + fn = fn.replace('python', 'pythonw') + executable = os.path.join(dn, fn) + return executable + + if sys.platform.startswith('java'): # pragma: no cover + + def _is_shell(self, executable): + """ + Determine if the specified executable is a script + (contains a #! line) + """ + try: + with open(executable) as fp: + return fp.read(2) == '#!' + except (OSError, IOError): + logger.warning('Failed to open %s', executable) + return False + + def _fix_jython_executable(self, executable): + if self._is_shell(executable): + # Workaround for Jython is not needed on Linux systems. + import java + + if java.lang.System.getProperty('os.name') == 'Linux': + return executable + elif executable.lower().endswith('jython.exe'): + # Use wrapper exe for Jython on Windows + return executable + return '/usr/bin/env %s' % executable + + def _build_shebang(self, executable, post_interp): + """ + Build a shebang line. In the simple case (on Windows, or a shebang line + which is not too long or contains spaces) use a simple formulation for + the shebang. Otherwise, use /bin/sh as the executable, with a contrived + shebang which allows the script to run either under Python or sh, using + suitable quoting. Thanks to Harald Nordgren for his input. + + See also: http://www.in-ulm.de/~mascheck/various/shebang/#length + https://hg.mozilla.org/mozilla-central/file/tip/mach + """ + if os.name != 'posix': + simple_shebang = True + else: + # Add 3 for '#!' prefix and newline suffix. + shebang_length = len(executable) + len(post_interp) + 3 + if sys.platform == 'darwin': + max_shebang_length = 512 + else: + max_shebang_length = 127 + simple_shebang = ((b' ' not in executable) + and (shebang_length <= max_shebang_length)) + + if simple_shebang: + result = b'#!' + executable + post_interp + b'\n' + else: + result = b'#!/bin/sh\n' + result += b"'''exec' " + executable + post_interp + b' "$0" "$@"\n' + result += b"' '''" + return result + + def _get_shebang(self, encoding, post_interp=b'', options=None): + enquote = True + if self.executable: + executable = self.executable + enquote = False # assume this will be taken care of + elif not sysconfig.is_python_build(): + executable = get_executable() + elif in_venv(): # pragma: no cover + executable = os.path.join( + sysconfig.get_path('scripts'), + 'python%s' % sysconfig.get_config_var('EXE')) + else: # pragma: no cover + if os.name == 'nt': + # for Python builds from source on Windows, no Python executables with + # a version suffix are created, so we use python.exe + executable = os.path.join( + sysconfig.get_config_var('BINDIR'), + 'python%s' % (sysconfig.get_config_var('EXE'))) + else: + executable = os.path.join( + sysconfig.get_config_var('BINDIR'), + 'python%s%s' % (sysconfig.get_config_var('VERSION'), + sysconfig.get_config_var('EXE'))) + if options: + executable = self._get_alternate_executable(executable, options) + + if sys.platform.startswith('java'): # pragma: no cover + executable = self._fix_jython_executable(executable) + + # Normalise case for Windows - COMMENTED OUT + # executable = os.path.normcase(executable) + # N.B. The normalising operation above has been commented out: See + # issue #124. Although paths in Windows are generally case-insensitive, + # they aren't always. For example, a path containing a ẞ (which is a + # LATIN CAPITAL LETTER SHARP S - U+1E9E) is normcased to ß (which is a + # LATIN SMALL LETTER SHARP S' - U+00DF). The two are not considered by + # Windows as equivalent in path names. + + # If the user didn't specify an executable, it may be necessary to + # cater for executable paths with spaces (not uncommon on Windows) + if enquote: + executable = enquote_executable(executable) + # Issue #51: don't use fsencode, since we later try to + # check that the shebang is decodable using utf-8. + executable = executable.encode('utf-8') + # in case of IronPython, play safe and enable frames support + if (sys.platform == 'cli' and '-X:Frames' not in post_interp + and '-X:FullFrames' not in post_interp): # pragma: no cover + post_interp += b' -X:Frames' + shebang = self._build_shebang(executable, post_interp) + # Python parser starts to read a script using UTF-8 until + # it gets a #coding:xxx cookie. The shebang has to be the + # first line of a file, the #coding:xxx cookie cannot be + # written before. So the shebang has to be decodable from + # UTF-8. + try: + shebang.decode('utf-8') + except UnicodeDecodeError: # pragma: no cover + raise ValueError('The shebang (%r) is not decodable from utf-8' % + shebang) + # If the script is encoded to a custom encoding (use a + # #coding:xxx cookie), the shebang has to be decodable from + # the script encoding too. + if encoding != 'utf-8': + try: + shebang.decode(encoding) + except UnicodeDecodeError: # pragma: no cover + raise ValueError('The shebang (%r) is not decodable ' + 'from the script encoding (%r)' % + (shebang, encoding)) + return shebang + + def _get_script_text(self, entry): + return self.script_template % dict( + module=entry.prefix, + import_name=entry.suffix.split('.')[0], + func=entry.suffix) + + manifest = _DEFAULT_MANIFEST + + def get_manifest(self, exename): + base = os.path.basename(exename) + return self.manifest % base + + def _write_script(self, names, shebang, script_bytes, filenames, ext): + use_launcher = self.add_launchers and self._is_nt + linesep = os.linesep.encode('utf-8') + if not shebang.endswith(linesep): + shebang += linesep + if not use_launcher: + script_bytes = shebang + script_bytes + else: # pragma: no cover + if ext == 'py': + launcher = self._get_launcher('t') + else: + launcher = self._get_launcher('w') + stream = BytesIO() + with ZipFile(stream, 'w') as zf: + source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') + if source_date_epoch: + date_time = time.gmtime(int(source_date_epoch))[:6] + zinfo = ZipInfo(filename='__main__.py', + date_time=date_time) + zf.writestr(zinfo, script_bytes) + else: + zf.writestr('__main__.py', script_bytes) + zip_data = stream.getvalue() + script_bytes = launcher + shebang + zip_data + for name in names: + outname = os.path.join(self.target_dir, name) + if use_launcher: # pragma: no cover + n, e = os.path.splitext(outname) + if e.startswith('.py'): + outname = n + outname = '%s.exe' % outname + try: + self._fileop.write_binary_file(outname, script_bytes) + except Exception: + # Failed writing an executable - it might be in use. + logger.warning('Failed to write executable - trying to ' + 'use .deleteme logic') + dfname = '%s.deleteme' % outname + if os.path.exists(dfname): + os.remove(dfname) # Not allowed to fail here + os.rename(outname, dfname) # nor here + self._fileop.write_binary_file(outname, script_bytes) + logger.debug('Able to replace executable using ' + '.deleteme logic') + try: + os.remove(dfname) + except Exception: + pass # still in use - ignore error + else: + if self._is_nt and not outname.endswith( + '.' + ext): # pragma: no cover + outname = '%s.%s' % (outname, ext) + if os.path.exists(outname) and not self.clobber: + logger.warning('Skipping existing file %s', outname) + continue + self._fileop.write_binary_file(outname, script_bytes) + if self.set_mode: + self._fileop.set_executable_mode([outname]) + filenames.append(outname) + + variant_separator = '-' + + def get_script_filenames(self, name): + result = set() + if '' in self.variants: + result.add(name) + if 'X' in self.variants: + result.add('%s%s' % (name, self.version_info[0])) + if 'X.Y' in self.variants: + result.add('%s%s%s.%s' % + (name, self.variant_separator, self.version_info[0], + self.version_info[1])) + return result + + def _make_script(self, entry, filenames, options=None): + post_interp = b'' + if options: + args = options.get('interpreter_args', []) + if args: + args = ' %s' % ' '.join(args) + post_interp = args.encode('utf-8') + shebang = self._get_shebang('utf-8', post_interp, options=options) + script = self._get_script_text(entry).encode('utf-8') + scriptnames = self.get_script_filenames(entry.name) + if options and options.get('gui', False): + ext = 'pyw' + else: + ext = 'py' + self._write_script(scriptnames, shebang, script, filenames, ext) + + def _copy_script(self, script, filenames): + adjust = False + script = os.path.join(self.source_dir, convert_path(script)) + outname = os.path.join(self.target_dir, os.path.basename(script)) + if not self.force and not self._fileop.newer(script, outname): + logger.debug('not copying %s (up-to-date)', script) + return + + # Always open the file, but ignore failures in dry-run mode -- + # that way, we'll get accurate feedback if we can read the + # script. + try: + f = open(script, 'rb') + except IOError: # pragma: no cover + if not self.dry_run: + raise + f = None + else: + first_line = f.readline() + if not first_line: # pragma: no cover + logger.warning('%s is an empty file (skipping)', script) + return + + match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) + if match: + adjust = True + post_interp = match.group(1) or b'' + + if not adjust: + if f: + f.close() + self._fileop.copy_file(script, outname) + if self.set_mode: + self._fileop.set_executable_mode([outname]) + filenames.append(outname) + else: + logger.info('copying and adjusting %s -> %s', script, + self.target_dir) + if not self._fileop.dry_run: + encoding, lines = detect_encoding(f.readline) + f.seek(0) + shebang = self._get_shebang(encoding, post_interp) + if b'pythonw' in first_line: # pragma: no cover + ext = 'pyw' + else: + ext = 'py' + n = os.path.basename(outname) + self._write_script([n], shebang, f.read(), filenames, ext) + if f: + f.close() + + @property + def dry_run(self): + return self._fileop.dry_run + + @dry_run.setter + def dry_run(self, value): + self._fileop.dry_run = value + + if os.name == 'nt' or (os.name == 'java' + and os._name == 'nt'): # pragma: no cover + # Executable launcher support. + # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ + + def _get_launcher(self, kind): + if struct.calcsize('P') == 8: # 64-bit + bits = '64' + else: + bits = '32' + platform_suffix = '-arm' if get_platform() == 'win-arm64' else '' + name = '%s%s%s.exe' % (kind, bits, platform_suffix) + # Issue 31: don't hardcode an absolute package name, but + # determine it relative to the current package + distlib_package = __name__.rsplit('.', 1)[0] + resource = finder(distlib_package).find(name) + if not resource: + msg = ('Unable to find resource %s in package %s' % + (name, distlib_package)) + raise ValueError(msg) + return resource.bytes + + # Public API follows + + def make(self, specification, options=None): + """ + Make a script. + + :param specification: The specification, which is either a valid export + entry specification (to make a script from a + callable) or a filename (to make a script by + copying from a source location). + :param options: A dictionary of options controlling script generation. + :return: A list of all absolute pathnames written to. + """ + filenames = [] + entry = get_export_entry(specification) + if entry is None: + self._copy_script(specification, filenames) + else: + self._make_script(entry, filenames, options=options) + return filenames + + def make_multiple(self, specifications, options=None): + """ + Take a list of specifications and make scripts from them, + :param specifications: A list of specifications. + :return: A list of all absolute pathnames written to, + """ + filenames = [] + for specification in specifications: + filenames.extend(self.make(specification, options)) + return filenames diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py new file mode 100644 index 0000000..ba58858 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py @@ -0,0 +1,2025 @@ +# +# Copyright (C) 2012-2023 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +import codecs +from collections import deque +import contextlib +import csv +from glob import iglob as std_iglob +import io +import json +import logging +import os +import py_compile +import re +import socket +try: + import ssl +except ImportError: # pragma: no cover + ssl = None +import subprocess +import sys +import tarfile +import tempfile +import textwrap + +try: + import threading +except ImportError: # pragma: no cover + import dummy_threading as threading +import time + +from . import DistlibException +from .compat import (string_types, text_type, shutil, raw_input, StringIO, + cache_from_source, urlopen, urljoin, httplib, xmlrpclib, + HTTPHandler, BaseConfigurator, valid_ident, + Container, configparser, URLError, ZipFile, fsdecode, + unquote, urlparse) + +logger = logging.getLogger(__name__) + +# +# Requirement parsing code as per PEP 508 +# + +IDENTIFIER = re.compile(r'^([\w\.-]+)\s*') +VERSION_IDENTIFIER = re.compile(r'^([\w\.*+-]+)\s*') +COMPARE_OP = re.compile(r'^(<=?|>=?|={2,3}|[~!]=)\s*') +MARKER_OP = re.compile(r'^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*') +OR = re.compile(r'^or\b\s*') +AND = re.compile(r'^and\b\s*') +NON_SPACE = re.compile(r'(\S+)\s*') +STRING_CHUNK = re.compile(r'([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)') + + +def parse_marker(marker_string): + """ + Parse a marker string and return a dictionary containing a marker expression. + + The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in + the expression grammar, or strings. A string contained in quotes is to be + interpreted as a literal string, and a string not contained in quotes is a + variable (such as os_name). + """ + + def marker_var(remaining): + # either identifier, or literal string + m = IDENTIFIER.match(remaining) + if m: + result = m.groups()[0] + remaining = remaining[m.end():] + elif not remaining: + raise SyntaxError('unexpected end of input') + else: + q = remaining[0] + if q not in '\'"': + raise SyntaxError('invalid expression: %s' % remaining) + oq = '\'"'.replace(q, '') + remaining = remaining[1:] + parts = [q] + while remaining: + # either a string chunk, or oq, or q to terminate + if remaining[0] == q: + break + elif remaining[0] == oq: + parts.append(oq) + remaining = remaining[1:] + else: + m = STRING_CHUNK.match(remaining) + if not m: + raise SyntaxError('error in string literal: %s' % + remaining) + parts.append(m.groups()[0]) + remaining = remaining[m.end():] + else: + s = ''.join(parts) + raise SyntaxError('unterminated string: %s' % s) + parts.append(q) + result = ''.join(parts) + remaining = remaining[1:].lstrip() # skip past closing quote + return result, remaining + + def marker_expr(remaining): + if remaining and remaining[0] == '(': + result, remaining = marker(remaining[1:].lstrip()) + if remaining[0] != ')': + raise SyntaxError('unterminated parenthesis: %s' % remaining) + remaining = remaining[1:].lstrip() + else: + lhs, remaining = marker_var(remaining) + while remaining: + m = MARKER_OP.match(remaining) + if not m: + break + op = m.groups()[0] + remaining = remaining[m.end():] + rhs, remaining = marker_var(remaining) + lhs = {'op': op, 'lhs': lhs, 'rhs': rhs} + result = lhs + return result, remaining + + def marker_and(remaining): + lhs, remaining = marker_expr(remaining) + while remaining: + m = AND.match(remaining) + if not m: + break + remaining = remaining[m.end():] + rhs, remaining = marker_expr(remaining) + lhs = {'op': 'and', 'lhs': lhs, 'rhs': rhs} + return lhs, remaining + + def marker(remaining): + lhs, remaining = marker_and(remaining) + while remaining: + m = OR.match(remaining) + if not m: + break + remaining = remaining[m.end():] + rhs, remaining = marker_and(remaining) + lhs = {'op': 'or', 'lhs': lhs, 'rhs': rhs} + return lhs, remaining + + return marker(marker_string) + + +def parse_requirement(req): + """ + Parse a requirement passed in as a string. Return a Container + whose attributes contain the various parts of the requirement. + """ + remaining = req.strip() + if not remaining or remaining.startswith('#'): + return None + m = IDENTIFIER.match(remaining) + if not m: + raise SyntaxError('name expected: %s' % remaining) + distname = m.groups()[0] + remaining = remaining[m.end():] + extras = mark_expr = versions = uri = None + if remaining and remaining[0] == '[': + i = remaining.find(']', 1) + if i < 0: + raise SyntaxError('unterminated extra: %s' % remaining) + s = remaining[1:i] + remaining = remaining[i + 1:].lstrip() + extras = [] + while s: + m = IDENTIFIER.match(s) + if not m: + raise SyntaxError('malformed extra: %s' % s) + extras.append(m.groups()[0]) + s = s[m.end():] + if not s: + break + if s[0] != ',': + raise SyntaxError('comma expected in extras: %s' % s) + s = s[1:].lstrip() + if not extras: + extras = None + if remaining: + if remaining[0] == '@': + # it's a URI + remaining = remaining[1:].lstrip() + m = NON_SPACE.match(remaining) + if not m: + raise SyntaxError('invalid URI: %s' % remaining) + uri = m.groups()[0] + t = urlparse(uri) + # there are issues with Python and URL parsing, so this test + # is a bit crude. See bpo-20271, bpo-23505. Python doesn't + # always parse invalid URLs correctly - it should raise + # exceptions for malformed URLs + if not (t.scheme and t.netloc): + raise SyntaxError('Invalid URL: %s' % uri) + remaining = remaining[m.end():].lstrip() + else: + + def get_versions(ver_remaining): + """ + Return a list of operator, version tuples if any are + specified, else None. + """ + m = COMPARE_OP.match(ver_remaining) + versions = None + if m: + versions = [] + while True: + op = m.groups()[0] + ver_remaining = ver_remaining[m.end():] + m = VERSION_IDENTIFIER.match(ver_remaining) + if not m: + raise SyntaxError('invalid version: %s' % + ver_remaining) + v = m.groups()[0] + versions.append((op, v)) + ver_remaining = ver_remaining[m.end():] + if not ver_remaining or ver_remaining[0] != ',': + break + ver_remaining = ver_remaining[1:].lstrip() + # Some packages have a trailing comma which would break things + # See issue #148 + if not ver_remaining: + break + m = COMPARE_OP.match(ver_remaining) + if not m: + raise SyntaxError('invalid constraint: %s' % + ver_remaining) + if not versions: + versions = None + return versions, ver_remaining + + if remaining[0] != '(': + versions, remaining = get_versions(remaining) + else: + i = remaining.find(')', 1) + if i < 0: + raise SyntaxError('unterminated parenthesis: %s' % + remaining) + s = remaining[1:i] + remaining = remaining[i + 1:].lstrip() + # As a special diversion from PEP 508, allow a version number + # a.b.c in parentheses as a synonym for ~= a.b.c (because this + # is allowed in earlier PEPs) + if COMPARE_OP.match(s): + versions, _ = get_versions(s) + else: + m = VERSION_IDENTIFIER.match(s) + if not m: + raise SyntaxError('invalid constraint: %s' % s) + v = m.groups()[0] + s = s[m.end():].lstrip() + if s: + raise SyntaxError('invalid constraint: %s' % s) + versions = [('~=', v)] + + if remaining: + if remaining[0] != ';': + raise SyntaxError('invalid requirement: %s' % remaining) + remaining = remaining[1:].lstrip() + + mark_expr, remaining = parse_marker(remaining) + + if remaining and remaining[0] != '#': + raise SyntaxError('unexpected trailing data: %s' % remaining) + + if not versions: + rs = distname + else: + rs = '%s %s' % (distname, ', '.join( + ['%s %s' % con for con in versions])) + return Container(name=distname, + extras=extras, + constraints=versions, + marker=mark_expr, + url=uri, + requirement=rs) + + +def get_resources_dests(resources_root, rules): + """Find destinations for resources files""" + + def get_rel_path(root, path): + # normalizes and returns a lstripped-/-separated path + root = root.replace(os.path.sep, '/') + path = path.replace(os.path.sep, '/') + assert path.startswith(root) + return path[len(root):].lstrip('/') + + destinations = {} + for base, suffix, dest in rules: + prefix = os.path.join(resources_root, base) + for abs_base in iglob(prefix): + abs_glob = os.path.join(abs_base, suffix) + for abs_path in iglob(abs_glob): + resource_file = get_rel_path(resources_root, abs_path) + if dest is None: # remove the entry if it was here + destinations.pop(resource_file, None) + else: + rel_path = get_rel_path(abs_base, abs_path) + rel_dest = dest.replace(os.path.sep, '/').rstrip('/') + destinations[resource_file] = rel_dest + '/' + rel_path + return destinations + + +def in_venv(): + if hasattr(sys, 'real_prefix'): + # virtualenv venvs + result = True + else: + # PEP 405 venvs + result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) + return result + + +def get_executable(): + # The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as + # changes to the stub launcher mean that sys.executable always points + # to the stub on OS X + # if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' + # in os.environ): + # result = os.environ['__PYVENV_LAUNCHER__'] + # else: + # result = sys.executable + # return result + # Avoid normcasing: see issue #143 + # result = os.path.normcase(sys.executable) + result = sys.executable + if not isinstance(result, text_type): + result = fsdecode(result) + return result + + +def proceed(prompt, allowed_chars, error_prompt=None, default=None): + p = prompt + while True: + s = raw_input(p) + p = prompt + if not s and default: + s = default + if s: + c = s[0].lower() + if c in allowed_chars: + break + if error_prompt: + p = '%c: %s\n%s' % (c, error_prompt, prompt) + return c + + +def extract_by_key(d, keys): + if isinstance(keys, string_types): + keys = keys.split() + result = {} + for key in keys: + if key in d: + result[key] = d[key] + return result + + +def read_exports(stream): + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getreader('utf-8')(stream) + # Try to load as JSON, falling back on legacy format + data = stream.read() + stream = StringIO(data) + try: + jdata = json.load(stream) + result = jdata['extensions']['python.exports']['exports'] + for group, entries in result.items(): + for k, v in entries.items(): + s = '%s = %s' % (k, v) + entry = get_export_entry(s) + assert entry is not None + entries[k] = entry + return result + except Exception: + stream.seek(0, 0) + + def read_stream(cp, stream): + if hasattr(cp, 'read_file'): + cp.read_file(stream) + else: + cp.readfp(stream) + + cp = configparser.ConfigParser() + try: + read_stream(cp, stream) + except configparser.MissingSectionHeaderError: + stream.close() + data = textwrap.dedent(data) + stream = StringIO(data) + read_stream(cp, stream) + + result = {} + for key in cp.sections(): + result[key] = entries = {} + for name, value in cp.items(key): + s = '%s = %s' % (name, value) + entry = get_export_entry(s) + assert entry is not None + # entry.dist = self + entries[name] = entry + return result + + +def write_exports(exports, stream): + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getwriter('utf-8')(stream) + cp = configparser.ConfigParser() + for k, v in exports.items(): + # TODO check k, v for valid values + cp.add_section(k) + for entry in v.values(): + if entry.suffix is None: + s = entry.prefix + else: + s = '%s:%s' % (entry.prefix, entry.suffix) + if entry.flags: + s = '%s [%s]' % (s, ', '.join(entry.flags)) + cp.set(k, entry.name, s) + cp.write(stream) + + +@contextlib.contextmanager +def tempdir(): + td = tempfile.mkdtemp() + try: + yield td + finally: + shutil.rmtree(td) + + +@contextlib.contextmanager +def chdir(d): + cwd = os.getcwd() + try: + os.chdir(d) + yield + finally: + os.chdir(cwd) + + +@contextlib.contextmanager +def socket_timeout(seconds=15): + cto = socket.getdefaulttimeout() + try: + socket.setdefaulttimeout(seconds) + yield + finally: + socket.setdefaulttimeout(cto) + + +class cached_property(object): + + def __init__(self, func): + self.func = func + # for attr in ('__name__', '__module__', '__doc__'): + # setattr(self, attr, getattr(func, attr, None)) + + def __get__(self, obj, cls=None): + if obj is None: + return self + value = self.func(obj) + object.__setattr__(obj, self.func.__name__, value) + # obj.__dict__[self.func.__name__] = value = self.func(obj) + return value + + +def convert_path(pathname): + """Return 'pathname' as a name that will work on the native filesystem. + + The path is split on '/' and put back together again using the current + directory separator. Needed because filenames in the setup script are + always supplied in Unix style, and have to be converted to the local + convention before we can actually use them in the filesystem. Raises + ValueError on non-Unix-ish systems if 'pathname' either starts or + ends with a slash. + """ + if os.sep == '/': + return pathname + if not pathname: + return pathname + if pathname[0] == '/': + raise ValueError("path '%s' cannot be absolute" % pathname) + if pathname[-1] == '/': + raise ValueError("path '%s' cannot end with '/'" % pathname) + + paths = pathname.split('/') + while os.curdir in paths: + paths.remove(os.curdir) + if not paths: + return os.curdir + return os.path.join(*paths) + + +class FileOperator(object): + + def __init__(self, dry_run=False): + self.dry_run = dry_run + self.ensured = set() + self._init_record() + + def _init_record(self): + self.record = False + self.files_written = set() + self.dirs_created = set() + + def record_as_written(self, path): + if self.record: + self.files_written.add(path) + + def newer(self, source, target): + """Tell if the target is newer than the source. + + Returns true if 'source' exists and is more recently modified than + 'target', or if 'source' exists and 'target' doesn't. + + Returns false if both exist and 'target' is the same age or younger + than 'source'. Raise PackagingFileError if 'source' does not exist. + + Note that this test is not very accurate: files created in the same + second will have the same "age". + """ + if not os.path.exists(source): + raise DistlibException("file '%r' does not exist" % + os.path.abspath(source)) + if not os.path.exists(target): + return True + + return os.stat(source).st_mtime > os.stat(target).st_mtime + + def copy_file(self, infile, outfile, check=True): + """Copy a file respecting dry-run and force flags. + """ + self.ensure_dir(os.path.dirname(outfile)) + logger.info('Copying %s to %s', infile, outfile) + if not self.dry_run: + msg = None + if check: + if os.path.islink(outfile): + msg = '%s is a symlink' % outfile + elif os.path.exists(outfile) and not os.path.isfile(outfile): + msg = '%s is a non-regular file' % outfile + if msg: + raise ValueError(msg + ' which would be overwritten') + shutil.copyfile(infile, outfile) + self.record_as_written(outfile) + + def copy_stream(self, instream, outfile, encoding=None): + assert not os.path.isdir(outfile) + self.ensure_dir(os.path.dirname(outfile)) + logger.info('Copying stream %s to %s', instream, outfile) + if not self.dry_run: + if encoding is None: + outstream = open(outfile, 'wb') + else: + outstream = codecs.open(outfile, 'w', encoding=encoding) + try: + shutil.copyfileobj(instream, outstream) + finally: + outstream.close() + self.record_as_written(outfile) + + def write_binary_file(self, path, data): + self.ensure_dir(os.path.dirname(path)) + if not self.dry_run: + if os.path.exists(path): + os.remove(path) + with open(path, 'wb') as f: + f.write(data) + self.record_as_written(path) + + def write_text_file(self, path, data, encoding): + self.write_binary_file(path, data.encode(encoding)) + + def set_mode(self, bits, mask, files): + if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): + # Set the executable bits (owner, group, and world) on + # all the files specified. + for f in files: + if self.dry_run: + logger.info("changing mode of %s", f) + else: + mode = (os.stat(f).st_mode | bits) & mask + logger.info("changing mode of %s to %o", f, mode) + os.chmod(f, mode) + + set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) + + def ensure_dir(self, path): + path = os.path.abspath(path) + if path not in self.ensured and not os.path.exists(path): + self.ensured.add(path) + d, f = os.path.split(path) + self.ensure_dir(d) + logger.info('Creating %s' % path) + if not self.dry_run: + os.mkdir(path) + if self.record: + self.dirs_created.add(path) + + def byte_compile(self, + path, + optimize=False, + force=False, + prefix=None, + hashed_invalidation=False): + dpath = cache_from_source(path, not optimize) + logger.info('Byte-compiling %s to %s', path, dpath) + if not self.dry_run: + if force or self.newer(path, dpath): + if not prefix: + diagpath = None + else: + assert path.startswith(prefix) + diagpath = path[len(prefix):] + compile_kwargs = {} + if hashed_invalidation and hasattr(py_compile, + 'PycInvalidationMode'): + compile_kwargs[ + 'invalidation_mode'] = py_compile.PycInvalidationMode.CHECKED_HASH + py_compile.compile(path, dpath, diagpath, True, + **compile_kwargs) # raise error + self.record_as_written(dpath) + return dpath + + def ensure_removed(self, path): + if os.path.exists(path): + if os.path.isdir(path) and not os.path.islink(path): + logger.debug('Removing directory tree at %s', path) + if not self.dry_run: + shutil.rmtree(path) + if self.record: + if path in self.dirs_created: + self.dirs_created.remove(path) + else: + if os.path.islink(path): + s = 'link' + else: + s = 'file' + logger.debug('Removing %s %s', s, path) + if not self.dry_run: + os.remove(path) + if self.record: + if path in self.files_written: + self.files_written.remove(path) + + def is_writable(self, path): + result = False + while not result: + if os.path.exists(path): + result = os.access(path, os.W_OK) + break + parent = os.path.dirname(path) + if parent == path: + break + path = parent + return result + + def commit(self): + """ + Commit recorded changes, turn off recording, return + changes. + """ + assert self.record + result = self.files_written, self.dirs_created + self._init_record() + return result + + def rollback(self): + if not self.dry_run: + for f in list(self.files_written): + if os.path.exists(f): + os.remove(f) + # dirs should all be empty now, except perhaps for + # __pycache__ subdirs + # reverse so that subdirs appear before their parents + dirs = sorted(self.dirs_created, reverse=True) + for d in dirs: + flist = os.listdir(d) + if flist: + assert flist == ['__pycache__'] + sd = os.path.join(d, flist[0]) + os.rmdir(sd) + os.rmdir(d) # should fail if non-empty + self._init_record() + + +def resolve(module_name, dotted_path): + if module_name in sys.modules: + mod = sys.modules[module_name] + else: + mod = __import__(module_name) + if dotted_path is None: + result = mod + else: + parts = dotted_path.split('.') + result = getattr(mod, parts.pop(0)) + for p in parts: + result = getattr(result, p) + return result + + +class ExportEntry(object): + + def __init__(self, name, prefix, suffix, flags): + self.name = name + self.prefix = prefix + self.suffix = suffix + self.flags = flags + + @cached_property + def value(self): + return resolve(self.prefix, self.suffix) + + def __repr__(self): # pragma: no cover + return '' % (self.name, self.prefix, + self.suffix, self.flags) + + def __eq__(self, other): + if not isinstance(other, ExportEntry): + result = False + else: + result = (self.name == other.name and self.prefix == other.prefix + and self.suffix == other.suffix + and self.flags == other.flags) + return result + + __hash__ = object.__hash__ + + +ENTRY_RE = re.compile( + r'''(?P([^\[]\S*)) + \s*=\s*(?P(\w+)([:\.]\w+)*) + \s*(\[\s*(?P[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? + ''', re.VERBOSE) + + +def get_export_entry(specification): + m = ENTRY_RE.search(specification) + if not m: + result = None + if '[' in specification or ']' in specification: + raise DistlibException("Invalid specification " + "'%s'" % specification) + else: + d = m.groupdict() + name = d['name'] + path = d['callable'] + colons = path.count(':') + if colons == 0: + prefix, suffix = path, None + else: + if colons != 1: + raise DistlibException("Invalid specification " + "'%s'" % specification) + prefix, suffix = path.split(':') + flags = d['flags'] + if flags is None: + if '[' in specification or ']' in specification: + raise DistlibException("Invalid specification " + "'%s'" % specification) + flags = [] + else: + flags = [f.strip() for f in flags.split(',')] + result = ExportEntry(name, prefix, suffix, flags) + return result + + +def get_cache_base(suffix=None): + """ + Return the default base location for distlib caches. If the directory does + not exist, it is created. Use the suffix provided for the base directory, + and default to '.distlib' if it isn't provided. + + On Windows, if LOCALAPPDATA is defined in the environment, then it is + assumed to be a directory, and will be the parent directory of the result. + On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home + directory - using os.expanduser('~') - will be the parent directory of + the result. + + The result is just the directory '.distlib' in the parent directory as + determined above, or with the name specified with ``suffix``. + """ + if suffix is None: + suffix = '.distlib' + if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: + result = os.path.expandvars('$localappdata') + else: + # Assume posix, or old Windows + result = os.path.expanduser('~') + # we use 'isdir' instead of 'exists', because we want to + # fail if there's a file with that name + if os.path.isdir(result): + usable = os.access(result, os.W_OK) + if not usable: + logger.warning('Directory exists but is not writable: %s', result) + else: + try: + os.makedirs(result) + usable = True + except OSError: + logger.warning('Unable to create %s', result, exc_info=True) + usable = False + if not usable: + result = tempfile.mkdtemp() + logger.warning('Default location unusable, using %s', result) + return os.path.join(result, suffix) + + +def path_to_cache_dir(path): + """ + Convert an absolute path to a directory name for use in a cache. + + The algorithm used is: + + #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. + #. Any occurrence of ``os.sep`` is replaced with ``'--'``. + #. ``'.cache'`` is appended. + """ + d, p = os.path.splitdrive(os.path.abspath(path)) + if d: + d = d.replace(':', '---') + p = p.replace(os.sep, '--') + return d + p + '.cache' + + +def ensure_slash(s): + if not s.endswith('/'): + return s + '/' + return s + + +def parse_credentials(netloc): + username = password = None + if '@' in netloc: + prefix, netloc = netloc.rsplit('@', 1) + if ':' not in prefix: + username = prefix + else: + username, password = prefix.split(':', 1) + if username: + username = unquote(username) + if password: + password = unquote(password) + return username, password, netloc + + +def get_process_umask(): + result = os.umask(0o22) + os.umask(result) + return result + + +def is_string_sequence(seq): + result = True + i = None + for i, s in enumerate(seq): + if not isinstance(s, string_types): + result = False + break + assert i is not None + return result + + +PROJECT_NAME_AND_VERSION = re.compile( + '([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' + '([a-z0-9_.+-]+)', re.I) +PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') + + +def split_filename(filename, project_name=None): + """ + Extract name, version, python version from a filename (no extension) + + Return name, version, pyver or None + """ + result = None + pyver = None + filename = unquote(filename).replace(' ', '-') + m = PYTHON_VERSION.search(filename) + if m: + pyver = m.group(1) + filename = filename[:m.start()] + if project_name and len(filename) > len(project_name) + 1: + m = re.match(re.escape(project_name) + r'\b', filename) + if m: + n = m.end() + result = filename[:n], filename[n + 1:], pyver + if result is None: + m = PROJECT_NAME_AND_VERSION.match(filename) + if m: + result = m.group(1), m.group(3), pyver + return result + + +# Allow spaces in name because of legacy dists like "Twisted Core" +NAME_VERSION_RE = re.compile(r'(?P[\w .-]+)\s*' + r'\(\s*(?P[^\s)]+)\)$') + + +def parse_name_and_version(p): + """ + A utility method used to get name and version from a string. + + From e.g. a Provides-Dist value. + + :param p: A value in a form 'foo (1.0)' + :return: The name and version as a tuple. + """ + m = NAME_VERSION_RE.match(p) + if not m: + raise DistlibException('Ill-formed name/version string: \'%s\'' % p) + d = m.groupdict() + return d['name'].strip().lower(), d['ver'] + + +def get_extras(requested, available): + result = set() + requested = set(requested or []) + available = set(available or []) + if '*' in requested: + requested.remove('*') + result |= available + for r in requested: + if r == '-': + result.add(r) + elif r.startswith('-'): + unwanted = r[1:] + if unwanted not in available: + logger.warning('undeclared extra: %s' % unwanted) + if unwanted in result: + result.remove(unwanted) + else: + if r not in available: + logger.warning('undeclared extra: %s' % r) + result.add(r) + return result + + +# +# Extended metadata functionality +# + + +def _get_external_data(url): + result = {} + try: + # urlopen might fail if it runs into redirections, + # because of Python issue #13696. Fixed in locators + # using a custom redirect handler. + resp = urlopen(url) + headers = resp.info() + ct = headers.get('Content-Type') + if not ct.startswith('application/json'): + logger.debug('Unexpected response for JSON request: %s', ct) + else: + reader = codecs.getreader('utf-8')(resp) + # data = reader.read().decode('utf-8') + # result = json.loads(data) + result = json.load(reader) + except Exception as e: + logger.exception('Failed to get external data for %s: %s', url, e) + return result + + +_external_data_base_url = 'https://www.red-dove.com/pypi/projects/' + + +def get_project_data(name): + url = '%s/%s/project.json' % (name[0].upper(), name) + url = urljoin(_external_data_base_url, url) + result = _get_external_data(url) + return result + + +def get_package_data(name, version): + url = '%s/%s/package-%s.json' % (name[0].upper(), name, version) + url = urljoin(_external_data_base_url, url) + return _get_external_data(url) + + +class Cache(object): + """ + A class implementing a cache for resources that need to live in the file system + e.g. shared libraries. This class was moved from resources to here because it + could be used by other modules, e.g. the wheel module. + """ + + def __init__(self, base): + """ + Initialise an instance. + + :param base: The base directory where the cache should be located. + """ + # we use 'isdir' instead of 'exists', because we want to + # fail if there's a file with that name + if not os.path.isdir(base): # pragma: no cover + os.makedirs(base) + if (os.stat(base).st_mode & 0o77) != 0: + logger.warning('Directory \'%s\' is not private', base) + self.base = os.path.abspath(os.path.normpath(base)) + + def prefix_to_dir(self, prefix): + """ + Converts a resource prefix to a directory name in the cache. + """ + return path_to_cache_dir(prefix) + + def clear(self): + """ + Clear the cache. + """ + not_removed = [] + for fn in os.listdir(self.base): + fn = os.path.join(self.base, fn) + try: + if os.path.islink(fn) or os.path.isfile(fn): + os.remove(fn) + elif os.path.isdir(fn): + shutil.rmtree(fn) + except Exception: + not_removed.append(fn) + return not_removed + + +class EventMixin(object): + """ + A very simple publish/subscribe system. + """ + + def __init__(self): + self._subscribers = {} + + def add(self, event, subscriber, append=True): + """ + Add a subscriber for an event. + + :param event: The name of an event. + :param subscriber: The subscriber to be added (and called when the + event is published). + :param append: Whether to append or prepend the subscriber to an + existing subscriber list for the event. + """ + subs = self._subscribers + if event not in subs: + subs[event] = deque([subscriber]) + else: + sq = subs[event] + if append: + sq.append(subscriber) + else: + sq.appendleft(subscriber) + + def remove(self, event, subscriber): + """ + Remove a subscriber for an event. + + :param event: The name of an event. + :param subscriber: The subscriber to be removed. + """ + subs = self._subscribers + if event not in subs: + raise ValueError('No subscribers: %r' % event) + subs[event].remove(subscriber) + + def get_subscribers(self, event): + """ + Return an iterator for the subscribers for an event. + :param event: The event to return subscribers for. + """ + return iter(self._subscribers.get(event, ())) + + def publish(self, event, *args, **kwargs): + """ + Publish a event and return a list of values returned by its + subscribers. + + :param event: The event to publish. + :param args: The positional arguments to pass to the event's + subscribers. + :param kwargs: The keyword arguments to pass to the event's + subscribers. + """ + result = [] + for subscriber in self.get_subscribers(event): + try: + value = subscriber(event, *args, **kwargs) + except Exception: + logger.exception('Exception during event publication') + value = None + result.append(value) + logger.debug('publish %s: args = %s, kwargs = %s, result = %s', event, + args, kwargs, result) + return result + + +# +# Simple sequencing +# +class Sequencer(object): + + def __init__(self): + self._preds = {} + self._succs = {} + self._nodes = set() # nodes with no preds/succs + + def add_node(self, node): + self._nodes.add(node) + + def remove_node(self, node, edges=False): + if node in self._nodes: + self._nodes.remove(node) + if edges: + for p in set(self._preds.get(node, ())): + self.remove(p, node) + for s in set(self._succs.get(node, ())): + self.remove(node, s) + # Remove empties + for k, v in list(self._preds.items()): + if not v: + del self._preds[k] + for k, v in list(self._succs.items()): + if not v: + del self._succs[k] + + def add(self, pred, succ): + assert pred != succ + self._preds.setdefault(succ, set()).add(pred) + self._succs.setdefault(pred, set()).add(succ) + + def remove(self, pred, succ): + assert pred != succ + try: + preds = self._preds[succ] + succs = self._succs[pred] + except KeyError: # pragma: no cover + raise ValueError('%r not a successor of anything' % succ) + try: + preds.remove(pred) + succs.remove(succ) + except KeyError: # pragma: no cover + raise ValueError('%r not a successor of %r' % (succ, pred)) + + def is_step(self, step): + return (step in self._preds or step in self._succs + or step in self._nodes) + + def get_steps(self, final): + if not self.is_step(final): + raise ValueError('Unknown: %r' % final) + result = [] + todo = [] + seen = set() + todo.append(final) + while todo: + step = todo.pop(0) + if step in seen: + # if a step was already seen, + # move it to the end (so it will appear earlier + # when reversed on return) ... but not for the + # final step, as that would be confusing for + # users + if step != final: + result.remove(step) + result.append(step) + else: + seen.add(step) + result.append(step) + preds = self._preds.get(step, ()) + todo.extend(preds) + return reversed(result) + + @property + def strong_connections(self): + # http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm + index_counter = [0] + stack = [] + lowlinks = {} + index = {} + result = [] + + graph = self._succs + + def strongconnect(node): + # set the depth index for this node to the smallest unused index + index[node] = index_counter[0] + lowlinks[node] = index_counter[0] + index_counter[0] += 1 + stack.append(node) + + # Consider successors + try: + successors = graph[node] + except Exception: + successors = [] + for successor in successors: + if successor not in lowlinks: + # Successor has not yet been visited + strongconnect(successor) + lowlinks[node] = min(lowlinks[node], lowlinks[successor]) + elif successor in stack: + # the successor is in the stack and hence in the current + # strongly connected component (SCC) + lowlinks[node] = min(lowlinks[node], index[successor]) + + # If `node` is a root node, pop the stack and generate an SCC + if lowlinks[node] == index[node]: + connected_component = [] + + while True: + successor = stack.pop() + connected_component.append(successor) + if successor == node: + break + component = tuple(connected_component) + # storing the result + result.append(component) + + for node in graph: + if node not in lowlinks: + strongconnect(node) + + return result + + @property + def dot(self): + result = ['digraph G {'] + for succ in self._preds: + preds = self._preds[succ] + for pred in preds: + result.append(' %s -> %s;' % (pred, succ)) + for node in self._nodes: + result.append(' %s;' % node) + result.append('}') + return '\n'.join(result) + + +# +# Unarchiving functionality for zip, tar, tgz, tbz, whl +# + +ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz', + '.whl') + + +def unarchive(archive_filename, dest_dir, format=None, check=True): + + def check_path(path): + if not isinstance(path, text_type): + path = path.decode('utf-8') + p = os.path.abspath(os.path.join(dest_dir, path)) + if not p.startswith(dest_dir) or p[plen] != os.sep: + raise ValueError('path outside destination: %r' % p) + + dest_dir = os.path.abspath(dest_dir) + plen = len(dest_dir) + archive = None + if format is None: + if archive_filename.endswith(('.zip', '.whl')): + format = 'zip' + elif archive_filename.endswith(('.tar.gz', '.tgz')): + format = 'tgz' + mode = 'r:gz' + elif archive_filename.endswith(('.tar.bz2', '.tbz')): + format = 'tbz' + mode = 'r:bz2' + elif archive_filename.endswith('.tar'): + format = 'tar' + mode = 'r' + else: # pragma: no cover + raise ValueError('Unknown format for %r' % archive_filename) + try: + if format == 'zip': + archive = ZipFile(archive_filename, 'r') + if check: + names = archive.namelist() + for name in names: + check_path(name) + else: + archive = tarfile.open(archive_filename, mode) + if check: + names = archive.getnames() + for name in names: + check_path(name) + if format != 'zip' and sys.version_info[0] < 3: + # See Python issue 17153. If the dest path contains Unicode, + # tarfile extraction fails on Python 2.x if a member path name + # contains non-ASCII characters - it leads to an implicit + # bytes -> unicode conversion using ASCII to decode. + for tarinfo in archive.getmembers(): + if not isinstance(tarinfo.name, text_type): + tarinfo.name = tarinfo.name.decode('utf-8') + + # Limit extraction of dangerous items, if this Python + # allows it easily. If not, just trust the input. + # See: https://docs.python.org/3/library/tarfile.html#extraction-filters + def extraction_filter(member, path): + """Run tarfile.tar_filter, but raise the expected ValueError""" + # This is only called if the current Python has tarfile filters + try: + return tarfile.tar_filter(member, path) + except tarfile.FilterError as exc: + raise ValueError(str(exc)) + + archive.extraction_filter = extraction_filter + + archive.extractall(dest_dir) + + finally: + if archive: + archive.close() + + +def zip_dir(directory): + """zip a directory tree into a BytesIO object""" + result = io.BytesIO() + dlen = len(directory) + with ZipFile(result, "w") as zf: + for root, dirs, files in os.walk(directory): + for name in files: + full = os.path.join(root, name) + rel = root[dlen:] + dest = os.path.join(rel, name) + zf.write(full, dest) + return result + + +# +# Simple progress bar +# + +UNITS = ('', 'K', 'M', 'G', 'T', 'P') + + +class Progress(object): + unknown = 'UNKNOWN' + + def __init__(self, minval=0, maxval=100): + assert maxval is None or maxval >= minval + self.min = self.cur = minval + self.max = maxval + self.started = None + self.elapsed = 0 + self.done = False + + def update(self, curval): + assert self.min <= curval + assert self.max is None or curval <= self.max + self.cur = curval + now = time.time() + if self.started is None: + self.started = now + else: + self.elapsed = now - self.started + + def increment(self, incr): + assert incr >= 0 + self.update(self.cur + incr) + + def start(self): + self.update(self.min) + return self + + def stop(self): + if self.max is not None: + self.update(self.max) + self.done = True + + @property + def maximum(self): + return self.unknown if self.max is None else self.max + + @property + def percentage(self): + if self.done: + result = '100 %' + elif self.max is None: + result = ' ?? %' + else: + v = 100.0 * (self.cur - self.min) / (self.max - self.min) + result = '%3d %%' % v + return result + + def format_duration(self, duration): + if (duration <= 0) and self.max is None or self.cur == self.min: + result = '??:??:??' + # elif duration < 1: + # result = '--:--:--' + else: + result = time.strftime('%H:%M:%S', time.gmtime(duration)) + return result + + @property + def ETA(self): + if self.done: + prefix = 'Done' + t = self.elapsed + # import pdb; pdb.set_trace() + else: + prefix = 'ETA ' + if self.max is None: + t = -1 + elif self.elapsed == 0 or (self.cur == self.min): + t = 0 + else: + # import pdb; pdb.set_trace() + t = float(self.max - self.min) + t /= self.cur - self.min + t = (t - 1) * self.elapsed + return '%s: %s' % (prefix, self.format_duration(t)) + + @property + def speed(self): + if self.elapsed == 0: + result = 0.0 + else: + result = (self.cur - self.min) / self.elapsed + for unit in UNITS: + if result < 1000: + break + result /= 1000.0 + return '%d %sB/s' % (result, unit) + + +# +# Glob functionality +# + +RICH_GLOB = re.compile(r'\{([^}]*)\}') +_CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') +_CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') + + +def iglob(path_glob): + """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" + if _CHECK_RECURSIVE_GLOB.search(path_glob): + msg = """invalid glob %r: recursive glob "**" must be used alone""" + raise ValueError(msg % path_glob) + if _CHECK_MISMATCH_SET.search(path_glob): + msg = """invalid glob %r: mismatching set marker '{' or '}'""" + raise ValueError(msg % path_glob) + return _iglob(path_glob) + + +def _iglob(path_glob): + rich_path_glob = RICH_GLOB.split(path_glob, 1) + if len(rich_path_glob) > 1: + assert len(rich_path_glob) == 3, rich_path_glob + prefix, set, suffix = rich_path_glob + for item in set.split(','): + for path in _iglob(''.join((prefix, item, suffix))): + yield path + else: + if '**' not in path_glob: + for item in std_iglob(path_glob): + yield item + else: + prefix, radical = path_glob.split('**', 1) + if prefix == '': + prefix = '.' + if radical == '': + radical = '*' + else: + # we support both + radical = radical.lstrip('/') + radical = radical.lstrip('\\') + for path, dir, files in os.walk(prefix): + path = os.path.normpath(path) + for fn in _iglob(os.path.join(path, radical)): + yield fn + + +if ssl: + from .compat import (HTTPSHandler as BaseHTTPSHandler, match_hostname, + CertificateError) + + # + # HTTPSConnection which verifies certificates/matches domains + # + + class HTTPSConnection(httplib.HTTPSConnection): + ca_certs = None # set this to the path to the certs file (.pem) + check_domain = True # only used if ca_certs is not None + + # noinspection PyPropertyAccess + def connect(self): + sock = socket.create_connection((self.host, self.port), + self.timeout) + if getattr(self, '_tunnel_host', False): + self.sock = sock + self._tunnel() + + context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + if hasattr(ssl, 'OP_NO_SSLv2'): + context.options |= ssl.OP_NO_SSLv2 + if getattr(self, 'cert_file', None): + context.load_cert_chain(self.cert_file, self.key_file) + kwargs = {} + if self.ca_certs: + context.verify_mode = ssl.CERT_REQUIRED + context.load_verify_locations(cafile=self.ca_certs) + if getattr(ssl, 'HAS_SNI', False): + kwargs['server_hostname'] = self.host + + self.sock = context.wrap_socket(sock, **kwargs) + if self.ca_certs and self.check_domain: + try: + match_hostname(self.sock.getpeercert(), self.host) + logger.debug('Host verified: %s', self.host) + except CertificateError: # pragma: no cover + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + raise + + class HTTPSHandler(BaseHTTPSHandler): + + def __init__(self, ca_certs, check_domain=True): + BaseHTTPSHandler.__init__(self) + self.ca_certs = ca_certs + self.check_domain = check_domain + + def _conn_maker(self, *args, **kwargs): + """ + This is called to create a connection instance. Normally you'd + pass a connection class to do_open, but it doesn't actually check for + a class, and just expects a callable. As long as we behave just as a + constructor would have, we should be OK. If it ever changes so that + we *must* pass a class, we'll create an UnsafeHTTPSConnection class + which just sets check_domain to False in the class definition, and + choose which one to pass to do_open. + """ + result = HTTPSConnection(*args, **kwargs) + if self.ca_certs: + result.ca_certs = self.ca_certs + result.check_domain = self.check_domain + return result + + def https_open(self, req): + try: + return self.do_open(self._conn_maker, req) + except URLError as e: + if 'certificate verify failed' in str(e.reason): + raise CertificateError( + 'Unable to verify server certificate ' + 'for %s' % req.host) + else: + raise + + # + # To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- + # Middle proxy using HTTP listens on port 443, or an index mistakenly serves + # HTML containing a http://xyz link when it should be https://xyz), + # you can use the following handler class, which does not allow HTTP traffic. + # + # It works by inheriting from HTTPHandler - so build_opener won't add a + # handler for HTTP itself. + # + class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): + + def http_open(self, req): + raise URLError( + 'Unexpected HTTP request on what should be a secure ' + 'connection: %s' % req) + + +# +# XML-RPC with timeouts +# +class Transport(xmlrpclib.Transport): + + def __init__(self, timeout, use_datetime=0): + self.timeout = timeout + xmlrpclib.Transport.__init__(self, use_datetime) + + def make_connection(self, host): + h, eh, x509 = self.get_host_info(host) + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPConnection(h) + return self._connection[1] + + +if ssl: + + class SafeTransport(xmlrpclib.SafeTransport): + + def __init__(self, timeout, use_datetime=0): + self.timeout = timeout + xmlrpclib.SafeTransport.__init__(self, use_datetime) + + def make_connection(self, host): + h, eh, kwargs = self.get_host_info(host) + if not kwargs: + kwargs = {} + kwargs['timeout'] = self.timeout + if not self._connection or host != self._connection[0]: + self._extra_headers = eh + self._connection = host, httplib.HTTPSConnection( + h, None, **kwargs) + return self._connection[1] + + +class ServerProxy(xmlrpclib.ServerProxy): + + def __init__(self, uri, **kwargs): + self.timeout = timeout = kwargs.pop('timeout', None) + # The above classes only come into play if a timeout + # is specified + if timeout is not None: + # scheme = splittype(uri) # deprecated as of Python 3.8 + scheme = urlparse(uri)[0] + use_datetime = kwargs.get('use_datetime', 0) + if scheme == 'https': + tcls = SafeTransport + else: + tcls = Transport + kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) + self.transport = t + xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) + + +# +# CSV functionality. This is provided because on 2.x, the csv module can't +# handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. +# + + +def _csv_open(fn, mode, **kwargs): + if sys.version_info[0] < 3: + mode += 'b' + else: + kwargs['newline'] = '' + # Python 3 determines encoding from locale. Force 'utf-8' + # file encoding to match other forced utf-8 encoding + kwargs['encoding'] = 'utf-8' + return open(fn, mode, **kwargs) + + +class CSVBase(object): + defaults = { + 'delimiter': str(','), # The strs are used because we need native + 'quotechar': str('"'), # str in the csv API (2.x won't take + 'lineterminator': str('\n') # Unicode) + } + + def __enter__(self): + return self + + def __exit__(self, *exc_info): + self.stream.close() + + +class CSVReader(CSVBase): + + def __init__(self, **kwargs): + if 'stream' in kwargs: + stream = kwargs['stream'] + if sys.version_info[0] >= 3: + # needs to be a text stream + stream = codecs.getreader('utf-8')(stream) + self.stream = stream + else: + self.stream = _csv_open(kwargs['path'], 'r') + self.reader = csv.reader(self.stream, **self.defaults) + + def __iter__(self): + return self + + def next(self): + result = next(self.reader) + if sys.version_info[0] < 3: + for i, item in enumerate(result): + if not isinstance(item, text_type): + result[i] = item.decode('utf-8') + return result + + __next__ = next + + +class CSVWriter(CSVBase): + + def __init__(self, fn, **kwargs): + self.stream = _csv_open(fn, 'w') + self.writer = csv.writer(self.stream, **self.defaults) + + def writerow(self, row): + if sys.version_info[0] < 3: + r = [] + for item in row: + if isinstance(item, text_type): + item = item.encode('utf-8') + r.append(item) + row = r + self.writer.writerow(row) + + +# +# Configurator functionality +# + + +class Configurator(BaseConfigurator): + + value_converters = dict(BaseConfigurator.value_converters) + value_converters['inc'] = 'inc_convert' + + def __init__(self, config, base=None): + super(Configurator, self).__init__(config) + self.base = base or os.getcwd() + + def configure_custom(self, config): + + def convert(o): + if isinstance(o, (list, tuple)): + result = type(o)([convert(i) for i in o]) + elif isinstance(o, dict): + if '()' in o: + result = self.configure_custom(o) + else: + result = {} + for k in o: + result[k] = convert(o[k]) + else: + result = self.convert(o) + return result + + c = config.pop('()') + if not callable(c): + c = self.resolve(c) + props = config.pop('.', None) + # Check for valid identifiers + args = config.pop('[]', ()) + if args: + args = tuple([convert(o) for o in args]) + items = [(k, convert(config[k])) for k in config if valid_ident(k)] + kwargs = dict(items) + result = c(*args, **kwargs) + if props: + for n, v in props.items(): + setattr(result, n, convert(v)) + return result + + def __getitem__(self, key): + result = self.config[key] + if isinstance(result, dict) and '()' in result: + self.config[key] = result = self.configure_custom(result) + return result + + def inc_convert(self, value): + """Default converter for the inc:// protocol.""" + if not os.path.isabs(value): + value = os.path.join(self.base, value) + with codecs.open(value, 'r', encoding='utf-8') as f: + result = json.load(f) + return result + + +class SubprocessMixin(object): + """ + Mixin for running subprocesses and capturing their output + """ + + def __init__(self, verbose=False, progress=None): + self.verbose = verbose + self.progress = progress + + def reader(self, stream, context): + """ + Read lines from a subprocess' output stream and either pass to a progress + callable (if specified) or write progress information to sys.stderr. + """ + progress = self.progress + verbose = self.verbose + while True: + s = stream.readline() + if not s: + break + if progress is not None: + progress(s, context) + else: + if not verbose: + sys.stderr.write('.') + else: + sys.stderr.write(s.decode('utf-8')) + sys.stderr.flush() + stream.close() + + def run_command(self, cmd, **kwargs): + p = subprocess.Popen(cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + **kwargs) + t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) + t1.start() + t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) + t2.start() + p.wait() + t1.join() + t2.join() + if self.progress is not None: + self.progress('done.', 'main') + elif self.verbose: + sys.stderr.write('done.\n') + return p + + +def normalize_name(name): + """Normalize a python package name a la PEP 503""" + # https://www.python.org/dev/peps/pep-0503/#normalized-names + return re.sub('[-_.]+', '-', name).lower() + + +# def _get_pypirc_command(): +# """ +# Get the distutils command for interacting with PyPI configurations. +# :return: the command. +# """ +# from distutils.core import Distribution +# from distutils.config import PyPIRCCommand +# d = Distribution() +# return PyPIRCCommand(d) + + +class PyPIRCFile(object): + + DEFAULT_REPOSITORY = 'https://upload.pypi.org/legacy/' + DEFAULT_REALM = 'pypi' + + def __init__(self, fn=None, url=None): + if fn is None: + fn = os.path.join(os.path.expanduser('~'), '.pypirc') + self.filename = fn + self.url = url + + def read(self): + result = {} + + if os.path.exists(self.filename): + repository = self.url or self.DEFAULT_REPOSITORY + + config = configparser.RawConfigParser() + config.read(self.filename) + sections = config.sections() + if 'distutils' in sections: + # let's get the list of servers + index_servers = config.get('distutils', 'index-servers') + _servers = [ + server.strip() for server in index_servers.split('\n') + if server.strip() != '' + ] + if _servers == []: + # nothing set, let's try to get the default pypi + if 'pypi' in sections: + _servers = ['pypi'] + else: + for server in _servers: + result = {'server': server} + result['username'] = config.get(server, 'username') + + # optional params + for key, default in (('repository', + self.DEFAULT_REPOSITORY), + ('realm', self.DEFAULT_REALM), + ('password', None)): + if config.has_option(server, key): + result[key] = config.get(server, key) + else: + result[key] = default + + # work around people having "repository" for the "pypi" + # section of their config set to the HTTP (rather than + # HTTPS) URL + if (server == 'pypi' and repository + in (self.DEFAULT_REPOSITORY, 'pypi')): + result['repository'] = self.DEFAULT_REPOSITORY + elif (result['server'] != repository + and result['repository'] != repository): + result = {} + elif 'server-login' in sections: + # old format + server = 'server-login' + if config.has_option(server, 'repository'): + repository = config.get(server, 'repository') + else: + repository = self.DEFAULT_REPOSITORY + result = { + 'username': config.get(server, 'username'), + 'password': config.get(server, 'password'), + 'repository': repository, + 'server': server, + 'realm': self.DEFAULT_REALM + } + return result + + def update(self, username, password): + # import pdb; pdb.set_trace() + config = configparser.RawConfigParser() + fn = self.filename + config.read(fn) + if not config.has_section('pypi'): + config.add_section('pypi') + config.set('pypi', 'username', username) + config.set('pypi', 'password', password) + with open(fn, 'w') as f: + config.write(f) + + +def _load_pypirc(index): + """ + Read the PyPI access configuration as supported by distutils. + """ + return PyPIRCFile(url=index.url).read() + + +def _store_pypirc(index): + PyPIRCFile().update(index.username, index.password) + + +# +# get_platform()/get_host_platform() copied from Python 3.10.a0 source, with some minor +# tweaks +# + + +def get_host_platform(): + """Return a string that identifies the current platform. This is used mainly to + distinguish platform-specific build directories and platform-specific built + distributions. Typically includes the OS name and version and the + architecture (as supplied by 'os.uname()'), although the exact information + included depends on the OS; eg. on Linux, the kernel version isn't + particularly important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + + """ + if os.name == 'nt': + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): + return 'win-arm32' + if '(arm64)' in sys.version.lower(): + return 'win-arm64' + return sys.platform + + # Set for cross builds explicitly + if "_PYTHON_HOST_PLATFORM" in os.environ: + return os.environ["_PYTHON_HOST_PLATFORM"] + + if os.name != 'posix' or not hasattr(os, 'uname'): + # XXX what about the architecture? NT is Intel or Alpha, + # Mac OS is M68k or PPC, etc. + return sys.platform + + # Try to distinguish various flavours of Unix + + (osname, host, release, version, machine) = os.uname() + + # Convert the OS name to lowercase, remove '/' characters, and translate + # spaces (for "Power Macintosh") + osname = osname.lower().replace('/', '') + machine = machine.replace(' ', '_').replace('/', '-') + + if osname[:5] == 'linux': + # At least on Linux/Intel, 'machine' is the processor -- + # i386, etc. + # XXX what about Alpha, SPARC, etc? + return "%s-%s" % (osname, machine) + + elif osname[:5] == 'sunos': + if release[0] >= '5': # SunOS 5 == Solaris 2 + osname = 'solaris' + release = '%d.%s' % (int(release[0]) - 3, release[2:]) + # We can't use 'platform.architecture()[0]' because a + # bootstrap problem. We use a dict to get an error + # if some suspicious happens. + bitness = {2147483647: '32bit', 9223372036854775807: '64bit'} + machine += '.%s' % bitness[sys.maxsize] + # fall through to standard osname-release-machine representation + elif osname[:3] == 'aix': + from _aix_support import aix_platform + return aix_platform() + elif osname[:6] == 'cygwin': + osname = 'cygwin' + rel_re = re.compile(r'[\d.]+', re.ASCII) + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == 'darwin': + import _osx_support + try: + from distutils import sysconfig + except ImportError: + import sysconfig + osname, release, machine = _osx_support.get_platform_osx( + sysconfig.get_config_vars(), osname, release, machine) + + return '%s-%s-%s' % (osname, release, machine) + + +_TARGET_TO_PLAT = { + 'x86': 'win32', + 'x64': 'win-amd64', + 'arm': 'win-arm32', +} + + +def get_platform(): + if os.name != 'nt': + return get_host_platform() + cross_compilation_target = os.environ.get('VSCMD_ARG_TGT_ARCH') + if cross_compilation_target not in _TARGET_TO_PLAT: + return get_host_platform() + return _TARGET_TO_PLAT[cross_compilation_target] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/version.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/version.py new file mode 100644 index 0000000..14171ac --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/version.py @@ -0,0 +1,751 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012-2023 The Python Software Foundation. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +""" +Implementation of a flexible versioning scheme providing support for PEP-440, +setuptools-compatible and semantic versioning. +""" + +import logging +import re + +from .compat import string_types +from .util import parse_requirement + +__all__ = ['NormalizedVersion', 'NormalizedMatcher', + 'LegacyVersion', 'LegacyMatcher', + 'SemanticVersion', 'SemanticMatcher', + 'UnsupportedVersionError', 'get_scheme'] + +logger = logging.getLogger(__name__) + + +class UnsupportedVersionError(ValueError): + """This is an unsupported version.""" + pass + + +class Version(object): + def __init__(self, s): + self._string = s = s.strip() + self._parts = parts = self.parse(s) + assert isinstance(parts, tuple) + assert len(parts) > 0 + + def parse(self, s): + raise NotImplementedError('please implement in a subclass') + + def _check_compatible(self, other): + if type(self) != type(other): + raise TypeError('cannot compare %r and %r' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + def __lt__(self, other): + self._check_compatible(other) + return self._parts < other._parts + + def __gt__(self, other): + return not (self.__lt__(other) or self.__eq__(other)) + + def __le__(self, other): + return self.__lt__(other) or self.__eq__(other) + + def __ge__(self, other): + return self.__gt__(other) or self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self._parts) + + def __repr__(self): + return "%s('%s')" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + @property + def is_prerelease(self): + raise NotImplementedError('Please implement in subclasses.') + + +class Matcher(object): + version_class = None + + # value is either a callable or the name of a method + _operators = { + '<': lambda v, c, p: v < c, + '>': lambda v, c, p: v > c, + '<=': lambda v, c, p: v == c or v < c, + '>=': lambda v, c, p: v == c or v > c, + '==': lambda v, c, p: v == c, + '===': lambda v, c, p: v == c, + # by default, compatible => >=. + '~=': lambda v, c, p: v == c or v > c, + '!=': lambda v, c, p: v != c, + } + + # this is a method only to support alternative implementations + # via overriding + def parse_requirement(self, s): + return parse_requirement(s) + + def __init__(self, s): + if self.version_class is None: + raise ValueError('Please specify a version class') + self._string = s = s.strip() + r = self.parse_requirement(s) + if not r: + raise ValueError('Not valid: %r' % s) + self.name = r.name + self.key = self.name.lower() # for case-insensitive comparisons + clist = [] + if r.constraints: + # import pdb; pdb.set_trace() + for op, s in r.constraints: + if s.endswith('.*'): + if op not in ('==', '!='): + raise ValueError('\'.*\' not allowed for ' + '%r constraints' % op) + # Could be a partial version (e.g. for '2.*') which + # won't parse as a version, so keep it as a string + vn, prefix = s[:-2], True + # Just to check that vn is a valid version + self.version_class(vn) + else: + # Should parse as a version, so we can create an + # instance for the comparison + vn, prefix = self.version_class(s), False + clist.append((op, vn, prefix)) + self._parts = tuple(clist) + + def match(self, version): + """ + Check if the provided version matches the constraints. + + :param version: The version to match against this instance. + :type version: String or :class:`Version` instance. + """ + if isinstance(version, string_types): + version = self.version_class(version) + for operator, constraint, prefix in self._parts: + f = self._operators.get(operator) + if isinstance(f, string_types): + f = getattr(self, f) + if not f: + msg = ('%r not implemented ' + 'for %s' % (operator, self.__class__.__name__)) + raise NotImplementedError(msg) + if not f(version, constraint, prefix): + return False + return True + + @property + def exact_version(self): + result = None + if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): + result = self._parts[0][1] + return result + + def _check_compatible(self, other): + if type(self) != type(other) or self.name != other.name: + raise TypeError('cannot compare %s and %s' % (self, other)) + + def __eq__(self, other): + self._check_compatible(other) + return self.key == other.key and self._parts == other._parts + + def __ne__(self, other): + return not self.__eq__(other) + + # See http://docs.python.org/reference/datamodel#object.__hash__ + def __hash__(self): + return hash(self.key) + hash(self._parts) + + def __repr__(self): + return "%s(%r)" % (self.__class__.__name__, self._string) + + def __str__(self): + return self._string + + +PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|alpha|b|beta|c|rc|pre|preview)(\d+)?)?' + r'(\.(post|r|rev)(\d+)?)?([._-]?(dev)(\d+)?)?' + r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$', re.I) + + +def _pep_440_key(s): + s = s.strip() + m = PEP440_VERSION_RE.match(s) + if not m: + raise UnsupportedVersionError('Not a valid version: %s' % s) + groups = m.groups() + nums = tuple(int(v) for v in groups[1].split('.')) + while len(nums) > 1 and nums[-1] == 0: + nums = nums[:-1] + + if not groups[0]: + epoch = 0 + else: + epoch = int(groups[0][:-1]) + pre = groups[4:6] + post = groups[7:9] + dev = groups[10:12] + local = groups[13] + if pre == (None, None): + pre = () + else: + if pre[1] is None: + pre = pre[0], 0 + else: + pre = pre[0], int(pre[1]) + if post == (None, None): + post = () + else: + if post[1] is None: + post = post[0], 0 + else: + post = post[0], int(post[1]) + if dev == (None, None): + dev = () + else: + if dev[1] is None: + dev = dev[0], 0 + else: + dev = dev[0], int(dev[1]) + if local is None: + local = () + else: + parts = [] + for part in local.split('.'): + # to ensure that numeric compares as > lexicographic, avoid + # comparing them directly, but encode a tuple which ensures + # correct sorting + if part.isdigit(): + part = (1, int(part)) + else: + part = (0, part) + parts.append(part) + local = tuple(parts) + if not pre: + # either before pre-release, or final release and after + if not post and dev: + # before pre-release + pre = ('a', -1) # to sort before a0 + else: + pre = ('z',) # to sort after all pre-releases + # now look at the state of post and dev. + if not post: + post = ('_',) # sort before 'a' + if not dev: + dev = ('final',) + + return epoch, nums, pre, post, dev, local + + +_normalized_key = _pep_440_key + + +class NormalizedVersion(Version): + """A rational version. + + Good: + 1.2 # equivalent to "1.2.0" + 1.2.0 + 1.2a1 + 1.2.3a2 + 1.2.3b1 + 1.2.3c1 + 1.2.3.4 + TODO: fill this out + + Bad: + 1 # minimum two numbers + 1.2a # release level must have a release serial + 1.2.3b + """ + def parse(self, s): + result = _normalized_key(s) + # _normalized_key loses trailing zeroes in the release + # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 + # However, PEP 440 prefix matching needs it: for example, + # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). + m = PEP440_VERSION_RE.match(s) # must succeed + groups = m.groups() + self._release_clause = tuple(int(v) for v in groups[1].split('.')) + return result + + PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) + + @property + def is_prerelease(self): + return any(t[0] in self.PREREL_TAGS for t in self._parts if t) + + +def _match_prefix(x, y): + x = str(x) + y = str(y) + if x == y: + return True + if not x.startswith(y): + return False + n = len(y) + return x[n] == '.' + + +class NormalizedMatcher(Matcher): + version_class = NormalizedVersion + + # value is either a callable or the name of a method + _operators = { + '~=': '_match_compatible', + '<': '_match_lt', + '>': '_match_gt', + '<=': '_match_le', + '>=': '_match_ge', + '==': '_match_eq', + '===': '_match_arbitrary', + '!=': '_match_ne', + } + + def _adjust_local(self, version, constraint, prefix): + if prefix: + strip_local = '+' not in constraint and version._parts[-1] + else: + # both constraint and version are + # NormalizedVersion instances. + # If constraint does not have a local component, + # ensure the version doesn't, either. + strip_local = not constraint._parts[-1] and version._parts[-1] + if strip_local: + s = version._string.split('+', 1)[0] + version = self.version_class(s) + return version, constraint + + def _match_lt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version >= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_gt(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version <= constraint: + return False + release_clause = constraint._release_clause + pfx = '.'.join([str(i) for i in release_clause]) + return not _match_prefix(version, pfx) + + def _match_le(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version <= constraint + + def _match_ge(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + return version >= constraint + + def _match_eq(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version == constraint) + else: + result = _match_prefix(version, constraint) + return result + + def _match_arbitrary(self, version, constraint, prefix): + return str(version) == str(constraint) + + def _match_ne(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if not prefix: + result = (version != constraint) + else: + result = not _match_prefix(version, constraint) + return result + + def _match_compatible(self, version, constraint, prefix): + version, constraint = self._adjust_local(version, constraint, prefix) + if version == constraint: + return True + if version < constraint: + return False +# if not prefix: +# return True + release_clause = constraint._release_clause + if len(release_clause) > 1: + release_clause = release_clause[:-1] + pfx = '.'.join([str(i) for i in release_clause]) + return _match_prefix(version, pfx) + + +_REPLACEMENTS = ( + (re.compile('[.+-]$'), ''), # remove trailing puncts + (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start + (re.compile('^[.-]'), ''), # remove leading puncts + (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses + (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha + (re.compile(r'\b(pre-alpha|prealpha)\b'), + 'pre.alpha'), # standardise + (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses +) + +_SUFFIX_REPLACEMENTS = ( + (re.compile('^[:~._+-]+'), ''), # remove leading puncts + (re.compile('[,*")([\\]]'), ''), # remove unwanted chars + (re.compile('[~:+_ -]'), '.'), # replace illegal chars + (re.compile('[.]{2,}'), '.'), # multiple runs of '.' + (re.compile(r'\.$'), ''), # trailing '.' +) + +_NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') + + +def _suggest_semantic_version(s): + """ + Try to suggest a semantic form for a version for which + _suggest_normalized_version couldn't come up with anything. + """ + result = s.strip().lower() + for pat, repl in _REPLACEMENTS: + result = pat.sub(repl, result) + if not result: + result = '0.0.0' + + # Now look for numeric prefix, and separate it out from + # the rest. + # import pdb; pdb.set_trace() + m = _NUMERIC_PREFIX.match(result) + if not m: + prefix = '0.0.0' + suffix = result + else: + prefix = m.groups()[0].split('.') + prefix = [int(i) for i in prefix] + while len(prefix) < 3: + prefix.append(0) + if len(prefix) == 3: + suffix = result[m.end():] + else: + suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] + prefix = prefix[:3] + prefix = '.'.join([str(i) for i in prefix]) + suffix = suffix.strip() + if suffix: + # import pdb; pdb.set_trace() + # massage the suffix. + for pat, repl in _SUFFIX_REPLACEMENTS: + suffix = pat.sub(repl, suffix) + + if not suffix: + result = prefix + else: + sep = '-' if 'dev' in suffix else '+' + result = prefix + sep + suffix + if not is_semver(result): + result = None + return result + + +def _suggest_normalized_version(s): + """Suggest a normalized version close to the given version string. + + If you have a version string that isn't rational (i.e. NormalizedVersion + doesn't like it) then you might be able to get an equivalent (or close) + rational version from this function. + + This does a number of simple normalizations to the given string, based + on observation of versions currently in use on PyPI. Given a dump of + those version during PyCon 2009, 4287 of them: + - 2312 (53.93%) match NormalizedVersion without change + with the automatic suggestion + - 3474 (81.04%) match when using this suggestion method + + @param s {str} An irrational version string. + @returns A rational version string, or None, if couldn't determine one. + """ + try: + _normalized_key(s) + return s # already rational + except UnsupportedVersionError: + pass + + rs = s.lower() + + # part of this could use maketrans + for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), + ('beta', 'b'), ('rc', 'c'), ('-final', ''), + ('-pre', 'c'), + ('-release', ''), ('.release', ''), ('-stable', ''), + ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), + ('final', '')): + rs = rs.replace(orig, repl) + + # if something ends with dev or pre, we add a 0 + rs = re.sub(r"pre$", r"pre0", rs) + rs = re.sub(r"dev$", r"dev0", rs) + + # if we have something like "b-2" or "a.2" at the end of the + # version, that is probably beta, alpha, etc + # let's remove the dash or dot + rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) + + # 1.0-dev-r371 -> 1.0.dev371 + # 0.1-dev-r79 -> 0.1.dev79 + rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) + + # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 + rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) + + # Clean: v0.3, v1.0 + if rs.startswith('v'): + rs = rs[1:] + + # Clean leading '0's on numbers. + # TODO: unintended side-effect on, e.g., "2003.05.09" + # PyPI stats: 77 (~2%) better + rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) + + # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers + # zero. + # PyPI stats: 245 (7.56%) better + rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) + + # the 'dev-rNNN' tag is a dev tag + rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) + + # clean the - when used as a pre delimiter + rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) + + # a terminal "dev" or "devel" can be changed into ".dev0" + rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) + + # a terminal "dev" can be changed into ".dev0" + rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) + + # a terminal "final" or "stable" can be removed + rs = re.sub(r"(final|stable)$", "", rs) + + # The 'r' and the '-' tags are post release tags + # 0.4a1.r10 -> 0.4a1.post10 + # 0.9.33-17222 -> 0.9.33.post17222 + # 0.9.33-r17222 -> 0.9.33.post17222 + rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) + + # Clean 'r' instead of 'dev' usage: + # 0.9.33+r17222 -> 0.9.33.dev17222 + # 1.0dev123 -> 1.0.dev123 + # 1.0.git123 -> 1.0.dev123 + # 1.0.bzr123 -> 1.0.dev123 + # 0.1a0dev.123 -> 0.1a0.dev123 + # PyPI stats: ~150 (~4%) better + rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) + + # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: + # 0.2.pre1 -> 0.2c1 + # 0.2-c1 -> 0.2c1 + # 1.0preview123 -> 1.0c123 + # PyPI stats: ~21 (0.62%) better + rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) + + # Tcl/Tk uses "px" for their post release markers + rs = re.sub(r"p(\d+)$", r".post\1", rs) + + try: + _normalized_key(rs) + except UnsupportedVersionError: + rs = None + return rs + +# +# Legacy version processing (distribute-compatible) +# + + +_VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) +_VERSION_REPLACE = { + 'pre': 'c', + 'preview': 'c', + '-': 'final-', + 'rc': 'c', + 'dev': '@', + '': None, + '.': None, +} + + +def _legacy_key(s): + def get_parts(s): + result = [] + for p in _VERSION_PART.split(s.lower()): + p = _VERSION_REPLACE.get(p, p) + if p: + if '0' <= p[:1] <= '9': + p = p.zfill(8) + else: + p = '*' + p + result.append(p) + result.append('*final') + return result + + result = [] + for p in get_parts(s): + if p.startswith('*'): + if p < '*final': + while result and result[-1] == '*final-': + result.pop() + while result and result[-1] == '00000000': + result.pop() + result.append(p) + return tuple(result) + + +class LegacyVersion(Version): + def parse(self, s): + return _legacy_key(s) + + @property + def is_prerelease(self): + result = False + for x in self._parts: + if (isinstance(x, string_types) and x.startswith('*') and + x < '*final'): + result = True + break + return result + + +class LegacyMatcher(Matcher): + version_class = LegacyVersion + + _operators = dict(Matcher._operators) + _operators['~='] = '_match_compatible' + + numeric_re = re.compile(r'^(\d+(\.\d+)*)') + + def _match_compatible(self, version, constraint, prefix): + if version < constraint: + return False + m = self.numeric_re.match(str(constraint)) + if not m: + logger.warning('Cannot compute compatible match for version %s ' + ' and constraint %s', version, constraint) + return True + s = m.groups()[0] + if '.' in s: + s = s.rsplit('.', 1)[0] + return _match_prefix(version, s) + +# +# Semantic versioning +# + + +_SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' + r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' + r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) + + +def is_semver(s): + return _SEMVER_RE.match(s) + + +def _semantic_key(s): + def make_tuple(s, absent): + if s is None: + result = (absent,) + else: + parts = s[1:].split('.') + # We can't compare ints and strings on Python 3, so fudge it + # by zero-filling numeric values so simulate a numeric comparison + result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) + return result + + m = is_semver(s) + if not m: + raise UnsupportedVersionError(s) + groups = m.groups() + major, minor, patch = [int(i) for i in groups[:3]] + # choose the '|' and '*' so that versions sort correctly + pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') + return (major, minor, patch), pre, build + + +class SemanticVersion(Version): + def parse(self, s): + return _semantic_key(s) + + @property + def is_prerelease(self): + return self._parts[1][0] != '|' + + +class SemanticMatcher(Matcher): + version_class = SemanticVersion + + +class VersionScheme(object): + def __init__(self, key, matcher, suggester=None): + self.key = key + self.matcher = matcher + self.suggester = suggester + + def is_valid_version(self, s): + try: + self.matcher.version_class(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_matcher(self, s): + try: + self.matcher(s) + result = True + except UnsupportedVersionError: + result = False + return result + + def is_valid_constraint_list(self, s): + """ + Used for processing some metadata fields + """ + # See issue #140. Be tolerant of a single trailing comma. + if s.endswith(','): + s = s[:-1] + return self.is_valid_matcher('dummy_name (%s)' % s) + + def suggest(self, s): + if self.suggester is None: + result = None + else: + result = self.suggester(s) + return result + + +_SCHEMES = { + 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, + _suggest_normalized_version), + 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), + 'semantic': VersionScheme(_semantic_key, SemanticMatcher, + _suggest_semantic_version), +} + +_SCHEMES['default'] = _SCHEMES['normalized'] + + +def get_scheme(name): + if name not in _SCHEMES: + raise ValueError('unknown scheme name: %r' % name) + return _SCHEMES[name] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py new file mode 100644 index 0000000..4a5a30e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py @@ -0,0 +1,1099 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2023 Vinay Sajip. +# Licensed to the Python Software Foundation under a contributor agreement. +# See LICENSE.txt and CONTRIBUTORS.txt. +# +from __future__ import unicode_literals + +import base64 +import codecs +import datetime +from email import message_from_file +import hashlib +import json +import logging +import os +import posixpath +import re +import shutil +import sys +import tempfile +import zipfile + +from . import __version__, DistlibException +from .compat import sysconfig, ZipFile, fsdecode, text_type, filter +from .database import InstalledDistribution +from .metadata import Metadata, WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME +from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, + cached_property, get_cache_base, read_exports, tempdir, + get_platform) +from .version import NormalizedVersion, UnsupportedVersionError + +logger = logging.getLogger(__name__) + +cache = None # created when needed + +if hasattr(sys, 'pypy_version_info'): # pragma: no cover + IMP_PREFIX = 'pp' +elif sys.platform.startswith('java'): # pragma: no cover + IMP_PREFIX = 'jy' +elif sys.platform == 'cli': # pragma: no cover + IMP_PREFIX = 'ip' +else: + IMP_PREFIX = 'cp' + +VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') +if not VER_SUFFIX: # pragma: no cover + VER_SUFFIX = '%s%s' % sys.version_info[:2] +PYVER = 'py' + VER_SUFFIX +IMPVER = IMP_PREFIX + VER_SUFFIX + +ARCH = get_platform().replace('-', '_').replace('.', '_') + +ABI = sysconfig.get_config_var('SOABI') +if ABI and ABI.startswith('cpython-'): + ABI = ABI.replace('cpython-', 'cp').split('-')[0] +else: + + def _derive_abi(): + parts = ['cp', VER_SUFFIX] + if sysconfig.get_config_var('Py_DEBUG'): + parts.append('d') + if IMP_PREFIX == 'cp': + vi = sys.version_info[:2] + if vi < (3, 8): + wpm = sysconfig.get_config_var('WITH_PYMALLOC') + if wpm is None: + wpm = True + if wpm: + parts.append('m') + if vi < (3, 3): + us = sysconfig.get_config_var('Py_UNICODE_SIZE') + if us == 4 or (us is None and sys.maxunicode == 0x10FFFF): + parts.append('u') + return ''.join(parts) + + ABI = _derive_abi() + del _derive_abi + +FILENAME_RE = re.compile( + r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))? +-(?P\w+\d+(\.\w+\d+)*) +-(?P\w+) +-(?P\w+(\.\w+)*) +\.whl$ +''', re.IGNORECASE | re.VERBOSE) + +NAME_VERSION_RE = re.compile( + r''' +(?P[^-]+) +-(?P\d+[^-]*) +(-(?P\d+[^-]*))?$ +''', re.IGNORECASE | re.VERBOSE) + +SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') +SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') +SHEBANG_PYTHON = b'#!python' +SHEBANG_PYTHONW = b'#!pythonw' + +if os.sep == '/': + to_posix = lambda o: o +else: + to_posix = lambda o: o.replace(os.sep, '/') + +if sys.version_info[0] < 3: + import imp +else: + imp = None + import importlib.machinery + import importlib.util + + +def _get_suffixes(): + if imp: + return [s[0] for s in imp.get_suffixes()] + else: + return importlib.machinery.EXTENSION_SUFFIXES + + +def _load_dynamic(name, path): + # https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly + if imp: + return imp.load_dynamic(name, path) + else: + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +class Mounter(object): + + def __init__(self): + self.impure_wheels = {} + self.libs = {} + + def add(self, pathname, extensions): + self.impure_wheels[pathname] = extensions + self.libs.update(extensions) + + def remove(self, pathname): + extensions = self.impure_wheels.pop(pathname) + for k, v in extensions: + if k in self.libs: + del self.libs[k] + + def find_module(self, fullname, path=None): + if fullname in self.libs: + result = self + else: + result = None + return result + + def load_module(self, fullname): + if fullname in sys.modules: + result = sys.modules[fullname] + else: + if fullname not in self.libs: + raise ImportError('unable to find extension for %s' % fullname) + result = _load_dynamic(fullname, self.libs[fullname]) + result.__loader__ = self + parts = fullname.rsplit('.', 1) + if len(parts) > 1: + result.__package__ = parts[0] + return result + + +_hook = Mounter() + + +class Wheel(object): + """ + Class to build and install from Wheel files (PEP 427). + """ + + wheel_version = (1, 1) + hash_kind = 'sha256' + + def __init__(self, filename=None, sign=False, verify=False): + """ + Initialise an instance using a (valid) filename. + """ + self.sign = sign + self.should_verify = verify + self.buildver = '' + self.pyver = [PYVER] + self.abi = ['none'] + self.arch = ['any'] + self.dirname = os.getcwd() + if filename is None: + self.name = 'dummy' + self.version = '0.1' + self._filename = self.filename + else: + m = NAME_VERSION_RE.match(filename) + if m: + info = m.groupdict('') + self.name = info['nm'] + # Reinstate the local version separator + self.version = info['vn'].replace('_', '-') + self.buildver = info['bn'] + self._filename = self.filename + else: + dirname, filename = os.path.split(filename) + m = FILENAME_RE.match(filename) + if not m: + raise DistlibException('Invalid name or ' + 'filename: %r' % filename) + if dirname: + self.dirname = os.path.abspath(dirname) + self._filename = filename + info = m.groupdict('') + self.name = info['nm'] + self.version = info['vn'] + self.buildver = info['bn'] + self.pyver = info['py'].split('.') + self.abi = info['bi'].split('.') + self.arch = info['ar'].split('.') + + @property + def filename(self): + """ + Build and return a filename from the various components. + """ + if self.buildver: + buildver = '-' + self.buildver + else: + buildver = '' + pyver = '.'.join(self.pyver) + abi = '.'.join(self.abi) + arch = '.'.join(self.arch) + # replace - with _ as a local version separator + version = self.version.replace('-', '_') + return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, pyver, + abi, arch) + + @property + def exists(self): + path = os.path.join(self.dirname, self.filename) + return os.path.isfile(path) + + @property + def tags(self): + for pyver in self.pyver: + for abi in self.abi: + for arch in self.arch: + yield pyver, abi, arch + + @cached_property + def metadata(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + wrapper = codecs.getreader('utf-8') + with ZipFile(pathname, 'r') as zf: + self.get_wheel_metadata(zf) + # wv = wheel_metadata['Wheel-Version'].split('.', 1) + # file_version = tuple([int(i) for i in wv]) + # if file_version < (1, 1): + # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME, + # LEGACY_METADATA_FILENAME] + # else: + # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME] + fns = [WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME] + result = None + for fn in fns: + try: + metadata_filename = posixpath.join(info_dir, fn) + with zf.open(metadata_filename) as bf: + wf = wrapper(bf) + result = Metadata(fileobj=wf) + if result: + break + except KeyError: + pass + if not result: + raise ValueError('Invalid wheel, because metadata is ' + 'missing: looked in %s' % ', '.join(fns)) + return result + + def get_wheel_metadata(self, zf): + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + metadata_filename = posixpath.join(info_dir, 'WHEEL') + with zf.open(metadata_filename) as bf: + wf = codecs.getreader('utf-8')(bf) + message = message_from_file(wf) + return dict(message) + + @cached_property + def info(self): + pathname = os.path.join(self.dirname, self.filename) + with ZipFile(pathname, 'r') as zf: + result = self.get_wheel_metadata(zf) + return result + + def process_shebang(self, data): + m = SHEBANG_RE.match(data) + if m: + end = m.end() + shebang, data_after_shebang = data[:end], data[end:] + # Preserve any arguments after the interpreter + if b'pythonw' in shebang.lower(): + shebang_python = SHEBANG_PYTHONW + else: + shebang_python = SHEBANG_PYTHON + m = SHEBANG_DETAIL_RE.match(shebang) + if m: + args = b' ' + m.groups()[-1] + else: + args = b'' + shebang = shebang_python + args + data = shebang + data_after_shebang + else: + cr = data.find(b'\r') + lf = data.find(b'\n') + if cr < 0 or cr > lf: + term = b'\n' + else: + if data[cr:cr + 2] == b'\r\n': + term = b'\r\n' + else: + term = b'\r' + data = SHEBANG_PYTHON + term + data + return data + + def get_hash(self, data, hash_kind=None): + if hash_kind is None: + hash_kind = self.hash_kind + try: + hasher = getattr(hashlib, hash_kind) + except AttributeError: + raise DistlibException('Unsupported hash algorithm: %r' % + hash_kind) + result = hasher(data).digest() + result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') + return hash_kind, result + + def write_record(self, records, record_path, archive_record_path): + records = list(records) # make a copy, as mutated + records.append((archive_record_path, '', '')) + with CSVWriter(record_path) as writer: + for row in records: + writer.writerow(row) + + def write_records(self, info, libdir, archive_paths): + records = [] + distinfo, info_dir = info + # hasher = getattr(hashlib, self.hash_kind) + for ap, p in archive_paths: + with open(p, 'rb') as f: + data = f.read() + digest = '%s=%s' % self.get_hash(data) + size = os.path.getsize(p) + records.append((ap, digest, size)) + + p = os.path.join(distinfo, 'RECORD') + ap = to_posix(os.path.join(info_dir, 'RECORD')) + self.write_record(records, p, ap) + archive_paths.append((ap, p)) + + def build_zip(self, pathname, archive_paths): + with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: + for ap, p in archive_paths: + logger.debug('Wrote %s to %s in wheel', p, ap) + zf.write(p, ap) + + def build(self, paths, tags=None, wheel_version=None): + """ + Build a wheel from files in specified paths, and use any specified tags + when determining the name of the wheel. + """ + if tags is None: + tags = {} + + libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] + if libkey == 'platlib': + is_pure = 'false' + default_pyver = [IMPVER] + default_abi = [ABI] + default_arch = [ARCH] + else: + is_pure = 'true' + default_pyver = [PYVER] + default_abi = ['none'] + default_arch = ['any'] + + self.pyver = tags.get('pyver', default_pyver) + self.abi = tags.get('abi', default_abi) + self.arch = tags.get('arch', default_arch) + + libdir = paths[libkey] + + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + archive_paths = [] + + # First, stuff which is not in site-packages + for key in ('data', 'headers', 'scripts'): + if key not in paths: + continue + path = paths[key] + if os.path.isdir(path): + for root, dirs, files in os.walk(path): + for fn in files: + p = fsdecode(os.path.join(root, fn)) + rp = os.path.relpath(p, path) + ap = to_posix(os.path.join(data_dir, key, rp)) + archive_paths.append((ap, p)) + if key == 'scripts' and not p.endswith('.exe'): + with open(p, 'rb') as f: + data = f.read() + data = self.process_shebang(data) + with open(p, 'wb') as f: + f.write(data) + + # Now, stuff which is in site-packages, other than the + # distinfo stuff. + path = libdir + distinfo = None + for root, dirs, files in os.walk(path): + if root == path: + # At the top level only, save distinfo for later + # and skip it for now + for i, dn in enumerate(dirs): + dn = fsdecode(dn) + if dn.endswith('.dist-info'): + distinfo = os.path.join(root, dn) + del dirs[i] + break + assert distinfo, '.dist-info directory expected, not found' + + for fn in files: + # comment out next suite to leave .pyc files in + if fsdecode(fn).endswith(('.pyc', '.pyo')): + continue + p = os.path.join(root, fn) + rp = to_posix(os.path.relpath(p, path)) + archive_paths.append((rp, p)) + + # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. + files = os.listdir(distinfo) + for fn in files: + if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): + p = fsdecode(os.path.join(distinfo, fn)) + ap = to_posix(os.path.join(info_dir, fn)) + archive_paths.append((ap, p)) + + wheel_metadata = [ + 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), + 'Generator: distlib %s' % __version__, + 'Root-Is-Purelib: %s' % is_pure, + ] + for pyver, abi, arch in self.tags: + wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) + p = os.path.join(distinfo, 'WHEEL') + with open(p, 'w') as f: + f.write('\n'.join(wheel_metadata)) + ap = to_posix(os.path.join(info_dir, 'WHEEL')) + archive_paths.append((ap, p)) + + # sort the entries by archive path. Not needed by any spec, but it + # keeps the archive listing and RECORD tidier than they would otherwise + # be. Use the number of path segments to keep directory entries together, + # and keep the dist-info stuff at the end. + def sorter(t): + ap = t[0] + n = ap.count('/') + if '.dist-info' in ap: + n += 10000 + return (n, ap) + + archive_paths = sorted(archive_paths, key=sorter) + + # Now, at last, RECORD. + # Paths in here are archive paths - nothing else makes sense. + self.write_records((distinfo, info_dir), libdir, archive_paths) + # Now, ready to build the zip file + pathname = os.path.join(self.dirname, self.filename) + self.build_zip(pathname, archive_paths) + return pathname + + def skip_entry(self, arcname): + """ + Determine whether an archive entry should be skipped when verifying + or installing. + """ + # The signature file won't be in RECORD, + # and we don't currently don't do anything with it + # We also skip directories, as they won't be in RECORD + # either. See: + # + # https://github.com/pypa/wheel/issues/294 + # https://github.com/pypa/wheel/issues/287 + # https://github.com/pypa/wheel/pull/289 + # + return arcname.endswith(('/', '/RECORD.jws')) + + def install(self, paths, maker, **kwargs): + """ + Install a wheel to the specified paths. If kwarg ``warner`` is + specified, it should be a callable, which will be called with two + tuples indicating the wheel version of this software and the wheel + version in the file, if there is a discrepancy in the versions. + This can be used to issue any warnings to raise any exceptions. + If kwarg ``lib_only`` is True, only the purelib/platlib files are + installed, and the headers, scripts, data and dist-info metadata are + not written. If kwarg ``bytecode_hashed_invalidation`` is True, written + bytecode will try to use file-hash based invalidation (PEP-552) on + supported interpreter versions (CPython 2.7+). + + The return value is a :class:`InstalledDistribution` instance unless + ``options.lib_only`` is True, in which case the return value is ``None``. + """ + + dry_run = maker.dry_run + warner = kwargs.get('warner') + lib_only = kwargs.get('lib_only', False) + bc_hashed_invalidation = kwargs.get('bytecode_hashed_invalidation', + False) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message = message_from_file(wf) + wv = message['Wheel-Version'].split('.', 1) + file_version = tuple([int(i) for i in wv]) + if (file_version != self.wheel_version) and warner: + warner(self.wheel_version, file_version) + + if message['Root-Is-Purelib'] == 'true': + libdir = paths['purelib'] + else: + libdir = paths['platlib'] + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + data_pfx = posixpath.join(data_dir, '') + info_pfx = posixpath.join(info_dir, '') + script_pfx = posixpath.join(data_dir, 'scripts', '') + + # make a new instance rather than a copy of maker's, + # as we mutate it + fileop = FileOperator(dry_run=dry_run) + fileop.record = True # so we can rollback if needed + + bc = not sys.dont_write_bytecode # Double negatives. Lovely! + + outfiles = [] # for RECORD writing + + # for script copying/shebang processing + workdir = tempfile.mkdtemp() + # set target dir later + # we default add_launchers to False, as the + # Python Launcher should be used instead + maker.source_dir = workdir + maker.target_dir = None + try: + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if self.skip_entry(u_arcname): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + if lib_only and u_arcname.startswith((info_pfx, data_pfx)): + logger.debug('lib_only: skipping %s', u_arcname) + continue + is_script = (u_arcname.startswith(script_pfx) + and not u_arcname.endswith('.exe')) + + if u_arcname.startswith(data_pfx): + _, where, rp = u_arcname.split('/', 2) + outfile = os.path.join(paths[where], convert_path(rp)) + else: + # meant for site-packages. + if u_arcname in (wheel_metadata_name, record_name): + continue + outfile = os.path.join(libdir, convert_path(u_arcname)) + if not is_script: + with zf.open(arcname) as bf: + fileop.copy_stream(bf, outfile) + # Issue #147: permission bits aren't preserved. Using + # zf.extract(zinfo, libdir) should have worked, but didn't, + # see https://www.thetopsites.net/article/53834422.shtml + # So ... manually preserve permission bits as given in zinfo + if os.name == 'posix': + # just set the normal permission bits + os.chmod(outfile, + (zinfo.external_attr >> 16) & 0x1FF) + outfiles.append(outfile) + # Double check the digest of the written file + if not dry_run and row[1]: + with open(outfile, 'rb') as bf: + data = bf.read() + _, newdigest = self.get_hash(data, kind) + if newdigest != digest: + raise DistlibException('digest mismatch ' + 'on write for ' + '%s' % outfile) + if bc and outfile.endswith('.py'): + try: + pyc = fileop.byte_compile( + outfile, + hashed_invalidation=bc_hashed_invalidation) + outfiles.append(pyc) + except Exception: + # Don't give up if byte-compilation fails, + # but log it and perhaps warn the user + logger.warning('Byte-compilation failed', + exc_info=True) + else: + fn = os.path.basename(convert_path(arcname)) + workname = os.path.join(workdir, fn) + with zf.open(arcname) as bf: + fileop.copy_stream(bf, workname) + + dn, fn = os.path.split(outfile) + maker.target_dir = dn + filenames = maker.make(fn) + fileop.set_executable_mode(filenames) + outfiles.extend(filenames) + + if lib_only: + logger.debug('lib_only: returning None') + dist = None + else: + # Generate scripts + + # Try to get pydist.json so we can see if there are + # any commands to generate. If this fails (e.g. because + # of a legacy wheel), log a warning but don't give up. + commands = None + file_version = self.info['Wheel-Version'] + if file_version == '1.0': + # Use legacy info + ep = posixpath.join(info_dir, 'entry_points.txt') + try: + with zf.open(ep) as bwf: + epdata = read_exports(bwf) + commands = {} + for key in ('console', 'gui'): + k = '%s_scripts' % key + if k in epdata: + commands['wrap_%s' % key] = d = {} + for v in epdata[k].values(): + s = '%s:%s' % (v.prefix, v.suffix) + if v.flags: + s += ' [%s]' % ','.join(v.flags) + d[v.name] = s + except Exception: + logger.warning('Unable to read legacy script ' + 'metadata, so cannot generate ' + 'scripts') + else: + try: + with zf.open(metadata_name) as bwf: + wf = wrapper(bwf) + commands = json.load(wf).get('extensions') + if commands: + commands = commands.get('python.commands') + except Exception: + logger.warning('Unable to read JSON metadata, so ' + 'cannot generate scripts') + if commands: + console_scripts = commands.get('wrap_console', {}) + gui_scripts = commands.get('wrap_gui', {}) + if console_scripts or gui_scripts: + script_dir = paths.get('scripts', '') + if not os.path.isdir(script_dir): + raise ValueError('Valid script path not ' + 'specified') + maker.target_dir = script_dir + for k, v in console_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script) + fileop.set_executable_mode(filenames) + + if gui_scripts: + options = {'gui': True} + for k, v in gui_scripts.items(): + script = '%s = %s' % (k, v) + filenames = maker.make(script, options) + fileop.set_executable_mode(filenames) + + p = os.path.join(libdir, info_dir) + dist = InstalledDistribution(p) + + # Write SHARED + paths = dict(paths) # don't change passed in dict + del paths['purelib'] + del paths['platlib'] + paths['lib'] = libdir + p = dist.write_shared_locations(paths, dry_run) + if p: + outfiles.append(p) + + # Write RECORD + dist.write_installed_files(outfiles, paths['prefix'], + dry_run) + return dist + except Exception: # pragma: no cover + logger.exception('installation failed.') + fileop.rollback() + raise + finally: + shutil.rmtree(workdir) + + def _get_dylib_cache(self): + global cache + if cache is None: + # Use native string to avoid issues on 2.x: see Python #20140. + base = os.path.join(get_cache_base(), str('dylib-cache'), + '%s.%s' % sys.version_info[:2]) + cache = Cache(base) + return cache + + def _get_extensions(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + arcname = posixpath.join(info_dir, 'EXTENSIONS') + wrapper = codecs.getreader('utf-8') + result = [] + with ZipFile(pathname, 'r') as zf: + try: + with zf.open(arcname) as bf: + wf = wrapper(bf) + extensions = json.load(wf) + cache = self._get_dylib_cache() + prefix = cache.prefix_to_dir(pathname) + cache_base = os.path.join(cache.base, prefix) + if not os.path.isdir(cache_base): + os.makedirs(cache_base) + for name, relpath in extensions.items(): + dest = os.path.join(cache_base, convert_path(relpath)) + if not os.path.exists(dest): + extract = True + else: + file_time = os.stat(dest).st_mtime + file_time = datetime.datetime.fromtimestamp( + file_time) + info = zf.getinfo(relpath) + wheel_time = datetime.datetime(*info.date_time) + extract = wheel_time > file_time + if extract: + zf.extract(relpath, cache_base) + result.append((name, dest)) + except KeyError: + pass + return result + + def is_compatible(self): + """ + Determine if a wheel is compatible with the running system. + """ + return is_compatible(self) + + def is_mountable(self): + """ + Determine if a wheel is asserted as mountable by its metadata. + """ + return True # for now - metadata details TBD + + def mount(self, append=False): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if not self.is_compatible(): + msg = 'Wheel %s not compatible with this Python.' % pathname + raise DistlibException(msg) + if not self.is_mountable(): + msg = 'Wheel %s is marked as not mountable.' % pathname + raise DistlibException(msg) + if pathname in sys.path: + logger.debug('%s already in path', pathname) + else: + if append: + sys.path.append(pathname) + else: + sys.path.insert(0, pathname) + extensions = self._get_extensions() + if extensions: + if _hook not in sys.meta_path: + sys.meta_path.append(_hook) + _hook.add(pathname, extensions) + + def unmount(self): + pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) + if pathname not in sys.path: + logger.debug('%s not in path', pathname) + else: + sys.path.remove(pathname) + if pathname in _hook.impure_wheels: + _hook.remove(pathname) + if not _hook.impure_wheels: + if _hook in sys.meta_path: + sys.meta_path.remove(_hook) + + def verify(self): + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + # data_dir = '%s.data' % name_ver + info_dir = '%s.dist-info' % name_ver + + # metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME) + wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') + record_name = posixpath.join(info_dir, 'RECORD') + + wrapper = codecs.getreader('utf-8') + + with ZipFile(pathname, 'r') as zf: + with zf.open(wheel_metadata_name) as bwf: + wf = wrapper(bwf) + message_from_file(wf) + # wv = message['Wheel-Version'].split('.', 1) + # file_version = tuple([int(i) for i in wv]) + # TODO version verification + + records = {} + with zf.open(record_name) as bf: + with CSVReader(stream=bf) as reader: + for row in reader: + p = row[0] + records[p] = row + + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + # See issue #115: some wheels have .. in their entries, but + # in the filename ... e.g. __main__..py ! So the check is + # updated to look for .. in the directory portions + p = u_arcname.split('/') + if '..' in p: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + + if self.skip_entry(u_arcname): + continue + row = records[u_arcname] + if row[2] and str(zinfo.file_size) != row[2]: + raise DistlibException('size mismatch for ' + '%s' % u_arcname) + if row[1]: + kind, value = row[1].split('=', 1) + with zf.open(arcname) as bf: + data = bf.read() + _, digest = self.get_hash(data, kind) + if digest != value: + raise DistlibException('digest mismatch for ' + '%s' % arcname) + + def update(self, modifier, dest_dir=None, **kwargs): + """ + Update the contents of a wheel in a generic way. The modifier should + be a callable which expects a dictionary argument: its keys are + archive-entry paths, and its values are absolute filesystem paths + where the contents the corresponding archive entries can be found. The + modifier is free to change the contents of the files pointed to, add + new entries and remove entries, before returning. This method will + extract the entire contents of the wheel to a temporary location, call + the modifier, and then use the passed (and possibly updated) + dictionary to write a new wheel. If ``dest_dir`` is specified, the new + wheel is written there -- otherwise, the original wheel is overwritten. + + The modifier should return True if it updated the wheel, else False. + This method returns the same value the modifier returns. + """ + + def get_version(path_map, info_dir): + version = path = None + key = '%s/%s' % (info_dir, LEGACY_METADATA_FILENAME) + if key not in path_map: + key = '%s/PKG-INFO' % info_dir + if key in path_map: + path = path_map[key] + version = Metadata(path=path).version + return version, path + + def update_version(version, path): + updated = None + try: + NormalizedVersion(version) + i = version.find('-') + if i < 0: + updated = '%s+1' % version + else: + parts = [int(s) for s in version[i + 1:].split('.')] + parts[-1] += 1 + updated = '%s+%s' % (version[:i], '.'.join( + str(i) for i in parts)) + except UnsupportedVersionError: + logger.debug( + 'Cannot update non-compliant (PEP-440) ' + 'version %r', version) + if updated: + md = Metadata(path=path) + md.version = updated + legacy = path.endswith(LEGACY_METADATA_FILENAME) + md.write(path=path, legacy=legacy) + logger.debug('Version updated from %r to %r', version, updated) + + pathname = os.path.join(self.dirname, self.filename) + name_ver = '%s-%s' % (self.name, self.version) + info_dir = '%s.dist-info' % name_ver + record_name = posixpath.join(info_dir, 'RECORD') + with tempdir() as workdir: + with ZipFile(pathname, 'r') as zf: + path_map = {} + for zinfo in zf.infolist(): + arcname = zinfo.filename + if isinstance(arcname, text_type): + u_arcname = arcname + else: + u_arcname = arcname.decode('utf-8') + if u_arcname == record_name: + continue + if '..' in u_arcname: + raise DistlibException('invalid entry in ' + 'wheel: %r' % u_arcname) + zf.extract(zinfo, workdir) + path = os.path.join(workdir, convert_path(u_arcname)) + path_map[u_arcname] = path + + # Remember the version. + original_version, _ = get_version(path_map, info_dir) + # Files extracted. Call the modifier. + modified = modifier(path_map, **kwargs) + if modified: + # Something changed - need to build a new wheel. + current_version, path = get_version(path_map, info_dir) + if current_version and (current_version == original_version): + # Add or update local version to signify changes. + update_version(current_version, path) + # Decide where the new wheel goes. + if dest_dir is None: + fd, newpath = tempfile.mkstemp(suffix='.whl', + prefix='wheel-update-', + dir=workdir) + os.close(fd) + else: + if not os.path.isdir(dest_dir): + raise DistlibException('Not a directory: %r' % + dest_dir) + newpath = os.path.join(dest_dir, self.filename) + archive_paths = list(path_map.items()) + distinfo = os.path.join(workdir, info_dir) + info = distinfo, info_dir + self.write_records(info, workdir, archive_paths) + self.build_zip(newpath, archive_paths) + if dest_dir is None: + shutil.copyfile(newpath, pathname) + return modified + + +def _get_glibc_version(): + import platform + ver = platform.libc_ver() + result = [] + if ver[0] == 'glibc': + for s in ver[1].split('.'): + result.append(int(s) if s.isdigit() else 0) + result = tuple(result) + return result + + +def compatible_tags(): + """ + Return (pyver, abi, arch) tuples compatible with this Python. + """ + versions = [VER_SUFFIX] + major = VER_SUFFIX[0] + for minor in range(sys.version_info[1] - 1, -1, -1): + versions.append(''.join([major, str(minor)])) + + abis = [] + for suffix in _get_suffixes(): + if suffix.startswith('.abi'): + abis.append(suffix.split('.', 2)[1]) + abis.sort() + if ABI != 'none': + abis.insert(0, ABI) + abis.append('none') + result = [] + + arches = [ARCH] + if sys.platform == 'darwin': + m = re.match(r'(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) + if m: + name, major, minor, arch = m.groups() + minor = int(minor) + matches = [arch] + if arch in ('i386', 'ppc'): + matches.append('fat') + if arch in ('i386', 'ppc', 'x86_64'): + matches.append('fat3') + if arch in ('ppc64', 'x86_64'): + matches.append('fat64') + if arch in ('i386', 'x86_64'): + matches.append('intel') + if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): + matches.append('universal') + while minor >= 0: + for match in matches: + s = '%s_%s_%s_%s' % (name, major, minor, match) + if s != ARCH: # already there + arches.append(s) + minor -= 1 + + # Most specific - our Python version, ABI and arch + for abi in abis: + for arch in arches: + result.append((''.join((IMP_PREFIX, versions[0])), abi, arch)) + # manylinux + if abi != 'none' and sys.platform.startswith('linux'): + arch = arch.replace('linux_', '') + parts = _get_glibc_version() + if len(parts) == 2: + if parts >= (2, 5): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux1_%s' % arch)) + if parts >= (2, 12): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux2010_%s' % arch)) + if parts >= (2, 17): + result.append((''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux2014_%s' % arch)) + result.append( + (''.join((IMP_PREFIX, versions[0])), abi, + 'manylinux_%s_%s_%s' % (parts[0], parts[1], arch))) + + # where no ABI / arch dependency, but IMP_PREFIX dependency + for i, version in enumerate(versions): + result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) + if i == 0: + result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) + + # no IMP_PREFIX, ABI or arch dependency + for i, version in enumerate(versions): + result.append((''.join(('py', version)), 'none', 'any')) + if i == 0: + result.append((''.join(('py', version[0])), 'none', 'any')) + + return set(result) + + +COMPATIBLE_TAGS = compatible_tags() + +del compatible_tags + + +def is_compatible(wheel, tags=None): + if not isinstance(wheel, Wheel): + wheel = Wheel(wheel) # assume it's a filename + result = False + if tags is None: + tags = COMPATIBLE_TAGS + for ver, abi, arch in tags: + if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: + result = True + break + return result diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py new file mode 100644 index 0000000..7686fe8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py @@ -0,0 +1,54 @@ +from .distro import ( + NORMALIZED_DISTRO_ID, + NORMALIZED_LSB_ID, + NORMALIZED_OS_ID, + LinuxDistribution, + __version__, + build_number, + codename, + distro_release_attr, + distro_release_info, + id, + info, + like, + linux_distribution, + lsb_release_attr, + lsb_release_info, + major_version, + minor_version, + name, + os_release_attr, + os_release_info, + uname_attr, + uname_info, + version, + version_parts, +) + +__all__ = [ + "NORMALIZED_DISTRO_ID", + "NORMALIZED_LSB_ID", + "NORMALIZED_OS_ID", + "LinuxDistribution", + "build_number", + "codename", + "distro_release_attr", + "distro_release_info", + "id", + "info", + "like", + "linux_distribution", + "lsb_release_attr", + "lsb_release_info", + "major_version", + "minor_version", + "name", + "os_release_attr", + "os_release_info", + "uname_attr", + "uname_info", + "version", + "version_parts", +] + +__version__ = __version__ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py new file mode 100644 index 0000000..0c01d5b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py @@ -0,0 +1,4 @@ +from .distro import main + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..06e0d35 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..f848250 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc new file mode 100644 index 0000000..d7ad82a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/distro/distro.py b/venv/lib/python3.12/site-packages/pip/_vendor/distro/distro.py new file mode 100644 index 0000000..89e1868 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/distro/distro.py @@ -0,0 +1,1399 @@ +#!/usr/bin/env python +# Copyright 2015,2016,2017 Nir Cohen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +The ``distro`` package (``distro`` stands for Linux Distribution) provides +information about the Linux distribution it runs on, such as a reliable +machine-readable distro ID, or version information. + +It is the recommended replacement for Python's original +:py:func:`platform.linux_distribution` function, but it provides much more +functionality. An alternative implementation became necessary because Python +3.5 deprecated this function, and Python 3.8 removed it altogether. Its +predecessor function :py:func:`platform.dist` was already deprecated since +Python 2.6 and removed in Python 3.8. Still, there are many cases in which +access to OS distribution information is needed. See `Python issue 1322 +`_ for more information. +""" + +import argparse +import json +import logging +import os +import re +import shlex +import subprocess +import sys +import warnings +from typing import ( + Any, + Callable, + Dict, + Iterable, + Optional, + Sequence, + TextIO, + Tuple, + Type, +) + +try: + from typing import TypedDict +except ImportError: + # Python 3.7 + TypedDict = dict + +__version__ = "1.8.0" + + +class VersionDict(TypedDict): + major: str + minor: str + build_number: str + + +class InfoDict(TypedDict): + id: str + version: str + version_parts: VersionDict + like: str + codename: str + + +_UNIXCONFDIR = os.environ.get("UNIXCONFDIR", "/etc") +_UNIXUSRLIBDIR = os.environ.get("UNIXUSRLIBDIR", "/usr/lib") +_OS_RELEASE_BASENAME = "os-release" + +#: Translation table for normalizing the "ID" attribute defined in os-release +#: files, for use by the :func:`distro.id` method. +#: +#: * Key: Value as defined in the os-release file, translated to lower case, +#: with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_OS_ID = { + "ol": "oracle", # Oracle Linux + "opensuse-leap": "opensuse", # Newer versions of OpenSuSE report as opensuse-leap +} + +#: Translation table for normalizing the "Distributor ID" attribute returned by +#: the lsb_release command, for use by the :func:`distro.id` method. +#: +#: * Key: Value as returned by the lsb_release command, translated to lower +#: case, with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_LSB_ID = { + "enterpriseenterpriseas": "oracle", # Oracle Enterprise Linux 4 + "enterpriseenterpriseserver": "oracle", # Oracle Linux 5 + "redhatenterpriseworkstation": "rhel", # RHEL 6, 7 Workstation + "redhatenterpriseserver": "rhel", # RHEL 6, 7 Server + "redhatenterprisecomputenode": "rhel", # RHEL 6 ComputeNode +} + +#: Translation table for normalizing the distro ID derived from the file name +#: of distro release files, for use by the :func:`distro.id` method. +#: +#: * Key: Value as derived from the file name of a distro release file, +#: translated to lower case, with blanks translated to underscores. +#: +#: * Value: Normalized value. +NORMALIZED_DISTRO_ID = { + "redhat": "rhel", # RHEL 6.x, 7.x +} + +# Pattern for content of distro release file (reversed) +_DISTRO_RELEASE_CONTENT_REVERSED_PATTERN = re.compile( + r"(?:[^)]*\)(.*)\()? *(?:STL )?([\d.+\-a-z]*\d) *(?:esaeler *)?(.+)" +) + +# Pattern for base file name of distro release file +_DISTRO_RELEASE_BASENAME_PATTERN = re.compile(r"(\w+)[-_](release|version)$") + +# Base file names to be looked up for if _UNIXCONFDIR is not readable. +_DISTRO_RELEASE_BASENAMES = [ + "SuSE-release", + "arch-release", + "base-release", + "centos-release", + "fedora-release", + "gentoo-release", + "mageia-release", + "mandrake-release", + "mandriva-release", + "mandrivalinux-release", + "manjaro-release", + "oracle-release", + "redhat-release", + "rocky-release", + "sl-release", + "slackware-version", +] + +# Base file names to be ignored when searching for distro release file +_DISTRO_RELEASE_IGNORE_BASENAMES = ( + "debian_version", + "lsb-release", + "oem-release", + _OS_RELEASE_BASENAME, + "system-release", + "plesk-release", + "iredmail-release", +) + + +def linux_distribution(full_distribution_name: bool = True) -> Tuple[str, str, str]: + """ + .. deprecated:: 1.6.0 + + :func:`distro.linux_distribution()` is deprecated. It should only be + used as a compatibility shim with Python's + :py:func:`platform.linux_distribution()`. Please use :func:`distro.id`, + :func:`distro.version` and :func:`distro.name` instead. + + Return information about the current OS distribution as a tuple + ``(id_name, version, codename)`` with items as follows: + + * ``id_name``: If *full_distribution_name* is false, the result of + :func:`distro.id`. Otherwise, the result of :func:`distro.name`. + + * ``version``: The result of :func:`distro.version`. + + * ``codename``: The extra item (usually in parentheses) after the + os-release version number, or the result of :func:`distro.codename`. + + The interface of this function is compatible with the original + :py:func:`platform.linux_distribution` function, supporting a subset of + its parameters. + + The data it returns may not exactly be the same, because it uses more data + sources than the original function, and that may lead to different data if + the OS distribution is not consistent across multiple data sources it + provides (there are indeed such distributions ...). + + Another reason for differences is the fact that the :func:`distro.id` + method normalizes the distro ID string to a reliable machine-readable value + for a number of popular OS distributions. + """ + warnings.warn( + "distro.linux_distribution() is deprecated. It should only be used as a " + "compatibility shim with Python's platform.linux_distribution(). Please use " + "distro.id(), distro.version() and distro.name() instead.", + DeprecationWarning, + stacklevel=2, + ) + return _distro.linux_distribution(full_distribution_name) + + +def id() -> str: + """ + Return the distro ID of the current distribution, as a + machine-readable string. + + For a number of OS distributions, the returned distro ID value is + *reliable*, in the sense that it is documented and that it does not change + across releases of the distribution. + + This package maintains the following reliable distro ID values: + + ============== ========================================= + Distro ID Distribution + ============== ========================================= + "ubuntu" Ubuntu + "debian" Debian + "rhel" RedHat Enterprise Linux + "centos" CentOS + "fedora" Fedora + "sles" SUSE Linux Enterprise Server + "opensuse" openSUSE + "amzn" Amazon Linux + "arch" Arch Linux + "buildroot" Buildroot + "cloudlinux" CloudLinux OS + "exherbo" Exherbo Linux + "gentoo" GenToo Linux + "ibm_powerkvm" IBM PowerKVM + "kvmibm" KVM for IBM z Systems + "linuxmint" Linux Mint + "mageia" Mageia + "mandriva" Mandriva Linux + "parallels" Parallels + "pidora" Pidora + "raspbian" Raspbian + "oracle" Oracle Linux (and Oracle Enterprise Linux) + "scientific" Scientific Linux + "slackware" Slackware + "xenserver" XenServer + "openbsd" OpenBSD + "netbsd" NetBSD + "freebsd" FreeBSD + "midnightbsd" MidnightBSD + "rocky" Rocky Linux + "aix" AIX + "guix" Guix System + ============== ========================================= + + If you have a need to get distros for reliable IDs added into this set, + or if you find that the :func:`distro.id` function returns a different + distro ID for one of the listed distros, please create an issue in the + `distro issue tracker`_. + + **Lookup hierarchy and transformations:** + + First, the ID is obtained from the following sources, in the specified + order. The first available and non-empty value is used: + + * the value of the "ID" attribute of the os-release file, + + * the value of the "Distributor ID" attribute returned by the lsb_release + command, + + * the first part of the file name of the distro release file, + + The so determined ID value then passes the following transformations, + before it is returned by this method: + + * it is translated to lower case, + + * blanks (which should not be there anyway) are translated to underscores, + + * a normalization of the ID is performed, based upon + `normalization tables`_. The purpose of this normalization is to ensure + that the ID is as reliable as possible, even across incompatible changes + in the OS distributions. A common reason for an incompatible change is + the addition of an os-release file, or the addition of the lsb_release + command, with ID values that differ from what was previously determined + from the distro release file name. + """ + return _distro.id() + + +def name(pretty: bool = False) -> str: + """ + Return the name of the current OS distribution, as a human-readable + string. + + If *pretty* is false, the name is returned without version or codename. + (e.g. "CentOS Linux") + + If *pretty* is true, the version and codename are appended. + (e.g. "CentOS Linux 7.1.1503 (Core)") + + **Lookup hierarchy:** + + The name is obtained from the following sources, in the specified order. + The first available and non-empty value is used: + + * If *pretty* is false: + + - the value of the "NAME" attribute of the os-release file, + + - the value of the "Distributor ID" attribute returned by the lsb_release + command, + + - the value of the "" field of the distro release file. + + * If *pretty* is true: + + - the value of the "PRETTY_NAME" attribute of the os-release file, + + - the value of the "Description" attribute returned by the lsb_release + command, + + - the value of the "" field of the distro release file, appended + with the value of the pretty version ("" and "" + fields) of the distro release file, if available. + """ + return _distro.name(pretty) + + +def version(pretty: bool = False, best: bool = False) -> str: + """ + Return the version of the current OS distribution, as a human-readable + string. + + If *pretty* is false, the version is returned without codename (e.g. + "7.0"). + + If *pretty* is true, the codename in parenthesis is appended, if the + codename is non-empty (e.g. "7.0 (Maipo)"). + + Some distributions provide version numbers with different precisions in + the different sources of distribution information. Examining the different + sources in a fixed priority order does not always yield the most precise + version (e.g. for Debian 8.2, or CentOS 7.1). + + Some other distributions may not provide this kind of information. In these + cases, an empty string would be returned. This behavior can be observed + with rolling releases distributions (e.g. Arch Linux). + + The *best* parameter can be used to control the approach for the returned + version: + + If *best* is false, the first non-empty version number in priority order of + the examined sources is returned. + + If *best* is true, the most precise version number out of all examined + sources is returned. + + **Lookup hierarchy:** + + In all cases, the version number is obtained from the following sources. + If *best* is false, this order represents the priority order: + + * the value of the "VERSION_ID" attribute of the os-release file, + * the value of the "Release" attribute returned by the lsb_release + command, + * the version number parsed from the "" field of the first line + of the distro release file, + * the version number parsed from the "PRETTY_NAME" attribute of the + os-release file, if it follows the format of the distro release files. + * the version number parsed from the "Description" attribute returned by + the lsb_release command, if it follows the format of the distro release + files. + """ + return _distro.version(pretty, best) + + +def version_parts(best: bool = False) -> Tuple[str, str, str]: + """ + Return the version of the current OS distribution as a tuple + ``(major, minor, build_number)`` with items as follows: + + * ``major``: The result of :func:`distro.major_version`. + + * ``minor``: The result of :func:`distro.minor_version`. + + * ``build_number``: The result of :func:`distro.build_number`. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.version_parts(best) + + +def major_version(best: bool = False) -> str: + """ + Return the major version of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The major version is the first + part of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.major_version(best) + + +def minor_version(best: bool = False) -> str: + """ + Return the minor version of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The minor version is the second + part of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.minor_version(best) + + +def build_number(best: bool = False) -> str: + """ + Return the build number of the current OS distribution, as a string, + if provided. + Otherwise, the empty string is returned. The build number is the third part + of the dot-separated version string. + + For a description of the *best* parameter, see the :func:`distro.version` + method. + """ + return _distro.build_number(best) + + +def like() -> str: + """ + Return a space-separated list of distro IDs of distributions that are + closely related to the current OS distribution in regards to packaging + and programming interfaces, for example distributions the current + distribution is a derivative from. + + **Lookup hierarchy:** + + This information item is only provided by the os-release file. + For details, see the description of the "ID_LIKE" attribute in the + `os-release man page + `_. + """ + return _distro.like() + + +def codename() -> str: + """ + Return the codename for the release of the current OS distribution, + as a string. + + If the distribution does not have a codename, an empty string is returned. + + Note that the returned codename is not always really a codename. For + example, openSUSE returns "x86_64". This function does not handle such + cases in any special way and just returns the string it finds, if any. + + **Lookup hierarchy:** + + * the codename within the "VERSION" attribute of the os-release file, if + provided, + + * the value of the "Codename" attribute returned by the lsb_release + command, + + * the value of the "" field of the distro release file. + """ + return _distro.codename() + + +def info(pretty: bool = False, best: bool = False) -> InfoDict: + """ + Return certain machine-readable information items about the current OS + distribution in a dictionary, as shown in the following example: + + .. sourcecode:: python + + { + 'id': 'rhel', + 'version': '7.0', + 'version_parts': { + 'major': '7', + 'minor': '0', + 'build_number': '' + }, + 'like': 'fedora', + 'codename': 'Maipo' + } + + The dictionary structure and keys are always the same, regardless of which + information items are available in the underlying data sources. The values + for the various keys are as follows: + + * ``id``: The result of :func:`distro.id`. + + * ``version``: The result of :func:`distro.version`. + + * ``version_parts -> major``: The result of :func:`distro.major_version`. + + * ``version_parts -> minor``: The result of :func:`distro.minor_version`. + + * ``version_parts -> build_number``: The result of + :func:`distro.build_number`. + + * ``like``: The result of :func:`distro.like`. + + * ``codename``: The result of :func:`distro.codename`. + + For a description of the *pretty* and *best* parameters, see the + :func:`distro.version` method. + """ + return _distro.info(pretty, best) + + +def os_release_info() -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information items + from the os-release file data source of the current OS distribution. + + See `os-release file`_ for details about these information items. + """ + return _distro.os_release_info() + + +def lsb_release_info() -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information items + from the lsb_release command data source of the current OS distribution. + + See `lsb_release command output`_ for details about these information + items. + """ + return _distro.lsb_release_info() + + +def distro_release_info() -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information items + from the distro release file data source of the current OS distribution. + + See `distro release file`_ for details about these information items. + """ + return _distro.distro_release_info() + + +def uname_info() -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information items + from the distro release file data source of the current OS distribution. + """ + return _distro.uname_info() + + +def os_release_attr(attribute: str) -> str: + """ + Return a single named information item from the os-release file data source + of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `os-release file`_ for details about these information items. + """ + return _distro.os_release_attr(attribute) + + +def lsb_release_attr(attribute: str) -> str: + """ + Return a single named information item from the lsb_release command output + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `lsb_release command output`_ for details about these information + items. + """ + return _distro.lsb_release_attr(attribute) + + +def distro_release_attr(attribute: str) -> str: + """ + Return a single named information item from the distro release file + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + + See `distro release file`_ for details about these information items. + """ + return _distro.distro_release_attr(attribute) + + +def uname_attr(attribute: str) -> str: + """ + Return a single named information item from the distro release file + data source of the current OS distribution. + + Parameters: + + * ``attribute`` (string): Key of the information item. + + Returns: + + * (string): Value of the information item, if the item exists. + The empty string, if the item does not exist. + """ + return _distro.uname_attr(attribute) + + +try: + from functools import cached_property +except ImportError: + # Python < 3.8 + class cached_property: # type: ignore + """A version of @property which caches the value. On access, it calls the + underlying function and sets the value in `__dict__` so future accesses + will not re-call the property. + """ + + def __init__(self, f: Callable[[Any], Any]) -> None: + self._fname = f.__name__ + self._f = f + + def __get__(self, obj: Any, owner: Type[Any]) -> Any: + assert obj is not None, f"call {self._fname} on an instance" + ret = obj.__dict__[self._fname] = self._f(obj) + return ret + + +class LinuxDistribution: + """ + Provides information about a OS distribution. + + This package creates a private module-global instance of this class with + default initialization arguments, that is used by the + `consolidated accessor functions`_ and `single source accessor functions`_. + By using default initialization arguments, that module-global instance + returns data about the current OS distribution (i.e. the distro this + package runs on). + + Normally, it is not necessary to create additional instances of this class. + However, in situations where control is needed over the exact data sources + that are used, instances of this class can be created with a specific + distro release file, or a specific os-release file, or without invoking the + lsb_release command. + """ + + def __init__( + self, + include_lsb: Optional[bool] = None, + os_release_file: str = "", + distro_release_file: str = "", + include_uname: Optional[bool] = None, + root_dir: Optional[str] = None, + include_oslevel: Optional[bool] = None, + ) -> None: + """ + The initialization method of this class gathers information from the + available data sources, and stores that in private instance attributes. + Subsequent access to the information items uses these private instance + attributes, so that the data sources are read only once. + + Parameters: + + * ``include_lsb`` (bool): Controls whether the + `lsb_release command output`_ is included as a data source. + + If the lsb_release command is not available in the program execution + path, the data source for the lsb_release command will be empty. + + * ``os_release_file`` (string): The path name of the + `os-release file`_ that is to be used as a data source. + + An empty string (the default) will cause the default path name to + be used (see `os-release file`_ for details). + + If the specified or defaulted os-release file does not exist, the + data source for the os-release file will be empty. + + * ``distro_release_file`` (string): The path name of the + `distro release file`_ that is to be used as a data source. + + An empty string (the default) will cause a default search algorithm + to be used (see `distro release file`_ for details). + + If the specified distro release file does not exist, or if no default + distro release file can be found, the data source for the distro + release file will be empty. + + * ``include_uname`` (bool): Controls whether uname command output is + included as a data source. If the uname command is not available in + the program execution path the data source for the uname command will + be empty. + + * ``root_dir`` (string): The absolute path to the root directory to use + to find distro-related information files. Note that ``include_*`` + parameters must not be enabled in combination with ``root_dir``. + + * ``include_oslevel`` (bool): Controls whether (AIX) oslevel command + output is included as a data source. If the oslevel command is not + available in the program execution path the data source will be + empty. + + Public instance attributes: + + * ``os_release_file`` (string): The path name of the + `os-release file`_ that is actually used as a data source. The + empty string if no distro release file is used as a data source. + + * ``distro_release_file`` (string): The path name of the + `distro release file`_ that is actually used as a data source. The + empty string if no distro release file is used as a data source. + + * ``include_lsb`` (bool): The result of the ``include_lsb`` parameter. + This controls whether the lsb information will be loaded. + + * ``include_uname`` (bool): The result of the ``include_uname`` + parameter. This controls whether the uname information will + be loaded. + + * ``include_oslevel`` (bool): The result of the ``include_oslevel`` + parameter. This controls whether (AIX) oslevel information will be + loaded. + + * ``root_dir`` (string): The result of the ``root_dir`` parameter. + The absolute path to the root directory to use to find distro-related + information files. + + Raises: + + * :py:exc:`ValueError`: Initialization parameters combination is not + supported. + + * :py:exc:`OSError`: Some I/O issue with an os-release file or distro + release file. + + * :py:exc:`UnicodeError`: A data source has unexpected characters or + uses an unexpected encoding. + """ + self.root_dir = root_dir + self.etc_dir = os.path.join(root_dir, "etc") if root_dir else _UNIXCONFDIR + self.usr_lib_dir = ( + os.path.join(root_dir, "usr/lib") if root_dir else _UNIXUSRLIBDIR + ) + + if os_release_file: + self.os_release_file = os_release_file + else: + etc_dir_os_release_file = os.path.join(self.etc_dir, _OS_RELEASE_BASENAME) + usr_lib_os_release_file = os.path.join( + self.usr_lib_dir, _OS_RELEASE_BASENAME + ) + + # NOTE: The idea is to respect order **and** have it set + # at all times for API backwards compatibility. + if os.path.isfile(etc_dir_os_release_file) or not os.path.isfile( + usr_lib_os_release_file + ): + self.os_release_file = etc_dir_os_release_file + else: + self.os_release_file = usr_lib_os_release_file + + self.distro_release_file = distro_release_file or "" # updated later + + is_root_dir_defined = root_dir is not None + if is_root_dir_defined and (include_lsb or include_uname or include_oslevel): + raise ValueError( + "Including subprocess data sources from specific root_dir is disallowed" + " to prevent false information" + ) + self.include_lsb = ( + include_lsb if include_lsb is not None else not is_root_dir_defined + ) + self.include_uname = ( + include_uname if include_uname is not None else not is_root_dir_defined + ) + self.include_oslevel = ( + include_oslevel if include_oslevel is not None else not is_root_dir_defined + ) + + def __repr__(self) -> str: + """Return repr of all info""" + return ( + "LinuxDistribution(" + "os_release_file={self.os_release_file!r}, " + "distro_release_file={self.distro_release_file!r}, " + "include_lsb={self.include_lsb!r}, " + "include_uname={self.include_uname!r}, " + "include_oslevel={self.include_oslevel!r}, " + "root_dir={self.root_dir!r}, " + "_os_release_info={self._os_release_info!r}, " + "_lsb_release_info={self._lsb_release_info!r}, " + "_distro_release_info={self._distro_release_info!r}, " + "_uname_info={self._uname_info!r}, " + "_oslevel_info={self._oslevel_info!r})".format(self=self) + ) + + def linux_distribution( + self, full_distribution_name: bool = True + ) -> Tuple[str, str, str]: + """ + Return information about the OS distribution that is compatible + with Python's :func:`platform.linux_distribution`, supporting a subset + of its parameters. + + For details, see :func:`distro.linux_distribution`. + """ + return ( + self.name() if full_distribution_name else self.id(), + self.version(), + self._os_release_info.get("release_codename") or self.codename(), + ) + + def id(self) -> str: + """Return the distro ID of the OS distribution, as a string. + + For details, see :func:`distro.id`. + """ + + def normalize(distro_id: str, table: Dict[str, str]) -> str: + distro_id = distro_id.lower().replace(" ", "_") + return table.get(distro_id, distro_id) + + distro_id = self.os_release_attr("id") + if distro_id: + return normalize(distro_id, NORMALIZED_OS_ID) + + distro_id = self.lsb_release_attr("distributor_id") + if distro_id: + return normalize(distro_id, NORMALIZED_LSB_ID) + + distro_id = self.distro_release_attr("id") + if distro_id: + return normalize(distro_id, NORMALIZED_DISTRO_ID) + + distro_id = self.uname_attr("id") + if distro_id: + return normalize(distro_id, NORMALIZED_DISTRO_ID) + + return "" + + def name(self, pretty: bool = False) -> str: + """ + Return the name of the OS distribution, as a string. + + For details, see :func:`distro.name`. + """ + name = ( + self.os_release_attr("name") + or self.lsb_release_attr("distributor_id") + or self.distro_release_attr("name") + or self.uname_attr("name") + ) + if pretty: + name = self.os_release_attr("pretty_name") or self.lsb_release_attr( + "description" + ) + if not name: + name = self.distro_release_attr("name") or self.uname_attr("name") + version = self.version(pretty=True) + if version: + name = f"{name} {version}" + return name or "" + + def version(self, pretty: bool = False, best: bool = False) -> str: + """ + Return the version of the OS distribution, as a string. + + For details, see :func:`distro.version`. + """ + versions = [ + self.os_release_attr("version_id"), + self.lsb_release_attr("release"), + self.distro_release_attr("version_id"), + self._parse_distro_release_content(self.os_release_attr("pretty_name")).get( + "version_id", "" + ), + self._parse_distro_release_content( + self.lsb_release_attr("description") + ).get("version_id", ""), + self.uname_attr("release"), + ] + if self.uname_attr("id").startswith("aix"): + # On AIX platforms, prefer oslevel command output. + versions.insert(0, self.oslevel_info()) + elif self.id() == "debian" or "debian" in self.like().split(): + # On Debian-like, add debian_version file content to candidates list. + versions.append(self._debian_version) + version = "" + if best: + # This algorithm uses the last version in priority order that has + # the best precision. If the versions are not in conflict, that + # does not matter; otherwise, using the last one instead of the + # first one might be considered a surprise. + for v in versions: + if v.count(".") > version.count(".") or version == "": + version = v + else: + for v in versions: + if v != "": + version = v + break + if pretty and version and self.codename(): + version = f"{version} ({self.codename()})" + return version + + def version_parts(self, best: bool = False) -> Tuple[str, str, str]: + """ + Return the version of the OS distribution, as a tuple of version + numbers. + + For details, see :func:`distro.version_parts`. + """ + version_str = self.version(best=best) + if version_str: + version_regex = re.compile(r"(\d+)\.?(\d+)?\.?(\d+)?") + matches = version_regex.match(version_str) + if matches: + major, minor, build_number = matches.groups() + return major, minor or "", build_number or "" + return "", "", "" + + def major_version(self, best: bool = False) -> str: + """ + Return the major version number of the current distribution. + + For details, see :func:`distro.major_version`. + """ + return self.version_parts(best)[0] + + def minor_version(self, best: bool = False) -> str: + """ + Return the minor version number of the current distribution. + + For details, see :func:`distro.minor_version`. + """ + return self.version_parts(best)[1] + + def build_number(self, best: bool = False) -> str: + """ + Return the build number of the current distribution. + + For details, see :func:`distro.build_number`. + """ + return self.version_parts(best)[2] + + def like(self) -> str: + """ + Return the IDs of distributions that are like the OS distribution. + + For details, see :func:`distro.like`. + """ + return self.os_release_attr("id_like") or "" + + def codename(self) -> str: + """ + Return the codename of the OS distribution. + + For details, see :func:`distro.codename`. + """ + try: + # Handle os_release specially since distros might purposefully set + # this to empty string to have no codename + return self._os_release_info["codename"] + except KeyError: + return ( + self.lsb_release_attr("codename") + or self.distro_release_attr("codename") + or "" + ) + + def info(self, pretty: bool = False, best: bool = False) -> InfoDict: + """ + Return certain machine-readable information about the OS + distribution. + + For details, see :func:`distro.info`. + """ + return dict( + id=self.id(), + version=self.version(pretty, best), + version_parts=dict( + major=self.major_version(best), + minor=self.minor_version(best), + build_number=self.build_number(best), + ), + like=self.like(), + codename=self.codename(), + ) + + def os_release_info(self) -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information + items from the os-release file data source of the OS distribution. + + For details, see :func:`distro.os_release_info`. + """ + return self._os_release_info + + def lsb_release_info(self) -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information + items from the lsb_release command data source of the OS + distribution. + + For details, see :func:`distro.lsb_release_info`. + """ + return self._lsb_release_info + + def distro_release_info(self) -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information + items from the distro release file data source of the OS + distribution. + + For details, see :func:`distro.distro_release_info`. + """ + return self._distro_release_info + + def uname_info(self) -> Dict[str, str]: + """ + Return a dictionary containing key-value pairs for the information + items from the uname command data source of the OS distribution. + + For details, see :func:`distro.uname_info`. + """ + return self._uname_info + + def oslevel_info(self) -> str: + """ + Return AIX' oslevel command output. + """ + return self._oslevel_info + + def os_release_attr(self, attribute: str) -> str: + """ + Return a single named information item from the os-release file data + source of the OS distribution. + + For details, see :func:`distro.os_release_attr`. + """ + return self._os_release_info.get(attribute, "") + + def lsb_release_attr(self, attribute: str) -> str: + """ + Return a single named information item from the lsb_release command + output data source of the OS distribution. + + For details, see :func:`distro.lsb_release_attr`. + """ + return self._lsb_release_info.get(attribute, "") + + def distro_release_attr(self, attribute: str) -> str: + """ + Return a single named information item from the distro release file + data source of the OS distribution. + + For details, see :func:`distro.distro_release_attr`. + """ + return self._distro_release_info.get(attribute, "") + + def uname_attr(self, attribute: str) -> str: + """ + Return a single named information item from the uname command + output data source of the OS distribution. + + For details, see :func:`distro.uname_attr`. + """ + return self._uname_info.get(attribute, "") + + @cached_property + def _os_release_info(self) -> Dict[str, str]: + """ + Get the information items from the specified os-release file. + + Returns: + A dictionary containing all information items. + """ + if os.path.isfile(self.os_release_file): + with open(self.os_release_file, encoding="utf-8") as release_file: + return self._parse_os_release_content(release_file) + return {} + + @staticmethod + def _parse_os_release_content(lines: TextIO) -> Dict[str, str]: + """ + Parse the lines of an os-release file. + + Parameters: + + * lines: Iterable through the lines in the os-release file. + Each line must be a unicode string or a UTF-8 encoded byte + string. + + Returns: + A dictionary containing all information items. + """ + props = {} + lexer = shlex.shlex(lines, posix=True) + lexer.whitespace_split = True + + tokens = list(lexer) + for token in tokens: + # At this point, all shell-like parsing has been done (i.e. + # comments processed, quotes and backslash escape sequences + # processed, multi-line values assembled, trailing newlines + # stripped, etc.), so the tokens are now either: + # * variable assignments: var=value + # * commands or their arguments (not allowed in os-release) + # Ignore any tokens that are not variable assignments + if "=" in token: + k, v = token.split("=", 1) + props[k.lower()] = v + + if "version" in props: + # extract release codename (if any) from version attribute + match = re.search(r"\((\D+)\)|,\s*(\D+)", props["version"]) + if match: + release_codename = match.group(1) or match.group(2) + props["codename"] = props["release_codename"] = release_codename + + if "version_codename" in props: + # os-release added a version_codename field. Use that in + # preference to anything else Note that some distros purposefully + # do not have code names. They should be setting + # version_codename="" + props["codename"] = props["version_codename"] + elif "ubuntu_codename" in props: + # Same as above but a non-standard field name used on older Ubuntus + props["codename"] = props["ubuntu_codename"] + + return props + + @cached_property + def _lsb_release_info(self) -> Dict[str, str]: + """ + Get the information items from the lsb_release command output. + + Returns: + A dictionary containing all information items. + """ + if not self.include_lsb: + return {} + try: + cmd = ("lsb_release", "-a") + stdout = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) + # Command not found or lsb_release returned error + except (OSError, subprocess.CalledProcessError): + return {} + content = self._to_str(stdout).splitlines() + return self._parse_lsb_release_content(content) + + @staticmethod + def _parse_lsb_release_content(lines: Iterable[str]) -> Dict[str, str]: + """ + Parse the output of the lsb_release command. + + Parameters: + + * lines: Iterable through the lines of the lsb_release output. + Each line must be a unicode string or a UTF-8 encoded byte + string. + + Returns: + A dictionary containing all information items. + """ + props = {} + for line in lines: + kv = line.strip("\n").split(":", 1) + if len(kv) != 2: + # Ignore lines without colon. + continue + k, v = kv + props.update({k.replace(" ", "_").lower(): v.strip()}) + return props + + @cached_property + def _uname_info(self) -> Dict[str, str]: + if not self.include_uname: + return {} + try: + cmd = ("uname", "-rs") + stdout = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) + except OSError: + return {} + content = self._to_str(stdout).splitlines() + return self._parse_uname_content(content) + + @cached_property + def _oslevel_info(self) -> str: + if not self.include_oslevel: + return "" + try: + stdout = subprocess.check_output("oslevel", stderr=subprocess.DEVNULL) + except (OSError, subprocess.CalledProcessError): + return "" + return self._to_str(stdout).strip() + + @cached_property + def _debian_version(self) -> str: + try: + with open( + os.path.join(self.etc_dir, "debian_version"), encoding="ascii" + ) as fp: + return fp.readline().rstrip() + except FileNotFoundError: + return "" + + @staticmethod + def _parse_uname_content(lines: Sequence[str]) -> Dict[str, str]: + if not lines: + return {} + props = {} + match = re.search(r"^([^\s]+)\s+([\d\.]+)", lines[0].strip()) + if match: + name, version = match.groups() + + # This is to prevent the Linux kernel version from + # appearing as the 'best' version on otherwise + # identifiable distributions. + if name == "Linux": + return {} + props["id"] = name.lower() + props["name"] = name + props["release"] = version + return props + + @staticmethod + def _to_str(bytestring: bytes) -> str: + encoding = sys.getfilesystemencoding() + return bytestring.decode(encoding) + + @cached_property + def _distro_release_info(self) -> Dict[str, str]: + """ + Get the information items from the specified distro release file. + + Returns: + A dictionary containing all information items. + """ + if self.distro_release_file: + # If it was specified, we use it and parse what we can, even if + # its file name or content does not match the expected pattern. + distro_info = self._parse_distro_release_file(self.distro_release_file) + basename = os.path.basename(self.distro_release_file) + # The file name pattern for user-specified distro release files + # is somewhat more tolerant (compared to when searching for the + # file), because we want to use what was specified as best as + # possible. + match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) + else: + try: + basenames = [ + basename + for basename in os.listdir(self.etc_dir) + if basename not in _DISTRO_RELEASE_IGNORE_BASENAMES + and os.path.isfile(os.path.join(self.etc_dir, basename)) + ] + # We sort for repeatability in cases where there are multiple + # distro specific files; e.g. CentOS, Oracle, Enterprise all + # containing `redhat-release` on top of their own. + basenames.sort() + except OSError: + # This may occur when /etc is not readable but we can't be + # sure about the *-release files. Check common entries of + # /etc for information. If they turn out to not be there the + # error is handled in `_parse_distro_release_file()`. + basenames = _DISTRO_RELEASE_BASENAMES + for basename in basenames: + match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) + if match is None: + continue + filepath = os.path.join(self.etc_dir, basename) + distro_info = self._parse_distro_release_file(filepath) + # The name is always present if the pattern matches. + if "name" not in distro_info: + continue + self.distro_release_file = filepath + break + else: # the loop didn't "break": no candidate. + return {} + + if match is not None: + distro_info["id"] = match.group(1) + + # CloudLinux < 7: manually enrich info with proper id. + if "cloudlinux" in distro_info.get("name", "").lower(): + distro_info["id"] = "cloudlinux" + + return distro_info + + def _parse_distro_release_file(self, filepath: str) -> Dict[str, str]: + """ + Parse a distro release file. + + Parameters: + + * filepath: Path name of the distro release file. + + Returns: + A dictionary containing all information items. + """ + try: + with open(filepath, encoding="utf-8") as fp: + # Only parse the first line. For instance, on SLES there + # are multiple lines. We don't want them... + return self._parse_distro_release_content(fp.readline()) + except OSError: + # Ignore not being able to read a specific, seemingly version + # related file. + # See https://github.com/python-distro/distro/issues/162 + return {} + + @staticmethod + def _parse_distro_release_content(line: str) -> Dict[str, str]: + """ + Parse a line from a distro release file. + + Parameters: + * line: Line from the distro release file. Must be a unicode string + or a UTF-8 encoded byte string. + + Returns: + A dictionary containing all information items. + """ + matches = _DISTRO_RELEASE_CONTENT_REVERSED_PATTERN.match(line.strip()[::-1]) + distro_info = {} + if matches: + # regexp ensures non-None + distro_info["name"] = matches.group(3)[::-1] + if matches.group(2): + distro_info["version_id"] = matches.group(2)[::-1] + if matches.group(1): + distro_info["codename"] = matches.group(1)[::-1] + elif line: + distro_info["name"] = line.strip() + return distro_info + + +_distro = LinuxDistribution() + + +def main() -> None: + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + logger.addHandler(logging.StreamHandler(sys.stdout)) + + parser = argparse.ArgumentParser(description="OS distro info tool") + parser.add_argument( + "--json", "-j", help="Output in machine readable format", action="store_true" + ) + + parser.add_argument( + "--root-dir", + "-r", + type=str, + dest="root_dir", + help="Path to the root filesystem directory (defaults to /)", + ) + + args = parser.parse_args() + + if args.root_dir: + dist = LinuxDistribution( + include_lsb=False, + include_uname=False, + include_oslevel=False, + root_dir=args.root_dir, + ) + else: + dist = _distro + + if args.json: + logger.info(json.dumps(dist.info(), indent=4, sort_keys=True)) + else: + logger.info("Name: %s", dist.name(pretty=True)) + distribution_version = dist.version(pretty=True) + logger.info("Version: %s", distribution_version) + distribution_codename = dist.codename() + logger.info("Codename: %s", distribution_codename) + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py new file mode 100644 index 0000000..a40eeaf --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py @@ -0,0 +1,44 @@ +from .package_data import __version__ +from .core import ( + IDNABidiError, + IDNAError, + InvalidCodepoint, + InvalidCodepointContext, + alabel, + check_bidi, + check_hyphen_ok, + check_initial_combiner, + check_label, + check_nfc, + decode, + encode, + ulabel, + uts46_remap, + valid_contextj, + valid_contexto, + valid_label_length, + valid_string_length, +) +from .intranges import intranges_contain + +__all__ = [ + "IDNABidiError", + "IDNAError", + "InvalidCodepoint", + "InvalidCodepointContext", + "alabel", + "check_bidi", + "check_hyphen_ok", + "check_initial_combiner", + "check_label", + "check_nfc", + "decode", + "encode", + "intranges_contain", + "ulabel", + "uts46_remap", + "valid_contextj", + "valid_contexto", + "valid_label_length", + "valid_string_length", +] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..ee01227 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc new file mode 100644 index 0000000..3bca3fa Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc new file mode 100644 index 0000000..9ee6efc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc new file mode 100644 index 0000000..c114236 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc new file mode 100644 index 0000000..3a9b7f5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc new file mode 100644 index 0000000..5c8ed94 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc new file mode 100644 index 0000000..b6398b3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc new file mode 100644 index 0000000..7d28148 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py b/venv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py new file mode 100644 index 0000000..1ca9ba6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py @@ -0,0 +1,112 @@ +from .core import encode, decode, alabel, ulabel, IDNAError +import codecs +import re +from typing import Tuple, Optional + +_unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]') + +class Codec(codecs.Codec): + + def encode(self, data: str, errors: str = 'strict') -> Tuple[bytes, int]: + if errors != 'strict': + raise IDNAError('Unsupported error handling \"{}\"'.format(errors)) + + if not data: + return b"", 0 + + return encode(data), len(data) + + def decode(self, data: bytes, errors: str = 'strict') -> Tuple[str, int]: + if errors != 'strict': + raise IDNAError('Unsupported error handling \"{}\"'.format(errors)) + + if not data: + return '', 0 + + return decode(data), len(data) + +class IncrementalEncoder(codecs.BufferedIncrementalEncoder): + def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[str, int]: # type: ignore + if errors != 'strict': + raise IDNAError('Unsupported error handling \"{}\"'.format(errors)) + + if not data: + return "", 0 + + labels = _unicode_dots_re.split(data) + trailing_dot = '' + if labels: + if not labels[-1]: + trailing_dot = '.' + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = '.' + + result = [] + size = 0 + for label in labels: + result.append(alabel(label)) + if size: + size += 1 + size += len(label) + + # Join with U+002E + result_str = '.'.join(result) + trailing_dot # type: ignore + size += len(trailing_dot) + return result_str, size + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, data: str, errors: str, final: bool) -> Tuple[str, int]: # type: ignore + if errors != 'strict': + raise IDNAError('Unsupported error handling \"{}\"'.format(errors)) + + if not data: + return ('', 0) + + labels = _unicode_dots_re.split(data) + trailing_dot = '' + if labels: + if not labels[-1]: + trailing_dot = '.' + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = '.' + + result = [] + size = 0 + for label in labels: + result.append(ulabel(label)) + if size: + size += 1 + size += len(label) + + result_str = '.'.join(result) + trailing_dot + size += len(trailing_dot) + return (result_str, size) + + +class StreamWriter(Codec, codecs.StreamWriter): + pass + + +class StreamReader(Codec, codecs.StreamReader): + pass + + +def getregentry() -> codecs.CodecInfo: + # Compatibility as a search_function for codecs.register() + return codecs.CodecInfo( + name='idna', + encode=Codec().encode, # type: ignore + decode=Codec().decode, # type: ignore + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/compat.py b/venv/lib/python3.12/site-packages/pip/_vendor/idna/compat.py new file mode 100644 index 0000000..786e6bd --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/idna/compat.py @@ -0,0 +1,13 @@ +from .core import * +from .codec import * +from typing import Any, Union + +def ToASCII(label: str) -> bytes: + return encode(label) + +def ToUnicode(label: Union[bytes, bytearray]) -> str: + return decode(label) + +def nameprep(s: Any) -> None: + raise NotImplementedError('IDNA 2008 does not utilise nameprep protocol') + diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/core.py b/venv/lib/python3.12/site-packages/pip/_vendor/idna/core.py new file mode 100644 index 0000000..aea17ac --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/idna/core.py @@ -0,0 +1,400 @@ +from . import idnadata +import bisect +import unicodedata +import re +from typing import Union, Optional +from .intranges import intranges_contain + +_virama_combining_class = 9 +_alabel_prefix = b'xn--' +_unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]') + +class IDNAError(UnicodeError): + """ Base exception for all IDNA-encoding related problems """ + pass + + +class IDNABidiError(IDNAError): + """ Exception when bidirectional requirements are not satisfied """ + pass + + +class InvalidCodepoint(IDNAError): + """ Exception when a disallowed or unallocated codepoint is used """ + pass + + +class InvalidCodepointContext(IDNAError): + """ Exception when the codepoint is not valid in the context it is used """ + pass + + +def _combining_class(cp: int) -> int: + v = unicodedata.combining(chr(cp)) + if v == 0: + if not unicodedata.name(chr(cp)): + raise ValueError('Unknown character in unicodedata') + return v + +def _is_script(cp: str, script: str) -> bool: + return intranges_contain(ord(cp), idnadata.scripts[script]) + +def _punycode(s: str) -> bytes: + return s.encode('punycode') + +def _unot(s: int) -> str: + return 'U+{:04X}'.format(s) + + +def valid_label_length(label: Union[bytes, str]) -> bool: + if len(label) > 63: + return False + return True + + +def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool: + if len(label) > (254 if trailing_dot else 253): + return False + return True + + +def check_bidi(label: str, check_ltr: bool = False) -> bool: + # Bidi rules should only be applied if string contains RTL characters + bidi_label = False + for (idx, cp) in enumerate(label, 1): + direction = unicodedata.bidirectional(cp) + if direction == '': + # String likely comes from a newer version of Unicode + raise IDNABidiError('Unknown directionality in label {} at position {}'.format(repr(label), idx)) + if direction in ['R', 'AL', 'AN']: + bidi_label = True + if not bidi_label and not check_ltr: + return True + + # Bidi rule 1 + direction = unicodedata.bidirectional(label[0]) + if direction in ['R', 'AL']: + rtl = True + elif direction == 'L': + rtl = False + else: + raise IDNABidiError('First codepoint in label {} must be directionality L, R or AL'.format(repr(label))) + + valid_ending = False + number_type = None # type: Optional[str] + for (idx, cp) in enumerate(label, 1): + direction = unicodedata.bidirectional(cp) + + if rtl: + # Bidi rule 2 + if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: + raise IDNABidiError('Invalid direction for codepoint at position {} in a right-to-left label'.format(idx)) + # Bidi rule 3 + if direction in ['R', 'AL', 'EN', 'AN']: + valid_ending = True + elif direction != 'NSM': + valid_ending = False + # Bidi rule 4 + if direction in ['AN', 'EN']: + if not number_type: + number_type = direction + else: + if number_type != direction: + raise IDNABidiError('Can not mix numeral types in a right-to-left label') + else: + # Bidi rule 5 + if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: + raise IDNABidiError('Invalid direction for codepoint at position {} in a left-to-right label'.format(idx)) + # Bidi rule 6 + if direction in ['L', 'EN']: + valid_ending = True + elif direction != 'NSM': + valid_ending = False + + if not valid_ending: + raise IDNABidiError('Label ends with illegal codepoint directionality') + + return True + + +def check_initial_combiner(label: str) -> bool: + if unicodedata.category(label[0])[0] == 'M': + raise IDNAError('Label begins with an illegal combining character') + return True + + +def check_hyphen_ok(label: str) -> bool: + if label[2:4] == '--': + raise IDNAError('Label has disallowed hyphens in 3rd and 4th position') + if label[0] == '-' or label[-1] == '-': + raise IDNAError('Label must not start or end with a hyphen') + return True + + +def check_nfc(label: str) -> None: + if unicodedata.normalize('NFC', label) != label: + raise IDNAError('Label must be in Normalization Form C') + + +def valid_contextj(label: str, pos: int) -> bool: + cp_value = ord(label[pos]) + + if cp_value == 0x200c: + + if pos > 0: + if _combining_class(ord(label[pos - 1])) == _virama_combining_class: + return True + + ok = False + for i in range(pos-1, -1, -1): + joining_type = idnadata.joining_types.get(ord(label[i])) + if joining_type == ord('T'): + continue + elif joining_type in [ord('L'), ord('D')]: + ok = True + break + else: + break + + if not ok: + return False + + ok = False + for i in range(pos+1, len(label)): + joining_type = idnadata.joining_types.get(ord(label[i])) + if joining_type == ord('T'): + continue + elif joining_type in [ord('R'), ord('D')]: + ok = True + break + else: + break + return ok + + if cp_value == 0x200d: + + if pos > 0: + if _combining_class(ord(label[pos - 1])) == _virama_combining_class: + return True + return False + + else: + + return False + + +def valid_contexto(label: str, pos: int, exception: bool = False) -> bool: + cp_value = ord(label[pos]) + + if cp_value == 0x00b7: + if 0 < pos < len(label)-1: + if ord(label[pos - 1]) == 0x006c and ord(label[pos + 1]) == 0x006c: + return True + return False + + elif cp_value == 0x0375: + if pos < len(label)-1 and len(label) > 1: + return _is_script(label[pos + 1], 'Greek') + return False + + elif cp_value == 0x05f3 or cp_value == 0x05f4: + if pos > 0: + return _is_script(label[pos - 1], 'Hebrew') + return False + + elif cp_value == 0x30fb: + for cp in label: + if cp == '\u30fb': + continue + if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'): + return True + return False + + elif 0x660 <= cp_value <= 0x669: + for cp in label: + if 0x6f0 <= ord(cp) <= 0x06f9: + return False + return True + + elif 0x6f0 <= cp_value <= 0x6f9: + for cp in label: + if 0x660 <= ord(cp) <= 0x0669: + return False + return True + + return False + + +def check_label(label: Union[str, bytes, bytearray]) -> None: + if isinstance(label, (bytes, bytearray)): + label = label.decode('utf-8') + if len(label) == 0: + raise IDNAError('Empty Label') + + check_nfc(label) + check_hyphen_ok(label) + check_initial_combiner(label) + + for (pos, cp) in enumerate(label): + cp_value = ord(cp) + if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']): + continue + elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']): + if not valid_contextj(label, pos): + raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format( + _unot(cp_value), pos+1, repr(label))) + elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']): + if not valid_contexto(label, pos): + raise InvalidCodepointContext('Codepoint {} not allowed at position {} in {}'.format(_unot(cp_value), pos+1, repr(label))) + else: + raise InvalidCodepoint('Codepoint {} at position {} of {} not allowed'.format(_unot(cp_value), pos+1, repr(label))) + + check_bidi(label) + + +def alabel(label: str) -> bytes: + try: + label_bytes = label.encode('ascii') + ulabel(label_bytes) + if not valid_label_length(label_bytes): + raise IDNAError('Label too long') + return label_bytes + except UnicodeEncodeError: + pass + + if not label: + raise IDNAError('No Input') + + label = str(label) + check_label(label) + label_bytes = _punycode(label) + label_bytes = _alabel_prefix + label_bytes + + if not valid_label_length(label_bytes): + raise IDNAError('Label too long') + + return label_bytes + + +def ulabel(label: Union[str, bytes, bytearray]) -> str: + if not isinstance(label, (bytes, bytearray)): + try: + label_bytes = label.encode('ascii') + except UnicodeEncodeError: + check_label(label) + return label + else: + label_bytes = label + + label_bytes = label_bytes.lower() + if label_bytes.startswith(_alabel_prefix): + label_bytes = label_bytes[len(_alabel_prefix):] + if not label_bytes: + raise IDNAError('Malformed A-label, no Punycode eligible content found') + if label_bytes.decode('ascii')[-1] == '-': + raise IDNAError('A-label must not end with a hyphen') + else: + check_label(label_bytes) + return label_bytes.decode('ascii') + + try: + label = label_bytes.decode('punycode') + except UnicodeError: + raise IDNAError('Invalid A-label') + check_label(label) + return label + + +def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str: + """Re-map the characters in the string according to UTS46 processing.""" + from .uts46data import uts46data + output = '' + + for pos, char in enumerate(domain): + code_point = ord(char) + try: + uts46row = uts46data[code_point if code_point < 256 else + bisect.bisect_left(uts46data, (code_point, 'Z')) - 1] + status = uts46row[1] + replacement = None # type: Optional[str] + if len(uts46row) == 3: + replacement = uts46row[2] # type: ignore + if (status == 'V' or + (status == 'D' and not transitional) or + (status == '3' and not std3_rules and replacement is None)): + output += char + elif replacement is not None and (status == 'M' or + (status == '3' and not std3_rules) or + (status == 'D' and transitional)): + output += replacement + elif status != 'I': + raise IndexError() + except IndexError: + raise InvalidCodepoint( + 'Codepoint {} not allowed at position {} in {}'.format( + _unot(code_point), pos + 1, repr(domain))) + + return unicodedata.normalize('NFC', output) + + +def encode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False, transitional: bool = False) -> bytes: + if isinstance(s, (bytes, bytearray)): + try: + s = s.decode('ascii') + except UnicodeDecodeError: + raise IDNAError('should pass a unicode string to the function rather than a byte string.') + if uts46: + s = uts46_remap(s, std3_rules, transitional) + trailing_dot = False + result = [] + if strict: + labels = s.split('.') + else: + labels = _unicode_dots_re.split(s) + if not labels or labels == ['']: + raise IDNAError('Empty domain') + if labels[-1] == '': + del labels[-1] + trailing_dot = True + for label in labels: + s = alabel(label) + if s: + result.append(s) + else: + raise IDNAError('Empty label') + if trailing_dot: + result.append(b'') + s = b'.'.join(result) + if not valid_string_length(s, trailing_dot): + raise IDNAError('Domain too long') + return s + + +def decode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False) -> str: + try: + if isinstance(s, (bytes, bytearray)): + s = s.decode('ascii') + except UnicodeDecodeError: + raise IDNAError('Invalid ASCII in A-label') + if uts46: + s = uts46_remap(s, std3_rules, False) + trailing_dot = False + result = [] + if not strict: + labels = _unicode_dots_re.split(s) + else: + labels = s.split('.') + if not labels or labels == ['']: + raise IDNAError('Empty domain') + if not labels[-1]: + del labels[-1] + trailing_dot = True + for label in labels: + s = ulabel(label) + if s: + result.append(s) + else: + raise IDNAError('Empty label') + if trailing_dot: + result.append('') + return '.'.join(result) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py b/venv/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py new file mode 100644 index 0000000..5b5e02a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py @@ -0,0 +1,4246 @@ +# This file is automatically generated by tools/idna-data + +__version__ = '15.0.0' +scripts = { + 'Greek': ( + 0x37000000374, + 0x37500000378, + 0x37a0000037e, + 0x37f00000380, + 0x38400000385, + 0x38600000387, + 0x3880000038b, + 0x38c0000038d, + 0x38e000003a2, + 0x3a3000003e2, + 0x3f000000400, + 0x1d2600001d2b, + 0x1d5d00001d62, + 0x1d6600001d6b, + 0x1dbf00001dc0, + 0x1f0000001f16, + 0x1f1800001f1e, + 0x1f2000001f46, + 0x1f4800001f4e, + 0x1f5000001f58, + 0x1f5900001f5a, + 0x1f5b00001f5c, + 0x1f5d00001f5e, + 0x1f5f00001f7e, + 0x1f8000001fb5, + 0x1fb600001fc5, + 0x1fc600001fd4, + 0x1fd600001fdc, + 0x1fdd00001ff0, + 0x1ff200001ff5, + 0x1ff600001fff, + 0x212600002127, + 0xab650000ab66, + 0x101400001018f, + 0x101a0000101a1, + 0x1d2000001d246, + ), + 'Han': ( + 0x2e8000002e9a, + 0x2e9b00002ef4, + 0x2f0000002fd6, + 0x300500003006, + 0x300700003008, + 0x30210000302a, + 0x30380000303c, + 0x340000004dc0, + 0x4e000000a000, + 0xf9000000fa6e, + 0xfa700000fada, + 0x16fe200016fe4, + 0x16ff000016ff2, + 0x200000002a6e0, + 0x2a7000002b73a, + 0x2b7400002b81e, + 0x2b8200002cea2, + 0x2ceb00002ebe1, + 0x2f8000002fa1e, + 0x300000003134b, + 0x31350000323b0, + ), + 'Hebrew': ( + 0x591000005c8, + 0x5d0000005eb, + 0x5ef000005f5, + 0xfb1d0000fb37, + 0xfb380000fb3d, + 0xfb3e0000fb3f, + 0xfb400000fb42, + 0xfb430000fb45, + 0xfb460000fb50, + ), + 'Hiragana': ( + 0x304100003097, + 0x309d000030a0, + 0x1b0010001b120, + 0x1b1320001b133, + 0x1b1500001b153, + 0x1f2000001f201, + ), + 'Katakana': ( + 0x30a1000030fb, + 0x30fd00003100, + 0x31f000003200, + 0x32d0000032ff, + 0x330000003358, + 0xff660000ff70, + 0xff710000ff9e, + 0x1aff00001aff4, + 0x1aff50001affc, + 0x1affd0001afff, + 0x1b0000001b001, + 0x1b1200001b123, + 0x1b1550001b156, + 0x1b1640001b168, + ), +} +joining_types = { + 0xad: 84, + 0x300: 84, + 0x301: 84, + 0x302: 84, + 0x303: 84, + 0x304: 84, + 0x305: 84, + 0x306: 84, + 0x307: 84, + 0x308: 84, + 0x309: 84, + 0x30a: 84, + 0x30b: 84, + 0x30c: 84, + 0x30d: 84, + 0x30e: 84, + 0x30f: 84, + 0x310: 84, + 0x311: 84, + 0x312: 84, + 0x313: 84, + 0x314: 84, + 0x315: 84, + 0x316: 84, + 0x317: 84, + 0x318: 84, + 0x319: 84, + 0x31a: 84, + 0x31b: 84, + 0x31c: 84, + 0x31d: 84, + 0x31e: 84, + 0x31f: 84, + 0x320: 84, + 0x321: 84, + 0x322: 84, + 0x323: 84, + 0x324: 84, + 0x325: 84, + 0x326: 84, + 0x327: 84, + 0x328: 84, + 0x329: 84, + 0x32a: 84, + 0x32b: 84, + 0x32c: 84, + 0x32d: 84, + 0x32e: 84, + 0x32f: 84, + 0x330: 84, + 0x331: 84, + 0x332: 84, + 0x333: 84, + 0x334: 84, + 0x335: 84, + 0x336: 84, + 0x337: 84, + 0x338: 84, + 0x339: 84, + 0x33a: 84, + 0x33b: 84, + 0x33c: 84, + 0x33d: 84, + 0x33e: 84, + 0x33f: 84, + 0x340: 84, + 0x341: 84, + 0x342: 84, + 0x343: 84, + 0x344: 84, + 0x345: 84, + 0x346: 84, + 0x347: 84, + 0x348: 84, + 0x349: 84, + 0x34a: 84, + 0x34b: 84, + 0x34c: 84, + 0x34d: 84, + 0x34e: 84, + 0x34f: 84, + 0x350: 84, + 0x351: 84, + 0x352: 84, + 0x353: 84, + 0x354: 84, + 0x355: 84, + 0x356: 84, + 0x357: 84, + 0x358: 84, + 0x359: 84, + 0x35a: 84, + 0x35b: 84, + 0x35c: 84, + 0x35d: 84, + 0x35e: 84, + 0x35f: 84, + 0x360: 84, + 0x361: 84, + 0x362: 84, + 0x363: 84, + 0x364: 84, + 0x365: 84, + 0x366: 84, + 0x367: 84, + 0x368: 84, + 0x369: 84, + 0x36a: 84, + 0x36b: 84, + 0x36c: 84, + 0x36d: 84, + 0x36e: 84, + 0x36f: 84, + 0x483: 84, + 0x484: 84, + 0x485: 84, + 0x486: 84, + 0x487: 84, + 0x488: 84, + 0x489: 84, + 0x591: 84, + 0x592: 84, + 0x593: 84, + 0x594: 84, + 0x595: 84, + 0x596: 84, + 0x597: 84, + 0x598: 84, + 0x599: 84, + 0x59a: 84, + 0x59b: 84, + 0x59c: 84, + 0x59d: 84, + 0x59e: 84, + 0x59f: 84, + 0x5a0: 84, + 0x5a1: 84, + 0x5a2: 84, + 0x5a3: 84, + 0x5a4: 84, + 0x5a5: 84, + 0x5a6: 84, + 0x5a7: 84, + 0x5a8: 84, + 0x5a9: 84, + 0x5aa: 84, + 0x5ab: 84, + 0x5ac: 84, + 0x5ad: 84, + 0x5ae: 84, + 0x5af: 84, + 0x5b0: 84, + 0x5b1: 84, + 0x5b2: 84, + 0x5b3: 84, + 0x5b4: 84, + 0x5b5: 84, + 0x5b6: 84, + 0x5b7: 84, + 0x5b8: 84, + 0x5b9: 84, + 0x5ba: 84, + 0x5bb: 84, + 0x5bc: 84, + 0x5bd: 84, + 0x5bf: 84, + 0x5c1: 84, + 0x5c2: 84, + 0x5c4: 84, + 0x5c5: 84, + 0x5c7: 84, + 0x610: 84, + 0x611: 84, + 0x612: 84, + 0x613: 84, + 0x614: 84, + 0x615: 84, + 0x616: 84, + 0x617: 84, + 0x618: 84, + 0x619: 84, + 0x61a: 84, + 0x61c: 84, + 0x620: 68, + 0x622: 82, + 0x623: 82, + 0x624: 82, + 0x625: 82, + 0x626: 68, + 0x627: 82, + 0x628: 68, + 0x629: 82, + 0x62a: 68, + 0x62b: 68, + 0x62c: 68, + 0x62d: 68, + 0x62e: 68, + 0x62f: 82, + 0x630: 82, + 0x631: 82, + 0x632: 82, + 0x633: 68, + 0x634: 68, + 0x635: 68, + 0x636: 68, + 0x637: 68, + 0x638: 68, + 0x639: 68, + 0x63a: 68, + 0x63b: 68, + 0x63c: 68, + 0x63d: 68, + 0x63e: 68, + 0x63f: 68, + 0x640: 67, + 0x641: 68, + 0x642: 68, + 0x643: 68, + 0x644: 68, + 0x645: 68, + 0x646: 68, + 0x647: 68, + 0x648: 82, + 0x649: 68, + 0x64a: 68, + 0x64b: 84, + 0x64c: 84, + 0x64d: 84, + 0x64e: 84, + 0x64f: 84, + 0x650: 84, + 0x651: 84, + 0x652: 84, + 0x653: 84, + 0x654: 84, + 0x655: 84, + 0x656: 84, + 0x657: 84, + 0x658: 84, + 0x659: 84, + 0x65a: 84, + 0x65b: 84, + 0x65c: 84, + 0x65d: 84, + 0x65e: 84, + 0x65f: 84, + 0x66e: 68, + 0x66f: 68, + 0x670: 84, + 0x671: 82, + 0x672: 82, + 0x673: 82, + 0x675: 82, + 0x676: 82, + 0x677: 82, + 0x678: 68, + 0x679: 68, + 0x67a: 68, + 0x67b: 68, + 0x67c: 68, + 0x67d: 68, + 0x67e: 68, + 0x67f: 68, + 0x680: 68, + 0x681: 68, + 0x682: 68, + 0x683: 68, + 0x684: 68, + 0x685: 68, + 0x686: 68, + 0x687: 68, + 0x688: 82, + 0x689: 82, + 0x68a: 82, + 0x68b: 82, + 0x68c: 82, + 0x68d: 82, + 0x68e: 82, + 0x68f: 82, + 0x690: 82, + 0x691: 82, + 0x692: 82, + 0x693: 82, + 0x694: 82, + 0x695: 82, + 0x696: 82, + 0x697: 82, + 0x698: 82, + 0x699: 82, + 0x69a: 68, + 0x69b: 68, + 0x69c: 68, + 0x69d: 68, + 0x69e: 68, + 0x69f: 68, + 0x6a0: 68, + 0x6a1: 68, + 0x6a2: 68, + 0x6a3: 68, + 0x6a4: 68, + 0x6a5: 68, + 0x6a6: 68, + 0x6a7: 68, + 0x6a8: 68, + 0x6a9: 68, + 0x6aa: 68, + 0x6ab: 68, + 0x6ac: 68, + 0x6ad: 68, + 0x6ae: 68, + 0x6af: 68, + 0x6b0: 68, + 0x6b1: 68, + 0x6b2: 68, + 0x6b3: 68, + 0x6b4: 68, + 0x6b5: 68, + 0x6b6: 68, + 0x6b7: 68, + 0x6b8: 68, + 0x6b9: 68, + 0x6ba: 68, + 0x6bb: 68, + 0x6bc: 68, + 0x6bd: 68, + 0x6be: 68, + 0x6bf: 68, + 0x6c0: 82, + 0x6c1: 68, + 0x6c2: 68, + 0x6c3: 82, + 0x6c4: 82, + 0x6c5: 82, + 0x6c6: 82, + 0x6c7: 82, + 0x6c8: 82, + 0x6c9: 82, + 0x6ca: 82, + 0x6cb: 82, + 0x6cc: 68, + 0x6cd: 82, + 0x6ce: 68, + 0x6cf: 82, + 0x6d0: 68, + 0x6d1: 68, + 0x6d2: 82, + 0x6d3: 82, + 0x6d5: 82, + 0x6d6: 84, + 0x6d7: 84, + 0x6d8: 84, + 0x6d9: 84, + 0x6da: 84, + 0x6db: 84, + 0x6dc: 84, + 0x6df: 84, + 0x6e0: 84, + 0x6e1: 84, + 0x6e2: 84, + 0x6e3: 84, + 0x6e4: 84, + 0x6e7: 84, + 0x6e8: 84, + 0x6ea: 84, + 0x6eb: 84, + 0x6ec: 84, + 0x6ed: 84, + 0x6ee: 82, + 0x6ef: 82, + 0x6fa: 68, + 0x6fb: 68, + 0x6fc: 68, + 0x6ff: 68, + 0x70f: 84, + 0x710: 82, + 0x711: 84, + 0x712: 68, + 0x713: 68, + 0x714: 68, + 0x715: 82, + 0x716: 82, + 0x717: 82, + 0x718: 82, + 0x719: 82, + 0x71a: 68, + 0x71b: 68, + 0x71c: 68, + 0x71d: 68, + 0x71e: 82, + 0x71f: 68, + 0x720: 68, + 0x721: 68, + 0x722: 68, + 0x723: 68, + 0x724: 68, + 0x725: 68, + 0x726: 68, + 0x727: 68, + 0x728: 82, + 0x729: 68, + 0x72a: 82, + 0x72b: 68, + 0x72c: 82, + 0x72d: 68, + 0x72e: 68, + 0x72f: 82, + 0x730: 84, + 0x731: 84, + 0x732: 84, + 0x733: 84, + 0x734: 84, + 0x735: 84, + 0x736: 84, + 0x737: 84, + 0x738: 84, + 0x739: 84, + 0x73a: 84, + 0x73b: 84, + 0x73c: 84, + 0x73d: 84, + 0x73e: 84, + 0x73f: 84, + 0x740: 84, + 0x741: 84, + 0x742: 84, + 0x743: 84, + 0x744: 84, + 0x745: 84, + 0x746: 84, + 0x747: 84, + 0x748: 84, + 0x749: 84, + 0x74a: 84, + 0x74d: 82, + 0x74e: 68, + 0x74f: 68, + 0x750: 68, + 0x751: 68, + 0x752: 68, + 0x753: 68, + 0x754: 68, + 0x755: 68, + 0x756: 68, + 0x757: 68, + 0x758: 68, + 0x759: 82, + 0x75a: 82, + 0x75b: 82, + 0x75c: 68, + 0x75d: 68, + 0x75e: 68, + 0x75f: 68, + 0x760: 68, + 0x761: 68, + 0x762: 68, + 0x763: 68, + 0x764: 68, + 0x765: 68, + 0x766: 68, + 0x767: 68, + 0x768: 68, + 0x769: 68, + 0x76a: 68, + 0x76b: 82, + 0x76c: 82, + 0x76d: 68, + 0x76e: 68, + 0x76f: 68, + 0x770: 68, + 0x771: 82, + 0x772: 68, + 0x773: 82, + 0x774: 82, + 0x775: 68, + 0x776: 68, + 0x777: 68, + 0x778: 82, + 0x779: 82, + 0x77a: 68, + 0x77b: 68, + 0x77c: 68, + 0x77d: 68, + 0x77e: 68, + 0x77f: 68, + 0x7a6: 84, + 0x7a7: 84, + 0x7a8: 84, + 0x7a9: 84, + 0x7aa: 84, + 0x7ab: 84, + 0x7ac: 84, + 0x7ad: 84, + 0x7ae: 84, + 0x7af: 84, + 0x7b0: 84, + 0x7ca: 68, + 0x7cb: 68, + 0x7cc: 68, + 0x7cd: 68, + 0x7ce: 68, + 0x7cf: 68, + 0x7d0: 68, + 0x7d1: 68, + 0x7d2: 68, + 0x7d3: 68, + 0x7d4: 68, + 0x7d5: 68, + 0x7d6: 68, + 0x7d7: 68, + 0x7d8: 68, + 0x7d9: 68, + 0x7da: 68, + 0x7db: 68, + 0x7dc: 68, + 0x7dd: 68, + 0x7de: 68, + 0x7df: 68, + 0x7e0: 68, + 0x7e1: 68, + 0x7e2: 68, + 0x7e3: 68, + 0x7e4: 68, + 0x7e5: 68, + 0x7e6: 68, + 0x7e7: 68, + 0x7e8: 68, + 0x7e9: 68, + 0x7ea: 68, + 0x7eb: 84, + 0x7ec: 84, + 0x7ed: 84, + 0x7ee: 84, + 0x7ef: 84, + 0x7f0: 84, + 0x7f1: 84, + 0x7f2: 84, + 0x7f3: 84, + 0x7fa: 67, + 0x7fd: 84, + 0x816: 84, + 0x817: 84, + 0x818: 84, + 0x819: 84, + 0x81b: 84, + 0x81c: 84, + 0x81d: 84, + 0x81e: 84, + 0x81f: 84, + 0x820: 84, + 0x821: 84, + 0x822: 84, + 0x823: 84, + 0x825: 84, + 0x826: 84, + 0x827: 84, + 0x829: 84, + 0x82a: 84, + 0x82b: 84, + 0x82c: 84, + 0x82d: 84, + 0x840: 82, + 0x841: 68, + 0x842: 68, + 0x843: 68, + 0x844: 68, + 0x845: 68, + 0x846: 82, + 0x847: 82, + 0x848: 68, + 0x849: 82, + 0x84a: 68, + 0x84b: 68, + 0x84c: 68, + 0x84d: 68, + 0x84e: 68, + 0x84f: 68, + 0x850: 68, + 0x851: 68, + 0x852: 68, + 0x853: 68, + 0x854: 82, + 0x855: 68, + 0x856: 82, + 0x857: 82, + 0x858: 82, + 0x859: 84, + 0x85a: 84, + 0x85b: 84, + 0x860: 68, + 0x862: 68, + 0x863: 68, + 0x864: 68, + 0x865: 68, + 0x867: 82, + 0x868: 68, + 0x869: 82, + 0x86a: 82, + 0x870: 82, + 0x871: 82, + 0x872: 82, + 0x873: 82, + 0x874: 82, + 0x875: 82, + 0x876: 82, + 0x877: 82, + 0x878: 82, + 0x879: 82, + 0x87a: 82, + 0x87b: 82, + 0x87c: 82, + 0x87d: 82, + 0x87e: 82, + 0x87f: 82, + 0x880: 82, + 0x881: 82, + 0x882: 82, + 0x883: 67, + 0x884: 67, + 0x885: 67, + 0x886: 68, + 0x889: 68, + 0x88a: 68, + 0x88b: 68, + 0x88c: 68, + 0x88d: 68, + 0x88e: 82, + 0x898: 84, + 0x899: 84, + 0x89a: 84, + 0x89b: 84, + 0x89c: 84, + 0x89d: 84, + 0x89e: 84, + 0x89f: 84, + 0x8a0: 68, + 0x8a1: 68, + 0x8a2: 68, + 0x8a3: 68, + 0x8a4: 68, + 0x8a5: 68, + 0x8a6: 68, + 0x8a7: 68, + 0x8a8: 68, + 0x8a9: 68, + 0x8aa: 82, + 0x8ab: 82, + 0x8ac: 82, + 0x8ae: 82, + 0x8af: 68, + 0x8b0: 68, + 0x8b1: 82, + 0x8b2: 82, + 0x8b3: 68, + 0x8b4: 68, + 0x8b5: 68, + 0x8b6: 68, + 0x8b7: 68, + 0x8b8: 68, + 0x8b9: 82, + 0x8ba: 68, + 0x8bb: 68, + 0x8bc: 68, + 0x8bd: 68, + 0x8be: 68, + 0x8bf: 68, + 0x8c0: 68, + 0x8c1: 68, + 0x8c2: 68, + 0x8c3: 68, + 0x8c4: 68, + 0x8c5: 68, + 0x8c6: 68, + 0x8c7: 68, + 0x8c8: 68, + 0x8ca: 84, + 0x8cb: 84, + 0x8cc: 84, + 0x8cd: 84, + 0x8ce: 84, + 0x8cf: 84, + 0x8d0: 84, + 0x8d1: 84, + 0x8d2: 84, + 0x8d3: 84, + 0x8d4: 84, + 0x8d5: 84, + 0x8d6: 84, + 0x8d7: 84, + 0x8d8: 84, + 0x8d9: 84, + 0x8da: 84, + 0x8db: 84, + 0x8dc: 84, + 0x8dd: 84, + 0x8de: 84, + 0x8df: 84, + 0x8e0: 84, + 0x8e1: 84, + 0x8e3: 84, + 0x8e4: 84, + 0x8e5: 84, + 0x8e6: 84, + 0x8e7: 84, + 0x8e8: 84, + 0x8e9: 84, + 0x8ea: 84, + 0x8eb: 84, + 0x8ec: 84, + 0x8ed: 84, + 0x8ee: 84, + 0x8ef: 84, + 0x8f0: 84, + 0x8f1: 84, + 0x8f2: 84, + 0x8f3: 84, + 0x8f4: 84, + 0x8f5: 84, + 0x8f6: 84, + 0x8f7: 84, + 0x8f8: 84, + 0x8f9: 84, + 0x8fa: 84, + 0x8fb: 84, + 0x8fc: 84, + 0x8fd: 84, + 0x8fe: 84, + 0x8ff: 84, + 0x900: 84, + 0x901: 84, + 0x902: 84, + 0x93a: 84, + 0x93c: 84, + 0x941: 84, + 0x942: 84, + 0x943: 84, + 0x944: 84, + 0x945: 84, + 0x946: 84, + 0x947: 84, + 0x948: 84, + 0x94d: 84, + 0x951: 84, + 0x952: 84, + 0x953: 84, + 0x954: 84, + 0x955: 84, + 0x956: 84, + 0x957: 84, + 0x962: 84, + 0x963: 84, + 0x981: 84, + 0x9bc: 84, + 0x9c1: 84, + 0x9c2: 84, + 0x9c3: 84, + 0x9c4: 84, + 0x9cd: 84, + 0x9e2: 84, + 0x9e3: 84, + 0x9fe: 84, + 0xa01: 84, + 0xa02: 84, + 0xa3c: 84, + 0xa41: 84, + 0xa42: 84, + 0xa47: 84, + 0xa48: 84, + 0xa4b: 84, + 0xa4c: 84, + 0xa4d: 84, + 0xa51: 84, + 0xa70: 84, + 0xa71: 84, + 0xa75: 84, + 0xa81: 84, + 0xa82: 84, + 0xabc: 84, + 0xac1: 84, + 0xac2: 84, + 0xac3: 84, + 0xac4: 84, + 0xac5: 84, + 0xac7: 84, + 0xac8: 84, + 0xacd: 84, + 0xae2: 84, + 0xae3: 84, + 0xafa: 84, + 0xafb: 84, + 0xafc: 84, + 0xafd: 84, + 0xafe: 84, + 0xaff: 84, + 0xb01: 84, + 0xb3c: 84, + 0xb3f: 84, + 0xb41: 84, + 0xb42: 84, + 0xb43: 84, + 0xb44: 84, + 0xb4d: 84, + 0xb55: 84, + 0xb56: 84, + 0xb62: 84, + 0xb63: 84, + 0xb82: 84, + 0xbc0: 84, + 0xbcd: 84, + 0xc00: 84, + 0xc04: 84, + 0xc3c: 84, + 0xc3e: 84, + 0xc3f: 84, + 0xc40: 84, + 0xc46: 84, + 0xc47: 84, + 0xc48: 84, + 0xc4a: 84, + 0xc4b: 84, + 0xc4c: 84, + 0xc4d: 84, + 0xc55: 84, + 0xc56: 84, + 0xc62: 84, + 0xc63: 84, + 0xc81: 84, + 0xcbc: 84, + 0xcbf: 84, + 0xcc6: 84, + 0xccc: 84, + 0xccd: 84, + 0xce2: 84, + 0xce3: 84, + 0xd00: 84, + 0xd01: 84, + 0xd3b: 84, + 0xd3c: 84, + 0xd41: 84, + 0xd42: 84, + 0xd43: 84, + 0xd44: 84, + 0xd4d: 84, + 0xd62: 84, + 0xd63: 84, + 0xd81: 84, + 0xdca: 84, + 0xdd2: 84, + 0xdd3: 84, + 0xdd4: 84, + 0xdd6: 84, + 0xe31: 84, + 0xe34: 84, + 0xe35: 84, + 0xe36: 84, + 0xe37: 84, + 0xe38: 84, + 0xe39: 84, + 0xe3a: 84, + 0xe47: 84, + 0xe48: 84, + 0xe49: 84, + 0xe4a: 84, + 0xe4b: 84, + 0xe4c: 84, + 0xe4d: 84, + 0xe4e: 84, + 0xeb1: 84, + 0xeb4: 84, + 0xeb5: 84, + 0xeb6: 84, + 0xeb7: 84, + 0xeb8: 84, + 0xeb9: 84, + 0xeba: 84, + 0xebb: 84, + 0xebc: 84, + 0xec8: 84, + 0xec9: 84, + 0xeca: 84, + 0xecb: 84, + 0xecc: 84, + 0xecd: 84, + 0xece: 84, + 0xf18: 84, + 0xf19: 84, + 0xf35: 84, + 0xf37: 84, + 0xf39: 84, + 0xf71: 84, + 0xf72: 84, + 0xf73: 84, + 0xf74: 84, + 0xf75: 84, + 0xf76: 84, + 0xf77: 84, + 0xf78: 84, + 0xf79: 84, + 0xf7a: 84, + 0xf7b: 84, + 0xf7c: 84, + 0xf7d: 84, + 0xf7e: 84, + 0xf80: 84, + 0xf81: 84, + 0xf82: 84, + 0xf83: 84, + 0xf84: 84, + 0xf86: 84, + 0xf87: 84, + 0xf8d: 84, + 0xf8e: 84, + 0xf8f: 84, + 0xf90: 84, + 0xf91: 84, + 0xf92: 84, + 0xf93: 84, + 0xf94: 84, + 0xf95: 84, + 0xf96: 84, + 0xf97: 84, + 0xf99: 84, + 0xf9a: 84, + 0xf9b: 84, + 0xf9c: 84, + 0xf9d: 84, + 0xf9e: 84, + 0xf9f: 84, + 0xfa0: 84, + 0xfa1: 84, + 0xfa2: 84, + 0xfa3: 84, + 0xfa4: 84, + 0xfa5: 84, + 0xfa6: 84, + 0xfa7: 84, + 0xfa8: 84, + 0xfa9: 84, + 0xfaa: 84, + 0xfab: 84, + 0xfac: 84, + 0xfad: 84, + 0xfae: 84, + 0xfaf: 84, + 0xfb0: 84, + 0xfb1: 84, + 0xfb2: 84, + 0xfb3: 84, + 0xfb4: 84, + 0xfb5: 84, + 0xfb6: 84, + 0xfb7: 84, + 0xfb8: 84, + 0xfb9: 84, + 0xfba: 84, + 0xfbb: 84, + 0xfbc: 84, + 0xfc6: 84, + 0x102d: 84, + 0x102e: 84, + 0x102f: 84, + 0x1030: 84, + 0x1032: 84, + 0x1033: 84, + 0x1034: 84, + 0x1035: 84, + 0x1036: 84, + 0x1037: 84, + 0x1039: 84, + 0x103a: 84, + 0x103d: 84, + 0x103e: 84, + 0x1058: 84, + 0x1059: 84, + 0x105e: 84, + 0x105f: 84, + 0x1060: 84, + 0x1071: 84, + 0x1072: 84, + 0x1073: 84, + 0x1074: 84, + 0x1082: 84, + 0x1085: 84, + 0x1086: 84, + 0x108d: 84, + 0x109d: 84, + 0x135d: 84, + 0x135e: 84, + 0x135f: 84, + 0x1712: 84, + 0x1713: 84, + 0x1714: 84, + 0x1732: 84, + 0x1733: 84, + 0x1752: 84, + 0x1753: 84, + 0x1772: 84, + 0x1773: 84, + 0x17b4: 84, + 0x17b5: 84, + 0x17b7: 84, + 0x17b8: 84, + 0x17b9: 84, + 0x17ba: 84, + 0x17bb: 84, + 0x17bc: 84, + 0x17bd: 84, + 0x17c6: 84, + 0x17c9: 84, + 0x17ca: 84, + 0x17cb: 84, + 0x17cc: 84, + 0x17cd: 84, + 0x17ce: 84, + 0x17cf: 84, + 0x17d0: 84, + 0x17d1: 84, + 0x17d2: 84, + 0x17d3: 84, + 0x17dd: 84, + 0x1807: 68, + 0x180a: 67, + 0x180b: 84, + 0x180c: 84, + 0x180d: 84, + 0x180f: 84, + 0x1820: 68, + 0x1821: 68, + 0x1822: 68, + 0x1823: 68, + 0x1824: 68, + 0x1825: 68, + 0x1826: 68, + 0x1827: 68, + 0x1828: 68, + 0x1829: 68, + 0x182a: 68, + 0x182b: 68, + 0x182c: 68, + 0x182d: 68, + 0x182e: 68, + 0x182f: 68, + 0x1830: 68, + 0x1831: 68, + 0x1832: 68, + 0x1833: 68, + 0x1834: 68, + 0x1835: 68, + 0x1836: 68, + 0x1837: 68, + 0x1838: 68, + 0x1839: 68, + 0x183a: 68, + 0x183b: 68, + 0x183c: 68, + 0x183d: 68, + 0x183e: 68, + 0x183f: 68, + 0x1840: 68, + 0x1841: 68, + 0x1842: 68, + 0x1843: 68, + 0x1844: 68, + 0x1845: 68, + 0x1846: 68, + 0x1847: 68, + 0x1848: 68, + 0x1849: 68, + 0x184a: 68, + 0x184b: 68, + 0x184c: 68, + 0x184d: 68, + 0x184e: 68, + 0x184f: 68, + 0x1850: 68, + 0x1851: 68, + 0x1852: 68, + 0x1853: 68, + 0x1854: 68, + 0x1855: 68, + 0x1856: 68, + 0x1857: 68, + 0x1858: 68, + 0x1859: 68, + 0x185a: 68, + 0x185b: 68, + 0x185c: 68, + 0x185d: 68, + 0x185e: 68, + 0x185f: 68, + 0x1860: 68, + 0x1861: 68, + 0x1862: 68, + 0x1863: 68, + 0x1864: 68, + 0x1865: 68, + 0x1866: 68, + 0x1867: 68, + 0x1868: 68, + 0x1869: 68, + 0x186a: 68, + 0x186b: 68, + 0x186c: 68, + 0x186d: 68, + 0x186e: 68, + 0x186f: 68, + 0x1870: 68, + 0x1871: 68, + 0x1872: 68, + 0x1873: 68, + 0x1874: 68, + 0x1875: 68, + 0x1876: 68, + 0x1877: 68, + 0x1878: 68, + 0x1885: 84, + 0x1886: 84, + 0x1887: 68, + 0x1888: 68, + 0x1889: 68, + 0x188a: 68, + 0x188b: 68, + 0x188c: 68, + 0x188d: 68, + 0x188e: 68, + 0x188f: 68, + 0x1890: 68, + 0x1891: 68, + 0x1892: 68, + 0x1893: 68, + 0x1894: 68, + 0x1895: 68, + 0x1896: 68, + 0x1897: 68, + 0x1898: 68, + 0x1899: 68, + 0x189a: 68, + 0x189b: 68, + 0x189c: 68, + 0x189d: 68, + 0x189e: 68, + 0x189f: 68, + 0x18a0: 68, + 0x18a1: 68, + 0x18a2: 68, + 0x18a3: 68, + 0x18a4: 68, + 0x18a5: 68, + 0x18a6: 68, + 0x18a7: 68, + 0x18a8: 68, + 0x18a9: 84, + 0x18aa: 68, + 0x1920: 84, + 0x1921: 84, + 0x1922: 84, + 0x1927: 84, + 0x1928: 84, + 0x1932: 84, + 0x1939: 84, + 0x193a: 84, + 0x193b: 84, + 0x1a17: 84, + 0x1a18: 84, + 0x1a1b: 84, + 0x1a56: 84, + 0x1a58: 84, + 0x1a59: 84, + 0x1a5a: 84, + 0x1a5b: 84, + 0x1a5c: 84, + 0x1a5d: 84, + 0x1a5e: 84, + 0x1a60: 84, + 0x1a62: 84, + 0x1a65: 84, + 0x1a66: 84, + 0x1a67: 84, + 0x1a68: 84, + 0x1a69: 84, + 0x1a6a: 84, + 0x1a6b: 84, + 0x1a6c: 84, + 0x1a73: 84, + 0x1a74: 84, + 0x1a75: 84, + 0x1a76: 84, + 0x1a77: 84, + 0x1a78: 84, + 0x1a79: 84, + 0x1a7a: 84, + 0x1a7b: 84, + 0x1a7c: 84, + 0x1a7f: 84, + 0x1ab0: 84, + 0x1ab1: 84, + 0x1ab2: 84, + 0x1ab3: 84, + 0x1ab4: 84, + 0x1ab5: 84, + 0x1ab6: 84, + 0x1ab7: 84, + 0x1ab8: 84, + 0x1ab9: 84, + 0x1aba: 84, + 0x1abb: 84, + 0x1abc: 84, + 0x1abd: 84, + 0x1abe: 84, + 0x1abf: 84, + 0x1ac0: 84, + 0x1ac1: 84, + 0x1ac2: 84, + 0x1ac3: 84, + 0x1ac4: 84, + 0x1ac5: 84, + 0x1ac6: 84, + 0x1ac7: 84, + 0x1ac8: 84, + 0x1ac9: 84, + 0x1aca: 84, + 0x1acb: 84, + 0x1acc: 84, + 0x1acd: 84, + 0x1ace: 84, + 0x1b00: 84, + 0x1b01: 84, + 0x1b02: 84, + 0x1b03: 84, + 0x1b34: 84, + 0x1b36: 84, + 0x1b37: 84, + 0x1b38: 84, + 0x1b39: 84, + 0x1b3a: 84, + 0x1b3c: 84, + 0x1b42: 84, + 0x1b6b: 84, + 0x1b6c: 84, + 0x1b6d: 84, + 0x1b6e: 84, + 0x1b6f: 84, + 0x1b70: 84, + 0x1b71: 84, + 0x1b72: 84, + 0x1b73: 84, + 0x1b80: 84, + 0x1b81: 84, + 0x1ba2: 84, + 0x1ba3: 84, + 0x1ba4: 84, + 0x1ba5: 84, + 0x1ba8: 84, + 0x1ba9: 84, + 0x1bab: 84, + 0x1bac: 84, + 0x1bad: 84, + 0x1be6: 84, + 0x1be8: 84, + 0x1be9: 84, + 0x1bed: 84, + 0x1bef: 84, + 0x1bf0: 84, + 0x1bf1: 84, + 0x1c2c: 84, + 0x1c2d: 84, + 0x1c2e: 84, + 0x1c2f: 84, + 0x1c30: 84, + 0x1c31: 84, + 0x1c32: 84, + 0x1c33: 84, + 0x1c36: 84, + 0x1c37: 84, + 0x1cd0: 84, + 0x1cd1: 84, + 0x1cd2: 84, + 0x1cd4: 84, + 0x1cd5: 84, + 0x1cd6: 84, + 0x1cd7: 84, + 0x1cd8: 84, + 0x1cd9: 84, + 0x1cda: 84, + 0x1cdb: 84, + 0x1cdc: 84, + 0x1cdd: 84, + 0x1cde: 84, + 0x1cdf: 84, + 0x1ce0: 84, + 0x1ce2: 84, + 0x1ce3: 84, + 0x1ce4: 84, + 0x1ce5: 84, + 0x1ce6: 84, + 0x1ce7: 84, + 0x1ce8: 84, + 0x1ced: 84, + 0x1cf4: 84, + 0x1cf8: 84, + 0x1cf9: 84, + 0x1dc0: 84, + 0x1dc1: 84, + 0x1dc2: 84, + 0x1dc3: 84, + 0x1dc4: 84, + 0x1dc5: 84, + 0x1dc6: 84, + 0x1dc7: 84, + 0x1dc8: 84, + 0x1dc9: 84, + 0x1dca: 84, + 0x1dcb: 84, + 0x1dcc: 84, + 0x1dcd: 84, + 0x1dce: 84, + 0x1dcf: 84, + 0x1dd0: 84, + 0x1dd1: 84, + 0x1dd2: 84, + 0x1dd3: 84, + 0x1dd4: 84, + 0x1dd5: 84, + 0x1dd6: 84, + 0x1dd7: 84, + 0x1dd8: 84, + 0x1dd9: 84, + 0x1dda: 84, + 0x1ddb: 84, + 0x1ddc: 84, + 0x1ddd: 84, + 0x1dde: 84, + 0x1ddf: 84, + 0x1de0: 84, + 0x1de1: 84, + 0x1de2: 84, + 0x1de3: 84, + 0x1de4: 84, + 0x1de5: 84, + 0x1de6: 84, + 0x1de7: 84, + 0x1de8: 84, + 0x1de9: 84, + 0x1dea: 84, + 0x1deb: 84, + 0x1dec: 84, + 0x1ded: 84, + 0x1dee: 84, + 0x1def: 84, + 0x1df0: 84, + 0x1df1: 84, + 0x1df2: 84, + 0x1df3: 84, + 0x1df4: 84, + 0x1df5: 84, + 0x1df6: 84, + 0x1df7: 84, + 0x1df8: 84, + 0x1df9: 84, + 0x1dfa: 84, + 0x1dfb: 84, + 0x1dfc: 84, + 0x1dfd: 84, + 0x1dfe: 84, + 0x1dff: 84, + 0x200b: 84, + 0x200d: 67, + 0x200e: 84, + 0x200f: 84, + 0x202a: 84, + 0x202b: 84, + 0x202c: 84, + 0x202d: 84, + 0x202e: 84, + 0x2060: 84, + 0x2061: 84, + 0x2062: 84, + 0x2063: 84, + 0x2064: 84, + 0x206a: 84, + 0x206b: 84, + 0x206c: 84, + 0x206d: 84, + 0x206e: 84, + 0x206f: 84, + 0x20d0: 84, + 0x20d1: 84, + 0x20d2: 84, + 0x20d3: 84, + 0x20d4: 84, + 0x20d5: 84, + 0x20d6: 84, + 0x20d7: 84, + 0x20d8: 84, + 0x20d9: 84, + 0x20da: 84, + 0x20db: 84, + 0x20dc: 84, + 0x20dd: 84, + 0x20de: 84, + 0x20df: 84, + 0x20e0: 84, + 0x20e1: 84, + 0x20e2: 84, + 0x20e3: 84, + 0x20e4: 84, + 0x20e5: 84, + 0x20e6: 84, + 0x20e7: 84, + 0x20e8: 84, + 0x20e9: 84, + 0x20ea: 84, + 0x20eb: 84, + 0x20ec: 84, + 0x20ed: 84, + 0x20ee: 84, + 0x20ef: 84, + 0x20f0: 84, + 0x2cef: 84, + 0x2cf0: 84, + 0x2cf1: 84, + 0x2d7f: 84, + 0x2de0: 84, + 0x2de1: 84, + 0x2de2: 84, + 0x2de3: 84, + 0x2de4: 84, + 0x2de5: 84, + 0x2de6: 84, + 0x2de7: 84, + 0x2de8: 84, + 0x2de9: 84, + 0x2dea: 84, + 0x2deb: 84, + 0x2dec: 84, + 0x2ded: 84, + 0x2dee: 84, + 0x2def: 84, + 0x2df0: 84, + 0x2df1: 84, + 0x2df2: 84, + 0x2df3: 84, + 0x2df4: 84, + 0x2df5: 84, + 0x2df6: 84, + 0x2df7: 84, + 0x2df8: 84, + 0x2df9: 84, + 0x2dfa: 84, + 0x2dfb: 84, + 0x2dfc: 84, + 0x2dfd: 84, + 0x2dfe: 84, + 0x2dff: 84, + 0x302a: 84, + 0x302b: 84, + 0x302c: 84, + 0x302d: 84, + 0x3099: 84, + 0x309a: 84, + 0xa66f: 84, + 0xa670: 84, + 0xa671: 84, + 0xa672: 84, + 0xa674: 84, + 0xa675: 84, + 0xa676: 84, + 0xa677: 84, + 0xa678: 84, + 0xa679: 84, + 0xa67a: 84, + 0xa67b: 84, + 0xa67c: 84, + 0xa67d: 84, + 0xa69e: 84, + 0xa69f: 84, + 0xa6f0: 84, + 0xa6f1: 84, + 0xa802: 84, + 0xa806: 84, + 0xa80b: 84, + 0xa825: 84, + 0xa826: 84, + 0xa82c: 84, + 0xa840: 68, + 0xa841: 68, + 0xa842: 68, + 0xa843: 68, + 0xa844: 68, + 0xa845: 68, + 0xa846: 68, + 0xa847: 68, + 0xa848: 68, + 0xa849: 68, + 0xa84a: 68, + 0xa84b: 68, + 0xa84c: 68, + 0xa84d: 68, + 0xa84e: 68, + 0xa84f: 68, + 0xa850: 68, + 0xa851: 68, + 0xa852: 68, + 0xa853: 68, + 0xa854: 68, + 0xa855: 68, + 0xa856: 68, + 0xa857: 68, + 0xa858: 68, + 0xa859: 68, + 0xa85a: 68, + 0xa85b: 68, + 0xa85c: 68, + 0xa85d: 68, + 0xa85e: 68, + 0xa85f: 68, + 0xa860: 68, + 0xa861: 68, + 0xa862: 68, + 0xa863: 68, + 0xa864: 68, + 0xa865: 68, + 0xa866: 68, + 0xa867: 68, + 0xa868: 68, + 0xa869: 68, + 0xa86a: 68, + 0xa86b: 68, + 0xa86c: 68, + 0xa86d: 68, + 0xa86e: 68, + 0xa86f: 68, + 0xa870: 68, + 0xa871: 68, + 0xa872: 76, + 0xa8c4: 84, + 0xa8c5: 84, + 0xa8e0: 84, + 0xa8e1: 84, + 0xa8e2: 84, + 0xa8e3: 84, + 0xa8e4: 84, + 0xa8e5: 84, + 0xa8e6: 84, + 0xa8e7: 84, + 0xa8e8: 84, + 0xa8e9: 84, + 0xa8ea: 84, + 0xa8eb: 84, + 0xa8ec: 84, + 0xa8ed: 84, + 0xa8ee: 84, + 0xa8ef: 84, + 0xa8f0: 84, + 0xa8f1: 84, + 0xa8ff: 84, + 0xa926: 84, + 0xa927: 84, + 0xa928: 84, + 0xa929: 84, + 0xa92a: 84, + 0xa92b: 84, + 0xa92c: 84, + 0xa92d: 84, + 0xa947: 84, + 0xa948: 84, + 0xa949: 84, + 0xa94a: 84, + 0xa94b: 84, + 0xa94c: 84, + 0xa94d: 84, + 0xa94e: 84, + 0xa94f: 84, + 0xa950: 84, + 0xa951: 84, + 0xa980: 84, + 0xa981: 84, + 0xa982: 84, + 0xa9b3: 84, + 0xa9b6: 84, + 0xa9b7: 84, + 0xa9b8: 84, + 0xa9b9: 84, + 0xa9bc: 84, + 0xa9bd: 84, + 0xa9e5: 84, + 0xaa29: 84, + 0xaa2a: 84, + 0xaa2b: 84, + 0xaa2c: 84, + 0xaa2d: 84, + 0xaa2e: 84, + 0xaa31: 84, + 0xaa32: 84, + 0xaa35: 84, + 0xaa36: 84, + 0xaa43: 84, + 0xaa4c: 84, + 0xaa7c: 84, + 0xaab0: 84, + 0xaab2: 84, + 0xaab3: 84, + 0xaab4: 84, + 0xaab7: 84, + 0xaab8: 84, + 0xaabe: 84, + 0xaabf: 84, + 0xaac1: 84, + 0xaaec: 84, + 0xaaed: 84, + 0xaaf6: 84, + 0xabe5: 84, + 0xabe8: 84, + 0xabed: 84, + 0xfb1e: 84, + 0xfe00: 84, + 0xfe01: 84, + 0xfe02: 84, + 0xfe03: 84, + 0xfe04: 84, + 0xfe05: 84, + 0xfe06: 84, + 0xfe07: 84, + 0xfe08: 84, + 0xfe09: 84, + 0xfe0a: 84, + 0xfe0b: 84, + 0xfe0c: 84, + 0xfe0d: 84, + 0xfe0e: 84, + 0xfe0f: 84, + 0xfe20: 84, + 0xfe21: 84, + 0xfe22: 84, + 0xfe23: 84, + 0xfe24: 84, + 0xfe25: 84, + 0xfe26: 84, + 0xfe27: 84, + 0xfe28: 84, + 0xfe29: 84, + 0xfe2a: 84, + 0xfe2b: 84, + 0xfe2c: 84, + 0xfe2d: 84, + 0xfe2e: 84, + 0xfe2f: 84, + 0xfeff: 84, + 0xfff9: 84, + 0xfffa: 84, + 0xfffb: 84, + 0x101fd: 84, + 0x102e0: 84, + 0x10376: 84, + 0x10377: 84, + 0x10378: 84, + 0x10379: 84, + 0x1037a: 84, + 0x10a01: 84, + 0x10a02: 84, + 0x10a03: 84, + 0x10a05: 84, + 0x10a06: 84, + 0x10a0c: 84, + 0x10a0d: 84, + 0x10a0e: 84, + 0x10a0f: 84, + 0x10a38: 84, + 0x10a39: 84, + 0x10a3a: 84, + 0x10a3f: 84, + 0x10ac0: 68, + 0x10ac1: 68, + 0x10ac2: 68, + 0x10ac3: 68, + 0x10ac4: 68, + 0x10ac5: 82, + 0x10ac7: 82, + 0x10ac9: 82, + 0x10aca: 82, + 0x10acd: 76, + 0x10ace: 82, + 0x10acf: 82, + 0x10ad0: 82, + 0x10ad1: 82, + 0x10ad2: 82, + 0x10ad3: 68, + 0x10ad4: 68, + 0x10ad5: 68, + 0x10ad6: 68, + 0x10ad7: 76, + 0x10ad8: 68, + 0x10ad9: 68, + 0x10ada: 68, + 0x10adb: 68, + 0x10adc: 68, + 0x10add: 82, + 0x10ade: 68, + 0x10adf: 68, + 0x10ae0: 68, + 0x10ae1: 82, + 0x10ae4: 82, + 0x10ae5: 84, + 0x10ae6: 84, + 0x10aeb: 68, + 0x10aec: 68, + 0x10aed: 68, + 0x10aee: 68, + 0x10aef: 82, + 0x10b80: 68, + 0x10b81: 82, + 0x10b82: 68, + 0x10b83: 82, + 0x10b84: 82, + 0x10b85: 82, + 0x10b86: 68, + 0x10b87: 68, + 0x10b88: 68, + 0x10b89: 82, + 0x10b8a: 68, + 0x10b8b: 68, + 0x10b8c: 82, + 0x10b8d: 68, + 0x10b8e: 82, + 0x10b8f: 82, + 0x10b90: 68, + 0x10b91: 82, + 0x10ba9: 82, + 0x10baa: 82, + 0x10bab: 82, + 0x10bac: 82, + 0x10bad: 68, + 0x10bae: 68, + 0x10d00: 76, + 0x10d01: 68, + 0x10d02: 68, + 0x10d03: 68, + 0x10d04: 68, + 0x10d05: 68, + 0x10d06: 68, + 0x10d07: 68, + 0x10d08: 68, + 0x10d09: 68, + 0x10d0a: 68, + 0x10d0b: 68, + 0x10d0c: 68, + 0x10d0d: 68, + 0x10d0e: 68, + 0x10d0f: 68, + 0x10d10: 68, + 0x10d11: 68, + 0x10d12: 68, + 0x10d13: 68, + 0x10d14: 68, + 0x10d15: 68, + 0x10d16: 68, + 0x10d17: 68, + 0x10d18: 68, + 0x10d19: 68, + 0x10d1a: 68, + 0x10d1b: 68, + 0x10d1c: 68, + 0x10d1d: 68, + 0x10d1e: 68, + 0x10d1f: 68, + 0x10d20: 68, + 0x10d21: 68, + 0x10d22: 82, + 0x10d23: 68, + 0x10d24: 84, + 0x10d25: 84, + 0x10d26: 84, + 0x10d27: 84, + 0x10eab: 84, + 0x10eac: 84, + 0x10efd: 84, + 0x10efe: 84, + 0x10eff: 84, + 0x10f30: 68, + 0x10f31: 68, + 0x10f32: 68, + 0x10f33: 82, + 0x10f34: 68, + 0x10f35: 68, + 0x10f36: 68, + 0x10f37: 68, + 0x10f38: 68, + 0x10f39: 68, + 0x10f3a: 68, + 0x10f3b: 68, + 0x10f3c: 68, + 0x10f3d: 68, + 0x10f3e: 68, + 0x10f3f: 68, + 0x10f40: 68, + 0x10f41: 68, + 0x10f42: 68, + 0x10f43: 68, + 0x10f44: 68, + 0x10f46: 84, + 0x10f47: 84, + 0x10f48: 84, + 0x10f49: 84, + 0x10f4a: 84, + 0x10f4b: 84, + 0x10f4c: 84, + 0x10f4d: 84, + 0x10f4e: 84, + 0x10f4f: 84, + 0x10f50: 84, + 0x10f51: 68, + 0x10f52: 68, + 0x10f53: 68, + 0x10f54: 82, + 0x10f70: 68, + 0x10f71: 68, + 0x10f72: 68, + 0x10f73: 68, + 0x10f74: 82, + 0x10f75: 82, + 0x10f76: 68, + 0x10f77: 68, + 0x10f78: 68, + 0x10f79: 68, + 0x10f7a: 68, + 0x10f7b: 68, + 0x10f7c: 68, + 0x10f7d: 68, + 0x10f7e: 68, + 0x10f7f: 68, + 0x10f80: 68, + 0x10f81: 68, + 0x10f82: 84, + 0x10f83: 84, + 0x10f84: 84, + 0x10f85: 84, + 0x10fb0: 68, + 0x10fb2: 68, + 0x10fb3: 68, + 0x10fb4: 82, + 0x10fb5: 82, + 0x10fb6: 82, + 0x10fb8: 68, + 0x10fb9: 82, + 0x10fba: 82, + 0x10fbb: 68, + 0x10fbc: 68, + 0x10fbd: 82, + 0x10fbe: 68, + 0x10fbf: 68, + 0x10fc1: 68, + 0x10fc2: 82, + 0x10fc3: 82, + 0x10fc4: 68, + 0x10fc9: 82, + 0x10fca: 68, + 0x10fcb: 76, + 0x11001: 84, + 0x11038: 84, + 0x11039: 84, + 0x1103a: 84, + 0x1103b: 84, + 0x1103c: 84, + 0x1103d: 84, + 0x1103e: 84, + 0x1103f: 84, + 0x11040: 84, + 0x11041: 84, + 0x11042: 84, + 0x11043: 84, + 0x11044: 84, + 0x11045: 84, + 0x11046: 84, + 0x11070: 84, + 0x11073: 84, + 0x11074: 84, + 0x1107f: 84, + 0x11080: 84, + 0x11081: 84, + 0x110b3: 84, + 0x110b4: 84, + 0x110b5: 84, + 0x110b6: 84, + 0x110b9: 84, + 0x110ba: 84, + 0x110c2: 84, + 0x11100: 84, + 0x11101: 84, + 0x11102: 84, + 0x11127: 84, + 0x11128: 84, + 0x11129: 84, + 0x1112a: 84, + 0x1112b: 84, + 0x1112d: 84, + 0x1112e: 84, + 0x1112f: 84, + 0x11130: 84, + 0x11131: 84, + 0x11132: 84, + 0x11133: 84, + 0x11134: 84, + 0x11173: 84, + 0x11180: 84, + 0x11181: 84, + 0x111b6: 84, + 0x111b7: 84, + 0x111b8: 84, + 0x111b9: 84, + 0x111ba: 84, + 0x111bb: 84, + 0x111bc: 84, + 0x111bd: 84, + 0x111be: 84, + 0x111c9: 84, + 0x111ca: 84, + 0x111cb: 84, + 0x111cc: 84, + 0x111cf: 84, + 0x1122f: 84, + 0x11230: 84, + 0x11231: 84, + 0x11234: 84, + 0x11236: 84, + 0x11237: 84, + 0x1123e: 84, + 0x11241: 84, + 0x112df: 84, + 0x112e3: 84, + 0x112e4: 84, + 0x112e5: 84, + 0x112e6: 84, + 0x112e7: 84, + 0x112e8: 84, + 0x112e9: 84, + 0x112ea: 84, + 0x11300: 84, + 0x11301: 84, + 0x1133b: 84, + 0x1133c: 84, + 0x11340: 84, + 0x11366: 84, + 0x11367: 84, + 0x11368: 84, + 0x11369: 84, + 0x1136a: 84, + 0x1136b: 84, + 0x1136c: 84, + 0x11370: 84, + 0x11371: 84, + 0x11372: 84, + 0x11373: 84, + 0x11374: 84, + 0x11438: 84, + 0x11439: 84, + 0x1143a: 84, + 0x1143b: 84, + 0x1143c: 84, + 0x1143d: 84, + 0x1143e: 84, + 0x1143f: 84, + 0x11442: 84, + 0x11443: 84, + 0x11444: 84, + 0x11446: 84, + 0x1145e: 84, + 0x114b3: 84, + 0x114b4: 84, + 0x114b5: 84, + 0x114b6: 84, + 0x114b7: 84, + 0x114b8: 84, + 0x114ba: 84, + 0x114bf: 84, + 0x114c0: 84, + 0x114c2: 84, + 0x114c3: 84, + 0x115b2: 84, + 0x115b3: 84, + 0x115b4: 84, + 0x115b5: 84, + 0x115bc: 84, + 0x115bd: 84, + 0x115bf: 84, + 0x115c0: 84, + 0x115dc: 84, + 0x115dd: 84, + 0x11633: 84, + 0x11634: 84, + 0x11635: 84, + 0x11636: 84, + 0x11637: 84, + 0x11638: 84, + 0x11639: 84, + 0x1163a: 84, + 0x1163d: 84, + 0x1163f: 84, + 0x11640: 84, + 0x116ab: 84, + 0x116ad: 84, + 0x116b0: 84, + 0x116b1: 84, + 0x116b2: 84, + 0x116b3: 84, + 0x116b4: 84, + 0x116b5: 84, + 0x116b7: 84, + 0x1171d: 84, + 0x1171e: 84, + 0x1171f: 84, + 0x11722: 84, + 0x11723: 84, + 0x11724: 84, + 0x11725: 84, + 0x11727: 84, + 0x11728: 84, + 0x11729: 84, + 0x1172a: 84, + 0x1172b: 84, + 0x1182f: 84, + 0x11830: 84, + 0x11831: 84, + 0x11832: 84, + 0x11833: 84, + 0x11834: 84, + 0x11835: 84, + 0x11836: 84, + 0x11837: 84, + 0x11839: 84, + 0x1183a: 84, + 0x1193b: 84, + 0x1193c: 84, + 0x1193e: 84, + 0x11943: 84, + 0x119d4: 84, + 0x119d5: 84, + 0x119d6: 84, + 0x119d7: 84, + 0x119da: 84, + 0x119db: 84, + 0x119e0: 84, + 0x11a01: 84, + 0x11a02: 84, + 0x11a03: 84, + 0x11a04: 84, + 0x11a05: 84, + 0x11a06: 84, + 0x11a07: 84, + 0x11a08: 84, + 0x11a09: 84, + 0x11a0a: 84, + 0x11a33: 84, + 0x11a34: 84, + 0x11a35: 84, + 0x11a36: 84, + 0x11a37: 84, + 0x11a38: 84, + 0x11a3b: 84, + 0x11a3c: 84, + 0x11a3d: 84, + 0x11a3e: 84, + 0x11a47: 84, + 0x11a51: 84, + 0x11a52: 84, + 0x11a53: 84, + 0x11a54: 84, + 0x11a55: 84, + 0x11a56: 84, + 0x11a59: 84, + 0x11a5a: 84, + 0x11a5b: 84, + 0x11a8a: 84, + 0x11a8b: 84, + 0x11a8c: 84, + 0x11a8d: 84, + 0x11a8e: 84, + 0x11a8f: 84, + 0x11a90: 84, + 0x11a91: 84, + 0x11a92: 84, + 0x11a93: 84, + 0x11a94: 84, + 0x11a95: 84, + 0x11a96: 84, + 0x11a98: 84, + 0x11a99: 84, + 0x11c30: 84, + 0x11c31: 84, + 0x11c32: 84, + 0x11c33: 84, + 0x11c34: 84, + 0x11c35: 84, + 0x11c36: 84, + 0x11c38: 84, + 0x11c39: 84, + 0x11c3a: 84, + 0x11c3b: 84, + 0x11c3c: 84, + 0x11c3d: 84, + 0x11c3f: 84, + 0x11c92: 84, + 0x11c93: 84, + 0x11c94: 84, + 0x11c95: 84, + 0x11c96: 84, + 0x11c97: 84, + 0x11c98: 84, + 0x11c99: 84, + 0x11c9a: 84, + 0x11c9b: 84, + 0x11c9c: 84, + 0x11c9d: 84, + 0x11c9e: 84, + 0x11c9f: 84, + 0x11ca0: 84, + 0x11ca1: 84, + 0x11ca2: 84, + 0x11ca3: 84, + 0x11ca4: 84, + 0x11ca5: 84, + 0x11ca6: 84, + 0x11ca7: 84, + 0x11caa: 84, + 0x11cab: 84, + 0x11cac: 84, + 0x11cad: 84, + 0x11cae: 84, + 0x11caf: 84, + 0x11cb0: 84, + 0x11cb2: 84, + 0x11cb3: 84, + 0x11cb5: 84, + 0x11cb6: 84, + 0x11d31: 84, + 0x11d32: 84, + 0x11d33: 84, + 0x11d34: 84, + 0x11d35: 84, + 0x11d36: 84, + 0x11d3a: 84, + 0x11d3c: 84, + 0x11d3d: 84, + 0x11d3f: 84, + 0x11d40: 84, + 0x11d41: 84, + 0x11d42: 84, + 0x11d43: 84, + 0x11d44: 84, + 0x11d45: 84, + 0x11d47: 84, + 0x11d90: 84, + 0x11d91: 84, + 0x11d95: 84, + 0x11d97: 84, + 0x11ef3: 84, + 0x11ef4: 84, + 0x11f00: 84, + 0x11f01: 84, + 0x11f36: 84, + 0x11f37: 84, + 0x11f38: 84, + 0x11f39: 84, + 0x11f3a: 84, + 0x11f40: 84, + 0x11f42: 84, + 0x13430: 84, + 0x13431: 84, + 0x13432: 84, + 0x13433: 84, + 0x13434: 84, + 0x13435: 84, + 0x13436: 84, + 0x13437: 84, + 0x13438: 84, + 0x13439: 84, + 0x1343a: 84, + 0x1343b: 84, + 0x1343c: 84, + 0x1343d: 84, + 0x1343e: 84, + 0x1343f: 84, + 0x13440: 84, + 0x13447: 84, + 0x13448: 84, + 0x13449: 84, + 0x1344a: 84, + 0x1344b: 84, + 0x1344c: 84, + 0x1344d: 84, + 0x1344e: 84, + 0x1344f: 84, + 0x13450: 84, + 0x13451: 84, + 0x13452: 84, + 0x13453: 84, + 0x13454: 84, + 0x13455: 84, + 0x16af0: 84, + 0x16af1: 84, + 0x16af2: 84, + 0x16af3: 84, + 0x16af4: 84, + 0x16b30: 84, + 0x16b31: 84, + 0x16b32: 84, + 0x16b33: 84, + 0x16b34: 84, + 0x16b35: 84, + 0x16b36: 84, + 0x16f4f: 84, + 0x16f8f: 84, + 0x16f90: 84, + 0x16f91: 84, + 0x16f92: 84, + 0x16fe4: 84, + 0x1bc9d: 84, + 0x1bc9e: 84, + 0x1bca0: 84, + 0x1bca1: 84, + 0x1bca2: 84, + 0x1bca3: 84, + 0x1cf00: 84, + 0x1cf01: 84, + 0x1cf02: 84, + 0x1cf03: 84, + 0x1cf04: 84, + 0x1cf05: 84, + 0x1cf06: 84, + 0x1cf07: 84, + 0x1cf08: 84, + 0x1cf09: 84, + 0x1cf0a: 84, + 0x1cf0b: 84, + 0x1cf0c: 84, + 0x1cf0d: 84, + 0x1cf0e: 84, + 0x1cf0f: 84, + 0x1cf10: 84, + 0x1cf11: 84, + 0x1cf12: 84, + 0x1cf13: 84, + 0x1cf14: 84, + 0x1cf15: 84, + 0x1cf16: 84, + 0x1cf17: 84, + 0x1cf18: 84, + 0x1cf19: 84, + 0x1cf1a: 84, + 0x1cf1b: 84, + 0x1cf1c: 84, + 0x1cf1d: 84, + 0x1cf1e: 84, + 0x1cf1f: 84, + 0x1cf20: 84, + 0x1cf21: 84, + 0x1cf22: 84, + 0x1cf23: 84, + 0x1cf24: 84, + 0x1cf25: 84, + 0x1cf26: 84, + 0x1cf27: 84, + 0x1cf28: 84, + 0x1cf29: 84, + 0x1cf2a: 84, + 0x1cf2b: 84, + 0x1cf2c: 84, + 0x1cf2d: 84, + 0x1cf30: 84, + 0x1cf31: 84, + 0x1cf32: 84, + 0x1cf33: 84, + 0x1cf34: 84, + 0x1cf35: 84, + 0x1cf36: 84, + 0x1cf37: 84, + 0x1cf38: 84, + 0x1cf39: 84, + 0x1cf3a: 84, + 0x1cf3b: 84, + 0x1cf3c: 84, + 0x1cf3d: 84, + 0x1cf3e: 84, + 0x1cf3f: 84, + 0x1cf40: 84, + 0x1cf41: 84, + 0x1cf42: 84, + 0x1cf43: 84, + 0x1cf44: 84, + 0x1cf45: 84, + 0x1cf46: 84, + 0x1d167: 84, + 0x1d168: 84, + 0x1d169: 84, + 0x1d173: 84, + 0x1d174: 84, + 0x1d175: 84, + 0x1d176: 84, + 0x1d177: 84, + 0x1d178: 84, + 0x1d179: 84, + 0x1d17a: 84, + 0x1d17b: 84, + 0x1d17c: 84, + 0x1d17d: 84, + 0x1d17e: 84, + 0x1d17f: 84, + 0x1d180: 84, + 0x1d181: 84, + 0x1d182: 84, + 0x1d185: 84, + 0x1d186: 84, + 0x1d187: 84, + 0x1d188: 84, + 0x1d189: 84, + 0x1d18a: 84, + 0x1d18b: 84, + 0x1d1aa: 84, + 0x1d1ab: 84, + 0x1d1ac: 84, + 0x1d1ad: 84, + 0x1d242: 84, + 0x1d243: 84, + 0x1d244: 84, + 0x1da00: 84, + 0x1da01: 84, + 0x1da02: 84, + 0x1da03: 84, + 0x1da04: 84, + 0x1da05: 84, + 0x1da06: 84, + 0x1da07: 84, + 0x1da08: 84, + 0x1da09: 84, + 0x1da0a: 84, + 0x1da0b: 84, + 0x1da0c: 84, + 0x1da0d: 84, + 0x1da0e: 84, + 0x1da0f: 84, + 0x1da10: 84, + 0x1da11: 84, + 0x1da12: 84, + 0x1da13: 84, + 0x1da14: 84, + 0x1da15: 84, + 0x1da16: 84, + 0x1da17: 84, + 0x1da18: 84, + 0x1da19: 84, + 0x1da1a: 84, + 0x1da1b: 84, + 0x1da1c: 84, + 0x1da1d: 84, + 0x1da1e: 84, + 0x1da1f: 84, + 0x1da20: 84, + 0x1da21: 84, + 0x1da22: 84, + 0x1da23: 84, + 0x1da24: 84, + 0x1da25: 84, + 0x1da26: 84, + 0x1da27: 84, + 0x1da28: 84, + 0x1da29: 84, + 0x1da2a: 84, + 0x1da2b: 84, + 0x1da2c: 84, + 0x1da2d: 84, + 0x1da2e: 84, + 0x1da2f: 84, + 0x1da30: 84, + 0x1da31: 84, + 0x1da32: 84, + 0x1da33: 84, + 0x1da34: 84, + 0x1da35: 84, + 0x1da36: 84, + 0x1da3b: 84, + 0x1da3c: 84, + 0x1da3d: 84, + 0x1da3e: 84, + 0x1da3f: 84, + 0x1da40: 84, + 0x1da41: 84, + 0x1da42: 84, + 0x1da43: 84, + 0x1da44: 84, + 0x1da45: 84, + 0x1da46: 84, + 0x1da47: 84, + 0x1da48: 84, + 0x1da49: 84, + 0x1da4a: 84, + 0x1da4b: 84, + 0x1da4c: 84, + 0x1da4d: 84, + 0x1da4e: 84, + 0x1da4f: 84, + 0x1da50: 84, + 0x1da51: 84, + 0x1da52: 84, + 0x1da53: 84, + 0x1da54: 84, + 0x1da55: 84, + 0x1da56: 84, + 0x1da57: 84, + 0x1da58: 84, + 0x1da59: 84, + 0x1da5a: 84, + 0x1da5b: 84, + 0x1da5c: 84, + 0x1da5d: 84, + 0x1da5e: 84, + 0x1da5f: 84, + 0x1da60: 84, + 0x1da61: 84, + 0x1da62: 84, + 0x1da63: 84, + 0x1da64: 84, + 0x1da65: 84, + 0x1da66: 84, + 0x1da67: 84, + 0x1da68: 84, + 0x1da69: 84, + 0x1da6a: 84, + 0x1da6b: 84, + 0x1da6c: 84, + 0x1da75: 84, + 0x1da84: 84, + 0x1da9b: 84, + 0x1da9c: 84, + 0x1da9d: 84, + 0x1da9e: 84, + 0x1da9f: 84, + 0x1daa1: 84, + 0x1daa2: 84, + 0x1daa3: 84, + 0x1daa4: 84, + 0x1daa5: 84, + 0x1daa6: 84, + 0x1daa7: 84, + 0x1daa8: 84, + 0x1daa9: 84, + 0x1daaa: 84, + 0x1daab: 84, + 0x1daac: 84, + 0x1daad: 84, + 0x1daae: 84, + 0x1daaf: 84, + 0x1e000: 84, + 0x1e001: 84, + 0x1e002: 84, + 0x1e003: 84, + 0x1e004: 84, + 0x1e005: 84, + 0x1e006: 84, + 0x1e008: 84, + 0x1e009: 84, + 0x1e00a: 84, + 0x1e00b: 84, + 0x1e00c: 84, + 0x1e00d: 84, + 0x1e00e: 84, + 0x1e00f: 84, + 0x1e010: 84, + 0x1e011: 84, + 0x1e012: 84, + 0x1e013: 84, + 0x1e014: 84, + 0x1e015: 84, + 0x1e016: 84, + 0x1e017: 84, + 0x1e018: 84, + 0x1e01b: 84, + 0x1e01c: 84, + 0x1e01d: 84, + 0x1e01e: 84, + 0x1e01f: 84, + 0x1e020: 84, + 0x1e021: 84, + 0x1e023: 84, + 0x1e024: 84, + 0x1e026: 84, + 0x1e027: 84, + 0x1e028: 84, + 0x1e029: 84, + 0x1e02a: 84, + 0x1e08f: 84, + 0x1e130: 84, + 0x1e131: 84, + 0x1e132: 84, + 0x1e133: 84, + 0x1e134: 84, + 0x1e135: 84, + 0x1e136: 84, + 0x1e2ae: 84, + 0x1e2ec: 84, + 0x1e2ed: 84, + 0x1e2ee: 84, + 0x1e2ef: 84, + 0x1e4ec: 84, + 0x1e4ed: 84, + 0x1e4ee: 84, + 0x1e4ef: 84, + 0x1e8d0: 84, + 0x1e8d1: 84, + 0x1e8d2: 84, + 0x1e8d3: 84, + 0x1e8d4: 84, + 0x1e8d5: 84, + 0x1e8d6: 84, + 0x1e900: 68, + 0x1e901: 68, + 0x1e902: 68, + 0x1e903: 68, + 0x1e904: 68, + 0x1e905: 68, + 0x1e906: 68, + 0x1e907: 68, + 0x1e908: 68, + 0x1e909: 68, + 0x1e90a: 68, + 0x1e90b: 68, + 0x1e90c: 68, + 0x1e90d: 68, + 0x1e90e: 68, + 0x1e90f: 68, + 0x1e910: 68, + 0x1e911: 68, + 0x1e912: 68, + 0x1e913: 68, + 0x1e914: 68, + 0x1e915: 68, + 0x1e916: 68, + 0x1e917: 68, + 0x1e918: 68, + 0x1e919: 68, + 0x1e91a: 68, + 0x1e91b: 68, + 0x1e91c: 68, + 0x1e91d: 68, + 0x1e91e: 68, + 0x1e91f: 68, + 0x1e920: 68, + 0x1e921: 68, + 0x1e922: 68, + 0x1e923: 68, + 0x1e924: 68, + 0x1e925: 68, + 0x1e926: 68, + 0x1e927: 68, + 0x1e928: 68, + 0x1e929: 68, + 0x1e92a: 68, + 0x1e92b: 68, + 0x1e92c: 68, + 0x1e92d: 68, + 0x1e92e: 68, + 0x1e92f: 68, + 0x1e930: 68, + 0x1e931: 68, + 0x1e932: 68, + 0x1e933: 68, + 0x1e934: 68, + 0x1e935: 68, + 0x1e936: 68, + 0x1e937: 68, + 0x1e938: 68, + 0x1e939: 68, + 0x1e93a: 68, + 0x1e93b: 68, + 0x1e93c: 68, + 0x1e93d: 68, + 0x1e93e: 68, + 0x1e93f: 68, + 0x1e940: 68, + 0x1e941: 68, + 0x1e942: 68, + 0x1e943: 68, + 0x1e944: 84, + 0x1e945: 84, + 0x1e946: 84, + 0x1e947: 84, + 0x1e948: 84, + 0x1e949: 84, + 0x1e94a: 84, + 0x1e94b: 84, + 0xe0001: 84, + 0xe0020: 84, + 0xe0021: 84, + 0xe0022: 84, + 0xe0023: 84, + 0xe0024: 84, + 0xe0025: 84, + 0xe0026: 84, + 0xe0027: 84, + 0xe0028: 84, + 0xe0029: 84, + 0xe002a: 84, + 0xe002b: 84, + 0xe002c: 84, + 0xe002d: 84, + 0xe002e: 84, + 0xe002f: 84, + 0xe0030: 84, + 0xe0031: 84, + 0xe0032: 84, + 0xe0033: 84, + 0xe0034: 84, + 0xe0035: 84, + 0xe0036: 84, + 0xe0037: 84, + 0xe0038: 84, + 0xe0039: 84, + 0xe003a: 84, + 0xe003b: 84, + 0xe003c: 84, + 0xe003d: 84, + 0xe003e: 84, + 0xe003f: 84, + 0xe0040: 84, + 0xe0041: 84, + 0xe0042: 84, + 0xe0043: 84, + 0xe0044: 84, + 0xe0045: 84, + 0xe0046: 84, + 0xe0047: 84, + 0xe0048: 84, + 0xe0049: 84, + 0xe004a: 84, + 0xe004b: 84, + 0xe004c: 84, + 0xe004d: 84, + 0xe004e: 84, + 0xe004f: 84, + 0xe0050: 84, + 0xe0051: 84, + 0xe0052: 84, + 0xe0053: 84, + 0xe0054: 84, + 0xe0055: 84, + 0xe0056: 84, + 0xe0057: 84, + 0xe0058: 84, + 0xe0059: 84, + 0xe005a: 84, + 0xe005b: 84, + 0xe005c: 84, + 0xe005d: 84, + 0xe005e: 84, + 0xe005f: 84, + 0xe0060: 84, + 0xe0061: 84, + 0xe0062: 84, + 0xe0063: 84, + 0xe0064: 84, + 0xe0065: 84, + 0xe0066: 84, + 0xe0067: 84, + 0xe0068: 84, + 0xe0069: 84, + 0xe006a: 84, + 0xe006b: 84, + 0xe006c: 84, + 0xe006d: 84, + 0xe006e: 84, + 0xe006f: 84, + 0xe0070: 84, + 0xe0071: 84, + 0xe0072: 84, + 0xe0073: 84, + 0xe0074: 84, + 0xe0075: 84, + 0xe0076: 84, + 0xe0077: 84, + 0xe0078: 84, + 0xe0079: 84, + 0xe007a: 84, + 0xe007b: 84, + 0xe007c: 84, + 0xe007d: 84, + 0xe007e: 84, + 0xe007f: 84, + 0xe0100: 84, + 0xe0101: 84, + 0xe0102: 84, + 0xe0103: 84, + 0xe0104: 84, + 0xe0105: 84, + 0xe0106: 84, + 0xe0107: 84, + 0xe0108: 84, + 0xe0109: 84, + 0xe010a: 84, + 0xe010b: 84, + 0xe010c: 84, + 0xe010d: 84, + 0xe010e: 84, + 0xe010f: 84, + 0xe0110: 84, + 0xe0111: 84, + 0xe0112: 84, + 0xe0113: 84, + 0xe0114: 84, + 0xe0115: 84, + 0xe0116: 84, + 0xe0117: 84, + 0xe0118: 84, + 0xe0119: 84, + 0xe011a: 84, + 0xe011b: 84, + 0xe011c: 84, + 0xe011d: 84, + 0xe011e: 84, + 0xe011f: 84, + 0xe0120: 84, + 0xe0121: 84, + 0xe0122: 84, + 0xe0123: 84, + 0xe0124: 84, + 0xe0125: 84, + 0xe0126: 84, + 0xe0127: 84, + 0xe0128: 84, + 0xe0129: 84, + 0xe012a: 84, + 0xe012b: 84, + 0xe012c: 84, + 0xe012d: 84, + 0xe012e: 84, + 0xe012f: 84, + 0xe0130: 84, + 0xe0131: 84, + 0xe0132: 84, + 0xe0133: 84, + 0xe0134: 84, + 0xe0135: 84, + 0xe0136: 84, + 0xe0137: 84, + 0xe0138: 84, + 0xe0139: 84, + 0xe013a: 84, + 0xe013b: 84, + 0xe013c: 84, + 0xe013d: 84, + 0xe013e: 84, + 0xe013f: 84, + 0xe0140: 84, + 0xe0141: 84, + 0xe0142: 84, + 0xe0143: 84, + 0xe0144: 84, + 0xe0145: 84, + 0xe0146: 84, + 0xe0147: 84, + 0xe0148: 84, + 0xe0149: 84, + 0xe014a: 84, + 0xe014b: 84, + 0xe014c: 84, + 0xe014d: 84, + 0xe014e: 84, + 0xe014f: 84, + 0xe0150: 84, + 0xe0151: 84, + 0xe0152: 84, + 0xe0153: 84, + 0xe0154: 84, + 0xe0155: 84, + 0xe0156: 84, + 0xe0157: 84, + 0xe0158: 84, + 0xe0159: 84, + 0xe015a: 84, + 0xe015b: 84, + 0xe015c: 84, + 0xe015d: 84, + 0xe015e: 84, + 0xe015f: 84, + 0xe0160: 84, + 0xe0161: 84, + 0xe0162: 84, + 0xe0163: 84, + 0xe0164: 84, + 0xe0165: 84, + 0xe0166: 84, + 0xe0167: 84, + 0xe0168: 84, + 0xe0169: 84, + 0xe016a: 84, + 0xe016b: 84, + 0xe016c: 84, + 0xe016d: 84, + 0xe016e: 84, + 0xe016f: 84, + 0xe0170: 84, + 0xe0171: 84, + 0xe0172: 84, + 0xe0173: 84, + 0xe0174: 84, + 0xe0175: 84, + 0xe0176: 84, + 0xe0177: 84, + 0xe0178: 84, + 0xe0179: 84, + 0xe017a: 84, + 0xe017b: 84, + 0xe017c: 84, + 0xe017d: 84, + 0xe017e: 84, + 0xe017f: 84, + 0xe0180: 84, + 0xe0181: 84, + 0xe0182: 84, + 0xe0183: 84, + 0xe0184: 84, + 0xe0185: 84, + 0xe0186: 84, + 0xe0187: 84, + 0xe0188: 84, + 0xe0189: 84, + 0xe018a: 84, + 0xe018b: 84, + 0xe018c: 84, + 0xe018d: 84, + 0xe018e: 84, + 0xe018f: 84, + 0xe0190: 84, + 0xe0191: 84, + 0xe0192: 84, + 0xe0193: 84, + 0xe0194: 84, + 0xe0195: 84, + 0xe0196: 84, + 0xe0197: 84, + 0xe0198: 84, + 0xe0199: 84, + 0xe019a: 84, + 0xe019b: 84, + 0xe019c: 84, + 0xe019d: 84, + 0xe019e: 84, + 0xe019f: 84, + 0xe01a0: 84, + 0xe01a1: 84, + 0xe01a2: 84, + 0xe01a3: 84, + 0xe01a4: 84, + 0xe01a5: 84, + 0xe01a6: 84, + 0xe01a7: 84, + 0xe01a8: 84, + 0xe01a9: 84, + 0xe01aa: 84, + 0xe01ab: 84, + 0xe01ac: 84, + 0xe01ad: 84, + 0xe01ae: 84, + 0xe01af: 84, + 0xe01b0: 84, + 0xe01b1: 84, + 0xe01b2: 84, + 0xe01b3: 84, + 0xe01b4: 84, + 0xe01b5: 84, + 0xe01b6: 84, + 0xe01b7: 84, + 0xe01b8: 84, + 0xe01b9: 84, + 0xe01ba: 84, + 0xe01bb: 84, + 0xe01bc: 84, + 0xe01bd: 84, + 0xe01be: 84, + 0xe01bf: 84, + 0xe01c0: 84, + 0xe01c1: 84, + 0xe01c2: 84, + 0xe01c3: 84, + 0xe01c4: 84, + 0xe01c5: 84, + 0xe01c6: 84, + 0xe01c7: 84, + 0xe01c8: 84, + 0xe01c9: 84, + 0xe01ca: 84, + 0xe01cb: 84, + 0xe01cc: 84, + 0xe01cd: 84, + 0xe01ce: 84, + 0xe01cf: 84, + 0xe01d0: 84, + 0xe01d1: 84, + 0xe01d2: 84, + 0xe01d3: 84, + 0xe01d4: 84, + 0xe01d5: 84, + 0xe01d6: 84, + 0xe01d7: 84, + 0xe01d8: 84, + 0xe01d9: 84, + 0xe01da: 84, + 0xe01db: 84, + 0xe01dc: 84, + 0xe01dd: 84, + 0xe01de: 84, + 0xe01df: 84, + 0xe01e0: 84, + 0xe01e1: 84, + 0xe01e2: 84, + 0xe01e3: 84, + 0xe01e4: 84, + 0xe01e5: 84, + 0xe01e6: 84, + 0xe01e7: 84, + 0xe01e8: 84, + 0xe01e9: 84, + 0xe01ea: 84, + 0xe01eb: 84, + 0xe01ec: 84, + 0xe01ed: 84, + 0xe01ee: 84, + 0xe01ef: 84, +} +codepoint_classes = { + 'PVALID': ( + 0x2d0000002e, + 0x300000003a, + 0x610000007b, + 0xdf000000f7, + 0xf800000100, + 0x10100000102, + 0x10300000104, + 0x10500000106, + 0x10700000108, + 0x1090000010a, + 0x10b0000010c, + 0x10d0000010e, + 0x10f00000110, + 0x11100000112, + 0x11300000114, + 0x11500000116, + 0x11700000118, + 0x1190000011a, + 0x11b0000011c, + 0x11d0000011e, + 0x11f00000120, + 0x12100000122, + 0x12300000124, + 0x12500000126, + 0x12700000128, + 0x1290000012a, + 0x12b0000012c, + 0x12d0000012e, + 0x12f00000130, + 0x13100000132, + 0x13500000136, + 0x13700000139, + 0x13a0000013b, + 0x13c0000013d, + 0x13e0000013f, + 0x14200000143, + 0x14400000145, + 0x14600000147, + 0x14800000149, + 0x14b0000014c, + 0x14d0000014e, + 0x14f00000150, + 0x15100000152, + 0x15300000154, + 0x15500000156, + 0x15700000158, + 0x1590000015a, + 0x15b0000015c, + 0x15d0000015e, + 0x15f00000160, + 0x16100000162, + 0x16300000164, + 0x16500000166, + 0x16700000168, + 0x1690000016a, + 0x16b0000016c, + 0x16d0000016e, + 0x16f00000170, + 0x17100000172, + 0x17300000174, + 0x17500000176, + 0x17700000178, + 0x17a0000017b, + 0x17c0000017d, + 0x17e0000017f, + 0x18000000181, + 0x18300000184, + 0x18500000186, + 0x18800000189, + 0x18c0000018e, + 0x19200000193, + 0x19500000196, + 0x1990000019c, + 0x19e0000019f, + 0x1a1000001a2, + 0x1a3000001a4, + 0x1a5000001a6, + 0x1a8000001a9, + 0x1aa000001ac, + 0x1ad000001ae, + 0x1b0000001b1, + 0x1b4000001b5, + 0x1b6000001b7, + 0x1b9000001bc, + 0x1bd000001c4, + 0x1ce000001cf, + 0x1d0000001d1, + 0x1d2000001d3, + 0x1d4000001d5, + 0x1d6000001d7, + 0x1d8000001d9, + 0x1da000001db, + 0x1dc000001de, + 0x1df000001e0, + 0x1e1000001e2, + 0x1e3000001e4, + 0x1e5000001e6, + 0x1e7000001e8, + 0x1e9000001ea, + 0x1eb000001ec, + 0x1ed000001ee, + 0x1ef000001f1, + 0x1f5000001f6, + 0x1f9000001fa, + 0x1fb000001fc, + 0x1fd000001fe, + 0x1ff00000200, + 0x20100000202, + 0x20300000204, + 0x20500000206, + 0x20700000208, + 0x2090000020a, + 0x20b0000020c, + 0x20d0000020e, + 0x20f00000210, + 0x21100000212, + 0x21300000214, + 0x21500000216, + 0x21700000218, + 0x2190000021a, + 0x21b0000021c, + 0x21d0000021e, + 0x21f00000220, + 0x22100000222, + 0x22300000224, + 0x22500000226, + 0x22700000228, + 0x2290000022a, + 0x22b0000022c, + 0x22d0000022e, + 0x22f00000230, + 0x23100000232, + 0x2330000023a, + 0x23c0000023d, + 0x23f00000241, + 0x24200000243, + 0x24700000248, + 0x2490000024a, + 0x24b0000024c, + 0x24d0000024e, + 0x24f000002b0, + 0x2b9000002c2, + 0x2c6000002d2, + 0x2ec000002ed, + 0x2ee000002ef, + 0x30000000340, + 0x34200000343, + 0x3460000034f, + 0x35000000370, + 0x37100000372, + 0x37300000374, + 0x37700000378, + 0x37b0000037e, + 0x39000000391, + 0x3ac000003cf, + 0x3d7000003d8, + 0x3d9000003da, + 0x3db000003dc, + 0x3dd000003de, + 0x3df000003e0, + 0x3e1000003e2, + 0x3e3000003e4, + 0x3e5000003e6, + 0x3e7000003e8, + 0x3e9000003ea, + 0x3eb000003ec, + 0x3ed000003ee, + 0x3ef000003f0, + 0x3f3000003f4, + 0x3f8000003f9, + 0x3fb000003fd, + 0x43000000460, + 0x46100000462, + 0x46300000464, + 0x46500000466, + 0x46700000468, + 0x4690000046a, + 0x46b0000046c, + 0x46d0000046e, + 0x46f00000470, + 0x47100000472, + 0x47300000474, + 0x47500000476, + 0x47700000478, + 0x4790000047a, + 0x47b0000047c, + 0x47d0000047e, + 0x47f00000480, + 0x48100000482, + 0x48300000488, + 0x48b0000048c, + 0x48d0000048e, + 0x48f00000490, + 0x49100000492, + 0x49300000494, + 0x49500000496, + 0x49700000498, + 0x4990000049a, + 0x49b0000049c, + 0x49d0000049e, + 0x49f000004a0, + 0x4a1000004a2, + 0x4a3000004a4, + 0x4a5000004a6, + 0x4a7000004a8, + 0x4a9000004aa, + 0x4ab000004ac, + 0x4ad000004ae, + 0x4af000004b0, + 0x4b1000004b2, + 0x4b3000004b4, + 0x4b5000004b6, + 0x4b7000004b8, + 0x4b9000004ba, + 0x4bb000004bc, + 0x4bd000004be, + 0x4bf000004c0, + 0x4c2000004c3, + 0x4c4000004c5, + 0x4c6000004c7, + 0x4c8000004c9, + 0x4ca000004cb, + 0x4cc000004cd, + 0x4ce000004d0, + 0x4d1000004d2, + 0x4d3000004d4, + 0x4d5000004d6, + 0x4d7000004d8, + 0x4d9000004da, + 0x4db000004dc, + 0x4dd000004de, + 0x4df000004e0, + 0x4e1000004e2, + 0x4e3000004e4, + 0x4e5000004e6, + 0x4e7000004e8, + 0x4e9000004ea, + 0x4eb000004ec, + 0x4ed000004ee, + 0x4ef000004f0, + 0x4f1000004f2, + 0x4f3000004f4, + 0x4f5000004f6, + 0x4f7000004f8, + 0x4f9000004fa, + 0x4fb000004fc, + 0x4fd000004fe, + 0x4ff00000500, + 0x50100000502, + 0x50300000504, + 0x50500000506, + 0x50700000508, + 0x5090000050a, + 0x50b0000050c, + 0x50d0000050e, + 0x50f00000510, + 0x51100000512, + 0x51300000514, + 0x51500000516, + 0x51700000518, + 0x5190000051a, + 0x51b0000051c, + 0x51d0000051e, + 0x51f00000520, + 0x52100000522, + 0x52300000524, + 0x52500000526, + 0x52700000528, + 0x5290000052a, + 0x52b0000052c, + 0x52d0000052e, + 0x52f00000530, + 0x5590000055a, + 0x56000000587, + 0x58800000589, + 0x591000005be, + 0x5bf000005c0, + 0x5c1000005c3, + 0x5c4000005c6, + 0x5c7000005c8, + 0x5d0000005eb, + 0x5ef000005f3, + 0x6100000061b, + 0x62000000640, + 0x64100000660, + 0x66e00000675, + 0x679000006d4, + 0x6d5000006dd, + 0x6df000006e9, + 0x6ea000006f0, + 0x6fa00000700, + 0x7100000074b, + 0x74d000007b2, + 0x7c0000007f6, + 0x7fd000007fe, + 0x8000000082e, + 0x8400000085c, + 0x8600000086b, + 0x87000000888, + 0x8890000088f, + 0x898000008e2, + 0x8e300000958, + 0x96000000964, + 0x96600000970, + 0x97100000984, + 0x9850000098d, + 0x98f00000991, + 0x993000009a9, + 0x9aa000009b1, + 0x9b2000009b3, + 0x9b6000009ba, + 0x9bc000009c5, + 0x9c7000009c9, + 0x9cb000009cf, + 0x9d7000009d8, + 0x9e0000009e4, + 0x9e6000009f2, + 0x9fc000009fd, + 0x9fe000009ff, + 0xa0100000a04, + 0xa0500000a0b, + 0xa0f00000a11, + 0xa1300000a29, + 0xa2a00000a31, + 0xa3200000a33, + 0xa3500000a36, + 0xa3800000a3a, + 0xa3c00000a3d, + 0xa3e00000a43, + 0xa4700000a49, + 0xa4b00000a4e, + 0xa5100000a52, + 0xa5c00000a5d, + 0xa6600000a76, + 0xa8100000a84, + 0xa8500000a8e, + 0xa8f00000a92, + 0xa9300000aa9, + 0xaaa00000ab1, + 0xab200000ab4, + 0xab500000aba, + 0xabc00000ac6, + 0xac700000aca, + 0xacb00000ace, + 0xad000000ad1, + 0xae000000ae4, + 0xae600000af0, + 0xaf900000b00, + 0xb0100000b04, + 0xb0500000b0d, + 0xb0f00000b11, + 0xb1300000b29, + 0xb2a00000b31, + 0xb3200000b34, + 0xb3500000b3a, + 0xb3c00000b45, + 0xb4700000b49, + 0xb4b00000b4e, + 0xb5500000b58, + 0xb5f00000b64, + 0xb6600000b70, + 0xb7100000b72, + 0xb8200000b84, + 0xb8500000b8b, + 0xb8e00000b91, + 0xb9200000b96, + 0xb9900000b9b, + 0xb9c00000b9d, + 0xb9e00000ba0, + 0xba300000ba5, + 0xba800000bab, + 0xbae00000bba, + 0xbbe00000bc3, + 0xbc600000bc9, + 0xbca00000bce, + 0xbd000000bd1, + 0xbd700000bd8, + 0xbe600000bf0, + 0xc0000000c0d, + 0xc0e00000c11, + 0xc1200000c29, + 0xc2a00000c3a, + 0xc3c00000c45, + 0xc4600000c49, + 0xc4a00000c4e, + 0xc5500000c57, + 0xc5800000c5b, + 0xc5d00000c5e, + 0xc6000000c64, + 0xc6600000c70, + 0xc8000000c84, + 0xc8500000c8d, + 0xc8e00000c91, + 0xc9200000ca9, + 0xcaa00000cb4, + 0xcb500000cba, + 0xcbc00000cc5, + 0xcc600000cc9, + 0xcca00000cce, + 0xcd500000cd7, + 0xcdd00000cdf, + 0xce000000ce4, + 0xce600000cf0, + 0xcf100000cf4, + 0xd0000000d0d, + 0xd0e00000d11, + 0xd1200000d45, + 0xd4600000d49, + 0xd4a00000d4f, + 0xd5400000d58, + 0xd5f00000d64, + 0xd6600000d70, + 0xd7a00000d80, + 0xd8100000d84, + 0xd8500000d97, + 0xd9a00000db2, + 0xdb300000dbc, + 0xdbd00000dbe, + 0xdc000000dc7, + 0xdca00000dcb, + 0xdcf00000dd5, + 0xdd600000dd7, + 0xdd800000de0, + 0xde600000df0, + 0xdf200000df4, + 0xe0100000e33, + 0xe3400000e3b, + 0xe4000000e4f, + 0xe5000000e5a, + 0xe8100000e83, + 0xe8400000e85, + 0xe8600000e8b, + 0xe8c00000ea4, + 0xea500000ea6, + 0xea700000eb3, + 0xeb400000ebe, + 0xec000000ec5, + 0xec600000ec7, + 0xec800000ecf, + 0xed000000eda, + 0xede00000ee0, + 0xf0000000f01, + 0xf0b00000f0c, + 0xf1800000f1a, + 0xf2000000f2a, + 0xf3500000f36, + 0xf3700000f38, + 0xf3900000f3a, + 0xf3e00000f43, + 0xf4400000f48, + 0xf4900000f4d, + 0xf4e00000f52, + 0xf5300000f57, + 0xf5800000f5c, + 0xf5d00000f69, + 0xf6a00000f6d, + 0xf7100000f73, + 0xf7400000f75, + 0xf7a00000f81, + 0xf8200000f85, + 0xf8600000f93, + 0xf9400000f98, + 0xf9900000f9d, + 0xf9e00000fa2, + 0xfa300000fa7, + 0xfa800000fac, + 0xfad00000fb9, + 0xfba00000fbd, + 0xfc600000fc7, + 0x10000000104a, + 0x10500000109e, + 0x10d0000010fb, + 0x10fd00001100, + 0x120000001249, + 0x124a0000124e, + 0x125000001257, + 0x125800001259, + 0x125a0000125e, + 0x126000001289, + 0x128a0000128e, + 0x1290000012b1, + 0x12b2000012b6, + 0x12b8000012bf, + 0x12c0000012c1, + 0x12c2000012c6, + 0x12c8000012d7, + 0x12d800001311, + 0x131200001316, + 0x13180000135b, + 0x135d00001360, + 0x138000001390, + 0x13a0000013f6, + 0x14010000166d, + 0x166f00001680, + 0x16810000169b, + 0x16a0000016eb, + 0x16f1000016f9, + 0x170000001716, + 0x171f00001735, + 0x174000001754, + 0x17600000176d, + 0x176e00001771, + 0x177200001774, + 0x1780000017b4, + 0x17b6000017d4, + 0x17d7000017d8, + 0x17dc000017de, + 0x17e0000017ea, + 0x18100000181a, + 0x182000001879, + 0x1880000018ab, + 0x18b0000018f6, + 0x19000000191f, + 0x19200000192c, + 0x19300000193c, + 0x19460000196e, + 0x197000001975, + 0x1980000019ac, + 0x19b0000019ca, + 0x19d0000019da, + 0x1a0000001a1c, + 0x1a2000001a5f, + 0x1a6000001a7d, + 0x1a7f00001a8a, + 0x1a9000001a9a, + 0x1aa700001aa8, + 0x1ab000001abe, + 0x1abf00001acf, + 0x1b0000001b4d, + 0x1b5000001b5a, + 0x1b6b00001b74, + 0x1b8000001bf4, + 0x1c0000001c38, + 0x1c4000001c4a, + 0x1c4d00001c7e, + 0x1cd000001cd3, + 0x1cd400001cfb, + 0x1d0000001d2c, + 0x1d2f00001d30, + 0x1d3b00001d3c, + 0x1d4e00001d4f, + 0x1d6b00001d78, + 0x1d7900001d9b, + 0x1dc000001e00, + 0x1e0100001e02, + 0x1e0300001e04, + 0x1e0500001e06, + 0x1e0700001e08, + 0x1e0900001e0a, + 0x1e0b00001e0c, + 0x1e0d00001e0e, + 0x1e0f00001e10, + 0x1e1100001e12, + 0x1e1300001e14, + 0x1e1500001e16, + 0x1e1700001e18, + 0x1e1900001e1a, + 0x1e1b00001e1c, + 0x1e1d00001e1e, + 0x1e1f00001e20, + 0x1e2100001e22, + 0x1e2300001e24, + 0x1e2500001e26, + 0x1e2700001e28, + 0x1e2900001e2a, + 0x1e2b00001e2c, + 0x1e2d00001e2e, + 0x1e2f00001e30, + 0x1e3100001e32, + 0x1e3300001e34, + 0x1e3500001e36, + 0x1e3700001e38, + 0x1e3900001e3a, + 0x1e3b00001e3c, + 0x1e3d00001e3e, + 0x1e3f00001e40, + 0x1e4100001e42, + 0x1e4300001e44, + 0x1e4500001e46, + 0x1e4700001e48, + 0x1e4900001e4a, + 0x1e4b00001e4c, + 0x1e4d00001e4e, + 0x1e4f00001e50, + 0x1e5100001e52, + 0x1e5300001e54, + 0x1e5500001e56, + 0x1e5700001e58, + 0x1e5900001e5a, + 0x1e5b00001e5c, + 0x1e5d00001e5e, + 0x1e5f00001e60, + 0x1e6100001e62, + 0x1e6300001e64, + 0x1e6500001e66, + 0x1e6700001e68, + 0x1e6900001e6a, + 0x1e6b00001e6c, + 0x1e6d00001e6e, + 0x1e6f00001e70, + 0x1e7100001e72, + 0x1e7300001e74, + 0x1e7500001e76, + 0x1e7700001e78, + 0x1e7900001e7a, + 0x1e7b00001e7c, + 0x1e7d00001e7e, + 0x1e7f00001e80, + 0x1e8100001e82, + 0x1e8300001e84, + 0x1e8500001e86, + 0x1e8700001e88, + 0x1e8900001e8a, + 0x1e8b00001e8c, + 0x1e8d00001e8e, + 0x1e8f00001e90, + 0x1e9100001e92, + 0x1e9300001e94, + 0x1e9500001e9a, + 0x1e9c00001e9e, + 0x1e9f00001ea0, + 0x1ea100001ea2, + 0x1ea300001ea4, + 0x1ea500001ea6, + 0x1ea700001ea8, + 0x1ea900001eaa, + 0x1eab00001eac, + 0x1ead00001eae, + 0x1eaf00001eb0, + 0x1eb100001eb2, + 0x1eb300001eb4, + 0x1eb500001eb6, + 0x1eb700001eb8, + 0x1eb900001eba, + 0x1ebb00001ebc, + 0x1ebd00001ebe, + 0x1ebf00001ec0, + 0x1ec100001ec2, + 0x1ec300001ec4, + 0x1ec500001ec6, + 0x1ec700001ec8, + 0x1ec900001eca, + 0x1ecb00001ecc, + 0x1ecd00001ece, + 0x1ecf00001ed0, + 0x1ed100001ed2, + 0x1ed300001ed4, + 0x1ed500001ed6, + 0x1ed700001ed8, + 0x1ed900001eda, + 0x1edb00001edc, + 0x1edd00001ede, + 0x1edf00001ee0, + 0x1ee100001ee2, + 0x1ee300001ee4, + 0x1ee500001ee6, + 0x1ee700001ee8, + 0x1ee900001eea, + 0x1eeb00001eec, + 0x1eed00001eee, + 0x1eef00001ef0, + 0x1ef100001ef2, + 0x1ef300001ef4, + 0x1ef500001ef6, + 0x1ef700001ef8, + 0x1ef900001efa, + 0x1efb00001efc, + 0x1efd00001efe, + 0x1eff00001f08, + 0x1f1000001f16, + 0x1f2000001f28, + 0x1f3000001f38, + 0x1f4000001f46, + 0x1f5000001f58, + 0x1f6000001f68, + 0x1f7000001f71, + 0x1f7200001f73, + 0x1f7400001f75, + 0x1f7600001f77, + 0x1f7800001f79, + 0x1f7a00001f7b, + 0x1f7c00001f7d, + 0x1fb000001fb2, + 0x1fb600001fb7, + 0x1fc600001fc7, + 0x1fd000001fd3, + 0x1fd600001fd8, + 0x1fe000001fe3, + 0x1fe400001fe8, + 0x1ff600001ff7, + 0x214e0000214f, + 0x218400002185, + 0x2c3000002c60, + 0x2c6100002c62, + 0x2c6500002c67, + 0x2c6800002c69, + 0x2c6a00002c6b, + 0x2c6c00002c6d, + 0x2c7100002c72, + 0x2c7300002c75, + 0x2c7600002c7c, + 0x2c8100002c82, + 0x2c8300002c84, + 0x2c8500002c86, + 0x2c8700002c88, + 0x2c8900002c8a, + 0x2c8b00002c8c, + 0x2c8d00002c8e, + 0x2c8f00002c90, + 0x2c9100002c92, + 0x2c9300002c94, + 0x2c9500002c96, + 0x2c9700002c98, + 0x2c9900002c9a, + 0x2c9b00002c9c, + 0x2c9d00002c9e, + 0x2c9f00002ca0, + 0x2ca100002ca2, + 0x2ca300002ca4, + 0x2ca500002ca6, + 0x2ca700002ca8, + 0x2ca900002caa, + 0x2cab00002cac, + 0x2cad00002cae, + 0x2caf00002cb0, + 0x2cb100002cb2, + 0x2cb300002cb4, + 0x2cb500002cb6, + 0x2cb700002cb8, + 0x2cb900002cba, + 0x2cbb00002cbc, + 0x2cbd00002cbe, + 0x2cbf00002cc0, + 0x2cc100002cc2, + 0x2cc300002cc4, + 0x2cc500002cc6, + 0x2cc700002cc8, + 0x2cc900002cca, + 0x2ccb00002ccc, + 0x2ccd00002cce, + 0x2ccf00002cd0, + 0x2cd100002cd2, + 0x2cd300002cd4, + 0x2cd500002cd6, + 0x2cd700002cd8, + 0x2cd900002cda, + 0x2cdb00002cdc, + 0x2cdd00002cde, + 0x2cdf00002ce0, + 0x2ce100002ce2, + 0x2ce300002ce5, + 0x2cec00002ced, + 0x2cee00002cf2, + 0x2cf300002cf4, + 0x2d0000002d26, + 0x2d2700002d28, + 0x2d2d00002d2e, + 0x2d3000002d68, + 0x2d7f00002d97, + 0x2da000002da7, + 0x2da800002daf, + 0x2db000002db7, + 0x2db800002dbf, + 0x2dc000002dc7, + 0x2dc800002dcf, + 0x2dd000002dd7, + 0x2dd800002ddf, + 0x2de000002e00, + 0x2e2f00002e30, + 0x300500003008, + 0x302a0000302e, + 0x303c0000303d, + 0x304100003097, + 0x30990000309b, + 0x309d0000309f, + 0x30a1000030fb, + 0x30fc000030ff, + 0x310500003130, + 0x31a0000031c0, + 0x31f000003200, + 0x340000004dc0, + 0x4e000000a48d, + 0xa4d00000a4fe, + 0xa5000000a60d, + 0xa6100000a62c, + 0xa6410000a642, + 0xa6430000a644, + 0xa6450000a646, + 0xa6470000a648, + 0xa6490000a64a, + 0xa64b0000a64c, + 0xa64d0000a64e, + 0xa64f0000a650, + 0xa6510000a652, + 0xa6530000a654, + 0xa6550000a656, + 0xa6570000a658, + 0xa6590000a65a, + 0xa65b0000a65c, + 0xa65d0000a65e, + 0xa65f0000a660, + 0xa6610000a662, + 0xa6630000a664, + 0xa6650000a666, + 0xa6670000a668, + 0xa6690000a66a, + 0xa66b0000a66c, + 0xa66d0000a670, + 0xa6740000a67e, + 0xa67f0000a680, + 0xa6810000a682, + 0xa6830000a684, + 0xa6850000a686, + 0xa6870000a688, + 0xa6890000a68a, + 0xa68b0000a68c, + 0xa68d0000a68e, + 0xa68f0000a690, + 0xa6910000a692, + 0xa6930000a694, + 0xa6950000a696, + 0xa6970000a698, + 0xa6990000a69a, + 0xa69b0000a69c, + 0xa69e0000a6e6, + 0xa6f00000a6f2, + 0xa7170000a720, + 0xa7230000a724, + 0xa7250000a726, + 0xa7270000a728, + 0xa7290000a72a, + 0xa72b0000a72c, + 0xa72d0000a72e, + 0xa72f0000a732, + 0xa7330000a734, + 0xa7350000a736, + 0xa7370000a738, + 0xa7390000a73a, + 0xa73b0000a73c, + 0xa73d0000a73e, + 0xa73f0000a740, + 0xa7410000a742, + 0xa7430000a744, + 0xa7450000a746, + 0xa7470000a748, + 0xa7490000a74a, + 0xa74b0000a74c, + 0xa74d0000a74e, + 0xa74f0000a750, + 0xa7510000a752, + 0xa7530000a754, + 0xa7550000a756, + 0xa7570000a758, + 0xa7590000a75a, + 0xa75b0000a75c, + 0xa75d0000a75e, + 0xa75f0000a760, + 0xa7610000a762, + 0xa7630000a764, + 0xa7650000a766, + 0xa7670000a768, + 0xa7690000a76a, + 0xa76b0000a76c, + 0xa76d0000a76e, + 0xa76f0000a770, + 0xa7710000a779, + 0xa77a0000a77b, + 0xa77c0000a77d, + 0xa77f0000a780, + 0xa7810000a782, + 0xa7830000a784, + 0xa7850000a786, + 0xa7870000a789, + 0xa78c0000a78d, + 0xa78e0000a790, + 0xa7910000a792, + 0xa7930000a796, + 0xa7970000a798, + 0xa7990000a79a, + 0xa79b0000a79c, + 0xa79d0000a79e, + 0xa79f0000a7a0, + 0xa7a10000a7a2, + 0xa7a30000a7a4, + 0xa7a50000a7a6, + 0xa7a70000a7a8, + 0xa7a90000a7aa, + 0xa7af0000a7b0, + 0xa7b50000a7b6, + 0xa7b70000a7b8, + 0xa7b90000a7ba, + 0xa7bb0000a7bc, + 0xa7bd0000a7be, + 0xa7bf0000a7c0, + 0xa7c10000a7c2, + 0xa7c30000a7c4, + 0xa7c80000a7c9, + 0xa7ca0000a7cb, + 0xa7d10000a7d2, + 0xa7d30000a7d4, + 0xa7d50000a7d6, + 0xa7d70000a7d8, + 0xa7d90000a7da, + 0xa7f20000a7f5, + 0xa7f60000a7f8, + 0xa7fa0000a828, + 0xa82c0000a82d, + 0xa8400000a874, + 0xa8800000a8c6, + 0xa8d00000a8da, + 0xa8e00000a8f8, + 0xa8fb0000a8fc, + 0xa8fd0000a92e, + 0xa9300000a954, + 0xa9800000a9c1, + 0xa9cf0000a9da, + 0xa9e00000a9ff, + 0xaa000000aa37, + 0xaa400000aa4e, + 0xaa500000aa5a, + 0xaa600000aa77, + 0xaa7a0000aac3, + 0xaadb0000aade, + 0xaae00000aaf0, + 0xaaf20000aaf7, + 0xab010000ab07, + 0xab090000ab0f, + 0xab110000ab17, + 0xab200000ab27, + 0xab280000ab2f, + 0xab300000ab5b, + 0xab600000ab69, + 0xabc00000abeb, + 0xabec0000abee, + 0xabf00000abfa, + 0xac000000d7a4, + 0xfa0e0000fa10, + 0xfa110000fa12, + 0xfa130000fa15, + 0xfa1f0000fa20, + 0xfa210000fa22, + 0xfa230000fa25, + 0xfa270000fa2a, + 0xfb1e0000fb1f, + 0xfe200000fe30, + 0xfe730000fe74, + 0x100000001000c, + 0x1000d00010027, + 0x100280001003b, + 0x1003c0001003e, + 0x1003f0001004e, + 0x100500001005e, + 0x10080000100fb, + 0x101fd000101fe, + 0x102800001029d, + 0x102a0000102d1, + 0x102e0000102e1, + 0x1030000010320, + 0x1032d00010341, + 0x103420001034a, + 0x103500001037b, + 0x103800001039e, + 0x103a0000103c4, + 0x103c8000103d0, + 0x104280001049e, + 0x104a0000104aa, + 0x104d8000104fc, + 0x1050000010528, + 0x1053000010564, + 0x10597000105a2, + 0x105a3000105b2, + 0x105b3000105ba, + 0x105bb000105bd, + 0x1060000010737, + 0x1074000010756, + 0x1076000010768, + 0x1078000010786, + 0x10787000107b1, + 0x107b2000107bb, + 0x1080000010806, + 0x1080800010809, + 0x1080a00010836, + 0x1083700010839, + 0x1083c0001083d, + 0x1083f00010856, + 0x1086000010877, + 0x108800001089f, + 0x108e0000108f3, + 0x108f4000108f6, + 0x1090000010916, + 0x109200001093a, + 0x10980000109b8, + 0x109be000109c0, + 0x10a0000010a04, + 0x10a0500010a07, + 0x10a0c00010a14, + 0x10a1500010a18, + 0x10a1900010a36, + 0x10a3800010a3b, + 0x10a3f00010a40, + 0x10a6000010a7d, + 0x10a8000010a9d, + 0x10ac000010ac8, + 0x10ac900010ae7, + 0x10b0000010b36, + 0x10b4000010b56, + 0x10b6000010b73, + 0x10b8000010b92, + 0x10c0000010c49, + 0x10cc000010cf3, + 0x10d0000010d28, + 0x10d3000010d3a, + 0x10e8000010eaa, + 0x10eab00010ead, + 0x10eb000010eb2, + 0x10efd00010f1d, + 0x10f2700010f28, + 0x10f3000010f51, + 0x10f7000010f86, + 0x10fb000010fc5, + 0x10fe000010ff7, + 0x1100000011047, + 0x1106600011076, + 0x1107f000110bb, + 0x110c2000110c3, + 0x110d0000110e9, + 0x110f0000110fa, + 0x1110000011135, + 0x1113600011140, + 0x1114400011148, + 0x1115000011174, + 0x1117600011177, + 0x11180000111c5, + 0x111c9000111cd, + 0x111ce000111db, + 0x111dc000111dd, + 0x1120000011212, + 0x1121300011238, + 0x1123e00011242, + 0x1128000011287, + 0x1128800011289, + 0x1128a0001128e, + 0x1128f0001129e, + 0x1129f000112a9, + 0x112b0000112eb, + 0x112f0000112fa, + 0x1130000011304, + 0x113050001130d, + 0x1130f00011311, + 0x1131300011329, + 0x1132a00011331, + 0x1133200011334, + 0x113350001133a, + 0x1133b00011345, + 0x1134700011349, + 0x1134b0001134e, + 0x1135000011351, + 0x1135700011358, + 0x1135d00011364, + 0x113660001136d, + 0x1137000011375, + 0x114000001144b, + 0x114500001145a, + 0x1145e00011462, + 0x11480000114c6, + 0x114c7000114c8, + 0x114d0000114da, + 0x11580000115b6, + 0x115b8000115c1, + 0x115d8000115de, + 0x1160000011641, + 0x1164400011645, + 0x116500001165a, + 0x11680000116b9, + 0x116c0000116ca, + 0x117000001171b, + 0x1171d0001172c, + 0x117300001173a, + 0x1174000011747, + 0x118000001183b, + 0x118c0000118ea, + 0x118ff00011907, + 0x119090001190a, + 0x1190c00011914, + 0x1191500011917, + 0x1191800011936, + 0x1193700011939, + 0x1193b00011944, + 0x119500001195a, + 0x119a0000119a8, + 0x119aa000119d8, + 0x119da000119e2, + 0x119e3000119e5, + 0x11a0000011a3f, + 0x11a4700011a48, + 0x11a5000011a9a, + 0x11a9d00011a9e, + 0x11ab000011af9, + 0x11c0000011c09, + 0x11c0a00011c37, + 0x11c3800011c41, + 0x11c5000011c5a, + 0x11c7200011c90, + 0x11c9200011ca8, + 0x11ca900011cb7, + 0x11d0000011d07, + 0x11d0800011d0a, + 0x11d0b00011d37, + 0x11d3a00011d3b, + 0x11d3c00011d3e, + 0x11d3f00011d48, + 0x11d5000011d5a, + 0x11d6000011d66, + 0x11d6700011d69, + 0x11d6a00011d8f, + 0x11d9000011d92, + 0x11d9300011d99, + 0x11da000011daa, + 0x11ee000011ef7, + 0x11f0000011f11, + 0x11f1200011f3b, + 0x11f3e00011f43, + 0x11f5000011f5a, + 0x11fb000011fb1, + 0x120000001239a, + 0x1248000012544, + 0x12f9000012ff1, + 0x1300000013430, + 0x1344000013456, + 0x1440000014647, + 0x1680000016a39, + 0x16a4000016a5f, + 0x16a6000016a6a, + 0x16a7000016abf, + 0x16ac000016aca, + 0x16ad000016aee, + 0x16af000016af5, + 0x16b0000016b37, + 0x16b4000016b44, + 0x16b5000016b5a, + 0x16b6300016b78, + 0x16b7d00016b90, + 0x16e6000016e80, + 0x16f0000016f4b, + 0x16f4f00016f88, + 0x16f8f00016fa0, + 0x16fe000016fe2, + 0x16fe300016fe5, + 0x16ff000016ff2, + 0x17000000187f8, + 0x1880000018cd6, + 0x18d0000018d09, + 0x1aff00001aff4, + 0x1aff50001affc, + 0x1affd0001afff, + 0x1b0000001b123, + 0x1b1320001b133, + 0x1b1500001b153, + 0x1b1550001b156, + 0x1b1640001b168, + 0x1b1700001b2fc, + 0x1bc000001bc6b, + 0x1bc700001bc7d, + 0x1bc800001bc89, + 0x1bc900001bc9a, + 0x1bc9d0001bc9f, + 0x1cf000001cf2e, + 0x1cf300001cf47, + 0x1da000001da37, + 0x1da3b0001da6d, + 0x1da750001da76, + 0x1da840001da85, + 0x1da9b0001daa0, + 0x1daa10001dab0, + 0x1df000001df1f, + 0x1df250001df2b, + 0x1e0000001e007, + 0x1e0080001e019, + 0x1e01b0001e022, + 0x1e0230001e025, + 0x1e0260001e02b, + 0x1e08f0001e090, + 0x1e1000001e12d, + 0x1e1300001e13e, + 0x1e1400001e14a, + 0x1e14e0001e14f, + 0x1e2900001e2af, + 0x1e2c00001e2fa, + 0x1e4d00001e4fa, + 0x1e7e00001e7e7, + 0x1e7e80001e7ec, + 0x1e7ed0001e7ef, + 0x1e7f00001e7ff, + 0x1e8000001e8c5, + 0x1e8d00001e8d7, + 0x1e9220001e94c, + 0x1e9500001e95a, + 0x200000002a6e0, + 0x2a7000002b73a, + 0x2b7400002b81e, + 0x2b8200002cea2, + 0x2ceb00002ebe1, + 0x300000003134b, + 0x31350000323b0, + ), + 'CONTEXTJ': ( + 0x200c0000200e, + ), + 'CONTEXTO': ( + 0xb7000000b8, + 0x37500000376, + 0x5f3000005f5, + 0x6600000066a, + 0x6f0000006fa, + 0x30fb000030fc, + ), +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py b/venv/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py new file mode 100644 index 0000000..6a43b04 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py @@ -0,0 +1,54 @@ +""" +Given a list of integers, made up of (hopefully) a small number of long runs +of consecutive integers, compute a representation of the form +((start1, end1), (start2, end2) ...). Then answer the question "was x present +in the original list?" in time O(log(# runs)). +""" + +import bisect +from typing import List, Tuple + +def intranges_from_list(list_: List[int]) -> Tuple[int, ...]: + """Represent a list of integers as a sequence of ranges: + ((start_0, end_0), (start_1, end_1), ...), such that the original + integers are exactly those x such that start_i <= x < end_i for some i. + + Ranges are encoded as single integers (start << 32 | end), not as tuples. + """ + + sorted_list = sorted(list_) + ranges = [] + last_write = -1 + for i in range(len(sorted_list)): + if i+1 < len(sorted_list): + if sorted_list[i] == sorted_list[i+1]-1: + continue + current_range = sorted_list[last_write+1:i+1] + ranges.append(_encode_range(current_range[0], current_range[-1] + 1)) + last_write = i + + return tuple(ranges) + +def _encode_range(start: int, end: int) -> int: + return (start << 32) | end + +def _decode_range(r: int) -> Tuple[int, int]: + return (r >> 32), (r & ((1 << 32) - 1)) + + +def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool: + """Determine if `int_` falls into one of the ranges in `ranges`.""" + tuple_ = _encode_range(int_, 0) + pos = bisect.bisect_left(ranges, tuple_) + # we could be immediately ahead of a tuple (start, end) + # with start < int_ <= end + if pos > 0: + left, right = _decode_range(ranges[pos-1]) + if left <= int_ < right: + return True + # or we could be immediately behind a tuple (int_, end) + if pos < len(ranges): + left, _ = _decode_range(ranges[pos]) + if left == int_: + return True + return False diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py b/venv/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py new file mode 100644 index 0000000..8501893 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py @@ -0,0 +1,2 @@ +__version__ = '3.4' + diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py b/venv/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py new file mode 100644 index 0000000..186796c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py @@ -0,0 +1,8600 @@ +# This file is automatically generated by tools/idna-data +# vim: set fileencoding=utf-8 : + +from typing import List, Tuple, Union + + +"""IDNA Mapping Table from UTS46.""" + + +__version__ = '15.0.0' +def _seg_0() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x0, '3'), + (0x1, '3'), + (0x2, '3'), + (0x3, '3'), + (0x4, '3'), + (0x5, '3'), + (0x6, '3'), + (0x7, '3'), + (0x8, '3'), + (0x9, '3'), + (0xA, '3'), + (0xB, '3'), + (0xC, '3'), + (0xD, '3'), + (0xE, '3'), + (0xF, '3'), + (0x10, '3'), + (0x11, '3'), + (0x12, '3'), + (0x13, '3'), + (0x14, '3'), + (0x15, '3'), + (0x16, '3'), + (0x17, '3'), + (0x18, '3'), + (0x19, '3'), + (0x1A, '3'), + (0x1B, '3'), + (0x1C, '3'), + (0x1D, '3'), + (0x1E, '3'), + (0x1F, '3'), + (0x20, '3'), + (0x21, '3'), + (0x22, '3'), + (0x23, '3'), + (0x24, '3'), + (0x25, '3'), + (0x26, '3'), + (0x27, '3'), + (0x28, '3'), + (0x29, '3'), + (0x2A, '3'), + (0x2B, '3'), + (0x2C, '3'), + (0x2D, 'V'), + (0x2E, 'V'), + (0x2F, '3'), + (0x30, 'V'), + (0x31, 'V'), + (0x32, 'V'), + (0x33, 'V'), + (0x34, 'V'), + (0x35, 'V'), + (0x36, 'V'), + (0x37, 'V'), + (0x38, 'V'), + (0x39, 'V'), + (0x3A, '3'), + (0x3B, '3'), + (0x3C, '3'), + (0x3D, '3'), + (0x3E, '3'), + (0x3F, '3'), + (0x40, '3'), + (0x41, 'M', 'a'), + (0x42, 'M', 'b'), + (0x43, 'M', 'c'), + (0x44, 'M', 'd'), + (0x45, 'M', 'e'), + (0x46, 'M', 'f'), + (0x47, 'M', 'g'), + (0x48, 'M', 'h'), + (0x49, 'M', 'i'), + (0x4A, 'M', 'j'), + (0x4B, 'M', 'k'), + (0x4C, 'M', 'l'), + (0x4D, 'M', 'm'), + (0x4E, 'M', 'n'), + (0x4F, 'M', 'o'), + (0x50, 'M', 'p'), + (0x51, 'M', 'q'), + (0x52, 'M', 'r'), + (0x53, 'M', 's'), + (0x54, 'M', 't'), + (0x55, 'M', 'u'), + (0x56, 'M', 'v'), + (0x57, 'M', 'w'), + (0x58, 'M', 'x'), + (0x59, 'M', 'y'), + (0x5A, 'M', 'z'), + (0x5B, '3'), + (0x5C, '3'), + (0x5D, '3'), + (0x5E, '3'), + (0x5F, '3'), + (0x60, '3'), + (0x61, 'V'), + (0x62, 'V'), + (0x63, 'V'), + ] + +def _seg_1() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x64, 'V'), + (0x65, 'V'), + (0x66, 'V'), + (0x67, 'V'), + (0x68, 'V'), + (0x69, 'V'), + (0x6A, 'V'), + (0x6B, 'V'), + (0x6C, 'V'), + (0x6D, 'V'), + (0x6E, 'V'), + (0x6F, 'V'), + (0x70, 'V'), + (0x71, 'V'), + (0x72, 'V'), + (0x73, 'V'), + (0x74, 'V'), + (0x75, 'V'), + (0x76, 'V'), + (0x77, 'V'), + (0x78, 'V'), + (0x79, 'V'), + (0x7A, 'V'), + (0x7B, '3'), + (0x7C, '3'), + (0x7D, '3'), + (0x7E, '3'), + (0x7F, '3'), + (0x80, 'X'), + (0x81, 'X'), + (0x82, 'X'), + (0x83, 'X'), + (0x84, 'X'), + (0x85, 'X'), + (0x86, 'X'), + (0x87, 'X'), + (0x88, 'X'), + (0x89, 'X'), + (0x8A, 'X'), + (0x8B, 'X'), + (0x8C, 'X'), + (0x8D, 'X'), + (0x8E, 'X'), + (0x8F, 'X'), + (0x90, 'X'), + (0x91, 'X'), + (0x92, 'X'), + (0x93, 'X'), + (0x94, 'X'), + (0x95, 'X'), + (0x96, 'X'), + (0x97, 'X'), + (0x98, 'X'), + (0x99, 'X'), + (0x9A, 'X'), + (0x9B, 'X'), + (0x9C, 'X'), + (0x9D, 'X'), + (0x9E, 'X'), + (0x9F, 'X'), + (0xA0, '3', ' '), + (0xA1, 'V'), + (0xA2, 'V'), + (0xA3, 'V'), + (0xA4, 'V'), + (0xA5, 'V'), + (0xA6, 'V'), + (0xA7, 'V'), + (0xA8, '3', ' ̈'), + (0xA9, 'V'), + (0xAA, 'M', 'a'), + (0xAB, 'V'), + (0xAC, 'V'), + (0xAD, 'I'), + (0xAE, 'V'), + (0xAF, '3', ' ̄'), + (0xB0, 'V'), + (0xB1, 'V'), + (0xB2, 'M', '2'), + (0xB3, 'M', '3'), + (0xB4, '3', ' ́'), + (0xB5, 'M', 'μ'), + (0xB6, 'V'), + (0xB7, 'V'), + (0xB8, '3', ' ̧'), + (0xB9, 'M', '1'), + (0xBA, 'M', 'o'), + (0xBB, 'V'), + (0xBC, 'M', '1⁄4'), + (0xBD, 'M', '1⁄2'), + (0xBE, 'M', '3⁄4'), + (0xBF, 'V'), + (0xC0, 'M', 'à'), + (0xC1, 'M', 'á'), + (0xC2, 'M', 'â'), + (0xC3, 'M', 'ã'), + (0xC4, 'M', 'ä'), + (0xC5, 'M', 'å'), + (0xC6, 'M', 'æ'), + (0xC7, 'M', 'ç'), + ] + +def _seg_2() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xC8, 'M', 'è'), + (0xC9, 'M', 'é'), + (0xCA, 'M', 'ê'), + (0xCB, 'M', 'ë'), + (0xCC, 'M', 'ì'), + (0xCD, 'M', 'í'), + (0xCE, 'M', 'î'), + (0xCF, 'M', 'ï'), + (0xD0, 'M', 'ð'), + (0xD1, 'M', 'ñ'), + (0xD2, 'M', 'ò'), + (0xD3, 'M', 'ó'), + (0xD4, 'M', 'ô'), + (0xD5, 'M', 'õ'), + (0xD6, 'M', 'ö'), + (0xD7, 'V'), + (0xD8, 'M', 'ø'), + (0xD9, 'M', 'ù'), + (0xDA, 'M', 'ú'), + (0xDB, 'M', 'û'), + (0xDC, 'M', 'ü'), + (0xDD, 'M', 'ý'), + (0xDE, 'M', 'þ'), + (0xDF, 'D', 'ss'), + (0xE0, 'V'), + (0xE1, 'V'), + (0xE2, 'V'), + (0xE3, 'V'), + (0xE4, 'V'), + (0xE5, 'V'), + (0xE6, 'V'), + (0xE7, 'V'), + (0xE8, 'V'), + (0xE9, 'V'), + (0xEA, 'V'), + (0xEB, 'V'), + (0xEC, 'V'), + (0xED, 'V'), + (0xEE, 'V'), + (0xEF, 'V'), + (0xF0, 'V'), + (0xF1, 'V'), + (0xF2, 'V'), + (0xF3, 'V'), + (0xF4, 'V'), + (0xF5, 'V'), + (0xF6, 'V'), + (0xF7, 'V'), + (0xF8, 'V'), + (0xF9, 'V'), + (0xFA, 'V'), + (0xFB, 'V'), + (0xFC, 'V'), + (0xFD, 'V'), + (0xFE, 'V'), + (0xFF, 'V'), + (0x100, 'M', 'ā'), + (0x101, 'V'), + (0x102, 'M', 'ă'), + (0x103, 'V'), + (0x104, 'M', 'ą'), + (0x105, 'V'), + (0x106, 'M', 'ć'), + (0x107, 'V'), + (0x108, 'M', 'ĉ'), + (0x109, 'V'), + (0x10A, 'M', 'ċ'), + (0x10B, 'V'), + (0x10C, 'M', 'č'), + (0x10D, 'V'), + (0x10E, 'M', 'ď'), + (0x10F, 'V'), + (0x110, 'M', 'đ'), + (0x111, 'V'), + (0x112, 'M', 'ē'), + (0x113, 'V'), + (0x114, 'M', 'ĕ'), + (0x115, 'V'), + (0x116, 'M', 'ė'), + (0x117, 'V'), + (0x118, 'M', 'ę'), + (0x119, 'V'), + (0x11A, 'M', 'ě'), + (0x11B, 'V'), + (0x11C, 'M', 'ĝ'), + (0x11D, 'V'), + (0x11E, 'M', 'ğ'), + (0x11F, 'V'), + (0x120, 'M', 'ġ'), + (0x121, 'V'), + (0x122, 'M', 'ģ'), + (0x123, 'V'), + (0x124, 'M', 'ĥ'), + (0x125, 'V'), + (0x126, 'M', 'ħ'), + (0x127, 'V'), + (0x128, 'M', 'ĩ'), + (0x129, 'V'), + (0x12A, 'M', 'ī'), + (0x12B, 'V'), + ] + +def _seg_3() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x12C, 'M', 'ĭ'), + (0x12D, 'V'), + (0x12E, 'M', 'į'), + (0x12F, 'V'), + (0x130, 'M', 'i̇'), + (0x131, 'V'), + (0x132, 'M', 'ij'), + (0x134, 'M', 'ĵ'), + (0x135, 'V'), + (0x136, 'M', 'ķ'), + (0x137, 'V'), + (0x139, 'M', 'ĺ'), + (0x13A, 'V'), + (0x13B, 'M', 'ļ'), + (0x13C, 'V'), + (0x13D, 'M', 'ľ'), + (0x13E, 'V'), + (0x13F, 'M', 'l·'), + (0x141, 'M', 'ł'), + (0x142, 'V'), + (0x143, 'M', 'ń'), + (0x144, 'V'), + (0x145, 'M', 'ņ'), + (0x146, 'V'), + (0x147, 'M', 'ň'), + (0x148, 'V'), + (0x149, 'M', 'ʼn'), + (0x14A, 'M', 'ŋ'), + (0x14B, 'V'), + (0x14C, 'M', 'ō'), + (0x14D, 'V'), + (0x14E, 'M', 'ŏ'), + (0x14F, 'V'), + (0x150, 'M', 'ő'), + (0x151, 'V'), + (0x152, 'M', 'œ'), + (0x153, 'V'), + (0x154, 'M', 'ŕ'), + (0x155, 'V'), + (0x156, 'M', 'ŗ'), + (0x157, 'V'), + (0x158, 'M', 'ř'), + (0x159, 'V'), + (0x15A, 'M', 'ś'), + (0x15B, 'V'), + (0x15C, 'M', 'ŝ'), + (0x15D, 'V'), + (0x15E, 'M', 'ş'), + (0x15F, 'V'), + (0x160, 'M', 'š'), + (0x161, 'V'), + (0x162, 'M', 'ţ'), + (0x163, 'V'), + (0x164, 'M', 'ť'), + (0x165, 'V'), + (0x166, 'M', 'ŧ'), + (0x167, 'V'), + (0x168, 'M', 'ũ'), + (0x169, 'V'), + (0x16A, 'M', 'ū'), + (0x16B, 'V'), + (0x16C, 'M', 'ŭ'), + (0x16D, 'V'), + (0x16E, 'M', 'ů'), + (0x16F, 'V'), + (0x170, 'M', 'ű'), + (0x171, 'V'), + (0x172, 'M', 'ų'), + (0x173, 'V'), + (0x174, 'M', 'ŵ'), + (0x175, 'V'), + (0x176, 'M', 'ŷ'), + (0x177, 'V'), + (0x178, 'M', 'ÿ'), + (0x179, 'M', 'ź'), + (0x17A, 'V'), + (0x17B, 'M', 'ż'), + (0x17C, 'V'), + (0x17D, 'M', 'ž'), + (0x17E, 'V'), + (0x17F, 'M', 's'), + (0x180, 'V'), + (0x181, 'M', 'ɓ'), + (0x182, 'M', 'ƃ'), + (0x183, 'V'), + (0x184, 'M', 'ƅ'), + (0x185, 'V'), + (0x186, 'M', 'ɔ'), + (0x187, 'M', 'ƈ'), + (0x188, 'V'), + (0x189, 'M', 'ɖ'), + (0x18A, 'M', 'ɗ'), + (0x18B, 'M', 'ƌ'), + (0x18C, 'V'), + (0x18E, 'M', 'ǝ'), + (0x18F, 'M', 'ə'), + (0x190, 'M', 'ɛ'), + (0x191, 'M', 'ƒ'), + (0x192, 'V'), + (0x193, 'M', 'ɠ'), + ] + +def _seg_4() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x194, 'M', 'ɣ'), + (0x195, 'V'), + (0x196, 'M', 'ɩ'), + (0x197, 'M', 'ɨ'), + (0x198, 'M', 'ƙ'), + (0x199, 'V'), + (0x19C, 'M', 'ɯ'), + (0x19D, 'M', 'ɲ'), + (0x19E, 'V'), + (0x19F, 'M', 'ɵ'), + (0x1A0, 'M', 'ơ'), + (0x1A1, 'V'), + (0x1A2, 'M', 'ƣ'), + (0x1A3, 'V'), + (0x1A4, 'M', 'ƥ'), + (0x1A5, 'V'), + (0x1A6, 'M', 'ʀ'), + (0x1A7, 'M', 'ƨ'), + (0x1A8, 'V'), + (0x1A9, 'M', 'ʃ'), + (0x1AA, 'V'), + (0x1AC, 'M', 'ƭ'), + (0x1AD, 'V'), + (0x1AE, 'M', 'ʈ'), + (0x1AF, 'M', 'ư'), + (0x1B0, 'V'), + (0x1B1, 'M', 'ʊ'), + (0x1B2, 'M', 'ʋ'), + (0x1B3, 'M', 'ƴ'), + (0x1B4, 'V'), + (0x1B5, 'M', 'ƶ'), + (0x1B6, 'V'), + (0x1B7, 'M', 'ʒ'), + (0x1B8, 'M', 'ƹ'), + (0x1B9, 'V'), + (0x1BC, 'M', 'ƽ'), + (0x1BD, 'V'), + (0x1C4, 'M', 'dž'), + (0x1C7, 'M', 'lj'), + (0x1CA, 'M', 'nj'), + (0x1CD, 'M', 'ǎ'), + (0x1CE, 'V'), + (0x1CF, 'M', 'ǐ'), + (0x1D0, 'V'), + (0x1D1, 'M', 'ǒ'), + (0x1D2, 'V'), + (0x1D3, 'M', 'ǔ'), + (0x1D4, 'V'), + (0x1D5, 'M', 'ǖ'), + (0x1D6, 'V'), + (0x1D7, 'M', 'ǘ'), + (0x1D8, 'V'), + (0x1D9, 'M', 'ǚ'), + (0x1DA, 'V'), + (0x1DB, 'M', 'ǜ'), + (0x1DC, 'V'), + (0x1DE, 'M', 'ǟ'), + (0x1DF, 'V'), + (0x1E0, 'M', 'ǡ'), + (0x1E1, 'V'), + (0x1E2, 'M', 'ǣ'), + (0x1E3, 'V'), + (0x1E4, 'M', 'ǥ'), + (0x1E5, 'V'), + (0x1E6, 'M', 'ǧ'), + (0x1E7, 'V'), + (0x1E8, 'M', 'ǩ'), + (0x1E9, 'V'), + (0x1EA, 'M', 'ǫ'), + (0x1EB, 'V'), + (0x1EC, 'M', 'ǭ'), + (0x1ED, 'V'), + (0x1EE, 'M', 'ǯ'), + (0x1EF, 'V'), + (0x1F1, 'M', 'dz'), + (0x1F4, 'M', 'ǵ'), + (0x1F5, 'V'), + (0x1F6, 'M', 'ƕ'), + (0x1F7, 'M', 'ƿ'), + (0x1F8, 'M', 'ǹ'), + (0x1F9, 'V'), + (0x1FA, 'M', 'ǻ'), + (0x1FB, 'V'), + (0x1FC, 'M', 'ǽ'), + (0x1FD, 'V'), + (0x1FE, 'M', 'ǿ'), + (0x1FF, 'V'), + (0x200, 'M', 'ȁ'), + (0x201, 'V'), + (0x202, 'M', 'ȃ'), + (0x203, 'V'), + (0x204, 'M', 'ȅ'), + (0x205, 'V'), + (0x206, 'M', 'ȇ'), + (0x207, 'V'), + (0x208, 'M', 'ȉ'), + (0x209, 'V'), + (0x20A, 'M', 'ȋ'), + (0x20B, 'V'), + (0x20C, 'M', 'ȍ'), + ] + +def _seg_5() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x20D, 'V'), + (0x20E, 'M', 'ȏ'), + (0x20F, 'V'), + (0x210, 'M', 'ȑ'), + (0x211, 'V'), + (0x212, 'M', 'ȓ'), + (0x213, 'V'), + (0x214, 'M', 'ȕ'), + (0x215, 'V'), + (0x216, 'M', 'ȗ'), + (0x217, 'V'), + (0x218, 'M', 'ș'), + (0x219, 'V'), + (0x21A, 'M', 'ț'), + (0x21B, 'V'), + (0x21C, 'M', 'ȝ'), + (0x21D, 'V'), + (0x21E, 'M', 'ȟ'), + (0x21F, 'V'), + (0x220, 'M', 'ƞ'), + (0x221, 'V'), + (0x222, 'M', 'ȣ'), + (0x223, 'V'), + (0x224, 'M', 'ȥ'), + (0x225, 'V'), + (0x226, 'M', 'ȧ'), + (0x227, 'V'), + (0x228, 'M', 'ȩ'), + (0x229, 'V'), + (0x22A, 'M', 'ȫ'), + (0x22B, 'V'), + (0x22C, 'M', 'ȭ'), + (0x22D, 'V'), + (0x22E, 'M', 'ȯ'), + (0x22F, 'V'), + (0x230, 'M', 'ȱ'), + (0x231, 'V'), + (0x232, 'M', 'ȳ'), + (0x233, 'V'), + (0x23A, 'M', 'ⱥ'), + (0x23B, 'M', 'ȼ'), + (0x23C, 'V'), + (0x23D, 'M', 'ƚ'), + (0x23E, 'M', 'ⱦ'), + (0x23F, 'V'), + (0x241, 'M', 'ɂ'), + (0x242, 'V'), + (0x243, 'M', 'ƀ'), + (0x244, 'M', 'ʉ'), + (0x245, 'M', 'ʌ'), + (0x246, 'M', 'ɇ'), + (0x247, 'V'), + (0x248, 'M', 'ɉ'), + (0x249, 'V'), + (0x24A, 'M', 'ɋ'), + (0x24B, 'V'), + (0x24C, 'M', 'ɍ'), + (0x24D, 'V'), + (0x24E, 'M', 'ɏ'), + (0x24F, 'V'), + (0x2B0, 'M', 'h'), + (0x2B1, 'M', 'ɦ'), + (0x2B2, 'M', 'j'), + (0x2B3, 'M', 'r'), + (0x2B4, 'M', 'ɹ'), + (0x2B5, 'M', 'ɻ'), + (0x2B6, 'M', 'ʁ'), + (0x2B7, 'M', 'w'), + (0x2B8, 'M', 'y'), + (0x2B9, 'V'), + (0x2D8, '3', ' ̆'), + (0x2D9, '3', ' ̇'), + (0x2DA, '3', ' ̊'), + (0x2DB, '3', ' ̨'), + (0x2DC, '3', ' ̃'), + (0x2DD, '3', ' ̋'), + (0x2DE, 'V'), + (0x2E0, 'M', 'ɣ'), + (0x2E1, 'M', 'l'), + (0x2E2, 'M', 's'), + (0x2E3, 'M', 'x'), + (0x2E4, 'M', 'ʕ'), + (0x2E5, 'V'), + (0x340, 'M', '̀'), + (0x341, 'M', '́'), + (0x342, 'V'), + (0x343, 'M', '̓'), + (0x344, 'M', '̈́'), + (0x345, 'M', 'ι'), + (0x346, 'V'), + (0x34F, 'I'), + (0x350, 'V'), + (0x370, 'M', 'ͱ'), + (0x371, 'V'), + (0x372, 'M', 'ͳ'), + (0x373, 'V'), + (0x374, 'M', 'ʹ'), + (0x375, 'V'), + (0x376, 'M', 'ͷ'), + (0x377, 'V'), + ] + +def _seg_6() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x378, 'X'), + (0x37A, '3', ' ι'), + (0x37B, 'V'), + (0x37E, '3', ';'), + (0x37F, 'M', 'ϳ'), + (0x380, 'X'), + (0x384, '3', ' ́'), + (0x385, '3', ' ̈́'), + (0x386, 'M', 'ά'), + (0x387, 'M', '·'), + (0x388, 'M', 'έ'), + (0x389, 'M', 'ή'), + (0x38A, 'M', 'ί'), + (0x38B, 'X'), + (0x38C, 'M', 'ό'), + (0x38D, 'X'), + (0x38E, 'M', 'ύ'), + (0x38F, 'M', 'ώ'), + (0x390, 'V'), + (0x391, 'M', 'α'), + (0x392, 'M', 'β'), + (0x393, 'M', 'γ'), + (0x394, 'M', 'δ'), + (0x395, 'M', 'ε'), + (0x396, 'M', 'ζ'), + (0x397, 'M', 'η'), + (0x398, 'M', 'θ'), + (0x399, 'M', 'ι'), + (0x39A, 'M', 'κ'), + (0x39B, 'M', 'λ'), + (0x39C, 'M', 'μ'), + (0x39D, 'M', 'ν'), + (0x39E, 'M', 'ξ'), + (0x39F, 'M', 'ο'), + (0x3A0, 'M', 'π'), + (0x3A1, 'M', 'ρ'), + (0x3A2, 'X'), + (0x3A3, 'M', 'σ'), + (0x3A4, 'M', 'τ'), + (0x3A5, 'M', 'υ'), + (0x3A6, 'M', 'φ'), + (0x3A7, 'M', 'χ'), + (0x3A8, 'M', 'ψ'), + (0x3A9, 'M', 'ω'), + (0x3AA, 'M', 'ϊ'), + (0x3AB, 'M', 'ϋ'), + (0x3AC, 'V'), + (0x3C2, 'D', 'σ'), + (0x3C3, 'V'), + (0x3CF, 'M', 'ϗ'), + (0x3D0, 'M', 'β'), + (0x3D1, 'M', 'θ'), + (0x3D2, 'M', 'υ'), + (0x3D3, 'M', 'ύ'), + (0x3D4, 'M', 'ϋ'), + (0x3D5, 'M', 'φ'), + (0x3D6, 'M', 'π'), + (0x3D7, 'V'), + (0x3D8, 'M', 'ϙ'), + (0x3D9, 'V'), + (0x3DA, 'M', 'ϛ'), + (0x3DB, 'V'), + (0x3DC, 'M', 'ϝ'), + (0x3DD, 'V'), + (0x3DE, 'M', 'ϟ'), + (0x3DF, 'V'), + (0x3E0, 'M', 'ϡ'), + (0x3E1, 'V'), + (0x3E2, 'M', 'ϣ'), + (0x3E3, 'V'), + (0x3E4, 'M', 'ϥ'), + (0x3E5, 'V'), + (0x3E6, 'M', 'ϧ'), + (0x3E7, 'V'), + (0x3E8, 'M', 'ϩ'), + (0x3E9, 'V'), + (0x3EA, 'M', 'ϫ'), + (0x3EB, 'V'), + (0x3EC, 'M', 'ϭ'), + (0x3ED, 'V'), + (0x3EE, 'M', 'ϯ'), + (0x3EF, 'V'), + (0x3F0, 'M', 'κ'), + (0x3F1, 'M', 'ρ'), + (0x3F2, 'M', 'σ'), + (0x3F3, 'V'), + (0x3F4, 'M', 'θ'), + (0x3F5, 'M', 'ε'), + (0x3F6, 'V'), + (0x3F7, 'M', 'ϸ'), + (0x3F8, 'V'), + (0x3F9, 'M', 'σ'), + (0x3FA, 'M', 'ϻ'), + (0x3FB, 'V'), + (0x3FD, 'M', 'ͻ'), + (0x3FE, 'M', 'ͼ'), + (0x3FF, 'M', 'ͽ'), + (0x400, 'M', 'ѐ'), + (0x401, 'M', 'ё'), + (0x402, 'M', 'ђ'), + ] + +def _seg_7() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x403, 'M', 'ѓ'), + (0x404, 'M', 'є'), + (0x405, 'M', 'ѕ'), + (0x406, 'M', 'і'), + (0x407, 'M', 'ї'), + (0x408, 'M', 'ј'), + (0x409, 'M', 'љ'), + (0x40A, 'M', 'њ'), + (0x40B, 'M', 'ћ'), + (0x40C, 'M', 'ќ'), + (0x40D, 'M', 'ѝ'), + (0x40E, 'M', 'ў'), + (0x40F, 'M', 'џ'), + (0x410, 'M', 'а'), + (0x411, 'M', 'б'), + (0x412, 'M', 'в'), + (0x413, 'M', 'г'), + (0x414, 'M', 'д'), + (0x415, 'M', 'е'), + (0x416, 'M', 'ж'), + (0x417, 'M', 'з'), + (0x418, 'M', 'и'), + (0x419, 'M', 'й'), + (0x41A, 'M', 'к'), + (0x41B, 'M', 'л'), + (0x41C, 'M', 'м'), + (0x41D, 'M', 'н'), + (0x41E, 'M', 'о'), + (0x41F, 'M', 'п'), + (0x420, 'M', 'р'), + (0x421, 'M', 'с'), + (0x422, 'M', 'т'), + (0x423, 'M', 'у'), + (0x424, 'M', 'ф'), + (0x425, 'M', 'х'), + (0x426, 'M', 'ц'), + (0x427, 'M', 'ч'), + (0x428, 'M', 'ш'), + (0x429, 'M', 'щ'), + (0x42A, 'M', 'ъ'), + (0x42B, 'M', 'ы'), + (0x42C, 'M', 'ь'), + (0x42D, 'M', 'э'), + (0x42E, 'M', 'ю'), + (0x42F, 'M', 'я'), + (0x430, 'V'), + (0x460, 'M', 'ѡ'), + (0x461, 'V'), + (0x462, 'M', 'ѣ'), + (0x463, 'V'), + (0x464, 'M', 'ѥ'), + (0x465, 'V'), + (0x466, 'M', 'ѧ'), + (0x467, 'V'), + (0x468, 'M', 'ѩ'), + (0x469, 'V'), + (0x46A, 'M', 'ѫ'), + (0x46B, 'V'), + (0x46C, 'M', 'ѭ'), + (0x46D, 'V'), + (0x46E, 'M', 'ѯ'), + (0x46F, 'V'), + (0x470, 'M', 'ѱ'), + (0x471, 'V'), + (0x472, 'M', 'ѳ'), + (0x473, 'V'), + (0x474, 'M', 'ѵ'), + (0x475, 'V'), + (0x476, 'M', 'ѷ'), + (0x477, 'V'), + (0x478, 'M', 'ѹ'), + (0x479, 'V'), + (0x47A, 'M', 'ѻ'), + (0x47B, 'V'), + (0x47C, 'M', 'ѽ'), + (0x47D, 'V'), + (0x47E, 'M', 'ѿ'), + (0x47F, 'V'), + (0x480, 'M', 'ҁ'), + (0x481, 'V'), + (0x48A, 'M', 'ҋ'), + (0x48B, 'V'), + (0x48C, 'M', 'ҍ'), + (0x48D, 'V'), + (0x48E, 'M', 'ҏ'), + (0x48F, 'V'), + (0x490, 'M', 'ґ'), + (0x491, 'V'), + (0x492, 'M', 'ғ'), + (0x493, 'V'), + (0x494, 'M', 'ҕ'), + (0x495, 'V'), + (0x496, 'M', 'җ'), + (0x497, 'V'), + (0x498, 'M', 'ҙ'), + (0x499, 'V'), + (0x49A, 'M', 'қ'), + (0x49B, 'V'), + (0x49C, 'M', 'ҝ'), + (0x49D, 'V'), + ] + +def _seg_8() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x49E, 'M', 'ҟ'), + (0x49F, 'V'), + (0x4A0, 'M', 'ҡ'), + (0x4A1, 'V'), + (0x4A2, 'M', 'ң'), + (0x4A3, 'V'), + (0x4A4, 'M', 'ҥ'), + (0x4A5, 'V'), + (0x4A6, 'M', 'ҧ'), + (0x4A7, 'V'), + (0x4A8, 'M', 'ҩ'), + (0x4A9, 'V'), + (0x4AA, 'M', 'ҫ'), + (0x4AB, 'V'), + (0x4AC, 'M', 'ҭ'), + (0x4AD, 'V'), + (0x4AE, 'M', 'ү'), + (0x4AF, 'V'), + (0x4B0, 'M', 'ұ'), + (0x4B1, 'V'), + (0x4B2, 'M', 'ҳ'), + (0x4B3, 'V'), + (0x4B4, 'M', 'ҵ'), + (0x4B5, 'V'), + (0x4B6, 'M', 'ҷ'), + (0x4B7, 'V'), + (0x4B8, 'M', 'ҹ'), + (0x4B9, 'V'), + (0x4BA, 'M', 'һ'), + (0x4BB, 'V'), + (0x4BC, 'M', 'ҽ'), + (0x4BD, 'V'), + (0x4BE, 'M', 'ҿ'), + (0x4BF, 'V'), + (0x4C0, 'X'), + (0x4C1, 'M', 'ӂ'), + (0x4C2, 'V'), + (0x4C3, 'M', 'ӄ'), + (0x4C4, 'V'), + (0x4C5, 'M', 'ӆ'), + (0x4C6, 'V'), + (0x4C7, 'M', 'ӈ'), + (0x4C8, 'V'), + (0x4C9, 'M', 'ӊ'), + (0x4CA, 'V'), + (0x4CB, 'M', 'ӌ'), + (0x4CC, 'V'), + (0x4CD, 'M', 'ӎ'), + (0x4CE, 'V'), + (0x4D0, 'M', 'ӑ'), + (0x4D1, 'V'), + (0x4D2, 'M', 'ӓ'), + (0x4D3, 'V'), + (0x4D4, 'M', 'ӕ'), + (0x4D5, 'V'), + (0x4D6, 'M', 'ӗ'), + (0x4D7, 'V'), + (0x4D8, 'M', 'ә'), + (0x4D9, 'V'), + (0x4DA, 'M', 'ӛ'), + (0x4DB, 'V'), + (0x4DC, 'M', 'ӝ'), + (0x4DD, 'V'), + (0x4DE, 'M', 'ӟ'), + (0x4DF, 'V'), + (0x4E0, 'M', 'ӡ'), + (0x4E1, 'V'), + (0x4E2, 'M', 'ӣ'), + (0x4E3, 'V'), + (0x4E4, 'M', 'ӥ'), + (0x4E5, 'V'), + (0x4E6, 'M', 'ӧ'), + (0x4E7, 'V'), + (0x4E8, 'M', 'ө'), + (0x4E9, 'V'), + (0x4EA, 'M', 'ӫ'), + (0x4EB, 'V'), + (0x4EC, 'M', 'ӭ'), + (0x4ED, 'V'), + (0x4EE, 'M', 'ӯ'), + (0x4EF, 'V'), + (0x4F0, 'M', 'ӱ'), + (0x4F1, 'V'), + (0x4F2, 'M', 'ӳ'), + (0x4F3, 'V'), + (0x4F4, 'M', 'ӵ'), + (0x4F5, 'V'), + (0x4F6, 'M', 'ӷ'), + (0x4F7, 'V'), + (0x4F8, 'M', 'ӹ'), + (0x4F9, 'V'), + (0x4FA, 'M', 'ӻ'), + (0x4FB, 'V'), + (0x4FC, 'M', 'ӽ'), + (0x4FD, 'V'), + (0x4FE, 'M', 'ӿ'), + (0x4FF, 'V'), + (0x500, 'M', 'ԁ'), + (0x501, 'V'), + (0x502, 'M', 'ԃ'), + ] + +def _seg_9() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x503, 'V'), + (0x504, 'M', 'ԅ'), + (0x505, 'V'), + (0x506, 'M', 'ԇ'), + (0x507, 'V'), + (0x508, 'M', 'ԉ'), + (0x509, 'V'), + (0x50A, 'M', 'ԋ'), + (0x50B, 'V'), + (0x50C, 'M', 'ԍ'), + (0x50D, 'V'), + (0x50E, 'M', 'ԏ'), + (0x50F, 'V'), + (0x510, 'M', 'ԑ'), + (0x511, 'V'), + (0x512, 'M', 'ԓ'), + (0x513, 'V'), + (0x514, 'M', 'ԕ'), + (0x515, 'V'), + (0x516, 'M', 'ԗ'), + (0x517, 'V'), + (0x518, 'M', 'ԙ'), + (0x519, 'V'), + (0x51A, 'M', 'ԛ'), + (0x51B, 'V'), + (0x51C, 'M', 'ԝ'), + (0x51D, 'V'), + (0x51E, 'M', 'ԟ'), + (0x51F, 'V'), + (0x520, 'M', 'ԡ'), + (0x521, 'V'), + (0x522, 'M', 'ԣ'), + (0x523, 'V'), + (0x524, 'M', 'ԥ'), + (0x525, 'V'), + (0x526, 'M', 'ԧ'), + (0x527, 'V'), + (0x528, 'M', 'ԩ'), + (0x529, 'V'), + (0x52A, 'M', 'ԫ'), + (0x52B, 'V'), + (0x52C, 'M', 'ԭ'), + (0x52D, 'V'), + (0x52E, 'M', 'ԯ'), + (0x52F, 'V'), + (0x530, 'X'), + (0x531, 'M', 'ա'), + (0x532, 'M', 'բ'), + (0x533, 'M', 'գ'), + (0x534, 'M', 'դ'), + (0x535, 'M', 'ե'), + (0x536, 'M', 'զ'), + (0x537, 'M', 'է'), + (0x538, 'M', 'ը'), + (0x539, 'M', 'թ'), + (0x53A, 'M', 'ժ'), + (0x53B, 'M', 'ի'), + (0x53C, 'M', 'լ'), + (0x53D, 'M', 'խ'), + (0x53E, 'M', 'ծ'), + (0x53F, 'M', 'կ'), + (0x540, 'M', 'հ'), + (0x541, 'M', 'ձ'), + (0x542, 'M', 'ղ'), + (0x543, 'M', 'ճ'), + (0x544, 'M', 'մ'), + (0x545, 'M', 'յ'), + (0x546, 'M', 'ն'), + (0x547, 'M', 'շ'), + (0x548, 'M', 'ո'), + (0x549, 'M', 'չ'), + (0x54A, 'M', 'պ'), + (0x54B, 'M', 'ջ'), + (0x54C, 'M', 'ռ'), + (0x54D, 'M', 'ս'), + (0x54E, 'M', 'վ'), + (0x54F, 'M', 'տ'), + (0x550, 'M', 'ր'), + (0x551, 'M', 'ց'), + (0x552, 'M', 'ւ'), + (0x553, 'M', 'փ'), + (0x554, 'M', 'ք'), + (0x555, 'M', 'օ'), + (0x556, 'M', 'ֆ'), + (0x557, 'X'), + (0x559, 'V'), + (0x587, 'M', 'եւ'), + (0x588, 'V'), + (0x58B, 'X'), + (0x58D, 'V'), + (0x590, 'X'), + (0x591, 'V'), + (0x5C8, 'X'), + (0x5D0, 'V'), + (0x5EB, 'X'), + (0x5EF, 'V'), + (0x5F5, 'X'), + (0x606, 'V'), + (0x61C, 'X'), + (0x61D, 'V'), + ] + +def _seg_10() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x675, 'M', 'اٴ'), + (0x676, 'M', 'وٴ'), + (0x677, 'M', 'ۇٴ'), + (0x678, 'M', 'يٴ'), + (0x679, 'V'), + (0x6DD, 'X'), + (0x6DE, 'V'), + (0x70E, 'X'), + (0x710, 'V'), + (0x74B, 'X'), + (0x74D, 'V'), + (0x7B2, 'X'), + (0x7C0, 'V'), + (0x7FB, 'X'), + (0x7FD, 'V'), + (0x82E, 'X'), + (0x830, 'V'), + (0x83F, 'X'), + (0x840, 'V'), + (0x85C, 'X'), + (0x85E, 'V'), + (0x85F, 'X'), + (0x860, 'V'), + (0x86B, 'X'), + (0x870, 'V'), + (0x88F, 'X'), + (0x898, 'V'), + (0x8E2, 'X'), + (0x8E3, 'V'), + (0x958, 'M', 'क़'), + (0x959, 'M', 'ख़'), + (0x95A, 'M', 'ग़'), + (0x95B, 'M', 'ज़'), + (0x95C, 'M', 'ड़'), + (0x95D, 'M', 'ढ़'), + (0x95E, 'M', 'फ़'), + (0x95F, 'M', 'य़'), + (0x960, 'V'), + (0x984, 'X'), + (0x985, 'V'), + (0x98D, 'X'), + (0x98F, 'V'), + (0x991, 'X'), + (0x993, 'V'), + (0x9A9, 'X'), + (0x9AA, 'V'), + (0x9B1, 'X'), + (0x9B2, 'V'), + (0x9B3, 'X'), + (0x9B6, 'V'), + (0x9BA, 'X'), + (0x9BC, 'V'), + (0x9C5, 'X'), + (0x9C7, 'V'), + (0x9C9, 'X'), + (0x9CB, 'V'), + (0x9CF, 'X'), + (0x9D7, 'V'), + (0x9D8, 'X'), + (0x9DC, 'M', 'ড়'), + (0x9DD, 'M', 'ঢ়'), + (0x9DE, 'X'), + (0x9DF, 'M', 'য়'), + (0x9E0, 'V'), + (0x9E4, 'X'), + (0x9E6, 'V'), + (0x9FF, 'X'), + (0xA01, 'V'), + (0xA04, 'X'), + (0xA05, 'V'), + (0xA0B, 'X'), + (0xA0F, 'V'), + (0xA11, 'X'), + (0xA13, 'V'), + (0xA29, 'X'), + (0xA2A, 'V'), + (0xA31, 'X'), + (0xA32, 'V'), + (0xA33, 'M', 'ਲ਼'), + (0xA34, 'X'), + (0xA35, 'V'), + (0xA36, 'M', 'ਸ਼'), + (0xA37, 'X'), + (0xA38, 'V'), + (0xA3A, 'X'), + (0xA3C, 'V'), + (0xA3D, 'X'), + (0xA3E, 'V'), + (0xA43, 'X'), + (0xA47, 'V'), + (0xA49, 'X'), + (0xA4B, 'V'), + (0xA4E, 'X'), + (0xA51, 'V'), + (0xA52, 'X'), + (0xA59, 'M', 'ਖ਼'), + (0xA5A, 'M', 'ਗ਼'), + (0xA5B, 'M', 'ਜ਼'), + (0xA5C, 'V'), + (0xA5D, 'X'), + ] + +def _seg_11() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA5E, 'M', 'ਫ਼'), + (0xA5F, 'X'), + (0xA66, 'V'), + (0xA77, 'X'), + (0xA81, 'V'), + (0xA84, 'X'), + (0xA85, 'V'), + (0xA8E, 'X'), + (0xA8F, 'V'), + (0xA92, 'X'), + (0xA93, 'V'), + (0xAA9, 'X'), + (0xAAA, 'V'), + (0xAB1, 'X'), + (0xAB2, 'V'), + (0xAB4, 'X'), + (0xAB5, 'V'), + (0xABA, 'X'), + (0xABC, 'V'), + (0xAC6, 'X'), + (0xAC7, 'V'), + (0xACA, 'X'), + (0xACB, 'V'), + (0xACE, 'X'), + (0xAD0, 'V'), + (0xAD1, 'X'), + (0xAE0, 'V'), + (0xAE4, 'X'), + (0xAE6, 'V'), + (0xAF2, 'X'), + (0xAF9, 'V'), + (0xB00, 'X'), + (0xB01, 'V'), + (0xB04, 'X'), + (0xB05, 'V'), + (0xB0D, 'X'), + (0xB0F, 'V'), + (0xB11, 'X'), + (0xB13, 'V'), + (0xB29, 'X'), + (0xB2A, 'V'), + (0xB31, 'X'), + (0xB32, 'V'), + (0xB34, 'X'), + (0xB35, 'V'), + (0xB3A, 'X'), + (0xB3C, 'V'), + (0xB45, 'X'), + (0xB47, 'V'), + (0xB49, 'X'), + (0xB4B, 'V'), + (0xB4E, 'X'), + (0xB55, 'V'), + (0xB58, 'X'), + (0xB5C, 'M', 'ଡ଼'), + (0xB5D, 'M', 'ଢ଼'), + (0xB5E, 'X'), + (0xB5F, 'V'), + (0xB64, 'X'), + (0xB66, 'V'), + (0xB78, 'X'), + (0xB82, 'V'), + (0xB84, 'X'), + (0xB85, 'V'), + (0xB8B, 'X'), + (0xB8E, 'V'), + (0xB91, 'X'), + (0xB92, 'V'), + (0xB96, 'X'), + (0xB99, 'V'), + (0xB9B, 'X'), + (0xB9C, 'V'), + (0xB9D, 'X'), + (0xB9E, 'V'), + (0xBA0, 'X'), + (0xBA3, 'V'), + (0xBA5, 'X'), + (0xBA8, 'V'), + (0xBAB, 'X'), + (0xBAE, 'V'), + (0xBBA, 'X'), + (0xBBE, 'V'), + (0xBC3, 'X'), + (0xBC6, 'V'), + (0xBC9, 'X'), + (0xBCA, 'V'), + (0xBCE, 'X'), + (0xBD0, 'V'), + (0xBD1, 'X'), + (0xBD7, 'V'), + (0xBD8, 'X'), + (0xBE6, 'V'), + (0xBFB, 'X'), + (0xC00, 'V'), + (0xC0D, 'X'), + (0xC0E, 'V'), + (0xC11, 'X'), + (0xC12, 'V'), + (0xC29, 'X'), + (0xC2A, 'V'), + ] + +def _seg_12() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xC3A, 'X'), + (0xC3C, 'V'), + (0xC45, 'X'), + (0xC46, 'V'), + (0xC49, 'X'), + (0xC4A, 'V'), + (0xC4E, 'X'), + (0xC55, 'V'), + (0xC57, 'X'), + (0xC58, 'V'), + (0xC5B, 'X'), + (0xC5D, 'V'), + (0xC5E, 'X'), + (0xC60, 'V'), + (0xC64, 'X'), + (0xC66, 'V'), + (0xC70, 'X'), + (0xC77, 'V'), + (0xC8D, 'X'), + (0xC8E, 'V'), + (0xC91, 'X'), + (0xC92, 'V'), + (0xCA9, 'X'), + (0xCAA, 'V'), + (0xCB4, 'X'), + (0xCB5, 'V'), + (0xCBA, 'X'), + (0xCBC, 'V'), + (0xCC5, 'X'), + (0xCC6, 'V'), + (0xCC9, 'X'), + (0xCCA, 'V'), + (0xCCE, 'X'), + (0xCD5, 'V'), + (0xCD7, 'X'), + (0xCDD, 'V'), + (0xCDF, 'X'), + (0xCE0, 'V'), + (0xCE4, 'X'), + (0xCE6, 'V'), + (0xCF0, 'X'), + (0xCF1, 'V'), + (0xCF4, 'X'), + (0xD00, 'V'), + (0xD0D, 'X'), + (0xD0E, 'V'), + (0xD11, 'X'), + (0xD12, 'V'), + (0xD45, 'X'), + (0xD46, 'V'), + (0xD49, 'X'), + (0xD4A, 'V'), + (0xD50, 'X'), + (0xD54, 'V'), + (0xD64, 'X'), + (0xD66, 'V'), + (0xD80, 'X'), + (0xD81, 'V'), + (0xD84, 'X'), + (0xD85, 'V'), + (0xD97, 'X'), + (0xD9A, 'V'), + (0xDB2, 'X'), + (0xDB3, 'V'), + (0xDBC, 'X'), + (0xDBD, 'V'), + (0xDBE, 'X'), + (0xDC0, 'V'), + (0xDC7, 'X'), + (0xDCA, 'V'), + (0xDCB, 'X'), + (0xDCF, 'V'), + (0xDD5, 'X'), + (0xDD6, 'V'), + (0xDD7, 'X'), + (0xDD8, 'V'), + (0xDE0, 'X'), + (0xDE6, 'V'), + (0xDF0, 'X'), + (0xDF2, 'V'), + (0xDF5, 'X'), + (0xE01, 'V'), + (0xE33, 'M', 'ํา'), + (0xE34, 'V'), + (0xE3B, 'X'), + (0xE3F, 'V'), + (0xE5C, 'X'), + (0xE81, 'V'), + (0xE83, 'X'), + (0xE84, 'V'), + (0xE85, 'X'), + (0xE86, 'V'), + (0xE8B, 'X'), + (0xE8C, 'V'), + (0xEA4, 'X'), + (0xEA5, 'V'), + (0xEA6, 'X'), + (0xEA7, 'V'), + (0xEB3, 'M', 'ໍາ'), + (0xEB4, 'V'), + ] + +def _seg_13() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xEBE, 'X'), + (0xEC0, 'V'), + (0xEC5, 'X'), + (0xEC6, 'V'), + (0xEC7, 'X'), + (0xEC8, 'V'), + (0xECF, 'X'), + (0xED0, 'V'), + (0xEDA, 'X'), + (0xEDC, 'M', 'ຫນ'), + (0xEDD, 'M', 'ຫມ'), + (0xEDE, 'V'), + (0xEE0, 'X'), + (0xF00, 'V'), + (0xF0C, 'M', '་'), + (0xF0D, 'V'), + (0xF43, 'M', 'གྷ'), + (0xF44, 'V'), + (0xF48, 'X'), + (0xF49, 'V'), + (0xF4D, 'M', 'ཌྷ'), + (0xF4E, 'V'), + (0xF52, 'M', 'དྷ'), + (0xF53, 'V'), + (0xF57, 'M', 'བྷ'), + (0xF58, 'V'), + (0xF5C, 'M', 'ཛྷ'), + (0xF5D, 'V'), + (0xF69, 'M', 'ཀྵ'), + (0xF6A, 'V'), + (0xF6D, 'X'), + (0xF71, 'V'), + (0xF73, 'M', 'ཱི'), + (0xF74, 'V'), + (0xF75, 'M', 'ཱུ'), + (0xF76, 'M', 'ྲྀ'), + (0xF77, 'M', 'ྲཱྀ'), + (0xF78, 'M', 'ླྀ'), + (0xF79, 'M', 'ླཱྀ'), + (0xF7A, 'V'), + (0xF81, 'M', 'ཱྀ'), + (0xF82, 'V'), + (0xF93, 'M', 'ྒྷ'), + (0xF94, 'V'), + (0xF98, 'X'), + (0xF99, 'V'), + (0xF9D, 'M', 'ྜྷ'), + (0xF9E, 'V'), + (0xFA2, 'M', 'ྡྷ'), + (0xFA3, 'V'), + (0xFA7, 'M', 'ྦྷ'), + (0xFA8, 'V'), + (0xFAC, 'M', 'ྫྷ'), + (0xFAD, 'V'), + (0xFB9, 'M', 'ྐྵ'), + (0xFBA, 'V'), + (0xFBD, 'X'), + (0xFBE, 'V'), + (0xFCD, 'X'), + (0xFCE, 'V'), + (0xFDB, 'X'), + (0x1000, 'V'), + (0x10A0, 'X'), + (0x10C7, 'M', 'ⴧ'), + (0x10C8, 'X'), + (0x10CD, 'M', 'ⴭ'), + (0x10CE, 'X'), + (0x10D0, 'V'), + (0x10FC, 'M', 'ნ'), + (0x10FD, 'V'), + (0x115F, 'X'), + (0x1161, 'V'), + (0x1249, 'X'), + (0x124A, 'V'), + (0x124E, 'X'), + (0x1250, 'V'), + (0x1257, 'X'), + (0x1258, 'V'), + (0x1259, 'X'), + (0x125A, 'V'), + (0x125E, 'X'), + (0x1260, 'V'), + (0x1289, 'X'), + (0x128A, 'V'), + (0x128E, 'X'), + (0x1290, 'V'), + (0x12B1, 'X'), + (0x12B2, 'V'), + (0x12B6, 'X'), + (0x12B8, 'V'), + (0x12BF, 'X'), + (0x12C0, 'V'), + (0x12C1, 'X'), + (0x12C2, 'V'), + (0x12C6, 'X'), + (0x12C8, 'V'), + (0x12D7, 'X'), + (0x12D8, 'V'), + (0x1311, 'X'), + (0x1312, 'V'), + ] + +def _seg_14() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1316, 'X'), + (0x1318, 'V'), + (0x135B, 'X'), + (0x135D, 'V'), + (0x137D, 'X'), + (0x1380, 'V'), + (0x139A, 'X'), + (0x13A0, 'V'), + (0x13F6, 'X'), + (0x13F8, 'M', 'Ᏸ'), + (0x13F9, 'M', 'Ᏹ'), + (0x13FA, 'M', 'Ᏺ'), + (0x13FB, 'M', 'Ᏻ'), + (0x13FC, 'M', 'Ᏼ'), + (0x13FD, 'M', 'Ᏽ'), + (0x13FE, 'X'), + (0x1400, 'V'), + (0x1680, 'X'), + (0x1681, 'V'), + (0x169D, 'X'), + (0x16A0, 'V'), + (0x16F9, 'X'), + (0x1700, 'V'), + (0x1716, 'X'), + (0x171F, 'V'), + (0x1737, 'X'), + (0x1740, 'V'), + (0x1754, 'X'), + (0x1760, 'V'), + (0x176D, 'X'), + (0x176E, 'V'), + (0x1771, 'X'), + (0x1772, 'V'), + (0x1774, 'X'), + (0x1780, 'V'), + (0x17B4, 'X'), + (0x17B6, 'V'), + (0x17DE, 'X'), + (0x17E0, 'V'), + (0x17EA, 'X'), + (0x17F0, 'V'), + (0x17FA, 'X'), + (0x1800, 'V'), + (0x1806, 'X'), + (0x1807, 'V'), + (0x180B, 'I'), + (0x180E, 'X'), + (0x180F, 'I'), + (0x1810, 'V'), + (0x181A, 'X'), + (0x1820, 'V'), + (0x1879, 'X'), + (0x1880, 'V'), + (0x18AB, 'X'), + (0x18B0, 'V'), + (0x18F6, 'X'), + (0x1900, 'V'), + (0x191F, 'X'), + (0x1920, 'V'), + (0x192C, 'X'), + (0x1930, 'V'), + (0x193C, 'X'), + (0x1940, 'V'), + (0x1941, 'X'), + (0x1944, 'V'), + (0x196E, 'X'), + (0x1970, 'V'), + (0x1975, 'X'), + (0x1980, 'V'), + (0x19AC, 'X'), + (0x19B0, 'V'), + (0x19CA, 'X'), + (0x19D0, 'V'), + (0x19DB, 'X'), + (0x19DE, 'V'), + (0x1A1C, 'X'), + (0x1A1E, 'V'), + (0x1A5F, 'X'), + (0x1A60, 'V'), + (0x1A7D, 'X'), + (0x1A7F, 'V'), + (0x1A8A, 'X'), + (0x1A90, 'V'), + (0x1A9A, 'X'), + (0x1AA0, 'V'), + (0x1AAE, 'X'), + (0x1AB0, 'V'), + (0x1ACF, 'X'), + (0x1B00, 'V'), + (0x1B4D, 'X'), + (0x1B50, 'V'), + (0x1B7F, 'X'), + (0x1B80, 'V'), + (0x1BF4, 'X'), + (0x1BFC, 'V'), + (0x1C38, 'X'), + (0x1C3B, 'V'), + (0x1C4A, 'X'), + (0x1C4D, 'V'), + (0x1C80, 'M', 'в'), + ] + +def _seg_15() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1C81, 'M', 'д'), + (0x1C82, 'M', 'о'), + (0x1C83, 'M', 'с'), + (0x1C84, 'M', 'т'), + (0x1C86, 'M', 'ъ'), + (0x1C87, 'M', 'ѣ'), + (0x1C88, 'M', 'ꙋ'), + (0x1C89, 'X'), + (0x1C90, 'M', 'ა'), + (0x1C91, 'M', 'ბ'), + (0x1C92, 'M', 'გ'), + (0x1C93, 'M', 'დ'), + (0x1C94, 'M', 'ე'), + (0x1C95, 'M', 'ვ'), + (0x1C96, 'M', 'ზ'), + (0x1C97, 'M', 'თ'), + (0x1C98, 'M', 'ი'), + (0x1C99, 'M', 'კ'), + (0x1C9A, 'M', 'ლ'), + (0x1C9B, 'M', 'მ'), + (0x1C9C, 'M', 'ნ'), + (0x1C9D, 'M', 'ო'), + (0x1C9E, 'M', 'პ'), + (0x1C9F, 'M', 'ჟ'), + (0x1CA0, 'M', 'რ'), + (0x1CA1, 'M', 'ს'), + (0x1CA2, 'M', 'ტ'), + (0x1CA3, 'M', 'უ'), + (0x1CA4, 'M', 'ფ'), + (0x1CA5, 'M', 'ქ'), + (0x1CA6, 'M', 'ღ'), + (0x1CA7, 'M', 'ყ'), + (0x1CA8, 'M', 'შ'), + (0x1CA9, 'M', 'ჩ'), + (0x1CAA, 'M', 'ც'), + (0x1CAB, 'M', 'ძ'), + (0x1CAC, 'M', 'წ'), + (0x1CAD, 'M', 'ჭ'), + (0x1CAE, 'M', 'ხ'), + (0x1CAF, 'M', 'ჯ'), + (0x1CB0, 'M', 'ჰ'), + (0x1CB1, 'M', 'ჱ'), + (0x1CB2, 'M', 'ჲ'), + (0x1CB3, 'M', 'ჳ'), + (0x1CB4, 'M', 'ჴ'), + (0x1CB5, 'M', 'ჵ'), + (0x1CB6, 'M', 'ჶ'), + (0x1CB7, 'M', 'ჷ'), + (0x1CB8, 'M', 'ჸ'), + (0x1CB9, 'M', 'ჹ'), + (0x1CBA, 'M', 'ჺ'), + (0x1CBB, 'X'), + (0x1CBD, 'M', 'ჽ'), + (0x1CBE, 'M', 'ჾ'), + (0x1CBF, 'M', 'ჿ'), + (0x1CC0, 'V'), + (0x1CC8, 'X'), + (0x1CD0, 'V'), + (0x1CFB, 'X'), + (0x1D00, 'V'), + (0x1D2C, 'M', 'a'), + (0x1D2D, 'M', 'æ'), + (0x1D2E, 'M', 'b'), + (0x1D2F, 'V'), + (0x1D30, 'M', 'd'), + (0x1D31, 'M', 'e'), + (0x1D32, 'M', 'ǝ'), + (0x1D33, 'M', 'g'), + (0x1D34, 'M', 'h'), + (0x1D35, 'M', 'i'), + (0x1D36, 'M', 'j'), + (0x1D37, 'M', 'k'), + (0x1D38, 'M', 'l'), + (0x1D39, 'M', 'm'), + (0x1D3A, 'M', 'n'), + (0x1D3B, 'V'), + (0x1D3C, 'M', 'o'), + (0x1D3D, 'M', 'ȣ'), + (0x1D3E, 'M', 'p'), + (0x1D3F, 'M', 'r'), + (0x1D40, 'M', 't'), + (0x1D41, 'M', 'u'), + (0x1D42, 'M', 'w'), + (0x1D43, 'M', 'a'), + (0x1D44, 'M', 'ɐ'), + (0x1D45, 'M', 'ɑ'), + (0x1D46, 'M', 'ᴂ'), + (0x1D47, 'M', 'b'), + (0x1D48, 'M', 'd'), + (0x1D49, 'M', 'e'), + (0x1D4A, 'M', 'ə'), + (0x1D4B, 'M', 'ɛ'), + (0x1D4C, 'M', 'ɜ'), + (0x1D4D, 'M', 'g'), + (0x1D4E, 'V'), + (0x1D4F, 'M', 'k'), + (0x1D50, 'M', 'm'), + (0x1D51, 'M', 'ŋ'), + (0x1D52, 'M', 'o'), + (0x1D53, 'M', 'ɔ'), + ] + +def _seg_16() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D54, 'M', 'ᴖ'), + (0x1D55, 'M', 'ᴗ'), + (0x1D56, 'M', 'p'), + (0x1D57, 'M', 't'), + (0x1D58, 'M', 'u'), + (0x1D59, 'M', 'ᴝ'), + (0x1D5A, 'M', 'ɯ'), + (0x1D5B, 'M', 'v'), + (0x1D5C, 'M', 'ᴥ'), + (0x1D5D, 'M', 'β'), + (0x1D5E, 'M', 'γ'), + (0x1D5F, 'M', 'δ'), + (0x1D60, 'M', 'φ'), + (0x1D61, 'M', 'χ'), + (0x1D62, 'M', 'i'), + (0x1D63, 'M', 'r'), + (0x1D64, 'M', 'u'), + (0x1D65, 'M', 'v'), + (0x1D66, 'M', 'β'), + (0x1D67, 'M', 'γ'), + (0x1D68, 'M', 'ρ'), + (0x1D69, 'M', 'φ'), + (0x1D6A, 'M', 'χ'), + (0x1D6B, 'V'), + (0x1D78, 'M', 'н'), + (0x1D79, 'V'), + (0x1D9B, 'M', 'ɒ'), + (0x1D9C, 'M', 'c'), + (0x1D9D, 'M', 'ɕ'), + (0x1D9E, 'M', 'ð'), + (0x1D9F, 'M', 'ɜ'), + (0x1DA0, 'M', 'f'), + (0x1DA1, 'M', 'ɟ'), + (0x1DA2, 'M', 'ɡ'), + (0x1DA3, 'M', 'ɥ'), + (0x1DA4, 'M', 'ɨ'), + (0x1DA5, 'M', 'ɩ'), + (0x1DA6, 'M', 'ɪ'), + (0x1DA7, 'M', 'ᵻ'), + (0x1DA8, 'M', 'ʝ'), + (0x1DA9, 'M', 'ɭ'), + (0x1DAA, 'M', 'ᶅ'), + (0x1DAB, 'M', 'ʟ'), + (0x1DAC, 'M', 'ɱ'), + (0x1DAD, 'M', 'ɰ'), + (0x1DAE, 'M', 'ɲ'), + (0x1DAF, 'M', 'ɳ'), + (0x1DB0, 'M', 'ɴ'), + (0x1DB1, 'M', 'ɵ'), + (0x1DB2, 'M', 'ɸ'), + (0x1DB3, 'M', 'ʂ'), + (0x1DB4, 'M', 'ʃ'), + (0x1DB5, 'M', 'ƫ'), + (0x1DB6, 'M', 'ʉ'), + (0x1DB7, 'M', 'ʊ'), + (0x1DB8, 'M', 'ᴜ'), + (0x1DB9, 'M', 'ʋ'), + (0x1DBA, 'M', 'ʌ'), + (0x1DBB, 'M', 'z'), + (0x1DBC, 'M', 'ʐ'), + (0x1DBD, 'M', 'ʑ'), + (0x1DBE, 'M', 'ʒ'), + (0x1DBF, 'M', 'θ'), + (0x1DC0, 'V'), + (0x1E00, 'M', 'ḁ'), + (0x1E01, 'V'), + (0x1E02, 'M', 'ḃ'), + (0x1E03, 'V'), + (0x1E04, 'M', 'ḅ'), + (0x1E05, 'V'), + (0x1E06, 'M', 'ḇ'), + (0x1E07, 'V'), + (0x1E08, 'M', 'ḉ'), + (0x1E09, 'V'), + (0x1E0A, 'M', 'ḋ'), + (0x1E0B, 'V'), + (0x1E0C, 'M', 'ḍ'), + (0x1E0D, 'V'), + (0x1E0E, 'M', 'ḏ'), + (0x1E0F, 'V'), + (0x1E10, 'M', 'ḑ'), + (0x1E11, 'V'), + (0x1E12, 'M', 'ḓ'), + (0x1E13, 'V'), + (0x1E14, 'M', 'ḕ'), + (0x1E15, 'V'), + (0x1E16, 'M', 'ḗ'), + (0x1E17, 'V'), + (0x1E18, 'M', 'ḙ'), + (0x1E19, 'V'), + (0x1E1A, 'M', 'ḛ'), + (0x1E1B, 'V'), + (0x1E1C, 'M', 'ḝ'), + (0x1E1D, 'V'), + (0x1E1E, 'M', 'ḟ'), + (0x1E1F, 'V'), + (0x1E20, 'M', 'ḡ'), + (0x1E21, 'V'), + (0x1E22, 'M', 'ḣ'), + (0x1E23, 'V'), + ] + +def _seg_17() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E24, 'M', 'ḥ'), + (0x1E25, 'V'), + (0x1E26, 'M', 'ḧ'), + (0x1E27, 'V'), + (0x1E28, 'M', 'ḩ'), + (0x1E29, 'V'), + (0x1E2A, 'M', 'ḫ'), + (0x1E2B, 'V'), + (0x1E2C, 'M', 'ḭ'), + (0x1E2D, 'V'), + (0x1E2E, 'M', 'ḯ'), + (0x1E2F, 'V'), + (0x1E30, 'M', 'ḱ'), + (0x1E31, 'V'), + (0x1E32, 'M', 'ḳ'), + (0x1E33, 'V'), + (0x1E34, 'M', 'ḵ'), + (0x1E35, 'V'), + (0x1E36, 'M', 'ḷ'), + (0x1E37, 'V'), + (0x1E38, 'M', 'ḹ'), + (0x1E39, 'V'), + (0x1E3A, 'M', 'ḻ'), + (0x1E3B, 'V'), + (0x1E3C, 'M', 'ḽ'), + (0x1E3D, 'V'), + (0x1E3E, 'M', 'ḿ'), + (0x1E3F, 'V'), + (0x1E40, 'M', 'ṁ'), + (0x1E41, 'V'), + (0x1E42, 'M', 'ṃ'), + (0x1E43, 'V'), + (0x1E44, 'M', 'ṅ'), + (0x1E45, 'V'), + (0x1E46, 'M', 'ṇ'), + (0x1E47, 'V'), + (0x1E48, 'M', 'ṉ'), + (0x1E49, 'V'), + (0x1E4A, 'M', 'ṋ'), + (0x1E4B, 'V'), + (0x1E4C, 'M', 'ṍ'), + (0x1E4D, 'V'), + (0x1E4E, 'M', 'ṏ'), + (0x1E4F, 'V'), + (0x1E50, 'M', 'ṑ'), + (0x1E51, 'V'), + (0x1E52, 'M', 'ṓ'), + (0x1E53, 'V'), + (0x1E54, 'M', 'ṕ'), + (0x1E55, 'V'), + (0x1E56, 'M', 'ṗ'), + (0x1E57, 'V'), + (0x1E58, 'M', 'ṙ'), + (0x1E59, 'V'), + (0x1E5A, 'M', 'ṛ'), + (0x1E5B, 'V'), + (0x1E5C, 'M', 'ṝ'), + (0x1E5D, 'V'), + (0x1E5E, 'M', 'ṟ'), + (0x1E5F, 'V'), + (0x1E60, 'M', 'ṡ'), + (0x1E61, 'V'), + (0x1E62, 'M', 'ṣ'), + (0x1E63, 'V'), + (0x1E64, 'M', 'ṥ'), + (0x1E65, 'V'), + (0x1E66, 'M', 'ṧ'), + (0x1E67, 'V'), + (0x1E68, 'M', 'ṩ'), + (0x1E69, 'V'), + (0x1E6A, 'M', 'ṫ'), + (0x1E6B, 'V'), + (0x1E6C, 'M', 'ṭ'), + (0x1E6D, 'V'), + (0x1E6E, 'M', 'ṯ'), + (0x1E6F, 'V'), + (0x1E70, 'M', 'ṱ'), + (0x1E71, 'V'), + (0x1E72, 'M', 'ṳ'), + (0x1E73, 'V'), + (0x1E74, 'M', 'ṵ'), + (0x1E75, 'V'), + (0x1E76, 'M', 'ṷ'), + (0x1E77, 'V'), + (0x1E78, 'M', 'ṹ'), + (0x1E79, 'V'), + (0x1E7A, 'M', 'ṻ'), + (0x1E7B, 'V'), + (0x1E7C, 'M', 'ṽ'), + (0x1E7D, 'V'), + (0x1E7E, 'M', 'ṿ'), + (0x1E7F, 'V'), + (0x1E80, 'M', 'ẁ'), + (0x1E81, 'V'), + (0x1E82, 'M', 'ẃ'), + (0x1E83, 'V'), + (0x1E84, 'M', 'ẅ'), + (0x1E85, 'V'), + (0x1E86, 'M', 'ẇ'), + (0x1E87, 'V'), + ] + +def _seg_18() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E88, 'M', 'ẉ'), + (0x1E89, 'V'), + (0x1E8A, 'M', 'ẋ'), + (0x1E8B, 'V'), + (0x1E8C, 'M', 'ẍ'), + (0x1E8D, 'V'), + (0x1E8E, 'M', 'ẏ'), + (0x1E8F, 'V'), + (0x1E90, 'M', 'ẑ'), + (0x1E91, 'V'), + (0x1E92, 'M', 'ẓ'), + (0x1E93, 'V'), + (0x1E94, 'M', 'ẕ'), + (0x1E95, 'V'), + (0x1E9A, 'M', 'aʾ'), + (0x1E9B, 'M', 'ṡ'), + (0x1E9C, 'V'), + (0x1E9E, 'M', 'ss'), + (0x1E9F, 'V'), + (0x1EA0, 'M', 'ạ'), + (0x1EA1, 'V'), + (0x1EA2, 'M', 'ả'), + (0x1EA3, 'V'), + (0x1EA4, 'M', 'ấ'), + (0x1EA5, 'V'), + (0x1EA6, 'M', 'ầ'), + (0x1EA7, 'V'), + (0x1EA8, 'M', 'ẩ'), + (0x1EA9, 'V'), + (0x1EAA, 'M', 'ẫ'), + (0x1EAB, 'V'), + (0x1EAC, 'M', 'ậ'), + (0x1EAD, 'V'), + (0x1EAE, 'M', 'ắ'), + (0x1EAF, 'V'), + (0x1EB0, 'M', 'ằ'), + (0x1EB1, 'V'), + (0x1EB2, 'M', 'ẳ'), + (0x1EB3, 'V'), + (0x1EB4, 'M', 'ẵ'), + (0x1EB5, 'V'), + (0x1EB6, 'M', 'ặ'), + (0x1EB7, 'V'), + (0x1EB8, 'M', 'ẹ'), + (0x1EB9, 'V'), + (0x1EBA, 'M', 'ẻ'), + (0x1EBB, 'V'), + (0x1EBC, 'M', 'ẽ'), + (0x1EBD, 'V'), + (0x1EBE, 'M', 'ế'), + (0x1EBF, 'V'), + (0x1EC0, 'M', 'ề'), + (0x1EC1, 'V'), + (0x1EC2, 'M', 'ể'), + (0x1EC3, 'V'), + (0x1EC4, 'M', 'ễ'), + (0x1EC5, 'V'), + (0x1EC6, 'M', 'ệ'), + (0x1EC7, 'V'), + (0x1EC8, 'M', 'ỉ'), + (0x1EC9, 'V'), + (0x1ECA, 'M', 'ị'), + (0x1ECB, 'V'), + (0x1ECC, 'M', 'ọ'), + (0x1ECD, 'V'), + (0x1ECE, 'M', 'ỏ'), + (0x1ECF, 'V'), + (0x1ED0, 'M', 'ố'), + (0x1ED1, 'V'), + (0x1ED2, 'M', 'ồ'), + (0x1ED3, 'V'), + (0x1ED4, 'M', 'ổ'), + (0x1ED5, 'V'), + (0x1ED6, 'M', 'ỗ'), + (0x1ED7, 'V'), + (0x1ED8, 'M', 'ộ'), + (0x1ED9, 'V'), + (0x1EDA, 'M', 'ớ'), + (0x1EDB, 'V'), + (0x1EDC, 'M', 'ờ'), + (0x1EDD, 'V'), + (0x1EDE, 'M', 'ở'), + (0x1EDF, 'V'), + (0x1EE0, 'M', 'ỡ'), + (0x1EE1, 'V'), + (0x1EE2, 'M', 'ợ'), + (0x1EE3, 'V'), + (0x1EE4, 'M', 'ụ'), + (0x1EE5, 'V'), + (0x1EE6, 'M', 'ủ'), + (0x1EE7, 'V'), + (0x1EE8, 'M', 'ứ'), + (0x1EE9, 'V'), + (0x1EEA, 'M', 'ừ'), + (0x1EEB, 'V'), + (0x1EEC, 'M', 'ử'), + (0x1EED, 'V'), + (0x1EEE, 'M', 'ữ'), + (0x1EEF, 'V'), + (0x1EF0, 'M', 'ự'), + ] + +def _seg_19() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EF1, 'V'), + (0x1EF2, 'M', 'ỳ'), + (0x1EF3, 'V'), + (0x1EF4, 'M', 'ỵ'), + (0x1EF5, 'V'), + (0x1EF6, 'M', 'ỷ'), + (0x1EF7, 'V'), + (0x1EF8, 'M', 'ỹ'), + (0x1EF9, 'V'), + (0x1EFA, 'M', 'ỻ'), + (0x1EFB, 'V'), + (0x1EFC, 'M', 'ỽ'), + (0x1EFD, 'V'), + (0x1EFE, 'M', 'ỿ'), + (0x1EFF, 'V'), + (0x1F08, 'M', 'ἀ'), + (0x1F09, 'M', 'ἁ'), + (0x1F0A, 'M', 'ἂ'), + (0x1F0B, 'M', 'ἃ'), + (0x1F0C, 'M', 'ἄ'), + (0x1F0D, 'M', 'ἅ'), + (0x1F0E, 'M', 'ἆ'), + (0x1F0F, 'M', 'ἇ'), + (0x1F10, 'V'), + (0x1F16, 'X'), + (0x1F18, 'M', 'ἐ'), + (0x1F19, 'M', 'ἑ'), + (0x1F1A, 'M', 'ἒ'), + (0x1F1B, 'M', 'ἓ'), + (0x1F1C, 'M', 'ἔ'), + (0x1F1D, 'M', 'ἕ'), + (0x1F1E, 'X'), + (0x1F20, 'V'), + (0x1F28, 'M', 'ἠ'), + (0x1F29, 'M', 'ἡ'), + (0x1F2A, 'M', 'ἢ'), + (0x1F2B, 'M', 'ἣ'), + (0x1F2C, 'M', 'ἤ'), + (0x1F2D, 'M', 'ἥ'), + (0x1F2E, 'M', 'ἦ'), + (0x1F2F, 'M', 'ἧ'), + (0x1F30, 'V'), + (0x1F38, 'M', 'ἰ'), + (0x1F39, 'M', 'ἱ'), + (0x1F3A, 'M', 'ἲ'), + (0x1F3B, 'M', 'ἳ'), + (0x1F3C, 'M', 'ἴ'), + (0x1F3D, 'M', 'ἵ'), + (0x1F3E, 'M', 'ἶ'), + (0x1F3F, 'M', 'ἷ'), + (0x1F40, 'V'), + (0x1F46, 'X'), + (0x1F48, 'M', 'ὀ'), + (0x1F49, 'M', 'ὁ'), + (0x1F4A, 'M', 'ὂ'), + (0x1F4B, 'M', 'ὃ'), + (0x1F4C, 'M', 'ὄ'), + (0x1F4D, 'M', 'ὅ'), + (0x1F4E, 'X'), + (0x1F50, 'V'), + (0x1F58, 'X'), + (0x1F59, 'M', 'ὑ'), + (0x1F5A, 'X'), + (0x1F5B, 'M', 'ὓ'), + (0x1F5C, 'X'), + (0x1F5D, 'M', 'ὕ'), + (0x1F5E, 'X'), + (0x1F5F, 'M', 'ὗ'), + (0x1F60, 'V'), + (0x1F68, 'M', 'ὠ'), + (0x1F69, 'M', 'ὡ'), + (0x1F6A, 'M', 'ὢ'), + (0x1F6B, 'M', 'ὣ'), + (0x1F6C, 'M', 'ὤ'), + (0x1F6D, 'M', 'ὥ'), + (0x1F6E, 'M', 'ὦ'), + (0x1F6F, 'M', 'ὧ'), + (0x1F70, 'V'), + (0x1F71, 'M', 'ά'), + (0x1F72, 'V'), + (0x1F73, 'M', 'έ'), + (0x1F74, 'V'), + (0x1F75, 'M', 'ή'), + (0x1F76, 'V'), + (0x1F77, 'M', 'ί'), + (0x1F78, 'V'), + (0x1F79, 'M', 'ό'), + (0x1F7A, 'V'), + (0x1F7B, 'M', 'ύ'), + (0x1F7C, 'V'), + (0x1F7D, 'M', 'ώ'), + (0x1F7E, 'X'), + (0x1F80, 'M', 'ἀι'), + (0x1F81, 'M', 'ἁι'), + (0x1F82, 'M', 'ἂι'), + (0x1F83, 'M', 'ἃι'), + (0x1F84, 'M', 'ἄι'), + (0x1F85, 'M', 'ἅι'), + (0x1F86, 'M', 'ἆι'), + (0x1F87, 'M', 'ἇι'), + ] + +def _seg_20() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1F88, 'M', 'ἀι'), + (0x1F89, 'M', 'ἁι'), + (0x1F8A, 'M', 'ἂι'), + (0x1F8B, 'M', 'ἃι'), + (0x1F8C, 'M', 'ἄι'), + (0x1F8D, 'M', 'ἅι'), + (0x1F8E, 'M', 'ἆι'), + (0x1F8F, 'M', 'ἇι'), + (0x1F90, 'M', 'ἠι'), + (0x1F91, 'M', 'ἡι'), + (0x1F92, 'M', 'ἢι'), + (0x1F93, 'M', 'ἣι'), + (0x1F94, 'M', 'ἤι'), + (0x1F95, 'M', 'ἥι'), + (0x1F96, 'M', 'ἦι'), + (0x1F97, 'M', 'ἧι'), + (0x1F98, 'M', 'ἠι'), + (0x1F99, 'M', 'ἡι'), + (0x1F9A, 'M', 'ἢι'), + (0x1F9B, 'M', 'ἣι'), + (0x1F9C, 'M', 'ἤι'), + (0x1F9D, 'M', 'ἥι'), + (0x1F9E, 'M', 'ἦι'), + (0x1F9F, 'M', 'ἧι'), + (0x1FA0, 'M', 'ὠι'), + (0x1FA1, 'M', 'ὡι'), + (0x1FA2, 'M', 'ὢι'), + (0x1FA3, 'M', 'ὣι'), + (0x1FA4, 'M', 'ὤι'), + (0x1FA5, 'M', 'ὥι'), + (0x1FA6, 'M', 'ὦι'), + (0x1FA7, 'M', 'ὧι'), + (0x1FA8, 'M', 'ὠι'), + (0x1FA9, 'M', 'ὡι'), + (0x1FAA, 'M', 'ὢι'), + (0x1FAB, 'M', 'ὣι'), + (0x1FAC, 'M', 'ὤι'), + (0x1FAD, 'M', 'ὥι'), + (0x1FAE, 'M', 'ὦι'), + (0x1FAF, 'M', 'ὧι'), + (0x1FB0, 'V'), + (0x1FB2, 'M', 'ὰι'), + (0x1FB3, 'M', 'αι'), + (0x1FB4, 'M', 'άι'), + (0x1FB5, 'X'), + (0x1FB6, 'V'), + (0x1FB7, 'M', 'ᾶι'), + (0x1FB8, 'M', 'ᾰ'), + (0x1FB9, 'M', 'ᾱ'), + (0x1FBA, 'M', 'ὰ'), + (0x1FBB, 'M', 'ά'), + (0x1FBC, 'M', 'αι'), + (0x1FBD, '3', ' ̓'), + (0x1FBE, 'M', 'ι'), + (0x1FBF, '3', ' ̓'), + (0x1FC0, '3', ' ͂'), + (0x1FC1, '3', ' ̈͂'), + (0x1FC2, 'M', 'ὴι'), + (0x1FC3, 'M', 'ηι'), + (0x1FC4, 'M', 'ήι'), + (0x1FC5, 'X'), + (0x1FC6, 'V'), + (0x1FC7, 'M', 'ῆι'), + (0x1FC8, 'M', 'ὲ'), + (0x1FC9, 'M', 'έ'), + (0x1FCA, 'M', 'ὴ'), + (0x1FCB, 'M', 'ή'), + (0x1FCC, 'M', 'ηι'), + (0x1FCD, '3', ' ̓̀'), + (0x1FCE, '3', ' ̓́'), + (0x1FCF, '3', ' ̓͂'), + (0x1FD0, 'V'), + (0x1FD3, 'M', 'ΐ'), + (0x1FD4, 'X'), + (0x1FD6, 'V'), + (0x1FD8, 'M', 'ῐ'), + (0x1FD9, 'M', 'ῑ'), + (0x1FDA, 'M', 'ὶ'), + (0x1FDB, 'M', 'ί'), + (0x1FDC, 'X'), + (0x1FDD, '3', ' ̔̀'), + (0x1FDE, '3', ' ̔́'), + (0x1FDF, '3', ' ̔͂'), + (0x1FE0, 'V'), + (0x1FE3, 'M', 'ΰ'), + (0x1FE4, 'V'), + (0x1FE8, 'M', 'ῠ'), + (0x1FE9, 'M', 'ῡ'), + (0x1FEA, 'M', 'ὺ'), + (0x1FEB, 'M', 'ύ'), + (0x1FEC, 'M', 'ῥ'), + (0x1FED, '3', ' ̈̀'), + (0x1FEE, '3', ' ̈́'), + (0x1FEF, '3', '`'), + (0x1FF0, 'X'), + (0x1FF2, 'M', 'ὼι'), + (0x1FF3, 'M', 'ωι'), + (0x1FF4, 'M', 'ώι'), + (0x1FF5, 'X'), + (0x1FF6, 'V'), + ] + +def _seg_21() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1FF7, 'M', 'ῶι'), + (0x1FF8, 'M', 'ὸ'), + (0x1FF9, 'M', 'ό'), + (0x1FFA, 'M', 'ὼ'), + (0x1FFB, 'M', 'ώ'), + (0x1FFC, 'M', 'ωι'), + (0x1FFD, '3', ' ́'), + (0x1FFE, '3', ' ̔'), + (0x1FFF, 'X'), + (0x2000, '3', ' '), + (0x200B, 'I'), + (0x200C, 'D', ''), + (0x200E, 'X'), + (0x2010, 'V'), + (0x2011, 'M', '‐'), + (0x2012, 'V'), + (0x2017, '3', ' ̳'), + (0x2018, 'V'), + (0x2024, 'X'), + (0x2027, 'V'), + (0x2028, 'X'), + (0x202F, '3', ' '), + (0x2030, 'V'), + (0x2033, 'M', '′′'), + (0x2034, 'M', '′′′'), + (0x2035, 'V'), + (0x2036, 'M', '‵‵'), + (0x2037, 'M', '‵‵‵'), + (0x2038, 'V'), + (0x203C, '3', '!!'), + (0x203D, 'V'), + (0x203E, '3', ' ̅'), + (0x203F, 'V'), + (0x2047, '3', '??'), + (0x2048, '3', '?!'), + (0x2049, '3', '!?'), + (0x204A, 'V'), + (0x2057, 'M', '′′′′'), + (0x2058, 'V'), + (0x205F, '3', ' '), + (0x2060, 'I'), + (0x2061, 'X'), + (0x2064, 'I'), + (0x2065, 'X'), + (0x2070, 'M', '0'), + (0x2071, 'M', 'i'), + (0x2072, 'X'), + (0x2074, 'M', '4'), + (0x2075, 'M', '5'), + (0x2076, 'M', '6'), + (0x2077, 'M', '7'), + (0x2078, 'M', '8'), + (0x2079, 'M', '9'), + (0x207A, '3', '+'), + (0x207B, 'M', '−'), + (0x207C, '3', '='), + (0x207D, '3', '('), + (0x207E, '3', ')'), + (0x207F, 'M', 'n'), + (0x2080, 'M', '0'), + (0x2081, 'M', '1'), + (0x2082, 'M', '2'), + (0x2083, 'M', '3'), + (0x2084, 'M', '4'), + (0x2085, 'M', '5'), + (0x2086, 'M', '6'), + (0x2087, 'M', '7'), + (0x2088, 'M', '8'), + (0x2089, 'M', '9'), + (0x208A, '3', '+'), + (0x208B, 'M', '−'), + (0x208C, '3', '='), + (0x208D, '3', '('), + (0x208E, '3', ')'), + (0x208F, 'X'), + (0x2090, 'M', 'a'), + (0x2091, 'M', 'e'), + (0x2092, 'M', 'o'), + (0x2093, 'M', 'x'), + (0x2094, 'M', 'ə'), + (0x2095, 'M', 'h'), + (0x2096, 'M', 'k'), + (0x2097, 'M', 'l'), + (0x2098, 'M', 'm'), + (0x2099, 'M', 'n'), + (0x209A, 'M', 'p'), + (0x209B, 'M', 's'), + (0x209C, 'M', 't'), + (0x209D, 'X'), + (0x20A0, 'V'), + (0x20A8, 'M', 'rs'), + (0x20A9, 'V'), + (0x20C1, 'X'), + (0x20D0, 'V'), + (0x20F1, 'X'), + (0x2100, '3', 'a/c'), + (0x2101, '3', 'a/s'), + (0x2102, 'M', 'c'), + (0x2103, 'M', '°c'), + (0x2104, 'V'), + ] + +def _seg_22() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2105, '3', 'c/o'), + (0x2106, '3', 'c/u'), + (0x2107, 'M', 'ɛ'), + (0x2108, 'V'), + (0x2109, 'M', '°f'), + (0x210A, 'M', 'g'), + (0x210B, 'M', 'h'), + (0x210F, 'M', 'ħ'), + (0x2110, 'M', 'i'), + (0x2112, 'M', 'l'), + (0x2114, 'V'), + (0x2115, 'M', 'n'), + (0x2116, 'M', 'no'), + (0x2117, 'V'), + (0x2119, 'M', 'p'), + (0x211A, 'M', 'q'), + (0x211B, 'M', 'r'), + (0x211E, 'V'), + (0x2120, 'M', 'sm'), + (0x2121, 'M', 'tel'), + (0x2122, 'M', 'tm'), + (0x2123, 'V'), + (0x2124, 'M', 'z'), + (0x2125, 'V'), + (0x2126, 'M', 'ω'), + (0x2127, 'V'), + (0x2128, 'M', 'z'), + (0x2129, 'V'), + (0x212A, 'M', 'k'), + (0x212B, 'M', 'å'), + (0x212C, 'M', 'b'), + (0x212D, 'M', 'c'), + (0x212E, 'V'), + (0x212F, 'M', 'e'), + (0x2131, 'M', 'f'), + (0x2132, 'X'), + (0x2133, 'M', 'm'), + (0x2134, 'M', 'o'), + (0x2135, 'M', 'א'), + (0x2136, 'M', 'ב'), + (0x2137, 'M', 'ג'), + (0x2138, 'M', 'ד'), + (0x2139, 'M', 'i'), + (0x213A, 'V'), + (0x213B, 'M', 'fax'), + (0x213C, 'M', 'π'), + (0x213D, 'M', 'γ'), + (0x213F, 'M', 'π'), + (0x2140, 'M', '∑'), + (0x2141, 'V'), + (0x2145, 'M', 'd'), + (0x2147, 'M', 'e'), + (0x2148, 'M', 'i'), + (0x2149, 'M', 'j'), + (0x214A, 'V'), + (0x2150, 'M', '1⁄7'), + (0x2151, 'M', '1⁄9'), + (0x2152, 'M', '1⁄10'), + (0x2153, 'M', '1⁄3'), + (0x2154, 'M', '2⁄3'), + (0x2155, 'M', '1⁄5'), + (0x2156, 'M', '2⁄5'), + (0x2157, 'M', '3⁄5'), + (0x2158, 'M', '4⁄5'), + (0x2159, 'M', '1⁄6'), + (0x215A, 'M', '5⁄6'), + (0x215B, 'M', '1⁄8'), + (0x215C, 'M', '3⁄8'), + (0x215D, 'M', '5⁄8'), + (0x215E, 'M', '7⁄8'), + (0x215F, 'M', '1⁄'), + (0x2160, 'M', 'i'), + (0x2161, 'M', 'ii'), + (0x2162, 'M', 'iii'), + (0x2163, 'M', 'iv'), + (0x2164, 'M', 'v'), + (0x2165, 'M', 'vi'), + (0x2166, 'M', 'vii'), + (0x2167, 'M', 'viii'), + (0x2168, 'M', 'ix'), + (0x2169, 'M', 'x'), + (0x216A, 'M', 'xi'), + (0x216B, 'M', 'xii'), + (0x216C, 'M', 'l'), + (0x216D, 'M', 'c'), + (0x216E, 'M', 'd'), + (0x216F, 'M', 'm'), + (0x2170, 'M', 'i'), + (0x2171, 'M', 'ii'), + (0x2172, 'M', 'iii'), + (0x2173, 'M', 'iv'), + (0x2174, 'M', 'v'), + (0x2175, 'M', 'vi'), + (0x2176, 'M', 'vii'), + (0x2177, 'M', 'viii'), + (0x2178, 'M', 'ix'), + (0x2179, 'M', 'x'), + (0x217A, 'M', 'xi'), + (0x217B, 'M', 'xii'), + (0x217C, 'M', 'l'), + ] + +def _seg_23() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x217D, 'M', 'c'), + (0x217E, 'M', 'd'), + (0x217F, 'M', 'm'), + (0x2180, 'V'), + (0x2183, 'X'), + (0x2184, 'V'), + (0x2189, 'M', '0⁄3'), + (0x218A, 'V'), + (0x218C, 'X'), + (0x2190, 'V'), + (0x222C, 'M', '∫∫'), + (0x222D, 'M', '∫∫∫'), + (0x222E, 'V'), + (0x222F, 'M', '∮∮'), + (0x2230, 'M', '∮∮∮'), + (0x2231, 'V'), + (0x2260, '3'), + (0x2261, 'V'), + (0x226E, '3'), + (0x2270, 'V'), + (0x2329, 'M', '〈'), + (0x232A, 'M', '〉'), + (0x232B, 'V'), + (0x2427, 'X'), + (0x2440, 'V'), + (0x244B, 'X'), + (0x2460, 'M', '1'), + (0x2461, 'M', '2'), + (0x2462, 'M', '3'), + (0x2463, 'M', '4'), + (0x2464, 'M', '5'), + (0x2465, 'M', '6'), + (0x2466, 'M', '7'), + (0x2467, 'M', '8'), + (0x2468, 'M', '9'), + (0x2469, 'M', '10'), + (0x246A, 'M', '11'), + (0x246B, 'M', '12'), + (0x246C, 'M', '13'), + (0x246D, 'M', '14'), + (0x246E, 'M', '15'), + (0x246F, 'M', '16'), + (0x2470, 'M', '17'), + (0x2471, 'M', '18'), + (0x2472, 'M', '19'), + (0x2473, 'M', '20'), + (0x2474, '3', '(1)'), + (0x2475, '3', '(2)'), + (0x2476, '3', '(3)'), + (0x2477, '3', '(4)'), + (0x2478, '3', '(5)'), + (0x2479, '3', '(6)'), + (0x247A, '3', '(7)'), + (0x247B, '3', '(8)'), + (0x247C, '3', '(9)'), + (0x247D, '3', '(10)'), + (0x247E, '3', '(11)'), + (0x247F, '3', '(12)'), + (0x2480, '3', '(13)'), + (0x2481, '3', '(14)'), + (0x2482, '3', '(15)'), + (0x2483, '3', '(16)'), + (0x2484, '3', '(17)'), + (0x2485, '3', '(18)'), + (0x2486, '3', '(19)'), + (0x2487, '3', '(20)'), + (0x2488, 'X'), + (0x249C, '3', '(a)'), + (0x249D, '3', '(b)'), + (0x249E, '3', '(c)'), + (0x249F, '3', '(d)'), + (0x24A0, '3', '(e)'), + (0x24A1, '3', '(f)'), + (0x24A2, '3', '(g)'), + (0x24A3, '3', '(h)'), + (0x24A4, '3', '(i)'), + (0x24A5, '3', '(j)'), + (0x24A6, '3', '(k)'), + (0x24A7, '3', '(l)'), + (0x24A8, '3', '(m)'), + (0x24A9, '3', '(n)'), + (0x24AA, '3', '(o)'), + (0x24AB, '3', '(p)'), + (0x24AC, '3', '(q)'), + (0x24AD, '3', '(r)'), + (0x24AE, '3', '(s)'), + (0x24AF, '3', '(t)'), + (0x24B0, '3', '(u)'), + (0x24B1, '3', '(v)'), + (0x24B2, '3', '(w)'), + (0x24B3, '3', '(x)'), + (0x24B4, '3', '(y)'), + (0x24B5, '3', '(z)'), + (0x24B6, 'M', 'a'), + (0x24B7, 'M', 'b'), + (0x24B8, 'M', 'c'), + (0x24B9, 'M', 'd'), + (0x24BA, 'M', 'e'), + (0x24BB, 'M', 'f'), + (0x24BC, 'M', 'g'), + ] + +def _seg_24() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x24BD, 'M', 'h'), + (0x24BE, 'M', 'i'), + (0x24BF, 'M', 'j'), + (0x24C0, 'M', 'k'), + (0x24C1, 'M', 'l'), + (0x24C2, 'M', 'm'), + (0x24C3, 'M', 'n'), + (0x24C4, 'M', 'o'), + (0x24C5, 'M', 'p'), + (0x24C6, 'M', 'q'), + (0x24C7, 'M', 'r'), + (0x24C8, 'M', 's'), + (0x24C9, 'M', 't'), + (0x24CA, 'M', 'u'), + (0x24CB, 'M', 'v'), + (0x24CC, 'M', 'w'), + (0x24CD, 'M', 'x'), + (0x24CE, 'M', 'y'), + (0x24CF, 'M', 'z'), + (0x24D0, 'M', 'a'), + (0x24D1, 'M', 'b'), + (0x24D2, 'M', 'c'), + (0x24D3, 'M', 'd'), + (0x24D4, 'M', 'e'), + (0x24D5, 'M', 'f'), + (0x24D6, 'M', 'g'), + (0x24D7, 'M', 'h'), + (0x24D8, 'M', 'i'), + (0x24D9, 'M', 'j'), + (0x24DA, 'M', 'k'), + (0x24DB, 'M', 'l'), + (0x24DC, 'M', 'm'), + (0x24DD, 'M', 'n'), + (0x24DE, 'M', 'o'), + (0x24DF, 'M', 'p'), + (0x24E0, 'M', 'q'), + (0x24E1, 'M', 'r'), + (0x24E2, 'M', 's'), + (0x24E3, 'M', 't'), + (0x24E4, 'M', 'u'), + (0x24E5, 'M', 'v'), + (0x24E6, 'M', 'w'), + (0x24E7, 'M', 'x'), + (0x24E8, 'M', 'y'), + (0x24E9, 'M', 'z'), + (0x24EA, 'M', '0'), + (0x24EB, 'V'), + (0x2A0C, 'M', '∫∫∫∫'), + (0x2A0D, 'V'), + (0x2A74, '3', '::='), + (0x2A75, '3', '=='), + (0x2A76, '3', '==='), + (0x2A77, 'V'), + (0x2ADC, 'M', '⫝̸'), + (0x2ADD, 'V'), + (0x2B74, 'X'), + (0x2B76, 'V'), + (0x2B96, 'X'), + (0x2B97, 'V'), + (0x2C00, 'M', 'ⰰ'), + (0x2C01, 'M', 'ⰱ'), + (0x2C02, 'M', 'ⰲ'), + (0x2C03, 'M', 'ⰳ'), + (0x2C04, 'M', 'ⰴ'), + (0x2C05, 'M', 'ⰵ'), + (0x2C06, 'M', 'ⰶ'), + (0x2C07, 'M', 'ⰷ'), + (0x2C08, 'M', 'ⰸ'), + (0x2C09, 'M', 'ⰹ'), + (0x2C0A, 'M', 'ⰺ'), + (0x2C0B, 'M', 'ⰻ'), + (0x2C0C, 'M', 'ⰼ'), + (0x2C0D, 'M', 'ⰽ'), + (0x2C0E, 'M', 'ⰾ'), + (0x2C0F, 'M', 'ⰿ'), + (0x2C10, 'M', 'ⱀ'), + (0x2C11, 'M', 'ⱁ'), + (0x2C12, 'M', 'ⱂ'), + (0x2C13, 'M', 'ⱃ'), + (0x2C14, 'M', 'ⱄ'), + (0x2C15, 'M', 'ⱅ'), + (0x2C16, 'M', 'ⱆ'), + (0x2C17, 'M', 'ⱇ'), + (0x2C18, 'M', 'ⱈ'), + (0x2C19, 'M', 'ⱉ'), + (0x2C1A, 'M', 'ⱊ'), + (0x2C1B, 'M', 'ⱋ'), + (0x2C1C, 'M', 'ⱌ'), + (0x2C1D, 'M', 'ⱍ'), + (0x2C1E, 'M', 'ⱎ'), + (0x2C1F, 'M', 'ⱏ'), + (0x2C20, 'M', 'ⱐ'), + (0x2C21, 'M', 'ⱑ'), + (0x2C22, 'M', 'ⱒ'), + (0x2C23, 'M', 'ⱓ'), + (0x2C24, 'M', 'ⱔ'), + (0x2C25, 'M', 'ⱕ'), + (0x2C26, 'M', 'ⱖ'), + (0x2C27, 'M', 'ⱗ'), + (0x2C28, 'M', 'ⱘ'), + ] + +def _seg_25() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2C29, 'M', 'ⱙ'), + (0x2C2A, 'M', 'ⱚ'), + (0x2C2B, 'M', 'ⱛ'), + (0x2C2C, 'M', 'ⱜ'), + (0x2C2D, 'M', 'ⱝ'), + (0x2C2E, 'M', 'ⱞ'), + (0x2C2F, 'M', 'ⱟ'), + (0x2C30, 'V'), + (0x2C60, 'M', 'ⱡ'), + (0x2C61, 'V'), + (0x2C62, 'M', 'ɫ'), + (0x2C63, 'M', 'ᵽ'), + (0x2C64, 'M', 'ɽ'), + (0x2C65, 'V'), + (0x2C67, 'M', 'ⱨ'), + (0x2C68, 'V'), + (0x2C69, 'M', 'ⱪ'), + (0x2C6A, 'V'), + (0x2C6B, 'M', 'ⱬ'), + (0x2C6C, 'V'), + (0x2C6D, 'M', 'ɑ'), + (0x2C6E, 'M', 'ɱ'), + (0x2C6F, 'M', 'ɐ'), + (0x2C70, 'M', 'ɒ'), + (0x2C71, 'V'), + (0x2C72, 'M', 'ⱳ'), + (0x2C73, 'V'), + (0x2C75, 'M', 'ⱶ'), + (0x2C76, 'V'), + (0x2C7C, 'M', 'j'), + (0x2C7D, 'M', 'v'), + (0x2C7E, 'M', 'ȿ'), + (0x2C7F, 'M', 'ɀ'), + (0x2C80, 'M', 'ⲁ'), + (0x2C81, 'V'), + (0x2C82, 'M', 'ⲃ'), + (0x2C83, 'V'), + (0x2C84, 'M', 'ⲅ'), + (0x2C85, 'V'), + (0x2C86, 'M', 'ⲇ'), + (0x2C87, 'V'), + (0x2C88, 'M', 'ⲉ'), + (0x2C89, 'V'), + (0x2C8A, 'M', 'ⲋ'), + (0x2C8B, 'V'), + (0x2C8C, 'M', 'ⲍ'), + (0x2C8D, 'V'), + (0x2C8E, 'M', 'ⲏ'), + (0x2C8F, 'V'), + (0x2C90, 'M', 'ⲑ'), + (0x2C91, 'V'), + (0x2C92, 'M', 'ⲓ'), + (0x2C93, 'V'), + (0x2C94, 'M', 'ⲕ'), + (0x2C95, 'V'), + (0x2C96, 'M', 'ⲗ'), + (0x2C97, 'V'), + (0x2C98, 'M', 'ⲙ'), + (0x2C99, 'V'), + (0x2C9A, 'M', 'ⲛ'), + (0x2C9B, 'V'), + (0x2C9C, 'M', 'ⲝ'), + (0x2C9D, 'V'), + (0x2C9E, 'M', 'ⲟ'), + (0x2C9F, 'V'), + (0x2CA0, 'M', 'ⲡ'), + (0x2CA1, 'V'), + (0x2CA2, 'M', 'ⲣ'), + (0x2CA3, 'V'), + (0x2CA4, 'M', 'ⲥ'), + (0x2CA5, 'V'), + (0x2CA6, 'M', 'ⲧ'), + (0x2CA7, 'V'), + (0x2CA8, 'M', 'ⲩ'), + (0x2CA9, 'V'), + (0x2CAA, 'M', 'ⲫ'), + (0x2CAB, 'V'), + (0x2CAC, 'M', 'ⲭ'), + (0x2CAD, 'V'), + (0x2CAE, 'M', 'ⲯ'), + (0x2CAF, 'V'), + (0x2CB0, 'M', 'ⲱ'), + (0x2CB1, 'V'), + (0x2CB2, 'M', 'ⲳ'), + (0x2CB3, 'V'), + (0x2CB4, 'M', 'ⲵ'), + (0x2CB5, 'V'), + (0x2CB6, 'M', 'ⲷ'), + (0x2CB7, 'V'), + (0x2CB8, 'M', 'ⲹ'), + (0x2CB9, 'V'), + (0x2CBA, 'M', 'ⲻ'), + (0x2CBB, 'V'), + (0x2CBC, 'M', 'ⲽ'), + (0x2CBD, 'V'), + (0x2CBE, 'M', 'ⲿ'), + (0x2CBF, 'V'), + (0x2CC0, 'M', 'ⳁ'), + (0x2CC1, 'V'), + (0x2CC2, 'M', 'ⳃ'), + ] + +def _seg_26() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2CC3, 'V'), + (0x2CC4, 'M', 'ⳅ'), + (0x2CC5, 'V'), + (0x2CC6, 'M', 'ⳇ'), + (0x2CC7, 'V'), + (0x2CC8, 'M', 'ⳉ'), + (0x2CC9, 'V'), + (0x2CCA, 'M', 'ⳋ'), + (0x2CCB, 'V'), + (0x2CCC, 'M', 'ⳍ'), + (0x2CCD, 'V'), + (0x2CCE, 'M', 'ⳏ'), + (0x2CCF, 'V'), + (0x2CD0, 'M', 'ⳑ'), + (0x2CD1, 'V'), + (0x2CD2, 'M', 'ⳓ'), + (0x2CD3, 'V'), + (0x2CD4, 'M', 'ⳕ'), + (0x2CD5, 'V'), + (0x2CD6, 'M', 'ⳗ'), + (0x2CD7, 'V'), + (0x2CD8, 'M', 'ⳙ'), + (0x2CD9, 'V'), + (0x2CDA, 'M', 'ⳛ'), + (0x2CDB, 'V'), + (0x2CDC, 'M', 'ⳝ'), + (0x2CDD, 'V'), + (0x2CDE, 'M', 'ⳟ'), + (0x2CDF, 'V'), + (0x2CE0, 'M', 'ⳡ'), + (0x2CE1, 'V'), + (0x2CE2, 'M', 'ⳣ'), + (0x2CE3, 'V'), + (0x2CEB, 'M', 'ⳬ'), + (0x2CEC, 'V'), + (0x2CED, 'M', 'ⳮ'), + (0x2CEE, 'V'), + (0x2CF2, 'M', 'ⳳ'), + (0x2CF3, 'V'), + (0x2CF4, 'X'), + (0x2CF9, 'V'), + (0x2D26, 'X'), + (0x2D27, 'V'), + (0x2D28, 'X'), + (0x2D2D, 'V'), + (0x2D2E, 'X'), + (0x2D30, 'V'), + (0x2D68, 'X'), + (0x2D6F, 'M', 'ⵡ'), + (0x2D70, 'V'), + (0x2D71, 'X'), + (0x2D7F, 'V'), + (0x2D97, 'X'), + (0x2DA0, 'V'), + (0x2DA7, 'X'), + (0x2DA8, 'V'), + (0x2DAF, 'X'), + (0x2DB0, 'V'), + (0x2DB7, 'X'), + (0x2DB8, 'V'), + (0x2DBF, 'X'), + (0x2DC0, 'V'), + (0x2DC7, 'X'), + (0x2DC8, 'V'), + (0x2DCF, 'X'), + (0x2DD0, 'V'), + (0x2DD7, 'X'), + (0x2DD8, 'V'), + (0x2DDF, 'X'), + (0x2DE0, 'V'), + (0x2E5E, 'X'), + (0x2E80, 'V'), + (0x2E9A, 'X'), + (0x2E9B, 'V'), + (0x2E9F, 'M', '母'), + (0x2EA0, 'V'), + (0x2EF3, 'M', '龟'), + (0x2EF4, 'X'), + (0x2F00, 'M', '一'), + (0x2F01, 'M', '丨'), + (0x2F02, 'M', '丶'), + (0x2F03, 'M', '丿'), + (0x2F04, 'M', '乙'), + (0x2F05, 'M', '亅'), + (0x2F06, 'M', '二'), + (0x2F07, 'M', '亠'), + (0x2F08, 'M', '人'), + (0x2F09, 'M', '儿'), + (0x2F0A, 'M', '入'), + (0x2F0B, 'M', '八'), + (0x2F0C, 'M', '冂'), + (0x2F0D, 'M', '冖'), + (0x2F0E, 'M', '冫'), + (0x2F0F, 'M', '几'), + (0x2F10, 'M', '凵'), + (0x2F11, 'M', '刀'), + (0x2F12, 'M', '力'), + (0x2F13, 'M', '勹'), + (0x2F14, 'M', '匕'), + (0x2F15, 'M', '匚'), + ] + +def _seg_27() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F16, 'M', '匸'), + (0x2F17, 'M', '十'), + (0x2F18, 'M', '卜'), + (0x2F19, 'M', '卩'), + (0x2F1A, 'M', '厂'), + (0x2F1B, 'M', '厶'), + (0x2F1C, 'M', '又'), + (0x2F1D, 'M', '口'), + (0x2F1E, 'M', '囗'), + (0x2F1F, 'M', '土'), + (0x2F20, 'M', '士'), + (0x2F21, 'M', '夂'), + (0x2F22, 'M', '夊'), + (0x2F23, 'M', '夕'), + (0x2F24, 'M', '大'), + (0x2F25, 'M', '女'), + (0x2F26, 'M', '子'), + (0x2F27, 'M', '宀'), + (0x2F28, 'M', '寸'), + (0x2F29, 'M', '小'), + (0x2F2A, 'M', '尢'), + (0x2F2B, 'M', '尸'), + (0x2F2C, 'M', '屮'), + (0x2F2D, 'M', '山'), + (0x2F2E, 'M', '巛'), + (0x2F2F, 'M', '工'), + (0x2F30, 'M', '己'), + (0x2F31, 'M', '巾'), + (0x2F32, 'M', '干'), + (0x2F33, 'M', '幺'), + (0x2F34, 'M', '广'), + (0x2F35, 'M', '廴'), + (0x2F36, 'M', '廾'), + (0x2F37, 'M', '弋'), + (0x2F38, 'M', '弓'), + (0x2F39, 'M', '彐'), + (0x2F3A, 'M', '彡'), + (0x2F3B, 'M', '彳'), + (0x2F3C, 'M', '心'), + (0x2F3D, 'M', '戈'), + (0x2F3E, 'M', '戶'), + (0x2F3F, 'M', '手'), + (0x2F40, 'M', '支'), + (0x2F41, 'M', '攴'), + (0x2F42, 'M', '文'), + (0x2F43, 'M', '斗'), + (0x2F44, 'M', '斤'), + (0x2F45, 'M', '方'), + (0x2F46, 'M', '无'), + (0x2F47, 'M', '日'), + (0x2F48, 'M', '曰'), + (0x2F49, 'M', '月'), + (0x2F4A, 'M', '木'), + (0x2F4B, 'M', '欠'), + (0x2F4C, 'M', '止'), + (0x2F4D, 'M', '歹'), + (0x2F4E, 'M', '殳'), + (0x2F4F, 'M', '毋'), + (0x2F50, 'M', '比'), + (0x2F51, 'M', '毛'), + (0x2F52, 'M', '氏'), + (0x2F53, 'M', '气'), + (0x2F54, 'M', '水'), + (0x2F55, 'M', '火'), + (0x2F56, 'M', '爪'), + (0x2F57, 'M', '父'), + (0x2F58, 'M', '爻'), + (0x2F59, 'M', '爿'), + (0x2F5A, 'M', '片'), + (0x2F5B, 'M', '牙'), + (0x2F5C, 'M', '牛'), + (0x2F5D, 'M', '犬'), + (0x2F5E, 'M', '玄'), + (0x2F5F, 'M', '玉'), + (0x2F60, 'M', '瓜'), + (0x2F61, 'M', '瓦'), + (0x2F62, 'M', '甘'), + (0x2F63, 'M', '生'), + (0x2F64, 'M', '用'), + (0x2F65, 'M', '田'), + (0x2F66, 'M', '疋'), + (0x2F67, 'M', '疒'), + (0x2F68, 'M', '癶'), + (0x2F69, 'M', '白'), + (0x2F6A, 'M', '皮'), + (0x2F6B, 'M', '皿'), + (0x2F6C, 'M', '目'), + (0x2F6D, 'M', '矛'), + (0x2F6E, 'M', '矢'), + (0x2F6F, 'M', '石'), + (0x2F70, 'M', '示'), + (0x2F71, 'M', '禸'), + (0x2F72, 'M', '禾'), + (0x2F73, 'M', '穴'), + (0x2F74, 'M', '立'), + (0x2F75, 'M', '竹'), + (0x2F76, 'M', '米'), + (0x2F77, 'M', '糸'), + (0x2F78, 'M', '缶'), + (0x2F79, 'M', '网'), + ] + +def _seg_28() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F7A, 'M', '羊'), + (0x2F7B, 'M', '羽'), + (0x2F7C, 'M', '老'), + (0x2F7D, 'M', '而'), + (0x2F7E, 'M', '耒'), + (0x2F7F, 'M', '耳'), + (0x2F80, 'M', '聿'), + (0x2F81, 'M', '肉'), + (0x2F82, 'M', '臣'), + (0x2F83, 'M', '自'), + (0x2F84, 'M', '至'), + (0x2F85, 'M', '臼'), + (0x2F86, 'M', '舌'), + (0x2F87, 'M', '舛'), + (0x2F88, 'M', '舟'), + (0x2F89, 'M', '艮'), + (0x2F8A, 'M', '色'), + (0x2F8B, 'M', '艸'), + (0x2F8C, 'M', '虍'), + (0x2F8D, 'M', '虫'), + (0x2F8E, 'M', '血'), + (0x2F8F, 'M', '行'), + (0x2F90, 'M', '衣'), + (0x2F91, 'M', '襾'), + (0x2F92, 'M', '見'), + (0x2F93, 'M', '角'), + (0x2F94, 'M', '言'), + (0x2F95, 'M', '谷'), + (0x2F96, 'M', '豆'), + (0x2F97, 'M', '豕'), + (0x2F98, 'M', '豸'), + (0x2F99, 'M', '貝'), + (0x2F9A, 'M', '赤'), + (0x2F9B, 'M', '走'), + (0x2F9C, 'M', '足'), + (0x2F9D, 'M', '身'), + (0x2F9E, 'M', '車'), + (0x2F9F, 'M', '辛'), + (0x2FA0, 'M', '辰'), + (0x2FA1, 'M', '辵'), + (0x2FA2, 'M', '邑'), + (0x2FA3, 'M', '酉'), + (0x2FA4, 'M', '釆'), + (0x2FA5, 'M', '里'), + (0x2FA6, 'M', '金'), + (0x2FA7, 'M', '長'), + (0x2FA8, 'M', '門'), + (0x2FA9, 'M', '阜'), + (0x2FAA, 'M', '隶'), + (0x2FAB, 'M', '隹'), + (0x2FAC, 'M', '雨'), + (0x2FAD, 'M', '靑'), + (0x2FAE, 'M', '非'), + (0x2FAF, 'M', '面'), + (0x2FB0, 'M', '革'), + (0x2FB1, 'M', '韋'), + (0x2FB2, 'M', '韭'), + (0x2FB3, 'M', '音'), + (0x2FB4, 'M', '頁'), + (0x2FB5, 'M', '風'), + (0x2FB6, 'M', '飛'), + (0x2FB7, 'M', '食'), + (0x2FB8, 'M', '首'), + (0x2FB9, 'M', '香'), + (0x2FBA, 'M', '馬'), + (0x2FBB, 'M', '骨'), + (0x2FBC, 'M', '高'), + (0x2FBD, 'M', '髟'), + (0x2FBE, 'M', '鬥'), + (0x2FBF, 'M', '鬯'), + (0x2FC0, 'M', '鬲'), + (0x2FC1, 'M', '鬼'), + (0x2FC2, 'M', '魚'), + (0x2FC3, 'M', '鳥'), + (0x2FC4, 'M', '鹵'), + (0x2FC5, 'M', '鹿'), + (0x2FC6, 'M', '麥'), + (0x2FC7, 'M', '麻'), + (0x2FC8, 'M', '黃'), + (0x2FC9, 'M', '黍'), + (0x2FCA, 'M', '黑'), + (0x2FCB, 'M', '黹'), + (0x2FCC, 'M', '黽'), + (0x2FCD, 'M', '鼎'), + (0x2FCE, 'M', '鼓'), + (0x2FCF, 'M', '鼠'), + (0x2FD0, 'M', '鼻'), + (0x2FD1, 'M', '齊'), + (0x2FD2, 'M', '齒'), + (0x2FD3, 'M', '龍'), + (0x2FD4, 'M', '龜'), + (0x2FD5, 'M', '龠'), + (0x2FD6, 'X'), + (0x3000, '3', ' '), + (0x3001, 'V'), + (0x3002, 'M', '.'), + (0x3003, 'V'), + (0x3036, 'M', '〒'), + (0x3037, 'V'), + (0x3038, 'M', '十'), + ] + +def _seg_29() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3039, 'M', '卄'), + (0x303A, 'M', '卅'), + (0x303B, 'V'), + (0x3040, 'X'), + (0x3041, 'V'), + (0x3097, 'X'), + (0x3099, 'V'), + (0x309B, '3', ' ゙'), + (0x309C, '3', ' ゚'), + (0x309D, 'V'), + (0x309F, 'M', 'より'), + (0x30A0, 'V'), + (0x30FF, 'M', 'コト'), + (0x3100, 'X'), + (0x3105, 'V'), + (0x3130, 'X'), + (0x3131, 'M', 'ᄀ'), + (0x3132, 'M', 'ᄁ'), + (0x3133, 'M', 'ᆪ'), + (0x3134, 'M', 'ᄂ'), + (0x3135, 'M', 'ᆬ'), + (0x3136, 'M', 'ᆭ'), + (0x3137, 'M', 'ᄃ'), + (0x3138, 'M', 'ᄄ'), + (0x3139, 'M', 'ᄅ'), + (0x313A, 'M', 'ᆰ'), + (0x313B, 'M', 'ᆱ'), + (0x313C, 'M', 'ᆲ'), + (0x313D, 'M', 'ᆳ'), + (0x313E, 'M', 'ᆴ'), + (0x313F, 'M', 'ᆵ'), + (0x3140, 'M', 'ᄚ'), + (0x3141, 'M', 'ᄆ'), + (0x3142, 'M', 'ᄇ'), + (0x3143, 'M', 'ᄈ'), + (0x3144, 'M', 'ᄡ'), + (0x3145, 'M', 'ᄉ'), + (0x3146, 'M', 'ᄊ'), + (0x3147, 'M', 'ᄋ'), + (0x3148, 'M', 'ᄌ'), + (0x3149, 'M', 'ᄍ'), + (0x314A, 'M', 'ᄎ'), + (0x314B, 'M', 'ᄏ'), + (0x314C, 'M', 'ᄐ'), + (0x314D, 'M', 'ᄑ'), + (0x314E, 'M', 'ᄒ'), + (0x314F, 'M', 'ᅡ'), + (0x3150, 'M', 'ᅢ'), + (0x3151, 'M', 'ᅣ'), + (0x3152, 'M', 'ᅤ'), + (0x3153, 'M', 'ᅥ'), + (0x3154, 'M', 'ᅦ'), + (0x3155, 'M', 'ᅧ'), + (0x3156, 'M', 'ᅨ'), + (0x3157, 'M', 'ᅩ'), + (0x3158, 'M', 'ᅪ'), + (0x3159, 'M', 'ᅫ'), + (0x315A, 'M', 'ᅬ'), + (0x315B, 'M', 'ᅭ'), + (0x315C, 'M', 'ᅮ'), + (0x315D, 'M', 'ᅯ'), + (0x315E, 'M', 'ᅰ'), + (0x315F, 'M', 'ᅱ'), + (0x3160, 'M', 'ᅲ'), + (0x3161, 'M', 'ᅳ'), + (0x3162, 'M', 'ᅴ'), + (0x3163, 'M', 'ᅵ'), + (0x3164, 'X'), + (0x3165, 'M', 'ᄔ'), + (0x3166, 'M', 'ᄕ'), + (0x3167, 'M', 'ᇇ'), + (0x3168, 'M', 'ᇈ'), + (0x3169, 'M', 'ᇌ'), + (0x316A, 'M', 'ᇎ'), + (0x316B, 'M', 'ᇓ'), + (0x316C, 'M', 'ᇗ'), + (0x316D, 'M', 'ᇙ'), + (0x316E, 'M', 'ᄜ'), + (0x316F, 'M', 'ᇝ'), + (0x3170, 'M', 'ᇟ'), + (0x3171, 'M', 'ᄝ'), + (0x3172, 'M', 'ᄞ'), + (0x3173, 'M', 'ᄠ'), + (0x3174, 'M', 'ᄢ'), + (0x3175, 'M', 'ᄣ'), + (0x3176, 'M', 'ᄧ'), + (0x3177, 'M', 'ᄩ'), + (0x3178, 'M', 'ᄫ'), + (0x3179, 'M', 'ᄬ'), + (0x317A, 'M', 'ᄭ'), + (0x317B, 'M', 'ᄮ'), + (0x317C, 'M', 'ᄯ'), + (0x317D, 'M', 'ᄲ'), + (0x317E, 'M', 'ᄶ'), + (0x317F, 'M', 'ᅀ'), + (0x3180, 'M', 'ᅇ'), + (0x3181, 'M', 'ᅌ'), + (0x3182, 'M', 'ᇱ'), + (0x3183, 'M', 'ᇲ'), + (0x3184, 'M', 'ᅗ'), + ] + +def _seg_30() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3185, 'M', 'ᅘ'), + (0x3186, 'M', 'ᅙ'), + (0x3187, 'M', 'ᆄ'), + (0x3188, 'M', 'ᆅ'), + (0x3189, 'M', 'ᆈ'), + (0x318A, 'M', 'ᆑ'), + (0x318B, 'M', 'ᆒ'), + (0x318C, 'M', 'ᆔ'), + (0x318D, 'M', 'ᆞ'), + (0x318E, 'M', 'ᆡ'), + (0x318F, 'X'), + (0x3190, 'V'), + (0x3192, 'M', '一'), + (0x3193, 'M', '二'), + (0x3194, 'M', '三'), + (0x3195, 'M', '四'), + (0x3196, 'M', '上'), + (0x3197, 'M', '中'), + (0x3198, 'M', '下'), + (0x3199, 'M', '甲'), + (0x319A, 'M', '乙'), + (0x319B, 'M', '丙'), + (0x319C, 'M', '丁'), + (0x319D, 'M', '天'), + (0x319E, 'M', '地'), + (0x319F, 'M', '人'), + (0x31A0, 'V'), + (0x31E4, 'X'), + (0x31F0, 'V'), + (0x3200, '3', '(ᄀ)'), + (0x3201, '3', '(ᄂ)'), + (0x3202, '3', '(ᄃ)'), + (0x3203, '3', '(ᄅ)'), + (0x3204, '3', '(ᄆ)'), + (0x3205, '3', '(ᄇ)'), + (0x3206, '3', '(ᄉ)'), + (0x3207, '3', '(ᄋ)'), + (0x3208, '3', '(ᄌ)'), + (0x3209, '3', '(ᄎ)'), + (0x320A, '3', '(ᄏ)'), + (0x320B, '3', '(ᄐ)'), + (0x320C, '3', '(ᄑ)'), + (0x320D, '3', '(ᄒ)'), + (0x320E, '3', '(가)'), + (0x320F, '3', '(나)'), + (0x3210, '3', '(다)'), + (0x3211, '3', '(라)'), + (0x3212, '3', '(마)'), + (0x3213, '3', '(바)'), + (0x3214, '3', '(사)'), + (0x3215, '3', '(아)'), + (0x3216, '3', '(자)'), + (0x3217, '3', '(차)'), + (0x3218, '3', '(카)'), + (0x3219, '3', '(타)'), + (0x321A, '3', '(파)'), + (0x321B, '3', '(하)'), + (0x321C, '3', '(주)'), + (0x321D, '3', '(오전)'), + (0x321E, '3', '(오후)'), + (0x321F, 'X'), + (0x3220, '3', '(一)'), + (0x3221, '3', '(二)'), + (0x3222, '3', '(三)'), + (0x3223, '3', '(四)'), + (0x3224, '3', '(五)'), + (0x3225, '3', '(六)'), + (0x3226, '3', '(七)'), + (0x3227, '3', '(八)'), + (0x3228, '3', '(九)'), + (0x3229, '3', '(十)'), + (0x322A, '3', '(月)'), + (0x322B, '3', '(火)'), + (0x322C, '3', '(水)'), + (0x322D, '3', '(木)'), + (0x322E, '3', '(金)'), + (0x322F, '3', '(土)'), + (0x3230, '3', '(日)'), + (0x3231, '3', '(株)'), + (0x3232, '3', '(有)'), + (0x3233, '3', '(社)'), + (0x3234, '3', '(名)'), + (0x3235, '3', '(特)'), + (0x3236, '3', '(財)'), + (0x3237, '3', '(祝)'), + (0x3238, '3', '(労)'), + (0x3239, '3', '(代)'), + (0x323A, '3', '(呼)'), + (0x323B, '3', '(学)'), + (0x323C, '3', '(監)'), + (0x323D, '3', '(企)'), + (0x323E, '3', '(資)'), + (0x323F, '3', '(協)'), + (0x3240, '3', '(祭)'), + (0x3241, '3', '(休)'), + (0x3242, '3', '(自)'), + (0x3243, '3', '(至)'), + (0x3244, 'M', '問'), + (0x3245, 'M', '幼'), + (0x3246, 'M', '文'), + ] + +def _seg_31() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3247, 'M', '箏'), + (0x3248, 'V'), + (0x3250, 'M', 'pte'), + (0x3251, 'M', '21'), + (0x3252, 'M', '22'), + (0x3253, 'M', '23'), + (0x3254, 'M', '24'), + (0x3255, 'M', '25'), + (0x3256, 'M', '26'), + (0x3257, 'M', '27'), + (0x3258, 'M', '28'), + (0x3259, 'M', '29'), + (0x325A, 'M', '30'), + (0x325B, 'M', '31'), + (0x325C, 'M', '32'), + (0x325D, 'M', '33'), + (0x325E, 'M', '34'), + (0x325F, 'M', '35'), + (0x3260, 'M', 'ᄀ'), + (0x3261, 'M', 'ᄂ'), + (0x3262, 'M', 'ᄃ'), + (0x3263, 'M', 'ᄅ'), + (0x3264, 'M', 'ᄆ'), + (0x3265, 'M', 'ᄇ'), + (0x3266, 'M', 'ᄉ'), + (0x3267, 'M', 'ᄋ'), + (0x3268, 'M', 'ᄌ'), + (0x3269, 'M', 'ᄎ'), + (0x326A, 'M', 'ᄏ'), + (0x326B, 'M', 'ᄐ'), + (0x326C, 'M', 'ᄑ'), + (0x326D, 'M', 'ᄒ'), + (0x326E, 'M', '가'), + (0x326F, 'M', '나'), + (0x3270, 'M', '다'), + (0x3271, 'M', '라'), + (0x3272, 'M', '마'), + (0x3273, 'M', '바'), + (0x3274, 'M', '사'), + (0x3275, 'M', '아'), + (0x3276, 'M', '자'), + (0x3277, 'M', '차'), + (0x3278, 'M', '카'), + (0x3279, 'M', '타'), + (0x327A, 'M', '파'), + (0x327B, 'M', '하'), + (0x327C, 'M', '참고'), + (0x327D, 'M', '주의'), + (0x327E, 'M', '우'), + (0x327F, 'V'), + (0x3280, 'M', '一'), + (0x3281, 'M', '二'), + (0x3282, 'M', '三'), + (0x3283, 'M', '四'), + (0x3284, 'M', '五'), + (0x3285, 'M', '六'), + (0x3286, 'M', '七'), + (0x3287, 'M', '八'), + (0x3288, 'M', '九'), + (0x3289, 'M', '十'), + (0x328A, 'M', '月'), + (0x328B, 'M', '火'), + (0x328C, 'M', '水'), + (0x328D, 'M', '木'), + (0x328E, 'M', '金'), + (0x328F, 'M', '土'), + (0x3290, 'M', '日'), + (0x3291, 'M', '株'), + (0x3292, 'M', '有'), + (0x3293, 'M', '社'), + (0x3294, 'M', '名'), + (0x3295, 'M', '特'), + (0x3296, 'M', '財'), + (0x3297, 'M', '祝'), + (0x3298, 'M', '労'), + (0x3299, 'M', '秘'), + (0x329A, 'M', '男'), + (0x329B, 'M', '女'), + (0x329C, 'M', '適'), + (0x329D, 'M', '優'), + (0x329E, 'M', '印'), + (0x329F, 'M', '注'), + (0x32A0, 'M', '項'), + (0x32A1, 'M', '休'), + (0x32A2, 'M', '写'), + (0x32A3, 'M', '正'), + (0x32A4, 'M', '上'), + (0x32A5, 'M', '中'), + (0x32A6, 'M', '下'), + (0x32A7, 'M', '左'), + (0x32A8, 'M', '右'), + (0x32A9, 'M', '医'), + (0x32AA, 'M', '宗'), + (0x32AB, 'M', '学'), + (0x32AC, 'M', '監'), + (0x32AD, 'M', '企'), + (0x32AE, 'M', '資'), + (0x32AF, 'M', '協'), + (0x32B0, 'M', '夜'), + (0x32B1, 'M', '36'), + ] + +def _seg_32() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x32B2, 'M', '37'), + (0x32B3, 'M', '38'), + (0x32B4, 'M', '39'), + (0x32B5, 'M', '40'), + (0x32B6, 'M', '41'), + (0x32B7, 'M', '42'), + (0x32B8, 'M', '43'), + (0x32B9, 'M', '44'), + (0x32BA, 'M', '45'), + (0x32BB, 'M', '46'), + (0x32BC, 'M', '47'), + (0x32BD, 'M', '48'), + (0x32BE, 'M', '49'), + (0x32BF, 'M', '50'), + (0x32C0, 'M', '1月'), + (0x32C1, 'M', '2月'), + (0x32C2, 'M', '3月'), + (0x32C3, 'M', '4月'), + (0x32C4, 'M', '5月'), + (0x32C5, 'M', '6月'), + (0x32C6, 'M', '7月'), + (0x32C7, 'M', '8月'), + (0x32C8, 'M', '9月'), + (0x32C9, 'M', '10月'), + (0x32CA, 'M', '11月'), + (0x32CB, 'M', '12月'), + (0x32CC, 'M', 'hg'), + (0x32CD, 'M', 'erg'), + (0x32CE, 'M', 'ev'), + (0x32CF, 'M', 'ltd'), + (0x32D0, 'M', 'ア'), + (0x32D1, 'M', 'イ'), + (0x32D2, 'M', 'ウ'), + (0x32D3, 'M', 'エ'), + (0x32D4, 'M', 'オ'), + (0x32D5, 'M', 'カ'), + (0x32D6, 'M', 'キ'), + (0x32D7, 'M', 'ク'), + (0x32D8, 'M', 'ケ'), + (0x32D9, 'M', 'コ'), + (0x32DA, 'M', 'サ'), + (0x32DB, 'M', 'シ'), + (0x32DC, 'M', 'ス'), + (0x32DD, 'M', 'セ'), + (0x32DE, 'M', 'ソ'), + (0x32DF, 'M', 'タ'), + (0x32E0, 'M', 'チ'), + (0x32E1, 'M', 'ツ'), + (0x32E2, 'M', 'テ'), + (0x32E3, 'M', 'ト'), + (0x32E4, 'M', 'ナ'), + (0x32E5, 'M', 'ニ'), + (0x32E6, 'M', 'ヌ'), + (0x32E7, 'M', 'ネ'), + (0x32E8, 'M', 'ノ'), + (0x32E9, 'M', 'ハ'), + (0x32EA, 'M', 'ヒ'), + (0x32EB, 'M', 'フ'), + (0x32EC, 'M', 'ヘ'), + (0x32ED, 'M', 'ホ'), + (0x32EE, 'M', 'マ'), + (0x32EF, 'M', 'ミ'), + (0x32F0, 'M', 'ム'), + (0x32F1, 'M', 'メ'), + (0x32F2, 'M', 'モ'), + (0x32F3, 'M', 'ヤ'), + (0x32F4, 'M', 'ユ'), + (0x32F5, 'M', 'ヨ'), + (0x32F6, 'M', 'ラ'), + (0x32F7, 'M', 'リ'), + (0x32F8, 'M', 'ル'), + (0x32F9, 'M', 'レ'), + (0x32FA, 'M', 'ロ'), + (0x32FB, 'M', 'ワ'), + (0x32FC, 'M', 'ヰ'), + (0x32FD, 'M', 'ヱ'), + (0x32FE, 'M', 'ヲ'), + (0x32FF, 'M', '令和'), + (0x3300, 'M', 'アパート'), + (0x3301, 'M', 'アルファ'), + (0x3302, 'M', 'アンペア'), + (0x3303, 'M', 'アール'), + (0x3304, 'M', 'イニング'), + (0x3305, 'M', 'インチ'), + (0x3306, 'M', 'ウォン'), + (0x3307, 'M', 'エスクード'), + (0x3308, 'M', 'エーカー'), + (0x3309, 'M', 'オンス'), + (0x330A, 'M', 'オーム'), + (0x330B, 'M', 'カイリ'), + (0x330C, 'M', 'カラット'), + (0x330D, 'M', 'カロリー'), + (0x330E, 'M', 'ガロン'), + (0x330F, 'M', 'ガンマ'), + (0x3310, 'M', 'ギガ'), + (0x3311, 'M', 'ギニー'), + (0x3312, 'M', 'キュリー'), + (0x3313, 'M', 'ギルダー'), + (0x3314, 'M', 'キロ'), + (0x3315, 'M', 'キログラム'), + ] + +def _seg_33() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x3316, 'M', 'キロメートル'), + (0x3317, 'M', 'キロワット'), + (0x3318, 'M', 'グラム'), + (0x3319, 'M', 'グラムトン'), + (0x331A, 'M', 'クルゼイロ'), + (0x331B, 'M', 'クローネ'), + (0x331C, 'M', 'ケース'), + (0x331D, 'M', 'コルナ'), + (0x331E, 'M', 'コーポ'), + (0x331F, 'M', 'サイクル'), + (0x3320, 'M', 'サンチーム'), + (0x3321, 'M', 'シリング'), + (0x3322, 'M', 'センチ'), + (0x3323, 'M', 'セント'), + (0x3324, 'M', 'ダース'), + (0x3325, 'M', 'デシ'), + (0x3326, 'M', 'ドル'), + (0x3327, 'M', 'トン'), + (0x3328, 'M', 'ナノ'), + (0x3329, 'M', 'ノット'), + (0x332A, 'M', 'ハイツ'), + (0x332B, 'M', 'パーセント'), + (0x332C, 'M', 'パーツ'), + (0x332D, 'M', 'バーレル'), + (0x332E, 'M', 'ピアストル'), + (0x332F, 'M', 'ピクル'), + (0x3330, 'M', 'ピコ'), + (0x3331, 'M', 'ビル'), + (0x3332, 'M', 'ファラッド'), + (0x3333, 'M', 'フィート'), + (0x3334, 'M', 'ブッシェル'), + (0x3335, 'M', 'フラン'), + (0x3336, 'M', 'ヘクタール'), + (0x3337, 'M', 'ペソ'), + (0x3338, 'M', 'ペニヒ'), + (0x3339, 'M', 'ヘルツ'), + (0x333A, 'M', 'ペンス'), + (0x333B, 'M', 'ページ'), + (0x333C, 'M', 'ベータ'), + (0x333D, 'M', 'ポイント'), + (0x333E, 'M', 'ボルト'), + (0x333F, 'M', 'ホン'), + (0x3340, 'M', 'ポンド'), + (0x3341, 'M', 'ホール'), + (0x3342, 'M', 'ホーン'), + (0x3343, 'M', 'マイクロ'), + (0x3344, 'M', 'マイル'), + (0x3345, 'M', 'マッハ'), + (0x3346, 'M', 'マルク'), + (0x3347, 'M', 'マンション'), + (0x3348, 'M', 'ミクロン'), + (0x3349, 'M', 'ミリ'), + (0x334A, 'M', 'ミリバール'), + (0x334B, 'M', 'メガ'), + (0x334C, 'M', 'メガトン'), + (0x334D, 'M', 'メートル'), + (0x334E, 'M', 'ヤード'), + (0x334F, 'M', 'ヤール'), + (0x3350, 'M', 'ユアン'), + (0x3351, 'M', 'リットル'), + (0x3352, 'M', 'リラ'), + (0x3353, 'M', 'ルピー'), + (0x3354, 'M', 'ルーブル'), + (0x3355, 'M', 'レム'), + (0x3356, 'M', 'レントゲン'), + (0x3357, 'M', 'ワット'), + (0x3358, 'M', '0点'), + (0x3359, 'M', '1点'), + (0x335A, 'M', '2点'), + (0x335B, 'M', '3点'), + (0x335C, 'M', '4点'), + (0x335D, 'M', '5点'), + (0x335E, 'M', '6点'), + (0x335F, 'M', '7点'), + (0x3360, 'M', '8点'), + (0x3361, 'M', '9点'), + (0x3362, 'M', '10点'), + (0x3363, 'M', '11点'), + (0x3364, 'M', '12点'), + (0x3365, 'M', '13点'), + (0x3366, 'M', '14点'), + (0x3367, 'M', '15点'), + (0x3368, 'M', '16点'), + (0x3369, 'M', '17点'), + (0x336A, 'M', '18点'), + (0x336B, 'M', '19点'), + (0x336C, 'M', '20点'), + (0x336D, 'M', '21点'), + (0x336E, 'M', '22点'), + (0x336F, 'M', '23点'), + (0x3370, 'M', '24点'), + (0x3371, 'M', 'hpa'), + (0x3372, 'M', 'da'), + (0x3373, 'M', 'au'), + (0x3374, 'M', 'bar'), + (0x3375, 'M', 'ov'), + (0x3376, 'M', 'pc'), + (0x3377, 'M', 'dm'), + (0x3378, 'M', 'dm2'), + (0x3379, 'M', 'dm3'), + ] + +def _seg_34() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x337A, 'M', 'iu'), + (0x337B, 'M', '平成'), + (0x337C, 'M', '昭和'), + (0x337D, 'M', '大正'), + (0x337E, 'M', '明治'), + (0x337F, 'M', '株式会社'), + (0x3380, 'M', 'pa'), + (0x3381, 'M', 'na'), + (0x3382, 'M', 'μa'), + (0x3383, 'M', 'ma'), + (0x3384, 'M', 'ka'), + (0x3385, 'M', 'kb'), + (0x3386, 'M', 'mb'), + (0x3387, 'M', 'gb'), + (0x3388, 'M', 'cal'), + (0x3389, 'M', 'kcal'), + (0x338A, 'M', 'pf'), + (0x338B, 'M', 'nf'), + (0x338C, 'M', 'μf'), + (0x338D, 'M', 'μg'), + (0x338E, 'M', 'mg'), + (0x338F, 'M', 'kg'), + (0x3390, 'M', 'hz'), + (0x3391, 'M', 'khz'), + (0x3392, 'M', 'mhz'), + (0x3393, 'M', 'ghz'), + (0x3394, 'M', 'thz'), + (0x3395, 'M', 'μl'), + (0x3396, 'M', 'ml'), + (0x3397, 'M', 'dl'), + (0x3398, 'M', 'kl'), + (0x3399, 'M', 'fm'), + (0x339A, 'M', 'nm'), + (0x339B, 'M', 'μm'), + (0x339C, 'M', 'mm'), + (0x339D, 'M', 'cm'), + (0x339E, 'M', 'km'), + (0x339F, 'M', 'mm2'), + (0x33A0, 'M', 'cm2'), + (0x33A1, 'M', 'm2'), + (0x33A2, 'M', 'km2'), + (0x33A3, 'M', 'mm3'), + (0x33A4, 'M', 'cm3'), + (0x33A5, 'M', 'm3'), + (0x33A6, 'M', 'km3'), + (0x33A7, 'M', 'm∕s'), + (0x33A8, 'M', 'm∕s2'), + (0x33A9, 'M', 'pa'), + (0x33AA, 'M', 'kpa'), + (0x33AB, 'M', 'mpa'), + (0x33AC, 'M', 'gpa'), + (0x33AD, 'M', 'rad'), + (0x33AE, 'M', 'rad∕s'), + (0x33AF, 'M', 'rad∕s2'), + (0x33B0, 'M', 'ps'), + (0x33B1, 'M', 'ns'), + (0x33B2, 'M', 'μs'), + (0x33B3, 'M', 'ms'), + (0x33B4, 'M', 'pv'), + (0x33B5, 'M', 'nv'), + (0x33B6, 'M', 'μv'), + (0x33B7, 'M', 'mv'), + (0x33B8, 'M', 'kv'), + (0x33B9, 'M', 'mv'), + (0x33BA, 'M', 'pw'), + (0x33BB, 'M', 'nw'), + (0x33BC, 'M', 'μw'), + (0x33BD, 'M', 'mw'), + (0x33BE, 'M', 'kw'), + (0x33BF, 'M', 'mw'), + (0x33C0, 'M', 'kω'), + (0x33C1, 'M', 'mω'), + (0x33C2, 'X'), + (0x33C3, 'M', 'bq'), + (0x33C4, 'M', 'cc'), + (0x33C5, 'M', 'cd'), + (0x33C6, 'M', 'c∕kg'), + (0x33C7, 'X'), + (0x33C8, 'M', 'db'), + (0x33C9, 'M', 'gy'), + (0x33CA, 'M', 'ha'), + (0x33CB, 'M', 'hp'), + (0x33CC, 'M', 'in'), + (0x33CD, 'M', 'kk'), + (0x33CE, 'M', 'km'), + (0x33CF, 'M', 'kt'), + (0x33D0, 'M', 'lm'), + (0x33D1, 'M', 'ln'), + (0x33D2, 'M', 'log'), + (0x33D3, 'M', 'lx'), + (0x33D4, 'M', 'mb'), + (0x33D5, 'M', 'mil'), + (0x33D6, 'M', 'mol'), + (0x33D7, 'M', 'ph'), + (0x33D8, 'X'), + (0x33D9, 'M', 'ppm'), + (0x33DA, 'M', 'pr'), + (0x33DB, 'M', 'sr'), + (0x33DC, 'M', 'sv'), + (0x33DD, 'M', 'wb'), + ] + +def _seg_35() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x33DE, 'M', 'v∕m'), + (0x33DF, 'M', 'a∕m'), + (0x33E0, 'M', '1日'), + (0x33E1, 'M', '2日'), + (0x33E2, 'M', '3日'), + (0x33E3, 'M', '4日'), + (0x33E4, 'M', '5日'), + (0x33E5, 'M', '6日'), + (0x33E6, 'M', '7日'), + (0x33E7, 'M', '8日'), + (0x33E8, 'M', '9日'), + (0x33E9, 'M', '10日'), + (0x33EA, 'M', '11日'), + (0x33EB, 'M', '12日'), + (0x33EC, 'M', '13日'), + (0x33ED, 'M', '14日'), + (0x33EE, 'M', '15日'), + (0x33EF, 'M', '16日'), + (0x33F0, 'M', '17日'), + (0x33F1, 'M', '18日'), + (0x33F2, 'M', '19日'), + (0x33F3, 'M', '20日'), + (0x33F4, 'M', '21日'), + (0x33F5, 'M', '22日'), + (0x33F6, 'M', '23日'), + (0x33F7, 'M', '24日'), + (0x33F8, 'M', '25日'), + (0x33F9, 'M', '26日'), + (0x33FA, 'M', '27日'), + (0x33FB, 'M', '28日'), + (0x33FC, 'M', '29日'), + (0x33FD, 'M', '30日'), + (0x33FE, 'M', '31日'), + (0x33FF, 'M', 'gal'), + (0x3400, 'V'), + (0xA48D, 'X'), + (0xA490, 'V'), + (0xA4C7, 'X'), + (0xA4D0, 'V'), + (0xA62C, 'X'), + (0xA640, 'M', 'ꙁ'), + (0xA641, 'V'), + (0xA642, 'M', 'ꙃ'), + (0xA643, 'V'), + (0xA644, 'M', 'ꙅ'), + (0xA645, 'V'), + (0xA646, 'M', 'ꙇ'), + (0xA647, 'V'), + (0xA648, 'M', 'ꙉ'), + (0xA649, 'V'), + (0xA64A, 'M', 'ꙋ'), + (0xA64B, 'V'), + (0xA64C, 'M', 'ꙍ'), + (0xA64D, 'V'), + (0xA64E, 'M', 'ꙏ'), + (0xA64F, 'V'), + (0xA650, 'M', 'ꙑ'), + (0xA651, 'V'), + (0xA652, 'M', 'ꙓ'), + (0xA653, 'V'), + (0xA654, 'M', 'ꙕ'), + (0xA655, 'V'), + (0xA656, 'M', 'ꙗ'), + (0xA657, 'V'), + (0xA658, 'M', 'ꙙ'), + (0xA659, 'V'), + (0xA65A, 'M', 'ꙛ'), + (0xA65B, 'V'), + (0xA65C, 'M', 'ꙝ'), + (0xA65D, 'V'), + (0xA65E, 'M', 'ꙟ'), + (0xA65F, 'V'), + (0xA660, 'M', 'ꙡ'), + (0xA661, 'V'), + (0xA662, 'M', 'ꙣ'), + (0xA663, 'V'), + (0xA664, 'M', 'ꙥ'), + (0xA665, 'V'), + (0xA666, 'M', 'ꙧ'), + (0xA667, 'V'), + (0xA668, 'M', 'ꙩ'), + (0xA669, 'V'), + (0xA66A, 'M', 'ꙫ'), + (0xA66B, 'V'), + (0xA66C, 'M', 'ꙭ'), + (0xA66D, 'V'), + (0xA680, 'M', 'ꚁ'), + (0xA681, 'V'), + (0xA682, 'M', 'ꚃ'), + (0xA683, 'V'), + (0xA684, 'M', 'ꚅ'), + (0xA685, 'V'), + (0xA686, 'M', 'ꚇ'), + (0xA687, 'V'), + (0xA688, 'M', 'ꚉ'), + (0xA689, 'V'), + (0xA68A, 'M', 'ꚋ'), + (0xA68B, 'V'), + (0xA68C, 'M', 'ꚍ'), + (0xA68D, 'V'), + ] + +def _seg_36() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA68E, 'M', 'ꚏ'), + (0xA68F, 'V'), + (0xA690, 'M', 'ꚑ'), + (0xA691, 'V'), + (0xA692, 'M', 'ꚓ'), + (0xA693, 'V'), + (0xA694, 'M', 'ꚕ'), + (0xA695, 'V'), + (0xA696, 'M', 'ꚗ'), + (0xA697, 'V'), + (0xA698, 'M', 'ꚙ'), + (0xA699, 'V'), + (0xA69A, 'M', 'ꚛ'), + (0xA69B, 'V'), + (0xA69C, 'M', 'ъ'), + (0xA69D, 'M', 'ь'), + (0xA69E, 'V'), + (0xA6F8, 'X'), + (0xA700, 'V'), + (0xA722, 'M', 'ꜣ'), + (0xA723, 'V'), + (0xA724, 'M', 'ꜥ'), + (0xA725, 'V'), + (0xA726, 'M', 'ꜧ'), + (0xA727, 'V'), + (0xA728, 'M', 'ꜩ'), + (0xA729, 'V'), + (0xA72A, 'M', 'ꜫ'), + (0xA72B, 'V'), + (0xA72C, 'M', 'ꜭ'), + (0xA72D, 'V'), + (0xA72E, 'M', 'ꜯ'), + (0xA72F, 'V'), + (0xA732, 'M', 'ꜳ'), + (0xA733, 'V'), + (0xA734, 'M', 'ꜵ'), + (0xA735, 'V'), + (0xA736, 'M', 'ꜷ'), + (0xA737, 'V'), + (0xA738, 'M', 'ꜹ'), + (0xA739, 'V'), + (0xA73A, 'M', 'ꜻ'), + (0xA73B, 'V'), + (0xA73C, 'M', 'ꜽ'), + (0xA73D, 'V'), + (0xA73E, 'M', 'ꜿ'), + (0xA73F, 'V'), + (0xA740, 'M', 'ꝁ'), + (0xA741, 'V'), + (0xA742, 'M', 'ꝃ'), + (0xA743, 'V'), + (0xA744, 'M', 'ꝅ'), + (0xA745, 'V'), + (0xA746, 'M', 'ꝇ'), + (0xA747, 'V'), + (0xA748, 'M', 'ꝉ'), + (0xA749, 'V'), + (0xA74A, 'M', 'ꝋ'), + (0xA74B, 'V'), + (0xA74C, 'M', 'ꝍ'), + (0xA74D, 'V'), + (0xA74E, 'M', 'ꝏ'), + (0xA74F, 'V'), + (0xA750, 'M', 'ꝑ'), + (0xA751, 'V'), + (0xA752, 'M', 'ꝓ'), + (0xA753, 'V'), + (0xA754, 'M', 'ꝕ'), + (0xA755, 'V'), + (0xA756, 'M', 'ꝗ'), + (0xA757, 'V'), + (0xA758, 'M', 'ꝙ'), + (0xA759, 'V'), + (0xA75A, 'M', 'ꝛ'), + (0xA75B, 'V'), + (0xA75C, 'M', 'ꝝ'), + (0xA75D, 'V'), + (0xA75E, 'M', 'ꝟ'), + (0xA75F, 'V'), + (0xA760, 'M', 'ꝡ'), + (0xA761, 'V'), + (0xA762, 'M', 'ꝣ'), + (0xA763, 'V'), + (0xA764, 'M', 'ꝥ'), + (0xA765, 'V'), + (0xA766, 'M', 'ꝧ'), + (0xA767, 'V'), + (0xA768, 'M', 'ꝩ'), + (0xA769, 'V'), + (0xA76A, 'M', 'ꝫ'), + (0xA76B, 'V'), + (0xA76C, 'M', 'ꝭ'), + (0xA76D, 'V'), + (0xA76E, 'M', 'ꝯ'), + (0xA76F, 'V'), + (0xA770, 'M', 'ꝯ'), + (0xA771, 'V'), + (0xA779, 'M', 'ꝺ'), + (0xA77A, 'V'), + (0xA77B, 'M', 'ꝼ'), + ] + +def _seg_37() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA77C, 'V'), + (0xA77D, 'M', 'ᵹ'), + (0xA77E, 'M', 'ꝿ'), + (0xA77F, 'V'), + (0xA780, 'M', 'ꞁ'), + (0xA781, 'V'), + (0xA782, 'M', 'ꞃ'), + (0xA783, 'V'), + (0xA784, 'M', 'ꞅ'), + (0xA785, 'V'), + (0xA786, 'M', 'ꞇ'), + (0xA787, 'V'), + (0xA78B, 'M', 'ꞌ'), + (0xA78C, 'V'), + (0xA78D, 'M', 'ɥ'), + (0xA78E, 'V'), + (0xA790, 'M', 'ꞑ'), + (0xA791, 'V'), + (0xA792, 'M', 'ꞓ'), + (0xA793, 'V'), + (0xA796, 'M', 'ꞗ'), + (0xA797, 'V'), + (0xA798, 'M', 'ꞙ'), + (0xA799, 'V'), + (0xA79A, 'M', 'ꞛ'), + (0xA79B, 'V'), + (0xA79C, 'M', 'ꞝ'), + (0xA79D, 'V'), + (0xA79E, 'M', 'ꞟ'), + (0xA79F, 'V'), + (0xA7A0, 'M', 'ꞡ'), + (0xA7A1, 'V'), + (0xA7A2, 'M', 'ꞣ'), + (0xA7A3, 'V'), + (0xA7A4, 'M', 'ꞥ'), + (0xA7A5, 'V'), + (0xA7A6, 'M', 'ꞧ'), + (0xA7A7, 'V'), + (0xA7A8, 'M', 'ꞩ'), + (0xA7A9, 'V'), + (0xA7AA, 'M', 'ɦ'), + (0xA7AB, 'M', 'ɜ'), + (0xA7AC, 'M', 'ɡ'), + (0xA7AD, 'M', 'ɬ'), + (0xA7AE, 'M', 'ɪ'), + (0xA7AF, 'V'), + (0xA7B0, 'M', 'ʞ'), + (0xA7B1, 'M', 'ʇ'), + (0xA7B2, 'M', 'ʝ'), + (0xA7B3, 'M', 'ꭓ'), + (0xA7B4, 'M', 'ꞵ'), + (0xA7B5, 'V'), + (0xA7B6, 'M', 'ꞷ'), + (0xA7B7, 'V'), + (0xA7B8, 'M', 'ꞹ'), + (0xA7B9, 'V'), + (0xA7BA, 'M', 'ꞻ'), + (0xA7BB, 'V'), + (0xA7BC, 'M', 'ꞽ'), + (0xA7BD, 'V'), + (0xA7BE, 'M', 'ꞿ'), + (0xA7BF, 'V'), + (0xA7C0, 'M', 'ꟁ'), + (0xA7C1, 'V'), + (0xA7C2, 'M', 'ꟃ'), + (0xA7C3, 'V'), + (0xA7C4, 'M', 'ꞔ'), + (0xA7C5, 'M', 'ʂ'), + (0xA7C6, 'M', 'ᶎ'), + (0xA7C7, 'M', 'ꟈ'), + (0xA7C8, 'V'), + (0xA7C9, 'M', 'ꟊ'), + (0xA7CA, 'V'), + (0xA7CB, 'X'), + (0xA7D0, 'M', 'ꟑ'), + (0xA7D1, 'V'), + (0xA7D2, 'X'), + (0xA7D3, 'V'), + (0xA7D4, 'X'), + (0xA7D5, 'V'), + (0xA7D6, 'M', 'ꟗ'), + (0xA7D7, 'V'), + (0xA7D8, 'M', 'ꟙ'), + (0xA7D9, 'V'), + (0xA7DA, 'X'), + (0xA7F2, 'M', 'c'), + (0xA7F3, 'M', 'f'), + (0xA7F4, 'M', 'q'), + (0xA7F5, 'M', 'ꟶ'), + (0xA7F6, 'V'), + (0xA7F8, 'M', 'ħ'), + (0xA7F9, 'M', 'œ'), + (0xA7FA, 'V'), + (0xA82D, 'X'), + (0xA830, 'V'), + (0xA83A, 'X'), + (0xA840, 'V'), + (0xA878, 'X'), + (0xA880, 'V'), + (0xA8C6, 'X'), + ] + +def _seg_38() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xA8CE, 'V'), + (0xA8DA, 'X'), + (0xA8E0, 'V'), + (0xA954, 'X'), + (0xA95F, 'V'), + (0xA97D, 'X'), + (0xA980, 'V'), + (0xA9CE, 'X'), + (0xA9CF, 'V'), + (0xA9DA, 'X'), + (0xA9DE, 'V'), + (0xA9FF, 'X'), + (0xAA00, 'V'), + (0xAA37, 'X'), + (0xAA40, 'V'), + (0xAA4E, 'X'), + (0xAA50, 'V'), + (0xAA5A, 'X'), + (0xAA5C, 'V'), + (0xAAC3, 'X'), + (0xAADB, 'V'), + (0xAAF7, 'X'), + (0xAB01, 'V'), + (0xAB07, 'X'), + (0xAB09, 'V'), + (0xAB0F, 'X'), + (0xAB11, 'V'), + (0xAB17, 'X'), + (0xAB20, 'V'), + (0xAB27, 'X'), + (0xAB28, 'V'), + (0xAB2F, 'X'), + (0xAB30, 'V'), + (0xAB5C, 'M', 'ꜧ'), + (0xAB5D, 'M', 'ꬷ'), + (0xAB5E, 'M', 'ɫ'), + (0xAB5F, 'M', 'ꭒ'), + (0xAB60, 'V'), + (0xAB69, 'M', 'ʍ'), + (0xAB6A, 'V'), + (0xAB6C, 'X'), + (0xAB70, 'M', 'Ꭰ'), + (0xAB71, 'M', 'Ꭱ'), + (0xAB72, 'M', 'Ꭲ'), + (0xAB73, 'M', 'Ꭳ'), + (0xAB74, 'M', 'Ꭴ'), + (0xAB75, 'M', 'Ꭵ'), + (0xAB76, 'M', 'Ꭶ'), + (0xAB77, 'M', 'Ꭷ'), + (0xAB78, 'M', 'Ꭸ'), + (0xAB79, 'M', 'Ꭹ'), + (0xAB7A, 'M', 'Ꭺ'), + (0xAB7B, 'M', 'Ꭻ'), + (0xAB7C, 'M', 'Ꭼ'), + (0xAB7D, 'M', 'Ꭽ'), + (0xAB7E, 'M', 'Ꭾ'), + (0xAB7F, 'M', 'Ꭿ'), + (0xAB80, 'M', 'Ꮀ'), + (0xAB81, 'M', 'Ꮁ'), + (0xAB82, 'M', 'Ꮂ'), + (0xAB83, 'M', 'Ꮃ'), + (0xAB84, 'M', 'Ꮄ'), + (0xAB85, 'M', 'Ꮅ'), + (0xAB86, 'M', 'Ꮆ'), + (0xAB87, 'M', 'Ꮇ'), + (0xAB88, 'M', 'Ꮈ'), + (0xAB89, 'M', 'Ꮉ'), + (0xAB8A, 'M', 'Ꮊ'), + (0xAB8B, 'M', 'Ꮋ'), + (0xAB8C, 'M', 'Ꮌ'), + (0xAB8D, 'M', 'Ꮍ'), + (0xAB8E, 'M', 'Ꮎ'), + (0xAB8F, 'M', 'Ꮏ'), + (0xAB90, 'M', 'Ꮐ'), + (0xAB91, 'M', 'Ꮑ'), + (0xAB92, 'M', 'Ꮒ'), + (0xAB93, 'M', 'Ꮓ'), + (0xAB94, 'M', 'Ꮔ'), + (0xAB95, 'M', 'Ꮕ'), + (0xAB96, 'M', 'Ꮖ'), + (0xAB97, 'M', 'Ꮗ'), + (0xAB98, 'M', 'Ꮘ'), + (0xAB99, 'M', 'Ꮙ'), + (0xAB9A, 'M', 'Ꮚ'), + (0xAB9B, 'M', 'Ꮛ'), + (0xAB9C, 'M', 'Ꮜ'), + (0xAB9D, 'M', 'Ꮝ'), + (0xAB9E, 'M', 'Ꮞ'), + (0xAB9F, 'M', 'Ꮟ'), + (0xABA0, 'M', 'Ꮠ'), + (0xABA1, 'M', 'Ꮡ'), + (0xABA2, 'M', 'Ꮢ'), + (0xABA3, 'M', 'Ꮣ'), + (0xABA4, 'M', 'Ꮤ'), + (0xABA5, 'M', 'Ꮥ'), + (0xABA6, 'M', 'Ꮦ'), + (0xABA7, 'M', 'Ꮧ'), + (0xABA8, 'M', 'Ꮨ'), + (0xABA9, 'M', 'Ꮩ'), + (0xABAA, 'M', 'Ꮪ'), + ] + +def _seg_39() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xABAB, 'M', 'Ꮫ'), + (0xABAC, 'M', 'Ꮬ'), + (0xABAD, 'M', 'Ꮭ'), + (0xABAE, 'M', 'Ꮮ'), + (0xABAF, 'M', 'Ꮯ'), + (0xABB0, 'M', 'Ꮰ'), + (0xABB1, 'M', 'Ꮱ'), + (0xABB2, 'M', 'Ꮲ'), + (0xABB3, 'M', 'Ꮳ'), + (0xABB4, 'M', 'Ꮴ'), + (0xABB5, 'M', 'Ꮵ'), + (0xABB6, 'M', 'Ꮶ'), + (0xABB7, 'M', 'Ꮷ'), + (0xABB8, 'M', 'Ꮸ'), + (0xABB9, 'M', 'Ꮹ'), + (0xABBA, 'M', 'Ꮺ'), + (0xABBB, 'M', 'Ꮻ'), + (0xABBC, 'M', 'Ꮼ'), + (0xABBD, 'M', 'Ꮽ'), + (0xABBE, 'M', 'Ꮾ'), + (0xABBF, 'M', 'Ꮿ'), + (0xABC0, 'V'), + (0xABEE, 'X'), + (0xABF0, 'V'), + (0xABFA, 'X'), + (0xAC00, 'V'), + (0xD7A4, 'X'), + (0xD7B0, 'V'), + (0xD7C7, 'X'), + (0xD7CB, 'V'), + (0xD7FC, 'X'), + (0xF900, 'M', '豈'), + (0xF901, 'M', '更'), + (0xF902, 'M', '車'), + (0xF903, 'M', '賈'), + (0xF904, 'M', '滑'), + (0xF905, 'M', '串'), + (0xF906, 'M', '句'), + (0xF907, 'M', '龜'), + (0xF909, 'M', '契'), + (0xF90A, 'M', '金'), + (0xF90B, 'M', '喇'), + (0xF90C, 'M', '奈'), + (0xF90D, 'M', '懶'), + (0xF90E, 'M', '癩'), + (0xF90F, 'M', '羅'), + (0xF910, 'M', '蘿'), + (0xF911, 'M', '螺'), + (0xF912, 'M', '裸'), + (0xF913, 'M', '邏'), + (0xF914, 'M', '樂'), + (0xF915, 'M', '洛'), + (0xF916, 'M', '烙'), + (0xF917, 'M', '珞'), + (0xF918, 'M', '落'), + (0xF919, 'M', '酪'), + (0xF91A, 'M', '駱'), + (0xF91B, 'M', '亂'), + (0xF91C, 'M', '卵'), + (0xF91D, 'M', '欄'), + (0xF91E, 'M', '爛'), + (0xF91F, 'M', '蘭'), + (0xF920, 'M', '鸞'), + (0xF921, 'M', '嵐'), + (0xF922, 'M', '濫'), + (0xF923, 'M', '藍'), + (0xF924, 'M', '襤'), + (0xF925, 'M', '拉'), + (0xF926, 'M', '臘'), + (0xF927, 'M', '蠟'), + (0xF928, 'M', '廊'), + (0xF929, 'M', '朗'), + (0xF92A, 'M', '浪'), + (0xF92B, 'M', '狼'), + (0xF92C, 'M', '郎'), + (0xF92D, 'M', '來'), + (0xF92E, 'M', '冷'), + (0xF92F, 'M', '勞'), + (0xF930, 'M', '擄'), + (0xF931, 'M', '櫓'), + (0xF932, 'M', '爐'), + (0xF933, 'M', '盧'), + (0xF934, 'M', '老'), + (0xF935, 'M', '蘆'), + (0xF936, 'M', '虜'), + (0xF937, 'M', '路'), + (0xF938, 'M', '露'), + (0xF939, 'M', '魯'), + (0xF93A, 'M', '鷺'), + (0xF93B, 'M', '碌'), + (0xF93C, 'M', '祿'), + (0xF93D, 'M', '綠'), + (0xF93E, 'M', '菉'), + (0xF93F, 'M', '錄'), + (0xF940, 'M', '鹿'), + (0xF941, 'M', '論'), + (0xF942, 'M', '壟'), + (0xF943, 'M', '弄'), + (0xF944, 'M', '籠'), + (0xF945, 'M', '聾'), + ] + +def _seg_40() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xF946, 'M', '牢'), + (0xF947, 'M', '磊'), + (0xF948, 'M', '賂'), + (0xF949, 'M', '雷'), + (0xF94A, 'M', '壘'), + (0xF94B, 'M', '屢'), + (0xF94C, 'M', '樓'), + (0xF94D, 'M', '淚'), + (0xF94E, 'M', '漏'), + (0xF94F, 'M', '累'), + (0xF950, 'M', '縷'), + (0xF951, 'M', '陋'), + (0xF952, 'M', '勒'), + (0xF953, 'M', '肋'), + (0xF954, 'M', '凜'), + (0xF955, 'M', '凌'), + (0xF956, 'M', '稜'), + (0xF957, 'M', '綾'), + (0xF958, 'M', '菱'), + (0xF959, 'M', '陵'), + (0xF95A, 'M', '讀'), + (0xF95B, 'M', '拏'), + (0xF95C, 'M', '樂'), + (0xF95D, 'M', '諾'), + (0xF95E, 'M', '丹'), + (0xF95F, 'M', '寧'), + (0xF960, 'M', '怒'), + (0xF961, 'M', '率'), + (0xF962, 'M', '異'), + (0xF963, 'M', '北'), + (0xF964, 'M', '磻'), + (0xF965, 'M', '便'), + (0xF966, 'M', '復'), + (0xF967, 'M', '不'), + (0xF968, 'M', '泌'), + (0xF969, 'M', '數'), + (0xF96A, 'M', '索'), + (0xF96B, 'M', '參'), + (0xF96C, 'M', '塞'), + (0xF96D, 'M', '省'), + (0xF96E, 'M', '葉'), + (0xF96F, 'M', '說'), + (0xF970, 'M', '殺'), + (0xF971, 'M', '辰'), + (0xF972, 'M', '沈'), + (0xF973, 'M', '拾'), + (0xF974, 'M', '若'), + (0xF975, 'M', '掠'), + (0xF976, 'M', '略'), + (0xF977, 'M', '亮'), + (0xF978, 'M', '兩'), + (0xF979, 'M', '凉'), + (0xF97A, 'M', '梁'), + (0xF97B, 'M', '糧'), + (0xF97C, 'M', '良'), + (0xF97D, 'M', '諒'), + (0xF97E, 'M', '量'), + (0xF97F, 'M', '勵'), + (0xF980, 'M', '呂'), + (0xF981, 'M', '女'), + (0xF982, 'M', '廬'), + (0xF983, 'M', '旅'), + (0xF984, 'M', '濾'), + (0xF985, 'M', '礪'), + (0xF986, 'M', '閭'), + (0xF987, 'M', '驪'), + (0xF988, 'M', '麗'), + (0xF989, 'M', '黎'), + (0xF98A, 'M', '力'), + (0xF98B, 'M', '曆'), + (0xF98C, 'M', '歷'), + (0xF98D, 'M', '轢'), + (0xF98E, 'M', '年'), + (0xF98F, 'M', '憐'), + (0xF990, 'M', '戀'), + (0xF991, 'M', '撚'), + (0xF992, 'M', '漣'), + (0xF993, 'M', '煉'), + (0xF994, 'M', '璉'), + (0xF995, 'M', '秊'), + (0xF996, 'M', '練'), + (0xF997, 'M', '聯'), + (0xF998, 'M', '輦'), + (0xF999, 'M', '蓮'), + (0xF99A, 'M', '連'), + (0xF99B, 'M', '鍊'), + (0xF99C, 'M', '列'), + (0xF99D, 'M', '劣'), + (0xF99E, 'M', '咽'), + (0xF99F, 'M', '烈'), + (0xF9A0, 'M', '裂'), + (0xF9A1, 'M', '說'), + (0xF9A2, 'M', '廉'), + (0xF9A3, 'M', '念'), + (0xF9A4, 'M', '捻'), + (0xF9A5, 'M', '殮'), + (0xF9A6, 'M', '簾'), + (0xF9A7, 'M', '獵'), + (0xF9A8, 'M', '令'), + (0xF9A9, 'M', '囹'), + ] + +def _seg_41() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xF9AA, 'M', '寧'), + (0xF9AB, 'M', '嶺'), + (0xF9AC, 'M', '怜'), + (0xF9AD, 'M', '玲'), + (0xF9AE, 'M', '瑩'), + (0xF9AF, 'M', '羚'), + (0xF9B0, 'M', '聆'), + (0xF9B1, 'M', '鈴'), + (0xF9B2, 'M', '零'), + (0xF9B3, 'M', '靈'), + (0xF9B4, 'M', '領'), + (0xF9B5, 'M', '例'), + (0xF9B6, 'M', '禮'), + (0xF9B7, 'M', '醴'), + (0xF9B8, 'M', '隸'), + (0xF9B9, 'M', '惡'), + (0xF9BA, 'M', '了'), + (0xF9BB, 'M', '僚'), + (0xF9BC, 'M', '寮'), + (0xF9BD, 'M', '尿'), + (0xF9BE, 'M', '料'), + (0xF9BF, 'M', '樂'), + (0xF9C0, 'M', '燎'), + (0xF9C1, 'M', '療'), + (0xF9C2, 'M', '蓼'), + (0xF9C3, 'M', '遼'), + (0xF9C4, 'M', '龍'), + (0xF9C5, 'M', '暈'), + (0xF9C6, 'M', '阮'), + (0xF9C7, 'M', '劉'), + (0xF9C8, 'M', '杻'), + (0xF9C9, 'M', '柳'), + (0xF9CA, 'M', '流'), + (0xF9CB, 'M', '溜'), + (0xF9CC, 'M', '琉'), + (0xF9CD, 'M', '留'), + (0xF9CE, 'M', '硫'), + (0xF9CF, 'M', '紐'), + (0xF9D0, 'M', '類'), + (0xF9D1, 'M', '六'), + (0xF9D2, 'M', '戮'), + (0xF9D3, 'M', '陸'), + (0xF9D4, 'M', '倫'), + (0xF9D5, 'M', '崙'), + (0xF9D6, 'M', '淪'), + (0xF9D7, 'M', '輪'), + (0xF9D8, 'M', '律'), + (0xF9D9, 'M', '慄'), + (0xF9DA, 'M', '栗'), + (0xF9DB, 'M', '率'), + (0xF9DC, 'M', '隆'), + (0xF9DD, 'M', '利'), + (0xF9DE, 'M', '吏'), + (0xF9DF, 'M', '履'), + (0xF9E0, 'M', '易'), + (0xF9E1, 'M', '李'), + (0xF9E2, 'M', '梨'), + (0xF9E3, 'M', '泥'), + (0xF9E4, 'M', '理'), + (0xF9E5, 'M', '痢'), + (0xF9E6, 'M', '罹'), + (0xF9E7, 'M', '裏'), + (0xF9E8, 'M', '裡'), + (0xF9E9, 'M', '里'), + (0xF9EA, 'M', '離'), + (0xF9EB, 'M', '匿'), + (0xF9EC, 'M', '溺'), + (0xF9ED, 'M', '吝'), + (0xF9EE, 'M', '燐'), + (0xF9EF, 'M', '璘'), + (0xF9F0, 'M', '藺'), + (0xF9F1, 'M', '隣'), + (0xF9F2, 'M', '鱗'), + (0xF9F3, 'M', '麟'), + (0xF9F4, 'M', '林'), + (0xF9F5, 'M', '淋'), + (0xF9F6, 'M', '臨'), + (0xF9F7, 'M', '立'), + (0xF9F8, 'M', '笠'), + (0xF9F9, 'M', '粒'), + (0xF9FA, 'M', '狀'), + (0xF9FB, 'M', '炙'), + (0xF9FC, 'M', '識'), + (0xF9FD, 'M', '什'), + (0xF9FE, 'M', '茶'), + (0xF9FF, 'M', '刺'), + (0xFA00, 'M', '切'), + (0xFA01, 'M', '度'), + (0xFA02, 'M', '拓'), + (0xFA03, 'M', '糖'), + (0xFA04, 'M', '宅'), + (0xFA05, 'M', '洞'), + (0xFA06, 'M', '暴'), + (0xFA07, 'M', '輻'), + (0xFA08, 'M', '行'), + (0xFA09, 'M', '降'), + (0xFA0A, 'M', '見'), + (0xFA0B, 'M', '廓'), + (0xFA0C, 'M', '兀'), + (0xFA0D, 'M', '嗀'), + ] + +def _seg_42() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFA0E, 'V'), + (0xFA10, 'M', '塚'), + (0xFA11, 'V'), + (0xFA12, 'M', '晴'), + (0xFA13, 'V'), + (0xFA15, 'M', '凞'), + (0xFA16, 'M', '猪'), + (0xFA17, 'M', '益'), + (0xFA18, 'M', '礼'), + (0xFA19, 'M', '神'), + (0xFA1A, 'M', '祥'), + (0xFA1B, 'M', '福'), + (0xFA1C, 'M', '靖'), + (0xFA1D, 'M', '精'), + (0xFA1E, 'M', '羽'), + (0xFA1F, 'V'), + (0xFA20, 'M', '蘒'), + (0xFA21, 'V'), + (0xFA22, 'M', '諸'), + (0xFA23, 'V'), + (0xFA25, 'M', '逸'), + (0xFA26, 'M', '都'), + (0xFA27, 'V'), + (0xFA2A, 'M', '飯'), + (0xFA2B, 'M', '飼'), + (0xFA2C, 'M', '館'), + (0xFA2D, 'M', '鶴'), + (0xFA2E, 'M', '郞'), + (0xFA2F, 'M', '隷'), + (0xFA30, 'M', '侮'), + (0xFA31, 'M', '僧'), + (0xFA32, 'M', '免'), + (0xFA33, 'M', '勉'), + (0xFA34, 'M', '勤'), + (0xFA35, 'M', '卑'), + (0xFA36, 'M', '喝'), + (0xFA37, 'M', '嘆'), + (0xFA38, 'M', '器'), + (0xFA39, 'M', '塀'), + (0xFA3A, 'M', '墨'), + (0xFA3B, 'M', '層'), + (0xFA3C, 'M', '屮'), + (0xFA3D, 'M', '悔'), + (0xFA3E, 'M', '慨'), + (0xFA3F, 'M', '憎'), + (0xFA40, 'M', '懲'), + (0xFA41, 'M', '敏'), + (0xFA42, 'M', '既'), + (0xFA43, 'M', '暑'), + (0xFA44, 'M', '梅'), + (0xFA45, 'M', '海'), + (0xFA46, 'M', '渚'), + (0xFA47, 'M', '漢'), + (0xFA48, 'M', '煮'), + (0xFA49, 'M', '爫'), + (0xFA4A, 'M', '琢'), + (0xFA4B, 'M', '碑'), + (0xFA4C, 'M', '社'), + (0xFA4D, 'M', '祉'), + (0xFA4E, 'M', '祈'), + (0xFA4F, 'M', '祐'), + (0xFA50, 'M', '祖'), + (0xFA51, 'M', '祝'), + (0xFA52, 'M', '禍'), + (0xFA53, 'M', '禎'), + (0xFA54, 'M', '穀'), + (0xFA55, 'M', '突'), + (0xFA56, 'M', '節'), + (0xFA57, 'M', '練'), + (0xFA58, 'M', '縉'), + (0xFA59, 'M', '繁'), + (0xFA5A, 'M', '署'), + (0xFA5B, 'M', '者'), + (0xFA5C, 'M', '臭'), + (0xFA5D, 'M', '艹'), + (0xFA5F, 'M', '著'), + (0xFA60, 'M', '褐'), + (0xFA61, 'M', '視'), + (0xFA62, 'M', '謁'), + (0xFA63, 'M', '謹'), + (0xFA64, 'M', '賓'), + (0xFA65, 'M', '贈'), + (0xFA66, 'M', '辶'), + (0xFA67, 'M', '逸'), + (0xFA68, 'M', '難'), + (0xFA69, 'M', '響'), + (0xFA6A, 'M', '頻'), + (0xFA6B, 'M', '恵'), + (0xFA6C, 'M', '𤋮'), + (0xFA6D, 'M', '舘'), + (0xFA6E, 'X'), + (0xFA70, 'M', '並'), + (0xFA71, 'M', '况'), + (0xFA72, 'M', '全'), + (0xFA73, 'M', '侀'), + (0xFA74, 'M', '充'), + (0xFA75, 'M', '冀'), + (0xFA76, 'M', '勇'), + (0xFA77, 'M', '勺'), + (0xFA78, 'M', '喝'), + ] + +def _seg_43() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFA79, 'M', '啕'), + (0xFA7A, 'M', '喙'), + (0xFA7B, 'M', '嗢'), + (0xFA7C, 'M', '塚'), + (0xFA7D, 'M', '墳'), + (0xFA7E, 'M', '奄'), + (0xFA7F, 'M', '奔'), + (0xFA80, 'M', '婢'), + (0xFA81, 'M', '嬨'), + (0xFA82, 'M', '廒'), + (0xFA83, 'M', '廙'), + (0xFA84, 'M', '彩'), + (0xFA85, 'M', '徭'), + (0xFA86, 'M', '惘'), + (0xFA87, 'M', '慎'), + (0xFA88, 'M', '愈'), + (0xFA89, 'M', '憎'), + (0xFA8A, 'M', '慠'), + (0xFA8B, 'M', '懲'), + (0xFA8C, 'M', '戴'), + (0xFA8D, 'M', '揄'), + (0xFA8E, 'M', '搜'), + (0xFA8F, 'M', '摒'), + (0xFA90, 'M', '敖'), + (0xFA91, 'M', '晴'), + (0xFA92, 'M', '朗'), + (0xFA93, 'M', '望'), + (0xFA94, 'M', '杖'), + (0xFA95, 'M', '歹'), + (0xFA96, 'M', '殺'), + (0xFA97, 'M', '流'), + (0xFA98, 'M', '滛'), + (0xFA99, 'M', '滋'), + (0xFA9A, 'M', '漢'), + (0xFA9B, 'M', '瀞'), + (0xFA9C, 'M', '煮'), + (0xFA9D, 'M', '瞧'), + (0xFA9E, 'M', '爵'), + (0xFA9F, 'M', '犯'), + (0xFAA0, 'M', '猪'), + (0xFAA1, 'M', '瑱'), + (0xFAA2, 'M', '甆'), + (0xFAA3, 'M', '画'), + (0xFAA4, 'M', '瘝'), + (0xFAA5, 'M', '瘟'), + (0xFAA6, 'M', '益'), + (0xFAA7, 'M', '盛'), + (0xFAA8, 'M', '直'), + (0xFAA9, 'M', '睊'), + (0xFAAA, 'M', '着'), + (0xFAAB, 'M', '磌'), + (0xFAAC, 'M', '窱'), + (0xFAAD, 'M', '節'), + (0xFAAE, 'M', '类'), + (0xFAAF, 'M', '絛'), + (0xFAB0, 'M', '練'), + (0xFAB1, 'M', '缾'), + (0xFAB2, 'M', '者'), + (0xFAB3, 'M', '荒'), + (0xFAB4, 'M', '華'), + (0xFAB5, 'M', '蝹'), + (0xFAB6, 'M', '襁'), + (0xFAB7, 'M', '覆'), + (0xFAB8, 'M', '視'), + (0xFAB9, 'M', '調'), + (0xFABA, 'M', '諸'), + (0xFABB, 'M', '請'), + (0xFABC, 'M', '謁'), + (0xFABD, 'M', '諾'), + (0xFABE, 'M', '諭'), + (0xFABF, 'M', '謹'), + (0xFAC0, 'M', '變'), + (0xFAC1, 'M', '贈'), + (0xFAC2, 'M', '輸'), + (0xFAC3, 'M', '遲'), + (0xFAC4, 'M', '醙'), + (0xFAC5, 'M', '鉶'), + (0xFAC6, 'M', '陼'), + (0xFAC7, 'M', '難'), + (0xFAC8, 'M', '靖'), + (0xFAC9, 'M', '韛'), + (0xFACA, 'M', '響'), + (0xFACB, 'M', '頋'), + (0xFACC, 'M', '頻'), + (0xFACD, 'M', '鬒'), + (0xFACE, 'M', '龜'), + (0xFACF, 'M', '𢡊'), + (0xFAD0, 'M', '𢡄'), + (0xFAD1, 'M', '𣏕'), + (0xFAD2, 'M', '㮝'), + (0xFAD3, 'M', '䀘'), + (0xFAD4, 'M', '䀹'), + (0xFAD5, 'M', '𥉉'), + (0xFAD6, 'M', '𥳐'), + (0xFAD7, 'M', '𧻓'), + (0xFAD8, 'M', '齃'), + (0xFAD9, 'M', '龎'), + (0xFADA, 'X'), + (0xFB00, 'M', 'ff'), + (0xFB01, 'M', 'fi'), + ] + +def _seg_44() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFB02, 'M', 'fl'), + (0xFB03, 'M', 'ffi'), + (0xFB04, 'M', 'ffl'), + (0xFB05, 'M', 'st'), + (0xFB07, 'X'), + (0xFB13, 'M', 'մն'), + (0xFB14, 'M', 'մե'), + (0xFB15, 'M', 'մի'), + (0xFB16, 'M', 'վն'), + (0xFB17, 'M', 'մխ'), + (0xFB18, 'X'), + (0xFB1D, 'M', 'יִ'), + (0xFB1E, 'V'), + (0xFB1F, 'M', 'ײַ'), + (0xFB20, 'M', 'ע'), + (0xFB21, 'M', 'א'), + (0xFB22, 'M', 'ד'), + (0xFB23, 'M', 'ה'), + (0xFB24, 'M', 'כ'), + (0xFB25, 'M', 'ל'), + (0xFB26, 'M', 'ם'), + (0xFB27, 'M', 'ר'), + (0xFB28, 'M', 'ת'), + (0xFB29, '3', '+'), + (0xFB2A, 'M', 'שׁ'), + (0xFB2B, 'M', 'שׂ'), + (0xFB2C, 'M', 'שּׁ'), + (0xFB2D, 'M', 'שּׂ'), + (0xFB2E, 'M', 'אַ'), + (0xFB2F, 'M', 'אָ'), + (0xFB30, 'M', 'אּ'), + (0xFB31, 'M', 'בּ'), + (0xFB32, 'M', 'גּ'), + (0xFB33, 'M', 'דּ'), + (0xFB34, 'M', 'הּ'), + (0xFB35, 'M', 'וּ'), + (0xFB36, 'M', 'זּ'), + (0xFB37, 'X'), + (0xFB38, 'M', 'טּ'), + (0xFB39, 'M', 'יּ'), + (0xFB3A, 'M', 'ךּ'), + (0xFB3B, 'M', 'כּ'), + (0xFB3C, 'M', 'לּ'), + (0xFB3D, 'X'), + (0xFB3E, 'M', 'מּ'), + (0xFB3F, 'X'), + (0xFB40, 'M', 'נּ'), + (0xFB41, 'M', 'סּ'), + (0xFB42, 'X'), + (0xFB43, 'M', 'ףּ'), + (0xFB44, 'M', 'פּ'), + (0xFB45, 'X'), + (0xFB46, 'M', 'צּ'), + (0xFB47, 'M', 'קּ'), + (0xFB48, 'M', 'רּ'), + (0xFB49, 'M', 'שּ'), + (0xFB4A, 'M', 'תּ'), + (0xFB4B, 'M', 'וֹ'), + (0xFB4C, 'M', 'בֿ'), + (0xFB4D, 'M', 'כֿ'), + (0xFB4E, 'M', 'פֿ'), + (0xFB4F, 'M', 'אל'), + (0xFB50, 'M', 'ٱ'), + (0xFB52, 'M', 'ٻ'), + (0xFB56, 'M', 'پ'), + (0xFB5A, 'M', 'ڀ'), + (0xFB5E, 'M', 'ٺ'), + (0xFB62, 'M', 'ٿ'), + (0xFB66, 'M', 'ٹ'), + (0xFB6A, 'M', 'ڤ'), + (0xFB6E, 'M', 'ڦ'), + (0xFB72, 'M', 'ڄ'), + (0xFB76, 'M', 'ڃ'), + (0xFB7A, 'M', 'چ'), + (0xFB7E, 'M', 'ڇ'), + (0xFB82, 'M', 'ڍ'), + (0xFB84, 'M', 'ڌ'), + (0xFB86, 'M', 'ڎ'), + (0xFB88, 'M', 'ڈ'), + (0xFB8A, 'M', 'ژ'), + (0xFB8C, 'M', 'ڑ'), + (0xFB8E, 'M', 'ک'), + (0xFB92, 'M', 'گ'), + (0xFB96, 'M', 'ڳ'), + (0xFB9A, 'M', 'ڱ'), + (0xFB9E, 'M', 'ں'), + (0xFBA0, 'M', 'ڻ'), + (0xFBA4, 'M', 'ۀ'), + (0xFBA6, 'M', 'ہ'), + (0xFBAA, 'M', 'ھ'), + (0xFBAE, 'M', 'ے'), + (0xFBB0, 'M', 'ۓ'), + (0xFBB2, 'V'), + (0xFBC3, 'X'), + (0xFBD3, 'M', 'ڭ'), + (0xFBD7, 'M', 'ۇ'), + (0xFBD9, 'M', 'ۆ'), + (0xFBDB, 'M', 'ۈ'), + (0xFBDD, 'M', 'ۇٴ'), + (0xFBDE, 'M', 'ۋ'), + ] + +def _seg_45() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFBE0, 'M', 'ۅ'), + (0xFBE2, 'M', 'ۉ'), + (0xFBE4, 'M', 'ې'), + (0xFBE8, 'M', 'ى'), + (0xFBEA, 'M', 'ئا'), + (0xFBEC, 'M', 'ئە'), + (0xFBEE, 'M', 'ئو'), + (0xFBF0, 'M', 'ئۇ'), + (0xFBF2, 'M', 'ئۆ'), + (0xFBF4, 'M', 'ئۈ'), + (0xFBF6, 'M', 'ئې'), + (0xFBF9, 'M', 'ئى'), + (0xFBFC, 'M', 'ی'), + (0xFC00, 'M', 'ئج'), + (0xFC01, 'M', 'ئح'), + (0xFC02, 'M', 'ئم'), + (0xFC03, 'M', 'ئى'), + (0xFC04, 'M', 'ئي'), + (0xFC05, 'M', 'بج'), + (0xFC06, 'M', 'بح'), + (0xFC07, 'M', 'بخ'), + (0xFC08, 'M', 'بم'), + (0xFC09, 'M', 'بى'), + (0xFC0A, 'M', 'بي'), + (0xFC0B, 'M', 'تج'), + (0xFC0C, 'M', 'تح'), + (0xFC0D, 'M', 'تخ'), + (0xFC0E, 'M', 'تم'), + (0xFC0F, 'M', 'تى'), + (0xFC10, 'M', 'تي'), + (0xFC11, 'M', 'ثج'), + (0xFC12, 'M', 'ثم'), + (0xFC13, 'M', 'ثى'), + (0xFC14, 'M', 'ثي'), + (0xFC15, 'M', 'جح'), + (0xFC16, 'M', 'جم'), + (0xFC17, 'M', 'حج'), + (0xFC18, 'M', 'حم'), + (0xFC19, 'M', 'خج'), + (0xFC1A, 'M', 'خح'), + (0xFC1B, 'M', 'خم'), + (0xFC1C, 'M', 'سج'), + (0xFC1D, 'M', 'سح'), + (0xFC1E, 'M', 'سخ'), + (0xFC1F, 'M', 'سم'), + (0xFC20, 'M', 'صح'), + (0xFC21, 'M', 'صم'), + (0xFC22, 'M', 'ضج'), + (0xFC23, 'M', 'ضح'), + (0xFC24, 'M', 'ضخ'), + (0xFC25, 'M', 'ضم'), + (0xFC26, 'M', 'طح'), + (0xFC27, 'M', 'طم'), + (0xFC28, 'M', 'ظم'), + (0xFC29, 'M', 'عج'), + (0xFC2A, 'M', 'عم'), + (0xFC2B, 'M', 'غج'), + (0xFC2C, 'M', 'غم'), + (0xFC2D, 'M', 'فج'), + (0xFC2E, 'M', 'فح'), + (0xFC2F, 'M', 'فخ'), + (0xFC30, 'M', 'فم'), + (0xFC31, 'M', 'فى'), + (0xFC32, 'M', 'في'), + (0xFC33, 'M', 'قح'), + (0xFC34, 'M', 'قم'), + (0xFC35, 'M', 'قى'), + (0xFC36, 'M', 'قي'), + (0xFC37, 'M', 'كا'), + (0xFC38, 'M', 'كج'), + (0xFC39, 'M', 'كح'), + (0xFC3A, 'M', 'كخ'), + (0xFC3B, 'M', 'كل'), + (0xFC3C, 'M', 'كم'), + (0xFC3D, 'M', 'كى'), + (0xFC3E, 'M', 'كي'), + (0xFC3F, 'M', 'لج'), + (0xFC40, 'M', 'لح'), + (0xFC41, 'M', 'لخ'), + (0xFC42, 'M', 'لم'), + (0xFC43, 'M', 'لى'), + (0xFC44, 'M', 'لي'), + (0xFC45, 'M', 'مج'), + (0xFC46, 'M', 'مح'), + (0xFC47, 'M', 'مخ'), + (0xFC48, 'M', 'مم'), + (0xFC49, 'M', 'مى'), + (0xFC4A, 'M', 'مي'), + (0xFC4B, 'M', 'نج'), + (0xFC4C, 'M', 'نح'), + (0xFC4D, 'M', 'نخ'), + (0xFC4E, 'M', 'نم'), + (0xFC4F, 'M', 'نى'), + (0xFC50, 'M', 'ني'), + (0xFC51, 'M', 'هج'), + (0xFC52, 'M', 'هم'), + (0xFC53, 'M', 'هى'), + (0xFC54, 'M', 'هي'), + (0xFC55, 'M', 'يج'), + (0xFC56, 'M', 'يح'), + ] + +def _seg_46() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFC57, 'M', 'يخ'), + (0xFC58, 'M', 'يم'), + (0xFC59, 'M', 'يى'), + (0xFC5A, 'M', 'يي'), + (0xFC5B, 'M', 'ذٰ'), + (0xFC5C, 'M', 'رٰ'), + (0xFC5D, 'M', 'ىٰ'), + (0xFC5E, '3', ' ٌّ'), + (0xFC5F, '3', ' ٍّ'), + (0xFC60, '3', ' َّ'), + (0xFC61, '3', ' ُّ'), + (0xFC62, '3', ' ِّ'), + (0xFC63, '3', ' ّٰ'), + (0xFC64, 'M', 'ئر'), + (0xFC65, 'M', 'ئز'), + (0xFC66, 'M', 'ئم'), + (0xFC67, 'M', 'ئن'), + (0xFC68, 'M', 'ئى'), + (0xFC69, 'M', 'ئي'), + (0xFC6A, 'M', 'بر'), + (0xFC6B, 'M', 'بز'), + (0xFC6C, 'M', 'بم'), + (0xFC6D, 'M', 'بن'), + (0xFC6E, 'M', 'بى'), + (0xFC6F, 'M', 'بي'), + (0xFC70, 'M', 'تر'), + (0xFC71, 'M', 'تز'), + (0xFC72, 'M', 'تم'), + (0xFC73, 'M', 'تن'), + (0xFC74, 'M', 'تى'), + (0xFC75, 'M', 'تي'), + (0xFC76, 'M', 'ثر'), + (0xFC77, 'M', 'ثز'), + (0xFC78, 'M', 'ثم'), + (0xFC79, 'M', 'ثن'), + (0xFC7A, 'M', 'ثى'), + (0xFC7B, 'M', 'ثي'), + (0xFC7C, 'M', 'فى'), + (0xFC7D, 'M', 'في'), + (0xFC7E, 'M', 'قى'), + (0xFC7F, 'M', 'قي'), + (0xFC80, 'M', 'كا'), + (0xFC81, 'M', 'كل'), + (0xFC82, 'M', 'كم'), + (0xFC83, 'M', 'كى'), + (0xFC84, 'M', 'كي'), + (0xFC85, 'M', 'لم'), + (0xFC86, 'M', 'لى'), + (0xFC87, 'M', 'لي'), + (0xFC88, 'M', 'ما'), + (0xFC89, 'M', 'مم'), + (0xFC8A, 'M', 'نر'), + (0xFC8B, 'M', 'نز'), + (0xFC8C, 'M', 'نم'), + (0xFC8D, 'M', 'نن'), + (0xFC8E, 'M', 'نى'), + (0xFC8F, 'M', 'ني'), + (0xFC90, 'M', 'ىٰ'), + (0xFC91, 'M', 'ير'), + (0xFC92, 'M', 'يز'), + (0xFC93, 'M', 'يم'), + (0xFC94, 'M', 'ين'), + (0xFC95, 'M', 'يى'), + (0xFC96, 'M', 'يي'), + (0xFC97, 'M', 'ئج'), + (0xFC98, 'M', 'ئح'), + (0xFC99, 'M', 'ئخ'), + (0xFC9A, 'M', 'ئم'), + (0xFC9B, 'M', 'ئه'), + (0xFC9C, 'M', 'بج'), + (0xFC9D, 'M', 'بح'), + (0xFC9E, 'M', 'بخ'), + (0xFC9F, 'M', 'بم'), + (0xFCA0, 'M', 'به'), + (0xFCA1, 'M', 'تج'), + (0xFCA2, 'M', 'تح'), + (0xFCA3, 'M', 'تخ'), + (0xFCA4, 'M', 'تم'), + (0xFCA5, 'M', 'ته'), + (0xFCA6, 'M', 'ثم'), + (0xFCA7, 'M', 'جح'), + (0xFCA8, 'M', 'جم'), + (0xFCA9, 'M', 'حج'), + (0xFCAA, 'M', 'حم'), + (0xFCAB, 'M', 'خج'), + (0xFCAC, 'M', 'خم'), + (0xFCAD, 'M', 'سج'), + (0xFCAE, 'M', 'سح'), + (0xFCAF, 'M', 'سخ'), + (0xFCB0, 'M', 'سم'), + (0xFCB1, 'M', 'صح'), + (0xFCB2, 'M', 'صخ'), + (0xFCB3, 'M', 'صم'), + (0xFCB4, 'M', 'ضج'), + (0xFCB5, 'M', 'ضح'), + (0xFCB6, 'M', 'ضخ'), + (0xFCB7, 'M', 'ضم'), + (0xFCB8, 'M', 'طح'), + (0xFCB9, 'M', 'ظم'), + (0xFCBA, 'M', 'عج'), + ] + +def _seg_47() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFCBB, 'M', 'عم'), + (0xFCBC, 'M', 'غج'), + (0xFCBD, 'M', 'غم'), + (0xFCBE, 'M', 'فج'), + (0xFCBF, 'M', 'فح'), + (0xFCC0, 'M', 'فخ'), + (0xFCC1, 'M', 'فم'), + (0xFCC2, 'M', 'قح'), + (0xFCC3, 'M', 'قم'), + (0xFCC4, 'M', 'كج'), + (0xFCC5, 'M', 'كح'), + (0xFCC6, 'M', 'كخ'), + (0xFCC7, 'M', 'كل'), + (0xFCC8, 'M', 'كم'), + (0xFCC9, 'M', 'لج'), + (0xFCCA, 'M', 'لح'), + (0xFCCB, 'M', 'لخ'), + (0xFCCC, 'M', 'لم'), + (0xFCCD, 'M', 'له'), + (0xFCCE, 'M', 'مج'), + (0xFCCF, 'M', 'مح'), + (0xFCD0, 'M', 'مخ'), + (0xFCD1, 'M', 'مم'), + (0xFCD2, 'M', 'نج'), + (0xFCD3, 'M', 'نح'), + (0xFCD4, 'M', 'نخ'), + (0xFCD5, 'M', 'نم'), + (0xFCD6, 'M', 'نه'), + (0xFCD7, 'M', 'هج'), + (0xFCD8, 'M', 'هم'), + (0xFCD9, 'M', 'هٰ'), + (0xFCDA, 'M', 'يج'), + (0xFCDB, 'M', 'يح'), + (0xFCDC, 'M', 'يخ'), + (0xFCDD, 'M', 'يم'), + (0xFCDE, 'M', 'يه'), + (0xFCDF, 'M', 'ئم'), + (0xFCE0, 'M', 'ئه'), + (0xFCE1, 'M', 'بم'), + (0xFCE2, 'M', 'به'), + (0xFCE3, 'M', 'تم'), + (0xFCE4, 'M', 'ته'), + (0xFCE5, 'M', 'ثم'), + (0xFCE6, 'M', 'ثه'), + (0xFCE7, 'M', 'سم'), + (0xFCE8, 'M', 'سه'), + (0xFCE9, 'M', 'شم'), + (0xFCEA, 'M', 'شه'), + (0xFCEB, 'M', 'كل'), + (0xFCEC, 'M', 'كم'), + (0xFCED, 'M', 'لم'), + (0xFCEE, 'M', 'نم'), + (0xFCEF, 'M', 'نه'), + (0xFCF0, 'M', 'يم'), + (0xFCF1, 'M', 'يه'), + (0xFCF2, 'M', 'ـَّ'), + (0xFCF3, 'M', 'ـُّ'), + (0xFCF4, 'M', 'ـِّ'), + (0xFCF5, 'M', 'طى'), + (0xFCF6, 'M', 'طي'), + (0xFCF7, 'M', 'عى'), + (0xFCF8, 'M', 'عي'), + (0xFCF9, 'M', 'غى'), + (0xFCFA, 'M', 'غي'), + (0xFCFB, 'M', 'سى'), + (0xFCFC, 'M', 'سي'), + (0xFCFD, 'M', 'شى'), + (0xFCFE, 'M', 'شي'), + (0xFCFF, 'M', 'حى'), + (0xFD00, 'M', 'حي'), + (0xFD01, 'M', 'جى'), + (0xFD02, 'M', 'جي'), + (0xFD03, 'M', 'خى'), + (0xFD04, 'M', 'خي'), + (0xFD05, 'M', 'صى'), + (0xFD06, 'M', 'صي'), + (0xFD07, 'M', 'ضى'), + (0xFD08, 'M', 'ضي'), + (0xFD09, 'M', 'شج'), + (0xFD0A, 'M', 'شح'), + (0xFD0B, 'M', 'شخ'), + (0xFD0C, 'M', 'شم'), + (0xFD0D, 'M', 'شر'), + (0xFD0E, 'M', 'سر'), + (0xFD0F, 'M', 'صر'), + (0xFD10, 'M', 'ضر'), + (0xFD11, 'M', 'طى'), + (0xFD12, 'M', 'طي'), + (0xFD13, 'M', 'عى'), + (0xFD14, 'M', 'عي'), + (0xFD15, 'M', 'غى'), + (0xFD16, 'M', 'غي'), + (0xFD17, 'M', 'سى'), + (0xFD18, 'M', 'سي'), + (0xFD19, 'M', 'شى'), + (0xFD1A, 'M', 'شي'), + (0xFD1B, 'M', 'حى'), + (0xFD1C, 'M', 'حي'), + (0xFD1D, 'M', 'جى'), + (0xFD1E, 'M', 'جي'), + ] + +def _seg_48() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFD1F, 'M', 'خى'), + (0xFD20, 'M', 'خي'), + (0xFD21, 'M', 'صى'), + (0xFD22, 'M', 'صي'), + (0xFD23, 'M', 'ضى'), + (0xFD24, 'M', 'ضي'), + (0xFD25, 'M', 'شج'), + (0xFD26, 'M', 'شح'), + (0xFD27, 'M', 'شخ'), + (0xFD28, 'M', 'شم'), + (0xFD29, 'M', 'شر'), + (0xFD2A, 'M', 'سر'), + (0xFD2B, 'M', 'صر'), + (0xFD2C, 'M', 'ضر'), + (0xFD2D, 'M', 'شج'), + (0xFD2E, 'M', 'شح'), + (0xFD2F, 'M', 'شخ'), + (0xFD30, 'M', 'شم'), + (0xFD31, 'M', 'سه'), + (0xFD32, 'M', 'شه'), + (0xFD33, 'M', 'طم'), + (0xFD34, 'M', 'سج'), + (0xFD35, 'M', 'سح'), + (0xFD36, 'M', 'سخ'), + (0xFD37, 'M', 'شج'), + (0xFD38, 'M', 'شح'), + (0xFD39, 'M', 'شخ'), + (0xFD3A, 'M', 'طم'), + (0xFD3B, 'M', 'ظم'), + (0xFD3C, 'M', 'اً'), + (0xFD3E, 'V'), + (0xFD50, 'M', 'تجم'), + (0xFD51, 'M', 'تحج'), + (0xFD53, 'M', 'تحم'), + (0xFD54, 'M', 'تخم'), + (0xFD55, 'M', 'تمج'), + (0xFD56, 'M', 'تمح'), + (0xFD57, 'M', 'تمخ'), + (0xFD58, 'M', 'جمح'), + (0xFD5A, 'M', 'حمي'), + (0xFD5B, 'M', 'حمى'), + (0xFD5C, 'M', 'سحج'), + (0xFD5D, 'M', 'سجح'), + (0xFD5E, 'M', 'سجى'), + (0xFD5F, 'M', 'سمح'), + (0xFD61, 'M', 'سمج'), + (0xFD62, 'M', 'سمم'), + (0xFD64, 'M', 'صحح'), + (0xFD66, 'M', 'صمم'), + (0xFD67, 'M', 'شحم'), + (0xFD69, 'M', 'شجي'), + (0xFD6A, 'M', 'شمخ'), + (0xFD6C, 'M', 'شمم'), + (0xFD6E, 'M', 'ضحى'), + (0xFD6F, 'M', 'ضخم'), + (0xFD71, 'M', 'طمح'), + (0xFD73, 'M', 'طمم'), + (0xFD74, 'M', 'طمي'), + (0xFD75, 'M', 'عجم'), + (0xFD76, 'M', 'عمم'), + (0xFD78, 'M', 'عمى'), + (0xFD79, 'M', 'غمم'), + (0xFD7A, 'M', 'غمي'), + (0xFD7B, 'M', 'غمى'), + (0xFD7C, 'M', 'فخم'), + (0xFD7E, 'M', 'قمح'), + (0xFD7F, 'M', 'قمم'), + (0xFD80, 'M', 'لحم'), + (0xFD81, 'M', 'لحي'), + (0xFD82, 'M', 'لحى'), + (0xFD83, 'M', 'لجج'), + (0xFD85, 'M', 'لخم'), + (0xFD87, 'M', 'لمح'), + (0xFD89, 'M', 'محج'), + (0xFD8A, 'M', 'محم'), + (0xFD8B, 'M', 'محي'), + (0xFD8C, 'M', 'مجح'), + (0xFD8D, 'M', 'مجم'), + (0xFD8E, 'M', 'مخج'), + (0xFD8F, 'M', 'مخم'), + (0xFD90, 'X'), + (0xFD92, 'M', 'مجخ'), + (0xFD93, 'M', 'همج'), + (0xFD94, 'M', 'همم'), + (0xFD95, 'M', 'نحم'), + (0xFD96, 'M', 'نحى'), + (0xFD97, 'M', 'نجم'), + (0xFD99, 'M', 'نجى'), + (0xFD9A, 'M', 'نمي'), + (0xFD9B, 'M', 'نمى'), + (0xFD9C, 'M', 'يمم'), + (0xFD9E, 'M', 'بخي'), + (0xFD9F, 'M', 'تجي'), + (0xFDA0, 'M', 'تجى'), + (0xFDA1, 'M', 'تخي'), + (0xFDA2, 'M', 'تخى'), + (0xFDA3, 'M', 'تمي'), + (0xFDA4, 'M', 'تمى'), + (0xFDA5, 'M', 'جمي'), + (0xFDA6, 'M', 'جحى'), + ] + +def _seg_49() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFDA7, 'M', 'جمى'), + (0xFDA8, 'M', 'سخى'), + (0xFDA9, 'M', 'صحي'), + (0xFDAA, 'M', 'شحي'), + (0xFDAB, 'M', 'ضحي'), + (0xFDAC, 'M', 'لجي'), + (0xFDAD, 'M', 'لمي'), + (0xFDAE, 'M', 'يحي'), + (0xFDAF, 'M', 'يجي'), + (0xFDB0, 'M', 'يمي'), + (0xFDB1, 'M', 'ممي'), + (0xFDB2, 'M', 'قمي'), + (0xFDB3, 'M', 'نحي'), + (0xFDB4, 'M', 'قمح'), + (0xFDB5, 'M', 'لحم'), + (0xFDB6, 'M', 'عمي'), + (0xFDB7, 'M', 'كمي'), + (0xFDB8, 'M', 'نجح'), + (0xFDB9, 'M', 'مخي'), + (0xFDBA, 'M', 'لجم'), + (0xFDBB, 'M', 'كمم'), + (0xFDBC, 'M', 'لجم'), + (0xFDBD, 'M', 'نجح'), + (0xFDBE, 'M', 'جحي'), + (0xFDBF, 'M', 'حجي'), + (0xFDC0, 'M', 'مجي'), + (0xFDC1, 'M', 'فمي'), + (0xFDC2, 'M', 'بحي'), + (0xFDC3, 'M', 'كمم'), + (0xFDC4, 'M', 'عجم'), + (0xFDC5, 'M', 'صمم'), + (0xFDC6, 'M', 'سخي'), + (0xFDC7, 'M', 'نجي'), + (0xFDC8, 'X'), + (0xFDCF, 'V'), + (0xFDD0, 'X'), + (0xFDF0, 'M', 'صلے'), + (0xFDF1, 'M', 'قلے'), + (0xFDF2, 'M', 'الله'), + (0xFDF3, 'M', 'اكبر'), + (0xFDF4, 'M', 'محمد'), + (0xFDF5, 'M', 'صلعم'), + (0xFDF6, 'M', 'رسول'), + (0xFDF7, 'M', 'عليه'), + (0xFDF8, 'M', 'وسلم'), + (0xFDF9, 'M', 'صلى'), + (0xFDFA, '3', 'صلى الله عليه وسلم'), + (0xFDFB, '3', 'جل جلاله'), + (0xFDFC, 'M', 'ریال'), + (0xFDFD, 'V'), + (0xFE00, 'I'), + (0xFE10, '3', ','), + (0xFE11, 'M', '、'), + (0xFE12, 'X'), + (0xFE13, '3', ':'), + (0xFE14, '3', ';'), + (0xFE15, '3', '!'), + (0xFE16, '3', '?'), + (0xFE17, 'M', '〖'), + (0xFE18, 'M', '〗'), + (0xFE19, 'X'), + (0xFE20, 'V'), + (0xFE30, 'X'), + (0xFE31, 'M', '—'), + (0xFE32, 'M', '–'), + (0xFE33, '3', '_'), + (0xFE35, '3', '('), + (0xFE36, '3', ')'), + (0xFE37, '3', '{'), + (0xFE38, '3', '}'), + (0xFE39, 'M', '〔'), + (0xFE3A, 'M', '〕'), + (0xFE3B, 'M', '【'), + (0xFE3C, 'M', '】'), + (0xFE3D, 'M', '《'), + (0xFE3E, 'M', '》'), + (0xFE3F, 'M', '〈'), + (0xFE40, 'M', '〉'), + (0xFE41, 'M', '「'), + (0xFE42, 'M', '」'), + (0xFE43, 'M', '『'), + (0xFE44, 'M', '』'), + (0xFE45, 'V'), + (0xFE47, '3', '['), + (0xFE48, '3', ']'), + (0xFE49, '3', ' ̅'), + (0xFE4D, '3', '_'), + (0xFE50, '3', ','), + (0xFE51, 'M', '、'), + (0xFE52, 'X'), + (0xFE54, '3', ';'), + (0xFE55, '3', ':'), + (0xFE56, '3', '?'), + (0xFE57, '3', '!'), + (0xFE58, 'M', '—'), + (0xFE59, '3', '('), + (0xFE5A, '3', ')'), + (0xFE5B, '3', '{'), + (0xFE5C, '3', '}'), + (0xFE5D, 'M', '〔'), + ] + +def _seg_50() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFE5E, 'M', '〕'), + (0xFE5F, '3', '#'), + (0xFE60, '3', '&'), + (0xFE61, '3', '*'), + (0xFE62, '3', '+'), + (0xFE63, 'M', '-'), + (0xFE64, '3', '<'), + (0xFE65, '3', '>'), + (0xFE66, '3', '='), + (0xFE67, 'X'), + (0xFE68, '3', '\\'), + (0xFE69, '3', '$'), + (0xFE6A, '3', '%'), + (0xFE6B, '3', '@'), + (0xFE6C, 'X'), + (0xFE70, '3', ' ً'), + (0xFE71, 'M', 'ـً'), + (0xFE72, '3', ' ٌ'), + (0xFE73, 'V'), + (0xFE74, '3', ' ٍ'), + (0xFE75, 'X'), + (0xFE76, '3', ' َ'), + (0xFE77, 'M', 'ـَ'), + (0xFE78, '3', ' ُ'), + (0xFE79, 'M', 'ـُ'), + (0xFE7A, '3', ' ِ'), + (0xFE7B, 'M', 'ـِ'), + (0xFE7C, '3', ' ّ'), + (0xFE7D, 'M', 'ـّ'), + (0xFE7E, '3', ' ْ'), + (0xFE7F, 'M', 'ـْ'), + (0xFE80, 'M', 'ء'), + (0xFE81, 'M', 'آ'), + (0xFE83, 'M', 'أ'), + (0xFE85, 'M', 'ؤ'), + (0xFE87, 'M', 'إ'), + (0xFE89, 'M', 'ئ'), + (0xFE8D, 'M', 'ا'), + (0xFE8F, 'M', 'ب'), + (0xFE93, 'M', 'ة'), + (0xFE95, 'M', 'ت'), + (0xFE99, 'M', 'ث'), + (0xFE9D, 'M', 'ج'), + (0xFEA1, 'M', 'ح'), + (0xFEA5, 'M', 'خ'), + (0xFEA9, 'M', 'د'), + (0xFEAB, 'M', 'ذ'), + (0xFEAD, 'M', 'ر'), + (0xFEAF, 'M', 'ز'), + (0xFEB1, 'M', 'س'), + (0xFEB5, 'M', 'ش'), + (0xFEB9, 'M', 'ص'), + (0xFEBD, 'M', 'ض'), + (0xFEC1, 'M', 'ط'), + (0xFEC5, 'M', 'ظ'), + (0xFEC9, 'M', 'ع'), + (0xFECD, 'M', 'غ'), + (0xFED1, 'M', 'ف'), + (0xFED5, 'M', 'ق'), + (0xFED9, 'M', 'ك'), + (0xFEDD, 'M', 'ل'), + (0xFEE1, 'M', 'م'), + (0xFEE5, 'M', 'ن'), + (0xFEE9, 'M', 'ه'), + (0xFEED, 'M', 'و'), + (0xFEEF, 'M', 'ى'), + (0xFEF1, 'M', 'ي'), + (0xFEF5, 'M', 'لآ'), + (0xFEF7, 'M', 'لأ'), + (0xFEF9, 'M', 'لإ'), + (0xFEFB, 'M', 'لا'), + (0xFEFD, 'X'), + (0xFEFF, 'I'), + (0xFF00, 'X'), + (0xFF01, '3', '!'), + (0xFF02, '3', '"'), + (0xFF03, '3', '#'), + (0xFF04, '3', '$'), + (0xFF05, '3', '%'), + (0xFF06, '3', '&'), + (0xFF07, '3', '\''), + (0xFF08, '3', '('), + (0xFF09, '3', ')'), + (0xFF0A, '3', '*'), + (0xFF0B, '3', '+'), + (0xFF0C, '3', ','), + (0xFF0D, 'M', '-'), + (0xFF0E, 'M', '.'), + (0xFF0F, '3', '/'), + (0xFF10, 'M', '0'), + (0xFF11, 'M', '1'), + (0xFF12, 'M', '2'), + (0xFF13, 'M', '3'), + (0xFF14, 'M', '4'), + (0xFF15, 'M', '5'), + (0xFF16, 'M', '6'), + (0xFF17, 'M', '7'), + (0xFF18, 'M', '8'), + (0xFF19, 'M', '9'), + (0xFF1A, '3', ':'), + ] + +def _seg_51() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFF1B, '3', ';'), + (0xFF1C, '3', '<'), + (0xFF1D, '3', '='), + (0xFF1E, '3', '>'), + (0xFF1F, '3', '?'), + (0xFF20, '3', '@'), + (0xFF21, 'M', 'a'), + (0xFF22, 'M', 'b'), + (0xFF23, 'M', 'c'), + (0xFF24, 'M', 'd'), + (0xFF25, 'M', 'e'), + (0xFF26, 'M', 'f'), + (0xFF27, 'M', 'g'), + (0xFF28, 'M', 'h'), + (0xFF29, 'M', 'i'), + (0xFF2A, 'M', 'j'), + (0xFF2B, 'M', 'k'), + (0xFF2C, 'M', 'l'), + (0xFF2D, 'M', 'm'), + (0xFF2E, 'M', 'n'), + (0xFF2F, 'M', 'o'), + (0xFF30, 'M', 'p'), + (0xFF31, 'M', 'q'), + (0xFF32, 'M', 'r'), + (0xFF33, 'M', 's'), + (0xFF34, 'M', 't'), + (0xFF35, 'M', 'u'), + (0xFF36, 'M', 'v'), + (0xFF37, 'M', 'w'), + (0xFF38, 'M', 'x'), + (0xFF39, 'M', 'y'), + (0xFF3A, 'M', 'z'), + (0xFF3B, '3', '['), + (0xFF3C, '3', '\\'), + (0xFF3D, '3', ']'), + (0xFF3E, '3', '^'), + (0xFF3F, '3', '_'), + (0xFF40, '3', '`'), + (0xFF41, 'M', 'a'), + (0xFF42, 'M', 'b'), + (0xFF43, 'M', 'c'), + (0xFF44, 'M', 'd'), + (0xFF45, 'M', 'e'), + (0xFF46, 'M', 'f'), + (0xFF47, 'M', 'g'), + (0xFF48, 'M', 'h'), + (0xFF49, 'M', 'i'), + (0xFF4A, 'M', 'j'), + (0xFF4B, 'M', 'k'), + (0xFF4C, 'M', 'l'), + (0xFF4D, 'M', 'm'), + (0xFF4E, 'M', 'n'), + (0xFF4F, 'M', 'o'), + (0xFF50, 'M', 'p'), + (0xFF51, 'M', 'q'), + (0xFF52, 'M', 'r'), + (0xFF53, 'M', 's'), + (0xFF54, 'M', 't'), + (0xFF55, 'M', 'u'), + (0xFF56, 'M', 'v'), + (0xFF57, 'M', 'w'), + (0xFF58, 'M', 'x'), + (0xFF59, 'M', 'y'), + (0xFF5A, 'M', 'z'), + (0xFF5B, '3', '{'), + (0xFF5C, '3', '|'), + (0xFF5D, '3', '}'), + (0xFF5E, '3', '~'), + (0xFF5F, 'M', '⦅'), + (0xFF60, 'M', '⦆'), + (0xFF61, 'M', '.'), + (0xFF62, 'M', '「'), + (0xFF63, 'M', '」'), + (0xFF64, 'M', '、'), + (0xFF65, 'M', '・'), + (0xFF66, 'M', 'ヲ'), + (0xFF67, 'M', 'ァ'), + (0xFF68, 'M', 'ィ'), + (0xFF69, 'M', 'ゥ'), + (0xFF6A, 'M', 'ェ'), + (0xFF6B, 'M', 'ォ'), + (0xFF6C, 'M', 'ャ'), + (0xFF6D, 'M', 'ュ'), + (0xFF6E, 'M', 'ョ'), + (0xFF6F, 'M', 'ッ'), + (0xFF70, 'M', 'ー'), + (0xFF71, 'M', 'ア'), + (0xFF72, 'M', 'イ'), + (0xFF73, 'M', 'ウ'), + (0xFF74, 'M', 'エ'), + (0xFF75, 'M', 'オ'), + (0xFF76, 'M', 'カ'), + (0xFF77, 'M', 'キ'), + (0xFF78, 'M', 'ク'), + (0xFF79, 'M', 'ケ'), + (0xFF7A, 'M', 'コ'), + (0xFF7B, 'M', 'サ'), + (0xFF7C, 'M', 'シ'), + (0xFF7D, 'M', 'ス'), + (0xFF7E, 'M', 'セ'), + ] + +def _seg_52() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFF7F, 'M', 'ソ'), + (0xFF80, 'M', 'タ'), + (0xFF81, 'M', 'チ'), + (0xFF82, 'M', 'ツ'), + (0xFF83, 'M', 'テ'), + (0xFF84, 'M', 'ト'), + (0xFF85, 'M', 'ナ'), + (0xFF86, 'M', 'ニ'), + (0xFF87, 'M', 'ヌ'), + (0xFF88, 'M', 'ネ'), + (0xFF89, 'M', 'ノ'), + (0xFF8A, 'M', 'ハ'), + (0xFF8B, 'M', 'ヒ'), + (0xFF8C, 'M', 'フ'), + (0xFF8D, 'M', 'ヘ'), + (0xFF8E, 'M', 'ホ'), + (0xFF8F, 'M', 'マ'), + (0xFF90, 'M', 'ミ'), + (0xFF91, 'M', 'ム'), + (0xFF92, 'M', 'メ'), + (0xFF93, 'M', 'モ'), + (0xFF94, 'M', 'ヤ'), + (0xFF95, 'M', 'ユ'), + (0xFF96, 'M', 'ヨ'), + (0xFF97, 'M', 'ラ'), + (0xFF98, 'M', 'リ'), + (0xFF99, 'M', 'ル'), + (0xFF9A, 'M', 'レ'), + (0xFF9B, 'M', 'ロ'), + (0xFF9C, 'M', 'ワ'), + (0xFF9D, 'M', 'ン'), + (0xFF9E, 'M', '゙'), + (0xFF9F, 'M', '゚'), + (0xFFA0, 'X'), + (0xFFA1, 'M', 'ᄀ'), + (0xFFA2, 'M', 'ᄁ'), + (0xFFA3, 'M', 'ᆪ'), + (0xFFA4, 'M', 'ᄂ'), + (0xFFA5, 'M', 'ᆬ'), + (0xFFA6, 'M', 'ᆭ'), + (0xFFA7, 'M', 'ᄃ'), + (0xFFA8, 'M', 'ᄄ'), + (0xFFA9, 'M', 'ᄅ'), + (0xFFAA, 'M', 'ᆰ'), + (0xFFAB, 'M', 'ᆱ'), + (0xFFAC, 'M', 'ᆲ'), + (0xFFAD, 'M', 'ᆳ'), + (0xFFAE, 'M', 'ᆴ'), + (0xFFAF, 'M', 'ᆵ'), + (0xFFB0, 'M', 'ᄚ'), + (0xFFB1, 'M', 'ᄆ'), + (0xFFB2, 'M', 'ᄇ'), + (0xFFB3, 'M', 'ᄈ'), + (0xFFB4, 'M', 'ᄡ'), + (0xFFB5, 'M', 'ᄉ'), + (0xFFB6, 'M', 'ᄊ'), + (0xFFB7, 'M', 'ᄋ'), + (0xFFB8, 'M', 'ᄌ'), + (0xFFB9, 'M', 'ᄍ'), + (0xFFBA, 'M', 'ᄎ'), + (0xFFBB, 'M', 'ᄏ'), + (0xFFBC, 'M', 'ᄐ'), + (0xFFBD, 'M', 'ᄑ'), + (0xFFBE, 'M', 'ᄒ'), + (0xFFBF, 'X'), + (0xFFC2, 'M', 'ᅡ'), + (0xFFC3, 'M', 'ᅢ'), + (0xFFC4, 'M', 'ᅣ'), + (0xFFC5, 'M', 'ᅤ'), + (0xFFC6, 'M', 'ᅥ'), + (0xFFC7, 'M', 'ᅦ'), + (0xFFC8, 'X'), + (0xFFCA, 'M', 'ᅧ'), + (0xFFCB, 'M', 'ᅨ'), + (0xFFCC, 'M', 'ᅩ'), + (0xFFCD, 'M', 'ᅪ'), + (0xFFCE, 'M', 'ᅫ'), + (0xFFCF, 'M', 'ᅬ'), + (0xFFD0, 'X'), + (0xFFD2, 'M', 'ᅭ'), + (0xFFD3, 'M', 'ᅮ'), + (0xFFD4, 'M', 'ᅯ'), + (0xFFD5, 'M', 'ᅰ'), + (0xFFD6, 'M', 'ᅱ'), + (0xFFD7, 'M', 'ᅲ'), + (0xFFD8, 'X'), + (0xFFDA, 'M', 'ᅳ'), + (0xFFDB, 'M', 'ᅴ'), + (0xFFDC, 'M', 'ᅵ'), + (0xFFDD, 'X'), + (0xFFE0, 'M', '¢'), + (0xFFE1, 'M', '£'), + (0xFFE2, 'M', '¬'), + (0xFFE3, '3', ' ̄'), + (0xFFE4, 'M', '¦'), + (0xFFE5, 'M', '¥'), + (0xFFE6, 'M', '₩'), + (0xFFE7, 'X'), + (0xFFE8, 'M', '│'), + (0xFFE9, 'M', '←'), + ] + +def _seg_53() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0xFFEA, 'M', '↑'), + (0xFFEB, 'M', '→'), + (0xFFEC, 'M', '↓'), + (0xFFED, 'M', '■'), + (0xFFEE, 'M', '○'), + (0xFFEF, 'X'), + (0x10000, 'V'), + (0x1000C, 'X'), + (0x1000D, 'V'), + (0x10027, 'X'), + (0x10028, 'V'), + (0x1003B, 'X'), + (0x1003C, 'V'), + (0x1003E, 'X'), + (0x1003F, 'V'), + (0x1004E, 'X'), + (0x10050, 'V'), + (0x1005E, 'X'), + (0x10080, 'V'), + (0x100FB, 'X'), + (0x10100, 'V'), + (0x10103, 'X'), + (0x10107, 'V'), + (0x10134, 'X'), + (0x10137, 'V'), + (0x1018F, 'X'), + (0x10190, 'V'), + (0x1019D, 'X'), + (0x101A0, 'V'), + (0x101A1, 'X'), + (0x101D0, 'V'), + (0x101FE, 'X'), + (0x10280, 'V'), + (0x1029D, 'X'), + (0x102A0, 'V'), + (0x102D1, 'X'), + (0x102E0, 'V'), + (0x102FC, 'X'), + (0x10300, 'V'), + (0x10324, 'X'), + (0x1032D, 'V'), + (0x1034B, 'X'), + (0x10350, 'V'), + (0x1037B, 'X'), + (0x10380, 'V'), + (0x1039E, 'X'), + (0x1039F, 'V'), + (0x103C4, 'X'), + (0x103C8, 'V'), + (0x103D6, 'X'), + (0x10400, 'M', '𐐨'), + (0x10401, 'M', '𐐩'), + (0x10402, 'M', '𐐪'), + (0x10403, 'M', '𐐫'), + (0x10404, 'M', '𐐬'), + (0x10405, 'M', '𐐭'), + (0x10406, 'M', '𐐮'), + (0x10407, 'M', '𐐯'), + (0x10408, 'M', '𐐰'), + (0x10409, 'M', '𐐱'), + (0x1040A, 'M', '𐐲'), + (0x1040B, 'M', '𐐳'), + (0x1040C, 'M', '𐐴'), + (0x1040D, 'M', '𐐵'), + (0x1040E, 'M', '𐐶'), + (0x1040F, 'M', '𐐷'), + (0x10410, 'M', '𐐸'), + (0x10411, 'M', '𐐹'), + (0x10412, 'M', '𐐺'), + (0x10413, 'M', '𐐻'), + (0x10414, 'M', '𐐼'), + (0x10415, 'M', '𐐽'), + (0x10416, 'M', '𐐾'), + (0x10417, 'M', '𐐿'), + (0x10418, 'M', '𐑀'), + (0x10419, 'M', '𐑁'), + (0x1041A, 'M', '𐑂'), + (0x1041B, 'M', '𐑃'), + (0x1041C, 'M', '𐑄'), + (0x1041D, 'M', '𐑅'), + (0x1041E, 'M', '𐑆'), + (0x1041F, 'M', '𐑇'), + (0x10420, 'M', '𐑈'), + (0x10421, 'M', '𐑉'), + (0x10422, 'M', '𐑊'), + (0x10423, 'M', '𐑋'), + (0x10424, 'M', '𐑌'), + (0x10425, 'M', '𐑍'), + (0x10426, 'M', '𐑎'), + (0x10427, 'M', '𐑏'), + (0x10428, 'V'), + (0x1049E, 'X'), + (0x104A0, 'V'), + (0x104AA, 'X'), + (0x104B0, 'M', '𐓘'), + (0x104B1, 'M', '𐓙'), + (0x104B2, 'M', '𐓚'), + (0x104B3, 'M', '𐓛'), + (0x104B4, 'M', '𐓜'), + (0x104B5, 'M', '𐓝'), + ] + +def _seg_54() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x104B6, 'M', '𐓞'), + (0x104B7, 'M', '𐓟'), + (0x104B8, 'M', '𐓠'), + (0x104B9, 'M', '𐓡'), + (0x104BA, 'M', '𐓢'), + (0x104BB, 'M', '𐓣'), + (0x104BC, 'M', '𐓤'), + (0x104BD, 'M', '𐓥'), + (0x104BE, 'M', '𐓦'), + (0x104BF, 'M', '𐓧'), + (0x104C0, 'M', '𐓨'), + (0x104C1, 'M', '𐓩'), + (0x104C2, 'M', '𐓪'), + (0x104C3, 'M', '𐓫'), + (0x104C4, 'M', '𐓬'), + (0x104C5, 'M', '𐓭'), + (0x104C6, 'M', '𐓮'), + (0x104C7, 'M', '𐓯'), + (0x104C8, 'M', '𐓰'), + (0x104C9, 'M', '𐓱'), + (0x104CA, 'M', '𐓲'), + (0x104CB, 'M', '𐓳'), + (0x104CC, 'M', '𐓴'), + (0x104CD, 'M', '𐓵'), + (0x104CE, 'M', '𐓶'), + (0x104CF, 'M', '𐓷'), + (0x104D0, 'M', '𐓸'), + (0x104D1, 'M', '𐓹'), + (0x104D2, 'M', '𐓺'), + (0x104D3, 'M', '𐓻'), + (0x104D4, 'X'), + (0x104D8, 'V'), + (0x104FC, 'X'), + (0x10500, 'V'), + (0x10528, 'X'), + (0x10530, 'V'), + (0x10564, 'X'), + (0x1056F, 'V'), + (0x10570, 'M', '𐖗'), + (0x10571, 'M', '𐖘'), + (0x10572, 'M', '𐖙'), + (0x10573, 'M', '𐖚'), + (0x10574, 'M', '𐖛'), + (0x10575, 'M', '𐖜'), + (0x10576, 'M', '𐖝'), + (0x10577, 'M', '𐖞'), + (0x10578, 'M', '𐖟'), + (0x10579, 'M', '𐖠'), + (0x1057A, 'M', '𐖡'), + (0x1057B, 'X'), + (0x1057C, 'M', '𐖣'), + (0x1057D, 'M', '𐖤'), + (0x1057E, 'M', '𐖥'), + (0x1057F, 'M', '𐖦'), + (0x10580, 'M', '𐖧'), + (0x10581, 'M', '𐖨'), + (0x10582, 'M', '𐖩'), + (0x10583, 'M', '𐖪'), + (0x10584, 'M', '𐖫'), + (0x10585, 'M', '𐖬'), + (0x10586, 'M', '𐖭'), + (0x10587, 'M', '𐖮'), + (0x10588, 'M', '𐖯'), + (0x10589, 'M', '𐖰'), + (0x1058A, 'M', '𐖱'), + (0x1058B, 'X'), + (0x1058C, 'M', '𐖳'), + (0x1058D, 'M', '𐖴'), + (0x1058E, 'M', '𐖵'), + (0x1058F, 'M', '𐖶'), + (0x10590, 'M', '𐖷'), + (0x10591, 'M', '𐖸'), + (0x10592, 'M', '𐖹'), + (0x10593, 'X'), + (0x10594, 'M', '𐖻'), + (0x10595, 'M', '𐖼'), + (0x10596, 'X'), + (0x10597, 'V'), + (0x105A2, 'X'), + (0x105A3, 'V'), + (0x105B2, 'X'), + (0x105B3, 'V'), + (0x105BA, 'X'), + (0x105BB, 'V'), + (0x105BD, 'X'), + (0x10600, 'V'), + (0x10737, 'X'), + (0x10740, 'V'), + (0x10756, 'X'), + (0x10760, 'V'), + (0x10768, 'X'), + (0x10780, 'V'), + (0x10781, 'M', 'ː'), + (0x10782, 'M', 'ˑ'), + (0x10783, 'M', 'æ'), + (0x10784, 'M', 'ʙ'), + (0x10785, 'M', 'ɓ'), + (0x10786, 'X'), + (0x10787, 'M', 'ʣ'), + (0x10788, 'M', 'ꭦ'), + ] + +def _seg_55() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x10789, 'M', 'ʥ'), + (0x1078A, 'M', 'ʤ'), + (0x1078B, 'M', 'ɖ'), + (0x1078C, 'M', 'ɗ'), + (0x1078D, 'M', 'ᶑ'), + (0x1078E, 'M', 'ɘ'), + (0x1078F, 'M', 'ɞ'), + (0x10790, 'M', 'ʩ'), + (0x10791, 'M', 'ɤ'), + (0x10792, 'M', 'ɢ'), + (0x10793, 'M', 'ɠ'), + (0x10794, 'M', 'ʛ'), + (0x10795, 'M', 'ħ'), + (0x10796, 'M', 'ʜ'), + (0x10797, 'M', 'ɧ'), + (0x10798, 'M', 'ʄ'), + (0x10799, 'M', 'ʪ'), + (0x1079A, 'M', 'ʫ'), + (0x1079B, 'M', 'ɬ'), + (0x1079C, 'M', '𝼄'), + (0x1079D, 'M', 'ꞎ'), + (0x1079E, 'M', 'ɮ'), + (0x1079F, 'M', '𝼅'), + (0x107A0, 'M', 'ʎ'), + (0x107A1, 'M', '𝼆'), + (0x107A2, 'M', 'ø'), + (0x107A3, 'M', 'ɶ'), + (0x107A4, 'M', 'ɷ'), + (0x107A5, 'M', 'q'), + (0x107A6, 'M', 'ɺ'), + (0x107A7, 'M', '𝼈'), + (0x107A8, 'M', 'ɽ'), + (0x107A9, 'M', 'ɾ'), + (0x107AA, 'M', 'ʀ'), + (0x107AB, 'M', 'ʨ'), + (0x107AC, 'M', 'ʦ'), + (0x107AD, 'M', 'ꭧ'), + (0x107AE, 'M', 'ʧ'), + (0x107AF, 'M', 'ʈ'), + (0x107B0, 'M', 'ⱱ'), + (0x107B1, 'X'), + (0x107B2, 'M', 'ʏ'), + (0x107B3, 'M', 'ʡ'), + (0x107B4, 'M', 'ʢ'), + (0x107B5, 'M', 'ʘ'), + (0x107B6, 'M', 'ǀ'), + (0x107B7, 'M', 'ǁ'), + (0x107B8, 'M', 'ǂ'), + (0x107B9, 'M', '𝼊'), + (0x107BA, 'M', '𝼞'), + (0x107BB, 'X'), + (0x10800, 'V'), + (0x10806, 'X'), + (0x10808, 'V'), + (0x10809, 'X'), + (0x1080A, 'V'), + (0x10836, 'X'), + (0x10837, 'V'), + (0x10839, 'X'), + (0x1083C, 'V'), + (0x1083D, 'X'), + (0x1083F, 'V'), + (0x10856, 'X'), + (0x10857, 'V'), + (0x1089F, 'X'), + (0x108A7, 'V'), + (0x108B0, 'X'), + (0x108E0, 'V'), + (0x108F3, 'X'), + (0x108F4, 'V'), + (0x108F6, 'X'), + (0x108FB, 'V'), + (0x1091C, 'X'), + (0x1091F, 'V'), + (0x1093A, 'X'), + (0x1093F, 'V'), + (0x10940, 'X'), + (0x10980, 'V'), + (0x109B8, 'X'), + (0x109BC, 'V'), + (0x109D0, 'X'), + (0x109D2, 'V'), + (0x10A04, 'X'), + (0x10A05, 'V'), + (0x10A07, 'X'), + (0x10A0C, 'V'), + (0x10A14, 'X'), + (0x10A15, 'V'), + (0x10A18, 'X'), + (0x10A19, 'V'), + (0x10A36, 'X'), + (0x10A38, 'V'), + (0x10A3B, 'X'), + (0x10A3F, 'V'), + (0x10A49, 'X'), + (0x10A50, 'V'), + (0x10A59, 'X'), + (0x10A60, 'V'), + (0x10AA0, 'X'), + (0x10AC0, 'V'), + ] + +def _seg_56() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x10AE7, 'X'), + (0x10AEB, 'V'), + (0x10AF7, 'X'), + (0x10B00, 'V'), + (0x10B36, 'X'), + (0x10B39, 'V'), + (0x10B56, 'X'), + (0x10B58, 'V'), + (0x10B73, 'X'), + (0x10B78, 'V'), + (0x10B92, 'X'), + (0x10B99, 'V'), + (0x10B9D, 'X'), + (0x10BA9, 'V'), + (0x10BB0, 'X'), + (0x10C00, 'V'), + (0x10C49, 'X'), + (0x10C80, 'M', '𐳀'), + (0x10C81, 'M', '𐳁'), + (0x10C82, 'M', '𐳂'), + (0x10C83, 'M', '𐳃'), + (0x10C84, 'M', '𐳄'), + (0x10C85, 'M', '𐳅'), + (0x10C86, 'M', '𐳆'), + (0x10C87, 'M', '𐳇'), + (0x10C88, 'M', '𐳈'), + (0x10C89, 'M', '𐳉'), + (0x10C8A, 'M', '𐳊'), + (0x10C8B, 'M', '𐳋'), + (0x10C8C, 'M', '𐳌'), + (0x10C8D, 'M', '𐳍'), + (0x10C8E, 'M', '𐳎'), + (0x10C8F, 'M', '𐳏'), + (0x10C90, 'M', '𐳐'), + (0x10C91, 'M', '𐳑'), + (0x10C92, 'M', '𐳒'), + (0x10C93, 'M', '𐳓'), + (0x10C94, 'M', '𐳔'), + (0x10C95, 'M', '𐳕'), + (0x10C96, 'M', '𐳖'), + (0x10C97, 'M', '𐳗'), + (0x10C98, 'M', '𐳘'), + (0x10C99, 'M', '𐳙'), + (0x10C9A, 'M', '𐳚'), + (0x10C9B, 'M', '𐳛'), + (0x10C9C, 'M', '𐳜'), + (0x10C9D, 'M', '𐳝'), + (0x10C9E, 'M', '𐳞'), + (0x10C9F, 'M', '𐳟'), + (0x10CA0, 'M', '𐳠'), + (0x10CA1, 'M', '𐳡'), + (0x10CA2, 'M', '𐳢'), + (0x10CA3, 'M', '𐳣'), + (0x10CA4, 'M', '𐳤'), + (0x10CA5, 'M', '𐳥'), + (0x10CA6, 'M', '𐳦'), + (0x10CA7, 'M', '𐳧'), + (0x10CA8, 'M', '𐳨'), + (0x10CA9, 'M', '𐳩'), + (0x10CAA, 'M', '𐳪'), + (0x10CAB, 'M', '𐳫'), + (0x10CAC, 'M', '𐳬'), + (0x10CAD, 'M', '𐳭'), + (0x10CAE, 'M', '𐳮'), + (0x10CAF, 'M', '𐳯'), + (0x10CB0, 'M', '𐳰'), + (0x10CB1, 'M', '𐳱'), + (0x10CB2, 'M', '𐳲'), + (0x10CB3, 'X'), + (0x10CC0, 'V'), + (0x10CF3, 'X'), + (0x10CFA, 'V'), + (0x10D28, 'X'), + (0x10D30, 'V'), + (0x10D3A, 'X'), + (0x10E60, 'V'), + (0x10E7F, 'X'), + (0x10E80, 'V'), + (0x10EAA, 'X'), + (0x10EAB, 'V'), + (0x10EAE, 'X'), + (0x10EB0, 'V'), + (0x10EB2, 'X'), + (0x10EFD, 'V'), + (0x10F28, 'X'), + (0x10F30, 'V'), + (0x10F5A, 'X'), + (0x10F70, 'V'), + (0x10F8A, 'X'), + (0x10FB0, 'V'), + (0x10FCC, 'X'), + (0x10FE0, 'V'), + (0x10FF7, 'X'), + (0x11000, 'V'), + (0x1104E, 'X'), + (0x11052, 'V'), + (0x11076, 'X'), + (0x1107F, 'V'), + (0x110BD, 'X'), + (0x110BE, 'V'), + ] + +def _seg_57() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x110C3, 'X'), + (0x110D0, 'V'), + (0x110E9, 'X'), + (0x110F0, 'V'), + (0x110FA, 'X'), + (0x11100, 'V'), + (0x11135, 'X'), + (0x11136, 'V'), + (0x11148, 'X'), + (0x11150, 'V'), + (0x11177, 'X'), + (0x11180, 'V'), + (0x111E0, 'X'), + (0x111E1, 'V'), + (0x111F5, 'X'), + (0x11200, 'V'), + (0x11212, 'X'), + (0x11213, 'V'), + (0x11242, 'X'), + (0x11280, 'V'), + (0x11287, 'X'), + (0x11288, 'V'), + (0x11289, 'X'), + (0x1128A, 'V'), + (0x1128E, 'X'), + (0x1128F, 'V'), + (0x1129E, 'X'), + (0x1129F, 'V'), + (0x112AA, 'X'), + (0x112B0, 'V'), + (0x112EB, 'X'), + (0x112F0, 'V'), + (0x112FA, 'X'), + (0x11300, 'V'), + (0x11304, 'X'), + (0x11305, 'V'), + (0x1130D, 'X'), + (0x1130F, 'V'), + (0x11311, 'X'), + (0x11313, 'V'), + (0x11329, 'X'), + (0x1132A, 'V'), + (0x11331, 'X'), + (0x11332, 'V'), + (0x11334, 'X'), + (0x11335, 'V'), + (0x1133A, 'X'), + (0x1133B, 'V'), + (0x11345, 'X'), + (0x11347, 'V'), + (0x11349, 'X'), + (0x1134B, 'V'), + (0x1134E, 'X'), + (0x11350, 'V'), + (0x11351, 'X'), + (0x11357, 'V'), + (0x11358, 'X'), + (0x1135D, 'V'), + (0x11364, 'X'), + (0x11366, 'V'), + (0x1136D, 'X'), + (0x11370, 'V'), + (0x11375, 'X'), + (0x11400, 'V'), + (0x1145C, 'X'), + (0x1145D, 'V'), + (0x11462, 'X'), + (0x11480, 'V'), + (0x114C8, 'X'), + (0x114D0, 'V'), + (0x114DA, 'X'), + (0x11580, 'V'), + (0x115B6, 'X'), + (0x115B8, 'V'), + (0x115DE, 'X'), + (0x11600, 'V'), + (0x11645, 'X'), + (0x11650, 'V'), + (0x1165A, 'X'), + (0x11660, 'V'), + (0x1166D, 'X'), + (0x11680, 'V'), + (0x116BA, 'X'), + (0x116C0, 'V'), + (0x116CA, 'X'), + (0x11700, 'V'), + (0x1171B, 'X'), + (0x1171D, 'V'), + (0x1172C, 'X'), + (0x11730, 'V'), + (0x11747, 'X'), + (0x11800, 'V'), + (0x1183C, 'X'), + (0x118A0, 'M', '𑣀'), + (0x118A1, 'M', '𑣁'), + (0x118A2, 'M', '𑣂'), + (0x118A3, 'M', '𑣃'), + (0x118A4, 'M', '𑣄'), + (0x118A5, 'M', '𑣅'), + (0x118A6, 'M', '𑣆'), + ] + +def _seg_58() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x118A7, 'M', '𑣇'), + (0x118A8, 'M', '𑣈'), + (0x118A9, 'M', '𑣉'), + (0x118AA, 'M', '𑣊'), + (0x118AB, 'M', '𑣋'), + (0x118AC, 'M', '𑣌'), + (0x118AD, 'M', '𑣍'), + (0x118AE, 'M', '𑣎'), + (0x118AF, 'M', '𑣏'), + (0x118B0, 'M', '𑣐'), + (0x118B1, 'M', '𑣑'), + (0x118B2, 'M', '𑣒'), + (0x118B3, 'M', '𑣓'), + (0x118B4, 'M', '𑣔'), + (0x118B5, 'M', '𑣕'), + (0x118B6, 'M', '𑣖'), + (0x118B7, 'M', '𑣗'), + (0x118B8, 'M', '𑣘'), + (0x118B9, 'M', '𑣙'), + (0x118BA, 'M', '𑣚'), + (0x118BB, 'M', '𑣛'), + (0x118BC, 'M', '𑣜'), + (0x118BD, 'M', '𑣝'), + (0x118BE, 'M', '𑣞'), + (0x118BF, 'M', '𑣟'), + (0x118C0, 'V'), + (0x118F3, 'X'), + (0x118FF, 'V'), + (0x11907, 'X'), + (0x11909, 'V'), + (0x1190A, 'X'), + (0x1190C, 'V'), + (0x11914, 'X'), + (0x11915, 'V'), + (0x11917, 'X'), + (0x11918, 'V'), + (0x11936, 'X'), + (0x11937, 'V'), + (0x11939, 'X'), + (0x1193B, 'V'), + (0x11947, 'X'), + (0x11950, 'V'), + (0x1195A, 'X'), + (0x119A0, 'V'), + (0x119A8, 'X'), + (0x119AA, 'V'), + (0x119D8, 'X'), + (0x119DA, 'V'), + (0x119E5, 'X'), + (0x11A00, 'V'), + (0x11A48, 'X'), + (0x11A50, 'V'), + (0x11AA3, 'X'), + (0x11AB0, 'V'), + (0x11AF9, 'X'), + (0x11B00, 'V'), + (0x11B0A, 'X'), + (0x11C00, 'V'), + (0x11C09, 'X'), + (0x11C0A, 'V'), + (0x11C37, 'X'), + (0x11C38, 'V'), + (0x11C46, 'X'), + (0x11C50, 'V'), + (0x11C6D, 'X'), + (0x11C70, 'V'), + (0x11C90, 'X'), + (0x11C92, 'V'), + (0x11CA8, 'X'), + (0x11CA9, 'V'), + (0x11CB7, 'X'), + (0x11D00, 'V'), + (0x11D07, 'X'), + (0x11D08, 'V'), + (0x11D0A, 'X'), + (0x11D0B, 'V'), + (0x11D37, 'X'), + (0x11D3A, 'V'), + (0x11D3B, 'X'), + (0x11D3C, 'V'), + (0x11D3E, 'X'), + (0x11D3F, 'V'), + (0x11D48, 'X'), + (0x11D50, 'V'), + (0x11D5A, 'X'), + (0x11D60, 'V'), + (0x11D66, 'X'), + (0x11D67, 'V'), + (0x11D69, 'X'), + (0x11D6A, 'V'), + (0x11D8F, 'X'), + (0x11D90, 'V'), + (0x11D92, 'X'), + (0x11D93, 'V'), + (0x11D99, 'X'), + (0x11DA0, 'V'), + (0x11DAA, 'X'), + (0x11EE0, 'V'), + (0x11EF9, 'X'), + (0x11F00, 'V'), + ] + +def _seg_59() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x11F11, 'X'), + (0x11F12, 'V'), + (0x11F3B, 'X'), + (0x11F3E, 'V'), + (0x11F5A, 'X'), + (0x11FB0, 'V'), + (0x11FB1, 'X'), + (0x11FC0, 'V'), + (0x11FF2, 'X'), + (0x11FFF, 'V'), + (0x1239A, 'X'), + (0x12400, 'V'), + (0x1246F, 'X'), + (0x12470, 'V'), + (0x12475, 'X'), + (0x12480, 'V'), + (0x12544, 'X'), + (0x12F90, 'V'), + (0x12FF3, 'X'), + (0x13000, 'V'), + (0x13430, 'X'), + (0x13440, 'V'), + (0x13456, 'X'), + (0x14400, 'V'), + (0x14647, 'X'), + (0x16800, 'V'), + (0x16A39, 'X'), + (0x16A40, 'V'), + (0x16A5F, 'X'), + (0x16A60, 'V'), + (0x16A6A, 'X'), + (0x16A6E, 'V'), + (0x16ABF, 'X'), + (0x16AC0, 'V'), + (0x16ACA, 'X'), + (0x16AD0, 'V'), + (0x16AEE, 'X'), + (0x16AF0, 'V'), + (0x16AF6, 'X'), + (0x16B00, 'V'), + (0x16B46, 'X'), + (0x16B50, 'V'), + (0x16B5A, 'X'), + (0x16B5B, 'V'), + (0x16B62, 'X'), + (0x16B63, 'V'), + (0x16B78, 'X'), + (0x16B7D, 'V'), + (0x16B90, 'X'), + (0x16E40, 'M', '𖹠'), + (0x16E41, 'M', '𖹡'), + (0x16E42, 'M', '𖹢'), + (0x16E43, 'M', '𖹣'), + (0x16E44, 'M', '𖹤'), + (0x16E45, 'M', '𖹥'), + (0x16E46, 'M', '𖹦'), + (0x16E47, 'M', '𖹧'), + (0x16E48, 'M', '𖹨'), + (0x16E49, 'M', '𖹩'), + (0x16E4A, 'M', '𖹪'), + (0x16E4B, 'M', '𖹫'), + (0x16E4C, 'M', '𖹬'), + (0x16E4D, 'M', '𖹭'), + (0x16E4E, 'M', '𖹮'), + (0x16E4F, 'M', '𖹯'), + (0x16E50, 'M', '𖹰'), + (0x16E51, 'M', '𖹱'), + (0x16E52, 'M', '𖹲'), + (0x16E53, 'M', '𖹳'), + (0x16E54, 'M', '𖹴'), + (0x16E55, 'M', '𖹵'), + (0x16E56, 'M', '𖹶'), + (0x16E57, 'M', '𖹷'), + (0x16E58, 'M', '𖹸'), + (0x16E59, 'M', '𖹹'), + (0x16E5A, 'M', '𖹺'), + (0x16E5B, 'M', '𖹻'), + (0x16E5C, 'M', '𖹼'), + (0x16E5D, 'M', '𖹽'), + (0x16E5E, 'M', '𖹾'), + (0x16E5F, 'M', '𖹿'), + (0x16E60, 'V'), + (0x16E9B, 'X'), + (0x16F00, 'V'), + (0x16F4B, 'X'), + (0x16F4F, 'V'), + (0x16F88, 'X'), + (0x16F8F, 'V'), + (0x16FA0, 'X'), + (0x16FE0, 'V'), + (0x16FE5, 'X'), + (0x16FF0, 'V'), + (0x16FF2, 'X'), + (0x17000, 'V'), + (0x187F8, 'X'), + (0x18800, 'V'), + (0x18CD6, 'X'), + (0x18D00, 'V'), + (0x18D09, 'X'), + (0x1AFF0, 'V'), + ] + +def _seg_60() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1AFF4, 'X'), + (0x1AFF5, 'V'), + (0x1AFFC, 'X'), + (0x1AFFD, 'V'), + (0x1AFFF, 'X'), + (0x1B000, 'V'), + (0x1B123, 'X'), + (0x1B132, 'V'), + (0x1B133, 'X'), + (0x1B150, 'V'), + (0x1B153, 'X'), + (0x1B155, 'V'), + (0x1B156, 'X'), + (0x1B164, 'V'), + (0x1B168, 'X'), + (0x1B170, 'V'), + (0x1B2FC, 'X'), + (0x1BC00, 'V'), + (0x1BC6B, 'X'), + (0x1BC70, 'V'), + (0x1BC7D, 'X'), + (0x1BC80, 'V'), + (0x1BC89, 'X'), + (0x1BC90, 'V'), + (0x1BC9A, 'X'), + (0x1BC9C, 'V'), + (0x1BCA0, 'I'), + (0x1BCA4, 'X'), + (0x1CF00, 'V'), + (0x1CF2E, 'X'), + (0x1CF30, 'V'), + (0x1CF47, 'X'), + (0x1CF50, 'V'), + (0x1CFC4, 'X'), + (0x1D000, 'V'), + (0x1D0F6, 'X'), + (0x1D100, 'V'), + (0x1D127, 'X'), + (0x1D129, 'V'), + (0x1D15E, 'M', '𝅗𝅥'), + (0x1D15F, 'M', '𝅘𝅥'), + (0x1D160, 'M', '𝅘𝅥𝅮'), + (0x1D161, 'M', '𝅘𝅥𝅯'), + (0x1D162, 'M', '𝅘𝅥𝅰'), + (0x1D163, 'M', '𝅘𝅥𝅱'), + (0x1D164, 'M', '𝅘𝅥𝅲'), + (0x1D165, 'V'), + (0x1D173, 'X'), + (0x1D17B, 'V'), + (0x1D1BB, 'M', '𝆹𝅥'), + (0x1D1BC, 'M', '𝆺𝅥'), + (0x1D1BD, 'M', '𝆹𝅥𝅮'), + (0x1D1BE, 'M', '𝆺𝅥𝅮'), + (0x1D1BF, 'M', '𝆹𝅥𝅯'), + (0x1D1C0, 'M', '𝆺𝅥𝅯'), + (0x1D1C1, 'V'), + (0x1D1EB, 'X'), + (0x1D200, 'V'), + (0x1D246, 'X'), + (0x1D2C0, 'V'), + (0x1D2D4, 'X'), + (0x1D2E0, 'V'), + (0x1D2F4, 'X'), + (0x1D300, 'V'), + (0x1D357, 'X'), + (0x1D360, 'V'), + (0x1D379, 'X'), + (0x1D400, 'M', 'a'), + (0x1D401, 'M', 'b'), + (0x1D402, 'M', 'c'), + (0x1D403, 'M', 'd'), + (0x1D404, 'M', 'e'), + (0x1D405, 'M', 'f'), + (0x1D406, 'M', 'g'), + (0x1D407, 'M', 'h'), + (0x1D408, 'M', 'i'), + (0x1D409, 'M', 'j'), + (0x1D40A, 'M', 'k'), + (0x1D40B, 'M', 'l'), + (0x1D40C, 'M', 'm'), + (0x1D40D, 'M', 'n'), + (0x1D40E, 'M', 'o'), + (0x1D40F, 'M', 'p'), + (0x1D410, 'M', 'q'), + (0x1D411, 'M', 'r'), + (0x1D412, 'M', 's'), + (0x1D413, 'M', 't'), + (0x1D414, 'M', 'u'), + (0x1D415, 'M', 'v'), + (0x1D416, 'M', 'w'), + (0x1D417, 'M', 'x'), + (0x1D418, 'M', 'y'), + (0x1D419, 'M', 'z'), + (0x1D41A, 'M', 'a'), + (0x1D41B, 'M', 'b'), + (0x1D41C, 'M', 'c'), + (0x1D41D, 'M', 'd'), + (0x1D41E, 'M', 'e'), + (0x1D41F, 'M', 'f'), + (0x1D420, 'M', 'g'), + ] + +def _seg_61() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D421, 'M', 'h'), + (0x1D422, 'M', 'i'), + (0x1D423, 'M', 'j'), + (0x1D424, 'M', 'k'), + (0x1D425, 'M', 'l'), + (0x1D426, 'M', 'm'), + (0x1D427, 'M', 'n'), + (0x1D428, 'M', 'o'), + (0x1D429, 'M', 'p'), + (0x1D42A, 'M', 'q'), + (0x1D42B, 'M', 'r'), + (0x1D42C, 'M', 's'), + (0x1D42D, 'M', 't'), + (0x1D42E, 'M', 'u'), + (0x1D42F, 'M', 'v'), + (0x1D430, 'M', 'w'), + (0x1D431, 'M', 'x'), + (0x1D432, 'M', 'y'), + (0x1D433, 'M', 'z'), + (0x1D434, 'M', 'a'), + (0x1D435, 'M', 'b'), + (0x1D436, 'M', 'c'), + (0x1D437, 'M', 'd'), + (0x1D438, 'M', 'e'), + (0x1D439, 'M', 'f'), + (0x1D43A, 'M', 'g'), + (0x1D43B, 'M', 'h'), + (0x1D43C, 'M', 'i'), + (0x1D43D, 'M', 'j'), + (0x1D43E, 'M', 'k'), + (0x1D43F, 'M', 'l'), + (0x1D440, 'M', 'm'), + (0x1D441, 'M', 'n'), + (0x1D442, 'M', 'o'), + (0x1D443, 'M', 'p'), + (0x1D444, 'M', 'q'), + (0x1D445, 'M', 'r'), + (0x1D446, 'M', 's'), + (0x1D447, 'M', 't'), + (0x1D448, 'M', 'u'), + (0x1D449, 'M', 'v'), + (0x1D44A, 'M', 'w'), + (0x1D44B, 'M', 'x'), + (0x1D44C, 'M', 'y'), + (0x1D44D, 'M', 'z'), + (0x1D44E, 'M', 'a'), + (0x1D44F, 'M', 'b'), + (0x1D450, 'M', 'c'), + (0x1D451, 'M', 'd'), + (0x1D452, 'M', 'e'), + (0x1D453, 'M', 'f'), + (0x1D454, 'M', 'g'), + (0x1D455, 'X'), + (0x1D456, 'M', 'i'), + (0x1D457, 'M', 'j'), + (0x1D458, 'M', 'k'), + (0x1D459, 'M', 'l'), + (0x1D45A, 'M', 'm'), + (0x1D45B, 'M', 'n'), + (0x1D45C, 'M', 'o'), + (0x1D45D, 'M', 'p'), + (0x1D45E, 'M', 'q'), + (0x1D45F, 'M', 'r'), + (0x1D460, 'M', 's'), + (0x1D461, 'M', 't'), + (0x1D462, 'M', 'u'), + (0x1D463, 'M', 'v'), + (0x1D464, 'M', 'w'), + (0x1D465, 'M', 'x'), + (0x1D466, 'M', 'y'), + (0x1D467, 'M', 'z'), + (0x1D468, 'M', 'a'), + (0x1D469, 'M', 'b'), + (0x1D46A, 'M', 'c'), + (0x1D46B, 'M', 'd'), + (0x1D46C, 'M', 'e'), + (0x1D46D, 'M', 'f'), + (0x1D46E, 'M', 'g'), + (0x1D46F, 'M', 'h'), + (0x1D470, 'M', 'i'), + (0x1D471, 'M', 'j'), + (0x1D472, 'M', 'k'), + (0x1D473, 'M', 'l'), + (0x1D474, 'M', 'm'), + (0x1D475, 'M', 'n'), + (0x1D476, 'M', 'o'), + (0x1D477, 'M', 'p'), + (0x1D478, 'M', 'q'), + (0x1D479, 'M', 'r'), + (0x1D47A, 'M', 's'), + (0x1D47B, 'M', 't'), + (0x1D47C, 'M', 'u'), + (0x1D47D, 'M', 'v'), + (0x1D47E, 'M', 'w'), + (0x1D47F, 'M', 'x'), + (0x1D480, 'M', 'y'), + (0x1D481, 'M', 'z'), + (0x1D482, 'M', 'a'), + (0x1D483, 'M', 'b'), + (0x1D484, 'M', 'c'), + ] + +def _seg_62() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D485, 'M', 'd'), + (0x1D486, 'M', 'e'), + (0x1D487, 'M', 'f'), + (0x1D488, 'M', 'g'), + (0x1D489, 'M', 'h'), + (0x1D48A, 'M', 'i'), + (0x1D48B, 'M', 'j'), + (0x1D48C, 'M', 'k'), + (0x1D48D, 'M', 'l'), + (0x1D48E, 'M', 'm'), + (0x1D48F, 'M', 'n'), + (0x1D490, 'M', 'o'), + (0x1D491, 'M', 'p'), + (0x1D492, 'M', 'q'), + (0x1D493, 'M', 'r'), + (0x1D494, 'M', 's'), + (0x1D495, 'M', 't'), + (0x1D496, 'M', 'u'), + (0x1D497, 'M', 'v'), + (0x1D498, 'M', 'w'), + (0x1D499, 'M', 'x'), + (0x1D49A, 'M', 'y'), + (0x1D49B, 'M', 'z'), + (0x1D49C, 'M', 'a'), + (0x1D49D, 'X'), + (0x1D49E, 'M', 'c'), + (0x1D49F, 'M', 'd'), + (0x1D4A0, 'X'), + (0x1D4A2, 'M', 'g'), + (0x1D4A3, 'X'), + (0x1D4A5, 'M', 'j'), + (0x1D4A6, 'M', 'k'), + (0x1D4A7, 'X'), + (0x1D4A9, 'M', 'n'), + (0x1D4AA, 'M', 'o'), + (0x1D4AB, 'M', 'p'), + (0x1D4AC, 'M', 'q'), + (0x1D4AD, 'X'), + (0x1D4AE, 'M', 's'), + (0x1D4AF, 'M', 't'), + (0x1D4B0, 'M', 'u'), + (0x1D4B1, 'M', 'v'), + (0x1D4B2, 'M', 'w'), + (0x1D4B3, 'M', 'x'), + (0x1D4B4, 'M', 'y'), + (0x1D4B5, 'M', 'z'), + (0x1D4B6, 'M', 'a'), + (0x1D4B7, 'M', 'b'), + (0x1D4B8, 'M', 'c'), + (0x1D4B9, 'M', 'd'), + (0x1D4BA, 'X'), + (0x1D4BB, 'M', 'f'), + (0x1D4BC, 'X'), + (0x1D4BD, 'M', 'h'), + (0x1D4BE, 'M', 'i'), + (0x1D4BF, 'M', 'j'), + (0x1D4C0, 'M', 'k'), + (0x1D4C1, 'M', 'l'), + (0x1D4C2, 'M', 'm'), + (0x1D4C3, 'M', 'n'), + (0x1D4C4, 'X'), + (0x1D4C5, 'M', 'p'), + (0x1D4C6, 'M', 'q'), + (0x1D4C7, 'M', 'r'), + (0x1D4C8, 'M', 's'), + (0x1D4C9, 'M', 't'), + (0x1D4CA, 'M', 'u'), + (0x1D4CB, 'M', 'v'), + (0x1D4CC, 'M', 'w'), + (0x1D4CD, 'M', 'x'), + (0x1D4CE, 'M', 'y'), + (0x1D4CF, 'M', 'z'), + (0x1D4D0, 'M', 'a'), + (0x1D4D1, 'M', 'b'), + (0x1D4D2, 'M', 'c'), + (0x1D4D3, 'M', 'd'), + (0x1D4D4, 'M', 'e'), + (0x1D4D5, 'M', 'f'), + (0x1D4D6, 'M', 'g'), + (0x1D4D7, 'M', 'h'), + (0x1D4D8, 'M', 'i'), + (0x1D4D9, 'M', 'j'), + (0x1D4DA, 'M', 'k'), + (0x1D4DB, 'M', 'l'), + (0x1D4DC, 'M', 'm'), + (0x1D4DD, 'M', 'n'), + (0x1D4DE, 'M', 'o'), + (0x1D4DF, 'M', 'p'), + (0x1D4E0, 'M', 'q'), + (0x1D4E1, 'M', 'r'), + (0x1D4E2, 'M', 's'), + (0x1D4E3, 'M', 't'), + (0x1D4E4, 'M', 'u'), + (0x1D4E5, 'M', 'v'), + (0x1D4E6, 'M', 'w'), + (0x1D4E7, 'M', 'x'), + (0x1D4E8, 'M', 'y'), + (0x1D4E9, 'M', 'z'), + (0x1D4EA, 'M', 'a'), + (0x1D4EB, 'M', 'b'), + ] + +def _seg_63() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D4EC, 'M', 'c'), + (0x1D4ED, 'M', 'd'), + (0x1D4EE, 'M', 'e'), + (0x1D4EF, 'M', 'f'), + (0x1D4F0, 'M', 'g'), + (0x1D4F1, 'M', 'h'), + (0x1D4F2, 'M', 'i'), + (0x1D4F3, 'M', 'j'), + (0x1D4F4, 'M', 'k'), + (0x1D4F5, 'M', 'l'), + (0x1D4F6, 'M', 'm'), + (0x1D4F7, 'M', 'n'), + (0x1D4F8, 'M', 'o'), + (0x1D4F9, 'M', 'p'), + (0x1D4FA, 'M', 'q'), + (0x1D4FB, 'M', 'r'), + (0x1D4FC, 'M', 's'), + (0x1D4FD, 'M', 't'), + (0x1D4FE, 'M', 'u'), + (0x1D4FF, 'M', 'v'), + (0x1D500, 'M', 'w'), + (0x1D501, 'M', 'x'), + (0x1D502, 'M', 'y'), + (0x1D503, 'M', 'z'), + (0x1D504, 'M', 'a'), + (0x1D505, 'M', 'b'), + (0x1D506, 'X'), + (0x1D507, 'M', 'd'), + (0x1D508, 'M', 'e'), + (0x1D509, 'M', 'f'), + (0x1D50A, 'M', 'g'), + (0x1D50B, 'X'), + (0x1D50D, 'M', 'j'), + (0x1D50E, 'M', 'k'), + (0x1D50F, 'M', 'l'), + (0x1D510, 'M', 'm'), + (0x1D511, 'M', 'n'), + (0x1D512, 'M', 'o'), + (0x1D513, 'M', 'p'), + (0x1D514, 'M', 'q'), + (0x1D515, 'X'), + (0x1D516, 'M', 's'), + (0x1D517, 'M', 't'), + (0x1D518, 'M', 'u'), + (0x1D519, 'M', 'v'), + (0x1D51A, 'M', 'w'), + (0x1D51B, 'M', 'x'), + (0x1D51C, 'M', 'y'), + (0x1D51D, 'X'), + (0x1D51E, 'M', 'a'), + (0x1D51F, 'M', 'b'), + (0x1D520, 'M', 'c'), + (0x1D521, 'M', 'd'), + (0x1D522, 'M', 'e'), + (0x1D523, 'M', 'f'), + (0x1D524, 'M', 'g'), + (0x1D525, 'M', 'h'), + (0x1D526, 'M', 'i'), + (0x1D527, 'M', 'j'), + (0x1D528, 'M', 'k'), + (0x1D529, 'M', 'l'), + (0x1D52A, 'M', 'm'), + (0x1D52B, 'M', 'n'), + (0x1D52C, 'M', 'o'), + (0x1D52D, 'M', 'p'), + (0x1D52E, 'M', 'q'), + (0x1D52F, 'M', 'r'), + (0x1D530, 'M', 's'), + (0x1D531, 'M', 't'), + (0x1D532, 'M', 'u'), + (0x1D533, 'M', 'v'), + (0x1D534, 'M', 'w'), + (0x1D535, 'M', 'x'), + (0x1D536, 'M', 'y'), + (0x1D537, 'M', 'z'), + (0x1D538, 'M', 'a'), + (0x1D539, 'M', 'b'), + (0x1D53A, 'X'), + (0x1D53B, 'M', 'd'), + (0x1D53C, 'M', 'e'), + (0x1D53D, 'M', 'f'), + (0x1D53E, 'M', 'g'), + (0x1D53F, 'X'), + (0x1D540, 'M', 'i'), + (0x1D541, 'M', 'j'), + (0x1D542, 'M', 'k'), + (0x1D543, 'M', 'l'), + (0x1D544, 'M', 'm'), + (0x1D545, 'X'), + (0x1D546, 'M', 'o'), + (0x1D547, 'X'), + (0x1D54A, 'M', 's'), + (0x1D54B, 'M', 't'), + (0x1D54C, 'M', 'u'), + (0x1D54D, 'M', 'v'), + (0x1D54E, 'M', 'w'), + (0x1D54F, 'M', 'x'), + (0x1D550, 'M', 'y'), + (0x1D551, 'X'), + (0x1D552, 'M', 'a'), + ] + +def _seg_64() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D553, 'M', 'b'), + (0x1D554, 'M', 'c'), + (0x1D555, 'M', 'd'), + (0x1D556, 'M', 'e'), + (0x1D557, 'M', 'f'), + (0x1D558, 'M', 'g'), + (0x1D559, 'M', 'h'), + (0x1D55A, 'M', 'i'), + (0x1D55B, 'M', 'j'), + (0x1D55C, 'M', 'k'), + (0x1D55D, 'M', 'l'), + (0x1D55E, 'M', 'm'), + (0x1D55F, 'M', 'n'), + (0x1D560, 'M', 'o'), + (0x1D561, 'M', 'p'), + (0x1D562, 'M', 'q'), + (0x1D563, 'M', 'r'), + (0x1D564, 'M', 's'), + (0x1D565, 'M', 't'), + (0x1D566, 'M', 'u'), + (0x1D567, 'M', 'v'), + (0x1D568, 'M', 'w'), + (0x1D569, 'M', 'x'), + (0x1D56A, 'M', 'y'), + (0x1D56B, 'M', 'z'), + (0x1D56C, 'M', 'a'), + (0x1D56D, 'M', 'b'), + (0x1D56E, 'M', 'c'), + (0x1D56F, 'M', 'd'), + (0x1D570, 'M', 'e'), + (0x1D571, 'M', 'f'), + (0x1D572, 'M', 'g'), + (0x1D573, 'M', 'h'), + (0x1D574, 'M', 'i'), + (0x1D575, 'M', 'j'), + (0x1D576, 'M', 'k'), + (0x1D577, 'M', 'l'), + (0x1D578, 'M', 'm'), + (0x1D579, 'M', 'n'), + (0x1D57A, 'M', 'o'), + (0x1D57B, 'M', 'p'), + (0x1D57C, 'M', 'q'), + (0x1D57D, 'M', 'r'), + (0x1D57E, 'M', 's'), + (0x1D57F, 'M', 't'), + (0x1D580, 'M', 'u'), + (0x1D581, 'M', 'v'), + (0x1D582, 'M', 'w'), + (0x1D583, 'M', 'x'), + (0x1D584, 'M', 'y'), + (0x1D585, 'M', 'z'), + (0x1D586, 'M', 'a'), + (0x1D587, 'M', 'b'), + (0x1D588, 'M', 'c'), + (0x1D589, 'M', 'd'), + (0x1D58A, 'M', 'e'), + (0x1D58B, 'M', 'f'), + (0x1D58C, 'M', 'g'), + (0x1D58D, 'M', 'h'), + (0x1D58E, 'M', 'i'), + (0x1D58F, 'M', 'j'), + (0x1D590, 'M', 'k'), + (0x1D591, 'M', 'l'), + (0x1D592, 'M', 'm'), + (0x1D593, 'M', 'n'), + (0x1D594, 'M', 'o'), + (0x1D595, 'M', 'p'), + (0x1D596, 'M', 'q'), + (0x1D597, 'M', 'r'), + (0x1D598, 'M', 's'), + (0x1D599, 'M', 't'), + (0x1D59A, 'M', 'u'), + (0x1D59B, 'M', 'v'), + (0x1D59C, 'M', 'w'), + (0x1D59D, 'M', 'x'), + (0x1D59E, 'M', 'y'), + (0x1D59F, 'M', 'z'), + (0x1D5A0, 'M', 'a'), + (0x1D5A1, 'M', 'b'), + (0x1D5A2, 'M', 'c'), + (0x1D5A3, 'M', 'd'), + (0x1D5A4, 'M', 'e'), + (0x1D5A5, 'M', 'f'), + (0x1D5A6, 'M', 'g'), + (0x1D5A7, 'M', 'h'), + (0x1D5A8, 'M', 'i'), + (0x1D5A9, 'M', 'j'), + (0x1D5AA, 'M', 'k'), + (0x1D5AB, 'M', 'l'), + (0x1D5AC, 'M', 'm'), + (0x1D5AD, 'M', 'n'), + (0x1D5AE, 'M', 'o'), + (0x1D5AF, 'M', 'p'), + (0x1D5B0, 'M', 'q'), + (0x1D5B1, 'M', 'r'), + (0x1D5B2, 'M', 's'), + (0x1D5B3, 'M', 't'), + (0x1D5B4, 'M', 'u'), + (0x1D5B5, 'M', 'v'), + (0x1D5B6, 'M', 'w'), + ] + +def _seg_65() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D5B7, 'M', 'x'), + (0x1D5B8, 'M', 'y'), + (0x1D5B9, 'M', 'z'), + (0x1D5BA, 'M', 'a'), + (0x1D5BB, 'M', 'b'), + (0x1D5BC, 'M', 'c'), + (0x1D5BD, 'M', 'd'), + (0x1D5BE, 'M', 'e'), + (0x1D5BF, 'M', 'f'), + (0x1D5C0, 'M', 'g'), + (0x1D5C1, 'M', 'h'), + (0x1D5C2, 'M', 'i'), + (0x1D5C3, 'M', 'j'), + (0x1D5C4, 'M', 'k'), + (0x1D5C5, 'M', 'l'), + (0x1D5C6, 'M', 'm'), + (0x1D5C7, 'M', 'n'), + (0x1D5C8, 'M', 'o'), + (0x1D5C9, 'M', 'p'), + (0x1D5CA, 'M', 'q'), + (0x1D5CB, 'M', 'r'), + (0x1D5CC, 'M', 's'), + (0x1D5CD, 'M', 't'), + (0x1D5CE, 'M', 'u'), + (0x1D5CF, 'M', 'v'), + (0x1D5D0, 'M', 'w'), + (0x1D5D1, 'M', 'x'), + (0x1D5D2, 'M', 'y'), + (0x1D5D3, 'M', 'z'), + (0x1D5D4, 'M', 'a'), + (0x1D5D5, 'M', 'b'), + (0x1D5D6, 'M', 'c'), + (0x1D5D7, 'M', 'd'), + (0x1D5D8, 'M', 'e'), + (0x1D5D9, 'M', 'f'), + (0x1D5DA, 'M', 'g'), + (0x1D5DB, 'M', 'h'), + (0x1D5DC, 'M', 'i'), + (0x1D5DD, 'M', 'j'), + (0x1D5DE, 'M', 'k'), + (0x1D5DF, 'M', 'l'), + (0x1D5E0, 'M', 'm'), + (0x1D5E1, 'M', 'n'), + (0x1D5E2, 'M', 'o'), + (0x1D5E3, 'M', 'p'), + (0x1D5E4, 'M', 'q'), + (0x1D5E5, 'M', 'r'), + (0x1D5E6, 'M', 's'), + (0x1D5E7, 'M', 't'), + (0x1D5E8, 'M', 'u'), + (0x1D5E9, 'M', 'v'), + (0x1D5EA, 'M', 'w'), + (0x1D5EB, 'M', 'x'), + (0x1D5EC, 'M', 'y'), + (0x1D5ED, 'M', 'z'), + (0x1D5EE, 'M', 'a'), + (0x1D5EF, 'M', 'b'), + (0x1D5F0, 'M', 'c'), + (0x1D5F1, 'M', 'd'), + (0x1D5F2, 'M', 'e'), + (0x1D5F3, 'M', 'f'), + (0x1D5F4, 'M', 'g'), + (0x1D5F5, 'M', 'h'), + (0x1D5F6, 'M', 'i'), + (0x1D5F7, 'M', 'j'), + (0x1D5F8, 'M', 'k'), + (0x1D5F9, 'M', 'l'), + (0x1D5FA, 'M', 'm'), + (0x1D5FB, 'M', 'n'), + (0x1D5FC, 'M', 'o'), + (0x1D5FD, 'M', 'p'), + (0x1D5FE, 'M', 'q'), + (0x1D5FF, 'M', 'r'), + (0x1D600, 'M', 's'), + (0x1D601, 'M', 't'), + (0x1D602, 'M', 'u'), + (0x1D603, 'M', 'v'), + (0x1D604, 'M', 'w'), + (0x1D605, 'M', 'x'), + (0x1D606, 'M', 'y'), + (0x1D607, 'M', 'z'), + (0x1D608, 'M', 'a'), + (0x1D609, 'M', 'b'), + (0x1D60A, 'M', 'c'), + (0x1D60B, 'M', 'd'), + (0x1D60C, 'M', 'e'), + (0x1D60D, 'M', 'f'), + (0x1D60E, 'M', 'g'), + (0x1D60F, 'M', 'h'), + (0x1D610, 'M', 'i'), + (0x1D611, 'M', 'j'), + (0x1D612, 'M', 'k'), + (0x1D613, 'M', 'l'), + (0x1D614, 'M', 'm'), + (0x1D615, 'M', 'n'), + (0x1D616, 'M', 'o'), + (0x1D617, 'M', 'p'), + (0x1D618, 'M', 'q'), + (0x1D619, 'M', 'r'), + (0x1D61A, 'M', 's'), + ] + +def _seg_66() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D61B, 'M', 't'), + (0x1D61C, 'M', 'u'), + (0x1D61D, 'M', 'v'), + (0x1D61E, 'M', 'w'), + (0x1D61F, 'M', 'x'), + (0x1D620, 'M', 'y'), + (0x1D621, 'M', 'z'), + (0x1D622, 'M', 'a'), + (0x1D623, 'M', 'b'), + (0x1D624, 'M', 'c'), + (0x1D625, 'M', 'd'), + (0x1D626, 'M', 'e'), + (0x1D627, 'M', 'f'), + (0x1D628, 'M', 'g'), + (0x1D629, 'M', 'h'), + (0x1D62A, 'M', 'i'), + (0x1D62B, 'M', 'j'), + (0x1D62C, 'M', 'k'), + (0x1D62D, 'M', 'l'), + (0x1D62E, 'M', 'm'), + (0x1D62F, 'M', 'n'), + (0x1D630, 'M', 'o'), + (0x1D631, 'M', 'p'), + (0x1D632, 'M', 'q'), + (0x1D633, 'M', 'r'), + (0x1D634, 'M', 's'), + (0x1D635, 'M', 't'), + (0x1D636, 'M', 'u'), + (0x1D637, 'M', 'v'), + (0x1D638, 'M', 'w'), + (0x1D639, 'M', 'x'), + (0x1D63A, 'M', 'y'), + (0x1D63B, 'M', 'z'), + (0x1D63C, 'M', 'a'), + (0x1D63D, 'M', 'b'), + (0x1D63E, 'M', 'c'), + (0x1D63F, 'M', 'd'), + (0x1D640, 'M', 'e'), + (0x1D641, 'M', 'f'), + (0x1D642, 'M', 'g'), + (0x1D643, 'M', 'h'), + (0x1D644, 'M', 'i'), + (0x1D645, 'M', 'j'), + (0x1D646, 'M', 'k'), + (0x1D647, 'M', 'l'), + (0x1D648, 'M', 'm'), + (0x1D649, 'M', 'n'), + (0x1D64A, 'M', 'o'), + (0x1D64B, 'M', 'p'), + (0x1D64C, 'M', 'q'), + (0x1D64D, 'M', 'r'), + (0x1D64E, 'M', 's'), + (0x1D64F, 'M', 't'), + (0x1D650, 'M', 'u'), + (0x1D651, 'M', 'v'), + (0x1D652, 'M', 'w'), + (0x1D653, 'M', 'x'), + (0x1D654, 'M', 'y'), + (0x1D655, 'M', 'z'), + (0x1D656, 'M', 'a'), + (0x1D657, 'M', 'b'), + (0x1D658, 'M', 'c'), + (0x1D659, 'M', 'd'), + (0x1D65A, 'M', 'e'), + (0x1D65B, 'M', 'f'), + (0x1D65C, 'M', 'g'), + (0x1D65D, 'M', 'h'), + (0x1D65E, 'M', 'i'), + (0x1D65F, 'M', 'j'), + (0x1D660, 'M', 'k'), + (0x1D661, 'M', 'l'), + (0x1D662, 'M', 'm'), + (0x1D663, 'M', 'n'), + (0x1D664, 'M', 'o'), + (0x1D665, 'M', 'p'), + (0x1D666, 'M', 'q'), + (0x1D667, 'M', 'r'), + (0x1D668, 'M', 's'), + (0x1D669, 'M', 't'), + (0x1D66A, 'M', 'u'), + (0x1D66B, 'M', 'v'), + (0x1D66C, 'M', 'w'), + (0x1D66D, 'M', 'x'), + (0x1D66E, 'M', 'y'), + (0x1D66F, 'M', 'z'), + (0x1D670, 'M', 'a'), + (0x1D671, 'M', 'b'), + (0x1D672, 'M', 'c'), + (0x1D673, 'M', 'd'), + (0x1D674, 'M', 'e'), + (0x1D675, 'M', 'f'), + (0x1D676, 'M', 'g'), + (0x1D677, 'M', 'h'), + (0x1D678, 'M', 'i'), + (0x1D679, 'M', 'j'), + (0x1D67A, 'M', 'k'), + (0x1D67B, 'M', 'l'), + (0x1D67C, 'M', 'm'), + (0x1D67D, 'M', 'n'), + (0x1D67E, 'M', 'o'), + ] + +def _seg_67() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D67F, 'M', 'p'), + (0x1D680, 'M', 'q'), + (0x1D681, 'M', 'r'), + (0x1D682, 'M', 's'), + (0x1D683, 'M', 't'), + (0x1D684, 'M', 'u'), + (0x1D685, 'M', 'v'), + (0x1D686, 'M', 'w'), + (0x1D687, 'M', 'x'), + (0x1D688, 'M', 'y'), + (0x1D689, 'M', 'z'), + (0x1D68A, 'M', 'a'), + (0x1D68B, 'M', 'b'), + (0x1D68C, 'M', 'c'), + (0x1D68D, 'M', 'd'), + (0x1D68E, 'M', 'e'), + (0x1D68F, 'M', 'f'), + (0x1D690, 'M', 'g'), + (0x1D691, 'M', 'h'), + (0x1D692, 'M', 'i'), + (0x1D693, 'M', 'j'), + (0x1D694, 'M', 'k'), + (0x1D695, 'M', 'l'), + (0x1D696, 'M', 'm'), + (0x1D697, 'M', 'n'), + (0x1D698, 'M', 'o'), + (0x1D699, 'M', 'p'), + (0x1D69A, 'M', 'q'), + (0x1D69B, 'M', 'r'), + (0x1D69C, 'M', 's'), + (0x1D69D, 'M', 't'), + (0x1D69E, 'M', 'u'), + (0x1D69F, 'M', 'v'), + (0x1D6A0, 'M', 'w'), + (0x1D6A1, 'M', 'x'), + (0x1D6A2, 'M', 'y'), + (0x1D6A3, 'M', 'z'), + (0x1D6A4, 'M', 'ı'), + (0x1D6A5, 'M', 'ȷ'), + (0x1D6A6, 'X'), + (0x1D6A8, 'M', 'α'), + (0x1D6A9, 'M', 'β'), + (0x1D6AA, 'M', 'γ'), + (0x1D6AB, 'M', 'δ'), + (0x1D6AC, 'M', 'ε'), + (0x1D6AD, 'M', 'ζ'), + (0x1D6AE, 'M', 'η'), + (0x1D6AF, 'M', 'θ'), + (0x1D6B0, 'M', 'ι'), + (0x1D6B1, 'M', 'κ'), + (0x1D6B2, 'M', 'λ'), + (0x1D6B3, 'M', 'μ'), + (0x1D6B4, 'M', 'ν'), + (0x1D6B5, 'M', 'ξ'), + (0x1D6B6, 'M', 'ο'), + (0x1D6B7, 'M', 'π'), + (0x1D6B8, 'M', 'ρ'), + (0x1D6B9, 'M', 'θ'), + (0x1D6BA, 'M', 'σ'), + (0x1D6BB, 'M', 'τ'), + (0x1D6BC, 'M', 'υ'), + (0x1D6BD, 'M', 'φ'), + (0x1D6BE, 'M', 'χ'), + (0x1D6BF, 'M', 'ψ'), + (0x1D6C0, 'M', 'ω'), + (0x1D6C1, 'M', '∇'), + (0x1D6C2, 'M', 'α'), + (0x1D6C3, 'M', 'β'), + (0x1D6C4, 'M', 'γ'), + (0x1D6C5, 'M', 'δ'), + (0x1D6C6, 'M', 'ε'), + (0x1D6C7, 'M', 'ζ'), + (0x1D6C8, 'M', 'η'), + (0x1D6C9, 'M', 'θ'), + (0x1D6CA, 'M', 'ι'), + (0x1D6CB, 'M', 'κ'), + (0x1D6CC, 'M', 'λ'), + (0x1D6CD, 'M', 'μ'), + (0x1D6CE, 'M', 'ν'), + (0x1D6CF, 'M', 'ξ'), + (0x1D6D0, 'M', 'ο'), + (0x1D6D1, 'M', 'π'), + (0x1D6D2, 'M', 'ρ'), + (0x1D6D3, 'M', 'σ'), + (0x1D6D5, 'M', 'τ'), + (0x1D6D6, 'M', 'υ'), + (0x1D6D7, 'M', 'φ'), + (0x1D6D8, 'M', 'χ'), + (0x1D6D9, 'M', 'ψ'), + (0x1D6DA, 'M', 'ω'), + (0x1D6DB, 'M', '∂'), + (0x1D6DC, 'M', 'ε'), + (0x1D6DD, 'M', 'θ'), + (0x1D6DE, 'M', 'κ'), + (0x1D6DF, 'M', 'φ'), + (0x1D6E0, 'M', 'ρ'), + (0x1D6E1, 'M', 'π'), + (0x1D6E2, 'M', 'α'), + (0x1D6E3, 'M', 'β'), + (0x1D6E4, 'M', 'γ'), + ] + +def _seg_68() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D6E5, 'M', 'δ'), + (0x1D6E6, 'M', 'ε'), + (0x1D6E7, 'M', 'ζ'), + (0x1D6E8, 'M', 'η'), + (0x1D6E9, 'M', 'θ'), + (0x1D6EA, 'M', 'ι'), + (0x1D6EB, 'M', 'κ'), + (0x1D6EC, 'M', 'λ'), + (0x1D6ED, 'M', 'μ'), + (0x1D6EE, 'M', 'ν'), + (0x1D6EF, 'M', 'ξ'), + (0x1D6F0, 'M', 'ο'), + (0x1D6F1, 'M', 'π'), + (0x1D6F2, 'M', 'ρ'), + (0x1D6F3, 'M', 'θ'), + (0x1D6F4, 'M', 'σ'), + (0x1D6F5, 'M', 'τ'), + (0x1D6F6, 'M', 'υ'), + (0x1D6F7, 'M', 'φ'), + (0x1D6F8, 'M', 'χ'), + (0x1D6F9, 'M', 'ψ'), + (0x1D6FA, 'M', 'ω'), + (0x1D6FB, 'M', '∇'), + (0x1D6FC, 'M', 'α'), + (0x1D6FD, 'M', 'β'), + (0x1D6FE, 'M', 'γ'), + (0x1D6FF, 'M', 'δ'), + (0x1D700, 'M', 'ε'), + (0x1D701, 'M', 'ζ'), + (0x1D702, 'M', 'η'), + (0x1D703, 'M', 'θ'), + (0x1D704, 'M', 'ι'), + (0x1D705, 'M', 'κ'), + (0x1D706, 'M', 'λ'), + (0x1D707, 'M', 'μ'), + (0x1D708, 'M', 'ν'), + (0x1D709, 'M', 'ξ'), + (0x1D70A, 'M', 'ο'), + (0x1D70B, 'M', 'π'), + (0x1D70C, 'M', 'ρ'), + (0x1D70D, 'M', 'σ'), + (0x1D70F, 'M', 'τ'), + (0x1D710, 'M', 'υ'), + (0x1D711, 'M', 'φ'), + (0x1D712, 'M', 'χ'), + (0x1D713, 'M', 'ψ'), + (0x1D714, 'M', 'ω'), + (0x1D715, 'M', '∂'), + (0x1D716, 'M', 'ε'), + (0x1D717, 'M', 'θ'), + (0x1D718, 'M', 'κ'), + (0x1D719, 'M', 'φ'), + (0x1D71A, 'M', 'ρ'), + (0x1D71B, 'M', 'π'), + (0x1D71C, 'M', 'α'), + (0x1D71D, 'M', 'β'), + (0x1D71E, 'M', 'γ'), + (0x1D71F, 'M', 'δ'), + (0x1D720, 'M', 'ε'), + (0x1D721, 'M', 'ζ'), + (0x1D722, 'M', 'η'), + (0x1D723, 'M', 'θ'), + (0x1D724, 'M', 'ι'), + (0x1D725, 'M', 'κ'), + (0x1D726, 'M', 'λ'), + (0x1D727, 'M', 'μ'), + (0x1D728, 'M', 'ν'), + (0x1D729, 'M', 'ξ'), + (0x1D72A, 'M', 'ο'), + (0x1D72B, 'M', 'π'), + (0x1D72C, 'M', 'ρ'), + (0x1D72D, 'M', 'θ'), + (0x1D72E, 'M', 'σ'), + (0x1D72F, 'M', 'τ'), + (0x1D730, 'M', 'υ'), + (0x1D731, 'M', 'φ'), + (0x1D732, 'M', 'χ'), + (0x1D733, 'M', 'ψ'), + (0x1D734, 'M', 'ω'), + (0x1D735, 'M', '∇'), + (0x1D736, 'M', 'α'), + (0x1D737, 'M', 'β'), + (0x1D738, 'M', 'γ'), + (0x1D739, 'M', 'δ'), + (0x1D73A, 'M', 'ε'), + (0x1D73B, 'M', 'ζ'), + (0x1D73C, 'M', 'η'), + (0x1D73D, 'M', 'θ'), + (0x1D73E, 'M', 'ι'), + (0x1D73F, 'M', 'κ'), + (0x1D740, 'M', 'λ'), + (0x1D741, 'M', 'μ'), + (0x1D742, 'M', 'ν'), + (0x1D743, 'M', 'ξ'), + (0x1D744, 'M', 'ο'), + (0x1D745, 'M', 'π'), + (0x1D746, 'M', 'ρ'), + (0x1D747, 'M', 'σ'), + (0x1D749, 'M', 'τ'), + (0x1D74A, 'M', 'υ'), + ] + +def _seg_69() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D74B, 'M', 'φ'), + (0x1D74C, 'M', 'χ'), + (0x1D74D, 'M', 'ψ'), + (0x1D74E, 'M', 'ω'), + (0x1D74F, 'M', '∂'), + (0x1D750, 'M', 'ε'), + (0x1D751, 'M', 'θ'), + (0x1D752, 'M', 'κ'), + (0x1D753, 'M', 'φ'), + (0x1D754, 'M', 'ρ'), + (0x1D755, 'M', 'π'), + (0x1D756, 'M', 'α'), + (0x1D757, 'M', 'β'), + (0x1D758, 'M', 'γ'), + (0x1D759, 'M', 'δ'), + (0x1D75A, 'M', 'ε'), + (0x1D75B, 'M', 'ζ'), + (0x1D75C, 'M', 'η'), + (0x1D75D, 'M', 'θ'), + (0x1D75E, 'M', 'ι'), + (0x1D75F, 'M', 'κ'), + (0x1D760, 'M', 'λ'), + (0x1D761, 'M', 'μ'), + (0x1D762, 'M', 'ν'), + (0x1D763, 'M', 'ξ'), + (0x1D764, 'M', 'ο'), + (0x1D765, 'M', 'π'), + (0x1D766, 'M', 'ρ'), + (0x1D767, 'M', 'θ'), + (0x1D768, 'M', 'σ'), + (0x1D769, 'M', 'τ'), + (0x1D76A, 'M', 'υ'), + (0x1D76B, 'M', 'φ'), + (0x1D76C, 'M', 'χ'), + (0x1D76D, 'M', 'ψ'), + (0x1D76E, 'M', 'ω'), + (0x1D76F, 'M', '∇'), + (0x1D770, 'M', 'α'), + (0x1D771, 'M', 'β'), + (0x1D772, 'M', 'γ'), + (0x1D773, 'M', 'δ'), + (0x1D774, 'M', 'ε'), + (0x1D775, 'M', 'ζ'), + (0x1D776, 'M', 'η'), + (0x1D777, 'M', 'θ'), + (0x1D778, 'M', 'ι'), + (0x1D779, 'M', 'κ'), + (0x1D77A, 'M', 'λ'), + (0x1D77B, 'M', 'μ'), + (0x1D77C, 'M', 'ν'), + (0x1D77D, 'M', 'ξ'), + (0x1D77E, 'M', 'ο'), + (0x1D77F, 'M', 'π'), + (0x1D780, 'M', 'ρ'), + (0x1D781, 'M', 'σ'), + (0x1D783, 'M', 'τ'), + (0x1D784, 'M', 'υ'), + (0x1D785, 'M', 'φ'), + (0x1D786, 'M', 'χ'), + (0x1D787, 'M', 'ψ'), + (0x1D788, 'M', 'ω'), + (0x1D789, 'M', '∂'), + (0x1D78A, 'M', 'ε'), + (0x1D78B, 'M', 'θ'), + (0x1D78C, 'M', 'κ'), + (0x1D78D, 'M', 'φ'), + (0x1D78E, 'M', 'ρ'), + (0x1D78F, 'M', 'π'), + (0x1D790, 'M', 'α'), + (0x1D791, 'M', 'β'), + (0x1D792, 'M', 'γ'), + (0x1D793, 'M', 'δ'), + (0x1D794, 'M', 'ε'), + (0x1D795, 'M', 'ζ'), + (0x1D796, 'M', 'η'), + (0x1D797, 'M', 'θ'), + (0x1D798, 'M', 'ι'), + (0x1D799, 'M', 'κ'), + (0x1D79A, 'M', 'λ'), + (0x1D79B, 'M', 'μ'), + (0x1D79C, 'M', 'ν'), + (0x1D79D, 'M', 'ξ'), + (0x1D79E, 'M', 'ο'), + (0x1D79F, 'M', 'π'), + (0x1D7A0, 'M', 'ρ'), + (0x1D7A1, 'M', 'θ'), + (0x1D7A2, 'M', 'σ'), + (0x1D7A3, 'M', 'τ'), + (0x1D7A4, 'M', 'υ'), + (0x1D7A5, 'M', 'φ'), + (0x1D7A6, 'M', 'χ'), + (0x1D7A7, 'M', 'ψ'), + (0x1D7A8, 'M', 'ω'), + (0x1D7A9, 'M', '∇'), + (0x1D7AA, 'M', 'α'), + (0x1D7AB, 'M', 'β'), + (0x1D7AC, 'M', 'γ'), + (0x1D7AD, 'M', 'δ'), + (0x1D7AE, 'M', 'ε'), + (0x1D7AF, 'M', 'ζ'), + ] + +def _seg_70() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1D7B0, 'M', 'η'), + (0x1D7B1, 'M', 'θ'), + (0x1D7B2, 'M', 'ι'), + (0x1D7B3, 'M', 'κ'), + (0x1D7B4, 'M', 'λ'), + (0x1D7B5, 'M', 'μ'), + (0x1D7B6, 'M', 'ν'), + (0x1D7B7, 'M', 'ξ'), + (0x1D7B8, 'M', 'ο'), + (0x1D7B9, 'M', 'π'), + (0x1D7BA, 'M', 'ρ'), + (0x1D7BB, 'M', 'σ'), + (0x1D7BD, 'M', 'τ'), + (0x1D7BE, 'M', 'υ'), + (0x1D7BF, 'M', 'φ'), + (0x1D7C0, 'M', 'χ'), + (0x1D7C1, 'M', 'ψ'), + (0x1D7C2, 'M', 'ω'), + (0x1D7C3, 'M', '∂'), + (0x1D7C4, 'M', 'ε'), + (0x1D7C5, 'M', 'θ'), + (0x1D7C6, 'M', 'κ'), + (0x1D7C7, 'M', 'φ'), + (0x1D7C8, 'M', 'ρ'), + (0x1D7C9, 'M', 'π'), + (0x1D7CA, 'M', 'ϝ'), + (0x1D7CC, 'X'), + (0x1D7CE, 'M', '0'), + (0x1D7CF, 'M', '1'), + (0x1D7D0, 'M', '2'), + (0x1D7D1, 'M', '3'), + (0x1D7D2, 'M', '4'), + (0x1D7D3, 'M', '5'), + (0x1D7D4, 'M', '6'), + (0x1D7D5, 'M', '7'), + (0x1D7D6, 'M', '8'), + (0x1D7D7, 'M', '9'), + (0x1D7D8, 'M', '0'), + (0x1D7D9, 'M', '1'), + (0x1D7DA, 'M', '2'), + (0x1D7DB, 'M', '3'), + (0x1D7DC, 'M', '4'), + (0x1D7DD, 'M', '5'), + (0x1D7DE, 'M', '6'), + (0x1D7DF, 'M', '7'), + (0x1D7E0, 'M', '8'), + (0x1D7E1, 'M', '9'), + (0x1D7E2, 'M', '0'), + (0x1D7E3, 'M', '1'), + (0x1D7E4, 'M', '2'), + (0x1D7E5, 'M', '3'), + (0x1D7E6, 'M', '4'), + (0x1D7E7, 'M', '5'), + (0x1D7E8, 'M', '6'), + (0x1D7E9, 'M', '7'), + (0x1D7EA, 'M', '8'), + (0x1D7EB, 'M', '9'), + (0x1D7EC, 'M', '0'), + (0x1D7ED, 'M', '1'), + (0x1D7EE, 'M', '2'), + (0x1D7EF, 'M', '3'), + (0x1D7F0, 'M', '4'), + (0x1D7F1, 'M', '5'), + (0x1D7F2, 'M', '6'), + (0x1D7F3, 'M', '7'), + (0x1D7F4, 'M', '8'), + (0x1D7F5, 'M', '9'), + (0x1D7F6, 'M', '0'), + (0x1D7F7, 'M', '1'), + (0x1D7F8, 'M', '2'), + (0x1D7F9, 'M', '3'), + (0x1D7FA, 'M', '4'), + (0x1D7FB, 'M', '5'), + (0x1D7FC, 'M', '6'), + (0x1D7FD, 'M', '7'), + (0x1D7FE, 'M', '8'), + (0x1D7FF, 'M', '9'), + (0x1D800, 'V'), + (0x1DA8C, 'X'), + (0x1DA9B, 'V'), + (0x1DAA0, 'X'), + (0x1DAA1, 'V'), + (0x1DAB0, 'X'), + (0x1DF00, 'V'), + (0x1DF1F, 'X'), + (0x1DF25, 'V'), + (0x1DF2B, 'X'), + (0x1E000, 'V'), + (0x1E007, 'X'), + (0x1E008, 'V'), + (0x1E019, 'X'), + (0x1E01B, 'V'), + (0x1E022, 'X'), + (0x1E023, 'V'), + (0x1E025, 'X'), + (0x1E026, 'V'), + (0x1E02B, 'X'), + (0x1E030, 'M', 'а'), + (0x1E031, 'M', 'б'), + (0x1E032, 'M', 'в'), + ] + +def _seg_71() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E033, 'M', 'г'), + (0x1E034, 'M', 'д'), + (0x1E035, 'M', 'е'), + (0x1E036, 'M', 'ж'), + (0x1E037, 'M', 'з'), + (0x1E038, 'M', 'и'), + (0x1E039, 'M', 'к'), + (0x1E03A, 'M', 'л'), + (0x1E03B, 'M', 'м'), + (0x1E03C, 'M', 'о'), + (0x1E03D, 'M', 'п'), + (0x1E03E, 'M', 'р'), + (0x1E03F, 'M', 'с'), + (0x1E040, 'M', 'т'), + (0x1E041, 'M', 'у'), + (0x1E042, 'M', 'ф'), + (0x1E043, 'M', 'х'), + (0x1E044, 'M', 'ц'), + (0x1E045, 'M', 'ч'), + (0x1E046, 'M', 'ш'), + (0x1E047, 'M', 'ы'), + (0x1E048, 'M', 'э'), + (0x1E049, 'M', 'ю'), + (0x1E04A, 'M', 'ꚉ'), + (0x1E04B, 'M', 'ә'), + (0x1E04C, 'M', 'і'), + (0x1E04D, 'M', 'ј'), + (0x1E04E, 'M', 'ө'), + (0x1E04F, 'M', 'ү'), + (0x1E050, 'M', 'ӏ'), + (0x1E051, 'M', 'а'), + (0x1E052, 'M', 'б'), + (0x1E053, 'M', 'в'), + (0x1E054, 'M', 'г'), + (0x1E055, 'M', 'д'), + (0x1E056, 'M', 'е'), + (0x1E057, 'M', 'ж'), + (0x1E058, 'M', 'з'), + (0x1E059, 'M', 'и'), + (0x1E05A, 'M', 'к'), + (0x1E05B, 'M', 'л'), + (0x1E05C, 'M', 'о'), + (0x1E05D, 'M', 'п'), + (0x1E05E, 'M', 'с'), + (0x1E05F, 'M', 'у'), + (0x1E060, 'M', 'ф'), + (0x1E061, 'M', 'х'), + (0x1E062, 'M', 'ц'), + (0x1E063, 'M', 'ч'), + (0x1E064, 'M', 'ш'), + (0x1E065, 'M', 'ъ'), + (0x1E066, 'M', 'ы'), + (0x1E067, 'M', 'ґ'), + (0x1E068, 'M', 'і'), + (0x1E069, 'M', 'ѕ'), + (0x1E06A, 'M', 'џ'), + (0x1E06B, 'M', 'ҫ'), + (0x1E06C, 'M', 'ꙑ'), + (0x1E06D, 'M', 'ұ'), + (0x1E06E, 'X'), + (0x1E08F, 'V'), + (0x1E090, 'X'), + (0x1E100, 'V'), + (0x1E12D, 'X'), + (0x1E130, 'V'), + (0x1E13E, 'X'), + (0x1E140, 'V'), + (0x1E14A, 'X'), + (0x1E14E, 'V'), + (0x1E150, 'X'), + (0x1E290, 'V'), + (0x1E2AF, 'X'), + (0x1E2C0, 'V'), + (0x1E2FA, 'X'), + (0x1E2FF, 'V'), + (0x1E300, 'X'), + (0x1E4D0, 'V'), + (0x1E4FA, 'X'), + (0x1E7E0, 'V'), + (0x1E7E7, 'X'), + (0x1E7E8, 'V'), + (0x1E7EC, 'X'), + (0x1E7ED, 'V'), + (0x1E7EF, 'X'), + (0x1E7F0, 'V'), + (0x1E7FF, 'X'), + (0x1E800, 'V'), + (0x1E8C5, 'X'), + (0x1E8C7, 'V'), + (0x1E8D7, 'X'), + (0x1E900, 'M', '𞤢'), + (0x1E901, 'M', '𞤣'), + (0x1E902, 'M', '𞤤'), + (0x1E903, 'M', '𞤥'), + (0x1E904, 'M', '𞤦'), + (0x1E905, 'M', '𞤧'), + (0x1E906, 'M', '𞤨'), + (0x1E907, 'M', '𞤩'), + (0x1E908, 'M', '𞤪'), + (0x1E909, 'M', '𞤫'), + ] + +def _seg_72() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1E90A, 'M', '𞤬'), + (0x1E90B, 'M', '𞤭'), + (0x1E90C, 'M', '𞤮'), + (0x1E90D, 'M', '𞤯'), + (0x1E90E, 'M', '𞤰'), + (0x1E90F, 'M', '𞤱'), + (0x1E910, 'M', '𞤲'), + (0x1E911, 'M', '𞤳'), + (0x1E912, 'M', '𞤴'), + (0x1E913, 'M', '𞤵'), + (0x1E914, 'M', '𞤶'), + (0x1E915, 'M', '𞤷'), + (0x1E916, 'M', '𞤸'), + (0x1E917, 'M', '𞤹'), + (0x1E918, 'M', '𞤺'), + (0x1E919, 'M', '𞤻'), + (0x1E91A, 'M', '𞤼'), + (0x1E91B, 'M', '𞤽'), + (0x1E91C, 'M', '𞤾'), + (0x1E91D, 'M', '𞤿'), + (0x1E91E, 'M', '𞥀'), + (0x1E91F, 'M', '𞥁'), + (0x1E920, 'M', '𞥂'), + (0x1E921, 'M', '𞥃'), + (0x1E922, 'V'), + (0x1E94C, 'X'), + (0x1E950, 'V'), + (0x1E95A, 'X'), + (0x1E95E, 'V'), + (0x1E960, 'X'), + (0x1EC71, 'V'), + (0x1ECB5, 'X'), + (0x1ED01, 'V'), + (0x1ED3E, 'X'), + (0x1EE00, 'M', 'ا'), + (0x1EE01, 'M', 'ب'), + (0x1EE02, 'M', 'ج'), + (0x1EE03, 'M', 'د'), + (0x1EE04, 'X'), + (0x1EE05, 'M', 'و'), + (0x1EE06, 'M', 'ز'), + (0x1EE07, 'M', 'ح'), + (0x1EE08, 'M', 'ط'), + (0x1EE09, 'M', 'ي'), + (0x1EE0A, 'M', 'ك'), + (0x1EE0B, 'M', 'ل'), + (0x1EE0C, 'M', 'م'), + (0x1EE0D, 'M', 'ن'), + (0x1EE0E, 'M', 'س'), + (0x1EE0F, 'M', 'ع'), + (0x1EE10, 'M', 'ف'), + (0x1EE11, 'M', 'ص'), + (0x1EE12, 'M', 'ق'), + (0x1EE13, 'M', 'ر'), + (0x1EE14, 'M', 'ش'), + (0x1EE15, 'M', 'ت'), + (0x1EE16, 'M', 'ث'), + (0x1EE17, 'M', 'خ'), + (0x1EE18, 'M', 'ذ'), + (0x1EE19, 'M', 'ض'), + (0x1EE1A, 'M', 'ظ'), + (0x1EE1B, 'M', 'غ'), + (0x1EE1C, 'M', 'ٮ'), + (0x1EE1D, 'M', 'ں'), + (0x1EE1E, 'M', 'ڡ'), + (0x1EE1F, 'M', 'ٯ'), + (0x1EE20, 'X'), + (0x1EE21, 'M', 'ب'), + (0x1EE22, 'M', 'ج'), + (0x1EE23, 'X'), + (0x1EE24, 'M', 'ه'), + (0x1EE25, 'X'), + (0x1EE27, 'M', 'ح'), + (0x1EE28, 'X'), + (0x1EE29, 'M', 'ي'), + (0x1EE2A, 'M', 'ك'), + (0x1EE2B, 'M', 'ل'), + (0x1EE2C, 'M', 'م'), + (0x1EE2D, 'M', 'ن'), + (0x1EE2E, 'M', 'س'), + (0x1EE2F, 'M', 'ع'), + (0x1EE30, 'M', 'ف'), + (0x1EE31, 'M', 'ص'), + (0x1EE32, 'M', 'ق'), + (0x1EE33, 'X'), + (0x1EE34, 'M', 'ش'), + (0x1EE35, 'M', 'ت'), + (0x1EE36, 'M', 'ث'), + (0x1EE37, 'M', 'خ'), + (0x1EE38, 'X'), + (0x1EE39, 'M', 'ض'), + (0x1EE3A, 'X'), + (0x1EE3B, 'M', 'غ'), + (0x1EE3C, 'X'), + (0x1EE42, 'M', 'ج'), + (0x1EE43, 'X'), + (0x1EE47, 'M', 'ح'), + (0x1EE48, 'X'), + (0x1EE49, 'M', 'ي'), + (0x1EE4A, 'X'), + ] + +def _seg_73() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EE4B, 'M', 'ل'), + (0x1EE4C, 'X'), + (0x1EE4D, 'M', 'ن'), + (0x1EE4E, 'M', 'س'), + (0x1EE4F, 'M', 'ع'), + (0x1EE50, 'X'), + (0x1EE51, 'M', 'ص'), + (0x1EE52, 'M', 'ق'), + (0x1EE53, 'X'), + (0x1EE54, 'M', 'ش'), + (0x1EE55, 'X'), + (0x1EE57, 'M', 'خ'), + (0x1EE58, 'X'), + (0x1EE59, 'M', 'ض'), + (0x1EE5A, 'X'), + (0x1EE5B, 'M', 'غ'), + (0x1EE5C, 'X'), + (0x1EE5D, 'M', 'ں'), + (0x1EE5E, 'X'), + (0x1EE5F, 'M', 'ٯ'), + (0x1EE60, 'X'), + (0x1EE61, 'M', 'ب'), + (0x1EE62, 'M', 'ج'), + (0x1EE63, 'X'), + (0x1EE64, 'M', 'ه'), + (0x1EE65, 'X'), + (0x1EE67, 'M', 'ح'), + (0x1EE68, 'M', 'ط'), + (0x1EE69, 'M', 'ي'), + (0x1EE6A, 'M', 'ك'), + (0x1EE6B, 'X'), + (0x1EE6C, 'M', 'م'), + (0x1EE6D, 'M', 'ن'), + (0x1EE6E, 'M', 'س'), + (0x1EE6F, 'M', 'ع'), + (0x1EE70, 'M', 'ف'), + (0x1EE71, 'M', 'ص'), + (0x1EE72, 'M', 'ق'), + (0x1EE73, 'X'), + (0x1EE74, 'M', 'ش'), + (0x1EE75, 'M', 'ت'), + (0x1EE76, 'M', 'ث'), + (0x1EE77, 'M', 'خ'), + (0x1EE78, 'X'), + (0x1EE79, 'M', 'ض'), + (0x1EE7A, 'M', 'ظ'), + (0x1EE7B, 'M', 'غ'), + (0x1EE7C, 'M', 'ٮ'), + (0x1EE7D, 'X'), + (0x1EE7E, 'M', 'ڡ'), + (0x1EE7F, 'X'), + (0x1EE80, 'M', 'ا'), + (0x1EE81, 'M', 'ب'), + (0x1EE82, 'M', 'ج'), + (0x1EE83, 'M', 'د'), + (0x1EE84, 'M', 'ه'), + (0x1EE85, 'M', 'و'), + (0x1EE86, 'M', 'ز'), + (0x1EE87, 'M', 'ح'), + (0x1EE88, 'M', 'ط'), + (0x1EE89, 'M', 'ي'), + (0x1EE8A, 'X'), + (0x1EE8B, 'M', 'ل'), + (0x1EE8C, 'M', 'م'), + (0x1EE8D, 'M', 'ن'), + (0x1EE8E, 'M', 'س'), + (0x1EE8F, 'M', 'ع'), + (0x1EE90, 'M', 'ف'), + (0x1EE91, 'M', 'ص'), + (0x1EE92, 'M', 'ق'), + (0x1EE93, 'M', 'ر'), + (0x1EE94, 'M', 'ش'), + (0x1EE95, 'M', 'ت'), + (0x1EE96, 'M', 'ث'), + (0x1EE97, 'M', 'خ'), + (0x1EE98, 'M', 'ذ'), + (0x1EE99, 'M', 'ض'), + (0x1EE9A, 'M', 'ظ'), + (0x1EE9B, 'M', 'غ'), + (0x1EE9C, 'X'), + (0x1EEA1, 'M', 'ب'), + (0x1EEA2, 'M', 'ج'), + (0x1EEA3, 'M', 'د'), + (0x1EEA4, 'X'), + (0x1EEA5, 'M', 'و'), + (0x1EEA6, 'M', 'ز'), + (0x1EEA7, 'M', 'ح'), + (0x1EEA8, 'M', 'ط'), + (0x1EEA9, 'M', 'ي'), + (0x1EEAA, 'X'), + (0x1EEAB, 'M', 'ل'), + (0x1EEAC, 'M', 'م'), + (0x1EEAD, 'M', 'ن'), + (0x1EEAE, 'M', 'س'), + (0x1EEAF, 'M', 'ع'), + (0x1EEB0, 'M', 'ف'), + (0x1EEB1, 'M', 'ص'), + (0x1EEB2, 'M', 'ق'), + (0x1EEB3, 'M', 'ر'), + (0x1EEB4, 'M', 'ش'), + ] + +def _seg_74() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1EEB5, 'M', 'ت'), + (0x1EEB6, 'M', 'ث'), + (0x1EEB7, 'M', 'خ'), + (0x1EEB8, 'M', 'ذ'), + (0x1EEB9, 'M', 'ض'), + (0x1EEBA, 'M', 'ظ'), + (0x1EEBB, 'M', 'غ'), + (0x1EEBC, 'X'), + (0x1EEF0, 'V'), + (0x1EEF2, 'X'), + (0x1F000, 'V'), + (0x1F02C, 'X'), + (0x1F030, 'V'), + (0x1F094, 'X'), + (0x1F0A0, 'V'), + (0x1F0AF, 'X'), + (0x1F0B1, 'V'), + (0x1F0C0, 'X'), + (0x1F0C1, 'V'), + (0x1F0D0, 'X'), + (0x1F0D1, 'V'), + (0x1F0F6, 'X'), + (0x1F101, '3', '0,'), + (0x1F102, '3', '1,'), + (0x1F103, '3', '2,'), + (0x1F104, '3', '3,'), + (0x1F105, '3', '4,'), + (0x1F106, '3', '5,'), + (0x1F107, '3', '6,'), + (0x1F108, '3', '7,'), + (0x1F109, '3', '8,'), + (0x1F10A, '3', '9,'), + (0x1F10B, 'V'), + (0x1F110, '3', '(a)'), + (0x1F111, '3', '(b)'), + (0x1F112, '3', '(c)'), + (0x1F113, '3', '(d)'), + (0x1F114, '3', '(e)'), + (0x1F115, '3', '(f)'), + (0x1F116, '3', '(g)'), + (0x1F117, '3', '(h)'), + (0x1F118, '3', '(i)'), + (0x1F119, '3', '(j)'), + (0x1F11A, '3', '(k)'), + (0x1F11B, '3', '(l)'), + (0x1F11C, '3', '(m)'), + (0x1F11D, '3', '(n)'), + (0x1F11E, '3', '(o)'), + (0x1F11F, '3', '(p)'), + (0x1F120, '3', '(q)'), + (0x1F121, '3', '(r)'), + (0x1F122, '3', '(s)'), + (0x1F123, '3', '(t)'), + (0x1F124, '3', '(u)'), + (0x1F125, '3', '(v)'), + (0x1F126, '3', '(w)'), + (0x1F127, '3', '(x)'), + (0x1F128, '3', '(y)'), + (0x1F129, '3', '(z)'), + (0x1F12A, 'M', '〔s〕'), + (0x1F12B, 'M', 'c'), + (0x1F12C, 'M', 'r'), + (0x1F12D, 'M', 'cd'), + (0x1F12E, 'M', 'wz'), + (0x1F12F, 'V'), + (0x1F130, 'M', 'a'), + (0x1F131, 'M', 'b'), + (0x1F132, 'M', 'c'), + (0x1F133, 'M', 'd'), + (0x1F134, 'M', 'e'), + (0x1F135, 'M', 'f'), + (0x1F136, 'M', 'g'), + (0x1F137, 'M', 'h'), + (0x1F138, 'M', 'i'), + (0x1F139, 'M', 'j'), + (0x1F13A, 'M', 'k'), + (0x1F13B, 'M', 'l'), + (0x1F13C, 'M', 'm'), + (0x1F13D, 'M', 'n'), + (0x1F13E, 'M', 'o'), + (0x1F13F, 'M', 'p'), + (0x1F140, 'M', 'q'), + (0x1F141, 'M', 'r'), + (0x1F142, 'M', 's'), + (0x1F143, 'M', 't'), + (0x1F144, 'M', 'u'), + (0x1F145, 'M', 'v'), + (0x1F146, 'M', 'w'), + (0x1F147, 'M', 'x'), + (0x1F148, 'M', 'y'), + (0x1F149, 'M', 'z'), + (0x1F14A, 'M', 'hv'), + (0x1F14B, 'M', 'mv'), + (0x1F14C, 'M', 'sd'), + (0x1F14D, 'M', 'ss'), + (0x1F14E, 'M', 'ppv'), + (0x1F14F, 'M', 'wc'), + (0x1F150, 'V'), + (0x1F16A, 'M', 'mc'), + (0x1F16B, 'M', 'md'), + ] + +def _seg_75() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1F16C, 'M', 'mr'), + (0x1F16D, 'V'), + (0x1F190, 'M', 'dj'), + (0x1F191, 'V'), + (0x1F1AE, 'X'), + (0x1F1E6, 'V'), + (0x1F200, 'M', 'ほか'), + (0x1F201, 'M', 'ココ'), + (0x1F202, 'M', 'サ'), + (0x1F203, 'X'), + (0x1F210, 'M', '手'), + (0x1F211, 'M', '字'), + (0x1F212, 'M', '双'), + (0x1F213, 'M', 'デ'), + (0x1F214, 'M', '二'), + (0x1F215, 'M', '多'), + (0x1F216, 'M', '解'), + (0x1F217, 'M', '天'), + (0x1F218, 'M', '交'), + (0x1F219, 'M', '映'), + (0x1F21A, 'M', '無'), + (0x1F21B, 'M', '料'), + (0x1F21C, 'M', '前'), + (0x1F21D, 'M', '後'), + (0x1F21E, 'M', '再'), + (0x1F21F, 'M', '新'), + (0x1F220, 'M', '初'), + (0x1F221, 'M', '終'), + (0x1F222, 'M', '生'), + (0x1F223, 'M', '販'), + (0x1F224, 'M', '声'), + (0x1F225, 'M', '吹'), + (0x1F226, 'M', '演'), + (0x1F227, 'M', '投'), + (0x1F228, 'M', '捕'), + (0x1F229, 'M', '一'), + (0x1F22A, 'M', '三'), + (0x1F22B, 'M', '遊'), + (0x1F22C, 'M', '左'), + (0x1F22D, 'M', '中'), + (0x1F22E, 'M', '右'), + (0x1F22F, 'M', '指'), + (0x1F230, 'M', '走'), + (0x1F231, 'M', '打'), + (0x1F232, 'M', '禁'), + (0x1F233, 'M', '空'), + (0x1F234, 'M', '合'), + (0x1F235, 'M', '満'), + (0x1F236, 'M', '有'), + (0x1F237, 'M', '月'), + (0x1F238, 'M', '申'), + (0x1F239, 'M', '割'), + (0x1F23A, 'M', '営'), + (0x1F23B, 'M', '配'), + (0x1F23C, 'X'), + (0x1F240, 'M', '〔本〕'), + (0x1F241, 'M', '〔三〕'), + (0x1F242, 'M', '〔二〕'), + (0x1F243, 'M', '〔安〕'), + (0x1F244, 'M', '〔点〕'), + (0x1F245, 'M', '〔打〕'), + (0x1F246, 'M', '〔盗〕'), + (0x1F247, 'M', '〔勝〕'), + (0x1F248, 'M', '〔敗〕'), + (0x1F249, 'X'), + (0x1F250, 'M', '得'), + (0x1F251, 'M', '可'), + (0x1F252, 'X'), + (0x1F260, 'V'), + (0x1F266, 'X'), + (0x1F300, 'V'), + (0x1F6D8, 'X'), + (0x1F6DC, 'V'), + (0x1F6ED, 'X'), + (0x1F6F0, 'V'), + (0x1F6FD, 'X'), + (0x1F700, 'V'), + (0x1F777, 'X'), + (0x1F77B, 'V'), + (0x1F7DA, 'X'), + (0x1F7E0, 'V'), + (0x1F7EC, 'X'), + (0x1F7F0, 'V'), + (0x1F7F1, 'X'), + (0x1F800, 'V'), + (0x1F80C, 'X'), + (0x1F810, 'V'), + (0x1F848, 'X'), + (0x1F850, 'V'), + (0x1F85A, 'X'), + (0x1F860, 'V'), + (0x1F888, 'X'), + (0x1F890, 'V'), + (0x1F8AE, 'X'), + (0x1F8B0, 'V'), + (0x1F8B2, 'X'), + (0x1F900, 'V'), + (0x1FA54, 'X'), + (0x1FA60, 'V'), + (0x1FA6E, 'X'), + ] + +def _seg_76() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x1FA70, 'V'), + (0x1FA7D, 'X'), + (0x1FA80, 'V'), + (0x1FA89, 'X'), + (0x1FA90, 'V'), + (0x1FABE, 'X'), + (0x1FABF, 'V'), + (0x1FAC6, 'X'), + (0x1FACE, 'V'), + (0x1FADC, 'X'), + (0x1FAE0, 'V'), + (0x1FAE9, 'X'), + (0x1FAF0, 'V'), + (0x1FAF9, 'X'), + (0x1FB00, 'V'), + (0x1FB93, 'X'), + (0x1FB94, 'V'), + (0x1FBCB, 'X'), + (0x1FBF0, 'M', '0'), + (0x1FBF1, 'M', '1'), + (0x1FBF2, 'M', '2'), + (0x1FBF3, 'M', '3'), + (0x1FBF4, 'M', '4'), + (0x1FBF5, 'M', '5'), + (0x1FBF6, 'M', '6'), + (0x1FBF7, 'M', '7'), + (0x1FBF8, 'M', '8'), + (0x1FBF9, 'M', '9'), + (0x1FBFA, 'X'), + (0x20000, 'V'), + (0x2A6E0, 'X'), + (0x2A700, 'V'), + (0x2B73A, 'X'), + (0x2B740, 'V'), + (0x2B81E, 'X'), + (0x2B820, 'V'), + (0x2CEA2, 'X'), + (0x2CEB0, 'V'), + (0x2EBE1, 'X'), + (0x2F800, 'M', '丽'), + (0x2F801, 'M', '丸'), + (0x2F802, 'M', '乁'), + (0x2F803, 'M', '𠄢'), + (0x2F804, 'M', '你'), + (0x2F805, 'M', '侮'), + (0x2F806, 'M', '侻'), + (0x2F807, 'M', '倂'), + (0x2F808, 'M', '偺'), + (0x2F809, 'M', '備'), + (0x2F80A, 'M', '僧'), + (0x2F80B, 'M', '像'), + (0x2F80C, 'M', '㒞'), + (0x2F80D, 'M', '𠘺'), + (0x2F80E, 'M', '免'), + (0x2F80F, 'M', '兔'), + (0x2F810, 'M', '兤'), + (0x2F811, 'M', '具'), + (0x2F812, 'M', '𠔜'), + (0x2F813, 'M', '㒹'), + (0x2F814, 'M', '內'), + (0x2F815, 'M', '再'), + (0x2F816, 'M', '𠕋'), + (0x2F817, 'M', '冗'), + (0x2F818, 'M', '冤'), + (0x2F819, 'M', '仌'), + (0x2F81A, 'M', '冬'), + (0x2F81B, 'M', '况'), + (0x2F81C, 'M', '𩇟'), + (0x2F81D, 'M', '凵'), + (0x2F81E, 'M', '刃'), + (0x2F81F, 'M', '㓟'), + (0x2F820, 'M', '刻'), + (0x2F821, 'M', '剆'), + (0x2F822, 'M', '割'), + (0x2F823, 'M', '剷'), + (0x2F824, 'M', '㔕'), + (0x2F825, 'M', '勇'), + (0x2F826, 'M', '勉'), + (0x2F827, 'M', '勤'), + (0x2F828, 'M', '勺'), + (0x2F829, 'M', '包'), + (0x2F82A, 'M', '匆'), + (0x2F82B, 'M', '北'), + (0x2F82C, 'M', '卉'), + (0x2F82D, 'M', '卑'), + (0x2F82E, 'M', '博'), + (0x2F82F, 'M', '即'), + (0x2F830, 'M', '卽'), + (0x2F831, 'M', '卿'), + (0x2F834, 'M', '𠨬'), + (0x2F835, 'M', '灰'), + (0x2F836, 'M', '及'), + (0x2F837, 'M', '叟'), + (0x2F838, 'M', '𠭣'), + (0x2F839, 'M', '叫'), + (0x2F83A, 'M', '叱'), + (0x2F83B, 'M', '吆'), + (0x2F83C, 'M', '咞'), + (0x2F83D, 'M', '吸'), + (0x2F83E, 'M', '呈'), + ] + +def _seg_77() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F83F, 'M', '周'), + (0x2F840, 'M', '咢'), + (0x2F841, 'M', '哶'), + (0x2F842, 'M', '唐'), + (0x2F843, 'M', '啓'), + (0x2F844, 'M', '啣'), + (0x2F845, 'M', '善'), + (0x2F847, 'M', '喙'), + (0x2F848, 'M', '喫'), + (0x2F849, 'M', '喳'), + (0x2F84A, 'M', '嗂'), + (0x2F84B, 'M', '圖'), + (0x2F84C, 'M', '嘆'), + (0x2F84D, 'M', '圗'), + (0x2F84E, 'M', '噑'), + (0x2F84F, 'M', '噴'), + (0x2F850, 'M', '切'), + (0x2F851, 'M', '壮'), + (0x2F852, 'M', '城'), + (0x2F853, 'M', '埴'), + (0x2F854, 'M', '堍'), + (0x2F855, 'M', '型'), + (0x2F856, 'M', '堲'), + (0x2F857, 'M', '報'), + (0x2F858, 'M', '墬'), + (0x2F859, 'M', '𡓤'), + (0x2F85A, 'M', '売'), + (0x2F85B, 'M', '壷'), + (0x2F85C, 'M', '夆'), + (0x2F85D, 'M', '多'), + (0x2F85E, 'M', '夢'), + (0x2F85F, 'M', '奢'), + (0x2F860, 'M', '𡚨'), + (0x2F861, 'M', '𡛪'), + (0x2F862, 'M', '姬'), + (0x2F863, 'M', '娛'), + (0x2F864, 'M', '娧'), + (0x2F865, 'M', '姘'), + (0x2F866, 'M', '婦'), + (0x2F867, 'M', '㛮'), + (0x2F868, 'X'), + (0x2F869, 'M', '嬈'), + (0x2F86A, 'M', '嬾'), + (0x2F86C, 'M', '𡧈'), + (0x2F86D, 'M', '寃'), + (0x2F86E, 'M', '寘'), + (0x2F86F, 'M', '寧'), + (0x2F870, 'M', '寳'), + (0x2F871, 'M', '𡬘'), + (0x2F872, 'M', '寿'), + (0x2F873, 'M', '将'), + (0x2F874, 'X'), + (0x2F875, 'M', '尢'), + (0x2F876, 'M', '㞁'), + (0x2F877, 'M', '屠'), + (0x2F878, 'M', '屮'), + (0x2F879, 'M', '峀'), + (0x2F87A, 'M', '岍'), + (0x2F87B, 'M', '𡷤'), + (0x2F87C, 'M', '嵃'), + (0x2F87D, 'M', '𡷦'), + (0x2F87E, 'M', '嵮'), + (0x2F87F, 'M', '嵫'), + (0x2F880, 'M', '嵼'), + (0x2F881, 'M', '巡'), + (0x2F882, 'M', '巢'), + (0x2F883, 'M', '㠯'), + (0x2F884, 'M', '巽'), + (0x2F885, 'M', '帨'), + (0x2F886, 'M', '帽'), + (0x2F887, 'M', '幩'), + (0x2F888, 'M', '㡢'), + (0x2F889, 'M', '𢆃'), + (0x2F88A, 'M', '㡼'), + (0x2F88B, 'M', '庰'), + (0x2F88C, 'M', '庳'), + (0x2F88D, 'M', '庶'), + (0x2F88E, 'M', '廊'), + (0x2F88F, 'M', '𪎒'), + (0x2F890, 'M', '廾'), + (0x2F891, 'M', '𢌱'), + (0x2F893, 'M', '舁'), + (0x2F894, 'M', '弢'), + (0x2F896, 'M', '㣇'), + (0x2F897, 'M', '𣊸'), + (0x2F898, 'M', '𦇚'), + (0x2F899, 'M', '形'), + (0x2F89A, 'M', '彫'), + (0x2F89B, 'M', '㣣'), + (0x2F89C, 'M', '徚'), + (0x2F89D, 'M', '忍'), + (0x2F89E, 'M', '志'), + (0x2F89F, 'M', '忹'), + (0x2F8A0, 'M', '悁'), + (0x2F8A1, 'M', '㤺'), + (0x2F8A2, 'M', '㤜'), + (0x2F8A3, 'M', '悔'), + (0x2F8A4, 'M', '𢛔'), + (0x2F8A5, 'M', '惇'), + (0x2F8A6, 'M', '慈'), + ] + +def _seg_78() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F8A7, 'M', '慌'), + (0x2F8A8, 'M', '慎'), + (0x2F8A9, 'M', '慌'), + (0x2F8AA, 'M', '慺'), + (0x2F8AB, 'M', '憎'), + (0x2F8AC, 'M', '憲'), + (0x2F8AD, 'M', '憤'), + (0x2F8AE, 'M', '憯'), + (0x2F8AF, 'M', '懞'), + (0x2F8B0, 'M', '懲'), + (0x2F8B1, 'M', '懶'), + (0x2F8B2, 'M', '成'), + (0x2F8B3, 'M', '戛'), + (0x2F8B4, 'M', '扝'), + (0x2F8B5, 'M', '抱'), + (0x2F8B6, 'M', '拔'), + (0x2F8B7, 'M', '捐'), + (0x2F8B8, 'M', '𢬌'), + (0x2F8B9, 'M', '挽'), + (0x2F8BA, 'M', '拼'), + (0x2F8BB, 'M', '捨'), + (0x2F8BC, 'M', '掃'), + (0x2F8BD, 'M', '揤'), + (0x2F8BE, 'M', '𢯱'), + (0x2F8BF, 'M', '搢'), + (0x2F8C0, 'M', '揅'), + (0x2F8C1, 'M', '掩'), + (0x2F8C2, 'M', '㨮'), + (0x2F8C3, 'M', '摩'), + (0x2F8C4, 'M', '摾'), + (0x2F8C5, 'M', '撝'), + (0x2F8C6, 'M', '摷'), + (0x2F8C7, 'M', '㩬'), + (0x2F8C8, 'M', '敏'), + (0x2F8C9, 'M', '敬'), + (0x2F8CA, 'M', '𣀊'), + (0x2F8CB, 'M', '旣'), + (0x2F8CC, 'M', '書'), + (0x2F8CD, 'M', '晉'), + (0x2F8CE, 'M', '㬙'), + (0x2F8CF, 'M', '暑'), + (0x2F8D0, 'M', '㬈'), + (0x2F8D1, 'M', '㫤'), + (0x2F8D2, 'M', '冒'), + (0x2F8D3, 'M', '冕'), + (0x2F8D4, 'M', '最'), + (0x2F8D5, 'M', '暜'), + (0x2F8D6, 'M', '肭'), + (0x2F8D7, 'M', '䏙'), + (0x2F8D8, 'M', '朗'), + (0x2F8D9, 'M', '望'), + (0x2F8DA, 'M', '朡'), + (0x2F8DB, 'M', '杞'), + (0x2F8DC, 'M', '杓'), + (0x2F8DD, 'M', '𣏃'), + (0x2F8DE, 'M', '㭉'), + (0x2F8DF, 'M', '柺'), + (0x2F8E0, 'M', '枅'), + (0x2F8E1, 'M', '桒'), + (0x2F8E2, 'M', '梅'), + (0x2F8E3, 'M', '𣑭'), + (0x2F8E4, 'M', '梎'), + (0x2F8E5, 'M', '栟'), + (0x2F8E6, 'M', '椔'), + (0x2F8E7, 'M', '㮝'), + (0x2F8E8, 'M', '楂'), + (0x2F8E9, 'M', '榣'), + (0x2F8EA, 'M', '槪'), + (0x2F8EB, 'M', '檨'), + (0x2F8EC, 'M', '𣚣'), + (0x2F8ED, 'M', '櫛'), + (0x2F8EE, 'M', '㰘'), + (0x2F8EF, 'M', '次'), + (0x2F8F0, 'M', '𣢧'), + (0x2F8F1, 'M', '歔'), + (0x2F8F2, 'M', '㱎'), + (0x2F8F3, 'M', '歲'), + (0x2F8F4, 'M', '殟'), + (0x2F8F5, 'M', '殺'), + (0x2F8F6, 'M', '殻'), + (0x2F8F7, 'M', '𣪍'), + (0x2F8F8, 'M', '𡴋'), + (0x2F8F9, 'M', '𣫺'), + (0x2F8FA, 'M', '汎'), + (0x2F8FB, 'M', '𣲼'), + (0x2F8FC, 'M', '沿'), + (0x2F8FD, 'M', '泍'), + (0x2F8FE, 'M', '汧'), + (0x2F8FF, 'M', '洖'), + (0x2F900, 'M', '派'), + (0x2F901, 'M', '海'), + (0x2F902, 'M', '流'), + (0x2F903, 'M', '浩'), + (0x2F904, 'M', '浸'), + (0x2F905, 'M', '涅'), + (0x2F906, 'M', '𣴞'), + (0x2F907, 'M', '洴'), + (0x2F908, 'M', '港'), + (0x2F909, 'M', '湮'), + (0x2F90A, 'M', '㴳'), + ] + +def _seg_79() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F90B, 'M', '滋'), + (0x2F90C, 'M', '滇'), + (0x2F90D, 'M', '𣻑'), + (0x2F90E, 'M', '淹'), + (0x2F90F, 'M', '潮'), + (0x2F910, 'M', '𣽞'), + (0x2F911, 'M', '𣾎'), + (0x2F912, 'M', '濆'), + (0x2F913, 'M', '瀹'), + (0x2F914, 'M', '瀞'), + (0x2F915, 'M', '瀛'), + (0x2F916, 'M', '㶖'), + (0x2F917, 'M', '灊'), + (0x2F918, 'M', '災'), + (0x2F919, 'M', '灷'), + (0x2F91A, 'M', '炭'), + (0x2F91B, 'M', '𠔥'), + (0x2F91C, 'M', '煅'), + (0x2F91D, 'M', '𤉣'), + (0x2F91E, 'M', '熜'), + (0x2F91F, 'X'), + (0x2F920, 'M', '爨'), + (0x2F921, 'M', '爵'), + (0x2F922, 'M', '牐'), + (0x2F923, 'M', '𤘈'), + (0x2F924, 'M', '犀'), + (0x2F925, 'M', '犕'), + (0x2F926, 'M', '𤜵'), + (0x2F927, 'M', '𤠔'), + (0x2F928, 'M', '獺'), + (0x2F929, 'M', '王'), + (0x2F92A, 'M', '㺬'), + (0x2F92B, 'M', '玥'), + (0x2F92C, 'M', '㺸'), + (0x2F92E, 'M', '瑇'), + (0x2F92F, 'M', '瑜'), + (0x2F930, 'M', '瑱'), + (0x2F931, 'M', '璅'), + (0x2F932, 'M', '瓊'), + (0x2F933, 'M', '㼛'), + (0x2F934, 'M', '甤'), + (0x2F935, 'M', '𤰶'), + (0x2F936, 'M', '甾'), + (0x2F937, 'M', '𤲒'), + (0x2F938, 'M', '異'), + (0x2F939, 'M', '𢆟'), + (0x2F93A, 'M', '瘐'), + (0x2F93B, 'M', '𤾡'), + (0x2F93C, 'M', '𤾸'), + (0x2F93D, 'M', '𥁄'), + (0x2F93E, 'M', '㿼'), + (0x2F93F, 'M', '䀈'), + (0x2F940, 'M', '直'), + (0x2F941, 'M', '𥃳'), + (0x2F942, 'M', '𥃲'), + (0x2F943, 'M', '𥄙'), + (0x2F944, 'M', '𥄳'), + (0x2F945, 'M', '眞'), + (0x2F946, 'M', '真'), + (0x2F948, 'M', '睊'), + (0x2F949, 'M', '䀹'), + (0x2F94A, 'M', '瞋'), + (0x2F94B, 'M', '䁆'), + (0x2F94C, 'M', '䂖'), + (0x2F94D, 'M', '𥐝'), + (0x2F94E, 'M', '硎'), + (0x2F94F, 'M', '碌'), + (0x2F950, 'M', '磌'), + (0x2F951, 'M', '䃣'), + (0x2F952, 'M', '𥘦'), + (0x2F953, 'M', '祖'), + (0x2F954, 'M', '𥚚'), + (0x2F955, 'M', '𥛅'), + (0x2F956, 'M', '福'), + (0x2F957, 'M', '秫'), + (0x2F958, 'M', '䄯'), + (0x2F959, 'M', '穀'), + (0x2F95A, 'M', '穊'), + (0x2F95B, 'M', '穏'), + (0x2F95C, 'M', '𥥼'), + (0x2F95D, 'M', '𥪧'), + (0x2F95F, 'X'), + (0x2F960, 'M', '䈂'), + (0x2F961, 'M', '𥮫'), + (0x2F962, 'M', '篆'), + (0x2F963, 'M', '築'), + (0x2F964, 'M', '䈧'), + (0x2F965, 'M', '𥲀'), + (0x2F966, 'M', '糒'), + (0x2F967, 'M', '䊠'), + (0x2F968, 'M', '糨'), + (0x2F969, 'M', '糣'), + (0x2F96A, 'M', '紀'), + (0x2F96B, 'M', '𥾆'), + (0x2F96C, 'M', '絣'), + (0x2F96D, 'M', '䌁'), + (0x2F96E, 'M', '緇'), + (0x2F96F, 'M', '縂'), + (0x2F970, 'M', '繅'), + (0x2F971, 'M', '䌴'), + ] + +def _seg_80() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F972, 'M', '𦈨'), + (0x2F973, 'M', '𦉇'), + (0x2F974, 'M', '䍙'), + (0x2F975, 'M', '𦋙'), + (0x2F976, 'M', '罺'), + (0x2F977, 'M', '𦌾'), + (0x2F978, 'M', '羕'), + (0x2F979, 'M', '翺'), + (0x2F97A, 'M', '者'), + (0x2F97B, 'M', '𦓚'), + (0x2F97C, 'M', '𦔣'), + (0x2F97D, 'M', '聠'), + (0x2F97E, 'M', '𦖨'), + (0x2F97F, 'M', '聰'), + (0x2F980, 'M', '𣍟'), + (0x2F981, 'M', '䏕'), + (0x2F982, 'M', '育'), + (0x2F983, 'M', '脃'), + (0x2F984, 'M', '䐋'), + (0x2F985, 'M', '脾'), + (0x2F986, 'M', '媵'), + (0x2F987, 'M', '𦞧'), + (0x2F988, 'M', '𦞵'), + (0x2F989, 'M', '𣎓'), + (0x2F98A, 'M', '𣎜'), + (0x2F98B, 'M', '舁'), + (0x2F98C, 'M', '舄'), + (0x2F98D, 'M', '辞'), + (0x2F98E, 'M', '䑫'), + (0x2F98F, 'M', '芑'), + (0x2F990, 'M', '芋'), + (0x2F991, 'M', '芝'), + (0x2F992, 'M', '劳'), + (0x2F993, 'M', '花'), + (0x2F994, 'M', '芳'), + (0x2F995, 'M', '芽'), + (0x2F996, 'M', '苦'), + (0x2F997, 'M', '𦬼'), + (0x2F998, 'M', '若'), + (0x2F999, 'M', '茝'), + (0x2F99A, 'M', '荣'), + (0x2F99B, 'M', '莭'), + (0x2F99C, 'M', '茣'), + (0x2F99D, 'M', '莽'), + (0x2F99E, 'M', '菧'), + (0x2F99F, 'M', '著'), + (0x2F9A0, 'M', '荓'), + (0x2F9A1, 'M', '菊'), + (0x2F9A2, 'M', '菌'), + (0x2F9A3, 'M', '菜'), + (0x2F9A4, 'M', '𦰶'), + (0x2F9A5, 'M', '𦵫'), + (0x2F9A6, 'M', '𦳕'), + (0x2F9A7, 'M', '䔫'), + (0x2F9A8, 'M', '蓱'), + (0x2F9A9, 'M', '蓳'), + (0x2F9AA, 'M', '蔖'), + (0x2F9AB, 'M', '𧏊'), + (0x2F9AC, 'M', '蕤'), + (0x2F9AD, 'M', '𦼬'), + (0x2F9AE, 'M', '䕝'), + (0x2F9AF, 'M', '䕡'), + (0x2F9B0, 'M', '𦾱'), + (0x2F9B1, 'M', '𧃒'), + (0x2F9B2, 'M', '䕫'), + (0x2F9B3, 'M', '虐'), + (0x2F9B4, 'M', '虜'), + (0x2F9B5, 'M', '虧'), + (0x2F9B6, 'M', '虩'), + (0x2F9B7, 'M', '蚩'), + (0x2F9B8, 'M', '蚈'), + (0x2F9B9, 'M', '蜎'), + (0x2F9BA, 'M', '蛢'), + (0x2F9BB, 'M', '蝹'), + (0x2F9BC, 'M', '蜨'), + (0x2F9BD, 'M', '蝫'), + (0x2F9BE, 'M', '螆'), + (0x2F9BF, 'X'), + (0x2F9C0, 'M', '蟡'), + (0x2F9C1, 'M', '蠁'), + (0x2F9C2, 'M', '䗹'), + (0x2F9C3, 'M', '衠'), + (0x2F9C4, 'M', '衣'), + (0x2F9C5, 'M', '𧙧'), + (0x2F9C6, 'M', '裗'), + (0x2F9C7, 'M', '裞'), + (0x2F9C8, 'M', '䘵'), + (0x2F9C9, 'M', '裺'), + (0x2F9CA, 'M', '㒻'), + (0x2F9CB, 'M', '𧢮'), + (0x2F9CC, 'M', '𧥦'), + (0x2F9CD, 'M', '䚾'), + (0x2F9CE, 'M', '䛇'), + (0x2F9CF, 'M', '誠'), + (0x2F9D0, 'M', '諭'), + (0x2F9D1, 'M', '變'), + (0x2F9D2, 'M', '豕'), + (0x2F9D3, 'M', '𧲨'), + (0x2F9D4, 'M', '貫'), + (0x2F9D5, 'M', '賁'), + ] + +def _seg_81() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: + return [ + (0x2F9D6, 'M', '贛'), + (0x2F9D7, 'M', '起'), + (0x2F9D8, 'M', '𧼯'), + (0x2F9D9, 'M', '𠠄'), + (0x2F9DA, 'M', '跋'), + (0x2F9DB, 'M', '趼'), + (0x2F9DC, 'M', '跰'), + (0x2F9DD, 'M', '𠣞'), + (0x2F9DE, 'M', '軔'), + (0x2F9DF, 'M', '輸'), + (0x2F9E0, 'M', '𨗒'), + (0x2F9E1, 'M', '𨗭'), + (0x2F9E2, 'M', '邔'), + (0x2F9E3, 'M', '郱'), + (0x2F9E4, 'M', '鄑'), + (0x2F9E5, 'M', '𨜮'), + (0x2F9E6, 'M', '鄛'), + (0x2F9E7, 'M', '鈸'), + (0x2F9E8, 'M', '鋗'), + (0x2F9E9, 'M', '鋘'), + (0x2F9EA, 'M', '鉼'), + (0x2F9EB, 'M', '鏹'), + (0x2F9EC, 'M', '鐕'), + (0x2F9ED, 'M', '𨯺'), + (0x2F9EE, 'M', '開'), + (0x2F9EF, 'M', '䦕'), + (0x2F9F0, 'M', '閷'), + (0x2F9F1, 'M', '𨵷'), + (0x2F9F2, 'M', '䧦'), + (0x2F9F3, 'M', '雃'), + (0x2F9F4, 'M', '嶲'), + (0x2F9F5, 'M', '霣'), + (0x2F9F6, 'M', '𩅅'), + (0x2F9F7, 'M', '𩈚'), + (0x2F9F8, 'M', '䩮'), + (0x2F9F9, 'M', '䩶'), + (0x2F9FA, 'M', '韠'), + (0x2F9FB, 'M', '𩐊'), + (0x2F9FC, 'M', '䪲'), + (0x2F9FD, 'M', '𩒖'), + (0x2F9FE, 'M', '頋'), + (0x2FA00, 'M', '頩'), + (0x2FA01, 'M', '𩖶'), + (0x2FA02, 'M', '飢'), + (0x2FA03, 'M', '䬳'), + (0x2FA04, 'M', '餩'), + (0x2FA05, 'M', '馧'), + (0x2FA06, 'M', '駂'), + (0x2FA07, 'M', '駾'), + (0x2FA08, 'M', '䯎'), + (0x2FA09, 'M', '𩬰'), + (0x2FA0A, 'M', '鬒'), + (0x2FA0B, 'M', '鱀'), + (0x2FA0C, 'M', '鳽'), + (0x2FA0D, 'M', '䳎'), + (0x2FA0E, 'M', '䳭'), + (0x2FA0F, 'M', '鵧'), + (0x2FA10, 'M', '𪃎'), + (0x2FA11, 'M', '䳸'), + (0x2FA12, 'M', '𪄅'), + (0x2FA13, 'M', '𪈎'), + (0x2FA14, 'M', '𪊑'), + (0x2FA15, 'M', '麻'), + (0x2FA16, 'M', '䵖'), + (0x2FA17, 'M', '黹'), + (0x2FA18, 'M', '黾'), + (0x2FA19, 'M', '鼅'), + (0x2FA1A, 'M', '鼏'), + (0x2FA1B, 'M', '鼖'), + (0x2FA1C, 'M', '鼻'), + (0x2FA1D, 'M', '𪘀'), + (0x2FA1E, 'X'), + (0x30000, 'V'), + (0x3134B, 'X'), + (0x31350, 'V'), + (0x323B0, 'X'), + (0xE0100, 'I'), + (0xE01F0, 'X'), + ] + +uts46data = tuple( + _seg_0() + + _seg_1() + + _seg_2() + + _seg_3() + + _seg_4() + + _seg_5() + + _seg_6() + + _seg_7() + + _seg_8() + + _seg_9() + + _seg_10() + + _seg_11() + + _seg_12() + + _seg_13() + + _seg_14() + + _seg_15() + + _seg_16() + + _seg_17() + + _seg_18() + + _seg_19() + + _seg_20() + + _seg_21() + + _seg_22() + + _seg_23() + + _seg_24() + + _seg_25() + + _seg_26() + + _seg_27() + + _seg_28() + + _seg_29() + + _seg_30() + + _seg_31() + + _seg_32() + + _seg_33() + + _seg_34() + + _seg_35() + + _seg_36() + + _seg_37() + + _seg_38() + + _seg_39() + + _seg_40() + + _seg_41() + + _seg_42() + + _seg_43() + + _seg_44() + + _seg_45() + + _seg_46() + + _seg_47() + + _seg_48() + + _seg_49() + + _seg_50() + + _seg_51() + + _seg_52() + + _seg_53() + + _seg_54() + + _seg_55() + + _seg_56() + + _seg_57() + + _seg_58() + + _seg_59() + + _seg_60() + + _seg_61() + + _seg_62() + + _seg_63() + + _seg_64() + + _seg_65() + + _seg_66() + + _seg_67() + + _seg_68() + + _seg_69() + + _seg_70() + + _seg_71() + + _seg_72() + + _seg_73() + + _seg_74() + + _seg_75() + + _seg_76() + + _seg_77() + + _seg_78() + + _seg_79() + + _seg_80() + + _seg_81() +) # type: Tuple[Union[Tuple[int, str], Tuple[int, str, str]], ...] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py new file mode 100644 index 0000000..1300b86 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py @@ -0,0 +1,57 @@ +# coding: utf-8 +from .exceptions import * +from .ext import ExtType, Timestamp + +import os +import sys + + +version = (1, 0, 5) +__version__ = "1.0.5" + + +if os.environ.get("MSGPACK_PUREPYTHON") or sys.version_info[0] == 2: + from .fallback import Packer, unpackb, Unpacker +else: + try: + from ._cmsgpack import Packer, unpackb, Unpacker + except ImportError: + from .fallback import Packer, unpackb, Unpacker + + +def pack(o, stream, **kwargs): + """ + Pack object `o` and write it to `stream` + + See :class:`Packer` for options. + """ + packer = Packer(**kwargs) + stream.write(packer.pack(o)) + + +def packb(o, **kwargs): + """ + Pack object `o` and return packed bytes + + See :class:`Packer` for options. + """ + return Packer(**kwargs).pack(o) + + +def unpack(stream, **kwargs): + """ + Unpack an object from `stream`. + + Raises `ExtraData` when `stream` contains extra bytes. + See :class:`Unpacker` for options. + """ + data = stream.read() + return unpackb(data, **kwargs) + + +# alias for compatibility to simplejson/marshal/pickle. +load = unpack +loads = unpackb + +dump = pack +dumps = packb diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..d7d3b54 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc new file mode 100644 index 0000000..fecc491 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc new file mode 100644 index 0000000..64a6de8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc new file mode 100644 index 0000000..256f7c2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py new file mode 100644 index 0000000..d6d2615 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py @@ -0,0 +1,48 @@ +class UnpackException(Exception): + """Base class for some exceptions raised while unpacking. + + NOTE: unpack may raise exception other than subclass of + UnpackException. If you want to catch all error, catch + Exception instead. + """ + + +class BufferFull(UnpackException): + pass + + +class OutOfData(UnpackException): + pass + + +class FormatError(ValueError, UnpackException): + """Invalid msgpack format""" + + +class StackError(ValueError, UnpackException): + """Too nested""" + + +# Deprecated. Use ValueError instead +UnpackValueError = ValueError + + +class ExtraData(UnpackValueError): + """ExtraData is raised when there is trailing data. + + This exception is raised while only one-shot (not streaming) + unpack. + """ + + def __init__(self, unpacked, extra): + self.unpacked = unpacked + self.extra = extra + + def __str__(self): + return "unpack(b) received extra data." + + +# Deprecated. Use Exception instead to catch all exception during packing. +PackException = Exception +PackValueError = ValueError +PackOverflowError = OverflowError diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py new file mode 100644 index 0000000..23e0d6b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py @@ -0,0 +1,193 @@ +# coding: utf-8 +from collections import namedtuple +import datetime +import sys +import struct + + +PY2 = sys.version_info[0] == 2 + +if PY2: + int_types = (int, long) + _utc = None +else: + int_types = int + try: + _utc = datetime.timezone.utc + except AttributeError: + _utc = datetime.timezone(datetime.timedelta(0)) + + +class ExtType(namedtuple("ExtType", "code data")): + """ExtType represents ext type in msgpack.""" + + def __new__(cls, code, data): + if not isinstance(code, int): + raise TypeError("code must be int") + if not isinstance(data, bytes): + raise TypeError("data must be bytes") + if not 0 <= code <= 127: + raise ValueError("code must be 0~127") + return super(ExtType, cls).__new__(cls, code, data) + + +class Timestamp(object): + """Timestamp represents the Timestamp extension type in msgpack. + + When built with Cython, msgpack uses C methods to pack and unpack `Timestamp`. When using pure-Python + msgpack, :func:`to_bytes` and :func:`from_bytes` are used to pack and unpack `Timestamp`. + + This class is immutable: Do not override seconds and nanoseconds. + """ + + __slots__ = ["seconds", "nanoseconds"] + + def __init__(self, seconds, nanoseconds=0): + """Initialize a Timestamp object. + + :param int seconds: + Number of seconds since the UNIX epoch (00:00:00 UTC Jan 1 1970, minus leap seconds). + May be negative. + + :param int nanoseconds: + Number of nanoseconds to add to `seconds` to get fractional time. + Maximum is 999_999_999. Default is 0. + + Note: Negative times (before the UNIX epoch) are represented as negative seconds + positive ns. + """ + if not isinstance(seconds, int_types): + raise TypeError("seconds must be an integer") + if not isinstance(nanoseconds, int_types): + raise TypeError("nanoseconds must be an integer") + if not (0 <= nanoseconds < 10**9): + raise ValueError( + "nanoseconds must be a non-negative integer less than 999999999." + ) + self.seconds = seconds + self.nanoseconds = nanoseconds + + def __repr__(self): + """String representation of Timestamp.""" + return "Timestamp(seconds={0}, nanoseconds={1})".format( + self.seconds, self.nanoseconds + ) + + def __eq__(self, other): + """Check for equality with another Timestamp object""" + if type(other) is self.__class__: + return ( + self.seconds == other.seconds and self.nanoseconds == other.nanoseconds + ) + return False + + def __ne__(self, other): + """not-equals method (see :func:`__eq__()`)""" + return not self.__eq__(other) + + def __hash__(self): + return hash((self.seconds, self.nanoseconds)) + + @staticmethod + def from_bytes(b): + """Unpack bytes into a `Timestamp` object. + + Used for pure-Python msgpack unpacking. + + :param b: Payload from msgpack ext message with code -1 + :type b: bytes + + :returns: Timestamp object unpacked from msgpack ext payload + :rtype: Timestamp + """ + if len(b) == 4: + seconds = struct.unpack("!L", b)[0] + nanoseconds = 0 + elif len(b) == 8: + data64 = struct.unpack("!Q", b)[0] + seconds = data64 & 0x00000003FFFFFFFF + nanoseconds = data64 >> 34 + elif len(b) == 12: + nanoseconds, seconds = struct.unpack("!Iq", b) + else: + raise ValueError( + "Timestamp type can only be created from 32, 64, or 96-bit byte objects" + ) + return Timestamp(seconds, nanoseconds) + + def to_bytes(self): + """Pack this Timestamp object into bytes. + + Used for pure-Python msgpack packing. + + :returns data: Payload for EXT message with code -1 (timestamp type) + :rtype: bytes + """ + if (self.seconds >> 34) == 0: # seconds is non-negative and fits in 34 bits + data64 = self.nanoseconds << 34 | self.seconds + if data64 & 0xFFFFFFFF00000000 == 0: + # nanoseconds is zero and seconds < 2**32, so timestamp 32 + data = struct.pack("!L", data64) + else: + # timestamp 64 + data = struct.pack("!Q", data64) + else: + # timestamp 96 + data = struct.pack("!Iq", self.nanoseconds, self.seconds) + return data + + @staticmethod + def from_unix(unix_sec): + """Create a Timestamp from posix timestamp in seconds. + + :param unix_float: Posix timestamp in seconds. + :type unix_float: int or float. + """ + seconds = int(unix_sec // 1) + nanoseconds = int((unix_sec % 1) * 10**9) + return Timestamp(seconds, nanoseconds) + + def to_unix(self): + """Get the timestamp as a floating-point value. + + :returns: posix timestamp + :rtype: float + """ + return self.seconds + self.nanoseconds / 1e9 + + @staticmethod + def from_unix_nano(unix_ns): + """Create a Timestamp from posix timestamp in nanoseconds. + + :param int unix_ns: Posix timestamp in nanoseconds. + :rtype: Timestamp + """ + return Timestamp(*divmod(unix_ns, 10**9)) + + def to_unix_nano(self): + """Get the timestamp as a unixtime in nanoseconds. + + :returns: posix timestamp in nanoseconds + :rtype: int + """ + return self.seconds * 10**9 + self.nanoseconds + + def to_datetime(self): + """Get the timestamp as a UTC datetime. + + Python 2 is not supported. + + :rtype: datetime. + """ + return datetime.datetime.fromtimestamp(0, _utc) + datetime.timedelta( + seconds=self.to_unix() + ) + + @staticmethod + def from_datetime(dt): + """Create a Timestamp from datetime with tzinfo. + + Python 2 is not supported. + + :rtype: Timestamp + """ + return Timestamp.from_unix(dt.timestamp()) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py new file mode 100644 index 0000000..e8cebc1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py @@ -0,0 +1,1010 @@ +"""Fallback pure Python implementation of msgpack""" +from datetime import datetime as _DateTime +import sys +import struct + + +PY2 = sys.version_info[0] == 2 +if PY2: + int_types = (int, long) + + def dict_iteritems(d): + return d.iteritems() + +else: + int_types = int + unicode = str + xrange = range + + def dict_iteritems(d): + return d.items() + + +if sys.version_info < (3, 5): + # Ugly hack... + RecursionError = RuntimeError + + def _is_recursionerror(e): + return ( + len(e.args) == 1 + and isinstance(e.args[0], str) + and e.args[0].startswith("maximum recursion depth exceeded") + ) + +else: + + def _is_recursionerror(e): + return True + + +if hasattr(sys, "pypy_version_info"): + # StringIO is slow on PyPy, StringIO is faster. However: PyPy's own + # StringBuilder is fastest. + from __pypy__ import newlist_hint + + try: + from __pypy__.builders import BytesBuilder as StringBuilder + except ImportError: + from __pypy__.builders import StringBuilder + USING_STRINGBUILDER = True + + class StringIO(object): + def __init__(self, s=b""): + if s: + self.builder = StringBuilder(len(s)) + self.builder.append(s) + else: + self.builder = StringBuilder() + + def write(self, s): + if isinstance(s, memoryview): + s = s.tobytes() + elif isinstance(s, bytearray): + s = bytes(s) + self.builder.append(s) + + def getvalue(self): + return self.builder.build() + +else: + USING_STRINGBUILDER = False + from io import BytesIO as StringIO + + newlist_hint = lambda size: [] + + +from .exceptions import BufferFull, OutOfData, ExtraData, FormatError, StackError + +from .ext import ExtType, Timestamp + + +EX_SKIP = 0 +EX_CONSTRUCT = 1 +EX_READ_ARRAY_HEADER = 2 +EX_READ_MAP_HEADER = 3 + +TYPE_IMMEDIATE = 0 +TYPE_ARRAY = 1 +TYPE_MAP = 2 +TYPE_RAW = 3 +TYPE_BIN = 4 +TYPE_EXT = 5 + +DEFAULT_RECURSE_LIMIT = 511 + + +def _check_type_strict(obj, t, type=type, tuple=tuple): + if type(t) is tuple: + return type(obj) in t + else: + return type(obj) is t + + +def _get_data_from_buffer(obj): + view = memoryview(obj) + if view.itemsize != 1: + raise ValueError("cannot unpack from multi-byte object") + return view + + +def unpackb(packed, **kwargs): + """ + Unpack an object from `packed`. + + Raises ``ExtraData`` when *packed* contains extra bytes. + Raises ``ValueError`` when *packed* is incomplete. + Raises ``FormatError`` when *packed* is not valid msgpack. + Raises ``StackError`` when *packed* contains too nested. + Other exceptions can be raised during unpacking. + + See :class:`Unpacker` for options. + """ + unpacker = Unpacker(None, max_buffer_size=len(packed), **kwargs) + unpacker.feed(packed) + try: + ret = unpacker._unpack() + except OutOfData: + raise ValueError("Unpack failed: incomplete input") + except RecursionError as e: + if _is_recursionerror(e): + raise StackError + raise + if unpacker._got_extradata(): + raise ExtraData(ret, unpacker._get_extradata()) + return ret + + +if sys.version_info < (2, 7, 6): + + def _unpack_from(f, b, o=0): + """Explicit type cast for legacy struct.unpack_from""" + return struct.unpack_from(f, bytes(b), o) + +else: + _unpack_from = struct.unpack_from + +_NO_FORMAT_USED = "" +_MSGPACK_HEADERS = { + 0xC4: (1, _NO_FORMAT_USED, TYPE_BIN), + 0xC5: (2, ">H", TYPE_BIN), + 0xC6: (4, ">I", TYPE_BIN), + 0xC7: (2, "Bb", TYPE_EXT), + 0xC8: (3, ">Hb", TYPE_EXT), + 0xC9: (5, ">Ib", TYPE_EXT), + 0xCA: (4, ">f"), + 0xCB: (8, ">d"), + 0xCC: (1, _NO_FORMAT_USED), + 0xCD: (2, ">H"), + 0xCE: (4, ">I"), + 0xCF: (8, ">Q"), + 0xD0: (1, "b"), + 0xD1: (2, ">h"), + 0xD2: (4, ">i"), + 0xD3: (8, ">q"), + 0xD4: (1, "b1s", TYPE_EXT), + 0xD5: (2, "b2s", TYPE_EXT), + 0xD6: (4, "b4s", TYPE_EXT), + 0xD7: (8, "b8s", TYPE_EXT), + 0xD8: (16, "b16s", TYPE_EXT), + 0xD9: (1, _NO_FORMAT_USED, TYPE_RAW), + 0xDA: (2, ">H", TYPE_RAW), + 0xDB: (4, ">I", TYPE_RAW), + 0xDC: (2, ">H", TYPE_ARRAY), + 0xDD: (4, ">I", TYPE_ARRAY), + 0xDE: (2, ">H", TYPE_MAP), + 0xDF: (4, ">I", TYPE_MAP), +} + + +class Unpacker(object): + """Streaming unpacker. + + Arguments: + + :param file_like: + File-like object having `.read(n)` method. + If specified, unpacker reads serialized data from it and :meth:`feed()` is not usable. + + :param int read_size: + Used as `file_like.read(read_size)`. (default: `min(16*1024, max_buffer_size)`) + + :param bool use_list: + If true, unpack msgpack array to Python list. + Otherwise, unpack to Python tuple. (default: True) + + :param bool raw: + If true, unpack msgpack raw to Python bytes. + Otherwise, unpack to Python str by decoding with UTF-8 encoding (default). + + :param int timestamp: + Control how timestamp type is unpacked: + + 0 - Timestamp + 1 - float (Seconds from the EPOCH) + 2 - int (Nanoseconds from the EPOCH) + 3 - datetime.datetime (UTC). Python 2 is not supported. + + :param bool strict_map_key: + If true (default), only str or bytes are accepted for map (dict) keys. + + :param callable object_hook: + When specified, it should be callable. + Unpacker calls it with a dict argument after unpacking msgpack map. + (See also simplejson) + + :param callable object_pairs_hook: + When specified, it should be callable. + Unpacker calls it with a list of key-value pairs after unpacking msgpack map. + (See also simplejson) + + :param str unicode_errors: + The error handler for decoding unicode. (default: 'strict') + This option should be used only when you have msgpack data which + contains invalid UTF-8 string. + + :param int max_buffer_size: + Limits size of data waiting unpacked. 0 means 2**32-1. + The default value is 100*1024*1024 (100MiB). + Raises `BufferFull` exception when it is insufficient. + You should set this parameter when unpacking data from untrusted source. + + :param int max_str_len: + Deprecated, use *max_buffer_size* instead. + Limits max length of str. (default: max_buffer_size) + + :param int max_bin_len: + Deprecated, use *max_buffer_size* instead. + Limits max length of bin. (default: max_buffer_size) + + :param int max_array_len: + Limits max length of array. + (default: max_buffer_size) + + :param int max_map_len: + Limits max length of map. + (default: max_buffer_size//2) + + :param int max_ext_len: + Deprecated, use *max_buffer_size* instead. + Limits max size of ext type. (default: max_buffer_size) + + Example of streaming deserialize from file-like object:: + + unpacker = Unpacker(file_like) + for o in unpacker: + process(o) + + Example of streaming deserialize from socket:: + + unpacker = Unpacker() + while True: + buf = sock.recv(1024**2) + if not buf: + break + unpacker.feed(buf) + for o in unpacker: + process(o) + + Raises ``ExtraData`` when *packed* contains extra bytes. + Raises ``OutOfData`` when *packed* is incomplete. + Raises ``FormatError`` when *packed* is not valid msgpack. + Raises ``StackError`` when *packed* contains too nested. + Other exceptions can be raised during unpacking. + """ + + def __init__( + self, + file_like=None, + read_size=0, + use_list=True, + raw=False, + timestamp=0, + strict_map_key=True, + object_hook=None, + object_pairs_hook=None, + list_hook=None, + unicode_errors=None, + max_buffer_size=100 * 1024 * 1024, + ext_hook=ExtType, + max_str_len=-1, + max_bin_len=-1, + max_array_len=-1, + max_map_len=-1, + max_ext_len=-1, + ): + if unicode_errors is None: + unicode_errors = "strict" + + if file_like is None: + self._feeding = True + else: + if not callable(file_like.read): + raise TypeError("`file_like.read` must be callable") + self.file_like = file_like + self._feeding = False + + #: array of bytes fed. + self._buffer = bytearray() + #: Which position we currently reads + self._buff_i = 0 + + # When Unpacker is used as an iterable, between the calls to next(), + # the buffer is not "consumed" completely, for efficiency sake. + # Instead, it is done sloppily. To make sure we raise BufferFull at + # the correct moments, we have to keep track of how sloppy we were. + # Furthermore, when the buffer is incomplete (that is: in the case + # we raise an OutOfData) we need to rollback the buffer to the correct + # state, which _buf_checkpoint records. + self._buf_checkpoint = 0 + + if not max_buffer_size: + max_buffer_size = 2**31 - 1 + if max_str_len == -1: + max_str_len = max_buffer_size + if max_bin_len == -1: + max_bin_len = max_buffer_size + if max_array_len == -1: + max_array_len = max_buffer_size + if max_map_len == -1: + max_map_len = max_buffer_size // 2 + if max_ext_len == -1: + max_ext_len = max_buffer_size + + self._max_buffer_size = max_buffer_size + if read_size > self._max_buffer_size: + raise ValueError("read_size must be smaller than max_buffer_size") + self._read_size = read_size or min(self._max_buffer_size, 16 * 1024) + self._raw = bool(raw) + self._strict_map_key = bool(strict_map_key) + self._unicode_errors = unicode_errors + self._use_list = use_list + if not (0 <= timestamp <= 3): + raise ValueError("timestamp must be 0..3") + self._timestamp = timestamp + self._list_hook = list_hook + self._object_hook = object_hook + self._object_pairs_hook = object_pairs_hook + self._ext_hook = ext_hook + self._max_str_len = max_str_len + self._max_bin_len = max_bin_len + self._max_array_len = max_array_len + self._max_map_len = max_map_len + self._max_ext_len = max_ext_len + self._stream_offset = 0 + + if list_hook is not None and not callable(list_hook): + raise TypeError("`list_hook` is not callable") + if object_hook is not None and not callable(object_hook): + raise TypeError("`object_hook` is not callable") + if object_pairs_hook is not None and not callable(object_pairs_hook): + raise TypeError("`object_pairs_hook` is not callable") + if object_hook is not None and object_pairs_hook is not None: + raise TypeError( + "object_pairs_hook and object_hook are mutually " "exclusive" + ) + if not callable(ext_hook): + raise TypeError("`ext_hook` is not callable") + + def feed(self, next_bytes): + assert self._feeding + view = _get_data_from_buffer(next_bytes) + if len(self._buffer) - self._buff_i + len(view) > self._max_buffer_size: + raise BufferFull + + # Strip buffer before checkpoint before reading file. + if self._buf_checkpoint > 0: + del self._buffer[: self._buf_checkpoint] + self._buff_i -= self._buf_checkpoint + self._buf_checkpoint = 0 + + # Use extend here: INPLACE_ADD += doesn't reliably typecast memoryview in jython + self._buffer.extend(view) + + def _consume(self): + """Gets rid of the used parts of the buffer.""" + self._stream_offset += self._buff_i - self._buf_checkpoint + self._buf_checkpoint = self._buff_i + + def _got_extradata(self): + return self._buff_i < len(self._buffer) + + def _get_extradata(self): + return self._buffer[self._buff_i :] + + def read_bytes(self, n): + ret = self._read(n, raise_outofdata=False) + self._consume() + return ret + + def _read(self, n, raise_outofdata=True): + # (int) -> bytearray + self._reserve(n, raise_outofdata=raise_outofdata) + i = self._buff_i + ret = self._buffer[i : i + n] + self._buff_i = i + len(ret) + return ret + + def _reserve(self, n, raise_outofdata=True): + remain_bytes = len(self._buffer) - self._buff_i - n + + # Fast path: buffer has n bytes already + if remain_bytes >= 0: + return + + if self._feeding: + self._buff_i = self._buf_checkpoint + raise OutOfData + + # Strip buffer before checkpoint before reading file. + if self._buf_checkpoint > 0: + del self._buffer[: self._buf_checkpoint] + self._buff_i -= self._buf_checkpoint + self._buf_checkpoint = 0 + + # Read from file + remain_bytes = -remain_bytes + if remain_bytes + len(self._buffer) > self._max_buffer_size: + raise BufferFull + while remain_bytes > 0: + to_read_bytes = max(self._read_size, remain_bytes) + read_data = self.file_like.read(to_read_bytes) + if not read_data: + break + assert isinstance(read_data, bytes) + self._buffer += read_data + remain_bytes -= len(read_data) + + if len(self._buffer) < n + self._buff_i and raise_outofdata: + self._buff_i = 0 # rollback + raise OutOfData + + def _read_header(self): + typ = TYPE_IMMEDIATE + n = 0 + obj = None + self._reserve(1) + b = self._buffer[self._buff_i] + self._buff_i += 1 + if b & 0b10000000 == 0: + obj = b + elif b & 0b11100000 == 0b11100000: + obj = -1 - (b ^ 0xFF) + elif b & 0b11100000 == 0b10100000: + n = b & 0b00011111 + typ = TYPE_RAW + if n > self._max_str_len: + raise ValueError("%s exceeds max_str_len(%s)" % (n, self._max_str_len)) + obj = self._read(n) + elif b & 0b11110000 == 0b10010000: + n = b & 0b00001111 + typ = TYPE_ARRAY + if n > self._max_array_len: + raise ValueError( + "%s exceeds max_array_len(%s)" % (n, self._max_array_len) + ) + elif b & 0b11110000 == 0b10000000: + n = b & 0b00001111 + typ = TYPE_MAP + if n > self._max_map_len: + raise ValueError("%s exceeds max_map_len(%s)" % (n, self._max_map_len)) + elif b == 0xC0: + obj = None + elif b == 0xC2: + obj = False + elif b == 0xC3: + obj = True + elif 0xC4 <= b <= 0xC6: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + if len(fmt) > 0: + n = _unpack_from(fmt, self._buffer, self._buff_i)[0] + else: + n = self._buffer[self._buff_i] + self._buff_i += size + if n > self._max_bin_len: + raise ValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len)) + obj = self._read(n) + elif 0xC7 <= b <= 0xC9: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + L, n = _unpack_from(fmt, self._buffer, self._buff_i) + self._buff_i += size + if L > self._max_ext_len: + raise ValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len)) + obj = self._read(L) + elif 0xCA <= b <= 0xD3: + size, fmt = _MSGPACK_HEADERS[b] + self._reserve(size) + if len(fmt) > 0: + obj = _unpack_from(fmt, self._buffer, self._buff_i)[0] + else: + obj = self._buffer[self._buff_i] + self._buff_i += size + elif 0xD4 <= b <= 0xD8: + size, fmt, typ = _MSGPACK_HEADERS[b] + if self._max_ext_len < size: + raise ValueError( + "%s exceeds max_ext_len(%s)" % (size, self._max_ext_len) + ) + self._reserve(size + 1) + n, obj = _unpack_from(fmt, self._buffer, self._buff_i) + self._buff_i += size + 1 + elif 0xD9 <= b <= 0xDB: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + if len(fmt) > 0: + (n,) = _unpack_from(fmt, self._buffer, self._buff_i) + else: + n = self._buffer[self._buff_i] + self._buff_i += size + if n > self._max_str_len: + raise ValueError("%s exceeds max_str_len(%s)" % (n, self._max_str_len)) + obj = self._read(n) + elif 0xDC <= b <= 0xDD: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + (n,) = _unpack_from(fmt, self._buffer, self._buff_i) + self._buff_i += size + if n > self._max_array_len: + raise ValueError( + "%s exceeds max_array_len(%s)" % (n, self._max_array_len) + ) + elif 0xDE <= b <= 0xDF: + size, fmt, typ = _MSGPACK_HEADERS[b] + self._reserve(size) + (n,) = _unpack_from(fmt, self._buffer, self._buff_i) + self._buff_i += size + if n > self._max_map_len: + raise ValueError("%s exceeds max_map_len(%s)" % (n, self._max_map_len)) + else: + raise FormatError("Unknown header: 0x%x" % b) + return typ, n, obj + + def _unpack(self, execute=EX_CONSTRUCT): + typ, n, obj = self._read_header() + + if execute == EX_READ_ARRAY_HEADER: + if typ != TYPE_ARRAY: + raise ValueError("Expected array") + return n + if execute == EX_READ_MAP_HEADER: + if typ != TYPE_MAP: + raise ValueError("Expected map") + return n + # TODO should we eliminate the recursion? + if typ == TYPE_ARRAY: + if execute == EX_SKIP: + for i in xrange(n): + # TODO check whether we need to call `list_hook` + self._unpack(EX_SKIP) + return + ret = newlist_hint(n) + for i in xrange(n): + ret.append(self._unpack(EX_CONSTRUCT)) + if self._list_hook is not None: + ret = self._list_hook(ret) + # TODO is the interaction between `list_hook` and `use_list` ok? + return ret if self._use_list else tuple(ret) + if typ == TYPE_MAP: + if execute == EX_SKIP: + for i in xrange(n): + # TODO check whether we need to call hooks + self._unpack(EX_SKIP) + self._unpack(EX_SKIP) + return + if self._object_pairs_hook is not None: + ret = self._object_pairs_hook( + (self._unpack(EX_CONSTRUCT), self._unpack(EX_CONSTRUCT)) + for _ in xrange(n) + ) + else: + ret = {} + for _ in xrange(n): + key = self._unpack(EX_CONSTRUCT) + if self._strict_map_key and type(key) not in (unicode, bytes): + raise ValueError( + "%s is not allowed for map key" % str(type(key)) + ) + if not PY2 and type(key) is str: + key = sys.intern(key) + ret[key] = self._unpack(EX_CONSTRUCT) + if self._object_hook is not None: + ret = self._object_hook(ret) + return ret + if execute == EX_SKIP: + return + if typ == TYPE_RAW: + if self._raw: + obj = bytes(obj) + else: + obj = obj.decode("utf_8", self._unicode_errors) + return obj + if typ == TYPE_BIN: + return bytes(obj) + if typ == TYPE_EXT: + if n == -1: # timestamp + ts = Timestamp.from_bytes(bytes(obj)) + if self._timestamp == 1: + return ts.to_unix() + elif self._timestamp == 2: + return ts.to_unix_nano() + elif self._timestamp == 3: + return ts.to_datetime() + else: + return ts + else: + return self._ext_hook(n, bytes(obj)) + assert typ == TYPE_IMMEDIATE + return obj + + def __iter__(self): + return self + + def __next__(self): + try: + ret = self._unpack(EX_CONSTRUCT) + self._consume() + return ret + except OutOfData: + self._consume() + raise StopIteration + except RecursionError: + raise StackError + + next = __next__ + + def skip(self): + self._unpack(EX_SKIP) + self._consume() + + def unpack(self): + try: + ret = self._unpack(EX_CONSTRUCT) + except RecursionError: + raise StackError + self._consume() + return ret + + def read_array_header(self): + ret = self._unpack(EX_READ_ARRAY_HEADER) + self._consume() + return ret + + def read_map_header(self): + ret = self._unpack(EX_READ_MAP_HEADER) + self._consume() + return ret + + def tell(self): + return self._stream_offset + + +class Packer(object): + """ + MessagePack Packer + + Usage:: + + packer = Packer() + astream.write(packer.pack(a)) + astream.write(packer.pack(b)) + + Packer's constructor has some keyword arguments: + + :param callable default: + Convert user type to builtin type that Packer supports. + See also simplejson's document. + + :param bool use_single_float: + Use single precision float type for float. (default: False) + + :param bool autoreset: + Reset buffer after each pack and return its content as `bytes`. (default: True). + If set this to false, use `bytes()` to get content and `.reset()` to clear buffer. + + :param bool use_bin_type: + Use bin type introduced in msgpack spec 2.0 for bytes. + It also enables str8 type for unicode. (default: True) + + :param bool strict_types: + If set to true, types will be checked to be exact. Derived classes + from serializable types will not be serialized and will be + treated as unsupported type and forwarded to default. + Additionally tuples will not be serialized as lists. + This is useful when trying to implement accurate serialization + for python types. + + :param bool datetime: + If set to true, datetime with tzinfo is packed into Timestamp type. + Note that the tzinfo is stripped in the timestamp. + You can get UTC datetime with `timestamp=3` option of the Unpacker. + (Python 2 is not supported). + + :param str unicode_errors: + The error handler for encoding unicode. (default: 'strict') + DO NOT USE THIS!! This option is kept for very specific usage. + + Example of streaming deserialize from file-like object:: + + unpacker = Unpacker(file_like) + for o in unpacker: + process(o) + + Example of streaming deserialize from socket:: + + unpacker = Unpacker() + while True: + buf = sock.recv(1024**2) + if not buf: + break + unpacker.feed(buf) + for o in unpacker: + process(o) + + Raises ``ExtraData`` when *packed* contains extra bytes. + Raises ``OutOfData`` when *packed* is incomplete. + Raises ``FormatError`` when *packed* is not valid msgpack. + Raises ``StackError`` when *packed* contains too nested. + Other exceptions can be raised during unpacking. + """ + + def __init__( + self, + default=None, + use_single_float=False, + autoreset=True, + use_bin_type=True, + strict_types=False, + datetime=False, + unicode_errors=None, + ): + self._strict_types = strict_types + self._use_float = use_single_float + self._autoreset = autoreset + self._use_bin_type = use_bin_type + self._buffer = StringIO() + if PY2 and datetime: + raise ValueError("datetime is not supported in Python 2") + self._datetime = bool(datetime) + self._unicode_errors = unicode_errors or "strict" + if default is not None: + if not callable(default): + raise TypeError("default must be callable") + self._default = default + + def _pack( + self, + obj, + nest_limit=DEFAULT_RECURSE_LIMIT, + check=isinstance, + check_type_strict=_check_type_strict, + ): + default_used = False + if self._strict_types: + check = check_type_strict + list_types = list + else: + list_types = (list, tuple) + while True: + if nest_limit < 0: + raise ValueError("recursion limit exceeded") + if obj is None: + return self._buffer.write(b"\xc0") + if check(obj, bool): + if obj: + return self._buffer.write(b"\xc3") + return self._buffer.write(b"\xc2") + if check(obj, int_types): + if 0 <= obj < 0x80: + return self._buffer.write(struct.pack("B", obj)) + if -0x20 <= obj < 0: + return self._buffer.write(struct.pack("b", obj)) + if 0x80 <= obj <= 0xFF: + return self._buffer.write(struct.pack("BB", 0xCC, obj)) + if -0x80 <= obj < 0: + return self._buffer.write(struct.pack(">Bb", 0xD0, obj)) + if 0xFF < obj <= 0xFFFF: + return self._buffer.write(struct.pack(">BH", 0xCD, obj)) + if -0x8000 <= obj < -0x80: + return self._buffer.write(struct.pack(">Bh", 0xD1, obj)) + if 0xFFFF < obj <= 0xFFFFFFFF: + return self._buffer.write(struct.pack(">BI", 0xCE, obj)) + if -0x80000000 <= obj < -0x8000: + return self._buffer.write(struct.pack(">Bi", 0xD2, obj)) + if 0xFFFFFFFF < obj <= 0xFFFFFFFFFFFFFFFF: + return self._buffer.write(struct.pack(">BQ", 0xCF, obj)) + if -0x8000000000000000 <= obj < -0x80000000: + return self._buffer.write(struct.pack(">Bq", 0xD3, obj)) + if not default_used and self._default is not None: + obj = self._default(obj) + default_used = True + continue + raise OverflowError("Integer value out of range") + if check(obj, (bytes, bytearray)): + n = len(obj) + if n >= 2**32: + raise ValueError("%s is too large" % type(obj).__name__) + self._pack_bin_header(n) + return self._buffer.write(obj) + if check(obj, unicode): + obj = obj.encode("utf-8", self._unicode_errors) + n = len(obj) + if n >= 2**32: + raise ValueError("String is too large") + self._pack_raw_header(n) + return self._buffer.write(obj) + if check(obj, memoryview): + n = obj.nbytes + if n >= 2**32: + raise ValueError("Memoryview is too large") + self._pack_bin_header(n) + return self._buffer.write(obj) + if check(obj, float): + if self._use_float: + return self._buffer.write(struct.pack(">Bf", 0xCA, obj)) + return self._buffer.write(struct.pack(">Bd", 0xCB, obj)) + if check(obj, (ExtType, Timestamp)): + if check(obj, Timestamp): + code = -1 + data = obj.to_bytes() + else: + code = obj.code + data = obj.data + assert isinstance(code, int) + assert isinstance(data, bytes) + L = len(data) + if L == 1: + self._buffer.write(b"\xd4") + elif L == 2: + self._buffer.write(b"\xd5") + elif L == 4: + self._buffer.write(b"\xd6") + elif L == 8: + self._buffer.write(b"\xd7") + elif L == 16: + self._buffer.write(b"\xd8") + elif L <= 0xFF: + self._buffer.write(struct.pack(">BB", 0xC7, L)) + elif L <= 0xFFFF: + self._buffer.write(struct.pack(">BH", 0xC8, L)) + else: + self._buffer.write(struct.pack(">BI", 0xC9, L)) + self._buffer.write(struct.pack("b", code)) + self._buffer.write(data) + return + if check(obj, list_types): + n = len(obj) + self._pack_array_header(n) + for i in xrange(n): + self._pack(obj[i], nest_limit - 1) + return + if check(obj, dict): + return self._pack_map_pairs( + len(obj), dict_iteritems(obj), nest_limit - 1 + ) + + if self._datetime and check(obj, _DateTime) and obj.tzinfo is not None: + obj = Timestamp.from_datetime(obj) + default_used = 1 + continue + + if not default_used and self._default is not None: + obj = self._default(obj) + default_used = 1 + continue + + if self._datetime and check(obj, _DateTime): + raise ValueError("Cannot serialize %r where tzinfo=None" % (obj,)) + + raise TypeError("Cannot serialize %r" % (obj,)) + + def pack(self, obj): + try: + self._pack(obj) + except: + self._buffer = StringIO() # force reset + raise + if self._autoreset: + ret = self._buffer.getvalue() + self._buffer = StringIO() + return ret + + def pack_map_pairs(self, pairs): + self._pack_map_pairs(len(pairs), pairs) + if self._autoreset: + ret = self._buffer.getvalue() + self._buffer = StringIO() + return ret + + def pack_array_header(self, n): + if n >= 2**32: + raise ValueError + self._pack_array_header(n) + if self._autoreset: + ret = self._buffer.getvalue() + self._buffer = StringIO() + return ret + + def pack_map_header(self, n): + if n >= 2**32: + raise ValueError + self._pack_map_header(n) + if self._autoreset: + ret = self._buffer.getvalue() + self._buffer = StringIO() + return ret + + def pack_ext_type(self, typecode, data): + if not isinstance(typecode, int): + raise TypeError("typecode must have int type.") + if not 0 <= typecode <= 127: + raise ValueError("typecode should be 0-127") + if not isinstance(data, bytes): + raise TypeError("data must have bytes type") + L = len(data) + if L > 0xFFFFFFFF: + raise ValueError("Too large data") + if L == 1: + self._buffer.write(b"\xd4") + elif L == 2: + self._buffer.write(b"\xd5") + elif L == 4: + self._buffer.write(b"\xd6") + elif L == 8: + self._buffer.write(b"\xd7") + elif L == 16: + self._buffer.write(b"\xd8") + elif L <= 0xFF: + self._buffer.write(b"\xc7" + struct.pack("B", L)) + elif L <= 0xFFFF: + self._buffer.write(b"\xc8" + struct.pack(">H", L)) + else: + self._buffer.write(b"\xc9" + struct.pack(">I", L)) + self._buffer.write(struct.pack("B", typecode)) + self._buffer.write(data) + + def _pack_array_header(self, n): + if n <= 0x0F: + return self._buffer.write(struct.pack("B", 0x90 + n)) + if n <= 0xFFFF: + return self._buffer.write(struct.pack(">BH", 0xDC, n)) + if n <= 0xFFFFFFFF: + return self._buffer.write(struct.pack(">BI", 0xDD, n)) + raise ValueError("Array is too large") + + def _pack_map_header(self, n): + if n <= 0x0F: + return self._buffer.write(struct.pack("B", 0x80 + n)) + if n <= 0xFFFF: + return self._buffer.write(struct.pack(">BH", 0xDE, n)) + if n <= 0xFFFFFFFF: + return self._buffer.write(struct.pack(">BI", 0xDF, n)) + raise ValueError("Dict is too large") + + def _pack_map_pairs(self, n, pairs, nest_limit=DEFAULT_RECURSE_LIMIT): + self._pack_map_header(n) + for (k, v) in pairs: + self._pack(k, nest_limit - 1) + self._pack(v, nest_limit - 1) + + def _pack_raw_header(self, n): + if n <= 0x1F: + self._buffer.write(struct.pack("B", 0xA0 + n)) + elif self._use_bin_type and n <= 0xFF: + self._buffer.write(struct.pack(">BB", 0xD9, n)) + elif n <= 0xFFFF: + self._buffer.write(struct.pack(">BH", 0xDA, n)) + elif n <= 0xFFFFFFFF: + self._buffer.write(struct.pack(">BI", 0xDB, n)) + else: + raise ValueError("Raw is too large") + + def _pack_bin_header(self, n): + if not self._use_bin_type: + return self._pack_raw_header(n) + elif n <= 0xFF: + return self._buffer.write(struct.pack(">BB", 0xC4, n)) + elif n <= 0xFFFF: + return self._buffer.write(struct.pack(">BH", 0xC5, n)) + elif n <= 0xFFFFFFFF: + return self._buffer.write(struct.pack(">BI", 0xC6, n)) + else: + raise ValueError("Bin is too large") + + def bytes(self): + """Return internal buffer contents as bytes object""" + return self._buffer.getvalue() + + def reset(self): + """Reset internal buffer. + + This method is useful only when autoreset=False. + """ + self._buffer = StringIO() + + def getbuffer(self): + """Return view of internal buffer.""" + if USING_STRINGBUILDER or PY2: + return memoryview(self.bytes()) + else: + return self._buffer.getbuffer() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__about__.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__about__.py new file mode 100644 index 0000000..3551bc2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__about__.py @@ -0,0 +1,26 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +__all__ = [ + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", +] + +__title__ = "packaging" +__summary__ = "Core utilities for Python packages" +__uri__ = "https://github.com/pypa/packaging" + +__version__ = "21.3" + +__author__ = "Donald Stufft and individual contributors" +__email__ = "donald@stufft.io" + +__license__ = "BSD-2-Clause or Apache-2.0" +__copyright__ = "2014-2019 %s" % __author__ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py new file mode 100644 index 0000000..3c50c5d --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py @@ -0,0 +1,25 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from .__about__ import ( + __author__, + __copyright__, + __email__, + __license__, + __summary__, + __title__, + __uri__, + __version__, +) + +__all__ = [ + "__title__", + "__summary__", + "__uri__", + "__version__", + "__author__", + "__email__", + "__license__", + "__copyright__", +] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc new file mode 100644 index 0000000..ed4120e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..5ecc52f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc new file mode 100644 index 0000000..42201f5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc new file mode 100644 index 0000000..bef337b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc new file mode 100644 index 0000000..0e907f1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc new file mode 100644 index 0000000..8227b9f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc new file mode 100644 index 0000000..a0c2175 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc new file mode 100644 index 0000000..96754a6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc new file mode 100644 index 0000000..103d1ed Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000..0254974 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc new file mode 100644 index 0000000..696d79f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py new file mode 100644 index 0000000..4c379aa --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py @@ -0,0 +1,301 @@ +import collections +import functools +import os +import re +import struct +import sys +import warnings +from typing import IO, Dict, Iterator, NamedTuple, Optional, Tuple + + +# Python does not provide platform information at sufficient granularity to +# identify the architecture of the running executable in some cases, so we +# determine it dynamically by reading the information from the running +# process. This only applies on Linux, which uses the ELF format. +class _ELFFileHeader: + # https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header + class _InvalidELFFileHeader(ValueError): + """ + An invalid ELF file header was found. + """ + + ELF_MAGIC_NUMBER = 0x7F454C46 + ELFCLASS32 = 1 + ELFCLASS64 = 2 + ELFDATA2LSB = 1 + ELFDATA2MSB = 2 + EM_386 = 3 + EM_S390 = 22 + EM_ARM = 40 + EM_X86_64 = 62 + EF_ARM_ABIMASK = 0xFF000000 + EF_ARM_ABI_VER5 = 0x05000000 + EF_ARM_ABI_FLOAT_HARD = 0x00000400 + + def __init__(self, file: IO[bytes]) -> None: + def unpack(fmt: str) -> int: + try: + data = file.read(struct.calcsize(fmt)) + result: Tuple[int, ...] = struct.unpack(fmt, data) + except struct.error: + raise _ELFFileHeader._InvalidELFFileHeader() + return result[0] + + self.e_ident_magic = unpack(">I") + if self.e_ident_magic != self.ELF_MAGIC_NUMBER: + raise _ELFFileHeader._InvalidELFFileHeader() + self.e_ident_class = unpack("B") + if self.e_ident_class not in {self.ELFCLASS32, self.ELFCLASS64}: + raise _ELFFileHeader._InvalidELFFileHeader() + self.e_ident_data = unpack("B") + if self.e_ident_data not in {self.ELFDATA2LSB, self.ELFDATA2MSB}: + raise _ELFFileHeader._InvalidELFFileHeader() + self.e_ident_version = unpack("B") + self.e_ident_osabi = unpack("B") + self.e_ident_abiversion = unpack("B") + self.e_ident_pad = file.read(7) + format_h = "H" + format_i = "I" + format_q = "Q" + format_p = format_i if self.e_ident_class == self.ELFCLASS32 else format_q + self.e_type = unpack(format_h) + self.e_machine = unpack(format_h) + self.e_version = unpack(format_i) + self.e_entry = unpack(format_p) + self.e_phoff = unpack(format_p) + self.e_shoff = unpack(format_p) + self.e_flags = unpack(format_i) + self.e_ehsize = unpack(format_h) + self.e_phentsize = unpack(format_h) + self.e_phnum = unpack(format_h) + self.e_shentsize = unpack(format_h) + self.e_shnum = unpack(format_h) + self.e_shstrndx = unpack(format_h) + + +def _get_elf_header() -> Optional[_ELFFileHeader]: + try: + with open(sys.executable, "rb") as f: + elf_header = _ELFFileHeader(f) + except (OSError, TypeError, _ELFFileHeader._InvalidELFFileHeader): + return None + return elf_header + + +def _is_linux_armhf() -> bool: + # hard-float ABI can be detected from the ELF header of the running + # process + # https://static.docs.arm.com/ihi0044/g/aaelf32.pdf + elf_header = _get_elf_header() + if elf_header is None: + return False + result = elf_header.e_ident_class == elf_header.ELFCLASS32 + result &= elf_header.e_ident_data == elf_header.ELFDATA2LSB + result &= elf_header.e_machine == elf_header.EM_ARM + result &= ( + elf_header.e_flags & elf_header.EF_ARM_ABIMASK + ) == elf_header.EF_ARM_ABI_VER5 + result &= ( + elf_header.e_flags & elf_header.EF_ARM_ABI_FLOAT_HARD + ) == elf_header.EF_ARM_ABI_FLOAT_HARD + return result + + +def _is_linux_i686() -> bool: + elf_header = _get_elf_header() + if elf_header is None: + return False + result = elf_header.e_ident_class == elf_header.ELFCLASS32 + result &= elf_header.e_ident_data == elf_header.ELFDATA2LSB + result &= elf_header.e_machine == elf_header.EM_386 + return result + + +def _have_compatible_abi(arch: str) -> bool: + if arch == "armv7l": + return _is_linux_armhf() + if arch == "i686": + return _is_linux_i686() + return arch in {"x86_64", "aarch64", "ppc64", "ppc64le", "s390x"} + + +# If glibc ever changes its major version, we need to know what the last +# minor version was, so we can build the complete list of all versions. +# For now, guess what the highest minor version might be, assume it will +# be 50 for testing. Once this actually happens, update the dictionary +# with the actual value. +_LAST_GLIBC_MINOR: Dict[int, int] = collections.defaultdict(lambda: 50) + + +class _GLibCVersion(NamedTuple): + major: int + minor: int + + +def _glibc_version_string_confstr() -> Optional[str]: + """ + Primary implementation of glibc_version_string using os.confstr. + """ + # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely + # to be broken or missing. This strategy is used in the standard library + # platform module. + # https://github.com/python/cpython/blob/fcf1d003bf4f0100c/Lib/platform.py#L175-L183 + try: + # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17". + version_string = os.confstr("CS_GNU_LIBC_VERSION") + assert version_string is not None + _, version = version_string.split() + except (AssertionError, AttributeError, OSError, ValueError): + # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... + return None + return version + + +def _glibc_version_string_ctypes() -> Optional[str]: + """ + Fallback implementation of glibc_version_string using ctypes. + """ + try: + import ctypes + except ImportError: + return None + + # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. + # + # We must also handle the special case where the executable is not a + # dynamically linked executable. This can occur when using musl libc, + # for example. In this situation, dlopen() will error, leading to an + # OSError. Interestingly, at least in the case of musl, there is no + # errno set on the OSError. The single string argument used to construct + # OSError comes from libc itself and is therefore not portable to + # hard code here. In any case, failure to call dlopen() means we + # can proceed, so we bail on our attempt. + try: + process_namespace = ctypes.CDLL(None) + except OSError: + return None + + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: + # Symbol doesn't exist -> therefore, we are not linked to + # glibc. + return None + + # Call gnu_get_libc_version, which returns a string like "2.5" + gnu_get_libc_version.restype = ctypes.c_char_p + version_str: str = gnu_get_libc_version() + # py2 / py3 compatibility: + if not isinstance(version_str, str): + version_str = version_str.decode("ascii") + + return version_str + + +def _glibc_version_string() -> Optional[str]: + """Returns glibc version string, or None if not using glibc.""" + return _glibc_version_string_confstr() or _glibc_version_string_ctypes() + + +def _parse_glibc_version(version_str: str) -> Tuple[int, int]: + """Parse glibc version. + + We use a regexp instead of str.split because we want to discard any + random junk that might come after the minor version -- this might happen + in patched/forked versions of glibc (e.g. Linaro's version of glibc + uses version strings like "2.20-2014.11"). See gh-3588. + """ + m = re.match(r"(?P[0-9]+)\.(?P[0-9]+)", version_str) + if not m: + warnings.warn( + "Expected glibc version with 2 components major.minor," + " got: %s" % version_str, + RuntimeWarning, + ) + return -1, -1 + return int(m.group("major")), int(m.group("minor")) + + +@functools.lru_cache() +def _get_glibc_version() -> Tuple[int, int]: + version_str = _glibc_version_string() + if version_str is None: + return (-1, -1) + return _parse_glibc_version(version_str) + + +# From PEP 513, PEP 600 +def _is_compatible(name: str, arch: str, version: _GLibCVersion) -> bool: + sys_glibc = _get_glibc_version() + if sys_glibc < version: + return False + # Check for presence of _manylinux module. + try: + import _manylinux # noqa + except ImportError: + return True + if hasattr(_manylinux, "manylinux_compatible"): + result = _manylinux.manylinux_compatible(version[0], version[1], arch) + if result is not None: + return bool(result) + return True + if version == _GLibCVersion(2, 5): + if hasattr(_manylinux, "manylinux1_compatible"): + return bool(_manylinux.manylinux1_compatible) + if version == _GLibCVersion(2, 12): + if hasattr(_manylinux, "manylinux2010_compatible"): + return bool(_manylinux.manylinux2010_compatible) + if version == _GLibCVersion(2, 17): + if hasattr(_manylinux, "manylinux2014_compatible"): + return bool(_manylinux.manylinux2014_compatible) + return True + + +_LEGACY_MANYLINUX_MAP = { + # CentOS 7 w/ glibc 2.17 (PEP 599) + (2, 17): "manylinux2014", + # CentOS 6 w/ glibc 2.12 (PEP 571) + (2, 12): "manylinux2010", + # CentOS 5 w/ glibc 2.5 (PEP 513) + (2, 5): "manylinux1", +} + + +def platform_tags(linux: str, arch: str) -> Iterator[str]: + if not _have_compatible_abi(arch): + return + # Oldest glibc to be supported regardless of architecture is (2, 17). + too_old_glibc2 = _GLibCVersion(2, 16) + if arch in {"x86_64", "i686"}: + # On x86/i686 also oldest glibc to be supported is (2, 5). + too_old_glibc2 = _GLibCVersion(2, 4) + current_glibc = _GLibCVersion(*_get_glibc_version()) + glibc_max_list = [current_glibc] + # We can assume compatibility across glibc major versions. + # https://sourceware.org/bugzilla/show_bug.cgi?id=24636 + # + # Build a list of maximum glibc versions so that we can + # output the canonical list of all glibc from current_glibc + # down to too_old_glibc2, including all intermediary versions. + for glibc_major in range(current_glibc.major - 1, 1, -1): + glibc_minor = _LAST_GLIBC_MINOR[glibc_major] + glibc_max_list.append(_GLibCVersion(glibc_major, glibc_minor)) + for glibc_max in glibc_max_list: + if glibc_max.major == too_old_glibc2.major: + min_minor = too_old_glibc2.minor + else: + # For other glibc major versions oldest supported is (x, 0). + min_minor = -1 + for glibc_minor in range(glibc_max.minor, min_minor, -1): + glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) + tag = "manylinux_{}_{}".format(*glibc_version) + if _is_compatible(tag, arch, glibc_version): + yield linux.replace("linux", tag) + # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. + if glibc_version in _LEGACY_MANYLINUX_MAP: + legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version] + if _is_compatible(legacy_tag, arch, glibc_version): + yield linux.replace("linux", legacy_tag) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py new file mode 100644 index 0000000..8ac3059 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py @@ -0,0 +1,136 @@ +"""PEP 656 support. + +This module implements logic to detect if the currently running Python is +linked against musl, and what musl version is used. +""" + +import contextlib +import functools +import operator +import os +import re +import struct +import subprocess +import sys +from typing import IO, Iterator, NamedTuple, Optional, Tuple + + +def _read_unpacked(f: IO[bytes], fmt: str) -> Tuple[int, ...]: + return struct.unpack(fmt, f.read(struct.calcsize(fmt))) + + +def _parse_ld_musl_from_elf(f: IO[bytes]) -> Optional[str]: + """Detect musl libc location by parsing the Python executable. + + Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca + ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html + """ + f.seek(0) + try: + ident = _read_unpacked(f, "16B") + except struct.error: + return None + if ident[:4] != tuple(b"\x7fELF"): # Invalid magic, not ELF. + return None + f.seek(struct.calcsize("HHI"), 1) # Skip file type, machine, and version. + + try: + # e_fmt: Format for program header. + # p_fmt: Format for section header. + # p_idx: Indexes to find p_type, p_offset, and p_filesz. + e_fmt, p_fmt, p_idx = { + 1: ("IIIIHHH", "IIIIIIII", (0, 1, 4)), # 32-bit. + 2: ("QQQIHHH", "IIQQQQQQ", (0, 2, 5)), # 64-bit. + }[ident[4]] + except KeyError: + return None + else: + p_get = operator.itemgetter(*p_idx) + + # Find the interpreter section and return its content. + try: + _, e_phoff, _, _, _, e_phentsize, e_phnum = _read_unpacked(f, e_fmt) + except struct.error: + return None + for i in range(e_phnum + 1): + f.seek(e_phoff + e_phentsize * i) + try: + p_type, p_offset, p_filesz = p_get(_read_unpacked(f, p_fmt)) + except struct.error: + return None + if p_type != 3: # Not PT_INTERP. + continue + f.seek(p_offset) + interpreter = os.fsdecode(f.read(p_filesz)).strip("\0") + if "musl" not in interpreter: + return None + return interpreter + return None + + +class _MuslVersion(NamedTuple): + major: int + minor: int + + +def _parse_musl_version(output: str) -> Optional[_MuslVersion]: + lines = [n for n in (n.strip() for n in output.splitlines()) if n] + if len(lines) < 2 or lines[0][:4] != "musl": + return None + m = re.match(r"Version (\d+)\.(\d+)", lines[1]) + if not m: + return None + return _MuslVersion(major=int(m.group(1)), minor=int(m.group(2))) + + +@functools.lru_cache() +def _get_musl_version(executable: str) -> Optional[_MuslVersion]: + """Detect currently-running musl runtime version. + + This is done by checking the specified executable's dynamic linking + information, and invoking the loader to parse its output for a version + string. If the loader is musl, the output would be something like:: + + musl libc (x86_64) + Version 1.2.2 + Dynamic Program Loader + """ + with contextlib.ExitStack() as stack: + try: + f = stack.enter_context(open(executable, "rb")) + except OSError: + return None + ld = _parse_ld_musl_from_elf(f) + if not ld: + return None + proc = subprocess.run([ld], stderr=subprocess.PIPE, universal_newlines=True) + return _parse_musl_version(proc.stderr) + + +def platform_tags(arch: str) -> Iterator[str]: + """Generate musllinux tags compatible to the current platform. + + :param arch: Should be the part of platform tag after the ``linux_`` + prefix, e.g. ``x86_64``. The ``linux_`` prefix is assumed as a + prerequisite for the current platform to be musllinux-compatible. + + :returns: An iterator of compatible musllinux tags. + """ + sys_musl = _get_musl_version(sys.executable) + if sys_musl is None: # Python not dynamically linked against musl. + return + for minor in range(sys_musl.minor, -1, -1): + yield f"musllinux_{sys_musl.major}_{minor}_{arch}" + + +if __name__ == "__main__": # pragma: no cover + import sysconfig + + plat = sysconfig.get_platform() + assert plat.startswith("linux-"), "not linux" + + print("plat:", plat) + print("musl:", _get_musl_version(sys.executable)) + print("tags:", end=" ") + for t in platform_tags(re.sub(r"[.-]", "_", plat.split("-", 1)[-1])): + print(t, end="\n ") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py new file mode 100644 index 0000000..90a6465 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py @@ -0,0 +1,61 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + + +class InfinityType: + def __repr__(self) -> str: + return "Infinity" + + def __hash__(self) -> int: + return hash(repr(self)) + + def __lt__(self, other: object) -> bool: + return False + + def __le__(self, other: object) -> bool: + return False + + def __eq__(self, other: object) -> bool: + return isinstance(other, self.__class__) + + def __gt__(self, other: object) -> bool: + return True + + def __ge__(self, other: object) -> bool: + return True + + def __neg__(self: object) -> "NegativeInfinityType": + return NegativeInfinity + + +Infinity = InfinityType() + + +class NegativeInfinityType: + def __repr__(self) -> str: + return "-Infinity" + + def __hash__(self) -> int: + return hash(repr(self)) + + def __lt__(self, other: object) -> bool: + return True + + def __le__(self, other: object) -> bool: + return True + + def __eq__(self, other: object) -> bool: + return isinstance(other, self.__class__) + + def __gt__(self, other: object) -> bool: + return False + + def __ge__(self, other: object) -> bool: + return False + + def __neg__(self: object) -> InfinityType: + return Infinity + + +NegativeInfinity = NegativeInfinityType() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py new file mode 100644 index 0000000..540e7a4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py @@ -0,0 +1,304 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +import operator +import os +import platform +import sys +from typing import Any, Callable, Dict, List, Optional, Tuple, Union + +from pip._vendor.pyparsing import ( # noqa: N817 + Forward, + Group, + Literal as L, + ParseException, + ParseResults, + QuotedString, + ZeroOrMore, + stringEnd, + stringStart, +) + +from .specifiers import InvalidSpecifier, Specifier + +__all__ = [ + "InvalidMarker", + "UndefinedComparison", + "UndefinedEnvironmentName", + "Marker", + "default_environment", +] + +Operator = Callable[[str, str], bool] + + +class InvalidMarker(ValueError): + """ + An invalid marker was found, users should refer to PEP 508. + """ + + +class UndefinedComparison(ValueError): + """ + An invalid operation was attempted on a value that doesn't support it. + """ + + +class UndefinedEnvironmentName(ValueError): + """ + A name was attempted to be used that does not exist inside of the + environment. + """ + + +class Node: + def __init__(self, value: Any) -> None: + self.value = value + + def __str__(self) -> str: + return str(self.value) + + def __repr__(self) -> str: + return f"<{self.__class__.__name__}('{self}')>" + + def serialize(self) -> str: + raise NotImplementedError + + +class Variable(Node): + def serialize(self) -> str: + return str(self) + + +class Value(Node): + def serialize(self) -> str: + return f'"{self}"' + + +class Op(Node): + def serialize(self) -> str: + return str(self) + + +VARIABLE = ( + L("implementation_version") + | L("platform_python_implementation") + | L("implementation_name") + | L("python_full_version") + | L("platform_release") + | L("platform_version") + | L("platform_machine") + | L("platform_system") + | L("python_version") + | L("sys_platform") + | L("os_name") + | L("os.name") # PEP-345 + | L("sys.platform") # PEP-345 + | L("platform.version") # PEP-345 + | L("platform.machine") # PEP-345 + | L("platform.python_implementation") # PEP-345 + | L("python_implementation") # undocumented setuptools legacy + | L("extra") # PEP-508 +) +ALIASES = { + "os.name": "os_name", + "sys.platform": "sys_platform", + "platform.version": "platform_version", + "platform.machine": "platform_machine", + "platform.python_implementation": "platform_python_implementation", + "python_implementation": "platform_python_implementation", +} +VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) + +VERSION_CMP = ( + L("===") | L("==") | L(">=") | L("<=") | L("!=") | L("~=") | L(">") | L("<") +) + +MARKER_OP = VERSION_CMP | L("not in") | L("in") +MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) + +MARKER_VALUE = QuotedString("'") | QuotedString('"') +MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) + +BOOLOP = L("and") | L("or") + +MARKER_VAR = VARIABLE | MARKER_VALUE + +MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) +MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) + +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() + +MARKER_EXPR = Forward() +MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) +MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) + +MARKER = stringStart + MARKER_EXPR + stringEnd + + +def _coerce_parse_result(results: Union[ParseResults, List[Any]]) -> List[Any]: + if isinstance(results, ParseResults): + return [_coerce_parse_result(i) for i in results] + else: + return results + + +def _format_marker( + marker: Union[List[str], Tuple[Node, ...], str], first: Optional[bool] = True +) -> str: + + assert isinstance(marker, (list, tuple, str)) + + # Sometimes we have a structure like [[...]] which is a single item list + # where the single item is itself it's own list. In that case we want skip + # the rest of this function so that we don't get extraneous () on the + # outside. + if ( + isinstance(marker, list) + and len(marker) == 1 + and isinstance(marker[0], (list, tuple)) + ): + return _format_marker(marker[0]) + + if isinstance(marker, list): + inner = (_format_marker(m, first=False) for m in marker) + if first: + return " ".join(inner) + else: + return "(" + " ".join(inner) + ")" + elif isinstance(marker, tuple): + return " ".join([m.serialize() for m in marker]) + else: + return marker + + +_operators: Dict[str, Operator] = { + "in": lambda lhs, rhs: lhs in rhs, + "not in": lambda lhs, rhs: lhs not in rhs, + "<": operator.lt, + "<=": operator.le, + "==": operator.eq, + "!=": operator.ne, + ">=": operator.ge, + ">": operator.gt, +} + + +def _eval_op(lhs: str, op: Op, rhs: str) -> bool: + try: + spec = Specifier("".join([op.serialize(), rhs])) + except InvalidSpecifier: + pass + else: + return spec.contains(lhs) + + oper: Optional[Operator] = _operators.get(op.serialize()) + if oper is None: + raise UndefinedComparison(f"Undefined {op!r} on {lhs!r} and {rhs!r}.") + + return oper(lhs, rhs) + + +class Undefined: + pass + + +_undefined = Undefined() + + +def _get_env(environment: Dict[str, str], name: str) -> str: + value: Union[str, Undefined] = environment.get(name, _undefined) + + if isinstance(value, Undefined): + raise UndefinedEnvironmentName( + f"{name!r} does not exist in evaluation environment." + ) + + return value + + +def _evaluate_markers(markers: List[Any], environment: Dict[str, str]) -> bool: + groups: List[List[bool]] = [[]] + + for marker in markers: + assert isinstance(marker, (list, tuple, str)) + + if isinstance(marker, list): + groups[-1].append(_evaluate_markers(marker, environment)) + elif isinstance(marker, tuple): + lhs, op, rhs = marker + + if isinstance(lhs, Variable): + lhs_value = _get_env(environment, lhs.value) + rhs_value = rhs.value + else: + lhs_value = lhs.value + rhs_value = _get_env(environment, rhs.value) + + groups[-1].append(_eval_op(lhs_value, op, rhs_value)) + else: + assert marker in ["and", "or"] + if marker == "or": + groups.append([]) + + return any(all(item) for item in groups) + + +def format_full_version(info: "sys._version_info") -> str: + version = "{0.major}.{0.minor}.{0.micro}".format(info) + kind = info.releaselevel + if kind != "final": + version += kind[0] + str(info.serial) + return version + + +def default_environment() -> Dict[str, str]: + iver = format_full_version(sys.implementation.version) + implementation_name = sys.implementation.name + return { + "implementation_name": implementation_name, + "implementation_version": iver, + "os_name": os.name, + "platform_machine": platform.machine(), + "platform_release": platform.release(), + "platform_system": platform.system(), + "platform_version": platform.version(), + "python_full_version": platform.python_version(), + "platform_python_implementation": platform.python_implementation(), + "python_version": ".".join(platform.python_version_tuple()[:2]), + "sys_platform": sys.platform, + } + + +class Marker: + def __init__(self, marker: str) -> None: + try: + self._markers = _coerce_parse_result(MARKER.parseString(marker)) + except ParseException as e: + raise InvalidMarker( + f"Invalid marker: {marker!r}, parse error at " + f"{marker[e.loc : e.loc + 8]!r}" + ) + + def __str__(self) -> str: + return _format_marker(self._markers) + + def __repr__(self) -> str: + return f"" + + def evaluate(self, environment: Optional[Dict[str, str]] = None) -> bool: + """Evaluate a marker. + + Return the boolean from evaluating the given marker against the + environment. environment is an optional argument to override all or + part of the determined environment. + + The environment is determined from the current Python process. + """ + current_environment = default_environment() + if environment is not None: + current_environment.update(environment) + + return _evaluate_markers(self._markers, current_environment) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py new file mode 100644 index 0000000..1eab7dd --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py @@ -0,0 +1,146 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +import re +import string +import urllib.parse +from typing import List, Optional as TOptional, Set + +from pip._vendor.pyparsing import ( # noqa + Combine, + Literal as L, + Optional, + ParseException, + Regex, + Word, + ZeroOrMore, + originalTextFor, + stringEnd, + stringStart, +) + +from .markers import MARKER_EXPR, Marker +from .specifiers import LegacySpecifier, Specifier, SpecifierSet + + +class InvalidRequirement(ValueError): + """ + An invalid requirement was found, users should refer to PEP 508. + """ + + +ALPHANUM = Word(string.ascii_letters + string.digits) + +LBRACKET = L("[").suppress() +RBRACKET = L("]").suppress() +LPAREN = L("(").suppress() +RPAREN = L(")").suppress() +COMMA = L(",").suppress() +SEMICOLON = L(";").suppress() +AT = L("@").suppress() + +PUNCTUATION = Word("-_.") +IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) +IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) + +NAME = IDENTIFIER("name") +EXTRA = IDENTIFIER + +URI = Regex(r"[^ ]+")("url") +URL = AT + URI + +EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) +EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") + +VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) +VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) + +VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY +VERSION_MANY = Combine( + VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), joinString=",", adjacent=False +)("_raw_spec") +_VERSION_SPEC = Optional((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY) +_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or "") + +VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") +VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) + +MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") +MARKER_EXPR.setParseAction( + lambda s, l, t: Marker(s[t._original_start : t._original_end]) +) +MARKER_SEPARATOR = SEMICOLON +MARKER = MARKER_SEPARATOR + MARKER_EXPR + +VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) +URL_AND_MARKER = URL + Optional(MARKER) + +NAMED_REQUIREMENT = NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) + +REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd +# pyparsing isn't thread safe during initialization, so we do it eagerly, see +# issue #104 +REQUIREMENT.parseString("x[]") + + +class Requirement: + """Parse a requirement. + + Parse a given requirement string into its parts, such as name, specifier, + URL, and extras. Raises InvalidRequirement on a badly-formed requirement + string. + """ + + # TODO: Can we test whether something is contained within a requirement? + # If so how do we do that? Do we need to test against the _name_ of + # the thing as well as the version? What about the markers? + # TODO: Can we normalize the name and extra name? + + def __init__(self, requirement_string: str) -> None: + try: + req = REQUIREMENT.parseString(requirement_string) + except ParseException as e: + raise InvalidRequirement( + f'Parse error at "{ requirement_string[e.loc : e.loc + 8]!r}": {e.msg}' + ) + + self.name: str = req.name + if req.url: + parsed_url = urllib.parse.urlparse(req.url) + if parsed_url.scheme == "file": + if urllib.parse.urlunparse(parsed_url) != req.url: + raise InvalidRequirement("Invalid URL given") + elif not (parsed_url.scheme and parsed_url.netloc) or ( + not parsed_url.scheme and not parsed_url.netloc + ): + raise InvalidRequirement(f"Invalid URL: {req.url}") + self.url: TOptional[str] = req.url + else: + self.url = None + self.extras: Set[str] = set(req.extras.asList() if req.extras else []) + self.specifier: SpecifierSet = SpecifierSet(req.specifier) + self.marker: TOptional[Marker] = req.marker if req.marker else None + + def __str__(self) -> str: + parts: List[str] = [self.name] + + if self.extras: + formatted_extras = ",".join(sorted(self.extras)) + parts.append(f"[{formatted_extras}]") + + if self.specifier: + parts.append(str(self.specifier)) + + if self.url: + parts.append(f"@ {self.url}") + if self.marker: + parts.append(" ") + + if self.marker: + parts.append(f"; {self.marker}") + + return "".join(parts) + + def __repr__(self) -> str: + return f"" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py new file mode 100644 index 0000000..0e218a6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py @@ -0,0 +1,802 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +import abc +import functools +import itertools +import re +import warnings +from typing import ( + Callable, + Dict, + Iterable, + Iterator, + List, + Optional, + Pattern, + Set, + Tuple, + TypeVar, + Union, +) + +from .utils import canonicalize_version +from .version import LegacyVersion, Version, parse + +ParsedVersion = Union[Version, LegacyVersion] +UnparsedVersion = Union[Version, LegacyVersion, str] +VersionTypeVar = TypeVar("VersionTypeVar", bound=UnparsedVersion) +CallableOperator = Callable[[ParsedVersion, str], bool] + + +class InvalidSpecifier(ValueError): + """ + An invalid specifier was found, users should refer to PEP 440. + """ + + +class BaseSpecifier(metaclass=abc.ABCMeta): + @abc.abstractmethod + def __str__(self) -> str: + """ + Returns the str representation of this Specifier like object. This + should be representative of the Specifier itself. + """ + + @abc.abstractmethod + def __hash__(self) -> int: + """ + Returns a hash value for this Specifier like object. + """ + + @abc.abstractmethod + def __eq__(self, other: object) -> bool: + """ + Returns a boolean representing whether or not the two Specifier like + objects are equal. + """ + + @abc.abstractproperty + def prereleases(self) -> Optional[bool]: + """ + Returns whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @prereleases.setter + def prereleases(self, value: bool) -> None: + """ + Sets whether or not pre-releases as a whole are allowed by this + specifier. + """ + + @abc.abstractmethod + def contains(self, item: str, prereleases: Optional[bool] = None) -> bool: + """ + Determines if the given item is contained within this specifier. + """ + + @abc.abstractmethod + def filter( + self, iterable: Iterable[VersionTypeVar], prereleases: Optional[bool] = None + ) -> Iterable[VersionTypeVar]: + """ + Takes an iterable of items and filters them so that only items which + are contained within this specifier are allowed in it. + """ + + +class _IndividualSpecifier(BaseSpecifier): + + _operators: Dict[str, str] = {} + _regex: Pattern[str] + + def __init__(self, spec: str = "", prereleases: Optional[bool] = None) -> None: + match = self._regex.search(spec) + if not match: + raise InvalidSpecifier(f"Invalid specifier: '{spec}'") + + self._spec: Tuple[str, str] = ( + match.group("operator").strip(), + match.group("version").strip(), + ) + + # Store whether or not this Specifier should accept prereleases + self._prereleases = prereleases + + def __repr__(self) -> str: + pre = ( + f", prereleases={self.prereleases!r}" + if self._prereleases is not None + else "" + ) + + return f"<{self.__class__.__name__}({str(self)!r}{pre})>" + + def __str__(self) -> str: + return "{}{}".format(*self._spec) + + @property + def _canonical_spec(self) -> Tuple[str, str]: + return self._spec[0], canonicalize_version(self._spec[1]) + + def __hash__(self) -> int: + return hash(self._canonical_spec) + + def __eq__(self, other: object) -> bool: + if isinstance(other, str): + try: + other = self.__class__(str(other)) + except InvalidSpecifier: + return NotImplemented + elif not isinstance(other, self.__class__): + return NotImplemented + + return self._canonical_spec == other._canonical_spec + + def _get_operator(self, op: str) -> CallableOperator: + operator_callable: CallableOperator = getattr( + self, f"_compare_{self._operators[op]}" + ) + return operator_callable + + def _coerce_version(self, version: UnparsedVersion) -> ParsedVersion: + if not isinstance(version, (LegacyVersion, Version)): + version = parse(version) + return version + + @property + def operator(self) -> str: + return self._spec[0] + + @property + def version(self) -> str: + return self._spec[1] + + @property + def prereleases(self) -> Optional[bool]: + return self._prereleases + + @prereleases.setter + def prereleases(self, value: bool) -> None: + self._prereleases = value + + def __contains__(self, item: str) -> bool: + return self.contains(item) + + def contains( + self, item: UnparsedVersion, prereleases: Optional[bool] = None + ) -> bool: + + # Determine if prereleases are to be allowed or not. + if prereleases is None: + prereleases = self.prereleases + + # Normalize item to a Version or LegacyVersion, this allows us to have + # a shortcut for ``"2.0" in Specifier(">=2") + normalized_item = self._coerce_version(item) + + # Determine if we should be supporting prereleases in this specifier + # or not, if we do not support prereleases than we can short circuit + # logic if this version is a prereleases. + if normalized_item.is_prerelease and not prereleases: + return False + + # Actually do the comparison to determine if this item is contained + # within this Specifier or not. + operator_callable: CallableOperator = self._get_operator(self.operator) + return operator_callable(normalized_item, self.version) + + def filter( + self, iterable: Iterable[VersionTypeVar], prereleases: Optional[bool] = None + ) -> Iterable[VersionTypeVar]: + + yielded = False + found_prereleases = [] + + kw = {"prereleases": prereleases if prereleases is not None else True} + + # Attempt to iterate over all the values in the iterable and if any of + # them match, yield them. + for version in iterable: + parsed_version = self._coerce_version(version) + + if self.contains(parsed_version, **kw): + # If our version is a prerelease, and we were not set to allow + # prereleases, then we'll store it for later in case nothing + # else matches this specifier. + if parsed_version.is_prerelease and not ( + prereleases or self.prereleases + ): + found_prereleases.append(version) + # Either this is not a prerelease, or we should have been + # accepting prereleases from the beginning. + else: + yielded = True + yield version + + # Now that we've iterated over everything, determine if we've yielded + # any values, and if we have not and we have any prereleases stored up + # then we will go ahead and yield the prereleases. + if not yielded and found_prereleases: + for version in found_prereleases: + yield version + + +class LegacySpecifier(_IndividualSpecifier): + + _regex_str = r""" + (?P(==|!=|<=|>=|<|>)) + \s* + (?P + [^,;\s)]* # Since this is a "legacy" specifier, and the version + # string can be just about anything, we match everything + # except for whitespace, a semi-colon for marker support, + # a closing paren since versions can be enclosed in + # them, and a comma since it's a version separator. + ) + """ + + _regex = re.compile(r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) + + _operators = { + "==": "equal", + "!=": "not_equal", + "<=": "less_than_equal", + ">=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + } + + def __init__(self, spec: str = "", prereleases: Optional[bool] = None) -> None: + super().__init__(spec, prereleases) + + warnings.warn( + "Creating a LegacyVersion has been deprecated and will be " + "removed in the next major release", + DeprecationWarning, + ) + + def _coerce_version(self, version: UnparsedVersion) -> LegacyVersion: + if not isinstance(version, LegacyVersion): + version = LegacyVersion(str(version)) + return version + + def _compare_equal(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective == self._coerce_version(spec) + + def _compare_not_equal(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective != self._coerce_version(spec) + + def _compare_less_than_equal(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective <= self._coerce_version(spec) + + def _compare_greater_than_equal( + self, prospective: LegacyVersion, spec: str + ) -> bool: + return prospective >= self._coerce_version(spec) + + def _compare_less_than(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective < self._coerce_version(spec) + + def _compare_greater_than(self, prospective: LegacyVersion, spec: str) -> bool: + return prospective > self._coerce_version(spec) + + +def _require_version_compare( + fn: Callable[["Specifier", ParsedVersion, str], bool] +) -> Callable[["Specifier", ParsedVersion, str], bool]: + @functools.wraps(fn) + def wrapped(self: "Specifier", prospective: ParsedVersion, spec: str) -> bool: + if not isinstance(prospective, Version): + return False + return fn(self, prospective, spec) + + return wrapped + + +class Specifier(_IndividualSpecifier): + + _regex_str = r""" + (?P(~=|==|!=|<=|>=|<|>|===)) + (?P + (?: + # The identity operators allow for an escape hatch that will + # do an exact string match of the version you wish to install. + # This will not be parsed by PEP 440 and we cannot determine + # any semantic meaning from it. This operator is discouraged + # but included entirely as an escape hatch. + (?<====) # Only match for the identity operator + \s* + [^\s]* # We just match everything, except for whitespace + # since we are only testing for strict identity. + ) + | + (?: + # The (non)equality operators allow for wild card and local + # versions to be specified so we have to define these two + # operators separately to enable that. + (?<===|!=) # Only match for equals and not equals + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)* # release + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + + # You cannot use a wild card and a dev or local version + # together so group them with a | and make them optional. + (?: + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local + | + \.\* # Wild card syntax of .* + )? + ) + | + (?: + # The compatible operator requires at least two digits in the + # release segment. + (?<=~=) # Only match for the compatible operator + + \s* + v? + (?:[0-9]+!)? # epoch + [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) + (?: # pre release + [-_\.]? + (a|b|c|rc|alpha|beta|pre|preview) + [-_\.]? + [0-9]* + )? + (?: # post release + (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) + )? + (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release + ) + | + (?: + # All other operators only allow a sub set of what the + # (non)equality operators do. Specifically they do not allow + # local versions to be specified nor do they allow the prefix + # matching wild cards. + (?=": "greater_than_equal", + "<": "less_than", + ">": "greater_than", + "===": "arbitrary", + } + + @_require_version_compare + def _compare_compatible(self, prospective: ParsedVersion, spec: str) -> bool: + + # Compatible releases have an equivalent combination of >= and ==. That + # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to + # implement this in terms of the other specifiers instead of + # implementing it ourselves. The only thing we need to do is construct + # the other specifiers. + + # We want everything but the last item in the version, but we want to + # ignore suffix segments. + prefix = ".".join( + list(itertools.takewhile(_is_not_suffix, _version_split(spec)))[:-1] + ) + + # Add the prefix notation to the end of our string + prefix += ".*" + + return self._get_operator(">=")(prospective, spec) and self._get_operator("==")( + prospective, prefix + ) + + @_require_version_compare + def _compare_equal(self, prospective: ParsedVersion, spec: str) -> bool: + + # We need special logic to handle prefix matching + if spec.endswith(".*"): + # In the case of prefix matching we want to ignore local segment. + prospective = Version(prospective.public) + # Split the spec out by dots, and pretend that there is an implicit + # dot in between a release segment and a pre-release segment. + split_spec = _version_split(spec[:-2]) # Remove the trailing .* + + # Split the prospective version out by dots, and pretend that there + # is an implicit dot in between a release segment and a pre-release + # segment. + split_prospective = _version_split(str(prospective)) + + # Shorten the prospective version to be the same length as the spec + # so that we can determine if the specifier is a prefix of the + # prospective version or not. + shortened_prospective = split_prospective[: len(split_spec)] + + # Pad out our two sides with zeros so that they both equal the same + # length. + padded_spec, padded_prospective = _pad_version( + split_spec, shortened_prospective + ) + + return padded_prospective == padded_spec + else: + # Convert our spec string into a Version + spec_version = Version(spec) + + # If the specifier does not have a local segment, then we want to + # act as if the prospective version also does not have a local + # segment. + if not spec_version.local: + prospective = Version(prospective.public) + + return prospective == spec_version + + @_require_version_compare + def _compare_not_equal(self, prospective: ParsedVersion, spec: str) -> bool: + return not self._compare_equal(prospective, spec) + + @_require_version_compare + def _compare_less_than_equal(self, prospective: ParsedVersion, spec: str) -> bool: + + # NB: Local version identifiers are NOT permitted in the version + # specifier, so local version labels can be universally removed from + # the prospective version. + return Version(prospective.public) <= Version(spec) + + @_require_version_compare + def _compare_greater_than_equal( + self, prospective: ParsedVersion, spec: str + ) -> bool: + + # NB: Local version identifiers are NOT permitted in the version + # specifier, so local version labels can be universally removed from + # the prospective version. + return Version(prospective.public) >= Version(spec) + + @_require_version_compare + def _compare_less_than(self, prospective: ParsedVersion, spec_str: str) -> bool: + + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec_str) + + # Check to see if the prospective version is less than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective < spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a pre-release version, that we do not accept pre-release + # versions for the version mentioned in the specifier (e.g. <3.1 should + # not match 3.1.dev0, but should match 3.0.dev0). + if not spec.is_prerelease and prospective.is_prerelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # less than the spec version *and* it's not a pre-release of the same + # version in the spec. + return True + + @_require_version_compare + def _compare_greater_than(self, prospective: ParsedVersion, spec_str: str) -> bool: + + # Convert our spec to a Version instance, since we'll want to work with + # it as a version. + spec = Version(spec_str) + + # Check to see if the prospective version is greater than the spec + # version. If it's not we can short circuit and just return False now + # instead of doing extra unneeded work. + if not prospective > spec: + return False + + # This special case is here so that, unless the specifier itself + # includes is a post-release version, that we do not accept + # post-release versions for the version mentioned in the specifier + # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). + if not spec.is_postrelease and prospective.is_postrelease: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # Ensure that we do not allow a local version of the version mentioned + # in the specifier, which is technically greater than, to match. + if prospective.local is not None: + if Version(prospective.base_version) == Version(spec.base_version): + return False + + # If we've gotten to here, it means that prospective version is both + # greater than the spec version *and* it's not a pre-release of the + # same version in the spec. + return True + + def _compare_arbitrary(self, prospective: Version, spec: str) -> bool: + return str(prospective).lower() == str(spec).lower() + + @property + def prereleases(self) -> bool: + + # If there is an explicit prereleases set for this, then we'll just + # blindly use that. + if self._prereleases is not None: + return self._prereleases + + # Look at all of our specifiers and determine if they are inclusive + # operators, and if they are if they are including an explicit + # prerelease. + operator, version = self._spec + if operator in ["==", ">=", "<=", "~=", "==="]: + # The == specifier can include a trailing .*, if it does we + # want to remove before parsing. + if operator == "==" and version.endswith(".*"): + version = version[:-2] + + # Parse the version, and if it is a pre-release than this + # specifier allows pre-releases. + if parse(version).is_prerelease: + return True + + return False + + @prereleases.setter + def prereleases(self, value: bool) -> None: + self._prereleases = value + + +_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") + + +def _version_split(version: str) -> List[str]: + result: List[str] = [] + for item in version.split("."): + match = _prefix_regex.search(item) + if match: + result.extend(match.groups()) + else: + result.append(item) + return result + + +def _is_not_suffix(segment: str) -> bool: + return not any( + segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post") + ) + + +def _pad_version(left: List[str], right: List[str]) -> Tuple[List[str], List[str]]: + left_split, right_split = [], [] + + # Get the release segment of our versions + left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) + right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) + + # Get the rest of our versions + left_split.append(left[len(left_split[0]) :]) + right_split.append(right[len(right_split[0]) :]) + + # Insert our padding + left_split.insert(1, ["0"] * max(0, len(right_split[0]) - len(left_split[0]))) + right_split.insert(1, ["0"] * max(0, len(left_split[0]) - len(right_split[0]))) + + return (list(itertools.chain(*left_split)), list(itertools.chain(*right_split))) + + +class SpecifierSet(BaseSpecifier): + def __init__( + self, specifiers: str = "", prereleases: Optional[bool] = None + ) -> None: + + # Split on , to break each individual specifier into it's own item, and + # strip each item to remove leading/trailing whitespace. + split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] + + # Parsed each individual specifier, attempting first to make it a + # Specifier and falling back to a LegacySpecifier. + parsed: Set[_IndividualSpecifier] = set() + for specifier in split_specifiers: + try: + parsed.add(Specifier(specifier)) + except InvalidSpecifier: + parsed.add(LegacySpecifier(specifier)) + + # Turn our parsed specifiers into a frozen set and save them for later. + self._specs = frozenset(parsed) + + # Store our prereleases value so we can use it later to determine if + # we accept prereleases or not. + self._prereleases = prereleases + + def __repr__(self) -> str: + pre = ( + f", prereleases={self.prereleases!r}" + if self._prereleases is not None + else "" + ) + + return f"" + + def __str__(self) -> str: + return ",".join(sorted(str(s) for s in self._specs)) + + def __hash__(self) -> int: + return hash(self._specs) + + def __and__(self, other: Union["SpecifierSet", str]) -> "SpecifierSet": + if isinstance(other, str): + other = SpecifierSet(other) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + specifier = SpecifierSet() + specifier._specs = frozenset(self._specs | other._specs) + + if self._prereleases is None and other._prereleases is not None: + specifier._prereleases = other._prereleases + elif self._prereleases is not None and other._prereleases is None: + specifier._prereleases = self._prereleases + elif self._prereleases == other._prereleases: + specifier._prereleases = self._prereleases + else: + raise ValueError( + "Cannot combine SpecifierSets with True and False prerelease " + "overrides." + ) + + return specifier + + def __eq__(self, other: object) -> bool: + if isinstance(other, (str, _IndividualSpecifier)): + other = SpecifierSet(str(other)) + elif not isinstance(other, SpecifierSet): + return NotImplemented + + return self._specs == other._specs + + def __len__(self) -> int: + return len(self._specs) + + def __iter__(self) -> Iterator[_IndividualSpecifier]: + return iter(self._specs) + + @property + def prereleases(self) -> Optional[bool]: + + # If we have been given an explicit prerelease modifier, then we'll + # pass that through here. + if self._prereleases is not None: + return self._prereleases + + # If we don't have any specifiers, and we don't have a forced value, + # then we'll just return None since we don't know if this should have + # pre-releases or not. + if not self._specs: + return None + + # Otherwise we'll see if any of the given specifiers accept + # prereleases, if any of them do we'll return True, otherwise False. + return any(s.prereleases for s in self._specs) + + @prereleases.setter + def prereleases(self, value: bool) -> None: + self._prereleases = value + + def __contains__(self, item: UnparsedVersion) -> bool: + return self.contains(item) + + def contains( + self, item: UnparsedVersion, prereleases: Optional[bool] = None + ) -> bool: + + # Ensure that our item is a Version or LegacyVersion instance. + if not isinstance(item, (LegacyVersion, Version)): + item = parse(item) + + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # We can determine if we're going to allow pre-releases by looking to + # see if any of the underlying items supports them. If none of them do + # and this item is a pre-release then we do not allow it and we can + # short circuit that here. + # Note: This means that 1.0.dev1 would not be contained in something + # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 + if not prereleases and item.is_prerelease: + return False + + # We simply dispatch to the underlying specs here to make sure that the + # given version is contained within all of them. + # Note: This use of all() here means that an empty set of specifiers + # will always return True, this is an explicit design decision. + return all(s.contains(item, prereleases=prereleases) for s in self._specs) + + def filter( + self, iterable: Iterable[VersionTypeVar], prereleases: Optional[bool] = None + ) -> Iterable[VersionTypeVar]: + + # Determine if we're forcing a prerelease or not, if we're not forcing + # one for this particular filter call, then we'll use whatever the + # SpecifierSet thinks for whether or not we should support prereleases. + if prereleases is None: + prereleases = self.prereleases + + # If we have any specifiers, then we want to wrap our iterable in the + # filter method for each one, this will act as a logical AND amongst + # each specifier. + if self._specs: + for spec in self._specs: + iterable = spec.filter(iterable, prereleases=bool(prereleases)) + return iterable + # If we do not have any specifiers, then we need to have a rough filter + # which will filter out any pre-releases, unless there are no final + # releases, and which will filter out LegacyVersion in general. + else: + filtered: List[VersionTypeVar] = [] + found_prereleases: List[VersionTypeVar] = [] + + item: UnparsedVersion + parsed_version: Union[Version, LegacyVersion] + + for item in iterable: + # Ensure that we some kind of Version class for this item. + if not isinstance(item, (LegacyVersion, Version)): + parsed_version = parse(item) + else: + parsed_version = item + + # Filter out any item which is parsed as a LegacyVersion + if isinstance(parsed_version, LegacyVersion): + continue + + # Store any item which is a pre-release for later unless we've + # already found a final version or we are accepting prereleases + if parsed_version.is_prerelease and not prereleases: + if not filtered: + found_prereleases.append(item) + else: + filtered.append(item) + + # If we've found no items except for pre-releases, then we'll go + # ahead and use the pre-releases + if not filtered and found_prereleases and prereleases is None: + return found_prereleases + + return filtered diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py new file mode 100644 index 0000000..9a3d25a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py @@ -0,0 +1,487 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +import logging +import platform +import sys +import sysconfig +from importlib.machinery import EXTENSION_SUFFIXES +from typing import ( + Dict, + FrozenSet, + Iterable, + Iterator, + List, + Optional, + Sequence, + Tuple, + Union, + cast, +) + +from . import _manylinux, _musllinux + +logger = logging.getLogger(__name__) + +PythonVersion = Sequence[int] +MacVersion = Tuple[int, int] + +INTERPRETER_SHORT_NAMES: Dict[str, str] = { + "python": "py", # Generic. + "cpython": "cp", + "pypy": "pp", + "ironpython": "ip", + "jython": "jy", +} + + +_32_BIT_INTERPRETER = sys.maxsize <= 2 ** 32 + + +class Tag: + """ + A representation of the tag triple for a wheel. + + Instances are considered immutable and thus are hashable. Equality checking + is also supported. + """ + + __slots__ = ["_interpreter", "_abi", "_platform", "_hash"] + + def __init__(self, interpreter: str, abi: str, platform: str) -> None: + self._interpreter = interpreter.lower() + self._abi = abi.lower() + self._platform = platform.lower() + # The __hash__ of every single element in a Set[Tag] will be evaluated each time + # that a set calls its `.disjoint()` method, which may be called hundreds of + # times when scanning a page of links for packages with tags matching that + # Set[Tag]. Pre-computing the value here produces significant speedups for + # downstream consumers. + self._hash = hash((self._interpreter, self._abi, self._platform)) + + @property + def interpreter(self) -> str: + return self._interpreter + + @property + def abi(self) -> str: + return self._abi + + @property + def platform(self) -> str: + return self._platform + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Tag): + return NotImplemented + + return ( + (self._hash == other._hash) # Short-circuit ASAP for perf reasons. + and (self._platform == other._platform) + and (self._abi == other._abi) + and (self._interpreter == other._interpreter) + ) + + def __hash__(self) -> int: + return self._hash + + def __str__(self) -> str: + return f"{self._interpreter}-{self._abi}-{self._platform}" + + def __repr__(self) -> str: + return f"<{self} @ {id(self)}>" + + +def parse_tag(tag: str) -> FrozenSet[Tag]: + """ + Parses the provided tag (e.g. `py3-none-any`) into a frozenset of Tag instances. + + Returning a set is required due to the possibility that the tag is a + compressed tag set. + """ + tags = set() + interpreters, abis, platforms = tag.split("-") + for interpreter in interpreters.split("."): + for abi in abis.split("."): + for platform_ in platforms.split("."): + tags.add(Tag(interpreter, abi, platform_)) + return frozenset(tags) + + +def _get_config_var(name: str, warn: bool = False) -> Union[int, str, None]: + value = sysconfig.get_config_var(name) + if value is None and warn: + logger.debug( + "Config variable '%s' is unset, Python ABI tag may be incorrect", name + ) + return value + + +def _normalize_string(string: str) -> str: + return string.replace(".", "_").replace("-", "_") + + +def _abi3_applies(python_version: PythonVersion) -> bool: + """ + Determine if the Python version supports abi3. + + PEP 384 was first implemented in Python 3.2. + """ + return len(python_version) > 1 and tuple(python_version) >= (3, 2) + + +def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]: + py_version = tuple(py_version) # To allow for version comparison. + abis = [] + version = _version_nodot(py_version[:2]) + debug = pymalloc = ucs4 = "" + with_debug = _get_config_var("Py_DEBUG", warn) + has_refcount = hasattr(sys, "gettotalrefcount") + # Windows doesn't set Py_DEBUG, so checking for support of debug-compiled + # extension modules is the best option. + # https://github.com/pypa/pip/issues/3383#issuecomment-173267692 + has_ext = "_d.pyd" in EXTENSION_SUFFIXES + if with_debug or (with_debug is None and (has_refcount or has_ext)): + debug = "d" + if py_version < (3, 8): + with_pymalloc = _get_config_var("WITH_PYMALLOC", warn) + if with_pymalloc or with_pymalloc is None: + pymalloc = "m" + if py_version < (3, 3): + unicode_size = _get_config_var("Py_UNICODE_SIZE", warn) + if unicode_size == 4 or ( + unicode_size is None and sys.maxunicode == 0x10FFFF + ): + ucs4 = "u" + elif debug: + # Debug builds can also load "normal" extension modules. + # We can also assume no UCS-4 or pymalloc requirement. + abis.append(f"cp{version}") + abis.insert( + 0, + "cp{version}{debug}{pymalloc}{ucs4}".format( + version=version, debug=debug, pymalloc=pymalloc, ucs4=ucs4 + ), + ) + return abis + + +def cpython_tags( + python_version: Optional[PythonVersion] = None, + abis: Optional[Iterable[str]] = None, + platforms: Optional[Iterable[str]] = None, + *, + warn: bool = False, +) -> Iterator[Tag]: + """ + Yields the tags for a CPython interpreter. + + The tags consist of: + - cp-- + - cp-abi3- + - cp-none- + - cp-abi3- # Older Python versions down to 3.2. + + If python_version only specifies a major version then user-provided ABIs and + the 'none' ABItag will be used. + + If 'abi3' or 'none' are specified in 'abis' then they will be yielded at + their normal position and not at the beginning. + """ + if not python_version: + python_version = sys.version_info[:2] + + interpreter = f"cp{_version_nodot(python_version[:2])}" + + if abis is None: + if len(python_version) > 1: + abis = _cpython_abis(python_version, warn) + else: + abis = [] + abis = list(abis) + # 'abi3' and 'none' are explicitly handled later. + for explicit_abi in ("abi3", "none"): + try: + abis.remove(explicit_abi) + except ValueError: + pass + + platforms = list(platforms or platform_tags()) + for abi in abis: + for platform_ in platforms: + yield Tag(interpreter, abi, platform_) + if _abi3_applies(python_version): + yield from (Tag(interpreter, "abi3", platform_) for platform_ in platforms) + yield from (Tag(interpreter, "none", platform_) for platform_ in platforms) + + if _abi3_applies(python_version): + for minor_version in range(python_version[1] - 1, 1, -1): + for platform_ in platforms: + interpreter = "cp{version}".format( + version=_version_nodot((python_version[0], minor_version)) + ) + yield Tag(interpreter, "abi3", platform_) + + +def _generic_abi() -> Iterator[str]: + abi = sysconfig.get_config_var("SOABI") + if abi: + yield _normalize_string(abi) + + +def generic_tags( + interpreter: Optional[str] = None, + abis: Optional[Iterable[str]] = None, + platforms: Optional[Iterable[str]] = None, + *, + warn: bool = False, +) -> Iterator[Tag]: + """ + Yields the tags for a generic interpreter. + + The tags consist of: + - -- + + The "none" ABI will be added if it was not explicitly provided. + """ + if not interpreter: + interp_name = interpreter_name() + interp_version = interpreter_version(warn=warn) + interpreter = "".join([interp_name, interp_version]) + if abis is None: + abis = _generic_abi() + platforms = list(platforms or platform_tags()) + abis = list(abis) + if "none" not in abis: + abis.append("none") + for abi in abis: + for platform_ in platforms: + yield Tag(interpreter, abi, platform_) + + +def _py_interpreter_range(py_version: PythonVersion) -> Iterator[str]: + """ + Yields Python versions in descending order. + + After the latest version, the major-only version will be yielded, and then + all previous versions of that major version. + """ + if len(py_version) > 1: + yield f"py{_version_nodot(py_version[:2])}" + yield f"py{py_version[0]}" + if len(py_version) > 1: + for minor in range(py_version[1] - 1, -1, -1): + yield f"py{_version_nodot((py_version[0], minor))}" + + +def compatible_tags( + python_version: Optional[PythonVersion] = None, + interpreter: Optional[str] = None, + platforms: Optional[Iterable[str]] = None, +) -> Iterator[Tag]: + """ + Yields the sequence of tags that are compatible with a specific version of Python. + + The tags consist of: + - py*-none- + - -none-any # ... if `interpreter` is provided. + - py*-none-any + """ + if not python_version: + python_version = sys.version_info[:2] + platforms = list(platforms or platform_tags()) + for version in _py_interpreter_range(python_version): + for platform_ in platforms: + yield Tag(version, "none", platform_) + if interpreter: + yield Tag(interpreter, "none", "any") + for version in _py_interpreter_range(python_version): + yield Tag(version, "none", "any") + + +def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str: + if not is_32bit: + return arch + + if arch.startswith("ppc"): + return "ppc" + + return "i386" + + +def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> List[str]: + formats = [cpu_arch] + if cpu_arch == "x86_64": + if version < (10, 4): + return [] + formats.extend(["intel", "fat64", "fat32"]) + + elif cpu_arch == "i386": + if version < (10, 4): + return [] + formats.extend(["intel", "fat32", "fat"]) + + elif cpu_arch == "ppc64": + # TODO: Need to care about 32-bit PPC for ppc64 through 10.2? + if version > (10, 5) or version < (10, 4): + return [] + formats.append("fat64") + + elif cpu_arch == "ppc": + if version > (10, 6): + return [] + formats.extend(["fat32", "fat"]) + + if cpu_arch in {"arm64", "x86_64"}: + formats.append("universal2") + + if cpu_arch in {"x86_64", "i386", "ppc64", "ppc", "intel"}: + formats.append("universal") + + return formats + + +def mac_platforms( + version: Optional[MacVersion] = None, arch: Optional[str] = None +) -> Iterator[str]: + """ + Yields the platform tags for a macOS system. + + The `version` parameter is a two-item tuple specifying the macOS version to + generate platform tags for. The `arch` parameter is the CPU architecture to + generate platform tags for. Both parameters default to the appropriate value + for the current system. + """ + version_str, _, cpu_arch = platform.mac_ver() + if version is None: + version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2]))) + else: + version = version + if arch is None: + arch = _mac_arch(cpu_arch) + else: + arch = arch + + if (10, 0) <= version and version < (11, 0): + # Prior to Mac OS 11, each yearly release of Mac OS bumped the + # "minor" version number. The major version was always 10. + for minor_version in range(version[1], -1, -1): + compat_version = 10, minor_version + binary_formats = _mac_binary_formats(compat_version, arch) + for binary_format in binary_formats: + yield "macosx_{major}_{minor}_{binary_format}".format( + major=10, minor=minor_version, binary_format=binary_format + ) + + if version >= (11, 0): + # Starting with Mac OS 11, each yearly release bumps the major version + # number. The minor versions are now the midyear updates. + for major_version in range(version[0], 10, -1): + compat_version = major_version, 0 + binary_formats = _mac_binary_formats(compat_version, arch) + for binary_format in binary_formats: + yield "macosx_{major}_{minor}_{binary_format}".format( + major=major_version, minor=0, binary_format=binary_format + ) + + if version >= (11, 0): + # Mac OS 11 on x86_64 is compatible with binaries from previous releases. + # Arm64 support was introduced in 11.0, so no Arm binaries from previous + # releases exist. + # + # However, the "universal2" binary format can have a + # macOS version earlier than 11.0 when the x86_64 part of the binary supports + # that version of macOS. + if arch == "x86_64": + for minor_version in range(16, 3, -1): + compat_version = 10, minor_version + binary_formats = _mac_binary_formats(compat_version, arch) + for binary_format in binary_formats: + yield "macosx_{major}_{minor}_{binary_format}".format( + major=compat_version[0], + minor=compat_version[1], + binary_format=binary_format, + ) + else: + for minor_version in range(16, 3, -1): + compat_version = 10, minor_version + binary_format = "universal2" + yield "macosx_{major}_{minor}_{binary_format}".format( + major=compat_version[0], + minor=compat_version[1], + binary_format=binary_format, + ) + + +def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: + linux = _normalize_string(sysconfig.get_platform()) + if is_32bit: + if linux == "linux_x86_64": + linux = "linux_i686" + elif linux == "linux_aarch64": + linux = "linux_armv7l" + _, arch = linux.split("_", 1) + yield from _manylinux.platform_tags(linux, arch) + yield from _musllinux.platform_tags(arch) + yield linux + + +def _generic_platforms() -> Iterator[str]: + yield _normalize_string(sysconfig.get_platform()) + + +def platform_tags() -> Iterator[str]: + """ + Provides the platform tags for this installation. + """ + if platform.system() == "Darwin": + return mac_platforms() + elif platform.system() == "Linux": + return _linux_platforms() + else: + return _generic_platforms() + + +def interpreter_name() -> str: + """ + Returns the name of the running interpreter. + """ + name = sys.implementation.name + return INTERPRETER_SHORT_NAMES.get(name) or name + + +def interpreter_version(*, warn: bool = False) -> str: + """ + Returns the version of the running interpreter. + """ + version = _get_config_var("py_version_nodot", warn=warn) + if version: + version = str(version) + else: + version = _version_nodot(sys.version_info[:2]) + return version + + +def _version_nodot(version: PythonVersion) -> str: + return "".join(map(str, version)) + + +def sys_tags(*, warn: bool = False) -> Iterator[Tag]: + """ + Returns the sequence of tag triples for the running interpreter. + + The order of the sequence corresponds to priority order for the + interpreter, from most to least important. + """ + + interp_name = interpreter_name() + if interp_name == "cp": + yield from cpython_tags(warn=warn) + else: + yield from generic_tags() + + if interp_name == "pp": + yield from compatible_tags(interpreter="pp3") + else: + yield from compatible_tags() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py new file mode 100644 index 0000000..bab11b8 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py @@ -0,0 +1,136 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +import re +from typing import FrozenSet, NewType, Tuple, Union, cast + +from .tags import Tag, parse_tag +from .version import InvalidVersion, Version + +BuildTag = Union[Tuple[()], Tuple[int, str]] +NormalizedName = NewType("NormalizedName", str) + + +class InvalidWheelFilename(ValueError): + """ + An invalid wheel filename was found, users should refer to PEP 427. + """ + + +class InvalidSdistFilename(ValueError): + """ + An invalid sdist filename was found, users should refer to the packaging user guide. + """ + + +_canonicalize_regex = re.compile(r"[-_.]+") +# PEP 427: The build number must start with a digit. +_build_tag_regex = re.compile(r"(\d+)(.*)") + + +def canonicalize_name(name: str) -> NormalizedName: + # This is taken from PEP 503. + value = _canonicalize_regex.sub("-", name).lower() + return cast(NormalizedName, value) + + +def canonicalize_version(version: Union[Version, str]) -> str: + """ + This is very similar to Version.__str__, but has one subtle difference + with the way it handles the release segment. + """ + if isinstance(version, str): + try: + parsed = Version(version) + except InvalidVersion: + # Legacy versions cannot be normalized + return version + else: + parsed = version + + parts = [] + + # Epoch + if parsed.epoch != 0: + parts.append(f"{parsed.epoch}!") + + # Release segment + # NB: This strips trailing '.0's to normalize + parts.append(re.sub(r"(\.0)+$", "", ".".join(str(x) for x in parsed.release))) + + # Pre-release + if parsed.pre is not None: + parts.append("".join(str(x) for x in parsed.pre)) + + # Post-release + if parsed.post is not None: + parts.append(f".post{parsed.post}") + + # Development release + if parsed.dev is not None: + parts.append(f".dev{parsed.dev}") + + # Local version segment + if parsed.local is not None: + parts.append(f"+{parsed.local}") + + return "".join(parts) + + +def parse_wheel_filename( + filename: str, +) -> Tuple[NormalizedName, Version, BuildTag, FrozenSet[Tag]]: + if not filename.endswith(".whl"): + raise InvalidWheelFilename( + f"Invalid wheel filename (extension must be '.whl'): {filename}" + ) + + filename = filename[:-4] + dashes = filename.count("-") + if dashes not in (4, 5): + raise InvalidWheelFilename( + f"Invalid wheel filename (wrong number of parts): {filename}" + ) + + parts = filename.split("-", dashes - 2) + name_part = parts[0] + # See PEP 427 for the rules on escaping the project name + if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None: + raise InvalidWheelFilename(f"Invalid project name: {filename}") + name = canonicalize_name(name_part) + version = Version(parts[1]) + if dashes == 5: + build_part = parts[2] + build_match = _build_tag_regex.match(build_part) + if build_match is None: + raise InvalidWheelFilename( + f"Invalid build number: {build_part} in '{filename}'" + ) + build = cast(BuildTag, (int(build_match.group(1)), build_match.group(2))) + else: + build = () + tags = parse_tag(parts[-1]) + return (name, version, build, tags) + + +def parse_sdist_filename(filename: str) -> Tuple[NormalizedName, Version]: + if filename.endswith(".tar.gz"): + file_stem = filename[: -len(".tar.gz")] + elif filename.endswith(".zip"): + file_stem = filename[: -len(".zip")] + else: + raise InvalidSdistFilename( + f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):" + f" {filename}" + ) + + # We are requiring a PEP 440 version, which cannot contain dashes, + # so we split on the last dash. + name_part, sep, version_part = file_stem.rpartition("-") + if not sep: + raise InvalidSdistFilename(f"Invalid sdist filename: {filename}") + + name = canonicalize_name(name_part) + version = Version(version_part) + return (name, version) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py new file mode 100644 index 0000000..de9a09a --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py @@ -0,0 +1,504 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +import collections +import itertools +import re +import warnings +from typing import Callable, Iterator, List, Optional, SupportsInt, Tuple, Union + +from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType + +__all__ = ["parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN"] + +InfiniteTypes = Union[InfinityType, NegativeInfinityType] +PrePostDevType = Union[InfiniteTypes, Tuple[str, int]] +SubLocalType = Union[InfiniteTypes, int, str] +LocalType = Union[ + NegativeInfinityType, + Tuple[ + Union[ + SubLocalType, + Tuple[SubLocalType, str], + Tuple[NegativeInfinityType, SubLocalType], + ], + ..., + ], +] +CmpKey = Tuple[ + int, Tuple[int, ...], PrePostDevType, PrePostDevType, PrePostDevType, LocalType +] +LegacyCmpKey = Tuple[int, Tuple[str, ...]] +VersionComparisonMethod = Callable[ + [Union[CmpKey, LegacyCmpKey], Union[CmpKey, LegacyCmpKey]], bool +] + +_Version = collections.namedtuple( + "_Version", ["epoch", "release", "dev", "pre", "post", "local"] +) + + +def parse(version: str) -> Union["LegacyVersion", "Version"]: + """ + Parse the given version string and return either a :class:`Version` object + or a :class:`LegacyVersion` object depending on if the given version is + a valid PEP 440 version or a legacy version. + """ + try: + return Version(version) + except InvalidVersion: + return LegacyVersion(version) + + +class InvalidVersion(ValueError): + """ + An invalid version was found, users should refer to PEP 440. + """ + + +class _BaseVersion: + _key: Union[CmpKey, LegacyCmpKey] + + def __hash__(self) -> int: + return hash(self._key) + + # Please keep the duplicated `isinstance` check + # in the six comparisons hereunder + # unless you find a way to avoid adding overhead function calls. + def __lt__(self, other: "_BaseVersion") -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key < other._key + + def __le__(self, other: "_BaseVersion") -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key <= other._key + + def __eq__(self, other: object) -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key == other._key + + def __ge__(self, other: "_BaseVersion") -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key >= other._key + + def __gt__(self, other: "_BaseVersion") -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key > other._key + + def __ne__(self, other: object) -> bool: + if not isinstance(other, _BaseVersion): + return NotImplemented + + return self._key != other._key + + +class LegacyVersion(_BaseVersion): + def __init__(self, version: str) -> None: + self._version = str(version) + self._key = _legacy_cmpkey(self._version) + + warnings.warn( + "Creating a LegacyVersion has been deprecated and will be " + "removed in the next major release", + DeprecationWarning, + ) + + def __str__(self) -> str: + return self._version + + def __repr__(self) -> str: + return f"" + + @property + def public(self) -> str: + return self._version + + @property + def base_version(self) -> str: + return self._version + + @property + def epoch(self) -> int: + return -1 + + @property + def release(self) -> None: + return None + + @property + def pre(self) -> None: + return None + + @property + def post(self) -> None: + return None + + @property + def dev(self) -> None: + return None + + @property + def local(self) -> None: + return None + + @property + def is_prerelease(self) -> bool: + return False + + @property + def is_postrelease(self) -> bool: + return False + + @property + def is_devrelease(self) -> bool: + return False + + +_legacy_version_component_re = re.compile(r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE) + +_legacy_version_replacement_map = { + "pre": "c", + "preview": "c", + "-": "final-", + "rc": "c", + "dev": "@", +} + + +def _parse_version_parts(s: str) -> Iterator[str]: + for part in _legacy_version_component_re.split(s): + part = _legacy_version_replacement_map.get(part, part) + + if not part or part == ".": + continue + + if part[:1] in "0123456789": + # pad for numeric comparison + yield part.zfill(8) + else: + yield "*" + part + + # ensure that alpha/beta/candidate are before final + yield "*final" + + +def _legacy_cmpkey(version: str) -> LegacyCmpKey: + + # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch + # greater than or equal to 0. This will effectively put the LegacyVersion, + # which uses the defacto standard originally implemented by setuptools, + # as before all PEP 440 versions. + epoch = -1 + + # This scheme is taken from pkg_resources.parse_version setuptools prior to + # it's adoption of the packaging library. + parts: List[str] = [] + for part in _parse_version_parts(version.lower()): + if part.startswith("*"): + # remove "-" before a prerelease tag + if part < "*final": + while parts and parts[-1] == "*final-": + parts.pop() + + # remove trailing zeros from each series of numeric parts + while parts and parts[-1] == "00000000": + parts.pop() + + parts.append(part) + + return epoch, tuple(parts) + + +# Deliberately not anchored to the start and end of the string, to make it +# easier for 3rd party code to reuse +VERSION_PATTERN = r""" + v? + (?: + (?:(?P[0-9]+)!)? # epoch + (?P[0-9]+(?:\.[0-9]+)*) # release segment + (?P
                                          # pre-release
+            [-_\.]?
+            (?P(a|b|c|rc|alpha|beta|pre|preview))
+            [-_\.]?
+            (?P[0-9]+)?
+        )?
+        (?P                                         # post release
+            (?:-(?P[0-9]+))
+            |
+            (?:
+                [-_\.]?
+                (?Ppost|rev|r)
+                [-_\.]?
+                (?P[0-9]+)?
+            )
+        )?
+        (?P                                          # dev release
+            [-_\.]?
+            (?Pdev)
+            [-_\.]?
+            (?P[0-9]+)?
+        )?
+    )
+    (?:\+(?P[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
+"""
+
+
+class Version(_BaseVersion):
+
+    _regex = re.compile(r"^\s*" + VERSION_PATTERN + r"\s*$", re.VERBOSE | re.IGNORECASE)
+
+    def __init__(self, version: str) -> None:
+
+        # Validate the version and parse it into pieces
+        match = self._regex.search(version)
+        if not match:
+            raise InvalidVersion(f"Invalid version: '{version}'")
+
+        # Store the parsed out pieces of the version
+        self._version = _Version(
+            epoch=int(match.group("epoch")) if match.group("epoch") else 0,
+            release=tuple(int(i) for i in match.group("release").split(".")),
+            pre=_parse_letter_version(match.group("pre_l"), match.group("pre_n")),
+            post=_parse_letter_version(
+                match.group("post_l"), match.group("post_n1") or match.group("post_n2")
+            ),
+            dev=_parse_letter_version(match.group("dev_l"), match.group("dev_n")),
+            local=_parse_local_version(match.group("local")),
+        )
+
+        # Generate a key which will be used for sorting
+        self._key = _cmpkey(
+            self._version.epoch,
+            self._version.release,
+            self._version.pre,
+            self._version.post,
+            self._version.dev,
+            self._version.local,
+        )
+
+    def __repr__(self) -> str:
+        return f""
+
+    def __str__(self) -> str:
+        parts = []
+
+        # Epoch
+        if self.epoch != 0:
+            parts.append(f"{self.epoch}!")
+
+        # Release segment
+        parts.append(".".join(str(x) for x in self.release))
+
+        # Pre-release
+        if self.pre is not None:
+            parts.append("".join(str(x) for x in self.pre))
+
+        # Post-release
+        if self.post is not None:
+            parts.append(f".post{self.post}")
+
+        # Development release
+        if self.dev is not None:
+            parts.append(f".dev{self.dev}")
+
+        # Local version segment
+        if self.local is not None:
+            parts.append(f"+{self.local}")
+
+        return "".join(parts)
+
+    @property
+    def epoch(self) -> int:
+        _epoch: int = self._version.epoch
+        return _epoch
+
+    @property
+    def release(self) -> Tuple[int, ...]:
+        _release: Tuple[int, ...] = self._version.release
+        return _release
+
+    @property
+    def pre(self) -> Optional[Tuple[str, int]]:
+        _pre: Optional[Tuple[str, int]] = self._version.pre
+        return _pre
+
+    @property
+    def post(self) -> Optional[int]:
+        return self._version.post[1] if self._version.post else None
+
+    @property
+    def dev(self) -> Optional[int]:
+        return self._version.dev[1] if self._version.dev else None
+
+    @property
+    def local(self) -> Optional[str]:
+        if self._version.local:
+            return ".".join(str(x) for x in self._version.local)
+        else:
+            return None
+
+    @property
+    def public(self) -> str:
+        return str(self).split("+", 1)[0]
+
+    @property
+    def base_version(self) -> str:
+        parts = []
+
+        # Epoch
+        if self.epoch != 0:
+            parts.append(f"{self.epoch}!")
+
+        # Release segment
+        parts.append(".".join(str(x) for x in self.release))
+
+        return "".join(parts)
+
+    @property
+    def is_prerelease(self) -> bool:
+        return self.dev is not None or self.pre is not None
+
+    @property
+    def is_postrelease(self) -> bool:
+        return self.post is not None
+
+    @property
+    def is_devrelease(self) -> bool:
+        return self.dev is not None
+
+    @property
+    def major(self) -> int:
+        return self.release[0] if len(self.release) >= 1 else 0
+
+    @property
+    def minor(self) -> int:
+        return self.release[1] if len(self.release) >= 2 else 0
+
+    @property
+    def micro(self) -> int:
+        return self.release[2] if len(self.release) >= 3 else 0
+
+
+def _parse_letter_version(
+    letter: str, number: Union[str, bytes, SupportsInt]
+) -> Optional[Tuple[str, int]]:
+
+    if letter:
+        # We consider there to be an implicit 0 in a pre-release if there is
+        # not a numeral associated with it.
+        if number is None:
+            number = 0
+
+        # We normalize any letters to their lower case form
+        letter = letter.lower()
+
+        # We consider some words to be alternate spellings of other words and
+        # in those cases we want to normalize the spellings to our preferred
+        # spelling.
+        if letter == "alpha":
+            letter = "a"
+        elif letter == "beta":
+            letter = "b"
+        elif letter in ["c", "pre", "preview"]:
+            letter = "rc"
+        elif letter in ["rev", "r"]:
+            letter = "post"
+
+        return letter, int(number)
+    if not letter and number:
+        # We assume if we are given a number, but we are not given a letter
+        # then this is using the implicit post release syntax (e.g. 1.0-1)
+        letter = "post"
+
+        return letter, int(number)
+
+    return None
+
+
+_local_version_separators = re.compile(r"[\._-]")
+
+
+def _parse_local_version(local: str) -> Optional[LocalType]:
+    """
+    Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
+    """
+    if local is not None:
+        return tuple(
+            part.lower() if not part.isdigit() else int(part)
+            for part in _local_version_separators.split(local)
+        )
+    return None
+
+
+def _cmpkey(
+    epoch: int,
+    release: Tuple[int, ...],
+    pre: Optional[Tuple[str, int]],
+    post: Optional[Tuple[str, int]],
+    dev: Optional[Tuple[str, int]],
+    local: Optional[Tuple[SubLocalType]],
+) -> CmpKey:
+
+    # When we compare a release version, we want to compare it with all of the
+    # trailing zeros removed. So we'll use a reverse the list, drop all the now
+    # leading zeros until we come to something non zero, then take the rest
+    # re-reverse it back into the correct order and make it a tuple and use
+    # that for our sorting key.
+    _release = tuple(
+        reversed(list(itertools.dropwhile(lambda x: x == 0, reversed(release))))
+    )
+
+    # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0.
+    # We'll do this by abusing the pre segment, but we _only_ want to do this
+    # if there is not a pre or a post segment. If we have one of those then
+    # the normal sorting rules will handle this case correctly.
+    if pre is None and post is None and dev is not None:
+        _pre: PrePostDevType = NegativeInfinity
+    # Versions without a pre-release (except as noted above) should sort after
+    # those with one.
+    elif pre is None:
+        _pre = Infinity
+    else:
+        _pre = pre
+
+    # Versions without a post segment should sort before those with one.
+    if post is None:
+        _post: PrePostDevType = NegativeInfinity
+
+    else:
+        _post = post
+
+    # Versions without a development segment should sort after those with one.
+    if dev is None:
+        _dev: PrePostDevType = Infinity
+
+    else:
+        _dev = dev
+
+    if local is None:
+        # Versions without a local segment should sort before those with one.
+        _local: LocalType = NegativeInfinity
+    else:
+        # Versions with a local segment need that segment parsed to implement
+        # the sorting rules in PEP440.
+        # - Alpha numeric segments sort before numeric segments
+        # - Alpha numeric segments sort lexicographically
+        # - Numeric segments sort numerically
+        # - Shorter versions sort before longer versions when the prefixes
+        #   match exactly
+        _local = tuple(
+            (i, "") if isinstance(i, int) else (NegativeInfinity, i) for i in local
+        )
+
+    return epoch, _release, _pre, _post, _dev, _local
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py
new file mode 100644
index 0000000..ad27940
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py
@@ -0,0 +1,3361 @@
+"""
+Package resource API
+--------------------
+
+A resource is a logical file contained within a package, or a logical
+subdirectory thereof.  The package resource API expects resource names
+to have their path parts separated with ``/``, *not* whatever the local
+path separator is.  Do not use os.path operations to manipulate resource
+names being passed into the API.
+
+The package resource API is designed to work with normal filesystem packages,
+.egg files, and unpacked .egg files.  It can also work in a limited way with
+.zip files and with custom PEP 302 loaders that support the ``get_data()``
+method.
+
+This module is deprecated. Users are directed to :mod:`importlib.resources`,
+:mod:`importlib.metadata` and :pypi:`packaging` instead.
+"""
+
+import sys
+import os
+import io
+import time
+import re
+import types
+import zipfile
+import zipimport
+import warnings
+import stat
+import functools
+import pkgutil
+import operator
+import platform
+import collections
+import plistlib
+import email.parser
+import errno
+import tempfile
+import textwrap
+import inspect
+import ntpath
+import posixpath
+import importlib
+from pkgutil import get_importer
+
+try:
+    import _imp
+except ImportError:
+    # Python 3.2 compatibility
+    import imp as _imp
+
+try:
+    FileExistsError
+except NameError:
+    FileExistsError = OSError
+
+# capture these to bypass sandboxing
+from os import utime
+
+try:
+    from os import mkdir, rename, unlink
+
+    WRITE_SUPPORT = True
+except ImportError:
+    # no write support, probably under GAE
+    WRITE_SUPPORT = False
+
+from os import open as os_open
+from os.path import isdir, split
+
+try:
+    import importlib.machinery as importlib_machinery
+
+    # access attribute to force import under delayed import mechanisms.
+    importlib_machinery.__name__
+except ImportError:
+    importlib_machinery = None
+
+from pip._internal.utils._jaraco_text import (
+    yield_lines,
+    drop_comment,
+    join_continuation,
+)
+
+from pip._vendor import platformdirs
+from pip._vendor import packaging
+
+__import__('pip._vendor.packaging.version')
+__import__('pip._vendor.packaging.specifiers')
+__import__('pip._vendor.packaging.requirements')
+__import__('pip._vendor.packaging.markers')
+__import__('pip._vendor.packaging.utils')
+
+if sys.version_info < (3, 5):
+    raise RuntimeError("Python 3.5 or later is required")
+
+# declare some globals that will be defined later to
+# satisfy the linters.
+require = None
+working_set = None
+add_activation_listener = None
+resources_stream = None
+cleanup_resources = None
+resource_dir = None
+resource_stream = None
+set_extraction_path = None
+resource_isdir = None
+resource_string = None
+iter_entry_points = None
+resource_listdir = None
+resource_filename = None
+resource_exists = None
+_distribution_finders = None
+_namespace_handlers = None
+_namespace_packages = None
+
+
+warnings.warn(
+    "pkg_resources is deprecated as an API. "
+    "See https://setuptools.pypa.io/en/latest/pkg_resources.html",
+    DeprecationWarning,
+    stacklevel=2
+)
+
+
+_PEP440_FALLBACK = re.compile(r"^v?(?P(?:[0-9]+!)?[0-9]+(?:\.[0-9]+)*)", re.I)
+
+
+class PEP440Warning(RuntimeWarning):
+    """
+    Used when there is an issue with a version or specifier not complying with
+    PEP 440.
+    """
+
+
+parse_version = packaging.version.Version
+
+
+_state_vars = {}
+
+
+def _declare_state(vartype, **kw):
+    globals().update(kw)
+    _state_vars.update(dict.fromkeys(kw, vartype))
+
+
+def __getstate__():
+    state = {}
+    g = globals()
+    for k, v in _state_vars.items():
+        state[k] = g['_sget_' + v](g[k])
+    return state
+
+
+def __setstate__(state):
+    g = globals()
+    for k, v in state.items():
+        g['_sset_' + _state_vars[k]](k, g[k], v)
+    return state
+
+
+def _sget_dict(val):
+    return val.copy()
+
+
+def _sset_dict(key, ob, state):
+    ob.clear()
+    ob.update(state)
+
+
+def _sget_object(val):
+    return val.__getstate__()
+
+
+def _sset_object(key, ob, state):
+    ob.__setstate__(state)
+
+
+_sget_none = _sset_none = lambda *args: None
+
+
+def get_supported_platform():
+    """Return this platform's maximum compatible version.
+
+    distutils.util.get_platform() normally reports the minimum version
+    of macOS that would be required to *use* extensions produced by
+    distutils.  But what we want when checking compatibility is to know the
+    version of macOS that we are *running*.  To allow usage of packages that
+    explicitly require a newer version of macOS, we must also know the
+    current version of the OS.
+
+    If this condition occurs for any other platform with a version in its
+    platform strings, this function should be extended accordingly.
+    """
+    plat = get_build_platform()
+    m = macosVersionString.match(plat)
+    if m is not None and sys.platform == "darwin":
+        try:
+            plat = 'macosx-%s-%s' % ('.'.join(_macos_vers()[:2]), m.group(3))
+        except ValueError:
+            # not macOS
+            pass
+    return plat
+
+
+__all__ = [
+    # Basic resource access and distribution/entry point discovery
+    'require',
+    'run_script',
+    'get_provider',
+    'get_distribution',
+    'load_entry_point',
+    'get_entry_map',
+    'get_entry_info',
+    'iter_entry_points',
+    'resource_string',
+    'resource_stream',
+    'resource_filename',
+    'resource_listdir',
+    'resource_exists',
+    'resource_isdir',
+    # Environmental control
+    'declare_namespace',
+    'working_set',
+    'add_activation_listener',
+    'find_distributions',
+    'set_extraction_path',
+    'cleanup_resources',
+    'get_default_cache',
+    # Primary implementation classes
+    'Environment',
+    'WorkingSet',
+    'ResourceManager',
+    'Distribution',
+    'Requirement',
+    'EntryPoint',
+    # Exceptions
+    'ResolutionError',
+    'VersionConflict',
+    'DistributionNotFound',
+    'UnknownExtra',
+    'ExtractionError',
+    # Warnings
+    'PEP440Warning',
+    # Parsing functions and string utilities
+    'parse_requirements',
+    'parse_version',
+    'safe_name',
+    'safe_version',
+    'get_platform',
+    'compatible_platforms',
+    'yield_lines',
+    'split_sections',
+    'safe_extra',
+    'to_filename',
+    'invalid_marker',
+    'evaluate_marker',
+    # filesystem utilities
+    'ensure_directory',
+    'normalize_path',
+    # Distribution "precedence" constants
+    'EGG_DIST',
+    'BINARY_DIST',
+    'SOURCE_DIST',
+    'CHECKOUT_DIST',
+    'DEVELOP_DIST',
+    # "Provider" interfaces, implementations, and registration/lookup APIs
+    'IMetadataProvider',
+    'IResourceProvider',
+    'FileMetadata',
+    'PathMetadata',
+    'EggMetadata',
+    'EmptyProvider',
+    'empty_provider',
+    'NullProvider',
+    'EggProvider',
+    'DefaultProvider',
+    'ZipProvider',
+    'register_finder',
+    'register_namespace_handler',
+    'register_loader_type',
+    'fixup_namespace_packages',
+    'get_importer',
+    # Warnings
+    'PkgResourcesDeprecationWarning',
+    # Deprecated/backward compatibility only
+    'run_main',
+    'AvailableDistributions',
+]
+
+
+class ResolutionError(Exception):
+    """Abstract base for dependency resolution errors"""
+
+    def __repr__(self):
+        return self.__class__.__name__ + repr(self.args)
+
+
+class VersionConflict(ResolutionError):
+    """
+    An already-installed version conflicts with the requested version.
+
+    Should be initialized with the installed Distribution and the requested
+    Requirement.
+    """
+
+    _template = "{self.dist} is installed but {self.req} is required"
+
+    @property
+    def dist(self):
+        return self.args[0]
+
+    @property
+    def req(self):
+        return self.args[1]
+
+    def report(self):
+        return self._template.format(**locals())
+
+    def with_context(self, required_by):
+        """
+        If required_by is non-empty, return a version of self that is a
+        ContextualVersionConflict.
+        """
+        if not required_by:
+            return self
+        args = self.args + (required_by,)
+        return ContextualVersionConflict(*args)
+
+
+class ContextualVersionConflict(VersionConflict):
+    """
+    A VersionConflict that accepts a third parameter, the set of the
+    requirements that required the installed Distribution.
+    """
+
+    _template = VersionConflict._template + ' by {self.required_by}'
+
+    @property
+    def required_by(self):
+        return self.args[2]
+
+
+class DistributionNotFound(ResolutionError):
+    """A requested distribution was not found"""
+
+    _template = (
+        "The '{self.req}' distribution was not found "
+        "and is required by {self.requirers_str}"
+    )
+
+    @property
+    def req(self):
+        return self.args[0]
+
+    @property
+    def requirers(self):
+        return self.args[1]
+
+    @property
+    def requirers_str(self):
+        if not self.requirers:
+            return 'the application'
+        return ', '.join(self.requirers)
+
+    def report(self):
+        return self._template.format(**locals())
+
+    def __str__(self):
+        return self.report()
+
+
+class UnknownExtra(ResolutionError):
+    """Distribution doesn't have an "extra feature" of the given name"""
+
+
+_provider_factories = {}
+
+PY_MAJOR = '{}.{}'.format(*sys.version_info)
+EGG_DIST = 3
+BINARY_DIST = 2
+SOURCE_DIST = 1
+CHECKOUT_DIST = 0
+DEVELOP_DIST = -1
+
+
+def register_loader_type(loader_type, provider_factory):
+    """Register `provider_factory` to make providers for `loader_type`
+
+    `loader_type` is the type or class of a PEP 302 ``module.__loader__``,
+    and `provider_factory` is a function that, passed a *module* object,
+    returns an ``IResourceProvider`` for that module.
+    """
+    _provider_factories[loader_type] = provider_factory
+
+
+def get_provider(moduleOrReq):
+    """Return an IResourceProvider for the named module or requirement"""
+    if isinstance(moduleOrReq, Requirement):
+        return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
+    try:
+        module = sys.modules[moduleOrReq]
+    except KeyError:
+        __import__(moduleOrReq)
+        module = sys.modules[moduleOrReq]
+    loader = getattr(module, '__loader__', None)
+    return _find_adapter(_provider_factories, loader)(module)
+
+
+def _macos_vers(_cache=[]):
+    if not _cache:
+        version = platform.mac_ver()[0]
+        # fallback for MacPorts
+        if version == '':
+            plist = '/System/Library/CoreServices/SystemVersion.plist'
+            if os.path.exists(plist):
+                if hasattr(plistlib, 'readPlist'):
+                    plist_content = plistlib.readPlist(plist)
+                    if 'ProductVersion' in plist_content:
+                        version = plist_content['ProductVersion']
+
+        _cache.append(version.split('.'))
+    return _cache[0]
+
+
+def _macos_arch(machine):
+    return {'PowerPC': 'ppc', 'Power_Macintosh': 'ppc'}.get(machine, machine)
+
+
+def get_build_platform():
+    """Return this platform's string for platform-specific distributions
+
+    XXX Currently this is the same as ``distutils.util.get_platform()``, but it
+    needs some hacks for Linux and macOS.
+    """
+    from sysconfig import get_platform
+
+    plat = get_platform()
+    if sys.platform == "darwin" and not plat.startswith('macosx-'):
+        try:
+            version = _macos_vers()
+            machine = os.uname()[4].replace(" ", "_")
+            return "macosx-%d.%d-%s" % (
+                int(version[0]),
+                int(version[1]),
+                _macos_arch(machine),
+            )
+        except ValueError:
+            # if someone is running a non-Mac darwin system, this will fall
+            # through to the default implementation
+            pass
+    return plat
+
+
+macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)")
+darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)")
+# XXX backward compat
+get_platform = get_build_platform
+
+
+def compatible_platforms(provided, required):
+    """Can code for the `provided` platform run on the `required` platform?
+
+    Returns true if either platform is ``None``, or the platforms are equal.
+
+    XXX Needs compatibility checks for Linux and other unixy OSes.
+    """
+    if provided is None or required is None or provided == required:
+        # easy case
+        return True
+
+    # macOS special cases
+    reqMac = macosVersionString.match(required)
+    if reqMac:
+        provMac = macosVersionString.match(provided)
+
+        # is this a Mac package?
+        if not provMac:
+            # this is backwards compatibility for packages built before
+            # setuptools 0.6. All packages built after this point will
+            # use the new macOS designation.
+            provDarwin = darwinVersionString.match(provided)
+            if provDarwin:
+                dversion = int(provDarwin.group(1))
+                macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2))
+                if (
+                    dversion == 7
+                    and macosversion >= "10.3"
+                    or dversion == 8
+                    and macosversion >= "10.4"
+                ):
+                    return True
+            # egg isn't macOS or legacy darwin
+            return False
+
+        # are they the same major version and machine type?
+        if provMac.group(1) != reqMac.group(1) or provMac.group(3) != reqMac.group(3):
+            return False
+
+        # is the required OS major update >= the provided one?
+        if int(provMac.group(2)) > int(reqMac.group(2)):
+            return False
+
+        return True
+
+    # XXX Linux and other platforms' special cases should go here
+    return False
+
+
+def run_script(dist_spec, script_name):
+    """Locate distribution `dist_spec` and run its `script_name` script"""
+    ns = sys._getframe(1).f_globals
+    name = ns['__name__']
+    ns.clear()
+    ns['__name__'] = name
+    require(dist_spec)[0].run_script(script_name, ns)
+
+
+# backward compatibility
+run_main = run_script
+
+
+def get_distribution(dist):
+    """Return a current distribution object for a Requirement or string"""
+    if isinstance(dist, str):
+        dist = Requirement.parse(dist)
+    if isinstance(dist, Requirement):
+        dist = get_provider(dist)
+    if not isinstance(dist, Distribution):
+        raise TypeError("Expected string, Requirement, or Distribution", dist)
+    return dist
+
+
+def load_entry_point(dist, group, name):
+    """Return `name` entry point of `group` for `dist` or raise ImportError"""
+    return get_distribution(dist).load_entry_point(group, name)
+
+
+def get_entry_map(dist, group=None):
+    """Return the entry point map for `group`, or the full entry map"""
+    return get_distribution(dist).get_entry_map(group)
+
+
+def get_entry_info(dist, group, name):
+    """Return the EntryPoint object for `group`+`name`, or ``None``"""
+    return get_distribution(dist).get_entry_info(group, name)
+
+
+class IMetadataProvider:
+    def has_metadata(name):
+        """Does the package's distribution contain the named metadata?"""
+
+    def get_metadata(name):
+        """The named metadata resource as a string"""
+
+    def get_metadata_lines(name):
+        """Yield named metadata resource as list of non-blank non-comment lines
+
+        Leading and trailing whitespace is stripped from each line, and lines
+        with ``#`` as the first non-blank character are omitted."""
+
+    def metadata_isdir(name):
+        """Is the named metadata a directory?  (like ``os.path.isdir()``)"""
+
+    def metadata_listdir(name):
+        """List of metadata names in the directory (like ``os.listdir()``)"""
+
+    def run_script(script_name, namespace):
+        """Execute the named script in the supplied namespace dictionary"""
+
+
+class IResourceProvider(IMetadataProvider):
+    """An object that provides access to package resources"""
+
+    def get_resource_filename(manager, resource_name):
+        """Return a true filesystem path for `resource_name`
+
+        `manager` must be an ``IResourceManager``"""
+
+    def get_resource_stream(manager, resource_name):
+        """Return a readable file-like object for `resource_name`
+
+        `manager` must be an ``IResourceManager``"""
+
+    def get_resource_string(manager, resource_name):
+        """Return a string containing the contents of `resource_name`
+
+        `manager` must be an ``IResourceManager``"""
+
+    def has_resource(resource_name):
+        """Does the package contain the named resource?"""
+
+    def resource_isdir(resource_name):
+        """Is the named resource a directory?  (like ``os.path.isdir()``)"""
+
+    def resource_listdir(resource_name):
+        """List of resource names in the directory (like ``os.listdir()``)"""
+
+
+class WorkingSet:
+    """A collection of active distributions on sys.path (or a similar list)"""
+
+    def __init__(self, entries=None):
+        """Create working set from list of path entries (default=sys.path)"""
+        self.entries = []
+        self.entry_keys = {}
+        self.by_key = {}
+        self.normalized_to_canonical_keys = {}
+        self.callbacks = []
+
+        if entries is None:
+            entries = sys.path
+
+        for entry in entries:
+            self.add_entry(entry)
+
+    @classmethod
+    def _build_master(cls):
+        """
+        Prepare the master working set.
+        """
+        ws = cls()
+        try:
+            from __main__ import __requires__
+        except ImportError:
+            # The main program does not list any requirements
+            return ws
+
+        # ensure the requirements are met
+        try:
+            ws.require(__requires__)
+        except VersionConflict:
+            return cls._build_from_requirements(__requires__)
+
+        return ws
+
+    @classmethod
+    def _build_from_requirements(cls, req_spec):
+        """
+        Build a working set from a requirement spec. Rewrites sys.path.
+        """
+        # try it without defaults already on sys.path
+        # by starting with an empty path
+        ws = cls([])
+        reqs = parse_requirements(req_spec)
+        dists = ws.resolve(reqs, Environment())
+        for dist in dists:
+            ws.add(dist)
+
+        # add any missing entries from sys.path
+        for entry in sys.path:
+            if entry not in ws.entries:
+                ws.add_entry(entry)
+
+        # then copy back to sys.path
+        sys.path[:] = ws.entries
+        return ws
+
+    def add_entry(self, entry):
+        """Add a path item to ``.entries``, finding any distributions on it
+
+        ``find_distributions(entry, True)`` is used to find distributions
+        corresponding to the path entry, and they are added.  `entry` is
+        always appended to ``.entries``, even if it is already present.
+        (This is because ``sys.path`` can contain the same value more than
+        once, and the ``.entries`` of the ``sys.path`` WorkingSet should always
+        equal ``sys.path``.)
+        """
+        self.entry_keys.setdefault(entry, [])
+        self.entries.append(entry)
+        for dist in find_distributions(entry, True):
+            self.add(dist, entry, False)
+
+    def __contains__(self, dist):
+        """True if `dist` is the active distribution for its project"""
+        return self.by_key.get(dist.key) == dist
+
+    def find(self, req):
+        """Find a distribution matching requirement `req`
+
+        If there is an active distribution for the requested project, this
+        returns it as long as it meets the version requirement specified by
+        `req`.  But, if there is an active distribution for the project and it
+        does *not* meet the `req` requirement, ``VersionConflict`` is raised.
+        If there is no active distribution for the requested project, ``None``
+        is returned.
+        """
+        dist = self.by_key.get(req.key)
+
+        if dist is None:
+            canonical_key = self.normalized_to_canonical_keys.get(req.key)
+
+            if canonical_key is not None:
+                req.key = canonical_key
+                dist = self.by_key.get(canonical_key)
+
+        if dist is not None and dist not in req:
+            # XXX add more info
+            raise VersionConflict(dist, req)
+        return dist
+
+    def iter_entry_points(self, group, name=None):
+        """Yield entry point objects from `group` matching `name`
+
+        If `name` is None, yields all entry points in `group` from all
+        distributions in the working set, otherwise only ones matching
+        both `group` and `name` are yielded (in distribution order).
+        """
+        return (
+            entry
+            for dist in self
+            for entry in dist.get_entry_map(group).values()
+            if name is None or name == entry.name
+        )
+
+    def run_script(self, requires, script_name):
+        """Locate distribution for `requires` and run `script_name` script"""
+        ns = sys._getframe(1).f_globals
+        name = ns['__name__']
+        ns.clear()
+        ns['__name__'] = name
+        self.require(requires)[0].run_script(script_name, ns)
+
+    def __iter__(self):
+        """Yield distributions for non-duplicate projects in the working set
+
+        The yield order is the order in which the items' path entries were
+        added to the working set.
+        """
+        seen = {}
+        for item in self.entries:
+            if item not in self.entry_keys:
+                # workaround a cache issue
+                continue
+
+            for key in self.entry_keys[item]:
+                if key not in seen:
+                    seen[key] = 1
+                    yield self.by_key[key]
+
+    def add(self, dist, entry=None, insert=True, replace=False):
+        """Add `dist` to working set, associated with `entry`
+
+        If `entry` is unspecified, it defaults to the ``.location`` of `dist`.
+        On exit from this routine, `entry` is added to the end of the working
+        set's ``.entries`` (if it wasn't already present).
+
+        `dist` is only added to the working set if it's for a project that
+        doesn't already have a distribution in the set, unless `replace=True`.
+        If it's added, any callbacks registered with the ``subscribe()`` method
+        will be called.
+        """
+        if insert:
+            dist.insert_on(self.entries, entry, replace=replace)
+
+        if entry is None:
+            entry = dist.location
+        keys = self.entry_keys.setdefault(entry, [])
+        keys2 = self.entry_keys.setdefault(dist.location, [])
+        if not replace and dist.key in self.by_key:
+            # ignore hidden distros
+            return
+
+        self.by_key[dist.key] = dist
+        normalized_name = packaging.utils.canonicalize_name(dist.key)
+        self.normalized_to_canonical_keys[normalized_name] = dist.key
+        if dist.key not in keys:
+            keys.append(dist.key)
+        if dist.key not in keys2:
+            keys2.append(dist.key)
+        self._added_new(dist)
+
+    def resolve(
+        self,
+        requirements,
+        env=None,
+        installer=None,
+        replace_conflicting=False,
+        extras=None,
+    ):
+        """List all distributions needed to (recursively) meet `requirements`
+
+        `requirements` must be a sequence of ``Requirement`` objects.  `env`,
+        if supplied, should be an ``Environment`` instance.  If
+        not supplied, it defaults to all distributions available within any
+        entry or distribution in the working set.  `installer`, if supplied,
+        will be invoked with each requirement that cannot be met by an
+        already-installed distribution; it should return a ``Distribution`` or
+        ``None``.
+
+        Unless `replace_conflicting=True`, raises a VersionConflict exception
+        if
+        any requirements are found on the path that have the correct name but
+        the wrong version.  Otherwise, if an `installer` is supplied it will be
+        invoked to obtain the correct version of the requirement and activate
+        it.
+
+        `extras` is a list of the extras to be used with these requirements.
+        This is important because extra requirements may look like `my_req;
+        extra = "my_extra"`, which would otherwise be interpreted as a purely
+        optional requirement.  Instead, we want to be able to assert that these
+        requirements are truly required.
+        """
+
+        # set up the stack
+        requirements = list(requirements)[::-1]
+        # set of processed requirements
+        processed = {}
+        # key -> dist
+        best = {}
+        to_activate = []
+
+        req_extras = _ReqExtras()
+
+        # Mapping of requirement to set of distributions that required it;
+        # useful for reporting info about conflicts.
+        required_by = collections.defaultdict(set)
+
+        while requirements:
+            # process dependencies breadth-first
+            req = requirements.pop(0)
+            if req in processed:
+                # Ignore cyclic or redundant dependencies
+                continue
+
+            if not req_extras.markers_pass(req, extras):
+                continue
+
+            dist = self._resolve_dist(
+                req, best, replace_conflicting, env, installer, required_by, to_activate
+            )
+
+            # push the new requirements onto the stack
+            new_requirements = dist.requires(req.extras)[::-1]
+            requirements.extend(new_requirements)
+
+            # Register the new requirements needed by req
+            for new_requirement in new_requirements:
+                required_by[new_requirement].add(req.project_name)
+                req_extras[new_requirement] = req.extras
+
+            processed[req] = True
+
+        # return list of distros to activate
+        return to_activate
+
+    def _resolve_dist(
+        self, req, best, replace_conflicting, env, installer, required_by, to_activate
+    ):
+        dist = best.get(req.key)
+        if dist is None:
+            # Find the best distribution and add it to the map
+            dist = self.by_key.get(req.key)
+            if dist is None or (dist not in req and replace_conflicting):
+                ws = self
+                if env is None:
+                    if dist is None:
+                        env = Environment(self.entries)
+                    else:
+                        # Use an empty environment and workingset to avoid
+                        # any further conflicts with the conflicting
+                        # distribution
+                        env = Environment([])
+                        ws = WorkingSet([])
+                dist = best[req.key] = env.best_match(
+                    req, ws, installer, replace_conflicting=replace_conflicting
+                )
+                if dist is None:
+                    requirers = required_by.get(req, None)
+                    raise DistributionNotFound(req, requirers)
+            to_activate.append(dist)
+        if dist not in req:
+            # Oops, the "best" so far conflicts with a dependency
+            dependent_req = required_by[req]
+            raise VersionConflict(dist, req).with_context(dependent_req)
+        return dist
+
+    def find_plugins(self, plugin_env, full_env=None, installer=None, fallback=True):
+        """Find all activatable distributions in `plugin_env`
+
+        Example usage::
+
+            distributions, errors = working_set.find_plugins(
+                Environment(plugin_dirlist)
+            )
+            # add plugins+libs to sys.path
+            map(working_set.add, distributions)
+            # display errors
+            print('Could not load', errors)
+
+        The `plugin_env` should be an ``Environment`` instance that contains
+        only distributions that are in the project's "plugin directory" or
+        directories. The `full_env`, if supplied, should be an ``Environment``
+        contains all currently-available distributions.  If `full_env` is not
+        supplied, one is created automatically from the ``WorkingSet`` this
+        method is called on, which will typically mean that every directory on
+        ``sys.path`` will be scanned for distributions.
+
+        `installer` is a standard installer callback as used by the
+        ``resolve()`` method. The `fallback` flag indicates whether we should
+        attempt to resolve older versions of a plugin if the newest version
+        cannot be resolved.
+
+        This method returns a 2-tuple: (`distributions`, `error_info`), where
+        `distributions` is a list of the distributions found in `plugin_env`
+        that were loadable, along with any other distributions that are needed
+        to resolve their dependencies.  `error_info` is a dictionary mapping
+        unloadable plugin distributions to an exception instance describing the
+        error that occurred. Usually this will be a ``DistributionNotFound`` or
+        ``VersionConflict`` instance.
+        """
+
+        plugin_projects = list(plugin_env)
+        # scan project names in alphabetic order
+        plugin_projects.sort()
+
+        error_info = {}
+        distributions = {}
+
+        if full_env is None:
+            env = Environment(self.entries)
+            env += plugin_env
+        else:
+            env = full_env + plugin_env
+
+        shadow_set = self.__class__([])
+        # put all our entries in shadow_set
+        list(map(shadow_set.add, self))
+
+        for project_name in plugin_projects:
+            for dist in plugin_env[project_name]:
+                req = [dist.as_requirement()]
+
+                try:
+                    resolvees = shadow_set.resolve(req, env, installer)
+
+                except ResolutionError as v:
+                    # save error info
+                    error_info[dist] = v
+                    if fallback:
+                        # try the next older version of project
+                        continue
+                    else:
+                        # give up on this project, keep going
+                        break
+
+                else:
+                    list(map(shadow_set.add, resolvees))
+                    distributions.update(dict.fromkeys(resolvees))
+
+                    # success, no need to try any more versions of this project
+                    break
+
+        distributions = list(distributions)
+        distributions.sort()
+
+        return distributions, error_info
+
+    def require(self, *requirements):
+        """Ensure that distributions matching `requirements` are activated
+
+        `requirements` must be a string or a (possibly-nested) sequence
+        thereof, specifying the distributions and versions required.  The
+        return value is a sequence of the distributions that needed to be
+        activated to fulfill the requirements; all relevant distributions are
+        included, even if they were already activated in this working set.
+        """
+        needed = self.resolve(parse_requirements(requirements))
+
+        for dist in needed:
+            self.add(dist)
+
+        return needed
+
+    def subscribe(self, callback, existing=True):
+        """Invoke `callback` for all distributions
+
+        If `existing=True` (default),
+        call on all existing ones, as well.
+        """
+        if callback in self.callbacks:
+            return
+        self.callbacks.append(callback)
+        if not existing:
+            return
+        for dist in self:
+            callback(dist)
+
+    def _added_new(self, dist):
+        for callback in self.callbacks:
+            callback(dist)
+
+    def __getstate__(self):
+        return (
+            self.entries[:],
+            self.entry_keys.copy(),
+            self.by_key.copy(),
+            self.normalized_to_canonical_keys.copy(),
+            self.callbacks[:],
+        )
+
+    def __setstate__(self, e_k_b_n_c):
+        entries, keys, by_key, normalized_to_canonical_keys, callbacks = e_k_b_n_c
+        self.entries = entries[:]
+        self.entry_keys = keys.copy()
+        self.by_key = by_key.copy()
+        self.normalized_to_canonical_keys = normalized_to_canonical_keys.copy()
+        self.callbacks = callbacks[:]
+
+
+class _ReqExtras(dict):
+    """
+    Map each requirement to the extras that demanded it.
+    """
+
+    def markers_pass(self, req, extras=None):
+        """
+        Evaluate markers for req against each extra that
+        demanded it.
+
+        Return False if the req has a marker and fails
+        evaluation. Otherwise, return True.
+        """
+        extra_evals = (
+            req.marker.evaluate({'extra': extra})
+            for extra in self.get(req, ()) + (extras or (None,))
+        )
+        return not req.marker or any(extra_evals)
+
+
+class Environment:
+    """Searchable snapshot of distributions on a search path"""
+
+    def __init__(
+        self, search_path=None, platform=get_supported_platform(), python=PY_MAJOR
+    ):
+        """Snapshot distributions available on a search path
+
+        Any distributions found on `search_path` are added to the environment.
+        `search_path` should be a sequence of ``sys.path`` items.  If not
+        supplied, ``sys.path`` is used.
+
+        `platform` is an optional string specifying the name of the platform
+        that platform-specific distributions must be compatible with.  If
+        unspecified, it defaults to the current platform.  `python` is an
+        optional string naming the desired version of Python (e.g. ``'3.6'``);
+        it defaults to the current version.
+
+        You may explicitly set `platform` (and/or `python`) to ``None`` if you
+        wish to map *all* distributions, not just those compatible with the
+        running platform or Python version.
+        """
+        self._distmap = {}
+        self.platform = platform
+        self.python = python
+        self.scan(search_path)
+
+    def can_add(self, dist):
+        """Is distribution `dist` acceptable for this environment?
+
+        The distribution must match the platform and python version
+        requirements specified when this environment was created, or False
+        is returned.
+        """
+        py_compat = (
+            self.python is None
+            or dist.py_version is None
+            or dist.py_version == self.python
+        )
+        return py_compat and compatible_platforms(dist.platform, self.platform)
+
+    def remove(self, dist):
+        """Remove `dist` from the environment"""
+        self._distmap[dist.key].remove(dist)
+
+    def scan(self, search_path=None):
+        """Scan `search_path` for distributions usable in this environment
+
+        Any distributions found are added to the environment.
+        `search_path` should be a sequence of ``sys.path`` items.  If not
+        supplied, ``sys.path`` is used.  Only distributions conforming to
+        the platform/python version defined at initialization are added.
+        """
+        if search_path is None:
+            search_path = sys.path
+
+        for item in search_path:
+            for dist in find_distributions(item):
+                self.add(dist)
+
+    def __getitem__(self, project_name):
+        """Return a newest-to-oldest list of distributions for `project_name`
+
+        Uses case-insensitive `project_name` comparison, assuming all the
+        project's distributions use their project's name converted to all
+        lowercase as their key.
+
+        """
+        distribution_key = project_name.lower()
+        return self._distmap.get(distribution_key, [])
+
+    def add(self, dist):
+        """Add `dist` if we ``can_add()`` it and it has not already been added"""
+        if self.can_add(dist) and dist.has_version():
+            dists = self._distmap.setdefault(dist.key, [])
+            if dist not in dists:
+                dists.append(dist)
+                dists.sort(key=operator.attrgetter('hashcmp'), reverse=True)
+
+    def best_match(self, req, working_set, installer=None, replace_conflicting=False):
+        """Find distribution best matching `req` and usable on `working_set`
+
+        This calls the ``find(req)`` method of the `working_set` to see if a
+        suitable distribution is already active.  (This may raise
+        ``VersionConflict`` if an unsuitable version of the project is already
+        active in the specified `working_set`.)  If a suitable distribution
+        isn't active, this method returns the newest distribution in the
+        environment that meets the ``Requirement`` in `req`.  If no suitable
+        distribution is found, and `installer` is supplied, then the result of
+        calling the environment's ``obtain(req, installer)`` method will be
+        returned.
+        """
+        try:
+            dist = working_set.find(req)
+        except VersionConflict:
+            if not replace_conflicting:
+                raise
+            dist = None
+        if dist is not None:
+            return dist
+        for dist in self[req.key]:
+            if dist in req:
+                return dist
+        # try to download/install
+        return self.obtain(req, installer)
+
+    def obtain(self, requirement, installer=None):
+        """Obtain a distribution matching `requirement` (e.g. via download)
+
+        Obtain a distro that matches requirement (e.g. via download).  In the
+        base ``Environment`` class, this routine just returns
+        ``installer(requirement)``, unless `installer` is None, in which case
+        None is returned instead.  This method is a hook that allows subclasses
+        to attempt other ways of obtaining a distribution before falling back
+        to the `installer` argument."""
+        if installer is not None:
+            return installer(requirement)
+
+    def __iter__(self):
+        """Yield the unique project names of the available distributions"""
+        for key in self._distmap.keys():
+            if self[key]:
+                yield key
+
+    def __iadd__(self, other):
+        """In-place addition of a distribution or environment"""
+        if isinstance(other, Distribution):
+            self.add(other)
+        elif isinstance(other, Environment):
+            for project in other:
+                for dist in other[project]:
+                    self.add(dist)
+        else:
+            raise TypeError("Can't add %r to environment" % (other,))
+        return self
+
+    def __add__(self, other):
+        """Add an environment or distribution to an environment"""
+        new = self.__class__([], platform=None, python=None)
+        for env in self, other:
+            new += env
+        return new
+
+
+# XXX backward compatibility
+AvailableDistributions = Environment
+
+
+class ExtractionError(RuntimeError):
+    """An error occurred extracting a resource
+
+    The following attributes are available from instances of this exception:
+
+    manager
+        The resource manager that raised this exception
+
+    cache_path
+        The base directory for resource extraction
+
+    original_error
+        The exception instance that caused extraction to fail
+    """
+
+
+class ResourceManager:
+    """Manage resource extraction and packages"""
+
+    extraction_path = None
+
+    def __init__(self):
+        self.cached_files = {}
+
+    def resource_exists(self, package_or_requirement, resource_name):
+        """Does the named resource exist?"""
+        return get_provider(package_or_requirement).has_resource(resource_name)
+
+    def resource_isdir(self, package_or_requirement, resource_name):
+        """Is the named resource an existing directory?"""
+        return get_provider(package_or_requirement).resource_isdir(resource_name)
+
+    def resource_filename(self, package_or_requirement, resource_name):
+        """Return a true filesystem path for specified resource"""
+        return get_provider(package_or_requirement).get_resource_filename(
+            self, resource_name
+        )
+
+    def resource_stream(self, package_or_requirement, resource_name):
+        """Return a readable file-like object for specified resource"""
+        return get_provider(package_or_requirement).get_resource_stream(
+            self, resource_name
+        )
+
+    def resource_string(self, package_or_requirement, resource_name):
+        """Return specified resource as a string"""
+        return get_provider(package_or_requirement).get_resource_string(
+            self, resource_name
+        )
+
+    def resource_listdir(self, package_or_requirement, resource_name):
+        """List the contents of the named resource directory"""
+        return get_provider(package_or_requirement).resource_listdir(resource_name)
+
+    def extraction_error(self):
+        """Give an error message for problems extracting file(s)"""
+
+        old_exc = sys.exc_info()[1]
+        cache_path = self.extraction_path or get_default_cache()
+
+        tmpl = textwrap.dedent(
+            """
+            Can't extract file(s) to egg cache
+
+            The following error occurred while trying to extract file(s)
+            to the Python egg cache:
+
+              {old_exc}
+
+            The Python egg cache directory is currently set to:
+
+              {cache_path}
+
+            Perhaps your account does not have write access to this directory?
+            You can change the cache directory by setting the PYTHON_EGG_CACHE
+            environment variable to point to an accessible directory.
+            """
+        ).lstrip()
+        err = ExtractionError(tmpl.format(**locals()))
+        err.manager = self
+        err.cache_path = cache_path
+        err.original_error = old_exc
+        raise err
+
+    def get_cache_path(self, archive_name, names=()):
+        """Return absolute location in cache for `archive_name` and `names`
+
+        The parent directory of the resulting path will be created if it does
+        not already exist.  `archive_name` should be the base filename of the
+        enclosing egg (which may not be the name of the enclosing zipfile!),
+        including its ".egg" extension.  `names`, if provided, should be a
+        sequence of path name parts "under" the egg's extraction location.
+
+        This method should only be called by resource providers that need to
+        obtain an extraction location, and only for names they intend to
+        extract, as it tracks the generated names for possible cleanup later.
+        """
+        extract_path = self.extraction_path or get_default_cache()
+        target_path = os.path.join(extract_path, archive_name + '-tmp', *names)
+        try:
+            _bypass_ensure_directory(target_path)
+        except Exception:
+            self.extraction_error()
+
+        self._warn_unsafe_extraction_path(extract_path)
+
+        self.cached_files[target_path] = 1
+        return target_path
+
+    @staticmethod
+    def _warn_unsafe_extraction_path(path):
+        """
+        If the default extraction path is overridden and set to an insecure
+        location, such as /tmp, it opens up an opportunity for an attacker to
+        replace an extracted file with an unauthorized payload. Warn the user
+        if a known insecure location is used.
+
+        See Distribute #375 for more details.
+        """
+        if os.name == 'nt' and not path.startswith(os.environ['windir']):
+            # On Windows, permissions are generally restrictive by default
+            #  and temp directories are not writable by other users, so
+            #  bypass the warning.
+            return
+        mode = os.stat(path).st_mode
+        if mode & stat.S_IWOTH or mode & stat.S_IWGRP:
+            msg = (
+                "Extraction path is writable by group/others "
+                "and vulnerable to attack when "
+                "used with get_resource_filename ({path}). "
+                "Consider a more secure "
+                "location (set with .set_extraction_path or the "
+                "PYTHON_EGG_CACHE environment variable)."
+            ).format(**locals())
+            warnings.warn(msg, UserWarning)
+
+    def postprocess(self, tempname, filename):
+        """Perform any platform-specific postprocessing of `tempname`
+
+        This is where Mac header rewrites should be done; other platforms don't
+        have anything special they should do.
+
+        Resource providers should call this method ONLY after successfully
+        extracting a compressed resource.  They must NOT call it on resources
+        that are already in the filesystem.
+
+        `tempname` is the current (temporary) name of the file, and `filename`
+        is the name it will be renamed to by the caller after this routine
+        returns.
+        """
+
+        if os.name == 'posix':
+            # Make the resource executable
+            mode = ((os.stat(tempname).st_mode) | 0o555) & 0o7777
+            os.chmod(tempname, mode)
+
+    def set_extraction_path(self, path):
+        """Set the base path where resources will be extracted to, if needed.
+
+        If you do not call this routine before any extractions take place, the
+        path defaults to the return value of ``get_default_cache()``.  (Which
+        is based on the ``PYTHON_EGG_CACHE`` environment variable, with various
+        platform-specific fallbacks.  See that routine's documentation for more
+        details.)
+
+        Resources are extracted to subdirectories of this path based upon
+        information given by the ``IResourceProvider``.  You may set this to a
+        temporary directory, but then you must call ``cleanup_resources()`` to
+        delete the extracted files when done.  There is no guarantee that
+        ``cleanup_resources()`` will be able to remove all extracted files.
+
+        (Note: you may not change the extraction path for a given resource
+        manager once resources have been extracted, unless you first call
+        ``cleanup_resources()``.)
+        """
+        if self.cached_files:
+            raise ValueError("Can't change extraction path, files already extracted")
+
+        self.extraction_path = path
+
+    def cleanup_resources(self, force=False):
+        """
+        Delete all extracted resource files and directories, returning a list
+        of the file and directory names that could not be successfully removed.
+        This function does not have any concurrency protection, so it should
+        generally only be called when the extraction path is a temporary
+        directory exclusive to a single process.  This method is not
+        automatically called; you must call it explicitly or register it as an
+        ``atexit`` function if you wish to ensure cleanup of a temporary
+        directory used for extractions.
+        """
+        # XXX
+
+
+def get_default_cache():
+    """
+    Return the ``PYTHON_EGG_CACHE`` environment variable
+    or a platform-relevant user cache dir for an app
+    named "Python-Eggs".
+    """
+    return os.environ.get('PYTHON_EGG_CACHE') or platformdirs.user_cache_dir(
+        appname='Python-Eggs'
+    )
+
+
+def safe_name(name):
+    """Convert an arbitrary string to a standard distribution name
+
+    Any runs of non-alphanumeric/. characters are replaced with a single '-'.
+    """
+    return re.sub('[^A-Za-z0-9.]+', '-', name)
+
+
+def safe_version(version):
+    """
+    Convert an arbitrary string to a standard version string
+    """
+    try:
+        # normalize the version
+        return str(packaging.version.Version(version))
+    except packaging.version.InvalidVersion:
+        version = version.replace(' ', '.')
+        return re.sub('[^A-Za-z0-9.]+', '-', version)
+
+
+def _forgiving_version(version):
+    """Fallback when ``safe_version`` is not safe enough
+    >>> parse_version(_forgiving_version('0.23ubuntu1'))
+    
+    >>> parse_version(_forgiving_version('0.23-'))
+    
+    >>> parse_version(_forgiving_version('0.-_'))
+    
+    >>> parse_version(_forgiving_version('42.+?1'))
+    
+    >>> parse_version(_forgiving_version('hello world'))
+    
+    """
+    version = version.replace(' ', '.')
+    match = _PEP440_FALLBACK.search(version)
+    if match:
+        safe = match["safe"]
+        rest = version[len(safe):]
+    else:
+        safe = "0"
+        rest = version
+    local = f"sanitized.{_safe_segment(rest)}".strip(".")
+    return f"{safe}.dev0+{local}"
+
+
+def _safe_segment(segment):
+    """Convert an arbitrary string into a safe segment"""
+    segment = re.sub('[^A-Za-z0-9.]+', '-', segment)
+    segment = re.sub('-[^A-Za-z0-9]+', '-', segment)
+    return re.sub(r'\.[^A-Za-z0-9]+', '.', segment).strip(".-")
+
+
+def safe_extra(extra):
+    """Convert an arbitrary string to a standard 'extra' name
+
+    Any runs of non-alphanumeric characters are replaced with a single '_',
+    and the result is always lowercased.
+    """
+    return re.sub('[^A-Za-z0-9.-]+', '_', extra).lower()
+
+
+def to_filename(name):
+    """Convert a project or version name to its filename-escaped form
+
+    Any '-' characters are currently replaced with '_'.
+    """
+    return name.replace('-', '_')
+
+
+def invalid_marker(text):
+    """
+    Validate text as a PEP 508 environment marker; return an exception
+    if invalid or False otherwise.
+    """
+    try:
+        evaluate_marker(text)
+    except SyntaxError as e:
+        e.filename = None
+        e.lineno = None
+        return e
+    return False
+
+
+def evaluate_marker(text, extra=None):
+    """
+    Evaluate a PEP 508 environment marker.
+    Return a boolean indicating the marker result in this environment.
+    Raise SyntaxError if marker is invalid.
+
+    This implementation uses the 'pyparsing' module.
+    """
+    try:
+        marker = packaging.markers.Marker(text)
+        return marker.evaluate()
+    except packaging.markers.InvalidMarker as e:
+        raise SyntaxError(e) from e
+
+
+class NullProvider:
+    """Try to implement resources and metadata for arbitrary PEP 302 loaders"""
+
+    egg_name = None
+    egg_info = None
+    loader = None
+
+    def __init__(self, module):
+        self.loader = getattr(module, '__loader__', None)
+        self.module_path = os.path.dirname(getattr(module, '__file__', ''))
+
+    def get_resource_filename(self, manager, resource_name):
+        return self._fn(self.module_path, resource_name)
+
+    def get_resource_stream(self, manager, resource_name):
+        return io.BytesIO(self.get_resource_string(manager, resource_name))
+
+    def get_resource_string(self, manager, resource_name):
+        return self._get(self._fn(self.module_path, resource_name))
+
+    def has_resource(self, resource_name):
+        return self._has(self._fn(self.module_path, resource_name))
+
+    def _get_metadata_path(self, name):
+        return self._fn(self.egg_info, name)
+
+    def has_metadata(self, name):
+        if not self.egg_info:
+            return self.egg_info
+
+        path = self._get_metadata_path(name)
+        return self._has(path)
+
+    def get_metadata(self, name):
+        if not self.egg_info:
+            return ""
+        path = self._get_metadata_path(name)
+        value = self._get(path)
+        try:
+            return value.decode('utf-8')
+        except UnicodeDecodeError as exc:
+            # Include the path in the error message to simplify
+            # troubleshooting, and without changing the exception type.
+            exc.reason += ' in {} file at path: {}'.format(name, path)
+            raise
+
+    def get_metadata_lines(self, name):
+        return yield_lines(self.get_metadata(name))
+
+    def resource_isdir(self, resource_name):
+        return self._isdir(self._fn(self.module_path, resource_name))
+
+    def metadata_isdir(self, name):
+        return self.egg_info and self._isdir(self._fn(self.egg_info, name))
+
+    def resource_listdir(self, resource_name):
+        return self._listdir(self._fn(self.module_path, resource_name))
+
+    def metadata_listdir(self, name):
+        if self.egg_info:
+            return self._listdir(self._fn(self.egg_info, name))
+        return []
+
+    def run_script(self, script_name, namespace):
+        script = 'scripts/' + script_name
+        if not self.has_metadata(script):
+            raise ResolutionError(
+                "Script {script!r} not found in metadata at {self.egg_info!r}".format(
+                    **locals()
+                ),
+            )
+        script_text = self.get_metadata(script).replace('\r\n', '\n')
+        script_text = script_text.replace('\r', '\n')
+        script_filename = self._fn(self.egg_info, script)
+        namespace['__file__'] = script_filename
+        if os.path.exists(script_filename):
+            with open(script_filename) as fid:
+                source = fid.read()
+            code = compile(source, script_filename, 'exec')
+            exec(code, namespace, namespace)
+        else:
+            from linecache import cache
+
+            cache[script_filename] = (
+                len(script_text),
+                0,
+                script_text.split('\n'),
+                script_filename,
+            )
+            script_code = compile(script_text, script_filename, 'exec')
+            exec(script_code, namespace, namespace)
+
+    def _has(self, path):
+        raise NotImplementedError(
+            "Can't perform this operation for unregistered loader type"
+        )
+
+    def _isdir(self, path):
+        raise NotImplementedError(
+            "Can't perform this operation for unregistered loader type"
+        )
+
+    def _listdir(self, path):
+        raise NotImplementedError(
+            "Can't perform this operation for unregistered loader type"
+        )
+
+    def _fn(self, base, resource_name):
+        self._validate_resource_path(resource_name)
+        if resource_name:
+            return os.path.join(base, *resource_name.split('/'))
+        return base
+
+    @staticmethod
+    def _validate_resource_path(path):
+        """
+        Validate the resource paths according to the docs.
+        https://setuptools.pypa.io/en/latest/pkg_resources.html#basic-resource-access
+
+        >>> warned = getfixture('recwarn')
+        >>> warnings.simplefilter('always')
+        >>> vrp = NullProvider._validate_resource_path
+        >>> vrp('foo/bar.txt')
+        >>> bool(warned)
+        False
+        >>> vrp('../foo/bar.txt')
+        >>> bool(warned)
+        True
+        >>> warned.clear()
+        >>> vrp('/foo/bar.txt')
+        >>> bool(warned)
+        True
+        >>> vrp('foo/../../bar.txt')
+        >>> bool(warned)
+        True
+        >>> warned.clear()
+        >>> vrp('foo/f../bar.txt')
+        >>> bool(warned)
+        False
+
+        Windows path separators are straight-up disallowed.
+        >>> vrp(r'\\foo/bar.txt')
+        Traceback (most recent call last):
+        ...
+        ValueError: Use of .. or absolute path in a resource path \
+is not allowed.
+
+        >>> vrp(r'C:\\foo/bar.txt')
+        Traceback (most recent call last):
+        ...
+        ValueError: Use of .. or absolute path in a resource path \
+is not allowed.
+
+        Blank values are allowed
+
+        >>> vrp('')
+        >>> bool(warned)
+        False
+
+        Non-string values are not.
+
+        >>> vrp(None)
+        Traceback (most recent call last):
+        ...
+        AttributeError: ...
+        """
+        invalid = (
+            os.path.pardir in path.split(posixpath.sep)
+            or posixpath.isabs(path)
+            or ntpath.isabs(path)
+        )
+        if not invalid:
+            return
+
+        msg = "Use of .. or absolute path in a resource path is not allowed."
+
+        # Aggressively disallow Windows absolute paths
+        if ntpath.isabs(path) and not posixpath.isabs(path):
+            raise ValueError(msg)
+
+        # for compatibility, warn; in future
+        # raise ValueError(msg)
+        issue_warning(
+            msg[:-1] + " and will raise exceptions in a future release.",
+            DeprecationWarning,
+        )
+
+    def _get(self, path):
+        if hasattr(self.loader, 'get_data'):
+            return self.loader.get_data(path)
+        raise NotImplementedError(
+            "Can't perform this operation for loaders without 'get_data()'"
+        )
+
+
+register_loader_type(object, NullProvider)
+
+
+def _parents(path):
+    """
+    yield all parents of path including path
+    """
+    last = None
+    while path != last:
+        yield path
+        last = path
+        path, _ = os.path.split(path)
+
+
+class EggProvider(NullProvider):
+    """Provider based on a virtual filesystem"""
+
+    def __init__(self, module):
+        super().__init__(module)
+        self._setup_prefix()
+
+    def _setup_prefix(self):
+        # Assume that metadata may be nested inside a "basket"
+        # of multiple eggs and use module_path instead of .archive.
+        eggs = filter(_is_egg_path, _parents(self.module_path))
+        egg = next(eggs, None)
+        egg and self._set_egg(egg)
+
+    def _set_egg(self, path):
+        self.egg_name = os.path.basename(path)
+        self.egg_info = os.path.join(path, 'EGG-INFO')
+        self.egg_root = path
+
+
+class DefaultProvider(EggProvider):
+    """Provides access to package resources in the filesystem"""
+
+    def _has(self, path):
+        return os.path.exists(path)
+
+    def _isdir(self, path):
+        return os.path.isdir(path)
+
+    def _listdir(self, path):
+        return os.listdir(path)
+
+    def get_resource_stream(self, manager, resource_name):
+        return open(self._fn(self.module_path, resource_name), 'rb')
+
+    def _get(self, path):
+        with open(path, 'rb') as stream:
+            return stream.read()
+
+    @classmethod
+    def _register(cls):
+        loader_names = (
+            'SourceFileLoader',
+            'SourcelessFileLoader',
+        )
+        for name in loader_names:
+            loader_cls = getattr(importlib_machinery, name, type(None))
+            register_loader_type(loader_cls, cls)
+
+
+DefaultProvider._register()
+
+
+class EmptyProvider(NullProvider):
+    """Provider that returns nothing for all requests"""
+
+    module_path = None
+
+    _isdir = _has = lambda self, path: False
+
+    def _get(self, path):
+        return ''
+
+    def _listdir(self, path):
+        return []
+
+    def __init__(self):
+        pass
+
+
+empty_provider = EmptyProvider()
+
+
+class ZipManifests(dict):
+    """
+    zip manifest builder
+    """
+
+    @classmethod
+    def build(cls, path):
+        """
+        Build a dictionary similar to the zipimport directory
+        caches, except instead of tuples, store ZipInfo objects.
+
+        Use a platform-specific path separator (os.sep) for the path keys
+        for compatibility with pypy on Windows.
+        """
+        with zipfile.ZipFile(path) as zfile:
+            items = (
+                (
+                    name.replace('/', os.sep),
+                    zfile.getinfo(name),
+                )
+                for name in zfile.namelist()
+            )
+            return dict(items)
+
+    load = build
+
+
+class MemoizedZipManifests(ZipManifests):
+    """
+    Memoized zipfile manifests.
+    """
+
+    manifest_mod = collections.namedtuple('manifest_mod', 'manifest mtime')
+
+    def load(self, path):
+        """
+        Load a manifest at path or return a suitable manifest already loaded.
+        """
+        path = os.path.normpath(path)
+        mtime = os.stat(path).st_mtime
+
+        if path not in self or self[path].mtime != mtime:
+            manifest = self.build(path)
+            self[path] = self.manifest_mod(manifest, mtime)
+
+        return self[path].manifest
+
+
+class ZipProvider(EggProvider):
+    """Resource support for zips and eggs"""
+
+    eagers = None
+    _zip_manifests = MemoizedZipManifests()
+
+    def __init__(self, module):
+        super().__init__(module)
+        self.zip_pre = self.loader.archive + os.sep
+
+    def _zipinfo_name(self, fspath):
+        # Convert a virtual filename (full path to file) into a zipfile subpath
+        # usable with the zipimport directory cache for our target archive
+        fspath = fspath.rstrip(os.sep)
+        if fspath == self.loader.archive:
+            return ''
+        if fspath.startswith(self.zip_pre):
+            return fspath[len(self.zip_pre) :]
+        raise AssertionError("%s is not a subpath of %s" % (fspath, self.zip_pre))
+
+    def _parts(self, zip_path):
+        # Convert a zipfile subpath into an egg-relative path part list.
+        # pseudo-fs path
+        fspath = self.zip_pre + zip_path
+        if fspath.startswith(self.egg_root + os.sep):
+            return fspath[len(self.egg_root) + 1 :].split(os.sep)
+        raise AssertionError("%s is not a subpath of %s" % (fspath, self.egg_root))
+
+    @property
+    def zipinfo(self):
+        return self._zip_manifests.load(self.loader.archive)
+
+    def get_resource_filename(self, manager, resource_name):
+        if not self.egg_name:
+            raise NotImplementedError(
+                "resource_filename() only supported for .egg, not .zip"
+            )
+        # no need to lock for extraction, since we use temp names
+        zip_path = self._resource_to_zip(resource_name)
+        eagers = self._get_eager_resources()
+        if '/'.join(self._parts(zip_path)) in eagers:
+            for name in eagers:
+                self._extract_resource(manager, self._eager_to_zip(name))
+        return self._extract_resource(manager, zip_path)
+
+    @staticmethod
+    def _get_date_and_size(zip_stat):
+        size = zip_stat.file_size
+        # ymdhms+wday, yday, dst
+        date_time = zip_stat.date_time + (0, 0, -1)
+        # 1980 offset already done
+        timestamp = time.mktime(date_time)
+        return timestamp, size
+
+    # FIXME: 'ZipProvider._extract_resource' is too complex (12)
+    def _extract_resource(self, manager, zip_path):  # noqa: C901
+        if zip_path in self._index():
+            for name in self._index()[zip_path]:
+                last = self._extract_resource(manager, os.path.join(zip_path, name))
+            # return the extracted directory name
+            return os.path.dirname(last)
+
+        timestamp, size = self._get_date_and_size(self.zipinfo[zip_path])
+
+        if not WRITE_SUPPORT:
+            raise IOError(
+                '"os.rename" and "os.unlink" are not supported ' 'on this platform'
+            )
+        try:
+            real_path = manager.get_cache_path(self.egg_name, self._parts(zip_path))
+
+            if self._is_current(real_path, zip_path):
+                return real_path
+
+            outf, tmpnam = _mkstemp(
+                ".$extract",
+                dir=os.path.dirname(real_path),
+            )
+            os.write(outf, self.loader.get_data(zip_path))
+            os.close(outf)
+            utime(tmpnam, (timestamp, timestamp))
+            manager.postprocess(tmpnam, real_path)
+
+            try:
+                rename(tmpnam, real_path)
+
+            except os.error:
+                if os.path.isfile(real_path):
+                    if self._is_current(real_path, zip_path):
+                        # the file became current since it was checked above,
+                        #  so proceed.
+                        return real_path
+                    # Windows, del old file and retry
+                    elif os.name == 'nt':
+                        unlink(real_path)
+                        rename(tmpnam, real_path)
+                        return real_path
+                raise
+
+        except os.error:
+            # report a user-friendly error
+            manager.extraction_error()
+
+        return real_path
+
+    def _is_current(self, file_path, zip_path):
+        """
+        Return True if the file_path is current for this zip_path
+        """
+        timestamp, size = self._get_date_and_size(self.zipinfo[zip_path])
+        if not os.path.isfile(file_path):
+            return False
+        stat = os.stat(file_path)
+        if stat.st_size != size or stat.st_mtime != timestamp:
+            return False
+        # check that the contents match
+        zip_contents = self.loader.get_data(zip_path)
+        with open(file_path, 'rb') as f:
+            file_contents = f.read()
+        return zip_contents == file_contents
+
+    def _get_eager_resources(self):
+        if self.eagers is None:
+            eagers = []
+            for name in ('native_libs.txt', 'eager_resources.txt'):
+                if self.has_metadata(name):
+                    eagers.extend(self.get_metadata_lines(name))
+            self.eagers = eagers
+        return self.eagers
+
+    def _index(self):
+        try:
+            return self._dirindex
+        except AttributeError:
+            ind = {}
+            for path in self.zipinfo:
+                parts = path.split(os.sep)
+                while parts:
+                    parent = os.sep.join(parts[:-1])
+                    if parent in ind:
+                        ind[parent].append(parts[-1])
+                        break
+                    else:
+                        ind[parent] = [parts.pop()]
+            self._dirindex = ind
+            return ind
+
+    def _has(self, fspath):
+        zip_path = self._zipinfo_name(fspath)
+        return zip_path in self.zipinfo or zip_path in self._index()
+
+    def _isdir(self, fspath):
+        return self._zipinfo_name(fspath) in self._index()
+
+    def _listdir(self, fspath):
+        return list(self._index().get(self._zipinfo_name(fspath), ()))
+
+    def _eager_to_zip(self, resource_name):
+        return self._zipinfo_name(self._fn(self.egg_root, resource_name))
+
+    def _resource_to_zip(self, resource_name):
+        return self._zipinfo_name(self._fn(self.module_path, resource_name))
+
+
+register_loader_type(zipimport.zipimporter, ZipProvider)
+
+
+class FileMetadata(EmptyProvider):
+    """Metadata handler for standalone PKG-INFO files
+
+    Usage::
+
+        metadata = FileMetadata("/path/to/PKG-INFO")
+
+    This provider rejects all data and metadata requests except for PKG-INFO,
+    which is treated as existing, and will be the contents of the file at
+    the provided location.
+    """
+
+    def __init__(self, path):
+        self.path = path
+
+    def _get_metadata_path(self, name):
+        return self.path
+
+    def has_metadata(self, name):
+        return name == 'PKG-INFO' and os.path.isfile(self.path)
+
+    def get_metadata(self, name):
+        if name != 'PKG-INFO':
+            raise KeyError("No metadata except PKG-INFO is available")
+
+        with io.open(self.path, encoding='utf-8', errors="replace") as f:
+            metadata = f.read()
+        self._warn_on_replacement(metadata)
+        return metadata
+
+    def _warn_on_replacement(self, metadata):
+        replacement_char = '�'
+        if replacement_char in metadata:
+            tmpl = "{self.path} could not be properly decoded in UTF-8"
+            msg = tmpl.format(**locals())
+            warnings.warn(msg)
+
+    def get_metadata_lines(self, name):
+        return yield_lines(self.get_metadata(name))
+
+
+class PathMetadata(DefaultProvider):
+    """Metadata provider for egg directories
+
+    Usage::
+
+        # Development eggs:
+
+        egg_info = "/path/to/PackageName.egg-info"
+        base_dir = os.path.dirname(egg_info)
+        metadata = PathMetadata(base_dir, egg_info)
+        dist_name = os.path.splitext(os.path.basename(egg_info))[0]
+        dist = Distribution(basedir, project_name=dist_name, metadata=metadata)
+
+        # Unpacked egg directories:
+
+        egg_path = "/path/to/PackageName-ver-pyver-etc.egg"
+        metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO'))
+        dist = Distribution.from_filename(egg_path, metadata=metadata)
+    """
+
+    def __init__(self, path, egg_info):
+        self.module_path = path
+        self.egg_info = egg_info
+
+
+class EggMetadata(ZipProvider):
+    """Metadata provider for .egg files"""
+
+    def __init__(self, importer):
+        """Create a metadata provider from a zipimporter"""
+
+        self.zip_pre = importer.archive + os.sep
+        self.loader = importer
+        if importer.prefix:
+            self.module_path = os.path.join(importer.archive, importer.prefix)
+        else:
+            self.module_path = importer.archive
+        self._setup_prefix()
+
+
+_declare_state('dict', _distribution_finders={})
+
+
+def register_finder(importer_type, distribution_finder):
+    """Register `distribution_finder` to find distributions in sys.path items
+
+    `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item
+    handler), and `distribution_finder` is a callable that, passed a path
+    item and the importer instance, yields ``Distribution`` instances found on
+    that path item.  See ``pkg_resources.find_on_path`` for an example."""
+    _distribution_finders[importer_type] = distribution_finder
+
+
+def find_distributions(path_item, only=False):
+    """Yield distributions accessible via `path_item`"""
+    importer = get_importer(path_item)
+    finder = _find_adapter(_distribution_finders, importer)
+    return finder(importer, path_item, only)
+
+
+def find_eggs_in_zip(importer, path_item, only=False):
+    """
+    Find eggs in zip files; possibly multiple nested eggs.
+    """
+    if importer.archive.endswith('.whl'):
+        # wheels are not supported with this finder
+        # they don't have PKG-INFO metadata, and won't ever contain eggs
+        return
+    metadata = EggMetadata(importer)
+    if metadata.has_metadata('PKG-INFO'):
+        yield Distribution.from_filename(path_item, metadata=metadata)
+    if only:
+        # don't yield nested distros
+        return
+    for subitem in metadata.resource_listdir(''):
+        if _is_egg_path(subitem):
+            subpath = os.path.join(path_item, subitem)
+            dists = find_eggs_in_zip(zipimport.zipimporter(subpath), subpath)
+            for dist in dists:
+                yield dist
+        elif subitem.lower().endswith(('.dist-info', '.egg-info')):
+            subpath = os.path.join(path_item, subitem)
+            submeta = EggMetadata(zipimport.zipimporter(subpath))
+            submeta.egg_info = subpath
+            yield Distribution.from_location(path_item, subitem, submeta)
+
+
+register_finder(zipimport.zipimporter, find_eggs_in_zip)
+
+
+def find_nothing(importer, path_item, only=False):
+    return ()
+
+
+register_finder(object, find_nothing)
+
+
+def find_on_path(importer, path_item, only=False):
+    """Yield distributions accessible on a sys.path directory"""
+    path_item = _normalize_cached(path_item)
+
+    if _is_unpacked_egg(path_item):
+        yield Distribution.from_filename(
+            path_item,
+            metadata=PathMetadata(path_item, os.path.join(path_item, 'EGG-INFO')),
+        )
+        return
+
+    entries = (os.path.join(path_item, child) for child in safe_listdir(path_item))
+
+    # scan for .egg and .egg-info in directory
+    for entry in sorted(entries):
+        fullpath = os.path.join(path_item, entry)
+        factory = dist_factory(path_item, entry, only)
+        for dist in factory(fullpath):
+            yield dist
+
+
+def dist_factory(path_item, entry, only):
+    """Return a dist_factory for the given entry."""
+    lower = entry.lower()
+    is_egg_info = lower.endswith('.egg-info')
+    is_dist_info = lower.endswith('.dist-info') and os.path.isdir(
+        os.path.join(path_item, entry)
+    )
+    is_meta = is_egg_info or is_dist_info
+    return (
+        distributions_from_metadata
+        if is_meta
+        else find_distributions
+        if not only and _is_egg_path(entry)
+        else resolve_egg_link
+        if not only and lower.endswith('.egg-link')
+        else NoDists()
+    )
+
+
+class NoDists:
+    """
+    >>> bool(NoDists())
+    False
+
+    >>> list(NoDists()('anything'))
+    []
+    """
+
+    def __bool__(self):
+        return False
+
+    def __call__(self, fullpath):
+        return iter(())
+
+
+def safe_listdir(path):
+    """
+    Attempt to list contents of path, but suppress some exceptions.
+    """
+    try:
+        return os.listdir(path)
+    except (PermissionError, NotADirectoryError):
+        pass
+    except OSError as e:
+        # Ignore the directory if does not exist, not a directory or
+        # permission denied
+        if e.errno not in (errno.ENOTDIR, errno.EACCES, errno.ENOENT):
+            raise
+    return ()
+
+
+def distributions_from_metadata(path):
+    root = os.path.dirname(path)
+    if os.path.isdir(path):
+        if len(os.listdir(path)) == 0:
+            # empty metadata dir; skip
+            return
+        metadata = PathMetadata(root, path)
+    else:
+        metadata = FileMetadata(path)
+    entry = os.path.basename(path)
+    yield Distribution.from_location(
+        root,
+        entry,
+        metadata,
+        precedence=DEVELOP_DIST,
+    )
+
+
+def non_empty_lines(path):
+    """
+    Yield non-empty lines from file at path
+    """
+    with open(path) as f:
+        for line in f:
+            line = line.strip()
+            if line:
+                yield line
+
+
+def resolve_egg_link(path):
+    """
+    Given a path to an .egg-link, resolve distributions
+    present in the referenced path.
+    """
+    referenced_paths = non_empty_lines(path)
+    resolved_paths = (
+        os.path.join(os.path.dirname(path), ref) for ref in referenced_paths
+    )
+    dist_groups = map(find_distributions, resolved_paths)
+    return next(dist_groups, ())
+
+
+if hasattr(pkgutil, 'ImpImporter'):
+    register_finder(pkgutil.ImpImporter, find_on_path)
+
+register_finder(importlib_machinery.FileFinder, find_on_path)
+
+_declare_state('dict', _namespace_handlers={})
+_declare_state('dict', _namespace_packages={})
+
+
+def register_namespace_handler(importer_type, namespace_handler):
+    """Register `namespace_handler` to declare namespace packages
+
+    `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item
+    handler), and `namespace_handler` is a callable like this::
+
+        def namespace_handler(importer, path_entry, moduleName, module):
+            # return a path_entry to use for child packages
+
+    Namespace handlers are only called if the importer object has already
+    agreed that it can handle the relevant path item, and they should only
+    return a subpath if the module __path__ does not already contain an
+    equivalent subpath.  For an example namespace handler, see
+    ``pkg_resources.file_ns_handler``.
+    """
+    _namespace_handlers[importer_type] = namespace_handler
+
+
+def _handle_ns(packageName, path_item):
+    """Ensure that named package includes a subpath of path_item (if needed)"""
+
+    importer = get_importer(path_item)
+    if importer is None:
+        return None
+
+    # use find_spec (PEP 451) and fall-back to find_module (PEP 302)
+    try:
+        spec = importer.find_spec(packageName)
+    except AttributeError:
+        # capture warnings due to #1111
+        with warnings.catch_warnings():
+            warnings.simplefilter("ignore")
+            loader = importer.find_module(packageName)
+    else:
+        loader = spec.loader if spec else None
+
+    if loader is None:
+        return None
+    module = sys.modules.get(packageName)
+    if module is None:
+        module = sys.modules[packageName] = types.ModuleType(packageName)
+        module.__path__ = []
+        _set_parent_ns(packageName)
+    elif not hasattr(module, '__path__'):
+        raise TypeError("Not a package:", packageName)
+    handler = _find_adapter(_namespace_handlers, importer)
+    subpath = handler(importer, path_item, packageName, module)
+    if subpath is not None:
+        path = module.__path__
+        path.append(subpath)
+        importlib.import_module(packageName)
+        _rebuild_mod_path(path, packageName, module)
+    return subpath
+
+
+def _rebuild_mod_path(orig_path, package_name, module):
+    """
+    Rebuild module.__path__ ensuring that all entries are ordered
+    corresponding to their sys.path order
+    """
+    sys_path = [_normalize_cached(p) for p in sys.path]
+
+    def safe_sys_path_index(entry):
+        """
+        Workaround for #520 and #513.
+        """
+        try:
+            return sys_path.index(entry)
+        except ValueError:
+            return float('inf')
+
+    def position_in_sys_path(path):
+        """
+        Return the ordinal of the path based on its position in sys.path
+        """
+        path_parts = path.split(os.sep)
+        module_parts = package_name.count('.') + 1
+        parts = path_parts[:-module_parts]
+        return safe_sys_path_index(_normalize_cached(os.sep.join(parts)))
+
+    new_path = sorted(orig_path, key=position_in_sys_path)
+    new_path = [_normalize_cached(p) for p in new_path]
+
+    if isinstance(module.__path__, list):
+        module.__path__[:] = new_path
+    else:
+        module.__path__ = new_path
+
+
+def declare_namespace(packageName):
+    """Declare that package 'packageName' is a namespace package"""
+
+    msg = (
+        f"Deprecated call to `pkg_resources.declare_namespace({packageName!r})`.\n"
+        "Implementing implicit namespace packages (as specified in PEP 420) "
+        "is preferred to `pkg_resources.declare_namespace`. "
+        "See https://setuptools.pypa.io/en/latest/references/"
+        "keywords.html#keyword-namespace-packages"
+    )
+    warnings.warn(msg, DeprecationWarning, stacklevel=2)
+
+    _imp.acquire_lock()
+    try:
+        if packageName in _namespace_packages:
+            return
+
+        path = sys.path
+        parent, _, _ = packageName.rpartition('.')
+
+        if parent:
+            declare_namespace(parent)
+            if parent not in _namespace_packages:
+                __import__(parent)
+            try:
+                path = sys.modules[parent].__path__
+            except AttributeError as e:
+                raise TypeError("Not a package:", parent) from e
+
+        # Track what packages are namespaces, so when new path items are added,
+        # they can be updated
+        _namespace_packages.setdefault(parent or None, []).append(packageName)
+        _namespace_packages.setdefault(packageName, [])
+
+        for path_item in path:
+            # Ensure all the parent's path items are reflected in the child,
+            # if they apply
+            _handle_ns(packageName, path_item)
+
+    finally:
+        _imp.release_lock()
+
+
+def fixup_namespace_packages(path_item, parent=None):
+    """Ensure that previously-declared namespace packages include path_item"""
+    _imp.acquire_lock()
+    try:
+        for package in _namespace_packages.get(parent, ()):
+            subpath = _handle_ns(package, path_item)
+            if subpath:
+                fixup_namespace_packages(subpath, package)
+    finally:
+        _imp.release_lock()
+
+
+def file_ns_handler(importer, path_item, packageName, module):
+    """Compute an ns-package subpath for a filesystem or zipfile importer"""
+
+    subpath = os.path.join(path_item, packageName.split('.')[-1])
+    normalized = _normalize_cached(subpath)
+    for item in module.__path__:
+        if _normalize_cached(item) == normalized:
+            break
+    else:
+        # Only return the path if it's not already there
+        return subpath
+
+
+if hasattr(pkgutil, 'ImpImporter'):
+    register_namespace_handler(pkgutil.ImpImporter, file_ns_handler)
+
+register_namespace_handler(zipimport.zipimporter, file_ns_handler)
+register_namespace_handler(importlib_machinery.FileFinder, file_ns_handler)
+
+
+def null_ns_handler(importer, path_item, packageName, module):
+    return None
+
+
+register_namespace_handler(object, null_ns_handler)
+
+
+def normalize_path(filename):
+    """Normalize a file/dir name for comparison purposes"""
+    return os.path.normcase(os.path.realpath(os.path.normpath(_cygwin_patch(filename))))
+
+
+def _cygwin_patch(filename):  # pragma: nocover
+    """
+    Contrary to POSIX 2008, on Cygwin, getcwd (3) contains
+    symlink components. Using
+    os.path.abspath() works around this limitation. A fix in os.getcwd()
+    would probably better, in Cygwin even more so, except
+    that this seems to be by design...
+    """
+    return os.path.abspath(filename) if sys.platform == 'cygwin' else filename
+
+
+def _normalize_cached(filename, _cache={}):
+    try:
+        return _cache[filename]
+    except KeyError:
+        _cache[filename] = result = normalize_path(filename)
+        return result
+
+
+def _is_egg_path(path):
+    """
+    Determine if given path appears to be an egg.
+    """
+    return _is_zip_egg(path) or _is_unpacked_egg(path)
+
+
+def _is_zip_egg(path):
+    return (
+        path.lower().endswith('.egg')
+        and os.path.isfile(path)
+        and zipfile.is_zipfile(path)
+    )
+
+
+def _is_unpacked_egg(path):
+    """
+    Determine if given path appears to be an unpacked egg.
+    """
+    return path.lower().endswith('.egg') and os.path.isfile(
+        os.path.join(path, 'EGG-INFO', 'PKG-INFO')
+    )
+
+
+def _set_parent_ns(packageName):
+    parts = packageName.split('.')
+    name = parts.pop()
+    if parts:
+        parent = '.'.join(parts)
+        setattr(sys.modules[parent], name, sys.modules[packageName])
+
+
+MODULE = re.compile(r"\w+(\.\w+)*$").match
+EGG_NAME = re.compile(
+    r"""
+    (?P[^-]+) (
+        -(?P[^-]+) (
+            -py(?P[^-]+) (
+                -(?P.+)
+            )?
+        )?
+    )?
+    """,
+    re.VERBOSE | re.IGNORECASE,
+).match
+
+
+class EntryPoint:
+    """Object representing an advertised importable object"""
+
+    def __init__(self, name, module_name, attrs=(), extras=(), dist=None):
+        if not MODULE(module_name):
+            raise ValueError("Invalid module name", module_name)
+        self.name = name
+        self.module_name = module_name
+        self.attrs = tuple(attrs)
+        self.extras = tuple(extras)
+        self.dist = dist
+
+    def __str__(self):
+        s = "%s = %s" % (self.name, self.module_name)
+        if self.attrs:
+            s += ':' + '.'.join(self.attrs)
+        if self.extras:
+            s += ' [%s]' % ','.join(self.extras)
+        return s
+
+    def __repr__(self):
+        return "EntryPoint.parse(%r)" % str(self)
+
+    def load(self, require=True, *args, **kwargs):
+        """
+        Require packages for this EntryPoint, then resolve it.
+        """
+        if not require or args or kwargs:
+            warnings.warn(
+                "Parameters to load are deprecated.  Call .resolve and "
+                ".require separately.",
+                PkgResourcesDeprecationWarning,
+                stacklevel=2,
+            )
+        if require:
+            self.require(*args, **kwargs)
+        return self.resolve()
+
+    def resolve(self):
+        """
+        Resolve the entry point from its module and attrs.
+        """
+        module = __import__(self.module_name, fromlist=['__name__'], level=0)
+        try:
+            return functools.reduce(getattr, self.attrs, module)
+        except AttributeError as exc:
+            raise ImportError(str(exc)) from exc
+
+    def require(self, env=None, installer=None):
+        if self.extras and not self.dist:
+            raise UnknownExtra("Can't require() without a distribution", self)
+
+        # Get the requirements for this entry point with all its extras and
+        # then resolve them. We have to pass `extras` along when resolving so
+        # that the working set knows what extras we want. Otherwise, for
+        # dist-info distributions, the working set will assume that the
+        # requirements for that extra are purely optional and skip over them.
+        reqs = self.dist.requires(self.extras)
+        items = working_set.resolve(reqs, env, installer, extras=self.extras)
+        list(map(working_set.add, items))
+
+    pattern = re.compile(
+        r'\s*'
+        r'(?P.+?)\s*'
+        r'=\s*'
+        r'(?P[\w.]+)\s*'
+        r'(:\s*(?P[\w.]+))?\s*'
+        r'(?P\[.*\])?\s*$'
+    )
+
+    @classmethod
+    def parse(cls, src, dist=None):
+        """Parse a single entry point from string `src`
+
+        Entry point syntax follows the form::
+
+            name = some.module:some.attr [extra1, extra2]
+
+        The entry name and module name are required, but the ``:attrs`` and
+        ``[extras]`` parts are optional
+        """
+        m = cls.pattern.match(src)
+        if not m:
+            msg = "EntryPoint must be in 'name=module:attrs [extras]' format"
+            raise ValueError(msg, src)
+        res = m.groupdict()
+        extras = cls._parse_extras(res['extras'])
+        attrs = res['attr'].split('.') if res['attr'] else ()
+        return cls(res['name'], res['module'], attrs, extras, dist)
+
+    @classmethod
+    def _parse_extras(cls, extras_spec):
+        if not extras_spec:
+            return ()
+        req = Requirement.parse('x' + extras_spec)
+        if req.specs:
+            raise ValueError()
+        return req.extras
+
+    @classmethod
+    def parse_group(cls, group, lines, dist=None):
+        """Parse an entry point group"""
+        if not MODULE(group):
+            raise ValueError("Invalid group name", group)
+        this = {}
+        for line in yield_lines(lines):
+            ep = cls.parse(line, dist)
+            if ep.name in this:
+                raise ValueError("Duplicate entry point", group, ep.name)
+            this[ep.name] = ep
+        return this
+
+    @classmethod
+    def parse_map(cls, data, dist=None):
+        """Parse a map of entry point groups"""
+        if isinstance(data, dict):
+            data = data.items()
+        else:
+            data = split_sections(data)
+        maps = {}
+        for group, lines in data:
+            if group is None:
+                if not lines:
+                    continue
+                raise ValueError("Entry points must be listed in groups")
+            group = group.strip()
+            if group in maps:
+                raise ValueError("Duplicate group name", group)
+            maps[group] = cls.parse_group(group, lines, dist)
+        return maps
+
+
+def _version_from_file(lines):
+    """
+    Given an iterable of lines from a Metadata file, return
+    the value of the Version field, if present, or None otherwise.
+    """
+
+    def is_version_line(line):
+        return line.lower().startswith('version:')
+
+    version_lines = filter(is_version_line, lines)
+    line = next(iter(version_lines), '')
+    _, _, value = line.partition(':')
+    return safe_version(value.strip()) or None
+
+
+class Distribution:
+    """Wrap an actual or potential sys.path entry w/metadata"""
+
+    PKG_INFO = 'PKG-INFO'
+
+    def __init__(
+        self,
+        location=None,
+        metadata=None,
+        project_name=None,
+        version=None,
+        py_version=PY_MAJOR,
+        platform=None,
+        precedence=EGG_DIST,
+    ):
+        self.project_name = safe_name(project_name or 'Unknown')
+        if version is not None:
+            self._version = safe_version(version)
+        self.py_version = py_version
+        self.platform = platform
+        self.location = location
+        self.precedence = precedence
+        self._provider = metadata or empty_provider
+
+    @classmethod
+    def from_location(cls, location, basename, metadata=None, **kw):
+        project_name, version, py_version, platform = [None] * 4
+        basename, ext = os.path.splitext(basename)
+        if ext.lower() in _distributionImpl:
+            cls = _distributionImpl[ext.lower()]
+
+            match = EGG_NAME(basename)
+            if match:
+                project_name, version, py_version, platform = match.group(
+                    'name', 'ver', 'pyver', 'plat'
+                )
+        return cls(
+            location,
+            metadata,
+            project_name=project_name,
+            version=version,
+            py_version=py_version,
+            platform=platform,
+            **kw,
+        )._reload_version()
+
+    def _reload_version(self):
+        return self
+
+    @property
+    def hashcmp(self):
+        return (
+            self._forgiving_parsed_version,
+            self.precedence,
+            self.key,
+            self.location,
+            self.py_version or '',
+            self.platform or '',
+        )
+
+    def __hash__(self):
+        return hash(self.hashcmp)
+
+    def __lt__(self, other):
+        return self.hashcmp < other.hashcmp
+
+    def __le__(self, other):
+        return self.hashcmp <= other.hashcmp
+
+    def __gt__(self, other):
+        return self.hashcmp > other.hashcmp
+
+    def __ge__(self, other):
+        return self.hashcmp >= other.hashcmp
+
+    def __eq__(self, other):
+        if not isinstance(other, self.__class__):
+            # It's not a Distribution, so they are not equal
+            return False
+        return self.hashcmp == other.hashcmp
+
+    def __ne__(self, other):
+        return not self == other
+
+    # These properties have to be lazy so that we don't have to load any
+    # metadata until/unless it's actually needed.  (i.e., some distributions
+    # may not know their name or version without loading PKG-INFO)
+
+    @property
+    def key(self):
+        try:
+            return self._key
+        except AttributeError:
+            self._key = key = self.project_name.lower()
+            return key
+
+    @property
+    def parsed_version(self):
+        if not hasattr(self, "_parsed_version"):
+            try:
+                self._parsed_version = parse_version(self.version)
+            except packaging.version.InvalidVersion as ex:
+                info = f"(package: {self.project_name})"
+                if hasattr(ex, "add_note"):
+                    ex.add_note(info)  # PEP 678
+                    raise
+                raise packaging.version.InvalidVersion(f"{str(ex)} {info}") from None
+
+        return self._parsed_version
+
+    @property
+    def _forgiving_parsed_version(self):
+        try:
+            return self.parsed_version
+        except packaging.version.InvalidVersion as ex:
+            self._parsed_version = parse_version(_forgiving_version(self.version))
+
+            notes = "\n".join(getattr(ex, "__notes__", []))  # PEP 678
+            msg = f"""!!\n\n
+            *************************************************************************
+            {str(ex)}\n{notes}
+
+            This is a long overdue deprecation.
+            For the time being, `pkg_resources` will use `{self._parsed_version}`
+            as a replacement to avoid breaking existing environments,
+            but no future compatibility is guaranteed.
+
+            If you maintain package {self.project_name} you should implement
+            the relevant changes to adequate the project to PEP 440 immediately.
+            *************************************************************************
+            \n\n!!
+            """
+            warnings.warn(msg, DeprecationWarning)
+
+            return self._parsed_version
+
+    @property
+    def version(self):
+        try:
+            return self._version
+        except AttributeError as e:
+            version = self._get_version()
+            if version is None:
+                path = self._get_metadata_path_for_display(self.PKG_INFO)
+                msg = ("Missing 'Version:' header and/or {} file at path: {}").format(
+                    self.PKG_INFO, path
+                )
+                raise ValueError(msg, self) from e
+
+            return version
+
+    @property
+    def _dep_map(self):
+        """
+        A map of extra to its list of (direct) requirements
+        for this distribution, including the null extra.
+        """
+        try:
+            return self.__dep_map
+        except AttributeError:
+            self.__dep_map = self._filter_extras(self._build_dep_map())
+        return self.__dep_map
+
+    @staticmethod
+    def _filter_extras(dm):
+        """
+        Given a mapping of extras to dependencies, strip off
+        environment markers and filter out any dependencies
+        not matching the markers.
+        """
+        for extra in list(filter(None, dm)):
+            new_extra = extra
+            reqs = dm.pop(extra)
+            new_extra, _, marker = extra.partition(':')
+            fails_marker = marker and (
+                invalid_marker(marker) or not evaluate_marker(marker)
+            )
+            if fails_marker:
+                reqs = []
+            new_extra = safe_extra(new_extra) or None
+
+            dm.setdefault(new_extra, []).extend(reqs)
+        return dm
+
+    def _build_dep_map(self):
+        dm = {}
+        for name in 'requires.txt', 'depends.txt':
+            for extra, reqs in split_sections(self._get_metadata(name)):
+                dm.setdefault(extra, []).extend(parse_requirements(reqs))
+        return dm
+
+    def requires(self, extras=()):
+        """List of Requirements needed for this distro if `extras` are used"""
+        dm = self._dep_map
+        deps = []
+        deps.extend(dm.get(None, ()))
+        for ext in extras:
+            try:
+                deps.extend(dm[safe_extra(ext)])
+            except KeyError as e:
+                raise UnknownExtra(
+                    "%s has no such extra feature %r" % (self, ext)
+                ) from e
+        return deps
+
+    def _get_metadata_path_for_display(self, name):
+        """
+        Return the path to the given metadata file, if available.
+        """
+        try:
+            # We need to access _get_metadata_path() on the provider object
+            # directly rather than through this class's __getattr__()
+            # since _get_metadata_path() is marked private.
+            path = self._provider._get_metadata_path(name)
+
+        # Handle exceptions e.g. in case the distribution's metadata
+        # provider doesn't support _get_metadata_path().
+        except Exception:
+            return '[could not detect]'
+
+        return path
+
+    def _get_metadata(self, name):
+        if self.has_metadata(name):
+            for line in self.get_metadata_lines(name):
+                yield line
+
+    def _get_version(self):
+        lines = self._get_metadata(self.PKG_INFO)
+        version = _version_from_file(lines)
+
+        return version
+
+    def activate(self, path=None, replace=False):
+        """Ensure distribution is importable on `path` (default=sys.path)"""
+        if path is None:
+            path = sys.path
+        self.insert_on(path, replace=replace)
+        if path is sys.path:
+            fixup_namespace_packages(self.location)
+            for pkg in self._get_metadata('namespace_packages.txt'):
+                if pkg in sys.modules:
+                    declare_namespace(pkg)
+
+    def egg_name(self):
+        """Return what this distribution's standard .egg filename should be"""
+        filename = "%s-%s-py%s" % (
+            to_filename(self.project_name),
+            to_filename(self.version),
+            self.py_version or PY_MAJOR,
+        )
+
+        if self.platform:
+            filename += '-' + self.platform
+        return filename
+
+    def __repr__(self):
+        if self.location:
+            return "%s (%s)" % (self, self.location)
+        else:
+            return str(self)
+
+    def __str__(self):
+        try:
+            version = getattr(self, 'version', None)
+        except ValueError:
+            version = None
+        version = version or "[unknown version]"
+        return "%s %s" % (self.project_name, version)
+
+    def __getattr__(self, attr):
+        """Delegate all unrecognized public attributes to .metadata provider"""
+        if attr.startswith('_'):
+            raise AttributeError(attr)
+        return getattr(self._provider, attr)
+
+    def __dir__(self):
+        return list(
+            set(super(Distribution, self).__dir__())
+            | set(attr for attr in self._provider.__dir__() if not attr.startswith('_'))
+        )
+
+    @classmethod
+    def from_filename(cls, filename, metadata=None, **kw):
+        return cls.from_location(
+            _normalize_cached(filename), os.path.basename(filename), metadata, **kw
+        )
+
+    def as_requirement(self):
+        """Return a ``Requirement`` that matches this distribution exactly"""
+        if isinstance(self.parsed_version, packaging.version.Version):
+            spec = "%s==%s" % (self.project_name, self.parsed_version)
+        else:
+            spec = "%s===%s" % (self.project_name, self.parsed_version)
+
+        return Requirement.parse(spec)
+
+    def load_entry_point(self, group, name):
+        """Return the `name` entry point of `group` or raise ImportError"""
+        ep = self.get_entry_info(group, name)
+        if ep is None:
+            raise ImportError("Entry point %r not found" % ((group, name),))
+        return ep.load()
+
+    def get_entry_map(self, group=None):
+        """Return the entry point map for `group`, or the full entry map"""
+        try:
+            ep_map = self._ep_map
+        except AttributeError:
+            ep_map = self._ep_map = EntryPoint.parse_map(
+                self._get_metadata('entry_points.txt'), self
+            )
+        if group is not None:
+            return ep_map.get(group, {})
+        return ep_map
+
+    def get_entry_info(self, group, name):
+        """Return the EntryPoint object for `group`+`name`, or ``None``"""
+        return self.get_entry_map(group).get(name)
+
+    # FIXME: 'Distribution.insert_on' is too complex (13)
+    def insert_on(self, path, loc=None, replace=False):  # noqa: C901
+        """Ensure self.location is on path
+
+        If replace=False (default):
+            - If location is already in path anywhere, do nothing.
+            - Else:
+              - If it's an egg and its parent directory is on path,
+                insert just ahead of the parent.
+              - Else: add to the end of path.
+        If replace=True:
+            - If location is already on path anywhere (not eggs)
+              or higher priority than its parent (eggs)
+              do nothing.
+            - Else:
+              - If it's an egg and its parent directory is on path,
+                insert just ahead of the parent,
+                removing any lower-priority entries.
+              - Else: add it to the front of path.
+        """
+
+        loc = loc or self.location
+        if not loc:
+            return
+
+        nloc = _normalize_cached(loc)
+        bdir = os.path.dirname(nloc)
+        npath = [(p and _normalize_cached(p) or p) for p in path]
+
+        for p, item in enumerate(npath):
+            if item == nloc:
+                if replace:
+                    break
+                else:
+                    # don't modify path (even removing duplicates) if
+                    # found and not replace
+                    return
+            elif item == bdir and self.precedence == EGG_DIST:
+                # if it's an .egg, give it precedence over its directory
+                # UNLESS it's already been added to sys.path and replace=False
+                if (not replace) and nloc in npath[p:]:
+                    return
+                if path is sys.path:
+                    self.check_version_conflict()
+                path.insert(p, loc)
+                npath.insert(p, nloc)
+                break
+        else:
+            if path is sys.path:
+                self.check_version_conflict()
+            if replace:
+                path.insert(0, loc)
+            else:
+                path.append(loc)
+            return
+
+        # p is the spot where we found or inserted loc; now remove duplicates
+        while True:
+            try:
+                np = npath.index(nloc, p + 1)
+            except ValueError:
+                break
+            else:
+                del npath[np], path[np]
+                # ha!
+                p = np
+
+        return
+
+    def check_version_conflict(self):
+        if self.key == 'setuptools':
+            # ignore the inevitable setuptools self-conflicts  :(
+            return
+
+        nsp = dict.fromkeys(self._get_metadata('namespace_packages.txt'))
+        loc = normalize_path(self.location)
+        for modname in self._get_metadata('top_level.txt'):
+            if (
+                modname not in sys.modules
+                or modname in nsp
+                or modname in _namespace_packages
+            ):
+                continue
+            if modname in ('pkg_resources', 'setuptools', 'site'):
+                continue
+            fn = getattr(sys.modules[modname], '__file__', None)
+            if fn and (
+                normalize_path(fn).startswith(loc) or fn.startswith(self.location)
+            ):
+                continue
+            issue_warning(
+                "Module %s was already imported from %s, but %s is being added"
+                " to sys.path" % (modname, fn, self.location),
+            )
+
+    def has_version(self):
+        try:
+            self.version
+        except ValueError:
+            issue_warning("Unbuilt egg for " + repr(self))
+            return False
+        except SystemError:
+            # TODO: remove this except clause when python/cpython#103632 is fixed.
+            return False
+        return True
+
+    def clone(self, **kw):
+        """Copy this distribution, substituting in any changed keyword args"""
+        names = 'project_name version py_version platform location precedence'
+        for attr in names.split():
+            kw.setdefault(attr, getattr(self, attr, None))
+        kw.setdefault('metadata', self._provider)
+        return self.__class__(**kw)
+
+    @property
+    def extras(self):
+        return [dep for dep in self._dep_map if dep]
+
+
+class EggInfoDistribution(Distribution):
+    def _reload_version(self):
+        """
+        Packages installed by distutils (e.g. numpy or scipy),
+        which uses an old safe_version, and so
+        their version numbers can get mangled when
+        converted to filenames (e.g., 1.11.0.dev0+2329eae to
+        1.11.0.dev0_2329eae). These distributions will not be
+        parsed properly
+        downstream by Distribution and safe_version, so
+        take an extra step and try to get the version number from
+        the metadata file itself instead of the filename.
+        """
+        md_version = self._get_version()
+        if md_version:
+            self._version = md_version
+        return self
+
+
+class DistInfoDistribution(Distribution):
+    """
+    Wrap an actual or potential sys.path entry
+    w/metadata, .dist-info style.
+    """
+
+    PKG_INFO = 'METADATA'
+    EQEQ = re.compile(r"([\(,])\s*(\d.*?)\s*([,\)])")
+
+    @property
+    def _parsed_pkg_info(self):
+        """Parse and cache metadata"""
+        try:
+            return self._pkg_info
+        except AttributeError:
+            metadata = self.get_metadata(self.PKG_INFO)
+            self._pkg_info = email.parser.Parser().parsestr(metadata)
+            return self._pkg_info
+
+    @property
+    def _dep_map(self):
+        try:
+            return self.__dep_map
+        except AttributeError:
+            self.__dep_map = self._compute_dependencies()
+            return self.__dep_map
+
+    def _compute_dependencies(self):
+        """Recompute this distribution's dependencies."""
+        dm = self.__dep_map = {None: []}
+
+        reqs = []
+        # Including any condition expressions
+        for req in self._parsed_pkg_info.get_all('Requires-Dist') or []:
+            reqs.extend(parse_requirements(req))
+
+        def reqs_for_extra(extra):
+            for req in reqs:
+                if not req.marker or req.marker.evaluate({'extra': extra}):
+                    yield req
+
+        common = types.MappingProxyType(dict.fromkeys(reqs_for_extra(None)))
+        dm[None].extend(common)
+
+        for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []:
+            s_extra = safe_extra(extra.strip())
+            dm[s_extra] = [r for r in reqs_for_extra(extra) if r not in common]
+
+        return dm
+
+
+_distributionImpl = {
+    '.egg': Distribution,
+    '.egg-info': EggInfoDistribution,
+    '.dist-info': DistInfoDistribution,
+}
+
+
+def issue_warning(*args, **kw):
+    level = 1
+    g = globals()
+    try:
+        # find the first stack frame that is *not* code in
+        # the pkg_resources module, to use for the warning
+        while sys._getframe(level).f_globals is g:
+            level += 1
+    except ValueError:
+        pass
+    warnings.warn(stacklevel=level + 1, *args, **kw)
+
+
+def parse_requirements(strs):
+    """
+    Yield ``Requirement`` objects for each specification in `strs`.
+
+    `strs` must be a string, or a (possibly-nested) iterable thereof.
+    """
+    return map(Requirement, join_continuation(map(drop_comment, yield_lines(strs))))
+
+
+class RequirementParseError(packaging.requirements.InvalidRequirement):
+    "Compatibility wrapper for InvalidRequirement"
+
+
+class Requirement(packaging.requirements.Requirement):
+    def __init__(self, requirement_string):
+        """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!"""
+        super(Requirement, self).__init__(requirement_string)
+        self.unsafe_name = self.name
+        project_name = safe_name(self.name)
+        self.project_name, self.key = project_name, project_name.lower()
+        self.specs = [(spec.operator, spec.version) for spec in self.specifier]
+        self.extras = tuple(map(safe_extra, self.extras))
+        self.hashCmp = (
+            self.key,
+            self.url,
+            self.specifier,
+            frozenset(self.extras),
+            str(self.marker) if self.marker else None,
+        )
+        self.__hash = hash(self.hashCmp)
+
+    def __eq__(self, other):
+        return isinstance(other, Requirement) and self.hashCmp == other.hashCmp
+
+    def __ne__(self, other):
+        return not self == other
+
+    def __contains__(self, item):
+        if isinstance(item, Distribution):
+            if item.key != self.key:
+                return False
+
+            item = item.version
+
+        # Allow prereleases always in order to match the previous behavior of
+        # this method. In the future this should be smarter and follow PEP 440
+        # more accurately.
+        return self.specifier.contains(item, prereleases=True)
+
+    def __hash__(self):
+        return self.__hash
+
+    def __repr__(self):
+        return "Requirement.parse(%r)" % str(self)
+
+    @staticmethod
+    def parse(s):
+        (req,) = parse_requirements(s)
+        return req
+
+
+def _always_object(classes):
+    """
+    Ensure object appears in the mro even
+    for old-style classes.
+    """
+    if object not in classes:
+        return classes + (object,)
+    return classes
+
+
+def _find_adapter(registry, ob):
+    """Return an adapter factory for `ob` from `registry`"""
+    types = _always_object(inspect.getmro(getattr(ob, '__class__', type(ob))))
+    for t in types:
+        if t in registry:
+            return registry[t]
+
+
+def ensure_directory(path):
+    """Ensure that the parent directory of `path` exists"""
+    dirname = os.path.dirname(path)
+    os.makedirs(dirname, exist_ok=True)
+
+
+def _bypass_ensure_directory(path):
+    """Sandbox-bypassing version of ensure_directory()"""
+    if not WRITE_SUPPORT:
+        raise IOError('"os.mkdir" not supported on this platform.')
+    dirname, filename = split(path)
+    if dirname and filename and not isdir(dirname):
+        _bypass_ensure_directory(dirname)
+        try:
+            mkdir(dirname, 0o755)
+        except FileExistsError:
+            pass
+
+
+def split_sections(s):
+    """Split a string or iterable thereof into (section, content) pairs
+
+    Each ``section`` is a stripped version of the section header ("[section]")
+    and each ``content`` is a list of stripped lines excluding blank lines and
+    comment-only lines.  If there are any such lines before the first section
+    header, they're returned in a first ``section`` of ``None``.
+    """
+    section = None
+    content = []
+    for line in yield_lines(s):
+        if line.startswith("["):
+            if line.endswith("]"):
+                if section or content:
+                    yield section, content
+                section = line[1:-1].strip()
+                content = []
+            else:
+                raise ValueError("Invalid section heading", line)
+        else:
+            content.append(line)
+
+    # wrap up last segment
+    yield section, content
+
+
+def _mkstemp(*args, **kw):
+    old_open = os.open
+    try:
+        # temporarily bypass sandboxing
+        os.open = os_open
+        return tempfile.mkstemp(*args, **kw)
+    finally:
+        # and then put it back
+        os.open = old_open
+
+
+# Silence the PEP440Warning by default, so that end users don't get hit by it
+# randomly just because they use pkg_resources. We want to append the rule
+# because we want earlier uses of filterwarnings to take precedence over this
+# one.
+warnings.filterwarnings("ignore", category=PEP440Warning, append=True)
+
+
+# from jaraco.functools 1.3
+def _call_aside(f, *args, **kwargs):
+    f(*args, **kwargs)
+    return f
+
+
+@_call_aside
+def _initialize(g=globals()):
+    "Set up global resource manager (deliberately not state-saved)"
+    manager = ResourceManager()
+    g['_manager'] = manager
+    g.update(
+        (name, getattr(manager, name))
+        for name in dir(manager)
+        if not name.startswith('_')
+    )
+
+
+class PkgResourcesDeprecationWarning(Warning):
+    """
+    Base class for warning about deprecations in ``pkg_resources``
+
+    This class is not derived from ``DeprecationWarning``, and as such is
+    visible by default.
+    """
+
+
+@_call_aside
+def _initialize_master_working_set():
+    """
+    Prepare the master working set and make the ``require()``
+    API available.
+
+    This function has explicit effects on the global state
+    of pkg_resources. It is intended to be invoked once at
+    the initialization of this module.
+
+    Invocation by other packages is unsupported and done
+    at their own risk.
+    """
+    working_set = WorkingSet._build_master()
+    _declare_state('object', working_set=working_set)
+
+    require = working_set.require
+    iter_entry_points = working_set.iter_entry_points
+    add_activation_listener = working_set.subscribe
+    run_script = working_set.run_script
+    # backward compatibility
+    run_main = run_script
+    # Activate all distributions already on sys.path with replace=False and
+    # ensure that all distributions added to the working set in the future
+    # (e.g. by calling ``require()``) will get activated as well,
+    # with higher priority (replace=True).
+    tuple(dist.activate(replace=False) for dist in working_set)
+    add_activation_listener(
+        lambda dist: dist.activate(replace=True),
+        existing=False,
+    )
+    working_set.entries = []
+    # match order
+    list(map(working_set.add_entry, sys.path))
+    globals().update(locals())
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000..98016c4
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py
new file mode 100644
index 0000000..5ebf595
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py
@@ -0,0 +1,566 @@
+"""
+Utilities for determining application-specific dirs. See  for details and
+usage.
+"""
+from __future__ import annotations
+
+import os
+import sys
+from typing import TYPE_CHECKING
+
+from .api import PlatformDirsABC
+from .version import __version__
+from .version import __version_tuple__ as __version_info__
+
+if TYPE_CHECKING:
+    from pathlib import Path
+
+    if sys.version_info >= (3, 8):  # pragma: no cover (py38+)
+        from typing import Literal
+    else:  # pragma: no cover (py38+)
+        from pip._vendor.typing_extensions import Literal
+
+
+def _set_platform_dir_class() -> type[PlatformDirsABC]:
+    if sys.platform == "win32":
+        from pip._vendor.platformdirs.windows import Windows as Result
+    elif sys.platform == "darwin":
+        from pip._vendor.platformdirs.macos import MacOS as Result
+    else:
+        from pip._vendor.platformdirs.unix import Unix as Result
+
+    if os.getenv("ANDROID_DATA") == "/data" and os.getenv("ANDROID_ROOT") == "/system":
+        if os.getenv("SHELL") or os.getenv("PREFIX"):
+            return Result
+
+        from pip._vendor.platformdirs.android import _android_folder
+
+        if _android_folder() is not None:
+            from pip._vendor.platformdirs.android import Android
+
+            return Android  # return to avoid redefinition of result
+
+    return Result
+
+
+PlatformDirs = _set_platform_dir_class()  #: Currently active platform
+AppDirs = PlatformDirs  #: Backwards compatibility with appdirs
+
+
+def user_data_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    roaming: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param roaming: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: data directory tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        roaming=roaming,
+        ensure_exists=ensure_exists,
+    ).user_data_dir
+
+
+def site_data_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    multipath: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param multipath: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: data directory shared by users
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        multipath=multipath,
+        ensure_exists=ensure_exists,
+    ).site_data_dir
+
+
+def user_config_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    roaming: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param roaming: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: config directory tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        roaming=roaming,
+        ensure_exists=ensure_exists,
+    ).user_config_dir
+
+
+def site_config_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    multipath: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param multipath: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: config directory shared by the users
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        multipath=multipath,
+        ensure_exists=ensure_exists,
+    ).site_config_dir
+
+
+def user_cache_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    opinion: bool = True,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param opinion: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: cache directory tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        opinion=opinion,
+        ensure_exists=ensure_exists,
+    ).user_cache_dir
+
+
+def site_cache_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    opinion: bool = True,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param opinion: See `opinion `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: cache directory tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        opinion=opinion,
+        ensure_exists=ensure_exists,
+    ).site_cache_dir
+
+
+def user_state_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    roaming: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param roaming: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: state directory tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        roaming=roaming,
+        ensure_exists=ensure_exists,
+    ).user_state_dir
+
+
+def user_log_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    opinion: bool = True,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param opinion: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: log directory tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        opinion=opinion,
+        ensure_exists=ensure_exists,
+    ).user_log_dir
+
+
+def user_documents_dir() -> str:
+    """:returns: documents directory tied to the user"""
+    return PlatformDirs().user_documents_dir
+
+
+def user_downloads_dir() -> str:
+    """:returns: downloads directory tied to the user"""
+    return PlatformDirs().user_downloads_dir
+
+
+def user_pictures_dir() -> str:
+    """:returns: pictures directory tied to the user"""
+    return PlatformDirs().user_pictures_dir
+
+
+def user_videos_dir() -> str:
+    """:returns: videos directory tied to the user"""
+    return PlatformDirs().user_videos_dir
+
+
+def user_music_dir() -> str:
+    """:returns: music directory tied to the user"""
+    return PlatformDirs().user_music_dir
+
+
+def user_runtime_dir(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    opinion: bool = True,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> str:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param opinion: See `opinion `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: runtime directory tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        opinion=opinion,
+        ensure_exists=ensure_exists,
+    ).user_runtime_dir
+
+
+def user_data_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    roaming: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param roaming: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: data path tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        roaming=roaming,
+        ensure_exists=ensure_exists,
+    ).user_data_path
+
+
+def site_data_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    multipath: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param multipath: See `multipath `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: data path shared by users
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        multipath=multipath,
+        ensure_exists=ensure_exists,
+    ).site_data_path
+
+
+def user_config_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    roaming: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param roaming: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: config path tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        roaming=roaming,
+        ensure_exists=ensure_exists,
+    ).user_config_path
+
+
+def site_config_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    multipath: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param multipath: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: config path shared by the users
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        multipath=multipath,
+        ensure_exists=ensure_exists,
+    ).site_config_path
+
+
+def site_cache_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    opinion: bool = True,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param opinion: See `opinion `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: cache directory tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        opinion=opinion,
+        ensure_exists=ensure_exists,
+    ).site_cache_path
+
+
+def user_cache_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    opinion: bool = True,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param opinion: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: cache path tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        opinion=opinion,
+        ensure_exists=ensure_exists,
+    ).user_cache_path
+
+
+def user_state_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    roaming: bool = False,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param roaming: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: state path tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        roaming=roaming,
+        ensure_exists=ensure_exists,
+    ).user_state_path
+
+
+def user_log_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    opinion: bool = True,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param opinion: See `roaming `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: log path tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        opinion=opinion,
+        ensure_exists=ensure_exists,
+    ).user_log_path
+
+
+def user_documents_path() -> Path:
+    """:returns: documents path tied to the user"""
+    return PlatformDirs().user_documents_path
+
+
+def user_downloads_path() -> Path:
+    """:returns: downloads path tied to the user"""
+    return PlatformDirs().user_downloads_path
+
+
+def user_pictures_path() -> Path:
+    """:returns: pictures path tied to the user"""
+    return PlatformDirs().user_pictures_path
+
+
+def user_videos_path() -> Path:
+    """:returns: videos path tied to the user"""
+    return PlatformDirs().user_videos_path
+
+
+def user_music_path() -> Path:
+    """:returns: music path tied to the user"""
+    return PlatformDirs().user_music_path
+
+
+def user_runtime_path(
+    appname: str | None = None,
+    appauthor: str | None | Literal[False] = None,
+    version: str | None = None,
+    opinion: bool = True,  # noqa: FBT001, FBT002
+    ensure_exists: bool = False,  # noqa: FBT001, FBT002
+) -> Path:
+    """
+    :param appname: See `appname `.
+    :param appauthor: See `appauthor `.
+    :param version: See `version `.
+    :param opinion: See `opinion `.
+    :param ensure_exists: See `ensure_exists `.
+    :returns: runtime path tied to the user
+    """
+    return PlatformDirs(
+        appname=appname,
+        appauthor=appauthor,
+        version=version,
+        opinion=opinion,
+        ensure_exists=ensure_exists,
+    ).user_runtime_path
+
+
+__all__ = [
+    "__version__",
+    "__version_info__",
+    "PlatformDirs",
+    "AppDirs",
+    "PlatformDirsABC",
+    "user_data_dir",
+    "user_config_dir",
+    "user_cache_dir",
+    "user_state_dir",
+    "user_log_dir",
+    "user_documents_dir",
+    "user_downloads_dir",
+    "user_pictures_dir",
+    "user_videos_dir",
+    "user_music_dir",
+    "user_runtime_dir",
+    "site_data_dir",
+    "site_config_dir",
+    "site_cache_dir",
+    "user_data_path",
+    "user_config_path",
+    "user_cache_path",
+    "user_state_path",
+    "user_log_path",
+    "user_documents_path",
+    "user_downloads_path",
+    "user_pictures_path",
+    "user_videos_path",
+    "user_music_path",
+    "user_runtime_path",
+    "site_data_path",
+    "site_config_path",
+    "site_cache_path",
+]
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py
new file mode 100644
index 0000000..6a0d6dd
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py
@@ -0,0 +1,53 @@
+"""Main entry point."""
+from __future__ import annotations
+
+from pip._vendor.platformdirs import PlatformDirs, __version__
+
+PROPS = (
+    "user_data_dir",
+    "user_config_dir",
+    "user_cache_dir",
+    "user_state_dir",
+    "user_log_dir",
+    "user_documents_dir",
+    "user_downloads_dir",
+    "user_pictures_dir",
+    "user_videos_dir",
+    "user_music_dir",
+    "user_runtime_dir",
+    "site_data_dir",
+    "site_config_dir",
+    "site_cache_dir",
+)
+
+
+def main() -> None:
+    """Run main entry point."""
+    app_name = "MyApp"
+    app_author = "MyCompany"
+
+    print(f"-- platformdirs {__version__} --")  # noqa: T201
+
+    print("-- app dirs (with optional 'version')")  # noqa: T201
+    dirs = PlatformDirs(app_name, app_author, version="1.0")
+    for prop in PROPS:
+        print(f"{prop}: {getattr(dirs, prop)}")  # noqa: T201
+
+    print("\n-- app dirs (without optional 'version')")  # noqa: T201
+    dirs = PlatformDirs(app_name, app_author)
+    for prop in PROPS:
+        print(f"{prop}: {getattr(dirs, prop)}")  # noqa: T201
+
+    print("\n-- app dirs (without optional 'appauthor')")  # noqa: T201
+    dirs = PlatformDirs(app_name)
+    for prop in PROPS:
+        print(f"{prop}: {getattr(dirs, prop)}")  # noqa: T201
+
+    print("\n-- app dirs (with disabled 'appauthor')")  # noqa: T201
+    dirs = PlatformDirs(app_name, appauthor=False)
+    for prop in PROPS:
+        print(f"{prop}: {getattr(dirs, prop)}")  # noqa: T201
+
+
+if __name__ == "__main__":
+    main()
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000..20841ff
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc
new file mode 100644
index 0000000..666d3ff
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc
new file mode 100644
index 0000000..eb4662c
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc
new file mode 100644
index 0000000..0a32ee5
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc
new file mode 100644
index 0000000..565e961
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc
new file mode 100644
index 0000000..0620ab7
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc
new file mode 100644
index 0000000..836149f
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc
new file mode 100644
index 0000000..e4423a7
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py
new file mode 100644
index 0000000..76527dd
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py
@@ -0,0 +1,210 @@
+"""Android."""
+from __future__ import annotations
+
+import os
+import re
+import sys
+from functools import lru_cache
+from typing import cast
+
+from .api import PlatformDirsABC
+
+
+class Android(PlatformDirsABC):
+    """
+    Follows the guidance `from here `_. Makes use of the
+    `appname `,
+    `version `,
+    `ensure_exists `.
+    """
+
+    @property
+    def user_data_dir(self) -> str:
+        """:return: data directory tied to the user, e.g. ``/data/user///files/``"""
+        return self._append_app_name_and_version(cast(str, _android_folder()), "files")
+
+    @property
+    def site_data_dir(self) -> str:
+        """:return: data directory shared by users, same as `user_data_dir`"""
+        return self.user_data_dir
+
+    @property
+    def user_config_dir(self) -> str:
+        """
+        :return: config directory tied to the user, e.g. \
+        ``/data/user///shared_prefs/``
+        """
+        return self._append_app_name_and_version(cast(str, _android_folder()), "shared_prefs")
+
+    @property
+    def site_config_dir(self) -> str:
+        """:return: config directory shared by the users, same as `user_config_dir`"""
+        return self.user_config_dir
+
+    @property
+    def user_cache_dir(self) -> str:
+        """:return: cache directory tied to the user, e.g. e.g. ``/data/user///cache/``"""
+        return self._append_app_name_and_version(cast(str, _android_folder()), "cache")
+
+    @property
+    def site_cache_dir(self) -> str:
+        """:return: cache directory shared by users, same as `user_cache_dir`"""
+        return self.user_cache_dir
+
+    @property
+    def user_state_dir(self) -> str:
+        """:return: state directory tied to the user, same as `user_data_dir`"""
+        return self.user_data_dir
+
+    @property
+    def user_log_dir(self) -> str:
+        """
+        :return: log directory tied to the user, same as `user_cache_dir` if not opinionated else ``log`` in it,
+          e.g. ``/data/user///cache//log``
+        """
+        path = self.user_cache_dir
+        if self.opinion:
+            path = os.path.join(path, "log")  # noqa: PTH118
+        return path
+
+    @property
+    def user_documents_dir(self) -> str:
+        """:return: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``"""
+        return _android_documents_folder()
+
+    @property
+    def user_downloads_dir(self) -> str:
+        """:return: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``"""
+        return _android_downloads_folder()
+
+    @property
+    def user_pictures_dir(self) -> str:
+        """:return: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``"""
+        return _android_pictures_folder()
+
+    @property
+    def user_videos_dir(self) -> str:
+        """:return: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``"""
+        return _android_videos_folder()
+
+    @property
+    def user_music_dir(self) -> str:
+        """:return: music directory tied to the user e.g. ``/storage/emulated/0/Music``"""
+        return _android_music_folder()
+
+    @property
+    def user_runtime_dir(self) -> str:
+        """
+        :return: runtime directory tied to the user, same as `user_cache_dir` if not opinionated else ``tmp`` in it,
+          e.g. ``/data/user///cache//tmp``
+        """
+        path = self.user_cache_dir
+        if self.opinion:
+            path = os.path.join(path, "tmp")  # noqa: PTH118
+        return path
+
+
+@lru_cache(maxsize=1)
+def _android_folder() -> str | None:
+    """:return: base folder for the Android OS or None if it cannot be found"""
+    try:
+        # First try to get path to android app via pyjnius
+        from jnius import autoclass
+
+        context = autoclass("android.content.Context")
+        result: str | None = context.getFilesDir().getParentFile().getAbsolutePath()
+    except Exception:  # noqa: BLE001
+        # if fails find an android folder looking path on the sys.path
+        pattern = re.compile(r"/data/(data|user/\d+)/(.+)/files")
+        for path in sys.path:
+            if pattern.match(path):
+                result = path.split("/files")[0]
+                break
+        else:
+            result = None
+    return result
+
+
+@lru_cache(maxsize=1)
+def _android_documents_folder() -> str:
+    """:return: documents folder for the Android OS"""
+    # Get directories with pyjnius
+    try:
+        from jnius import autoclass
+
+        context = autoclass("android.content.Context")
+        environment = autoclass("android.os.Environment")
+        documents_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DOCUMENTS).getAbsolutePath()
+    except Exception:  # noqa: BLE001
+        documents_dir = "/storage/emulated/0/Documents"
+
+    return documents_dir
+
+
+@lru_cache(maxsize=1)
+def _android_downloads_folder() -> str:
+    """:return: downloads folder for the Android OS"""
+    # Get directories with pyjnius
+    try:
+        from jnius import autoclass
+
+        context = autoclass("android.content.Context")
+        environment = autoclass("android.os.Environment")
+        downloads_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DOWNLOADS).getAbsolutePath()
+    except Exception:  # noqa: BLE001
+        downloads_dir = "/storage/emulated/0/Downloads"
+
+    return downloads_dir
+
+
+@lru_cache(maxsize=1)
+def _android_pictures_folder() -> str:
+    """:return: pictures folder for the Android OS"""
+    # Get directories with pyjnius
+    try:
+        from jnius import autoclass
+
+        context = autoclass("android.content.Context")
+        environment = autoclass("android.os.Environment")
+        pictures_dir: str = context.getExternalFilesDir(environment.DIRECTORY_PICTURES).getAbsolutePath()
+    except Exception:  # noqa: BLE001
+        pictures_dir = "/storage/emulated/0/Pictures"
+
+    return pictures_dir
+
+
+@lru_cache(maxsize=1)
+def _android_videos_folder() -> str:
+    """:return: videos folder for the Android OS"""
+    # Get directories with pyjnius
+    try:
+        from jnius import autoclass
+
+        context = autoclass("android.content.Context")
+        environment = autoclass("android.os.Environment")
+        videos_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DCIM).getAbsolutePath()
+    except Exception:  # noqa: BLE001
+        videos_dir = "/storage/emulated/0/DCIM/Camera"
+
+    return videos_dir
+
+
+@lru_cache(maxsize=1)
+def _android_music_folder() -> str:
+    """:return: music folder for the Android OS"""
+    # Get directories with pyjnius
+    try:
+        from jnius import autoclass
+
+        context = autoclass("android.content.Context")
+        environment = autoclass("android.os.Environment")
+        music_dir: str = context.getExternalFilesDir(environment.DIRECTORY_MUSIC).getAbsolutePath()
+    except Exception:  # noqa: BLE001
+        music_dir = "/storage/emulated/0/Music"
+
+    return music_dir
+
+
+__all__ = [
+    "Android",
+]
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py
new file mode 100644
index 0000000..d64ebb9
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py
@@ -0,0 +1,223 @@
+"""Base API."""
+from __future__ import annotations
+
+import os
+from abc import ABC, abstractmethod
+from pathlib import Path
+from typing import TYPE_CHECKING
+
+if TYPE_CHECKING:
+    import sys
+
+    if sys.version_info >= (3, 8):  # pragma: no cover (py38+)
+        from typing import Literal
+    else:  # pragma: no cover (py38+)
+        from pip._vendor.typing_extensions import Literal
+
+
+class PlatformDirsABC(ABC):
+    """Abstract base class for platform directories."""
+
+    def __init__(  # noqa: PLR0913
+        self,
+        appname: str | None = None,
+        appauthor: str | None | Literal[False] = None,
+        version: str | None = None,
+        roaming: bool = False,  # noqa: FBT001, FBT002
+        multipath: bool = False,  # noqa: FBT001, FBT002
+        opinion: bool = True,  # noqa: FBT001, FBT002
+        ensure_exists: bool = False,  # noqa: FBT001, FBT002
+    ) -> None:
+        """
+        Create a new platform directory.
+
+        :param appname: See `appname`.
+        :param appauthor: See `appauthor`.
+        :param version: See `version`.
+        :param roaming: See `roaming`.
+        :param multipath: See `multipath`.
+        :param opinion: See `opinion`.
+        :param ensure_exists: See `ensure_exists`.
+        """
+        self.appname = appname  #: The name of application.
+        self.appauthor = appauthor
+        """
+        The name of the app author or distributing body for this application. Typically, it is the owning company name.
+        Defaults to `appname`. You may pass ``False`` to disable it.
+        """
+        self.version = version
+        """
+        An optional version path element to append to the path. You might want to use this if you want multiple versions
+        of your app to be able to run independently. If used, this would typically be ``.``.
+        """
+        self.roaming = roaming
+        """
+        Whether to use the roaming appdata directory on Windows. That means that for users on a Windows network setup
+        for roaming profiles, this user data will be synced on login (see
+        `here `_).
+        """
+        self.multipath = multipath
+        """
+        An optional parameter only applicable to Unix/Linux which indicates that the entire list of data dirs should be
+        returned. By default, the first item would only be returned.
+        """
+        self.opinion = opinion  #: A flag to indicating to use opinionated values.
+        self.ensure_exists = ensure_exists
+        """
+        Optionally create the directory (and any missing parents) upon access if it does not exist.
+        By default, no directories are created.
+        """
+
+    def _append_app_name_and_version(self, *base: str) -> str:
+        params = list(base[1:])
+        if self.appname:
+            params.append(self.appname)
+            if self.version:
+                params.append(self.version)
+        path = os.path.join(base[0], *params)  # noqa: PTH118
+        self._optionally_create_directory(path)
+        return path
+
+    def _optionally_create_directory(self, path: str) -> None:
+        if self.ensure_exists:
+            Path(path).mkdir(parents=True, exist_ok=True)
+
+    @property
+    @abstractmethod
+    def user_data_dir(self) -> str:
+        """:return: data directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def site_data_dir(self) -> str:
+        """:return: data directory shared by users"""
+
+    @property
+    @abstractmethod
+    def user_config_dir(self) -> str:
+        """:return: config directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def site_config_dir(self) -> str:
+        """:return: config directory shared by the users"""
+
+    @property
+    @abstractmethod
+    def user_cache_dir(self) -> str:
+        """:return: cache directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def site_cache_dir(self) -> str:
+        """:return: cache directory shared by users"""
+
+    @property
+    @abstractmethod
+    def user_state_dir(self) -> str:
+        """:return: state directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def user_log_dir(self) -> str:
+        """:return: log directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def user_documents_dir(self) -> str:
+        """:return: documents directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def user_downloads_dir(self) -> str:
+        """:return: downloads directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def user_pictures_dir(self) -> str:
+        """:return: pictures directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def user_videos_dir(self) -> str:
+        """:return: videos directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def user_music_dir(self) -> str:
+        """:return: music directory tied to the user"""
+
+    @property
+    @abstractmethod
+    def user_runtime_dir(self) -> str:
+        """:return: runtime directory tied to the user"""
+
+    @property
+    def user_data_path(self) -> Path:
+        """:return: data path tied to the user"""
+        return Path(self.user_data_dir)
+
+    @property
+    def site_data_path(self) -> Path:
+        """:return: data path shared by users"""
+        return Path(self.site_data_dir)
+
+    @property
+    def user_config_path(self) -> Path:
+        """:return: config path tied to the user"""
+        return Path(self.user_config_dir)
+
+    @property
+    def site_config_path(self) -> Path:
+        """:return: config path shared by the users"""
+        return Path(self.site_config_dir)
+
+    @property
+    def user_cache_path(self) -> Path:
+        """:return: cache path tied to the user"""
+        return Path(self.user_cache_dir)
+
+    @property
+    def site_cache_path(self) -> Path:
+        """:return: cache path shared by users"""
+        return Path(self.site_cache_dir)
+
+    @property
+    def user_state_path(self) -> Path:
+        """:return: state path tied to the user"""
+        return Path(self.user_state_dir)
+
+    @property
+    def user_log_path(self) -> Path:
+        """:return: log path tied to the user"""
+        return Path(self.user_log_dir)
+
+    @property
+    def user_documents_path(self) -> Path:
+        """:return: documents path tied to the user"""
+        return Path(self.user_documents_dir)
+
+    @property
+    def user_downloads_path(self) -> Path:
+        """:return: downloads path tied to the user"""
+        return Path(self.user_downloads_dir)
+
+    @property
+    def user_pictures_path(self) -> Path:
+        """:return: pictures path tied to the user"""
+        return Path(self.user_pictures_dir)
+
+    @property
+    def user_videos_path(self) -> Path:
+        """:return: videos path tied to the user"""
+        return Path(self.user_videos_dir)
+
+    @property
+    def user_music_path(self) -> Path:
+        """:return: music path tied to the user"""
+        return Path(self.user_music_dir)
+
+    @property
+    def user_runtime_path(self) -> Path:
+        """:return: runtime path tied to the user"""
+        return Path(self.user_runtime_dir)
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py
new file mode 100644
index 0000000..a753e2a
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py
@@ -0,0 +1,91 @@
+"""macOS."""
+from __future__ import annotations
+
+import os.path
+
+from .api import PlatformDirsABC
+
+
+class MacOS(PlatformDirsABC):
+    """
+    Platform directories for the macOS operating system. Follows the guidance from `Apple documentation
+    `_.
+    Makes use of the `appname `,
+    `version `,
+    `ensure_exists `.
+    """
+
+    @property
+    def user_data_dir(self) -> str:
+        """:return: data directory tied to the user, e.g. ``~/Library/Application Support/$appname/$version``"""
+        return self._append_app_name_and_version(os.path.expanduser("~/Library/Application Support"))  # noqa: PTH111
+
+    @property
+    def site_data_dir(self) -> str:
+        """:return: data directory shared by users, e.g. ``/Library/Application Support/$appname/$version``"""
+        return self._append_app_name_and_version("/Library/Application Support")
+
+    @property
+    def user_config_dir(self) -> str:
+        """:return: config directory tied to the user, same as `user_data_dir`"""
+        return self.user_data_dir
+
+    @property
+    def site_config_dir(self) -> str:
+        """:return: config directory shared by the users, same as `site_data_dir`"""
+        return self.site_data_dir
+
+    @property
+    def user_cache_dir(self) -> str:
+        """:return: cache directory tied to the user, e.g. ``~/Library/Caches/$appname/$version``"""
+        return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches"))  # noqa: PTH111
+
+    @property
+    def site_cache_dir(self) -> str:
+        """:return: cache directory shared by users, e.g. ``/Library/Caches/$appname/$version``"""
+        return self._append_app_name_and_version("/Library/Caches")
+
+    @property
+    def user_state_dir(self) -> str:
+        """:return: state directory tied to the user, same as `user_data_dir`"""
+        return self.user_data_dir
+
+    @property
+    def user_log_dir(self) -> str:
+        """:return: log directory tied to the user, e.g. ``~/Library/Logs/$appname/$version``"""
+        return self._append_app_name_and_version(os.path.expanduser("~/Library/Logs"))  # noqa: PTH111
+
+    @property
+    def user_documents_dir(self) -> str:
+        """:return: documents directory tied to the user, e.g. ``~/Documents``"""
+        return os.path.expanduser("~/Documents")  # noqa: PTH111
+
+    @property
+    def user_downloads_dir(self) -> str:
+        """:return: downloads directory tied to the user, e.g. ``~/Downloads``"""
+        return os.path.expanduser("~/Downloads")  # noqa: PTH111
+
+    @property
+    def user_pictures_dir(self) -> str:
+        """:return: pictures directory tied to the user, e.g. ``~/Pictures``"""
+        return os.path.expanduser("~/Pictures")  # noqa: PTH111
+
+    @property
+    def user_videos_dir(self) -> str:
+        """:return: videos directory tied to the user, e.g. ``~/Movies``"""
+        return os.path.expanduser("~/Movies")  # noqa: PTH111
+
+    @property
+    def user_music_dir(self) -> str:
+        """:return: music directory tied to the user, e.g. ``~/Music``"""
+        return os.path.expanduser("~/Music")  # noqa: PTH111
+
+    @property
+    def user_runtime_dir(self) -> str:
+        """:return: runtime directory tied to the user, e.g. ``~/Library/Caches/TemporaryItems/$appname/$version``"""
+        return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches/TemporaryItems"))  # noqa: PTH111
+
+
+__all__ = [
+    "MacOS",
+]
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py
new file mode 100644
index 0000000..468b0ab
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py
@@ -0,0 +1,223 @@
+"""Unix."""
+from __future__ import annotations
+
+import os
+import sys
+from configparser import ConfigParser
+from pathlib import Path
+
+from .api import PlatformDirsABC
+
+if sys.platform == "win32":
+
+    def getuid() -> int:
+        msg = "should only be used on Unix"
+        raise RuntimeError(msg)
+
+else:
+    from os import getuid
+
+
+class Unix(PlatformDirsABC):
+    """
+    On Unix/Linux, we follow the
+    `XDG Basedir Spec `_. The spec allows
+    overriding directories with environment variables. The examples show are the default values, alongside the name of
+    the environment variable that overrides them. Makes use of the
+    `appname `,
+    `version `,
+    `multipath `,
+    `opinion `,
+    `ensure_exists `.
+    """
+
+    @property
+    def user_data_dir(self) -> str:
+        """
+        :return: data directory tied to the user, e.g. ``~/.local/share/$appname/$version`` or
+         ``$XDG_DATA_HOME/$appname/$version``
+        """
+        path = os.environ.get("XDG_DATA_HOME", "")
+        if not path.strip():
+            path = os.path.expanduser("~/.local/share")  # noqa: PTH111
+        return self._append_app_name_and_version(path)
+
+    @property
+    def site_data_dir(self) -> str:
+        """
+        :return: data directories shared by users (if `multipath ` is
+         enabled and ``XDG_DATA_DIR`` is set and a multi path the response is also a multi path separated by the OS
+         path separator), e.g. ``/usr/local/share/$appname/$version`` or ``/usr/share/$appname/$version``
+        """
+        # XDG default for $XDG_DATA_DIRS; only first, if multipath is False
+        path = os.environ.get("XDG_DATA_DIRS", "")
+        if not path.strip():
+            path = f"/usr/local/share{os.pathsep}/usr/share"
+        return self._with_multi_path(path)
+
+    def _with_multi_path(self, path: str) -> str:
+        path_list = path.split(os.pathsep)
+        if not self.multipath:
+            path_list = path_list[0:1]
+        path_list = [self._append_app_name_and_version(os.path.expanduser(p)) for p in path_list]  # noqa: PTH111
+        return os.pathsep.join(path_list)
+
+    @property
+    def user_config_dir(self) -> str:
+        """
+        :return: config directory tied to the user, e.g. ``~/.config/$appname/$version`` or
+         ``$XDG_CONFIG_HOME/$appname/$version``
+        """
+        path = os.environ.get("XDG_CONFIG_HOME", "")
+        if not path.strip():
+            path = os.path.expanduser("~/.config")  # noqa: PTH111
+        return self._append_app_name_and_version(path)
+
+    @property
+    def site_config_dir(self) -> str:
+        """
+        :return: config directories shared by users (if `multipath `
+         is enabled and ``XDG_DATA_DIR`` is set and a multi path the response is also a multi path separated by the OS
+         path separator), e.g. ``/etc/xdg/$appname/$version``
+        """
+        # XDG default for $XDG_CONFIG_DIRS only first, if multipath is False
+        path = os.environ.get("XDG_CONFIG_DIRS", "")
+        if not path.strip():
+            path = "/etc/xdg"
+        return self._with_multi_path(path)
+
+    @property
+    def user_cache_dir(self) -> str:
+        """
+        :return: cache directory tied to the user, e.g. ``~/.cache/$appname/$version`` or
+         ``~/$XDG_CACHE_HOME/$appname/$version``
+        """
+        path = os.environ.get("XDG_CACHE_HOME", "")
+        if not path.strip():
+            path = os.path.expanduser("~/.cache")  # noqa: PTH111
+        return self._append_app_name_and_version(path)
+
+    @property
+    def site_cache_dir(self) -> str:
+        """:return: cache directory shared by users, e.g. ``/var/tmp/$appname/$version``"""
+        return self._append_app_name_and_version("/var/tmp")  # noqa: S108
+
+    @property
+    def user_state_dir(self) -> str:
+        """
+        :return: state directory tied to the user, e.g. ``~/.local/state/$appname/$version`` or
+         ``$XDG_STATE_HOME/$appname/$version``
+        """
+        path = os.environ.get("XDG_STATE_HOME", "")
+        if not path.strip():
+            path = os.path.expanduser("~/.local/state")  # noqa: PTH111
+        return self._append_app_name_and_version(path)
+
+    @property
+    def user_log_dir(self) -> str:
+        """:return: log directory tied to the user, same as `user_state_dir` if not opinionated else ``log`` in it"""
+        path = self.user_state_dir
+        if self.opinion:
+            path = os.path.join(path, "log")  # noqa: PTH118
+        return path
+
+    @property
+    def user_documents_dir(self) -> str:
+        """:return: documents directory tied to the user, e.g. ``~/Documents``"""
+        return _get_user_media_dir("XDG_DOCUMENTS_DIR", "~/Documents")
+
+    @property
+    def user_downloads_dir(self) -> str:
+        """:return: downloads directory tied to the user, e.g. ``~/Downloads``"""
+        return _get_user_media_dir("XDG_DOWNLOAD_DIR", "~/Downloads")
+
+    @property
+    def user_pictures_dir(self) -> str:
+        """:return: pictures directory tied to the user, e.g. ``~/Pictures``"""
+        return _get_user_media_dir("XDG_PICTURES_DIR", "~/Pictures")
+
+    @property
+    def user_videos_dir(self) -> str:
+        """:return: videos directory tied to the user, e.g. ``~/Videos``"""
+        return _get_user_media_dir("XDG_VIDEOS_DIR", "~/Videos")
+
+    @property
+    def user_music_dir(self) -> str:
+        """:return: music directory tied to the user, e.g. ``~/Music``"""
+        return _get_user_media_dir("XDG_MUSIC_DIR", "~/Music")
+
+    @property
+    def user_runtime_dir(self) -> str:
+        """
+        :return: runtime directory tied to the user, e.g. ``/run/user/$(id -u)/$appname/$version`` or
+         ``$XDG_RUNTIME_DIR/$appname/$version``.
+
+         For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/user/$(id -u)/$appname/$version`` if
+         exists, otherwise ``/tmp/runtime-$(id -u)/$appname/$version``, if``$XDG_RUNTIME_DIR``
+         is not set.
+        """
+        path = os.environ.get("XDG_RUNTIME_DIR", "")
+        if not path.strip():
+            if sys.platform.startswith(("freebsd", "openbsd", "netbsd")):
+                path = f"/var/run/user/{getuid()}"
+                if not Path(path).exists():
+                    path = f"/tmp/runtime-{getuid()}"  # noqa: S108
+            else:
+                path = f"/run/user/{getuid()}"
+        return self._append_app_name_and_version(path)
+
+    @property
+    def site_data_path(self) -> Path:
+        """:return: data path shared by users. Only return first item, even if ``multipath`` is set to ``True``"""
+        return self._first_item_as_path_if_multipath(self.site_data_dir)
+
+    @property
+    def site_config_path(self) -> Path:
+        """:return: config path shared by the users. Only return first item, even if ``multipath`` is set to ``True``"""
+        return self._first_item_as_path_if_multipath(self.site_config_dir)
+
+    @property
+    def site_cache_path(self) -> Path:
+        """:return: cache path shared by users. Only return first item, even if ``multipath`` is set to ``True``"""
+        return self._first_item_as_path_if_multipath(self.site_cache_dir)
+
+    def _first_item_as_path_if_multipath(self, directory: str) -> Path:
+        if self.multipath:
+            # If multipath is True, the first path is returned.
+            directory = directory.split(os.pathsep)[0]
+        return Path(directory)
+
+
+def _get_user_media_dir(env_var: str, fallback_tilde_path: str) -> str:
+    media_dir = _get_user_dirs_folder(env_var)
+    if media_dir is None:
+        media_dir = os.environ.get(env_var, "").strip()
+        if not media_dir:
+            media_dir = os.path.expanduser(fallback_tilde_path)  # noqa: PTH111
+
+    return media_dir
+
+
+def _get_user_dirs_folder(key: str) -> str | None:
+    """Return directory from user-dirs.dirs config file. See https://freedesktop.org/wiki/Software/xdg-user-dirs/."""
+    user_dirs_config_path = Path(Unix().user_config_dir) / "user-dirs.dirs"
+    if user_dirs_config_path.exists():
+        parser = ConfigParser()
+
+        with user_dirs_config_path.open() as stream:
+            # Add fake section header, so ConfigParser doesn't complain
+            parser.read_string(f"[top]\n{stream.read()}")
+
+        if key not in parser["top"]:
+            return None
+
+        path = parser["top"][key].strip('"')
+        # Handle relative home paths
+        return path.replace("$HOME", os.path.expanduser("~"))  # noqa: PTH111
+
+    return None
+
+
+__all__ = [
+    "Unix",
+]
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py
new file mode 100644
index 0000000..dc8c44c
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py
@@ -0,0 +1,4 @@
+# file generated by setuptools_scm
+# don't change, don't track in version control
+__version__ = version = '3.8.1'
+__version_tuple__ = version_tuple = (3, 8, 1)
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py
new file mode 100644
index 0000000..b52c9c6
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py
@@ -0,0 +1,255 @@
+"""Windows."""
+from __future__ import annotations
+
+import ctypes
+import os
+import sys
+from functools import lru_cache
+from typing import TYPE_CHECKING
+
+from .api import PlatformDirsABC
+
+if TYPE_CHECKING:
+    from collections.abc import Callable
+
+
+class Windows(PlatformDirsABC):
+    """
+    `MSDN on where to store app data files
+    `_.
+    Makes use of the
+    `appname `,
+    `appauthor `,
+    `version `,
+    `roaming `,
+    `opinion `,
+    `ensure_exists `.
+    """
+
+    @property
+    def user_data_dir(self) -> str:
+        """
+        :return: data directory tied to the user, e.g.
+         ``%USERPROFILE%\\AppData\\Local\\$appauthor\\$appname`` (not roaming) or
+         ``%USERPROFILE%\\AppData\\Roaming\\$appauthor\\$appname`` (roaming)
+        """
+        const = "CSIDL_APPDATA" if self.roaming else "CSIDL_LOCAL_APPDATA"
+        path = os.path.normpath(get_win_folder(const))
+        return self._append_parts(path)
+
+    def _append_parts(self, path: str, *, opinion_value: str | None = None) -> str:
+        params = []
+        if self.appname:
+            if self.appauthor is not False:
+                author = self.appauthor or self.appname
+                params.append(author)
+            params.append(self.appname)
+            if opinion_value is not None and self.opinion:
+                params.append(opinion_value)
+            if self.version:
+                params.append(self.version)
+        path = os.path.join(path, *params)  # noqa: PTH118
+        self._optionally_create_directory(path)
+        return path
+
+    @property
+    def site_data_dir(self) -> str:
+        """:return: data directory shared by users, e.g. ``C:\\ProgramData\\$appauthor\\$appname``"""
+        path = os.path.normpath(get_win_folder("CSIDL_COMMON_APPDATA"))
+        return self._append_parts(path)
+
+    @property
+    def user_config_dir(self) -> str:
+        """:return: config directory tied to the user, same as `user_data_dir`"""
+        return self.user_data_dir
+
+    @property
+    def site_config_dir(self) -> str:
+        """:return: config directory shared by the users, same as `site_data_dir`"""
+        return self.site_data_dir
+
+    @property
+    def user_cache_dir(self) -> str:
+        """
+        :return: cache directory tied to the user (if opinionated with ``Cache`` folder within ``$appname``) e.g.
+         ``%USERPROFILE%\\AppData\\Local\\$appauthor\\$appname\\Cache\\$version``
+        """
+        path = os.path.normpath(get_win_folder("CSIDL_LOCAL_APPDATA"))
+        return self._append_parts(path, opinion_value="Cache")
+
+    @property
+    def site_cache_dir(self) -> str:
+        """:return: cache directory shared by users, e.g. ``C:\\ProgramData\\$appauthor\\$appname\\Cache\\$version``"""
+        path = os.path.normpath(get_win_folder("CSIDL_COMMON_APPDATA"))
+        return self._append_parts(path, opinion_value="Cache")
+
+    @property
+    def user_state_dir(self) -> str:
+        """:return: state directory tied to the user, same as `user_data_dir`"""
+        return self.user_data_dir
+
+    @property
+    def user_log_dir(self) -> str:
+        """:return: log directory tied to the user, same as `user_data_dir` if not opinionated else ``Logs`` in it"""
+        path = self.user_data_dir
+        if self.opinion:
+            path = os.path.join(path, "Logs")  # noqa: PTH118
+            self._optionally_create_directory(path)
+        return path
+
+    @property
+    def user_documents_dir(self) -> str:
+        """:return: documents directory tied to the user e.g. ``%USERPROFILE%\\Documents``"""
+        return os.path.normpath(get_win_folder("CSIDL_PERSONAL"))
+
+    @property
+    def user_downloads_dir(self) -> str:
+        """:return: downloads directory tied to the user e.g. ``%USERPROFILE%\\Downloads``"""
+        return os.path.normpath(get_win_folder("CSIDL_DOWNLOADS"))
+
+    @property
+    def user_pictures_dir(self) -> str:
+        """:return: pictures directory tied to the user e.g. ``%USERPROFILE%\\Pictures``"""
+        return os.path.normpath(get_win_folder("CSIDL_MYPICTURES"))
+
+    @property
+    def user_videos_dir(self) -> str:
+        """:return: videos directory tied to the user e.g. ``%USERPROFILE%\\Videos``"""
+        return os.path.normpath(get_win_folder("CSIDL_MYVIDEO"))
+
+    @property
+    def user_music_dir(self) -> str:
+        """:return: music directory tied to the user e.g. ``%USERPROFILE%\\Music``"""
+        return os.path.normpath(get_win_folder("CSIDL_MYMUSIC"))
+
+    @property
+    def user_runtime_dir(self) -> str:
+        """
+        :return: runtime directory tied to the user, e.g.
+         ``%USERPROFILE%\\AppData\\Local\\Temp\\$appauthor\\$appname``
+        """
+        path = os.path.normpath(os.path.join(get_win_folder("CSIDL_LOCAL_APPDATA"), "Temp"))  # noqa: PTH118
+        return self._append_parts(path)
+
+
+def get_win_folder_from_env_vars(csidl_name: str) -> str:
+    """Get folder from environment variables."""
+    result = get_win_folder_if_csidl_name_not_env_var(csidl_name)
+    if result is not None:
+        return result
+
+    env_var_name = {
+        "CSIDL_APPDATA": "APPDATA",
+        "CSIDL_COMMON_APPDATA": "ALLUSERSPROFILE",
+        "CSIDL_LOCAL_APPDATA": "LOCALAPPDATA",
+    }.get(csidl_name)
+    if env_var_name is None:
+        msg = f"Unknown CSIDL name: {csidl_name}"
+        raise ValueError(msg)
+    result = os.environ.get(env_var_name)
+    if result is None:
+        msg = f"Unset environment variable: {env_var_name}"
+        raise ValueError(msg)
+    return result
+
+
+def get_win_folder_if_csidl_name_not_env_var(csidl_name: str) -> str | None:
+    """Get folder for a CSIDL name that does not exist as an environment variable."""
+    if csidl_name == "CSIDL_PERSONAL":
+        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Documents")  # noqa: PTH118
+
+    if csidl_name == "CSIDL_DOWNLOADS":
+        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Downloads")  # noqa: PTH118
+
+    if csidl_name == "CSIDL_MYPICTURES":
+        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Pictures")  # noqa: PTH118
+
+    if csidl_name == "CSIDL_MYVIDEO":
+        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Videos")  # noqa: PTH118
+
+    if csidl_name == "CSIDL_MYMUSIC":
+        return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Music")  # noqa: PTH118
+    return None
+
+
+def get_win_folder_from_registry(csidl_name: str) -> str:
+    """
+    Get folder from the registry.
+
+    This is a fallback technique at best. I'm not sure if using the registry for these guarantees us the correct answer
+    for all CSIDL_* names.
+    """
+    shell_folder_name = {
+        "CSIDL_APPDATA": "AppData",
+        "CSIDL_COMMON_APPDATA": "Common AppData",
+        "CSIDL_LOCAL_APPDATA": "Local AppData",
+        "CSIDL_PERSONAL": "Personal",
+        "CSIDL_DOWNLOADS": "{374DE290-123F-4565-9164-39C4925E467B}",
+        "CSIDL_MYPICTURES": "My Pictures",
+        "CSIDL_MYVIDEO": "My Video",
+        "CSIDL_MYMUSIC": "My Music",
+    }.get(csidl_name)
+    if shell_folder_name is None:
+        msg = f"Unknown CSIDL name: {csidl_name}"
+        raise ValueError(msg)
+    if sys.platform != "win32":  # only needed for mypy type checker to know that this code runs only on Windows
+        raise NotImplementedError
+    import winreg
+
+    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
+    directory, _ = winreg.QueryValueEx(key, shell_folder_name)
+    return str(directory)
+
+
+def get_win_folder_via_ctypes(csidl_name: str) -> str:
+    """Get folder with ctypes."""
+    # There is no 'CSIDL_DOWNLOADS'.
+    # Use 'CSIDL_PROFILE' (40) and append the default folder 'Downloads' instead.
+    # https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid
+
+    csidl_const = {
+        "CSIDL_APPDATA": 26,
+        "CSIDL_COMMON_APPDATA": 35,
+        "CSIDL_LOCAL_APPDATA": 28,
+        "CSIDL_PERSONAL": 5,
+        "CSIDL_MYPICTURES": 39,
+        "CSIDL_MYVIDEO": 14,
+        "CSIDL_MYMUSIC": 13,
+        "CSIDL_DOWNLOADS": 40,
+    }.get(csidl_name)
+    if csidl_const is None:
+        msg = f"Unknown CSIDL name: {csidl_name}"
+        raise ValueError(msg)
+
+    buf = ctypes.create_unicode_buffer(1024)
+    windll = getattr(ctypes, "windll")  # noqa: B009 # using getattr to avoid false positive with mypy type checker
+    windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf)
+
+    # Downgrade to short path name if it has highbit chars.
+    if any(ord(c) > 255 for c in buf):  # noqa: PLR2004
+        buf2 = ctypes.create_unicode_buffer(1024)
+        if windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024):
+            buf = buf2
+
+    if csidl_name == "CSIDL_DOWNLOADS":
+        return os.path.join(buf.value, "Downloads")  # noqa: PTH118
+
+    return buf.value
+
+
+def _pick_get_win_folder() -> Callable[[str], str]:
+    if hasattr(ctypes, "windll"):
+        return get_win_folder_via_ctypes
+    try:
+        import winreg  # noqa: F401
+    except ImportError:
+        return get_win_folder_from_env_vars
+    else:
+        return get_win_folder_from_registry
+
+
+get_win_folder = lru_cache(maxsize=None)(_pick_get_win_folder())
+
+__all__ = [
+    "Windows",
+]
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py
new file mode 100644
index 0000000..39c84aa
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py
@@ -0,0 +1,82 @@
+"""
+    Pygments
+    ~~~~~~~~
+
+    Pygments is a syntax highlighting package written in Python.
+
+    It is a generic syntax highlighter for general use in all kinds of software
+    such as forum systems, wikis or other applications that need to prettify
+    source code. Highlights are:
+
+    * a wide range of common languages and markup formats is supported
+    * special attention is paid to details, increasing quality by a fair amount
+    * support for new languages and formats are added easily
+    * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image
+      formats that PIL supports, and ANSI sequences
+    * it is usable as a command-line tool and as a library
+    * ... and it highlights even Brainfuck!
+
+    The `Pygments master branch`_ is installable with ``easy_install Pygments==dev``.
+
+    .. _Pygments master branch:
+       https://github.com/pygments/pygments/archive/master.zip#egg=Pygments-dev
+
+    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+    :license: BSD, see LICENSE for details.
+"""
+from io import StringIO, BytesIO
+
+__version__ = '2.15.1'
+__docformat__ = 'restructuredtext'
+
+__all__ = ['lex', 'format', 'highlight']
+
+
+def lex(code, lexer):
+    """
+    Lex `code` with the `lexer` (must be a `Lexer` instance)
+    and return an iterable of tokens. Currently, this only calls
+    `lexer.get_tokens()`.
+    """
+    try:
+        return lexer.get_tokens(code)
+    except TypeError:
+        # Heuristic to catch a common mistake.
+        from pip._vendor.pygments.lexer import RegexLexer
+        if isinstance(lexer, type) and issubclass(lexer, RegexLexer):
+            raise TypeError('lex() argument must be a lexer instance, '
+                            'not a class')
+        raise
+
+
+def format(tokens, formatter, outfile=None):  # pylint: disable=redefined-builtin
+    """
+    Format ``tokens`` (an iterable of tokens) with the formatter ``formatter``
+    (a `Formatter` instance).
+
+    If ``outfile`` is given and a valid file object (an object with a
+    ``write`` method), the result will be written to it, otherwise it
+    is returned as a string.
+    """
+    try:
+        if not outfile:
+            realoutfile = getattr(formatter, 'encoding', None) and BytesIO() or StringIO()
+            formatter.format(tokens, realoutfile)
+            return realoutfile.getvalue()
+        else:
+            formatter.format(tokens, outfile)
+    except TypeError:
+        # Heuristic to catch a common mistake.
+        from pip._vendor.pygments.formatter import Formatter
+        if isinstance(formatter, type) and issubclass(formatter, Formatter):
+            raise TypeError('format() argument must be a formatter instance, '
+                            'not a class')
+        raise
+
+
+def highlight(code, lexer, formatter, outfile=None):
+    """
+    This is the most high-level highlighting function. It combines `lex` and
+    `format` in one function.
+    """
+    return format(lex(code, lexer), formatter, outfile)
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py
new file mode 100644
index 0000000..2f7f8cb
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py
@@ -0,0 +1,17 @@
+"""
+    pygments.__main__
+    ~~~~~~~~~~~~~~~~~
+
+    Main entry point for ``python -m pygments``.
+
+    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+    :license: BSD, see LICENSE for details.
+"""
+
+import sys
+from pip._vendor.pygments.cmdline import main
+
+try:
+    sys.exit(main(sys.argv))
+except KeyboardInterrupt:
+    sys.exit(1)
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000..85cf2c1
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc
new file mode 100644
index 0000000..3d43649
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc
new file mode 100644
index 0000000..3402df9
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc
new file mode 100644
index 0000000..25affd5
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc
new file mode 100644
index 0000000..5bd02c1
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc
new file mode 100644
index 0000000..22b2316
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc
new file mode 100644
index 0000000..37af4f5
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc
new file mode 100644
index 0000000..88f6c55
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc
new file mode 100644
index 0000000..a5b568e
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc
new file mode 100644
index 0000000..58d097f
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc
new file mode 100644
index 0000000..856a019
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc
new file mode 100644
index 0000000..6fd91b0
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc
new file mode 100644
index 0000000..dfdde3a
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc
new file mode 100644
index 0000000..f285a84
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc
new file mode 100644
index 0000000..da4a433
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc
new file mode 100644
index 0000000..45fbafb
Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc differ
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py
new file mode 100644
index 0000000..eec1775
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py
@@ -0,0 +1,668 @@
+"""
+    pygments.cmdline
+    ~~~~~~~~~~~~~~~~
+
+    Command line interface.
+
+    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+    :license: BSD, see LICENSE for details.
+"""
+
+import os
+import sys
+import shutil
+import argparse
+from textwrap import dedent
+
+from pip._vendor.pygments import __version__, highlight
+from pip._vendor.pygments.util import ClassNotFound, OptionError, docstring_headline, \
+    guess_decode, guess_decode_from_terminal, terminal_encoding, \
+    UnclosingTextIOWrapper
+from pip._vendor.pygments.lexers import get_all_lexers, get_lexer_by_name, guess_lexer, \
+    load_lexer_from_file, get_lexer_for_filename, find_lexer_class_for_filename
+from pip._vendor.pygments.lexers.special import TextLexer
+from pip._vendor.pygments.formatters.latex import LatexEmbeddedLexer, LatexFormatter
+from pip._vendor.pygments.formatters import get_all_formatters, get_formatter_by_name, \
+    load_formatter_from_file, get_formatter_for_filename, find_formatter_class
+from pip._vendor.pygments.formatters.terminal import TerminalFormatter
+from pip._vendor.pygments.formatters.terminal256 import Terminal256Formatter, TerminalTrueColorFormatter
+from pip._vendor.pygments.filters import get_all_filters, find_filter_class
+from pip._vendor.pygments.styles import get_all_styles, get_style_by_name
+
+
+def _parse_options(o_strs):
+    opts = {}
+    if not o_strs:
+        return opts
+    for o_str in o_strs:
+        if not o_str.strip():
+            continue
+        o_args = o_str.split(',')
+        for o_arg in o_args:
+            o_arg = o_arg.strip()
+            try:
+                o_key, o_val = o_arg.split('=', 1)
+                o_key = o_key.strip()
+                o_val = o_val.strip()
+            except ValueError:
+                opts[o_arg] = True
+            else:
+                opts[o_key] = o_val
+    return opts
+
+
+def _parse_filters(f_strs):
+    filters = []
+    if not f_strs:
+        return filters
+    for f_str in f_strs:
+        if ':' in f_str:
+            fname, fopts = f_str.split(':', 1)
+            filters.append((fname, _parse_options([fopts])))
+        else:
+            filters.append((f_str, {}))
+    return filters
+
+
+def _print_help(what, name):
+    try:
+        if what == 'lexer':
+            cls = get_lexer_by_name(name)
+            print("Help on the %s lexer:" % cls.name)
+            print(dedent(cls.__doc__))
+        elif what == 'formatter':
+            cls = find_formatter_class(name)
+            print("Help on the %s formatter:" % cls.name)
+            print(dedent(cls.__doc__))
+        elif what == 'filter':
+            cls = find_filter_class(name)
+            print("Help on the %s filter:" % name)
+            print(dedent(cls.__doc__))
+        return 0
+    except (AttributeError, ValueError):
+        print("%s not found!" % what, file=sys.stderr)
+        return 1
+
+
+def _print_list(what):
+    if what == 'lexer':
+        print()
+        print("Lexers:")
+        print("~~~~~~~")
+
+        info = []
+        for fullname, names, exts, _ in get_all_lexers():
+            tup = (', '.join(names)+':', fullname,
+                   exts and '(filenames ' + ', '.join(exts) + ')' or '')
+            info.append(tup)
+        info.sort()
+        for i in info:
+            print(('* %s\n    %s %s') % i)
+
+    elif what == 'formatter':
+        print()
+        print("Formatters:")
+        print("~~~~~~~~~~~")
+
+        info = []
+        for cls in get_all_formatters():
+            doc = docstring_headline(cls)
+            tup = (', '.join(cls.aliases) + ':', doc, cls.filenames and
+                   '(filenames ' + ', '.join(cls.filenames) + ')' or '')
+            info.append(tup)
+        info.sort()
+        for i in info:
+            print(('* %s\n    %s %s') % i)
+
+    elif what == 'filter':
+        print()
+        print("Filters:")
+        print("~~~~~~~~")
+
+        for name in get_all_filters():
+            cls = find_filter_class(name)
+            print("* " + name + ':')
+            print("    %s" % docstring_headline(cls))
+
+    elif what == 'style':
+        print()
+        print("Styles:")
+        print("~~~~~~~")
+
+        for name in get_all_styles():
+            cls = get_style_by_name(name)
+            print("* " + name + ':')
+            print("    %s" % docstring_headline(cls))
+
+
+def _print_list_as_json(requested_items):
+    import json
+    result = {}
+    if 'lexer' in requested_items:
+        info = {}
+        for fullname, names, filenames, mimetypes in get_all_lexers():
+            info[fullname] = {
+                'aliases': names,
+                'filenames': filenames,
+                'mimetypes': mimetypes
+            }
+        result['lexers'] = info
+
+    if 'formatter' in requested_items:
+        info = {}
+        for cls in get_all_formatters():
+            doc = docstring_headline(cls)
+            info[cls.name] = {
+                'aliases': cls.aliases,
+                'filenames': cls.filenames,
+                'doc': doc
+            }
+        result['formatters'] = info
+
+    if 'filter' in requested_items:
+        info = {}
+        for name in get_all_filters():
+            cls = find_filter_class(name)
+            info[name] = {
+                'doc': docstring_headline(cls)
+            }
+        result['filters'] = info
+
+    if 'style' in requested_items:
+        info = {}
+        for name in get_all_styles():
+            cls = get_style_by_name(name)
+            info[name] = {
+                'doc': docstring_headline(cls)
+            }
+        result['styles'] = info
+
+    json.dump(result, sys.stdout)
+
+def main_inner(parser, argns):
+    if argns.help:
+        parser.print_help()
+        return 0
+
+    if argns.V:
+        print('Pygments version %s, (c) 2006-2023 by Georg Brandl, Matthäus '
+              'Chajdas and contributors.' % __version__)
+        return 0
+
+    def is_only_option(opt):
+        return not any(v for (k, v) in vars(argns).items() if k != opt)
+
+    # handle ``pygmentize -L``
+    if argns.L is not None:
+        arg_set = set()
+        for k, v in vars(argns).items():
+            if v:
+                arg_set.add(k)
+
+        arg_set.discard('L')
+        arg_set.discard('json')
+
+        if arg_set:
+            parser.print_help(sys.stderr)
+            return 2
+
+        # print version
+        if not argns.json:
+            main(['', '-V'])
+        allowed_types = {'lexer', 'formatter', 'filter', 'style'}
+        largs = [arg.rstrip('s') for arg in argns.L]
+        if any(arg not in allowed_types for arg in largs):
+            parser.print_help(sys.stderr)
+            return 0
+        if not largs:
+            largs = allowed_types
+        if not argns.json:
+            for arg in largs:
+                _print_list(arg)
+        else:
+            _print_list_as_json(largs)
+        return 0
+
+    # handle ``pygmentize -H``
+    if argns.H:
+        if not is_only_option('H'):
+            parser.print_help(sys.stderr)
+            return 2
+        what, name = argns.H
+        if what not in ('lexer', 'formatter', 'filter'):
+            parser.print_help(sys.stderr)
+            return 2
+        return _print_help(what, name)
+
+    # parse -O options
+    parsed_opts = _parse_options(argns.O or [])
+
+    # parse -P options
+    for p_opt in argns.P or []:
+        try:
+            name, value = p_opt.split('=', 1)
+        except ValueError:
+            parsed_opts[p_opt] = True
+        else:
+            parsed_opts[name] = value
+
+    # encodings
+    inencoding = parsed_opts.get('inencoding', parsed_opts.get('encoding'))
+    outencoding = parsed_opts.get('outencoding', parsed_opts.get('encoding'))
+
+    # handle ``pygmentize -N``
+    if argns.N:
+        lexer = find_lexer_class_for_filename(argns.N)
+        if lexer is None:
+            lexer = TextLexer
+
+        print(lexer.aliases[0])
+        return 0
+
+    # handle ``pygmentize -C``
+    if argns.C:
+        inp = sys.stdin.buffer.read()
+        try:
+            lexer = guess_lexer(inp, inencoding=inencoding)
+        except ClassNotFound:
+            lexer = TextLexer
+
+        print(lexer.aliases[0])
+        return 0
+
+    # handle ``pygmentize -S``
+    S_opt = argns.S
+    a_opt = argns.a
+    if S_opt is not None:
+        f_opt = argns.f
+        if not f_opt:
+            parser.print_help(sys.stderr)
+            return 2
+        if argns.l or argns.INPUTFILE:
+            parser.print_help(sys.stderr)
+            return 2
+
+        try:
+            parsed_opts['style'] = S_opt
+            fmter = get_formatter_by_name(f_opt, **parsed_opts)
+        except ClassNotFound as err:
+            print(err, file=sys.stderr)
+            return 1
+
+        print(fmter.get_style_defs(a_opt or ''))
+        return 0
+
+    # if no -S is given, -a is not allowed
+    if argns.a is not None:
+        parser.print_help(sys.stderr)
+        return 2
+
+    # parse -F options
+    F_opts = _parse_filters(argns.F or [])
+
+    # -x: allow custom (eXternal) lexers and formatters
+    allow_custom_lexer_formatter = bool(argns.x)
+
+    # select lexer
+    lexer = None
+
+    # given by name?
+    lexername = argns.l
+    if lexername:
+        # custom lexer, located relative to user's cwd
+        if allow_custom_lexer_formatter and '.py' in lexername:
+            try:
+                filename = None
+                name = None
+                if ':' in lexername:
+                    filename, name = lexername.rsplit(':', 1)
+
+                    if '.py' in name:
+                        # This can happen on Windows: If the lexername is
+                        # C:\lexer.py -- return to normal load path in that case
+                        name = None
+
+                if filename and name:
+                    lexer = load_lexer_from_file(filename, name,
+                                                 **parsed_opts)
+                else:
+                    lexer = load_lexer_from_file(lexername, **parsed_opts)
+            except ClassNotFound as err:
+                print('Error:', err, file=sys.stderr)
+                return 1
+        else:
+            try:
+                lexer = get_lexer_by_name(lexername, **parsed_opts)
+            except (OptionError, ClassNotFound) as err:
+                print('Error:', err, file=sys.stderr)
+                return 1
+
+    # read input code
+    code = None
+
+    if argns.INPUTFILE:
+        if argns.s:
+            print('Error: -s option not usable when input file specified',
+                  file=sys.stderr)
+            return 2
+
+        infn = argns.INPUTFILE
+        try:
+            with open(infn, 'rb') as infp:
+                code = infp.read()
+        except Exception as err:
+            print('Error: cannot read infile:', err, file=sys.stderr)
+            return 1
+        if not inencoding:
+            code, inencoding = guess_decode(code)
+
+        # do we have to guess the lexer?
+        if not lexer:
+            try:
+                lexer = get_lexer_for_filename(infn, code, **parsed_opts)
+            except ClassNotFound as err:
+                if argns.g:
+                    try:
+                        lexer = guess_lexer(code, **parsed_opts)
+                    except ClassNotFound:
+                        lexer = TextLexer(**parsed_opts)
+                else:
+                    print('Error:', err, file=sys.stderr)
+                    return 1
+            except OptionError as err:
+                print('Error:', err, file=sys.stderr)
+                return 1
+
+    elif not argns.s:  # treat stdin as full file (-s support is later)
+        # read code from terminal, always in binary mode since we want to
+        # decode ourselves and be tolerant with it
+        code = sys.stdin.buffer.read()  # use .buffer to get a binary stream
+        if not inencoding:
+            code, inencoding = guess_decode_from_terminal(code, sys.stdin)
+            # else the lexer will do the decoding
+        if not lexer:
+            try:
+                lexer = guess_lexer(code, **parsed_opts)
+            except ClassNotFound:
+                lexer = TextLexer(**parsed_opts)
+
+    else:  # -s option needs a lexer with -l
+        if not lexer:
+            print('Error: when using -s a lexer has to be selected with -l',
+                  file=sys.stderr)
+            return 2
+
+    # process filters
+    for fname, fopts in F_opts:
+        try:
+            lexer.add_filter(fname, **fopts)
+        except ClassNotFound as err:
+            print('Error:', err, file=sys.stderr)
+            return 1
+
+    # select formatter
+    outfn = argns.o
+    fmter = argns.f
+    if fmter:
+        # custom formatter, located relative to user's cwd
+        if allow_custom_lexer_formatter and '.py' in fmter:
+            try:
+                filename = None
+                name = None
+                if ':' in fmter:
+                    # Same logic as above for custom lexer
+                    filename, name = fmter.rsplit(':', 1)
+
+                    if '.py' in name:
+                        name = None
+
+                if filename and name:
+                    fmter = load_formatter_from_file(filename, name,
+                                                     **parsed_opts)
+                else:
+                    fmter = load_formatter_from_file(fmter, **parsed_opts)
+            except ClassNotFound as err:
+                print('Error:', err, file=sys.stderr)
+                return 1
+        else:
+            try:
+                fmter = get_formatter_by_name(fmter, **parsed_opts)
+            except (OptionError, ClassNotFound) as err:
+                print('Error:', err, file=sys.stderr)
+                return 1
+
+    if outfn:
+        if not fmter:
+            try:
+                fmter = get_formatter_for_filename(outfn, **parsed_opts)
+            except (OptionError, ClassNotFound) as err:
+                print('Error:', err, file=sys.stderr)
+                return 1
+        try:
+            outfile = open(outfn, 'wb')
+        except Exception as err:
+            print('Error: cannot open outfile:', err, file=sys.stderr)
+            return 1
+    else:
+        if not fmter:
+            if os.environ.get('COLORTERM','') in ('truecolor', '24bit'):
+                fmter = TerminalTrueColorFormatter(**parsed_opts)
+            elif '256' in os.environ.get('TERM', ''):
+                fmter = Terminal256Formatter(**parsed_opts)
+            else:
+                fmter = TerminalFormatter(**parsed_opts)
+        outfile = sys.stdout.buffer
+
+    # determine output encoding if not explicitly selected
+    if not outencoding:
+        if outfn:
+            # output file? use lexer encoding for now (can still be None)
+            fmter.encoding = inencoding
+        else:
+            # else use terminal encoding
+            fmter.encoding = terminal_encoding(sys.stdout)
+
+    # provide coloring under Windows, if possible
+    if not outfn and sys.platform in ('win32', 'cygwin') and \
+       fmter.name in ('Terminal', 'Terminal256'):  # pragma: no cover
+        # unfortunately colorama doesn't support binary streams on Py3
+        outfile = UnclosingTextIOWrapper(outfile, encoding=fmter.encoding)
+        fmter.encoding = None
+        try:
+            import pip._vendor.colorama.initialise as colorama_initialise
+        except ImportError:
+            pass
+        else:
+            outfile = colorama_initialise.wrap_stream(
+                outfile, convert=None, strip=None, autoreset=False, wrap=True)
+
+    # When using the LaTeX formatter and the option `escapeinside` is
+    # specified, we need a special lexer which collects escaped text
+    # before running the chosen language lexer.
+    escapeinside = parsed_opts.get('escapeinside', '')
+    if len(escapeinside) == 2 and isinstance(fmter, LatexFormatter):
+        left = escapeinside[0]
+        right = escapeinside[1]
+        lexer = LatexEmbeddedLexer(left, right, lexer)
+
+    # ... and do it!
+    if not argns.s:
+        # process whole input as per normal...
+        try:
+            highlight(code, lexer, fmter, outfile)
+        finally:
+            if outfn:
+                outfile.close()
+        return 0
+    else:
+        # line by line processing of stdin (eg: for 'tail -f')...
+        try:
+            while 1:
+                line = sys.stdin.buffer.readline()
+                if not line:
+                    break
+                if not inencoding:
+                    line = guess_decode_from_terminal(line, sys.stdin)[0]
+                highlight(line, lexer, fmter, outfile)
+                if hasattr(outfile, 'flush'):
+                    outfile.flush()
+            return 0
+        except KeyboardInterrupt:  # pragma: no cover
+            return 0
+        finally:
+            if outfn:
+                outfile.close()
+
+
+class HelpFormatter(argparse.HelpFormatter):
+    def __init__(self, prog, indent_increment=2, max_help_position=16, width=None):
+        if width is None:
+            try:
+                width = shutil.get_terminal_size().columns - 2
+            except Exception:
+                pass
+        argparse.HelpFormatter.__init__(self, prog, indent_increment,
+                                        max_help_position, width)
+
+
+def main(args=sys.argv):
+    """
+    Main command line entry point.
+    """
+    desc = "Highlight an input file and write the result to an output file."
+    parser = argparse.ArgumentParser(description=desc, add_help=False,
+                                     formatter_class=HelpFormatter)
+
+    operation = parser.add_argument_group('Main operation')
+    lexersel = operation.add_mutually_exclusive_group()
+    lexersel.add_argument(
+        '-l', metavar='LEXER',
+        help='Specify the lexer to use.  (Query names with -L.)  If not '
+        'given and -g is not present, the lexer is guessed from the filename.')
+    lexersel.add_argument(
+        '-g', action='store_true',
+        help='Guess the lexer from the file contents, or pass through '
+        'as plain text if nothing can be guessed.')
+    operation.add_argument(
+        '-F', metavar='FILTER[:options]', action='append',
+        help='Add a filter to the token stream.  (Query names with -L.) '
+        'Filter options are given after a colon if necessary.')
+    operation.add_argument(
+        '-f', metavar='FORMATTER',
+        help='Specify the formatter to use.  (Query names with -L.) '
+        'If not given, the formatter is guessed from the output filename, '
+        'and defaults to the terminal formatter if the output is to the '
+        'terminal or an unknown file extension.')
+    operation.add_argument(
+        '-O', metavar='OPTION=value[,OPTION=value,...]', action='append',
+        help='Give options to the lexer and formatter as a comma-separated '
+        'list of key-value pairs. '
+        'Example: `-O bg=light,python=cool`.')
+    operation.add_argument(
+        '-P', metavar='OPTION=value', action='append',
+        help='Give a single option to the lexer and formatter - with this '
+        'you can pass options whose value contains commas and equal signs. '
+        'Example: `-P "heading=Pygments, the Python highlighter"`.')
+    operation.add_argument(
+        '-o', metavar='OUTPUTFILE',
+        help='Where to write the output.  Defaults to standard output.')
+
+    operation.add_argument(
+        'INPUTFILE', nargs='?',
+        help='Where to read the input.  Defaults to standard input.')
+
+    flags = parser.add_argument_group('Operation flags')
+    flags.add_argument(
+        '-v', action='store_true',
+        help='Print a detailed traceback on unhandled exceptions, which '
+        'is useful for debugging and bug reports.')
+    flags.add_argument(
+        '-s', action='store_true',
+        help='Process lines one at a time until EOF, rather than waiting to '
+        'process the entire file.  This only works for stdin, only for lexers '
+        'with no line-spanning constructs, and is intended for streaming '
+        'input such as you get from `tail -f`. '
+        'Example usage: `tail -f sql.log | pygmentize -s -l sql`.')
+    flags.add_argument(
+        '-x', action='store_true',
+        help='Allow custom lexers and formatters to be loaded from a .py file '
+        'relative to the current working directory. For example, '
+        '`-l ./customlexer.py -x`. By default, this option expects a file '
+        'with a class named CustomLexer or CustomFormatter; you can also '
+        'specify your own class name with a colon (`-l ./lexer.py:MyLexer`). '
+        'Users should be very careful not to use this option with untrusted '
+        'files, because it will import and run them.')
+    flags.add_argument('--json', help='Output as JSON. This can '
+        'be only used in conjunction with -L.',
+        default=False,
+        action='store_true')
+
+    special_modes_group = parser.add_argument_group(
+        'Special modes - do not do any highlighting')
+    special_modes = special_modes_group.add_mutually_exclusive_group()
+    special_modes.add_argument(
+        '-S', metavar='STYLE -f formatter',
+        help='Print style definitions for STYLE for a formatter '
+        'given with -f. The argument given by -a is formatter '
+        'dependent.')
+    special_modes.add_argument(
+        '-L', nargs='*', metavar='WHAT',
+        help='List lexers, formatters, styles or filters -- '
+        'give additional arguments for the thing(s) you want to list '
+        '(e.g. "styles"), or omit them to list everything.')
+    special_modes.add_argument(
+        '-N', metavar='FILENAME',
+        help='Guess and print out a lexer name based solely on the given '
+        'filename. Does not take input or highlight anything. If no specific '
+        'lexer can be determined, "text" is printed.')
+    special_modes.add_argument(
+        '-C', action='store_true',
+        help='Like -N, but print out a lexer name based solely on '
+        'a given content from standard input.')
+    special_modes.add_argument(
+        '-H', action='store', nargs=2, metavar=('NAME', 'TYPE'),
+        help='Print detailed help for the object  of type , '
+        'where  is one of "lexer", "formatter" or "filter".')
+    special_modes.add_argument(
+        '-V', action='store_true',
+        help='Print the package version.')
+    special_modes.add_argument(
+        '-h', '--help', action='store_true',
+        help='Print this help.')
+    special_modes_group.add_argument(
+        '-a', metavar='ARG',
+        help='Formatter-specific additional argument for the -S (print '
+        'style sheet) mode.')
+
+    argns = parser.parse_args(args[1:])
+
+    try:
+        return main_inner(parser, argns)
+    except BrokenPipeError:
+        # someone closed our stdout, e.g. by quitting a pager.
+        return 0
+    except Exception:
+        if argns.v:
+            print(file=sys.stderr)
+            print('*' * 65, file=sys.stderr)
+            print('An unhandled exception occurred while highlighting.',
+                  file=sys.stderr)
+            print('Please report the whole traceback to the issue tracker at',
+                  file=sys.stderr)
+            print('.',
+                  file=sys.stderr)
+            print('*' * 65, file=sys.stderr)
+            print(file=sys.stderr)
+            raise
+        import traceback
+        info = traceback.format_exception(*sys.exc_info())
+        msg = info[-1].strip()
+        if len(info) >= 3:
+            # extract relevant file and position info
+            msg += '\n   (f%s)' % info[-2].split('\n')[0].strip()[1:]
+        print(file=sys.stderr)
+        print('*** Error while highlighting:', file=sys.stderr)
+        print(msg, file=sys.stderr)
+        print('*** If this is a bug you want to report, please rerun with -v.',
+              file=sys.stderr)
+        return 1
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/console.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/console.py
new file mode 100644
index 0000000..deb4937
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/console.py
@@ -0,0 +1,70 @@
+"""
+    pygments.console
+    ~~~~~~~~~~~~~~~~
+
+    Format colored console output.
+
+    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+    :license: BSD, see LICENSE for details.
+"""
+
+esc = "\x1b["
+
+codes = {}
+codes[""] = ""
+codes["reset"] = esc + "39;49;00m"
+
+codes["bold"] = esc + "01m"
+codes["faint"] = esc + "02m"
+codes["standout"] = esc + "03m"
+codes["underline"] = esc + "04m"
+codes["blink"] = esc + "05m"
+codes["overline"] = esc + "06m"
+
+dark_colors = ["black", "red", "green", "yellow", "blue",
+               "magenta", "cyan", "gray"]
+light_colors = ["brightblack", "brightred", "brightgreen", "brightyellow", "brightblue",
+                "brightmagenta", "brightcyan", "white"]
+
+x = 30
+for d, l in zip(dark_colors, light_colors):
+    codes[d] = esc + "%im" % x
+    codes[l] = esc + "%im" % (60 + x)
+    x += 1
+
+del d, l, x
+
+codes["white"] = codes["bold"]
+
+
+def reset_color():
+    return codes["reset"]
+
+
+def colorize(color_key, text):
+    return codes[color_key] + text + codes["reset"]
+
+
+def ansiformat(attr, text):
+    """
+    Format ``text`` with a color and/or some attributes::
+
+        color       normal color
+        *color*     bold color
+        _color_     underlined color
+        +color+     blinking color
+    """
+    result = []
+    if attr[:1] == attr[-1:] == '+':
+        result.append(codes['blink'])
+        attr = attr[1:-1]
+    if attr[:1] == attr[-1:] == '*':
+        result.append(codes['bold'])
+        attr = attr[1:-1]
+    if attr[:1] == attr[-1:] == '_':
+        result.append(codes['underline'])
+        attr = attr[1:-1]
+    result.append(codes[attr])
+    result.append(text)
+    result.append(codes['reset'])
+    return ''.join(result)
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py
new file mode 100644
index 0000000..dafa08d
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py
@@ -0,0 +1,71 @@
+"""
+    pygments.filter
+    ~~~~~~~~~~~~~~~
+
+    Module that implements the default filter.
+
+    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+    :license: BSD, see LICENSE for details.
+"""
+
+
+def apply_filters(stream, filters, lexer=None):
+    """
+    Use this method to apply an iterable of filters to
+    a stream. If lexer is given it's forwarded to the
+    filter, otherwise the filter receives `None`.
+    """
+    def _apply(filter_, stream):
+        yield from filter_.filter(lexer, stream)
+    for filter_ in filters:
+        stream = _apply(filter_, stream)
+    return stream
+
+
+def simplefilter(f):
+    """
+    Decorator that converts a function into a filter::
+
+        @simplefilter
+        def lowercase(self, lexer, stream, options):
+            for ttype, value in stream:
+                yield ttype, value.lower()
+    """
+    return type(f.__name__, (FunctionFilter,), {
+        '__module__': getattr(f, '__module__'),
+        '__doc__': f.__doc__,
+        'function': f,
+    })
+
+
+class Filter:
+    """
+    Default filter. Subclass this class or use the `simplefilter`
+    decorator to create own filters.
+    """
+
+    def __init__(self, **options):
+        self.options = options
+
+    def filter(self, lexer, stream):
+        raise NotImplementedError()
+
+
+class FunctionFilter(Filter):
+    """
+    Abstract class used by `simplefilter` to create simple
+    function filters on the fly. The `simplefilter` decorator
+    automatically creates subclasses of this class for
+    functions passed to it.
+    """
+    function = None
+
+    def __init__(self, **options):
+        if not hasattr(self, 'function'):
+            raise TypeError('%r used without bound function' %
+                            self.__class__.__name__)
+        Filter.__init__(self, **options)
+
+    def filter(self, lexer, stream):
+        # pylint: disable=not-callable
+        yield from self.function(lexer, stream, self.options)
diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py
new file mode 100644
index 0000000..5aa9ecb
--- /dev/null
+++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py
@@ -0,0 +1,940 @@
+"""
+    pygments.filters
+    ~~~~~~~~~~~~~~~~
+
+    Module containing filter lookup functions and default
+    filters.
+
+    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+    :license: BSD, see LICENSE for details.
+"""
+
+import re
+
+from pip._vendor.pygments.token import String, Comment, Keyword, Name, Error, Whitespace, \
+    string_to_tokentype
+from pip._vendor.pygments.filter import Filter
+from pip._vendor.pygments.util import get_list_opt, get_int_opt, get_bool_opt, \
+    get_choice_opt, ClassNotFound, OptionError
+from pip._vendor.pygments.plugin import find_plugin_filters
+
+
+def find_filter_class(filtername):
+    """Lookup a filter by name. Return None if not found."""
+    if filtername in FILTERS:
+        return FILTERS[filtername]
+    for name, cls in find_plugin_filters():
+        if name == filtername:
+            return cls
+    return None
+
+
+def get_filter_by_name(filtername, **options):
+    """Return an instantiated filter.
+
+    Options are passed to the filter initializer if wanted.
+    Raise a ClassNotFound if not found.
+    """
+    cls = find_filter_class(filtername)
+    if cls:
+        return cls(**options)
+    else:
+        raise ClassNotFound('filter %r not found' % filtername)
+
+
+def get_all_filters():
+    """Return a generator of all filter names."""
+    yield from FILTERS
+    for name, _ in find_plugin_filters():
+        yield name
+
+
+def _replace_special(ttype, value, regex, specialttype,
+                     replacefunc=lambda x: x):
+    last = 0
+    for match in regex.finditer(value):
+        start, end = match.start(), match.end()
+        if start != last:
+            yield ttype, value[last:start]
+        yield specialttype, replacefunc(value[start:end])
+        last = end
+    if last != len(value):
+        yield ttype, value[last:]
+
+
+class CodeTagFilter(Filter):
+    """Highlight special code tags in comments and docstrings.
+
+    Options accepted:
+
+    `codetags` : list of strings
+       A list of strings that are flagged as code tags.  The default is to
+       highlight ``XXX``, ``TODO``, ``FIXME``, ``BUG`` and ``NOTE``.
+
+    .. versionchanged:: 2.13
+       Now recognizes ``FIXME`` by default.
+    """
+
+    def __init__(self, **options):
+        Filter.__init__(self, **options)
+        tags = get_list_opt(options, 'codetags',
+                            ['XXX', 'TODO', 'FIXME', 'BUG', 'NOTE'])
+        self.tag_re = re.compile(r'\b(%s)\b' % '|'.join([
+            re.escape(tag) for tag in tags if tag
+        ]))
+
+    def filter(self, lexer, stream):
+        regex = self.tag_re
+        for ttype, value in stream:
+            if ttype in String.Doc or \
+               ttype in Comment and \
+               ttype not in Comment.Preproc:
+                yield from _replace_special(ttype, value, regex, Comment.Special)
+            else:
+                yield ttype, value
+
+
+class SymbolFilter(Filter):
+    """Convert mathematical symbols such as \\ in Isabelle
+    or \\longrightarrow in LaTeX into Unicode characters.
+
+    This is mostly useful for HTML or console output when you want to
+    approximate the source rendering you'd see in an IDE.
+
+    Options accepted:
+
+    `lang` : string
+       The symbol language. Must be one of ``'isabelle'`` or
+       ``'latex'``.  The default is ``'isabelle'``.
+    """
+
+    latex_symbols = {
+        '\\alpha'                : '\U000003b1',
+        '\\beta'                 : '\U000003b2',
+        '\\gamma'                : '\U000003b3',
+        '\\delta'                : '\U000003b4',
+        '\\varepsilon'           : '\U000003b5',
+        '\\zeta'                 : '\U000003b6',
+        '\\eta'                  : '\U000003b7',
+        '\\vartheta'             : '\U000003b8',
+        '\\iota'                 : '\U000003b9',
+        '\\kappa'                : '\U000003ba',
+        '\\lambda'               : '\U000003bb',
+        '\\mu'                   : '\U000003bc',
+        '\\nu'                   : '\U000003bd',
+        '\\xi'                   : '\U000003be',
+        '\\pi'                   : '\U000003c0',
+        '\\varrho'               : '\U000003c1',
+        '\\sigma'                : '\U000003c3',
+        '\\tau'                  : '\U000003c4',
+        '\\upsilon'              : '\U000003c5',
+        '\\varphi'               : '\U000003c6',
+        '\\chi'                  : '\U000003c7',
+        '\\psi'                  : '\U000003c8',
+        '\\omega'                : '\U000003c9',
+        '\\Gamma'                : '\U00000393',
+        '\\Delta'                : '\U00000394',
+        '\\Theta'                : '\U00000398',
+        '\\Lambda'               : '\U0000039b',
+        '\\Xi'                   : '\U0000039e',
+        '\\Pi'                   : '\U000003a0',
+        '\\Sigma'                : '\U000003a3',
+        '\\Upsilon'              : '\U000003a5',
+        '\\Phi'                  : '\U000003a6',
+        '\\Psi'                  : '\U000003a8',
+        '\\Omega'                : '\U000003a9',
+        '\\leftarrow'            : '\U00002190',
+        '\\longleftarrow'        : '\U000027f5',
+        '\\rightarrow'           : '\U00002192',
+        '\\longrightarrow'       : '\U000027f6',
+        '\\Leftarrow'            : '\U000021d0',
+        '\\Longleftarrow'        : '\U000027f8',
+        '\\Rightarrow'           : '\U000021d2',
+        '\\Longrightarrow'       : '\U000027f9',
+        '\\leftrightarrow'       : '\U00002194',
+        '\\longleftrightarrow'   : '\U000027f7',
+        '\\Leftrightarrow'       : '\U000021d4',
+        '\\Longleftrightarrow'   : '\U000027fa',
+        '\\mapsto'               : '\U000021a6',
+        '\\longmapsto'           : '\U000027fc',
+        '\\relbar'               : '\U00002500',
+        '\\Relbar'               : '\U00002550',
+        '\\hookleftarrow'        : '\U000021a9',
+        '\\hookrightarrow'       : '\U000021aa',
+        '\\leftharpoondown'      : '\U000021bd',
+        '\\rightharpoondown'     : '\U000021c1',
+        '\\leftharpoonup'        : '\U000021bc',
+        '\\rightharpoonup'       : '\U000021c0',
+        '\\rightleftharpoons'    : '\U000021cc',
+        '\\leadsto'              : '\U0000219d',
+        '\\downharpoonleft'      : '\U000021c3',
+        '\\downharpoonright'     : '\U000021c2',
+        '\\upharpoonleft'        : '\U000021bf',
+        '\\upharpoonright'       : '\U000021be',
+        '\\restriction'          : '\U000021be',
+        '\\uparrow'              : '\U00002191',
+        '\\Uparrow'              : '\U000021d1',
+        '\\downarrow'            : '\U00002193',
+        '\\Downarrow'            : '\U000021d3',
+        '\\updownarrow'          : '\U00002195',
+        '\\Updownarrow'          : '\U000021d5',
+        '\\langle'               : '\U000027e8',
+        '\\rangle'               : '\U000027e9',
+        '\\lceil'                : '\U00002308',
+        '\\rceil'                : '\U00002309',
+        '\\lfloor'               : '\U0000230a',
+        '\\rfloor'               : '\U0000230b',
+        '\\flqq'                 : '\U000000ab',
+        '\\frqq'                 : '\U000000bb',
+        '\\bot'                  : '\U000022a5',
+        '\\top'                  : '\U000022a4',
+        '\\wedge'                : '\U00002227',
+        '\\bigwedge'             : '\U000022c0',
+        '\\vee'                  : '\U00002228',
+        '\\bigvee'               : '\U000022c1',
+        '\\forall'               : '\U00002200',
+        '\\exists'               : '\U00002203',
+        '\\nexists'              : '\U00002204',
+        '\\neg'                  : '\U000000ac',
+        '\\Box'                  : '\U000025a1',
+        '\\Diamond'              : '\U000025c7',
+        '\\vdash'                : '\U000022a2',
+        '\\models'               : '\U000022a8',
+        '\\dashv'                : '\U000022a3',
+        '\\surd'                 : '\U0000221a',
+        '\\le'                   : '\U00002264',
+        '\\ge'                   : '\U00002265',
+        '\\ll'                   : '\U0000226a',
+        '\\gg'                   : '\U0000226b',
+        '\\lesssim'              : '\U00002272',
+        '\\gtrsim'               : '\U00002273',
+        '\\lessapprox'           : '\U00002a85',
+        '\\gtrapprox'            : '\U00002a86',
+        '\\in'                   : '\U00002208',
+        '\\notin'                : '\U00002209',
+        '\\subset'               : '\U00002282',
+        '\\supset'               : '\U00002283',
+        '\\subseteq'             : '\U00002286',
+        '\\supseteq'             : '\U00002287',
+        '\\sqsubset'             : '\U0000228f',
+        '\\sqsupset'             : '\U00002290',
+        '\\sqsubseteq'           : '\U00002291',
+        '\\sqsupseteq'           : '\U00002292',
+        '\\cap'                  : '\U00002229',
+        '\\bigcap'               : '\U000022c2',
+        '\\cup'                  : '\U0000222a',
+        '\\bigcup'               : '\U000022c3',
+        '\\sqcup'                : '\U00002294',
+        '\\bigsqcup'             : '\U00002a06',
+        '\\sqcap'                : '\U00002293',
+        '\\Bigsqcap'             : '\U00002a05',
+        '\\setminus'             : '\U00002216',
+        '\\propto'               : '\U0000221d',
+        '\\uplus'                : '\U0000228e',
+        '\\bigplus'              : '\U00002a04',
+        '\\sim'                  : '\U0000223c',
+        '\\doteq'                : '\U00002250',
+        '\\simeq'                : '\U00002243',
+        '\\approx'               : '\U00002248',
+        '\\asymp'                : '\U0000224d',
+        '\\cong'                 : '\U00002245',
+        '\\equiv'                : '\U00002261',
+        '\\Join'                 : '\U000022c8',
+        '\\bowtie'               : '\U00002a1d',
+        '\\prec'                 : '\U0000227a',
+        '\\succ'                 : '\U0000227b',
+        '\\preceq'               : '\U0000227c',
+        '\\succeq'               : '\U0000227d',
+        '\\parallel'             : '\U00002225',
+        '\\mid'                  : '\U000000a6',
+        '\\pm'                   : '\U000000b1',
+        '\\mp'                   : '\U00002213',
+        '\\times'                : '\U000000d7',
+        '\\div'                  : '\U000000f7',
+        '\\cdot'                 : '\U000022c5',
+        '\\star'                 : '\U000022c6',
+        '\\circ'                 : '\U00002218',
+        '\\dagger'               : '\U00002020',
+        '\\ddagger'              : '\U00002021',
+        '\\lhd'                  : '\U000022b2',
+        '\\rhd'                  : '\U000022b3',
+        '\\unlhd'                : '\U000022b4',
+        '\\unrhd'                : '\U000022b5',
+        '\\triangleleft'         : '\U000025c3',
+        '\\triangleright'        : '\U000025b9',
+        '\\triangle'             : '\U000025b3',
+        '\\triangleq'            : '\U0000225c',
+        '\\oplus'                : '\U00002295',
+        '\\bigoplus'             : '\U00002a01',
+        '\\otimes'               : '\U00002297',
+        '\\bigotimes'            : '\U00002a02',
+        '\\odot'                 : '\U00002299',
+        '\\bigodot'              : '\U00002a00',
+        '\\ominus'               : '\U00002296',
+        '\\oslash'               : '\U00002298',
+        '\\dots'                 : '\U00002026',
+        '\\cdots'                : '\U000022ef',
+        '\\sum'                  : '\U00002211',
+        '\\prod'                 : '\U0000220f',
+        '\\coprod'               : '\U00002210',
+        '\\infty'                : '\U0000221e',
+        '\\int'                  : '\U0000222b',
+        '\\oint'                 : '\U0000222e',
+        '\\clubsuit'             : '\U00002663',
+        '\\diamondsuit'          : '\U00002662',
+        '\\heartsuit'            : '\U00002661',
+        '\\spadesuit'            : '\U00002660',
+        '\\aleph'                : '\U00002135',
+        '\\emptyset'             : '\U00002205',
+        '\\nabla'                : '\U00002207',
+        '\\partial'              : '\U00002202',
+        '\\flat'                 : '\U0000266d',
+        '\\natural'              : '\U0000266e',
+        '\\sharp'                : '\U0000266f',
+        '\\angle'                : '\U00002220',
+        '\\copyright'            : '\U000000a9',
+        '\\textregistered'       : '\U000000ae',
+        '\\textonequarter'       : '\U000000bc',
+        '\\textonehalf'          : '\U000000bd',
+        '\\textthreequarters'    : '\U000000be',
+        '\\textordfeminine'      : '\U000000aa',
+        '\\textordmasculine'     : '\U000000ba',
+        '\\euro'                 : '\U000020ac',
+        '\\pounds'               : '\U000000a3',
+        '\\yen'                  : '\U000000a5',
+        '\\textcent'             : '\U000000a2',
+        '\\textcurrency'         : '\U000000a4',
+        '\\textdegree'           : '\U000000b0',
+    }
+
+    isabelle_symbols = {
+        '\\'                 : '\U0001d7ec',
+        '\\'                  : '\U0001d7ed',
+        '\\'                  : '\U0001d7ee',
+        '\\'                : '\U0001d7ef',
+        '\\'                 : '\U0001d7f0',
+        '\\'                 : '\U0001d7f1',
+        '\\'                  : '\U0001d7f2',
+        '\\'                : '\U0001d7f3',
+        '\\'                : '\U0001d7f4',
+        '\\'                 : '\U0001d7f5',
+        '\\'                    : '\U0001d49c',
+        '\\'                    : '\U0000212c',
+        '\\'                    : '\U0001d49e',
+        '\\'                    : '\U0001d49f',
+        '\\'                    : '\U00002130',
+        '\\'                    : '\U00002131',
+        '\\'                    : '\U0001d4a2',
+        '\\'                    : '\U0000210b',
+        '\\'                    : '\U00002110',
+        '\\'                    : '\U0001d4a5',
+        '\\'                    : '\U0001d4a6',
+        '\\'                    : '\U00002112',
+        '\\'                    : '\U00002133',
+        '\\'                    : '\U0001d4a9',
+        '\\'                    : '\U0001d4aa',
+        '\\

' : '\U0001d5c9', + '\\' : '\U0001d5ca', + '\\' : '\U0001d5cb', + '\\' : '\U0001d5cc', + '\\' : '\U0001d5cd', + '\\' : '\U0001d5ce', + '\\' : '\U0001d5cf', + '\\' : '\U0001d5d0', + '\\' : '\U0001d5d1', + '\\' : '\U0001d5d2', + '\\' : '\U0001d5d3', + '\\' : '\U0001d504', + '\\' : '\U0001d505', + '\\' : '\U0000212d', + '\\

' : '\U0001d507', + '\\' : '\U0001d508', + '\\' : '\U0001d509', + '\\' : '\U0001d50a', + '\\' : '\U0000210c', + '\\' : '\U00002111', + '\\' : '\U0001d50d', + '\\' : '\U0001d50e', + '\\' : '\U0001d50f', + '\\' : '\U0001d510', + '\\' : '\U0001d511', + '\\' : '\U0001d512', + '\\' : '\U0001d513', + '\\' : '\U0001d514', + '\\' : '\U0000211c', + '\\' : '\U0001d516', + '\\' : '\U0001d517', + '\\' : '\U0001d518', + '\\' : '\U0001d519', + '\\' : '\U0001d51a', + '\\' : '\U0001d51b', + '\\' : '\U0001d51c', + '\\' : '\U00002128', + '\\' : '\U0001d51e', + '\\' : '\U0001d51f', + '\\' : '\U0001d520', + '\\
' : '\U0001d521', + '\\' : '\U0001d522', + '\\' : '\U0001d523', + '\\' : '\U0001d524', + '\\' : '\U0001d525', + '\\' : '\U0001d526', + '\\' : '\U0001d527', + '\\' : '\U0001d528', + '\\' : '\U0001d529', + '\\' : '\U0001d52a', + '\\' : '\U0001d52b', + '\\' : '\U0001d52c', + '\\' : '\U0001d52d', + '\\' : '\U0001d52e', + '\\' : '\U0001d52f', + '\\' : '\U0001d530', + '\\' : '\U0001d531', + '\\' : '\U0001d532', + '\\' : '\U0001d533', + '\\' : '\U0001d534', + '\\' : '\U0001d535', + '\\' : '\U0001d536', + '\\' : '\U0001d537', + '\\' : '\U000003b1', + '\\' : '\U000003b2', + '\\' : '\U000003b3', + '\\' : '\U000003b4', + '\\' : '\U000003b5', + '\\' : '\U000003b6', + '\\' : '\U000003b7', + '\\' : '\U000003b8', + '\\' : '\U000003b9', + '\\' : '\U000003ba', + '\\' : '\U000003bb', + '\\' : '\U000003bc', + '\\' : '\U000003bd', + '\\' : '\U000003be', + '\\' : '\U000003c0', + '\\' : '\U000003c1', + '\\' : '\U000003c3', + '\\' : '\U000003c4', + '\\' : '\U000003c5', + '\\' : '\U000003c6', + '\\' : '\U000003c7', + '\\' : '\U000003c8', + '\\' : '\U000003c9', + '\\' : '\U00000393', + '\\' : '\U00000394', + '\\' : '\U00000398', + '\\' : '\U0000039b', + '\\' : '\U0000039e', + '\\' : '\U000003a0', + '\\' : '\U000003a3', + '\\' : '\U000003a5', + '\\' : '\U000003a6', + '\\' : '\U000003a8', + '\\' : '\U000003a9', + '\\' : '\U0001d539', + '\\' : '\U00002102', + '\\' : '\U00002115', + '\\' : '\U0000211a', + '\\' : '\U0000211d', + '\\' : '\U00002124', + '\\' : '\U00002190', + '\\' : '\U000027f5', + '\\' : '\U00002192', + '\\' : '\U000027f6', + '\\' : '\U000021d0', + '\\' : '\U000027f8', + '\\' : '\U000021d2', + '\\' : '\U000027f9', + '\\' : '\U00002194', + '\\' : '\U000027f7', + '\\' : '\U000021d4', + '\\' : '\U000027fa', + '\\' : '\U000021a6', + '\\' : '\U000027fc', + '\\' : '\U00002500', + '\\' : '\U00002550', + '\\' : '\U000021a9', + '\\' : '\U000021aa', + '\\' : '\U000021bd', + '\\' : '\U000021c1', + '\\' : '\U000021bc', + '\\' : '\U000021c0', + '\\' : '\U000021cc', + '\\' : '\U0000219d', + '\\' : '\U000021c3', + '\\' : '\U000021c2', + '\\' : '\U000021bf', + '\\' : '\U000021be', + '\\' : '\U000021be', + '\\' : '\U00002237', + '\\' : '\U00002191', + '\\' : '\U000021d1', + '\\' : '\U00002193', + '\\' : '\U000021d3', + '\\' : '\U00002195', + '\\' : '\U000021d5', + '\\' : '\U000027e8', + '\\' : '\U000027e9', + '\\' : '\U00002308', + '\\' : '\U00002309', + '\\' : '\U0000230a', + '\\' : '\U0000230b', + '\\' : '\U00002987', + '\\' : '\U00002988', + '\\' : '\U000027e6', + '\\' : '\U000027e7', + '\\' : '\U00002983', + '\\' : '\U00002984', + '\\' : '\U000000ab', + '\\' : '\U000000bb', + '\\' : '\U000022a5', + '\\' : '\U000022a4', + '\\' : '\U00002227', + '\\' : '\U000022c0', + '\\' : '\U00002228', + '\\' : '\U000022c1', + '\\' : '\U00002200', + '\\' : '\U00002203', + '\\' : '\U00002204', + '\\' : '\U000000ac', + '\\' : '\U000025a1', + '\\' : '\U000025c7', + '\\' : '\U000022a2', + '\\' : '\U000022a8', + '\\' : '\U000022a9', + '\\' : '\U000022ab', + '\\' : '\U000022a3', + '\\' : '\U0000221a', + '\\' : '\U00002264', + '\\' : '\U00002265', + '\\' : '\U0000226a', + '\\' : '\U0000226b', + '\\' : '\U00002272', + '\\' : '\U00002273', + '\\' : '\U00002a85', + '\\' : '\U00002a86', + '\\' : '\U00002208', + '\\' : '\U00002209', + '\\' : '\U00002282', + '\\' : '\U00002283', + '\\' : '\U00002286', + '\\' : '\U00002287', + '\\' : '\U0000228f', + '\\' : '\U00002290', + '\\' : '\U00002291', + '\\' : '\U00002292', + '\\' : '\U00002229', + '\\' : '\U000022c2', + '\\' : '\U0000222a', + '\\' : '\U000022c3', + '\\' : '\U00002294', + '\\' : '\U00002a06', + '\\' : '\U00002293', + '\\' : '\U00002a05', + '\\' : '\U00002216', + '\\' : '\U0000221d', + '\\' : '\U0000228e', + '\\' : '\U00002a04', + '\\' : '\U00002260', + '\\' : '\U0000223c', + '\\' : '\U00002250', + '\\' : '\U00002243', + '\\' : '\U00002248', + '\\' : '\U0000224d', + '\\' : '\U00002245', + '\\' : '\U00002323', + '\\' : '\U00002261', + '\\' : '\U00002322', + '\\' : '\U000022c8', + '\\' : '\U00002a1d', + '\\' : '\U0000227a', + '\\' : '\U0000227b', + '\\' : '\U0000227c', + '\\' : '\U0000227d', + '\\' : '\U00002225', + '\\' : '\U000000a6', + '\\' : '\U000000b1', + '\\' : '\U00002213', + '\\' : '\U000000d7', + '\\
' : '\U000000f7', + '\\' : '\U000022c5', + '\\' : '\U000022c6', + '\\' : '\U00002219', + '\\' : '\U00002218', + '\\' : '\U00002020', + '\\' : '\U00002021', + '\\' : '\U000022b2', + '\\' : '\U000022b3', + '\\' : '\U000022b4', + '\\' : '\U000022b5', + '\\' : '\U000025c3', + '\\' : '\U000025b9', + '\\' : '\U000025b3', + '\\' : '\U0000225c', + '\\' : '\U00002295', + '\\' : '\U00002a01', + '\\' : '\U00002297', + '\\' : '\U00002a02', + '\\' : '\U00002299', + '\\' : '\U00002a00', + '\\' : '\U00002296', + '\\' : '\U00002298', + '\\' : '\U00002026', + '\\' : '\U000022ef', + '\\' : '\U00002211', + '\\' : '\U0000220f', + '\\' : '\U00002210', + '\\' : '\U0000221e', + '\\' : '\U0000222b', + '\\' : '\U0000222e', + '\\' : '\U00002663', + '\\' : '\U00002662', + '\\' : '\U00002661', + '\\' : '\U00002660', + '\\' : '\U00002135', + '\\' : '\U00002205', + '\\' : '\U00002207', + '\\' : '\U00002202', + '\\' : '\U0000266d', + '\\' : '\U0000266e', + '\\' : '\U0000266f', + '\\' : '\U00002220', + '\\' : '\U000000a9', + '\\' : '\U000000ae', + '\\' : '\U000000ad', + '\\' : '\U000000af', + '\\' : '\U000000bc', + '\\' : '\U000000bd', + '\\' : '\U000000be', + '\\' : '\U000000aa', + '\\' : '\U000000ba', + '\\
' : '\U000000a7', + '\\' : '\U000000b6', + '\\' : '\U000000a1', + '\\' : '\U000000bf', + '\\' : '\U000020ac', + '\\' : '\U000000a3', + '\\' : '\U000000a5', + '\\' : '\U000000a2', + '\\' : '\U000000a4', + '\\' : '\U000000b0', + '\\' : '\U00002a3f', + '\\' : '\U00002127', + '\\' : '\U000025ca', + '\\' : '\U00002118', + '\\' : '\U00002240', + '\\' : '\U000022c4', + '\\' : '\U000000b4', + '\\' : '\U00000131', + '\\' : '\U000000a8', + '\\' : '\U000000b8', + '\\' : '\U000002dd', + '\\' : '\U000003f5', + '\\' : '\U000023ce', + '\\' : '\U00002039', + '\\' : '\U0000203a', + '\\' : '\U00002302', + '\\<^sub>' : '\U000021e9', + '\\<^sup>' : '\U000021e7', + '\\<^bold>' : '\U00002759', + '\\<^bsub>' : '\U000021d8', + '\\<^esub>' : '\U000021d9', + '\\<^bsup>' : '\U000021d7', + '\\<^esup>' : '\U000021d6', + } + + lang_map = {'isabelle' : isabelle_symbols, 'latex' : latex_symbols} + + def __init__(self, **options): + Filter.__init__(self, **options) + lang = get_choice_opt(options, 'lang', + ['isabelle', 'latex'], 'isabelle') + self.symbols = self.lang_map[lang] + + def filter(self, lexer, stream): + for ttype, value in stream: + if value in self.symbols: + yield ttype, self.symbols[value] + else: + yield ttype, value + + +class KeywordCaseFilter(Filter): + """Convert keywords to lowercase or uppercase or capitalize them, which + means first letter uppercase, rest lowercase. + + This can be useful e.g. if you highlight Pascal code and want to adapt the + code to your styleguide. + + Options accepted: + + `case` : string + The casing to convert keywords to. Must be one of ``'lower'``, + ``'upper'`` or ``'capitalize'``. The default is ``'lower'``. + """ + + def __init__(self, **options): + Filter.__init__(self, **options) + case = get_choice_opt(options, 'case', + ['lower', 'upper', 'capitalize'], 'lower') + self.convert = getattr(str, case) + + def filter(self, lexer, stream): + for ttype, value in stream: + if ttype in Keyword: + yield ttype, self.convert(value) + else: + yield ttype, value + + +class NameHighlightFilter(Filter): + """Highlight a normal Name (and Name.*) token with a different token type. + + Example:: + + filter = NameHighlightFilter( + names=['foo', 'bar', 'baz'], + tokentype=Name.Function, + ) + + This would highlight the names "foo", "bar" and "baz" + as functions. `Name.Function` is the default token type. + + Options accepted: + + `names` : list of strings + A list of names that should be given the different token type. + There is no default. + `tokentype` : TokenType or string + A token type or a string containing a token type name that is + used for highlighting the strings in `names`. The default is + `Name.Function`. + """ + + def __init__(self, **options): + Filter.__init__(self, **options) + self.names = set(get_list_opt(options, 'names', [])) + tokentype = options.get('tokentype') + if tokentype: + self.tokentype = string_to_tokentype(tokentype) + else: + self.tokentype = Name.Function + + def filter(self, lexer, stream): + for ttype, value in stream: + if ttype in Name and value in self.names: + yield self.tokentype, value + else: + yield ttype, value + + +class ErrorToken(Exception): + pass + + +class RaiseOnErrorTokenFilter(Filter): + """Raise an exception when the lexer generates an error token. + + Options accepted: + + `excclass` : Exception class + The exception class to raise. + The default is `pygments.filters.ErrorToken`. + + .. versionadded:: 0.8 + """ + + def __init__(self, **options): + Filter.__init__(self, **options) + self.exception = options.get('excclass', ErrorToken) + try: + # issubclass() will raise TypeError if first argument is not a class + if not issubclass(self.exception, Exception): + raise TypeError + except TypeError: + raise OptionError('excclass option is not an exception class') + + def filter(self, lexer, stream): + for ttype, value in stream: + if ttype is Error: + raise self.exception(value) + yield ttype, value + + +class VisibleWhitespaceFilter(Filter): + """Convert tabs, newlines and/or spaces to visible characters. + + Options accepted: + + `spaces` : string or bool + If this is a one-character string, spaces will be replaces by this string. + If it is another true value, spaces will be replaced by ``·`` (unicode + MIDDLE DOT). If it is a false value, spaces will not be replaced. The + default is ``False``. + `tabs` : string or bool + The same as for `spaces`, but the default replacement character is ``»`` + (unicode RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK). The default value + is ``False``. Note: this will not work if the `tabsize` option for the + lexer is nonzero, as tabs will already have been expanded then. + `tabsize` : int + If tabs are to be replaced by this filter (see the `tabs` option), this + is the total number of characters that a tab should be expanded to. + The default is ``8``. + `newlines` : string or bool + The same as for `spaces`, but the default replacement character is ``¶`` + (unicode PILCROW SIGN). The default value is ``False``. + `wstokentype` : bool + If true, give whitespace the special `Whitespace` token type. This allows + styling the visible whitespace differently (e.g. greyed out), but it can + disrupt background colors. The default is ``True``. + + .. versionadded:: 0.8 + """ + + def __init__(self, **options): + Filter.__init__(self, **options) + for name, default in [('spaces', '·'), + ('tabs', '»'), + ('newlines', '¶')]: + opt = options.get(name, False) + if isinstance(opt, str) and len(opt) == 1: + setattr(self, name, opt) + else: + setattr(self, name, (opt and default or '')) + tabsize = get_int_opt(options, 'tabsize', 8) + if self.tabs: + self.tabs += ' ' * (tabsize - 1) + if self.newlines: + self.newlines += '\n' + self.wstt = get_bool_opt(options, 'wstokentype', True) + + def filter(self, lexer, stream): + if self.wstt: + spaces = self.spaces or ' ' + tabs = self.tabs or '\t' + newlines = self.newlines or '\n' + regex = re.compile(r'\s') + + def replacefunc(wschar): + if wschar == ' ': + return spaces + elif wschar == '\t': + return tabs + elif wschar == '\n': + return newlines + return wschar + + for ttype, value in stream: + yield from _replace_special(ttype, value, regex, Whitespace, + replacefunc) + else: + spaces, tabs, newlines = self.spaces, self.tabs, self.newlines + # simpler processing + for ttype, value in stream: + if spaces: + value = value.replace(' ', spaces) + if tabs: + value = value.replace('\t', tabs) + if newlines: + value = value.replace('\n', newlines) + yield ttype, value + + +class GobbleFilter(Filter): + """Gobbles source code lines (eats initial characters). + + This filter drops the first ``n`` characters off every line of code. This + may be useful when the source code fed to the lexer is indented by a fixed + amount of space that isn't desired in the output. + + Options accepted: + + `n` : int + The number of characters to gobble. + + .. versionadded:: 1.2 + """ + def __init__(self, **options): + Filter.__init__(self, **options) + self.n = get_int_opt(options, 'n', 0) + + def gobble(self, value, left): + if left < len(value): + return value[left:], 0 + else: + return '', left - len(value) + + def filter(self, lexer, stream): + n = self.n + left = n # How many characters left to gobble. + for ttype, value in stream: + # Remove ``left`` tokens from first line, ``n`` from all others. + parts = value.split('\n') + (parts[0], left) = self.gobble(parts[0], left) + for i in range(1, len(parts)): + (parts[i], left) = self.gobble(parts[i], n) + value = '\n'.join(parts) + + if value != '': + yield ttype, value + + +class TokenMergeFilter(Filter): + """Merges consecutive tokens with the same token type in the output + stream of a lexer. + + .. versionadded:: 1.2 + """ + def __init__(self, **options): + Filter.__init__(self, **options) + + def filter(self, lexer, stream): + current_type = None + current_value = None + for ttype, value in stream: + if ttype is current_type: + current_value += value + else: + if current_type is not None: + yield current_type, current_value + current_type = ttype + current_value = value + if current_type is not None: + yield current_type, current_value + + +FILTERS = { + 'codetagify': CodeTagFilter, + 'keywordcase': KeywordCaseFilter, + 'highlight': NameHighlightFilter, + 'raiseonerror': RaiseOnErrorTokenFilter, + 'whitespace': VisibleWhitespaceFilter, + 'gobble': GobbleFilter, + 'tokenmerge': TokenMergeFilter, + 'symbols': SymbolFilter, +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..42e8965 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py new file mode 100644 index 0000000..3ca4892 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py @@ -0,0 +1,124 @@ +""" + pygments.formatter + ~~~~~~~~~~~~~~~~~~ + + Base formatter class. + + :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import codecs + +from pip._vendor.pygments.util import get_bool_opt +from pip._vendor.pygments.styles import get_style_by_name + +__all__ = ['Formatter'] + + +def _lookup_style(style): + if isinstance(style, str): + return get_style_by_name(style) + return style + + +class Formatter: + """ + Converts a token stream to text. + + Formatters should have attributes to help selecting them. These + are similar to the corresponding :class:`~pygments.lexer.Lexer` + attributes. + + .. autoattribute:: name + :no-value: + + .. autoattribute:: aliases + :no-value: + + .. autoattribute:: filenames + :no-value: + + You can pass options as keyword arguments to the constructor. + All formatters accept these basic options: + + ``style`` + The style to use, can be a string or a Style subclass + (default: "default"). Not used by e.g. the + TerminalFormatter. + ``full`` + Tells the formatter to output a "full" document, i.e. + a complete self-contained document. This doesn't have + any effect for some formatters (default: false). + ``title`` + If ``full`` is true, the title that should be used to + caption the document (default: ''). + ``encoding`` + If given, must be an encoding name. This will be used to + convert the Unicode token strings to byte strings in the + output. If it is "" or None, Unicode strings will be written + to the output file, which most file-like objects do not + support (default: None). + ``outencoding`` + Overrides ``encoding`` if given. + + """ + + #: Full name for the formatter, in human-readable form. + name = None + + #: A list of short, unique identifiers that can be used to lookup + #: the formatter from a list, e.g. using :func:`.get_formatter_by_name()`. + aliases = [] + + #: A list of fnmatch patterns that match filenames for which this + #: formatter can produce output. The patterns in this list should be unique + #: among all formatters. + filenames = [] + + #: If True, this formatter outputs Unicode strings when no encoding + #: option is given. + unicodeoutput = True + + def __init__(self, **options): + """ + As with lexers, this constructor takes arbitrary optional arguments, + and if you override it, you should first process your own options, then + call the base class implementation. + """ + self.style = _lookup_style(options.get('style', 'default')) + self.full = get_bool_opt(options, 'full', False) + self.title = options.get('title', '') + self.encoding = options.get('encoding', None) or None + if self.encoding in ('guess', 'chardet'): + # can happen for e.g. pygmentize -O encoding=guess + self.encoding = 'utf-8' + self.encoding = options.get('outencoding') or self.encoding + self.options = options + + def get_style_defs(self, arg=''): + """ + This method must return statements or declarations suitable to define + the current style for subsequent highlighted text (e.g. CSS classes + in the `HTMLFormatter`). + + The optional argument `arg` can be used to modify the generation and + is formatter dependent (it is standardized because it can be given on + the command line). + + This method is called by the ``-S`` :doc:`command-line option `, + the `arg` is then given by the ``-a`` option. + """ + return '' + + def format(self, tokensource, outfile): + """ + This method must format the tokens from the `tokensource` iterable and + write the formatted version to the file object `outfile`. + + Formatter options can control how exactly the tokens are converted. + """ + if self.encoding: + # wrap the outfile in a StreamWriter + outfile = codecs.lookup(self.encoding)[3](outfile) + return self.format_unencoded(tokensource, outfile) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py new file mode 100644 index 0000000..39db842 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py @@ -0,0 +1,158 @@ +""" + pygments.formatters + ~~~~~~~~~~~~~~~~~~~ + + Pygments formatters. + + :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re +import sys +import types +import fnmatch +from os.path import basename + +from pip._vendor.pygments.formatters._mapping import FORMATTERS +from pip._vendor.pygments.plugin import find_plugin_formatters +from pip._vendor.pygments.util import ClassNotFound + +__all__ = ['get_formatter_by_name', 'get_formatter_for_filename', + 'get_all_formatters', 'load_formatter_from_file'] + list(FORMATTERS) + +_formatter_cache = {} # classes by name +_pattern_cache = {} + + +def _fn_matches(fn, glob): + """Return whether the supplied file name fn matches pattern filename.""" + if glob not in _pattern_cache: + pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob)) + return pattern.match(fn) + return _pattern_cache[glob].match(fn) + + +def _load_formatters(module_name): + """Load a formatter (and all others in the module too).""" + mod = __import__(module_name, None, None, ['__all__']) + for formatter_name in mod.__all__: + cls = getattr(mod, formatter_name) + _formatter_cache[cls.name] = cls + + +def get_all_formatters(): + """Return a generator for all formatter classes.""" + # NB: this returns formatter classes, not info like get_all_lexers(). + for info in FORMATTERS.values(): + if info[1] not in _formatter_cache: + _load_formatters(info[0]) + yield _formatter_cache[info[1]] + for _, formatter in find_plugin_formatters(): + yield formatter + + +def find_formatter_class(alias): + """Lookup a formatter by alias. + + Returns None if not found. + """ + for module_name, name, aliases, _, _ in FORMATTERS.values(): + if alias in aliases: + if name not in _formatter_cache: + _load_formatters(module_name) + return _formatter_cache[name] + for _, cls in find_plugin_formatters(): + if alias in cls.aliases: + return cls + + +def get_formatter_by_name(_alias, **options): + """ + Return an instance of a :class:`.Formatter` subclass that has `alias` in its + aliases list. The formatter is given the `options` at its instantiation. + + Will raise :exc:`pygments.util.ClassNotFound` if no formatter with that + alias is found. + """ + cls = find_formatter_class(_alias) + if cls is None: + raise ClassNotFound("no formatter found for name %r" % _alias) + return cls(**options) + + +def load_formatter_from_file(filename, formattername="CustomFormatter", **options): + """ + Return a `Formatter` subclass instance loaded from the provided file, relative + to the current directory. + + The file is expected to contain a Formatter class named ``formattername`` + (by default, CustomFormatter). Users should be very careful with the input, because + this method is equivalent to running ``eval()`` on the input file. The formatter is + given the `options` at its instantiation. + + :exc:`pygments.util.ClassNotFound` is raised if there are any errors loading + the formatter. + + .. versionadded:: 2.2 + """ + try: + # This empty dict will contain the namespace for the exec'd file + custom_namespace = {} + with open(filename, 'rb') as f: + exec(f.read(), custom_namespace) + # Retrieve the class `formattername` from that namespace + if formattername not in custom_namespace: + raise ClassNotFound('no valid %s class found in %s' % + (formattername, filename)) + formatter_class = custom_namespace[formattername] + # And finally instantiate it with the options + return formatter_class(**options) + except OSError as err: + raise ClassNotFound('cannot read %s: %s' % (filename, err)) + except ClassNotFound: + raise + except Exception as err: + raise ClassNotFound('error when loading custom formatter: %s' % err) + + +def get_formatter_for_filename(fn, **options): + """ + Return a :class:`.Formatter` subclass instance that has a filename pattern + matching `fn`. The formatter is given the `options` at its instantiation. + + Will raise :exc:`pygments.util.ClassNotFound` if no formatter for that filename + is found. + """ + fn = basename(fn) + for modname, name, _, filenames, _ in FORMATTERS.values(): + for filename in filenames: + if _fn_matches(fn, filename): + if name not in _formatter_cache: + _load_formatters(modname) + return _formatter_cache[name](**options) + for cls in find_plugin_formatters(): + for filename in cls.filenames: + if _fn_matches(fn, filename): + return cls(**options) + raise ClassNotFound("no formatter found for file name %r" % fn) + + +class _automodule(types.ModuleType): + """Automatically import formatters.""" + + def __getattr__(self, name): + info = FORMATTERS.get(name) + if info: + _load_formatters(info[0]) + cls = _formatter_cache[info[1]] + setattr(self, name, cls) + return cls + raise AttributeError(name) + + +oldmod = sys.modules[__name__] +newmod = _automodule(__name__) +newmod.__dict__.update(oldmod.__dict__) +sys.modules[__name__] = newmod +del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..0133ff2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc new file mode 100644 index 0000000..ba828da Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc new file mode 100644 index 0000000..c597327 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc new file mode 100644 index 0000000..60b3b4c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc new file mode 100644 index 0000000..f34cac4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc new file mode 100644 index 0000000..3da481f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc new file mode 100644 index 0000000..0ea47a0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc new file mode 100644 index 0000000..0bacd7a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc new file mode 100644 index 0000000..dfaf8e4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc new file mode 100644 index 0000000..d4253cf Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc new file mode 100644 index 0000000..4a33d19 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc new file mode 100644 index 0000000..ac43dc4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc new file mode 100644 index 0000000..f1df96e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc new file mode 100644 index 0000000..a765f6c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py new file mode 100644 index 0000000..72ca840 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py @@ -0,0 +1,23 @@ +# Automatically generated by scripts/gen_mapfiles.py. +# DO NOT EDIT BY HAND; run `tox -e mapfiles` instead. + +FORMATTERS = { + 'BBCodeFormatter': ('pygments.formatters.bbcode', 'BBCode', ('bbcode', 'bb'), (), 'Format tokens with BBcodes. These formatting codes are used by many bulletin boards, so you can highlight your sourcecode with pygments before posting it there.'), + 'BmpImageFormatter': ('pygments.formatters.img', 'img_bmp', ('bmp', 'bitmap'), ('*.bmp',), 'Create a bitmap image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), + 'GifImageFormatter': ('pygments.formatters.img', 'img_gif', ('gif',), ('*.gif',), 'Create a GIF image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), + 'GroffFormatter': ('pygments.formatters.groff', 'groff', ('groff', 'troff', 'roff'), (), 'Format tokens with groff escapes to change their color and font style.'), + 'HtmlFormatter': ('pygments.formatters.html', 'HTML', ('html',), ('*.html', '*.htm'), "Format tokens as HTML 4 ```` tags. By default, the content is enclosed in a ``
`` tag, itself wrapped in a ``
`` tag (but see the `nowrap` option). The ``
``'s CSS class can be set by the `cssclass` option."), + 'IRCFormatter': ('pygments.formatters.irc', 'IRC', ('irc', 'IRC'), (), 'Format tokens with IRC color sequences'), + 'ImageFormatter': ('pygments.formatters.img', 'img', ('img', 'IMG', 'png'), ('*.png',), 'Create a PNG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), + 'JpgImageFormatter': ('pygments.formatters.img', 'img_jpg', ('jpg', 'jpeg'), ('*.jpg',), 'Create a JPEG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), + 'LatexFormatter': ('pygments.formatters.latex', 'LaTeX', ('latex', 'tex'), ('*.tex',), 'Format tokens as LaTeX code. This needs the `fancyvrb` and `color` standard packages.'), + 'NullFormatter': ('pygments.formatters.other', 'Text only', ('text', 'null'), ('*.txt',), 'Output the text unchanged without any formatting.'), + 'PangoMarkupFormatter': ('pygments.formatters.pangomarkup', 'Pango Markup', ('pango', 'pangomarkup'), (), 'Format tokens as Pango Markup code. It can then be rendered to an SVG.'), + 'RawTokenFormatter': ('pygments.formatters.other', 'Raw tokens', ('raw', 'tokens'), ('*.raw',), 'Format tokens as a raw representation for storing token streams.'), + 'RtfFormatter': ('pygments.formatters.rtf', 'RTF', ('rtf',), ('*.rtf',), 'Format tokens as RTF markup. This formatter automatically outputs full RTF documents with color information and other useful stuff. Perfect for Copy and Paste into Microsoft(R) Word(R) documents.'), + 'SvgFormatter': ('pygments.formatters.svg', 'SVG', ('svg',), ('*.svg',), 'Format tokens as an SVG graphics file. This formatter is still experimental. Each line of code is a ```` element with explicit ``x`` and ``y`` coordinates containing ```` elements with the individual token styles.'), + 'Terminal256Formatter': ('pygments.formatters.terminal256', 'Terminal256', ('terminal256', 'console256', '256'), (), 'Format tokens with ANSI color sequences, for output in a 256-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'), + 'TerminalFormatter': ('pygments.formatters.terminal', 'Terminal', ('terminal', 'console'), (), 'Format tokens with ANSI color sequences, for output in a text console. Color sequences are terminated at newlines, so that paging the output works correctly.'), + 'TerminalTrueColorFormatter': ('pygments.formatters.terminal256', 'TerminalTrueColor', ('terminal16m', 'console16m', '16m'), (), 'Format tokens with ANSI color sequences, for output in a true-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'), + 'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.'), +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py new file mode 100644 index 0000000..c4db8f4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py @@ -0,0 +1,108 @@ +""" + pygments.formatters.bbcode + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + BBcode formatter. + + :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + + +from pip._vendor.pygments.formatter import Formatter +from pip._vendor.pygments.util import get_bool_opt + +__all__ = ['BBCodeFormatter'] + + +class BBCodeFormatter(Formatter): + """ + Format tokens with BBcodes. These formatting codes are used by many + bulletin boards, so you can highlight your sourcecode with pygments before + posting it there. + + This formatter has no support for background colors and borders, as there + are no common BBcode tags for that. + + Some board systems (e.g. phpBB) don't support colors in their [code] tag, + so you can't use the highlighting together with that tag. + Text in a [code] tag usually is shown with a monospace font (which this + formatter can do with the ``monofont`` option) and no spaces (which you + need for indentation) are removed. + + Additional options accepted: + + `style` + The style to use, can be a string or a Style subclass (default: + ``'default'``). + + `codetag` + If set to true, put the output into ``[code]`` tags (default: + ``false``) + + `monofont` + If set to true, add a tag to show the code with a monospace font + (default: ``false``). + """ + name = 'BBCode' + aliases = ['bbcode', 'bb'] + filenames = [] + + def __init__(self, **options): + Formatter.__init__(self, **options) + self._code = get_bool_opt(options, 'codetag', False) + self._mono = get_bool_opt(options, 'monofont', False) + + self.styles = {} + self._make_styles() + + def _make_styles(self): + for ttype, ndef in self.style: + start = end = '' + if ndef['color']: + start += '[color=#%s]' % ndef['color'] + end = '[/color]' + end + if ndef['bold']: + start += '[b]' + end = '[/b]' + end + if ndef['italic']: + start += '[i]' + end = '[/i]' + end + if ndef['underline']: + start += '[u]' + end = '[/u]' + end + # there are no common BBcodes for background-color and border + + self.styles[ttype] = start, end + + def format_unencoded(self, tokensource, outfile): + if self._code: + outfile.write('[code]') + if self._mono: + outfile.write('[font=monospace]') + + lastval = '' + lasttype = None + + for ttype, value in tokensource: + while ttype not in self.styles: + ttype = ttype.parent + if ttype == lasttype: + lastval += value + else: + if lastval: + start, end = self.styles[lasttype] + outfile.write(''.join((start, lastval, end))) + lastval = value + lasttype = ttype + + if lastval: + start, end = self.styles[lasttype] + outfile.write(''.join((start, lastval, end))) + + if self._mono: + outfile.write('[/font]') + if self._code: + outfile.write('[/code]') + if self._code or self._mono: + outfile.write('\n') diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py new file mode 100644 index 0000000..30a528e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py @@ -0,0 +1,170 @@ +""" + pygments.formatters.groff + ~~~~~~~~~~~~~~~~~~~~~~~~~ + + Formatter for groff output. + + :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import math +from pip._vendor.pygments.formatter import Formatter +from pip._vendor.pygments.util import get_bool_opt, get_int_opt + +__all__ = ['GroffFormatter'] + + +class GroffFormatter(Formatter): + """ + Format tokens with groff escapes to change their color and font style. + + .. versionadded:: 2.11 + + Additional options accepted: + + `style` + The style to use, can be a string or a Style subclass (default: + ``'default'``). + + `monospaced` + If set to true, monospace font will be used (default: ``true``). + + `linenos` + If set to true, print the line numbers (default: ``false``). + + `wrap` + Wrap lines to the specified number of characters. Disabled if set to 0 + (default: ``0``). + """ + + name = 'groff' + aliases = ['groff','troff','roff'] + filenames = [] + + def __init__(self, **options): + Formatter.__init__(self, **options) + + self.monospaced = get_bool_opt(options, 'monospaced', True) + self.linenos = get_bool_opt(options, 'linenos', False) + self._lineno = 0 + self.wrap = get_int_opt(options, 'wrap', 0) + self._linelen = 0 + + self.styles = {} + self._make_styles() + + + def _make_styles(self): + regular = '\\f[CR]' if self.monospaced else '\\f[R]' + bold = '\\f[CB]' if self.monospaced else '\\f[B]' + italic = '\\f[CI]' if self.monospaced else '\\f[I]' + + for ttype, ndef in self.style: + start = end = '' + if ndef['color']: + start += '\\m[%s]' % ndef['color'] + end = '\\m[]' + end + if ndef['bold']: + start += bold + end = regular + end + if ndef['italic']: + start += italic + end = regular + end + if ndef['bgcolor']: + start += '\\M[%s]' % ndef['bgcolor'] + end = '\\M[]' + end + + self.styles[ttype] = start, end + + + def _define_colors(self, outfile): + colors = set() + for _, ndef in self.style: + if ndef['color'] is not None: + colors.add(ndef['color']) + + for color in sorted(colors): + outfile.write('.defcolor ' + color + ' rgb #' + color + '\n') + + + def _write_lineno(self, outfile): + self._lineno += 1 + outfile.write("%s% 4d " % (self._lineno != 1 and '\n' or '', self._lineno)) + + + def _wrap_line(self, line): + length = len(line.rstrip('\n')) + space = ' ' if self.linenos else '' + newline = '' + + if length > self.wrap: + for i in range(0, math.floor(length / self.wrap)): + chunk = line[i*self.wrap:i*self.wrap+self.wrap] + newline += (chunk + '\n' + space) + remainder = length % self.wrap + if remainder > 0: + newline += line[-remainder-1:] + self._linelen = remainder + elif self._linelen + length > self.wrap: + newline = ('\n' + space) + line + self._linelen = length + else: + newline = line + self._linelen += length + + return newline + + + def _escape_chars(self, text): + text = text.replace('\\', '\\[u005C]'). \ + replace('.', '\\[char46]'). \ + replace('\'', '\\[u0027]'). \ + replace('`', '\\[u0060]'). \ + replace('~', '\\[u007E]') + copy = text + + for char in copy: + if len(char) != len(char.encode()): + uni = char.encode('unicode_escape') \ + .decode()[1:] \ + .replace('x', 'u00') \ + .upper() + text = text.replace(char, '\\[u' + uni[1:] + ']') + + return text + + + def format_unencoded(self, tokensource, outfile): + self._define_colors(outfile) + + outfile.write('.nf\n\\f[CR]\n') + + if self.linenos: + self._write_lineno(outfile) + + for ttype, value in tokensource: + while ttype not in self.styles: + ttype = ttype.parent + start, end = self.styles[ttype] + + for line in value.splitlines(True): + if self.wrap > 0: + line = self._wrap_line(line) + + if start and end: + text = self._escape_chars(line.rstrip('\n')) + if text != '': + outfile.write(''.join((start, text, end))) + else: + outfile.write(self._escape_chars(line.rstrip('\n'))) + + if line.endswith('\n'): + if self.linenos: + self._write_lineno(outfile) + self._linelen = 0 + else: + outfile.write('\n') + self._linelen = 0 + + outfile.write('\n.fi') diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py new file mode 100644 index 0000000..931d7c3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py @@ -0,0 +1,989 @@ +""" + pygments.formatters.html + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Formatter for HTML output. + + :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import functools +import os +import sys +import os.path +from io import StringIO + +from pip._vendor.pygments.formatter import Formatter +from pip._vendor.pygments.token import Token, Text, STANDARD_TYPES +from pip._vendor.pygments.util import get_bool_opt, get_int_opt, get_list_opt + +try: + import ctags +except ImportError: + ctags = None + +__all__ = ['HtmlFormatter'] + + +_escape_html_table = { + ord('&'): '&', + ord('<'): '<', + ord('>'): '>', + ord('"'): '"', + ord("'"): ''', +} + + +def escape_html(text, table=_escape_html_table): + """Escape &, <, > as well as single and double quotes for HTML.""" + return text.translate(table) + + +def webify(color): + if color.startswith('calc') or color.startswith('var'): + return color + else: + return '#' + color + + +def _get_ttype_class(ttype): + fname = STANDARD_TYPES.get(ttype) + if fname: + return fname + aname = '' + while fname is None: + aname = '-' + ttype[-1] + aname + ttype = ttype.parent + fname = STANDARD_TYPES.get(ttype) + return fname + aname + + +CSSFILE_TEMPLATE = '''\ +/* +generated by Pygments +Copyright 2006-2023 by the Pygments team. +Licensed under the BSD license, see LICENSE for details. +*/ +%(styledefs)s +''' + +DOC_HEADER = '''\ + + + + + %(title)s + + + + +

%(title)s

+ +''' + +DOC_HEADER_EXTERNALCSS = '''\ + + + + + %(title)s + + + + +

%(title)s

+ +''' + +DOC_FOOTER = '''\ + + +''' + + +class HtmlFormatter(Formatter): + r""" + Format tokens as HTML 4 ```` tags. By default, the content is enclosed + in a ``
`` tag, itself wrapped in a ``
`` tag (but see the `nowrap` option). + The ``
``'s CSS class can be set by the `cssclass` option. + + If the `linenos` option is set to ``"table"``, the ``
`` is
+    additionally wrapped inside a ```` which has one row and two
+    cells: one containing the line numbers and one containing the code.
+    Example:
+
+    .. sourcecode:: html
+
+        
+
+ + +
+
1
+            2
+
+
def foo(bar):
+              pass
+            
+
+ + (whitespace added to improve clarity). + + A list of lines can be specified using the `hl_lines` option to make these + lines highlighted (as of Pygments 0.11). + + With the `full` option, a complete HTML 4 document is output, including + the style definitions inside a `` + {% else %} + {{ head | safe }} + {% endif %} +{% if not embed %} + + +{% endif %} +{{ body | safe }} +{% for diagram in diagrams %} +
+

{{ diagram.title }}

+
{{ diagram.text }}
+
+ {{ diagram.svg }} +
+
+{% endfor %} +{% if not embed %} + + +{% endif %} +""" + +template = Template(jinja2_template_source) + +# Note: ideally this would be a dataclass, but we're supporting Python 3.5+ so we can't do this yet +NamedDiagram = NamedTuple( + "NamedDiagram", + [("name", str), ("diagram", typing.Optional[railroad.DiagramItem]), ("index", int)], +) +""" +A simple structure for associating a name with a railroad diagram +""" + +T = TypeVar("T") + + +class EachItem(railroad.Group): + """ + Custom railroad item to compose a: + - Group containing a + - OneOrMore containing a + - Choice of the elements in the Each + with the group label indicating that all must be matched + """ + + all_label = "[ALL]" + + def __init__(self, *items): + choice_item = railroad.Choice(len(items) - 1, *items) + one_or_more_item = railroad.OneOrMore(item=choice_item) + super().__init__(one_or_more_item, label=self.all_label) + + +class AnnotatedItem(railroad.Group): + """ + Simple subclass of Group that creates an annotation label + """ + + def __init__(self, label: str, item): + super().__init__(item=item, label="[{}]".format(label) if label else label) + + +class EditablePartial(Generic[T]): + """ + Acts like a functools.partial, but can be edited. In other words, it represents a type that hasn't yet been + constructed. + """ + + # We need this here because the railroad constructors actually transform the data, so can't be called until the + # entire tree is assembled + + def __init__(self, func: Callable[..., T], args: list, kwargs: dict): + self.func = func + self.args = args + self.kwargs = kwargs + + @classmethod + def from_call(cls, func: Callable[..., T], *args, **kwargs) -> "EditablePartial[T]": + """ + If you call this function in the same way that you would call the constructor, it will store the arguments + as you expect. For example EditablePartial.from_call(Fraction, 1, 3)() == Fraction(1, 3) + """ + return EditablePartial(func=func, args=list(args), kwargs=kwargs) + + @property + def name(self): + return self.kwargs["name"] + + def __call__(self) -> T: + """ + Evaluate the partial and return the result + """ + args = self.args.copy() + kwargs = self.kwargs.copy() + + # This is a helpful hack to allow you to specify varargs parameters (e.g. *args) as keyword args (e.g. + # args=['list', 'of', 'things']) + arg_spec = inspect.getfullargspec(self.func) + if arg_spec.varargs in self.kwargs: + args += kwargs.pop(arg_spec.varargs) + + return self.func(*args, **kwargs) + + +def railroad_to_html(diagrams: List[NamedDiagram], embed=False, **kwargs) -> str: + """ + Given a list of NamedDiagram, produce a single HTML string that visualises those diagrams + :params kwargs: kwargs to be passed in to the template + """ + data = [] + for diagram in diagrams: + if diagram.diagram is None: + continue + io = StringIO() + try: + css = kwargs.get('css') + diagram.diagram.writeStandalone(io.write, css=css) + except AttributeError: + diagram.diagram.writeSvg(io.write) + title = diagram.name + if diagram.index == 0: + title += " (root)" + data.append({"title": title, "text": "", "svg": io.getvalue()}) + + return template.render(diagrams=data, embed=embed, **kwargs) + + +def resolve_partial(partial: "EditablePartial[T]") -> T: + """ + Recursively resolves a collection of Partials into whatever type they are + """ + if isinstance(partial, EditablePartial): + partial.args = resolve_partial(partial.args) + partial.kwargs = resolve_partial(partial.kwargs) + return partial() + elif isinstance(partial, list): + return [resolve_partial(x) for x in partial] + elif isinstance(partial, dict): + return {key: resolve_partial(x) for key, x in partial.items()} + else: + return partial + + +def to_railroad( + element: pyparsing.ParserElement, + diagram_kwargs: typing.Optional[dict] = None, + vertical: int = 3, + show_results_names: bool = False, + show_groups: bool = False, +) -> List[NamedDiagram]: + """ + Convert a pyparsing element tree into a list of diagrams. This is the recommended entrypoint to diagram + creation if you want to access the Railroad tree before it is converted to HTML + :param element: base element of the parser being diagrammed + :param diagram_kwargs: kwargs to pass to the Diagram() constructor + :param vertical: (optional) - int - limit at which number of alternatives should be + shown vertically instead of horizontally + :param show_results_names - bool to indicate whether results name annotations should be + included in the diagram + :param show_groups - bool to indicate whether groups should be highlighted with an unlabeled + surrounding box + """ + # Convert the whole tree underneath the root + lookup = ConverterState(diagram_kwargs=diagram_kwargs or {}) + _to_diagram_element( + element, + lookup=lookup, + parent=None, + vertical=vertical, + show_results_names=show_results_names, + show_groups=show_groups, + ) + + root_id = id(element) + # Convert the root if it hasn't been already + if root_id in lookup: + if not element.customName: + lookup[root_id].name = "" + lookup[root_id].mark_for_extraction(root_id, lookup, force=True) + + # Now that we're finished, we can convert from intermediate structures into Railroad elements + diags = list(lookup.diagrams.values()) + if len(diags) > 1: + # collapse out duplicate diags with the same name + seen = set() + deduped_diags = [] + for d in diags: + # don't extract SkipTo elements, they are uninformative as subdiagrams + if d.name == "...": + continue + if d.name is not None and d.name not in seen: + seen.add(d.name) + deduped_diags.append(d) + resolved = [resolve_partial(partial) for partial in deduped_diags] + else: + # special case - if just one diagram, always display it, even if + # it has no name + resolved = [resolve_partial(partial) for partial in diags] + return sorted(resolved, key=lambda diag: diag.index) + + +def _should_vertical( + specification: int, exprs: Iterable[pyparsing.ParserElement] +) -> bool: + """ + Returns true if we should return a vertical list of elements + """ + if specification is None: + return False + else: + return len(_visible_exprs(exprs)) >= specification + + +class ElementState: + """ + State recorded for an individual pyparsing Element + """ + + # Note: this should be a dataclass, but we have to support Python 3.5 + def __init__( + self, + element: pyparsing.ParserElement, + converted: EditablePartial, + parent: EditablePartial, + number: int, + name: str = None, + parent_index: typing.Optional[int] = None, + ): + #: The pyparsing element that this represents + self.element: pyparsing.ParserElement = element + #: The name of the element + self.name: typing.Optional[str] = name + #: The output Railroad element in an unconverted state + self.converted: EditablePartial = converted + #: The parent Railroad element, which we store so that we can extract this if it's duplicated + self.parent: EditablePartial = parent + #: The order in which we found this element, used for sorting diagrams if this is extracted into a diagram + self.number: int = number + #: The index of this inside its parent + self.parent_index: typing.Optional[int] = parent_index + #: If true, we should extract this out into a subdiagram + self.extract: bool = False + #: If true, all of this element's children have been filled out + self.complete: bool = False + + def mark_for_extraction( + self, el_id: int, state: "ConverterState", name: str = None, force: bool = False + ): + """ + Called when this instance has been seen twice, and thus should eventually be extracted into a sub-diagram + :param el_id: id of the element + :param state: element/diagram state tracker + :param name: name to use for this element's text + :param force: If true, force extraction now, regardless of the state of this. Only useful for extracting the + root element when we know we're finished + """ + self.extract = True + + # Set the name + if not self.name: + if name: + # Allow forcing a custom name + self.name = name + elif self.element.customName: + self.name = self.element.customName + else: + self.name = "" + + # Just because this is marked for extraction doesn't mean we can do it yet. We may have to wait for children + # to be added + # Also, if this is just a string literal etc, don't bother extracting it + if force or (self.complete and _worth_extracting(self.element)): + state.extract_into_diagram(el_id) + + +class ConverterState: + """ + Stores some state that persists between recursions into the element tree + """ + + def __init__(self, diagram_kwargs: typing.Optional[dict] = None): + #: A dictionary mapping ParserElements to state relating to them + self._element_diagram_states: Dict[int, ElementState] = {} + #: A dictionary mapping ParserElement IDs to subdiagrams generated from them + self.diagrams: Dict[int, EditablePartial[NamedDiagram]] = {} + #: The index of the next unnamed element + self.unnamed_index: int = 1 + #: The index of the next element. This is used for sorting + self.index: int = 0 + #: Shared kwargs that are used to customize the construction of diagrams + self.diagram_kwargs: dict = diagram_kwargs or {} + self.extracted_diagram_names: Set[str] = set() + + def __setitem__(self, key: int, value: ElementState): + self._element_diagram_states[key] = value + + def __getitem__(self, key: int) -> ElementState: + return self._element_diagram_states[key] + + def __delitem__(self, key: int): + del self._element_diagram_states[key] + + def __contains__(self, key: int): + return key in self._element_diagram_states + + def generate_unnamed(self) -> int: + """ + Generate a number used in the name of an otherwise unnamed diagram + """ + self.unnamed_index += 1 + return self.unnamed_index + + def generate_index(self) -> int: + """ + Generate a number used to index a diagram + """ + self.index += 1 + return self.index + + def extract_into_diagram(self, el_id: int): + """ + Used when we encounter the same token twice in the same tree. When this + happens, we replace all instances of that token with a terminal, and + create a new subdiagram for the token + """ + position = self[el_id] + + # Replace the original definition of this element with a regular block + if position.parent: + ret = EditablePartial.from_call(railroad.NonTerminal, text=position.name) + if "item" in position.parent.kwargs: + position.parent.kwargs["item"] = ret + elif "items" in position.parent.kwargs: + position.parent.kwargs["items"][position.parent_index] = ret + + # If the element we're extracting is a group, skip to its content but keep the title + if position.converted.func == railroad.Group: + content = position.converted.kwargs["item"] + else: + content = position.converted + + self.diagrams[el_id] = EditablePartial.from_call( + NamedDiagram, + name=position.name, + diagram=EditablePartial.from_call( + railroad.Diagram, content, **self.diagram_kwargs + ), + index=position.number, + ) + + del self[el_id] + + +def _worth_extracting(element: pyparsing.ParserElement) -> bool: + """ + Returns true if this element is worth having its own sub-diagram. Simply, if any of its children + themselves have children, then its complex enough to extract + """ + children = element.recurse() + return any(child.recurse() for child in children) + + +def _apply_diagram_item_enhancements(fn): + """ + decorator to ensure enhancements to a diagram item (such as results name annotations) + get applied on return from _to_diagram_element (we do this since there are several + returns in _to_diagram_element) + """ + + def _inner( + element: pyparsing.ParserElement, + parent: typing.Optional[EditablePartial], + lookup: ConverterState = None, + vertical: int = None, + index: int = 0, + name_hint: str = None, + show_results_names: bool = False, + show_groups: bool = False, + ) -> typing.Optional[EditablePartial]: + ret = fn( + element, + parent, + lookup, + vertical, + index, + name_hint, + show_results_names, + show_groups, + ) + + # apply annotation for results name, if present + if show_results_names and ret is not None: + element_results_name = element.resultsName + if element_results_name: + # add "*" to indicate if this is a "list all results" name + element_results_name += "" if element.modalResults else "*" + ret = EditablePartial.from_call( + railroad.Group, item=ret, label=element_results_name + ) + + return ret + + return _inner + + +def _visible_exprs(exprs: Iterable[pyparsing.ParserElement]): + non_diagramming_exprs = ( + pyparsing.ParseElementEnhance, + pyparsing.PositionToken, + pyparsing.And._ErrorStop, + ) + return [ + e + for e in exprs + if not (e.customName or e.resultsName or isinstance(e, non_diagramming_exprs)) + ] + + +@_apply_diagram_item_enhancements +def _to_diagram_element( + element: pyparsing.ParserElement, + parent: typing.Optional[EditablePartial], + lookup: ConverterState = None, + vertical: int = None, + index: int = 0, + name_hint: str = None, + show_results_names: bool = False, + show_groups: bool = False, +) -> typing.Optional[EditablePartial]: + """ + Recursively converts a PyParsing Element to a railroad Element + :param lookup: The shared converter state that keeps track of useful things + :param index: The index of this element within the parent + :param parent: The parent of this element in the output tree + :param vertical: Controls at what point we make a list of elements vertical. If this is an integer (the default), + it sets the threshold of the number of items before we go vertical. If True, always go vertical, if False, never + do so + :param name_hint: If provided, this will override the generated name + :param show_results_names: bool flag indicating whether to add annotations for results names + :returns: The converted version of the input element, but as a Partial that hasn't yet been constructed + :param show_groups: bool flag indicating whether to show groups using bounding box + """ + exprs = element.recurse() + name = name_hint or element.customName or element.__class__.__name__ + + # Python's id() is used to provide a unique identifier for elements + el_id = id(element) + + element_results_name = element.resultsName + + # Here we basically bypass processing certain wrapper elements if they contribute nothing to the diagram + if not element.customName: + if isinstance( + element, + ( + # pyparsing.TokenConverter, + # pyparsing.Forward, + pyparsing.Located, + ), + ): + # However, if this element has a useful custom name, and its child does not, we can pass it on to the child + if exprs: + if not exprs[0].customName: + propagated_name = name + else: + propagated_name = None + + return _to_diagram_element( + element.expr, + parent=parent, + lookup=lookup, + vertical=vertical, + index=index, + name_hint=propagated_name, + show_results_names=show_results_names, + show_groups=show_groups, + ) + + # If the element isn't worth extracting, we always treat it as the first time we say it + if _worth_extracting(element): + if el_id in lookup: + # If we've seen this element exactly once before, we are only just now finding out that it's a duplicate, + # so we have to extract it into a new diagram. + looked_up = lookup[el_id] + looked_up.mark_for_extraction(el_id, lookup, name=name_hint) + ret = EditablePartial.from_call(railroad.NonTerminal, text=looked_up.name) + return ret + + elif el_id in lookup.diagrams: + # If we have seen the element at least twice before, and have already extracted it into a subdiagram, we + # just put in a marker element that refers to the sub-diagram + ret = EditablePartial.from_call( + railroad.NonTerminal, text=lookup.diagrams[el_id].kwargs["name"] + ) + return ret + + # Recursively convert child elements + # Here we find the most relevant Railroad element for matching pyparsing Element + # We use ``items=[]`` here to hold the place for where the child elements will go once created + if isinstance(element, pyparsing.And): + # detect And's created with ``expr*N`` notation - for these use a OneOrMore with a repeat + # (all will have the same name, and resultsName) + if not exprs: + return None + if len(set((e.name, e.resultsName) for e in exprs)) == 1: + ret = EditablePartial.from_call( + railroad.OneOrMore, item="", repeat=str(len(exprs)) + ) + elif _should_vertical(vertical, exprs): + ret = EditablePartial.from_call(railroad.Stack, items=[]) + else: + ret = EditablePartial.from_call(railroad.Sequence, items=[]) + elif isinstance(element, (pyparsing.Or, pyparsing.MatchFirst)): + if not exprs: + return None + if _should_vertical(vertical, exprs): + ret = EditablePartial.from_call(railroad.Choice, 0, items=[]) + else: + ret = EditablePartial.from_call(railroad.HorizontalChoice, items=[]) + elif isinstance(element, pyparsing.Each): + if not exprs: + return None + ret = EditablePartial.from_call(EachItem, items=[]) + elif isinstance(element, pyparsing.NotAny): + ret = EditablePartial.from_call(AnnotatedItem, label="NOT", item="") + elif isinstance(element, pyparsing.FollowedBy): + ret = EditablePartial.from_call(AnnotatedItem, label="LOOKAHEAD", item="") + elif isinstance(element, pyparsing.PrecededBy): + ret = EditablePartial.from_call(AnnotatedItem, label="LOOKBEHIND", item="") + elif isinstance(element, pyparsing.Group): + if show_groups: + ret = EditablePartial.from_call(AnnotatedItem, label="", item="") + else: + ret = EditablePartial.from_call(railroad.Group, label="", item="") + elif isinstance(element, pyparsing.TokenConverter): + label = type(element).__name__.lower() + if label == "tokenconverter": + ret = EditablePartial.from_call(railroad.Sequence, items=[]) + else: + ret = EditablePartial.from_call(AnnotatedItem, label=label, item="") + elif isinstance(element, pyparsing.Opt): + ret = EditablePartial.from_call(railroad.Optional, item="") + elif isinstance(element, pyparsing.OneOrMore): + ret = EditablePartial.from_call(railroad.OneOrMore, item="") + elif isinstance(element, pyparsing.ZeroOrMore): + ret = EditablePartial.from_call(railroad.ZeroOrMore, item="") + elif isinstance(element, pyparsing.Group): + ret = EditablePartial.from_call( + railroad.Group, item=None, label=element_results_name + ) + elif isinstance(element, pyparsing.Empty) and not element.customName: + # Skip unnamed "Empty" elements + ret = None + elif isinstance(element, pyparsing.ParseElementEnhance): + ret = EditablePartial.from_call(railroad.Sequence, items=[]) + elif len(exprs) > 0 and not element_results_name: + ret = EditablePartial.from_call(railroad.Group, item="", label=name) + elif len(exprs) > 0: + ret = EditablePartial.from_call(railroad.Sequence, items=[]) + else: + terminal = EditablePartial.from_call(railroad.Terminal, element.defaultName) + ret = terminal + + if ret is None: + return + + # Indicate this element's position in the tree so we can extract it if necessary + lookup[el_id] = ElementState( + element=element, + converted=ret, + parent=parent, + parent_index=index, + number=lookup.generate_index(), + ) + if element.customName: + lookup[el_id].mark_for_extraction(el_id, lookup, element.customName) + + i = 0 + for expr in exprs: + # Add a placeholder index in case we have to extract the child before we even add it to the parent + if "items" in ret.kwargs: + ret.kwargs["items"].insert(i, None) + + item = _to_diagram_element( + expr, + parent=ret, + lookup=lookup, + vertical=vertical, + index=i, + show_results_names=show_results_names, + show_groups=show_groups, + ) + + # Some elements don't need to be shown in the diagram + if item is not None: + if "item" in ret.kwargs: + ret.kwargs["item"] = item + elif "items" in ret.kwargs: + # If we've already extracted the child, don't touch this index, since it's occupied by a nonterminal + ret.kwargs["items"][i] = item + i += 1 + elif "items" in ret.kwargs: + # If we're supposed to skip this element, remove it from the parent + del ret.kwargs["items"][i] + + # If all this items children are none, skip this item + if ret and ( + ("items" in ret.kwargs and len(ret.kwargs["items"]) == 0) + or ("item" in ret.kwargs and ret.kwargs["item"] is None) + ): + ret = EditablePartial.from_call(railroad.Terminal, name) + + # Mark this element as "complete", ie it has all of its children + if el_id in lookup: + lookup[el_id].complete = True + + if el_id in lookup and lookup[el_id].extract and lookup[el_id].complete: + lookup.extract_into_diagram(el_id) + if ret is not None: + ret = EditablePartial.from_call( + railroad.NonTerminal, text=lookup.diagrams[el_id].kwargs["name"] + ) + + return ret diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..ec34916 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/exceptions.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/exceptions.py new file mode 100644 index 0000000..12219f1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/exceptions.py @@ -0,0 +1,299 @@ +# exceptions.py + +import re +import sys +import typing + +from .util import ( + col, + line, + lineno, + _collapse_string_to_ranges, + replaced_by_pep8, +) +from .unicode import pyparsing_unicode as ppu + + +class ExceptionWordUnicode(ppu.Latin1, ppu.LatinA, ppu.LatinB, ppu.Greek, ppu.Cyrillic): + pass + + +_extract_alphanums = _collapse_string_to_ranges(ExceptionWordUnicode.alphanums) +_exception_word_extractor = re.compile("([" + _extract_alphanums + "]{1,16})|.") + + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + + loc: int + msg: str + pstr: str + parser_element: typing.Any # "ParserElement" + args: typing.Tuple[str, int, typing.Optional[str]] + + __slots__ = ( + "loc", + "msg", + "pstr", + "parser_element", + "args", + ) + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( + self, + pstr: str, + loc: int = 0, + msg: typing.Optional[str] = None, + elem=None, + ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parser_element = elem + self.args = (pstr, loc, msg) + + @staticmethod + def explain_exception(exc, depth=16): + """ + Method to take an exception and translate the Python internal traceback into a list + of the pyparsing expressions that caused the exception to be raised. + + Parameters: + + - exc - exception raised during parsing (need not be a ParseException, in support + of Python exceptions that might be raised in a parse action) + - depth (default=16) - number of levels back in the stack trace to list expression + and function names; if None, the full stack trace names will be listed; if 0, only + the failing input line, marker, and exception string will be shown + + Returns a multi-line string listing the ParserElements and/or function names in the + exception's stack trace. + """ + import inspect + from .core import ParserElement + + if depth is None: + depth = sys.getrecursionlimit() + ret = [] + if isinstance(exc, ParseBaseException): + ret.append(exc.line) + ret.append(" " * (exc.column - 1) + "^") + ret.append(f"{type(exc).__name__}: {exc}") + + if depth > 0: + callers = inspect.getinnerframes(exc.__traceback__, context=depth) + seen = set() + for i, ff in enumerate(callers[-depth:]): + frm = ff[0] + + f_self = frm.f_locals.get("self", None) + if isinstance(f_self, ParserElement): + if not frm.f_code.co_name.startswith( + ("parseImpl", "_parseNoCache") + ): + continue + if id(f_self) in seen: + continue + seen.add(id(f_self)) + + self_type = type(f_self) + ret.append( + f"{self_type.__module__}.{self_type.__name__} - {f_self}" + ) + + elif f_self is not None: + self_type = type(f_self) + ret.append(f"{self_type.__module__}.{self_type.__name__}") + + else: + code = frm.f_code + if code.co_name in ("wrapper", ""): + continue + + ret.append(code.co_name) + + depth -= 1 + if not depth: + break + + return "\n".join(ret) + + @classmethod + def _from_exception(cls, pe): + """ + internal factory method to simplify creating one type of ParseException + from another - avoids having __init__ signature conflicts among subclasses + """ + return cls(pe.pstr, pe.loc, pe.msg, pe.parser_element) + + @property + def line(self) -> str: + """ + Return the line of text where the exception occurred. + """ + return line(self.loc, self.pstr) + + @property + def lineno(self) -> int: + """ + Return the 1-based line number of text where the exception occurred. + """ + return lineno(self.loc, self.pstr) + + @property + def col(self) -> int: + """ + Return the 1-based column on the line of text where the exception occurred. + """ + return col(self.loc, self.pstr) + + @property + def column(self) -> int: + """ + Return the 1-based column on the line of text where the exception occurred. + """ + return col(self.loc, self.pstr) + + # pre-PEP8 compatibility + @property + def parserElement(self): + return self.parser_element + + @parserElement.setter + def parserElement(self, elem): + self.parser_element = elem + + def __str__(self) -> str: + if self.pstr: + if self.loc >= len(self.pstr): + foundstr = ", found end of text" + else: + # pull out next word at error location + found_match = _exception_word_extractor.match(self.pstr, self.loc) + if found_match is not None: + found = found_match.group(0) + else: + found = self.pstr[self.loc : self.loc + 1] + foundstr = (", found %r" % found).replace(r"\\", "\\") + else: + foundstr = "" + return f"{self.msg}{foundstr} (at char {self.loc}), (line:{self.lineno}, col:{self.column})" + + def __repr__(self): + return str(self) + + def mark_input_line( + self, marker_string: typing.Optional[str] = None, *, markerString: str = ">!<" + ) -> str: + """ + Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + markerString = marker_string if marker_string is not None else markerString + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join( + (line_str[:line_column], markerString, line_str[line_column:]) + ) + return line_str.strip() + + def explain(self, depth=16) -> str: + """ + Method to translate the Python internal traceback into a list + of the pyparsing expressions that caused the exception to be raised. + + Parameters: + + - depth (default=16) - number of levels back in the stack trace to list expression + and function names; if None, the full stack trace names will be listed; if 0, only + the failing input line, marker, and exception string will be shown + + Returns a multi-line string listing the ParserElements and/or function names in the + exception's stack trace. + + Example:: + + expr = pp.Word(pp.nums) * 3 + try: + expr.parse_string("123 456 A789") + except pp.ParseException as pe: + print(pe.explain(depth=0)) + + prints:: + + 123 456 A789 + ^ + ParseException: Expected W:(0-9), found 'A' (at char 8), (line:1, col:9) + + Note: the diagnostic output will include string representations of the expressions + that failed to parse. These representations will be more helpful if you use `set_name` to + give identifiable names to your expressions. Otherwise they will use the default string + forms, which may be cryptic to read. + + Note: pyparsing's default truncation of exception tracebacks may also truncate the + stack of expressions that are displayed in the ``explain`` output. To get the full listing + of parser expressions, you may have to set ``ParserElement.verbose_stacktrace = True`` + """ + return self.explain_exception(self, depth) + + # fmt: off + @replaced_by_pep8(mark_input_line) + def markInputline(self): ... + # fmt: on + + +class ParseException(ParseBaseException): + """ + Exception thrown when a parse expression doesn't match the input string + + Example:: + + try: + Word(nums).set_name("integer").parse_string("ABC") + except ParseException as pe: + print(pe) + print("column: {}".format(pe.column)) + + prints:: + + Expected integer (at char 0), (line:1, col:1) + column: 1 + + """ + + +class ParseFatalException(ParseBaseException): + """ + User-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately + """ + + +class ParseSyntaxException(ParseFatalException): + """ + Just like :class:`ParseFatalException`, but thrown internally + when an :class:`ErrorStop` ('-' operator) indicates + that parsing is to stop immediately because an unbacktrackable + syntax error has been found. + """ + + +class RecursiveGrammarException(Exception): + """ + Exception thrown by :class:`ParserElement.validate` if the + grammar could be left-recursive; parser may need to enable + left recursion using :class:`ParserElement.enable_left_recursion` + """ + + def __init__(self, parseElementList): + self.parseElementTrace = parseElementList + + def __str__(self) -> str: + return f"RecursiveGrammarException: {self.parseElementTrace}" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/helpers.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/helpers.py new file mode 100644 index 0000000..018f0d6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/helpers.py @@ -0,0 +1,1100 @@ +# helpers.py +import html.entities +import re +import sys +import typing + +from . import __diag__ +from .core import * +from .util import ( + _bslash, + _flatten, + _escape_regex_range_chars, + replaced_by_pep8, +) + + +# +# global helpers +# +def counted_array( + expr: ParserElement, + int_expr: typing.Optional[ParserElement] = None, + *, + intExpr: typing.Optional[ParserElement] = None, +) -> ParserElement: + """Helper to define a counted list of expressions. + + This helper defines a pattern of the form:: + + integer expr expr expr... + + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the + leading count token is suppressed. + + If ``int_expr`` is specified, it should be a pyparsing expression + that produces an integer value. + + Example:: + + counted_array(Word(alphas)).parse_string('2 ab cd ef') # -> ['ab', 'cd'] + + # in this parser, the leading integer value is given in binary, + # '10' indicating that 2 values are in the array + binary_constant = Word('01').set_parse_action(lambda t: int(t[0], 2)) + counted_array(Word(alphas), int_expr=binary_constant).parse_string('10 ab cd ef') # -> ['ab', 'cd'] + + # if other fields must be parsed after the count but before the + # list items, give the fields results names and they will + # be preserved in the returned ParseResults: + count_with_metadata = integer + Word(alphas)("type") + typed_array = counted_array(Word(alphanums), int_expr=count_with_metadata)("items") + result = typed_array.parse_string("3 bool True True False") + print(result.dump()) + + # prints + # ['True', 'True', 'False'] + # - items: ['True', 'True', 'False'] + # - type: 'bool' + """ + intExpr = intExpr or int_expr + array_expr = Forward() + + def count_field_parse_action(s, l, t): + nonlocal array_expr + n = t[0] + array_expr <<= (expr * n) if n else Empty() + # clear list contents, but keep any named results + del t[:] + + if intExpr is None: + intExpr = Word(nums).set_parse_action(lambda t: int(t[0])) + else: + intExpr = intExpr.copy() + intExpr.set_name("arrayLen") + intExpr.add_parse_action(count_field_parse_action, call_during_try=True) + return (intExpr + array_expr).set_name("(len) " + str(expr) + "...") + + +def match_previous_literal(expr: ParserElement) -> ParserElement: + """Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks for + a 'repeat' of a previous expression. For example:: + + first = Word(nums) + second = match_previous_literal(first) + match_expr = first + ":" + second + + will match ``"1:1"``, but not ``"1:2"``. Because this + matches a previous literal, will also match the leading + ``"1:1"`` in ``"1:10"``. If this is not desired, use + :class:`match_previous_expr`. Do *not* use with packrat parsing + enabled. + """ + rep = Forward() + + def copy_token_to_repeater(s, l, t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.as_list()) + rep << And(Literal(tt) for tt in tflat) + else: + rep << Empty() + + expr.add_parse_action(copy_token_to_repeater, callDuringTry=True) + rep.set_name("(prev) " + str(expr)) + return rep + + +def match_previous_expr(expr: ParserElement) -> ParserElement: + """Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks for + a 'repeat' of a previous expression. For example:: + + first = Word(nums) + second = match_previous_expr(first) + match_expr = first + ":" + second + + will match ``"1:1"``, but not ``"1:2"``. Because this + matches by expressions, will *not* match the leading ``"1:1"`` + in ``"1:10"``; the expressions are evaluated first, and then + compared, so ``"1"`` is compared with ``"10"``. Do *not* use + with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep <<= e2 + + def copy_token_to_repeater(s, l, t): + matchTokens = _flatten(t.as_list()) + + def must_match_these_tokens(s, l, t): + theseTokens = _flatten(t.as_list()) + if theseTokens != matchTokens: + raise ParseException( + s, l, f"Expected {matchTokens}, found{theseTokens}" + ) + + rep.set_parse_action(must_match_these_tokens, callDuringTry=True) + + expr.add_parse_action(copy_token_to_repeater, callDuringTry=True) + rep.set_name("(prev) " + str(expr)) + return rep + + +def one_of( + strs: Union[typing.Iterable[str], str], + caseless: bool = False, + use_regex: bool = True, + as_keyword: bool = False, + *, + useRegex: bool = True, + asKeyword: bool = False, +) -> ParserElement: + """Helper to quickly define a set of alternative :class:`Literal` s, + and makes sure to do longest-first testing when there is a conflict, + regardless of the input order, but returns + a :class:`MatchFirst` for best performance. + + Parameters: + + - ``strs`` - a string of space-delimited literals, or a collection of + string literals + - ``caseless`` - treat all literals as caseless - (default= ``False``) + - ``use_regex`` - as an optimization, will + generate a :class:`Regex` object; otherwise, will generate + a :class:`MatchFirst` object (if ``caseless=True`` or ``as_keyword=True``, or if + creating a :class:`Regex` raises an exception) - (default= ``True``) + - ``as_keyword`` - enforce :class:`Keyword`-style matching on the + generated expressions - (default= ``False``) + - ``asKeyword`` and ``useRegex`` are retained for pre-PEP8 compatibility, + but will be removed in a future release + + Example:: + + comp_oper = one_of("< = > <= >= !=") + var = Word(alphas) + number = Word(nums) + term = var | number + comparison_expr = term + comp_oper + term + print(comparison_expr.search_string("B = 12 AA=23 B<=AA AA>12")) + + prints:: + + [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] + """ + asKeyword = asKeyword or as_keyword + useRegex = useRegex and use_regex + + if ( + isinstance(caseless, str_type) + and __diag__.warn_on_multiple_string_args_to_oneof + ): + warnings.warn( + "More than one string argument passed to one_of, pass" + " choices as a list or space-delimited string", + stacklevel=2, + ) + + if caseless: + isequal = lambda a, b: a.upper() == b.upper() + masks = lambda a, b: b.upper().startswith(a.upper()) + parseElementClass = CaselessKeyword if asKeyword else CaselessLiteral + else: + isequal = lambda a, b: a == b + masks = lambda a, b: b.startswith(a) + parseElementClass = Keyword if asKeyword else Literal + + symbols: List[str] = [] + if isinstance(strs, str_type): + strs = typing.cast(str, strs) + symbols = strs.split() + elif isinstance(strs, Iterable): + symbols = list(strs) + else: + raise TypeError("Invalid argument to one_of, expected string or iterable") + if not symbols: + return NoMatch() + + # reorder given symbols to take care to avoid masking longer choices with shorter ones + # (but only if the given symbols are not just single characters) + if any(len(sym) > 1 for sym in symbols): + i = 0 + while i < len(symbols) - 1: + cur = symbols[i] + for j, other in enumerate(symbols[i + 1 :]): + if isequal(other, cur): + del symbols[i + j + 1] + break + elif masks(cur, other): + del symbols[i + j + 1] + symbols.insert(i, other) + break + else: + i += 1 + + if useRegex: + re_flags: int = re.IGNORECASE if caseless else 0 + + try: + if all(len(sym) == 1 for sym in symbols): + # symbols are just single characters, create range regex pattern + patt = f"[{''.join(_escape_regex_range_chars(sym) for sym in symbols)}]" + else: + patt = "|".join(re.escape(sym) for sym in symbols) + + # wrap with \b word break markers if defining as keywords + if asKeyword: + patt = rf"\b(?:{patt})\b" + + ret = Regex(patt, flags=re_flags).set_name(" | ".join(symbols)) + + if caseless: + # add parse action to return symbols as specified, not in random + # casing as found in input string + symbol_map = {sym.lower(): sym for sym in symbols} + ret.add_parse_action(lambda s, l, t: symbol_map[t[0].lower()]) + + return ret + + except re.error: + warnings.warn( + "Exception creating Regex for one_of, building MatchFirst", stacklevel=2 + ) + + # last resort, just use MatchFirst + return MatchFirst(parseElementClass(sym) for sym in symbols).set_name( + " | ".join(symbols) + ) + + +def dict_of(key: ParserElement, value: ParserElement) -> ParserElement: + """Helper to easily and clearly define a dictionary by specifying + the respective patterns for the key and value. Takes care of + defining the :class:`Dict`, :class:`ZeroOrMore`, and + :class:`Group` tokens in the proper order. The key pattern + can include delimiting markers or punctuation, as long as they are + suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the :class:`Dict` results + can include named token fields. + + Example:: + + text = "shape: SQUARE posn: upper left color: light blue texture: burlap" + attr_expr = (label + Suppress(':') + OneOrMore(data_word, stop_on=label).set_parse_action(' '.join)) + print(attr_expr[1, ...].parse_string(text).dump()) + + attr_label = label + attr_value = Suppress(':') + OneOrMore(data_word, stop_on=label).set_parse_action(' '.join) + + # similar to Dict, but simpler call format + result = dict_of(attr_label, attr_value).parse_string(text) + print(result.dump()) + print(result['shape']) + print(result.shape) # object attribute access works too + print(result.as_dict()) + + prints:: + + [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] + - color: 'light blue' + - posn: 'upper left' + - shape: 'SQUARE' + - texture: 'burlap' + SQUARE + SQUARE + {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} + """ + return Dict(OneOrMore(Group(key + value))) + + +def original_text_for( + expr: ParserElement, as_string: bool = True, *, asString: bool = True +) -> ParserElement: + """Helper to return the original, untokenized text for a given + expression. Useful to restore the parsed fields of an HTML start + tag into the raw tag text itself, or to revert separate tokens with + intervening whitespace back to the original matching input text. By + default, returns a string containing the original parsed text. + + If the optional ``as_string`` argument is passed as + ``False``, then the return value is + a :class:`ParseResults` containing any results names that + were originally matched, and a single token containing the original + matched text from the input string. So if the expression passed to + :class:`original_text_for` contains expressions with defined + results names, you must set ``as_string`` to ``False`` if you + want to preserve those results name values. + + The ``asString`` pre-PEP8 argument is retained for compatibility, + but will be removed in a future release. + + Example:: + + src = "this is test bold text normal text " + for tag in ("b", "i"): + opener, closer = make_html_tags(tag) + patt = original_text_for(opener + ... + closer) + print(patt.search_string(src)[0]) + + prints:: + + [' bold text '] + ['text'] + """ + asString = asString and as_string + + locMarker = Empty().set_parse_action(lambda s, loc, t: loc) + endlocMarker = locMarker.copy() + endlocMarker.callPreparse = False + matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") + if asString: + extractText = lambda s, l, t: s[t._original_start : t._original_end] + else: + + def extractText(s, l, t): + t[:] = [s[t.pop("_original_start") : t.pop("_original_end")]] + + matchExpr.set_parse_action(extractText) + matchExpr.ignoreExprs = expr.ignoreExprs + matchExpr.suppress_warning(Diagnostics.warn_ungrouped_named_tokens_in_collection) + return matchExpr + + +def ungroup(expr: ParserElement) -> ParserElement: + """Helper to undo pyparsing's default grouping of And expressions, + even if all but one are non-empty. + """ + return TokenConverter(expr).add_parse_action(lambda t: t[0]) + + +def locatedExpr(expr: ParserElement) -> ParserElement: + """ + (DEPRECATED - future code should use the :class:`Located` class) + Helper to decorate a returned token with its starting and ending + locations in the input string. + + This helper adds the following results names: + + - ``locn_start`` - location where matched expression begins + - ``locn_end`` - location where matched expression ends + - ``value`` - the actual parsed results + + Be careful if the input text contains ```` characters, you + may want to call :class:`ParserElement.parse_with_tabs` + + Example:: + + wd = Word(alphas) + for match in locatedExpr(wd).search_string("ljsdf123lksdjjf123lkkjj1222"): + print(match) + + prints:: + + [[0, 'ljsdf', 5]] + [[8, 'lksdjjf', 15]] + [[18, 'lkkjj', 23]] + """ + locator = Empty().set_parse_action(lambda ss, ll, tt: ll) + return Group( + locator("locn_start") + + expr("value") + + locator.copy().leaveWhitespace()("locn_end") + ) + + +def nested_expr( + opener: Union[str, ParserElement] = "(", + closer: Union[str, ParserElement] = ")", + content: typing.Optional[ParserElement] = None, + ignore_expr: ParserElement = quoted_string(), + *, + ignoreExpr: ParserElement = quoted_string(), +) -> ParserElement: + """Helper method for defining nested lists enclosed in opening and + closing delimiters (``"("`` and ``")"`` are the default). + + Parameters: + + - ``opener`` - opening character for a nested list + (default= ``"("``); can also be a pyparsing expression + - ``closer`` - closing character for a nested list + (default= ``")"``); can also be a pyparsing expression + - ``content`` - expression for items within the nested lists + (default= ``None``) + - ``ignore_expr`` - expression for ignoring opening and closing delimiters + (default= :class:`quoted_string`) + - ``ignoreExpr`` - this pre-PEP8 argument is retained for compatibility + but will be removed in a future release + + If an expression is not provided for the content argument, the + nested expression will capture all whitespace-delimited content + between delimiters as a list of separate values. + + Use the ``ignore_expr`` argument to define expressions that may + contain opening or closing characters that should not be treated as + opening or closing characters for nesting, such as quoted_string or + a comment expression. Specify multiple expressions using an + :class:`Or` or :class:`MatchFirst`. The default is + :class:`quoted_string`, but if no expressions are to be ignored, then + pass ``None`` for this argument. + + Example:: + + data_type = one_of("void int short long char float double") + decl_data_type = Combine(data_type + Opt(Word('*'))) + ident = Word(alphas+'_', alphanums+'_') + number = pyparsing_common.number + arg = Group(decl_data_type + ident) + LPAR, RPAR = map(Suppress, "()") + + code_body = nested_expr('{', '}', ignore_expr=(quoted_string | c_style_comment)) + + c_function = (decl_data_type("type") + + ident("name") + + LPAR + Opt(DelimitedList(arg), [])("args") + RPAR + + code_body("body")) + c_function.ignore(c_style_comment) + + source_code = ''' + int is_odd(int x) { + return (x%2); + } + + int dec_to_hex(char hchar) { + if (hchar >= '0' && hchar <= '9') { + return (ord(hchar)-ord('0')); + } else { + return (10+ord(hchar)-ord('A')); + } + } + ''' + for func in c_function.search_string(source_code): + print("%(name)s (%(type)s) args: %(args)s" % func) + + + prints:: + + is_odd (int) args: [['int', 'x']] + dec_to_hex (int) args: [['char', 'hchar']] + """ + if ignoreExpr != ignore_expr: + ignoreExpr = ignore_expr if ignoreExpr == quoted_string() else ignoreExpr + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener, str_type) and isinstance(closer, str_type): + opener = typing.cast(str, opener) + closer = typing.cast(str, closer) + if len(opener) == 1 and len(closer) == 1: + if ignoreExpr is not None: + content = Combine( + OneOrMore( + ~ignoreExpr + + CharsNotIn( + opener + closer + ParserElement.DEFAULT_WHITE_CHARS, + exact=1, + ) + ) + ).set_parse_action(lambda t: t[0].strip()) + else: + content = empty.copy() + CharsNotIn( + opener + closer + ParserElement.DEFAULT_WHITE_CHARS + ).set_parse_action(lambda t: t[0].strip()) + else: + if ignoreExpr is not None: + content = Combine( + OneOrMore( + ~ignoreExpr + + ~Literal(opener) + + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS, exact=1) + ) + ).set_parse_action(lambda t: t[0].strip()) + else: + content = Combine( + OneOrMore( + ~Literal(opener) + + ~Literal(closer) + + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS, exact=1) + ) + ).set_parse_action(lambda t: t[0].strip()) + else: + raise ValueError( + "opening and closing arguments must be strings if no content expression is given" + ) + ret = Forward() + if ignoreExpr is not None: + ret <<= Group( + Suppress(opener) + ZeroOrMore(ignoreExpr | ret | content) + Suppress(closer) + ) + else: + ret <<= Group(Suppress(opener) + ZeroOrMore(ret | content) + Suppress(closer)) + ret.set_name("nested %s%s expression" % (opener, closer)) + return ret + + +def _makeTags(tagStr, xml, suppress_LT=Suppress("<"), suppress_GT=Suppress(">")): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr, str_type): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas, alphanums + "_-:") + if xml: + tagAttrValue = dbl_quoted_string.copy().set_parse_action(remove_quotes) + openTag = ( + suppress_LT + + tagStr("tag") + + Dict(ZeroOrMore(Group(tagAttrName + Suppress("=") + tagAttrValue))) + + Opt("/", default=[False])("empty").set_parse_action( + lambda s, l, t: t[0] == "/" + ) + + suppress_GT + ) + else: + tagAttrValue = quoted_string.copy().set_parse_action(remove_quotes) | Word( + printables, exclude_chars=">" + ) + openTag = ( + suppress_LT + + tagStr("tag") + + Dict( + ZeroOrMore( + Group( + tagAttrName.set_parse_action(lambda t: t[0].lower()) + + Opt(Suppress("=") + tagAttrValue) + ) + ) + ) + + Opt("/", default=[False])("empty").set_parse_action( + lambda s, l, t: t[0] == "/" + ) + + suppress_GT + ) + closeTag = Combine(Literal("", adjacent=False) + + openTag.set_name("<%s>" % resname) + # add start results name in parse action now that ungrouped names are not reported at two levels + openTag.add_parse_action( + lambda t: t.__setitem__( + "start" + "".join(resname.replace(":", " ").title().split()), t.copy() + ) + ) + closeTag = closeTag( + "end" + "".join(resname.replace(":", " ").title().split()) + ).set_name("" % resname) + openTag.tag = resname + closeTag.tag = resname + openTag.tag_body = SkipTo(closeTag()) + return openTag, closeTag + + +def make_html_tags( + tag_str: Union[str, ParserElement] +) -> Tuple[ParserElement, ParserElement]: + """Helper to construct opening and closing tag expressions for HTML, + given a tag name. Matches tags in either upper or lower case, + attributes with namespaces and with quoted or unquoted values. + + Example:: + + text = 'More info at the
pyparsing wiki page' + # make_html_tags returns pyparsing expressions for the opening and + # closing tags as a 2-tuple + a, a_end = make_html_tags("A") + link_expr = a + SkipTo(a_end)("link_text") + a_end + + for link in link_expr.search_string(text): + # attributes in the tag (like "href" shown here) are + # also accessible as named results + print(link.link_text, '->', link.href) + + prints:: + + pyparsing -> https://github.com/pyparsing/pyparsing/wiki + """ + return _makeTags(tag_str, False) + + +def make_xml_tags( + tag_str: Union[str, ParserElement] +) -> Tuple[ParserElement, ParserElement]: + """Helper to construct opening and closing tag expressions for XML, + given a tag name. Matches tags only in the given upper/lower case. + + Example: similar to :class:`make_html_tags` + """ + return _makeTags(tag_str, True) + + +any_open_tag: ParserElement +any_close_tag: ParserElement +any_open_tag, any_close_tag = make_html_tags( + Word(alphas, alphanums + "_:").set_name("any tag") +) + +_htmlEntityMap = {k.rstrip(";"): v for k, v in html.entities.html5.items()} +common_html_entity = Regex("&(?P" + "|".join(_htmlEntityMap) + ");").set_name( + "common HTML entity" +) + + +def replace_html_entity(s, l, t): + """Helper parser action to replace common HTML entities with their special characters""" + return _htmlEntityMap.get(t.entity) + + +class OpAssoc(Enum): + """Enumeration of operator associativity + - used in constructing InfixNotationOperatorSpec for :class:`infix_notation`""" + + LEFT = 1 + RIGHT = 2 + + +InfixNotationOperatorArgType = Union[ + ParserElement, str, Tuple[Union[ParserElement, str], Union[ParserElement, str]] +] +InfixNotationOperatorSpec = Union[ + Tuple[ + InfixNotationOperatorArgType, + int, + OpAssoc, + typing.Optional[ParseAction], + ], + Tuple[ + InfixNotationOperatorArgType, + int, + OpAssoc, + ], +] + + +def infix_notation( + base_expr: ParserElement, + op_list: List[InfixNotationOperatorSpec], + lpar: Union[str, ParserElement] = Suppress("("), + rpar: Union[str, ParserElement] = Suppress(")"), +) -> ParserElement: + """Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary + or binary, left- or right-associative. Parse actions can also be + attached to operator expressions. The generated parser will also + recognize the use of parentheses to override operator precedences + (see example below). + + Note: if you define a deep operator list, you may see performance + issues when using infix_notation. See + :class:`ParserElement.enable_packrat` for a mechanism to potentially + improve your parser performance. + + Parameters: + + - ``base_expr`` - expression representing the most basic operand to + be used in the expression + - ``op_list`` - list of tuples, one for each operator precedence level + in the expression grammar; each tuple is of the form ``(op_expr, + num_operands, right_left_assoc, (optional)parse_action)``, where: + + - ``op_expr`` is the pyparsing expression for the operator; may also + be a string, which will be converted to a Literal; if ``num_operands`` + is 3, ``op_expr`` is a tuple of two expressions, for the two + operators separating the 3 terms + - ``num_operands`` is the number of terms for this operator (must be 1, + 2, or 3) + - ``right_left_assoc`` is the indicator whether the operator is right + or left associative, using the pyparsing-defined constants + ``OpAssoc.RIGHT`` and ``OpAssoc.LEFT``. + - ``parse_action`` is the parse action to be associated with + expressions matching this operator expression (the parse action + tuple member may be omitted); if the parse action is passed + a tuple or list of functions, this is equivalent to calling + ``set_parse_action(*fn)`` + (:class:`ParserElement.set_parse_action`) + - ``lpar`` - expression for matching left-parentheses; if passed as a + str, then will be parsed as ``Suppress(lpar)``. If lpar is passed as + an expression (such as ``Literal('(')``), then it will be kept in + the parsed results, and grouped with them. (default= ``Suppress('(')``) + - ``rpar`` - expression for matching right-parentheses; if passed as a + str, then will be parsed as ``Suppress(rpar)``. If rpar is passed as + an expression (such as ``Literal(')')``), then it will be kept in + the parsed results, and grouped with them. (default= ``Suppress(')')``) + + Example:: + + # simple example of four-function arithmetic with ints and + # variable names + integer = pyparsing_common.signed_integer + varname = pyparsing_common.identifier + + arith_expr = infix_notation(integer | varname, + [ + ('-', 1, OpAssoc.RIGHT), + (one_of('* /'), 2, OpAssoc.LEFT), + (one_of('+ -'), 2, OpAssoc.LEFT), + ]) + + arith_expr.run_tests(''' + 5+3*6 + (5+3)*6 + -2--11 + ''', full_dump=False) + + prints:: + + 5+3*6 + [[5, '+', [3, '*', 6]]] + + (5+3)*6 + [[[5, '+', 3], '*', 6]] + + (5+x)*y + [[[5, '+', 'x'], '*', 'y']] + + -2--11 + [[['-', 2], '-', ['-', 11]]] + """ + + # captive version of FollowedBy that does not do parse actions or capture results names + class _FB(FollowedBy): + def parseImpl(self, instring, loc, doActions=True): + self.expr.try_parse(instring, loc) + return loc, [] + + _FB.__name__ = "FollowedBy>" + + ret = Forward() + if isinstance(lpar, str): + lpar = Suppress(lpar) + if isinstance(rpar, str): + rpar = Suppress(rpar) + + # if lpar and rpar are not suppressed, wrap in group + if not (isinstance(rpar, Suppress) and isinstance(rpar, Suppress)): + lastExpr = base_expr | Group(lpar + ret + rpar) + else: + lastExpr = base_expr | (lpar + ret + rpar) + + arity: int + rightLeftAssoc: opAssoc + pa: typing.Optional[ParseAction] + opExpr1: ParserElement + opExpr2: ParserElement + for i, operDef in enumerate(op_list): + opExpr, arity, rightLeftAssoc, pa = (operDef + (None,))[:4] # type: ignore[assignment] + if isinstance(opExpr, str_type): + opExpr = ParserElement._literalStringClass(opExpr) + opExpr = typing.cast(ParserElement, opExpr) + if arity == 3: + if not isinstance(opExpr, (tuple, list)) or len(opExpr) != 2: + raise ValueError( + "if numterms=3, opExpr must be a tuple or list of two expressions" + ) + opExpr1, opExpr2 = opExpr + term_name = f"{opExpr1}{opExpr2} term" + else: + term_name = f"{opExpr} term" + + if not 1 <= arity <= 3: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + + if rightLeftAssoc not in (OpAssoc.LEFT, OpAssoc.RIGHT): + raise ValueError("operator must indicate right or left associativity") + + thisExpr: ParserElement = Forward().set_name(term_name) + thisExpr = typing.cast(Forward, thisExpr) + if rightLeftAssoc is OpAssoc.LEFT: + if arity == 1: + matchExpr = _FB(lastExpr + opExpr) + Group(lastExpr + opExpr[1, ...]) + elif arity == 2: + if opExpr is not None: + matchExpr = _FB(lastExpr + opExpr + lastExpr) + Group( + lastExpr + (opExpr + lastExpr)[1, ...] + ) + else: + matchExpr = _FB(lastExpr + lastExpr) + Group(lastExpr[2, ...]) + elif arity == 3: + matchExpr = _FB( + lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr + ) + Group(lastExpr + OneOrMore(opExpr1 + lastExpr + opExpr2 + lastExpr)) + elif rightLeftAssoc is OpAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Opt): + opExpr = Opt(opExpr) + matchExpr = _FB(opExpr.expr + thisExpr) + Group(opExpr + thisExpr) + elif arity == 2: + if opExpr is not None: + matchExpr = _FB(lastExpr + opExpr + thisExpr) + Group( + lastExpr + (opExpr + thisExpr)[1, ...] + ) + else: + matchExpr = _FB(lastExpr + thisExpr) + Group( + lastExpr + thisExpr[1, ...] + ) + elif arity == 3: + matchExpr = _FB( + lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr + ) + Group(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + if pa: + if isinstance(pa, (tuple, list)): + matchExpr.set_parse_action(*pa) + else: + matchExpr.set_parse_action(pa) + thisExpr <<= (matchExpr | lastExpr).setName(term_name) + lastExpr = thisExpr + ret <<= lastExpr + return ret + + +def indentedBlock(blockStatementExpr, indentStack, indent=True, backup_stacks=[]): + """ + (DEPRECATED - use :class:`IndentedBlock` class instead) + Helper method for defining space-delimited indentation blocks, + such as those used to define block statements in Python source code. + + Parameters: + + - ``blockStatementExpr`` - expression defining syntax of statement that + is repeated within the indented block + - ``indentStack`` - list created by caller to manage indentation stack + (multiple ``statementWithIndentedBlock`` expressions within a single + grammar should share a common ``indentStack``) + - ``indent`` - boolean indicating whether block must be indented beyond + the current level; set to ``False`` for block of left-most statements + (default= ``True``) + + A valid block must contain at least one ``blockStatement``. + + (Note that indentedBlock uses internal parse actions which make it + incompatible with packrat parsing.) + + Example:: + + data = ''' + def A(z): + A1 + B = 100 + G = A2 + A2 + A3 + B + def BB(a,b,c): + BB1 + def BBA(): + bba1 + bba2 + bba3 + C + D + def spam(x,y): + def eggs(z): + pass + ''' + + + indentStack = [1] + stmt = Forward() + + identifier = Word(alphas, alphanums) + funcDecl = ("def" + identifier + Group("(" + Opt(delimitedList(identifier)) + ")") + ":") + func_body = indentedBlock(stmt, indentStack) + funcDef = Group(funcDecl + func_body) + + rvalue = Forward() + funcCall = Group(identifier + "(" + Opt(delimitedList(rvalue)) + ")") + rvalue << (funcCall | identifier | Word(nums)) + assignment = Group(identifier + "=" + rvalue) + stmt << (funcDef | assignment | identifier) + + module_body = stmt[1, ...] + + parseTree = module_body.parseString(data) + parseTree.pprint() + + prints:: + + [['def', + 'A', + ['(', 'z', ')'], + ':', + [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], + 'B', + ['def', + 'BB', + ['(', 'a', 'b', 'c', ')'], + ':', + [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], + 'C', + 'D', + ['def', + 'spam', + ['(', 'x', 'y', ')'], + ':', + [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] + """ + backup_stacks.append(indentStack[:]) + + def reset_stack(): + indentStack[:] = backup_stacks[-1] + + def checkPeerIndent(s, l, t): + if l >= len(s): + return + curCol = col(l, s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseException(s, l, "illegal nesting") + raise ParseException(s, l, "not a peer entry") + + def checkSubIndent(s, l, t): + curCol = col(l, s) + if curCol > indentStack[-1]: + indentStack.append(curCol) + else: + raise ParseException(s, l, "not a subentry") + + def checkUnindent(s, l, t): + if l >= len(s): + return + curCol = col(l, s) + if not (indentStack and curCol in indentStack): + raise ParseException(s, l, "not an unindent") + if curCol < indentStack[-1]: + indentStack.pop() + + NL = OneOrMore(LineEnd().set_whitespace_chars("\t ").suppress()) + INDENT = (Empty() + Empty().set_parse_action(checkSubIndent)).set_name("INDENT") + PEER = Empty().set_parse_action(checkPeerIndent).set_name("") + UNDENT = Empty().set_parse_action(checkUnindent).set_name("UNINDENT") + if indent: + smExpr = Group( + Opt(NL) + + INDENT + + OneOrMore(PEER + Group(blockStatementExpr) + Opt(NL)) + + UNDENT + ) + else: + smExpr = Group( + Opt(NL) + + OneOrMore(PEER + Group(blockStatementExpr) + Opt(NL)) + + Opt(UNDENT) + ) + + # add a parse action to remove backup_stack from list of backups + smExpr.add_parse_action( + lambda: backup_stacks.pop(-1) and None if backup_stacks else None + ) + smExpr.set_fail_action(lambda a, b, c, d: reset_stack()) + blockStatementExpr.ignore(_bslash + LineEnd()) + return smExpr.set_name("indented block") + + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +c_style_comment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + "*/").set_name( + "C style comment" +) +"Comment of the form ``/* ... */``" + +html_comment = Regex(r"").set_name("HTML comment") +"Comment of the form ````" + +rest_of_line = Regex(r".*").leave_whitespace().set_name("rest of line") +dbl_slash_comment = Regex(r"//(?:\\\n|[^\n])*").set_name("// comment") +"Comment of the form ``// ... (to end of line)``" + +cpp_style_comment = Combine( + Regex(r"/\*(?:[^*]|\*(?!/))*") + "*/" | dbl_slash_comment +).set_name("C++ style comment") +"Comment of either form :class:`c_style_comment` or :class:`dbl_slash_comment`" + +java_style_comment = cpp_style_comment +"Same as :class:`cpp_style_comment`" + +python_style_comment = Regex(r"#.*").set_name("Python style comment") +"Comment of the form ``# ... (to end of line)``" + + +# build list of built-in expressions, for future reference if a global default value +# gets updated +_builtin_exprs: List[ParserElement] = [ + v for v in vars().values() if isinstance(v, ParserElement) +] + + +# compatibility function, superseded by DelimitedList class +def delimited_list( + expr: Union[str, ParserElement], + delim: Union[str, ParserElement] = ",", + combine: bool = False, + min: typing.Optional[int] = None, + max: typing.Optional[int] = None, + *, + allow_trailing_delim: bool = False, +) -> ParserElement: + """(DEPRECATED - use :class:`DelimitedList` class)""" + return DelimitedList( + expr, delim, combine, min, max, allow_trailing_delim=allow_trailing_delim + ) + + +# pre-PEP8 compatible names +# fmt: off +opAssoc = OpAssoc +anyOpenTag = any_open_tag +anyCloseTag = any_close_tag +commonHTMLEntity = common_html_entity +cStyleComment = c_style_comment +htmlComment = html_comment +restOfLine = rest_of_line +dblSlashComment = dbl_slash_comment +cppStyleComment = cpp_style_comment +javaStyleComment = java_style_comment +pythonStyleComment = python_style_comment + +@replaced_by_pep8(DelimitedList) +def delimitedList(): ... + +@replaced_by_pep8(DelimitedList) +def delimited_list(): ... + +@replaced_by_pep8(counted_array) +def countedArray(): ... + +@replaced_by_pep8(match_previous_literal) +def matchPreviousLiteral(): ... + +@replaced_by_pep8(match_previous_expr) +def matchPreviousExpr(): ... + +@replaced_by_pep8(one_of) +def oneOf(): ... + +@replaced_by_pep8(dict_of) +def dictOf(): ... + +@replaced_by_pep8(original_text_for) +def originalTextFor(): ... + +@replaced_by_pep8(nested_expr) +def nestedExpr(): ... + +@replaced_by_pep8(make_html_tags) +def makeHTMLTags(): ... + +@replaced_by_pep8(make_xml_tags) +def makeXMLTags(): ... + +@replaced_by_pep8(replace_html_entity) +def replaceHTMLEntity(): ... + +@replaced_by_pep8(infix_notation) +def infixNotation(): ... +# fmt: on diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/results.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/results.py new file mode 100644 index 0000000..0313049 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/results.py @@ -0,0 +1,796 @@ +# results.py +from collections.abc import ( + MutableMapping, + Mapping, + MutableSequence, + Iterator, + Sequence, + Container, +) +import pprint +from typing import Tuple, Any, Dict, Set, List + +str_type: Tuple[type, ...] = (str, bytes) +_generator_type = type((_ for _ in ())) + + +class _ParseResultsWithOffset: + tup: Tuple["ParseResults", int] + __slots__ = ["tup"] + + def __init__(self, p1: "ParseResults", p2: int): + self.tup: Tuple[ParseResults, int] = (p1, p2) + + def __getitem__(self, i): + return self.tup[i] + + def __getstate__(self): + return self.tup + + def __setstate__(self, *args): + self.tup = args[0] + + +class ParseResults: + """Structured parse results, to provide multiple means of access to + the parsed data: + + - as a list (``len(results)``) + - by list index (``results[0], results[1]``, etc.) + - by attribute (``results.`` - see :class:`ParserElement.set_results_name`) + + Example:: + + integer = Word(nums) + date_str = (integer.set_results_name("year") + '/' + + integer.set_results_name("month") + '/' + + integer.set_results_name("day")) + # equivalent form: + # date_str = (integer("year") + '/' + # + integer("month") + '/' + # + integer("day")) + + # parse_string returns a ParseResults object + result = date_str.parse_string("1999/12/31") + + def test(s, fn=repr): + print(f"{s} -> {fn(eval(s))}") + test("list(result)") + test("result[0]") + test("result['month']") + test("result.day") + test("'month' in result") + test("'minutes' in result") + test("result.dump()", str) + + prints:: + + list(result) -> ['1999', '/', '12', '/', '31'] + result[0] -> '1999' + result['month'] -> '12' + result.day -> '31' + 'month' in result -> True + 'minutes' in result -> False + result.dump() -> ['1999', '/', '12', '/', '31'] + - day: '31' + - month: '12' + - year: '1999' + """ + + _null_values: Tuple[Any, ...] = (None, [], ()) + + _name: str + _parent: "ParseResults" + _all_names: Set[str] + _modal: bool + _toklist: List[Any] + _tokdict: Dict[str, Any] + + __slots__ = ( + "_name", + "_parent", + "_all_names", + "_modal", + "_toklist", + "_tokdict", + ) + + class List(list): + """ + Simple wrapper class to distinguish parsed list results that should be preserved + as actual Python lists, instead of being converted to :class:`ParseResults`:: + + LBRACK, RBRACK = map(pp.Suppress, "[]") + element = pp.Forward() + item = ppc.integer + element_list = LBRACK + pp.DelimitedList(element) + RBRACK + + # add parse actions to convert from ParseResults to actual Python collection types + def as_python_list(t): + return pp.ParseResults.List(t.as_list()) + element_list.add_parse_action(as_python_list) + + element <<= item | element_list + + element.run_tests(''' + 100 + [2,3,4] + [[2, 1],3,4] + [(2, 1),3,4] + (2,3,4) + ''', post_parse=lambda s, r: (r[0], type(r[0]))) + + prints:: + + 100 + (100, ) + + [2,3,4] + ([2, 3, 4], ) + + [[2, 1],3,4] + ([[2, 1], 3, 4], ) + + (Used internally by :class:`Group` when `aslist=True`.) + """ + + def __new__(cls, contained=None): + if contained is None: + contained = [] + + if not isinstance(contained, list): + raise TypeError( + f"{cls.__name__} may only be constructed with a list, not {type(contained).__name__}" + ) + + return list.__new__(cls) + + def __new__(cls, toklist=None, name=None, **kwargs): + if isinstance(toklist, ParseResults): + return toklist + self = object.__new__(cls) + self._name = None + self._parent = None + self._all_names = set() + + if toklist is None: + self._toklist = [] + elif isinstance(toklist, (list, _generator_type)): + self._toklist = ( + [toklist[:]] + if isinstance(toklist, ParseResults.List) + else list(toklist) + ) + else: + self._toklist = [toklist] + self._tokdict = dict() + return self + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( + self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance + ): + self._tokdict: Dict[str, _ParseResultsWithOffset] + self._modal = modal + if name is not None and name != "": + if isinstance(name, int): + name = str(name) + if not modal: + self._all_names = {name} + self._name = name + if toklist not in self._null_values: + if isinstance(toklist, (str_type, type)): + toklist = [toklist] + if asList: + if isinstance(toklist, ParseResults): + self[name] = _ParseResultsWithOffset( + ParseResults(toklist._toklist), 0 + ) + else: + self[name] = _ParseResultsWithOffset( + ParseResults(toklist[0]), 0 + ) + self[name]._name = name + else: + try: + self[name] = toklist[0] + except (KeyError, TypeError, IndexError): + if toklist is not self: + self[name] = toklist + else: + self._name = name + + def __getitem__(self, i): + if isinstance(i, (int, slice)): + return self._toklist[i] + else: + if i not in self._all_names: + return self._tokdict[i][-1][0] + else: + return ParseResults([v[0] for v in self._tokdict[i]]) + + def __setitem__(self, k, v, isinstance=isinstance): + if isinstance(v, _ParseResultsWithOffset): + self._tokdict[k] = self._tokdict.get(k, list()) + [v] + sub = v[0] + elif isinstance(k, (int, slice)): + self._toklist[k] = v + sub = v + else: + self._tokdict[k] = self._tokdict.get(k, list()) + [ + _ParseResultsWithOffset(v, 0) + ] + sub = v + if isinstance(sub, ParseResults): + sub._parent = self + + def __delitem__(self, i): + if isinstance(i, (int, slice)): + mylen = len(self._toklist) + del self._toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i + 1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name, occurrences in self._tokdict.items(): + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset( + value, position - (position > j) + ) + else: + del self._tokdict[i] + + def __contains__(self, k) -> bool: + return k in self._tokdict + + def __len__(self) -> int: + return len(self._toklist) + + def __bool__(self) -> bool: + return not not (self._toklist or self._tokdict) + + def __iter__(self) -> Iterator: + return iter(self._toklist) + + def __reversed__(self) -> Iterator: + return iter(self._toklist[::-1]) + + def keys(self): + return iter(self._tokdict) + + def values(self): + return (self[k] for k in self.keys()) + + def items(self): + return ((k, self[k]) for k in self.keys()) + + def haskeys(self) -> bool: + """ + Since ``keys()`` returns an iterator, this method is helpful in bypassing + code that looks for the existence of any defined results names.""" + return not not self._tokdict + + def pop(self, *args, **kwargs): + """ + Removes and returns item at specified index (default= ``last``). + Supports both ``list`` and ``dict`` semantics for ``pop()``. If + passed no argument or an integer argument, it will use ``list`` + semantics and pop tokens from the list of parsed tokens. If passed + a non-integer argument (most likely a string), it will use ``dict`` + semantics and pop the corresponding value from any defined results + names. A second default return value argument is supported, just as in + ``dict.pop()``. + + Example:: + + numlist = Word(nums)[...] + print(numlist.parse_string("0 123 321")) # -> ['0', '123', '321'] + + def remove_first(tokens): + tokens.pop(0) + numlist.add_parse_action(remove_first) + print(numlist.parse_string("0 123 321")) # -> ['123', '321'] + + label = Word(alphas) + patt = label("LABEL") + Word(nums)[1, ...] + print(patt.parse_string("AAB 123 321").dump()) + + # Use pop() in a parse action to remove named result (note that corresponding value is not + # removed from list form of results) + def remove_LABEL(tokens): + tokens.pop("LABEL") + return tokens + patt.add_parse_action(remove_LABEL) + print(patt.parse_string("AAB 123 321").dump()) + + prints:: + + ['AAB', '123', '321'] + - LABEL: 'AAB' + + ['AAB', '123', '321'] + """ + if not args: + args = [-1] + for k, v in kwargs.items(): + if k == "default": + args = (args[0], v) + else: + raise TypeError(f"pop() got an unexpected keyword argument {k!r}") + if isinstance(args[0], int) or len(args) == 1 or args[0] in self: + index = args[0] + ret = self[index] + del self[index] + return ret + else: + defaultvalue = args[1] + return defaultvalue + + def get(self, key, default_value=None): + """ + Returns named result matching the given key, or if there is no + such name, then returns the given ``default_value`` or ``None`` if no + ``default_value`` is specified. + + Similar to ``dict.get()``. + + Example:: + + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parse_string("1999/12/31") + print(result.get("year")) # -> '1999' + print(result.get("hour", "not specified")) # -> 'not specified' + print(result.get("hour")) # -> None + """ + if key in self: + return self[key] + else: + return default_value + + def insert(self, index, ins_string): + """ + Inserts new element at location index in the list of parsed tokens. + + Similar to ``list.insert()``. + + Example:: + + numlist = Word(nums)[...] + print(numlist.parse_string("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to insert the parse location in the front of the parsed results + def insert_locn(locn, tokens): + tokens.insert(0, locn) + numlist.add_parse_action(insert_locn) + print(numlist.parse_string("0 123 321")) # -> [0, '0', '123', '321'] + """ + self._toklist.insert(index, ins_string) + # fixup indices in token dictionary + for name, occurrences in self._tokdict.items(): + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset( + value, position + (position > index) + ) + + def append(self, item): + """ + Add single element to end of ``ParseResults`` list of elements. + + Example:: + + numlist = Word(nums)[...] + print(numlist.parse_string("0 123 321")) # -> ['0', '123', '321'] + + # use a parse action to compute the sum of the parsed integers, and add it to the end + def append_sum(tokens): + tokens.append(sum(map(int, tokens))) + numlist.add_parse_action(append_sum) + print(numlist.parse_string("0 123 321")) # -> ['0', '123', '321', 444] + """ + self._toklist.append(item) + + def extend(self, itemseq): + """ + Add sequence of elements to end of ``ParseResults`` list of elements. + + Example:: + + patt = Word(alphas)[1, ...] + + # use a parse action to append the reverse of the matched strings, to make a palindrome + def make_palindrome(tokens): + tokens.extend(reversed([t[::-1] for t in tokens])) + return ''.join(tokens) + patt.add_parse_action(make_palindrome) + print(patt.parse_string("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' + """ + if isinstance(itemseq, ParseResults): + self.__iadd__(itemseq) + else: + self._toklist.extend(itemseq) + + def clear(self): + """ + Clear all elements and results names. + """ + del self._toklist[:] + self._tokdict.clear() + + def __getattr__(self, name): + try: + return self[name] + except KeyError: + if name.startswith("__"): + raise AttributeError(name) + return "" + + def __add__(self, other: "ParseResults") -> "ParseResults": + ret = self.copy() + ret += other + return ret + + def __iadd__(self, other: "ParseResults") -> "ParseResults": + if not other: + return self + + if other._tokdict: + offset = len(self._toklist) + addoffset = lambda a: offset if a < 0 else a + offset + otheritems = other._tokdict.items() + otherdictitems = [ + (k, _ParseResultsWithOffset(v[0], addoffset(v[1]))) + for k, vlist in otheritems + for v in vlist + ] + for k, v in otherdictitems: + self[k] = v + if isinstance(v[0], ParseResults): + v[0]._parent = self + + self._toklist += other._toklist + self._all_names |= other._all_names + return self + + def __radd__(self, other) -> "ParseResults": + if isinstance(other, int) and other == 0: + # useful for merging many ParseResults using sum() builtin + return self.copy() + else: + # this may raise a TypeError - so be it + return other + self + + def __repr__(self) -> str: + return f"{type(self).__name__}({self._toklist!r}, {self.as_dict()})" + + def __str__(self) -> str: + return ( + "[" + + ", ".join( + [ + str(i) if isinstance(i, ParseResults) else repr(i) + for i in self._toklist + ] + ) + + "]" + ) + + def _asStringList(self, sep=""): + out = [] + for item in self._toklist: + if out and sep: + out.append(sep) + if isinstance(item, ParseResults): + out += item._asStringList() + else: + out.append(str(item)) + return out + + def as_list(self) -> list: + """ + Returns the parse results as a nested list of matching tokens, all converted to strings. + + Example:: + + patt = Word(alphas)[1, ...] + result = patt.parse_string("sldkj lsdkj sldkj") + # even though the result prints in string-like form, it is actually a pyparsing ParseResults + print(type(result), result) # -> ['sldkj', 'lsdkj', 'sldkj'] + + # Use as_list() to create an actual list + result_list = result.as_list() + print(type(result_list), result_list) # -> ['sldkj', 'lsdkj', 'sldkj'] + """ + return [ + res.as_list() if isinstance(res, ParseResults) else res + for res in self._toklist + ] + + def as_dict(self) -> dict: + """ + Returns the named parse results as a nested dictionary. + + Example:: + + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parse_string('12/31/1999') + print(type(result), repr(result)) # -> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) + + result_dict = result.as_dict() + print(type(result_dict), repr(result_dict)) # -> {'day': '1999', 'year': '12', 'month': '31'} + + # even though a ParseResults supports dict-like access, sometime you just need to have a dict + import json + print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable + print(json.dumps(result.as_dict())) # -> {"month": "31", "day": "1999", "year": "12"} + """ + + def to_item(obj): + if isinstance(obj, ParseResults): + return obj.as_dict() if obj.haskeys() else [to_item(v) for v in obj] + else: + return obj + + return dict((k, to_item(v)) for k, v in self.items()) + + def copy(self) -> "ParseResults": + """ + Returns a new shallow copy of a :class:`ParseResults` object. `ParseResults` + items contained within the source are shared with the copy. Use + :class:`ParseResults.deepcopy()` to create a copy with its own separate + content values. + """ + ret = ParseResults(self._toklist) + ret._tokdict = self._tokdict.copy() + ret._parent = self._parent + ret._all_names |= self._all_names + ret._name = self._name + return ret + + def deepcopy(self) -> "ParseResults": + """ + Returns a new deep copy of a :class:`ParseResults` object. + """ + ret = self.copy() + # replace values with copies if they are of known mutable types + for i, obj in enumerate(self._toklist): + if isinstance(obj, ParseResults): + self._toklist[i] = obj.deepcopy() + elif isinstance(obj, (str, bytes)): + pass + elif isinstance(obj, MutableMapping): + self._toklist[i] = dest = type(obj)() + for k, v in obj.items(): + dest[k] = v.deepcopy() if isinstance(v, ParseResults) else v + elif isinstance(obj, Container): + self._toklist[i] = type(obj)( + v.deepcopy() if isinstance(v, ParseResults) else v for v in obj + ) + return ret + + def get_name(self): + r""" + Returns the results name for this token expression. Useful when several + different expressions might match at a particular location. + + Example:: + + integer = Word(nums) + ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") + house_number_expr = Suppress('#') + Word(nums, alphanums) + user_data = (Group(house_number_expr)("house_number") + | Group(ssn_expr)("ssn") + | Group(integer)("age")) + user_info = user_data[1, ...] + + result = user_info.parse_string("22 111-22-3333 #221B") + for item in result: + print(item.get_name(), ':', item[0]) + + prints:: + + age : 22 + ssn : 111-22-3333 + house_number : 221B + """ + if self._name: + return self._name + elif self._parent: + par: "ParseResults" = self._parent + parent_tokdict_items = par._tokdict.items() + return next( + ( + k + for k, vlist in parent_tokdict_items + for v, loc in vlist + if v is self + ), + None, + ) + elif ( + len(self) == 1 + and len(self._tokdict) == 1 + and next(iter(self._tokdict.values()))[0][1] in (0, -1) + ): + return next(iter(self._tokdict.keys())) + else: + return None + + def dump(self, indent="", full=True, include_list=True, _depth=0) -> str: + """ + Diagnostic method for listing out the contents of + a :class:`ParseResults`. Accepts an optional ``indent`` argument so + that this string can be embedded in a nested display of other data. + + Example:: + + integer = Word(nums) + date_str = integer("year") + '/' + integer("month") + '/' + integer("day") + + result = date_str.parse_string('1999/12/31') + print(result.dump()) + + prints:: + + ['1999', '/', '12', '/', '31'] + - day: '31' + - month: '12' + - year: '1999' + """ + out = [] + NL = "\n" + out.append(indent + str(self.as_list()) if include_list else "") + + if full: + if self.haskeys(): + items = sorted((str(k), v) for k, v in self.items()) + for k, v in items: + if out: + out.append(NL) + out.append(f"{indent}{(' ' * _depth)}- {k}: ") + if isinstance(v, ParseResults): + if v: + out.append( + v.dump( + indent=indent, + full=full, + include_list=include_list, + _depth=_depth + 1, + ) + ) + else: + out.append(str(v)) + else: + out.append(repr(v)) + if any(isinstance(vv, ParseResults) for vv in self): + v = self + for i, vv in enumerate(v): + if isinstance(vv, ParseResults): + out.append( + "\n{}{}[{}]:\n{}{}{}".format( + indent, + (" " * (_depth)), + i, + indent, + (" " * (_depth + 1)), + vv.dump( + indent=indent, + full=full, + include_list=include_list, + _depth=_depth + 1, + ), + ) + ) + else: + out.append( + "\n%s%s[%d]:\n%s%s%s" + % ( + indent, + (" " * (_depth)), + i, + indent, + (" " * (_depth + 1)), + str(vv), + ) + ) + + return "".join(out) + + def pprint(self, *args, **kwargs): + """ + Pretty-printer for parsed results as a list, using the + `pprint `_ module. + Accepts additional positional or keyword args as defined for + `pprint.pprint `_ . + + Example:: + + ident = Word(alphas, alphanums) + num = Word(nums) + func = Forward() + term = ident | num | Group('(' + func + ')') + func <<= ident + Group(Optional(DelimitedList(term))) + result = func.parse_string("fna a,b,(fnb c,d,200),100") + result.pprint(width=40) + + prints:: + + ['fna', + ['a', + 'b', + ['(', 'fnb', ['c', 'd', '200'], ')'], + '100']] + """ + pprint.pprint(self.as_list(), *args, **kwargs) + + # add support for pickle protocol + def __getstate__(self): + return ( + self._toklist, + ( + self._tokdict.copy(), + None, + self._all_names, + self._name, + ), + ) + + def __setstate__(self, state): + self._toklist, (self._tokdict, par, inAccumNames, self._name) = state + self._all_names = set(inAccumNames) + self._parent = None + + def __getnewargs__(self): + return self._toklist, self._name + + def __dir__(self): + return dir(type(self)) + list(self.keys()) + + @classmethod + def from_dict(cls, other, name=None) -> "ParseResults": + """ + Helper classmethod to construct a ``ParseResults`` from a ``dict``, preserving the + name-value relations as results names. If an optional ``name`` argument is + given, a nested ``ParseResults`` will be returned. + """ + + def is_iterable(obj): + try: + iter(obj) + except Exception: + return False + # str's are iterable, but in pyparsing, we don't want to iterate over them + else: + return not isinstance(obj, str_type) + + ret = cls([]) + for k, v in other.items(): + if isinstance(v, Mapping): + ret += cls.from_dict(v, name=k) + else: + ret += cls([v], name=k, asList=is_iterable(v)) + if name is not None: + ret = cls([ret], name=name) + return ret + + asList = as_list + """Deprecated - use :class:`as_list`""" + asDict = as_dict + """Deprecated - use :class:`as_dict`""" + getName = get_name + """Deprecated - use :class:`get_name`""" + + +MutableMapping.register(ParseResults) +MutableSequence.register(ParseResults) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/testing.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/testing.py new file mode 100644 index 0000000..6a254c1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/testing.py @@ -0,0 +1,331 @@ +# testing.py + +from contextlib import contextmanager +import typing + +from .core import ( + ParserElement, + ParseException, + Keyword, + __diag__, + __compat__, +) + + +class pyparsing_test: + """ + namespace class for classes useful in writing unit tests + """ + + class reset_pyparsing_context: + """ + Context manager to be used when writing unit tests that modify pyparsing config values: + - packrat parsing + - bounded recursion parsing + - default whitespace characters. + - default keyword characters + - literal string auto-conversion class + - __diag__ settings + + Example:: + + with reset_pyparsing_context(): + # test that literals used to construct a grammar are automatically suppressed + ParserElement.inlineLiteralsUsing(Suppress) + + term = Word(alphas) | Word(nums) + group = Group('(' + term[...] + ')') + + # assert that the '()' characters are not included in the parsed tokens + self.assertParseAndCheckList(group, "(abc 123 def)", ['abc', '123', 'def']) + + # after exiting context manager, literals are converted to Literal expressions again + """ + + def __init__(self): + self._save_context = {} + + def save(self): + self._save_context["default_whitespace"] = ParserElement.DEFAULT_WHITE_CHARS + self._save_context["default_keyword_chars"] = Keyword.DEFAULT_KEYWORD_CHARS + + self._save_context[ + "literal_string_class" + ] = ParserElement._literalStringClass + + self._save_context["verbose_stacktrace"] = ParserElement.verbose_stacktrace + + self._save_context["packrat_enabled"] = ParserElement._packratEnabled + if ParserElement._packratEnabled: + self._save_context[ + "packrat_cache_size" + ] = ParserElement.packrat_cache.size + else: + self._save_context["packrat_cache_size"] = None + self._save_context["packrat_parse"] = ParserElement._parse + self._save_context[ + "recursion_enabled" + ] = ParserElement._left_recursion_enabled + + self._save_context["__diag__"] = { + name: getattr(__diag__, name) for name in __diag__._all_names + } + + self._save_context["__compat__"] = { + "collect_all_And_tokens": __compat__.collect_all_And_tokens + } + + return self + + def restore(self): + # reset pyparsing global state + if ( + ParserElement.DEFAULT_WHITE_CHARS + != self._save_context["default_whitespace"] + ): + ParserElement.set_default_whitespace_chars( + self._save_context["default_whitespace"] + ) + + ParserElement.verbose_stacktrace = self._save_context["verbose_stacktrace"] + + Keyword.DEFAULT_KEYWORD_CHARS = self._save_context["default_keyword_chars"] + ParserElement.inlineLiteralsUsing( + self._save_context["literal_string_class"] + ) + + for name, value in self._save_context["__diag__"].items(): + (__diag__.enable if value else __diag__.disable)(name) + + ParserElement._packratEnabled = False + if self._save_context["packrat_enabled"]: + ParserElement.enable_packrat(self._save_context["packrat_cache_size"]) + else: + ParserElement._parse = self._save_context["packrat_parse"] + ParserElement._left_recursion_enabled = self._save_context[ + "recursion_enabled" + ] + + __compat__.collect_all_And_tokens = self._save_context["__compat__"] + + return self + + def copy(self): + ret = type(self)() + ret._save_context.update(self._save_context) + return ret + + def __enter__(self): + return self.save() + + def __exit__(self, *args): + self.restore() + + class TestParseResultsAsserts: + """ + A mixin class to add parse results assertion methods to normal unittest.TestCase classes. + """ + + def assertParseResultsEquals( + self, result, expected_list=None, expected_dict=None, msg=None + ): + """ + Unit test assertion to compare a :class:`ParseResults` object with an optional ``expected_list``, + and compare any defined results names with an optional ``expected_dict``. + """ + if expected_list is not None: + self.assertEqual(expected_list, result.as_list(), msg=msg) + if expected_dict is not None: + self.assertEqual(expected_dict, result.as_dict(), msg=msg) + + def assertParseAndCheckList( + self, expr, test_string, expected_list, msg=None, verbose=True + ): + """ + Convenience wrapper assert to test a parser element and input string, and assert that + the resulting ``ParseResults.asList()`` is equal to the ``expected_list``. + """ + result = expr.parse_string(test_string, parse_all=True) + if verbose: + print(result.dump()) + else: + print(result.as_list()) + self.assertParseResultsEquals(result, expected_list=expected_list, msg=msg) + + def assertParseAndCheckDict( + self, expr, test_string, expected_dict, msg=None, verbose=True + ): + """ + Convenience wrapper assert to test a parser element and input string, and assert that + the resulting ``ParseResults.asDict()`` is equal to the ``expected_dict``. + """ + result = expr.parse_string(test_string, parseAll=True) + if verbose: + print(result.dump()) + else: + print(result.as_list()) + self.assertParseResultsEquals(result, expected_dict=expected_dict, msg=msg) + + def assertRunTestResults( + self, run_tests_report, expected_parse_results=None, msg=None + ): + """ + Unit test assertion to evaluate output of ``ParserElement.runTests()``. If a list of + list-dict tuples is given as the ``expected_parse_results`` argument, then these are zipped + with the report tuples returned by ``runTests`` and evaluated using ``assertParseResultsEquals``. + Finally, asserts that the overall ``runTests()`` success value is ``True``. + + :param run_tests_report: tuple(bool, [tuple(str, ParseResults or Exception)]) returned from runTests + :param expected_parse_results (optional): [tuple(str, list, dict, Exception)] + """ + run_test_success, run_test_results = run_tests_report + + if expected_parse_results is not None: + merged = [ + (*rpt, expected) + for rpt, expected in zip(run_test_results, expected_parse_results) + ] + for test_string, result, expected in merged: + # expected should be a tuple containing a list and/or a dict or an exception, + # and optional failure message string + # an empty tuple will skip any result validation + fail_msg = next( + (exp for exp in expected if isinstance(exp, str)), None + ) + expected_exception = next( + ( + exp + for exp in expected + if isinstance(exp, type) and issubclass(exp, Exception) + ), + None, + ) + if expected_exception is not None: + with self.assertRaises( + expected_exception=expected_exception, msg=fail_msg or msg + ): + if isinstance(result, Exception): + raise result + else: + expected_list = next( + (exp for exp in expected if isinstance(exp, list)), None + ) + expected_dict = next( + (exp for exp in expected if isinstance(exp, dict)), None + ) + if (expected_list, expected_dict) != (None, None): + self.assertParseResultsEquals( + result, + expected_list=expected_list, + expected_dict=expected_dict, + msg=fail_msg or msg, + ) + else: + # warning here maybe? + print(f"no validation for {test_string!r}") + + # do this last, in case some specific test results can be reported instead + self.assertTrue( + run_test_success, msg=msg if msg is not None else "failed runTests" + ) + + @contextmanager + def assertRaisesParseException(self, exc_type=ParseException, msg=None): + with self.assertRaises(exc_type, msg=msg): + yield + + @staticmethod + def with_line_numbers( + s: str, + start_line: typing.Optional[int] = None, + end_line: typing.Optional[int] = None, + expand_tabs: bool = True, + eol_mark: str = "|", + mark_spaces: typing.Optional[str] = None, + mark_control: typing.Optional[str] = None, + ) -> str: + """ + Helpful method for debugging a parser - prints a string with line and column numbers. + (Line and column numbers are 1-based.) + + :param s: tuple(bool, str - string to be printed with line and column numbers + :param start_line: int - (optional) starting line number in s to print (default=1) + :param end_line: int - (optional) ending line number in s to print (default=len(s)) + :param expand_tabs: bool - (optional) expand tabs to spaces, to match the pyparsing default + :param eol_mark: str - (optional) string to mark the end of lines, helps visualize trailing spaces (default="|") + :param mark_spaces: str - (optional) special character to display in place of spaces + :param mark_control: str - (optional) convert non-printing control characters to a placeholding + character; valid values: + - "unicode" - replaces control chars with Unicode symbols, such as "␍" and "␊" + - any single character string - replace control characters with given string + - None (default) - string is displayed as-is + + :return: str - input string with leading line numbers and column number headers + """ + if expand_tabs: + s = s.expandtabs() + if mark_control is not None: + mark_control = typing.cast(str, mark_control) + if mark_control == "unicode": + transtable_map = { + c: u for c, u in zip(range(0, 33), range(0x2400, 0x2433)) + } + transtable_map[127] = 0x2421 + tbl = str.maketrans(transtable_map) + eol_mark = "" + else: + ord_mark_control = ord(mark_control) + tbl = str.maketrans( + {c: ord_mark_control for c in list(range(0, 32)) + [127]} + ) + s = s.translate(tbl) + if mark_spaces is not None and mark_spaces != " ": + if mark_spaces == "unicode": + tbl = str.maketrans({9: 0x2409, 32: 0x2423}) + s = s.translate(tbl) + else: + s = s.replace(" ", mark_spaces) + if start_line is None: + start_line = 1 + if end_line is None: + end_line = len(s) + end_line = min(end_line, len(s)) + start_line = min(max(1, start_line), end_line) + + if mark_control != "unicode": + s_lines = s.splitlines()[start_line - 1 : end_line] + else: + s_lines = [line + "␊" for line in s.split("␊")[start_line - 1 : end_line]] + if not s_lines: + return "" + + lineno_width = len(str(end_line)) + max_line_len = max(len(line) for line in s_lines) + lead = " " * (lineno_width + 1) + if max_line_len >= 99: + header0 = ( + lead + + "".join( + f"{' ' * 99}{(i + 1) % 100}" + for i in range(max(max_line_len // 100, 1)) + ) + + "\n" + ) + else: + header0 = "" + header1 = ( + header0 + + lead + + "".join(f" {(i + 1) % 10}" for i in range(-(-max_line_len // 10))) + + "\n" + ) + header2 = lead + "1234567890" * (-(-max_line_len // 10)) + "\n" + return ( + header1 + + header2 + + "\n".join( + f"{i:{lineno_width}d}:{line}{eol_mark}" + for i, line in enumerate(s_lines, start=start_line) + ) + + "\n" + ) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/unicode.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/unicode.py new file mode 100644 index 0000000..ec0b3a4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/unicode.py @@ -0,0 +1,361 @@ +# unicode.py + +import sys +from itertools import filterfalse +from typing import List, Tuple, Union + + +class _lazyclassproperty: + def __init__(self, fn): + self.fn = fn + self.__doc__ = fn.__doc__ + self.__name__ = fn.__name__ + + def __get__(self, obj, cls): + if cls is None: + cls = type(obj) + if not hasattr(cls, "_intern") or any( + cls._intern is getattr(superclass, "_intern", []) + for superclass in cls.__mro__[1:] + ): + cls._intern = {} + attrname = self.fn.__name__ + if attrname not in cls._intern: + cls._intern[attrname] = self.fn(cls) + return cls._intern[attrname] + + +UnicodeRangeList = List[Union[Tuple[int, int], Tuple[int]]] + + +class unicode_set: + """ + A set of Unicode characters, for language-specific strings for + ``alphas``, ``nums``, ``alphanums``, and ``printables``. + A unicode_set is defined by a list of ranges in the Unicode character + set, in a class attribute ``_ranges``. Ranges can be specified using + 2-tuples or a 1-tuple, such as:: + + _ranges = [ + (0x0020, 0x007e), + (0x00a0, 0x00ff), + (0x0100,), + ] + + Ranges are left- and right-inclusive. A 1-tuple of (x,) is treated as (x, x). + + A unicode set can also be defined using multiple inheritance of other unicode sets:: + + class CJK(Chinese, Japanese, Korean): + pass + """ + + _ranges: UnicodeRangeList = [] + + @_lazyclassproperty + def _chars_for_ranges(cls): + ret = [] + for cc in cls.__mro__: + if cc is unicode_set: + break + for rr in getattr(cc, "_ranges", ()): + ret.extend(range(rr[0], rr[-1] + 1)) + return [chr(c) for c in sorted(set(ret))] + + @_lazyclassproperty + def printables(cls): + """all non-whitespace characters in this range""" + return "".join(filterfalse(str.isspace, cls._chars_for_ranges)) + + @_lazyclassproperty + def alphas(cls): + """all alphabetic characters in this range""" + return "".join(filter(str.isalpha, cls._chars_for_ranges)) + + @_lazyclassproperty + def nums(cls): + """all numeric digit characters in this range""" + return "".join(filter(str.isdigit, cls._chars_for_ranges)) + + @_lazyclassproperty + def alphanums(cls): + """all alphanumeric characters in this range""" + return cls.alphas + cls.nums + + @_lazyclassproperty + def identchars(cls): + """all characters in this range that are valid identifier characters, plus underscore '_'""" + return "".join( + sorted( + set( + "".join(filter(str.isidentifier, cls._chars_for_ranges)) + + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzªµº" + + "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ" + + "_" + ) + ) + ) + + @_lazyclassproperty + def identbodychars(cls): + """ + all characters in this range that are valid identifier body characters, + plus the digits 0-9, and · (Unicode MIDDLE DOT) + """ + return "".join( + sorted( + set( + cls.identchars + + "0123456789·" + + "".join( + [c for c in cls._chars_for_ranges if ("_" + c).isidentifier()] + ) + ) + ) + ) + + @_lazyclassproperty + def identifier(cls): + """ + a pyparsing Word expression for an identifier using this range's definitions for + identchars and identbodychars + """ + from pip._vendor.pyparsing import Word + + return Word(cls.identchars, cls.identbodychars) + + +class pyparsing_unicode(unicode_set): + """ + A namespace class for defining common language unicode_sets. + """ + + # fmt: off + + # define ranges in language character sets + _ranges: UnicodeRangeList = [ + (0x0020, sys.maxunicode), + ] + + class BasicMultilingualPlane(unicode_set): + """Unicode set for the Basic Multilingual Plane""" + _ranges: UnicodeRangeList = [ + (0x0020, 0xFFFF), + ] + + class Latin1(unicode_set): + """Unicode set for Latin-1 Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x0020, 0x007E), + (0x00A0, 0x00FF), + ] + + class LatinA(unicode_set): + """Unicode set for Latin-A Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x0100, 0x017F), + ] + + class LatinB(unicode_set): + """Unicode set for Latin-B Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x0180, 0x024F), + ] + + class Greek(unicode_set): + """Unicode set for Greek Unicode Character Ranges""" + _ranges: UnicodeRangeList = [ + (0x0342, 0x0345), + (0x0370, 0x0377), + (0x037A, 0x037F), + (0x0384, 0x038A), + (0x038C,), + (0x038E, 0x03A1), + (0x03A3, 0x03E1), + (0x03F0, 0x03FF), + (0x1D26, 0x1D2A), + (0x1D5E,), + (0x1D60,), + (0x1D66, 0x1D6A), + (0x1F00, 0x1F15), + (0x1F18, 0x1F1D), + (0x1F20, 0x1F45), + (0x1F48, 0x1F4D), + (0x1F50, 0x1F57), + (0x1F59,), + (0x1F5B,), + (0x1F5D,), + (0x1F5F, 0x1F7D), + (0x1F80, 0x1FB4), + (0x1FB6, 0x1FC4), + (0x1FC6, 0x1FD3), + (0x1FD6, 0x1FDB), + (0x1FDD, 0x1FEF), + (0x1FF2, 0x1FF4), + (0x1FF6, 0x1FFE), + (0x2129,), + (0x2719, 0x271A), + (0xAB65,), + (0x10140, 0x1018D), + (0x101A0,), + (0x1D200, 0x1D245), + (0x1F7A1, 0x1F7A7), + ] + + class Cyrillic(unicode_set): + """Unicode set for Cyrillic Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x0400, 0x052F), + (0x1C80, 0x1C88), + (0x1D2B,), + (0x1D78,), + (0x2DE0, 0x2DFF), + (0xA640, 0xA672), + (0xA674, 0xA69F), + (0xFE2E, 0xFE2F), + ] + + class Chinese(unicode_set): + """Unicode set for Chinese Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x2E80, 0x2E99), + (0x2E9B, 0x2EF3), + (0x31C0, 0x31E3), + (0x3400, 0x4DB5), + (0x4E00, 0x9FEF), + (0xA700, 0xA707), + (0xF900, 0xFA6D), + (0xFA70, 0xFAD9), + (0x16FE2, 0x16FE3), + (0x1F210, 0x1F212), + (0x1F214, 0x1F23B), + (0x1F240, 0x1F248), + (0x20000, 0x2A6D6), + (0x2A700, 0x2B734), + (0x2B740, 0x2B81D), + (0x2B820, 0x2CEA1), + (0x2CEB0, 0x2EBE0), + (0x2F800, 0x2FA1D), + ] + + class Japanese(unicode_set): + """Unicode set for Japanese Unicode Character Range, combining Kanji, Hiragana, and Katakana ranges""" + + class Kanji(unicode_set): + "Unicode set for Kanji Unicode Character Range" + _ranges: UnicodeRangeList = [ + (0x4E00, 0x9FBF), + (0x3000, 0x303F), + ] + + class Hiragana(unicode_set): + """Unicode set for Hiragana Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x3041, 0x3096), + (0x3099, 0x30A0), + (0x30FC,), + (0xFF70,), + (0x1B001,), + (0x1B150, 0x1B152), + (0x1F200,), + ] + + class Katakana(unicode_set): + """Unicode set for Katakana Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x3099, 0x309C), + (0x30A0, 0x30FF), + (0x31F0, 0x31FF), + (0x32D0, 0x32FE), + (0xFF65, 0xFF9F), + (0x1B000,), + (0x1B164, 0x1B167), + (0x1F201, 0x1F202), + (0x1F213,), + ] + + 漢字 = Kanji + カタカナ = Katakana + ひらがな = Hiragana + + _ranges = ( + Kanji._ranges + + Hiragana._ranges + + Katakana._ranges + ) + + class Hangul(unicode_set): + """Unicode set for Hangul (Korean) Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x1100, 0x11FF), + (0x302E, 0x302F), + (0x3131, 0x318E), + (0x3200, 0x321C), + (0x3260, 0x327B), + (0x327E,), + (0xA960, 0xA97C), + (0xAC00, 0xD7A3), + (0xD7B0, 0xD7C6), + (0xD7CB, 0xD7FB), + (0xFFA0, 0xFFBE), + (0xFFC2, 0xFFC7), + (0xFFCA, 0xFFCF), + (0xFFD2, 0xFFD7), + (0xFFDA, 0xFFDC), + ] + + Korean = Hangul + + class CJK(Chinese, Japanese, Hangul): + """Unicode set for combined Chinese, Japanese, and Korean (CJK) Unicode Character Range""" + + class Thai(unicode_set): + """Unicode set for Thai Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x0E01, 0x0E3A), + (0x0E3F, 0x0E5B) + ] + + class Arabic(unicode_set): + """Unicode set for Arabic Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x0600, 0x061B), + (0x061E, 0x06FF), + (0x0700, 0x077F), + ] + + class Hebrew(unicode_set): + """Unicode set for Hebrew Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x0591, 0x05C7), + (0x05D0, 0x05EA), + (0x05EF, 0x05F4), + (0xFB1D, 0xFB36), + (0xFB38, 0xFB3C), + (0xFB3E,), + (0xFB40, 0xFB41), + (0xFB43, 0xFB44), + (0xFB46, 0xFB4F), + ] + + class Devanagari(unicode_set): + """Unicode set for Devanagari Unicode Character Range""" + _ranges: UnicodeRangeList = [ + (0x0900, 0x097F), + (0xA8E0, 0xA8FF) + ] + + BMP = BasicMultilingualPlane + + # add language identifiers using language Unicode + العربية = Arabic + 中文 = Chinese + кириллица = Cyrillic + Ελληνικά = Greek + עִברִית = Hebrew + 日本語 = Japanese + 한국어 = Korean + ไทย = Thai + देवनागरी = Devanagari + + # fmt: on diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/util.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/util.py new file mode 100644 index 0000000..d8d3f41 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/util.py @@ -0,0 +1,284 @@ +# util.py +import inspect +import warnings +import types +import collections +import itertools +from functools import lru_cache, wraps +from typing import Callable, List, Union, Iterable, TypeVar, cast + +_bslash = chr(92) +C = TypeVar("C", bound=Callable) + + +class __config_flags: + """Internal class for defining compatibility and debugging flags""" + + _all_names: List[str] = [] + _fixed_names: List[str] = [] + _type_desc = "configuration" + + @classmethod + def _set(cls, dname, value): + if dname in cls._fixed_names: + warnings.warn( + f"{cls.__name__}.{dname} {cls._type_desc} is {str(getattr(cls, dname)).upper()}" + f" and cannot be overridden", + stacklevel=3, + ) + return + if dname in cls._all_names: + setattr(cls, dname, value) + else: + raise ValueError(f"no such {cls._type_desc} {dname!r}") + + enable = classmethod(lambda cls, name: cls._set(name, True)) + disable = classmethod(lambda cls, name: cls._set(name, False)) + + +@lru_cache(maxsize=128) +def col(loc: int, strg: str) -> int: + """ + Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See + :class:`ParserElement.parse_string` for more + information on parsing strings containing ```` s, and suggested + methods to maintain a consistent view of the parsed string, the parse + location, and line and column positions within the parsed string. + """ + s = strg + return 1 if 0 < loc < len(s) and s[loc - 1] == "\n" else loc - s.rfind("\n", 0, loc) + + +@lru_cache(maxsize=128) +def lineno(loc: int, strg: str) -> int: + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note - the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See :class:`ParserElement.parse_string` + for more information on parsing strings containing ```` s, and + suggested methods to maintain a consistent view of the parsed string, the + parse location, and line and column positions within the parsed string. + """ + return strg.count("\n", 0, loc) + 1 + + +@lru_cache(maxsize=128) +def line(loc: int, strg: str) -> str: + """ + Returns the line of text containing loc within a string, counting newlines as line separators. + """ + last_cr = strg.rfind("\n", 0, loc) + next_cr = strg.find("\n", loc) + return strg[last_cr + 1 : next_cr] if next_cr >= 0 else strg[last_cr + 1 :] + + +class _UnboundedCache: + def __init__(self): + cache = {} + cache_get = cache.get + self.not_in_cache = not_in_cache = object() + + def get(_, key): + return cache_get(key, not_in_cache) + + def set_(_, key, value): + cache[key] = value + + def clear(_): + cache.clear() + + self.size = None + self.get = types.MethodType(get, self) + self.set = types.MethodType(set_, self) + self.clear = types.MethodType(clear, self) + + +class _FifoCache: + def __init__(self, size): + self.not_in_cache = not_in_cache = object() + cache = {} + keyring = [object()] * size + cache_get = cache.get + cache_pop = cache.pop + keyiter = itertools.cycle(range(size)) + + def get(_, key): + return cache_get(key, not_in_cache) + + def set_(_, key, value): + cache[key] = value + i = next(keyiter) + cache_pop(keyring[i], None) + keyring[i] = key + + def clear(_): + cache.clear() + keyring[:] = [object()] * size + + self.size = size + self.get = types.MethodType(get, self) + self.set = types.MethodType(set_, self) + self.clear = types.MethodType(clear, self) + + +class LRUMemo: + """ + A memoizing mapping that retains `capacity` deleted items + + The memo tracks retained items by their access order; once `capacity` items + are retained, the least recently used item is discarded. + """ + + def __init__(self, capacity): + self._capacity = capacity + self._active = {} + self._memory = collections.OrderedDict() + + def __getitem__(self, key): + try: + return self._active[key] + except KeyError: + self._memory.move_to_end(key) + return self._memory[key] + + def __setitem__(self, key, value): + self._memory.pop(key, None) + self._active[key] = value + + def __delitem__(self, key): + try: + value = self._active.pop(key) + except KeyError: + pass + else: + while len(self._memory) >= self._capacity: + self._memory.popitem(last=False) + self._memory[key] = value + + def clear(self): + self._active.clear() + self._memory.clear() + + +class UnboundedMemo(dict): + """ + A memoizing mapping that retains all deleted items + """ + + def __delitem__(self, key): + pass + + +def _escape_regex_range_chars(s: str) -> str: + # escape these chars: ^-[] + for c in r"\^-[]": + s = s.replace(c, _bslash + c) + s = s.replace("\n", r"\n") + s = s.replace("\t", r"\t") + return str(s) + + +def _collapse_string_to_ranges( + s: Union[str, Iterable[str]], re_escape: bool = True +) -> str: + def is_consecutive(c): + c_int = ord(c) + is_consecutive.prev, prev = c_int, is_consecutive.prev + if c_int - prev > 1: + is_consecutive.value = next(is_consecutive.counter) + return is_consecutive.value + + is_consecutive.prev = 0 # type: ignore [attr-defined] + is_consecutive.counter = itertools.count() # type: ignore [attr-defined] + is_consecutive.value = -1 # type: ignore [attr-defined] + + def escape_re_range_char(c): + return "\\" + c if c in r"\^-][" else c + + def no_escape_re_range_char(c): + return c + + if not re_escape: + escape_re_range_char = no_escape_re_range_char + + ret = [] + s = "".join(sorted(set(s))) + if len(s) > 3: + for _, chars in itertools.groupby(s, key=is_consecutive): + first = last = next(chars) + last = collections.deque( + itertools.chain(iter([last]), chars), maxlen=1 + ).pop() + if first == last: + ret.append(escape_re_range_char(first)) + else: + sep = "" if ord(last) == ord(first) + 1 else "-" + ret.append( + f"{escape_re_range_char(first)}{sep}{escape_re_range_char(last)}" + ) + else: + ret = [escape_re_range_char(c) for c in s] + + return "".join(ret) + + +def _flatten(ll: list) -> list: + ret = [] + for i in ll: + if isinstance(i, list): + ret.extend(_flatten(i)) + else: + ret.append(i) + return ret + + +def _make_synonym_function(compat_name: str, fn: C) -> C: + # In a future version, uncomment the code in the internal _inner() functions + # to begin emitting DeprecationWarnings. + + # Unwrap staticmethod/classmethod + fn = getattr(fn, "__func__", fn) + + # (Presence of 'self' arg in signature is used by explain_exception() methods, so we take + # some extra steps to add it if present in decorated function.) + if "self" == list(inspect.signature(fn).parameters)[0]: + + @wraps(fn) + def _inner(self, *args, **kwargs): + # warnings.warn( + # f"Deprecated - use {fn.__name__}", DeprecationWarning, stacklevel=3 + # ) + return fn(self, *args, **kwargs) + + else: + + @wraps(fn) + def _inner(*args, **kwargs): + # warnings.warn( + # f"Deprecated - use {fn.__name__}", DeprecationWarning, stacklevel=3 + # ) + return fn(*args, **kwargs) + + _inner.__doc__ = f"""Deprecated - use :class:`{fn.__name__}`""" + _inner.__name__ = compat_name + _inner.__annotations__ = fn.__annotations__ + if isinstance(fn, types.FunctionType): + _inner.__kwdefaults__ = fn.__kwdefaults__ + elif isinstance(fn, type) and hasattr(fn, "__init__"): + _inner.__kwdefaults__ = fn.__init__.__kwdefaults__ + else: + _inner.__kwdefaults__ = None + _inner.__qualname__ = fn.__qualname__ + return cast(C, _inner) + + +def replaced_by_pep8(fn: C) -> Callable[[Callable], C]: + """ + Decorator for pre-PEP8 compatibility synonyms, to link them to the new function. + """ + return lambda other: _make_synonym_function(other.__name__, fn) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py new file mode 100644 index 0000000..ddfcf7f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py @@ -0,0 +1,23 @@ +"""Wrappers to call pyproject.toml-based build backend hooks. +""" + +from ._impl import ( + BackendInvalid, + BackendUnavailable, + BuildBackendHookCaller, + HookMissing, + UnsupportedOperation, + default_subprocess_runner, + quiet_subprocess_runner, +) + +__version__ = '1.0.0' +__all__ = [ + 'BackendUnavailable', + 'BackendInvalid', + 'HookMissing', + 'UnsupportedOperation', + 'default_subprocess_runner', + 'quiet_subprocess_runner', + 'BuildBackendHookCaller', +] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..67f22bc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc new file mode 100644 index 0000000..63913a1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc new file mode 100644 index 0000000..52593cb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_compat.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_compat.py new file mode 100644 index 0000000..95e509c --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_compat.py @@ -0,0 +1,8 @@ +__all__ = ("tomllib",) + +import sys + +if sys.version_info >= (3, 11): + import tomllib +else: + from pip._vendor import tomli as tomllib diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py new file mode 100644 index 0000000..37b0e65 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py @@ -0,0 +1,330 @@ +import json +import os +import sys +import tempfile +from contextlib import contextmanager +from os.path import abspath +from os.path import join as pjoin +from subprocess import STDOUT, check_call, check_output + +from ._in_process import _in_proc_script_path + + +def write_json(obj, path, **kwargs): + with open(path, 'w', encoding='utf-8') as f: + json.dump(obj, f, **kwargs) + + +def read_json(path): + with open(path, encoding='utf-8') as f: + return json.load(f) + + +class BackendUnavailable(Exception): + """Will be raised if the backend cannot be imported in the hook process.""" + def __init__(self, traceback): + self.traceback = traceback + + +class BackendInvalid(Exception): + """Will be raised if the backend is invalid.""" + def __init__(self, backend_name, backend_path, message): + super().__init__(message) + self.backend_name = backend_name + self.backend_path = backend_path + + +class HookMissing(Exception): + """Will be raised on missing hooks (if a fallback can't be used).""" + def __init__(self, hook_name): + super().__init__(hook_name) + self.hook_name = hook_name + + +class UnsupportedOperation(Exception): + """May be raised by build_sdist if the backend indicates that it can't.""" + def __init__(self, traceback): + self.traceback = traceback + + +def default_subprocess_runner(cmd, cwd=None, extra_environ=None): + """The default method of calling the wrapper subprocess. + + This uses :func:`subprocess.check_call` under the hood. + """ + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + + check_call(cmd, cwd=cwd, env=env) + + +def quiet_subprocess_runner(cmd, cwd=None, extra_environ=None): + """Call the subprocess while suppressing output. + + This uses :func:`subprocess.check_output` under the hood. + """ + env = os.environ.copy() + if extra_environ: + env.update(extra_environ) + + check_output(cmd, cwd=cwd, env=env, stderr=STDOUT) + + +def norm_and_check(source_tree, requested): + """Normalise and check a backend path. + + Ensure that the requested backend path is specified as a relative path, + and resolves to a location under the given source tree. + + Return an absolute version of the requested path. + """ + if os.path.isabs(requested): + raise ValueError("paths must be relative") + + abs_source = os.path.abspath(source_tree) + abs_requested = os.path.normpath(os.path.join(abs_source, requested)) + # We have to use commonprefix for Python 2.7 compatibility. So we + # normalise case to avoid problems because commonprefix is a character + # based comparison :-( + norm_source = os.path.normcase(abs_source) + norm_requested = os.path.normcase(abs_requested) + if os.path.commonprefix([norm_source, norm_requested]) != norm_source: + raise ValueError("paths must be inside source tree") + + return abs_requested + + +class BuildBackendHookCaller: + """A wrapper to call the build backend hooks for a source directory. + """ + + def __init__( + self, + source_dir, + build_backend, + backend_path=None, + runner=None, + python_executable=None, + ): + """ + :param source_dir: The source directory to invoke the build backend for + :param build_backend: The build backend spec + :param backend_path: Additional path entries for the build backend spec + :param runner: The :ref:`subprocess runner ` to use + :param python_executable: + The Python executable used to invoke the build backend + """ + if runner is None: + runner = default_subprocess_runner + + self.source_dir = abspath(source_dir) + self.build_backend = build_backend + if backend_path: + backend_path = [ + norm_and_check(self.source_dir, p) for p in backend_path + ] + self.backend_path = backend_path + self._subprocess_runner = runner + if not python_executable: + python_executable = sys.executable + self.python_executable = python_executable + + @contextmanager + def subprocess_runner(self, runner): + """A context manager for temporarily overriding the default + :ref:`subprocess runner `. + + .. code-block:: python + + hook_caller = BuildBackendHookCaller(...) + with hook_caller.subprocess_runner(quiet_subprocess_runner): + ... + """ + prev = self._subprocess_runner + self._subprocess_runner = runner + try: + yield + finally: + self._subprocess_runner = prev + + def _supported_features(self): + """Return the list of optional features supported by the backend.""" + return self._call_hook('_supported_features', {}) + + def get_requires_for_build_wheel(self, config_settings=None): + """Get additional dependencies required for building a wheel. + + :returns: A list of :pep:`dependency specifiers <508>`. + :rtype: list[str] + + .. admonition:: Fallback + + If the build backend does not defined a hook with this name, an + empty list will be returned. + """ + return self._call_hook('get_requires_for_build_wheel', { + 'config_settings': config_settings + }) + + def prepare_metadata_for_build_wheel( + self, metadata_directory, config_settings=None, + _allow_fallback=True): + """Prepare a ``*.dist-info`` folder with metadata for this project. + + :returns: Name of the newly created subfolder within + ``metadata_directory``, containing the metadata. + :rtype: str + + .. admonition:: Fallback + + If the build backend does not define a hook with this name and + ``_allow_fallback`` is truthy, the backend will be asked to build a + wheel via the ``build_wheel`` hook and the dist-info extracted from + that will be returned. + """ + return self._call_hook('prepare_metadata_for_build_wheel', { + 'metadata_directory': abspath(metadata_directory), + 'config_settings': config_settings, + '_allow_fallback': _allow_fallback, + }) + + def build_wheel( + self, wheel_directory, config_settings=None, + metadata_directory=None): + """Build a wheel from this project. + + :returns: + The name of the newly created wheel within ``wheel_directory``. + + .. admonition:: Interaction with fallback + + If the ``build_wheel`` hook was called in the fallback for + :meth:`prepare_metadata_for_build_wheel`, the build backend would + not be invoked. Instead, the previously built wheel will be copied + to ``wheel_directory`` and the name of that file will be returned. + """ + if metadata_directory is not None: + metadata_directory = abspath(metadata_directory) + return self._call_hook('build_wheel', { + 'wheel_directory': abspath(wheel_directory), + 'config_settings': config_settings, + 'metadata_directory': metadata_directory, + }) + + def get_requires_for_build_editable(self, config_settings=None): + """Get additional dependencies required for building an editable wheel. + + :returns: A list of :pep:`dependency specifiers <508>`. + :rtype: list[str] + + .. admonition:: Fallback + + If the build backend does not defined a hook with this name, an + empty list will be returned. + """ + return self._call_hook('get_requires_for_build_editable', { + 'config_settings': config_settings + }) + + def prepare_metadata_for_build_editable( + self, metadata_directory, config_settings=None, + _allow_fallback=True): + """Prepare a ``*.dist-info`` folder with metadata for this project. + + :returns: Name of the newly created subfolder within + ``metadata_directory``, containing the metadata. + :rtype: str + + .. admonition:: Fallback + + If the build backend does not define a hook with this name and + ``_allow_fallback`` is truthy, the backend will be asked to build a + wheel via the ``build_editable`` hook and the dist-info + extracted from that will be returned. + """ + return self._call_hook('prepare_metadata_for_build_editable', { + 'metadata_directory': abspath(metadata_directory), + 'config_settings': config_settings, + '_allow_fallback': _allow_fallback, + }) + + def build_editable( + self, wheel_directory, config_settings=None, + metadata_directory=None): + """Build an editable wheel from this project. + + :returns: + The name of the newly created wheel within ``wheel_directory``. + + .. admonition:: Interaction with fallback + + If the ``build_editable`` hook was called in the fallback for + :meth:`prepare_metadata_for_build_editable`, the build backend + would not be invoked. Instead, the previously built wheel will be + copied to ``wheel_directory`` and the name of that file will be + returned. + """ + if metadata_directory is not None: + metadata_directory = abspath(metadata_directory) + return self._call_hook('build_editable', { + 'wheel_directory': abspath(wheel_directory), + 'config_settings': config_settings, + 'metadata_directory': metadata_directory, + }) + + def get_requires_for_build_sdist(self, config_settings=None): + """Get additional dependencies required for building an sdist. + + :returns: A list of :pep:`dependency specifiers <508>`. + :rtype: list[str] + """ + return self._call_hook('get_requires_for_build_sdist', { + 'config_settings': config_settings + }) + + def build_sdist(self, sdist_directory, config_settings=None): + """Build an sdist from this project. + + :returns: + The name of the newly created sdist within ``wheel_directory``. + """ + return self._call_hook('build_sdist', { + 'sdist_directory': abspath(sdist_directory), + 'config_settings': config_settings, + }) + + def _call_hook(self, hook_name, kwargs): + extra_environ = {'PEP517_BUILD_BACKEND': self.build_backend} + + if self.backend_path: + backend_path = os.pathsep.join(self.backend_path) + extra_environ['PEP517_BACKEND_PATH'] = backend_path + + with tempfile.TemporaryDirectory() as td: + hook_input = {'kwargs': kwargs} + write_json(hook_input, pjoin(td, 'input.json'), indent=2) + + # Run the hook in a subprocess + with _in_proc_script_path() as script: + python = self.python_executable + self._subprocess_runner( + [python, abspath(str(script)), hook_name, td], + cwd=self.source_dir, + extra_environ=extra_environ + ) + + data = read_json(pjoin(td, 'output.json')) + if data.get('unsupported'): + raise UnsupportedOperation(data.get('traceback', '')) + if data.get('no_backend'): + raise BackendUnavailable(data.get('traceback', '')) + if data.get('backend_invalid'): + raise BackendInvalid( + backend_name=self.build_backend, + backend_path=self.backend_path, + message=data.get('backend_error', '') + ) + if data.get('hook_missing'): + raise HookMissing(data.get('missing_hook_name') or hook_name) + return data['return_val'] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py new file mode 100644 index 0000000..917fa06 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py @@ -0,0 +1,18 @@ +"""This is a subpackage because the directory is on sys.path for _in_process.py + +The subpackage should stay as empty as possible to avoid shadowing modules that +the backend might import. +""" + +import importlib.resources as resources + +try: + resources.files +except AttributeError: + # Python 3.8 compatibility + def _in_proc_script_path(): + return resources.path(__package__, '_in_process.py') +else: + def _in_proc_script_path(): + return resources.as_file( + resources.files(__package__).joinpath('_in_process.py')) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..8e73d9e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc new file mode 100644 index 0000000..66596bd Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py new file mode 100644 index 0000000..ee511ff --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py @@ -0,0 +1,353 @@ +"""This is invoked in a subprocess to call the build backend hooks. + +It expects: +- Command line args: hook_name, control_dir +- Environment variables: + PEP517_BUILD_BACKEND=entry.point:spec + PEP517_BACKEND_PATH=paths (separated with os.pathsep) +- control_dir/input.json: + - {"kwargs": {...}} + +Results: +- control_dir/output.json + - {"return_val": ...} +""" +import json +import os +import os.path +import re +import shutil +import sys +import traceback +from glob import glob +from importlib import import_module +from os.path import join as pjoin + +# This file is run as a script, and `import wrappers` is not zip-safe, so we +# include write_json() and read_json() from wrappers.py. + + +def write_json(obj, path, **kwargs): + with open(path, 'w', encoding='utf-8') as f: + json.dump(obj, f, **kwargs) + + +def read_json(path): + with open(path, encoding='utf-8') as f: + return json.load(f) + + +class BackendUnavailable(Exception): + """Raised if we cannot import the backend""" + def __init__(self, traceback): + self.traceback = traceback + + +class BackendInvalid(Exception): + """Raised if the backend is invalid""" + def __init__(self, message): + self.message = message + + +class HookMissing(Exception): + """Raised if a hook is missing and we are not executing the fallback""" + def __init__(self, hook_name=None): + super().__init__(hook_name) + self.hook_name = hook_name + + +def contained_in(filename, directory): + """Test if a file is located within the given directory.""" + filename = os.path.normcase(os.path.abspath(filename)) + directory = os.path.normcase(os.path.abspath(directory)) + return os.path.commonprefix([filename, directory]) == directory + + +def _build_backend(): + """Find and load the build backend""" + # Add in-tree backend directories to the front of sys.path. + backend_path = os.environ.get('PEP517_BACKEND_PATH') + if backend_path: + extra_pathitems = backend_path.split(os.pathsep) + sys.path[:0] = extra_pathitems + + ep = os.environ['PEP517_BUILD_BACKEND'] + mod_path, _, obj_path = ep.partition(':') + try: + obj = import_module(mod_path) + except ImportError: + raise BackendUnavailable(traceback.format_exc()) + + if backend_path: + if not any( + contained_in(obj.__file__, path) + for path in extra_pathitems + ): + raise BackendInvalid("Backend was not loaded from backend-path") + + if obj_path: + for path_part in obj_path.split('.'): + obj = getattr(obj, path_part) + return obj + + +def _supported_features(): + """Return the list of options features supported by the backend. + + Returns a list of strings. + The only possible value is 'build_editable'. + """ + backend = _build_backend() + features = [] + if hasattr(backend, "build_editable"): + features.append("build_editable") + return features + + +def get_requires_for_build_wheel(config_settings): + """Invoke the optional get_requires_for_build_wheel hook + + Returns [] if the hook is not defined. + """ + backend = _build_backend() + try: + hook = backend.get_requires_for_build_wheel + except AttributeError: + return [] + else: + return hook(config_settings) + + +def get_requires_for_build_editable(config_settings): + """Invoke the optional get_requires_for_build_editable hook + + Returns [] if the hook is not defined. + """ + backend = _build_backend() + try: + hook = backend.get_requires_for_build_editable + except AttributeError: + return [] + else: + return hook(config_settings) + + +def prepare_metadata_for_build_wheel( + metadata_directory, config_settings, _allow_fallback): + """Invoke optional prepare_metadata_for_build_wheel + + Implements a fallback by building a wheel if the hook isn't defined, + unless _allow_fallback is False in which case HookMissing is raised. + """ + backend = _build_backend() + try: + hook = backend.prepare_metadata_for_build_wheel + except AttributeError: + if not _allow_fallback: + raise HookMissing() + else: + return hook(metadata_directory, config_settings) + # fallback to build_wheel outside the try block to avoid exception chaining + # which can be confusing to users and is not relevant + whl_basename = backend.build_wheel(metadata_directory, config_settings) + return _get_wheel_metadata_from_wheel(whl_basename, metadata_directory, + config_settings) + + +def prepare_metadata_for_build_editable( + metadata_directory, config_settings, _allow_fallback): + """Invoke optional prepare_metadata_for_build_editable + + Implements a fallback by building an editable wheel if the hook isn't + defined, unless _allow_fallback is False in which case HookMissing is + raised. + """ + backend = _build_backend() + try: + hook = backend.prepare_metadata_for_build_editable + except AttributeError: + if not _allow_fallback: + raise HookMissing() + try: + build_hook = backend.build_editable + except AttributeError: + raise HookMissing(hook_name='build_editable') + else: + whl_basename = build_hook(metadata_directory, config_settings) + return _get_wheel_metadata_from_wheel(whl_basename, + metadata_directory, + config_settings) + else: + return hook(metadata_directory, config_settings) + + +WHEEL_BUILT_MARKER = 'PEP517_ALREADY_BUILT_WHEEL' + + +def _dist_info_files(whl_zip): + """Identify the .dist-info folder inside a wheel ZipFile.""" + res = [] + for path in whl_zip.namelist(): + m = re.match(r'[^/\\]+-[^/\\]+\.dist-info/', path) + if m: + res.append(path) + if res: + return res + raise Exception("No .dist-info folder found in wheel") + + +def _get_wheel_metadata_from_wheel( + whl_basename, metadata_directory, config_settings): + """Extract the metadata from a wheel. + + Fallback for when the build backend does not + define the 'get_wheel_metadata' hook. + """ + from zipfile import ZipFile + with open(os.path.join(metadata_directory, WHEEL_BUILT_MARKER), 'wb'): + pass # Touch marker file + + whl_file = os.path.join(metadata_directory, whl_basename) + with ZipFile(whl_file) as zipf: + dist_info = _dist_info_files(zipf) + zipf.extractall(path=metadata_directory, members=dist_info) + return dist_info[0].split('/')[0] + + +def _find_already_built_wheel(metadata_directory): + """Check for a wheel already built during the get_wheel_metadata hook. + """ + if not metadata_directory: + return None + metadata_parent = os.path.dirname(metadata_directory) + if not os.path.isfile(pjoin(metadata_parent, WHEEL_BUILT_MARKER)): + return None + + whl_files = glob(os.path.join(metadata_parent, '*.whl')) + if not whl_files: + print('Found wheel built marker, but no .whl files') + return None + if len(whl_files) > 1: + print('Found multiple .whl files; unspecified behaviour. ' + 'Will call build_wheel.') + return None + + # Exactly one .whl file + return whl_files[0] + + +def build_wheel(wheel_directory, config_settings, metadata_directory=None): + """Invoke the mandatory build_wheel hook. + + If a wheel was already built in the + prepare_metadata_for_build_wheel fallback, this + will copy it rather than rebuilding the wheel. + """ + prebuilt_whl = _find_already_built_wheel(metadata_directory) + if prebuilt_whl: + shutil.copy2(prebuilt_whl, wheel_directory) + return os.path.basename(prebuilt_whl) + + return _build_backend().build_wheel(wheel_directory, config_settings, + metadata_directory) + + +def build_editable(wheel_directory, config_settings, metadata_directory=None): + """Invoke the optional build_editable hook. + + If a wheel was already built in the + prepare_metadata_for_build_editable fallback, this + will copy it rather than rebuilding the wheel. + """ + backend = _build_backend() + try: + hook = backend.build_editable + except AttributeError: + raise HookMissing() + else: + prebuilt_whl = _find_already_built_wheel(metadata_directory) + if prebuilt_whl: + shutil.copy2(prebuilt_whl, wheel_directory) + return os.path.basename(prebuilt_whl) + + return hook(wheel_directory, config_settings, metadata_directory) + + +def get_requires_for_build_sdist(config_settings): + """Invoke the optional get_requires_for_build_wheel hook + + Returns [] if the hook is not defined. + """ + backend = _build_backend() + try: + hook = backend.get_requires_for_build_sdist + except AttributeError: + return [] + else: + return hook(config_settings) + + +class _DummyException(Exception): + """Nothing should ever raise this exception""" + + +class GotUnsupportedOperation(Exception): + """For internal use when backend raises UnsupportedOperation""" + def __init__(self, traceback): + self.traceback = traceback + + +def build_sdist(sdist_directory, config_settings): + """Invoke the mandatory build_sdist hook.""" + backend = _build_backend() + try: + return backend.build_sdist(sdist_directory, config_settings) + except getattr(backend, 'UnsupportedOperation', _DummyException): + raise GotUnsupportedOperation(traceback.format_exc()) + + +HOOK_NAMES = { + 'get_requires_for_build_wheel', + 'prepare_metadata_for_build_wheel', + 'build_wheel', + 'get_requires_for_build_editable', + 'prepare_metadata_for_build_editable', + 'build_editable', + 'get_requires_for_build_sdist', + 'build_sdist', + '_supported_features', +} + + +def main(): + if len(sys.argv) < 3: + sys.exit("Needs args: hook_name, control_dir") + hook_name = sys.argv[1] + control_dir = sys.argv[2] + if hook_name not in HOOK_NAMES: + sys.exit("Unknown hook: %s" % hook_name) + hook = globals()[hook_name] + + hook_input = read_json(pjoin(control_dir, 'input.json')) + + json_out = {'unsupported': False, 'return_val': None} + try: + json_out['return_val'] = hook(**hook_input['kwargs']) + except BackendUnavailable as e: + json_out['no_backend'] = True + json_out['traceback'] = e.traceback + except BackendInvalid as e: + json_out['backend_invalid'] = True + json_out['backend_error'] = e.message + except GotUnsupportedOperation as e: + json_out['unsupported'] = True + json_out['traceback'] = e.traceback + except HookMissing as e: + json_out['hook_missing'] = True + json_out['missing_hook_name'] = e.hook_name or hook_name + + write_json(json_out, pjoin(control_dir, 'output.json'), indent=2) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py new file mode 100644 index 0000000..10ff67f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py @@ -0,0 +1,182 @@ +# __ +# /__) _ _ _ _ _/ _ +# / ( (- (/ (/ (- _) / _) +# / + +""" +Requests HTTP Library +~~~~~~~~~~~~~~~~~~~~~ + +Requests is an HTTP library, written in Python, for human beings. +Basic GET usage: + + >>> import requests + >>> r = requests.get('https://www.python.org') + >>> r.status_code + 200 + >>> b'Python is a programming language' in r.content + True + +... or POST: + + >>> payload = dict(key1='value1', key2='value2') + >>> r = requests.post('https://httpbin.org/post', data=payload) + >>> print(r.text) + { + ... + "form": { + "key1": "value1", + "key2": "value2" + }, + ... + } + +The other HTTP methods are supported - see `requests.api`. Full documentation +is at . + +:copyright: (c) 2017 by Kenneth Reitz. +:license: Apache 2.0, see LICENSE for more details. +""" + +import warnings + +from pip._vendor import urllib3 + +from .exceptions import RequestsDependencyWarning + +charset_normalizer_version = None + +try: + from pip._vendor.chardet import __version__ as chardet_version +except ImportError: + chardet_version = None + + +def check_compatibility(urllib3_version, chardet_version, charset_normalizer_version): + urllib3_version = urllib3_version.split(".") + assert urllib3_version != ["dev"] # Verify urllib3 isn't installed from git. + + # Sometimes, urllib3 only reports its version as 16.1. + if len(urllib3_version) == 2: + urllib3_version.append("0") + + # Check urllib3 for compatibility. + major, minor, patch = urllib3_version # noqa: F811 + major, minor, patch = int(major), int(minor), int(patch) + # urllib3 >= 1.21.1 + assert major >= 1 + if major == 1: + assert minor >= 21 + + # Check charset_normalizer for compatibility. + if chardet_version: + major, minor, patch = chardet_version.split(".")[:3] + major, minor, patch = int(major), int(minor), int(patch) + # chardet_version >= 3.0.2, < 6.0.0 + assert (3, 0, 2) <= (major, minor, patch) < (6, 0, 0) + elif charset_normalizer_version: + major, minor, patch = charset_normalizer_version.split(".")[:3] + major, minor, patch = int(major), int(minor), int(patch) + # charset_normalizer >= 2.0.0 < 4.0.0 + assert (2, 0, 0) <= (major, minor, patch) < (4, 0, 0) + else: + raise Exception("You need either charset_normalizer or chardet installed") + + +def _check_cryptography(cryptography_version): + # cryptography < 1.3.4 + try: + cryptography_version = list(map(int, cryptography_version.split("."))) + except ValueError: + return + + if cryptography_version < [1, 3, 4]: + warning = "Old version of cryptography ({}) may cause slowdown.".format( + cryptography_version + ) + warnings.warn(warning, RequestsDependencyWarning) + + +# Check imported dependencies for compatibility. +try: + check_compatibility( + urllib3.__version__, chardet_version, charset_normalizer_version + ) +except (AssertionError, ValueError): + warnings.warn( + "urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported " + "version!".format( + urllib3.__version__, chardet_version, charset_normalizer_version + ), + RequestsDependencyWarning, + ) + +# Attempt to enable urllib3's fallback for SNI support +# if the standard library doesn't support SNI or the +# 'ssl' library isn't available. +try: + # Note: This logic prevents upgrading cryptography on Windows, if imported + # as part of pip. + from pip._internal.utils.compat import WINDOWS + if not WINDOWS: + raise ImportError("pip internals: don't import cryptography on Windows") + try: + import ssl + except ImportError: + ssl = None + + if not getattr(ssl, "HAS_SNI", False): + from pip._vendor.urllib3.contrib import pyopenssl + + pyopenssl.inject_into_urllib3() + + # Check cryptography version + from cryptography import __version__ as cryptography_version + + _check_cryptography(cryptography_version) +except ImportError: + pass + +# urllib3's DependencyWarnings should be silenced. +from pip._vendor.urllib3.exceptions import DependencyWarning + +warnings.simplefilter("ignore", DependencyWarning) + +# Set default logging handler to avoid "No handler found" warnings. +import logging +from logging import NullHandler + +from . import packages, utils +from .__version__ import ( + __author__, + __author_email__, + __build__, + __cake__, + __copyright__, + __description__, + __license__, + __title__, + __url__, + __version__, +) +from .api import delete, get, head, options, patch, post, put, request +from .exceptions import ( + ConnectionError, + ConnectTimeout, + FileModeWarning, + HTTPError, + JSONDecodeError, + ReadTimeout, + RequestException, + Timeout, + TooManyRedirects, + URLRequired, +) +from .models import PreparedRequest, Request, Response +from .sessions import Session, session +from .status_codes import codes + +logging.getLogger(__name__).addHandler(NullHandler()) + +# FileModeWarnings go off per the default. +warnings.simplefilter("default", FileModeWarning, append=True) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..f88a169 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc new file mode 100644 index 0000000..36c684b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc new file mode 100644 index 0000000..4a7fd5a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc new file mode 100644 index 0000000..f98b6ae Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc new file mode 100644 index 0000000..a6bc859 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc new file mode 100644 index 0000000..66a235f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc new file mode 100644 index 0000000..e3c5584 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc new file mode 100644 index 0000000..3f026e9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc new file mode 100644 index 0000000..22728ef Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc new file mode 100644 index 0000000..15c84f8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc new file mode 100644 index 0000000..ba18d4b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc new file mode 100644 index 0000000..b6f8501 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000..8f55d2e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc new file mode 100644 index 0000000..421f1fa Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc new file mode 100644 index 0000000..bcf1ae7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc new file mode 100644 index 0000000..e03d189 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc new file mode 100644 index 0000000..97230fc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000..02d0e87 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/__version__.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__version__.py new file mode 100644 index 0000000..5063c3f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/__version__.py @@ -0,0 +1,14 @@ +# .-. .-. .-. . . .-. .-. .-. .-. +# |( |- |.| | | |- `-. | `-. +# ' ' `-' `-`.`-' `-' `-' ' `-' + +__title__ = "requests" +__description__ = "Python HTTP for Humans." +__url__ = "https://requests.readthedocs.io" +__version__ = "2.31.0" +__build__ = 0x023100 +__author__ = "Kenneth Reitz" +__author_email__ = "me@kennethreitz.org" +__license__ = "Apache 2.0" +__copyright__ = "Copyright Kenneth Reitz" +__cake__ = "\u2728 \U0001f370 \u2728" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py new file mode 100644 index 0000000..f2cf635 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py @@ -0,0 +1,50 @@ +""" +requests._internal_utils +~~~~~~~~~~~~~~ + +Provides utility functions that are consumed internally by Requests +which depend on extremely few external helpers (such as compat) +""" +import re + +from .compat import builtin_str + +_VALID_HEADER_NAME_RE_BYTE = re.compile(rb"^[^:\s][^:\r\n]*$") +_VALID_HEADER_NAME_RE_STR = re.compile(r"^[^:\s][^:\r\n]*$") +_VALID_HEADER_VALUE_RE_BYTE = re.compile(rb"^\S[^\r\n]*$|^$") +_VALID_HEADER_VALUE_RE_STR = re.compile(r"^\S[^\r\n]*$|^$") + +_HEADER_VALIDATORS_STR = (_VALID_HEADER_NAME_RE_STR, _VALID_HEADER_VALUE_RE_STR) +_HEADER_VALIDATORS_BYTE = (_VALID_HEADER_NAME_RE_BYTE, _VALID_HEADER_VALUE_RE_BYTE) +HEADER_VALIDATORS = { + bytes: _HEADER_VALIDATORS_BYTE, + str: _HEADER_VALIDATORS_STR, +} + + +def to_native_string(string, encoding="ascii"): + """Given a string object, regardless of type, returns a representation of + that string in the native string type, encoding and decoding where + necessary. This assumes ASCII unless told otherwise. + """ + if isinstance(string, builtin_str): + out = string + else: + out = string.decode(encoding) + + return out + + +def unicode_is_ascii(u_string): + """Determine if unicode string only contains ASCII characters. + + :param str u_string: unicode string to check. Must be unicode + and not Python 2 `str`. + :rtype: bool + """ + assert isinstance(u_string, str) + try: + u_string.encode("ascii") + return True + except UnicodeEncodeError: + return False diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py new file mode 100644 index 0000000..10c1767 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py @@ -0,0 +1,538 @@ +""" +requests.adapters +~~~~~~~~~~~~~~~~~ + +This module contains the transport adapters that Requests uses to define +and maintain connections. +""" + +import os.path +import socket # noqa: F401 + +from pip._vendor.urllib3.exceptions import ClosedPoolError, ConnectTimeoutError +from pip._vendor.urllib3.exceptions import HTTPError as _HTTPError +from pip._vendor.urllib3.exceptions import InvalidHeader as _InvalidHeader +from pip._vendor.urllib3.exceptions import ( + LocationValueError, + MaxRetryError, + NewConnectionError, + ProtocolError, +) +from pip._vendor.urllib3.exceptions import ProxyError as _ProxyError +from pip._vendor.urllib3.exceptions import ReadTimeoutError, ResponseError +from pip._vendor.urllib3.exceptions import SSLError as _SSLError +from pip._vendor.urllib3.poolmanager import PoolManager, proxy_from_url +from pip._vendor.urllib3.util import Timeout as TimeoutSauce +from pip._vendor.urllib3.util import parse_url +from pip._vendor.urllib3.util.retry import Retry + +from .auth import _basic_auth_str +from .compat import basestring, urlparse +from .cookies import extract_cookies_to_jar +from .exceptions import ( + ConnectionError, + ConnectTimeout, + InvalidHeader, + InvalidProxyURL, + InvalidSchema, + InvalidURL, + ProxyError, + ReadTimeout, + RetryError, + SSLError, +) +from .models import Response +from .structures import CaseInsensitiveDict +from .utils import ( + DEFAULT_CA_BUNDLE_PATH, + extract_zipped_paths, + get_auth_from_url, + get_encoding_from_headers, + prepend_scheme_if_needed, + select_proxy, + urldefragauth, +) + +try: + from pip._vendor.urllib3.contrib.socks import SOCKSProxyManager +except ImportError: + + def SOCKSProxyManager(*args, **kwargs): + raise InvalidSchema("Missing dependencies for SOCKS support.") + + +DEFAULT_POOLBLOCK = False +DEFAULT_POOLSIZE = 10 +DEFAULT_RETRIES = 0 +DEFAULT_POOL_TIMEOUT = None + + +class BaseAdapter: + """The Base Transport Adapter""" + + def __init__(self): + super().__init__() + + def send( + self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None + ): + """Sends PreparedRequest object. Returns Response object. + + :param request: The :class:`PreparedRequest ` being sent. + :param stream: (optional) Whether to stream the request content. + :param timeout: (optional) How long to wait for the server to send + data before giving up, as a float, or a :ref:`(connect timeout, + read timeout) ` tuple. + :type timeout: float or tuple + :param verify: (optional) Either a boolean, in which case it controls whether we verify + the server's TLS certificate, or a string, in which case it must be a path + to a CA bundle to use + :param cert: (optional) Any user-provided SSL certificate to be trusted. + :param proxies: (optional) The proxies dictionary to apply to the request. + """ + raise NotImplementedError + + def close(self): + """Cleans up adapter specific items.""" + raise NotImplementedError + + +class HTTPAdapter(BaseAdapter): + """The built-in HTTP Adapter for urllib3. + + Provides a general-case interface for Requests sessions to contact HTTP and + HTTPS urls by implementing the Transport Adapter interface. This class will + usually be created by the :class:`Session ` class under the + covers. + + :param pool_connections: The number of urllib3 connection pools to cache. + :param pool_maxsize: The maximum number of connections to save in the pool. + :param max_retries: The maximum number of retries each connection + should attempt. Note, this applies only to failed DNS lookups, socket + connections and connection timeouts, never to requests where data has + made it to the server. By default, Requests does not retry failed + connections. If you need granular control over the conditions under + which we retry a request, import urllib3's ``Retry`` class and pass + that instead. + :param pool_block: Whether the connection pool should block for connections. + + Usage:: + + >>> import requests + >>> s = requests.Session() + >>> a = requests.adapters.HTTPAdapter(max_retries=3) + >>> s.mount('http://', a) + """ + + __attrs__ = [ + "max_retries", + "config", + "_pool_connections", + "_pool_maxsize", + "_pool_block", + ] + + def __init__( + self, + pool_connections=DEFAULT_POOLSIZE, + pool_maxsize=DEFAULT_POOLSIZE, + max_retries=DEFAULT_RETRIES, + pool_block=DEFAULT_POOLBLOCK, + ): + if max_retries == DEFAULT_RETRIES: + self.max_retries = Retry(0, read=False) + else: + self.max_retries = Retry.from_int(max_retries) + self.config = {} + self.proxy_manager = {} + + super().__init__() + + self._pool_connections = pool_connections + self._pool_maxsize = pool_maxsize + self._pool_block = pool_block + + self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) + + def __getstate__(self): + return {attr: getattr(self, attr, None) for attr in self.__attrs__} + + def __setstate__(self, state): + # Can't handle by adding 'proxy_manager' to self.__attrs__ because + # self.poolmanager uses a lambda function, which isn't pickleable. + self.proxy_manager = {} + self.config = {} + + for attr, value in state.items(): + setattr(self, attr, value) + + self.init_poolmanager( + self._pool_connections, self._pool_maxsize, block=self._pool_block + ) + + def init_poolmanager( + self, connections, maxsize, block=DEFAULT_POOLBLOCK, **pool_kwargs + ): + """Initializes a urllib3 PoolManager. + + This method should not be called from user code, and is only + exposed for use when subclassing the + :class:`HTTPAdapter `. + + :param connections: The number of urllib3 connection pools to cache. + :param maxsize: The maximum number of connections to save in the pool. + :param block: Block when no free connections are available. + :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager. + """ + # save these values for pickling + self._pool_connections = connections + self._pool_maxsize = maxsize + self._pool_block = block + + self.poolmanager = PoolManager( + num_pools=connections, + maxsize=maxsize, + block=block, + **pool_kwargs, + ) + + def proxy_manager_for(self, proxy, **proxy_kwargs): + """Return urllib3 ProxyManager for the given proxy. + + This method should not be called from user code, and is only + exposed for use when subclassing the + :class:`HTTPAdapter `. + + :param proxy: The proxy to return a urllib3 ProxyManager for. + :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager. + :returns: ProxyManager + :rtype: urllib3.ProxyManager + """ + if proxy in self.proxy_manager: + manager = self.proxy_manager[proxy] + elif proxy.lower().startswith("socks"): + username, password = get_auth_from_url(proxy) + manager = self.proxy_manager[proxy] = SOCKSProxyManager( + proxy, + username=username, + password=password, + num_pools=self._pool_connections, + maxsize=self._pool_maxsize, + block=self._pool_block, + **proxy_kwargs, + ) + else: + proxy_headers = self.proxy_headers(proxy) + manager = self.proxy_manager[proxy] = proxy_from_url( + proxy, + proxy_headers=proxy_headers, + num_pools=self._pool_connections, + maxsize=self._pool_maxsize, + block=self._pool_block, + **proxy_kwargs, + ) + + return manager + + def cert_verify(self, conn, url, verify, cert): + """Verify a SSL certificate. This method should not be called from user + code, and is only exposed for use when subclassing the + :class:`HTTPAdapter `. + + :param conn: The urllib3 connection object associated with the cert. + :param url: The requested URL. + :param verify: Either a boolean, in which case it controls whether we verify + the server's TLS certificate, or a string, in which case it must be a path + to a CA bundle to use + :param cert: The SSL certificate to verify. + """ + if url.lower().startswith("https") and verify: + + cert_loc = None + + # Allow self-specified cert location. + if verify is not True: + cert_loc = verify + + if not cert_loc: + cert_loc = extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH) + + if not cert_loc or not os.path.exists(cert_loc): + raise OSError( + f"Could not find a suitable TLS CA certificate bundle, " + f"invalid path: {cert_loc}" + ) + + conn.cert_reqs = "CERT_REQUIRED" + + if not os.path.isdir(cert_loc): + conn.ca_certs = cert_loc + else: + conn.ca_cert_dir = cert_loc + else: + conn.cert_reqs = "CERT_NONE" + conn.ca_certs = None + conn.ca_cert_dir = None + + if cert: + if not isinstance(cert, basestring): + conn.cert_file = cert[0] + conn.key_file = cert[1] + else: + conn.cert_file = cert + conn.key_file = None + if conn.cert_file and not os.path.exists(conn.cert_file): + raise OSError( + f"Could not find the TLS certificate file, " + f"invalid path: {conn.cert_file}" + ) + if conn.key_file and not os.path.exists(conn.key_file): + raise OSError( + f"Could not find the TLS key file, invalid path: {conn.key_file}" + ) + + def build_response(self, req, resp): + """Builds a :class:`Response ` object from a urllib3 + response. This should not be called from user code, and is only exposed + for use when subclassing the + :class:`HTTPAdapter ` + + :param req: The :class:`PreparedRequest ` used to generate the response. + :param resp: The urllib3 response object. + :rtype: requests.Response + """ + response = Response() + + # Fallback to None if there's no status_code, for whatever reason. + response.status_code = getattr(resp, "status", None) + + # Make headers case-insensitive. + response.headers = CaseInsensitiveDict(getattr(resp, "headers", {})) + + # Set encoding. + response.encoding = get_encoding_from_headers(response.headers) + response.raw = resp + response.reason = response.raw.reason + + if isinstance(req.url, bytes): + response.url = req.url.decode("utf-8") + else: + response.url = req.url + + # Add new cookies from the server. + extract_cookies_to_jar(response.cookies, req, resp) + + # Give the Response some context. + response.request = req + response.connection = self + + return response + + def get_connection(self, url, proxies=None): + """Returns a urllib3 connection for the given URL. This should not be + called from user code, and is only exposed for use when subclassing the + :class:`HTTPAdapter `. + + :param url: The URL to connect to. + :param proxies: (optional) A Requests-style dictionary of proxies used on this request. + :rtype: urllib3.ConnectionPool + """ + proxy = select_proxy(url, proxies) + + if proxy: + proxy = prepend_scheme_if_needed(proxy, "http") + proxy_url = parse_url(proxy) + if not proxy_url.host: + raise InvalidProxyURL( + "Please check proxy URL. It is malformed " + "and could be missing the host." + ) + proxy_manager = self.proxy_manager_for(proxy) + conn = proxy_manager.connection_from_url(url) + else: + # Only scheme should be lower case + parsed = urlparse(url) + url = parsed.geturl() + conn = self.poolmanager.connection_from_url(url) + + return conn + + def close(self): + """Disposes of any internal state. + + Currently, this closes the PoolManager and any active ProxyManager, + which closes any pooled connections. + """ + self.poolmanager.clear() + for proxy in self.proxy_manager.values(): + proxy.clear() + + def request_url(self, request, proxies): + """Obtain the url to use when making the final request. + + If the message is being sent through a HTTP proxy, the full URL has to + be used. Otherwise, we should only use the path portion of the URL. + + This should not be called from user code, and is only exposed for use + when subclassing the + :class:`HTTPAdapter `. + + :param request: The :class:`PreparedRequest ` being sent. + :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs. + :rtype: str + """ + proxy = select_proxy(request.url, proxies) + scheme = urlparse(request.url).scheme + + is_proxied_http_request = proxy and scheme != "https" + using_socks_proxy = False + if proxy: + proxy_scheme = urlparse(proxy).scheme.lower() + using_socks_proxy = proxy_scheme.startswith("socks") + + url = request.path_url + if is_proxied_http_request and not using_socks_proxy: + url = urldefragauth(request.url) + + return url + + def add_headers(self, request, **kwargs): + """Add any headers needed by the connection. As of v2.0 this does + nothing by default, but is left for overriding by users that subclass + the :class:`HTTPAdapter `. + + This should not be called from user code, and is only exposed for use + when subclassing the + :class:`HTTPAdapter `. + + :param request: The :class:`PreparedRequest ` to add headers to. + :param kwargs: The keyword arguments from the call to send(). + """ + pass + + def proxy_headers(self, proxy): + """Returns a dictionary of the headers to add to any request sent + through a proxy. This works with urllib3 magic to ensure that they are + correctly sent to the proxy, rather than in a tunnelled request if + CONNECT is being used. + + This should not be called from user code, and is only exposed for use + when subclassing the + :class:`HTTPAdapter `. + + :param proxy: The url of the proxy being used for this request. + :rtype: dict + """ + headers = {} + username, password = get_auth_from_url(proxy) + + if username: + headers["Proxy-Authorization"] = _basic_auth_str(username, password) + + return headers + + def send( + self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None + ): + """Sends PreparedRequest object. Returns Response object. + + :param request: The :class:`PreparedRequest ` being sent. + :param stream: (optional) Whether to stream the request content. + :param timeout: (optional) How long to wait for the server to send + data before giving up, as a float, or a :ref:`(connect timeout, + read timeout) ` tuple. + :type timeout: float or tuple or urllib3 Timeout object + :param verify: (optional) Either a boolean, in which case it controls whether + we verify the server's TLS certificate, or a string, in which case it + must be a path to a CA bundle to use + :param cert: (optional) Any user-provided SSL certificate to be trusted. + :param proxies: (optional) The proxies dictionary to apply to the request. + :rtype: requests.Response + """ + + try: + conn = self.get_connection(request.url, proxies) + except LocationValueError as e: + raise InvalidURL(e, request=request) + + self.cert_verify(conn, request.url, verify, cert) + url = self.request_url(request, proxies) + self.add_headers( + request, + stream=stream, + timeout=timeout, + verify=verify, + cert=cert, + proxies=proxies, + ) + + chunked = not (request.body is None or "Content-Length" in request.headers) + + if isinstance(timeout, tuple): + try: + connect, read = timeout + timeout = TimeoutSauce(connect=connect, read=read) + except ValueError: + raise ValueError( + f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " + f"or a single float to set both timeouts to the same value." + ) + elif isinstance(timeout, TimeoutSauce): + pass + else: + timeout = TimeoutSauce(connect=timeout, read=timeout) + + try: + resp = conn.urlopen( + method=request.method, + url=url, + body=request.body, + headers=request.headers, + redirect=False, + assert_same_host=False, + preload_content=False, + decode_content=False, + retries=self.max_retries, + timeout=timeout, + chunked=chunked, + ) + + except (ProtocolError, OSError) as err: + raise ConnectionError(err, request=request) + + except MaxRetryError as e: + if isinstance(e.reason, ConnectTimeoutError): + # TODO: Remove this in 3.0.0: see #2811 + if not isinstance(e.reason, NewConnectionError): + raise ConnectTimeout(e, request=request) + + if isinstance(e.reason, ResponseError): + raise RetryError(e, request=request) + + if isinstance(e.reason, _ProxyError): + raise ProxyError(e, request=request) + + if isinstance(e.reason, _SSLError): + # This branch is for urllib3 v1.22 and later. + raise SSLError(e, request=request) + + raise ConnectionError(e, request=request) + + except ClosedPoolError as e: + raise ConnectionError(e, request=request) + + except _ProxyError as e: + raise ProxyError(e) + + except (_SSLError, _HTTPError) as e: + if isinstance(e, _SSLError): + # This branch is for urllib3 versions earlier than v1.22 + raise SSLError(e, request=request) + elif isinstance(e, ReadTimeoutError): + raise ReadTimeout(e, request=request) + elif isinstance(e, _InvalidHeader): + raise InvalidHeader(e, request=request) + else: + raise + + return self.build_response(request, resp) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/api.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/api.py new file mode 100644 index 0000000..cd0b3ee --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/api.py @@ -0,0 +1,157 @@ +""" +requests.api +~~~~~~~~~~~~ + +This module implements the Requests API. + +:copyright: (c) 2012 by Kenneth Reitz. +:license: Apache2, see LICENSE for more details. +""" + +from . import sessions + + +def request(method, url, **kwargs): + """Constructs and sends a :class:`Request `. + + :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``. + :param url: URL for the new :class:`Request` object. + :param params: (optional) Dictionary, list of tuples or bytes to send + in the query string for the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. + :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. + :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. + :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload. + ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')`` + or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string + defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers + to add for the file. + :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. + :param timeout: (optional) How many seconds to wait for the server to send data + before giving up, as a float, or a :ref:`(connect timeout, read + timeout) ` tuple. + :type timeout: float or tuple + :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``. + :type allow_redirects: bool + :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. + :param verify: (optional) Either a boolean, in which case it controls whether we verify + the server's TLS certificate, or a string, in which case it must be a path + to a CA bundle to use. Defaults to ``True``. + :param stream: (optional) if ``False``, the response content will be immediately downloaded. + :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. + :return: :class:`Response ` object + :rtype: requests.Response + + Usage:: + + >>> import requests + >>> req = requests.request('GET', 'https://httpbin.org/get') + >>> req + + """ + + # By using the 'with' statement we are sure the session is closed, thus we + # avoid leaving sockets open which can trigger a ResourceWarning in some + # cases, and look like a memory leak in others. + with sessions.Session() as session: + return session.request(method=method, url=url, **kwargs) + + +def get(url, params=None, **kwargs): + r"""Sends a GET request. + + :param url: URL for the new :class:`Request` object. + :param params: (optional) Dictionary, list of tuples or bytes to send + in the query string for the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("get", url, params=params, **kwargs) + + +def options(url, **kwargs): + r"""Sends an OPTIONS request. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("options", url, **kwargs) + + +def head(url, **kwargs): + r"""Sends a HEAD request. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. If + `allow_redirects` is not provided, it will be set to `False` (as + opposed to the default :meth:`request` behavior). + :return: :class:`Response ` object + :rtype: requests.Response + """ + + kwargs.setdefault("allow_redirects", False) + return request("head", url, **kwargs) + + +def post(url, data=None, json=None, **kwargs): + r"""Sends a POST request. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("post", url, data=data, json=json, **kwargs) + + +def put(url, data=None, **kwargs): + r"""Sends a PUT request. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("put", url, data=data, **kwargs) + + +def patch(url, data=None, **kwargs): + r"""Sends a PATCH request. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("patch", url, data=data, **kwargs) + + +def delete(url, **kwargs): + r"""Sends a DELETE request. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("delete", url, **kwargs) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/auth.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/auth.py new file mode 100644 index 0000000..9733686 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/auth.py @@ -0,0 +1,315 @@ +""" +requests.auth +~~~~~~~~~~~~~ + +This module contains the authentication handlers for Requests. +""" + +import hashlib +import os +import re +import threading +import time +import warnings +from base64 import b64encode + +from ._internal_utils import to_native_string +from .compat import basestring, str, urlparse +from .cookies import extract_cookies_to_jar +from .utils import parse_dict_header + +CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded" +CONTENT_TYPE_MULTI_PART = "multipart/form-data" + + +def _basic_auth_str(username, password): + """Returns a Basic Auth string.""" + + # "I want us to put a big-ol' comment on top of it that + # says that this behaviour is dumb but we need to preserve + # it because people are relying on it." + # - Lukasa + # + # These are here solely to maintain backwards compatibility + # for things like ints. This will be removed in 3.0.0. + if not isinstance(username, basestring): + warnings.warn( + "Non-string usernames will no longer be supported in Requests " + "3.0.0. Please convert the object you've passed in ({!r}) to " + "a string or bytes object in the near future to avoid " + "problems.".format(username), + category=DeprecationWarning, + ) + username = str(username) + + if not isinstance(password, basestring): + warnings.warn( + "Non-string passwords will no longer be supported in Requests " + "3.0.0. Please convert the object you've passed in ({!r}) to " + "a string or bytes object in the near future to avoid " + "problems.".format(type(password)), + category=DeprecationWarning, + ) + password = str(password) + # -- End Removal -- + + if isinstance(username, str): + username = username.encode("latin1") + + if isinstance(password, str): + password = password.encode("latin1") + + authstr = "Basic " + to_native_string( + b64encode(b":".join((username, password))).strip() + ) + + return authstr + + +class AuthBase: + """Base class that all auth implementations derive from""" + + def __call__(self, r): + raise NotImplementedError("Auth hooks must be callable.") + + +class HTTPBasicAuth(AuthBase): + """Attaches HTTP Basic Authentication to the given Request object.""" + + def __init__(self, username, password): + self.username = username + self.password = password + + def __eq__(self, other): + return all( + [ + self.username == getattr(other, "username", None), + self.password == getattr(other, "password", None), + ] + ) + + def __ne__(self, other): + return not self == other + + def __call__(self, r): + r.headers["Authorization"] = _basic_auth_str(self.username, self.password) + return r + + +class HTTPProxyAuth(HTTPBasicAuth): + """Attaches HTTP Proxy Authentication to a given Request object.""" + + def __call__(self, r): + r.headers["Proxy-Authorization"] = _basic_auth_str(self.username, self.password) + return r + + +class HTTPDigestAuth(AuthBase): + """Attaches HTTP Digest Authentication to the given Request object.""" + + def __init__(self, username, password): + self.username = username + self.password = password + # Keep state in per-thread local storage + self._thread_local = threading.local() + + def init_per_thread_state(self): + # Ensure state is initialized just once per-thread + if not hasattr(self._thread_local, "init"): + self._thread_local.init = True + self._thread_local.last_nonce = "" + self._thread_local.nonce_count = 0 + self._thread_local.chal = {} + self._thread_local.pos = None + self._thread_local.num_401_calls = None + + def build_digest_header(self, method, url): + """ + :rtype: str + """ + + realm = self._thread_local.chal["realm"] + nonce = self._thread_local.chal["nonce"] + qop = self._thread_local.chal.get("qop") + algorithm = self._thread_local.chal.get("algorithm") + opaque = self._thread_local.chal.get("opaque") + hash_utf8 = None + + if algorithm is None: + _algorithm = "MD5" + else: + _algorithm = algorithm.upper() + # lambdas assume digest modules are imported at the top level + if _algorithm == "MD5" or _algorithm == "MD5-SESS": + + def md5_utf8(x): + if isinstance(x, str): + x = x.encode("utf-8") + return hashlib.md5(x).hexdigest() + + hash_utf8 = md5_utf8 + elif _algorithm == "SHA": + + def sha_utf8(x): + if isinstance(x, str): + x = x.encode("utf-8") + return hashlib.sha1(x).hexdigest() + + hash_utf8 = sha_utf8 + elif _algorithm == "SHA-256": + + def sha256_utf8(x): + if isinstance(x, str): + x = x.encode("utf-8") + return hashlib.sha256(x).hexdigest() + + hash_utf8 = sha256_utf8 + elif _algorithm == "SHA-512": + + def sha512_utf8(x): + if isinstance(x, str): + x = x.encode("utf-8") + return hashlib.sha512(x).hexdigest() + + hash_utf8 = sha512_utf8 + + KD = lambda s, d: hash_utf8(f"{s}:{d}") # noqa:E731 + + if hash_utf8 is None: + return None + + # XXX not implemented yet + entdig = None + p_parsed = urlparse(url) + #: path is request-uri defined in RFC 2616 which should not be empty + path = p_parsed.path or "/" + if p_parsed.query: + path += f"?{p_parsed.query}" + + A1 = f"{self.username}:{realm}:{self.password}" + A2 = f"{method}:{path}" + + HA1 = hash_utf8(A1) + HA2 = hash_utf8(A2) + + if nonce == self._thread_local.last_nonce: + self._thread_local.nonce_count += 1 + else: + self._thread_local.nonce_count = 1 + ncvalue = f"{self._thread_local.nonce_count:08x}" + s = str(self._thread_local.nonce_count).encode("utf-8") + s += nonce.encode("utf-8") + s += time.ctime().encode("utf-8") + s += os.urandom(8) + + cnonce = hashlib.sha1(s).hexdigest()[:16] + if _algorithm == "MD5-SESS": + HA1 = hash_utf8(f"{HA1}:{nonce}:{cnonce}") + + if not qop: + respdig = KD(HA1, f"{nonce}:{HA2}") + elif qop == "auth" or "auth" in qop.split(","): + noncebit = f"{nonce}:{ncvalue}:{cnonce}:auth:{HA2}" + respdig = KD(HA1, noncebit) + else: + # XXX handle auth-int. + return None + + self._thread_local.last_nonce = nonce + + # XXX should the partial digests be encoded too? + base = ( + f'username="{self.username}", realm="{realm}", nonce="{nonce}", ' + f'uri="{path}", response="{respdig}"' + ) + if opaque: + base += f', opaque="{opaque}"' + if algorithm: + base += f', algorithm="{algorithm}"' + if entdig: + base += f', digest="{entdig}"' + if qop: + base += f', qop="auth", nc={ncvalue}, cnonce="{cnonce}"' + + return f"Digest {base}" + + def handle_redirect(self, r, **kwargs): + """Reset num_401_calls counter on redirects.""" + if r.is_redirect: + self._thread_local.num_401_calls = 1 + + def handle_401(self, r, **kwargs): + """ + Takes the given response and tries digest-auth, if needed. + + :rtype: requests.Response + """ + + # If response is not 4xx, do not auth + # See https://github.com/psf/requests/issues/3772 + if not 400 <= r.status_code < 500: + self._thread_local.num_401_calls = 1 + return r + + if self._thread_local.pos is not None: + # Rewind the file position indicator of the body to where + # it was to resend the request. + r.request.body.seek(self._thread_local.pos) + s_auth = r.headers.get("www-authenticate", "") + + if "digest" in s_auth.lower() and self._thread_local.num_401_calls < 2: + + self._thread_local.num_401_calls += 1 + pat = re.compile(r"digest ", flags=re.IGNORECASE) + self._thread_local.chal = parse_dict_header(pat.sub("", s_auth, count=1)) + + # Consume content and release the original connection + # to allow our new request to reuse the same one. + r.content + r.close() + prep = r.request.copy() + extract_cookies_to_jar(prep._cookies, r.request, r.raw) + prep.prepare_cookies(prep._cookies) + + prep.headers["Authorization"] = self.build_digest_header( + prep.method, prep.url + ) + _r = r.connection.send(prep, **kwargs) + _r.history.append(r) + _r.request = prep + + return _r + + self._thread_local.num_401_calls = 1 + return r + + def __call__(self, r): + # Initialize per-thread state, if needed + self.init_per_thread_state() + # If we have a saved nonce, skip the 401 + if self._thread_local.last_nonce: + r.headers["Authorization"] = self.build_digest_header(r.method, r.url) + try: + self._thread_local.pos = r.body.tell() + except AttributeError: + # In the case of HTTPDigestAuth being reused and the body of + # the previous request was a file-like object, pos has the + # file position of the previous body. Ensure it's set to + # None. + self._thread_local.pos = None + r.register_hook("response", self.handle_401) + r.register_hook("response", self.handle_redirect) + self._thread_local.num_401_calls = 1 + + return r + + def __eq__(self, other): + return all( + [ + self.username == getattr(other, "username", None), + self.password == getattr(other, "password", None), + ] + ) + + def __ne__(self, other): + return not self == other diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/certs.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/certs.py new file mode 100644 index 0000000..38696a1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/certs.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +""" +requests.certs +~~~~~~~~~~~~~~ + +This module returns the preferred default CA certificate bundle. There is +only one — the one from the certifi package. + +If you are packaging Requests, e.g., for a Linux distribution or a managed +environment, you can change the definition of where() to return a separately +packaged CA bundle. +""" + +import os + +if "_PIP_STANDALONE_CERT" not in os.environ: + from pip._vendor.certifi import where +else: + def where(): + return os.environ["_PIP_STANDALONE_CERT"] + +if __name__ == "__main__": + print(where()) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/compat.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/compat.py new file mode 100644 index 0000000..9ab2bb4 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/compat.py @@ -0,0 +1,67 @@ +""" +requests.compat +~~~~~~~~~~~~~~~ + +This module previously handled import compatibility issues +between Python 2 and Python 3. It remains for backwards +compatibility until the next major version. +""" + +from pip._vendor import chardet + +import sys + +# ------- +# Pythons +# ------- + +# Syntax sugar. +_ver = sys.version_info + +#: Python 2.x? +is_py2 = _ver[0] == 2 + +#: Python 3.x? +is_py3 = _ver[0] == 3 + +# Note: We've patched out simplejson support in pip because it prevents +# upgrading simplejson on Windows. +import json +from json import JSONDecodeError + +# Keep OrderedDict for backwards compatibility. +from collections import OrderedDict +from collections.abc import Callable, Mapping, MutableMapping +from http import cookiejar as cookielib +from http.cookies import Morsel +from io import StringIO + +# -------------- +# Legacy Imports +# -------------- +from urllib.parse import ( + quote, + quote_plus, + unquote, + unquote_plus, + urldefrag, + urlencode, + urljoin, + urlparse, + urlsplit, + urlunparse, +) +from urllib.request import ( + getproxies, + getproxies_environment, + parse_http_list, + proxy_bypass, + proxy_bypass_environment, +) + +builtin_str = str +str = str +bytes = bytes +basestring = (str, bytes) +numeric_types = (int, float) +integer_types = (int,) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/cookies.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/cookies.py new file mode 100644 index 0000000..bf54ab2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/cookies.py @@ -0,0 +1,561 @@ +""" +requests.cookies +~~~~~~~~~~~~~~~~ + +Compatibility code to be able to use `cookielib.CookieJar` with requests. + +requests.utils imports from here, so be careful with imports. +""" + +import calendar +import copy +import time + +from ._internal_utils import to_native_string +from .compat import Morsel, MutableMapping, cookielib, urlparse, urlunparse + +try: + import threading +except ImportError: + import dummy_threading as threading + + +class MockRequest: + """Wraps a `requests.Request` to mimic a `urllib2.Request`. + + The code in `cookielib.CookieJar` expects this interface in order to correctly + manage cookie policies, i.e., determine whether a cookie can be set, given the + domains of the request and the cookie. + + The original request object is read-only. The client is responsible for collecting + the new headers via `get_new_headers()` and interpreting them appropriately. You + probably want `get_cookie_header`, defined below. + """ + + def __init__(self, request): + self._r = request + self._new_headers = {} + self.type = urlparse(self._r.url).scheme + + def get_type(self): + return self.type + + def get_host(self): + return urlparse(self._r.url).netloc + + def get_origin_req_host(self): + return self.get_host() + + def get_full_url(self): + # Only return the response's URL if the user hadn't set the Host + # header + if not self._r.headers.get("Host"): + return self._r.url + # If they did set it, retrieve it and reconstruct the expected domain + host = to_native_string(self._r.headers["Host"], encoding="utf-8") + parsed = urlparse(self._r.url) + # Reconstruct the URL as we expect it + return urlunparse( + [ + parsed.scheme, + host, + parsed.path, + parsed.params, + parsed.query, + parsed.fragment, + ] + ) + + def is_unverifiable(self): + return True + + def has_header(self, name): + return name in self._r.headers or name in self._new_headers + + def get_header(self, name, default=None): + return self._r.headers.get(name, self._new_headers.get(name, default)) + + def add_header(self, key, val): + """cookielib has no legitimate use for this method; add it back if you find one.""" + raise NotImplementedError( + "Cookie headers should be added with add_unredirected_header()" + ) + + def add_unredirected_header(self, name, value): + self._new_headers[name] = value + + def get_new_headers(self): + return self._new_headers + + @property + def unverifiable(self): + return self.is_unverifiable() + + @property + def origin_req_host(self): + return self.get_origin_req_host() + + @property + def host(self): + return self.get_host() + + +class MockResponse: + """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`. + + ...what? Basically, expose the parsed HTTP headers from the server response + the way `cookielib` expects to see them. + """ + + def __init__(self, headers): + """Make a MockResponse for `cookielib` to read. + + :param headers: a httplib.HTTPMessage or analogous carrying the headers + """ + self._headers = headers + + def info(self): + return self._headers + + def getheaders(self, name): + self._headers.getheaders(name) + + +def extract_cookies_to_jar(jar, request, response): + """Extract the cookies from the response into a CookieJar. + + :param jar: cookielib.CookieJar (not necessarily a RequestsCookieJar) + :param request: our own requests.Request object + :param response: urllib3.HTTPResponse object + """ + if not (hasattr(response, "_original_response") and response._original_response): + return + # the _original_response field is the wrapped httplib.HTTPResponse object, + req = MockRequest(request) + # pull out the HTTPMessage with the headers and put it in the mock: + res = MockResponse(response._original_response.msg) + jar.extract_cookies(res, req) + + +def get_cookie_header(jar, request): + """ + Produce an appropriate Cookie header string to be sent with `request`, or None. + + :rtype: str + """ + r = MockRequest(request) + jar.add_cookie_header(r) + return r.get_new_headers().get("Cookie") + + +def remove_cookie_by_name(cookiejar, name, domain=None, path=None): + """Unsets a cookie by name, by default over all domains and paths. + + Wraps CookieJar.clear(), is O(n). + """ + clearables = [] + for cookie in cookiejar: + if cookie.name != name: + continue + if domain is not None and domain != cookie.domain: + continue + if path is not None and path != cookie.path: + continue + clearables.append((cookie.domain, cookie.path, cookie.name)) + + for domain, path, name in clearables: + cookiejar.clear(domain, path, name) + + +class CookieConflictError(RuntimeError): + """There are two cookies that meet the criteria specified in the cookie jar. + Use .get and .set and include domain and path args in order to be more specific. + """ + + +class RequestsCookieJar(cookielib.CookieJar, MutableMapping): + """Compatibility class; is a cookielib.CookieJar, but exposes a dict + interface. + + This is the CookieJar we create by default for requests and sessions that + don't specify one, since some clients may expect response.cookies and + session.cookies to support dict operations. + + Requests does not use the dict interface internally; it's just for + compatibility with external client code. All requests code should work + out of the box with externally provided instances of ``CookieJar``, e.g. + ``LWPCookieJar`` and ``FileCookieJar``. + + Unlike a regular CookieJar, this class is pickleable. + + .. warning:: dictionary operations that are normally O(1) may be O(n). + """ + + def get(self, name, default=None, domain=None, path=None): + """Dict-like get() that also supports optional domain and path args in + order to resolve naming collisions from using one cookie jar over + multiple domains. + + .. warning:: operation is O(n), not O(1). + """ + try: + return self._find_no_duplicates(name, domain, path) + except KeyError: + return default + + def set(self, name, value, **kwargs): + """Dict-like set() that also supports optional domain and path args in + order to resolve naming collisions from using one cookie jar over + multiple domains. + """ + # support client code that unsets cookies by assignment of a None value: + if value is None: + remove_cookie_by_name( + self, name, domain=kwargs.get("domain"), path=kwargs.get("path") + ) + return + + if isinstance(value, Morsel): + c = morsel_to_cookie(value) + else: + c = create_cookie(name, value, **kwargs) + self.set_cookie(c) + return c + + def iterkeys(self): + """Dict-like iterkeys() that returns an iterator of names of cookies + from the jar. + + .. seealso:: itervalues() and iteritems(). + """ + for cookie in iter(self): + yield cookie.name + + def keys(self): + """Dict-like keys() that returns a list of names of cookies from the + jar. + + .. seealso:: values() and items(). + """ + return list(self.iterkeys()) + + def itervalues(self): + """Dict-like itervalues() that returns an iterator of values of cookies + from the jar. + + .. seealso:: iterkeys() and iteritems(). + """ + for cookie in iter(self): + yield cookie.value + + def values(self): + """Dict-like values() that returns a list of values of cookies from the + jar. + + .. seealso:: keys() and items(). + """ + return list(self.itervalues()) + + def iteritems(self): + """Dict-like iteritems() that returns an iterator of name-value tuples + from the jar. + + .. seealso:: iterkeys() and itervalues(). + """ + for cookie in iter(self): + yield cookie.name, cookie.value + + def items(self): + """Dict-like items() that returns a list of name-value tuples from the + jar. Allows client-code to call ``dict(RequestsCookieJar)`` and get a + vanilla python dict of key value pairs. + + .. seealso:: keys() and values(). + """ + return list(self.iteritems()) + + def list_domains(self): + """Utility method to list all the domains in the jar.""" + domains = [] + for cookie in iter(self): + if cookie.domain not in domains: + domains.append(cookie.domain) + return domains + + def list_paths(self): + """Utility method to list all the paths in the jar.""" + paths = [] + for cookie in iter(self): + if cookie.path not in paths: + paths.append(cookie.path) + return paths + + def multiple_domains(self): + """Returns True if there are multiple domains in the jar. + Returns False otherwise. + + :rtype: bool + """ + domains = [] + for cookie in iter(self): + if cookie.domain is not None and cookie.domain in domains: + return True + domains.append(cookie.domain) + return False # there is only one domain in jar + + def get_dict(self, domain=None, path=None): + """Takes as an argument an optional domain and path and returns a plain + old Python dict of name-value pairs of cookies that meet the + requirements. + + :rtype: dict + """ + dictionary = {} + for cookie in iter(self): + if (domain is None or cookie.domain == domain) and ( + path is None or cookie.path == path + ): + dictionary[cookie.name] = cookie.value + return dictionary + + def __contains__(self, name): + try: + return super().__contains__(name) + except CookieConflictError: + return True + + def __getitem__(self, name): + """Dict-like __getitem__() for compatibility with client code. Throws + exception if there are more than one cookie with name. In that case, + use the more explicit get() method instead. + + .. warning:: operation is O(n), not O(1). + """ + return self._find_no_duplicates(name) + + def __setitem__(self, name, value): + """Dict-like __setitem__ for compatibility with client code. Throws + exception if there is already a cookie of that name in the jar. In that + case, use the more explicit set() method instead. + """ + self.set(name, value) + + def __delitem__(self, name): + """Deletes a cookie given a name. Wraps ``cookielib.CookieJar``'s + ``remove_cookie_by_name()``. + """ + remove_cookie_by_name(self, name) + + def set_cookie(self, cookie, *args, **kwargs): + if ( + hasattr(cookie.value, "startswith") + and cookie.value.startswith('"') + and cookie.value.endswith('"') + ): + cookie.value = cookie.value.replace('\\"', "") + return super().set_cookie(cookie, *args, **kwargs) + + def update(self, other): + """Updates this jar with cookies from another CookieJar or dict-like""" + if isinstance(other, cookielib.CookieJar): + for cookie in other: + self.set_cookie(copy.copy(cookie)) + else: + super().update(other) + + def _find(self, name, domain=None, path=None): + """Requests uses this method internally to get cookie values. + + If there are conflicting cookies, _find arbitrarily chooses one. + See _find_no_duplicates if you want an exception thrown if there are + conflicting cookies. + + :param name: a string containing name of cookie + :param domain: (optional) string containing domain of cookie + :param path: (optional) string containing path of cookie + :return: cookie.value + """ + for cookie in iter(self): + if cookie.name == name: + if domain is None or cookie.domain == domain: + if path is None or cookie.path == path: + return cookie.value + + raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}") + + def _find_no_duplicates(self, name, domain=None, path=None): + """Both ``__get_item__`` and ``get`` call this function: it's never + used elsewhere in Requests. + + :param name: a string containing name of cookie + :param domain: (optional) string containing domain of cookie + :param path: (optional) string containing path of cookie + :raises KeyError: if cookie is not found + :raises CookieConflictError: if there are multiple cookies + that match name and optionally domain and path + :return: cookie.value + """ + toReturn = None + for cookie in iter(self): + if cookie.name == name: + if domain is None or cookie.domain == domain: + if path is None or cookie.path == path: + if toReturn is not None: + # if there are multiple cookies that meet passed in criteria + raise CookieConflictError( + f"There are multiple cookies with name, {name!r}" + ) + # we will eventually return this as long as no cookie conflict + toReturn = cookie.value + + if toReturn: + return toReturn + raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}") + + def __getstate__(self): + """Unlike a normal CookieJar, this class is pickleable.""" + state = self.__dict__.copy() + # remove the unpickleable RLock object + state.pop("_cookies_lock") + return state + + def __setstate__(self, state): + """Unlike a normal CookieJar, this class is pickleable.""" + self.__dict__.update(state) + if "_cookies_lock" not in self.__dict__: + self._cookies_lock = threading.RLock() + + def copy(self): + """Return a copy of this RequestsCookieJar.""" + new_cj = RequestsCookieJar() + new_cj.set_policy(self.get_policy()) + new_cj.update(self) + return new_cj + + def get_policy(self): + """Return the CookiePolicy instance used.""" + return self._policy + + +def _copy_cookie_jar(jar): + if jar is None: + return None + + if hasattr(jar, "copy"): + # We're dealing with an instance of RequestsCookieJar + return jar.copy() + # We're dealing with a generic CookieJar instance + new_jar = copy.copy(jar) + new_jar.clear() + for cookie in jar: + new_jar.set_cookie(copy.copy(cookie)) + return new_jar + + +def create_cookie(name, value, **kwargs): + """Make a cookie from underspecified parameters. + + By default, the pair of `name` and `value` will be set for the domain '' + and sent on every request (this is sometimes called a "supercookie"). + """ + result = { + "version": 0, + "name": name, + "value": value, + "port": None, + "domain": "", + "path": "/", + "secure": False, + "expires": None, + "discard": True, + "comment": None, + "comment_url": None, + "rest": {"HttpOnly": None}, + "rfc2109": False, + } + + badargs = set(kwargs) - set(result) + if badargs: + raise TypeError( + f"create_cookie() got unexpected keyword arguments: {list(badargs)}" + ) + + result.update(kwargs) + result["port_specified"] = bool(result["port"]) + result["domain_specified"] = bool(result["domain"]) + result["domain_initial_dot"] = result["domain"].startswith(".") + result["path_specified"] = bool(result["path"]) + + return cookielib.Cookie(**result) + + +def morsel_to_cookie(morsel): + """Convert a Morsel object into a Cookie containing the one k/v pair.""" + + expires = None + if morsel["max-age"]: + try: + expires = int(time.time() + int(morsel["max-age"])) + except ValueError: + raise TypeError(f"max-age: {morsel['max-age']} must be integer") + elif morsel["expires"]: + time_template = "%a, %d-%b-%Y %H:%M:%S GMT" + expires = calendar.timegm(time.strptime(morsel["expires"], time_template)) + return create_cookie( + comment=morsel["comment"], + comment_url=bool(morsel["comment"]), + discard=False, + domain=morsel["domain"], + expires=expires, + name=morsel.key, + path=morsel["path"], + port=None, + rest={"HttpOnly": morsel["httponly"]}, + rfc2109=False, + secure=bool(morsel["secure"]), + value=morsel.value, + version=morsel["version"] or 0, + ) + + +def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): + """Returns a CookieJar from a key/value dictionary. + + :param cookie_dict: Dict of key/values to insert into CookieJar. + :param cookiejar: (optional) A cookiejar to add the cookies to. + :param overwrite: (optional) If False, will not replace cookies + already in the jar with new ones. + :rtype: CookieJar + """ + if cookiejar is None: + cookiejar = RequestsCookieJar() + + if cookie_dict is not None: + names_from_jar = [cookie.name for cookie in cookiejar] + for name in cookie_dict: + if overwrite or (name not in names_from_jar): + cookiejar.set_cookie(create_cookie(name, cookie_dict[name])) + + return cookiejar + + +def merge_cookies(cookiejar, cookies): + """Add cookies to cookiejar and returns a merged CookieJar. + + :param cookiejar: CookieJar object to add the cookies to. + :param cookies: Dictionary or CookieJar object to be added. + :rtype: CookieJar + """ + if not isinstance(cookiejar, cookielib.CookieJar): + raise ValueError("You can only merge into CookieJar") + + if isinstance(cookies, dict): + cookiejar = cookiejar_from_dict(cookies, cookiejar=cookiejar, overwrite=False) + elif isinstance(cookies, cookielib.CookieJar): + try: + cookiejar.update(cookies) + except AttributeError: + for cookie_in_jar in cookies: + cookiejar.set_cookie(cookie_in_jar) + + return cookiejar diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py new file mode 100644 index 0000000..168d073 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py @@ -0,0 +1,141 @@ +""" +requests.exceptions +~~~~~~~~~~~~~~~~~~~ + +This module contains the set of Requests' exceptions. +""" +from pip._vendor.urllib3.exceptions import HTTPError as BaseHTTPError + +from .compat import JSONDecodeError as CompatJSONDecodeError + + +class RequestException(IOError): + """There was an ambiguous exception that occurred while handling your + request. + """ + + def __init__(self, *args, **kwargs): + """Initialize RequestException with `request` and `response` objects.""" + response = kwargs.pop("response", None) + self.response = response + self.request = kwargs.pop("request", None) + if response is not None and not self.request and hasattr(response, "request"): + self.request = self.response.request + super().__init__(*args, **kwargs) + + +class InvalidJSONError(RequestException): + """A JSON error occurred.""" + + +class JSONDecodeError(InvalidJSONError, CompatJSONDecodeError): + """Couldn't decode the text into json""" + + def __init__(self, *args, **kwargs): + """ + Construct the JSONDecodeError instance first with all + args. Then use it's args to construct the IOError so that + the json specific args aren't used as IOError specific args + and the error message from JSONDecodeError is preserved. + """ + CompatJSONDecodeError.__init__(self, *args) + InvalidJSONError.__init__(self, *self.args, **kwargs) + + +class HTTPError(RequestException): + """An HTTP error occurred.""" + + +class ConnectionError(RequestException): + """A Connection error occurred.""" + + +class ProxyError(ConnectionError): + """A proxy error occurred.""" + + +class SSLError(ConnectionError): + """An SSL error occurred.""" + + +class Timeout(RequestException): + """The request timed out. + + Catching this error will catch both + :exc:`~requests.exceptions.ConnectTimeout` and + :exc:`~requests.exceptions.ReadTimeout` errors. + """ + + +class ConnectTimeout(ConnectionError, Timeout): + """The request timed out while trying to connect to the remote server. + + Requests that produced this error are safe to retry. + """ + + +class ReadTimeout(Timeout): + """The server did not send any data in the allotted amount of time.""" + + +class URLRequired(RequestException): + """A valid URL is required to make a request.""" + + +class TooManyRedirects(RequestException): + """Too many redirects.""" + + +class MissingSchema(RequestException, ValueError): + """The URL scheme (e.g. http or https) is missing.""" + + +class InvalidSchema(RequestException, ValueError): + """The URL scheme provided is either invalid or unsupported.""" + + +class InvalidURL(RequestException, ValueError): + """The URL provided was somehow invalid.""" + + +class InvalidHeader(RequestException, ValueError): + """The header value provided was somehow invalid.""" + + +class InvalidProxyURL(InvalidURL): + """The proxy URL provided is invalid.""" + + +class ChunkedEncodingError(RequestException): + """The server declared chunked encoding but sent an invalid chunk.""" + + +class ContentDecodingError(RequestException, BaseHTTPError): + """Failed to decode response content.""" + + +class StreamConsumedError(RequestException, TypeError): + """The content for this response was already consumed.""" + + +class RetryError(RequestException): + """Custom retries logic failed""" + + +class UnrewindableBodyError(RequestException): + """Requests encountered an error when trying to rewind a body.""" + + +# Warnings + + +class RequestsWarning(Warning): + """Base warning for Requests.""" + + +class FileModeWarning(RequestsWarning, DeprecationWarning): + """A file was opened in text mode, but Requests determined its binary length.""" + + +class RequestsDependencyWarning(RequestsWarning): + """An imported dependency doesn't match the expected version range.""" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/help.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/help.py new file mode 100644 index 0000000..2d292c2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/help.py @@ -0,0 +1,131 @@ +"""Module containing bug report helper(s).""" + +import json +import platform +import ssl +import sys + +from pip._vendor import idna +from pip._vendor import urllib3 + +from . import __version__ as requests_version + +charset_normalizer = None + +try: + from pip._vendor import chardet +except ImportError: + chardet = None + +try: + from pip._vendor.urllib3.contrib import pyopenssl +except ImportError: + pyopenssl = None + OpenSSL = None + cryptography = None +else: + import cryptography + import OpenSSL + + +def _implementation(): + """Return a dict with the Python implementation and version. + + Provide both the name and the version of the Python implementation + currently running. For example, on CPython 3.10.3 it will return + {'name': 'CPython', 'version': '3.10.3'}. + + This function works best on CPython and PyPy: in particular, it probably + doesn't work for Jython or IronPython. Future investigation should be done + to work out the correct shape of the code for those platforms. + """ + implementation = platform.python_implementation() + + if implementation == "CPython": + implementation_version = platform.python_version() + elif implementation == "PyPy": + implementation_version = "{}.{}.{}".format( + sys.pypy_version_info.major, + sys.pypy_version_info.minor, + sys.pypy_version_info.micro, + ) + if sys.pypy_version_info.releaselevel != "final": + implementation_version = "".join( + [implementation_version, sys.pypy_version_info.releaselevel] + ) + elif implementation == "Jython": + implementation_version = platform.python_version() # Complete Guess + elif implementation == "IronPython": + implementation_version = platform.python_version() # Complete Guess + else: + implementation_version = "Unknown" + + return {"name": implementation, "version": implementation_version} + + +def info(): + """Generate information for a bug report.""" + try: + platform_info = { + "system": platform.system(), + "release": platform.release(), + } + except OSError: + platform_info = { + "system": "Unknown", + "release": "Unknown", + } + + implementation_info = _implementation() + urllib3_info = {"version": urllib3.__version__} + charset_normalizer_info = {"version": None} + chardet_info = {"version": None} + if charset_normalizer: + charset_normalizer_info = {"version": charset_normalizer.__version__} + if chardet: + chardet_info = {"version": chardet.__version__} + + pyopenssl_info = { + "version": None, + "openssl_version": "", + } + if OpenSSL: + pyopenssl_info = { + "version": OpenSSL.__version__, + "openssl_version": f"{OpenSSL.SSL.OPENSSL_VERSION_NUMBER:x}", + } + cryptography_info = { + "version": getattr(cryptography, "__version__", ""), + } + idna_info = { + "version": getattr(idna, "__version__", ""), + } + + system_ssl = ssl.OPENSSL_VERSION_NUMBER + system_ssl_info = {"version": f"{system_ssl:x}" if system_ssl is not None else ""} + + return { + "platform": platform_info, + "implementation": implementation_info, + "system_ssl": system_ssl_info, + "using_pyopenssl": pyopenssl is not None, + "using_charset_normalizer": chardet is None, + "pyOpenSSL": pyopenssl_info, + "urllib3": urllib3_info, + "chardet": chardet_info, + "charset_normalizer": charset_normalizer_info, + "cryptography": cryptography_info, + "idna": idna_info, + "requests": { + "version": requests_version, + }, + } + + +def main(): + """Pretty-print the bug information as JSON.""" + print(json.dumps(info(), sort_keys=True, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/hooks.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/hooks.py new file mode 100644 index 0000000..d181ba2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/hooks.py @@ -0,0 +1,33 @@ +""" +requests.hooks +~~~~~~~~~~~~~~ + +This module provides the capabilities for the Requests hooks system. + +Available hooks: + +``response``: + The response generated from a Request. +""" +HOOKS = ["response"] + + +def default_hooks(): + return {event: [] for event in HOOKS} + + +# TODO: response is the only one + + +def dispatch_hook(key, hooks, hook_data, **kwargs): + """Dispatches a hook dictionary on a given piece of data.""" + hooks = hooks or {} + hooks = hooks.get(key) + if hooks: + if hasattr(hooks, "__call__"): + hooks = [hooks] + for hook in hooks: + _hook_data = hook(hook_data, **kwargs) + if _hook_data is not None: + hook_data = _hook_data + return hook_data diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/models.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/models.py new file mode 100644 index 0000000..76e6f19 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/models.py @@ -0,0 +1,1034 @@ +""" +requests.models +~~~~~~~~~~~~~~~ + +This module contains the primary objects that power Requests. +""" + +import datetime + +# Import encoding now, to avoid implicit import later. +# Implicit import within threads may cause LookupError when standard library is in a ZIP, +# such as in Embedded Python. See https://github.com/psf/requests/issues/3578. +import encodings.idna # noqa: F401 +from io import UnsupportedOperation + +from pip._vendor.urllib3.exceptions import ( + DecodeError, + LocationParseError, + ProtocolError, + ReadTimeoutError, + SSLError, +) +from pip._vendor.urllib3.fields import RequestField +from pip._vendor.urllib3.filepost import encode_multipart_formdata +from pip._vendor.urllib3.util import parse_url + +from ._internal_utils import to_native_string, unicode_is_ascii +from .auth import HTTPBasicAuth +from .compat import ( + Callable, + JSONDecodeError, + Mapping, + basestring, + builtin_str, + chardet, + cookielib, +) +from .compat import json as complexjson +from .compat import urlencode, urlsplit, urlunparse +from .cookies import _copy_cookie_jar, cookiejar_from_dict, get_cookie_header +from .exceptions import ( + ChunkedEncodingError, + ConnectionError, + ContentDecodingError, + HTTPError, + InvalidJSONError, + InvalidURL, +) +from .exceptions import JSONDecodeError as RequestsJSONDecodeError +from .exceptions import MissingSchema +from .exceptions import SSLError as RequestsSSLError +from .exceptions import StreamConsumedError +from .hooks import default_hooks +from .status_codes import codes +from .structures import CaseInsensitiveDict +from .utils import ( + check_header_validity, + get_auth_from_url, + guess_filename, + guess_json_utf, + iter_slices, + parse_header_links, + requote_uri, + stream_decode_response_unicode, + super_len, + to_key_val_list, +) + +#: The set of HTTP status codes that indicate an automatically +#: processable redirect. +REDIRECT_STATI = ( + codes.moved, # 301 + codes.found, # 302 + codes.other, # 303 + codes.temporary_redirect, # 307 + codes.permanent_redirect, # 308 +) + +DEFAULT_REDIRECT_LIMIT = 30 +CONTENT_CHUNK_SIZE = 10 * 1024 +ITER_CHUNK_SIZE = 512 + + +class RequestEncodingMixin: + @property + def path_url(self): + """Build the path URL to use.""" + + url = [] + + p = urlsplit(self.url) + + path = p.path + if not path: + path = "/" + + url.append(path) + + query = p.query + if query: + url.append("?") + url.append(query) + + return "".join(url) + + @staticmethod + def _encode_params(data): + """Encode parameters in a piece of data. + + Will successfully encode parameters when passed as a dict or a list of + 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary + if parameters are supplied as a dict. + """ + + if isinstance(data, (str, bytes)): + return data + elif hasattr(data, "read"): + return data + elif hasattr(data, "__iter__"): + result = [] + for k, vs in to_key_val_list(data): + if isinstance(vs, basestring) or not hasattr(vs, "__iter__"): + vs = [vs] + for v in vs: + if v is not None: + result.append( + ( + k.encode("utf-8") if isinstance(k, str) else k, + v.encode("utf-8") if isinstance(v, str) else v, + ) + ) + return urlencode(result, doseq=True) + else: + return data + + @staticmethod + def _encode_files(files, data): + """Build the body for a multipart/form-data request. + + Will successfully encode files when passed as a dict or a list of + tuples. Order is retained if data is a list of tuples but arbitrary + if parameters are supplied as a dict. + The tuples may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype) + or 4-tuples (filename, fileobj, contentype, custom_headers). + """ + if not files: + raise ValueError("Files must be provided.") + elif isinstance(data, basestring): + raise ValueError("Data must not be a string.") + + new_fields = [] + fields = to_key_val_list(data or {}) + files = to_key_val_list(files or {}) + + for field, val in fields: + if isinstance(val, basestring) or not hasattr(val, "__iter__"): + val = [val] + for v in val: + if v is not None: + # Don't call str() on bytestrings: in Py3 it all goes wrong. + if not isinstance(v, bytes): + v = str(v) + + new_fields.append( + ( + field.decode("utf-8") + if isinstance(field, bytes) + else field, + v.encode("utf-8") if isinstance(v, str) else v, + ) + ) + + for (k, v) in files: + # support for explicit filename + ft = None + fh = None + if isinstance(v, (tuple, list)): + if len(v) == 2: + fn, fp = v + elif len(v) == 3: + fn, fp, ft = v + else: + fn, fp, ft, fh = v + else: + fn = guess_filename(v) or k + fp = v + + if isinstance(fp, (str, bytes, bytearray)): + fdata = fp + elif hasattr(fp, "read"): + fdata = fp.read() + elif fp is None: + continue + else: + fdata = fp + + rf = RequestField(name=k, data=fdata, filename=fn, headers=fh) + rf.make_multipart(content_type=ft) + new_fields.append(rf) + + body, content_type = encode_multipart_formdata(new_fields) + + return body, content_type + + +class RequestHooksMixin: + def register_hook(self, event, hook): + """Properly register a hook.""" + + if event not in self.hooks: + raise ValueError(f'Unsupported event specified, with event name "{event}"') + + if isinstance(hook, Callable): + self.hooks[event].append(hook) + elif hasattr(hook, "__iter__"): + self.hooks[event].extend(h for h in hook if isinstance(h, Callable)) + + def deregister_hook(self, event, hook): + """Deregister a previously registered hook. + Returns True if the hook existed, False if not. + """ + + try: + self.hooks[event].remove(hook) + return True + except ValueError: + return False + + +class Request(RequestHooksMixin): + """A user-created :class:`Request ` object. + + Used to prepare a :class:`PreparedRequest `, which is sent to the server. + + :param method: HTTP method to use. + :param url: URL to send. + :param headers: dictionary of headers to send. + :param files: dictionary of {filename: fileobject} files to multipart upload. + :param data: the body to attach to the request. If a dictionary or + list of tuples ``[(key, value)]`` is provided, form-encoding will + take place. + :param json: json for the body to attach to the request (if files or data is not specified). + :param params: URL parameters to append to the URL. If a dictionary or + list of tuples ``[(key, value)]`` is provided, form-encoding will + take place. + :param auth: Auth handler or (user, pass) tuple. + :param cookies: dictionary or CookieJar of cookies to attach to this request. + :param hooks: dictionary of callback hooks, for internal usage. + + Usage:: + + >>> import requests + >>> req = requests.Request('GET', 'https://httpbin.org/get') + >>> req.prepare() + + """ + + def __init__( + self, + method=None, + url=None, + headers=None, + files=None, + data=None, + params=None, + auth=None, + cookies=None, + hooks=None, + json=None, + ): + + # Default empty dicts for dict params. + data = [] if data is None else data + files = [] if files is None else files + headers = {} if headers is None else headers + params = {} if params is None else params + hooks = {} if hooks is None else hooks + + self.hooks = default_hooks() + for (k, v) in list(hooks.items()): + self.register_hook(event=k, hook=v) + + self.method = method + self.url = url + self.headers = headers + self.files = files + self.data = data + self.json = json + self.params = params + self.auth = auth + self.cookies = cookies + + def __repr__(self): + return f"" + + def prepare(self): + """Constructs a :class:`PreparedRequest ` for transmission and returns it.""" + p = PreparedRequest() + p.prepare( + method=self.method, + url=self.url, + headers=self.headers, + files=self.files, + data=self.data, + json=self.json, + params=self.params, + auth=self.auth, + cookies=self.cookies, + hooks=self.hooks, + ) + return p + + +class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): + """The fully mutable :class:`PreparedRequest ` object, + containing the exact bytes that will be sent to the server. + + Instances are generated from a :class:`Request ` object, and + should not be instantiated manually; doing so may produce undesirable + effects. + + Usage:: + + >>> import requests + >>> req = requests.Request('GET', 'https://httpbin.org/get') + >>> r = req.prepare() + >>> r + + + >>> s = requests.Session() + >>> s.send(r) + + """ + + def __init__(self): + #: HTTP verb to send to the server. + self.method = None + #: HTTP URL to send the request to. + self.url = None + #: dictionary of HTTP headers. + self.headers = None + # The `CookieJar` used to create the Cookie header will be stored here + # after prepare_cookies is called + self._cookies = None + #: request body to send to the server. + self.body = None + #: dictionary of callback hooks, for internal usage. + self.hooks = default_hooks() + #: integer denoting starting position of a readable file-like body. + self._body_position = None + + def prepare( + self, + method=None, + url=None, + headers=None, + files=None, + data=None, + params=None, + auth=None, + cookies=None, + hooks=None, + json=None, + ): + """Prepares the entire request with the given parameters.""" + + self.prepare_method(method) + self.prepare_url(url, params) + self.prepare_headers(headers) + self.prepare_cookies(cookies) + self.prepare_body(data, files, json) + self.prepare_auth(auth, url) + + # Note that prepare_auth must be last to enable authentication schemes + # such as OAuth to work on a fully prepared request. + + # This MUST go after prepare_auth. Authenticators could add a hook + self.prepare_hooks(hooks) + + def __repr__(self): + return f"" + + def copy(self): + p = PreparedRequest() + p.method = self.method + p.url = self.url + p.headers = self.headers.copy() if self.headers is not None else None + p._cookies = _copy_cookie_jar(self._cookies) + p.body = self.body + p.hooks = self.hooks + p._body_position = self._body_position + return p + + def prepare_method(self, method): + """Prepares the given HTTP method.""" + self.method = method + if self.method is not None: + self.method = to_native_string(self.method.upper()) + + @staticmethod + def _get_idna_encoded_host(host): + from pip._vendor import idna + + try: + host = idna.encode(host, uts46=True).decode("utf-8") + except idna.IDNAError: + raise UnicodeError + return host + + def prepare_url(self, url, params): + """Prepares the given HTTP URL.""" + #: Accept objects that have string representations. + #: We're unable to blindly call unicode/str functions + #: as this will include the bytestring indicator (b'') + #: on python 3.x. + #: https://github.com/psf/requests/pull/2238 + if isinstance(url, bytes): + url = url.decode("utf8") + else: + url = str(url) + + # Remove leading whitespaces from url + url = url.lstrip() + + # Don't do any URL preparation for non-HTTP schemes like `mailto`, + # `data` etc to work around exceptions from `url_parse`, which + # handles RFC 3986 only. + if ":" in url and not url.lower().startswith("http"): + self.url = url + return + + # Support for unicode domain names and paths. + try: + scheme, auth, host, port, path, query, fragment = parse_url(url) + except LocationParseError as e: + raise InvalidURL(*e.args) + + if not scheme: + raise MissingSchema( + f"Invalid URL {url!r}: No scheme supplied. " + f"Perhaps you meant https://{url}?" + ) + + if not host: + raise InvalidURL(f"Invalid URL {url!r}: No host supplied") + + # In general, we want to try IDNA encoding the hostname if the string contains + # non-ASCII characters. This allows users to automatically get the correct IDNA + # behaviour. For strings containing only ASCII characters, we need to also verify + # it doesn't start with a wildcard (*), before allowing the unencoded hostname. + if not unicode_is_ascii(host): + try: + host = self._get_idna_encoded_host(host) + except UnicodeError: + raise InvalidURL("URL has an invalid label.") + elif host.startswith(("*", ".")): + raise InvalidURL("URL has an invalid label.") + + # Carefully reconstruct the network location + netloc = auth or "" + if netloc: + netloc += "@" + netloc += host + if port: + netloc += f":{port}" + + # Bare domains aren't valid URLs. + if not path: + path = "/" + + if isinstance(params, (str, bytes)): + params = to_native_string(params) + + enc_params = self._encode_params(params) + if enc_params: + if query: + query = f"{query}&{enc_params}" + else: + query = enc_params + + url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment])) + self.url = url + + def prepare_headers(self, headers): + """Prepares the given HTTP headers.""" + + self.headers = CaseInsensitiveDict() + if headers: + for header in headers.items(): + # Raise exception on invalid header value. + check_header_validity(header) + name, value = header + self.headers[to_native_string(name)] = value + + def prepare_body(self, data, files, json=None): + """Prepares the given HTTP body data.""" + + # Check if file, fo, generator, iterator. + # If not, run through normal process. + + # Nottin' on you. + body = None + content_type = None + + if not data and json is not None: + # urllib3 requires a bytes-like body. Python 2's json.dumps + # provides this natively, but Python 3 gives a Unicode string. + content_type = "application/json" + + try: + body = complexjson.dumps(json, allow_nan=False) + except ValueError as ve: + raise InvalidJSONError(ve, request=self) + + if not isinstance(body, bytes): + body = body.encode("utf-8") + + is_stream = all( + [ + hasattr(data, "__iter__"), + not isinstance(data, (basestring, list, tuple, Mapping)), + ] + ) + + if is_stream: + try: + length = super_len(data) + except (TypeError, AttributeError, UnsupportedOperation): + length = None + + body = data + + if getattr(body, "tell", None) is not None: + # Record the current file position before reading. + # This will allow us to rewind a file in the event + # of a redirect. + try: + self._body_position = body.tell() + except OSError: + # This differentiates from None, allowing us to catch + # a failed `tell()` later when trying to rewind the body + self._body_position = object() + + if files: + raise NotImplementedError( + "Streamed bodies and files are mutually exclusive." + ) + + if length: + self.headers["Content-Length"] = builtin_str(length) + else: + self.headers["Transfer-Encoding"] = "chunked" + else: + # Multi-part file uploads. + if files: + (body, content_type) = self._encode_files(files, data) + else: + if data: + body = self._encode_params(data) + if isinstance(data, basestring) or hasattr(data, "read"): + content_type = None + else: + content_type = "application/x-www-form-urlencoded" + + self.prepare_content_length(body) + + # Add content-type if it wasn't explicitly provided. + if content_type and ("content-type" not in self.headers): + self.headers["Content-Type"] = content_type + + self.body = body + + def prepare_content_length(self, body): + """Prepare Content-Length header based on request method and body""" + if body is not None: + length = super_len(body) + if length: + # If length exists, set it. Otherwise, we fallback + # to Transfer-Encoding: chunked. + self.headers["Content-Length"] = builtin_str(length) + elif ( + self.method not in ("GET", "HEAD") + and self.headers.get("Content-Length") is None + ): + # Set Content-Length to 0 for methods that can have a body + # but don't provide one. (i.e. not GET or HEAD) + self.headers["Content-Length"] = "0" + + def prepare_auth(self, auth, url=""): + """Prepares the given HTTP auth data.""" + + # If no Auth is explicitly provided, extract it from the URL first. + if auth is None: + url_auth = get_auth_from_url(self.url) + auth = url_auth if any(url_auth) else None + + if auth: + if isinstance(auth, tuple) and len(auth) == 2: + # special-case basic HTTP auth + auth = HTTPBasicAuth(*auth) + + # Allow auth to make its changes. + r = auth(self) + + # Update self to reflect the auth changes. + self.__dict__.update(r.__dict__) + + # Recompute Content-Length + self.prepare_content_length(self.body) + + def prepare_cookies(self, cookies): + """Prepares the given HTTP cookie data. + + This function eventually generates a ``Cookie`` header from the + given cookies using cookielib. Due to cookielib's design, the header + will not be regenerated if it already exists, meaning this function + can only be called once for the life of the + :class:`PreparedRequest ` object. Any subsequent calls + to ``prepare_cookies`` will have no actual effect, unless the "Cookie" + header is removed beforehand. + """ + if isinstance(cookies, cookielib.CookieJar): + self._cookies = cookies + else: + self._cookies = cookiejar_from_dict(cookies) + + cookie_header = get_cookie_header(self._cookies, self) + if cookie_header is not None: + self.headers["Cookie"] = cookie_header + + def prepare_hooks(self, hooks): + """Prepares the given hooks.""" + # hooks can be passed as None to the prepare method and to this + # method. To prevent iterating over None, simply use an empty list + # if hooks is False-y + hooks = hooks or [] + for event in hooks: + self.register_hook(event, hooks[event]) + + +class Response: + """The :class:`Response ` object, which contains a + server's response to an HTTP request. + """ + + __attrs__ = [ + "_content", + "status_code", + "headers", + "url", + "history", + "encoding", + "reason", + "cookies", + "elapsed", + "request", + ] + + def __init__(self): + self._content = False + self._content_consumed = False + self._next = None + + #: Integer Code of responded HTTP Status, e.g. 404 or 200. + self.status_code = None + + #: Case-insensitive Dictionary of Response Headers. + #: For example, ``headers['content-encoding']`` will return the + #: value of a ``'Content-Encoding'`` response header. + self.headers = CaseInsensitiveDict() + + #: File-like object representation of response (for advanced usage). + #: Use of ``raw`` requires that ``stream=True`` be set on the request. + #: This requirement does not apply for use internally to Requests. + self.raw = None + + #: Final URL location of Response. + self.url = None + + #: Encoding to decode with when accessing r.text. + self.encoding = None + + #: A list of :class:`Response ` objects from + #: the history of the Request. Any redirect responses will end + #: up here. The list is sorted from the oldest to the most recent request. + self.history = [] + + #: Textual reason of responded HTTP Status, e.g. "Not Found" or "OK". + self.reason = None + + #: A CookieJar of Cookies the server sent back. + self.cookies = cookiejar_from_dict({}) + + #: The amount of time elapsed between sending the request + #: and the arrival of the response (as a timedelta). + #: This property specifically measures the time taken between sending + #: the first byte of the request and finishing parsing the headers. It + #: is therefore unaffected by consuming the response content or the + #: value of the ``stream`` keyword argument. + self.elapsed = datetime.timedelta(0) + + #: The :class:`PreparedRequest ` object to which this + #: is a response. + self.request = None + + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + + def __getstate__(self): + # Consume everything; accessing the content attribute makes + # sure the content has been fully read. + if not self._content_consumed: + self.content + + return {attr: getattr(self, attr, None) for attr in self.__attrs__} + + def __setstate__(self, state): + for name, value in state.items(): + setattr(self, name, value) + + # pickled objects do not have .raw + setattr(self, "_content_consumed", True) + setattr(self, "raw", None) + + def __repr__(self): + return f"" + + def __bool__(self): + """Returns True if :attr:`status_code` is less than 400. + + This attribute checks if the status code of the response is between + 400 and 600 to see if there was a client error or a server error. If + the status code, is between 200 and 400, this will return True. This + is **not** a check to see if the response code is ``200 OK``. + """ + return self.ok + + def __nonzero__(self): + """Returns True if :attr:`status_code` is less than 400. + + This attribute checks if the status code of the response is between + 400 and 600 to see if there was a client error or a server error. If + the status code, is between 200 and 400, this will return True. This + is **not** a check to see if the response code is ``200 OK``. + """ + return self.ok + + def __iter__(self): + """Allows you to use a response as an iterator.""" + return self.iter_content(128) + + @property + def ok(self): + """Returns True if :attr:`status_code` is less than 400, False if not. + + This attribute checks if the status code of the response is between + 400 and 600 to see if there was a client error or a server error. If + the status code is between 200 and 400, this will return True. This + is **not** a check to see if the response code is ``200 OK``. + """ + try: + self.raise_for_status() + except HTTPError: + return False + return True + + @property + def is_redirect(self): + """True if this Response is a well-formed HTTP redirect that could have + been processed automatically (by :meth:`Session.resolve_redirects`). + """ + return "location" in self.headers and self.status_code in REDIRECT_STATI + + @property + def is_permanent_redirect(self): + """True if this Response one of the permanent versions of redirect.""" + return "location" in self.headers and self.status_code in ( + codes.moved_permanently, + codes.permanent_redirect, + ) + + @property + def next(self): + """Returns a PreparedRequest for the next request in a redirect chain, if there is one.""" + return self._next + + @property + def apparent_encoding(self): + """The apparent encoding, provided by the charset_normalizer or chardet libraries.""" + return chardet.detect(self.content)["encoding"] + + def iter_content(self, chunk_size=1, decode_unicode=False): + """Iterates over the response data. When stream=True is set on the + request, this avoids reading the content at once into memory for + large responses. The chunk size is the number of bytes it should + read into memory. This is not necessarily the length of each item + returned as decoding can take place. + + chunk_size must be of type int or None. A value of None will + function differently depending on the value of `stream`. + stream=True will read data as it arrives in whatever size the + chunks are received. If stream=False, data is returned as + a single chunk. + + If decode_unicode is True, content will be decoded using the best + available encoding based on the response. + """ + + def generate(): + # Special case for urllib3. + if hasattr(self.raw, "stream"): + try: + yield from self.raw.stream(chunk_size, decode_content=True) + except ProtocolError as e: + raise ChunkedEncodingError(e) + except DecodeError as e: + raise ContentDecodingError(e) + except ReadTimeoutError as e: + raise ConnectionError(e) + except SSLError as e: + raise RequestsSSLError(e) + else: + # Standard file-like object. + while True: + chunk = self.raw.read(chunk_size) + if not chunk: + break + yield chunk + + self._content_consumed = True + + if self._content_consumed and isinstance(self._content, bool): + raise StreamConsumedError() + elif chunk_size is not None and not isinstance(chunk_size, int): + raise TypeError( + f"chunk_size must be an int, it is instead a {type(chunk_size)}." + ) + # simulate reading small chunks of the content + reused_chunks = iter_slices(self._content, chunk_size) + + stream_chunks = generate() + + chunks = reused_chunks if self._content_consumed else stream_chunks + + if decode_unicode: + chunks = stream_decode_response_unicode(chunks, self) + + return chunks + + def iter_lines( + self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=False, delimiter=None + ): + """Iterates over the response data, one line at a time. When + stream=True is set on the request, this avoids reading the + content at once into memory for large responses. + + .. note:: This method is not reentrant safe. + """ + + pending = None + + for chunk in self.iter_content( + chunk_size=chunk_size, decode_unicode=decode_unicode + ): + + if pending is not None: + chunk = pending + chunk + + if delimiter: + lines = chunk.split(delimiter) + else: + lines = chunk.splitlines() + + if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]: + pending = lines.pop() + else: + pending = None + + yield from lines + + if pending is not None: + yield pending + + @property + def content(self): + """Content of the response, in bytes.""" + + if self._content is False: + # Read the contents. + if self._content_consumed: + raise RuntimeError("The content for this response was already consumed") + + if self.status_code == 0 or self.raw is None: + self._content = None + else: + self._content = b"".join(self.iter_content(CONTENT_CHUNK_SIZE)) or b"" + + self._content_consumed = True + # don't need to release the connection; that's been handled by urllib3 + # since we exhausted the data. + return self._content + + @property + def text(self): + """Content of the response, in unicode. + + If Response.encoding is None, encoding will be guessed using + ``charset_normalizer`` or ``chardet``. + + The encoding of the response content is determined based solely on HTTP + headers, following RFC 2616 to the letter. If you can take advantage of + non-HTTP knowledge to make a better guess at the encoding, you should + set ``r.encoding`` appropriately before accessing this property. + """ + + # Try charset from content-type + content = None + encoding = self.encoding + + if not self.content: + return "" + + # Fallback to auto-detected encoding. + if self.encoding is None: + encoding = self.apparent_encoding + + # Decode unicode from given encoding. + try: + content = str(self.content, encoding, errors="replace") + except (LookupError, TypeError): + # A LookupError is raised if the encoding was not found which could + # indicate a misspelling or similar mistake. + # + # A TypeError can be raised if encoding is None + # + # So we try blindly encoding. + content = str(self.content, errors="replace") + + return content + + def json(self, **kwargs): + r"""Returns the json-encoded content of a response, if any. + + :param \*\*kwargs: Optional arguments that ``json.loads`` takes. + :raises requests.exceptions.JSONDecodeError: If the response body does not + contain valid json. + """ + + if not self.encoding and self.content and len(self.content) > 3: + # No encoding set. JSON RFC 4627 section 3 states we should expect + # UTF-8, -16 or -32. Detect which one to use; If the detection or + # decoding fails, fall back to `self.text` (using charset_normalizer to make + # a best guess). + encoding = guess_json_utf(self.content) + if encoding is not None: + try: + return complexjson.loads(self.content.decode(encoding), **kwargs) + except UnicodeDecodeError: + # Wrong UTF codec detected; usually because it's not UTF-8 + # but some other 8-bit codec. This is an RFC violation, + # and the server didn't bother to tell us what codec *was* + # used. + pass + except JSONDecodeError as e: + raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) + + try: + return complexjson.loads(self.text, **kwargs) + except JSONDecodeError as e: + # Catch JSON-related errors and raise as requests.JSONDecodeError + # This aliases json.JSONDecodeError and simplejson.JSONDecodeError + raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) + + @property + def links(self): + """Returns the parsed header links of the response, if any.""" + + header = self.headers.get("link") + + resolved_links = {} + + if header: + links = parse_header_links(header) + + for link in links: + key = link.get("rel") or link.get("url") + resolved_links[key] = link + + return resolved_links + + def raise_for_status(self): + """Raises :class:`HTTPError`, if one occurred.""" + + http_error_msg = "" + if isinstance(self.reason, bytes): + # We attempt to decode utf-8 first because some servers + # choose to localize their reason strings. If the string + # isn't utf-8, we fall back to iso-8859-1 for all other + # encodings. (See PR #3538) + try: + reason = self.reason.decode("utf-8") + except UnicodeDecodeError: + reason = self.reason.decode("iso-8859-1") + else: + reason = self.reason + + if 400 <= self.status_code < 500: + http_error_msg = ( + f"{self.status_code} Client Error: {reason} for url: {self.url}" + ) + + elif 500 <= self.status_code < 600: + http_error_msg = ( + f"{self.status_code} Server Error: {reason} for url: {self.url}" + ) + + if http_error_msg: + raise HTTPError(http_error_msg, response=self) + + def close(self): + """Releases the connection back to the pool. Once this method has been + called the underlying ``raw`` object must not be accessed again. + + *Note: Should not normally need to be called explicitly.* + """ + if not self._content_consumed: + self.raw.close() + + release_conn = getattr(self.raw, "release_conn", None) + if release_conn is not None: + release_conn() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/packages.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/packages.py new file mode 100644 index 0000000..9582fa7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/packages.py @@ -0,0 +1,16 @@ +import sys + +# This code exists for backwards compatibility reasons. +# I don't like it either. Just look the other way. :) + +for package in ('urllib3', 'idna', 'chardet'): + vendored_package = "pip._vendor." + package + locals()[package] = __import__(vendored_package) + # This traversal is apparently necessary such that the identities are + # preserved (requests.packages.urllib3.* is urllib3.*) + for mod in list(sys.modules): + if mod == vendored_package or mod.startswith(vendored_package + '.'): + unprefixed_mod = mod[len("pip._vendor."):] + sys.modules['pip._vendor.requests.packages.' + unprefixed_mod] = sys.modules[mod] + +# Kinda cool, though, right? diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py new file mode 100644 index 0000000..dbcf2a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py @@ -0,0 +1,833 @@ +""" +requests.sessions +~~~~~~~~~~~~~~~~~ + +This module provides a Session object to manage and persist settings across +requests (cookies, auth, proxies). +""" +import os +import sys +import time +from collections import OrderedDict +from datetime import timedelta + +from ._internal_utils import to_native_string +from .adapters import HTTPAdapter +from .auth import _basic_auth_str +from .compat import Mapping, cookielib, urljoin, urlparse +from .cookies import ( + RequestsCookieJar, + cookiejar_from_dict, + extract_cookies_to_jar, + merge_cookies, +) +from .exceptions import ( + ChunkedEncodingError, + ContentDecodingError, + InvalidSchema, + TooManyRedirects, +) +from .hooks import default_hooks, dispatch_hook + +# formerly defined here, reexposed here for backward compatibility +from .models import ( # noqa: F401 + DEFAULT_REDIRECT_LIMIT, + REDIRECT_STATI, + PreparedRequest, + Request, +) +from .status_codes import codes +from .structures import CaseInsensitiveDict +from .utils import ( # noqa: F401 + DEFAULT_PORTS, + default_headers, + get_auth_from_url, + get_environ_proxies, + get_netrc_auth, + requote_uri, + resolve_proxies, + rewind_body, + should_bypass_proxies, + to_key_val_list, +) + +# Preferred clock, based on which one is more accurate on a given system. +if sys.platform == "win32": + preferred_clock = time.perf_counter +else: + preferred_clock = time.time + + +def merge_setting(request_setting, session_setting, dict_class=OrderedDict): + """Determines appropriate setting for a given request, taking into account + the explicit setting on that request, and the setting in the session. If a + setting is a dictionary, they will be merged together using `dict_class` + """ + + if session_setting is None: + return request_setting + + if request_setting is None: + return session_setting + + # Bypass if not a dictionary (e.g. verify) + if not ( + isinstance(session_setting, Mapping) and isinstance(request_setting, Mapping) + ): + return request_setting + + merged_setting = dict_class(to_key_val_list(session_setting)) + merged_setting.update(to_key_val_list(request_setting)) + + # Remove keys that are set to None. Extract keys first to avoid altering + # the dictionary during iteration. + none_keys = [k for (k, v) in merged_setting.items() if v is None] + for key in none_keys: + del merged_setting[key] + + return merged_setting + + +def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict): + """Properly merges both requests and session hooks. + + This is necessary because when request_hooks == {'response': []}, the + merge breaks Session hooks entirely. + """ + if session_hooks is None or session_hooks.get("response") == []: + return request_hooks + + if request_hooks is None or request_hooks.get("response") == []: + return session_hooks + + return merge_setting(request_hooks, session_hooks, dict_class) + + +class SessionRedirectMixin: + def get_redirect_target(self, resp): + """Receives a Response. Returns a redirect URI or ``None``""" + # Due to the nature of how requests processes redirects this method will + # be called at least once upon the original response and at least twice + # on each subsequent redirect response (if any). + # If a custom mixin is used to handle this logic, it may be advantageous + # to cache the redirect location onto the response object as a private + # attribute. + if resp.is_redirect: + location = resp.headers["location"] + # Currently the underlying http module on py3 decode headers + # in latin1, but empirical evidence suggests that latin1 is very + # rarely used with non-ASCII characters in HTTP headers. + # It is more likely to get UTF8 header rather than latin1. + # This causes incorrect handling of UTF8 encoded location headers. + # To solve this, we re-encode the location in latin1. + location = location.encode("latin1") + return to_native_string(location, "utf8") + return None + + def should_strip_auth(self, old_url, new_url): + """Decide whether Authorization header should be removed when redirecting""" + old_parsed = urlparse(old_url) + new_parsed = urlparse(new_url) + if old_parsed.hostname != new_parsed.hostname: + return True + # Special case: allow http -> https redirect when using the standard + # ports. This isn't specified by RFC 7235, but is kept to avoid + # breaking backwards compatibility with older versions of requests + # that allowed any redirects on the same host. + if ( + old_parsed.scheme == "http" + and old_parsed.port in (80, None) + and new_parsed.scheme == "https" + and new_parsed.port in (443, None) + ): + return False + + # Handle default port usage corresponding to scheme. + changed_port = old_parsed.port != new_parsed.port + changed_scheme = old_parsed.scheme != new_parsed.scheme + default_port = (DEFAULT_PORTS.get(old_parsed.scheme, None), None) + if ( + not changed_scheme + and old_parsed.port in default_port + and new_parsed.port in default_port + ): + return False + + # Standard case: root URI must match + return changed_port or changed_scheme + + def resolve_redirects( + self, + resp, + req, + stream=False, + timeout=None, + verify=True, + cert=None, + proxies=None, + yield_requests=False, + **adapter_kwargs, + ): + """Receives a Response. Returns a generator of Responses or Requests.""" + + hist = [] # keep track of history + + url = self.get_redirect_target(resp) + previous_fragment = urlparse(req.url).fragment + while url: + prepared_request = req.copy() + + # Update history and keep track of redirects. + # resp.history must ignore the original request in this loop + hist.append(resp) + resp.history = hist[1:] + + try: + resp.content # Consume socket so it can be released + except (ChunkedEncodingError, ContentDecodingError, RuntimeError): + resp.raw.read(decode_content=False) + + if len(resp.history) >= self.max_redirects: + raise TooManyRedirects( + f"Exceeded {self.max_redirects} redirects.", response=resp + ) + + # Release the connection back into the pool. + resp.close() + + # Handle redirection without scheme (see: RFC 1808 Section 4) + if url.startswith("//"): + parsed_rurl = urlparse(resp.url) + url = ":".join([to_native_string(parsed_rurl.scheme), url]) + + # Normalize url case and attach previous fragment if needed (RFC 7231 7.1.2) + parsed = urlparse(url) + if parsed.fragment == "" and previous_fragment: + parsed = parsed._replace(fragment=previous_fragment) + elif parsed.fragment: + previous_fragment = parsed.fragment + url = parsed.geturl() + + # Facilitate relative 'location' headers, as allowed by RFC 7231. + # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource') + # Compliant with RFC3986, we percent encode the url. + if not parsed.netloc: + url = urljoin(resp.url, requote_uri(url)) + else: + url = requote_uri(url) + + prepared_request.url = to_native_string(url) + + self.rebuild_method(prepared_request, resp) + + # https://github.com/psf/requests/issues/1084 + if resp.status_code not in ( + codes.temporary_redirect, + codes.permanent_redirect, + ): + # https://github.com/psf/requests/issues/3490 + purged_headers = ("Content-Length", "Content-Type", "Transfer-Encoding") + for header in purged_headers: + prepared_request.headers.pop(header, None) + prepared_request.body = None + + headers = prepared_request.headers + headers.pop("Cookie", None) + + # Extract any cookies sent on the response to the cookiejar + # in the new request. Because we've mutated our copied prepared + # request, use the old one that we haven't yet touched. + extract_cookies_to_jar(prepared_request._cookies, req, resp.raw) + merge_cookies(prepared_request._cookies, self.cookies) + prepared_request.prepare_cookies(prepared_request._cookies) + + # Rebuild auth and proxy information. + proxies = self.rebuild_proxies(prepared_request, proxies) + self.rebuild_auth(prepared_request, resp) + + # A failed tell() sets `_body_position` to `object()`. This non-None + # value ensures `rewindable` will be True, allowing us to raise an + # UnrewindableBodyError, instead of hanging the connection. + rewindable = prepared_request._body_position is not None and ( + "Content-Length" in headers or "Transfer-Encoding" in headers + ) + + # Attempt to rewind consumed file-like object. + if rewindable: + rewind_body(prepared_request) + + # Override the original request. + req = prepared_request + + if yield_requests: + yield req + else: + + resp = self.send( + req, + stream=stream, + timeout=timeout, + verify=verify, + cert=cert, + proxies=proxies, + allow_redirects=False, + **adapter_kwargs, + ) + + extract_cookies_to_jar(self.cookies, prepared_request, resp.raw) + + # extract redirect url, if any, for the next loop + url = self.get_redirect_target(resp) + yield resp + + def rebuild_auth(self, prepared_request, response): + """When being redirected we may want to strip authentication from the + request to avoid leaking credentials. This method intelligently removes + and reapplies authentication where possible to avoid credential loss. + """ + headers = prepared_request.headers + url = prepared_request.url + + if "Authorization" in headers and self.should_strip_auth( + response.request.url, url + ): + # If we get redirected to a new host, we should strip out any + # authentication headers. + del headers["Authorization"] + + # .netrc might have more auth for us on our new host. + new_auth = get_netrc_auth(url) if self.trust_env else None + if new_auth is not None: + prepared_request.prepare_auth(new_auth) + + def rebuild_proxies(self, prepared_request, proxies): + """This method re-evaluates the proxy configuration by considering the + environment variables. If we are redirected to a URL covered by + NO_PROXY, we strip the proxy configuration. Otherwise, we set missing + proxy keys for this URL (in case they were stripped by a previous + redirect). + + This method also replaces the Proxy-Authorization header where + necessary. + + :rtype: dict + """ + headers = prepared_request.headers + scheme = urlparse(prepared_request.url).scheme + new_proxies = resolve_proxies(prepared_request, proxies, self.trust_env) + + if "Proxy-Authorization" in headers: + del headers["Proxy-Authorization"] + + try: + username, password = get_auth_from_url(new_proxies[scheme]) + except KeyError: + username, password = None, None + + # urllib3 handles proxy authorization for us in the standard adapter. + # Avoid appending this to TLS tunneled requests where it may be leaked. + if not scheme.startswith('https') and username and password: + headers["Proxy-Authorization"] = _basic_auth_str(username, password) + + return new_proxies + + def rebuild_method(self, prepared_request, response): + """When being redirected we may want to change the method of the request + based on certain specs or browser behavior. + """ + method = prepared_request.method + + # https://tools.ietf.org/html/rfc7231#section-6.4.4 + if response.status_code == codes.see_other and method != "HEAD": + method = "GET" + + # Do what the browsers do, despite standards... + # First, turn 302s into GETs. + if response.status_code == codes.found and method != "HEAD": + method = "GET" + + # Second, if a POST is responded to with a 301, turn it into a GET. + # This bizarre behaviour is explained in Issue 1704. + if response.status_code == codes.moved and method == "POST": + method = "GET" + + prepared_request.method = method + + +class Session(SessionRedirectMixin): + """A Requests session. + + Provides cookie persistence, connection-pooling, and configuration. + + Basic Usage:: + + >>> import requests + >>> s = requests.Session() + >>> s.get('https://httpbin.org/get') + + + Or as a context manager:: + + >>> with requests.Session() as s: + ... s.get('https://httpbin.org/get') + + """ + + __attrs__ = [ + "headers", + "cookies", + "auth", + "proxies", + "hooks", + "params", + "verify", + "cert", + "adapters", + "stream", + "trust_env", + "max_redirects", + ] + + def __init__(self): + + #: A case-insensitive dictionary of headers to be sent on each + #: :class:`Request ` sent from this + #: :class:`Session `. + self.headers = default_headers() + + #: Default Authentication tuple or object to attach to + #: :class:`Request `. + self.auth = None + + #: Dictionary mapping protocol or protocol and host to the URL of the proxy + #: (e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) to + #: be used on each :class:`Request `. + self.proxies = {} + + #: Event-handling hooks. + self.hooks = default_hooks() + + #: Dictionary of querystring data to attach to each + #: :class:`Request `. The dictionary values may be lists for + #: representing multivalued query parameters. + self.params = {} + + #: Stream response content default. + self.stream = False + + #: SSL Verification default. + #: Defaults to `True`, requiring requests to verify the TLS certificate at the + #: remote end. + #: If verify is set to `False`, requests will accept any TLS certificate + #: presented by the server, and will ignore hostname mismatches and/or + #: expired certificates, which will make your application vulnerable to + #: man-in-the-middle (MitM) attacks. + #: Only set this to `False` for testing. + self.verify = True + + #: SSL client certificate default, if String, path to ssl client + #: cert file (.pem). If Tuple, ('cert', 'key') pair. + self.cert = None + + #: Maximum number of redirects allowed. If the request exceeds this + #: limit, a :class:`TooManyRedirects` exception is raised. + #: This defaults to requests.models.DEFAULT_REDIRECT_LIMIT, which is + #: 30. + self.max_redirects = DEFAULT_REDIRECT_LIMIT + + #: Trust environment settings for proxy configuration, default + #: authentication and similar. + self.trust_env = True + + #: A CookieJar containing all currently outstanding cookies set on this + #: session. By default it is a + #: :class:`RequestsCookieJar `, but + #: may be any other ``cookielib.CookieJar`` compatible object. + self.cookies = cookiejar_from_dict({}) + + # Default connection adapters. + self.adapters = OrderedDict() + self.mount("https://", HTTPAdapter()) + self.mount("http://", HTTPAdapter()) + + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + + def prepare_request(self, request): + """Constructs a :class:`PreparedRequest ` for + transmission and returns it. The :class:`PreparedRequest` has settings + merged from the :class:`Request ` instance and those of the + :class:`Session`. + + :param request: :class:`Request` instance to prepare with this + session's settings. + :rtype: requests.PreparedRequest + """ + cookies = request.cookies or {} + + # Bootstrap CookieJar. + if not isinstance(cookies, cookielib.CookieJar): + cookies = cookiejar_from_dict(cookies) + + # Merge with session cookies + merged_cookies = merge_cookies( + merge_cookies(RequestsCookieJar(), self.cookies), cookies + ) + + # Set environment's basic authentication if not explicitly set. + auth = request.auth + if self.trust_env and not auth and not self.auth: + auth = get_netrc_auth(request.url) + + p = PreparedRequest() + p.prepare( + method=request.method.upper(), + url=request.url, + files=request.files, + data=request.data, + json=request.json, + headers=merge_setting( + request.headers, self.headers, dict_class=CaseInsensitiveDict + ), + params=merge_setting(request.params, self.params), + auth=merge_setting(auth, self.auth), + cookies=merged_cookies, + hooks=merge_hooks(request.hooks, self.hooks), + ) + return p + + def request( + self, + method, + url, + params=None, + data=None, + headers=None, + cookies=None, + files=None, + auth=None, + timeout=None, + allow_redirects=True, + proxies=None, + hooks=None, + stream=None, + verify=None, + cert=None, + json=None, + ): + """Constructs a :class:`Request `, prepares it and sends it. + Returns :class:`Response ` object. + + :param method: method for the new :class:`Request` object. + :param url: URL for the new :class:`Request` object. + :param params: (optional) Dictionary or bytes to be sent in the query + string for the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) json to send in the body of the + :class:`Request`. + :param headers: (optional) Dictionary of HTTP Headers to send with the + :class:`Request`. + :param cookies: (optional) Dict or CookieJar object to send with the + :class:`Request`. + :param files: (optional) Dictionary of ``'filename': file-like-objects`` + for multipart encoding upload. + :param auth: (optional) Auth tuple or callable to enable + Basic/Digest/Custom HTTP Auth. + :param timeout: (optional) How long to wait for the server to send + data before giving up, as a float, or a :ref:`(connect timeout, + read timeout) ` tuple. + :type timeout: float or tuple + :param allow_redirects: (optional) Set to True by default. + :type allow_redirects: bool + :param proxies: (optional) Dictionary mapping protocol or protocol and + hostname to the URL of the proxy. + :param stream: (optional) whether to immediately download the response + content. Defaults to ``False``. + :param verify: (optional) Either a boolean, in which case it controls whether we verify + the server's TLS certificate, or a string, in which case it must be a path + to a CA bundle to use. Defaults to ``True``. When set to + ``False``, requests will accept any TLS certificate presented by + the server, and will ignore hostname mismatches and/or expired + certificates, which will make your application vulnerable to + man-in-the-middle (MitM) attacks. Setting verify to ``False`` + may be useful during local development or testing. + :param cert: (optional) if String, path to ssl client cert file (.pem). + If Tuple, ('cert', 'key') pair. + :rtype: requests.Response + """ + # Create the Request. + req = Request( + method=method.upper(), + url=url, + headers=headers, + files=files, + data=data or {}, + json=json, + params=params or {}, + auth=auth, + cookies=cookies, + hooks=hooks, + ) + prep = self.prepare_request(req) + + proxies = proxies or {} + + settings = self.merge_environment_settings( + prep.url, proxies, stream, verify, cert + ) + + # Send the request. + send_kwargs = { + "timeout": timeout, + "allow_redirects": allow_redirects, + } + send_kwargs.update(settings) + resp = self.send(prep, **send_kwargs) + + return resp + + def get(self, url, **kwargs): + r"""Sends a GET request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + kwargs.setdefault("allow_redirects", True) + return self.request("GET", url, **kwargs) + + def options(self, url, **kwargs): + r"""Sends a OPTIONS request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + kwargs.setdefault("allow_redirects", True) + return self.request("OPTIONS", url, **kwargs) + + def head(self, url, **kwargs): + r"""Sends a HEAD request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + kwargs.setdefault("allow_redirects", False) + return self.request("HEAD", url, **kwargs) + + def post(self, url, data=None, json=None, **kwargs): + r"""Sends a POST request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) json to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + return self.request("POST", url, data=data, json=json, **kwargs) + + def put(self, url, data=None, **kwargs): + r"""Sends a PUT request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + return self.request("PUT", url, data=data, **kwargs) + + def patch(self, url, data=None, **kwargs): + r"""Sends a PATCH request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + return self.request("PATCH", url, data=data, **kwargs) + + def delete(self, url, **kwargs): + r"""Sends a DELETE request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + return self.request("DELETE", url, **kwargs) + + def send(self, request, **kwargs): + """Send a given PreparedRequest. + + :rtype: requests.Response + """ + # Set defaults that the hooks can utilize to ensure they always have + # the correct parameters to reproduce the previous request. + kwargs.setdefault("stream", self.stream) + kwargs.setdefault("verify", self.verify) + kwargs.setdefault("cert", self.cert) + if "proxies" not in kwargs: + kwargs["proxies"] = resolve_proxies(request, self.proxies, self.trust_env) + + # It's possible that users might accidentally send a Request object. + # Guard against that specific failure case. + if isinstance(request, Request): + raise ValueError("You can only send PreparedRequests.") + + # Set up variables needed for resolve_redirects and dispatching of hooks + allow_redirects = kwargs.pop("allow_redirects", True) + stream = kwargs.get("stream") + hooks = request.hooks + + # Get the appropriate adapter to use + adapter = self.get_adapter(url=request.url) + + # Start time (approximately) of the request + start = preferred_clock() + + # Send the request + r = adapter.send(request, **kwargs) + + # Total elapsed time of the request (approximately) + elapsed = preferred_clock() - start + r.elapsed = timedelta(seconds=elapsed) + + # Response manipulation hooks + r = dispatch_hook("response", hooks, r, **kwargs) + + # Persist cookies + if r.history: + + # If the hooks create history then we want those cookies too + for resp in r.history: + extract_cookies_to_jar(self.cookies, resp.request, resp.raw) + + extract_cookies_to_jar(self.cookies, request, r.raw) + + # Resolve redirects if allowed. + if allow_redirects: + # Redirect resolving generator. + gen = self.resolve_redirects(r, request, **kwargs) + history = [resp for resp in gen] + else: + history = [] + + # Shuffle things around if there's history. + if history: + # Insert the first (original) request at the start + history.insert(0, r) + # Get the last request made + r = history.pop() + r.history = history + + # If redirects aren't being followed, store the response on the Request for Response.next(). + if not allow_redirects: + try: + r._next = next( + self.resolve_redirects(r, request, yield_requests=True, **kwargs) + ) + except StopIteration: + pass + + if not stream: + r.content + + return r + + def merge_environment_settings(self, url, proxies, stream, verify, cert): + """ + Check the environment and merge it with some settings. + + :rtype: dict + """ + # Gather clues from the surrounding environment. + if self.trust_env: + # Set environment's proxies. + no_proxy = proxies.get("no_proxy") if proxies is not None else None + env_proxies = get_environ_proxies(url, no_proxy=no_proxy) + for (k, v) in env_proxies.items(): + proxies.setdefault(k, v) + + # Look for requests environment configuration + # and be compatible with cURL. + if verify is True or verify is None: + verify = ( + os.environ.get("REQUESTS_CA_BUNDLE") + or os.environ.get("CURL_CA_BUNDLE") + or verify + ) + + # Merge all the kwargs. + proxies = merge_setting(proxies, self.proxies) + stream = merge_setting(stream, self.stream) + verify = merge_setting(verify, self.verify) + cert = merge_setting(cert, self.cert) + + return {"proxies": proxies, "stream": stream, "verify": verify, "cert": cert} + + def get_adapter(self, url): + """ + Returns the appropriate connection adapter for the given URL. + + :rtype: requests.adapters.BaseAdapter + """ + for (prefix, adapter) in self.adapters.items(): + + if url.lower().startswith(prefix.lower()): + return adapter + + # Nothing matches :-/ + raise InvalidSchema(f"No connection adapters were found for {url!r}") + + def close(self): + """Closes all adapters and as such the session""" + for v in self.adapters.values(): + v.close() + + def mount(self, prefix, adapter): + """Registers a connection adapter to a prefix. + + Adapters are sorted in descending order by prefix length. + """ + self.adapters[prefix] = adapter + keys_to_move = [k for k in self.adapters if len(k) < len(prefix)] + + for key in keys_to_move: + self.adapters[key] = self.adapters.pop(key) + + def __getstate__(self): + state = {attr: getattr(self, attr, None) for attr in self.__attrs__} + return state + + def __setstate__(self, state): + for attr, value in state.items(): + setattr(self, attr, value) + + +def session(): + """ + Returns a :class:`Session` for context-management. + + .. deprecated:: 1.0.0 + + This method has been deprecated since version 1.0.0 and is only kept for + backwards compatibility. New code should use :class:`~requests.sessions.Session` + to create a session. This may be removed at a future date. + + :rtype: Session + """ + return Session() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py new file mode 100644 index 0000000..4bd072b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py @@ -0,0 +1,128 @@ +r""" +The ``codes`` object defines a mapping from common names for HTTP statuses +to their numerical codes, accessible either as attributes or as dictionary +items. + +Example:: + + >>> import requests + >>> requests.codes['temporary_redirect'] + 307 + >>> requests.codes.teapot + 418 + >>> requests.codes['\o/'] + 200 + +Some codes have multiple names, and both upper- and lower-case versions of +the names are allowed. For example, ``codes.ok``, ``codes.OK``, and +``codes.okay`` all correspond to the HTTP status code 200. +""" + +from .structures import LookupDict + +_codes = { + # Informational. + 100: ("continue",), + 101: ("switching_protocols",), + 102: ("processing",), + 103: ("checkpoint",), + 122: ("uri_too_long", "request_uri_too_long"), + 200: ("ok", "okay", "all_ok", "all_okay", "all_good", "\\o/", "✓"), + 201: ("created",), + 202: ("accepted",), + 203: ("non_authoritative_info", "non_authoritative_information"), + 204: ("no_content",), + 205: ("reset_content", "reset"), + 206: ("partial_content", "partial"), + 207: ("multi_status", "multiple_status", "multi_stati", "multiple_stati"), + 208: ("already_reported",), + 226: ("im_used",), + # Redirection. + 300: ("multiple_choices",), + 301: ("moved_permanently", "moved", "\\o-"), + 302: ("found",), + 303: ("see_other", "other"), + 304: ("not_modified",), + 305: ("use_proxy",), + 306: ("switch_proxy",), + 307: ("temporary_redirect", "temporary_moved", "temporary"), + 308: ( + "permanent_redirect", + "resume_incomplete", + "resume", + ), # "resume" and "resume_incomplete" to be removed in 3.0 + # Client Error. + 400: ("bad_request", "bad"), + 401: ("unauthorized",), + 402: ("payment_required", "payment"), + 403: ("forbidden",), + 404: ("not_found", "-o-"), + 405: ("method_not_allowed", "not_allowed"), + 406: ("not_acceptable",), + 407: ("proxy_authentication_required", "proxy_auth", "proxy_authentication"), + 408: ("request_timeout", "timeout"), + 409: ("conflict",), + 410: ("gone",), + 411: ("length_required",), + 412: ("precondition_failed", "precondition"), + 413: ("request_entity_too_large",), + 414: ("request_uri_too_large",), + 415: ("unsupported_media_type", "unsupported_media", "media_type"), + 416: ( + "requested_range_not_satisfiable", + "requested_range", + "range_not_satisfiable", + ), + 417: ("expectation_failed",), + 418: ("im_a_teapot", "teapot", "i_am_a_teapot"), + 421: ("misdirected_request",), + 422: ("unprocessable_entity", "unprocessable"), + 423: ("locked",), + 424: ("failed_dependency", "dependency"), + 425: ("unordered_collection", "unordered"), + 426: ("upgrade_required", "upgrade"), + 428: ("precondition_required", "precondition"), + 429: ("too_many_requests", "too_many"), + 431: ("header_fields_too_large", "fields_too_large"), + 444: ("no_response", "none"), + 449: ("retry_with", "retry"), + 450: ("blocked_by_windows_parental_controls", "parental_controls"), + 451: ("unavailable_for_legal_reasons", "legal_reasons"), + 499: ("client_closed_request",), + # Server Error. + 500: ("internal_server_error", "server_error", "/o\\", "✗"), + 501: ("not_implemented",), + 502: ("bad_gateway",), + 503: ("service_unavailable", "unavailable"), + 504: ("gateway_timeout",), + 505: ("http_version_not_supported", "http_version"), + 506: ("variant_also_negotiates",), + 507: ("insufficient_storage",), + 509: ("bandwidth_limit_exceeded", "bandwidth"), + 510: ("not_extended",), + 511: ("network_authentication_required", "network_auth", "network_authentication"), +} + +codes = LookupDict(name="status_codes") + + +def _init(): + for code, titles in _codes.items(): + for title in titles: + setattr(codes, title, code) + if not title.startswith(("\\", "/")): + setattr(codes, title.upper(), code) + + def doc(code): + names = ", ".join(f"``{n}``" for n in _codes[code]) + return "* %d: %s" % (code, names) + + global __doc__ + __doc__ = ( + __doc__ + "\n" + "\n".join(doc(code) for code in sorted(_codes)) + if __doc__ is not None + else None + ) + + +_init() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/structures.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/structures.py new file mode 100644 index 0000000..188e13e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/structures.py @@ -0,0 +1,99 @@ +""" +requests.structures +~~~~~~~~~~~~~~~~~~~ + +Data structures that power Requests. +""" + +from collections import OrderedDict + +from .compat import Mapping, MutableMapping + + +class CaseInsensitiveDict(MutableMapping): + """A case-insensitive ``dict``-like object. + + Implements all methods and operations of + ``MutableMapping`` as well as dict's ``copy``. Also + provides ``lower_items``. + + All keys are expected to be strings. The structure remembers the + case of the last key to be set, and ``iter(instance)``, + ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` + will contain case-sensitive keys. However, querying and contains + testing is case insensitive:: + + cid = CaseInsensitiveDict() + cid['Accept'] = 'application/json' + cid['aCCEPT'] == 'application/json' # True + list(cid) == ['Accept'] # True + + For example, ``headers['content-encoding']`` will return the + value of a ``'Content-Encoding'`` response header, regardless + of how the header name was originally stored. + + If the constructor, ``.update``, or equality comparison + operations are given keys that have equal ``.lower()``s, the + behavior is undefined. + """ + + def __init__(self, data=None, **kwargs): + self._store = OrderedDict() + if data is None: + data = {} + self.update(data, **kwargs) + + def __setitem__(self, key, value): + # Use the lowercased key for lookups, but store the actual + # key alongside the value. + self._store[key.lower()] = (key, value) + + def __getitem__(self, key): + return self._store[key.lower()][1] + + def __delitem__(self, key): + del self._store[key.lower()] + + def __iter__(self): + return (casedkey for casedkey, mappedvalue in self._store.values()) + + def __len__(self): + return len(self._store) + + def lower_items(self): + """Like iteritems(), but with all lowercase keys.""" + return ((lowerkey, keyval[1]) for (lowerkey, keyval) in self._store.items()) + + def __eq__(self, other): + if isinstance(other, Mapping): + other = CaseInsensitiveDict(other) + else: + return NotImplemented + # Compare insensitively + return dict(self.lower_items()) == dict(other.lower_items()) + + # Copy is required + def copy(self): + return CaseInsensitiveDict(self._store.values()) + + def __repr__(self): + return str(dict(self.items())) + + +class LookupDict(dict): + """Dictionary lookup object.""" + + def __init__(self, name=None): + self.name = name + super().__init__() + + def __repr__(self): + return f"" + + def __getitem__(self, key): + # We allow fall-through here, so values default to None + + return self.__dict__.get(key, None) + + def get(self, key, default=None): + return self.__dict__.get(key, default) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/requests/utils.py b/venv/lib/python3.12/site-packages/pip/_vendor/requests/utils.py new file mode 100644 index 0000000..6adec33 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/requests/utils.py @@ -0,0 +1,1088 @@ +""" +requests.utils +~~~~~~~~~~~~~~ + +This module provides utility functions that are used within Requests +that are also useful for external consumption. +""" + +import codecs +import contextlib +import io +import os +import re +import socket +import struct +import sys +import tempfile +import warnings +import zipfile +from collections import OrderedDict + +from pip._vendor.urllib3.util import make_headers, parse_url + +from . import certs +from .__version__ import __version__ + +# to_native_string is unused here, but imported here for backwards compatibility +from ._internal_utils import ( # noqa: F401 + _HEADER_VALIDATORS_BYTE, + _HEADER_VALIDATORS_STR, + HEADER_VALIDATORS, + to_native_string, +) +from .compat import ( + Mapping, + basestring, + bytes, + getproxies, + getproxies_environment, + integer_types, +) +from .compat import parse_http_list as _parse_list_header +from .compat import ( + proxy_bypass, + proxy_bypass_environment, + quote, + str, + unquote, + urlparse, + urlunparse, +) +from .cookies import cookiejar_from_dict +from .exceptions import ( + FileModeWarning, + InvalidHeader, + InvalidURL, + UnrewindableBodyError, +) +from .structures import CaseInsensitiveDict + +NETRC_FILES = (".netrc", "_netrc") + +DEFAULT_CA_BUNDLE_PATH = certs.where() + +DEFAULT_PORTS = {"http": 80, "https": 443} + +# Ensure that ', ' is used to preserve previous delimiter behavior. +DEFAULT_ACCEPT_ENCODING = ", ".join( + re.split(r",\s*", make_headers(accept_encoding=True)["accept-encoding"]) +) + + +if sys.platform == "win32": + # provide a proxy_bypass version on Windows without DNS lookups + + def proxy_bypass_registry(host): + try: + import winreg + except ImportError: + return False + + try: + internetSettings = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", + ) + # ProxyEnable could be REG_SZ or REG_DWORD, normalizing it + proxyEnable = int(winreg.QueryValueEx(internetSettings, "ProxyEnable")[0]) + # ProxyOverride is almost always a string + proxyOverride = winreg.QueryValueEx(internetSettings, "ProxyOverride")[0] + except (OSError, ValueError): + return False + if not proxyEnable or not proxyOverride: + return False + + # make a check value list from the registry entry: replace the + # '' string by the localhost entry and the corresponding + # canonical entry. + proxyOverride = proxyOverride.split(";") + # now check if we match one of the registry values. + for test in proxyOverride: + if test == "": + if "." not in host: + return True + test = test.replace(".", r"\.") # mask dots + test = test.replace("*", r".*") # change glob sequence + test = test.replace("?", r".") # change glob char + if re.match(test, host, re.I): + return True + return False + + def proxy_bypass(host): # noqa + """Return True, if the host should be bypassed. + + Checks proxy settings gathered from the environment, if specified, + or the registry. + """ + if getproxies_environment(): + return proxy_bypass_environment(host) + else: + return proxy_bypass_registry(host) + + +def dict_to_sequence(d): + """Returns an internal sequence dictionary update.""" + + if hasattr(d, "items"): + d = d.items() + + return d + + +def super_len(o): + total_length = None + current_position = 0 + + if hasattr(o, "__len__"): + total_length = len(o) + + elif hasattr(o, "len"): + total_length = o.len + + elif hasattr(o, "fileno"): + try: + fileno = o.fileno() + except (io.UnsupportedOperation, AttributeError): + # AttributeError is a surprising exception, seeing as how we've just checked + # that `hasattr(o, 'fileno')`. It happens for objects obtained via + # `Tarfile.extractfile()`, per issue 5229. + pass + else: + total_length = os.fstat(fileno).st_size + + # Having used fstat to determine the file length, we need to + # confirm that this file was opened up in binary mode. + if "b" not in o.mode: + warnings.warn( + ( + "Requests has determined the content-length for this " + "request using the binary size of the file: however, the " + "file has been opened in text mode (i.e. without the 'b' " + "flag in the mode). This may lead to an incorrect " + "content-length. In Requests 3.0, support will be removed " + "for files in text mode." + ), + FileModeWarning, + ) + + if hasattr(o, "tell"): + try: + current_position = o.tell() + except OSError: + # This can happen in some weird situations, such as when the file + # is actually a special file descriptor like stdin. In this + # instance, we don't know what the length is, so set it to zero and + # let requests chunk it instead. + if total_length is not None: + current_position = total_length + else: + if hasattr(o, "seek") and total_length is None: + # StringIO and BytesIO have seek but no usable fileno + try: + # seek to end of file + o.seek(0, 2) + total_length = o.tell() + + # seek back to current position to support + # partially read file-like objects + o.seek(current_position or 0) + except OSError: + total_length = 0 + + if total_length is None: + total_length = 0 + + return max(0, total_length - current_position) + + +def get_netrc_auth(url, raise_errors=False): + """Returns the Requests tuple auth for a given url from netrc.""" + + netrc_file = os.environ.get("NETRC") + if netrc_file is not None: + netrc_locations = (netrc_file,) + else: + netrc_locations = (f"~/{f}" for f in NETRC_FILES) + + try: + from netrc import NetrcParseError, netrc + + netrc_path = None + + for f in netrc_locations: + try: + loc = os.path.expanduser(f) + except KeyError: + # os.path.expanduser can fail when $HOME is undefined and + # getpwuid fails. See https://bugs.python.org/issue20164 & + # https://github.com/psf/requests/issues/1846 + return + + if os.path.exists(loc): + netrc_path = loc + break + + # Abort early if there isn't one. + if netrc_path is None: + return + + ri = urlparse(url) + host = ri.hostname + + try: + _netrc = netrc(netrc_path).authenticators(host) + if _netrc: + # Return with login / password + login_i = 0 if _netrc[0] else 1 + return (_netrc[login_i], _netrc[2]) + except (NetrcParseError, OSError): + # If there was a parsing error or a permissions issue reading the file, + # we'll just skip netrc auth unless explicitly asked to raise errors. + if raise_errors: + raise + + # App Engine hackiness. + except (ImportError, AttributeError): + pass + + +def guess_filename(obj): + """Tries to guess the filename of the given object.""" + name = getattr(obj, "name", None) + if name and isinstance(name, basestring) and name[0] != "<" and name[-1] != ">": + return os.path.basename(name) + + +def extract_zipped_paths(path): + """Replace nonexistent paths that look like they refer to a member of a zip + archive with the location of an extracted copy of the target, or else + just return the provided path unchanged. + """ + if os.path.exists(path): + # this is already a valid path, no need to do anything further + return path + + # find the first valid part of the provided path and treat that as a zip archive + # assume the rest of the path is the name of a member in the archive + archive, member = os.path.split(path) + while archive and not os.path.exists(archive): + archive, prefix = os.path.split(archive) + if not prefix: + # If we don't check for an empty prefix after the split (in other words, archive remains unchanged after the split), + # we _can_ end up in an infinite loop on a rare corner case affecting a small number of users + break + member = "/".join([prefix, member]) + + if not zipfile.is_zipfile(archive): + return path + + zip_file = zipfile.ZipFile(archive) + if member not in zip_file.namelist(): + return path + + # we have a valid zip archive and a valid member of that archive + tmp = tempfile.gettempdir() + extracted_path = os.path.join(tmp, member.split("/")[-1]) + if not os.path.exists(extracted_path): + # use read + write to avoid the creating nested folders, we only want the file, avoids mkdir racing condition + with atomic_open(extracted_path) as file_handler: + file_handler.write(zip_file.read(member)) + return extracted_path + + +@contextlib.contextmanager +def atomic_open(filename): + """Write a file to the disk in an atomic fashion""" + tmp_descriptor, tmp_name = tempfile.mkstemp(dir=os.path.dirname(filename)) + try: + with os.fdopen(tmp_descriptor, "wb") as tmp_handler: + yield tmp_handler + os.replace(tmp_name, filename) + except BaseException: + os.remove(tmp_name) + raise + + +def from_key_val_list(value): + """Take an object and test to see if it can be represented as a + dictionary. Unless it can not be represented as such, return an + OrderedDict, e.g., + + :: + + >>> from_key_val_list([('key', 'val')]) + OrderedDict([('key', 'val')]) + >>> from_key_val_list('string') + Traceback (most recent call last): + ... + ValueError: cannot encode objects that are not 2-tuples + >>> from_key_val_list({'key': 'val'}) + OrderedDict([('key', 'val')]) + + :rtype: OrderedDict + """ + if value is None: + return None + + if isinstance(value, (str, bytes, bool, int)): + raise ValueError("cannot encode objects that are not 2-tuples") + + return OrderedDict(value) + + +def to_key_val_list(value): + """Take an object and test to see if it can be represented as a + dictionary. If it can be, return a list of tuples, e.g., + + :: + + >>> to_key_val_list([('key', 'val')]) + [('key', 'val')] + >>> to_key_val_list({'key': 'val'}) + [('key', 'val')] + >>> to_key_val_list('string') + Traceback (most recent call last): + ... + ValueError: cannot encode objects that are not 2-tuples + + :rtype: list + """ + if value is None: + return None + + if isinstance(value, (str, bytes, bool, int)): + raise ValueError("cannot encode objects that are not 2-tuples") + + if isinstance(value, Mapping): + value = value.items() + + return list(value) + + +# From mitsuhiko/werkzeug (used with permission). +def parse_list_header(value): + """Parse lists as described by RFC 2068 Section 2. + + In particular, parse comma-separated lists where the elements of + the list may include quoted-strings. A quoted-string could + contain a comma. A non-quoted string could have quotes in the + middle. Quotes are removed automatically after parsing. + + It basically works like :func:`parse_set_header` just that items + may appear multiple times and case sensitivity is preserved. + + The return value is a standard :class:`list`: + + >>> parse_list_header('token, "quoted value"') + ['token', 'quoted value'] + + To create a header from the :class:`list` again, use the + :func:`dump_header` function. + + :param value: a string with a list header. + :return: :class:`list` + :rtype: list + """ + result = [] + for item in _parse_list_header(value): + if item[:1] == item[-1:] == '"': + item = unquote_header_value(item[1:-1]) + result.append(item) + return result + + +# From mitsuhiko/werkzeug (used with permission). +def parse_dict_header(value): + """Parse lists of key, value pairs as described by RFC 2068 Section 2 and + convert them into a python dict: + + >>> d = parse_dict_header('foo="is a fish", bar="as well"') + >>> type(d) is dict + True + >>> sorted(d.items()) + [('bar', 'as well'), ('foo', 'is a fish')] + + If there is no value for a key it will be `None`: + + >>> parse_dict_header('key_without_value') + {'key_without_value': None} + + To create a header from the :class:`dict` again, use the + :func:`dump_header` function. + + :param value: a string with a dict header. + :return: :class:`dict` + :rtype: dict + """ + result = {} + for item in _parse_list_header(value): + if "=" not in item: + result[item] = None + continue + name, value = item.split("=", 1) + if value[:1] == value[-1:] == '"': + value = unquote_header_value(value[1:-1]) + result[name] = value + return result + + +# From mitsuhiko/werkzeug (used with permission). +def unquote_header_value(value, is_filename=False): + r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). + This does not use the real unquoting but what browsers are actually + using for quoting. + + :param value: the header value to unquote. + :rtype: str + """ + if value and value[0] == value[-1] == '"': + # this is not the real unquoting, but fixing this so that the + # RFC is met will result in bugs with internet explorer and + # probably some other browsers as well. IE for example is + # uploading files with "C:\foo\bar.txt" as filename + value = value[1:-1] + + # if this is a filename and the starting characters look like + # a UNC path, then just return the value without quotes. Using the + # replace sequence below on a UNC path has the effect of turning + # the leading double slash into a single slash and then + # _fix_ie_filename() doesn't work correctly. See #458. + if not is_filename or value[:2] != "\\\\": + return value.replace("\\\\", "\\").replace('\\"', '"') + return value + + +def dict_from_cookiejar(cj): + """Returns a key/value dictionary from a CookieJar. + + :param cj: CookieJar object to extract cookies from. + :rtype: dict + """ + + cookie_dict = {} + + for cookie in cj: + cookie_dict[cookie.name] = cookie.value + + return cookie_dict + + +def add_dict_to_cookiejar(cj, cookie_dict): + """Returns a CookieJar from a key/value dictionary. + + :param cj: CookieJar to insert cookies into. + :param cookie_dict: Dict of key/values to insert into CookieJar. + :rtype: CookieJar + """ + + return cookiejar_from_dict(cookie_dict, cj) + + +def get_encodings_from_content(content): + """Returns encodings from given content string. + + :param content: bytestring to extract encodings from. + """ + warnings.warn( + ( + "In requests 3.0, get_encodings_from_content will be removed. For " + "more information, please see the discussion on issue #2266. (This" + " warning should only appear once.)" + ), + DeprecationWarning, + ) + + charset_re = re.compile(r']', flags=re.I) + pragma_re = re.compile(r']', flags=re.I) + xml_re = re.compile(r'^<\?xml.*?encoding=["\']*(.+?)["\'>]') + + return ( + charset_re.findall(content) + + pragma_re.findall(content) + + xml_re.findall(content) + ) + + +def _parse_content_type_header(header): + """Returns content type and parameters from given header + + :param header: string + :return: tuple containing content type and dictionary of + parameters + """ + + tokens = header.split(";") + content_type, params = tokens[0].strip(), tokens[1:] + params_dict = {} + items_to_strip = "\"' " + + for param in params: + param = param.strip() + if param: + key, value = param, True + index_of_equals = param.find("=") + if index_of_equals != -1: + key = param[:index_of_equals].strip(items_to_strip) + value = param[index_of_equals + 1 :].strip(items_to_strip) + params_dict[key.lower()] = value + return content_type, params_dict + + +def get_encoding_from_headers(headers): + """Returns encodings from given HTTP Header Dict. + + :param headers: dictionary to extract encoding from. + :rtype: str + """ + + content_type = headers.get("content-type") + + if not content_type: + return None + + content_type, params = _parse_content_type_header(content_type) + + if "charset" in params: + return params["charset"].strip("'\"") + + if "text" in content_type: + return "ISO-8859-1" + + if "application/json" in content_type: + # Assume UTF-8 based on RFC 4627: https://www.ietf.org/rfc/rfc4627.txt since the charset was unset + return "utf-8" + + +def stream_decode_response_unicode(iterator, r): + """Stream decodes an iterator.""" + + if r.encoding is None: + yield from iterator + return + + decoder = codecs.getincrementaldecoder(r.encoding)(errors="replace") + for chunk in iterator: + rv = decoder.decode(chunk) + if rv: + yield rv + rv = decoder.decode(b"", final=True) + if rv: + yield rv + + +def iter_slices(string, slice_length): + """Iterate over slices of a string.""" + pos = 0 + if slice_length is None or slice_length <= 0: + slice_length = len(string) + while pos < len(string): + yield string[pos : pos + slice_length] + pos += slice_length + + +def get_unicode_from_response(r): + """Returns the requested content back in unicode. + + :param r: Response object to get unicode content from. + + Tried: + + 1. charset from content-type + 2. fall back and replace all unicode characters + + :rtype: str + """ + warnings.warn( + ( + "In requests 3.0, get_unicode_from_response will be removed. For " + "more information, please see the discussion on issue #2266. (This" + " warning should only appear once.)" + ), + DeprecationWarning, + ) + + tried_encodings = [] + + # Try charset from content-type + encoding = get_encoding_from_headers(r.headers) + + if encoding: + try: + return str(r.content, encoding) + except UnicodeError: + tried_encodings.append(encoding) + + # Fall back: + try: + return str(r.content, encoding, errors="replace") + except TypeError: + return r.content + + +# The unreserved URI characters (RFC 3986) +UNRESERVED_SET = frozenset( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789-._~" +) + + +def unquote_unreserved(uri): + """Un-escape any percent-escape sequences in a URI that are unreserved + characters. This leaves all reserved, illegal and non-ASCII bytes encoded. + + :rtype: str + """ + parts = uri.split("%") + for i in range(1, len(parts)): + h = parts[i][0:2] + if len(h) == 2 and h.isalnum(): + try: + c = chr(int(h, 16)) + except ValueError: + raise InvalidURL(f"Invalid percent-escape sequence: '{h}'") + + if c in UNRESERVED_SET: + parts[i] = c + parts[i][2:] + else: + parts[i] = f"%{parts[i]}" + else: + parts[i] = f"%{parts[i]}" + return "".join(parts) + + +def requote_uri(uri): + """Re-quote the given URI. + + This function passes the given URI through an unquote/quote cycle to + ensure that it is fully and consistently quoted. + + :rtype: str + """ + safe_with_percent = "!#$%&'()*+,/:;=?@[]~" + safe_without_percent = "!#$&'()*+,/:;=?@[]~" + try: + # Unquote only the unreserved characters + # Then quote only illegal characters (do not quote reserved, + # unreserved, or '%') + return quote(unquote_unreserved(uri), safe=safe_with_percent) + except InvalidURL: + # We couldn't unquote the given URI, so let's try quoting it, but + # there may be unquoted '%'s in the URI. We need to make sure they're + # properly quoted so they do not cause issues elsewhere. + return quote(uri, safe=safe_without_percent) + + +def address_in_network(ip, net): + """This function allows you to check if an IP belongs to a network subnet + + Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 + returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 + + :rtype: bool + """ + ipaddr = struct.unpack("=L", socket.inet_aton(ip))[0] + netaddr, bits = net.split("/") + netmask = struct.unpack("=L", socket.inet_aton(dotted_netmask(int(bits))))[0] + network = struct.unpack("=L", socket.inet_aton(netaddr))[0] & netmask + return (ipaddr & netmask) == (network & netmask) + + +def dotted_netmask(mask): + """Converts mask from /xx format to xxx.xxx.xxx.xxx + + Example: if mask is 24 function returns 255.255.255.0 + + :rtype: str + """ + bits = 0xFFFFFFFF ^ (1 << 32 - mask) - 1 + return socket.inet_ntoa(struct.pack(">I", bits)) + + +def is_ipv4_address(string_ip): + """ + :rtype: bool + """ + try: + socket.inet_aton(string_ip) + except OSError: + return False + return True + + +def is_valid_cidr(string_network): + """ + Very simple check of the cidr format in no_proxy variable. + + :rtype: bool + """ + if string_network.count("/") == 1: + try: + mask = int(string_network.split("/")[1]) + except ValueError: + return False + + if mask < 1 or mask > 32: + return False + + try: + socket.inet_aton(string_network.split("/")[0]) + except OSError: + return False + else: + return False + return True + + +@contextlib.contextmanager +def set_environ(env_name, value): + """Set the environment variable 'env_name' to 'value' + + Save previous value, yield, and then restore the previous value stored in + the environment variable 'env_name'. + + If 'value' is None, do nothing""" + value_changed = value is not None + if value_changed: + old_value = os.environ.get(env_name) + os.environ[env_name] = value + try: + yield + finally: + if value_changed: + if old_value is None: + del os.environ[env_name] + else: + os.environ[env_name] = old_value + + +def should_bypass_proxies(url, no_proxy): + """ + Returns whether we should bypass proxies or not. + + :rtype: bool + """ + # Prioritize lowercase environment variables over uppercase + # to keep a consistent behaviour with other http projects (curl, wget). + def get_proxy(key): + return os.environ.get(key) or os.environ.get(key.upper()) + + # First check whether no_proxy is defined. If it is, check that the URL + # we're getting isn't in the no_proxy list. + no_proxy_arg = no_proxy + if no_proxy is None: + no_proxy = get_proxy("no_proxy") + parsed = urlparse(url) + + if parsed.hostname is None: + # URLs don't always have hostnames, e.g. file:/// urls. + return True + + if no_proxy: + # We need to check whether we match here. We need to see if we match + # the end of the hostname, both with and without the port. + no_proxy = (host for host in no_proxy.replace(" ", "").split(",") if host) + + if is_ipv4_address(parsed.hostname): + for proxy_ip in no_proxy: + if is_valid_cidr(proxy_ip): + if address_in_network(parsed.hostname, proxy_ip): + return True + elif parsed.hostname == proxy_ip: + # If no_proxy ip was defined in plain IP notation instead of cidr notation & + # matches the IP of the index + return True + else: + host_with_port = parsed.hostname + if parsed.port: + host_with_port += f":{parsed.port}" + + for host in no_proxy: + if parsed.hostname.endswith(host) or host_with_port.endswith(host): + # The URL does match something in no_proxy, so we don't want + # to apply the proxies on this URL. + return True + + with set_environ("no_proxy", no_proxy_arg): + # parsed.hostname can be `None` in cases such as a file URI. + try: + bypass = proxy_bypass(parsed.hostname) + except (TypeError, socket.gaierror): + bypass = False + + if bypass: + return True + + return False + + +def get_environ_proxies(url, no_proxy=None): + """ + Return a dict of environment proxies. + + :rtype: dict + """ + if should_bypass_proxies(url, no_proxy=no_proxy): + return {} + else: + return getproxies() + + +def select_proxy(url, proxies): + """Select a proxy for the url, if applicable. + + :param url: The url being for the request + :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs + """ + proxies = proxies or {} + urlparts = urlparse(url) + if urlparts.hostname is None: + return proxies.get(urlparts.scheme, proxies.get("all")) + + proxy_keys = [ + urlparts.scheme + "://" + urlparts.hostname, + urlparts.scheme, + "all://" + urlparts.hostname, + "all", + ] + proxy = None + for proxy_key in proxy_keys: + if proxy_key in proxies: + proxy = proxies[proxy_key] + break + + return proxy + + +def resolve_proxies(request, proxies, trust_env=True): + """This method takes proxy information from a request and configuration + input to resolve a mapping of target proxies. This will consider settings + such a NO_PROXY to strip proxy configurations. + + :param request: Request or PreparedRequest + :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs + :param trust_env: Boolean declaring whether to trust environment configs + + :rtype: dict + """ + proxies = proxies if proxies is not None else {} + url = request.url + scheme = urlparse(url).scheme + no_proxy = proxies.get("no_proxy") + new_proxies = proxies.copy() + + if trust_env and not should_bypass_proxies(url, no_proxy=no_proxy): + environ_proxies = get_environ_proxies(url, no_proxy=no_proxy) + + proxy = environ_proxies.get(scheme, environ_proxies.get("all")) + + if proxy: + new_proxies.setdefault(scheme, proxy) + return new_proxies + + +def default_user_agent(name="python-requests"): + """ + Return a string representing the default user agent. + + :rtype: str + """ + return f"{name}/{__version__}" + + +def default_headers(): + """ + :rtype: requests.structures.CaseInsensitiveDict + """ + return CaseInsensitiveDict( + { + "User-Agent": default_user_agent(), + "Accept-Encoding": DEFAULT_ACCEPT_ENCODING, + "Accept": "*/*", + "Connection": "keep-alive", + } + ) + + +def parse_header_links(value): + """Return a list of parsed link headers proxies. + + i.e. Link: ; rel=front; type="image/jpeg",; rel=back;type="image/jpeg" + + :rtype: list + """ + + links = [] + + replace_chars = " '\"" + + value = value.strip(replace_chars) + if not value: + return links + + for val in re.split(", *<", value): + try: + url, params = val.split(";", 1) + except ValueError: + url, params = val, "" + + link = {"url": url.strip("<> '\"")} + + for param in params.split(";"): + try: + key, value = param.split("=") + except ValueError: + break + + link[key.strip(replace_chars)] = value.strip(replace_chars) + + links.append(link) + + return links + + +# Null bytes; no need to recreate these on each call to guess_json_utf +_null = "\x00".encode("ascii") # encoding to ASCII for Python 3 +_null2 = _null * 2 +_null3 = _null * 3 + + +def guess_json_utf(data): + """ + :rtype: str + """ + # JSON always starts with two ASCII characters, so detection is as + # easy as counting the nulls and from their location and count + # determine the encoding. Also detect a BOM, if present. + sample = data[:4] + if sample in (codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE): + return "utf-32" # BOM included + if sample[:3] == codecs.BOM_UTF8: + return "utf-8-sig" # BOM included, MS style (discouraged) + if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE): + return "utf-16" # BOM included + nullcount = sample.count(_null) + if nullcount == 0: + return "utf-8" + if nullcount == 2: + if sample[::2] == _null2: # 1st and 3rd are null + return "utf-16-be" + if sample[1::2] == _null2: # 2nd and 4th are null + return "utf-16-le" + # Did not detect 2 valid UTF-16 ascii-range characters + if nullcount == 3: + if sample[:3] == _null3: + return "utf-32-be" + if sample[1:] == _null3: + return "utf-32-le" + # Did not detect a valid UTF-32 ascii-range character + return None + + +def prepend_scheme_if_needed(url, new_scheme): + """Given a URL that may or may not have a scheme, prepend the given scheme. + Does not replace a present scheme with the one provided as an argument. + + :rtype: str + """ + parsed = parse_url(url) + scheme, auth, host, port, path, query, fragment = parsed + + # A defect in urlparse determines that there isn't a netloc present in some + # urls. We previously assumed parsing was overly cautious, and swapped the + # netloc and path. Due to a lack of tests on the original defect, this is + # maintained with parse_url for backwards compatibility. + netloc = parsed.netloc + if not netloc: + netloc, path = path, netloc + + if auth: + # parse_url doesn't provide the netloc with auth + # so we'll add it ourselves. + netloc = "@".join([auth, netloc]) + if scheme is None: + scheme = new_scheme + if path is None: + path = "" + + return urlunparse((scheme, netloc, path, "", query, fragment)) + + +def get_auth_from_url(url): + """Given a url with authentication components, extract them into a tuple of + username,password. + + :rtype: (str,str) + """ + parsed = urlparse(url) + + try: + auth = (unquote(parsed.username), unquote(parsed.password)) + except (AttributeError, TypeError): + auth = ("", "") + + return auth + + +def check_header_validity(header): + """Verifies that header parts don't contain leading whitespace + reserved characters, or return characters. + + :param header: tuple, in the format (name, value). + """ + name, value = header + _validate_header_part(header, name, 0) + _validate_header_part(header, value, 1) + + +def _validate_header_part(header, header_part, header_validator_index): + if isinstance(header_part, str): + validator = _HEADER_VALIDATORS_STR[header_validator_index] + elif isinstance(header_part, bytes): + validator = _HEADER_VALIDATORS_BYTE[header_validator_index] + else: + raise InvalidHeader( + f"Header part ({header_part!r}) from {header} " + f"must be of type str or bytes, not {type(header_part)}" + ) + + if not validator.match(header_part): + header_kind = "name" if header_validator_index == 0 else "value" + raise InvalidHeader( + f"Invalid leading whitespace, reserved character(s), or return" + f"character(s) in header {header_kind}: {header_part!r}" + ) + + +def urldefragauth(url): + """ + Given a url remove the fragment and the authentication part. + + :rtype: str + """ + scheme, netloc, path, params, query, fragment = urlparse(url) + + # see func:`prepend_scheme_if_needed` + if not netloc: + netloc, path = path, netloc + + netloc = netloc.rsplit("@", 1)[-1] + + return urlunparse((scheme, netloc, path, params, query, "")) + + +def rewind_body(prepared_request): + """Move file pointer back to its recorded starting position + so it can be read again on redirect. + """ + body_seek = getattr(prepared_request.body, "seek", None) + if body_seek is not None and isinstance( + prepared_request._body_position, integer_types + ): + try: + body_seek(prepared_request._body_position) + except OSError: + raise UnrewindableBodyError( + "An error occurred when rewinding request body for redirect." + ) + else: + raise UnrewindableBodyError("Unable to rewind request body for redirect.") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py new file mode 100644 index 0000000..d92acc7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py @@ -0,0 +1,26 @@ +__all__ = [ + "__version__", + "AbstractProvider", + "AbstractResolver", + "BaseReporter", + "InconsistentCandidate", + "Resolver", + "RequirementsConflicted", + "ResolutionError", + "ResolutionImpossible", + "ResolutionTooDeep", +] + +__version__ = "1.0.1" + + +from .providers import AbstractProvider, AbstractResolver +from .reporters import BaseReporter +from .resolvers import ( + InconsistentCandidate, + RequirementsConflicted, + ResolutionError, + ResolutionImpossible, + ResolutionTooDeep, + Resolver, +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..c42a499 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc new file mode 100644 index 0000000..aa069e1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc new file mode 100644 index 0000000..4959e7f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc new file mode 100644 index 0000000..5330203 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc new file mode 100644 index 0000000..0a5c5d5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..7576b6a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc new file mode 100644 index 0000000..ea1a9ff Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py new file mode 100644 index 0000000..1becc50 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py @@ -0,0 +1,6 @@ +__all__ = ["Mapping", "Sequence"] + +try: + from collections.abc import Mapping, Sequence +except ImportError: + from collections import Mapping, Sequence diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py new file mode 100644 index 0000000..e99d87e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py @@ -0,0 +1,133 @@ +class AbstractProvider(object): + """Delegate class to provide the required interface for the resolver.""" + + def identify(self, requirement_or_candidate): + """Given a requirement, return an identifier for it. + + This is used to identify a requirement, e.g. whether two requirements + should have their specifier parts merged. + """ + raise NotImplementedError + + def get_preference( + self, + identifier, + resolutions, + candidates, + information, + backtrack_causes, + ): + """Produce a sort key for given requirement based on preference. + + The preference is defined as "I think this requirement should be + resolved first". The lower the return value is, the more preferred + this group of arguments is. + + :param identifier: An identifier as returned by ``identify()``. This + identifies the dependency matches which should be returned. + :param resolutions: Mapping of candidates currently pinned by the + resolver. Each key is an identifier, and the value is a candidate. + The candidate may conflict with requirements from ``information``. + :param candidates: Mapping of each dependency's possible candidates. + Each value is an iterator of candidates. + :param information: Mapping of requirement information of each package. + Each value is an iterator of *requirement information*. + :param backtrack_causes: Sequence of requirement information that were + the requirements that caused the resolver to most recently backtrack. + + A *requirement information* instance is a named tuple with two members: + + * ``requirement`` specifies a requirement contributing to the current + list of candidates. + * ``parent`` specifies the candidate that provides (depended on) the + requirement, or ``None`` to indicate a root requirement. + + The preference could depend on various issues, including (not + necessarily in this order): + + * Is this package pinned in the current resolution result? + * How relaxed is the requirement? Stricter ones should probably be + worked on first? (I don't know, actually.) + * How many possibilities are there to satisfy this requirement? Those + with few left should likely be worked on first, I guess? + * Are there any known conflicts for this requirement? We should + probably work on those with the most known conflicts. + + A sortable value should be returned (this will be used as the ``key`` + parameter of the built-in sorting function). The smaller the value is, + the more preferred this requirement is (i.e. the sorting function + is called with ``reverse=False``). + """ + raise NotImplementedError + + def find_matches(self, identifier, requirements, incompatibilities): + """Find all possible candidates that satisfy the given constraints. + + :param identifier: An identifier as returned by ``identify()``. This + identifies the dependency matches of which should be returned. + :param requirements: A mapping of requirements that all returned + candidates must satisfy. Each key is an identifier, and the value + an iterator of requirements for that dependency. + :param incompatibilities: A mapping of known incompatibilities of + each dependency. Each key is an identifier, and the value an + iterator of incompatibilities known to the resolver. All + incompatibilities *must* be excluded from the return value. + + This should try to get candidates based on the requirements' types. + For VCS, local, and archive requirements, the one-and-only match is + returned, and for a "named" requirement, the index(es) should be + consulted to find concrete candidates for this requirement. + + The return value should produce candidates ordered by preference; the + most preferred candidate should come first. The return type may be one + of the following: + + * A callable that returns an iterator that yields candidates. + * An collection of candidates. + * An iterable of candidates. This will be consumed immediately into a + list of candidates. + """ + raise NotImplementedError + + def is_satisfied_by(self, requirement, candidate): + """Whether the given requirement can be satisfied by a candidate. + + The candidate is guaranteed to have been generated from the + requirement. + + A boolean should be returned to indicate whether ``candidate`` is a + viable solution to the requirement. + """ + raise NotImplementedError + + def get_dependencies(self, candidate): + """Get dependencies of a candidate. + + This should return a collection of requirements that `candidate` + specifies as its dependencies. + """ + raise NotImplementedError + + +class AbstractResolver(object): + """The thing that performs the actual resolution work.""" + + base_exception = Exception + + def __init__(self, provider, reporter): + self.provider = provider + self.reporter = reporter + + def resolve(self, requirements, **kwargs): + """Take a collection of constraints, spit out the resolution result. + + This returns a representation of the final resolution state, with one + guarenteed attribute ``mapping`` that contains resolved candidates as + values. The keys are their respective identifiers. + + :param requirements: A collection of constraints. + :param kwargs: Additional keyword arguments that subclasses may accept. + + :raises: ``self.base_exception`` or its subclass. + """ + raise NotImplementedError diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py new file mode 100644 index 0000000..688b5e1 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py @@ -0,0 +1,43 @@ +class BaseReporter(object): + """Delegate class to provider progress reporting for the resolver.""" + + def starting(self): + """Called before the resolution actually starts.""" + + def starting_round(self, index): + """Called before each round of resolution starts. + + The index is zero-based. + """ + + def ending_round(self, index, state): + """Called before each round of resolution ends. + + This is NOT called if the resolution ends at this round. Use `ending` + if you want to report finalization. The index is zero-based. + """ + + def ending(self, state): + """Called before the resolution ends successfully.""" + + def adding_requirement(self, requirement, parent): + """Called when adding a new requirement into the resolve criteria. + + :param requirement: The additional requirement to be applied to filter + the available candidaites. + :param parent: The candidate that requires ``requirement`` as a + dependency, or None if ``requirement`` is one of the root + requirements passed in from ``Resolver.resolve()``. + """ + + def resolving_conflicts(self, causes): + """Called when starting to attempt requirement conflict resolution. + + :param causes: The information on the collision that caused the backtracking. + """ + + def rejecting_candidate(self, criterion, candidate): + """Called when rejecting a candidate during backtracking.""" + + def pinning(self, candidate): + """Called when adding a candidate to the potential solution.""" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py new file mode 100644 index 0000000..2c3d0e3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py @@ -0,0 +1,547 @@ +import collections +import itertools +import operator + +from .providers import AbstractResolver +from .structs import DirectedGraph, IteratorMapping, build_iter_view + +RequirementInformation = collections.namedtuple( + "RequirementInformation", ["requirement", "parent"] +) + + +class ResolverException(Exception): + """A base class for all exceptions raised by this module. + + Exceptions derived by this class should all be handled in this module. Any + bubbling pass the resolver should be treated as a bug. + """ + + +class RequirementsConflicted(ResolverException): + def __init__(self, criterion): + super(RequirementsConflicted, self).__init__(criterion) + self.criterion = criterion + + def __str__(self): + return "Requirements conflict: {}".format( + ", ".join(repr(r) for r in self.criterion.iter_requirement()), + ) + + +class InconsistentCandidate(ResolverException): + def __init__(self, candidate, criterion): + super(InconsistentCandidate, self).__init__(candidate, criterion) + self.candidate = candidate + self.criterion = criterion + + def __str__(self): + return "Provided candidate {!r} does not satisfy {}".format( + self.candidate, + ", ".join(repr(r) for r in self.criterion.iter_requirement()), + ) + + +class Criterion(object): + """Representation of possible resolution results of a package. + + This holds three attributes: + + * `information` is a collection of `RequirementInformation` pairs. + Each pair is a requirement contributing to this criterion, and the + candidate that provides the requirement. + * `incompatibilities` is a collection of all known not-to-work candidates + to exclude from consideration. + * `candidates` is a collection containing all possible candidates deducted + from the union of contributing requirements and known incompatibilities. + It should never be empty, except when the criterion is an attribute of a + raised `RequirementsConflicted` (in which case it is always empty). + + .. note:: + This class is intended to be externally immutable. **Do not** mutate + any of its attribute containers. + """ + + def __init__(self, candidates, information, incompatibilities): + self.candidates = candidates + self.information = information + self.incompatibilities = incompatibilities + + def __repr__(self): + requirements = ", ".join( + "({!r}, via={!r})".format(req, parent) + for req, parent in self.information + ) + return "Criterion({})".format(requirements) + + def iter_requirement(self): + return (i.requirement for i in self.information) + + def iter_parent(self): + return (i.parent for i in self.information) + + +class ResolutionError(ResolverException): + pass + + +class ResolutionImpossible(ResolutionError): + def __init__(self, causes): + super(ResolutionImpossible, self).__init__(causes) + # causes is a list of RequirementInformation objects + self.causes = causes + + +class ResolutionTooDeep(ResolutionError): + def __init__(self, round_count): + super(ResolutionTooDeep, self).__init__(round_count) + self.round_count = round_count + + +# Resolution state in a round. +State = collections.namedtuple("State", "mapping criteria backtrack_causes") + + +class Resolution(object): + """Stateful resolution object. + + This is designed as a one-off object that holds information to kick start + the resolution process, and holds the results afterwards. + """ + + def __init__(self, provider, reporter): + self._p = provider + self._r = reporter + self._states = [] + + @property + def state(self): + try: + return self._states[-1] + except IndexError: + raise AttributeError("state") + + def _push_new_state(self): + """Push a new state into history. + + This new state will be used to hold resolution results of the next + coming round. + """ + base = self._states[-1] + state = State( + mapping=base.mapping.copy(), + criteria=base.criteria.copy(), + backtrack_causes=base.backtrack_causes[:], + ) + self._states.append(state) + + def _add_to_criteria(self, criteria, requirement, parent): + self._r.adding_requirement(requirement=requirement, parent=parent) + + identifier = self._p.identify(requirement_or_candidate=requirement) + criterion = criteria.get(identifier) + if criterion: + incompatibilities = list(criterion.incompatibilities) + else: + incompatibilities = [] + + matches = self._p.find_matches( + identifier=identifier, + requirements=IteratorMapping( + criteria, + operator.methodcaller("iter_requirement"), + {identifier: [requirement]}, + ), + incompatibilities=IteratorMapping( + criteria, + operator.attrgetter("incompatibilities"), + {identifier: incompatibilities}, + ), + ) + + if criterion: + information = list(criterion.information) + information.append(RequirementInformation(requirement, parent)) + else: + information = [RequirementInformation(requirement, parent)] + + criterion = Criterion( + candidates=build_iter_view(matches), + information=information, + incompatibilities=incompatibilities, + ) + if not criterion.candidates: + raise RequirementsConflicted(criterion) + criteria[identifier] = criterion + + def _remove_information_from_criteria(self, criteria, parents): + """Remove information from parents of criteria. + + Concretely, removes all values from each criterion's ``information`` + field that have one of ``parents`` as provider of the requirement. + + :param criteria: The criteria to update. + :param parents: Identifiers for which to remove information from all criteria. + """ + if not parents: + return + for key, criterion in criteria.items(): + criteria[key] = Criterion( + criterion.candidates, + [ + information + for information in criterion.information + if ( + information.parent is None + or self._p.identify(information.parent) not in parents + ) + ], + criterion.incompatibilities, + ) + + def _get_preference(self, name): + return self._p.get_preference( + identifier=name, + resolutions=self.state.mapping, + candidates=IteratorMapping( + self.state.criteria, + operator.attrgetter("candidates"), + ), + information=IteratorMapping( + self.state.criteria, + operator.attrgetter("information"), + ), + backtrack_causes=self.state.backtrack_causes, + ) + + def _is_current_pin_satisfying(self, name, criterion): + try: + current_pin = self.state.mapping[name] + except KeyError: + return False + return all( + self._p.is_satisfied_by(requirement=r, candidate=current_pin) + for r in criterion.iter_requirement() + ) + + def _get_updated_criteria(self, candidate): + criteria = self.state.criteria.copy() + for requirement in self._p.get_dependencies(candidate=candidate): + self._add_to_criteria(criteria, requirement, parent=candidate) + return criteria + + def _attempt_to_pin_criterion(self, name): + criterion = self.state.criteria[name] + + causes = [] + for candidate in criterion.candidates: + try: + criteria = self._get_updated_criteria(candidate) + except RequirementsConflicted as e: + self._r.rejecting_candidate(e.criterion, candidate) + causes.append(e.criterion) + continue + + # Check the newly-pinned candidate actually works. This should + # always pass under normal circumstances, but in the case of a + # faulty provider, we will raise an error to notify the implementer + # to fix find_matches() and/or is_satisfied_by(). + satisfied = all( + self._p.is_satisfied_by(requirement=r, candidate=candidate) + for r in criterion.iter_requirement() + ) + if not satisfied: + raise InconsistentCandidate(candidate, criterion) + + self._r.pinning(candidate=candidate) + self.state.criteria.update(criteria) + + # Put newly-pinned candidate at the end. This is essential because + # backtracking looks at this mapping to get the last pin. + self.state.mapping.pop(name, None) + self.state.mapping[name] = candidate + + return [] + + # All candidates tried, nothing works. This criterion is a dead + # end, signal for backtracking. + return causes + + def _backjump(self, causes): + """Perform backjumping. + + When we enter here, the stack is like this:: + + [ state Z ] + [ state Y ] + [ state X ] + .... earlier states are irrelevant. + + 1. No pins worked for Z, so it does not have a pin. + 2. We want to reset state Y to unpinned, and pin another candidate. + 3. State X holds what state Y was before the pin, but does not + have the incompatibility information gathered in state Y. + + Each iteration of the loop will: + + 1. Identify Z. The incompatibility is not always caused by the latest + state. For example, given three requirements A, B and C, with + dependencies A1, B1 and C1, where A1 and B1 are incompatible: the + last state might be related to C, so we want to discard the + previous state. + 2. Discard Z. + 3. Discard Y but remember its incompatibility information gathered + previously, and the failure we're dealing with right now. + 4. Push a new state Y' based on X, and apply the incompatibility + information from Y to Y'. + 5a. If this causes Y' to conflict, we need to backtrack again. Make Y' + the new Z and go back to step 2. + 5b. If the incompatibilities apply cleanly, end backtracking. + """ + incompatible_reqs = itertools.chain( + (c.parent for c in causes if c.parent is not None), + (c.requirement for c in causes), + ) + incompatible_deps = {self._p.identify(r) for r in incompatible_reqs} + while len(self._states) >= 3: + # Remove the state that triggered backtracking. + del self._states[-1] + + # Ensure to backtrack to a state that caused the incompatibility + incompatible_state = False + while not incompatible_state: + # Retrieve the last candidate pin and known incompatibilities. + try: + broken_state = self._states.pop() + name, candidate = broken_state.mapping.popitem() + except (IndexError, KeyError): + raise ResolutionImpossible(causes) + current_dependencies = { + self._p.identify(d) + for d in self._p.get_dependencies(candidate) + } + incompatible_state = not current_dependencies.isdisjoint( + incompatible_deps + ) + + incompatibilities_from_broken = [ + (k, list(v.incompatibilities)) + for k, v in broken_state.criteria.items() + ] + + # Also mark the newly known incompatibility. + incompatibilities_from_broken.append((name, [candidate])) + + # Create a new state from the last known-to-work one, and apply + # the previously gathered incompatibility information. + def _patch_criteria(): + for k, incompatibilities in incompatibilities_from_broken: + if not incompatibilities: + continue + try: + criterion = self.state.criteria[k] + except KeyError: + continue + matches = self._p.find_matches( + identifier=k, + requirements=IteratorMapping( + self.state.criteria, + operator.methodcaller("iter_requirement"), + ), + incompatibilities=IteratorMapping( + self.state.criteria, + operator.attrgetter("incompatibilities"), + {k: incompatibilities}, + ), + ) + candidates = build_iter_view(matches) + if not candidates: + return False + incompatibilities.extend(criterion.incompatibilities) + self.state.criteria[k] = Criterion( + candidates=candidates, + information=list(criterion.information), + incompatibilities=incompatibilities, + ) + return True + + self._push_new_state() + success = _patch_criteria() + + # It works! Let's work on this new state. + if success: + return True + + # State does not work after applying known incompatibilities. + # Try the still previous state. + + # No way to backtrack anymore. + return False + + def resolve(self, requirements, max_rounds): + if self._states: + raise RuntimeError("already resolved") + + self._r.starting() + + # Initialize the root state. + self._states = [ + State( + mapping=collections.OrderedDict(), + criteria={}, + backtrack_causes=[], + ) + ] + for r in requirements: + try: + self._add_to_criteria(self.state.criteria, r, parent=None) + except RequirementsConflicted as e: + raise ResolutionImpossible(e.criterion.information) + + # The root state is saved as a sentinel so the first ever pin can have + # something to backtrack to if it fails. The root state is basically + # pinning the virtual "root" package in the graph. + self._push_new_state() + + for round_index in range(max_rounds): + self._r.starting_round(index=round_index) + + unsatisfied_names = [ + key + for key, criterion in self.state.criteria.items() + if not self._is_current_pin_satisfying(key, criterion) + ] + + # All criteria are accounted for. Nothing more to pin, we are done! + if not unsatisfied_names: + self._r.ending(state=self.state) + return self.state + + # keep track of satisfied names to calculate diff after pinning + satisfied_names = set(self.state.criteria.keys()) - set( + unsatisfied_names + ) + + # Choose the most preferred unpinned criterion to try. + name = min(unsatisfied_names, key=self._get_preference) + failure_causes = self._attempt_to_pin_criterion(name) + + if failure_causes: + causes = [i for c in failure_causes for i in c.information] + # Backjump if pinning fails. The backjump process puts us in + # an unpinned state, so we can work on it in the next round. + self._r.resolving_conflicts(causes=causes) + success = self._backjump(causes) + self.state.backtrack_causes[:] = causes + + # Dead ends everywhere. Give up. + if not success: + raise ResolutionImpossible(self.state.backtrack_causes) + else: + # discard as information sources any invalidated names + # (unsatisfied names that were previously satisfied) + newly_unsatisfied_names = { + key + for key, criterion in self.state.criteria.items() + if key in satisfied_names + and not self._is_current_pin_satisfying(key, criterion) + } + self._remove_information_from_criteria( + self.state.criteria, newly_unsatisfied_names + ) + # Pinning was successful. Push a new state to do another pin. + self._push_new_state() + + self._r.ending_round(index=round_index, state=self.state) + + raise ResolutionTooDeep(max_rounds) + + +def _has_route_to_root(criteria, key, all_keys, connected): + if key in connected: + return True + if key not in criteria: + return False + for p in criteria[key].iter_parent(): + try: + pkey = all_keys[id(p)] + except KeyError: + continue + if pkey in connected: + connected.add(key) + return True + if _has_route_to_root(criteria, pkey, all_keys, connected): + connected.add(key) + return True + return False + + +Result = collections.namedtuple("Result", "mapping graph criteria") + + +def _build_result(state): + mapping = state.mapping + all_keys = {id(v): k for k, v in mapping.items()} + all_keys[id(None)] = None + + graph = DirectedGraph() + graph.add(None) # Sentinel as root dependencies' parent. + + connected = {None} + for key, criterion in state.criteria.items(): + if not _has_route_to_root(state.criteria, key, all_keys, connected): + continue + if key not in graph: + graph.add(key) + for p in criterion.iter_parent(): + try: + pkey = all_keys[id(p)] + except KeyError: + continue + if pkey not in graph: + graph.add(pkey) + graph.connect(pkey, key) + + return Result( + mapping={k: v for k, v in mapping.items() if k in connected}, + graph=graph, + criteria=state.criteria, + ) + + +class Resolver(AbstractResolver): + """The thing that performs the actual resolution work.""" + + base_exception = ResolverException + + def resolve(self, requirements, max_rounds=100): + """Take a collection of constraints, spit out the resolution result. + + The return value is a representation to the final resolution result. It + is a tuple subclass with three public members: + + * `mapping`: A dict of resolved candidates. Each key is an identifier + of a requirement (as returned by the provider's `identify` method), + and the value is the resolved candidate. + * `graph`: A `DirectedGraph` instance representing the dependency tree. + The vertices are keys of `mapping`, and each edge represents *why* + a particular package is included. A special vertex `None` is + included to represent parents of user-supplied requirements. + * `criteria`: A dict of "criteria" that hold detailed information on + how edges in the graph are derived. Each key is an identifier of a + requirement, and the value is a `Criterion` instance. + + The following exceptions may be raised if a resolution cannot be found: + + * `ResolutionImpossible`: A resolution cannot be found for the given + combination of requirements. The `causes` attribute of the + exception is a list of (requirement, parent), giving the + requirements that could not be satisfied. + * `ResolutionTooDeep`: The dependency tree is too deeply nested and + the resolver gave up. This is usually caused by a circular + dependency, but you can try to resolve this by increasing the + `max_rounds` argument. + """ + resolution = Resolution(self.provider, self.reporter) + state = resolution.resolve(requirements, max_rounds=max_rounds) + return _build_result(state) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py new file mode 100644 index 0000000..359a34f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py @@ -0,0 +1,170 @@ +import itertools + +from .compat import collections_abc + + +class DirectedGraph(object): + """A graph structure with directed edges.""" + + def __init__(self): + self._vertices = set() + self._forwards = {} # -> Set[] + self._backwards = {} # -> Set[] + + def __iter__(self): + return iter(self._vertices) + + def __len__(self): + return len(self._vertices) + + def __contains__(self, key): + return key in self._vertices + + def copy(self): + """Return a shallow copy of this graph.""" + other = DirectedGraph() + other._vertices = set(self._vertices) + other._forwards = {k: set(v) for k, v in self._forwards.items()} + other._backwards = {k: set(v) for k, v in self._backwards.items()} + return other + + def add(self, key): + """Add a new vertex to the graph.""" + if key in self._vertices: + raise ValueError("vertex exists") + self._vertices.add(key) + self._forwards[key] = set() + self._backwards[key] = set() + + def remove(self, key): + """Remove a vertex from the graph, disconnecting all edges from/to it.""" + self._vertices.remove(key) + for f in self._forwards.pop(key): + self._backwards[f].remove(key) + for t in self._backwards.pop(key): + self._forwards[t].remove(key) + + def connected(self, f, t): + return f in self._backwards[t] and t in self._forwards[f] + + def connect(self, f, t): + """Connect two existing vertices. + + Nothing happens if the vertices are already connected. + """ + if t not in self._vertices: + raise KeyError(t) + self._forwards[f].add(t) + self._backwards[t].add(f) + + def iter_edges(self): + for f, children in self._forwards.items(): + for t in children: + yield f, t + + def iter_children(self, key): + return iter(self._forwards[key]) + + def iter_parents(self, key): + return iter(self._backwards[key]) + + +class IteratorMapping(collections_abc.Mapping): + def __init__(self, mapping, accessor, appends=None): + self._mapping = mapping + self._accessor = accessor + self._appends = appends or {} + + def __repr__(self): + return "IteratorMapping({!r}, {!r}, {!r})".format( + self._mapping, + self._accessor, + self._appends, + ) + + def __bool__(self): + return bool(self._mapping or self._appends) + + __nonzero__ = __bool__ # XXX: Python 2. + + def __contains__(self, key): + return key in self._mapping or key in self._appends + + def __getitem__(self, k): + try: + v = self._mapping[k] + except KeyError: + return iter(self._appends[k]) + return itertools.chain(self._accessor(v), self._appends.get(k, ())) + + def __iter__(self): + more = (k for k in self._appends if k not in self._mapping) + return itertools.chain(self._mapping, more) + + def __len__(self): + more = sum(1 for k in self._appends if k not in self._mapping) + return len(self._mapping) + more + + +class _FactoryIterableView(object): + """Wrap an iterator factory returned by `find_matches()`. + + Calling `iter()` on this class would invoke the underlying iterator + factory, making it a "collection with ordering" that can be iterated + through multiple times, but lacks random access methods presented in + built-in Python sequence types. + """ + + def __init__(self, factory): + self._factory = factory + self._iterable = None + + def __repr__(self): + return "{}({})".format(type(self).__name__, list(self)) + + def __bool__(self): + try: + next(iter(self)) + except StopIteration: + return False + return True + + __nonzero__ = __bool__ # XXX: Python 2. + + def __iter__(self): + iterable = ( + self._factory() if self._iterable is None else self._iterable + ) + self._iterable, current = itertools.tee(iterable) + return current + + +class _SequenceIterableView(object): + """Wrap an iterable returned by find_matches(). + + This is essentially just a proxy to the underlying sequence that provides + the same interface as `_FactoryIterableView`. + """ + + def __init__(self, sequence): + self._sequence = sequence + + def __repr__(self): + return "{}({})".format(type(self).__name__, self._sequence) + + def __bool__(self): + return bool(self._sequence) + + __nonzero__ = __bool__ # XXX: Python 2. + + def __iter__(self): + return iter(self._sequence) + + +def build_iter_view(matches): + """Build an iterable view from the value returned by `find_matches()`.""" + if callable(matches): + return _FactoryIterableView(matches) + if not isinstance(matches, collections_abc.Sequence): + matches = list(matches) + return _SequenceIterableView(matches) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py new file mode 100644 index 0000000..73f58d7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py @@ -0,0 +1,177 @@ +"""Rich text and beautiful formatting in the terminal.""" + +import os +from typing import IO, TYPE_CHECKING, Any, Callable, Optional, Union + +from ._extension import load_ipython_extension # noqa: F401 + +__all__ = ["get_console", "reconfigure", "print", "inspect", "print_json"] + +if TYPE_CHECKING: + from .console import Console + +# Global console used by alternative print +_console: Optional["Console"] = None + +try: + _IMPORT_CWD = os.path.abspath(os.getcwd()) +except FileNotFoundError: + # Can happen if the cwd has been deleted + _IMPORT_CWD = "" + + +def get_console() -> "Console": + """Get a global :class:`~rich.console.Console` instance. This function is used when Rich requires a Console, + and hasn't been explicitly given one. + + Returns: + Console: A console instance. + """ + global _console + if _console is None: + from .console import Console + + _console = Console() + + return _console + + +def reconfigure(*args: Any, **kwargs: Any) -> None: + """Reconfigures the global console by replacing it with another. + + Args: + *args (Any): Positional arguments for the replacement :class:`~rich.console.Console`. + **kwargs (Any): Keyword arguments for the replacement :class:`~rich.console.Console`. + """ + from pip._vendor.rich.console import Console + + new_console = Console(*args, **kwargs) + _console = get_console() + _console.__dict__ = new_console.__dict__ + + +def print( + *objects: Any, + sep: str = " ", + end: str = "\n", + file: Optional[IO[str]] = None, + flush: bool = False, +) -> None: + r"""Print object(s) supplied via positional arguments. + This function has an identical signature to the built-in print. + For more advanced features, see the :class:`~rich.console.Console` class. + + Args: + sep (str, optional): Separator between printed objects. Defaults to " ". + end (str, optional): Character to write at end of output. Defaults to "\\n". + file (IO[str], optional): File to write to, or None for stdout. Defaults to None. + flush (bool, optional): Has no effect as Rich always flushes output. Defaults to False. + + """ + from .console import Console + + write_console = get_console() if file is None else Console(file=file) + return write_console.print(*objects, sep=sep, end=end) + + +def print_json( + json: Optional[str] = None, + *, + data: Any = None, + indent: Union[None, int, str] = 2, + highlight: bool = True, + skip_keys: bool = False, + ensure_ascii: bool = False, + check_circular: bool = True, + allow_nan: bool = True, + default: Optional[Callable[[Any], Any]] = None, + sort_keys: bool = False, +) -> None: + """Pretty prints JSON. Output will be valid JSON. + + Args: + json (str): A string containing JSON. + data (Any): If json is not supplied, then encode this data. + indent (int, optional): Number of spaces to indent. Defaults to 2. + highlight (bool, optional): Enable highlighting of output: Defaults to True. + skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. + ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. + check_circular (bool, optional): Check for circular references. Defaults to True. + allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. + default (Callable, optional): A callable that converts values that can not be encoded + in to something that can be JSON encoded. Defaults to None. + sort_keys (bool, optional): Sort dictionary keys. Defaults to False. + """ + + get_console().print_json( + json, + data=data, + indent=indent, + highlight=highlight, + skip_keys=skip_keys, + ensure_ascii=ensure_ascii, + check_circular=check_circular, + allow_nan=allow_nan, + default=default, + sort_keys=sort_keys, + ) + + +def inspect( + obj: Any, + *, + console: Optional["Console"] = None, + title: Optional[str] = None, + help: bool = False, + methods: bool = False, + docs: bool = True, + private: bool = False, + dunder: bool = False, + sort: bool = True, + all: bool = False, + value: bool = True, +) -> None: + """Inspect any Python object. + + * inspect() to see summarized info. + * inspect(, methods=True) to see methods. + * inspect(, help=True) to see full (non-abbreviated) help. + * inspect(, private=True) to see private attributes (single underscore). + * inspect(, dunder=True) to see attributes beginning with double underscore. + * inspect(, all=True) to see all attributes. + + Args: + obj (Any): An object to inspect. + title (str, optional): Title to display over inspect result, or None use type. Defaults to None. + help (bool, optional): Show full help text rather than just first paragraph. Defaults to False. + methods (bool, optional): Enable inspection of callables. Defaults to False. + docs (bool, optional): Also render doc strings. Defaults to True. + private (bool, optional): Show private attributes (beginning with underscore). Defaults to False. + dunder (bool, optional): Show attributes starting with double underscore. Defaults to False. + sort (bool, optional): Sort attributes alphabetically. Defaults to True. + all (bool, optional): Show all attributes. Defaults to False. + value (bool, optional): Pretty print value. Defaults to True. + """ + _console = console or get_console() + from pip._vendor.rich._inspect import Inspect + + # Special case for inspect(inspect) + is_inspect = obj is inspect + + _inspect = Inspect( + obj, + title=title, + help=is_inspect or help, + methods=is_inspect or methods, + docs=is_inspect or docs, + private=private, + dunder=dunder, + sort=sort, + all=all, + value=value, + ) + _console.print(_inspect) + + +if __name__ == "__main__": # pragma: no cover + print("Hello, **World**") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__main__.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__main__.py new file mode 100644 index 0000000..270629f --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__main__.py @@ -0,0 +1,274 @@ +import colorsys +import io +from time import process_time + +from pip._vendor.rich import box +from pip._vendor.rich.color import Color +from pip._vendor.rich.console import Console, ConsoleOptions, Group, RenderableType, RenderResult +from pip._vendor.rich.markdown import Markdown +from pip._vendor.rich.measure import Measurement +from pip._vendor.rich.pretty import Pretty +from pip._vendor.rich.segment import Segment +from pip._vendor.rich.style import Style +from pip._vendor.rich.syntax import Syntax +from pip._vendor.rich.table import Table +from pip._vendor.rich.text import Text + + +class ColorBox: + def __rich_console__( + self, console: Console, options: ConsoleOptions + ) -> RenderResult: + for y in range(0, 5): + for x in range(options.max_width): + h = x / options.max_width + l = 0.1 + ((y / 5) * 0.7) + r1, g1, b1 = colorsys.hls_to_rgb(h, l, 1.0) + r2, g2, b2 = colorsys.hls_to_rgb(h, l + 0.7 / 10, 1.0) + bgcolor = Color.from_rgb(r1 * 255, g1 * 255, b1 * 255) + color = Color.from_rgb(r2 * 255, g2 * 255, b2 * 255) + yield Segment("▄", Style(color=color, bgcolor=bgcolor)) + yield Segment.line() + + def __rich_measure__( + self, console: "Console", options: ConsoleOptions + ) -> Measurement: + return Measurement(1, options.max_width) + + +def make_test_card() -> Table: + """Get a renderable that demonstrates a number of features.""" + table = Table.grid(padding=1, pad_edge=True) + table.title = "Rich features" + table.add_column("Feature", no_wrap=True, justify="center", style="bold red") + table.add_column("Demonstration") + + color_table = Table( + box=None, + expand=False, + show_header=False, + show_edge=False, + pad_edge=False, + ) + color_table.add_row( + ( + "✓ [bold green]4-bit color[/]\n" + "✓ [bold blue]8-bit color[/]\n" + "✓ [bold magenta]Truecolor (16.7 million)[/]\n" + "✓ [bold yellow]Dumb terminals[/]\n" + "✓ [bold cyan]Automatic color conversion" + ), + ColorBox(), + ) + + table.add_row("Colors", color_table) + + table.add_row( + "Styles", + "All ansi styles: [bold]bold[/], [dim]dim[/], [italic]italic[/italic], [underline]underline[/], [strike]strikethrough[/], [reverse]reverse[/], and even [blink]blink[/].", + ) + + lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in metus sed sapien ultricies pretium a at justo. Maecenas luctus velit et auctor maximus." + lorem_table = Table.grid(padding=1, collapse_padding=True) + lorem_table.pad_edge = False + lorem_table.add_row( + Text(lorem, justify="left", style="green"), + Text(lorem, justify="center", style="yellow"), + Text(lorem, justify="right", style="blue"), + Text(lorem, justify="full", style="red"), + ) + table.add_row( + "Text", + Group( + Text.from_markup( + """Word wrap text. Justify [green]left[/], [yellow]center[/], [blue]right[/] or [red]full[/].\n""" + ), + lorem_table, + ), + ) + + def comparison(renderable1: RenderableType, renderable2: RenderableType) -> Table: + table = Table(show_header=False, pad_edge=False, box=None, expand=True) + table.add_column("1", ratio=1) + table.add_column("2", ratio=1) + table.add_row(renderable1, renderable2) + return table + + table.add_row( + "Asian\nlanguage\nsupport", + ":flag_for_china: 该库支持中文,日文和韩文文本!\n:flag_for_japan: ライブラリは中国語、日本語、韓国語のテキストをサポートしています\n:flag_for_south_korea: 이 라이브러리는 중국어, 일본어 및 한국어 텍스트를 지원합니다", + ) + + markup_example = ( + "[bold magenta]Rich[/] supports a simple [i]bbcode[/i]-like [b]markup[/b] for [yellow]color[/], [underline]style[/], and emoji! " + ":+1: :apple: :ant: :bear: :baguette_bread: :bus: " + ) + table.add_row("Markup", markup_example) + + example_table = Table( + show_edge=False, + show_header=True, + expand=False, + row_styles=["none", "dim"], + box=box.SIMPLE, + ) + example_table.add_column("[green]Date", style="green", no_wrap=True) + example_table.add_column("[blue]Title", style="blue") + example_table.add_column( + "[cyan]Production Budget", + style="cyan", + justify="right", + no_wrap=True, + ) + example_table.add_column( + "[magenta]Box Office", + style="magenta", + justify="right", + no_wrap=True, + ) + example_table.add_row( + "Dec 20, 2019", + "Star Wars: The Rise of Skywalker", + "$275,000,000", + "$375,126,118", + ) + example_table.add_row( + "May 25, 2018", + "[b]Solo[/]: A Star Wars Story", + "$275,000,000", + "$393,151,347", + ) + example_table.add_row( + "Dec 15, 2017", + "Star Wars Ep. VIII: The Last Jedi", + "$262,000,000", + "[bold]$1,332,539,889[/bold]", + ) + example_table.add_row( + "May 19, 1999", + "Star Wars Ep. [b]I[/b]: [i]The phantom Menace", + "$115,000,000", + "$1,027,044,677", + ) + + table.add_row("Tables", example_table) + + code = '''\ +def iter_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: + """Iterate and generate a tuple with a flag for last value.""" + iter_values = iter(values) + try: + previous_value = next(iter_values) + except StopIteration: + return + for value in iter_values: + yield False, previous_value + previous_value = value + yield True, previous_value''' + + pretty_data = { + "foo": [ + 3.1427, + ( + "Paul Atreides", + "Vladimir Harkonnen", + "Thufir Hawat", + ), + ], + "atomic": (False, True, None), + } + table.add_row( + "Syntax\nhighlighting\n&\npretty\nprinting", + comparison( + Syntax(code, "python3", line_numbers=True, indent_guides=True), + Pretty(pretty_data, indent_guides=True), + ), + ) + + markdown_example = """\ +# Markdown + +Supports much of the *markdown* __syntax__! + +- Headers +- Basic formatting: **bold**, *italic*, `code` +- Block quotes +- Lists, and more... + """ + table.add_row( + "Markdown", comparison("[cyan]" + markdown_example, Markdown(markdown_example)) + ) + + table.add_row( + "+more!", + """Progress bars, columns, styled logging handler, tracebacks, etc...""", + ) + return table + + +if __name__ == "__main__": # pragma: no cover + + console = Console( + file=io.StringIO(), + force_terminal=True, + ) + test_card = make_test_card() + + # Print once to warm cache + start = process_time() + console.print(test_card) + pre_cache_taken = round((process_time() - start) * 1000.0, 1) + + console.file = io.StringIO() + + start = process_time() + console.print(test_card) + taken = round((process_time() - start) * 1000.0, 1) + + c = Console(record=True) + c.print(test_card) + + print(f"rendered in {pre_cache_taken}ms (cold cache)") + print(f"rendered in {taken}ms (warm cache)") + + from pip._vendor.rich.panel import Panel + + console = Console() + + sponsor_message = Table.grid(padding=1) + sponsor_message.add_column(style="green", justify="right") + sponsor_message.add_column(no_wrap=True) + + sponsor_message.add_row( + "Textualize", + "[u blue link=https://github.com/textualize]https://github.com/textualize", + ) + sponsor_message.add_row( + "Twitter", + "[u blue link=https://twitter.com/willmcgugan]https://twitter.com/willmcgugan", + ) + + intro_message = Text.from_markup( + """\ +We hope you enjoy using Rich! + +Rich is maintained with [red]:heart:[/] by [link=https://www.textualize.io]Textualize.io[/] + +- Will McGugan""" + ) + + message = Table.grid(padding=2) + message.add_column() + message.add_column(no_wrap=True) + message.add_row(intro_message, sponsor_message) + + console.print( + Panel.fit( + message, + box=box.ROUNDED, + padding=(1, 2), + title="[b red]Thanks for trying out Rich!", + border_style="bright_blue", + ), + justify="center", + ) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..bb84d7b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..2ee85f2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc new file mode 100644 index 0000000..e996b3c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc new file mode 100644 index 0000000..f67970a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc new file mode 100644 index 0000000..5acc7c9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc new file mode 100644 index 0000000..43aae6c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc new file mode 100644 index 0000000..0478e51 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc new file mode 100644 index 0000000..c2c7d3a Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc new file mode 100644 index 0000000..9254d50 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc new file mode 100644 index 0000000..517a63d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc new file mode 100644 index 0000000..936099b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc new file mode 100644 index 0000000..e9e4270 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc new file mode 100644 index 0000000..25bf81d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc new file mode 100644 index 0000000..f12f3c5 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc new file mode 100644 index 0000000..0d27538 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc new file mode 100644 index 0000000..6fbf157 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc new file mode 100644 index 0000000..25d21e9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc new file mode 100644 index 0000000..112985c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc new file mode 100644 index 0000000..2d3ba49 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc new file mode 100644 index 0000000..853105e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc new file mode 100644 index 0000000..c5d0942 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc new file mode 100644 index 0000000..a2aa74e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc new file mode 100644 index 0000000..55fdff8 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc new file mode 100644 index 0000000..8416485 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc new file mode 100644 index 0000000..439f0fc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc new file mode 100644 index 0000000..4963c07 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc new file mode 100644 index 0000000..eeaab72 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc new file mode 100644 index 0000000..74678e0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc new file mode 100644 index 0000000..b18c621 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc new file mode 100644 index 0000000..b520ce6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc new file mode 100644 index 0000000..a8436e0 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc new file mode 100644 index 0000000..7dba422 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc new file mode 100644 index 0000000..e9880ea Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc new file mode 100644 index 0000000..6915c05 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc new file mode 100644 index 0000000..8b41367 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc new file mode 100644 index 0000000..8818954 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc new file mode 100644 index 0000000..09fac46 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc new file mode 100644 index 0000000..7bc0aeb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc new file mode 100644 index 0000000..5f621fe Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc new file mode 100644 index 0000000..2aa0970 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc new file mode 100644 index 0000000..40c43cc Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc new file mode 100644 index 0000000..c011281 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc new file mode 100644 index 0000000..1c63912 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc new file mode 100644 index 0000000..9c42cd2 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc new file mode 100644 index 0000000..b813be1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc new file mode 100644 index 0000000..7ad7607 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc new file mode 100644 index 0000000..e94bceb Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc new file mode 100644 index 0000000..67ef76e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc new file mode 100644 index 0000000..e786dd4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc new file mode 100644 index 0000000..613b4ab Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc new file mode 100644 index 0000000..9bb99a3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc new file mode 100644 index 0000000..39e1274 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc new file mode 100644 index 0000000..5ffda1b Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc new file mode 100644 index 0000000..c80bd7e Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc new file mode 100644 index 0000000..da374b4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc new file mode 100644 index 0000000..d3dfcdd Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc new file mode 100644 index 0000000..95c02d7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc new file mode 100644 index 0000000..50f8507 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc new file mode 100644 index 0000000..bea4853 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc new file mode 100644 index 0000000..9fda6b4 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc new file mode 100644 index 0000000..c42f4c7 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc new file mode 100644 index 0000000..28c6ba6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc new file mode 100644 index 0000000..54959f9 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc new file mode 100644 index 0000000..a4e5269 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc new file mode 100644 index 0000000..22255af Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc new file mode 100644 index 0000000..0aa93c6 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc new file mode 100644 index 0000000..0d06e3f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc new file mode 100644 index 0000000..3e0b859 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc new file mode 100644 index 0000000..13f2cc3 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc new file mode 100644 index 0000000..450641d Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc new file mode 100644 index 0000000..50e2f52 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc new file mode 100644 index 0000000..2c4fed1 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc new file mode 100644 index 0000000..d529827 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc new file mode 100644 index 0000000..2a38e6f Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc new file mode 100644 index 0000000..3283c8c Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc new file mode 100644 index 0000000..521c997 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc new file mode 100644 index 0000000..470d267 Binary files /dev/null and b/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc differ diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py new file mode 100644 index 0000000..36286df --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py @@ -0,0 +1,451 @@ +# Auto generated by make_terminal_widths.py + +CELL_WIDTHS = [ + (0, 0, 0), + (1, 31, -1), + (127, 159, -1), + (768, 879, 0), + (1155, 1161, 0), + (1425, 1469, 0), + (1471, 1471, 0), + (1473, 1474, 0), + (1476, 1477, 0), + (1479, 1479, 0), + (1552, 1562, 0), + (1611, 1631, 0), + (1648, 1648, 0), + (1750, 1756, 0), + (1759, 1764, 0), + (1767, 1768, 0), + (1770, 1773, 0), + (1809, 1809, 0), + (1840, 1866, 0), + (1958, 1968, 0), + (2027, 2035, 0), + (2045, 2045, 0), + (2070, 2073, 0), + (2075, 2083, 0), + (2085, 2087, 0), + (2089, 2093, 0), + (2137, 2139, 0), + (2259, 2273, 0), + (2275, 2306, 0), + (2362, 2362, 0), + (2364, 2364, 0), + (2369, 2376, 0), + (2381, 2381, 0), + (2385, 2391, 0), + (2402, 2403, 0), + (2433, 2433, 0), + (2492, 2492, 0), + (2497, 2500, 0), + (2509, 2509, 0), + (2530, 2531, 0), + (2558, 2558, 0), + (2561, 2562, 0), + (2620, 2620, 0), + (2625, 2626, 0), + (2631, 2632, 0), + (2635, 2637, 0), + (2641, 2641, 0), + (2672, 2673, 0), + (2677, 2677, 0), + (2689, 2690, 0), + (2748, 2748, 0), + (2753, 2757, 0), + (2759, 2760, 0), + (2765, 2765, 0), + (2786, 2787, 0), + (2810, 2815, 0), + (2817, 2817, 0), + (2876, 2876, 0), + (2879, 2879, 0), + (2881, 2884, 0), + (2893, 2893, 0), + (2901, 2902, 0), + (2914, 2915, 0), + (2946, 2946, 0), + (3008, 3008, 0), + (3021, 3021, 0), + (3072, 3072, 0), + (3076, 3076, 0), + (3134, 3136, 0), + (3142, 3144, 0), + (3146, 3149, 0), + (3157, 3158, 0), + (3170, 3171, 0), + (3201, 3201, 0), + (3260, 3260, 0), + (3263, 3263, 0), + (3270, 3270, 0), + (3276, 3277, 0), + (3298, 3299, 0), + (3328, 3329, 0), + (3387, 3388, 0), + (3393, 3396, 0), + (3405, 3405, 0), + (3426, 3427, 0), + (3457, 3457, 0), + (3530, 3530, 0), + (3538, 3540, 0), + (3542, 3542, 0), + (3633, 3633, 0), + (3636, 3642, 0), + (3655, 3662, 0), + (3761, 3761, 0), + (3764, 3772, 0), + (3784, 3789, 0), + (3864, 3865, 0), + (3893, 3893, 0), + (3895, 3895, 0), + (3897, 3897, 0), + (3953, 3966, 0), + (3968, 3972, 0), + (3974, 3975, 0), + (3981, 3991, 0), + (3993, 4028, 0), + (4038, 4038, 0), + (4141, 4144, 0), + (4146, 4151, 0), + (4153, 4154, 0), + (4157, 4158, 0), + (4184, 4185, 0), + (4190, 4192, 0), + (4209, 4212, 0), + (4226, 4226, 0), + (4229, 4230, 0), + (4237, 4237, 0), + (4253, 4253, 0), + (4352, 4447, 2), + (4957, 4959, 0), + (5906, 5908, 0), + (5938, 5940, 0), + (5970, 5971, 0), + (6002, 6003, 0), + (6068, 6069, 0), + (6071, 6077, 0), + (6086, 6086, 0), + (6089, 6099, 0), + (6109, 6109, 0), + (6155, 6157, 0), + (6277, 6278, 0), + (6313, 6313, 0), + (6432, 6434, 0), + (6439, 6440, 0), + (6450, 6450, 0), + (6457, 6459, 0), + (6679, 6680, 0), + (6683, 6683, 0), + (6742, 6742, 0), + (6744, 6750, 0), + (6752, 6752, 0), + (6754, 6754, 0), + (6757, 6764, 0), + (6771, 6780, 0), + (6783, 6783, 0), + (6832, 6848, 0), + (6912, 6915, 0), + (6964, 6964, 0), + (6966, 6970, 0), + (6972, 6972, 0), + (6978, 6978, 0), + (7019, 7027, 0), + (7040, 7041, 0), + (7074, 7077, 0), + (7080, 7081, 0), + (7083, 7085, 0), + (7142, 7142, 0), + (7144, 7145, 0), + (7149, 7149, 0), + (7151, 7153, 0), + (7212, 7219, 0), + (7222, 7223, 0), + (7376, 7378, 0), + (7380, 7392, 0), + (7394, 7400, 0), + (7405, 7405, 0), + (7412, 7412, 0), + (7416, 7417, 0), + (7616, 7673, 0), + (7675, 7679, 0), + (8203, 8207, 0), + (8232, 8238, 0), + (8288, 8291, 0), + (8400, 8432, 0), + (8986, 8987, 2), + (9001, 9002, 2), + (9193, 9196, 2), + (9200, 9200, 2), + (9203, 9203, 2), + (9725, 9726, 2), + (9748, 9749, 2), + (9800, 9811, 2), + (9855, 9855, 2), + (9875, 9875, 2), + (9889, 9889, 2), + (9898, 9899, 2), + (9917, 9918, 2), + (9924, 9925, 2), + (9934, 9934, 2), + (9940, 9940, 2), + (9962, 9962, 2), + (9970, 9971, 2), + (9973, 9973, 2), + (9978, 9978, 2), + (9981, 9981, 2), + (9989, 9989, 2), + (9994, 9995, 2), + (10024, 10024, 2), + (10060, 10060, 2), + (10062, 10062, 2), + (10067, 10069, 2), + (10071, 10071, 2), + (10133, 10135, 2), + (10160, 10160, 2), + (10175, 10175, 2), + (11035, 11036, 2), + (11088, 11088, 2), + (11093, 11093, 2), + (11503, 11505, 0), + (11647, 11647, 0), + (11744, 11775, 0), + (11904, 11929, 2), + (11931, 12019, 2), + (12032, 12245, 2), + (12272, 12283, 2), + (12288, 12329, 2), + (12330, 12333, 0), + (12334, 12350, 2), + (12353, 12438, 2), + (12441, 12442, 0), + (12443, 12543, 2), + (12549, 12591, 2), + (12593, 12686, 2), + (12688, 12771, 2), + (12784, 12830, 2), + (12832, 12871, 2), + (12880, 19903, 2), + (19968, 42124, 2), + (42128, 42182, 2), + (42607, 42610, 0), + (42612, 42621, 0), + (42654, 42655, 0), + (42736, 42737, 0), + (43010, 43010, 0), + (43014, 43014, 0), + (43019, 43019, 0), + (43045, 43046, 0), + (43052, 43052, 0), + (43204, 43205, 0), + (43232, 43249, 0), + (43263, 43263, 0), + (43302, 43309, 0), + (43335, 43345, 0), + (43360, 43388, 2), + (43392, 43394, 0), + (43443, 43443, 0), + (43446, 43449, 0), + (43452, 43453, 0), + (43493, 43493, 0), + (43561, 43566, 0), + (43569, 43570, 0), + (43573, 43574, 0), + (43587, 43587, 0), + (43596, 43596, 0), + (43644, 43644, 0), + (43696, 43696, 0), + (43698, 43700, 0), + (43703, 43704, 0), + (43710, 43711, 0), + (43713, 43713, 0), + (43756, 43757, 0), + (43766, 43766, 0), + (44005, 44005, 0), + (44008, 44008, 0), + (44013, 44013, 0), + (44032, 55203, 2), + (63744, 64255, 2), + (64286, 64286, 0), + (65024, 65039, 0), + (65040, 65049, 2), + (65056, 65071, 0), + (65072, 65106, 2), + (65108, 65126, 2), + (65128, 65131, 2), + (65281, 65376, 2), + (65504, 65510, 2), + (66045, 66045, 0), + (66272, 66272, 0), + (66422, 66426, 0), + (68097, 68099, 0), + (68101, 68102, 0), + (68108, 68111, 0), + (68152, 68154, 0), + (68159, 68159, 0), + (68325, 68326, 0), + (68900, 68903, 0), + (69291, 69292, 0), + (69446, 69456, 0), + (69633, 69633, 0), + (69688, 69702, 0), + (69759, 69761, 0), + (69811, 69814, 0), + (69817, 69818, 0), + (69888, 69890, 0), + (69927, 69931, 0), + (69933, 69940, 0), + (70003, 70003, 0), + (70016, 70017, 0), + (70070, 70078, 0), + (70089, 70092, 0), + (70095, 70095, 0), + (70191, 70193, 0), + (70196, 70196, 0), + (70198, 70199, 0), + (70206, 70206, 0), + (70367, 70367, 0), + (70371, 70378, 0), + (70400, 70401, 0), + (70459, 70460, 0), + (70464, 70464, 0), + (70502, 70508, 0), + (70512, 70516, 0), + (70712, 70719, 0), + (70722, 70724, 0), + (70726, 70726, 0), + (70750, 70750, 0), + (70835, 70840, 0), + (70842, 70842, 0), + (70847, 70848, 0), + (70850, 70851, 0), + (71090, 71093, 0), + (71100, 71101, 0), + (71103, 71104, 0), + (71132, 71133, 0), + (71219, 71226, 0), + (71229, 71229, 0), + (71231, 71232, 0), + (71339, 71339, 0), + (71341, 71341, 0), + (71344, 71349, 0), + (71351, 71351, 0), + (71453, 71455, 0), + (71458, 71461, 0), + (71463, 71467, 0), + (71727, 71735, 0), + (71737, 71738, 0), + (71995, 71996, 0), + (71998, 71998, 0), + (72003, 72003, 0), + (72148, 72151, 0), + (72154, 72155, 0), + (72160, 72160, 0), + (72193, 72202, 0), + (72243, 72248, 0), + (72251, 72254, 0), + (72263, 72263, 0), + (72273, 72278, 0), + (72281, 72283, 0), + (72330, 72342, 0), + (72344, 72345, 0), + (72752, 72758, 0), + (72760, 72765, 0), + (72767, 72767, 0), + (72850, 72871, 0), + (72874, 72880, 0), + (72882, 72883, 0), + (72885, 72886, 0), + (73009, 73014, 0), + (73018, 73018, 0), + (73020, 73021, 0), + (73023, 73029, 0), + (73031, 73031, 0), + (73104, 73105, 0), + (73109, 73109, 0), + (73111, 73111, 0), + (73459, 73460, 0), + (92912, 92916, 0), + (92976, 92982, 0), + (94031, 94031, 0), + (94095, 94098, 0), + (94176, 94179, 2), + (94180, 94180, 0), + (94192, 94193, 2), + (94208, 100343, 2), + (100352, 101589, 2), + (101632, 101640, 2), + (110592, 110878, 2), + (110928, 110930, 2), + (110948, 110951, 2), + (110960, 111355, 2), + (113821, 113822, 0), + (119143, 119145, 0), + (119163, 119170, 0), + (119173, 119179, 0), + (119210, 119213, 0), + (119362, 119364, 0), + (121344, 121398, 0), + (121403, 121452, 0), + (121461, 121461, 0), + (121476, 121476, 0), + (121499, 121503, 0), + (121505, 121519, 0), + (122880, 122886, 0), + (122888, 122904, 0), + (122907, 122913, 0), + (122915, 122916, 0), + (122918, 122922, 0), + (123184, 123190, 0), + (123628, 123631, 0), + (125136, 125142, 0), + (125252, 125258, 0), + (126980, 126980, 2), + (127183, 127183, 2), + (127374, 127374, 2), + (127377, 127386, 2), + (127488, 127490, 2), + (127504, 127547, 2), + (127552, 127560, 2), + (127568, 127569, 2), + (127584, 127589, 2), + (127744, 127776, 2), + (127789, 127797, 2), + (127799, 127868, 2), + (127870, 127891, 2), + (127904, 127946, 2), + (127951, 127955, 2), + (127968, 127984, 2), + (127988, 127988, 2), + (127992, 128062, 2), + (128064, 128064, 2), + (128066, 128252, 2), + (128255, 128317, 2), + (128331, 128334, 2), + (128336, 128359, 2), + (128378, 128378, 2), + (128405, 128406, 2), + (128420, 128420, 2), + (128507, 128591, 2), + (128640, 128709, 2), + (128716, 128716, 2), + (128720, 128722, 2), + (128725, 128727, 2), + (128747, 128748, 2), + (128756, 128764, 2), + (128992, 129003, 2), + (129292, 129338, 2), + (129340, 129349, 2), + (129351, 129400, 2), + (129402, 129483, 2), + (129485, 129535, 2), + (129648, 129652, 2), + (129656, 129658, 2), + (129664, 129670, 2), + (129680, 129704, 2), + (129712, 129718, 2), + (129728, 129730, 2), + (129744, 129750, 2), + (131072, 196605, 2), + (196608, 262141, 2), + (917760, 917999, 0), +] diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py new file mode 100644 index 0000000..1f2877b --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py @@ -0,0 +1,3610 @@ +EMOJI = { + "1st_place_medal": "🥇", + "2nd_place_medal": "🥈", + "3rd_place_medal": "🥉", + "ab_button_(blood_type)": "🆎", + "atm_sign": "🏧", + "a_button_(blood_type)": "🅰", + "afghanistan": "🇦🇫", + "albania": "🇦🇱", + "algeria": "🇩🇿", + "american_samoa": "🇦🇸", + "andorra": "🇦🇩", + "angola": "🇦🇴", + "anguilla": "🇦🇮", + "antarctica": "🇦🇶", + "antigua_&_barbuda": "🇦🇬", + "aquarius": "♒", + "argentina": "🇦🇷", + "aries": "♈", + "armenia": "🇦🇲", + "aruba": "🇦🇼", + "ascension_island": "🇦🇨", + "australia": "🇦🇺", + "austria": "🇦🇹", + "azerbaijan": "🇦🇿", + "back_arrow": "🔙", + "b_button_(blood_type)": "🅱", + "bahamas": "🇧🇸", + "bahrain": "🇧🇭", + "bangladesh": "🇧🇩", + "barbados": "🇧🇧", + "belarus": "🇧🇾", + "belgium": "🇧🇪", + "belize": "🇧🇿", + "benin": "🇧🇯", + "bermuda": "🇧🇲", + "bhutan": "🇧🇹", + "bolivia": "🇧🇴", + "bosnia_&_herzegovina": "🇧🇦", + "botswana": "🇧🇼", + "bouvet_island": "🇧🇻", + "brazil": "🇧🇷", + "british_indian_ocean_territory": "🇮🇴", + "british_virgin_islands": "🇻🇬", + "brunei": "🇧🇳", + "bulgaria": "🇧🇬", + "burkina_faso": "🇧🇫", + "burundi": "🇧🇮", + "cl_button": "🆑", + "cool_button": "🆒", + "cambodia": "🇰🇭", + "cameroon": "🇨🇲", + "canada": "🇨🇦", + "canary_islands": "🇮🇨", + "cancer": "♋", + "cape_verde": "🇨🇻", + "capricorn": "♑", + "caribbean_netherlands": "🇧🇶", + "cayman_islands": "🇰🇾", + "central_african_republic": "🇨🇫", + "ceuta_&_melilla": "🇪🇦", + "chad": "🇹🇩", + "chile": "🇨🇱", + "china": "🇨🇳", + "christmas_island": "🇨🇽", + "christmas_tree": "🎄", + "clipperton_island": "🇨🇵", + "cocos_(keeling)_islands": "🇨🇨", + "colombia": "🇨🇴", + "comoros": "🇰🇲", + "congo_-_brazzaville": "🇨🇬", + "congo_-_kinshasa": "🇨🇩", + "cook_islands": "🇨🇰", + "costa_rica": "🇨🇷", + "croatia": "🇭🇷", + "cuba": "🇨🇺", + "curaçao": "🇨🇼", + "cyprus": "🇨🇾", + "czechia": "🇨🇿", + "côte_d’ivoire": "🇨🇮", + "denmark": "🇩🇰", + "diego_garcia": "🇩🇬", + "djibouti": "🇩🇯", + "dominica": "🇩🇲", + "dominican_republic": "🇩🇴", + "end_arrow": "🔚", + "ecuador": "🇪🇨", + "egypt": "🇪🇬", + "el_salvador": "🇸🇻", + "england": "🏴\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f", + "equatorial_guinea": "🇬🇶", + "eritrea": "🇪🇷", + "estonia": "🇪🇪", + "ethiopia": "🇪🇹", + "european_union": "🇪🇺", + "free_button": "🆓", + "falkland_islands": "🇫🇰", + "faroe_islands": "🇫🇴", + "fiji": "🇫🇯", + "finland": "🇫🇮", + "france": "🇫🇷", + "french_guiana": "🇬🇫", + "french_polynesia": "🇵🇫", + "french_southern_territories": "🇹🇫", + "gabon": "🇬🇦", + "gambia": "🇬🇲", + "gemini": "♊", + "georgia": "🇬🇪", + "germany": "🇩🇪", + "ghana": "🇬🇭", + "gibraltar": "🇬🇮", + "greece": "🇬🇷", + "greenland": "🇬🇱", + "grenada": "🇬🇩", + "guadeloupe": "🇬🇵", + "guam": "🇬🇺", + "guatemala": "🇬🇹", + "guernsey": "🇬🇬", + "guinea": "🇬🇳", + "guinea-bissau": "🇬🇼", + "guyana": "🇬🇾", + "haiti": "🇭🇹", + "heard_&_mcdonald_islands": "🇭🇲", + "honduras": "🇭🇳", + "hong_kong_sar_china": "🇭🇰", + "hungary": "🇭🇺", + "id_button": "🆔", + "iceland": "🇮🇸", + "india": "🇮🇳", + "indonesia": "🇮🇩", + "iran": "🇮🇷", + "iraq": "🇮🇶", + "ireland": "🇮🇪", + "isle_of_man": "🇮🇲", + "israel": "🇮🇱", + "italy": "🇮🇹", + "jamaica": "🇯🇲", + "japan": "🗾", + "japanese_acceptable_button": "🉑", + "japanese_application_button": "🈸", + "japanese_bargain_button": "🉐", + "japanese_castle": "🏯", + "japanese_congratulations_button": "㊗", + "japanese_discount_button": "🈹", + "japanese_dolls": "🎎", + "japanese_free_of_charge_button": "🈚", + "japanese_here_button": "🈁", + "japanese_monthly_amount_button": "🈷", + "japanese_no_vacancy_button": "🈵", + "japanese_not_free_of_charge_button": "🈶", + "japanese_open_for_business_button": "🈺", + "japanese_passing_grade_button": "🈴", + "japanese_post_office": "🏣", + "japanese_prohibited_button": "🈲", + "japanese_reserved_button": "🈯", + "japanese_secret_button": "㊙", + "japanese_service_charge_button": "🈂", + "japanese_symbol_for_beginner": "🔰", + "japanese_vacancy_button": "🈳", + "jersey": "🇯🇪", + "jordan": "🇯🇴", + "kazakhstan": "🇰🇿", + "kenya": "🇰🇪", + "kiribati": "🇰🇮", + "kosovo": "🇽🇰", + "kuwait": "🇰🇼", + "kyrgyzstan": "🇰🇬", + "laos": "🇱🇦", + "latvia": "🇱🇻", + "lebanon": "🇱🇧", + "leo": "♌", + "lesotho": "🇱🇸", + "liberia": "🇱🇷", + "libra": "♎", + "libya": "🇱🇾", + "liechtenstein": "🇱🇮", + "lithuania": "🇱🇹", + "luxembourg": "🇱🇺", + "macau_sar_china": "🇲🇴", + "macedonia": "🇲🇰", + "madagascar": "🇲🇬", + "malawi": "🇲🇼", + "malaysia": "🇲🇾", + "maldives": "🇲🇻", + "mali": "🇲🇱", + "malta": "🇲🇹", + "marshall_islands": "🇲🇭", + "martinique": "🇲🇶", + "mauritania": "🇲🇷", + "mauritius": "🇲🇺", + "mayotte": "🇾🇹", + "mexico": "🇲🇽", + "micronesia": "🇫🇲", + "moldova": "🇲🇩", + "monaco": "🇲🇨", + "mongolia": "🇲🇳", + "montenegro": "🇲🇪", + "montserrat": "🇲🇸", + "morocco": "🇲🇦", + "mozambique": "🇲🇿", + "mrs._claus": "🤶", + "mrs._claus_dark_skin_tone": "🤶🏿", + "mrs._claus_light_skin_tone": "🤶🏻", + "mrs._claus_medium-dark_skin_tone": "🤶🏾", + "mrs._claus_medium-light_skin_tone": "🤶🏼", + "mrs._claus_medium_skin_tone": "🤶🏽", + "myanmar_(burma)": "🇲🇲", + "new_button": "🆕", + "ng_button": "🆖", + "namibia": "🇳🇦", + "nauru": "🇳🇷", + "nepal": "🇳🇵", + "netherlands": "🇳🇱", + "new_caledonia": "🇳🇨", + "new_zealand": "🇳🇿", + "nicaragua": "🇳🇮", + "niger": "🇳🇪", + "nigeria": "🇳🇬", + "niue": "🇳🇺", + "norfolk_island": "🇳🇫", + "north_korea": "🇰🇵", + "northern_mariana_islands": "🇲🇵", + "norway": "🇳🇴", + "ok_button": "🆗", + "ok_hand": "👌", + "ok_hand_dark_skin_tone": "👌🏿", + "ok_hand_light_skin_tone": "👌🏻", + "ok_hand_medium-dark_skin_tone": "👌🏾", + "ok_hand_medium-light_skin_tone": "👌🏼", + "ok_hand_medium_skin_tone": "👌🏽", + "on!_arrow": "🔛", + "o_button_(blood_type)": "🅾", + "oman": "🇴🇲", + "ophiuchus": "⛎", + "p_button": "🅿", + "pakistan": "🇵🇰", + "palau": "🇵🇼", + "palestinian_territories": "🇵🇸", + "panama": "🇵🇦", + "papua_new_guinea": "🇵🇬", + "paraguay": "🇵🇾", + "peru": "🇵🇪", + "philippines": "🇵🇭", + "pisces": "♓", + "pitcairn_islands": "🇵🇳", + "poland": "🇵🇱", + "portugal": "🇵🇹", + "puerto_rico": "🇵🇷", + "qatar": "🇶🇦", + "romania": "🇷🇴", + "russia": "🇷🇺", + "rwanda": "🇷🇼", + "réunion": "🇷🇪", + "soon_arrow": "🔜", + "sos_button": "🆘", + "sagittarius": "♐", + "samoa": "🇼🇸", + "san_marino": "🇸🇲", + "santa_claus": "🎅", + "santa_claus_dark_skin_tone": "🎅🏿", + "santa_claus_light_skin_tone": "🎅🏻", + "santa_claus_medium-dark_skin_tone": "🎅🏾", + "santa_claus_medium-light_skin_tone": "🎅🏼", + "santa_claus_medium_skin_tone": "🎅🏽", + "saudi_arabia": "🇸🇦", + "scorpio": "♏", + "scotland": "🏴\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f", + "senegal": "🇸🇳", + "serbia": "🇷🇸", + "seychelles": "🇸🇨", + "sierra_leone": "🇸🇱", + "singapore": "🇸🇬", + "sint_maarten": "🇸🇽", + "slovakia": "🇸🇰", + "slovenia": "🇸🇮", + "solomon_islands": "🇸🇧", + "somalia": "🇸🇴", + "south_africa": "🇿🇦", + "south_georgia_&_south_sandwich_islands": "🇬🇸", + "south_korea": "🇰🇷", + "south_sudan": "🇸🇸", + "spain": "🇪🇸", + "sri_lanka": "🇱🇰", + "st._barthélemy": "🇧🇱", + "st._helena": "🇸🇭", + "st._kitts_&_nevis": "🇰🇳", + "st._lucia": "🇱🇨", + "st._martin": "🇲🇫", + "st._pierre_&_miquelon": "🇵🇲", + "st._vincent_&_grenadines": "🇻🇨", + "statue_of_liberty": "🗽", + "sudan": "🇸🇩", + "suriname": "🇸🇷", + "svalbard_&_jan_mayen": "🇸🇯", + "swaziland": "🇸🇿", + "sweden": "🇸🇪", + "switzerland": "🇨🇭", + "syria": "🇸🇾", + "são_tomé_&_príncipe": "🇸🇹", + "t-rex": "🦖", + "top_arrow": "🔝", + "taiwan": "🇹🇼", + "tajikistan": "🇹🇯", + "tanzania": "🇹🇿", + "taurus": "♉", + "thailand": "🇹🇭", + "timor-leste": "🇹🇱", + "togo": "🇹🇬", + "tokelau": "🇹🇰", + "tokyo_tower": "🗼", + "tonga": "🇹🇴", + "trinidad_&_tobago": "🇹🇹", + "tristan_da_cunha": "🇹🇦", + "tunisia": "🇹🇳", + "turkey": "🦃", + "turkmenistan": "🇹🇲", + "turks_&_caicos_islands": "🇹🇨", + "tuvalu": "🇹🇻", + "u.s._outlying_islands": "🇺🇲", + "u.s._virgin_islands": "🇻🇮", + "up!_button": "🆙", + "uganda": "🇺🇬", + "ukraine": "🇺🇦", + "united_arab_emirates": "🇦🇪", + "united_kingdom": "🇬🇧", + "united_nations": "🇺🇳", + "united_states": "🇺🇸", + "uruguay": "🇺🇾", + "uzbekistan": "🇺🇿", + "vs_button": "🆚", + "vanuatu": "🇻🇺", + "vatican_city": "🇻🇦", + "venezuela": "🇻🇪", + "vietnam": "🇻🇳", + "virgo": "♍", + "wales": "🏴\U000e0067\U000e0062\U000e0077\U000e006c\U000e0073\U000e007f", + "wallis_&_futuna": "🇼🇫", + "western_sahara": "🇪🇭", + "yemen": "🇾🇪", + "zambia": "🇿🇲", + "zimbabwe": "🇿🇼", + "abacus": "🧮", + "adhesive_bandage": "🩹", + "admission_tickets": "🎟", + "adult": "🧑", + "adult_dark_skin_tone": "🧑🏿", + "adult_light_skin_tone": "🧑🏻", + "adult_medium-dark_skin_tone": "🧑🏾", + "adult_medium-light_skin_tone": "🧑🏼", + "adult_medium_skin_tone": "🧑🏽", + "aerial_tramway": "🚡", + "airplane": "✈", + "airplane_arrival": "🛬", + "airplane_departure": "🛫", + "alarm_clock": "⏰", + "alembic": "⚗", + "alien": "👽", + "alien_monster": "👾", + "ambulance": "🚑", + "american_football": "🏈", + "amphora": "🏺", + "anchor": "⚓", + "anger_symbol": "💢", + "angry_face": "😠", + "angry_face_with_horns": "👿", + "anguished_face": "😧", + "ant": "🐜", + "antenna_bars": "📶", + "anxious_face_with_sweat": "😰", + "articulated_lorry": "🚛", + "artist_palette": "🎨", + "astonished_face": "😲", + "atom_symbol": "⚛", + "auto_rickshaw": "🛺", + "automobile": "🚗", + "avocado": "🥑", + "axe": "🪓", + "baby": "👶", + "baby_angel": "👼", + "baby_angel_dark_skin_tone": "👼🏿", + "baby_angel_light_skin_tone": "👼🏻", + "baby_angel_medium-dark_skin_tone": "👼🏾", + "baby_angel_medium-light_skin_tone": "👼🏼", + "baby_angel_medium_skin_tone": "👼🏽", + "baby_bottle": "🍼", + "baby_chick": "🐤", + "baby_dark_skin_tone": "👶🏿", + "baby_light_skin_tone": "👶🏻", + "baby_medium-dark_skin_tone": "👶🏾", + "baby_medium-light_skin_tone": "👶🏼", + "baby_medium_skin_tone": "👶🏽", + "baby_symbol": "🚼", + "backhand_index_pointing_down": "👇", + "backhand_index_pointing_down_dark_skin_tone": "👇🏿", + "backhand_index_pointing_down_light_skin_tone": "👇🏻", + "backhand_index_pointing_down_medium-dark_skin_tone": "👇🏾", + "backhand_index_pointing_down_medium-light_skin_tone": "👇🏼", + "backhand_index_pointing_down_medium_skin_tone": "👇🏽", + "backhand_index_pointing_left": "👈", + "backhand_index_pointing_left_dark_skin_tone": "👈🏿", + "backhand_index_pointing_left_light_skin_tone": "👈🏻", + "backhand_index_pointing_left_medium-dark_skin_tone": "👈🏾", + "backhand_index_pointing_left_medium-light_skin_tone": "👈🏼", + "backhand_index_pointing_left_medium_skin_tone": "👈🏽", + "backhand_index_pointing_right": "👉", + "backhand_index_pointing_right_dark_skin_tone": "👉🏿", + "backhand_index_pointing_right_light_skin_tone": "👉🏻", + "backhand_index_pointing_right_medium-dark_skin_tone": "👉🏾", + "backhand_index_pointing_right_medium-light_skin_tone": "👉🏼", + "backhand_index_pointing_right_medium_skin_tone": "👉🏽", + "backhand_index_pointing_up": "👆", + "backhand_index_pointing_up_dark_skin_tone": "👆🏿", + "backhand_index_pointing_up_light_skin_tone": "👆🏻", + "backhand_index_pointing_up_medium-dark_skin_tone": "👆🏾", + "backhand_index_pointing_up_medium-light_skin_tone": "👆🏼", + "backhand_index_pointing_up_medium_skin_tone": "👆🏽", + "bacon": "🥓", + "badger": "🦡", + "badminton": "🏸", + "bagel": "🥯", + "baggage_claim": "🛄", + "baguette_bread": "🥖", + "balance_scale": "⚖", + "bald": "🦲", + "bald_man": "👨\u200d🦲", + "bald_woman": "👩\u200d🦲", + "ballet_shoes": "🩰", + "balloon": "🎈", + "ballot_box_with_ballot": "🗳", + "ballot_box_with_check": "☑", + "banana": "🍌", + "banjo": "🪕", + "bank": "🏦", + "bar_chart": "📊", + "barber_pole": "💈", + "baseball": "⚾", + "basket": "🧺", + "basketball": "🏀", + "bat": "🦇", + "bathtub": "🛁", + "battery": "🔋", + "beach_with_umbrella": "🏖", + "beaming_face_with_smiling_eyes": "😁", + "bear_face": "🐻", + "bearded_person": "🧔", + "bearded_person_dark_skin_tone": "🧔🏿", + "bearded_person_light_skin_tone": "🧔🏻", + "bearded_person_medium-dark_skin_tone": "🧔🏾", + "bearded_person_medium-light_skin_tone": "🧔🏼", + "bearded_person_medium_skin_tone": "🧔🏽", + "beating_heart": "💓", + "bed": "🛏", + "beer_mug": "🍺", + "bell": "🔔", + "bell_with_slash": "🔕", + "bellhop_bell": "🛎", + "bento_box": "🍱", + "beverage_box": "🧃", + "bicycle": "🚲", + "bikini": "👙", + "billed_cap": "🧢", + "biohazard": "☣", + "bird": "🐦", + "birthday_cake": "🎂", + "black_circle": "⚫", + "black_flag": "🏴", + "black_heart": "🖤", + "black_large_square": "⬛", + "black_medium-small_square": "◾", + "black_medium_square": "◼", + "black_nib": "✒", + "black_small_square": "▪", + "black_square_button": "🔲", + "blond-haired_man": "👱\u200d♂️", + "blond-haired_man_dark_skin_tone": "👱🏿\u200d♂️", + "blond-haired_man_light_skin_tone": "👱🏻\u200d♂️", + "blond-haired_man_medium-dark_skin_tone": "👱🏾\u200d♂️", + "blond-haired_man_medium-light_skin_tone": "👱🏼\u200d♂️", + "blond-haired_man_medium_skin_tone": "👱🏽\u200d♂️", + "blond-haired_person": "👱", + "blond-haired_person_dark_skin_tone": "👱🏿", + "blond-haired_person_light_skin_tone": "👱🏻", + "blond-haired_person_medium-dark_skin_tone": "👱🏾", + "blond-haired_person_medium-light_skin_tone": "👱🏼", + "blond-haired_person_medium_skin_tone": "👱🏽", + "blond-haired_woman": "👱\u200d♀️", + "blond-haired_woman_dark_skin_tone": "👱🏿\u200d♀️", + "blond-haired_woman_light_skin_tone": "👱🏻\u200d♀️", + "blond-haired_woman_medium-dark_skin_tone": "👱🏾\u200d♀️", + "blond-haired_woman_medium-light_skin_tone": "👱🏼\u200d♀️", + "blond-haired_woman_medium_skin_tone": "👱🏽\u200d♀️", + "blossom": "🌼", + "blowfish": "🐡", + "blue_book": "📘", + "blue_circle": "🔵", + "blue_heart": "💙", + "blue_square": "🟦", + "boar": "🐗", + "bomb": "💣", + "bone": "🦴", + "bookmark": "🔖", + "bookmark_tabs": "📑", + "books": "📚", + "bottle_with_popping_cork": "🍾", + "bouquet": "💐", + "bow_and_arrow": "🏹", + "bowl_with_spoon": "🥣", + "bowling": "🎳", + "boxing_glove": "🥊", + "boy": "👦", + "boy_dark_skin_tone": "👦🏿", + "boy_light_skin_tone": "👦🏻", + "boy_medium-dark_skin_tone": "👦🏾", + "boy_medium-light_skin_tone": "👦🏼", + "boy_medium_skin_tone": "👦🏽", + "brain": "🧠", + "bread": "🍞", + "breast-feeding": "🤱", + "breast-feeding_dark_skin_tone": "🤱🏿", + "breast-feeding_light_skin_tone": "🤱🏻", + "breast-feeding_medium-dark_skin_tone": "🤱🏾", + "breast-feeding_medium-light_skin_tone": "🤱🏼", + "breast-feeding_medium_skin_tone": "🤱🏽", + "brick": "🧱", + "bride_with_veil": "👰", + "bride_with_veil_dark_skin_tone": "👰🏿", + "bride_with_veil_light_skin_tone": "👰🏻", + "bride_with_veil_medium-dark_skin_tone": "👰🏾", + "bride_with_veil_medium-light_skin_tone": "👰🏼", + "bride_with_veil_medium_skin_tone": "👰🏽", + "bridge_at_night": "🌉", + "briefcase": "💼", + "briefs": "🩲", + "bright_button": "🔆", + "broccoli": "🥦", + "broken_heart": "💔", + "broom": "🧹", + "brown_circle": "🟤", + "brown_heart": "🤎", + "brown_square": "🟫", + "bug": "🐛", + "building_construction": "🏗", + "bullet_train": "🚅", + "burrito": "🌯", + "bus": "🚌", + "bus_stop": "🚏", + "bust_in_silhouette": "👤", + "busts_in_silhouette": "👥", + "butter": "🧈", + "butterfly": "🦋", + "cactus": "🌵", + "calendar": "📆", + "call_me_hand": "🤙", + "call_me_hand_dark_skin_tone": "🤙🏿", + "call_me_hand_light_skin_tone": "🤙🏻", + "call_me_hand_medium-dark_skin_tone": "🤙🏾", + "call_me_hand_medium-light_skin_tone": "🤙🏼", + "call_me_hand_medium_skin_tone": "🤙🏽", + "camel": "🐫", + "camera": "📷", + "camera_with_flash": "📸", + "camping": "🏕", + "candle": "🕯", + "candy": "🍬", + "canned_food": "🥫", + "canoe": "🛶", + "card_file_box": "🗃", + "card_index": "📇", + "card_index_dividers": "🗂", + "carousel_horse": "🎠", + "carp_streamer": "🎏", + "carrot": "🥕", + "castle": "🏰", + "cat": "🐱", + "cat_face": "🐱", + "cat_face_with_tears_of_joy": "😹", + "cat_face_with_wry_smile": "😼", + "chains": "⛓", + "chair": "🪑", + "chart_decreasing": "📉", + "chart_increasing": "📈", + "chart_increasing_with_yen": "💹", + "cheese_wedge": "🧀", + "chequered_flag": "🏁", + "cherries": "🍒", + "cherry_blossom": "🌸", + "chess_pawn": "♟", + "chestnut": "🌰", + "chicken": "🐔", + "child": "🧒", + "child_dark_skin_tone": "🧒🏿", + "child_light_skin_tone": "🧒🏻", + "child_medium-dark_skin_tone": "🧒🏾", + "child_medium-light_skin_tone": "🧒🏼", + "child_medium_skin_tone": "🧒🏽", + "children_crossing": "🚸", + "chipmunk": "🐿", + "chocolate_bar": "🍫", + "chopsticks": "🥢", + "church": "⛪", + "cigarette": "🚬", + "cinema": "🎦", + "circled_m": "Ⓜ", + "circus_tent": "🎪", + "cityscape": "🏙", + "cityscape_at_dusk": "🌆", + "clamp": "🗜", + "clapper_board": "🎬", + "clapping_hands": "👏", + "clapping_hands_dark_skin_tone": "👏🏿", + "clapping_hands_light_skin_tone": "👏🏻", + "clapping_hands_medium-dark_skin_tone": "👏🏾", + "clapping_hands_medium-light_skin_tone": "👏🏼", + "clapping_hands_medium_skin_tone": "👏🏽", + "classical_building": "🏛", + "clinking_beer_mugs": "🍻", + "clinking_glasses": "🥂", + "clipboard": "📋", + "clockwise_vertical_arrows": "🔃", + "closed_book": "📕", + "closed_mailbox_with_lowered_flag": "📪", + "closed_mailbox_with_raised_flag": "📫", + "closed_umbrella": "🌂", + "cloud": "☁", + "cloud_with_lightning": "🌩", + "cloud_with_lightning_and_rain": "⛈", + "cloud_with_rain": "🌧", + "cloud_with_snow": "🌨", + "clown_face": "🤡", + "club_suit": "♣", + "clutch_bag": "👝", + "coat": "🧥", + "cocktail_glass": "🍸", + "coconut": "🥥", + "coffin": "⚰", + "cold_face": "🥶", + "collision": "💥", + "comet": "☄", + "compass": "🧭", + "computer_disk": "💽", + "computer_mouse": "🖱", + "confetti_ball": "🎊", + "confounded_face": "😖", + "confused_face": "😕", + "construction": "🚧", + "construction_worker": "👷", + "construction_worker_dark_skin_tone": "👷🏿", + "construction_worker_light_skin_tone": "👷🏻", + "construction_worker_medium-dark_skin_tone": "👷🏾", + "construction_worker_medium-light_skin_tone": "👷🏼", + "construction_worker_medium_skin_tone": "👷🏽", + "control_knobs": "🎛", + "convenience_store": "🏪", + "cooked_rice": "🍚", + "cookie": "🍪", + "cooking": "🍳", + "copyright": "©", + "couch_and_lamp": "🛋", + "counterclockwise_arrows_button": "🔄", + "couple_with_heart": "💑", + "couple_with_heart_man_man": "👨\u200d❤️\u200d👨", + "couple_with_heart_woman_man": "👩\u200d❤️\u200d👨", + "couple_with_heart_woman_woman": "👩\u200d❤️\u200d👩", + "cow": "🐮", + "cow_face": "🐮", + "cowboy_hat_face": "🤠", + "crab": "🦀", + "crayon": "🖍", + "credit_card": "💳", + "crescent_moon": "🌙", + "cricket": "🦗", + "cricket_game": "🏏", + "crocodile": "🐊", + "croissant": "🥐", + "cross_mark": "❌", + "cross_mark_button": "❎", + "crossed_fingers": "🤞", + "crossed_fingers_dark_skin_tone": "🤞🏿", + "crossed_fingers_light_skin_tone": "🤞🏻", + "crossed_fingers_medium-dark_skin_tone": "🤞🏾", + "crossed_fingers_medium-light_skin_tone": "🤞🏼", + "crossed_fingers_medium_skin_tone": "🤞🏽", + "crossed_flags": "🎌", + "crossed_swords": "⚔", + "crown": "👑", + "crying_cat_face": "😿", + "crying_face": "😢", + "crystal_ball": "🔮", + "cucumber": "🥒", + "cupcake": "🧁", + "cup_with_straw": "🥤", + "curling_stone": "🥌", + "curly_hair": "🦱", + "curly-haired_man": "👨\u200d🦱", + "curly-haired_woman": "👩\u200d🦱", + "curly_loop": "➰", + "currency_exchange": "💱", + "curry_rice": "🍛", + "custard": "🍮", + "customs": "🛃", + "cut_of_meat": "🥩", + "cyclone": "🌀", + "dagger": "🗡", + "dango": "🍡", + "dashing_away": "💨", + "deaf_person": "🧏", + "deciduous_tree": "🌳", + "deer": "🦌", + "delivery_truck": "🚚", + "department_store": "🏬", + "derelict_house": "🏚", + "desert": "🏜", + "desert_island": "🏝", + "desktop_computer": "🖥", + "detective": "🕵", + "detective_dark_skin_tone": "🕵🏿", + "detective_light_skin_tone": "🕵🏻", + "detective_medium-dark_skin_tone": "🕵🏾", + "detective_medium-light_skin_tone": "🕵🏼", + "detective_medium_skin_tone": "🕵🏽", + "diamond_suit": "♦", + "diamond_with_a_dot": "💠", + "dim_button": "🔅", + "direct_hit": "🎯", + "disappointed_face": "😞", + "diving_mask": "🤿", + "diya_lamp": "🪔", + "dizzy": "💫", + "dizzy_face": "😵", + "dna": "🧬", + "dog": "🐶", + "dog_face": "🐶", + "dollar_banknote": "💵", + "dolphin": "🐬", + "door": "🚪", + "dotted_six-pointed_star": "🔯", + "double_curly_loop": "➿", + "double_exclamation_mark": "‼", + "doughnut": "🍩", + "dove": "🕊", + "down-left_arrow": "↙", + "down-right_arrow": "↘", + "down_arrow": "⬇", + "downcast_face_with_sweat": "😓", + "downwards_button": "🔽", + "dragon": "🐉", + "dragon_face": "🐲", + "dress": "👗", + "drooling_face": "🤤", + "drop_of_blood": "🩸", + "droplet": "💧", + "drum": "🥁", + "duck": "🦆", + "dumpling": "🥟", + "dvd": "📀", + "e-mail": "📧", + "eagle": "🦅", + "ear": "👂", + "ear_dark_skin_tone": "👂🏿", + "ear_light_skin_tone": "👂🏻", + "ear_medium-dark_skin_tone": "👂🏾", + "ear_medium-light_skin_tone": "👂🏼", + "ear_medium_skin_tone": "👂🏽", + "ear_of_corn": "🌽", + "ear_with_hearing_aid": "🦻", + "egg": "🍳", + "eggplant": "🍆", + "eight-pointed_star": "✴", + "eight-spoked_asterisk": "✳", + "eight-thirty": "🕣", + "eight_o’clock": "🕗", + "eject_button": "⏏", + "electric_plug": "🔌", + "elephant": "🐘", + "eleven-thirty": "🕦", + "eleven_o’clock": "🕚", + "elf": "🧝", + "elf_dark_skin_tone": "🧝🏿", + "elf_light_skin_tone": "🧝🏻", + "elf_medium-dark_skin_tone": "🧝🏾", + "elf_medium-light_skin_tone": "🧝🏼", + "elf_medium_skin_tone": "🧝🏽", + "envelope": "✉", + "envelope_with_arrow": "📩", + "euro_banknote": "💶", + "evergreen_tree": "🌲", + "ewe": "🐑", + "exclamation_mark": "❗", + "exclamation_question_mark": "⁉", + "exploding_head": "🤯", + "expressionless_face": "😑", + "eye": "👁", + "eye_in_speech_bubble": "👁️\u200d🗨️", + "eyes": "👀", + "face_blowing_a_kiss": "😘", + "face_savoring_food": "😋", + "face_screaming_in_fear": "😱", + "face_vomiting": "🤮", + "face_with_hand_over_mouth": "🤭", + "face_with_head-bandage": "🤕", + "face_with_medical_mask": "😷", + "face_with_monocle": "🧐", + "face_with_open_mouth": "😮", + "face_with_raised_eyebrow": "🤨", + "face_with_rolling_eyes": "🙄", + "face_with_steam_from_nose": "😤", + "face_with_symbols_on_mouth": "🤬", + "face_with_tears_of_joy": "😂", + "face_with_thermometer": "🤒", + "face_with_tongue": "😛", + "face_without_mouth": "😶", + "factory": "🏭", + "fairy": "🧚", + "fairy_dark_skin_tone": "🧚🏿", + "fairy_light_skin_tone": "🧚🏻", + "fairy_medium-dark_skin_tone": "🧚🏾", + "fairy_medium-light_skin_tone": "🧚🏼", + "fairy_medium_skin_tone": "🧚🏽", + "falafel": "🧆", + "fallen_leaf": "🍂", + "family": "👪", + "family_man_boy": "👨\u200d👦", + "family_man_boy_boy": "👨\u200d👦\u200d👦", + "family_man_girl": "👨\u200d👧", + "family_man_girl_boy": "👨\u200d👧\u200d👦", + "family_man_girl_girl": "👨\u200d👧\u200d👧", + "family_man_man_boy": "👨\u200d👨\u200d👦", + "family_man_man_boy_boy": "👨\u200d👨\u200d👦\u200d👦", + "family_man_man_girl": "👨\u200d👨\u200d👧", + "family_man_man_girl_boy": "👨\u200d👨\u200d👧\u200d👦", + "family_man_man_girl_girl": "👨\u200d👨\u200d👧\u200d👧", + "family_man_woman_boy": "👨\u200d👩\u200d👦", + "family_man_woman_boy_boy": "👨\u200d👩\u200d👦\u200d👦", + "family_man_woman_girl": "👨\u200d👩\u200d👧", + "family_man_woman_girl_boy": "👨\u200d👩\u200d👧\u200d👦", + "family_man_woman_girl_girl": "👨\u200d👩\u200d👧\u200d👧", + "family_woman_boy": "👩\u200d👦", + "family_woman_boy_boy": "👩\u200d👦\u200d👦", + "family_woman_girl": "👩\u200d👧", + "family_woman_girl_boy": "👩\u200d👧\u200d👦", + "family_woman_girl_girl": "👩\u200d👧\u200d👧", + "family_woman_woman_boy": "👩\u200d👩\u200d👦", + "family_woman_woman_boy_boy": "👩\u200d👩\u200d👦\u200d👦", + "family_woman_woman_girl": "👩\u200d👩\u200d👧", + "family_woman_woman_girl_boy": "👩\u200d👩\u200d👧\u200d👦", + "family_woman_woman_girl_girl": "👩\u200d👩\u200d👧\u200d👧", + "fast-forward_button": "⏩", + "fast_down_button": "⏬", + "fast_reverse_button": "⏪", + "fast_up_button": "⏫", + "fax_machine": "📠", + "fearful_face": "😨", + "female_sign": "♀", + "ferris_wheel": "🎡", + "ferry": "⛴", + "field_hockey": "🏑", + "file_cabinet": "🗄", + "file_folder": "📁", + "film_frames": "🎞", + "film_projector": "📽", + "fire": "🔥", + "fire_extinguisher": "🧯", + "firecracker": "🧨", + "fire_engine": "🚒", + "fireworks": "🎆", + "first_quarter_moon": "🌓", + "first_quarter_moon_face": "🌛", + "fish": "🐟", + "fish_cake_with_swirl": "🍥", + "fishing_pole": "🎣", + "five-thirty": "🕠", + "five_o’clock": "🕔", + "flag_in_hole": "⛳", + "flamingo": "🦩", + "flashlight": "🔦", + "flat_shoe": "🥿", + "fleur-de-lis": "⚜", + "flexed_biceps": "💪", + "flexed_biceps_dark_skin_tone": "💪🏿", + "flexed_biceps_light_skin_tone": "💪🏻", + "flexed_biceps_medium-dark_skin_tone": "💪🏾", + "flexed_biceps_medium-light_skin_tone": "💪🏼", + "flexed_biceps_medium_skin_tone": "💪🏽", + "floppy_disk": "💾", + "flower_playing_cards": "🎴", + "flushed_face": "😳", + "flying_disc": "🥏", + "flying_saucer": "🛸", + "fog": "🌫", + "foggy": "🌁", + "folded_hands": "🙏", + "folded_hands_dark_skin_tone": "🙏🏿", + "folded_hands_light_skin_tone": "🙏🏻", + "folded_hands_medium-dark_skin_tone": "🙏🏾", + "folded_hands_medium-light_skin_tone": "🙏🏼", + "folded_hands_medium_skin_tone": "🙏🏽", + "foot": "🦶", + "footprints": "👣", + "fork_and_knife": "🍴", + "fork_and_knife_with_plate": "🍽", + "fortune_cookie": "🥠", + "fountain": "⛲", + "fountain_pen": "🖋", + "four-thirty": "🕟", + "four_leaf_clover": "🍀", + "four_o’clock": "🕓", + "fox_face": "🦊", + "framed_picture": "🖼", + "french_fries": "🍟", + "fried_shrimp": "🍤", + "frog_face": "🐸", + "front-facing_baby_chick": "🐥", + "frowning_face": "☹", + "frowning_face_with_open_mouth": "😦", + "fuel_pump": "⛽", + "full_moon": "🌕", + "full_moon_face": "🌝", + "funeral_urn": "⚱", + "game_die": "🎲", + "garlic": "🧄", + "gear": "⚙", + "gem_stone": "💎", + "genie": "🧞", + "ghost": "👻", + "giraffe": "🦒", + "girl": "👧", + "girl_dark_skin_tone": "👧🏿", + "girl_light_skin_tone": "👧🏻", + "girl_medium-dark_skin_tone": "👧🏾", + "girl_medium-light_skin_tone": "👧🏼", + "girl_medium_skin_tone": "👧🏽", + "glass_of_milk": "🥛", + "glasses": "👓", + "globe_showing_americas": "🌎", + "globe_showing_asia-australia": "🌏", + "globe_showing_europe-africa": "🌍", + "globe_with_meridians": "🌐", + "gloves": "🧤", + "glowing_star": "🌟", + "goal_net": "🥅", + "goat": "🐐", + "goblin": "👺", + "goggles": "🥽", + "gorilla": "🦍", + "graduation_cap": "🎓", + "grapes": "🍇", + "green_apple": "🍏", + "green_book": "📗", + "green_circle": "🟢", + "green_heart": "💚", + "green_salad": "🥗", + "green_square": "🟩", + "grimacing_face": "😬", + "grinning_cat_face": "😺", + "grinning_cat_face_with_smiling_eyes": "😸", + "grinning_face": "😀", + "grinning_face_with_big_eyes": "😃", + "grinning_face_with_smiling_eyes": "😄", + "grinning_face_with_sweat": "😅", + "grinning_squinting_face": "😆", + "growing_heart": "💗", + "guard": "💂", + "guard_dark_skin_tone": "💂🏿", + "guard_light_skin_tone": "💂🏻", + "guard_medium-dark_skin_tone": "💂🏾", + "guard_medium-light_skin_tone": "💂🏼", + "guard_medium_skin_tone": "💂🏽", + "guide_dog": "🦮", + "guitar": "🎸", + "hamburger": "🍔", + "hammer": "🔨", + "hammer_and_pick": "⚒", + "hammer_and_wrench": "🛠", + "hamster_face": "🐹", + "hand_with_fingers_splayed": "🖐", + "hand_with_fingers_splayed_dark_skin_tone": "🖐🏿", + "hand_with_fingers_splayed_light_skin_tone": "🖐🏻", + "hand_with_fingers_splayed_medium-dark_skin_tone": "🖐🏾", + "hand_with_fingers_splayed_medium-light_skin_tone": "🖐🏼", + "hand_with_fingers_splayed_medium_skin_tone": "🖐🏽", + "handbag": "👜", + "handshake": "🤝", + "hatching_chick": "🐣", + "headphone": "🎧", + "hear-no-evil_monkey": "🙉", + "heart_decoration": "💟", + "heart_suit": "♥", + "heart_with_arrow": "💘", + "heart_with_ribbon": "💝", + "heavy_check_mark": "✔", + "heavy_division_sign": "➗", + "heavy_dollar_sign": "💲", + "heavy_heart_exclamation": "❣", + "heavy_large_circle": "⭕", + "heavy_minus_sign": "➖", + "heavy_multiplication_x": "✖", + "heavy_plus_sign": "➕", + "hedgehog": "🦔", + "helicopter": "🚁", + "herb": "🌿", + "hibiscus": "🌺", + "high-heeled_shoe": "👠", + "high-speed_train": "🚄", + "high_voltage": "⚡", + "hiking_boot": "🥾", + "hindu_temple": "🛕", + "hippopotamus": "🦛", + "hole": "🕳", + "honey_pot": "🍯", + "honeybee": "🐝", + "horizontal_traffic_light": "🚥", + "horse": "🐴", + "horse_face": "🐴", + "horse_racing": "🏇", + "horse_racing_dark_skin_tone": "🏇🏿", + "horse_racing_light_skin_tone": "🏇🏻", + "horse_racing_medium-dark_skin_tone": "🏇🏾", + "horse_racing_medium-light_skin_tone": "🏇🏼", + "horse_racing_medium_skin_tone": "🏇🏽", + "hospital": "🏥", + "hot_beverage": "☕", + "hot_dog": "🌭", + "hot_face": "🥵", + "hot_pepper": "🌶", + "hot_springs": "♨", + "hotel": "🏨", + "hourglass_done": "⌛", + "hourglass_not_done": "⏳", + "house": "🏠", + "house_with_garden": "🏡", + "houses": "🏘", + "hugging_face": "🤗", + "hundred_points": "💯", + "hushed_face": "😯", + "ice": "🧊", + "ice_cream": "🍨", + "ice_hockey": "🏒", + "ice_skate": "⛸", + "inbox_tray": "📥", + "incoming_envelope": "📨", + "index_pointing_up": "☝", + "index_pointing_up_dark_skin_tone": "☝🏿", + "index_pointing_up_light_skin_tone": "☝🏻", + "index_pointing_up_medium-dark_skin_tone": "☝🏾", + "index_pointing_up_medium-light_skin_tone": "☝🏼", + "index_pointing_up_medium_skin_tone": "☝🏽", + "infinity": "♾", + "information": "ℹ", + "input_latin_letters": "🔤", + "input_latin_lowercase": "🔡", + "input_latin_uppercase": "🔠", + "input_numbers": "🔢", + "input_symbols": "🔣", + "jack-o-lantern": "🎃", + "jeans": "👖", + "jigsaw": "🧩", + "joker": "🃏", + "joystick": "🕹", + "kaaba": "🕋", + "kangaroo": "🦘", + "key": "🔑", + "keyboard": "⌨", + "keycap_#": "#️⃣", + "keycap_*": "*️⃣", + "keycap_0": "0️⃣", + "keycap_1": "1️⃣", + "keycap_10": "🔟", + "keycap_2": "2️⃣", + "keycap_3": "3️⃣", + "keycap_4": "4️⃣", + "keycap_5": "5️⃣", + "keycap_6": "6️⃣", + "keycap_7": "7️⃣", + "keycap_8": "8️⃣", + "keycap_9": "9️⃣", + "kick_scooter": "🛴", + "kimono": "👘", + "kiss": "💋", + "kiss_man_man": "👨\u200d❤️\u200d💋\u200d👨", + "kiss_mark": "💋", + "kiss_woman_man": "👩\u200d❤️\u200d💋\u200d👨", + "kiss_woman_woman": "👩\u200d❤️\u200d💋\u200d👩", + "kissing_cat_face": "😽", + "kissing_face": "😗", + "kissing_face_with_closed_eyes": "😚", + "kissing_face_with_smiling_eyes": "😙", + "kitchen_knife": "🔪", + "kite": "🪁", + "kiwi_fruit": "🥝", + "koala": "🐨", + "lab_coat": "🥼", + "label": "🏷", + "lacrosse": "🥍", + "lady_beetle": "🐞", + "laptop_computer": "💻", + "large_blue_diamond": "🔷", + "large_orange_diamond": "🔶", + "last_quarter_moon": "🌗", + "last_quarter_moon_face": "🌜", + "last_track_button": "⏮", + "latin_cross": "✝", + "leaf_fluttering_in_wind": "🍃", + "leafy_green": "🥬", + "ledger": "📒", + "left-facing_fist": "🤛", + "left-facing_fist_dark_skin_tone": "🤛🏿", + "left-facing_fist_light_skin_tone": "🤛🏻", + "left-facing_fist_medium-dark_skin_tone": "🤛🏾", + "left-facing_fist_medium-light_skin_tone": "🤛🏼", + "left-facing_fist_medium_skin_tone": "🤛🏽", + "left-right_arrow": "↔", + "left_arrow": "⬅", + "left_arrow_curving_right": "↪", + "left_luggage": "🛅", + "left_speech_bubble": "🗨", + "leg": "🦵", + "lemon": "🍋", + "leopard": "🐆", + "level_slider": "🎚", + "light_bulb": "💡", + "light_rail": "🚈", + "link": "🔗", + "linked_paperclips": "🖇", + "lion_face": "🦁", + "lipstick": "💄", + "litter_in_bin_sign": "🚮", + "lizard": "🦎", + "llama": "🦙", + "lobster": "🦞", + "locked": "🔒", + "locked_with_key": "🔐", + "locked_with_pen": "🔏", + "locomotive": "🚂", + "lollipop": "🍭", + "lotion_bottle": "🧴", + "loudly_crying_face": "😭", + "loudspeaker": "📢", + "love-you_gesture": "🤟", + "love-you_gesture_dark_skin_tone": "🤟🏿", + "love-you_gesture_light_skin_tone": "🤟🏻", + "love-you_gesture_medium-dark_skin_tone": "🤟🏾", + "love-you_gesture_medium-light_skin_tone": "🤟🏼", + "love-you_gesture_medium_skin_tone": "🤟🏽", + "love_hotel": "🏩", + "love_letter": "💌", + "luggage": "🧳", + "lying_face": "🤥", + "mage": "🧙", + "mage_dark_skin_tone": "🧙🏿", + "mage_light_skin_tone": "🧙🏻", + "mage_medium-dark_skin_tone": "🧙🏾", + "mage_medium-light_skin_tone": "🧙🏼", + "mage_medium_skin_tone": "🧙🏽", + "magnet": "🧲", + "magnifying_glass_tilted_left": "🔍", + "magnifying_glass_tilted_right": "🔎", + "mahjong_red_dragon": "🀄", + "male_sign": "♂", + "man": "👨", + "man_and_woman_holding_hands": "👫", + "man_artist": "👨\u200d🎨", + "man_artist_dark_skin_tone": "👨🏿\u200d🎨", + "man_artist_light_skin_tone": "👨🏻\u200d🎨", + "man_artist_medium-dark_skin_tone": "👨🏾\u200d🎨", + "man_artist_medium-light_skin_tone": "👨🏼\u200d🎨", + "man_artist_medium_skin_tone": "👨🏽\u200d🎨", + "man_astronaut": "👨\u200d🚀", + "man_astronaut_dark_skin_tone": "👨🏿\u200d🚀", + "man_astronaut_light_skin_tone": "👨🏻\u200d🚀", + "man_astronaut_medium-dark_skin_tone": "👨🏾\u200d🚀", + "man_astronaut_medium-light_skin_tone": "👨🏼\u200d🚀", + "man_astronaut_medium_skin_tone": "👨🏽\u200d🚀", + "man_biking": "🚴\u200d♂️", + "man_biking_dark_skin_tone": "🚴🏿\u200d♂️", + "man_biking_light_skin_tone": "🚴🏻\u200d♂️", + "man_biking_medium-dark_skin_tone": "🚴🏾\u200d♂️", + "man_biking_medium-light_skin_tone": "🚴🏼\u200d♂️", + "man_biking_medium_skin_tone": "🚴🏽\u200d♂️", + "man_bouncing_ball": "⛹️\u200d♂️", + "man_bouncing_ball_dark_skin_tone": "⛹🏿\u200d♂️", + "man_bouncing_ball_light_skin_tone": "⛹🏻\u200d♂️", + "man_bouncing_ball_medium-dark_skin_tone": "⛹🏾\u200d♂️", + "man_bouncing_ball_medium-light_skin_tone": "⛹🏼\u200d♂️", + "man_bouncing_ball_medium_skin_tone": "⛹🏽\u200d♂️", + "man_bowing": "🙇\u200d♂️", + "man_bowing_dark_skin_tone": "🙇🏿\u200d♂️", + "man_bowing_light_skin_tone": "🙇🏻\u200d♂️", + "man_bowing_medium-dark_skin_tone": "🙇🏾\u200d♂️", + "man_bowing_medium-light_skin_tone": "🙇🏼\u200d♂️", + "man_bowing_medium_skin_tone": "🙇🏽\u200d♂️", + "man_cartwheeling": "🤸\u200d♂️", + "man_cartwheeling_dark_skin_tone": "🤸🏿\u200d♂️", + "man_cartwheeling_light_skin_tone": "🤸🏻\u200d♂️", + "man_cartwheeling_medium-dark_skin_tone": "🤸🏾\u200d♂️", + "man_cartwheeling_medium-light_skin_tone": "🤸🏼\u200d♂️", + "man_cartwheeling_medium_skin_tone": "🤸🏽\u200d♂️", + "man_climbing": "🧗\u200d♂️", + "man_climbing_dark_skin_tone": "🧗🏿\u200d♂️", + "man_climbing_light_skin_tone": "🧗🏻\u200d♂️", + "man_climbing_medium-dark_skin_tone": "🧗🏾\u200d♂️", + "man_climbing_medium-light_skin_tone": "🧗🏼\u200d♂️", + "man_climbing_medium_skin_tone": "🧗🏽\u200d♂️", + "man_construction_worker": "👷\u200d♂️", + "man_construction_worker_dark_skin_tone": "👷🏿\u200d♂️", + "man_construction_worker_light_skin_tone": "👷🏻\u200d♂️", + "man_construction_worker_medium-dark_skin_tone": "👷🏾\u200d♂️", + "man_construction_worker_medium-light_skin_tone": "👷🏼\u200d♂️", + "man_construction_worker_medium_skin_tone": "👷🏽\u200d♂️", + "man_cook": "👨\u200d🍳", + "man_cook_dark_skin_tone": "👨🏿\u200d🍳", + "man_cook_light_skin_tone": "👨🏻\u200d🍳", + "man_cook_medium-dark_skin_tone": "👨🏾\u200d🍳", + "man_cook_medium-light_skin_tone": "👨🏼\u200d🍳", + "man_cook_medium_skin_tone": "👨🏽\u200d🍳", + "man_dancing": "🕺", + "man_dancing_dark_skin_tone": "🕺🏿", + "man_dancing_light_skin_tone": "🕺🏻", + "man_dancing_medium-dark_skin_tone": "🕺🏾", + "man_dancing_medium-light_skin_tone": "🕺🏼", + "man_dancing_medium_skin_tone": "🕺🏽", + "man_dark_skin_tone": "👨🏿", + "man_detective": "🕵️\u200d♂️", + "man_detective_dark_skin_tone": "🕵🏿\u200d♂️", + "man_detective_light_skin_tone": "🕵🏻\u200d♂️", + "man_detective_medium-dark_skin_tone": "🕵🏾\u200d♂️", + "man_detective_medium-light_skin_tone": "🕵🏼\u200d♂️", + "man_detective_medium_skin_tone": "🕵🏽\u200d♂️", + "man_elf": "🧝\u200d♂️", + "man_elf_dark_skin_tone": "🧝🏿\u200d♂️", + "man_elf_light_skin_tone": "🧝🏻\u200d♂️", + "man_elf_medium-dark_skin_tone": "🧝🏾\u200d♂️", + "man_elf_medium-light_skin_tone": "🧝🏼\u200d♂️", + "man_elf_medium_skin_tone": "🧝🏽\u200d♂️", + "man_facepalming": "🤦\u200d♂️", + "man_facepalming_dark_skin_tone": "🤦🏿\u200d♂️", + "man_facepalming_light_skin_tone": "🤦🏻\u200d♂️", + "man_facepalming_medium-dark_skin_tone": "🤦🏾\u200d♂️", + "man_facepalming_medium-light_skin_tone": "🤦🏼\u200d♂️", + "man_facepalming_medium_skin_tone": "🤦🏽\u200d♂️", + "man_factory_worker": "👨\u200d🏭", + "man_factory_worker_dark_skin_tone": "👨🏿\u200d🏭", + "man_factory_worker_light_skin_tone": "👨🏻\u200d🏭", + "man_factory_worker_medium-dark_skin_tone": "👨🏾\u200d🏭", + "man_factory_worker_medium-light_skin_tone": "👨🏼\u200d🏭", + "man_factory_worker_medium_skin_tone": "👨🏽\u200d🏭", + "man_fairy": "🧚\u200d♂️", + "man_fairy_dark_skin_tone": "🧚🏿\u200d♂️", + "man_fairy_light_skin_tone": "🧚🏻\u200d♂️", + "man_fairy_medium-dark_skin_tone": "🧚🏾\u200d♂️", + "man_fairy_medium-light_skin_tone": "🧚🏼\u200d♂️", + "man_fairy_medium_skin_tone": "🧚🏽\u200d♂️", + "man_farmer": "👨\u200d🌾", + "man_farmer_dark_skin_tone": "👨🏿\u200d🌾", + "man_farmer_light_skin_tone": "👨🏻\u200d🌾", + "man_farmer_medium-dark_skin_tone": "👨🏾\u200d🌾", + "man_farmer_medium-light_skin_tone": "👨🏼\u200d🌾", + "man_farmer_medium_skin_tone": "👨🏽\u200d🌾", + "man_firefighter": "👨\u200d🚒", + "man_firefighter_dark_skin_tone": "👨🏿\u200d🚒", + "man_firefighter_light_skin_tone": "👨🏻\u200d🚒", + "man_firefighter_medium-dark_skin_tone": "👨🏾\u200d🚒", + "man_firefighter_medium-light_skin_tone": "👨🏼\u200d🚒", + "man_firefighter_medium_skin_tone": "👨🏽\u200d🚒", + "man_frowning": "🙍\u200d♂️", + "man_frowning_dark_skin_tone": "🙍🏿\u200d♂️", + "man_frowning_light_skin_tone": "🙍🏻\u200d♂️", + "man_frowning_medium-dark_skin_tone": "🙍🏾\u200d♂️", + "man_frowning_medium-light_skin_tone": "🙍🏼\u200d♂️", + "man_frowning_medium_skin_tone": "🙍🏽\u200d♂️", + "man_genie": "🧞\u200d♂️", + "man_gesturing_no": "🙅\u200d♂️", + "man_gesturing_no_dark_skin_tone": "🙅🏿\u200d♂️", + "man_gesturing_no_light_skin_tone": "🙅🏻\u200d♂️", + "man_gesturing_no_medium-dark_skin_tone": "🙅🏾\u200d♂️", + "man_gesturing_no_medium-light_skin_tone": "🙅🏼\u200d♂️", + "man_gesturing_no_medium_skin_tone": "🙅🏽\u200d♂️", + "man_gesturing_ok": "🙆\u200d♂️", + "man_gesturing_ok_dark_skin_tone": "🙆🏿\u200d♂️", + "man_gesturing_ok_light_skin_tone": "🙆🏻\u200d♂️", + "man_gesturing_ok_medium-dark_skin_tone": "🙆🏾\u200d♂️", + "man_gesturing_ok_medium-light_skin_tone": "🙆🏼\u200d♂️", + "man_gesturing_ok_medium_skin_tone": "🙆🏽\u200d♂️", + "man_getting_haircut": "💇\u200d♂️", + "man_getting_haircut_dark_skin_tone": "💇🏿\u200d♂️", + "man_getting_haircut_light_skin_tone": "💇🏻\u200d♂️", + "man_getting_haircut_medium-dark_skin_tone": "💇🏾\u200d♂️", + "man_getting_haircut_medium-light_skin_tone": "💇🏼\u200d♂️", + "man_getting_haircut_medium_skin_tone": "💇🏽\u200d♂️", + "man_getting_massage": "💆\u200d♂️", + "man_getting_massage_dark_skin_tone": "💆🏿\u200d♂️", + "man_getting_massage_light_skin_tone": "💆🏻\u200d♂️", + "man_getting_massage_medium-dark_skin_tone": "💆🏾\u200d♂️", + "man_getting_massage_medium-light_skin_tone": "💆🏼\u200d♂️", + "man_getting_massage_medium_skin_tone": "💆🏽\u200d♂️", + "man_golfing": "🏌️\u200d♂️", + "man_golfing_dark_skin_tone": "🏌🏿\u200d♂️", + "man_golfing_light_skin_tone": "🏌🏻\u200d♂️", + "man_golfing_medium-dark_skin_tone": "🏌🏾\u200d♂️", + "man_golfing_medium-light_skin_tone": "🏌🏼\u200d♂️", + "man_golfing_medium_skin_tone": "🏌🏽\u200d♂️", + "man_guard": "💂\u200d♂️", + "man_guard_dark_skin_tone": "💂🏿\u200d♂️", + "man_guard_light_skin_tone": "💂🏻\u200d♂️", + "man_guard_medium-dark_skin_tone": "💂🏾\u200d♂️", + "man_guard_medium-light_skin_tone": "💂🏼\u200d♂️", + "man_guard_medium_skin_tone": "💂🏽\u200d♂️", + "man_health_worker": "👨\u200d⚕️", + "man_health_worker_dark_skin_tone": "👨🏿\u200d⚕️", + "man_health_worker_light_skin_tone": "👨🏻\u200d⚕️", + "man_health_worker_medium-dark_skin_tone": "👨🏾\u200d⚕️", + "man_health_worker_medium-light_skin_tone": "👨🏼\u200d⚕️", + "man_health_worker_medium_skin_tone": "👨🏽\u200d⚕️", + "man_in_lotus_position": "🧘\u200d♂️", + "man_in_lotus_position_dark_skin_tone": "🧘🏿\u200d♂️", + "man_in_lotus_position_light_skin_tone": "🧘🏻\u200d♂️", + "man_in_lotus_position_medium-dark_skin_tone": "🧘🏾\u200d♂️", + "man_in_lotus_position_medium-light_skin_tone": "🧘🏼\u200d♂️", + "man_in_lotus_position_medium_skin_tone": "🧘🏽\u200d♂️", + "man_in_manual_wheelchair": "👨\u200d🦽", + "man_in_motorized_wheelchair": "👨\u200d🦼", + "man_in_steamy_room": "🧖\u200d♂️", + "man_in_steamy_room_dark_skin_tone": "🧖🏿\u200d♂️", + "man_in_steamy_room_light_skin_tone": "🧖🏻\u200d♂️", + "man_in_steamy_room_medium-dark_skin_tone": "🧖🏾\u200d♂️", + "man_in_steamy_room_medium-light_skin_tone": "🧖🏼\u200d♂️", + "man_in_steamy_room_medium_skin_tone": "🧖🏽\u200d♂️", + "man_in_suit_levitating": "🕴", + "man_in_suit_levitating_dark_skin_tone": "🕴🏿", + "man_in_suit_levitating_light_skin_tone": "🕴🏻", + "man_in_suit_levitating_medium-dark_skin_tone": "🕴🏾", + "man_in_suit_levitating_medium-light_skin_tone": "🕴🏼", + "man_in_suit_levitating_medium_skin_tone": "🕴🏽", + "man_in_tuxedo": "🤵", + "man_in_tuxedo_dark_skin_tone": "🤵🏿", + "man_in_tuxedo_light_skin_tone": "🤵🏻", + "man_in_tuxedo_medium-dark_skin_tone": "🤵🏾", + "man_in_tuxedo_medium-light_skin_tone": "🤵🏼", + "man_in_tuxedo_medium_skin_tone": "🤵🏽", + "man_judge": "👨\u200d⚖️", + "man_judge_dark_skin_tone": "👨🏿\u200d⚖️", + "man_judge_light_skin_tone": "👨🏻\u200d⚖️", + "man_judge_medium-dark_skin_tone": "👨🏾\u200d⚖️", + "man_judge_medium-light_skin_tone": "👨🏼\u200d⚖️", + "man_judge_medium_skin_tone": "👨🏽\u200d⚖️", + "man_juggling": "🤹\u200d♂️", + "man_juggling_dark_skin_tone": "🤹🏿\u200d♂️", + "man_juggling_light_skin_tone": "🤹🏻\u200d♂️", + "man_juggling_medium-dark_skin_tone": "🤹🏾\u200d♂️", + "man_juggling_medium-light_skin_tone": "🤹🏼\u200d♂️", + "man_juggling_medium_skin_tone": "🤹🏽\u200d♂️", + "man_lifting_weights": "🏋️\u200d♂️", + "man_lifting_weights_dark_skin_tone": "🏋🏿\u200d♂️", + "man_lifting_weights_light_skin_tone": "🏋🏻\u200d♂️", + "man_lifting_weights_medium-dark_skin_tone": "🏋🏾\u200d♂️", + "man_lifting_weights_medium-light_skin_tone": "🏋🏼\u200d♂️", + "man_lifting_weights_medium_skin_tone": "🏋🏽\u200d♂️", + "man_light_skin_tone": "👨🏻", + "man_mage": "🧙\u200d♂️", + "man_mage_dark_skin_tone": "🧙🏿\u200d♂️", + "man_mage_light_skin_tone": "🧙🏻\u200d♂️", + "man_mage_medium-dark_skin_tone": "🧙🏾\u200d♂️", + "man_mage_medium-light_skin_tone": "🧙🏼\u200d♂️", + "man_mage_medium_skin_tone": "🧙🏽\u200d♂️", + "man_mechanic": "👨\u200d🔧", + "man_mechanic_dark_skin_tone": "👨🏿\u200d🔧", + "man_mechanic_light_skin_tone": "👨🏻\u200d🔧", + "man_mechanic_medium-dark_skin_tone": "👨🏾\u200d🔧", + "man_mechanic_medium-light_skin_tone": "👨🏼\u200d🔧", + "man_mechanic_medium_skin_tone": "👨🏽\u200d🔧", + "man_medium-dark_skin_tone": "👨🏾", + "man_medium-light_skin_tone": "👨🏼", + "man_medium_skin_tone": "👨🏽", + "man_mountain_biking": "🚵\u200d♂️", + "man_mountain_biking_dark_skin_tone": "🚵🏿\u200d♂️", + "man_mountain_biking_light_skin_tone": "🚵🏻\u200d♂️", + "man_mountain_biking_medium-dark_skin_tone": "🚵🏾\u200d♂️", + "man_mountain_biking_medium-light_skin_tone": "🚵🏼\u200d♂️", + "man_mountain_biking_medium_skin_tone": "🚵🏽\u200d♂️", + "man_office_worker": "👨\u200d💼", + "man_office_worker_dark_skin_tone": "👨🏿\u200d💼", + "man_office_worker_light_skin_tone": "👨🏻\u200d💼", + "man_office_worker_medium-dark_skin_tone": "👨🏾\u200d💼", + "man_office_worker_medium-light_skin_tone": "👨🏼\u200d💼", + "man_office_worker_medium_skin_tone": "👨🏽\u200d💼", + "man_pilot": "👨\u200d✈️", + "man_pilot_dark_skin_tone": "👨🏿\u200d✈️", + "man_pilot_light_skin_tone": "👨🏻\u200d✈️", + "man_pilot_medium-dark_skin_tone": "👨🏾\u200d✈️", + "man_pilot_medium-light_skin_tone": "👨🏼\u200d✈️", + "man_pilot_medium_skin_tone": "👨🏽\u200d✈️", + "man_playing_handball": "🤾\u200d♂️", + "man_playing_handball_dark_skin_tone": "🤾🏿\u200d♂️", + "man_playing_handball_light_skin_tone": "🤾🏻\u200d♂️", + "man_playing_handball_medium-dark_skin_tone": "🤾🏾\u200d♂️", + "man_playing_handball_medium-light_skin_tone": "🤾🏼\u200d♂️", + "man_playing_handball_medium_skin_tone": "🤾🏽\u200d♂️", + "man_playing_water_polo": "🤽\u200d♂️", + "man_playing_water_polo_dark_skin_tone": "🤽🏿\u200d♂️", + "man_playing_water_polo_light_skin_tone": "🤽🏻\u200d♂️", + "man_playing_water_polo_medium-dark_skin_tone": "🤽🏾\u200d♂️", + "man_playing_water_polo_medium-light_skin_tone": "🤽🏼\u200d♂️", + "man_playing_water_polo_medium_skin_tone": "🤽🏽\u200d♂️", + "man_police_officer": "👮\u200d♂️", + "man_police_officer_dark_skin_tone": "👮🏿\u200d♂️", + "man_police_officer_light_skin_tone": "👮🏻\u200d♂️", + "man_police_officer_medium-dark_skin_tone": "👮🏾\u200d♂️", + "man_police_officer_medium-light_skin_tone": "👮🏼\u200d♂️", + "man_police_officer_medium_skin_tone": "👮🏽\u200d♂️", + "man_pouting": "🙎\u200d♂️", + "man_pouting_dark_skin_tone": "🙎🏿\u200d♂️", + "man_pouting_light_skin_tone": "🙎🏻\u200d♂️", + "man_pouting_medium-dark_skin_tone": "🙎🏾\u200d♂️", + "man_pouting_medium-light_skin_tone": "🙎🏼\u200d♂️", + "man_pouting_medium_skin_tone": "🙎🏽\u200d♂️", + "man_raising_hand": "🙋\u200d♂️", + "man_raising_hand_dark_skin_tone": "🙋🏿\u200d♂️", + "man_raising_hand_light_skin_tone": "🙋🏻\u200d♂️", + "man_raising_hand_medium-dark_skin_tone": "🙋🏾\u200d♂️", + "man_raising_hand_medium-light_skin_tone": "🙋🏼\u200d♂️", + "man_raising_hand_medium_skin_tone": "🙋🏽\u200d♂️", + "man_rowing_boat": "🚣\u200d♂️", + "man_rowing_boat_dark_skin_tone": "🚣🏿\u200d♂️", + "man_rowing_boat_light_skin_tone": "🚣🏻\u200d♂️", + "man_rowing_boat_medium-dark_skin_tone": "🚣🏾\u200d♂️", + "man_rowing_boat_medium-light_skin_tone": "🚣🏼\u200d♂️", + "man_rowing_boat_medium_skin_tone": "🚣🏽\u200d♂️", + "man_running": "🏃\u200d♂️", + "man_running_dark_skin_tone": "🏃🏿\u200d♂️", + "man_running_light_skin_tone": "🏃🏻\u200d♂️", + "man_running_medium-dark_skin_tone": "🏃🏾\u200d♂️", + "man_running_medium-light_skin_tone": "🏃🏼\u200d♂️", + "man_running_medium_skin_tone": "🏃🏽\u200d♂️", + "man_scientist": "👨\u200d🔬", + "man_scientist_dark_skin_tone": "👨🏿\u200d🔬", + "man_scientist_light_skin_tone": "👨🏻\u200d🔬", + "man_scientist_medium-dark_skin_tone": "👨🏾\u200d🔬", + "man_scientist_medium-light_skin_tone": "👨🏼\u200d🔬", + "man_scientist_medium_skin_tone": "👨🏽\u200d🔬", + "man_shrugging": "🤷\u200d♂️", + "man_shrugging_dark_skin_tone": "🤷🏿\u200d♂️", + "man_shrugging_light_skin_tone": "🤷🏻\u200d♂️", + "man_shrugging_medium-dark_skin_tone": "🤷🏾\u200d♂️", + "man_shrugging_medium-light_skin_tone": "🤷🏼\u200d♂️", + "man_shrugging_medium_skin_tone": "🤷🏽\u200d♂️", + "man_singer": "👨\u200d🎤", + "man_singer_dark_skin_tone": "👨🏿\u200d🎤", + "man_singer_light_skin_tone": "👨🏻\u200d🎤", + "man_singer_medium-dark_skin_tone": "👨🏾\u200d🎤", + "man_singer_medium-light_skin_tone": "👨🏼\u200d🎤", + "man_singer_medium_skin_tone": "👨🏽\u200d🎤", + "man_student": "👨\u200d🎓", + "man_student_dark_skin_tone": "👨🏿\u200d🎓", + "man_student_light_skin_tone": "👨🏻\u200d🎓", + "man_student_medium-dark_skin_tone": "👨🏾\u200d🎓", + "man_student_medium-light_skin_tone": "👨🏼\u200d🎓", + "man_student_medium_skin_tone": "👨🏽\u200d🎓", + "man_surfing": "🏄\u200d♂️", + "man_surfing_dark_skin_tone": "🏄🏿\u200d♂️", + "man_surfing_light_skin_tone": "🏄🏻\u200d♂️", + "man_surfing_medium-dark_skin_tone": "🏄🏾\u200d♂️", + "man_surfing_medium-light_skin_tone": "🏄🏼\u200d♂️", + "man_surfing_medium_skin_tone": "🏄🏽\u200d♂️", + "man_swimming": "🏊\u200d♂️", + "man_swimming_dark_skin_tone": "🏊🏿\u200d♂️", + "man_swimming_light_skin_tone": "🏊🏻\u200d♂️", + "man_swimming_medium-dark_skin_tone": "🏊🏾\u200d♂️", + "man_swimming_medium-light_skin_tone": "🏊🏼\u200d♂️", + "man_swimming_medium_skin_tone": "🏊🏽\u200d♂️", + "man_teacher": "👨\u200d🏫", + "man_teacher_dark_skin_tone": "👨🏿\u200d🏫", + "man_teacher_light_skin_tone": "👨🏻\u200d🏫", + "man_teacher_medium-dark_skin_tone": "👨🏾\u200d🏫", + "man_teacher_medium-light_skin_tone": "👨🏼\u200d🏫", + "man_teacher_medium_skin_tone": "👨🏽\u200d🏫", + "man_technologist": "👨\u200d💻", + "man_technologist_dark_skin_tone": "👨🏿\u200d💻", + "man_technologist_light_skin_tone": "👨🏻\u200d💻", + "man_technologist_medium-dark_skin_tone": "👨🏾\u200d💻", + "man_technologist_medium-light_skin_tone": "👨🏼\u200d💻", + "man_technologist_medium_skin_tone": "👨🏽\u200d💻", + "man_tipping_hand": "💁\u200d♂️", + "man_tipping_hand_dark_skin_tone": "💁🏿\u200d♂️", + "man_tipping_hand_light_skin_tone": "💁🏻\u200d♂️", + "man_tipping_hand_medium-dark_skin_tone": "💁🏾\u200d♂️", + "man_tipping_hand_medium-light_skin_tone": "💁🏼\u200d♂️", + "man_tipping_hand_medium_skin_tone": "💁🏽\u200d♂️", + "man_vampire": "🧛\u200d♂️", + "man_vampire_dark_skin_tone": "🧛🏿\u200d♂️", + "man_vampire_light_skin_tone": "🧛🏻\u200d♂️", + "man_vampire_medium-dark_skin_tone": "🧛🏾\u200d♂️", + "man_vampire_medium-light_skin_tone": "🧛🏼\u200d♂️", + "man_vampire_medium_skin_tone": "🧛🏽\u200d♂️", + "man_walking": "🚶\u200d♂️", + "man_walking_dark_skin_tone": "🚶🏿\u200d♂️", + "man_walking_light_skin_tone": "🚶🏻\u200d♂️", + "man_walking_medium-dark_skin_tone": "🚶🏾\u200d♂️", + "man_walking_medium-light_skin_tone": "🚶🏼\u200d♂️", + "man_walking_medium_skin_tone": "🚶🏽\u200d♂️", + "man_wearing_turban": "👳\u200d♂️", + "man_wearing_turban_dark_skin_tone": "👳🏿\u200d♂️", + "man_wearing_turban_light_skin_tone": "👳🏻\u200d♂️", + "man_wearing_turban_medium-dark_skin_tone": "👳🏾\u200d♂️", + "man_wearing_turban_medium-light_skin_tone": "👳🏼\u200d♂️", + "man_wearing_turban_medium_skin_tone": "👳🏽\u200d♂️", + "man_with_probing_cane": "👨\u200d🦯", + "man_with_chinese_cap": "👲", + "man_with_chinese_cap_dark_skin_tone": "👲🏿", + "man_with_chinese_cap_light_skin_tone": "👲🏻", + "man_with_chinese_cap_medium-dark_skin_tone": "👲🏾", + "man_with_chinese_cap_medium-light_skin_tone": "👲🏼", + "man_with_chinese_cap_medium_skin_tone": "👲🏽", + "man_zombie": "🧟\u200d♂️", + "mango": "🥭", + "mantelpiece_clock": "🕰", + "manual_wheelchair": "🦽", + "man’s_shoe": "👞", + "map_of_japan": "🗾", + "maple_leaf": "🍁", + "martial_arts_uniform": "🥋", + "mate": "🧉", + "meat_on_bone": "🍖", + "mechanical_arm": "🦾", + "mechanical_leg": "🦿", + "medical_symbol": "⚕", + "megaphone": "📣", + "melon": "🍈", + "memo": "📝", + "men_with_bunny_ears": "👯\u200d♂️", + "men_wrestling": "🤼\u200d♂️", + "menorah": "🕎", + "men’s_room": "🚹", + "mermaid": "🧜\u200d♀️", + "mermaid_dark_skin_tone": "🧜🏿\u200d♀️", + "mermaid_light_skin_tone": "🧜🏻\u200d♀️", + "mermaid_medium-dark_skin_tone": "🧜🏾\u200d♀️", + "mermaid_medium-light_skin_tone": "🧜🏼\u200d♀️", + "mermaid_medium_skin_tone": "🧜🏽\u200d♀️", + "merman": "🧜\u200d♂️", + "merman_dark_skin_tone": "🧜🏿\u200d♂️", + "merman_light_skin_tone": "🧜🏻\u200d♂️", + "merman_medium-dark_skin_tone": "🧜🏾\u200d♂️", + "merman_medium-light_skin_tone": "🧜🏼\u200d♂️", + "merman_medium_skin_tone": "🧜🏽\u200d♂️", + "merperson": "🧜", + "merperson_dark_skin_tone": "🧜🏿", + "merperson_light_skin_tone": "🧜🏻", + "merperson_medium-dark_skin_tone": "🧜🏾", + "merperson_medium-light_skin_tone": "🧜🏼", + "merperson_medium_skin_tone": "🧜🏽", + "metro": "🚇", + "microbe": "🦠", + "microphone": "🎤", + "microscope": "🔬", + "middle_finger": "🖕", + "middle_finger_dark_skin_tone": "🖕🏿", + "middle_finger_light_skin_tone": "🖕🏻", + "middle_finger_medium-dark_skin_tone": "🖕🏾", + "middle_finger_medium-light_skin_tone": "🖕🏼", + "middle_finger_medium_skin_tone": "🖕🏽", + "military_medal": "🎖", + "milky_way": "🌌", + "minibus": "🚐", + "moai": "🗿", + "mobile_phone": "📱", + "mobile_phone_off": "📴", + "mobile_phone_with_arrow": "📲", + "money-mouth_face": "🤑", + "money_bag": "💰", + "money_with_wings": "💸", + "monkey": "🐒", + "monkey_face": "🐵", + "monorail": "🚝", + "moon_cake": "🥮", + "moon_viewing_ceremony": "🎑", + "mosque": "🕌", + "mosquito": "🦟", + "motor_boat": "🛥", + "motor_scooter": "🛵", + "motorcycle": "🏍", + "motorized_wheelchair": "🦼", + "motorway": "🛣", + "mount_fuji": "🗻", + "mountain": "⛰", + "mountain_cableway": "🚠", + "mountain_railway": "🚞", + "mouse": "🐭", + "mouse_face": "🐭", + "mouth": "👄", + "movie_camera": "🎥", + "mushroom": "🍄", + "musical_keyboard": "🎹", + "musical_note": "🎵", + "musical_notes": "🎶", + "musical_score": "🎼", + "muted_speaker": "🔇", + "nail_polish": "💅", + "nail_polish_dark_skin_tone": "💅🏿", + "nail_polish_light_skin_tone": "💅🏻", + "nail_polish_medium-dark_skin_tone": "💅🏾", + "nail_polish_medium-light_skin_tone": "💅🏼", + "nail_polish_medium_skin_tone": "💅🏽", + "name_badge": "📛", + "national_park": "🏞", + "nauseated_face": "🤢", + "nazar_amulet": "🧿", + "necktie": "👔", + "nerd_face": "🤓", + "neutral_face": "😐", + "new_moon": "🌑", + "new_moon_face": "🌚", + "newspaper": "📰", + "next_track_button": "⏭", + "night_with_stars": "🌃", + "nine-thirty": "🕤", + "nine_o’clock": "🕘", + "no_bicycles": "🚳", + "no_entry": "⛔", + "no_littering": "🚯", + "no_mobile_phones": "📵", + "no_one_under_eighteen": "🔞", + "no_pedestrians": "🚷", + "no_smoking": "🚭", + "non-potable_water": "🚱", + "nose": "👃", + "nose_dark_skin_tone": "👃🏿", + "nose_light_skin_tone": "👃🏻", + "nose_medium-dark_skin_tone": "👃🏾", + "nose_medium-light_skin_tone": "👃🏼", + "nose_medium_skin_tone": "👃🏽", + "notebook": "📓", + "notebook_with_decorative_cover": "📔", + "nut_and_bolt": "🔩", + "octopus": "🐙", + "oden": "🍢", + "office_building": "🏢", + "ogre": "👹", + "oil_drum": "🛢", + "old_key": "🗝", + "old_man": "👴", + "old_man_dark_skin_tone": "👴🏿", + "old_man_light_skin_tone": "👴🏻", + "old_man_medium-dark_skin_tone": "👴🏾", + "old_man_medium-light_skin_tone": "👴🏼", + "old_man_medium_skin_tone": "👴🏽", + "old_woman": "👵", + "old_woman_dark_skin_tone": "👵🏿", + "old_woman_light_skin_tone": "👵🏻", + "old_woman_medium-dark_skin_tone": "👵🏾", + "old_woman_medium-light_skin_tone": "👵🏼", + "old_woman_medium_skin_tone": "👵🏽", + "older_adult": "🧓", + "older_adult_dark_skin_tone": "🧓🏿", + "older_adult_light_skin_tone": "🧓🏻", + "older_adult_medium-dark_skin_tone": "🧓🏾", + "older_adult_medium-light_skin_tone": "🧓🏼", + "older_adult_medium_skin_tone": "🧓🏽", + "om": "🕉", + "oncoming_automobile": "🚘", + "oncoming_bus": "🚍", + "oncoming_fist": "👊", + "oncoming_fist_dark_skin_tone": "👊🏿", + "oncoming_fist_light_skin_tone": "👊🏻", + "oncoming_fist_medium-dark_skin_tone": "👊🏾", + "oncoming_fist_medium-light_skin_tone": "👊🏼", + "oncoming_fist_medium_skin_tone": "👊🏽", + "oncoming_police_car": "🚔", + "oncoming_taxi": "🚖", + "one-piece_swimsuit": "🩱", + "one-thirty": "🕜", + "one_o’clock": "🕐", + "onion": "🧅", + "open_book": "📖", + "open_file_folder": "📂", + "open_hands": "👐", + "open_hands_dark_skin_tone": "👐🏿", + "open_hands_light_skin_tone": "👐🏻", + "open_hands_medium-dark_skin_tone": "👐🏾", + "open_hands_medium-light_skin_tone": "👐🏼", + "open_hands_medium_skin_tone": "👐🏽", + "open_mailbox_with_lowered_flag": "📭", + "open_mailbox_with_raised_flag": "📬", + "optical_disk": "💿", + "orange_book": "📙", + "orange_circle": "🟠", + "orange_heart": "🧡", + "orange_square": "🟧", + "orangutan": "🦧", + "orthodox_cross": "☦", + "otter": "🦦", + "outbox_tray": "📤", + "owl": "🦉", + "ox": "🐂", + "oyster": "🦪", + "package": "📦", + "page_facing_up": "📄", + "page_with_curl": "📃", + "pager": "📟", + "paintbrush": "🖌", + "palm_tree": "🌴", + "palms_up_together": "🤲", + "palms_up_together_dark_skin_tone": "🤲🏿", + "palms_up_together_light_skin_tone": "🤲🏻", + "palms_up_together_medium-dark_skin_tone": "🤲🏾", + "palms_up_together_medium-light_skin_tone": "🤲🏼", + "palms_up_together_medium_skin_tone": "🤲🏽", + "pancakes": "🥞", + "panda_face": "🐼", + "paperclip": "📎", + "parrot": "🦜", + "part_alternation_mark": "〽", + "party_popper": "🎉", + "partying_face": "🥳", + "passenger_ship": "🛳", + "passport_control": "🛂", + "pause_button": "⏸", + "paw_prints": "🐾", + "peace_symbol": "☮", + "peach": "🍑", + "peacock": "🦚", + "peanuts": "🥜", + "pear": "🍐", + "pen": "🖊", + "pencil": "📝", + "penguin": "🐧", + "pensive_face": "😔", + "people_holding_hands": "🧑\u200d🤝\u200d🧑", + "people_with_bunny_ears": "👯", + "people_wrestling": "🤼", + "performing_arts": "🎭", + "persevering_face": "😣", + "person_biking": "🚴", + "person_biking_dark_skin_tone": "🚴🏿", + "person_biking_light_skin_tone": "🚴🏻", + "person_biking_medium-dark_skin_tone": "🚴🏾", + "person_biking_medium-light_skin_tone": "🚴🏼", + "person_biking_medium_skin_tone": "🚴🏽", + "person_bouncing_ball": "⛹", + "person_bouncing_ball_dark_skin_tone": "⛹🏿", + "person_bouncing_ball_light_skin_tone": "⛹🏻", + "person_bouncing_ball_medium-dark_skin_tone": "⛹🏾", + "person_bouncing_ball_medium-light_skin_tone": "⛹🏼", + "person_bouncing_ball_medium_skin_tone": "⛹🏽", + "person_bowing": "🙇", + "person_bowing_dark_skin_tone": "🙇🏿", + "person_bowing_light_skin_tone": "🙇🏻", + "person_bowing_medium-dark_skin_tone": "🙇🏾", + "person_bowing_medium-light_skin_tone": "🙇🏼", + "person_bowing_medium_skin_tone": "🙇🏽", + "person_cartwheeling": "🤸", + "person_cartwheeling_dark_skin_tone": "🤸🏿", + "person_cartwheeling_light_skin_tone": "🤸🏻", + "person_cartwheeling_medium-dark_skin_tone": "🤸🏾", + "person_cartwheeling_medium-light_skin_tone": "🤸🏼", + "person_cartwheeling_medium_skin_tone": "🤸🏽", + "person_climbing": "🧗", + "person_climbing_dark_skin_tone": "🧗🏿", + "person_climbing_light_skin_tone": "🧗🏻", + "person_climbing_medium-dark_skin_tone": "🧗🏾", + "person_climbing_medium-light_skin_tone": "🧗🏼", + "person_climbing_medium_skin_tone": "🧗🏽", + "person_facepalming": "🤦", + "person_facepalming_dark_skin_tone": "🤦🏿", + "person_facepalming_light_skin_tone": "🤦🏻", + "person_facepalming_medium-dark_skin_tone": "🤦🏾", + "person_facepalming_medium-light_skin_tone": "🤦🏼", + "person_facepalming_medium_skin_tone": "🤦🏽", + "person_fencing": "🤺", + "person_frowning": "🙍", + "person_frowning_dark_skin_tone": "🙍🏿", + "person_frowning_light_skin_tone": "🙍🏻", + "person_frowning_medium-dark_skin_tone": "🙍🏾", + "person_frowning_medium-light_skin_tone": "🙍🏼", + "person_frowning_medium_skin_tone": "🙍🏽", + "person_gesturing_no": "🙅", + "person_gesturing_no_dark_skin_tone": "🙅🏿", + "person_gesturing_no_light_skin_tone": "🙅🏻", + "person_gesturing_no_medium-dark_skin_tone": "🙅🏾", + "person_gesturing_no_medium-light_skin_tone": "🙅🏼", + "person_gesturing_no_medium_skin_tone": "🙅🏽", + "person_gesturing_ok": "🙆", + "person_gesturing_ok_dark_skin_tone": "🙆🏿", + "person_gesturing_ok_light_skin_tone": "🙆🏻", + "person_gesturing_ok_medium-dark_skin_tone": "🙆🏾", + "person_gesturing_ok_medium-light_skin_tone": "🙆🏼", + "person_gesturing_ok_medium_skin_tone": "🙆🏽", + "person_getting_haircut": "💇", + "person_getting_haircut_dark_skin_tone": "💇🏿", + "person_getting_haircut_light_skin_tone": "💇🏻", + "person_getting_haircut_medium-dark_skin_tone": "💇🏾", + "person_getting_haircut_medium-light_skin_tone": "💇🏼", + "person_getting_haircut_medium_skin_tone": "💇🏽", + "person_getting_massage": "💆", + "person_getting_massage_dark_skin_tone": "💆🏿", + "person_getting_massage_light_skin_tone": "💆🏻", + "person_getting_massage_medium-dark_skin_tone": "💆🏾", + "person_getting_massage_medium-light_skin_tone": "💆🏼", + "person_getting_massage_medium_skin_tone": "💆🏽", + "person_golfing": "🏌", + "person_golfing_dark_skin_tone": "🏌🏿", + "person_golfing_light_skin_tone": "🏌🏻", + "person_golfing_medium-dark_skin_tone": "🏌🏾", + "person_golfing_medium-light_skin_tone": "🏌🏼", + "person_golfing_medium_skin_tone": "🏌🏽", + "person_in_bed": "🛌", + "person_in_bed_dark_skin_tone": "🛌🏿", + "person_in_bed_light_skin_tone": "🛌🏻", + "person_in_bed_medium-dark_skin_tone": "🛌🏾", + "person_in_bed_medium-light_skin_tone": "🛌🏼", + "person_in_bed_medium_skin_tone": "🛌🏽", + "person_in_lotus_position": "🧘", + "person_in_lotus_position_dark_skin_tone": "🧘🏿", + "person_in_lotus_position_light_skin_tone": "🧘🏻", + "person_in_lotus_position_medium-dark_skin_tone": "🧘🏾", + "person_in_lotus_position_medium-light_skin_tone": "🧘🏼", + "person_in_lotus_position_medium_skin_tone": "🧘🏽", + "person_in_steamy_room": "🧖", + "person_in_steamy_room_dark_skin_tone": "🧖🏿", + "person_in_steamy_room_light_skin_tone": "🧖🏻", + "person_in_steamy_room_medium-dark_skin_tone": "🧖🏾", + "person_in_steamy_room_medium-light_skin_tone": "🧖🏼", + "person_in_steamy_room_medium_skin_tone": "🧖🏽", + "person_juggling": "🤹", + "person_juggling_dark_skin_tone": "🤹🏿", + "person_juggling_light_skin_tone": "🤹🏻", + "person_juggling_medium-dark_skin_tone": "🤹🏾", + "person_juggling_medium-light_skin_tone": "🤹🏼", + "person_juggling_medium_skin_tone": "🤹🏽", + "person_kneeling": "🧎", + "person_lifting_weights": "🏋", + "person_lifting_weights_dark_skin_tone": "🏋🏿", + "person_lifting_weights_light_skin_tone": "🏋🏻", + "person_lifting_weights_medium-dark_skin_tone": "🏋🏾", + "person_lifting_weights_medium-light_skin_tone": "🏋🏼", + "person_lifting_weights_medium_skin_tone": "🏋🏽", + "person_mountain_biking": "🚵", + "person_mountain_biking_dark_skin_tone": "🚵🏿", + "person_mountain_biking_light_skin_tone": "🚵🏻", + "person_mountain_biking_medium-dark_skin_tone": "🚵🏾", + "person_mountain_biking_medium-light_skin_tone": "🚵🏼", + "person_mountain_biking_medium_skin_tone": "🚵🏽", + "person_playing_handball": "🤾", + "person_playing_handball_dark_skin_tone": "🤾🏿", + "person_playing_handball_light_skin_tone": "🤾🏻", + "person_playing_handball_medium-dark_skin_tone": "🤾🏾", + "person_playing_handball_medium-light_skin_tone": "🤾🏼", + "person_playing_handball_medium_skin_tone": "🤾🏽", + "person_playing_water_polo": "🤽", + "person_playing_water_polo_dark_skin_tone": "🤽🏿", + "person_playing_water_polo_light_skin_tone": "🤽🏻", + "person_playing_water_polo_medium-dark_skin_tone": "🤽🏾", + "person_playing_water_polo_medium-light_skin_tone": "🤽🏼", + "person_playing_water_polo_medium_skin_tone": "🤽🏽", + "person_pouting": "🙎", + "person_pouting_dark_skin_tone": "🙎🏿", + "person_pouting_light_skin_tone": "🙎🏻", + "person_pouting_medium-dark_skin_tone": "🙎🏾", + "person_pouting_medium-light_skin_tone": "🙎🏼", + "person_pouting_medium_skin_tone": "🙎🏽", + "person_raising_hand": "🙋", + "person_raising_hand_dark_skin_tone": "🙋🏿", + "person_raising_hand_light_skin_tone": "🙋🏻", + "person_raising_hand_medium-dark_skin_tone": "🙋🏾", + "person_raising_hand_medium-light_skin_tone": "🙋🏼", + "person_raising_hand_medium_skin_tone": "🙋🏽", + "person_rowing_boat": "🚣", + "person_rowing_boat_dark_skin_tone": "🚣🏿", + "person_rowing_boat_light_skin_tone": "🚣🏻", + "person_rowing_boat_medium-dark_skin_tone": "🚣🏾", + "person_rowing_boat_medium-light_skin_tone": "🚣🏼", + "person_rowing_boat_medium_skin_tone": "🚣🏽", + "person_running": "🏃", + "person_running_dark_skin_tone": "🏃🏿", + "person_running_light_skin_tone": "🏃🏻", + "person_running_medium-dark_skin_tone": "🏃🏾", + "person_running_medium-light_skin_tone": "🏃🏼", + "person_running_medium_skin_tone": "🏃🏽", + "person_shrugging": "🤷", + "person_shrugging_dark_skin_tone": "🤷🏿", + "person_shrugging_light_skin_tone": "🤷🏻", + "person_shrugging_medium-dark_skin_tone": "🤷🏾", + "person_shrugging_medium-light_skin_tone": "🤷🏼", + "person_shrugging_medium_skin_tone": "🤷🏽", + "person_standing": "🧍", + "person_surfing": "🏄", + "person_surfing_dark_skin_tone": "🏄🏿", + "person_surfing_light_skin_tone": "🏄🏻", + "person_surfing_medium-dark_skin_tone": "🏄🏾", + "person_surfing_medium-light_skin_tone": "🏄🏼", + "person_surfing_medium_skin_tone": "🏄🏽", + "person_swimming": "🏊", + "person_swimming_dark_skin_tone": "🏊🏿", + "person_swimming_light_skin_tone": "🏊🏻", + "person_swimming_medium-dark_skin_tone": "🏊🏾", + "person_swimming_medium-light_skin_tone": "🏊🏼", + "person_swimming_medium_skin_tone": "🏊🏽", + "person_taking_bath": "🛀", + "person_taking_bath_dark_skin_tone": "🛀🏿", + "person_taking_bath_light_skin_tone": "🛀🏻", + "person_taking_bath_medium-dark_skin_tone": "🛀🏾", + "person_taking_bath_medium-light_skin_tone": "🛀🏼", + "person_taking_bath_medium_skin_tone": "🛀🏽", + "person_tipping_hand": "💁", + "person_tipping_hand_dark_skin_tone": "💁🏿", + "person_tipping_hand_light_skin_tone": "💁🏻", + "person_tipping_hand_medium-dark_skin_tone": "💁🏾", + "person_tipping_hand_medium-light_skin_tone": "💁🏼", + "person_tipping_hand_medium_skin_tone": "💁🏽", + "person_walking": "🚶", + "person_walking_dark_skin_tone": "🚶🏿", + "person_walking_light_skin_tone": "🚶🏻", + "person_walking_medium-dark_skin_tone": "🚶🏾", + "person_walking_medium-light_skin_tone": "🚶🏼", + "person_walking_medium_skin_tone": "🚶🏽", + "person_wearing_turban": "👳", + "person_wearing_turban_dark_skin_tone": "👳🏿", + "person_wearing_turban_light_skin_tone": "👳🏻", + "person_wearing_turban_medium-dark_skin_tone": "👳🏾", + "person_wearing_turban_medium-light_skin_tone": "👳🏼", + "person_wearing_turban_medium_skin_tone": "👳🏽", + "petri_dish": "🧫", + "pick": "⛏", + "pie": "🥧", + "pig": "🐷", + "pig_face": "🐷", + "pig_nose": "🐽", + "pile_of_poo": "💩", + "pill": "💊", + "pinching_hand": "🤏", + "pine_decoration": "🎍", + "pineapple": "🍍", + "ping_pong": "🏓", + "pirate_flag": "🏴\u200d☠️", + "pistol": "🔫", + "pizza": "🍕", + "place_of_worship": "🛐", + "play_button": "▶", + "play_or_pause_button": "⏯", + "pleading_face": "🥺", + "police_car": "🚓", + "police_car_light": "🚨", + "police_officer": "👮", + "police_officer_dark_skin_tone": "👮🏿", + "police_officer_light_skin_tone": "👮🏻", + "police_officer_medium-dark_skin_tone": "👮🏾", + "police_officer_medium-light_skin_tone": "👮🏼", + "police_officer_medium_skin_tone": "👮🏽", + "poodle": "🐩", + "pool_8_ball": "🎱", + "popcorn": "🍿", + "post_office": "🏣", + "postal_horn": "📯", + "postbox": "📮", + "pot_of_food": "🍲", + "potable_water": "🚰", + "potato": "🥔", + "poultry_leg": "🍗", + "pound_banknote": "💷", + "pouting_cat_face": "😾", + "pouting_face": "😡", + "prayer_beads": "📿", + "pregnant_woman": "🤰", + "pregnant_woman_dark_skin_tone": "🤰🏿", + "pregnant_woman_light_skin_tone": "🤰🏻", + "pregnant_woman_medium-dark_skin_tone": "🤰🏾", + "pregnant_woman_medium-light_skin_tone": "🤰🏼", + "pregnant_woman_medium_skin_tone": "🤰🏽", + "pretzel": "🥨", + "probing_cane": "🦯", + "prince": "🤴", + "prince_dark_skin_tone": "🤴🏿", + "prince_light_skin_tone": "🤴🏻", + "prince_medium-dark_skin_tone": "🤴🏾", + "prince_medium-light_skin_tone": "🤴🏼", + "prince_medium_skin_tone": "🤴🏽", + "princess": "👸", + "princess_dark_skin_tone": "👸🏿", + "princess_light_skin_tone": "👸🏻", + "princess_medium-dark_skin_tone": "👸🏾", + "princess_medium-light_skin_tone": "👸🏼", + "princess_medium_skin_tone": "👸🏽", + "printer": "🖨", + "prohibited": "🚫", + "purple_circle": "🟣", + "purple_heart": "💜", + "purple_square": "🟪", + "purse": "👛", + "pushpin": "📌", + "question_mark": "❓", + "rabbit": "🐰", + "rabbit_face": "🐰", + "raccoon": "🦝", + "racing_car": "🏎", + "radio": "📻", + "radio_button": "🔘", + "radioactive": "☢", + "railway_car": "🚃", + "railway_track": "🛤", + "rainbow": "🌈", + "rainbow_flag": "🏳️\u200d🌈", + "raised_back_of_hand": "🤚", + "raised_back_of_hand_dark_skin_tone": "🤚🏿", + "raised_back_of_hand_light_skin_tone": "🤚🏻", + "raised_back_of_hand_medium-dark_skin_tone": "🤚🏾", + "raised_back_of_hand_medium-light_skin_tone": "🤚🏼", + "raised_back_of_hand_medium_skin_tone": "🤚🏽", + "raised_fist": "✊", + "raised_fist_dark_skin_tone": "✊🏿", + "raised_fist_light_skin_tone": "✊🏻", + "raised_fist_medium-dark_skin_tone": "✊🏾", + "raised_fist_medium-light_skin_tone": "✊🏼", + "raised_fist_medium_skin_tone": "✊🏽", + "raised_hand": "✋", + "raised_hand_dark_skin_tone": "✋🏿", + "raised_hand_light_skin_tone": "✋🏻", + "raised_hand_medium-dark_skin_tone": "✋🏾", + "raised_hand_medium-light_skin_tone": "✋🏼", + "raised_hand_medium_skin_tone": "✋🏽", + "raising_hands": "🙌", + "raising_hands_dark_skin_tone": "🙌🏿", + "raising_hands_light_skin_tone": "🙌🏻", + "raising_hands_medium-dark_skin_tone": "🙌🏾", + "raising_hands_medium-light_skin_tone": "🙌🏼", + "raising_hands_medium_skin_tone": "🙌🏽", + "ram": "🐏", + "rat": "🐀", + "razor": "🪒", + "ringed_planet": "🪐", + "receipt": "🧾", + "record_button": "⏺", + "recycling_symbol": "♻", + "red_apple": "🍎", + "red_circle": "🔴", + "red_envelope": "🧧", + "red_hair": "🦰", + "red-haired_man": "👨\u200d🦰", + "red-haired_woman": "👩\u200d🦰", + "red_heart": "❤", + "red_paper_lantern": "🏮", + "red_square": "🟥", + "red_triangle_pointed_down": "🔻", + "red_triangle_pointed_up": "🔺", + "registered": "®", + "relieved_face": "😌", + "reminder_ribbon": "🎗", + "repeat_button": "🔁", + "repeat_single_button": "🔂", + "rescue_worker’s_helmet": "⛑", + "restroom": "🚻", + "reverse_button": "◀", + "revolving_hearts": "💞", + "rhinoceros": "🦏", + "ribbon": "🎀", + "rice_ball": "🍙", + "rice_cracker": "🍘", + "right-facing_fist": "🤜", + "right-facing_fist_dark_skin_tone": "🤜🏿", + "right-facing_fist_light_skin_tone": "🤜🏻", + "right-facing_fist_medium-dark_skin_tone": "🤜🏾", + "right-facing_fist_medium-light_skin_tone": "🤜🏼", + "right-facing_fist_medium_skin_tone": "🤜🏽", + "right_anger_bubble": "🗯", + "right_arrow": "➡", + "right_arrow_curving_down": "⤵", + "right_arrow_curving_left": "↩", + "right_arrow_curving_up": "⤴", + "ring": "💍", + "roasted_sweet_potato": "🍠", + "robot_face": "🤖", + "rocket": "🚀", + "roll_of_paper": "🧻", + "rolled-up_newspaper": "🗞", + "roller_coaster": "🎢", + "rolling_on_the_floor_laughing": "🤣", + "rooster": "🐓", + "rose": "🌹", + "rosette": "🏵", + "round_pushpin": "📍", + "rugby_football": "🏉", + "running_shirt": "🎽", + "running_shoe": "👟", + "sad_but_relieved_face": "😥", + "safety_pin": "🧷", + "safety_vest": "🦺", + "salt": "🧂", + "sailboat": "⛵", + "sake": "🍶", + "sandwich": "🥪", + "sari": "🥻", + "satellite": "📡", + "satellite_antenna": "📡", + "sauropod": "🦕", + "saxophone": "🎷", + "scarf": "🧣", + "school": "🏫", + "school_backpack": "🎒", + "scissors": "✂", + "scorpion": "🦂", + "scroll": "📜", + "seat": "💺", + "see-no-evil_monkey": "🙈", + "seedling": "🌱", + "selfie": "🤳", + "selfie_dark_skin_tone": "🤳🏿", + "selfie_light_skin_tone": "🤳🏻", + "selfie_medium-dark_skin_tone": "🤳🏾", + "selfie_medium-light_skin_tone": "🤳🏼", + "selfie_medium_skin_tone": "🤳🏽", + "service_dog": "🐕\u200d🦺", + "seven-thirty": "🕢", + "seven_o’clock": "🕖", + "shallow_pan_of_food": "🥘", + "shamrock": "☘", + "shark": "🦈", + "shaved_ice": "🍧", + "sheaf_of_rice": "🌾", + "shield": "🛡", + "shinto_shrine": "⛩", + "ship": "🚢", + "shooting_star": "🌠", + "shopping_bags": "🛍", + "shopping_cart": "🛒", + "shortcake": "🍰", + "shorts": "🩳", + "shower": "🚿", + "shrimp": "🦐", + "shuffle_tracks_button": "🔀", + "shushing_face": "🤫", + "sign_of_the_horns": "🤘", + "sign_of_the_horns_dark_skin_tone": "🤘🏿", + "sign_of_the_horns_light_skin_tone": "🤘🏻", + "sign_of_the_horns_medium-dark_skin_tone": "🤘🏾", + "sign_of_the_horns_medium-light_skin_tone": "🤘🏼", + "sign_of_the_horns_medium_skin_tone": "🤘🏽", + "six-thirty": "🕡", + "six_o’clock": "🕕", + "skateboard": "🛹", + "skier": "⛷", + "skis": "🎿", + "skull": "💀", + "skull_and_crossbones": "☠", + "skunk": "🦨", + "sled": "🛷", + "sleeping_face": "😴", + "sleepy_face": "😪", + "slightly_frowning_face": "🙁", + "slightly_smiling_face": "🙂", + "slot_machine": "🎰", + "sloth": "🦥", + "small_airplane": "🛩", + "small_blue_diamond": "🔹", + "small_orange_diamond": "🔸", + "smiling_cat_face_with_heart-eyes": "😻", + "smiling_face": "☺", + "smiling_face_with_halo": "😇", + "smiling_face_with_3_hearts": "🥰", + "smiling_face_with_heart-eyes": "😍", + "smiling_face_with_horns": "😈", + "smiling_face_with_smiling_eyes": "😊", + "smiling_face_with_sunglasses": "😎", + "smirking_face": "😏", + "snail": "🐌", + "snake": "🐍", + "sneezing_face": "🤧", + "snow-capped_mountain": "🏔", + "snowboarder": "🏂", + "snowboarder_dark_skin_tone": "🏂🏿", + "snowboarder_light_skin_tone": "🏂🏻", + "snowboarder_medium-dark_skin_tone": "🏂🏾", + "snowboarder_medium-light_skin_tone": "🏂🏼", + "snowboarder_medium_skin_tone": "🏂🏽", + "snowflake": "❄", + "snowman": "☃", + "snowman_without_snow": "⛄", + "soap": "🧼", + "soccer_ball": "⚽", + "socks": "🧦", + "softball": "🥎", + "soft_ice_cream": "🍦", + "spade_suit": "♠", + "spaghetti": "🍝", + "sparkle": "❇", + "sparkler": "🎇", + "sparkles": "✨", + "sparkling_heart": "💖", + "speak-no-evil_monkey": "🙊", + "speaker_high_volume": "🔊", + "speaker_low_volume": "🔈", + "speaker_medium_volume": "🔉", + "speaking_head": "🗣", + "speech_balloon": "💬", + "speedboat": "🚤", + "spider": "🕷", + "spider_web": "🕸", + "spiral_calendar": "🗓", + "spiral_notepad": "🗒", + "spiral_shell": "🐚", + "spoon": "🥄", + "sponge": "🧽", + "sport_utility_vehicle": "🚙", + "sports_medal": "🏅", + "spouting_whale": "🐳", + "squid": "🦑", + "squinting_face_with_tongue": "😝", + "stadium": "🏟", + "star-struck": "🤩", + "star_and_crescent": "☪", + "star_of_david": "✡", + "station": "🚉", + "steaming_bowl": "🍜", + "stethoscope": "🩺", + "stop_button": "⏹", + "stop_sign": "🛑", + "stopwatch": "⏱", + "straight_ruler": "📏", + "strawberry": "🍓", + "studio_microphone": "🎙", + "stuffed_flatbread": "🥙", + "sun": "☀", + "sun_behind_cloud": "⛅", + "sun_behind_large_cloud": "🌥", + "sun_behind_rain_cloud": "🌦", + "sun_behind_small_cloud": "🌤", + "sun_with_face": "🌞", + "sunflower": "🌻", + "sunglasses": "😎", + "sunrise": "🌅", + "sunrise_over_mountains": "🌄", + "sunset": "🌇", + "superhero": "🦸", + "supervillain": "🦹", + "sushi": "🍣", + "suspension_railway": "🚟", + "swan": "🦢", + "sweat_droplets": "💦", + "synagogue": "🕍", + "syringe": "💉", + "t-shirt": "👕", + "taco": "🌮", + "takeout_box": "🥡", + "tanabata_tree": "🎋", + "tangerine": "🍊", + "taxi": "🚕", + "teacup_without_handle": "🍵", + "tear-off_calendar": "📆", + "teddy_bear": "🧸", + "telephone": "☎", + "telephone_receiver": "📞", + "telescope": "🔭", + "television": "📺", + "ten-thirty": "🕥", + "ten_o’clock": "🕙", + "tennis": "🎾", + "tent": "⛺", + "test_tube": "🧪", + "thermometer": "🌡", + "thinking_face": "🤔", + "thought_balloon": "💭", + "thread": "🧵", + "three-thirty": "🕞", + "three_o’clock": "🕒", + "thumbs_down": "👎", + "thumbs_down_dark_skin_tone": "👎🏿", + "thumbs_down_light_skin_tone": "👎🏻", + "thumbs_down_medium-dark_skin_tone": "👎🏾", + "thumbs_down_medium-light_skin_tone": "👎🏼", + "thumbs_down_medium_skin_tone": "👎🏽", + "thumbs_up": "👍", + "thumbs_up_dark_skin_tone": "👍🏿", + "thumbs_up_light_skin_tone": "👍🏻", + "thumbs_up_medium-dark_skin_tone": "👍🏾", + "thumbs_up_medium-light_skin_tone": "👍🏼", + "thumbs_up_medium_skin_tone": "👍🏽", + "ticket": "🎫", + "tiger": "🐯", + "tiger_face": "🐯", + "timer_clock": "⏲", + "tired_face": "😫", + "toolbox": "🧰", + "toilet": "🚽", + "tomato": "🍅", + "tongue": "👅", + "tooth": "🦷", + "top_hat": "🎩", + "tornado": "🌪", + "trackball": "🖲", + "tractor": "🚜", + "trade_mark": "™", + "train": "🚋", + "tram": "🚊", + "tram_car": "🚋", + "triangular_flag": "🚩", + "triangular_ruler": "📐", + "trident_emblem": "🔱", + "trolleybus": "🚎", + "trophy": "🏆", + "tropical_drink": "🍹", + "tropical_fish": "🐠", + "trumpet": "🎺", + "tulip": "🌷", + "tumbler_glass": "🥃", + "turtle": "🐢", + "twelve-thirty": "🕧", + "twelve_o’clock": "🕛", + "two-hump_camel": "🐫", + "two-thirty": "🕝", + "two_hearts": "💕", + "two_men_holding_hands": "👬", + "two_o’clock": "🕑", + "two_women_holding_hands": "👭", + "umbrella": "☂", + "umbrella_on_ground": "⛱", + "umbrella_with_rain_drops": "☔", + "unamused_face": "😒", + "unicorn_face": "🦄", + "unlocked": "🔓", + "up-down_arrow": "↕", + "up-left_arrow": "↖", + "up-right_arrow": "↗", + "up_arrow": "⬆", + "upside-down_face": "🙃", + "upwards_button": "🔼", + "vampire": "🧛", + "vampire_dark_skin_tone": "🧛🏿", + "vampire_light_skin_tone": "🧛🏻", + "vampire_medium-dark_skin_tone": "🧛🏾", + "vampire_medium-light_skin_tone": "🧛🏼", + "vampire_medium_skin_tone": "🧛🏽", + "vertical_traffic_light": "🚦", + "vibration_mode": "📳", + "victory_hand": "✌", + "victory_hand_dark_skin_tone": "✌🏿", + "victory_hand_light_skin_tone": "✌🏻", + "victory_hand_medium-dark_skin_tone": "✌🏾", + "victory_hand_medium-light_skin_tone": "✌🏼", + "victory_hand_medium_skin_tone": "✌🏽", + "video_camera": "📹", + "video_game": "🎮", + "videocassette": "📼", + "violin": "🎻", + "volcano": "🌋", + "volleyball": "🏐", + "vulcan_salute": "🖖", + "vulcan_salute_dark_skin_tone": "🖖🏿", + "vulcan_salute_light_skin_tone": "🖖🏻", + "vulcan_salute_medium-dark_skin_tone": "🖖🏾", + "vulcan_salute_medium-light_skin_tone": "🖖🏼", + "vulcan_salute_medium_skin_tone": "🖖🏽", + "waffle": "🧇", + "waning_crescent_moon": "🌘", + "waning_gibbous_moon": "🌖", + "warning": "⚠", + "wastebasket": "🗑", + "watch": "⌚", + "water_buffalo": "🐃", + "water_closet": "🚾", + "water_wave": "🌊", + "watermelon": "🍉", + "waving_hand": "👋", + "waving_hand_dark_skin_tone": "👋🏿", + "waving_hand_light_skin_tone": "👋🏻", + "waving_hand_medium-dark_skin_tone": "👋🏾", + "waving_hand_medium-light_skin_tone": "👋🏼", + "waving_hand_medium_skin_tone": "👋🏽", + "wavy_dash": "〰", + "waxing_crescent_moon": "🌒", + "waxing_gibbous_moon": "🌔", + "weary_cat_face": "🙀", + "weary_face": "😩", + "wedding": "💒", + "whale": "🐳", + "wheel_of_dharma": "☸", + "wheelchair_symbol": "♿", + "white_circle": "⚪", + "white_exclamation_mark": "❕", + "white_flag": "🏳", + "white_flower": "💮", + "white_hair": "🦳", + "white-haired_man": "👨\u200d🦳", + "white-haired_woman": "👩\u200d🦳", + "white_heart": "🤍", + "white_heavy_check_mark": "✅", + "white_large_square": "⬜", + "white_medium-small_square": "◽", + "white_medium_square": "◻", + "white_medium_star": "⭐", + "white_question_mark": "❔", + "white_small_square": "▫", + "white_square_button": "🔳", + "wilted_flower": "🥀", + "wind_chime": "🎐", + "wind_face": "🌬", + "wine_glass": "🍷", + "winking_face": "😉", + "winking_face_with_tongue": "😜", + "wolf_face": "🐺", + "woman": "👩", + "woman_artist": "👩\u200d🎨", + "woman_artist_dark_skin_tone": "👩🏿\u200d🎨", + "woman_artist_light_skin_tone": "👩🏻\u200d🎨", + "woman_artist_medium-dark_skin_tone": "👩🏾\u200d🎨", + "woman_artist_medium-light_skin_tone": "👩🏼\u200d🎨", + "woman_artist_medium_skin_tone": "👩🏽\u200d🎨", + "woman_astronaut": "👩\u200d🚀", + "woman_astronaut_dark_skin_tone": "👩🏿\u200d🚀", + "woman_astronaut_light_skin_tone": "👩🏻\u200d🚀", + "woman_astronaut_medium-dark_skin_tone": "👩🏾\u200d🚀", + "woman_astronaut_medium-light_skin_tone": "👩🏼\u200d🚀", + "woman_astronaut_medium_skin_tone": "👩🏽\u200d🚀", + "woman_biking": "🚴\u200d♀️", + "woman_biking_dark_skin_tone": "🚴🏿\u200d♀️", + "woman_biking_light_skin_tone": "🚴🏻\u200d♀️", + "woman_biking_medium-dark_skin_tone": "🚴🏾\u200d♀️", + "woman_biking_medium-light_skin_tone": "🚴🏼\u200d♀️", + "woman_biking_medium_skin_tone": "🚴🏽\u200d♀️", + "woman_bouncing_ball": "⛹️\u200d♀️", + "woman_bouncing_ball_dark_skin_tone": "⛹🏿\u200d♀️", + "woman_bouncing_ball_light_skin_tone": "⛹🏻\u200d♀️", + "woman_bouncing_ball_medium-dark_skin_tone": "⛹🏾\u200d♀️", + "woman_bouncing_ball_medium-light_skin_tone": "⛹🏼\u200d♀️", + "woman_bouncing_ball_medium_skin_tone": "⛹🏽\u200d♀️", + "woman_bowing": "🙇\u200d♀️", + "woman_bowing_dark_skin_tone": "🙇🏿\u200d♀️", + "woman_bowing_light_skin_tone": "🙇🏻\u200d♀️", + "woman_bowing_medium-dark_skin_tone": "🙇🏾\u200d♀️", + "woman_bowing_medium-light_skin_tone": "🙇🏼\u200d♀️", + "woman_bowing_medium_skin_tone": "🙇🏽\u200d♀️", + "woman_cartwheeling": "🤸\u200d♀️", + "woman_cartwheeling_dark_skin_tone": "🤸🏿\u200d♀️", + "woman_cartwheeling_light_skin_tone": "🤸🏻\u200d♀️", + "woman_cartwheeling_medium-dark_skin_tone": "🤸🏾\u200d♀️", + "woman_cartwheeling_medium-light_skin_tone": "🤸🏼\u200d♀️", + "woman_cartwheeling_medium_skin_tone": "🤸🏽\u200d♀️", + "woman_climbing": "🧗\u200d♀️", + "woman_climbing_dark_skin_tone": "🧗🏿\u200d♀️", + "woman_climbing_light_skin_tone": "🧗🏻\u200d♀️", + "woman_climbing_medium-dark_skin_tone": "🧗🏾\u200d♀️", + "woman_climbing_medium-light_skin_tone": "🧗🏼\u200d♀️", + "woman_climbing_medium_skin_tone": "🧗🏽\u200d♀️", + "woman_construction_worker": "👷\u200d♀️", + "woman_construction_worker_dark_skin_tone": "👷🏿\u200d♀️", + "woman_construction_worker_light_skin_tone": "👷🏻\u200d♀️", + "woman_construction_worker_medium-dark_skin_tone": "👷🏾\u200d♀️", + "woman_construction_worker_medium-light_skin_tone": "👷🏼\u200d♀️", + "woman_construction_worker_medium_skin_tone": "👷🏽\u200d♀️", + "woman_cook": "👩\u200d🍳", + "woman_cook_dark_skin_tone": "👩🏿\u200d🍳", + "woman_cook_light_skin_tone": "👩🏻\u200d🍳", + "woman_cook_medium-dark_skin_tone": "👩🏾\u200d🍳", + "woman_cook_medium-light_skin_tone": "👩🏼\u200d🍳", + "woman_cook_medium_skin_tone": "👩🏽\u200d🍳", + "woman_dancing": "💃", + "woman_dancing_dark_skin_tone": "💃🏿", + "woman_dancing_light_skin_tone": "💃🏻", + "woman_dancing_medium-dark_skin_tone": "💃🏾", + "woman_dancing_medium-light_skin_tone": "💃🏼", + "woman_dancing_medium_skin_tone": "💃🏽", + "woman_dark_skin_tone": "👩🏿", + "woman_detective": "🕵️\u200d♀️", + "woman_detective_dark_skin_tone": "🕵🏿\u200d♀️", + "woman_detective_light_skin_tone": "🕵🏻\u200d♀️", + "woman_detective_medium-dark_skin_tone": "🕵🏾\u200d♀️", + "woman_detective_medium-light_skin_tone": "🕵🏼\u200d♀️", + "woman_detective_medium_skin_tone": "🕵🏽\u200d♀️", + "woman_elf": "🧝\u200d♀️", + "woman_elf_dark_skin_tone": "🧝🏿\u200d♀️", + "woman_elf_light_skin_tone": "🧝🏻\u200d♀️", + "woman_elf_medium-dark_skin_tone": "🧝🏾\u200d♀️", + "woman_elf_medium-light_skin_tone": "🧝🏼\u200d♀️", + "woman_elf_medium_skin_tone": "🧝🏽\u200d♀️", + "woman_facepalming": "🤦\u200d♀️", + "woman_facepalming_dark_skin_tone": "🤦🏿\u200d♀️", + "woman_facepalming_light_skin_tone": "🤦🏻\u200d♀️", + "woman_facepalming_medium-dark_skin_tone": "🤦🏾\u200d♀️", + "woman_facepalming_medium-light_skin_tone": "🤦🏼\u200d♀️", + "woman_facepalming_medium_skin_tone": "🤦🏽\u200d♀️", + "woman_factory_worker": "👩\u200d🏭", + "woman_factory_worker_dark_skin_tone": "👩🏿\u200d🏭", + "woman_factory_worker_light_skin_tone": "👩🏻\u200d🏭", + "woman_factory_worker_medium-dark_skin_tone": "👩🏾\u200d🏭", + "woman_factory_worker_medium-light_skin_tone": "👩🏼\u200d🏭", + "woman_factory_worker_medium_skin_tone": "👩🏽\u200d🏭", + "woman_fairy": "🧚\u200d♀️", + "woman_fairy_dark_skin_tone": "🧚🏿\u200d♀️", + "woman_fairy_light_skin_tone": "🧚🏻\u200d♀️", + "woman_fairy_medium-dark_skin_tone": "🧚🏾\u200d♀️", + "woman_fairy_medium-light_skin_tone": "🧚🏼\u200d♀️", + "woman_fairy_medium_skin_tone": "🧚🏽\u200d♀️", + "woman_farmer": "👩\u200d🌾", + "woman_farmer_dark_skin_tone": "👩🏿\u200d🌾", + "woman_farmer_light_skin_tone": "👩🏻\u200d🌾", + "woman_farmer_medium-dark_skin_tone": "👩🏾\u200d🌾", + "woman_farmer_medium-light_skin_tone": "👩🏼\u200d🌾", + "woman_farmer_medium_skin_tone": "👩🏽\u200d🌾", + "woman_firefighter": "👩\u200d🚒", + "woman_firefighter_dark_skin_tone": "👩🏿\u200d🚒", + "woman_firefighter_light_skin_tone": "👩🏻\u200d🚒", + "woman_firefighter_medium-dark_skin_tone": "👩🏾\u200d🚒", + "woman_firefighter_medium-light_skin_tone": "👩🏼\u200d🚒", + "woman_firefighter_medium_skin_tone": "👩🏽\u200d🚒", + "woman_frowning": "🙍\u200d♀️", + "woman_frowning_dark_skin_tone": "🙍🏿\u200d♀️", + "woman_frowning_light_skin_tone": "🙍🏻\u200d♀️", + "woman_frowning_medium-dark_skin_tone": "🙍🏾\u200d♀️", + "woman_frowning_medium-light_skin_tone": "🙍🏼\u200d♀️", + "woman_frowning_medium_skin_tone": "🙍🏽\u200d♀️", + "woman_genie": "🧞\u200d♀️", + "woman_gesturing_no": "🙅\u200d♀️", + "woman_gesturing_no_dark_skin_tone": "🙅🏿\u200d♀️", + "woman_gesturing_no_light_skin_tone": "🙅🏻\u200d♀️", + "woman_gesturing_no_medium-dark_skin_tone": "🙅🏾\u200d♀️", + "woman_gesturing_no_medium-light_skin_tone": "🙅🏼\u200d♀️", + "woman_gesturing_no_medium_skin_tone": "🙅🏽\u200d♀️", + "woman_gesturing_ok": "🙆\u200d♀️", + "woman_gesturing_ok_dark_skin_tone": "🙆🏿\u200d♀️", + "woman_gesturing_ok_light_skin_tone": "🙆🏻\u200d♀️", + "woman_gesturing_ok_medium-dark_skin_tone": "🙆🏾\u200d♀️", + "woman_gesturing_ok_medium-light_skin_tone": "🙆🏼\u200d♀️", + "woman_gesturing_ok_medium_skin_tone": "🙆🏽\u200d♀️", + "woman_getting_haircut": "💇\u200d♀️", + "woman_getting_haircut_dark_skin_tone": "💇🏿\u200d♀️", + "woman_getting_haircut_light_skin_tone": "💇🏻\u200d♀️", + "woman_getting_haircut_medium-dark_skin_tone": "💇🏾\u200d♀️", + "woman_getting_haircut_medium-light_skin_tone": "💇🏼\u200d♀️", + "woman_getting_haircut_medium_skin_tone": "💇🏽\u200d♀️", + "woman_getting_massage": "💆\u200d♀️", + "woman_getting_massage_dark_skin_tone": "💆🏿\u200d♀️", + "woman_getting_massage_light_skin_tone": "💆🏻\u200d♀️", + "woman_getting_massage_medium-dark_skin_tone": "💆🏾\u200d♀️", + "woman_getting_massage_medium-light_skin_tone": "💆🏼\u200d♀️", + "woman_getting_massage_medium_skin_tone": "💆🏽\u200d♀️", + "woman_golfing": "🏌️\u200d♀️", + "woman_golfing_dark_skin_tone": "🏌🏿\u200d♀️", + "woman_golfing_light_skin_tone": "🏌🏻\u200d♀️", + "woman_golfing_medium-dark_skin_tone": "🏌🏾\u200d♀️", + "woman_golfing_medium-light_skin_tone": "🏌🏼\u200d♀️", + "woman_golfing_medium_skin_tone": "🏌🏽\u200d♀️", + "woman_guard": "💂\u200d♀️", + "woman_guard_dark_skin_tone": "💂🏿\u200d♀️", + "woman_guard_light_skin_tone": "💂🏻\u200d♀️", + "woman_guard_medium-dark_skin_tone": "💂🏾\u200d♀️", + "woman_guard_medium-light_skin_tone": "💂🏼\u200d♀️", + "woman_guard_medium_skin_tone": "💂🏽\u200d♀️", + "woman_health_worker": "👩\u200d⚕️", + "woman_health_worker_dark_skin_tone": "👩🏿\u200d⚕️", + "woman_health_worker_light_skin_tone": "👩🏻\u200d⚕️", + "woman_health_worker_medium-dark_skin_tone": "👩🏾\u200d⚕️", + "woman_health_worker_medium-light_skin_tone": "👩🏼\u200d⚕️", + "woman_health_worker_medium_skin_tone": "👩🏽\u200d⚕️", + "woman_in_lotus_position": "🧘\u200d♀️", + "woman_in_lotus_position_dark_skin_tone": "🧘🏿\u200d♀️", + "woman_in_lotus_position_light_skin_tone": "🧘🏻\u200d♀️", + "woman_in_lotus_position_medium-dark_skin_tone": "🧘🏾\u200d♀️", + "woman_in_lotus_position_medium-light_skin_tone": "🧘🏼\u200d♀️", + "woman_in_lotus_position_medium_skin_tone": "🧘🏽\u200d♀️", + "woman_in_manual_wheelchair": "👩\u200d🦽", + "woman_in_motorized_wheelchair": "👩\u200d🦼", + "woman_in_steamy_room": "🧖\u200d♀️", + "woman_in_steamy_room_dark_skin_tone": "🧖🏿\u200d♀️", + "woman_in_steamy_room_light_skin_tone": "🧖🏻\u200d♀️", + "woman_in_steamy_room_medium-dark_skin_tone": "🧖🏾\u200d♀️", + "woman_in_steamy_room_medium-light_skin_tone": "🧖🏼\u200d♀️", + "woman_in_steamy_room_medium_skin_tone": "🧖🏽\u200d♀️", + "woman_judge": "👩\u200d⚖️", + "woman_judge_dark_skin_tone": "👩🏿\u200d⚖️", + "woman_judge_light_skin_tone": "👩🏻\u200d⚖️", + "woman_judge_medium-dark_skin_tone": "👩🏾\u200d⚖️", + "woman_judge_medium-light_skin_tone": "👩🏼\u200d⚖️", + "woman_judge_medium_skin_tone": "👩🏽\u200d⚖️", + "woman_juggling": "🤹\u200d♀️", + "woman_juggling_dark_skin_tone": "🤹🏿\u200d♀️", + "woman_juggling_light_skin_tone": "🤹🏻\u200d♀️", + "woman_juggling_medium-dark_skin_tone": "🤹🏾\u200d♀️", + "woman_juggling_medium-light_skin_tone": "🤹🏼\u200d♀️", + "woman_juggling_medium_skin_tone": "🤹🏽\u200d♀️", + "woman_lifting_weights": "🏋️\u200d♀️", + "woman_lifting_weights_dark_skin_tone": "🏋🏿\u200d♀️", + "woman_lifting_weights_light_skin_tone": "🏋🏻\u200d♀️", + "woman_lifting_weights_medium-dark_skin_tone": "🏋🏾\u200d♀️", + "woman_lifting_weights_medium-light_skin_tone": "🏋🏼\u200d♀️", + "woman_lifting_weights_medium_skin_tone": "🏋🏽\u200d♀️", + "woman_light_skin_tone": "👩🏻", + "woman_mage": "🧙\u200d♀️", + "woman_mage_dark_skin_tone": "🧙🏿\u200d♀️", + "woman_mage_light_skin_tone": "🧙🏻\u200d♀️", + "woman_mage_medium-dark_skin_tone": "🧙🏾\u200d♀️", + "woman_mage_medium-light_skin_tone": "🧙🏼\u200d♀️", + "woman_mage_medium_skin_tone": "🧙🏽\u200d♀️", + "woman_mechanic": "👩\u200d🔧", + "woman_mechanic_dark_skin_tone": "👩🏿\u200d🔧", + "woman_mechanic_light_skin_tone": "👩🏻\u200d🔧", + "woman_mechanic_medium-dark_skin_tone": "👩🏾\u200d🔧", + "woman_mechanic_medium-light_skin_tone": "👩🏼\u200d🔧", + "woman_mechanic_medium_skin_tone": "👩🏽\u200d🔧", + "woman_medium-dark_skin_tone": "👩🏾", + "woman_medium-light_skin_tone": "👩🏼", + "woman_medium_skin_tone": "👩🏽", + "woman_mountain_biking": "🚵\u200d♀️", + "woman_mountain_biking_dark_skin_tone": "🚵🏿\u200d♀️", + "woman_mountain_biking_light_skin_tone": "🚵🏻\u200d♀️", + "woman_mountain_biking_medium-dark_skin_tone": "🚵🏾\u200d♀️", + "woman_mountain_biking_medium-light_skin_tone": "🚵🏼\u200d♀️", + "woman_mountain_biking_medium_skin_tone": "🚵🏽\u200d♀️", + "woman_office_worker": "👩\u200d💼", + "woman_office_worker_dark_skin_tone": "👩🏿\u200d💼", + "woman_office_worker_light_skin_tone": "👩🏻\u200d💼", + "woman_office_worker_medium-dark_skin_tone": "👩🏾\u200d💼", + "woman_office_worker_medium-light_skin_tone": "👩🏼\u200d💼", + "woman_office_worker_medium_skin_tone": "👩🏽\u200d💼", + "woman_pilot": "👩\u200d✈️", + "woman_pilot_dark_skin_tone": "👩🏿\u200d✈️", + "woman_pilot_light_skin_tone": "👩🏻\u200d✈️", + "woman_pilot_medium-dark_skin_tone": "👩🏾\u200d✈️", + "woman_pilot_medium-light_skin_tone": "👩🏼\u200d✈️", + "woman_pilot_medium_skin_tone": "👩🏽\u200d✈️", + "woman_playing_handball": "🤾\u200d♀️", + "woman_playing_handball_dark_skin_tone": "🤾🏿\u200d♀️", + "woman_playing_handball_light_skin_tone": "🤾🏻\u200d♀️", + "woman_playing_handball_medium-dark_skin_tone": "🤾🏾\u200d♀️", + "woman_playing_handball_medium-light_skin_tone": "🤾🏼\u200d♀️", + "woman_playing_handball_medium_skin_tone": "🤾🏽\u200d♀️", + "woman_playing_water_polo": "🤽\u200d♀️", + "woman_playing_water_polo_dark_skin_tone": "🤽🏿\u200d♀️", + "woman_playing_water_polo_light_skin_tone": "🤽🏻\u200d♀️", + "woman_playing_water_polo_medium-dark_skin_tone": "🤽🏾\u200d♀️", + "woman_playing_water_polo_medium-light_skin_tone": "🤽🏼\u200d♀️", + "woman_playing_water_polo_medium_skin_tone": "🤽🏽\u200d♀️", + "woman_police_officer": "👮\u200d♀️", + "woman_police_officer_dark_skin_tone": "👮🏿\u200d♀️", + "woman_police_officer_light_skin_tone": "👮🏻\u200d♀️", + "woman_police_officer_medium-dark_skin_tone": "👮🏾\u200d♀️", + "woman_police_officer_medium-light_skin_tone": "👮🏼\u200d♀️", + "woman_police_officer_medium_skin_tone": "👮🏽\u200d♀️", + "woman_pouting": "🙎\u200d♀️", + "woman_pouting_dark_skin_tone": "🙎🏿\u200d♀️", + "woman_pouting_light_skin_tone": "🙎🏻\u200d♀️", + "woman_pouting_medium-dark_skin_tone": "🙎🏾\u200d♀️", + "woman_pouting_medium-light_skin_tone": "🙎🏼\u200d♀️", + "woman_pouting_medium_skin_tone": "🙎🏽\u200d♀️", + "woman_raising_hand": "🙋\u200d♀️", + "woman_raising_hand_dark_skin_tone": "🙋🏿\u200d♀️", + "woman_raising_hand_light_skin_tone": "🙋🏻\u200d♀️", + "woman_raising_hand_medium-dark_skin_tone": "🙋🏾\u200d♀️", + "woman_raising_hand_medium-light_skin_tone": "🙋🏼\u200d♀️", + "woman_raising_hand_medium_skin_tone": "🙋🏽\u200d♀️", + "woman_rowing_boat": "🚣\u200d♀️", + "woman_rowing_boat_dark_skin_tone": "🚣🏿\u200d♀️", + "woman_rowing_boat_light_skin_tone": "🚣🏻\u200d♀️", + "woman_rowing_boat_medium-dark_skin_tone": "🚣🏾\u200d♀️", + "woman_rowing_boat_medium-light_skin_tone": "🚣🏼\u200d♀️", + "woman_rowing_boat_medium_skin_tone": "🚣🏽\u200d♀️", + "woman_running": "🏃\u200d♀️", + "woman_running_dark_skin_tone": "🏃🏿\u200d♀️", + "woman_running_light_skin_tone": "🏃🏻\u200d♀️", + "woman_running_medium-dark_skin_tone": "🏃🏾\u200d♀️", + "woman_running_medium-light_skin_tone": "🏃🏼\u200d♀️", + "woman_running_medium_skin_tone": "🏃🏽\u200d♀️", + "woman_scientist": "👩\u200d🔬", + "woman_scientist_dark_skin_tone": "👩🏿\u200d🔬", + "woman_scientist_light_skin_tone": "👩🏻\u200d🔬", + "woman_scientist_medium-dark_skin_tone": "👩🏾\u200d🔬", + "woman_scientist_medium-light_skin_tone": "👩🏼\u200d🔬", + "woman_scientist_medium_skin_tone": "👩🏽\u200d🔬", + "woman_shrugging": "🤷\u200d♀️", + "woman_shrugging_dark_skin_tone": "🤷🏿\u200d♀️", + "woman_shrugging_light_skin_tone": "🤷🏻\u200d♀️", + "woman_shrugging_medium-dark_skin_tone": "🤷🏾\u200d♀️", + "woman_shrugging_medium-light_skin_tone": "🤷🏼\u200d♀️", + "woman_shrugging_medium_skin_tone": "🤷🏽\u200d♀️", + "woman_singer": "👩\u200d🎤", + "woman_singer_dark_skin_tone": "👩🏿\u200d🎤", + "woman_singer_light_skin_tone": "👩🏻\u200d🎤", + "woman_singer_medium-dark_skin_tone": "👩🏾\u200d🎤", + "woman_singer_medium-light_skin_tone": "👩🏼\u200d🎤", + "woman_singer_medium_skin_tone": "👩🏽\u200d🎤", + "woman_student": "👩\u200d🎓", + "woman_student_dark_skin_tone": "👩🏿\u200d🎓", + "woman_student_light_skin_tone": "👩🏻\u200d🎓", + "woman_student_medium-dark_skin_tone": "👩🏾\u200d🎓", + "woman_student_medium-light_skin_tone": "👩🏼\u200d🎓", + "woman_student_medium_skin_tone": "👩🏽\u200d🎓", + "woman_surfing": "🏄\u200d♀️", + "woman_surfing_dark_skin_tone": "🏄🏿\u200d♀️", + "woman_surfing_light_skin_tone": "🏄🏻\u200d♀️", + "woman_surfing_medium-dark_skin_tone": "🏄🏾\u200d♀️", + "woman_surfing_medium-light_skin_tone": "🏄🏼\u200d♀️", + "woman_surfing_medium_skin_tone": "🏄🏽\u200d♀️", + "woman_swimming": "🏊\u200d♀️", + "woman_swimming_dark_skin_tone": "🏊🏿\u200d♀️", + "woman_swimming_light_skin_tone": "🏊🏻\u200d♀️", + "woman_swimming_medium-dark_skin_tone": "🏊🏾\u200d♀️", + "woman_swimming_medium-light_skin_tone": "🏊🏼\u200d♀️", + "woman_swimming_medium_skin_tone": "🏊🏽\u200d♀️", + "woman_teacher": "👩\u200d🏫", + "woman_teacher_dark_skin_tone": "👩🏿\u200d🏫", + "woman_teacher_light_skin_tone": "👩🏻\u200d🏫", + "woman_teacher_medium-dark_skin_tone": "👩🏾\u200d🏫", + "woman_teacher_medium-light_skin_tone": "👩🏼\u200d🏫", + "woman_teacher_medium_skin_tone": "👩🏽\u200d🏫", + "woman_technologist": "👩\u200d💻", + "woman_technologist_dark_skin_tone": "👩🏿\u200d💻", + "woman_technologist_light_skin_tone": "👩🏻\u200d💻", + "woman_technologist_medium-dark_skin_tone": "👩🏾\u200d💻", + "woman_technologist_medium-light_skin_tone": "👩🏼\u200d💻", + "woman_technologist_medium_skin_tone": "👩🏽\u200d💻", + "woman_tipping_hand": "💁\u200d♀️", + "woman_tipping_hand_dark_skin_tone": "💁🏿\u200d♀️", + "woman_tipping_hand_light_skin_tone": "💁🏻\u200d♀️", + "woman_tipping_hand_medium-dark_skin_tone": "💁🏾\u200d♀️", + "woman_tipping_hand_medium-light_skin_tone": "💁🏼\u200d♀️", + "woman_tipping_hand_medium_skin_tone": "💁🏽\u200d♀️", + "woman_vampire": "🧛\u200d♀️", + "woman_vampire_dark_skin_tone": "🧛🏿\u200d♀️", + "woman_vampire_light_skin_tone": "🧛🏻\u200d♀️", + "woman_vampire_medium-dark_skin_tone": "🧛🏾\u200d♀️", + "woman_vampire_medium-light_skin_tone": "🧛🏼\u200d♀️", + "woman_vampire_medium_skin_tone": "🧛🏽\u200d♀️", + "woman_walking": "🚶\u200d♀️", + "woman_walking_dark_skin_tone": "🚶🏿\u200d♀️", + "woman_walking_light_skin_tone": "🚶🏻\u200d♀️", + "woman_walking_medium-dark_skin_tone": "🚶🏾\u200d♀️", + "woman_walking_medium-light_skin_tone": "🚶🏼\u200d♀️", + "woman_walking_medium_skin_tone": "🚶🏽\u200d♀️", + "woman_wearing_turban": "👳\u200d♀️", + "woman_wearing_turban_dark_skin_tone": "👳🏿\u200d♀️", + "woman_wearing_turban_light_skin_tone": "👳🏻\u200d♀️", + "woman_wearing_turban_medium-dark_skin_tone": "👳🏾\u200d♀️", + "woman_wearing_turban_medium-light_skin_tone": "👳🏼\u200d♀️", + "woman_wearing_turban_medium_skin_tone": "👳🏽\u200d♀️", + "woman_with_headscarf": "🧕", + "woman_with_headscarf_dark_skin_tone": "🧕🏿", + "woman_with_headscarf_light_skin_tone": "🧕🏻", + "woman_with_headscarf_medium-dark_skin_tone": "🧕🏾", + "woman_with_headscarf_medium-light_skin_tone": "🧕🏼", + "woman_with_headscarf_medium_skin_tone": "🧕🏽", + "woman_with_probing_cane": "👩\u200d🦯", + "woman_zombie": "🧟\u200d♀️", + "woman’s_boot": "👢", + "woman’s_clothes": "👚", + "woman’s_hat": "👒", + "woman’s_sandal": "👡", + "women_with_bunny_ears": "👯\u200d♀️", + "women_wrestling": "🤼\u200d♀️", + "women’s_room": "🚺", + "woozy_face": "🥴", + "world_map": "🗺", + "worried_face": "😟", + "wrapped_gift": "🎁", + "wrench": "🔧", + "writing_hand": "✍", + "writing_hand_dark_skin_tone": "✍🏿", + "writing_hand_light_skin_tone": "✍🏻", + "writing_hand_medium-dark_skin_tone": "✍🏾", + "writing_hand_medium-light_skin_tone": "✍🏼", + "writing_hand_medium_skin_tone": "✍🏽", + "yarn": "🧶", + "yawning_face": "🥱", + "yellow_circle": "🟡", + "yellow_heart": "💛", + "yellow_square": "🟨", + "yen_banknote": "💴", + "yo-yo": "🪀", + "yin_yang": "☯", + "zany_face": "🤪", + "zebra": "🦓", + "zipper-mouth_face": "🤐", + "zombie": "🧟", + "zzz": "💤", + "åland_islands": "🇦🇽", + "keycap_asterisk": "*⃣", + "keycap_digit_eight": "8⃣", + "keycap_digit_five": "5⃣", + "keycap_digit_four": "4⃣", + "keycap_digit_nine": "9⃣", + "keycap_digit_one": "1⃣", + "keycap_digit_seven": "7⃣", + "keycap_digit_six": "6⃣", + "keycap_digit_three": "3⃣", + "keycap_digit_two": "2⃣", + "keycap_digit_zero": "0⃣", + "keycap_number_sign": "#⃣", + "light_skin_tone": "🏻", + "medium_light_skin_tone": "🏼", + "medium_skin_tone": "🏽", + "medium_dark_skin_tone": "🏾", + "dark_skin_tone": "🏿", + "regional_indicator_symbol_letter_a": "🇦", + "regional_indicator_symbol_letter_b": "🇧", + "regional_indicator_symbol_letter_c": "🇨", + "regional_indicator_symbol_letter_d": "🇩", + "regional_indicator_symbol_letter_e": "🇪", + "regional_indicator_symbol_letter_f": "🇫", + "regional_indicator_symbol_letter_g": "🇬", + "regional_indicator_symbol_letter_h": "🇭", + "regional_indicator_symbol_letter_i": "🇮", + "regional_indicator_symbol_letter_j": "🇯", + "regional_indicator_symbol_letter_k": "🇰", + "regional_indicator_symbol_letter_l": "🇱", + "regional_indicator_symbol_letter_m": "🇲", + "regional_indicator_symbol_letter_n": "🇳", + "regional_indicator_symbol_letter_o": "🇴", + "regional_indicator_symbol_letter_p": "🇵", + "regional_indicator_symbol_letter_q": "🇶", + "regional_indicator_symbol_letter_r": "🇷", + "regional_indicator_symbol_letter_s": "🇸", + "regional_indicator_symbol_letter_t": "🇹", + "regional_indicator_symbol_letter_u": "🇺", + "regional_indicator_symbol_letter_v": "🇻", + "regional_indicator_symbol_letter_w": "🇼", + "regional_indicator_symbol_letter_x": "🇽", + "regional_indicator_symbol_letter_y": "🇾", + "regional_indicator_symbol_letter_z": "🇿", + "airplane_arriving": "🛬", + "space_invader": "👾", + "football": "🏈", + "anger": "💢", + "angry": "😠", + "anguished": "😧", + "signal_strength": "📶", + "arrows_counterclockwise": "🔄", + "arrow_heading_down": "⤵", + "arrow_heading_up": "⤴", + "art": "🎨", + "astonished": "😲", + "athletic_shoe": "👟", + "atm": "🏧", + "car": "🚗", + "red_car": "🚗", + "angel": "👼", + "back": "🔙", + "badminton_racquet_and_shuttlecock": "🏸", + "dollar": "💵", + "euro": "💶", + "pound": "💷", + "yen": "💴", + "barber": "💈", + "bath": "🛀", + "bear": "🐻", + "heartbeat": "💓", + "beer": "🍺", + "no_bell": "🔕", + "bento": "🍱", + "bike": "🚲", + "bicyclist": "🚴", + "8ball": "🎱", + "biohazard_sign": "☣", + "birthday": "🎂", + "black_circle_for_record": "⏺", + "clubs": "♣", + "diamonds": "♦", + "arrow_double_down": "⏬", + "hearts": "♥", + "rewind": "⏪", + "black_left__pointing_double_triangle_with_vertical_bar": "⏮", + "arrow_backward": "◀", + "black_medium_small_square": "◾", + "question": "❓", + "fast_forward": "⏩", + "black_right__pointing_double_triangle_with_vertical_bar": "⏭", + "arrow_forward": "▶", + "black_right__pointing_triangle_with_double_vertical_bar": "⏯", + "arrow_right": "➡", + "spades": "♠", + "black_square_for_stop": "⏹", + "sunny": "☀", + "phone": "☎", + "recycle": "♻", + "arrow_double_up": "⏫", + "busstop": "🚏", + "date": "📅", + "flags": "🎏", + "cat2": "🐈", + "joy_cat": "😹", + "smirk_cat": "😼", + "chart_with_downwards_trend": "📉", + "chart_with_upwards_trend": "📈", + "chart": "💹", + "mega": "📣", + "checkered_flag": "🏁", + "accept": "🉑", + "ideograph_advantage": "🉐", + "congratulations": "㊗", + "secret": "㊙", + "m": "Ⓜ", + "city_sunset": "🌆", + "clapper": "🎬", + "clap": "👏", + "beers": "🍻", + "clock830": "🕣", + "clock8": "🕗", + "clock1130": "🕦", + "clock11": "🕚", + "clock530": "🕠", + "clock5": "🕔", + "clock430": "🕟", + "clock4": "🕓", + "clock930": "🕤", + "clock9": "🕘", + "clock130": "🕜", + "clock1": "🕐", + "clock730": "🕢", + "clock7": "🕖", + "clock630": "🕡", + "clock6": "🕕", + "clock1030": "🕥", + "clock10": "🕙", + "clock330": "🕞", + "clock3": "🕒", + "clock1230": "🕧", + "clock12": "🕛", + "clock230": "🕝", + "clock2": "🕑", + "arrows_clockwise": "🔃", + "repeat": "🔁", + "repeat_one": "🔂", + "closed_lock_with_key": "🔐", + "mailbox_closed": "📪", + "mailbox": "📫", + "cloud_with_tornado": "🌪", + "cocktail": "🍸", + "boom": "💥", + "compression": "🗜", + "confounded": "😖", + "confused": "😕", + "rice": "🍚", + "cow2": "🐄", + "cricket_bat_and_ball": "🏏", + "x": "❌", + "cry": "😢", + "curry": "🍛", + "dagger_knife": "🗡", + "dancer": "💃", + "dark_sunglasses": "🕶", + "dash": "💨", + "truck": "🚚", + "derelict_house_building": "🏚", + "diamond_shape_with_a_dot_inside": "💠", + "dart": "🎯", + "disappointed_relieved": "😥", + "disappointed": "😞", + "do_not_litter": "🚯", + "dog2": "🐕", + "flipper": "🐬", + "loop": "➿", + "bangbang": "‼", + "double_vertical_bar": "⏸", + "dove_of_peace": "🕊", + "small_red_triangle_down": "🔻", + "arrow_down_small": "🔽", + "arrow_down": "⬇", + "dromedary_camel": "🐪", + "e__mail": "📧", + "corn": "🌽", + "ear_of_rice": "🌾", + "earth_americas": "🌎", + "earth_asia": "🌏", + "earth_africa": "🌍", + "eight_pointed_black_star": "✴", + "eight_spoked_asterisk": "✳", + "eject_symbol": "⏏", + "bulb": "💡", + "emoji_modifier_fitzpatrick_type__1__2": "🏻", + "emoji_modifier_fitzpatrick_type__3": "🏼", + "emoji_modifier_fitzpatrick_type__4": "🏽", + "emoji_modifier_fitzpatrick_type__5": "🏾", + "emoji_modifier_fitzpatrick_type__6": "🏿", + "end": "🔚", + "email": "✉", + "european_castle": "🏰", + "european_post_office": "🏤", + "interrobang": "⁉", + "expressionless": "😑", + "eyeglasses": "👓", + "massage": "💆", + "yum": "😋", + "scream": "😱", + "kissing_heart": "😘", + "sweat": "😓", + "face_with_head__bandage": "🤕", + "triumph": "😤", + "mask": "😷", + "no_good": "🙅", + "ok_woman": "🙆", + "open_mouth": "😮", + "cold_sweat": "😰", + "stuck_out_tongue": "😛", + "stuck_out_tongue_closed_eyes": "😝", + "stuck_out_tongue_winking_eye": "😜", + "joy": "😂", + "no_mouth": "😶", + "santa": "🎅", + "fax": "📠", + "fearful": "😨", + "field_hockey_stick_and_ball": "🏑", + "first_quarter_moon_with_face": "🌛", + "fish_cake": "🍥", + "fishing_pole_and_fish": "🎣", + "facepunch": "👊", + "punch": "👊", + "flag_for_afghanistan": "🇦🇫", + "flag_for_albania": "🇦🇱", + "flag_for_algeria": "🇩🇿", + "flag_for_american_samoa": "🇦🇸", + "flag_for_andorra": "🇦🇩", + "flag_for_angola": "🇦🇴", + "flag_for_anguilla": "🇦🇮", + "flag_for_antarctica": "🇦🇶", + "flag_for_antigua_&_barbuda": "🇦🇬", + "flag_for_argentina": "🇦🇷", + "flag_for_armenia": "🇦🇲", + "flag_for_aruba": "🇦🇼", + "flag_for_ascension_island": "🇦🇨", + "flag_for_australia": "🇦🇺", + "flag_for_austria": "🇦🇹", + "flag_for_azerbaijan": "🇦🇿", + "flag_for_bahamas": "🇧🇸", + "flag_for_bahrain": "🇧🇭", + "flag_for_bangladesh": "🇧🇩", + "flag_for_barbados": "🇧🇧", + "flag_for_belarus": "🇧🇾", + "flag_for_belgium": "🇧🇪", + "flag_for_belize": "🇧🇿", + "flag_for_benin": "🇧🇯", + "flag_for_bermuda": "🇧🇲", + "flag_for_bhutan": "🇧🇹", + "flag_for_bolivia": "🇧🇴", + "flag_for_bosnia_&_herzegovina": "🇧🇦", + "flag_for_botswana": "🇧🇼", + "flag_for_bouvet_island": "🇧🇻", + "flag_for_brazil": "🇧🇷", + "flag_for_british_indian_ocean_territory": "🇮🇴", + "flag_for_british_virgin_islands": "🇻🇬", + "flag_for_brunei": "🇧🇳", + "flag_for_bulgaria": "🇧🇬", + "flag_for_burkina_faso": "🇧🇫", + "flag_for_burundi": "🇧🇮", + "flag_for_cambodia": "🇰🇭", + "flag_for_cameroon": "🇨🇲", + "flag_for_canada": "🇨🇦", + "flag_for_canary_islands": "🇮🇨", + "flag_for_cape_verde": "🇨🇻", + "flag_for_caribbean_netherlands": "🇧🇶", + "flag_for_cayman_islands": "🇰🇾", + "flag_for_central_african_republic": "🇨🇫", + "flag_for_ceuta_&_melilla": "🇪🇦", + "flag_for_chad": "🇹🇩", + "flag_for_chile": "🇨🇱", + "flag_for_china": "🇨🇳", + "flag_for_christmas_island": "🇨🇽", + "flag_for_clipperton_island": "🇨🇵", + "flag_for_cocos__islands": "🇨🇨", + "flag_for_colombia": "🇨🇴", + "flag_for_comoros": "🇰🇲", + "flag_for_congo____brazzaville": "🇨🇬", + "flag_for_congo____kinshasa": "🇨🇩", + "flag_for_cook_islands": "🇨🇰", + "flag_for_costa_rica": "🇨🇷", + "flag_for_croatia": "🇭🇷", + "flag_for_cuba": "🇨🇺", + "flag_for_curaçao": "🇨🇼", + "flag_for_cyprus": "🇨🇾", + "flag_for_czech_republic": "🇨🇿", + "flag_for_côte_d’ivoire": "🇨🇮", + "flag_for_denmark": "🇩🇰", + "flag_for_diego_garcia": "🇩🇬", + "flag_for_djibouti": "🇩🇯", + "flag_for_dominica": "🇩🇲", + "flag_for_dominican_republic": "🇩🇴", + "flag_for_ecuador": "🇪🇨", + "flag_for_egypt": "🇪🇬", + "flag_for_el_salvador": "🇸🇻", + "flag_for_equatorial_guinea": "🇬🇶", + "flag_for_eritrea": "🇪🇷", + "flag_for_estonia": "🇪🇪", + "flag_for_ethiopia": "🇪🇹", + "flag_for_european_union": "🇪🇺", + "flag_for_falkland_islands": "🇫🇰", + "flag_for_faroe_islands": "🇫🇴", + "flag_for_fiji": "🇫🇯", + "flag_for_finland": "🇫🇮", + "flag_for_france": "🇫🇷", + "flag_for_french_guiana": "🇬🇫", + "flag_for_french_polynesia": "🇵🇫", + "flag_for_french_southern_territories": "🇹🇫", + "flag_for_gabon": "🇬🇦", + "flag_for_gambia": "🇬🇲", + "flag_for_georgia": "🇬🇪", + "flag_for_germany": "🇩🇪", + "flag_for_ghana": "🇬🇭", + "flag_for_gibraltar": "🇬🇮", + "flag_for_greece": "🇬🇷", + "flag_for_greenland": "🇬🇱", + "flag_for_grenada": "🇬🇩", + "flag_for_guadeloupe": "🇬🇵", + "flag_for_guam": "🇬🇺", + "flag_for_guatemala": "🇬🇹", + "flag_for_guernsey": "🇬🇬", + "flag_for_guinea": "🇬🇳", + "flag_for_guinea__bissau": "🇬🇼", + "flag_for_guyana": "🇬🇾", + "flag_for_haiti": "🇭🇹", + "flag_for_heard_&_mcdonald_islands": "🇭🇲", + "flag_for_honduras": "🇭🇳", + "flag_for_hong_kong": "🇭🇰", + "flag_for_hungary": "🇭🇺", + "flag_for_iceland": "🇮🇸", + "flag_for_india": "🇮🇳", + "flag_for_indonesia": "🇮🇩", + "flag_for_iran": "🇮🇷", + "flag_for_iraq": "🇮🇶", + "flag_for_ireland": "🇮🇪", + "flag_for_isle_of_man": "🇮🇲", + "flag_for_israel": "🇮🇱", + "flag_for_italy": "🇮🇹", + "flag_for_jamaica": "🇯🇲", + "flag_for_japan": "🇯🇵", + "flag_for_jersey": "🇯🇪", + "flag_for_jordan": "🇯🇴", + "flag_for_kazakhstan": "🇰🇿", + "flag_for_kenya": "🇰🇪", + "flag_for_kiribati": "🇰🇮", + "flag_for_kosovo": "🇽🇰", + "flag_for_kuwait": "🇰🇼", + "flag_for_kyrgyzstan": "🇰🇬", + "flag_for_laos": "🇱🇦", + "flag_for_latvia": "🇱🇻", + "flag_for_lebanon": "🇱🇧", + "flag_for_lesotho": "🇱🇸", + "flag_for_liberia": "🇱🇷", + "flag_for_libya": "🇱🇾", + "flag_for_liechtenstein": "🇱🇮", + "flag_for_lithuania": "🇱🇹", + "flag_for_luxembourg": "🇱🇺", + "flag_for_macau": "🇲🇴", + "flag_for_macedonia": "🇲🇰", + "flag_for_madagascar": "🇲🇬", + "flag_for_malawi": "🇲🇼", + "flag_for_malaysia": "🇲🇾", + "flag_for_maldives": "🇲🇻", + "flag_for_mali": "🇲🇱", + "flag_for_malta": "🇲🇹", + "flag_for_marshall_islands": "🇲🇭", + "flag_for_martinique": "🇲🇶", + "flag_for_mauritania": "🇲🇷", + "flag_for_mauritius": "🇲🇺", + "flag_for_mayotte": "🇾🇹", + "flag_for_mexico": "🇲🇽", + "flag_for_micronesia": "🇫🇲", + "flag_for_moldova": "🇲🇩", + "flag_for_monaco": "🇲🇨", + "flag_for_mongolia": "🇲🇳", + "flag_for_montenegro": "🇲🇪", + "flag_for_montserrat": "🇲🇸", + "flag_for_morocco": "🇲🇦", + "flag_for_mozambique": "🇲🇿", + "flag_for_myanmar": "🇲🇲", + "flag_for_namibia": "🇳🇦", + "flag_for_nauru": "🇳🇷", + "flag_for_nepal": "🇳🇵", + "flag_for_netherlands": "🇳🇱", + "flag_for_new_caledonia": "🇳🇨", + "flag_for_new_zealand": "🇳🇿", + "flag_for_nicaragua": "🇳🇮", + "flag_for_niger": "🇳🇪", + "flag_for_nigeria": "🇳🇬", + "flag_for_niue": "🇳🇺", + "flag_for_norfolk_island": "🇳🇫", + "flag_for_north_korea": "🇰🇵", + "flag_for_northern_mariana_islands": "🇲🇵", + "flag_for_norway": "🇳🇴", + "flag_for_oman": "🇴🇲", + "flag_for_pakistan": "🇵🇰", + "flag_for_palau": "🇵🇼", + "flag_for_palestinian_territories": "🇵🇸", + "flag_for_panama": "🇵🇦", + "flag_for_papua_new_guinea": "🇵🇬", + "flag_for_paraguay": "🇵🇾", + "flag_for_peru": "🇵🇪", + "flag_for_philippines": "🇵🇭", + "flag_for_pitcairn_islands": "🇵🇳", + "flag_for_poland": "🇵🇱", + "flag_for_portugal": "🇵🇹", + "flag_for_puerto_rico": "🇵🇷", + "flag_for_qatar": "🇶🇦", + "flag_for_romania": "🇷🇴", + "flag_for_russia": "🇷🇺", + "flag_for_rwanda": "🇷🇼", + "flag_for_réunion": "🇷🇪", + "flag_for_samoa": "🇼🇸", + "flag_for_san_marino": "🇸🇲", + "flag_for_saudi_arabia": "🇸🇦", + "flag_for_senegal": "🇸🇳", + "flag_for_serbia": "🇷🇸", + "flag_for_seychelles": "🇸🇨", + "flag_for_sierra_leone": "🇸🇱", + "flag_for_singapore": "🇸🇬", + "flag_for_sint_maarten": "🇸🇽", + "flag_for_slovakia": "🇸🇰", + "flag_for_slovenia": "🇸🇮", + "flag_for_solomon_islands": "🇸🇧", + "flag_for_somalia": "🇸🇴", + "flag_for_south_africa": "🇿🇦", + "flag_for_south_georgia_&_south_sandwich_islands": "🇬🇸", + "flag_for_south_korea": "🇰🇷", + "flag_for_south_sudan": "🇸🇸", + "flag_for_spain": "🇪🇸", + "flag_for_sri_lanka": "🇱🇰", + "flag_for_st._barthélemy": "🇧🇱", + "flag_for_st._helena": "🇸🇭", + "flag_for_st._kitts_&_nevis": "🇰🇳", + "flag_for_st._lucia": "🇱🇨", + "flag_for_st._martin": "🇲🇫", + "flag_for_st._pierre_&_miquelon": "🇵🇲", + "flag_for_st._vincent_&_grenadines": "🇻🇨", + "flag_for_sudan": "🇸🇩", + "flag_for_suriname": "🇸🇷", + "flag_for_svalbard_&_jan_mayen": "🇸🇯", + "flag_for_swaziland": "🇸🇿", + "flag_for_sweden": "🇸🇪", + "flag_for_switzerland": "🇨🇭", + "flag_for_syria": "🇸🇾", + "flag_for_são_tomé_&_príncipe": "🇸🇹", + "flag_for_taiwan": "🇹🇼", + "flag_for_tajikistan": "🇹🇯", + "flag_for_tanzania": "🇹🇿", + "flag_for_thailand": "🇹🇭", + "flag_for_timor__leste": "🇹🇱", + "flag_for_togo": "🇹🇬", + "flag_for_tokelau": "🇹🇰", + "flag_for_tonga": "🇹🇴", + "flag_for_trinidad_&_tobago": "🇹🇹", + "flag_for_tristan_da_cunha": "🇹🇦", + "flag_for_tunisia": "🇹🇳", + "flag_for_turkey": "🇹🇷", + "flag_for_turkmenistan": "🇹🇲", + "flag_for_turks_&_caicos_islands": "🇹🇨", + "flag_for_tuvalu": "🇹🇻", + "flag_for_u.s._outlying_islands": "🇺🇲", + "flag_for_u.s._virgin_islands": "🇻🇮", + "flag_for_uganda": "🇺🇬", + "flag_for_ukraine": "🇺🇦", + "flag_for_united_arab_emirates": "🇦🇪", + "flag_for_united_kingdom": "🇬🇧", + "flag_for_united_states": "🇺🇸", + "flag_for_uruguay": "🇺🇾", + "flag_for_uzbekistan": "🇺🇿", + "flag_for_vanuatu": "🇻🇺", + "flag_for_vatican_city": "🇻🇦", + "flag_for_venezuela": "🇻🇪", + "flag_for_vietnam": "🇻🇳", + "flag_for_wallis_&_futuna": "🇼🇫", + "flag_for_western_sahara": "🇪🇭", + "flag_for_yemen": "🇾🇪", + "flag_for_zambia": "🇿🇲", + "flag_for_zimbabwe": "🇿🇼", + "flag_for_åland_islands": "🇦🇽", + "golf": "⛳", + "fleur__de__lis": "⚜", + "muscle": "💪", + "flushed": "😳", + "frame_with_picture": "🖼", + "fries": "🍟", + "frog": "🐸", + "hatched_chick": "🐥", + "frowning": "😦", + "fuelpump": "⛽", + "full_moon_with_face": "🌝", + "gem": "💎", + "star2": "🌟", + "golfer": "🏌", + "mortar_board": "🎓", + "grimacing": "😬", + "smile_cat": "😸", + "grinning": "😀", + "grin": "😁", + "heartpulse": "💗", + "guardsman": "💂", + "haircut": "💇", + "hamster": "🐹", + "raising_hand": "🙋", + "headphones": "🎧", + "hear_no_evil": "🙉", + "cupid": "💘", + "gift_heart": "💝", + "heart": "❤", + "exclamation": "❗", + "heavy_exclamation_mark": "❗", + "heavy_heart_exclamation_mark_ornament": "❣", + "o": "⭕", + "helm_symbol": "⎈", + "helmet_with_white_cross": "⛑", + "high_heel": "👠", + "bullettrain_side": "🚄", + "bullettrain_front": "🚅", + "high_brightness": "🔆", + "zap": "⚡", + "hocho": "🔪", + "knife": "🔪", + "bee": "🐝", + "traffic_light": "🚥", + "racehorse": "🐎", + "coffee": "☕", + "hotsprings": "♨", + "hourglass": "⌛", + "hourglass_flowing_sand": "⏳", + "house_buildings": "🏘", + "100": "💯", + "hushed": "😯", + "ice_hockey_stick_and_puck": "🏒", + "imp": "👿", + "information_desk_person": "💁", + "information_source": "ℹ", + "capital_abcd": "🔠", + "abc": "🔤", + "abcd": "🔡", + "1234": "🔢", + "symbols": "🔣", + "izakaya_lantern": "🏮", + "lantern": "🏮", + "jack_o_lantern": "🎃", + "dolls": "🎎", + "japanese_goblin": "👺", + "japanese_ogre": "👹", + "beginner": "🔰", + "zero": "0️⃣", + "one": "1️⃣", + "ten": "🔟", + "two": "2️⃣", + "three": "3️⃣", + "four": "4️⃣", + "five": "5️⃣", + "six": "6️⃣", + "seven": "7️⃣", + "eight": "8️⃣", + "nine": "9️⃣", + "couplekiss": "💏", + "kissing_cat": "😽", + "kissing": "😗", + "kissing_closed_eyes": "😚", + "kissing_smiling_eyes": "😙", + "beetle": "🐞", + "large_blue_circle": "🔵", + "last_quarter_moon_with_face": "🌜", + "leaves": "🍃", + "mag": "🔍", + "left_right_arrow": "↔", + "leftwards_arrow_with_hook": "↩", + "arrow_left": "⬅", + "lock": "🔒", + "lock_with_ink_pen": "🔏", + "sob": "😭", + "low_brightness": "🔅", + "lower_left_ballpoint_pen": "🖊", + "lower_left_crayon": "🖍", + "lower_left_fountain_pen": "🖋", + "lower_left_paintbrush": "🖌", + "mahjong": "🀄", + "couple": "👫", + "man_in_business_suit_levitating": "🕴", + "man_with_gua_pi_mao": "👲", + "man_with_turban": "👳", + "mans_shoe": "👞", + "shoe": "👞", + "menorah_with_nine_branches": "🕎", + "mens": "🚹", + "minidisc": "💽", + "iphone": "📱", + "calling": "📲", + "money__mouth_face": "🤑", + "moneybag": "💰", + "rice_scene": "🎑", + "mountain_bicyclist": "🚵", + "mouse2": "🐁", + "lips": "👄", + "moyai": "🗿", + "notes": "🎶", + "nail_care": "💅", + "ab": "🆎", + "negative_squared_cross_mark": "❎", + "a": "🅰", + "b": "🅱", + "o2": "🅾", + "parking": "🅿", + "new_moon_with_face": "🌚", + "no_entry_sign": "🚫", + "underage": "🔞", + "non__potable_water": "🚱", + "arrow_upper_right": "↗", + "arrow_upper_left": "↖", + "office": "🏢", + "older_man": "👴", + "older_woman": "👵", + "om_symbol": "🕉", + "on": "🔛", + "book": "📖", + "unlock": "🔓", + "mailbox_with_no_mail": "📭", + "mailbox_with_mail": "📬", + "cd": "💿", + "tada": "🎉", + "feet": "🐾", + "walking": "🚶", + "pencil2": "✏", + "pensive": "😔", + "persevere": "😣", + "bow": "🙇", + "raised_hands": "🙌", + "person_with_ball": "⛹", + "person_with_blond_hair": "👱", + "pray": "🙏", + "person_with_pouting_face": "🙎", + "computer": "💻", + "pig2": "🐖", + "hankey": "💩", + "poop": "💩", + "shit": "💩", + "bamboo": "🎍", + "gun": "🔫", + "black_joker": "🃏", + "rotating_light": "🚨", + "cop": "👮", + "stew": "🍲", + "pouch": "👝", + "pouting_cat": "😾", + "rage": "😡", + "put_litter_in_its_place": "🚮", + "rabbit2": "🐇", + "racing_motorcycle": "🏍", + "radioactive_sign": "☢", + "fist": "✊", + "hand": "✋", + "raised_hand_with_fingers_splayed": "🖐", + "raised_hand_with_part_between_middle_and_ring_fingers": "🖖", + "blue_car": "🚙", + "apple": "🍎", + "relieved": "😌", + "reversed_hand_with_middle_finger_extended": "🖕", + "mag_right": "🔎", + "arrow_right_hook": "↪", + "sweet_potato": "🍠", + "robot": "🤖", + "rolled__up_newspaper": "🗞", + "rowboat": "🚣", + "runner": "🏃", + "running": "🏃", + "running_shirt_with_sash": "🎽", + "boat": "⛵", + "scales": "⚖", + "school_satchel": "🎒", + "scorpius": "♏", + "see_no_evil": "🙈", + "sheep": "🐑", + "stars": "🌠", + "cake": "🍰", + "six_pointed_star": "🔯", + "ski": "🎿", + "sleeping_accommodation": "🛌", + "sleeping": "😴", + "sleepy": "😪", + "sleuth_or_spy": "🕵", + "heart_eyes_cat": "😻", + "smiley_cat": "😺", + "innocent": "😇", + "heart_eyes": "😍", + "smiling_imp": "😈", + "smiley": "😃", + "sweat_smile": "😅", + "smile": "😄", + "laughing": "😆", + "satisfied": "😆", + "blush": "😊", + "smirk": "😏", + "smoking": "🚬", + "snow_capped_mountain": "🏔", + "soccer": "⚽", + "icecream": "🍦", + "soon": "🔜", + "arrow_lower_right": "↘", + "arrow_lower_left": "↙", + "speak_no_evil": "🙊", + "speaker": "🔈", + "mute": "🔇", + "sound": "🔉", + "loud_sound": "🔊", + "speaking_head_in_silhouette": "🗣", + "spiral_calendar_pad": "🗓", + "spiral_note_pad": "🗒", + "shell": "🐚", + "sweat_drops": "💦", + "u5272": "🈹", + "u5408": "🈴", + "u55b6": "🈺", + "u6307": "🈯", + "u6708": "🈷", + "u6709": "🈶", + "u6e80": "🈵", + "u7121": "🈚", + "u7533": "🈸", + "u7981": "🈲", + "u7a7a": "🈳", + "cl": "🆑", + "cool": "🆒", + "free": "🆓", + "id": "🆔", + "koko": "🈁", + "sa": "🈂", + "new": "🆕", + "ng": "🆖", + "ok": "🆗", + "sos": "🆘", + "up": "🆙", + "vs": "🆚", + "steam_locomotive": "🚂", + "ramen": "🍜", + "partly_sunny": "⛅", + "city_sunrise": "🌇", + "surfer": "🏄", + "swimmer": "🏊", + "shirt": "👕", + "tshirt": "👕", + "table_tennis_paddle_and_ball": "🏓", + "tea": "🍵", + "tv": "📺", + "three_button_mouse": "🖱", + "+1": "👍", + "thumbsup": "👍", + "__1": "👎", + "-1": "👎", + "thumbsdown": "👎", + "thunder_cloud_and_rain": "⛈", + "tiger2": "🐅", + "tophat": "🎩", + "top": "🔝", + "tm": "™", + "train2": "🚆", + "triangular_flag_on_post": "🚩", + "trident": "🔱", + "twisted_rightwards_arrows": "🔀", + "unamused": "😒", + "small_red_triangle": "🔺", + "arrow_up_small": "🔼", + "arrow_up_down": "↕", + "upside__down_face": "🙃", + "arrow_up": "⬆", + "v": "✌", + "vhs": "📼", + "wc": "🚾", + "ocean": "🌊", + "waving_black_flag": "🏴", + "wave": "👋", + "waving_white_flag": "🏳", + "moon": "🌔", + "scream_cat": "🙀", + "weary": "😩", + "weight_lifter": "🏋", + "whale2": "🐋", + "wheelchair": "♿", + "point_down": "👇", + "grey_exclamation": "❕", + "white_frowning_face": "☹", + "white_check_mark": "✅", + "point_left": "👈", + "white_medium_small_square": "◽", + "star": "⭐", + "grey_question": "❔", + "point_right": "👉", + "relaxed": "☺", + "white_sun_behind_cloud": "🌥", + "white_sun_behind_cloud_with_rain": "🌦", + "white_sun_with_small_cloud": "🌤", + "point_up_2": "👆", + "point_up": "☝", + "wind_blowing_face": "🌬", + "wink": "😉", + "wolf": "🐺", + "dancers": "👯", + "boot": "👢", + "womans_clothes": "👚", + "womans_hat": "👒", + "sandal": "👡", + "womens": "🚺", + "worried": "😟", + "gift": "🎁", + "zipper__mouth_face": "🤐", + "regional_indicator_a": "🇦", + "regional_indicator_b": "🇧", + "regional_indicator_c": "🇨", + "regional_indicator_d": "🇩", + "regional_indicator_e": "🇪", + "regional_indicator_f": "🇫", + "regional_indicator_g": "🇬", + "regional_indicator_h": "🇭", + "regional_indicator_i": "🇮", + "regional_indicator_j": "🇯", + "regional_indicator_k": "🇰", + "regional_indicator_l": "🇱", + "regional_indicator_m": "🇲", + "regional_indicator_n": "🇳", + "regional_indicator_o": "🇴", + "regional_indicator_p": "🇵", + "regional_indicator_q": "🇶", + "regional_indicator_r": "🇷", + "regional_indicator_s": "🇸", + "regional_indicator_t": "🇹", + "regional_indicator_u": "🇺", + "regional_indicator_v": "🇻", + "regional_indicator_w": "🇼", + "regional_indicator_x": "🇽", + "regional_indicator_y": "🇾", + "regional_indicator_z": "🇿", +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py new file mode 100644 index 0000000..bb2cafa --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py @@ -0,0 +1,32 @@ +from typing import Callable, Match, Optional +import re + +from ._emoji_codes import EMOJI + + +_ReStringMatch = Match[str] # regex match object +_ReSubCallable = Callable[[_ReStringMatch], str] # Callable invoked by re.sub +_EmojiSubMethod = Callable[[_ReSubCallable, str], str] # Sub method of a compiled re + + +def _emoji_replace( + text: str, + default_variant: Optional[str] = None, + _emoji_sub: _EmojiSubMethod = re.compile(r"(:(\S*?)(?:(?:\-)(emoji|text))?:)").sub, +) -> str: + """Replace emoji code in text.""" + get_emoji = EMOJI.__getitem__ + variants = {"text": "\uFE0E", "emoji": "\uFE0F"} + get_variant = variants.get + default_variant_code = variants.get(default_variant, "") if default_variant else "" + + def do_replace(match: Match[str]) -> str: + emoji_code, emoji_name, variant = match.groups() + try: + return get_emoji(emoji_name.lower()) + get_variant( + variant, default_variant_code + ) + except KeyError: + return emoji_code + + return _emoji_sub(do_replace, text) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py new file mode 100644 index 0000000..094d2dc --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py @@ -0,0 +1,76 @@ +CONSOLE_HTML_FORMAT = """\ + + + + + + + +
{code}
+ + +""" + +CONSOLE_SVG_FORMAT = """\ + + + + + + + + + {lines} + + + {chrome} + + {backgrounds} + + {matrix} + + + +""" + +_SVG_FONT_FAMILY = "Rich Fira Code" +_SVG_CLASSES_PREFIX = "rich-svg" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py new file mode 100644 index 0000000..cbd6da9 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py @@ -0,0 +1,10 @@ +from typing import Any + + +def load_ipython_extension(ip: Any) -> None: # pragma: no cover + # prevent circular import + from pip._vendor.rich.pretty import install + from pip._vendor.rich.traceback import install as tr_install + + install() + tr_install() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py new file mode 100644 index 0000000..b17ee65 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from typing import IO, Callable + + +def get_fileno(file_like: IO[str]) -> int | None: + """Get fileno() from a file, accounting for poorly implemented file-like objects. + + Args: + file_like (IO): A file-like object. + + Returns: + int | None: The result of fileno if available, or None if operation failed. + """ + fileno: Callable[[], int] | None = getattr(file_like, "fileno", None) + if fileno is not None: + try: + return fileno() + except Exception: + # `fileno` is documented as potentially raising a OSError + # Alas, from the issues, there are so many poorly implemented file-like objects, + # that `fileno()` can raise just about anything. + return None + return None diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py new file mode 100644 index 0000000..30446ce --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py @@ -0,0 +1,270 @@ +from __future__ import absolute_import + +import inspect +from inspect import cleandoc, getdoc, getfile, isclass, ismodule, signature +from typing import Any, Collection, Iterable, Optional, Tuple, Type, Union + +from .console import Group, RenderableType +from .control import escape_control_codes +from .highlighter import ReprHighlighter +from .jupyter import JupyterMixin +from .panel import Panel +from .pretty import Pretty +from .table import Table +from .text import Text, TextType + + +def _first_paragraph(doc: str) -> str: + """Get the first paragraph from a docstring.""" + paragraph, _, _ = doc.partition("\n\n") + return paragraph + + +class Inspect(JupyterMixin): + """A renderable to inspect any Python Object. + + Args: + obj (Any): An object to inspect. + title (str, optional): Title to display over inspect result, or None use type. Defaults to None. + help (bool, optional): Show full help text rather than just first paragraph. Defaults to False. + methods (bool, optional): Enable inspection of callables. Defaults to False. + docs (bool, optional): Also render doc strings. Defaults to True. + private (bool, optional): Show private attributes (beginning with underscore). Defaults to False. + dunder (bool, optional): Show attributes starting with double underscore. Defaults to False. + sort (bool, optional): Sort attributes alphabetically. Defaults to True. + all (bool, optional): Show all attributes. Defaults to False. + value (bool, optional): Pretty print value of object. Defaults to True. + """ + + def __init__( + self, + obj: Any, + *, + title: Optional[TextType] = None, + help: bool = False, + methods: bool = False, + docs: bool = True, + private: bool = False, + dunder: bool = False, + sort: bool = True, + all: bool = True, + value: bool = True, + ) -> None: + self.highlighter = ReprHighlighter() + self.obj = obj + self.title = title or self._make_title(obj) + if all: + methods = private = dunder = True + self.help = help + self.methods = methods + self.docs = docs or help + self.private = private or dunder + self.dunder = dunder + self.sort = sort + self.value = value + + def _make_title(self, obj: Any) -> Text: + """Make a default title.""" + title_str = ( + str(obj) + if (isclass(obj) or callable(obj) or ismodule(obj)) + else str(type(obj)) + ) + title_text = self.highlighter(title_str) + return title_text + + def __rich__(self) -> Panel: + return Panel.fit( + Group(*self._render()), + title=self.title, + border_style="scope.border", + padding=(0, 1), + ) + + def _get_signature(self, name: str, obj: Any) -> Optional[Text]: + """Get a signature for a callable.""" + try: + _signature = str(signature(obj)) + ":" + except ValueError: + _signature = "(...)" + except TypeError: + return None + + source_filename: Optional[str] = None + try: + source_filename = getfile(obj) + except (OSError, TypeError): + # OSError is raised if obj has no source file, e.g. when defined in REPL. + pass + + callable_name = Text(name, style="inspect.callable") + if source_filename: + callable_name.stylize(f"link file://{source_filename}") + signature_text = self.highlighter(_signature) + + qualname = name or getattr(obj, "__qualname__", name) + + # If obj is a module, there may be classes (which are callable) to display + if inspect.isclass(obj): + prefix = "class" + elif inspect.iscoroutinefunction(obj): + prefix = "async def" + else: + prefix = "def" + + qual_signature = Text.assemble( + (f"{prefix} ", f"inspect.{prefix.replace(' ', '_')}"), + (qualname, "inspect.callable"), + signature_text, + ) + + return qual_signature + + def _render(self) -> Iterable[RenderableType]: + """Render object.""" + + def sort_items(item: Tuple[str, Any]) -> Tuple[bool, str]: + key, (_error, value) = item + return (callable(value), key.strip("_").lower()) + + def safe_getattr(attr_name: str) -> Tuple[Any, Any]: + """Get attribute or any exception.""" + try: + return (None, getattr(obj, attr_name)) + except Exception as error: + return (error, None) + + obj = self.obj + keys = dir(obj) + total_items = len(keys) + if not self.dunder: + keys = [key for key in keys if not key.startswith("__")] + if not self.private: + keys = [key for key in keys if not key.startswith("_")] + not_shown_count = total_items - len(keys) + items = [(key, safe_getattr(key)) for key in keys] + if self.sort: + items.sort(key=sort_items) + + items_table = Table.grid(padding=(0, 1), expand=False) + items_table.add_column(justify="right") + add_row = items_table.add_row + highlighter = self.highlighter + + if callable(obj): + signature = self._get_signature("", obj) + if signature is not None: + yield signature + yield "" + + if self.docs: + _doc = self._get_formatted_doc(obj) + if _doc is not None: + doc_text = Text(_doc, style="inspect.help") + doc_text = highlighter(doc_text) + yield doc_text + yield "" + + if self.value and not (isclass(obj) or callable(obj) or ismodule(obj)): + yield Panel( + Pretty(obj, indent_guides=True, max_length=10, max_string=60), + border_style="inspect.value.border", + ) + yield "" + + for key, (error, value) in items: + key_text = Text.assemble( + ( + key, + "inspect.attr.dunder" if key.startswith("__") else "inspect.attr", + ), + (" =", "inspect.equals"), + ) + if error is not None: + warning = key_text.copy() + warning.stylize("inspect.error") + add_row(warning, highlighter(repr(error))) + continue + + if callable(value): + if not self.methods: + continue + + _signature_text = self._get_signature(key, value) + if _signature_text is None: + add_row(key_text, Pretty(value, highlighter=highlighter)) + else: + if self.docs: + docs = self._get_formatted_doc(value) + if docs is not None: + _signature_text.append("\n" if "\n" in docs else " ") + doc = highlighter(docs) + doc.stylize("inspect.doc") + _signature_text.append(doc) + + add_row(key_text, _signature_text) + else: + add_row(key_text, Pretty(value, highlighter=highlighter)) + if items_table.row_count: + yield items_table + elif not_shown_count: + yield Text.from_markup( + f"[b cyan]{not_shown_count}[/][i] attribute(s) not shown.[/i] " + f"Run [b][magenta]inspect[/]([not b]inspect[/])[/b] for options." + ) + + def _get_formatted_doc(self, object_: Any) -> Optional[str]: + """ + Extract the docstring of an object, process it and returns it. + The processing consists in cleaning up the doctring's indentation, + taking only its 1st paragraph if `self.help` is not True, + and escape its control codes. + + Args: + object_ (Any): the object to get the docstring from. + + Returns: + Optional[str]: the processed docstring, or None if no docstring was found. + """ + docs = getdoc(object_) + if docs is None: + return None + docs = cleandoc(docs).strip() + if not self.help: + docs = _first_paragraph(docs) + return escape_control_codes(docs) + + +def get_object_types_mro(obj: Union[object, Type[Any]]) -> Tuple[type, ...]: + """Returns the MRO of an object's class, or of the object itself if it's a class.""" + if not hasattr(obj, "__mro__"): + # N.B. we cannot use `if type(obj) is type` here because it doesn't work with + # some types of classes, such as the ones that use abc.ABCMeta. + obj = type(obj) + return getattr(obj, "__mro__", ()) + + +def get_object_types_mro_as_strings(obj: object) -> Collection[str]: + """ + Returns the MRO of an object's class as full qualified names, or of the object itself if it's a class. + + Examples: + `object_types_mro_as_strings(JSONDecoder)` will return `['json.decoder.JSONDecoder', 'builtins.object']` + """ + return [ + f'{getattr(type_, "__module__", "")}.{getattr(type_, "__qualname__", "")}' + for type_ in get_object_types_mro(obj) + ] + + +def is_object_one_of_types( + obj: object, fully_qualified_types_names: Collection[str] +) -> bool: + """ + Returns `True` if the given object's class (or the object itself, if it's a class) has one of the + fully qualified names in its MRO. + """ + for type_name in get_object_types_mro_as_strings(obj): + if type_name in fully_qualified_types_names: + return True + return False diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py new file mode 100644 index 0000000..fc16c84 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py @@ -0,0 +1,94 @@ +from datetime import datetime +from typing import Iterable, List, Optional, TYPE_CHECKING, Union, Callable + + +from .text import Text, TextType + +if TYPE_CHECKING: + from .console import Console, ConsoleRenderable, RenderableType + from .table import Table + +FormatTimeCallable = Callable[[datetime], Text] + + +class LogRender: + def __init__( + self, + show_time: bool = True, + show_level: bool = False, + show_path: bool = True, + time_format: Union[str, FormatTimeCallable] = "[%x %X]", + omit_repeated_times: bool = True, + level_width: Optional[int] = 8, + ) -> None: + self.show_time = show_time + self.show_level = show_level + self.show_path = show_path + self.time_format = time_format + self.omit_repeated_times = omit_repeated_times + self.level_width = level_width + self._last_time: Optional[Text] = None + + def __call__( + self, + console: "Console", + renderables: Iterable["ConsoleRenderable"], + log_time: Optional[datetime] = None, + time_format: Optional[Union[str, FormatTimeCallable]] = None, + level: TextType = "", + path: Optional[str] = None, + line_no: Optional[int] = None, + link_path: Optional[str] = None, + ) -> "Table": + from .containers import Renderables + from .table import Table + + output = Table.grid(padding=(0, 1)) + output.expand = True + if self.show_time: + output.add_column(style="log.time") + if self.show_level: + output.add_column(style="log.level", width=self.level_width) + output.add_column(ratio=1, style="log.message", overflow="fold") + if self.show_path and path: + output.add_column(style="log.path") + row: List["RenderableType"] = [] + if self.show_time: + log_time = log_time or console.get_datetime() + time_format = time_format or self.time_format + if callable(time_format): + log_time_display = time_format(log_time) + else: + log_time_display = Text(log_time.strftime(time_format)) + if log_time_display == self._last_time and self.omit_repeated_times: + row.append(Text(" " * len(log_time_display))) + else: + row.append(log_time_display) + self._last_time = log_time_display + if self.show_level: + row.append(level) + + row.append(Renderables(renderables)) + if self.show_path and path: + path_text = Text() + path_text.append( + path, style=f"link file://{link_path}" if link_path else "" + ) + if line_no: + path_text.append(":") + path_text.append( + f"{line_no}", + style=f"link file://{link_path}#{line_no}" if link_path else "", + ) + row.append(path_text) + + output.add_row(*row) + return output + + +if __name__ == "__main__": # pragma: no cover + from pip._vendor.rich.console import Console + + c = Console() + c.print("[on blue]Hello", justify="right") + c.log("[on blue]hello", justify="right") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py new file mode 100644 index 0000000..01c6caf --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py @@ -0,0 +1,43 @@ +from typing import Iterable, Tuple, TypeVar + +T = TypeVar("T") + + +def loop_first(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: + """Iterate and generate a tuple with a flag for first value.""" + iter_values = iter(values) + try: + value = next(iter_values) + except StopIteration: + return + yield True, value + for value in iter_values: + yield False, value + + +def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: + """Iterate and generate a tuple with a flag for last value.""" + iter_values = iter(values) + try: + previous_value = next(iter_values) + except StopIteration: + return + for value in iter_values: + yield False, previous_value + previous_value = value + yield True, previous_value + + +def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]: + """Iterate and generate a tuple with a flag for first and last value.""" + iter_values = iter(values) + try: + previous_value = next(iter_values) + except StopIteration: + return + first = True + for value in iter_values: + yield first, False, previous_value + first = False + previous_value = value + yield first, True, previous_value diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py new file mode 100644 index 0000000..b659673 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py @@ -0,0 +1,69 @@ +from types import TracebackType +from typing import IO, Iterable, Iterator, List, Optional, Type + + +class NullFile(IO[str]): + def close(self) -> None: + pass + + def isatty(self) -> bool: + return False + + def read(self, __n: int = 1) -> str: + return "" + + def readable(self) -> bool: + return False + + def readline(self, __limit: int = 1) -> str: + return "" + + def readlines(self, __hint: int = 1) -> List[str]: + return [] + + def seek(self, __offset: int, __whence: int = 1) -> int: + return 0 + + def seekable(self) -> bool: + return False + + def tell(self) -> int: + return 0 + + def truncate(self, __size: Optional[int] = 1) -> int: + return 0 + + def writable(self) -> bool: + return False + + def writelines(self, __lines: Iterable[str]) -> None: + pass + + def __next__(self) -> str: + return "" + + def __iter__(self) -> Iterator[str]: + return iter([""]) + + def __enter__(self) -> IO[str]: + pass + + def __exit__( + self, + __t: Optional[Type[BaseException]], + __value: Optional[BaseException], + __traceback: Optional[TracebackType], + ) -> None: + pass + + def write(self, text: str) -> int: + return 0 + + def flush(self) -> None: + pass + + def fileno(self) -> int: + return -1 + + +NULL_FILE = NullFile() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py new file mode 100644 index 0000000..3c748d3 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py @@ -0,0 +1,309 @@ +from .palette import Palette + + +# Taken from https://en.wikipedia.org/wiki/ANSI_escape_code (Windows 10 column) +WINDOWS_PALETTE = Palette( + [ + (12, 12, 12), + (197, 15, 31), + (19, 161, 14), + (193, 156, 0), + (0, 55, 218), + (136, 23, 152), + (58, 150, 221), + (204, 204, 204), + (118, 118, 118), + (231, 72, 86), + (22, 198, 12), + (249, 241, 165), + (59, 120, 255), + (180, 0, 158), + (97, 214, 214), + (242, 242, 242), + ] +) + +# # The standard ansi colors (including bright variants) +STANDARD_PALETTE = Palette( + [ + (0, 0, 0), + (170, 0, 0), + (0, 170, 0), + (170, 85, 0), + (0, 0, 170), + (170, 0, 170), + (0, 170, 170), + (170, 170, 170), + (85, 85, 85), + (255, 85, 85), + (85, 255, 85), + (255, 255, 85), + (85, 85, 255), + (255, 85, 255), + (85, 255, 255), + (255, 255, 255), + ] +) + + +# The 256 color palette +EIGHT_BIT_PALETTE = Palette( + [ + (0, 0, 0), + (128, 0, 0), + (0, 128, 0), + (128, 128, 0), + (0, 0, 128), + (128, 0, 128), + (0, 128, 128), + (192, 192, 192), + (128, 128, 128), + (255, 0, 0), + (0, 255, 0), + (255, 255, 0), + (0, 0, 255), + (255, 0, 255), + (0, 255, 255), + (255, 255, 255), + (0, 0, 0), + (0, 0, 95), + (0, 0, 135), + (0, 0, 175), + (0, 0, 215), + (0, 0, 255), + (0, 95, 0), + (0, 95, 95), + (0, 95, 135), + (0, 95, 175), + (0, 95, 215), + (0, 95, 255), + (0, 135, 0), + (0, 135, 95), + (0, 135, 135), + (0, 135, 175), + (0, 135, 215), + (0, 135, 255), + (0, 175, 0), + (0, 175, 95), + (0, 175, 135), + (0, 175, 175), + (0, 175, 215), + (0, 175, 255), + (0, 215, 0), + (0, 215, 95), + (0, 215, 135), + (0, 215, 175), + (0, 215, 215), + (0, 215, 255), + (0, 255, 0), + (0, 255, 95), + (0, 255, 135), + (0, 255, 175), + (0, 255, 215), + (0, 255, 255), + (95, 0, 0), + (95, 0, 95), + (95, 0, 135), + (95, 0, 175), + (95, 0, 215), + (95, 0, 255), + (95, 95, 0), + (95, 95, 95), + (95, 95, 135), + (95, 95, 175), + (95, 95, 215), + (95, 95, 255), + (95, 135, 0), + (95, 135, 95), + (95, 135, 135), + (95, 135, 175), + (95, 135, 215), + (95, 135, 255), + (95, 175, 0), + (95, 175, 95), + (95, 175, 135), + (95, 175, 175), + (95, 175, 215), + (95, 175, 255), + (95, 215, 0), + (95, 215, 95), + (95, 215, 135), + (95, 215, 175), + (95, 215, 215), + (95, 215, 255), + (95, 255, 0), + (95, 255, 95), + (95, 255, 135), + (95, 255, 175), + (95, 255, 215), + (95, 255, 255), + (135, 0, 0), + (135, 0, 95), + (135, 0, 135), + (135, 0, 175), + (135, 0, 215), + (135, 0, 255), + (135, 95, 0), + (135, 95, 95), + (135, 95, 135), + (135, 95, 175), + (135, 95, 215), + (135, 95, 255), + (135, 135, 0), + (135, 135, 95), + (135, 135, 135), + (135, 135, 175), + (135, 135, 215), + (135, 135, 255), + (135, 175, 0), + (135, 175, 95), + (135, 175, 135), + (135, 175, 175), + (135, 175, 215), + (135, 175, 255), + (135, 215, 0), + (135, 215, 95), + (135, 215, 135), + (135, 215, 175), + (135, 215, 215), + (135, 215, 255), + (135, 255, 0), + (135, 255, 95), + (135, 255, 135), + (135, 255, 175), + (135, 255, 215), + (135, 255, 255), + (175, 0, 0), + (175, 0, 95), + (175, 0, 135), + (175, 0, 175), + (175, 0, 215), + (175, 0, 255), + (175, 95, 0), + (175, 95, 95), + (175, 95, 135), + (175, 95, 175), + (175, 95, 215), + (175, 95, 255), + (175, 135, 0), + (175, 135, 95), + (175, 135, 135), + (175, 135, 175), + (175, 135, 215), + (175, 135, 255), + (175, 175, 0), + (175, 175, 95), + (175, 175, 135), + (175, 175, 175), + (175, 175, 215), + (175, 175, 255), + (175, 215, 0), + (175, 215, 95), + (175, 215, 135), + (175, 215, 175), + (175, 215, 215), + (175, 215, 255), + (175, 255, 0), + (175, 255, 95), + (175, 255, 135), + (175, 255, 175), + (175, 255, 215), + (175, 255, 255), + (215, 0, 0), + (215, 0, 95), + (215, 0, 135), + (215, 0, 175), + (215, 0, 215), + (215, 0, 255), + (215, 95, 0), + (215, 95, 95), + (215, 95, 135), + (215, 95, 175), + (215, 95, 215), + (215, 95, 255), + (215, 135, 0), + (215, 135, 95), + (215, 135, 135), + (215, 135, 175), + (215, 135, 215), + (215, 135, 255), + (215, 175, 0), + (215, 175, 95), + (215, 175, 135), + (215, 175, 175), + (215, 175, 215), + (215, 175, 255), + (215, 215, 0), + (215, 215, 95), + (215, 215, 135), + (215, 215, 175), + (215, 215, 215), + (215, 215, 255), + (215, 255, 0), + (215, 255, 95), + (215, 255, 135), + (215, 255, 175), + (215, 255, 215), + (215, 255, 255), + (255, 0, 0), + (255, 0, 95), + (255, 0, 135), + (255, 0, 175), + (255, 0, 215), + (255, 0, 255), + (255, 95, 0), + (255, 95, 95), + (255, 95, 135), + (255, 95, 175), + (255, 95, 215), + (255, 95, 255), + (255, 135, 0), + (255, 135, 95), + (255, 135, 135), + (255, 135, 175), + (255, 135, 215), + (255, 135, 255), + (255, 175, 0), + (255, 175, 95), + (255, 175, 135), + (255, 175, 175), + (255, 175, 215), + (255, 175, 255), + (255, 215, 0), + (255, 215, 95), + (255, 215, 135), + (255, 215, 175), + (255, 215, 215), + (255, 215, 255), + (255, 255, 0), + (255, 255, 95), + (255, 255, 135), + (255, 255, 175), + (255, 255, 215), + (255, 255, 255), + (8, 8, 8), + (18, 18, 18), + (28, 28, 28), + (38, 38, 38), + (48, 48, 48), + (58, 58, 58), + (68, 68, 68), + (78, 78, 78), + (88, 88, 88), + (98, 98, 98), + (108, 108, 108), + (118, 118, 118), + (128, 128, 128), + (138, 138, 138), + (148, 148, 148), + (158, 158, 158), + (168, 168, 168), + (178, 178, 178), + (188, 188, 188), + (198, 198, 198), + (208, 208, 208), + (218, 218, 218), + (228, 228, 228), + (238, 238, 238), + ] +) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py new file mode 100644 index 0000000..4f6d8b2 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py @@ -0,0 +1,17 @@ +from typing import Optional + + +def pick_bool(*values: Optional[bool]) -> bool: + """Pick the first non-none bool or return the last value. + + Args: + *values (bool): Any number of boolean or None values. + + Returns: + bool: First non-none boolean. + """ + assert values, "1 or more values required" + for value in values: + if value is not None: + return value + return bool(value) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py new file mode 100644 index 0000000..e8a3a67 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py @@ -0,0 +1,160 @@ +import sys +from fractions import Fraction +from math import ceil +from typing import cast, List, Optional, Sequence + +if sys.version_info >= (3, 8): + from typing import Protocol +else: + from pip._vendor.typing_extensions import Protocol # pragma: no cover + + +class Edge(Protocol): + """Any object that defines an edge (such as Layout).""" + + size: Optional[int] = None + ratio: int = 1 + minimum_size: int = 1 + + +def ratio_resolve(total: int, edges: Sequence[Edge]) -> List[int]: + """Divide total space to satisfy size, ratio, and minimum_size, constraints. + + The returned list of integers should add up to total in most cases, unless it is + impossible to satisfy all the constraints. For instance, if there are two edges + with a minimum size of 20 each and `total` is 30 then the returned list will be + greater than total. In practice, this would mean that a Layout object would + clip the rows that would overflow the screen height. + + Args: + total (int): Total number of characters. + edges (List[Edge]): Edges within total space. + + Returns: + List[int]: Number of characters for each edge. + """ + # Size of edge or None for yet to be determined + sizes = [(edge.size or None) for edge in edges] + + _Fraction = Fraction + + # While any edges haven't been calculated + while None in sizes: + # Get flexible edges and index to map these back on to sizes list + flexible_edges = [ + (index, edge) + for index, (size, edge) in enumerate(zip(sizes, edges)) + if size is None + ] + # Remaining space in total + remaining = total - sum(size or 0 for size in sizes) + if remaining <= 0: + # No room for flexible edges + return [ + ((edge.minimum_size or 1) if size is None else size) + for size, edge in zip(sizes, edges) + ] + # Calculate number of characters in a ratio portion + portion = _Fraction( + remaining, sum((edge.ratio or 1) for _, edge in flexible_edges) + ) + + # If any edges will be less than their minimum, replace size with the minimum + for index, edge in flexible_edges: + if portion * edge.ratio <= edge.minimum_size: + sizes[index] = edge.minimum_size + # New fixed size will invalidate calculations, so we need to repeat the process + break + else: + # Distribute flexible space and compensate for rounding error + # Since edge sizes can only be integers we need to add the remainder + # to the following line + remainder = _Fraction(0) + for index, edge in flexible_edges: + size, remainder = divmod(portion * edge.ratio + remainder, 1) + sizes[index] = size + break + # Sizes now contains integers only + return cast(List[int], sizes) + + +def ratio_reduce( + total: int, ratios: List[int], maximums: List[int], values: List[int] +) -> List[int]: + """Divide an integer total in to parts based on ratios. + + Args: + total (int): The total to divide. + ratios (List[int]): A list of integer ratios. + maximums (List[int]): List of maximums values for each slot. + values (List[int]): List of values + + Returns: + List[int]: A list of integers guaranteed to sum to total. + """ + ratios = [ratio if _max else 0 for ratio, _max in zip(ratios, maximums)] + total_ratio = sum(ratios) + if not total_ratio: + return values[:] + total_remaining = total + result: List[int] = [] + append = result.append + for ratio, maximum, value in zip(ratios, maximums, values): + if ratio and total_ratio > 0: + distributed = min(maximum, round(ratio * total_remaining / total_ratio)) + append(value - distributed) + total_remaining -= distributed + total_ratio -= ratio + else: + append(value) + return result + + +def ratio_distribute( + total: int, ratios: List[int], minimums: Optional[List[int]] = None +) -> List[int]: + """Distribute an integer total in to parts based on ratios. + + Args: + total (int): The total to divide. + ratios (List[int]): A list of integer ratios. + minimums (List[int]): List of minimum values for each slot. + + Returns: + List[int]: A list of integers guaranteed to sum to total. + """ + if minimums: + ratios = [ratio if _min else 0 for ratio, _min in zip(ratios, minimums)] + total_ratio = sum(ratios) + assert total_ratio > 0, "Sum of ratios must be > 0" + + total_remaining = total + distributed_total: List[int] = [] + append = distributed_total.append + if minimums is None: + _minimums = [0] * len(ratios) + else: + _minimums = minimums + for ratio, minimum in zip(ratios, _minimums): + if total_ratio > 0: + distributed = max(minimum, ceil(ratio * total_remaining / total_ratio)) + else: + distributed = total_remaining + append(distributed) + total_ratio -= ratio + total_remaining -= distributed + return distributed_total + + +if __name__ == "__main__": + from dataclasses import dataclass + + @dataclass + class E: + + size: Optional[int] = None + ratio: int = 1 + minimum_size: int = 1 + + resolved = ratio_resolve(110, [E(None, 1, 1), E(None, 1, 1), E(None, 1, 1)]) + print(sum(resolved)) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py new file mode 100644 index 0000000..d0bb1fe --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py @@ -0,0 +1,482 @@ +""" +Spinners are from: +* cli-spinners: + MIT License + Copyright (c) Sindre Sorhus (sindresorhus.com) + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +""" + +SPINNERS = { + "dots": { + "interval": 80, + "frames": "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏", + }, + "dots2": {"interval": 80, "frames": "⣾⣽⣻⢿⡿⣟⣯⣷"}, + "dots3": { + "interval": 80, + "frames": "⠋⠙⠚⠞⠖⠦⠴⠲⠳⠓", + }, + "dots4": { + "interval": 80, + "frames": "⠄⠆⠇⠋⠙⠸⠰⠠⠰⠸⠙⠋⠇⠆", + }, + "dots5": { + "interval": 80, + "frames": "⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋", + }, + "dots6": { + "interval": 80, + "frames": "⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁", + }, + "dots7": { + "interval": 80, + "frames": "⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈", + }, + "dots8": { + "interval": 80, + "frames": "⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈", + }, + "dots9": {"interval": 80, "frames": "⢹⢺⢼⣸⣇⡧⡗⡏"}, + "dots10": {"interval": 80, "frames": "⢄⢂⢁⡁⡈⡐⡠"}, + "dots11": {"interval": 100, "frames": "⠁⠂⠄⡀⢀⠠⠐⠈"}, + "dots12": { + "interval": 80, + "frames": [ + "⢀⠀", + "⡀⠀", + "⠄⠀", + "⢂⠀", + "⡂⠀", + "⠅⠀", + "⢃⠀", + "⡃⠀", + "⠍⠀", + "⢋⠀", + "⡋⠀", + "⠍⠁", + "⢋⠁", + "⡋⠁", + "⠍⠉", + "⠋⠉", + "⠋⠉", + "⠉⠙", + "⠉⠙", + "⠉⠩", + "⠈⢙", + "⠈⡙", + "⢈⠩", + "⡀⢙", + "⠄⡙", + "⢂⠩", + "⡂⢘", + "⠅⡘", + "⢃⠨", + "⡃⢐", + "⠍⡐", + "⢋⠠", + "⡋⢀", + "⠍⡁", + "⢋⠁", + "⡋⠁", + "⠍⠉", + "⠋⠉", + "⠋⠉", + "⠉⠙", + "⠉⠙", + "⠉⠩", + "⠈⢙", + "⠈⡙", + "⠈⠩", + "⠀⢙", + "⠀⡙", + "⠀⠩", + "⠀⢘", + "⠀⡘", + "⠀⠨", + "⠀⢐", + "⠀⡐", + "⠀⠠", + "⠀⢀", + "⠀⡀", + ], + }, + "dots8Bit": { + "interval": 80, + "frames": "⠀⠁⠂⠃⠄⠅⠆⠇⡀⡁⡂⡃⡄⡅⡆⡇⠈⠉⠊⠋⠌⠍⠎⠏⡈⡉⡊⡋⡌⡍⡎⡏⠐⠑⠒⠓⠔⠕⠖⠗⡐⡑⡒⡓⡔⡕⡖⡗⠘⠙⠚⠛⠜⠝⠞⠟⡘⡙" + "⡚⡛⡜⡝⡞⡟⠠⠡⠢⠣⠤⠥⠦⠧⡠⡡⡢⡣⡤⡥⡦⡧⠨⠩⠪⠫⠬⠭⠮⠯⡨⡩⡪⡫⡬⡭⡮⡯⠰⠱⠲⠳⠴⠵⠶⠷⡰⡱⡲⡳⡴⡵⡶⡷⠸⠹⠺⠻" + "⠼⠽⠾⠿⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⣀⣁⣂⣃⣄⣅⣆⣇⢈⢉⢊⢋⢌⢍⢎⢏⣈⣉⣊⣋⣌⣍⣎⣏⢐⢑⢒⢓⢔⢕⢖⢗⣐⣑⣒⣓⣔⣕" + "⣖⣗⢘⢙⢚⢛⢜⢝⢞⢟⣘⣙⣚⣛⣜⣝⣞⣟⢠⢡⢢⢣⢤⢥⢦⢧⣠⣡⣢⣣⣤⣥⣦⣧⢨⢩⢪⢫⢬⢭⢮⢯⣨⣩⣪⣫⣬⣭⣮⣯⢰⢱⢲⢳⢴⢵⢶⢷" + "⣰⣱⣲⣳⣴⣵⣶⣷⢸⢹⢺⢻⢼⢽⢾⢿⣸⣹⣺⣻⣼⣽⣾⣿", + }, + "line": {"interval": 130, "frames": ["-", "\\", "|", "/"]}, + "line2": {"interval": 100, "frames": "⠂-–—–-"}, + "pipe": {"interval": 100, "frames": "┤┘┴└├┌┬┐"}, + "simpleDots": {"interval": 400, "frames": [". ", ".. ", "...", " "]}, + "simpleDotsScrolling": { + "interval": 200, + "frames": [". ", ".. ", "...", " ..", " .", " "], + }, + "star": {"interval": 70, "frames": "✶✸✹✺✹✷"}, + "star2": {"interval": 80, "frames": "+x*"}, + "flip": { + "interval": 70, + "frames": "___-``'´-___", + }, + "hamburger": {"interval": 100, "frames": "☱☲☴"}, + "growVertical": { + "interval": 120, + "frames": "▁▃▄▅▆▇▆▅▄▃", + }, + "growHorizontal": { + "interval": 120, + "frames": "▏▎▍▌▋▊▉▊▋▌▍▎", + }, + "balloon": {"interval": 140, "frames": " .oO@* "}, + "balloon2": {"interval": 120, "frames": ".oO°Oo."}, + "noise": {"interval": 100, "frames": "▓▒░"}, + "bounce": {"interval": 120, "frames": "⠁⠂⠄⠂"}, + "boxBounce": {"interval": 120, "frames": "▖▘▝▗"}, + "boxBounce2": {"interval": 100, "frames": "▌▀▐▄"}, + "triangle": {"interval": 50, "frames": "◢◣◤◥"}, + "arc": {"interval": 100, "frames": "◜◠◝◞◡◟"}, + "circle": {"interval": 120, "frames": "◡⊙◠"}, + "squareCorners": {"interval": 180, "frames": "◰◳◲◱"}, + "circleQuarters": {"interval": 120, "frames": "◴◷◶◵"}, + "circleHalves": {"interval": 50, "frames": "◐◓◑◒"}, + "squish": {"interval": 100, "frames": "╫╪"}, + "toggle": {"interval": 250, "frames": "⊶⊷"}, + "toggle2": {"interval": 80, "frames": "▫▪"}, + "toggle3": {"interval": 120, "frames": "□■"}, + "toggle4": {"interval": 100, "frames": "■□▪▫"}, + "toggle5": {"interval": 100, "frames": "▮▯"}, + "toggle6": {"interval": 300, "frames": "ဝ၀"}, + "toggle7": {"interval": 80, "frames": "⦾⦿"}, + "toggle8": {"interval": 100, "frames": "◍◌"}, + "toggle9": {"interval": 100, "frames": "◉◎"}, + "toggle10": {"interval": 100, "frames": "㊂㊀㊁"}, + "toggle11": {"interval": 50, "frames": "⧇⧆"}, + "toggle12": {"interval": 120, "frames": "☗☖"}, + "toggle13": {"interval": 80, "frames": "=*-"}, + "arrow": {"interval": 100, "frames": "←↖↑↗→↘↓↙"}, + "arrow2": { + "interval": 80, + "frames": ["⬆️ ", "↗️ ", "➡️ ", "↘️ ", "⬇️ ", "↙️ ", "⬅️ ", "↖️ "], + }, + "arrow3": { + "interval": 120, + "frames": ["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸"], + }, + "bouncingBar": { + "interval": 80, + "frames": [ + "[ ]", + "[= ]", + "[== ]", + "[=== ]", + "[ ===]", + "[ ==]", + "[ =]", + "[ ]", + "[ =]", + "[ ==]", + "[ ===]", + "[====]", + "[=== ]", + "[== ]", + "[= ]", + ], + }, + "bouncingBall": { + "interval": 80, + "frames": [ + "( ● )", + "( ● )", + "( ● )", + "( ● )", + "( ●)", + "( ● )", + "( ● )", + "( ● )", + "( ● )", + "(● )", + ], + }, + "smiley": {"interval": 200, "frames": ["😄 ", "😝 "]}, + "monkey": {"interval": 300, "frames": ["🙈 ", "🙈 ", "🙉 ", "🙊 "]}, + "hearts": {"interval": 100, "frames": ["💛 ", "💙 ", "💜 ", "💚 ", "❤️ "]}, + "clock": { + "interval": 100, + "frames": [ + "🕛 ", + "🕐 ", + "🕑 ", + "🕒 ", + "🕓 ", + "🕔 ", + "🕕 ", + "🕖 ", + "🕗 ", + "🕘 ", + "🕙 ", + "🕚 ", + ], + }, + "earth": {"interval": 180, "frames": ["🌍 ", "🌎 ", "🌏 "]}, + "material": { + "interval": 17, + "frames": [ + "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "███████▁▁▁▁▁▁▁▁▁▁▁▁▁", + "████████▁▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "██████████▁▁▁▁▁▁▁▁▁▁", + "███████████▁▁▁▁▁▁▁▁▁", + "█████████████▁▁▁▁▁▁▁", + "██████████████▁▁▁▁▁▁", + "██████████████▁▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁▁██████████████▁▁▁▁", + "▁▁▁██████████████▁▁▁", + "▁▁▁▁█████████████▁▁▁", + "▁▁▁▁██████████████▁▁", + "▁▁▁▁██████████████▁▁", + "▁▁▁▁▁██████████████▁", + "▁▁▁▁▁██████████████▁", + "▁▁▁▁▁██████████████▁", + "▁▁▁▁▁▁██████████████", + "▁▁▁▁▁▁██████████████", + "▁▁▁▁▁▁▁█████████████", + "▁▁▁▁▁▁▁█████████████", + "▁▁▁▁▁▁▁▁████████████", + "▁▁▁▁▁▁▁▁████████████", + "▁▁▁▁▁▁▁▁▁███████████", + "▁▁▁▁▁▁▁▁▁███████████", + "▁▁▁▁▁▁▁▁▁▁██████████", + "▁▁▁▁▁▁▁▁▁▁██████████", + "▁▁▁▁▁▁▁▁▁▁▁▁████████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", + "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", + "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", + "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "██████▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "████████▁▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "███████████▁▁▁▁▁▁▁▁▁", + "████████████▁▁▁▁▁▁▁▁", + "████████████▁▁▁▁▁▁▁▁", + "██████████████▁▁▁▁▁▁", + "██████████████▁▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁▁▁█████████████▁▁▁▁", + "▁▁▁▁▁████████████▁▁▁", + "▁▁▁▁▁████████████▁▁▁", + "▁▁▁▁▁▁███████████▁▁▁", + "▁▁▁▁▁▁▁▁█████████▁▁▁", + "▁▁▁▁▁▁▁▁█████████▁▁▁", + "▁▁▁▁▁▁▁▁▁█████████▁▁", + "▁▁▁▁▁▁▁▁▁█████████▁▁", + "▁▁▁▁▁▁▁▁▁▁█████████▁", + "▁▁▁▁▁▁▁▁▁▁▁████████▁", + "▁▁▁▁▁▁▁▁▁▁▁████████▁", + "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", + "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + ], + }, + "moon": { + "interval": 80, + "frames": ["🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "], + }, + "runner": {"interval": 140, "frames": ["🚶 ", "🏃 "]}, + "pong": { + "interval": 80, + "frames": [ + "▐⠂ ▌", + "▐⠈ ▌", + "▐ ⠂ ▌", + "▐ ⠠ ▌", + "▐ ⡀ ▌", + "▐ ⠠ ▌", + "▐ ⠂ ▌", + "▐ ⠈ ▌", + "▐ ⠂ ▌", + "▐ ⠠ ▌", + "▐ ⡀ ▌", + "▐ ⠠ ▌", + "▐ ⠂ ▌", + "▐ ⠈ ▌", + "▐ ⠂▌", + "▐ ⠠▌", + "▐ ⡀▌", + "▐ ⠠ ▌", + "▐ ⠂ ▌", + "▐ ⠈ ▌", + "▐ ⠂ ▌", + "▐ ⠠ ▌", + "▐ ⡀ ▌", + "▐ ⠠ ▌", + "▐ ⠂ ▌", + "▐ ⠈ ▌", + "▐ ⠂ ▌", + "▐ ⠠ ▌", + "▐ ⡀ ▌", + "▐⠠ ▌", + ], + }, + "shark": { + "interval": 120, + "frames": [ + "▐|\\____________▌", + "▐_|\\___________▌", + "▐__|\\__________▌", + "▐___|\\_________▌", + "▐____|\\________▌", + "▐_____|\\_______▌", + "▐______|\\______▌", + "▐_______|\\_____▌", + "▐________|\\____▌", + "▐_________|\\___▌", + "▐__________|\\__▌", + "▐___________|\\_▌", + "▐____________|\\▌", + "▐____________/|▌", + "▐___________/|_▌", + "▐__________/|__▌", + "▐_________/|___▌", + "▐________/|____▌", + "▐_______/|_____▌", + "▐______/|______▌", + "▐_____/|_______▌", + "▐____/|________▌", + "▐___/|_________▌", + "▐__/|__________▌", + "▐_/|___________▌", + "▐/|____________▌", + ], + }, + "dqpb": {"interval": 100, "frames": "dqpb"}, + "weather": { + "interval": 100, + "frames": [ + "☀️ ", + "☀️ ", + "☀️ ", + "🌤 ", + "⛅️ ", + "🌥 ", + "☁️ ", + "🌧 ", + "🌨 ", + "🌧 ", + "🌨 ", + "🌧 ", + "🌨 ", + "⛈ ", + "🌨 ", + "🌧 ", + "🌨 ", + "☁️ ", + "🌥 ", + "⛅️ ", + "🌤 ", + "☀️ ", + "☀️ ", + ], + }, + "christmas": {"interval": 400, "frames": "🌲🎄"}, + "grenade": { + "interval": 80, + "frames": [ + "، ", + "′ ", + " ´ ", + " ‾ ", + " ⸌", + " ⸊", + " |", + " ⁎", + " ⁕", + " ෴ ", + " ⁓", + " ", + " ", + " ", + ], + }, + "point": {"interval": 125, "frames": ["∙∙∙", "●∙∙", "∙●∙", "∙∙●", "∙∙∙"]}, + "layer": {"interval": 150, "frames": "-=≡"}, + "betaWave": { + "interval": 80, + "frames": [ + "ρββββββ", + "βρβββββ", + "ββρββββ", + "βββρβββ", + "ββββρββ", + "βββββρβ", + "ββββββρ", + ], + }, + "aesthetic": { + "interval": 80, + "frames": [ + "▰▱▱▱▱▱▱", + "▰▰▱▱▱▱▱", + "▰▰▰▱▱▱▱", + "▰▰▰▰▱▱▱", + "▰▰▰▰▰▱▱", + "▰▰▰▰▰▰▱", + "▰▰▰▰▰▰▰", + "▰▱▱▱▱▱▱", + ], + }, +} diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py new file mode 100644 index 0000000..194564e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py @@ -0,0 +1,16 @@ +from typing import List, TypeVar + +T = TypeVar("T") + + +class Stack(List[T]): + """A small shim over builtin list.""" + + @property + def top(self) -> T: + """Get top of stack.""" + return self[-1] + + def push(self, item: T) -> None: + """Push an item on to the stack (append in stack nomenclature).""" + self.append(item) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py new file mode 100644 index 0000000..a2ca6be --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py @@ -0,0 +1,19 @@ +""" +Timer context manager, only used in debug. + +""" + +from time import time + +import contextlib +from typing import Generator + + +@contextlib.contextmanager +def timer(subject: str = "time") -> Generator[None, None, None]: + """print the elapsed time. (only used in debugging)""" + start = time() + yield + elapsed = time() - start + elapsed_ms = elapsed * 1000 + print(f"{subject} elapsed {elapsed_ms:.1f}ms") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py new file mode 100644 index 0000000..81b1082 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py @@ -0,0 +1,662 @@ +"""Light wrapper around the Win32 Console API - this module should only be imported on Windows + +The API that this module wraps is documented at https://docs.microsoft.com/en-us/windows/console/console-functions +""" +import ctypes +import sys +from typing import Any + +windll: Any = None +if sys.platform == "win32": + windll = ctypes.LibraryLoader(ctypes.WinDLL) +else: + raise ImportError(f"{__name__} can only be imported on Windows") + +import time +from ctypes import Structure, byref, wintypes +from typing import IO, NamedTuple, Type, cast + +from pip._vendor.rich.color import ColorSystem +from pip._vendor.rich.style import Style + +STDOUT = -11 +ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4 + +COORD = wintypes._COORD + + +class LegacyWindowsError(Exception): + pass + + +class WindowsCoordinates(NamedTuple): + """Coordinates in the Windows Console API are (y, x), not (x, y). + This class is intended to prevent that confusion. + Rows and columns are indexed from 0. + This class can be used in place of wintypes._COORD in arguments and argtypes. + """ + + row: int + col: int + + @classmethod + def from_param(cls, value: "WindowsCoordinates") -> COORD: + """Converts a WindowsCoordinates into a wintypes _COORD structure. + This classmethod is internally called by ctypes to perform the conversion. + + Args: + value (WindowsCoordinates): The input coordinates to convert. + + Returns: + wintypes._COORD: The converted coordinates struct. + """ + return COORD(value.col, value.row) + + +class CONSOLE_SCREEN_BUFFER_INFO(Structure): + _fields_ = [ + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", wintypes.WORD), + ("srWindow", wintypes.SMALL_RECT), + ("dwMaximumWindowSize", COORD), + ] + + +class CONSOLE_CURSOR_INFO(ctypes.Structure): + _fields_ = [("dwSize", wintypes.DWORD), ("bVisible", wintypes.BOOL)] + + +_GetStdHandle = windll.kernel32.GetStdHandle +_GetStdHandle.argtypes = [ + wintypes.DWORD, +] +_GetStdHandle.restype = wintypes.HANDLE + + +def GetStdHandle(handle: int = STDOUT) -> wintypes.HANDLE: + """Retrieves a handle to the specified standard device (standard input, standard output, or standard error). + + Args: + handle (int): Integer identifier for the handle. Defaults to -11 (stdout). + + Returns: + wintypes.HANDLE: The handle + """ + return cast(wintypes.HANDLE, _GetStdHandle(handle)) + + +_GetConsoleMode = windll.kernel32.GetConsoleMode +_GetConsoleMode.argtypes = [wintypes.HANDLE, wintypes.LPDWORD] +_GetConsoleMode.restype = wintypes.BOOL + + +def GetConsoleMode(std_handle: wintypes.HANDLE) -> int: + """Retrieves the current input mode of a console's input buffer + or the current output mode of a console screen buffer. + + Args: + std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. + + Raises: + LegacyWindowsError: If any error occurs while calling the Windows console API. + + Returns: + int: Value representing the current console mode as documented at + https://docs.microsoft.com/en-us/windows/console/getconsolemode#parameters + """ + + console_mode = wintypes.DWORD() + success = bool(_GetConsoleMode(std_handle, console_mode)) + if not success: + raise LegacyWindowsError("Unable to get legacy Windows Console Mode") + return console_mode.value + + +_FillConsoleOutputCharacterW = windll.kernel32.FillConsoleOutputCharacterW +_FillConsoleOutputCharacterW.argtypes = [ + wintypes.HANDLE, + ctypes.c_char, + wintypes.DWORD, + cast(Type[COORD], WindowsCoordinates), + ctypes.POINTER(wintypes.DWORD), +] +_FillConsoleOutputCharacterW.restype = wintypes.BOOL + + +def FillConsoleOutputCharacter( + std_handle: wintypes.HANDLE, + char: str, + length: int, + start: WindowsCoordinates, +) -> int: + """Writes a character to the console screen buffer a specified number of times, beginning at the specified coordinates. + + Args: + std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. + char (str): The character to write. Must be a string of length 1. + length (int): The number of times to write the character. + start (WindowsCoordinates): The coordinates to start writing at. + + Returns: + int: The number of characters written. + """ + character = ctypes.c_char(char.encode()) + num_characters = wintypes.DWORD(length) + num_written = wintypes.DWORD(0) + _FillConsoleOutputCharacterW( + std_handle, + character, + num_characters, + start, + byref(num_written), + ) + return num_written.value + + +_FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute +_FillConsoleOutputAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, + wintypes.DWORD, + cast(Type[COORD], WindowsCoordinates), + ctypes.POINTER(wintypes.DWORD), +] +_FillConsoleOutputAttribute.restype = wintypes.BOOL + + +def FillConsoleOutputAttribute( + std_handle: wintypes.HANDLE, + attributes: int, + length: int, + start: WindowsCoordinates, +) -> int: + """Sets the character attributes for a specified number of character cells, + beginning at the specified coordinates in a screen buffer. + + Args: + std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. + attributes (int): Integer value representing the foreground and background colours of the cells. + length (int): The number of cells to set the output attribute of. + start (WindowsCoordinates): The coordinates of the first cell whose attributes are to be set. + + Returns: + int: The number of cells whose attributes were actually set. + """ + num_cells = wintypes.DWORD(length) + style_attrs = wintypes.WORD(attributes) + num_written = wintypes.DWORD(0) + _FillConsoleOutputAttribute( + std_handle, style_attrs, num_cells, start, byref(num_written) + ) + return num_written.value + + +_SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute +_SetConsoleTextAttribute.argtypes = [ + wintypes.HANDLE, + wintypes.WORD, +] +_SetConsoleTextAttribute.restype = wintypes.BOOL + + +def SetConsoleTextAttribute( + std_handle: wintypes.HANDLE, attributes: wintypes.WORD +) -> bool: + """Set the colour attributes for all text written after this function is called. + + Args: + std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. + attributes (int): Integer value representing the foreground and background colours. + + + Returns: + bool: True if the attribute was set successfully, otherwise False. + """ + return bool(_SetConsoleTextAttribute(std_handle, attributes)) + + +_GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo +_GetConsoleScreenBufferInfo.argtypes = [ + wintypes.HANDLE, + ctypes.POINTER(CONSOLE_SCREEN_BUFFER_INFO), +] +_GetConsoleScreenBufferInfo.restype = wintypes.BOOL + + +def GetConsoleScreenBufferInfo( + std_handle: wintypes.HANDLE, +) -> CONSOLE_SCREEN_BUFFER_INFO: + """Retrieves information about the specified console screen buffer. + + Args: + std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. + + Returns: + CONSOLE_SCREEN_BUFFER_INFO: A CONSOLE_SCREEN_BUFFER_INFO ctype struct contain information about + screen size, cursor position, colour attributes, and more.""" + console_screen_buffer_info = CONSOLE_SCREEN_BUFFER_INFO() + _GetConsoleScreenBufferInfo(std_handle, byref(console_screen_buffer_info)) + return console_screen_buffer_info + + +_SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition +_SetConsoleCursorPosition.argtypes = [ + wintypes.HANDLE, + cast(Type[COORD], WindowsCoordinates), +] +_SetConsoleCursorPosition.restype = wintypes.BOOL + + +def SetConsoleCursorPosition( + std_handle: wintypes.HANDLE, coords: WindowsCoordinates +) -> bool: + """Set the position of the cursor in the console screen + + Args: + std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. + coords (WindowsCoordinates): The coordinates to move the cursor to. + + Returns: + bool: True if the function succeeds, otherwise False. + """ + return bool(_SetConsoleCursorPosition(std_handle, coords)) + + +_GetConsoleCursorInfo = windll.kernel32.GetConsoleCursorInfo +_GetConsoleCursorInfo.argtypes = [ + wintypes.HANDLE, + ctypes.POINTER(CONSOLE_CURSOR_INFO), +] +_GetConsoleCursorInfo.restype = wintypes.BOOL + + +def GetConsoleCursorInfo( + std_handle: wintypes.HANDLE, cursor_info: CONSOLE_CURSOR_INFO +) -> bool: + """Get the cursor info - used to get cursor visibility and width + + Args: + std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. + cursor_info (CONSOLE_CURSOR_INFO): CONSOLE_CURSOR_INFO ctype struct that receives information + about the console's cursor. + + Returns: + bool: True if the function succeeds, otherwise False. + """ + return bool(_GetConsoleCursorInfo(std_handle, byref(cursor_info))) + + +_SetConsoleCursorInfo = windll.kernel32.SetConsoleCursorInfo +_SetConsoleCursorInfo.argtypes = [ + wintypes.HANDLE, + ctypes.POINTER(CONSOLE_CURSOR_INFO), +] +_SetConsoleCursorInfo.restype = wintypes.BOOL + + +def SetConsoleCursorInfo( + std_handle: wintypes.HANDLE, cursor_info: CONSOLE_CURSOR_INFO +) -> bool: + """Set the cursor info - used for adjusting cursor visibility and width + + Args: + std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. + cursor_info (CONSOLE_CURSOR_INFO): CONSOLE_CURSOR_INFO ctype struct containing the new cursor info. + + Returns: + bool: True if the function succeeds, otherwise False. + """ + return bool(_SetConsoleCursorInfo(std_handle, byref(cursor_info))) + + +_SetConsoleTitle = windll.kernel32.SetConsoleTitleW +_SetConsoleTitle.argtypes = [wintypes.LPCWSTR] +_SetConsoleTitle.restype = wintypes.BOOL + + +def SetConsoleTitle(title: str) -> bool: + """Sets the title of the current console window + + Args: + title (str): The new title of the console window. + + Returns: + bool: True if the function succeeds, otherwise False. + """ + return bool(_SetConsoleTitle(title)) + + +class LegacyWindowsTerm: + """This class allows interaction with the legacy Windows Console API. It should only be used in the context + of environments where virtual terminal processing is not available. However, if it is used in a Windows environment, + the entire API should work. + + Args: + file (IO[str]): The file which the Windows Console API HANDLE is retrieved from, defaults to sys.stdout. + """ + + BRIGHT_BIT = 8 + + # Indices are ANSI color numbers, values are the corresponding Windows Console API color numbers + ANSI_TO_WINDOWS = [ + 0, # black The Windows colours are defined in wincon.h as follows: + 4, # red define FOREGROUND_BLUE 0x0001 -- 0000 0001 + 2, # green define FOREGROUND_GREEN 0x0002 -- 0000 0010 + 6, # yellow define FOREGROUND_RED 0x0004 -- 0000 0100 + 1, # blue define FOREGROUND_INTENSITY 0x0008 -- 0000 1000 + 5, # magenta define BACKGROUND_BLUE 0x0010 -- 0001 0000 + 3, # cyan define BACKGROUND_GREEN 0x0020 -- 0010 0000 + 7, # white define BACKGROUND_RED 0x0040 -- 0100 0000 + 8, # bright black (grey) define BACKGROUND_INTENSITY 0x0080 -- 1000 0000 + 12, # bright red + 10, # bright green + 14, # bright yellow + 9, # bright blue + 13, # bright magenta + 11, # bright cyan + 15, # bright white + ] + + def __init__(self, file: "IO[str]") -> None: + handle = GetStdHandle(STDOUT) + self._handle = handle + default_text = GetConsoleScreenBufferInfo(handle).wAttributes + self._default_text = default_text + + self._default_fore = default_text & 7 + self._default_back = (default_text >> 4) & 7 + self._default_attrs = self._default_fore | (self._default_back << 4) + + self._file = file + self.write = file.write + self.flush = file.flush + + @property + def cursor_position(self) -> WindowsCoordinates: + """Returns the current position of the cursor (0-based) + + Returns: + WindowsCoordinates: The current cursor position. + """ + coord: COORD = GetConsoleScreenBufferInfo(self._handle).dwCursorPosition + return WindowsCoordinates(row=cast(int, coord.Y), col=cast(int, coord.X)) + + @property + def screen_size(self) -> WindowsCoordinates: + """Returns the current size of the console screen buffer, in character columns and rows + + Returns: + WindowsCoordinates: The width and height of the screen as WindowsCoordinates. + """ + screen_size: COORD = GetConsoleScreenBufferInfo(self._handle).dwSize + return WindowsCoordinates( + row=cast(int, screen_size.Y), col=cast(int, screen_size.X) + ) + + def write_text(self, text: str) -> None: + """Write text directly to the terminal without any modification of styles + + Args: + text (str): The text to write to the console + """ + self.write(text) + self.flush() + + def write_styled(self, text: str, style: Style) -> None: + """Write styled text to the terminal. + + Args: + text (str): The text to write + style (Style): The style of the text + """ + color = style.color + bgcolor = style.bgcolor + if style.reverse: + color, bgcolor = bgcolor, color + + if color: + fore = color.downgrade(ColorSystem.WINDOWS).number + fore = fore if fore is not None else 7 # Default to ANSI 7: White + if style.bold: + fore = fore | self.BRIGHT_BIT + if style.dim: + fore = fore & ~self.BRIGHT_BIT + fore = self.ANSI_TO_WINDOWS[fore] + else: + fore = self._default_fore + + if bgcolor: + back = bgcolor.downgrade(ColorSystem.WINDOWS).number + back = back if back is not None else 0 # Default to ANSI 0: Black + back = self.ANSI_TO_WINDOWS[back] + else: + back = self._default_back + + assert fore is not None + assert back is not None + + SetConsoleTextAttribute( + self._handle, attributes=ctypes.c_ushort(fore | (back << 4)) + ) + self.write_text(text) + SetConsoleTextAttribute(self._handle, attributes=self._default_text) + + def move_cursor_to(self, new_position: WindowsCoordinates) -> None: + """Set the position of the cursor + + Args: + new_position (WindowsCoordinates): The WindowsCoordinates representing the new position of the cursor. + """ + if new_position.col < 0 or new_position.row < 0: + return + SetConsoleCursorPosition(self._handle, coords=new_position) + + def erase_line(self) -> None: + """Erase all content on the line the cursor is currently located at""" + screen_size = self.screen_size + cursor_position = self.cursor_position + cells_to_erase = screen_size.col + start_coordinates = WindowsCoordinates(row=cursor_position.row, col=0) + FillConsoleOutputCharacter( + self._handle, " ", length=cells_to_erase, start=start_coordinates + ) + FillConsoleOutputAttribute( + self._handle, + self._default_attrs, + length=cells_to_erase, + start=start_coordinates, + ) + + def erase_end_of_line(self) -> None: + """Erase all content from the cursor position to the end of that line""" + cursor_position = self.cursor_position + cells_to_erase = self.screen_size.col - cursor_position.col + FillConsoleOutputCharacter( + self._handle, " ", length=cells_to_erase, start=cursor_position + ) + FillConsoleOutputAttribute( + self._handle, + self._default_attrs, + length=cells_to_erase, + start=cursor_position, + ) + + def erase_start_of_line(self) -> None: + """Erase all content from the cursor position to the start of that line""" + row, col = self.cursor_position + start = WindowsCoordinates(row, 0) + FillConsoleOutputCharacter(self._handle, " ", length=col, start=start) + FillConsoleOutputAttribute( + self._handle, self._default_attrs, length=col, start=start + ) + + def move_cursor_up(self) -> None: + """Move the cursor up a single cell""" + cursor_position = self.cursor_position + SetConsoleCursorPosition( + self._handle, + coords=WindowsCoordinates( + row=cursor_position.row - 1, col=cursor_position.col + ), + ) + + def move_cursor_down(self) -> None: + """Move the cursor down a single cell""" + cursor_position = self.cursor_position + SetConsoleCursorPosition( + self._handle, + coords=WindowsCoordinates( + row=cursor_position.row + 1, + col=cursor_position.col, + ), + ) + + def move_cursor_forward(self) -> None: + """Move the cursor forward a single cell. Wrap to the next line if required.""" + row, col = self.cursor_position + if col == self.screen_size.col - 1: + row += 1 + col = 0 + else: + col += 1 + SetConsoleCursorPosition( + self._handle, coords=WindowsCoordinates(row=row, col=col) + ) + + def move_cursor_to_column(self, column: int) -> None: + """Move cursor to the column specified by the zero-based column index, staying on the same row + + Args: + column (int): The zero-based column index to move the cursor to. + """ + row, _ = self.cursor_position + SetConsoleCursorPosition(self._handle, coords=WindowsCoordinates(row, column)) + + def move_cursor_backward(self) -> None: + """Move the cursor backward a single cell. Wrap to the previous line if required.""" + row, col = self.cursor_position + if col == 0: + row -= 1 + col = self.screen_size.col - 1 + else: + col -= 1 + SetConsoleCursorPosition( + self._handle, coords=WindowsCoordinates(row=row, col=col) + ) + + def hide_cursor(self) -> None: + """Hide the cursor""" + current_cursor_size = self._get_cursor_size() + invisible_cursor = CONSOLE_CURSOR_INFO(dwSize=current_cursor_size, bVisible=0) + SetConsoleCursorInfo(self._handle, cursor_info=invisible_cursor) + + def show_cursor(self) -> None: + """Show the cursor""" + current_cursor_size = self._get_cursor_size() + visible_cursor = CONSOLE_CURSOR_INFO(dwSize=current_cursor_size, bVisible=1) + SetConsoleCursorInfo(self._handle, cursor_info=visible_cursor) + + def set_title(self, title: str) -> None: + """Set the title of the terminal window + + Args: + title (str): The new title of the console window + """ + assert len(title) < 255, "Console title must be less than 255 characters" + SetConsoleTitle(title) + + def _get_cursor_size(self) -> int: + """Get the percentage of the character cell that is filled by the cursor""" + cursor_info = CONSOLE_CURSOR_INFO() + GetConsoleCursorInfo(self._handle, cursor_info=cursor_info) + return int(cursor_info.dwSize) + + +if __name__ == "__main__": + handle = GetStdHandle() + + from pip._vendor.rich.console import Console + + console = Console() + + term = LegacyWindowsTerm(sys.stdout) + term.set_title("Win32 Console Examples") + + style = Style(color="black", bgcolor="red") + + heading = Style.parse("black on green") + + # Check colour output + console.rule("Checking colour output") + console.print("[on red]on red!") + console.print("[blue]blue!") + console.print("[yellow]yellow!") + console.print("[bold yellow]bold yellow!") + console.print("[bright_yellow]bright_yellow!") + console.print("[dim bright_yellow]dim bright_yellow!") + console.print("[italic cyan]italic cyan!") + console.print("[bold white on blue]bold white on blue!") + console.print("[reverse bold white on blue]reverse bold white on blue!") + console.print("[bold black on cyan]bold black on cyan!") + console.print("[black on green]black on green!") + console.print("[blue on green]blue on green!") + console.print("[white on black]white on black!") + console.print("[black on white]black on white!") + console.print("[#1BB152 on #DA812D]#1BB152 on #DA812D!") + + # Check cursor movement + console.rule("Checking cursor movement") + console.print() + term.move_cursor_backward() + term.move_cursor_backward() + term.write_text("went back and wrapped to prev line") + time.sleep(1) + term.move_cursor_up() + term.write_text("we go up") + time.sleep(1) + term.move_cursor_down() + term.write_text("and down") + time.sleep(1) + term.move_cursor_up() + term.move_cursor_backward() + term.move_cursor_backward() + term.write_text("we went up and back 2") + time.sleep(1) + term.move_cursor_down() + term.move_cursor_backward() + term.move_cursor_backward() + term.write_text("we went down and back 2") + time.sleep(1) + + # Check erasing of lines + term.hide_cursor() + console.print() + console.rule("Checking line erasing") + console.print("\n...Deleting to the start of the line...") + term.write_text("The red arrow shows the cursor location, and direction of erase") + time.sleep(1) + term.move_cursor_to_column(16) + term.write_styled("<", Style.parse("black on red")) + term.move_cursor_backward() + time.sleep(1) + term.erase_start_of_line() + time.sleep(1) + + console.print("\n\n...And to the end of the line...") + term.write_text("The red arrow shows the cursor location, and direction of erase") + time.sleep(1) + + term.move_cursor_to_column(16) + term.write_styled(">", Style.parse("black on red")) + time.sleep(1) + term.erase_end_of_line() + time.sleep(1) + + console.print("\n\n...Now the whole line will be erased...") + term.write_styled("I'm going to disappear!", style=Style.parse("black on cyan")) + time.sleep(1) + term.erase_line() + + term.show_cursor() + print("\n") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py new file mode 100644 index 0000000..10fc0d7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py @@ -0,0 +1,72 @@ +import sys +from dataclasses import dataclass + + +@dataclass +class WindowsConsoleFeatures: + """Windows features available.""" + + vt: bool = False + """The console supports VT codes.""" + truecolor: bool = False + """The console supports truecolor.""" + + +try: + import ctypes + from ctypes import LibraryLoader + + if sys.platform == "win32": + windll = LibraryLoader(ctypes.WinDLL) + else: + windll = None + raise ImportError("Not windows") + + from pip._vendor.rich._win32_console import ( + ENABLE_VIRTUAL_TERMINAL_PROCESSING, + GetConsoleMode, + GetStdHandle, + LegacyWindowsError, + ) + +except (AttributeError, ImportError, ValueError): + + # Fallback if we can't load the Windows DLL + def get_windows_console_features() -> WindowsConsoleFeatures: + features = WindowsConsoleFeatures() + return features + +else: + + def get_windows_console_features() -> WindowsConsoleFeatures: + """Get windows console features. + + Returns: + WindowsConsoleFeatures: An instance of WindowsConsoleFeatures. + """ + handle = GetStdHandle() + try: + console_mode = GetConsoleMode(handle) + success = True + except LegacyWindowsError: + console_mode = 0 + success = False + vt = bool(success and console_mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) + truecolor = False + if vt: + win_version = sys.getwindowsversion() + truecolor = win_version.major > 10 or ( + win_version.major == 10 and win_version.build >= 15063 + ) + features = WindowsConsoleFeatures(vt=vt, truecolor=truecolor) + return features + + +if __name__ == "__main__": + import platform + + features = get_windows_console_features() + from pip._vendor.rich import print + + print(f'platform="{platform.system()}"') + print(repr(features)) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py new file mode 100644 index 0000000..5ece056 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py @@ -0,0 +1,56 @@ +from typing import Iterable, Sequence, Tuple, cast + +from pip._vendor.rich._win32_console import LegacyWindowsTerm, WindowsCoordinates +from pip._vendor.rich.segment import ControlCode, ControlType, Segment + + +def legacy_windows_render(buffer: Iterable[Segment], term: LegacyWindowsTerm) -> None: + """Makes appropriate Windows Console API calls based on the segments in the buffer. + + Args: + buffer (Iterable[Segment]): Iterable of Segments to convert to Win32 API calls. + term (LegacyWindowsTerm): Used to call the Windows Console API. + """ + for text, style, control in buffer: + if not control: + if style: + term.write_styled(text, style) + else: + term.write_text(text) + else: + control_codes: Sequence[ControlCode] = control + for control_code in control_codes: + control_type = control_code[0] + if control_type == ControlType.CURSOR_MOVE_TO: + _, x, y = cast(Tuple[ControlType, int, int], control_code) + term.move_cursor_to(WindowsCoordinates(row=y - 1, col=x - 1)) + elif control_type == ControlType.CARRIAGE_RETURN: + term.write_text("\r") + elif control_type == ControlType.HOME: + term.move_cursor_to(WindowsCoordinates(0, 0)) + elif control_type == ControlType.CURSOR_UP: + term.move_cursor_up() + elif control_type == ControlType.CURSOR_DOWN: + term.move_cursor_down() + elif control_type == ControlType.CURSOR_FORWARD: + term.move_cursor_forward() + elif control_type == ControlType.CURSOR_BACKWARD: + term.move_cursor_backward() + elif control_type == ControlType.CURSOR_MOVE_TO_COLUMN: + _, column = cast(Tuple[ControlType, int], control_code) + term.move_cursor_to_column(column - 1) + elif control_type == ControlType.HIDE_CURSOR: + term.hide_cursor() + elif control_type == ControlType.SHOW_CURSOR: + term.show_cursor() + elif control_type == ControlType.ERASE_IN_LINE: + _, mode = cast(Tuple[ControlType, int], control_code) + if mode == 0: + term.erase_end_of_line() + elif mode == 1: + term.erase_start_of_line() + elif mode == 2: + term.erase_line() + elif control_type == ControlType.SET_WINDOW_TITLE: + _, title = cast(Tuple[ControlType, str], control_code) + term.set_title(title) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py new file mode 100644 index 0000000..c45f193 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py @@ -0,0 +1,56 @@ +import re +from typing import Iterable, List, Tuple + +from ._loop import loop_last +from .cells import cell_len, chop_cells + +re_word = re.compile(r"\s*\S+\s*") + + +def words(text: str) -> Iterable[Tuple[int, int, str]]: + position = 0 + word_match = re_word.match(text, position) + while word_match is not None: + start, end = word_match.span() + word = word_match.group(0) + yield start, end, word + word_match = re_word.match(text, end) + + +def divide_line(text: str, width: int, fold: bool = True) -> List[int]: + divides: List[int] = [] + append = divides.append + line_position = 0 + _cell_len = cell_len + for start, _end, word in words(text): + word_length = _cell_len(word.rstrip()) + if line_position + word_length > width: + if word_length > width: + if fold: + chopped_words = chop_cells(word, max_size=width, position=0) + for last, line in loop_last(chopped_words): + if start: + append(start) + + if last: + line_position = _cell_len(line) + else: + start += len(line) + else: + if start: + append(start) + line_position = _cell_len(word) + elif line_position and start: + append(start) + line_position = _cell_len(word) + else: + line_position += _cell_len(word) + return divides + + +if __name__ == "__main__": # pragma: no cover + from .console import Console + + console = Console(width=10) + console.print("12345 abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ 12345") + print(chop_cells("abcdefghijklmnopqrstuvwxyz", 10, position=2)) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/abc.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/abc.py new file mode 100644 index 0000000..e6e498e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/abc.py @@ -0,0 +1,33 @@ +from abc import ABC + + +class RichRenderable(ABC): + """An abstract base class for Rich renderables. + + Note that there is no need to extend this class, the intended use is to check if an + object supports the Rich renderable protocol. For example:: + + if isinstance(my_object, RichRenderable): + console.print(my_object) + + """ + + @classmethod + def __subclasshook__(cls, other: type) -> bool: + """Check if this class supports the rich render protocol.""" + return hasattr(other, "__rich_console__") or hasattr(other, "__rich__") + + +if __name__ == "__main__": # pragma: no cover + from pip._vendor.rich.text import Text + + t = Text() + print(isinstance(Text, RichRenderable)) + print(isinstance(t, RichRenderable)) + + class Foo: + pass + + f = Foo() + print(isinstance(f, RichRenderable)) + print(isinstance("", RichRenderable)) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/align.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/align.py new file mode 100644 index 0000000..c310b66 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/align.py @@ -0,0 +1,311 @@ +import sys +from itertools import chain +from typing import TYPE_CHECKING, Iterable, Optional + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from pip._vendor.typing_extensions import Literal # pragma: no cover + +from .constrain import Constrain +from .jupyter import JupyterMixin +from .measure import Measurement +from .segment import Segment +from .style import StyleType + +if TYPE_CHECKING: + from .console import Console, ConsoleOptions, RenderableType, RenderResult + +AlignMethod = Literal["left", "center", "right"] +VerticalAlignMethod = Literal["top", "middle", "bottom"] + + +class Align(JupyterMixin): + """Align a renderable by adding spaces if necessary. + + Args: + renderable (RenderableType): A console renderable. + align (AlignMethod): One of "left", "center", or "right"" + style (StyleType, optional): An optional style to apply to the background. + vertical (Optional[VerticalAlginMethod], optional): Optional vertical align, one of "top", "middle", or "bottom". Defaults to None. + pad (bool, optional): Pad the right with spaces. Defaults to True. + width (int, optional): Restrict contents to given width, or None to use default width. Defaults to None. + height (int, optional): Set height of align renderable, or None to fit to contents. Defaults to None. + + Raises: + ValueError: if ``align`` is not one of the expected values. + """ + + def __init__( + self, + renderable: "RenderableType", + align: AlignMethod = "left", + style: Optional[StyleType] = None, + *, + vertical: Optional[VerticalAlignMethod] = None, + pad: bool = True, + width: Optional[int] = None, + height: Optional[int] = None, + ) -> None: + if align not in ("left", "center", "right"): + raise ValueError( + f'invalid value for align, expected "left", "center", or "right" (not {align!r})' + ) + if vertical is not None and vertical not in ("top", "middle", "bottom"): + raise ValueError( + f'invalid value for vertical, expected "top", "middle", or "bottom" (not {vertical!r})' + ) + self.renderable = renderable + self.align = align + self.style = style + self.vertical = vertical + self.pad = pad + self.width = width + self.height = height + + def __repr__(self) -> str: + return f"Align({self.renderable!r}, {self.align!r})" + + @classmethod + def left( + cls, + renderable: "RenderableType", + style: Optional[StyleType] = None, + *, + vertical: Optional[VerticalAlignMethod] = None, + pad: bool = True, + width: Optional[int] = None, + height: Optional[int] = None, + ) -> "Align": + """Align a renderable to the left.""" + return cls( + renderable, + "left", + style=style, + vertical=vertical, + pad=pad, + width=width, + height=height, + ) + + @classmethod + def center( + cls, + renderable: "RenderableType", + style: Optional[StyleType] = None, + *, + vertical: Optional[VerticalAlignMethod] = None, + pad: bool = True, + width: Optional[int] = None, + height: Optional[int] = None, + ) -> "Align": + """Align a renderable to the center.""" + return cls( + renderable, + "center", + style=style, + vertical=vertical, + pad=pad, + width=width, + height=height, + ) + + @classmethod + def right( + cls, + renderable: "RenderableType", + style: Optional[StyleType] = None, + *, + vertical: Optional[VerticalAlignMethod] = None, + pad: bool = True, + width: Optional[int] = None, + height: Optional[int] = None, + ) -> "Align": + """Align a renderable to the right.""" + return cls( + renderable, + "right", + style=style, + vertical=vertical, + pad=pad, + width=width, + height=height, + ) + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": + align = self.align + width = console.measure(self.renderable, options=options).maximum + rendered = console.render( + Constrain( + self.renderable, width if self.width is None else min(width, self.width) + ), + options.update(height=None), + ) + lines = list(Segment.split_lines(rendered)) + width, height = Segment.get_shape(lines) + lines = Segment.set_shape(lines, width, height) + new_line = Segment.line() + excess_space = options.max_width - width + style = console.get_style(self.style) if self.style is not None else None + + def generate_segments() -> Iterable[Segment]: + if excess_space <= 0: + # Exact fit + for line in lines: + yield from line + yield new_line + + elif align == "left": + # Pad on the right + pad = Segment(" " * excess_space, style) if self.pad else None + for line in lines: + yield from line + if pad: + yield pad + yield new_line + + elif align == "center": + # Pad left and right + left = excess_space // 2 + pad = Segment(" " * left, style) + pad_right = ( + Segment(" " * (excess_space - left), style) if self.pad else None + ) + for line in lines: + if left: + yield pad + yield from line + if pad_right: + yield pad_right + yield new_line + + elif align == "right": + # Padding on left + pad = Segment(" " * excess_space, style) + for line in lines: + yield pad + yield from line + yield new_line + + blank_line = ( + Segment(f"{' ' * (self.width or options.max_width)}\n", style) + if self.pad + else Segment("\n") + ) + + def blank_lines(count: int) -> Iterable[Segment]: + if count > 0: + for _ in range(count): + yield blank_line + + vertical_height = self.height or options.height + iter_segments: Iterable[Segment] + if self.vertical and vertical_height is not None: + if self.vertical == "top": + bottom_space = vertical_height - height + iter_segments = chain(generate_segments(), blank_lines(bottom_space)) + elif self.vertical == "middle": + top_space = (vertical_height - height) // 2 + bottom_space = vertical_height - top_space - height + iter_segments = chain( + blank_lines(top_space), + generate_segments(), + blank_lines(bottom_space), + ) + else: # self.vertical == "bottom": + top_space = vertical_height - height + iter_segments = chain(blank_lines(top_space), generate_segments()) + else: + iter_segments = generate_segments() + if self.style: + style = console.get_style(self.style) + iter_segments = Segment.apply_style(iter_segments, style) + yield from iter_segments + + def __rich_measure__( + self, console: "Console", options: "ConsoleOptions" + ) -> Measurement: + measurement = Measurement.get(console, options, self.renderable) + return measurement + + +class VerticalCenter(JupyterMixin): + """Vertically aligns a renderable. + + Warn: + This class is deprecated and may be removed in a future version. Use Align class with + `vertical="middle"`. + + Args: + renderable (RenderableType): A renderable object. + """ + + def __init__( + self, + renderable: "RenderableType", + style: Optional[StyleType] = None, + ) -> None: + self.renderable = renderable + self.style = style + + def __repr__(self) -> str: + return f"VerticalCenter({self.renderable!r})" + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": + style = console.get_style(self.style) if self.style is not None else None + lines = console.render_lines( + self.renderable, options.update(height=None), pad=False + ) + width, _height = Segment.get_shape(lines) + new_line = Segment.line() + height = options.height or options.size.height + top_space = (height - len(lines)) // 2 + bottom_space = height - top_space - len(lines) + blank_line = Segment(f"{' ' * width}", style) + + def blank_lines(count: int) -> Iterable[Segment]: + for _ in range(count): + yield blank_line + yield new_line + + if top_space > 0: + yield from blank_lines(top_space) + for line in lines: + yield from line + yield new_line + if bottom_space > 0: + yield from blank_lines(bottom_space) + + def __rich_measure__( + self, console: "Console", options: "ConsoleOptions" + ) -> Measurement: + measurement = Measurement.get(console, options, self.renderable) + return measurement + + +if __name__ == "__main__": # pragma: no cover + from pip._vendor.rich.console import Console, Group + from pip._vendor.rich.highlighter import ReprHighlighter + from pip._vendor.rich.panel import Panel + + highlighter = ReprHighlighter() + console = Console() + + panel = Panel( + Group( + Align.left(highlighter("align='left'")), + Align.center(highlighter("align='center'")), + Align.right(highlighter("align='right'")), + ), + width=60, + style="on dark_blue", + title="Align", + ) + + console.print( + Align.center(panel, vertical="middle", style="on red", height=console.height) + ) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py new file mode 100644 index 0000000..66365e6 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py @@ -0,0 +1,240 @@ +import re +import sys +from contextlib import suppress +from typing import Iterable, NamedTuple, Optional + +from .color import Color +from .style import Style +from .text import Text + +re_ansi = re.compile( + r""" +(?:\x1b\](.*?)\x1b\\)| +(?:\x1b([(@-Z\\-_]|\[[0-?]*[ -/]*[@-~])) +""", + re.VERBOSE, +) + + +class _AnsiToken(NamedTuple): + """Result of ansi tokenized string.""" + + plain: str = "" + sgr: Optional[str] = "" + osc: Optional[str] = "" + + +def _ansi_tokenize(ansi_text: str) -> Iterable[_AnsiToken]: + """Tokenize a string in to plain text and ANSI codes. + + Args: + ansi_text (str): A String containing ANSI codes. + + Yields: + AnsiToken: A named tuple of (plain, sgr, osc) + """ + + position = 0 + sgr: Optional[str] + osc: Optional[str] + for match in re_ansi.finditer(ansi_text): + start, end = match.span(0) + osc, sgr = match.groups() + if start > position: + yield _AnsiToken(ansi_text[position:start]) + if sgr: + if sgr == "(": + position = end + 1 + continue + if sgr.endswith("m"): + yield _AnsiToken("", sgr[1:-1], osc) + else: + yield _AnsiToken("", sgr, osc) + position = end + if position < len(ansi_text): + yield _AnsiToken(ansi_text[position:]) + + +SGR_STYLE_MAP = { + 1: "bold", + 2: "dim", + 3: "italic", + 4: "underline", + 5: "blink", + 6: "blink2", + 7: "reverse", + 8: "conceal", + 9: "strike", + 21: "underline2", + 22: "not dim not bold", + 23: "not italic", + 24: "not underline", + 25: "not blink", + 26: "not blink2", + 27: "not reverse", + 28: "not conceal", + 29: "not strike", + 30: "color(0)", + 31: "color(1)", + 32: "color(2)", + 33: "color(3)", + 34: "color(4)", + 35: "color(5)", + 36: "color(6)", + 37: "color(7)", + 39: "default", + 40: "on color(0)", + 41: "on color(1)", + 42: "on color(2)", + 43: "on color(3)", + 44: "on color(4)", + 45: "on color(5)", + 46: "on color(6)", + 47: "on color(7)", + 49: "on default", + 51: "frame", + 52: "encircle", + 53: "overline", + 54: "not frame not encircle", + 55: "not overline", + 90: "color(8)", + 91: "color(9)", + 92: "color(10)", + 93: "color(11)", + 94: "color(12)", + 95: "color(13)", + 96: "color(14)", + 97: "color(15)", + 100: "on color(8)", + 101: "on color(9)", + 102: "on color(10)", + 103: "on color(11)", + 104: "on color(12)", + 105: "on color(13)", + 106: "on color(14)", + 107: "on color(15)", +} + + +class AnsiDecoder: + """Translate ANSI code in to styled Text.""" + + def __init__(self) -> None: + self.style = Style.null() + + def decode(self, terminal_text: str) -> Iterable[Text]: + """Decode ANSI codes in an iterable of lines. + + Args: + lines (Iterable[str]): An iterable of lines of terminal output. + + Yields: + Text: Marked up Text. + """ + for line in terminal_text.splitlines(): + yield self.decode_line(line) + + def decode_line(self, line: str) -> Text: + """Decode a line containing ansi codes. + + Args: + line (str): A line of terminal output. + + Returns: + Text: A Text instance marked up according to ansi codes. + """ + from_ansi = Color.from_ansi + from_rgb = Color.from_rgb + _Style = Style + text = Text() + append = text.append + line = line.rsplit("\r", 1)[-1] + for plain_text, sgr, osc in _ansi_tokenize(line): + if plain_text: + append(plain_text, self.style or None) + elif osc is not None: + if osc.startswith("8;"): + _params, semicolon, link = osc[2:].partition(";") + if semicolon: + self.style = self.style.update_link(link or None) + elif sgr is not None: + # Translate in to semi-colon separated codes + # Ignore invalid codes, because we want to be lenient + codes = [ + min(255, int(_code) if _code else 0) + for _code in sgr.split(";") + if _code.isdigit() or _code == "" + ] + iter_codes = iter(codes) + for code in iter_codes: + if code == 0: + # reset + self.style = _Style.null() + elif code in SGR_STYLE_MAP: + # styles + self.style += _Style.parse(SGR_STYLE_MAP[code]) + elif code == 38: + #  Foreground + with suppress(StopIteration): + color_type = next(iter_codes) + if color_type == 5: + self.style += _Style.from_color( + from_ansi(next(iter_codes)) + ) + elif color_type == 2: + self.style += _Style.from_color( + from_rgb( + next(iter_codes), + next(iter_codes), + next(iter_codes), + ) + ) + elif code == 48: + # Background + with suppress(StopIteration): + color_type = next(iter_codes) + if color_type == 5: + self.style += _Style.from_color( + None, from_ansi(next(iter_codes)) + ) + elif color_type == 2: + self.style += _Style.from_color( + None, + from_rgb( + next(iter_codes), + next(iter_codes), + next(iter_codes), + ), + ) + + return text + + +if sys.platform != "win32" and __name__ == "__main__": # pragma: no cover + import io + import os + import pty + import sys + + decoder = AnsiDecoder() + + stdout = io.BytesIO() + + def read(fd: int) -> bytes: + data = os.read(fd, 1024) + stdout.write(data) + return data + + pty.spawn(sys.argv[1:], read) + + from .console import Console + + console = Console(record=True) + + stdout_result = stdout.getvalue().decode("utf-8") + print(stdout_result) + + for line in decoder.decode(stdout_result): + console.print(line) + + console.save_html("stdout.html") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py new file mode 100644 index 0000000..ed86a55 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py @@ -0,0 +1,94 @@ +from typing import Optional, Union + +from .color import Color +from .console import Console, ConsoleOptions, RenderResult +from .jupyter import JupyterMixin +from .measure import Measurement +from .segment import Segment +from .style import Style + +# There are left-aligned characters for 1/8 to 7/8, but +# the right-aligned characters exist only for 1/8 and 4/8. +BEGIN_BLOCK_ELEMENTS = ["█", "█", "█", "▐", "▐", "▐", "▕", "▕"] +END_BLOCK_ELEMENTS = [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉"] +FULL_BLOCK = "█" + + +class Bar(JupyterMixin): + """Renders a solid block bar. + + Args: + size (float): Value for the end of the bar. + begin (float): Begin point (between 0 and size, inclusive). + end (float): End point (between 0 and size, inclusive). + width (int, optional): Width of the bar, or ``None`` for maximum width. Defaults to None. + color (Union[Color, str], optional): Color of the bar. Defaults to "default". + bgcolor (Union[Color, str], optional): Color of bar background. Defaults to "default". + """ + + def __init__( + self, + size: float, + begin: float, + end: float, + *, + width: Optional[int] = None, + color: Union[Color, str] = "default", + bgcolor: Union[Color, str] = "default", + ): + self.size = size + self.begin = max(begin, 0) + self.end = min(end, size) + self.width = width + self.style = Style(color=color, bgcolor=bgcolor) + + def __repr__(self) -> str: + return f"Bar({self.size}, {self.begin}, {self.end})" + + def __rich_console__( + self, console: Console, options: ConsoleOptions + ) -> RenderResult: + + width = min( + self.width if self.width is not None else options.max_width, + options.max_width, + ) + + if self.begin >= self.end: + yield Segment(" " * width, self.style) + yield Segment.line() + return + + prefix_complete_eights = int(width * 8 * self.begin / self.size) + prefix_bar_count = prefix_complete_eights // 8 + prefix_eights_count = prefix_complete_eights % 8 + + body_complete_eights = int(width * 8 * self.end / self.size) + body_bar_count = body_complete_eights // 8 + body_eights_count = body_complete_eights % 8 + + # When start and end fall into the same cell, we ideally should render + # a symbol that's "center-aligned", but there is no good symbol in Unicode. + # In this case, we fall back to right-aligned block symbol for simplicity. + + prefix = " " * prefix_bar_count + if prefix_eights_count: + prefix += BEGIN_BLOCK_ELEMENTS[prefix_eights_count] + + body = FULL_BLOCK * body_bar_count + if body_eights_count: + body += END_BLOCK_ELEMENTS[body_eights_count] + + suffix = " " * (width - len(body)) + + yield Segment(prefix + body[len(prefix) :] + suffix, self.style) + yield Segment.line() + + def __rich_measure__( + self, console: Console, options: ConsoleOptions + ) -> Measurement: + return ( + Measurement(self.width, self.width) + if self.width is not None + else Measurement(4, options.max_width) + ) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/box.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/box.py new file mode 100644 index 0000000..97d2a94 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/box.py @@ -0,0 +1,517 @@ +import sys +from typing import TYPE_CHECKING, Iterable, List + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from pip._vendor.typing_extensions import Literal # pragma: no cover + + +from ._loop import loop_last + +if TYPE_CHECKING: + from pip._vendor.rich.console import ConsoleOptions + + +class Box: + """Defines characters to render boxes. + + ┌─┬┐ top + │ ││ head + ├─┼┤ head_row + │ ││ mid + ├─┼┤ row + ├─┼┤ foot_row + │ ││ foot + └─┴┘ bottom + + Args: + box (str): Characters making up box. + ascii (bool, optional): True if this box uses ascii characters only. Default is False. + """ + + def __init__(self, box: str, *, ascii: bool = False) -> None: + self._box = box + self.ascii = ascii + line1, line2, line3, line4, line5, line6, line7, line8 = box.splitlines() + # top + self.top_left, self.top, self.top_divider, self.top_right = iter(line1) + # head + self.head_left, _, self.head_vertical, self.head_right = iter(line2) + # head_row + ( + self.head_row_left, + self.head_row_horizontal, + self.head_row_cross, + self.head_row_right, + ) = iter(line3) + + # mid + self.mid_left, _, self.mid_vertical, self.mid_right = iter(line4) + # row + self.row_left, self.row_horizontal, self.row_cross, self.row_right = iter(line5) + # foot_row + ( + self.foot_row_left, + self.foot_row_horizontal, + self.foot_row_cross, + self.foot_row_right, + ) = iter(line6) + # foot + self.foot_left, _, self.foot_vertical, self.foot_right = iter(line7) + # bottom + self.bottom_left, self.bottom, self.bottom_divider, self.bottom_right = iter( + line8 + ) + + def __repr__(self) -> str: + return "Box(...)" + + def __str__(self) -> str: + return self._box + + def substitute(self, options: "ConsoleOptions", safe: bool = True) -> "Box": + """Substitute this box for another if it won't render due to platform issues. + + Args: + options (ConsoleOptions): Console options used in rendering. + safe (bool, optional): Substitute this for another Box if there are known problems + displaying on the platform (currently only relevant on Windows). Default is True. + + Returns: + Box: A different Box or the same Box. + """ + box = self + if options.legacy_windows and safe: + box = LEGACY_WINDOWS_SUBSTITUTIONS.get(box, box) + if options.ascii_only and not box.ascii: + box = ASCII + return box + + def get_plain_headed_box(self) -> "Box": + """If this box uses special characters for the borders of the header, then + return the equivalent box that does not. + + Returns: + Box: The most similar Box that doesn't use header-specific box characters. + If the current Box already satisfies this criterion, then it's returned. + """ + return PLAIN_HEADED_SUBSTITUTIONS.get(self, self) + + def get_top(self, widths: Iterable[int]) -> str: + """Get the top of a simple box. + + Args: + widths (List[int]): Widths of columns. + + Returns: + str: A string of box characters. + """ + + parts: List[str] = [] + append = parts.append + append(self.top_left) + for last, width in loop_last(widths): + append(self.top * width) + if not last: + append(self.top_divider) + append(self.top_right) + return "".join(parts) + + def get_row( + self, + widths: Iterable[int], + level: Literal["head", "row", "foot", "mid"] = "row", + edge: bool = True, + ) -> str: + """Get the top of a simple box. + + Args: + width (List[int]): Widths of columns. + + Returns: + str: A string of box characters. + """ + if level == "head": + left = self.head_row_left + horizontal = self.head_row_horizontal + cross = self.head_row_cross + right = self.head_row_right + elif level == "row": + left = self.row_left + horizontal = self.row_horizontal + cross = self.row_cross + right = self.row_right + elif level == "mid": + left = self.mid_left + horizontal = " " + cross = self.mid_vertical + right = self.mid_right + elif level == "foot": + left = self.foot_row_left + horizontal = self.foot_row_horizontal + cross = self.foot_row_cross + right = self.foot_row_right + else: + raise ValueError("level must be 'head', 'row' or 'foot'") + + parts: List[str] = [] + append = parts.append + if edge: + append(left) + for last, width in loop_last(widths): + append(horizontal * width) + if not last: + append(cross) + if edge: + append(right) + return "".join(parts) + + def get_bottom(self, widths: Iterable[int]) -> str: + """Get the bottom of a simple box. + + Args: + widths (List[int]): Widths of columns. + + Returns: + str: A string of box characters. + """ + + parts: List[str] = [] + append = parts.append + append(self.bottom_left) + for last, width in loop_last(widths): + append(self.bottom * width) + if not last: + append(self.bottom_divider) + append(self.bottom_right) + return "".join(parts) + + +ASCII: Box = Box( + """\ ++--+ +| || +|-+| +| || +|-+| +|-+| +| || ++--+ +""", + ascii=True, +) + +ASCII2: Box = Box( + """\ ++-++ +| || ++-++ +| || ++-++ ++-++ +| || ++-++ +""", + ascii=True, +) + +ASCII_DOUBLE_HEAD: Box = Box( + """\ ++-++ +| || ++=++ +| || ++-++ ++-++ +| || ++-++ +""", + ascii=True, +) + +SQUARE: Box = Box( + """\ +┌─┬┐ +│ ││ +├─┼┤ +│ ││ +├─┼┤ +├─┼┤ +│ ││ +└─┴┘ +""" +) + +SQUARE_DOUBLE_HEAD: Box = Box( + """\ +┌─┬┐ +│ ││ +╞═╪╡ +│ ││ +├─┼┤ +├─┼┤ +│ ││ +└─┴┘ +""" +) + +MINIMAL: Box = Box( + """\ + ╷ + │ +╶─┼╴ + │ +╶─┼╴ +╶─┼╴ + │ + ╵ +""" +) + + +MINIMAL_HEAVY_HEAD: Box = Box( + """\ + ╷ + │ +╺━┿╸ + │ +╶─┼╴ +╶─┼╴ + │ + ╵ +""" +) + +MINIMAL_DOUBLE_HEAD: Box = Box( + """\ + ╷ + │ + ═╪ + │ + ─┼ + ─┼ + │ + ╵ +""" +) + + +SIMPLE: Box = Box( + """\ + + + ── + + + ── + + +""" +) + +SIMPLE_HEAD: Box = Box( + """\ + + + ── + + + + + +""" +) + + +SIMPLE_HEAVY: Box = Box( + """\ + + + ━━ + + + ━━ + + +""" +) + + +HORIZONTALS: Box = Box( + """\ + ── + + ── + + ── + ── + + ── +""" +) + +ROUNDED: Box = Box( + """\ +╭─┬╮ +│ ││ +├─┼┤ +│ ││ +├─┼┤ +├─┼┤ +│ ││ +╰─┴╯ +""" +) + +HEAVY: Box = Box( + """\ +┏━┳┓ +┃ ┃┃ +┣━╋┫ +┃ ┃┃ +┣━╋┫ +┣━╋┫ +┃ ┃┃ +┗━┻┛ +""" +) + +HEAVY_EDGE: Box = Box( + """\ +┏━┯┓ +┃ │┃ +┠─┼┨ +┃ │┃ +┠─┼┨ +┠─┼┨ +┃ │┃ +┗━┷┛ +""" +) + +HEAVY_HEAD: Box = Box( + """\ +┏━┳┓ +┃ ┃┃ +┡━╇┩ +│ ││ +├─┼┤ +├─┼┤ +│ ││ +└─┴┘ +""" +) + +DOUBLE: Box = Box( + """\ +╔═╦╗ +║ ║║ +╠═╬╣ +║ ║║ +╠═╬╣ +╠═╬╣ +║ ║║ +╚═╩╝ +""" +) + +DOUBLE_EDGE: Box = Box( + """\ +╔═╤╗ +║ │║ +╟─┼╢ +║ │║ +╟─┼╢ +╟─┼╢ +║ │║ +╚═╧╝ +""" +) + +MARKDOWN: Box = Box( + """\ + +| || +|-|| +| || +|-|| +|-|| +| || + +""", + ascii=True, +) + +# Map Boxes that don't render with raster fonts on to equivalent that do +LEGACY_WINDOWS_SUBSTITUTIONS = { + ROUNDED: SQUARE, + MINIMAL_HEAVY_HEAD: MINIMAL, + SIMPLE_HEAVY: SIMPLE, + HEAVY: SQUARE, + HEAVY_EDGE: SQUARE, + HEAVY_HEAD: SQUARE, +} + +# Map headed boxes to their headerless equivalents +PLAIN_HEADED_SUBSTITUTIONS = { + HEAVY_HEAD: SQUARE, + SQUARE_DOUBLE_HEAD: SQUARE, + MINIMAL_DOUBLE_HEAD: MINIMAL, + MINIMAL_HEAVY_HEAD: MINIMAL, + ASCII_DOUBLE_HEAD: ASCII2, +} + + +if __name__ == "__main__": # pragma: no cover + + from pip._vendor.rich.columns import Columns + from pip._vendor.rich.panel import Panel + + from . import box as box + from .console import Console + from .table import Table + from .text import Text + + console = Console(record=True) + + BOXES = [ + "ASCII", + "ASCII2", + "ASCII_DOUBLE_HEAD", + "SQUARE", + "SQUARE_DOUBLE_HEAD", + "MINIMAL", + "MINIMAL_HEAVY_HEAD", + "MINIMAL_DOUBLE_HEAD", + "SIMPLE", + "SIMPLE_HEAD", + "SIMPLE_HEAVY", + "HORIZONTALS", + "ROUNDED", + "HEAVY", + "HEAVY_EDGE", + "HEAVY_HEAD", + "DOUBLE", + "DOUBLE_EDGE", + "MARKDOWN", + ] + + console.print(Panel("[bold green]Box Constants", style="green"), justify="center") + console.print() + + columns = Columns(expand=True, padding=2) + for box_name in sorted(BOXES): + table = Table( + show_footer=True, style="dim", border_style="not dim", expand=True + ) + table.add_column("Header 1", "Footer 1") + table.add_column("Header 2", "Footer 2") + table.add_row("Cell", "Cell") + table.add_row("Cell", "Cell") + table.box = getattr(box, box_name) + table.title = Text(f"box.{box_name}", style="magenta") + columns.add_renderable(table) + console.print(columns) + + # console.save_svg("box.svg") diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py new file mode 100644 index 0000000..9354f9e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py @@ -0,0 +1,154 @@ +import re +from functools import lru_cache +from typing import Callable, List + +from ._cell_widths import CELL_WIDTHS + +# Regex to match sequence of the most common character ranges +_is_single_cell_widths = re.compile("^[\u0020-\u006f\u00a0\u02ff\u0370-\u0482]*$").match + + +@lru_cache(4096) +def cached_cell_len(text: str) -> int: + """Get the number of cells required to display text. + + This method always caches, which may use up a lot of memory. It is recommended to use + `cell_len` over this method. + + Args: + text (str): Text to display. + + Returns: + int: Get the number of cells required to display text. + """ + _get_size = get_character_cell_size + total_size = sum(_get_size(character) for character in text) + return total_size + + +def cell_len(text: str, _cell_len: Callable[[str], int] = cached_cell_len) -> int: + """Get the number of cells required to display text. + + Args: + text (str): Text to display. + + Returns: + int: Get the number of cells required to display text. + """ + if len(text) < 512: + return _cell_len(text) + _get_size = get_character_cell_size + total_size = sum(_get_size(character) for character in text) + return total_size + + +@lru_cache(maxsize=4096) +def get_character_cell_size(character: str) -> int: + """Get the cell size of a character. + + Args: + character (str): A single character. + + Returns: + int: Number of cells (0, 1 or 2) occupied by that character. + """ + return _get_codepoint_cell_size(ord(character)) + + +@lru_cache(maxsize=4096) +def _get_codepoint_cell_size(codepoint: int) -> int: + """Get the cell size of a character. + + Args: + codepoint (int): Codepoint of a character. + + Returns: + int: Number of cells (0, 1 or 2) occupied by that character. + """ + + _table = CELL_WIDTHS + lower_bound = 0 + upper_bound = len(_table) - 1 + index = (lower_bound + upper_bound) // 2 + while True: + start, end, width = _table[index] + if codepoint < start: + upper_bound = index - 1 + elif codepoint > end: + lower_bound = index + 1 + else: + return 0 if width == -1 else width + if upper_bound < lower_bound: + break + index = (lower_bound + upper_bound) // 2 + return 1 + + +def set_cell_size(text: str, total: int) -> str: + """Set the length of a string to fit within given number of cells.""" + + if _is_single_cell_widths(text): + size = len(text) + if size < total: + return text + " " * (total - size) + return text[:total] + + if total <= 0: + return "" + cell_size = cell_len(text) + if cell_size == total: + return text + if cell_size < total: + return text + " " * (total - cell_size) + + start = 0 + end = len(text) + + # Binary search until we find the right size + while True: + pos = (start + end) // 2 + before = text[: pos + 1] + before_len = cell_len(before) + if before_len == total + 1 and cell_len(before[-1]) == 2: + return before[:-1] + " " + if before_len == total: + return before + if before_len > total: + end = pos + else: + start = pos + + +# TODO: This is inefficient +# TODO: This might not work with CWJ type characters +def chop_cells(text: str, max_size: int, position: int = 0) -> List[str]: + """Break text in to equal (cell) length strings, returning the characters in reverse + order""" + _get_character_cell_size = get_character_cell_size + characters = [ + (character, _get_character_cell_size(character)) for character in text + ] + total_size = position + lines: List[List[str]] = [[]] + append = lines[-1].append + + for character, size in reversed(characters): + if total_size + size > max_size: + lines.append([character]) + append = lines[-1].append + total_size = size + else: + total_size += size + append(character) + + return ["".join(line) for line in lines] + + +if __name__ == "__main__": # pragma: no cover + + print(get_character_cell_size("😽")) + for line in chop_cells("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", 8): + print(line) + for n in range(80, 1, -1): + print(set_cell_size("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", n) + "|") + print("x" * n) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/color.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/color.py new file mode 100644 index 0000000..dfe4559 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/color.py @@ -0,0 +1,622 @@ +import platform +import re +from colorsys import rgb_to_hls +from enum import IntEnum +from functools import lru_cache +from typing import TYPE_CHECKING, NamedTuple, Optional, Tuple + +from ._palettes import EIGHT_BIT_PALETTE, STANDARD_PALETTE, WINDOWS_PALETTE +from .color_triplet import ColorTriplet +from .repr import Result, rich_repr +from .terminal_theme import DEFAULT_TERMINAL_THEME + +if TYPE_CHECKING: # pragma: no cover + from .terminal_theme import TerminalTheme + from .text import Text + + +WINDOWS = platform.system() == "Windows" + + +class ColorSystem(IntEnum): + """One of the 3 color system supported by terminals.""" + + STANDARD = 1 + EIGHT_BIT = 2 + TRUECOLOR = 3 + WINDOWS = 4 + + def __repr__(self) -> str: + return f"ColorSystem.{self.name}" + + def __str__(self) -> str: + return repr(self) + + +class ColorType(IntEnum): + """Type of color stored in Color class.""" + + DEFAULT = 0 + STANDARD = 1 + EIGHT_BIT = 2 + TRUECOLOR = 3 + WINDOWS = 4 + + def __repr__(self) -> str: + return f"ColorType.{self.name}" + + +ANSI_COLOR_NAMES = { + "black": 0, + "red": 1, + "green": 2, + "yellow": 3, + "blue": 4, + "magenta": 5, + "cyan": 6, + "white": 7, + "bright_black": 8, + "bright_red": 9, + "bright_green": 10, + "bright_yellow": 11, + "bright_blue": 12, + "bright_magenta": 13, + "bright_cyan": 14, + "bright_white": 15, + "grey0": 16, + "gray0": 16, + "navy_blue": 17, + "dark_blue": 18, + "blue3": 20, + "blue1": 21, + "dark_green": 22, + "deep_sky_blue4": 25, + "dodger_blue3": 26, + "dodger_blue2": 27, + "green4": 28, + "spring_green4": 29, + "turquoise4": 30, + "deep_sky_blue3": 32, + "dodger_blue1": 33, + "green3": 40, + "spring_green3": 41, + "dark_cyan": 36, + "light_sea_green": 37, + "deep_sky_blue2": 38, + "deep_sky_blue1": 39, + "spring_green2": 47, + "cyan3": 43, + "dark_turquoise": 44, + "turquoise2": 45, + "green1": 46, + "spring_green1": 48, + "medium_spring_green": 49, + "cyan2": 50, + "cyan1": 51, + "dark_red": 88, + "deep_pink4": 125, + "purple4": 55, + "purple3": 56, + "blue_violet": 57, + "orange4": 94, + "grey37": 59, + "gray37": 59, + "medium_purple4": 60, + "slate_blue3": 62, + "royal_blue1": 63, + "chartreuse4": 64, + "dark_sea_green4": 71, + "pale_turquoise4": 66, + "steel_blue": 67, + "steel_blue3": 68, + "cornflower_blue": 69, + "chartreuse3": 76, + "cadet_blue": 73, + "sky_blue3": 74, + "steel_blue1": 81, + "pale_green3": 114, + "sea_green3": 78, + "aquamarine3": 79, + "medium_turquoise": 80, + "chartreuse2": 112, + "sea_green2": 83, + "sea_green1": 85, + "aquamarine1": 122, + "dark_slate_gray2": 87, + "dark_magenta": 91, + "dark_violet": 128, + "purple": 129, + "light_pink4": 95, + "plum4": 96, + "medium_purple3": 98, + "slate_blue1": 99, + "yellow4": 106, + "wheat4": 101, + "grey53": 102, + "gray53": 102, + "light_slate_grey": 103, + "light_slate_gray": 103, + "medium_purple": 104, + "light_slate_blue": 105, + "dark_olive_green3": 149, + "dark_sea_green": 108, + "light_sky_blue3": 110, + "sky_blue2": 111, + "dark_sea_green3": 150, + "dark_slate_gray3": 116, + "sky_blue1": 117, + "chartreuse1": 118, + "light_green": 120, + "pale_green1": 156, + "dark_slate_gray1": 123, + "red3": 160, + "medium_violet_red": 126, + "magenta3": 164, + "dark_orange3": 166, + "indian_red": 167, + "hot_pink3": 168, + "medium_orchid3": 133, + "medium_orchid": 134, + "medium_purple2": 140, + "dark_goldenrod": 136, + "light_salmon3": 173, + "rosy_brown": 138, + "grey63": 139, + "gray63": 139, + "medium_purple1": 141, + "gold3": 178, + "dark_khaki": 143, + "navajo_white3": 144, + "grey69": 145, + "gray69": 145, + "light_steel_blue3": 146, + "light_steel_blue": 147, + "yellow3": 184, + "dark_sea_green2": 157, + "light_cyan3": 152, + "light_sky_blue1": 153, + "green_yellow": 154, + "dark_olive_green2": 155, + "dark_sea_green1": 193, + "pale_turquoise1": 159, + "deep_pink3": 162, + "magenta2": 200, + "hot_pink2": 169, + "orchid": 170, + "medium_orchid1": 207, + "orange3": 172, + "light_pink3": 174, + "pink3": 175, + "plum3": 176, + "violet": 177, + "light_goldenrod3": 179, + "tan": 180, + "misty_rose3": 181, + "thistle3": 182, + "plum2": 183, + "khaki3": 185, + "light_goldenrod2": 222, + "light_yellow3": 187, + "grey84": 188, + "gray84": 188, + "light_steel_blue1": 189, + "yellow2": 190, + "dark_olive_green1": 192, + "honeydew2": 194, + "light_cyan1": 195, + "red1": 196, + "deep_pink2": 197, + "deep_pink1": 199, + "magenta1": 201, + "orange_red1": 202, + "indian_red1": 204, + "hot_pink": 206, + "dark_orange": 208, + "salmon1": 209, + "light_coral": 210, + "pale_violet_red1": 211, + "orchid2": 212, + "orchid1": 213, + "orange1": 214, + "sandy_brown": 215, + "light_salmon1": 216, + "light_pink1": 217, + "pink1": 218, + "plum1": 219, + "gold1": 220, + "navajo_white1": 223, + "misty_rose1": 224, + "thistle1": 225, + "yellow1": 226, + "light_goldenrod1": 227, + "khaki1": 228, + "wheat1": 229, + "cornsilk1": 230, + "grey100": 231, + "gray100": 231, + "grey3": 232, + "gray3": 232, + "grey7": 233, + "gray7": 233, + "grey11": 234, + "gray11": 234, + "grey15": 235, + "gray15": 235, + "grey19": 236, + "gray19": 236, + "grey23": 237, + "gray23": 237, + "grey27": 238, + "gray27": 238, + "grey30": 239, + "gray30": 239, + "grey35": 240, + "gray35": 240, + "grey39": 241, + "gray39": 241, + "grey42": 242, + "gray42": 242, + "grey46": 243, + "gray46": 243, + "grey50": 244, + "gray50": 244, + "grey54": 245, + "gray54": 245, + "grey58": 246, + "gray58": 246, + "grey62": 247, + "gray62": 247, + "grey66": 248, + "gray66": 248, + "grey70": 249, + "gray70": 249, + "grey74": 250, + "gray74": 250, + "grey78": 251, + "gray78": 251, + "grey82": 252, + "gray82": 252, + "grey85": 253, + "gray85": 253, + "grey89": 254, + "gray89": 254, + "grey93": 255, + "gray93": 255, +} + + +class ColorParseError(Exception): + """The color could not be parsed.""" + + +RE_COLOR = re.compile( + r"""^ +\#([0-9a-f]{6})$| +color\(([0-9]{1,3})\)$| +rgb\(([\d\s,]+)\)$ +""", + re.VERBOSE, +) + + +@rich_repr +class Color(NamedTuple): + """Terminal color definition.""" + + name: str + """The name of the color (typically the input to Color.parse).""" + type: ColorType + """The type of the color.""" + number: Optional[int] = None + """The color number, if a standard color, or None.""" + triplet: Optional[ColorTriplet] = None + """A triplet of color components, if an RGB color.""" + + def __rich__(self) -> "Text": + """Displays the actual color if Rich printed.""" + from .style import Style + from .text import Text + + return Text.assemble( + f"", + ) + + def __rich_repr__(self) -> Result: + yield self.name + yield self.type + yield "number", self.number, None + yield "triplet", self.triplet, None + + @property + def system(self) -> ColorSystem: + """Get the native color system for this color.""" + if self.type == ColorType.DEFAULT: + return ColorSystem.STANDARD + return ColorSystem(int(self.type)) + + @property + def is_system_defined(self) -> bool: + """Check if the color is ultimately defined by the system.""" + return self.system not in (ColorSystem.EIGHT_BIT, ColorSystem.TRUECOLOR) + + @property + def is_default(self) -> bool: + """Check if the color is a default color.""" + return self.type == ColorType.DEFAULT + + def get_truecolor( + self, theme: Optional["TerminalTheme"] = None, foreground: bool = True + ) -> ColorTriplet: + """Get an equivalent color triplet for this color. + + Args: + theme (TerminalTheme, optional): Optional terminal theme, or None to use default. Defaults to None. + foreground (bool, optional): True for a foreground color, or False for background. Defaults to True. + + Returns: + ColorTriplet: A color triplet containing RGB components. + """ + + if theme is None: + theme = DEFAULT_TERMINAL_THEME + if self.type == ColorType.TRUECOLOR: + assert self.triplet is not None + return self.triplet + elif self.type == ColorType.EIGHT_BIT: + assert self.number is not None + return EIGHT_BIT_PALETTE[self.number] + elif self.type == ColorType.STANDARD: + assert self.number is not None + return theme.ansi_colors[self.number] + elif self.type == ColorType.WINDOWS: + assert self.number is not None + return WINDOWS_PALETTE[self.number] + else: # self.type == ColorType.DEFAULT: + assert self.number is None + return theme.foreground_color if foreground else theme.background_color + + @classmethod + def from_ansi(cls, number: int) -> "Color": + """Create a Color number from it's 8-bit ansi number. + + Args: + number (int): A number between 0-255 inclusive. + + Returns: + Color: A new Color instance. + """ + return cls( + name=f"color({number})", + type=(ColorType.STANDARD if number < 16 else ColorType.EIGHT_BIT), + number=number, + ) + + @classmethod + def from_triplet(cls, triplet: "ColorTriplet") -> "Color": + """Create a truecolor RGB color from a triplet of values. + + Args: + triplet (ColorTriplet): A color triplet containing red, green and blue components. + + Returns: + Color: A new color object. + """ + return cls(name=triplet.hex, type=ColorType.TRUECOLOR, triplet=triplet) + + @classmethod + def from_rgb(cls, red: float, green: float, blue: float) -> "Color": + """Create a truecolor from three color components in the range(0->255). + + Args: + red (float): Red component in range 0-255. + green (float): Green component in range 0-255. + blue (float): Blue component in range 0-255. + + Returns: + Color: A new color object. + """ + return cls.from_triplet(ColorTriplet(int(red), int(green), int(blue))) + + @classmethod + def default(cls) -> "Color": + """Get a Color instance representing the default color. + + Returns: + Color: Default color. + """ + return cls(name="default", type=ColorType.DEFAULT) + + @classmethod + @lru_cache(maxsize=1024) + def parse(cls, color: str) -> "Color": + """Parse a color definition.""" + original_color = color + color = color.lower().strip() + + if color == "default": + return cls(color, type=ColorType.DEFAULT) + + color_number = ANSI_COLOR_NAMES.get(color) + if color_number is not None: + return cls( + color, + type=(ColorType.STANDARD if color_number < 16 else ColorType.EIGHT_BIT), + number=color_number, + ) + + color_match = RE_COLOR.match(color) + if color_match is None: + raise ColorParseError(f"{original_color!r} is not a valid color") + + color_24, color_8, color_rgb = color_match.groups() + if color_24: + triplet = ColorTriplet( + int(color_24[0:2], 16), int(color_24[2:4], 16), int(color_24[4:6], 16) + ) + return cls(color, ColorType.TRUECOLOR, triplet=triplet) + + elif color_8: + number = int(color_8) + if number > 255: + raise ColorParseError(f"color number must be <= 255 in {color!r}") + return cls( + color, + type=(ColorType.STANDARD if number < 16 else ColorType.EIGHT_BIT), + number=number, + ) + + else: # color_rgb: + components = color_rgb.split(",") + if len(components) != 3: + raise ColorParseError( + f"expected three components in {original_color!r}" + ) + red, green, blue = components + triplet = ColorTriplet(int(red), int(green), int(blue)) + if not all(component <= 255 for component in triplet): + raise ColorParseError( + f"color components must be <= 255 in {original_color!r}" + ) + return cls(color, ColorType.TRUECOLOR, triplet=triplet) + + @lru_cache(maxsize=1024) + def get_ansi_codes(self, foreground: bool = True) -> Tuple[str, ...]: + """Get the ANSI escape codes for this color.""" + _type = self.type + if _type == ColorType.DEFAULT: + return ("39" if foreground else "49",) + + elif _type == ColorType.WINDOWS: + number = self.number + assert number is not None + fore, back = (30, 40) if number < 8 else (82, 92) + return (str(fore + number if foreground else back + number),) + + elif _type == ColorType.STANDARD: + number = self.number + assert number is not None + fore, back = (30, 40) if number < 8 else (82, 92) + return (str(fore + number if foreground else back + number),) + + elif _type == ColorType.EIGHT_BIT: + assert self.number is not None + return ("38" if foreground else "48", "5", str(self.number)) + + else: # self.standard == ColorStandard.TRUECOLOR: + assert self.triplet is not None + red, green, blue = self.triplet + return ("38" if foreground else "48", "2", str(red), str(green), str(blue)) + + @lru_cache(maxsize=1024) + def downgrade(self, system: ColorSystem) -> "Color": + """Downgrade a color system to a system with fewer colors.""" + + if self.type in (ColorType.DEFAULT, system): + return self + # Convert to 8-bit color from truecolor color + if system == ColorSystem.EIGHT_BIT and self.system == ColorSystem.TRUECOLOR: + assert self.triplet is not None + _h, l, s = rgb_to_hls(*self.triplet.normalized) + # If saturation is under 15% assume it is grayscale + if s < 0.15: + gray = round(l * 25.0) + if gray == 0: + color_number = 16 + elif gray == 25: + color_number = 231 + else: + color_number = 231 + gray + return Color(self.name, ColorType.EIGHT_BIT, number=color_number) + + red, green, blue = self.triplet + six_red = red / 95 if red < 95 else 1 + (red - 95) / 40 + six_green = green / 95 if green < 95 else 1 + (green - 95) / 40 + six_blue = blue / 95 if blue < 95 else 1 + (blue - 95) / 40 + + color_number = ( + 16 + 36 * round(six_red) + 6 * round(six_green) + round(six_blue) + ) + return Color(self.name, ColorType.EIGHT_BIT, number=color_number) + + # Convert to standard from truecolor or 8-bit + elif system == ColorSystem.STANDARD: + if self.system == ColorSystem.TRUECOLOR: + assert self.triplet is not None + triplet = self.triplet + else: # self.system == ColorSystem.EIGHT_BIT + assert self.number is not None + triplet = ColorTriplet(*EIGHT_BIT_PALETTE[self.number]) + + color_number = STANDARD_PALETTE.match(triplet) + return Color(self.name, ColorType.STANDARD, number=color_number) + + elif system == ColorSystem.WINDOWS: + if self.system == ColorSystem.TRUECOLOR: + assert self.triplet is not None + triplet = self.triplet + else: # self.system == ColorSystem.EIGHT_BIT + assert self.number is not None + if self.number < 16: + return Color(self.name, ColorType.WINDOWS, number=self.number) + triplet = ColorTriplet(*EIGHT_BIT_PALETTE[self.number]) + + color_number = WINDOWS_PALETTE.match(triplet) + return Color(self.name, ColorType.WINDOWS, number=color_number) + + return self + + +def parse_rgb_hex(hex_color: str) -> ColorTriplet: + """Parse six hex characters in to RGB triplet.""" + assert len(hex_color) == 6, "must be 6 characters" + color = ColorTriplet( + int(hex_color[0:2], 16), int(hex_color[2:4], 16), int(hex_color[4:6], 16) + ) + return color + + +def blend_rgb( + color1: ColorTriplet, color2: ColorTriplet, cross_fade: float = 0.5 +) -> ColorTriplet: + """Blend one RGB color in to another.""" + r1, g1, b1 = color1 + r2, g2, b2 = color2 + new_color = ColorTriplet( + int(r1 + (r2 - r1) * cross_fade), + int(g1 + (g2 - g1) * cross_fade), + int(b1 + (b2 - b1) * cross_fade), + ) + return new_color + + +if __name__ == "__main__": # pragma: no cover + + from .console import Console + from .table import Table + from .text import Text + + console = Console() + + table = Table(show_footer=False, show_edge=True) + table.add_column("Color", width=10, overflow="ellipsis") + table.add_column("Number", justify="right", style="yellow") + table.add_column("Name", style="green") + table.add_column("Hex", style="blue") + table.add_column("RGB", style="magenta") + + colors = sorted((v, k) for k, v in ANSI_COLOR_NAMES.items()) + for color_number, name in colors: + if "grey" in name: + continue + color_cell = Text(" " * 10, style=f"on {name}") + if color_number < 16: + table.add_row(color_cell, f"{color_number}", Text(f'"{name}"')) + else: + color = EIGHT_BIT_PALETTE[color_number] # type: ignore[has-type] + table.add_row( + color_cell, str(color_number), Text(f'"{name}"'), color.hex, color.rgb + ) + + console.print(table) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py new file mode 100644 index 0000000..02cab32 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py @@ -0,0 +1,38 @@ +from typing import NamedTuple, Tuple + + +class ColorTriplet(NamedTuple): + """The red, green, and blue components of a color.""" + + red: int + """Red component in 0 to 255 range.""" + green: int + """Green component in 0 to 255 range.""" + blue: int + """Blue component in 0 to 255 range.""" + + @property + def hex(self) -> str: + """get the color triplet in CSS style.""" + red, green, blue = self + return f"#{red:02x}{green:02x}{blue:02x}" + + @property + def rgb(self) -> str: + """The color in RGB format. + + Returns: + str: An rgb color, e.g. ``"rgb(100,23,255)"``. + """ + red, green, blue = self + return f"rgb({red},{green},{blue})" + + @property + def normalized(self) -> Tuple[float, float, float]: + """Convert components into floats between 0 and 1. + + Returns: + Tuple[float, float, float]: A tuple of three normalized colour components. + """ + red, green, blue = self + return red / 255.0, green / 255.0, blue / 255.0 diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/columns.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/columns.py new file mode 100644 index 0000000..669a3a7 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/columns.py @@ -0,0 +1,187 @@ +from collections import defaultdict +from itertools import chain +from operator import itemgetter +from typing import Dict, Iterable, List, Optional, Tuple + +from .align import Align, AlignMethod +from .console import Console, ConsoleOptions, RenderableType, RenderResult +from .constrain import Constrain +from .measure import Measurement +from .padding import Padding, PaddingDimensions +from .table import Table +from .text import TextType +from .jupyter import JupyterMixin + + +class Columns(JupyterMixin): + """Display renderables in neat columns. + + Args: + renderables (Iterable[RenderableType]): Any number of Rich renderables (including str). + width (int, optional): The desired width of the columns, or None to auto detect. Defaults to None. + padding (PaddingDimensions, optional): Optional padding around cells. Defaults to (0, 1). + expand (bool, optional): Expand columns to full width. Defaults to False. + equal (bool, optional): Arrange in to equal sized columns. Defaults to False. + column_first (bool, optional): Align items from top to bottom (rather than left to right). Defaults to False. + right_to_left (bool, optional): Start column from right hand side. Defaults to False. + align (str, optional): Align value ("left", "right", or "center") or None for default. Defaults to None. + title (TextType, optional): Optional title for Columns. + """ + + def __init__( + self, + renderables: Optional[Iterable[RenderableType]] = None, + padding: PaddingDimensions = (0, 1), + *, + width: Optional[int] = None, + expand: bool = False, + equal: bool = False, + column_first: bool = False, + right_to_left: bool = False, + align: Optional[AlignMethod] = None, + title: Optional[TextType] = None, + ) -> None: + self.renderables = list(renderables or []) + self.width = width + self.padding = padding + self.expand = expand + self.equal = equal + self.column_first = column_first + self.right_to_left = right_to_left + self.align: Optional[AlignMethod] = align + self.title = title + + def add_renderable(self, renderable: RenderableType) -> None: + """Add a renderable to the columns. + + Args: + renderable (RenderableType): Any renderable object. + """ + self.renderables.append(renderable) + + def __rich_console__( + self, console: Console, options: ConsoleOptions + ) -> RenderResult: + render_str = console.render_str + renderables = [ + render_str(renderable) if isinstance(renderable, str) else renderable + for renderable in self.renderables + ] + if not renderables: + return + _top, right, _bottom, left = Padding.unpack(self.padding) + width_padding = max(left, right) + max_width = options.max_width + widths: Dict[int, int] = defaultdict(int) + column_count = len(renderables) + + get_measurement = Measurement.get + renderable_widths = [ + get_measurement(console, options, renderable).maximum + for renderable in renderables + ] + if self.equal: + renderable_widths = [max(renderable_widths)] * len(renderable_widths) + + def iter_renderables( + column_count: int, + ) -> Iterable[Tuple[int, Optional[RenderableType]]]: + item_count = len(renderables) + if self.column_first: + width_renderables = list(zip(renderable_widths, renderables)) + + column_lengths: List[int] = [item_count // column_count] * column_count + for col_no in range(item_count % column_count): + column_lengths[col_no] += 1 + + row_count = (item_count + column_count - 1) // column_count + cells = [[-1] * column_count for _ in range(row_count)] + row = col = 0 + for index in range(item_count): + cells[row][col] = index + column_lengths[col] -= 1 + if column_lengths[col]: + row += 1 + else: + col += 1 + row = 0 + for index in chain.from_iterable(cells): + if index == -1: + break + yield width_renderables[index] + else: + yield from zip(renderable_widths, renderables) + # Pad odd elements with spaces + if item_count % column_count: + for _ in range(column_count - (item_count % column_count)): + yield 0, None + + table = Table.grid(padding=self.padding, collapse_padding=True, pad_edge=False) + table.expand = self.expand + table.title = self.title + + if self.width is not None: + column_count = (max_width) // (self.width + width_padding) + for _ in range(column_count): + table.add_column(width=self.width) + else: + while column_count > 1: + widths.clear() + column_no = 0 + for renderable_width, _ in iter_renderables(column_count): + widths[column_no] = max(widths[column_no], renderable_width) + total_width = sum(widths.values()) + width_padding * ( + len(widths) - 1 + ) + if total_width > max_width: + column_count = len(widths) - 1 + break + else: + column_no = (column_no + 1) % column_count + else: + break + + get_renderable = itemgetter(1) + _renderables = [ + get_renderable(_renderable) + for _renderable in iter_renderables(column_count) + ] + if self.equal: + _renderables = [ + None + if renderable is None + else Constrain(renderable, renderable_widths[0]) + for renderable in _renderables + ] + if self.align: + align = self.align + _Align = Align + _renderables = [ + None if renderable is None else _Align(renderable, align) + for renderable in _renderables + ] + + right_to_left = self.right_to_left + add_row = table.add_row + for start in range(0, len(_renderables), column_count): + row = _renderables[start : start + column_count] + if right_to_left: + row = row[::-1] + add_row(*row) + yield table + + +if __name__ == "__main__": # pragma: no cover + import os + + console = Console() + + files = [f"{i} {s}" for i, s in enumerate(sorted(os.listdir()))] + columns = Columns(files, padding=(0, 1), expand=False, equal=False) + console.print(columns) + console.rule() + columns.column_first = True + console.print(columns) + columns.right_to_left = True + console.rule() + console.print(columns) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/console.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/console.py new file mode 100644 index 0000000..e559cbb --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/console.py @@ -0,0 +1,2633 @@ +import inspect +import os +import platform +import sys +import threading +import zlib +from abc import ABC, abstractmethod +from dataclasses import dataclass, field +from datetime import datetime +from functools import wraps +from getpass import getpass +from html import escape +from inspect import isclass +from itertools import islice +from math import ceil +from time import monotonic +from types import FrameType, ModuleType, TracebackType +from typing import ( + IO, + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + List, + Mapping, + NamedTuple, + Optional, + TextIO, + Tuple, + Type, + Union, + cast, +) + +from pip._vendor.rich._null_file import NULL_FILE + +if sys.version_info >= (3, 8): + from typing import Literal, Protocol, runtime_checkable +else: + from pip._vendor.typing_extensions import ( + Literal, + Protocol, + runtime_checkable, + ) # pragma: no cover + +from . import errors, themes +from ._emoji_replace import _emoji_replace +from ._export_format import CONSOLE_HTML_FORMAT, CONSOLE_SVG_FORMAT +from ._fileno import get_fileno +from ._log_render import FormatTimeCallable, LogRender +from .align import Align, AlignMethod +from .color import ColorSystem, blend_rgb +from .control import Control +from .emoji import EmojiVariant +from .highlighter import NullHighlighter, ReprHighlighter +from .markup import render as render_markup +from .measure import Measurement, measure_renderables +from .pager import Pager, SystemPager +from .pretty import Pretty, is_expandable +from .protocol import rich_cast +from .region import Region +from .scope import render_scope +from .screen import Screen +from .segment import Segment +from .style import Style, StyleType +from .styled import Styled +from .terminal_theme import DEFAULT_TERMINAL_THEME, SVG_EXPORT_THEME, TerminalTheme +from .text import Text, TextType +from .theme import Theme, ThemeStack + +if TYPE_CHECKING: + from ._windows import WindowsConsoleFeatures + from .live import Live + from .status import Status + +JUPYTER_DEFAULT_COLUMNS = 115 +JUPYTER_DEFAULT_LINES = 100 +WINDOWS = platform.system() == "Windows" + +HighlighterType = Callable[[Union[str, "Text"]], "Text"] +JustifyMethod = Literal["default", "left", "center", "right", "full"] +OverflowMethod = Literal["fold", "crop", "ellipsis", "ignore"] + + +class NoChange: + pass + + +NO_CHANGE = NoChange() + +try: + _STDIN_FILENO = sys.__stdin__.fileno() +except Exception: + _STDIN_FILENO = 0 +try: + _STDOUT_FILENO = sys.__stdout__.fileno() +except Exception: + _STDOUT_FILENO = 1 +try: + _STDERR_FILENO = sys.__stderr__.fileno() +except Exception: + _STDERR_FILENO = 2 + +_STD_STREAMS = (_STDIN_FILENO, _STDOUT_FILENO, _STDERR_FILENO) +_STD_STREAMS_OUTPUT = (_STDOUT_FILENO, _STDERR_FILENO) + + +_TERM_COLORS = { + "kitty": ColorSystem.EIGHT_BIT, + "256color": ColorSystem.EIGHT_BIT, + "16color": ColorSystem.STANDARD, +} + + +class ConsoleDimensions(NamedTuple): + """Size of the terminal.""" + + width: int + """The width of the console in 'cells'.""" + height: int + """The height of the console in lines.""" + + +@dataclass +class ConsoleOptions: + """Options for __rich_console__ method.""" + + size: ConsoleDimensions + """Size of console.""" + legacy_windows: bool + """legacy_windows: flag for legacy windows.""" + min_width: int + """Minimum width of renderable.""" + max_width: int + """Maximum width of renderable.""" + is_terminal: bool + """True if the target is a terminal, otherwise False.""" + encoding: str + """Encoding of terminal.""" + max_height: int + """Height of container (starts as terminal)""" + justify: Optional[JustifyMethod] = None + """Justify value override for renderable.""" + overflow: Optional[OverflowMethod] = None + """Overflow value override for renderable.""" + no_wrap: Optional[bool] = False + """Disable wrapping for text.""" + highlight: Optional[bool] = None + """Highlight override for render_str.""" + markup: Optional[bool] = None + """Enable markup when rendering strings.""" + height: Optional[int] = None + + @property + def ascii_only(self) -> bool: + """Check if renderables should use ascii only.""" + return not self.encoding.startswith("utf") + + def copy(self) -> "ConsoleOptions": + """Return a copy of the options. + + Returns: + ConsoleOptions: a copy of self. + """ + options: ConsoleOptions = ConsoleOptions.__new__(ConsoleOptions) + options.__dict__ = self.__dict__.copy() + return options + + def update( + self, + *, + width: Union[int, NoChange] = NO_CHANGE, + min_width: Union[int, NoChange] = NO_CHANGE, + max_width: Union[int, NoChange] = NO_CHANGE, + justify: Union[Optional[JustifyMethod], NoChange] = NO_CHANGE, + overflow: Union[Optional[OverflowMethod], NoChange] = NO_CHANGE, + no_wrap: Union[Optional[bool], NoChange] = NO_CHANGE, + highlight: Union[Optional[bool], NoChange] = NO_CHANGE, + markup: Union[Optional[bool], NoChange] = NO_CHANGE, + height: Union[Optional[int], NoChange] = NO_CHANGE, + ) -> "ConsoleOptions": + """Update values, return a copy.""" + options = self.copy() + if not isinstance(width, NoChange): + options.min_width = options.max_width = max(0, width) + if not isinstance(min_width, NoChange): + options.min_width = min_width + if not isinstance(max_width, NoChange): + options.max_width = max_width + if not isinstance(justify, NoChange): + options.justify = justify + if not isinstance(overflow, NoChange): + options.overflow = overflow + if not isinstance(no_wrap, NoChange): + options.no_wrap = no_wrap + if not isinstance(highlight, NoChange): + options.highlight = highlight + if not isinstance(markup, NoChange): + options.markup = markup + if not isinstance(height, NoChange): + if height is not None: + options.max_height = height + options.height = None if height is None else max(0, height) + return options + + def update_width(self, width: int) -> "ConsoleOptions": + """Update just the width, return a copy. + + Args: + width (int): New width (sets both min_width and max_width) + + Returns: + ~ConsoleOptions: New console options instance. + """ + options = self.copy() + options.min_width = options.max_width = max(0, width) + return options + + def update_height(self, height: int) -> "ConsoleOptions": + """Update the height, and return a copy. + + Args: + height (int): New height + + Returns: + ~ConsoleOptions: New Console options instance. + """ + options = self.copy() + options.max_height = options.height = height + return options + + def reset_height(self) -> "ConsoleOptions": + """Return a copy of the options with height set to ``None``. + + Returns: + ~ConsoleOptions: New console options instance. + """ + options = self.copy() + options.height = None + return options + + def update_dimensions(self, width: int, height: int) -> "ConsoleOptions": + """Update the width and height, and return a copy. + + Args: + width (int): New width (sets both min_width and max_width). + height (int): New height. + + Returns: + ~ConsoleOptions: New console options instance. + """ + options = self.copy() + options.min_width = options.max_width = max(0, width) + options.height = options.max_height = height + return options + + +@runtime_checkable +class RichCast(Protocol): + """An object that may be 'cast' to a console renderable.""" + + def __rich__( + self, + ) -> Union["ConsoleRenderable", "RichCast", str]: # pragma: no cover + ... + + +@runtime_checkable +class ConsoleRenderable(Protocol): + """An object that supports the console protocol.""" + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": # pragma: no cover + ... + + +# A type that may be rendered by Console. +RenderableType = Union[ConsoleRenderable, RichCast, str] + +# The result of calling a __rich_console__ method. +RenderResult = Iterable[Union[RenderableType, Segment]] + +_null_highlighter = NullHighlighter() + + +class CaptureError(Exception): + """An error in the Capture context manager.""" + + +class NewLine: + """A renderable to generate new line(s)""" + + def __init__(self, count: int = 1) -> None: + self.count = count + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> Iterable[Segment]: + yield Segment("\n" * self.count) + + +class ScreenUpdate: + """Render a list of lines at a given offset.""" + + def __init__(self, lines: List[List[Segment]], x: int, y: int) -> None: + self._lines = lines + self.x = x + self.y = y + + def __rich_console__( + self, console: "Console", options: ConsoleOptions + ) -> RenderResult: + x = self.x + move_to = Control.move_to + for offset, line in enumerate(self._lines, self.y): + yield move_to(x, offset) + yield from line + + +class Capture: + """Context manager to capture the result of printing to the console. + See :meth:`~rich.console.Console.capture` for how to use. + + Args: + console (Console): A console instance to capture output. + """ + + def __init__(self, console: "Console") -> None: + self._console = console + self._result: Optional[str] = None + + def __enter__(self) -> "Capture": + self._console.begin_capture() + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + self._result = self._console.end_capture() + + def get(self) -> str: + """Get the result of the capture.""" + if self._result is None: + raise CaptureError( + "Capture result is not available until context manager exits." + ) + return self._result + + +class ThemeContext: + """A context manager to use a temporary theme. See :meth:`~rich.console.Console.use_theme` for usage.""" + + def __init__(self, console: "Console", theme: Theme, inherit: bool = True) -> None: + self.console = console + self.theme = theme + self.inherit = inherit + + def __enter__(self) -> "ThemeContext": + self.console.push_theme(self.theme) + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + self.console.pop_theme() + + +class PagerContext: + """A context manager that 'pages' content. See :meth:`~rich.console.Console.pager` for usage.""" + + def __init__( + self, + console: "Console", + pager: Optional[Pager] = None, + styles: bool = False, + links: bool = False, + ) -> None: + self._console = console + self.pager = SystemPager() if pager is None else pager + self.styles = styles + self.links = links + + def __enter__(self) -> "PagerContext": + self._console._enter_buffer() + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + if exc_type is None: + with self._console._lock: + buffer: List[Segment] = self._console._buffer[:] + del self._console._buffer[:] + segments: Iterable[Segment] = buffer + if not self.styles: + segments = Segment.strip_styles(segments) + elif not self.links: + segments = Segment.strip_links(segments) + content = self._console._render_buffer(segments) + self.pager.show(content) + self._console._exit_buffer() + + +class ScreenContext: + """A context manager that enables an alternative screen. See :meth:`~rich.console.Console.screen` for usage.""" + + def __init__( + self, console: "Console", hide_cursor: bool, style: StyleType = "" + ) -> None: + self.console = console + self.hide_cursor = hide_cursor + self.screen = Screen(style=style) + self._changed = False + + def update( + self, *renderables: RenderableType, style: Optional[StyleType] = None + ) -> None: + """Update the screen. + + Args: + renderable (RenderableType, optional): Optional renderable to replace current renderable, + or None for no change. Defaults to None. + style: (Style, optional): Replacement style, or None for no change. Defaults to None. + """ + if renderables: + self.screen.renderable = ( + Group(*renderables) if len(renderables) > 1 else renderables[0] + ) + if style is not None: + self.screen.style = style + self.console.print(self.screen, end="") + + def __enter__(self) -> "ScreenContext": + self._changed = self.console.set_alt_screen(True) + if self._changed and self.hide_cursor: + self.console.show_cursor(False) + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + if self._changed: + self.console.set_alt_screen(False) + if self.hide_cursor: + self.console.show_cursor(True) + + +class Group: + """Takes a group of renderables and returns a renderable object that renders the group. + + Args: + renderables (Iterable[RenderableType]): An iterable of renderable objects. + fit (bool, optional): Fit dimension of group to contents, or fill available space. Defaults to True. + """ + + def __init__(self, *renderables: "RenderableType", fit: bool = True) -> None: + self._renderables = renderables + self.fit = fit + self._render: Optional[List[RenderableType]] = None + + @property + def renderables(self) -> List["RenderableType"]: + if self._render is None: + self._render = list(self._renderables) + return self._render + + def __rich_measure__( + self, console: "Console", options: "ConsoleOptions" + ) -> "Measurement": + if self.fit: + return measure_renderables(console, options, self.renderables) + else: + return Measurement(options.max_width, options.max_width) + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> RenderResult: + yield from self.renderables + + +def group(fit: bool = True) -> Callable[..., Callable[..., Group]]: + """A decorator that turns an iterable of renderables in to a group. + + Args: + fit (bool, optional): Fit dimension of group to contents, or fill available space. Defaults to True. + """ + + def decorator( + method: Callable[..., Iterable[RenderableType]] + ) -> Callable[..., Group]: + """Convert a method that returns an iterable of renderables in to a Group.""" + + @wraps(method) + def _replace(*args: Any, **kwargs: Any) -> Group: + renderables = method(*args, **kwargs) + return Group(*renderables, fit=fit) + + return _replace + + return decorator + + +def _is_jupyter() -> bool: # pragma: no cover + """Check if we're running in a Jupyter notebook.""" + try: + get_ipython # type: ignore[name-defined] + except NameError: + return False + ipython = get_ipython() # type: ignore[name-defined] + shell = ipython.__class__.__name__ + if ( + "google.colab" in str(ipython.__class__) + or os.getenv("DATABRICKS_RUNTIME_VERSION") + or shell == "ZMQInteractiveShell" + ): + return True # Jupyter notebook or qtconsole + elif shell == "TerminalInteractiveShell": + return False # Terminal running IPython + else: + return False # Other type (?) + + +COLOR_SYSTEMS = { + "standard": ColorSystem.STANDARD, + "256": ColorSystem.EIGHT_BIT, + "truecolor": ColorSystem.TRUECOLOR, + "windows": ColorSystem.WINDOWS, +} + +_COLOR_SYSTEMS_NAMES = {system: name for name, system in COLOR_SYSTEMS.items()} + + +@dataclass +class ConsoleThreadLocals(threading.local): + """Thread local values for Console context.""" + + theme_stack: ThemeStack + buffer: List[Segment] = field(default_factory=list) + buffer_index: int = 0 + + +class RenderHook(ABC): + """Provides hooks in to the render process.""" + + @abstractmethod + def process_renderables( + self, renderables: List[ConsoleRenderable] + ) -> List[ConsoleRenderable]: + """Called with a list of objects to render. + + This method can return a new list of renderables, or modify and return the same list. + + Args: + renderables (List[ConsoleRenderable]): A number of renderable objects. + + Returns: + List[ConsoleRenderable]: A replacement list of renderables. + """ + + +_windows_console_features: Optional["WindowsConsoleFeatures"] = None + + +def get_windows_console_features() -> "WindowsConsoleFeatures": # pragma: no cover + global _windows_console_features + if _windows_console_features is not None: + return _windows_console_features + from ._windows import get_windows_console_features + + _windows_console_features = get_windows_console_features() + return _windows_console_features + + +def detect_legacy_windows() -> bool: + """Detect legacy Windows.""" + return WINDOWS and not get_windows_console_features().vt + + +class Console: + """A high level console interface. + + Args: + color_system (str, optional): The color system supported by your terminal, + either ``"standard"``, ``"256"`` or ``"truecolor"``. Leave as ``"auto"`` to autodetect. + force_terminal (Optional[bool], optional): Enable/disable terminal control codes, or None to auto-detect terminal. Defaults to None. + force_jupyter (Optional[bool], optional): Enable/disable Jupyter rendering, or None to auto-detect Jupyter. Defaults to None. + force_interactive (Optional[bool], optional): Enable/disable interactive mode, or None to auto detect. Defaults to None. + soft_wrap (Optional[bool], optional): Set soft wrap default on print method. Defaults to False. + theme (Theme, optional): An optional style theme object, or ``None`` for default theme. + stderr (bool, optional): Use stderr rather than stdout if ``file`` is not specified. Defaults to False. + file (IO, optional): A file object where the console should write to. Defaults to stdout. + quiet (bool, Optional): Boolean to suppress all output. Defaults to False. + width (int, optional): The width of the terminal. Leave as default to auto-detect width. + height (int, optional): The height of the terminal. Leave as default to auto-detect height. + style (StyleType, optional): Style to apply to all output, or None for no style. Defaults to None. + no_color (Optional[bool], optional): Enabled no color mode, or None to auto detect. Defaults to None. + tab_size (int, optional): Number of spaces used to replace a tab character. Defaults to 8. + record (bool, optional): Boolean to enable recording of terminal output, + required to call :meth:`export_html`, :meth:`export_svg`, and :meth:`export_text`. Defaults to False. + markup (bool, optional): Boolean to enable :ref:`console_markup`. Defaults to True. + emoji (bool, optional): Enable emoji code. Defaults to True. + emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. + highlight (bool, optional): Enable automatic highlighting. Defaults to True. + log_time (bool, optional): Boolean to enable logging of time by :meth:`log` methods. Defaults to True. + log_path (bool, optional): Boolean to enable the logging of the caller by :meth:`log`. Defaults to True. + log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for strftime or callable that formats the time. Defaults to "[%X] ". + highlighter (HighlighterType, optional): Default highlighter. + legacy_windows (bool, optional): Enable legacy Windows mode, or ``None`` to auto detect. Defaults to ``None``. + safe_box (bool, optional): Restrict box options that don't render on legacy Windows. + get_datetime (Callable[[], datetime], optional): Callable that gets the current time as a datetime.datetime object (used by Console.log), + or None for datetime.now. + get_time (Callable[[], time], optional): Callable that gets the current time in seconds, default uses time.monotonic. + """ + + _environ: Mapping[str, str] = os.environ + + def __init__( + self, + *, + color_system: Optional[ + Literal["auto", "standard", "256", "truecolor", "windows"] + ] = "auto", + force_terminal: Optional[bool] = None, + force_jupyter: Optional[bool] = None, + force_interactive: Optional[bool] = None, + soft_wrap: bool = False, + theme: Optional[Theme] = None, + stderr: bool = False, + file: Optional[IO[str]] = None, + quiet: bool = False, + width: Optional[int] = None, + height: Optional[int] = None, + style: Optional[StyleType] = None, + no_color: Optional[bool] = None, + tab_size: int = 8, + record: bool = False, + markup: bool = True, + emoji: bool = True, + emoji_variant: Optional[EmojiVariant] = None, + highlight: bool = True, + log_time: bool = True, + log_path: bool = True, + log_time_format: Union[str, FormatTimeCallable] = "[%X]", + highlighter: Optional["HighlighterType"] = ReprHighlighter(), + legacy_windows: Optional[bool] = None, + safe_box: bool = True, + get_datetime: Optional[Callable[[], datetime]] = None, + get_time: Optional[Callable[[], float]] = None, + _environ: Optional[Mapping[str, str]] = None, + ): + # Copy of os.environ allows us to replace it for testing + if _environ is not None: + self._environ = _environ + + self.is_jupyter = _is_jupyter() if force_jupyter is None else force_jupyter + if self.is_jupyter: + if width is None: + jupyter_columns = self._environ.get("JUPYTER_COLUMNS") + if jupyter_columns is not None and jupyter_columns.isdigit(): + width = int(jupyter_columns) + else: + width = JUPYTER_DEFAULT_COLUMNS + if height is None: + jupyter_lines = self._environ.get("JUPYTER_LINES") + if jupyter_lines is not None and jupyter_lines.isdigit(): + height = int(jupyter_lines) + else: + height = JUPYTER_DEFAULT_LINES + + self.tab_size = tab_size + self.record = record + self._markup = markup + self._emoji = emoji + self._emoji_variant: Optional[EmojiVariant] = emoji_variant + self._highlight = highlight + self.legacy_windows: bool = ( + (detect_legacy_windows() and not self.is_jupyter) + if legacy_windows is None + else legacy_windows + ) + + if width is None: + columns = self._environ.get("COLUMNS") + if columns is not None and columns.isdigit(): + width = int(columns) - self.legacy_windows + if height is None: + lines = self._environ.get("LINES") + if lines is not None and lines.isdigit(): + height = int(lines) + + self.soft_wrap = soft_wrap + self._width = width + self._height = height + + self._color_system: Optional[ColorSystem] + + self._force_terminal = None + if force_terminal is not None: + self._force_terminal = force_terminal + + self._file = file + self.quiet = quiet + self.stderr = stderr + + if color_system is None: + self._color_system = None + elif color_system == "auto": + self._color_system = self._detect_color_system() + else: + self._color_system = COLOR_SYSTEMS[color_system] + + self._lock = threading.RLock() + self._log_render = LogRender( + show_time=log_time, + show_path=log_path, + time_format=log_time_format, + ) + self.highlighter: HighlighterType = highlighter or _null_highlighter + self.safe_box = safe_box + self.get_datetime = get_datetime or datetime.now + self.get_time = get_time or monotonic + self.style = style + self.no_color = ( + no_color if no_color is not None else "NO_COLOR" in self._environ + ) + self.is_interactive = ( + (self.is_terminal and not self.is_dumb_terminal) + if force_interactive is None + else force_interactive + ) + + self._record_buffer_lock = threading.RLock() + self._thread_locals = ConsoleThreadLocals( + theme_stack=ThemeStack(themes.DEFAULT if theme is None else theme) + ) + self._record_buffer: List[Segment] = [] + self._render_hooks: List[RenderHook] = [] + self._live: Optional["Live"] = None + self._is_alt_screen = False + + def __repr__(self) -> str: + return f"" + + @property + def file(self) -> IO[str]: + """Get the file object to write to.""" + file = self._file or (sys.stderr if self.stderr else sys.stdout) + file = getattr(file, "rich_proxied_file", file) + if file is None: + file = NULL_FILE + return file + + @file.setter + def file(self, new_file: IO[str]) -> None: + """Set a new file object.""" + self._file = new_file + + @property + def _buffer(self) -> List[Segment]: + """Get a thread local buffer.""" + return self._thread_locals.buffer + + @property + def _buffer_index(self) -> int: + """Get a thread local buffer.""" + return self._thread_locals.buffer_index + + @_buffer_index.setter + def _buffer_index(self, value: int) -> None: + self._thread_locals.buffer_index = value + + @property + def _theme_stack(self) -> ThemeStack: + """Get the thread local theme stack.""" + return self._thread_locals.theme_stack + + def _detect_color_system(self) -> Optional[ColorSystem]: + """Detect color system from env vars.""" + if self.is_jupyter: + return ColorSystem.TRUECOLOR + if not self.is_terminal or self.is_dumb_terminal: + return None + if WINDOWS: # pragma: no cover + if self.legacy_windows: # pragma: no cover + return ColorSystem.WINDOWS + windows_console_features = get_windows_console_features() + return ( + ColorSystem.TRUECOLOR + if windows_console_features.truecolor + else ColorSystem.EIGHT_BIT + ) + else: + color_term = self._environ.get("COLORTERM", "").strip().lower() + if color_term in ("truecolor", "24bit"): + return ColorSystem.TRUECOLOR + term = self._environ.get("TERM", "").strip().lower() + _term_name, _hyphen, colors = term.rpartition("-") + color_system = _TERM_COLORS.get(colors, ColorSystem.STANDARD) + return color_system + + def _enter_buffer(self) -> None: + """Enter in to a buffer context, and buffer all output.""" + self._buffer_index += 1 + + def _exit_buffer(self) -> None: + """Leave buffer context, and render content if required.""" + self._buffer_index -= 1 + self._check_buffer() + + def set_live(self, live: "Live") -> None: + """Set Live instance. Used by Live context manager. + + Args: + live (Live): Live instance using this Console. + + Raises: + errors.LiveError: If this Console has a Live context currently active. + """ + with self._lock: + if self._live is not None: + raise errors.LiveError("Only one live display may be active at once") + self._live = live + + def clear_live(self) -> None: + """Clear the Live instance.""" + with self._lock: + self._live = None + + def push_render_hook(self, hook: RenderHook) -> None: + """Add a new render hook to the stack. + + Args: + hook (RenderHook): Render hook instance. + """ + with self._lock: + self._render_hooks.append(hook) + + def pop_render_hook(self) -> None: + """Pop the last renderhook from the stack.""" + with self._lock: + self._render_hooks.pop() + + def __enter__(self) -> "Console": + """Own context manager to enter buffer context.""" + self._enter_buffer() + return self + + def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: + """Exit buffer context.""" + self._exit_buffer() + + def begin_capture(self) -> None: + """Begin capturing console output. Call :meth:`end_capture` to exit capture mode and return output.""" + self._enter_buffer() + + def end_capture(self) -> str: + """End capture mode and return captured string. + + Returns: + str: Console output. + """ + render_result = self._render_buffer(self._buffer) + del self._buffer[:] + self._exit_buffer() + return render_result + + def push_theme(self, theme: Theme, *, inherit: bool = True) -> None: + """Push a new theme on to the top of the stack, replacing the styles from the previous theme. + Generally speaking, you should call :meth:`~rich.console.Console.use_theme` to get a context manager, rather + than calling this method directly. + + Args: + theme (Theme): A theme instance. + inherit (bool, optional): Inherit existing styles. Defaults to True. + """ + self._theme_stack.push_theme(theme, inherit=inherit) + + def pop_theme(self) -> None: + """Remove theme from top of stack, restoring previous theme.""" + self._theme_stack.pop_theme() + + def use_theme(self, theme: Theme, *, inherit: bool = True) -> ThemeContext: + """Use a different theme for the duration of the context manager. + + Args: + theme (Theme): Theme instance to user. + inherit (bool, optional): Inherit existing console styles. Defaults to True. + + Returns: + ThemeContext: [description] + """ + return ThemeContext(self, theme, inherit) + + @property + def color_system(self) -> Optional[str]: + """Get color system string. + + Returns: + Optional[str]: "standard", "256" or "truecolor". + """ + + if self._color_system is not None: + return _COLOR_SYSTEMS_NAMES[self._color_system] + else: + return None + + @property + def encoding(self) -> str: + """Get the encoding of the console file, e.g. ``"utf-8"``. + + Returns: + str: A standard encoding string. + """ + return (getattr(self.file, "encoding", "utf-8") or "utf-8").lower() + + @property + def is_terminal(self) -> bool: + """Check if the console is writing to a terminal. + + Returns: + bool: True if the console writing to a device capable of + understanding terminal codes, otherwise False. + """ + if self._force_terminal is not None: + return self._force_terminal + + if hasattr(sys.stdin, "__module__") and sys.stdin.__module__.startswith( + "idlelib" + ): + # Return False for Idle which claims to be a tty but can't handle ansi codes + return False + + if self.is_jupyter: + # return False for Jupyter, which may have FORCE_COLOR set + return False + + # If FORCE_COLOR env var has any value at all, we assume a terminal. + force_color = self._environ.get("FORCE_COLOR") + if force_color is not None: + self._force_terminal = True + return True + + isatty: Optional[Callable[[], bool]] = getattr(self.file, "isatty", None) + try: + return False if isatty is None else isatty() + except ValueError: + # in some situation (at the end of a pytest run for example) isatty() can raise + # ValueError: I/O operation on closed file + # return False because we aren't in a terminal anymore + return False + + @property + def is_dumb_terminal(self) -> bool: + """Detect dumb terminal. + + Returns: + bool: True if writing to a dumb terminal, otherwise False. + + """ + _term = self._environ.get("TERM", "") + is_dumb = _term.lower() in ("dumb", "unknown") + return self.is_terminal and is_dumb + + @property + def options(self) -> ConsoleOptions: + """Get default console options.""" + return ConsoleOptions( + max_height=self.size.height, + size=self.size, + legacy_windows=self.legacy_windows, + min_width=1, + max_width=self.width, + encoding=self.encoding, + is_terminal=self.is_terminal, + ) + + @property + def size(self) -> ConsoleDimensions: + """Get the size of the console. + + Returns: + ConsoleDimensions: A named tuple containing the dimensions. + """ + + if self._width is not None and self._height is not None: + return ConsoleDimensions(self._width - self.legacy_windows, self._height) + + if self.is_dumb_terminal: + return ConsoleDimensions(80, 25) + + width: Optional[int] = None + height: Optional[int] = None + + if WINDOWS: # pragma: no cover + try: + width, height = os.get_terminal_size() + except (AttributeError, ValueError, OSError): # Probably not a terminal + pass + else: + for file_descriptor in _STD_STREAMS: + try: + width, height = os.get_terminal_size(file_descriptor) + except (AttributeError, ValueError, OSError): + pass + else: + break + + columns = self._environ.get("COLUMNS") + if columns is not None and columns.isdigit(): + width = int(columns) + lines = self._environ.get("LINES") + if lines is not None and lines.isdigit(): + height = int(lines) + + # get_terminal_size can report 0, 0 if run from pseudo-terminal + width = width or 80 + height = height or 25 + return ConsoleDimensions( + width - self.legacy_windows if self._width is None else self._width, + height if self._height is None else self._height, + ) + + @size.setter + def size(self, new_size: Tuple[int, int]) -> None: + """Set a new size for the terminal. + + Args: + new_size (Tuple[int, int]): New width and height. + """ + width, height = new_size + self._width = width + self._height = height + + @property + def width(self) -> int: + """Get the width of the console. + + Returns: + int: The width (in characters) of the console. + """ + return self.size.width + + @width.setter + def width(self, width: int) -> None: + """Set width. + + Args: + width (int): New width. + """ + self._width = width + + @property + def height(self) -> int: + """Get the height of the console. + + Returns: + int: The height (in lines) of the console. + """ + return self.size.height + + @height.setter + def height(self, height: int) -> None: + """Set height. + + Args: + height (int): new height. + """ + self._height = height + + def bell(self) -> None: + """Play a 'bell' sound (if supported by the terminal).""" + self.control(Control.bell()) + + def capture(self) -> Capture: + """A context manager to *capture* the result of print() or log() in a string, + rather than writing it to the console. + + Example: + >>> from rich.console import Console + >>> console = Console() + >>> with console.capture() as capture: + ... console.print("[bold magenta]Hello World[/]") + >>> print(capture.get()) + + Returns: + Capture: Context manager with disables writing to the terminal. + """ + capture = Capture(self) + return capture + + def pager( + self, pager: Optional[Pager] = None, styles: bool = False, links: bool = False + ) -> PagerContext: + """A context manager to display anything printed within a "pager". The pager application + is defined by the system and will typically support at least pressing a key to scroll. + + Args: + pager (Pager, optional): A pager object, or None to use :class:`~rich.pager.SystemPager`. Defaults to None. + styles (bool, optional): Show styles in pager. Defaults to False. + links (bool, optional): Show links in pager. Defaults to False. + + Example: + >>> from rich.console import Console + >>> from rich.__main__ import make_test_card + >>> console = Console() + >>> with console.pager(): + console.print(make_test_card()) + + Returns: + PagerContext: A context manager. + """ + return PagerContext(self, pager=pager, styles=styles, links=links) + + def line(self, count: int = 1) -> None: + """Write new line(s). + + Args: + count (int, optional): Number of new lines. Defaults to 1. + """ + + assert count >= 0, "count must be >= 0" + self.print(NewLine(count)) + + def clear(self, home: bool = True) -> None: + """Clear the screen. + + Args: + home (bool, optional): Also move the cursor to 'home' position. Defaults to True. + """ + if home: + self.control(Control.clear(), Control.home()) + else: + self.control(Control.clear()) + + def status( + self, + status: RenderableType, + *, + spinner: str = "dots", + spinner_style: StyleType = "status.spinner", + speed: float = 1.0, + refresh_per_second: float = 12.5, + ) -> "Status": + """Display a status and spinner. + + Args: + status (RenderableType): A status renderable (str or Text typically). + spinner (str, optional): Name of spinner animation (see python -m rich.spinner). Defaults to "dots". + spinner_style (StyleType, optional): Style of spinner. Defaults to "status.spinner". + speed (float, optional): Speed factor for spinner animation. Defaults to 1.0. + refresh_per_second (float, optional): Number of refreshes per second. Defaults to 12.5. + + Returns: + Status: A Status object that may be used as a context manager. + """ + from .status import Status + + status_renderable = Status( + status, + console=self, + spinner=spinner, + spinner_style=spinner_style, + speed=speed, + refresh_per_second=refresh_per_second, + ) + return status_renderable + + def show_cursor(self, show: bool = True) -> bool: + """Show or hide the cursor. + + Args: + show (bool, optional): Set visibility of the cursor. + """ + if self.is_terminal: + self.control(Control.show_cursor(show)) + return True + return False + + def set_alt_screen(self, enable: bool = True) -> bool: + """Enables alternative screen mode. + + Note, if you enable this mode, you should ensure that is disabled before + the application exits. See :meth:`~rich.Console.screen` for a context manager + that handles this for you. + + Args: + enable (bool, optional): Enable (True) or disable (False) alternate screen. Defaults to True. + + Returns: + bool: True if the control codes were written. + + """ + changed = False + if self.is_terminal and not self.legacy_windows: + self.control(Control.alt_screen(enable)) + changed = True + self._is_alt_screen = enable + return changed + + @property + def is_alt_screen(self) -> bool: + """Check if the alt screen was enabled. + + Returns: + bool: True if the alt screen was enabled, otherwise False. + """ + return self._is_alt_screen + + def set_window_title(self, title: str) -> bool: + """Set the title of the console terminal window. + + Warning: There is no means within Rich of "resetting" the window title to its + previous value, meaning the title you set will persist even after your application + exits. + + ``fish`` shell resets the window title before and after each command by default, + negating this issue. Windows Terminal and command prompt will also reset the title for you. + Most other shells and terminals, however, do not do this. + + Some terminals may require configuration changes before you can set the title. + Some terminals may not support setting the title at all. + + Other software (including the terminal itself, the shell, custom prompts, plugins, etc.) + may also set the terminal window title. This could result in whatever value you write + using this method being overwritten. + + Args: + title (str): The new title of the terminal window. + + Returns: + bool: True if the control code to change the terminal title was + written, otherwise False. Note that a return value of True + does not guarantee that the window title has actually changed, + since the feature may be unsupported/disabled in some terminals. + """ + if self.is_terminal: + self.control(Control.title(title)) + return True + return False + + def screen( + self, hide_cursor: bool = True, style: Optional[StyleType] = None + ) -> "ScreenContext": + """Context manager to enable and disable 'alternative screen' mode. + + Args: + hide_cursor (bool, optional): Also hide the cursor. Defaults to False. + style (Style, optional): Optional style for screen. Defaults to None. + + Returns: + ~ScreenContext: Context which enables alternate screen on enter, and disables it on exit. + """ + return ScreenContext(self, hide_cursor=hide_cursor, style=style or "") + + def measure( + self, renderable: RenderableType, *, options: Optional[ConsoleOptions] = None + ) -> Measurement: + """Measure a renderable. Returns a :class:`~rich.measure.Measurement` object which contains + information regarding the number of characters required to print the renderable. + + Args: + renderable (RenderableType): Any renderable or string. + options (Optional[ConsoleOptions], optional): Options to use when measuring, or None + to use default options. Defaults to None. + + Returns: + Measurement: A measurement of the renderable. + """ + measurement = Measurement.get(self, options or self.options, renderable) + return measurement + + def render( + self, renderable: RenderableType, options: Optional[ConsoleOptions] = None + ) -> Iterable[Segment]: + """Render an object in to an iterable of `Segment` instances. + + This method contains the logic for rendering objects with the console protocol. + You are unlikely to need to use it directly, unless you are extending the library. + + Args: + renderable (RenderableType): An object supporting the console protocol, or + an object that may be converted to a string. + options (ConsoleOptions, optional): An options object, or None to use self.options. Defaults to None. + + Returns: + Iterable[Segment]: An iterable of segments that may be rendered. + """ + + _options = options or self.options + if _options.max_width < 1: + # No space to render anything. This prevents potential recursion errors. + return + render_iterable: RenderResult + + renderable = rich_cast(renderable) + if hasattr(renderable, "__rich_console__") and not isclass(renderable): + render_iterable = renderable.__rich_console__(self, _options) # type: ignore[union-attr] + elif isinstance(renderable, str): + text_renderable = self.render_str( + renderable, highlight=_options.highlight, markup=_options.markup + ) + render_iterable = text_renderable.__rich_console__(self, _options) + else: + raise errors.NotRenderableError( + f"Unable to render {renderable!r}; " + "A str, Segment or object with __rich_console__ method is required" + ) + + try: + iter_render = iter(render_iterable) + except TypeError: + raise errors.NotRenderableError( + f"object {render_iterable!r} is not renderable" + ) + _Segment = Segment + _options = _options.reset_height() + for render_output in iter_render: + if isinstance(render_output, _Segment): + yield render_output + else: + yield from self.render(render_output, _options) + + def render_lines( + self, + renderable: RenderableType, + options: Optional[ConsoleOptions] = None, + *, + style: Optional[Style] = None, + pad: bool = True, + new_lines: bool = False, + ) -> List[List[Segment]]: + """Render objects in to a list of lines. + + The output of render_lines is useful when further formatting of rendered console text + is required, such as the Panel class which draws a border around any renderable object. + + Args: + renderable (RenderableType): Any object renderable in the console. + options (Optional[ConsoleOptions], optional): Console options, or None to use self.options. Default to ``None``. + style (Style, optional): Optional style to apply to renderables. Defaults to ``None``. + pad (bool, optional): Pad lines shorter than render width. Defaults to ``True``. + new_lines (bool, optional): Include "\n" characters at end of lines. + + Returns: + List[List[Segment]]: A list of lines, where a line is a list of Segment objects. + """ + with self._lock: + render_options = options or self.options + _rendered = self.render(renderable, render_options) + if style: + _rendered = Segment.apply_style(_rendered, style) + + render_height = render_options.height + if render_height is not None: + render_height = max(0, render_height) + + lines = list( + islice( + Segment.split_and_crop_lines( + _rendered, + render_options.max_width, + include_new_lines=new_lines, + pad=pad, + style=style, + ), + None, + render_height, + ) + ) + if render_options.height is not None: + extra_lines = render_options.height - len(lines) + if extra_lines > 0: + pad_line = [ + [Segment(" " * render_options.max_width, style), Segment("\n")] + if new_lines + else [Segment(" " * render_options.max_width, style)] + ] + lines.extend(pad_line * extra_lines) + + return lines + + def render_str( + self, + text: str, + *, + style: Union[str, Style] = "", + justify: Optional[JustifyMethod] = None, + overflow: Optional[OverflowMethod] = None, + emoji: Optional[bool] = None, + markup: Optional[bool] = None, + highlight: Optional[bool] = None, + highlighter: Optional[HighlighterType] = None, + ) -> "Text": + """Convert a string to a Text instance. This is called automatically if + you print or log a string. + + Args: + text (str): Text to render. + style (Union[str, Style], optional): Style to apply to rendered text. + justify (str, optional): Justify method: "default", "left", "center", "full", or "right". Defaults to ``None``. + overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to ``None``. + emoji (Optional[bool], optional): Enable emoji, or ``None`` to use Console default. + markup (Optional[bool], optional): Enable markup, or ``None`` to use Console default. + highlight (Optional[bool], optional): Enable highlighting, or ``None`` to use Console default. + highlighter (HighlighterType, optional): Optional highlighter to apply. + Returns: + ConsoleRenderable: Renderable object. + + """ + emoji_enabled = emoji or (emoji is None and self._emoji) + markup_enabled = markup or (markup is None and self._markup) + highlight_enabled = highlight or (highlight is None and self._highlight) + + if markup_enabled: + rich_text = render_markup( + text, + style=style, + emoji=emoji_enabled, + emoji_variant=self._emoji_variant, + ) + rich_text.justify = justify + rich_text.overflow = overflow + else: + rich_text = Text( + _emoji_replace(text, default_variant=self._emoji_variant) + if emoji_enabled + else text, + justify=justify, + overflow=overflow, + style=style, + ) + + _highlighter = (highlighter or self.highlighter) if highlight_enabled else None + if _highlighter is not None: + highlight_text = _highlighter(str(rich_text)) + highlight_text.copy_styles(rich_text) + return highlight_text + + return rich_text + + def get_style( + self, name: Union[str, Style], *, default: Optional[Union[Style, str]] = None + ) -> Style: + """Get a Style instance by its theme name or parse a definition. + + Args: + name (str): The name of a style or a style definition. + + Returns: + Style: A Style object. + + Raises: + MissingStyle: If no style could be parsed from name. + + """ + if isinstance(name, Style): + return name + + try: + style = self._theme_stack.get(name) + if style is None: + style = Style.parse(name) + return style.copy() if style.link else style + except errors.StyleSyntaxError as error: + if default is not None: + return self.get_style(default) + raise errors.MissingStyle( + f"Failed to get style {name!r}; {error}" + ) from None + + def _collect_renderables( + self, + objects: Iterable[Any], + sep: str, + end: str, + *, + justify: Optional[JustifyMethod] = None, + emoji: Optional[bool] = None, + markup: Optional[bool] = None, + highlight: Optional[bool] = None, + ) -> List[ConsoleRenderable]: + """Combine a number of renderables and text into one renderable. + + Args: + objects (Iterable[Any]): Anything that Rich can render. + sep (str): String to write between print data. + end (str): String to write at end of print data. + justify (str, optional): One of "left", "right", "center", or "full". Defaults to ``None``. + emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. + markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. + highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. + + Returns: + List[ConsoleRenderable]: A list of things to render. + """ + renderables: List[ConsoleRenderable] = [] + _append = renderables.append + text: List[Text] = [] + append_text = text.append + + append = _append + if justify in ("left", "center", "right"): + + def align_append(renderable: RenderableType) -> None: + _append(Align(renderable, cast(AlignMethod, justify))) + + append = align_append + + _highlighter: HighlighterType = _null_highlighter + if highlight or (highlight is None and self._highlight): + _highlighter = self.highlighter + + def check_text() -> None: + if text: + sep_text = Text(sep, justify=justify, end=end) + append(sep_text.join(text)) + text.clear() + + for renderable in objects: + renderable = rich_cast(renderable) + if isinstance(renderable, str): + append_text( + self.render_str( + renderable, emoji=emoji, markup=markup, highlighter=_highlighter + ) + ) + elif isinstance(renderable, Text): + append_text(renderable) + elif isinstance(renderable, ConsoleRenderable): + check_text() + append(renderable) + elif is_expandable(renderable): + check_text() + append(Pretty(renderable, highlighter=_highlighter)) + else: + append_text(_highlighter(str(renderable))) + + check_text() + + if self.style is not None: + style = self.get_style(self.style) + renderables = [Styled(renderable, style) for renderable in renderables] + + return renderables + + def rule( + self, + title: TextType = "", + *, + characters: str = "─", + style: Union[str, Style] = "rule.line", + align: AlignMethod = "center", + ) -> None: + """Draw a line with optional centered title. + + Args: + title (str, optional): Text to render over the rule. Defaults to "". + characters (str, optional): Character(s) to form the line. Defaults to "─". + style (str, optional): Style of line. Defaults to "rule.line". + align (str, optional): How to align the title, one of "left", "center", or "right". Defaults to "center". + """ + from .rule import Rule + + rule = Rule(title=title, characters=characters, style=style, align=align) + self.print(rule) + + def control(self, *control: Control) -> None: + """Insert non-printing control codes. + + Args: + control_codes (str): Control codes, such as those that may move the cursor. + """ + if not self.is_dumb_terminal: + with self: + self._buffer.extend(_control.segment for _control in control) + + def out( + self, + *objects: Any, + sep: str = " ", + end: str = "\n", + style: Optional[Union[str, Style]] = None, + highlight: Optional[bool] = None, + ) -> None: + """Output to the terminal. This is a low-level way of writing to the terminal which unlike + :meth:`~rich.console.Console.print` won't pretty print, wrap text, or apply markup, but will + optionally apply highlighting and a basic style. + + Args: + sep (str, optional): String to write between print data. Defaults to " ". + end (str, optional): String to write at end of print data. Defaults to "\\\\n". + style (Union[str, Style], optional): A style to apply to output. Defaults to None. + highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use + console default. Defaults to ``None``. + """ + raw_output: str = sep.join(str(_object) for _object in objects) + self.print( + raw_output, + style=style, + highlight=highlight, + emoji=False, + markup=False, + no_wrap=True, + overflow="ignore", + crop=False, + end=end, + ) + + def print( + self, + *objects: Any, + sep: str = " ", + end: str = "\n", + style: Optional[Union[str, Style]] = None, + justify: Optional[JustifyMethod] = None, + overflow: Optional[OverflowMethod] = None, + no_wrap: Optional[bool] = None, + emoji: Optional[bool] = None, + markup: Optional[bool] = None, + highlight: Optional[bool] = None, + width: Optional[int] = None, + height: Optional[int] = None, + crop: bool = True, + soft_wrap: Optional[bool] = None, + new_line_start: bool = False, + ) -> None: + """Print to the console. + + Args: + objects (positional args): Objects to log to the terminal. + sep (str, optional): String to write between print data. Defaults to " ". + end (str, optional): String to write at end of print data. Defaults to "\\\\n". + style (Union[str, Style], optional): A style to apply to output. Defaults to None. + justify (str, optional): Justify method: "default", "left", "right", "center", or "full". Defaults to ``None``. + overflow (str, optional): Overflow method: "ignore", "crop", "fold", or "ellipsis". Defaults to None. + no_wrap (Optional[bool], optional): Disable word wrapping. Defaults to None. + emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. Defaults to ``None``. + markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. Defaults to ``None``. + highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. Defaults to ``None``. + width (Optional[int], optional): Width of output, or ``None`` to auto-detect. Defaults to ``None``. + crop (Optional[bool], optional): Crop output to width of terminal. Defaults to True. + soft_wrap (bool, optional): Enable soft wrap mode which disables word wrapping and cropping of text or ``None`` for + Console default. Defaults to ``None``. + new_line_start (bool, False): Insert a new line at the start if the output contains more than one line. Defaults to ``False``. + """ + if not objects: + objects = (NewLine(),) + + if soft_wrap is None: + soft_wrap = self.soft_wrap + if soft_wrap: + if no_wrap is None: + no_wrap = True + if overflow is None: + overflow = "ignore" + crop = False + render_hooks = self._render_hooks[:] + with self: + renderables = self._collect_renderables( + objects, + sep, + end, + justify=justify, + emoji=emoji, + markup=markup, + highlight=highlight, + ) + for hook in render_hooks: + renderables = hook.process_renderables(renderables) + render_options = self.options.update( + justify=justify, + overflow=overflow, + width=min(width, self.width) if width is not None else NO_CHANGE, + height=height, + no_wrap=no_wrap, + markup=markup, + highlight=highlight, + ) + + new_segments: List[Segment] = [] + extend = new_segments.extend + render = self.render + if style is None: + for renderable in renderables: + extend(render(renderable, render_options)) + else: + for renderable in renderables: + extend( + Segment.apply_style( + render(renderable, render_options), self.get_style(style) + ) + ) + if new_line_start: + if ( + len("".join(segment.text for segment in new_segments).splitlines()) + > 1 + ): + new_segments.insert(0, Segment.line()) + if crop: + buffer_extend = self._buffer.extend + for line in Segment.split_and_crop_lines( + new_segments, self.width, pad=False + ): + buffer_extend(line) + else: + self._buffer.extend(new_segments) + + def print_json( + self, + json: Optional[str] = None, + *, + data: Any = None, + indent: Union[None, int, str] = 2, + highlight: bool = True, + skip_keys: bool = False, + ensure_ascii: bool = False, + check_circular: bool = True, + allow_nan: bool = True, + default: Optional[Callable[[Any], Any]] = None, + sort_keys: bool = False, + ) -> None: + """Pretty prints JSON. Output will be valid JSON. + + Args: + json (Optional[str]): A string containing JSON. + data (Any): If json is not supplied, then encode this data. + indent (Union[None, int, str], optional): Number of spaces to indent. Defaults to 2. + highlight (bool, optional): Enable highlighting of output: Defaults to True. + skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. + ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. + check_circular (bool, optional): Check for circular references. Defaults to True. + allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. + default (Callable, optional): A callable that converts values that can not be encoded + in to something that can be JSON encoded. Defaults to None. + sort_keys (bool, optional): Sort dictionary keys. Defaults to False. + """ + from pip._vendor.rich.json import JSON + + if json is None: + json_renderable = JSON.from_data( + data, + indent=indent, + highlight=highlight, + skip_keys=skip_keys, + ensure_ascii=ensure_ascii, + check_circular=check_circular, + allow_nan=allow_nan, + default=default, + sort_keys=sort_keys, + ) + else: + if not isinstance(json, str): + raise TypeError( + f"json must be str. Did you mean print_json(data={json!r}) ?" + ) + json_renderable = JSON( + json, + indent=indent, + highlight=highlight, + skip_keys=skip_keys, + ensure_ascii=ensure_ascii, + check_circular=check_circular, + allow_nan=allow_nan, + default=default, + sort_keys=sort_keys, + ) + self.print(json_renderable, soft_wrap=True) + + def update_screen( + self, + renderable: RenderableType, + *, + region: Optional[Region] = None, + options: Optional[ConsoleOptions] = None, + ) -> None: + """Update the screen at a given offset. + + Args: + renderable (RenderableType): A Rich renderable. + region (Region, optional): Region of screen to update, or None for entire screen. Defaults to None. + x (int, optional): x offset. Defaults to 0. + y (int, optional): y offset. Defaults to 0. + + Raises: + errors.NoAltScreen: If the Console isn't in alt screen mode. + + """ + if not self.is_alt_screen: + raise errors.NoAltScreen("Alt screen must be enabled to call update_screen") + render_options = options or self.options + if region is None: + x = y = 0 + render_options = render_options.update_dimensions( + render_options.max_width, render_options.height or self.height + ) + else: + x, y, width, height = region + render_options = render_options.update_dimensions(width, height) + + lines = self.render_lines(renderable, options=render_options) + self.update_screen_lines(lines, x, y) + + def update_screen_lines( + self, lines: List[List[Segment]], x: int = 0, y: int = 0 + ) -> None: + """Update lines of the screen at a given offset. + + Args: + lines (List[List[Segment]]): Rendered lines (as produced by :meth:`~rich.Console.render_lines`). + x (int, optional): x offset (column no). Defaults to 0. + y (int, optional): y offset (column no). Defaults to 0. + + Raises: + errors.NoAltScreen: If the Console isn't in alt screen mode. + """ + if not self.is_alt_screen: + raise errors.NoAltScreen("Alt screen must be enabled to call update_screen") + screen_update = ScreenUpdate(lines, x, y) + segments = self.render(screen_update) + self._buffer.extend(segments) + self._check_buffer() + + def print_exception( + self, + *, + width: Optional[int] = 100, + extra_lines: int = 3, + theme: Optional[str] = None, + word_wrap: bool = False, + show_locals: bool = False, + suppress: Iterable[Union[str, ModuleType]] = (), + max_frames: int = 100, + ) -> None: + """Prints a rich render of the last exception and traceback. + + Args: + width (Optional[int], optional): Number of characters used to render code. Defaults to 100. + extra_lines (int, optional): Additional lines of code to render. Defaults to 3. + theme (str, optional): Override pygments theme used in traceback + word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. + show_locals (bool, optional): Enable display of local variables. Defaults to False. + suppress (Iterable[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. + max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. + """ + from .traceback import Traceback + + traceback = Traceback( + width=width, + extra_lines=extra_lines, + theme=theme, + word_wrap=word_wrap, + show_locals=show_locals, + suppress=suppress, + max_frames=max_frames, + ) + self.print(traceback) + + @staticmethod + def _caller_frame_info( + offset: int, + currentframe: Callable[[], Optional[FrameType]] = inspect.currentframe, + ) -> Tuple[str, int, Dict[str, Any]]: + """Get caller frame information. + + Args: + offset (int): the caller offset within the current frame stack. + currentframe (Callable[[], Optional[FrameType]], optional): the callable to use to + retrieve the current frame. Defaults to ``inspect.currentframe``. + + Returns: + Tuple[str, int, Dict[str, Any]]: A tuple containing the filename, the line number and + the dictionary of local variables associated with the caller frame. + + Raises: + RuntimeError: If the stack offset is invalid. + """ + # Ignore the frame of this local helper + offset += 1 + + frame = currentframe() + if frame is not None: + # Use the faster currentframe where implemented + while offset and frame is not None: + frame = frame.f_back + offset -= 1 + assert frame is not None + return frame.f_code.co_filename, frame.f_lineno, frame.f_locals + else: + # Fallback to the slower stack + frame_info = inspect.stack()[offset] + return frame_info.filename, frame_info.lineno, frame_info.frame.f_locals + + def log( + self, + *objects: Any, + sep: str = " ", + end: str = "\n", + style: Optional[Union[str, Style]] = None, + justify: Optional[JustifyMethod] = None, + emoji: Optional[bool] = None, + markup: Optional[bool] = None, + highlight: Optional[bool] = None, + log_locals: bool = False, + _stack_offset: int = 1, + ) -> None: + """Log rich content to the terminal. + + Args: + objects (positional args): Objects to log to the terminal. + sep (str, optional): String to write between print data. Defaults to " ". + end (str, optional): String to write at end of print data. Defaults to "\\\\n". + style (Union[str, Style], optional): A style to apply to output. Defaults to None. + justify (str, optional): One of "left", "right", "center", or "full". Defaults to ``None``. + overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to None. + emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. Defaults to None. + markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. Defaults to None. + highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. Defaults to None. + log_locals (bool, optional): Boolean to enable logging of locals where ``log()`` + was called. Defaults to False. + _stack_offset (int, optional): Offset of caller from end of call stack. Defaults to 1. + """ + if not objects: + objects = (NewLine(),) + + render_hooks = self._render_hooks[:] + + with self: + renderables = self._collect_renderables( + objects, + sep, + end, + justify=justify, + emoji=emoji, + markup=markup, + highlight=highlight, + ) + if style is not None: + renderables = [Styled(renderable, style) for renderable in renderables] + + filename, line_no, locals = self._caller_frame_info(_stack_offset) + link_path = None if filename.startswith("<") else os.path.abspath(filename) + path = filename.rpartition(os.sep)[-1] + if log_locals: + locals_map = { + key: value + for key, value in locals.items() + if not key.startswith("__") + } + renderables.append(render_scope(locals_map, title="[i]locals")) + + renderables = [ + self._log_render( + self, + renderables, + log_time=self.get_datetime(), + path=path, + line_no=line_no, + link_path=link_path, + ) + ] + for hook in render_hooks: + renderables = hook.process_renderables(renderables) + new_segments: List[Segment] = [] + extend = new_segments.extend + render = self.render + render_options = self.options + for renderable in renderables: + extend(render(renderable, render_options)) + buffer_extend = self._buffer.extend + for line in Segment.split_and_crop_lines( + new_segments, self.width, pad=False + ): + buffer_extend(line) + + def _check_buffer(self) -> None: + """Check if the buffer may be rendered. Render it if it can (e.g. Console.quiet is False) + Rendering is supported on Windows, Unix and Jupyter environments. For + legacy Windows consoles, the win32 API is called directly. + This method will also record what it renders if recording is enabled via Console.record. + """ + if self.quiet: + del self._buffer[:] + return + with self._lock: + if self.record: + with self._record_buffer_lock: + self._record_buffer.extend(self._buffer[:]) + + if self._buffer_index == 0: + if self.is_jupyter: # pragma: no cover + from .jupyter import display + + display(self._buffer, self._render_buffer(self._buffer[:])) + del self._buffer[:] + else: + if WINDOWS: + use_legacy_windows_render = False + if self.legacy_windows: + fileno = get_fileno(self.file) + if fileno is not None: + use_legacy_windows_render = ( + fileno in _STD_STREAMS_OUTPUT + ) + + if use_legacy_windows_render: + from pip._vendor.rich._win32_console import LegacyWindowsTerm + from pip._vendor.rich._windows_renderer import legacy_windows_render + + buffer = self._buffer[:] + if self.no_color and self._color_system: + buffer = list(Segment.remove_color(buffer)) + + legacy_windows_render(buffer, LegacyWindowsTerm(self.file)) + else: + # Either a non-std stream on legacy Windows, or modern Windows. + text = self._render_buffer(self._buffer[:]) + # https://bugs.python.org/issue37871 + # https://github.com/python/cpython/issues/82052 + # We need to avoid writing more than 32Kb in a single write, due to the above bug + write = self.file.write + # Worse case scenario, every character is 4 bytes of utf-8 + MAX_WRITE = 32 * 1024 // 4 + try: + if len(text) <= MAX_WRITE: + write(text) + else: + batch: List[str] = [] + batch_append = batch.append + size = 0 + for line in text.splitlines(True): + if size + len(line) > MAX_WRITE and batch: + write("".join(batch)) + batch.clear() + size = 0 + batch_append(line) + size += len(line) + if batch: + write("".join(batch)) + batch.clear() + except UnicodeEncodeError as error: + error.reason = f"{error.reason}\n*** You may need to add PYTHONIOENCODING=utf-8 to your environment ***" + raise + else: + text = self._render_buffer(self._buffer[:]) + try: + self.file.write(text) + except UnicodeEncodeError as error: + error.reason = f"{error.reason}\n*** You may need to add PYTHONIOENCODING=utf-8 to your environment ***" + raise + + self.file.flush() + del self._buffer[:] + + def _render_buffer(self, buffer: Iterable[Segment]) -> str: + """Render buffered output, and clear buffer.""" + output: List[str] = [] + append = output.append + color_system = self._color_system + legacy_windows = self.legacy_windows + not_terminal = not self.is_terminal + if self.no_color and color_system: + buffer = Segment.remove_color(buffer) + for text, style, control in buffer: + if style: + append( + style.render( + text, + color_system=color_system, + legacy_windows=legacy_windows, + ) + ) + elif not (not_terminal and control): + append(text) + + rendered = "".join(output) + return rendered + + def input( + self, + prompt: TextType = "", + *, + markup: bool = True, + emoji: bool = True, + password: bool = False, + stream: Optional[TextIO] = None, + ) -> str: + """Displays a prompt and waits for input from the user. The prompt may contain color / style. + + It works in the same way as Python's builtin :func:`input` function and provides elaborate line editing and history features if Python's builtin :mod:`readline` module is previously loaded. + + Args: + prompt (Union[str, Text]): Text to render in the prompt. + markup (bool, optional): Enable console markup (requires a str prompt). Defaults to True. + emoji (bool, optional): Enable emoji (requires a str prompt). Defaults to True. + password: (bool, optional): Hide typed text. Defaults to False. + stream: (TextIO, optional): Optional file to read input from (rather than stdin). Defaults to None. + + Returns: + str: Text read from stdin. + """ + if prompt: + self.print(prompt, markup=markup, emoji=emoji, end="") + if password: + result = getpass("", stream=stream) + else: + if stream: + result = stream.readline() + else: + result = input() + return result + + def export_text(self, *, clear: bool = True, styles: bool = False) -> str: + """Generate text from console contents (requires record=True argument in constructor). + + Args: + clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. + styles (bool, optional): If ``True``, ansi escape codes will be included. ``False`` for plain text. + Defaults to ``False``. + + Returns: + str: String containing console contents. + + """ + assert ( + self.record + ), "To export console contents set record=True in the constructor or instance" + + with self._record_buffer_lock: + if styles: + text = "".join( + (style.render(text) if style else text) + for text, style, _ in self._record_buffer + ) + else: + text = "".join( + segment.text + for segment in self._record_buffer + if not segment.control + ) + if clear: + del self._record_buffer[:] + return text + + def save_text(self, path: str, *, clear: bool = True, styles: bool = False) -> None: + """Generate text from console and save to a given location (requires record=True argument in constructor). + + Args: + path (str): Path to write text files. + clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. + styles (bool, optional): If ``True``, ansi style codes will be included. ``False`` for plain text. + Defaults to ``False``. + + """ + text = self.export_text(clear=clear, styles=styles) + with open(path, "wt", encoding="utf-8") as write_file: + write_file.write(text) + + def export_html( + self, + *, + theme: Optional[TerminalTheme] = None, + clear: bool = True, + code_format: Optional[str] = None, + inline_styles: bool = False, + ) -> str: + """Generate HTML from console contents (requires record=True argument in constructor). + + Args: + theme (TerminalTheme, optional): TerminalTheme object containing console colors. + clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. + code_format (str, optional): Format string to render HTML. In addition to '{foreground}', + '{background}', and '{code}', should contain '{stylesheet}' if inline_styles is ``False``. + inline_styles (bool, optional): If ``True`` styles will be inlined in to spans, which makes files + larger but easier to cut and paste markup. If ``False``, styles will be embedded in a style tag. + Defaults to False. + + Returns: + str: String containing console contents as HTML. + """ + assert ( + self.record + ), "To export console contents set record=True in the constructor or instance" + fragments: List[str] = [] + append = fragments.append + _theme = theme or DEFAULT_TERMINAL_THEME + stylesheet = "" + + render_code_format = CONSOLE_HTML_FORMAT if code_format is None else code_format + + with self._record_buffer_lock: + if inline_styles: + for text, style, _ in Segment.filter_control( + Segment.simplify(self._record_buffer) + ): + text = escape(text) + if style: + rule = style.get_html_style(_theme) + if style.link: + text = f'{text}' + text = f'{text}' if rule else text + append(text) + else: + styles: Dict[str, int] = {} + for text, style, _ in Segment.filter_control( + Segment.simplify(self._record_buffer) + ): + text = escape(text) + if style: + rule = style.get_html_style(_theme) + style_number = styles.setdefault(rule, len(styles) + 1) + if style.link: + text = f'{text}' + else: + text = f'{text}' + append(text) + stylesheet_rules: List[str] = [] + stylesheet_append = stylesheet_rules.append + for style_rule, style_number in styles.items(): + if style_rule: + stylesheet_append(f".r{style_number} {{{style_rule}}}") + stylesheet = "\n".join(stylesheet_rules) + + rendered_code = render_code_format.format( + code="".join(fragments), + stylesheet=stylesheet, + foreground=_theme.foreground_color.hex, + background=_theme.background_color.hex, + ) + if clear: + del self._record_buffer[:] + return rendered_code + + def save_html( + self, + path: str, + *, + theme: Optional[TerminalTheme] = None, + clear: bool = True, + code_format: str = CONSOLE_HTML_FORMAT, + inline_styles: bool = False, + ) -> None: + """Generate HTML from console contents and write to a file (requires record=True argument in constructor). + + Args: + path (str): Path to write html file. + theme (TerminalTheme, optional): TerminalTheme object containing console colors. + clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. + code_format (str, optional): Format string to render HTML. In addition to '{foreground}', + '{background}', and '{code}', should contain '{stylesheet}' if inline_styles is ``False``. + inline_styles (bool, optional): If ``True`` styles will be inlined in to spans, which makes files + larger but easier to cut and paste markup. If ``False``, styles will be embedded in a style tag. + Defaults to False. + + """ + html = self.export_html( + theme=theme, + clear=clear, + code_format=code_format, + inline_styles=inline_styles, + ) + with open(path, "wt", encoding="utf-8") as write_file: + write_file.write(html) + + def export_svg( + self, + *, + title: str = "Rich", + theme: Optional[TerminalTheme] = None, + clear: bool = True, + code_format: str = CONSOLE_SVG_FORMAT, + font_aspect_ratio: float = 0.61, + unique_id: Optional[str] = None, + ) -> str: + """ + Generate an SVG from the console contents (requires record=True in Console constructor). + + Args: + title (str, optional): The title of the tab in the output image + theme (TerminalTheme, optional): The ``TerminalTheme`` object to use to style the terminal + clear (bool, optional): Clear record buffer after exporting. Defaults to ``True`` + code_format (str, optional): Format string used to generate the SVG. Rich will inject a number of variables + into the string in order to form the final SVG output. The default template used and the variables + injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable. + font_aspect_ratio (float, optional): The width to height ratio of the font used in the ``code_format`` + string. Defaults to 0.61, which is the width to height ratio of Fira Code (the default font). + If you aren't specifying a different font inside ``code_format``, you probably don't need this. + unique_id (str, optional): unique id that is used as the prefix for various elements (CSS styles, node + ids). If not set, this defaults to a computed value based on the recorded content. + """ + + from pip._vendor.rich.cells import cell_len + + style_cache: Dict[Style, str] = {} + + def get_svg_style(style: Style) -> str: + """Convert a Style to CSS rules for SVG.""" + if style in style_cache: + return style_cache[style] + css_rules = [] + color = ( + _theme.foreground_color + if (style.color is None or style.color.is_default) + else style.color.get_truecolor(_theme) + ) + bgcolor = ( + _theme.background_color + if (style.bgcolor is None or style.bgcolor.is_default) + else style.bgcolor.get_truecolor(_theme) + ) + if style.reverse: + color, bgcolor = bgcolor, color + if style.dim: + color = blend_rgb(color, bgcolor, 0.4) + css_rules.append(f"fill: {color.hex}") + if style.bold: + css_rules.append("font-weight: bold") + if style.italic: + css_rules.append("font-style: italic;") + if style.underline: + css_rules.append("text-decoration: underline;") + if style.strike: + css_rules.append("text-decoration: line-through;") + + css = ";".join(css_rules) + style_cache[style] = css + return css + + _theme = theme or SVG_EXPORT_THEME + + width = self.width + char_height = 20 + char_width = char_height * font_aspect_ratio + line_height = char_height * 1.22 + + margin_top = 1 + margin_right = 1 + margin_bottom = 1 + margin_left = 1 + + padding_top = 40 + padding_right = 8 + padding_bottom = 8 + padding_left = 8 + + padding_width = padding_left + padding_right + padding_height = padding_top + padding_bottom + margin_width = margin_left + margin_right + margin_height = margin_top + margin_bottom + + text_backgrounds: List[str] = [] + text_group: List[str] = [] + classes: Dict[str, int] = {} + style_no = 1 + + def escape_text(text: str) -> str: + """HTML escape text and replace spaces with nbsp.""" + return escape(text).replace(" ", " ") + + def make_tag( + name: str, content: Optional[str] = None, **attribs: object + ) -> str: + """Make a tag from name, content, and attributes.""" + + def stringify(value: object) -> str: + if isinstance(value, (float)): + return format(value, "g") + return str(value) + + tag_attribs = " ".join( + f'{k.lstrip("_").replace("_", "-")}="{stringify(v)}"' + for k, v in attribs.items() + ) + return ( + f"<{name} {tag_attribs}>{content}" + if content + else f"<{name} {tag_attribs}/>" + ) + + with self._record_buffer_lock: + segments = list(Segment.filter_control(self._record_buffer)) + if clear: + self._record_buffer.clear() + + if unique_id is None: + unique_id = "terminal-" + str( + zlib.adler32( + ("".join(repr(segment) for segment in segments)).encode( + "utf-8", + "ignore", + ) + + title.encode("utf-8", "ignore") + ) + ) + y = 0 + for y, line in enumerate(Segment.split_and_crop_lines(segments, length=width)): + x = 0 + for text, style, _control in line: + style = style or Style() + rules = get_svg_style(style) + if rules not in classes: + classes[rules] = style_no + style_no += 1 + class_name = f"r{classes[rules]}" + + if style.reverse: + has_background = True + background = ( + _theme.foreground_color.hex + if style.color is None + else style.color.get_truecolor(_theme).hex + ) + else: + bgcolor = style.bgcolor + has_background = bgcolor is not None and not bgcolor.is_default + background = ( + _theme.background_color.hex + if style.bgcolor is None + else style.bgcolor.get_truecolor(_theme).hex + ) + + text_length = cell_len(text) + if has_background: + text_backgrounds.append( + make_tag( + "rect", + fill=background, + x=x * char_width, + y=y * line_height + 1.5, + width=char_width * text_length, + height=line_height + 0.25, + shape_rendering="crispEdges", + ) + ) + + if text != " " * len(text): + text_group.append( + make_tag( + "text", + escape_text(text), + _class=f"{unique_id}-{class_name}", + x=x * char_width, + y=y * line_height + char_height, + textLength=char_width * len(text), + clip_path=f"url(#{unique_id}-line-{y})", + ) + ) + x += cell_len(text) + + line_offsets = [line_no * line_height + 1.5 for line_no in range(y)] + lines = "\n".join( + f""" + {make_tag("rect", x=0, y=offset, width=char_width * width, height=line_height + 0.25)} + """ + for line_no, offset in enumerate(line_offsets) + ) + + styles = "\n".join( + f".{unique_id}-r{rule_no} {{ {css} }}" for css, rule_no in classes.items() + ) + backgrounds = "".join(text_backgrounds) + matrix = "".join(text_group) + + terminal_width = ceil(width * char_width + padding_width) + terminal_height = (y + 1) * line_height + padding_height + chrome = make_tag( + "rect", + fill=_theme.background_color.hex, + stroke="rgba(255,255,255,0.35)", + stroke_width="1", + x=margin_left, + y=margin_top, + width=terminal_width, + height=terminal_height, + rx=8, + ) + + title_color = _theme.foreground_color.hex + if title: + chrome += make_tag( + "text", + escape_text(title), + _class=f"{unique_id}-title", + fill=title_color, + text_anchor="middle", + x=terminal_width // 2, + y=margin_top + char_height + 6, + ) + chrome += f""" + + + + + + """ + + svg = code_format.format( + unique_id=unique_id, + char_width=char_width, + char_height=char_height, + line_height=line_height, + terminal_width=char_width * width - 1, + terminal_height=(y + 1) * line_height - 1, + width=terminal_width + margin_width, + height=terminal_height + margin_height, + terminal_x=margin_left + padding_left, + terminal_y=margin_top + padding_top, + styles=styles, + chrome=chrome, + backgrounds=backgrounds, + matrix=matrix, + lines=lines, + ) + return svg + + def save_svg( + self, + path: str, + *, + title: str = "Rich", + theme: Optional[TerminalTheme] = None, + clear: bool = True, + code_format: str = CONSOLE_SVG_FORMAT, + font_aspect_ratio: float = 0.61, + unique_id: Optional[str] = None, + ) -> None: + """Generate an SVG file from the console contents (requires record=True in Console constructor). + + Args: + path (str): The path to write the SVG to. + title (str, optional): The title of the tab in the output image + theme (TerminalTheme, optional): The ``TerminalTheme`` object to use to style the terminal + clear (bool, optional): Clear record buffer after exporting. Defaults to ``True`` + code_format (str, optional): Format string used to generate the SVG. Rich will inject a number of variables + into the string in order to form the final SVG output. The default template used and the variables + injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable. + font_aspect_ratio (float, optional): The width to height ratio of the font used in the ``code_format`` + string. Defaults to 0.61, which is the width to height ratio of Fira Code (the default font). + If you aren't specifying a different font inside ``code_format``, you probably don't need this. + unique_id (str, optional): unique id that is used as the prefix for various elements (CSS styles, node + ids). If not set, this defaults to a computed value based on the recorded content. + """ + svg = self.export_svg( + title=title, + theme=theme, + clear=clear, + code_format=code_format, + font_aspect_ratio=font_aspect_ratio, + unique_id=unique_id, + ) + with open(path, "wt", encoding="utf-8") as write_file: + write_file.write(svg) + + +def _svg_hash(svg_main_code: str) -> str: + """Returns a unique hash for the given SVG main code. + + Args: + svg_main_code (str): The content we're going to inject in the SVG envelope. + + Returns: + str: a hash of the given content + """ + return str(zlib.adler32(svg_main_code.encode())) + + +if __name__ == "__main__": # pragma: no cover + console = Console(record=True) + + console.log( + "JSONRPC [i]request[/i]", + 5, + 1.3, + True, + False, + None, + { + "jsonrpc": "2.0", + "method": "subtract", + "params": {"minuend": 42, "subtrahend": 23}, + "id": 3, + }, + ) + + console.log("Hello, World!", "{'a': 1}", repr(console)) + + console.print( + { + "name": None, + "empty": [], + "quiz": { + "sport": { + "answered": True, + "q1": { + "question": "Which one is correct team name in NBA?", + "options": [ + "New York Bulls", + "Los Angeles Kings", + "Golden State Warriors", + "Huston Rocket", + ], + "answer": "Huston Rocket", + }, + }, + "maths": { + "answered": False, + "q1": { + "question": "5 + 7 = ?", + "options": [10, 11, 12, 13], + "answer": 12, + }, + "q2": { + "question": "12 - 8 = ?", + "options": [1, 2, 3, 4], + "answer": 4, + }, + }, + }, + } + ) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py new file mode 100644 index 0000000..65fdf56 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py @@ -0,0 +1,37 @@ +from typing import Optional, TYPE_CHECKING + +from .jupyter import JupyterMixin +from .measure import Measurement + +if TYPE_CHECKING: + from .console import Console, ConsoleOptions, RenderableType, RenderResult + + +class Constrain(JupyterMixin): + """Constrain the width of a renderable to a given number of characters. + + Args: + renderable (RenderableType): A renderable object. + width (int, optional): The maximum width (in characters) to render. Defaults to 80. + """ + + def __init__(self, renderable: "RenderableType", width: Optional[int] = 80) -> None: + self.renderable = renderable + self.width = width + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": + if self.width is None: + yield self.renderable + else: + child_options = options.update_width(min(self.width, options.max_width)) + yield from console.render(self.renderable, child_options) + + def __rich_measure__( + self, console: "Console", options: "ConsoleOptions" + ) -> "Measurement": + if self.width is not None: + options = options.update_width(self.width) + measurement = Measurement.get(console, options, self.renderable) + return measurement diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py new file mode 100644 index 0000000..e29cf36 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py @@ -0,0 +1,167 @@ +from itertools import zip_longest +from typing import ( + Iterator, + Iterable, + List, + Optional, + Union, + overload, + TypeVar, + TYPE_CHECKING, +) + +if TYPE_CHECKING: + from .console import ( + Console, + ConsoleOptions, + JustifyMethod, + OverflowMethod, + RenderResult, + RenderableType, + ) + from .text import Text + +from .cells import cell_len +from .measure import Measurement + +T = TypeVar("T") + + +class Renderables: + """A list subclass which renders its contents to the console.""" + + def __init__( + self, renderables: Optional[Iterable["RenderableType"]] = None + ) -> None: + self._renderables: List["RenderableType"] = ( + list(renderables) if renderables is not None else [] + ) + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": + """Console render method to insert line-breaks.""" + yield from self._renderables + + def __rich_measure__( + self, console: "Console", options: "ConsoleOptions" + ) -> "Measurement": + dimensions = [ + Measurement.get(console, options, renderable) + for renderable in self._renderables + ] + if not dimensions: + return Measurement(1, 1) + _min = max(dimension.minimum for dimension in dimensions) + _max = max(dimension.maximum for dimension in dimensions) + return Measurement(_min, _max) + + def append(self, renderable: "RenderableType") -> None: + self._renderables.append(renderable) + + def __iter__(self) -> Iterable["RenderableType"]: + return iter(self._renderables) + + +class Lines: + """A list subclass which can render to the console.""" + + def __init__(self, lines: Iterable["Text"] = ()) -> None: + self._lines: List["Text"] = list(lines) + + def __repr__(self) -> str: + return f"Lines({self._lines!r})" + + def __iter__(self) -> Iterator["Text"]: + return iter(self._lines) + + @overload + def __getitem__(self, index: int) -> "Text": + ... + + @overload + def __getitem__(self, index: slice) -> List["Text"]: + ... + + def __getitem__(self, index: Union[slice, int]) -> Union["Text", List["Text"]]: + return self._lines[index] + + def __setitem__(self, index: int, value: "Text") -> "Lines": + self._lines[index] = value + return self + + def __len__(self) -> int: + return self._lines.__len__() + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": + """Console render method to insert line-breaks.""" + yield from self._lines + + def append(self, line: "Text") -> None: + self._lines.append(line) + + def extend(self, lines: Iterable["Text"]) -> None: + self._lines.extend(lines) + + def pop(self, index: int = -1) -> "Text": + return self._lines.pop(index) + + def justify( + self, + console: "Console", + width: int, + justify: "JustifyMethod" = "left", + overflow: "OverflowMethod" = "fold", + ) -> None: + """Justify and overflow text to a given width. + + Args: + console (Console): Console instance. + width (int): Number of characters per line. + justify (str, optional): Default justify method for text: "left", "center", "full" or "right". Defaults to "left". + overflow (str, optional): Default overflow for text: "crop", "fold", or "ellipsis". Defaults to "fold". + + """ + from .text import Text + + if justify == "left": + for line in self._lines: + line.truncate(width, overflow=overflow, pad=True) + elif justify == "center": + for line in self._lines: + line.rstrip() + line.truncate(width, overflow=overflow) + line.pad_left((width - cell_len(line.plain)) // 2) + line.pad_right(width - cell_len(line.plain)) + elif justify == "right": + for line in self._lines: + line.rstrip() + line.truncate(width, overflow=overflow) + line.pad_left(width - cell_len(line.plain)) + elif justify == "full": + for line_index, line in enumerate(self._lines): + if line_index == len(self._lines) - 1: + break + words = line.split(" ") + words_size = sum(cell_len(word.plain) for word in words) + num_spaces = len(words) - 1 + spaces = [1 for _ in range(num_spaces)] + index = 0 + if spaces: + while words_size + num_spaces < width: + spaces[len(spaces) - index - 1] += 1 + num_spaces += 1 + index = (index + 1) % len(spaces) + tokens: List[Text] = [] + for index, (word, next_word) in enumerate( + zip_longest(words, words[1:]) + ): + tokens.append(word) + if index < len(spaces): + style = word.get_style_at_offset(console, -1) + next_style = next_word.get_style_at_offset(console, 0) + space_style = style if style == next_style else line.style + tokens.append(Text(" " * spaces[index], style=space_style)) + self[line_index] = Text("").join(tokens) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/control.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/control.py new file mode 100644 index 0000000..88fcb92 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/control.py @@ -0,0 +1,225 @@ +import sys +import time +from typing import TYPE_CHECKING, Callable, Dict, Iterable, List, Union + +if sys.version_info >= (3, 8): + from typing import Final +else: + from pip._vendor.typing_extensions import Final # pragma: no cover + +from .segment import ControlCode, ControlType, Segment + +if TYPE_CHECKING: + from .console import Console, ConsoleOptions, RenderResult + +STRIP_CONTROL_CODES: Final = [ + 7, # Bell + 8, # Backspace + 11, # Vertical tab + 12, # Form feed + 13, # Carriage return +] +_CONTROL_STRIP_TRANSLATE: Final = { + _codepoint: None for _codepoint in STRIP_CONTROL_CODES +} + +CONTROL_ESCAPE: Final = { + 7: "\\a", + 8: "\\b", + 11: "\\v", + 12: "\\f", + 13: "\\r", +} + +CONTROL_CODES_FORMAT: Dict[int, Callable[..., str]] = { + ControlType.BELL: lambda: "\x07", + ControlType.CARRIAGE_RETURN: lambda: "\r", + ControlType.HOME: lambda: "\x1b[H", + ControlType.CLEAR: lambda: "\x1b[2J", + ControlType.ENABLE_ALT_SCREEN: lambda: "\x1b[?1049h", + ControlType.DISABLE_ALT_SCREEN: lambda: "\x1b[?1049l", + ControlType.SHOW_CURSOR: lambda: "\x1b[?25h", + ControlType.HIDE_CURSOR: lambda: "\x1b[?25l", + ControlType.CURSOR_UP: lambda param: f"\x1b[{param}A", + ControlType.CURSOR_DOWN: lambda param: f"\x1b[{param}B", + ControlType.CURSOR_FORWARD: lambda param: f"\x1b[{param}C", + ControlType.CURSOR_BACKWARD: lambda param: f"\x1b[{param}D", + ControlType.CURSOR_MOVE_TO_COLUMN: lambda param: f"\x1b[{param+1}G", + ControlType.ERASE_IN_LINE: lambda param: f"\x1b[{param}K", + ControlType.CURSOR_MOVE_TO: lambda x, y: f"\x1b[{y+1};{x+1}H", + ControlType.SET_WINDOW_TITLE: lambda title: f"\x1b]0;{title}\x07", +} + + +class Control: + """A renderable that inserts a control code (non printable but may move cursor). + + Args: + *codes (str): Positional arguments are either a :class:`~rich.segment.ControlType` enum or a + tuple of ControlType and an integer parameter + """ + + __slots__ = ["segment"] + + def __init__(self, *codes: Union[ControlType, ControlCode]) -> None: + control_codes: List[ControlCode] = [ + (code,) if isinstance(code, ControlType) else code for code in codes + ] + _format_map = CONTROL_CODES_FORMAT + rendered_codes = "".join( + _format_map[code](*parameters) for code, *parameters in control_codes + ) + self.segment = Segment(rendered_codes, None, control_codes) + + @classmethod + def bell(cls) -> "Control": + """Ring the 'bell'.""" + return cls(ControlType.BELL) + + @classmethod + def home(cls) -> "Control": + """Move cursor to 'home' position.""" + return cls(ControlType.HOME) + + @classmethod + def move(cls, x: int = 0, y: int = 0) -> "Control": + """Move cursor relative to current position. + + Args: + x (int): X offset. + y (int): Y offset. + + Returns: + ~Control: Control object. + + """ + + def get_codes() -> Iterable[ControlCode]: + control = ControlType + if x: + yield ( + control.CURSOR_FORWARD if x > 0 else control.CURSOR_BACKWARD, + abs(x), + ) + if y: + yield ( + control.CURSOR_DOWN if y > 0 else control.CURSOR_UP, + abs(y), + ) + + control = cls(*get_codes()) + return control + + @classmethod + def move_to_column(cls, x: int, y: int = 0) -> "Control": + """Move to the given column, optionally add offset to row. + + Returns: + x (int): absolute x (column) + y (int): optional y offset (row) + + Returns: + ~Control: Control object. + """ + + return ( + cls( + (ControlType.CURSOR_MOVE_TO_COLUMN, x), + ( + ControlType.CURSOR_DOWN if y > 0 else ControlType.CURSOR_UP, + abs(y), + ), + ) + if y + else cls((ControlType.CURSOR_MOVE_TO_COLUMN, x)) + ) + + @classmethod + def move_to(cls, x: int, y: int) -> "Control": + """Move cursor to absolute position. + + Args: + x (int): x offset (column) + y (int): y offset (row) + + Returns: + ~Control: Control object. + """ + return cls((ControlType.CURSOR_MOVE_TO, x, y)) + + @classmethod + def clear(cls) -> "Control": + """Clear the screen.""" + return cls(ControlType.CLEAR) + + @classmethod + def show_cursor(cls, show: bool) -> "Control": + """Show or hide the cursor.""" + return cls(ControlType.SHOW_CURSOR if show else ControlType.HIDE_CURSOR) + + @classmethod + def alt_screen(cls, enable: bool) -> "Control": + """Enable or disable alt screen.""" + if enable: + return cls(ControlType.ENABLE_ALT_SCREEN, ControlType.HOME) + else: + return cls(ControlType.DISABLE_ALT_SCREEN) + + @classmethod + def title(cls, title: str) -> "Control": + """Set the terminal window title + + Args: + title (str): The new terminal window title + """ + return cls((ControlType.SET_WINDOW_TITLE, title)) + + def __str__(self) -> str: + return self.segment.text + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": + if self.segment.text: + yield self.segment + + +def strip_control_codes( + text: str, _translate_table: Dict[int, None] = _CONTROL_STRIP_TRANSLATE +) -> str: + """Remove control codes from text. + + Args: + text (str): A string possibly contain control codes. + + Returns: + str: String with control codes removed. + """ + return text.translate(_translate_table) + + +def escape_control_codes( + text: str, + _translate_table: Dict[int, str] = CONTROL_ESCAPE, +) -> str: + """Replace control codes with their "escaped" equivalent in the given text. + (e.g. "\b" becomes "\\b") + + Args: + text (str): A string possibly containing control codes. + + Returns: + str: String with control codes replaced with their escaped version. + """ + return text.translate(_translate_table) + + +if __name__ == "__main__": # pragma: no cover + from pip._vendor.rich.console import Console + + console = Console() + console.print("Look at the title of your terminal window ^") + # console.print(Control((ControlType.SET_WINDOW_TITLE, "Hello, world!"))) + for i in range(10): + console.set_window_title("🚀 Loading" + "." * i) + time.sleep(0.5) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py new file mode 100644 index 0000000..dca3719 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py @@ -0,0 +1,190 @@ +from typing import Dict + +from .style import Style + +DEFAULT_STYLES: Dict[str, Style] = { + "none": Style.null(), + "reset": Style( + color="default", + bgcolor="default", + dim=False, + bold=False, + italic=False, + underline=False, + blink=False, + blink2=False, + reverse=False, + conceal=False, + strike=False, + ), + "dim": Style(dim=True), + "bright": Style(dim=False), + "bold": Style(bold=True), + "strong": Style(bold=True), + "code": Style(reverse=True, bold=True), + "italic": Style(italic=True), + "emphasize": Style(italic=True), + "underline": Style(underline=True), + "blink": Style(blink=True), + "blink2": Style(blink2=True), + "reverse": Style(reverse=True), + "strike": Style(strike=True), + "black": Style(color="black"), + "red": Style(color="red"), + "green": Style(color="green"), + "yellow": Style(color="yellow"), + "magenta": Style(color="magenta"), + "cyan": Style(color="cyan"), + "white": Style(color="white"), + "inspect.attr": Style(color="yellow", italic=True), + "inspect.attr.dunder": Style(color="yellow", italic=True, dim=True), + "inspect.callable": Style(bold=True, color="red"), + "inspect.async_def": Style(italic=True, color="bright_cyan"), + "inspect.def": Style(italic=True, color="bright_cyan"), + "inspect.class": Style(italic=True, color="bright_cyan"), + "inspect.error": Style(bold=True, color="red"), + "inspect.equals": Style(), + "inspect.help": Style(color="cyan"), + "inspect.doc": Style(dim=True), + "inspect.value.border": Style(color="green"), + "live.ellipsis": Style(bold=True, color="red"), + "layout.tree.row": Style(dim=False, color="red"), + "layout.tree.column": Style(dim=False, color="blue"), + "logging.keyword": Style(bold=True, color="yellow"), + "logging.level.notset": Style(dim=True), + "logging.level.debug": Style(color="green"), + "logging.level.info": Style(color="blue"), + "logging.level.warning": Style(color="red"), + "logging.level.error": Style(color="red", bold=True), + "logging.level.critical": Style(color="red", bold=True, reverse=True), + "log.level": Style.null(), + "log.time": Style(color="cyan", dim=True), + "log.message": Style.null(), + "log.path": Style(dim=True), + "repr.ellipsis": Style(color="yellow"), + "repr.indent": Style(color="green", dim=True), + "repr.error": Style(color="red", bold=True), + "repr.str": Style(color="green", italic=False, bold=False), + "repr.brace": Style(bold=True), + "repr.comma": Style(bold=True), + "repr.ipv4": Style(bold=True, color="bright_green"), + "repr.ipv6": Style(bold=True, color="bright_green"), + "repr.eui48": Style(bold=True, color="bright_green"), + "repr.eui64": Style(bold=True, color="bright_green"), + "repr.tag_start": Style(bold=True), + "repr.tag_name": Style(color="bright_magenta", bold=True), + "repr.tag_contents": Style(color="default"), + "repr.tag_end": Style(bold=True), + "repr.attrib_name": Style(color="yellow", italic=False), + "repr.attrib_equal": Style(bold=True), + "repr.attrib_value": Style(color="magenta", italic=False), + "repr.number": Style(color="cyan", bold=True, italic=False), + "repr.number_complex": Style(color="cyan", bold=True, italic=False), # same + "repr.bool_true": Style(color="bright_green", italic=True), + "repr.bool_false": Style(color="bright_red", italic=True), + "repr.none": Style(color="magenta", italic=True), + "repr.url": Style(underline=True, color="bright_blue", italic=False, bold=False), + "repr.uuid": Style(color="bright_yellow", bold=False), + "repr.call": Style(color="magenta", bold=True), + "repr.path": Style(color="magenta"), + "repr.filename": Style(color="bright_magenta"), + "rule.line": Style(color="bright_green"), + "rule.text": Style.null(), + "json.brace": Style(bold=True), + "json.bool_true": Style(color="bright_green", italic=True), + "json.bool_false": Style(color="bright_red", italic=True), + "json.null": Style(color="magenta", italic=True), + "json.number": Style(color="cyan", bold=True, italic=False), + "json.str": Style(color="green", italic=False, bold=False), + "json.key": Style(color="blue", bold=True), + "prompt": Style.null(), + "prompt.choices": Style(color="magenta", bold=True), + "prompt.default": Style(color="cyan", bold=True), + "prompt.invalid": Style(color="red"), + "prompt.invalid.choice": Style(color="red"), + "pretty": Style.null(), + "scope.border": Style(color="blue"), + "scope.key": Style(color="yellow", italic=True), + "scope.key.special": Style(color="yellow", italic=True, dim=True), + "scope.equals": Style(color="red"), + "table.header": Style(bold=True), + "table.footer": Style(bold=True), + "table.cell": Style.null(), + "table.title": Style(italic=True), + "table.caption": Style(italic=True, dim=True), + "traceback.error": Style(color="red", italic=True), + "traceback.border.syntax_error": Style(color="bright_red"), + "traceback.border": Style(color="red"), + "traceback.text": Style.null(), + "traceback.title": Style(color="red", bold=True), + "traceback.exc_type": Style(color="bright_red", bold=True), + "traceback.exc_value": Style.null(), + "traceback.offset": Style(color="bright_red", bold=True), + "bar.back": Style(color="grey23"), + "bar.complete": Style(color="rgb(249,38,114)"), + "bar.finished": Style(color="rgb(114,156,31)"), + "bar.pulse": Style(color="rgb(249,38,114)"), + "progress.description": Style.null(), + "progress.filesize": Style(color="green"), + "progress.filesize.total": Style(color="green"), + "progress.download": Style(color="green"), + "progress.elapsed": Style(color="yellow"), + "progress.percentage": Style(color="magenta"), + "progress.remaining": Style(color="cyan"), + "progress.data.speed": Style(color="red"), + "progress.spinner": Style(color="green"), + "status.spinner": Style(color="green"), + "tree": Style(), + "tree.line": Style(), + "markdown.paragraph": Style(), + "markdown.text": Style(), + "markdown.em": Style(italic=True), + "markdown.emph": Style(italic=True), # For commonmark backwards compatibility + "markdown.strong": Style(bold=True), + "markdown.code": Style(bold=True, color="cyan", bgcolor="black"), + "markdown.code_block": Style(color="cyan", bgcolor="black"), + "markdown.block_quote": Style(color="magenta"), + "markdown.list": Style(color="cyan"), + "markdown.item": Style(), + "markdown.item.bullet": Style(color="yellow", bold=True), + "markdown.item.number": Style(color="yellow", bold=True), + "markdown.hr": Style(color="yellow"), + "markdown.h1.border": Style(), + "markdown.h1": Style(bold=True), + "markdown.h2": Style(bold=True, underline=True), + "markdown.h3": Style(bold=True), + "markdown.h4": Style(bold=True, dim=True), + "markdown.h5": Style(underline=True), + "markdown.h6": Style(italic=True), + "markdown.h7": Style(italic=True, dim=True), + "markdown.link": Style(color="bright_blue"), + "markdown.link_url": Style(color="blue", underline=True), + "markdown.s": Style(strike=True), + "iso8601.date": Style(color="blue"), + "iso8601.time": Style(color="magenta"), + "iso8601.timezone": Style(color="yellow"), +} + + +if __name__ == "__main__": # pragma: no cover + import argparse + import io + + from pip._vendor.rich.console import Console + from pip._vendor.rich.table import Table + from pip._vendor.rich.text import Text + + parser = argparse.ArgumentParser() + parser.add_argument("--html", action="store_true", help="Export as HTML table") + args = parser.parse_args() + html: bool = args.html + console = Console(record=True, width=70, file=io.StringIO()) if html else Console() + + table = Table("Name", "Styling") + + for style_name, style in DEFAULT_STYLES.items(): + table.add_row(Text(style_name, style=style), str(style)) + + console.print(table) + if html: + print(console.export_html(inline_styles=True)) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py new file mode 100644 index 0000000..ad36183 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py @@ -0,0 +1,37 @@ +import os +import platform + +from pip._vendor.rich import inspect +from pip._vendor.rich.console import Console, get_windows_console_features +from pip._vendor.rich.panel import Panel +from pip._vendor.rich.pretty import Pretty + + +def report() -> None: # pragma: no cover + """Print a report to the terminal with debugging information""" + console = Console() + inspect(console) + features = get_windows_console_features() + inspect(features) + + env_names = ( + "TERM", + "COLORTERM", + "CLICOLOR", + "NO_COLOR", + "TERM_PROGRAM", + "COLUMNS", + "LINES", + "JUPYTER_COLUMNS", + "JUPYTER_LINES", + "JPY_PARENT_PID", + "VSCODE_VERBOSE_LOGGING", + ) + env = {name: os.getenv(name) for name in env_names} + console.print(Panel.fit((Pretty(env)), title="[b]Environment Variables")) + + console.print(f'platform="{platform.system()}"') + + +if __name__ == "__main__": # pragma: no cover + report() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py new file mode 100644 index 0000000..791f046 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py @@ -0,0 +1,96 @@ +import sys +from typing import TYPE_CHECKING, Optional, Union + +from .jupyter import JupyterMixin +from .segment import Segment +from .style import Style +from ._emoji_codes import EMOJI +from ._emoji_replace import _emoji_replace + +if sys.version_info >= (3, 8): + from typing import Literal +else: + from pip._vendor.typing_extensions import Literal # pragma: no cover + + +if TYPE_CHECKING: + from .console import Console, ConsoleOptions, RenderResult + + +EmojiVariant = Literal["emoji", "text"] + + +class NoEmoji(Exception): + """No emoji by that name.""" + + +class Emoji(JupyterMixin): + __slots__ = ["name", "style", "_char", "variant"] + + VARIANTS = {"text": "\uFE0E", "emoji": "\uFE0F"} + + def __init__( + self, + name: str, + style: Union[str, Style] = "none", + variant: Optional[EmojiVariant] = None, + ) -> None: + """A single emoji character. + + Args: + name (str): Name of emoji. + style (Union[str, Style], optional): Optional style. Defaults to None. + + Raises: + NoEmoji: If the emoji doesn't exist. + """ + self.name = name + self.style = style + self.variant = variant + try: + self._char = EMOJI[name] + except KeyError: + raise NoEmoji(f"No emoji called {name!r}") + if variant is not None: + self._char += self.VARIANTS.get(variant, "") + + @classmethod + def replace(cls, text: str) -> str: + """Replace emoji markup with corresponding unicode characters. + + Args: + text (str): A string with emojis codes, e.g. "Hello :smiley:!" + + Returns: + str: A string with emoji codes replaces with actual emoji. + """ + return _emoji_replace(text) + + def __repr__(self) -> str: + return f"" + + def __str__(self) -> str: + return self._char + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": + yield Segment(self._char, console.get_style(self.style)) + + +if __name__ == "__main__": # pragma: no cover + import sys + + from pip._vendor.rich.columns import Columns + from pip._vendor.rich.console import Console + + console = Console(record=True) + + columns = Columns( + (f":{name}: {name}" for name in sorted(EMOJI.keys()) if "\u200D" not in name), + column_first=True, + ) + + console.print(columns) + if len(sys.argv) > 1: + console.save_html(sys.argv[1]) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/errors.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/errors.py new file mode 100644 index 0000000..0bcbe53 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/errors.py @@ -0,0 +1,34 @@ +class ConsoleError(Exception): + """An error in console operation.""" + + +class StyleError(Exception): + """An error in styles.""" + + +class StyleSyntaxError(ConsoleError): + """Style was badly formatted.""" + + +class MissingStyle(StyleError): + """No such style.""" + + +class StyleStackError(ConsoleError): + """Style stack is invalid.""" + + +class NotRenderableError(ConsoleError): + """Object is not renderable.""" + + +class MarkupError(ConsoleError): + """Markup was badly formatted.""" + + +class LiveError(ConsoleError): + """Error related to Live display.""" + + +class NoAltScreen(ConsoleError): + """Alt screen mode was required.""" diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py new file mode 100644 index 0000000..4b0b0da --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py @@ -0,0 +1,57 @@ +import io +from typing import IO, TYPE_CHECKING, Any, List + +from .ansi import AnsiDecoder +from .text import Text + +if TYPE_CHECKING: + from .console import Console + + +class FileProxy(io.TextIOBase): + """Wraps a file (e.g. sys.stdout) and redirects writes to a console.""" + + def __init__(self, console: "Console", file: IO[str]) -> None: + self.__console = console + self.__file = file + self.__buffer: List[str] = [] + self.__ansi_decoder = AnsiDecoder() + + @property + def rich_proxied_file(self) -> IO[str]: + """Get proxied file.""" + return self.__file + + def __getattr__(self, name: str) -> Any: + return getattr(self.__file, name) + + def write(self, text: str) -> int: + if not isinstance(text, str): + raise TypeError(f"write() argument must be str, not {type(text).__name__}") + buffer = self.__buffer + lines: List[str] = [] + while text: + line, new_line, text = text.partition("\n") + if new_line: + lines.append("".join(buffer) + line) + buffer.clear() + else: + buffer.append(line) + break + if lines: + console = self.__console + with console: + output = Text("\n").join( + self.__ansi_decoder.decode_line(line) for line in lines + ) + console.print(output) + return len(text) + + def flush(self) -> None: + output = "".join(self.__buffer) + if output: + self.__console.print(output) + del self.__buffer[:] + + def fileno(self) -> int: + return self.__file.fileno() diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py new file mode 100644 index 0000000..99f118e --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py @@ -0,0 +1,89 @@ +# coding: utf-8 +"""Functions for reporting filesizes. Borrowed from https://github.com/PyFilesystem/pyfilesystem2 + +The functions declared in this module should cover the different +use cases needed to generate a string representation of a file size +using several different units. Since there are many standards regarding +file size units, three different functions have been implemented. + +See Also: + * `Wikipedia: Binary prefix `_ + +""" + +__all__ = ["decimal"] + +from typing import Iterable, List, Optional, Tuple + + +def _to_str( + size: int, + suffixes: Iterable[str], + base: int, + *, + precision: Optional[int] = 1, + separator: Optional[str] = " ", +) -> str: + if size == 1: + return "1 byte" + elif size < base: + return "{:,} bytes".format(size) + + for i, suffix in enumerate(suffixes, 2): # noqa: B007 + unit = base**i + if size < unit: + break + return "{:,.{precision}f}{separator}{}".format( + (base * size / unit), + suffix, + precision=precision, + separator=separator, + ) + + +def pick_unit_and_suffix(size: int, suffixes: List[str], base: int) -> Tuple[int, str]: + """Pick a suffix and base for the given size.""" + for i, suffix in enumerate(suffixes): + unit = base**i + if size < unit * base: + break + return unit, suffix + + +def decimal( + size: int, + *, + precision: Optional[int] = 1, + separator: Optional[str] = " ", +) -> str: + """Convert a filesize in to a string (powers of 1000, SI prefixes). + + In this convention, ``1000 B = 1 kB``. + + This is typically the format used to advertise the storage + capacity of USB flash drives and the like (*256 MB* meaning + actually a storage capacity of more than *256 000 000 B*), + or used by **Mac OS X** since v10.6 to report file sizes. + + Arguments: + int (size): A file size. + int (precision): The number of decimal places to include (default = 1). + str (separator): The string to separate the value from the units (default = " "). + + Returns: + `str`: A string containing a abbreviated file size and units. + + Example: + >>> filesize.decimal(30000) + '30.0 kB' + >>> filesize.decimal(30000, precision=2, separator="") + '30.00kB' + + """ + return _to_str( + size, + ("kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"), + 1000, + precision=precision, + separator=separator, + ) diff --git a/venv/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py b/venv/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py new file mode 100644 index 0000000..c264679 --- /dev/null +++ b/venv/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py @@ -0,0 +1,232 @@ +import re +from abc import ABC, abstractmethod +from typing import List, Union + +from .text import Span, Text + + +def _combine_regex(*regexes: str) -> str: + """Combine a number of regexes in to a single regex. + + Returns: + str: New regex with all regexes ORed together. + """ + return "|".join(regexes) + + +class Highlighter(ABC): + """Abstract base class for highlighters.""" + + def __call__(self, text: Union[str, Text]) -> Text: + """Highlight a str or Text instance. + + Args: + text (Union[str, ~Text]): Text to highlight. + + Raises: + TypeError: If not called with text or str. + + Returns: + Text: A test instance with highlighting applied. + """ + if isinstance(text, str): + highlight_text = Text(text) + elif isinstance(text, Text): + highlight_text = text.copy() + else: + raise TypeError(f"str or Text instance required, not {text!r}") + self.highlight(highlight_text) + return highlight_text + + @abstractmethod + def highlight(self, text: Text) -> None: + """Apply highlighting in place to text. + + Args: + text (~Text): A text object highlight. + """ + + +class NullHighlighter(Highlighter): + """A highlighter object that doesn't highlight. + + May be used to disable highlighting entirely. + + """ + + def highlight(self, text: Text) -> None: + """Nothing to do""" + + +class RegexHighlighter(Highlighter): + """Applies highlighting from a list of regular expressions.""" + + highlights: List[str] = [] + base_style: str = "" + + def highlight(self, text: Text) -> None: + """Highlight :class:`rich.text.Text` using regular expressions. + + Args: + text (~Text): Text to highlighted. + + """ + + highlight_regex = text.highlight_regex + for re_highlight in self.highlights: + highlight_regex(re_highlight, style_prefix=self.base_style) + + +class ReprHighlighter(RegexHighlighter): + """Highlights the text typically produced from ``__repr__`` methods.""" + + base_style = "repr." + highlights = [ + r"(?P<)(?P[-\w.:|]*)(?P[\w\W]*)(?P>)", + r'(?P[\w_]{1,50})=(?P"?[\w_]+"?)?', + r"(?P[][{}()])", + _combine_regex( + r"(?P[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})", + r"(?P([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})", + r"(?P(?:[0-9A-Fa-f]{1,2}-){7}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{1,2}:){7}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{4}\.){3}[0-9A-Fa-f]{4})", + r"(?P(?:[0-9A-Fa-f]{1,2}-){5}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{1,2}:){5}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})", + r"(?P[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})", + r"(?P[\w.]*?)\(", + r"\b(?PTrue)\b|\b(?PFalse)\b|\b(?PNone)\b", + r"(?P\.\.\.)", + r"(?P(?(?\B(/[-\w._+]+)*\/)(?P[-\w._+]*)?", + r"(?b?'''.*?(?(file|https|http|ws|wss)://[-0-9a-zA-Z$_+!`(),.?/;:&=%#]*)", + ), + ] + + +class JSONHighlighter(RegexHighlighter): + """Highlights JSON""" + + # Captures the start and end of JSON strings, handling escaped quotes + JSON_STR = r"(?b?\".*?(?[\{\[\(\)\]\}])", + r"\b(?Ptrue)\b|\b(?Pfalse)\b|\b(?Pnull)\b", + r"(?P(? None: + super().highlight(text) + + # Additional work to handle highlighting JSON keys + plain = text.plain + append = text.spans.append + whitespace = self.JSON_WHITESPACE + for match in re.finditer(self.JSON_STR, plain): + start, end = match.span() + cursor = end + while cursor < len(plain): + char = plain[cursor] + cursor += 1 + if char == ":": + append(Span(start, end, "json.key")) + elif char in whitespace: + continue + break + + +class ISO8601Highlighter(RegexHighlighter): + """Highlights the ISO8601 date time strings. + Regex reference: https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s07.html + """ + + base_style = "iso8601." + highlights = [ + # + # Dates + # + # Calendar month (e.g. 2008-08). The hyphen is required + r"^(?P[0-9]{4})-(?P1[0-2]|0[1-9])$", + # Calendar date w/o hyphens (e.g. 20080830) + r"^(?P(?P[0-9]{4})(?P1[0-2]|0[1-9])(?P3[01]|0[1-9]|[12][0-9]))$", + # Ordinal date (e.g. 2008-243). The hyphen is optional + r"^(?P(?P[0-9]{4})-?(?P36[0-6]|3[0-5][0-9]|[12][0-9]{2}|0[1-9][0-9]|00[1-9]))$", + # + # Weeks + # + # Week of the year (e.g., 2008-W35). The hyphen is optional + r"^(?P(?P[0-9]{4})-?W(?P5[0-3]|[1-4][0-9]|0[1-9]))$", + # Week date (e.g., 2008-W35-6). The hyphens are optional + r"^(?P(?P[0-9]{4})-?W(?P5[0-3]|[1-4][0-9]|0[1-9])-?(?P[1-7]))$", + # + # Times + # + # Hours and minutes (e.g., 17:21). The colon is optional + r"^(?P

' : '\U0001d4ab', + '\\' : '\U0001d4ac', + '\\' : '\U0000211b', + '\\' : '\U0001d4ae', + '\\' : '\U0001d4af', + '\\' : '\U0001d4b0', + '\\' : '\U0001d4b1', + '\\' : '\U0001d4b2', + '\\' : '\U0001d4b3', + '\\' : '\U0001d4b4', + '\\' : '\U0001d4b5', + '\\' : '\U0001d5ba', + '\\' : '\U0001d5bb', + '\\' : '\U0001d5bc', + '\\' : '\U0001d5bd', + '\\' : '\U0001d5be', + '\\' : '\U0001d5bf', + '\\' : '\U0001d5c0', + '\\' : '\U0001d5c1', + '\\' : '\U0001d5c2', + '\\' : '\U0001d5c3', + '\\' : '\U0001d5c4', + '\\' : '\U0001d5c5', + '\\' : '\U0001d5c6', + '\\' : '\U0001d5c7', + '\\' : '\U0001d5c8', + '\\